@sockethub/server 5.0.0-alpha.11 → 5.0.0-alpha.12
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/dist/defaults.json +4 -0
- package/dist/index.js +46734 -46237
- package/dist/index.js.map +198 -196
- package/dist/platform.js +17926 -1483
- package/dist/platform.js.map +180 -31
- package/package.json +14 -14
- package/res/sockethub-client.js +17452 -288
- package/res/sockethub-client.min.js +32 -4
- package/src/bootstrap/init.test-helpers.ts +75 -0
- package/src/bootstrap/init.test.ts +70 -106
- package/src/bootstrap/init.ts +45 -27
- package/src/bootstrap/load-platforms.ts +39 -8
- package/src/config.ts +12 -1
- package/src/defaults.json +4 -0
- package/src/index.ts +9 -7
- package/src/janitor.ts +3 -1
- package/src/listener.ts +8 -9
- package/src/middleware/create-activity-object.ts +1 -1
- package/src/middleware/expand-activity-stream.test.data.ts +30 -23
- package/src/middleware/expand-activity-stream.ts +11 -8
- package/src/middleware/store-credentials.test.ts +5 -1
- package/src/middleware/store-credentials.ts +11 -5
- package/src/middleware/validate.test.data.ts +132 -16
- package/src/middleware/validate.test.ts +6 -2
- package/src/middleware/validate.ts +137 -30
- package/src/middleware.ts +26 -22
- package/src/platform-instance.test.ts +41 -6
- package/src/platform-instance.ts +164 -25
- package/src/platform.test.ts +11 -2
- package/src/platform.ts +135 -19
- package/src/process-manager.ts +30 -4
- package/src/rate-limiter.ts +5 -1
- package/src/routes.ts +16 -8
- package/src/sockethub.ts +192 -83
|
@@ -1,4 +1,32 @@
|
|
|
1
|
-
(()=>{var j=Object.create;var{getPrototypeOf:b,defineProperty:I,getOwnPropertyNames:u,getOwnPropertyDescriptor:l}=Object,f=Object.prototype.hasOwnProperty;var v=(z,B,D)=>{D=z!=null?j(b(z)):{};let G=B||!z||!z.__esModule?I(D,"default",{value:z,enumerable:!0}):D;for(let W of u(z))if(!f.call(G,W))I(G,W,{get:()=>z[W],enumerable:!0});return G},P=new WeakMap,m=(z)=>{var B=P.get(z),D;if(B)return B;if(B=I({},"__esModule",{value:!0}),z&&typeof z==="object"||typeof z==="function")u(z).map((G)=>!f.call(B,G)&&I(B,G,{get:()=>z[G],enumerable:!(D=l(z,G))||D.enumerable}));return P.set(z,B),B},c=(z,B)=>()=>(B||z((B={exports:{}}).exports,B),B.exports);var a=(z,B)=>{for(var D in B)I(z,D,{get:B[D],enumerable:!0,configurable:!0,set:(G)=>B[D]=()=>G})};var g=c((Dz,N)=>{var r=Object.prototype.hasOwnProperty,Z="~";function L(){}if(Object.create){if(L.prototype=Object.create(null),!new L().__proto__)Z=!1}function s(z,B,D){this.fn=z,this.context=B,this.once=D||!1}function x(z,B,D,G,W){if(typeof D!=="function")throw TypeError("The listener must be a function");var R=new s(D,G||z,W),Q=Z?Z+B:B;if(!z._events[Q])z._events[Q]=R,z._eventsCount++;else if(!z._events[Q].fn)z._events[Q].push(R);else z._events[Q]=[z._events[Q],R];return z}function V(z,B){if(--z._eventsCount===0)z._events=new L;else delete z._events[B]}function Y(){this._events=new L,this._eventsCount=0}Y.prototype.eventNames=function(){var B=[],D,G;if(this._eventsCount===0)return B;for(G in D=this._events)if(r.call(D,G))B.push(Z?G.slice(1):G);if(Object.getOwnPropertySymbols)return B.concat(Object.getOwnPropertySymbols(D));return B};Y.prototype.listeners=function(B){var D=Z?Z+B:B,G=this._events[D];if(!G)return[];if(G.fn)return[G.fn];for(var W=0,R=G.length,Q=Array(R);W<R;W++)Q[W]=G[W].fn;return Q};Y.prototype.listenerCount=function(B){var D=Z?Z+B:B,G=this._events[D];if(!G)return 0;if(G.fn)return 1;return G.length};Y.prototype.emit=function(B,D,G,W,R,Q){var $=Z?Z+B:B;if(!this._events[$])return!1;var J=this._events[$],K=arguments.length,T,X;if(J.fn){if(J.once)this.removeListener(B,J.fn,void 0,!0);switch(K){case 1:return J.fn.call(J.context),!0;case 2:return J.fn.call(J.context,D),!0;case 3:return J.fn.call(J.context,D,G),!0;case 4:return J.fn.call(J.context,D,G,W),!0;case 5:return J.fn.call(J.context,D,G,W,R),!0;case 6:return J.fn.call(J.context,D,G,W,R,Q),!0}for(X=1,T=Array(K-1);X<K;X++)T[X-1]=arguments[X];J.fn.apply(J.context,T)}else{var p=J.length,F;for(X=0;X<p;X++){if(J[X].once)this.removeListener(B,J[X].fn,void 0,!0);switch(K){case 1:J[X].fn.call(J[X].context);break;case 2:J[X].fn.call(J[X].context,D);break;case 3:J[X].fn.call(J[X].context,D,G);break;case 4:J[X].fn.call(J[X].context,D,G,W);break;default:if(!T)for(F=1,T=Array(K-1);F<K;F++)T[F-1]=arguments[F];J[X].fn.apply(J[X].context,T)}}}return!0};Y.prototype.on=function(B,D,G){return x(this,B,D,G,!1)};Y.prototype.once=function(B,D,G){return x(this,B,D,G,!0)};Y.prototype.removeListener=function(B,D,G,W){var R=Z?Z+B:B;if(!this._events[R])return this;if(!D)return V(this,R),this;var Q=this._events[R];if(Q.fn){if(Q.fn===D&&(!W||Q.once)&&(!G||Q.context===G))V(this,R)}else{for(var $=0,J=[],K=Q.length;$<K;$++)if(Q[$].fn!==D||W&&!Q[$].once||G&&Q[$].context!==G)J.push(Q[$]);if(J.length)this._events[R]=J.length===1?J[0]:J;else V(this,R)}return this};Y.prototype.removeAllListeners=function(B){var D;if(B){if(D=Z?Z+B:B,this._events[D])V(this,D)}else this._events=new L,this._eventsCount=0;return this};Y.prototype.off=Y.prototype.removeListener;Y.prototype.addListener=Y.prototype.on;Y.prefixed=Z;Y.EventEmitter=Y;if(typeof N<"u")N.exports=Y});var zz={};a(zz,{default:()=>M});var d=v(g(),1);var H=d.default;/*!
|
|
1
|
+
(()=>{var Sz=Object.create;var{getPrototypeOf:Ez,defineProperty:S1,getOwnPropertyNames:BW,getOwnPropertyDescriptor:kz}=Object,HW=Object.prototype.hasOwnProperty;function VW(w){return this[w]}var fz,Cz,C5=(w,Q,W)=>{var Z=w!=null&&typeof w==="object";if(Z){var Y=Q?fz??=new WeakMap:Cz??=new WeakMap,J=Y.get(w);if(J)return J}W=w!=null?Sz(Ez(w)):{};let X=Q||!w||!w.__esModule?S1(W,"default",{value:w,enumerable:!0}):W;for(let q of BW(w))if(!HW.call(X,q))S1(X,q,{get:VW.bind(w,q),enumerable:!0});if(Z)Y.set(w,X);return X},MW=(w)=>{var Q=(KW??=new WeakMap).get(w),W;if(Q)return Q;if(Q=S1({},"__esModule",{value:!0}),w&&typeof w==="object"||typeof w==="function"){for(var Z of BW(w))if(!HW.call(Q,Z))S1(Q,Z,{get:VW.bind(w,Z),enumerable:!(W=kz(w,Z))||W.enumerable})}return KW.set(w,Q),Q},KW,N=(w,Q)=>()=>(Q||w((Q={exports:{}}).exports,Q),Q.exports);var vz=(w)=>w;function yz(w,Q){this[w]=vz.bind(null,Q)}var LW=(w,Q)=>{for(var W in Q)S1(w,W,{get:Q[W],enumerable:!0,configurable:!0,set:yz.bind(Q,W)})};var uz=(w,Q)=>()=>(w&&(Q=w(w=0)),Q);var hz=((w)=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(w,{get:(Q,W)=>(typeof require<"u"?require:Q)[W]}):w)(function(w){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+w+'" is not supported')});var AW=N((Ij,L8)=>{var _z=Object.prototype.hasOwnProperty,gw="~";function E1(){}if(Object.create){if(E1.prototype=Object.create(null),!new E1().__proto__)gw=!1}function xz(w,Q,W){this.fn=w,this.context=Q,this.once=W||!1}function $W(w,Q,W,Z,Y){if(typeof W!=="function")throw TypeError("The listener must be a function");var J=new xz(W,Z||w,Y),X=gw?gw+Q:Q;if(!w._events[X])w._events[X]=J,w._eventsCount++;else if(!w._events[X].fn)w._events[X].push(J);else w._events[X]=[w._events[X],J];return w}function v5(w,Q){if(--w._eventsCount===0)w._events=new E1;else delete w._events[Q]}function kw(){this._events=new E1,this._eventsCount=0}kw.prototype.eventNames=function(){var Q=[],W,Z;if(this._eventsCount===0)return Q;for(Z in W=this._events)if(_z.call(W,Z))Q.push(gw?Z.slice(1):Z);if(Object.getOwnPropertySymbols)return Q.concat(Object.getOwnPropertySymbols(W));return Q};kw.prototype.listeners=function(Q){var W=gw?gw+Q:Q,Z=this._events[W];if(!Z)return[];if(Z.fn)return[Z.fn];for(var Y=0,J=Z.length,X=Array(J);Y<J;Y++)X[Y]=Z[Y].fn;return X};kw.prototype.listenerCount=function(Q){var W=gw?gw+Q:Q,Z=this._events[W];if(!Z)return 0;if(Z.fn)return 1;return Z.length};kw.prototype.emit=function(Q,W,Z,Y,J,X){var q=gw?gw+Q:Q;if(!this._events[q])return!1;var G=this._events[q],z=arguments.length,F,K;if(G.fn){if(G.once)this.removeListener(Q,G.fn,void 0,!0);switch(z){case 1:return G.fn.call(G.context),!0;case 2:return G.fn.call(G.context,W),!0;case 3:return G.fn.call(G.context,W,Z),!0;case 4:return G.fn.call(G.context,W,Z,Y),!0;case 5:return G.fn.call(G.context,W,Z,Y,J),!0;case 6:return G.fn.call(G.context,W,Z,Y,J,X),!0}for(K=1,F=Array(z-1);K<z;K++)F[K-1]=arguments[K];G.fn.apply(G.context,F)}else{var A=G.length,V;for(K=0;K<A;K++){if(G[K].once)this.removeListener(Q,G[K].fn,void 0,!0);switch(z){case 1:G[K].fn.call(G[K].context);break;case 2:G[K].fn.call(G[K].context,W);break;case 3:G[K].fn.call(G[K].context,W,Z);break;case 4:G[K].fn.call(G[K].context,W,Z,Y);break;default:if(!F)for(V=1,F=Array(z-1);V<z;V++)F[V-1]=arguments[V];G[K].fn.apply(G[K].context,F)}}}return!0};kw.prototype.on=function(Q,W,Z){return $W(this,Q,W,Z,!1)};kw.prototype.once=function(Q,W,Z){return $W(this,Q,W,Z,!0)};kw.prototype.removeListener=function(Q,W,Z,Y){var J=gw?gw+Q:Q;if(!this._events[J])return this;if(!W)return v5(this,J),this;var X=this._events[J];if(X.fn){if(X.fn===W&&(!Y||X.once)&&(!Z||X.context===Z))v5(this,J)}else{for(var q=0,G=[],z=X.length;q<z;q++)if(X[q].fn!==W||Y&&!X[q].once||Z&&X[q].context!==Z)G.push(X[q]);if(G.length)this._events[J]=G.length===1?G[0]:G;else v5(this,J)}return this};kw.prototype.removeAllListeners=function(Q){var W;if(Q){if(W=gw?gw+Q:Q,this._events[W])v5(this,W)}else this._events=new E1,this._eventsCount=0;return this};kw.prototype.off=kw.prototype.removeListener;kw.prototype.addListener=kw.prototype.on;kw.prefixed=gw;kw.EventEmitter=kw;if(typeof L8<"u")L8.exports=kw});var f1=N((o)=>{Object.defineProperty(o,"__esModule",{value:!0});o.regexpCode=o.getEsmExportName=o.getProperty=o.safeStringify=o.stringify=o.strConcat=o.addCodeArg=o.str=o._=o.nil=o._Code=o.Name=o.IDENTIFIER=o._CodeOrName=void 0;class x5{}o._CodeOrName=x5;o.IDENTIFIER=/^[a-z$_][a-z$_0-9]*$/i;class c6 extends x5{constructor(w){super();if(!o.IDENTIFIER.test(w))throw Error("CodeGen: name must be a valid identifier");this.str=w}toString(){return this.str}emptyStr(){return!1}get names(){return{[this.str]:1}}}o.Name=c6;class B0 extends x5{constructor(w){super();this._items=typeof w==="string"?[w]:w}toString(){return this.str}emptyStr(){if(this._items.length>1)return!1;let w=this._items[0];return w===""||w==='""'}get str(){var w;return(w=this._str)!==null&&w!==void 0?w:this._str=this._items.reduce((Q,W)=>`${Q}${W}`,"")}get names(){var w;return(w=this._names)!==null&&w!==void 0?w:this._names=this._items.reduce((Q,W)=>{if(W instanceof c6)Q[W.str]=(Q[W.str]||0)+1;return Q},{})}}o._Code=B0;o.nil=new B0("");function fW(w,...Q){let W=[w[0]],Z=0;while(Z<Q.length)u8(W,Q[Z]),W.push(w[++Z]);return new B0(W)}o._=fW;var y8=new B0("+");function CW(w,...Q){let W=[k1(w[0])],Z=0;while(Z<Q.length)W.push(y8),u8(W,Q[Z]),W.push(y8,k1(w[++Z]));return az(W),new B0(W)}o.str=CW;function u8(w,Q){if(Q instanceof B0)w.push(...Q._items);else if(Q instanceof c6)w.push(Q);else w.push(ez(Q))}o.addCodeArg=u8;function az(w){let Q=1;while(Q<w.length-1){if(w[Q]===y8){let W=tz(w[Q-1],w[Q+1]);if(W!==void 0){w.splice(Q-1,3,W);continue}w[Q++]="+"}Q++}}function tz(w,Q){if(Q==='""')return w;if(w==='""')return Q;if(typeof w=="string"){if(Q instanceof c6||w[w.length-1]!=='"')return;if(typeof Q!="string")return`${w.slice(0,-1)}${Q}"`;if(Q[0]==='"')return w.slice(0,-1)+Q.slice(1);return}if(typeof Q=="string"&&Q[0]==='"'&&!(w instanceof c6))return`"${w}${Q.slice(1)}`;return}function oz(w,Q){return Q.emptyStr()?w:w.emptyStr()?Q:CW`${w}${Q}`}o.strConcat=oz;function ez(w){return typeof w=="number"||typeof w=="boolean"||w===null?w:k1(Array.isArray(w)?w.join(","):w)}function w3(w){return new B0(k1(w))}o.stringify=w3;function k1(w){return JSON.stringify(w).replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029")}o.safeStringify=k1;function Q3(w){return typeof w=="string"&&o.IDENTIFIER.test(w)?new B0(`.${w}`):fW`[${w}]`}o.getProperty=Q3;function W3(w){if(typeof w=="string"&&o.IDENTIFIER.test(w))return new B0(`${w}`);throw Error(`CodeGen: invalid export name: ${w}, use explicit $id name mapping`)}o.getEsmExportName=W3;function Z3(w){return new B0(w.toString())}o.regexpCode=Z3});var _8=N((dw)=>{Object.defineProperty(dw,"__esModule",{value:!0});dw.ValueScope=dw.ValueScopeName=dw.Scope=dw.varKinds=dw.UsedValueState=void 0;var cw=f1();class vW extends Error{constructor(w){super(`CodeGen: "code" for ${w} not defined`);this.value=w.value}}var l5;(function(w){w[w.Started=0]="Started",w[w.Completed=1]="Completed"})(l5||(dw.UsedValueState=l5={}));dw.varKinds={const:new cw.Name("const"),let:new cw.Name("let"),var:new cw.Name("var")};class h8{constructor({prefixes:w,parent:Q}={}){this._names={},this._prefixes=w,this._parent=Q}toName(w){return w instanceof cw.Name?w:this.name(w)}name(w){return new cw.Name(this._newName(w))}_newName(w){let Q=this._names[w]||this._nameGroup(w);return`${w}${Q.index++}`}_nameGroup(w){var Q,W;if(((W=(Q=this._parent)===null||Q===void 0?void 0:Q._prefixes)===null||W===void 0?void 0:W.has(w))||this._prefixes&&!this._prefixes.has(w))throw Error(`CodeGen: prefix "${w}" is not allowed in this scope`);return this._names[w]={prefix:w,index:0}}}dw.Scope=h8;class g8 extends cw.Name{constructor(w,Q){super(Q);this.prefix=w}setValue(w,{property:Q,itemIndex:W}){this.value=w,this.scopePath=cw._`.${new cw.Name(Q)}[${W}]`}}dw.ValueScopeName=g8;var Y3=cw._`\n`;class yW extends h8{constructor(w){super(w);this._values={},this._scope=w.scope,this.opts={...w,_n:w.lines?Y3:cw.nil}}get(){return this._scope}name(w){return new g8(w,this._newName(w))}value(w,Q){var W;if(Q.ref===void 0)throw Error("CodeGen: ref must be passed in value");let Z=this.toName(w),{prefix:Y}=Z,J=(W=Q.key)!==null&&W!==void 0?W:Q.ref,X=this._values[Y];if(X){let z=X.get(J);if(z)return z}else X=this._values[Y]=new Map;X.set(J,Z);let q=this._scope[Y]||(this._scope[Y]=[]),G=q.length;return q[G]=Q.ref,Z.setValue(Q,{property:Y,itemIndex:G}),Z}getValue(w,Q){let W=this._values[w];if(!W)return;return W.get(Q)}scopeRefs(w,Q=this._values){return this._reduceValues(Q,(W)=>{if(W.scopePath===void 0)throw Error(`CodeGen: name "${W}" has no value`);return cw._`${w}${W.scopePath}`})}scopeCode(w=this._values,Q,W){return this._reduceValues(w,(Z)=>{if(Z.value===void 0)throw Error(`CodeGen: name "${Z}" has no value`);return Z.value.code},Q,W)}_reduceValues(w,Q,W={},Z){let Y=cw.nil;for(let J in w){let X=w[J];if(!X)continue;let q=W[J]=W[J]||new Map;X.forEach((G)=>{if(q.has(G))return;q.set(G,l5.Started);let z=Q(G);if(z){let F=this.opts.es5?dw.varKinds.var:dw.varKinds.const;Y=cw._`${Y}${F} ${G} = ${z};${this.opts._n}`}else if(z=Z===null||Z===void 0?void 0:Z(G))Y=cw._`${Y}${z}${this.opts._n}`;else throw new vW(G);q.set(G,l5.Completed)})}return Y}}dw.ValueScope=yW});var m=N((_)=>{Object.defineProperty(_,"__esModule",{value:!0});_.or=_.and=_.not=_.CodeGen=_.operators=_.varKinds=_.ValueScopeName=_.ValueScope=_.Scope=_.Name=_.regexpCode=_.stringify=_.getProperty=_.nil=_.strConcat=_.str=_._=void 0;var d=f1(),H0=_8(),t0=f1();Object.defineProperty(_,"_",{enumerable:!0,get:function(){return t0._}});Object.defineProperty(_,"str",{enumerable:!0,get:function(){return t0.str}});Object.defineProperty(_,"strConcat",{enumerable:!0,get:function(){return t0.strConcat}});Object.defineProperty(_,"nil",{enumerable:!0,get:function(){return t0.nil}});Object.defineProperty(_,"getProperty",{enumerable:!0,get:function(){return t0.getProperty}});Object.defineProperty(_,"stringify",{enumerable:!0,get:function(){return t0.stringify}});Object.defineProperty(_,"regexpCode",{enumerable:!0,get:function(){return t0.regexpCode}});Object.defineProperty(_,"Name",{enumerable:!0,get:function(){return t0.Name}});var n5=_8();Object.defineProperty(_,"Scope",{enumerable:!0,get:function(){return n5.Scope}});Object.defineProperty(_,"ValueScope",{enumerable:!0,get:function(){return n5.ValueScope}});Object.defineProperty(_,"ValueScopeName",{enumerable:!0,get:function(){return n5.ValueScopeName}});Object.defineProperty(_,"varKinds",{enumerable:!0,get:function(){return n5.varKinds}});_.operators={GT:new d._Code(">"),GTE:new d._Code(">="),LT:new d._Code("<"),LTE:new d._Code("<="),EQ:new d._Code("==="),NEQ:new d._Code("!=="),NOT:new d._Code("!"),OR:new d._Code("||"),AND:new d._Code("&&"),ADD:new d._Code("+")};class o0{optimizeNodes(){return this}optimizeNames(w,Q){return this}}class uW extends o0{constructor(w,Q,W){super();this.varKind=w,this.name=Q,this.rhs=W}render({es5:w,_n:Q}){let W=w?H0.varKinds.var:this.varKind,Z=this.rhs===void 0?"":` = ${this.rhs}`;return`${W} ${this.name}${Z};`+Q}optimizeNames(w,Q){if(!w[this.name.str])return;if(this.rhs)this.rhs=n6(this.rhs,w,Q);return this}get names(){return this.rhs instanceof d._CodeOrName?this.rhs.names:{}}}class i8 extends o0{constructor(w,Q,W){super();this.lhs=w,this.rhs=Q,this.sideEffects=W}render({_n:w}){return`${this.lhs} = ${this.rhs};`+w}optimizeNames(w,Q){if(this.lhs instanceof d.Name&&!w[this.lhs.str]&&!this.sideEffects)return;return this.rhs=n6(this.rhs,w,Q),this}get names(){let w=this.lhs instanceof d.Name?{}:{...this.lhs.names};return d5(w,this.rhs)}}class hW extends i8{constructor(w,Q,W,Z){super(w,W,Z);this.op=Q}render({_n:w}){return`${this.lhs} ${this.op}= ${this.rhs};`+w}}class gW extends o0{constructor(w){super();this.label=w,this.names={}}render({_n:w}){return`${this.label}:`+w}}class _W extends o0{constructor(w){super();this.label=w,this.names={}}render({_n:w}){return`break${this.label?` ${this.label}`:""};`+w}}class xW extends o0{constructor(w){super();this.error=w}render({_n:w}){return`throw ${this.error};`+w}get names(){return this.error.names}}class lW extends o0{constructor(w){super();this.code=w}render({_n:w}){return`${this.code};`+w}optimizeNodes(){return`${this.code}`?this:void 0}optimizeNames(w,Q){return this.code=n6(this.code,w,Q),this}get names(){return this.code instanceof d._CodeOrName?this.code.names:{}}}class r5 extends o0{constructor(w=[]){super();this.nodes=w}render(w){return this.nodes.reduce((Q,W)=>Q+W.render(w),"")}optimizeNodes(){let{nodes:w}=this,Q=w.length;while(Q--){let W=w[Q].optimizeNodes();if(Array.isArray(W))w.splice(Q,1,...W);else if(W)w[Q]=W;else w.splice(Q,1)}return w.length>0?this:void 0}optimizeNames(w,Q){let{nodes:W}=this,Z=W.length;while(Z--){let Y=W[Z];if(Y.optimizeNames(w,Q))continue;J3(w,Y.names),W.splice(Z,1)}return W.length>0?this:void 0}get names(){return this.nodes.reduce((w,Q)=>A6(w,Q.names),{})}}class e0 extends r5{render(w){return"{"+w._n+super.render(w)+"}"+w._n}}class iW extends r5{}class C1 extends e0{}C1.kind="else";class m0 extends e0{constructor(w,Q){super(Q);this.condition=w}render(w){let Q=`if(${this.condition})`+super.render(w);if(this.else)Q+="else "+this.else.render(w);return Q}optimizeNodes(){super.optimizeNodes();let w=this.condition;if(w===!0)return this.nodes;let Q=this.else;if(Q){let W=Q.optimizeNodes();Q=this.else=Array.isArray(W)?new C1(W):W}if(Q){if(w===!1)return Q instanceof m0?Q:Q.nodes;if(this.nodes.length)return this;return new m0(nW(w),Q instanceof m0?[Q]:Q.nodes)}if(w===!1||!this.nodes.length)return;return this}optimizeNames(w,Q){var W;if(this.else=(W=this.else)===null||W===void 0?void 0:W.optimizeNames(w,Q),!(super.optimizeNames(w,Q)||this.else))return;return this.condition=n6(this.condition,w,Q),this}get names(){let w=super.names;if(d5(w,this.condition),this.else)A6(w,this.else.names);return w}}m0.kind="if";class d6 extends e0{}d6.kind="for";class mW extends d6{constructor(w){super();this.iteration=w}render(w){return`for(${this.iteration})`+super.render(w)}optimizeNames(w,Q){if(!super.optimizeNames(w,Q))return;return this.iteration=n6(this.iteration,w,Q),this}get names(){return A6(super.names,this.iteration.names)}}class pW extends d6{constructor(w,Q,W,Z){super();this.varKind=w,this.name=Q,this.from=W,this.to=Z}render(w){let Q=w.es5?H0.varKinds.var:this.varKind,{name:W,from:Z,to:Y}=this;return`for(${Q} ${W}=${Z}; ${W}<${Y}; ${W}++)`+super.render(w)}get names(){let w=d5(super.names,this.from);return d5(w,this.to)}}class x8 extends d6{constructor(w,Q,W,Z){super();this.loop=w,this.varKind=Q,this.name=W,this.iterable=Z}render(w){return`for(${this.varKind} ${this.name} ${this.loop} ${this.iterable})`+super.render(w)}optimizeNames(w,Q){if(!super.optimizeNames(w,Q))return;return this.iterable=n6(this.iterable,w,Q),this}get names(){return A6(super.names,this.iterable.names)}}class i5 extends e0{constructor(w,Q,W){super();this.name=w,this.args=Q,this.async=W}render(w){return`${this.async?"async ":""}function ${this.name}(${this.args})`+super.render(w)}}i5.kind="func";class m5 extends r5{render(w){return"return "+super.render(w)}}m5.kind="return";class cW extends e0{render(w){let Q="try"+super.render(w);if(this.catch)Q+=this.catch.render(w);if(this.finally)Q+=this.finally.render(w);return Q}optimizeNodes(){var w,Q;return super.optimizeNodes(),(w=this.catch)===null||w===void 0||w.optimizeNodes(),(Q=this.finally)===null||Q===void 0||Q.optimizeNodes(),this}optimizeNames(w,Q){var W,Z;return super.optimizeNames(w,Q),(W=this.catch)===null||W===void 0||W.optimizeNames(w,Q),(Z=this.finally)===null||Z===void 0||Z.optimizeNames(w,Q),this}get names(){let w=super.names;if(this.catch)A6(w,this.catch.names);if(this.finally)A6(w,this.finally.names);return w}}class p5 extends e0{constructor(w){super();this.error=w}render(w){return`catch(${this.error})`+super.render(w)}}p5.kind="catch";class c5 extends e0{render(w){return"finally"+super.render(w)}}c5.kind="finally";class dW{constructor(w,Q={}){this._values={},this._blockStarts=[],this._constants={},this.opts={...Q,_n:Q.lines?`
|
|
2
|
+
`:""},this._extScope=w,this._scope=new H0.Scope({parent:w}),this._nodes=[new iW]}toString(){return this._root.render(this.opts)}name(w){return this._scope.name(w)}scopeName(w){return this._extScope.name(w)}scopeValue(w,Q){let W=this._extScope.value(w,Q);return(this._values[W.prefix]||(this._values[W.prefix]=new Set)).add(W),W}getScopeValue(w,Q){return this._extScope.getValue(w,Q)}scopeRefs(w){return this._extScope.scopeRefs(w,this._values)}scopeCode(){return this._extScope.scopeCode(this._values)}_def(w,Q,W,Z){let Y=this._scope.toName(Q);if(W!==void 0&&Z)this._constants[Y.str]=W;return this._leafNode(new uW(w,Y,W)),Y}const(w,Q,W){return this._def(H0.varKinds.const,w,Q,W)}let(w,Q,W){return this._def(H0.varKinds.let,w,Q,W)}var(w,Q,W){return this._def(H0.varKinds.var,w,Q,W)}assign(w,Q,W){return this._leafNode(new i8(w,Q,W))}add(w,Q){return this._leafNode(new hW(w,_.operators.ADD,Q))}code(w){if(typeof w=="function")w();else if(w!==d.nil)this._leafNode(new lW(w));return this}object(...w){let Q=["{"];for(let[W,Z]of w){if(Q.length>1)Q.push(",");if(Q.push(W),W!==Z||this.opts.es5)Q.push(":"),(0,d.addCodeArg)(Q,Z)}return Q.push("}"),new d._Code(Q)}if(w,Q,W){if(this._blockNode(new m0(w)),Q&&W)this.code(Q).else().code(W).endIf();else if(Q)this.code(Q).endIf();else if(W)throw Error('CodeGen: "else" body without "then" body');return this}elseIf(w){return this._elseNode(new m0(w))}else(){return this._elseNode(new C1)}endIf(){return this._endBlockNode(m0,C1)}_for(w,Q){if(this._blockNode(w),Q)this.code(Q).endFor();return this}for(w,Q){return this._for(new mW(w),Q)}forRange(w,Q,W,Z,Y=this.opts.es5?H0.varKinds.var:H0.varKinds.let){let J=this._scope.toName(w);return this._for(new pW(Y,J,Q,W),()=>Z(J))}forOf(w,Q,W,Z=H0.varKinds.const){let Y=this._scope.toName(w);if(this.opts.es5){let J=Q instanceof d.Name?Q:this.var("_arr",Q);return this.forRange("_i",0,d._`${J}.length`,(X)=>{this.var(Y,d._`${J}[${X}]`),W(Y)})}return this._for(new x8("of",Z,Y,Q),()=>W(Y))}forIn(w,Q,W,Z=this.opts.es5?H0.varKinds.var:H0.varKinds.const){if(this.opts.ownProperties)return this.forOf(w,d._`Object.keys(${Q})`,W);let Y=this._scope.toName(w);return this._for(new x8("in",Z,Y,Q),()=>W(Y))}endFor(){return this._endBlockNode(d6)}label(w){return this._leafNode(new gW(w))}break(w){return this._leafNode(new _W(w))}return(w){let Q=new m5;if(this._blockNode(Q),this.code(w),Q.nodes.length!==1)throw Error('CodeGen: "return" should have one node');return this._endBlockNode(m5)}try(w,Q,W){if(!Q&&!W)throw Error('CodeGen: "try" without "catch" and "finally"');let Z=new cW;if(this._blockNode(Z),this.code(w),Q){let Y=this.name("e");this._currNode=Z.catch=new p5(Y),Q(Y)}if(W)this._currNode=Z.finally=new c5,this.code(W);return this._endBlockNode(p5,c5)}throw(w){return this._leafNode(new xW(w))}block(w,Q){if(this._blockStarts.push(this._nodes.length),w)this.code(w).endBlock(Q);return this}endBlock(w){let Q=this._blockStarts.pop();if(Q===void 0)throw Error("CodeGen: not in self-balancing block");let W=this._nodes.length-Q;if(W<0||w!==void 0&&W!==w)throw Error(`CodeGen: wrong number of nodes: ${W} vs ${w} expected`);return this._nodes.length=Q,this}func(w,Q=d.nil,W,Z){if(this._blockNode(new i5(w,Q,W)),Z)this.code(Z).endFunc();return this}endFunc(){return this._endBlockNode(i5)}optimize(w=1){while(w-- >0)this._root.optimizeNodes(),this._root.optimizeNames(this._root.names,this._constants)}_leafNode(w){return this._currNode.nodes.push(w),this}_blockNode(w){this._currNode.nodes.push(w),this._nodes.push(w)}_endBlockNode(w,Q){let W=this._currNode;if(W instanceof w||Q&&W instanceof Q)return this._nodes.pop(),this;throw Error(`CodeGen: not in block "${Q?`${w.kind}/${Q.kind}`:w.kind}"`)}_elseNode(w){let Q=this._currNode;if(!(Q instanceof m0))throw Error('CodeGen: "else" without "if"');return this._currNode=Q.else=w,this}get _root(){return this._nodes[0]}get _currNode(){let w=this._nodes;return w[w.length-1]}set _currNode(w){let Q=this._nodes;Q[Q.length-1]=w}}_.CodeGen=dW;function A6(w,Q){for(let W in Q)w[W]=(w[W]||0)+(Q[W]||0);return w}function d5(w,Q){return Q instanceof d._CodeOrName?A6(w,Q.names):w}function n6(w,Q,W){if(w instanceof d.Name)return Z(w);if(!Y(w))return w;return new d._Code(w._items.reduce((J,X)=>{if(X instanceof d.Name)X=Z(X);if(X instanceof d._Code)J.push(...X._items);else J.push(X);return J},[]));function Z(J){let X=W[J.str];if(X===void 0||Q[J.str]!==1)return J;return delete Q[J.str],X}function Y(J){return J instanceof d._Code&&J._items.some((X)=>X instanceof d.Name&&Q[X.str]===1&&W[X.str]!==void 0)}}function J3(w,Q){for(let W in Q)w[W]=(w[W]||0)-(Q[W]||0)}function nW(w){return typeof w=="boolean"||typeof w=="number"||w===null?!w:d._`!${l8(w)}`}_.not=nW;var X3=rW(_.operators.AND);function q3(...w){return w.reduce(X3)}_.and=q3;var G3=rW(_.operators.OR);function z3(...w){return w.reduce(G3)}_.or=z3;function rW(w){return(Q,W)=>Q===d.nil?W:W===d.nil?Q:d._`${l8(Q)} ${w} ${l8(W)}`}function l8(w){return w instanceof d.Name?w:d._`(${w})`}});var e=N((p)=>{Object.defineProperty(p,"__esModule",{value:!0});p.checkStrictMode=p.getErrorPath=p.Type=p.useFunc=p.setEvaluated=p.evaluatedPropsToName=p.mergeEvaluated=p.eachItem=p.unescapeJsonPointer=p.escapeJsonPointer=p.escapeFragment=p.unescapeFragment=p.schemaRefOrVal=p.schemaHasRulesButRef=p.schemaHasRules=p.checkUnknownRules=p.alwaysValidSchema=p.toHash=void 0;var Fw=m(),F3=f1();function K3(w){let Q={};for(let W of w)Q[W]=!0;return Q}p.toHash=K3;function B3(w,Q){if(typeof Q=="boolean")return Q;if(Object.keys(Q).length===0)return!0;return tW(w,Q),!oW(Q,w.self.RULES.all)}p.alwaysValidSchema=B3;function tW(w,Q=w.schema){let{opts:W,self:Z}=w;if(!W.strictSchema)return;if(typeof Q==="boolean")return;let Y=Z.RULES.keywords;for(let J in Q)if(!Y[J])QZ(w,`unknown keyword: "${J}"`)}p.checkUnknownRules=tW;function oW(w,Q){if(typeof w=="boolean")return!w;for(let W in w)if(Q[W])return!0;return!1}p.schemaHasRules=oW;function H3(w,Q){if(typeof w=="boolean")return!w;for(let W in w)if(W!=="$ref"&&Q.all[W])return!0;return!1}p.schemaHasRulesButRef=H3;function V3({topSchemaRef:w,schemaPath:Q},W,Z,Y){if(!Y){if(typeof W=="number"||typeof W=="boolean")return W;if(typeof W=="string")return Fw._`${W}`}return Fw._`${w}${Q}${(0,Fw.getProperty)(Z)}`}p.schemaRefOrVal=V3;function M3(w){return eW(decodeURIComponent(w))}p.unescapeFragment=M3;function L3(w){return encodeURIComponent(p8(w))}p.escapeFragment=L3;function p8(w){if(typeof w=="number")return`${w}`;return w.replace(/~/g,"~0").replace(/\//g,"~1")}p.escapeJsonPointer=p8;function eW(w){return w.replace(/~1/g,"/").replace(/~0/g,"~")}p.unescapeJsonPointer=eW;function $3(w,Q){if(Array.isArray(w))for(let W of w)Q(W);else Q(w)}p.eachItem=$3;function sW({mergeNames:w,mergeToName:Q,mergeValues:W,resultToName:Z}){return(Y,J,X,q)=>{let G=X===void 0?J:X instanceof Fw.Name?(J instanceof Fw.Name?w(Y,J,X):Q(Y,J,X),X):J instanceof Fw.Name?(Q(Y,X,J),J):W(J,X);return q===Fw.Name&&!(G instanceof Fw.Name)?Z(Y,G):G}}p.mergeEvaluated={props:sW({mergeNames:(w,Q,W)=>w.if(Fw._`${W} !== true && ${Q} !== undefined`,()=>{w.if(Fw._`${Q} === true`,()=>w.assign(W,!0),()=>w.assign(W,Fw._`${W} || {}`).code(Fw._`Object.assign(${W}, ${Q})`))}),mergeToName:(w,Q,W)=>w.if(Fw._`${W} !== true`,()=>{if(Q===!0)w.assign(W,!0);else w.assign(W,Fw._`${W} || {}`),c8(w,W,Q)}),mergeValues:(w,Q)=>w===!0?!0:{...w,...Q},resultToName:wZ}),items:sW({mergeNames:(w,Q,W)=>w.if(Fw._`${W} !== true && ${Q} !== undefined`,()=>w.assign(W,Fw._`${Q} === true ? true : ${W} > ${Q} ? ${W} : ${Q}`)),mergeToName:(w,Q,W)=>w.if(Fw._`${W} !== true`,()=>w.assign(W,Q===!0?!0:Fw._`${W} > ${Q} ? ${W} : ${Q}`)),mergeValues:(w,Q)=>w===!0?!0:Math.max(w,Q),resultToName:(w,Q)=>w.var("items",Q)})};function wZ(w,Q){if(Q===!0)return w.var("props",!0);let W=w.var("props",Fw._`{}`);if(Q!==void 0)c8(w,W,Q);return W}p.evaluatedPropsToName=wZ;function c8(w,Q,W){Object.keys(W).forEach((Z)=>w.assign(Fw._`${Q}${(0,Fw.getProperty)(Z)}`,!0))}p.setEvaluated=c8;var aW={};function A3(w,Q){return w.scopeValue("func",{ref:Q,code:aW[Q.code]||(aW[Q.code]=new F3._Code(Q.code))})}p.useFunc=A3;var m8;(function(w){w[w.Num=0]="Num",w[w.Str=1]="Str"})(m8||(p.Type=m8={}));function U3(w,Q,W){if(w instanceof Fw.Name){let Z=Q===m8.Num;return W?Z?Fw._`"[" + ${w} + "]"`:Fw._`"['" + ${w} + "']"`:Z?Fw._`"/" + ${w}`:Fw._`"/" + ${w}.replace(/~/g, "~0").replace(/\\//g, "~1")`}return W?(0,Fw.getProperty)(w).toString():"/"+p8(w)}p.getErrorPath=U3;function QZ(w,Q,W=w.opts.strictSchema){if(!W)return;if(Q=`strict mode: ${Q}`,W===!0)throw Error(Q);w.self.logger.warn(Q)}p.checkStrictMode=QZ});var p0=N((d8)=>{Object.defineProperty(d8,"__esModule",{value:!0});var fw=m(),j3={data:new fw.Name("data"),valCxt:new fw.Name("valCxt"),instancePath:new fw.Name("instancePath"),parentData:new fw.Name("parentData"),parentDataProperty:new fw.Name("parentDataProperty"),rootData:new fw.Name("rootData"),dynamicAnchors:new fw.Name("dynamicAnchors"),vErrors:new fw.Name("vErrors"),errors:new fw.Name("errors"),this:new fw.Name("this"),self:new fw.Name("self"),scope:new fw.Name("scope"),json:new fw.Name("json"),jsonPos:new fw.Name("jsonPos"),jsonLen:new fw.Name("jsonLen"),jsonPart:new fw.Name("jsonPart")};d8.default=j3});var v1=N((Cw)=>{Object.defineProperty(Cw,"__esModule",{value:!0});Cw.extendErrors=Cw.resetErrorsCount=Cw.reportExtraError=Cw.reportError=Cw.keyword$DataError=Cw.keywordError=void 0;var s=m(),s5=e(),_w=p0();Cw.keywordError={message:({keyword:w})=>s.str`must pass "${w}" keyword validation`};Cw.keyword$DataError={message:({keyword:w,schemaType:Q})=>Q?s.str`"${w}" keyword must be ${Q} ($data)`:s.str`"${w}" keyword is invalid ($data)`};function N3(w,Q=Cw.keywordError,W,Z){let{it:Y}=w,{gen:J,compositeRule:X,allErrors:q}=Y,G=YZ(w,Q,W);if(Z!==null&&Z!==void 0?Z:X||q)WZ(J,G);else ZZ(Y,s._`[${G}]`)}Cw.reportError=N3;function O3(w,Q=Cw.keywordError,W){let{it:Z}=w,{gen:Y,compositeRule:J,allErrors:X}=Z,q=YZ(w,Q,W);if(WZ(Y,q),!(J||X))ZZ(Z,_w.default.vErrors)}Cw.reportExtraError=O3;function D3(w,Q){w.assign(_w.default.errors,Q),w.if(s._`${_w.default.vErrors} !== null`,()=>w.if(Q,()=>w.assign(s._`${_w.default.vErrors}.length`,Q),()=>w.assign(_w.default.vErrors,null)))}Cw.resetErrorsCount=D3;function I3({gen:w,keyword:Q,schemaValue:W,data:Z,errsCount:Y,it:J}){if(Y===void 0)throw Error("ajv implementation error");let X=w.name("err");w.forRange("i",Y,_w.default.errors,(q)=>{if(w.const(X,s._`${_w.default.vErrors}[${q}]`),w.if(s._`${X}.instancePath === undefined`,()=>w.assign(s._`${X}.instancePath`,(0,s.strConcat)(_w.default.instancePath,J.errorPath))),w.assign(s._`${X}.schemaPath`,s.str`${J.errSchemaPath}/${Q}`),J.opts.verbose)w.assign(s._`${X}.schema`,W),w.assign(s._`${X}.data`,Z)})}Cw.extendErrors=I3;function WZ(w,Q){let W=w.const("err",Q);w.if(s._`${_w.default.vErrors} === null`,()=>w.assign(_w.default.vErrors,s._`[${W}]`),s._`${_w.default.vErrors}.push(${W})`),w.code(s._`${_w.default.errors}++`)}function ZZ(w,Q){let{gen:W,validateName:Z,schemaEnv:Y}=w;if(Y.$async)W.throw(s._`new ${w.ValidationError}(${Q})`);else W.assign(s._`${Z}.errors`,Q),W.return(!1)}var U6={keyword:new s.Name("keyword"),schemaPath:new s.Name("schemaPath"),params:new s.Name("params"),propertyName:new s.Name("propertyName"),message:new s.Name("message"),schema:new s.Name("schema"),parentSchema:new s.Name("parentSchema")};function YZ(w,Q,W){let{createErrors:Z}=w.it;if(Z===!1)return s._`{}`;return T3(w,Q,W)}function T3(w,Q,W={}){let{gen:Z,it:Y}=w,J=[P3(Y,W),R3(w,W)];return b3(w,Q,J),Z.object(...J)}function P3({errorPath:w},{instancePath:Q}){let W=Q?s.str`${w}${(0,s5.getErrorPath)(Q,s5.Type.Str)}`:w;return[_w.default.instancePath,(0,s.strConcat)(_w.default.instancePath,W)]}function R3({keyword:w,it:{errSchemaPath:Q}},{schemaPath:W,parentSchema:Z}){let Y=Z?Q:s.str`${Q}/${w}`;if(W)Y=s.str`${Y}${(0,s5.getErrorPath)(W,s5.Type.Str)}`;return[U6.schemaPath,Y]}function b3(w,{params:Q,message:W},Z){let{keyword:Y,data:J,schemaValue:X,it:q}=w,{opts:G,propertyName:z,topSchemaRef:F,schemaPath:K}=q;if(Z.push([U6.keyword,Y],[U6.params,typeof Q=="function"?Q(w):Q||s._`{}`]),G.messages)Z.push([U6.message,typeof W=="function"?W(w):W]);if(G.verbose)Z.push([U6.schema,X],[U6.parentSchema,s._`${F}${K}`],[_w.default.data,J]);if(z)Z.push([U6.propertyName,z])}});var XZ=N((r6)=>{Object.defineProperty(r6,"__esModule",{value:!0});r6.boolOrEmptySchema=r6.topBoolOrEmptySchema=void 0;var S3=v1(),E3=m(),k3=p0(),f3={message:"boolean schema is false"};function C3(w){let{gen:Q,schema:W,validateName:Z}=w;if(W===!1)JZ(w,!1);else if(typeof W=="object"&&W.$async===!0)Q.return(k3.default.data);else Q.assign(E3._`${Z}.errors`,null),Q.return(!0)}r6.topBoolOrEmptySchema=C3;function v3(w,Q){let{gen:W,schema:Z}=w;if(Z===!1)W.var(Q,!1),JZ(w);else W.var(Q,!0)}r6.boolOrEmptySchema=v3;function JZ(w,Q){let{gen:W,data:Z}=w,Y={gen:W,keyword:"false schema",data:Z,schema:!1,schemaCode:!1,schemaValue:!1,params:{},it:w};(0,S3.reportError)(Y,f3,void 0,Q)}});var n8=N((s6)=>{Object.defineProperty(s6,"__esModule",{value:!0});s6.getRules=s6.isJSONType=void 0;var y3=["string","number","integer","boolean","null","object","array"],u3=new Set(y3);function h3(w){return typeof w=="string"&&u3.has(w)}s6.isJSONType=h3;function g3(){let w={number:{type:"number",rules:[]},string:{type:"string",rules:[]},array:{type:"array",rules:[]},object:{type:"object",rules:[]}};return{types:{...w,integer:!0,boolean:!0,null:!0},rules:[{rules:[]},w.number,w.string,w.array,w.object],post:{rules:[]},all:{},keywords:{}}}s6.getRules=g3});var r8=N((w6)=>{Object.defineProperty(w6,"__esModule",{value:!0});w6.shouldUseRule=w6.shouldUseGroup=w6.schemaHasRulesForType=void 0;function _3({schema:w,self:Q},W){let Z=Q.RULES.types[W];return Z&&Z!==!0&&qZ(w,Z)}w6.schemaHasRulesForType=_3;function qZ(w,Q){return Q.rules.some((W)=>GZ(w,W))}w6.shouldUseGroup=qZ;function GZ(w,Q){var W;return w[Q.keyword]!==void 0||((W=Q.definition.implements)===null||W===void 0?void 0:W.some((Z)=>w[Z]!==void 0))}w6.shouldUseRule=GZ});var y1=N((vw)=>{Object.defineProperty(vw,"__esModule",{value:!0});vw.reportTypeError=vw.checkDataTypes=vw.checkDataType=vw.coerceAndCheckDataType=vw.getJSONTypes=vw.getSchemaTypes=vw.DataType=void 0;var x3=n8(),l3=r8(),i3=v1(),y=m(),zZ=e(),a6;(function(w){w[w.Correct=0]="Correct",w[w.Wrong=1]="Wrong"})(a6||(vw.DataType=a6={}));function m3(w){let Q=FZ(w.type);if(Q.includes("null")){if(w.nullable===!1)throw Error("type: null contradicts nullable: false")}else{if(!Q.length&&w.nullable!==void 0)throw Error('"nullable" cannot be used without "type"');if(w.nullable===!0)Q.push("null")}return Q}vw.getSchemaTypes=m3;function FZ(w){let Q=Array.isArray(w)?w:w?[w]:[];if(Q.every(x3.isJSONType))return Q;throw Error("type must be JSONType or JSONType[]: "+Q.join(","))}vw.getJSONTypes=FZ;function p3(w,Q){let{gen:W,data:Z,opts:Y}=w,J=c3(Q,Y.coerceTypes),X=Q.length>0&&!(J.length===0&&Q.length===1&&(0,l3.schemaHasRulesForType)(w,Q[0]));if(X){let q=a8(Q,Z,Y.strictNumbers,a6.Wrong);W.if(q,()=>{if(J.length)d3(w,Q,J);else t8(w)})}return X}vw.coerceAndCheckDataType=p3;var KZ=new Set(["string","number","integer","boolean","null"]);function c3(w,Q){return Q?w.filter((W)=>KZ.has(W)||Q==="array"&&W==="array"):[]}function d3(w,Q,W){let{gen:Z,data:Y,opts:J}=w,X=Z.let("dataType",y._`typeof ${Y}`),q=Z.let("coerced",y._`undefined`);if(J.coerceTypes==="array")Z.if(y._`${X} == 'object' && Array.isArray(${Y}) && ${Y}.length == 1`,()=>Z.assign(Y,y._`${Y}[0]`).assign(X,y._`typeof ${Y}`).if(a8(Q,Y,J.strictNumbers),()=>Z.assign(q,Y)));Z.if(y._`${q} !== undefined`);for(let z of W)if(KZ.has(z)||z==="array"&&J.coerceTypes==="array")G(z);Z.else(),t8(w),Z.endIf(),Z.if(y._`${q} !== undefined`,()=>{Z.assign(Y,q),n3(w,q)});function G(z){switch(z){case"string":Z.elseIf(y._`${X} == "number" || ${X} == "boolean"`).assign(q,y._`"" + ${Y}`).elseIf(y._`${Y} === null`).assign(q,y._`""`);return;case"number":Z.elseIf(y._`${X} == "boolean" || ${Y} === null
|
|
3
|
+
|| (${X} == "string" && ${Y} && ${Y} == +${Y})`).assign(q,y._`+${Y}`);return;case"integer":Z.elseIf(y._`${X} === "boolean" || ${Y} === null
|
|
4
|
+
|| (${X} === "string" && ${Y} && ${Y} == +${Y} && !(${Y} % 1))`).assign(q,y._`+${Y}`);return;case"boolean":Z.elseIf(y._`${Y} === "false" || ${Y} === 0 || ${Y} === null`).assign(q,!1).elseIf(y._`${Y} === "true" || ${Y} === 1`).assign(q,!0);return;case"null":Z.elseIf(y._`${Y} === "" || ${Y} === 0 || ${Y} === false`),Z.assign(q,null);return;case"array":Z.elseIf(y._`${X} === "string" || ${X} === "number"
|
|
5
|
+
|| ${X} === "boolean" || ${Y} === null`).assign(q,y._`[${Y}]`)}}}function n3({gen:w,parentData:Q,parentDataProperty:W},Z){w.if(y._`${Q} !== undefined`,()=>w.assign(y._`${Q}[${W}]`,Z))}function s8(w,Q,W,Z=a6.Correct){let Y=Z===a6.Correct?y.operators.EQ:y.operators.NEQ,J;switch(w){case"null":return y._`${Q} ${Y} null`;case"array":J=y._`Array.isArray(${Q})`;break;case"object":J=y._`${Q} && typeof ${Q} == "object" && !Array.isArray(${Q})`;break;case"integer":J=X(y._`!(${Q} % 1) && !isNaN(${Q})`);break;case"number":J=X();break;default:return y._`typeof ${Q} ${Y} ${w}`}return Z===a6.Correct?J:(0,y.not)(J);function X(q=y.nil){return(0,y.and)(y._`typeof ${Q} == "number"`,q,W?y._`isFinite(${Q})`:y.nil)}}vw.checkDataType=s8;function a8(w,Q,W,Z){if(w.length===1)return s8(w[0],Q,W,Z);let Y,J=(0,zZ.toHash)(w);if(J.array&&J.object){let X=y._`typeof ${Q} != "object"`;Y=J.null?X:y._`!${Q} || ${X}`,delete J.null,delete J.array,delete J.object}else Y=y.nil;if(J.number)delete J.integer;for(let X in J)Y=(0,y.and)(Y,s8(X,Q,W,Z));return Y}vw.checkDataTypes=a8;var r3={message:({schema:w})=>`must be ${w}`,params:({schema:w,schemaValue:Q})=>typeof w=="string"?y._`{type: ${w}}`:y._`{type: ${Q}}`};function t8(w){let Q=s3(w);(0,i3.reportError)(Q,r3)}vw.reportTypeError=t8;function s3(w){let{gen:Q,data:W,schema:Z}=w,Y=(0,zZ.schemaRefOrVal)(w,Z,"type");return{gen:Q,keyword:"type",data:W,schema:Z.type,schemaCode:Y,schemaValue:Y,parentSchema:Z,params:{},it:w}}});var HZ=N((a5)=>{Object.defineProperty(a5,"__esModule",{value:!0});a5.assignDefaults=void 0;var t6=m(),a3=e();function t3(w,Q){let{properties:W,items:Z}=w.schema;if(Q==="object"&&W)for(let Y in W)BZ(w,Y,W[Y].default);else if(Q==="array"&&Array.isArray(Z))Z.forEach((Y,J)=>BZ(w,J,Y.default))}a5.assignDefaults=t3;function BZ(w,Q,W){let{gen:Z,compositeRule:Y,data:J,opts:X}=w;if(W===void 0)return;let q=t6._`${J}${(0,t6.getProperty)(Q)}`;if(Y){(0,a3.checkStrictMode)(w,`default is ignored for: ${q}`);return}let G=t6._`${q} === undefined`;if(X.useDefaults==="empty")G=t6._`${G} || ${q} === null || ${q} === ""`;Z.if(G,t6._`${q} = ${(0,t6.stringify)(W)}`)}});var Y0=N((Xw)=>{Object.defineProperty(Xw,"__esModule",{value:!0});Xw.validateUnion=Xw.validateArray=Xw.usePattern=Xw.callValidateCode=Xw.schemaProperties=Xw.allSchemaProperties=Xw.noPropertyInData=Xw.propertyInData=Xw.isOwnProperty=Xw.hasPropFunc=Xw.reportMissingProp=Xw.checkMissingProp=Xw.checkReportMissingProp=void 0;var Bw=m(),o8=e(),Q6=p0(),o3=e();function e3(w,Q){let{gen:W,data:Z,it:Y}=w;W.if(w4(W,Z,Q,Y.opts.ownProperties),()=>{w.setParams({missingProperty:Bw._`${Q}`},!0),w.error()})}Xw.checkReportMissingProp=e3;function wF({gen:w,data:Q,it:{opts:W}},Z,Y){return(0,Bw.or)(...Z.map((J)=>(0,Bw.and)(w4(w,Q,J,W.ownProperties),Bw._`${Y} = ${J}`)))}Xw.checkMissingProp=wF;function QF(w,Q){w.setParams({missingProperty:Q},!0),w.error()}Xw.reportMissingProp=QF;function VZ(w){return w.scopeValue("func",{ref:Object.prototype.hasOwnProperty,code:Bw._`Object.prototype.hasOwnProperty`})}Xw.hasPropFunc=VZ;function e8(w,Q,W){return Bw._`${VZ(w)}.call(${Q}, ${W})`}Xw.isOwnProperty=e8;function WF(w,Q,W,Z){let Y=Bw._`${Q}${(0,Bw.getProperty)(W)} !== undefined`;return Z?Bw._`${Y} && ${e8(w,Q,W)}`:Y}Xw.propertyInData=WF;function w4(w,Q,W,Z){let Y=Bw._`${Q}${(0,Bw.getProperty)(W)} === undefined`;return Z?(0,Bw.or)(Y,(0,Bw.not)(e8(w,Q,W))):Y}Xw.noPropertyInData=w4;function MZ(w){return w?Object.keys(w).filter((Q)=>Q!=="__proto__"):[]}Xw.allSchemaProperties=MZ;function ZF(w,Q){return MZ(Q).filter((W)=>!(0,o8.alwaysValidSchema)(w,Q[W]))}Xw.schemaProperties=ZF;function YF({schemaCode:w,data:Q,it:{gen:W,topSchemaRef:Z,schemaPath:Y,errorPath:J},it:X},q,G,z){let F=z?Bw._`${w}, ${Q}, ${Z}${Y}`:Q,K=[[Q6.default.instancePath,(0,Bw.strConcat)(Q6.default.instancePath,J)],[Q6.default.parentData,X.parentData],[Q6.default.parentDataProperty,X.parentDataProperty],[Q6.default.rootData,Q6.default.rootData]];if(X.opts.dynamicRef)K.push([Q6.default.dynamicAnchors,Q6.default.dynamicAnchors]);let A=Bw._`${F}, ${W.object(...K)}`;return G!==Bw.nil?Bw._`${q}.call(${G}, ${A})`:Bw._`${q}(${A})`}Xw.callValidateCode=YF;var JF=Bw._`new RegExp`;function XF({gen:w,it:{opts:Q}},W){let Z=Q.unicodeRegExp?"u":"",{regExp:Y}=Q.code,J=Y(W,Z);return w.scopeValue("pattern",{key:J.toString(),ref:J,code:Bw._`${Y.code==="new RegExp"?JF:(0,o3.useFunc)(w,Y)}(${W}, ${Z})`})}Xw.usePattern=XF;function qF(w){let{gen:Q,data:W,keyword:Z,it:Y}=w,J=Q.name("valid");if(Y.allErrors){let q=Q.let("valid",!0);return X(()=>Q.assign(q,!1)),q}return Q.var(J,!0),X(()=>Q.break()),J;function X(q){let G=Q.const("len",Bw._`${W}.length`);Q.forRange("i",0,G,(z)=>{w.subschema({keyword:Z,dataProp:z,dataPropType:o8.Type.Num},J),Q.if((0,Bw.not)(J),q)})}}Xw.validateArray=qF;function GF(w){let{gen:Q,schema:W,keyword:Z,it:Y}=w;if(!Array.isArray(W))throw Error("ajv implementation error");if(W.some((G)=>(0,o8.alwaysValidSchema)(Y,G))&&!Y.opts.unevaluated)return;let X=Q.let("valid",!1),q=Q.name("_valid");Q.block(()=>W.forEach((G,z)=>{let F=w.subschema({keyword:Z,schemaProp:z,compositeRule:!0},q);if(Q.assign(X,Bw._`${X} || ${q}`),!w.mergeValidEvaluated(F,q))Q.if((0,Bw.not)(X))})),w.result(X,()=>w.reset(),()=>w.error(!0))}Xw.validateUnion=GF});var AZ=N((S0)=>{Object.defineProperty(S0,"__esModule",{value:!0});S0.validateKeywordUsage=S0.validSchemaType=S0.funcKeywordCode=S0.macroKeywordCode=void 0;var xw=m(),j6=p0(),zF=Y0(),FF=v1();function KF(w,Q){let{gen:W,keyword:Z,schema:Y,parentSchema:J,it:X}=w,q=Q.macro.call(X.self,Y,J,X),G=$Z(W,Z,q);if(X.opts.validateSchema!==!1)X.self.validateSchema(q,!0);let z=W.name("valid");w.subschema({schema:q,schemaPath:xw.nil,errSchemaPath:`${X.errSchemaPath}/${Z}`,topSchemaRef:G,compositeRule:!0},z),w.pass(z,()=>w.error(!0))}S0.macroKeywordCode=KF;function BF(w,Q){var W;let{gen:Z,keyword:Y,schema:J,parentSchema:X,$data:q,it:G}=w;VF(G,Q);let z=!q&&Q.compile?Q.compile.call(G.self,J,X,G):Q.validate,F=$Z(Z,Y,z),K=Z.let("valid");w.block$data(K,A),w.ok((W=Q.valid)!==null&&W!==void 0?W:K);function A(){if(Q.errors===!1){if(H(),Q.modifying)LZ(w);U(()=>w.error())}else{let j=Q.async?V():M();if(Q.modifying)LZ(w);U(()=>HF(w,j))}}function V(){let j=Z.let("ruleErrs",null);return Z.try(()=>H(xw._`await `),(T)=>Z.assign(K,!1).if(xw._`${T} instanceof ${G.ValidationError}`,()=>Z.assign(j,xw._`${T}.errors`),()=>Z.throw(T))),j}function M(){let j=xw._`${F}.errors`;return Z.assign(j,null),H(xw.nil),j}function H(j=Q.async?xw._`await `:xw.nil){let T=G.opts.passContext?j6.default.this:j6.default.self,P=!(("compile"in Q)&&!q||Q.schema===!1);Z.assign(K,xw._`${j}${(0,zF.callValidateCode)(w,F,T,P)}`,Q.modifying)}function U(j){var T;Z.if((0,xw.not)((T=Q.valid)!==null&&T!==void 0?T:K),j)}}S0.funcKeywordCode=BF;function LZ(w){let{gen:Q,data:W,it:Z}=w;Q.if(Z.parentData,()=>Q.assign(W,xw._`${Z.parentData}[${Z.parentDataProperty}]`))}function HF(w,Q){let{gen:W}=w;W.if(xw._`Array.isArray(${Q})`,()=>{W.assign(j6.default.vErrors,xw._`${j6.default.vErrors} === null ? ${Q} : ${j6.default.vErrors}.concat(${Q})`).assign(j6.default.errors,xw._`${j6.default.vErrors}.length`),(0,FF.extendErrors)(w)},()=>w.error())}function VF({schemaEnv:w},Q){if(Q.async&&!w.$async)throw Error("async keyword in sync schema")}function $Z(w,Q,W){if(W===void 0)throw Error(`keyword "${Q}" failed to compile`);return w.scopeValue("keyword",typeof W=="function"?{ref:W}:{ref:W,code:(0,xw.stringify)(W)})}function MF(w,Q,W=!1){return!Q.length||Q.some((Z)=>Z==="array"?Array.isArray(w):Z==="object"?w&&typeof w=="object"&&!Array.isArray(w):typeof w==Z||W&&typeof w>"u")}S0.validSchemaType=MF;function LF({schema:w,opts:Q,self:W,errSchemaPath:Z},Y,J){if(Array.isArray(Y.keyword)?!Y.keyword.includes(J):Y.keyword!==J)throw Error("ajv implementation error");let X=Y.dependencies;if(X===null||X===void 0?void 0:X.some((q)=>!Object.prototype.hasOwnProperty.call(w,q)))throw Error(`parent schema must have dependencies of ${J}: ${X.join(",")}`);if(Y.validateSchema){if(!Y.validateSchema(w[J])){let G=`keyword "${J}" value is invalid at path "${Z}": `+W.errorsText(Y.validateSchema.errors);if(Q.validateSchema==="log")W.logger.error(G);else throw Error(G)}}}S0.validateKeywordUsage=LF});var jZ=N((W6)=>{Object.defineProperty(W6,"__esModule",{value:!0});W6.extendSubschemaMode=W6.extendSubschemaData=W6.getSubschema=void 0;var E0=m(),UZ=e();function $F(w,{keyword:Q,schemaProp:W,schema:Z,schemaPath:Y,errSchemaPath:J,topSchemaRef:X}){if(Q!==void 0&&Z!==void 0)throw Error('both "keyword" and "schema" passed, only one allowed');if(Q!==void 0){let q=w.schema[Q];return W===void 0?{schema:q,schemaPath:E0._`${w.schemaPath}${(0,E0.getProperty)(Q)}`,errSchemaPath:`${w.errSchemaPath}/${Q}`}:{schema:q[W],schemaPath:E0._`${w.schemaPath}${(0,E0.getProperty)(Q)}${(0,E0.getProperty)(W)}`,errSchemaPath:`${w.errSchemaPath}/${Q}/${(0,UZ.escapeFragment)(W)}`}}if(Z!==void 0){if(Y===void 0||J===void 0||X===void 0)throw Error('"schemaPath", "errSchemaPath" and "topSchemaRef" are required with "schema"');return{schema:Z,schemaPath:Y,topSchemaRef:X,errSchemaPath:J}}throw Error('either "keyword" or "schema" must be passed')}W6.getSubschema=$F;function AF(w,Q,{dataProp:W,dataPropType:Z,data:Y,dataTypes:J,propertyName:X}){if(Y!==void 0&&W!==void 0)throw Error('both "data" and "dataProp" passed, only one allowed');let{gen:q}=Q;if(W!==void 0){let{errorPath:z,dataPathArr:F,opts:K}=Q,A=q.let("data",E0._`${Q.data}${(0,E0.getProperty)(W)}`,!0);G(A),w.errorPath=E0.str`${z}${(0,UZ.getErrorPath)(W,Z,K.jsPropertySyntax)}`,w.parentDataProperty=E0._`${W}`,w.dataPathArr=[...F,w.parentDataProperty]}if(Y!==void 0){let z=Y instanceof E0.Name?Y:q.let("data",Y,!0);if(G(z),X!==void 0)w.propertyName=X}if(J)w.dataTypes=J;function G(z){w.data=z,w.dataLevel=Q.dataLevel+1,w.dataTypes=[],Q.definedProperties=new Set,w.parentData=Q.data,w.dataNames=[...Q.dataNames,z]}}W6.extendSubschemaData=AF;function UF(w,{jtdDiscriminator:Q,jtdMetadata:W,compositeRule:Z,createErrors:Y,allErrors:J}){if(Z!==void 0)w.compositeRule=Z;if(Y!==void 0)w.createErrors=Y;if(J!==void 0)w.allErrors=J;w.jtdDiscriminator=Q,w.jtdMetadata=W}W6.extendSubschemaMode=UF});var u1=N((QN,NZ)=>{NZ.exports=function w(Q,W){if(Q===W)return!0;if(Q&&W&&typeof Q=="object"&&typeof W=="object"){if(Q.constructor!==W.constructor)return!1;var Z,Y,J;if(Array.isArray(Q)){if(Z=Q.length,Z!=W.length)return!1;for(Y=Z;Y--!==0;)if(!w(Q[Y],W[Y]))return!1;return!0}if(Q.constructor===RegExp)return Q.source===W.source&&Q.flags===W.flags;if(Q.valueOf!==Object.prototype.valueOf)return Q.valueOf()===W.valueOf();if(Q.toString!==Object.prototype.toString)return Q.toString()===W.toString();if(J=Object.keys(Q),Z=J.length,Z!==Object.keys(W).length)return!1;for(Y=Z;Y--!==0;)if(!Object.prototype.hasOwnProperty.call(W,J[Y]))return!1;for(Y=Z;Y--!==0;){var X=J[Y];if(!w(Q[X],W[X]))return!1}return!0}return Q!==Q&&W!==W}});var Q4=N((WN,OZ)=>{var Z6=OZ.exports=function(w,Q,W){if(typeof Q=="function")W=Q,Q={};W=Q.cb||W;var Z=typeof W=="function"?W:W.pre||function(){},Y=W.post||function(){};t5(Q,Z,Y,w,"",w)};Z6.keywords={additionalItems:!0,items:!0,contains:!0,additionalProperties:!0,propertyNames:!0,not:!0,if:!0,then:!0,else:!0};Z6.arrayKeywords={items:!0,allOf:!0,anyOf:!0,oneOf:!0};Z6.propsKeywords={$defs:!0,definitions:!0,properties:!0,patternProperties:!0,dependencies:!0};Z6.skipKeywords={default:!0,enum:!0,const:!0,required:!0,maximum:!0,minimum:!0,exclusiveMaximum:!0,exclusiveMinimum:!0,multipleOf:!0,maxLength:!0,minLength:!0,pattern:!0,format:!0,maxItems:!0,minItems:!0,uniqueItems:!0,maxProperties:!0,minProperties:!0};function t5(w,Q,W,Z,Y,J,X,q,G,z){if(Z&&typeof Z=="object"&&!Array.isArray(Z)){Q(Z,Y,J,X,q,G,z);for(var F in Z){var K=Z[F];if(Array.isArray(K)){if(F in Z6.arrayKeywords)for(var A=0;A<K.length;A++)t5(w,Q,W,K[A],Y+"/"+F+"/"+A,J,Y,F,Z,A)}else if(F in Z6.propsKeywords){if(K&&typeof K=="object")for(var V in K)t5(w,Q,W,K[V],Y+"/"+F+"/"+jF(V),J,Y,F,Z,V)}else if(F in Z6.keywords||w.allKeys&&!(F in Z6.skipKeywords))t5(w,Q,W,K,Y+"/"+F,J,Y,F,Z)}W(Z,Y,J,X,q,G,z)}}function jF(w){return w.replace(/~/g,"~0").replace(/\//g,"~1")}});var h1=N((nw)=>{Object.defineProperty(nw,"__esModule",{value:!0});nw.getSchemaRefs=nw.resolveUrl=nw.normalizeId=nw._getFullPath=nw.getFullPath=nw.inlineRef=void 0;var NF=e(),OF=u1(),DF=Q4(),IF=new Set(["type","format","pattern","maxLength","minLength","maxProperties","minProperties","maxItems","minItems","maximum","minimum","uniqueItems","multipleOf","required","enum","const"]);function TF(w,Q=!0){if(typeof w=="boolean")return!0;if(Q===!0)return!W4(w);if(!Q)return!1;return DZ(w)<=Q}nw.inlineRef=TF;var PF=new Set(["$ref","$recursiveRef","$recursiveAnchor","$dynamicRef","$dynamicAnchor"]);function W4(w){for(let Q in w){if(PF.has(Q))return!0;let W=w[Q];if(Array.isArray(W)&&W.some(W4))return!0;if(typeof W=="object"&&W4(W))return!0}return!1}function DZ(w){let Q=0;for(let W in w){if(W==="$ref")return 1/0;if(Q++,IF.has(W))continue;if(typeof w[W]=="object")(0,NF.eachItem)(w[W],(Z)=>Q+=DZ(Z));if(Q===1/0)return 1/0}return Q}function IZ(w,Q="",W){if(W!==!1)Q=o6(Q);let Z=w.parse(Q);return TZ(w,Z)}nw.getFullPath=IZ;function TZ(w,Q){return w.serialize(Q).split("#")[0]+"#"}nw._getFullPath=TZ;var RF=/#\/?$/;function o6(w){return w?w.replace(RF,""):""}nw.normalizeId=o6;function bF(w,Q,W){return W=o6(W),w.resolve(Q,W)}nw.resolveUrl=bF;var SF=/^[a-z_][-a-z0-9._]*$/i;function EF(w,Q){if(typeof w=="boolean")return{};let{schemaId:W,uriResolver:Z}=this.opts,Y=o6(w[W]||Q),J={"":Y},X=IZ(Z,Y,!1),q={},G=new Set;return DF(w,{allKeys:!0},(K,A,V,M)=>{if(M===void 0)return;let H=X+A,U=J[M];if(typeof K[W]=="string")U=j.call(this,K[W]);T.call(this,K.$anchor),T.call(this,K.$dynamicAnchor),J[A]=U;function j(P){let b=this.opts.uriResolver.resolve;if(P=o6(U?b(U,P):P),G.has(P))throw F(P);G.add(P);let O=this.refs[P];if(typeof O=="string")O=this.refs[O];if(typeof O=="object")z(K,O.schema,P);else if(P!==o6(H))if(P[0]==="#")z(K,q[P],P),q[P]=K;else this.refs[P]=H;return P}function T(P){if(typeof P=="string"){if(!SF.test(P))throw Error(`invalid anchor "${P}"`);j.call(this,`#${P}`)}}}),q;function z(K,A,V){if(A!==void 0&&!OF(K,A))throw F(V)}function F(K){return Error(`reference "${K}" resolves to more than one schema`)}}nw.getSchemaRefs=EF});var x1=N((Y6)=>{Object.defineProperty(Y6,"__esModule",{value:!0});Y6.getData=Y6.KeywordCxt=Y6.validateFunctionCode=void 0;var EZ=XZ(),PZ=y1(),Y4=r8(),o5=y1(),kF=HZ(),_1=AZ(),Z4=jZ(),E=m(),f=p0(),fF=h1(),c0=e(),g1=v1();function CF(w){if(CZ(w)){if(vZ(w),fZ(w)){uF(w);return}}kZ(w,()=>(0,EZ.topBoolOrEmptySchema)(w))}Y6.validateFunctionCode=CF;function kZ({gen:w,validateName:Q,schema:W,schemaEnv:Z,opts:Y},J){if(Y.code.es5)w.func(Q,E._`${f.default.data}, ${f.default.valCxt}`,Z.$async,()=>{w.code(E._`"use strict"; ${RZ(W,Y)}`),yF(w,Y),w.code(J)});else w.func(Q,E._`${f.default.data}, ${vF(Y)}`,Z.$async,()=>w.code(RZ(W,Y)).code(J))}function vF(w){return E._`{${f.default.instancePath}="", ${f.default.parentData}, ${f.default.parentDataProperty}, ${f.default.rootData}=${f.default.data}${w.dynamicRef?E._`, ${f.default.dynamicAnchors}={}`:E.nil}}={}`}function yF(w,Q){w.if(f.default.valCxt,()=>{if(w.var(f.default.instancePath,E._`${f.default.valCxt}.${f.default.instancePath}`),w.var(f.default.parentData,E._`${f.default.valCxt}.${f.default.parentData}`),w.var(f.default.parentDataProperty,E._`${f.default.valCxt}.${f.default.parentDataProperty}`),w.var(f.default.rootData,E._`${f.default.valCxt}.${f.default.rootData}`),Q.dynamicRef)w.var(f.default.dynamicAnchors,E._`${f.default.valCxt}.${f.default.dynamicAnchors}`)},()=>{if(w.var(f.default.instancePath,E._`""`),w.var(f.default.parentData,E._`undefined`),w.var(f.default.parentDataProperty,E._`undefined`),w.var(f.default.rootData,f.default.data),Q.dynamicRef)w.var(f.default.dynamicAnchors,E._`{}`)})}function uF(w){let{schema:Q,opts:W,gen:Z}=w;kZ(w,()=>{if(W.$comment&&Q.$comment)uZ(w);if(lF(w),Z.let(f.default.vErrors,null),Z.let(f.default.errors,0),W.unevaluated)hF(w);yZ(w),pF(w)});return}function hF(w){let{gen:Q,validateName:W}=w;w.evaluated=Q.const("evaluated",E._`${W}.evaluated`),Q.if(E._`${w.evaluated}.dynamicProps`,()=>Q.assign(E._`${w.evaluated}.props`,E._`undefined`)),Q.if(E._`${w.evaluated}.dynamicItems`,()=>Q.assign(E._`${w.evaluated}.items`,E._`undefined`))}function RZ(w,Q){let W=typeof w=="object"&&w[Q.schemaId];return W&&(Q.code.source||Q.code.process)?E._`/*# sourceURL=${W} */`:E.nil}function gF(w,Q){if(CZ(w)){if(vZ(w),fZ(w)){_F(w,Q);return}}(0,EZ.boolOrEmptySchema)(w,Q)}function fZ({schema:w,self:Q}){if(typeof w=="boolean")return!w;for(let W in w)if(Q.RULES.all[W])return!0;return!1}function CZ(w){return typeof w.schema!="boolean"}function _F(w,Q){let{schema:W,gen:Z,opts:Y}=w;if(Y.$comment&&W.$comment)uZ(w);iF(w),mF(w);let J=Z.const("_errs",f.default.errors);yZ(w,J),Z.var(Q,E._`${J} === ${f.default.errors}`)}function vZ(w){(0,c0.checkUnknownRules)(w),xF(w)}function yZ(w,Q){if(w.opts.jtd)return bZ(w,[],!1,Q);let W=(0,PZ.getSchemaTypes)(w.schema),Z=(0,PZ.coerceAndCheckDataType)(w,W);bZ(w,W,!Z,Q)}function xF(w){let{schema:Q,errSchemaPath:W,opts:Z,self:Y}=w;if(Q.$ref&&Z.ignoreKeywordsWithRef&&(0,c0.schemaHasRulesButRef)(Q,Y.RULES))Y.logger.warn(`$ref: keywords ignored in schema at path "${W}"`)}function lF(w){let{schema:Q,opts:W}=w;if(Q.default!==void 0&&W.useDefaults&&W.strictSchema)(0,c0.checkStrictMode)(w,"default is ignored in the schema root")}function iF(w){let Q=w.schema[w.opts.schemaId];if(Q)w.baseId=(0,fF.resolveUrl)(w.opts.uriResolver,w.baseId,Q)}function mF(w){if(w.schema.$async&&!w.schemaEnv.$async)throw Error("async schema in sync schema")}function uZ({gen:w,schemaEnv:Q,schema:W,errSchemaPath:Z,opts:Y}){let J=W.$comment;if(Y.$comment===!0)w.code(E._`${f.default.self}.logger.log(${J})`);else if(typeof Y.$comment=="function"){let X=E.str`${Z}/$comment`,q=w.scopeValue("root",{ref:Q.root});w.code(E._`${f.default.self}.opts.$comment(${J}, ${X}, ${q}.schema)`)}}function pF(w){let{gen:Q,schemaEnv:W,validateName:Z,ValidationError:Y,opts:J}=w;if(W.$async)Q.if(E._`${f.default.errors} === 0`,()=>Q.return(f.default.data),()=>Q.throw(E._`new ${Y}(${f.default.vErrors})`));else{if(Q.assign(E._`${Z}.errors`,f.default.vErrors),J.unevaluated)cF(w);Q.return(E._`${f.default.errors} === 0`)}}function cF({gen:w,evaluated:Q,props:W,items:Z}){if(W instanceof E.Name)w.assign(E._`${Q}.props`,W);if(Z instanceof E.Name)w.assign(E._`${Q}.items`,Z)}function bZ(w,Q,W,Z){let{gen:Y,schema:J,data:X,allErrors:q,opts:G,self:z}=w,{RULES:F}=z;if(J.$ref&&(G.ignoreKeywordsWithRef||!(0,c0.schemaHasRulesButRef)(J,F))){Y.block(()=>gZ(w,"$ref",F.all.$ref.definition));return}if(!G.jtd)dF(w,Q);Y.block(()=>{for(let A of F.rules)K(A);K(F.post)});function K(A){if(!(0,Y4.shouldUseGroup)(J,A))return;if(A.type){if(Y.if((0,o5.checkDataType)(A.type,X,G.strictNumbers)),SZ(w,A),Q.length===1&&Q[0]===A.type&&W)Y.else(),(0,o5.reportTypeError)(w);Y.endIf()}else SZ(w,A);if(!q)Y.if(E._`${f.default.errors} === ${Z||0}`)}}function SZ(w,Q){let{gen:W,schema:Z,opts:{useDefaults:Y}}=w;if(Y)(0,kF.assignDefaults)(w,Q.type);W.block(()=>{for(let J of Q.rules)if((0,Y4.shouldUseRule)(Z,J))gZ(w,J.keyword,J.definition,Q.type)})}function dF(w,Q){if(w.schemaEnv.meta||!w.opts.strictTypes)return;if(nF(w,Q),!w.opts.allowUnionTypes)rF(w,Q);sF(w,w.dataTypes)}function nF(w,Q){if(!Q.length)return;if(!w.dataTypes.length){w.dataTypes=Q;return}Q.forEach((W)=>{if(!hZ(w.dataTypes,W))J4(w,`type "${W}" not allowed by context "${w.dataTypes.join(",")}"`)}),tF(w,Q)}function rF(w,Q){if(Q.length>1&&!(Q.length===2&&Q.includes("null")))J4(w,"use allowUnionTypes to allow union type keyword")}function sF(w,Q){let W=w.self.RULES.all;for(let Z in W){let Y=W[Z];if(typeof Y=="object"&&(0,Y4.shouldUseRule)(w.schema,Y)){let{type:J}=Y.definition;if(J.length&&!J.some((X)=>aF(Q,X)))J4(w,`missing type "${J.join(",")}" for keyword "${Z}"`)}}}function aF(w,Q){return w.includes(Q)||Q==="number"&&w.includes("integer")}function hZ(w,Q){return w.includes(Q)||Q==="integer"&&w.includes("number")}function tF(w,Q){let W=[];for(let Z of w.dataTypes)if(hZ(Q,Z))W.push(Z);else if(Q.includes("integer")&&Z==="number")W.push("integer");w.dataTypes=W}function J4(w,Q){let W=w.schemaEnv.baseId+w.errSchemaPath;Q+=` at "${W}" (strictTypes)`,(0,c0.checkStrictMode)(w,Q,w.opts.strictTypes)}class X4{constructor(w,Q,W){if((0,_1.validateKeywordUsage)(w,Q,W),this.gen=w.gen,this.allErrors=w.allErrors,this.keyword=W,this.data=w.data,this.schema=w.schema[W],this.$data=Q.$data&&w.opts.$data&&this.schema&&this.schema.$data,this.schemaValue=(0,c0.schemaRefOrVal)(w,this.schema,W,this.$data),this.schemaType=Q.schemaType,this.parentSchema=w.schema,this.params={},this.it=w,this.def=Q,this.$data)this.schemaCode=w.gen.const("vSchema",_Z(this.$data,w));else if(this.schemaCode=this.schemaValue,!(0,_1.validSchemaType)(this.schema,Q.schemaType,Q.allowUndefined))throw Error(`${W} value must be ${JSON.stringify(Q.schemaType)}`);if("code"in Q?Q.trackErrors:Q.errors!==!1)this.errsCount=w.gen.const("_errs",f.default.errors)}result(w,Q,W){this.failResult((0,E.not)(w),Q,W)}failResult(w,Q,W){if(this.gen.if(w),W)W();else this.error();if(Q){if(this.gen.else(),Q(),this.allErrors)this.gen.endIf()}else if(this.allErrors)this.gen.endIf();else this.gen.else()}pass(w,Q){this.failResult((0,E.not)(w),void 0,Q)}fail(w){if(w===void 0){if(this.error(),!this.allErrors)this.gen.if(!1);return}if(this.gen.if(w),this.error(),this.allErrors)this.gen.endIf();else this.gen.else()}fail$data(w){if(!this.$data)return this.fail(w);let{schemaCode:Q}=this;this.fail(E._`${Q} !== undefined && (${(0,E.or)(this.invalid$data(),w)})`)}error(w,Q,W){if(Q){this.setParams(Q),this._error(w,W),this.setParams({});return}this._error(w,W)}_error(w,Q){(w?g1.reportExtraError:g1.reportError)(this,this.def.error,Q)}$dataError(){(0,g1.reportError)(this,this.def.$dataError||g1.keyword$DataError)}reset(){if(this.errsCount===void 0)throw Error('add "trackErrors" to keyword definition');(0,g1.resetErrorsCount)(this.gen,this.errsCount)}ok(w){if(!this.allErrors)this.gen.if(w)}setParams(w,Q){if(Q)Object.assign(this.params,w);else this.params=w}block$data(w,Q,W=E.nil){this.gen.block(()=>{this.check$data(w,W),Q()})}check$data(w=E.nil,Q=E.nil){if(!this.$data)return;let{gen:W,schemaCode:Z,schemaType:Y,def:J}=this;if(W.if((0,E.or)(E._`${Z} === undefined`,Q)),w!==E.nil)W.assign(w,!0);if(Y.length||J.validateSchema){if(W.elseIf(this.invalid$data()),this.$dataError(),w!==E.nil)W.assign(w,!1)}W.else()}invalid$data(){let{gen:w,schemaCode:Q,schemaType:W,def:Z,it:Y}=this;return(0,E.or)(J(),X());function J(){if(W.length){if(!(Q instanceof E.Name))throw Error("ajv implementation error");let q=Array.isArray(W)?W:[W];return E._`${(0,o5.checkDataTypes)(q,Q,Y.opts.strictNumbers,o5.DataType.Wrong)}`}return E.nil}function X(){if(Z.validateSchema){let q=w.scopeValue("validate$data",{ref:Z.validateSchema});return E._`!${q}(${Q})`}return E.nil}}subschema(w,Q){let W=(0,Z4.getSubschema)(this.it,w);(0,Z4.extendSubschemaData)(W,this.it,w),(0,Z4.extendSubschemaMode)(W,w);let Z={...this.it,...W,items:void 0,props:void 0};return gF(Z,Q),Z}mergeEvaluated(w,Q){let{it:W,gen:Z}=this;if(!W.opts.unevaluated)return;if(W.props!==!0&&w.props!==void 0)W.props=c0.mergeEvaluated.props(Z,w.props,W.props,Q);if(W.items!==!0&&w.items!==void 0)W.items=c0.mergeEvaluated.items(Z,w.items,W.items,Q)}mergeValidEvaluated(w,Q){let{it:W,gen:Z}=this;if(W.opts.unevaluated&&(W.props!==!0||W.items!==!0))return Z.if(Q,()=>this.mergeEvaluated(w,E.Name)),!0}}Y6.KeywordCxt=X4;function gZ(w,Q,W,Z){let Y=new X4(w,W,Q);if("code"in W)W.code(Y,Z);else if(Y.$data&&W.validate)(0,_1.funcKeywordCode)(Y,W);else if("macro"in W)(0,_1.macroKeywordCode)(Y,W);else if(W.compile||W.validate)(0,_1.funcKeywordCode)(Y,W)}var oF=/^\/(?:[^~]|~0|~1)*$/,eF=/^([0-9]+)(#|\/(?:[^~]|~0|~1)*)?$/;function _Z(w,{dataLevel:Q,dataNames:W,dataPathArr:Z}){let Y,J;if(w==="")return f.default.rootData;if(w[0]==="/"){if(!oF.test(w))throw Error(`Invalid JSON-pointer: ${w}`);Y=w,J=f.default.rootData}else{let z=eF.exec(w);if(!z)throw Error(`Invalid JSON-pointer: ${w}`);let F=+z[1];if(Y=z[2],Y==="#"){if(F>=Q)throw Error(G("property/index",F));return Z[Q-F]}if(F>Q)throw Error(G("data",F));if(J=W[Q-F],!Y)return J}let X=J,q=Y.split("/");for(let z of q)if(z)J=E._`${J}${(0,E.getProperty)((0,c0.unescapeJsonPointer)(z))}`,X=E._`${X} && ${J}`;return X;function G(z,F){return`Cannot access ${z} ${F} levels up, current level is ${Q}`}}Y6.getData=_Z});var e5=N((q4)=>{Object.defineProperty(q4,"__esModule",{value:!0});class xZ extends Error{constructor(w){super("validation failed");this.errors=w,this.ajv=this.validation=!0}}q4.default=xZ});var l1=N((z4)=>{Object.defineProperty(z4,"__esModule",{value:!0});var G4=h1();class lZ extends Error{constructor(w,Q,W,Z){super(Z||`can't resolve reference ${W} from id ${Q}`);this.missingRef=(0,G4.resolveUrl)(w,Q,W),this.missingSchema=(0,G4.normalizeId)((0,G4.getFullPath)(w,this.missingRef))}}z4.default=lZ});var Q9=N((J0)=>{Object.defineProperty(J0,"__esModule",{value:!0});J0.resolveSchema=J0.getCompilingSchema=J0.resolveRef=J0.compileSchema=J0.SchemaEnv=void 0;var V0=m(),wK=e5(),N6=p0(),M0=h1(),iZ=e(),QK=x1();class i1{constructor(w){var Q;this.refs={},this.dynamicAnchors={};let W;if(typeof w.schema=="object")W=w.schema;this.schema=w.schema,this.schemaId=w.schemaId,this.root=w.root||this,this.baseId=(Q=w.baseId)!==null&&Q!==void 0?Q:(0,M0.normalizeId)(W===null||W===void 0?void 0:W[w.schemaId||"$id"]),this.schemaPath=w.schemaPath,this.localRefs=w.localRefs,this.meta=w.meta,this.$async=W===null||W===void 0?void 0:W.$async,this.refs={}}}J0.SchemaEnv=i1;function K4(w){let Q=mZ.call(this,w);if(Q)return Q;let W=(0,M0.getFullPath)(this.opts.uriResolver,w.root.baseId),{es5:Z,lines:Y}=this.opts.code,{ownProperties:J}=this.opts,X=new V0.CodeGen(this.scope,{es5:Z,lines:Y,ownProperties:J}),q;if(w.$async)q=X.scopeValue("Error",{ref:wK.default,code:V0._`require("ajv/dist/runtime/validation_error").default`});let G=X.scopeName("validate");w.validateName=G;let z={gen:X,allErrors:this.opts.allErrors,data:N6.default.data,parentData:N6.default.parentData,parentDataProperty:N6.default.parentDataProperty,dataNames:[N6.default.data],dataPathArr:[V0.nil],dataLevel:0,dataTypes:[],definedProperties:new Set,topSchemaRef:X.scopeValue("schema",this.opts.code.source===!0?{ref:w.schema,code:(0,V0.stringify)(w.schema)}:{ref:w.schema}),validateName:G,ValidationError:q,schema:w.schema,schemaEnv:w,rootId:W,baseId:w.baseId||W,schemaPath:V0.nil,errSchemaPath:w.schemaPath||(this.opts.jtd?"":"#"),errorPath:V0._`""`,opts:this.opts,self:this},F;try{this._compilations.add(w),(0,QK.validateFunctionCode)(z),X.optimize(this.opts.code.optimize);let K=X.toString();if(F=`${X.scopeRefs(N6.default.scope)}return ${K}`,this.opts.code.process)F=this.opts.code.process(F,w);let V=Function(`${N6.default.self}`,`${N6.default.scope}`,F)(this,this.scope.get());if(this.scope.value(G,{ref:V}),V.errors=null,V.schema=w.schema,V.schemaEnv=w,w.$async)V.$async=!0;if(this.opts.code.source===!0)V.source={validateName:G,validateCode:K,scopeValues:X._values};if(this.opts.unevaluated){let{props:M,items:H}=z;if(V.evaluated={props:M instanceof V0.Name?void 0:M,items:H instanceof V0.Name?void 0:H,dynamicProps:M instanceof V0.Name,dynamicItems:H instanceof V0.Name},V.source)V.source.evaluated=(0,V0.stringify)(V.evaluated)}return w.validate=V,w}catch(K){if(delete w.validate,delete w.validateName,F)this.logger.error("Error compiling schema, function code:",F);throw K}finally{this._compilations.delete(w)}}J0.compileSchema=K4;function WK(w,Q,W){var Z;W=(0,M0.resolveUrl)(this.opts.uriResolver,Q,W);let Y=w.refs[W];if(Y)return Y;let J=JK.call(this,w,W);if(J===void 0){let X=(Z=w.localRefs)===null||Z===void 0?void 0:Z[W],{schemaId:q}=this.opts;if(X)J=new i1({schema:X,schemaId:q,root:w,baseId:Q})}if(J===void 0)return;return w.refs[W]=ZK.call(this,J)}J0.resolveRef=WK;function ZK(w){if((0,M0.inlineRef)(w.schema,this.opts.inlineRefs))return w.schema;return w.validate?w:K4.call(this,w)}function mZ(w){for(let Q of this._compilations)if(YK(Q,w))return Q}J0.getCompilingSchema=mZ;function YK(w,Q){return w.schema===Q.schema&&w.root===Q.root&&w.baseId===Q.baseId}function JK(w,Q){let W;while(typeof(W=this.refs[Q])=="string")Q=W;return W||this.schemas[Q]||w9.call(this,w,Q)}function w9(w,Q){let W=this.opts.uriResolver.parse(Q),Z=(0,M0._getFullPath)(this.opts.uriResolver,W),Y=(0,M0.getFullPath)(this.opts.uriResolver,w.baseId,void 0);if(Object.keys(w.schema).length>0&&Z===Y)return F4.call(this,W,w);let J=(0,M0.normalizeId)(Z),X=this.refs[J]||this.schemas[J];if(typeof X=="string"){let q=w9.call(this,w,X);if(typeof(q===null||q===void 0?void 0:q.schema)!=="object")return;return F4.call(this,W,q)}if(typeof(X===null||X===void 0?void 0:X.schema)!=="object")return;if(!X.validate)K4.call(this,X);if(J===(0,M0.normalizeId)(Q)){let{schema:q}=X,{schemaId:G}=this.opts,z=q[G];if(z)Y=(0,M0.resolveUrl)(this.opts.uriResolver,Y,z);return new i1({schema:q,schemaId:G,root:w,baseId:Y})}return F4.call(this,W,X)}J0.resolveSchema=w9;var XK=new Set(["properties","patternProperties","enum","dependencies","definitions"]);function F4(w,{baseId:Q,schema:W,root:Z}){var Y;if(((Y=w.fragment)===null||Y===void 0?void 0:Y[0])!=="/")return;for(let q of w.fragment.slice(1).split("/")){if(typeof W==="boolean")return;let G=W[(0,iZ.unescapeFragment)(q)];if(G===void 0)return;W=G;let z=typeof W==="object"&&W[this.opts.schemaId];if(!XK.has(q)&&z)Q=(0,M0.resolveUrl)(this.opts.uriResolver,Q,z)}let J;if(typeof W!="boolean"&&W.$ref&&!(0,iZ.schemaHasRulesButRef)(W,this.RULES)){let q=(0,M0.resolveUrl)(this.opts.uriResolver,Q,W.$ref);J=w9.call(this,Z,q)}let{schemaId:X}=this.opts;if(J=J||new i1({schema:W,schemaId:X,root:Z,baseId:Q}),J.schema!==J.root.schema)return J;return}});var pZ=N((GN,qK)=>{qK.exports={$id:"https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#",description:"Meta-schema for $data reference (JSON AnySchema extension proposal)",type:"object",required:["$data"],properties:{$data:{type:"string",anyOf:[{format:"relative-json-pointer"},{format:"json-pointer"}]}},additionalProperties:!1}});var H4=N((zN,rZ)=>{var GK=RegExp.prototype.test.bind(/^[\da-f]{8}-[\da-f]{4}-[\da-f]{4}-[\da-f]{4}-[\da-f]{12}$/iu),dZ=RegExp.prototype.test.bind(/^(?:(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)$/u);function B4(w){let Q="",W=0,Z=0;for(Z=0;Z<w.length;Z++){if(W=w[Z].charCodeAt(0),W===48)continue;if(!(W>=48&&W<=57||W>=65&&W<=70||W>=97&&W<=102))return"";Q+=w[Z];break}for(Z+=1;Z<w.length;Z++){if(W=w[Z].charCodeAt(0),!(W>=48&&W<=57||W>=65&&W<=70||W>=97&&W<=102))return"";Q+=w[Z]}return Q}var zK=RegExp.prototype.test.bind(/[^!"$&'()*+,\-.;=_`a-z{}~]/u);function cZ(w){return w.length=0,!0}function FK(w,Q,W){if(w.length){let Z=B4(w);if(Z!=="")Q.push(Z);else return W.error=!0,!1;w.length=0}return!0}function KK(w){let Q=0,W={error:!1,address:"",zone:""},Z=[],Y=[],J=!1,X=!1,q=FK;for(let G=0;G<w.length;G++){let z=w[G];if(z==="["||z==="]")continue;if(z===":"){if(J===!0)X=!0;if(!q(Y,Z,W))break;if(++Q>7){W.error=!0;break}if(G>0&&w[G-1]===":")J=!0;Z.push(":");continue}else if(z==="%"){if(!q(Y,Z,W))break;q=cZ}else{Y.push(z);continue}}if(Y.length)if(q===cZ)W.zone=Y.join("");else if(X)Z.push(Y.join(""));else Z.push(B4(Y));return W.address=Z.join(""),W}function nZ(w){if(BK(w,":")<2)return{host:w,isIPV6:!1};let Q=KK(w);if(!Q.error){let{address:W,address:Z}=Q;if(Q.zone)W+="%"+Q.zone,Z+="%25"+Q.zone;return{host:W,isIPV6:!0,escapedHost:Z}}else return{host:w,isIPV6:!1}}function BK(w,Q){let W=0;for(let Z=0;Z<w.length;Z++)if(w[Z]===Q)W++;return W}function HK(w){let Q=w,W=[],Z=-1,Y=0;while(Y=Q.length){if(Y===1)if(Q===".")break;else if(Q==="/"){W.push("/");break}else{W.push(Q);break}else if(Y===2){if(Q[0]==="."){if(Q[1]===".")break;else if(Q[1]==="/"){Q=Q.slice(2);continue}}else if(Q[0]==="/"){if(Q[1]==="."||Q[1]==="/"){W.push("/");break}}}else if(Y===3){if(Q==="/.."){if(W.length!==0)W.pop();W.push("/");break}}if(Q[0]==="."){if(Q[1]==="."){if(Q[2]==="/"){Q=Q.slice(3);continue}}else if(Q[1]==="/"){Q=Q.slice(2);continue}}else if(Q[0]==="/"){if(Q[1]==="."){if(Q[2]==="/"){Q=Q.slice(2);continue}else if(Q[2]==="."){if(Q[3]==="/"){if(Q=Q.slice(3),W.length!==0)W.pop();continue}}}}if((Z=Q.indexOf("/",1))===-1){W.push(Q);break}else W.push(Q.slice(0,Z)),Q=Q.slice(Z)}return W.join("")}function VK(w,Q){let W=Q!==!0?escape:unescape;if(w.scheme!==void 0)w.scheme=W(w.scheme);if(w.userinfo!==void 0)w.userinfo=W(w.userinfo);if(w.host!==void 0)w.host=W(w.host);if(w.path!==void 0)w.path=W(w.path);if(w.query!==void 0)w.query=W(w.query);if(w.fragment!==void 0)w.fragment=W(w.fragment);return w}function MK(w){let Q=[];if(w.userinfo!==void 0)Q.push(w.userinfo),Q.push("@");if(w.host!==void 0){let W=unescape(w.host);if(!dZ(W)){let Z=nZ(W);if(Z.isIPV6===!0)W=`[${Z.escapedHost}]`;else W=w.host}Q.push(W)}if(typeof w.port==="number"||typeof w.port==="string")Q.push(":"),Q.push(String(w.port));return Q.length?Q.join(""):void 0}rZ.exports={nonSimpleDomain:zK,recomposeAuthority:MK,normalizeComponentEncoding:VK,removeDotSegments:HK,isIPv4:dZ,isUUID:GK,normalizeIPv6:nZ,stringArrayToHexStripped:B4}});var eZ=N((FN,oZ)=>{var{isUUID:LK}=H4(),$K=/([\da-z][\d\-a-z]{0,31}):((?:[\w!$'()*+,\-.:;=@]|%[\da-f]{2})+)/iu,AK=["http","https","ws","wss","urn","urn:uuid"];function UK(w){return AK.indexOf(w)!==-1}function V4(w){if(w.secure===!0)return!0;else if(w.secure===!1)return!1;else if(w.scheme)return w.scheme.length===3&&(w.scheme[0]==="w"||w.scheme[0]==="W")&&(w.scheme[1]==="s"||w.scheme[1]==="S")&&(w.scheme[2]==="s"||w.scheme[2]==="S");else return!1}function sZ(w){if(!w.host)w.error=w.error||"HTTP URIs must have a host.";return w}function aZ(w){let Q=String(w.scheme).toLowerCase()==="https";if(w.port===(Q?443:80)||w.port==="")w.port=void 0;if(!w.path)w.path="/";return w}function jK(w){return w.secure=V4(w),w.resourceName=(w.path||"/")+(w.query?"?"+w.query:""),w.path=void 0,w.query=void 0,w}function NK(w){if(w.port===(V4(w)?443:80)||w.port==="")w.port=void 0;if(typeof w.secure==="boolean")w.scheme=w.secure?"wss":"ws",w.secure=void 0;if(w.resourceName){let[Q,W]=w.resourceName.split("?");w.path=Q&&Q!=="/"?Q:void 0,w.query=W,w.resourceName=void 0}return w.fragment=void 0,w}function OK(w,Q){if(!w.path)return w.error="URN can not be parsed",w;let W=w.path.match($K);if(W){let Z=Q.scheme||w.scheme||"urn";w.nid=W[1].toLowerCase(),w.nss=W[2];let Y=`${Z}:${Q.nid||w.nid}`,J=M4(Y);if(w.path=void 0,J)w=J.parse(w,Q)}else w.error=w.error||"URN can not be parsed.";return w}function DK(w,Q){if(w.nid===void 0)throw Error("URN without nid cannot be serialized");let W=Q.scheme||w.scheme||"urn",Z=w.nid.toLowerCase(),Y=`${W}:${Q.nid||Z}`,J=M4(Y);if(J)w=J.serialize(w,Q);let X=w,q=w.nss;return X.path=`${Z||Q.nid}:${q}`,Q.skipEscape=!0,X}function IK(w,Q){let W=w;if(W.uuid=W.nss,W.nss=void 0,!Q.tolerant&&(!W.uuid||!LK(W.uuid)))W.error=W.error||"UUID is not valid.";return W}function TK(w){let Q=w;return Q.nss=(w.uuid||"").toLowerCase(),Q}var tZ={scheme:"http",domainHost:!0,parse:sZ,serialize:aZ},PK={scheme:"https",domainHost:tZ.domainHost,parse:sZ,serialize:aZ},W9={scheme:"ws",domainHost:!0,parse:jK,serialize:NK},RK={scheme:"wss",domainHost:W9.domainHost,parse:W9.parse,serialize:W9.serialize},bK={scheme:"urn",parse:OK,serialize:DK,skipNormalize:!0},SK={scheme:"urn:uuid",parse:IK,serialize:TK,skipNormalize:!0},Z9={http:tZ,https:PK,ws:W9,wss:RK,urn:bK,"urn:uuid":SK};Object.setPrototypeOf(Z9,null);function M4(w){return w&&(Z9[w]||Z9[w.toLowerCase()])||void 0}oZ.exports={wsIsSecure:V4,SCHEMES:Z9,isValidSchemeName:UK,getSchemeHandler:M4}});var WY=N((KN,J9)=>{var{normalizeIPv6:EK,removeDotSegments:m1,recomposeAuthority:kK,normalizeComponentEncoding:Y9,isIPv4:fK,nonSimpleDomain:CK}=H4(),{SCHEMES:vK,getSchemeHandler:wY}=eZ();function yK(w,Q){if(typeof w==="string")w=k0(d0(w,Q),Q);else if(typeof w==="object")w=d0(k0(w,Q),Q);return w}function uK(w,Q,W){let Z=W?Object.assign({scheme:"null"},W):{scheme:"null"},Y=QY(d0(w,Z),d0(Q,Z),Z,!0);return Z.skipEscape=!0,k0(Y,Z)}function QY(w,Q,W,Z){let Y={};if(!Z)w=d0(k0(w,W),W),Q=d0(k0(Q,W),W);if(W=W||{},!W.tolerant&&Q.scheme)Y.scheme=Q.scheme,Y.userinfo=Q.userinfo,Y.host=Q.host,Y.port=Q.port,Y.path=m1(Q.path||""),Y.query=Q.query;else{if(Q.userinfo!==void 0||Q.host!==void 0||Q.port!==void 0)Y.userinfo=Q.userinfo,Y.host=Q.host,Y.port=Q.port,Y.path=m1(Q.path||""),Y.query=Q.query;else{if(!Q.path)if(Y.path=w.path,Q.query!==void 0)Y.query=Q.query;else Y.query=w.query;else{if(Q.path[0]==="/")Y.path=m1(Q.path);else{if((w.userinfo!==void 0||w.host!==void 0||w.port!==void 0)&&!w.path)Y.path="/"+Q.path;else if(!w.path)Y.path=Q.path;else Y.path=w.path.slice(0,w.path.lastIndexOf("/")+1)+Q.path;Y.path=m1(Y.path)}Y.query=Q.query}Y.userinfo=w.userinfo,Y.host=w.host,Y.port=w.port}Y.scheme=w.scheme}return Y.fragment=Q.fragment,Y}function hK(w,Q,W){if(typeof w==="string")w=unescape(w),w=k0(Y9(d0(w,W),!0),{...W,skipEscape:!0});else if(typeof w==="object")w=k0(Y9(w,!0),{...W,skipEscape:!0});if(typeof Q==="string")Q=unescape(Q),Q=k0(Y9(d0(Q,W),!0),{...W,skipEscape:!0});else if(typeof Q==="object")Q=k0(Y9(Q,!0),{...W,skipEscape:!0});return w.toLowerCase()===Q.toLowerCase()}function k0(w,Q){let W={host:w.host,scheme:w.scheme,userinfo:w.userinfo,port:w.port,path:w.path,query:w.query,nid:w.nid,nss:w.nss,uuid:w.uuid,fragment:w.fragment,reference:w.reference,resourceName:w.resourceName,secure:w.secure,error:""},Z=Object.assign({},Q),Y=[],J=wY(Z.scheme||W.scheme);if(J&&J.serialize)J.serialize(W,Z);if(W.path!==void 0)if(!Z.skipEscape){if(W.path=escape(W.path),W.scheme!==void 0)W.path=W.path.split("%3A").join(":")}else W.path=unescape(W.path);if(Z.reference!=="suffix"&&W.scheme)Y.push(W.scheme,":");let X=kK(W);if(X!==void 0){if(Z.reference!=="suffix")Y.push("//");if(Y.push(X),W.path&&W.path[0]!=="/")Y.push("/")}if(W.path!==void 0){let q=W.path;if(!Z.absolutePath&&(!J||!J.absolutePath))q=m1(q);if(X===void 0&&q[0]==="/"&&q[1]==="/")q="/%2F"+q.slice(2);Y.push(q)}if(W.query!==void 0)Y.push("?",W.query);if(W.fragment!==void 0)Y.push("#",W.fragment);return Y.join("")}var gK=/^(?:([^#/:?]+):)?(?:\/\/((?:([^#/?@]*)@)?(\[[^#/?\]]+\]|[^#/:?]*)(?::(\d*))?))?([^#?]*)(?:\?([^#]*))?(?:#((?:.|[\n\r])*))?/u;function d0(w,Q){let W=Object.assign({},Q),Z={scheme:void 0,userinfo:void 0,host:"",port:void 0,path:"",query:void 0,fragment:void 0},Y=!1;if(W.reference==="suffix")if(W.scheme)w=W.scheme+":"+w;else w="//"+w;let J=w.match(gK);if(J){if(Z.scheme=J[1],Z.userinfo=J[3],Z.host=J[4],Z.port=parseInt(J[5],10),Z.path=J[6]||"",Z.query=J[7],Z.fragment=J[8],isNaN(Z.port))Z.port=J[5];if(Z.host)if(fK(Z.host)===!1){let G=EK(Z.host);Z.host=G.host.toLowerCase(),Y=G.isIPV6}else Y=!0;if(Z.scheme===void 0&&Z.userinfo===void 0&&Z.host===void 0&&Z.port===void 0&&Z.query===void 0&&!Z.path)Z.reference="same-document";else if(Z.scheme===void 0)Z.reference="relative";else if(Z.fragment===void 0)Z.reference="absolute";else Z.reference="uri";if(W.reference&&W.reference!=="suffix"&&W.reference!==Z.reference)Z.error=Z.error||"URI is not a "+W.reference+" reference.";let X=wY(W.scheme||Z.scheme);if(!W.unicodeSupport&&(!X||!X.unicodeSupport)){if(Z.host&&(W.domainHost||X&&X.domainHost)&&Y===!1&&CK(Z.host))try{Z.host=URL.domainToASCII(Z.host.toLowerCase())}catch(q){Z.error=Z.error||"Host's domain name can not be converted to ASCII: "+q}}if(!X||X&&!X.skipNormalize){if(w.indexOf("%")!==-1){if(Z.scheme!==void 0)Z.scheme=unescape(Z.scheme);if(Z.host!==void 0)Z.host=unescape(Z.host)}if(Z.path)Z.path=escape(unescape(Z.path));if(Z.fragment)Z.fragment=encodeURI(decodeURIComponent(Z.fragment))}if(X&&X.parse)X.parse(Z,W)}else Z.error=Z.error||"URI can not be parsed.";return Z}var L4={SCHEMES:vK,normalize:yK,resolve:uK,resolveComponent:QY,equal:hK,serialize:k0,parse:d0};J9.exports=L4;J9.exports.default=L4;J9.exports.fastUri=L4});var YY=N(($4)=>{Object.defineProperty($4,"__esModule",{value:!0});var ZY=WY();ZY.code='require("ajv/dist/runtime/uri").default';$4.default=ZY});var BY=N((Tw)=>{Object.defineProperty(Tw,"__esModule",{value:!0});Tw.CodeGen=Tw.Name=Tw.nil=Tw.stringify=Tw.str=Tw._=Tw.KeywordCxt=void 0;var _K=x1();Object.defineProperty(Tw,"KeywordCxt",{enumerable:!0,get:function(){return _K.KeywordCxt}});var e6=m();Object.defineProperty(Tw,"_",{enumerable:!0,get:function(){return e6._}});Object.defineProperty(Tw,"str",{enumerable:!0,get:function(){return e6.str}});Object.defineProperty(Tw,"stringify",{enumerable:!0,get:function(){return e6.stringify}});Object.defineProperty(Tw,"nil",{enumerable:!0,get:function(){return e6.nil}});Object.defineProperty(Tw,"Name",{enumerable:!0,get:function(){return e6.Name}});Object.defineProperty(Tw,"CodeGen",{enumerable:!0,get:function(){return e6.CodeGen}});var xK=e5(),zY=l1(),lK=n8(),p1=Q9(),iK=m(),c1=h1(),X9=y1(),U4=e(),JY=pZ(),mK=YY(),FY=(w,Q)=>new RegExp(w,Q);FY.code="new RegExp";var pK=["removeAdditional","useDefaults","coerceTypes"],cK=new Set(["validate","serialize","parse","wrapper","root","schema","keyword","pattern","formats","validate$data","func","obj","Error"]),dK={errorDataPath:"",format:"`validateFormats: false` can be used instead.",nullable:'"nullable" keyword is supported by default.',jsonPointers:"Deprecated jsPropertySyntax can be used instead.",extendRefs:"Deprecated ignoreKeywordsWithRef can be used instead.",missingRefs:"Pass empty schema with $id that should be ignored to ajv.addSchema.",processCode:"Use option `code: {process: (code, schemaEnv: object) => string}`",sourceCode:"Use option `code: {source: true}`",strictDefaults:"It is default now, see option `strict`.",strictKeywords:"It is default now, see option `strict`.",uniqueItems:'"uniqueItems" keyword is always validated.',unknownFormats:"Disable strict mode or pass `true` to `ajv.addFormat` (or `formats` option).",cache:"Map is used as cache, schema object as key.",serialize:"Map is used as cache, schema object as key.",ajvErrors:"It is default now."},nK={ignoreKeywordsWithRef:"",jsPropertySyntax:"",unicode:'"minLength"/"maxLength" account for unicode characters by default.'},XY=200;function rK(w){var Q,W,Z,Y,J,X,q,G,z,F,K,A,V,M,H,U,j,T,P,b,O,S,i,g,Zw;let c=w.strict,Uw=(Q=w.code)===null||Q===void 0?void 0:Q.optimize,Gw=Uw===!0||Uw===void 0?1:Uw||0,Iw=(Z=(W=w.code)===null||W===void 0?void 0:W.regExp)!==null&&Z!==void 0?Z:FY,hw=(Y=w.uriResolver)!==null&&Y!==void 0?Y:mK.default;return{strictSchema:(X=(J=w.strictSchema)!==null&&J!==void 0?J:c)!==null&&X!==void 0?X:!0,strictNumbers:(G=(q=w.strictNumbers)!==null&&q!==void 0?q:c)!==null&&G!==void 0?G:!0,strictTypes:(F=(z=w.strictTypes)!==null&&z!==void 0?z:c)!==null&&F!==void 0?F:"log",strictTuples:(A=(K=w.strictTuples)!==null&&K!==void 0?K:c)!==null&&A!==void 0?A:"log",strictRequired:(M=(V=w.strictRequired)!==null&&V!==void 0?V:c)!==null&&M!==void 0?M:!1,code:w.code?{...w.code,optimize:Gw,regExp:Iw}:{optimize:Gw,regExp:Iw},loopRequired:(H=w.loopRequired)!==null&&H!==void 0?H:XY,loopEnum:(U=w.loopEnum)!==null&&U!==void 0?U:XY,meta:(j=w.meta)!==null&&j!==void 0?j:!0,messages:(T=w.messages)!==null&&T!==void 0?T:!0,inlineRefs:(P=w.inlineRefs)!==null&&P!==void 0?P:!0,schemaId:(b=w.schemaId)!==null&&b!==void 0?b:"$id",addUsedSchema:(O=w.addUsedSchema)!==null&&O!==void 0?O:!0,validateSchema:(S=w.validateSchema)!==null&&S!==void 0?S:!0,validateFormats:(i=w.validateFormats)!==null&&i!==void 0?i:!0,unicodeRegExp:(g=w.unicodeRegExp)!==null&&g!==void 0?g:!0,int32range:(Zw=w.int32range)!==null&&Zw!==void 0?Zw:!0,uriResolver:hw}}class q9{constructor(w={}){this.schemas={},this.refs={},this.formats={},this._compilations=new Set,this._loading={},this._cache=new Map,w=this.opts={...w,...rK(w)};let{es5:Q,lines:W}=this.opts.code;this.scope=new iK.ValueScope({scope:{},prefixes:cK,es5:Q,lines:W}),this.logger=wB(w.logger);let Z=w.validateFormats;if(w.validateFormats=!1,this.RULES=(0,lK.getRules)(),qY.call(this,dK,w,"NOT SUPPORTED"),qY.call(this,nK,w,"DEPRECATED","warn"),this._metaOpts=oK.call(this),w.formats)aK.call(this);if(this._addVocabularies(),this._addDefaultMetaSchema(),w.keywords)tK.call(this,w.keywords);if(typeof w.meta=="object")this.addMetaSchema(w.meta);sK.call(this),w.validateFormats=Z}_addVocabularies(){this.addKeyword("$async")}_addDefaultMetaSchema(){let{$data:w,meta:Q,schemaId:W}=this.opts,Z=JY;if(W==="id")Z={...JY},Z.id=Z.$id,delete Z.$id;if(Q&&w)this.addMetaSchema(Z,Z[W],!1)}defaultMeta(){let{meta:w,schemaId:Q}=this.opts;return this.opts.defaultMeta=typeof w=="object"?w[Q]||w:void 0}validate(w,Q){let W;if(typeof w=="string"){if(W=this.getSchema(w),!W)throw Error(`no schema with key or ref "${w}"`)}else W=this.compile(w);let Z=W(Q);if(!("$async"in W))this.errors=W.errors;return Z}compile(w,Q){let W=this._addSchema(w,Q);return W.validate||this._compileSchemaEnv(W)}compileAsync(w,Q){if(typeof this.opts.loadSchema!="function")throw Error("options.loadSchema should be a function");let{loadSchema:W}=this.opts;return Z.call(this,w,Q);async function Z(z,F){await Y.call(this,z.$schema);let K=this._addSchema(z,F);return K.validate||J.call(this,K)}async function Y(z){if(z&&!this.getSchema(z))await Z.call(this,{$ref:z},!0)}async function J(z){try{return this._compileSchemaEnv(z)}catch(F){if(!(F instanceof zY.default))throw F;return X.call(this,F),await q.call(this,F.missingSchema),J.call(this,z)}}function X({missingSchema:z,missingRef:F}){if(this.refs[z])throw Error(`AnySchema ${z} is loaded but ${F} cannot be resolved`)}async function q(z){let F=await G.call(this,z);if(!this.refs[z])await Y.call(this,F.$schema);if(!this.refs[z])this.addSchema(F,z,Q)}async function G(z){let F=this._loading[z];if(F)return F;try{return await(this._loading[z]=W(z))}finally{delete this._loading[z]}}}addSchema(w,Q,W,Z=this.opts.validateSchema){if(Array.isArray(w)){for(let J of w)this.addSchema(J,void 0,W,Z);return this}let Y;if(typeof w==="object"){let{schemaId:J}=this.opts;if(Y=w[J],Y!==void 0&&typeof Y!="string")throw Error(`schema ${J} must be string`)}return Q=(0,c1.normalizeId)(Q||Y),this._checkUnique(Q),this.schemas[Q]=this._addSchema(w,W,Q,Z,!0),this}addMetaSchema(w,Q,W=this.opts.validateSchema){return this.addSchema(w,Q,!0,W),this}validateSchema(w,Q){if(typeof w=="boolean")return!0;let W;if(W=w.$schema,W!==void 0&&typeof W!="string")throw Error("$schema must be a string");if(W=W||this.opts.defaultMeta||this.defaultMeta(),!W)return this.logger.warn("meta-schema not available"),this.errors=null,!0;let Z=this.validate(W,w);if(!Z&&Q){let Y="schema is invalid: "+this.errorsText();if(this.opts.validateSchema==="log")this.logger.error(Y);else throw Error(Y)}return Z}getSchema(w){let Q;while(typeof(Q=GY.call(this,w))=="string")w=Q;if(Q===void 0){let{schemaId:W}=this.opts,Z=new p1.SchemaEnv({schema:{},schemaId:W});if(Q=p1.resolveSchema.call(this,Z,w),!Q)return;this.refs[w]=Q}return Q.validate||this._compileSchemaEnv(Q)}removeSchema(w){if(w instanceof RegExp)return this._removeAllSchemas(this.schemas,w),this._removeAllSchemas(this.refs,w),this;switch(typeof w){case"undefined":return this._removeAllSchemas(this.schemas),this._removeAllSchemas(this.refs),this._cache.clear(),this;case"string":{let Q=GY.call(this,w);if(typeof Q=="object")this._cache.delete(Q.schema);return delete this.schemas[w],delete this.refs[w],this}case"object":{let Q=w;this._cache.delete(Q);let W=w[this.opts.schemaId];if(W)W=(0,c1.normalizeId)(W),delete this.schemas[W],delete this.refs[W];return this}default:throw Error("ajv.removeSchema: invalid parameter")}}addVocabulary(w){for(let Q of w)this.addKeyword(Q);return this}addKeyword(w,Q){let W;if(typeof w=="string"){if(W=w,typeof Q=="object")this.logger.warn("these parameters are deprecated, see docs for addKeyword"),Q.keyword=W}else if(typeof w=="object"&&Q===void 0){if(Q=w,W=Q.keyword,Array.isArray(W)&&!W.length)throw Error("addKeywords: keyword must be string or non-empty array")}else throw Error("invalid addKeywords parameters");if(WB.call(this,W,Q),!Q)return(0,U4.eachItem)(W,(Y)=>A4.call(this,Y)),this;YB.call(this,Q);let Z={...Q,type:(0,X9.getJSONTypes)(Q.type),schemaType:(0,X9.getJSONTypes)(Q.schemaType)};return(0,U4.eachItem)(W,Z.type.length===0?(Y)=>A4.call(this,Y,Z):(Y)=>Z.type.forEach((J)=>A4.call(this,Y,Z,J))),this}getKeyword(w){let Q=this.RULES.all[w];return typeof Q=="object"?Q.definition:!!Q}removeKeyword(w){let{RULES:Q}=this;delete Q.keywords[w],delete Q.all[w];for(let W of Q.rules){let Z=W.rules.findIndex((Y)=>Y.keyword===w);if(Z>=0)W.rules.splice(Z,1)}return this}addFormat(w,Q){if(typeof Q=="string")Q=new RegExp(Q);return this.formats[w]=Q,this}errorsText(w=this.errors,{separator:Q=", ",dataVar:W="data"}={}){if(!w||w.length===0)return"No errors";return w.map((Z)=>`${W}${Z.instancePath} ${Z.message}`).reduce((Z,Y)=>Z+Q+Y)}$dataMetaSchema(w,Q){let W=this.RULES.all;w=JSON.parse(JSON.stringify(w));for(let Z of Q){let Y=Z.split("/").slice(1),J=w;for(let X of Y)J=J[X];for(let X in W){let q=W[X];if(typeof q!="object")continue;let{$data:G}=q.definition,z=J[X];if(G&&z)J[X]=KY(z)}}return w}_removeAllSchemas(w,Q){for(let W in w){let Z=w[W];if(!Q||Q.test(W)){if(typeof Z=="string")delete w[W];else if(Z&&!Z.meta)this._cache.delete(Z.schema),delete w[W]}}}_addSchema(w,Q,W,Z=this.opts.validateSchema,Y=this.opts.addUsedSchema){let J,{schemaId:X}=this.opts;if(typeof w=="object")J=w[X];else if(this.opts.jtd)throw Error("schema must be object");else if(typeof w!="boolean")throw Error("schema must be object or boolean");let q=this._cache.get(w);if(q!==void 0)return q;W=(0,c1.normalizeId)(J||W);let G=c1.getSchemaRefs.call(this,w,W);if(q=new p1.SchemaEnv({schema:w,schemaId:X,meta:Q,baseId:W,localRefs:G}),this._cache.set(q.schema,q),Y&&!W.startsWith("#")){if(W)this._checkUnique(W);this.refs[W]=q}if(Z)this.validateSchema(w,!0);return q}_checkUnique(w){if(this.schemas[w]||this.refs[w])throw Error(`schema with key or id "${w}" already exists`)}_compileSchemaEnv(w){if(w.meta)this._compileMetaSchema(w);else p1.compileSchema.call(this,w);if(!w.validate)throw Error("ajv implementation error");return w.validate}_compileMetaSchema(w){let Q=this.opts;this.opts=this._metaOpts;try{p1.compileSchema.call(this,w)}finally{this.opts=Q}}}q9.ValidationError=xK.default;q9.MissingRefError=zY.default;Tw.default=q9;function qY(w,Q,W,Z="error"){for(let Y in w){let J=Y;if(J in Q)this.logger[Z](`${W}: option ${Y}. ${w[J]}`)}}function GY(w){return w=(0,c1.normalizeId)(w),this.schemas[w]||this.refs[w]}function sK(){let w=this.opts.schemas;if(!w)return;if(Array.isArray(w))this.addSchema(w);else for(let Q in w)this.addSchema(w[Q],Q)}function aK(){for(let w in this.opts.formats){let Q=this.opts.formats[w];if(Q)this.addFormat(w,Q)}}function tK(w){if(Array.isArray(w)){this.addVocabulary(w);return}this.logger.warn("keywords option as map is deprecated, pass array");for(let Q in w){let W=w[Q];if(!W.keyword)W.keyword=Q;this.addKeyword(W)}}function oK(){let w={...this.opts};for(let Q of pK)delete w[Q];return w}var eK={log(){},warn(){},error(){}};function wB(w){if(w===!1)return eK;if(w===void 0)return console;if(w.log&&w.warn&&w.error)return w;throw Error("logger must implement log, warn and error methods")}var QB=/^[a-z_$][a-z0-9_$:-]*$/i;function WB(w,Q){let{RULES:W}=this;if((0,U4.eachItem)(w,(Z)=>{if(W.keywords[Z])throw Error(`Keyword ${Z} is already defined`);if(!QB.test(Z))throw Error(`Keyword ${Z} has invalid name`)}),!Q)return;if(Q.$data&&!(("code"in Q)||("validate"in Q)))throw Error('$data keyword must have "code" or "validate" function')}function A4(w,Q,W){var Z;let Y=Q===null||Q===void 0?void 0:Q.post;if(W&&Y)throw Error('keyword with "post" flag cannot have "type"');let{RULES:J}=this,X=Y?J.post:J.rules.find(({type:G})=>G===W);if(!X)X={type:W,rules:[]},J.rules.push(X);if(J.keywords[w]=!0,!Q)return;let q={keyword:w,definition:{...Q,type:(0,X9.getJSONTypes)(Q.type),schemaType:(0,X9.getJSONTypes)(Q.schemaType)}};if(Q.before)ZB.call(this,X,q,Q.before);else X.rules.push(q);J.all[w]=q,(Z=Q.implements)===null||Z===void 0||Z.forEach((G)=>this.addKeyword(G))}function ZB(w,Q,W){let Z=w.rules.findIndex((Y)=>Y.keyword===W);if(Z>=0)w.rules.splice(Z,0,Q);else w.rules.push(Q),this.logger.warn(`rule ${W} is not defined`)}function YB(w){let{metaSchema:Q}=w;if(Q===void 0)return;if(w.$data&&this.opts.$data)Q=KY(Q);w.validateSchema=this.compile(Q,!0)}var JB={$ref:"https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#"};function KY(w){return{anyOf:[w,JB]}}});var HY=N((j4)=>{Object.defineProperty(j4,"__esModule",{value:!0});var XB={keyword:"id",code(){throw Error('NOT SUPPORTED: keyword "id", use "$id" for schema ID')}};j4.default=XB});var $Y=N((O6)=>{Object.defineProperty(O6,"__esModule",{value:!0});O6.callRef=O6.getValidate=void 0;var qB=l1(),VY=Y0(),rw=m(),w1=p0(),MY=Q9(),G9=e(),GB={keyword:"$ref",schemaType:"string",code(w){let{gen:Q,schema:W,it:Z}=w,{baseId:Y,schemaEnv:J,validateName:X,opts:q,self:G}=Z,{root:z}=J;if((W==="#"||W==="#/")&&Y===z.baseId)return K();let F=MY.resolveRef.call(G,z,Y,W);if(F===void 0)throw new qB.default(Z.opts.uriResolver,Y,W);if(F instanceof MY.SchemaEnv)return A(F);return V(F);function K(){if(J===z)return z9(w,X,J,J.$async);let M=Q.scopeValue("root",{ref:z});return z9(w,rw._`${M}.validate`,z,z.$async)}function A(M){let H=LY(w,M);z9(w,H,M,M.$async)}function V(M){let H=Q.scopeValue("schema",q.code.source===!0?{ref:M,code:(0,rw.stringify)(M)}:{ref:M}),U=Q.name("valid"),j=w.subschema({schema:M,dataTypes:[],schemaPath:rw.nil,topSchemaRef:H,errSchemaPath:W},U);w.mergeEvaluated(j),w.ok(U)}}};function LY(w,Q){let{gen:W}=w;return Q.validate?W.scopeValue("validate",{ref:Q.validate}):rw._`${W.scopeValue("wrapper",{ref:Q})}.validate`}O6.getValidate=LY;function z9(w,Q,W,Z){let{gen:Y,it:J}=w,{allErrors:X,schemaEnv:q,opts:G}=J,z=G.passContext?w1.default.this:rw.nil;if(Z)F();else K();function F(){if(!q.$async)throw Error("async schema referenced by sync schema");let M=Y.let("valid");Y.try(()=>{if(Y.code(rw._`await ${(0,VY.callValidateCode)(w,Q,z)}`),V(Q),!X)Y.assign(M,!0)},(H)=>{if(Y.if(rw._`!(${H} instanceof ${J.ValidationError})`,()=>Y.throw(H)),A(H),!X)Y.assign(M,!1)}),w.ok(M)}function K(){w.result((0,VY.callValidateCode)(w,Q,z),()=>V(Q),()=>A(Q))}function A(M){let H=rw._`${M}.errors`;Y.assign(w1.default.vErrors,rw._`${w1.default.vErrors} === null ? ${H} : ${w1.default.vErrors}.concat(${H})`),Y.assign(w1.default.errors,rw._`${w1.default.vErrors}.length`)}function V(M){var H;if(!J.opts.unevaluated)return;let U=(H=W===null||W===void 0?void 0:W.validate)===null||H===void 0?void 0:H.evaluated;if(J.props!==!0)if(U&&!U.dynamicProps){if(U.props!==void 0)J.props=G9.mergeEvaluated.props(Y,U.props,J.props)}else{let j=Y.var("props",rw._`${M}.evaluated.props`);J.props=G9.mergeEvaluated.props(Y,j,J.props,rw.Name)}if(J.items!==!0)if(U&&!U.dynamicItems){if(U.items!==void 0)J.items=G9.mergeEvaluated.items(Y,U.items,J.items)}else{let j=Y.var("items",rw._`${M}.evaluated.items`);J.items=G9.mergeEvaluated.items(Y,j,J.items,rw.Name)}}}O6.callRef=z9;O6.default=GB});var AY=N((N4)=>{Object.defineProperty(N4,"__esModule",{value:!0});var zB=HY(),FB=$Y(),KB=["$schema","$id","$defs","$vocabulary",{keyword:"$comment"},"definitions",zB.default,FB.default];N4.default=KB});var UY=N((O4)=>{Object.defineProperty(O4,"__esModule",{value:!0});var F9=m(),J6=F9.operators,K9={maximum:{okStr:"<=",ok:J6.LTE,fail:J6.GT},minimum:{okStr:">=",ok:J6.GTE,fail:J6.LT},exclusiveMaximum:{okStr:"<",ok:J6.LT,fail:J6.GTE},exclusiveMinimum:{okStr:">",ok:J6.GT,fail:J6.LTE}},BB={message:({keyword:w,schemaCode:Q})=>F9.str`must be ${K9[w].okStr} ${Q}`,params:({keyword:w,schemaCode:Q})=>F9._`{comparison: ${K9[w].okStr}, limit: ${Q}}`},HB={keyword:Object.keys(K9),type:"number",schemaType:"number",$data:!0,error:BB,code(w){let{keyword:Q,data:W,schemaCode:Z}=w;w.fail$data(F9._`${W} ${K9[Q].fail} ${Z} || isNaN(${W})`)}};O4.default=HB});var jY=N((D4)=>{Object.defineProperty(D4,"__esModule",{value:!0});var d1=m(),VB={message:({schemaCode:w})=>d1.str`must be multiple of ${w}`,params:({schemaCode:w})=>d1._`{multipleOf: ${w}}`},MB={keyword:"multipleOf",type:"number",schemaType:"number",$data:!0,error:VB,code(w){let{gen:Q,data:W,schemaCode:Z,it:Y}=w,J=Y.opts.multipleOfPrecision,X=Q.let("res"),q=J?d1._`Math.abs(Math.round(${X}) - ${X}) > 1e-${J}`:d1._`${X} !== parseInt(${X})`;w.fail$data(d1._`(${Z} === 0 || (${X} = ${W}/${Z}, ${q}))`)}};D4.default=MB});var OY=N((I4)=>{Object.defineProperty(I4,"__esModule",{value:!0});function NY(w){let Q=w.length,W=0,Z=0,Y;while(Z<Q)if(W++,Y=w.charCodeAt(Z++),Y>=55296&&Y<=56319&&Z<Q){if(Y=w.charCodeAt(Z),(Y&64512)===56320)Z++}return W}I4.default=NY;NY.code='require("ajv/dist/runtime/ucs2length").default'});var DY=N((T4)=>{Object.defineProperty(T4,"__esModule",{value:!0});var D6=m(),LB=e(),$B=OY(),AB={message({keyword:w,schemaCode:Q}){let W=w==="maxLength"?"more":"fewer";return D6.str`must NOT have ${W} than ${Q} characters`},params:({schemaCode:w})=>D6._`{limit: ${w}}`},UB={keyword:["maxLength","minLength"],type:"string",schemaType:"number",$data:!0,error:AB,code(w){let{keyword:Q,data:W,schemaCode:Z,it:Y}=w,J=Q==="maxLength"?D6.operators.GT:D6.operators.LT,X=Y.opts.unicode===!1?D6._`${W}.length`:D6._`${(0,LB.useFunc)(w.gen,$B.default)}(${W})`;w.fail$data(D6._`${X} ${J} ${Z}`)}};T4.default=UB});var IY=N((P4)=>{Object.defineProperty(P4,"__esModule",{value:!0});var jB=Y0(),B9=m(),NB={message:({schemaCode:w})=>B9.str`must match pattern "${w}"`,params:({schemaCode:w})=>B9._`{pattern: ${w}}`},OB={keyword:"pattern",type:"string",schemaType:"string",$data:!0,error:NB,code(w){let{data:Q,$data:W,schema:Z,schemaCode:Y,it:J}=w,X=J.opts.unicodeRegExp?"u":"",q=W?B9._`(new RegExp(${Y}, ${X}))`:(0,jB.usePattern)(w,Z);w.fail$data(B9._`!${q}.test(${Q})`)}};P4.default=OB});var TY=N((R4)=>{Object.defineProperty(R4,"__esModule",{value:!0});var n1=m(),DB={message({keyword:w,schemaCode:Q}){let W=w==="maxProperties"?"more":"fewer";return n1.str`must NOT have ${W} than ${Q} properties`},params:({schemaCode:w})=>n1._`{limit: ${w}}`},IB={keyword:["maxProperties","minProperties"],type:"object",schemaType:"number",$data:!0,error:DB,code(w){let{keyword:Q,data:W,schemaCode:Z}=w,Y=Q==="maxProperties"?n1.operators.GT:n1.operators.LT;w.fail$data(n1._`Object.keys(${W}).length ${Y} ${Z}`)}};R4.default=IB});var PY=N((b4)=>{Object.defineProperty(b4,"__esModule",{value:!0});var r1=Y0(),s1=m(),TB=e(),PB={message:({params:{missingProperty:w}})=>s1.str`must have required property '${w}'`,params:({params:{missingProperty:w}})=>s1._`{missingProperty: ${w}}`},RB={keyword:"required",type:"object",schemaType:"array",$data:!0,error:PB,code(w){let{gen:Q,schema:W,schemaCode:Z,data:Y,$data:J,it:X}=w,{opts:q}=X;if(!J&&W.length===0)return;let G=W.length>=q.loopRequired;if(X.allErrors)z();else F();if(q.strictRequired){let V=w.parentSchema.properties,{definedProperties:M}=w.it;for(let H of W)if((V===null||V===void 0?void 0:V[H])===void 0&&!M.has(H)){let U=X.schemaEnv.baseId+X.errSchemaPath,j=`required property "${H}" is not defined at "${U}" (strictRequired)`;(0,TB.checkStrictMode)(X,j,X.opts.strictRequired)}}function z(){if(G||J)w.block$data(s1.nil,K);else for(let V of W)(0,r1.checkReportMissingProp)(w,V)}function F(){let V=Q.let("missing");if(G||J){let M=Q.let("valid",!0);w.block$data(M,()=>A(V,M)),w.ok(M)}else Q.if((0,r1.checkMissingProp)(w,W,V)),(0,r1.reportMissingProp)(w,V),Q.else()}function K(){Q.forOf("prop",Z,(V)=>{w.setParams({missingProperty:V}),Q.if((0,r1.noPropertyInData)(Q,Y,V,q.ownProperties),()=>w.error())})}function A(V,M){w.setParams({missingProperty:V}),Q.forOf(V,Z,()=>{Q.assign(M,(0,r1.propertyInData)(Q,Y,V,q.ownProperties)),Q.if((0,s1.not)(M),()=>{w.error(),Q.break()})},s1.nil)}}};b4.default=RB});var RY=N((S4)=>{Object.defineProperty(S4,"__esModule",{value:!0});var a1=m(),bB={message({keyword:w,schemaCode:Q}){let W=w==="maxItems"?"more":"fewer";return a1.str`must NOT have ${W} than ${Q} items`},params:({schemaCode:w})=>a1._`{limit: ${w}}`},SB={keyword:["maxItems","minItems"],type:"array",schemaType:"number",$data:!0,error:bB,code(w){let{keyword:Q,data:W,schemaCode:Z}=w,Y=Q==="maxItems"?a1.operators.GT:a1.operators.LT;w.fail$data(a1._`${W}.length ${Y} ${Z}`)}};S4.default=SB});var H9=N((E4)=>{Object.defineProperty(E4,"__esModule",{value:!0});var bY=u1();bY.code='require("ajv/dist/runtime/equal").default';E4.default=bY});var SY=N((f4)=>{Object.defineProperty(f4,"__esModule",{value:!0});var k4=y1(),Pw=m(),EB=e(),kB=H9(),fB={message:({params:{i:w,j:Q}})=>Pw.str`must NOT have duplicate items (items ## ${Q} and ${w} are identical)`,params:({params:{i:w,j:Q}})=>Pw._`{i: ${w}, j: ${Q}}`},CB={keyword:"uniqueItems",type:"array",schemaType:"boolean",$data:!0,error:fB,code(w){let{gen:Q,data:W,$data:Z,schema:Y,parentSchema:J,schemaCode:X,it:q}=w;if(!Z&&!Y)return;let G=Q.let("valid"),z=J.items?(0,k4.getSchemaTypes)(J.items):[];w.block$data(G,F,Pw._`${X} === false`),w.ok(G);function F(){let M=Q.let("i",Pw._`${W}.length`),H=Q.let("j");w.setParams({i:M,j:H}),Q.assign(G,!0),Q.if(Pw._`${M} > 1`,()=>(K()?A:V)(M,H))}function K(){return z.length>0&&!z.some((M)=>M==="object"||M==="array")}function A(M,H){let U=Q.name("item"),j=(0,k4.checkDataTypes)(z,U,q.opts.strictNumbers,k4.DataType.Wrong),T=Q.const("indices",Pw._`{}`);Q.for(Pw._`;${M}--;`,()=>{if(Q.let(U,Pw._`${W}[${M}]`),Q.if(j,Pw._`continue`),z.length>1)Q.if(Pw._`typeof ${U} == "string"`,Pw._`${U} += "_"`);Q.if(Pw._`typeof ${T}[${U}] == "number"`,()=>{Q.assign(H,Pw._`${T}[${U}]`),w.error(),Q.assign(G,!1).break()}).code(Pw._`${T}[${U}] = ${M}`)})}function V(M,H){let U=(0,EB.useFunc)(Q,kB.default),j=Q.name("outer");Q.label(j).for(Pw._`;${M}--;`,()=>Q.for(Pw._`${H} = ${M}; ${H}--;`,()=>Q.if(Pw._`${U}(${W}[${M}], ${W}[${H}])`,()=>{w.error(),Q.assign(G,!1).break(j)})))}}};f4.default=CB});var EY=N((v4)=>{Object.defineProperty(v4,"__esModule",{value:!0});var C4=m(),vB=e(),yB=H9(),uB={message:"must be equal to constant",params:({schemaCode:w})=>C4._`{allowedValue: ${w}}`},hB={keyword:"const",$data:!0,error:uB,code(w){let{gen:Q,data:W,$data:Z,schemaCode:Y,schema:J}=w;if(Z||J&&typeof J=="object")w.fail$data(C4._`!${(0,vB.useFunc)(Q,yB.default)}(${W}, ${Y})`);else w.fail(C4._`${J} !== ${W}`)}};v4.default=hB});var kY=N((y4)=>{Object.defineProperty(y4,"__esModule",{value:!0});var t1=m(),gB=e(),_B=H9(),xB={message:"must be equal to one of the allowed values",params:({schemaCode:w})=>t1._`{allowedValues: ${w}}`},lB={keyword:"enum",schemaType:"array",$data:!0,error:xB,code(w){let{gen:Q,data:W,$data:Z,schema:Y,schemaCode:J,it:X}=w;if(!Z&&Y.length===0)throw Error("enum must have non-empty array");let q=Y.length>=X.opts.loopEnum,G,z=()=>G!==null&&G!==void 0?G:G=(0,gB.useFunc)(Q,_B.default),F;if(q||Z)F=Q.let("valid"),w.block$data(F,K);else{if(!Array.isArray(Y))throw Error("ajv implementation error");let V=Q.const("vSchema",J);F=(0,t1.or)(...Y.map((M,H)=>A(V,H)))}w.pass(F);function K(){Q.assign(F,!1),Q.forOf("v",J,(V)=>Q.if(t1._`${z()}(${W}, ${V})`,()=>Q.assign(F,!0).break()))}function A(V,M){let H=Y[M];return typeof H==="object"&&H!==null?t1._`${z()}(${W}, ${V}[${M}])`:t1._`${W} === ${H}`}}};y4.default=lB});var fY=N((u4)=>{Object.defineProperty(u4,"__esModule",{value:!0});var iB=UY(),mB=jY(),pB=DY(),cB=IY(),dB=TY(),nB=PY(),rB=RY(),sB=SY(),aB=EY(),tB=kY(),oB=[iB.default,mB.default,pB.default,cB.default,dB.default,nB.default,rB.default,sB.default,{keyword:"type",schemaType:["string","array"]},{keyword:"nullable",schemaType:"boolean"},aB.default,tB.default];u4.default=oB});var g4=N((o1)=>{Object.defineProperty(o1,"__esModule",{value:!0});o1.validateAdditionalItems=void 0;var I6=m(),h4=e(),eB={message:({params:{len:w}})=>I6.str`must NOT have more than ${w} items`,params:({params:{len:w}})=>I6._`{limit: ${w}}`},wH={keyword:"additionalItems",type:"array",schemaType:["boolean","object"],before:"uniqueItems",error:eB,code(w){let{parentSchema:Q,it:W}=w,{items:Z}=Q;if(!Array.isArray(Z)){(0,h4.checkStrictMode)(W,'"additionalItems" is ignored when "items" is not an array of schemas');return}CY(w,Z)}};function CY(w,Q){let{gen:W,schema:Z,data:Y,keyword:J,it:X}=w;X.items=!0;let q=W.const("len",I6._`${Y}.length`);if(Z===!1)w.setParams({len:Q.length}),w.pass(I6._`${q} <= ${Q.length}`);else if(typeof Z=="object"&&!(0,h4.alwaysValidSchema)(X,Z)){let z=W.var("valid",I6._`${q} <= ${Q.length}`);W.if((0,I6.not)(z),()=>G(z)),w.ok(z)}function G(z){W.forRange("i",Q.length,q,(F)=>{if(w.subschema({keyword:J,dataProp:F,dataPropType:h4.Type.Num},z),!X.allErrors)W.if((0,I6.not)(z),()=>W.break())})}}o1.validateAdditionalItems=CY;o1.default=wH});var _4=N((e1)=>{Object.defineProperty(e1,"__esModule",{value:!0});e1.validateTuple=void 0;var vY=m(),V9=e(),QH=Y0(),WH={keyword:"items",type:"array",schemaType:["object","array","boolean"],before:"uniqueItems",code(w){let{schema:Q,it:W}=w;if(Array.isArray(Q))return yY(w,"additionalItems",Q);if(W.items=!0,(0,V9.alwaysValidSchema)(W,Q))return;w.ok((0,QH.validateArray)(w))}};function yY(w,Q,W=w.schema){let{gen:Z,parentSchema:Y,data:J,keyword:X,it:q}=w;if(F(Y),q.opts.unevaluated&&W.length&&q.items!==!0)q.items=V9.mergeEvaluated.items(Z,W.length,q.items);let G=Z.name("valid"),z=Z.const("len",vY._`${J}.length`);W.forEach((K,A)=>{if((0,V9.alwaysValidSchema)(q,K))return;Z.if(vY._`${z} > ${A}`,()=>w.subschema({keyword:X,schemaProp:A,dataProp:A},G)),w.ok(G)});function F(K){let{opts:A,errSchemaPath:V}=q,M=W.length,H=M===K.minItems&&(M===K.maxItems||K[Q]===!1);if(A.strictTuples&&!H){let U=`"${X}" is ${M}-tuple, but minItems or maxItems/${Q} are not specified or different at path "${V}"`;(0,V9.checkStrictMode)(q,U,A.strictTuples)}}}e1.validateTuple=yY;e1.default=WH});var uY=N((x4)=>{Object.defineProperty(x4,"__esModule",{value:!0});var ZH=_4(),YH={keyword:"prefixItems",type:"array",schemaType:["array"],before:"uniqueItems",code:(w)=>(0,ZH.validateTuple)(w,"items")};x4.default=YH});var gY=N((l4)=>{Object.defineProperty(l4,"__esModule",{value:!0});var hY=m(),JH=e(),XH=Y0(),qH=g4(),GH={message:({params:{len:w}})=>hY.str`must NOT have more than ${w} items`,params:({params:{len:w}})=>hY._`{limit: ${w}}`},zH={keyword:"items",type:"array",schemaType:["object","boolean"],before:"uniqueItems",error:GH,code(w){let{schema:Q,parentSchema:W,it:Z}=w,{prefixItems:Y}=W;if(Z.items=!0,(0,JH.alwaysValidSchema)(Z,Q))return;if(Y)(0,qH.validateAdditionalItems)(w,Y);else w.ok((0,XH.validateArray)(w))}};l4.default=zH});var _Y=N((i4)=>{Object.defineProperty(i4,"__esModule",{value:!0});var X0=m(),M9=e(),FH={message:({params:{min:w,max:Q}})=>Q===void 0?X0.str`must contain at least ${w} valid item(s)`:X0.str`must contain at least ${w} and no more than ${Q} valid item(s)`,params:({params:{min:w,max:Q}})=>Q===void 0?X0._`{minContains: ${w}}`:X0._`{minContains: ${w}, maxContains: ${Q}}`},KH={keyword:"contains",type:"array",schemaType:["object","boolean"],before:"uniqueItems",trackErrors:!0,error:FH,code(w){let{gen:Q,schema:W,parentSchema:Z,data:Y,it:J}=w,X,q,{minContains:G,maxContains:z}=Z;if(J.opts.next)X=G===void 0?1:G,q=z;else X=1;let F=Q.const("len",X0._`${Y}.length`);if(w.setParams({min:X,max:q}),q===void 0&&X===0){(0,M9.checkStrictMode)(J,'"minContains" == 0 without "maxContains": "contains" keyword ignored');return}if(q!==void 0&&X>q){(0,M9.checkStrictMode)(J,'"minContains" > "maxContains" is always invalid'),w.fail();return}if((0,M9.alwaysValidSchema)(J,W)){let H=X0._`${F} >= ${X}`;if(q!==void 0)H=X0._`${H} && ${F} <= ${q}`;w.pass(H);return}J.items=!0;let K=Q.name("valid");if(q===void 0&&X===1)V(K,()=>Q.if(K,()=>Q.break()));else if(X===0){if(Q.let(K,!0),q!==void 0)Q.if(X0._`${Y}.length > 0`,A)}else Q.let(K,!1),A();w.result(K,()=>w.reset());function A(){let H=Q.name("_valid"),U=Q.let("count",0);V(H,()=>Q.if(H,()=>M(U)))}function V(H,U){Q.forRange("i",0,F,(j)=>{w.subschema({keyword:"contains",dataProp:j,dataPropType:M9.Type.Num,compositeRule:!0},H),U()})}function M(H){if(Q.code(X0._`${H}++`),q===void 0)Q.if(X0._`${H} >= ${X}`,()=>Q.assign(K,!0).break());else if(Q.if(X0._`${H} > ${q}`,()=>Q.assign(K,!1).break()),X===1)Q.assign(K,!0);else Q.if(X0._`${H} >= ${X}`,()=>Q.assign(K,!0))}}};i4.default=KH});var iY=N((f0)=>{Object.defineProperty(f0,"__esModule",{value:!0});f0.validateSchemaDeps=f0.validatePropertyDeps=f0.error=void 0;var m4=m(),BH=e(),w5=Y0();f0.error={message:({params:{property:w,depsCount:Q,deps:W}})=>{let Z=Q===1?"property":"properties";return m4.str`must have ${Z} ${W} when property ${w} is present`},params:({params:{property:w,depsCount:Q,deps:W,missingProperty:Z}})=>m4._`{property: ${w},
|
|
6
|
+
missingProperty: ${Z},
|
|
7
|
+
depsCount: ${Q},
|
|
8
|
+
deps: ${W}}`};var HH={keyword:"dependencies",type:"object",schemaType:"object",error:f0.error,code(w){let[Q,W]=VH(w);xY(w,Q),lY(w,W)}};function VH({schema:w}){let Q={},W={};for(let Z in w){if(Z==="__proto__")continue;let Y=Array.isArray(w[Z])?Q:W;Y[Z]=w[Z]}return[Q,W]}function xY(w,Q=w.schema){let{gen:W,data:Z,it:Y}=w;if(Object.keys(Q).length===0)return;let J=W.let("missing");for(let X in Q){let q=Q[X];if(q.length===0)continue;let G=(0,w5.propertyInData)(W,Z,X,Y.opts.ownProperties);if(w.setParams({property:X,depsCount:q.length,deps:q.join(", ")}),Y.allErrors)W.if(G,()=>{for(let z of q)(0,w5.checkReportMissingProp)(w,z)});else W.if(m4._`${G} && (${(0,w5.checkMissingProp)(w,q,J)})`),(0,w5.reportMissingProp)(w,J),W.else()}}f0.validatePropertyDeps=xY;function lY(w,Q=w.schema){let{gen:W,data:Z,keyword:Y,it:J}=w,X=W.name("valid");for(let q in Q){if((0,BH.alwaysValidSchema)(J,Q[q]))continue;W.if((0,w5.propertyInData)(W,Z,q,J.opts.ownProperties),()=>{let G=w.subschema({keyword:Y,schemaProp:q},X);w.mergeValidEvaluated(G,X)},()=>W.var(X,!0)),w.ok(X)}}f0.validateSchemaDeps=lY;f0.default=HH});var pY=N((p4)=>{Object.defineProperty(p4,"__esModule",{value:!0});var mY=m(),MH=e(),LH={message:"property name must be valid",params:({params:w})=>mY._`{propertyName: ${w.propertyName}}`},$H={keyword:"propertyNames",type:"object",schemaType:["object","boolean"],error:LH,code(w){let{gen:Q,schema:W,data:Z,it:Y}=w;if((0,MH.alwaysValidSchema)(Y,W))return;let J=Q.name("valid");Q.forIn("key",Z,(X)=>{w.setParams({propertyName:X}),w.subschema({keyword:"propertyNames",data:X,dataTypes:["string"],propertyName:X,compositeRule:!0},J),Q.if((0,mY.not)(J),()=>{if(w.error(!0),!Y.allErrors)Q.break()})}),w.ok(J)}};p4.default=$H});var d4=N((c4)=>{Object.defineProperty(c4,"__esModule",{value:!0});var L9=Y0(),L0=m(),AH=p0(),$9=e(),UH={message:"must NOT have additional properties",params:({params:w})=>L0._`{additionalProperty: ${w.additionalProperty}}`},jH={keyword:"additionalProperties",type:["object"],schemaType:["boolean","object"],allowUndefined:!0,trackErrors:!0,error:UH,code(w){let{gen:Q,schema:W,parentSchema:Z,data:Y,errsCount:J,it:X}=w;if(!J)throw Error("ajv implementation error");let{allErrors:q,opts:G}=X;if(X.props=!0,G.removeAdditional!=="all"&&(0,$9.alwaysValidSchema)(X,W))return;let z=(0,L9.allSchemaProperties)(Z.properties),F=(0,L9.allSchemaProperties)(Z.patternProperties);K(),w.ok(L0._`${J} === ${AH.default.errors}`);function K(){Q.forIn("key",Y,(U)=>{if(!z.length&&!F.length)M(U);else Q.if(A(U),()=>M(U))})}function A(U){let j;if(z.length>8){let T=(0,$9.schemaRefOrVal)(X,Z.properties,"properties");j=(0,L9.isOwnProperty)(Q,T,U)}else if(z.length)j=(0,L0.or)(...z.map((T)=>L0._`${U} === ${T}`));else j=L0.nil;if(F.length)j=(0,L0.or)(j,...F.map((T)=>L0._`${(0,L9.usePattern)(w,T)}.test(${U})`));return(0,L0.not)(j)}function V(U){Q.code(L0._`delete ${Y}[${U}]`)}function M(U){if(G.removeAdditional==="all"||G.removeAdditional&&W===!1){V(U);return}if(W===!1){if(w.setParams({additionalProperty:U}),w.error(),!q)Q.break();return}if(typeof W=="object"&&!(0,$9.alwaysValidSchema)(X,W)){let j=Q.name("valid");if(G.removeAdditional==="failing")H(U,j,!1),Q.if((0,L0.not)(j),()=>{w.reset(),V(U)});else if(H(U,j),!q)Q.if((0,L0.not)(j),()=>Q.break())}}function H(U,j,T){let P={keyword:"additionalProperties",dataProp:U,dataPropType:$9.Type.Str};if(T===!1)Object.assign(P,{compositeRule:!0,createErrors:!1,allErrors:!1});w.subschema(P,j)}}};c4.default=jH});var nY=N((r4)=>{Object.defineProperty(r4,"__esModule",{value:!0});var NH=x1(),cY=Y0(),n4=e(),dY=d4(),OH={keyword:"properties",type:"object",schemaType:"object",code(w){let{gen:Q,schema:W,parentSchema:Z,data:Y,it:J}=w;if(J.opts.removeAdditional==="all"&&Z.additionalProperties===void 0)dY.default.code(new NH.KeywordCxt(J,dY.default,"additionalProperties"));let X=(0,cY.allSchemaProperties)(W);for(let K of X)J.definedProperties.add(K);if(J.opts.unevaluated&&X.length&&J.props!==!0)J.props=n4.mergeEvaluated.props(Q,(0,n4.toHash)(X),J.props);let q=X.filter((K)=>!(0,n4.alwaysValidSchema)(J,W[K]));if(q.length===0)return;let G=Q.name("valid");for(let K of q){if(z(K))F(K);else{if(Q.if((0,cY.propertyInData)(Q,Y,K,J.opts.ownProperties)),F(K),!J.allErrors)Q.else().var(G,!0);Q.endIf()}w.it.definedProperties.add(K),w.ok(G)}function z(K){return J.opts.useDefaults&&!J.compositeRule&&W[K].default!==void 0}function F(K){w.subschema({keyword:"properties",schemaProp:K,dataProp:K},G)}}};r4.default=OH});var tY=N((s4)=>{Object.defineProperty(s4,"__esModule",{value:!0});var rY=Y0(),A9=m(),sY=e(),aY=e(),DH={keyword:"patternProperties",type:"object",schemaType:"object",code(w){let{gen:Q,schema:W,data:Z,parentSchema:Y,it:J}=w,{opts:X}=J,q=(0,rY.allSchemaProperties)(W),G=q.filter((H)=>(0,sY.alwaysValidSchema)(J,W[H]));if(q.length===0||G.length===q.length&&(!J.opts.unevaluated||J.props===!0))return;let z=X.strictSchema&&!X.allowMatchingProperties&&Y.properties,F=Q.name("valid");if(J.props!==!0&&!(J.props instanceof A9.Name))J.props=(0,aY.evaluatedPropsToName)(Q,J.props);let{props:K}=J;A();function A(){for(let H of q){if(z)V(H);if(J.allErrors)M(H);else Q.var(F,!0),M(H),Q.if(F)}}function V(H){for(let U in z)if(new RegExp(H).test(U))(0,sY.checkStrictMode)(J,`property ${U} matches pattern ${H} (use allowMatchingProperties)`)}function M(H){Q.forIn("key",Z,(U)=>{Q.if(A9._`${(0,rY.usePattern)(w,H)}.test(${U})`,()=>{let j=G.includes(H);if(!j)w.subschema({keyword:"patternProperties",schemaProp:H,dataProp:U,dataPropType:aY.Type.Str},F);if(J.opts.unevaluated&&K!==!0)Q.assign(A9._`${K}[${U}]`,!0);else if(!j&&!J.allErrors)Q.if((0,A9.not)(F),()=>Q.break())})})}}};s4.default=DH});var oY=N((a4)=>{Object.defineProperty(a4,"__esModule",{value:!0});var IH=e(),TH={keyword:"not",schemaType:["object","boolean"],trackErrors:!0,code(w){let{gen:Q,schema:W,it:Z}=w;if((0,IH.alwaysValidSchema)(Z,W)){w.fail();return}let Y=Q.name("valid");w.subschema({keyword:"not",compositeRule:!0,createErrors:!1,allErrors:!1},Y),w.failResult(Y,()=>w.reset(),()=>w.error())},error:{message:"must NOT be valid"}};a4.default=TH});var eY=N((t4)=>{Object.defineProperty(t4,"__esModule",{value:!0});var PH=Y0(),RH={keyword:"anyOf",schemaType:"array",trackErrors:!0,code:PH.validateUnion,error:{message:"must match a schema in anyOf"}};t4.default=RH});var wJ=N((o4)=>{Object.defineProperty(o4,"__esModule",{value:!0});var U9=m(),bH=e(),SH={message:"must match exactly one schema in oneOf",params:({params:w})=>U9._`{passingSchemas: ${w.passing}}`},EH={keyword:"oneOf",schemaType:"array",trackErrors:!0,error:SH,code(w){let{gen:Q,schema:W,parentSchema:Z,it:Y}=w;if(!Array.isArray(W))throw Error("ajv implementation error");if(Y.opts.discriminator&&Z.discriminator)return;let J=W,X=Q.let("valid",!1),q=Q.let("passing",null),G=Q.name("_valid");w.setParams({passing:q}),Q.block(z),w.result(X,()=>w.reset(),()=>w.error(!0));function z(){J.forEach((F,K)=>{let A;if((0,bH.alwaysValidSchema)(Y,F))Q.var(G,!0);else A=w.subschema({keyword:"oneOf",schemaProp:K,compositeRule:!0},G);if(K>0)Q.if(U9._`${G} && ${X}`).assign(X,!1).assign(q,U9._`[${q}, ${K}]`).else();Q.if(G,()=>{if(Q.assign(X,!0),Q.assign(q,K),A)w.mergeEvaluated(A,U9.Name)})})}}};o4.default=EH});var QJ=N((e4)=>{Object.defineProperty(e4,"__esModule",{value:!0});var kH=e(),fH={keyword:"allOf",schemaType:"array",code(w){let{gen:Q,schema:W,it:Z}=w;if(!Array.isArray(W))throw Error("ajv implementation error");let Y=Q.name("valid");W.forEach((J,X)=>{if((0,kH.alwaysValidSchema)(Z,J))return;let q=w.subschema({keyword:"allOf",schemaProp:X},Y);w.ok(Y),w.mergeEvaluated(q)})}};e4.default=fH});var YJ=N((w7)=>{Object.defineProperty(w7,"__esModule",{value:!0});var j9=m(),ZJ=e(),CH={message:({params:w})=>j9.str`must match "${w.ifClause}" schema`,params:({params:w})=>j9._`{failingKeyword: ${w.ifClause}}`},vH={keyword:"if",schemaType:["object","boolean"],trackErrors:!0,error:CH,code(w){let{gen:Q,parentSchema:W,it:Z}=w;if(W.then===void 0&&W.else===void 0)(0,ZJ.checkStrictMode)(Z,'"if" without "then" and "else" is ignored');let Y=WJ(Z,"then"),J=WJ(Z,"else");if(!Y&&!J)return;let X=Q.let("valid",!0),q=Q.name("_valid");if(G(),w.reset(),Y&&J){let F=Q.let("ifClause");w.setParams({ifClause:F}),Q.if(q,z("then",F),z("else",F))}else if(Y)Q.if(q,z("then"));else Q.if((0,j9.not)(q),z("else"));w.pass(X,()=>w.error(!0));function G(){let F=w.subschema({keyword:"if",compositeRule:!0,createErrors:!1,allErrors:!1},q);w.mergeEvaluated(F)}function z(F,K){return()=>{let A=w.subschema({keyword:F},q);if(Q.assign(X,q),w.mergeValidEvaluated(A,X),K)Q.assign(K,j9._`${F}`);else w.setParams({ifClause:F})}}}};function WJ(w,Q){let W=w.schema[Q];return W!==void 0&&!(0,ZJ.alwaysValidSchema)(w,W)}w7.default=vH});var JJ=N((Q7)=>{Object.defineProperty(Q7,"__esModule",{value:!0});var yH=e(),uH={keyword:["then","else"],schemaType:["object","boolean"],code({keyword:w,parentSchema:Q,it:W}){if(Q.if===void 0)(0,yH.checkStrictMode)(W,`"${w}" without "if" is ignored`)}};Q7.default=uH});var XJ=N((W7)=>{Object.defineProperty(W7,"__esModule",{value:!0});var hH=g4(),gH=uY(),_H=_4(),xH=gY(),lH=_Y(),iH=iY(),mH=pY(),pH=d4(),cH=nY(),dH=tY(),nH=oY(),rH=eY(),sH=wJ(),aH=QJ(),tH=YJ(),oH=JJ();function eH(w=!1){let Q=[nH.default,rH.default,sH.default,aH.default,tH.default,oH.default,mH.default,pH.default,iH.default,cH.default,dH.default];if(w)Q.push(gH.default,xH.default);else Q.push(hH.default,_H.default);return Q.push(lH.default),Q}W7.default=eH});var qJ=N((Z7)=>{Object.defineProperty(Z7,"__esModule",{value:!0});var jw=m(),wV={message:({schemaCode:w})=>jw.str`must match format "${w}"`,params:({schemaCode:w})=>jw._`{format: ${w}}`},QV={keyword:"format",type:["number","string"],schemaType:"string",$data:!0,error:wV,code(w,Q){let{gen:W,data:Z,$data:Y,schema:J,schemaCode:X,it:q}=w,{opts:G,errSchemaPath:z,schemaEnv:F,self:K}=q;if(!G.validateFormats)return;if(Y)A();else V();function A(){let M=W.scopeValue("formats",{ref:K.formats,code:G.code.formats}),H=W.const("fDef",jw._`${M}[${X}]`),U=W.let("fType"),j=W.let("format");W.if(jw._`typeof ${H} == "object" && !(${H} instanceof RegExp)`,()=>W.assign(U,jw._`${H}.type || "string"`).assign(j,jw._`${H}.validate`),()=>W.assign(U,jw._`"string"`).assign(j,H)),w.fail$data((0,jw.or)(T(),P()));function T(){if(G.strictSchema===!1)return jw.nil;return jw._`${X} && !${j}`}function P(){let b=F.$async?jw._`(${H}.async ? await ${j}(${Z}) : ${j}(${Z}))`:jw._`${j}(${Z})`,O=jw._`(typeof ${j} == "function" ? ${b} : ${j}.test(${Z}))`;return jw._`${j} && ${j} !== true && ${U} === ${Q} && !${O}`}}function V(){let M=K.formats[J];if(!M){T();return}if(M===!0)return;let[H,U,j]=P(M);if(H===Q)w.pass(b());function T(){if(G.strictSchema===!1){K.logger.warn(O());return}throw Error(O());function O(){return`unknown format "${J}" ignored in schema at path "${z}"`}}function P(O){let S=O instanceof RegExp?(0,jw.regexpCode)(O):G.code.formats?jw._`${G.code.formats}${(0,jw.getProperty)(J)}`:void 0,i=W.scopeValue("formats",{key:J,ref:O,code:S});if(typeof O=="object"&&!(O instanceof RegExp))return[O.type||"string",O.validate,jw._`${i}.validate`];return["string",O,i]}function b(){if(typeof M=="object"&&!(M instanceof RegExp)&&M.async){if(!F.$async)throw Error("async format in sync schema");return jw._`await ${j}(${Z})`}return typeof U=="function"?jw._`${j}(${Z})`:jw._`${j}.test(${Z})`}}}};Z7.default=QV});var GJ=N((Y7)=>{Object.defineProperty(Y7,"__esModule",{value:!0});var WV=qJ(),ZV=[WV.default];Y7.default=ZV});var zJ=N((Q1)=>{Object.defineProperty(Q1,"__esModule",{value:!0});Q1.contentVocabulary=Q1.metadataVocabulary=void 0;Q1.metadataVocabulary=["title","description","default","deprecated","readOnly","writeOnly","examples"];Q1.contentVocabulary=["contentMediaType","contentEncoding","contentSchema"]});var KJ=N((J7)=>{Object.defineProperty(J7,"__esModule",{value:!0});var YV=AY(),JV=fY(),XV=XJ(),qV=GJ(),FJ=zJ(),GV=[YV.default,JV.default,(0,XV.default)(),qV.default,FJ.metadataVocabulary,FJ.contentVocabulary];J7.default=GV});var HJ=N((N9)=>{Object.defineProperty(N9,"__esModule",{value:!0});N9.DiscrError=void 0;var BJ;(function(w){w.Tag="tag",w.Mapping="mapping"})(BJ||(N9.DiscrError=BJ={}))});var MJ=N((q7)=>{Object.defineProperty(q7,"__esModule",{value:!0});var W1=m(),X7=HJ(),VJ=Q9(),zV=l1(),FV=e(),KV={message:({params:{discrError:w,tagName:Q}})=>w===X7.DiscrError.Tag?`tag "${Q}" must be string`:`value of tag "${Q}" must be in oneOf`,params:({params:{discrError:w,tag:Q,tagName:W}})=>W1._`{error: ${w}, tag: ${W}, tagValue: ${Q}}`},BV={keyword:"discriminator",type:"object",schemaType:"object",error:KV,code(w){let{gen:Q,data:W,schema:Z,parentSchema:Y,it:J}=w,{oneOf:X}=Y;if(!J.opts.discriminator)throw Error("discriminator: requires discriminator option");let q=Z.propertyName;if(typeof q!="string")throw Error("discriminator: requires propertyName");if(Z.mapping)throw Error("discriminator: mapping is not supported");if(!X)throw Error("discriminator: requires oneOf keyword");let G=Q.let("valid",!1),z=Q.const("tag",W1._`${W}${(0,W1.getProperty)(q)}`);Q.if(W1._`typeof ${z} == "string"`,()=>F(),()=>w.error(!1,{discrError:X7.DiscrError.Tag,tag:z,tagName:q})),w.ok(G);function F(){let V=A();Q.if(!1);for(let M in V)Q.elseIf(W1._`${z} === ${M}`),Q.assign(G,K(V[M]));Q.else(),w.error(!1,{discrError:X7.DiscrError.Mapping,tag:z,tagName:q}),Q.endIf()}function K(V){let M=Q.name("valid"),H=w.subschema({keyword:"oneOf",schemaProp:V},M);return w.mergeEvaluated(H,W1.Name),M}function A(){var V;let M={},H=j(Y),U=!0;for(let b=0;b<X.length;b++){let O=X[b];if((O===null||O===void 0?void 0:O.$ref)&&!(0,FV.schemaHasRulesButRef)(O,J.self.RULES)){let i=O.$ref;if(O=VJ.resolveRef.call(J.self,J.schemaEnv.root,J.baseId,i),O instanceof VJ.SchemaEnv)O=O.schema;if(O===void 0)throw new zV.default(J.opts.uriResolver,J.baseId,i)}let S=(V=O===null||O===void 0?void 0:O.properties)===null||V===void 0?void 0:V[q];if(typeof S!="object")throw Error(`discriminator: oneOf subschemas (or referenced schemas) must have "properties/${q}"`);U=U&&(H||j(O)),T(S,b)}if(!U)throw Error(`discriminator: "${q}" must be required`);return M;function j({required:b}){return Array.isArray(b)&&b.includes(q)}function T(b,O){if(b.const)P(b.const,O);else if(b.enum)for(let S of b.enum)P(S,O);else throw Error(`discriminator: "properties/${q}" must have "const" or "enum"`)}function P(b,O){if(typeof b!="string"||b in M)throw Error(`discriminator: "${q}" values must be unique strings`);M[b]=O}}}};q7.default=BV});var LJ=N((eN,HV)=>{HV.exports={$schema:"http://json-schema.org/draft-07/schema#",$id:"http://json-schema.org/draft-07/schema#",title:"Core schema meta-schema",definitions:{schemaArray:{type:"array",minItems:1,items:{$ref:"#"}},nonNegativeInteger:{type:"integer",minimum:0},nonNegativeIntegerDefault0:{allOf:[{$ref:"#/definitions/nonNegativeInteger"},{default:0}]},simpleTypes:{enum:["array","boolean","integer","null","number","object","string"]},stringArray:{type:"array",items:{type:"string"},uniqueItems:!0,default:[]}},type:["object","boolean"],properties:{$id:{type:"string",format:"uri-reference"},$schema:{type:"string",format:"uri"},$ref:{type:"string",format:"uri-reference"},$comment:{type:"string"},title:{type:"string"},description:{type:"string"},default:!0,readOnly:{type:"boolean",default:!1},examples:{type:"array",items:!0},multipleOf:{type:"number",exclusiveMinimum:0},maximum:{type:"number"},exclusiveMaximum:{type:"number"},minimum:{type:"number"},exclusiveMinimum:{type:"number"},maxLength:{$ref:"#/definitions/nonNegativeInteger"},minLength:{$ref:"#/definitions/nonNegativeIntegerDefault0"},pattern:{type:"string",format:"regex"},additionalItems:{$ref:"#"},items:{anyOf:[{$ref:"#"},{$ref:"#/definitions/schemaArray"}],default:!0},maxItems:{$ref:"#/definitions/nonNegativeInteger"},minItems:{$ref:"#/definitions/nonNegativeIntegerDefault0"},uniqueItems:{type:"boolean",default:!1},contains:{$ref:"#"},maxProperties:{$ref:"#/definitions/nonNegativeInteger"},minProperties:{$ref:"#/definitions/nonNegativeIntegerDefault0"},required:{$ref:"#/definitions/stringArray"},additionalProperties:{$ref:"#"},definitions:{type:"object",additionalProperties:{$ref:"#"},default:{}},properties:{type:"object",additionalProperties:{$ref:"#"},default:{}},patternProperties:{type:"object",additionalProperties:{$ref:"#"},propertyNames:{format:"regex"},default:{}},dependencies:{type:"object",additionalProperties:{anyOf:[{$ref:"#"},{$ref:"#/definitions/stringArray"}]}},propertyNames:{$ref:"#"},const:!0,enum:{type:"array",items:!0,minItems:1,uniqueItems:!0},type:{anyOf:[{$ref:"#/definitions/simpleTypes"},{type:"array",items:{$ref:"#/definitions/simpleTypes"},minItems:1,uniqueItems:!0}]},format:{type:"string"},contentMediaType:{type:"string"},contentEncoding:{type:"string"},if:{$ref:"#"},then:{$ref:"#"},else:{$ref:"#"},allOf:{$ref:"#/definitions/schemaArray"},anyOf:{$ref:"#/definitions/schemaArray"},oneOf:{$ref:"#/definitions/schemaArray"},not:{$ref:"#"}},default:!0}});var AJ=N((Hw,G7)=>{Object.defineProperty(Hw,"__esModule",{value:!0});Hw.MissingRefError=Hw.ValidationError=Hw.CodeGen=Hw.Name=Hw.nil=Hw.stringify=Hw.str=Hw._=Hw.KeywordCxt=Hw.Ajv=void 0;var VV=BY(),MV=KJ(),LV=MJ(),$J=LJ(),$V=["/properties"],O9="http://json-schema.org/draft-07/schema";class Q5 extends VV.default{_addVocabularies(){if(super._addVocabularies(),MV.default.forEach((w)=>this.addVocabulary(w)),this.opts.discriminator)this.addKeyword(LV.default)}_addDefaultMetaSchema(){if(super._addDefaultMetaSchema(),!this.opts.meta)return;let w=this.opts.$data?this.$dataMetaSchema($J,$V):$J;this.addMetaSchema(w,O9,!1),this.refs["http://json-schema.org/schema"]=O9}defaultMeta(){return this.opts.defaultMeta=super.defaultMeta()||(this.getSchema(O9)?O9:void 0)}}Hw.Ajv=Q5;G7.exports=Hw=Q5;G7.exports.Ajv=Q5;Object.defineProperty(Hw,"__esModule",{value:!0});Hw.default=Q5;var AV=x1();Object.defineProperty(Hw,"KeywordCxt",{enumerable:!0,get:function(){return AV.KeywordCxt}});var Z1=m();Object.defineProperty(Hw,"_",{enumerable:!0,get:function(){return Z1._}});Object.defineProperty(Hw,"str",{enumerable:!0,get:function(){return Z1.str}});Object.defineProperty(Hw,"stringify",{enumerable:!0,get:function(){return Z1.stringify}});Object.defineProperty(Hw,"nil",{enumerable:!0,get:function(){return Z1.nil}});Object.defineProperty(Hw,"Name",{enumerable:!0,get:function(){return Z1.Name}});Object.defineProperty(Hw,"CodeGen",{enumerable:!0,get:function(){return Z1.CodeGen}});var UV=e5();Object.defineProperty(Hw,"ValidationError",{enumerable:!0,get:function(){return UV.default}});var jV=l1();Object.defineProperty(Hw,"MissingRefError",{enumerable:!0,get:function(){return jV.default}})});var IJ=N((C0)=>{Object.defineProperty(C0,"__esModule",{value:!0});C0.formatNames=C0.fastFormats=C0.fullFormats=void 0;function Y1(w,Q){return{validate:w,compare:Q}}C0.fullFormats={date:Y1(NJ,K7),time:Y1(OJ,B7),"date-time":Y1(IV,DJ),duration:/^P(?!$)((\d+Y)?(\d+M)?(\d+D)?(T(?=\d)(\d+H)?(\d+M)?(\d+S)?)?|(\d+W)?)$/,uri:RV,"uri-reference":/^(?:[a-z][a-z0-9+\-.]*:)?(?:\/?\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\.[a-z0-9\-._~!$&'()*+,;=:]+)\]|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)|(?:[a-z0-9\-._~!$&'"()*+,;=]|%[0-9a-f]{2})*)(?::\d*)?(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*|\/(?:(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*)?(?:\?(?:[a-z0-9\-._~!$&'"()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\-._~!$&'"()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i,"uri-template":/^(?:(?:[^\x00-\x20"'<>%\\^`{|}]|%[0-9a-f]{2})|\{[+#./;?&=,!@|]?(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?(?:,(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?)*\})*$/i,url:/^(?:https?|ftp):\/\/(?:\S+(?::\S*)?@)?(?:(?!(?:10|127)(?:\.\d{1,3}){3})(?!(?:169\.254|192\.168)(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z0-9\u{00a1}-\u{ffff}]+-)*[a-z0-9\u{00a1}-\u{ffff}]+)(?:\.(?:[a-z0-9\u{00a1}-\u{ffff}]+-)*[a-z0-9\u{00a1}-\u{ffff}]+)*(?:\.(?:[a-z\u{00a1}-\u{ffff}]{2,})))(?::\d{2,5})?(?:\/[^\s]*)?$/iu,email:/^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i,hostname:/^(?=.{1,253}\.?$)[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[-0-9a-z]{0,61}[0-9a-z])?)*\.?$/i,ipv4:/^(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)$/,ipv6:/^((([0-9a-f]{1,4}:){7}([0-9a-f]{1,4}|:))|(([0-9a-f]{1,4}:){6}(:[0-9a-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9a-f]{1,4}:){5}(((:[0-9a-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9a-f]{1,4}:){4}(((:[0-9a-f]{1,4}){1,3})|((:[0-9a-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9a-f]{1,4}:){3}(((:[0-9a-f]{1,4}){1,4})|((:[0-9a-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9a-f]{1,4}:){2}(((:[0-9a-f]{1,4}){1,5})|((:[0-9a-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9a-f]{1,4}:){1}(((:[0-9a-f]{1,4}){1,6})|((:[0-9a-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9a-f]{1,4}){1,7})|((:[0-9a-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))$/i,regex:vV,uuid:/^(?:urn:uuid:)?[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$/i,"json-pointer":/^(?:\/(?:[^~/]|~0|~1)*)*$/,"json-pointer-uri-fragment":/^#(?:\/(?:[a-z0-9_\-.!$&'()*+,;:=@]|%[0-9a-f]{2}|~0|~1)*)*$/i,"relative-json-pointer":/^(?:0|[1-9][0-9]*)(?:#|(?:\/(?:[^~/]|~0|~1)*)*)$/,byte:bV,int32:{type:"number",validate:kV},int64:{type:"number",validate:fV},float:{type:"number",validate:jJ},double:{type:"number",validate:jJ},password:!0,binary:!0};C0.fastFormats={...C0.fullFormats,date:Y1(/^\d\d\d\d-[0-1]\d-[0-3]\d$/,K7),time:Y1(/^(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)?$/i,B7),"date-time":Y1(/^\d\d\d\d-[0-1]\d-[0-3]\d[t\s](?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)$/i,DJ),uri:/^(?:[a-z][a-z0-9+\-.]*:)(?:\/?\/)?[^\s]*$/i,"uri-reference":/^(?:(?:[a-z][a-z0-9+\-.]*:)?\/?\/)?(?:[^\\\s#][^\s#]*)?(?:#[^\\\s]*)?$/i,email:/^[a-z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$/i};C0.formatNames=Object.keys(C0.fullFormats);function NV(w){return w%4===0&&(w%100!==0||w%400===0)}var OV=/^(\d\d\d\d)-(\d\d)-(\d\d)$/,DV=[0,31,28,31,30,31,30,31,31,30,31,30,31];function NJ(w){let Q=OV.exec(w);if(!Q)return!1;let W=+Q[1],Z=+Q[2],Y=+Q[3];return Z>=1&&Z<=12&&Y>=1&&Y<=(Z===2&&NV(W)?29:DV[Z])}function K7(w,Q){if(!(w&&Q))return;if(w>Q)return 1;if(w<Q)return-1;return 0}var z7=/^(\d\d):(\d\d):(\d\d)(\.\d+)?(z|[+-]\d\d(?::?\d\d)?)?$/i;function OJ(w,Q){let W=z7.exec(w);if(!W)return!1;let Z=+W[1],Y=+W[2],J=+W[3],X=W[5];return(Z<=23&&Y<=59&&J<=59||Z===23&&Y===59&&J===60)&&(!Q||X!=="")}function B7(w,Q){if(!(w&&Q))return;let W=z7.exec(w),Z=z7.exec(Q);if(!(W&&Z))return;if(w=W[1]+W[2]+W[3]+(W[4]||""),Q=Z[1]+Z[2]+Z[3]+(Z[4]||""),w>Q)return 1;if(w<Q)return-1;return 0}var F7=/t|\s/i;function IV(w){let Q=w.split(F7);return Q.length===2&&NJ(Q[0])&&OJ(Q[1],!0)}function DJ(w,Q){if(!(w&&Q))return;let[W,Z]=w.split(F7),[Y,J]=Q.split(F7),X=K7(W,Y);if(X===void 0)return;return X||B7(Z,J)}var TV=/\/|:/,PV=/^(?:[a-z][a-z0-9+\-.]*:)(?:\/?\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\.[a-z0-9\-._~!$&'()*+,;=:]+)\]|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)|(?:[a-z0-9\-._~!$&'()*+,;=]|%[0-9a-f]{2})*)(?::\d*)?(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*|\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)(?:\?(?:[a-z0-9\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i;function RV(w){return TV.test(w)&&PV.test(w)}var UJ=/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/gm;function bV(w){return UJ.lastIndex=0,UJ.test(w)}var SV=-2147483648,EV=2147483647;function kV(w){return Number.isInteger(w)&&w<=EV&&w>=SV}function fV(w){return Number.isInteger(w)}function jJ(){return!0}var CV=/[^\\]\\Z/;function vV(w){if(CV.test(w))return!1;try{return new RegExp(w),!0}catch(Q){return!1}}});var Z5=N((ww)=>{Object.defineProperty(ww,"__esModule",{value:!0});ww.regexpCode=ww.getEsmExportName=ww.getProperty=ww.safeStringify=ww.stringify=ww.strConcat=ww.addCodeArg=ww.str=ww._=ww.nil=ww._Code=ww.Name=ww.IDENTIFIER=ww._CodeOrName=void 0;class D9{}ww._CodeOrName=D9;ww.IDENTIFIER=/^[a-z$_][a-z$_0-9]*$/i;class J1 extends D9{constructor(w){super();if(!ww.IDENTIFIER.test(w))throw Error("CodeGen: name must be a valid identifier");this.str=w}toString(){return this.str}emptyStr(){return!1}get names(){return{[this.str]:1}}}ww.Name=J1;class $0 extends D9{constructor(w){super();this._items=typeof w==="string"?[w]:w}toString(){return this.str}emptyStr(){if(this._items.length>1)return!1;let w=this._items[0];return w===""||w==='""'}get str(){var w;return(w=this._str)!==null&&w!==void 0?w:this._str=this._items.reduce((Q,W)=>`${Q}${W}`,"")}get names(){var w;return(w=this._names)!==null&&w!==void 0?w:this._names=this._items.reduce((Q,W)=>{if(W instanceof J1)Q[W.str]=(Q[W.str]||0)+1;return Q},{})}}ww._Code=$0;ww.nil=new $0("");function TJ(w,...Q){let W=[w[0]],Z=0;while(Z<Q.length)V7(W,Q[Z]),W.push(w[++Z]);return new $0(W)}ww._=TJ;var H7=new $0("+");function PJ(w,...Q){let W=[W5(w[0])],Z=0;while(Z<Q.length)W.push(H7),V7(W,Q[Z]),W.push(H7,W5(w[++Z]));return yV(W),new $0(W)}ww.str=PJ;function V7(w,Q){if(Q instanceof $0)w.push(...Q._items);else if(Q instanceof J1)w.push(Q);else w.push(gV(Q))}ww.addCodeArg=V7;function yV(w){let Q=1;while(Q<w.length-1){if(w[Q]===H7){let W=uV(w[Q-1],w[Q+1]);if(W!==void 0){w.splice(Q-1,3,W);continue}w[Q++]="+"}Q++}}function uV(w,Q){if(Q==='""')return w;if(w==='""')return Q;if(typeof w=="string"){if(Q instanceof J1||w[w.length-1]!=='"')return;if(typeof Q!="string")return`${w.slice(0,-1)}${Q}"`;if(Q[0]==='"')return w.slice(0,-1)+Q.slice(1);return}if(typeof Q=="string"&&Q[0]==='"'&&!(w instanceof J1))return`"${w}${Q.slice(1)}`;return}function hV(w,Q){return Q.emptyStr()?w:w.emptyStr()?Q:PJ`${w}${Q}`}ww.strConcat=hV;function gV(w){return typeof w=="number"||typeof w=="boolean"||w===null?w:W5(Array.isArray(w)?w.join(","):w)}function _V(w){return new $0(W5(w))}ww.stringify=_V;function W5(w){return JSON.stringify(w).replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029")}ww.safeStringify=W5;function xV(w){return typeof w=="string"&&ww.IDENTIFIER.test(w)?new $0(`.${w}`):TJ`[${w}]`}ww.getProperty=xV;function lV(w){if(typeof w=="string"&&ww.IDENTIFIER.test(w))return new $0(`${w}`);throw Error(`CodeGen: invalid export name: ${w}, use explicit $id name mapping`)}ww.getEsmExportName=lV;function iV(w){return new $0(w.toString())}ww.regexpCode=iV});var A7=N((lw)=>{Object.defineProperty(lw,"__esModule",{value:!0});lw.ValueScope=lw.ValueScopeName=lw.Scope=lw.varKinds=lw.UsedValueState=void 0;var sw=Z5();class RJ extends Error{constructor(w){super(`CodeGen: "code" for ${w} not defined`);this.value=w.value}}var M7;(function(w){w[w.Started=0]="Started",w[w.Completed=1]="Completed"})(M7=lw.UsedValueState||(lw.UsedValueState={}));lw.varKinds={const:new sw.Name("const"),let:new sw.Name("let"),var:new sw.Name("var")};class L7{constructor({prefixes:w,parent:Q}={}){this._names={},this._prefixes=w,this._parent=Q}toName(w){return w instanceof sw.Name?w:this.name(w)}name(w){return new sw.Name(this._newName(w))}_newName(w){let Q=this._names[w]||this._nameGroup(w);return`${w}${Q.index++}`}_nameGroup(w){var Q,W;if(((W=(Q=this._parent)===null||Q===void 0?void 0:Q._prefixes)===null||W===void 0?void 0:W.has(w))||this._prefixes&&!this._prefixes.has(w))throw Error(`CodeGen: prefix "${w}" is not allowed in this scope`);return this._names[w]={prefix:w,index:0}}}lw.Scope=L7;class $7 extends sw.Name{constructor(w,Q){super(Q);this.prefix=w}setValue(w,{property:Q,itemIndex:W}){this.value=w,this.scopePath=sw._`.${new sw.Name(Q)}[${W}]`}}lw.ValueScopeName=$7;var mV=sw._`\n`;class bJ extends L7{constructor(w){super(w);this._values={},this._scope=w.scope,this.opts={...w,_n:w.lines?mV:sw.nil}}get(){return this._scope}name(w){return new $7(w,this._newName(w))}value(w,Q){var W;if(Q.ref===void 0)throw Error("CodeGen: ref must be passed in value");let Z=this.toName(w),{prefix:Y}=Z,J=(W=Q.key)!==null&&W!==void 0?W:Q.ref,X=this._values[Y];if(X){let z=X.get(J);if(z)return z}else X=this._values[Y]=new Map;X.set(J,Z);let q=this._scope[Y]||(this._scope[Y]=[]),G=q.length;return q[G]=Q.ref,Z.setValue(Q,{property:Y,itemIndex:G}),Z}getValue(w,Q){let W=this._values[w];if(!W)return;return W.get(Q)}scopeRefs(w,Q=this._values){return this._reduceValues(Q,(W)=>{if(W.scopePath===void 0)throw Error(`CodeGen: name "${W}" has no value`);return sw._`${w}${W.scopePath}`})}scopeCode(w=this._values,Q,W){return this._reduceValues(w,(Z)=>{if(Z.value===void 0)throw Error(`CodeGen: name "${Z}" has no value`);return Z.value.code},Q,W)}_reduceValues(w,Q,W={},Z){let Y=sw.nil;for(let J in w){let X=w[J];if(!X)continue;let q=W[J]=W[J]||new Map;X.forEach((G)=>{if(q.has(G))return;q.set(G,M7.Started);let z=Q(G);if(z){let F=this.opts.es5?lw.varKinds.var:lw.varKinds.const;Y=sw._`${Y}${F} ${G} = ${z};${this.opts._n}`}else if(z=Z===null||Z===void 0?void 0:Z(G))Y=sw._`${Y}${z}${this.opts._n}`;else throw new RJ(G);q.set(G,M7.Completed)})}return Y}}lw.ValueScope=bJ});var h=N((x)=>{Object.defineProperty(x,"__esModule",{value:!0});x.or=x.and=x.not=x.CodeGen=x.operators=x.varKinds=x.ValueScopeName=x.ValueScope=x.Scope=x.Name=x.regexpCode=x.stringify=x.getProperty=x.nil=x.strConcat=x.str=x._=void 0;var n=Z5(),A0=A7(),X6=Z5();Object.defineProperty(x,"_",{enumerable:!0,get:function(){return X6._}});Object.defineProperty(x,"str",{enumerable:!0,get:function(){return X6.str}});Object.defineProperty(x,"strConcat",{enumerable:!0,get:function(){return X6.strConcat}});Object.defineProperty(x,"nil",{enumerable:!0,get:function(){return X6.nil}});Object.defineProperty(x,"getProperty",{enumerable:!0,get:function(){return X6.getProperty}});Object.defineProperty(x,"stringify",{enumerable:!0,get:function(){return X6.stringify}});Object.defineProperty(x,"regexpCode",{enumerable:!0,get:function(){return X6.regexpCode}});Object.defineProperty(x,"Name",{enumerable:!0,get:function(){return X6.Name}});var S9=A7();Object.defineProperty(x,"Scope",{enumerable:!0,get:function(){return S9.Scope}});Object.defineProperty(x,"ValueScope",{enumerable:!0,get:function(){return S9.ValueScope}});Object.defineProperty(x,"ValueScopeName",{enumerable:!0,get:function(){return S9.ValueScopeName}});Object.defineProperty(x,"varKinds",{enumerable:!0,get:function(){return S9.varKinds}});x.operators={GT:new n._Code(">"),GTE:new n._Code(">="),LT:new n._Code("<"),LTE:new n._Code("<="),EQ:new n._Code("==="),NEQ:new n._Code("!=="),NOT:new n._Code("!"),OR:new n._Code("||"),AND:new n._Code("&&"),ADD:new n._Code("+")};class q6{optimizeNodes(){return this}optimizeNames(w,Q){return this}}class SJ extends q6{constructor(w,Q,W){super();this.varKind=w,this.name=Q,this.rhs=W}render({es5:w,_n:Q}){let W=w?A0.varKinds.var:this.varKind,Z=this.rhs===void 0?"":` = ${this.rhs}`;return`${W} ${this.name}${Z};`+Q}optimizeNames(w,Q){if(!w[this.name.str])return;if(this.rhs)this.rhs=q1(this.rhs,w,Q);return this}get names(){return this.rhs instanceof n._CodeOrName?this.rhs.names:{}}}class N7 extends q6{constructor(w,Q,W){super();this.lhs=w,this.rhs=Q,this.sideEffects=W}render({_n:w}){return`${this.lhs} = ${this.rhs};`+w}optimizeNames(w,Q){if(this.lhs instanceof n.Name&&!w[this.lhs.str]&&!this.sideEffects)return;return this.rhs=q1(this.rhs,w,Q),this}get names(){let w=this.lhs instanceof n.Name?{}:{...this.lhs.names};return b9(w,this.rhs)}}class EJ extends N7{constructor(w,Q,W,Z){super(w,W,Z);this.op=Q}render({_n:w}){return`${this.lhs} ${this.op}= ${this.rhs};`+w}}class kJ extends q6{constructor(w){super();this.label=w,this.names={}}render({_n:w}){return`${this.label}:`+w}}class fJ extends q6{constructor(w){super();this.label=w,this.names={}}render({_n:w}){return`break${this.label?` ${this.label}`:""};`+w}}class CJ extends q6{constructor(w){super();this.error=w}render({_n:w}){return`throw ${this.error};`+w}get names(){return this.error.names}}class vJ extends q6{constructor(w){super();this.code=w}render({_n:w}){return`${this.code};`+w}optimizeNodes(){return`${this.code}`?this:void 0}optimizeNames(w,Q){return this.code=q1(this.code,w,Q),this}get names(){return this.code instanceof n._CodeOrName?this.code.names:{}}}class E9 extends q6{constructor(w=[]){super();this.nodes=w}render(w){return this.nodes.reduce((Q,W)=>Q+W.render(w),"")}optimizeNodes(){let{nodes:w}=this,Q=w.length;while(Q--){let W=w[Q].optimizeNodes();if(Array.isArray(W))w.splice(Q,1,...W);else if(W)w[Q]=W;else w.splice(Q,1)}return w.length>0?this:void 0}optimizeNames(w,Q){let{nodes:W}=this,Z=W.length;while(Z--){let Y=W[Z];if(Y.optimizeNames(w,Q))continue;pV(w,Y.names),W.splice(Z,1)}return W.length>0?this:void 0}get names(){return this.nodes.reduce((w,Q)=>T6(w,Q.names),{})}}class G6 extends E9{render(w){return"{"+w._n+super.render(w)+"}"+w._n}}class yJ extends E9{}class Y5 extends G6{}Y5.kind="else";class n0 extends G6{constructor(w,Q){super(Q);this.condition=w}render(w){let Q=`if(${this.condition})`+super.render(w);if(this.else)Q+="else "+this.else.render(w);return Q}optimizeNodes(){super.optimizeNodes();let w=this.condition;if(w===!0)return this.nodes;let Q=this.else;if(Q){let W=Q.optimizeNodes();Q=this.else=Array.isArray(W)?new Y5(W):W}if(Q){if(w===!1)return Q instanceof n0?Q:Q.nodes;if(this.nodes.length)return this;return new n0(xJ(w),Q instanceof n0?[Q]:Q.nodes)}if(w===!1||!this.nodes.length)return;return this}optimizeNames(w,Q){var W;if(this.else=(W=this.else)===null||W===void 0?void 0:W.optimizeNames(w,Q),!(super.optimizeNames(w,Q)||this.else))return;return this.condition=q1(this.condition,w,Q),this}get names(){let w=super.names;if(b9(w,this.condition),this.else)T6(w,this.else.names);return w}}n0.kind="if";class X1 extends G6{}X1.kind="for";class uJ extends X1{constructor(w){super();this.iteration=w}render(w){return`for(${this.iteration})`+super.render(w)}optimizeNames(w,Q){if(!super.optimizeNames(w,Q))return;return this.iteration=q1(this.iteration,w,Q),this}get names(){return T6(super.names,this.iteration.names)}}class hJ extends X1{constructor(w,Q,W,Z){super();this.varKind=w,this.name=Q,this.from=W,this.to=Z}render(w){let Q=w.es5?A0.varKinds.var:this.varKind,{name:W,from:Z,to:Y}=this;return`for(${Q} ${W}=${Z}; ${W}<${Y}; ${W}++)`+super.render(w)}get names(){let w=b9(super.names,this.from);return b9(w,this.to)}}class U7 extends X1{constructor(w,Q,W,Z){super();this.loop=w,this.varKind=Q,this.name=W,this.iterable=Z}render(w){return`for(${this.varKind} ${this.name} ${this.loop} ${this.iterable})`+super.render(w)}optimizeNames(w,Q){if(!super.optimizeNames(w,Q))return;return this.iterable=q1(this.iterable,w,Q),this}get names(){return T6(super.names,this.iterable.names)}}class I9 extends G6{constructor(w,Q,W){super();this.name=w,this.args=Q,this.async=W}render(w){return`${this.async?"async ":""}function ${this.name}(${this.args})`+super.render(w)}}I9.kind="func";class T9 extends E9{render(w){return"return "+super.render(w)}}T9.kind="return";class gJ extends G6{render(w){let Q="try"+super.render(w);if(this.catch)Q+=this.catch.render(w);if(this.finally)Q+=this.finally.render(w);return Q}optimizeNodes(){var w,Q;return super.optimizeNodes(),(w=this.catch)===null||w===void 0||w.optimizeNodes(),(Q=this.finally)===null||Q===void 0||Q.optimizeNodes(),this}optimizeNames(w,Q){var W,Z;return super.optimizeNames(w,Q),(W=this.catch)===null||W===void 0||W.optimizeNames(w,Q),(Z=this.finally)===null||Z===void 0||Z.optimizeNames(w,Q),this}get names(){let w=super.names;if(this.catch)T6(w,this.catch.names);if(this.finally)T6(w,this.finally.names);return w}}class P9 extends G6{constructor(w){super();this.error=w}render(w){return`catch(${this.error})`+super.render(w)}}P9.kind="catch";class R9 extends G6{render(w){return"finally"+super.render(w)}}R9.kind="finally";class _J{constructor(w,Q={}){this._values={},this._blockStarts=[],this._constants={},this.opts={...Q,_n:Q.lines?`
|
|
9
|
+
`:""},this._extScope=w,this._scope=new A0.Scope({parent:w}),this._nodes=[new yJ]}toString(){return this._root.render(this.opts)}name(w){return this._scope.name(w)}scopeName(w){return this._extScope.name(w)}scopeValue(w,Q){let W=this._extScope.value(w,Q);return(this._values[W.prefix]||(this._values[W.prefix]=new Set)).add(W),W}getScopeValue(w,Q){return this._extScope.getValue(w,Q)}scopeRefs(w){return this._extScope.scopeRefs(w,this._values)}scopeCode(){return this._extScope.scopeCode(this._values)}_def(w,Q,W,Z){let Y=this._scope.toName(Q);if(W!==void 0&&Z)this._constants[Y.str]=W;return this._leafNode(new SJ(w,Y,W)),Y}const(w,Q,W){return this._def(A0.varKinds.const,w,Q,W)}let(w,Q,W){return this._def(A0.varKinds.let,w,Q,W)}var(w,Q,W){return this._def(A0.varKinds.var,w,Q,W)}assign(w,Q,W){return this._leafNode(new N7(w,Q,W))}add(w,Q){return this._leafNode(new EJ(w,x.operators.ADD,Q))}code(w){if(typeof w=="function")w();else if(w!==n.nil)this._leafNode(new vJ(w));return this}object(...w){let Q=["{"];for(let[W,Z]of w){if(Q.length>1)Q.push(",");if(Q.push(W),W!==Z||this.opts.es5)Q.push(":"),(0,n.addCodeArg)(Q,Z)}return Q.push("}"),new n._Code(Q)}if(w,Q,W){if(this._blockNode(new n0(w)),Q&&W)this.code(Q).else().code(W).endIf();else if(Q)this.code(Q).endIf();else if(W)throw Error('CodeGen: "else" body without "then" body');return this}elseIf(w){return this._elseNode(new n0(w))}else(){return this._elseNode(new Y5)}endIf(){return this._endBlockNode(n0,Y5)}_for(w,Q){if(this._blockNode(w),Q)this.code(Q).endFor();return this}for(w,Q){return this._for(new uJ(w),Q)}forRange(w,Q,W,Z,Y=this.opts.es5?A0.varKinds.var:A0.varKinds.let){let J=this._scope.toName(w);return this._for(new hJ(Y,J,Q,W),()=>Z(J))}forOf(w,Q,W,Z=A0.varKinds.const){let Y=this._scope.toName(w);if(this.opts.es5){let J=Q instanceof n.Name?Q:this.var("_arr",Q);return this.forRange("_i",0,n._`${J}.length`,(X)=>{this.var(Y,n._`${J}[${X}]`),W(Y)})}return this._for(new U7("of",Z,Y,Q),()=>W(Y))}forIn(w,Q,W,Z=this.opts.es5?A0.varKinds.var:A0.varKinds.const){if(this.opts.ownProperties)return this.forOf(w,n._`Object.keys(${Q})`,W);let Y=this._scope.toName(w);return this._for(new U7("in",Z,Y,Q),()=>W(Y))}endFor(){return this._endBlockNode(X1)}label(w){return this._leafNode(new kJ(w))}break(w){return this._leafNode(new fJ(w))}return(w){let Q=new T9;if(this._blockNode(Q),this.code(w),Q.nodes.length!==1)throw Error('CodeGen: "return" should have one node');return this._endBlockNode(T9)}try(w,Q,W){if(!Q&&!W)throw Error('CodeGen: "try" without "catch" and "finally"');let Z=new gJ;if(this._blockNode(Z),this.code(w),Q){let Y=this.name("e");this._currNode=Z.catch=new P9(Y),Q(Y)}if(W)this._currNode=Z.finally=new R9,this.code(W);return this._endBlockNode(P9,R9)}throw(w){return this._leafNode(new CJ(w))}block(w,Q){if(this._blockStarts.push(this._nodes.length),w)this.code(w).endBlock(Q);return this}endBlock(w){let Q=this._blockStarts.pop();if(Q===void 0)throw Error("CodeGen: not in self-balancing block");let W=this._nodes.length-Q;if(W<0||w!==void 0&&W!==w)throw Error(`CodeGen: wrong number of nodes: ${W} vs ${w} expected`);return this._nodes.length=Q,this}func(w,Q=n.nil,W,Z){if(this._blockNode(new I9(w,Q,W)),Z)this.code(Z).endFunc();return this}endFunc(){return this._endBlockNode(I9)}optimize(w=1){while(w-- >0)this._root.optimizeNodes(),this._root.optimizeNames(this._root.names,this._constants)}_leafNode(w){return this._currNode.nodes.push(w),this}_blockNode(w){this._currNode.nodes.push(w),this._nodes.push(w)}_endBlockNode(w,Q){let W=this._currNode;if(W instanceof w||Q&&W instanceof Q)return this._nodes.pop(),this;throw Error(`CodeGen: not in block "${Q?`${w.kind}/${Q.kind}`:w.kind}"`)}_elseNode(w){let Q=this._currNode;if(!(Q instanceof n0))throw Error('CodeGen: "else" without "if"');return this._currNode=Q.else=w,this}get _root(){return this._nodes[0]}get _currNode(){let w=this._nodes;return w[w.length-1]}set _currNode(w){let Q=this._nodes;Q[Q.length-1]=w}}x.CodeGen=_J;function T6(w,Q){for(let W in Q)w[W]=(w[W]||0)+(Q[W]||0);return w}function b9(w,Q){return Q instanceof n._CodeOrName?T6(w,Q.names):w}function q1(w,Q,W){if(w instanceof n.Name)return Z(w);if(!Y(w))return w;return new n._Code(w._items.reduce((J,X)=>{if(X instanceof n.Name)X=Z(X);if(X instanceof n._Code)J.push(...X._items);else J.push(X);return J},[]));function Z(J){let X=W[J.str];if(X===void 0||Q[J.str]!==1)return J;return delete Q[J.str],X}function Y(J){return J instanceof n._Code&&J._items.some((X)=>X instanceof n.Name&&Q[X.str]===1&&W[X.str]!==void 0)}}function pV(w,Q){for(let W in Q)w[W]=(w[W]||0)-(Q[W]||0)}function xJ(w){return typeof w=="boolean"||typeof w=="number"||w===null?!w:n._`!${j7(w)}`}x.not=xJ;var cV=lJ(x.operators.AND);function dV(...w){return w.reduce(cV)}x.and=dV;var nV=lJ(x.operators.OR);function rV(...w){return w.reduce(nV)}x.or=rV;function lJ(w){return(Q,W)=>Q===n.nil?W:W===n.nil?Q:n._`${j7(Q)} ${w} ${j7(W)}`}function j7(w){return w instanceof n.Name?w:n._`(${w})`}});var Qw=N((l)=>{Object.defineProperty(l,"__esModule",{value:!0});l.checkStrictMode=l.getErrorPath=l.Type=l.useFunc=l.setEvaluated=l.evaluatedPropsToName=l.mergeEvaluated=l.eachItem=l.unescapeJsonPointer=l.escapeJsonPointer=l.escapeFragment=l.unescapeFragment=l.schemaRefOrVal=l.schemaHasRulesButRef=l.schemaHasRules=l.checkUnknownRules=l.alwaysValidSchema=l.toHash=void 0;var Kw=h(),sV=Z5();function aV(w){let Q={};for(let W of w)Q[W]=!0;return Q}l.toHash=aV;function tV(w,Q){if(typeof Q=="boolean")return Q;if(Object.keys(Q).length===0)return!0;return pJ(w,Q),!cJ(Q,w.self.RULES.all)}l.alwaysValidSchema=tV;function pJ(w,Q=w.schema){let{opts:W,self:Z}=w;if(!W.strictSchema)return;if(typeof Q==="boolean")return;let Y=Z.RULES.keywords;for(let J in Q)if(!Y[J])sJ(w,`unknown keyword: "${J}"`)}l.checkUnknownRules=pJ;function cJ(w,Q){if(typeof w=="boolean")return!w;for(let W in w)if(Q[W])return!0;return!1}l.schemaHasRules=cJ;function oV(w,Q){if(typeof w=="boolean")return!w;for(let W in w)if(W!=="$ref"&&Q.all[W])return!0;return!1}l.schemaHasRulesButRef=oV;function eV({topSchemaRef:w,schemaPath:Q},W,Z,Y){if(!Y){if(typeof W=="number"||typeof W=="boolean")return W;if(typeof W=="string")return Kw._`${W}`}return Kw._`${w}${Q}${(0,Kw.getProperty)(Z)}`}l.schemaRefOrVal=eV;function wM(w){return dJ(decodeURIComponent(w))}l.unescapeFragment=wM;function QM(w){return encodeURIComponent(O7(w))}l.escapeFragment=QM;function O7(w){if(typeof w=="number")return`${w}`;return w.replace(/~/g,"~0").replace(/\//g,"~1")}l.escapeJsonPointer=O7;function dJ(w){return w.replace(/~1/g,"/").replace(/~0/g,"~")}l.unescapeJsonPointer=dJ;function WM(w,Q){if(Array.isArray(w))for(let W of w)Q(W);else Q(w)}l.eachItem=WM;function iJ({mergeNames:w,mergeToName:Q,mergeValues:W,resultToName:Z}){return(Y,J,X,q)=>{let G=X===void 0?J:X instanceof Kw.Name?(J instanceof Kw.Name?w(Y,J,X):Q(Y,J,X),X):J instanceof Kw.Name?(Q(Y,X,J),J):W(J,X);return q===Kw.Name&&!(G instanceof Kw.Name)?Z(Y,G):G}}l.mergeEvaluated={props:iJ({mergeNames:(w,Q,W)=>w.if(Kw._`${W} !== true && ${Q} !== undefined`,()=>{w.if(Kw._`${Q} === true`,()=>w.assign(W,!0),()=>w.assign(W,Kw._`${W} || {}`).code(Kw._`Object.assign(${W}, ${Q})`))}),mergeToName:(w,Q,W)=>w.if(Kw._`${W} !== true`,()=>{if(Q===!0)w.assign(W,!0);else w.assign(W,Kw._`${W} || {}`),D7(w,W,Q)}),mergeValues:(w,Q)=>w===!0?!0:{...w,...Q},resultToName:nJ}),items:iJ({mergeNames:(w,Q,W)=>w.if(Kw._`${W} !== true && ${Q} !== undefined`,()=>w.assign(W,Kw._`${Q} === true ? true : ${W} > ${Q} ? ${W} : ${Q}`)),mergeToName:(w,Q,W)=>w.if(Kw._`${W} !== true`,()=>w.assign(W,Q===!0?!0:Kw._`${W} > ${Q} ? ${W} : ${Q}`)),mergeValues:(w,Q)=>w===!0?!0:Math.max(w,Q),resultToName:(w,Q)=>w.var("items",Q)})};function nJ(w,Q){if(Q===!0)return w.var("props",!0);let W=w.var("props",Kw._`{}`);if(Q!==void 0)D7(w,W,Q);return W}l.evaluatedPropsToName=nJ;function D7(w,Q,W){Object.keys(W).forEach((Z)=>w.assign(Kw._`${Q}${(0,Kw.getProperty)(Z)}`,!0))}l.setEvaluated=D7;var mJ={};function ZM(w,Q){return w.scopeValue("func",{ref:Q,code:mJ[Q.code]||(mJ[Q.code]=new sV._Code(Q.code))})}l.useFunc=ZM;var rJ;(function(w){w[w.Num=0]="Num",w[w.Str=1]="Str"})(rJ=l.Type||(l.Type={}));function YM(w,Q,W){if(w instanceof Kw.Name){let Z=Q===rJ.Num;return W?Z?Kw._`"[" + ${w} + "]"`:Kw._`"['" + ${w} + "']"`:Z?Kw._`"/" + ${w}`:Kw._`"/" + ${w}.replace(/~/g, "~0").replace(/\\//g, "~1")`}return W?(0,Kw.getProperty)(w).toString():"/"+O7(w)}l.getErrorPath=YM;function sJ(w,Q,W=w.opts.strictSchema){if(!W)return;if(Q=`strict mode: ${Q}`,W===!0)throw Error(Q);w.self.logger.warn(Q)}l.checkStrictMode=sJ});var r0=N((I7)=>{Object.defineProperty(I7,"__esModule",{value:!0});var yw=h(),JM={data:new yw.Name("data"),valCxt:new yw.Name("valCxt"),instancePath:new yw.Name("instancePath"),parentData:new yw.Name("parentData"),parentDataProperty:new yw.Name("parentDataProperty"),rootData:new yw.Name("rootData"),dynamicAnchors:new yw.Name("dynamicAnchors"),vErrors:new yw.Name("vErrors"),errors:new yw.Name("errors"),this:new yw.Name("this"),self:new yw.Name("self"),scope:new yw.Name("scope"),json:new yw.Name("json"),jsonPos:new yw.Name("jsonPos"),jsonLen:new yw.Name("jsonLen"),jsonPart:new yw.Name("jsonPart")};I7.default=JM});var J5=N((uw)=>{Object.defineProperty(uw,"__esModule",{value:!0});uw.extendErrors=uw.resetErrorsCount=uw.reportExtraError=uw.reportError=uw.keyword$DataError=uw.keywordError=void 0;var a=h(),k9=Qw(),iw=r0();uw.keywordError={message:({keyword:w})=>a.str`must pass "${w}" keyword validation`};uw.keyword$DataError={message:({keyword:w,schemaType:Q})=>Q?a.str`"${w}" keyword must be ${Q} ($data)`:a.str`"${w}" keyword is invalid ($data)`};function XM(w,Q=uw.keywordError,W,Z){let{it:Y}=w,{gen:J,compositeRule:X,allErrors:q}=Y,G=oJ(w,Q,W);if(Z!==null&&Z!==void 0?Z:X||q)aJ(J,G);else tJ(Y,a._`[${G}]`)}uw.reportError=XM;function qM(w,Q=uw.keywordError,W){let{it:Z}=w,{gen:Y,compositeRule:J,allErrors:X}=Z,q=oJ(w,Q,W);if(aJ(Y,q),!(J||X))tJ(Z,iw.default.vErrors)}uw.reportExtraError=qM;function GM(w,Q){w.assign(iw.default.errors,Q),w.if(a._`${iw.default.vErrors} !== null`,()=>w.if(Q,()=>w.assign(a._`${iw.default.vErrors}.length`,Q),()=>w.assign(iw.default.vErrors,null)))}uw.resetErrorsCount=GM;function zM({gen:w,keyword:Q,schemaValue:W,data:Z,errsCount:Y,it:J}){if(Y===void 0)throw Error("ajv implementation error");let X=w.name("err");w.forRange("i",Y,iw.default.errors,(q)=>{if(w.const(X,a._`${iw.default.vErrors}[${q}]`),w.if(a._`${X}.instancePath === undefined`,()=>w.assign(a._`${X}.instancePath`,(0,a.strConcat)(iw.default.instancePath,J.errorPath))),w.assign(a._`${X}.schemaPath`,a.str`${J.errSchemaPath}/${Q}`),J.opts.verbose)w.assign(a._`${X}.schema`,W),w.assign(a._`${X}.data`,Z)})}uw.extendErrors=zM;function aJ(w,Q){let W=w.const("err",Q);w.if(a._`${iw.default.vErrors} === null`,()=>w.assign(iw.default.vErrors,a._`[${W}]`),a._`${iw.default.vErrors}.push(${W})`),w.code(a._`${iw.default.errors}++`)}function tJ(w,Q){let{gen:W,validateName:Z,schemaEnv:Y}=w;if(Y.$async)W.throw(a._`new ${w.ValidationError}(${Q})`);else W.assign(a._`${Z}.errors`,Q),W.return(!1)}var P6={keyword:new a.Name("keyword"),schemaPath:new a.Name("schemaPath"),params:new a.Name("params"),propertyName:new a.Name("propertyName"),message:new a.Name("message"),schema:new a.Name("schema"),parentSchema:new a.Name("parentSchema")};function oJ(w,Q,W){let{createErrors:Z}=w.it;if(Z===!1)return a._`{}`;return FM(w,Q,W)}function FM(w,Q,W={}){let{gen:Z,it:Y}=w,J=[KM(Y,W),BM(w,W)];return HM(w,Q,J),Z.object(...J)}function KM({errorPath:w},{instancePath:Q}){let W=Q?a.str`${w}${(0,k9.getErrorPath)(Q,k9.Type.Str)}`:w;return[iw.default.instancePath,(0,a.strConcat)(iw.default.instancePath,W)]}function BM({keyword:w,it:{errSchemaPath:Q}},{schemaPath:W,parentSchema:Z}){let Y=Z?Q:a.str`${Q}/${w}`;if(W)Y=a.str`${Y}${(0,k9.getErrorPath)(W,k9.Type.Str)}`;return[P6.schemaPath,Y]}function HM(w,{params:Q,message:W},Z){let{keyword:Y,data:J,schemaValue:X,it:q}=w,{opts:G,propertyName:z,topSchemaRef:F,schemaPath:K}=q;if(Z.push([P6.keyword,Y],[P6.params,typeof Q=="function"?Q(w):Q||a._`{}`]),G.messages)Z.push([P6.message,typeof W=="function"?W(w):W]);if(G.verbose)Z.push([P6.schema,X],[P6.parentSchema,a._`${F}${K}`],[iw.default.data,J]);if(z)Z.push([P6.propertyName,z])}});var wX=N((G1)=>{Object.defineProperty(G1,"__esModule",{value:!0});G1.boolOrEmptySchema=G1.topBoolOrEmptySchema=void 0;var VM=J5(),MM=h(),LM=r0(),$M={message:"boolean schema is false"};function AM(w){let{gen:Q,schema:W,validateName:Z}=w;if(W===!1)eJ(w,!1);else if(typeof W=="object"&&W.$async===!0)Q.return(LM.default.data);else Q.assign(MM._`${Z}.errors`,null),Q.return(!0)}G1.topBoolOrEmptySchema=AM;function UM(w,Q){let{gen:W,schema:Z}=w;if(Z===!1)W.var(Q,!1),eJ(w);else W.var(Q,!0)}G1.boolOrEmptySchema=UM;function eJ(w,Q){let{gen:W,data:Z}=w,Y={gen:W,keyword:"false schema",data:Z,schema:!1,schemaCode:!1,schemaValue:!1,params:{},it:w};(0,VM.reportError)(Y,$M,void 0,Q)}});var T7=N((z1)=>{Object.defineProperty(z1,"__esModule",{value:!0});z1.getRules=z1.isJSONType=void 0;var jM=["string","number","integer","boolean","null","object","array"],NM=new Set(jM);function OM(w){return typeof w=="string"&&NM.has(w)}z1.isJSONType=OM;function DM(){let w={number:{type:"number",rules:[]},string:{type:"string",rules:[]},array:{type:"array",rules:[]},object:{type:"object",rules:[]}};return{types:{...w,integer:!0,boolean:!0,null:!0},rules:[{rules:[]},w.number,w.string,w.array,w.object],post:{rules:[]},all:{},keywords:{}}}z1.getRules=DM});var P7=N((z6)=>{Object.defineProperty(z6,"__esModule",{value:!0});z6.shouldUseRule=z6.shouldUseGroup=z6.schemaHasRulesForType=void 0;function IM({schema:w,self:Q},W){let Z=Q.RULES.types[W];return Z&&Z!==!0&&QX(w,Z)}z6.schemaHasRulesForType=IM;function QX(w,Q){return Q.rules.some((W)=>WX(w,W))}z6.shouldUseGroup=QX;function WX(w,Q){var W;return w[Q.keyword]!==void 0||((W=Q.definition.implements)===null||W===void 0?void 0:W.some((Z)=>w[Z]!==void 0))}z6.shouldUseRule=WX});var q5=N((Rw)=>{Object.defineProperty(Rw,"__esModule",{value:!0});Rw.reportTypeError=Rw.checkDataTypes=Rw.checkDataType=Rw.coerceAndCheckDataType=Rw.getJSONTypes=Rw.getSchemaTypes=Rw.DataType=void 0;var TM=T7(),PM=P7(),RM=J5(),u=h(),ZX=Qw(),X5;(function(w){w[w.Correct=0]="Correct",w[w.Wrong=1]="Wrong"})(X5=Rw.DataType||(Rw.DataType={}));function bM(w){let Q=YX(w.type);if(Q.includes("null")){if(w.nullable===!1)throw Error("type: null contradicts nullable: false")}else{if(!Q.length&&w.nullable!==void 0)throw Error('"nullable" cannot be used without "type"');if(w.nullable===!0)Q.push("null")}return Q}Rw.getSchemaTypes=bM;function YX(w){let Q=Array.isArray(w)?w:w?[w]:[];if(Q.every(TM.isJSONType))return Q;throw Error("type must be JSONType or JSONType[]: "+Q.join(","))}Rw.getJSONTypes=YX;function SM(w,Q){let{gen:W,data:Z,opts:Y}=w,J=EM(Q,Y.coerceTypes),X=Q.length>0&&!(J.length===0&&Q.length===1&&(0,PM.schemaHasRulesForType)(w,Q[0]));if(X){let q=b7(Q,Z,Y.strictNumbers,X5.Wrong);W.if(q,()=>{if(J.length)kM(w,Q,J);else S7(w)})}return X}Rw.coerceAndCheckDataType=SM;var JX=new Set(["string","number","integer","boolean","null"]);function EM(w,Q){return Q?w.filter((W)=>JX.has(W)||Q==="array"&&W==="array"):[]}function kM(w,Q,W){let{gen:Z,data:Y,opts:J}=w,X=Z.let("dataType",u._`typeof ${Y}`),q=Z.let("coerced",u._`undefined`);if(J.coerceTypes==="array")Z.if(u._`${X} == 'object' && Array.isArray(${Y}) && ${Y}.length == 1`,()=>Z.assign(Y,u._`${Y}[0]`).assign(X,u._`typeof ${Y}`).if(b7(Q,Y,J.strictNumbers),()=>Z.assign(q,Y)));Z.if(u._`${q} !== undefined`);for(let z of W)if(JX.has(z)||z==="array"&&J.coerceTypes==="array")G(z);Z.else(),S7(w),Z.endIf(),Z.if(u._`${q} !== undefined`,()=>{Z.assign(Y,q),fM(w,q)});function G(z){switch(z){case"string":Z.elseIf(u._`${X} == "number" || ${X} == "boolean"`).assign(q,u._`"" + ${Y}`).elseIf(u._`${Y} === null`).assign(q,u._`""`);return;case"number":Z.elseIf(u._`${X} == "boolean" || ${Y} === null
|
|
10
|
+
|| (${X} == "string" && ${Y} && ${Y} == +${Y})`).assign(q,u._`+${Y}`);return;case"integer":Z.elseIf(u._`${X} === "boolean" || ${Y} === null
|
|
11
|
+
|| (${X} === "string" && ${Y} && ${Y} == +${Y} && !(${Y} % 1))`).assign(q,u._`+${Y}`);return;case"boolean":Z.elseIf(u._`${Y} === "false" || ${Y} === 0 || ${Y} === null`).assign(q,!1).elseIf(u._`${Y} === "true" || ${Y} === 1`).assign(q,!0);return;case"null":Z.elseIf(u._`${Y} === "" || ${Y} === 0 || ${Y} === false`),Z.assign(q,null);return;case"array":Z.elseIf(u._`${X} === "string" || ${X} === "number"
|
|
12
|
+
|| ${X} === "boolean" || ${Y} === null`).assign(q,u._`[${Y}]`)}}}function fM({gen:w,parentData:Q,parentDataProperty:W},Z){w.if(u._`${Q} !== undefined`,()=>w.assign(u._`${Q}[${W}]`,Z))}function R7(w,Q,W,Z=X5.Correct){let Y=Z===X5.Correct?u.operators.EQ:u.operators.NEQ,J;switch(w){case"null":return u._`${Q} ${Y} null`;case"array":J=u._`Array.isArray(${Q})`;break;case"object":J=u._`${Q} && typeof ${Q} == "object" && !Array.isArray(${Q})`;break;case"integer":J=X(u._`!(${Q} % 1) && !isNaN(${Q})`);break;case"number":J=X();break;default:return u._`typeof ${Q} ${Y} ${w}`}return Z===X5.Correct?J:(0,u.not)(J);function X(q=u.nil){return(0,u.and)(u._`typeof ${Q} == "number"`,q,W?u._`isFinite(${Q})`:u.nil)}}Rw.checkDataType=R7;function b7(w,Q,W,Z){if(w.length===1)return R7(w[0],Q,W,Z);let Y,J=(0,ZX.toHash)(w);if(J.array&&J.object){let X=u._`typeof ${Q} != "object"`;Y=J.null?X:u._`!${Q} || ${X}`,delete J.null,delete J.array,delete J.object}else Y=u.nil;if(J.number)delete J.integer;for(let X in J)Y=(0,u.and)(Y,R7(X,Q,W,Z));return Y}Rw.checkDataTypes=b7;var CM={message:({schema:w})=>`must be ${w}`,params:({schema:w,schemaValue:Q})=>typeof w=="string"?u._`{type: ${w}}`:u._`{type: ${Q}}`};function S7(w){let Q=vM(w);(0,RM.reportError)(Q,CM)}Rw.reportTypeError=S7;function vM(w){let{gen:Q,data:W,schema:Z}=w,Y=(0,ZX.schemaRefOrVal)(w,Z,"type");return{gen:Q,keyword:"type",data:W,schema:Z.type,schemaCode:Y,schemaValue:Y,parentSchema:Z,params:{},it:w}}});var qX=N((f9)=>{Object.defineProperty(f9,"__esModule",{value:!0});f9.assignDefaults=void 0;var F1=h(),yM=Qw();function uM(w,Q){let{properties:W,items:Z}=w.schema;if(Q==="object"&&W)for(let Y in W)XX(w,Y,W[Y].default);else if(Q==="array"&&Array.isArray(Z))Z.forEach((Y,J)=>XX(w,J,Y.default))}f9.assignDefaults=uM;function XX(w,Q,W){let{gen:Z,compositeRule:Y,data:J,opts:X}=w;if(W===void 0)return;let q=F1._`${J}${(0,F1.getProperty)(Q)}`;if(Y){(0,yM.checkStrictMode)(w,`default is ignored for: ${q}`);return}let G=F1._`${q} === undefined`;if(X.useDefaults==="empty")G=F1._`${G} || ${q} === null || ${q} === ""`;Z.if(G,F1._`${q} = ${(0,F1.stringify)(W)}`)}});var q0=N((qw)=>{Object.defineProperty(qw,"__esModule",{value:!0});qw.validateUnion=qw.validateArray=qw.usePattern=qw.callValidateCode=qw.schemaProperties=qw.allSchemaProperties=qw.noPropertyInData=qw.propertyInData=qw.isOwnProperty=qw.hasPropFunc=qw.reportMissingProp=qw.checkMissingProp=qw.checkReportMissingProp=void 0;var Vw=h(),E7=Qw(),F6=r0(),hM=Qw();function gM(w,Q){let{gen:W,data:Z,it:Y}=w;W.if(f7(W,Z,Q,Y.opts.ownProperties),()=>{w.setParams({missingProperty:Vw._`${Q}`},!0),w.error()})}qw.checkReportMissingProp=gM;function _M({gen:w,data:Q,it:{opts:W}},Z,Y){return(0,Vw.or)(...Z.map((J)=>(0,Vw.and)(f7(w,Q,J,W.ownProperties),Vw._`${Y} = ${J}`)))}qw.checkMissingProp=_M;function xM(w,Q){w.setParams({missingProperty:Q},!0),w.error()}qw.reportMissingProp=xM;function GX(w){return w.scopeValue("func",{ref:Object.prototype.hasOwnProperty,code:Vw._`Object.prototype.hasOwnProperty`})}qw.hasPropFunc=GX;function k7(w,Q,W){return Vw._`${GX(w)}.call(${Q}, ${W})`}qw.isOwnProperty=k7;function lM(w,Q,W,Z){let Y=Vw._`${Q}${(0,Vw.getProperty)(W)} !== undefined`;return Z?Vw._`${Y} && ${k7(w,Q,W)}`:Y}qw.propertyInData=lM;function f7(w,Q,W,Z){let Y=Vw._`${Q}${(0,Vw.getProperty)(W)} === undefined`;return Z?(0,Vw.or)(Y,(0,Vw.not)(k7(w,Q,W))):Y}qw.noPropertyInData=f7;function zX(w){return w?Object.keys(w).filter((Q)=>Q!=="__proto__"):[]}qw.allSchemaProperties=zX;function iM(w,Q){return zX(Q).filter((W)=>!(0,E7.alwaysValidSchema)(w,Q[W]))}qw.schemaProperties=iM;function mM({schemaCode:w,data:Q,it:{gen:W,topSchemaRef:Z,schemaPath:Y,errorPath:J},it:X},q,G,z){let F=z?Vw._`${w}, ${Q}, ${Z}${Y}`:Q,K=[[F6.default.instancePath,(0,Vw.strConcat)(F6.default.instancePath,J)],[F6.default.parentData,X.parentData],[F6.default.parentDataProperty,X.parentDataProperty],[F6.default.rootData,F6.default.rootData]];if(X.opts.dynamicRef)K.push([F6.default.dynamicAnchors,F6.default.dynamicAnchors]);let A=Vw._`${F}, ${W.object(...K)}`;return G!==Vw.nil?Vw._`${q}.call(${G}, ${A})`:Vw._`${q}(${A})`}qw.callValidateCode=mM;var pM=Vw._`new RegExp`;function cM({gen:w,it:{opts:Q}},W){let Z=Q.unicodeRegExp?"u":"",{regExp:Y}=Q.code,J=Y(W,Z);return w.scopeValue("pattern",{key:J.toString(),ref:J,code:Vw._`${Y.code==="new RegExp"?pM:(0,hM.useFunc)(w,Y)}(${W}, ${Z})`})}qw.usePattern=cM;function dM(w){let{gen:Q,data:W,keyword:Z,it:Y}=w,J=Q.name("valid");if(Y.allErrors){let q=Q.let("valid",!0);return X(()=>Q.assign(q,!1)),q}return Q.var(J,!0),X(()=>Q.break()),J;function X(q){let G=Q.const("len",Vw._`${W}.length`);Q.forRange("i",0,G,(z)=>{w.subschema({keyword:Z,dataProp:z,dataPropType:E7.Type.Num},J),Q.if((0,Vw.not)(J),q)})}}qw.validateArray=dM;function nM(w){let{gen:Q,schema:W,keyword:Z,it:Y}=w;if(!Array.isArray(W))throw Error("ajv implementation error");if(W.some((G)=>(0,E7.alwaysValidSchema)(Y,G))&&!Y.opts.unevaluated)return;let X=Q.let("valid",!1),q=Q.name("_valid");Q.block(()=>W.forEach((G,z)=>{let F=w.subschema({keyword:Z,schemaProp:z,compositeRule:!0},q);if(Q.assign(X,Vw._`${X} || ${q}`),!w.mergeValidEvaluated(F,q))Q.if((0,Vw.not)(X))})),w.result(X,()=>w.reset(),()=>w.error(!0))}qw.validateUnion=nM});var BX=N((v0)=>{Object.defineProperty(v0,"__esModule",{value:!0});v0.validateKeywordUsage=v0.validSchemaType=v0.funcKeywordCode=v0.macroKeywordCode=void 0;var mw=h(),R6=r0(),rM=q0(),sM=J5();function aM(w,Q){let{gen:W,keyword:Z,schema:Y,parentSchema:J,it:X}=w,q=Q.macro.call(X.self,Y,J,X),G=KX(W,Z,q);if(X.opts.validateSchema!==!1)X.self.validateSchema(q,!0);let z=W.name("valid");w.subschema({schema:q,schemaPath:mw.nil,errSchemaPath:`${X.errSchemaPath}/${Z}`,topSchemaRef:G,compositeRule:!0},z),w.pass(z,()=>w.error(!0))}v0.macroKeywordCode=aM;function tM(w,Q){var W;let{gen:Z,keyword:Y,schema:J,parentSchema:X,$data:q,it:G}=w;eM(G,Q);let z=!q&&Q.compile?Q.compile.call(G.self,J,X,G):Q.validate,F=KX(Z,Y,z),K=Z.let("valid");w.block$data(K,A),w.ok((W=Q.valid)!==null&&W!==void 0?W:K);function A(){if(Q.errors===!1){if(H(),Q.modifying)FX(w);U(()=>w.error())}else{let j=Q.async?V():M();if(Q.modifying)FX(w);U(()=>oM(w,j))}}function V(){let j=Z.let("ruleErrs",null);return Z.try(()=>H(mw._`await `),(T)=>Z.assign(K,!1).if(mw._`${T} instanceof ${G.ValidationError}`,()=>Z.assign(j,mw._`${T}.errors`),()=>Z.throw(T))),j}function M(){let j=mw._`${F}.errors`;return Z.assign(j,null),H(mw.nil),j}function H(j=Q.async?mw._`await `:mw.nil){let T=G.opts.passContext?R6.default.this:R6.default.self,P=!(("compile"in Q)&&!q||Q.schema===!1);Z.assign(K,mw._`${j}${(0,rM.callValidateCode)(w,F,T,P)}`,Q.modifying)}function U(j){var T;Z.if((0,mw.not)((T=Q.valid)!==null&&T!==void 0?T:K),j)}}v0.funcKeywordCode=tM;function FX(w){let{gen:Q,data:W,it:Z}=w;Q.if(Z.parentData,()=>Q.assign(W,mw._`${Z.parentData}[${Z.parentDataProperty}]`))}function oM(w,Q){let{gen:W}=w;W.if(mw._`Array.isArray(${Q})`,()=>{W.assign(R6.default.vErrors,mw._`${R6.default.vErrors} === null ? ${Q} : ${R6.default.vErrors}.concat(${Q})`).assign(R6.default.errors,mw._`${R6.default.vErrors}.length`),(0,sM.extendErrors)(w)},()=>w.error())}function eM({schemaEnv:w},Q){if(Q.async&&!w.$async)throw Error("async keyword in sync schema")}function KX(w,Q,W){if(W===void 0)throw Error(`keyword "${Q}" failed to compile`);return w.scopeValue("keyword",typeof W=="function"?{ref:W}:{ref:W,code:(0,mw.stringify)(W)})}function wL(w,Q,W=!1){return!Q.length||Q.some((Z)=>Z==="array"?Array.isArray(w):Z==="object"?w&&typeof w=="object"&&!Array.isArray(w):typeof w==Z||W&&typeof w>"u")}v0.validSchemaType=wL;function QL({schema:w,opts:Q,self:W,errSchemaPath:Z},Y,J){if(Array.isArray(Y.keyword)?!Y.keyword.includes(J):Y.keyword!==J)throw Error("ajv implementation error");let X=Y.dependencies;if(X===null||X===void 0?void 0:X.some((q)=>!Object.prototype.hasOwnProperty.call(w,q)))throw Error(`parent schema must have dependencies of ${J}: ${X.join(",")}`);if(Y.validateSchema){if(!Y.validateSchema(w[J])){let G=`keyword "${J}" value is invalid at path "${Z}": `+W.errorsText(Y.validateSchema.errors);if(Q.validateSchema==="log")W.logger.error(G);else throw Error(G)}}}v0.validateKeywordUsage=QL});var VX=N((K6)=>{Object.defineProperty(K6,"__esModule",{value:!0});K6.extendSubschemaMode=K6.extendSubschemaData=K6.getSubschema=void 0;var y0=h(),HX=Qw();function WL(w,{keyword:Q,schemaProp:W,schema:Z,schemaPath:Y,errSchemaPath:J,topSchemaRef:X}){if(Q!==void 0&&Z!==void 0)throw Error('both "keyword" and "schema" passed, only one allowed');if(Q!==void 0){let q=w.schema[Q];return W===void 0?{schema:q,schemaPath:y0._`${w.schemaPath}${(0,y0.getProperty)(Q)}`,errSchemaPath:`${w.errSchemaPath}/${Q}`}:{schema:q[W],schemaPath:y0._`${w.schemaPath}${(0,y0.getProperty)(Q)}${(0,y0.getProperty)(W)}`,errSchemaPath:`${w.errSchemaPath}/${Q}/${(0,HX.escapeFragment)(W)}`}}if(Z!==void 0){if(Y===void 0||J===void 0||X===void 0)throw Error('"schemaPath", "errSchemaPath" and "topSchemaRef" are required with "schema"');return{schema:Z,schemaPath:Y,topSchemaRef:X,errSchemaPath:J}}throw Error('either "keyword" or "schema" must be passed')}K6.getSubschema=WL;function ZL(w,Q,{dataProp:W,dataPropType:Z,data:Y,dataTypes:J,propertyName:X}){if(Y!==void 0&&W!==void 0)throw Error('both "data" and "dataProp" passed, only one allowed');let{gen:q}=Q;if(W!==void 0){let{errorPath:z,dataPathArr:F,opts:K}=Q,A=q.let("data",y0._`${Q.data}${(0,y0.getProperty)(W)}`,!0);G(A),w.errorPath=y0.str`${z}${(0,HX.getErrorPath)(W,Z,K.jsPropertySyntax)}`,w.parentDataProperty=y0._`${W}`,w.dataPathArr=[...F,w.parentDataProperty]}if(Y!==void 0){let z=Y instanceof y0.Name?Y:q.let("data",Y,!0);if(G(z),X!==void 0)w.propertyName=X}if(J)w.dataTypes=J;function G(z){w.data=z,w.dataLevel=Q.dataLevel+1,w.dataTypes=[],Q.definedProperties=new Set,w.parentData=Q.data,w.dataNames=[...Q.dataNames,z]}}K6.extendSubschemaData=ZL;function YL(w,{jtdDiscriminator:Q,jtdMetadata:W,compositeRule:Z,createErrors:Y,allErrors:J}){if(Z!==void 0)w.compositeRule=Z;if(Y!==void 0)w.createErrors=Y;if(J!==void 0)w.allErrors=J;w.jtdDiscriminator=Q,w.jtdMetadata=W}K6.extendSubschemaMode=YL});var G5=N((aw)=>{Object.defineProperty(aw,"__esModule",{value:!0});aw.getSchemaRefs=aw.resolveUrl=aw.normalizeId=aw._getFullPath=aw.getFullPath=aw.inlineRef=void 0;var JL=Qw(),XL=u1(),qL=Q4(),GL=new Set(["type","format","pattern","maxLength","minLength","maxProperties","minProperties","maxItems","minItems","maximum","minimum","uniqueItems","multipleOf","required","enum","const"]);function zL(w,Q=!0){if(typeof w=="boolean")return!0;if(Q===!0)return!C7(w);if(!Q)return!1;return MX(w)<=Q}aw.inlineRef=zL;var FL=new Set(["$ref","$recursiveRef","$recursiveAnchor","$dynamicRef","$dynamicAnchor"]);function C7(w){for(let Q in w){if(FL.has(Q))return!0;let W=w[Q];if(Array.isArray(W)&&W.some(C7))return!0;if(typeof W=="object"&&C7(W))return!0}return!1}function MX(w){let Q=0;for(let W in w){if(W==="$ref")return 1/0;if(Q++,GL.has(W))continue;if(typeof w[W]=="object")(0,JL.eachItem)(w[W],(Z)=>Q+=MX(Z));if(Q===1/0)return 1/0}return Q}function LX(w,Q="",W){if(W!==!1)Q=K1(Q);let Z=w.parse(Q);return $X(w,Z)}aw.getFullPath=LX;function $X(w,Q){return w.serialize(Q).split("#")[0]+"#"}aw._getFullPath=$X;var KL=/#\/?$/;function K1(w){return w?w.replace(KL,""):""}aw.normalizeId=K1;function BL(w,Q,W){return W=K1(W),w.resolve(Q,W)}aw.resolveUrl=BL;var HL=/^[a-z_][-a-z0-9._]*$/i;function VL(w,Q){if(typeof w=="boolean")return{};let{schemaId:W,uriResolver:Z}=this.opts,Y=K1(w[W]||Q),J={"":Y},X=LX(Z,Y,!1),q={},G=new Set;return qL(w,{allKeys:!0},(K,A,V,M)=>{if(M===void 0)return;let H=X+A,U=J[M];if(typeof K[W]=="string")U=j.call(this,K[W]);T.call(this,K.$anchor),T.call(this,K.$dynamicAnchor),J[A]=U;function j(P){let b=this.opts.uriResolver.resolve;if(P=K1(U?b(U,P):P),G.has(P))throw F(P);G.add(P);let O=this.refs[P];if(typeof O=="string")O=this.refs[O];if(typeof O=="object")z(K,O.schema,P);else if(P!==K1(H))if(P[0]==="#")z(K,q[P],P),q[P]=K;else this.refs[P]=H;return P}function T(P){if(typeof P=="string"){if(!HL.test(P))throw Error(`invalid anchor "${P}"`);j.call(this,`#${P}`)}}}),q;function z(K,A,V){if(A!==void 0&&!XL(K,A))throw F(V)}function F(K){return Error(`reference "${K}" resolves to more than one schema`)}}aw.getSchemaRefs=VL});var K5=N((B6)=>{Object.defineProperty(B6,"__esModule",{value:!0});B6.getData=B6.KeywordCxt=B6.validateFunctionCode=void 0;var OX=wX(),AX=q5(),y7=P7(),C9=q5(),ML=qX(),F5=BX(),v7=VX(),k=h(),C=r0(),LL=G5(),s0=Qw(),z5=J5();function $L(w){if(TX(w)){if(PX(w),IX(w)){jL(w);return}}DX(w,()=>(0,OX.topBoolOrEmptySchema)(w))}B6.validateFunctionCode=$L;function DX({gen:w,validateName:Q,schema:W,schemaEnv:Z,opts:Y},J){if(Y.code.es5)w.func(Q,k._`${C.default.data}, ${C.default.valCxt}`,Z.$async,()=>{w.code(k._`"use strict"; ${UX(W,Y)}`),UL(w,Y),w.code(J)});else w.func(Q,k._`${C.default.data}, ${AL(Y)}`,Z.$async,()=>w.code(UX(W,Y)).code(J))}function AL(w){return k._`{${C.default.instancePath}="", ${C.default.parentData}, ${C.default.parentDataProperty}, ${C.default.rootData}=${C.default.data}${w.dynamicRef?k._`, ${C.default.dynamicAnchors}={}`:k.nil}}={}`}function UL(w,Q){w.if(C.default.valCxt,()=>{if(w.var(C.default.instancePath,k._`${C.default.valCxt}.${C.default.instancePath}`),w.var(C.default.parentData,k._`${C.default.valCxt}.${C.default.parentData}`),w.var(C.default.parentDataProperty,k._`${C.default.valCxt}.${C.default.parentDataProperty}`),w.var(C.default.rootData,k._`${C.default.valCxt}.${C.default.rootData}`),Q.dynamicRef)w.var(C.default.dynamicAnchors,k._`${C.default.valCxt}.${C.default.dynamicAnchors}`)},()=>{if(w.var(C.default.instancePath,k._`""`),w.var(C.default.parentData,k._`undefined`),w.var(C.default.parentDataProperty,k._`undefined`),w.var(C.default.rootData,C.default.data),Q.dynamicRef)w.var(C.default.dynamicAnchors,k._`{}`)})}function jL(w){let{schema:Q,opts:W,gen:Z}=w;DX(w,()=>{if(W.$comment&&Q.$comment)bX(w);if(TL(w),Z.let(C.default.vErrors,null),Z.let(C.default.errors,0),W.unevaluated)NL(w);RX(w),bL(w)});return}function NL(w){let{gen:Q,validateName:W}=w;w.evaluated=Q.const("evaluated",k._`${W}.evaluated`),Q.if(k._`${w.evaluated}.dynamicProps`,()=>Q.assign(k._`${w.evaluated}.props`,k._`undefined`)),Q.if(k._`${w.evaluated}.dynamicItems`,()=>Q.assign(k._`${w.evaluated}.items`,k._`undefined`))}function UX(w,Q){let W=typeof w=="object"&&w[Q.schemaId];return W&&(Q.code.source||Q.code.process)?k._`/*# sourceURL=${W} */`:k.nil}function OL(w,Q){if(TX(w)){if(PX(w),IX(w)){DL(w,Q);return}}(0,OX.boolOrEmptySchema)(w,Q)}function IX({schema:w,self:Q}){if(typeof w=="boolean")return!w;for(let W in w)if(Q.RULES.all[W])return!0;return!1}function TX(w){return typeof w.schema!="boolean"}function DL(w,Q){let{schema:W,gen:Z,opts:Y}=w;if(Y.$comment&&W.$comment)bX(w);PL(w),RL(w);let J=Z.const("_errs",C.default.errors);RX(w,J),Z.var(Q,k._`${J} === ${C.default.errors}`)}function PX(w){(0,s0.checkUnknownRules)(w),IL(w)}function RX(w,Q){if(w.opts.jtd)return jX(w,[],!1,Q);let W=(0,AX.getSchemaTypes)(w.schema),Z=(0,AX.coerceAndCheckDataType)(w,W);jX(w,W,!Z,Q)}function IL(w){let{schema:Q,errSchemaPath:W,opts:Z,self:Y}=w;if(Q.$ref&&Z.ignoreKeywordsWithRef&&(0,s0.schemaHasRulesButRef)(Q,Y.RULES))Y.logger.warn(`$ref: keywords ignored in schema at path "${W}"`)}function TL(w){let{schema:Q,opts:W}=w;if(Q.default!==void 0&&W.useDefaults&&W.strictSchema)(0,s0.checkStrictMode)(w,"default is ignored in the schema root")}function PL(w){let Q=w.schema[w.opts.schemaId];if(Q)w.baseId=(0,LL.resolveUrl)(w.opts.uriResolver,w.baseId,Q)}function RL(w){if(w.schema.$async&&!w.schemaEnv.$async)throw Error("async schema in sync schema")}function bX({gen:w,schemaEnv:Q,schema:W,errSchemaPath:Z,opts:Y}){let J=W.$comment;if(Y.$comment===!0)w.code(k._`${C.default.self}.logger.log(${J})`);else if(typeof Y.$comment=="function"){let X=k.str`${Z}/$comment`,q=w.scopeValue("root",{ref:Q.root});w.code(k._`${C.default.self}.opts.$comment(${J}, ${X}, ${q}.schema)`)}}function bL(w){let{gen:Q,schemaEnv:W,validateName:Z,ValidationError:Y,opts:J}=w;if(W.$async)Q.if(k._`${C.default.errors} === 0`,()=>Q.return(C.default.data),()=>Q.throw(k._`new ${Y}(${C.default.vErrors})`));else{if(Q.assign(k._`${Z}.errors`,C.default.vErrors),J.unevaluated)SL(w);Q.return(k._`${C.default.errors} === 0`)}}function SL({gen:w,evaluated:Q,props:W,items:Z}){if(W instanceof k.Name)w.assign(k._`${Q}.props`,W);if(Z instanceof k.Name)w.assign(k._`${Q}.items`,Z)}function jX(w,Q,W,Z){let{gen:Y,schema:J,data:X,allErrors:q,opts:G,self:z}=w,{RULES:F}=z;if(J.$ref&&(G.ignoreKeywordsWithRef||!(0,s0.schemaHasRulesButRef)(J,F))){Y.block(()=>EX(w,"$ref",F.all.$ref.definition));return}if(!G.jtd)EL(w,Q);Y.block(()=>{for(let A of F.rules)K(A);K(F.post)});function K(A){if(!(0,y7.shouldUseGroup)(J,A))return;if(A.type){if(Y.if((0,C9.checkDataType)(A.type,X,G.strictNumbers)),NX(w,A),Q.length===1&&Q[0]===A.type&&W)Y.else(),(0,C9.reportTypeError)(w);Y.endIf()}else NX(w,A);if(!q)Y.if(k._`${C.default.errors} === ${Z||0}`)}}function NX(w,Q){let{gen:W,schema:Z,opts:{useDefaults:Y}}=w;if(Y)(0,ML.assignDefaults)(w,Q.type);W.block(()=>{for(let J of Q.rules)if((0,y7.shouldUseRule)(Z,J))EX(w,J.keyword,J.definition,Q.type)})}function EL(w,Q){if(w.schemaEnv.meta||!w.opts.strictTypes)return;if(kL(w,Q),!w.opts.allowUnionTypes)fL(w,Q);CL(w,w.dataTypes)}function kL(w,Q){if(!Q.length)return;if(!w.dataTypes.length){w.dataTypes=Q;return}Q.forEach((W)=>{if(!SX(w.dataTypes,W))u7(w,`type "${W}" not allowed by context "${w.dataTypes.join(",")}"`)}),yL(w,Q)}function fL(w,Q){if(Q.length>1&&!(Q.length===2&&Q.includes("null")))u7(w,"use allowUnionTypes to allow union type keyword")}function CL(w,Q){let W=w.self.RULES.all;for(let Z in W){let Y=W[Z];if(typeof Y=="object"&&(0,y7.shouldUseRule)(w.schema,Y)){let{type:J}=Y.definition;if(J.length&&!J.some((X)=>vL(Q,X)))u7(w,`missing type "${J.join(",")}" for keyword "${Z}"`)}}}function vL(w,Q){return w.includes(Q)||Q==="number"&&w.includes("integer")}function SX(w,Q){return w.includes(Q)||Q==="integer"&&w.includes("number")}function yL(w,Q){let W=[];for(let Z of w.dataTypes)if(SX(Q,Z))W.push(Z);else if(Q.includes("integer")&&Z==="number")W.push("integer");w.dataTypes=W}function u7(w,Q){let W=w.schemaEnv.baseId+w.errSchemaPath;Q+=` at "${W}" (strictTypes)`,(0,s0.checkStrictMode)(w,Q,w.opts.strictTypes)}class h7{constructor(w,Q,W){if((0,F5.validateKeywordUsage)(w,Q,W),this.gen=w.gen,this.allErrors=w.allErrors,this.keyword=W,this.data=w.data,this.schema=w.schema[W],this.$data=Q.$data&&w.opts.$data&&this.schema&&this.schema.$data,this.schemaValue=(0,s0.schemaRefOrVal)(w,this.schema,W,this.$data),this.schemaType=Q.schemaType,this.parentSchema=w.schema,this.params={},this.it=w,this.def=Q,this.$data)this.schemaCode=w.gen.const("vSchema",kX(this.$data,w));else if(this.schemaCode=this.schemaValue,!(0,F5.validSchemaType)(this.schema,Q.schemaType,Q.allowUndefined))throw Error(`${W} value must be ${JSON.stringify(Q.schemaType)}`);if("code"in Q?Q.trackErrors:Q.errors!==!1)this.errsCount=w.gen.const("_errs",C.default.errors)}result(w,Q,W){this.failResult((0,k.not)(w),Q,W)}failResult(w,Q,W){if(this.gen.if(w),W)W();else this.error();if(Q){if(this.gen.else(),Q(),this.allErrors)this.gen.endIf()}else if(this.allErrors)this.gen.endIf();else this.gen.else()}pass(w,Q){this.failResult((0,k.not)(w),void 0,Q)}fail(w){if(w===void 0){if(this.error(),!this.allErrors)this.gen.if(!1);return}if(this.gen.if(w),this.error(),this.allErrors)this.gen.endIf();else this.gen.else()}fail$data(w){if(!this.$data)return this.fail(w);let{schemaCode:Q}=this;this.fail(k._`${Q} !== undefined && (${(0,k.or)(this.invalid$data(),w)})`)}error(w,Q,W){if(Q){this.setParams(Q),this._error(w,W),this.setParams({});return}this._error(w,W)}_error(w,Q){(w?z5.reportExtraError:z5.reportError)(this,this.def.error,Q)}$dataError(){(0,z5.reportError)(this,this.def.$dataError||z5.keyword$DataError)}reset(){if(this.errsCount===void 0)throw Error('add "trackErrors" to keyword definition');(0,z5.resetErrorsCount)(this.gen,this.errsCount)}ok(w){if(!this.allErrors)this.gen.if(w)}setParams(w,Q){if(Q)Object.assign(this.params,w);else this.params=w}block$data(w,Q,W=k.nil){this.gen.block(()=>{this.check$data(w,W),Q()})}check$data(w=k.nil,Q=k.nil){if(!this.$data)return;let{gen:W,schemaCode:Z,schemaType:Y,def:J}=this;if(W.if((0,k.or)(k._`${Z} === undefined`,Q)),w!==k.nil)W.assign(w,!0);if(Y.length||J.validateSchema){if(W.elseIf(this.invalid$data()),this.$dataError(),w!==k.nil)W.assign(w,!1)}W.else()}invalid$data(){let{gen:w,schemaCode:Q,schemaType:W,def:Z,it:Y}=this;return(0,k.or)(J(),X());function J(){if(W.length){if(!(Q instanceof k.Name))throw Error("ajv implementation error");let q=Array.isArray(W)?W:[W];return k._`${(0,C9.checkDataTypes)(q,Q,Y.opts.strictNumbers,C9.DataType.Wrong)}`}return k.nil}function X(){if(Z.validateSchema){let q=w.scopeValue("validate$data",{ref:Z.validateSchema});return k._`!${q}(${Q})`}return k.nil}}subschema(w,Q){let W=(0,v7.getSubschema)(this.it,w);(0,v7.extendSubschemaData)(W,this.it,w),(0,v7.extendSubschemaMode)(W,w);let Z={...this.it,...W,items:void 0,props:void 0};return OL(Z,Q),Z}mergeEvaluated(w,Q){let{it:W,gen:Z}=this;if(!W.opts.unevaluated)return;if(W.props!==!0&&w.props!==void 0)W.props=s0.mergeEvaluated.props(Z,w.props,W.props,Q);if(W.items!==!0&&w.items!==void 0)W.items=s0.mergeEvaluated.items(Z,w.items,W.items,Q)}mergeValidEvaluated(w,Q){let{it:W,gen:Z}=this;if(W.opts.unevaluated&&(W.props!==!0||W.items!==!0))return Z.if(Q,()=>this.mergeEvaluated(w,k.Name)),!0}}B6.KeywordCxt=h7;function EX(w,Q,W,Z){let Y=new h7(w,W,Q);if("code"in W)W.code(Y,Z);else if(Y.$data&&W.validate)(0,F5.funcKeywordCode)(Y,W);else if("macro"in W)(0,F5.macroKeywordCode)(Y,W);else if(W.compile||W.validate)(0,F5.funcKeywordCode)(Y,W)}var uL=/^\/(?:[^~]|~0|~1)*$/,hL=/^([0-9]+)(#|\/(?:[^~]|~0|~1)*)?$/;function kX(w,{dataLevel:Q,dataNames:W,dataPathArr:Z}){let Y,J;if(w==="")return C.default.rootData;if(w[0]==="/"){if(!uL.test(w))throw Error(`Invalid JSON-pointer: ${w}`);Y=w,J=C.default.rootData}else{let z=hL.exec(w);if(!z)throw Error(`Invalid JSON-pointer: ${w}`);let F=+z[1];if(Y=z[2],Y==="#"){if(F>=Q)throw Error(G("property/index",F));return Z[Q-F]}if(F>Q)throw Error(G("data",F));if(J=W[Q-F],!Y)return J}let X=J,q=Y.split("/");for(let z of q)if(z)J=k._`${J}${(0,k.getProperty)((0,s0.unescapeJsonPointer)(z))}`,X=k._`${X} && ${J}`;return X;function G(z,F){return`Cannot access ${z} ${F} levels up, current level is ${Q}`}}B6.getData=kX});var v9=N((g7)=>{Object.defineProperty(g7,"__esModule",{value:!0});class fX extends Error{constructor(w){super("validation failed");this.errors=w,this.ajv=this.validation=!0}}g7.default=fX});var y9=N((x7)=>{Object.defineProperty(x7,"__esModule",{value:!0});var _7=G5();class CX extends Error{constructor(w,Q,W,Z){super(Z||`can't resolve reference ${W} from id ${Q}`);this.missingRef=(0,_7.resolveUrl)(w,Q,W),this.missingSchema=(0,_7.normalizeId)((0,_7.getFullPath)(w,this.missingRef))}}x7.default=CX});var h9=N((G0)=>{Object.defineProperty(G0,"__esModule",{value:!0});G0.resolveSchema=G0.getCompilingSchema=G0.resolveRef=G0.compileSchema=G0.SchemaEnv=void 0;var U0=h(),gL=v9(),b6=r0(),j0=G5(),vX=Qw(),_L=K5();class B5{constructor(w){var Q;this.refs={},this.dynamicAnchors={};let W;if(typeof w.schema=="object")W=w.schema;this.schema=w.schema,this.schemaId=w.schemaId,this.root=w.root||this,this.baseId=(Q=w.baseId)!==null&&Q!==void 0?Q:(0,j0.normalizeId)(W===null||W===void 0?void 0:W[w.schemaId||"$id"]),this.schemaPath=w.schemaPath,this.localRefs=w.localRefs,this.meta=w.meta,this.$async=W===null||W===void 0?void 0:W.$async,this.refs={}}}G0.SchemaEnv=B5;function i7(w){let Q=yX.call(this,w);if(Q)return Q;let W=(0,j0.getFullPath)(this.opts.uriResolver,w.root.baseId),{es5:Z,lines:Y}=this.opts.code,{ownProperties:J}=this.opts,X=new U0.CodeGen(this.scope,{es5:Z,lines:Y,ownProperties:J}),q;if(w.$async)q=X.scopeValue("Error",{ref:gL.default,code:U0._`require("ajv/dist/runtime/validation_error").default`});let G=X.scopeName("validate");w.validateName=G;let z={gen:X,allErrors:this.opts.allErrors,data:b6.default.data,parentData:b6.default.parentData,parentDataProperty:b6.default.parentDataProperty,dataNames:[b6.default.data],dataPathArr:[U0.nil],dataLevel:0,dataTypes:[],definedProperties:new Set,topSchemaRef:X.scopeValue("schema",this.opts.code.source===!0?{ref:w.schema,code:(0,U0.stringify)(w.schema)}:{ref:w.schema}),validateName:G,ValidationError:q,schema:w.schema,schemaEnv:w,rootId:W,baseId:w.baseId||W,schemaPath:U0.nil,errSchemaPath:w.schemaPath||(this.opts.jtd?"":"#"),errorPath:U0._`""`,opts:this.opts,self:this},F;try{this._compilations.add(w),(0,_L.validateFunctionCode)(z),X.optimize(this.opts.code.optimize);let K=X.toString();if(F=`${X.scopeRefs(b6.default.scope)}return ${K}`,this.opts.code.process)F=this.opts.code.process(F,w);let V=Function(`${b6.default.self}`,`${b6.default.scope}`,F)(this,this.scope.get());if(this.scope.value(G,{ref:V}),V.errors=null,V.schema=w.schema,V.schemaEnv=w,w.$async)V.$async=!0;if(this.opts.code.source===!0)V.source={validateName:G,validateCode:K,scopeValues:X._values};if(this.opts.unevaluated){let{props:M,items:H}=z;if(V.evaluated={props:M instanceof U0.Name?void 0:M,items:H instanceof U0.Name?void 0:H,dynamicProps:M instanceof U0.Name,dynamicItems:H instanceof U0.Name},V.source)V.source.evaluated=(0,U0.stringify)(V.evaluated)}return w.validate=V,w}catch(K){if(delete w.validate,delete w.validateName,F)this.logger.error("Error compiling schema, function code:",F);throw K}finally{this._compilations.delete(w)}}G0.compileSchema=i7;function xL(w,Q,W){var Z;W=(0,j0.resolveUrl)(this.opts.uriResolver,Q,W);let Y=w.refs[W];if(Y)return Y;let J=mL.call(this,w,W);if(J===void 0){let X=(Z=w.localRefs)===null||Z===void 0?void 0:Z[W],{schemaId:q}=this.opts;if(X)J=new B5({schema:X,schemaId:q,root:w,baseId:Q})}if(J===void 0)return;return w.refs[W]=lL.call(this,J)}G0.resolveRef=xL;function lL(w){if((0,j0.inlineRef)(w.schema,this.opts.inlineRefs))return w.schema;return w.validate?w:i7.call(this,w)}function yX(w){for(let Q of this._compilations)if(iL(Q,w))return Q}G0.getCompilingSchema=yX;function iL(w,Q){return w.schema===Q.schema&&w.root===Q.root&&w.baseId===Q.baseId}function mL(w,Q){let W;while(typeof(W=this.refs[Q])=="string")Q=W;return W||this.schemas[Q]||u9.call(this,w,Q)}function u9(w,Q){let W=this.opts.uriResolver.parse(Q),Z=(0,j0._getFullPath)(this.opts.uriResolver,W),Y=(0,j0.getFullPath)(this.opts.uriResolver,w.baseId,void 0);if(Object.keys(w.schema).length>0&&Z===Y)return l7.call(this,W,w);let J=(0,j0.normalizeId)(Z),X=this.refs[J]||this.schemas[J];if(typeof X=="string"){let q=u9.call(this,w,X);if(typeof(q===null||q===void 0?void 0:q.schema)!=="object")return;return l7.call(this,W,q)}if(typeof(X===null||X===void 0?void 0:X.schema)!=="object")return;if(!X.validate)i7.call(this,X);if(J===(0,j0.normalizeId)(Q)){let{schema:q}=X,{schemaId:G}=this.opts,z=q[G];if(z)Y=(0,j0.resolveUrl)(this.opts.uriResolver,Y,z);return new B5({schema:q,schemaId:G,root:w,baseId:Y})}return l7.call(this,W,X)}G0.resolveSchema=u9;var pL=new Set(["properties","patternProperties","enum","dependencies","definitions"]);function l7(w,{baseId:Q,schema:W,root:Z}){var Y;if(((Y=w.fragment)===null||Y===void 0?void 0:Y[0])!=="/")return;for(let q of w.fragment.slice(1).split("/")){if(typeof W==="boolean")return;let G=W[(0,vX.unescapeFragment)(q)];if(G===void 0)return;W=G;let z=typeof W==="object"&&W[this.opts.schemaId];if(!pL.has(q)&&z)Q=(0,j0.resolveUrl)(this.opts.uriResolver,Q,z)}let J;if(typeof W!="boolean"&&W.$ref&&!(0,vX.schemaHasRulesButRef)(W,this.RULES)){let q=(0,j0.resolveUrl)(this.opts.uriResolver,Q,W.$ref);J=u9.call(this,Z,q)}let{schemaId:X}=this.opts;if(J=J||new B5({schema:W,schemaId:X,root:Z,baseId:Q}),J.schema!==J.root.schema)return J;return}});var uX=N((jO,cL)=>{cL.exports={$id:"https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#",description:"Meta-schema for $data reference (JSON AnySchema extension proposal)",type:"object",required:["$data"],properties:{$data:{type:"string",anyOf:[{format:"relative-json-pointer"},{format:"json-pointer"}]}},additionalProperties:!1}});var _9=N((g9,hX)=>{(function(w,Q){typeof g9==="object"&&typeof hX<"u"?Q(g9):typeof define==="function"&&define.amd?define(["exports"],Q):Q(w.URI=w.URI||{})})(g9,function(w){function Q(){for(var L=arguments.length,B=Array(L),$=0;$<L;$++)B[$]=arguments[$];if(B.length>1){B[0]=B[0].slice(0,-1);var D=B.length-1;for(var I=1;I<D;++I)B[I]=B[I].slice(1,-1);return B[D]=B[D].slice(1),B.join("")}else return B[0]}function W(L){return"(?:"+L+")"}function Z(L){return L===void 0?"undefined":L===null?"null":Object.prototype.toString.call(L).split(" ").pop().split("]").shift().toLowerCase()}function Y(L){return L.toUpperCase()}function J(L){return L!==void 0&&L!==null?L instanceof Array?L:typeof L.length!=="number"||L.split||L.setInterval||L.call?[L]:Array.prototype.slice.call(L):[]}function X(L,B){var $=L;if(B)for(var D in B)$[D]=B[D];return $}function q(L){var B="[A-Za-z]",$="[\\x0D]",D="[0-9]",I="[\\x22]",R=Q(D,"[A-Fa-f]"),v="[\\x0A]",t="[\\x20]",Yw=W(W("%[EFef]"+R+"%"+R+R+"%"+R+R)+"|"+W("%[89A-Fa-f]"+R+"%"+R+R)+"|"+W("%"+R+R)),Ow="[\\:\\/\\?\\#\\[\\]\\@]",r="[\\!\\$\\&\\'\\(\\)\\*\\+\\,\\;\\=]",Lw=Q(Ow,r),Dw=L?"[\\xA0-\\u200D\\u2010-\\u2029\\u202F-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]":"[]",Mw=L?"[\\uE000-\\uF8FF]":"[]",Ww=Q(B,D,"[\\-\\.\\_\\~]",Dw),$w=W(B+Q(B,D,"[\\+\\-\\.]")+"*"),Jw=W(W(Yw+"|"+Q(Ww,r,"[\\:]"))+"*"),M6=W(W("25[0-5]")+"|"+W("2[0-4]"+D)+"|"+W("1"+D+D)+"|"+W("[1-9]"+D)+"|"+D),ew=W(W("25[0-5]")+"|"+W("2[0-4]"+D)+"|"+W("1"+D+D)+"|"+W("0?[1-9]"+D)+"|0?0?"+D),W0=W(ew+"\\."+ew+"\\."+ew+"\\."+ew),zw=W(R+"{1,4}"),w0=W(W(zw+"\\:"+zw)+"|"+W0),Z0=W(W(zw+"\\:")+"{6}"+w0),b0=W("\\:\\:"+W(zw+"\\:")+"{5}"+w0),L6=W(W(zw)+"?\\:\\:"+W(zw+"\\:")+"{4}"+w0),x0=W(W(W(zw+"\\:")+"{0,1}"+zw)+"?\\:\\:"+W(zw+"\\:")+"{3}"+w0),I1=W(W(W(zw+"\\:")+"{0,2}"+zw)+"?\\:\\:"+W(zw+"\\:")+"{2}"+w0),E5=W(W(W(zw+"\\:")+"{0,3}"+zw)+"?\\:\\:"+zw+"\\:"+w0),k5=W(W(W(zw+"\\:")+"{0,4}"+zw)+"?\\:\\:"+w0),u6=W(W(W(zw+"\\:")+"{0,5}"+zw)+"?\\:\\:"+zw),h6=W(W(W(zw+"\\:")+"{0,6}"+zw)+"?\\:\\:"),l0=W([Z0,b0,L6,x0,I1,E5,k5,u6,h6].join("|")),g6=W(W(Ww+"|"+Yw)+"+"),V8=W(l0+"\\%25"+g6),$6=W(l0+W("\\%25|\\%(?!"+R+"{2})")+g6),Oz=W("[vV]"+R+"+\\."+Q(Ww,r,"[\\:]")+"+"),Dz=W("\\["+W($6+"|"+l0+"|"+Oz)+"\\]"),qW=W(W(Yw+"|"+Q(Ww,r))+"*"),T1=W(Dz+"|"+W0+"(?!"+qW+")|"+qW),P1=W(D+"*"),GW=W(W(Jw+"@")+"?"+T1+W("\\:"+P1)+"?"),R1=W(Yw+"|"+Q(Ww,r,"[\\:\\@]")),Iz=W(R1+"*"),zW=W(R1+"+"),Tz=W(W(Yw+"|"+Q(Ww,r,"[\\@]"))+"+"),i0=W(W("\\/"+Iz)+"*"),_6=W("\\/"+W(zW+i0)+"?"),M8=W(Tz+i0),f5=W(zW+i0),x6="(?!"+R1+")",Vj=W(i0+"|"+_6+"|"+M8+"|"+f5+"|"+x6),l6=W(W(R1+"|"+Q("[\\/\\?]",Mw))+"*"),b1=W(W(R1+"|[\\/\\?]")+"*"),FW=W(W("\\/\\/"+GW+i0)+"|"+_6+"|"+f5+"|"+x6),Pz=W($w+"\\:"+FW+W("\\?"+l6)+"?"+W("\\#"+b1)+"?"),Rz=W(W("\\/\\/"+GW+i0)+"|"+_6+"|"+M8+"|"+x6),bz=W(Rz+W("\\?"+l6)+"?"+W("\\#"+b1)+"?"),Mj=W(Pz+"|"+bz),Lj=W($w+"\\:"+FW+W("\\?"+l6)+"?"),$j="^("+$w+")\\:"+W(W("\\/\\/("+W("("+Jw+")@")+"?("+T1+")"+W("\\:("+P1+")")+"?)")+"?("+i0+"|"+_6+"|"+f5+"|"+x6+")")+W("\\?("+l6+")")+"?"+W("\\#("+b1+")")+"?$",Aj="^(){0}"+W(W("\\/\\/("+W("("+Jw+")@")+"?("+T1+")"+W("\\:("+P1+")")+"?)")+"?("+i0+"|"+_6+"|"+M8+"|"+x6+")")+W("\\?("+l6+")")+"?"+W("\\#("+b1+")")+"?$",Uj="^("+$w+")\\:"+W(W("\\/\\/("+W("("+Jw+")@")+"?("+T1+")"+W("\\:("+P1+")")+"?)")+"?("+i0+"|"+_6+"|"+f5+"|"+x6+")")+W("\\?("+l6+")")+"?$",jj="^"+W("\\#("+b1+")")+"?$",Nj="^"+W("("+Jw+")@")+"?("+T1+")"+W("\\:("+P1+")")+"?$";return{NOT_SCHEME:new RegExp(Q("[^]",B,D,"[\\+\\-\\.]"),"g"),NOT_USERINFO:new RegExp(Q("[^\\%\\:]",Ww,r),"g"),NOT_HOST:new RegExp(Q("[^\\%\\[\\]\\:]",Ww,r),"g"),NOT_PATH:new RegExp(Q("[^\\%\\/\\:\\@]",Ww,r),"g"),NOT_PATH_NOSCHEME:new RegExp(Q("[^\\%\\/\\@]",Ww,r),"g"),NOT_QUERY:new RegExp(Q("[^\\%]",Ww,r,"[\\:\\@\\/\\?]",Mw),"g"),NOT_FRAGMENT:new RegExp(Q("[^\\%]",Ww,r,"[\\:\\@\\/\\?]"),"g"),ESCAPE:new RegExp(Q("[^]",Ww,r),"g"),UNRESERVED:new RegExp(Ww,"g"),OTHER_CHARS:new RegExp(Q("[^\\%]",Ww,Lw),"g"),PCT_ENCODED:new RegExp(Yw,"g"),IPV4ADDRESS:new RegExp("^("+W0+")$"),IPV6ADDRESS:new RegExp("^\\[?("+l0+")"+W(W("\\%25|\\%(?!"+R+"{2})")+"("+g6+")")+"?\\]?$")}}var G=q(!1),z=q(!0),F=function(){function L(B,$){var D=[],I=!0,R=!1,v=void 0;try{for(var t=B[Symbol.iterator](),Yw;!(I=(Yw=t.next()).done);I=!0)if(D.push(Yw.value),$&&D.length===$)break}catch(Ow){R=!0,v=Ow}finally{try{if(!I&&t.return)t.return()}finally{if(R)throw v}}return D}return function(B,$){if(Array.isArray(B))return B;else if(Symbol.iterator in Object(B))return L(B,$);else throw TypeError("Invalid attempt to destructure non-iterable instance")}}(),K=function(L){if(Array.isArray(L)){for(var B=0,$=Array(L.length);B<L.length;B++)$[B]=L[B];return $}else return Array.from(L)},A=2147483647,V=36,M=1,H=26,U=38,j=700,T=72,P=128,b="-",O=/^xn--/,S=/[^\0-\x7E]/,i=/[\x2E\u3002\uFF0E\uFF61]/g,g={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},Zw=V-M,c=Math.floor,Uw=String.fromCharCode;function Gw(L){throw RangeError(g[L])}function Iw(L,B){var $=[],D=L.length;while(D--)$[D]=B(L[D]);return $}function hw(L,B){var $=L.split("@"),D="";if($.length>1)D=$[0]+"@",L=$[1];L=L.replace(i,".");var I=L.split("."),R=Iw(I,B).join(".");return D+R}function pw(L){var B=[],$=0,D=L.length;while($<D){var I=L.charCodeAt($++);if(I>=55296&&I<=56319&&$<D){var R=L.charCodeAt($++);if((R&64512)==56320)B.push(((I&1023)<<10)+(R&1023)+65536);else B.push(I),$--}else B.push(I)}return B}var F0=function(B){return String.fromCodePoint.apply(String,K(B))},K0=function(B){if(B-48<10)return B-22;if(B-65<26)return B-65;if(B-97<26)return B-97;return V},I0=function(B,$){return B+22+75*(B<26)-(($!=0)<<5)},a0=function(B,$,D){var I=0;B=D?c(B/j):B>>1,B+=c(B/$);for(;B>Zw*H>>1;I+=V)B=c(B/Zw);return c(I+(Zw+1)*B/(B+U))},N1=function(B){var $=[],D=B.length,I=0,R=P,v=T,t=B.lastIndexOf(b);if(t<0)t=0;for(var Yw=0;Yw<t;++Yw){if(B.charCodeAt(Yw)>=128)Gw("not-basic");$.push(B.charCodeAt(Yw))}for(var Ow=t>0?t+1:0;Ow<D;){var r=I;for(var Lw=1,Dw=V;;Dw+=V){if(Ow>=D)Gw("invalid-input");var Mw=K0(B.charCodeAt(Ow++));if(Mw>=V||Mw>c((A-I)/Lw))Gw("overflow");I+=Mw*Lw;var Ww=Dw<=v?M:Dw>=v+H?H:Dw-v;if(Mw<Ww)break;var $w=V-Ww;if(Lw>c(A/$w))Gw("overflow");Lw*=$w}var Jw=$.length+1;if(v=a0(I-r,Jw,r==0),c(I/Jw)>A-R)Gw("overflow");R+=c(I/Jw),I%=Jw,$.splice(I++,0,R)}return String.fromCodePoint.apply(String,$)},nQ=function(B){var $=[];B=pw(B);var D=B.length,I=P,R=0,v=T,t=!0,Yw=!1,Ow=void 0;try{for(var r=B[Symbol.iterator](),Lw;!(t=(Lw=r.next()).done);t=!0){var Dw=Lw.value;if(Dw<128)$.push(Uw(Dw))}}catch($6){Yw=!0,Ow=$6}finally{try{if(!t&&r.return)r.return()}finally{if(Yw)throw Ow}}var Mw=$.length,Ww=Mw;if(Mw)$.push(b);while(Ww<D){var $w=A,Jw=!0,M6=!1,ew=void 0;try{for(var W0=B[Symbol.iterator](),zw;!(Jw=(zw=W0.next()).done);Jw=!0){var w0=zw.value;if(w0>=I&&w0<$w)$w=w0}}catch($6){M6=!0,ew=$6}finally{try{if(!Jw&&W0.return)W0.return()}finally{if(M6)throw ew}}var Z0=Ww+1;if($w-I>c((A-R)/Z0))Gw("overflow");R+=($w-I)*Z0,I=$w;var b0=!0,L6=!1,x0=void 0;try{for(var I1=B[Symbol.iterator](),E5;!(b0=(E5=I1.next()).done);b0=!0){var k5=E5.value;if(k5<I&&++R>A)Gw("overflow");if(k5==I){var u6=R;for(var h6=V;;h6+=V){var l0=h6<=v?M:h6>=v+H?H:h6-v;if(u6<l0)break;var g6=u6-l0,V8=V-l0;$.push(Uw(I0(l0+g6%V8,0))),u6=c(g6/V8)}$.push(Uw(I0(u6,0))),v=a0(R,Z0,Ww==Mw),R=0,++Ww}}}catch($6){L6=!0,x0=$6}finally{try{if(!b0&&I1.return)I1.return()}finally{if(L6)throw x0}}++R,++I}return $.join("")},wz=function(B){return hw(B,function($){return O.test($)?N1($.slice(4).toLowerCase()):$})},Qz=function(B){return hw(B,function($){return S.test($)?"xn--"+nQ($):$})},f6={version:"2.1.0",ucs2:{decode:pw,encode:F0},decode:N1,encode:nQ,toASCII:Qz,toUnicode:wz},Q0={};function T0(L){var B=L.charCodeAt(0),$=void 0;if(B<16)$="%0"+B.toString(16).toUpperCase();else if(B<128)$="%"+B.toString(16).toUpperCase();else if(B<2048)$="%"+(B>>6|192).toString(16).toUpperCase()+"%"+(B&63|128).toString(16).toUpperCase();else $="%"+(B>>12|224).toString(16).toUpperCase()+"%"+(B>>6&63|128).toString(16).toUpperCase()+"%"+(B&63|128).toString(16).toUpperCase();return $}function C6(L){var B="",$=0,D=L.length;while($<D){var I=parseInt(L.substr($+1,2),16);if(I<128)B+=String.fromCharCode(I),$+=3;else if(I>=194&&I<224){if(D-$>=6){var R=parseInt(L.substr($+4,2),16);B+=String.fromCharCode((I&31)<<6|R&63)}else B+=L.substr($,6);$+=6}else if(I>=224){if(D-$>=9){var v=parseInt(L.substr($+4,2),16),t=parseInt(L.substr($+7,2),16);B+=String.fromCharCode((I&15)<<12|(v&63)<<6|t&63)}else B+=L.substr($,9);$+=9}else B+=L.substr($,3),$+=3}return B}function F8(L,B){function $(D){var I=C6(D);return!I.match(B.UNRESERVED)?D:I}if(L.scheme)L.scheme=String(L.scheme).replace(B.PCT_ENCODED,$).toLowerCase().replace(B.NOT_SCHEME,"");if(L.userinfo!==void 0)L.userinfo=String(L.userinfo).replace(B.PCT_ENCODED,$).replace(B.NOT_USERINFO,T0).replace(B.PCT_ENCODED,Y);if(L.host!==void 0)L.host=String(L.host).replace(B.PCT_ENCODED,$).toLowerCase().replace(B.NOT_HOST,T0).replace(B.PCT_ENCODED,Y);if(L.path!==void 0)L.path=String(L.path).replace(B.PCT_ENCODED,$).replace(L.scheme?B.NOT_PATH:B.NOT_PATH_NOSCHEME,T0).replace(B.PCT_ENCODED,Y);if(L.query!==void 0)L.query=String(L.query).replace(B.PCT_ENCODED,$).replace(B.NOT_QUERY,T0).replace(B.PCT_ENCODED,Y);if(L.fragment!==void 0)L.fragment=String(L.fragment).replace(B.PCT_ENCODED,$).replace(B.NOT_FRAGMENT,T0).replace(B.PCT_ENCODED,Y);return L}function K8(L){return L.replace(/^0*(.*)/,"$1")||"0"}function B8(L,B){var $=L.match(B.IPV4ADDRESS)||[],D=F($,2),I=D[1];if(I)return I.split(".").map(K8).join(".");else return L}function rQ(L,B){var $=L.match(B.IPV6ADDRESS)||[],D=F($,3),I=D[1],R=D[2];if(I){var v=I.toLowerCase().split("::").reverse(),t=F(v,2),Yw=t[0],Ow=t[1],r=Ow?Ow.split(":").map(K8):[],Lw=Yw.split(":").map(K8),Dw=B.IPV4ADDRESS.test(Lw[Lw.length-1]),Mw=Dw?7:8,Ww=Lw.length-Mw,$w=Array(Mw);for(var Jw=0;Jw<Mw;++Jw)$w[Jw]=r[Jw]||Lw[Ww+Jw]||"";if(Dw)$w[Mw-1]=B8($w[Mw-1],B);var M6=$w.reduce(function(Z0,b0,L6){if(!b0||b0==="0"){var x0=Z0[Z0.length-1];if(x0&&x0.index+x0.length===L6)x0.length++;else Z0.push({index:L6,length:1})}return Z0},[]),ew=M6.sort(function(Z0,b0){return b0.length-Z0.length})[0],W0=void 0;if(ew&&ew.length>1){var zw=$w.slice(0,ew.index),w0=$w.slice(ew.index+ew.length);W0=zw.join(":")+"::"+w0.join(":")}else W0=$w.join(":");if(R)W0+="%"+R;return W0}else return L}var Wz=/^(?:([^:\/?#]+):)?(?:\/\/((?:([^\/?#@]*)@)?(\[[^\/?#\]]+\]|[^\/?#:]*)(?:\:(\d*))?))?([^?#]*)(?:\?([^#]*))?(?:#((?:.|\n|\r)*))?/i,Zz="".match(/(){0}/)[1]===void 0;function g0(L){var B=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},$={},D=B.iri!==!1?z:G;if(B.reference==="suffix")L=(B.scheme?B.scheme+":":"")+"//"+L;var I=L.match(Wz);if(I){if(Zz){if($.scheme=I[1],$.userinfo=I[3],$.host=I[4],$.port=parseInt(I[5],10),$.path=I[6]||"",$.query=I[7],$.fragment=I[8],isNaN($.port))$.port=I[5]}else if($.scheme=I[1]||void 0,$.userinfo=L.indexOf("@")!==-1?I[3]:void 0,$.host=L.indexOf("//")!==-1?I[4]:void 0,$.port=parseInt(I[5],10),$.path=I[6]||"",$.query=L.indexOf("?")!==-1?I[7]:void 0,$.fragment=L.indexOf("#")!==-1?I[8]:void 0,isNaN($.port))$.port=L.match(/\/\/(?:.|\n)*\:(?:\/|\?|\#|$)/)?I[4]:void 0;if($.host)$.host=rQ(B8($.host,D),D);if($.scheme===void 0&&$.userinfo===void 0&&$.host===void 0&&$.port===void 0&&!$.path&&$.query===void 0)$.reference="same-document";else if($.scheme===void 0)$.reference="relative";else if($.fragment===void 0)$.reference="absolute";else $.reference="uri";if(B.reference&&B.reference!=="suffix"&&B.reference!==$.reference)$.error=$.error||"URI is not a "+B.reference+" reference.";var R=Q0[(B.scheme||$.scheme||"").toLowerCase()];if(!B.unicodeSupport&&(!R||!R.unicodeSupport)){if($.host&&(B.domainHost||R&&R.domainHost))try{$.host=f6.toASCII($.host.replace(D.PCT_ENCODED,C6).toLowerCase())}catch(v){$.error=$.error||"Host's domain name can not be converted to ASCII via punycode: "+v}F8($,G)}else F8($,D);if(R&&R.parse)R.parse($,B)}else $.error=$.error||"URI can not be parsed.";return $}function Yz(L,B){var $=B.iri!==!1?z:G,D=[];if(L.userinfo!==void 0)D.push(L.userinfo),D.push("@");if(L.host!==void 0)D.push(rQ(B8(String(L.host),$),$).replace($.IPV6ADDRESS,function(I,R,v){return"["+R+(v?"%25"+v:"")+"]"}));if(typeof L.port==="number"||typeof L.port==="string")D.push(":"),D.push(String(L.port));return D.length?D.join(""):void 0}var sQ=/^\.\.?\//,aQ=/^\/\.(\/|$)/,tQ=/^\/\.\.(\/|$)/,Jz=/^\/?(?:.|\n)*?(?=\/|$)/;function v6(L){var B=[];while(L.length)if(L.match(sQ))L=L.replace(sQ,"");else if(L.match(aQ))L=L.replace(aQ,"/");else if(L.match(tQ))L=L.replace(tQ,"/"),B.pop();else if(L==="."||L==="..")L="";else{var $=L.match(Jz);if($){var D=$[0];L=L.slice(D.length),B.push(D)}else throw Error("Unexpected dot segment condition")}return B.join("")}function P0(L){var B=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},$=B.iri?z:G,D=[],I=Q0[(B.scheme||L.scheme||"").toLowerCase()];if(I&&I.serialize)I.serialize(L,B);if(L.host){if($.IPV6ADDRESS.test(L.host));else if(B.domainHost||I&&I.domainHost)try{L.host=!B.iri?f6.toASCII(L.host.replace($.PCT_ENCODED,C6).toLowerCase()):f6.toUnicode(L.host)}catch(t){L.error=L.error||"Host's domain name can not be converted to "+(!B.iri?"ASCII":"Unicode")+" via punycode: "+t}}if(F8(L,$),B.reference!=="suffix"&&L.scheme)D.push(L.scheme),D.push(":");var R=Yz(L,B);if(R!==void 0){if(B.reference!=="suffix")D.push("//");if(D.push(R),L.path&&L.path.charAt(0)!=="/")D.push("/")}if(L.path!==void 0){var v=L.path;if(!B.absolutePath&&(!I||!I.absolutePath))v=v6(v);if(R===void 0)v=v.replace(/^\/\//,"/%2F");D.push(v)}if(L.query!==void 0)D.push("?"),D.push(L.query);if(L.fragment!==void 0)D.push("#"),D.push(L.fragment);return D.join("")}function oQ(L,B){var $=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},D=arguments[3],I={};if(!D)L=g0(P0(L,$),$),B=g0(P0(B,$),$);if($=$||{},!$.tolerant&&B.scheme)I.scheme=B.scheme,I.userinfo=B.userinfo,I.host=B.host,I.port=B.port,I.path=v6(B.path||""),I.query=B.query;else{if(B.userinfo!==void 0||B.host!==void 0||B.port!==void 0)I.userinfo=B.userinfo,I.host=B.host,I.port=B.port,I.path=v6(B.path||""),I.query=B.query;else{if(!B.path)if(I.path=L.path,B.query!==void 0)I.query=B.query;else I.query=L.query;else{if(B.path.charAt(0)==="/")I.path=v6(B.path);else{if((L.userinfo!==void 0||L.host!==void 0||L.port!==void 0)&&!L.path)I.path="/"+B.path;else if(!L.path)I.path=B.path;else I.path=L.path.slice(0,L.path.lastIndexOf("/")+1)+B.path;I.path=v6(I.path)}I.query=B.query}I.userinfo=L.userinfo,I.host=L.host,I.port=L.port}I.scheme=L.scheme}return I.fragment=B.fragment,I}function Xz(L,B,$){var D=X({scheme:"null"},$);return P0(oQ(g0(L,D),g0(B,D),D,!0),D)}function qz(L,B){if(typeof L==="string")L=P0(g0(L,B),B);else if(Z(L)==="object")L=g0(P0(L,B),B);return L}function Gz(L,B,$){if(typeof L==="string")L=P0(g0(L,$),$);else if(Z(L)==="object")L=P0(L,$);if(typeof B==="string")B=P0(g0(B,$),$);else if(Z(B)==="object")B=P0(B,$);return L===B}function zz(L,B){return L&&L.toString().replace(!B||!B.iri?G.ESCAPE:z.ESCAPE,T0)}function _0(L,B){return L&&L.toString().replace(!B||!B.iri?G.PCT_ENCODED:z.PCT_ENCODED,C6)}var O1={scheme:"http",domainHost:!0,parse:function(B,$){if(!B.host)B.error=B.error||"HTTP URIs must have a host.";return B},serialize:function(B,$){var D=String(B.scheme).toLowerCase()==="https";if(B.port===(D?443:80)||B.port==="")B.port=void 0;if(!B.path)B.path="/";return B}},eQ={scheme:"https",domainHost:O1.domainHost,parse:O1.parse,serialize:O1.serialize};function wW(L){return typeof L.secure==="boolean"?L.secure:String(L.scheme).toLowerCase()==="wss"}var D1={scheme:"ws",domainHost:!0,parse:function(B,$){var D=B;return D.secure=wW(D),D.resourceName=(D.path||"/")+(D.query?"?"+D.query:""),D.path=void 0,D.query=void 0,D},serialize:function(B,$){if(B.port===(wW(B)?443:80)||B.port==="")B.port=void 0;if(typeof B.secure==="boolean")B.scheme=B.secure?"wss":"ws",B.secure=void 0;if(B.resourceName){var D=B.resourceName.split("?"),I=F(D,2),R=I[0],v=I[1];B.path=R&&R!=="/"?R:void 0,B.query=v,B.resourceName=void 0}return B.fragment=void 0,B}},QW={scheme:"wss",domainHost:D1.domainHost,parse:D1.parse,serialize:D1.serialize},Fz={},Kz=!0,WW="[A-Za-z0-9\\-\\.\\_\\~"+(Kz?"\\xA0-\\u200D\\u2010-\\u2029\\u202F-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF":"")+"]",R0="[0-9A-Fa-f]",Bz=W(W("%[EFef]"+R0+"%"+R0+R0+"%"+R0+R0)+"|"+W("%[89A-Fa-f]"+R0+"%"+R0+R0)+"|"+W("%"+R0+R0)),Hz="[A-Za-z0-9\\!\\$\\%\\'\\*\\+\\-\\^\\_\\`\\{\\|\\}\\~]",Vz="[\\!\\$\\%\\'\\(\\)\\*\\+\\,\\-\\.0-9\\<\\>A-Z\\x5E-\\x7E]",Mz=Q(Vz,"[\\\"\\\\]"),Lz="[\\!\\$\\'\\(\\)\\*\\+\\,\\;\\:\\@]",$z=new RegExp(WW,"g"),y6=new RegExp(Bz,"g"),Az=new RegExp(Q("[^]",Hz,"[\\.]","[\\\"]",Mz),"g"),ZW=new RegExp(Q("[^]",WW,Lz),"g"),Uz=ZW;function H8(L){var B=C6(L);return!B.match($z)?L:B}var YW={scheme:"mailto",parse:function(B,$){var D=B,I=D.to=D.path?D.path.split(","):[];if(D.path=void 0,D.query){var R=!1,v={},t=D.query.split("&");for(var Yw=0,Ow=t.length;Yw<Ow;++Yw){var r=t[Yw].split("=");switch(r[0]){case"to":var Lw=r[1].split(",");for(var Dw=0,Mw=Lw.length;Dw<Mw;++Dw)I.push(Lw[Dw]);break;case"subject":D.subject=_0(r[1],$);break;case"body":D.body=_0(r[1],$);break;default:R=!0,v[_0(r[0],$)]=_0(r[1],$);break}}if(R)D.headers=v}D.query=void 0;for(var Ww=0,$w=I.length;Ww<$w;++Ww){var Jw=I[Ww].split("@");if(Jw[0]=_0(Jw[0]),!$.unicodeSupport)try{Jw[1]=f6.toASCII(_0(Jw[1],$).toLowerCase())}catch(M6){D.error=D.error||"Email address's domain name can not be converted to ASCII via punycode: "+M6}else Jw[1]=_0(Jw[1],$).toLowerCase();I[Ww]=Jw.join("@")}return D},serialize:function(B,$){var D=B,I=J(B.to);if(I){for(var R=0,v=I.length;R<v;++R){var t=String(I[R]),Yw=t.lastIndexOf("@"),Ow=t.slice(0,Yw).replace(y6,H8).replace(y6,Y).replace(Az,T0),r=t.slice(Yw+1);try{r=!$.iri?f6.toASCII(_0(r,$).toLowerCase()):f6.toUnicode(r)}catch(Ww){D.error=D.error||"Email address's domain name can not be converted to "+(!$.iri?"ASCII":"Unicode")+" via punycode: "+Ww}I[R]=Ow+"@"+r}D.path=I.join(",")}var Lw=B.headers=B.headers||{};if(B.subject)Lw.subject=B.subject;if(B.body)Lw.body=B.body;var Dw=[];for(var Mw in Lw)if(Lw[Mw]!==Fz[Mw])Dw.push(Mw.replace(y6,H8).replace(y6,Y).replace(ZW,T0)+"="+Lw[Mw].replace(y6,H8).replace(y6,Y).replace(Uz,T0));if(Dw.length)D.query=Dw.join("&");return D}},jz=/^([^\:]+)\:(.*)/,JW={scheme:"urn",parse:function(B,$){var D=B.path&&B.path.match(jz),I=B;if(D){var R=$.scheme||I.scheme||"urn",v=D[1].toLowerCase(),t=D[2],Yw=R+":"+($.nid||v),Ow=Q0[Yw];if(I.nid=v,I.nss=t,I.path=void 0,Ow)I=Ow.parse(I,$)}else I.error=I.error||"URN can not be parsed.";return I},serialize:function(B,$){var D=$.scheme||B.scheme||"urn",I=B.nid,R=D+":"+($.nid||I),v=Q0[R];if(v)B=v.serialize(B,$);var t=B,Yw=B.nss;return t.path=(I||$.nid)+":"+Yw,t}},Nz=/^[0-9A-Fa-f]{8}(?:\-[0-9A-Fa-f]{4}){3}\-[0-9A-Fa-f]{12}$/,XW={scheme:"urn:uuid",parse:function(B,$){var D=B;if(D.uuid=D.nss,D.nss=void 0,!$.tolerant&&(!D.uuid||!D.uuid.match(Nz)))D.error=D.error||"UUID is not valid.";return D},serialize:function(B,$){var D=B;return D.nss=(B.uuid||"").toLowerCase(),D}};Q0[O1.scheme]=O1,Q0[eQ.scheme]=eQ,Q0[D1.scheme]=D1,Q0[QW.scheme]=QW,Q0[YW.scheme]=YW,Q0[JW.scheme]=JW,Q0[XW.scheme]=XW,w.SCHEMES=Q0,w.pctEncChar=T0,w.pctDecChars=C6,w.parse=g0,w.removeDotSegments=v6,w.serialize=P0,w.resolveComponents=oQ,w.resolve=Xz,w.normalize=qz,w.equal=Gz,w.escapeComponent=zz,w.unescapeComponent=_0,Object.defineProperty(w,"__esModule",{value:!0})})});var _X=N((m7)=>{Object.defineProperty(m7,"__esModule",{value:!0});var gX=_9();gX.code='require("ajv/dist/runtime/uri").default';m7.default=gX});var nX=N((bw)=>{Object.defineProperty(bw,"__esModule",{value:!0});bw.CodeGen=bw.Name=bw.nil=bw.stringify=bw.str=bw._=bw.KeywordCxt=void 0;var dL=K5();Object.defineProperty(bw,"KeywordCxt",{enumerable:!0,get:function(){return dL.KeywordCxt}});var B1=h();Object.defineProperty(bw,"_",{enumerable:!0,get:function(){return B1._}});Object.defineProperty(bw,"str",{enumerable:!0,get:function(){return B1.str}});Object.defineProperty(bw,"stringify",{enumerable:!0,get:function(){return B1.stringify}});Object.defineProperty(bw,"nil",{enumerable:!0,get:function(){return B1.nil}});Object.defineProperty(bw,"Name",{enumerable:!0,get:function(){return B1.Name}});Object.defineProperty(bw,"CodeGen",{enumerable:!0,get:function(){return B1.CodeGen}});var nL=v9(),pX=y9(),rL=T7(),H5=h9(),sL=h(),V5=G5(),x9=q5(),c7=Qw(),xX=uX(),aL=_X(),cX=(w,Q)=>new RegExp(w,Q);cX.code="new RegExp";var tL=["removeAdditional","useDefaults","coerceTypes"],oL=new Set(["validate","serialize","parse","wrapper","root","schema","keyword","pattern","formats","validate$data","func","obj","Error"]),eL={errorDataPath:"",format:"`validateFormats: false` can be used instead.",nullable:'"nullable" keyword is supported by default.',jsonPointers:"Deprecated jsPropertySyntax can be used instead.",extendRefs:"Deprecated ignoreKeywordsWithRef can be used instead.",missingRefs:"Pass empty schema with $id that should be ignored to ajv.addSchema.",processCode:"Use option `code: {process: (code, schemaEnv: object) => string}`",sourceCode:"Use option `code: {source: true}`",strictDefaults:"It is default now, see option `strict`.",strictKeywords:"It is default now, see option `strict`.",uniqueItems:'"uniqueItems" keyword is always validated.',unknownFormats:"Disable strict mode or pass `true` to `ajv.addFormat` (or `formats` option).",cache:"Map is used as cache, schema object as key.",serialize:"Map is used as cache, schema object as key.",ajvErrors:"It is default now."},w$={ignoreKeywordsWithRef:"",jsPropertySyntax:"",unicode:'"minLength"/"maxLength" account for unicode characters by default.'},lX=200;function Q$(w){var Q,W,Z,Y,J,X,q,G,z,F,K,A,V,M,H,U,j,T,P,b,O,S,i,g,Zw;let c=w.strict,Uw=(Q=w.code)===null||Q===void 0?void 0:Q.optimize,Gw=Uw===!0||Uw===void 0?1:Uw||0,Iw=(Z=(W=w.code)===null||W===void 0?void 0:W.regExp)!==null&&Z!==void 0?Z:cX,hw=(Y=w.uriResolver)!==null&&Y!==void 0?Y:aL.default;return{strictSchema:(X=(J=w.strictSchema)!==null&&J!==void 0?J:c)!==null&&X!==void 0?X:!0,strictNumbers:(G=(q=w.strictNumbers)!==null&&q!==void 0?q:c)!==null&&G!==void 0?G:!0,strictTypes:(F=(z=w.strictTypes)!==null&&z!==void 0?z:c)!==null&&F!==void 0?F:"log",strictTuples:(A=(K=w.strictTuples)!==null&&K!==void 0?K:c)!==null&&A!==void 0?A:"log",strictRequired:(M=(V=w.strictRequired)!==null&&V!==void 0?V:c)!==null&&M!==void 0?M:!1,code:w.code?{...w.code,optimize:Gw,regExp:Iw}:{optimize:Gw,regExp:Iw},loopRequired:(H=w.loopRequired)!==null&&H!==void 0?H:lX,loopEnum:(U=w.loopEnum)!==null&&U!==void 0?U:lX,meta:(j=w.meta)!==null&&j!==void 0?j:!0,messages:(T=w.messages)!==null&&T!==void 0?T:!0,inlineRefs:(P=w.inlineRefs)!==null&&P!==void 0?P:!0,schemaId:(b=w.schemaId)!==null&&b!==void 0?b:"$id",addUsedSchema:(O=w.addUsedSchema)!==null&&O!==void 0?O:!0,validateSchema:(S=w.validateSchema)!==null&&S!==void 0?S:!0,validateFormats:(i=w.validateFormats)!==null&&i!==void 0?i:!0,unicodeRegExp:(g=w.unicodeRegExp)!==null&&g!==void 0?g:!0,int32range:(Zw=w.int32range)!==null&&Zw!==void 0?Zw:!0,uriResolver:hw}}class l9{constructor(w={}){this.schemas={},this.refs={},this.formats={},this._compilations=new Set,this._loading={},this._cache=new Map,w=this.opts={...w,...Q$(w)};let{es5:Q,lines:W}=this.opts.code;this.scope=new sL.ValueScope({scope:{},prefixes:oL,es5:Q,lines:W}),this.logger=q$(w.logger);let Z=w.validateFormats;if(w.validateFormats=!1,this.RULES=(0,rL.getRules)(),iX.call(this,eL,w,"NOT SUPPORTED"),iX.call(this,w$,w,"DEPRECATED","warn"),this._metaOpts=J$.call(this),w.formats)Z$.call(this);if(this._addVocabularies(),this._addDefaultMetaSchema(),w.keywords)Y$.call(this,w.keywords);if(typeof w.meta=="object")this.addMetaSchema(w.meta);W$.call(this),w.validateFormats=Z}_addVocabularies(){this.addKeyword("$async")}_addDefaultMetaSchema(){let{$data:w,meta:Q,schemaId:W}=this.opts,Z=xX;if(W==="id")Z={...xX},Z.id=Z.$id,delete Z.$id;if(Q&&w)this.addMetaSchema(Z,Z[W],!1)}defaultMeta(){let{meta:w,schemaId:Q}=this.opts;return this.opts.defaultMeta=typeof w=="object"?w[Q]||w:void 0}validate(w,Q){let W;if(typeof w=="string"){if(W=this.getSchema(w),!W)throw Error(`no schema with key or ref "${w}"`)}else W=this.compile(w);let Z=W(Q);if(!("$async"in W))this.errors=W.errors;return Z}compile(w,Q){let W=this._addSchema(w,Q);return W.validate||this._compileSchemaEnv(W)}compileAsync(w,Q){if(typeof this.opts.loadSchema!="function")throw Error("options.loadSchema should be a function");let{loadSchema:W}=this.opts;return Z.call(this,w,Q);async function Z(z,F){await Y.call(this,z.$schema);let K=this._addSchema(z,F);return K.validate||J.call(this,K)}async function Y(z){if(z&&!this.getSchema(z))await Z.call(this,{$ref:z},!0)}async function J(z){try{return this._compileSchemaEnv(z)}catch(F){if(!(F instanceof pX.default))throw F;return X.call(this,F),await q.call(this,F.missingSchema),J.call(this,z)}}function X({missingSchema:z,missingRef:F}){if(this.refs[z])throw Error(`AnySchema ${z} is loaded but ${F} cannot be resolved`)}async function q(z){let F=await G.call(this,z);if(!this.refs[z])await Y.call(this,F.$schema);if(!this.refs[z])this.addSchema(F,z,Q)}async function G(z){let F=this._loading[z];if(F)return F;try{return await(this._loading[z]=W(z))}finally{delete this._loading[z]}}}addSchema(w,Q,W,Z=this.opts.validateSchema){if(Array.isArray(w)){for(let J of w)this.addSchema(J,void 0,W,Z);return this}let Y;if(typeof w==="object"){let{schemaId:J}=this.opts;if(Y=w[J],Y!==void 0&&typeof Y!="string")throw Error(`schema ${J} must be string`)}return Q=(0,V5.normalizeId)(Q||Y),this._checkUnique(Q),this.schemas[Q]=this._addSchema(w,W,Q,Z,!0),this}addMetaSchema(w,Q,W=this.opts.validateSchema){return this.addSchema(w,Q,!0,W),this}validateSchema(w,Q){if(typeof w=="boolean")return!0;let W;if(W=w.$schema,W!==void 0&&typeof W!="string")throw Error("$schema must be a string");if(W=W||this.opts.defaultMeta||this.defaultMeta(),!W)return this.logger.warn("meta-schema not available"),this.errors=null,!0;let Z=this.validate(W,w);if(!Z&&Q){let Y="schema is invalid: "+this.errorsText();if(this.opts.validateSchema==="log")this.logger.error(Y);else throw Error(Y)}return Z}getSchema(w){let Q;while(typeof(Q=mX.call(this,w))=="string")w=Q;if(Q===void 0){let{schemaId:W}=this.opts,Z=new H5.SchemaEnv({schema:{},schemaId:W});if(Q=H5.resolveSchema.call(this,Z,w),!Q)return;this.refs[w]=Q}return Q.validate||this._compileSchemaEnv(Q)}removeSchema(w){if(w instanceof RegExp)return this._removeAllSchemas(this.schemas,w),this._removeAllSchemas(this.refs,w),this;switch(typeof w){case"undefined":return this._removeAllSchemas(this.schemas),this._removeAllSchemas(this.refs),this._cache.clear(),this;case"string":{let Q=mX.call(this,w);if(typeof Q=="object")this._cache.delete(Q.schema);return delete this.schemas[w],delete this.refs[w],this}case"object":{let Q=w;this._cache.delete(Q);let W=w[this.opts.schemaId];if(W)W=(0,V5.normalizeId)(W),delete this.schemas[W],delete this.refs[W];return this}default:throw Error("ajv.removeSchema: invalid parameter")}}addVocabulary(w){for(let Q of w)this.addKeyword(Q);return this}addKeyword(w,Q){let W;if(typeof w=="string"){if(W=w,typeof Q=="object")this.logger.warn("these parameters are deprecated, see docs for addKeyword"),Q.keyword=W}else if(typeof w=="object"&&Q===void 0){if(Q=w,W=Q.keyword,Array.isArray(W)&&!W.length)throw Error("addKeywords: keyword must be string or non-empty array")}else throw Error("invalid addKeywords parameters");if(z$.call(this,W,Q),!Q)return(0,c7.eachItem)(W,(Y)=>p7.call(this,Y)),this;K$.call(this,Q);let Z={...Q,type:(0,x9.getJSONTypes)(Q.type),schemaType:(0,x9.getJSONTypes)(Q.schemaType)};return(0,c7.eachItem)(W,Z.type.length===0?(Y)=>p7.call(this,Y,Z):(Y)=>Z.type.forEach((J)=>p7.call(this,Y,Z,J))),this}getKeyword(w){let Q=this.RULES.all[w];return typeof Q=="object"?Q.definition:!!Q}removeKeyword(w){let{RULES:Q}=this;delete Q.keywords[w],delete Q.all[w];for(let W of Q.rules){let Z=W.rules.findIndex((Y)=>Y.keyword===w);if(Z>=0)W.rules.splice(Z,1)}return this}addFormat(w,Q){if(typeof Q=="string")Q=new RegExp(Q);return this.formats[w]=Q,this}errorsText(w=this.errors,{separator:Q=", ",dataVar:W="data"}={}){if(!w||w.length===0)return"No errors";return w.map((Z)=>`${W}${Z.instancePath} ${Z.message}`).reduce((Z,Y)=>Z+Q+Y)}$dataMetaSchema(w,Q){let W=this.RULES.all;w=JSON.parse(JSON.stringify(w));for(let Z of Q){let Y=Z.split("/").slice(1),J=w;for(let X of Y)J=J[X];for(let X in W){let q=W[X];if(typeof q!="object")continue;let{$data:G}=q.definition,z=J[X];if(G&&z)J[X]=dX(z)}}return w}_removeAllSchemas(w,Q){for(let W in w){let Z=w[W];if(!Q||Q.test(W)){if(typeof Z=="string")delete w[W];else if(Z&&!Z.meta)this._cache.delete(Z.schema),delete w[W]}}}_addSchema(w,Q,W,Z=this.opts.validateSchema,Y=this.opts.addUsedSchema){let J,{schemaId:X}=this.opts;if(typeof w=="object")J=w[X];else if(this.opts.jtd)throw Error("schema must be object");else if(typeof w!="boolean")throw Error("schema must be object or boolean");let q=this._cache.get(w);if(q!==void 0)return q;W=(0,V5.normalizeId)(J||W);let G=V5.getSchemaRefs.call(this,w,W);if(q=new H5.SchemaEnv({schema:w,schemaId:X,meta:Q,baseId:W,localRefs:G}),this._cache.set(q.schema,q),Y&&!W.startsWith("#")){if(W)this._checkUnique(W);this.refs[W]=q}if(Z)this.validateSchema(w,!0);return q}_checkUnique(w){if(this.schemas[w]||this.refs[w])throw Error(`schema with key or id "${w}" already exists`)}_compileSchemaEnv(w){if(w.meta)this._compileMetaSchema(w);else H5.compileSchema.call(this,w);if(!w.validate)throw Error("ajv implementation error");return w.validate}_compileMetaSchema(w){let Q=this.opts;this.opts=this._metaOpts;try{H5.compileSchema.call(this,w)}finally{this.opts=Q}}}bw.default=l9;l9.ValidationError=nL.default;l9.MissingRefError=pX.default;function iX(w,Q,W,Z="error"){for(let Y in w){let J=Y;if(J in Q)this.logger[Z](`${W}: option ${Y}. ${w[J]}`)}}function mX(w){return w=(0,V5.normalizeId)(w),this.schemas[w]||this.refs[w]}function W$(){let w=this.opts.schemas;if(!w)return;if(Array.isArray(w))this.addSchema(w);else for(let Q in w)this.addSchema(w[Q],Q)}function Z$(){for(let w in this.opts.formats){let Q=this.opts.formats[w];if(Q)this.addFormat(w,Q)}}function Y$(w){if(Array.isArray(w)){this.addVocabulary(w);return}this.logger.warn("keywords option as map is deprecated, pass array");for(let Q in w){let W=w[Q];if(!W.keyword)W.keyword=Q;this.addKeyword(W)}}function J$(){let w={...this.opts};for(let Q of tL)delete w[Q];return w}var X$={log(){},warn(){},error(){}};function q$(w){if(w===!1)return X$;if(w===void 0)return console;if(w.log&&w.warn&&w.error)return w;throw Error("logger must implement log, warn and error methods")}var G$=/^[a-z_$][a-z0-9_$:-]*$/i;function z$(w,Q){let{RULES:W}=this;if((0,c7.eachItem)(w,(Z)=>{if(W.keywords[Z])throw Error(`Keyword ${Z} is already defined`);if(!G$.test(Z))throw Error(`Keyword ${Z} has invalid name`)}),!Q)return;if(Q.$data&&!(("code"in Q)||("validate"in Q)))throw Error('$data keyword must have "code" or "validate" function')}function p7(w,Q,W){var Z;let Y=Q===null||Q===void 0?void 0:Q.post;if(W&&Y)throw Error('keyword with "post" flag cannot have "type"');let{RULES:J}=this,X=Y?J.post:J.rules.find(({type:G})=>G===W);if(!X)X={type:W,rules:[]},J.rules.push(X);if(J.keywords[w]=!0,!Q)return;let q={keyword:w,definition:{...Q,type:(0,x9.getJSONTypes)(Q.type),schemaType:(0,x9.getJSONTypes)(Q.schemaType)}};if(Q.before)F$.call(this,X,q,Q.before);else X.rules.push(q);J.all[w]=q,(Z=Q.implements)===null||Z===void 0||Z.forEach((G)=>this.addKeyword(G))}function F$(w,Q,W){let Z=w.rules.findIndex((Y)=>Y.keyword===W);if(Z>=0)w.rules.splice(Z,0,Q);else w.rules.push(Q),this.logger.warn(`rule ${W} is not defined`)}function K$(w){let{metaSchema:Q}=w;if(Q===void 0)return;if(w.$data&&this.opts.$data)Q=dX(Q);w.validateSchema=this.compile(Q,!0)}var B$={$ref:"https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#"};function dX(w){return{anyOf:[w,B$]}}});var rX=N((d7)=>{Object.defineProperty(d7,"__esModule",{value:!0});var H$={keyword:"id",code(){throw Error('NOT SUPPORTED: keyword "id", use "$id" for schema ID')}};d7.default=H$});var oX=N((S6)=>{Object.defineProperty(S6,"__esModule",{value:!0});S6.callRef=S6.getValidate=void 0;var V$=y9(),sX=q0(),tw=h(),H1=r0(),aX=h9(),i9=Qw(),M$={keyword:"$ref",schemaType:"string",code(w){let{gen:Q,schema:W,it:Z}=w,{baseId:Y,schemaEnv:J,validateName:X,opts:q,self:G}=Z,{root:z}=J;if((W==="#"||W==="#/")&&Y===z.baseId)return K();let F=aX.resolveRef.call(G,z,Y,W);if(F===void 0)throw new V$.default(Z.opts.uriResolver,Y,W);if(F instanceof aX.SchemaEnv)return A(F);return V(F);function K(){if(J===z)return m9(w,X,J,J.$async);let M=Q.scopeValue("root",{ref:z});return m9(w,tw._`${M}.validate`,z,z.$async)}function A(M){let H=tX(w,M);m9(w,H,M,M.$async)}function V(M){let H=Q.scopeValue("schema",q.code.source===!0?{ref:M,code:(0,tw.stringify)(M)}:{ref:M}),U=Q.name("valid"),j=w.subschema({schema:M,dataTypes:[],schemaPath:tw.nil,topSchemaRef:H,errSchemaPath:W},U);w.mergeEvaluated(j),w.ok(U)}}};function tX(w,Q){let{gen:W}=w;return Q.validate?W.scopeValue("validate",{ref:Q.validate}):tw._`${W.scopeValue("wrapper",{ref:Q})}.validate`}S6.getValidate=tX;function m9(w,Q,W,Z){let{gen:Y,it:J}=w,{allErrors:X,schemaEnv:q,opts:G}=J,z=G.passContext?H1.default.this:tw.nil;if(Z)F();else K();function F(){if(!q.$async)throw Error("async schema referenced by sync schema");let M=Y.let("valid");Y.try(()=>{if(Y.code(tw._`await ${(0,sX.callValidateCode)(w,Q,z)}`),V(Q),!X)Y.assign(M,!0)},(H)=>{if(Y.if(tw._`!(${H} instanceof ${J.ValidationError})`,()=>Y.throw(H)),A(H),!X)Y.assign(M,!1)}),w.ok(M)}function K(){w.result((0,sX.callValidateCode)(w,Q,z),()=>V(Q),()=>A(Q))}function A(M){let H=tw._`${M}.errors`;Y.assign(H1.default.vErrors,tw._`${H1.default.vErrors} === null ? ${H} : ${H1.default.vErrors}.concat(${H})`),Y.assign(H1.default.errors,tw._`${H1.default.vErrors}.length`)}function V(M){var H;if(!J.opts.unevaluated)return;let U=(H=W===null||W===void 0?void 0:W.validate)===null||H===void 0?void 0:H.evaluated;if(J.props!==!0)if(U&&!U.dynamicProps){if(U.props!==void 0)J.props=i9.mergeEvaluated.props(Y,U.props,J.props)}else{let j=Y.var("props",tw._`${M}.evaluated.props`);J.props=i9.mergeEvaluated.props(Y,j,J.props,tw.Name)}if(J.items!==!0)if(U&&!U.dynamicItems){if(U.items!==void 0)J.items=i9.mergeEvaluated.items(Y,U.items,J.items)}else{let j=Y.var("items",tw._`${M}.evaluated.items`);J.items=i9.mergeEvaluated.items(Y,j,J.items,tw.Name)}}}S6.callRef=m9;S6.default=M$});var eX=N((n7)=>{Object.defineProperty(n7,"__esModule",{value:!0});var L$=rX(),$$=oX(),A$=["$schema","$id","$defs","$vocabulary",{keyword:"$comment"},"definitions",L$.default,$$.default];n7.default=A$});var wq=N((r7)=>{Object.defineProperty(r7,"__esModule",{value:!0});var p9=h(),H6=p9.operators,c9={maximum:{okStr:"<=",ok:H6.LTE,fail:H6.GT},minimum:{okStr:">=",ok:H6.GTE,fail:H6.LT},exclusiveMaximum:{okStr:"<",ok:H6.LT,fail:H6.GTE},exclusiveMinimum:{okStr:">",ok:H6.GT,fail:H6.LTE}},U$={message:({keyword:w,schemaCode:Q})=>p9.str`must be ${c9[w].okStr} ${Q}`,params:({keyword:w,schemaCode:Q})=>p9._`{comparison: ${c9[w].okStr}, limit: ${Q}}`},j$={keyword:Object.keys(c9),type:"number",schemaType:"number",$data:!0,error:U$,code(w){let{keyword:Q,data:W,schemaCode:Z}=w;w.fail$data(p9._`${W} ${c9[Q].fail} ${Z} || isNaN(${W})`)}};r7.default=j$});var Qq=N((s7)=>{Object.defineProperty(s7,"__esModule",{value:!0});var M5=h(),N$={message:({schemaCode:w})=>M5.str`must be multiple of ${w}`,params:({schemaCode:w})=>M5._`{multipleOf: ${w}}`},O$={keyword:"multipleOf",type:"number",schemaType:"number",$data:!0,error:N$,code(w){let{gen:Q,data:W,schemaCode:Z,it:Y}=w,J=Y.opts.multipleOfPrecision,X=Q.let("res"),q=J?M5._`Math.abs(Math.round(${X}) - ${X}) > 1e-${J}`:M5._`${X} !== parseInt(${X})`;w.fail$data(M5._`(${Z} === 0 || (${X} = ${W}/${Z}, ${q}))`)}};s7.default=O$});var Zq=N((a7)=>{Object.defineProperty(a7,"__esModule",{value:!0});function Wq(w){let Q=w.length,W=0,Z=0,Y;while(Z<Q)if(W++,Y=w.charCodeAt(Z++),Y>=55296&&Y<=56319&&Z<Q){if(Y=w.charCodeAt(Z),(Y&64512)===56320)Z++}return W}a7.default=Wq;Wq.code='require("ajv/dist/runtime/ucs2length").default'});var Yq=N((t7)=>{Object.defineProperty(t7,"__esModule",{value:!0});var E6=h(),D$=Qw(),I$=Zq(),T$={message({keyword:w,schemaCode:Q}){let W=w==="maxLength"?"more":"fewer";return E6.str`must NOT have ${W} than ${Q} characters`},params:({schemaCode:w})=>E6._`{limit: ${w}}`},P$={keyword:["maxLength","minLength"],type:"string",schemaType:"number",$data:!0,error:T$,code(w){let{keyword:Q,data:W,schemaCode:Z,it:Y}=w,J=Q==="maxLength"?E6.operators.GT:E6.operators.LT,X=Y.opts.unicode===!1?E6._`${W}.length`:E6._`${(0,D$.useFunc)(w.gen,I$.default)}(${W})`;w.fail$data(E6._`${X} ${J} ${Z}`)}};t7.default=P$});var Jq=N((o7)=>{Object.defineProperty(o7,"__esModule",{value:!0});var R$=q0(),d9=h(),b$={message:({schemaCode:w})=>d9.str`must match pattern "${w}"`,params:({schemaCode:w})=>d9._`{pattern: ${w}}`},S$={keyword:"pattern",type:"string",schemaType:"string",$data:!0,error:b$,code(w){let{data:Q,$data:W,schema:Z,schemaCode:Y,it:J}=w,X=J.opts.unicodeRegExp?"u":"",q=W?d9._`(new RegExp(${Y}, ${X}))`:(0,R$.usePattern)(w,Z);w.fail$data(d9._`!${q}.test(${Q})`)}};o7.default=S$});var Xq=N((e7)=>{Object.defineProperty(e7,"__esModule",{value:!0});var L5=h(),E$={message({keyword:w,schemaCode:Q}){let W=w==="maxProperties"?"more":"fewer";return L5.str`must NOT have ${W} than ${Q} properties`},params:({schemaCode:w})=>L5._`{limit: ${w}}`},k$={keyword:["maxProperties","minProperties"],type:"object",schemaType:"number",$data:!0,error:E$,code(w){let{keyword:Q,data:W,schemaCode:Z}=w,Y=Q==="maxProperties"?L5.operators.GT:L5.operators.LT;w.fail$data(L5._`Object.keys(${W}).length ${Y} ${Z}`)}};e7.default=k$});var qq=N((wQ)=>{Object.defineProperty(wQ,"__esModule",{value:!0});var $5=q0(),A5=h(),f$=Qw(),C$={message:({params:{missingProperty:w}})=>A5.str`must have required property '${w}'`,params:({params:{missingProperty:w}})=>A5._`{missingProperty: ${w}}`},v$={keyword:"required",type:"object",schemaType:"array",$data:!0,error:C$,code(w){let{gen:Q,schema:W,schemaCode:Z,data:Y,$data:J,it:X}=w,{opts:q}=X;if(!J&&W.length===0)return;let G=W.length>=q.loopRequired;if(X.allErrors)z();else F();if(q.strictRequired){let V=w.parentSchema.properties,{definedProperties:M}=w.it;for(let H of W)if((V===null||V===void 0?void 0:V[H])===void 0&&!M.has(H)){let U=X.schemaEnv.baseId+X.errSchemaPath,j=`required property "${H}" is not defined at "${U}" (strictRequired)`;(0,f$.checkStrictMode)(X,j,X.opts.strictRequired)}}function z(){if(G||J)w.block$data(A5.nil,K);else for(let V of W)(0,$5.checkReportMissingProp)(w,V)}function F(){let V=Q.let("missing");if(G||J){let M=Q.let("valid",!0);w.block$data(M,()=>A(V,M)),w.ok(M)}else Q.if((0,$5.checkMissingProp)(w,W,V)),(0,$5.reportMissingProp)(w,V),Q.else()}function K(){Q.forOf("prop",Z,(V)=>{w.setParams({missingProperty:V}),Q.if((0,$5.noPropertyInData)(Q,Y,V,q.ownProperties),()=>w.error())})}function A(V,M){w.setParams({missingProperty:V}),Q.forOf(V,Z,()=>{Q.assign(M,(0,$5.propertyInData)(Q,Y,V,q.ownProperties)),Q.if((0,A5.not)(M),()=>{w.error(),Q.break()})},A5.nil)}}};wQ.default=v$});var Gq=N((QQ)=>{Object.defineProperty(QQ,"__esModule",{value:!0});var U5=h(),y$={message({keyword:w,schemaCode:Q}){let W=w==="maxItems"?"more":"fewer";return U5.str`must NOT have ${W} than ${Q} items`},params:({schemaCode:w})=>U5._`{limit: ${w}}`},u$={keyword:["maxItems","minItems"],type:"array",schemaType:"number",$data:!0,error:y$,code(w){let{keyword:Q,data:W,schemaCode:Z}=w,Y=Q==="maxItems"?U5.operators.GT:U5.operators.LT;w.fail$data(U5._`${W}.length ${Y} ${Z}`)}};QQ.default=u$});var n9=N((WQ)=>{Object.defineProperty(WQ,"__esModule",{value:!0});var zq=u1();zq.code='require("ajv/dist/runtime/equal").default';WQ.default=zq});var Fq=N((YQ)=>{Object.defineProperty(YQ,"__esModule",{value:!0});var ZQ=q5(),Sw=h(),h$=Qw(),g$=n9(),_$={message:({params:{i:w,j:Q}})=>Sw.str`must NOT have duplicate items (items ## ${Q} and ${w} are identical)`,params:({params:{i:w,j:Q}})=>Sw._`{i: ${w}, j: ${Q}}`},x$={keyword:"uniqueItems",type:"array",schemaType:"boolean",$data:!0,error:_$,code(w){let{gen:Q,data:W,$data:Z,schema:Y,parentSchema:J,schemaCode:X,it:q}=w;if(!Z&&!Y)return;let G=Q.let("valid"),z=J.items?(0,ZQ.getSchemaTypes)(J.items):[];w.block$data(G,F,Sw._`${X} === false`),w.ok(G);function F(){let M=Q.let("i",Sw._`${W}.length`),H=Q.let("j");w.setParams({i:M,j:H}),Q.assign(G,!0),Q.if(Sw._`${M} > 1`,()=>(K()?A:V)(M,H))}function K(){return z.length>0&&!z.some((M)=>M==="object"||M==="array")}function A(M,H){let U=Q.name("item"),j=(0,ZQ.checkDataTypes)(z,U,q.opts.strictNumbers,ZQ.DataType.Wrong),T=Q.const("indices",Sw._`{}`);Q.for(Sw._`;${M}--;`,()=>{if(Q.let(U,Sw._`${W}[${M}]`),Q.if(j,Sw._`continue`),z.length>1)Q.if(Sw._`typeof ${U} == "string"`,Sw._`${U} += "_"`);Q.if(Sw._`typeof ${T}[${U}] == "number"`,()=>{Q.assign(H,Sw._`${T}[${U}]`),w.error(),Q.assign(G,!1).break()}).code(Sw._`${T}[${U}] = ${M}`)})}function V(M,H){let U=(0,h$.useFunc)(Q,g$.default),j=Q.name("outer");Q.label(j).for(Sw._`;${M}--;`,()=>Q.for(Sw._`${H} = ${M}; ${H}--;`,()=>Q.if(Sw._`${U}(${W}[${M}], ${W}[${H}])`,()=>{w.error(),Q.assign(G,!1).break(j)})))}}};YQ.default=x$});var Kq=N((XQ)=>{Object.defineProperty(XQ,"__esModule",{value:!0});var JQ=h(),l$=Qw(),i$=n9(),m$={message:"must be equal to constant",params:({schemaCode:w})=>JQ._`{allowedValue: ${w}}`},p$={keyword:"const",$data:!0,error:m$,code(w){let{gen:Q,data:W,$data:Z,schemaCode:Y,schema:J}=w;if(Z||J&&typeof J=="object")w.fail$data(JQ._`!${(0,l$.useFunc)(Q,i$.default)}(${W}, ${Y})`);else w.fail(JQ._`${J} !== ${W}`)}};XQ.default=p$});var Bq=N((qQ)=>{Object.defineProperty(qQ,"__esModule",{value:!0});var j5=h(),c$=Qw(),d$=n9(),n$={message:"must be equal to one of the allowed values",params:({schemaCode:w})=>j5._`{allowedValues: ${w}}`},r$={keyword:"enum",schemaType:"array",$data:!0,error:n$,code(w){let{gen:Q,data:W,$data:Z,schema:Y,schemaCode:J,it:X}=w;if(!Z&&Y.length===0)throw Error("enum must have non-empty array");let q=Y.length>=X.opts.loopEnum,G,z=()=>G!==null&&G!==void 0?G:G=(0,c$.useFunc)(Q,d$.default),F;if(q||Z)F=Q.let("valid"),w.block$data(F,K);else{if(!Array.isArray(Y))throw Error("ajv implementation error");let V=Q.const("vSchema",J);F=(0,j5.or)(...Y.map((M,H)=>A(V,H)))}w.pass(F);function K(){Q.assign(F,!1),Q.forOf("v",J,(V)=>Q.if(j5._`${z()}(${W}, ${V})`,()=>Q.assign(F,!0).break()))}function A(V,M){let H=Y[M];return typeof H==="object"&&H!==null?j5._`${z()}(${W}, ${V}[${M}])`:j5._`${W} === ${H}`}}};qQ.default=r$});var Hq=N((GQ)=>{Object.defineProperty(GQ,"__esModule",{value:!0});var s$=wq(),a$=Qq(),t$=Yq(),o$=Jq(),e$=Xq(),wA=qq(),QA=Gq(),WA=Fq(),ZA=Kq(),YA=Bq(),JA=[s$.default,a$.default,t$.default,o$.default,e$.default,wA.default,QA.default,WA.default,{keyword:"type",schemaType:["string","array"]},{keyword:"nullable",schemaType:"boolean"},ZA.default,YA.default];GQ.default=JA});var FQ=N((N5)=>{Object.defineProperty(N5,"__esModule",{value:!0});N5.validateAdditionalItems=void 0;var k6=h(),zQ=Qw(),XA={message:({params:{len:w}})=>k6.str`must NOT have more than ${w} items`,params:({params:{len:w}})=>k6._`{limit: ${w}}`},qA={keyword:"additionalItems",type:"array",schemaType:["boolean","object"],before:"uniqueItems",error:XA,code(w){let{parentSchema:Q,it:W}=w,{items:Z}=Q;if(!Array.isArray(Z)){(0,zQ.checkStrictMode)(W,'"additionalItems" is ignored when "items" is not an array of schemas');return}Vq(w,Z)}};function Vq(w,Q){let{gen:W,schema:Z,data:Y,keyword:J,it:X}=w;X.items=!0;let q=W.const("len",k6._`${Y}.length`);if(Z===!1)w.setParams({len:Q.length}),w.pass(k6._`${q} <= ${Q.length}`);else if(typeof Z=="object"&&!(0,zQ.alwaysValidSchema)(X,Z)){let z=W.var("valid",k6._`${q} <= ${Q.length}`);W.if((0,k6.not)(z),()=>G(z)),w.ok(z)}function G(z){W.forRange("i",Q.length,q,(F)=>{if(w.subschema({keyword:J,dataProp:F,dataPropType:zQ.Type.Num},z),!X.allErrors)W.if((0,k6.not)(z),()=>W.break())})}}N5.validateAdditionalItems=Vq;N5.default=qA});var KQ=N((O5)=>{Object.defineProperty(O5,"__esModule",{value:!0});O5.validateTuple=void 0;var Mq=h(),r9=Qw(),GA=q0(),zA={keyword:"items",type:"array",schemaType:["object","array","boolean"],before:"uniqueItems",code(w){let{schema:Q,it:W}=w;if(Array.isArray(Q))return Lq(w,"additionalItems",Q);if(W.items=!0,(0,r9.alwaysValidSchema)(W,Q))return;w.ok((0,GA.validateArray)(w))}};function Lq(w,Q,W=w.schema){let{gen:Z,parentSchema:Y,data:J,keyword:X,it:q}=w;if(F(Y),q.opts.unevaluated&&W.length&&q.items!==!0)q.items=r9.mergeEvaluated.items(Z,W.length,q.items);let G=Z.name("valid"),z=Z.const("len",Mq._`${J}.length`);W.forEach((K,A)=>{if((0,r9.alwaysValidSchema)(q,K))return;Z.if(Mq._`${z} > ${A}`,()=>w.subschema({keyword:X,schemaProp:A,dataProp:A},G)),w.ok(G)});function F(K){let{opts:A,errSchemaPath:V}=q,M=W.length,H=M===K.minItems&&(M===K.maxItems||K[Q]===!1);if(A.strictTuples&&!H){let U=`"${X}" is ${M}-tuple, but minItems or maxItems/${Q} are not specified or different at path "${V}"`;(0,r9.checkStrictMode)(q,U,A.strictTuples)}}}O5.validateTuple=Lq;O5.default=zA});var $q=N((BQ)=>{Object.defineProperty(BQ,"__esModule",{value:!0});var FA=KQ(),KA={keyword:"prefixItems",type:"array",schemaType:["array"],before:"uniqueItems",code:(w)=>(0,FA.validateTuple)(w,"items")};BQ.default=KA});var Uq=N((HQ)=>{Object.defineProperty(HQ,"__esModule",{value:!0});var Aq=h(),BA=Qw(),HA=q0(),VA=FQ(),MA={message:({params:{len:w}})=>Aq.str`must NOT have more than ${w} items`,params:({params:{len:w}})=>Aq._`{limit: ${w}}`},LA={keyword:"items",type:"array",schemaType:["object","boolean"],before:"uniqueItems",error:MA,code(w){let{schema:Q,parentSchema:W,it:Z}=w,{prefixItems:Y}=W;if(Z.items=!0,(0,BA.alwaysValidSchema)(Z,Q))return;if(Y)(0,VA.validateAdditionalItems)(w,Y);else w.ok((0,HA.validateArray)(w))}};HQ.default=LA});var jq=N((VQ)=>{Object.defineProperty(VQ,"__esModule",{value:!0});var z0=h(),s9=Qw(),$A={message:({params:{min:w,max:Q}})=>Q===void 0?z0.str`must contain at least ${w} valid item(s)`:z0.str`must contain at least ${w} and no more than ${Q} valid item(s)`,params:({params:{min:w,max:Q}})=>Q===void 0?z0._`{minContains: ${w}}`:z0._`{minContains: ${w}, maxContains: ${Q}}`},AA={keyword:"contains",type:"array",schemaType:["object","boolean"],before:"uniqueItems",trackErrors:!0,error:$A,code(w){let{gen:Q,schema:W,parentSchema:Z,data:Y,it:J}=w,X,q,{minContains:G,maxContains:z}=Z;if(J.opts.next)X=G===void 0?1:G,q=z;else X=1;let F=Q.const("len",z0._`${Y}.length`);if(w.setParams({min:X,max:q}),q===void 0&&X===0){(0,s9.checkStrictMode)(J,'"minContains" == 0 without "maxContains": "contains" keyword ignored');return}if(q!==void 0&&X>q){(0,s9.checkStrictMode)(J,'"minContains" > "maxContains" is always invalid'),w.fail();return}if((0,s9.alwaysValidSchema)(J,W)){let H=z0._`${F} >= ${X}`;if(q!==void 0)H=z0._`${H} && ${F} <= ${q}`;w.pass(H);return}J.items=!0;let K=Q.name("valid");if(q===void 0&&X===1)V(K,()=>Q.if(K,()=>Q.break()));else if(X===0){if(Q.let(K,!0),q!==void 0)Q.if(z0._`${Y}.length > 0`,A)}else Q.let(K,!1),A();w.result(K,()=>w.reset());function A(){let H=Q.name("_valid"),U=Q.let("count",0);V(H,()=>Q.if(H,()=>M(U)))}function V(H,U){Q.forRange("i",0,F,(j)=>{w.subschema({keyword:"contains",dataProp:j,dataPropType:s9.Type.Num,compositeRule:!0},H),U()})}function M(H){if(Q.code(z0._`${H}++`),q===void 0)Q.if(z0._`${H} >= ${X}`,()=>Q.assign(K,!0).break());else if(Q.if(z0._`${H} > ${q}`,()=>Q.assign(K,!1).break()),X===1)Q.assign(K,!0);else Q.if(z0._`${H} >= ${X}`,()=>Q.assign(K,!0))}}};VQ.default=AA});var Dq=N((u0)=>{Object.defineProperty(u0,"__esModule",{value:!0});u0.validateSchemaDeps=u0.validatePropertyDeps=u0.error=void 0;var MQ=h(),UA=Qw(),D5=q0();u0.error={message:({params:{property:w,depsCount:Q,deps:W}})=>{let Z=Q===1?"property":"properties";return MQ.str`must have ${Z} ${W} when property ${w} is present`},params:({params:{property:w,depsCount:Q,deps:W,missingProperty:Z}})=>MQ._`{property: ${w},
|
|
13
|
+
missingProperty: ${Z},
|
|
14
|
+
depsCount: ${Q},
|
|
15
|
+
deps: ${W}}`};var jA={keyword:"dependencies",type:"object",schemaType:"object",error:u0.error,code(w){let[Q,W]=NA(w);Nq(w,Q),Oq(w,W)}};function NA({schema:w}){let Q={},W={};for(let Z in w){if(Z==="__proto__")continue;let Y=Array.isArray(w[Z])?Q:W;Y[Z]=w[Z]}return[Q,W]}function Nq(w,Q=w.schema){let{gen:W,data:Z,it:Y}=w;if(Object.keys(Q).length===0)return;let J=W.let("missing");for(let X in Q){let q=Q[X];if(q.length===0)continue;let G=(0,D5.propertyInData)(W,Z,X,Y.opts.ownProperties);if(w.setParams({property:X,depsCount:q.length,deps:q.join(", ")}),Y.allErrors)W.if(G,()=>{for(let z of q)(0,D5.checkReportMissingProp)(w,z)});else W.if(MQ._`${G} && (${(0,D5.checkMissingProp)(w,q,J)})`),(0,D5.reportMissingProp)(w,J),W.else()}}u0.validatePropertyDeps=Nq;function Oq(w,Q=w.schema){let{gen:W,data:Z,keyword:Y,it:J}=w,X=W.name("valid");for(let q in Q){if((0,UA.alwaysValidSchema)(J,Q[q]))continue;W.if((0,D5.propertyInData)(W,Z,q,J.opts.ownProperties),()=>{let G=w.subschema({keyword:Y,schemaProp:q},X);w.mergeValidEvaluated(G,X)},()=>W.var(X,!0)),w.ok(X)}}u0.validateSchemaDeps=Oq;u0.default=jA});var Tq=N((LQ)=>{Object.defineProperty(LQ,"__esModule",{value:!0});var Iq=h(),OA=Qw(),DA={message:"property name must be valid",params:({params:w})=>Iq._`{propertyName: ${w.propertyName}}`},IA={keyword:"propertyNames",type:"object",schemaType:["object","boolean"],error:DA,code(w){let{gen:Q,schema:W,data:Z,it:Y}=w;if((0,OA.alwaysValidSchema)(Y,W))return;let J=Q.name("valid");Q.forIn("key",Z,(X)=>{w.setParams({propertyName:X}),w.subschema({keyword:"propertyNames",data:X,dataTypes:["string"],propertyName:X,compositeRule:!0},J),Q.if((0,Iq.not)(J),()=>{if(w.error(!0),!Y.allErrors)Q.break()})}),w.ok(J)}};LQ.default=IA});var AQ=N(($Q)=>{Object.defineProperty($Q,"__esModule",{value:!0});var a9=q0(),N0=h(),TA=r0(),t9=Qw(),PA={message:"must NOT have additional properties",params:({params:w})=>N0._`{additionalProperty: ${w.additionalProperty}}`},RA={keyword:"additionalProperties",type:["object"],schemaType:["boolean","object"],allowUndefined:!0,trackErrors:!0,error:PA,code(w){let{gen:Q,schema:W,parentSchema:Z,data:Y,errsCount:J,it:X}=w;if(!J)throw Error("ajv implementation error");let{allErrors:q,opts:G}=X;if(X.props=!0,G.removeAdditional!=="all"&&(0,t9.alwaysValidSchema)(X,W))return;let z=(0,a9.allSchemaProperties)(Z.properties),F=(0,a9.allSchemaProperties)(Z.patternProperties);K(),w.ok(N0._`${J} === ${TA.default.errors}`);function K(){Q.forIn("key",Y,(U)=>{if(!z.length&&!F.length)M(U);else Q.if(A(U),()=>M(U))})}function A(U){let j;if(z.length>8){let T=(0,t9.schemaRefOrVal)(X,Z.properties,"properties");j=(0,a9.isOwnProperty)(Q,T,U)}else if(z.length)j=(0,N0.or)(...z.map((T)=>N0._`${U} === ${T}`));else j=N0.nil;if(F.length)j=(0,N0.or)(j,...F.map((T)=>N0._`${(0,a9.usePattern)(w,T)}.test(${U})`));return(0,N0.not)(j)}function V(U){Q.code(N0._`delete ${Y}[${U}]`)}function M(U){if(G.removeAdditional==="all"||G.removeAdditional&&W===!1){V(U);return}if(W===!1){if(w.setParams({additionalProperty:U}),w.error(),!q)Q.break();return}if(typeof W=="object"&&!(0,t9.alwaysValidSchema)(X,W)){let j=Q.name("valid");if(G.removeAdditional==="failing")H(U,j,!1),Q.if((0,N0.not)(j),()=>{w.reset(),V(U)});else if(H(U,j),!q)Q.if((0,N0.not)(j),()=>Q.break())}}function H(U,j,T){let P={keyword:"additionalProperties",dataProp:U,dataPropType:t9.Type.Str};if(T===!1)Object.assign(P,{compositeRule:!0,createErrors:!1,allErrors:!1});w.subschema(P,j)}}};$Q.default=RA});var bq=N((jQ)=>{Object.defineProperty(jQ,"__esModule",{value:!0});var bA=K5(),Pq=q0(),UQ=Qw(),Rq=AQ(),SA={keyword:"properties",type:"object",schemaType:"object",code(w){let{gen:Q,schema:W,parentSchema:Z,data:Y,it:J}=w;if(J.opts.removeAdditional==="all"&&Z.additionalProperties===void 0)Rq.default.code(new bA.KeywordCxt(J,Rq.default,"additionalProperties"));let X=(0,Pq.allSchemaProperties)(W);for(let K of X)J.definedProperties.add(K);if(J.opts.unevaluated&&X.length&&J.props!==!0)J.props=UQ.mergeEvaluated.props(Q,(0,UQ.toHash)(X),J.props);let q=X.filter((K)=>!(0,UQ.alwaysValidSchema)(J,W[K]));if(q.length===0)return;let G=Q.name("valid");for(let K of q){if(z(K))F(K);else{if(Q.if((0,Pq.propertyInData)(Q,Y,K,J.opts.ownProperties)),F(K),!J.allErrors)Q.else().var(G,!0);Q.endIf()}w.it.definedProperties.add(K),w.ok(G)}function z(K){return J.opts.useDefaults&&!J.compositeRule&&W[K].default!==void 0}function F(K){w.subschema({keyword:"properties",schemaProp:K,dataProp:K},G)}}};jQ.default=SA});var fq=N((NQ)=>{Object.defineProperty(NQ,"__esModule",{value:!0});var Sq=q0(),o9=h(),Eq=Qw(),kq=Qw(),EA={keyword:"patternProperties",type:"object",schemaType:"object",code(w){let{gen:Q,schema:W,data:Z,parentSchema:Y,it:J}=w,{opts:X}=J,q=(0,Sq.allSchemaProperties)(W),G=q.filter((H)=>(0,Eq.alwaysValidSchema)(J,W[H]));if(q.length===0||G.length===q.length&&(!J.opts.unevaluated||J.props===!0))return;let z=X.strictSchema&&!X.allowMatchingProperties&&Y.properties,F=Q.name("valid");if(J.props!==!0&&!(J.props instanceof o9.Name))J.props=(0,kq.evaluatedPropsToName)(Q,J.props);let{props:K}=J;A();function A(){for(let H of q){if(z)V(H);if(J.allErrors)M(H);else Q.var(F,!0),M(H),Q.if(F)}}function V(H){for(let U in z)if(new RegExp(H).test(U))(0,Eq.checkStrictMode)(J,`property ${U} matches pattern ${H} (use allowMatchingProperties)`)}function M(H){Q.forIn("key",Z,(U)=>{Q.if(o9._`${(0,Sq.usePattern)(w,H)}.test(${U})`,()=>{let j=G.includes(H);if(!j)w.subschema({keyword:"patternProperties",schemaProp:H,dataProp:U,dataPropType:kq.Type.Str},F);if(J.opts.unevaluated&&K!==!0)Q.assign(o9._`${K}[${U}]`,!0);else if(!j&&!J.allErrors)Q.if((0,o9.not)(F),()=>Q.break())})})}}};NQ.default=EA});var Cq=N((OQ)=>{Object.defineProperty(OQ,"__esModule",{value:!0});var kA=Qw(),fA={keyword:"not",schemaType:["object","boolean"],trackErrors:!0,code(w){let{gen:Q,schema:W,it:Z}=w;if((0,kA.alwaysValidSchema)(Z,W)){w.fail();return}let Y=Q.name("valid");w.subschema({keyword:"not",compositeRule:!0,createErrors:!1,allErrors:!1},Y),w.failResult(Y,()=>w.reset(),()=>w.error())},error:{message:"must NOT be valid"}};OQ.default=fA});var vq=N((DQ)=>{Object.defineProperty(DQ,"__esModule",{value:!0});var CA=q0(),vA={keyword:"anyOf",schemaType:"array",trackErrors:!0,code:CA.validateUnion,error:{message:"must match a schema in anyOf"}};DQ.default=vA});var yq=N((IQ)=>{Object.defineProperty(IQ,"__esModule",{value:!0});var e9=h(),yA=Qw(),uA={message:"must match exactly one schema in oneOf",params:({params:w})=>e9._`{passingSchemas: ${w.passing}}`},hA={keyword:"oneOf",schemaType:"array",trackErrors:!0,error:uA,code(w){let{gen:Q,schema:W,parentSchema:Z,it:Y}=w;if(!Array.isArray(W))throw Error("ajv implementation error");if(Y.opts.discriminator&&Z.discriminator)return;let J=W,X=Q.let("valid",!1),q=Q.let("passing",null),G=Q.name("_valid");w.setParams({passing:q}),Q.block(z),w.result(X,()=>w.reset(),()=>w.error(!0));function z(){J.forEach((F,K)=>{let A;if((0,yA.alwaysValidSchema)(Y,F))Q.var(G,!0);else A=w.subschema({keyword:"oneOf",schemaProp:K,compositeRule:!0},G);if(K>0)Q.if(e9._`${G} && ${X}`).assign(X,!1).assign(q,e9._`[${q}, ${K}]`).else();Q.if(G,()=>{if(Q.assign(X,!0),Q.assign(q,K),A)w.mergeEvaluated(A,e9.Name)})})}}};IQ.default=hA});var uq=N((TQ)=>{Object.defineProperty(TQ,"__esModule",{value:!0});var gA=Qw(),_A={keyword:"allOf",schemaType:"array",code(w){let{gen:Q,schema:W,it:Z}=w;if(!Array.isArray(W))throw Error("ajv implementation error");let Y=Q.name("valid");W.forEach((J,X)=>{if((0,gA.alwaysValidSchema)(Z,J))return;let q=w.subschema({keyword:"allOf",schemaProp:X},Y);w.ok(Y),w.mergeEvaluated(q)})}};TQ.default=_A});var _q=N((PQ)=>{Object.defineProperty(PQ,"__esModule",{value:!0});var w8=h(),gq=Qw(),xA={message:({params:w})=>w8.str`must match "${w.ifClause}" schema`,params:({params:w})=>w8._`{failingKeyword: ${w.ifClause}}`},lA={keyword:"if",schemaType:["object","boolean"],trackErrors:!0,error:xA,code(w){let{gen:Q,parentSchema:W,it:Z}=w;if(W.then===void 0&&W.else===void 0)(0,gq.checkStrictMode)(Z,'"if" without "then" and "else" is ignored');let Y=hq(Z,"then"),J=hq(Z,"else");if(!Y&&!J)return;let X=Q.let("valid",!0),q=Q.name("_valid");if(G(),w.reset(),Y&&J){let F=Q.let("ifClause");w.setParams({ifClause:F}),Q.if(q,z("then",F),z("else",F))}else if(Y)Q.if(q,z("then"));else Q.if((0,w8.not)(q),z("else"));w.pass(X,()=>w.error(!0));function G(){let F=w.subschema({keyword:"if",compositeRule:!0,createErrors:!1,allErrors:!1},q);w.mergeEvaluated(F)}function z(F,K){return()=>{let A=w.subschema({keyword:F},q);if(Q.assign(X,q),w.mergeValidEvaluated(A,X),K)Q.assign(K,w8._`${F}`);else w.setParams({ifClause:F})}}}};function hq(w,Q){let W=w.schema[Q];return W!==void 0&&!(0,gq.alwaysValidSchema)(w,W)}PQ.default=lA});var xq=N((RQ)=>{Object.defineProperty(RQ,"__esModule",{value:!0});var iA=Qw(),mA={keyword:["then","else"],schemaType:["object","boolean"],code({keyword:w,parentSchema:Q,it:W}){if(Q.if===void 0)(0,iA.checkStrictMode)(W,`"${w}" without "if" is ignored`)}};RQ.default=mA});var lq=N((bQ)=>{Object.defineProperty(bQ,"__esModule",{value:!0});var pA=FQ(),cA=$q(),dA=KQ(),nA=Uq(),rA=jq(),sA=Dq(),aA=Tq(),tA=AQ(),oA=bq(),eA=fq(),wU=Cq(),QU=vq(),WU=yq(),ZU=uq(),YU=_q(),JU=xq();function XU(w=!1){let Q=[wU.default,QU.default,WU.default,ZU.default,YU.default,JU.default,aA.default,tA.default,sA.default,oA.default,eA.default];if(w)Q.push(cA.default,nA.default);else Q.push(pA.default,dA.default);return Q.push(rA.default),Q}bQ.default=XU});var iq=N((SQ)=>{Object.defineProperty(SQ,"__esModule",{value:!0});var Nw=h(),qU={message:({schemaCode:w})=>Nw.str`must match format "${w}"`,params:({schemaCode:w})=>Nw._`{format: ${w}}`},GU={keyword:"format",type:["number","string"],schemaType:"string",$data:!0,error:qU,code(w,Q){let{gen:W,data:Z,$data:Y,schema:J,schemaCode:X,it:q}=w,{opts:G,errSchemaPath:z,schemaEnv:F,self:K}=q;if(!G.validateFormats)return;if(Y)A();else V();function A(){let M=W.scopeValue("formats",{ref:K.formats,code:G.code.formats}),H=W.const("fDef",Nw._`${M}[${X}]`),U=W.let("fType"),j=W.let("format");W.if(Nw._`typeof ${H} == "object" && !(${H} instanceof RegExp)`,()=>W.assign(U,Nw._`${H}.type || "string"`).assign(j,Nw._`${H}.validate`),()=>W.assign(U,Nw._`"string"`).assign(j,H)),w.fail$data((0,Nw.or)(T(),P()));function T(){if(G.strictSchema===!1)return Nw.nil;return Nw._`${X} && !${j}`}function P(){let b=F.$async?Nw._`(${H}.async ? await ${j}(${Z}) : ${j}(${Z}))`:Nw._`${j}(${Z})`,O=Nw._`(typeof ${j} == "function" ? ${b} : ${j}.test(${Z}))`;return Nw._`${j} && ${j} !== true && ${U} === ${Q} && !${O}`}}function V(){let M=K.formats[J];if(!M){T();return}if(M===!0)return;let[H,U,j]=P(M);if(H===Q)w.pass(b());function T(){if(G.strictSchema===!1){K.logger.warn(O());return}throw Error(O());function O(){return`unknown format "${J}" ignored in schema at path "${z}"`}}function P(O){let S=O instanceof RegExp?(0,Nw.regexpCode)(O):G.code.formats?Nw._`${G.code.formats}${(0,Nw.getProperty)(J)}`:void 0,i=W.scopeValue("formats",{key:J,ref:O,code:S});if(typeof O=="object"&&!(O instanceof RegExp))return[O.type||"string",O.validate,Nw._`${i}.validate`];return["string",O,i]}function b(){if(typeof M=="object"&&!(M instanceof RegExp)&&M.async){if(!F.$async)throw Error("async format in sync schema");return Nw._`await ${j}(${Z})`}return typeof U=="function"?Nw._`${j}(${Z})`:Nw._`${j}.test(${Z})`}}}};SQ.default=GU});var mq=N((EQ)=>{Object.defineProperty(EQ,"__esModule",{value:!0});var zU=iq(),FU=[zU.default];EQ.default=FU});var pq=N((V1)=>{Object.defineProperty(V1,"__esModule",{value:!0});V1.contentVocabulary=V1.metadataVocabulary=void 0;V1.metadataVocabulary=["title","description","default","deprecated","readOnly","writeOnly","examples"];V1.contentVocabulary=["contentMediaType","contentEncoding","contentSchema"]});var dq=N((kQ)=>{Object.defineProperty(kQ,"__esModule",{value:!0});var KU=eX(),BU=Hq(),HU=lq(),VU=mq(),cq=pq(),MU=[KU.default,BU.default,(0,HU.default)(),VU.default,cq.metadataVocabulary,cq.contentVocabulary];kQ.default=MU});var nq=N((I5)=>{Object.defineProperty(I5,"__esModule",{value:!0});I5.DiscrError=void 0;var LU;(function(w){w.Tag="tag",w.Mapping="mapping"})(LU=I5.DiscrError||(I5.DiscrError={}))});var sq=N((CQ)=>{Object.defineProperty(CQ,"__esModule",{value:!0});var M1=h(),fQ=nq(),rq=h9(),$U=Qw(),AU={message:({params:{discrError:w,tagName:Q}})=>w===fQ.DiscrError.Tag?`tag "${Q}" must be string`:`value of tag "${Q}" must be in oneOf`,params:({params:{discrError:w,tag:Q,tagName:W}})=>M1._`{error: ${w}, tag: ${W}, tagValue: ${Q}}`},UU={keyword:"discriminator",type:"object",schemaType:"object",error:AU,code(w){let{gen:Q,data:W,schema:Z,parentSchema:Y,it:J}=w,{oneOf:X}=Y;if(!J.opts.discriminator)throw Error("discriminator: requires discriminator option");let q=Z.propertyName;if(typeof q!="string")throw Error("discriminator: requires propertyName");if(Z.mapping)throw Error("discriminator: mapping is not supported");if(!X)throw Error("discriminator: requires oneOf keyword");let G=Q.let("valid",!1),z=Q.const("tag",M1._`${W}${(0,M1.getProperty)(q)}`);Q.if(M1._`typeof ${z} == "string"`,()=>F(),()=>w.error(!1,{discrError:fQ.DiscrError.Tag,tag:z,tagName:q})),w.ok(G);function F(){let V=A();Q.if(!1);for(let M in V)Q.elseIf(M1._`${z} === ${M}`),Q.assign(G,K(V[M]));Q.else(),w.error(!1,{discrError:fQ.DiscrError.Mapping,tag:z,tagName:q}),Q.endIf()}function K(V){let M=Q.name("valid"),H=w.subschema({keyword:"oneOf",schemaProp:V},M);return w.mergeEvaluated(H,M1.Name),M}function A(){var V;let M={},H=j(Y),U=!0;for(let b=0;b<X.length;b++){let O=X[b];if((O===null||O===void 0?void 0:O.$ref)&&!(0,$U.schemaHasRulesButRef)(O,J.self.RULES)){if(O=rq.resolveRef.call(J.self,J.schemaEnv.root,J.baseId,O===null||O===void 0?void 0:O.$ref),O instanceof rq.SchemaEnv)O=O.schema}let S=(V=O===null||O===void 0?void 0:O.properties)===null||V===void 0?void 0:V[q];if(typeof S!="object")throw Error(`discriminator: oneOf subschemas (or referenced schemas) must have "properties/${q}"`);U=U&&(H||j(O)),T(S,b)}if(!U)throw Error(`discriminator: "${q}" must be required`);return M;function j({required:b}){return Array.isArray(b)&&b.includes(q)}function T(b,O){if(b.const)P(b.const,O);else if(b.enum)for(let S of b.enum)P(S,O);else throw Error(`discriminator: "properties/${q}" must have "const" or "enum"`)}function P(b,O){if(typeof b!="string"||b in M)throw Error(`discriminator: "${q}" values must be unique strings`);M[b]=O}}}};CQ.default=UU});var aq=N((GD,jU)=>{jU.exports={$schema:"http://json-schema.org/draft-07/schema#",$id:"http://json-schema.org/draft-07/schema#",title:"Core schema meta-schema",definitions:{schemaArray:{type:"array",minItems:1,items:{$ref:"#"}},nonNegativeInteger:{type:"integer",minimum:0},nonNegativeIntegerDefault0:{allOf:[{$ref:"#/definitions/nonNegativeInteger"},{default:0}]},simpleTypes:{enum:["array","boolean","integer","null","number","object","string"]},stringArray:{type:"array",items:{type:"string"},uniqueItems:!0,default:[]}},type:["object","boolean"],properties:{$id:{type:"string",format:"uri-reference"},$schema:{type:"string",format:"uri"},$ref:{type:"string",format:"uri-reference"},$comment:{type:"string"},title:{type:"string"},description:{type:"string"},default:!0,readOnly:{type:"boolean",default:!1},examples:{type:"array",items:!0},multipleOf:{type:"number",exclusiveMinimum:0},maximum:{type:"number"},exclusiveMaximum:{type:"number"},minimum:{type:"number"},exclusiveMinimum:{type:"number"},maxLength:{$ref:"#/definitions/nonNegativeInteger"},minLength:{$ref:"#/definitions/nonNegativeIntegerDefault0"},pattern:{type:"string",format:"regex"},additionalItems:{$ref:"#"},items:{anyOf:[{$ref:"#"},{$ref:"#/definitions/schemaArray"}],default:!0},maxItems:{$ref:"#/definitions/nonNegativeInteger"},minItems:{$ref:"#/definitions/nonNegativeIntegerDefault0"},uniqueItems:{type:"boolean",default:!1},contains:{$ref:"#"},maxProperties:{$ref:"#/definitions/nonNegativeInteger"},minProperties:{$ref:"#/definitions/nonNegativeIntegerDefault0"},required:{$ref:"#/definitions/stringArray"},additionalProperties:{$ref:"#"},definitions:{type:"object",additionalProperties:{$ref:"#"},default:{}},properties:{type:"object",additionalProperties:{$ref:"#"},default:{}},patternProperties:{type:"object",additionalProperties:{$ref:"#"},propertyNames:{format:"regex"},default:{}},dependencies:{type:"object",additionalProperties:{anyOf:[{$ref:"#"},{$ref:"#/definitions/stringArray"}]}},propertyNames:{$ref:"#"},const:!0,enum:{type:"array",items:!0,minItems:1,uniqueItems:!0},type:{anyOf:[{$ref:"#/definitions/simpleTypes"},{type:"array",items:{$ref:"#/definitions/simpleTypes"},minItems:1,uniqueItems:!0}]},format:{type:"string"},contentMediaType:{type:"string"},contentEncoding:{type:"string"},if:{$ref:"#"},then:{$ref:"#"},else:{$ref:"#"},allOf:{$ref:"#/definitions/schemaArray"},anyOf:{$ref:"#/definitions/schemaArray"},oneOf:{$ref:"#/definitions/schemaArray"},not:{$ref:"#"}},default:!0}});var eq=N((Aw,oq)=>{Object.defineProperty(Aw,"__esModule",{value:!0});Aw.MissingRefError=Aw.ValidationError=Aw.CodeGen=Aw.Name=Aw.nil=Aw.stringify=Aw.str=Aw._=Aw.KeywordCxt=void 0;var NU=nX(),OU=dq(),DU=sq(),tq=aq(),IU=["/properties"],Q8="http://json-schema.org/draft-07/schema";class vQ extends NU.default{_addVocabularies(){if(super._addVocabularies(),OU.default.forEach((w)=>this.addVocabulary(w)),this.opts.discriminator)this.addKeyword(DU.default)}_addDefaultMetaSchema(){if(super._addDefaultMetaSchema(),!this.opts.meta)return;let w=this.opts.$data?this.$dataMetaSchema(tq,IU):tq;this.addMetaSchema(w,Q8,!1),this.refs["http://json-schema.org/schema"]=Q8}defaultMeta(){return this.opts.defaultMeta=super.defaultMeta()||(this.getSchema(Q8)?Q8:void 0)}}oq.exports=Aw=vQ;Object.defineProperty(Aw,"__esModule",{value:!0});Aw.default=vQ;var TU=K5();Object.defineProperty(Aw,"KeywordCxt",{enumerable:!0,get:function(){return TU.KeywordCxt}});var L1=h();Object.defineProperty(Aw,"_",{enumerable:!0,get:function(){return L1._}});Object.defineProperty(Aw,"str",{enumerable:!0,get:function(){return L1.str}});Object.defineProperty(Aw,"stringify",{enumerable:!0,get:function(){return L1.stringify}});Object.defineProperty(Aw,"nil",{enumerable:!0,get:function(){return L1.nil}});Object.defineProperty(Aw,"Name",{enumerable:!0,get:function(){return L1.Name}});Object.defineProperty(Aw,"CodeGen",{enumerable:!0,get:function(){return L1.CodeGen}});var PU=v9();Object.defineProperty(Aw,"ValidationError",{enumerable:!0,get:function(){return PU.default}});var RU=y9();Object.defineProperty(Aw,"MissingRefError",{enumerable:!0,get:function(){return RU.default}})});var wG=N(($1)=>{Object.defineProperty($1,"__esModule",{value:!0});$1.formatLimitDefinition=void 0;var bU=eq(),O0=h(),V6=O0.operators,W8={formatMaximum:{okStr:"<=",ok:V6.LTE,fail:V6.GT},formatMinimum:{okStr:">=",ok:V6.GTE,fail:V6.LT},formatExclusiveMaximum:{okStr:"<",ok:V6.LT,fail:V6.GTE},formatExclusiveMinimum:{okStr:">",ok:V6.GT,fail:V6.LTE}},SU={message:({keyword:w,schemaCode:Q})=>O0.str`should be ${W8[w].okStr} ${Q}`,params:({keyword:w,schemaCode:Q})=>O0._`{comparison: ${W8[w].okStr}, limit: ${Q}}`};$1.formatLimitDefinition={keyword:Object.keys(W8),type:"string",schemaType:"string",$data:!0,error:SU,code(w){let{gen:Q,data:W,schemaCode:Z,keyword:Y,it:J}=w,{opts:X,self:q}=J;if(!X.validateFormats)return;let G=new bU.KeywordCxt(J,q.RULES.all.format.definition,"format");if(G.$data)z();else F();function z(){let A=Q.scopeValue("formats",{ref:q.formats,code:X.code.formats}),V=Q.const("fmt",O0._`${A}[${G.schemaCode}]`);w.fail$data(O0.or(O0._`typeof ${V} != "object"`,O0._`${V} instanceof RegExp`,O0._`typeof ${V}.compare != "function"`,K(V)))}function F(){let A=G.schema,V=q.formats[A];if(!V||V===!0)return;if(typeof V!="object"||V instanceof RegExp||typeof V.compare!="function")throw Error(`"${Y}": format "${A}" does not define "compare" function`);let M=Q.scopeValue("formats",{key:A,ref:V,code:X.code.formats?O0._`${X.code.formats}${O0.getProperty(A)}`:void 0});w.fail$data(K(M))}function K(A){return O0._`${A}.compare(${W}, ${Z}) ${W8[Y].fail} 0`}},dependencies:["format"]};var EU=(w)=>{return w.addKeyword($1.formatLimitDefinition),w};$1.default=EU});var YG=N((T5,ZG)=>{Object.defineProperty(T5,"__esModule",{value:!0});var A1=IJ(),kU=wG(),yQ=h(),QG=new yQ.Name("fullFormats"),fU=new yQ.Name("fastFormats"),uQ=(w,Q={keywords:!0})=>{if(Array.isArray(Q))return WG(w,Q,A1.fullFormats,QG),w;let[W,Z]=Q.mode==="fast"?[A1.fastFormats,fU]:[A1.fullFormats,QG],Y=Q.formats||A1.formatNames;if(WG(w,Y,W,Z),Q.keywords)kU.default(w);return w};uQ.get=(w,Q="full")=>{let Z=(Q==="fast"?A1.fastFormats:A1.fullFormats)[w];if(!Z)throw Error(`Unknown format "${w}"`);return Z};function WG(w,Q,W,Z){var Y,J;(Y=(J=w.opts.code).formats)!==null&&Y!==void 0||(J.formats=yQ._`require("ajv-formats/dist/formats").${Z}`);for(let X of Q)w.addFormat(X,W[X])}ZG.exports=T5=uQ;Object.defineProperty(T5,"__esModule",{value:!0});T5.default=uQ});var XG=N((JG,Z8)=>{(function(w,Q){if(typeof Z8==="object"&&Z8.exports)Z8.exports=Q();else w.nearley=Q()})(JG,function(){function w(G,z,F){return this.id=++w.highestId,this.name=G,this.symbols=z,this.postprocess=F,this}w.highestId=0,w.prototype.toString=function(G){var z=typeof G>"u"?this.symbols.map(q).join(" "):this.symbols.slice(0,G).map(q).join(" ")+" ● "+this.symbols.slice(G).map(q).join(" ");return this.name+" → "+z};function Q(G,z,F,K){this.rule=G,this.dot=z,this.reference=F,this.data=[],this.wantedBy=K,this.isComplete=this.dot===G.symbols.length}Q.prototype.toString=function(){return"{"+this.rule.toString(this.dot)+"}, from: "+(this.reference||0)},Q.prototype.nextState=function(G){var z=new Q(this.rule,this.dot+1,this.reference,this.wantedBy);if(z.left=this,z.right=G,z.isComplete)z.data=z.build(),z.right=void 0;return z},Q.prototype.build=function(){var G=[],z=this;do G.push(z.right.data),z=z.left;while(z.left);return G.reverse(),G},Q.prototype.finish=function(){if(this.rule.postprocess)this.data=this.rule.postprocess(this.data,this.reference,J.fail)};function W(G,z){this.grammar=G,this.index=z,this.states=[],this.wants={},this.scannable=[],this.completed={}}W.prototype.process=function(G){var z=this.states,F=this.wants,K=this.completed;for(var A=0;A<z.length;A++){var V=z[A];if(V.isComplete){if(V.finish(),V.data!==J.fail){var M=V.wantedBy;for(var H=M.length;H--;){var U=M[H];this.complete(U,V)}if(V.reference===this.index){var j=V.rule.name;(this.completed[j]=this.completed[j]||[]).push(V)}}}else{var j=V.rule.symbols[V.dot];if(typeof j!=="string"){this.scannable.push(V);continue}if(F[j]){if(F[j].push(V),K.hasOwnProperty(j)){var T=K[j];for(var H=0;H<T.length;H++){var P=T[H];this.complete(V,P)}}}else F[j]=[V],this.predict(j)}}},W.prototype.predict=function(G){var z=this.grammar.byName[G]||[];for(var F=0;F<z.length;F++){var K=z[F],A=this.wants[G],V=new Q(K,0,this.index,A);this.states.push(V)}},W.prototype.complete=function(G,z){var F=G.nextState(z);this.states.push(F)};function Z(G,z){this.rules=G,this.start=z||this.rules[0].name;var F=this.byName={};this.rules.forEach(function(K){if(!F.hasOwnProperty(K.name))F[K.name]=[];F[K.name].push(K)})}Z.fromCompiled=function(K,z){var F=K.Lexer;if(K.ParserStart)z=K.ParserStart,K=K.ParserRules;var K=K.map(function(V){return new w(V.name,V.symbols,V.postprocess)}),A=new Z(K,z);return A.lexer=F,A};function Y(){this.reset("")}Y.prototype.reset=function(G,z){this.buffer=G,this.index=0,this.line=z?z.line:1,this.lastLineBreak=z?-z.col:0},Y.prototype.next=function(){if(this.index<this.buffer.length){var G=this.buffer[this.index++];if(G===`
|
|
16
|
+
`)this.line+=1,this.lastLineBreak=this.index;return{value:G}}},Y.prototype.save=function(){return{line:this.line,col:this.index-this.lastLineBreak}},Y.prototype.formatError=function(G,z){var F=this.buffer;if(typeof F==="string"){var K=F.split(`
|
|
17
|
+
`).slice(Math.max(0,this.line-5),this.line),A=F.indexOf(`
|
|
18
|
+
`,this.index);if(A===-1)A=F.length;var V=this.index-this.lastLineBreak,M=String(this.line).length;return z+=" at line "+this.line+" col "+V+`:
|
|
19
|
+
|
|
20
|
+
`,z+=K.map(function(U,j){return H(this.line-K.length+j+1,M)+" "+U},this).join(`
|
|
21
|
+
`),z+=`
|
|
22
|
+
`+H("",M+V)+`^
|
|
23
|
+
`,z}else return z+" at index "+(this.index-1);function H(U,j){var T=String(U);return Array(j-T.length+1).join(" ")+T}};function J(G,z,F){if(G instanceof Z)var K=G,F=z;else var K=Z.fromCompiled(G,z);this.grammar=K,this.options={keepHistory:!1,lexer:K.lexer||new Y};for(var A in F||{})this.options[A]=F[A];this.lexer=this.options.lexer,this.lexerState=void 0;var V=new W(K,0),M=this.table=[V];V.wants[K.start]=[],V.predict(K.start),V.process(),this.current=0}J.fail={},J.prototype.feed=function(G){var z=this.lexer;z.reset(G,this.lexerState);var F;while(!0){try{if(F=z.next(),!F)break}catch(S){var M=new W(this.grammar,this.current+1);this.table.push(M);var K=Error(this.reportLexerError(S));throw K.offset=this.current,K.token=S.token,K}var A=this.table[this.current];if(!this.options.keepHistory)delete this.table[this.current-1];var V=this.current+1,M=new W(this.grammar,V);this.table.push(M);var H=F.text!==void 0?F.text:F.value,U=z.constructor===Y?F.value:F,j=A.scannable;for(var T=j.length;T--;){var P=j[T],b=P.rule.symbols[P.dot];if(b.test?b.test(U):b.type?b.type===F.type:b.literal===H){var O=P.nextState({data:U,token:F,isToken:!0,reference:V-1});M.states.push(O)}}if(M.process(),M.states.length===0){var K=Error(this.reportError(F));throw K.offset=this.current,K.token=F,K}if(this.options.keepHistory)A.lexerState=z.save();this.current++}if(A)this.lexerState=z.save();return this.results=this.finish(),this},J.prototype.reportLexerError=function(G){var z,F,K=G.token;if(K)z="input "+JSON.stringify(K.text[0])+" (lexer error)",F=this.lexer.formatError(K,"Syntax error");else z="input (lexer error)",F=G.message;return this.reportErrorCommon(F,z)},J.prototype.reportError=function(G){var z=(G.type?G.type+" token: ":"")+JSON.stringify(G.value!==void 0?G.value:G),F=this.lexer.formatError(G,"Syntax error");return this.reportErrorCommon(F,z)},J.prototype.reportErrorCommon=function(G,z){var F=[];F.push(G);var K=this.table.length-2,A=this.table[K],V=A.states.filter(function(H){var U=H.rule.symbols[H.dot];return U&&typeof U!=="string"});if(V.length===0)F.push("Unexpected "+z+`. I did not expect any more input. Here is the state of my parse table:
|
|
24
|
+
`),this.displayStateStack(A.states,F);else{F.push("Unexpected "+z+`. Instead, I was expecting to see one of the following:
|
|
25
|
+
`);var M=V.map(function(H){return this.buildFirstStateStack(H,[])||[H]},this);M.forEach(function(H){var U=H[0],j=U.rule.symbols[U.dot],T=this.getSymbolDisplay(j);F.push("A "+T+" based on:"),this.displayStateStack(H,F)},this)}return F.push(""),F.join(`
|
|
26
|
+
`)},J.prototype.displayStateStack=function(G,z){var F,K=0;for(var A=0;A<G.length;A++){var V=G[A],M=V.rule.toString(V.dot);if(M===F)K++;else{if(K>0)z.push(" ^ "+K+" more lines identical to this");K=0,z.push(" "+M)}F=M}},J.prototype.getSymbolDisplay=function(G){return X(G)},J.prototype.buildFirstStateStack=function(G,z){if(z.indexOf(G)!==-1)return null;if(G.wantedBy.length===0)return[G];var F=G.wantedBy[0],K=[G].concat(z),A=this.buildFirstStateStack(F,K);if(A===null)return null;return[G].concat(A)},J.prototype.save=function(){var G=this.table[this.current];return G.lexerState=this.lexerState,G},J.prototype.restore=function(G){var z=G.index;this.current=z,this.table[z]=G,this.table.splice(z+1),this.lexerState=G.lexerState,this.results=this.finish()},J.prototype.rewind=function(G){if(!this.options.keepHistory)throw Error("set option `keepHistory` to enable rewinding");this.restore(this.table[G])},J.prototype.finish=function(){var G=[],z=this.grammar.start,F=this.table[this.table.length-1];return F.states.forEach(function(K){if(K.rule.name===z&&K.dot===K.rule.symbols.length&&K.reference===0&&K.data!==J.fail)G.push(K)}),G.map(function(K){return K.data})};function X(G){var z=typeof G;if(z==="string")return G;else if(z==="object")if(G.literal)return JSON.stringify(G.literal);else if(G instanceof RegExp)return"character matching "+G;else if(G.type)return G.type+" token";else if(G.test)return"token matching "+String(G.test);else throw Error("Unknown symbol type: "+G)}function q(G){var z=typeof G;if(z==="string")return G;else if(z==="object")if(G.literal)return JSON.stringify(G.literal);else if(G instanceof RegExp)return G.toString();else if(G.type)return"%"+G.type;else if(G.test)return"<"+String(G.test)+">";else throw Error("Unknown symbol type: "+G)}return{Parser:J,Grammar:Z,Rule:w}})});var GG=N((hQ)=>{Object.defineProperty(hQ,"__esModule",{value:!0});function Ew(w){return w[0]}var qG=(w)=>[].concat(...w.map((Q)=>Array.isArray(Q)?qG(Q):Q));function U1(w){if(w){if(Array.isArray(w))return qG(w).join("");return w}return""}var CU={Lexer:void 0,ParserRules:[{name:"Reverse_path",symbols:["Path"]},{name:"Reverse_path$string$1",symbols:[{literal:"<"},{literal:">"}],postprocess:(w)=>w.join("")},{name:"Reverse_path",symbols:["Reverse_path$string$1"]},{name:"Forward_path$subexpression$1$subexpression$1",symbols:[{literal:"<"},/[pP]/,/[oO]/,/[sS]/,/[tT]/,/[mM]/,/[aA]/,/[sS]/,/[tT]/,/[eE]/,/[rR]/,{literal:"@"}],postprocess:function(w){return w.join("")}},{name:"Forward_path$subexpression$1",symbols:["Forward_path$subexpression$1$subexpression$1","Domain",{literal:">"}]},{name:"Forward_path",symbols:["Forward_path$subexpression$1"]},{name:"Forward_path$subexpression$2",symbols:[{literal:"<"},/[pP]/,/[oO]/,/[sS]/,/[tT]/,/[mM]/,/[aA]/,/[sS]/,/[tT]/,/[eE]/,/[rR]/,{literal:">"}],postprocess:function(w){return w.join("")}},{name:"Forward_path",symbols:["Forward_path$subexpression$2"]},{name:"Forward_path",symbols:["Path"]},{name:"Path$ebnf$1$subexpression$1",symbols:["A_d_l",{literal:":"}]},{name:"Path$ebnf$1",symbols:["Path$ebnf$1$subexpression$1"],postprocess:Ew},{name:"Path$ebnf$1",symbols:[],postprocess:()=>null},{name:"Path",symbols:[{literal:"<"},"Path$ebnf$1","Mailbox",{literal:">"}]},{name:"A_d_l$ebnf$1",symbols:[]},{name:"A_d_l$ebnf$1$subexpression$1",symbols:[{literal:","},"At_domain"]},{name:"A_d_l$ebnf$1",symbols:["A_d_l$ebnf$1","A_d_l$ebnf$1$subexpression$1"],postprocess:(w)=>w[0].concat([w[1]])},{name:"A_d_l",symbols:["At_domain","A_d_l$ebnf$1"]},{name:"At_domain",symbols:[{literal:"@"},"Domain"]},{name:"Domain$ebnf$1",symbols:[]},{name:"Domain$ebnf$1$subexpression$1",symbols:[{literal:"."},"sub_domain"]},{name:"Domain$ebnf$1",symbols:["Domain$ebnf$1","Domain$ebnf$1$subexpression$1"],postprocess:(w)=>w[0].concat([w[1]])},{name:"Domain",symbols:["sub_domain","Domain$ebnf$1"]},{name:"sub_domain",symbols:["U_label"]},{name:"Let_dig",symbols:["ALPHA_DIGIT"],postprocess:Ew},{name:"Ldh_str$ebnf$1",symbols:[]},{name:"Ldh_str$ebnf$1",symbols:["Ldh_str$ebnf$1","ALPHA_DIG_DASH"],postprocess:(w)=>w[0].concat([w[1]])},{name:"Ldh_str",symbols:["Ldh_str$ebnf$1","Let_dig"]},{name:"U_Let_dig",symbols:["ALPHA_DIGIT_U"],postprocess:Ew},{name:"U_Ldh_str$ebnf$1",symbols:[]},{name:"U_Ldh_str$ebnf$1",symbols:["U_Ldh_str$ebnf$1","ALPHA_DIG_DASH_U"],postprocess:(w)=>w[0].concat([w[1]])},{name:"U_Ldh_str",symbols:["U_Ldh_str$ebnf$1","U_Let_dig"]},{name:"U_label$ebnf$1$subexpression$1",symbols:["U_Ldh_str"]},{name:"U_label$ebnf$1",symbols:["U_label$ebnf$1$subexpression$1"],postprocess:Ew},{name:"U_label$ebnf$1",symbols:[],postprocess:()=>null},{name:"U_label",symbols:["U_Let_dig","U_label$ebnf$1"]},{name:"address_literal$subexpression$1",symbols:["IPv4_address_literal"]},{name:"address_literal$subexpression$1",symbols:["IPv6_address_literal"]},{name:"address_literal$subexpression$1",symbols:["General_address_literal"]},{name:"address_literal",symbols:[{literal:"["},"address_literal$subexpression$1",{literal:"]"}]},{name:"non_local_part",symbols:["Domain"],postprocess:function(w){return{DomainName:U1(w[0])}}},{name:"non_local_part",symbols:["address_literal"],postprocess:function(w){return{AddressLiteral:U1(w[0])}}},{name:"Mailbox",symbols:["Local_part",{literal:"@"},"non_local_part"],postprocess:function(w){return{localPart:U1(w[0]),domainPart:U1(w[2])}}},{name:"Local_part",symbols:["Dot_string"],postprocess:function(w){return{DotString:U1(w[0])}}},{name:"Local_part",symbols:["Quoted_string"],postprocess:function(w){return{QuotedString:U1(w[0])}}},{name:"Dot_string$ebnf$1",symbols:[]},{name:"Dot_string$ebnf$1$subexpression$1",symbols:[{literal:"."},"Atom"]},{name:"Dot_string$ebnf$1",symbols:["Dot_string$ebnf$1","Dot_string$ebnf$1$subexpression$1"],postprocess:(w)=>w[0].concat([w[1]])},{name:"Dot_string",symbols:["Atom","Dot_string$ebnf$1"]},{name:"Atom$ebnf$1",symbols:[/[0-9A-Za-z!#$%&'*+\-/=?^_`{|}~\u0080-\uFFFF/]/]},{name:"Atom$ebnf$1",symbols:["Atom$ebnf$1",/[0-9A-Za-z!#$%&'*+\-/=?^_`{|}~\u0080-\uFFFF/]/],postprocess:(w)=>w[0].concat([w[1]])},{name:"Atom",symbols:["Atom$ebnf$1"]},{name:"Quoted_string$ebnf$1",symbols:[]},{name:"Quoted_string$ebnf$1",symbols:["Quoted_string$ebnf$1","QcontentSMTP"],postprocess:(w)=>w[0].concat([w[1]])},{name:"Quoted_string",symbols:["DQUOTE","Quoted_string$ebnf$1","DQUOTE"]},{name:"QcontentSMTP",symbols:["qtextSMTP"]},{name:"QcontentSMTP",symbols:["quoted_pairSMTP"]},{name:"quoted_pairSMTP",symbols:[{literal:"\\"},/[\x20-\x7e]/]},{name:"qtextSMTP",symbols:[/[\x20-\x21\x23-\x5b\x5d-\x7e\u0080-\uFFFF]/],postprocess:Ew},{name:"IPv4_address_literal$macrocall$2",symbols:[{literal:"."},"Snum"]},{name:"IPv4_address_literal$macrocall$1",symbols:["IPv4_address_literal$macrocall$2","IPv4_address_literal$macrocall$2","IPv4_address_literal$macrocall$2"]},{name:"IPv4_address_literal",symbols:["Snum","IPv4_address_literal$macrocall$1"]},{name:"IPv6_address_literal$subexpression$1",symbols:[/[iI]/,/[pP]/,/[vV]/,{literal:"6"},{literal:":"}],postprocess:function(w){return w.join("")}},{name:"IPv6_address_literal",symbols:["IPv6_address_literal$subexpression$1","IPv6_addr"]},{name:"General_address_literal$ebnf$1",symbols:["dcontent"]},{name:"General_address_literal$ebnf$1",symbols:["General_address_literal$ebnf$1","dcontent"],postprocess:(w)=>w[0].concat([w[1]])},{name:"General_address_literal",symbols:["Standardized_tag",{literal:":"},"General_address_literal$ebnf$1"]},{name:"Standardized_tag",symbols:["Ldh_str"]},{name:"dcontent",symbols:[/[\x21-\x5a\x5e-\x7e]/],postprocess:Ew},{name:"Snum",symbols:["DIGIT"]},{name:"Snum$subexpression$1",symbols:[/[1-9]/,"DIGIT"]},{name:"Snum",symbols:["Snum$subexpression$1"]},{name:"Snum$subexpression$2",symbols:[{literal:"1"},"DIGIT","DIGIT"]},{name:"Snum",symbols:["Snum$subexpression$2"]},{name:"Snum$subexpression$3",symbols:[{literal:"2"},/[0-4]/,"DIGIT"]},{name:"Snum",symbols:["Snum$subexpression$3"]},{name:"Snum$subexpression$4",symbols:[{literal:"2"},{literal:"5"},/[0-5]/]},{name:"Snum",symbols:["Snum$subexpression$4"]},{name:"IPv6_addr",symbols:["IPv6_full"]},{name:"IPv6_addr",symbols:["IPv6_comp"]},{name:"IPv6_addr",symbols:["IPv6v4_full"]},{name:"IPv6_addr",symbols:["IPv6v4_comp"]},{name:"IPv6_hex",symbols:["HEXDIG"]},{name:"IPv6_hex$subexpression$1",symbols:["HEXDIG","HEXDIG"]},{name:"IPv6_hex",symbols:["IPv6_hex$subexpression$1"]},{name:"IPv6_hex$subexpression$2",symbols:["HEXDIG","HEXDIG","HEXDIG"]},{name:"IPv6_hex",symbols:["IPv6_hex$subexpression$2"]},{name:"IPv6_hex$subexpression$3",symbols:["HEXDIG","HEXDIG","HEXDIG","HEXDIG"]},{name:"IPv6_hex",symbols:["IPv6_hex$subexpression$3"]},{name:"IPv6_full$macrocall$2",symbols:[{literal:":"},"IPv6_hex"]},{name:"IPv6_full$macrocall$1",symbols:["IPv6_full$macrocall$2","IPv6_full$macrocall$2","IPv6_full$macrocall$2","IPv6_full$macrocall$2","IPv6_full$macrocall$2","IPv6_full$macrocall$2","IPv6_full$macrocall$2"]},{name:"IPv6_full",symbols:["IPv6_hex","IPv6_full$macrocall$1"]},{name:"IPv6_comp$ebnf$1$subexpression$1$macrocall$2",symbols:[{literal:":"},"IPv6_hex"]},{name:"IPv6_comp$ebnf$1$subexpression$1$macrocall$1",symbols:["IPv6_comp$ebnf$1$subexpression$1$macrocall$2","IPv6_comp$ebnf$1$subexpression$1$macrocall$2","IPv6_comp$ebnf$1$subexpression$1$macrocall$2","IPv6_comp$ebnf$1$subexpression$1$macrocall$2","IPv6_comp$ebnf$1$subexpression$1$macrocall$2"]},{name:"IPv6_comp$ebnf$1$subexpression$1",symbols:["IPv6_hex","IPv6_comp$ebnf$1$subexpression$1$macrocall$1"]},{name:"IPv6_comp$ebnf$1",symbols:["IPv6_comp$ebnf$1$subexpression$1"],postprocess:Ew},{name:"IPv6_comp$ebnf$1",symbols:[],postprocess:()=>null},{name:"IPv6_comp$string$1",symbols:[{literal:":"},{literal:":"}],postprocess:(w)=>w.join("")},{name:"IPv6_comp$ebnf$2$subexpression$1$macrocall$2",symbols:[{literal:":"},"IPv6_hex"]},{name:"IPv6_comp$ebnf$2$subexpression$1$macrocall$1",symbols:["IPv6_comp$ebnf$2$subexpression$1$macrocall$2","IPv6_comp$ebnf$2$subexpression$1$macrocall$2","IPv6_comp$ebnf$2$subexpression$1$macrocall$2","IPv6_comp$ebnf$2$subexpression$1$macrocall$2","IPv6_comp$ebnf$2$subexpression$1$macrocall$2"]},{name:"IPv6_comp$ebnf$2$subexpression$1",symbols:["IPv6_hex","IPv6_comp$ebnf$2$subexpression$1$macrocall$1"]},{name:"IPv6_comp$ebnf$2",symbols:["IPv6_comp$ebnf$2$subexpression$1"],postprocess:Ew},{name:"IPv6_comp$ebnf$2",symbols:[],postprocess:()=>null},{name:"IPv6_comp",symbols:["IPv6_comp$ebnf$1","IPv6_comp$string$1","IPv6_comp$ebnf$2"]},{name:"IPv6v4_full$macrocall$2",symbols:[{literal:":"},"IPv6_hex"]},{name:"IPv6v4_full$macrocall$1",symbols:["IPv6v4_full$macrocall$2","IPv6v4_full$macrocall$2","IPv6v4_full$macrocall$2","IPv6v4_full$macrocall$2","IPv6v4_full$macrocall$2"]},{name:"IPv6v4_full",symbols:["IPv6_hex","IPv6v4_full$macrocall$1",{literal:":"},"IPv4_address_literal"]},{name:"IPv6v4_comp$ebnf$1$subexpression$1$macrocall$2",symbols:[{literal:":"},"IPv6_hex"]},{name:"IPv6v4_comp$ebnf$1$subexpression$1$macrocall$1",symbols:["IPv6v4_comp$ebnf$1$subexpression$1$macrocall$2","IPv6v4_comp$ebnf$1$subexpression$1$macrocall$2","IPv6v4_comp$ebnf$1$subexpression$1$macrocall$2"]},{name:"IPv6v4_comp$ebnf$1$subexpression$1",symbols:["IPv6_hex","IPv6v4_comp$ebnf$1$subexpression$1$macrocall$1"]},{name:"IPv6v4_comp$ebnf$1",symbols:["IPv6v4_comp$ebnf$1$subexpression$1"],postprocess:Ew},{name:"IPv6v4_comp$ebnf$1",symbols:[],postprocess:()=>null},{name:"IPv6v4_comp$string$1",symbols:[{literal:":"},{literal:":"}],postprocess:(w)=>w.join("")},{name:"IPv6v4_comp$ebnf$2$subexpression$1$macrocall$2",symbols:[{literal:":"},"IPv6_hex"]},{name:"IPv6v4_comp$ebnf$2$subexpression$1$macrocall$1",symbols:["IPv6v4_comp$ebnf$2$subexpression$1$macrocall$2","IPv6v4_comp$ebnf$2$subexpression$1$macrocall$2","IPv6v4_comp$ebnf$2$subexpression$1$macrocall$2"]},{name:"IPv6v4_comp$ebnf$2$subexpression$1",symbols:["IPv6_hex","IPv6v4_comp$ebnf$2$subexpression$1$macrocall$1",{literal:":"}]},{name:"IPv6v4_comp$ebnf$2",symbols:["IPv6v4_comp$ebnf$2$subexpression$1"],postprocess:Ew},{name:"IPv6v4_comp$ebnf$2",symbols:[],postprocess:()=>null},{name:"IPv6v4_comp",symbols:["IPv6v4_comp$ebnf$1","IPv6v4_comp$string$1","IPv6v4_comp$ebnf$2","IPv4_address_literal"]},{name:"DIGIT",symbols:[/[0-9]/],postprocess:Ew},{name:"ALPHA_DIGIT_U",symbols:[/[0-9A-Za-z\u0080-\uFFFF]/],postprocess:Ew},{name:"ALPHA_DIGIT",symbols:[/[0-9A-Za-z]/],postprocess:Ew},{name:"ALPHA_DIG_DASH",symbols:[/[-0-9A-Za-z]/],postprocess:Ew},{name:"ALPHA_DIG_DASH_U",symbols:[/[-0-9A-Za-z\u0080-\uFFFF]/],postprocess:Ew},{name:"HEXDIG",symbols:[/[0-9A-Fa-f]/],postprocess:Ew},{name:"DQUOTE",symbols:[{literal:'"'}],postprocess:Ew}],ParserStart:"Reverse_path"};hQ.default=CU});var Y8=N((ow)=>{var vU=ow&&ow.__importDefault||function(w){return w&&w.__esModule?w:{default:w}};Object.defineProperty(ow,"__esModule",{value:!0});ow.canonicalize=ow.canonicalize_quoted_string=ow.normalize=ow.normalize_dot_string=ow.parse=void 0;var zG=XG(),FG=vU(GG());FG.default.ParserStart="Mailbox";var yU=zG.Grammar.fromCompiled(FG.default);function gQ(w){if(w.length>986)throw Error("address too long");let W=new zG.Parser(yU);if(W.feed(w),W.results.length!==1)throw Error("address parsing failed: ambiguous grammar");let Z=w.lastIndexOf("@"),Y=w.substring(Z+1);if(Y[0]!=="["){if(Y.length>253)throw Error("domain too long");let J=Y.split(".");if(J.length<2)throw Error("domain not fully qualified");if(J[J.length-1].length<2)throw Error("top level domain label too short");if(J.sort(function(X,q){return q.length-X.length}),J[0].length>63)throw Error("domain label too long")}return W.results[0]}ow.parse=gQ;function KG(w){return function(){let Z=w.indexOf("+");if(Z===-1)return w;return w.substr(0,Z)}().replace(/\./g,"").toLowerCase()}ow.normalize_dot_string=KG;function uU(w){var Q,W;let Z=gQ(w),Y=(Q=Z.domainPart.AddressLiteral)!==null&&Q!==void 0?Q:Z.domainPart.DomainName.toLowerCase();return`${(W=Z.localPart.QuotedString)!==null&&W!==void 0?W:KG(Z.localPart.DotString)}@${Y}`}ow.normalize=uU;function BG(w){return`"${w.substr(1).substr(0,w.length-2).replace(/(?:\\(.))/g,"$1").replace(/(?:(["\\]))/g,"\\$1")}"`}ow.canonicalize_quoted_string=BG;function hU(w){var Q;let W=gQ(w),Z=(Q=W.domainPart.AddressLiteral)!==null&&Q!==void 0?Q:W.domainPart.DomainName.toLowerCase();return`${W.localPart.QuotedString?BG(W.localPart.QuotedString):W.localPart.DotString}@${Z}`}ow.canonicalize=hU});var NG=N((BD,jG)=>{var J8=Object.prototype.hasOwnProperty,UG=Object.prototype.toString,HG=Object.defineProperty,VG=Object.getOwnPropertyDescriptor,MG=function(Q){if(typeof Array.isArray==="function")return Array.isArray(Q);return UG.call(Q)==="[object Array]"},LG=function(Q){if(!Q||UG.call(Q)!=="[object Object]")return!1;var W=J8.call(Q,"constructor"),Z=Q.constructor&&Q.constructor.prototype&&J8.call(Q.constructor.prototype,"isPrototypeOf");if(Q.constructor&&!W&&!Z)return!1;var Y;for(Y in Q);return typeof Y>"u"||J8.call(Q,Y)},$G=function(Q,W){if(HG&&W.name==="__proto__")HG(Q,W.name,{enumerable:!0,configurable:!0,value:W.newValue,writable:!0});else Q[W.name]=W.newValue},AG=function(Q,W){if(W==="__proto__"){if(!J8.call(Q,W))return;else if(VG)return VG(Q,W).value}return Q[W]};jG.exports=function w(){var Q,W,Z,Y,J,X,q=arguments[0],G=1,z=arguments.length,F=!1;if(typeof q==="boolean")F=q,q=arguments[1]||{},G=2;if(q==null||typeof q!=="object"&&typeof q!=="function")q={};for(;G<z;++G)if(Q=arguments[G],Q!=null){for(W in Q)if(Z=AG(q,W),Y=AG(Q,W),q!==Y){if(F&&Y&&(LG(Y)||(J=MG(Y)))){if(J)J=!1,X=Z&&MG(Z)?Z:[];else X=Z&&LG(Z)?Z:{};$G(q,{name:W,newValue:w(F,X,Y)})}else if(typeof Y<"u")$G(q,{name:W,newValue:Y})}}return q}});var OG=N((HD,gU)=>{gU.exports=[{scheme:"aaa",description:"Diameter Protocol",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc6733"}]},{scheme:"aaas",description:"Diameter Protocol with Secure Transport",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc6733"}]},{scheme:"about",description:"about",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc6694"}]},{scheme:"acap",description:"application configuration access protocol",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc2244"}]},{scheme:"acct",description:"acct",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc7565"}]},{scheme:"cap",description:"Calendar Access Protocol",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc4324"}]},{scheme:"cid",description:"content identifier",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc2392"}]},{scheme:"coap",description:"coap",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc7252"}]},{scheme:"coaps",description:"coaps",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc7252"}]},{scheme:"crid",description:"TV-Anytime Content Reference Identifier",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc4078"}]},{scheme:"data",description:"data",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc2397"}]},{scheme:"dav",description:"dav",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc4918"}]},{scheme:"dict",description:"dictionary service protocol",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc2229"}]},{scheme:"dns",description:"Domain Name System",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc4501"}]},{scheme:"example",description:"example",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc7595"}]},{scheme:"file",description:"Host-specific file names",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc1738"}]},{scheme:"ftp",description:"File Transfer Protocol",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc1738"}]},{scheme:"geo",description:"Geographic Locations",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc5870"}]},{scheme:"go",description:"go",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc3368"}]},{scheme:"gopher",description:"The Gopher Protocol",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc4266"}]},{scheme:"h323",description:"H.323",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc3508"}]},{scheme:"http",description:"Hypertext Transfer Protocol",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc7230"}]},{scheme:"https",description:"Hypertext Transfer Protocol Secure",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc7230"}]},{scheme:"iax",description:"Inter-Asterisk eXchange Version 2",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc5456"}]},{scheme:"icap",description:"Internet Content Adaptation Protocol",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc3507"}]},{scheme:"im",description:"Instant Messaging",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc3860"}]},{scheme:"imap",description:"internet message access protocol",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc5092"}]},{scheme:"info",description:`Information Assets with Identifiers in Public Namespaces.
|
|
27
|
+
(section 3) defines an "info" registry
|
|
28
|
+
of public namespaces, which is maintained by NISO and can be accessed
|
|
29
|
+
from .`,reference:[{type:"rfc",href:"http://www.iana.org/go/rfc4452"}]},{scheme:"ipp",description:"Internet Printing Protocol",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc3510"}]},{scheme:"ipps",description:"Internet Printing Protocol over HTTPS",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc7472"}]},{scheme:"iris",description:"Internet Registry Information Service",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc3981"}]},{scheme:"iris.beep",description:"iris.beep",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc3983"}]},{scheme:"iris.lwz",description:"iris.lwz",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc4993"}]},{scheme:"iris.xpc",description:"iris.xpc",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc4992"}]},{scheme:"iris.xpcs",description:"iris.xpcs",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc4992"}]},{scheme:"jabber",description:"jabber",reference:[],template:"http://www.iana.org/assignments/uri-schemes/perm/jabber"},{scheme:"ldap",description:"Lightweight Directory Access Protocol",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc4516"}]},{scheme:"mailto",description:"Electronic mail address",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc6068"}]},{scheme:"mid",description:"message identifier",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc2392"}]},{scheme:"msrp",description:"Message Session Relay Protocol",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc4975"}]},{scheme:"msrps",description:"Message Session Relay Protocol Secure",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc4975"}]},{scheme:"mtqp",description:"Message Tracking Query Protocol",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc3887"}]},{scheme:"mupdate",description:"Mailbox Update (MUPDATE) Protocol",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc3656"}]},{scheme:"news",description:"USENET news",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc5538"}]},{scheme:"nfs",description:"network file system protocol",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc2224"}]},{scheme:"ni",description:"ni",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc6920"}]},{scheme:"nih",description:"nih",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc6920"}]},{scheme:"nntp",description:"USENET news using NNTP access",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc5538"}]},{scheme:"opaquelocktoken",description:"opaquelocktokent",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc4918"}]},{scheme:"pkcs11",description:"PKCS#11",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc7512"}]},{scheme:"pop",description:"Post Office Protocol v3",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc2384"}]},{scheme:"pres",description:"Presence",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc3859"}]},{scheme:"reload",description:"reload",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc6940"}]},{scheme:"rtsp",description:"Real-time Streaming Protocol (RTSP)",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc2326"},{type:"draft",href:"http://www.iana.org/go/RFC-ietf-mmusic-rfc2326bis-40"}]},{scheme:"rtsps",description:"Real-time Streaming Protocol (RTSP) over TLS",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc2326"},{type:"draft",href:"http://www.iana.org/go/RFC-ietf-mmusic-rfc2326bis-40"}]},{scheme:"rtspu",description:"Real-time Streaming Protocol (RTSP) over unreliable datagram transport",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc2326"}]},{scheme:"service",description:"service location",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc2609"}]},{scheme:"session",description:"session",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc6787"}]},{scheme:"shttp",description:"Secure Hypertext Transfer Protocol",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc2660"}]},{scheme:"sieve",description:"ManageSieve Protocol",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc5804"}]},{scheme:"sip",description:"session initiation protocol",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc3261"}]},{scheme:"sips",description:"secure session initiation protocol",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc3261"}]},{scheme:"sms",description:"Short Message Service",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc5724"}]},{scheme:"snmp",description:"Simple Network Management Protocol",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc4088"}]},{scheme:"soap.beep",description:"soap.beep",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc4227"}]},{scheme:"soap.beeps",description:"soap.beeps",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc4227"}]},{scheme:"stun",description:"stun",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc7064"}]},{scheme:"stuns",description:"stuns",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc7064"}]},{scheme:"tag",description:"tag",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc4151"}]},{scheme:"tel",description:"telephone",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc3966"}]},{scheme:"telnet",description:"Reference to interactive sessions",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc4248"}]},{scheme:"tftp",description:"Trivial File Transfer Protocol",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc3617"}]},{scheme:"thismessage",description:"multipart/related relative reference resolution",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc2557"}],template:"http://www.iana.org/assignments/uri-schemes/perm/thismessage"},{scheme:"tip",description:"Transaction Internet Protocol",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc2371"}]},{scheme:"tn3270",description:"Interactive 3270 emulation sessions",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc6270"}]},{scheme:"turn",description:"turn",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc7065"}]},{scheme:"turns",description:"turns",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc7065"}]},{scheme:"tv",description:"TV Broadcasts",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc2838"}]},{scheme:"urn",description:"Uniform Resource Names",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc2141"},{type:"registry",href:"http://www.iana.org/assignments/urn-namespaces"}]},{scheme:"vemmi",description:"versatile multimedia interface",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc2122"}]},{scheme:"vnc",description:"Remote Framebuffer Protocol",reference:[{type:"draft",href:"http://www.iana.org/go/RFC-warden-appsawg-vnc-scheme-10"}]},{scheme:"ws",description:"WebSocket connections",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc6455"}]},{scheme:"wss",description:"Encrypted WebSocket connections",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc6455"}]},{scheme:"xcon",description:"xcon",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc6501"}]},{scheme:"xcon-userid",description:"xcon-userid",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc6501"}]},{scheme:"xmlrpc.beep",description:"xmlrpc.beep",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc3529"}]},{scheme:"xmlrpc.beeps",description:"xmlrpc.beeps",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc3529"}]},{scheme:"xmpp",description:"Extensible Messaging and Presence Protocol",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc5122"}]},{scheme:"z39.50r",description:"Z39.50 Retrieval",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc2056"}]},{scheme:"z39.50s",description:"Z39.50 Session",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc2056"}]}]});var DG=N((VD,_U)=>{_U.exports=[{scheme:"acr",description:"acr",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/acr"},{scheme:"adiumxtra",description:"adiumxtra",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/adiumxtra"},{scheme:"afp",description:"afp",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/afp"},{scheme:"afs",description:"Andrew File System global file names",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc1738"}]},{scheme:"aim",description:"aim",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/aim"},{scheme:"appdata",description:"appdata",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/appdata"},{scheme:"apt",description:"apt",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/apt"},{scheme:"attachment",description:"attachment",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/attachment"},{scheme:"aw",description:"aw",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/aw"},{scheme:"barion",description:"barion",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/barion"},{scheme:"beshare",description:"beshare",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/beshare"},{scheme:"bitcoin",description:"bitcoin",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/bitcoin"},{scheme:"blob",description:"blob",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/blob"},{scheme:"bolo",description:"bolo",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/bolo"},{scheme:"callto",description:"callto",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/callto"},{scheme:"chrome",description:"chrome",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/chrome"},{scheme:"chrome-extension",description:"chrome-extension",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/chrome-extension"},{scheme:"com-eventbrite-attendee",description:"com-eventbrite-attendee",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/com-eventbrite-attendee"},{scheme:"content",description:"content",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/content"},{scheme:"cvs",description:"cvs",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/cvs"},{scheme:"dis",description:"dis",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/dis"},{scheme:"dlna-playcontainer",description:"dlna-playcontainer",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/dlna-playcontainer"},{scheme:"dlna-playsingle",description:"dlna-playsingle",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/dlna-playsingle"},{scheme:"dntp",description:"dntp",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/dntp"},{scheme:"dtn",description:"DTNRG research and development",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc5050"}]},{scheme:"dvb",description:"dvb",reference:[{type:"draft",href:"http://www.iana.org/go/draft-mcroberts-uri-dvb"}]},{scheme:"ed2k",description:"ed2k",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ed2k"},{scheme:"facetime",description:"facetime",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/facetime"},{scheme:"feed",description:"feed",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/feed"},{scheme:"feedready",description:"feedready",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/feedready"},{scheme:"finger",description:"finger",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/finger"},{scheme:"fish",description:"fish",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/fish"},{scheme:"gg",description:"gg",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/gg"},{scheme:"git",description:"git",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/git"},{scheme:"gizmoproject",description:"gizmoproject",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/gizmoproject"},{scheme:"gtalk",description:"gtalk",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/gtalk"},{scheme:"ham",description:"ham",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc7046"}]},{scheme:"hcp",description:"hcp",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/hcp"},{scheme:"icon",description:"icon",reference:[{type:"draft",href:"http://www.iana.org/go/draft-lafayette-icon-uri-scheme"}]},{scheme:"iotdisco",description:"iotdisco",reference:[{type:"uri",href:"http://www.iana.org/assignments/uri-schemes/prov/iotdisco.pdf"}],template:"http://www.iana.org/assignments/uri-schemes/prov/iotdisco"},{scheme:"ipn",description:"ipn",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc6260"}]},{scheme:"irc",description:"irc",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/irc"},{scheme:"irc6",description:"irc6",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/irc6"},{scheme:"ircs",description:"ircs",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ircs"},{scheme:"isostore",description:"isostore",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/isostore"},{scheme:"itms",description:"itms",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/itms"},{scheme:"jar",description:"jar",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/jar"},{scheme:"jms",description:"Java Message Service",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc6167"}]},{scheme:"keyparc",description:"keyparc",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/keyparc"},{scheme:"lastfm",description:"lastfm",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/lastfm"},{scheme:"ldaps",description:"ldaps",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ldaps"},{scheme:"magnet",description:"magnet",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/magnet"},{scheme:"maps",description:"maps",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/maps"},{scheme:"market",description:"market",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/market"},{scheme:"message",description:"message",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/message"},{scheme:"mms",description:"mms",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/mms"},{scheme:"ms-access",description:"ms-access",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-access"},{scheme:"ms-drive-to",description:"ms-drive-to",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-drive-to"},{scheme:"ms-enrollment",description:"ms-enrollment",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-enrollment"},{scheme:"ms-excel",description:"ms-excel",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-excel"},{scheme:"ms-getoffice",description:"ms-getoffice",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-getoffice"},{scheme:"ms-help",description:"ms-help",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-help"},{scheme:"ms-infopath",description:"ms-infopath",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-infopath"},{scheme:"ms-media-stream-id",description:"ms-media-stream-id",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-media-stream-id"},{scheme:"ms-powerpoint",description:"ms-powerpoint",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-powerpoint"},{scheme:"ms-project",description:"ms-project",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-project"},{scheme:"ms-publisher",description:"ms-publisher",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-publisher"},{scheme:"ms-search-repair",description:"ms-search-repair",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-search-repair"},{scheme:"ms-secondary-screen-controller",description:"ms-secondary-screen-controller",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-secondary-screen-controller"},{scheme:"ms-secondary-screen-setup",description:"ms-secondary-screen-setup",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-secondary-screen-setup"},{scheme:"ms-settings",description:"ms-settings",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-settings"},{scheme:"ms-settings-airplanemode",description:"ms-settings-airplanemode",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-settings-airplanemode"},{scheme:"ms-settings-bluetooth",description:"ms-settings-bluetooth",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-settings-bluetooth"},{scheme:"ms-settings-camera",description:"ms-settings-camera",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-settings-camera"},{scheme:"ms-settings-cellular",description:"ms-settings-cellular",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-settings-cellular"},{scheme:"ms-settings-cloudstorage",description:"ms-settings-cloudstorage",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-settings-cloudstorage"},{scheme:"ms-settings-connectabledevices",description:"ms-settings-connectabledevices",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-settings-connectabledevices"},{scheme:"ms-settings-displays-topology",description:"ms-settings-displays-topology",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-settings-displays-topology"},{scheme:"ms-settings-emailandaccounts",description:"ms-settings-emailandaccounts",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-settings-emailandaccounts"},{scheme:"ms-settings-language",description:"ms-settings-language",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-settings-language"},{scheme:"ms-settings-location",description:"ms-settings-location",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-settings-location"},{scheme:"ms-settings-lock",description:"ms-settings-lock",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-settings-lock"},{scheme:"ms-settings-nfctransactions",description:"ms-settings-nfctransactions",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-settings-nfctransactions"},{scheme:"ms-settings-notifications",description:"ms-settings-notifications",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-settings-notifications"},{scheme:"ms-settings-power",description:"ms-settings-power",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-settings-power"},{scheme:"ms-settings-privacy",description:"ms-settings-privacy",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-settings-privacy"},{scheme:"ms-settings-proximity",description:"ms-settings-proximity",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-settings-proximity"},{scheme:"ms-settings-screenrotation",description:"ms-settings-screenrotation",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-settings-screenrotation"},{scheme:"ms-settings-wifi",description:"ms-settings-wifi",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-settings-wifi"},{scheme:"ms-settings-workplace",description:"ms-settings-workplace",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-settings-workplace"},{scheme:"ms-spd",description:"ms-spd",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-spd"},{scheme:"ms-transit-to",description:"ms-transit-to",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-transit-to"},{scheme:"ms-visio",description:"ms-visio",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-visio"},{scheme:"ms-walk-to",description:"ms-walk-to",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-walk-to"},{scheme:"ms-word",description:"ms-word",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ms-word"},{scheme:"msnim",description:"msnim",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/msnim"},{scheme:"mumble",description:"mumble",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/mumble"},{scheme:"mvn",description:"mvn",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/mvn"},{scheme:"notes",description:"notes",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/notes"},{scheme:"oid",description:"oid",reference:[{type:"draft",href:"http://www.iana.org/go/draft-larmouth-oid-iri"}],template:"http://www.iana.org/assignments/uri-schemes/prov/oid"},{scheme:"palm",description:"palm",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/palm"},{scheme:"paparazzi",description:"paparazzi",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/paparazzi"},{scheme:"platform",description:"platform",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/platform"},{scheme:"proxy",description:"proxy",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/proxy"},{scheme:"psyc",description:"psyc",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/psyc"},{scheme:"query",description:"query",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/query"},{scheme:"redis",description:"redis",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/redis"},{scheme:"rediss",description:"rediss",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/rediss"},{scheme:"res",description:"res",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/res"},{scheme:"resource",description:"resource",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/resource"},{scheme:"rmi",description:"rmi",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/rmi"},{scheme:"rsync",description:"rsync",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc5781"}]},{scheme:"rtmfp",description:"rtmfp",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc7425"}],template:"http://www.iana.org/assignments/uri-schemes/prov/rtmfp"},{scheme:"rtmp",description:"rtmp",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/rtmp"},{scheme:"secondlife",description:"query",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/secondlife"},{scheme:"sftp",description:"query",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/sftp"},{scheme:"sgn",description:"sgn",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/sgn"},{scheme:"skype",description:"skype",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/skype"},{scheme:"smb",description:"smb",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/smb"},{scheme:"smtp",description:"smtp",reference:[{type:"draft",href:"http://www.iana.org/go/draft-melnikov-smime-msa-to-mda"}],template:"http://www.iana.org/assignments/uri-schemes/prov/smtp"},{scheme:"soldat",description:"soldat",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/soldat"},{scheme:"spotify",description:"spotify",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/spotify"},{scheme:"ssh",description:"ssh",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ssh"},{scheme:"steam",description:"steam",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/steam"},{scheme:"submit",description:"submit",reference:[{type:"draft",href:"http://www.iana.org/go/draft-melnikov-smime-msa-to-mda"}],template:"http://www.iana.org/assignments/uri-schemes/prov/submit"},{scheme:"svn",description:"svn",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/svn"},{scheme:"teamspeak",description:"teamspeak",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/teamspeak"},{scheme:"teliaeid",description:"teliaeid",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/teliaeid"},{scheme:"things",description:"things",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/things"},{scheme:"tool",description:"tool",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/tool"},{scheme:"udp",description:"udp",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/udp"},{scheme:"unreal",description:"unreal",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/unreal"},{scheme:"ut2004",description:"ut2004",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ut2004"},{scheme:"v-event",description:"v-event",reference:[{type:"draft",href:"http://www.iana.org/go/draft-menderico-v-event-uri"}],template:"http://www.iana.org/assignments/uri-schemes/prov/v-event"},{scheme:"ventrilo",description:"ventrilo",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ventrilo"},{scheme:"view-source",description:"view-source",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/view-source"},{scheme:"webcal",description:"webcal",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/webcal"},{scheme:"wpid",description:"wpid",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/wpid"},{scheme:"wtai",description:"wtai",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/wtai"},{scheme:"wyciwyg",description:"wyciwyg",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/wyciwyg"},{scheme:"xfire",description:"xfire",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/xfire"},{scheme:"xri",description:"xri",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/xri"},{scheme:"ymsgr",description:"ymsgr",reference:[],template:"http://www.iana.org/assignments/uri-schemes/prov/ymsgr"}]});var IG=N((MD,xU)=>{xU.exports=[{scheme:"fax",description:"fax",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc2806"},{type:"rfc",href:"http://www.iana.org/go/rfc3966"}]},{scheme:"filesystem",description:"filesystem",reference:[],template:"http://www.iana.org/assignments/uri-schemes/historic/filesystem"},{scheme:"mailserver",description:"Access to data available from mail servers",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc6196"}]},{scheme:"modem",description:"modem",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc2806"},{type:"rfc",href:"http://www.iana.org/go/rfc3966"}]},{scheme:"pack",description:"pack",reference:[{type:"draft",href:"http://www.iana.org/go/draft-shur-pack-uri-scheme"}],template:"http://www.iana.org/assignments/uri-schemes/historic/pack"},{scheme:"prospero",description:"Prospero Directory Service",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc4157"}]},{scheme:"snews",description:"NNTP over SSL/TLS",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc5538"}]},{scheme:"videotex",description:"videotex",reference:[{type:"draft",href:"http://www.iana.org/go/draft-mavrakis-videotex-url-spec"},{type:"rfc",href:"http://www.iana.org/go/rfc2122"},{type:"rfc",href:"http://www.iana.org/go/rfc3986"}],template:"http://www.iana.org/assignments/uri-schemes/historic/videotex"},{scheme:"wais",description:"Wide Area Information Servers",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc4156"}]},{scheme:"z39.50",description:"Z39.50 information access",reference:[{type:"rfc",href:"http://www.iana.org/go/rfc1738"},{type:"rfc",href:"http://www.iana.org/go/rfc2056"}]}]});var TG=N((LD,lU)=>{lU.exports=[{scheme:"android-app"},{scheme:"webpack"},{scheme:"s3",description:"Amazon Web Services S3 bucket"},{scheme:"gs",description:"Google Cloud Storage"},{scheme:"mqtt",description:"Message Queuing Telemetry Transport Protocol"},{scheme:"modbus+tcp",description:"Modbus over TCP"}]});var xQ=N(($D,PG)=>{var _Q=NG(),P5={permanent:OG(),provosional:DG(),historical:IG()},X8={};Object.keys(P5).forEach(function(w){P5[w].forEach(function(Q){X8[Q.scheme]=_Q(Q,{type:w})})});P5.unofficial=TG().filter(function(w){return!X8[w.scheme]});P5.unofficial.forEach(function(w){X8[w.scheme]=_Q(w,{type:"unofficial"})});PG.exports=_Q(P5,{allByName:X8})});var bG=N((AD,RG)=>{var{parse:iU}=_9(),{addressParser:mU}=Y8(),pU=xQ();function cU(w){try{return mU(w),!0}catch(Q){return!1}}RG.exports=(w)=>{let Q=iU(w);if(Q.scheme==="mailto"&&Q.to.every(cU))return!0;if(Q.reference==="absolute"&&pU.allByName[Q.scheme])return!0;return!1}});var EG=N((UD,SG)=>{SG.exports=/^P(?!$)(\d+(?:\.\d+)?Y)?(\d+(?:\.\d+)?M)?(\d+(?:\.\d+)?W)?(\d+(?:\.\d+)?D)?(T(?=\d)(\d+(?:\.\d+)?H)?(\d+(?:\.\d+)?M)?(\d+(?:\.\d+)?S)?)?$/});var fG=N((jD,kG)=>{var{parse:dU}=Y8();kG.exports=(w)=>{try{return dU(w),!0}catch(Q){return!1}}});var hG={};LW(hG,{default:()=>oU});var nU,rU,R5,lQ,iQ,sU=(w,Q,W)=>{for(let Z of lQ(Q))if(!iQ.call(w,Z)&&Z!=="default")R5(w,Z,{get:()=>Q[Z],enumerable:!0});if(W){for(let Z of lQ(Q))if(!iQ.call(W,Z)&&Z!=="default")R5(W,Z,{get:()=>Q[Z],enumerable:!0});return W}},CG=(w,Q,W)=>{W=w!=null?nU(rU(w)):{};let Z=Q||!w||!w.__esModule?R5(W,"default",{value:w,enumerable:!0}):W;for(let Y of lQ(w))if(!iQ.call(Z,Y))R5(Z,Y,{get:()=>w[Y],enumerable:!0});return Z},aU=(w,Q)=>()=>(Q||w((Q={exports:{}}).exports,Q),Q.exports),tU=(w,Q)=>{for(var W in Q)R5(w,W,{get:Q[W],enumerable:!0,configurable:!0,set:(Z)=>Q[W]=()=>Z})},vG,yG,uG,oU;var gG=uz(()=>{nU=Object.create,{getPrototypeOf:rU,defineProperty:R5,getOwnPropertyNames:lQ}=Object,iQ=Object.prototype.hasOwnProperty,vG=aU((w,Q)=>{var W=/^xn--/,Z=/[^\0-\x7F]/,Y=/[\x2E\u3002\uFF0E\uFF61]/g,J={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},X=Math.floor,q=String.fromCharCode;function G(O){throw RangeError(J[O])}function z(O,S){let i=[],g=O.length;while(g--)i[g]=S(O[g]);return i}function F(O,S){let i=O.split("@"),g="";if(i.length>1)g=i[0]+"@",O=i[1];O=O.replace(Y,".");let Zw=O.split("."),c=z(Zw,S).join(".");return g+c}function K(O){let S=[],i=0,g=O.length;while(i<g){let Zw=O.charCodeAt(i++);if(Zw>=55296&&Zw<=56319&&i<g){let c=O.charCodeAt(i++);if((c&64512)==56320)S.push(((Zw&1023)<<10)+(c&1023)+65536);else S.push(Zw),i--}else S.push(Zw)}return S}var A=(O)=>String.fromCodePoint(...O),V=function(O){if(O>=48&&O<58)return 26+(O-48);if(O>=65&&O<91)return O-65;if(O>=97&&O<123)return O-97;return 36},M=function(O,S){return O+22+75*(O<26)-((S!=0)<<5)},H=function(O,S,i){let g=0;O=i?X(O/700):O>>1,O+=X(O/S);for(;O>455;g+=36)O=X(O/35);return X(g+36*O/(O+38))},U=function(O){let S=[],i=O.length,g=0,Zw=128,c=72,Uw=O.lastIndexOf("-");if(Uw<0)Uw=0;for(let Gw=0;Gw<Uw;++Gw){if(O.charCodeAt(Gw)>=128)G("not-basic");S.push(O.charCodeAt(Gw))}for(let Gw=Uw>0?Uw+1:0;Gw<i;){let Iw=g;for(let pw=1,F0=36;;F0+=36){if(Gw>=i)G("invalid-input");let K0=V(O.charCodeAt(Gw++));if(K0>=36)G("invalid-input");if(K0>X((2147483647-g)/pw))G("overflow");g+=K0*pw;let I0=F0<=c?1:F0>=c+26?26:F0-c;if(K0<I0)break;let a0=36-I0;if(pw>X(2147483647/a0))G("overflow");pw*=a0}let hw=S.length+1;if(c=H(g-Iw,hw,Iw==0),X(g/hw)>2147483647-Zw)G("overflow");Zw+=X(g/hw),g%=hw,S.splice(g++,0,Zw)}return String.fromCodePoint(...S)},j=function(O){let S=[];O=K(O);let i=O.length,g=128,Zw=0,c=72;for(let Iw of O)if(Iw<128)S.push(q(Iw));let Uw=S.length,Gw=Uw;if(Uw)S.push("-");while(Gw<i){let Iw=2147483647;for(let pw of O)if(pw>=g&&pw<Iw)Iw=pw;let hw=Gw+1;if(Iw-g>X((2147483647-Zw)/hw))G("overflow");Zw+=(Iw-g)*hw,g=Iw;for(let pw of O){if(pw<g&&++Zw>2147483647)G("overflow");if(pw===g){let F0=Zw;for(let K0=36;;K0+=36){let I0=K0<=c?1:K0>=c+26?26:K0-c;if(F0<I0)break;let a0=F0-I0,N1=36-I0;S.push(q(M(I0+a0%N1,0))),F0=X(a0/N1)}S.push(q(M(F0,0))),c=H(Zw,hw,Gw===Uw),Zw=0,++Gw}}++Zw,++g}return S.join("")},T=function(O){return F(O,function(S){return W.test(S)?U(S.slice(4).toLowerCase()):S})},P=function(O){return F(O,function(S){return Z.test(S)?"xn--"+j(S):S})},b={version:"2.3.1",ucs2:{decode:K,encode:A},decode:U,encode:j,toASCII:P,toUnicode:T};Q.exports=b}),yG={};tU(yG,{default:()=>uG.default});sU(yG,CG(vG(),1));uG=CG(vG(),1),oU=uG.default});var xG=N((ND,_G)=>{var{toASCII:eU}=(gG(),MW(hG)),wj=/^(?=.{1,253}\.?$)[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[-0-9a-z]{0,61}[0-9a-z])?)*\.?$/i;_G.exports=(w)=>{let Q=eU(w);return Q.replace(/\.$/,"").length<=253&&wj.test(Q)}});var mG=N((OD,iG)=>{var{parse:Qj}=_9(),{addressParser:Wj}=Y8(),lG=xQ();function Zj(w){try{return Wj(w),!0}catch(Q){return!1}}iG.exports=(w)=>{let Q=Qj(w);if(Q.scheme==="mailto"&&Q.to.every(Zj))return!0;if(Q.reference==="absolute"&&Q.path!==void 0&&lG.allByName[Q.scheme])return!0;if(Q.scheme&&!lG.allByName[Q.scheme])return!1;return Q.path!==void 0&&(Q.reference==="relative"||Q.reference==="same-document"||Q.reference==="uri")}});var pG=N((DD,j1)=>{DD.iri=bG();DD.duration=EG();DD["idn-email"]=fG();DD["idn-hostname"]=xG();DD["iri-reference"]=mG()});var nG=N((ID,dG)=>{var cG=pG();dG.exports=(w,Q={})=>{let W=Object.keys(cG),Z=W;if(Q.formats){if(!Array.isArray(Q.formats))throw Error("options.formats must be an array");Z=Q.formats}return W.filter((Y)=>Z.includes(Y)).forEach((Y)=>{w.addFormat(Y,cG[Y])}),w}});var Hj={};LW(Hj,{default:()=>S5});var gz=(()=>({}));var UW=C5(AW(),1);var y5=UW.default;/*!
|
|
2
30
|
* activity-streams
|
|
3
31
|
* https://github.com/silverbucket/activity-streams
|
|
4
32
|
*
|
|
@@ -13,7 +41,7 @@
|
|
|
13
41
|
* You are free to use, modify and distribute this software, but all copyright
|
|
14
42
|
* information must remain.
|
|
15
43
|
*
|
|
16
|
-
*/var q=new H,C={stream:["id","type","actor","target","object","context","context","published","error"],object:["id","type","context","alias","attachedTo","attachment","attributedTo","attributedWith","condition","content","contentMap","context","contextOf","name","endTime","generator","generatorOf","group","icon","image","inReplyTo","members","memberOf","message","location","locationOf","objectOf","originOf","presence","preview","previewOf","provider","providerOf","published","rating","relationship","resultOf","replies","role","scope","scopeOf","startTime","status","summary","topic","tag","tagOf","targetOf","title","titleMap","updated","url","xmpp:stanza-id"]},k={"@id":"id","@type":"type",verb:"type",displayName:"name",objectType:"type",platform:"context"},E={actor:{primary:"id",props:C},target:{primary:"id",props:C},object:{primary:"content",props:C}},_=new Map,U={},A=!1,S=!0,y=[];function o(z,B){if(U[z]instanceof Object){if(U[z].includes(B))return!0}return!1}function i(z,B){return z[k[B]]=z[B],delete z[B],z}function w(z,B,D=!1){if(B===null)throw Error(`ActivityStreams validation failed: the "${z}" property is null. Example: { id: "user@example.com", type: "person" }`);if(B===void 0)throw Error(`ActivityStreams validation failed: the "${z}" property is undefined. Example: { id: "user@example.com", type: "person" }`);if(typeof B==="string")throw Error(`ActivityStreams validation failed: the "${z}" property received string "${B}" but expected an object. Use: { id: "${B}", type: "person" }`);if(typeof B!=="object"||Array.isArray(B)){let R=Array.isArray(B)?"array":typeof B,Q=String(B);throw Error(`ActivityStreams validation failed: the "${z}" property must be an object, received ${R} (${Q}). Example: { id: "user@example.com", type: "person" }`)}if(D&&!B.id)throw Error(`ActivityStreams validation failed: the "${z}" property requires an 'id' property. Example: { id: "user@example.com", type: "person" }`);let W=Object.keys(B).filter((R)=>{return!C[z].includes(R)});for(let R of W){let Q=B;if(k[R]){Q=i(Q,R);continue}if(o(Q.type,R))continue;if(!y.includes(Q.type)){console.log(Q);let $=typeof Q[R]==="string"?`"${Q[R]}"`:String(Q[R]),J=`ActivityStreams validation failed: property "${R}" with value ${$} is not allowed on the "${z}" object of type "${Q.type}".`;if(A)throw Error(J);if(S)console.warn(J)}}}function O(z){return z}function n(z){let B={};for(let D of Object.keys(z))if(typeof z[D]==="string")B[D]=_.get(z[D])||z[D];else if(Array.isArray(z[D])){B[D]=[];for(let G of z[D])if(typeof G==="string")B[D].push(_.get(G)||G)}else B[D]=z[D];for(let D of Object.keys(E))if(typeof B[D]==="string"){let G=E[D].primary,W={};W[G]=B[D],B[D]=W}return B}function t(z){if(w("stream",z),typeof z.object==="object")w("object",z.object);let B=n(z);return q.emit("activity-stream",B),B}var e={create:(z)=>{w("object",z,!0);let B=O(z);return _.set(B.id,B),q.emit("activity-object-create",B),B},delete:(z)=>{let B=_.delete(z);if(B)q.emit("activity-object-delete",z);return B},get:(z,B)=>{let D=_.get(z);if(!D){if(!B)return z;D={id:z}}return O(D)},list:()=>_.keys()};function h(z={}){y=z?.specialObjs||[],A=typeof z.failOnUnknownObjectProperties==="boolean"?z.failOnUnknownObjectProperties:A,S=typeof z.warnOnUnknownObjectProperties==="boolean"?z.warnOnUnknownObjectProperties:S;for(let B of Object.keys(z.customProps||{}))if(typeof z.customProps[B]==="object")U[B]=z.customProps[B];return{Stream:t,Object:e,on:(B,D)=>q.on(B,D),once:(B,D)=>q.once(B,D),off:(B,D)=>q.off(B,D)}}((z)=>{z.ASFactor=h})(typeof window==="object"?window:{});class M{events={credentials:new Map,"activity-object":new Map,connect:new Map,join:new Map};_socket;ActivityStreams;socket;debug=!0;constructor(z){if(!z)throw Error("SockethubClient requires a socket.io instance");this._socket=z,this.socket=this.createPublicEmitter(),this.registerSocketIOHandlers(),this.initActivityStreams(),this.ActivityStreams.on("activity-object-create",(B)=>{z.emit("activity-object",B,(D)=>{if(D)console.error("failed to create activity-object ",D);else this.eventActivityObject(B)})}),z.on("activity-object",(B)=>{this.ActivityStreams.Object.create(B)})}initActivityStreams(){this.ActivityStreams=h({specialObjs:["credentials"]})}clearCredentials(){this.events.credentials.clear()}createPublicEmitter(){let z=new H;return z._emit=z.emit,z.emit=(B,D,G)=>{if(B==="credentials")this.eventCredentials(D);else if(B==="activity-object")this.eventActivityObject(D);else if(B==="message")this.eventMessage(D);this._socket.emit(B,D,G)},z.connected=!1,z.disconnect=()=>{this._socket.disconnect()},z.connect=()=>{this._socket.connect()},z}eventActivityObject(z){if(z.id)this.events["activity-object"].set(z.id,z)}eventCredentials(z){if(z.object&&z.object.type==="credentials"){let B=z.actor.id||z.actor;this.events.credentials.set(B,z)}}eventMessage(z){if(!this._socket.connected)return;let B=M.getKey(z);if(z.type==="join"||z.type==="connect")this.events[z.type].set(B,z);else if(z.type==="leave")this.events.join.delete(B);else if(z.type==="disconnect")this.events.connect.delete(B)}static getKey(z){let B=z.actor?.id||z.actor;if(!B)throw Error(`actor property not present for message type: ${z?.type}`);let D=z.target?z.target.id||z.target:"";return`${B}-${D}`}log(z,B){if(this.debug)console.log(z,B)}registerSocketIOHandlers(){let z=(B)=>{return async(D)=>{if(B==="connect")this.socket.id=this._socket.id,this.socket.connected=!0,this.replay("activity-object",this.events["activity-object"]),this.replay("credentials",this.events.credentials),this.replay("message",this.events.connect),this.replay("message",this.events.join);else if(B==="disconnect")this.socket.connected=!1;this.socket._emit(B,D)}};this._socket.on("connect",z("connect")),this._socket.on("connect_error",z("connect_error")),this._socket.on("disconnect",z("disconnect")),this._socket.on("message",(B)=>{this.socket._emit("message",this.ActivityStreams.Stream(B))})}hasActorId(z){return"actor"in z&&z.actor!==null&&typeof z.actor==="object"&&"id"in z.actor&&typeof z.actor.id==="string"}replay(z,B){for(let D of B.values()){let G=z==="activity-object",W=G?D:this.ActivityStreams.Stream(D),R=W?.id;if(!G&&this.hasActorId(W)){let Q=W.actor;R=typeof Q==="string"?Q:Q.id}this.log(`replaying ${z} for ${R}`),this._socket.emit(z,W)}}}((z)=>{z.SockethubClient=M})(typeof window==="object"?window:{});})();
|
|
44
|
+
*/var m6=new y5,u5={stream:["@context","id","type","platform","actor","target","object","published","error"],object:["id","type","context","alias","attachedTo","attachment","attributedTo","attributedWith","condition","content","contentMap","context","contextOf","name","endTime","generator","generatorOf","group","icon","image","inReplyTo","members","memberOf","message","location","locationOf","objectOf","originOf","presence","preview","previewOf","provider","providerOf","published","rating","relationship","resultOf","replies","role","scope","scopeOf","startTime","status","summary","topic","tag","tagOf","targetOf","title","titleMap","updated","url","xmpp:stanza-id"]},jW={actor:{primary:"id",props:u5},target:{primary:"id",props:u5},object:{primary:"content",props:u5}},i6=new Map,OW={},$8=!1,A8=!0,DW=[];function lz(w,Q){let W=OW[w];return Array.isArray(W)&&W.includes(Q)}function U8(w,Q,W=!1){if(Q===null)throw Error(`ActivityStreams validation failed: the "${w}" property is null. Example: { id: "user@example.com", type: "person" }`);if(Q===void 0)throw Error(`ActivityStreams validation failed: the "${w}" property is undefined. Example: { id: "user@example.com", type: "person" }`);if(typeof Q==="string")throw Error(`ActivityStreams validation failed: the "${w}" property received string "${Q}" but expected an object. Use: { id: "${Q}", type: "person" }`);if(typeof Q!=="object"||Array.isArray(Q)){let q=Array.isArray(Q)?"array":typeof Q,G=String(Q);throw Error(`ActivityStreams validation failed: the "${w}" property must be an object, received ${q} (${G}). Example: { id: "user@example.com", type: "person" }`)}if(W&&!Q.id)throw Error(`ActivityStreams validation failed: the "${w}" property requires an 'id' property. Example: { id: "user@example.com", type: "person" }`);let Y=Q,J=u5[w],X=Object.keys(Y).filter((q)=>{return!J.includes(q)});for(let q of X){let G=Q;if(lz(G.type,q))continue;if(!DW.includes(G.type)){console.log(G);let z=typeof G[q]==="string"?`"${G[q]}"`:String(G[q]),F=`ActivityStreams validation failed: property "${q}" with value ${z} is not allowed on the "${w}" object of type "${G.type}".`;if($8)throw Error(F);if(A8)console.warn(F)}}}function NW(w){return w}function iz(w){let Q={},W=w;for(let Z of Object.keys(W)){let Y=W[Z];if(typeof Y==="string")Q[Z]=i6.get(Y)||Y;else if(Array.isArray(Y)){let J=[];for(let X of Y)if(typeof X==="string")J.push(i6.get(X)||X);Q[Z]=J}else Q[Z]=Y}for(let Z of Object.keys(jW)){let Y=Q[Z];if(typeof Y==="string"){let J=jW[Z].primary;Q[Z]={[J]:Y}}}return Q}function mz(w){if(U8("stream",w),typeof w.object==="object")U8("object",w.object);let Q=iz(w);return m6.emit("activity-stream",Q),Q}var pz={create:(w)=>{U8("object",w,!0);let Q=NW(w);return i6.set(Q.id,Q),m6.emit("activity-object-create",Q),Q},delete:(w)=>{let Q=i6.delete(w);if(Q)m6.emit("activity-object-delete",w);return Q},get:(w,Q)=>{let W=i6.get(w);if(!W){if(!Q)return w;W={id:w}}return NW(W)},list:()=>i6.keys()};function j8(w={}){DW=w?.specialObjs||[],$8=typeof w.failOnUnknownObjectProperties==="boolean"?w.failOnUnknownObjectProperties:$8,A8=typeof w.warnOnUnknownObjectProperties==="boolean"?w.warnOnUnknownObjectProperties:A8;let Q=w.customProps||{};for(let W of Object.keys(Q))OW[W]=Q[W];return{Stream:mz,Object:pz,on:(W,Z)=>m6.on(W,Z),once:(W,Z)=>m6.once(W,Z),off:(W,Z)=>m6.off(W,Z)}}((w)=>{w.ASFactor=j8})(typeof globalThis==="object"?globalThis:{});var N8="https://www.w3.org/ns/activitystreams",O8="https://sockethub.org/ns/context/v1.jsonld";var D8="error",I8="https://sockethub.org/ns/context/platform/error/v1.jsonld",T8="sockethub:internal",P8="https://sockethub.org/ns/context/platform/sockethub:internal/v1.jsonld",R8=new Map,IW=new Map,TW=new Map;function cz(w){if(!Array.isArray(w))return[];return w.filter((Q)=>typeof Q==="string")}function dz(w){return cz(w["@context"])}function b8(w,Q,W,Z){R8.set(Q,w),IW.set(Q,W),TW.set(Q,Z)}function h5(w){let W=dz(w).filter((Z)=>R8.has(Z));if(W.length!==1)return null;return W[0]}function PW(w){return R8.get(w)}function RW(w){return IW.get(w)}function bW(w){return TW.get(w)}var g5=[],S8={},_5={credentials:{required:["type"],additionalProperties:!0,properties:{type:{enum:["credentials"]}}},feed:{required:["id","type"],additionalProperties:!0,properties:{type:{enum:["feed"]},id:{type:"string",format:"iri"},name:{type:"string"},description:{type:"string"},author:{type:"string"},favicon:{type:"string"}}},message:{required:["type","content"],additionalProperties:!0,properties:{type:{enum:["message"]},id:{type:"string"},name:{type:"string"},content:{type:"string"}}},me:{required:["type","content"],additionalProperties:!0,properties:{type:{enum:["me"]},content:{type:"string"}}},person:{required:["id","type"],additionalProperties:!0,properties:{id:{type:"string"},type:{enum:["person"]},name:{type:"string"}}},room:{required:["id","type"],additionalProperties:!0,properties:{id:{type:"string"},type:{enum:["room"]},name:{type:"string"}}},service:{required:["id","type"],additionalProperties:!0,properties:{id:{type:"string"},type:{enum:["service"]},name:{type:"string"}}},platform:{required:["id","type"],additionalProperties:!0,properties:{id:{type:"string"},type:{enum:["platform"]},name:{type:"string"}}},website:{required:["id","type"],additionalProperties:!0,properties:{id:{type:"string",format:"iri"},type:{enum:["website"]},name:{type:"string"}}},attendance:{required:["type"],additionalProperties:!1,properties:{type:{enum:["attendance"]},members:{type:"array",items:{type:"string"}}}},presence:{required:["type"],additionalProperties:!1,properties:{type:{enum:["presence"]},presence:{enum:["away","chat","dnd","xa","offline","online"]},role:{enum:["owner","member","participant","admin"]},content:{type:"string"}}},relationship:{required:["type","relationship"],additionalProperties:!1,properties:{type:{enum:["relationship"]},relationship:{enum:["role"]},subject:{type:"object",oneOf:[{$ref:"#/definitions/type/presence"}]},object:{type:"object",oneOf:g5}}},topic:{required:["type"],additionalProperties:!1,properties:{type:{enum:["topic"]},content:{type:"string"}}},address:{required:["type"],additionalProperties:!1,properties:{type:{enum:["address"]}}},heartbeat:{required:["type","timestamp"],additionalProperties:!1,properties:{type:{enum:["heartbeat"]},timestamp:{type:"number"}}}};var p6=Object.keys(_5),E8=["person","room","service","feed","website","platform"],k8=["person","room","service","feed","website","platform","address"],SW=E8.map((w)=>({$ref:`#/definitions/type/${w}`})),EW=k8.map((w)=>({$ref:`#/definitions/type/${w}`}));for(let w of p6){if(w==="credentials")continue;g5.push({$ref:`#/definitions/type/${w}`}),S8[w]=_5[w]}var f8={$id:"https://sockethub.org/schemas/v/activity-object.json",description:"Schema for Sockethub Activity Objects",type:"object",required:["object"],properties:{object:{type:"object",oneOf:g5}},definitions:{type:S8}};var kW=[];for(let w of p6)kW.push({$ref:`#/definitions/type/${w}`});var nz={type:"array",minItems:3,maxItems:3,items:{type:"string"},allOf:[{contains:{const:N8}},{contains:{const:O8}}]},rz={type:"string"},C8={$id:"https://sockethub.org/schemas/v/activity-stream.json",description:"Schema for Sockethub Activity Streams",type:"object",required:["@context","type","actor"],properties:{"@context":nz,id:{type:"string"},type:rz,actor:{type:"object",oneOf:SW},target:{type:"object",oneOf:EW},object:{type:"object",oneOf:kW},published:{type:"string",format:"date-time"}},definitions:{type:_5}};var v8={connectTimeoutMs:{type:"number"}},sz={$id:"https://sockethub.org/schemas/v/sockethub-config.json",description:"Sockethub Config Schema",type:"object",required:["platforms"],additionalProperties:!1,properties:{$schema:{type:"string"},examples:{type:"boolean",default:!0},logging:{type:"object",additionalProperties:!1,properties:{level:{type:"string",enum:["error","warn","info","debug"],default:"info"},fileLevel:{type:"string",enum:["error","warn","info","debug"],default:"debug"},file:{type:"string",default:"sockethub.log"}}},packageConfig:{type:"object",properties:{"@sockethub/activity-streams":{type:"object",additionalProperties:!1,properties:{specialObjs:{type:"array",items:{type:"string"},default:["credentials"]},failOnUnknownObjectProperties:{type:"boolean",default:!0}}},"@sockethub/platform-dummy":{type:"object",additionalProperties:!1,properties:{greeting:{type:"string",default:"Hello"}}},"@sockethub/platform-feeds":{type:"object",additionalProperties:!1,properties:{...v8}},"@sockethub/platform-irc":{type:"object",additionalProperties:!1,properties:{...v8}},"@sockethub/platform-xmpp":{type:"object",additionalProperties:!1,properties:{...v8}}}},platforms:{type:"array",items:{type:"string"},default:["@sockethub/platform-dummy","@sockethub/platform-feeds","@sockethub/platform-irc","@sockethub/platform-metadata","@sockethub/platform-xmpp"]},public:{type:"object",additionalProperties:!1,properties:{protocol:{type:"string",default:"http"},host:{type:"string",default:"localhost"},port:{type:"number",default:10550},path:{type:"string",default:"/"}}},rateLimiter:{type:"object",additionalProperties:!1,properties:{windowMs:{type:"number",default:1000},maxRequests:{type:"number",default:100},blockDurationMs:{type:"number",default:5000}}},redis:{type:"object",additionalProperties:!1,properties:{url:{type:"string",default:"redis://127.0.0.1:6379"},connectTimeout:{type:"number",default:1e4,description:"Connection timeout in milliseconds"},disconnectTimeout:{type:"number",default:5000,description:"Disconnect timeout in milliseconds"},maxRetriesPerRequest:{type:["number","null"],default:null,description:"Maximum number of retries per request (null for BullMQ default)"}}},sentry:{type:"object",additionalProperties:!1,properties:{dsn:{type:"string",default:""},traceSampleRate:{type:"number",default:1}}},sockethub:{type:"object",additionalProperties:!1,properties:{port:{type:"number",default:10550},host:{type:"string",default:"localhost"},path:{type:"string",default:"/sockethub"}}},platformHeartbeat:{type:"object",additionalProperties:!1,properties:{intervalMs:{type:"number",default:5000},timeoutMs:{type:"number",default:15000}}}}};var aG=C5(AJ(),1),tG=C5(YG(),1),oG=C5(nG(),1);function Yj(w){let Q=`${w.instancePath?w.instancePath:"activity stream"}: ${w.message}`;if(w.keyword==="additionalProperties")Q+=`: ${w.params.additionalProperty}`;else if(w.keyword==="enum")Q+=`: ${w.params.allowedValues.join(", ")}`;return Q}function b5(w){let Q=[];if(w?.type)Q.push(w.type);let W=w;for(let Z in W){let Y=W[Z];if(Y&&typeof Y==="object"&&"type"in Y)Q.push(...b5(Y))}return Q}function Jj(w){let Q=w.schemaPath.match(/#\/\w+\/\w+\/([\w-]+)\//);return Q?Q[1]:void 0}function Xj(w){let Q=w.instancePath.match(/\/(\w+)/);return Q?Q[1]:void 0}function qj(w,Q){let W=Jj(w),Z=Xj(w);if(!Z)return-1;let Y=Q[Z];if(!Y)return-1;if(!W||!Y.includes(W))return-1;return w.instancePath.split("/").length}function Gj(w){if(!Array.isArray(w["@context"]))return{actor:[],target:[],object:b5(w)};let Q=w;return{actor:b5(Q.actor),target:b5(Q.target),object:Q.object?b5(Q.object):[]}}function mQ(w,Q,W){let Z=Gj(w),Y=0,J=-1;for(let X=0;X<Q.length;X++){let q=qj(Q[X],Z);if(q>J)J=q,Y=X}return J>=0?Yj(Q[Y]):Fj(Q[Q.length-1],W)}function zj(w,Q){if(!Q?.excludeTypes||Q.excludeTypes.length===0)return w;let W=new Set(Q.excludeTypes);return w.filter((Z)=>!W.has(Z))}function Fj(w,Q){let W;if(w.keyword==="oneOf"){let Z=w.instancePath.split("/")[1],Y=Z==="actor"?E8:Z==="target"?k8:p6,J=zj(Y,Q),X=J.length>0?J:Y;W=`${w.instancePath}: ${w.message}: ${X.join(", ")}`}else W=`${w.instancePath?w.instancePath:"activity stream"}: ${w.message}`;if("additionalProperty"in w.params)W+=`: ${w.params.additionalProperty}`;return W}var h0=new aG.default({strictTypes:!1,allErrors:!0});tG.default(h0);oG.default(h0);var D0="https://sockethub.org/schemas/v0",q8={},Bj={},rG=!1;q8[`${D0}/activity-stream`]=C8;q8[`${D0}/activity-object`]=f8;for(let w in q8)h0.addSchema(q8[w],w);function sG(w,Q){b8(w,Q,`${D0}/context/${w}/messages`,`${D0}/context/${w}/credentials`);let W=`${D0}/context/${w}/messages`;if(!h0.getSchema(W))h0.addSchema({},W);let Z=`${D0}/context/${w}/credentials`;if(!h0.getSchema(Z))h0.addSchema({},Z)}function eG(){if(rG)return;sG(D8,I8),sG(T8,P8),rG=!0}eG();function G8(w,Q,W=!1){let Z=h0.getSchema(w);if(!Z)return`schema ${w} not found`;let Y;if(W)Y=Z({object:Q});else Y=Z(Q);if(!Y){let J=mQ(Q,Z.errors,Bj);if(Array.isArray(Q["@context"])){let X=h5(Q);if(X){let q=PW(X);if(q)J=`[${q}] ${J}`}}return J}return""}function pQ(w){let Q=G8(`${D0}/activity-stream`,w);if(Q)return Q;let W=h5(w);if(!W)return"activity streams must have exactly one registered platform context URL in @context";let Z=RW(W);if(!Z)return`platform context URL ${W} does not have a registered message schema`;return G8(Z,w)}function cQ(w){if(!Array.isArray(w["@context"]))return"credential activity streams must have an @context set";if(w.type!=="credentials")return"credential activity streams must have credentials set as type";let Q=G8(`${D0}/activity-stream`,w);if(Q)return Q;let W=h5(w);if(!W)return"credential activity streams must have exactly one registered platform context URL in @context";let Z=bW(W);if(!Z)return`platform context URL ${W} does not have a registered credentials schema`;return G8(Z,w)}function z8(w,Q){let W=`${D0}/context/${Q}`;if(!h0.getSchema(W))h0.addSchema(w,W)}function dQ(w,Q){b8(w,Q,`${D0}/context/${w}/messages`,`${D0}/context/${w}/credentials`)}class S5{events={credentials:new Map,"activity-object":new Map,connect:new Map,join:new Map};_socket;ActivityStreams;socket;debug=!0;options;platformRegistry=new Map;asContextUrl;sockethubContextUrl;sockethubVersion;initState="idle";hasReadyOnce=!1;initCycle;initTokenCounter=0;initTimeoutTimer;waitingWarningTimer;waitingWarningIntervalMs=1e4;readyWaiters=[];outboundQueue=[];outboundSequence=0;registryFingerprint;latestReadyInfo;constructor(w,Q={}){if(!w)throw Error("SockethubClient requires a socket.io instance");if(this._socket=w,this.options={initTimeoutMs:Q.initTimeoutMs??5000,maxQueuedOutbound:Q.maxQueuedOutbound??1000,maxQueuedAgeMs:Q.maxQueuedAgeMs??30000},this.socket=this.createPublicEmitter(),this.registerSocketIOHandlers(),this.initActivityStreams(),this.ActivityStreams.on("activity-object-create",(W)=>{this.socket.emit("activity-object",W,(Z)=>{if(Z&&typeof Z.error==="string"){console.error("failed to create activity-object ",Z.error);return}this.eventActivityObject(W)})}),w.on("activity-object",(W)=>{this.ActivityStreams.Object.create(W)}),this._socket.connected)this.socket.connected=!0,this.socket.id=this._socket.id,this.socket._emit("connect"),this.startInitialization("initial-connect",!0)}initActivityStreams(){this.ActivityStreams=j8({specialObjs:["credentials"]})}clearCredentials(){this.events.credentials.clear()}getRegisteredPlatforms(){return Array.from(this.platformRegistry.values()).map((w)=>({...w,types:[...w.types],schemas:{...w.schemas}}))}isSchemasReady(){return this.isReady()}isReady(){return this.initState==="ready"}getInitState(){return this.initState}getRegisteredBaseContexts(){if(!this.asContextUrl||!this.sockethubContextUrl)throw Error("Schema registry not loaded yet. Wait for client ready state after connect.");return{as:this.asContextUrl,sockethub:this.sockethubContextUrl}}getPlatformSchema(w,Q="messages"){let W=w?.trim();if(!W)return;return this.platformRegistry.get(W)?.schemas?.[Q]}async waitForSchemas(w=2000){return await this.ready(w),this.buildPlatformRegistryPayload()}ready(w=this.options.initTimeoutMs){if(this.isReady()&&this.latestReadyInfo)return Promise.resolve(this.latestReadyInfo);return new Promise((Q,W)=>{let Z={resolve:Q,reject:W};if(w>0)Z.timer=setTimeout(()=>{this.readyWaiters=this.readyWaiters.filter((Y)=>Y!==Z),W(Error(`SockethubClient ready() timed out after ${w}ms`))},w);if(this.readyWaiters.push(Z),this.socket.connected&&this.initState==="idle")this.startInitialization(this.hasReadyOnce?"reconnect":"initial-connect",!0)})}validateActivity(w){if(w.type==="credentials")return cQ(w);return pQ(w)}contextFor(w){if(typeof w!=="string"||w.trim().length===0)throw Error("SockethubClient.contextFor(platform) requires a non-empty platform string");if(!this.asContextUrl||!this.sockethubContextUrl)throw Error("Schema registry not loaded yet. Wait for client ready state after connect.");let Q=w.trim(),W=this.platformRegistry.get(Q);if(!W){let Z=Array.from(this.platformRegistry.keys()).sort();throw Error(`unknown platform '${Q}'. Registered platforms: ${Z.join(", ")}`)}return[this.asContextUrl,this.sockethubContextUrl,W.contextUrl]}createPublicEmitter(){let w=new y5;return w._emit=w.emit,w.emit=(Q,W,Z)=>{this.handlePublicEmit(Q,W,Z)},w.connected=!1,w.disconnect=()=>{this._socket.disconnect()},w.connect=()=>{this._socket.connect()},w}requestSchemaRegistry(){if(!("io"in this._socket))return;this._socket.emit("schemas",(Q)=>{this.handleSchemasPayload(Q)})}applyPlatformRegistry(w){if(!w||typeof w!=="object")return;let Q=w,W=Q.contexts?.as,Z=Q.contexts?.sockethub;if(typeof W!=="string"||typeof Z!=="string"||!Array.isArray(Q.platforms))return;this.sockethubVersion=typeof Q.version==="string"?Q.version:"unknown",this.asContextUrl=W,this.sockethubContextUrl=Z,this.platformRegistry.clear();for(let J of Q.platforms){if(!J||typeof J!=="object"||typeof J.id!=="string"||typeof J.version!=="string"||typeof J.contextUrl!=="string")continue;this.platformRegistry.set(J.id,{...J,version:J.version,types:Array.isArray(J.types)?J.types:[],schemas:J.schemas||{}}),dQ(J.id,J.contextUrl);try{let X=J.schemas?.credentials;if(X&&typeof X==="object"&&!Array.isArray(X))z8(X,`${J.id}/credentials`);let q=J.schemas?.messages;if(q&&typeof q==="object"&&!Array.isArray(q))z8(q,`${J.id}/messages`)}catch(X){let q=X instanceof Error?X.message:String(X);console.warn(`[SockethubClient] Failed to register schemas for platform ${J.id}: ${q}`)}}let Y=this.buildPlatformRegistryPayload();return this.registryFingerprint=this.computePayloadFingerprint(Y),this.socket._emit("schemas",Y),Y}eventActivityObject(w){if(w.id)this.events["activity-object"].set(w.id,w)}eventCredentials(w){if(w.object&&w.object.type==="credentials"){let Q=w.actor.id||w.actor;this.events.credentials.set(Q,w)}}eventMessage(w){if(!this._socket.connected)return;let Q=S5.getKey(w);if(w.type==="join"||w.type==="connect")this.events[w.type].set(Q,w);else if(w.type==="leave")this.events.join.delete(Q);else if(w.type==="disconnect")this.events.connect.delete(Q)}static getKey(w){let Q=w.actor?.id||w.actor;if(!Q)throw Error(`actor property not present for message type: ${w?.type}`);let W=w.target?w.target.id||w.target:"";return`${Q}-${W}`}buildPlatformRegistryPayload(){return{version:this.sockethubVersion,contexts:this.asContextUrl&&this.sockethubContextUrl?{as:this.asContextUrl,sockethub:this.sockethubContextUrl}:void 0,platforms:this.getRegisteredPlatforms()}}buildReadyInfo(w){if(!this.sockethubVersion||!this.asContextUrl||!this.sockethubContextUrl)return;return{state:"ready",reason:w,sockethubVersion:this.sockethubVersion,contexts:{as:this.asContextUrl,sockethub:this.sockethubContextUrl},platforms:this.getRegisteredPlatforms().map((Q)=>({id:Q.id,version:Q.version,contextUrl:Q.contextUrl,contextVersion:Q.contextVersion,schemaVersion:Q.schemaVersion,types:[...Q.types]}))}}resolveReadyWaiters(w){let Q=this.readyWaiters;this.readyWaiters=[];for(let W of Q){if(W.timer)clearTimeout(W.timer);W.resolve(w)}}rejectReadyWaiters(w){let Q=this.readyWaiters;this.readyWaiters=[];for(let W of Q){if(W.timer)clearTimeout(W.timer);W.reject(w)}}emitInitError(w,Q,W){this.socket._emit("init_error",{error:w,phase:Q,retrying:W})}emitClientError(w,Q,W){if(typeof Q==="function"){Q({error:W});return}this.socket._emit("client_error",{event:w,error:W})}clearInitTimers(){if(this.initTimeoutTimer)clearTimeout(this.initTimeoutTimer),this.initTimeoutTimer=void 0;if(this.waitingWarningTimer)clearInterval(this.waitingWarningTimer),this.waitingWarningTimer=void 0}startWaitingWarnings(){if(this.waitingWarningTimer)return;this.waitingWarningTimer=setInterval(()=>{if(this.isReady()||this.initState==="closed"){this.clearInitTimers();return}let w=this.outboundQueue.length,Q=this.outboundQueue[0],W=Q?((Date.now()-Q.enqueuedAt)/1000).toFixed(1):"0.0";console.warn(`[SockethubClient] Still waiting for schemas; queued outbound messages: ${w}; oldest queued age: ${W}s.`)},this.waitingWarningIntervalMs)}startInitialization(w,Q){if(!this.socket.connected||this.initState==="closed")return;let W=++this.initTokenCounter;this.initCycle={token:W,reason:w,startedAt:Date.now(),replayOnReady:Q,timedOut:!1},this.initState="initializing",this.clearInitTimers(),this.initTimeoutTimer=setTimeout(()=>{if(!this.initCycle||this.initCycle.token!==W)return;this.initCycle.timedOut=!0,this.initState="init_error";let Z=`Initialization timed out after ${this.options.initTimeoutMs}ms waiting for schemas`;console.warn(`[SockethubClient] ${Z}; queued outbound messages: ${this.outboundQueue.length}. Waiting for schemas event from server.`),this.emitInitError(Z,"timeout",!1),this.startWaitingWarnings()},this.options.initTimeoutMs);try{this.requestSchemaRegistry()}catch(Z){this.initState="init_error";let Y=Z instanceof Error?Z.message:String(Z);this.emitInitError(Y,"schemas-request",!1),this.startWaitingWarnings()}}markReady(w){let Q=this.initCycle,W=Boolean(Q?.replayOnReady);this.initCycle=void 0,this.clearInitTimers(),this.initState="ready",this.hasReadyOnce=!0;let Z=this.buildReadyInfo(w);if(!Z){let Y=Error("Failed to build ready payload");this.initState="init_error",this.emitInitError(Y.message,"schemas-apply",!0),this.rejectReadyWaiters(Y);return}if(this.socket._emit("ready",Z),this.latestReadyInfo=Z,this.resolveReadyWaiters(Z),W)this.replay("activity-object",this.events["activity-object"]),this.replay("credentials",this.events.credentials),this.replay("message",this.events.connect),this.replay("message",this.events.join);this.flushOutboundQueue()}computePayloadFingerprint(w){if(!w||typeof w!=="object")return;let Q=w;if(typeof Q.contexts?.as!=="string"||typeof Q.contexts?.sockethub!=="string"||!Array.isArray(Q.platforms))return;let W=Q.platforms.map((Z)=>({id:Z.id,version:Z.version,contextUrl:Z.contextUrl,contextVersion:Z.contextVersion,schemaVersion:Z.schemaVersion})).sort((Z,Y)=>Z.id.localeCompare(Y.id));return JSON.stringify({version:Q.version,contexts:Q.contexts,platforms:W})}handleSchemasPayload(w){if(!w||typeof w!=="object")return;let Q=this.computePayloadFingerprint(w);if(this.initState==="ready"&&!this.initCycle&&Q&&Q===this.registryFingerprint)return;if(this.initState==="ready"&&!this.initCycle)this.initState="initializing";if(!this.applyPlatformRegistry(w)){this.initState="init_error",this.emitInitError("Received invalid schemas payload from server","schemas-apply",!0),this.startWaitingWarnings();return}if(this.initCycle){this.markReady(this.initCycle.reason);return}this.markReady("schemas-update")}handlePublicEmit(w,Q,W){let Z={event:w,content:Q,callback:W,enqueuedAt:Date.now(),sequence:this.outboundSequence++};if(!this.isReady()){this.enqueueOutbound(Z);return}this.sendOutbound(Z)}enqueueOutbound(w){if(this.outboundQueue.push(w),this.outboundQueue.length<=this.options.maxQueuedOutbound)return;let Q=this.outboundQueue.shift();if(!Q)return;this.emitClientError(Q.event,Q.callback,"SockethubClient queue overflow before ready")}flushOutboundQueue(){if(!this.isReady()||this.outboundQueue.length===0)return;let w=Date.now(),Q=this.outboundQueue.sort((W,Z)=>W.sequence-Z.sequence);this.outboundQueue=[];for(let W of Q){if(w-W.enqueuedAt>this.options.maxQueuedAgeMs){this.emitClientError(W.event,W.callback,`SockethubClient queued message expired after ${this.options.maxQueuedAgeMs}ms before initialization`);continue}this.sendOutbound(W)}}sendOutbound(w){let Q=w.content;try{if(w.event==="credentials"||w.event==="message"){if(Q=this.ActivityStreams.Stream(w.content),Q&&typeof Q==="object"){let W=Q;if(!W["@context"]&&typeof W.platform==="string"&&W.platform.trim().length>0)W["@context"]=this.contextFor(W.platform);if(w.event==="credentials"&&!W.type)W.type="credentials";if(W.actor&&typeof W.actor==="object"&&!W.actor.type)W.actor.type="person"}if(this.platformRegistry.size>0){let W=this.validateActivity(Q);if(W){this.emitClientError(w.event,w.callback,`SockethubClient validation failed: ${W}`);return}}}if(w.event==="credentials")this.eventCredentials(Q);else if(w.event==="message")this.eventMessage(Q);if(w.event==="activity-object"){let W=w.callback,Z=Q;this._socket.emit(w.event,Q,(Y)=>{if(Y&&typeof Y.error==="string"){if(Z.id)this.events["activity-object"].delete(Z.id)}else this.eventActivityObject(Z);if(typeof W==="function")W(Y)})}else this._socket.emit(w.event,Q,w.callback)}catch(W){let Z=W instanceof Error?W.message:String(W);this.emitClientError(w.event,w.callback,Z)}}log(w,Q){if(this.debug)console.log(w,Q)}registerSocketIOHandlers(){this._socket.on("connect",()=>{this.socket.id=this._socket.id,this.socket.connected=!0,this.socket._emit("connect"),this.startInitialization(this.hasReadyOnce?"reconnect":"initial-connect",!0)}),this._socket.on("connect_error",(w)=>{this.socket._emit("connect_error",w)}),this._socket.on("disconnect",(w)=>{if(this.socket.connected=!1,this.initState!=="closed")this.initState="idle";this.clearInitTimers(),this.socket._emit("disconnect",w)}),this._socket.on("schemas",(w)=>{this.handleSchemasPayload(w)}),this._socket.on("message",(w)=>{this.socket._emit("message",this.ActivityStreams.Stream(w))})}hasActorId(w){return"actor"in w&&w.actor!==null&&typeof w.actor==="object"&&"id"in w.actor&&typeof w.actor.id==="string"}replay(w,Q){for(let W of Q.values()){if(w==="activity-object"){let X=W,q=X?.id;this.log(`replaying ${w} for ${q}`),this._socket.emit(w,X);continue}let Y=this.ActivityStreams.Stream(W),J=Y?.id;if(this.hasActorId(Y)){let X=Y.actor;J=typeof X==="string"?X:X.id}this.log(`replaying ${w} for ${J}`),this._socket.emit(w,Y)}}}((w)=>{w.SockethubClient=S5})(typeof globalThis==="object"?globalThis:{});})();
|
|
17
45
|
|
|
18
|
-
//# debugId=
|
|
19
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vbm9kZV9tb2R1bGVzL2V2ZW50ZW1pdHRlcjMvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2V2ZW50ZW1pdHRlcjMvaW5kZXgubWpzIiwgIi4uL2FjdGl2aXR5LXN0cmVhbXMvc3JjL2FjdGl2aXR5LXN0cmVhbXMudHMiLCAic3JjL3NvY2tldGh1Yi1jbGllbnQudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbCiAgICAiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaGFzID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eVxuICAsIHByZWZpeCA9ICd+JztcblxuLyoqXG4gKiBDb25zdHJ1Y3RvciB0byBjcmVhdGUgYSBzdG9yYWdlIGZvciBvdXIgYEVFYCBvYmplY3RzLlxuICogQW4gYEV2ZW50c2AgaW5zdGFuY2UgaXMgYSBwbGFpbiBvYmplY3Qgd2hvc2UgcHJvcGVydGllcyBhcmUgZXZlbnQgbmFtZXMuXG4gKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBFdmVudHMoKSB7fVxuXG4vL1xuLy8gV2UgdHJ5IHRvIG5vdCBpbmhlcml0IGZyb20gYE9iamVjdC5wcm90b3R5cGVgLiBJbiBzb21lIGVuZ2luZXMgY3JlYXRpbmcgYW5cbi8vIGluc3RhbmNlIGluIHRoaXMgd2F5IGlzIGZhc3RlciB0aGFuIGNhbGxpbmcgYE9iamVjdC5jcmVhdGUobnVsbClgIGRpcmVjdGx5LlxuLy8gSWYgYE9iamVjdC5jcmVhdGUobnVsbClgIGlzIG5vdCBzdXBwb3J0ZWQgd2UgcHJlZml4IHRoZSBldmVudCBuYW1lcyB3aXRoIGFcbi8vIGNoYXJhY3RlciB0byBtYWtlIHN1cmUgdGhhdCB0aGUgYnVpbHQtaW4gb2JqZWN0IHByb3BlcnRpZXMgYXJlIG5vdFxuLy8gb3ZlcnJpZGRlbiBvciB1c2VkIGFzIGFuIGF0dGFjayB2ZWN0b3IuXG4vL1xuaWYgKE9iamVjdC5jcmVhdGUpIHtcbiAgRXZlbnRzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbiAgLy9cbiAgLy8gVGhpcyBoYWNrIGlzIG5lZWRlZCBiZWNhdXNlIHRoZSBgX19wcm90b19fYCBwcm9wZXJ0eSBpcyBzdGlsbCBpbmhlcml0ZWQgaW5cbiAgLy8gc29tZSBvbGQgYnJvd3NlcnMgbGlrZSBBbmRyb2lkIDQsIGlQaG9uZSA1LjEsIE9wZXJhIDExIGFuZCBTYWZhcmkgNS5cbiAgLy9cbiAgaWYgKCFuZXcgRXZlbnRzKCkuX19wcm90b19fKSBwcmVmaXggPSBmYWxzZTtcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRhdGlvbiBvZiBhIHNpbmdsZSBldmVudCBsaXN0ZW5lci5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgbGlzdGVuZXIgZnVuY3Rpb24uXG4gKiBAcGFyYW0geyp9IGNvbnRleHQgVGhlIGNvbnRleHQgdG8gaW52b2tlIHRoZSBsaXN0ZW5lciB3aXRoLlxuICogQHBhcmFtIHtCb29sZWFufSBbb25jZT1mYWxzZV0gU3BlY2lmeSBpZiB0aGUgbGlzdGVuZXIgaXMgYSBvbmUtdGltZSBsaXN0ZW5lci5cbiAqIEBjb25zdHJ1Y3RvclxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gRUUoZm4sIGNvbnRleHQsIG9uY2UpIHtcbiAgdGhpcy5mbiA9IGZuO1xuICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuICB0aGlzLm9uY2UgPSBvbmNlIHx8IGZhbHNlO1xufVxuXG4vKipcbiAqIEFkZCBhIGxpc3RlbmVyIGZvciBhIGdpdmVuIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7RXZlbnRFbWl0dGVyfSBlbWl0dGVyIFJlZmVyZW5jZSB0byB0aGUgYEV2ZW50RW1pdHRlcmAgaW5zdGFuY2UuXG4gKiBAcGFyYW0geyhTdHJpbmd8U3ltYm9sKX0gZXZlbnQgVGhlIGV2ZW50IG5hbWUuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgbGlzdGVuZXIgZnVuY3Rpb24uXG4gKiBAcGFyYW0geyp9IGNvbnRleHQgVGhlIGNvbnRleHQgdG8gaW52b2tlIHRoZSBsaXN0ZW5lciB3aXRoLlxuICogQHBhcmFtIHtCb29sZWFufSBvbmNlIFNwZWNpZnkgaWYgdGhlIGxpc3RlbmVyIGlzIGEgb25lLXRpbWUgbGlzdGVuZXIuXG4gKiBAcmV0dXJucyB7RXZlbnRFbWl0dGVyfVxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gYWRkTGlzdGVuZXIoZW1pdHRlciwgZXZlbnQsIGZuLCBjb250ZXh0LCBvbmNlKSB7XG4gIGlmICh0eXBlb2YgZm4gIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgbGlzdGVuZXIgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG4gIH1cblxuICB2YXIgbGlzdGVuZXIgPSBuZXcgRUUoZm4sIGNvbnRleHQgfHwgZW1pdHRlciwgb25jZSlcbiAgICAsIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnQ7XG5cbiAgaWYgKCFlbWl0dGVyLl9ldmVudHNbZXZ0XSkgZW1pdHRlci5fZXZlbnRzW2V2dF0gPSBsaXN0ZW5lciwgZW1pdHRlci5fZXZlbnRzQ291bnQrKztcbiAgZWxzZSBpZiAoIWVtaXR0ZXIuX2V2ZW50c1tldnRdLmZuKSBlbWl0dGVyLl9ldmVudHNbZXZ0XS5wdXNoKGxpc3RlbmVyKTtcbiAgZWxzZSBlbWl0dGVyLl9ldmVudHNbZXZ0XSA9IFtlbWl0dGVyLl9ldmVudHNbZXZ0XSwgbGlzdGVuZXJdO1xuXG4gIHJldHVybiBlbWl0dGVyO1xufVxuXG4vKipcbiAqIENsZWFyIGV2ZW50IGJ5IG5hbWUuXG4gKlxuICogQHBhcmFtIHtFdmVudEVtaXR0ZXJ9IGVtaXR0ZXIgUmVmZXJlbmNlIHRvIHRoZSBgRXZlbnRFbWl0dGVyYCBpbnN0YW5jZS5cbiAqIEBwYXJhbSB7KFN0cmluZ3xTeW1ib2wpfSBldnQgVGhlIEV2ZW50IG5hbWUuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBjbGVhckV2ZW50KGVtaXR0ZXIsIGV2dCkge1xuICBpZiAoLS1lbWl0dGVyLl9ldmVudHNDb3VudCA9PT0gMCkgZW1pdHRlci5fZXZlbnRzID0gbmV3IEV2ZW50cygpO1xuICBlbHNlIGRlbGV0ZSBlbWl0dGVyLl9ldmVudHNbZXZ0XTtcbn1cblxuLyoqXG4gKiBNaW5pbWFsIGBFdmVudEVtaXR0ZXJgIGludGVyZmFjZSB0aGF0IGlzIG1vbGRlZCBhZ2FpbnN0IHRoZSBOb2RlLmpzXG4gKiBgRXZlbnRFbWl0dGVyYCBpbnRlcmZhY2UuXG4gKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAcHVibGljXG4gKi9cbmZ1bmN0aW9uIEV2ZW50RW1pdHRlcigpIHtcbiAgdGhpcy5fZXZlbnRzID0gbmV3IEV2ZW50cygpO1xuICB0aGlzLl9ldmVudHNDb3VudCA9IDA7XG59XG5cbi8qKlxuICogUmV0dXJuIGFuIGFycmF5IGxpc3RpbmcgdGhlIGV2ZW50cyBmb3Igd2hpY2ggdGhlIGVtaXR0ZXIgaGFzIHJlZ2lzdGVyZWRcbiAqIGxpc3RlbmVycy5cbiAqXG4gKiBAcmV0dXJucyB7QXJyYXl9XG4gKiBAcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuZXZlbnROYW1lcyA9IGZ1bmN0aW9uIGV2ZW50TmFtZXMoKSB7XG4gIHZhciBuYW1lcyA9IFtdXG4gICAgLCBldmVudHNcbiAgICAsIG5hbWU7XG5cbiAgaWYgKHRoaXMuX2V2ZW50c0NvdW50ID09PSAwKSByZXR1cm4gbmFtZXM7XG5cbiAgZm9yIChuYW1lIGluIChldmVudHMgPSB0aGlzLl9ldmVudHMpKSB7XG4gICAgaWYgKGhhcy5jYWxsKGV2ZW50cywgbmFtZSkpIG5hbWVzLnB1c2gocHJlZml4ID8gbmFtZS5zbGljZSgxKSA6IG5hbWUpO1xuICB9XG5cbiAgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcbiAgICByZXR1cm4gbmFtZXMuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZXZlbnRzKSk7XG4gIH1cblxuICByZXR1cm4gbmFtZXM7XG59O1xuXG4vKipcbiAqIFJldHVybiB0aGUgbGlzdGVuZXJzIHJlZ2lzdGVyZWQgZm9yIGEgZ2l2ZW4gZXZlbnQuXG4gKlxuICogQHBhcmFtIHsoU3RyaW5nfFN5bWJvbCl9IGV2ZW50IFRoZSBldmVudCBuYW1lLlxuICogQHJldHVybnMge0FycmF5fSBUaGUgcmVnaXN0ZXJlZCBsaXN0ZW5lcnMuXG4gKiBAcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJzID0gZnVuY3Rpb24gbGlzdGVuZXJzKGV2ZW50KSB7XG4gIHZhciBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50XG4gICAgLCBoYW5kbGVycyA9IHRoaXMuX2V2ZW50c1tldnRdO1xuXG4gIGlmICghaGFuZGxlcnMpIHJldHVybiBbXTtcbiAgaWYgKGhhbmRsZXJzLmZuKSByZXR1cm4gW2hhbmRsZXJzLmZuXTtcblxuICBmb3IgKHZhciBpID0gMCwgbCA9IGhhbmRsZXJzLmxlbmd0aCwgZWUgPSBuZXcgQXJyYXkobCk7IGkgPCBsOyBpKyspIHtcbiAgICBlZVtpXSA9IGhhbmRsZXJzW2ldLmZuO1xuICB9XG5cbiAgcmV0dXJuIGVlO1xufTtcblxuLyoqXG4gKiBSZXR1cm4gdGhlIG51bWJlciBvZiBsaXN0ZW5lcnMgbGlzdGVuaW5nIHRvIGEgZ2l2ZW4gZXZlbnQuXG4gKlxuICogQHBhcmFtIHsoU3RyaW5nfFN5bWJvbCl9IGV2ZW50IFRoZSBldmVudCBuYW1lLlxuICogQHJldHVybnMge051bWJlcn0gVGhlIG51bWJlciBvZiBsaXN0ZW5lcnMuXG4gKiBAcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJDb3VudCA9IGZ1bmN0aW9uIGxpc3RlbmVyQ291bnQoZXZlbnQpIHtcbiAgdmFyIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnRcbiAgICAsIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50c1tldnRdO1xuXG4gIGlmICghbGlzdGVuZXJzKSByZXR1cm4gMDtcbiAgaWYgKGxpc3RlbmVycy5mbikgcmV0dXJuIDE7XG4gIHJldHVybiBsaXN0ZW5lcnMubGVuZ3RoO1xufTtcblxuLyoqXG4gKiBDYWxscyBlYWNoIG9mIHRoZSBsaXN0ZW5lcnMgcmVnaXN0ZXJlZCBmb3IgYSBnaXZlbiBldmVudC5cbiAqXG4gKiBAcGFyYW0geyhTdHJpbmd8U3ltYm9sKX0gZXZlbnQgVGhlIGV2ZW50IG5hbWUuXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gYHRydWVgIGlmIHRoZSBldmVudCBoYWQgbGlzdGVuZXJzLCBlbHNlIGBmYWxzZWAuXG4gKiBAcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuZW1pdCA9IGZ1bmN0aW9uIGVtaXQoZXZlbnQsIGExLCBhMiwgYTMsIGE0LCBhNSkge1xuICB2YXIgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudDtcblxuICBpZiAoIXRoaXMuX2V2ZW50c1tldnRdKSByZXR1cm4gZmFsc2U7XG5cbiAgdmFyIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50c1tldnRdXG4gICAgLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoXG4gICAgLCBhcmdzXG4gICAgLCBpO1xuXG4gIGlmIChsaXN0ZW5lcnMuZm4pIHtcbiAgICBpZiAobGlzdGVuZXJzLm9uY2UpIHRoaXMucmVtb3ZlTGlzdGVuZXIoZXZlbnQsIGxpc3RlbmVycy5mbiwgdW5kZWZpbmVkLCB0cnVlKTtcblxuICAgIHN3aXRjaCAobGVuKSB7XG4gICAgICBjYXNlIDE6IHJldHVybiBsaXN0ZW5lcnMuZm4uY2FsbChsaXN0ZW5lcnMuY29udGV4dCksIHRydWU7XG4gICAgICBjYXNlIDI6IHJldHVybiBsaXN0ZW5lcnMuZm4uY2FsbChsaXN0ZW5lcnMuY29udGV4dCwgYTEpLCB0cnVlO1xuICAgICAgY2FzZSAzOiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQsIGExLCBhMiksIHRydWU7XG4gICAgICBjYXNlIDQ6IHJldHVybiBsaXN0ZW5lcnMuZm4uY2FsbChsaXN0ZW5lcnMuY29udGV4dCwgYTEsIGEyLCBhMyksIHRydWU7XG4gICAgICBjYXNlIDU6IHJldHVybiBsaXN0ZW5lcnMuZm4uY2FsbChsaXN0ZW5lcnMuY29udGV4dCwgYTEsIGEyLCBhMywgYTQpLCB0cnVlO1xuICAgICAgY2FzZSA2OiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQsIGExLCBhMiwgYTMsIGE0LCBhNSksIHRydWU7XG4gICAgfVxuXG4gICAgZm9yIChpID0gMSwgYXJncyA9IG5ldyBBcnJheShsZW4gLTEpOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGFyZ3NbaSAtIDFdID0gYXJndW1lbnRzW2ldO1xuICAgIH1cblxuICAgIGxpc3RlbmVycy5mbi5hcHBseShsaXN0ZW5lcnMuY29udGV4dCwgYXJncyk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGxlbmd0aCA9IGxpc3RlbmVycy5sZW5ndGhcbiAgICAgICwgajtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGxpc3RlbmVyc1tpXS5vbmNlKSB0aGlzLnJlbW92ZUxpc3RlbmVyKGV2ZW50LCBsaXN0ZW5lcnNbaV0uZm4sIHVuZGVmaW5lZCwgdHJ1ZSk7XG5cbiAgICAgIHN3aXRjaCAobGVuKSB7XG4gICAgICAgIGNhc2UgMTogbGlzdGVuZXJzW2ldLmZuLmNhbGwobGlzdGVuZXJzW2ldLmNvbnRleHQpOyBicmVhaztcbiAgICAgICAgY2FzZSAyOiBsaXN0ZW5lcnNbaV0uZm4uY2FsbChsaXN0ZW5lcnNbaV0uY29udGV4dCwgYTEpOyBicmVhaztcbiAgICAgICAgY2FzZSAzOiBsaXN0ZW5lcnNbaV0uZm4uY2FsbChsaXN0ZW5lcnNbaV0uY29udGV4dCwgYTEsIGEyKTsgYnJlYWs7XG4gICAgICAgIGNhc2UgNDogbGlzdGVuZXJzW2ldLmZuLmNhbGwobGlzdGVuZXJzW2ldLmNvbnRleHQsIGExLCBhMiwgYTMpOyBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBpZiAoIWFyZ3MpIGZvciAoaiA9IDEsIGFyZ3MgPSBuZXcgQXJyYXkobGVuIC0xKTsgaiA8IGxlbjsgaisrKSB7XG4gICAgICAgICAgICBhcmdzW2ogLSAxXSA9IGFyZ3VtZW50c1tqXTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsaXN0ZW5lcnNbaV0uZm4uYXBwbHkobGlzdGVuZXJzW2ldLmNvbnRleHQsIGFyZ3MpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcblxuLyoqXG4gKiBBZGQgYSBsaXN0ZW5lciBmb3IgYSBnaXZlbiBldmVudC5cbiAqXG4gKiBAcGFyYW0geyhTdHJpbmd8U3ltYm9sKX0gZXZlbnQgVGhlIGV2ZW50IG5hbWUuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgbGlzdGVuZXIgZnVuY3Rpb24uXG4gKiBAcGFyYW0geyp9IFtjb250ZXh0PXRoaXNdIFRoZSBjb250ZXh0IHRvIGludm9rZSB0aGUgbGlzdGVuZXIgd2l0aC5cbiAqIEByZXR1cm5zIHtFdmVudEVtaXR0ZXJ9IGB0aGlzYC5cbiAqIEBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbiA9IGZ1bmN0aW9uIG9uKGV2ZW50LCBmbiwgY29udGV4dCkge1xuICByZXR1cm4gYWRkTGlzdGVuZXIodGhpcywgZXZlbnQsIGZuLCBjb250ZXh0LCBmYWxzZSk7XG59O1xuXG4vKipcbiAqIEFkZCBhIG9uZS10aW1lIGxpc3RlbmVyIGZvciBhIGdpdmVuIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7KFN0cmluZ3xTeW1ib2wpfSBldmVudCBUaGUgZXZlbnQgbmFtZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBsaXN0ZW5lciBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7Kn0gW2NvbnRleHQ9dGhpc10gVGhlIGNvbnRleHQgdG8gaW52b2tlIHRoZSBsaXN0ZW5lciB3aXRoLlxuICogQHJldHVybnMge0V2ZW50RW1pdHRlcn0gYHRoaXNgLlxuICogQHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uY2UgPSBmdW5jdGlvbiBvbmNlKGV2ZW50LCBmbiwgY29udGV4dCkge1xuICByZXR1cm4gYWRkTGlzdGVuZXIodGhpcywgZXZlbnQsIGZuLCBjb250ZXh0LCB0cnVlKTtcbn07XG5cbi8qKlxuICogUmVtb3ZlIHRoZSBsaXN0ZW5lcnMgb2YgYSBnaXZlbiBldmVudC5cbiAqXG4gKiBAcGFyYW0geyhTdHJpbmd8U3ltYm9sKX0gZXZlbnQgVGhlIGV2ZW50IG5hbWUuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBPbmx5IHJlbW92ZSB0aGUgbGlzdGVuZXJzIHRoYXQgbWF0Y2ggdGhpcyBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7Kn0gY29udGV4dCBPbmx5IHJlbW92ZSB0aGUgbGlzdGVuZXJzIHRoYXQgaGF2ZSB0aGlzIGNvbnRleHQuXG4gKiBAcGFyYW0ge0Jvb2xlYW59IG9uY2UgT25seSByZW1vdmUgb25lLXRpbWUgbGlzdGVuZXJzLlxuICogQHJldHVybnMge0V2ZW50RW1pdHRlcn0gYHRoaXNgLlxuICogQHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyID0gZnVuY3Rpb24gcmVtb3ZlTGlzdGVuZXIoZXZlbnQsIGZuLCBjb250ZXh0LCBvbmNlKSB7XG4gIHZhciBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50O1xuXG4gIGlmICghdGhpcy5fZXZlbnRzW2V2dF0pIHJldHVybiB0aGlzO1xuICBpZiAoIWZuKSB7XG4gICAgY2xlYXJFdmVudCh0aGlzLCBldnQpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgdmFyIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50c1tldnRdO1xuXG4gIGlmIChsaXN0ZW5lcnMuZm4pIHtcbiAgICBpZiAoXG4gICAgICBsaXN0ZW5lcnMuZm4gPT09IGZuICYmXG4gICAgICAoIW9uY2UgfHwgbGlzdGVuZXJzLm9uY2UpICYmXG4gICAgICAoIWNvbnRleHQgfHwgbGlzdGVuZXJzLmNvbnRleHQgPT09IGNvbnRleHQpXG4gICAgKSB7XG4gICAgICBjbGVhckV2ZW50KHRoaXMsIGV2dCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGZvciAodmFyIGkgPSAwLCBldmVudHMgPSBbXSwgbGVuZ3RoID0gbGlzdGVuZXJzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoXG4gICAgICAgIGxpc3RlbmVyc1tpXS5mbiAhPT0gZm4gfHxcbiAgICAgICAgKG9uY2UgJiYgIWxpc3RlbmVyc1tpXS5vbmNlKSB8fFxuICAgICAgICAoY29udGV4dCAmJiBsaXN0ZW5lcnNbaV0uY29udGV4dCAhPT0gY29udGV4dClcbiAgICAgICkge1xuICAgICAgICBldmVudHMucHVzaChsaXN0ZW5lcnNbaV0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vXG4gICAgLy8gUmVzZXQgdGhlIGFycmF5LCBvciByZW1vdmUgaXQgY29tcGxldGVseSBpZiB3ZSBoYXZlIG5vIG1vcmUgbGlzdGVuZXJzLlxuICAgIC8vXG4gICAgaWYgKGV2ZW50cy5sZW5ndGgpIHRoaXMuX2V2ZW50c1tldnRdID0gZXZlbnRzLmxlbmd0aCA9PT0gMSA/IGV2ZW50c1swXSA6IGV2ZW50cztcbiAgICBlbHNlIGNsZWFyRXZlbnQodGhpcywgZXZ0KTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYWxsIGxpc3RlbmVycywgb3IgdGhvc2Ugb2YgdGhlIHNwZWNpZmllZCBldmVudC5cbiAqXG4gKiBAcGFyYW0geyhTdHJpbmd8U3ltYm9sKX0gW2V2ZW50XSBUaGUgZXZlbnQgbmFtZS5cbiAqIEByZXR1cm5zIHtFdmVudEVtaXR0ZXJ9IGB0aGlzYC5cbiAqIEBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBmdW5jdGlvbiByZW1vdmVBbGxMaXN0ZW5lcnMoZXZlbnQpIHtcbiAgdmFyIGV2dDtcblxuICBpZiAoZXZlbnQpIHtcbiAgICBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50O1xuICAgIGlmICh0aGlzLl9ldmVudHNbZXZ0XSkgY2xlYXJFdmVudCh0aGlzLCBldnQpO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuX2V2ZW50cyA9IG5ldyBFdmVudHMoKTtcbiAgICB0aGlzLl9ldmVudHNDb3VudCA9IDA7XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8vXG4vLyBBbGlhcyBtZXRob2RzIG5hbWVzIGJlY2F1c2UgcGVvcGxlIHJvbGwgbGlrZSB0aGF0LlxuLy9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub2ZmID0gRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lcjtcbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuYWRkTGlzdGVuZXIgPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uO1xuXG4vL1xuLy8gRXhwb3NlIHRoZSBwcmVmaXguXG4vL1xuRXZlbnRFbWl0dGVyLnByZWZpeGVkID0gcHJlZml4O1xuXG4vL1xuLy8gQWxsb3cgYEV2ZW50RW1pdHRlcmAgdG8gYmUgaW1wb3J0ZWQgYXMgbW9kdWxlIG5hbWVzcGFjZS5cbi8vXG5FdmVudEVtaXR0ZXIuRXZlbnRFbWl0dGVyID0gRXZlbnRFbWl0dGVyO1xuXG4vL1xuLy8gRXhwb3NlIHRoZSBtb2R1bGUuXG4vL1xuaWYgKCd1bmRlZmluZWQnICE9PSB0eXBlb2YgbW9kdWxlKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gRXZlbnRFbWl0dGVyO1xufVxuIiwKICAgICJpbXBvcnQgRXZlbnRFbWl0dGVyIGZyb20gJy4vaW5kZXguanMnXG5cbmV4cG9ydCB7IEV2ZW50RW1pdHRlciB9XG5leHBvcnQgZGVmYXVsdCBFdmVudEVtaXR0ZXJcbiIsCiAgICAiLyohXG4gKiBhY3Rpdml0eS1zdHJlYW1zXG4gKiAgIGh0dHBzOi8vZ2l0aHViLmNvbS9zaWx2ZXJidWNrZXQvYWN0aXZpdHktc3RyZWFtc1xuICpcbiAqIERldmVsb3BlZCBhbmQgTWFpbnRhaW5lZCBieTpcbiAqICAgTmljayBKZW5uaW5ncyA8bmlja0BzaWx2ZXJidWNrZXQubmV0PlxuICpcbiAqIGFjdGl2aXR5LXN0cmVhbXMgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIE1JVCAoc2VlIExJQ0VOU0UpLlxuICpcbiAqIFlvdSBkb24ndCBoYXZlIHRvIGRvIGFueXRoaW5nIHNwZWNpYWwgdG8gY2hvb3NlIG9uZSBsaWNlbnNlIG9yIHRoZSBvdGhlclxuICogYW5kIHlvdSBkb24ndCBoYXZlIHRvIG5vdGlmeSBhbnlvbmUgd2hpY2ggbGljZW5zZSB5b3UgYXJlIHVzaW5nLlxuICogUGxlYXNlIHNlZSB0aGUgY29ycmVzcG9uZGluZyBsaWNlbnNlIGZpbGUgZm9yIGRldGFpbHMgb2YgdGhlc2UgbGljZW5zZXMuXG4gKiBZb3UgYXJlIGZyZWUgdG8gdXNlLCBtb2RpZnkgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSwgYnV0IGFsbCBjb3B5cmlnaHRcbiAqIGluZm9ybWF0aW9uIG11c3QgcmVtYWluLlxuICpcbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEFjdGl2aXR5T2JqZWN0LCBBY3Rpdml0eVN0cmVhbSB9IGZyb20gXCJAc29ja2V0aHViL3NjaGVtYXNcIjtcbmltcG9ydCBFdmVudEVtaXR0ZXIgZnJvbSBcImV2ZW50ZW1pdHRlcjNcIjtcblxuY29uc3QgZWUgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5jb25zdCBiYXNlUHJvcHMgPSB7XG4gICAgc3RyZWFtOiBbXG4gICAgICAgIFwiaWRcIixcbiAgICAgICAgXCJ0eXBlXCIsXG4gICAgICAgIFwiYWN0b3JcIixcbiAgICAgICAgXCJ0YXJnZXRcIixcbiAgICAgICAgXCJvYmplY3RcIixcbiAgICAgICAgXCJjb250ZXh0XCIsXG4gICAgICAgIFwiY29udGV4dFwiLFxuICAgICAgICBcInB1Ymxpc2hlZFwiLFxuICAgICAgICBcImVycm9yXCIsXG4gICAgXSxcbiAgICBvYmplY3Q6IFtcbiAgICAgICAgXCJpZFwiLFxuICAgICAgICBcInR5cGVcIixcbiAgICAgICAgXCJjb250ZXh0XCIsXG4gICAgICAgIFwiYWxpYXNcIixcbiAgICAgICAgXCJhdHRhY2hlZFRvXCIsXG4gICAgICAgIFwiYXR0YWNobWVudFwiLFxuICAgICAgICBcImF0dHJpYnV0ZWRUb1wiLFxuICAgICAgICBcImF0dHJpYnV0ZWRXaXRoXCIsXG4gICAgICAgIFwiY29uZGl0aW9uXCIsXG4gICAgICAgIFwiY29udGVudFwiLFxuICAgICAgICBcImNvbnRlbnRNYXBcIixcbiAgICAgICAgXCJjb250ZXh0XCIsXG4gICAgICAgIFwiY29udGV4dE9mXCIsXG4gICAgICAgIFwibmFtZVwiLFxuICAgICAgICBcImVuZFRpbWVcIixcbiAgICAgICAgXCJnZW5lcmF0b3JcIixcbiAgICAgICAgXCJnZW5lcmF0b3JPZlwiLFxuICAgICAgICBcImdyb3VwXCIsXG4gICAgICAgIFwiaWNvblwiLFxuICAgICAgICBcImltYWdlXCIsXG4gICAgICAgIFwiaW5SZXBseVRvXCIsXG4gICAgICAgIFwibWVtYmVyc1wiLFxuICAgICAgICBcIm1lbWJlck9mXCIsXG4gICAgICAgIFwibWVzc2FnZVwiLFxuICAgICAgICBcImxvY2F0aW9uXCIsXG4gICAgICAgIFwibG9jYXRpb25PZlwiLFxuICAgICAgICBcIm9iamVjdE9mXCIsXG4gICAgICAgIFwib3JpZ2luT2ZcIixcbiAgICAgICAgXCJwcmVzZW5jZVwiLFxuICAgICAgICBcInByZXZpZXdcIixcbiAgICAgICAgXCJwcmV2aWV3T2ZcIixcbiAgICAgICAgXCJwcm92aWRlclwiLFxuICAgICAgICBcInByb3ZpZGVyT2ZcIixcbiAgICAgICAgXCJwdWJsaXNoZWRcIixcbiAgICAgICAgXCJyYXRpbmdcIixcbiAgICAgICAgXCJyZWxhdGlvbnNoaXBcIixcbiAgICAgICAgXCJyZXN1bHRPZlwiLFxuICAgICAgICBcInJlcGxpZXNcIixcbiAgICAgICAgXCJyb2xlXCIsXG4gICAgICAgIFwic2NvcGVcIixcbiAgICAgICAgXCJzY29wZU9mXCIsXG4gICAgICAgIFwic3RhcnRUaW1lXCIsXG4gICAgICAgIFwic3RhdHVzXCIsXG4gICAgICAgIFwic3VtbWFyeVwiLFxuICAgICAgICBcInRvcGljXCIsXG4gICAgICAgIFwidGFnXCIsXG4gICAgICAgIFwidGFnT2ZcIixcbiAgICAgICAgXCJ0YXJnZXRPZlwiLFxuICAgICAgICBcInRpdGxlXCIsXG4gICAgICAgIFwidGl0bGVNYXBcIixcbiAgICAgICAgXCJ1cGRhdGVkXCIsXG4gICAgICAgIFwidXJsXCIsXG4gICAgICAgIFwieG1wcDpzdGFuemEtaWRcIixcbiAgICBdLFxufTtcbmNvbnN0IHJlbmFtZSA9IHtcbiAgICBcIkBpZFwiOiBcImlkXCIsXG4gICAgXCJAdHlwZVwiOiBcInR5cGVcIixcbiAgICB2ZXJiOiBcInR5cGVcIixcbiAgICBkaXNwbGF5TmFtZTogXCJuYW1lXCIsXG4gICAgb2JqZWN0VHlwZTogXCJ0eXBlXCIsXG4gICAgcGxhdGZvcm06IFwiY29udGV4dFwiLFxufTtcbmNvbnN0IGV4cGFuZCA9IHtcbiAgICBhY3Rvcjoge1xuICAgICAgICBwcmltYXJ5OiBcImlkXCIsXG4gICAgICAgIHByb3BzOiBiYXNlUHJvcHMsXG4gICAgfSxcbiAgICB0YXJnZXQ6IHtcbiAgICAgICAgcHJpbWFyeTogXCJpZFwiLFxuICAgICAgICBwcm9wczogYmFzZVByb3BzLFxuICAgIH0sXG4gICAgb2JqZWN0OiB7XG4gICAgICAgIHByaW1hcnk6IFwiY29udGVudFwiLFxuICAgICAgICBwcm9wczogYmFzZVByb3BzLFxuICAgIH0sXG59O1xuXG50eXBlIEN1c3RvbVByb3BzID0ge1xuICAgIFtrZXk6IHN0cmluZ106IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBvYmplY3QgfCBzdHJpbmdbXTtcbn07XG5cbmNvbnN0IG9ianMgPSBuZXcgTWFwKCk7XG5jb25zdCBjdXN0b21Qcm9wczogQ3VzdG9tUHJvcHMgPSB7fTtcblxubGV0IGZhaWxPblVua25vd25PYmplY3RQcm9wZXJ0aWVzID0gZmFsc2U7XG5sZXQgd2Fybk9uVW5rbm93bk9iamVjdFByb3BlcnRpZXMgPSB0cnVlO1xubGV0IHNwZWNpYWxPYmpzID0gW107IC8vIHRoZSBvYmplY3RzIGRvbid0IGdldCByZWplY3RlZCBmb3IgYmFkIHByb3BzXG5cbmZ1bmN0aW9uIG1hdGNoZXNDdXN0b21Qcm9wKHR5cGU6IHN0cmluZywga2V5OiBzdHJpbmcpIHtcbiAgICBpZiAoY3VzdG9tUHJvcHNbdHlwZV0gaW5zdGFuY2VvZiBPYmplY3QpIHtcbiAgICAgICAgY29uc3Qgb2JqID0gY3VzdG9tUHJvcHNbdHlwZV0gYXMgc3RyaW5nW107XG4gICAgICAgIGlmIChvYmouaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiByZW5hbWVQcm9wPFQ+KG9iajogVCwga2V5OiBzdHJpbmcpOiBUIHtcbiAgICBvYmpbcmVuYW1lW2tleV1dID0gb2JqW2tleV07XG4gICAgZGVsZXRlIG9ialtrZXldO1xuICAgIHJldHVybiBvYmo7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlT2JqZWN0PFQ+KHR5cGU6IHN0cmluZywgaW5jb21pbmdPYmo6IFQsIHJlcXVpcmVJZCA9IGZhbHNlKSB7XG4gICAgLy8gSW5wdXQgdmFsaWRhdGlvbiB3aXRoIGNsZWFyIGVycm9yIG1lc3NhZ2VzXG4gICAgaWYgKGluY29taW5nT2JqID09PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBBY3Rpdml0eVN0cmVhbXMgdmFsaWRhdGlvbiBmYWlsZWQ6IHRoZSBcIiR7dHlwZX1cIiBwcm9wZXJ0eSBpcyBudWxsLiBFeGFtcGxlOiB7IGlkOiBcInVzZXJAZXhhbXBsZS5jb21cIiwgdHlwZTogXCJwZXJzb25cIiB9YCxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoaW5jb21pbmdPYmogPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgQWN0aXZpdHlTdHJlYW1zIHZhbGlkYXRpb24gZmFpbGVkOiB0aGUgXCIke3R5cGV9XCIgcHJvcGVydHkgaXMgdW5kZWZpbmVkLiBFeGFtcGxlOiB7IGlkOiBcInVzZXJAZXhhbXBsZS5jb21cIiwgdHlwZTogXCJwZXJzb25cIiB9YCxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGluY29taW5nT2JqID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBBY3Rpdml0eVN0cmVhbXMgdmFsaWRhdGlvbiBmYWlsZWQ6IHRoZSBcIiR7dHlwZX1cIiBwcm9wZXJ0eSByZWNlaXZlZCBzdHJpbmcgXCIke2luY29taW5nT2JqfVwiIGJ1dCBleHBlY3RlZCBhbiBvYmplY3QuIFVzZTogeyBpZDogXCIke2luY29taW5nT2JqfVwiLCB0eXBlOiBcInBlcnNvblwiIH1gLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaW5jb21pbmdPYmogIT09IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShpbmNvbWluZ09iaikpIHtcbiAgICAgICAgY29uc3QgcmVjZWl2ZWRUeXBlID0gQXJyYXkuaXNBcnJheShpbmNvbWluZ09iailcbiAgICAgICAgICAgID8gXCJhcnJheVwiXG4gICAgICAgICAgICA6IHR5cGVvZiBpbmNvbWluZ09iajtcbiAgICAgICAgY29uc3QgcmVjZWl2ZWRWYWx1ZSA9IFN0cmluZyhpbmNvbWluZ09iaik7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBBY3Rpdml0eVN0cmVhbXMgdmFsaWRhdGlvbiBmYWlsZWQ6IHRoZSBcIiR7dHlwZX1cIiBwcm9wZXJ0eSBtdXN0IGJlIGFuIG9iamVjdCwgcmVjZWl2ZWQgJHtyZWNlaXZlZFR5cGV9ICgke3JlY2VpdmVkVmFsdWV9KS4gRXhhbXBsZTogeyBpZDogXCJ1c2VyQGV4YW1wbGUuY29tXCIsIHR5cGU6IFwicGVyc29uXCIgfWAsXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gUmVxdWlyZSAnaWQnIHByb3BlcnR5IHdoZW4gZXhwbGljaXRseSByZXF1ZXN0ZWQgKGUuZy4sIE9iamVjdC5jcmVhdGUoKSlcbiAgICBjb25zdCBvYmogPSBpbmNvbWluZ09iaiBhcyBBY3Rpdml0eU9iamVjdDtcbiAgICBpZiAocmVxdWlyZUlkICYmICFvYmouaWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYEFjdGl2aXR5U3RyZWFtcyB2YWxpZGF0aW9uIGZhaWxlZDogdGhlIFwiJHt0eXBlfVwiIHByb3BlcnR5IHJlcXVpcmVzIGFuICdpZCcgcHJvcGVydHkuIEV4YW1wbGU6IHsgaWQ6IFwidXNlckBleGFtcGxlLmNvbVwiLCB0eXBlOiBcInBlcnNvblwiIH1gLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IHVua25vd25LZXlzID0gT2JqZWN0LmtleXMoaW5jb21pbmdPYmopLmZpbHRlcihcbiAgICAgICAgKGtleTogc3RyaW5nKTogYm9vbGVhbiA9PiB7XG4gICAgICAgICAgICByZXR1cm4gIWJhc2VQcm9wc1t0eXBlXS5pbmNsdWRlcyhrZXkpO1xuICAgICAgICB9LFxuICAgICk7XG5cbiAgICBmb3IgKGNvbnN0IGtleSBvZiB1bmtub3duS2V5cykge1xuICAgICAgICBsZXQgYW86IEFjdGl2aXR5T2JqZWN0ID0gaW5jb21pbmdPYmogYXMgQWN0aXZpdHlPYmplY3Q7XG4gICAgICAgIGlmIChyZW5hbWVba2V5XSkge1xuICAgICAgICAgICAgLy8gcmVuYW1lIHByb3BlcnR5IGluc3RlYWQgb2YgZmFpbFxuICAgICAgICAgICAgYW8gPSByZW5hbWVQcm9wKGFvLCBrZXkpO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobWF0Y2hlc0N1c3RvbVByb3AoYW8udHlwZSwga2V5KSkge1xuICAgICAgICAgICAgLy8gY3VzdG9tIHByb3BlcnR5IG1hdGNoZXMsIGNvbnRpbnVlXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghc3BlY2lhbE9ianMuaW5jbHVkZXMoYW8udHlwZSkpIHtcbiAgICAgICAgICAgIC8vIG5vdCBkZWZpbmVkIGFzIGEgc3BlY2lhbCBwcm9wXG4gICAgICAgICAgICAvLyBkb24ndCBrbm93IHdoYXQgdG8gZG8gd2l0aCBpdCwgc28gdGhyb3cgZXJyb3JcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGFvKTtcbiAgICAgICAgICAgIGNvbnN0IHJlY2VpdmVkVmFsdWUgPVxuICAgICAgICAgICAgICAgIHR5cGVvZiBhb1trZXldID09PSBcInN0cmluZ1wiID8gYFwiJHthb1trZXldfVwiYCA6IFN0cmluZyhhb1trZXldKTtcbiAgICAgICAgICAgIGNvbnN0IGVyciA9IGBBY3Rpdml0eVN0cmVhbXMgdmFsaWRhdGlvbiBmYWlsZWQ6IHByb3BlcnR5IFwiJHtrZXl9XCIgd2l0aCB2YWx1ZSAke3JlY2VpdmVkVmFsdWV9IGlzIG5vdCBhbGxvd2VkIG9uIHRoZSBcIiR7dHlwZX1cIiBvYmplY3Qgb2YgdHlwZSBcIiR7YW8udHlwZX1cIi5gO1xuICAgICAgICAgICAgaWYgKGZhaWxPblVua25vd25PYmplY3RQcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAod2Fybk9uVW5rbm93bk9iamVjdFByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuZnVuY3Rpb24gZW5zdXJlUHJvcHMob2JqOiBBY3Rpdml0eU9iamVjdCk6IEFjdGl2aXR5T2JqZWN0IHtcbiAgICAvLyBlbnN1cmUgdGhlIG5hbWUgcHJvcGVydHksIHdoaWNoIGNhbiBnZW5lcmFsbHkgYmUgaW5mZXJyZWQgZnJvbSB0aGUgaWRcbiAgICAvLyBuYW1lID0gb2JqLm1hdGNoKC8oPyg/XFx3Kyk6XFwvXFwvKSg/Oi4rQCk/KC4rPykoPzpcXC98JCkvKVsxXVxuICAgIHJldHVybiBvYmo7XG59XG5cbmZ1bmN0aW9uIGV4cGFuZFN0cmVhbShtZXRhOiBBY3Rpdml0eVN0cmVhbSkge1xuICAgIGNvbnN0IHN0cmVhbSA9IHt9O1xuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKG1ldGEpKSB7XG4gICAgICAgIGlmICh0eXBlb2YgbWV0YVtrZXldID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICBzdHJlYW1ba2V5XSA9IG9ianMuZ2V0KG1ldGFba2V5XSkgfHwgbWV0YVtrZXldO1xuICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkobWV0YVtrZXldKSkge1xuICAgICAgICAgICAgc3RyZWFtW2tleV0gPSBbXTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgbWV0YVtrZXldKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBlbnRyeSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgICAgICBzdHJlYW1ba2V5XS5wdXNoKG9ianMuZ2V0KGVudHJ5KSB8fCBlbnRyeSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3RyZWFtW2tleV0gPSBtZXRhW2tleV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBvbmx5IGV4cGFuZCBzdHJpbmcgaW50byBvYmplY3RzIGlmIHRoZXkgYXJlIGluIHRoZSBleHBhbmQgbGlzdFxuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGV4cGFuZCkpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBzdHJlYW1ba2V5XSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgY29uc3QgaWR4ID0gZXhwYW5kW2tleV0ucHJpbWFyeTtcbiAgICAgICAgICAgIGNvbnN0IG9iaiA9IHt9O1xuICAgICAgICAgICAgb2JqW2lkeF0gPSBzdHJlYW1ba2V5XTtcbiAgICAgICAgICAgIHN0cmVhbVtrZXldID0gb2JqO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzdHJlYW07XG59XG5cbmZ1bmN0aW9uIFN0cmVhbShcbiAgICBtZXRhOiBBY3Rpdml0eVN0cmVhbSxcbik6IEFjdGl2aXR5U3RyZWFtIHwgQWN0aXZpdHlPYmplY3QgfCBSZWNvcmQ8c3RyaW5nLCBuZXZlcj4ge1xuICAgIHZhbGlkYXRlT2JqZWN0KFwic3RyZWFtXCIsIG1ldGEpO1xuICAgIGlmICh0eXBlb2YgbWV0YS5vYmplY3QgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgdmFsaWRhdGVPYmplY3QoXCJvYmplY3RcIiwgbWV0YS5vYmplY3QpO1xuICAgIH1cbiAgICBjb25zdCBzdHJlYW0gPSBleHBhbmRTdHJlYW0obWV0YSk7XG4gICAgZWUuZW1pdChcImFjdGl2aXR5LXN0cmVhbVwiLCBzdHJlYW0pO1xuICAgIHJldHVybiBzdHJlYW07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWN0aXZpdHlPYmplY3RNYW5hZ2VyIHtcbiAgICBjcmVhdGUob2JqOiB1bmtub3duKTogdW5rbm93bjtcbiAgICBkZWxldGUoaWQ6IHN0cmluZyk6IGJvb2xlYW47XG4gICAgbGlzdCgpOiBJdGVyYWJsZUl0ZXJhdG9yPHVua25vd24+O1xuICAgIGdldChpZDogc3RyaW5nLCBleHBhbmQ/OiBib29sZWFuKTogdW5rbm93bjtcbn1cblxuY29uc3QgX09iamVjdDogQWN0aXZpdHlPYmplY3RNYW5hZ2VyID0ge1xuICAgIGNyZWF0ZTogKG9iajogQWN0aXZpdHlPYmplY3QpID0+IHtcbiAgICAgICAgdmFsaWRhdGVPYmplY3QoXCJvYmplY3RcIiwgb2JqLCB0cnVlKTsgLy8gcmVxdWlyZSBJRCBmb3IgT2JqZWN0LmNyZWF0ZSgpXG4gICAgICAgIGNvbnN0IGFvID0gZW5zdXJlUHJvcHMob2JqKTtcbiAgICAgICAgb2Jqcy5zZXQoYW8uaWQsIGFvKTtcbiAgICAgICAgZWUuZW1pdChcImFjdGl2aXR5LW9iamVjdC1jcmVhdGVcIiwgYW8pO1xuICAgICAgICByZXR1cm4gYW87XG4gICAgfSxcblxuICAgIGRlbGV0ZTogKGlkKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IG9ianMuZGVsZXRlKGlkKTtcbiAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgZWUuZW1pdChcImFjdGl2aXR5LW9iamVjdC1kZWxldGVcIiwgaWQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGdldDogKGlkLCBleHBhbmQpID0+IHtcbiAgICAgICAgbGV0IG9iaiA9IG9ianMuZ2V0KGlkKTtcbiAgICAgICAgaWYgKCFvYmopIHtcbiAgICAgICAgICAgIGlmICghZXhwYW5kKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb2JqID0geyBpZDogaWQgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZW5zdXJlUHJvcHMob2JqKTtcbiAgICB9LFxuXG4gICAgbGlzdDogKCk6IEl0ZXJhYmxlSXRlcmF0b3I8dW5rbm93bj4gPT4gb2Jqcy5rZXlzKCksXG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIEFTRmFjdG9yeU9wdGlvbnMge1xuICAgIHNwZWNpYWxPYmpzPzogQXJyYXk8c3RyaW5nPjtcbiAgICBmYWlsT25Vbmtub3duT2JqZWN0UHJvcGVydGllcz86IGJvb2xlYW47XG4gICAgd2Fybk9uVW5rbm93bk9iamVjdFByb3BlcnRpZXM/OiBib29sZWFuO1xuICAgIGN1c3RvbVByb3BzPzogQ3VzdG9tUHJvcHM7XG59XG5cbnR5cGUgRXZlbnRDYWxsYmFjayA9ICguLi5hcmdzOiB1bmtub3duW10pID0+IHZvaWQ7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQVNNYW5hZ2VyIHtcbiAgICBTdHJlYW0obWV0YTogdW5rbm93bik6IEFjdGl2aXR5U3RyZWFtIHwgQWN0aXZpdHlPYmplY3Q7XG4gICAgT2JqZWN0OiBBY3Rpdml0eU9iamVjdE1hbmFnZXI7XG4gICAgb24oZXZlbnQ6IHN0cmluZywgZnVuYzogRXZlbnRDYWxsYmFjayk6IHZvaWQ7XG4gICAgb25jZShldmVudDogc3RyaW5nLCBmdW5jOiBFdmVudENhbGxiYWNrKTogdm9pZDtcbiAgICBvZmYoZXZlbnQ6IHN0cmluZywgZnVuYzogRXZlbnRDYWxsYmFjayk6IHZvaWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBBU0ZhY3Rvcnkob3B0czogQVNGYWN0b3J5T3B0aW9ucyA9IHt9KTogQVNNYW5hZ2VyIHtcbiAgICBzcGVjaWFsT2JqcyA9IG9wdHM/LnNwZWNpYWxPYmpzIHx8IFtdO1xuICAgIGZhaWxPblVua25vd25PYmplY3RQcm9wZXJ0aWVzID1cbiAgICAgICAgdHlwZW9mIG9wdHMuZmFpbE9uVW5rbm93bk9iamVjdFByb3BlcnRpZXMgPT09IFwiYm9vbGVhblwiXG4gICAgICAgICAgICA/IG9wdHMuZmFpbE9uVW5rbm93bk9iamVjdFByb3BlcnRpZXNcbiAgICAgICAgICAgIDogZmFpbE9uVW5rbm93bk9iamVjdFByb3BlcnRpZXM7XG4gICAgd2Fybk9uVW5rbm93bk9iamVjdFByb3BlcnRpZXMgPVxuICAgICAgICB0eXBlb2Ygb3B0cy53YXJuT25Vbmtub3duT2JqZWN0UHJvcGVydGllcyA9PT0gXCJib29sZWFuXCJcbiAgICAgICAgICAgID8gb3B0cy53YXJuT25Vbmtub3duT2JqZWN0UHJvcGVydGllc1xuICAgICAgICAgICAgOiB3YXJuT25Vbmtub3duT2JqZWN0UHJvcGVydGllcztcbiAgICBmb3IgKGNvbnN0IHByb3BOYW1lIG9mIE9iamVjdC5rZXlzKG9wdHMuY3VzdG9tUHJvcHMgfHwge30pKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygb3B0cy5jdXN0b21Qcm9wc1twcm9wTmFtZV0gPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgIGN1c3RvbVByb3BzW3Byb3BOYW1lXSA9IG9wdHMuY3VzdG9tUHJvcHNbcHJvcE5hbWVdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgU3RyZWFtOiBTdHJlYW0sXG4gICAgICAgIE9iamVjdDogX09iamVjdCxcbiAgICAgICAgb246IChldmVudCwgZnVuYykgPT4gZWUub24oZXZlbnQsIGZ1bmMpLFxuICAgICAgICBvbmNlOiAoZXZlbnQsIGZ1bmMpID0+IGVlLm9uY2UoZXZlbnQsIGZ1bmMpLFxuICAgICAgICBvZmY6IChldmVudCwgZnVuY05hbWUpID0+IGVlLm9mZihldmVudCwgZnVuY05hbWUpLFxuICAgIH0gYXMgQVNNYW5hZ2VyO1xufVxuXG4vLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vRXhwbGljaXRBbnk6IDxleHBsYW5hdGlvbj5cbigoZ2xvYmFsOiBhbnkpID0+IHtcbiAgICBnbG9iYWwuQVNGYWN0b3IgPSBBU0ZhY3Rvcnk7XG59KSh0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiID8gd2luZG93IDoge30pO1xuIiwKICAgICJpbXBvcnQgeyBBU0ZhY3RvcnksIHR5cGUgQVNNYW5hZ2VyIH0gZnJvbSBcIkBzb2NrZXRodWIvYWN0aXZpdHktc3RyZWFtc1wiO1xuaW1wb3J0IHR5cGUge1xuICAgIEFjdGl2aXR5T2JqZWN0LFxuICAgIEFjdGl2aXR5U3RyZWFtLFxuICAgIEJhc2VBY3Rpdml0eU9iamVjdCxcbn0gZnJvbSBcIkBzb2NrZXRodWIvc2NoZW1hc1wiO1xuaW1wb3J0IEV2ZW50RW1pdHRlciBmcm9tIFwiZXZlbnRlbWl0dGVyM1wiO1xuaW1wb3J0IHR5cGUgeyBTb2NrZXQgfSBmcm9tIFwic29ja2V0LmlvLWNsaWVudFwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEV2ZW50TWFwcGluZyB7XG4gICAgY3JlZGVudGlhbHM6IE1hcDxzdHJpbmcsIEFjdGl2aXR5U3RyZWFtPjtcbiAgICBcImFjdGl2aXR5LW9iamVjdFwiOiBNYXA8c3RyaW5nLCBCYXNlQWN0aXZpdHlPYmplY3Q+O1xuICAgIGNvbm5lY3Q6IE1hcDxzdHJpbmcsIEFjdGl2aXR5U3RyZWFtPjtcbiAgICBqb2luOiBNYXA8c3RyaW5nLCBBY3Rpdml0eVN0cmVhbT47XG59XG5cbmludGVyZmFjZSBDdXN0b21FbWl0dGVyIGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcbiAgICBfZW1pdChzOiBzdHJpbmcsIG86IHVua25vd24sIGM/OiB1bmtub3duKTogdm9pZDtcbiAgICBjb25uZWN0KCk6IHZvaWQ7XG4gICAgZGlzY29ubmVjdCgpOiB2b2lkO1xuICAgIGNvbm5lY3RlZDogYm9vbGVhbjtcbiAgICBpZDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFNvY2tldGh1YkNsaWVudCAtIENsaWVudCBsaWJyYXJ5IGZvciBTb2NrZXRodWIgcHJvdG9jb2wgZ2F0ZXdheVxuICpcbiAqIEEgSmF2YVNjcmlwdCBjbGllbnQgZm9yIGNvbm5lY3RpbmcgdG8gU29ja2V0aHViIHNlcnZlcnMuIFByb3ZpZGVzIGEgaGlnaC1sZXZlbFxuICogQVBJIGZvciBzZW5kaW5nIGFuZCByZWNlaXZpbmcgQWN0aXZpdHlTdHJlYW1zIG1lc3NhZ2VzIG92ZXIgU29ja2V0LklPLCB3aXRoXG4gKiBhdXRvbWF0aWMgc3RhdGUgbWFuYWdlbWVudCBhbmQgcmVjb25uZWN0aW9uIGhhbmRsaW5nLlxuICpcbiAqIFNvY2tldGh1YiBhY3RzIGFzIGEgcHJvdG9jb2wgZ2F0ZXdheSwgdHJhbnNsYXRpbmcgQWN0aXZpdHlTdHJlYW1zIG1lc3NhZ2VzIGludG9cbiAqIHZhcmlvdXMgcHJvdG9jb2xzIChYTVBQLCBJUkMsIFJTUywgZXRjLikuIFRoaXMgY2xpZW50IGhhbmRsZXMgdGhlIGNvbW11bmljYXRpb25cbiAqIHdpdGggdGhlIFNvY2tldGh1YiBzZXJ2ZXIsIGluY2x1ZGluZyBjcmVkZW50aWFsIG1hbmFnZW1lbnQsIGNvbm5lY3Rpb24gc3RhdGUsXG4gKiBhbmQgYXV0b21hdGljIHJlY29ubmVjdGlvbi5cbiAqXG4gKiAjIyBBdXRvbWF0aWMgUmVjb25uZWN0aW9uICYgU3RhdGUgUmVwbGF5XG4gKlxuICogVGhpcyBjbGllbnQgYXV0b21hdGljYWxseSBoYW5kbGVzIHRyYW5zaWVudCBuZXR3b3JrIGRpc2Nvbm5lY3Rpb25zIGJ5IHN0b3JpbmdcbiAqIGNvbm5lY3Rpb24gc3RhdGUgaW4gbWVtb3J5IGFuZCByZXBsYXlpbmcgaXQgd2hlbiB0aGUgc29ja2V0IHJlY29ubmVjdHMuXG4gKlxuICogIyMjIFNlY3VyaXR5IE1vZGVsXG4gKlxuICogKipTdG9yYWdlIExvY2F0aW9uOioqXG4gKiAtIEFsbCBjcmVkZW50aWFscyBhbmQgc3RhdGUgYXJlIHN0b3JlZCBPTkxZIGluIEphdmFTY3JpcHQgbWVtb3J5IChoZWFwKVxuICogLSBOb3RoaW5nIGlzIHBlcnNpc3RlZCB0byBsb2NhbFN0b3JhZ2UsIHNlc3Npb25TdG9yYWdlLCBjb29raWVzLCBvciBkaXNrXG4gKiAtIE1lbW9yeSBpcyBjbGVhcmVkIHdoZW4gdGhlIGJyb3dzZXIgdGFiIGNsb3NlcyBvciBwYWdlIHJlZnJlc2hlc1xuICpcbiAqICoqUmVwbGF5IFRyaWdnZXJzOioqXG4gKiAtIEF1dG9tYXRpYyByZXBsYXkgb2NjdXJzIG9uIFNvY2tldC5JTyByZWNvbm5lY3Rpb24gZXZlbnRzXG4gKiAtIFR5cGljYWxseSB0cmlnZ2VyZWQgYnkgYnJpZWYgbmV0d29yayBpbnRlcnJ1cHRpb25zIChXaUZpIHN3aXRjaGluZywgbW9iaWxlIG5ldHdvcmsgYmxpcHMpXG4gKiAtIERvZXMgTk9UIG9jY3VyIG9uIHBhZ2UgcmVmcmVzaCAobmV3IFNvY2tldGh1YkNsaWVudCBpbnN0YW5jZSA9IGVtcHR5IHN0YXRlKVxuICpcbiAqICoqU2VydmVyIFJlc3RhcnQgQmVoYXZpb3I6KipcbiAqIC0gSWYgc2VydmVyIHJlc3RhcnRzLCBjbGllbnQgc29ja2V0IHdpbGwgcmVjb25uZWN0IGFuZCByZXBsYXkgY3JlZGVudGlhbHNcbiAqIC0gU2VydmVyIG11c3QgaGFuZGxlIHJlcGxheWVkIGNyZWRlbnRpYWxzIGFwcHJvcHJpYXRlbHkgKHZhbGlkYXRlLCByZWplY3Qgc3RhbGUgc2Vzc2lvbnMsIGV0Yy4pXG4gKiAtIEFwcGxpY2F0aW9ucyBzaG91bGQgaW1wbGVtZW50IHByb3BlciBzZXNzaW9uIHZhbGlkYXRpb24gc2VydmVyLXNpZGVcbiAqXG4gKiAqKkxpZmV0aW1lOioqXG4gKiAtIENyZWRlbnRpYWxzIGV4aXN0IG9ubHkgZHVyaW5nIHRoZSBicm93c2VyIHRhYidzIGxpZmV0aW1lXG4gKiAtIENsZWFyZWQgb24gcGFnZSByZWxvYWQsIHRhYiBjbG9zZSwgb3IgbWFudWFsIGRpc2Nvbm5lY3RcbiAqIC0gTm90IGFjY2Vzc2libGUgYWNyb3NzIHRhYnMgb3IgYWZ0ZXIgYnJvd3NlciByZXN0YXJ0XG4gKlxuICogKipXaGF0IEdldHMgUmVwbGF5ZWQ6KipcbiAqIC0gQ3JlZGVudGlhbHMgKHVzZXJuYW1lL3Bhc3N3b3JkL3Rva2VucyBzZW50IHZpYSBjcmVkZW50aWFscyBldmVudClcbiAqIC0gQWN0aXZpdHkgT2JqZWN0cyAoYWN0b3IgZGVmaW5pdGlvbnMpXG4gKiAtIENvbm5lY3QgY29tbWFuZHMgKHBsYXRmb3JtIGNvbm5lY3Rpb25zKVxuICogLSBKb2luIGNvbW1hbmRzIChyb29tL2NoYW5uZWwgam9pbnMpXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIC8vIENyZWF0ZSBjbGllbnRcbiAqIGNvbnN0IHNvY2tldCA9IGlvKCdodHRwOi8vbG9jYWxob3N0OjEwNTUwJyk7XG4gKiBjb25zdCBjbGllbnQgPSBuZXcgU29ja2V0aHViQ2xpZW50KHNvY2tldCk7XG4gKlxuICogLy8gU2VuZCBjcmVkZW50aWFscyAtIHRoZXNlIHdpbGwgYmUgcmVwbGF5ZWQgb24gcmVjb25uZWN0aW9uXG4gKiBjbGllbnQuc29ja2V0LmVtaXQoJ2NyZWRlbnRpYWxzJywge1xuICogICBhY3RvcjogJ3VzZXJAZXhhbXBsZS5jb20nLFxuICogICBvYmplY3Q6IHsgdXNlcm5hbWU6ICd1c2VyJywgcGFzc3dvcmQ6ICdwYXNzJyB9XG4gKiB9KTtcbiAqXG4gKiAvLyBJZiBuZXR3b3JrIGRpc2Nvbm5lY3RzIGFuZCByZWNvbm5lY3RzLCBjcmVkZW50aWFscyBhcmUgYXV0b21hdGljYWxseSByZXBsYXllZFxuICogLy8gSWYgcGFnZSByZWZyZXNoZXMsIGNyZWRlbnRpYWxzIGFyZSBsb3N0IGFuZCBtdXN0IGJlIHJlc2VudFxuICogYGBgXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNvY2tldGh1YkNsaWVudCB7XG4gICAgLyoqXG4gICAgICogSW4tbWVtb3J5IHN0b3JhZ2UgZm9yIGNsaWVudCBzdGF0ZSB0aGF0IHNob3VsZCBiZSByZXBsYXllZCBvbiByZWNvbm5lY3Rpb24uXG4gICAgICpcbiAgICAgKiBTZWN1cml0eTogU3RvcmVkIE9OTFkgaW4gSmF2YVNjcmlwdCBoZWFwIG1lbW9yeS4gTmV2ZXIgcGVyc2lzdGVkIHRvIGRpc2ssXG4gICAgICogbG9jYWxTdG9yYWdlLCBvciBhbnkgcGVybWFuZW50IHN0b3JhZ2UuIENsZWFyZWQgb24gcGFnZSByZWxvYWQuXG4gICAgICovXG4gICAgcHJpdmF0ZSBldmVudHM6IEV2ZW50TWFwcGluZyA9IHtcbiAgICAgICAgY3JlZGVudGlhbHM6IG5ldyBNYXAoKSxcbiAgICAgICAgXCJhY3Rpdml0eS1vYmplY3RcIjogbmV3IE1hcCgpLFxuICAgICAgICBjb25uZWN0OiBuZXcgTWFwKCksXG4gICAgICAgIGpvaW46IG5ldyBNYXAoKSxcbiAgICB9O1xuICAgIHByaXZhdGUgX3NvY2tldDogU29ja2V0O1xuICAgIHB1YmxpYyBBY3Rpdml0eVN0cmVhbXM6IEFTTWFuYWdlcjtcbiAgICBwdWJsaWMgc29ja2V0OiBDdXN0b21FbWl0dGVyO1xuICAgIHB1YmxpYyBkZWJ1ZyA9IHRydWU7XG5cbiAgICBjb25zdHJ1Y3Rvcihzb2NrZXQ6IFNvY2tldCkge1xuICAgICAgICBpZiAoIXNvY2tldCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU29ja2V0aHViQ2xpZW50IHJlcXVpcmVzIGEgc29ja2V0LmlvIGluc3RhbmNlXCIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3NvY2tldCA9IHNvY2tldDtcblxuICAgICAgICB0aGlzLnNvY2tldCA9IHRoaXMuY3JlYXRlUHVibGljRW1pdHRlcigpO1xuICAgICAgICB0aGlzLnJlZ2lzdGVyU29ja2V0SU9IYW5kbGVycygpO1xuICAgICAgICB0aGlzLmluaXRBY3Rpdml0eVN0cmVhbXMoKTtcblxuICAgICAgICB0aGlzLkFjdGl2aXR5U3RyZWFtcy5vbihcbiAgICAgICAgICAgIFwiYWN0aXZpdHktb2JqZWN0LWNyZWF0ZVwiLFxuICAgICAgICAgICAgKG9iajogQWN0aXZpdHlPYmplY3QpID0+IHtcbiAgICAgICAgICAgICAgICBzb2NrZXQuZW1pdChcImFjdGl2aXR5LW9iamVjdFwiLCBvYmosIChlcnI6IG5ldmVyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJmYWlsZWQgdG8gY3JlYXRlIGFjdGl2aXR5LW9iamVjdCBcIiwgZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXZlbnRBY3Rpdml0eU9iamVjdChvYmopO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICApO1xuXG4gICAgICAgIHNvY2tldC5vbihcImFjdGl2aXR5LW9iamVjdFwiLCAob2JqKSA9PiB7XG4gICAgICAgICAgICB0aGlzLkFjdGl2aXR5U3RyZWFtcy5PYmplY3QuY3JlYXRlKG9iaik7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGluaXRBY3Rpdml0eVN0cmVhbXMoKSB7XG4gICAgICAgIHRoaXMuQWN0aXZpdHlTdHJlYW1zID0gQVNGYWN0b3J5KHsgc3BlY2lhbE9ianM6IFtcImNyZWRlbnRpYWxzXCJdIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENsZWFyIHN0b3JlZCBjcmVkZW50aWFscyB0byBwcmV2ZW50IGF1dG9tYXRpYyByZXBsYXkgb24gcmVjb25uZWN0aW9uLlxuICAgICAqXG4gICAgICogVGhpcyBtZXRob2QgcmVtb3ZlcyBhbGwgc3RvcmVkIGNyZWRlbnRpYWxzIGZyb20gbWVtb3J5LiBVc2VmdWwgZm9yXG4gICAgICogc2VjdXJpdHktc2Vuc2l0aXZlIGFwcGxpY2F0aW9ucyB0aGF0IHdhbnQgdG8gcHJldmVudCBhdXRvbWF0aWMgY3JlZGVudGlhbFxuICAgICAqIHJlcGxheSB3aGVuIHRoZSBzb2NrZXQgcmVjb25uZWN0cy5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIC8vIENsZWFyIGNyZWRlbnRpYWxzIG9uIGRpc2Nvbm5lY3RcbiAgICAgKiBzYy5zb2NrZXQub24oJ2Rpc2Nvbm5lY3QnLCAoKSA9PiB7XG4gICAgICogICBzYy5jbGVhckNyZWRlbnRpYWxzKCk7XG4gICAgICogfSk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGNsZWFyQ3JlZGVudGlhbHMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZXZlbnRzLmNyZWRlbnRpYWxzLmNsZWFyKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVQdWJsaWNFbWl0dGVyKCk6IEN1c3RvbUVtaXR0ZXIge1xuICAgICAgICBjb25zdCBzb2NrZXQgPSBuZXcgRXZlbnRFbWl0dGVyKCkgYXMgQ3VzdG9tRW1pdHRlcjtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIHNvY2tldC5fZW1pdCA9IHNvY2tldC5lbWl0O1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgc29ja2V0LmVtaXQgPSAoZXZlbnQsIGNvbnRlbnQsIGNhbGxiYWNrKTogdm9pZCA9PiB7XG4gICAgICAgICAgICBpZiAoZXZlbnQgPT09IFwiY3JlZGVudGlhbHNcIikge1xuICAgICAgICAgICAgICAgIHRoaXMuZXZlbnRDcmVkZW50aWFscyhjb250ZW50KTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQgPT09IFwiYWN0aXZpdHktb2JqZWN0XCIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmV2ZW50QWN0aXZpdHlPYmplY3QoY29udGVudCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50ID09PSBcIm1lc3NhZ2VcIikge1xuICAgICAgICAgICAgICAgIHRoaXMuZXZlbnRNZXNzYWdlKGNvbnRlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fc29ja2V0LmVtaXQoZXZlbnQgYXMgc3RyaW5nLCBjb250ZW50LCBjYWxsYmFjayk7XG4gICAgICAgIH07XG4gICAgICAgIHNvY2tldC5jb25uZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgc29ja2V0LmRpc2Nvbm5lY3QgPSAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9zb2NrZXQuZGlzY29ubmVjdCgpO1xuICAgICAgICB9O1xuICAgICAgICBzb2NrZXQuY29ubmVjdCA9ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX3NvY2tldC5jb25uZWN0KCk7XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBzb2NrZXQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBldmVudEFjdGl2aXR5T2JqZWN0KGNvbnRlbnQ6IEFjdGl2aXR5T2JqZWN0KSB7XG4gICAgICAgIGlmIChjb250ZW50LmlkKSB7XG4gICAgICAgICAgICB0aGlzLmV2ZW50c1tcImFjdGl2aXR5LW9iamVjdFwiXS5zZXQoY29udGVudC5pZCwgY29udGVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGV2ZW50Q3JlZGVudGlhbHMoY29udGVudDogQWN0aXZpdHlTdHJlYW0pIHtcbiAgICAgICAgaWYgKGNvbnRlbnQub2JqZWN0ICYmIGNvbnRlbnQub2JqZWN0LnR5cGUgPT09IFwiY3JlZGVudGlhbHNcIikge1xuICAgICAgICAgICAgY29uc3Qga2V5OiBzdHJpbmcgPVxuICAgICAgICAgICAgICAgIGNvbnRlbnQuYWN0b3IuaWQgfHwgKGNvbnRlbnQuYWN0b3IgYXMgdW5rbm93biBhcyBzdHJpbmcpO1xuICAgICAgICAgICAgdGhpcy5ldmVudHMuY3JlZGVudGlhbHMuc2V0KGtleSwgY29udGVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGV2ZW50TWVzc2FnZShjb250ZW50OiBCYXNlQWN0aXZpdHlPYmplY3QpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9zb2NrZXQuY29ubmVjdGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gZWl0aGVyIHN0b3JlcyBvciBkZWxldGUgdGhlIHNwZWNpZmllZCBjb250ZW50IG9udG8gdGhlIHN0b3JlZEpvaW5zIG1hcCxcbiAgICAgICAgLy8gZm9yIHJlcGx5IG9uY2Ugd2UncmUgYmFjayBvbmxpbmUuXG4gICAgICAgIGNvbnN0IGtleSA9IFNvY2tldGh1YkNsaWVudC5nZXRLZXkoY29udGVudCBhcyBBY3Rpdml0eVN0cmVhbSk7XG4gICAgICAgIGlmIChjb250ZW50LnR5cGUgPT09IFwiam9pblwiIHx8IGNvbnRlbnQudHlwZSA9PT0gXCJjb25uZWN0XCIpIHtcbiAgICAgICAgICAgIHRoaXMuZXZlbnRzW2NvbnRlbnQudHlwZV0uc2V0KGtleSwgY29udGVudCBhcyBBY3Rpdml0eVN0cmVhbSk7XG4gICAgICAgIH0gZWxzZSBpZiAoY29udGVudC50eXBlID09PSBcImxlYXZlXCIpIHtcbiAgICAgICAgICAgIHRoaXMuZXZlbnRzLmpvaW4uZGVsZXRlKGtleSk7XG4gICAgICAgIH0gZWxzZSBpZiAoY29udGVudC50eXBlID09PSBcImRpc2Nvbm5lY3RcIikge1xuICAgICAgICAgICAgdGhpcy5ldmVudHMuY29ubmVjdC5kZWxldGUoa2V5KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIGdldEtleShjb250ZW50OiBBY3Rpdml0eVN0cmVhbSkge1xuICAgICAgICBjb25zdCBhY3RvciA9IGNvbnRlbnQuYWN0b3I/LmlkIHx8IGNvbnRlbnQuYWN0b3I7XG4gICAgICAgIGlmICghYWN0b3IpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICBgYWN0b3IgcHJvcGVydHkgbm90IHByZXNlbnQgZm9yIG1lc3NhZ2UgdHlwZTogJHtjb250ZW50Py50eXBlfWAsXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IGNvbnRlbnQudGFyZ2V0XG4gICAgICAgICAgICA/IGNvbnRlbnQudGFyZ2V0LmlkIHx8IGNvbnRlbnQudGFyZ2V0XG4gICAgICAgICAgICA6IFwiXCI7XG4gICAgICAgIHJldHVybiBgJHthY3Rvcn0tJHt0YXJnZXR9YDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGxvZyhtc2c6IHN0cmluZywgb2JqPzogdW5rbm93bikge1xuICAgICAgICBpZiAodGhpcy5kZWJ1Zykge1xuICAgICAgICAgICAgY29uc29sZS5sb2cobXNnLCBvYmopO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZWdpc3RlclNvY2tldElPSGFuZGxlcnMoKSB7XG4gICAgICAgIC8vIG1pZGRsZXdhcmUgZm9yIGV2ZW50cyB3aGljaCBkb24ndCBkZWFsIGluIEFTIG9iamVjdHNcbiAgICAgICAgY29uc3QgY2FsbEhhbmRsZXIgPSAoZXZlbnQ6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGFzeW5jIChvYmo/OiB1bmtub3duKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGV2ZW50ID09PSBcImNvbm5lY3RcIikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNvY2tldC5pZCA9IHRoaXMuX3NvY2tldC5pZDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zb2NrZXQuY29ubmVjdGVkID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQXV0b21hdGljIHN0YXRlIHJlcGxheSBvbiByZWNvbm5lY3Rpb24uXG4gICAgICAgICAgICAgICAgICAgICAqXG4gICAgICAgICAgICAgICAgICAgICAqIFdoZW4gU29ja2V0LklPIHJlY29ubmVjdHMgYWZ0ZXIgYSBuZXR3b3JrIGludGVycnVwdGlvbiwgd2UgYXV0b21hdGljYWxseVxuICAgICAgICAgICAgICAgICAgICAgKiByZXBsYXkgYWxsIHN0b3JlZCBzdGF0ZSB0byByZXN0b3JlIHRoZSBzZXNzaW9uIHNlYW1sZXNzbHk6XG4gICAgICAgICAgICAgICAgICAgICAqXG4gICAgICAgICAgICAgICAgICAgICAqIDEuIEFjdGl2aXR5IE9iamVjdHMgKGFjdG9yIGRlZmluaXRpb25zKVxuICAgICAgICAgICAgICAgICAgICAgKiAyLiBDcmVkZW50aWFscyAoYXV0aGVudGljYXRpb24pXG4gICAgICAgICAgICAgICAgICAgICAqIDMuIENvbm5lY3QgY29tbWFuZHMgKHBsYXRmb3JtIGNvbm5lY3Rpb25zKVxuICAgICAgICAgICAgICAgICAgICAgKiA0LiBKb2luIGNvbW1hbmRzIChyb29tL2NoYW5uZWwgbWVtYmVyc2hpcHMpXG4gICAgICAgICAgICAgICAgICAgICAqXG4gICAgICAgICAgICAgICAgICAgICAqIFRoaXMgYWxsb3dzIHRoZSBjbGllbnQgdG8gc3Vydml2ZSBicmllZiBuZXR3b3JrIGJsaXBzIHdpdGhvdXQgcmVxdWlyaW5nXG4gICAgICAgICAgICAgICAgICAgICAqIHVzZXIgaW50ZXJ2ZW50aW9uLiBIb3dldmVyLCB0aGUgc2VydmVyIG11c3QgcHJvcGVybHkgdmFsaWRhdGUgcmVwbGF5ZWRcbiAgICAgICAgICAgICAgICAgICAgICogY3JlZGVudGlhbHMgYXMgdGhleSBtYXkgYmUgc3RhbGUgb3IgcmV2b2tlZC5cbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVwbGF5KFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJhY3Rpdml0eS1vYmplY3RcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXZlbnRzW1wiYWN0aXZpdHktb2JqZWN0XCJdLFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlcGxheShcImNyZWRlbnRpYWxzXCIsIHRoaXMuZXZlbnRzLmNyZWRlbnRpYWxzKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXBsYXkoXCJtZXNzYWdlXCIsIHRoaXMuZXZlbnRzLmNvbm5lY3QpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlcGxheShcIm1lc3NhZ2VcIiwgdGhpcy5ldmVudHMuam9pbik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudCA9PT0gXCJkaXNjb25uZWN0XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zb2NrZXQuY29ubmVjdGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuc29ja2V0Ll9lbWl0KGV2ZW50LCBvYmopO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyByZWdpc3RlciBmb3IgZXZlbnRzIHRoYXQgZ2l2ZSB1cyBpbmZvcm1hdGlvbiBvbiBjb25uZWN0aW9uIHN0YXR1c1xuICAgICAgICB0aGlzLl9zb2NrZXQub24oXCJjb25uZWN0XCIsIGNhbGxIYW5kbGVyKFwiY29ubmVjdFwiKSk7XG4gICAgICAgIHRoaXMuX3NvY2tldC5vbihcImNvbm5lY3RfZXJyb3JcIiwgY2FsbEhhbmRsZXIoXCJjb25uZWN0X2Vycm9yXCIpKTtcbiAgICAgICAgdGhpcy5fc29ja2V0Lm9uKFwiZGlzY29ubmVjdFwiLCBjYWxsSGFuZGxlcihcImRpc2Nvbm5lY3RcIikpO1xuXG4gICAgICAgIC8vIHVzZSBhcyBtaWRkbGV3YXJlIHRvIHJlY2VpdmUgaW5jb21pbmcgU29ja2V0aHViIG1lc3NhZ2VzIGFuZCB1bnBhY2sgdGhlbVxuICAgICAgICAvLyB1c2luZyB0aGUgQWN0aXZpdHlTdHJlYW1zIGxpYnJhcnkgYmVmb3JlIHBhc3NpbmcgdGhlbSBhbG9uZyB0byB0aGUgYXBwLlxuICAgICAgICB0aGlzLl9zb2NrZXQub24oXCJtZXNzYWdlXCIsIChvYmopID0+IHtcbiAgICAgICAgICAgIHRoaXMuc29ja2V0Ll9lbWl0KFwibWVzc2FnZVwiLCB0aGlzLkFjdGl2aXR5U3RyZWFtcy5TdHJlYW0ob2JqKSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFR5cGUgZ3VhcmQgdG8gY2hlY2sgaWYgYW4gb2JqZWN0IGlzIGFuIEFjdGl2aXR5U3RyZWFtIHdpdGggYSB2YWxpZCBhY3Rvci5pZC5cbiAgICAgKi9cbiAgICBwcml2YXRlIGhhc0FjdG9ySWQoXG4gICAgICAgIG9iajogQWN0aXZpdHlTdHJlYW0gfCBBY3Rpdml0eU9iamVjdCxcbiAgICApOiBvYmogaXMgQWN0aXZpdHlTdHJlYW0ge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgXCJhY3RvclwiIGluIG9iaiAmJlxuICAgICAgICAgICAgb2JqLmFjdG9yICE9PSBudWxsICYmXG4gICAgICAgICAgICB0eXBlb2Ygb2JqLmFjdG9yID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgICAgICBcImlkXCIgaW4gb2JqLmFjdG9yICYmXG4gICAgICAgICAgICB0eXBlb2Ygb2JqLmFjdG9yLmlkID09PSBcInN0cmluZ1wiXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVwbGF5cyBwcmV2aW91c2x5IHNlbnQgZXZlbnRzIHRvIHRoZSBzZXJ2ZXIgYWZ0ZXIgcmVjb25uZWN0aW9uLlxuICAgICAqXG4gICAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGF1dG9tYXRpY2FsbHkgd2hlbiB0aGUgU29ja2V0LklPIGNvbm5lY3Rpb24gaXNcbiAgICAgKiByZS1lc3RhYmxpc2hlZCBhZnRlciBhIHRyYW5zaWVudCBuZXR3b3JrIGludGVycnVwdGlvbi4gSXQgcmVzZW5kc1xuICAgICAqIGNyZWRlbnRpYWxzIGFuZCBjb25uZWN0aW9uIHN0YXRlIHNvIHRoZSB1c2VyIGRvZXNuJ3QgbmVlZCB0byBtYW51YWxseVxuICAgICAqIHJlLWF1dGhlbnRpY2F0ZSBvciByZWpvaW4gY2hhbm5lbHMuXG4gICAgICpcbiAgICAgKiBTZWN1cml0eSBjb25zaWRlcmF0aW9uczpcbiAgICAgKiAtIE9ubHkgcmVwbGF5cyBldmVudHMgc3RvcmVkIGluIG1lbW9yeSBkdXJpbmcgdGhpcyBzZXNzaW9uXG4gICAgICogLSBEb2VzIG5vdCByZXBsYXkgYWZ0ZXIgcGFnZSByZWZyZXNoIChtZW1vcnkgY2xlYXJlZClcbiAgICAgKiAtIFNlcnZlciBzaG91bGQgdmFsaWRhdGUgcmVwbGF5ZWQgY3JlZGVudGlhbHMgKG1heSBiZSBzdGFsZS9yZXZva2VkKVxuICAgICAqXG4gICAgICogQHBhcmFtIG5hbWUgLSBFdmVudCBuYW1lIHRvIGVtaXQgKFwiY3JlZGVudGlhbHNcIiwgXCJhY3Rpdml0eS1vYmplY3RcIiwgXCJtZXNzYWdlXCIpXG4gICAgICogQHBhcmFtIGFzTWFwIC0gTWFwIG9mIGV2ZW50cyB0byByZXBsYXlcbiAgICAgKi9cbiAgICBwcml2YXRlIHJlcGxheShcbiAgICAgICAgbmFtZTogc3RyaW5nLFxuICAgICAgICBhc01hcDogTWFwPHN0cmluZywgQWN0aXZpdHlTdHJlYW0gfCBCYXNlQWN0aXZpdHlPYmplY3Q+LFxuICAgICkge1xuICAgICAgICBmb3IgKGNvbnN0IG9iaiBvZiBhc01hcC52YWx1ZXMoKSkge1xuICAgICAgICAgICAgLy8gYWN0aXZpdHktb2JqZWN0cyBhcmUgcmF3IG9iamVjdHMsIGRvbid0IHBhc3MgdGhyb3VnaCBTdHJlYW0oKVxuICAgICAgICAgICAgLy8gd2hpY2ggaXMgZGVzaWduZWQgZm9yIGFjdGl2aXR5IHN0cmVhbXMgd2l0aCBhY3Rvci9vYmplY3Qgc3RydWN0dXJlXG4gICAgICAgICAgICBjb25zdCBpc0FjdGl2aXR5T2JqZWN0ID0gbmFtZSA9PT0gXCJhY3Rpdml0eS1vYmplY3RcIjtcbiAgICAgICAgICAgIGNvbnN0IGV4cGFuZGVkT2JqID0gaXNBY3Rpdml0eU9iamVjdFxuICAgICAgICAgICAgICAgID8gb2JqXG4gICAgICAgICAgICAgICAgOiB0aGlzLkFjdGl2aXR5U3RyZWFtcy5TdHJlYW0ob2JqKTtcbiAgICAgICAgICAgIGxldCBpZCA9IGV4cGFuZGVkT2JqPy5pZDtcbiAgICAgICAgICAgIGlmICghaXNBY3Rpdml0eU9iamVjdCAmJiB0aGlzLmhhc0FjdG9ySWQoZXhwYW5kZWRPYmopKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWN0b3IgPSAoZXhwYW5kZWRPYmogYXMgQWN0aXZpdHlTdHJlYW0pLmFjdG9yO1xuICAgICAgICAgICAgICAgIC8vIGFjdG9yIGNhbiBiZSBhIHN0cmluZyAoSklEKSBvciBhbiBvYmplY3Qgd2l0aCBhbiBpZCBmaWVsZFxuICAgICAgICAgICAgICAgIGlkID0gdHlwZW9mIGFjdG9yID09PSBcInN0cmluZ1wiID8gYWN0b3IgOiBhY3Rvci5pZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMubG9nKGByZXBsYXlpbmcgJHtuYW1lfSBmb3IgJHtpZH1gKTtcbiAgICAgICAgICAgIHRoaXMuX3NvY2tldC5lbWl0KG5hbWUsIGV4cGFuZGVkT2JqKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0V4cGxpY2l0QW55OiA8ZXhwbGFuYXRpb24+XG4oKGdsb2JhbDogYW55KSA9PiB7XG4gICAgZ2xvYmFsLlNvY2tldGh1YkNsaWVudCA9IFNvY2tldGh1YkNsaWVudDtcbiAgICAvLyBAdHMtaWdub3JlXG59KSh0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiID8gd2luZG93IDoge30pO1xuIgogIF0sCiAgIm1hcHBpbmdzIjogIm92QkFFQSxJQUFJLEVBQU0sT0FBTyxVQUFVLGVBQ3ZCLEVBQVMsSUFTYixTQUFTLENBQU0sRUFBRyxFQVNsQixHQUFJLE9BQU8sUUFPVCxHQU5BLEVBQU8sVUFBWSxPQUFPLE9BQU8sSUFBSSxFQU1qQyxDQUFDLElBQUksRUFBTyxFQUFFLFVBQVcsRUFBUyxHQVl4QyxTQUFTLENBQUUsQ0FBQyxFQUFJLEVBQVMsRUFBTSxDQUM3QixLQUFLLEdBQUssRUFDVixLQUFLLFFBQVUsRUFDZixLQUFLLEtBQU8sR0FBUSxHQWN0QixTQUFTLENBQVcsQ0FBQyxFQUFTLEVBQU8sRUFBSSxFQUFTLEVBQU0sQ0FDdEQsR0FBSSxPQUFPLElBQU8sV0FDaEIsTUFBVSxVQUFVLGlDQUFpQyxFQUd2RCxJQUFJLEVBQVcsSUFBSSxFQUFHLEVBQUksR0FBVyxFQUFTLENBQUksRUFDOUMsRUFBTSxFQUFTLEVBQVMsRUFBUSxFQUVwQyxHQUFJLENBQUMsRUFBUSxRQUFRLEdBQU0sRUFBUSxRQUFRLEdBQU8sRUFBVSxFQUFRLGVBQy9ELFFBQUksQ0FBQyxFQUFRLFFBQVEsR0FBSyxHQUFJLEVBQVEsUUFBUSxHQUFLLEtBQUssQ0FBUSxFQUNoRSxPQUFRLFFBQVEsR0FBTyxDQUFDLEVBQVEsUUFBUSxHQUFNLENBQVEsRUFFM0QsT0FBTyxFQVVULFNBQVMsQ0FBVSxDQUFDLEVBQVMsRUFBSyxDQUNoQyxHQUFJLEVBQUUsRUFBUSxlQUFpQixFQUFHLEVBQVEsUUFBVSxJQUFJLEVBQ25ELFlBQU8sRUFBUSxRQUFRLEdBVTlCLFNBQVMsQ0FBWSxFQUFHLENBQ3RCLEtBQUssUUFB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QUFHLEVBSXBCLHdCQUF3QixFQUFHLENBRS9CLElBQU0sRUFBYyxDQUFDLElBQWtCLENBQ25DLE1BQU8sT0FBTyxJQUFrQixDQUM1QixHQUFJLElBQVUsVUFDVixLQUFLLE9BQU8sR0FBSyxLQUFLLFFBQVEsR0FDOUIsS0FBSyxPQUFPLFVBQVksR0FpQnhCLEtBQUssT0FDRCxrQkFDQSxLQUFLLE9BQU8sa0JBQ2hCLEVBQ0EsS0FBSyxPQUFPLGNBQWUsS0FBSyxPQUFPLFdBQVcsRUFDbEQsS0FBSyxPQUFPLFVBQVcsS0FBSyxPQUFPLE9BQU8sRUFDMUMsS0FBSyxPQUFPLFVBQVcsS0FBSyxPQUFPLElBQUksRUFDcEMsUUFBSSxJQUFVLGFBQ2pCLEtBQUssT0FBTyxVQUFZLEdBRTVCLEtBQUssT0FBTyxNQUFNLEVBQU8sQ0FBRyxJQUtwQyxLQUFLLFFBQVEsR0FBRyxVQUFXLEVBQVksU0FBUyxDQUFDLEVBQ2pELEtBQUssUUFBUSxHQUFHLGdCQUFpQixFQUFZLGVBQWUsQ0FBQyxFQUM3RCxLQUFLLFFBQVEsR0FBRyxhQUFjLEVBQVksWUFBWSxDQUFDLEVBSXZELEtBQUssUUFBUSxHQUFHLFVBQVcsQ0FBQyxJQUFRLENBQ2hDLEtBQUssT0FBTyxNQUFNLFVBQVcsS0FBSyxnQkFBZ0IsT0FBTyxDQUFHLENBQUMsRUFDaEUsRUFNRyxVQUFVLENBQ2QsRUFDcUIsQ0FDckIsTUFDSSxVQUFXLEdBQ1gsRUFBSSxRQUFVLE1BQ2QsT0FBTyxFQUFJLFFBQVUsVUFDckIsT0FBUSxFQUFJLE9BQ1osT0FBTyxFQUFJLE1BQU0sS0FBTyxTQW9CeEIsTUFBTSxDQUNWLEVBQ0EsRUFDRixDQUNFLFFBQVcsS0FBTyxFQUFNLE9BQU8sRUFBRyxDQUc5QixJQUFNLEVBQW1CLElBQVMsa0JBQzVCLEVBQWMsRUFDZCxFQUNBLEtBQUssZ0JBQWdCLE9BQU8sQ0FBRyxFQUNqQyxFQUFLLEdBQWEsR0FDdEIsR0FBSSxDQUFDLEdBQW9CLEtBQUssV0FBVyxDQUFXLEVBQUcsQ0FDbkQsSUFBTSxFQUFTLEVBQStCLE1BRTlDLEVBQUssT0FBTyxJQUFVLFNBQVcsRUFBUSxFQUFNLEdBRW5ELEtBQUssSUFBSSxhQUFhLFNBQVksR0FBSSxFQUN0QyxLQUFLLFFBQVEsS0FBSyxFQUFNLENBQVcsR0FHL0MsRUFHQyxDQUFDLElBQWdCLENBQ2QsRUFBTyxnQkFBa0IsSUFFMUIsT0FBTyxTQUFXLFNBQVcsT0FBUyxDQUFDLENBQUMiLAogICJkZWJ1Z0lkIjogIjBGMzg0QkE4MUZFQzIzMzc2NDc1NkUyMTY0NzU2RTIxIiwKICAibmFtZXMiOiBbXQp9
|
|
46
|
+
//# debugId=A8F773E316799BDC64756E2164756E21
|
|
47
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vbm9kZV9tb2R1bGVzL2V2ZW50ZW1pdHRlcjMvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L2NvbXBpbGUvY29kZWdlbi9jb2RlLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYvZGlzdC9jb21waWxlL2NvZGVnZW4vc2NvcGUuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L2NvbXBpbGUvY29kZWdlbi9pbmRleC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2L2Rpc3QvY29tcGlsZS91dGlsLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYvZGlzdC9jb21waWxlL25hbWVzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYvZGlzdC9jb21waWxlL2Vycm9ycy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2L2Rpc3QvY29tcGlsZS92YWxpZGF0ZS9ib29sU2NoZW1hLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYvZGlzdC9jb21waWxlL3J1bGVzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYvZGlzdC9jb21waWxlL3ZhbGlkYXRlL2FwcGxpY2FiaWxpdHkuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L2NvbXBpbGUvdmFsaWRhdGUvZGF0YVR5cGUuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L2NvbXBpbGUvdmFsaWRhdGUvZGVmYXVsdHMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy9jb2RlLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYvZGlzdC9jb21waWxlL3ZhbGlkYXRlL2tleXdvcmQuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L2NvbXBpbGUvdmFsaWRhdGUvc3Vic2NoZW1hLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9mYXN0LWRlZXAtZXF1YWwvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2pzb24tc2NoZW1hLXRyYXZlcnNlL2luZGV4LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYvZGlzdC9jb21waWxlL3Jlc29sdmUuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L2NvbXBpbGUvdmFsaWRhdGUvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3J1bnRpbWUvdmFsaWRhdGlvbl9lcnJvci5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2L2Rpc3QvY29tcGlsZS9yZWZfZXJyb3IuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L2NvbXBpbGUvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Zhc3QtdXJpL2xpYi91dGlscy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvZmFzdC11cmkvbGliL3NjaGVtZXMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Zhc3QtdXJpL2luZGV4LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYvZGlzdC9ydW50aW1lL3VyaS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2L2Rpc3QvY29yZS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2NvcmUvaWQuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy9jb3JlL3JlZi5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2NvcmUvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy92YWxpZGF0aW9uL2xpbWl0TnVtYmVyLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvdmFsaWRhdGlvbi9tdWx0aXBsZU9mLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYvZGlzdC9ydW50aW1lL3VjczJsZW5ndGguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy92YWxpZGF0aW9uL2xpbWl0TGVuZ3RoLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvdmFsaWRhdGlvbi9wYXR0ZXJuLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvdmFsaWRhdGlvbi9saW1pdFByb3BlcnRpZXMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy92YWxpZGF0aW9uL3JlcXVpcmVkLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvdmFsaWRhdGlvbi9saW1pdEl0ZW1zLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYvZGlzdC9ydW50aW1lL2VxdWFsLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvdmFsaWRhdGlvbi91bmlxdWVJdGVtcy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL3ZhbGlkYXRpb24vY29uc3QuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy92YWxpZGF0aW9uL2VudW0uanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy92YWxpZGF0aW9uL2luZGV4LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvYXBwbGljYXRvci9hZGRpdGlvbmFsSXRlbXMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy9hcHBsaWNhdG9yL2l0ZW1zLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvYXBwbGljYXRvci9wcmVmaXhJdGVtcy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2FwcGxpY2F0b3IvaXRlbXMyMDIwLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvYXBwbGljYXRvci9jb250YWlucy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2FwcGxpY2F0b3IvZGVwZW5kZW5jaWVzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvYXBwbGljYXRvci9wcm9wZXJ0eU5hbWVzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvYXBwbGljYXRvci9hZGRpdGlvbmFsUHJvcGVydGllcy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2FwcGxpY2F0b3IvcHJvcGVydGllcy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2FwcGxpY2F0b3IvcGF0dGVyblByb3BlcnRpZXMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy9hcHBsaWNhdG9yL25vdC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2FwcGxpY2F0b3IvYW55T2YuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy9hcHBsaWNhdG9yL29uZU9mLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvYXBwbGljYXRvci9hbGxPZi5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2FwcGxpY2F0b3IvaWYuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy9hcHBsaWNhdG9yL3RoZW5FbHNlLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvYXBwbGljYXRvci9pbmRleC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2Zvcm1hdC9mb3JtYXQuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy9mb3JtYXQvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy9tZXRhZGF0YS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2RyYWZ0Ny5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2Rpc2NyaW1pbmF0b3IvdHlwZXMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy9kaXNjcmltaW5hdG9yL2luZGV4LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYvZGlzdC9hanYuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi1mb3JtYXRzL2Rpc3QvZm9ybWF0cy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2LWZvcm1hdHMvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L2NvbXBpbGUvY29kZWdlbi9jb2RlLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3QvY29tcGlsZS9jb2RlZ2VuL3Njb3BlLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3QvY29tcGlsZS9jb2RlZ2VuL2luZGV4LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3QvY29tcGlsZS91dGlsLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3QvY29tcGlsZS9uYW1lcy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2LWZvcm1hdHMvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L2NvbXBpbGUvZXJyb3JzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3QvY29tcGlsZS92YWxpZGF0ZS9ib29sU2NoZW1hLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3QvY29tcGlsZS9ydWxlcy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2LWZvcm1hdHMvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L2NvbXBpbGUvdmFsaWRhdGUvYXBwbGljYWJpbGl0eS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2LWZvcm1hdHMvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L2NvbXBpbGUvdmFsaWRhdGUvZGF0YVR5cGUuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi1mb3JtYXRzL25vZGVfbW9kdWxlcy9hanYvZGlzdC9jb21waWxlL3ZhbGlkYXRlL2RlZmF1bHRzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2NvZGUuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi1mb3JtYXRzL25vZGVfbW9kdWxlcy9hanYvZGlzdC9jb21waWxlL3ZhbGlkYXRlL2tleXdvcmQuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi1mb3JtYXRzL25vZGVfbW9kdWxlcy9hanYvZGlzdC9jb21waWxlL3ZhbGlkYXRlL3N1YnNjaGVtYS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2LWZvcm1hdHMvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L2NvbXBpbGUvcmVzb2x2ZS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2LWZvcm1hdHMvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L2NvbXBpbGUvdmFsaWRhdGUvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi1mb3JtYXRzL25vZGVfbW9kdWxlcy9hanYvZGlzdC9ydW50aW1lL3ZhbGlkYXRpb25fZXJyb3IuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi1mb3JtYXRzL25vZGVfbW9kdWxlcy9hanYvZGlzdC9jb21waWxlL3JlZl9lcnJvci5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2LWZvcm1hdHMvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L2NvbXBpbGUvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3VyaS1qcy9kaXN0L2VzNS91cmkuYWxsLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3QvcnVudGltZS91cmkuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi1mb3JtYXRzL25vZGVfbW9kdWxlcy9hanYvZGlzdC9jb3JlLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2NvcmUvaWQuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi1mb3JtYXRzL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvY29yZS9yZWYuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi1mb3JtYXRzL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvY29yZS9pbmRleC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2LWZvcm1hdHMvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy92YWxpZGF0aW9uL2xpbWl0TnVtYmVyLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL3ZhbGlkYXRpb24vbXVsdGlwbGVPZi5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2LWZvcm1hdHMvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3J1bnRpbWUvdWNzMmxlbmd0aC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2LWZvcm1hdHMvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy92YWxpZGF0aW9uL2xpbWl0TGVuZ3RoLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL3ZhbGlkYXRpb24vcGF0dGVybi5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2LWZvcm1hdHMvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy92YWxpZGF0aW9uL2xpbWl0UHJvcGVydGllcy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2LWZvcm1hdHMvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy92YWxpZGF0aW9uL3JlcXVpcmVkLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL3ZhbGlkYXRpb24vbGltaXRJdGVtcy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2LWZvcm1hdHMvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3J1bnRpbWUvZXF1YWwuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi1mb3JtYXRzL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvdmFsaWRhdGlvbi91bmlxdWVJdGVtcy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2LWZvcm1hdHMvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy92YWxpZGF0aW9uL2NvbnN0LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL3ZhbGlkYXRpb24vZW51bS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2LWZvcm1hdHMvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy92YWxpZGF0aW9uL2luZGV4LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2FwcGxpY2F0b3IvYWRkaXRpb25hbEl0ZW1zLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2FwcGxpY2F0b3IvaXRlbXMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi1mb3JtYXRzL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvYXBwbGljYXRvci9wcmVmaXhJdGVtcy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2LWZvcm1hdHMvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy9hcHBsaWNhdG9yL2l0ZW1zMjAyMC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2LWZvcm1hdHMvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy9hcHBsaWNhdG9yL2NvbnRhaW5zLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2FwcGxpY2F0b3IvZGVwZW5kZW5jaWVzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2FwcGxpY2F0b3IvcHJvcGVydHlOYW1lcy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2LWZvcm1hdHMvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy9hcHBsaWNhdG9yL2FkZGl0aW9uYWxQcm9wZXJ0aWVzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2FwcGxpY2F0b3IvcHJvcGVydGllcy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2LWZvcm1hdHMvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy9hcHBsaWNhdG9yL3BhdHRlcm5Qcm9wZXJ0aWVzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2FwcGxpY2F0b3Ivbm90LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2FwcGxpY2F0b3IvYW55T2YuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi1mb3JtYXRzL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvYXBwbGljYXRvci9vbmVPZi5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2LWZvcm1hdHMvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy9hcHBsaWNhdG9yL2FsbE9mLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2FwcGxpY2F0b3IvaWYuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi1mb3JtYXRzL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvYXBwbGljYXRvci90aGVuRWxzZS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2LWZvcm1hdHMvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy9hcHBsaWNhdG9yL2luZGV4LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2Zvcm1hdC9mb3JtYXQuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi1mb3JtYXRzL25vZGVfbW9kdWxlcy9hanYvZGlzdC92b2NhYnVsYXJpZXMvZm9ybWF0L2luZGV4LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL21ldGFkYXRhLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2RyYWZ0Ny5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2LWZvcm1hdHMvbm9kZV9tb2R1bGVzL2Fqdi9kaXN0L3ZvY2FidWxhcmllcy9kaXNjcmltaW5hdG9yL3R5cGVzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvYWp2L2Rpc3Qvdm9jYWJ1bGFyaWVzL2Rpc2NyaW1pbmF0b3IvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi1mb3JtYXRzL25vZGVfbW9kdWxlcy9hanYvZGlzdC9hanYuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi1mb3JtYXRzL2Rpc3QvbGltaXQuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi1mb3JtYXRzL2Rpc3QvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL25lYXJsZXkvbGliL25lYXJsZXkuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL3NtdHAtYWRkcmVzcy1wYXJzZXIvZGlzdC9saWIvZ3JhbW1hci5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvc210cC1hZGRyZXNzLXBhcnNlci9kaXN0L2xpYi9pbmRleC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvZXh0ZW5kL2luZGV4LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9zY2hlbWVzL2luZGV4LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy1kcmFmdDIwMTkvZm9ybWF0cy9pcmkuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2Fqdi1mb3JtYXRzLWRyYWZ0MjAxOS9mb3JtYXRzL2R1cmF0aW9uLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy1kcmFmdDIwMTkvZm9ybWF0cy9pZG4tZW1haWwuanMiLCAibm9kZTpwdW55Y29kZSIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2LWZvcm1hdHMtZHJhZnQyMDE5L2Zvcm1hdHMvaWRuLWhvc3RuYW1lLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy1kcmFmdDIwMTkvZm9ybWF0cy9pcmktcmVmZXJlbmNlLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy1kcmFmdDIwMTkvZm9ybWF0cy9pbmRleC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvYWp2LWZvcm1hdHMtZHJhZnQyMDE5L2luZGV4LmpzIiwgIi4uL3NjaGVtYXMvZGlzdC9jb250ZXh0LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy9ldmVudGVtaXR0ZXIzL2luZGV4Lm1qcyIsICIuLi9hY3Rpdml0eS1zdHJlYW1zL3NyYy9hY3Rpdml0eS1zdHJlYW1zLnRzIiwgIi4uL3NjaGVtYXMvc3JjL2NvbnRleHQudHMiLCAiLi4vc2NoZW1hcy9zcmMvaGVscGVycy9vYmplY3RzLnRzIiwgIi4uL3NjaGVtYXMvc3JjL3NjaGVtYXMvYWN0aXZpdHktb2JqZWN0LnRzIiwgIi4uL3NjaGVtYXMvc3JjL3NjaGVtYXMvYWN0aXZpdHktc3RyZWFtLnRzIiwgIi4uL3NjaGVtYXMvc3JjL3NjaGVtYXMvc29ja2V0aHViLWNvbmZpZy50cyIsICIuLi9zY2hlbWFzL3NyYy92YWxpZGF0b3IudHMiLCAiLi4vc2NoZW1hcy9zcmMvaGVscGVycy9lcnJvci1wYXJzZXIudHMiLCAic3JjL3NvY2tldGh1Yi1jbGllbnQudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbCiAgICAiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaGFzID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eVxuICAsIHByZWZpeCA9ICd+JztcblxuLyoqXG4gKiBDb25zdHJ1Y3RvciB0byBjcmVhdGUgYSBzdG9yYWdlIGZvciBvdXIgYEVFYCBvYmplY3RzLlxuICogQW4gYEV2ZW50c2AgaW5zdGFuY2UgaXMgYSBwbGFpbiBvYmplY3Qgd2hvc2UgcHJvcGVydGllcyBhcmUgZXZlbnQgbmFtZXMuXG4gKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBFdmVudHMoKSB7fVxuXG4vL1xuLy8gV2UgdHJ5IHRvIG5vdCBpbmhlcml0IGZyb20gYE9iamVjdC5wcm90b3R5cGVgLiBJbiBzb21lIGVuZ2luZXMgY3JlYXRpbmcgYW5cbi8vIGluc3RhbmNlIGluIHRoaXMgd2F5IGlzIGZhc3RlciB0aGFuIGNhbGxpbmcgYE9iamVjdC5jcmVhdGUobnVsbClgIGRpcmVjdGx5LlxuLy8gSWYgYE9iamVjdC5jcmVhdGUobnVsbClgIGlzIG5vdCBzdXBwb3J0ZWQgd2UgcHJlZml4IHRoZSBldmVudCBuYW1lcyB3aXRoIGFcbi8vIGNoYXJhY3RlciB0byBtYWtlIHN1cmUgdGhhdCB0aGUgYnVpbHQtaW4gb2JqZWN0IHByb3BlcnRpZXMgYXJlIG5vdFxuLy8gb3ZlcnJpZGRlbiBvciB1c2VkIGFzIGFuIGF0dGFjayB2ZWN0b3IuXG4vL1xuaWYgKE9iamVjdC5jcmVhdGUpIHtcbiAgRXZlbnRzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbiAgLy9cbiAgLy8gVGhpcyBoYWNrIGlzIG5lZWRlZCBiZWNhdXNlIHRoZSBgX19wcm90b19fYCBwcm9wZXJ0eSBpcyBzdGlsbCBpbmhlcml0ZWQgaW5cbiAgLy8gc29tZSBvbGQgYnJvd3NlcnMgbGlrZSBBbmRyb2lkIDQsIGlQaG9uZSA1LjEsIE9wZXJhIDExIGFuZCBTYWZhcmkgNS5cbiAgLy9cbiAgaWYgKCFuZXcgRXZlbnRzKCkuX19wcm90b19fKSBwcmVmaXggPSBmYWxzZTtcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRhdGlvbiBvZiBhIHNpbmdsZSBldmVudCBsaXN0ZW5lci5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgbGlzdGVuZXIgZnVuY3Rpb24uXG4gKiBAcGFyYW0geyp9IGNvbnRleHQgVGhlIGNvbnRleHQgdG8gaW52b2tlIHRoZSBsaXN0ZW5lciB3aXRoLlxuICogQHBhcmFtIHtCb29sZWFufSBbb25jZT1mYWxzZV0gU3BlY2lmeSBpZiB0aGUgbGlzdGVuZXIgaXMgYSBvbmUtdGltZSBsaXN0ZW5lci5cbiAqIEBjb25zdHJ1Y3RvclxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gRUUoZm4sIGNvbnRleHQsIG9uY2UpIHtcbiAgdGhpcy5mbiA9IGZuO1xuICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuICB0aGlzLm9uY2UgPSBvbmNlIHx8IGZhbHNlO1xufVxuXG4vKipcbiAqIEFkZCBhIGxpc3RlbmVyIGZvciBhIGdpdmVuIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7RXZlbnRFbWl0dGVyfSBlbWl0dGVyIFJlZmVyZW5jZSB0byB0aGUgYEV2ZW50RW1pdHRlcmAgaW5zdGFuY2UuXG4gKiBAcGFyYW0geyhTdHJpbmd8U3ltYm9sKX0gZXZlbnQgVGhlIGV2ZW50IG5hbWUuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgbGlzdGVuZXIgZnVuY3Rpb24uXG4gKiBAcGFyYW0geyp9IGNvbnRleHQgVGhlIGNvbnRleHQgdG8gaW52b2tlIHRoZSBsaXN0ZW5lciB3aXRoLlxuICogQHBhcmFtIHtCb29sZWFufSBvbmNlIFNwZWNpZnkgaWYgdGhlIGxpc3RlbmVyIGlzIGEgb25lLXRpbWUgbGlzdGVuZXIuXG4gKiBAcmV0dXJucyB7RXZlbnRFbWl0dGVyfVxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gYWRkTGlzdGVuZXIoZW1pdHRlciwgZXZlbnQsIGZuLCBjb250ZXh0LCBvbmNlKSB7XG4gIGlmICh0eXBlb2YgZm4gIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgbGlzdGVuZXIgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG4gIH1cblxuICB2YXIgbGlzdGVuZXIgPSBuZXcgRUUoZm4sIGNvbnRleHQgfHwgZW1pdHRlciwgb25jZSlcbiAgICAsIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnQ7XG5cbiAgaWYgKCFlbWl0dGVyLl9ldmVudHNbZXZ0XSkgZW1pdHRlci5fZXZlbnRzW2V2dF0gPSBsaXN0ZW5lciwgZW1pdHRlci5fZXZlbnRzQ291bnQrKztcbiAgZWxzZSBpZiAoIWVtaXR0ZXIuX2V2ZW50c1tldnRdLmZuKSBlbWl0dGVyLl9ldmVudHNbZXZ0XS5wdXNoKGxpc3RlbmVyKTtcbiAgZWxzZSBlbWl0dGVyLl9ldmVudHNbZXZ0XSA9IFtlbWl0dGVyLl9ldmVudHNbZXZ0XSwgbGlzdGVuZXJdO1xuXG4gIHJldHVybiBlbWl0dGVyO1xufVxuXG4vKipcbiAqIENsZWFyIGV2ZW50IGJ5IG5hbWUuXG4gKlxuICogQHBhcmFtIHtFdmVudEVtaXR0ZXJ9IGVtaXR0ZXIgUmVmZXJlbmNlIHRvIHRoZSBgRXZlbnRFbWl0dGVyYCBpbnN0YW5jZS5cbiAqIEBwYXJhbSB7KFN0cmluZ3xTeW1ib2wpfSBldnQgVGhlIEV2ZW50IG5hbWUuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBjbGVhckV2ZW50KGVtaXR0ZXIsIGV2dCkge1xuICBpZiAoLS1lbWl0dGVyLl9ldmVudHNDb3VudCA9PT0gMCkgZW1pdHRlci5fZXZlbnRzID0gbmV3IEV2ZW50cygpO1xuICBlbHNlIGRlbGV0ZSBlbWl0dGVyLl9ldmVudHNbZXZ0XTtcbn1cblxuLyoqXG4gKiBNaW5pbWFsIGBFdmVudEVtaXR0ZXJgIGludGVyZmFjZSB0aGF0IGlzIG1vbGRlZCBhZ2FpbnN0IHRoZSBOb2RlLmpzXG4gKiBgRXZlbnRFbWl0dGVyYCBpbnRlcmZhY2UuXG4gKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAcHVibGljXG4gKi9cbmZ1bmN0aW9uIEV2ZW50RW1pdHRlcigpIHtcbiAgdGhpcy5fZXZlbnRzID0gbmV3IEV2ZW50cygpO1xuICB0aGlzLl9ldmVudHNDb3VudCA9IDA7XG59XG5cbi8qKlxuICogUmV0dXJuIGFuIGFycmF5IGxpc3RpbmcgdGhlIGV2ZW50cyBmb3Igd2hpY2ggdGhlIGVtaXR0ZXIgaGFzIHJlZ2lzdGVyZWRcbiAqIGxpc3RlbmVycy5cbiAqXG4gKiBAcmV0dXJucyB7QXJyYXl9XG4gKiBAcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuZXZlbnROYW1lcyA9IGZ1bmN0aW9uIGV2ZW50TmFtZXMoKSB7XG4gIHZhciBuYW1lcyA9IFtdXG4gICAgLCBldmVudHNcbiAgICAsIG5hbWU7XG5cbiAgaWYgKHRoaXMuX2V2ZW50c0NvdW50ID09PSAwKSByZXR1cm4gbmFtZXM7XG5cbiAgZm9yIChuYW1lIGluIChldmVudHMgPSB0aGlzLl9ldmVudHMpKSB7XG4gICAgaWYgKGhhcy5jYWxsKGV2ZW50cywgbmFtZSkpIG5hbWVzLnB1c2gocHJlZml4ID8gbmFtZS5zbGljZSgxKSA6IG5hbWUpO1xuICB9XG5cbiAgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcbiAgICByZXR1cm4gbmFtZXMuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZXZlbnRzKSk7XG4gIH1cblxuICByZXR1cm4gbmFtZXM7XG59O1xuXG4vKipcbiAqIFJldHVybiB0aGUgbGlzdGVuZXJzIHJlZ2lzdGVyZWQgZm9yIGEgZ2l2ZW4gZXZlbnQuXG4gKlxuICogQHBhcmFtIHsoU3RyaW5nfFN5bWJvbCl9IGV2ZW50IFRoZSBldmVudCBuYW1lLlxuICogQHJldHVybnMge0FycmF5fSBUaGUgcmVnaXN0ZXJlZCBsaXN0ZW5lcnMuXG4gKiBAcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJzID0gZnVuY3Rpb24gbGlzdGVuZXJzKGV2ZW50KSB7XG4gIHZhciBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50XG4gICAgLCBoYW5kbGVycyA9IHRoaXMuX2V2ZW50c1tldnRdO1xuXG4gIGlmICghaGFuZGxlcnMpIHJldHVybiBbXTtcbiAgaWYgKGhhbmRsZXJzLmZuKSByZXR1cm4gW2hhbmRsZXJzLmZuXTtcblxuICBmb3IgKHZhciBpID0gMCwgbCA9IGhhbmRsZXJzLmxlbmd0aCwgZWUgPSBuZXcgQXJyYXkobCk7IGkgPCBsOyBpKyspIHtcbiAgICBlZVtpXSA9IGhhbmRsZXJzW2ldLmZuO1xuICB9XG5cbiAgcmV0dXJuIGVlO1xufTtcblxuLyoqXG4gKiBSZXR1cm4gdGhlIG51bWJlciBvZiBsaXN0ZW5lcnMgbGlzdGVuaW5nIHRvIGEgZ2l2ZW4gZXZlbnQuXG4gKlxuICogQHBhcmFtIHsoU3RyaW5nfFN5bWJvbCl9IGV2ZW50IFRoZSBldmVudCBuYW1lLlxuICogQHJldHVybnMge051bWJlcn0gVGhlIG51bWJlciBvZiBsaXN0ZW5lcnMuXG4gKiBAcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJDb3VudCA9IGZ1bmN0aW9uIGxpc3RlbmVyQ291bnQoZXZlbnQpIHtcbiAgdmFyIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnRcbiAgICAsIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50c1tldnRdO1xuXG4gIGlmICghbGlzdGVuZXJzKSByZXR1cm4gMDtcbiAgaWYgKGxpc3RlbmVycy5mbikgcmV0dXJuIDE7XG4gIHJldHVybiBsaXN0ZW5lcnMubGVuZ3RoO1xufTtcblxuLyoqXG4gKiBDYWxscyBlYWNoIG9mIHRoZSBsaXN0ZW5lcnMgcmVnaXN0ZXJlZCBmb3IgYSBnaXZlbiBldmVudC5cbiAqXG4gKiBAcGFyYW0geyhTdHJpbmd8U3ltYm9sKX0gZXZlbnQgVGhlIGV2ZW50IG5hbWUuXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gYHRydWVgIGlmIHRoZSBldmVudCBoYWQgbGlzdGVuZXJzLCBlbHNlIGBmYWxzZWAuXG4gKiBAcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuZW1pdCA9IGZ1bmN0aW9uIGVtaXQoZXZlbnQsIGExLCBhMiwgYTMsIGE0LCBhNSkge1xuICB2YXIgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudDtcblxuICBpZiAoIXRoaXMuX2V2ZW50c1tldnRdKSByZXR1cm4gZmFsc2U7XG5cbiAgdmFyIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50c1tldnRdXG4gICAgLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoXG4gICAgLCBhcmdzXG4gICAgLCBpO1xuXG4gIGlmIChsaXN0ZW5lcnMuZm4pIHtcbiAgICBpZiAobGlzdGVuZXJzLm9uY2UpIHRoaXMucmVtb3ZlTGlzdGVuZXIoZXZlbnQsIGxpc3RlbmVycy5mbiwgdW5kZWZpbmVkLCB0cnVlKTtcblxuICAgIHN3aXRjaCAobGVuKSB7XG4gICAgICBjYXNlIDE6IHJldHVybiBsaXN0ZW5lcnMuZm4uY2FsbChsaXN0ZW5lcnMuY29udGV4dCksIHRydWU7XG4gICAgICBjYXNlIDI6IHJldHVybiBsaXN0ZW5lcnMuZm4uY2FsbChsaXN0ZW5lcnMuY29udGV4dCwgYTEpLCB0cnVlO1xuICAgICAgY2FzZSAzOiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQsIGExLCBhMiksIHRydWU7XG4gICAgICBjYXNlIDQ6IHJldHVybiBsaXN0ZW5lcnMuZm4uY2FsbChsaXN0ZW5lcnMuY29udGV4dCwgYTEsIGEyLCBhMyksIHRydWU7XG4gICAgICBjYXNlIDU6IHJldHVybiBsaXN0ZW5lcnMuZm4uY2FsbChsaXN0ZW5lcnMuY29udGV4dCwgYTEsIGEyLCBhMywgYTQpLCB0cnVlO1xuICAgICAgY2FzZSA2OiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQsIGExLCBhMiwgYTMsIGE0LCBhNSksIHRydWU7XG4gICAgfVxuXG4gICAgZm9yIChpID0gMSwgYXJncyA9IG5ldyBBcnJheShsZW4gLTEpOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGFyZ3NbaSAtIDFdID0gYXJndW1lbnRzW2ldO1xuICAgIH1cblxuICAgIGxpc3RlbmVycy5mbi5hcHBseShsaXN0ZW5lcnMuY29udGV4dCwgYXJncyk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGxlbmd0aCA9IGxpc3RlbmVycy5sZW5ndGhcbiAgICAgICwgajtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGxpc3RlbmVyc1tpXS5vbmNlKSB0aGlzLnJlbW92ZUxpc3RlbmVyKGV2ZW50LCBsaXN0ZW5lcnNbaV0uZm4sIHVuZGVmaW5lZCwgdHJ1ZSk7XG5cbiAgICAgIHN3aXRjaCAobGVuKSB7XG4gICAgICAgIGNhc2UgMTogbGlzdGVuZXJzW2ldLmZuLmNhbGwobGlzdGVuZXJzW2ldLmNvbnRleHQpOyBicmVhaztcbiAgICAgICAgY2FzZSAyOiBsaXN0ZW5lcnNbaV0uZm4uY2FsbChsaXN0ZW5lcnNbaV0uY29udGV4dCwgYTEpOyBicmVhaztcbiAgICAgICAgY2FzZSAzOiBsaXN0ZW5lcnNbaV0uZm4uY2FsbChsaXN0ZW5lcnNbaV0uY29udGV4dCwgYTEsIGEyKTsgYnJlYWs7XG4gICAgICAgIGNhc2UgNDogbGlzdGVuZXJzW2ldLmZuLmNhbGwobGlzdGVuZXJzW2ldLmNvbnRleHQsIGExLCBhMiwgYTMpOyBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBpZiAoIWFyZ3MpIGZvciAoaiA9IDEsIGFyZ3MgPSBuZXcgQXJyYXkobGVuIC0xKTsgaiA8IGxlbjsgaisrKSB7XG4gICAgICAgICAgICBhcmdzW2ogLSAxXSA9IGFyZ3VtZW50c1tqXTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsaXN0ZW5lcnNbaV0uZm4uYXBwbHkobGlzdGVuZXJzW2ldLmNvbnRleHQsIGFyZ3MpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcblxuLyoqXG4gKiBBZGQgYSBsaXN0ZW5lciBmb3IgYSBnaXZlbiBldmVudC5cbiAqXG4gKiBAcGFyYW0geyhTdHJpbmd8U3ltYm9sKX0gZXZlbnQgVGhlIGV2ZW50IG5hbWUuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgbGlzdGVuZXIgZnVuY3Rpb24uXG4gKiBAcGFyYW0geyp9IFtjb250ZXh0PXRoaXNdIFRoZSBjb250ZXh0IHRvIGludm9rZSB0aGUgbGlzdGVuZXIgd2l0aC5cbiAqIEByZXR1cm5zIHtFdmVudEVtaXR0ZXJ9IGB0aGlzYC5cbiAqIEBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbiA9IGZ1bmN0aW9uIG9uKGV2ZW50LCBmbiwgY29udGV4dCkge1xuICByZXR1cm4gYWRkTGlzdGVuZXIodGhpcywgZXZlbnQsIGZuLCBjb250ZXh0LCBmYWxzZSk7XG59O1xuXG4vKipcbiAqIEFkZCBhIG9uZS10aW1lIGxpc3RlbmVyIGZvciBhIGdpdmVuIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7KFN0cmluZ3xTeW1ib2wpfSBldmVudCBUaGUgZXZlbnQgbmFtZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBsaXN0ZW5lciBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7Kn0gW2NvbnRleHQ9dGhpc10gVGhlIGNvbnRleHQgdG8gaW52b2tlIHRoZSBsaXN0ZW5lciB3aXRoLlxuICogQHJldHVybnMge0V2ZW50RW1pdHRlcn0gYHRoaXNgLlxuICogQHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uY2UgPSBmdW5jdGlvbiBvbmNlKGV2ZW50LCBmbiwgY29udGV4dCkge1xuICByZXR1cm4gYWRkTGlzdGVuZXIodGhpcywgZXZlbnQsIGZuLCBjb250ZXh0LCB0cnVlKTtcbn07XG5cbi8qKlxuICogUmVtb3ZlIHRoZSBsaXN0ZW5lcnMgb2YgYSBnaXZlbiBldmVudC5cbiAqXG4gKiBAcGFyYW0geyhTdHJpbmd8U3ltYm9sKX0gZXZlbnQgVGhlIGV2ZW50IG5hbWUuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBPbmx5IHJlbW92ZSB0aGUgbGlzdGVuZXJzIHRoYXQgbWF0Y2ggdGhpcyBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7Kn0gY29udGV4dCBPbmx5IHJlbW92ZSB0aGUgbGlzdGVuZXJzIHRoYXQgaGF2ZSB0aGlzIGNvbnRleHQuXG4gKiBAcGFyYW0ge0Jvb2xlYW59IG9uY2UgT25seSByZW1vdmUgb25lLXRpbWUgbGlzdGVuZXJzLlxuICogQHJldHVybnMge0V2ZW50RW1pdHRlcn0gYHRoaXNgLlxuICogQHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyID0gZnVuY3Rpb24gcmVtb3ZlTGlzdGVuZXIoZXZlbnQsIGZuLCBjb250ZXh0LCBvbmNlKSB7XG4gIHZhciBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50O1xuXG4gIGlmICghdGhpcy5fZXZlbnRzW2V2dF0pIHJldHVybiB0aGlzO1xuICBpZiAoIWZuKSB7XG4gICAgY2xlYXJFdmVudCh0aGlzLCBldnQpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgdmFyIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50c1tldnRdO1xuXG4gIGlmIChsaXN0ZW5lcnMuZm4pIHtcbiAgICBpZiAoXG4gICAgICBsaXN0ZW5lcnMuZm4gPT09IGZuICYmXG4gICAgICAoIW9uY2UgfHwgbGlzdGVuZXJzLm9uY2UpICYmXG4gICAgICAoIWNvbnRleHQgfHwgbGlzdGVuZXJzLmNvbnRleHQgPT09IGNvbnRleHQpXG4gICAgKSB7XG4gICAgICBjbGVhckV2ZW50KHRoaXMsIGV2dCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGZvciAodmFyIGkgPSAwLCBldmVudHMgPSBbXSwgbGVuZ3RoID0gbGlzdGVuZXJzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoXG4gICAgICAgIGxpc3RlbmVyc1tpXS5mbiAhPT0gZm4gfHxcbiAgICAgICAgKG9uY2UgJiYgIWxpc3RlbmVyc1tpXS5vbmNlKSB8fFxuICAgICAgICAoY29udGV4dCAmJiBsaXN0ZW5lcnNbaV0uY29udGV4dCAhPT0gY29udGV4dClcbiAgICAgICkge1xuICAgICAgICBldmVudHMucHVzaChsaXN0ZW5lcnNbaV0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vXG4gICAgLy8gUmVzZXQgdGhlIGFycmF5LCBvciByZW1vdmUgaXQgY29tcGxldGVseSBpZiB3ZSBoYXZlIG5vIG1vcmUgbGlzdGVuZXJzLlxuICAgIC8vXG4gICAgaWYgKGV2ZW50cy5sZW5ndGgpIHRoaXMuX2V2ZW50c1tldnRdID0gZXZlbnRzLmxlbmd0aCA9PT0gMSA/IGV2ZW50c1swXSA6IGV2ZW50cztcbiAgICBlbHNlIGNsZWFyRXZlbnQodGhpcywgZXZ0KTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYWxsIGxpc3RlbmVycywgb3IgdGhvc2Ugb2YgdGhlIHNwZWNpZmllZCBldmVudC5cbiAqXG4gKiBAcGFyYW0geyhTdHJpbmd8U3ltYm9sKX0gW2V2ZW50XSBUaGUgZXZlbnQgbmFtZS5cbiAqIEByZXR1cm5zIHtFdmVudEVtaXR0ZXJ9IGB0aGlzYC5cbiAqIEBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBmdW5jdGlvbiByZW1vdmVBbGxMaXN0ZW5lcnMoZXZlbnQpIHtcbiAgdmFyIGV2dDtcblxuICBpZiAoZXZlbnQpIHtcbiAgICBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50O1xuICAgIGlmICh0aGlzLl9ldmVudHNbZXZ0XSkgY2xlYXJFdmVudCh0aGlzLCBldnQpO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuX2V2ZW50cyA9IG5ldyBFdmVudHMoKTtcbiAgICB0aGlzLl9ldmVudHNDb3VudCA9IDA7XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8vXG4vLyBBbGlhcyBtZXRob2RzIG5hbWVzIGJlY2F1c2UgcGVvcGxlIHJvbGwgbGlrZSB0aGF0LlxuLy9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub2ZmID0gRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lcjtcbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuYWRkTGlzdGVuZXIgPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uO1xuXG4vL1xuLy8gRXhwb3NlIHRoZSBwcmVmaXguXG4vL1xuRXZlbnRFbWl0dGVyLnByZWZpeGVkID0gcHJlZml4O1xuXG4vL1xuLy8gQWxsb3cgYEV2ZW50RW1pdHRlcmAgdG8gYmUgaW1wb3J0ZWQgYXMgbW9kdWxlIG5hbWVzcGFjZS5cbi8vXG5FdmVudEVtaXR0ZXIuRXZlbnRFbWl0dGVyID0gRXZlbnRFbWl0dGVyO1xuXG4vL1xuLy8gRXhwb3NlIHRoZSBtb2R1bGUuXG4vL1xuaWYgKCd1bmRlZmluZWQnICE9PSB0eXBlb2YgbW9kdWxlKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gRXZlbnRFbWl0dGVyO1xufVxuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucmVnZXhwQ29kZSA9IGV4cG9ydHMuZ2V0RXNtRXhwb3J0TmFtZSA9IGV4cG9ydHMuZ2V0UHJvcGVydHkgPSBleHBvcnRzLnNhZmVTdHJpbmdpZnkgPSBleHBvcnRzLnN0cmluZ2lmeSA9IGV4cG9ydHMuc3RyQ29uY2F0ID0gZXhwb3J0cy5hZGRDb2RlQXJnID0gZXhwb3J0cy5zdHIgPSBleHBvcnRzLl8gPSBleHBvcnRzLm5pbCA9IGV4cG9ydHMuX0NvZGUgPSBleHBvcnRzLk5hbWUgPSBleHBvcnRzLklERU5USUZJRVIgPSBleHBvcnRzLl9Db2RlT3JOYW1lID0gdm9pZCAwO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHRyYW5lb3VzLWNsYXNzXG5jbGFzcyBfQ29kZU9yTmFtZSB7XG59XG5leHBvcnRzLl9Db2RlT3JOYW1lID0gX0NvZGVPck5hbWU7XG5leHBvcnRzLklERU5USUZJRVIgPSAvXlthLXokX11bYS16JF8wLTldKiQvaTtcbmNsYXNzIE5hbWUgZXh0ZW5kcyBfQ29kZU9yTmFtZSB7XG4gICAgY29uc3RydWN0b3Iocykge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICBpZiAoIWV4cG9ydHMuSURFTlRJRklFUi50ZXN0KHMpKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ29kZUdlbjogbmFtZSBtdXN0IGJlIGEgdmFsaWQgaWRlbnRpZmllclwiKTtcbiAgICAgICAgdGhpcy5zdHIgPSBzO1xuICAgIH1cbiAgICB0b1N0cmluZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RyO1xuICAgIH1cbiAgICBlbXB0eVN0cigpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBnZXQgbmFtZXMoKSB7XG4gICAgICAgIHJldHVybiB7IFt0aGlzLnN0cl06IDEgfTtcbiAgICB9XG59XG5leHBvcnRzLk5hbWUgPSBOYW1lO1xuY2xhc3MgX0NvZGUgZXh0ZW5kcyBfQ29kZU9yTmFtZSB7XG4gICAgY29uc3RydWN0b3IoY29kZSkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLl9pdGVtcyA9IHR5cGVvZiBjb2RlID09PSBcInN0cmluZ1wiID8gW2NvZGVdIDogY29kZTtcbiAgICB9XG4gICAgdG9TdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0cjtcbiAgICB9XG4gICAgZW1wdHlTdHIoKSB7XG4gICAgICAgIGlmICh0aGlzLl9pdGVtcy5sZW5ndGggPiAxKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5faXRlbXNbMF07XG4gICAgICAgIHJldHVybiBpdGVtID09PSBcIlwiIHx8IGl0ZW0gPT09ICdcIlwiJztcbiAgICB9XG4gICAgZ2V0IHN0cigpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICByZXR1cm4gKChfYSA9IHRoaXMuX3N0cikgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogKHRoaXMuX3N0ciA9IHRoaXMuX2l0ZW1zLnJlZHVjZSgocywgYykgPT4gYCR7c30ke2N9YCwgXCJcIikpKTtcbiAgICB9XG4gICAgZ2V0IG5hbWVzKCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHJldHVybiAoKF9hID0gdGhpcy5fbmFtZXMpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6ICh0aGlzLl9uYW1lcyA9IHRoaXMuX2l0ZW1zLnJlZHVjZSgobmFtZXMsIGMpID0+IHtcbiAgICAgICAgICAgIGlmIChjIGluc3RhbmNlb2YgTmFtZSlcbiAgICAgICAgICAgICAgICBuYW1lc1tjLnN0cl0gPSAobmFtZXNbYy5zdHJdIHx8IDApICsgMTtcbiAgICAgICAgICAgIHJldHVybiBuYW1lcztcbiAgICAgICAgfSwge30pKSk7XG4gICAgfVxufVxuZXhwb3J0cy5fQ29kZSA9IF9Db2RlO1xuZXhwb3J0cy5uaWwgPSBuZXcgX0NvZGUoXCJcIik7XG5mdW5jdGlvbiBfKHN0cnMsIC4uLmFyZ3MpIHtcbiAgICBjb25zdCBjb2RlID0gW3N0cnNbMF1dO1xuICAgIGxldCBpID0gMDtcbiAgICB3aGlsZSAoaSA8IGFyZ3MubGVuZ3RoKSB7XG4gICAgICAgIGFkZENvZGVBcmcoY29kZSwgYXJnc1tpXSk7XG4gICAgICAgIGNvZGUucHVzaChzdHJzWysraV0pO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IF9Db2RlKGNvZGUpO1xufVxuZXhwb3J0cy5fID0gXztcbmNvbnN0IHBsdXMgPSBuZXcgX0NvZGUoXCIrXCIpO1xuZnVuY3Rpb24gc3RyKHN0cnMsIC4uLmFyZ3MpIHtcbiAgICBjb25zdCBleHByID0gW3NhZmVTdHJpbmdpZnkoc3Ryc1swXSldO1xuICAgIGxldCBpID0gMDtcbiAgICB3aGlsZSAoaSA8IGFyZ3MubGVuZ3RoKSB7XG4gICAgICAgIGV4cHIucHVzaChwbHVzKTtcbiAgICAgICAgYWRkQ29kZUFyZyhleHByLCBhcmdzW2ldKTtcbiAgICAgICAgZXhwci5wdXNoKHBsdXMsIHNhZmVTdHJpbmdpZnkoc3Ryc1srK2ldKSk7XG4gICAgfVxuICAgIG9wdGltaXplKGV4cHIpO1xuICAgIHJldHVybiBuZXcgX0NvZGUoZXhwcik7XG59XG5leHBvcnRzLnN0ciA9IHN0cjtcbmZ1bmN0aW9uIGFkZENvZGVBcmcoY29kZSwgYXJnKSB7XG4gICAgaWYgKGFyZyBpbnN0YW5jZW9mIF9Db2RlKVxuICAgICAgICBjb2RlLnB1c2goLi4uYXJnLl9pdGVtcyk7XG4gICAgZWxzZSBpZiAoYXJnIGluc3RhbmNlb2YgTmFtZSlcbiAgICAgICAgY29kZS5wdXNoKGFyZyk7XG4gICAgZWxzZVxuICAgICAgICBjb2RlLnB1c2goaW50ZXJwb2xhdGUoYXJnKSk7XG59XG5leHBvcnRzLmFkZENvZGVBcmcgPSBhZGRDb2RlQXJnO1xuZnVuY3Rpb24gb3B0aW1pemUoZXhwcikge1xuICAgIGxldCBpID0gMTtcbiAgICB3aGlsZSAoaSA8IGV4cHIubGVuZ3RoIC0gMSkge1xuICAgICAgICBpZiAoZXhwcltpXSA9PT0gcGx1cykge1xuICAgICAgICAgICAgY29uc3QgcmVzID0gbWVyZ2VFeHBySXRlbXMoZXhwcltpIC0gMV0sIGV4cHJbaSArIDFdKTtcbiAgICAgICAgICAgIGlmIChyZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGV4cHIuc3BsaWNlKGkgLSAxLCAzLCByZXMpO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZXhwcltpKytdID0gXCIrXCI7XG4gICAgICAgIH1cbiAgICAgICAgaSsrO1xuICAgIH1cbn1cbmZ1bmN0aW9uIG1lcmdlRXhwckl0ZW1zKGEsIGIpIHtcbiAgICBpZiAoYiA9PT0gJ1wiXCInKVxuICAgICAgICByZXR1cm4gYTtcbiAgICBpZiAoYSA9PT0gJ1wiXCInKVxuICAgICAgICByZXR1cm4gYjtcbiAgICBpZiAodHlwZW9mIGEgPT0gXCJzdHJpbmdcIikge1xuICAgICAgICBpZiAoYiBpbnN0YW5jZW9mIE5hbWUgfHwgYVthLmxlbmd0aCAtIDFdICE9PSAnXCInKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAodHlwZW9mIGIgIT0gXCJzdHJpbmdcIilcbiAgICAgICAgICAgIHJldHVybiBgJHthLnNsaWNlKDAsIC0xKX0ke2J9XCJgO1xuICAgICAgICBpZiAoYlswXSA9PT0gJ1wiJylcbiAgICAgICAgICAgIHJldHVybiBhLnNsaWNlKDAsIC0xKSArIGIuc2xpY2UoMSk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBiID09IFwic3RyaW5nXCIgJiYgYlswXSA9PT0gJ1wiJyAmJiAhKGEgaW5zdGFuY2VvZiBOYW1lKSlcbiAgICAgICAgcmV0dXJuIGBcIiR7YX0ke2Iuc2xpY2UoMSl9YDtcbiAgICByZXR1cm47XG59XG5mdW5jdGlvbiBzdHJDb25jYXQoYzEsIGMyKSB7XG4gICAgcmV0dXJuIGMyLmVtcHR5U3RyKCkgPyBjMSA6IGMxLmVtcHR5U3RyKCkgPyBjMiA6IHN0ciBgJHtjMX0ke2MyfWA7XG59XG5leHBvcnRzLnN0ckNvbmNhdCA9IHN0ckNvbmNhdDtcbi8vIFRPRE8gZG8gbm90IGFsbG93IGFycmF5cyBoZXJlXG5mdW5jdGlvbiBpbnRlcnBvbGF0ZSh4KSB7XG4gICAgcmV0dXJuIHR5cGVvZiB4ID09IFwibnVtYmVyXCIgfHwgdHlwZW9mIHggPT0gXCJib29sZWFuXCIgfHwgeCA9PT0gbnVsbFxuICAgICAgICA/IHhcbiAgICAgICAgOiBzYWZlU3RyaW5naWZ5KEFycmF5LmlzQXJyYXkoeCkgPyB4LmpvaW4oXCIsXCIpIDogeCk7XG59XG5mdW5jdGlvbiBzdHJpbmdpZnkoeCkge1xuICAgIHJldHVybiBuZXcgX0NvZGUoc2FmZVN0cmluZ2lmeSh4KSk7XG59XG5leHBvcnRzLnN0cmluZ2lmeSA9IHN0cmluZ2lmeTtcbmZ1bmN0aW9uIHNhZmVTdHJpbmdpZnkoeCkge1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh4KVxuICAgICAgICAucmVwbGFjZSgvXFx1MjAyOC9nLCBcIlxcXFx1MjAyOFwiKVxuICAgICAgICAucmVwbGFjZSgvXFx1MjAyOS9nLCBcIlxcXFx1MjAyOVwiKTtcbn1cbmV4cG9ydHMuc2FmZVN0cmluZ2lmeSA9IHNhZmVTdHJpbmdpZnk7XG5mdW5jdGlvbiBnZXRQcm9wZXJ0eShrZXkpIHtcbiAgICByZXR1cm4gdHlwZW9mIGtleSA9PSBcInN0cmluZ1wiICYmIGV4cG9ydHMuSURFTlRJRklFUi50ZXN0KGtleSkgPyBuZXcgX0NvZGUoYC4ke2tleX1gKSA6IF8gYFske2tleX1dYDtcbn1cbmV4cG9ydHMuZ2V0UHJvcGVydHkgPSBnZXRQcm9wZXJ0eTtcbi8vRG9lcyBiZXN0IGVmZm9ydCB0byBmb3JtYXQgdGhlIG5hbWUgcHJvcGVybHlcbmZ1bmN0aW9uIGdldEVzbUV4cG9ydE5hbWUoa2V5KSB7XG4gICAgaWYgKHR5cGVvZiBrZXkgPT0gXCJzdHJpbmdcIiAmJiBleHBvcnRzLklERU5USUZJRVIudGVzdChrZXkpKSB7XG4gICAgICAgIHJldHVybiBuZXcgX0NvZGUoYCR7a2V5fWApO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoYENvZGVHZW46IGludmFsaWQgZXhwb3J0IG5hbWU6ICR7a2V5fSwgdXNlIGV4cGxpY2l0ICRpZCBuYW1lIG1hcHBpbmdgKTtcbn1cbmV4cG9ydHMuZ2V0RXNtRXhwb3J0TmFtZSA9IGdldEVzbUV4cG9ydE5hbWU7XG5mdW5jdGlvbiByZWdleHBDb2RlKHJ4KSB7XG4gICAgcmV0dXJuIG5ldyBfQ29kZShyeC50b1N0cmluZygpKTtcbn1cbmV4cG9ydHMucmVnZXhwQ29kZSA9IHJlZ2V4cENvZGU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb2RlLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlZhbHVlU2NvcGUgPSBleHBvcnRzLlZhbHVlU2NvcGVOYW1lID0gZXhwb3J0cy5TY29wZSA9IGV4cG9ydHMudmFyS2luZHMgPSBleHBvcnRzLlVzZWRWYWx1ZVN0YXRlID0gdm9pZCAwO1xuY29uc3QgY29kZV8xID0gcmVxdWlyZShcIi4vY29kZVwiKTtcbmNsYXNzIFZhbHVlRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgY29uc3RydWN0b3IobmFtZSkge1xuICAgICAgICBzdXBlcihgQ29kZUdlbjogXCJjb2RlXCIgZm9yICR7bmFtZX0gbm90IGRlZmluZWRgKTtcbiAgICAgICAgdGhpcy52YWx1ZSA9IG5hbWUudmFsdWU7XG4gICAgfVxufVxudmFyIFVzZWRWYWx1ZVN0YXRlO1xuKGZ1bmN0aW9uIChVc2VkVmFsdWVTdGF0ZSkge1xuICAgIFVzZWRWYWx1ZVN0YXRlW1VzZWRWYWx1ZVN0YXRlW1wiU3RhcnRlZFwiXSA9IDBdID0gXCJTdGFydGVkXCI7XG4gICAgVXNlZFZhbHVlU3RhdGVbVXNlZFZhbHVlU3RhdGVbXCJDb21wbGV0ZWRcIl0gPSAxXSA9IFwiQ29tcGxldGVkXCI7XG59KShVc2VkVmFsdWVTdGF0ZSB8fCAoZXhwb3J0cy5Vc2VkVmFsdWVTdGF0ZSA9IFVzZWRWYWx1ZVN0YXRlID0ge30pKTtcbmV4cG9ydHMudmFyS2luZHMgPSB7XG4gICAgY29uc3Q6IG5ldyBjb2RlXzEuTmFtZShcImNvbnN0XCIpLFxuICAgIGxldDogbmV3IGNvZGVfMS5OYW1lKFwibGV0XCIpLFxuICAgIHZhcjogbmV3IGNvZGVfMS5OYW1lKFwidmFyXCIpLFxufTtcbmNsYXNzIFNjb3BlIHtcbiAgICBjb25zdHJ1Y3Rvcih7IHByZWZpeGVzLCBwYXJlbnQgfSA9IHt9KSB7XG4gICAgICAgIHRoaXMuX25hbWVzID0ge307XG4gICAgICAgIHRoaXMuX3ByZWZpeGVzID0gcHJlZml4ZXM7XG4gICAgICAgIHRoaXMuX3BhcmVudCA9IHBhcmVudDtcbiAgICB9XG4gICAgdG9OYW1lKG5hbWVPclByZWZpeCkge1xuICAgICAgICByZXR1cm4gbmFtZU9yUHJlZml4IGluc3RhbmNlb2YgY29kZV8xLk5hbWUgPyBuYW1lT3JQcmVmaXggOiB0aGlzLm5hbWUobmFtZU9yUHJlZml4KTtcbiAgICB9XG4gICAgbmFtZShwcmVmaXgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBjb2RlXzEuTmFtZSh0aGlzLl9uZXdOYW1lKHByZWZpeCkpO1xuICAgIH1cbiAgICBfbmV3TmFtZShwcmVmaXgpIHtcbiAgICAgICAgY29uc3QgbmcgPSB0aGlzLl9uYW1lc1twcmVmaXhdIHx8IHRoaXMuX25hbWVHcm91cChwcmVmaXgpO1xuICAgICAgICByZXR1cm4gYCR7cHJlZml4fSR7bmcuaW5kZXgrK31gO1xuICAgIH1cbiAgICBfbmFtZUdyb3VwKHByZWZpeCkge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICBpZiAoKChfYiA9IChfYSA9IHRoaXMuX3BhcmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLl9wcmVmaXhlcykgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmhhcyhwcmVmaXgpKSB8fCAodGhpcy5fcHJlZml4ZXMgJiYgIXRoaXMuX3ByZWZpeGVzLmhhcyhwcmVmaXgpKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb2RlR2VuOiBwcmVmaXggXCIke3ByZWZpeH1cIiBpcyBub3QgYWxsb3dlZCBpbiB0aGlzIHNjb3BlYCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICh0aGlzLl9uYW1lc1twcmVmaXhdID0geyBwcmVmaXgsIGluZGV4OiAwIH0pO1xuICAgIH1cbn1cbmV4cG9ydHMuU2NvcGUgPSBTY29wZTtcbmNsYXNzIFZhbHVlU2NvcGVOYW1lIGV4dGVuZHMgY29kZV8xLk5hbWUge1xuICAgIGNvbnN0cnVjdG9yKHByZWZpeCwgbmFtZVN0cikge1xuICAgICAgICBzdXBlcihuYW1lU3RyKTtcbiAgICAgICAgdGhpcy5wcmVmaXggPSBwcmVmaXg7XG4gICAgfVxuICAgIHNldFZhbHVlKHZhbHVlLCB7IHByb3BlcnR5LCBpdGVtSW5kZXggfSkge1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIHRoaXMuc2NvcGVQYXRoID0gKDAsIGNvZGVfMS5fKSBgLiR7bmV3IGNvZGVfMS5OYW1lKHByb3BlcnR5KX1bJHtpdGVtSW5kZXh9XWA7XG4gICAgfVxufVxuZXhwb3J0cy5WYWx1ZVNjb3BlTmFtZSA9IFZhbHVlU2NvcGVOYW1lO1xuY29uc3QgbGluZSA9ICgwLCBjb2RlXzEuXykgYFxcbmA7XG5jbGFzcyBWYWx1ZVNjb3BlIGV4dGVuZHMgU2NvcGUge1xuICAgIGNvbnN0cnVjdG9yKG9wdHMpIHtcbiAgICAgICAgc3VwZXIob3B0cyk7XG4gICAgICAgIHRoaXMuX3ZhbHVlcyA9IHt9O1xuICAgICAgICB0aGlzLl9zY29wZSA9IG9wdHMuc2NvcGU7XG4gICAgICAgIHRoaXMub3B0cyA9IHsgLi4ub3B0cywgX246IG9wdHMubGluZXMgPyBsaW5lIDogY29kZV8xLm5pbCB9O1xuICAgIH1cbiAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zY29wZTtcbiAgICB9XG4gICAgbmFtZShwcmVmaXgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBWYWx1ZVNjb3BlTmFtZShwcmVmaXgsIHRoaXMuX25ld05hbWUocHJlZml4KSk7XG4gICAgfVxuICAgIHZhbHVlKG5hbWVPclByZWZpeCwgdmFsdWUpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAodmFsdWUucmVmID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb2RlR2VuOiByZWYgbXVzdCBiZSBwYXNzZWQgaW4gdmFsdWVcIik7XG4gICAgICAgIGNvbnN0IG5hbWUgPSB0aGlzLnRvTmFtZShuYW1lT3JQcmVmaXgpO1xuICAgICAgICBjb25zdCB7IHByZWZpeCB9ID0gbmFtZTtcbiAgICAgICAgY29uc3QgdmFsdWVLZXkgPSAoX2EgPSB2YWx1ZS5rZXkpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHZhbHVlLnJlZjtcbiAgICAgICAgbGV0IHZzID0gdGhpcy5fdmFsdWVzW3ByZWZpeF07XG4gICAgICAgIGlmICh2cykge1xuICAgICAgICAgICAgY29uc3QgX25hbWUgPSB2cy5nZXQodmFsdWVLZXkpO1xuICAgICAgICAgICAgaWYgKF9uYW1lKVxuICAgICAgICAgICAgICAgIHJldHVybiBfbmFtZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZzID0gdGhpcy5fdmFsdWVzW3ByZWZpeF0gPSBuZXcgTWFwKCk7XG4gICAgICAgIH1cbiAgICAgICAgdnMuc2V0KHZhbHVlS2V5LCBuYW1lKTtcbiAgICAgICAgY29uc3QgcyA9IHRoaXMuX3Njb3BlW3ByZWZpeF0gfHwgKHRoaXMuX3Njb3BlW3ByZWZpeF0gPSBbXSk7XG4gICAgICAgIGNvbnN0IGl0ZW1JbmRleCA9IHMubGVuZ3RoO1xuICAgICAgICBzW2l0ZW1JbmRleF0gPSB2YWx1ZS5yZWY7XG4gICAgICAgIG5hbWUuc2V0VmFsdWUodmFsdWUsIHsgcHJvcGVydHk6IHByZWZpeCwgaXRlbUluZGV4IH0pO1xuICAgICAgICByZXR1cm4gbmFtZTtcbiAgICB9XG4gICAgZ2V0VmFsdWUocHJlZml4LCBrZXlPclJlZikge1xuICAgICAgICBjb25zdCB2cyA9IHRoaXMuX3ZhbHVlc1twcmVmaXhdO1xuICAgICAgICBpZiAoIXZzKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICByZXR1cm4gdnMuZ2V0KGtleU9yUmVmKTtcbiAgICB9XG4gICAgc2NvcGVSZWZzKHNjb3BlTmFtZSwgdmFsdWVzID0gdGhpcy5fdmFsdWVzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZWR1Y2VWYWx1ZXModmFsdWVzLCAobmFtZSkgPT4ge1xuICAgICAgICAgICAgaWYgKG5hbWUuc2NvcGVQYXRoID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb2RlR2VuOiBuYW1lIFwiJHtuYW1lfVwiIGhhcyBubyB2YWx1ZWApO1xuICAgICAgICAgICAgcmV0dXJuICgwLCBjb2RlXzEuXykgYCR7c2NvcGVOYW1lfSR7bmFtZS5zY29wZVBhdGh9YDtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHNjb3BlQ29kZSh2YWx1ZXMgPSB0aGlzLl92YWx1ZXMsIHVzZWRWYWx1ZXMsIGdldENvZGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlZHVjZVZhbHVlcyh2YWx1ZXMsIChuYW1lKSA9PiB7XG4gICAgICAgICAgICBpZiAobmFtZS52YWx1ZSA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ29kZUdlbjogbmFtZSBcIiR7bmFtZX1cIiBoYXMgbm8gdmFsdWVgKTtcbiAgICAgICAgICAgIHJldHVybiBuYW1lLnZhbHVlLmNvZGU7XG4gICAgICAgIH0sIHVzZWRWYWx1ZXMsIGdldENvZGUpO1xuICAgIH1cbiAgICBfcmVkdWNlVmFsdWVzKHZhbHVlcywgdmFsdWVDb2RlLCB1c2VkVmFsdWVzID0ge30sIGdldENvZGUpIHtcbiAgICAgICAgbGV0IGNvZGUgPSBjb2RlXzEubmlsO1xuICAgICAgICBmb3IgKGNvbnN0IHByZWZpeCBpbiB2YWx1ZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHZzID0gdmFsdWVzW3ByZWZpeF07XG4gICAgICAgICAgICBpZiAoIXZzKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgY29uc3QgbmFtZVNldCA9ICh1c2VkVmFsdWVzW3ByZWZpeF0gPSB1c2VkVmFsdWVzW3ByZWZpeF0gfHwgbmV3IE1hcCgpKTtcbiAgICAgICAgICAgIHZzLmZvckVhY2goKG5hbWUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAobmFtZVNldC5oYXMobmFtZSkpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICBuYW1lU2V0LnNldChuYW1lLCBVc2VkVmFsdWVTdGF0ZS5TdGFydGVkKTtcbiAgICAgICAgICAgICAgICBsZXQgYyA9IHZhbHVlQ29kZShuYW1lKTtcbiAgICAgICAgICAgICAgICBpZiAoYykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkZWYgPSB0aGlzLm9wdHMuZXM1ID8gZXhwb3J0cy52YXJLaW5kcy52YXIgOiBleHBvcnRzLnZhcktpbmRzLmNvbnN0O1xuICAgICAgICAgICAgICAgICAgICBjb2RlID0gKDAsIGNvZGVfMS5fKSBgJHtjb2RlfSR7ZGVmfSAke25hbWV9ID0gJHtjfTske3RoaXMub3B0cy5fbn1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICgoYyA9IGdldENvZGUgPT09IG51bGwgfHwgZ2V0Q29kZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZ2V0Q29kZShuYW1lKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29kZSA9ICgwLCBjb2RlXzEuXykgYCR7Y29kZX0ke2N9JHt0aGlzLm9wdHMuX259YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBWYWx1ZUVycm9yKG5hbWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBuYW1lU2V0LnNldChuYW1lLCBVc2VkVmFsdWVTdGF0ZS5Db21wbGV0ZWQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvZGU7XG4gICAgfVxufVxuZXhwb3J0cy5WYWx1ZVNjb3BlID0gVmFsdWVTY29wZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNjb3BlLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLm9yID0gZXhwb3J0cy5hbmQgPSBleHBvcnRzLm5vdCA9IGV4cG9ydHMuQ29kZUdlbiA9IGV4cG9ydHMub3BlcmF0b3JzID0gZXhwb3J0cy52YXJLaW5kcyA9IGV4cG9ydHMuVmFsdWVTY29wZU5hbWUgPSBleHBvcnRzLlZhbHVlU2NvcGUgPSBleHBvcnRzLlNjb3BlID0gZXhwb3J0cy5OYW1lID0gZXhwb3J0cy5yZWdleHBDb2RlID0gZXhwb3J0cy5zdHJpbmdpZnkgPSBleHBvcnRzLmdldFByb3BlcnR5ID0gZXhwb3J0cy5uaWwgPSBleHBvcnRzLnN0ckNvbmNhdCA9IGV4cG9ydHMuc3RyID0gZXhwb3J0cy5fID0gdm9pZCAwO1xuY29uc3QgY29kZV8xID0gcmVxdWlyZShcIi4vY29kZVwiKTtcbmNvbnN0IHNjb3BlXzEgPSByZXF1aXJlKFwiLi9zY29wZVwiKTtcbnZhciBjb2RlXzIgPSByZXF1aXJlKFwiLi9jb2RlXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29kZV8yLl87IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzdHJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvZGVfMi5zdHI7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzdHJDb25jYXRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvZGVfMi5zdHJDb25jYXQ7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJuaWxcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvZGVfMi5uaWw7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJnZXRQcm9wZXJ0eVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29kZV8yLmdldFByb3BlcnR5OyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic3RyaW5naWZ5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjb2RlXzIuc3RyaW5naWZ5OyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicmVnZXhwQ29kZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29kZV8yLnJlZ2V4cENvZGU7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJOYW1lXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjb2RlXzIuTmFtZTsgfSB9KTtcbnZhciBzY29wZV8yID0gcmVxdWlyZShcIi4vc2NvcGVcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJTY29wZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc2NvcGVfMi5TY29wZTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlZhbHVlU2NvcGVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNjb3BlXzIuVmFsdWVTY29wZTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlZhbHVlU2NvcGVOYW1lXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzY29wZV8yLlZhbHVlU2NvcGVOYW1lOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidmFyS2luZHNcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNjb3BlXzIudmFyS2luZHM7IH0gfSk7XG5leHBvcnRzLm9wZXJhdG9ycyA9IHtcbiAgICBHVDogbmV3IGNvZGVfMS5fQ29kZShcIj5cIiksXG4gICAgR1RFOiBuZXcgY29kZV8xLl9Db2RlKFwiPj1cIiksXG4gICAgTFQ6IG5ldyBjb2RlXzEuX0NvZGUoXCI8XCIpLFxuICAgIExURTogbmV3IGNvZGVfMS5fQ29kZShcIjw9XCIpLFxuICAgIEVROiBuZXcgY29kZV8xLl9Db2RlKFwiPT09XCIpLFxuICAgIE5FUTogbmV3IGNvZGVfMS5fQ29kZShcIiE9PVwiKSxcbiAgICBOT1Q6IG5ldyBjb2RlXzEuX0NvZGUoXCIhXCIpLFxuICAgIE9SOiBuZXcgY29kZV8xLl9Db2RlKFwifHxcIiksXG4gICAgQU5EOiBuZXcgY29kZV8xLl9Db2RlKFwiJiZcIiksXG4gICAgQUREOiBuZXcgY29kZV8xLl9Db2RlKFwiK1wiKSxcbn07XG5jbGFzcyBOb2RlIHtcbiAgICBvcHRpbWl6ZU5vZGVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgb3B0aW1pemVOYW1lcyhfbmFtZXMsIF9jb25zdGFudHMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxufVxuY2xhc3MgRGVmIGV4dGVuZHMgTm9kZSB7XG4gICAgY29uc3RydWN0b3IodmFyS2luZCwgbmFtZSwgcmhzKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMudmFyS2luZCA9IHZhcktpbmQ7XG4gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgICAgIHRoaXMucmhzID0gcmhzO1xuICAgIH1cbiAgICByZW5kZXIoeyBlczUsIF9uIH0pIHtcbiAgICAgICAgY29uc3QgdmFyS2luZCA9IGVzNSA/IHNjb3BlXzEudmFyS2luZHMudmFyIDogdGhpcy52YXJLaW5kO1xuICAgICAgICBjb25zdCByaHMgPSB0aGlzLnJocyA9PT0gdW5kZWZpbmVkID8gXCJcIiA6IGAgPSAke3RoaXMucmhzfWA7XG4gICAgICAgIHJldHVybiBgJHt2YXJLaW5kfSAke3RoaXMubmFtZX0ke3Joc307YCArIF9uO1xuICAgIH1cbiAgICBvcHRpbWl6ZU5hbWVzKG5hbWVzLCBjb25zdGFudHMpIHtcbiAgICAgICAgaWYgKCFuYW1lc1t0aGlzLm5hbWUuc3RyXSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKHRoaXMucmhzKVxuICAgICAgICAgICAgdGhpcy5yaHMgPSBvcHRpbWl6ZUV4cHIodGhpcy5yaHMsIG5hbWVzLCBjb25zdGFudHMpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgZ2V0IG5hbWVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yaHMgaW5zdGFuY2VvZiBjb2RlXzEuX0NvZGVPck5hbWUgPyB0aGlzLnJocy5uYW1lcyA6IHt9O1xuICAgIH1cbn1cbmNsYXNzIEFzc2lnbiBleHRlbmRzIE5vZGUge1xuICAgIGNvbnN0cnVjdG9yKGxocywgcmhzLCBzaWRlRWZmZWN0cykge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmxocyA9IGxocztcbiAgICAgICAgdGhpcy5yaHMgPSByaHM7XG4gICAgICAgIHRoaXMuc2lkZUVmZmVjdHMgPSBzaWRlRWZmZWN0cztcbiAgICB9XG4gICAgcmVuZGVyKHsgX24gfSkge1xuICAgICAgICByZXR1cm4gYCR7dGhpcy5saHN9ID0gJHt0aGlzLnJoc307YCArIF9uO1xuICAgIH1cbiAgICBvcHRpbWl6ZU5hbWVzKG5hbWVzLCBjb25zdGFudHMpIHtcbiAgICAgICAgaWYgKHRoaXMubGhzIGluc3RhbmNlb2YgY29kZV8xLk5hbWUgJiYgIW5hbWVzW3RoaXMubGhzLnN0cl0gJiYgIXRoaXMuc2lkZUVmZmVjdHMpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHRoaXMucmhzID0gb3B0aW1pemVFeHByKHRoaXMucmhzLCBuYW1lcywgY29uc3RhbnRzKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGdldCBuYW1lcygpIHtcbiAgICAgICAgY29uc3QgbmFtZXMgPSB0aGlzLmxocyBpbnN0YW5jZW9mIGNvZGVfMS5OYW1lID8ge30gOiB7IC4uLnRoaXMubGhzLm5hbWVzIH07XG4gICAgICAgIHJldHVybiBhZGRFeHByTmFtZXMobmFtZXMsIHRoaXMucmhzKTtcbiAgICB9XG59XG5jbGFzcyBBc3NpZ25PcCBleHRlbmRzIEFzc2lnbiB7XG4gICAgY29uc3RydWN0b3IobGhzLCBvcCwgcmhzLCBzaWRlRWZmZWN0cykge1xuICAgICAgICBzdXBlcihsaHMsIHJocywgc2lkZUVmZmVjdHMpO1xuICAgICAgICB0aGlzLm9wID0gb3A7XG4gICAgfVxuICAgIHJlbmRlcih7IF9uIH0pIHtcbiAgICAgICAgcmV0dXJuIGAke3RoaXMubGhzfSAke3RoaXMub3B9PSAke3RoaXMucmhzfTtgICsgX247XG4gICAgfVxufVxuY2xhc3MgTGFiZWwgZXh0ZW5kcyBOb2RlIHtcbiAgICBjb25zdHJ1Y3RvcihsYWJlbCkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmxhYmVsID0gbGFiZWw7XG4gICAgICAgIHRoaXMubmFtZXMgPSB7fTtcbiAgICB9XG4gICAgcmVuZGVyKHsgX24gfSkge1xuICAgICAgICByZXR1cm4gYCR7dGhpcy5sYWJlbH06YCArIF9uO1xuICAgIH1cbn1cbmNsYXNzIEJyZWFrIGV4dGVuZHMgTm9kZSB7XG4gICAgY29uc3RydWN0b3IobGFiZWwpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5sYWJlbCA9IGxhYmVsO1xuICAgICAgICB0aGlzLm5hbWVzID0ge307XG4gICAgfVxuICAgIHJlbmRlcih7IF9uIH0pIHtcbiAgICAgICAgY29uc3QgbGFiZWwgPSB0aGlzLmxhYmVsID8gYCAke3RoaXMubGFiZWx9YCA6IFwiXCI7XG4gICAgICAgIHJldHVybiBgYnJlYWske2xhYmVsfTtgICsgX247XG4gICAgfVxufVxuY2xhc3MgVGhyb3cgZXh0ZW5kcyBOb2RlIHtcbiAgICBjb25zdHJ1Y3RvcihlcnJvcikge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmVycm9yID0gZXJyb3I7XG4gICAgfVxuICAgIHJlbmRlcih7IF9uIH0pIHtcbiAgICAgICAgcmV0dXJuIGB0aHJvdyAke3RoaXMuZXJyb3J9O2AgKyBfbjtcbiAgICB9XG4gICAgZ2V0IG5hbWVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5lcnJvci5uYW1lcztcbiAgICB9XG59XG5jbGFzcyBBbnlDb2RlIGV4dGVuZHMgTm9kZSB7XG4gICAgY29uc3RydWN0b3IoY29kZSkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmNvZGUgPSBjb2RlO1xuICAgIH1cbiAgICByZW5kZXIoeyBfbiB9KSB7XG4gICAgICAgIHJldHVybiBgJHt0aGlzLmNvZGV9O2AgKyBfbjtcbiAgICB9XG4gICAgb3B0aW1pemVOb2RlcygpIHtcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuY29kZX1gID8gdGhpcyA6IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgb3B0aW1pemVOYW1lcyhuYW1lcywgY29uc3RhbnRzKSB7XG4gICAgICAgIHRoaXMuY29kZSA9IG9wdGltaXplRXhwcih0aGlzLmNvZGUsIG5hbWVzLCBjb25zdGFudHMpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgZ2V0IG5hbWVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb2RlIGluc3RhbmNlb2YgY29kZV8xLl9Db2RlT3JOYW1lID8gdGhpcy5jb2RlLm5hbWVzIDoge307XG4gICAgfVxufVxuY2xhc3MgUGFyZW50Tm9kZSBleHRlbmRzIE5vZGUge1xuICAgIGNvbnN0cnVjdG9yKG5vZGVzID0gW10pIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5ub2RlcyA9IG5vZGVzO1xuICAgIH1cbiAgICByZW5kZXIob3B0cykge1xuICAgICAgICByZXR1cm4gdGhpcy5ub2Rlcy5yZWR1Y2UoKGNvZGUsIG4pID0+IGNvZGUgKyBuLnJlbmRlcihvcHRzKSwgXCJcIik7XG4gICAgfVxuICAgIG9wdGltaXplTm9kZXMoKSB7XG4gICAgICAgIGNvbnN0IHsgbm9kZXMgfSA9IHRoaXM7XG4gICAgICAgIGxldCBpID0gbm9kZXMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoaS0tKSB7XG4gICAgICAgICAgICBjb25zdCBuID0gbm9kZXNbaV0ub3B0aW1pemVOb2RlcygpO1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkobikpXG4gICAgICAgICAgICAgICAgbm9kZXMuc3BsaWNlKGksIDEsIC4uLm4pO1xuICAgICAgICAgICAgZWxzZSBpZiAobilcbiAgICAgICAgICAgICAgICBub2Rlc1tpXSA9IG47XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgbm9kZXMuc3BsaWNlKGksIDEpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBub2Rlcy5sZW5ndGggPiAwID8gdGhpcyA6IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgb3B0aW1pemVOYW1lcyhuYW1lcywgY29uc3RhbnRzKSB7XG4gICAgICAgIGNvbnN0IHsgbm9kZXMgfSA9IHRoaXM7XG4gICAgICAgIGxldCBpID0gbm9kZXMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoaS0tKSB7XG4gICAgICAgICAgICAvLyBpdGVyYXRpbmcgYmFja3dhcmRzIGltcHJvdmVzIDEtcGFzcyBvcHRpbWl6YXRpb25cbiAgICAgICAgICAgIGNvbnN0IG4gPSBub2Rlc1tpXTtcbiAgICAgICAgICAgIGlmIChuLm9wdGltaXplTmFtZXMobmFtZXMsIGNvbnN0YW50cykpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICBzdWJ0cmFjdE5hbWVzKG5hbWVzLCBuLm5hbWVzKTtcbiAgICAgICAgICAgIG5vZGVzLnNwbGljZShpLCAxKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbm9kZXMubGVuZ3RoID4gMCA/IHRoaXMgOiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGdldCBuYW1lcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubm9kZXMucmVkdWNlKChuYW1lcywgbikgPT4gYWRkTmFtZXMobmFtZXMsIG4ubmFtZXMpLCB7fSk7XG4gICAgfVxufVxuY2xhc3MgQmxvY2tOb2RlIGV4dGVuZHMgUGFyZW50Tm9kZSB7XG4gICAgcmVuZGVyKG9wdHMpIHtcbiAgICAgICAgcmV0dXJuIFwie1wiICsgb3B0cy5fbiArIHN1cGVyLnJlbmRlcihvcHRzKSArIFwifVwiICsgb3B0cy5fbjtcbiAgICB9XG59XG5jbGFzcyBSb290IGV4dGVuZHMgUGFyZW50Tm9kZSB7XG59XG5jbGFzcyBFbHNlIGV4dGVuZHMgQmxvY2tOb2RlIHtcbn1cbkVsc2Uua2luZCA9IFwiZWxzZVwiO1xuY2xhc3MgSWYgZXh0ZW5kcyBCbG9ja05vZGUge1xuICAgIGNvbnN0cnVjdG9yKGNvbmRpdGlvbiwgbm9kZXMpIHtcbiAgICAgICAgc3VwZXIobm9kZXMpO1xuICAgICAgICB0aGlzLmNvbmRpdGlvbiA9IGNvbmRpdGlvbjtcbiAgICB9XG4gICAgcmVuZGVyKG9wdHMpIHtcbiAgICAgICAgbGV0IGNvZGUgPSBgaWYoJHt0aGlzLmNvbmRpdGlvbn0pYCArIHN1cGVyLnJlbmRlcihvcHRzKTtcbiAgICAgICAgaWYgKHRoaXMuZWxzZSlcbiAgICAgICAgICAgIGNvZGUgKz0gXCJlbHNlIFwiICsgdGhpcy5lbHNlLnJlbmRlcihvcHRzKTtcbiAgICAgICAgcmV0dXJuIGNvZGU7XG4gICAgfVxuICAgIG9wdGltaXplTm9kZXMoKSB7XG4gICAgICAgIHN1cGVyLm9wdGltaXplTm9kZXMoKTtcbiAgICAgICAgY29uc3QgY29uZCA9IHRoaXMuY29uZGl0aW9uO1xuICAgICAgICBpZiAoY29uZCA9PT0gdHJ1ZSlcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm5vZGVzOyAvLyBlbHNlIGlzIGlnbm9yZWQgaGVyZVxuICAgICAgICBsZXQgZSA9IHRoaXMuZWxzZTtcbiAgICAgICAgaWYgKGUpIHtcbiAgICAgICAgICAgIGNvbnN0IG5zID0gZS5vcHRpbWl6ZU5vZGVzKCk7XG4gICAgICAgICAgICBlID0gdGhpcy5lbHNlID0gQXJyYXkuaXNBcnJheShucykgPyBuZXcgRWxzZShucykgOiBucztcbiAgICAgICAgfVxuICAgICAgICBpZiAoZSkge1xuICAgICAgICAgICAgaWYgKGNvbmQgPT09IGZhbHNlKVxuICAgICAgICAgICAgICAgIHJldHVybiBlIGluc3RhbmNlb2YgSWYgPyBlIDogZS5ub2RlcztcbiAgICAgICAgICAgIGlmICh0aGlzLm5vZGVzLmxlbmd0aClcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgIHJldHVybiBuZXcgSWYobm90KGNvbmQpLCBlIGluc3RhbmNlb2YgSWYgPyBbZV0gOiBlLm5vZGVzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29uZCA9PT0gZmFsc2UgfHwgIXRoaXMubm9kZXMubGVuZ3RoKVxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIG9wdGltaXplTmFtZXMobmFtZXMsIGNvbnN0YW50cykge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHRoaXMuZWxzZSA9IChfYSA9IHRoaXMuZWxzZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLm9wdGltaXplTmFtZXMobmFtZXMsIGNvbnN0YW50cyk7XG4gICAgICAgIGlmICghKHN1cGVyLm9wdGltaXplTmFtZXMobmFtZXMsIGNvbnN0YW50cykgfHwgdGhpcy5lbHNlKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdGhpcy5jb25kaXRpb24gPSBvcHRpbWl6ZUV4cHIodGhpcy5jb25kaXRpb24sIG5hbWVzLCBjb25zdGFudHMpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgZ2V0IG5hbWVzKCkge1xuICAgICAgICBjb25zdCBuYW1lcyA9IHN1cGVyLm5hbWVzO1xuICAgICAgICBhZGRFeHByTmFtZXMobmFtZXMsIHRoaXMuY29uZGl0aW9uKTtcbiAgICAgICAgaWYgKHRoaXMuZWxzZSlcbiAgICAgICAgICAgIGFkZE5hbWVzKG5hbWVzLCB0aGlzLmVsc2UubmFtZXMpO1xuICAgICAgICByZXR1cm4gbmFtZXM7XG4gICAgfVxufVxuSWYua2luZCA9IFwiaWZcIjtcbmNsYXNzIEZvciBleHRlbmRzIEJsb2NrTm9kZSB7XG59XG5Gb3Iua2luZCA9IFwiZm9yXCI7XG5jbGFzcyBGb3JMb29wIGV4dGVuZHMgRm9yIHtcbiAgICBjb25zdHJ1Y3RvcihpdGVyYXRpb24pIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5pdGVyYXRpb24gPSBpdGVyYXRpb247XG4gICAgfVxuICAgIHJlbmRlcihvcHRzKSB7XG4gICAgICAgIHJldHVybiBgZm9yKCR7dGhpcy5pdGVyYXRpb259KWAgKyBzdXBlci5yZW5kZXIob3B0cyk7XG4gICAgfVxuICAgIG9wdGltaXplTmFtZXMobmFtZXMsIGNvbnN0YW50cykge1xuICAgICAgICBpZiAoIXN1cGVyLm9wdGltaXplTmFtZXMobmFtZXMsIGNvbnN0YW50cykpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHRoaXMuaXRlcmF0aW9uID0gb3B0aW1pemVFeHByKHRoaXMuaXRlcmF0aW9uLCBuYW1lcywgY29uc3RhbnRzKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGdldCBuYW1lcygpIHtcbiAgICAgICAgcmV0dXJuIGFkZE5hbWVzKHN1cGVyLm5hbWVzLCB0aGlzLml0ZXJhdGlvbi5uYW1lcyk7XG4gICAgfVxufVxuY2xhc3MgRm9yUmFuZ2UgZXh0ZW5kcyBGb3Ige1xuICAgIGNvbnN0cnVjdG9yKHZhcktpbmQsIG5hbWUsIGZyb20sIHRvKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMudmFyS2luZCA9IHZhcktpbmQ7XG4gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgICAgIHRoaXMuZnJvbSA9IGZyb207XG4gICAgICAgIHRoaXMudG8gPSB0bztcbiAgICB9XG4gICAgcmVuZGVyKG9wdHMpIHtcbiAgICAgICAgY29uc3QgdmFyS2luZCA9IG9wdHMuZXM1ID8gc2NvcGVfMS52YXJLaW5kcy52YXIgOiB0aGlzLnZhcktpbmQ7XG4gICAgICAgIGNvbnN0IHsgbmFtZSwgZnJvbSwgdG8gfSA9IHRoaXM7XG4gICAgICAgIHJldHVybiBgZm9yKCR7dmFyS2luZH0gJHtuYW1lfT0ke2Zyb219OyAke25hbWV9PCR7dG99OyAke25hbWV9KyspYCArIHN1cGVyLnJlbmRlcihvcHRzKTtcbiAgICB9XG4gICAgZ2V0IG5hbWVzKCkge1xuICAgICAgICBjb25zdCBuYW1lcyA9IGFkZEV4cHJOYW1lcyhzdXBlci5uYW1lcywgdGhpcy5mcm9tKTtcbiAgICAgICAgcmV0dXJuIGFkZEV4cHJOYW1lcyhuYW1lcywgdGhpcy50byk7XG4gICAgfVxufVxuY2xhc3MgRm9ySXRlciBleHRlbmRzIEZvciB7XG4gICAgY29uc3RydWN0b3IobG9vcCwgdmFyS2luZCwgbmFtZSwgaXRlcmFibGUpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5sb29wID0gbG9vcDtcbiAgICAgICAgdGhpcy52YXJLaW5kID0gdmFyS2luZDtcbiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICAgICAgdGhpcy5pdGVyYWJsZSA9IGl0ZXJhYmxlO1xuICAgIH1cbiAgICByZW5kZXIob3B0cykge1xuICAgICAgICByZXR1cm4gYGZvcigke3RoaXMudmFyS2luZH0gJHt0aGlzLm5hbWV9ICR7dGhpcy5sb29wfSAke3RoaXMuaXRlcmFibGV9KWAgKyBzdXBlci5yZW5kZXIob3B0cyk7XG4gICAgfVxuICAgIG9wdGltaXplTmFtZXMobmFtZXMsIGNvbnN0YW50cykge1xuICAgICAgICBpZiAoIXN1cGVyLm9wdGltaXplTmFtZXMobmFtZXMsIGNvbnN0YW50cykpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHRoaXMuaXRlcmFibGUgPSBvcHRpbWl6ZUV4cHIodGhpcy5pdGVyYWJsZSwgbmFtZXMsIGNvbnN0YW50cyk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBnZXQgbmFtZXMoKSB7XG4gICAgICAgIHJldHVybiBhZGROYW1lcyhzdXBlci5uYW1lcywgdGhpcy5pdGVyYWJsZS5uYW1lcyk7XG4gICAgfVxufVxuY2xhc3MgRnVuYyBleHRlbmRzIEJsb2NrTm9kZSB7XG4gICAgY29uc3RydWN0b3IobmFtZSwgYXJncywgYXN5bmMpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICAgICAgdGhpcy5hcmdzID0gYXJncztcbiAgICAgICAgdGhpcy5hc3luYyA9IGFzeW5jO1xuICAgIH1cbiAgICByZW5kZXIob3B0cykge1xuICAgICAgICBjb25zdCBfYXN5bmMgPSB0aGlzLmFzeW5jID8gXCJhc3luYyBcIiA6IFwiXCI7XG4gICAgICAgIHJldHVybiBgJHtfYXN5bmN9ZnVuY3Rpb24gJHt0aGlzLm5hbWV9KCR7dGhpcy5hcmdzfSlgICsgc3VwZXIucmVuZGVyKG9wdHMpO1xuICAgIH1cbn1cbkZ1bmMua2luZCA9IFwiZnVuY1wiO1xuY2xhc3MgUmV0dXJuIGV4dGVuZHMgUGFyZW50Tm9kZSB7XG4gICAgcmVuZGVyKG9wdHMpIHtcbiAgICAgICAgcmV0dXJuIFwicmV0dXJuIFwiICsgc3VwZXIucmVuZGVyKG9wdHMpO1xuICAgIH1cbn1cblJldHVybi5raW5kID0gXCJyZXR1cm5cIjtcbmNsYXNzIFRyeSBleHRlbmRzIEJsb2NrTm9kZSB7XG4gICAgcmVuZGVyKG9wdHMpIHtcbiAgICAgICAgbGV0IGNvZGUgPSBcInRyeVwiICsgc3VwZXIucmVuZGVyKG9wdHMpO1xuICAgICAgICBpZiAodGhpcy5jYXRjaClcbiAgICAgICAgICAgIGNvZGUgKz0gdGhpcy5jYXRjaC5yZW5kZXIob3B0cyk7XG4gICAgICAgIGlmICh0aGlzLmZpbmFsbHkpXG4gICAgICAgICAgICBjb2RlICs9IHRoaXMuZmluYWxseS5yZW5kZXIob3B0cyk7XG4gICAgICAgIHJldHVybiBjb2RlO1xuICAgIH1cbiAgICBvcHRpbWl6ZU5vZGVzKCkge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICBzdXBlci5vcHRpbWl6ZU5vZGVzKCk7XG4gICAgICAgIChfYSA9IHRoaXMuY2F0Y2gpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5vcHRpbWl6ZU5vZGVzKCk7XG4gICAgICAgIChfYiA9IHRoaXMuZmluYWxseSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLm9wdGltaXplTm9kZXMoKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIG9wdGltaXplTmFtZXMobmFtZXMsIGNvbnN0YW50cykge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICBzdXBlci5vcHRpbWl6ZU5hbWVzKG5hbWVzLCBjb25zdGFudHMpO1xuICAgICAgICAoX2EgPSB0aGlzLmNhdGNoKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Eub3B0aW1pemVOYW1lcyhuYW1lcywgY29uc3RhbnRzKTtcbiAgICAgICAgKF9iID0gdGhpcy5maW5hbGx5KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Iub3B0aW1pemVOYW1lcyhuYW1lcywgY29uc3RhbnRzKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGdldCBuYW1lcygpIHtcbiAgICAgICAgY29uc3QgbmFtZXMgPSBzdXBlci5uYW1lcztcbiAgICAgICAgaWYgKHRoaXMuY2F0Y2gpXG4gICAgICAgICAgICBhZGROYW1lcyhuYW1lcywgdGhpcy5jYXRjaC5uYW1lcyk7XG4gICAgICAgIGlmICh0aGlzLmZpbmFsbHkpXG4gICAgICAgICAgICBhZGROYW1lcyhuYW1lcywgdGhpcy5maW5hbGx5Lm5hbWVzKTtcbiAgICAgICAgcmV0dXJuIG5hbWVzO1xuICAgIH1cbn1cbmNsYXNzIENhdGNoIGV4dGVuZHMgQmxvY2tOb2RlIHtcbiAgICBjb25zdHJ1Y3RvcihlcnJvcikge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmVycm9yID0gZXJyb3I7XG4gICAgfVxuICAgIHJlbmRlcihvcHRzKSB7XG4gICAgICAgIHJldHVybiBgY2F0Y2goJHt0aGlzLmVycm9yfSlgICsgc3VwZXIucmVuZGVyKG9wdHMpO1xuICAgIH1cbn1cbkNhdGNoLmtpbmQgPSBcImNhdGNoXCI7XG5jbGFzcyBGaW5hbGx5IGV4dGVuZHMgQmxvY2tOb2RlIHtcbiAgICByZW5kZXIob3B0cykge1xuICAgICAgICByZXR1cm4gXCJmaW5hbGx5XCIgKyBzdXBlci5yZW5kZXIob3B0cyk7XG4gICAgfVxufVxuRmluYWxseS5raW5kID0gXCJmaW5hbGx5XCI7XG5jbGFzcyBDb2RlR2VuIHtcbiAgICBjb25zdHJ1Y3RvcihleHRTY29wZSwgb3B0cyA9IHt9KSB7XG4gICAgICAgIHRoaXMuX3ZhbHVlcyA9IHt9O1xuICAgICAgICB0aGlzLl9ibG9ja1N0YXJ0cyA9IFtdO1xuICAgICAgICB0aGlzLl9jb25zdGFudHMgPSB7fTtcbiAgICAgICAgdGhpcy5vcHRzID0geyAuLi5vcHRzLCBfbjogb3B0cy5saW5lcyA/IFwiXFxuXCIgOiBcIlwiIH07XG4gICAgICAgIHRoaXMuX2V4dFNjb3BlID0gZXh0U2NvcGU7XG4gICAgICAgIHRoaXMuX3Njb3BlID0gbmV3IHNjb3BlXzEuU2NvcGUoeyBwYXJlbnQ6IGV4dFNjb3BlIH0pO1xuICAgICAgICB0aGlzLl9ub2RlcyA9IFtuZXcgUm9vdCgpXTtcbiAgICB9XG4gICAgdG9TdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yb290LnJlbmRlcih0aGlzLm9wdHMpO1xuICAgIH1cbiAgICAvLyByZXR1cm5zIHVuaXF1ZSBuYW1lIGluIHRoZSBpbnRlcm5hbCBzY29wZVxuICAgIG5hbWUocHJlZml4KSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zY29wZS5uYW1lKHByZWZpeCk7XG4gICAgfVxuICAgIC8vIHJlc2VydmVzIHVuaXF1ZSBuYW1lIGluIHRoZSBleHRlcm5hbCBzY29wZVxuICAgIHNjb3BlTmFtZShwcmVmaXgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2V4dFNjb3BlLm5hbWUocHJlZml4KTtcbiAgICB9XG4gICAgLy8gcmVzZXJ2ZXMgdW5pcXVlIG5hbWUgaW4gdGhlIGV4dGVybmFsIHNjb3BlIGFuZCBhc3NpZ25zIHZhbHVlIHRvIGl0XG4gICAgc2NvcGVWYWx1ZShwcmVmaXhPck5hbWUsIHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IG5hbWUgPSB0aGlzLl9leHRTY29wZS52YWx1ZShwcmVmaXhPck5hbWUsIHZhbHVlKTtcbiAgICAgICAgY29uc3QgdnMgPSB0aGlzLl92YWx1ZXNbbmFtZS5wcmVmaXhdIHx8ICh0aGlzLl92YWx1ZXNbbmFtZS5wcmVmaXhdID0gbmV3IFNldCgpKTtcbiAgICAgICAgdnMuYWRkKG5hbWUpO1xuICAgICAgICByZXR1cm4gbmFtZTtcbiAgICB9XG4gICAgZ2V0U2NvcGVWYWx1ZShwcmVmaXgsIGtleU9yUmVmKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9leHRTY29wZS5nZXRWYWx1ZShwcmVmaXgsIGtleU9yUmVmKTtcbiAgICB9XG4gICAgLy8gcmV0dXJuIGNvZGUgdGhhdCBhc3NpZ25zIHZhbHVlcyBpbiB0aGUgZXh0ZXJuYWwgc2NvcGUgdG8gdGhlIG5hbWVzIHRoYXQgYXJlIHVzZWQgaW50ZXJuYWxseVxuICAgIC8vIChzYW1lIG5hbWVzIHRoYXQgd2VyZSByZXR1cm5lZCBieSBnZW4uc2NvcGVOYW1lIG9yIGdlbi5zY29wZVZhbHVlKVxuICAgIHNjb3BlUmVmcyhzY29wZU5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2V4dFNjb3BlLnNjb3BlUmVmcyhzY29wZU5hbWUsIHRoaXMuX3ZhbHVlcyk7XG4gICAgfVxuICAgIHNjb3BlQ29kZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2V4dFNjb3BlLnNjb3BlQ29kZSh0aGlzLl92YWx1ZXMpO1xuICAgIH1cbiAgICBfZGVmKHZhcktpbmQsIG5hbWVPclByZWZpeCwgcmhzLCBjb25zdGFudCkge1xuICAgICAgICBjb25zdCBuYW1lID0gdGhpcy5fc2NvcGUudG9OYW1lKG5hbWVPclByZWZpeCk7XG4gICAgICAgIGlmIChyaHMgIT09IHVuZGVmaW5lZCAmJiBjb25zdGFudClcbiAgICAgICAgICAgIHRoaXMuX2NvbnN0YW50c1tuYW1lLnN0cl0gPSByaHM7XG4gICAgICAgIHRoaXMuX2xlYWZOb2RlKG5ldyBEZWYodmFyS2luZCwgbmFtZSwgcmhzKSk7XG4gICAgICAgIHJldHVybiBuYW1lO1xuICAgIH1cbiAgICAvLyBgY29uc3RgIGRlY2xhcmF0aW9uIChgdmFyYCBpbiBlczUgbW9kZSlcbiAgICBjb25zdChuYW1lT3JQcmVmaXgsIHJocywgX2NvbnN0YW50KSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYoc2NvcGVfMS52YXJLaW5kcy5jb25zdCwgbmFtZU9yUHJlZml4LCByaHMsIF9jb25zdGFudCk7XG4gICAgfVxuICAgIC8vIGBsZXRgIGRlY2xhcmF0aW9uIHdpdGggb3B0aW9uYWwgYXNzaWdubWVudCAoYHZhcmAgaW4gZXM1IG1vZGUpXG4gICAgbGV0KG5hbWVPclByZWZpeCwgcmhzLCBfY29uc3RhbnQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZihzY29wZV8xLnZhcktpbmRzLmxldCwgbmFtZU9yUHJlZml4LCByaHMsIF9jb25zdGFudCk7XG4gICAgfVxuICAgIC8vIGB2YXJgIGRlY2xhcmF0aW9uIHdpdGggb3B0aW9uYWwgYXNzaWdubWVudFxuICAgIHZhcihuYW1lT3JQcmVmaXgsIHJocywgX2NvbnN0YW50KSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYoc2NvcGVfMS52YXJLaW5kcy52YXIsIG5hbWVPclByZWZpeCwgcmhzLCBfY29uc3RhbnQpO1xuICAgIH1cbiAgICAvLyBhc3NpZ25tZW50IGNvZGVcbiAgICBhc3NpZ24obGhzLCByaHMsIHNpZGVFZmZlY3RzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sZWFmTm9kZShuZXcgQXNzaWduKGxocywgcmhzLCBzaWRlRWZmZWN0cykpO1xuICAgIH1cbiAgICAvLyBgKz1gIGNvZGVcbiAgICBhZGQobGhzLCByaHMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xlYWZOb2RlKG5ldyBBc3NpZ25PcChsaHMsIGV4cG9ydHMub3BlcmF0b3JzLkFERCwgcmhzKSk7XG4gICAgfVxuICAgIC8vIGFwcGVuZHMgcGFzc2VkIFNhZmVFeHByIHRvIGNvZGUgb3IgZXhlY3V0ZXMgQmxvY2tcbiAgICBjb2RlKGMpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjID09IFwiZnVuY3Rpb25cIilcbiAgICAgICAgICAgIGMoKTtcbiAgICAgICAgZWxzZSBpZiAoYyAhPT0gY29kZV8xLm5pbClcbiAgICAgICAgICAgIHRoaXMuX2xlYWZOb2RlKG5ldyBBbnlDb2RlKGMpKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8vIHJldHVybnMgY29kZSBmb3Igb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSBwYXNzZWQgYXJndW1lbnQgbGlzdCBvZiBrZXktdmFsdWUgcGFpcnNcbiAgICBvYmplY3QoLi4ua2V5VmFsdWVzKSB7XG4gICAgICAgIGNvbnN0IGNvZGUgPSBbXCJ7XCJdO1xuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBrZXlWYWx1ZXMpIHtcbiAgICAgICAgICAgIGlmIChjb2RlLmxlbmd0aCA+IDEpXG4gICAgICAgICAgICAgICAgY29kZS5wdXNoKFwiLFwiKTtcbiAgICAgICAgICAgIGNvZGUucHVzaChrZXkpO1xuICAgICAgICAgICAgaWYgKGtleSAhPT0gdmFsdWUgfHwgdGhpcy5vcHRzLmVzNSkge1xuICAgICAgICAgICAgICAgIGNvZGUucHVzaChcIjpcIik7XG4gICAgICAgICAgICAgICAgKDAsIGNvZGVfMS5hZGRDb2RlQXJnKShjb2RlLCB2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29kZS5wdXNoKFwifVwiKTtcbiAgICAgICAgcmV0dXJuIG5ldyBjb2RlXzEuX0NvZGUoY29kZSk7XG4gICAgfVxuICAgIC8vIGBpZmAgY2xhdXNlIChvciBzdGF0ZW1lbnQgaWYgYHRoZW5Cb2R5YCBhbmQsIG9wdGlvbmFsbHksIGBlbHNlQm9keWAgYXJlIHBhc3NlZClcbiAgICBpZihjb25kaXRpb24sIHRoZW5Cb2R5LCBlbHNlQm9keSkge1xuICAgICAgICB0aGlzLl9ibG9ja05vZGUobmV3IElmKGNvbmRpdGlvbikpO1xuICAgICAgICBpZiAodGhlbkJvZHkgJiYgZWxzZUJvZHkpIHtcbiAgICAgICAgICAgIHRoaXMuY29kZSh0aGVuQm9keSkuZWxzZSgpLmNvZGUoZWxzZUJvZHkpLmVuZElmKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhlbkJvZHkpIHtcbiAgICAgICAgICAgIHRoaXMuY29kZSh0aGVuQm9keSkuZW5kSWYoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChlbHNlQm9keSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb2RlR2VuOiBcImVsc2VcIiBib2R5IHdpdGhvdXQgXCJ0aGVuXCIgYm9keScpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvLyBgZWxzZSBpZmAgY2xhdXNlIC0gaW52YWxpZCB3aXRob3V0IGBpZmAgb3IgYWZ0ZXIgYGVsc2VgIGNsYXVzZXNcbiAgICBlbHNlSWYoY29uZGl0aW9uKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbHNlTm9kZShuZXcgSWYoY29uZGl0aW9uKSk7XG4gICAgfVxuICAgIC8vIGBlbHNlYCBjbGF1c2UgLSBvbmx5IHZhbGlkIGFmdGVyIGBpZmAgb3IgYGVsc2UgaWZgIGNsYXVzZXNcbiAgICBlbHNlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZWxzZU5vZGUobmV3IEVsc2UoKSk7XG4gICAgfVxuICAgIC8vIGVuZCBgaWZgIHN0YXRlbWVudCAobmVlZGVkIGlmIGdlbi5pZiB3YXMgdXNlZCBvbmx5IHdpdGggY29uZGl0aW9uKVxuICAgIGVuZElmKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZW5kQmxvY2tOb2RlKElmLCBFbHNlKTtcbiAgICB9XG4gICAgX2Zvcihub2RlLCBmb3JCb2R5KSB7XG4gICAgICAgIHRoaXMuX2Jsb2NrTm9kZShub2RlKTtcbiAgICAgICAgaWYgKGZvckJvZHkpXG4gICAgICAgICAgICB0aGlzLmNvZGUoZm9yQm9keSkuZW5kRm9yKCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvLyBhIGdlbmVyaWMgYGZvcmAgY2xhdXNlIChvciBzdGF0ZW1lbnQgaWYgYGZvckJvZHlgIGlzIHBhc3NlZClcbiAgICBmb3IoaXRlcmF0aW9uLCBmb3JCb2R5KSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9mb3IobmV3IEZvckxvb3AoaXRlcmF0aW9uKSwgZm9yQm9keSk7XG4gICAgfVxuICAgIC8vIGBmb3JgIHN0YXRlbWVudCBmb3IgYSByYW5nZSBvZiB2YWx1ZXNcbiAgICBmb3JSYW5nZShuYW1lT3JQcmVmaXgsIGZyb20sIHRvLCBmb3JCb2R5LCB2YXJLaW5kID0gdGhpcy5vcHRzLmVzNSA/IHNjb3BlXzEudmFyS2luZHMudmFyIDogc2NvcGVfMS52YXJLaW5kcy5sZXQpIHtcbiAgICAgICAgY29uc3QgbmFtZSA9IHRoaXMuX3Njb3BlLnRvTmFtZShuYW1lT3JQcmVmaXgpO1xuICAgICAgICByZXR1cm4gdGhpcy5fZm9yKG5ldyBGb3JSYW5nZSh2YXJLaW5kLCBuYW1lLCBmcm9tLCB0byksICgpID0+IGZvckJvZHkobmFtZSkpO1xuICAgIH1cbiAgICAvLyBgZm9yLW9mYCBzdGF0ZW1lbnQgKGluIGVzNSBtb2RlIHJlcGxhY2Ugd2l0aCBhIG5vcm1hbCBmb3IgbG9vcClcbiAgICBmb3JPZihuYW1lT3JQcmVmaXgsIGl0ZXJhYmxlLCBmb3JCb2R5LCB2YXJLaW5kID0gc2NvcGVfMS52YXJLaW5kcy5jb25zdCkge1xuICAgICAgICBjb25zdCBuYW1lID0gdGhpcy5fc2NvcGUudG9OYW1lKG5hbWVPclByZWZpeCk7XG4gICAgICAgIGlmICh0aGlzLm9wdHMuZXM1KSB7XG4gICAgICAgICAgICBjb25zdCBhcnIgPSBpdGVyYWJsZSBpbnN0YW5jZW9mIGNvZGVfMS5OYW1lID8gaXRlcmFibGUgOiB0aGlzLnZhcihcIl9hcnJcIiwgaXRlcmFibGUpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZm9yUmFuZ2UoXCJfaVwiLCAwLCAoMCwgY29kZV8xLl8pIGAke2Fycn0ubGVuZ3RoYCwgKGkpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnZhcihuYW1lLCAoMCwgY29kZV8xLl8pIGAke2Fycn1bJHtpfV1gKTtcbiAgICAgICAgICAgICAgICBmb3JCb2R5KG5hbWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZvcihuZXcgRm9ySXRlcihcIm9mXCIsIHZhcktpbmQsIG5hbWUsIGl0ZXJhYmxlKSwgKCkgPT4gZm9yQm9keShuYW1lKSk7XG4gICAgfVxuICAgIC8vIGBmb3ItaW5gIHN0YXRlbWVudC5cbiAgICAvLyBXaXRoIG9wdGlvbiBgb3duUHJvcGVydGllc2AgcmVwbGFjZWQgd2l0aCBhIGBmb3Itb2ZgIGxvb3AgZm9yIG9iamVjdCBrZXlzXG4gICAgZm9ySW4obmFtZU9yUHJlZml4LCBvYmosIGZvckJvZHksIHZhcktpbmQgPSB0aGlzLm9wdHMuZXM1ID8gc2NvcGVfMS52YXJLaW5kcy52YXIgOiBzY29wZV8xLnZhcktpbmRzLmNvbnN0KSB7XG4gICAgICAgIGlmICh0aGlzLm9wdHMub3duUHJvcGVydGllcykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZm9yT2YobmFtZU9yUHJlZml4LCAoMCwgY29kZV8xLl8pIGBPYmplY3Qua2V5cygke29ian0pYCwgZm9yQm9keSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbmFtZSA9IHRoaXMuX3Njb3BlLnRvTmFtZShuYW1lT3JQcmVmaXgpO1xuICAgICAgICByZXR1cm4gdGhpcy5fZm9yKG5ldyBGb3JJdGVyKFwiaW5cIiwgdmFyS2luZCwgbmFtZSwgb2JqKSwgKCkgPT4gZm9yQm9keShuYW1lKSk7XG4gICAgfVxuICAgIC8vIGVuZCBgZm9yYCBsb29wXG4gICAgZW5kRm9yKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZW5kQmxvY2tOb2RlKEZvcik7XG4gICAgfVxuICAgIC8vIGBsYWJlbGAgc3RhdGVtZW50XG4gICAgbGFiZWwobGFiZWwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xlYWZOb2RlKG5ldyBMYWJlbChsYWJlbCkpO1xuICAgIH1cbiAgICAvLyBgYnJlYWtgIHN0YXRlbWVudFxuICAgIGJyZWFrKGxhYmVsKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sZWFmTm9kZShuZXcgQnJlYWsobGFiZWwpKTtcbiAgICB9XG4gICAgLy8gYHJldHVybmAgc3RhdGVtZW50XG4gICAgcmV0dXJuKHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IG5vZGUgPSBuZXcgUmV0dXJuKCk7XG4gICAgICAgIHRoaXMuX2Jsb2NrTm9kZShub2RlKTtcbiAgICAgICAgdGhpcy5jb2RlKHZhbHVlKTtcbiAgICAgICAgaWYgKG5vZGUubm9kZXMubGVuZ3RoICE9PSAxKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb2RlR2VuOiBcInJldHVyblwiIHNob3VsZCBoYXZlIG9uZSBub2RlJyk7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbmRCbG9ja05vZGUoUmV0dXJuKTtcbiAgICB9XG4gICAgLy8gYHRyeWAgc3RhdGVtZW50XG4gICAgdHJ5KHRyeUJvZHksIGNhdGNoQ29kZSwgZmluYWxseUNvZGUpIHtcbiAgICAgICAgaWYgKCFjYXRjaENvZGUgJiYgIWZpbmFsbHlDb2RlKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb2RlR2VuOiBcInRyeVwiIHdpdGhvdXQgXCJjYXRjaFwiIGFuZCBcImZpbmFsbHlcIicpO1xuICAgICAgICBjb25zdCBub2RlID0gbmV3IFRyeSgpO1xuICAgICAgICB0aGlzLl9ibG9ja05vZGUobm9kZSk7XG4gICAgICAgIHRoaXMuY29kZSh0cnlCb2R5KTtcbiAgICAgICAgaWYgKGNhdGNoQ29kZSkge1xuICAgICAgICAgICAgY29uc3QgZXJyb3IgPSB0aGlzLm5hbWUoXCJlXCIpO1xuICAgICAgICAgICAgdGhpcy5fY3Vyck5vZGUgPSBub2RlLmNhdGNoID0gbmV3IENhdGNoKGVycm9yKTtcbiAgICAgICAgICAgIGNhdGNoQ29kZShlcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpbmFsbHlDb2RlKSB7XG4gICAgICAgICAgICB0aGlzLl9jdXJyTm9kZSA9IG5vZGUuZmluYWxseSA9IG5ldyBGaW5hbGx5KCk7XG4gICAgICAgICAgICB0aGlzLmNvZGUoZmluYWxseUNvZGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9lbmRCbG9ja05vZGUoQ2F0Y2gsIEZpbmFsbHkpO1xuICAgIH1cbiAgICAvLyBgdGhyb3dgIHN0YXRlbWVudFxuICAgIHRocm93KGVycm9yKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sZWFmTm9kZShuZXcgVGhyb3coZXJyb3IpKTtcbiAgICB9XG4gICAgLy8gc3RhcnQgc2VsZi1iYWxhbmNpbmcgYmxvY2tcbiAgICBibG9jayhib2R5LCBub2RlQ291bnQpIHtcbiAgICAgICAgdGhpcy5fYmxvY2tTdGFydHMucHVzaCh0aGlzLl9ub2Rlcy5sZW5ndGgpO1xuICAgICAgICBpZiAoYm9keSlcbiAgICAgICAgICAgIHRoaXMuY29kZShib2R5KS5lbmRCbG9jayhub2RlQ291bnQpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLy8gZW5kIHRoZSBjdXJyZW50IHNlbGYtYmFsYW5jaW5nIGJsb2NrXG4gICAgZW5kQmxvY2sobm9kZUNvdW50KSB7XG4gICAgICAgIGNvbnN0IGxlbiA9IHRoaXMuX2Jsb2NrU3RhcnRzLnBvcCgpO1xuICAgICAgICBpZiAobGVuID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb2RlR2VuOiBub3QgaW4gc2VsZi1iYWxhbmNpbmcgYmxvY2tcIik7XG4gICAgICAgIGNvbnN0IHRvQ2xvc2UgPSB0aGlzLl9ub2Rlcy5sZW5ndGggLSBsZW47XG4gICAgICAgIGlmICh0b0Nsb3NlIDwgMCB8fCAobm9kZUNvdW50ICE9PSB1bmRlZmluZWQgJiYgdG9DbG9zZSAhPT0gbm9kZUNvdW50KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb2RlR2VuOiB3cm9uZyBudW1iZXIgb2Ygbm9kZXM6ICR7dG9DbG9zZX0gdnMgJHtub2RlQ291bnR9IGV4cGVjdGVkYCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fbm9kZXMubGVuZ3RoID0gbGVuO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLy8gYGZ1bmN0aW9uYCBoZWFkaW5nIChvciBkZWZpbml0aW9uIGlmIGZ1bmNCb2R5IGlzIHBhc3NlZClcbiAgICBmdW5jKG5hbWUsIGFyZ3MgPSBjb2RlXzEubmlsLCBhc3luYywgZnVuY0JvZHkpIHtcbiAgICAgICAgdGhpcy5fYmxvY2tOb2RlKG5ldyBGdW5jKG5hbWUsIGFyZ3MsIGFzeW5jKSk7XG4gICAgICAgIGlmIChmdW5jQm9keSlcbiAgICAgICAgICAgIHRoaXMuY29kZShmdW5jQm9keSkuZW5kRnVuYygpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLy8gZW5kIGZ1bmN0aW9uIGRlZmluaXRpb25cbiAgICBlbmRGdW5jKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZW5kQmxvY2tOb2RlKEZ1bmMpO1xuICAgIH1cbiAgICBvcHRpbWl6ZShuID0gMSkge1xuICAgICAgICB3aGlsZSAobi0tID4gMCkge1xuICAgICAgICAgICAgdGhpcy5fcm9vdC5vcHRpbWl6ZU5vZGVzKCk7XG4gICAgICAgICAgICB0aGlzLl9yb290Lm9wdGltaXplTmFtZXModGhpcy5fcm9vdC5uYW1lcywgdGhpcy5fY29uc3RhbnRzKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBfbGVhZk5vZGUobm9kZSkge1xuICAgICAgICB0aGlzLl9jdXJyTm9kZS5ub2Rlcy5wdXNoKG5vZGUpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgX2Jsb2NrTm9kZShub2RlKSB7XG4gICAgICAgIHRoaXMuX2N1cnJOb2RlLm5vZGVzLnB1c2gobm9kZSk7XG4gICAgICAgIHRoaXMuX25vZGVzLnB1c2gobm9kZSk7XG4gICAgfVxuICAgIF9lbmRCbG9ja05vZGUoTjEsIE4yKSB7XG4gICAgICAgIGNvbnN0IG4gPSB0aGlzLl9jdXJyTm9kZTtcbiAgICAgICAgaWYgKG4gaW5zdGFuY2VvZiBOMSB8fCAoTjIgJiYgbiBpbnN0YW5jZW9mIE4yKSkge1xuICAgICAgICAgICAgdGhpcy5fbm9kZXMucG9wKCk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENvZGVHZW46IG5vdCBpbiBibG9jayBcIiR7TjIgPyBgJHtOMS5raW5kfS8ke04yLmtpbmR9YCA6IE4xLmtpbmR9XCJgKTtcbiAgICB9XG4gICAgX2Vsc2VOb2RlKG5vZGUpIHtcbiAgICAgICAgY29uc3QgbiA9IHRoaXMuX2N1cnJOb2RlO1xuICAgICAgICBpZiAoIShuIGluc3RhbmNlb2YgSWYpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvZGVHZW46IFwiZWxzZVwiIHdpdGhvdXQgXCJpZlwiJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fY3Vyck5vZGUgPSBuLmVsc2UgPSBub2RlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgZ2V0IF9yb290KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbm9kZXNbMF07XG4gICAgfVxuICAgIGdldCBfY3Vyck5vZGUoKSB7XG4gICAgICAgIGNvbnN0IG5zID0gdGhpcy5fbm9kZXM7XG4gICAgICAgIHJldHVybiBuc1tucy5sZW5ndGggLSAxXTtcbiAgICB9XG4gICAgc2V0IF9jdXJyTm9kZShub2RlKSB7XG4gICAgICAgIGNvbnN0IG5zID0gdGhpcy5fbm9kZXM7XG4gICAgICAgIG5zW25zLmxlbmd0aCAtIDFdID0gbm9kZTtcbiAgICB9XG59XG5leHBvcnRzLkNvZGVHZW4gPSBDb2RlR2VuO1xuZnVuY3Rpb24gYWRkTmFtZXMobmFtZXMsIGZyb20pIHtcbiAgICBmb3IgKGNvbnN0IG4gaW4gZnJvbSlcbiAgICAgICAgbmFtZXNbbl0gPSAobmFtZXNbbl0gfHwgMCkgKyAoZnJvbVtuXSB8fCAwKTtcbiAgICByZXR1cm4gbmFtZXM7XG59XG5mdW5jdGlvbiBhZGRFeHByTmFtZXMobmFtZXMsIGZyb20pIHtcbiAgICByZXR1cm4gZnJvbSBpbnN0YW5jZW9mIGNvZGVfMS5fQ29kZU9yTmFtZSA/IGFkZE5hbWVzKG5hbWVzLCBmcm9tLm5hbWVzKSA6IG5hbWVzO1xufVxuZnVuY3Rpb24gb3B0aW1pemVFeHByKGV4cHIsIG5hbWVzLCBjb25zdGFudHMpIHtcbiAgICBpZiAoZXhwciBpbnN0YW5jZW9mIGNvZGVfMS5OYW1lKVxuICAgICAgICByZXR1cm4gcmVwbGFjZU5hbWUoZXhwcik7XG4gICAgaWYgKCFjYW5PcHRpbWl6ZShleHByKSlcbiAgICAgICAgcmV0dXJuIGV4cHI7XG4gICAgcmV0dXJuIG5ldyBjb2RlXzEuX0NvZGUoZXhwci5faXRlbXMucmVkdWNlKChpdGVtcywgYykgPT4ge1xuICAgICAgICBpZiAoYyBpbnN0YW5jZW9mIGNvZGVfMS5OYW1lKVxuICAgICAgICAgICAgYyA9IHJlcGxhY2VOYW1lKGMpO1xuICAgICAgICBpZiAoYyBpbnN0YW5jZW9mIGNvZGVfMS5fQ29kZSlcbiAgICAgICAgICAgIGl0ZW1zLnB1c2goLi4uYy5faXRlbXMpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICBpdGVtcy5wdXNoKGMpO1xuICAgICAgICByZXR1cm4gaXRlbXM7XG4gICAgfSwgW10pKTtcbiAgICBmdW5jdGlvbiByZXBsYWNlTmFtZShuKSB7XG4gICAgICAgIGNvbnN0IGMgPSBjb25zdGFudHNbbi5zdHJdO1xuICAgICAgICBpZiAoYyA9PT0gdW5kZWZpbmVkIHx8IG5hbWVzW24uc3RyXSAhPT0gMSlcbiAgICAgICAgICAgIHJldHVybiBuO1xuICAgICAgICBkZWxldGUgbmFtZXNbbi5zdHJdO1xuICAgICAgICByZXR1cm4gYztcbiAgICB9XG4gICAgZnVuY3Rpb24gY2FuT3B0aW1pemUoZSkge1xuICAgICAgICByZXR1cm4gKGUgaW5zdGFuY2VvZiBjb2RlXzEuX0NvZGUgJiZcbiAgICAgICAgICAgIGUuX2l0ZW1zLnNvbWUoKGMpID0+IGMgaW5zdGFuY2VvZiBjb2RlXzEuTmFtZSAmJiBuYW1lc1tjLnN0cl0gPT09IDEgJiYgY29uc3RhbnRzW2Muc3RyXSAhPT0gdW5kZWZpbmVkKSk7XG4gICAgfVxufVxuZnVuY3Rpb24gc3VidHJhY3ROYW1lcyhuYW1lcywgZnJvbSkge1xuICAgIGZvciAoY29uc3QgbiBpbiBmcm9tKVxuICAgICAgICBuYW1lc1tuXSA9IChuYW1lc1tuXSB8fCAwKSAtIChmcm9tW25dIHx8IDApO1xufVxuZnVuY3Rpb24gbm90KHgpIHtcbiAgICByZXR1cm4gdHlwZW9mIHggPT0gXCJib29sZWFuXCIgfHwgdHlwZW9mIHggPT0gXCJudW1iZXJcIiB8fCB4ID09PSBudWxsID8gIXggOiAoMCwgY29kZV8xLl8pIGAhJHtwYXIoeCl9YDtcbn1cbmV4cG9ydHMubm90ID0gbm90O1xuY29uc3QgYW5kQ29kZSA9IG1hcHBlbmQoZXhwb3J0cy5vcGVyYXRvcnMuQU5EKTtcbi8vIGJvb2xlYW4gQU5EICgmJikgZXhwcmVzc2lvbiB3aXRoIHRoZSBwYXNzZWQgYXJndW1lbnRzXG5mdW5jdGlvbiBhbmQoLi4uYXJncykge1xuICAgIHJldHVybiBhcmdzLnJlZHVjZShhbmRDb2RlKTtcbn1cbmV4cG9ydHMuYW5kID0gYW5kO1xuY29uc3Qgb3JDb2RlID0gbWFwcGVuZChleHBvcnRzLm9wZXJhdG9ycy5PUik7XG4vLyBib29sZWFuIE9SICh8fCkgZXhwcmVzc2lvbiB3aXRoIHRoZSBwYXNzZWQgYXJndW1lbnRzXG5mdW5jdGlvbiBvciguLi5hcmdzKSB7XG4gICAgcmV0dXJuIGFyZ3MucmVkdWNlKG9yQ29kZSk7XG59XG5leHBvcnRzLm9yID0gb3I7XG5mdW5jdGlvbiBtYXBwZW5kKG9wKSB7XG4gICAgcmV0dXJuICh4LCB5KSA9PiAoeCA9PT0gY29kZV8xLm5pbCA/IHkgOiB5ID09PSBjb2RlXzEubmlsID8geCA6ICgwLCBjb2RlXzEuXykgYCR7cGFyKHgpfSAke29wfSAke3Bhcih5KX1gKTtcbn1cbmZ1bmN0aW9uIHBhcih4KSB7XG4gICAgcmV0dXJuIHggaW5zdGFuY2VvZiBjb2RlXzEuTmFtZSA/IHggOiAoMCwgY29kZV8xLl8pIGAoJHt4fSlgO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY2hlY2tTdHJpY3RNb2RlID0gZXhwb3J0cy5nZXRFcnJvclBhdGggPSBleHBvcnRzLlR5cGUgPSBleHBvcnRzLnVzZUZ1bmMgPSBleHBvcnRzLnNldEV2YWx1YXRlZCA9IGV4cG9ydHMuZXZhbHVhdGVkUHJvcHNUb05hbWUgPSBleHBvcnRzLm1lcmdlRXZhbHVhdGVkID0gZXhwb3J0cy5lYWNoSXRlbSA9IGV4cG9ydHMudW5lc2NhcGVKc29uUG9pbnRlciA9IGV4cG9ydHMuZXNjYXBlSnNvblBvaW50ZXIgPSBleHBvcnRzLmVzY2FwZUZyYWdtZW50ID0gZXhwb3J0cy51bmVzY2FwZUZyYWdtZW50ID0gZXhwb3J0cy5zY2hlbWFSZWZPclZhbCA9IGV4cG9ydHMuc2NoZW1hSGFzUnVsZXNCdXRSZWYgPSBleHBvcnRzLnNjaGVtYUhhc1J1bGVzID0gZXhwb3J0cy5jaGVja1Vua25vd25SdWxlcyA9IGV4cG9ydHMuYWx3YXlzVmFsaWRTY2hlbWEgPSBleHBvcnRzLnRvSGFzaCA9IHZvaWQgMDtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuL2NvZGVnZW5cIik7XG5jb25zdCBjb2RlXzEgPSByZXF1aXJlKFwiLi9jb2RlZ2VuL2NvZGVcIik7XG4vLyBUT0RPIHJlZmFjdG9yIHRvIHVzZSBTZXRcbmZ1bmN0aW9uIHRvSGFzaChhcnIpIHtcbiAgICBjb25zdCBoYXNoID0ge307XG4gICAgZm9yIChjb25zdCBpdGVtIG9mIGFycilcbiAgICAgICAgaGFzaFtpdGVtXSA9IHRydWU7XG4gICAgcmV0dXJuIGhhc2g7XG59XG5leHBvcnRzLnRvSGFzaCA9IHRvSGFzaDtcbmZ1bmN0aW9uIGFsd2F5c1ZhbGlkU2NoZW1hKGl0LCBzY2hlbWEpIHtcbiAgICBpZiAodHlwZW9mIHNjaGVtYSA9PSBcImJvb2xlYW5cIilcbiAgICAgICAgcmV0dXJuIHNjaGVtYTtcbiAgICBpZiAoT2JqZWN0LmtleXMoc2NoZW1hKS5sZW5ndGggPT09IDApXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIGNoZWNrVW5rbm93blJ1bGVzKGl0LCBzY2hlbWEpO1xuICAgIHJldHVybiAhc2NoZW1hSGFzUnVsZXMoc2NoZW1hLCBpdC5zZWxmLlJVTEVTLmFsbCk7XG59XG5leHBvcnRzLmFsd2F5c1ZhbGlkU2NoZW1hID0gYWx3YXlzVmFsaWRTY2hlbWE7XG5mdW5jdGlvbiBjaGVja1Vua25vd25SdWxlcyhpdCwgc2NoZW1hID0gaXQuc2NoZW1hKSB7XG4gICAgY29uc3QgeyBvcHRzLCBzZWxmIH0gPSBpdDtcbiAgICBpZiAoIW9wdHMuc3RyaWN0U2NoZW1hKVxuICAgICAgICByZXR1cm47XG4gICAgaWYgKHR5cGVvZiBzY2hlbWEgPT09IFwiYm9vbGVhblwiKVxuICAgICAgICByZXR1cm47XG4gICAgY29uc3QgcnVsZXMgPSBzZWxmLlJVTEVTLmtleXdvcmRzO1xuICAgIGZvciAoY29uc3Qga2V5IGluIHNjaGVtYSkge1xuICAgICAgICBpZiAoIXJ1bGVzW2tleV0pXG4gICAgICAgICAgICBjaGVja1N0cmljdE1vZGUoaXQsIGB1bmtub3duIGtleXdvcmQ6IFwiJHtrZXl9XCJgKTtcbiAgICB9XG59XG5leHBvcnRzLmNoZWNrVW5rbm93blJ1bGVzID0gY2hlY2tVbmtub3duUnVsZXM7XG5mdW5jdGlvbiBzY2hlbWFIYXNSdWxlcyhzY2hlbWEsIHJ1bGVzKSB7XG4gICAgaWYgKHR5cGVvZiBzY2hlbWEgPT0gXCJib29sZWFuXCIpXG4gICAgICAgIHJldHVybiAhc2NoZW1hO1xuICAgIGZvciAoY29uc3Qga2V5IGluIHNjaGVtYSlcbiAgICAgICAgaWYgKHJ1bGVzW2tleV0pXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICByZXR1cm4gZmFsc2U7XG59XG5leHBvcnRzLnNjaGVtYUhhc1J1bGVzID0gc2NoZW1hSGFzUnVsZXM7XG5mdW5jdGlvbiBzY2hlbWFIYXNSdWxlc0J1dFJlZihzY2hlbWEsIFJVTEVTKSB7XG4gICAgaWYgKHR5cGVvZiBzY2hlbWEgPT0gXCJib29sZWFuXCIpXG4gICAgICAgIHJldHVybiAhc2NoZW1hO1xuICAgIGZvciAoY29uc3Qga2V5IGluIHNjaGVtYSlcbiAgICAgICAgaWYgKGtleSAhPT0gXCIkcmVmXCIgJiYgUlVMRVMuYWxsW2tleV0pXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICByZXR1cm4gZmFsc2U7XG59XG5leHBvcnRzLnNjaGVtYUhhc1J1bGVzQnV0UmVmID0gc2NoZW1hSGFzUnVsZXNCdXRSZWY7XG5mdW5jdGlvbiBzY2hlbWFSZWZPclZhbCh7IHRvcFNjaGVtYVJlZiwgc2NoZW1hUGF0aCB9LCBzY2hlbWEsIGtleXdvcmQsICRkYXRhKSB7XG4gICAgaWYgKCEkZGF0YSkge1xuICAgICAgICBpZiAodHlwZW9mIHNjaGVtYSA9PSBcIm51bWJlclwiIHx8IHR5cGVvZiBzY2hlbWEgPT0gXCJib29sZWFuXCIpXG4gICAgICAgICAgICByZXR1cm4gc2NoZW1hO1xuICAgICAgICBpZiAodHlwZW9mIHNjaGVtYSA9PSBcInN0cmluZ1wiKVxuICAgICAgICAgICAgcmV0dXJuICgwLCBjb2RlZ2VuXzEuXykgYCR7c2NoZW1hfWA7XG4gICAgfVxuICAgIHJldHVybiAoMCwgY29kZWdlbl8xLl8pIGAke3RvcFNjaGVtYVJlZn0ke3NjaGVtYVBhdGh9JHsoMCwgY29kZWdlbl8xLmdldFByb3BlcnR5KShrZXl3b3JkKX1gO1xufVxuZXhwb3J0cy5zY2hlbWFSZWZPclZhbCA9IHNjaGVtYVJlZk9yVmFsO1xuZnVuY3Rpb24gdW5lc2NhcGVGcmFnbWVudChzdHIpIHtcbiAgICByZXR1cm4gdW5lc2NhcGVKc29uUG9pbnRlcihkZWNvZGVVUklDb21wb25lbnQoc3RyKSk7XG59XG5leHBvcnRzLnVuZXNjYXBlRnJhZ21lbnQgPSB1bmVzY2FwZUZyYWdtZW50O1xuZnVuY3Rpb24gZXNjYXBlRnJhZ21lbnQoc3RyKSB7XG4gICAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChlc2NhcGVKc29uUG9pbnRlcihzdHIpKTtcbn1cbmV4cG9ydHMuZXNjYXBlRnJhZ21lbnQgPSBlc2NhcGVGcmFnbWVudDtcbmZ1bmN0aW9uIGVzY2FwZUpzb25Qb2ludGVyKHN0cikge1xuICAgIGlmICh0eXBlb2Ygc3RyID09IFwibnVtYmVyXCIpXG4gICAgICAgIHJldHVybiBgJHtzdHJ9YDtcbiAgICByZXR1cm4gc3RyLnJlcGxhY2UoL34vZywgXCJ+MFwiKS5yZXBsYWNlKC9cXC8vZywgXCJ+MVwiKTtcbn1cbmV4cG9ydHMuZXNjYXBlSnNvblBvaW50ZXIgPSBlc2NhcGVKc29uUG9pbnRlcjtcbmZ1bmN0aW9uIHVuZXNjYXBlSnNvblBvaW50ZXIoc3RyKSB7XG4gICAgcmV0dXJuIHN0ci5yZXBsYWNlKC9+MS9nLCBcIi9cIikucmVwbGFjZSgvfjAvZywgXCJ+XCIpO1xufVxuZXhwb3J0cy51bmVzY2FwZUpzb25Qb2ludGVyID0gdW5lc2NhcGVKc29uUG9pbnRlcjtcbmZ1bmN0aW9uIGVhY2hJdGVtKHhzLCBmKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoeHMpKSB7XG4gICAgICAgIGZvciAoY29uc3QgeCBvZiB4cylcbiAgICAgICAgICAgIGYoeCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBmKHhzKTtcbiAgICB9XG59XG5leHBvcnRzLmVhY2hJdGVtID0gZWFjaEl0ZW07XG5mdW5jdGlvbiBtYWtlTWVyZ2VFdmFsdWF0ZWQoeyBtZXJnZU5hbWVzLCBtZXJnZVRvTmFtZSwgbWVyZ2VWYWx1ZXMsIHJlc3VsdFRvTmFtZSwgfSkge1xuICAgIHJldHVybiAoZ2VuLCBmcm9tLCB0bywgdG9OYW1lKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlcyA9IHRvID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8gZnJvbVxuICAgICAgICAgICAgOiB0byBpbnN0YW5jZW9mIGNvZGVnZW5fMS5OYW1lXG4gICAgICAgICAgICAgICAgPyAoZnJvbSBpbnN0YW5jZW9mIGNvZGVnZW5fMS5OYW1lID8gbWVyZ2VOYW1lcyhnZW4sIGZyb20sIHRvKSA6IG1lcmdlVG9OYW1lKGdlbiwgZnJvbSwgdG8pLCB0bylcbiAgICAgICAgICAgICAgICA6IGZyb20gaW5zdGFuY2VvZiBjb2RlZ2VuXzEuTmFtZVxuICAgICAgICAgICAgICAgICAgICA/IChtZXJnZVRvTmFtZShnZW4sIHRvLCBmcm9tKSwgZnJvbSlcbiAgICAgICAgICAgICAgICAgICAgOiBtZXJnZVZhbHVlcyhmcm9tLCB0byk7XG4gICAgICAgIHJldHVybiB0b05hbWUgPT09IGNvZGVnZW5fMS5OYW1lICYmICEocmVzIGluc3RhbmNlb2YgY29kZWdlbl8xLk5hbWUpID8gcmVzdWx0VG9OYW1lKGdlbiwgcmVzKSA6IHJlcztcbiAgICB9O1xufVxuZXhwb3J0cy5tZXJnZUV2YWx1YXRlZCA9IHtcbiAgICBwcm9wczogbWFrZU1lcmdlRXZhbHVhdGVkKHtcbiAgICAgICAgbWVyZ2VOYW1lczogKGdlbiwgZnJvbSwgdG8pID0+IGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGAke3RvfSAhPT0gdHJ1ZSAmJiAke2Zyb219ICE9PSB1bmRlZmluZWRgLCAoKSA9PiB7XG4gICAgICAgICAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5fKSBgJHtmcm9tfSA9PT0gdHJ1ZWAsICgpID0+IGdlbi5hc3NpZ24odG8sIHRydWUpLCAoKSA9PiBnZW4uYXNzaWduKHRvLCAoMCwgY29kZWdlbl8xLl8pIGAke3RvfSB8fCB7fWApLmNvZGUoKDAsIGNvZGVnZW5fMS5fKSBgT2JqZWN0LmFzc2lnbigke3RvfSwgJHtmcm9tfSlgKSk7XG4gICAgICAgIH0pLFxuICAgICAgICBtZXJnZVRvTmFtZTogKGdlbiwgZnJvbSwgdG8pID0+IGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGAke3RvfSAhPT0gdHJ1ZWAsICgpID0+IHtcbiAgICAgICAgICAgIGlmIChmcm9tID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgZ2VuLmFzc2lnbih0bywgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBnZW4uYXNzaWduKHRvLCAoMCwgY29kZWdlbl8xLl8pIGAke3RvfSB8fCB7fWApO1xuICAgICAgICAgICAgICAgIHNldEV2YWx1YXRlZChnZW4sIHRvLCBmcm9tKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICAgIG1lcmdlVmFsdWVzOiAoZnJvbSwgdG8pID0+IChmcm9tID09PSB0cnVlID8gdHJ1ZSA6IHsgLi4uZnJvbSwgLi4udG8gfSksXG4gICAgICAgIHJlc3VsdFRvTmFtZTogZXZhbHVhdGVkUHJvcHNUb05hbWUsXG4gICAgfSksXG4gICAgaXRlbXM6IG1ha2VNZXJnZUV2YWx1YXRlZCh7XG4gICAgICAgIG1lcmdlTmFtZXM6IChnZW4sIGZyb20sIHRvKSA9PiBnZW4uaWYoKDAsIGNvZGVnZW5fMS5fKSBgJHt0b30gIT09IHRydWUgJiYgJHtmcm9tfSAhPT0gdW5kZWZpbmVkYCwgKCkgPT4gZ2VuLmFzc2lnbih0bywgKDAsIGNvZGVnZW5fMS5fKSBgJHtmcm9tfSA9PT0gdHJ1ZSA/IHRydWUgOiAke3RvfSA+ICR7ZnJvbX0gPyAke3RvfSA6ICR7ZnJvbX1gKSksXG4gICAgICAgIG1lcmdlVG9OYW1lOiAoZ2VuLCBmcm9tLCB0bykgPT4gZ2VuLmlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7dG99ICE9PSB0cnVlYCwgKCkgPT4gZ2VuLmFzc2lnbih0bywgZnJvbSA9PT0gdHJ1ZSA/IHRydWUgOiAoMCwgY29kZWdlbl8xLl8pIGAke3RvfSA+ICR7ZnJvbX0gPyAke3RvfSA6ICR7ZnJvbX1gKSksXG4gICAgICAgIG1lcmdlVmFsdWVzOiAoZnJvbSwgdG8pID0+IChmcm9tID09PSB0cnVlID8gdHJ1ZSA6IE1hdGgubWF4KGZyb20sIHRvKSksXG4gICAgICAgIHJlc3VsdFRvTmFtZTogKGdlbiwgaXRlbXMpID0+IGdlbi52YXIoXCJpdGVtc1wiLCBpdGVtcyksXG4gICAgfSksXG59O1xuZnVuY3Rpb24gZXZhbHVhdGVkUHJvcHNUb05hbWUoZ2VuLCBwcykge1xuICAgIGlmIChwcyA9PT0gdHJ1ZSlcbiAgICAgICAgcmV0dXJuIGdlbi52YXIoXCJwcm9wc1wiLCB0cnVlKTtcbiAgICBjb25zdCBwcm9wcyA9IGdlbi52YXIoXCJwcm9wc1wiLCAoMCwgY29kZWdlbl8xLl8pIGB7fWApO1xuICAgIGlmIChwcyAhPT0gdW5kZWZpbmVkKVxuICAgICAgICBzZXRFdmFsdWF0ZWQoZ2VuLCBwcm9wcywgcHMpO1xuICAgIHJldHVybiBwcm9wcztcbn1cbmV4cG9ydHMuZXZhbHVhdGVkUHJvcHNUb05hbWUgPSBldmFsdWF0ZWRQcm9wc1RvTmFtZTtcbmZ1bmN0aW9uIHNldEV2YWx1YXRlZChnZW4sIHByb3BzLCBwcykge1xuICAgIE9iamVjdC5rZXlzKHBzKS5mb3JFYWNoKChwKSA9PiBnZW4uYXNzaWduKCgwLCBjb2RlZ2VuXzEuXykgYCR7cHJvcHN9JHsoMCwgY29kZWdlbl8xLmdldFByb3BlcnR5KShwKX1gLCB0cnVlKSk7XG59XG5leHBvcnRzLnNldEV2YWx1YXRlZCA9IHNldEV2YWx1YXRlZDtcbmNvbnN0IHNuaXBwZXRzID0ge307XG5mdW5jdGlvbiB1c2VGdW5jKGdlbiwgZikge1xuICAgIHJldHVybiBnZW4uc2NvcGVWYWx1ZShcImZ1bmNcIiwge1xuICAgICAgICByZWY6IGYsXG4gICAgICAgIGNvZGU6IHNuaXBwZXRzW2YuY29kZV0gfHwgKHNuaXBwZXRzW2YuY29kZV0gPSBuZXcgY29kZV8xLl9Db2RlKGYuY29kZSkpLFxuICAgIH0pO1xufVxuZXhwb3J0cy51c2VGdW5jID0gdXNlRnVuYztcbnZhciBUeXBlO1xuKGZ1bmN0aW9uIChUeXBlKSB7XG4gICAgVHlwZVtUeXBlW1wiTnVtXCJdID0gMF0gPSBcIk51bVwiO1xuICAgIFR5cGVbVHlwZVtcIlN0clwiXSA9IDFdID0gXCJTdHJcIjtcbn0pKFR5cGUgfHwgKGV4cG9ydHMuVHlwZSA9IFR5cGUgPSB7fSkpO1xuZnVuY3Rpb24gZ2V0RXJyb3JQYXRoKGRhdGFQcm9wLCBkYXRhUHJvcFR5cGUsIGpzUHJvcGVydHlTeW50YXgpIHtcbiAgICAvLyBsZXQgcGF0aFxuICAgIGlmIChkYXRhUHJvcCBpbnN0YW5jZW9mIGNvZGVnZW5fMS5OYW1lKSB7XG4gICAgICAgIGNvbnN0IGlzTnVtYmVyID0gZGF0YVByb3BUeXBlID09PSBUeXBlLk51bTtcbiAgICAgICAgcmV0dXJuIGpzUHJvcGVydHlTeW50YXhcbiAgICAgICAgICAgID8gaXNOdW1iZXJcbiAgICAgICAgICAgICAgICA/ICgwLCBjb2RlZ2VuXzEuXykgYFwiW1wiICsgJHtkYXRhUHJvcH0gKyBcIl1cImBcbiAgICAgICAgICAgICAgICA6ICgwLCBjb2RlZ2VuXzEuXykgYFwiWydcIiArICR7ZGF0YVByb3B9ICsgXCInXVwiYFxuICAgICAgICAgICAgOiBpc051bWJlclxuICAgICAgICAgICAgICAgID8gKDAsIGNvZGVnZW5fMS5fKSBgXCIvXCIgKyAke2RhdGFQcm9wfWBcbiAgICAgICAgICAgICAgICA6ICgwLCBjb2RlZ2VuXzEuXykgYFwiL1wiICsgJHtkYXRhUHJvcH0ucmVwbGFjZSgvfi9nLCBcIn4wXCIpLnJlcGxhY2UoL1xcXFwvL2csIFwifjFcIilgOyAvLyBUT0RPIG1heWJlIHVzZSBnbG9iYWwgZXNjYXBlUG9pbnRlclxuICAgIH1cbiAgICByZXR1cm4ganNQcm9wZXJ0eVN5bnRheCA/ICgwLCBjb2RlZ2VuXzEuZ2V0UHJvcGVydHkpKGRhdGFQcm9wKS50b1N0cmluZygpIDogXCIvXCIgKyBlc2NhcGVKc29uUG9pbnRlcihkYXRhUHJvcCk7XG59XG5leHBvcnRzLmdldEVycm9yUGF0aCA9IGdldEVycm9yUGF0aDtcbmZ1bmN0aW9uIGNoZWNrU3RyaWN0TW9kZShpdCwgbXNnLCBtb2RlID0gaXQub3B0cy5zdHJpY3RTY2hlbWEpIHtcbiAgICBpZiAoIW1vZGUpXG4gICAgICAgIHJldHVybjtcbiAgICBtc2cgPSBgc3RyaWN0IG1vZGU6ICR7bXNnfWA7XG4gICAgaWYgKG1vZGUgPT09IHRydWUpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihtc2cpO1xuICAgIGl0LnNlbGYubG9nZ2VyLndhcm4obXNnKTtcbn1cbmV4cG9ydHMuY2hlY2tTdHJpY3RNb2RlID0gY2hlY2tTdHJpY3RNb2RlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXRpbC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4vY29kZWdlblwiKTtcbmNvbnN0IG5hbWVzID0ge1xuICAgIC8vIHZhbGlkYXRpb24gZnVuY3Rpb24gYXJndW1lbnRzXG4gICAgZGF0YTogbmV3IGNvZGVnZW5fMS5OYW1lKFwiZGF0YVwiKSwgLy8gZGF0YSBwYXNzZWQgdG8gdmFsaWRhdGlvbiBmdW5jdGlvblxuICAgIC8vIGFyZ3MgcGFzc2VkIGZyb20gcmVmZXJlbmNpbmcgc2NoZW1hXG4gICAgdmFsQ3h0OiBuZXcgY29kZWdlbl8xLk5hbWUoXCJ2YWxDeHRcIiksIC8vIHZhbGlkYXRpb24vZGF0YSBjb250ZXh0IC0gc2hvdWxkIG5vdCBiZSB1c2VkIGRpcmVjdGx5LCBpdCBpcyBkZXN0cnVjdHVyZWQgdG8gdGhlIG5hbWVzIGJlbG93XG4gICAgaW5zdGFuY2VQYXRoOiBuZXcgY29kZWdlbl8xLk5hbWUoXCJpbnN0YW5jZVBhdGhcIiksXG4gICAgcGFyZW50RGF0YTogbmV3IGNvZGVnZW5fMS5OYW1lKFwicGFyZW50RGF0YVwiKSxcbiAgICBwYXJlbnREYXRhUHJvcGVydHk6IG5ldyBjb2RlZ2VuXzEuTmFtZShcInBhcmVudERhdGFQcm9wZXJ0eVwiKSxcbiAgICByb290RGF0YTogbmV3IGNvZGVnZW5fMS5OYW1lKFwicm9vdERhdGFcIiksIC8vIHJvb3QgZGF0YSAtIHNhbWUgYXMgdGhlIGRhdGEgcGFzc2VkIHRvIHRoZSBmaXJzdC90b3AgdmFsaWRhdGlvbiBmdW5jdGlvblxuICAgIGR5bmFtaWNBbmNob3JzOiBuZXcgY29kZWdlbl8xLk5hbWUoXCJkeW5hbWljQW5jaG9yc1wiKSwgLy8gdXNlZCB0byBzdXBwb3J0IHJlY3Vyc2l2ZVJlZiBhbmQgZHluYW1pY1JlZlxuICAgIC8vIGZ1bmN0aW9uIHNjb3BlZCB2YXJpYWJsZXNcbiAgICB2RXJyb3JzOiBuZXcgY29kZWdlbl8xLk5hbWUoXCJ2RXJyb3JzXCIpLCAvLyBudWxsIG9yIGFycmF5IG9mIHZhbGlkYXRpb24gZXJyb3JzXG4gICAgZXJyb3JzOiBuZXcgY29kZWdlbl8xLk5hbWUoXCJlcnJvcnNcIiksIC8vIGNvdW50ZXIgb2YgdmFsaWRhdGlvbiBlcnJvcnNcbiAgICB0aGlzOiBuZXcgY29kZWdlbl8xLk5hbWUoXCJ0aGlzXCIpLFxuICAgIC8vIFwiZ2xvYmFsc1wiXG4gICAgc2VsZjogbmV3IGNvZGVnZW5fMS5OYW1lKFwic2VsZlwiKSxcbiAgICBzY29wZTogbmV3IGNvZGVnZW5fMS5OYW1lKFwic2NvcGVcIiksXG4gICAgLy8gSlREIHNlcmlhbGl6ZS9wYXJzZSBuYW1lIGZvciBKU09OIHN0cmluZyBhbmQgcG9zaXRpb25cbiAgICBqc29uOiBuZXcgY29kZWdlbl8xLk5hbWUoXCJqc29uXCIpLFxuICAgIGpzb25Qb3M6IG5ldyBjb2RlZ2VuXzEuTmFtZShcImpzb25Qb3NcIiksXG4gICAganNvbkxlbjogbmV3IGNvZGVnZW5fMS5OYW1lKFwianNvbkxlblwiKSxcbiAgICBqc29uUGFydDogbmV3IGNvZGVnZW5fMS5OYW1lKFwianNvblBhcnRcIiksXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gbmFtZXM7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1uYW1lcy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5leHRlbmRFcnJvcnMgPSBleHBvcnRzLnJlc2V0RXJyb3JzQ291bnQgPSBleHBvcnRzLnJlcG9ydEV4dHJhRXJyb3IgPSBleHBvcnRzLnJlcG9ydEVycm9yID0gZXhwb3J0cy5rZXl3b3JkJERhdGFFcnJvciA9IGV4cG9ydHMua2V5d29yZEVycm9yID0gdm9pZCAwO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4vY29kZWdlblwiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuL3V0aWxcIik7XG5jb25zdCBuYW1lc18xID0gcmVxdWlyZShcIi4vbmFtZXNcIik7XG5leHBvcnRzLmtleXdvcmRFcnJvciA9IHtcbiAgICBtZXNzYWdlOiAoeyBrZXl3b3JkIH0pID0+ICgwLCBjb2RlZ2VuXzEuc3RyKSBgbXVzdCBwYXNzIFwiJHtrZXl3b3JkfVwiIGtleXdvcmQgdmFsaWRhdGlvbmAsXG59O1xuZXhwb3J0cy5rZXl3b3JkJERhdGFFcnJvciA9IHtcbiAgICBtZXNzYWdlOiAoeyBrZXl3b3JkLCBzY2hlbWFUeXBlIH0pID0+IHNjaGVtYVR5cGVcbiAgICAgICAgPyAoMCwgY29kZWdlbl8xLnN0cikgYFwiJHtrZXl3b3JkfVwiIGtleXdvcmQgbXVzdCBiZSAke3NjaGVtYVR5cGV9ICgkZGF0YSlgXG4gICAgICAgIDogKDAsIGNvZGVnZW5fMS5zdHIpIGBcIiR7a2V5d29yZH1cIiBrZXl3b3JkIGlzIGludmFsaWQgKCRkYXRhKWAsXG59O1xuZnVuY3Rpb24gcmVwb3J0RXJyb3IoY3h0LCBlcnJvciA9IGV4cG9ydHMua2V5d29yZEVycm9yLCBlcnJvclBhdGhzLCBvdmVycmlkZUFsbEVycm9ycykge1xuICAgIGNvbnN0IHsgaXQgfSA9IGN4dDtcbiAgICBjb25zdCB7IGdlbiwgY29tcG9zaXRlUnVsZSwgYWxsRXJyb3JzIH0gPSBpdDtcbiAgICBjb25zdCBlcnJPYmogPSBlcnJvck9iamVjdENvZGUoY3h0LCBlcnJvciwgZXJyb3JQYXRocyk7XG4gICAgaWYgKG92ZXJyaWRlQWxsRXJyb3JzICE9PSBudWxsICYmIG92ZXJyaWRlQWxsRXJyb3JzICE9PSB2b2lkIDAgPyBvdmVycmlkZUFsbEVycm9ycyA6IChjb21wb3NpdGVSdWxlIHx8IGFsbEVycm9ycykpIHtcbiAgICAgICAgYWRkRXJyb3IoZ2VuLCBlcnJPYmopO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuRXJyb3JzKGl0LCAoMCwgY29kZWdlbl8xLl8pIGBbJHtlcnJPYmp9XWApO1xuICAgIH1cbn1cbmV4cG9ydHMucmVwb3J0RXJyb3IgPSByZXBvcnRFcnJvcjtcbmZ1bmN0aW9uIHJlcG9ydEV4dHJhRXJyb3IoY3h0LCBlcnJvciA9IGV4cG9ydHMua2V5d29yZEVycm9yLCBlcnJvclBhdGhzKSB7XG4gICAgY29uc3QgeyBpdCB9ID0gY3h0O1xuICAgIGNvbnN0IHsgZ2VuLCBjb21wb3NpdGVSdWxlLCBhbGxFcnJvcnMgfSA9IGl0O1xuICAgIGNvbnN0IGVyck9iaiA9IGVycm9yT2JqZWN0Q29kZShjeHQsIGVycm9yLCBlcnJvclBhdGhzKTtcbiAgICBhZGRFcnJvcihnZW4sIGVyck9iaik7XG4gICAgaWYgKCEoY29tcG9zaXRlUnVsZSB8fCBhbGxFcnJvcnMpKSB7XG4gICAgICAgIHJldHVybkVycm9ycyhpdCwgbmFtZXNfMS5kZWZhdWx0LnZFcnJvcnMpO1xuICAgIH1cbn1cbmV4cG9ydHMucmVwb3J0RXh0cmFFcnJvciA9IHJlcG9ydEV4dHJhRXJyb3I7XG5mdW5jdGlvbiByZXNldEVycm9yc0NvdW50KGdlbiwgZXJyc0NvdW50KSB7XG4gICAgZ2VuLmFzc2lnbihuYW1lc18xLmRlZmF1bHQuZXJyb3JzLCBlcnJzQ291bnQpO1xuICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGAke25hbWVzXzEuZGVmYXVsdC52RXJyb3JzfSAhPT0gbnVsbGAsICgpID0+IGdlbi5pZihlcnJzQ291bnQsICgpID0+IGdlbi5hc3NpZ24oKDAsIGNvZGVnZW5fMS5fKSBgJHtuYW1lc18xLmRlZmF1bHQudkVycm9yc30ubGVuZ3RoYCwgZXJyc0NvdW50KSwgKCkgPT4gZ2VuLmFzc2lnbihuYW1lc18xLmRlZmF1bHQudkVycm9ycywgbnVsbCkpKTtcbn1cbmV4cG9ydHMucmVzZXRFcnJvcnNDb3VudCA9IHJlc2V0RXJyb3JzQ291bnQ7XG5mdW5jdGlvbiBleHRlbmRFcnJvcnMoeyBnZW4sIGtleXdvcmQsIHNjaGVtYVZhbHVlLCBkYXRhLCBlcnJzQ291bnQsIGl0LCB9KSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKGVycnNDb3VudCA9PT0gdW5kZWZpbmVkKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJhanYgaW1wbGVtZW50YXRpb24gZXJyb3JcIik7XG4gICAgY29uc3QgZXJyID0gZ2VuLm5hbWUoXCJlcnJcIik7XG4gICAgZ2VuLmZvclJhbmdlKFwiaVwiLCBlcnJzQ291bnQsIG5hbWVzXzEuZGVmYXVsdC5lcnJvcnMsIChpKSA9PiB7XG4gICAgICAgIGdlbi5jb25zdChlcnIsICgwLCBjb2RlZ2VuXzEuXykgYCR7bmFtZXNfMS5kZWZhdWx0LnZFcnJvcnN9WyR7aX1dYCk7XG4gICAgICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGAke2Vycn0uaW5zdGFuY2VQYXRoID09PSB1bmRlZmluZWRgLCAoKSA9PiBnZW4uYXNzaWduKCgwLCBjb2RlZ2VuXzEuXykgYCR7ZXJyfS5pbnN0YW5jZVBhdGhgLCAoMCwgY29kZWdlbl8xLnN0ckNvbmNhdCkobmFtZXNfMS5kZWZhdWx0Lmluc3RhbmNlUGF0aCwgaXQuZXJyb3JQYXRoKSkpO1xuICAgICAgICBnZW4uYXNzaWduKCgwLCBjb2RlZ2VuXzEuXykgYCR7ZXJyfS5zY2hlbWFQYXRoYCwgKDAsIGNvZGVnZW5fMS5zdHIpIGAke2l0LmVyclNjaGVtYVBhdGh9LyR7a2V5d29yZH1gKTtcbiAgICAgICAgaWYgKGl0Lm9wdHMudmVyYm9zZSkge1xuICAgICAgICAgICAgZ2VuLmFzc2lnbigoMCwgY29kZWdlbl8xLl8pIGAke2Vycn0uc2NoZW1hYCwgc2NoZW1hVmFsdWUpO1xuICAgICAgICAgICAgZ2VuLmFzc2lnbigoMCwgY29kZWdlbl8xLl8pIGAke2Vycn0uZGF0YWAsIGRhdGEpO1xuICAgICAgICB9XG4gICAgfSk7XG59XG5leHBvcnRzLmV4dGVuZEVycm9ycyA9IGV4dGVuZEVycm9ycztcbmZ1bmN0aW9uIGFkZEVycm9yKGdlbiwgZXJyT2JqKSB7XG4gICAgY29uc3QgZXJyID0gZ2VuLmNvbnN0KFwiZXJyXCIsIGVyck9iaik7XG4gICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7bmFtZXNfMS5kZWZhdWx0LnZFcnJvcnN9ID09PSBudWxsYCwgKCkgPT4gZ2VuLmFzc2lnbihuYW1lc18xLmRlZmF1bHQudkVycm9ycywgKDAsIGNvZGVnZW5fMS5fKSBgWyR7ZXJyfV1gKSwgKDAsIGNvZGVnZW5fMS5fKSBgJHtuYW1lc18xLmRlZmF1bHQudkVycm9yc30ucHVzaCgke2Vycn0pYCk7XG4gICAgZ2VuLmNvZGUoKDAsIGNvZGVnZW5fMS5fKSBgJHtuYW1lc18xLmRlZmF1bHQuZXJyb3JzfSsrYCk7XG59XG5mdW5jdGlvbiByZXR1cm5FcnJvcnMoaXQsIGVycnMpIHtcbiAgICBjb25zdCB7IGdlbiwgdmFsaWRhdGVOYW1lLCBzY2hlbWFFbnYgfSA9IGl0O1xuICAgIGlmIChzY2hlbWFFbnYuJGFzeW5jKSB7XG4gICAgICAgIGdlbi50aHJvdygoMCwgY29kZWdlbl8xLl8pIGBuZXcgJHtpdC5WYWxpZGF0aW9uRXJyb3J9KCR7ZXJyc30pYCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBnZW4uYXNzaWduKCgwLCBjb2RlZ2VuXzEuXykgYCR7dmFsaWRhdGVOYW1lfS5lcnJvcnNgLCBlcnJzKTtcbiAgICAgICAgZ2VuLnJldHVybihmYWxzZSk7XG4gICAgfVxufVxuY29uc3QgRSA9IHtcbiAgICBrZXl3b3JkOiBuZXcgY29kZWdlbl8xLk5hbWUoXCJrZXl3b3JkXCIpLFxuICAgIHNjaGVtYVBhdGg6IG5ldyBjb2RlZ2VuXzEuTmFtZShcInNjaGVtYVBhdGhcIiksIC8vIGFsc28gdXNlZCBpbiBKVEQgZXJyb3JzXG4gICAgcGFyYW1zOiBuZXcgY29kZWdlbl8xLk5hbWUoXCJwYXJhbXNcIiksXG4gICAgcHJvcGVydHlOYW1lOiBuZXcgY29kZWdlbl8xLk5hbWUoXCJwcm9wZXJ0eU5hbWVcIiksXG4gICAgbWVzc2FnZTogbmV3IGNvZGVnZW5fMS5OYW1lKFwibWVzc2FnZVwiKSxcbiAgICBzY2hlbWE6IG5ldyBjb2RlZ2VuXzEuTmFtZShcInNjaGVtYVwiKSxcbiAgICBwYXJlbnRTY2hlbWE6IG5ldyBjb2RlZ2VuXzEuTmFtZShcInBhcmVudFNjaGVtYVwiKSxcbn07XG5mdW5jdGlvbiBlcnJvck9iamVjdENvZGUoY3h0LCBlcnJvciwgZXJyb3JQYXRocykge1xuICAgIGNvbnN0IHsgY3JlYXRlRXJyb3JzIH0gPSBjeHQuaXQ7XG4gICAgaWYgKGNyZWF0ZUVycm9ycyA9PT0gZmFsc2UpXG4gICAgICAgIHJldHVybiAoMCwgY29kZWdlbl8xLl8pIGB7fWA7XG4gICAgcmV0dXJuIGVycm9yT2JqZWN0KGN4dCwgZXJyb3IsIGVycm9yUGF0aHMpO1xufVxuZnVuY3Rpb24gZXJyb3JPYmplY3QoY3h0LCBlcnJvciwgZXJyb3JQYXRocyA9IHt9KSB7XG4gICAgY29uc3QgeyBnZW4sIGl0IH0gPSBjeHQ7XG4gICAgY29uc3Qga2V5VmFsdWVzID0gW1xuICAgICAgICBlcnJvckluc3RhbmNlUGF0aChpdCwgZXJyb3JQYXRocyksXG4gICAgICAgIGVycm9yU2NoZW1hUGF0aChjeHQsIGVycm9yUGF0aHMpLFxuICAgIF07XG4gICAgZXh0cmFFcnJvclByb3BzKGN4dCwgZXJyb3IsIGtleVZhbHVlcyk7XG4gICAgcmV0dXJuIGdlbi5vYmplY3QoLi4ua2V5VmFsdWVzKTtcbn1cbmZ1bmN0aW9uIGVycm9ySW5zdGFuY2VQYXRoKHsgZXJyb3JQYXRoIH0sIHsgaW5zdGFuY2VQYXRoIH0pIHtcbiAgICBjb25zdCBpbnN0UGF0aCA9IGluc3RhbmNlUGF0aFxuICAgICAgICA/ICgwLCBjb2RlZ2VuXzEuc3RyKSBgJHtlcnJvclBhdGh9JHsoMCwgdXRpbF8xLmdldEVycm9yUGF0aCkoaW5zdGFuY2VQYXRoLCB1dGlsXzEuVHlwZS5TdHIpfWBcbiAgICAgICAgOiBlcnJvclBhdGg7XG4gICAgcmV0dXJuIFtuYW1lc18xLmRlZmF1bHQuaW5zdGFuY2VQYXRoLCAoMCwgY29kZWdlbl8xLnN0ckNvbmNhdCkobmFtZXNfMS5kZWZhdWx0Lmluc3RhbmNlUGF0aCwgaW5zdFBhdGgpXTtcbn1cbmZ1bmN0aW9uIGVycm9yU2NoZW1hUGF0aCh7IGtleXdvcmQsIGl0OiB7IGVyclNjaGVtYVBhdGggfSB9LCB7IHNjaGVtYVBhdGgsIHBhcmVudFNjaGVtYSB9KSB7XG4gICAgbGV0IHNjaFBhdGggPSBwYXJlbnRTY2hlbWEgPyBlcnJTY2hlbWFQYXRoIDogKDAsIGNvZGVnZW5fMS5zdHIpIGAke2VyclNjaGVtYVBhdGh9LyR7a2V5d29yZH1gO1xuICAgIGlmIChzY2hlbWFQYXRoKSB7XG4gICAgICAgIHNjaFBhdGggPSAoMCwgY29kZWdlbl8xLnN0cikgYCR7c2NoUGF0aH0keygwLCB1dGlsXzEuZ2V0RXJyb3JQYXRoKShzY2hlbWFQYXRoLCB1dGlsXzEuVHlwZS5TdHIpfWA7XG4gICAgfVxuICAgIHJldHVybiBbRS5zY2hlbWFQYXRoLCBzY2hQYXRoXTtcbn1cbmZ1bmN0aW9uIGV4dHJhRXJyb3JQcm9wcyhjeHQsIHsgcGFyYW1zLCBtZXNzYWdlIH0sIGtleVZhbHVlcykge1xuICAgIGNvbnN0IHsga2V5d29yZCwgZGF0YSwgc2NoZW1hVmFsdWUsIGl0IH0gPSBjeHQ7XG4gICAgY29uc3QgeyBvcHRzLCBwcm9wZXJ0eU5hbWUsIHRvcFNjaGVtYVJlZiwgc2NoZW1hUGF0aCB9ID0gaXQ7XG4gICAga2V5VmFsdWVzLnB1c2goW0Uua2V5d29yZCwga2V5d29yZF0sIFtFLnBhcmFtcywgdHlwZW9mIHBhcmFtcyA9PSBcImZ1bmN0aW9uXCIgPyBwYXJhbXMoY3h0KSA6IHBhcmFtcyB8fCAoMCwgY29kZWdlbl8xLl8pIGB7fWBdKTtcbiAgICBpZiAob3B0cy5tZXNzYWdlcykge1xuICAgICAgICBrZXlWYWx1ZXMucHVzaChbRS5tZXNzYWdlLCB0eXBlb2YgbWVzc2FnZSA9PSBcImZ1bmN0aW9uXCIgPyBtZXNzYWdlKGN4dCkgOiBtZXNzYWdlXSk7XG4gICAgfVxuICAgIGlmIChvcHRzLnZlcmJvc2UpIHtcbiAgICAgICAga2V5VmFsdWVzLnB1c2goW0Uuc2NoZW1hLCBzY2hlbWFWYWx1ZV0sIFtFLnBhcmVudFNjaGVtYSwgKDAsIGNvZGVnZW5fMS5fKSBgJHt0b3BTY2hlbWFSZWZ9JHtzY2hlbWFQYXRofWBdLCBbbmFtZXNfMS5kZWZhdWx0LmRhdGEsIGRhdGFdKTtcbiAgICB9XG4gICAgaWYgKHByb3BlcnR5TmFtZSlcbiAgICAgICAga2V5VmFsdWVzLnB1c2goW0UucHJvcGVydHlOYW1lLCBwcm9wZXJ0eU5hbWVdKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWVycm9ycy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5ib29sT3JFbXB0eVNjaGVtYSA9IGV4cG9ydHMudG9wQm9vbE9yRW1wdHlTY2hlbWEgPSB2b2lkIDA7XG5jb25zdCBlcnJvcnNfMSA9IHJlcXVpcmUoXCIuLi9lcnJvcnNcIik7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi4vY29kZWdlblwiKTtcbmNvbnN0IG5hbWVzXzEgPSByZXF1aXJlKFwiLi4vbmFtZXNcIik7XG5jb25zdCBib29sRXJyb3IgPSB7XG4gICAgbWVzc2FnZTogXCJib29sZWFuIHNjaGVtYSBpcyBmYWxzZVwiLFxufTtcbmZ1bmN0aW9uIHRvcEJvb2xPckVtcHR5U2NoZW1hKGl0KSB7XG4gICAgY29uc3QgeyBnZW4sIHNjaGVtYSwgdmFsaWRhdGVOYW1lIH0gPSBpdDtcbiAgICBpZiAoc2NoZW1hID09PSBmYWxzZSkge1xuICAgICAgICBmYWxzZVNjaGVtYUVycm9yKGl0LCBmYWxzZSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGVvZiBzY2hlbWEgPT0gXCJvYmplY3RcIiAmJiBzY2hlbWEuJGFzeW5jID09PSB0cnVlKSB7XG4gICAgICAgIGdlbi5yZXR1cm4obmFtZXNfMS5kZWZhdWx0LmRhdGEpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgZ2VuLmFzc2lnbigoMCwgY29kZWdlbl8xLl8pIGAke3ZhbGlkYXRlTmFtZX0uZXJyb3JzYCwgbnVsbCk7XG4gICAgICAgIGdlbi5yZXR1cm4odHJ1ZSk7XG4gICAgfVxufVxuZXhwb3J0cy50b3BCb29sT3JFbXB0eVNjaGVtYSA9IHRvcEJvb2xPckVtcHR5U2NoZW1hO1xuZnVuY3Rpb24gYm9vbE9yRW1wdHlTY2hlbWEoaXQsIHZhbGlkKSB7XG4gICAgY29uc3QgeyBnZW4sIHNjaGVtYSB9ID0gaXQ7XG4gICAgaWYgKHNjaGVtYSA9PT0gZmFsc2UpIHtcbiAgICAgICAgZ2VuLnZhcih2YWxpZCwgZmFsc2UpOyAvLyBUT0RPIHZhclxuICAgICAgICBmYWxzZVNjaGVtYUVycm9yKGl0KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGdlbi52YXIodmFsaWQsIHRydWUpOyAvLyBUT0RPIHZhclxuICAgIH1cbn1cbmV4cG9ydHMuYm9vbE9yRW1wdHlTY2hlbWEgPSBib29sT3JFbXB0eVNjaGVtYTtcbmZ1bmN0aW9uIGZhbHNlU2NoZW1hRXJyb3IoaXQsIG92ZXJyaWRlQWxsRXJyb3JzKSB7XG4gICAgY29uc3QgeyBnZW4sIGRhdGEgfSA9IGl0O1xuICAgIC8vIFRPRE8gbWF5YmUgc29tZSBvdGhlciBpbnRlcmZhY2Ugc2hvdWxkIGJlIHVzZWQgZm9yIG5vbi1rZXl3b3JkIHZhbGlkYXRpb24gZXJyb3JzLi4uXG4gICAgY29uc3QgY3h0ID0ge1xuICAgICAgICBnZW4sXG4gICAgICAgIGtleXdvcmQ6IFwiZmFsc2Ugc2NoZW1hXCIsXG4gICAgICAgIGRhdGEsXG4gICAgICAgIHNjaGVtYTogZmFsc2UsXG4gICAgICAgIHNjaGVtYUNvZGU6IGZhbHNlLFxuICAgICAgICBzY2hlbWFWYWx1ZTogZmFsc2UsXG4gICAgICAgIHBhcmFtczoge30sXG4gICAgICAgIGl0LFxuICAgIH07XG4gICAgKDAsIGVycm9yc18xLnJlcG9ydEVycm9yKShjeHQsIGJvb2xFcnJvciwgdW5kZWZpbmVkLCBvdmVycmlkZUFsbEVycm9ycyk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1ib29sU2NoZW1hLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldFJ1bGVzID0gZXhwb3J0cy5pc0pTT05UeXBlID0gdm9pZCAwO1xuY29uc3QgX2pzb25UeXBlcyA9IFtcInN0cmluZ1wiLCBcIm51bWJlclwiLCBcImludGVnZXJcIiwgXCJib29sZWFuXCIsIFwibnVsbFwiLCBcIm9iamVjdFwiLCBcImFycmF5XCJdO1xuY29uc3QganNvblR5cGVzID0gbmV3IFNldChfanNvblR5cGVzKTtcbmZ1bmN0aW9uIGlzSlNPTlR5cGUoeCkge1xuICAgIHJldHVybiB0eXBlb2YgeCA9PSBcInN0cmluZ1wiICYmIGpzb25UeXBlcy5oYXMoeCk7XG59XG5leHBvcnRzLmlzSlNPTlR5cGUgPSBpc0pTT05UeXBlO1xuZnVuY3Rpb24gZ2V0UnVsZXMoKSB7XG4gICAgY29uc3QgZ3JvdXBzID0ge1xuICAgICAgICBudW1iZXI6IHsgdHlwZTogXCJudW1iZXJcIiwgcnVsZXM6IFtdIH0sXG4gICAgICAgIHN0cmluZzogeyB0eXBlOiBcInN0cmluZ1wiLCBydWxlczogW10gfSxcbiAgICAgICAgYXJyYXk6IHsgdHlwZTogXCJhcnJheVwiLCBydWxlczogW10gfSxcbiAgICAgICAgb2JqZWN0OiB7IHR5cGU6IFwib2JqZWN0XCIsIHJ1bGVzOiBbXSB9LFxuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZXM6IHsgLi4uZ3JvdXBzLCBpbnRlZ2VyOiB0cnVlLCBib29sZWFuOiB0cnVlLCBudWxsOiB0cnVlIH0sXG4gICAgICAgIHJ1bGVzOiBbeyBydWxlczogW10gfSwgZ3JvdXBzLm51bWJlciwgZ3JvdXBzLnN0cmluZywgZ3JvdXBzLmFycmF5LCBncm91cHMub2JqZWN0XSxcbiAgICAgICAgcG9zdDogeyBydWxlczogW10gfSxcbiAgICAgICAgYWxsOiB7fSxcbiAgICAgICAga2V5d29yZHM6IHt9LFxuICAgIH07XG59XG5leHBvcnRzLmdldFJ1bGVzID0gZ2V0UnVsZXM7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1ydWxlcy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5zaG91bGRVc2VSdWxlID0gZXhwb3J0cy5zaG91bGRVc2VHcm91cCA9IGV4cG9ydHMuc2NoZW1hSGFzUnVsZXNGb3JUeXBlID0gdm9pZCAwO1xuZnVuY3Rpb24gc2NoZW1hSGFzUnVsZXNGb3JUeXBlKHsgc2NoZW1hLCBzZWxmIH0sIHR5cGUpIHtcbiAgICBjb25zdCBncm91cCA9IHNlbGYuUlVMRVMudHlwZXNbdHlwZV07XG4gICAgcmV0dXJuIGdyb3VwICYmIGdyb3VwICE9PSB0cnVlICYmIHNob3VsZFVzZUdyb3VwKHNjaGVtYSwgZ3JvdXApO1xufVxuZXhwb3J0cy5zY2hlbWFIYXNSdWxlc0ZvclR5cGUgPSBzY2hlbWFIYXNSdWxlc0ZvclR5cGU7XG5mdW5jdGlvbiBzaG91bGRVc2VHcm91cChzY2hlbWEsIGdyb3VwKSB7XG4gICAgcmV0dXJuIGdyb3VwLnJ1bGVzLnNvbWUoKHJ1bGUpID0+IHNob3VsZFVzZVJ1bGUoc2NoZW1hLCBydWxlKSk7XG59XG5leHBvcnRzLnNob3VsZFVzZUdyb3VwID0gc2hvdWxkVXNlR3JvdXA7XG5mdW5jdGlvbiBzaG91bGRVc2VSdWxlKHNjaGVtYSwgcnVsZSkge1xuICAgIHZhciBfYTtcbiAgICByZXR1cm4gKHNjaGVtYVtydWxlLmtleXdvcmRdICE9PSB1bmRlZmluZWQgfHxcbiAgICAgICAgKChfYSA9IHJ1bGUuZGVmaW5pdGlvbi5pbXBsZW1lbnRzKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc29tZSgoa3dkKSA9PiBzY2hlbWFba3dkXSAhPT0gdW5kZWZpbmVkKSkpO1xufVxuZXhwb3J0cy5zaG91bGRVc2VSdWxlID0gc2hvdWxkVXNlUnVsZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFwcGxpY2FiaWxpdHkuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucmVwb3J0VHlwZUVycm9yID0gZXhwb3J0cy5jaGVja0RhdGFUeXBlcyA9IGV4cG9ydHMuY2hlY2tEYXRhVHlwZSA9IGV4cG9ydHMuY29lcmNlQW5kQ2hlY2tEYXRhVHlwZSA9IGV4cG9ydHMuZ2V0SlNPTlR5cGVzID0gZXhwb3J0cy5nZXRTY2hlbWFUeXBlcyA9IGV4cG9ydHMuRGF0YVR5cGUgPSB2b2lkIDA7XG5jb25zdCBydWxlc18xID0gcmVxdWlyZShcIi4uL3J1bGVzXCIpO1xuY29uc3QgYXBwbGljYWJpbGl0eV8xID0gcmVxdWlyZShcIi4vYXBwbGljYWJpbGl0eVwiKTtcbmNvbnN0IGVycm9yc18xID0gcmVxdWlyZShcIi4uL2Vycm9yc1wiKTtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi9jb2RlZ2VuXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uL3V0aWxcIik7XG52YXIgRGF0YVR5cGU7XG4oZnVuY3Rpb24gKERhdGFUeXBlKSB7XG4gICAgRGF0YVR5cGVbRGF0YVR5cGVbXCJDb3JyZWN0XCJdID0gMF0gPSBcIkNvcnJlY3RcIjtcbiAgICBEYXRhVHlwZVtEYXRhVHlwZVtcIldyb25nXCJdID0gMV0gPSBcIldyb25nXCI7XG59KShEYXRhVHlwZSB8fCAoZXhwb3J0cy5EYXRhVHlwZSA9IERhdGFUeXBlID0ge30pKTtcbmZ1bmN0aW9uIGdldFNjaGVtYVR5cGVzKHNjaGVtYSkge1xuICAgIGNvbnN0IHR5cGVzID0gZ2V0SlNPTlR5cGVzKHNjaGVtYS50eXBlKTtcbiAgICBjb25zdCBoYXNOdWxsID0gdHlwZXMuaW5jbHVkZXMoXCJudWxsXCIpO1xuICAgIGlmIChoYXNOdWxsKSB7XG4gICAgICAgIGlmIChzY2hlbWEubnVsbGFibGUgPT09IGZhbHNlKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidHlwZTogbnVsbCBjb250cmFkaWN0cyBudWxsYWJsZTogZmFsc2VcIik7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBpZiAoIXR5cGVzLmxlbmd0aCAmJiBzY2hlbWEubnVsbGFibGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdcIm51bGxhYmxlXCIgY2Fubm90IGJlIHVzZWQgd2l0aG91dCBcInR5cGVcIicpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzY2hlbWEubnVsbGFibGUgPT09IHRydWUpXG4gICAgICAgICAgICB0eXBlcy5wdXNoKFwibnVsbFwiKTtcbiAgICB9XG4gICAgcmV0dXJuIHR5cGVzO1xufVxuZXhwb3J0cy5nZXRTY2hlbWFUeXBlcyA9IGdldFNjaGVtYVR5cGVzO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1yZWR1bmRhbnQtdHlwZS1jb25zdGl0dWVudHNcbmZ1bmN0aW9uIGdldEpTT05UeXBlcyh0cykge1xuICAgIGNvbnN0IHR5cGVzID0gQXJyYXkuaXNBcnJheSh0cykgPyB0cyA6IHRzID8gW3RzXSA6IFtdO1xuICAgIGlmICh0eXBlcy5ldmVyeShydWxlc18xLmlzSlNPTlR5cGUpKVxuICAgICAgICByZXR1cm4gdHlwZXM7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwidHlwZSBtdXN0IGJlIEpTT05UeXBlIG9yIEpTT05UeXBlW106IFwiICsgdHlwZXMuam9pbihcIixcIikpO1xufVxuZXhwb3J0cy5nZXRKU09OVHlwZXMgPSBnZXRKU09OVHlwZXM7XG5mdW5jdGlvbiBjb2VyY2VBbmRDaGVja0RhdGFUeXBlKGl0LCB0eXBlcykge1xuICAgIGNvbnN0IHsgZ2VuLCBkYXRhLCBvcHRzIH0gPSBpdDtcbiAgICBjb25zdCBjb2VyY2VUbyA9IGNvZXJjZVRvVHlwZXModHlwZXMsIG9wdHMuY29lcmNlVHlwZXMpO1xuICAgIGNvbnN0IGNoZWNrVHlwZXMgPSB0eXBlcy5sZW5ndGggPiAwICYmXG4gICAgICAgICEoY29lcmNlVG8ubGVuZ3RoID09PSAwICYmIHR5cGVzLmxlbmd0aCA9PT0gMSAmJiAoMCwgYXBwbGljYWJpbGl0eV8xLnNjaGVtYUhhc1J1bGVzRm9yVHlwZSkoaXQsIHR5cGVzWzBdKSk7XG4gICAgaWYgKGNoZWNrVHlwZXMpIHtcbiAgICAgICAgY29uc3Qgd3JvbmdUeXBlID0gY2hlY2tEYXRhVHlwZXModHlwZXMsIGRhdGEsIG9wdHMuc3RyaWN0TnVtYmVycywgRGF0YVR5cGUuV3JvbmcpO1xuICAgICAgICBnZW4uaWYod3JvbmdUeXBlLCAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoY29lcmNlVG8ubGVuZ3RoKVxuICAgICAgICAgICAgICAgIGNvZXJjZURhdGEoaXQsIHR5cGVzLCBjb2VyY2VUbyk7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgcmVwb3J0VHlwZUVycm9yKGl0KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBjaGVja1R5cGVzO1xufVxuZXhwb3J0cy5jb2VyY2VBbmRDaGVja0RhdGFUeXBlID0gY29lcmNlQW5kQ2hlY2tEYXRhVHlwZTtcbmNvbnN0IENPRVJDSUJMRSA9IG5ldyBTZXQoW1wic3RyaW5nXCIsIFwibnVtYmVyXCIsIFwiaW50ZWdlclwiLCBcImJvb2xlYW5cIiwgXCJudWxsXCJdKTtcbmZ1bmN0aW9uIGNvZXJjZVRvVHlwZXModHlwZXMsIGNvZXJjZVR5cGVzKSB7XG4gICAgcmV0dXJuIGNvZXJjZVR5cGVzXG4gICAgICAgID8gdHlwZXMuZmlsdGVyKCh0KSA9PiBDT0VSQ0lCTEUuaGFzKHQpIHx8IChjb2VyY2VUeXBlcyA9PT0gXCJhcnJheVwiICYmIHQgPT09IFwiYXJyYXlcIikpXG4gICAgICAgIDogW107XG59XG5mdW5jdGlvbiBjb2VyY2VEYXRhKGl0LCB0eXBlcywgY29lcmNlVG8pIHtcbiAgICBjb25zdCB7IGdlbiwgZGF0YSwgb3B0cyB9ID0gaXQ7XG4gICAgY29uc3QgZGF0YVR5cGUgPSBnZW4ubGV0KFwiZGF0YVR5cGVcIiwgKDAsIGNvZGVnZW5fMS5fKSBgdHlwZW9mICR7ZGF0YX1gKTtcbiAgICBjb25zdCBjb2VyY2VkID0gZ2VuLmxldChcImNvZXJjZWRcIiwgKDAsIGNvZGVnZW5fMS5fKSBgdW5kZWZpbmVkYCk7XG4gICAgaWYgKG9wdHMuY29lcmNlVHlwZXMgPT09IFwiYXJyYXlcIikge1xuICAgICAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhVHlwZX0gPT0gJ29iamVjdCcgJiYgQXJyYXkuaXNBcnJheSgke2RhdGF9KSAmJiAke2RhdGF9Lmxlbmd0aCA9PSAxYCwgKCkgPT4gZ2VuXG4gICAgICAgICAgICAuYXNzaWduKGRhdGEsICgwLCBjb2RlZ2VuXzEuXykgYCR7ZGF0YX1bMF1gKVxuICAgICAgICAgICAgLmFzc2lnbihkYXRhVHlwZSwgKDAsIGNvZGVnZW5fMS5fKSBgdHlwZW9mICR7ZGF0YX1gKVxuICAgICAgICAgICAgLmlmKGNoZWNrRGF0YVR5cGVzKHR5cGVzLCBkYXRhLCBvcHRzLnN0cmljdE51bWJlcnMpLCAoKSA9PiBnZW4uYXNzaWduKGNvZXJjZWQsIGRhdGEpKSk7XG4gICAgfVxuICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGAke2NvZXJjZWR9ICE9PSB1bmRlZmluZWRgKTtcbiAgICBmb3IgKGNvbnN0IHQgb2YgY29lcmNlVG8pIHtcbiAgICAgICAgaWYgKENPRVJDSUJMRS5oYXModCkgfHwgKHQgPT09IFwiYXJyYXlcIiAmJiBvcHRzLmNvZXJjZVR5cGVzID09PSBcImFycmF5XCIpKSB7XG4gICAgICAgICAgICBjb2VyY2VTcGVjaWZpY1R5cGUodCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2VuLmVsc2UoKTtcbiAgICByZXBvcnRUeXBlRXJyb3IoaXQpO1xuICAgIGdlbi5lbmRJZigpO1xuICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGAke2NvZXJjZWR9ICE9PSB1bmRlZmluZWRgLCAoKSA9PiB7XG4gICAgICAgIGdlbi5hc3NpZ24oZGF0YSwgY29lcmNlZCk7XG4gICAgICAgIGFzc2lnblBhcmVudERhdGEoaXQsIGNvZXJjZWQpO1xuICAgIH0pO1xuICAgIGZ1bmN0aW9uIGNvZXJjZVNwZWNpZmljVHlwZSh0KSB7XG4gICAgICAgIHN3aXRjaCAodCkge1xuICAgICAgICAgICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgICAgICAgICAgIGdlblxuICAgICAgICAgICAgICAgICAgICAuZWxzZUlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7ZGF0YVR5cGV9ID09IFwibnVtYmVyXCIgfHwgJHtkYXRhVHlwZX0gPT0gXCJib29sZWFuXCJgKVxuICAgICAgICAgICAgICAgICAgICAuYXNzaWduKGNvZXJjZWQsICgwLCBjb2RlZ2VuXzEuXykgYFwiXCIgKyAke2RhdGF9YClcbiAgICAgICAgICAgICAgICAgICAgLmVsc2VJZigoMCwgY29kZWdlbl8xLl8pIGAke2RhdGF9ID09PSBudWxsYClcbiAgICAgICAgICAgICAgICAgICAgLmFzc2lnbihjb2VyY2VkLCAoMCwgY29kZWdlbl8xLl8pIGBcIlwiYCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgY2FzZSBcIm51bWJlclwiOlxuICAgICAgICAgICAgICAgIGdlblxuICAgICAgICAgICAgICAgICAgICAuZWxzZUlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7ZGF0YVR5cGV9ID09IFwiYm9vbGVhblwiIHx8ICR7ZGF0YX0gPT09IG51bGxcbiAgICAgICAgICAgICAgfHwgKCR7ZGF0YVR5cGV9ID09IFwic3RyaW5nXCIgJiYgJHtkYXRhfSAmJiAke2RhdGF9ID09ICske2RhdGF9KWApXG4gICAgICAgICAgICAgICAgICAgIC5hc3NpZ24oY29lcmNlZCwgKDAsIGNvZGVnZW5fMS5fKSBgKyR7ZGF0YX1gKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBjYXNlIFwiaW50ZWdlclwiOlxuICAgICAgICAgICAgICAgIGdlblxuICAgICAgICAgICAgICAgICAgICAuZWxzZUlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7ZGF0YVR5cGV9ID09PSBcImJvb2xlYW5cIiB8fCAke2RhdGF9ID09PSBudWxsXG4gICAgICAgICAgICAgIHx8ICgke2RhdGFUeXBlfSA9PT0gXCJzdHJpbmdcIiAmJiAke2RhdGF9ICYmICR7ZGF0YX0gPT0gKyR7ZGF0YX0gJiYgISgke2RhdGF9ICUgMSkpYClcbiAgICAgICAgICAgICAgICAgICAgLmFzc2lnbihjb2VyY2VkLCAoMCwgY29kZWdlbl8xLl8pIGArJHtkYXRhfWApO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGNhc2UgXCJib29sZWFuXCI6XG4gICAgICAgICAgICAgICAgZ2VuXG4gICAgICAgICAgICAgICAgICAgIC5lbHNlSWYoKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhfSA9PT0gXCJmYWxzZVwiIHx8ICR7ZGF0YX0gPT09IDAgfHwgJHtkYXRhfSA9PT0gbnVsbGApXG4gICAgICAgICAgICAgICAgICAgIC5hc3NpZ24oY29lcmNlZCwgZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgIC5lbHNlSWYoKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhfSA9PT0gXCJ0cnVlXCIgfHwgJHtkYXRhfSA9PT0gMWApXG4gICAgICAgICAgICAgICAgICAgIC5hc3NpZ24oY29lcmNlZCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgY2FzZSBcIm51bGxcIjpcbiAgICAgICAgICAgICAgICBnZW4uZWxzZUlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7ZGF0YX0gPT09IFwiXCIgfHwgJHtkYXRhfSA9PT0gMCB8fCAke2RhdGF9ID09PSBmYWxzZWApO1xuICAgICAgICAgICAgICAgIGdlbi5hc3NpZ24oY29lcmNlZCwgbnVsbCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgY2FzZSBcImFycmF5XCI6XG4gICAgICAgICAgICAgICAgZ2VuXG4gICAgICAgICAgICAgICAgICAgIC5lbHNlSWYoKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhVHlwZX0gPT09IFwic3RyaW5nXCIgfHwgJHtkYXRhVHlwZX0gPT09IFwibnVtYmVyXCJcbiAgICAgICAgICAgICAgfHwgJHtkYXRhVHlwZX0gPT09IFwiYm9vbGVhblwiIHx8ICR7ZGF0YX0gPT09IG51bGxgKVxuICAgICAgICAgICAgICAgICAgICAuYXNzaWduKGNvZXJjZWQsICgwLCBjb2RlZ2VuXzEuXykgYFske2RhdGF9XWApO1xuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gYXNzaWduUGFyZW50RGF0YSh7IGdlbiwgcGFyZW50RGF0YSwgcGFyZW50RGF0YVByb3BlcnR5IH0sIGV4cHIpIHtcbiAgICAvLyBUT0RPIHVzZSBnZW4ucHJvcGVydHlcbiAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5fKSBgJHtwYXJlbnREYXRhfSAhPT0gdW5kZWZpbmVkYCwgKCkgPT4gZ2VuLmFzc2lnbigoMCwgY29kZWdlbl8xLl8pIGAke3BhcmVudERhdGF9WyR7cGFyZW50RGF0YVByb3BlcnR5fV1gLCBleHByKSk7XG59XG5mdW5jdGlvbiBjaGVja0RhdGFUeXBlKGRhdGFUeXBlLCBkYXRhLCBzdHJpY3ROdW1zLCBjb3JyZWN0ID0gRGF0YVR5cGUuQ29ycmVjdCkge1xuICAgIGNvbnN0IEVRID0gY29ycmVjdCA9PT0gRGF0YVR5cGUuQ29ycmVjdCA/IGNvZGVnZW5fMS5vcGVyYXRvcnMuRVEgOiBjb2RlZ2VuXzEub3BlcmF0b3JzLk5FUTtcbiAgICBsZXQgY29uZDtcbiAgICBzd2l0Y2ggKGRhdGFUeXBlKSB7XG4gICAgICAgIGNhc2UgXCJudWxsXCI6XG4gICAgICAgICAgICByZXR1cm4gKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhfSAke0VRfSBudWxsYDtcbiAgICAgICAgY2FzZSBcImFycmF5XCI6XG4gICAgICAgICAgICBjb25kID0gKDAsIGNvZGVnZW5fMS5fKSBgQXJyYXkuaXNBcnJheSgke2RhdGF9KWA7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIm9iamVjdFwiOlxuICAgICAgICAgICAgY29uZCA9ICgwLCBjb2RlZ2VuXzEuXykgYCR7ZGF0YX0gJiYgdHlwZW9mICR7ZGF0YX0gPT0gXCJvYmplY3RcIiAmJiAhQXJyYXkuaXNBcnJheSgke2RhdGF9KWA7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcImludGVnZXJcIjpcbiAgICAgICAgICAgIGNvbmQgPSBudW1Db25kKCgwLCBjb2RlZ2VuXzEuXykgYCEoJHtkYXRhfSAlIDEpICYmICFpc05hTigke2RhdGF9KWApO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJudW1iZXJcIjpcbiAgICAgICAgICAgIGNvbmQgPSBudW1Db25kKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiAoMCwgY29kZWdlbl8xLl8pIGB0eXBlb2YgJHtkYXRhfSAke0VRfSAke2RhdGFUeXBlfWA7XG4gICAgfVxuICAgIHJldHVybiBjb3JyZWN0ID09PSBEYXRhVHlwZS5Db3JyZWN0ID8gY29uZCA6ICgwLCBjb2RlZ2VuXzEubm90KShjb25kKTtcbiAgICBmdW5jdGlvbiBudW1Db25kKF9jb25kID0gY29kZWdlbl8xLm5pbCkge1xuICAgICAgICByZXR1cm4gKDAsIGNvZGVnZW5fMS5hbmQpKCgwLCBjb2RlZ2VuXzEuXykgYHR5cGVvZiAke2RhdGF9ID09IFwibnVtYmVyXCJgLCBfY29uZCwgc3RyaWN0TnVtcyA/ICgwLCBjb2RlZ2VuXzEuXykgYGlzRmluaXRlKCR7ZGF0YX0pYCA6IGNvZGVnZW5fMS5uaWwpO1xuICAgIH1cbn1cbmV4cG9ydHMuY2hlY2tEYXRhVHlwZSA9IGNoZWNrRGF0YVR5cGU7XG5mdW5jdGlvbiBjaGVja0RhdGFUeXBlcyhkYXRhVHlwZXMsIGRhdGEsIHN0cmljdE51bXMsIGNvcnJlY3QpIHtcbiAgICBpZiAoZGF0YVR5cGVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICByZXR1cm4gY2hlY2tEYXRhVHlwZShkYXRhVHlwZXNbMF0sIGRhdGEsIHN0cmljdE51bXMsIGNvcnJlY3QpO1xuICAgIH1cbiAgICBsZXQgY29uZDtcbiAgICBjb25zdCB0eXBlcyA9ICgwLCB1dGlsXzEudG9IYXNoKShkYXRhVHlwZXMpO1xuICAgIGlmICh0eXBlcy5hcnJheSAmJiB0eXBlcy5vYmplY3QpIHtcbiAgICAgICAgY29uc3Qgbm90T2JqID0gKDAsIGNvZGVnZW5fMS5fKSBgdHlwZW9mICR7ZGF0YX0gIT0gXCJvYmplY3RcImA7XG4gICAgICAgIGNvbmQgPSB0eXBlcy5udWxsID8gbm90T2JqIDogKDAsIGNvZGVnZW5fMS5fKSBgISR7ZGF0YX0gfHwgJHtub3RPYmp9YDtcbiAgICAgICAgZGVsZXRlIHR5cGVzLm51bGw7XG4gICAgICAgIGRlbGV0ZSB0eXBlcy5hcnJheTtcbiAgICAgICAgZGVsZXRlIHR5cGVzLm9iamVjdDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGNvbmQgPSBjb2RlZ2VuXzEubmlsO1xuICAgIH1cbiAgICBpZiAodHlwZXMubnVtYmVyKVxuICAgICAgICBkZWxldGUgdHlwZXMuaW50ZWdlcjtcbiAgICBmb3IgKGNvbnN0IHQgaW4gdHlwZXMpXG4gICAgICAgIGNvbmQgPSAoMCwgY29kZWdlbl8xLmFuZCkoY29uZCwgY2hlY2tEYXRhVHlwZSh0LCBkYXRhLCBzdHJpY3ROdW1zLCBjb3JyZWN0KSk7XG4gICAgcmV0dXJuIGNvbmQ7XG59XG5leHBvcnRzLmNoZWNrRGF0YVR5cGVzID0gY2hlY2tEYXRhVHlwZXM7XG5jb25zdCB0eXBlRXJyb3IgPSB7XG4gICAgbWVzc2FnZTogKHsgc2NoZW1hIH0pID0+IGBtdXN0IGJlICR7c2NoZW1hfWAsXG4gICAgcGFyYW1zOiAoeyBzY2hlbWEsIHNjaGVtYVZhbHVlIH0pID0+IHR5cGVvZiBzY2hlbWEgPT0gXCJzdHJpbmdcIiA/ICgwLCBjb2RlZ2VuXzEuXykgYHt0eXBlOiAke3NjaGVtYX19YCA6ICgwLCBjb2RlZ2VuXzEuXykgYHt0eXBlOiAke3NjaGVtYVZhbHVlfX1gLFxufTtcbmZ1bmN0aW9uIHJlcG9ydFR5cGVFcnJvcihpdCkge1xuICAgIGNvbnN0IGN4dCA9IGdldFR5cGVFcnJvckNvbnRleHQoaXQpO1xuICAgICgwLCBlcnJvcnNfMS5yZXBvcnRFcnJvcikoY3h0LCB0eXBlRXJyb3IpO1xufVxuZXhwb3J0cy5yZXBvcnRUeXBlRXJyb3IgPSByZXBvcnRUeXBlRXJyb3I7XG5mdW5jdGlvbiBnZXRUeXBlRXJyb3JDb250ZXh0KGl0KSB7XG4gICAgY29uc3QgeyBnZW4sIGRhdGEsIHNjaGVtYSB9ID0gaXQ7XG4gICAgY29uc3Qgc2NoZW1hQ29kZSA9ICgwLCB1dGlsXzEuc2NoZW1hUmVmT3JWYWwpKGl0LCBzY2hlbWEsIFwidHlwZVwiKTtcbiAgICByZXR1cm4ge1xuICAgICAgICBnZW4sXG4gICAgICAgIGtleXdvcmQ6IFwidHlwZVwiLFxuICAgICAgICBkYXRhLFxuICAgICAgICBzY2hlbWE6IHNjaGVtYS50eXBlLFxuICAgICAgICBzY2hlbWFDb2RlLFxuICAgICAgICBzY2hlbWFWYWx1ZTogc2NoZW1hQ29kZSxcbiAgICAgICAgcGFyZW50U2NoZW1hOiBzY2hlbWEsXG4gICAgICAgIHBhcmFtczoge30sXG4gICAgICAgIGl0LFxuICAgIH07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhVHlwZS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5hc3NpZ25EZWZhdWx0cyA9IHZvaWQgMDtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi9jb2RlZ2VuXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uL3V0aWxcIik7XG5mdW5jdGlvbiBhc3NpZ25EZWZhdWx0cyhpdCwgdHkpIHtcbiAgICBjb25zdCB7IHByb3BlcnRpZXMsIGl0ZW1zIH0gPSBpdC5zY2hlbWE7XG4gICAgaWYgKHR5ID09PSBcIm9iamVjdFwiICYmIHByb3BlcnRpZXMpIHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gcHJvcGVydGllcykge1xuICAgICAgICAgICAgYXNzaWduRGVmYXVsdChpdCwga2V5LCBwcm9wZXJ0aWVzW2tleV0uZGVmYXVsdCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAodHkgPT09IFwiYXJyYXlcIiAmJiBBcnJheS5pc0FycmF5KGl0ZW1zKSkge1xuICAgICAgICBpdGVtcy5mb3JFYWNoKChzY2gsIGkpID0+IGFzc2lnbkRlZmF1bHQoaXQsIGksIHNjaC5kZWZhdWx0KSk7XG4gICAgfVxufVxuZXhwb3J0cy5hc3NpZ25EZWZhdWx0cyA9IGFzc2lnbkRlZmF1bHRzO1xuZnVuY3Rpb24gYXNzaWduRGVmYXVsdChpdCwgcHJvcCwgZGVmYXVsdFZhbHVlKSB7XG4gICAgY29uc3QgeyBnZW4sIGNvbXBvc2l0ZVJ1bGUsIGRhdGEsIG9wdHMgfSA9IGl0O1xuICAgIGlmIChkZWZhdWx0VmFsdWUgPT09IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuO1xuICAgIGNvbnN0IGNoaWxkRGF0YSA9ICgwLCBjb2RlZ2VuXzEuXykgYCR7ZGF0YX0keygwLCBjb2RlZ2VuXzEuZ2V0UHJvcGVydHkpKHByb3ApfWA7XG4gICAgaWYgKGNvbXBvc2l0ZVJ1bGUpIHtcbiAgICAgICAgKDAsIHV0aWxfMS5jaGVja1N0cmljdE1vZGUpKGl0LCBgZGVmYXVsdCBpcyBpZ25vcmVkIGZvcjogJHtjaGlsZERhdGF9YCk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IGNvbmRpdGlvbiA9ICgwLCBjb2RlZ2VuXzEuXykgYCR7Y2hpbGREYXRhfSA9PT0gdW5kZWZpbmVkYDtcbiAgICBpZiAob3B0cy51c2VEZWZhdWx0cyA9PT0gXCJlbXB0eVwiKSB7XG4gICAgICAgIGNvbmRpdGlvbiA9ICgwLCBjb2RlZ2VuXzEuXykgYCR7Y29uZGl0aW9ufSB8fCAke2NoaWxkRGF0YX0gPT09IG51bGwgfHwgJHtjaGlsZERhdGF9ID09PSBcIlwiYDtcbiAgICB9XG4gICAgLy8gYCR7Y2hpbGREYXRhfSA9PT0gdW5kZWZpbmVkYCArXG4gICAgLy8gKG9wdHMudXNlRGVmYXVsdHMgPT09IFwiZW1wdHlcIiA/IGAgfHwgJHtjaGlsZERhdGF9ID09PSBudWxsIHx8ICR7Y2hpbGREYXRhfSA9PT0gXCJcImAgOiBcIlwiKVxuICAgIGdlbi5pZihjb25kaXRpb24sICgwLCBjb2RlZ2VuXzEuXykgYCR7Y2hpbGREYXRhfSA9ICR7KDAsIGNvZGVnZW5fMS5zdHJpbmdpZnkpKGRlZmF1bHRWYWx1ZSl9YCk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kZWZhdWx0cy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy52YWxpZGF0ZVVuaW9uID0gZXhwb3J0cy52YWxpZGF0ZUFycmF5ID0gZXhwb3J0cy51c2VQYXR0ZXJuID0gZXhwb3J0cy5jYWxsVmFsaWRhdGVDb2RlID0gZXhwb3J0cy5zY2hlbWFQcm9wZXJ0aWVzID0gZXhwb3J0cy5hbGxTY2hlbWFQcm9wZXJ0aWVzID0gZXhwb3J0cy5ub1Byb3BlcnR5SW5EYXRhID0gZXhwb3J0cy5wcm9wZXJ0eUluRGF0YSA9IGV4cG9ydHMuaXNPd25Qcm9wZXJ0eSA9IGV4cG9ydHMuaGFzUHJvcEZ1bmMgPSBleHBvcnRzLnJlcG9ydE1pc3NpbmdQcm9wID0gZXhwb3J0cy5jaGVja01pc3NpbmdQcm9wID0gZXhwb3J0cy5jaGVja1JlcG9ydE1pc3NpbmdQcm9wID0gdm9pZCAwO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uL2NvbXBpbGUvY29kZWdlblwiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi9jb21waWxlL3V0aWxcIik7XG5jb25zdCBuYW1lc18xID0gcmVxdWlyZShcIi4uL2NvbXBpbGUvbmFtZXNcIik7XG5jb25zdCB1dGlsXzIgPSByZXF1aXJlKFwiLi4vY29tcGlsZS91dGlsXCIpO1xuZnVuY3Rpb24gY2hlY2tSZXBvcnRNaXNzaW5nUHJvcChjeHQsIHByb3ApIHtcbiAgICBjb25zdCB7IGdlbiwgZGF0YSwgaXQgfSA9IGN4dDtcbiAgICBnZW4uaWYobm9Qcm9wZXJ0eUluRGF0YShnZW4sIGRhdGEsIHByb3AsIGl0Lm9wdHMub3duUHJvcGVydGllcyksICgpID0+IHtcbiAgICAgICAgY3h0LnNldFBhcmFtcyh7IG1pc3NpbmdQcm9wZXJ0eTogKDAsIGNvZGVnZW5fMS5fKSBgJHtwcm9wfWAgfSwgdHJ1ZSk7XG4gICAgICAgIGN4dC5lcnJvcigpO1xuICAgIH0pO1xufVxuZXhwb3J0cy5jaGVja1JlcG9ydE1pc3NpbmdQcm9wID0gY2hlY2tSZXBvcnRNaXNzaW5nUHJvcDtcbmZ1bmN0aW9uIGNoZWNrTWlzc2luZ1Byb3AoeyBnZW4sIGRhdGEsIGl0OiB7IG9wdHMgfSB9LCBwcm9wZXJ0aWVzLCBtaXNzaW5nKSB7XG4gICAgcmV0dXJuICgwLCBjb2RlZ2VuXzEub3IpKC4uLnByb3BlcnRpZXMubWFwKChwcm9wKSA9PiAoMCwgY29kZWdlbl8xLmFuZCkobm9Qcm9wZXJ0eUluRGF0YShnZW4sIGRhdGEsIHByb3AsIG9wdHMub3duUHJvcGVydGllcyksICgwLCBjb2RlZ2VuXzEuXykgYCR7bWlzc2luZ30gPSAke3Byb3B9YCkpKTtcbn1cbmV4cG9ydHMuY2hlY2tNaXNzaW5nUHJvcCA9IGNoZWNrTWlzc2luZ1Byb3A7XG5mdW5jdGlvbiByZXBvcnRNaXNzaW5nUHJvcChjeHQsIG1pc3NpbmcpIHtcbiAgICBjeHQuc2V0UGFyYW1zKHsgbWlzc2luZ1Byb3BlcnR5OiBtaXNzaW5nIH0sIHRydWUpO1xuICAgIGN4dC5lcnJvcigpO1xufVxuZXhwb3J0cy5yZXBvcnRNaXNzaW5nUHJvcCA9IHJlcG9ydE1pc3NpbmdQcm9wO1xuZnVuY3Rpb24gaGFzUHJvcEZ1bmMoZ2VuKSB7XG4gICAgcmV0dXJuIGdlbi5zY29wZVZhbHVlKFwiZnVuY1wiLCB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvdW5ib3VuZC1tZXRob2RcbiAgICAgICAgcmVmOiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LFxuICAgICAgICBjb2RlOiAoMCwgY29kZWdlbl8xLl8pIGBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5YCxcbiAgICB9KTtcbn1cbmV4cG9ydHMuaGFzUHJvcEZ1bmMgPSBoYXNQcm9wRnVuYztcbmZ1bmN0aW9uIGlzT3duUHJvcGVydHkoZ2VuLCBkYXRhLCBwcm9wZXJ0eSkge1xuICAgIHJldHVybiAoMCwgY29kZWdlbl8xLl8pIGAke2hhc1Byb3BGdW5jKGdlbil9LmNhbGwoJHtkYXRhfSwgJHtwcm9wZXJ0eX0pYDtcbn1cbmV4cG9ydHMuaXNPd25Qcm9wZXJ0eSA9IGlzT3duUHJvcGVydHk7XG5mdW5jdGlvbiBwcm9wZXJ0eUluRGF0YShnZW4sIGRhdGEsIHByb3BlcnR5LCBvd25Qcm9wZXJ0aWVzKSB7XG4gICAgY29uc3QgY29uZCA9ICgwLCBjb2RlZ2VuXzEuXykgYCR7ZGF0YX0keygwLCBjb2RlZ2VuXzEuZ2V0UHJvcGVydHkpKHByb3BlcnR5KX0gIT09IHVuZGVmaW5lZGA7XG4gICAgcmV0dXJuIG93blByb3BlcnRpZXMgPyAoMCwgY29kZWdlbl8xLl8pIGAke2NvbmR9ICYmICR7aXNPd25Qcm9wZXJ0eShnZW4sIGRhdGEsIHByb3BlcnR5KX1gIDogY29uZDtcbn1cbmV4cG9ydHMucHJvcGVydHlJbkRhdGEgPSBwcm9wZXJ0eUluRGF0YTtcbmZ1bmN0aW9uIG5vUHJvcGVydHlJbkRhdGEoZ2VuLCBkYXRhLCBwcm9wZXJ0eSwgb3duUHJvcGVydGllcykge1xuICAgIGNvbnN0IGNvbmQgPSAoMCwgY29kZWdlbl8xLl8pIGAke2RhdGF9JHsoMCwgY29kZWdlbl8xLmdldFByb3BlcnR5KShwcm9wZXJ0eSl9ID09PSB1bmRlZmluZWRgO1xuICAgIHJldHVybiBvd25Qcm9wZXJ0aWVzID8gKDAsIGNvZGVnZW5fMS5vcikoY29uZCwgKDAsIGNvZGVnZW5fMS5ub3QpKGlzT3duUHJvcGVydHkoZ2VuLCBkYXRhLCBwcm9wZXJ0eSkpKSA6IGNvbmQ7XG59XG5leHBvcnRzLm5vUHJvcGVydHlJbkRhdGEgPSBub1Byb3BlcnR5SW5EYXRhO1xuZnVuY3Rpb24gYWxsU2NoZW1hUHJvcGVydGllcyhzY2hlbWFNYXApIHtcbiAgICByZXR1cm4gc2NoZW1hTWFwID8gT2JqZWN0LmtleXMoc2NoZW1hTWFwKS5maWx0ZXIoKHApID0+IHAgIT09IFwiX19wcm90b19fXCIpIDogW107XG59XG5leHBvcnRzLmFsbFNjaGVtYVByb3BlcnRpZXMgPSBhbGxTY2hlbWFQcm9wZXJ0aWVzO1xuZnVuY3Rpb24gc2NoZW1hUHJvcGVydGllcyhpdCwgc2NoZW1hTWFwKSB7XG4gICAgcmV0dXJuIGFsbFNjaGVtYVByb3BlcnRpZXMoc2NoZW1hTWFwKS5maWx0ZXIoKHApID0+ICEoMCwgdXRpbF8xLmFsd2F5c1ZhbGlkU2NoZW1hKShpdCwgc2NoZW1hTWFwW3BdKSk7XG59XG5leHBvcnRzLnNjaGVtYVByb3BlcnRpZXMgPSBzY2hlbWFQcm9wZXJ0aWVzO1xuZnVuY3Rpb24gY2FsbFZhbGlkYXRlQ29kZSh7IHNjaGVtYUNvZGUsIGRhdGEsIGl0OiB7IGdlbiwgdG9wU2NoZW1hUmVmLCBzY2hlbWFQYXRoLCBlcnJvclBhdGggfSwgaXQgfSwgZnVuYywgY29udGV4dCwgcGFzc1NjaGVtYSkge1xuICAgIGNvbnN0IGRhdGFBbmRTY2hlbWEgPSBwYXNzU2NoZW1hID8gKDAsIGNvZGVnZW5fMS5fKSBgJHtzY2hlbWFDb2RlfSwgJHtkYXRhfSwgJHt0b3BTY2hlbWFSZWZ9JHtzY2hlbWFQYXRofWAgOiBkYXRhO1xuICAgIGNvbnN0IHZhbEN4dCA9IFtcbiAgICAgICAgW25hbWVzXzEuZGVmYXVsdC5pbnN0YW5jZVBhdGgsICgwLCBjb2RlZ2VuXzEuc3RyQ29uY2F0KShuYW1lc18xLmRlZmF1bHQuaW5zdGFuY2VQYXRoLCBlcnJvclBhdGgpXSxcbiAgICAgICAgW25hbWVzXzEuZGVmYXVsdC5wYXJlbnREYXRhLCBpdC5wYXJlbnREYXRhXSxcbiAgICAgICAgW25hbWVzXzEuZGVmYXVsdC5wYXJlbnREYXRhUHJvcGVydHksIGl0LnBhcmVudERhdGFQcm9wZXJ0eV0sXG4gICAgICAgIFtuYW1lc18xLmRlZmF1bHQucm9vdERhdGEsIG5hbWVzXzEuZGVmYXVsdC5yb290RGF0YV0sXG4gICAgXTtcbiAgICBpZiAoaXQub3B0cy5keW5hbWljUmVmKVxuICAgICAgICB2YWxDeHQucHVzaChbbmFtZXNfMS5kZWZhdWx0LmR5bmFtaWNBbmNob3JzLCBuYW1lc18xLmRlZmF1bHQuZHluYW1pY0FuY2hvcnNdKTtcbiAgICBjb25zdCBhcmdzID0gKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhQW5kU2NoZW1hfSwgJHtnZW4ub2JqZWN0KC4uLnZhbEN4dCl9YDtcbiAgICByZXR1cm4gY29udGV4dCAhPT0gY29kZWdlbl8xLm5pbCA/ICgwLCBjb2RlZ2VuXzEuXykgYCR7ZnVuY30uY2FsbCgke2NvbnRleHR9LCAke2FyZ3N9KWAgOiAoMCwgY29kZWdlbl8xLl8pIGAke2Z1bmN9KCR7YXJnc30pYDtcbn1cbmV4cG9ydHMuY2FsbFZhbGlkYXRlQ29kZSA9IGNhbGxWYWxpZGF0ZUNvZGU7XG5jb25zdCBuZXdSZWdFeHAgPSAoMCwgY29kZWdlbl8xLl8pIGBuZXcgUmVnRXhwYDtcbmZ1bmN0aW9uIHVzZVBhdHRlcm4oeyBnZW4sIGl0OiB7IG9wdHMgfSB9LCBwYXR0ZXJuKSB7XG4gICAgY29uc3QgdSA9IG9wdHMudW5pY29kZVJlZ0V4cCA/IFwidVwiIDogXCJcIjtcbiAgICBjb25zdCB7IHJlZ0V4cCB9ID0gb3B0cy5jb2RlO1xuICAgIGNvbnN0IHJ4ID0gcmVnRXhwKHBhdHRlcm4sIHUpO1xuICAgIHJldHVybiBnZW4uc2NvcGVWYWx1ZShcInBhdHRlcm5cIiwge1xuICAgICAgICBrZXk6IHJ4LnRvU3RyaW5nKCksXG4gICAgICAgIHJlZjogcngsXG4gICAgICAgIGNvZGU6ICgwLCBjb2RlZ2VuXzEuXykgYCR7cmVnRXhwLmNvZGUgPT09IFwibmV3IFJlZ0V4cFwiID8gbmV3UmVnRXhwIDogKDAsIHV0aWxfMi51c2VGdW5jKShnZW4sIHJlZ0V4cCl9KCR7cGF0dGVybn0sICR7dX0pYCxcbiAgICB9KTtcbn1cbmV4cG9ydHMudXNlUGF0dGVybiA9IHVzZVBhdHRlcm47XG5mdW5jdGlvbiB2YWxpZGF0ZUFycmF5KGN4dCkge1xuICAgIGNvbnN0IHsgZ2VuLCBkYXRhLCBrZXl3b3JkLCBpdCB9ID0gY3h0O1xuICAgIGNvbnN0IHZhbGlkID0gZ2VuLm5hbWUoXCJ2YWxpZFwiKTtcbiAgICBpZiAoaXQuYWxsRXJyb3JzKSB7XG4gICAgICAgIGNvbnN0IHZhbGlkQXJyID0gZ2VuLmxldChcInZhbGlkXCIsIHRydWUpO1xuICAgICAgICB2YWxpZGF0ZUl0ZW1zKCgpID0+IGdlbi5hc3NpZ24odmFsaWRBcnIsIGZhbHNlKSk7XG4gICAgICAgIHJldHVybiB2YWxpZEFycjtcbiAgICB9XG4gICAgZ2VuLnZhcih2YWxpZCwgdHJ1ZSk7XG4gICAgdmFsaWRhdGVJdGVtcygoKSA9PiBnZW4uYnJlYWsoKSk7XG4gICAgcmV0dXJuIHZhbGlkO1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlSXRlbXMobm90VmFsaWQpIHtcbiAgICAgICAgY29uc3QgbGVuID0gZ2VuLmNvbnN0KFwibGVuXCIsICgwLCBjb2RlZ2VuXzEuXykgYCR7ZGF0YX0ubGVuZ3RoYCk7XG4gICAgICAgIGdlbi5mb3JSYW5nZShcImlcIiwgMCwgbGVuLCAoaSkgPT4ge1xuICAgICAgICAgICAgY3h0LnN1YnNjaGVtYSh7XG4gICAgICAgICAgICAgICAga2V5d29yZCxcbiAgICAgICAgICAgICAgICBkYXRhUHJvcDogaSxcbiAgICAgICAgICAgICAgICBkYXRhUHJvcFR5cGU6IHV0aWxfMS5UeXBlLk51bSxcbiAgICAgICAgICAgIH0sIHZhbGlkKTtcbiAgICAgICAgICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLm5vdCkodmFsaWQpLCBub3RWYWxpZCk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmV4cG9ydHMudmFsaWRhdGVBcnJheSA9IHZhbGlkYXRlQXJyYXk7XG5mdW5jdGlvbiB2YWxpZGF0ZVVuaW9uKGN4dCkge1xuICAgIGNvbnN0IHsgZ2VuLCBzY2hlbWEsIGtleXdvcmQsIGl0IH0gPSBjeHQ7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHNjaGVtYSkpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcImFqdiBpbXBsZW1lbnRhdGlvbiBlcnJvclwiKTtcbiAgICBjb25zdCBhbHdheXNWYWxpZCA9IHNjaGVtYS5zb21lKChzY2gpID0+ICgwLCB1dGlsXzEuYWx3YXlzVmFsaWRTY2hlbWEpKGl0LCBzY2gpKTtcbiAgICBpZiAoYWx3YXlzVmFsaWQgJiYgIWl0Lm9wdHMudW5ldmFsdWF0ZWQpXG4gICAgICAgIHJldHVybjtcbiAgICBjb25zdCB2YWxpZCA9IGdlbi5sZXQoXCJ2YWxpZFwiLCBmYWxzZSk7XG4gICAgY29uc3Qgc2NoVmFsaWQgPSBnZW4ubmFtZShcIl92YWxpZFwiKTtcbiAgICBnZW4uYmxvY2soKCkgPT4gc2NoZW1hLmZvckVhY2goKF9zY2gsIGkpID0+IHtcbiAgICAgICAgY29uc3Qgc2NoQ3h0ID0gY3h0LnN1YnNjaGVtYSh7XG4gICAgICAgICAgICBrZXl3b3JkLFxuICAgICAgICAgICAgc2NoZW1hUHJvcDogaSxcbiAgICAgICAgICAgIGNvbXBvc2l0ZVJ1bGU6IHRydWUsXG4gICAgICAgIH0sIHNjaFZhbGlkKTtcbiAgICAgICAgZ2VuLmFzc2lnbih2YWxpZCwgKDAsIGNvZGVnZW5fMS5fKSBgJHt2YWxpZH0gfHwgJHtzY2hWYWxpZH1gKTtcbiAgICAgICAgY29uc3QgbWVyZ2VkID0gY3h0Lm1lcmdlVmFsaWRFdmFsdWF0ZWQoc2NoQ3h0LCBzY2hWYWxpZCk7XG4gICAgICAgIC8vIGNhbiBzaG9ydC1jaXJjdWl0IGlmIGB1bmV2YWx1YXRlZFByb3BlcnRpZXMvSXRlbXNgIG5vdCBzdXBwb3J0ZWQgKG9wdHMudW5ldmFsdWF0ZWQgIT09IHRydWUpXG4gICAgICAgIC8vIG9yIGlmIGFsbCBwcm9wZXJ0aWVzIGFuZCBpdGVtcyB3ZXJlIGV2YWx1YXRlZCAoaXQucHJvcHMgPT09IHRydWUgJiYgaXQuaXRlbXMgPT09IHRydWUpXG4gICAgICAgIGlmICghbWVyZ2VkKVxuICAgICAgICAgICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEubm90KSh2YWxpZCkpO1xuICAgIH0pKTtcbiAgICBjeHQucmVzdWx0KHZhbGlkLCAoKSA9PiBjeHQucmVzZXQoKSwgKCkgPT4gY3h0LmVycm9yKHRydWUpKTtcbn1cbmV4cG9ydHMudmFsaWRhdGVVbmlvbiA9IHZhbGlkYXRlVW5pb247XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb2RlLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnZhbGlkYXRlS2V5d29yZFVzYWdlID0gZXhwb3J0cy52YWxpZFNjaGVtYVR5cGUgPSBleHBvcnRzLmZ1bmNLZXl3b3JkQ29kZSA9IGV4cG9ydHMubWFjcm9LZXl3b3JkQ29kZSA9IHZvaWQgMDtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi9jb2RlZ2VuXCIpO1xuY29uc3QgbmFtZXNfMSA9IHJlcXVpcmUoXCIuLi9uYW1lc1wiKTtcbmNvbnN0IGNvZGVfMSA9IHJlcXVpcmUoXCIuLi8uLi92b2NhYnVsYXJpZXMvY29kZVwiKTtcbmNvbnN0IGVycm9yc18xID0gcmVxdWlyZShcIi4uL2Vycm9yc1wiKTtcbmZ1bmN0aW9uIG1hY3JvS2V5d29yZENvZGUoY3h0LCBkZWYpIHtcbiAgICBjb25zdCB7IGdlbiwga2V5d29yZCwgc2NoZW1hLCBwYXJlbnRTY2hlbWEsIGl0IH0gPSBjeHQ7XG4gICAgY29uc3QgbWFjcm9TY2hlbWEgPSBkZWYubWFjcm8uY2FsbChpdC5zZWxmLCBzY2hlbWEsIHBhcmVudFNjaGVtYSwgaXQpO1xuICAgIGNvbnN0IHNjaGVtYVJlZiA9IHVzZUtleXdvcmQoZ2VuLCBrZXl3b3JkLCBtYWNyb1NjaGVtYSk7XG4gICAgaWYgKGl0Lm9wdHMudmFsaWRhdGVTY2hlbWEgIT09IGZhbHNlKVxuICAgICAgICBpdC5zZWxmLnZhbGlkYXRlU2NoZW1hKG1hY3JvU2NoZW1hLCB0cnVlKTtcbiAgICBjb25zdCB2YWxpZCA9IGdlbi5uYW1lKFwidmFsaWRcIik7XG4gICAgY3h0LnN1YnNjaGVtYSh7XG4gICAgICAgIHNjaGVtYTogbWFjcm9TY2hlbWEsXG4gICAgICAgIHNjaGVtYVBhdGg6IGNvZGVnZW5fMS5uaWwsXG4gICAgICAgIGVyclNjaGVtYVBhdGg6IGAke2l0LmVyclNjaGVtYVBhdGh9LyR7a2V5d29yZH1gLFxuICAgICAgICB0b3BTY2hlbWFSZWY6IHNjaGVtYVJlZixcbiAgICAgICAgY29tcG9zaXRlUnVsZTogdHJ1ZSxcbiAgICB9LCB2YWxpZCk7XG4gICAgY3h0LnBhc3ModmFsaWQsICgpID0+IGN4dC5lcnJvcih0cnVlKSk7XG59XG5leHBvcnRzLm1hY3JvS2V5d29yZENvZGUgPSBtYWNyb0tleXdvcmRDb2RlO1xuZnVuY3Rpb24gZnVuY0tleXdvcmRDb2RlKGN4dCwgZGVmKSB7XG4gICAgdmFyIF9hO1xuICAgIGNvbnN0IHsgZ2VuLCBrZXl3b3JkLCBzY2hlbWEsIHBhcmVudFNjaGVtYSwgJGRhdGEsIGl0IH0gPSBjeHQ7XG4gICAgY2hlY2tBc3luY0tleXdvcmQoaXQsIGRlZik7XG4gICAgY29uc3QgdmFsaWRhdGUgPSAhJGRhdGEgJiYgZGVmLmNvbXBpbGUgPyBkZWYuY29tcGlsZS5jYWxsKGl0LnNlbGYsIHNjaGVtYSwgcGFyZW50U2NoZW1hLCBpdCkgOiBkZWYudmFsaWRhdGU7XG4gICAgY29uc3QgdmFsaWRhdGVSZWYgPSB1c2VLZXl3b3JkKGdlbiwga2V5d29yZCwgdmFsaWRhdGUpO1xuICAgIGNvbnN0IHZhbGlkID0gZ2VuLmxldChcInZhbGlkXCIpO1xuICAgIGN4dC5ibG9jayRkYXRhKHZhbGlkLCB2YWxpZGF0ZUtleXdvcmQpO1xuICAgIGN4dC5vaygoX2EgPSBkZWYudmFsaWQpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHZhbGlkKTtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZUtleXdvcmQoKSB7XG4gICAgICAgIGlmIChkZWYuZXJyb3JzID09PSBmYWxzZSkge1xuICAgICAgICAgICAgYXNzaWduVmFsaWQoKTtcbiAgICAgICAgICAgIGlmIChkZWYubW9kaWZ5aW5nKVxuICAgICAgICAgICAgICAgIG1vZGlmeURhdGEoY3h0KTtcbiAgICAgICAgICAgIHJlcG9ydEVycnMoKCkgPT4gY3h0LmVycm9yKCkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgcnVsZUVycnMgPSBkZWYuYXN5bmMgPyB2YWxpZGF0ZUFzeW5jKCkgOiB2YWxpZGF0ZVN5bmMoKTtcbiAgICAgICAgICAgIGlmIChkZWYubW9kaWZ5aW5nKVxuICAgICAgICAgICAgICAgIG1vZGlmeURhdGEoY3h0KTtcbiAgICAgICAgICAgIHJlcG9ydEVycnMoKCkgPT4gYWRkRXJycyhjeHQsIHJ1bGVFcnJzKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gdmFsaWRhdGVBc3luYygpIHtcbiAgICAgICAgY29uc3QgcnVsZUVycnMgPSBnZW4ubGV0KFwicnVsZUVycnNcIiwgbnVsbCk7XG4gICAgICAgIGdlbi50cnkoKCkgPT4gYXNzaWduVmFsaWQoKDAsIGNvZGVnZW5fMS5fKSBgYXdhaXQgYCksIChlKSA9PiBnZW4uYXNzaWduKHZhbGlkLCBmYWxzZSkuaWYoKDAsIGNvZGVnZW5fMS5fKSBgJHtlfSBpbnN0YW5jZW9mICR7aXQuVmFsaWRhdGlvbkVycm9yfWAsICgpID0+IGdlbi5hc3NpZ24ocnVsZUVycnMsICgwLCBjb2RlZ2VuXzEuXykgYCR7ZX0uZXJyb3JzYCksICgpID0+IGdlbi50aHJvdyhlKSkpO1xuICAgICAgICByZXR1cm4gcnVsZUVycnM7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlU3luYygpIHtcbiAgICAgICAgY29uc3QgdmFsaWRhdGVFcnJzID0gKDAsIGNvZGVnZW5fMS5fKSBgJHt2YWxpZGF0ZVJlZn0uZXJyb3JzYDtcbiAgICAgICAgZ2VuLmFzc2lnbih2YWxpZGF0ZUVycnMsIG51bGwpO1xuICAgICAgICBhc3NpZ25WYWxpZChjb2RlZ2VuXzEubmlsKTtcbiAgICAgICAgcmV0dXJuIHZhbGlkYXRlRXJycztcbiAgICB9XG4gICAgZnVuY3Rpb24gYXNzaWduVmFsaWQoX2F3YWl0ID0gZGVmLmFzeW5jID8gKDAsIGNvZGVnZW5fMS5fKSBgYXdhaXQgYCA6IGNvZGVnZW5fMS5uaWwpIHtcbiAgICAgICAgY29uc3QgcGFzc0N4dCA9IGl0Lm9wdHMucGFzc0NvbnRleHQgPyBuYW1lc18xLmRlZmF1bHQudGhpcyA6IG5hbWVzXzEuZGVmYXVsdC5zZWxmO1xuICAgICAgICBjb25zdCBwYXNzU2NoZW1hID0gISgoXCJjb21waWxlXCIgaW4gZGVmICYmICEkZGF0YSkgfHwgZGVmLnNjaGVtYSA9PT0gZmFsc2UpO1xuICAgICAgICBnZW4uYXNzaWduKHZhbGlkLCAoMCwgY29kZWdlbl8xLl8pIGAke19hd2FpdH0keygwLCBjb2RlXzEuY2FsbFZhbGlkYXRlQ29kZSkoY3h0LCB2YWxpZGF0ZVJlZiwgcGFzc0N4dCwgcGFzc1NjaGVtYSl9YCwgZGVmLm1vZGlmeWluZyk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlcG9ydEVycnMoZXJyb3JzKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEubm90KSgoX2EgPSBkZWYudmFsaWQpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHZhbGlkKSwgZXJyb3JzKTtcbiAgICB9XG59XG5leHBvcnRzLmZ1bmNLZXl3b3JkQ29kZSA9IGZ1bmNLZXl3b3JkQ29kZTtcbmZ1bmN0aW9uIG1vZGlmeURhdGEoY3h0KSB7XG4gICAgY29uc3QgeyBnZW4sIGRhdGEsIGl0IH0gPSBjeHQ7XG4gICAgZ2VuLmlmKGl0LnBhcmVudERhdGEsICgpID0+IGdlbi5hc3NpZ24oZGF0YSwgKDAsIGNvZGVnZW5fMS5fKSBgJHtpdC5wYXJlbnREYXRhfVske2l0LnBhcmVudERhdGFQcm9wZXJ0eX1dYCkpO1xufVxuZnVuY3Rpb24gYWRkRXJycyhjeHQsIGVycnMpIHtcbiAgICBjb25zdCB7IGdlbiB9ID0gY3h0O1xuICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGBBcnJheS5pc0FycmF5KCR7ZXJyc30pYCwgKCkgPT4ge1xuICAgICAgICBnZW5cbiAgICAgICAgICAgIC5hc3NpZ24obmFtZXNfMS5kZWZhdWx0LnZFcnJvcnMsICgwLCBjb2RlZ2VuXzEuXykgYCR7bmFtZXNfMS5kZWZhdWx0LnZFcnJvcnN9ID09PSBudWxsID8gJHtlcnJzfSA6ICR7bmFtZXNfMS5kZWZhdWx0LnZFcnJvcnN9LmNvbmNhdCgke2VycnN9KWApXG4gICAgICAgICAgICAuYXNzaWduKG5hbWVzXzEuZGVmYXVsdC5lcnJvcnMsICgwLCBjb2RlZ2VuXzEuXykgYCR7bmFtZXNfMS5kZWZhdWx0LnZFcnJvcnN9Lmxlbmd0aGApO1xuICAgICAgICAoMCwgZXJyb3JzXzEuZXh0ZW5kRXJyb3JzKShjeHQpO1xuICAgIH0sICgpID0+IGN4dC5lcnJvcigpKTtcbn1cbmZ1bmN0aW9uIGNoZWNrQXN5bmNLZXl3b3JkKHsgc2NoZW1hRW52IH0sIGRlZikge1xuICAgIGlmIChkZWYuYXN5bmMgJiYgIXNjaGVtYUVudi4kYXN5bmMpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcImFzeW5jIGtleXdvcmQgaW4gc3luYyBzY2hlbWFcIik7XG59XG5mdW5jdGlvbiB1c2VLZXl3b3JkKGdlbiwga2V5d29yZCwgcmVzdWx0KSB7XG4gICAgaWYgKHJlc3VsdCA9PT0gdW5kZWZpbmVkKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGtleXdvcmQgXCIke2tleXdvcmR9XCIgZmFpbGVkIHRvIGNvbXBpbGVgKTtcbiAgICByZXR1cm4gZ2VuLnNjb3BlVmFsdWUoXCJrZXl3b3JkXCIsIHR5cGVvZiByZXN1bHQgPT0gXCJmdW5jdGlvblwiID8geyByZWY6IHJlc3VsdCB9IDogeyByZWY6IHJlc3VsdCwgY29kZTogKDAsIGNvZGVnZW5fMS5zdHJpbmdpZnkpKHJlc3VsdCkgfSk7XG59XG5mdW5jdGlvbiB2YWxpZFNjaGVtYVR5cGUoc2NoZW1hLCBzY2hlbWFUeXBlLCBhbGxvd1VuZGVmaW5lZCA9IGZhbHNlKSB7XG4gICAgLy8gVE9ETyBhZGQgdGVzdHNcbiAgICByZXR1cm4gKCFzY2hlbWFUeXBlLmxlbmd0aCB8fFxuICAgICAgICBzY2hlbWFUeXBlLnNvbWUoKHN0KSA9PiBzdCA9PT0gXCJhcnJheVwiXG4gICAgICAgICAgICA/IEFycmF5LmlzQXJyYXkoc2NoZW1hKVxuICAgICAgICAgICAgOiBzdCA9PT0gXCJvYmplY3RcIlxuICAgICAgICAgICAgICAgID8gc2NoZW1hICYmIHR5cGVvZiBzY2hlbWEgPT0gXCJvYmplY3RcIiAmJiAhQXJyYXkuaXNBcnJheShzY2hlbWEpXG4gICAgICAgICAgICAgICAgOiB0eXBlb2Ygc2NoZW1hID09IHN0IHx8IChhbGxvd1VuZGVmaW5lZCAmJiB0eXBlb2Ygc2NoZW1hID09IFwidW5kZWZpbmVkXCIpKSk7XG59XG5leHBvcnRzLnZhbGlkU2NoZW1hVHlwZSA9IHZhbGlkU2NoZW1hVHlwZTtcbmZ1bmN0aW9uIHZhbGlkYXRlS2V5d29yZFVzYWdlKHsgc2NoZW1hLCBvcHRzLCBzZWxmLCBlcnJTY2hlbWFQYXRoIH0sIGRlZiwga2V5d29yZCkge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmIChBcnJheS5pc0FycmF5KGRlZi5rZXl3b3JkKSA/ICFkZWYua2V5d29yZC5pbmNsdWRlcyhrZXl3b3JkKSA6IGRlZi5rZXl3b3JkICE9PSBrZXl3b3JkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcImFqdiBpbXBsZW1lbnRhdGlvbiBlcnJvclwiKTtcbiAgICB9XG4gICAgY29uc3QgZGVwcyA9IGRlZi5kZXBlbmRlbmNpZXM7XG4gICAgaWYgKGRlcHMgPT09IG51bGwgfHwgZGVwcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogZGVwcy5zb21lKChrd2QpID0+ICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc2NoZW1hLCBrd2QpKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHBhcmVudCBzY2hlbWEgbXVzdCBoYXZlIGRlcGVuZGVuY2llcyBvZiAke2tleXdvcmR9OiAke2RlcHMuam9pbihcIixcIil9YCk7XG4gICAgfVxuICAgIGlmIChkZWYudmFsaWRhdGVTY2hlbWEpIHtcbiAgICAgICAgY29uc3QgdmFsaWQgPSBkZWYudmFsaWRhdGVTY2hlbWEoc2NoZW1hW2tleXdvcmRdKTtcbiAgICAgICAgaWYgKCF2YWxpZCkge1xuICAgICAgICAgICAgY29uc3QgbXNnID0gYGtleXdvcmQgXCIke2tleXdvcmR9XCIgdmFsdWUgaXMgaW52YWxpZCBhdCBwYXRoIFwiJHtlcnJTY2hlbWFQYXRofVwiOiBgICtcbiAgICAgICAgICAgICAgICBzZWxmLmVycm9yc1RleHQoZGVmLnZhbGlkYXRlU2NoZW1hLmVycm9ycyk7XG4gICAgICAgICAgICBpZiAob3B0cy52YWxpZGF0ZVNjaGVtYSA9PT0gXCJsb2dcIilcbiAgICAgICAgICAgICAgICBzZWxmLmxvZ2dlci5lcnJvcihtc2cpO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihtc2cpO1xuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0cy52YWxpZGF0ZUtleXdvcmRVc2FnZSA9IHZhbGlkYXRlS2V5d29yZFVzYWdlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9a2V5d29yZC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5leHRlbmRTdWJzY2hlbWFNb2RlID0gZXhwb3J0cy5leHRlbmRTdWJzY2hlbWFEYXRhID0gZXhwb3J0cy5nZXRTdWJzY2hlbWEgPSB2b2lkIDA7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi4vY29kZWdlblwiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi91dGlsXCIpO1xuZnVuY3Rpb24gZ2V0U3Vic2NoZW1hKGl0LCB7IGtleXdvcmQsIHNjaGVtYVByb3AsIHNjaGVtYSwgc2NoZW1hUGF0aCwgZXJyU2NoZW1hUGF0aCwgdG9wU2NoZW1hUmVmIH0pIHtcbiAgICBpZiAoa2V5d29yZCAhPT0gdW5kZWZpbmVkICYmIHNjaGVtYSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignYm90aCBcImtleXdvcmRcIiBhbmQgXCJzY2hlbWFcIiBwYXNzZWQsIG9ubHkgb25lIGFsbG93ZWQnKTtcbiAgICB9XG4gICAgaWYgKGtleXdvcmQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCBzY2ggPSBpdC5zY2hlbWFba2V5d29yZF07XG4gICAgICAgIHJldHVybiBzY2hlbWFQcm9wID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgIHNjaGVtYTogc2NoLFxuICAgICAgICAgICAgICAgIHNjaGVtYVBhdGg6ICgwLCBjb2RlZ2VuXzEuXykgYCR7aXQuc2NoZW1hUGF0aH0keygwLCBjb2RlZ2VuXzEuZ2V0UHJvcGVydHkpKGtleXdvcmQpfWAsXG4gICAgICAgICAgICAgICAgZXJyU2NoZW1hUGF0aDogYCR7aXQuZXJyU2NoZW1hUGF0aH0vJHtrZXl3b3JkfWAsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICBzY2hlbWE6IHNjaFtzY2hlbWFQcm9wXSxcbiAgICAgICAgICAgICAgICBzY2hlbWFQYXRoOiAoMCwgY29kZWdlbl8xLl8pIGAke2l0LnNjaGVtYVBhdGh9JHsoMCwgY29kZWdlbl8xLmdldFByb3BlcnR5KShrZXl3b3JkKX0keygwLCBjb2RlZ2VuXzEuZ2V0UHJvcGVydHkpKHNjaGVtYVByb3ApfWAsXG4gICAgICAgICAgICAgICAgZXJyU2NoZW1hUGF0aDogYCR7aXQuZXJyU2NoZW1hUGF0aH0vJHtrZXl3b3JkfS8keygwLCB1dGlsXzEuZXNjYXBlRnJhZ21lbnQpKHNjaGVtYVByb3ApfWAsXG4gICAgICAgICAgICB9O1xuICAgIH1cbiAgICBpZiAoc2NoZW1hICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHNjaGVtYVBhdGggPT09IHVuZGVmaW5lZCB8fCBlcnJTY2hlbWFQYXRoID09PSB1bmRlZmluZWQgfHwgdG9wU2NoZW1hUmVmID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignXCJzY2hlbWFQYXRoXCIsIFwiZXJyU2NoZW1hUGF0aFwiIGFuZCBcInRvcFNjaGVtYVJlZlwiIGFyZSByZXF1aXJlZCB3aXRoIFwic2NoZW1hXCInKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc2NoZW1hLFxuICAgICAgICAgICAgc2NoZW1hUGF0aCxcbiAgICAgICAgICAgIHRvcFNjaGVtYVJlZixcbiAgICAgICAgICAgIGVyclNjaGVtYVBhdGgsXG4gICAgICAgIH07XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcignZWl0aGVyIFwia2V5d29yZFwiIG9yIFwic2NoZW1hXCIgbXVzdCBiZSBwYXNzZWQnKTtcbn1cbmV4cG9ydHMuZ2V0U3Vic2NoZW1hID0gZ2V0U3Vic2NoZW1hO1xuZnVuY3Rpb24gZXh0ZW5kU3Vic2NoZW1hRGF0YShzdWJzY2hlbWEsIGl0LCB7IGRhdGFQcm9wLCBkYXRhUHJvcFR5cGU6IGRwVHlwZSwgZGF0YSwgZGF0YVR5cGVzLCBwcm9wZXJ0eU5hbWUgfSkge1xuICAgIGlmIChkYXRhICE9PSB1bmRlZmluZWQgJiYgZGF0YVByb3AgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2JvdGggXCJkYXRhXCIgYW5kIFwiZGF0YVByb3BcIiBwYXNzZWQsIG9ubHkgb25lIGFsbG93ZWQnKTtcbiAgICB9XG4gICAgY29uc3QgeyBnZW4gfSA9IGl0O1xuICAgIGlmIChkYXRhUHJvcCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IHsgZXJyb3JQYXRoLCBkYXRhUGF0aEFyciwgb3B0cyB9ID0gaXQ7XG4gICAgICAgIGNvbnN0IG5leHREYXRhID0gZ2VuLmxldChcImRhdGFcIiwgKDAsIGNvZGVnZW5fMS5fKSBgJHtpdC5kYXRhfSR7KDAsIGNvZGVnZW5fMS5nZXRQcm9wZXJ0eSkoZGF0YVByb3ApfWAsIHRydWUpO1xuICAgICAgICBkYXRhQ29udGV4dFByb3BzKG5leHREYXRhKTtcbiAgICAgICAgc3Vic2NoZW1hLmVycm9yUGF0aCA9ICgwLCBjb2RlZ2VuXzEuc3RyKSBgJHtlcnJvclBhdGh9JHsoMCwgdXRpbF8xLmdldEVycm9yUGF0aCkoZGF0YVByb3AsIGRwVHlwZSwgb3B0cy5qc1Byb3BlcnR5U3ludGF4KX1gO1xuICAgICAgICBzdWJzY2hlbWEucGFyZW50RGF0YVByb3BlcnR5ID0gKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhUHJvcH1gO1xuICAgICAgICBzdWJzY2hlbWEuZGF0YVBhdGhBcnIgPSBbLi4uZGF0YVBhdGhBcnIsIHN1YnNjaGVtYS5wYXJlbnREYXRhUHJvcGVydHldO1xuICAgIH1cbiAgICBpZiAoZGF0YSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IG5leHREYXRhID0gZGF0YSBpbnN0YW5jZW9mIGNvZGVnZW5fMS5OYW1lID8gZGF0YSA6IGdlbi5sZXQoXCJkYXRhXCIsIGRhdGEsIHRydWUpOyAvLyByZXBsYWNlYWJsZSBpZiB1c2VkIG9uY2U/XG4gICAgICAgIGRhdGFDb250ZXh0UHJvcHMobmV4dERhdGEpO1xuICAgICAgICBpZiAocHJvcGVydHlOYW1lICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICBzdWJzY2hlbWEucHJvcGVydHlOYW1lID0gcHJvcGVydHlOYW1lO1xuICAgICAgICAvLyBUT0RPIHNvbWV0aGluZyBpcyBwb3NzaWJseSB3cm9uZyBoZXJlIHdpdGggbm90IGNoYW5naW5nIHBhcmVudERhdGFQcm9wZXJ0eSBhbmQgbm90IGFwcGVuZGluZyBkYXRhUGF0aEFyclxuICAgIH1cbiAgICBpZiAoZGF0YVR5cGVzKVxuICAgICAgICBzdWJzY2hlbWEuZGF0YVR5cGVzID0gZGF0YVR5cGVzO1xuICAgIGZ1bmN0aW9uIGRhdGFDb250ZXh0UHJvcHMoX25leHREYXRhKSB7XG4gICAgICAgIHN1YnNjaGVtYS5kYXRhID0gX25leHREYXRhO1xuICAgICAgICBzdWJzY2hlbWEuZGF0YUxldmVsID0gaXQuZGF0YUxldmVsICsgMTtcbiAgICAgICAgc3Vic2NoZW1hLmRhdGFUeXBlcyA9IFtdO1xuICAgICAgICBpdC5kZWZpbmVkUHJvcGVydGllcyA9IG5ldyBTZXQoKTtcbiAgICAgICAgc3Vic2NoZW1hLnBhcmVudERhdGEgPSBpdC5kYXRhO1xuICAgICAgICBzdWJzY2hlbWEuZGF0YU5hbWVzID0gWy4uLml0LmRhdGFOYW1lcywgX25leHREYXRhXTtcbiAgICB9XG59XG5leHBvcnRzLmV4dGVuZFN1YnNjaGVtYURhdGEgPSBleHRlbmRTdWJzY2hlbWFEYXRhO1xuZnVuY3Rpb24gZXh0ZW5kU3Vic2NoZW1hTW9kZShzdWJzY2hlbWEsIHsganRkRGlzY3JpbWluYXRvciwganRkTWV0YWRhdGEsIGNvbXBvc2l0ZVJ1bGUsIGNyZWF0ZUVycm9ycywgYWxsRXJyb3JzIH0pIHtcbiAgICBpZiAoY29tcG9zaXRlUnVsZSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICBzdWJzY2hlbWEuY29tcG9zaXRlUnVsZSA9IGNvbXBvc2l0ZVJ1bGU7XG4gICAgaWYgKGNyZWF0ZUVycm9ycyAhPT0gdW5kZWZpbmVkKVxuICAgICAgICBzdWJzY2hlbWEuY3JlYXRlRXJyb3JzID0gY3JlYXRlRXJyb3JzO1xuICAgIGlmIChhbGxFcnJvcnMgIT09IHVuZGVmaW5lZClcbiAgICAgICAgc3Vic2NoZW1hLmFsbEVycm9ycyA9IGFsbEVycm9ycztcbiAgICBzdWJzY2hlbWEuanRkRGlzY3JpbWluYXRvciA9IGp0ZERpc2NyaW1pbmF0b3I7IC8vIG5vdCBpbmhlcml0ZWRcbiAgICBzdWJzY2hlbWEuanRkTWV0YWRhdGEgPSBqdGRNZXRhZGF0YTsgLy8gbm90IGluaGVyaXRlZFxufVxuZXhwb3J0cy5leHRlbmRTdWJzY2hlbWFNb2RlID0gZXh0ZW5kU3Vic2NoZW1hTW9kZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXN1YnNjaGVtYS5qcy5tYXAiLAogICAgIid1c2Ugc3RyaWN0JztcblxuLy8gZG8gbm90IGVkaXQgLmpzIGZpbGVzIGRpcmVjdGx5IC0gZWRpdCBzcmMvaW5kZXguanN0XG5cblxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGVxdWFsKGEsIGIpIHtcbiAgaWYgKGEgPT09IGIpIHJldHVybiB0cnVlO1xuXG4gIGlmIChhICYmIGIgJiYgdHlwZW9mIGEgPT0gJ29iamVjdCcgJiYgdHlwZW9mIGIgPT0gJ29iamVjdCcpIHtcbiAgICBpZiAoYS5jb25zdHJ1Y3RvciAhPT0gYi5jb25zdHJ1Y3RvcikgcmV0dXJuIGZhbHNlO1xuXG4gICAgdmFyIGxlbmd0aCwgaSwga2V5cztcbiAgICBpZiAoQXJyYXkuaXNBcnJheShhKSkge1xuICAgICAgbGVuZ3RoID0gYS5sZW5ndGg7XG4gICAgICBpZiAobGVuZ3RoICE9IGIubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gICAgICBmb3IgKGkgPSBsZW5ndGg7IGktLSAhPT0gMDspXG4gICAgICAgIGlmICghZXF1YWwoYVtpXSwgYltpXSkpIHJldHVybiBmYWxzZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuXG5cbiAgICBpZiAoYS5jb25zdHJ1Y3RvciA9PT0gUmVnRXhwKSByZXR1cm4gYS5zb3VyY2UgPT09IGIuc291cmNlICYmIGEuZmxhZ3MgPT09IGIuZmxhZ3M7XG4gICAgaWYgKGEudmFsdWVPZiAhPT0gT2JqZWN0LnByb3RvdHlwZS52YWx1ZU9mKSByZXR1cm4gYS52YWx1ZU9mKCkgPT09IGIudmFsdWVPZigpO1xuICAgIGlmIChhLnRvU3RyaW5nICE9PSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nKSByZXR1cm4gYS50b1N0cmluZygpID09PSBiLnRvU3RyaW5nKCk7XG5cbiAgICBrZXlzID0gT2JqZWN0LmtleXMoYSk7XG4gICAgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gICAgaWYgKGxlbmd0aCAhPT0gT2JqZWN0LmtleXMoYikubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG5cbiAgICBmb3IgKGkgPSBsZW5ndGg7IGktLSAhPT0gMDspXG4gICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBrZXlzW2ldKSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgZm9yIChpID0gbGVuZ3RoOyBpLS0gIT09IDA7KSB7XG4gICAgICB2YXIga2V5ID0ga2V5c1tpXTtcblxuICAgICAgaWYgKCFlcXVhbChhW2tleV0sIGJba2V5XSkpIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8vIHRydWUgaWYgYm90aCBOYU4sIGZhbHNlIG90aGVyd2lzZVxuICByZXR1cm4gYSE9PWEgJiYgYiE9PWI7XG59O1xuIiwKICAgICIndXNlIHN0cmljdCc7XG5cbnZhciB0cmF2ZXJzZSA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHNjaGVtYSwgb3B0cywgY2IpIHtcbiAgLy8gTGVnYWN5IHN1cHBvcnQgZm9yIHYwLjMuMSBhbmQgZWFybGllci5cbiAgaWYgKHR5cGVvZiBvcHRzID09ICdmdW5jdGlvbicpIHtcbiAgICBjYiA9IG9wdHM7XG4gICAgb3B0cyA9IHt9O1xuICB9XG5cbiAgY2IgPSBvcHRzLmNiIHx8IGNiO1xuICB2YXIgcHJlID0gKHR5cGVvZiBjYiA9PSAnZnVuY3Rpb24nKSA/IGNiIDogY2IucHJlIHx8IGZ1bmN0aW9uKCkge307XG4gIHZhciBwb3N0ID0gY2IucG9zdCB8fCBmdW5jdGlvbigpIHt9O1xuXG4gIF90cmF2ZXJzZShvcHRzLCBwcmUsIHBvc3QsIHNjaGVtYSwgJycsIHNjaGVtYSk7XG59O1xuXG5cbnRyYXZlcnNlLmtleXdvcmRzID0ge1xuICBhZGRpdGlvbmFsSXRlbXM6IHRydWUsXG4gIGl0ZW1zOiB0cnVlLFxuICBjb250YWluczogdHJ1ZSxcbiAgYWRkaXRpb25hbFByb3BlcnRpZXM6IHRydWUsXG4gIHByb3BlcnR5TmFtZXM6IHRydWUsXG4gIG5vdDogdHJ1ZSxcbiAgaWY6IHRydWUsXG4gIHRoZW46IHRydWUsXG4gIGVsc2U6IHRydWVcbn07XG5cbnRyYXZlcnNlLmFycmF5S2V5d29yZHMgPSB7XG4gIGl0ZW1zOiB0cnVlLFxuICBhbGxPZjogdHJ1ZSxcbiAgYW55T2Y6IHRydWUsXG4gIG9uZU9mOiB0cnVlXG59O1xuXG50cmF2ZXJzZS5wcm9wc0tleXdvcmRzID0ge1xuICAkZGVmczogdHJ1ZSxcbiAgZGVmaW5pdGlvbnM6IHRydWUsXG4gIHByb3BlcnRpZXM6IHRydWUsXG4gIHBhdHRlcm5Qcm9wZXJ0aWVzOiB0cnVlLFxuICBkZXBlbmRlbmNpZXM6IHRydWVcbn07XG5cbnRyYXZlcnNlLnNraXBLZXl3b3JkcyA9IHtcbiAgZGVmYXVsdDogdHJ1ZSxcbiAgZW51bTogdHJ1ZSxcbiAgY29uc3Q6IHRydWUsXG4gIHJlcXVpcmVkOiB0cnVlLFxuICBtYXhpbXVtOiB0cnVlLFxuICBtaW5pbXVtOiB0cnVlLFxuICBleGNsdXNpdmVNYXhpbXVtOiB0cnVlLFxuICBleGNsdXNpdmVNaW5pbXVtOiB0cnVlLFxuICBtdWx0aXBsZU9mOiB0cnVlLFxuICBtYXhMZW5ndGg6IHRydWUsXG4gIG1pbkxlbmd0aDogdHJ1ZSxcbiAgcGF0dGVybjogdHJ1ZSxcbiAgZm9ybWF0OiB0cnVlLFxuICBtYXhJdGVtczogdHJ1ZSxcbiAgbWluSXRlbXM6IHRydWUsXG4gIHVuaXF1ZUl0ZW1zOiB0cnVlLFxuICBtYXhQcm9wZXJ0aWVzOiB0cnVlLFxuICBtaW5Qcm9wZXJ0aWVzOiB0cnVlXG59O1xuXG5cbmZ1bmN0aW9uIF90cmF2ZXJzZShvcHRzLCBwcmUsIHBvc3QsIHNjaGVtYSwganNvblB0ciwgcm9vdFNjaGVtYSwgcGFyZW50SnNvblB0ciwgcGFyZW50S2V5d29yZCwgcGFyZW50U2NoZW1hLCBrZXlJbmRleCkge1xuICBpZiAoc2NoZW1hICYmIHR5cGVvZiBzY2hlbWEgPT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkoc2NoZW1hKSkge1xuICAgIHByZShzY2hlbWEsIGpzb25QdHIsIHJvb3RTY2hlbWEsIHBhcmVudEpzb25QdHIsIHBhcmVudEtleXdvcmQsIHBhcmVudFNjaGVtYSwga2V5SW5kZXgpO1xuICAgIGZvciAodmFyIGtleSBpbiBzY2hlbWEpIHtcbiAgICAgIHZhciBzY2ggPSBzY2hlbWFba2V5XTtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHNjaCkpIHtcbiAgICAgICAgaWYgKGtleSBpbiB0cmF2ZXJzZS5hcnJheUtleXdvcmRzKSB7XG4gICAgICAgICAgZm9yICh2YXIgaT0wOyBpPHNjaC5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgIF90cmF2ZXJzZShvcHRzLCBwcmUsIHBvc3QsIHNjaFtpXSwganNvblB0ciArICcvJyArIGtleSArICcvJyArIGksIHJvb3RTY2hlbWEsIGpzb25QdHIsIGtleSwgc2NoZW1hLCBpKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChrZXkgaW4gdHJhdmVyc2UucHJvcHNLZXl3b3Jkcykge1xuICAgICAgICBpZiAoc2NoICYmIHR5cGVvZiBzY2ggPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICBmb3IgKHZhciBwcm9wIGluIHNjaClcbiAgICAgICAgICAgIF90cmF2ZXJzZShvcHRzLCBwcmUsIHBvc3QsIHNjaFtwcm9wXSwganNvblB0ciArICcvJyArIGtleSArICcvJyArIGVzY2FwZUpzb25QdHIocHJvcCksIHJvb3RTY2hlbWEsIGpzb25QdHIsIGtleSwgc2NoZW1hLCBwcm9wKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChrZXkgaW4gdHJhdmVyc2Uua2V5d29yZHMgfHwgKG9wdHMuYWxsS2V5cyAmJiAhKGtleSBpbiB0cmF2ZXJzZS5za2lwS2V5d29yZHMpKSkge1xuICAgICAgICBfdHJhdmVyc2Uob3B0cywgcHJlLCBwb3N0LCBzY2gsIGpzb25QdHIgKyAnLycgKyBrZXksIHJvb3RTY2hlbWEsIGpzb25QdHIsIGtleSwgc2NoZW1hKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcG9zdChzY2hlbWEsIGpzb25QdHIsIHJvb3RTY2hlbWEsIHBhcmVudEpzb25QdHIsIHBhcmVudEtleXdvcmQsIHBhcmVudFNjaGVtYSwga2V5SW5kZXgpO1xuICB9XG59XG5cblxuZnVuY3Rpb24gZXNjYXBlSnNvblB0cihzdHIpIHtcbiAgcmV0dXJuIHN0ci5yZXBsYWNlKC9+L2csICd+MCcpLnJlcGxhY2UoL1xcLy9nLCAnfjEnKTtcbn1cbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldFNjaGVtYVJlZnMgPSBleHBvcnRzLnJlc29sdmVVcmwgPSBleHBvcnRzLm5vcm1hbGl6ZUlkID0gZXhwb3J0cy5fZ2V0RnVsbFBhdGggPSBleHBvcnRzLmdldEZ1bGxQYXRoID0gZXhwb3J0cy5pbmxpbmVSZWYgPSB2b2lkIDA7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi91dGlsXCIpO1xuY29uc3QgZXF1YWwgPSByZXF1aXJlKFwiZmFzdC1kZWVwLWVxdWFsXCIpO1xuY29uc3QgdHJhdmVyc2UgPSByZXF1aXJlKFwianNvbi1zY2hlbWEtdHJhdmVyc2VcIik7XG4vLyBUT0RPIHJlZmFjdG9yIHRvIHVzZSBrZXl3b3JkIGRlZmluaXRpb25zXG5jb25zdCBTSU1QTEVfSU5MSU5FRCA9IG5ldyBTZXQoW1xuICAgIFwidHlwZVwiLFxuICAgIFwiZm9ybWF0XCIsXG4gICAgXCJwYXR0ZXJuXCIsXG4gICAgXCJtYXhMZW5ndGhcIixcbiAgICBcIm1pbkxlbmd0aFwiLFxuICAgIFwibWF4UHJvcGVydGllc1wiLFxuICAgIFwibWluUHJvcGVydGllc1wiLFxuICAgIFwibWF4SXRlbXNcIixcbiAgICBcIm1pbkl0ZW1zXCIsXG4gICAgXCJtYXhpbXVtXCIsXG4gICAgXCJtaW5pbXVtXCIsXG4gICAgXCJ1bmlxdWVJdGVtc1wiLFxuICAgIFwibXVsdGlwbGVPZlwiLFxuICAgIFwicmVxdWlyZWRcIixcbiAgICBcImVudW1cIixcbiAgICBcImNvbnN0XCIsXG5dKTtcbmZ1bmN0aW9uIGlubGluZVJlZihzY2hlbWEsIGxpbWl0ID0gdHJ1ZSkge1xuICAgIGlmICh0eXBlb2Ygc2NoZW1hID09IFwiYm9vbGVhblwiKVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICBpZiAobGltaXQgPT09IHRydWUpXG4gICAgICAgIHJldHVybiAhaGFzUmVmKHNjaGVtYSk7XG4gICAgaWYgKCFsaW1pdClcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiBjb3VudEtleXMoc2NoZW1hKSA8PSBsaW1pdDtcbn1cbmV4cG9ydHMuaW5saW5lUmVmID0gaW5saW5lUmVmO1xuY29uc3QgUkVGX0tFWVdPUkRTID0gbmV3IFNldChbXG4gICAgXCIkcmVmXCIsXG4gICAgXCIkcmVjdXJzaXZlUmVmXCIsXG4gICAgXCIkcmVjdXJzaXZlQW5jaG9yXCIsXG4gICAgXCIkZHluYW1pY1JlZlwiLFxuICAgIFwiJGR5bmFtaWNBbmNob3JcIixcbl0pO1xuZnVuY3Rpb24gaGFzUmVmKHNjaGVtYSkge1xuICAgIGZvciAoY29uc3Qga2V5IGluIHNjaGVtYSkge1xuICAgICAgICBpZiAoUkVGX0tFWVdPUkRTLmhhcyhrZXkpKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIGNvbnN0IHNjaCA9IHNjaGVtYVtrZXldO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShzY2gpICYmIHNjaC5zb21lKGhhc1JlZikpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgaWYgKHR5cGVvZiBzY2ggPT0gXCJvYmplY3RcIiAmJiBoYXNSZWYoc2NoKSlcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5mdW5jdGlvbiBjb3VudEtleXMoc2NoZW1hKSB7XG4gICAgbGV0IGNvdW50ID0gMDtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBzY2hlbWEpIHtcbiAgICAgICAgaWYgKGtleSA9PT0gXCIkcmVmXCIpXG4gICAgICAgICAgICByZXR1cm4gSW5maW5pdHk7XG4gICAgICAgIGNvdW50Kys7XG4gICAgICAgIGlmIChTSU1QTEVfSU5MSU5FRC5oYXMoa2V5KSlcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBpZiAodHlwZW9mIHNjaGVtYVtrZXldID09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgICgwLCB1dGlsXzEuZWFjaEl0ZW0pKHNjaGVtYVtrZXldLCAoc2NoKSA9PiAoY291bnQgKz0gY291bnRLZXlzKHNjaCkpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY291bnQgPT09IEluZmluaXR5KVxuICAgICAgICAgICAgcmV0dXJuIEluZmluaXR5O1xuICAgIH1cbiAgICByZXR1cm4gY291bnQ7XG59XG5mdW5jdGlvbiBnZXRGdWxsUGF0aChyZXNvbHZlciwgaWQgPSBcIlwiLCBub3JtYWxpemUpIHtcbiAgICBpZiAobm9ybWFsaXplICE9PSBmYWxzZSlcbiAgICAgICAgaWQgPSBub3JtYWxpemVJZChpZCk7XG4gICAgY29uc3QgcCA9IHJlc29sdmVyLnBhcnNlKGlkKTtcbiAgICByZXR1cm4gX2dldEZ1bGxQYXRoKHJlc29sdmVyLCBwKTtcbn1cbmV4cG9ydHMuZ2V0RnVsbFBhdGggPSBnZXRGdWxsUGF0aDtcbmZ1bmN0aW9uIF9nZXRGdWxsUGF0aChyZXNvbHZlciwgcCkge1xuICAgIGNvbnN0IHNlcmlhbGl6ZWQgPSByZXNvbHZlci5zZXJpYWxpemUocCk7XG4gICAgcmV0dXJuIHNlcmlhbGl6ZWQuc3BsaXQoXCIjXCIpWzBdICsgXCIjXCI7XG59XG5leHBvcnRzLl9nZXRGdWxsUGF0aCA9IF9nZXRGdWxsUGF0aDtcbmNvbnN0IFRSQUlMSU5HX1NMQVNIX0hBU0ggPSAvI1xcLz8kLztcbmZ1bmN0aW9uIG5vcm1hbGl6ZUlkKGlkKSB7XG4gICAgcmV0dXJuIGlkID8gaWQucmVwbGFjZShUUkFJTElOR19TTEFTSF9IQVNILCBcIlwiKSA6IFwiXCI7XG59XG5leHBvcnRzLm5vcm1hbGl6ZUlkID0gbm9ybWFsaXplSWQ7XG5mdW5jdGlvbiByZXNvbHZlVXJsKHJlc29sdmVyLCBiYXNlSWQsIGlkKSB7XG4gICAgaWQgPSBub3JtYWxpemVJZChpZCk7XG4gICAgcmV0dXJuIHJlc29sdmVyLnJlc29sdmUoYmFzZUlkLCBpZCk7XG59XG5leHBvcnRzLnJlc29sdmVVcmwgPSByZXNvbHZlVXJsO1xuY29uc3QgQU5DSE9SID0gL15bYS16X11bLWEtejAtOS5fXSokL2k7XG5mdW5jdGlvbiBnZXRTY2hlbWFSZWZzKHNjaGVtYSwgYmFzZUlkKSB7XG4gICAgaWYgKHR5cGVvZiBzY2hlbWEgPT0gXCJib29sZWFuXCIpXG4gICAgICAgIHJldHVybiB7fTtcbiAgICBjb25zdCB7IHNjaGVtYUlkLCB1cmlSZXNvbHZlciB9ID0gdGhpcy5vcHRzO1xuICAgIGNvbnN0IHNjaElkID0gbm9ybWFsaXplSWQoc2NoZW1hW3NjaGVtYUlkXSB8fCBiYXNlSWQpO1xuICAgIGNvbnN0IGJhc2VJZHMgPSB7IFwiXCI6IHNjaElkIH07XG4gICAgY29uc3QgcGF0aFByZWZpeCA9IGdldEZ1bGxQYXRoKHVyaVJlc29sdmVyLCBzY2hJZCwgZmFsc2UpO1xuICAgIGNvbnN0IGxvY2FsUmVmcyA9IHt9O1xuICAgIGNvbnN0IHNjaGVtYVJlZnMgPSBuZXcgU2V0KCk7XG4gICAgdHJhdmVyc2Uoc2NoZW1hLCB7IGFsbEtleXM6IHRydWUgfSwgKHNjaCwganNvblB0ciwgXywgcGFyZW50SnNvblB0cikgPT4ge1xuICAgICAgICBpZiAocGFyZW50SnNvblB0ciA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCBmdWxsUGF0aCA9IHBhdGhQcmVmaXggKyBqc29uUHRyO1xuICAgICAgICBsZXQgaW5uZXJCYXNlSWQgPSBiYXNlSWRzW3BhcmVudEpzb25QdHJdO1xuICAgICAgICBpZiAodHlwZW9mIHNjaFtzY2hlbWFJZF0gPT0gXCJzdHJpbmdcIilcbiAgICAgICAgICAgIGlubmVyQmFzZUlkID0gYWRkUmVmLmNhbGwodGhpcywgc2NoW3NjaGVtYUlkXSk7XG4gICAgICAgIGFkZEFuY2hvci5jYWxsKHRoaXMsIHNjaC4kYW5jaG9yKTtcbiAgICAgICAgYWRkQW5jaG9yLmNhbGwodGhpcywgc2NoLiRkeW5hbWljQW5jaG9yKTtcbiAgICAgICAgYmFzZUlkc1tqc29uUHRyXSA9IGlubmVyQmFzZUlkO1xuICAgICAgICBmdW5jdGlvbiBhZGRSZWYocmVmKSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3VuYm91bmQtbWV0aG9kXG4gICAgICAgICAgICBjb25zdCBfcmVzb2x2ZSA9IHRoaXMub3B0cy51cmlSZXNvbHZlci5yZXNvbHZlO1xuICAgICAgICAgICAgcmVmID0gbm9ybWFsaXplSWQoaW5uZXJCYXNlSWQgPyBfcmVzb2x2ZShpbm5lckJhc2VJZCwgcmVmKSA6IHJlZik7XG4gICAgICAgICAgICBpZiAoc2NoZW1hUmVmcy5oYXMocmVmKSlcbiAgICAgICAgICAgICAgICB0aHJvdyBhbWJpZ3VvcyhyZWYpO1xuICAgICAgICAgICAgc2NoZW1hUmVmcy5hZGQocmVmKTtcbiAgICAgICAgICAgIGxldCBzY2hPclJlZiA9IHRoaXMucmVmc1tyZWZdO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBzY2hPclJlZiA9PSBcInN0cmluZ1wiKVxuICAgICAgICAgICAgICAgIHNjaE9yUmVmID0gdGhpcy5yZWZzW3NjaE9yUmVmXTtcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc2NoT3JSZWYgPT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgICAgIGNoZWNrQW1iaWd1b3NSZWYoc2NoLCBzY2hPclJlZi5zY2hlbWEsIHJlZik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChyZWYgIT09IG5vcm1hbGl6ZUlkKGZ1bGxQYXRoKSkge1xuICAgICAgICAgICAgICAgIGlmIChyZWZbMF0gPT09IFwiI1wiKSB7XG4gICAgICAgICAgICAgICAgICAgIGNoZWNrQW1iaWd1b3NSZWYoc2NoLCBsb2NhbFJlZnNbcmVmXSwgcmVmKTtcbiAgICAgICAgICAgICAgICAgICAgbG9jYWxSZWZzW3JlZl0gPSBzY2g7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlZnNbcmVmXSA9IGZ1bGxQYXRoO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZWY7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gYWRkQW5jaG9yKGFuY2hvcikge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBhbmNob3IgPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgIGlmICghQU5DSE9SLnRlc3QoYW5jaG9yKSlcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIGFuY2hvciBcIiR7YW5jaG9yfVwiYCk7XG4gICAgICAgICAgICAgICAgYWRkUmVmLmNhbGwodGhpcywgYCMke2FuY2hvcn1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBsb2NhbFJlZnM7XG4gICAgZnVuY3Rpb24gY2hlY2tBbWJpZ3Vvc1JlZihzY2gxLCBzY2gyLCByZWYpIHtcbiAgICAgICAgaWYgKHNjaDIgIT09IHVuZGVmaW5lZCAmJiAhZXF1YWwoc2NoMSwgc2NoMikpXG4gICAgICAgICAgICB0aHJvdyBhbWJpZ3VvcyhyZWYpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBhbWJpZ3VvcyhyZWYpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBFcnJvcihgcmVmZXJlbmNlIFwiJHtyZWZ9XCIgcmVzb2x2ZXMgdG8gbW9yZSB0aGFuIG9uZSBzY2hlbWFgKTtcbiAgICB9XG59XG5leHBvcnRzLmdldFNjaGVtYVJlZnMgPSBnZXRTY2hlbWFSZWZzO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmVzb2x2ZS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXREYXRhID0gZXhwb3J0cy5LZXl3b3JkQ3h0ID0gZXhwb3J0cy52YWxpZGF0ZUZ1bmN0aW9uQ29kZSA9IHZvaWQgMDtcbmNvbnN0IGJvb2xTY2hlbWFfMSA9IHJlcXVpcmUoXCIuL2Jvb2xTY2hlbWFcIik7XG5jb25zdCBkYXRhVHlwZV8xID0gcmVxdWlyZShcIi4vZGF0YVR5cGVcIik7XG5jb25zdCBhcHBsaWNhYmlsaXR5XzEgPSByZXF1aXJlKFwiLi9hcHBsaWNhYmlsaXR5XCIpO1xuY29uc3QgZGF0YVR5cGVfMiA9IHJlcXVpcmUoXCIuL2RhdGFUeXBlXCIpO1xuY29uc3QgZGVmYXVsdHNfMSA9IHJlcXVpcmUoXCIuL2RlZmF1bHRzXCIpO1xuY29uc3Qga2V5d29yZF8xID0gcmVxdWlyZShcIi4va2V5d29yZFwiKTtcbmNvbnN0IHN1YnNjaGVtYV8xID0gcmVxdWlyZShcIi4vc3Vic2NoZW1hXCIpO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uL2NvZGVnZW5cIik7XG5jb25zdCBuYW1lc18xID0gcmVxdWlyZShcIi4uL25hbWVzXCIpO1xuY29uc3QgcmVzb2x2ZV8xID0gcmVxdWlyZShcIi4uL3Jlc29sdmVcIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi4vdXRpbFwiKTtcbmNvbnN0IGVycm9yc18xID0gcmVxdWlyZShcIi4uL2Vycm9yc1wiKTtcbi8vIHNjaGVtYSBjb21waWxhdGlvbiAtIGdlbmVyYXRlcyB2YWxpZGF0aW9uIGZ1bmN0aW9uLCBzdWJzY2hlbWFDb2RlIChiZWxvdykgaXMgdXNlZCBmb3Igc3Vic2NoZW1hc1xuZnVuY3Rpb24gdmFsaWRhdGVGdW5jdGlvbkNvZGUoaXQpIHtcbiAgICBpZiAoaXNTY2hlbWFPYmooaXQpKSB7XG4gICAgICAgIGNoZWNrS2V5d29yZHMoaXQpO1xuICAgICAgICBpZiAoc2NoZW1hQ3h0SGFzUnVsZXMoaXQpKSB7XG4gICAgICAgICAgICB0b3BTY2hlbWFPYmpDb2RlKGl0KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgIH1cbiAgICB2YWxpZGF0ZUZ1bmN0aW9uKGl0LCAoKSA9PiAoMCwgYm9vbFNjaGVtYV8xLnRvcEJvb2xPckVtcHR5U2NoZW1hKShpdCkpO1xufVxuZXhwb3J0cy52YWxpZGF0ZUZ1bmN0aW9uQ29kZSA9IHZhbGlkYXRlRnVuY3Rpb25Db2RlO1xuZnVuY3Rpb24gdmFsaWRhdGVGdW5jdGlvbih7IGdlbiwgdmFsaWRhdGVOYW1lLCBzY2hlbWEsIHNjaGVtYUVudiwgb3B0cyB9LCBib2R5KSB7XG4gICAgaWYgKG9wdHMuY29kZS5lczUpIHtcbiAgICAgICAgZ2VuLmZ1bmModmFsaWRhdGVOYW1lLCAoMCwgY29kZWdlbl8xLl8pIGAke25hbWVzXzEuZGVmYXVsdC5kYXRhfSwgJHtuYW1lc18xLmRlZmF1bHQudmFsQ3h0fWAsIHNjaGVtYUVudi4kYXN5bmMsICgpID0+IHtcbiAgICAgICAgICAgIGdlbi5jb2RlKCgwLCBjb2RlZ2VuXzEuXykgYFwidXNlIHN0cmljdFwiOyAke2Z1bmNTb3VyY2VVcmwoc2NoZW1hLCBvcHRzKX1gKTtcbiAgICAgICAgICAgIGRlc3RydWN0dXJlVmFsQ3h0RVM1KGdlbiwgb3B0cyk7XG4gICAgICAgICAgICBnZW4uY29kZShib2R5KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBnZW4uZnVuYyh2YWxpZGF0ZU5hbWUsICgwLCBjb2RlZ2VuXzEuXykgYCR7bmFtZXNfMS5kZWZhdWx0LmRhdGF9LCAke2Rlc3RydWN0dXJlVmFsQ3h0KG9wdHMpfWAsIHNjaGVtYUVudi4kYXN5bmMsICgpID0+IGdlbi5jb2RlKGZ1bmNTb3VyY2VVcmwoc2NoZW1hLCBvcHRzKSkuY29kZShib2R5KSk7XG4gICAgfVxufVxuZnVuY3Rpb24gZGVzdHJ1Y3R1cmVWYWxDeHQob3B0cykge1xuICAgIHJldHVybiAoMCwgY29kZWdlbl8xLl8pIGB7JHtuYW1lc18xLmRlZmF1bHQuaW5zdGFuY2VQYXRofT1cIlwiLCAke25hbWVzXzEuZGVmYXVsdC5wYXJlbnREYXRhfSwgJHtuYW1lc18xLmRlZmF1bHQucGFyZW50RGF0YVByb3BlcnR5fSwgJHtuYW1lc18xLmRlZmF1bHQucm9vdERhdGF9PSR7bmFtZXNfMS5kZWZhdWx0LmRhdGF9JHtvcHRzLmR5bmFtaWNSZWYgPyAoMCwgY29kZWdlbl8xLl8pIGAsICR7bmFtZXNfMS5kZWZhdWx0LmR5bmFtaWNBbmNob3JzfT17fWAgOiBjb2RlZ2VuXzEubmlsfX09e31gO1xufVxuZnVuY3Rpb24gZGVzdHJ1Y3R1cmVWYWxDeHRFUzUoZ2VuLCBvcHRzKSB7XG4gICAgZ2VuLmlmKG5hbWVzXzEuZGVmYXVsdC52YWxDeHQsICgpID0+IHtcbiAgICAgICAgZ2VuLnZhcihuYW1lc18xLmRlZmF1bHQuaW5zdGFuY2VQYXRoLCAoMCwgY29kZWdlbl8xLl8pIGAke25hbWVzXzEuZGVmYXVsdC52YWxDeHR9LiR7bmFtZXNfMS5kZWZhdWx0Lmluc3RhbmNlUGF0aH1gKTtcbiAgICAgICAgZ2VuLnZhcihuYW1lc18xLmRlZmF1bHQucGFyZW50RGF0YSwgKDAsIGNvZGVnZW5fMS5fKSBgJHtuYW1lc18xLmRlZmF1bHQudmFsQ3h0fS4ke25hbWVzXzEuZGVmYXVsdC5wYXJlbnREYXRhfWApO1xuICAgICAgICBnZW4udmFyKG5hbWVzXzEuZGVmYXVsdC5wYXJlbnREYXRhUHJvcGVydHksICgwLCBjb2RlZ2VuXzEuXykgYCR7bmFtZXNfMS5kZWZhdWx0LnZhbEN4dH0uJHtuYW1lc18xLmRlZmF1bHQucGFyZW50RGF0YVByb3BlcnR5fWApO1xuICAgICAgICBnZW4udmFyKG5hbWVzXzEuZGVmYXVsdC5yb290RGF0YSwgKDAsIGNvZGVnZW5fMS5fKSBgJHtuYW1lc18xLmRlZmF1bHQudmFsQ3h0fS4ke25hbWVzXzEuZGVmYXVsdC5yb290RGF0YX1gKTtcbiAgICAgICAgaWYgKG9wdHMuZHluYW1pY1JlZilcbiAgICAgICAgICAgIGdlbi52YXIobmFtZXNfMS5kZWZhdWx0LmR5bmFtaWNBbmNob3JzLCAoMCwgY29kZWdlbl8xLl8pIGAke25hbWVzXzEuZGVmYXVsdC52YWxDeHR9LiR7bmFtZXNfMS5kZWZhdWx0LmR5bmFtaWNBbmNob3JzfWApO1xuICAgIH0sICgpID0+IHtcbiAgICAgICAgZ2VuLnZhcihuYW1lc18xLmRlZmF1bHQuaW5zdGFuY2VQYXRoLCAoMCwgY29kZWdlbl8xLl8pIGBcIlwiYCk7XG4gICAgICAgIGdlbi52YXIobmFtZXNfMS5kZWZhdWx0LnBhcmVudERhdGEsICgwLCBjb2RlZ2VuXzEuXykgYHVuZGVmaW5lZGApO1xuICAgICAgICBnZW4udmFyKG5hbWVzXzEuZGVmYXVsdC5wYXJlbnREYXRhUHJvcGVydHksICgwLCBjb2RlZ2VuXzEuXykgYHVuZGVmaW5lZGApO1xuICAgICAgICBnZW4udmFyKG5hbWVzXzEuZGVmYXVsdC5yb290RGF0YSwgbmFtZXNfMS5kZWZhdWx0LmRhdGEpO1xuICAgICAgICBpZiAob3B0cy5keW5hbWljUmVmKVxuICAgICAgICAgICAgZ2VuLnZhcihuYW1lc18xLmRlZmF1bHQuZHluYW1pY0FuY2hvcnMsICgwLCBjb2RlZ2VuXzEuXykgYHt9YCk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiB0b3BTY2hlbWFPYmpDb2RlKGl0KSB7XG4gICAgY29uc3QgeyBzY2hlbWEsIG9wdHMsIGdlbiB9ID0gaXQ7XG4gICAgdmFsaWRhdGVGdW5jdGlvbihpdCwgKCkgPT4ge1xuICAgICAgICBpZiAob3B0cy4kY29tbWVudCAmJiBzY2hlbWEuJGNvbW1lbnQpXG4gICAgICAgICAgICBjb21tZW50S2V5d29yZChpdCk7XG4gICAgICAgIGNoZWNrTm9EZWZhdWx0KGl0KTtcbiAgICAgICAgZ2VuLmxldChuYW1lc18xLmRlZmF1bHQudkVycm9ycywgbnVsbCk7XG4gICAgICAgIGdlbi5sZXQobmFtZXNfMS5kZWZhdWx0LmVycm9ycywgMCk7XG4gICAgICAgIGlmIChvcHRzLnVuZXZhbHVhdGVkKVxuICAgICAgICAgICAgcmVzZXRFdmFsdWF0ZWQoaXQpO1xuICAgICAgICB0eXBlQW5kS2V5d29yZHMoaXQpO1xuICAgICAgICByZXR1cm5SZXN1bHRzKGl0KTtcbiAgICB9KTtcbiAgICByZXR1cm47XG59XG5mdW5jdGlvbiByZXNldEV2YWx1YXRlZChpdCkge1xuICAgIC8vIFRPRE8gbWF5YmUgc29tZSBob29rIHRvIGV4ZWN1dGUgaXQgaW4gdGhlIGVuZCB0byBjaGVjayB3aGV0aGVyIHByb3BzL2l0ZW1zIGFyZSBOYW1lLCBhcyBpbiBhc3NpZ25FdmFsdWF0ZWRcbiAgICBjb25zdCB7IGdlbiwgdmFsaWRhdGVOYW1lIH0gPSBpdDtcbiAgICBpdC5ldmFsdWF0ZWQgPSBnZW4uY29uc3QoXCJldmFsdWF0ZWRcIiwgKDAsIGNvZGVnZW5fMS5fKSBgJHt2YWxpZGF0ZU5hbWV9LmV2YWx1YXRlZGApO1xuICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGAke2l0LmV2YWx1YXRlZH0uZHluYW1pY1Byb3BzYCwgKCkgPT4gZ2VuLmFzc2lnbigoMCwgY29kZWdlbl8xLl8pIGAke2l0LmV2YWx1YXRlZH0ucHJvcHNgLCAoMCwgY29kZWdlbl8xLl8pIGB1bmRlZmluZWRgKSk7XG4gICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7aXQuZXZhbHVhdGVkfS5keW5hbWljSXRlbXNgLCAoKSA9PiBnZW4uYXNzaWduKCgwLCBjb2RlZ2VuXzEuXykgYCR7aXQuZXZhbHVhdGVkfS5pdGVtc2AsICgwLCBjb2RlZ2VuXzEuXykgYHVuZGVmaW5lZGApKTtcbn1cbmZ1bmN0aW9uIGZ1bmNTb3VyY2VVcmwoc2NoZW1hLCBvcHRzKSB7XG4gICAgY29uc3Qgc2NoSWQgPSB0eXBlb2Ygc2NoZW1hID09IFwib2JqZWN0XCIgJiYgc2NoZW1hW29wdHMuc2NoZW1hSWRdO1xuICAgIHJldHVybiBzY2hJZCAmJiAob3B0cy5jb2RlLnNvdXJjZSB8fCBvcHRzLmNvZGUucHJvY2VzcykgPyAoMCwgY29kZWdlbl8xLl8pIGAvKiMgc291cmNlVVJMPSR7c2NoSWR9ICovYCA6IGNvZGVnZW5fMS5uaWw7XG59XG4vLyBzY2hlbWEgY29tcGlsYXRpb24gLSB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQgcmVjdXJzaXZlbHkgdG8gZ2VuZXJhdGUgY29kZSBmb3Igc3ViLXNjaGVtYXNcbmZ1bmN0aW9uIHN1YnNjaGVtYUNvZGUoaXQsIHZhbGlkKSB7XG4gICAgaWYgKGlzU2NoZW1hT2JqKGl0KSkge1xuICAgICAgICBjaGVja0tleXdvcmRzKGl0KTtcbiAgICAgICAgaWYgKHNjaGVtYUN4dEhhc1J1bGVzKGl0KSkge1xuICAgICAgICAgICAgc3ViU2NoZW1hT2JqQ29kZShpdCwgdmFsaWQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgfVxuICAgICgwLCBib29sU2NoZW1hXzEuYm9vbE9yRW1wdHlTY2hlbWEpKGl0LCB2YWxpZCk7XG59XG5mdW5jdGlvbiBzY2hlbWFDeHRIYXNSdWxlcyh7IHNjaGVtYSwgc2VsZiB9KSB7XG4gICAgaWYgKHR5cGVvZiBzY2hlbWEgPT0gXCJib29sZWFuXCIpXG4gICAgICAgIHJldHVybiAhc2NoZW1hO1xuICAgIGZvciAoY29uc3Qga2V5IGluIHNjaGVtYSlcbiAgICAgICAgaWYgKHNlbGYuUlVMRVMuYWxsW2tleV0pXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICByZXR1cm4gZmFsc2U7XG59XG5mdW5jdGlvbiBpc1NjaGVtYU9iaihpdCkge1xuICAgIHJldHVybiB0eXBlb2YgaXQuc2NoZW1hICE9IFwiYm9vbGVhblwiO1xufVxuZnVuY3Rpb24gc3ViU2NoZW1hT2JqQ29kZShpdCwgdmFsaWQpIHtcbiAgICBjb25zdCB7IHNjaGVtYSwgZ2VuLCBvcHRzIH0gPSBpdDtcbiAgICBpZiAob3B0cy4kY29tbWVudCAmJiBzY2hlbWEuJGNvbW1lbnQpXG4gICAgICAgIGNvbW1lbnRLZXl3b3JkKGl0KTtcbiAgICB1cGRhdGVDb250ZXh0KGl0KTtcbiAgICBjaGVja0FzeW5jU2NoZW1hKGl0KTtcbiAgICBjb25zdCBlcnJzQ291bnQgPSBnZW4uY29uc3QoXCJfZXJyc1wiLCBuYW1lc18xLmRlZmF1bHQuZXJyb3JzKTtcbiAgICB0eXBlQW5kS2V5d29yZHMoaXQsIGVycnNDb3VudCk7XG4gICAgLy8gVE9ETyB2YXJcbiAgICBnZW4udmFyKHZhbGlkLCAoMCwgY29kZWdlbl8xLl8pIGAke2VycnNDb3VudH0gPT09ICR7bmFtZXNfMS5kZWZhdWx0LmVycm9yc31gKTtcbn1cbmZ1bmN0aW9uIGNoZWNrS2V5d29yZHMoaXQpIHtcbiAgICAoMCwgdXRpbF8xLmNoZWNrVW5rbm93blJ1bGVzKShpdCk7XG4gICAgY2hlY2tSZWZzQW5kS2V5d29yZHMoaXQpO1xufVxuZnVuY3Rpb24gdHlwZUFuZEtleXdvcmRzKGl0LCBlcnJzQ291bnQpIHtcbiAgICBpZiAoaXQub3B0cy5qdGQpXG4gICAgICAgIHJldHVybiBzY2hlbWFLZXl3b3JkcyhpdCwgW10sIGZhbHNlLCBlcnJzQ291bnQpO1xuICAgIGNvbnN0IHR5cGVzID0gKDAsIGRhdGFUeXBlXzEuZ2V0U2NoZW1hVHlwZXMpKGl0LnNjaGVtYSk7XG4gICAgY29uc3QgY2hlY2tlZFR5cGVzID0gKDAsIGRhdGFUeXBlXzEuY29lcmNlQW5kQ2hlY2tEYXRhVHlwZSkoaXQsIHR5cGVzKTtcbiAgICBzY2hlbWFLZXl3b3JkcyhpdCwgdHlwZXMsICFjaGVja2VkVHlwZXMsIGVycnNDb3VudCk7XG59XG5mdW5jdGlvbiBjaGVja1JlZnNBbmRLZXl3b3JkcyhpdCkge1xuICAgIGNvbnN0IHsgc2NoZW1hLCBlcnJTY2hlbWFQYXRoLCBvcHRzLCBzZWxmIH0gPSBpdDtcbiAgICBpZiAoc2NoZW1hLiRyZWYgJiYgb3B0cy5pZ25vcmVLZXl3b3Jkc1dpdGhSZWYgJiYgKDAsIHV0aWxfMS5zY2hlbWFIYXNSdWxlc0J1dFJlZikoc2NoZW1hLCBzZWxmLlJVTEVTKSkge1xuICAgICAgICBzZWxmLmxvZ2dlci53YXJuKGAkcmVmOiBrZXl3b3JkcyBpZ25vcmVkIGluIHNjaGVtYSBhdCBwYXRoIFwiJHtlcnJTY2hlbWFQYXRofVwiYCk7XG4gICAgfVxufVxuZnVuY3Rpb24gY2hlY2tOb0RlZmF1bHQoaXQpIHtcbiAgICBjb25zdCB7IHNjaGVtYSwgb3B0cyB9ID0gaXQ7XG4gICAgaWYgKHNjaGVtYS5kZWZhdWx0ICE9PSB1bmRlZmluZWQgJiYgb3B0cy51c2VEZWZhdWx0cyAmJiBvcHRzLnN0cmljdFNjaGVtYSkge1xuICAgICAgICAoMCwgdXRpbF8xLmNoZWNrU3RyaWN0TW9kZSkoaXQsIFwiZGVmYXVsdCBpcyBpZ25vcmVkIGluIHRoZSBzY2hlbWEgcm9vdFwiKTtcbiAgICB9XG59XG5mdW5jdGlvbiB1cGRhdGVDb250ZXh0KGl0KSB7XG4gICAgY29uc3Qgc2NoSWQgPSBpdC5zY2hlbWFbaXQub3B0cy5zY2hlbWFJZF07XG4gICAgaWYgKHNjaElkKVxuICAgICAgICBpdC5iYXNlSWQgPSAoMCwgcmVzb2x2ZV8xLnJlc29sdmVVcmwpKGl0Lm9wdHMudXJpUmVzb2x2ZXIsIGl0LmJhc2VJZCwgc2NoSWQpO1xufVxuZnVuY3Rpb24gY2hlY2tBc3luY1NjaGVtYShpdCkge1xuICAgIGlmIChpdC5zY2hlbWEuJGFzeW5jICYmICFpdC5zY2hlbWFFbnYuJGFzeW5jKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJhc3luYyBzY2hlbWEgaW4gc3luYyBzY2hlbWFcIik7XG59XG5mdW5jdGlvbiBjb21tZW50S2V5d29yZCh7IGdlbiwgc2NoZW1hRW52LCBzY2hlbWEsIGVyclNjaGVtYVBhdGgsIG9wdHMgfSkge1xuICAgIGNvbnN0IG1zZyA9IHNjaGVtYS4kY29tbWVudDtcbiAgICBpZiAob3B0cy4kY29tbWVudCA9PT0gdHJ1ZSkge1xuICAgICAgICBnZW4uY29kZSgoMCwgY29kZWdlbl8xLl8pIGAke25hbWVzXzEuZGVmYXVsdC5zZWxmfS5sb2dnZXIubG9nKCR7bXNnfSlgKTtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZW9mIG9wdHMuJGNvbW1lbnQgPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIGNvbnN0IHNjaGVtYVBhdGggPSAoMCwgY29kZWdlbl8xLnN0cikgYCR7ZXJyU2NoZW1hUGF0aH0vJGNvbW1lbnRgO1xuICAgICAgICBjb25zdCByb290TmFtZSA9IGdlbi5zY29wZVZhbHVlKFwicm9vdFwiLCB7IHJlZjogc2NoZW1hRW52LnJvb3QgfSk7XG4gICAgICAgIGdlbi5jb2RlKCgwLCBjb2RlZ2VuXzEuXykgYCR7bmFtZXNfMS5kZWZhdWx0LnNlbGZ9Lm9wdHMuJGNvbW1lbnQoJHttc2d9LCAke3NjaGVtYVBhdGh9LCAke3Jvb3ROYW1lfS5zY2hlbWEpYCk7XG4gICAgfVxufVxuZnVuY3Rpb24gcmV0dXJuUmVzdWx0cyhpdCkge1xuICAgIGNvbnN0IHsgZ2VuLCBzY2hlbWFFbnYsIHZhbGlkYXRlTmFtZSwgVmFsaWRhdGlvbkVycm9yLCBvcHRzIH0gPSBpdDtcbiAgICBpZiAoc2NoZW1hRW52LiRhc3luYykge1xuICAgICAgICAvLyBUT0RPIGFzc2lnbiB1bmV2YWx1YXRlZFxuICAgICAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5fKSBgJHtuYW1lc18xLmRlZmF1bHQuZXJyb3JzfSA9PT0gMGAsICgpID0+IGdlbi5yZXR1cm4obmFtZXNfMS5kZWZhdWx0LmRhdGEpLCAoKSA9PiBnZW4udGhyb3coKDAsIGNvZGVnZW5fMS5fKSBgbmV3ICR7VmFsaWRhdGlvbkVycm9yfSgke25hbWVzXzEuZGVmYXVsdC52RXJyb3JzfSlgKSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBnZW4uYXNzaWduKCgwLCBjb2RlZ2VuXzEuXykgYCR7dmFsaWRhdGVOYW1lfS5lcnJvcnNgLCBuYW1lc18xLmRlZmF1bHQudkVycm9ycyk7XG4gICAgICAgIGlmIChvcHRzLnVuZXZhbHVhdGVkKVxuICAgICAgICAgICAgYXNzaWduRXZhbHVhdGVkKGl0KTtcbiAgICAgICAgZ2VuLnJldHVybigoMCwgY29kZWdlbl8xLl8pIGAke25hbWVzXzEuZGVmYXVsdC5lcnJvcnN9ID09PSAwYCk7XG4gICAgfVxufVxuZnVuY3Rpb24gYXNzaWduRXZhbHVhdGVkKHsgZ2VuLCBldmFsdWF0ZWQsIHByb3BzLCBpdGVtcyB9KSB7XG4gICAgaWYgKHByb3BzIGluc3RhbmNlb2YgY29kZWdlbl8xLk5hbWUpXG4gICAgICAgIGdlbi5hc3NpZ24oKDAsIGNvZGVnZW5fMS5fKSBgJHtldmFsdWF0ZWR9LnByb3BzYCwgcHJvcHMpO1xuICAgIGlmIChpdGVtcyBpbnN0YW5jZW9mIGNvZGVnZW5fMS5OYW1lKVxuICAgICAgICBnZW4uYXNzaWduKCgwLCBjb2RlZ2VuXzEuXykgYCR7ZXZhbHVhdGVkfS5pdGVtc2AsIGl0ZW1zKTtcbn1cbmZ1bmN0aW9uIHNjaGVtYUtleXdvcmRzKGl0LCB0eXBlcywgdHlwZUVycm9ycywgZXJyc0NvdW50KSB7XG4gICAgY29uc3QgeyBnZW4sIHNjaGVtYSwgZGF0YSwgYWxsRXJyb3JzLCBvcHRzLCBzZWxmIH0gPSBpdDtcbiAgICBjb25zdCB7IFJVTEVTIH0gPSBzZWxmO1xuICAgIGlmIChzY2hlbWEuJHJlZiAmJiAob3B0cy5pZ25vcmVLZXl3b3Jkc1dpdGhSZWYgfHwgISgwLCB1dGlsXzEuc2NoZW1hSGFzUnVsZXNCdXRSZWYpKHNjaGVtYSwgUlVMRVMpKSkge1xuICAgICAgICBnZW4uYmxvY2soKCkgPT4ga2V5d29yZENvZGUoaXQsIFwiJHJlZlwiLCBSVUxFUy5hbGwuJHJlZi5kZWZpbml0aW9uKSk7IC8vIFRPRE8gdHlwZWNhc3RcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIW9wdHMuanRkKVxuICAgICAgICBjaGVja1N0cmljdFR5cGVzKGl0LCB0eXBlcyk7XG4gICAgZ2VuLmJsb2NrKCgpID0+IHtcbiAgICAgICAgZm9yIChjb25zdCBncm91cCBvZiBSVUxFUy5ydWxlcylcbiAgICAgICAgICAgIGdyb3VwS2V5d29yZHMoZ3JvdXApO1xuICAgICAgICBncm91cEtleXdvcmRzKFJVTEVTLnBvc3QpO1xuICAgIH0pO1xuICAgIGZ1bmN0aW9uIGdyb3VwS2V5d29yZHMoZ3JvdXApIHtcbiAgICAgICAgaWYgKCEoMCwgYXBwbGljYWJpbGl0eV8xLnNob3VsZFVzZUdyb3VwKShzY2hlbWEsIGdyb3VwKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKGdyb3VwLnR5cGUpIHtcbiAgICAgICAgICAgIGdlbi5pZigoMCwgZGF0YVR5cGVfMi5jaGVja0RhdGFUeXBlKShncm91cC50eXBlLCBkYXRhLCBvcHRzLnN0cmljdE51bWJlcnMpKTtcbiAgICAgICAgICAgIGl0ZXJhdGVLZXl3b3JkcyhpdCwgZ3JvdXApO1xuICAgICAgICAgICAgaWYgKHR5cGVzLmxlbmd0aCA9PT0gMSAmJiB0eXBlc1swXSA9PT0gZ3JvdXAudHlwZSAmJiB0eXBlRXJyb3JzKSB7XG4gICAgICAgICAgICAgICAgZ2VuLmVsc2UoKTtcbiAgICAgICAgICAgICAgICAoMCwgZGF0YVR5cGVfMi5yZXBvcnRUeXBlRXJyb3IpKGl0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGdlbi5lbmRJZigpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaXRlcmF0ZUtleXdvcmRzKGl0LCBncm91cCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gVE9ETyBtYWtlIGl0IFwib2tcIiBjYWxsP1xuICAgICAgICBpZiAoIWFsbEVycm9ycylcbiAgICAgICAgICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGAke25hbWVzXzEuZGVmYXVsdC5lcnJvcnN9ID09PSAke2VycnNDb3VudCB8fCAwfWApO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGl0ZXJhdGVLZXl3b3JkcyhpdCwgZ3JvdXApIHtcbiAgICBjb25zdCB7IGdlbiwgc2NoZW1hLCBvcHRzOiB7IHVzZURlZmF1bHRzIH0sIH0gPSBpdDtcbiAgICBpZiAodXNlRGVmYXVsdHMpXG4gICAgICAgICgwLCBkZWZhdWx0c18xLmFzc2lnbkRlZmF1bHRzKShpdCwgZ3JvdXAudHlwZSk7XG4gICAgZ2VuLmJsb2NrKCgpID0+IHtcbiAgICAgICAgZm9yIChjb25zdCBydWxlIG9mIGdyb3VwLnJ1bGVzKSB7XG4gICAgICAgICAgICBpZiAoKDAsIGFwcGxpY2FiaWxpdHlfMS5zaG91bGRVc2VSdWxlKShzY2hlbWEsIHJ1bGUpKSB7XG4gICAgICAgICAgICAgICAga2V5d29yZENvZGUoaXQsIHJ1bGUua2V5d29yZCwgcnVsZS5kZWZpbml0aW9uLCBncm91cC50eXBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xufVxuZnVuY3Rpb24gY2hlY2tTdHJpY3RUeXBlcyhpdCwgdHlwZXMpIHtcbiAgICBpZiAoaXQuc2NoZW1hRW52Lm1ldGEgfHwgIWl0Lm9wdHMuc3RyaWN0VHlwZXMpXG4gICAgICAgIHJldHVybjtcbiAgICBjaGVja0NvbnRleHRUeXBlcyhpdCwgdHlwZXMpO1xuICAgIGlmICghaXQub3B0cy5hbGxvd1VuaW9uVHlwZXMpXG4gICAgICAgIGNoZWNrTXVsdGlwbGVUeXBlcyhpdCwgdHlwZXMpO1xuICAgIGNoZWNrS2V5d29yZFR5cGVzKGl0LCBpdC5kYXRhVHlwZXMpO1xufVxuZnVuY3Rpb24gY2hlY2tDb250ZXh0VHlwZXMoaXQsIHR5cGVzKSB7XG4gICAgaWYgKCF0eXBlcy5sZW5ndGgpXG4gICAgICAgIHJldHVybjtcbiAgICBpZiAoIWl0LmRhdGFUeXBlcy5sZW5ndGgpIHtcbiAgICAgICAgaXQuZGF0YVR5cGVzID0gdHlwZXM7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdHlwZXMuZm9yRWFjaCgodCkgPT4ge1xuICAgICAgICBpZiAoIWluY2x1ZGVzVHlwZShpdC5kYXRhVHlwZXMsIHQpKSB7XG4gICAgICAgICAgICBzdHJpY3RUeXBlc0Vycm9yKGl0LCBgdHlwZSBcIiR7dH1cIiBub3QgYWxsb3dlZCBieSBjb250ZXh0IFwiJHtpdC5kYXRhVHlwZXMuam9pbihcIixcIil9XCJgKTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIG5hcnJvd1NjaGVtYVR5cGVzKGl0LCB0eXBlcyk7XG59XG5mdW5jdGlvbiBjaGVja011bHRpcGxlVHlwZXMoaXQsIHRzKSB7XG4gICAgaWYgKHRzLmxlbmd0aCA+IDEgJiYgISh0cy5sZW5ndGggPT09IDIgJiYgdHMuaW5jbHVkZXMoXCJudWxsXCIpKSkge1xuICAgICAgICBzdHJpY3RUeXBlc0Vycm9yKGl0LCBcInVzZSBhbGxvd1VuaW9uVHlwZXMgdG8gYWxsb3cgdW5pb24gdHlwZSBrZXl3b3JkXCIpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGNoZWNrS2V5d29yZFR5cGVzKGl0LCB0cykge1xuICAgIGNvbnN0IHJ1bGVzID0gaXQuc2VsZi5SVUxFUy5hbGw7XG4gICAgZm9yIChjb25zdCBrZXl3b3JkIGluIHJ1bGVzKSB7XG4gICAgICAgIGNvbnN0IHJ1bGUgPSBydWxlc1trZXl3b3JkXTtcbiAgICAgICAgaWYgKHR5cGVvZiBydWxlID09IFwib2JqZWN0XCIgJiYgKDAsIGFwcGxpY2FiaWxpdHlfMS5zaG91bGRVc2VSdWxlKShpdC5zY2hlbWEsIHJ1bGUpKSB7XG4gICAgICAgICAgICBjb25zdCB7IHR5cGUgfSA9IHJ1bGUuZGVmaW5pdGlvbjtcbiAgICAgICAgICAgIGlmICh0eXBlLmxlbmd0aCAmJiAhdHlwZS5zb21lKCh0KSA9PiBoYXNBcHBsaWNhYmxlVHlwZSh0cywgdCkpKSB7XG4gICAgICAgICAgICAgICAgc3RyaWN0VHlwZXNFcnJvcihpdCwgYG1pc3NpbmcgdHlwZSBcIiR7dHlwZS5qb2luKFwiLFwiKX1cIiBmb3Iga2V5d29yZCBcIiR7a2V5d29yZH1cImApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gaGFzQXBwbGljYWJsZVR5cGUoc2NoVHMsIGt3ZFQpIHtcbiAgICByZXR1cm4gc2NoVHMuaW5jbHVkZXMoa3dkVCkgfHwgKGt3ZFQgPT09IFwibnVtYmVyXCIgJiYgc2NoVHMuaW5jbHVkZXMoXCJpbnRlZ2VyXCIpKTtcbn1cbmZ1bmN0aW9uIGluY2x1ZGVzVHlwZSh0cywgdCkge1xuICAgIHJldHVybiB0cy5pbmNsdWRlcyh0KSB8fCAodCA9PT0gXCJpbnRlZ2VyXCIgJiYgdHMuaW5jbHVkZXMoXCJudW1iZXJcIikpO1xufVxuZnVuY3Rpb24gbmFycm93U2NoZW1hVHlwZXMoaXQsIHdpdGhUeXBlcykge1xuICAgIGNvbnN0IHRzID0gW107XG4gICAgZm9yIChjb25zdCB0IG9mIGl0LmRhdGFUeXBlcykge1xuICAgICAgICBpZiAoaW5jbHVkZXNUeXBlKHdpdGhUeXBlcywgdCkpXG4gICAgICAgICAgICB0cy5wdXNoKHQpO1xuICAgICAgICBlbHNlIGlmICh3aXRoVHlwZXMuaW5jbHVkZXMoXCJpbnRlZ2VyXCIpICYmIHQgPT09IFwibnVtYmVyXCIpXG4gICAgICAgICAgICB0cy5wdXNoKFwiaW50ZWdlclwiKTtcbiAgICB9XG4gICAgaXQuZGF0YVR5cGVzID0gdHM7XG59XG5mdW5jdGlvbiBzdHJpY3RUeXBlc0Vycm9yKGl0LCBtc2cpIHtcbiAgICBjb25zdCBzY2hlbWFQYXRoID0gaXQuc2NoZW1hRW52LmJhc2VJZCArIGl0LmVyclNjaGVtYVBhdGg7XG4gICAgbXNnICs9IGAgYXQgXCIke3NjaGVtYVBhdGh9XCIgKHN0cmljdFR5cGVzKWA7XG4gICAgKDAsIHV0aWxfMS5jaGVja1N0cmljdE1vZGUpKGl0LCBtc2csIGl0Lm9wdHMuc3RyaWN0VHlwZXMpO1xufVxuY2xhc3MgS2V5d29yZEN4dCB7XG4gICAgY29uc3RydWN0b3IoaXQsIGRlZiwga2V5d29yZCkge1xuICAgICAgICAoMCwga2V5d29yZF8xLnZhbGlkYXRlS2V5d29yZFVzYWdlKShpdCwgZGVmLCBrZXl3b3JkKTtcbiAgICAgICAgdGhpcy5nZW4gPSBpdC5nZW47XG4gICAgICAgIHRoaXMuYWxsRXJyb3JzID0gaXQuYWxsRXJyb3JzO1xuICAgICAgICB0aGlzLmtleXdvcmQgPSBrZXl3b3JkO1xuICAgICAgICB0aGlzLmRhdGEgPSBpdC5kYXRhO1xuICAgICAgICB0aGlzLnNjaGVtYSA9IGl0LnNjaGVtYVtrZXl3b3JkXTtcbiAgICAgICAgdGhpcy4kZGF0YSA9IGRlZi4kZGF0YSAmJiBpdC5vcHRzLiRkYXRhICYmIHRoaXMuc2NoZW1hICYmIHRoaXMuc2NoZW1hLiRkYXRhO1xuICAgICAgICB0aGlzLnNjaGVtYVZhbHVlID0gKDAsIHV0aWxfMS5zY2hlbWFSZWZPclZhbCkoaXQsIHRoaXMuc2NoZW1hLCBrZXl3b3JkLCB0aGlzLiRkYXRhKTtcbiAgICAgICAgdGhpcy5zY2hlbWFUeXBlID0gZGVmLnNjaGVtYVR5cGU7XG4gICAgICAgIHRoaXMucGFyZW50U2NoZW1hID0gaXQuc2NoZW1hO1xuICAgICAgICB0aGlzLnBhcmFtcyA9IHt9O1xuICAgICAgICB0aGlzLml0ID0gaXQ7XG4gICAgICAgIHRoaXMuZGVmID0gZGVmO1xuICAgICAgICBpZiAodGhpcy4kZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5zY2hlbWFDb2RlID0gaXQuZ2VuLmNvbnN0KFwidlNjaGVtYVwiLCBnZXREYXRhKHRoaXMuJGRhdGEsIGl0KSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNjaGVtYUNvZGUgPSB0aGlzLnNjaGVtYVZhbHVlO1xuICAgICAgICAgICAgaWYgKCEoMCwga2V5d29yZF8xLnZhbGlkU2NoZW1hVHlwZSkodGhpcy5zY2hlbWEsIGRlZi5zY2hlbWFUeXBlLCBkZWYuYWxsb3dVbmRlZmluZWQpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke2tleXdvcmR9IHZhbHVlIG11c3QgYmUgJHtKU09OLnN0cmluZ2lmeShkZWYuc2NoZW1hVHlwZSl9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFwiY29kZVwiIGluIGRlZiA/IGRlZi50cmFja0Vycm9ycyA6IGRlZi5lcnJvcnMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICB0aGlzLmVycnNDb3VudCA9IGl0Lmdlbi5jb25zdChcIl9lcnJzXCIsIG5hbWVzXzEuZGVmYXVsdC5lcnJvcnMpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJlc3VsdChjb25kaXRpb24sIHN1Y2Nlc3NBY3Rpb24sIGZhaWxBY3Rpb24pIHtcbiAgICAgICAgdGhpcy5mYWlsUmVzdWx0KCgwLCBjb2RlZ2VuXzEubm90KShjb25kaXRpb24pLCBzdWNjZXNzQWN0aW9uLCBmYWlsQWN0aW9uKTtcbiAgICB9XG4gICAgZmFpbFJlc3VsdChjb25kaXRpb24sIHN1Y2Nlc3NBY3Rpb24sIGZhaWxBY3Rpb24pIHtcbiAgICAgICAgdGhpcy5nZW4uaWYoY29uZGl0aW9uKTtcbiAgICAgICAgaWYgKGZhaWxBY3Rpb24pXG4gICAgICAgICAgICBmYWlsQWN0aW9uKCk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHRoaXMuZXJyb3IoKTtcbiAgICAgICAgaWYgKHN1Y2Nlc3NBY3Rpb24pIHtcbiAgICAgICAgICAgIHRoaXMuZ2VuLmVsc2UoKTtcbiAgICAgICAgICAgIHN1Y2Nlc3NBY3Rpb24oKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmFsbEVycm9ycylcbiAgICAgICAgICAgICAgICB0aGlzLmdlbi5lbmRJZigpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMuYWxsRXJyb3JzKVxuICAgICAgICAgICAgICAgIHRoaXMuZ2VuLmVuZElmKCk7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgdGhpcy5nZW4uZWxzZSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHBhc3MoY29uZGl0aW9uLCBmYWlsQWN0aW9uKSB7XG4gICAgICAgIHRoaXMuZmFpbFJlc3VsdCgoMCwgY29kZWdlbl8xLm5vdCkoY29uZGl0aW9uKSwgdW5kZWZpbmVkLCBmYWlsQWN0aW9uKTtcbiAgICB9XG4gICAgZmFpbChjb25kaXRpb24pIHtcbiAgICAgICAgaWYgKGNvbmRpdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLmVycm9yKCk7XG4gICAgICAgICAgICBpZiAoIXRoaXMuYWxsRXJyb3JzKVxuICAgICAgICAgICAgICAgIHRoaXMuZ2VuLmlmKGZhbHNlKTsgLy8gdGhpcyBicmFuY2ggd2lsbCBiZSByZW1vdmVkIGJ5IGdlbi5vcHRpbWl6ZVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZ2VuLmlmKGNvbmRpdGlvbik7XG4gICAgICAgIHRoaXMuZXJyb3IoKTtcbiAgICAgICAgaWYgKHRoaXMuYWxsRXJyb3JzKVxuICAgICAgICAgICAgdGhpcy5nZW4uZW5kSWYoKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhpcy5nZW4uZWxzZSgpO1xuICAgIH1cbiAgICBmYWlsJGRhdGEoY29uZGl0aW9uKSB7XG4gICAgICAgIGlmICghdGhpcy4kZGF0YSlcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmZhaWwoY29uZGl0aW9uKTtcbiAgICAgICAgY29uc3QgeyBzY2hlbWFDb2RlIH0gPSB0aGlzO1xuICAgICAgICB0aGlzLmZhaWwoKDAsIGNvZGVnZW5fMS5fKSBgJHtzY2hlbWFDb2RlfSAhPT0gdW5kZWZpbmVkICYmICgkeygwLCBjb2RlZ2VuXzEub3IpKHRoaXMuaW52YWxpZCRkYXRhKCksIGNvbmRpdGlvbil9KWApO1xuICAgIH1cbiAgICBlcnJvcihhcHBlbmQsIGVycm9yUGFyYW1zLCBlcnJvclBhdGhzKSB7XG4gICAgICAgIGlmIChlcnJvclBhcmFtcykge1xuICAgICAgICAgICAgdGhpcy5zZXRQYXJhbXMoZXJyb3JQYXJhbXMpO1xuICAgICAgICAgICAgdGhpcy5fZXJyb3IoYXBwZW5kLCBlcnJvclBhdGhzKTtcbiAgICAgICAgICAgIHRoaXMuc2V0UGFyYW1zKHt9KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9lcnJvcihhcHBlbmQsIGVycm9yUGF0aHMpO1xuICAgIH1cbiAgICBfZXJyb3IoYXBwZW5kLCBlcnJvclBhdGhzKSB7XG4gICAgICAgIDtcbiAgICAgICAgKGFwcGVuZCA/IGVycm9yc18xLnJlcG9ydEV4dHJhRXJyb3IgOiBlcnJvcnNfMS5yZXBvcnRFcnJvcikodGhpcywgdGhpcy5kZWYuZXJyb3IsIGVycm9yUGF0aHMpO1xuICAgIH1cbiAgICAkZGF0YUVycm9yKCkge1xuICAgICAgICAoMCwgZXJyb3JzXzEucmVwb3J0RXJyb3IpKHRoaXMsIHRoaXMuZGVmLiRkYXRhRXJyb3IgfHwgZXJyb3JzXzEua2V5d29yZCREYXRhRXJyb3IpO1xuICAgIH1cbiAgICByZXNldCgpIHtcbiAgICAgICAgaWYgKHRoaXMuZXJyc0NvdW50ID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2FkZCBcInRyYWNrRXJyb3JzXCIgdG8ga2V5d29yZCBkZWZpbml0aW9uJyk7XG4gICAgICAgICgwLCBlcnJvcnNfMS5yZXNldEVycm9yc0NvdW50KSh0aGlzLmdlbiwgdGhpcy5lcnJzQ291bnQpO1xuICAgIH1cbiAgICBvayhjb25kKSB7XG4gICAgICAgIGlmICghdGhpcy5hbGxFcnJvcnMpXG4gICAgICAgICAgICB0aGlzLmdlbi5pZihjb25kKTtcbiAgICB9XG4gICAgc2V0UGFyYW1zKG9iaiwgYXNzaWduKSB7XG4gICAgICAgIGlmIChhc3NpZ24pXG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMucGFyYW1zLCBvYmopO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICB0aGlzLnBhcmFtcyA9IG9iajtcbiAgICB9XG4gICAgYmxvY2skZGF0YSh2YWxpZCwgY29kZUJsb2NrLCAkZGF0YVZhbGlkID0gY29kZWdlbl8xLm5pbCkge1xuICAgICAgICB0aGlzLmdlbi5ibG9jaygoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNoZWNrJGRhdGEodmFsaWQsICRkYXRhVmFsaWQpO1xuICAgICAgICAgICAgY29kZUJsb2NrKCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBjaGVjayRkYXRhKHZhbGlkID0gY29kZWdlbl8xLm5pbCwgJGRhdGFWYWxpZCA9IGNvZGVnZW5fMS5uaWwpIHtcbiAgICAgICAgaWYgKCF0aGlzLiRkYXRhKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCB7IGdlbiwgc2NoZW1hQ29kZSwgc2NoZW1hVHlwZSwgZGVmIH0gPSB0aGlzO1xuICAgICAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5vcikoKDAsIGNvZGVnZW5fMS5fKSBgJHtzY2hlbWFDb2RlfSA9PT0gdW5kZWZpbmVkYCwgJGRhdGFWYWxpZCkpO1xuICAgICAgICBpZiAodmFsaWQgIT09IGNvZGVnZW5fMS5uaWwpXG4gICAgICAgICAgICBnZW4uYXNzaWduKHZhbGlkLCB0cnVlKTtcbiAgICAgICAgaWYgKHNjaGVtYVR5cGUubGVuZ3RoIHx8IGRlZi52YWxpZGF0ZVNjaGVtYSkge1xuICAgICAgICAgICAgZ2VuLmVsc2VJZih0aGlzLmludmFsaWQkZGF0YSgpKTtcbiAgICAgICAgICAgIHRoaXMuJGRhdGFFcnJvcigpO1xuICAgICAgICAgICAgaWYgKHZhbGlkICE9PSBjb2RlZ2VuXzEubmlsKVxuICAgICAgICAgICAgICAgIGdlbi5hc3NpZ24odmFsaWQsIGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgICBnZW4uZWxzZSgpO1xuICAgIH1cbiAgICBpbnZhbGlkJGRhdGEoKSB7XG4gICAgICAgIGNvbnN0IHsgZ2VuLCBzY2hlbWFDb2RlLCBzY2hlbWFUeXBlLCBkZWYsIGl0IH0gPSB0aGlzO1xuICAgICAgICByZXR1cm4gKDAsIGNvZGVnZW5fMS5vcikod3JvbmckRGF0YVR5cGUoKSwgaW52YWxpZCREYXRhU2NoZW1hKCkpO1xuICAgICAgICBmdW5jdGlvbiB3cm9uZyREYXRhVHlwZSgpIHtcbiAgICAgICAgICAgIGlmIChzY2hlbWFUeXBlLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICAgICAgICAgIGlmICghKHNjaGVtYUNvZGUgaW5zdGFuY2VvZiBjb2RlZ2VuXzEuTmFtZSkpXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImFqdiBpbXBsZW1lbnRhdGlvbiBlcnJvclwiKTtcbiAgICAgICAgICAgICAgICBjb25zdCBzdCA9IEFycmF5LmlzQXJyYXkoc2NoZW1hVHlwZSkgPyBzY2hlbWFUeXBlIDogW3NjaGVtYVR5cGVdO1xuICAgICAgICAgICAgICAgIHJldHVybiAoMCwgY29kZWdlbl8xLl8pIGAkeygwLCBkYXRhVHlwZV8yLmNoZWNrRGF0YVR5cGVzKShzdCwgc2NoZW1hQ29kZSwgaXQub3B0cy5zdHJpY3ROdW1iZXJzLCBkYXRhVHlwZV8yLkRhdGFUeXBlLldyb25nKX1gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGNvZGVnZW5fMS5uaWw7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gaW52YWxpZCREYXRhU2NoZW1hKCkge1xuICAgICAgICAgICAgaWYgKGRlZi52YWxpZGF0ZVNjaGVtYSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbGlkYXRlU2NoZW1hUmVmID0gZ2VuLnNjb3BlVmFsdWUoXCJ2YWxpZGF0ZSRkYXRhXCIsIHsgcmVmOiBkZWYudmFsaWRhdGVTY2hlbWEgfSk7IC8vIFRPRE8gdmFsdWUuY29kZSBmb3Igc3RhbmRhbG9uZVxuICAgICAgICAgICAgICAgIHJldHVybiAoMCwgY29kZWdlbl8xLl8pIGAhJHt2YWxpZGF0ZVNjaGVtYVJlZn0oJHtzY2hlbWFDb2RlfSlgO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGNvZGVnZW5fMS5uaWw7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3Vic2NoZW1hKGFwcGwsIHZhbGlkKSB7XG4gICAgICAgIGNvbnN0IHN1YnNjaGVtYSA9ICgwLCBzdWJzY2hlbWFfMS5nZXRTdWJzY2hlbWEpKHRoaXMuaXQsIGFwcGwpO1xuICAgICAgICAoMCwgc3Vic2NoZW1hXzEuZXh0ZW5kU3Vic2NoZW1hRGF0YSkoc3Vic2NoZW1hLCB0aGlzLml0LCBhcHBsKTtcbiAgICAgICAgKDAsIHN1YnNjaGVtYV8xLmV4dGVuZFN1YnNjaGVtYU1vZGUpKHN1YnNjaGVtYSwgYXBwbCk7XG4gICAgICAgIGNvbnN0IG5leHRDb250ZXh0ID0geyAuLi50aGlzLml0LCAuLi5zdWJzY2hlbWEsIGl0ZW1zOiB1bmRlZmluZWQsIHByb3BzOiB1bmRlZmluZWQgfTtcbiAgICAgICAgc3Vic2NoZW1hQ29kZShuZXh0Q29udGV4dCwgdmFsaWQpO1xuICAgICAgICByZXR1cm4gbmV4dENvbnRleHQ7XG4gICAgfVxuICAgIG1lcmdlRXZhbHVhdGVkKHNjaGVtYUN4dCwgdG9OYW1lKSB7XG4gICAgICAgIGNvbnN0IHsgaXQsIGdlbiB9ID0gdGhpcztcbiAgICAgICAgaWYgKCFpdC5vcHRzLnVuZXZhbHVhdGVkKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAoaXQucHJvcHMgIT09IHRydWUgJiYgc2NoZW1hQ3h0LnByb3BzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGl0LnByb3BzID0gdXRpbF8xLm1lcmdlRXZhbHVhdGVkLnByb3BzKGdlbiwgc2NoZW1hQ3h0LnByb3BzLCBpdC5wcm9wcywgdG9OYW1lKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXQuaXRlbXMgIT09IHRydWUgJiYgc2NoZW1hQ3h0Lml0ZW1zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGl0Lml0ZW1zID0gdXRpbF8xLm1lcmdlRXZhbHVhdGVkLml0ZW1zKGdlbiwgc2NoZW1hQ3h0Lml0ZW1zLCBpdC5pdGVtcywgdG9OYW1lKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBtZXJnZVZhbGlkRXZhbHVhdGVkKHNjaGVtYUN4dCwgdmFsaWQpIHtcbiAgICAgICAgY29uc3QgeyBpdCwgZ2VuIH0gPSB0aGlzO1xuICAgICAgICBpZiAoaXQub3B0cy51bmV2YWx1YXRlZCAmJiAoaXQucHJvcHMgIT09IHRydWUgfHwgaXQuaXRlbXMgIT09IHRydWUpKSB7XG4gICAgICAgICAgICBnZW4uaWYodmFsaWQsICgpID0+IHRoaXMubWVyZ2VFdmFsdWF0ZWQoc2NoZW1hQ3h0LCBjb2RlZ2VuXzEuTmFtZSkpO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG59XG5leHBvcnRzLktleXdvcmRDeHQgPSBLZXl3b3JkQ3h0O1xuZnVuY3Rpb24ga2V5d29yZENvZGUoaXQsIGtleXdvcmQsIGRlZiwgcnVsZVR5cGUpIHtcbiAgICBjb25zdCBjeHQgPSBuZXcgS2V5d29yZEN4dChpdCwgZGVmLCBrZXl3b3JkKTtcbiAgICBpZiAoXCJjb2RlXCIgaW4gZGVmKSB7XG4gICAgICAgIGRlZi5jb2RlKGN4dCwgcnVsZVR5cGUpO1xuICAgIH1cbiAgICBlbHNlIGlmIChjeHQuJGRhdGEgJiYgZGVmLnZhbGlkYXRlKSB7XG4gICAgICAgICgwLCBrZXl3b3JkXzEuZnVuY0tleXdvcmRDb2RlKShjeHQsIGRlZik7XG4gICAgfVxuICAgIGVsc2UgaWYgKFwibWFjcm9cIiBpbiBkZWYpIHtcbiAgICAgICAgKDAsIGtleXdvcmRfMS5tYWNyb0tleXdvcmRDb2RlKShjeHQsIGRlZik7XG4gICAgfVxuICAgIGVsc2UgaWYgKGRlZi5jb21waWxlIHx8IGRlZi52YWxpZGF0ZSkge1xuICAgICAgICAoMCwga2V5d29yZF8xLmZ1bmNLZXl3b3JkQ29kZSkoY3h0LCBkZWYpO1xuICAgIH1cbn1cbmNvbnN0IEpTT05fUE9JTlRFUiA9IC9eXFwvKD86W15+XXx+MHx+MSkqJC87XG5jb25zdCBSRUxBVElWRV9KU09OX1BPSU5URVIgPSAvXihbMC05XSspKCN8XFwvKD86W15+XXx+MHx+MSkqKT8kLztcbmZ1bmN0aW9uIGdldERhdGEoJGRhdGEsIHsgZGF0YUxldmVsLCBkYXRhTmFtZXMsIGRhdGFQYXRoQXJyIH0pIHtcbiAgICBsZXQganNvblBvaW50ZXI7XG4gICAgbGV0IGRhdGE7XG4gICAgaWYgKCRkYXRhID09PSBcIlwiKVxuICAgICAgICByZXR1cm4gbmFtZXNfMS5kZWZhdWx0LnJvb3REYXRhO1xuICAgIGlmICgkZGF0YVswXSA9PT0gXCIvXCIpIHtcbiAgICAgICAgaWYgKCFKU09OX1BPSU5URVIudGVzdCgkZGF0YSkpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgSlNPTi1wb2ludGVyOiAkeyRkYXRhfWApO1xuICAgICAgICBqc29uUG9pbnRlciA9ICRkYXRhO1xuICAgICAgICBkYXRhID0gbmFtZXNfMS5kZWZhdWx0LnJvb3REYXRhO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgY29uc3QgbWF0Y2hlcyA9IFJFTEFUSVZFX0pTT05fUE9JTlRFUi5leGVjKCRkYXRhKTtcbiAgICAgICAgaWYgKCFtYXRjaGVzKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIEpTT04tcG9pbnRlcjogJHskZGF0YX1gKTtcbiAgICAgICAgY29uc3QgdXAgPSArbWF0Y2hlc1sxXTtcbiAgICAgICAganNvblBvaW50ZXIgPSBtYXRjaGVzWzJdO1xuICAgICAgICBpZiAoanNvblBvaW50ZXIgPT09IFwiI1wiKSB7XG4gICAgICAgICAgICBpZiAodXAgPj0gZGF0YUxldmVsKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvck1zZyhcInByb3BlcnR5L2luZGV4XCIsIHVwKSk7XG4gICAgICAgICAgICByZXR1cm4gZGF0YVBhdGhBcnJbZGF0YUxldmVsIC0gdXBdO1xuICAgICAgICB9XG4gICAgICAgIGlmICh1cCA+IGRhdGFMZXZlbClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvck1zZyhcImRhdGFcIiwgdXApKTtcbiAgICAgICAgZGF0YSA9IGRhdGFOYW1lc1tkYXRhTGV2ZWwgLSB1cF07XG4gICAgICAgIGlmICghanNvblBvaW50ZXIpXG4gICAgICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG4gICAgbGV0IGV4cHIgPSBkYXRhO1xuICAgIGNvbnN0IHNlZ21lbnRzID0ganNvblBvaW50ZXIuc3BsaXQoXCIvXCIpO1xuICAgIGZvciAoY29uc3Qgc2VnbWVudCBvZiBzZWdtZW50cykge1xuICAgICAgICBpZiAoc2VnbWVudCkge1xuICAgICAgICAgICAgZGF0YSA9ICgwLCBjb2RlZ2VuXzEuXykgYCR7ZGF0YX0keygwLCBjb2RlZ2VuXzEuZ2V0UHJvcGVydHkpKCgwLCB1dGlsXzEudW5lc2NhcGVKc29uUG9pbnRlcikoc2VnbWVudCkpfWA7XG4gICAgICAgICAgICBleHByID0gKDAsIGNvZGVnZW5fMS5fKSBgJHtleHByfSAmJiAke2RhdGF9YDtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZXhwcjtcbiAgICBmdW5jdGlvbiBlcnJvck1zZyhwb2ludGVyVHlwZSwgdXApIHtcbiAgICAgICAgcmV0dXJuIGBDYW5ub3QgYWNjZXNzICR7cG9pbnRlclR5cGV9ICR7dXB9IGxldmVscyB1cCwgY3VycmVudCBsZXZlbCBpcyAke2RhdGFMZXZlbH1gO1xuICAgIH1cbn1cbmV4cG9ydHMuZ2V0RGF0YSA9IGdldERhdGE7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY2xhc3MgVmFsaWRhdGlvbkVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKGVycm9ycykge1xuICAgICAgICBzdXBlcihcInZhbGlkYXRpb24gZmFpbGVkXCIpO1xuICAgICAgICB0aGlzLmVycm9ycyA9IGVycm9ycztcbiAgICAgICAgdGhpcy5hanYgPSB0aGlzLnZhbGlkYXRpb24gPSB0cnVlO1xuICAgIH1cbn1cbmV4cG9ydHMuZGVmYXVsdCA9IFZhbGlkYXRpb25FcnJvcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXZhbGlkYXRpb25fZXJyb3IuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IHJlc29sdmVfMSA9IHJlcXVpcmUoXCIuL3Jlc29sdmVcIik7XG5jbGFzcyBNaXNzaW5nUmVmRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgY29uc3RydWN0b3IocmVzb2x2ZXIsIGJhc2VJZCwgcmVmLCBtc2cpIHtcbiAgICAgICAgc3VwZXIobXNnIHx8IGBjYW4ndCByZXNvbHZlIHJlZmVyZW5jZSAke3JlZn0gZnJvbSBpZCAke2Jhc2VJZH1gKTtcbiAgICAgICAgdGhpcy5taXNzaW5nUmVmID0gKDAsIHJlc29sdmVfMS5yZXNvbHZlVXJsKShyZXNvbHZlciwgYmFzZUlkLCByZWYpO1xuICAgICAgICB0aGlzLm1pc3NpbmdTY2hlbWEgPSAoMCwgcmVzb2x2ZV8xLm5vcm1hbGl6ZUlkKSgoMCwgcmVzb2x2ZV8xLmdldEZ1bGxQYXRoKShyZXNvbHZlciwgdGhpcy5taXNzaW5nUmVmKSk7XG4gICAgfVxufVxuZXhwb3J0cy5kZWZhdWx0ID0gTWlzc2luZ1JlZkVycm9yO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmVmX2Vycm9yLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnJlc29sdmVTY2hlbWEgPSBleHBvcnRzLmdldENvbXBpbGluZ1NjaGVtYSA9IGV4cG9ydHMucmVzb2x2ZVJlZiA9IGV4cG9ydHMuY29tcGlsZVNjaGVtYSA9IGV4cG9ydHMuU2NoZW1hRW52ID0gdm9pZCAwO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4vY29kZWdlblwiKTtcbmNvbnN0IHZhbGlkYXRpb25fZXJyb3JfMSA9IHJlcXVpcmUoXCIuLi9ydW50aW1lL3ZhbGlkYXRpb25fZXJyb3JcIik7XG5jb25zdCBuYW1lc18xID0gcmVxdWlyZShcIi4vbmFtZXNcIik7XG5jb25zdCByZXNvbHZlXzEgPSByZXF1aXJlKFwiLi9yZXNvbHZlXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4vdXRpbFwiKTtcbmNvbnN0IHZhbGlkYXRlXzEgPSByZXF1aXJlKFwiLi92YWxpZGF0ZVwiKTtcbmNsYXNzIFNjaGVtYUVudiB7XG4gICAgY29uc3RydWN0b3IoZW52KSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgdGhpcy5yZWZzID0ge307XG4gICAgICAgIHRoaXMuZHluYW1pY0FuY2hvcnMgPSB7fTtcbiAgICAgICAgbGV0IHNjaGVtYTtcbiAgICAgICAgaWYgKHR5cGVvZiBlbnYuc2NoZW1hID09IFwib2JqZWN0XCIpXG4gICAgICAgICAgICBzY2hlbWEgPSBlbnYuc2NoZW1hO1xuICAgICAgICB0aGlzLnNjaGVtYSA9IGVudi5zY2hlbWE7XG4gICAgICAgIHRoaXMuc2NoZW1hSWQgPSBlbnYuc2NoZW1hSWQ7XG4gICAgICAgIHRoaXMucm9vdCA9IGVudi5yb290IHx8IHRoaXM7XG4gICAgICAgIHRoaXMuYmFzZUlkID0gKF9hID0gZW52LmJhc2VJZCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogKDAsIHJlc29sdmVfMS5ub3JtYWxpemVJZCkoc2NoZW1hID09PSBudWxsIHx8IHNjaGVtYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2NoZW1hW2Vudi5zY2hlbWFJZCB8fCBcIiRpZFwiXSk7XG4gICAgICAgIHRoaXMuc2NoZW1hUGF0aCA9IGVudi5zY2hlbWFQYXRoO1xuICAgICAgICB0aGlzLmxvY2FsUmVmcyA9IGVudi5sb2NhbFJlZnM7XG4gICAgICAgIHRoaXMubWV0YSA9IGVudi5tZXRhO1xuICAgICAgICB0aGlzLiRhc3luYyA9IHNjaGVtYSA9PT0gbnVsbCB8fCBzY2hlbWEgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNjaGVtYS4kYXN5bmM7XG4gICAgICAgIHRoaXMucmVmcyA9IHt9O1xuICAgIH1cbn1cbmV4cG9ydHMuU2NoZW1hRW52ID0gU2NoZW1hRW52O1xuLy8gbGV0IGNvZGVTaXplID0gMFxuLy8gbGV0IG5vZGVDb3VudCA9IDBcbi8vIENvbXBpbGVzIHNjaGVtYSBpbiBTY2hlbWFFbnZcbmZ1bmN0aW9uIGNvbXBpbGVTY2hlbWEoc2NoKSB7XG4gICAgLy8gVE9ETyByZWZhY3RvciAtIHJlbW92ZSBjb21waWxhdGlvbnNcbiAgICBjb25zdCBfc2NoID0gZ2V0Q29tcGlsaW5nU2NoZW1hLmNhbGwodGhpcywgc2NoKTtcbiAgICBpZiAoX3NjaClcbiAgICAgICAgcmV0dXJuIF9zY2g7XG4gICAgY29uc3Qgcm9vdElkID0gKDAsIHJlc29sdmVfMS5nZXRGdWxsUGF0aCkodGhpcy5vcHRzLnVyaVJlc29sdmVyLCBzY2gucm9vdC5iYXNlSWQpOyAvLyBUT0RPIGlmIGdldEZ1bGxQYXRoIHJlbW92ZWQgMSB0ZXN0cyBmYWlsc1xuICAgIGNvbnN0IHsgZXM1LCBsaW5lcyB9ID0gdGhpcy5vcHRzLmNvZGU7XG4gICAgY29uc3QgeyBvd25Qcm9wZXJ0aWVzIH0gPSB0aGlzLm9wdHM7XG4gICAgY29uc3QgZ2VuID0gbmV3IGNvZGVnZW5fMS5Db2RlR2VuKHRoaXMuc2NvcGUsIHsgZXM1LCBsaW5lcywgb3duUHJvcGVydGllcyB9KTtcbiAgICBsZXQgX1ZhbGlkYXRpb25FcnJvcjtcbiAgICBpZiAoc2NoLiRhc3luYykge1xuICAgICAgICBfVmFsaWRhdGlvbkVycm9yID0gZ2VuLnNjb3BlVmFsdWUoXCJFcnJvclwiLCB7XG4gICAgICAgICAgICByZWY6IHZhbGlkYXRpb25fZXJyb3JfMS5kZWZhdWx0LFxuICAgICAgICAgICAgY29kZTogKDAsIGNvZGVnZW5fMS5fKSBgcmVxdWlyZShcImFqdi9kaXN0L3J1bnRpbWUvdmFsaWRhdGlvbl9lcnJvclwiKS5kZWZhdWx0YCxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGNvbnN0IHZhbGlkYXRlTmFtZSA9IGdlbi5zY29wZU5hbWUoXCJ2YWxpZGF0ZVwiKTtcbiAgICBzY2gudmFsaWRhdGVOYW1lID0gdmFsaWRhdGVOYW1lO1xuICAgIGNvbnN0IHNjaGVtYUN4dCA9IHtcbiAgICAgICAgZ2VuLFxuICAgICAgICBhbGxFcnJvcnM6IHRoaXMub3B0cy5hbGxFcnJvcnMsXG4gICAgICAgIGRhdGE6IG5hbWVzXzEuZGVmYXVsdC5kYXRhLFxuICAgICAgICBwYXJlbnREYXRhOiBuYW1lc18xLmRlZmF1bHQucGFyZW50RGF0YSxcbiAgICAgICAgcGFyZW50RGF0YVByb3BlcnR5OiBuYW1lc18xLmRlZmF1bHQucGFyZW50RGF0YVByb3BlcnR5LFxuICAgICAgICBkYXRhTmFtZXM6IFtuYW1lc18xLmRlZmF1bHQuZGF0YV0sXG4gICAgICAgIGRhdGFQYXRoQXJyOiBbY29kZWdlbl8xLm5pbF0sIC8vIFRPRE8gY2FuIGl0cyBsZW5ndGggYmUgdXNlZCBhcyBkYXRhTGV2ZWwgaWYgbmlsIGlzIHJlbW92ZWQ/XG4gICAgICAgIGRhdGFMZXZlbDogMCxcbiAgICAgICAgZGF0YVR5cGVzOiBbXSxcbiAgICAgICAgZGVmaW5lZFByb3BlcnRpZXM6IG5ldyBTZXQoKSxcbiAgICAgICAgdG9wU2NoZW1hUmVmOiBnZW4uc2NvcGVWYWx1ZShcInNjaGVtYVwiLCB0aGlzLm9wdHMuY29kZS5zb3VyY2UgPT09IHRydWVcbiAgICAgICAgICAgID8geyByZWY6IHNjaC5zY2hlbWEsIGNvZGU6ICgwLCBjb2RlZ2VuXzEuc3RyaW5naWZ5KShzY2guc2NoZW1hKSB9XG4gICAgICAgICAgICA6IHsgcmVmOiBzY2guc2NoZW1hIH0pLFxuICAgICAgICB2YWxpZGF0ZU5hbWUsXG4gICAgICAgIFZhbGlkYXRpb25FcnJvcjogX1ZhbGlkYXRpb25FcnJvcixcbiAgICAgICAgc2NoZW1hOiBzY2guc2NoZW1hLFxuICAgICAgICBzY2hlbWFFbnY6IHNjaCxcbiAgICAgICAgcm9vdElkLFxuICAgICAgICBiYXNlSWQ6IHNjaC5iYXNlSWQgfHwgcm9vdElkLFxuICAgICAgICBzY2hlbWFQYXRoOiBjb2RlZ2VuXzEubmlsLFxuICAgICAgICBlcnJTY2hlbWFQYXRoOiBzY2guc2NoZW1hUGF0aCB8fCAodGhpcy5vcHRzLmp0ZCA/IFwiXCIgOiBcIiNcIiksXG4gICAgICAgIGVycm9yUGF0aDogKDAsIGNvZGVnZW5fMS5fKSBgXCJcImAsXG4gICAgICAgIG9wdHM6IHRoaXMub3B0cyxcbiAgICAgICAgc2VsZjogdGhpcyxcbiAgICB9O1xuICAgIGxldCBzb3VyY2VDb2RlO1xuICAgIHRyeSB7XG4gICAgICAgIHRoaXMuX2NvbXBpbGF0aW9ucy5hZGQoc2NoKTtcbiAgICAgICAgKDAsIHZhbGlkYXRlXzEudmFsaWRhdGVGdW5jdGlvbkNvZGUpKHNjaGVtYUN4dCk7XG4gICAgICAgIGdlbi5vcHRpbWl6ZSh0aGlzLm9wdHMuY29kZS5vcHRpbWl6ZSk7XG4gICAgICAgIC8vIGdlbi5vcHRpbWl6ZSgxKVxuICAgICAgICBjb25zdCB2YWxpZGF0ZUNvZGUgPSBnZW4udG9TdHJpbmcoKTtcbiAgICAgICAgc291cmNlQ29kZSA9IGAke2dlbi5zY29wZVJlZnMobmFtZXNfMS5kZWZhdWx0LnNjb3BlKX1yZXR1cm4gJHt2YWxpZGF0ZUNvZGV9YDtcbiAgICAgICAgLy8gY29uc29sZS5sb2coKGNvZGVTaXplICs9IHNvdXJjZUNvZGUubGVuZ3RoKSwgKG5vZGVDb3VudCArPSBnZW4ubm9kZUNvdW50KSlcbiAgICAgICAgaWYgKHRoaXMub3B0cy5jb2RlLnByb2Nlc3MpXG4gICAgICAgICAgICBzb3VyY2VDb2RlID0gdGhpcy5vcHRzLmNvZGUucHJvY2Vzcyhzb3VyY2VDb2RlLCBzY2gpO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhcIlxcblxcblxcbiAqKiogXFxuXCIsIHNvdXJjZUNvZGUpXG4gICAgICAgIGNvbnN0IG1ha2VWYWxpZGF0ZSA9IG5ldyBGdW5jdGlvbihgJHtuYW1lc18xLmRlZmF1bHQuc2VsZn1gLCBgJHtuYW1lc18xLmRlZmF1bHQuc2NvcGV9YCwgc291cmNlQ29kZSk7XG4gICAgICAgIGNvbnN0IHZhbGlkYXRlID0gbWFrZVZhbGlkYXRlKHRoaXMsIHRoaXMuc2NvcGUuZ2V0KCkpO1xuICAgICAgICB0aGlzLnNjb3BlLnZhbHVlKHZhbGlkYXRlTmFtZSwgeyByZWY6IHZhbGlkYXRlIH0pO1xuICAgICAgICB2YWxpZGF0ZS5lcnJvcnMgPSBudWxsO1xuICAgICAgICB2YWxpZGF0ZS5zY2hlbWEgPSBzY2guc2NoZW1hO1xuICAgICAgICB2YWxpZGF0ZS5zY2hlbWFFbnYgPSBzY2g7XG4gICAgICAgIGlmIChzY2guJGFzeW5jKVxuICAgICAgICAgICAgdmFsaWRhdGUuJGFzeW5jID0gdHJ1ZTtcbiAgICAgICAgaWYgKHRoaXMub3B0cy5jb2RlLnNvdXJjZSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgdmFsaWRhdGUuc291cmNlID0geyB2YWxpZGF0ZU5hbWUsIHZhbGlkYXRlQ29kZSwgc2NvcGVWYWx1ZXM6IGdlbi5fdmFsdWVzIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub3B0cy51bmV2YWx1YXRlZCkge1xuICAgICAgICAgICAgY29uc3QgeyBwcm9wcywgaXRlbXMgfSA9IHNjaGVtYUN4dDtcbiAgICAgICAgICAgIHZhbGlkYXRlLmV2YWx1YXRlZCA9IHtcbiAgICAgICAgICAgICAgICBwcm9wczogcHJvcHMgaW5zdGFuY2VvZiBjb2RlZ2VuXzEuTmFtZSA/IHVuZGVmaW5lZCA6IHByb3BzLFxuICAgICAgICAgICAgICAgIGl0ZW1zOiBpdGVtcyBpbnN0YW5jZW9mIGNvZGVnZW5fMS5OYW1lID8gdW5kZWZpbmVkIDogaXRlbXMsXG4gICAgICAgICAgICAgICAgZHluYW1pY1Byb3BzOiBwcm9wcyBpbnN0YW5jZW9mIGNvZGVnZW5fMS5OYW1lLFxuICAgICAgICAgICAgICAgIGR5bmFtaWNJdGVtczogaXRlbXMgaW5zdGFuY2VvZiBjb2RlZ2VuXzEuTmFtZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAodmFsaWRhdGUuc291cmNlKVxuICAgICAgICAgICAgICAgIHZhbGlkYXRlLnNvdXJjZS5ldmFsdWF0ZWQgPSAoMCwgY29kZWdlbl8xLnN0cmluZ2lmeSkodmFsaWRhdGUuZXZhbHVhdGVkKTtcbiAgICAgICAgfVxuICAgICAgICBzY2gudmFsaWRhdGUgPSB2YWxpZGF0ZTtcbiAgICAgICAgcmV0dXJuIHNjaDtcbiAgICB9XG4gICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgZGVsZXRlIHNjaC52YWxpZGF0ZTtcbiAgICAgICAgZGVsZXRlIHNjaC52YWxpZGF0ZU5hbWU7XG4gICAgICAgIGlmIChzb3VyY2VDb2RlKVxuICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoXCJFcnJvciBjb21waWxpbmcgc2NoZW1hLCBmdW5jdGlvbiBjb2RlOlwiLCBzb3VyY2VDb2RlKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coXCJcXG5cXG5cXG4gKioqIFxcblwiLCBzb3VyY2VDb2RlLCB0aGlzLm9wdHMpXG4gICAgICAgIHRocm93IGU7XG4gICAgfVxuICAgIGZpbmFsbHkge1xuICAgICAgICB0aGlzLl9jb21waWxhdGlvbnMuZGVsZXRlKHNjaCk7XG4gICAgfVxufVxuZXhwb3J0cy5jb21waWxlU2NoZW1hID0gY29tcGlsZVNjaGVtYTtcbmZ1bmN0aW9uIHJlc29sdmVSZWYocm9vdCwgYmFzZUlkLCByZWYpIHtcbiAgICB2YXIgX2E7XG4gICAgcmVmID0gKDAsIHJlc29sdmVfMS5yZXNvbHZlVXJsKSh0aGlzLm9wdHMudXJpUmVzb2x2ZXIsIGJhc2VJZCwgcmVmKTtcbiAgICBjb25zdCBzY2hPckZ1bmMgPSByb290LnJlZnNbcmVmXTtcbiAgICBpZiAoc2NoT3JGdW5jKVxuICAgICAgICByZXR1cm4gc2NoT3JGdW5jO1xuICAgIGxldCBfc2NoID0gcmVzb2x2ZS5jYWxsKHRoaXMsIHJvb3QsIHJlZik7XG4gICAgaWYgKF9zY2ggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCBzY2hlbWEgPSAoX2EgPSByb290LmxvY2FsUmVmcykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hW3JlZl07IC8vIFRPRE8gbWF5YmUgbG9jYWxSZWZzIHNob3VsZCBob2xkIFNjaGVtYUVudlxuICAgICAgICBjb25zdCB7IHNjaGVtYUlkIH0gPSB0aGlzLm9wdHM7XG4gICAgICAgIGlmIChzY2hlbWEpXG4gICAgICAgICAgICBfc2NoID0gbmV3IFNjaGVtYUVudih7IHNjaGVtYSwgc2NoZW1hSWQsIHJvb3QsIGJhc2VJZCB9KTtcbiAgICB9XG4gICAgaWYgKF9zY2ggPT09IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuO1xuICAgIHJldHVybiAocm9vdC5yZWZzW3JlZl0gPSBpbmxpbmVPckNvbXBpbGUuY2FsbCh0aGlzLCBfc2NoKSk7XG59XG5leHBvcnRzLnJlc29sdmVSZWYgPSByZXNvbHZlUmVmO1xuZnVuY3Rpb24gaW5saW5lT3JDb21waWxlKHNjaCkge1xuICAgIGlmICgoMCwgcmVzb2x2ZV8xLmlubGluZVJlZikoc2NoLnNjaGVtYSwgdGhpcy5vcHRzLmlubGluZVJlZnMpKVxuICAgICAgICByZXR1cm4gc2NoLnNjaGVtYTtcbiAgICByZXR1cm4gc2NoLnZhbGlkYXRlID8gc2NoIDogY29tcGlsZVNjaGVtYS5jYWxsKHRoaXMsIHNjaCk7XG59XG4vLyBJbmRleCBvZiBzY2hlbWEgY29tcGlsYXRpb24gaW4gdGhlIGN1cnJlbnRseSBjb21waWxlZCBsaXN0XG5mdW5jdGlvbiBnZXRDb21waWxpbmdTY2hlbWEoc2NoRW52KSB7XG4gICAgZm9yIChjb25zdCBzY2ggb2YgdGhpcy5fY29tcGlsYXRpb25zKSB7XG4gICAgICAgIGlmIChzYW1lU2NoZW1hRW52KHNjaCwgc2NoRW52KSlcbiAgICAgICAgICAgIHJldHVybiBzY2g7XG4gICAgfVxufVxuZXhwb3J0cy5nZXRDb21waWxpbmdTY2hlbWEgPSBnZXRDb21waWxpbmdTY2hlbWE7XG5mdW5jdGlvbiBzYW1lU2NoZW1hRW52KHMxLCBzMikge1xuICAgIHJldHVybiBzMS5zY2hlbWEgPT09IHMyLnNjaGVtYSAmJiBzMS5yb290ID09PSBzMi5yb290ICYmIHMxLmJhc2VJZCA9PT0gczIuYmFzZUlkO1xufVxuLy8gcmVzb2x2ZSBhbmQgY29tcGlsZSB0aGUgcmVmZXJlbmNlcyAoJHJlZilcbi8vIFRPRE8gcmV0dXJucyBBbnlTY2hlbWFPYmplY3QgKGlmIHRoZSBzY2hlbWEgY2FuIGJlIGlubGluZWQpIG9yIHZhbGlkYXRpb24gZnVuY3Rpb25cbmZ1bmN0aW9uIHJlc29sdmUocm9vdCwgLy8gaW5mb3JtYXRpb24gYWJvdXQgdGhlIHJvb3Qgc2NoZW1hIGZvciB0aGUgY3VycmVudCBzY2hlbWFcbnJlZiAvLyByZWZlcmVuY2UgdG8gcmVzb2x2ZVxuKSB7XG4gICAgbGV0IHNjaDtcbiAgICB3aGlsZSAodHlwZW9mIChzY2ggPSB0aGlzLnJlZnNbcmVmXSkgPT0gXCJzdHJpbmdcIilcbiAgICAgICAgcmVmID0gc2NoO1xuICAgIHJldHVybiBzY2ggfHwgdGhpcy5zY2hlbWFzW3JlZl0gfHwgcmVzb2x2ZVNjaGVtYS5jYWxsKHRoaXMsIHJvb3QsIHJlZik7XG59XG4vLyBSZXNvbHZlIHNjaGVtYSwgaXRzIHJvb3QgYW5kIGJhc2VJZFxuZnVuY3Rpb24gcmVzb2x2ZVNjaGVtYShyb290LCAvLyByb290IG9iamVjdCB3aXRoIHByb3BlcnRpZXMgc2NoZW1hLCByZWZzIFRPRE8gYmVsb3cgU2NoZW1hRW52IGlzIGFzc2lnbmVkIHRvIGl0XG5yZWYgLy8gcmVmZXJlbmNlIHRvIHJlc29sdmVcbikge1xuICAgIGNvbnN0IHAgPSB0aGlzLm9wdHMudXJpUmVzb2x2ZXIucGFyc2UocmVmKTtcbiAgICBjb25zdCByZWZQYXRoID0gKDAsIHJlc29sdmVfMS5fZ2V0RnVsbFBhdGgpKHRoaXMub3B0cy51cmlSZXNvbHZlciwgcCk7XG4gICAgbGV0IGJhc2VJZCA9ICgwLCByZXNvbHZlXzEuZ2V0RnVsbFBhdGgpKHRoaXMub3B0cy51cmlSZXNvbHZlciwgcm9vdC5iYXNlSWQsIHVuZGVmaW5lZCk7XG4gICAgLy8gVE9ETyBgT2JqZWN0LmtleXMocm9vdC5zY2hlbWEpLmxlbmd0aCA+IDBgIHNob3VsZCBub3QgYmUgbmVlZGVkIC0gYnV0IHJlbW92aW5nIGJyZWFrcyAyIHRlc3RzXG4gICAgaWYgKE9iamVjdC5rZXlzKHJvb3Quc2NoZW1hKS5sZW5ndGggPiAwICYmIHJlZlBhdGggPT09IGJhc2VJZCkge1xuICAgICAgICByZXR1cm4gZ2V0SnNvblBvaW50ZXIuY2FsbCh0aGlzLCBwLCByb290KTtcbiAgICB9XG4gICAgY29uc3QgaWQgPSAoMCwgcmVzb2x2ZV8xLm5vcm1hbGl6ZUlkKShyZWZQYXRoKTtcbiAgICBjb25zdCBzY2hPclJlZiA9IHRoaXMucmVmc1tpZF0gfHwgdGhpcy5zY2hlbWFzW2lkXTtcbiAgICBpZiAodHlwZW9mIHNjaE9yUmVmID09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgY29uc3Qgc2NoID0gcmVzb2x2ZVNjaGVtYS5jYWxsKHRoaXMsIHJvb3QsIHNjaE9yUmVmKTtcbiAgICAgICAgaWYgKHR5cGVvZiAoc2NoID09PSBudWxsIHx8IHNjaCA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2NoLnNjaGVtYSkgIT09IFwib2JqZWN0XCIpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHJldHVybiBnZXRKc29uUG9pbnRlci5jYWxsKHRoaXMsIHAsIHNjaCk7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgKHNjaE9yUmVmID09PSBudWxsIHx8IHNjaE9yUmVmID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzY2hPclJlZi5zY2hlbWEpICE9PSBcIm9iamVjdFwiKVxuICAgICAgICByZXR1cm47XG4gICAgaWYgKCFzY2hPclJlZi52YWxpZGF0ZSlcbiAgICAgICAgY29tcGlsZVNjaGVtYS5jYWxsKHRoaXMsIHNjaE9yUmVmKTtcbiAgICBpZiAoaWQgPT09ICgwLCByZXNvbHZlXzEubm9ybWFsaXplSWQpKHJlZikpIHtcbiAgICAgICAgY29uc3QgeyBzY2hlbWEgfSA9IHNjaE9yUmVmO1xuICAgICAgICBjb25zdCB7IHNjaGVtYUlkIH0gPSB0aGlzLm9wdHM7XG4gICAgICAgIGNvbnN0IHNjaElkID0gc2NoZW1hW3NjaGVtYUlkXTtcbiAgICAgICAgaWYgKHNjaElkKVxuICAgICAgICAgICAgYmFzZUlkID0gKDAsIHJlc29sdmVfMS5yZXNvbHZlVXJsKSh0aGlzLm9wdHMudXJpUmVzb2x2ZXIsIGJhc2VJZCwgc2NoSWQpO1xuICAgICAgICByZXR1cm4gbmV3IFNjaGVtYUVudih7IHNjaGVtYSwgc2NoZW1hSWQsIHJvb3QsIGJhc2VJZCB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGdldEpzb25Qb2ludGVyLmNhbGwodGhpcywgcCwgc2NoT3JSZWYpO1xufVxuZXhwb3J0cy5yZXNvbHZlU2NoZW1hID0gcmVzb2x2ZVNjaGVtYTtcbmNvbnN0IFBSRVZFTlRfU0NPUEVfQ0hBTkdFID0gbmV3IFNldChbXG4gICAgXCJwcm9wZXJ0aWVzXCIsXG4gICAgXCJwYXR0ZXJuUHJvcGVydGllc1wiLFxuICAgIFwiZW51bVwiLFxuICAgIFwiZGVwZW5kZW5jaWVzXCIsXG4gICAgXCJkZWZpbml0aW9uc1wiLFxuXSk7XG5mdW5jdGlvbiBnZXRKc29uUG9pbnRlcihwYXJzZWRSZWYsIHsgYmFzZUlkLCBzY2hlbWEsIHJvb3QgfSkge1xuICAgIHZhciBfYTtcbiAgICBpZiAoKChfYSA9IHBhcnNlZFJlZi5mcmFnbWVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hWzBdKSAhPT0gXCIvXCIpXG4gICAgICAgIHJldHVybjtcbiAgICBmb3IgKGNvbnN0IHBhcnQgb2YgcGFyc2VkUmVmLmZyYWdtZW50LnNsaWNlKDEpLnNwbGl0KFwiL1wiKSkge1xuICAgICAgICBpZiAodHlwZW9mIHNjaGVtYSA9PT0gXCJib29sZWFuXCIpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IHBhcnRTY2hlbWEgPSBzY2hlbWFbKDAsIHV0aWxfMS51bmVzY2FwZUZyYWdtZW50KShwYXJ0KV07XG4gICAgICAgIGlmIChwYXJ0U2NoZW1hID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHNjaGVtYSA9IHBhcnRTY2hlbWE7XG4gICAgICAgIC8vIFRPRE8gUFJFVkVOVF9TQ09QRV9DSEFOR0UgY291bGQgYmUgZGVmaW5lZCBpbiBrZXl3b3JkIGRlZj9cbiAgICAgICAgY29uc3Qgc2NoSWQgPSB0eXBlb2Ygc2NoZW1hID09PSBcIm9iamVjdFwiICYmIHNjaGVtYVt0aGlzLm9wdHMuc2NoZW1hSWRdO1xuICAgICAgICBpZiAoIVBSRVZFTlRfU0NPUEVfQ0hBTkdFLmhhcyhwYXJ0KSAmJiBzY2hJZCkge1xuICAgICAgICAgICAgYmFzZUlkID0gKDAsIHJlc29sdmVfMS5yZXNvbHZlVXJsKSh0aGlzLm9wdHMudXJpUmVzb2x2ZXIsIGJhc2VJZCwgc2NoSWQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGxldCBlbnY7XG4gICAgaWYgKHR5cGVvZiBzY2hlbWEgIT0gXCJib29sZWFuXCIgJiYgc2NoZW1hLiRyZWYgJiYgISgwLCB1dGlsXzEuc2NoZW1hSGFzUnVsZXNCdXRSZWYpKHNjaGVtYSwgdGhpcy5SVUxFUykpIHtcbiAgICAgICAgY29uc3QgJHJlZiA9ICgwLCByZXNvbHZlXzEucmVzb2x2ZVVybCkodGhpcy5vcHRzLnVyaVJlc29sdmVyLCBiYXNlSWQsIHNjaGVtYS4kcmVmKTtcbiAgICAgICAgZW52ID0gcmVzb2x2ZVNjaGVtYS5jYWxsKHRoaXMsIHJvb3QsICRyZWYpO1xuICAgIH1cbiAgICAvLyBldmVuIHRob3VnaCByZXNvbHV0aW9uIGZhaWxlZCB3ZSBuZWVkIHRvIHJldHVybiBTY2hlbWFFbnYgdG8gdGhyb3cgZXhjZXB0aW9uXG4gICAgLy8gc28gdGhhdCBjb21waWxlQXN5bmMgbG9hZHMgbWlzc2luZyBzY2hlbWEuXG4gICAgY29uc3QgeyBzY2hlbWFJZCB9ID0gdGhpcy5vcHRzO1xuICAgIGVudiA9IGVudiB8fCBuZXcgU2NoZW1hRW52KHsgc2NoZW1hLCBzY2hlbWFJZCwgcm9vdCwgYmFzZUlkIH0pO1xuICAgIGlmIChlbnYuc2NoZW1hICE9PSBlbnYucm9vdC5zY2hlbWEpXG4gICAgICAgIHJldHVybiBlbnY7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbi8qKiBAdHlwZSB7KHZhbHVlOiBzdHJpbmcpID0+IGJvb2xlYW59ICovXG5jb25zdCBpc1VVSUQgPSBSZWdFeHAucHJvdG90eXBlLnRlc3QuYmluZCgvXltcXGRhLWZdezh9LVtcXGRhLWZdezR9LVtcXGRhLWZdezR9LVtcXGRhLWZdezR9LVtcXGRhLWZdezEyfSQvaXUpXG5cbi8qKiBAdHlwZSB7KHZhbHVlOiBzdHJpbmcpID0+IGJvb2xlYW59ICovXG5jb25zdCBpc0lQdjQgPSBSZWdFeHAucHJvdG90eXBlLnRlc3QuYmluZCgvXig/Oig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGR7Mn18WzEtOV1cXGR8XFxkKVxcLil7M30oPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkezJ9fFsxLTldXFxkfFxcZCkkL3UpXG5cbi8qKlxuICogQHBhcmFtIHtBcnJheTxzdHJpbmc+fSBpbnB1dFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gc3RyaW5nQXJyYXlUb0hleFN0cmlwcGVkIChpbnB1dCkge1xuICBsZXQgYWNjID0gJydcbiAgbGV0IGNvZGUgPSAwXG4gIGxldCBpID0gMFxuXG4gIGZvciAoaSA9IDA7IGkgPCBpbnB1dC5sZW5ndGg7IGkrKykge1xuICAgIGNvZGUgPSBpbnB1dFtpXS5jaGFyQ29kZUF0KDApXG4gICAgaWYgKGNvZGUgPT09IDQ4KSB7XG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICBpZiAoISgoY29kZSA+PSA0OCAmJiBjb2RlIDw9IDU3KSB8fCAoY29kZSA+PSA2NSAmJiBjb2RlIDw9IDcwKSB8fCAoY29kZSA+PSA5NyAmJiBjb2RlIDw9IDEwMikpKSB7XG4gICAgICByZXR1cm4gJydcbiAgICB9XG4gICAgYWNjICs9IGlucHV0W2ldXG4gICAgYnJlYWtcbiAgfVxuXG4gIGZvciAoaSArPSAxOyBpIDwgaW5wdXQubGVuZ3RoOyBpKyspIHtcbiAgICBjb2RlID0gaW5wdXRbaV0uY2hhckNvZGVBdCgwKVxuICAgIGlmICghKChjb2RlID49IDQ4ICYmIGNvZGUgPD0gNTcpIHx8IChjb2RlID49IDY1ICYmIGNvZGUgPD0gNzApIHx8IChjb2RlID49IDk3ICYmIGNvZGUgPD0gMTAyKSkpIHtcbiAgICAgIHJldHVybiAnJ1xuICAgIH1cbiAgICBhY2MgKz0gaW5wdXRbaV1cbiAgfVxuICByZXR1cm4gYWNjXG59XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gR2V0SVBWNlJlc3VsdFxuICogQHByb3BlcnR5IHtib29sZWFufSBlcnJvciAtIEluZGljYXRlcyBpZiB0aGVyZSB3YXMgYW4gZXJyb3IgcGFyc2luZyB0aGUgSVB2NiBhZGRyZXNzLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IGFkZHJlc3MgLSBUaGUgcGFyc2VkIElQdjYgYWRkcmVzcy5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbem9uZV0gLSBUaGUgem9uZSBpZGVudGlmaWVyLCBpZiBwcmVzZW50LlxuICovXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuY29uc3Qgbm9uU2ltcGxlRG9tYWluID0gUmVnRXhwLnByb3RvdHlwZS50ZXN0LmJpbmQoL1teIVwiJCYnKCkqKyxcXC0uOz1fYGEtent9fl0vdSlcblxuLyoqXG4gKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IGJ1ZmZlclxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGNvbnN1bWVJc1pvbmUgKGJ1ZmZlcikge1xuICBidWZmZXIubGVuZ3RoID0gMFxuICByZXR1cm4gdHJ1ZVxufVxuXG4vKipcbiAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0gYnVmZmVyXG4gKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IGFkZHJlc3NcbiAqIEBwYXJhbSB7R2V0SVBWNlJlc3VsdH0gb3V0cHV0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gY29uc3VtZUhleHRldHMgKGJ1ZmZlciwgYWRkcmVzcywgb3V0cHV0KSB7XG4gIGlmIChidWZmZXIubGVuZ3RoKSB7XG4gICAgY29uc3QgaGV4ID0gc3RyaW5nQXJyYXlUb0hleFN0cmlwcGVkKGJ1ZmZlcilcbiAgICBpZiAoaGV4ICE9PSAnJykge1xuICAgICAgYWRkcmVzcy5wdXNoKGhleClcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0cHV0LmVycm9yID0gdHJ1ZVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICAgIGJ1ZmZlci5sZW5ndGggPSAwXG4gIH1cbiAgcmV0dXJuIHRydWVcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gaW5wdXRcbiAqIEByZXR1cm5zIHtHZXRJUFY2UmVzdWx0fVxuICovXG5mdW5jdGlvbiBnZXRJUFY2IChpbnB1dCkge1xuICBsZXQgdG9rZW5Db3VudCA9IDBcbiAgY29uc3Qgb3V0cHV0ID0geyBlcnJvcjogZmFsc2UsIGFkZHJlc3M6ICcnLCB6b25lOiAnJyB9XG4gIC8qKiBAdHlwZSB7QXJyYXk8c3RyaW5nPn0gKi9cbiAgY29uc3QgYWRkcmVzcyA9IFtdXG4gIC8qKiBAdHlwZSB7QXJyYXk8c3RyaW5nPn0gKi9cbiAgY29uc3QgYnVmZmVyID0gW11cbiAgbGV0IGVuZGlwdjZFbmNvdW50ZXJlZCA9IGZhbHNlXG4gIGxldCBlbmRJcHY2ID0gZmFsc2VcblxuICBsZXQgY29uc3VtZSA9IGNvbnN1bWVIZXh0ZXRzXG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbnB1dC5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGN1cnNvciA9IGlucHV0W2ldXG4gICAgaWYgKGN1cnNvciA9PT0gJ1snIHx8IGN1cnNvciA9PT0gJ10nKSB7IGNvbnRpbnVlIH1cbiAgICBpZiAoY3Vyc29yID09PSAnOicpIHtcbiAgICAgIGlmIChlbmRpcHY2RW5jb3VudGVyZWQgPT09IHRydWUpIHtcbiAgICAgICAgZW5kSXB2NiA9IHRydWVcbiAgICAgIH1cbiAgICAgIGlmICghY29uc3VtZShidWZmZXIsIGFkZHJlc3MsIG91dHB1dCkpIHsgYnJlYWsgfVxuICAgICAgaWYgKCsrdG9rZW5Db3VudCA+IDcpIHtcbiAgICAgICAgLy8gbm90IHZhbGlkXG4gICAgICAgIG91dHB1dC5lcnJvciA9IHRydWVcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAgIGlmIChpID4gMCAmJiBpbnB1dFtpIC0gMV0gPT09ICc6Jykge1xuICAgICAgICBlbmRpcHY2RW5jb3VudGVyZWQgPSB0cnVlXG4gICAgICB9XG4gICAgICBhZGRyZXNzLnB1c2goJzonKVxuICAgICAgY29udGludWVcbiAgICB9IGVsc2UgaWYgKGN1cnNvciA9PT0gJyUnKSB7XG4gICAgICBpZiAoIWNvbnN1bWUoYnVmZmVyLCBhZGRyZXNzLCBvdXRwdXQpKSB7IGJyZWFrIH1cbiAgICAgIC8vIHN3aXRjaCB0byB6b25lIGRldGVjdGlvblxuICAgICAgY29uc3VtZSA9IGNvbnN1bWVJc1pvbmVcbiAgICB9IGVsc2Uge1xuICAgICAgYnVmZmVyLnB1c2goY3Vyc29yKVxuICAgICAgY29udGludWVcbiAgICB9XG4gIH1cbiAgaWYgKGJ1ZmZlci5sZW5ndGgpIHtcbiAgICBpZiAoY29uc3VtZSA9PT0gY29uc3VtZUlzWm9uZSkge1xuICAgICAgb3V0cHV0LnpvbmUgPSBidWZmZXIuam9pbignJylcbiAgICB9IGVsc2UgaWYgKGVuZElwdjYpIHtcbiAgICAgIGFkZHJlc3MucHVzaChidWZmZXIuam9pbignJykpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFkZHJlc3MucHVzaChzdHJpbmdBcnJheVRvSGV4U3RyaXBwZWQoYnVmZmVyKSlcbiAgICB9XG4gIH1cbiAgb3V0cHV0LmFkZHJlc3MgPSBhZGRyZXNzLmpvaW4oJycpXG4gIHJldHVybiBvdXRwdXRcbn1cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBOb3JtYWxpemVJUHY2UmVzdWx0XG4gKiBAcHJvcGVydHkge3N0cmluZ30gaG9zdCAtIFRoZSBub3JtYWxpemVkIGhvc3QuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2VzY2FwZWRIb3N0XSAtIFRoZSBlc2NhcGVkIGhvc3QuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGlzSVBWNiAtIEluZGljYXRlcyBpZiB0aGUgaG9zdCBpcyBhbiBJUHY2IGFkZHJlc3MuXG4gKi9cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gaG9zdFxuICogQHJldHVybnMge05vcm1hbGl6ZUlQdjZSZXN1bHR9XG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZUlQdjYgKGhvc3QpIHtcbiAgaWYgKGZpbmRUb2tlbihob3N0LCAnOicpIDwgMikgeyByZXR1cm4geyBob3N0LCBpc0lQVjY6IGZhbHNlIH0gfVxuICBjb25zdCBpcHY2ID0gZ2V0SVBWNihob3N0KVxuXG4gIGlmICghaXB2Ni5lcnJvcikge1xuICAgIGxldCBuZXdIb3N0ID0gaXB2Ni5hZGRyZXNzXG4gICAgbGV0IGVzY2FwZWRIb3N0ID0gaXB2Ni5hZGRyZXNzXG4gICAgaWYgKGlwdjYuem9uZSkge1xuICAgICAgbmV3SG9zdCArPSAnJScgKyBpcHY2LnpvbmVcbiAgICAgIGVzY2FwZWRIb3N0ICs9ICclMjUnICsgaXB2Ni56b25lXG4gICAgfVxuICAgIHJldHVybiB7IGhvc3Q6IG5ld0hvc3QsIGlzSVBWNjogdHJ1ZSwgZXNjYXBlZEhvc3QgfVxuICB9IGVsc2Uge1xuICAgIHJldHVybiB7IGhvc3QsIGlzSVBWNjogZmFsc2UgfVxuICB9XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICogQHBhcmFtIHtzdHJpbmd9IHRva2VuXG4gKiBAcmV0dXJucyB7bnVtYmVyfVxuICovXG5mdW5jdGlvbiBmaW5kVG9rZW4gKHN0ciwgdG9rZW4pIHtcbiAgbGV0IGluZCA9IDBcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoc3RyW2ldID09PSB0b2tlbikgaW5kKytcbiAgfVxuICByZXR1cm4gaW5kXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGhcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKlxuICogQHNlZSBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzM5ODYjc2VjdGlvbi01LjIuNFxuICovXG5mdW5jdGlvbiByZW1vdmVEb3RTZWdtZW50cyAocGF0aCkge1xuICBsZXQgaW5wdXQgPSBwYXRoXG4gIGNvbnN0IG91dHB1dCA9IFtdXG4gIGxldCBuZXh0U2xhc2ggPSAtMVxuICBsZXQgbGVuID0gMFxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25kLWFzc2lnblxuICB3aGlsZSAobGVuID0gaW5wdXQubGVuZ3RoKSB7XG4gICAgaWYgKGxlbiA9PT0gMSkge1xuICAgICAgaWYgKGlucHV0ID09PSAnLicpIHtcbiAgICAgICAgYnJlYWtcbiAgICAgIH0gZWxzZSBpZiAoaW5wdXQgPT09ICcvJykge1xuICAgICAgICBvdXRwdXQucHVzaCgnLycpXG4gICAgICAgIGJyZWFrXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXRwdXQucHVzaChpbnB1dClcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGxlbiA9PT0gMikge1xuICAgICAgaWYgKGlucHV0WzBdID09PSAnLicpIHtcbiAgICAgICAgaWYgKGlucHV0WzFdID09PSAnLicpIHtcbiAgICAgICAgICBicmVha1xuICAgICAgICB9IGVsc2UgaWYgKGlucHV0WzFdID09PSAnLycpIHtcbiAgICAgICAgICBpbnB1dCA9IGlucHV0LnNsaWNlKDIpXG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChpbnB1dFswXSA9PT0gJy8nKSB7XG4gICAgICAgIGlmIChpbnB1dFsxXSA9PT0gJy4nIHx8IGlucHV0WzFdID09PSAnLycpIHtcbiAgICAgICAgICBvdXRwdXQucHVzaCgnLycpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAobGVuID09PSAzKSB7XG4gICAgICBpZiAoaW5wdXQgPT09ICcvLi4nKSB7XG4gICAgICAgIGlmIChvdXRwdXQubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgICAgb3V0cHV0LnBvcCgpXG4gICAgICAgIH1cbiAgICAgICAgb3V0cHV0LnB1c2goJy8nKVxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoaW5wdXRbMF0gPT09ICcuJykge1xuICAgICAgaWYgKGlucHV0WzFdID09PSAnLicpIHtcbiAgICAgICAgaWYgKGlucHV0WzJdID09PSAnLycpIHtcbiAgICAgICAgICBpbnB1dCA9IGlucHV0LnNsaWNlKDMpXG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChpbnB1dFsxXSA9PT0gJy8nKSB7XG4gICAgICAgIGlucHV0ID0gaW5wdXQuc2xpY2UoMilcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGlucHV0WzBdID09PSAnLycpIHtcbiAgICAgIGlmIChpbnB1dFsxXSA9PT0gJy4nKSB7XG4gICAgICAgIGlmIChpbnB1dFsyXSA9PT0gJy8nKSB7XG4gICAgICAgICAgaW5wdXQgPSBpbnB1dC5zbGljZSgyKVxuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH0gZWxzZSBpZiAoaW5wdXRbMl0gPT09ICcuJykge1xuICAgICAgICAgIGlmIChpbnB1dFszXSA9PT0gJy8nKSB7XG4gICAgICAgICAgICBpbnB1dCA9IGlucHV0LnNsaWNlKDMpXG4gICAgICAgICAgICBpZiAob3V0cHV0Lmxlbmd0aCAhPT0gMCkge1xuICAgICAgICAgICAgICBvdXRwdXQucG9wKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUnVsZSAyRTogTW92ZSBub3JtYWwgcGF0aCBzZWdtZW50IHRvIG91dHB1dFxuICAgIGlmICgobmV4dFNsYXNoID0gaW5wdXQuaW5kZXhPZignLycsIDEpKSA9PT0gLTEpIHtcbiAgICAgIG91dHB1dC5wdXNoKGlucHV0KVxuICAgICAgYnJlYWtcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0cHV0LnB1c2goaW5wdXQuc2xpY2UoMCwgbmV4dFNsYXNoKSlcbiAgICAgIGlucHV0ID0gaW5wdXQuc2xpY2UobmV4dFNsYXNoKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvdXRwdXQuam9pbignJylcbn1cblxuLyoqXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi4vdHlwZXMvaW5kZXgnKS5VUklDb21wb25lbnR9IGNvbXBvbmVudFxuICogQHBhcmFtIHtib29sZWFufSBlc2NcbiAqIEByZXR1cm5zIHtpbXBvcnQoJy4uL3R5cGVzL2luZGV4JykuVVJJQ29tcG9uZW50fVxuICovXG5mdW5jdGlvbiBub3JtYWxpemVDb21wb25lbnRFbmNvZGluZyAoY29tcG9uZW50LCBlc2MpIHtcbiAgY29uc3QgZnVuYyA9IGVzYyAhPT0gdHJ1ZSA/IGVzY2FwZSA6IHVuZXNjYXBlXG4gIGlmIChjb21wb25lbnQuc2NoZW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICBjb21wb25lbnQuc2NoZW1lID0gZnVuYyhjb21wb25lbnQuc2NoZW1lKVxuICB9XG4gIGlmIChjb21wb25lbnQudXNlcmluZm8gIT09IHVuZGVmaW5lZCkge1xuICAgIGNvbXBvbmVudC51c2VyaW5mbyA9IGZ1bmMoY29tcG9uZW50LnVzZXJpbmZvKVxuICB9XG4gIGlmIChjb21wb25lbnQuaG9zdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY29tcG9uZW50Lmhvc3QgPSBmdW5jKGNvbXBvbmVudC5ob3N0KVxuICB9XG4gIGlmIChjb21wb25lbnQucGF0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY29tcG9uZW50LnBhdGggPSBmdW5jKGNvbXBvbmVudC5wYXRoKVxuICB9XG4gIGlmIChjb21wb25lbnQucXVlcnkgIT09IHVuZGVmaW5lZCkge1xuICAgIGNvbXBvbmVudC5xdWVyeSA9IGZ1bmMoY29tcG9uZW50LnF1ZXJ5KVxuICB9XG4gIGlmIChjb21wb25lbnQuZnJhZ21lbnQgIT09IHVuZGVmaW5lZCkge1xuICAgIGNvbXBvbmVudC5mcmFnbWVudCA9IGZ1bmMoY29tcG9uZW50LmZyYWdtZW50KVxuICB9XG4gIHJldHVybiBjb21wb25lbnRcbn1cblxuLyoqXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi4vdHlwZXMvaW5kZXgnKS5VUklDb21wb25lbnR9IGNvbXBvbmVudFxuICogQHJldHVybnMge3N0cmluZ3x1bmRlZmluZWR9XG4gKi9cbmZ1bmN0aW9uIHJlY29tcG9zZUF1dGhvcml0eSAoY29tcG9uZW50KSB7XG4gIGNvbnN0IHVyaVRva2VucyA9IFtdXG5cbiAgaWYgKGNvbXBvbmVudC51c2VyaW5mbyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdXJpVG9rZW5zLnB1c2goY29tcG9uZW50LnVzZXJpbmZvKVxuICAgIHVyaVRva2Vucy5wdXNoKCdAJylcbiAgfVxuXG4gIGlmIChjb21wb25lbnQuaG9zdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgbGV0IGhvc3QgPSB1bmVzY2FwZShjb21wb25lbnQuaG9zdClcbiAgICBpZiAoIWlzSVB2NChob3N0KSkge1xuICAgICAgY29uc3QgaXBWNnJlcyA9IG5vcm1hbGl6ZUlQdjYoaG9zdClcbiAgICAgIGlmIChpcFY2cmVzLmlzSVBWNiA9PT0gdHJ1ZSkge1xuICAgICAgICBob3N0ID0gYFske2lwVjZyZXMuZXNjYXBlZEhvc3R9XWBcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGhvc3QgPSBjb21wb25lbnQuaG9zdFxuICAgICAgfVxuICAgIH1cbiAgICB1cmlUb2tlbnMucHVzaChob3N0KVxuICB9XG5cbiAgaWYgKHR5cGVvZiBjb21wb25lbnQucG9ydCA9PT0gJ251bWJlcicgfHwgdHlwZW9mIGNvbXBvbmVudC5wb3J0ID09PSAnc3RyaW5nJykge1xuICAgIHVyaVRva2Vucy5wdXNoKCc6JylcbiAgICB1cmlUb2tlbnMucHVzaChTdHJpbmcoY29tcG9uZW50LnBvcnQpKVxuICB9XG5cbiAgcmV0dXJuIHVyaVRva2Vucy5sZW5ndGggPyB1cmlUb2tlbnMuam9pbignJykgOiB1bmRlZmluZWRcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBub25TaW1wbGVEb21haW4sXG4gIHJlY29tcG9zZUF1dGhvcml0eSxcbiAgbm9ybWFsaXplQ29tcG9uZW50RW5jb2RpbmcsXG4gIHJlbW92ZURvdFNlZ21lbnRzLFxuICBpc0lQdjQsXG4gIGlzVVVJRCxcbiAgbm9ybWFsaXplSVB2NixcbiAgc3RyaW5nQXJyYXlUb0hleFN0cmlwcGVkXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IGlzVVVJRCB9ID0gcmVxdWlyZSgnLi91dGlscycpXG5jb25zdCBVUk5fUkVHID0gLyhbXFxkYS16XVtcXGRcXC1hLXpdezAsMzF9KTooKD86W1xcdyEkJygpKissXFwtLjo7PUBdfCVbXFxkYS1mXXsyfSkrKS9pdVxuXG5jb25zdCBzdXBwb3J0ZWRTY2hlbWVOYW1lcyA9IC8qKiBAdHlwZSB7Y29uc3R9ICovIChbJ2h0dHAnLCAnaHR0cHMnLCAnd3MnLFxuICAnd3NzJywgJ3VybicsICd1cm46dXVpZCddKVxuXG4vKiogQHR5cGVkZWYge3N1cHBvcnRlZFNjaGVtZU5hbWVzW251bWJlcl19IFNjaGVtZU5hbWUgKi9cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHJldHVybnMge25hbWUgaXMgU2NoZW1lTmFtZX1cbiAqL1xuZnVuY3Rpb24gaXNWYWxpZFNjaGVtZU5hbWUgKG5hbWUpIHtcbiAgcmV0dXJuIHN1cHBvcnRlZFNjaGVtZU5hbWVzLmluZGV4T2YoLyoqIEB0eXBlIHsqfSAqLyAobmFtZSkpICE9PSAtMVxufVxuXG4vKipcbiAqIEBjYWxsYmFjayBTY2hlbWVGblxuICogQHBhcmFtIHtpbXBvcnQoJy4uL3R5cGVzL2luZGV4JykuVVJJQ29tcG9uZW50fSBjb21wb25lbnRcbiAqIEBwYXJhbSB7aW1wb3J0KCcuLi90eXBlcy9pbmRleCcpLk9wdGlvbnN9IG9wdGlvbnNcbiAqIEByZXR1cm5zIHtpbXBvcnQoJy4uL3R5cGVzL2luZGV4JykuVVJJQ29tcG9uZW50fVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gU2NoZW1lSGFuZGxlclxuICogQHByb3BlcnR5IHtTY2hlbWVOYW1lfSBzY2hlbWUgLSBUaGUgc2NoZW1lIG5hbWUuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtkb21haW5Ib3N0XSAtIEluZGljYXRlcyBpZiB0aGUgc2NoZW1lIHN1cHBvcnRzIGRvbWFpbiBob3N0cy5cbiAqIEBwcm9wZXJ0eSB7U2NoZW1lRm59IHBhcnNlIC0gRnVuY3Rpb24gdG8gcGFyc2UgdGhlIFVSSSBjb21wb25lbnQgZm9yIHRoaXMgc2NoZW1lLlxuICogQHByb3BlcnR5IHtTY2hlbWVGbn0gc2VyaWFsaXplIC0gRnVuY3Rpb24gdG8gc2VyaWFsaXplIHRoZSBVUkkgY29tcG9uZW50IGZvciB0aGlzIHNjaGVtZS5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW3NraXBOb3JtYWxpemVdIC0gSW5kaWNhdGVzIGlmIG5vcm1hbGl6YXRpb24gc2hvdWxkIGJlIHNraXBwZWQgZm9yIHRoaXMgc2NoZW1lLlxuICogQHByb3BlcnR5IHtib29sZWFufSBbYWJzb2x1dGVQYXRoXSAtIEluZGljYXRlcyBpZiB0aGUgc2NoZW1lIHVzZXMgYWJzb2x1dGUgcGF0aHMuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFt1bmljb2RlU3VwcG9ydF0gLSBJbmRpY2F0ZXMgaWYgdGhlIHNjaGVtZSBzdXBwb3J0cyBVbmljb2RlLlxuICovXG5cbi8qKlxuICogQHBhcmFtIHtpbXBvcnQoJy4uL3R5cGVzL2luZGV4JykuVVJJQ29tcG9uZW50fSB3c0NvbXBvbmVudFxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIHdzSXNTZWN1cmUgKHdzQ29tcG9uZW50KSB7XG4gIGlmICh3c0NvbXBvbmVudC5zZWN1cmUgPT09IHRydWUpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9IGVsc2UgaWYgKHdzQ29tcG9uZW50LnNlY3VyZSA9PT0gZmFsc2UpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfSBlbHNlIGlmICh3c0NvbXBvbmVudC5zY2hlbWUpIHtcbiAgICByZXR1cm4gKFxuICAgICAgd3NDb21wb25lbnQuc2NoZW1lLmxlbmd0aCA9PT0gMyAmJlxuICAgICAgKHdzQ29tcG9uZW50LnNjaGVtZVswXSA9PT0gJ3cnIHx8IHdzQ29tcG9uZW50LnNjaGVtZVswXSA9PT0gJ1cnKSAmJlxuICAgICAgKHdzQ29tcG9uZW50LnNjaGVtZVsxXSA9PT0gJ3MnIHx8IHdzQ29tcG9uZW50LnNjaGVtZVsxXSA9PT0gJ1MnKSAmJlxuICAgICAgKHdzQ29tcG9uZW50LnNjaGVtZVsyXSA9PT0gJ3MnIHx8IHdzQ29tcG9uZW50LnNjaGVtZVsyXSA9PT0gJ1MnKVxuICAgIClcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuXG4vKiogQHR5cGUge1NjaGVtZUZufSAqL1xuZnVuY3Rpb24gaHR0cFBhcnNlIChjb21wb25lbnQpIHtcbiAgaWYgKCFjb21wb25lbnQuaG9zdCkge1xuICAgIGNvbXBvbmVudC5lcnJvciA9IGNvbXBvbmVudC5lcnJvciB8fCAnSFRUUCBVUklzIG11c3QgaGF2ZSBhIGhvc3QuJ1xuICB9XG5cbiAgcmV0dXJuIGNvbXBvbmVudFxufVxuXG4vKiogQHR5cGUge1NjaGVtZUZufSAqL1xuZnVuY3Rpb24gaHR0cFNlcmlhbGl6ZSAoY29tcG9uZW50KSB7XG4gIGNvbnN0IHNlY3VyZSA9IFN0cmluZyhjb21wb25lbnQuc2NoZW1lKS50b0xvd2VyQ2FzZSgpID09PSAnaHR0cHMnXG5cbiAgLy8gbm9ybWFsaXplIHRoZSBkZWZhdWx0IHBvcnRcbiAgaWYgKGNvbXBvbmVudC5wb3J0ID09PSAoc2VjdXJlID8gNDQzIDogODApIHx8IGNvbXBvbmVudC5wb3J0ID09PSAnJykge1xuICAgIGNvbXBvbmVudC5wb3J0ID0gdW5kZWZpbmVkXG4gIH1cblxuICAvLyBub3JtYWxpemUgdGhlIGVtcHR5IHBhdGhcbiAgaWYgKCFjb21wb25lbnQucGF0aCkge1xuICAgIGNvbXBvbmVudC5wYXRoID0gJy8nXG4gIH1cblxuICAvLyBOT1RFOiBXZSBkbyBub3QgcGFyc2UgcXVlcnkgc3RyaW5ncyBmb3IgSFRUUCBVUklzXG4gIC8vIGFzIFdXVyBGb3JtIFVybCBFbmNvZGVkIHF1ZXJ5IHN0cmluZ3MgYXJlIHBhcnQgb2YgdGhlIEhUTUw0KyBzcGVjLFxuICAvLyBhbmQgbm90IHRoZSBIVFRQIHNwZWMuXG5cbiAgcmV0dXJuIGNvbXBvbmVudFxufVxuXG4vKiogQHR5cGUge1NjaGVtZUZufSAqL1xuZnVuY3Rpb24gd3NQYXJzZSAod3NDb21wb25lbnQpIHtcbi8vIGluZGljYXRlIGlmIHRoZSBzZWN1cmUgZmxhZyBpcyBzZXRcbiAgd3NDb21wb25lbnQuc2VjdXJlID0gd3NJc1NlY3VyZSh3c0NvbXBvbmVudClcblxuICAvLyBjb25zdHJ1Y3QgcmVzb3VjZSBuYW1lXG4gIHdzQ29tcG9uZW50LnJlc291cmNlTmFtZSA9ICh3c0NvbXBvbmVudC5wYXRoIHx8ICcvJykgKyAod3NDb21wb25lbnQucXVlcnkgPyAnPycgKyB3c0NvbXBvbmVudC5xdWVyeSA6ICcnKVxuICB3c0NvbXBvbmVudC5wYXRoID0gdW5kZWZpbmVkXG4gIHdzQ29tcG9uZW50LnF1ZXJ5ID0gdW5kZWZpbmVkXG5cbiAgcmV0dXJuIHdzQ29tcG9uZW50XG59XG5cbi8qKiBAdHlwZSB7U2NoZW1lRm59ICovXG5mdW5jdGlvbiB3c1NlcmlhbGl6ZSAod3NDb21wb25lbnQpIHtcbi8vIG5vcm1hbGl6ZSB0aGUgZGVmYXVsdCBwb3J0XG4gIGlmICh3c0NvbXBvbmVudC5wb3J0ID09PSAod3NJc1NlY3VyZSh3c0NvbXBvbmVudCkgPyA0NDMgOiA4MCkgfHwgd3NDb21wb25lbnQucG9ydCA9PT0gJycpIHtcbiAgICB3c0NvbXBvbmVudC5wb3J0ID0gdW5kZWZpbmVkXG4gIH1cblxuICAvLyBlbnN1cmUgc2NoZW1lIG1hdGNoZXMgc2VjdXJlIGZsYWdcbiAgaWYgKHR5cGVvZiB3c0NvbXBvbmVudC5zZWN1cmUgPT09ICdib29sZWFuJykge1xuICAgIHdzQ29tcG9uZW50LnNjaGVtZSA9ICh3c0NvbXBvbmVudC5zZWN1cmUgPyAnd3NzJyA6ICd3cycpXG4gICAgd3NDb21wb25lbnQuc2VjdXJlID0gdW5kZWZpbmVkXG4gIH1cblxuICAvLyByZWNvbnN0cnVjdCBwYXRoIGZyb20gcmVzb3VyY2UgbmFtZVxuICBpZiAod3NDb21wb25lbnQucmVzb3VyY2VOYW1lKSB7XG4gICAgY29uc3QgW3BhdGgsIHF1ZXJ5XSA9IHdzQ29tcG9uZW50LnJlc291cmNlTmFtZS5zcGxpdCgnPycpXG4gICAgd3NDb21wb25lbnQucGF0aCA9IChwYXRoICYmIHBhdGggIT09ICcvJyA/IHBhdGggOiB1bmRlZmluZWQpXG4gICAgd3NDb21wb25lbnQucXVlcnkgPSBxdWVyeVxuICAgIHdzQ29tcG9uZW50LnJlc291cmNlTmFtZSA9IHVuZGVmaW5lZFxuICB9XG5cbiAgLy8gZm9yYmlkIGZyYWdtZW50IGNvbXBvbmVudFxuICB3c0NvbXBvbmVudC5mcmFnbWVudCA9IHVuZGVmaW5lZFxuXG4gIHJldHVybiB3c0NvbXBvbmVudFxufVxuXG4vKiogQHR5cGUge1NjaGVtZUZufSAqL1xuZnVuY3Rpb24gdXJuUGFyc2UgKHVybkNvbXBvbmVudCwgb3B0aW9ucykge1xuICBpZiAoIXVybkNvbXBvbmVudC5wYXRoKSB7XG4gICAgdXJuQ29tcG9uZW50LmVycm9yID0gJ1VSTiBjYW4gbm90IGJlIHBhcnNlZCdcbiAgICByZXR1cm4gdXJuQ29tcG9uZW50XG4gIH1cbiAgY29uc3QgbWF0Y2hlcyA9IHVybkNvbXBvbmVudC5wYXRoLm1hdGNoKFVSTl9SRUcpXG4gIGlmIChtYXRjaGVzKSB7XG4gICAgY29uc3Qgc2NoZW1lID0gb3B0aW9ucy5zY2hlbWUgfHwgdXJuQ29tcG9uZW50LnNjaGVtZSB8fCAndXJuJ1xuICAgIHVybkNvbXBvbmVudC5uaWQgPSBtYXRjaGVzWzFdLnRvTG93ZXJDYXNlKClcbiAgICB1cm5Db21wb25lbnQubnNzID0gbWF0Y2hlc1syXVxuICAgIGNvbnN0IHVyblNjaGVtZSA9IGAke3NjaGVtZX06JHtvcHRpb25zLm5pZCB8fCB1cm5Db21wb25lbnQubmlkfWBcbiAgICBjb25zdCBzY2hlbWVIYW5kbGVyID0gZ2V0U2NoZW1lSGFuZGxlcih1cm5TY2hlbWUpXG4gICAgdXJuQ29tcG9uZW50LnBhdGggPSB1bmRlZmluZWRcblxuICAgIGlmIChzY2hlbWVIYW5kbGVyKSB7XG4gICAgICB1cm5Db21wb25lbnQgPSBzY2hlbWVIYW5kbGVyLnBhcnNlKHVybkNvbXBvbmVudCwgb3B0aW9ucylcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdXJuQ29tcG9uZW50LmVycm9yID0gdXJuQ29tcG9uZW50LmVycm9yIHx8ICdVUk4gY2FuIG5vdCBiZSBwYXJzZWQuJ1xuICB9XG5cbiAgcmV0dXJuIHVybkNvbXBvbmVudFxufVxuXG4vKiogQHR5cGUge1NjaGVtZUZufSAqL1xuZnVuY3Rpb24gdXJuU2VyaWFsaXplICh1cm5Db21wb25lbnQsIG9wdGlvbnMpIHtcbiAgaWYgKHVybkNvbXBvbmVudC5uaWQgPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBFcnJvcignVVJOIHdpdGhvdXQgbmlkIGNhbm5vdCBiZSBzZXJpYWxpemVkJylcbiAgfVxuICBjb25zdCBzY2hlbWUgPSBvcHRpb25zLnNjaGVtZSB8fCB1cm5Db21wb25lbnQuc2NoZW1lIHx8ICd1cm4nXG4gIGNvbnN0IG5pZCA9IHVybkNvbXBvbmVudC5uaWQudG9Mb3dlckNhc2UoKVxuICBjb25zdCB1cm5TY2hlbWUgPSBgJHtzY2hlbWV9OiR7b3B0aW9ucy5uaWQgfHwgbmlkfWBcbiAgY29uc3Qgc2NoZW1lSGFuZGxlciA9IGdldFNjaGVtZUhhbmRsZXIodXJuU2NoZW1lKVxuXG4gIGlmIChzY2hlbWVIYW5kbGVyKSB7XG4gICAgdXJuQ29tcG9uZW50ID0gc2NoZW1lSGFuZGxlci5zZXJpYWxpemUodXJuQ29tcG9uZW50LCBvcHRpb25zKVxuICB9XG5cbiAgY29uc3QgdXJpQ29tcG9uZW50ID0gdXJuQ29tcG9uZW50XG4gIGNvbnN0IG5zcyA9IHVybkNvbXBvbmVudC5uc3NcbiAgdXJpQ29tcG9uZW50LnBhdGggPSBgJHtuaWQgfHwgb3B0aW9ucy5uaWR9OiR7bnNzfWBcblxuICBvcHRpb25zLnNraXBFc2NhcGUgPSB0cnVlXG4gIHJldHVybiB1cmlDb21wb25lbnRcbn1cblxuLyoqIEB0eXBlIHtTY2hlbWVGbn0gKi9cbmZ1bmN0aW9uIHVybnV1aWRQYXJzZSAodXJuQ29tcG9uZW50LCBvcHRpb25zKSB7XG4gIGNvbnN0IHV1aWRDb21wb25lbnQgPSB1cm5Db21wb25lbnRcbiAgdXVpZENvbXBvbmVudC51dWlkID0gdXVpZENvbXBvbmVudC5uc3NcbiAgdXVpZENvbXBvbmVudC5uc3MgPSB1bmRlZmluZWRcblxuICBpZiAoIW9wdGlvbnMudG9sZXJhbnQgJiYgKCF1dWlkQ29tcG9uZW50LnV1aWQgfHwgIWlzVVVJRCh1dWlkQ29tcG9uZW50LnV1aWQpKSkge1xuICAgIHV1aWRDb21wb25lbnQuZXJyb3IgPSB1dWlkQ29tcG9uZW50LmVycm9yIHx8ICdVVUlEIGlzIG5vdCB2YWxpZC4nXG4gIH1cblxuICByZXR1cm4gdXVpZENvbXBvbmVudFxufVxuXG4vKiogQHR5cGUge1NjaGVtZUZufSAqL1xuZnVuY3Rpb24gdXJudXVpZFNlcmlhbGl6ZSAodXVpZENvbXBvbmVudCkge1xuICBjb25zdCB1cm5Db21wb25lbnQgPSB1dWlkQ29tcG9uZW50XG4gIC8vIG5vcm1hbGl6ZSBVVUlEXG4gIHVybkNvbXBvbmVudC5uc3MgPSAodXVpZENvbXBvbmVudC51dWlkIHx8ICcnKS50b0xvd2VyQ2FzZSgpXG4gIHJldHVybiB1cm5Db21wb25lbnRcbn1cblxuY29uc3QgaHR0cCA9IC8qKiBAdHlwZSB7U2NoZW1lSGFuZGxlcn0gKi8gKHtcbiAgc2NoZW1lOiAnaHR0cCcsXG4gIGRvbWFpbkhvc3Q6IHRydWUsXG4gIHBhcnNlOiBodHRwUGFyc2UsXG4gIHNlcmlhbGl6ZTogaHR0cFNlcmlhbGl6ZVxufSlcblxuY29uc3QgaHR0cHMgPSAvKiogQHR5cGUge1NjaGVtZUhhbmRsZXJ9ICovICh7XG4gIHNjaGVtZTogJ2h0dHBzJyxcbiAgZG9tYWluSG9zdDogaHR0cC5kb21haW5Ib3N0LFxuICBwYXJzZTogaHR0cFBhcnNlLFxuICBzZXJpYWxpemU6IGh0dHBTZXJpYWxpemVcbn0pXG5cbmNvbnN0IHdzID0gLyoqIEB0eXBlIHtTY2hlbWVIYW5kbGVyfSAqLyAoe1xuICBzY2hlbWU6ICd3cycsXG4gIGRvbWFpbkhvc3Q6IHRydWUsXG4gIHBhcnNlOiB3c1BhcnNlLFxuICBzZXJpYWxpemU6IHdzU2VyaWFsaXplXG59KVxuXG5jb25zdCB3c3MgPSAvKiogQHR5cGUge1NjaGVtZUhhbmRsZXJ9ICovICh7XG4gIHNjaGVtZTogJ3dzcycsXG4gIGRvbWFpbkhvc3Q6IHdzLmRvbWFpbkhvc3QsXG4gIHBhcnNlOiB3cy5wYXJzZSxcbiAgc2VyaWFsaXplOiB3cy5zZXJpYWxpemVcbn0pXG5cbmNvbnN0IHVybiA9IC8qKiBAdHlwZSB7U2NoZW1lSGFuZGxlcn0gKi8gKHtcbiAgc2NoZW1lOiAndXJuJyxcbiAgcGFyc2U6IHVyblBhcnNlLFxuICBzZXJpYWxpemU6IHVyblNlcmlhbGl6ZSxcbiAgc2tpcE5vcm1hbGl6ZTogdHJ1ZVxufSlcblxuY29uc3QgdXJudXVpZCA9IC8qKiBAdHlwZSB7U2NoZW1lSGFuZGxlcn0gKi8gKHtcbiAgc2NoZW1lOiAndXJuOnV1aWQnLFxuICBwYXJzZTogdXJudXVpZFBhcnNlLFxuICBzZXJpYWxpemU6IHVybnV1aWRTZXJpYWxpemUsXG4gIHNraXBOb3JtYWxpemU6IHRydWVcbn0pXG5cbmNvbnN0IFNDSEVNRVMgPSAvKiogQHR5cGUge1JlY29yZDxTY2hlbWVOYW1lLCBTY2hlbWVIYW5kbGVyPn0gKi8gKHtcbiAgaHR0cCxcbiAgaHR0cHMsXG4gIHdzLFxuICB3c3MsXG4gIHVybixcbiAgJ3Vybjp1dWlkJzogdXJudXVpZFxufSlcblxuT2JqZWN0LnNldFByb3RvdHlwZU9mKFNDSEVNRVMsIG51bGwpXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd8dW5kZWZpbmVkfSBzY2hlbWVcbiAqIEByZXR1cm5zIHtTY2hlbWVIYW5kbGVyfHVuZGVmaW5lZH1cbiAqL1xuZnVuY3Rpb24gZ2V0U2NoZW1lSGFuZGxlciAoc2NoZW1lKSB7XG4gIHJldHVybiAoXG4gICAgc2NoZW1lICYmIChcbiAgICAgIFNDSEVNRVNbLyoqIEB0eXBlIHtTY2hlbWVOYW1lfSAqLyAoc2NoZW1lKV0gfHxcbiAgICAgIFNDSEVNRVNbLyoqIEB0eXBlIHtTY2hlbWVOYW1lfSAqLyhzY2hlbWUudG9Mb3dlckNhc2UoKSldKVxuICApIHx8XG4gICAgdW5kZWZpbmVkXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICB3c0lzU2VjdXJlLFxuICBTQ0hFTUVTLFxuICBpc1ZhbGlkU2NoZW1lTmFtZSxcbiAgZ2V0U2NoZW1lSGFuZGxlcixcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgbm9ybWFsaXplSVB2NiwgcmVtb3ZlRG90U2VnbWVudHMsIHJlY29tcG9zZUF1dGhvcml0eSwgbm9ybWFsaXplQ29tcG9uZW50RW5jb2RpbmcsIGlzSVB2NCwgbm9uU2ltcGxlRG9tYWluIH0gPSByZXF1aXJlKCcuL2xpYi91dGlscycpXG5jb25zdCB7IFNDSEVNRVMsIGdldFNjaGVtZUhhbmRsZXIgfSA9IHJlcXVpcmUoJy4vbGliL3NjaGVtZXMnKVxuXG4vKipcbiAqIEB0ZW1wbGF0ZSB7aW1wb3J0KCcuL3R5cGVzL2luZGV4JykuVVJJQ29tcG9uZW50fHN0cmluZ30gVFxuICogQHBhcmFtIHtUfSB1cmlcbiAqIEBwYXJhbSB7aW1wb3J0KCcuL3R5cGVzL2luZGV4JykuT3B0aW9uc30gW29wdGlvbnNdXG4gKiBAcmV0dXJucyB7VH1cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplICh1cmksIG9wdGlvbnMpIHtcbiAgaWYgKHR5cGVvZiB1cmkgPT09ICdzdHJpbmcnKSB7XG4gICAgdXJpID0gLyoqIEB0eXBlIHtUfSAqLyAoc2VyaWFsaXplKHBhcnNlKHVyaSwgb3B0aW9ucyksIG9wdGlvbnMpKVxuICB9IGVsc2UgaWYgKHR5cGVvZiB1cmkgPT09ICdvYmplY3QnKSB7XG4gICAgdXJpID0gLyoqIEB0eXBlIHtUfSAqLyAocGFyc2Uoc2VyaWFsaXplKHVyaSwgb3B0aW9ucyksIG9wdGlvbnMpKVxuICB9XG4gIHJldHVybiB1cmlcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gYmFzZVVSSVxuICogQHBhcmFtIHtzdHJpbmd9IHJlbGF0aXZlVVJJXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi90eXBlcy9pbmRleCcpLk9wdGlvbnN9IFtvcHRpb25zXVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZSAoYmFzZVVSSSwgcmVsYXRpdmVVUkksIG9wdGlvbnMpIHtcbiAgY29uc3Qgc2NoZW1lbGVzc09wdGlvbnMgPSBvcHRpb25zID8gT2JqZWN0LmFzc2lnbih7IHNjaGVtZTogJ251bGwnIH0sIG9wdGlvbnMpIDogeyBzY2hlbWU6ICdudWxsJyB9XG4gIGNvbnN0IHJlc29sdmVkID0gcmVzb2x2ZUNvbXBvbmVudChwYXJzZShiYXNlVVJJLCBzY2hlbWVsZXNzT3B0aW9ucyksIHBhcnNlKHJlbGF0aXZlVVJJLCBzY2hlbWVsZXNzT3B0aW9ucyksIHNjaGVtZWxlc3NPcHRpb25zLCB0cnVlKVxuICBzY2hlbWVsZXNzT3B0aW9ucy5za2lwRXNjYXBlID0gdHJ1ZVxuICByZXR1cm4gc2VyaWFsaXplKHJlc29sdmVkLCBzY2hlbWVsZXNzT3B0aW9ucylcbn1cblxuLyoqXG4gKiBAcGFyYW0ge2ltcG9ydCAoJy4vdHlwZXMvaW5kZXgnKS5VUklDb21wb25lbnR9IGJhc2VcbiAqIEBwYXJhbSB7aW1wb3J0ICgnLi90eXBlcy9pbmRleCcpLlVSSUNvbXBvbmVudH0gcmVsYXRpdmVcbiAqIEBwYXJhbSB7aW1wb3J0KCcuL3R5cGVzL2luZGV4JykuT3B0aW9uc30gW29wdGlvbnNdXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtza2lwTm9ybWFsaXphdGlvbj1mYWxzZV1cbiAqIEByZXR1cm5zIHtpbXBvcnQgKCcuL3R5cGVzL2luZGV4JykuVVJJQ29tcG9uZW50fVxuICovXG5mdW5jdGlvbiByZXNvbHZlQ29tcG9uZW50IChiYXNlLCByZWxhdGl2ZSwgb3B0aW9ucywgc2tpcE5vcm1hbGl6YXRpb24pIHtcbiAgLyoqIEB0eXBlIHtpbXBvcnQoJy4vdHlwZXMvaW5kZXgnKS5VUklDb21wb25lbnR9ICovXG4gIGNvbnN0IHRhcmdldCA9IHt9XG4gIGlmICghc2tpcE5vcm1hbGl6YXRpb24pIHtcbiAgICBiYXNlID0gcGFyc2Uoc2VyaWFsaXplKGJhc2UsIG9wdGlvbnMpLCBvcHRpb25zKSAvLyBub3JtYWxpemUgYmFzZSBjb21wb25lbnRcbiAgICByZWxhdGl2ZSA9IHBhcnNlKHNlcmlhbGl6ZShyZWxhdGl2ZSwgb3B0aW9ucyksIG9wdGlvbnMpIC8vIG5vcm1hbGl6ZSByZWxhdGl2ZSBjb21wb25lbnRcbiAgfVxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fVxuXG4gIGlmICghb3B0aW9ucy50b2xlcmFudCAmJiByZWxhdGl2ZS5zY2hlbWUpIHtcbiAgICB0YXJnZXQuc2NoZW1lID0gcmVsYXRpdmUuc2NoZW1lXG4gICAgLy8gdGFyZ2V0LmF1dGhvcml0eSA9IHJlbGF0aXZlLmF1dGhvcml0eTtcbiAgICB0YXJnZXQudXNlcmluZm8gPSByZWxhdGl2ZS51c2VyaW5mb1xuICAgIHRhcmdldC5ob3N0ID0gcmVsYXRpdmUuaG9zdFxuICAgIHRhcmdldC5wb3J0ID0gcmVsYXRpdmUucG9ydFxuICAgIHRhcmdldC5wYXRoID0gcmVtb3ZlRG90U2VnbWVudHMocmVsYXRpdmUucGF0aCB8fCAnJylcbiAgICB0YXJnZXQucXVlcnkgPSByZWxhdGl2ZS5xdWVyeVxuICB9IGVsc2Uge1xuICAgIGlmIChyZWxhdGl2ZS51c2VyaW5mbyAhPT0gdW5kZWZpbmVkIHx8IHJlbGF0aXZlLmhvc3QgIT09IHVuZGVmaW5lZCB8fCByZWxhdGl2ZS5wb3J0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIHRhcmdldC5hdXRob3JpdHkgPSByZWxhdGl2ZS5hdXRob3JpdHk7XG4gICAgICB0YXJnZXQudXNlcmluZm8gPSByZWxhdGl2ZS51c2VyaW5mb1xuICAgICAgdGFyZ2V0Lmhvc3QgPSByZWxhdGl2ZS5ob3N0XG4gICAgICB0YXJnZXQucG9ydCA9IHJlbGF0aXZlLnBvcnRcbiAgICAgIHRhcmdldC5wYXRoID0gcmVtb3ZlRG90U2VnbWVudHMocmVsYXRpdmUucGF0aCB8fCAnJylcbiAgICAgIHRhcmdldC5xdWVyeSA9IHJlbGF0aXZlLnF1ZXJ5XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghcmVsYXRpdmUucGF0aCkge1xuICAgICAgICB0YXJnZXQucGF0aCA9IGJhc2UucGF0aFxuICAgICAgICBpZiAocmVsYXRpdmUucXVlcnkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRhcmdldC5xdWVyeSA9IHJlbGF0aXZlLnF1ZXJ5XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGFyZ2V0LnF1ZXJ5ID0gYmFzZS5xdWVyeVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAocmVsYXRpdmUucGF0aFswXSA9PT0gJy8nKSB7XG4gICAgICAgICAgdGFyZ2V0LnBhdGggPSByZW1vdmVEb3RTZWdtZW50cyhyZWxhdGl2ZS5wYXRoKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICgoYmFzZS51c2VyaW5mbyAhPT0gdW5kZWZpbmVkIHx8IGJhc2UuaG9zdCAhPT0gdW5kZWZpbmVkIHx8IGJhc2UucG9ydCAhPT0gdW5kZWZpbmVkKSAmJiAhYmFzZS5wYXRoKSB7XG4gICAgICAgICAgICB0YXJnZXQucGF0aCA9ICcvJyArIHJlbGF0aXZlLnBhdGhcbiAgICAgICAgICB9IGVsc2UgaWYgKCFiYXNlLnBhdGgpIHtcbiAgICAgICAgICAgIHRhcmdldC5wYXRoID0gcmVsYXRpdmUucGF0aFxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0YXJnZXQucGF0aCA9IGJhc2UucGF0aC5zbGljZSgwLCBiYXNlLnBhdGgubGFzdEluZGV4T2YoJy8nKSArIDEpICsgcmVsYXRpdmUucGF0aFxuICAgICAgICAgIH1cbiAgICAgICAgICB0YXJnZXQucGF0aCA9IHJlbW92ZURvdFNlZ21lbnRzKHRhcmdldC5wYXRoKVxuICAgICAgICB9XG4gICAgICAgIHRhcmdldC5xdWVyeSA9IHJlbGF0aXZlLnF1ZXJ5XG4gICAgICB9XG4gICAgICAvLyB0YXJnZXQuYXV0aG9yaXR5ID0gYmFzZS5hdXRob3JpdHk7XG4gICAgICB0YXJnZXQudXNlcmluZm8gPSBiYXNlLnVzZXJpbmZvXG4gICAgICB0YXJnZXQuaG9zdCA9IGJhc2UuaG9zdFxuICAgICAgdGFyZ2V0LnBvcnQgPSBiYXNlLnBvcnRcbiAgICB9XG4gICAgdGFyZ2V0LnNjaGVtZSA9IGJhc2Uuc2NoZW1lXG4gIH1cblxuICB0YXJnZXQuZnJhZ21lbnQgPSByZWxhdGl2ZS5mcmFnbWVudFxuXG4gIHJldHVybiB0YXJnZXRcbn1cblxuLyoqXG4gKiBAcGFyYW0ge2ltcG9ydCAoJy4vdHlwZXMvaW5kZXgnKS5VUklDb21wb25lbnR8c3RyaW5nfSB1cmlBXG4gKiBAcGFyYW0ge2ltcG9ydCAoJy4vdHlwZXMvaW5kZXgnKS5VUklDb21wb25lbnR8c3RyaW5nfSB1cmlCXG4gKiBAcGFyYW0ge2ltcG9ydCAoJy4vdHlwZXMvaW5kZXgnKS5PcHRpb25zfSBvcHRpb25zXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gZXF1YWwgKHVyaUEsIHVyaUIsIG9wdGlvbnMpIHtcbiAgaWYgKHR5cGVvZiB1cmlBID09PSAnc3RyaW5nJykge1xuICAgIHVyaUEgPSB1bmVzY2FwZSh1cmlBKVxuICAgIHVyaUEgPSBzZXJpYWxpemUobm9ybWFsaXplQ29tcG9uZW50RW5jb2RpbmcocGFyc2UodXJpQSwgb3B0aW9ucyksIHRydWUpLCB7IC4uLm9wdGlvbnMsIHNraXBFc2NhcGU6IHRydWUgfSlcbiAgfSBlbHNlIGlmICh0eXBlb2YgdXJpQSA9PT0gJ29iamVjdCcpIHtcbiAgICB1cmlBID0gc2VyaWFsaXplKG5vcm1hbGl6ZUNvbXBvbmVudEVuY29kaW5nKHVyaUEsIHRydWUpLCB7IC4uLm9wdGlvbnMsIHNraXBFc2NhcGU6IHRydWUgfSlcbiAgfVxuXG4gIGlmICh0eXBlb2YgdXJpQiA9PT0gJ3N0cmluZycpIHtcbiAgICB1cmlCID0gdW5lc2NhcGUodXJpQilcbiAgICB1cmlCID0gc2VyaWFsaXplKG5vcm1hbGl6ZUNvbXBvbmVudEVuY29kaW5nKHBhcnNlKHVyaUIsIG9wdGlvbnMpLCB0cnVlKSwgeyAuLi5vcHRpb25zLCBza2lwRXNjYXBlOiB0cnVlIH0pXG4gIH0gZWxzZSBpZiAodHlwZW9mIHVyaUIgPT09ICdvYmplY3QnKSB7XG4gICAgdXJpQiA9IHNlcmlhbGl6ZShub3JtYWxpemVDb21wb25lbnRFbmNvZGluZyh1cmlCLCB0cnVlKSwgeyAuLi5vcHRpb25zLCBza2lwRXNjYXBlOiB0cnVlIH0pXG4gIH1cblxuICByZXR1cm4gdXJpQS50b0xvd2VyQ2FzZSgpID09PSB1cmlCLnRvTG93ZXJDYXNlKClcbn1cblxuLyoqXG4gKiBAcGFyYW0ge1JlYWRvbmx5PGltcG9ydCgnLi90eXBlcy9pbmRleCcpLlVSSUNvbXBvbmVudD59IGNtcHRzXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi90eXBlcy9pbmRleCcpLk9wdGlvbnN9IFtvcHRzXVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gc2VyaWFsaXplIChjbXB0cywgb3B0cykge1xuICBjb25zdCBjb21wb25lbnQgPSB7XG4gICAgaG9zdDogY21wdHMuaG9zdCxcbiAgICBzY2hlbWU6IGNtcHRzLnNjaGVtZSxcbiAgICB1c2VyaW5mbzogY21wdHMudXNlcmluZm8sXG4gICAgcG9ydDogY21wdHMucG9ydCxcbiAgICBwYXRoOiBjbXB0cy5wYXRoLFxuICAgIHF1ZXJ5OiBjbXB0cy5xdWVyeSxcbiAgICBuaWQ6IGNtcHRzLm5pZCxcbiAgICBuc3M6IGNtcHRzLm5zcyxcbiAgICB1dWlkOiBjbXB0cy51dWlkLFxuICAgIGZyYWdtZW50OiBjbXB0cy5mcmFnbWVudCxcbiAgICByZWZlcmVuY2U6IGNtcHRzLnJlZmVyZW5jZSxcbiAgICByZXNvdXJjZU5hbWU6IGNtcHRzLnJlc291cmNlTmFtZSxcbiAgICBzZWN1cmU6IGNtcHRzLnNlY3VyZSxcbiAgICBlcnJvcjogJydcbiAgfVxuICBjb25zdCBvcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgb3B0cylcbiAgY29uc3QgdXJpVG9rZW5zID0gW11cblxuICAvLyBmaW5kIHNjaGVtZSBoYW5kbGVyXG4gIGNvbnN0IHNjaGVtZUhhbmRsZXIgPSBnZXRTY2hlbWVIYW5kbGVyKG9wdGlvbnMuc2NoZW1lIHx8IGNvbXBvbmVudC5zY2hlbWUpXG5cbiAgLy8gcGVyZm9ybSBzY2hlbWUgc3BlY2lmaWMgc2VyaWFsaXphdGlvblxuICBpZiAoc2NoZW1lSGFuZGxlciAmJiBzY2hlbWVIYW5kbGVyLnNlcmlhbGl6ZSkgc2NoZW1lSGFuZGxlci5zZXJpYWxpemUoY29tcG9uZW50LCBvcHRpb25zKVxuXG4gIGlmIChjb21wb25lbnQucGF0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKCFvcHRpb25zLnNraXBFc2NhcGUpIHtcbiAgICAgIGNvbXBvbmVudC5wYXRoID0gZXNjYXBlKGNvbXBvbmVudC5wYXRoKVxuXG4gICAgICBpZiAoY29tcG9uZW50LnNjaGVtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbXBvbmVudC5wYXRoID0gY29tcG9uZW50LnBhdGguc3BsaXQoJyUzQScpLmpvaW4oJzonKVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb21wb25lbnQucGF0aCA9IHVuZXNjYXBlKGNvbXBvbmVudC5wYXRoKVxuICAgIH1cbiAgfVxuXG4gIGlmIChvcHRpb25zLnJlZmVyZW5jZSAhPT0gJ3N1ZmZpeCcgJiYgY29tcG9uZW50LnNjaGVtZSkge1xuICAgIHVyaVRva2Vucy5wdXNoKGNvbXBvbmVudC5zY2hlbWUsICc6JylcbiAgfVxuXG4gIGNvbnN0IGF1dGhvcml0eSA9IHJlY29tcG9zZUF1dGhvcml0eShjb21wb25lbnQpXG4gIGlmIChhdXRob3JpdHkgIT09IHVuZGVmaW5lZCkge1xuICAgIGlmIChvcHRpb25zLnJlZmVyZW5jZSAhPT0gJ3N1ZmZpeCcpIHtcbiAgICAgIHVyaVRva2Vucy5wdXNoKCcvLycpXG4gICAgfVxuXG4gICAgdXJpVG9rZW5zLnB1c2goYXV0aG9yaXR5KVxuXG4gICAgaWYgKGNvbXBvbmVudC5wYXRoICYmIGNvbXBvbmVudC5wYXRoWzBdICE9PSAnLycpIHtcbiAgICAgIHVyaVRva2Vucy5wdXNoKCcvJylcbiAgICB9XG4gIH1cbiAgaWYgKGNvbXBvbmVudC5wYXRoICE9PSB1bmRlZmluZWQpIHtcbiAgICBsZXQgcyA9IGNvbXBvbmVudC5wYXRoXG5cbiAgICBpZiAoIW9wdGlvbnMuYWJzb2x1dGVQYXRoICYmICghc2NoZW1lSGFuZGxlciB8fCAhc2NoZW1lSGFuZGxlci5hYnNvbHV0ZVBhdGgpKSB7XG4gICAgICBzID0gcmVtb3ZlRG90U2VnbWVudHMocylcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBhdXRob3JpdHkgPT09IHVuZGVmaW5lZCAmJlxuICAgICAgc1swXSA9PT0gJy8nICYmXG4gICAgICBzWzFdID09PSAnLydcbiAgICApIHtcbiAgICAgIC8vIGRvbid0IGFsbG93IHRoZSBwYXRoIHRvIHN0YXJ0IHdpdGggXCIvL1wiXG4gICAgICBzID0gJy8lMkYnICsgcy5zbGljZSgyKVxuICAgIH1cblxuICAgIHVyaVRva2Vucy5wdXNoKHMpXG4gIH1cblxuICBpZiAoY29tcG9uZW50LnF1ZXJ5ICE9PSB1bmRlZmluZWQpIHtcbiAgICB1cmlUb2tlbnMucHVzaCgnPycsIGNvbXBvbmVudC5xdWVyeSlcbiAgfVxuXG4gIGlmIChjb21wb25lbnQuZnJhZ21lbnQgIT09IHVuZGVmaW5lZCkge1xuICAgIHVyaVRva2Vucy5wdXNoKCcjJywgY29tcG9uZW50LmZyYWdtZW50KVxuICB9XG4gIHJldHVybiB1cmlUb2tlbnMuam9pbignJylcbn1cblxuY29uc3QgVVJJX1BBUlNFID0gL14oPzooW14jLzo/XSspOik/KD86XFwvXFwvKCg/OihbXiMvP0BdKilAKT8oXFxbW14jLz9cXF1dK1xcXXxbXiMvOj9dKikoPzo6KFxcZCopKT8pKT8oW14jP10qKSg/OlxcPyhbXiNdKikpPyg/OiMoKD86LnxbXFxuXFxyXSkqKSk/L3VcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdXJpXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi90eXBlcy9pbmRleCcpLk9wdGlvbnN9IFtvcHRzXVxuICogQHJldHVybnNcbiAqL1xuZnVuY3Rpb24gcGFyc2UgKHVyaSwgb3B0cykge1xuICBjb25zdCBvcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgb3B0cylcbiAgLyoqIEB0eXBlIHtpbXBvcnQoJy4vdHlwZXMvaW5kZXgnKS5VUklDb21wb25lbnR9ICovXG4gIGNvbnN0IHBhcnNlZCA9IHtcbiAgICBzY2hlbWU6IHVuZGVmaW5lZCxcbiAgICB1c2VyaW5mbzogdW5kZWZpbmVkLFxuICAgIGhvc3Q6ICcnLFxuICAgIHBvcnQ6IHVuZGVmaW5lZCxcbiAgICBwYXRoOiAnJyxcbiAgICBxdWVyeTogdW5kZWZpbmVkLFxuICAgIGZyYWdtZW50OiB1bmRlZmluZWRcbiAgfVxuXG4gIGxldCBpc0lQID0gZmFsc2VcbiAgaWYgKG9wdGlvbnMucmVmZXJlbmNlID09PSAnc3VmZml4Jykge1xuICAgIGlmIChvcHRpb25zLnNjaGVtZSkge1xuICAgICAgdXJpID0gb3B0aW9ucy5zY2hlbWUgKyAnOicgKyB1cmlcbiAgICB9IGVsc2Uge1xuICAgICAgdXJpID0gJy8vJyArIHVyaVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IG1hdGNoZXMgPSB1cmkubWF0Y2goVVJJX1BBUlNFKVxuXG4gIGlmIChtYXRjaGVzKSB7XG4gICAgLy8gc3RvcmUgZWFjaCBjb21wb25lbnRcbiAgICBwYXJzZWQuc2NoZW1lID0gbWF0Y2hlc1sxXVxuICAgIHBhcnNlZC51c2VyaW5mbyA9IG1hdGNoZXNbM11cbiAgICBwYXJzZWQuaG9zdCA9IG1hdGNoZXNbNF1cbiAgICBwYXJzZWQucG9ydCA9IHBhcnNlSW50KG1hdGNoZXNbNV0sIDEwKVxuICAgIHBhcnNlZC5wYXRoID0gbWF0Y2hlc1s2XSB8fCAnJ1xuICAgIHBhcnNlZC5xdWVyeSA9IG1hdGNoZXNbN11cbiAgICBwYXJzZWQuZnJhZ21lbnQgPSBtYXRjaGVzWzhdXG5cbiAgICAvLyBmaXggcG9ydCBudW1iZXJcbiAgICBpZiAoaXNOYU4ocGFyc2VkLnBvcnQpKSB7XG4gICAgICBwYXJzZWQucG9ydCA9IG1hdGNoZXNbNV1cbiAgICB9XG4gICAgaWYgKHBhcnNlZC5ob3N0KSB7XG4gICAgICBjb25zdCBpcHY0cmVzdWx0ID0gaXNJUHY0KHBhcnNlZC5ob3N0KVxuICAgICAgaWYgKGlwdjRyZXN1bHQgPT09IGZhbHNlKSB7XG4gICAgICAgIGNvbnN0IGlwdjZyZXN1bHQgPSBub3JtYWxpemVJUHY2KHBhcnNlZC5ob3N0KVxuICAgICAgICBwYXJzZWQuaG9zdCA9IGlwdjZyZXN1bHQuaG9zdC50b0xvd2VyQ2FzZSgpXG4gICAgICAgIGlzSVAgPSBpcHY2cmVzdWx0LmlzSVBWNlxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaXNJUCA9IHRydWVcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHBhcnNlZC5zY2hlbWUgPT09IHVuZGVmaW5lZCAmJiBwYXJzZWQudXNlcmluZm8gPT09IHVuZGVmaW5lZCAmJiBwYXJzZWQuaG9zdCA9PT0gdW5kZWZpbmVkICYmIHBhcnNlZC5wb3J0ID09PSB1bmRlZmluZWQgJiYgcGFyc2VkLnF1ZXJ5ID09PSB1bmRlZmluZWQgJiYgIXBhcnNlZC5wYXRoKSB7XG4gICAgICBwYXJzZWQucmVmZXJlbmNlID0gJ3NhbWUtZG9jdW1lbnQnXG4gICAgfSBlbHNlIGlmIChwYXJzZWQuc2NoZW1lID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHBhcnNlZC5yZWZlcmVuY2UgPSAncmVsYXRpdmUnXG4gICAgfSBlbHNlIGlmIChwYXJzZWQuZnJhZ21lbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcGFyc2VkLnJlZmVyZW5jZSA9ICdhYnNvbHV0ZSdcbiAgICB9IGVsc2Uge1xuICAgICAgcGFyc2VkLnJlZmVyZW5jZSA9ICd1cmknXG4gICAgfVxuXG4gICAgLy8gY2hlY2sgZm9yIHJlZmVyZW5jZSBlcnJvcnNcbiAgICBpZiAob3B0aW9ucy5yZWZlcmVuY2UgJiYgb3B0aW9ucy5yZWZlcmVuY2UgIT09ICdzdWZmaXgnICYmIG9wdGlvbnMucmVmZXJlbmNlICE9PSBwYXJzZWQucmVmZXJlbmNlKSB7XG4gICAgICBwYXJzZWQuZXJyb3IgPSBwYXJzZWQuZXJyb3IgfHwgJ1VSSSBpcyBub3QgYSAnICsgb3B0aW9ucy5yZWZlcmVuY2UgKyAnIHJlZmVyZW5jZS4nXG4gICAgfVxuXG4gICAgLy8gZmluZCBzY2hlbWUgaGFuZGxlclxuICAgIGNvbnN0IHNjaGVtZUhhbmRsZXIgPSBnZXRTY2hlbWVIYW5kbGVyKG9wdGlvbnMuc2NoZW1lIHx8IHBhcnNlZC5zY2hlbWUpXG5cbiAgICAvLyBjaGVjayBpZiBzY2hlbWUgY2FuJ3QgaGFuZGxlIElSSXNcbiAgICBpZiAoIW9wdGlvbnMudW5pY29kZVN1cHBvcnQgJiYgKCFzY2hlbWVIYW5kbGVyIHx8ICFzY2hlbWVIYW5kbGVyLnVuaWNvZGVTdXBwb3J0KSkge1xuICAgICAgLy8gaWYgaG9zdCBjb21wb25lbnQgaXMgYSBkb21haW4gbmFtZVxuICAgICAgaWYgKHBhcnNlZC5ob3N0ICYmIChvcHRpb25zLmRvbWFpbkhvc3QgfHwgKHNjaGVtZUhhbmRsZXIgJiYgc2NoZW1lSGFuZGxlci5kb21haW5Ib3N0KSkgJiYgaXNJUCA9PT0gZmFsc2UgJiYgbm9uU2ltcGxlRG9tYWluKHBhcnNlZC5ob3N0KSkge1xuICAgICAgICAvLyBjb252ZXJ0IFVuaWNvZGUgSUROIC0+IEFTQ0lJIElETlxuICAgICAgICB0cnkge1xuICAgICAgICAgIHBhcnNlZC5ob3N0ID0gVVJMLmRvbWFpblRvQVNDSUkocGFyc2VkLmhvc3QudG9Mb3dlckNhc2UoKSlcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIHBhcnNlZC5lcnJvciA9IHBhcnNlZC5lcnJvciB8fCBcIkhvc3QncyBkb21haW4gbmFtZSBjYW4gbm90IGJlIGNvbnZlcnRlZCB0byBBU0NJSTogXCIgKyBlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIGNvbnZlcnQgSVJJIC0+IFVSSVxuICAgIH1cblxuICAgIGlmICghc2NoZW1lSGFuZGxlciB8fCAoc2NoZW1lSGFuZGxlciAmJiAhc2NoZW1lSGFuZGxlci5za2lwTm9ybWFsaXplKSkge1xuICAgICAgaWYgKHVyaS5pbmRleE9mKCclJykgIT09IC0xKSB7XG4gICAgICAgIGlmIChwYXJzZWQuc2NoZW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBwYXJzZWQuc2NoZW1lID0gdW5lc2NhcGUocGFyc2VkLnNjaGVtZSlcbiAgICAgICAgfVxuICAgICAgICBpZiAocGFyc2VkLmhvc3QgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHBhcnNlZC5ob3N0ID0gdW5lc2NhcGUocGFyc2VkLmhvc3QpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChwYXJzZWQucGF0aCkge1xuICAgICAgICBwYXJzZWQucGF0aCA9IGVzY2FwZSh1bmVzY2FwZShwYXJzZWQucGF0aCkpXG4gICAgICB9XG4gICAgICBpZiAocGFyc2VkLmZyYWdtZW50KSB7XG4gICAgICAgIHBhcnNlZC5mcmFnbWVudCA9IGVuY29kZVVSSShkZWNvZGVVUklDb21wb25lbnQocGFyc2VkLmZyYWdtZW50KSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBwZXJmb3JtIHNjaGVtZSBzcGVjaWZpYyBwYXJzaW5nXG4gICAgaWYgKHNjaGVtZUhhbmRsZXIgJiYgc2NoZW1lSGFuZGxlci5wYXJzZSkge1xuICAgICAgc2NoZW1lSGFuZGxlci5wYXJzZShwYXJzZWQsIG9wdGlvbnMpXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHBhcnNlZC5lcnJvciA9IHBhcnNlZC5lcnJvciB8fCAnVVJJIGNhbiBub3QgYmUgcGFyc2VkLidcbiAgfVxuICByZXR1cm4gcGFyc2VkXG59XG5cbmNvbnN0IGZhc3RVcmkgPSB7XG4gIFNDSEVNRVMsXG4gIG5vcm1hbGl6ZSxcbiAgcmVzb2x2ZSxcbiAgcmVzb2x2ZUNvbXBvbmVudCxcbiAgZXF1YWwsXG4gIHNlcmlhbGl6ZSxcbiAgcGFyc2Vcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmYXN0VXJpXG5tb2R1bGUuZXhwb3J0cy5kZWZhdWx0ID0gZmFzdFVyaVxubW9kdWxlLmV4cG9ydHMuZmFzdFVyaSA9IGZhc3RVcmlcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCB1cmkgPSByZXF1aXJlKFwiZmFzdC11cmlcIik7XG51cmkuY29kZSA9ICdyZXF1aXJlKFwiYWp2L2Rpc3QvcnVudGltZS91cmlcIikuZGVmYXVsdCc7XG5leHBvcnRzLmRlZmF1bHQgPSB1cmk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD11cmkuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQ29kZUdlbiA9IGV4cG9ydHMuTmFtZSA9IGV4cG9ydHMubmlsID0gZXhwb3J0cy5zdHJpbmdpZnkgPSBleHBvcnRzLnN0ciA9IGV4cG9ydHMuXyA9IGV4cG9ydHMuS2V5d29yZEN4dCA9IHZvaWQgMDtcbnZhciB2YWxpZGF0ZV8xID0gcmVxdWlyZShcIi4vY29tcGlsZS92YWxpZGF0ZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIktleXdvcmRDeHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHZhbGlkYXRlXzEuS2V5d29yZEN4dDsgfSB9KTtcbnZhciBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi9jb21waWxlL2NvZGVnZW5cIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjb2RlZ2VuXzEuXzsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInN0clwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29kZWdlbl8xLnN0cjsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInN0cmluZ2lmeVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29kZWdlbl8xLnN0cmluZ2lmeTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm5pbFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29kZWdlbl8xLm5pbDsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIk5hbWVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvZGVnZW5fMS5OYW1lOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQ29kZUdlblwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29kZWdlbl8xLkNvZGVHZW47IH0gfSk7XG5jb25zdCB2YWxpZGF0aW9uX2Vycm9yXzEgPSByZXF1aXJlKFwiLi9ydW50aW1lL3ZhbGlkYXRpb25fZXJyb3JcIik7XG5jb25zdCByZWZfZXJyb3JfMSA9IHJlcXVpcmUoXCIuL2NvbXBpbGUvcmVmX2Vycm9yXCIpO1xuY29uc3QgcnVsZXNfMSA9IHJlcXVpcmUoXCIuL2NvbXBpbGUvcnVsZXNcIik7XG5jb25zdCBjb21waWxlXzEgPSByZXF1aXJlKFwiLi9jb21waWxlXCIpO1xuY29uc3QgY29kZWdlbl8yID0gcmVxdWlyZShcIi4vY29tcGlsZS9jb2RlZ2VuXCIpO1xuY29uc3QgcmVzb2x2ZV8xID0gcmVxdWlyZShcIi4vY29tcGlsZS9yZXNvbHZlXCIpO1xuY29uc3QgZGF0YVR5cGVfMSA9IHJlcXVpcmUoXCIuL2NvbXBpbGUvdmFsaWRhdGUvZGF0YVR5cGVcIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi9jb21waWxlL3V0aWxcIik7XG5jb25zdCAkZGF0YVJlZlNjaGVtYSA9IHJlcXVpcmUoXCIuL3JlZnMvZGF0YS5qc29uXCIpO1xuY29uc3QgdXJpXzEgPSByZXF1aXJlKFwiLi9ydW50aW1lL3VyaVwiKTtcbmNvbnN0IGRlZmF1bHRSZWdFeHAgPSAoc3RyLCBmbGFncykgPT4gbmV3IFJlZ0V4cChzdHIsIGZsYWdzKTtcbmRlZmF1bHRSZWdFeHAuY29kZSA9IFwibmV3IFJlZ0V4cFwiO1xuY29uc3QgTUVUQV9JR05PUkVfT1BUSU9OUyA9IFtcInJlbW92ZUFkZGl0aW9uYWxcIiwgXCJ1c2VEZWZhdWx0c1wiLCBcImNvZXJjZVR5cGVzXCJdO1xuY29uc3QgRVhUX1NDT1BFX05BTUVTID0gbmV3IFNldChbXG4gICAgXCJ2YWxpZGF0ZVwiLFxuICAgIFwic2VyaWFsaXplXCIsXG4gICAgXCJwYXJzZVwiLFxuICAgIFwid3JhcHBlclwiLFxuICAgIFwicm9vdFwiLFxuICAgIFwic2NoZW1hXCIsXG4gICAgXCJrZXl3b3JkXCIsXG4gICAgXCJwYXR0ZXJuXCIsXG4gICAgXCJmb3JtYXRzXCIsXG4gICAgXCJ2YWxpZGF0ZSRkYXRhXCIsXG4gICAgXCJmdW5jXCIsXG4gICAgXCJvYmpcIixcbiAgICBcIkVycm9yXCIsXG5dKTtcbmNvbnN0IHJlbW92ZWRPcHRpb25zID0ge1xuICAgIGVycm9yRGF0YVBhdGg6IFwiXCIsXG4gICAgZm9ybWF0OiBcImB2YWxpZGF0ZUZvcm1hdHM6IGZhbHNlYCBjYW4gYmUgdXNlZCBpbnN0ZWFkLlwiLFxuICAgIG51bGxhYmxlOiAnXCJudWxsYWJsZVwiIGtleXdvcmQgaXMgc3VwcG9ydGVkIGJ5IGRlZmF1bHQuJyxcbiAgICBqc29uUG9pbnRlcnM6IFwiRGVwcmVjYXRlZCBqc1Byb3BlcnR5U3ludGF4IGNhbiBiZSB1c2VkIGluc3RlYWQuXCIsXG4gICAgZXh0ZW5kUmVmczogXCJEZXByZWNhdGVkIGlnbm9yZUtleXdvcmRzV2l0aFJlZiBjYW4gYmUgdXNlZCBpbnN0ZWFkLlwiLFxuICAgIG1pc3NpbmdSZWZzOiBcIlBhc3MgZW1wdHkgc2NoZW1hIHdpdGggJGlkIHRoYXQgc2hvdWxkIGJlIGlnbm9yZWQgdG8gYWp2LmFkZFNjaGVtYS5cIixcbiAgICBwcm9jZXNzQ29kZTogXCJVc2Ugb3B0aW9uIGBjb2RlOiB7cHJvY2VzczogKGNvZGUsIHNjaGVtYUVudjogb2JqZWN0KSA9PiBzdHJpbmd9YFwiLFxuICAgIHNvdXJjZUNvZGU6IFwiVXNlIG9wdGlvbiBgY29kZToge3NvdXJjZTogdHJ1ZX1gXCIsXG4gICAgc3RyaWN0RGVmYXVsdHM6IFwiSXQgaXMgZGVmYXVsdCBub3csIHNlZSBvcHRpb24gYHN0cmljdGAuXCIsXG4gICAgc3RyaWN0S2V5d29yZHM6IFwiSXQgaXMgZGVmYXVsdCBub3csIHNlZSBvcHRpb24gYHN0cmljdGAuXCIsXG4gICAgdW5pcXVlSXRlbXM6ICdcInVuaXF1ZUl0ZW1zXCIga2V5d29yZCBpcyBhbHdheXMgdmFsaWRhdGVkLicsXG4gICAgdW5rbm93bkZvcm1hdHM6IFwiRGlzYWJsZSBzdHJpY3QgbW9kZSBvciBwYXNzIGB0cnVlYCB0byBgYWp2LmFkZEZvcm1hdGAgKG9yIGBmb3JtYXRzYCBvcHRpb24pLlwiLFxuICAgIGNhY2hlOiBcIk1hcCBpcyB1c2VkIGFzIGNhY2hlLCBzY2hlbWEgb2JqZWN0IGFzIGtleS5cIixcbiAgICBzZXJpYWxpemU6IFwiTWFwIGlzIHVzZWQgYXMgY2FjaGUsIHNjaGVtYSBvYmplY3QgYXMga2V5LlwiLFxuICAgIGFqdkVycm9yczogXCJJdCBpcyBkZWZhdWx0IG5vdy5cIixcbn07XG5jb25zdCBkZXByZWNhdGVkT3B0aW9ucyA9IHtcbiAgICBpZ25vcmVLZXl3b3Jkc1dpdGhSZWY6IFwiXCIsXG4gICAganNQcm9wZXJ0eVN5bnRheDogXCJcIixcbiAgICB1bmljb2RlOiAnXCJtaW5MZW5ndGhcIi9cIm1heExlbmd0aFwiIGFjY291bnQgZm9yIHVuaWNvZGUgY2hhcmFjdGVycyBieSBkZWZhdWx0LicsXG59O1xuY29uc3QgTUFYX0VYUFJFU1NJT04gPSAyMDA7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxuZnVuY3Rpb24gcmVxdWlyZWRPcHRpb25zKG8pIHtcbiAgICB2YXIgX2EsIF9iLCBfYywgX2QsIF9lLCBfZiwgX2csIF9oLCBfaiwgX2ssIF9sLCBfbSwgX28sIF9wLCBfcSwgX3IsIF9zLCBfdCwgX3UsIF92LCBfdywgX3gsIF95LCBfeiwgXzA7XG4gICAgY29uc3QgcyA9IG8uc3RyaWN0O1xuICAgIGNvbnN0IF9vcHR6ID0gKF9hID0gby5jb2RlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Eub3B0aW1pemU7XG4gICAgY29uc3Qgb3B0aW1pemUgPSBfb3B0eiA9PT0gdHJ1ZSB8fCBfb3B0eiA9PT0gdW5kZWZpbmVkID8gMSA6IF9vcHR6IHx8IDA7XG4gICAgY29uc3QgcmVnRXhwID0gKF9jID0gKF9iID0gby5jb2RlKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IucmVnRXhwKSAhPT0gbnVsbCAmJiBfYyAhPT0gdm9pZCAwID8gX2MgOiBkZWZhdWx0UmVnRXhwO1xuICAgIGNvbnN0IHVyaVJlc29sdmVyID0gKF9kID0gby51cmlSZXNvbHZlcikgIT09IG51bGwgJiYgX2QgIT09IHZvaWQgMCA/IF9kIDogdXJpXzEuZGVmYXVsdDtcbiAgICByZXR1cm4ge1xuICAgICAgICBzdHJpY3RTY2hlbWE6IChfZiA9IChfZSA9IG8uc3RyaWN0U2NoZW1hKSAhPT0gbnVsbCAmJiBfZSAhPT0gdm9pZCAwID8gX2UgOiBzKSAhPT0gbnVsbCAmJiBfZiAhPT0gdm9pZCAwID8gX2YgOiB0cnVlLFxuICAgICAgICBzdHJpY3ROdW1iZXJzOiAoX2ggPSAoX2cgPSBvLnN0cmljdE51bWJlcnMpICE9PSBudWxsICYmIF9nICE9PSB2b2lkIDAgPyBfZyA6IHMpICE9PSBudWxsICYmIF9oICE9PSB2b2lkIDAgPyBfaCA6IHRydWUsXG4gICAgICAgIHN0cmljdFR5cGVzOiAoX2sgPSAoX2ogPSBvLnN0cmljdFR5cGVzKSAhPT0gbnVsbCAmJiBfaiAhPT0gdm9pZCAwID8gX2ogOiBzKSAhPT0gbnVsbCAmJiBfayAhPT0gdm9pZCAwID8gX2sgOiBcImxvZ1wiLFxuICAgICAgICBzdHJpY3RUdXBsZXM6IChfbSA9IChfbCA9IG8uc3RyaWN0VHVwbGVzKSAhPT0gbnVsbCAmJiBfbCAhPT0gdm9pZCAwID8gX2wgOiBzKSAhPT0gbnVsbCAmJiBfbSAhPT0gdm9pZCAwID8gX20gOiBcImxvZ1wiLFxuICAgICAgICBzdHJpY3RSZXF1aXJlZDogKF9wID0gKF9vID0gby5zdHJpY3RSZXF1aXJlZCkgIT09IG51bGwgJiYgX28gIT09IHZvaWQgMCA/IF9vIDogcykgIT09IG51bGwgJiYgX3AgIT09IHZvaWQgMCA/IF9wIDogZmFsc2UsXG4gICAgICAgIGNvZGU6IG8uY29kZSA/IHsgLi4uby5jb2RlLCBvcHRpbWl6ZSwgcmVnRXhwIH0gOiB7IG9wdGltaXplLCByZWdFeHAgfSxcbiAgICAgICAgbG9vcFJlcXVpcmVkOiAoX3EgPSBvLmxvb3BSZXF1aXJlZCkgIT09IG51bGwgJiYgX3EgIT09IHZvaWQgMCA/IF9xIDogTUFYX0VYUFJFU1NJT04sXG4gICAgICAgIGxvb3BFbnVtOiAoX3IgPSBvLmxvb3BFbnVtKSAhPT0gbnVsbCAmJiBfciAhPT0gdm9pZCAwID8gX3IgOiBNQVhfRVhQUkVTU0lPTixcbiAgICAgICAgbWV0YTogKF9zID0gby5tZXRhKSAhPT0gbnVsbCAmJiBfcyAhPT0gdm9pZCAwID8gX3MgOiB0cnVlLFxuICAgICAgICBtZXNzYWdlczogKF90ID0gby5tZXNzYWdlcykgIT09IG51bGwgJiYgX3QgIT09IHZvaWQgMCA/IF90IDogdHJ1ZSxcbiAgICAgICAgaW5saW5lUmVmczogKF91ID0gby5pbmxpbmVSZWZzKSAhPT0gbnVsbCAmJiBfdSAhPT0gdm9pZCAwID8gX3UgOiB0cnVlLFxuICAgICAgICBzY2hlbWFJZDogKF92ID0gby5zY2hlbWFJZCkgIT09IG51bGwgJiYgX3YgIT09IHZvaWQgMCA/IF92IDogXCIkaWRcIixcbiAgICAgICAgYWRkVXNlZFNjaGVtYTogKF93ID0gby5hZGRVc2VkU2NoZW1hKSAhPT0gbnVsbCAmJiBfdyAhPT0gdm9pZCAwID8gX3cgOiB0cnVlLFxuICAgICAgICB2YWxpZGF0ZVNjaGVtYTogKF94ID0gby52YWxpZGF0ZVNjaGVtYSkgIT09IG51bGwgJiYgX3ggIT09IHZvaWQgMCA/IF94IDogdHJ1ZSxcbiAgICAgICAgdmFsaWRhdGVGb3JtYXRzOiAoX3kgPSBvLnZhbGlkYXRlRm9ybWF0cykgIT09IG51bGwgJiYgX3kgIT09IHZvaWQgMCA/IF95IDogdHJ1ZSxcbiAgICAgICAgdW5pY29kZVJlZ0V4cDogKF96ID0gby51bmljb2RlUmVnRXhwKSAhPT0gbnVsbCAmJiBfeiAhPT0gdm9pZCAwID8gX3ogOiB0cnVlLFxuICAgICAgICBpbnQzMnJhbmdlOiAoXzAgPSBvLmludDMycmFuZ2UpICE9PSBudWxsICYmIF8wICE9PSB2b2lkIDAgPyBfMCA6IHRydWUsXG4gICAgICAgIHVyaVJlc29sdmVyOiB1cmlSZXNvbHZlcixcbiAgICB9O1xufVxuY2xhc3MgQWp2IHtcbiAgICBjb25zdHJ1Y3RvcihvcHRzID0ge30pIHtcbiAgICAgICAgdGhpcy5zY2hlbWFzID0ge307XG4gICAgICAgIHRoaXMucmVmcyA9IHt9O1xuICAgICAgICB0aGlzLmZvcm1hdHMgPSB7fTtcbiAgICAgICAgdGhpcy5fY29tcGlsYXRpb25zID0gbmV3IFNldCgpO1xuICAgICAgICB0aGlzLl9sb2FkaW5nID0ge307XG4gICAgICAgIHRoaXMuX2NhY2hlID0gbmV3IE1hcCgpO1xuICAgICAgICBvcHRzID0gdGhpcy5vcHRzID0geyAuLi5vcHRzLCAuLi5yZXF1aXJlZE9wdGlvbnMob3B0cykgfTtcbiAgICAgICAgY29uc3QgeyBlczUsIGxpbmVzIH0gPSB0aGlzLm9wdHMuY29kZTtcbiAgICAgICAgdGhpcy5zY29wZSA9IG5ldyBjb2RlZ2VuXzIuVmFsdWVTY29wZSh7IHNjb3BlOiB7fSwgcHJlZml4ZXM6IEVYVF9TQ09QRV9OQU1FUywgZXM1LCBsaW5lcyB9KTtcbiAgICAgICAgdGhpcy5sb2dnZXIgPSBnZXRMb2dnZXIob3B0cy5sb2dnZXIpO1xuICAgICAgICBjb25zdCBmb3JtYXRPcHQgPSBvcHRzLnZhbGlkYXRlRm9ybWF0cztcbiAgICAgICAgb3B0cy52YWxpZGF0ZUZvcm1hdHMgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5SVUxFUyA9ICgwLCBydWxlc18xLmdldFJ1bGVzKSgpO1xuICAgICAgICBjaGVja09wdGlvbnMuY2FsbCh0aGlzLCByZW1vdmVkT3B0aW9ucywgb3B0cywgXCJOT1QgU1VQUE9SVEVEXCIpO1xuICAgICAgICBjaGVja09wdGlvbnMuY2FsbCh0aGlzLCBkZXByZWNhdGVkT3B0aW9ucywgb3B0cywgXCJERVBSRUNBVEVEXCIsIFwid2FyblwiKTtcbiAgICAgICAgdGhpcy5fbWV0YU9wdHMgPSBnZXRNZXRhU2NoZW1hT3B0aW9ucy5jYWxsKHRoaXMpO1xuICAgICAgICBpZiAob3B0cy5mb3JtYXRzKVxuICAgICAgICAgICAgYWRkSW5pdGlhbEZvcm1hdHMuY2FsbCh0aGlzKTtcbiAgICAgICAgdGhpcy5fYWRkVm9jYWJ1bGFyaWVzKCk7XG4gICAgICAgIHRoaXMuX2FkZERlZmF1bHRNZXRhU2NoZW1hKCk7XG4gICAgICAgIGlmIChvcHRzLmtleXdvcmRzKVxuICAgICAgICAgICAgYWRkSW5pdGlhbEtleXdvcmRzLmNhbGwodGhpcywgb3B0cy5rZXl3b3Jkcyk7XG4gICAgICAgIGlmICh0eXBlb2Ygb3B0cy5tZXRhID09IFwib2JqZWN0XCIpXG4gICAgICAgICAgICB0aGlzLmFkZE1ldGFTY2hlbWEob3B0cy5tZXRhKTtcbiAgICAgICAgYWRkSW5pdGlhbFNjaGVtYXMuY2FsbCh0aGlzKTtcbiAgICAgICAgb3B0cy52YWxpZGF0ZUZvcm1hdHMgPSBmb3JtYXRPcHQ7XG4gICAgfVxuICAgIF9hZGRWb2NhYnVsYXJpZXMoKSB7XG4gICAgICAgIHRoaXMuYWRkS2V5d29yZChcIiRhc3luY1wiKTtcbiAgICB9XG4gICAgX2FkZERlZmF1bHRNZXRhU2NoZW1hKCkge1xuICAgICAgICBjb25zdCB7ICRkYXRhLCBtZXRhLCBzY2hlbWFJZCB9ID0gdGhpcy5vcHRzO1xuICAgICAgICBsZXQgX2RhdGFSZWZTY2hlbWEgPSAkZGF0YVJlZlNjaGVtYTtcbiAgICAgICAgaWYgKHNjaGVtYUlkID09PSBcImlkXCIpIHtcbiAgICAgICAgICAgIF9kYXRhUmVmU2NoZW1hID0geyAuLi4kZGF0YVJlZlNjaGVtYSB9O1xuICAgICAgICAgICAgX2RhdGFSZWZTY2hlbWEuaWQgPSBfZGF0YVJlZlNjaGVtYS4kaWQ7XG4gICAgICAgICAgICBkZWxldGUgX2RhdGFSZWZTY2hlbWEuJGlkO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtZXRhICYmICRkYXRhKVxuICAgICAgICAgICAgdGhpcy5hZGRNZXRhU2NoZW1hKF9kYXRhUmVmU2NoZW1hLCBfZGF0YVJlZlNjaGVtYVtzY2hlbWFJZF0sIGZhbHNlKTtcbiAgICB9XG4gICAgZGVmYXVsdE1ldGEoKSB7XG4gICAgICAgIGNvbnN0IHsgbWV0YSwgc2NoZW1hSWQgfSA9IHRoaXMub3B0cztcbiAgICAgICAgcmV0dXJuICh0aGlzLm9wdHMuZGVmYXVsdE1ldGEgPSB0eXBlb2YgbWV0YSA9PSBcIm9iamVjdFwiID8gbWV0YVtzY2hlbWFJZF0gfHwgbWV0YSA6IHVuZGVmaW5lZCk7XG4gICAgfVxuICAgIHZhbGlkYXRlKHNjaGVtYUtleVJlZiwgLy8ga2V5LCByZWYgb3Igc2NoZW1hIG9iamVjdFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVkdW5kYW50LXR5cGUtY29uc3RpdHVlbnRzXG4gICAgZGF0YSAvLyB0byBiZSB2YWxpZGF0ZWRcbiAgICApIHtcbiAgICAgICAgbGV0IHY7XG4gICAgICAgIGlmICh0eXBlb2Ygc2NoZW1hS2V5UmVmID09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHYgPSB0aGlzLmdldFNjaGVtYShzY2hlbWFLZXlSZWYpO1xuICAgICAgICAgICAgaWYgKCF2KVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgbm8gc2NoZW1hIHdpdGgga2V5IG9yIHJlZiBcIiR7c2NoZW1hS2V5UmVmfVwiYCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2ID0gdGhpcy5jb21waWxlKHNjaGVtYUtleVJlZik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdmFsaWQgPSB2KGRhdGEpO1xuICAgICAgICBpZiAoIShcIiRhc3luY1wiIGluIHYpKVxuICAgICAgICAgICAgdGhpcy5lcnJvcnMgPSB2LmVycm9ycztcbiAgICAgICAgcmV0dXJuIHZhbGlkO1xuICAgIH1cbiAgICBjb21waWxlKHNjaGVtYSwgX21ldGEpIHtcbiAgICAgICAgY29uc3Qgc2NoID0gdGhpcy5fYWRkU2NoZW1hKHNjaGVtYSwgX21ldGEpO1xuICAgICAgICByZXR1cm4gKHNjaC52YWxpZGF0ZSB8fCB0aGlzLl9jb21waWxlU2NoZW1hRW52KHNjaCkpO1xuICAgIH1cbiAgICBjb21waWxlQXN5bmMoc2NoZW1hLCBtZXRhKSB7XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5vcHRzLmxvYWRTY2hlbWEgIT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJvcHRpb25zLmxvYWRTY2hlbWEgc2hvdWxkIGJlIGEgZnVuY3Rpb25cIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyBsb2FkU2NoZW1hIH0gPSB0aGlzLm9wdHM7XG4gICAgICAgIHJldHVybiBydW5Db21waWxlQXN5bmMuY2FsbCh0aGlzLCBzY2hlbWEsIG1ldGEpO1xuICAgICAgICBhc3luYyBmdW5jdGlvbiBydW5Db21waWxlQXN5bmMoX3NjaGVtYSwgX21ldGEpIHtcbiAgICAgICAgICAgIGF3YWl0IGxvYWRNZXRhU2NoZW1hLmNhbGwodGhpcywgX3NjaGVtYS4kc2NoZW1hKTtcbiAgICAgICAgICAgIGNvbnN0IHNjaCA9IHRoaXMuX2FkZFNjaGVtYShfc2NoZW1hLCBfbWV0YSk7XG4gICAgICAgICAgICByZXR1cm4gc2NoLnZhbGlkYXRlIHx8IF9jb21waWxlQXN5bmMuY2FsbCh0aGlzLCBzY2gpO1xuICAgICAgICB9XG4gICAgICAgIGFzeW5jIGZ1bmN0aW9uIGxvYWRNZXRhU2NoZW1hKCRyZWYpIHtcbiAgICAgICAgICAgIGlmICgkcmVmICYmICF0aGlzLmdldFNjaGVtYSgkcmVmKSkge1xuICAgICAgICAgICAgICAgIGF3YWl0IHJ1bkNvbXBpbGVBc3luYy5jYWxsKHRoaXMsIHsgJHJlZiB9LCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBhc3luYyBmdW5jdGlvbiBfY29tcGlsZUFzeW5jKHNjaCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fY29tcGlsZVNjaGVtYUVudihzY2gpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoIShlIGluc3RhbmNlb2YgcmVmX2Vycm9yXzEuZGVmYXVsdCkpXG4gICAgICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICAgICAgY2hlY2tMb2FkZWQuY2FsbCh0aGlzLCBlKTtcbiAgICAgICAgICAgICAgICBhd2FpdCBsb2FkTWlzc2luZ1NjaGVtYS5jYWxsKHRoaXMsIGUubWlzc2luZ1NjaGVtYSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9jb21waWxlQXN5bmMuY2FsbCh0aGlzLCBzY2gpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGNoZWNrTG9hZGVkKHsgbWlzc2luZ1NjaGVtYTogcmVmLCBtaXNzaW5nUmVmIH0pIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnJlZnNbcmVmXSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQW55U2NoZW1hICR7cmVmfSBpcyBsb2FkZWQgYnV0ICR7bWlzc2luZ1JlZn0gY2Fubm90IGJlIHJlc29sdmVkYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYXN5bmMgZnVuY3Rpb24gbG9hZE1pc3NpbmdTY2hlbWEocmVmKSB7XG4gICAgICAgICAgICBjb25zdCBfc2NoZW1hID0gYXdhaXQgX2xvYWRTY2hlbWEuY2FsbCh0aGlzLCByZWYpO1xuICAgICAgICAgICAgaWYgKCF0aGlzLnJlZnNbcmVmXSlcbiAgICAgICAgICAgICAgICBhd2FpdCBsb2FkTWV0YVNjaGVtYS5jYWxsKHRoaXMsIF9zY2hlbWEuJHNjaGVtYSk7XG4gICAgICAgICAgICBpZiAoIXRoaXMucmVmc1tyZWZdKVxuICAgICAgICAgICAgICAgIHRoaXMuYWRkU2NoZW1hKF9zY2hlbWEsIHJlZiwgbWV0YSk7XG4gICAgICAgIH1cbiAgICAgICAgYXN5bmMgZnVuY3Rpb24gX2xvYWRTY2hlbWEocmVmKSB7XG4gICAgICAgICAgICBjb25zdCBwID0gdGhpcy5fbG9hZGluZ1tyZWZdO1xuICAgICAgICAgICAgaWYgKHApXG4gICAgICAgICAgICAgICAgcmV0dXJuIHA7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCAodGhpcy5fbG9hZGluZ1tyZWZdID0gbG9hZFNjaGVtYShyZWYpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9sb2FkaW5nW3JlZl07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gQWRkcyBzY2hlbWEgdG8gdGhlIGluc3RhbmNlXG4gICAgYWRkU2NoZW1hKHNjaGVtYSwgLy8gSWYgYXJyYXkgaXMgcGFzc2VkLCBga2V5YCB3aWxsIGJlIGlnbm9yZWRcbiAgICBrZXksIC8vIE9wdGlvbmFsIHNjaGVtYSBrZXkuIENhbiBiZSBwYXNzZWQgdG8gYHZhbGlkYXRlYCBtZXRob2QgaW5zdGVhZCBvZiBzY2hlbWEgb2JqZWN0IG9yIGlkL3JlZi4gT25lIHNjaGVtYSBwZXIgaW5zdGFuY2UgY2FuIGhhdmUgZW1wdHkgYGlkYCBhbmQgYGtleWAuXG4gICAgX21ldGEsIC8vIHRydWUgaWYgc2NoZW1hIGlzIGEgbWV0YS1zY2hlbWEuIFVzZWQgaW50ZXJuYWxseSwgYWRkTWV0YVNjaGVtYSBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkLlxuICAgIF92YWxpZGF0ZVNjaGVtYSA9IHRoaXMub3B0cy52YWxpZGF0ZVNjaGVtYSAvLyBmYWxzZSB0byBza2lwIHNjaGVtYSB2YWxpZGF0aW9uLiBVc2VkIGludGVybmFsbHksIG9wdGlvbiB2YWxpZGF0ZVNjaGVtYSBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkLlxuICAgICkge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShzY2hlbWEpKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHNjaCBvZiBzY2hlbWEpXG4gICAgICAgICAgICAgICAgdGhpcy5hZGRTY2hlbWEoc2NoLCB1bmRlZmluZWQsIF9tZXRhLCBfdmFsaWRhdGVTY2hlbWEpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGlkO1xuICAgICAgICBpZiAodHlwZW9mIHNjaGVtYSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgY29uc3QgeyBzY2hlbWFJZCB9ID0gdGhpcy5vcHRzO1xuICAgICAgICAgICAgaWQgPSBzY2hlbWFbc2NoZW1hSWRdO1xuICAgICAgICAgICAgaWYgKGlkICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIGlkICE9IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHNjaGVtYSAke3NjaGVtYUlkfSBtdXN0IGJlIHN0cmluZ2ApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGtleSA9ICgwLCByZXNvbHZlXzEubm9ybWFsaXplSWQpKGtleSB8fCBpZCk7XG4gICAgICAgIHRoaXMuX2NoZWNrVW5pcXVlKGtleSk7XG4gICAgICAgIHRoaXMuc2NoZW1hc1trZXldID0gdGhpcy5fYWRkU2NoZW1hKHNjaGVtYSwgX21ldGEsIGtleSwgX3ZhbGlkYXRlU2NoZW1hLCB0cnVlKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8vIEFkZCBzY2hlbWEgdGhhdCB3aWxsIGJlIHVzZWQgdG8gdmFsaWRhdGUgb3RoZXIgc2NoZW1hc1xuICAgIC8vIG9wdGlvbnMgaW4gTUVUQV9JR05PUkVfT1BUSU9OUyBhcmUgYWx3YXkgc2V0IHRvIGZhbHNlXG4gICAgYWRkTWV0YVNjaGVtYShzY2hlbWEsIGtleSwgLy8gc2NoZW1hIGtleVxuICAgIF92YWxpZGF0ZVNjaGVtYSA9IHRoaXMub3B0cy52YWxpZGF0ZVNjaGVtYSAvLyBmYWxzZSB0byBza2lwIHNjaGVtYSB2YWxpZGF0aW9uLCBjYW4gYmUgdXNlZCB0byBvdmVycmlkZSB2YWxpZGF0ZVNjaGVtYSBvcHRpb24gZm9yIG1ldGEtc2NoZW1hXG4gICAgKSB7XG4gICAgICAgIHRoaXMuYWRkU2NoZW1hKHNjaGVtYSwga2V5LCB0cnVlLCBfdmFsaWRhdGVTY2hlbWEpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLy8gIFZhbGlkYXRlIHNjaGVtYSBhZ2FpbnN0IGl0cyBtZXRhLXNjaGVtYVxuICAgIHZhbGlkYXRlU2NoZW1hKHNjaGVtYSwgdGhyb3dPckxvZ0Vycm9yKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc2NoZW1hID09IFwiYm9vbGVhblwiKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIGxldCAkc2NoZW1hO1xuICAgICAgICAkc2NoZW1hID0gc2NoZW1hLiRzY2hlbWE7XG4gICAgICAgIGlmICgkc2NoZW1hICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mICRzY2hlbWEgIT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiJHNjaGVtYSBtdXN0IGJlIGEgc3RyaW5nXCIpO1xuICAgICAgICB9XG4gICAgICAgICRzY2hlbWEgPSAkc2NoZW1hIHx8IHRoaXMub3B0cy5kZWZhdWx0TWV0YSB8fCB0aGlzLmRlZmF1bHRNZXRhKCk7XG4gICAgICAgIGlmICghJHNjaGVtYSkge1xuICAgICAgICAgICAgdGhpcy5sb2dnZXIud2FybihcIm1ldGEtc2NoZW1hIG5vdCBhdmFpbGFibGVcIik7XG4gICAgICAgICAgICB0aGlzLmVycm9ycyA9IG51bGw7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB2YWxpZCA9IHRoaXMudmFsaWRhdGUoJHNjaGVtYSwgc2NoZW1hKTtcbiAgICAgICAgaWYgKCF2YWxpZCAmJiB0aHJvd09yTG9nRXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBcInNjaGVtYSBpcyBpbnZhbGlkOiBcIiArIHRoaXMuZXJyb3JzVGV4dCgpO1xuICAgICAgICAgICAgaWYgKHRoaXMub3B0cy52YWxpZGF0ZVNjaGVtYSA9PT0gXCJsb2dcIilcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcihtZXNzYWdlKTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbGlkO1xuICAgIH1cbiAgICAvLyBHZXQgY29tcGlsZWQgc2NoZW1hIGJ5IGBrZXlgIG9yIGByZWZgLlxuICAgIC8vIChga2V5YCB0aGF0IHdhcyBwYXNzZWQgdG8gYGFkZFNjaGVtYWAgb3IgZnVsbCBzY2hlbWEgcmVmZXJlbmNlIC0gYHNjaGVtYS4kaWRgIG9yIHJlc29sdmVkIGlkKVxuICAgIGdldFNjaGVtYShrZXlSZWYpIHtcbiAgICAgICAgbGV0IHNjaDtcbiAgICAgICAgd2hpbGUgKHR5cGVvZiAoc2NoID0gZ2V0U2NoRW52LmNhbGwodGhpcywga2V5UmVmKSkgPT0gXCJzdHJpbmdcIilcbiAgICAgICAgICAgIGtleVJlZiA9IHNjaDtcbiAgICAgICAgaWYgKHNjaCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb25zdCB7IHNjaGVtYUlkIH0gPSB0aGlzLm9wdHM7XG4gICAgICAgICAgICBjb25zdCByb290ID0gbmV3IGNvbXBpbGVfMS5TY2hlbWFFbnYoeyBzY2hlbWE6IHt9LCBzY2hlbWFJZCB9KTtcbiAgICAgICAgICAgIHNjaCA9IGNvbXBpbGVfMS5yZXNvbHZlU2NoZW1hLmNhbGwodGhpcywgcm9vdCwga2V5UmVmKTtcbiAgICAgICAgICAgIGlmICghc2NoKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIHRoaXMucmVmc1trZXlSZWZdID0gc2NoO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAoc2NoLnZhbGlkYXRlIHx8IHRoaXMuX2NvbXBpbGVTY2hlbWFFbnYoc2NoKSk7XG4gICAgfVxuICAgIC8vIFJlbW92ZSBjYWNoZWQgc2NoZW1hKHMpLlxuICAgIC8vIElmIG5vIHBhcmFtZXRlciBpcyBwYXNzZWQgYWxsIHNjaGVtYXMgYnV0IG1ldGEtc2NoZW1hcyBhcmUgcmVtb3ZlZC5cbiAgICAvLyBJZiBSZWdFeHAgaXMgcGFzc2VkIGFsbCBzY2hlbWFzIHdpdGgga2V5L2lkIG1hdGNoaW5nIHBhdHRlcm4gYnV0IG1ldGEtc2NoZW1hcyBhcmUgcmVtb3ZlZC5cbiAgICAvLyBFdmVuIGlmIHNjaGVtYSBpcyByZWZlcmVuY2VkIGJ5IG90aGVyIHNjaGVtYXMgaXQgc3RpbGwgY2FuIGJlIHJlbW92ZWQgYXMgb3RoZXIgc2NoZW1hcyBoYXZlIGxvY2FsIHJlZmVyZW5jZXMuXG4gICAgcmVtb3ZlU2NoZW1hKHNjaGVtYUtleVJlZikge1xuICAgICAgICBpZiAoc2NoZW1hS2V5UmVmIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICAgICAgICB0aGlzLl9yZW1vdmVBbGxTY2hlbWFzKHRoaXMuc2NoZW1hcywgc2NoZW1hS2V5UmVmKTtcbiAgICAgICAgICAgIHRoaXMuX3JlbW92ZUFsbFNjaGVtYXModGhpcy5yZWZzLCBzY2hlbWFLZXlSZWYpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoICh0eXBlb2Ygc2NoZW1hS2V5UmVmKSB7XG4gICAgICAgICAgICBjYXNlIFwidW5kZWZpbmVkXCI6XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVtb3ZlQWxsU2NoZW1hcyh0aGlzLnNjaGVtYXMpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3JlbW92ZUFsbFNjaGVtYXModGhpcy5yZWZzKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9jYWNoZS5jbGVhcigpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgY2FzZSBcInN0cmluZ1wiOiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2NoID0gZ2V0U2NoRW52LmNhbGwodGhpcywgc2NoZW1hS2V5UmVmKTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHNjaCA9PSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jYWNoZS5kZWxldGUoc2NoLnNjaGVtYSk7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuc2NoZW1hc1tzY2hlbWFLZXlSZWZdO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnJlZnNbc2NoZW1hS2V5UmVmXTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJvYmplY3RcIjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNhY2hlS2V5ID0gc2NoZW1hS2V5UmVmO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NhY2hlLmRlbGV0ZShjYWNoZUtleSk7XG4gICAgICAgICAgICAgICAgbGV0IGlkID0gc2NoZW1hS2V5UmVmW3RoaXMub3B0cy5zY2hlbWFJZF07XG4gICAgICAgICAgICAgICAgaWYgKGlkKSB7XG4gICAgICAgICAgICAgICAgICAgIGlkID0gKDAsIHJlc29sdmVfMS5ub3JtYWxpemVJZCkoaWQpO1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5zY2hlbWFzW2lkXTtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMucmVmc1tpZF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJhanYucmVtb3ZlU2NoZW1hOiBpbnZhbGlkIHBhcmFtZXRlclwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBhZGQgXCJ2b2NhYnVsYXJ5XCIgLSBhIGNvbGxlY3Rpb24gb2Yga2V5d29yZHNcbiAgICBhZGRWb2NhYnVsYXJ5KGRlZmluaXRpb25zKSB7XG4gICAgICAgIGZvciAoY29uc3QgZGVmIG9mIGRlZmluaXRpb25zKVxuICAgICAgICAgICAgdGhpcy5hZGRLZXl3b3JkKGRlZik7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBhZGRLZXl3b3JkKGt3ZE9yRGVmLCBkZWYgLy8gZGVwcmVjYXRlZFxuICAgICkge1xuICAgICAgICBsZXQga2V5d29yZDtcbiAgICAgICAgaWYgKHR5cGVvZiBrd2RPckRlZiA9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICBrZXl3b3JkID0ga3dkT3JEZWY7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGRlZiA9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIud2FybihcInRoZXNlIHBhcmFtZXRlcnMgYXJlIGRlcHJlY2F0ZWQsIHNlZSBkb2NzIGZvciBhZGRLZXl3b3JkXCIpO1xuICAgICAgICAgICAgICAgIGRlZi5rZXl3b3JkID0ga2V5d29yZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlb2Yga3dkT3JEZWYgPT0gXCJvYmplY3RcIiAmJiBkZWYgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZGVmID0ga3dkT3JEZWY7XG4gICAgICAgICAgICBrZXl3b3JkID0gZGVmLmtleXdvcmQ7XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShrZXl3b3JkKSAmJiAha2V5d29yZC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJhZGRLZXl3b3Jkczoga2V5d29yZCBtdXN0IGJlIHN0cmluZyBvciBub24tZW1wdHkgYXJyYXlcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIGFkZEtleXdvcmRzIHBhcmFtZXRlcnNcIik7XG4gICAgICAgIH1cbiAgICAgICAgY2hlY2tLZXl3b3JkLmNhbGwodGhpcywga2V5d29yZCwgZGVmKTtcbiAgICAgICAgaWYgKCFkZWYpIHtcbiAgICAgICAgICAgICgwLCB1dGlsXzEuZWFjaEl0ZW0pKGtleXdvcmQsIChrd2QpID0+IGFkZFJ1bGUuY2FsbCh0aGlzLCBrd2QpKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIGtleXdvcmRNZXRhc2NoZW1hLmNhbGwodGhpcywgZGVmKTtcbiAgICAgICAgY29uc3QgZGVmaW5pdGlvbiA9IHtcbiAgICAgICAgICAgIC4uLmRlZixcbiAgICAgICAgICAgIHR5cGU6ICgwLCBkYXRhVHlwZV8xLmdldEpTT05UeXBlcykoZGVmLnR5cGUpLFxuICAgICAgICAgICAgc2NoZW1hVHlwZTogKDAsIGRhdGFUeXBlXzEuZ2V0SlNPTlR5cGVzKShkZWYuc2NoZW1hVHlwZSksXG4gICAgICAgIH07XG4gICAgICAgICgwLCB1dGlsXzEuZWFjaEl0ZW0pKGtleXdvcmQsIGRlZmluaXRpb24udHlwZS5sZW5ndGggPT09IDBcbiAgICAgICAgICAgID8gKGspID0+IGFkZFJ1bGUuY2FsbCh0aGlzLCBrLCBkZWZpbml0aW9uKVxuICAgICAgICAgICAgOiAoaykgPT4gZGVmaW5pdGlvbi50eXBlLmZvckVhY2goKHQpID0+IGFkZFJ1bGUuY2FsbCh0aGlzLCBrLCBkZWZpbml0aW9uLCB0KSkpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgZ2V0S2V5d29yZChrZXl3b3JkKSB7XG4gICAgICAgIGNvbnN0IHJ1bGUgPSB0aGlzLlJVTEVTLmFsbFtrZXl3b3JkXTtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBydWxlID09IFwib2JqZWN0XCIgPyBydWxlLmRlZmluaXRpb24gOiAhIXJ1bGU7XG4gICAgfVxuICAgIC8vIFJlbW92ZSBrZXl3b3JkXG4gICAgcmVtb3ZlS2V5d29yZChrZXl3b3JkKSB7XG4gICAgICAgIC8vIFRPRE8gcmV0dXJuIHR5cGUgc2hvdWxkIGJlIEFqdlxuICAgICAgICBjb25zdCB7IFJVTEVTIH0gPSB0aGlzO1xuICAgICAgICBkZWxldGUgUlVMRVMua2V5d29yZHNba2V5d29yZF07XG4gICAgICAgIGRlbGV0ZSBSVUxFUy5hbGxba2V5d29yZF07XG4gICAgICAgIGZvciAoY29uc3QgZ3JvdXAgb2YgUlVMRVMucnVsZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGkgPSBncm91cC5ydWxlcy5maW5kSW5kZXgoKHJ1bGUpID0+IHJ1bGUua2V5d29yZCA9PT0ga2V5d29yZCk7XG4gICAgICAgICAgICBpZiAoaSA+PSAwKVxuICAgICAgICAgICAgICAgIGdyb3VwLnJ1bGVzLnNwbGljZShpLCAxKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLy8gQWRkIGZvcm1hdFxuICAgIGFkZEZvcm1hdChuYW1lLCBmb3JtYXQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBmb3JtYXQgPT0gXCJzdHJpbmdcIilcbiAgICAgICAgICAgIGZvcm1hdCA9IG5ldyBSZWdFeHAoZm9ybWF0KTtcbiAgICAgICAgdGhpcy5mb3JtYXRzW25hbWVdID0gZm9ybWF0O1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgZXJyb3JzVGV4dChlcnJvcnMgPSB0aGlzLmVycm9ycywgLy8gb3B0aW9uYWwgYXJyYXkgb2YgdmFsaWRhdGlvbiBlcnJvcnNcbiAgICB7IHNlcGFyYXRvciA9IFwiLCBcIiwgZGF0YVZhciA9IFwiZGF0YVwiIH0gPSB7fSAvLyBvcHRpb25hbCBvcHRpb25zIHdpdGggcHJvcGVydGllcyBgc2VwYXJhdG9yYCBhbmQgYGRhdGFWYXJgXG4gICAgKSB7XG4gICAgICAgIGlmICghZXJyb3JzIHx8IGVycm9ycy5sZW5ndGggPT09IDApXG4gICAgICAgICAgICByZXR1cm4gXCJObyBlcnJvcnNcIjtcbiAgICAgICAgcmV0dXJuIGVycm9yc1xuICAgICAgICAgICAgLm1hcCgoZSkgPT4gYCR7ZGF0YVZhcn0ke2UuaW5zdGFuY2VQYXRofSAke2UubWVzc2FnZX1gKVxuICAgICAgICAgICAgLnJlZHVjZSgodGV4dCwgbXNnKSA9PiB0ZXh0ICsgc2VwYXJhdG9yICsgbXNnKTtcbiAgICB9XG4gICAgJGRhdGFNZXRhU2NoZW1hKG1ldGFTY2hlbWEsIGtleXdvcmRzSnNvblBvaW50ZXJzKSB7XG4gICAgICAgIGNvbnN0IHJ1bGVzID0gdGhpcy5SVUxFUy5hbGw7XG4gICAgICAgIG1ldGFTY2hlbWEgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG1ldGFTY2hlbWEpKTtcbiAgICAgICAgZm9yIChjb25zdCBqc29uUG9pbnRlciBvZiBrZXl3b3Jkc0pzb25Qb2ludGVycykge1xuICAgICAgICAgICAgY29uc3Qgc2VnbWVudHMgPSBqc29uUG9pbnRlci5zcGxpdChcIi9cIikuc2xpY2UoMSk7IC8vIGZpcnN0IHNlZ21lbnQgaXMgYW4gZW1wdHkgc3RyaW5nXG4gICAgICAgICAgICBsZXQga2V5d29yZHMgPSBtZXRhU2NoZW1hO1xuICAgICAgICAgICAgZm9yIChjb25zdCBzZWcgb2Ygc2VnbWVudHMpXG4gICAgICAgICAgICAgICAga2V5d29yZHMgPSBrZXl3b3Jkc1tzZWddO1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gcnVsZXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBydWxlID0gcnVsZXNba2V5XTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHJ1bGUgIT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgY29uc3QgeyAkZGF0YSB9ID0gcnVsZS5kZWZpbml0aW9uO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNjaGVtYSA9IGtleXdvcmRzW2tleV07XG4gICAgICAgICAgICAgICAgaWYgKCRkYXRhICYmIHNjaGVtYSlcbiAgICAgICAgICAgICAgICAgICAga2V5d29yZHNba2V5XSA9IHNjaGVtYU9yRGF0YShzY2hlbWEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtZXRhU2NoZW1hO1xuICAgIH1cbiAgICBfcmVtb3ZlQWxsU2NoZW1hcyhzY2hlbWFzLCByZWdleCkge1xuICAgICAgICBmb3IgKGNvbnN0IGtleVJlZiBpbiBzY2hlbWFzKSB7XG4gICAgICAgICAgICBjb25zdCBzY2ggPSBzY2hlbWFzW2tleVJlZl07XG4gICAgICAgICAgICBpZiAoIXJlZ2V4IHx8IHJlZ2V4LnRlc3Qoa2V5UmVmKSkge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygc2NoID09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHNjaGVtYXNba2V5UmVmXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoc2NoICYmICFzY2gubWV0YSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jYWNoZS5kZWxldGUoc2NoLnNjaGVtYSk7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBzY2hlbWFzW2tleVJlZl07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIF9hZGRTY2hlbWEoc2NoZW1hLCBtZXRhLCBiYXNlSWQsIHZhbGlkYXRlU2NoZW1hID0gdGhpcy5vcHRzLnZhbGlkYXRlU2NoZW1hLCBhZGRTY2hlbWEgPSB0aGlzLm9wdHMuYWRkVXNlZFNjaGVtYSkge1xuICAgICAgICBsZXQgaWQ7XG4gICAgICAgIGNvbnN0IHsgc2NoZW1hSWQgfSA9IHRoaXMub3B0cztcbiAgICAgICAgaWYgKHR5cGVvZiBzY2hlbWEgPT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgaWQgPSBzY2hlbWFbc2NoZW1hSWRdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMub3B0cy5qdGQpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwic2NoZW1hIG11c3QgYmUgb2JqZWN0XCIpO1xuICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIHNjaGVtYSAhPSBcImJvb2xlYW5cIilcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJzY2hlbWEgbXVzdCBiZSBvYmplY3Qgb3IgYm9vbGVhblwiKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgc2NoID0gdGhpcy5fY2FjaGUuZ2V0KHNjaGVtYSk7XG4gICAgICAgIGlmIChzY2ggIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHJldHVybiBzY2g7XG4gICAgICAgIGJhc2VJZCA9ICgwLCByZXNvbHZlXzEubm9ybWFsaXplSWQpKGlkIHx8IGJhc2VJZCk7XG4gICAgICAgIGNvbnN0IGxvY2FsUmVmcyA9IHJlc29sdmVfMS5nZXRTY2hlbWFSZWZzLmNhbGwodGhpcywgc2NoZW1hLCBiYXNlSWQpO1xuICAgICAgICBzY2ggPSBuZXcgY29tcGlsZV8xLlNjaGVtYUVudih7IHNjaGVtYSwgc2NoZW1hSWQsIG1ldGEsIGJhc2VJZCwgbG9jYWxSZWZzIH0pO1xuICAgICAgICB0aGlzLl9jYWNoZS5zZXQoc2NoLnNjaGVtYSwgc2NoKTtcbiAgICAgICAgaWYgKGFkZFNjaGVtYSAmJiAhYmFzZUlkLnN0YXJ0c1dpdGgoXCIjXCIpKSB7XG4gICAgICAgICAgICAvLyBUT0RPIGF0bSBpdCBpcyBhbGxvd2VkIHRvIG92ZXJ3cml0ZSBzY2hlbWFzIHdpdGhvdXQgaWQgKGluc3RlYWQgb2Ygbm90IGFkZGluZyB0aGVtKVxuICAgICAgICAgICAgaWYgKGJhc2VJZClcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGVja1VuaXF1ZShiYXNlSWQpO1xuICAgICAgICAgICAgdGhpcy5yZWZzW2Jhc2VJZF0gPSBzY2g7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbGlkYXRlU2NoZW1hKVxuICAgICAgICAgICAgdGhpcy52YWxpZGF0ZVNjaGVtYShzY2hlbWEsIHRydWUpO1xuICAgICAgICByZXR1cm4gc2NoO1xuICAgIH1cbiAgICBfY2hlY2tVbmlxdWUoaWQpIHtcbiAgICAgICAgaWYgKHRoaXMuc2NoZW1hc1tpZF0gfHwgdGhpcy5yZWZzW2lkXSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBzY2hlbWEgd2l0aCBrZXkgb3IgaWQgXCIke2lkfVwiIGFscmVhZHkgZXhpc3RzYCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgX2NvbXBpbGVTY2hlbWFFbnYoc2NoKSB7XG4gICAgICAgIGlmIChzY2gubWV0YSlcbiAgICAgICAgICAgIHRoaXMuX2NvbXBpbGVNZXRhU2NoZW1hKHNjaCk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIGNvbXBpbGVfMS5jb21waWxlU2NoZW1hLmNhbGwodGhpcywgc2NoKTtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgIGlmICghc2NoLnZhbGlkYXRlKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYWp2IGltcGxlbWVudGF0aW9uIGVycm9yXCIpO1xuICAgICAgICByZXR1cm4gc2NoLnZhbGlkYXRlO1xuICAgIH1cbiAgICBfY29tcGlsZU1ldGFTY2hlbWEoc2NoKSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRPcHRzID0gdGhpcy5vcHRzO1xuICAgICAgICB0aGlzLm9wdHMgPSB0aGlzLl9tZXRhT3B0cztcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbXBpbGVfMS5jb21waWxlU2NoZW1hLmNhbGwodGhpcywgc2NoKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRoaXMub3B0cyA9IGN1cnJlbnRPcHRzO1xuICAgICAgICB9XG4gICAgfVxufVxuQWp2LlZhbGlkYXRpb25FcnJvciA9IHZhbGlkYXRpb25fZXJyb3JfMS5kZWZhdWx0O1xuQWp2Lk1pc3NpbmdSZWZFcnJvciA9IHJlZl9lcnJvcl8xLmRlZmF1bHQ7XG5leHBvcnRzLmRlZmF1bHQgPSBBanY7XG5mdW5jdGlvbiBjaGVja09wdGlvbnMoY2hlY2tPcHRzLCBvcHRpb25zLCBtc2csIGxvZyA9IFwiZXJyb3JcIikge1xuICAgIGZvciAoY29uc3Qga2V5IGluIGNoZWNrT3B0cykge1xuICAgICAgICBjb25zdCBvcHQgPSBrZXk7XG4gICAgICAgIGlmIChvcHQgaW4gb3B0aW9ucylcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyW2xvZ10oYCR7bXNnfTogb3B0aW9uICR7a2V5fS4gJHtjaGVja09wdHNbb3B0XX1gKTtcbiAgICB9XG59XG5mdW5jdGlvbiBnZXRTY2hFbnYoa2V5UmVmKSB7XG4gICAga2V5UmVmID0gKDAsIHJlc29sdmVfMS5ub3JtYWxpemVJZCkoa2V5UmVmKTsgLy8gVE9ETyB0ZXN0cyBmYWlsIHdpdGhvdXQgdGhpcyBsaW5lXG4gICAgcmV0dXJuIHRoaXMuc2NoZW1hc1trZXlSZWZdIHx8IHRoaXMucmVmc1trZXlSZWZdO1xufVxuZnVuY3Rpb24gYWRkSW5pdGlhbFNjaGVtYXMoKSB7XG4gICAgY29uc3Qgb3B0c1NjaGVtYXMgPSB0aGlzLm9wdHMuc2NoZW1hcztcbiAgICBpZiAoIW9wdHNTY2hlbWFzKVxuICAgICAgICByZXR1cm47XG4gICAgaWYgKEFycmF5LmlzQXJyYXkob3B0c1NjaGVtYXMpKVxuICAgICAgICB0aGlzLmFkZFNjaGVtYShvcHRzU2NoZW1hcyk7XG4gICAgZWxzZVxuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBvcHRzU2NoZW1hcylcbiAgICAgICAgICAgIHRoaXMuYWRkU2NoZW1hKG9wdHNTY2hlbWFzW2tleV0sIGtleSk7XG59XG5mdW5jdGlvbiBhZGRJbml0aWFsRm9ybWF0cygpIHtcbiAgICBmb3IgKGNvbnN0IG5hbWUgaW4gdGhpcy5vcHRzLmZvcm1hdHMpIHtcbiAgICAgICAgY29uc3QgZm9ybWF0ID0gdGhpcy5vcHRzLmZvcm1hdHNbbmFtZV07XG4gICAgICAgIGlmIChmb3JtYXQpXG4gICAgICAgICAgICB0aGlzLmFkZEZvcm1hdChuYW1lLCBmb3JtYXQpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGFkZEluaXRpYWxLZXl3b3JkcyhkZWZzKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZGVmcykpIHtcbiAgICAgICAgdGhpcy5hZGRWb2NhYnVsYXJ5KGRlZnMpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMubG9nZ2VyLndhcm4oXCJrZXl3b3JkcyBvcHRpb24gYXMgbWFwIGlzIGRlcHJlY2F0ZWQsIHBhc3MgYXJyYXlcIik7XG4gICAgZm9yIChjb25zdCBrZXl3b3JkIGluIGRlZnMpIHtcbiAgICAgICAgY29uc3QgZGVmID0gZGVmc1trZXl3b3JkXTtcbiAgICAgICAgaWYgKCFkZWYua2V5d29yZClcbiAgICAgICAgICAgIGRlZi5rZXl3b3JkID0ga2V5d29yZDtcbiAgICAgICAgdGhpcy5hZGRLZXl3b3JkKGRlZik7XG4gICAgfVxufVxuZnVuY3Rpb24gZ2V0TWV0YVNjaGVtYU9wdGlvbnMoKSB7XG4gICAgY29uc3QgbWV0YU9wdHMgPSB7IC4uLnRoaXMub3B0cyB9O1xuICAgIGZvciAoY29uc3Qgb3B0IG9mIE1FVEFfSUdOT1JFX09QVElPTlMpXG4gICAgICAgIGRlbGV0ZSBtZXRhT3B0c1tvcHRdO1xuICAgIHJldHVybiBtZXRhT3B0cztcbn1cbmNvbnN0IG5vTG9ncyA9IHsgbG9nKCkgeyB9LCB3YXJuKCkgeyB9LCBlcnJvcigpIHsgfSB9O1xuZnVuY3Rpb24gZ2V0TG9nZ2VyKGxvZ2dlcikge1xuICAgIGlmIChsb2dnZXIgPT09IGZhbHNlKVxuICAgICAgICByZXR1cm4gbm9Mb2dzO1xuICAgIGlmIChsb2dnZXIgPT09IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuIGNvbnNvbGU7XG4gICAgaWYgKGxvZ2dlci5sb2cgJiYgbG9nZ2VyLndhcm4gJiYgbG9nZ2VyLmVycm9yKVxuICAgICAgICByZXR1cm4gbG9nZ2VyO1xuICAgIHRocm93IG5ldyBFcnJvcihcImxvZ2dlciBtdXN0IGltcGxlbWVudCBsb2csIHdhcm4gYW5kIGVycm9yIG1ldGhvZHNcIik7XG59XG5jb25zdCBLRVlXT1JEX05BTUUgPSAvXlthLXpfJF1bYS16MC05XyQ6LV0qJC9pO1xuZnVuY3Rpb24gY2hlY2tLZXl3b3JkKGtleXdvcmQsIGRlZikge1xuICAgIGNvbnN0IHsgUlVMRVMgfSA9IHRoaXM7XG4gICAgKDAsIHV0aWxfMS5lYWNoSXRlbSkoa2V5d29yZCwgKGt3ZCkgPT4ge1xuICAgICAgICBpZiAoUlVMRVMua2V5d29yZHNba3dkXSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgS2V5d29yZCAke2t3ZH0gaXMgYWxyZWFkeSBkZWZpbmVkYCk7XG4gICAgICAgIGlmICghS0VZV09SRF9OQU1FLnRlc3Qoa3dkKSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgS2V5d29yZCAke2t3ZH0gaGFzIGludmFsaWQgbmFtZWApO1xuICAgIH0pO1xuICAgIGlmICghZGVmKVxuICAgICAgICByZXR1cm47XG4gICAgaWYgKGRlZi4kZGF0YSAmJiAhKFwiY29kZVwiIGluIGRlZiB8fCBcInZhbGlkYXRlXCIgaW4gZGVmKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJyRkYXRhIGtleXdvcmQgbXVzdCBoYXZlIFwiY29kZVwiIG9yIFwidmFsaWRhdGVcIiBmdW5jdGlvbicpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGFkZFJ1bGUoa2V5d29yZCwgZGVmaW5pdGlvbiwgZGF0YVR5cGUpIHtcbiAgICB2YXIgX2E7XG4gICAgY29uc3QgcG9zdCA9IGRlZmluaXRpb24gPT09IG51bGwgfHwgZGVmaW5pdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogZGVmaW5pdGlvbi5wb3N0O1xuICAgIGlmIChkYXRhVHlwZSAmJiBwb3N0KVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2tleXdvcmQgd2l0aCBcInBvc3RcIiBmbGFnIGNhbm5vdCBoYXZlIFwidHlwZVwiJyk7XG4gICAgY29uc3QgeyBSVUxFUyB9ID0gdGhpcztcbiAgICBsZXQgcnVsZUdyb3VwID0gcG9zdCA/IFJVTEVTLnBvc3QgOiBSVUxFUy5ydWxlcy5maW5kKCh7IHR5cGU6IHQgfSkgPT4gdCA9PT0gZGF0YVR5cGUpO1xuICAgIGlmICghcnVsZUdyb3VwKSB7XG4gICAgICAgIHJ1bGVHcm91cCA9IHsgdHlwZTogZGF0YVR5cGUsIHJ1bGVzOiBbXSB9O1xuICAgICAgICBSVUxFUy5ydWxlcy5wdXNoKHJ1bGVHcm91cCk7XG4gICAgfVxuICAgIFJVTEVTLmtleXdvcmRzW2tleXdvcmRdID0gdHJ1ZTtcbiAgICBpZiAoIWRlZmluaXRpb24pXG4gICAgICAgIHJldHVybjtcbiAgICBjb25zdCBydWxlID0ge1xuICAgICAgICBrZXl3b3JkLFxuICAgICAgICBkZWZpbml0aW9uOiB7XG4gICAgICAgICAgICAuLi5kZWZpbml0aW9uLFxuICAgICAgICAgICAgdHlwZTogKDAsIGRhdGFUeXBlXzEuZ2V0SlNPTlR5cGVzKShkZWZpbml0aW9uLnR5cGUpLFxuICAgICAgICAgICAgc2NoZW1hVHlwZTogKDAsIGRhdGFUeXBlXzEuZ2V0SlNPTlR5cGVzKShkZWZpbml0aW9uLnNjaGVtYVR5cGUpLFxuICAgICAgICB9LFxuICAgIH07XG4gICAgaWYgKGRlZmluaXRpb24uYmVmb3JlKVxuICAgICAgICBhZGRCZWZvcmVSdWxlLmNhbGwodGhpcywgcnVsZUdyb3VwLCBydWxlLCBkZWZpbml0aW9uLmJlZm9yZSk7XG4gICAgZWxzZVxuICAgICAgICBydWxlR3JvdXAucnVsZXMucHVzaChydWxlKTtcbiAgICBSVUxFUy5hbGxba2V5d29yZF0gPSBydWxlO1xuICAgIChfYSA9IGRlZmluaXRpb24uaW1wbGVtZW50cykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmZvckVhY2goKGt3ZCkgPT4gdGhpcy5hZGRLZXl3b3JkKGt3ZCkpO1xufVxuZnVuY3Rpb24gYWRkQmVmb3JlUnVsZShydWxlR3JvdXAsIHJ1bGUsIGJlZm9yZSkge1xuICAgIGNvbnN0IGkgPSBydWxlR3JvdXAucnVsZXMuZmluZEluZGV4KChfcnVsZSkgPT4gX3J1bGUua2V5d29yZCA9PT0gYmVmb3JlKTtcbiAgICBpZiAoaSA+PSAwKSB7XG4gICAgICAgIHJ1bGVHcm91cC5ydWxlcy5zcGxpY2UoaSwgMCwgcnVsZSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBydWxlR3JvdXAucnVsZXMucHVzaChydWxlKTtcbiAgICAgICAgdGhpcy5sb2dnZXIud2FybihgcnVsZSAke2JlZm9yZX0gaXMgbm90IGRlZmluZWRgKTtcbiAgICB9XG59XG5mdW5jdGlvbiBrZXl3b3JkTWV0YXNjaGVtYShkZWYpIHtcbiAgICBsZXQgeyBtZXRhU2NoZW1hIH0gPSBkZWY7XG4gICAgaWYgKG1ldGFTY2hlbWEgPT09IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuO1xuICAgIGlmIChkZWYuJGRhdGEgJiYgdGhpcy5vcHRzLiRkYXRhKVxuICAgICAgICBtZXRhU2NoZW1hID0gc2NoZW1hT3JEYXRhKG1ldGFTY2hlbWEpO1xuICAgIGRlZi52YWxpZGF0ZVNjaGVtYSA9IHRoaXMuY29tcGlsZShtZXRhU2NoZW1hLCB0cnVlKTtcbn1cbmNvbnN0ICRkYXRhUmVmID0ge1xuICAgICRyZWY6IFwiaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2Fqdi12YWxpZGF0b3IvYWp2L21hc3Rlci9saWIvcmVmcy9kYXRhLmpzb24jXCIsXG59O1xuZnVuY3Rpb24gc2NoZW1hT3JEYXRhKHNjaGVtYSkge1xuICAgIHJldHVybiB7IGFueU9mOiBbc2NoZW1hLCAkZGF0YVJlZl0gfTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvcmUuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcImlkXCIsXG4gICAgY29kZSgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdOT1QgU1VQUE9SVEVEOiBrZXl3b3JkIFwiaWRcIiwgdXNlIFwiJGlkXCIgZm9yIHNjaGVtYSBJRCcpO1xuICAgIH0sXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aWQuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY2FsbFJlZiA9IGV4cG9ydHMuZ2V0VmFsaWRhdGUgPSB2b2lkIDA7XG5jb25zdCByZWZfZXJyb3JfMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL3JlZl9lcnJvclwiKTtcbmNvbnN0IGNvZGVfMSA9IHJlcXVpcmUoXCIuLi9jb2RlXCIpO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvY29kZWdlblwiKTtcbmNvbnN0IG5hbWVzXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS9uYW1lc1wiKTtcbmNvbnN0IGNvbXBpbGVfMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvdXRpbFwiKTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcIiRyZWZcIixcbiAgICBzY2hlbWFUeXBlOiBcInN0cmluZ1wiLFxuICAgIGNvZGUoY3h0KSB7XG4gICAgICAgIGNvbnN0IHsgZ2VuLCBzY2hlbWE6ICRyZWYsIGl0IH0gPSBjeHQ7XG4gICAgICAgIGNvbnN0IHsgYmFzZUlkLCBzY2hlbWFFbnY6IGVudiwgdmFsaWRhdGVOYW1lLCBvcHRzLCBzZWxmIH0gPSBpdDtcbiAgICAgICAgY29uc3QgeyByb290IH0gPSBlbnY7XG4gICAgICAgIGlmICgoJHJlZiA9PT0gXCIjXCIgfHwgJHJlZiA9PT0gXCIjL1wiKSAmJiBiYXNlSWQgPT09IHJvb3QuYmFzZUlkKVxuICAgICAgICAgICAgcmV0dXJuIGNhbGxSb290UmVmKCk7XG4gICAgICAgIGNvbnN0IHNjaE9yRW52ID0gY29tcGlsZV8xLnJlc29sdmVSZWYuY2FsbChzZWxmLCByb290LCBiYXNlSWQsICRyZWYpO1xuICAgICAgICBpZiAoc2NoT3JFbnYgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHRocm93IG5ldyByZWZfZXJyb3JfMS5kZWZhdWx0KGl0Lm9wdHMudXJpUmVzb2x2ZXIsIGJhc2VJZCwgJHJlZik7XG4gICAgICAgIGlmIChzY2hPckVudiBpbnN0YW5jZW9mIGNvbXBpbGVfMS5TY2hlbWFFbnYpXG4gICAgICAgICAgICByZXR1cm4gY2FsbFZhbGlkYXRlKHNjaE9yRW52KTtcbiAgICAgICAgcmV0dXJuIGlubGluZVJlZlNjaGVtYShzY2hPckVudik7XG4gICAgICAgIGZ1bmN0aW9uIGNhbGxSb290UmVmKCkge1xuICAgICAgICAgICAgaWYgKGVudiA9PT0gcm9vdClcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbFJlZihjeHQsIHZhbGlkYXRlTmFtZSwgZW52LCBlbnYuJGFzeW5jKTtcbiAgICAgICAgICAgIGNvbnN0IHJvb3ROYW1lID0gZ2VuLnNjb3BlVmFsdWUoXCJyb290XCIsIHsgcmVmOiByb290IH0pO1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxSZWYoY3h0LCAoMCwgY29kZWdlbl8xLl8pIGAke3Jvb3ROYW1lfS52YWxpZGF0ZWAsIHJvb3QsIHJvb3QuJGFzeW5jKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBjYWxsVmFsaWRhdGUoc2NoKSB7XG4gICAgICAgICAgICBjb25zdCB2ID0gZ2V0VmFsaWRhdGUoY3h0LCBzY2gpO1xuICAgICAgICAgICAgY2FsbFJlZihjeHQsIHYsIHNjaCwgc2NoLiRhc3luYyk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gaW5saW5lUmVmU2NoZW1hKHNjaCkge1xuICAgICAgICAgICAgY29uc3Qgc2NoTmFtZSA9IGdlbi5zY29wZVZhbHVlKFwic2NoZW1hXCIsIG9wdHMuY29kZS5zb3VyY2UgPT09IHRydWUgPyB7IHJlZjogc2NoLCBjb2RlOiAoMCwgY29kZWdlbl8xLnN0cmluZ2lmeSkoc2NoKSB9IDogeyByZWY6IHNjaCB9KTtcbiAgICAgICAgICAgIGNvbnN0IHZhbGlkID0gZ2VuLm5hbWUoXCJ2YWxpZFwiKTtcbiAgICAgICAgICAgIGNvbnN0IHNjaEN4dCA9IGN4dC5zdWJzY2hlbWEoe1xuICAgICAgICAgICAgICAgIHNjaGVtYTogc2NoLFxuICAgICAgICAgICAgICAgIGRhdGFUeXBlczogW10sXG4gICAgICAgICAgICAgICAgc2NoZW1hUGF0aDogY29kZWdlbl8xLm5pbCxcbiAgICAgICAgICAgICAgICB0b3BTY2hlbWFSZWY6IHNjaE5hbWUsXG4gICAgICAgICAgICAgICAgZXJyU2NoZW1hUGF0aDogJHJlZixcbiAgICAgICAgICAgIH0sIHZhbGlkKTtcbiAgICAgICAgICAgIGN4dC5tZXJnZUV2YWx1YXRlZChzY2hDeHQpO1xuICAgICAgICAgICAgY3h0Lm9rKHZhbGlkKTtcbiAgICAgICAgfVxuICAgIH0sXG59O1xuZnVuY3Rpb24gZ2V0VmFsaWRhdGUoY3h0LCBzY2gpIHtcbiAgICBjb25zdCB7IGdlbiB9ID0gY3h0O1xuICAgIHJldHVybiBzY2gudmFsaWRhdGVcbiAgICAgICAgPyBnZW4uc2NvcGVWYWx1ZShcInZhbGlkYXRlXCIsIHsgcmVmOiBzY2gudmFsaWRhdGUgfSlcbiAgICAgICAgOiAoMCwgY29kZWdlbl8xLl8pIGAke2dlbi5zY29wZVZhbHVlKFwid3JhcHBlclwiLCB7IHJlZjogc2NoIH0pfS52YWxpZGF0ZWA7XG59XG5leHBvcnRzLmdldFZhbGlkYXRlID0gZ2V0VmFsaWRhdGU7XG5mdW5jdGlvbiBjYWxsUmVmKGN4dCwgdiwgc2NoLCAkYXN5bmMpIHtcbiAgICBjb25zdCB7IGdlbiwgaXQgfSA9IGN4dDtcbiAgICBjb25zdCB7IGFsbEVycm9ycywgc2NoZW1hRW52OiBlbnYsIG9wdHMgfSA9IGl0O1xuICAgIGNvbnN0IHBhc3NDeHQgPSBvcHRzLnBhc3NDb250ZXh0ID8gbmFtZXNfMS5kZWZhdWx0LnRoaXMgOiBjb2RlZ2VuXzEubmlsO1xuICAgIGlmICgkYXN5bmMpXG4gICAgICAgIGNhbGxBc3luY1JlZigpO1xuICAgIGVsc2VcbiAgICAgICAgY2FsbFN5bmNSZWYoKTtcbiAgICBmdW5jdGlvbiBjYWxsQXN5bmNSZWYoKSB7XG4gICAgICAgIGlmICghZW52LiRhc3luYylcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImFzeW5jIHNjaGVtYSByZWZlcmVuY2VkIGJ5IHN5bmMgc2NoZW1hXCIpO1xuICAgICAgICBjb25zdCB2YWxpZCA9IGdlbi5sZXQoXCJ2YWxpZFwiKTtcbiAgICAgICAgZ2VuLnRyeSgoKSA9PiB7XG4gICAgICAgICAgICBnZW4uY29kZSgoMCwgY29kZWdlbl8xLl8pIGBhd2FpdCAkeygwLCBjb2RlXzEuY2FsbFZhbGlkYXRlQ29kZSkoY3h0LCB2LCBwYXNzQ3h0KX1gKTtcbiAgICAgICAgICAgIGFkZEV2YWx1YXRlZEZyb20odik7IC8vIFRPRE8gd2lsbCBub3Qgd29yayB3aXRoIGFzeW5jLCBpdCBoYXMgdG8gYmUgcmV0dXJuZWQgd2l0aCB0aGUgcmVzdWx0XG4gICAgICAgICAgICBpZiAoIWFsbEVycm9ycylcbiAgICAgICAgICAgICAgICBnZW4uYXNzaWduKHZhbGlkLCB0cnVlKTtcbiAgICAgICAgfSwgKGUpID0+IHtcbiAgICAgICAgICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGAhKCR7ZX0gaW5zdGFuY2VvZiAke2l0LlZhbGlkYXRpb25FcnJvcn0pYCwgKCkgPT4gZ2VuLnRocm93KGUpKTtcbiAgICAgICAgICAgIGFkZEVycm9yc0Zyb20oZSk7XG4gICAgICAgICAgICBpZiAoIWFsbEVycm9ycylcbiAgICAgICAgICAgICAgICBnZW4uYXNzaWduKHZhbGlkLCBmYWxzZSk7XG4gICAgICAgIH0pO1xuICAgICAgICBjeHQub2sodmFsaWQpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjYWxsU3luY1JlZigpIHtcbiAgICAgICAgY3h0LnJlc3VsdCgoMCwgY29kZV8xLmNhbGxWYWxpZGF0ZUNvZGUpKGN4dCwgdiwgcGFzc0N4dCksICgpID0+IGFkZEV2YWx1YXRlZEZyb20odiksICgpID0+IGFkZEVycm9yc0Zyb20odikpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBhZGRFcnJvcnNGcm9tKHNvdXJjZSkge1xuICAgICAgICBjb25zdCBlcnJzID0gKDAsIGNvZGVnZW5fMS5fKSBgJHtzb3VyY2V9LmVycm9yc2A7XG4gICAgICAgIGdlbi5hc3NpZ24obmFtZXNfMS5kZWZhdWx0LnZFcnJvcnMsICgwLCBjb2RlZ2VuXzEuXykgYCR7bmFtZXNfMS5kZWZhdWx0LnZFcnJvcnN9ID09PSBudWxsID8gJHtlcnJzfSA6ICR7bmFtZXNfMS5kZWZhdWx0LnZFcnJvcnN9LmNvbmNhdCgke2VycnN9KWApOyAvLyBUT0RPIHRhZ2dlZFxuICAgICAgICBnZW4uYXNzaWduKG5hbWVzXzEuZGVmYXVsdC5lcnJvcnMsICgwLCBjb2RlZ2VuXzEuXykgYCR7bmFtZXNfMS5kZWZhdWx0LnZFcnJvcnN9Lmxlbmd0aGApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBhZGRFdmFsdWF0ZWRGcm9tKHNvdXJjZSkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGlmICghaXQub3B0cy51bmV2YWx1YXRlZClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3Qgc2NoRXZhbHVhdGVkID0gKF9hID0gc2NoID09PSBudWxsIHx8IHNjaCA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2NoLnZhbGlkYXRlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZXZhbHVhdGVkO1xuICAgICAgICAvLyBUT0RPIHJlZmFjdG9yXG4gICAgICAgIGlmIChpdC5wcm9wcyAhPT0gdHJ1ZSkge1xuICAgICAgICAgICAgaWYgKHNjaEV2YWx1YXRlZCAmJiAhc2NoRXZhbHVhdGVkLmR5bmFtaWNQcm9wcykge1xuICAgICAgICAgICAgICAgIGlmIChzY2hFdmFsdWF0ZWQucHJvcHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBpdC5wcm9wcyA9IHV0aWxfMS5tZXJnZUV2YWx1YXRlZC5wcm9wcyhnZW4sIHNjaEV2YWx1YXRlZC5wcm9wcywgaXQucHJvcHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IHByb3BzID0gZ2VuLnZhcihcInByb3BzXCIsICgwLCBjb2RlZ2VuXzEuXykgYCR7c291cmNlfS5ldmFsdWF0ZWQucHJvcHNgKTtcbiAgICAgICAgICAgICAgICBpdC5wcm9wcyA9IHV0aWxfMS5tZXJnZUV2YWx1YXRlZC5wcm9wcyhnZW4sIHByb3BzLCBpdC5wcm9wcywgY29kZWdlbl8xLk5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChpdC5pdGVtcyAhPT0gdHJ1ZSkge1xuICAgICAgICAgICAgaWYgKHNjaEV2YWx1YXRlZCAmJiAhc2NoRXZhbHVhdGVkLmR5bmFtaWNJdGVtcykge1xuICAgICAgICAgICAgICAgIGlmIChzY2hFdmFsdWF0ZWQuaXRlbXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBpdC5pdGVtcyA9IHV0aWxfMS5tZXJnZUV2YWx1YXRlZC5pdGVtcyhnZW4sIHNjaEV2YWx1YXRlZC5pdGVtcywgaXQuaXRlbXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1zID0gZ2VuLnZhcihcIml0ZW1zXCIsICgwLCBjb2RlZ2VuXzEuXykgYCR7c291cmNlfS5ldmFsdWF0ZWQuaXRlbXNgKTtcbiAgICAgICAgICAgICAgICBpdC5pdGVtcyA9IHV0aWxfMS5tZXJnZUV2YWx1YXRlZC5pdGVtcyhnZW4sIGl0ZW1zLCBpdC5pdGVtcywgY29kZWdlbl8xLk5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0cy5jYWxsUmVmID0gY2FsbFJlZjtcbmV4cG9ydHMuZGVmYXVsdCA9IGRlZjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJlZi5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgaWRfMSA9IHJlcXVpcmUoXCIuL2lkXCIpO1xuY29uc3QgcmVmXzEgPSByZXF1aXJlKFwiLi9yZWZcIik7XG5jb25zdCBjb3JlID0gW1xuICAgIFwiJHNjaGVtYVwiLFxuICAgIFwiJGlkXCIsXG4gICAgXCIkZGVmc1wiLFxuICAgIFwiJHZvY2FidWxhcnlcIixcbiAgICB7IGtleXdvcmQ6IFwiJGNvbW1lbnRcIiB9LFxuICAgIFwiZGVmaW5pdGlvbnNcIixcbiAgICBpZF8xLmRlZmF1bHQsXG4gICAgcmVmXzEuZGVmYXVsdCxcbl07XG5leHBvcnRzLmRlZmF1bHQgPSBjb3JlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL2NvZGVnZW5cIik7XG5jb25zdCBvcHMgPSBjb2RlZ2VuXzEub3BlcmF0b3JzO1xuY29uc3QgS1dEcyA9IHtcbiAgICBtYXhpbXVtOiB7IG9rU3RyOiBcIjw9XCIsIG9rOiBvcHMuTFRFLCBmYWlsOiBvcHMuR1QgfSxcbiAgICBtaW5pbXVtOiB7IG9rU3RyOiBcIj49XCIsIG9rOiBvcHMuR1RFLCBmYWlsOiBvcHMuTFQgfSxcbiAgICBleGNsdXNpdmVNYXhpbXVtOiB7IG9rU3RyOiBcIjxcIiwgb2s6IG9wcy5MVCwgZmFpbDogb3BzLkdURSB9LFxuICAgIGV4Y2x1c2l2ZU1pbmltdW06IHsgb2tTdHI6IFwiPlwiLCBvazogb3BzLkdULCBmYWlsOiBvcHMuTFRFIH0sXG59O1xuY29uc3QgZXJyb3IgPSB7XG4gICAgbWVzc2FnZTogKHsga2V5d29yZCwgc2NoZW1hQ29kZSB9KSA9PiAoMCwgY29kZWdlbl8xLnN0cikgYG11c3QgYmUgJHtLV0RzW2tleXdvcmRdLm9rU3RyfSAke3NjaGVtYUNvZGV9YCxcbiAgICBwYXJhbXM6ICh7IGtleXdvcmQsIHNjaGVtYUNvZGUgfSkgPT4gKDAsIGNvZGVnZW5fMS5fKSBge2NvbXBhcmlzb246ICR7S1dEc1trZXl3b3JkXS5va1N0cn0sIGxpbWl0OiAke3NjaGVtYUNvZGV9fWAsXG59O1xuY29uc3QgZGVmID0ge1xuICAgIGtleXdvcmQ6IE9iamVjdC5rZXlzKEtXRHMpLFxuICAgIHR5cGU6IFwibnVtYmVyXCIsXG4gICAgc2NoZW1hVHlwZTogXCJudW1iZXJcIixcbiAgICAkZGF0YTogdHJ1ZSxcbiAgICBlcnJvcixcbiAgICBjb2RlKGN4dCkge1xuICAgICAgICBjb25zdCB7IGtleXdvcmQsIGRhdGEsIHNjaGVtYUNvZGUgfSA9IGN4dDtcbiAgICAgICAgY3h0LmZhaWwkZGF0YSgoMCwgY29kZWdlbl8xLl8pIGAke2RhdGF9ICR7S1dEc1trZXl3b3JkXS5mYWlsfSAke3NjaGVtYUNvZGV9IHx8IGlzTmFOKCR7ZGF0YX0pYCk7XG4gICAgfSxcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1saW1pdE51bWJlci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvY29kZWdlblwiKTtcbmNvbnN0IGVycm9yID0ge1xuICAgIG1lc3NhZ2U6ICh7IHNjaGVtYUNvZGUgfSkgPT4gKDAsIGNvZGVnZW5fMS5zdHIpIGBtdXN0IGJlIG11bHRpcGxlIG9mICR7c2NoZW1hQ29kZX1gLFxuICAgIHBhcmFtczogKHsgc2NoZW1hQ29kZSB9KSA9PiAoMCwgY29kZWdlbl8xLl8pIGB7bXVsdGlwbGVPZjogJHtzY2hlbWFDb2RlfX1gLFxufTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcIm11bHRpcGxlT2ZcIixcbiAgICB0eXBlOiBcIm51bWJlclwiLFxuICAgIHNjaGVtYVR5cGU6IFwibnVtYmVyXCIsXG4gICAgJGRhdGE6IHRydWUsXG4gICAgZXJyb3IsXG4gICAgY29kZShjeHQpIHtcbiAgICAgICAgY29uc3QgeyBnZW4sIGRhdGEsIHNjaGVtYUNvZGUsIGl0IH0gPSBjeHQ7XG4gICAgICAgIC8vIGNvbnN0IGJkdCA9IGJhZCREYXRhVHlwZShzY2hlbWFDb2RlLCA8c3RyaW5nPmRlZi5zY2hlbWFUeXBlLCAkZGF0YSlcbiAgICAgICAgY29uc3QgcHJlYyA9IGl0Lm9wdHMubXVsdGlwbGVPZlByZWNpc2lvbjtcbiAgICAgICAgY29uc3QgcmVzID0gZ2VuLmxldChcInJlc1wiKTtcbiAgICAgICAgY29uc3QgaW52YWxpZCA9IHByZWNcbiAgICAgICAgICAgID8gKDAsIGNvZGVnZW5fMS5fKSBgTWF0aC5hYnMoTWF0aC5yb3VuZCgke3Jlc30pIC0gJHtyZXN9KSA+IDFlLSR7cHJlY31gXG4gICAgICAgICAgICA6ICgwLCBjb2RlZ2VuXzEuXykgYCR7cmVzfSAhPT0gcGFyc2VJbnQoJHtyZXN9KWA7XG4gICAgICAgIGN4dC5mYWlsJGRhdGEoKDAsIGNvZGVnZW5fMS5fKSBgKCR7c2NoZW1hQ29kZX0gPT09IDAgfHwgKCR7cmVzfSA9ICR7ZGF0YX0vJHtzY2hlbWFDb2RlfSwgJHtpbnZhbGlkfSkpYCk7XG4gICAgfSxcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1tdWx0aXBsZU9mLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4vLyBodHRwczovL21hdGhpYXNieW5lbnMuYmUvbm90ZXMvamF2YXNjcmlwdC1lbmNvZGluZ1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL2Jlc3RpZWpzL3B1bnljb2RlLmpzIC0gcHVueWNvZGUudWNzMi5kZWNvZGVcbmZ1bmN0aW9uIHVjczJsZW5ndGgoc3RyKSB7XG4gICAgY29uc3QgbGVuID0gc3RyLmxlbmd0aDtcbiAgICBsZXQgbGVuZ3RoID0gMDtcbiAgICBsZXQgcG9zID0gMDtcbiAgICBsZXQgdmFsdWU7XG4gICAgd2hpbGUgKHBvcyA8IGxlbikge1xuICAgICAgICBsZW5ndGgrKztcbiAgICAgICAgdmFsdWUgPSBzdHIuY2hhckNvZGVBdChwb3MrKyk7XG4gICAgICAgIGlmICh2YWx1ZSA+PSAweGQ4MDAgJiYgdmFsdWUgPD0gMHhkYmZmICYmIHBvcyA8IGxlbikge1xuICAgICAgICAgICAgLy8gaGlnaCBzdXJyb2dhdGUsIGFuZCB0aGVyZSBpcyBhIG5leHQgY2hhcmFjdGVyXG4gICAgICAgICAgICB2YWx1ZSA9IHN0ci5jaGFyQ29kZUF0KHBvcyk7XG4gICAgICAgICAgICBpZiAoKHZhbHVlICYgMHhmYzAwKSA9PT0gMHhkYzAwKVxuICAgICAgICAgICAgICAgIHBvcysrOyAvLyBsb3cgc3Vycm9nYXRlXG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGxlbmd0aDtcbn1cbmV4cG9ydHMuZGVmYXVsdCA9IHVjczJsZW5ndGg7XG51Y3MybGVuZ3RoLmNvZGUgPSAncmVxdWlyZShcImFqdi9kaXN0L3J1bnRpbWUvdWNzMmxlbmd0aFwiKS5kZWZhdWx0Jztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXVjczJsZW5ndGguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL2NvZGVnZW5cIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS91dGlsXCIpO1xuY29uc3QgdWNzMmxlbmd0aF8xID0gcmVxdWlyZShcIi4uLy4uL3J1bnRpbWUvdWNzMmxlbmd0aFwiKTtcbmNvbnN0IGVycm9yID0ge1xuICAgIG1lc3NhZ2UoeyBrZXl3b3JkLCBzY2hlbWFDb2RlIH0pIHtcbiAgICAgICAgY29uc3QgY29tcCA9IGtleXdvcmQgPT09IFwibWF4TGVuZ3RoXCIgPyBcIm1vcmVcIiA6IFwiZmV3ZXJcIjtcbiAgICAgICAgcmV0dXJuICgwLCBjb2RlZ2VuXzEuc3RyKSBgbXVzdCBOT1QgaGF2ZSAke2NvbXB9IHRoYW4gJHtzY2hlbWFDb2RlfSBjaGFyYWN0ZXJzYDtcbiAgICB9LFxuICAgIHBhcmFtczogKHsgc2NoZW1hQ29kZSB9KSA9PiAoMCwgY29kZWdlbl8xLl8pIGB7bGltaXQ6ICR7c2NoZW1hQ29kZX19YCxcbn07XG5jb25zdCBkZWYgPSB7XG4gICAga2V5d29yZDogW1wibWF4TGVuZ3RoXCIsIFwibWluTGVuZ3RoXCJdLFxuICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgc2NoZW1hVHlwZTogXCJudW1iZXJcIixcbiAgICAkZGF0YTogdHJ1ZSxcbiAgICBlcnJvcixcbiAgICBjb2RlKGN4dCkge1xuICAgICAgICBjb25zdCB7IGtleXdvcmQsIGRhdGEsIHNjaGVtYUNvZGUsIGl0IH0gPSBjeHQ7XG4gICAgICAgIGNvbnN0IG9wID0ga2V5d29yZCA9PT0gXCJtYXhMZW5ndGhcIiA/IGNvZGVnZW5fMS5vcGVyYXRvcnMuR1QgOiBjb2RlZ2VuXzEub3BlcmF0b3JzLkxUO1xuICAgICAgICBjb25zdCBsZW4gPSBpdC5vcHRzLnVuaWNvZGUgPT09IGZhbHNlID8gKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhfS5sZW5ndGhgIDogKDAsIGNvZGVnZW5fMS5fKSBgJHsoMCwgdXRpbF8xLnVzZUZ1bmMpKGN4dC5nZW4sIHVjczJsZW5ndGhfMS5kZWZhdWx0KX0oJHtkYXRhfSlgO1xuICAgICAgICBjeHQuZmFpbCRkYXRhKCgwLCBjb2RlZ2VuXzEuXykgYCR7bGVufSAke29wfSAke3NjaGVtYUNvZGV9YCk7XG4gICAgfSxcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1saW1pdExlbmd0aC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgY29kZV8xID0gcmVxdWlyZShcIi4uL2NvZGVcIik7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS9jb2RlZ2VuXCIpO1xuY29uc3QgZXJyb3IgPSB7XG4gICAgbWVzc2FnZTogKHsgc2NoZW1hQ29kZSB9KSA9PiAoMCwgY29kZWdlbl8xLnN0cikgYG11c3QgbWF0Y2ggcGF0dGVybiBcIiR7c2NoZW1hQ29kZX1cImAsXG4gICAgcGFyYW1zOiAoeyBzY2hlbWFDb2RlIH0pID0+ICgwLCBjb2RlZ2VuXzEuXykgYHtwYXR0ZXJuOiAke3NjaGVtYUNvZGV9fWAsXG59O1xuY29uc3QgZGVmID0ge1xuICAgIGtleXdvcmQ6IFwicGF0dGVyblwiLFxuICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgc2NoZW1hVHlwZTogXCJzdHJpbmdcIixcbiAgICAkZGF0YTogdHJ1ZSxcbiAgICBlcnJvcixcbiAgICBjb2RlKGN4dCkge1xuICAgICAgICBjb25zdCB7IGRhdGEsICRkYXRhLCBzY2hlbWEsIHNjaGVtYUNvZGUsIGl0IH0gPSBjeHQ7XG4gICAgICAgIC8vIFRPRE8gcmVnZXhwIHNob3VsZCBiZSB3cmFwcGVkIGluIHRyeS9jYXRjaHNcbiAgICAgICAgY29uc3QgdSA9IGl0Lm9wdHMudW5pY29kZVJlZ0V4cCA/IFwidVwiIDogXCJcIjtcbiAgICAgICAgY29uc3QgcmVnRXhwID0gJGRhdGEgPyAoMCwgY29kZWdlbl8xLl8pIGAobmV3IFJlZ0V4cCgke3NjaGVtYUNvZGV9LCAke3V9KSlgIDogKDAsIGNvZGVfMS51c2VQYXR0ZXJuKShjeHQsIHNjaGVtYSk7XG4gICAgICAgIGN4dC5mYWlsJGRhdGEoKDAsIGNvZGVnZW5fMS5fKSBgISR7cmVnRXhwfS50ZXN0KCR7ZGF0YX0pYCk7XG4gICAgfSxcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wYXR0ZXJuLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS9jb2RlZ2VuXCIpO1xuY29uc3QgZXJyb3IgPSB7XG4gICAgbWVzc2FnZSh7IGtleXdvcmQsIHNjaGVtYUNvZGUgfSkge1xuICAgICAgICBjb25zdCBjb21wID0ga2V5d29yZCA9PT0gXCJtYXhQcm9wZXJ0aWVzXCIgPyBcIm1vcmVcIiA6IFwiZmV3ZXJcIjtcbiAgICAgICAgcmV0dXJuICgwLCBjb2RlZ2VuXzEuc3RyKSBgbXVzdCBOT1QgaGF2ZSAke2NvbXB9IHRoYW4gJHtzY2hlbWFDb2RlfSBwcm9wZXJ0aWVzYDtcbiAgICB9LFxuICAgIHBhcmFtczogKHsgc2NoZW1hQ29kZSB9KSA9PiAoMCwgY29kZWdlbl8xLl8pIGB7bGltaXQ6ICR7c2NoZW1hQ29kZX19YCxcbn07XG5jb25zdCBkZWYgPSB7XG4gICAga2V5d29yZDogW1wibWF4UHJvcGVydGllc1wiLCBcIm1pblByb3BlcnRpZXNcIl0sXG4gICAgdHlwZTogXCJvYmplY3RcIixcbiAgICBzY2hlbWFUeXBlOiBcIm51bWJlclwiLFxuICAgICRkYXRhOiB0cnVlLFxuICAgIGVycm9yLFxuICAgIGNvZGUoY3h0KSB7XG4gICAgICAgIGNvbnN0IHsga2V5d29yZCwgZGF0YSwgc2NoZW1hQ29kZSB9ID0gY3h0O1xuICAgICAgICBjb25zdCBvcCA9IGtleXdvcmQgPT09IFwibWF4UHJvcGVydGllc1wiID8gY29kZWdlbl8xLm9wZXJhdG9ycy5HVCA6IGNvZGVnZW5fMS5vcGVyYXRvcnMuTFQ7XG4gICAgICAgIGN4dC5mYWlsJGRhdGEoKDAsIGNvZGVnZW5fMS5fKSBgT2JqZWN0LmtleXMoJHtkYXRhfSkubGVuZ3RoICR7b3B9ICR7c2NoZW1hQ29kZX1gKTtcbiAgICB9LFxufTtcbmV4cG9ydHMuZGVmYXVsdCA9IGRlZjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWxpbWl0UHJvcGVydGllcy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgY29kZV8xID0gcmVxdWlyZShcIi4uL2NvZGVcIik7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS9jb2RlZ2VuXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvdXRpbFwiKTtcbmNvbnN0IGVycm9yID0ge1xuICAgIG1lc3NhZ2U6ICh7IHBhcmFtczogeyBtaXNzaW5nUHJvcGVydHkgfSB9KSA9PiAoMCwgY29kZWdlbl8xLnN0cikgYG11c3QgaGF2ZSByZXF1aXJlZCBwcm9wZXJ0eSAnJHttaXNzaW5nUHJvcGVydHl9J2AsXG4gICAgcGFyYW1zOiAoeyBwYXJhbXM6IHsgbWlzc2luZ1Byb3BlcnR5IH0gfSkgPT4gKDAsIGNvZGVnZW5fMS5fKSBge21pc3NpbmdQcm9wZXJ0eTogJHttaXNzaW5nUHJvcGVydHl9fWAsXG59O1xuY29uc3QgZGVmID0ge1xuICAgIGtleXdvcmQ6IFwicmVxdWlyZWRcIixcbiAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgIHNjaGVtYVR5cGU6IFwiYXJyYXlcIixcbiAgICAkZGF0YTogdHJ1ZSxcbiAgICBlcnJvcixcbiAgICBjb2RlKGN4dCkge1xuICAgICAgICBjb25zdCB7IGdlbiwgc2NoZW1hLCBzY2hlbWFDb2RlLCBkYXRhLCAkZGF0YSwgaXQgfSA9IGN4dDtcbiAgICAgICAgY29uc3QgeyBvcHRzIH0gPSBpdDtcbiAgICAgICAgaWYgKCEkZGF0YSAmJiBzY2hlbWEubGVuZ3RoID09PSAwKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCB1c2VMb29wID0gc2NoZW1hLmxlbmd0aCA+PSBvcHRzLmxvb3BSZXF1aXJlZDtcbiAgICAgICAgaWYgKGl0LmFsbEVycm9ycylcbiAgICAgICAgICAgIGFsbEVycm9yc01vZGUoKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgZXhpdE9uRXJyb3JNb2RlKCk7XG4gICAgICAgIGlmIChvcHRzLnN0cmljdFJlcXVpcmVkKSB7XG4gICAgICAgICAgICBjb25zdCBwcm9wcyA9IGN4dC5wYXJlbnRTY2hlbWEucHJvcGVydGllcztcbiAgICAgICAgICAgIGNvbnN0IHsgZGVmaW5lZFByb3BlcnRpZXMgfSA9IGN4dC5pdDtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcmVxdWlyZWRLZXkgb2Ygc2NoZW1hKSB7XG4gICAgICAgICAgICAgICAgaWYgKChwcm9wcyA9PT0gbnVsbCB8fCBwcm9wcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogcHJvcHNbcmVxdWlyZWRLZXldKSA9PT0gdW5kZWZpbmVkICYmICFkZWZpbmVkUHJvcGVydGllcy5oYXMocmVxdWlyZWRLZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNjaGVtYVBhdGggPSBpdC5zY2hlbWFFbnYuYmFzZUlkICsgaXQuZXJyU2NoZW1hUGF0aDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbXNnID0gYHJlcXVpcmVkIHByb3BlcnR5IFwiJHtyZXF1aXJlZEtleX1cIiBpcyBub3QgZGVmaW5lZCBhdCBcIiR7c2NoZW1hUGF0aH1cIiAoc3RyaWN0UmVxdWlyZWQpYDtcbiAgICAgICAgICAgICAgICAgICAgKDAsIHV0aWxfMS5jaGVja1N0cmljdE1vZGUpKGl0LCBtc2csIGl0Lm9wdHMuc3RyaWN0UmVxdWlyZWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBhbGxFcnJvcnNNb2RlKCkge1xuICAgICAgICAgICAgaWYgKHVzZUxvb3AgfHwgJGRhdGEpIHtcbiAgICAgICAgICAgICAgICBjeHQuYmxvY2skZGF0YShjb2RlZ2VuXzEubmlsLCBsb29wQWxsUmVxdWlyZWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBwcm9wIG9mIHNjaGVtYSkge1xuICAgICAgICAgICAgICAgICAgICAoMCwgY29kZV8xLmNoZWNrUmVwb3J0TWlzc2luZ1Byb3ApKGN4dCwgcHJvcCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGV4aXRPbkVycm9yTW9kZSgpIHtcbiAgICAgICAgICAgIGNvbnN0IG1pc3NpbmcgPSBnZW4ubGV0KFwibWlzc2luZ1wiKTtcbiAgICAgICAgICAgIGlmICh1c2VMb29wIHx8ICRkYXRhKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsaWQgPSBnZW4ubGV0KFwidmFsaWRcIiwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgY3h0LmJsb2NrJGRhdGEodmFsaWQsICgpID0+IGxvb3BVbnRpbE1pc3NpbmcobWlzc2luZywgdmFsaWQpKTtcbiAgICAgICAgICAgICAgICBjeHQub2sodmFsaWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZ2VuLmlmKCgwLCBjb2RlXzEuY2hlY2tNaXNzaW5nUHJvcCkoY3h0LCBzY2hlbWEsIG1pc3NpbmcpKTtcbiAgICAgICAgICAgICAgICAoMCwgY29kZV8xLnJlcG9ydE1pc3NpbmdQcm9wKShjeHQsIG1pc3NpbmcpO1xuICAgICAgICAgICAgICAgIGdlbi5lbHNlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gbG9vcEFsbFJlcXVpcmVkKCkge1xuICAgICAgICAgICAgZ2VuLmZvck9mKFwicHJvcFwiLCBzY2hlbWFDb2RlLCAocHJvcCkgPT4ge1xuICAgICAgICAgICAgICAgIGN4dC5zZXRQYXJhbXMoeyBtaXNzaW5nUHJvcGVydHk6IHByb3AgfSk7XG4gICAgICAgICAgICAgICAgZ2VuLmlmKCgwLCBjb2RlXzEubm9Qcm9wZXJ0eUluRGF0YSkoZ2VuLCBkYXRhLCBwcm9wLCBvcHRzLm93blByb3BlcnRpZXMpLCAoKSA9PiBjeHQuZXJyb3IoKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBsb29wVW50aWxNaXNzaW5nKG1pc3NpbmcsIHZhbGlkKSB7XG4gICAgICAgICAgICBjeHQuc2V0UGFyYW1zKHsgbWlzc2luZ1Byb3BlcnR5OiBtaXNzaW5nIH0pO1xuICAgICAgICAgICAgZ2VuLmZvck9mKG1pc3NpbmcsIHNjaGVtYUNvZGUsICgpID0+IHtcbiAgICAgICAgICAgICAgICBnZW4uYXNzaWduKHZhbGlkLCAoMCwgY29kZV8xLnByb3BlcnR5SW5EYXRhKShnZW4sIGRhdGEsIG1pc3NpbmcsIG9wdHMub3duUHJvcGVydGllcykpO1xuICAgICAgICAgICAgICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLm5vdCkodmFsaWQpLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGN4dC5lcnJvcigpO1xuICAgICAgICAgICAgICAgICAgICBnZW4uYnJlYWsoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sIGNvZGVnZW5fMS5uaWwpO1xuICAgICAgICB9XG4gICAgfSxcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1yZXF1aXJlZC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvY29kZWdlblwiKTtcbmNvbnN0IGVycm9yID0ge1xuICAgIG1lc3NhZ2UoeyBrZXl3b3JkLCBzY2hlbWFDb2RlIH0pIHtcbiAgICAgICAgY29uc3QgY29tcCA9IGtleXdvcmQgPT09IFwibWF4SXRlbXNcIiA/IFwibW9yZVwiIDogXCJmZXdlclwiO1xuICAgICAgICByZXR1cm4gKDAsIGNvZGVnZW5fMS5zdHIpIGBtdXN0IE5PVCBoYXZlICR7Y29tcH0gdGhhbiAke3NjaGVtYUNvZGV9IGl0ZW1zYDtcbiAgICB9LFxuICAgIHBhcmFtczogKHsgc2NoZW1hQ29kZSB9KSA9PiAoMCwgY29kZWdlbl8xLl8pIGB7bGltaXQ6ICR7c2NoZW1hQ29kZX19YCxcbn07XG5jb25zdCBkZWYgPSB7XG4gICAga2V5d29yZDogW1wibWF4SXRlbXNcIiwgXCJtaW5JdGVtc1wiXSxcbiAgICB0eXBlOiBcImFycmF5XCIsXG4gICAgc2NoZW1hVHlwZTogXCJudW1iZXJcIixcbiAgICAkZGF0YTogdHJ1ZSxcbiAgICBlcnJvcixcbiAgICBjb2RlKGN4dCkge1xuICAgICAgICBjb25zdCB7IGtleXdvcmQsIGRhdGEsIHNjaGVtYUNvZGUgfSA9IGN4dDtcbiAgICAgICAgY29uc3Qgb3AgPSBrZXl3b3JkID09PSBcIm1heEl0ZW1zXCIgPyBjb2RlZ2VuXzEub3BlcmF0b3JzLkdUIDogY29kZWdlbl8xLm9wZXJhdG9ycy5MVDtcbiAgICAgICAgY3h0LmZhaWwkZGF0YSgoMCwgY29kZWdlbl8xLl8pIGAke2RhdGF9Lmxlbmd0aCAke29wfSAke3NjaGVtYUNvZGV9YCk7XG4gICAgfSxcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1saW1pdEl0ZW1zLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vYWp2LXZhbGlkYXRvci9hanYvaXNzdWVzLzg4OVxuY29uc3QgZXF1YWwgPSByZXF1aXJlKFwiZmFzdC1kZWVwLWVxdWFsXCIpO1xuZXF1YWwuY29kZSA9ICdyZXF1aXJlKFwiYWp2L2Rpc3QvcnVudGltZS9lcXVhbFwiKS5kZWZhdWx0JztcbmV4cG9ydHMuZGVmYXVsdCA9IGVxdWFsO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZXF1YWwuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGRhdGFUeXBlXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS92YWxpZGF0ZS9kYXRhVHlwZVwiKTtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL2NvZGVnZW5cIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS91dGlsXCIpO1xuY29uc3QgZXF1YWxfMSA9IHJlcXVpcmUoXCIuLi8uLi9ydW50aW1lL2VxdWFsXCIpO1xuY29uc3QgZXJyb3IgPSB7XG4gICAgbWVzc2FnZTogKHsgcGFyYW1zOiB7IGksIGogfSB9KSA9PiAoMCwgY29kZWdlbl8xLnN0cikgYG11c3QgTk9UIGhhdmUgZHVwbGljYXRlIGl0ZW1zIChpdGVtcyAjIyAke2p9IGFuZCAke2l9IGFyZSBpZGVudGljYWwpYCxcbiAgICBwYXJhbXM6ICh7IHBhcmFtczogeyBpLCBqIH0gfSkgPT4gKDAsIGNvZGVnZW5fMS5fKSBge2k6ICR7aX0sIGo6ICR7an19YCxcbn07XG5jb25zdCBkZWYgPSB7XG4gICAga2V5d29yZDogXCJ1bmlxdWVJdGVtc1wiLFxuICAgIHR5cGU6IFwiYXJyYXlcIixcbiAgICBzY2hlbWFUeXBlOiBcImJvb2xlYW5cIixcbiAgICAkZGF0YTogdHJ1ZSxcbiAgICBlcnJvcixcbiAgICBjb2RlKGN4dCkge1xuICAgICAgICBjb25zdCB7IGdlbiwgZGF0YSwgJGRhdGEsIHNjaGVtYSwgcGFyZW50U2NoZW1hLCBzY2hlbWFDb2RlLCBpdCB9ID0gY3h0O1xuICAgICAgICBpZiAoISRkYXRhICYmICFzY2hlbWEpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IHZhbGlkID0gZ2VuLmxldChcInZhbGlkXCIpO1xuICAgICAgICBjb25zdCBpdGVtVHlwZXMgPSBwYXJlbnRTY2hlbWEuaXRlbXMgPyAoMCwgZGF0YVR5cGVfMS5nZXRTY2hlbWFUeXBlcykocGFyZW50U2NoZW1hLml0ZW1zKSA6IFtdO1xuICAgICAgICBjeHQuYmxvY2skZGF0YSh2YWxpZCwgdmFsaWRhdGVVbmlxdWVJdGVtcywgKDAsIGNvZGVnZW5fMS5fKSBgJHtzY2hlbWFDb2RlfSA9PT0gZmFsc2VgKTtcbiAgICAgICAgY3h0Lm9rKHZhbGlkKTtcbiAgICAgICAgZnVuY3Rpb24gdmFsaWRhdGVVbmlxdWVJdGVtcygpIHtcbiAgICAgICAgICAgIGNvbnN0IGkgPSBnZW4ubGV0KFwiaVwiLCAoMCwgY29kZWdlbl8xLl8pIGAke2RhdGF9Lmxlbmd0aGApO1xuICAgICAgICAgICAgY29uc3QgaiA9IGdlbi5sZXQoXCJqXCIpO1xuICAgICAgICAgICAgY3h0LnNldFBhcmFtcyh7IGksIGogfSk7XG4gICAgICAgICAgICBnZW4uYXNzaWduKHZhbGlkLCB0cnVlKTtcbiAgICAgICAgICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGAke2l9ID4gMWAsICgpID0+IChjYW5PcHRpbWl6ZSgpID8gbG9vcE4gOiBsb29wTjIpKGksIGopKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBjYW5PcHRpbWl6ZSgpIHtcbiAgICAgICAgICAgIHJldHVybiBpdGVtVHlwZXMubGVuZ3RoID4gMCAmJiAhaXRlbVR5cGVzLnNvbWUoKHQpID0+IHQgPT09IFwib2JqZWN0XCIgfHwgdCA9PT0gXCJhcnJheVwiKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBsb29wTihpLCBqKSB7XG4gICAgICAgICAgICBjb25zdCBpdGVtID0gZ2VuLm5hbWUoXCJpdGVtXCIpO1xuICAgICAgICAgICAgY29uc3Qgd3JvbmdUeXBlID0gKDAsIGRhdGFUeXBlXzEuY2hlY2tEYXRhVHlwZXMpKGl0ZW1UeXBlcywgaXRlbSwgaXQub3B0cy5zdHJpY3ROdW1iZXJzLCBkYXRhVHlwZV8xLkRhdGFUeXBlLldyb25nKTtcbiAgICAgICAgICAgIGNvbnN0IGluZGljZXMgPSBnZW4uY29uc3QoXCJpbmRpY2VzXCIsICgwLCBjb2RlZ2VuXzEuXykgYHt9YCk7XG4gICAgICAgICAgICBnZW4uZm9yKCgwLCBjb2RlZ2VuXzEuXykgYDske2l9LS07YCwgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGdlbi5sZXQoaXRlbSwgKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhfVske2l9XWApO1xuICAgICAgICAgICAgICAgIGdlbi5pZih3cm9uZ1R5cGUsICgwLCBjb2RlZ2VuXzEuXykgYGNvbnRpbnVlYCk7XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW1UeXBlcy5sZW5ndGggPiAxKVxuICAgICAgICAgICAgICAgICAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5fKSBgdHlwZW9mICR7aXRlbX0gPT0gXCJzdHJpbmdcImAsICgwLCBjb2RlZ2VuXzEuXykgYCR7aXRlbX0gKz0gXCJfXCJgKTtcbiAgICAgICAgICAgICAgICBnZW5cbiAgICAgICAgICAgICAgICAgICAgLmlmKCgwLCBjb2RlZ2VuXzEuXykgYHR5cGVvZiAke2luZGljZXN9WyR7aXRlbX1dID09IFwibnVtYmVyXCJgLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGdlbi5hc3NpZ24oaiwgKDAsIGNvZGVnZW5fMS5fKSBgJHtpbmRpY2VzfVske2l0ZW19XWApO1xuICAgICAgICAgICAgICAgICAgICBjeHQuZXJyb3IoKTtcbiAgICAgICAgICAgICAgICAgICAgZ2VuLmFzc2lnbih2YWxpZCwgZmFsc2UpLmJyZWFrKCk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgLmNvZGUoKDAsIGNvZGVnZW5fMS5fKSBgJHtpbmRpY2VzfVske2l0ZW19XSA9ICR7aX1gKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGxvb3BOMihpLCBqKSB7XG4gICAgICAgICAgICBjb25zdCBlcWwgPSAoMCwgdXRpbF8xLnVzZUZ1bmMpKGdlbiwgZXF1YWxfMS5kZWZhdWx0KTtcbiAgICAgICAgICAgIGNvbnN0IG91dGVyID0gZ2VuLm5hbWUoXCJvdXRlclwiKTtcbiAgICAgICAgICAgIGdlbi5sYWJlbChvdXRlcikuZm9yKCgwLCBjb2RlZ2VuXzEuXykgYDske2l9LS07YCwgKCkgPT4gZ2VuLmZvcigoMCwgY29kZWdlbl8xLl8pIGAke2p9ID0gJHtpfTsgJHtqfS0tO2AsICgpID0+IGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGAke2VxbH0oJHtkYXRhfVske2l9XSwgJHtkYXRhfVske2p9XSlgLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY3h0LmVycm9yKCk7XG4gICAgICAgICAgICAgICAgZ2VuLmFzc2lnbih2YWxpZCwgZmFsc2UpLmJyZWFrKG91dGVyKTtcbiAgICAgICAgICAgIH0pKSk7XG4gICAgICAgIH1cbiAgICB9LFxufTtcbmV4cG9ydHMuZGVmYXVsdCA9IGRlZjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXVuaXF1ZUl0ZW1zLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS9jb2RlZ2VuXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvdXRpbFwiKTtcbmNvbnN0IGVxdWFsXzEgPSByZXF1aXJlKFwiLi4vLi4vcnVudGltZS9lcXVhbFwiKTtcbmNvbnN0IGVycm9yID0ge1xuICAgIG1lc3NhZ2U6IFwibXVzdCBiZSBlcXVhbCB0byBjb25zdGFudFwiLFxuICAgIHBhcmFtczogKHsgc2NoZW1hQ29kZSB9KSA9PiAoMCwgY29kZWdlbl8xLl8pIGB7YWxsb3dlZFZhbHVlOiAke3NjaGVtYUNvZGV9fWAsXG59O1xuY29uc3QgZGVmID0ge1xuICAgIGtleXdvcmQ6IFwiY29uc3RcIixcbiAgICAkZGF0YTogdHJ1ZSxcbiAgICBlcnJvcixcbiAgICBjb2RlKGN4dCkge1xuICAgICAgICBjb25zdCB7IGdlbiwgZGF0YSwgJGRhdGEsIHNjaGVtYUNvZGUsIHNjaGVtYSB9ID0gY3h0O1xuICAgICAgICBpZiAoJGRhdGEgfHwgKHNjaGVtYSAmJiB0eXBlb2Ygc2NoZW1hID09IFwib2JqZWN0XCIpKSB7XG4gICAgICAgICAgICBjeHQuZmFpbCRkYXRhKCgwLCBjb2RlZ2VuXzEuXykgYCEkeygwLCB1dGlsXzEudXNlRnVuYykoZ2VuLCBlcXVhbF8xLmRlZmF1bHQpfSgke2RhdGF9LCAke3NjaGVtYUNvZGV9KWApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY3h0LmZhaWwoKDAsIGNvZGVnZW5fMS5fKSBgJHtzY2hlbWF9ICE9PSAke2RhdGF9YCk7XG4gICAgICAgIH1cbiAgICB9LFxufTtcbmV4cG9ydHMuZGVmYXVsdCA9IGRlZjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbnN0LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS9jb2RlZ2VuXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvdXRpbFwiKTtcbmNvbnN0IGVxdWFsXzEgPSByZXF1aXJlKFwiLi4vLi4vcnVudGltZS9lcXVhbFwiKTtcbmNvbnN0IGVycm9yID0ge1xuICAgIG1lc3NhZ2U6IFwibXVzdCBiZSBlcXVhbCB0byBvbmUgb2YgdGhlIGFsbG93ZWQgdmFsdWVzXCIsXG4gICAgcGFyYW1zOiAoeyBzY2hlbWFDb2RlIH0pID0+ICgwLCBjb2RlZ2VuXzEuXykgYHthbGxvd2VkVmFsdWVzOiAke3NjaGVtYUNvZGV9fWAsXG59O1xuY29uc3QgZGVmID0ge1xuICAgIGtleXdvcmQ6IFwiZW51bVwiLFxuICAgIHNjaGVtYVR5cGU6IFwiYXJyYXlcIixcbiAgICAkZGF0YTogdHJ1ZSxcbiAgICBlcnJvcixcbiAgICBjb2RlKGN4dCkge1xuICAgICAgICBjb25zdCB7IGdlbiwgZGF0YSwgJGRhdGEsIHNjaGVtYSwgc2NoZW1hQ29kZSwgaXQgfSA9IGN4dDtcbiAgICAgICAgaWYgKCEkZGF0YSAmJiBzY2hlbWEubGVuZ3RoID09PSAwKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZW51bSBtdXN0IGhhdmUgbm9uLWVtcHR5IGFycmF5XCIpO1xuICAgICAgICBjb25zdCB1c2VMb29wID0gc2NoZW1hLmxlbmd0aCA+PSBpdC5vcHRzLmxvb3BFbnVtO1xuICAgICAgICBsZXQgZXFsO1xuICAgICAgICBjb25zdCBnZXRFcWwgPSAoKSA9PiAoZXFsICE9PSBudWxsICYmIGVxbCAhPT0gdm9pZCAwID8gZXFsIDogKGVxbCA9ICgwLCB1dGlsXzEudXNlRnVuYykoZ2VuLCBlcXVhbF8xLmRlZmF1bHQpKSk7XG4gICAgICAgIGxldCB2YWxpZDtcbiAgICAgICAgaWYgKHVzZUxvb3AgfHwgJGRhdGEpIHtcbiAgICAgICAgICAgIHZhbGlkID0gZ2VuLmxldChcInZhbGlkXCIpO1xuICAgICAgICAgICAgY3h0LmJsb2NrJGRhdGEodmFsaWQsIGxvb3BFbnVtKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHNjaGVtYSkpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYWp2IGltcGxlbWVudGF0aW9uIGVycm9yXCIpO1xuICAgICAgICAgICAgY29uc3QgdlNjaGVtYSA9IGdlbi5jb25zdChcInZTY2hlbWFcIiwgc2NoZW1hQ29kZSk7XG4gICAgICAgICAgICB2YWxpZCA9ICgwLCBjb2RlZ2VuXzEub3IpKC4uLnNjaGVtYS5tYXAoKF94LCBpKSA9PiBlcXVhbENvZGUodlNjaGVtYSwgaSkpKTtcbiAgICAgICAgfVxuICAgICAgICBjeHQucGFzcyh2YWxpZCk7XG4gICAgICAgIGZ1bmN0aW9uIGxvb3BFbnVtKCkge1xuICAgICAgICAgICAgZ2VuLmFzc2lnbih2YWxpZCwgZmFsc2UpO1xuICAgICAgICAgICAgZ2VuLmZvck9mKFwidlwiLCBzY2hlbWFDb2RlLCAodikgPT4gZ2VuLmlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7Z2V0RXFsKCl9KCR7ZGF0YX0sICR7dn0pYCwgKCkgPT4gZ2VuLmFzc2lnbih2YWxpZCwgdHJ1ZSkuYnJlYWsoKSkpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGVxdWFsQ29kZSh2U2NoZW1hLCBpKSB7XG4gICAgICAgICAgICBjb25zdCBzY2ggPSBzY2hlbWFbaV07XG4gICAgICAgICAgICByZXR1cm4gdHlwZW9mIHNjaCA9PT0gXCJvYmplY3RcIiAmJiBzY2ggIT09IG51bGxcbiAgICAgICAgICAgICAgICA/ICgwLCBjb2RlZ2VuXzEuXykgYCR7Z2V0RXFsKCl9KCR7ZGF0YX0sICR7dlNjaGVtYX1bJHtpfV0pYFxuICAgICAgICAgICAgICAgIDogKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhfSA9PT0gJHtzY2h9YDtcbiAgICAgICAgfVxuICAgIH0sXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZW51bS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgbGltaXROdW1iZXJfMSA9IHJlcXVpcmUoXCIuL2xpbWl0TnVtYmVyXCIpO1xuY29uc3QgbXVsdGlwbGVPZl8xID0gcmVxdWlyZShcIi4vbXVsdGlwbGVPZlwiKTtcbmNvbnN0IGxpbWl0TGVuZ3RoXzEgPSByZXF1aXJlKFwiLi9saW1pdExlbmd0aFwiKTtcbmNvbnN0IHBhdHRlcm5fMSA9IHJlcXVpcmUoXCIuL3BhdHRlcm5cIik7XG5jb25zdCBsaW1pdFByb3BlcnRpZXNfMSA9IHJlcXVpcmUoXCIuL2xpbWl0UHJvcGVydGllc1wiKTtcbmNvbnN0IHJlcXVpcmVkXzEgPSByZXF1aXJlKFwiLi9yZXF1aXJlZFwiKTtcbmNvbnN0IGxpbWl0SXRlbXNfMSA9IHJlcXVpcmUoXCIuL2xpbWl0SXRlbXNcIik7XG5jb25zdCB1bmlxdWVJdGVtc18xID0gcmVxdWlyZShcIi4vdW5pcXVlSXRlbXNcIik7XG5jb25zdCBjb25zdF8xID0gcmVxdWlyZShcIi4vY29uc3RcIik7XG5jb25zdCBlbnVtXzEgPSByZXF1aXJlKFwiLi9lbnVtXCIpO1xuY29uc3QgdmFsaWRhdGlvbiA9IFtcbiAgICAvLyBudW1iZXJcbiAgICBsaW1pdE51bWJlcl8xLmRlZmF1bHQsXG4gICAgbXVsdGlwbGVPZl8xLmRlZmF1bHQsXG4gICAgLy8gc3RyaW5nXG4gICAgbGltaXRMZW5ndGhfMS5kZWZhdWx0LFxuICAgIHBhdHRlcm5fMS5kZWZhdWx0LFxuICAgIC8vIG9iamVjdFxuICAgIGxpbWl0UHJvcGVydGllc18xLmRlZmF1bHQsXG4gICAgcmVxdWlyZWRfMS5kZWZhdWx0LFxuICAgIC8vIGFycmF5XG4gICAgbGltaXRJdGVtc18xLmRlZmF1bHQsXG4gICAgdW5pcXVlSXRlbXNfMS5kZWZhdWx0LFxuICAgIC8vIGFueVxuICAgIHsga2V5d29yZDogXCJ0eXBlXCIsIHNjaGVtYVR5cGU6IFtcInN0cmluZ1wiLCBcImFycmF5XCJdIH0sXG4gICAgeyBrZXl3b3JkOiBcIm51bGxhYmxlXCIsIHNjaGVtYVR5cGU6IFwiYm9vbGVhblwiIH0sXG4gICAgY29uc3RfMS5kZWZhdWx0LFxuICAgIGVudW1fMS5kZWZhdWx0LFxuXTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZhbGlkYXRpb247XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy52YWxpZGF0ZUFkZGl0aW9uYWxJdGVtcyA9IHZvaWQgMDtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL2NvZGVnZW5cIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS91dGlsXCIpO1xuY29uc3QgZXJyb3IgPSB7XG4gICAgbWVzc2FnZTogKHsgcGFyYW1zOiB7IGxlbiB9IH0pID0+ICgwLCBjb2RlZ2VuXzEuc3RyKSBgbXVzdCBOT1QgaGF2ZSBtb3JlIHRoYW4gJHtsZW59IGl0ZW1zYCxcbiAgICBwYXJhbXM6ICh7IHBhcmFtczogeyBsZW4gfSB9KSA9PiAoMCwgY29kZWdlbl8xLl8pIGB7bGltaXQ6ICR7bGVufX1gLFxufTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcImFkZGl0aW9uYWxJdGVtc1wiLFxuICAgIHR5cGU6IFwiYXJyYXlcIixcbiAgICBzY2hlbWFUeXBlOiBbXCJib29sZWFuXCIsIFwib2JqZWN0XCJdLFxuICAgIGJlZm9yZTogXCJ1bmlxdWVJdGVtc1wiLFxuICAgIGVycm9yLFxuICAgIGNvZGUoY3h0KSB7XG4gICAgICAgIGNvbnN0IHsgcGFyZW50U2NoZW1hLCBpdCB9ID0gY3h0O1xuICAgICAgICBjb25zdCB7IGl0ZW1zIH0gPSBwYXJlbnRTY2hlbWE7XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShpdGVtcykpIHtcbiAgICAgICAgICAgICgwLCB1dGlsXzEuY2hlY2tTdHJpY3RNb2RlKShpdCwgJ1wiYWRkaXRpb25hbEl0ZW1zXCIgaXMgaWdub3JlZCB3aGVuIFwiaXRlbXNcIiBpcyBub3QgYW4gYXJyYXkgb2Ygc2NoZW1hcycpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHZhbGlkYXRlQWRkaXRpb25hbEl0ZW1zKGN4dCwgaXRlbXMpO1xuICAgIH0sXG59O1xuZnVuY3Rpb24gdmFsaWRhdGVBZGRpdGlvbmFsSXRlbXMoY3h0LCBpdGVtcykge1xuICAgIGNvbnN0IHsgZ2VuLCBzY2hlbWEsIGRhdGEsIGtleXdvcmQsIGl0IH0gPSBjeHQ7XG4gICAgaXQuaXRlbXMgPSB0cnVlO1xuICAgIGNvbnN0IGxlbiA9IGdlbi5jb25zdChcImxlblwiLCAoMCwgY29kZWdlbl8xLl8pIGAke2RhdGF9Lmxlbmd0aGApO1xuICAgIGlmIChzY2hlbWEgPT09IGZhbHNlKSB7XG4gICAgICAgIGN4dC5zZXRQYXJhbXMoeyBsZW46IGl0ZW1zLmxlbmd0aCB9KTtcbiAgICAgICAgY3h0LnBhc3MoKDAsIGNvZGVnZW5fMS5fKSBgJHtsZW59IDw9ICR7aXRlbXMubGVuZ3RofWApO1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlb2Ygc2NoZW1hID09IFwib2JqZWN0XCIgJiYgISgwLCB1dGlsXzEuYWx3YXlzVmFsaWRTY2hlbWEpKGl0LCBzY2hlbWEpKSB7XG4gICAgICAgIGNvbnN0IHZhbGlkID0gZ2VuLnZhcihcInZhbGlkXCIsICgwLCBjb2RlZ2VuXzEuXykgYCR7bGVufSA8PSAke2l0ZW1zLmxlbmd0aH1gKTsgLy8gVE9ETyB2YXJcbiAgICAgICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEubm90KSh2YWxpZCksICgpID0+IHZhbGlkYXRlSXRlbXModmFsaWQpKTtcbiAgICAgICAgY3h0Lm9rKHZhbGlkKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gdmFsaWRhdGVJdGVtcyh2YWxpZCkge1xuICAgICAgICBnZW4uZm9yUmFuZ2UoXCJpXCIsIGl0ZW1zLmxlbmd0aCwgbGVuLCAoaSkgPT4ge1xuICAgICAgICAgICAgY3h0LnN1YnNjaGVtYSh7IGtleXdvcmQsIGRhdGFQcm9wOiBpLCBkYXRhUHJvcFR5cGU6IHV0aWxfMS5UeXBlLk51bSB9LCB2YWxpZCk7XG4gICAgICAgICAgICBpZiAoIWl0LmFsbEVycm9ycylcbiAgICAgICAgICAgICAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5ub3QpKHZhbGlkKSwgKCkgPT4gZ2VuLmJyZWFrKCkpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5leHBvcnRzLnZhbGlkYXRlQWRkaXRpb25hbEl0ZW1zID0gdmFsaWRhdGVBZGRpdGlvbmFsSXRlbXM7XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1hZGRpdGlvbmFsSXRlbXMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudmFsaWRhdGVUdXBsZSA9IHZvaWQgMDtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL2NvZGVnZW5cIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS91dGlsXCIpO1xuY29uc3QgY29kZV8xID0gcmVxdWlyZShcIi4uL2NvZGVcIik7XG5jb25zdCBkZWYgPSB7XG4gICAga2V5d29yZDogXCJpdGVtc1wiLFxuICAgIHR5cGU6IFwiYXJyYXlcIixcbiAgICBzY2hlbWFUeXBlOiBbXCJvYmplY3RcIiwgXCJhcnJheVwiLCBcImJvb2xlYW5cIl0sXG4gICAgYmVmb3JlOiBcInVuaXF1ZUl0ZW1zXCIsXG4gICAgY29kZShjeHQpIHtcbiAgICAgICAgY29uc3QgeyBzY2hlbWEsIGl0IH0gPSBjeHQ7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHNjaGVtYSkpXG4gICAgICAgICAgICByZXR1cm4gdmFsaWRhdGVUdXBsZShjeHQsIFwiYWRkaXRpb25hbEl0ZW1zXCIsIHNjaGVtYSk7XG4gICAgICAgIGl0Lml0ZW1zID0gdHJ1ZTtcbiAgICAgICAgaWYgKCgwLCB1dGlsXzEuYWx3YXlzVmFsaWRTY2hlbWEpKGl0LCBzY2hlbWEpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjeHQub2soKDAsIGNvZGVfMS52YWxpZGF0ZUFycmF5KShjeHQpKTtcbiAgICB9LFxufTtcbmZ1bmN0aW9uIHZhbGlkYXRlVHVwbGUoY3h0LCBleHRyYUl0ZW1zLCBzY2hBcnIgPSBjeHQuc2NoZW1hKSB7XG4gICAgY29uc3QgeyBnZW4sIHBhcmVudFNjaGVtYSwgZGF0YSwga2V5d29yZCwgaXQgfSA9IGN4dDtcbiAgICBjaGVja1N0cmljdFR1cGxlKHBhcmVudFNjaGVtYSk7XG4gICAgaWYgKGl0Lm9wdHMudW5ldmFsdWF0ZWQgJiYgc2NoQXJyLmxlbmd0aCAmJiBpdC5pdGVtcyAhPT0gdHJ1ZSkge1xuICAgICAgICBpdC5pdGVtcyA9IHV0aWxfMS5tZXJnZUV2YWx1YXRlZC5pdGVtcyhnZW4sIHNjaEFyci5sZW5ndGgsIGl0Lml0ZW1zKTtcbiAgICB9XG4gICAgY29uc3QgdmFsaWQgPSBnZW4ubmFtZShcInZhbGlkXCIpO1xuICAgIGNvbnN0IGxlbiA9IGdlbi5jb25zdChcImxlblwiLCAoMCwgY29kZWdlbl8xLl8pIGAke2RhdGF9Lmxlbmd0aGApO1xuICAgIHNjaEFyci5mb3JFYWNoKChzY2gsIGkpID0+IHtcbiAgICAgICAgaWYgKCgwLCB1dGlsXzEuYWx3YXlzVmFsaWRTY2hlbWEpKGl0LCBzY2gpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5fKSBgJHtsZW59ID4gJHtpfWAsICgpID0+IGN4dC5zdWJzY2hlbWEoe1xuICAgICAgICAgICAga2V5d29yZCxcbiAgICAgICAgICAgIHNjaGVtYVByb3A6IGksXG4gICAgICAgICAgICBkYXRhUHJvcDogaSxcbiAgICAgICAgfSwgdmFsaWQpKTtcbiAgICAgICAgY3h0Lm9rKHZhbGlkKTtcbiAgICB9KTtcbiAgICBmdW5jdGlvbiBjaGVja1N0cmljdFR1cGxlKHNjaCkge1xuICAgICAgICBjb25zdCB7IG9wdHMsIGVyclNjaGVtYVBhdGggfSA9IGl0O1xuICAgICAgICBjb25zdCBsID0gc2NoQXJyLmxlbmd0aDtcbiAgICAgICAgY29uc3QgZnVsbFR1cGxlID0gbCA9PT0gc2NoLm1pbkl0ZW1zICYmIChsID09PSBzY2gubWF4SXRlbXMgfHwgc2NoW2V4dHJhSXRlbXNdID09PSBmYWxzZSk7XG4gICAgICAgIGlmIChvcHRzLnN0cmljdFR1cGxlcyAmJiAhZnVsbFR1cGxlKSB7XG4gICAgICAgICAgICBjb25zdCBtc2cgPSBgXCIke2tleXdvcmR9XCIgaXMgJHtsfS10dXBsZSwgYnV0IG1pbkl0ZW1zIG9yIG1heEl0ZW1zLyR7ZXh0cmFJdGVtc30gYXJlIG5vdCBzcGVjaWZpZWQgb3IgZGlmZmVyZW50IGF0IHBhdGggXCIke2VyclNjaGVtYVBhdGh9XCJgO1xuICAgICAgICAgICAgKDAsIHV0aWxfMS5jaGVja1N0cmljdE1vZGUpKGl0LCBtc2csIG9wdHMuc3RyaWN0VHVwbGVzKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydHMudmFsaWRhdGVUdXBsZSA9IHZhbGlkYXRlVHVwbGU7XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pdGVtcy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgaXRlbXNfMSA9IHJlcXVpcmUoXCIuL2l0ZW1zXCIpO1xuY29uc3QgZGVmID0ge1xuICAgIGtleXdvcmQ6IFwicHJlZml4SXRlbXNcIixcbiAgICB0eXBlOiBcImFycmF5XCIsXG4gICAgc2NoZW1hVHlwZTogW1wiYXJyYXlcIl0sXG4gICAgYmVmb3JlOiBcInVuaXF1ZUl0ZW1zXCIsXG4gICAgY29kZTogKGN4dCkgPT4gKDAsIGl0ZW1zXzEudmFsaWRhdGVUdXBsZSkoY3h0LCBcIml0ZW1zXCIpLFxufTtcbmV4cG9ydHMuZGVmYXVsdCA9IGRlZjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXByZWZpeEl0ZW1zLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS9jb2RlZ2VuXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvdXRpbFwiKTtcbmNvbnN0IGNvZGVfMSA9IHJlcXVpcmUoXCIuLi9jb2RlXCIpO1xuY29uc3QgYWRkaXRpb25hbEl0ZW1zXzEgPSByZXF1aXJlKFwiLi9hZGRpdGlvbmFsSXRlbXNcIik7XG5jb25zdCBlcnJvciA9IHtcbiAgICBtZXNzYWdlOiAoeyBwYXJhbXM6IHsgbGVuIH0gfSkgPT4gKDAsIGNvZGVnZW5fMS5zdHIpIGBtdXN0IE5PVCBoYXZlIG1vcmUgdGhhbiAke2xlbn0gaXRlbXNgLFxuICAgIHBhcmFtczogKHsgcGFyYW1zOiB7IGxlbiB9IH0pID0+ICgwLCBjb2RlZ2VuXzEuXykgYHtsaW1pdDogJHtsZW59fWAsXG59O1xuY29uc3QgZGVmID0ge1xuICAgIGtleXdvcmQ6IFwiaXRlbXNcIixcbiAgICB0eXBlOiBcImFycmF5XCIsXG4gICAgc2NoZW1hVHlwZTogW1wib2JqZWN0XCIsIFwiYm9vbGVhblwiXSxcbiAgICBiZWZvcmU6IFwidW5pcXVlSXRlbXNcIixcbiAgICBlcnJvcixcbiAgICBjb2RlKGN4dCkge1xuICAgICAgICBjb25zdCB7IHNjaGVtYSwgcGFyZW50U2NoZW1hLCBpdCB9ID0gY3h0O1xuICAgICAgICBjb25zdCB7IHByZWZpeEl0ZW1zIH0gPSBwYXJlbnRTY2hlbWE7XG4gICAgICAgIGl0Lml0ZW1zID0gdHJ1ZTtcbiAgICAgICAgaWYgKCgwLCB1dGlsXzEuYWx3YXlzVmFsaWRTY2hlbWEpKGl0LCBzY2hlbWEpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAocHJlZml4SXRlbXMpXG4gICAgICAgICAgICAoMCwgYWRkaXRpb25hbEl0ZW1zXzEudmFsaWRhdGVBZGRpdGlvbmFsSXRlbXMpKGN4dCwgcHJlZml4SXRlbXMpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICBjeHQub2soKDAsIGNvZGVfMS52YWxpZGF0ZUFycmF5KShjeHQpKTtcbiAgICB9LFxufTtcbmV4cG9ydHMuZGVmYXVsdCA9IGRlZjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWl0ZW1zMjAyMC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvY29kZWdlblwiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL3V0aWxcIik7XG5jb25zdCBlcnJvciA9IHtcbiAgICBtZXNzYWdlOiAoeyBwYXJhbXM6IHsgbWluLCBtYXggfSB9KSA9PiBtYXggPT09IHVuZGVmaW5lZFxuICAgICAgICA/ICgwLCBjb2RlZ2VuXzEuc3RyKSBgbXVzdCBjb250YWluIGF0IGxlYXN0ICR7bWlufSB2YWxpZCBpdGVtKHMpYFxuICAgICAgICA6ICgwLCBjb2RlZ2VuXzEuc3RyKSBgbXVzdCBjb250YWluIGF0IGxlYXN0ICR7bWlufSBhbmQgbm8gbW9yZSB0aGFuICR7bWF4fSB2YWxpZCBpdGVtKHMpYCxcbiAgICBwYXJhbXM6ICh7IHBhcmFtczogeyBtaW4sIG1heCB9IH0pID0+IG1heCA9PT0gdW5kZWZpbmVkID8gKDAsIGNvZGVnZW5fMS5fKSBge21pbkNvbnRhaW5zOiAke21pbn19YCA6ICgwLCBjb2RlZ2VuXzEuXykgYHttaW5Db250YWluczogJHttaW59LCBtYXhDb250YWluczogJHttYXh9fWAsXG59O1xuY29uc3QgZGVmID0ge1xuICAgIGtleXdvcmQ6IFwiY29udGFpbnNcIixcbiAgICB0eXBlOiBcImFycmF5XCIsXG4gICAgc2NoZW1hVHlwZTogW1wib2JqZWN0XCIsIFwiYm9vbGVhblwiXSxcbiAgICBiZWZvcmU6IFwidW5pcXVlSXRlbXNcIixcbiAgICB0cmFja0Vycm9yczogdHJ1ZSxcbiAgICBlcnJvcixcbiAgICBjb2RlKGN4dCkge1xuICAgICAgICBjb25zdCB7IGdlbiwgc2NoZW1hLCBwYXJlbnRTY2hlbWEsIGRhdGEsIGl0IH0gPSBjeHQ7XG4gICAgICAgIGxldCBtaW47XG4gICAgICAgIGxldCBtYXg7XG4gICAgICAgIGNvbnN0IHsgbWluQ29udGFpbnMsIG1heENvbnRhaW5zIH0gPSBwYXJlbnRTY2hlbWE7XG4gICAgICAgIGlmIChpdC5vcHRzLm5leHQpIHtcbiAgICAgICAgICAgIG1pbiA9IG1pbkNvbnRhaW5zID09PSB1bmRlZmluZWQgPyAxIDogbWluQ29udGFpbnM7XG4gICAgICAgICAgICBtYXggPSBtYXhDb250YWlucztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIG1pbiA9IDE7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbGVuID0gZ2VuLmNvbnN0KFwibGVuXCIsICgwLCBjb2RlZ2VuXzEuXykgYCR7ZGF0YX0ubGVuZ3RoYCk7XG4gICAgICAgIGN4dC5zZXRQYXJhbXMoeyBtaW4sIG1heCB9KTtcbiAgICAgICAgaWYgKG1heCA9PT0gdW5kZWZpbmVkICYmIG1pbiA9PT0gMCkge1xuICAgICAgICAgICAgKDAsIHV0aWxfMS5jaGVja1N0cmljdE1vZGUpKGl0LCBgXCJtaW5Db250YWluc1wiID09IDAgd2l0aG91dCBcIm1heENvbnRhaW5zXCI6IFwiY29udGFpbnNcIiBrZXl3b3JkIGlnbm9yZWRgKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWF4ICE9PSB1bmRlZmluZWQgJiYgbWluID4gbWF4KSB7XG4gICAgICAgICAgICAoMCwgdXRpbF8xLmNoZWNrU3RyaWN0TW9kZSkoaXQsIGBcIm1pbkNvbnRhaW5zXCIgPiBcIm1heENvbnRhaW5zXCIgaXMgYWx3YXlzIGludmFsaWRgKTtcbiAgICAgICAgICAgIGN4dC5mYWlsKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCgwLCB1dGlsXzEuYWx3YXlzVmFsaWRTY2hlbWEpKGl0LCBzY2hlbWEpKSB7XG4gICAgICAgICAgICBsZXQgY29uZCA9ICgwLCBjb2RlZ2VuXzEuXykgYCR7bGVufSA+PSAke21pbn1gO1xuICAgICAgICAgICAgaWYgKG1heCAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIGNvbmQgPSAoMCwgY29kZWdlbl8xLl8pIGAke2NvbmR9ICYmICR7bGVufSA8PSAke21heH1gO1xuICAgICAgICAgICAgY3h0LnBhc3MoY29uZCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaXQuaXRlbXMgPSB0cnVlO1xuICAgICAgICBjb25zdCB2YWxpZCA9IGdlbi5uYW1lKFwidmFsaWRcIik7XG4gICAgICAgIGlmIChtYXggPT09IHVuZGVmaW5lZCAmJiBtaW4gPT09IDEpIHtcbiAgICAgICAgICAgIHZhbGlkYXRlSXRlbXModmFsaWQsICgpID0+IGdlbi5pZih2YWxpZCwgKCkgPT4gZ2VuLmJyZWFrKCkpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChtaW4gPT09IDApIHtcbiAgICAgICAgICAgIGdlbi5sZXQodmFsaWQsIHRydWUpO1xuICAgICAgICAgICAgaWYgKG1heCAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGAke2RhdGF9Lmxlbmd0aCA+IDBgLCB2YWxpZGF0ZUl0ZW1zV2l0aENvdW50KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGdlbi5sZXQodmFsaWQsIGZhbHNlKTtcbiAgICAgICAgICAgIHZhbGlkYXRlSXRlbXNXaXRoQ291bnQoKTtcbiAgICAgICAgfVxuICAgICAgICBjeHQucmVzdWx0KHZhbGlkLCAoKSA9PiBjeHQucmVzZXQoKSk7XG4gICAgICAgIGZ1bmN0aW9uIHZhbGlkYXRlSXRlbXNXaXRoQ291bnQoKSB7XG4gICAgICAgICAgICBjb25zdCBzY2hWYWxpZCA9IGdlbi5uYW1lKFwiX3ZhbGlkXCIpO1xuICAgICAgICAgICAgY29uc3QgY291bnQgPSBnZW4ubGV0KFwiY291bnRcIiwgMCk7XG4gICAgICAgICAgICB2YWxpZGF0ZUl0ZW1zKHNjaFZhbGlkLCAoKSA9PiBnZW4uaWYoc2NoVmFsaWQsICgpID0+IGNoZWNrTGltaXRzKGNvdW50KSkpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHZhbGlkYXRlSXRlbXMoX3ZhbGlkLCBibG9jaykge1xuICAgICAgICAgICAgZ2VuLmZvclJhbmdlKFwiaVwiLCAwLCBsZW4sIChpKSA9PiB7XG4gICAgICAgICAgICAgICAgY3h0LnN1YnNjaGVtYSh7XG4gICAgICAgICAgICAgICAgICAgIGtleXdvcmQ6IFwiY29udGFpbnNcIixcbiAgICAgICAgICAgICAgICAgICAgZGF0YVByb3A6IGksXG4gICAgICAgICAgICAgICAgICAgIGRhdGFQcm9wVHlwZTogdXRpbF8xLlR5cGUuTnVtLFxuICAgICAgICAgICAgICAgICAgICBjb21wb3NpdGVSdWxlOiB0cnVlLFxuICAgICAgICAgICAgICAgIH0sIF92YWxpZCk7XG4gICAgICAgICAgICAgICAgYmxvY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGNoZWNrTGltaXRzKGNvdW50KSB7XG4gICAgICAgICAgICBnZW4uY29kZSgoMCwgY29kZWdlbl8xLl8pIGAke2NvdW50fSsrYCk7XG4gICAgICAgICAgICBpZiAobWF4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5fKSBgJHtjb3VudH0gPj0gJHttaW59YCwgKCkgPT4gZ2VuLmFzc2lnbih2YWxpZCwgdHJ1ZSkuYnJlYWsoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5fKSBgJHtjb3VudH0gPiAke21heH1gLCAoKSA9PiBnZW4uYXNzaWduKHZhbGlkLCBmYWxzZSkuYnJlYWsoKSk7XG4gICAgICAgICAgICAgICAgaWYgKG1pbiA9PT0gMSlcbiAgICAgICAgICAgICAgICAgICAgZ2VuLmFzc2lnbih2YWxpZCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5fKSBgJHtjb3VudH0gPj0gJHttaW59YCwgKCkgPT4gZ2VuLmFzc2lnbih2YWxpZCwgdHJ1ZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb250YWlucy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy52YWxpZGF0ZVNjaGVtYURlcHMgPSBleHBvcnRzLnZhbGlkYXRlUHJvcGVydHlEZXBzID0gZXhwb3J0cy5lcnJvciA9IHZvaWQgMDtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL2NvZGVnZW5cIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS91dGlsXCIpO1xuY29uc3QgY29kZV8xID0gcmVxdWlyZShcIi4uL2NvZGVcIik7XG5leHBvcnRzLmVycm9yID0ge1xuICAgIG1lc3NhZ2U6ICh7IHBhcmFtczogeyBwcm9wZXJ0eSwgZGVwc0NvdW50LCBkZXBzIH0gfSkgPT4ge1xuICAgICAgICBjb25zdCBwcm9wZXJ0eV9pZXMgPSBkZXBzQ291bnQgPT09IDEgPyBcInByb3BlcnR5XCIgOiBcInByb3BlcnRpZXNcIjtcbiAgICAgICAgcmV0dXJuICgwLCBjb2RlZ2VuXzEuc3RyKSBgbXVzdCBoYXZlICR7cHJvcGVydHlfaWVzfSAke2RlcHN9IHdoZW4gcHJvcGVydHkgJHtwcm9wZXJ0eX0gaXMgcHJlc2VudGA7XG4gICAgfSxcbiAgICBwYXJhbXM6ICh7IHBhcmFtczogeyBwcm9wZXJ0eSwgZGVwc0NvdW50LCBkZXBzLCBtaXNzaW5nUHJvcGVydHkgfSB9KSA9PiAoMCwgY29kZWdlbl8xLl8pIGB7cHJvcGVydHk6ICR7cHJvcGVydHl9LFxuICAgIG1pc3NpbmdQcm9wZXJ0eTogJHttaXNzaW5nUHJvcGVydHl9LFxuICAgIGRlcHNDb3VudDogJHtkZXBzQ291bnR9LFxuICAgIGRlcHM6ICR7ZGVwc319YCwgLy8gVE9ETyBjaGFuZ2UgdG8gcmVmZXJlbmNlXG59O1xuY29uc3QgZGVmID0ge1xuICAgIGtleXdvcmQ6IFwiZGVwZW5kZW5jaWVzXCIsXG4gICAgdHlwZTogXCJvYmplY3RcIixcbiAgICBzY2hlbWFUeXBlOiBcIm9iamVjdFwiLFxuICAgIGVycm9yOiBleHBvcnRzLmVycm9yLFxuICAgIGNvZGUoY3h0KSB7XG4gICAgICAgIGNvbnN0IFtwcm9wRGVwcywgc2NoRGVwc10gPSBzcGxpdERlcGVuZGVuY2llcyhjeHQpO1xuICAgICAgICB2YWxpZGF0ZVByb3BlcnR5RGVwcyhjeHQsIHByb3BEZXBzKTtcbiAgICAgICAgdmFsaWRhdGVTY2hlbWFEZXBzKGN4dCwgc2NoRGVwcyk7XG4gICAgfSxcbn07XG5mdW5jdGlvbiBzcGxpdERlcGVuZGVuY2llcyh7IHNjaGVtYSB9KSB7XG4gICAgY29uc3QgcHJvcGVydHlEZXBzID0ge307XG4gICAgY29uc3Qgc2NoZW1hRGVwcyA9IHt9O1xuICAgIGZvciAoY29uc3Qga2V5IGluIHNjaGVtYSkge1xuICAgICAgICBpZiAoa2V5ID09PSBcIl9fcHJvdG9fX1wiKVxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNvbnN0IGRlcHMgPSBBcnJheS5pc0FycmF5KHNjaGVtYVtrZXldKSA/IHByb3BlcnR5RGVwcyA6IHNjaGVtYURlcHM7XG4gICAgICAgIGRlcHNba2V5XSA9IHNjaGVtYVtrZXldO1xuICAgIH1cbiAgICByZXR1cm4gW3Byb3BlcnR5RGVwcywgc2NoZW1hRGVwc107XG59XG5mdW5jdGlvbiB2YWxpZGF0ZVByb3BlcnR5RGVwcyhjeHQsIHByb3BlcnR5RGVwcyA9IGN4dC5zY2hlbWEpIHtcbiAgICBjb25zdCB7IGdlbiwgZGF0YSwgaXQgfSA9IGN4dDtcbiAgICBpZiAoT2JqZWN0LmtleXMocHJvcGVydHlEZXBzKS5sZW5ndGggPT09IDApXG4gICAgICAgIHJldHVybjtcbiAgICBjb25zdCBtaXNzaW5nID0gZ2VuLmxldChcIm1pc3NpbmdcIik7XG4gICAgZm9yIChjb25zdCBwcm9wIGluIHByb3BlcnR5RGVwcykge1xuICAgICAgICBjb25zdCBkZXBzID0gcHJvcGVydHlEZXBzW3Byb3BdO1xuICAgICAgICBpZiAoZGVwcy5sZW5ndGggPT09IDApXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY29uc3QgaGFzUHJvcGVydHkgPSAoMCwgY29kZV8xLnByb3BlcnR5SW5EYXRhKShnZW4sIGRhdGEsIHByb3AsIGl0Lm9wdHMub3duUHJvcGVydGllcyk7XG4gICAgICAgIGN4dC5zZXRQYXJhbXMoe1xuICAgICAgICAgICAgcHJvcGVydHk6IHByb3AsXG4gICAgICAgICAgICBkZXBzQ291bnQ6IGRlcHMubGVuZ3RoLFxuICAgICAgICAgICAgZGVwczogZGVwcy5qb2luKFwiLCBcIiksXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoaXQuYWxsRXJyb3JzKSB7XG4gICAgICAgICAgICBnZW4uaWYoaGFzUHJvcGVydHksICgpID0+IHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGRlcFByb3Agb2YgZGVwcykge1xuICAgICAgICAgICAgICAgICAgICAoMCwgY29kZV8xLmNoZWNrUmVwb3J0TWlzc2luZ1Byb3ApKGN4dCwgZGVwUHJvcCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5fKSBgJHtoYXNQcm9wZXJ0eX0gJiYgKCR7KDAsIGNvZGVfMS5jaGVja01pc3NpbmdQcm9wKShjeHQsIGRlcHMsIG1pc3NpbmcpfSlgKTtcbiAgICAgICAgICAgICgwLCBjb2RlXzEucmVwb3J0TWlzc2luZ1Byb3ApKGN4dCwgbWlzc2luZyk7XG4gICAgICAgICAgICBnZW4uZWxzZSgpO1xuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0cy52YWxpZGF0ZVByb3BlcnR5RGVwcyA9IHZhbGlkYXRlUHJvcGVydHlEZXBzO1xuZnVuY3Rpb24gdmFsaWRhdGVTY2hlbWFEZXBzKGN4dCwgc2NoZW1hRGVwcyA9IGN4dC5zY2hlbWEpIHtcbiAgICBjb25zdCB7IGdlbiwgZGF0YSwga2V5d29yZCwgaXQgfSA9IGN4dDtcbiAgICBjb25zdCB2YWxpZCA9IGdlbi5uYW1lKFwidmFsaWRcIik7XG4gICAgZm9yIChjb25zdCBwcm9wIGluIHNjaGVtYURlcHMpIHtcbiAgICAgICAgaWYgKCgwLCB1dGlsXzEuYWx3YXlzVmFsaWRTY2hlbWEpKGl0LCBzY2hlbWFEZXBzW3Byb3BdKSlcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBnZW4uaWYoKDAsIGNvZGVfMS5wcm9wZXJ0eUluRGF0YSkoZ2VuLCBkYXRhLCBwcm9wLCBpdC5vcHRzLm93blByb3BlcnRpZXMpLCAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzY2hDeHQgPSBjeHQuc3Vic2NoZW1hKHsga2V5d29yZCwgc2NoZW1hUHJvcDogcHJvcCB9LCB2YWxpZCk7XG4gICAgICAgICAgICBjeHQubWVyZ2VWYWxpZEV2YWx1YXRlZChzY2hDeHQsIHZhbGlkKTtcbiAgICAgICAgfSwgKCkgPT4gZ2VuLnZhcih2YWxpZCwgdHJ1ZSkgLy8gVE9ETyB2YXJcbiAgICAgICAgKTtcbiAgICAgICAgY3h0Lm9rKHZhbGlkKTtcbiAgICB9XG59XG5leHBvcnRzLnZhbGlkYXRlU2NoZW1hRGVwcyA9IHZhbGlkYXRlU2NoZW1hRGVwcztcbmV4cG9ydHMuZGVmYXVsdCA9IGRlZjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRlcGVuZGVuY2llcy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvY29kZWdlblwiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL3V0aWxcIik7XG5jb25zdCBlcnJvciA9IHtcbiAgICBtZXNzYWdlOiBcInByb3BlcnR5IG5hbWUgbXVzdCBiZSB2YWxpZFwiLFxuICAgIHBhcmFtczogKHsgcGFyYW1zIH0pID0+ICgwLCBjb2RlZ2VuXzEuXykgYHtwcm9wZXJ0eU5hbWU6ICR7cGFyYW1zLnByb3BlcnR5TmFtZX19YCxcbn07XG5jb25zdCBkZWYgPSB7XG4gICAga2V5d29yZDogXCJwcm9wZXJ0eU5hbWVzXCIsXG4gICAgdHlwZTogXCJvYmplY3RcIixcbiAgICBzY2hlbWFUeXBlOiBbXCJvYmplY3RcIiwgXCJib29sZWFuXCJdLFxuICAgIGVycm9yLFxuICAgIGNvZGUoY3h0KSB7XG4gICAgICAgIGNvbnN0IHsgZ2VuLCBzY2hlbWEsIGRhdGEsIGl0IH0gPSBjeHQ7XG4gICAgICAgIGlmICgoMCwgdXRpbF8xLmFsd2F5c1ZhbGlkU2NoZW1hKShpdCwgc2NoZW1hKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3QgdmFsaWQgPSBnZW4ubmFtZShcInZhbGlkXCIpO1xuICAgICAgICBnZW4uZm9ySW4oXCJrZXlcIiwgZGF0YSwgKGtleSkgPT4ge1xuICAgICAgICAgICAgY3h0LnNldFBhcmFtcyh7IHByb3BlcnR5TmFtZToga2V5IH0pO1xuICAgICAgICAgICAgY3h0LnN1YnNjaGVtYSh7XG4gICAgICAgICAgICAgICAga2V5d29yZDogXCJwcm9wZXJ0eU5hbWVzXCIsXG4gICAgICAgICAgICAgICAgZGF0YToga2V5LFxuICAgICAgICAgICAgICAgIGRhdGFUeXBlczogW1wic3RyaW5nXCJdLFxuICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZToga2V5LFxuICAgICAgICAgICAgICAgIGNvbXBvc2l0ZVJ1bGU6IHRydWUsXG4gICAgICAgICAgICB9LCB2YWxpZCk7XG4gICAgICAgICAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5ub3QpKHZhbGlkKSwgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGN4dC5lcnJvcih0cnVlKTtcbiAgICAgICAgICAgICAgICBpZiAoIWl0LmFsbEVycm9ycylcbiAgICAgICAgICAgICAgICAgICAgZ2VuLmJyZWFrKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGN4dC5vayh2YWxpZCk7XG4gICAgfSxcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wcm9wZXJ0eU5hbWVzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBjb2RlXzEgPSByZXF1aXJlKFwiLi4vY29kZVwiKTtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL2NvZGVnZW5cIik7XG5jb25zdCBuYW1lc18xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvbmFtZXNcIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS91dGlsXCIpO1xuY29uc3QgZXJyb3IgPSB7XG4gICAgbWVzc2FnZTogXCJtdXN0IE5PVCBoYXZlIGFkZGl0aW9uYWwgcHJvcGVydGllc1wiLFxuICAgIHBhcmFtczogKHsgcGFyYW1zIH0pID0+ICgwLCBjb2RlZ2VuXzEuXykgYHthZGRpdGlvbmFsUHJvcGVydHk6ICR7cGFyYW1zLmFkZGl0aW9uYWxQcm9wZXJ0eX19YCxcbn07XG5jb25zdCBkZWYgPSB7XG4gICAga2V5d29yZDogXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiLFxuICAgIHR5cGU6IFtcIm9iamVjdFwiXSxcbiAgICBzY2hlbWFUeXBlOiBbXCJib29sZWFuXCIsIFwib2JqZWN0XCJdLFxuICAgIGFsbG93VW5kZWZpbmVkOiB0cnVlLFxuICAgIHRyYWNrRXJyb3JzOiB0cnVlLFxuICAgIGVycm9yLFxuICAgIGNvZGUoY3h0KSB7XG4gICAgICAgIGNvbnN0IHsgZ2VuLCBzY2hlbWEsIHBhcmVudFNjaGVtYSwgZGF0YSwgZXJyc0NvdW50LCBpdCB9ID0gY3h0O1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgaWYgKCFlcnJzQ291bnQpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJhanYgaW1wbGVtZW50YXRpb24gZXJyb3JcIik7XG4gICAgICAgIGNvbnN0IHsgYWxsRXJyb3JzLCBvcHRzIH0gPSBpdDtcbiAgICAgICAgaXQucHJvcHMgPSB0cnVlO1xuICAgICAgICBpZiAob3B0cy5yZW1vdmVBZGRpdGlvbmFsICE9PSBcImFsbFwiICYmICgwLCB1dGlsXzEuYWx3YXlzVmFsaWRTY2hlbWEpKGl0LCBzY2hlbWEpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCBwcm9wcyA9ICgwLCBjb2RlXzEuYWxsU2NoZW1hUHJvcGVydGllcykocGFyZW50U2NoZW1hLnByb3BlcnRpZXMpO1xuICAgICAgICBjb25zdCBwYXRQcm9wcyA9ICgwLCBjb2RlXzEuYWxsU2NoZW1hUHJvcGVydGllcykocGFyZW50U2NoZW1hLnBhdHRlcm5Qcm9wZXJ0aWVzKTtcbiAgICAgICAgY2hlY2tBZGRpdGlvbmFsUHJvcGVydGllcygpO1xuICAgICAgICBjeHQub2soKDAsIGNvZGVnZW5fMS5fKSBgJHtlcnJzQ291bnR9ID09PSAke25hbWVzXzEuZGVmYXVsdC5lcnJvcnN9YCk7XG4gICAgICAgIGZ1bmN0aW9uIGNoZWNrQWRkaXRpb25hbFByb3BlcnRpZXMoKSB7XG4gICAgICAgICAgICBnZW4uZm9ySW4oXCJrZXlcIiwgZGF0YSwgKGtleSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghcHJvcHMubGVuZ3RoICYmICFwYXRQcm9wcy5sZW5ndGgpXG4gICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0eUNvZGUoa2V5KTtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIGdlbi5pZihpc0FkZGl0aW9uYWwoa2V5KSwgKCkgPT4gYWRkaXRpb25hbFByb3BlcnR5Q29kZShrZXkpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGlzQWRkaXRpb25hbChrZXkpIHtcbiAgICAgICAgICAgIGxldCBkZWZpbmVkUHJvcDtcbiAgICAgICAgICAgIGlmIChwcm9wcy5sZW5ndGggPiA4KSB7XG4gICAgICAgICAgICAgICAgLy8gVE9ETyBtYXliZSBhbiBvcHRpb24gaW5zdGVhZCBvZiBoYXJkLWNvZGVkIDg/XG4gICAgICAgICAgICAgICAgY29uc3QgcHJvcHNTY2hlbWEgPSAoMCwgdXRpbF8xLnNjaGVtYVJlZk9yVmFsKShpdCwgcGFyZW50U2NoZW1hLnByb3BlcnRpZXMsIFwicHJvcGVydGllc1wiKTtcbiAgICAgICAgICAgICAgICBkZWZpbmVkUHJvcCA9ICgwLCBjb2RlXzEuaXNPd25Qcm9wZXJ0eSkoZ2VuLCBwcm9wc1NjaGVtYSwga2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHByb3BzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGRlZmluZWRQcm9wID0gKDAsIGNvZGVnZW5fMS5vcikoLi4ucHJvcHMubWFwKChwKSA9PiAoMCwgY29kZWdlbl8xLl8pIGAke2tleX0gPT09ICR7cH1gKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBkZWZpbmVkUHJvcCA9IGNvZGVnZW5fMS5uaWw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocGF0UHJvcHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgZGVmaW5lZFByb3AgPSAoMCwgY29kZWdlbl8xLm9yKShkZWZpbmVkUHJvcCwgLi4ucGF0UHJvcHMubWFwKChwKSA9PiAoMCwgY29kZWdlbl8xLl8pIGAkeygwLCBjb2RlXzEudXNlUGF0dGVybikoY3h0LCBwKX0udGVzdCgke2tleX0pYCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuICgwLCBjb2RlZ2VuXzEubm90KShkZWZpbmVkUHJvcCk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gZGVsZXRlQWRkaXRpb25hbChrZXkpIHtcbiAgICAgICAgICAgIGdlbi5jb2RlKCgwLCBjb2RlZ2VuXzEuXykgYGRlbGV0ZSAke2RhdGF9WyR7a2V5fV1gKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBhZGRpdGlvbmFsUHJvcGVydHlDb2RlKGtleSkge1xuICAgICAgICAgICAgaWYgKG9wdHMucmVtb3ZlQWRkaXRpb25hbCA9PT0gXCJhbGxcIiB8fCAob3B0cy5yZW1vdmVBZGRpdGlvbmFsICYmIHNjaGVtYSA9PT0gZmFsc2UpKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlQWRkaXRpb25hbChrZXkpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzY2hlbWEgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgY3h0LnNldFBhcmFtcyh7IGFkZGl0aW9uYWxQcm9wZXJ0eToga2V5IH0pO1xuICAgICAgICAgICAgICAgIGN4dC5lcnJvcigpO1xuICAgICAgICAgICAgICAgIGlmICghYWxsRXJyb3JzKVxuICAgICAgICAgICAgICAgICAgICBnZW4uYnJlYWsoKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHlwZW9mIHNjaGVtYSA9PSBcIm9iamVjdFwiICYmICEoMCwgdXRpbF8xLmFsd2F5c1ZhbGlkU2NoZW1hKShpdCwgc2NoZW1hKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbGlkID0gZ2VuLm5hbWUoXCJ2YWxpZFwiKTtcbiAgICAgICAgICAgICAgICBpZiAob3B0cy5yZW1vdmVBZGRpdGlvbmFsID09PSBcImZhaWxpbmdcIikge1xuICAgICAgICAgICAgICAgICAgICBhcHBseUFkZGl0aW9uYWxTY2hlbWEoa2V5LCB2YWxpZCwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5ub3QpKHZhbGlkKSwgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3h0LnJlc2V0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGVBZGRpdGlvbmFsKGtleSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYXBwbHlBZGRpdGlvbmFsU2NoZW1hKGtleSwgdmFsaWQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWFsbEVycm9ycylcbiAgICAgICAgICAgICAgICAgICAgICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLm5vdCkodmFsaWQpLCAoKSA9PiBnZW4uYnJlYWsoKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGFwcGx5QWRkaXRpb25hbFNjaGVtYShrZXksIHZhbGlkLCBlcnJvcnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHN1YnNjaGVtYSA9IHtcbiAgICAgICAgICAgICAgICBrZXl3b3JkOiBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCIsXG4gICAgICAgICAgICAgICAgZGF0YVByb3A6IGtleSxcbiAgICAgICAgICAgICAgICBkYXRhUHJvcFR5cGU6IHV0aWxfMS5UeXBlLlN0cixcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAoZXJyb3JzID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oc3Vic2NoZW1hLCB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvc2l0ZVJ1bGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGNyZWF0ZUVycm9yczogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIGFsbEVycm9yczogZmFsc2UsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjeHQuc3Vic2NoZW1hKHN1YnNjaGVtYSwgdmFsaWQpO1xuICAgICAgICB9XG4gICAgfSxcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1hZGRpdGlvbmFsUHJvcGVydGllcy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgdmFsaWRhdGVfMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL3ZhbGlkYXRlXCIpO1xuY29uc3QgY29kZV8xID0gcmVxdWlyZShcIi4uL2NvZGVcIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS91dGlsXCIpO1xuY29uc3QgYWRkaXRpb25hbFByb3BlcnRpZXNfMSA9IHJlcXVpcmUoXCIuL2FkZGl0aW9uYWxQcm9wZXJ0aWVzXCIpO1xuY29uc3QgZGVmID0ge1xuICAgIGtleXdvcmQ6IFwicHJvcGVydGllc1wiLFxuICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgc2NoZW1hVHlwZTogXCJvYmplY3RcIixcbiAgICBjb2RlKGN4dCkge1xuICAgICAgICBjb25zdCB7IGdlbiwgc2NoZW1hLCBwYXJlbnRTY2hlbWEsIGRhdGEsIGl0IH0gPSBjeHQ7XG4gICAgICAgIGlmIChpdC5vcHRzLnJlbW92ZUFkZGl0aW9uYWwgPT09IFwiYWxsXCIgJiYgcGFyZW50U2NoZW1hLmFkZGl0aW9uYWxQcm9wZXJ0aWVzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzXzEuZGVmYXVsdC5jb2RlKG5ldyB2YWxpZGF0ZV8xLktleXdvcmRDeHQoaXQsIGFkZGl0aW9uYWxQcm9wZXJ0aWVzXzEuZGVmYXVsdCwgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiKSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYWxsUHJvcHMgPSAoMCwgY29kZV8xLmFsbFNjaGVtYVByb3BlcnRpZXMpKHNjaGVtYSk7XG4gICAgICAgIGZvciAoY29uc3QgcHJvcCBvZiBhbGxQcm9wcykge1xuICAgICAgICAgICAgaXQuZGVmaW5lZFByb3BlcnRpZXMuYWRkKHByb3ApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpdC5vcHRzLnVuZXZhbHVhdGVkICYmIGFsbFByb3BzLmxlbmd0aCAmJiBpdC5wcm9wcyAhPT0gdHJ1ZSkge1xuICAgICAgICAgICAgaXQucHJvcHMgPSB1dGlsXzEubWVyZ2VFdmFsdWF0ZWQucHJvcHMoZ2VuLCAoMCwgdXRpbF8xLnRvSGFzaCkoYWxsUHJvcHMpLCBpdC5wcm9wcyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcHJvcGVydGllcyA9IGFsbFByb3BzLmZpbHRlcigocCkgPT4gISgwLCB1dGlsXzEuYWx3YXlzVmFsaWRTY2hlbWEpKGl0LCBzY2hlbWFbcF0pKTtcbiAgICAgICAgaWYgKHByb3BlcnRpZXMubGVuZ3RoID09PSAwKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCB2YWxpZCA9IGdlbi5uYW1lKFwidmFsaWRcIik7XG4gICAgICAgIGZvciAoY29uc3QgcHJvcCBvZiBwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICBpZiAoaGFzRGVmYXVsdChwcm9wKSkge1xuICAgICAgICAgICAgICAgIGFwcGx5UHJvcGVydHlTY2hlbWEocHJvcCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBnZW4uaWYoKDAsIGNvZGVfMS5wcm9wZXJ0eUluRGF0YSkoZ2VuLCBkYXRhLCBwcm9wLCBpdC5vcHRzLm93blByb3BlcnRpZXMpKTtcbiAgICAgICAgICAgICAgICBhcHBseVByb3BlcnR5U2NoZW1hKHByb3ApO1xuICAgICAgICAgICAgICAgIGlmICghaXQuYWxsRXJyb3JzKVxuICAgICAgICAgICAgICAgICAgICBnZW4uZWxzZSgpLnZhcih2YWxpZCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgZ2VuLmVuZElmKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjeHQuaXQuZGVmaW5lZFByb3BlcnRpZXMuYWRkKHByb3ApO1xuICAgICAgICAgICAgY3h0Lm9rKHZhbGlkKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBoYXNEZWZhdWx0KHByb3ApIHtcbiAgICAgICAgICAgIHJldHVybiBpdC5vcHRzLnVzZURlZmF1bHRzICYmICFpdC5jb21wb3NpdGVSdWxlICYmIHNjaGVtYVtwcm9wXS5kZWZhdWx0ICE9PSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gYXBwbHlQcm9wZXJ0eVNjaGVtYShwcm9wKSB7XG4gICAgICAgICAgICBjeHQuc3Vic2NoZW1hKHtcbiAgICAgICAgICAgICAgICBrZXl3b3JkOiBcInByb3BlcnRpZXNcIixcbiAgICAgICAgICAgICAgICBzY2hlbWFQcm9wOiBwcm9wLFxuICAgICAgICAgICAgICAgIGRhdGFQcm9wOiBwcm9wLFxuICAgICAgICAgICAgfSwgdmFsaWQpO1xuICAgICAgICB9XG4gICAgfSxcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wcm9wZXJ0aWVzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBjb2RlXzEgPSByZXF1aXJlKFwiLi4vY29kZVwiKTtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL2NvZGVnZW5cIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS91dGlsXCIpO1xuY29uc3QgdXRpbF8yID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvdXRpbFwiKTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcInBhdHRlcm5Qcm9wZXJ0aWVzXCIsXG4gICAgdHlwZTogXCJvYmplY3RcIixcbiAgICBzY2hlbWFUeXBlOiBcIm9iamVjdFwiLFxuICAgIGNvZGUoY3h0KSB7XG4gICAgICAgIGNvbnN0IHsgZ2VuLCBzY2hlbWEsIGRhdGEsIHBhcmVudFNjaGVtYSwgaXQgfSA9IGN4dDtcbiAgICAgICAgY29uc3QgeyBvcHRzIH0gPSBpdDtcbiAgICAgICAgY29uc3QgcGF0dGVybnMgPSAoMCwgY29kZV8xLmFsbFNjaGVtYVByb3BlcnRpZXMpKHNjaGVtYSk7XG4gICAgICAgIGNvbnN0IGFsd2F5c1ZhbGlkUGF0dGVybnMgPSBwYXR0ZXJucy5maWx0ZXIoKHApID0+ICgwLCB1dGlsXzEuYWx3YXlzVmFsaWRTY2hlbWEpKGl0LCBzY2hlbWFbcF0pKTtcbiAgICAgICAgaWYgKHBhdHRlcm5zLmxlbmd0aCA9PT0gMCB8fFxuICAgICAgICAgICAgKGFsd2F5c1ZhbGlkUGF0dGVybnMubGVuZ3RoID09PSBwYXR0ZXJucy5sZW5ndGggJiZcbiAgICAgICAgICAgICAgICAoIWl0Lm9wdHMudW5ldmFsdWF0ZWQgfHwgaXQucHJvcHMgPT09IHRydWUpKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNoZWNrUHJvcGVydGllcyA9IG9wdHMuc3RyaWN0U2NoZW1hICYmICFvcHRzLmFsbG93TWF0Y2hpbmdQcm9wZXJ0aWVzICYmIHBhcmVudFNjaGVtYS5wcm9wZXJ0aWVzO1xuICAgICAgICBjb25zdCB2YWxpZCA9IGdlbi5uYW1lKFwidmFsaWRcIik7XG4gICAgICAgIGlmIChpdC5wcm9wcyAhPT0gdHJ1ZSAmJiAhKGl0LnByb3BzIGluc3RhbmNlb2YgY29kZWdlbl8xLk5hbWUpKSB7XG4gICAgICAgICAgICBpdC5wcm9wcyA9ICgwLCB1dGlsXzIuZXZhbHVhdGVkUHJvcHNUb05hbWUpKGdlbiwgaXQucHJvcHMpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgcHJvcHMgfSA9IGl0O1xuICAgICAgICB2YWxpZGF0ZVBhdHRlcm5Qcm9wZXJ0aWVzKCk7XG4gICAgICAgIGZ1bmN0aW9uIHZhbGlkYXRlUGF0dGVyblByb3BlcnRpZXMoKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHBhdCBvZiBwYXR0ZXJucykge1xuICAgICAgICAgICAgICAgIGlmIChjaGVja1Byb3BlcnRpZXMpXG4gICAgICAgICAgICAgICAgICAgIGNoZWNrTWF0Y2hpbmdQcm9wZXJ0aWVzKHBhdCk7XG4gICAgICAgICAgICAgICAgaWYgKGl0LmFsbEVycm9ycykge1xuICAgICAgICAgICAgICAgICAgICB2YWxpZGF0ZVByb3BlcnRpZXMocGF0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGdlbi52YXIodmFsaWQsIHRydWUpOyAvLyBUT0RPIHZhclxuICAgICAgICAgICAgICAgICAgICB2YWxpZGF0ZVByb3BlcnRpZXMocGF0KTtcbiAgICAgICAgICAgICAgICAgICAgZ2VuLmlmKHZhbGlkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gY2hlY2tNYXRjaGluZ1Byb3BlcnRpZXMocGF0KSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHByb3AgaW4gY2hlY2tQcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgICAgaWYgKG5ldyBSZWdFeHAocGF0KS50ZXN0KHByb3ApKSB7XG4gICAgICAgICAgICAgICAgICAgICgwLCB1dGlsXzEuY2hlY2tTdHJpY3RNb2RlKShpdCwgYHByb3BlcnR5ICR7cHJvcH0gbWF0Y2hlcyBwYXR0ZXJuICR7cGF0fSAodXNlIGFsbG93TWF0Y2hpbmdQcm9wZXJ0aWVzKWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiB2YWxpZGF0ZVByb3BlcnRpZXMocGF0KSB7XG4gICAgICAgICAgICBnZW4uZm9ySW4oXCJrZXlcIiwgZGF0YSwgKGtleSkgPT4ge1xuICAgICAgICAgICAgICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGAkeygwLCBjb2RlXzEudXNlUGF0dGVybikoY3h0LCBwYXQpfS50ZXN0KCR7a2V5fSlgLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFsd2F5c1ZhbGlkID0gYWx3YXlzVmFsaWRQYXR0ZXJucy5pbmNsdWRlcyhwYXQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWFsd2F5c1ZhbGlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjeHQuc3Vic2NoZW1hKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXl3b3JkOiBcInBhdHRlcm5Qcm9wZXJ0aWVzXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NoZW1hUHJvcDogcGF0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFQcm9wOiBrZXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVByb3BUeXBlOiB1dGlsXzIuVHlwZS5TdHIsXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB2YWxpZCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGl0Lm9wdHMudW5ldmFsdWF0ZWQgJiYgcHJvcHMgIT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdlbi5hc3NpZ24oKDAsIGNvZGVnZW5fMS5fKSBgJHtwcm9wc31bJHtrZXl9XWAsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFhbHdheXNWYWxpZCAmJiAhaXQuYWxsRXJyb3JzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjYW4gc2hvcnQtY2lyY3VpdCBpZiBgdW5ldmFsdWF0ZWRQcm9wZXJ0aWVzYCBpcyBub3Qgc3VwcG9ydGVkIChvcHRzLm5leHQgPT09IGZhbHNlKVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gb3IgaWYgYWxsIHByb3BlcnRpZXMgd2VyZSBldmFsdWF0ZWQgKHByb3BzID09PSB0cnVlKVxuICAgICAgICAgICAgICAgICAgICAgICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEubm90KSh2YWxpZCksICgpID0+IGdlbi5icmVhaygpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9LFxufTtcbmV4cG9ydHMuZGVmYXVsdCA9IGRlZjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXBhdHRlcm5Qcm9wZXJ0aWVzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS91dGlsXCIpO1xuY29uc3QgZGVmID0ge1xuICAgIGtleXdvcmQ6IFwibm90XCIsXG4gICAgc2NoZW1hVHlwZTogW1wib2JqZWN0XCIsIFwiYm9vbGVhblwiXSxcbiAgICB0cmFja0Vycm9yczogdHJ1ZSxcbiAgICBjb2RlKGN4dCkge1xuICAgICAgICBjb25zdCB7IGdlbiwgc2NoZW1hLCBpdCB9ID0gY3h0O1xuICAgICAgICBpZiAoKDAsIHV0aWxfMS5hbHdheXNWYWxpZFNjaGVtYSkoaXQsIHNjaGVtYSkpIHtcbiAgICAgICAgICAgIGN4dC5mYWlsKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdmFsaWQgPSBnZW4ubmFtZShcInZhbGlkXCIpO1xuICAgICAgICBjeHQuc3Vic2NoZW1hKHtcbiAgICAgICAgICAgIGtleXdvcmQ6IFwibm90XCIsXG4gICAgICAgICAgICBjb21wb3NpdGVSdWxlOiB0cnVlLFxuICAgICAgICAgICAgY3JlYXRlRXJyb3JzOiBmYWxzZSxcbiAgICAgICAgICAgIGFsbEVycm9yczogZmFsc2UsXG4gICAgICAgIH0sIHZhbGlkKTtcbiAgICAgICAgY3h0LmZhaWxSZXN1bHQodmFsaWQsICgpID0+IGN4dC5yZXNldCgpLCAoKSA9PiBjeHQuZXJyb3IoKSk7XG4gICAgfSxcbiAgICBlcnJvcjogeyBtZXNzYWdlOiBcIm11c3QgTk9UIGJlIHZhbGlkXCIgfSxcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1ub3QuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGNvZGVfMSA9IHJlcXVpcmUoXCIuLi9jb2RlXCIpO1xuY29uc3QgZGVmID0ge1xuICAgIGtleXdvcmQ6IFwiYW55T2ZcIixcbiAgICBzY2hlbWFUeXBlOiBcImFycmF5XCIsXG4gICAgdHJhY2tFcnJvcnM6IHRydWUsXG4gICAgY29kZTogY29kZV8xLnZhbGlkYXRlVW5pb24sXG4gICAgZXJyb3I6IHsgbWVzc2FnZTogXCJtdXN0IG1hdGNoIGEgc2NoZW1hIGluIGFueU9mXCIgfSxcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1hbnlPZi5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvY29kZWdlblwiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL3V0aWxcIik7XG5jb25zdCBlcnJvciA9IHtcbiAgICBtZXNzYWdlOiBcIm11c3QgbWF0Y2ggZXhhY3RseSBvbmUgc2NoZW1hIGluIG9uZU9mXCIsXG4gICAgcGFyYW1zOiAoeyBwYXJhbXMgfSkgPT4gKDAsIGNvZGVnZW5fMS5fKSBge3Bhc3NpbmdTY2hlbWFzOiAke3BhcmFtcy5wYXNzaW5nfX1gLFxufTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcIm9uZU9mXCIsXG4gICAgc2NoZW1hVHlwZTogXCJhcnJheVwiLFxuICAgIHRyYWNrRXJyb3JzOiB0cnVlLFxuICAgIGVycm9yLFxuICAgIGNvZGUoY3h0KSB7XG4gICAgICAgIGNvbnN0IHsgZ2VuLCBzY2hlbWEsIHBhcmVudFNjaGVtYSwgaXQgfSA9IGN4dDtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShzY2hlbWEpKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYWp2IGltcGxlbWVudGF0aW9uIGVycm9yXCIpO1xuICAgICAgICBpZiAoaXQub3B0cy5kaXNjcmltaW5hdG9yICYmIHBhcmVudFNjaGVtYS5kaXNjcmltaW5hdG9yKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCBzY2hBcnIgPSBzY2hlbWE7XG4gICAgICAgIGNvbnN0IHZhbGlkID0gZ2VuLmxldChcInZhbGlkXCIsIGZhbHNlKTtcbiAgICAgICAgY29uc3QgcGFzc2luZyA9IGdlbi5sZXQoXCJwYXNzaW5nXCIsIG51bGwpO1xuICAgICAgICBjb25zdCBzY2hWYWxpZCA9IGdlbi5uYW1lKFwiX3ZhbGlkXCIpO1xuICAgICAgICBjeHQuc2V0UGFyYW1zKHsgcGFzc2luZyB9KTtcbiAgICAgICAgLy8gVE9ETyBwb3NzaWJseSBmYWlsIHN0cmFpZ2h0IGF3YXkgKHdpdGggd2FybmluZyBvciBleGNlcHRpb24pIGlmIHRoZXJlIGFyZSB0d28gZW1wdHkgYWx3YXlzIHZhbGlkIHNjaGVtYXNcbiAgICAgICAgZ2VuLmJsb2NrKHZhbGlkYXRlT25lT2YpO1xuICAgICAgICBjeHQucmVzdWx0KHZhbGlkLCAoKSA9PiBjeHQucmVzZXQoKSwgKCkgPT4gY3h0LmVycm9yKHRydWUpKTtcbiAgICAgICAgZnVuY3Rpb24gdmFsaWRhdGVPbmVPZigpIHtcbiAgICAgICAgICAgIHNjaEFyci5mb3JFYWNoKChzY2gsIGkpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgc2NoQ3h0O1xuICAgICAgICAgICAgICAgIGlmICgoMCwgdXRpbF8xLmFsd2F5c1ZhbGlkU2NoZW1hKShpdCwgc2NoKSkge1xuICAgICAgICAgICAgICAgICAgICBnZW4udmFyKHNjaFZhbGlkLCB0cnVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHNjaEN4dCA9IGN4dC5zdWJzY2hlbWEoe1xuICAgICAgICAgICAgICAgICAgICAgICAga2V5d29yZDogXCJvbmVPZlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2NoZW1hUHJvcDogaSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvc2l0ZVJ1bGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIH0sIHNjaFZhbGlkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGkgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGdlblxuICAgICAgICAgICAgICAgICAgICAgICAgLmlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7c2NoVmFsaWR9ICYmICR7dmFsaWR9YClcbiAgICAgICAgICAgICAgICAgICAgICAgIC5hc3NpZ24odmFsaWQsIGZhbHNlKVxuICAgICAgICAgICAgICAgICAgICAgICAgLmFzc2lnbihwYXNzaW5nLCAoMCwgY29kZWdlbl8xLl8pIGBbJHtwYXNzaW5nfSwgJHtpfV1gKVxuICAgICAgICAgICAgICAgICAgICAgICAgLmVsc2UoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZ2VuLmlmKHNjaFZhbGlkLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGdlbi5hc3NpZ24odmFsaWQsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICBnZW4uYXNzaWduKHBhc3NpbmcsIGkpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2NoQ3h0KVxuICAgICAgICAgICAgICAgICAgICAgICAgY3h0Lm1lcmdlRXZhbHVhdGVkKHNjaEN4dCwgY29kZWdlbl8xLk5hbWUpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9LFxufTtcbmV4cG9ydHMuZGVmYXVsdCA9IGRlZjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW9uZU9mLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS91dGlsXCIpO1xuY29uc3QgZGVmID0ge1xuICAgIGtleXdvcmQ6IFwiYWxsT2ZcIixcbiAgICBzY2hlbWFUeXBlOiBcImFycmF5XCIsXG4gICAgY29kZShjeHQpIHtcbiAgICAgICAgY29uc3QgeyBnZW4sIHNjaGVtYSwgaXQgfSA9IGN4dDtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShzY2hlbWEpKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYWp2IGltcGxlbWVudGF0aW9uIGVycm9yXCIpO1xuICAgICAgICBjb25zdCB2YWxpZCA9IGdlbi5uYW1lKFwidmFsaWRcIik7XG4gICAgICAgIHNjaGVtYS5mb3JFYWNoKChzY2gsIGkpID0+IHtcbiAgICAgICAgICAgIGlmICgoMCwgdXRpbF8xLmFsd2F5c1ZhbGlkU2NoZW1hKShpdCwgc2NoKSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBjb25zdCBzY2hDeHQgPSBjeHQuc3Vic2NoZW1hKHsga2V5d29yZDogXCJhbGxPZlwiLCBzY2hlbWFQcm9wOiBpIH0sIHZhbGlkKTtcbiAgICAgICAgICAgIGN4dC5vayh2YWxpZCk7XG4gICAgICAgICAgICBjeHQubWVyZ2VFdmFsdWF0ZWQoc2NoQ3h0KTtcbiAgICAgICAgfSk7XG4gICAgfSxcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1hbGxPZi5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvY29kZWdlblwiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL3V0aWxcIik7XG5jb25zdCBlcnJvciA9IHtcbiAgICBtZXNzYWdlOiAoeyBwYXJhbXMgfSkgPT4gKDAsIGNvZGVnZW5fMS5zdHIpIGBtdXN0IG1hdGNoIFwiJHtwYXJhbXMuaWZDbGF1c2V9XCIgc2NoZW1hYCxcbiAgICBwYXJhbXM6ICh7IHBhcmFtcyB9KSA9PiAoMCwgY29kZWdlbl8xLl8pIGB7ZmFpbGluZ0tleXdvcmQ6ICR7cGFyYW1zLmlmQ2xhdXNlfX1gLFxufTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcImlmXCIsXG4gICAgc2NoZW1hVHlwZTogW1wib2JqZWN0XCIsIFwiYm9vbGVhblwiXSxcbiAgICB0cmFja0Vycm9yczogdHJ1ZSxcbiAgICBlcnJvcixcbiAgICBjb2RlKGN4dCkge1xuICAgICAgICBjb25zdCB7IGdlbiwgcGFyZW50U2NoZW1hLCBpdCB9ID0gY3h0O1xuICAgICAgICBpZiAocGFyZW50U2NoZW1hLnRoZW4gPT09IHVuZGVmaW5lZCAmJiBwYXJlbnRTY2hlbWEuZWxzZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAoMCwgdXRpbF8xLmNoZWNrU3RyaWN0TW9kZSkoaXQsICdcImlmXCIgd2l0aG91dCBcInRoZW5cIiBhbmQgXCJlbHNlXCIgaXMgaWdub3JlZCcpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGhhc1RoZW4gPSBoYXNTY2hlbWEoaXQsIFwidGhlblwiKTtcbiAgICAgICAgY29uc3QgaGFzRWxzZSA9IGhhc1NjaGVtYShpdCwgXCJlbHNlXCIpO1xuICAgICAgICBpZiAoIWhhc1RoZW4gJiYgIWhhc0Vsc2UpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IHZhbGlkID0gZ2VuLmxldChcInZhbGlkXCIsIHRydWUpO1xuICAgICAgICBjb25zdCBzY2hWYWxpZCA9IGdlbi5uYW1lKFwiX3ZhbGlkXCIpO1xuICAgICAgICB2YWxpZGF0ZUlmKCk7XG4gICAgICAgIGN4dC5yZXNldCgpO1xuICAgICAgICBpZiAoaGFzVGhlbiAmJiBoYXNFbHNlKSB7XG4gICAgICAgICAgICBjb25zdCBpZkNsYXVzZSA9IGdlbi5sZXQoXCJpZkNsYXVzZVwiKTtcbiAgICAgICAgICAgIGN4dC5zZXRQYXJhbXMoeyBpZkNsYXVzZSB9KTtcbiAgICAgICAgICAgIGdlbi5pZihzY2hWYWxpZCwgdmFsaWRhdGVDbGF1c2UoXCJ0aGVuXCIsIGlmQ2xhdXNlKSwgdmFsaWRhdGVDbGF1c2UoXCJlbHNlXCIsIGlmQ2xhdXNlKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaGFzVGhlbikge1xuICAgICAgICAgICAgZ2VuLmlmKHNjaFZhbGlkLCB2YWxpZGF0ZUNsYXVzZShcInRoZW5cIikpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEubm90KShzY2hWYWxpZCksIHZhbGlkYXRlQ2xhdXNlKFwiZWxzZVwiKSk7XG4gICAgICAgIH1cbiAgICAgICAgY3h0LnBhc3ModmFsaWQsICgpID0+IGN4dC5lcnJvcih0cnVlKSk7XG4gICAgICAgIGZ1bmN0aW9uIHZhbGlkYXRlSWYoKSB7XG4gICAgICAgICAgICBjb25zdCBzY2hDeHQgPSBjeHQuc3Vic2NoZW1hKHtcbiAgICAgICAgICAgICAgICBrZXl3b3JkOiBcImlmXCIsXG4gICAgICAgICAgICAgICAgY29tcG9zaXRlUnVsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBjcmVhdGVFcnJvcnM6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGFsbEVycm9yczogZmFsc2UsXG4gICAgICAgICAgICB9LCBzY2hWYWxpZCk7XG4gICAgICAgICAgICBjeHQubWVyZ2VFdmFsdWF0ZWQoc2NoQ3h0KTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiB2YWxpZGF0ZUNsYXVzZShrZXl3b3JkLCBpZkNsYXVzZSkge1xuICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzY2hDeHQgPSBjeHQuc3Vic2NoZW1hKHsga2V5d29yZCB9LCBzY2hWYWxpZCk7XG4gICAgICAgICAgICAgICAgZ2VuLmFzc2lnbih2YWxpZCwgc2NoVmFsaWQpO1xuICAgICAgICAgICAgICAgIGN4dC5tZXJnZVZhbGlkRXZhbHVhdGVkKHNjaEN4dCwgdmFsaWQpO1xuICAgICAgICAgICAgICAgIGlmIChpZkNsYXVzZSlcbiAgICAgICAgICAgICAgICAgICAgZ2VuLmFzc2lnbihpZkNsYXVzZSwgKDAsIGNvZGVnZW5fMS5fKSBgJHtrZXl3b3JkfWApO1xuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgY3h0LnNldFBhcmFtcyh7IGlmQ2xhdXNlOiBrZXl3b3JkIH0pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH0sXG59O1xuZnVuY3Rpb24gaGFzU2NoZW1hKGl0LCBrZXl3b3JkKSB7XG4gICAgY29uc3Qgc2NoZW1hID0gaXQuc2NoZW1hW2tleXdvcmRdO1xuICAgIHJldHVybiBzY2hlbWEgIT09IHVuZGVmaW5lZCAmJiAhKDAsIHV0aWxfMS5hbHdheXNWYWxpZFNjaGVtYSkoaXQsIHNjaGVtYSk7XG59XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pZi5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvdXRpbFwiKTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBbXCJ0aGVuXCIsIFwiZWxzZVwiXSxcbiAgICBzY2hlbWFUeXBlOiBbXCJvYmplY3RcIiwgXCJib29sZWFuXCJdLFxuICAgIGNvZGUoeyBrZXl3b3JkLCBwYXJlbnRTY2hlbWEsIGl0IH0pIHtcbiAgICAgICAgaWYgKHBhcmVudFNjaGVtYS5pZiA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgKDAsIHV0aWxfMS5jaGVja1N0cmljdE1vZGUpKGl0LCBgXCIke2tleXdvcmR9XCIgd2l0aG91dCBcImlmXCIgaXMgaWdub3JlZGApO1xuICAgIH0sXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dGhlbkVsc2UuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGFkZGl0aW9uYWxJdGVtc18xID0gcmVxdWlyZShcIi4vYWRkaXRpb25hbEl0ZW1zXCIpO1xuY29uc3QgcHJlZml4SXRlbXNfMSA9IHJlcXVpcmUoXCIuL3ByZWZpeEl0ZW1zXCIpO1xuY29uc3QgaXRlbXNfMSA9IHJlcXVpcmUoXCIuL2l0ZW1zXCIpO1xuY29uc3QgaXRlbXMyMDIwXzEgPSByZXF1aXJlKFwiLi9pdGVtczIwMjBcIik7XG5jb25zdCBjb250YWluc18xID0gcmVxdWlyZShcIi4vY29udGFpbnNcIik7XG5jb25zdCBkZXBlbmRlbmNpZXNfMSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1wiKTtcbmNvbnN0IHByb3BlcnR5TmFtZXNfMSA9IHJlcXVpcmUoXCIuL3Byb3BlcnR5TmFtZXNcIik7XG5jb25zdCBhZGRpdGlvbmFsUHJvcGVydGllc18xID0gcmVxdWlyZShcIi4vYWRkaXRpb25hbFByb3BlcnRpZXNcIik7XG5jb25zdCBwcm9wZXJ0aWVzXzEgPSByZXF1aXJlKFwiLi9wcm9wZXJ0aWVzXCIpO1xuY29uc3QgcGF0dGVyblByb3BlcnRpZXNfMSA9IHJlcXVpcmUoXCIuL3BhdHRlcm5Qcm9wZXJ0aWVzXCIpO1xuY29uc3Qgbm90XzEgPSByZXF1aXJlKFwiLi9ub3RcIik7XG5jb25zdCBhbnlPZl8xID0gcmVxdWlyZShcIi4vYW55T2ZcIik7XG5jb25zdCBvbmVPZl8xID0gcmVxdWlyZShcIi4vb25lT2ZcIik7XG5jb25zdCBhbGxPZl8xID0gcmVxdWlyZShcIi4vYWxsT2ZcIik7XG5jb25zdCBpZl8xID0gcmVxdWlyZShcIi4vaWZcIik7XG5jb25zdCB0aGVuRWxzZV8xID0gcmVxdWlyZShcIi4vdGhlbkVsc2VcIik7XG5mdW5jdGlvbiBnZXRBcHBsaWNhdG9yKGRyYWZ0MjAyMCA9IGZhbHNlKSB7XG4gICAgY29uc3QgYXBwbGljYXRvciA9IFtcbiAgICAgICAgLy8gYW55XG4gICAgICAgIG5vdF8xLmRlZmF1bHQsXG4gICAgICAgIGFueU9mXzEuZGVmYXVsdCxcbiAgICAgICAgb25lT2ZfMS5kZWZhdWx0LFxuICAgICAgICBhbGxPZl8xLmRlZmF1bHQsXG4gICAgICAgIGlmXzEuZGVmYXVsdCxcbiAgICAgICAgdGhlbkVsc2VfMS5kZWZhdWx0LFxuICAgICAgICAvLyBvYmplY3RcbiAgICAgICAgcHJvcGVydHlOYW1lc18xLmRlZmF1bHQsXG4gICAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzXzEuZGVmYXVsdCxcbiAgICAgICAgZGVwZW5kZW5jaWVzXzEuZGVmYXVsdCxcbiAgICAgICAgcHJvcGVydGllc18xLmRlZmF1bHQsXG4gICAgICAgIHBhdHRlcm5Qcm9wZXJ0aWVzXzEuZGVmYXVsdCxcbiAgICBdO1xuICAgIC8vIGFycmF5XG4gICAgaWYgKGRyYWZ0MjAyMClcbiAgICAgICAgYXBwbGljYXRvci5wdXNoKHByZWZpeEl0ZW1zXzEuZGVmYXVsdCwgaXRlbXMyMDIwXzEuZGVmYXVsdCk7XG4gICAgZWxzZVxuICAgICAgICBhcHBsaWNhdG9yLnB1c2goYWRkaXRpb25hbEl0ZW1zXzEuZGVmYXVsdCwgaXRlbXNfMS5kZWZhdWx0KTtcbiAgICBhcHBsaWNhdG9yLnB1c2goY29udGFpbnNfMS5kZWZhdWx0KTtcbiAgICByZXR1cm4gYXBwbGljYXRvcjtcbn1cbmV4cG9ydHMuZGVmYXVsdCA9IGdldEFwcGxpY2F0b3I7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvY29kZWdlblwiKTtcbmNvbnN0IGVycm9yID0ge1xuICAgIG1lc3NhZ2U6ICh7IHNjaGVtYUNvZGUgfSkgPT4gKDAsIGNvZGVnZW5fMS5zdHIpIGBtdXN0IG1hdGNoIGZvcm1hdCBcIiR7c2NoZW1hQ29kZX1cImAsXG4gICAgcGFyYW1zOiAoeyBzY2hlbWFDb2RlIH0pID0+ICgwLCBjb2RlZ2VuXzEuXykgYHtmb3JtYXQ6ICR7c2NoZW1hQ29kZX19YCxcbn07XG5jb25zdCBkZWYgPSB7XG4gICAga2V5d29yZDogXCJmb3JtYXRcIixcbiAgICB0eXBlOiBbXCJudW1iZXJcIiwgXCJzdHJpbmdcIl0sXG4gICAgc2NoZW1hVHlwZTogXCJzdHJpbmdcIixcbiAgICAkZGF0YTogdHJ1ZSxcbiAgICBlcnJvcixcbiAgICBjb2RlKGN4dCwgcnVsZVR5cGUpIHtcbiAgICAgICAgY29uc3QgeyBnZW4sIGRhdGEsICRkYXRhLCBzY2hlbWEsIHNjaGVtYUNvZGUsIGl0IH0gPSBjeHQ7XG4gICAgICAgIGNvbnN0IHsgb3B0cywgZXJyU2NoZW1hUGF0aCwgc2NoZW1hRW52LCBzZWxmIH0gPSBpdDtcbiAgICAgICAgaWYgKCFvcHRzLnZhbGlkYXRlRm9ybWF0cylcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKCRkYXRhKVxuICAgICAgICAgICAgdmFsaWRhdGUkRGF0YUZvcm1hdCgpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICB2YWxpZGF0ZUZvcm1hdCgpO1xuICAgICAgICBmdW5jdGlvbiB2YWxpZGF0ZSREYXRhRm9ybWF0KCkge1xuICAgICAgICAgICAgY29uc3QgZm10cyA9IGdlbi5zY29wZVZhbHVlKFwiZm9ybWF0c1wiLCB7XG4gICAgICAgICAgICAgICAgcmVmOiBzZWxmLmZvcm1hdHMsXG4gICAgICAgICAgICAgICAgY29kZTogb3B0cy5jb2RlLmZvcm1hdHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IGZEZWYgPSBnZW4uY29uc3QoXCJmRGVmXCIsICgwLCBjb2RlZ2VuXzEuXykgYCR7Zm10c31bJHtzY2hlbWFDb2RlfV1gKTtcbiAgICAgICAgICAgIGNvbnN0IGZUeXBlID0gZ2VuLmxldChcImZUeXBlXCIpO1xuICAgICAgICAgICAgY29uc3QgZm9ybWF0ID0gZ2VuLmxldChcImZvcm1hdFwiKTtcbiAgICAgICAgICAgIC8vIFRPRE8gc2ltcGxpZnlcbiAgICAgICAgICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGB0eXBlb2YgJHtmRGVmfSA9PSBcIm9iamVjdFwiICYmICEoJHtmRGVmfSBpbnN0YW5jZW9mIFJlZ0V4cClgLCAoKSA9PiBnZW4uYXNzaWduKGZUeXBlLCAoMCwgY29kZWdlbl8xLl8pIGAke2ZEZWZ9LnR5cGUgfHwgXCJzdHJpbmdcImApLmFzc2lnbihmb3JtYXQsICgwLCBjb2RlZ2VuXzEuXykgYCR7ZkRlZn0udmFsaWRhdGVgKSwgKCkgPT4gZ2VuLmFzc2lnbihmVHlwZSwgKDAsIGNvZGVnZW5fMS5fKSBgXCJzdHJpbmdcImApLmFzc2lnbihmb3JtYXQsIGZEZWYpKTtcbiAgICAgICAgICAgIGN4dC5mYWlsJGRhdGEoKDAsIGNvZGVnZW5fMS5vcikodW5rbm93bkZtdCgpLCBpbnZhbGlkRm10KCkpKTtcbiAgICAgICAgICAgIGZ1bmN0aW9uIHVua25vd25GbXQoKSB7XG4gICAgICAgICAgICAgICAgaWYgKG9wdHMuc3RyaWN0U2NoZW1hID09PSBmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvZGVnZW5fMS5uaWw7XG4gICAgICAgICAgICAgICAgcmV0dXJuICgwLCBjb2RlZ2VuXzEuXykgYCR7c2NoZW1hQ29kZX0gJiYgISR7Zm9ybWF0fWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBpbnZhbGlkRm10KCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNhbGxGb3JtYXQgPSBzY2hlbWFFbnYuJGFzeW5jXG4gICAgICAgICAgICAgICAgICAgID8gKDAsIGNvZGVnZW5fMS5fKSBgKCR7ZkRlZn0uYXN5bmMgPyBhd2FpdCAke2Zvcm1hdH0oJHtkYXRhfSkgOiAke2Zvcm1hdH0oJHtkYXRhfSkpYFxuICAgICAgICAgICAgICAgICAgICA6ICgwLCBjb2RlZ2VuXzEuXykgYCR7Zm9ybWF0fSgke2RhdGF9KWA7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsaWREYXRhID0gKDAsIGNvZGVnZW5fMS5fKSBgKHR5cGVvZiAke2Zvcm1hdH0gPT0gXCJmdW5jdGlvblwiID8gJHtjYWxsRm9ybWF0fSA6ICR7Zm9ybWF0fS50ZXN0KCR7ZGF0YX0pKWA7XG4gICAgICAgICAgICAgICAgcmV0dXJuICgwLCBjb2RlZ2VuXzEuXykgYCR7Zm9ybWF0fSAmJiAke2Zvcm1hdH0gIT09IHRydWUgJiYgJHtmVHlwZX0gPT09ICR7cnVsZVR5cGV9ICYmICEke3ZhbGlkRGF0YX1gO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHZhbGlkYXRlRm9ybWF0KCkge1xuICAgICAgICAgICAgY29uc3QgZm9ybWF0RGVmID0gc2VsZi5mb3JtYXRzW3NjaGVtYV07XG4gICAgICAgICAgICBpZiAoIWZvcm1hdERlZikge1xuICAgICAgICAgICAgICAgIHVua25vd25Gb3JtYXQoKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZm9ybWF0RGVmID09PSB0cnVlKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGNvbnN0IFtmbXRUeXBlLCBmb3JtYXQsIGZtdFJlZl0gPSBnZXRGb3JtYXQoZm9ybWF0RGVmKTtcbiAgICAgICAgICAgIGlmIChmbXRUeXBlID09PSBydWxlVHlwZSlcbiAgICAgICAgICAgICAgICBjeHQucGFzcyh2YWxpZENvbmRpdGlvbigpKTtcbiAgICAgICAgICAgIGZ1bmN0aW9uIHVua25vd25Gb3JtYXQoKSB7XG4gICAgICAgICAgICAgICAgaWYgKG9wdHMuc3RyaWN0U2NoZW1hID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLmxvZ2dlci53YXJuKHVua25vd25Nc2coKSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHVua25vd25Nc2coKSk7XG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gdW5rbm93bk1zZygpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGB1bmtub3duIGZvcm1hdCBcIiR7c2NoZW1hfVwiIGlnbm9yZWQgaW4gc2NoZW1hIGF0IHBhdGggXCIke2VyclNjaGVtYVBhdGh9XCJgO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIGdldEZvcm1hdChmbXREZWYpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb2RlID0gZm10RGVmIGluc3RhbmNlb2YgUmVnRXhwXG4gICAgICAgICAgICAgICAgICAgID8gKDAsIGNvZGVnZW5fMS5yZWdleHBDb2RlKShmbXREZWYpXG4gICAgICAgICAgICAgICAgICAgIDogb3B0cy5jb2RlLmZvcm1hdHNcbiAgICAgICAgICAgICAgICAgICAgICAgID8gKDAsIGNvZGVnZW5fMS5fKSBgJHtvcHRzLmNvZGUuZm9ybWF0c30keygwLCBjb2RlZ2VuXzEuZ2V0UHJvcGVydHkpKHNjaGVtYSl9YFxuICAgICAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgY29uc3QgZm10ID0gZ2VuLnNjb3BlVmFsdWUoXCJmb3JtYXRzXCIsIHsga2V5OiBzY2hlbWEsIHJlZjogZm10RGVmLCBjb2RlIH0pO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZm10RGVmID09IFwib2JqZWN0XCIgJiYgIShmbXREZWYgaW5zdGFuY2VvZiBSZWdFeHApKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbZm10RGVmLnR5cGUgfHwgXCJzdHJpbmdcIiwgZm10RGVmLnZhbGlkYXRlLCAoMCwgY29kZWdlbl8xLl8pIGAke2ZtdH0udmFsaWRhdGVgXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtcInN0cmluZ1wiLCBmbXREZWYsIGZtdF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiB2YWxpZENvbmRpdGlvbigpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGZvcm1hdERlZiA9PSBcIm9iamVjdFwiICYmICEoZm9ybWF0RGVmIGluc3RhbmNlb2YgUmVnRXhwKSAmJiBmb3JtYXREZWYuYXN5bmMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFzY2hlbWFFbnYuJGFzeW5jKVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYXN5bmMgZm9ybWF0IGluIHN5bmMgc2NoZW1hXCIpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDAsIGNvZGVnZW5fMS5fKSBgYXdhaXQgJHtmbXRSZWZ9KCR7ZGF0YX0pYDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiBmb3JtYXQgPT0gXCJmdW5jdGlvblwiID8gKDAsIGNvZGVnZW5fMS5fKSBgJHtmbXRSZWZ9KCR7ZGF0YX0pYCA6ICgwLCBjb2RlZ2VuXzEuXykgYCR7Zm10UmVmfS50ZXN0KCR7ZGF0YX0pYDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Zm9ybWF0LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBmb3JtYXRfMSA9IHJlcXVpcmUoXCIuL2Zvcm1hdFwiKTtcbmNvbnN0IGZvcm1hdCA9IFtmb3JtYXRfMS5kZWZhdWx0XTtcbmV4cG9ydHMuZGVmYXVsdCA9IGZvcm1hdDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmNvbnRlbnRWb2NhYnVsYXJ5ID0gZXhwb3J0cy5tZXRhZGF0YVZvY2FidWxhcnkgPSB2b2lkIDA7XG5leHBvcnRzLm1ldGFkYXRhVm9jYWJ1bGFyeSA9IFtcbiAgICBcInRpdGxlXCIsXG4gICAgXCJkZXNjcmlwdGlvblwiLFxuICAgIFwiZGVmYXVsdFwiLFxuICAgIFwiZGVwcmVjYXRlZFwiLFxuICAgIFwicmVhZE9ubHlcIixcbiAgICBcIndyaXRlT25seVwiLFxuICAgIFwiZXhhbXBsZXNcIixcbl07XG5leHBvcnRzLmNvbnRlbnRWb2NhYnVsYXJ5ID0gW1xuICAgIFwiY29udGVudE1lZGlhVHlwZVwiLFxuICAgIFwiY29udGVudEVuY29kaW5nXCIsXG4gICAgXCJjb250ZW50U2NoZW1hXCIsXG5dO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bWV0YWRhdGEuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGNvcmVfMSA9IHJlcXVpcmUoXCIuL2NvcmVcIik7XG5jb25zdCB2YWxpZGF0aW9uXzEgPSByZXF1aXJlKFwiLi92YWxpZGF0aW9uXCIpO1xuY29uc3QgYXBwbGljYXRvcl8xID0gcmVxdWlyZShcIi4vYXBwbGljYXRvclwiKTtcbmNvbnN0IGZvcm1hdF8xID0gcmVxdWlyZShcIi4vZm9ybWF0XCIpO1xuY29uc3QgbWV0YWRhdGFfMSA9IHJlcXVpcmUoXCIuL21ldGFkYXRhXCIpO1xuY29uc3QgZHJhZnQ3Vm9jYWJ1bGFyaWVzID0gW1xuICAgIGNvcmVfMS5kZWZhdWx0LFxuICAgIHZhbGlkYXRpb25fMS5kZWZhdWx0LFxuICAgICgwLCBhcHBsaWNhdG9yXzEuZGVmYXVsdCkoKSxcbiAgICBmb3JtYXRfMS5kZWZhdWx0LFxuICAgIG1ldGFkYXRhXzEubWV0YWRhdGFWb2NhYnVsYXJ5LFxuICAgIG1ldGFkYXRhXzEuY29udGVudFZvY2FidWxhcnksXG5dO1xuZXhwb3J0cy5kZWZhdWx0ID0gZHJhZnQ3Vm9jYWJ1bGFyaWVzO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZHJhZnQ3LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkRpc2NyRXJyb3IgPSB2b2lkIDA7XG52YXIgRGlzY3JFcnJvcjtcbihmdW5jdGlvbiAoRGlzY3JFcnJvcikge1xuICAgIERpc2NyRXJyb3JbXCJUYWdcIl0gPSBcInRhZ1wiO1xuICAgIERpc2NyRXJyb3JbXCJNYXBwaW5nXCJdID0gXCJtYXBwaW5nXCI7XG59KShEaXNjckVycm9yIHx8IChleHBvcnRzLkRpc2NyRXJyb3IgPSBEaXNjckVycm9yID0ge30pKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXR5cGVzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS9jb2RlZ2VuXCIpO1xuY29uc3QgdHlwZXNfMSA9IHJlcXVpcmUoXCIuLi9kaXNjcmltaW5hdG9yL3R5cGVzXCIpO1xuY29uc3QgY29tcGlsZV8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGVcIik7XG5jb25zdCByZWZfZXJyb3JfMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL3JlZl9lcnJvclwiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL3V0aWxcIik7XG5jb25zdCBlcnJvciA9IHtcbiAgICBtZXNzYWdlOiAoeyBwYXJhbXM6IHsgZGlzY3JFcnJvciwgdGFnTmFtZSB9IH0pID0+IGRpc2NyRXJyb3IgPT09IHR5cGVzXzEuRGlzY3JFcnJvci5UYWdcbiAgICAgICAgPyBgdGFnIFwiJHt0YWdOYW1lfVwiIG11c3QgYmUgc3RyaW5nYFxuICAgICAgICA6IGB2YWx1ZSBvZiB0YWcgXCIke3RhZ05hbWV9XCIgbXVzdCBiZSBpbiBvbmVPZmAsXG4gICAgcGFyYW1zOiAoeyBwYXJhbXM6IHsgZGlzY3JFcnJvciwgdGFnLCB0YWdOYW1lIH0gfSkgPT4gKDAsIGNvZGVnZW5fMS5fKSBge2Vycm9yOiAke2Rpc2NyRXJyb3J9LCB0YWc6ICR7dGFnTmFtZX0sIHRhZ1ZhbHVlOiAke3RhZ319YCxcbn07XG5jb25zdCBkZWYgPSB7XG4gICAga2V5d29yZDogXCJkaXNjcmltaW5hdG9yXCIsXG4gICAgdHlwZTogXCJvYmplY3RcIixcbiAgICBzY2hlbWFUeXBlOiBcIm9iamVjdFwiLFxuICAgIGVycm9yLFxuICAgIGNvZGUoY3h0KSB7XG4gICAgICAgIGNvbnN0IHsgZ2VuLCBkYXRhLCBzY2hlbWEsIHBhcmVudFNjaGVtYSwgaXQgfSA9IGN4dDtcbiAgICAgICAgY29uc3QgeyBvbmVPZiB9ID0gcGFyZW50U2NoZW1hO1xuICAgICAgICBpZiAoIWl0Lm9wdHMuZGlzY3JpbWluYXRvcikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZGlzY3JpbWluYXRvcjogcmVxdWlyZXMgZGlzY3JpbWluYXRvciBvcHRpb25cIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdGFnTmFtZSA9IHNjaGVtYS5wcm9wZXJ0eU5hbWU7XG4gICAgICAgIGlmICh0eXBlb2YgdGFnTmFtZSAhPSBcInN0cmluZ1wiKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZGlzY3JpbWluYXRvcjogcmVxdWlyZXMgcHJvcGVydHlOYW1lXCIpO1xuICAgICAgICBpZiAoc2NoZW1hLm1hcHBpbmcpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJkaXNjcmltaW5hdG9yOiBtYXBwaW5nIGlzIG5vdCBzdXBwb3J0ZWRcIik7XG4gICAgICAgIGlmICghb25lT2YpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJkaXNjcmltaW5hdG9yOiByZXF1aXJlcyBvbmVPZiBrZXl3b3JkXCIpO1xuICAgICAgICBjb25zdCB2YWxpZCA9IGdlbi5sZXQoXCJ2YWxpZFwiLCBmYWxzZSk7XG4gICAgICAgIGNvbnN0IHRhZyA9IGdlbi5jb25zdChcInRhZ1wiLCAoMCwgY29kZWdlbl8xLl8pIGAke2RhdGF9JHsoMCwgY29kZWdlbl8xLmdldFByb3BlcnR5KSh0YWdOYW1lKX1gKTtcbiAgICAgICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEuXykgYHR5cGVvZiAke3RhZ30gPT0gXCJzdHJpbmdcImAsICgpID0+IHZhbGlkYXRlTWFwcGluZygpLCAoKSA9PiBjeHQuZXJyb3IoZmFsc2UsIHsgZGlzY3JFcnJvcjogdHlwZXNfMS5EaXNjckVycm9yLlRhZywgdGFnLCB0YWdOYW1lIH0pKTtcbiAgICAgICAgY3h0Lm9rKHZhbGlkKTtcbiAgICAgICAgZnVuY3Rpb24gdmFsaWRhdGVNYXBwaW5nKCkge1xuICAgICAgICAgICAgY29uc3QgbWFwcGluZyA9IGdldE1hcHBpbmcoKTtcbiAgICAgICAgICAgIGdlbi5pZihmYWxzZSk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHRhZ1ZhbHVlIGluIG1hcHBpbmcpIHtcbiAgICAgICAgICAgICAgICBnZW4uZWxzZUlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7dGFnfSA9PT0gJHt0YWdWYWx1ZX1gKTtcbiAgICAgICAgICAgICAgICBnZW4uYXNzaWduKHZhbGlkLCBhcHBseVRhZ1NjaGVtYShtYXBwaW5nW3RhZ1ZhbHVlXSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZ2VuLmVsc2UoKTtcbiAgICAgICAgICAgIGN4dC5lcnJvcihmYWxzZSwgeyBkaXNjckVycm9yOiB0eXBlc18xLkRpc2NyRXJyb3IuTWFwcGluZywgdGFnLCB0YWdOYW1lIH0pO1xuICAgICAgICAgICAgZ2VuLmVuZElmKCk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gYXBwbHlUYWdTY2hlbWEoc2NoZW1hUHJvcCkge1xuICAgICAgICAgICAgY29uc3QgX3ZhbGlkID0gZ2VuLm5hbWUoXCJ2YWxpZFwiKTtcbiAgICAgICAgICAgIGNvbnN0IHNjaEN4dCA9IGN4dC5zdWJzY2hlbWEoeyBrZXl3b3JkOiBcIm9uZU9mXCIsIHNjaGVtYVByb3AgfSwgX3ZhbGlkKTtcbiAgICAgICAgICAgIGN4dC5tZXJnZUV2YWx1YXRlZChzY2hDeHQsIGNvZGVnZW5fMS5OYW1lKTtcbiAgICAgICAgICAgIHJldHVybiBfdmFsaWQ7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gZ2V0TWFwcGluZygpIHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIGNvbnN0IG9uZU9mTWFwcGluZyA9IHt9O1xuICAgICAgICAgICAgY29uc3QgdG9wUmVxdWlyZWQgPSBoYXNSZXF1aXJlZChwYXJlbnRTY2hlbWEpO1xuICAgICAgICAgICAgbGV0IHRhZ1JlcXVpcmVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb25lT2YubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgc2NoID0gb25lT2ZbaV07XG4gICAgICAgICAgICAgICAgaWYgKChzY2ggPT09IG51bGwgfHwgc2NoID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzY2guJHJlZikgJiYgISgwLCB1dGlsXzEuc2NoZW1hSGFzUnVsZXNCdXRSZWYpKHNjaCwgaXQuc2VsZi5SVUxFUykpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVmID0gc2NoLiRyZWY7XG4gICAgICAgICAgICAgICAgICAgIHNjaCA9IGNvbXBpbGVfMS5yZXNvbHZlUmVmLmNhbGwoaXQuc2VsZiwgaXQuc2NoZW1hRW52LnJvb3QsIGl0LmJhc2VJZCwgcmVmKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNjaCBpbnN0YW5jZW9mIGNvbXBpbGVfMS5TY2hlbWFFbnYpXG4gICAgICAgICAgICAgICAgICAgICAgICBzY2ggPSBzY2guc2NoZW1hO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2NoID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgcmVmX2Vycm9yXzEuZGVmYXVsdChpdC5vcHRzLnVyaVJlc29sdmVyLCBpdC5iYXNlSWQsIHJlZik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHByb3BTY2ggPSAoX2EgPSBzY2ggPT09IG51bGwgfHwgc2NoID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzY2gucHJvcGVydGllcykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hW3RhZ05hbWVdO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcHJvcFNjaCAhPSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgZGlzY3JpbWluYXRvcjogb25lT2Ygc3Vic2NoZW1hcyAob3IgcmVmZXJlbmNlZCBzY2hlbWFzKSBtdXN0IGhhdmUgXCJwcm9wZXJ0aWVzLyR7dGFnTmFtZX1cImApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0YWdSZXF1aXJlZCA9IHRhZ1JlcXVpcmVkICYmICh0b3BSZXF1aXJlZCB8fCBoYXNSZXF1aXJlZChzY2gpKTtcbiAgICAgICAgICAgICAgICBhZGRNYXBwaW5ncyhwcm9wU2NoLCBpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghdGFnUmVxdWlyZWQpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBkaXNjcmltaW5hdG9yOiBcIiR7dGFnTmFtZX1cIiBtdXN0IGJlIHJlcXVpcmVkYCk7XG4gICAgICAgICAgICByZXR1cm4gb25lT2ZNYXBwaW5nO1xuICAgICAgICAgICAgZnVuY3Rpb24gaGFzUmVxdWlyZWQoeyByZXF1aXJlZCB9KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkocmVxdWlyZWQpICYmIHJlcXVpcmVkLmluY2x1ZGVzKHRhZ05hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gYWRkTWFwcGluZ3Moc2NoLCBpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHNjaC5jb25zdCkge1xuICAgICAgICAgICAgICAgICAgICBhZGRNYXBwaW5nKHNjaC5jb25zdCwgaSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNjaC5lbnVtKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgdGFnVmFsdWUgb2Ygc2NoLmVudW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFkZE1hcHBpbmcodGFnVmFsdWUsIGkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGRpc2NyaW1pbmF0b3I6IFwicHJvcGVydGllcy8ke3RhZ05hbWV9XCIgbXVzdCBoYXZlIFwiY29uc3RcIiBvciBcImVudW1cImApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIGFkZE1hcHBpbmcodGFnVmFsdWUsIGkpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHRhZ1ZhbHVlICE9IFwic3RyaW5nXCIgfHwgdGFnVmFsdWUgaW4gb25lT2ZNYXBwaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgZGlzY3JpbWluYXRvcjogXCIke3RhZ05hbWV9XCIgdmFsdWVzIG11c3QgYmUgdW5pcXVlIHN0cmluZ3NgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgb25lT2ZNYXBwaW5nW3RhZ1ZhbHVlXSA9IGk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxufTtcbmV4cG9ydHMuZGVmYXVsdCA9IGRlZjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLk1pc3NpbmdSZWZFcnJvciA9IGV4cG9ydHMuVmFsaWRhdGlvbkVycm9yID0gZXhwb3J0cy5Db2RlR2VuID0gZXhwb3J0cy5OYW1lID0gZXhwb3J0cy5uaWwgPSBleHBvcnRzLnN0cmluZ2lmeSA9IGV4cG9ydHMuc3RyID0gZXhwb3J0cy5fID0gZXhwb3J0cy5LZXl3b3JkQ3h0ID0gZXhwb3J0cy5BanYgPSB2b2lkIDA7XG5jb25zdCBjb3JlXzEgPSByZXF1aXJlKFwiLi9jb3JlXCIpO1xuY29uc3QgZHJhZnQ3XzEgPSByZXF1aXJlKFwiLi92b2NhYnVsYXJpZXMvZHJhZnQ3XCIpO1xuY29uc3QgZGlzY3JpbWluYXRvcl8xID0gcmVxdWlyZShcIi4vdm9jYWJ1bGFyaWVzL2Rpc2NyaW1pbmF0b3JcIik7XG5jb25zdCBkcmFmdDdNZXRhU2NoZW1hID0gcmVxdWlyZShcIi4vcmVmcy9qc29uLXNjaGVtYS1kcmFmdC0wNy5qc29uXCIpO1xuY29uc3QgTUVUQV9TVVBQT1JUX0RBVEEgPSBbXCIvcHJvcGVydGllc1wiXTtcbmNvbnN0IE1FVEFfU0NIRU1BX0lEID0gXCJodHRwOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LTA3L3NjaGVtYVwiO1xuY2xhc3MgQWp2IGV4dGVuZHMgY29yZV8xLmRlZmF1bHQge1xuICAgIF9hZGRWb2NhYnVsYXJpZXMoKSB7XG4gICAgICAgIHN1cGVyLl9hZGRWb2NhYnVsYXJpZXMoKTtcbiAgICAgICAgZHJhZnQ3XzEuZGVmYXVsdC5mb3JFYWNoKCh2KSA9PiB0aGlzLmFkZFZvY2FidWxhcnkodikpO1xuICAgICAgICBpZiAodGhpcy5vcHRzLmRpc2NyaW1pbmF0b3IpXG4gICAgICAgICAgICB0aGlzLmFkZEtleXdvcmQoZGlzY3JpbWluYXRvcl8xLmRlZmF1bHQpO1xuICAgIH1cbiAgICBfYWRkRGVmYXVsdE1ldGFTY2hlbWEoKSB7XG4gICAgICAgIHN1cGVyLl9hZGREZWZhdWx0TWV0YVNjaGVtYSgpO1xuICAgICAgICBpZiAoIXRoaXMub3B0cy5tZXRhKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCBtZXRhU2NoZW1hID0gdGhpcy5vcHRzLiRkYXRhXG4gICAgICAgICAgICA/IHRoaXMuJGRhdGFNZXRhU2NoZW1hKGRyYWZ0N01ldGFTY2hlbWEsIE1FVEFfU1VQUE9SVF9EQVRBKVxuICAgICAgICAgICAgOiBkcmFmdDdNZXRhU2NoZW1hO1xuICAgICAgICB0aGlzLmFkZE1ldGFTY2hlbWEobWV0YVNjaGVtYSwgTUVUQV9TQ0hFTUFfSUQsIGZhbHNlKTtcbiAgICAgICAgdGhpcy5yZWZzW1wiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9zY2hlbWFcIl0gPSBNRVRBX1NDSEVNQV9JRDtcbiAgICB9XG4gICAgZGVmYXVsdE1ldGEoKSB7XG4gICAgICAgIHJldHVybiAodGhpcy5vcHRzLmRlZmF1bHRNZXRhID1cbiAgICAgICAgICAgIHN1cGVyLmRlZmF1bHRNZXRhKCkgfHwgKHRoaXMuZ2V0U2NoZW1hKE1FVEFfU0NIRU1BX0lEKSA/IE1FVEFfU0NIRU1BX0lEIDogdW5kZWZpbmVkKSk7XG4gICAgfVxufVxuZXhwb3J0cy5BanYgPSBBanY7XG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMgPSBBanY7XG5tb2R1bGUuZXhwb3J0cy5BanYgPSBBanY7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmRlZmF1bHQgPSBBanY7XG52YXIgdmFsaWRhdGVfMSA9IHJlcXVpcmUoXCIuL2NvbXBpbGUvdmFsaWRhdGVcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJLZXl3b3JkQ3h0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB2YWxpZGF0ZV8xLktleXdvcmRDeHQ7IH0gfSk7XG52YXIgY29kZWdlbl8xID0gcmVxdWlyZShcIi4vY29tcGlsZS9jb2RlZ2VuXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29kZWdlbl8xLl87IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzdHJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvZGVnZW5fMS5zdHI7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzdHJpbmdpZnlcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvZGVnZW5fMS5zdHJpbmdpZnk7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJuaWxcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvZGVnZW5fMS5uaWw7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJOYW1lXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjb2RlZ2VuXzEuTmFtZTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkNvZGVHZW5cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvZGVnZW5fMS5Db2RlR2VuOyB9IH0pO1xudmFyIHZhbGlkYXRpb25fZXJyb3JfMSA9IHJlcXVpcmUoXCIuL3J1bnRpbWUvdmFsaWRhdGlvbl9lcnJvclwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlZhbGlkYXRpb25FcnJvclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdmFsaWRhdGlvbl9lcnJvcl8xLmRlZmF1bHQ7IH0gfSk7XG52YXIgcmVmX2Vycm9yXzEgPSByZXF1aXJlKFwiLi9jb21waWxlL3JlZl9lcnJvclwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIk1pc3NpbmdSZWZFcnJvclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVmX2Vycm9yXzEuZGVmYXVsdDsgfSB9KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFqdi5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5mb3JtYXROYW1lcyA9IGV4cG9ydHMuZmFzdEZvcm1hdHMgPSBleHBvcnRzLmZ1bGxGb3JtYXRzID0gdm9pZCAwO1xuZnVuY3Rpb24gZm10RGVmKHZhbGlkYXRlLCBjb21wYXJlKSB7XG4gICAgcmV0dXJuIHsgdmFsaWRhdGUsIGNvbXBhcmUgfTtcbn1cbmV4cG9ydHMuZnVsbEZvcm1hdHMgPSB7XG4gICAgLy8gZGF0ZTogaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzMzOSNzZWN0aW9uLTUuNlxuICAgIGRhdGU6IGZtdERlZihkYXRlLCBjb21wYXJlRGF0ZSksXG4gICAgLy8gZGF0ZS10aW1lOiBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzMzM5I3NlY3Rpb24tNS42XG4gICAgdGltZTogZm10RGVmKHRpbWUsIGNvbXBhcmVUaW1lKSxcbiAgICBcImRhdGUtdGltZVwiOiBmbXREZWYoZGF0ZV90aW1lLCBjb21wYXJlRGF0ZVRpbWUpLFxuICAgIC8vIGR1cmF0aW9uOiBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzMzOSNhcHBlbmRpeC1BXG4gICAgZHVyYXRpb246IC9eUCg/ISQpKChcXGQrWSk/KFxcZCtNKT8oXFxkK0QpPyhUKD89XFxkKShcXGQrSCk/KFxcZCtNKT8oXFxkK1MpPyk/fChcXGQrVyk/KSQvLFxuICAgIHVyaSxcbiAgICBcInVyaS1yZWZlcmVuY2VcIjogL14oPzpbYS16XVthLXowLTkrXFwtLl0qOik/KD86XFwvP1xcLyg/Oig/OlthLXowLTlcXC0uX34hJCYnKCkqKyw7PTpdfCVbMC05YS1mXXsyfSkqQCk/KD86XFxbKD86KD86KD86KD86WzAtOWEtZl17MSw0fTopezZ9fDo6KD86WzAtOWEtZl17MSw0fTopezV9fCg/OlswLTlhLWZdezEsNH0pPzo6KD86WzAtOWEtZl17MSw0fTopezR9fCg/Oig/OlswLTlhLWZdezEsNH06KXswLDF9WzAtOWEtZl17MSw0fSk/OjooPzpbMC05YS1mXXsxLDR9Oil7M318KD86KD86WzAtOWEtZl17MSw0fTopezAsMn1bMC05YS1mXXsxLDR9KT86Oig/OlswLTlhLWZdezEsNH06KXsyfXwoPzooPzpbMC05YS1mXXsxLDR9Oil7MCwzfVswLTlhLWZdezEsNH0pPzo6WzAtOWEtZl17MSw0fTp8KD86KD86WzAtOWEtZl17MSw0fTopezAsNH1bMC05YS1mXXsxLDR9KT86OikoPzpbMC05YS1mXXsxLDR9OlswLTlhLWZdezEsNH18KD86KD86MjVbMC01XXwyWzAtNF1cXGR8WzAxXT9cXGRcXGQ/KVxcLil7M30oPzoyNVswLTVdfDJbMC00XVxcZHxbMDFdP1xcZFxcZD8pKXwoPzooPzpbMC05YS1mXXsxLDR9Oil7MCw1fVswLTlhLWZdezEsNH0pPzo6WzAtOWEtZl17MSw0fXwoPzooPzpbMC05YS1mXXsxLDR9Oil7MCw2fVswLTlhLWZdezEsNH0pPzo6KXxbVnZdWzAtOWEtZl0rXFwuW2EtejAtOVxcLS5ffiEkJicoKSorLDs9Ol0rKVxcXXwoPzooPzoyNVswLTVdfDJbMC00XVxcZHxbMDFdP1xcZFxcZD8pXFwuKXszfSg/OjI1WzAtNV18MlswLTRdXFxkfFswMV0/XFxkXFxkPyl8KD86W2EtejAtOVxcLS5ffiEkJidcIigpKissOz1dfCVbMC05YS1mXXsyfSkqKSg/OjpcXGQqKT8oPzpcXC8oPzpbYS16MC05XFwtLl9+ISQmJ1wiKCkqKyw7PTpAXXwlWzAtOWEtZl17Mn0pKikqfFxcLyg/Oig/OlthLXowLTlcXC0uX34hJCYnXCIoKSorLDs9OkBdfCVbMC05YS1mXXsyfSkrKD86XFwvKD86W2EtejAtOVxcLS5ffiEkJidcIigpKissOz06QF18JVswLTlhLWZdezJ9KSopKik/fCg/OlthLXowLTlcXC0uX34hJCYnXCIoKSorLDs9OkBdfCVbMC05YS1mXXsyfSkrKD86XFwvKD86W2EtejAtOVxcLS5ffiEkJidcIigpKissOz06QF18JVswLTlhLWZdezJ9KSopKik/KD86XFw/KD86W2EtejAtOVxcLS5ffiEkJidcIigpKissOz06QC8/XXwlWzAtOWEtZl17Mn0pKik/KD86Iyg/OlthLXowLTlcXC0uX34hJCYnXCIoKSorLDs9OkAvP118JVswLTlhLWZdezJ9KSopPyQvaSxcbiAgICAvLyB1cmktdGVtcGxhdGU6IGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM2NTcwXG4gICAgXCJ1cmktdGVtcGxhdGVcIjogL14oPzooPzpbXlxceDAwLVxceDIwXCInPD4lXFxcXF5ge3x9XXwlWzAtOWEtZl17Mn0pfFxce1srIy4vOz8mPSwhQHxdPyg/OlthLXowLTlfXXwlWzAtOWEtZl17Mn0pKyg/OjpbMS05XVswLTldezAsM318XFwqKT8oPzosKD86W2EtejAtOV9dfCVbMC05YS1mXXsyfSkrKD86OlsxLTldWzAtOV17MCwzfXxcXCopPykqXFx9KSokL2ksXG4gICAgLy8gRm9yIHRoZSBzb3VyY2U6IGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL2RwZXJpbmkvNzI5Mjk0XG4gICAgLy8gRm9yIHRlc3QgY2FzZXM6IGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9kZW1vL3VybC1yZWdleFxuICAgIHVybDogL14oPzpodHRwcz98ZnRwKTpcXC9cXC8oPzpcXFMrKD86OlxcUyopP0ApPyg/Oig/ISg/OjEwfDEyNykoPzpcXC5cXGR7MSwzfSl7M30pKD8hKD86MTY5XFwuMjU0fDE5MlxcLjE2OCkoPzpcXC5cXGR7MSwzfSl7Mn0pKD8hMTcyXFwuKD86MVs2LTldfDJcXGR8M1swLTFdKSg/OlxcLlxcZHsxLDN9KXsyfSkoPzpbMS05XVxcZD98MVxcZFxcZHwyWzAxXVxcZHwyMlswLTNdKSg/OlxcLig/OjE/XFxkezEsMn18MlswLTRdXFxkfDI1WzAtNV0pKXsyfSg/OlxcLig/OlsxLTldXFxkP3wxXFxkXFxkfDJbMC00XVxcZHwyNVswLTRdKSl8KD86KD86W2EtejAtOVxcdXswMGExfS1cXHV7ZmZmZn1dKy0pKlthLXowLTlcXHV7MDBhMX0tXFx1e2ZmZmZ9XSspKD86XFwuKD86W2EtejAtOVxcdXswMGExfS1cXHV7ZmZmZn1dKy0pKlthLXowLTlcXHV7MDBhMX0tXFx1e2ZmZmZ9XSspKig/OlxcLig/OlthLXpcXHV7MDBhMX0tXFx1e2ZmZmZ9XXsyLH0pKSkoPzo6XFxkezIsNX0pPyg/OlxcL1teXFxzXSopPyQvaXUsXG4gICAgZW1haWw6IC9eW2EtejAtOSEjJCUmJyorLz0/Xl9ge3x9fi1dKyg/OlxcLlthLXowLTkhIyQlJicqKy89P15fYHt8fX4tXSspKkAoPzpbYS16MC05XSg/OlthLXowLTktXSpbYS16MC05XSk/XFwuKStbYS16MC05XSg/OlthLXowLTktXSpbYS16MC05XSk/JC9pLFxuICAgIGhvc3RuYW1lOiAvXig/PS57MSwyNTN9XFwuPyQpW2EtejAtOV0oPzpbYS16MC05LV17MCw2MX1bYS16MC05XSk/KD86XFwuW2EtejAtOV0oPzpbLTAtOWEtel17MCw2MX1bMC05YS16XSk/KSpcXC4/JC9pLFxuICAgIC8vIG9wdGltaXplZCBodHRwczovL3d3dy5zYWZhcmlib29rc29ubGluZS5jb20vbGlicmFyeS92aWV3L3JlZ3VsYXItZXhwcmVzc2lvbnMtY29va2Jvb2svOTc4MDU5NjgwMjgzNy9jaDA3czE2Lmh0bWxcbiAgICBpcHY0OiAvXig/Oig/OjI1WzAtNV18MlswLTRdXFxkfFswMV0/XFxkXFxkPylcXC4pezN9KD86MjVbMC01XXwyWzAtNF1cXGR8WzAxXT9cXGRcXGQ/KSQvLFxuICAgIGlwdjY6IC9eKCgoWzAtOWEtZl17MSw0fTopezd9KFswLTlhLWZdezEsNH18OikpfCgoWzAtOWEtZl17MSw0fTopezZ9KDpbMC05YS1mXXsxLDR9fCgoMjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKFxcLigyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldP1xcZCkpezN9KXw6KSl8KChbMC05YS1mXXsxLDR9Oil7NX0oKCg6WzAtOWEtZl17MSw0fSl7MSwyfSl8OigoMjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKFxcLigyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldP1xcZCkpezN9KXw6KSl8KChbMC05YS1mXXsxLDR9Oil7NH0oKCg6WzAtOWEtZl17MSw0fSl7MSwzfSl8KCg6WzAtOWEtZl17MSw0fSk/OigoMjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKFxcLigyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldP1xcZCkpezN9KSl8OikpfCgoWzAtOWEtZl17MSw0fTopezN9KCgoOlswLTlhLWZdezEsNH0pezEsNH0pfCgoOlswLTlhLWZdezEsNH0pezAsMn06KCgyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldP1xcZCkoXFwuKDI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV0/XFxkKSl7M30pKXw6KSl8KChbMC05YS1mXXsxLDR9Oil7Mn0oKCg6WzAtOWEtZl17MSw0fSl7MSw1fSl8KCg6WzAtOWEtZl17MSw0fSl7MCwzfTooKDI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV0/XFxkKShcXC4oMjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKXszfSkpfDopKXwoKFswLTlhLWZdezEsNH06KXsxfSgoKDpbMC05YS1mXXsxLDR9KXsxLDZ9KXwoKDpbMC05YS1mXXsxLDR9KXswLDR9OigoMjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKFxcLigyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldP1xcZCkpezN9KSl8OikpfCg6KCgoOlswLTlhLWZdezEsNH0pezEsN30pfCgoOlswLTlhLWZdezEsNH0pezAsNX06KCgyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldP1xcZCkoXFwuKDI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV0/XFxkKSl7M30pKXw6KSkpJC9pLFxuICAgIHJlZ2V4LFxuICAgIC8vIHV1aWQ6IGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzQxMjJcbiAgICB1dWlkOiAvXig/OnVybjp1dWlkOik/WzAtOWEtZl17OH0tKD86WzAtOWEtZl17NH0tKXszfVswLTlhLWZdezEyfSQvaSxcbiAgICAvLyBKU09OLXBvaW50ZXI6IGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM2OTAxXG4gICAgLy8gdXJpIGZyYWdtZW50OiBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzk4NiNhcHBlbmRpeC1BXG4gICAgXCJqc29uLXBvaW50ZXJcIjogL14oPzpcXC8oPzpbXn4vXXx+MHx+MSkqKSokLyxcbiAgICBcImpzb24tcG9pbnRlci11cmktZnJhZ21lbnRcIjogL14jKD86XFwvKD86W2EtejAtOV9cXC0uISQmJygpKissOzo9QF18JVswLTlhLWZdezJ9fH4wfH4xKSopKiQvaSxcbiAgICAvLyByZWxhdGl2ZSBKU09OLXBvaW50ZXI6IGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL2RyYWZ0LWx1ZmYtcmVsYXRpdmUtanNvbi1wb2ludGVyLTAwXG4gICAgXCJyZWxhdGl2ZS1qc29uLXBvaW50ZXJcIjogL14oPzowfFsxLTldWzAtOV0qKSg/OiN8KD86XFwvKD86W15+L118fjB8fjEpKikqKSQvLFxuICAgIC8vIHRoZSBmb2xsb3dpbmcgZm9ybWF0cyBhcmUgdXNlZCBieSB0aGUgb3BlbmFwaSBzcGVjaWZpY2F0aW9uOiBodHRwczovL3NwZWMub3BlbmFwaXMub3JnL29hcy92My4wLjAjZGF0YS10eXBlc1xuICAgIC8vIGJ5dGU6IGh0dHBzOi8vZ2l0aHViLmNvbS9taWd1ZWxtb3RhL2lzLWJhc2U2NFxuICAgIGJ5dGUsXG4gICAgLy8gc2lnbmVkIDMyIGJpdCBpbnRlZ2VyXG4gICAgaW50MzI6IHsgdHlwZTogXCJudW1iZXJcIiwgdmFsaWRhdGU6IHZhbGlkYXRlSW50MzIgfSxcbiAgICAvLyBzaWduZWQgNjQgYml0IGludGVnZXJcbiAgICBpbnQ2NDogeyB0eXBlOiBcIm51bWJlclwiLCB2YWxpZGF0ZTogdmFsaWRhdGVJbnQ2NCB9LFxuICAgIC8vIEMtdHlwZSBmbG9hdFxuICAgIGZsb2F0OiB7IHR5cGU6IFwibnVtYmVyXCIsIHZhbGlkYXRlOiB2YWxpZGF0ZU51bWJlciB9LFxuICAgIC8vIEMtdHlwZSBkb3VibGVcbiAgICBkb3VibGU6IHsgdHlwZTogXCJudW1iZXJcIiwgdmFsaWRhdGU6IHZhbGlkYXRlTnVtYmVyIH0sXG4gICAgLy8gaGludCB0byB0aGUgVUkgdG8gaGlkZSBpbnB1dCBzdHJpbmdzXG4gICAgcGFzc3dvcmQ6IHRydWUsXG4gICAgLy8gdW5jaGVja2VkIHN0cmluZyBwYXlsb2FkXG4gICAgYmluYXJ5OiB0cnVlLFxufTtcbmV4cG9ydHMuZmFzdEZvcm1hdHMgPSB7XG4gICAgLi4uZXhwb3J0cy5mdWxsRm9ybWF0cyxcbiAgICBkYXRlOiBmbXREZWYoL15cXGRcXGRcXGRcXGQtWzAtMV1cXGQtWzAtM11cXGQkLywgY29tcGFyZURhdGUpLFxuICAgIHRpbWU6IGZtdERlZigvXig/OlswLTJdXFxkOlswLTVdXFxkOlswLTVdXFxkfDIzOjU5OjYwKSg/OlxcLlxcZCspPyg/Onp8WystXVxcZFxcZCg/Ojo/XFxkXFxkKT8pPyQvaSwgY29tcGFyZVRpbWUpLFxuICAgIFwiZGF0ZS10aW1lXCI6IGZtdERlZigvXlxcZFxcZFxcZFxcZC1bMC0xXVxcZC1bMC0zXVxcZFt0XFxzXSg/OlswLTJdXFxkOlswLTVdXFxkOlswLTVdXFxkfDIzOjU5OjYwKSg/OlxcLlxcZCspPyg/Onp8WystXVxcZFxcZCg/Ojo/XFxkXFxkKT8pJC9pLCBjb21wYXJlRGF0ZVRpbWUpLFxuICAgIC8vIHVyaTogaHR0cHM6Ly9naXRodWIuY29tL21hZmludG9zaC9pcy1teS1qc29uLXZhbGlkL2Jsb2IvbWFzdGVyL2Zvcm1hdHMuanNcbiAgICB1cmk6IC9eKD86W2Etel1bYS16MC05K1xcLS5dKjopKD86XFwvP1xcLyk/W15cXHNdKiQvaSxcbiAgICBcInVyaS1yZWZlcmVuY2VcIjogL14oPzooPzpbYS16XVthLXowLTkrXFwtLl0qOik/XFwvP1xcLyk/KD86W15cXFxcXFxzI11bXlxccyNdKik/KD86I1teXFxcXFxcc10qKT8kL2ksXG4gICAgLy8gZW1haWwgKHNvdXJjZXMgZnJvbSBqc2VuIHZhbGlkYXRvcik6XG4gICAgLy8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8yMDEzMjMvdXNpbmctYS1yZWd1bGFyLWV4cHJlc3Npb24tdG8tdmFsaWRhdGUtYW4tZW1haWwtYWRkcmVzcyNhbnN3ZXItODgyOTM2M1xuICAgIC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw1L2Zvcm1zLmh0bWwjdmFsaWQtZS1tYWlsLWFkZHJlc3MgKHNlYXJjaCBmb3IgJ3dpbGZ1bCB2aW9sYXRpb24nKVxuICAgIGVtYWlsOiAvXlthLXowLTkuISMkJSYnKisvPT9eX2B7fH1+LV0rQFthLXowLTldKD86W2EtejAtOS1dezAsNjF9W2EtejAtOV0pPyg/OlxcLlthLXowLTldKD86W2EtejAtOS1dezAsNjF9W2EtejAtOV0pPykqJC9pLFxufTtcbmV4cG9ydHMuZm9ybWF0TmFtZXMgPSBPYmplY3Qua2V5cyhleHBvcnRzLmZ1bGxGb3JtYXRzKTtcbmZ1bmN0aW9uIGlzTGVhcFllYXIoeWVhcikge1xuICAgIC8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzMzM5I2FwcGVuZGl4LUNcbiAgICByZXR1cm4geWVhciAlIDQgPT09IDAgJiYgKHllYXIgJSAxMDAgIT09IDAgfHwgeWVhciAlIDQwMCA9PT0gMCk7XG59XG5jb25zdCBEQVRFID0gL14oXFxkXFxkXFxkXFxkKS0oXFxkXFxkKS0oXFxkXFxkKSQvO1xuY29uc3QgREFZUyA9IFswLCAzMSwgMjgsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzEsIDMwLCAzMSwgMzAsIDMxXTtcbmZ1bmN0aW9uIGRhdGUoc3RyKSB7XG4gICAgLy8gZnVsbC1kYXRlIGZyb20gaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzMzOSNzZWN0aW9uLTUuNlxuICAgIGNvbnN0IG1hdGNoZXMgPSBEQVRFLmV4ZWMoc3RyKTtcbiAgICBpZiAoIW1hdGNoZXMpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCB5ZWFyID0gK21hdGNoZXNbMV07XG4gICAgY29uc3QgbW9udGggPSArbWF0Y2hlc1syXTtcbiAgICBjb25zdCBkYXkgPSArbWF0Y2hlc1szXTtcbiAgICByZXR1cm4gKG1vbnRoID49IDEgJiZcbiAgICAgICAgbW9udGggPD0gMTIgJiZcbiAgICAgICAgZGF5ID49IDEgJiZcbiAgICAgICAgZGF5IDw9IChtb250aCA9PT0gMiAmJiBpc0xlYXBZZWFyKHllYXIpID8gMjkgOiBEQVlTW21vbnRoXSkpO1xufVxuZnVuY3Rpb24gY29tcGFyZURhdGUoZDEsIGQyKSB7XG4gICAgaWYgKCEoZDEgJiYgZDIpKVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGlmIChkMSA+IGQyKVxuICAgICAgICByZXR1cm4gMTtcbiAgICBpZiAoZDEgPCBkMilcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgIHJldHVybiAwO1xufVxuY29uc3QgVElNRSA9IC9eKFxcZFxcZCk6KFxcZFxcZCk6KFxcZFxcZCkoXFwuXFxkKyk/KHp8WystXVxcZFxcZCg/Ojo/XFxkXFxkKT8pPyQvaTtcbmZ1bmN0aW9uIHRpbWUoc3RyLCB3aXRoVGltZVpvbmUpIHtcbiAgICBjb25zdCBtYXRjaGVzID0gVElNRS5leGVjKHN0cik7XG4gICAgaWYgKCFtYXRjaGVzKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgY29uc3QgaG91ciA9ICttYXRjaGVzWzFdO1xuICAgIGNvbnN0IG1pbnV0ZSA9ICttYXRjaGVzWzJdO1xuICAgIGNvbnN0IHNlY29uZCA9ICttYXRjaGVzWzNdO1xuICAgIGNvbnN0IHRpbWVab25lID0gbWF0Y2hlc1s1XTtcbiAgICByZXR1cm4gKCgoaG91ciA8PSAyMyAmJiBtaW51dGUgPD0gNTkgJiYgc2Vjb25kIDw9IDU5KSB8fFxuICAgICAgICAoaG91ciA9PT0gMjMgJiYgbWludXRlID09PSA1OSAmJiBzZWNvbmQgPT09IDYwKSkgJiZcbiAgICAgICAgKCF3aXRoVGltZVpvbmUgfHwgdGltZVpvbmUgIT09IFwiXCIpKTtcbn1cbmZ1bmN0aW9uIGNvbXBhcmVUaW1lKHQxLCB0Mikge1xuICAgIGlmICghKHQxICYmIHQyKSlcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBjb25zdCBhMSA9IFRJTUUuZXhlYyh0MSk7XG4gICAgY29uc3QgYTIgPSBUSU1FLmV4ZWModDIpO1xuICAgIGlmICghKGExICYmIGEyKSlcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB0MSA9IGExWzFdICsgYTFbMl0gKyBhMVszXSArIChhMVs0XSB8fCBcIlwiKTtcbiAgICB0MiA9IGEyWzFdICsgYTJbMl0gKyBhMlszXSArIChhMls0XSB8fCBcIlwiKTtcbiAgICBpZiAodDEgPiB0MilcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgaWYgKHQxIDwgdDIpXG4gICAgICAgIHJldHVybiAtMTtcbiAgICByZXR1cm4gMDtcbn1cbmNvbnN0IERBVEVfVElNRV9TRVBBUkFUT1IgPSAvdHxcXHMvaTtcbmZ1bmN0aW9uIGRhdGVfdGltZShzdHIpIHtcbiAgICAvLyBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzMzM5I3NlY3Rpb24tNS42XG4gICAgY29uc3QgZGF0ZVRpbWUgPSBzdHIuc3BsaXQoREFURV9USU1FX1NFUEFSQVRPUik7XG4gICAgcmV0dXJuIGRhdGVUaW1lLmxlbmd0aCA9PT0gMiAmJiBkYXRlKGRhdGVUaW1lWzBdKSAmJiB0aW1lKGRhdGVUaW1lWzFdLCB0cnVlKTtcbn1cbmZ1bmN0aW9uIGNvbXBhcmVEYXRlVGltZShkdDEsIGR0Mikge1xuICAgIGlmICghKGR0MSAmJiBkdDIpKVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGNvbnN0IFtkMSwgdDFdID0gZHQxLnNwbGl0KERBVEVfVElNRV9TRVBBUkFUT1IpO1xuICAgIGNvbnN0IFtkMiwgdDJdID0gZHQyLnNwbGl0KERBVEVfVElNRV9TRVBBUkFUT1IpO1xuICAgIGNvbnN0IHJlcyA9IGNvbXBhcmVEYXRlKGQxLCBkMik7XG4gICAgaWYgKHJlcyA9PT0gdW5kZWZpbmVkKVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHJldHVybiByZXMgfHwgY29tcGFyZVRpbWUodDEsIHQyKTtcbn1cbmNvbnN0IE5PVF9VUklfRlJBR01FTlQgPSAvXFwvfDovO1xuY29uc3QgVVJJID0gL14oPzpbYS16XVthLXowLTkrXFwtLl0qOikoPzpcXC8/XFwvKD86KD86W2EtejAtOVxcLS5ffiEkJicoKSorLDs9Ol18JVswLTlhLWZdezJ9KSpAKT8oPzpcXFsoPzooPzooPzooPzpbMC05YS1mXXsxLDR9Oil7Nn18OjooPzpbMC05YS1mXXsxLDR9Oil7NX18KD86WzAtOWEtZl17MSw0fSk/OjooPzpbMC05YS1mXXsxLDR9Oil7NH18KD86KD86WzAtOWEtZl17MSw0fTopezAsMX1bMC05YS1mXXsxLDR9KT86Oig/OlswLTlhLWZdezEsNH06KXszfXwoPzooPzpbMC05YS1mXXsxLDR9Oil7MCwyfVswLTlhLWZdezEsNH0pPzo6KD86WzAtOWEtZl17MSw0fTopezJ9fCg/Oig/OlswLTlhLWZdezEsNH06KXswLDN9WzAtOWEtZl17MSw0fSk/OjpbMC05YS1mXXsxLDR9OnwoPzooPzpbMC05YS1mXXsxLDR9Oil7MCw0fVswLTlhLWZdezEsNH0pPzo6KSg/OlswLTlhLWZdezEsNH06WzAtOWEtZl17MSw0fXwoPzooPzoyNVswLTVdfDJbMC00XVxcZHxbMDFdP1xcZFxcZD8pXFwuKXszfSg/OjI1WzAtNV18MlswLTRdXFxkfFswMV0/XFxkXFxkPykpfCg/Oig/OlswLTlhLWZdezEsNH06KXswLDV9WzAtOWEtZl17MSw0fSk/OjpbMC05YS1mXXsxLDR9fCg/Oig/OlswLTlhLWZdezEsNH06KXswLDZ9WzAtOWEtZl17MSw0fSk/OjopfFtWdl1bMC05YS1mXStcXC5bYS16MC05XFwtLl9+ISQmJygpKissOz06XSspXFxdfCg/Oig/OjI1WzAtNV18MlswLTRdXFxkfFswMV0/XFxkXFxkPylcXC4pezN9KD86MjVbMC01XXwyWzAtNF1cXGR8WzAxXT9cXGRcXGQ/KXwoPzpbYS16MC05XFwtLl9+ISQmJygpKissOz1dfCVbMC05YS1mXXsyfSkqKSg/OjpcXGQqKT8oPzpcXC8oPzpbYS16MC05XFwtLl9+ISQmJygpKissOz06QF18JVswLTlhLWZdezJ9KSopKnxcXC8oPzooPzpbYS16MC05XFwtLl9+ISQmJygpKissOz06QF18JVswLTlhLWZdezJ9KSsoPzpcXC8oPzpbYS16MC05XFwtLl9+ISQmJygpKissOz06QF18JVswLTlhLWZdezJ9KSopKik/fCg/OlthLXowLTlcXC0uX34hJCYnKCkqKyw7PTpAXXwlWzAtOWEtZl17Mn0pKyg/OlxcLyg/OlthLXowLTlcXC0uX34hJCYnKCkqKyw7PTpAXXwlWzAtOWEtZl17Mn0pKikqKSg/OlxcPyg/OlthLXowLTlcXC0uX34hJCYnKCkqKyw7PTpALz9dfCVbMC05YS1mXXsyfSkqKT8oPzojKD86W2EtejAtOVxcLS5ffiEkJicoKSorLDs9OkAvP118JVswLTlhLWZdezJ9KSopPyQvaTtcbmZ1bmN0aW9uIHVyaShzdHIpIHtcbiAgICAvLyBodHRwOi8vam1yd2FyZS5jb20vYXJ0aWNsZXMvMjAwOS91cmlfcmVnZXhwL1VSSV9yZWdleC5odG1sICsgb3B0aW9uYWwgcHJvdG9jb2wgKyByZXF1aXJlZCBcIi5cIlxuICAgIHJldHVybiBOT1RfVVJJX0ZSQUdNRU5ULnRlc3Qoc3RyKSAmJiBVUkkudGVzdChzdHIpO1xufVxuY29uc3QgQllURSA9IC9eKD86W0EtWmEtejAtOSsvXXs0fSkqKD86W0EtWmEtejAtOSsvXXsyfT09fFtBLVphLXowLTkrL117M309KT8kL2dtO1xuZnVuY3Rpb24gYnl0ZShzdHIpIHtcbiAgICBCWVRFLmxhc3RJbmRleCA9IDA7XG4gICAgcmV0dXJuIEJZVEUudGVzdChzdHIpO1xufVxuY29uc3QgTUlOX0lOVDMyID0gLSgyICoqIDMxKTtcbmNvbnN0IE1BWF9JTlQzMiA9IDIgKiogMzEgLSAxO1xuZnVuY3Rpb24gdmFsaWRhdGVJbnQzMih2YWx1ZSkge1xuICAgIHJldHVybiBOdW1iZXIuaXNJbnRlZ2VyKHZhbHVlKSAmJiB2YWx1ZSA8PSBNQVhfSU5UMzIgJiYgdmFsdWUgPj0gTUlOX0lOVDMyO1xufVxuZnVuY3Rpb24gdmFsaWRhdGVJbnQ2NCh2YWx1ZSkge1xuICAgIC8vIEpTT04gYW5kIGphdmFzY3JpcHQgbWF4IEludCBpcyAyKio1Mywgc28gYW55IGludCB0aGF0IHBhc3NlcyBpc0ludGVnZXIgaXMgdmFsaWQgZm9yIEludDY0XG4gICAgcmV0dXJuIE51bWJlci5pc0ludGVnZXIodmFsdWUpO1xufVxuZnVuY3Rpb24gdmFsaWRhdGVOdW1iZXIoKSB7XG4gICAgcmV0dXJuIHRydWU7XG59XG5jb25zdCBaX0FOQ0hPUiA9IC9bXlxcXFxdXFxcXFovO1xuZnVuY3Rpb24gcmVnZXgoc3RyKSB7XG4gICAgaWYgKFpfQU5DSE9SLnRlc3Qoc3RyKSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIHRyeSB7XG4gICAgICAgIG5ldyBSZWdFeHAoc3RyKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1mb3JtYXRzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnJlZ2V4cENvZGUgPSBleHBvcnRzLmdldEVzbUV4cG9ydE5hbWUgPSBleHBvcnRzLmdldFByb3BlcnR5ID0gZXhwb3J0cy5zYWZlU3RyaW5naWZ5ID0gZXhwb3J0cy5zdHJpbmdpZnkgPSBleHBvcnRzLnN0ckNvbmNhdCA9IGV4cG9ydHMuYWRkQ29kZUFyZyA9IGV4cG9ydHMuc3RyID0gZXhwb3J0cy5fID0gZXhwb3J0cy5uaWwgPSBleHBvcnRzLl9Db2RlID0gZXhwb3J0cy5OYW1lID0gZXhwb3J0cy5JREVOVElGSUVSID0gZXhwb3J0cy5fQ29kZU9yTmFtZSA9IHZvaWQgMDtcbmNsYXNzIF9Db2RlT3JOYW1lIHtcbn1cbmV4cG9ydHMuX0NvZGVPck5hbWUgPSBfQ29kZU9yTmFtZTtcbmV4cG9ydHMuSURFTlRJRklFUiA9IC9eW2EteiRfXVthLXokXzAtOV0qJC9pO1xuY2xhc3MgTmFtZSBleHRlbmRzIF9Db2RlT3JOYW1lIHtcbiAgICBjb25zdHJ1Y3RvcihzKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIGlmICghZXhwb3J0cy5JREVOVElGSUVSLnRlc3QocykpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb2RlR2VuOiBuYW1lIG11c3QgYmUgYSB2YWxpZCBpZGVudGlmaWVyXCIpO1xuICAgICAgICB0aGlzLnN0ciA9IHM7XG4gICAgfVxuICAgIHRvU3RyaW5nKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdHI7XG4gICAgfVxuICAgIGVtcHR5U3RyKCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGdldCBuYW1lcygpIHtcbiAgICAgICAgcmV0dXJuIHsgW3RoaXMuc3RyXTogMSB9O1xuICAgIH1cbn1cbmV4cG9ydHMuTmFtZSA9IE5hbWU7XG5jbGFzcyBfQ29kZSBleHRlbmRzIF9Db2RlT3JOYW1lIHtcbiAgICBjb25zdHJ1Y3Rvcihjb2RlKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuX2l0ZW1zID0gdHlwZW9mIGNvZGUgPT09IFwic3RyaW5nXCIgPyBbY29kZV0gOiBjb2RlO1xuICAgIH1cbiAgICB0b1N0cmluZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RyO1xuICAgIH1cbiAgICBlbXB0eVN0cigpIHtcbiAgICAgICAgaWYgKHRoaXMuX2l0ZW1zLmxlbmd0aCA+IDEpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLl9pdGVtc1swXTtcbiAgICAgICAgcmV0dXJuIGl0ZW0gPT09IFwiXCIgfHwgaXRlbSA9PT0gJ1wiXCInO1xuICAgIH1cbiAgICBnZXQgc3RyKCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHJldHVybiAoKF9hID0gdGhpcy5fc3RyKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAodGhpcy5fc3RyID0gdGhpcy5faXRlbXMucmVkdWNlKChzLCBjKSA9PiBgJHtzfSR7Y31gLCBcIlwiKSkpO1xuICAgIH1cbiAgICBnZXQgbmFtZXMoKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgcmV0dXJuICgoX2EgPSB0aGlzLl9uYW1lcykgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogKHRoaXMuX25hbWVzID0gdGhpcy5faXRlbXMucmVkdWNlKChuYW1lcywgYykgPT4ge1xuICAgICAgICAgICAgaWYgKGMgaW5zdGFuY2VvZiBOYW1lKVxuICAgICAgICAgICAgICAgIG5hbWVzW2Muc3RyXSA9IChuYW1lc1tjLnN0cl0gfHwgMCkgKyAxO1xuICAgICAgICAgICAgcmV0dXJuIG5hbWVzO1xuICAgICAgICB9LCB7fSkpKTtcbiAgICB9XG59XG5leHBvcnRzLl9Db2RlID0gX0NvZGU7XG5leHBvcnRzLm5pbCA9IG5ldyBfQ29kZShcIlwiKTtcbmZ1bmN0aW9uIF8oc3RycywgLi4uYXJncykge1xuICAgIGNvbnN0IGNvZGUgPSBbc3Ryc1swXV07XG4gICAgbGV0IGkgPSAwO1xuICAgIHdoaWxlIChpIDwgYXJncy5sZW5ndGgpIHtcbiAgICAgICAgYWRkQ29kZUFyZyhjb2RlLCBhcmdzW2ldKTtcbiAgICAgICAgY29kZS5wdXNoKHN0cnNbKytpXSk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgX0NvZGUoY29kZSk7XG59XG5leHBvcnRzLl8gPSBfO1xuY29uc3QgcGx1cyA9IG5ldyBfQ29kZShcIitcIik7XG5mdW5jdGlvbiBzdHIoc3RycywgLi4uYXJncykge1xuICAgIGNvbnN0IGV4cHIgPSBbc2FmZVN0cmluZ2lmeShzdHJzWzBdKV07XG4gICAgbGV0IGkgPSAwO1xuICAgIHdoaWxlIChpIDwgYXJncy5sZW5ndGgpIHtcbiAgICAgICAgZXhwci5wdXNoKHBsdXMpO1xuICAgICAgICBhZGRDb2RlQXJnKGV4cHIsIGFyZ3NbaV0pO1xuICAgICAgICBleHByLnB1c2gocGx1cywgc2FmZVN0cmluZ2lmeShzdHJzWysraV0pKTtcbiAgICB9XG4gICAgb3B0aW1pemUoZXhwcik7XG4gICAgcmV0dXJuIG5ldyBfQ29kZShleHByKTtcbn1cbmV4cG9ydHMuc3RyID0gc3RyO1xuZnVuY3Rpb24gYWRkQ29kZUFyZyhjb2RlLCBhcmcpIHtcbiAgICBpZiAoYXJnIGluc3RhbmNlb2YgX0NvZGUpXG4gICAgICAgIGNvZGUucHVzaCguLi5hcmcuX2l0ZW1zKTtcbiAgICBlbHNlIGlmIChhcmcgaW5zdGFuY2VvZiBOYW1lKVxuICAgICAgICBjb2RlLnB1c2goYXJnKTtcbiAgICBlbHNlXG4gICAgICAgIGNvZGUucHVzaChpbnRlcnBvbGF0ZShhcmcpKTtcbn1cbmV4cG9ydHMuYWRkQ29kZUFyZyA9IGFkZENvZGVBcmc7XG5mdW5jdGlvbiBvcHRpbWl6ZShleHByKSB7XG4gICAgbGV0IGkgPSAxO1xuICAgIHdoaWxlIChpIDwgZXhwci5sZW5ndGggLSAxKSB7XG4gICAgICAgIGlmIChleHByW2ldID09PSBwbHVzKSB7XG4gICAgICAgICAgICBjb25zdCByZXMgPSBtZXJnZUV4cHJJdGVtcyhleHByW2kgLSAxXSwgZXhwcltpICsgMV0pO1xuICAgICAgICAgICAgaWYgKHJlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgZXhwci5zcGxpY2UoaSAtIDEsIDMsIHJlcyk7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBleHByW2krK10gPSBcIitcIjtcbiAgICAgICAgfVxuICAgICAgICBpKys7XG4gICAgfVxufVxuZnVuY3Rpb24gbWVyZ2VFeHBySXRlbXMoYSwgYikge1xuICAgIGlmIChiID09PSAnXCJcIicpXG4gICAgICAgIHJldHVybiBhO1xuICAgIGlmIChhID09PSAnXCJcIicpXG4gICAgICAgIHJldHVybiBiO1xuICAgIGlmICh0eXBlb2YgYSA9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGlmIChiIGluc3RhbmNlb2YgTmFtZSB8fCBhW2EubGVuZ3RoIC0gMV0gIT09ICdcIicpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGlmICh0eXBlb2YgYiAhPSBcInN0cmluZ1wiKVxuICAgICAgICAgICAgcmV0dXJuIGAke2Euc2xpY2UoMCwgLTEpfSR7Yn1cImA7XG4gICAgICAgIGlmIChiWzBdID09PSAnXCInKVxuICAgICAgICAgICAgcmV0dXJuIGEuc2xpY2UoMCwgLTEpICsgYi5zbGljZSgxKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGIgPT0gXCJzdHJpbmdcIiAmJiBiWzBdID09PSAnXCInICYmICEoYSBpbnN0YW5jZW9mIE5hbWUpKVxuICAgICAgICByZXR1cm4gYFwiJHthfSR7Yi5zbGljZSgxKX1gO1xuICAgIHJldHVybjtcbn1cbmZ1bmN0aW9uIHN0ckNvbmNhdChjMSwgYzIpIHtcbiAgICByZXR1cm4gYzIuZW1wdHlTdHIoKSA/IGMxIDogYzEuZW1wdHlTdHIoKSA/IGMyIDogc3RyIGAke2MxfSR7YzJ9YDtcbn1cbmV4cG9ydHMuc3RyQ29uY2F0ID0gc3RyQ29uY2F0O1xuLy8gVE9ETyBkbyBub3QgYWxsb3cgYXJyYXlzIGhlcmVcbmZ1bmN0aW9uIGludGVycG9sYXRlKHgpIHtcbiAgICByZXR1cm4gdHlwZW9mIHggPT0gXCJudW1iZXJcIiB8fCB0eXBlb2YgeCA9PSBcImJvb2xlYW5cIiB8fCB4ID09PSBudWxsXG4gICAgICAgID8geFxuICAgICAgICA6IHNhZmVTdHJpbmdpZnkoQXJyYXkuaXNBcnJheSh4KSA/IHguam9pbihcIixcIikgOiB4KTtcbn1cbmZ1bmN0aW9uIHN0cmluZ2lmeSh4KSB7XG4gICAgcmV0dXJuIG5ldyBfQ29kZShzYWZlU3RyaW5naWZ5KHgpKTtcbn1cbmV4cG9ydHMuc3RyaW5naWZ5ID0gc3RyaW5naWZ5O1xuZnVuY3Rpb24gc2FmZVN0cmluZ2lmeSh4KSB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHgpXG4gICAgICAgIC5yZXBsYWNlKC9cXHUyMDI4L2csIFwiXFxcXHUyMDI4XCIpXG4gICAgICAgIC5yZXBsYWNlKC9cXHUyMDI5L2csIFwiXFxcXHUyMDI5XCIpO1xufVxuZXhwb3J0cy5zYWZlU3RyaW5naWZ5ID0gc2FmZVN0cmluZ2lmeTtcbmZ1bmN0aW9uIGdldFByb3BlcnR5KGtleSkge1xuICAgIHJldHVybiB0eXBlb2Yga2V5ID09IFwic3RyaW5nXCIgJiYgZXhwb3J0cy5JREVOVElGSUVSLnRlc3Qoa2V5KSA/IG5ldyBfQ29kZShgLiR7a2V5fWApIDogXyBgWyR7a2V5fV1gO1xufVxuZXhwb3J0cy5nZXRQcm9wZXJ0eSA9IGdldFByb3BlcnR5O1xuLy9Eb2VzIGJlc3QgZWZmb3J0IHRvIGZvcm1hdCB0aGUgbmFtZSBwcm9wZXJseVxuZnVuY3Rpb24gZ2V0RXNtRXhwb3J0TmFtZShrZXkpIHtcbiAgICBpZiAodHlwZW9mIGtleSA9PSBcInN0cmluZ1wiICYmIGV4cG9ydHMuSURFTlRJRklFUi50ZXN0KGtleSkpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBfQ29kZShgJHtrZXl9YCk7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihgQ29kZUdlbjogaW52YWxpZCBleHBvcnQgbmFtZTogJHtrZXl9LCB1c2UgZXhwbGljaXQgJGlkIG5hbWUgbWFwcGluZ2ApO1xufVxuZXhwb3J0cy5nZXRFc21FeHBvcnROYW1lID0gZ2V0RXNtRXhwb3J0TmFtZTtcbmZ1bmN0aW9uIHJlZ2V4cENvZGUocngpIHtcbiAgICByZXR1cm4gbmV3IF9Db2RlKHJ4LnRvU3RyaW5nKCkpO1xufVxuZXhwb3J0cy5yZWdleHBDb2RlID0gcmVnZXhwQ29kZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvZGUuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuVmFsdWVTY29wZSA9IGV4cG9ydHMuVmFsdWVTY29wZU5hbWUgPSBleHBvcnRzLlNjb3BlID0gZXhwb3J0cy52YXJLaW5kcyA9IGV4cG9ydHMuVXNlZFZhbHVlU3RhdGUgPSB2b2lkIDA7XG5jb25zdCBjb2RlXzEgPSByZXF1aXJlKFwiLi9jb2RlXCIpO1xuY2xhc3MgVmFsdWVFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgICBjb25zdHJ1Y3RvcihuYW1lKSB7XG4gICAgICAgIHN1cGVyKGBDb2RlR2VuOiBcImNvZGVcIiBmb3IgJHtuYW1lfSBub3QgZGVmaW5lZGApO1xuICAgICAgICB0aGlzLnZhbHVlID0gbmFtZS52YWx1ZTtcbiAgICB9XG59XG52YXIgVXNlZFZhbHVlU3RhdGU7XG4oZnVuY3Rpb24gKFVzZWRWYWx1ZVN0YXRlKSB7XG4gICAgVXNlZFZhbHVlU3RhdGVbVXNlZFZhbHVlU3RhdGVbXCJTdGFydGVkXCJdID0gMF0gPSBcIlN0YXJ0ZWRcIjtcbiAgICBVc2VkVmFsdWVTdGF0ZVtVc2VkVmFsdWVTdGF0ZVtcIkNvbXBsZXRlZFwiXSA9IDFdID0gXCJDb21wbGV0ZWRcIjtcbn0pKFVzZWRWYWx1ZVN0YXRlID0gZXhwb3J0cy5Vc2VkVmFsdWVTdGF0ZSB8fCAoZXhwb3J0cy5Vc2VkVmFsdWVTdGF0ZSA9IHt9KSk7XG5leHBvcnRzLnZhcktpbmRzID0ge1xuICAgIGNvbnN0OiBuZXcgY29kZV8xLk5hbWUoXCJjb25zdFwiKSxcbiAgICBsZXQ6IG5ldyBjb2RlXzEuTmFtZShcImxldFwiKSxcbiAgICB2YXI6IG5ldyBjb2RlXzEuTmFtZShcInZhclwiKSxcbn07XG5jbGFzcyBTY29wZSB7XG4gICAgY29uc3RydWN0b3IoeyBwcmVmaXhlcywgcGFyZW50IH0gPSB7fSkge1xuICAgICAgICB0aGlzLl9uYW1lcyA9IHt9O1xuICAgICAgICB0aGlzLl9wcmVmaXhlcyA9IHByZWZpeGVzO1xuICAgICAgICB0aGlzLl9wYXJlbnQgPSBwYXJlbnQ7XG4gICAgfVxuICAgIHRvTmFtZShuYW1lT3JQcmVmaXgpIHtcbiAgICAgICAgcmV0dXJuIG5hbWVPclByZWZpeCBpbnN0YW5jZW9mIGNvZGVfMS5OYW1lID8gbmFtZU9yUHJlZml4IDogdGhpcy5uYW1lKG5hbWVPclByZWZpeCk7XG4gICAgfVxuICAgIG5hbWUocHJlZml4KSB7XG4gICAgICAgIHJldHVybiBuZXcgY29kZV8xLk5hbWUodGhpcy5fbmV3TmFtZShwcmVmaXgpKTtcbiAgICB9XG4gICAgX25ld05hbWUocHJlZml4KSB7XG4gICAgICAgIGNvbnN0IG5nID0gdGhpcy5fbmFtZXNbcHJlZml4XSB8fCB0aGlzLl9uYW1lR3JvdXAocHJlZml4KTtcbiAgICAgICAgcmV0dXJuIGAke3ByZWZpeH0ke25nLmluZGV4Kyt9YDtcbiAgICB9XG4gICAgX25hbWVHcm91cChwcmVmaXgpIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgaWYgKCgoX2IgPSAoX2EgPSB0aGlzLl9wYXJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5fcHJlZml4ZXMpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5oYXMocHJlZml4KSkgfHwgKHRoaXMuX3ByZWZpeGVzICYmICF0aGlzLl9wcmVmaXhlcy5oYXMocHJlZml4KSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ29kZUdlbjogcHJlZml4IFwiJHtwcmVmaXh9XCIgaXMgbm90IGFsbG93ZWQgaW4gdGhpcyBzY29wZWApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAodGhpcy5fbmFtZXNbcHJlZml4XSA9IHsgcHJlZml4LCBpbmRleDogMCB9KTtcbiAgICB9XG59XG5leHBvcnRzLlNjb3BlID0gU2NvcGU7XG5jbGFzcyBWYWx1ZVNjb3BlTmFtZSBleHRlbmRzIGNvZGVfMS5OYW1lIHtcbiAgICBjb25zdHJ1Y3RvcihwcmVmaXgsIG5hbWVTdHIpIHtcbiAgICAgICAgc3VwZXIobmFtZVN0cik7XG4gICAgICAgIHRoaXMucHJlZml4ID0gcHJlZml4O1xuICAgIH1cbiAgICBzZXRWYWx1ZSh2YWx1ZSwgeyBwcm9wZXJ0eSwgaXRlbUluZGV4IH0pIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLnNjb3BlUGF0aCA9ICgwLCBjb2RlXzEuXykgYC4ke25ldyBjb2RlXzEuTmFtZShwcm9wZXJ0eSl9WyR7aXRlbUluZGV4fV1gO1xuICAgIH1cbn1cbmV4cG9ydHMuVmFsdWVTY29wZU5hbWUgPSBWYWx1ZVNjb3BlTmFtZTtcbmNvbnN0IGxpbmUgPSAoMCwgY29kZV8xLl8pIGBcXG5gO1xuY2xhc3MgVmFsdWVTY29wZSBleHRlbmRzIFNjb3BlIHtcbiAgICBjb25zdHJ1Y3RvcihvcHRzKSB7XG4gICAgICAgIHN1cGVyKG9wdHMpO1xuICAgICAgICB0aGlzLl92YWx1ZXMgPSB7fTtcbiAgICAgICAgdGhpcy5fc2NvcGUgPSBvcHRzLnNjb3BlO1xuICAgICAgICB0aGlzLm9wdHMgPSB7IC4uLm9wdHMsIF9uOiBvcHRzLmxpbmVzID8gbGluZSA6IGNvZGVfMS5uaWwgfTtcbiAgICB9XG4gICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2NvcGU7XG4gICAgfVxuICAgIG5hbWUocHJlZml4KSB7XG4gICAgICAgIHJldHVybiBuZXcgVmFsdWVTY29wZU5hbWUocHJlZml4LCB0aGlzLl9uZXdOYW1lKHByZWZpeCkpO1xuICAgIH1cbiAgICB2YWx1ZShuYW1lT3JQcmVmaXgsIHZhbHVlKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgaWYgKHZhbHVlLnJlZiA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ29kZUdlbjogcmVmIG11c3QgYmUgcGFzc2VkIGluIHZhbHVlXCIpO1xuICAgICAgICBjb25zdCBuYW1lID0gdGhpcy50b05hbWUobmFtZU9yUHJlZml4KTtcbiAgICAgICAgY29uc3QgeyBwcmVmaXggfSA9IG5hbWU7XG4gICAgICAgIGNvbnN0IHZhbHVlS2V5ID0gKF9hID0gdmFsdWUua2V5KSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiB2YWx1ZS5yZWY7XG4gICAgICAgIGxldCB2cyA9IHRoaXMuX3ZhbHVlc1twcmVmaXhdO1xuICAgICAgICBpZiAodnMpIHtcbiAgICAgICAgICAgIGNvbnN0IF9uYW1lID0gdnMuZ2V0KHZhbHVlS2V5KTtcbiAgICAgICAgICAgIGlmIChfbmFtZSlcbiAgICAgICAgICAgICAgICByZXR1cm4gX25hbWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2cyA9IHRoaXMuX3ZhbHVlc1twcmVmaXhdID0gbmV3IE1hcCgpO1xuICAgICAgICB9XG4gICAgICAgIHZzLnNldCh2YWx1ZUtleSwgbmFtZSk7XG4gICAgICAgIGNvbnN0IHMgPSB0aGlzLl9zY29wZVtwcmVmaXhdIHx8ICh0aGlzLl9zY29wZVtwcmVmaXhdID0gW10pO1xuICAgICAgICBjb25zdCBpdGVtSW5kZXggPSBzLmxlbmd0aDtcbiAgICAgICAgc1tpdGVtSW5kZXhdID0gdmFsdWUucmVmO1xuICAgICAgICBuYW1lLnNldFZhbHVlKHZhbHVlLCB7IHByb3BlcnR5OiBwcmVmaXgsIGl0ZW1JbmRleCB9KTtcbiAgICAgICAgcmV0dXJuIG5hbWU7XG4gICAgfVxuICAgIGdldFZhbHVlKHByZWZpeCwga2V5T3JSZWYpIHtcbiAgICAgICAgY29uc3QgdnMgPSB0aGlzLl92YWx1ZXNbcHJlZml4XTtcbiAgICAgICAgaWYgKCF2cylcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgcmV0dXJuIHZzLmdldChrZXlPclJlZik7XG4gICAgfVxuICAgIHNjb3BlUmVmcyhzY29wZU5hbWUsIHZhbHVlcyA9IHRoaXMuX3ZhbHVlcykge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVkdWNlVmFsdWVzKHZhbHVlcywgKG5hbWUpID0+IHtcbiAgICAgICAgICAgIGlmIChuYW1lLnNjb3BlUGF0aCA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ29kZUdlbjogbmFtZSBcIiR7bmFtZX1cIiBoYXMgbm8gdmFsdWVgKTtcbiAgICAgICAgICAgIHJldHVybiAoMCwgY29kZV8xLl8pIGAke3Njb3BlTmFtZX0ke25hbWUuc2NvcGVQYXRofWA7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBzY29wZUNvZGUodmFsdWVzID0gdGhpcy5fdmFsdWVzLCB1c2VkVmFsdWVzLCBnZXRDb2RlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZWR1Y2VWYWx1ZXModmFsdWVzLCAobmFtZSkgPT4ge1xuICAgICAgICAgICAgaWYgKG5hbWUudmFsdWUgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENvZGVHZW46IG5hbWUgXCIke25hbWV9XCIgaGFzIG5vIHZhbHVlYCk7XG4gICAgICAgICAgICByZXR1cm4gbmFtZS52YWx1ZS5jb2RlO1xuICAgICAgICB9LCB1c2VkVmFsdWVzLCBnZXRDb2RlKTtcbiAgICB9XG4gICAgX3JlZHVjZVZhbHVlcyh2YWx1ZXMsIHZhbHVlQ29kZSwgdXNlZFZhbHVlcyA9IHt9LCBnZXRDb2RlKSB7XG4gICAgICAgIGxldCBjb2RlID0gY29kZV8xLm5pbDtcbiAgICAgICAgZm9yIChjb25zdCBwcmVmaXggaW4gdmFsdWVzKSB7XG4gICAgICAgICAgICBjb25zdCB2cyA9IHZhbHVlc1twcmVmaXhdO1xuICAgICAgICAgICAgaWYgKCF2cylcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIGNvbnN0IG5hbWVTZXQgPSAodXNlZFZhbHVlc1twcmVmaXhdID0gdXNlZFZhbHVlc1twcmVmaXhdIHx8IG5ldyBNYXAoKSk7XG4gICAgICAgICAgICB2cy5mb3JFYWNoKChuYW1lKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKG5hbWVTZXQuaGFzKG5hbWUpKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgbmFtZVNldC5zZXQobmFtZSwgVXNlZFZhbHVlU3RhdGUuU3RhcnRlZCk7XG4gICAgICAgICAgICAgICAgbGV0IGMgPSB2YWx1ZUNvZGUobmFtZSk7XG4gICAgICAgICAgICAgICAgaWYgKGMpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGVmID0gdGhpcy5vcHRzLmVzNSA/IGV4cG9ydHMudmFyS2luZHMudmFyIDogZXhwb3J0cy52YXJLaW5kcy5jb25zdDtcbiAgICAgICAgICAgICAgICAgICAgY29kZSA9ICgwLCBjb2RlXzEuXykgYCR7Y29kZX0ke2RlZn0gJHtuYW1lfSA9ICR7Y307JHt0aGlzLm9wdHMuX259YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoKGMgPSBnZXRDb2RlID09PSBudWxsIHx8IGdldENvZGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGdldENvZGUobmFtZSkpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvZGUgPSAoMCwgY29kZV8xLl8pIGAke2NvZGV9JHtjfSR7dGhpcy5vcHRzLl9ufWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVmFsdWVFcnJvcihuYW1lKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbmFtZVNldC5zZXQobmFtZSwgVXNlZFZhbHVlU3RhdGUuQ29tcGxldGVkKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb2RlO1xuICAgIH1cbn1cbmV4cG9ydHMuVmFsdWVTY29wZSA9IFZhbHVlU2NvcGU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zY29wZS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5vciA9IGV4cG9ydHMuYW5kID0gZXhwb3J0cy5ub3QgPSBleHBvcnRzLkNvZGVHZW4gPSBleHBvcnRzLm9wZXJhdG9ycyA9IGV4cG9ydHMudmFyS2luZHMgPSBleHBvcnRzLlZhbHVlU2NvcGVOYW1lID0gZXhwb3J0cy5WYWx1ZVNjb3BlID0gZXhwb3J0cy5TY29wZSA9IGV4cG9ydHMuTmFtZSA9IGV4cG9ydHMucmVnZXhwQ29kZSA9IGV4cG9ydHMuc3RyaW5naWZ5ID0gZXhwb3J0cy5nZXRQcm9wZXJ0eSA9IGV4cG9ydHMubmlsID0gZXhwb3J0cy5zdHJDb25jYXQgPSBleHBvcnRzLnN0ciA9IGV4cG9ydHMuXyA9IHZvaWQgMDtcbmNvbnN0IGNvZGVfMSA9IHJlcXVpcmUoXCIuL2NvZGVcIik7XG5jb25zdCBzY29wZV8xID0gcmVxdWlyZShcIi4vc2NvcGVcIik7XG52YXIgY29kZV8yID0gcmVxdWlyZShcIi4vY29kZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvZGVfMi5fOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic3RyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjb2RlXzIuc3RyOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic3RyQ29uY2F0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjb2RlXzIuc3RyQ29uY2F0OyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibmlsXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjb2RlXzIubmlsOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZ2V0UHJvcGVydHlcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvZGVfMi5nZXRQcm9wZXJ0eTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInN0cmluZ2lmeVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29kZV8yLnN0cmluZ2lmeTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInJlZ2V4cENvZGVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvZGVfMi5yZWdleHBDb2RlOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiTmFtZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29kZV8yLk5hbWU7IH0gfSk7XG52YXIgc2NvcGVfMiA9IHJlcXVpcmUoXCIuL3Njb3BlXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiU2NvcGVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNjb3BlXzIuU2NvcGU7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJWYWx1ZVNjb3BlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzY29wZV8yLlZhbHVlU2NvcGU7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJWYWx1ZVNjb3BlTmFtZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc2NvcGVfMi5WYWx1ZVNjb3BlTmFtZTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInZhcktpbmRzXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzY29wZV8yLnZhcktpbmRzOyB9IH0pO1xuZXhwb3J0cy5vcGVyYXRvcnMgPSB7XG4gICAgR1Q6IG5ldyBjb2RlXzEuX0NvZGUoXCI+XCIpLFxuICAgIEdURTogbmV3IGNvZGVfMS5fQ29kZShcIj49XCIpLFxuICAgIExUOiBuZXcgY29kZV8xLl9Db2RlKFwiPFwiKSxcbiAgICBMVEU6IG5ldyBjb2RlXzEuX0NvZGUoXCI8PVwiKSxcbiAgICBFUTogbmV3IGNvZGVfMS5fQ29kZShcIj09PVwiKSxcbiAgICBORVE6IG5ldyBjb2RlXzEuX0NvZGUoXCIhPT1cIiksXG4gICAgTk9UOiBuZXcgY29kZV8xLl9Db2RlKFwiIVwiKSxcbiAgICBPUjogbmV3IGNvZGVfMS5fQ29kZShcInx8XCIpLFxuICAgIEFORDogbmV3IGNvZGVfMS5fQ29kZShcIiYmXCIpLFxuICAgIEFERDogbmV3IGNvZGVfMS5fQ29kZShcIitcIiksXG59O1xuY2xhc3MgTm9kZSB7XG4gICAgb3B0aW1pemVOb2RlcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIG9wdGltaXplTmFtZXMoX25hbWVzLCBfY29uc3RhbnRzKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbn1cbmNsYXNzIERlZiBleHRlbmRzIE5vZGUge1xuICAgIGNvbnN0cnVjdG9yKHZhcktpbmQsIG5hbWUsIHJocykge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLnZhcktpbmQgPSB2YXJLaW5kO1xuICAgICAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgICAgICB0aGlzLnJocyA9IHJocztcbiAgICB9XG4gICAgcmVuZGVyKHsgZXM1LCBfbiB9KSB7XG4gICAgICAgIGNvbnN0IHZhcktpbmQgPSBlczUgPyBzY29wZV8xLnZhcktpbmRzLnZhciA6IHRoaXMudmFyS2luZDtcbiAgICAgICAgY29uc3QgcmhzID0gdGhpcy5yaHMgPT09IHVuZGVmaW5lZCA/IFwiXCIgOiBgID0gJHt0aGlzLnJoc31gO1xuICAgICAgICByZXR1cm4gYCR7dmFyS2luZH0gJHt0aGlzLm5hbWV9JHtyaHN9O2AgKyBfbjtcbiAgICB9XG4gICAgb3B0aW1pemVOYW1lcyhuYW1lcywgY29uc3RhbnRzKSB7XG4gICAgICAgIGlmICghbmFtZXNbdGhpcy5uYW1lLnN0cl0pXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGlmICh0aGlzLnJocylcbiAgICAgICAgICAgIHRoaXMucmhzID0gb3B0aW1pemVFeHByKHRoaXMucmhzLCBuYW1lcywgY29uc3RhbnRzKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGdldCBuYW1lcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmhzIGluc3RhbmNlb2YgY29kZV8xLl9Db2RlT3JOYW1lID8gdGhpcy5yaHMubmFtZXMgOiB7fTtcbiAgICB9XG59XG5jbGFzcyBBc3NpZ24gZXh0ZW5kcyBOb2RlIHtcbiAgICBjb25zdHJ1Y3RvcihsaHMsIHJocywgc2lkZUVmZmVjdHMpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5saHMgPSBsaHM7XG4gICAgICAgIHRoaXMucmhzID0gcmhzO1xuICAgICAgICB0aGlzLnNpZGVFZmZlY3RzID0gc2lkZUVmZmVjdHM7XG4gICAgfVxuICAgIHJlbmRlcih7IF9uIH0pIHtcbiAgICAgICAgcmV0dXJuIGAke3RoaXMubGhzfSA9ICR7dGhpcy5yaHN9O2AgKyBfbjtcbiAgICB9XG4gICAgb3B0aW1pemVOYW1lcyhuYW1lcywgY29uc3RhbnRzKSB7XG4gICAgICAgIGlmICh0aGlzLmxocyBpbnN0YW5jZW9mIGNvZGVfMS5OYW1lICYmICFuYW1lc1t0aGlzLmxocy5zdHJdICYmICF0aGlzLnNpZGVFZmZlY3RzKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0aGlzLnJocyA9IG9wdGltaXplRXhwcih0aGlzLnJocywgbmFtZXMsIGNvbnN0YW50cyk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBnZXQgbmFtZXMoKSB7XG4gICAgICAgIGNvbnN0IG5hbWVzID0gdGhpcy5saHMgaW5zdGFuY2VvZiBjb2RlXzEuTmFtZSA/IHt9IDogeyAuLi50aGlzLmxocy5uYW1lcyB9O1xuICAgICAgICByZXR1cm4gYWRkRXhwck5hbWVzKG5hbWVzLCB0aGlzLnJocyk7XG4gICAgfVxufVxuY2xhc3MgQXNzaWduT3AgZXh0ZW5kcyBBc3NpZ24ge1xuICAgIGNvbnN0cnVjdG9yKGxocywgb3AsIHJocywgc2lkZUVmZmVjdHMpIHtcbiAgICAgICAgc3VwZXIobGhzLCByaHMsIHNpZGVFZmZlY3RzKTtcbiAgICAgICAgdGhpcy5vcCA9IG9wO1xuICAgIH1cbiAgICByZW5kZXIoeyBfbiB9KSB7XG4gICAgICAgIHJldHVybiBgJHt0aGlzLmxoc30gJHt0aGlzLm9wfT0gJHt0aGlzLnJoc307YCArIF9uO1xuICAgIH1cbn1cbmNsYXNzIExhYmVsIGV4dGVuZHMgTm9kZSB7XG4gICAgY29uc3RydWN0b3IobGFiZWwpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5sYWJlbCA9IGxhYmVsO1xuICAgICAgICB0aGlzLm5hbWVzID0ge307XG4gICAgfVxuICAgIHJlbmRlcih7IF9uIH0pIHtcbiAgICAgICAgcmV0dXJuIGAke3RoaXMubGFiZWx9OmAgKyBfbjtcbiAgICB9XG59XG5jbGFzcyBCcmVhayBleHRlbmRzIE5vZGUge1xuICAgIGNvbnN0cnVjdG9yKGxhYmVsKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMubGFiZWwgPSBsYWJlbDtcbiAgICAgICAgdGhpcy5uYW1lcyA9IHt9O1xuICAgIH1cbiAgICByZW5kZXIoeyBfbiB9KSB7XG4gICAgICAgIGNvbnN0IGxhYmVsID0gdGhpcy5sYWJlbCA/IGAgJHt0aGlzLmxhYmVsfWAgOiBcIlwiO1xuICAgICAgICByZXR1cm4gYGJyZWFrJHtsYWJlbH07YCArIF9uO1xuICAgIH1cbn1cbmNsYXNzIFRocm93IGV4dGVuZHMgTm9kZSB7XG4gICAgY29uc3RydWN0b3IoZXJyb3IpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5lcnJvciA9IGVycm9yO1xuICAgIH1cbiAgICByZW5kZXIoeyBfbiB9KSB7XG4gICAgICAgIHJldHVybiBgdGhyb3cgJHt0aGlzLmVycm9yfTtgICsgX247XG4gICAgfVxuICAgIGdldCBuYW1lcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZXJyb3IubmFtZXM7XG4gICAgfVxufVxuY2xhc3MgQW55Q29kZSBleHRlbmRzIE5vZGUge1xuICAgIGNvbnN0cnVjdG9yKGNvZGUpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5jb2RlID0gY29kZTtcbiAgICB9XG4gICAgcmVuZGVyKHsgX24gfSkge1xuICAgICAgICByZXR1cm4gYCR7dGhpcy5jb2RlfTtgICsgX247XG4gICAgfVxuICAgIG9wdGltaXplTm9kZXMoKSB7XG4gICAgICAgIHJldHVybiBgJHt0aGlzLmNvZGV9YCA/IHRoaXMgOiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIG9wdGltaXplTmFtZXMobmFtZXMsIGNvbnN0YW50cykge1xuICAgICAgICB0aGlzLmNvZGUgPSBvcHRpbWl6ZUV4cHIodGhpcy5jb2RlLCBuYW1lcywgY29uc3RhbnRzKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGdldCBuYW1lcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29kZSBpbnN0YW5jZW9mIGNvZGVfMS5fQ29kZU9yTmFtZSA/IHRoaXMuY29kZS5uYW1lcyA6IHt9O1xuICAgIH1cbn1cbmNsYXNzIFBhcmVudE5vZGUgZXh0ZW5kcyBOb2RlIHtcbiAgICBjb25zdHJ1Y3Rvcihub2RlcyA9IFtdKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMubm9kZXMgPSBub2RlcztcbiAgICB9XG4gICAgcmVuZGVyKG9wdHMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubm9kZXMucmVkdWNlKChjb2RlLCBuKSA9PiBjb2RlICsgbi5yZW5kZXIob3B0cyksIFwiXCIpO1xuICAgIH1cbiAgICBvcHRpbWl6ZU5vZGVzKCkge1xuICAgICAgICBjb25zdCB7IG5vZGVzIH0gPSB0aGlzO1xuICAgICAgICBsZXQgaSA9IG5vZGVzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKGktLSkge1xuICAgICAgICAgICAgY29uc3QgbiA9IG5vZGVzW2ldLm9wdGltaXplTm9kZXMoKTtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KG4pKVxuICAgICAgICAgICAgICAgIG5vZGVzLnNwbGljZShpLCAxLCAuLi5uKTtcbiAgICAgICAgICAgIGVsc2UgaWYgKG4pXG4gICAgICAgICAgICAgICAgbm9kZXNbaV0gPSBuO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIG5vZGVzLnNwbGljZShpLCAxKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbm9kZXMubGVuZ3RoID4gMCA/IHRoaXMgOiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIG9wdGltaXplTmFtZXMobmFtZXMsIGNvbnN0YW50cykge1xuICAgICAgICBjb25zdCB7IG5vZGVzIH0gPSB0aGlzO1xuICAgICAgICBsZXQgaSA9IG5vZGVzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKGktLSkge1xuICAgICAgICAgICAgLy8gaXRlcmF0aW5nIGJhY2t3YXJkcyBpbXByb3ZlcyAxLXBhc3Mgb3B0aW1pemF0aW9uXG4gICAgICAgICAgICBjb25zdCBuID0gbm9kZXNbaV07XG4gICAgICAgICAgICBpZiAobi5vcHRpbWl6ZU5hbWVzKG5hbWVzLCBjb25zdGFudHMpKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgc3VidHJhY3ROYW1lcyhuYW1lcywgbi5uYW1lcyk7XG4gICAgICAgICAgICBub2Rlcy5zcGxpY2UoaSwgMSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5vZGVzLmxlbmd0aCA+IDAgPyB0aGlzIDogdW5kZWZpbmVkO1xuICAgIH1cbiAgICBnZXQgbmFtZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5vZGVzLnJlZHVjZSgobmFtZXMsIG4pID0+IGFkZE5hbWVzKG5hbWVzLCBuLm5hbWVzKSwge30pO1xuICAgIH1cbn1cbmNsYXNzIEJsb2NrTm9kZSBleHRlbmRzIFBhcmVudE5vZGUge1xuICAgIHJlbmRlcihvcHRzKSB7XG4gICAgICAgIHJldHVybiBcIntcIiArIG9wdHMuX24gKyBzdXBlci5yZW5kZXIob3B0cykgKyBcIn1cIiArIG9wdHMuX247XG4gICAgfVxufVxuY2xhc3MgUm9vdCBleHRlbmRzIFBhcmVudE5vZGUge1xufVxuY2xhc3MgRWxzZSBleHRlbmRzIEJsb2NrTm9kZSB7XG59XG5FbHNlLmtpbmQgPSBcImVsc2VcIjtcbmNsYXNzIElmIGV4dGVuZHMgQmxvY2tOb2RlIHtcbiAgICBjb25zdHJ1Y3Rvcihjb25kaXRpb24sIG5vZGVzKSB7XG4gICAgICAgIHN1cGVyKG5vZGVzKTtcbiAgICAgICAgdGhpcy5jb25kaXRpb24gPSBjb25kaXRpb247XG4gICAgfVxuICAgIHJlbmRlcihvcHRzKSB7XG4gICAgICAgIGxldCBjb2RlID0gYGlmKCR7dGhpcy5jb25kaXRpb259KWAgKyBzdXBlci5yZW5kZXIob3B0cyk7XG4gICAgICAgIGlmICh0aGlzLmVsc2UpXG4gICAgICAgICAgICBjb2RlICs9IFwiZWxzZSBcIiArIHRoaXMuZWxzZS5yZW5kZXIob3B0cyk7XG4gICAgICAgIHJldHVybiBjb2RlO1xuICAgIH1cbiAgICBvcHRpbWl6ZU5vZGVzKCkge1xuICAgICAgICBzdXBlci5vcHRpbWl6ZU5vZGVzKCk7XG4gICAgICAgIGNvbnN0IGNvbmQgPSB0aGlzLmNvbmRpdGlvbjtcbiAgICAgICAgaWYgKGNvbmQgPT09IHRydWUpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ub2RlczsgLy8gZWxzZSBpcyBpZ25vcmVkIGhlcmVcbiAgICAgICAgbGV0IGUgPSB0aGlzLmVsc2U7XG4gICAgICAgIGlmIChlKSB7XG4gICAgICAgICAgICBjb25zdCBucyA9IGUub3B0aW1pemVOb2RlcygpO1xuICAgICAgICAgICAgZSA9IHRoaXMuZWxzZSA9IEFycmF5LmlzQXJyYXkobnMpID8gbmV3IEVsc2UobnMpIDogbnM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGUpIHtcbiAgICAgICAgICAgIGlmIChjb25kID09PSBmYWxzZSlcbiAgICAgICAgICAgICAgICByZXR1cm4gZSBpbnN0YW5jZW9mIElmID8gZSA6IGUubm9kZXM7XG4gICAgICAgICAgICBpZiAodGhpcy5ub2Rlcy5sZW5ndGgpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICByZXR1cm4gbmV3IElmKG5vdChjb25kKSwgZSBpbnN0YW5jZW9mIElmID8gW2VdIDogZS5ub2Rlcyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbmQgPT09IGZhbHNlIHx8ICF0aGlzLm5vZGVzLmxlbmd0aClcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBvcHRpbWl6ZU5hbWVzKG5hbWVzLCBjb25zdGFudHMpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICB0aGlzLmVsc2UgPSAoX2EgPSB0aGlzLmVsc2UpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5vcHRpbWl6ZU5hbWVzKG5hbWVzLCBjb25zdGFudHMpO1xuICAgICAgICBpZiAoIShzdXBlci5vcHRpbWl6ZU5hbWVzKG5hbWVzLCBjb25zdGFudHMpIHx8IHRoaXMuZWxzZSkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHRoaXMuY29uZGl0aW9uID0gb3B0aW1pemVFeHByKHRoaXMuY29uZGl0aW9uLCBuYW1lcywgY29uc3RhbnRzKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGdldCBuYW1lcygpIHtcbiAgICAgICAgY29uc3QgbmFtZXMgPSBzdXBlci5uYW1lcztcbiAgICAgICAgYWRkRXhwck5hbWVzKG5hbWVzLCB0aGlzLmNvbmRpdGlvbik7XG4gICAgICAgIGlmICh0aGlzLmVsc2UpXG4gICAgICAgICAgICBhZGROYW1lcyhuYW1lcywgdGhpcy5lbHNlLm5hbWVzKTtcbiAgICAgICAgcmV0dXJuIG5hbWVzO1xuICAgIH1cbn1cbklmLmtpbmQgPSBcImlmXCI7XG5jbGFzcyBGb3IgZXh0ZW5kcyBCbG9ja05vZGUge1xufVxuRm9yLmtpbmQgPSBcImZvclwiO1xuY2xhc3MgRm9yTG9vcCBleHRlbmRzIEZvciB7XG4gICAgY29uc3RydWN0b3IoaXRlcmF0aW9uKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuaXRlcmF0aW9uID0gaXRlcmF0aW9uO1xuICAgIH1cbiAgICByZW5kZXIob3B0cykge1xuICAgICAgICByZXR1cm4gYGZvcigke3RoaXMuaXRlcmF0aW9ufSlgICsgc3VwZXIucmVuZGVyKG9wdHMpO1xuICAgIH1cbiAgICBvcHRpbWl6ZU5hbWVzKG5hbWVzLCBjb25zdGFudHMpIHtcbiAgICAgICAgaWYgKCFzdXBlci5vcHRpbWl6ZU5hbWVzKG5hbWVzLCBjb25zdGFudHMpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0aGlzLml0ZXJhdGlvbiA9IG9wdGltaXplRXhwcih0aGlzLml0ZXJhdGlvbiwgbmFtZXMsIGNvbnN0YW50cyk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBnZXQgbmFtZXMoKSB7XG4gICAgICAgIHJldHVybiBhZGROYW1lcyhzdXBlci5uYW1lcywgdGhpcy5pdGVyYXRpb24ubmFtZXMpO1xuICAgIH1cbn1cbmNsYXNzIEZvclJhbmdlIGV4dGVuZHMgRm9yIHtcbiAgICBjb25zdHJ1Y3Rvcih2YXJLaW5kLCBuYW1lLCBmcm9tLCB0bykge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLnZhcktpbmQgPSB2YXJLaW5kO1xuICAgICAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgICAgICB0aGlzLmZyb20gPSBmcm9tO1xuICAgICAgICB0aGlzLnRvID0gdG87XG4gICAgfVxuICAgIHJlbmRlcihvcHRzKSB7XG4gICAgICAgIGNvbnN0IHZhcktpbmQgPSBvcHRzLmVzNSA/IHNjb3BlXzEudmFyS2luZHMudmFyIDogdGhpcy52YXJLaW5kO1xuICAgICAgICBjb25zdCB7IG5hbWUsIGZyb20sIHRvIH0gPSB0aGlzO1xuICAgICAgICByZXR1cm4gYGZvcigke3ZhcktpbmR9ICR7bmFtZX09JHtmcm9tfTsgJHtuYW1lfTwke3RvfTsgJHtuYW1lfSsrKWAgKyBzdXBlci5yZW5kZXIob3B0cyk7XG4gICAgfVxuICAgIGdldCBuYW1lcygpIHtcbiAgICAgICAgY29uc3QgbmFtZXMgPSBhZGRFeHByTmFtZXMoc3VwZXIubmFtZXMsIHRoaXMuZnJvbSk7XG4gICAgICAgIHJldHVybiBhZGRFeHByTmFtZXMobmFtZXMsIHRoaXMudG8pO1xuICAgIH1cbn1cbmNsYXNzIEZvckl0ZXIgZXh0ZW5kcyBGb3Ige1xuICAgIGNvbnN0cnVjdG9yKGxvb3AsIHZhcktpbmQsIG5hbWUsIGl0ZXJhYmxlKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMubG9vcCA9IGxvb3A7XG4gICAgICAgIHRoaXMudmFyS2luZCA9IHZhcktpbmQ7XG4gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgICAgIHRoaXMuaXRlcmFibGUgPSBpdGVyYWJsZTtcbiAgICB9XG4gICAgcmVuZGVyKG9wdHMpIHtcbiAgICAgICAgcmV0dXJuIGBmb3IoJHt0aGlzLnZhcktpbmR9ICR7dGhpcy5uYW1lfSAke3RoaXMubG9vcH0gJHt0aGlzLml0ZXJhYmxlfSlgICsgc3VwZXIucmVuZGVyKG9wdHMpO1xuICAgIH1cbiAgICBvcHRpbWl6ZU5hbWVzKG5hbWVzLCBjb25zdGFudHMpIHtcbiAgICAgICAgaWYgKCFzdXBlci5vcHRpbWl6ZU5hbWVzKG5hbWVzLCBjb25zdGFudHMpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0aGlzLml0ZXJhYmxlID0gb3B0aW1pemVFeHByKHRoaXMuaXRlcmFibGUsIG5hbWVzLCBjb25zdGFudHMpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgZ2V0IG5hbWVzKCkge1xuICAgICAgICByZXR1cm4gYWRkTmFtZXMoc3VwZXIubmFtZXMsIHRoaXMuaXRlcmFibGUubmFtZXMpO1xuICAgIH1cbn1cbmNsYXNzIEZ1bmMgZXh0ZW5kcyBCbG9ja05vZGUge1xuICAgIGNvbnN0cnVjdG9yKG5hbWUsIGFyZ3MsIGFzeW5jKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgICAgIHRoaXMuYXJncyA9IGFyZ3M7XG4gICAgICAgIHRoaXMuYXN5bmMgPSBhc3luYztcbiAgICB9XG4gICAgcmVuZGVyKG9wdHMpIHtcbiAgICAgICAgY29uc3QgX2FzeW5jID0gdGhpcy5hc3luYyA/IFwiYXN5bmMgXCIgOiBcIlwiO1xuICAgICAgICByZXR1cm4gYCR7X2FzeW5jfWZ1bmN0aW9uICR7dGhpcy5uYW1lfSgke3RoaXMuYXJnc30pYCArIHN1cGVyLnJlbmRlcihvcHRzKTtcbiAgICB9XG59XG5GdW5jLmtpbmQgPSBcImZ1bmNcIjtcbmNsYXNzIFJldHVybiBleHRlbmRzIFBhcmVudE5vZGUge1xuICAgIHJlbmRlcihvcHRzKSB7XG4gICAgICAgIHJldHVybiBcInJldHVybiBcIiArIHN1cGVyLnJlbmRlcihvcHRzKTtcbiAgICB9XG59XG5SZXR1cm4ua2luZCA9IFwicmV0dXJuXCI7XG5jbGFzcyBUcnkgZXh0ZW5kcyBCbG9ja05vZGUge1xuICAgIHJlbmRlcihvcHRzKSB7XG4gICAgICAgIGxldCBjb2RlID0gXCJ0cnlcIiArIHN1cGVyLnJlbmRlcihvcHRzKTtcbiAgICAgICAgaWYgKHRoaXMuY2F0Y2gpXG4gICAgICAgICAgICBjb2RlICs9IHRoaXMuY2F0Y2gucmVuZGVyKG9wdHMpO1xuICAgICAgICBpZiAodGhpcy5maW5hbGx5KVxuICAgICAgICAgICAgY29kZSArPSB0aGlzLmZpbmFsbHkucmVuZGVyKG9wdHMpO1xuICAgICAgICByZXR1cm4gY29kZTtcbiAgICB9XG4gICAgb3B0aW1pemVOb2RlcygpIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgc3VwZXIub3B0aW1pemVOb2RlcygpO1xuICAgICAgICAoX2EgPSB0aGlzLmNhdGNoKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Eub3B0aW1pemVOb2RlcygpO1xuICAgICAgICAoX2IgPSB0aGlzLmZpbmFsbHkpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5vcHRpbWl6ZU5vZGVzKCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBvcHRpbWl6ZU5hbWVzKG5hbWVzLCBjb25zdGFudHMpIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgc3VwZXIub3B0aW1pemVOYW1lcyhuYW1lcywgY29uc3RhbnRzKTtcbiAgICAgICAgKF9hID0gdGhpcy5jYXRjaCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLm9wdGltaXplTmFtZXMobmFtZXMsIGNvbnN0YW50cyk7XG4gICAgICAgIChfYiA9IHRoaXMuZmluYWxseSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLm9wdGltaXplTmFtZXMobmFtZXMsIGNvbnN0YW50cyk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBnZXQgbmFtZXMoKSB7XG4gICAgICAgIGNvbnN0IG5hbWVzID0gc3VwZXIubmFtZXM7XG4gICAgICAgIGlmICh0aGlzLmNhdGNoKVxuICAgICAgICAgICAgYWRkTmFtZXMobmFtZXMsIHRoaXMuY2F0Y2gubmFtZXMpO1xuICAgICAgICBpZiAodGhpcy5maW5hbGx5KVxuICAgICAgICAgICAgYWRkTmFtZXMobmFtZXMsIHRoaXMuZmluYWxseS5uYW1lcyk7XG4gICAgICAgIHJldHVybiBuYW1lcztcbiAgICB9XG59XG5jbGFzcyBDYXRjaCBleHRlbmRzIEJsb2NrTm9kZSB7XG4gICAgY29uc3RydWN0b3IoZXJyb3IpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5lcnJvciA9IGVycm9yO1xuICAgIH1cbiAgICByZW5kZXIob3B0cykge1xuICAgICAgICByZXR1cm4gYGNhdGNoKCR7dGhpcy5lcnJvcn0pYCArIHN1cGVyLnJlbmRlcihvcHRzKTtcbiAgICB9XG59XG5DYXRjaC5raW5kID0gXCJjYXRjaFwiO1xuY2xhc3MgRmluYWxseSBleHRlbmRzIEJsb2NrTm9kZSB7XG4gICAgcmVuZGVyKG9wdHMpIHtcbiAgICAgICAgcmV0dXJuIFwiZmluYWxseVwiICsgc3VwZXIucmVuZGVyKG9wdHMpO1xuICAgIH1cbn1cbkZpbmFsbHkua2luZCA9IFwiZmluYWxseVwiO1xuY2xhc3MgQ29kZUdlbiB7XG4gICAgY29uc3RydWN0b3IoZXh0U2NvcGUsIG9wdHMgPSB7fSkge1xuICAgICAgICB0aGlzLl92YWx1ZXMgPSB7fTtcbiAgICAgICAgdGhpcy5fYmxvY2tTdGFydHMgPSBbXTtcbiAgICAgICAgdGhpcy5fY29uc3RhbnRzID0ge307XG4gICAgICAgIHRoaXMub3B0cyA9IHsgLi4ub3B0cywgX246IG9wdHMubGluZXMgPyBcIlxcblwiIDogXCJcIiB9O1xuICAgICAgICB0aGlzLl9leHRTY29wZSA9IGV4dFNjb3BlO1xuICAgICAgICB0aGlzLl9zY29wZSA9IG5ldyBzY29wZV8xLlNjb3BlKHsgcGFyZW50OiBleHRTY29wZSB9KTtcbiAgICAgICAgdGhpcy5fbm9kZXMgPSBbbmV3IFJvb3QoKV07XG4gICAgfVxuICAgIHRvU3RyaW5nKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcm9vdC5yZW5kZXIodGhpcy5vcHRzKTtcbiAgICB9XG4gICAgLy8gcmV0dXJucyB1bmlxdWUgbmFtZSBpbiB0aGUgaW50ZXJuYWwgc2NvcGVcbiAgICBuYW1lKHByZWZpeCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2NvcGUubmFtZShwcmVmaXgpO1xuICAgIH1cbiAgICAvLyByZXNlcnZlcyB1bmlxdWUgbmFtZSBpbiB0aGUgZXh0ZXJuYWwgc2NvcGVcbiAgICBzY29wZU5hbWUocHJlZml4KSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9leHRTY29wZS5uYW1lKHByZWZpeCk7XG4gICAgfVxuICAgIC8vIHJlc2VydmVzIHVuaXF1ZSBuYW1lIGluIHRoZSBleHRlcm5hbCBzY29wZSBhbmQgYXNzaWducyB2YWx1ZSB0byBpdFxuICAgIHNjb3BlVmFsdWUocHJlZml4T3JOYW1lLCB2YWx1ZSkge1xuICAgICAgICBjb25zdCBuYW1lID0gdGhpcy5fZXh0U2NvcGUudmFsdWUocHJlZml4T3JOYW1lLCB2YWx1ZSk7XG4gICAgICAgIGNvbnN0IHZzID0gdGhpcy5fdmFsdWVzW25hbWUucHJlZml4XSB8fCAodGhpcy5fdmFsdWVzW25hbWUucHJlZml4XSA9IG5ldyBTZXQoKSk7XG4gICAgICAgIHZzLmFkZChuYW1lKTtcbiAgICAgICAgcmV0dXJuIG5hbWU7XG4gICAgfVxuICAgIGdldFNjb3BlVmFsdWUocHJlZml4LCBrZXlPclJlZikge1xuICAgICAgICByZXR1cm4gdGhpcy5fZXh0U2NvcGUuZ2V0VmFsdWUocHJlZml4LCBrZXlPclJlZik7XG4gICAgfVxuICAgIC8vIHJldHVybiBjb2RlIHRoYXQgYXNzaWducyB2YWx1ZXMgaW4gdGhlIGV4dGVybmFsIHNjb3BlIHRvIHRoZSBuYW1lcyB0aGF0IGFyZSB1c2VkIGludGVybmFsbHlcbiAgICAvLyAoc2FtZSBuYW1lcyB0aGF0IHdlcmUgcmV0dXJuZWQgYnkgZ2VuLnNjb3BlTmFtZSBvciBnZW4uc2NvcGVWYWx1ZSlcbiAgICBzY29wZVJlZnMoc2NvcGVOYW1lKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9leHRTY29wZS5zY29wZVJlZnMoc2NvcGVOYW1lLCB0aGlzLl92YWx1ZXMpO1xuICAgIH1cbiAgICBzY29wZUNvZGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9leHRTY29wZS5zY29wZUNvZGUodGhpcy5fdmFsdWVzKTtcbiAgICB9XG4gICAgX2RlZih2YXJLaW5kLCBuYW1lT3JQcmVmaXgsIHJocywgY29uc3RhbnQpIHtcbiAgICAgICAgY29uc3QgbmFtZSA9IHRoaXMuX3Njb3BlLnRvTmFtZShuYW1lT3JQcmVmaXgpO1xuICAgICAgICBpZiAocmhzICE9PSB1bmRlZmluZWQgJiYgY29uc3RhbnQpXG4gICAgICAgICAgICB0aGlzLl9jb25zdGFudHNbbmFtZS5zdHJdID0gcmhzO1xuICAgICAgICB0aGlzLl9sZWFmTm9kZShuZXcgRGVmKHZhcktpbmQsIG5hbWUsIHJocykpO1xuICAgICAgICByZXR1cm4gbmFtZTtcbiAgICB9XG4gICAgLy8gYGNvbnN0YCBkZWNsYXJhdGlvbiAoYHZhcmAgaW4gZXM1IG1vZGUpXG4gICAgY29uc3QobmFtZU9yUHJlZml4LCByaHMsIF9jb25zdGFudCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmKHNjb3BlXzEudmFyS2luZHMuY29uc3QsIG5hbWVPclByZWZpeCwgcmhzLCBfY29uc3RhbnQpO1xuICAgIH1cbiAgICAvLyBgbGV0YCBkZWNsYXJhdGlvbiB3aXRoIG9wdGlvbmFsIGFzc2lnbm1lbnQgKGB2YXJgIGluIGVzNSBtb2RlKVxuICAgIGxldChuYW1lT3JQcmVmaXgsIHJocywgX2NvbnN0YW50KSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYoc2NvcGVfMS52YXJLaW5kcy5sZXQsIG5hbWVPclByZWZpeCwgcmhzLCBfY29uc3RhbnQpO1xuICAgIH1cbiAgICAvLyBgdmFyYCBkZWNsYXJhdGlvbiB3aXRoIG9wdGlvbmFsIGFzc2lnbm1lbnRcbiAgICB2YXIobmFtZU9yUHJlZml4LCByaHMsIF9jb25zdGFudCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmKHNjb3BlXzEudmFyS2luZHMudmFyLCBuYW1lT3JQcmVmaXgsIHJocywgX2NvbnN0YW50KTtcbiAgICB9XG4gICAgLy8gYXNzaWdubWVudCBjb2RlXG4gICAgYXNzaWduKGxocywgcmhzLCBzaWRlRWZmZWN0cykge1xuICAgICAgICByZXR1cm4gdGhpcy5fbGVhZk5vZGUobmV3IEFzc2lnbihsaHMsIHJocywgc2lkZUVmZmVjdHMpKTtcbiAgICB9XG4gICAgLy8gYCs9YCBjb2RlXG4gICAgYWRkKGxocywgcmhzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sZWFmTm9kZShuZXcgQXNzaWduT3AobGhzLCBleHBvcnRzLm9wZXJhdG9ycy5BREQsIHJocykpO1xuICAgIH1cbiAgICAvLyBhcHBlbmRzIHBhc3NlZCBTYWZlRXhwciB0byBjb2RlIG9yIGV4ZWN1dGVzIEJsb2NrXG4gICAgY29kZShjKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYyA9PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgICAgICBjKCk7XG4gICAgICAgIGVsc2UgaWYgKGMgIT09IGNvZGVfMS5uaWwpXG4gICAgICAgICAgICB0aGlzLl9sZWFmTm9kZShuZXcgQW55Q29kZShjKSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvLyByZXR1cm5zIGNvZGUgZm9yIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgcGFzc2VkIGFyZ3VtZW50IGxpc3Qgb2Yga2V5LXZhbHVlIHBhaXJzXG4gICAgb2JqZWN0KC4uLmtleVZhbHVlcykge1xuICAgICAgICBjb25zdCBjb2RlID0gW1wie1wiXTtcbiAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2Yga2V5VmFsdWVzKSB7XG4gICAgICAgICAgICBpZiAoY29kZS5sZW5ndGggPiAxKVxuICAgICAgICAgICAgICAgIGNvZGUucHVzaChcIixcIik7XG4gICAgICAgICAgICBjb2RlLnB1c2goa2V5KTtcbiAgICAgICAgICAgIGlmIChrZXkgIT09IHZhbHVlIHx8IHRoaXMub3B0cy5lczUpIHtcbiAgICAgICAgICAgICAgICBjb2RlLnB1c2goXCI6XCIpO1xuICAgICAgICAgICAgICAgICgwLCBjb2RlXzEuYWRkQ29kZUFyZykoY29kZSwgdmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvZGUucHVzaChcIn1cIik7XG4gICAgICAgIHJldHVybiBuZXcgY29kZV8xLl9Db2RlKGNvZGUpO1xuICAgIH1cbiAgICAvLyBgaWZgIGNsYXVzZSAob3Igc3RhdGVtZW50IGlmIGB0aGVuQm9keWAgYW5kLCBvcHRpb25hbGx5LCBgZWxzZUJvZHlgIGFyZSBwYXNzZWQpXG4gICAgaWYoY29uZGl0aW9uLCB0aGVuQm9keSwgZWxzZUJvZHkpIHtcbiAgICAgICAgdGhpcy5fYmxvY2tOb2RlKG5ldyBJZihjb25kaXRpb24pKTtcbiAgICAgICAgaWYgKHRoZW5Cb2R5ICYmIGVsc2VCb2R5KSB7XG4gICAgICAgICAgICB0aGlzLmNvZGUodGhlbkJvZHkpLmVsc2UoKS5jb2RlKGVsc2VCb2R5KS5lbmRJZigpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoZW5Cb2R5KSB7XG4gICAgICAgICAgICB0aGlzLmNvZGUodGhlbkJvZHkpLmVuZElmKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZWxzZUJvZHkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ29kZUdlbjogXCJlbHNlXCIgYm9keSB3aXRob3V0IFwidGhlblwiIGJvZHknKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLy8gYGVsc2UgaWZgIGNsYXVzZSAtIGludmFsaWQgd2l0aG91dCBgaWZgIG9yIGFmdGVyIGBlbHNlYCBjbGF1c2VzXG4gICAgZWxzZUlmKGNvbmRpdGlvbikge1xuICAgICAgICByZXR1cm4gdGhpcy5fZWxzZU5vZGUobmV3IElmKGNvbmRpdGlvbikpO1xuICAgIH1cbiAgICAvLyBgZWxzZWAgY2xhdXNlIC0gb25seSB2YWxpZCBhZnRlciBgaWZgIG9yIGBlbHNlIGlmYCBjbGF1c2VzXG4gICAgZWxzZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Vsc2VOb2RlKG5ldyBFbHNlKCkpO1xuICAgIH1cbiAgICAvLyBlbmQgYGlmYCBzdGF0ZW1lbnQgKG5lZWRlZCBpZiBnZW4uaWYgd2FzIHVzZWQgb25seSB3aXRoIGNvbmRpdGlvbilcbiAgICBlbmRJZigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VuZEJsb2NrTm9kZShJZiwgRWxzZSk7XG4gICAgfVxuICAgIF9mb3Iobm9kZSwgZm9yQm9keSkge1xuICAgICAgICB0aGlzLl9ibG9ja05vZGUobm9kZSk7XG4gICAgICAgIGlmIChmb3JCb2R5KVxuICAgICAgICAgICAgdGhpcy5jb2RlKGZvckJvZHkpLmVuZEZvcigpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLy8gYSBnZW5lcmljIGBmb3JgIGNsYXVzZSAob3Igc3RhdGVtZW50IGlmIGBmb3JCb2R5YCBpcyBwYXNzZWQpXG4gICAgZm9yKGl0ZXJhdGlvbiwgZm9yQm9keSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZm9yKG5ldyBGb3JMb29wKGl0ZXJhdGlvbiksIGZvckJvZHkpO1xuICAgIH1cbiAgICAvLyBgZm9yYCBzdGF0ZW1lbnQgZm9yIGEgcmFuZ2Ugb2YgdmFsdWVzXG4gICAgZm9yUmFuZ2UobmFtZU9yUHJlZml4LCBmcm9tLCB0bywgZm9yQm9keSwgdmFyS2luZCA9IHRoaXMub3B0cy5lczUgPyBzY29wZV8xLnZhcktpbmRzLnZhciA6IHNjb3BlXzEudmFyS2luZHMubGV0KSB7XG4gICAgICAgIGNvbnN0IG5hbWUgPSB0aGlzLl9zY29wZS50b05hbWUobmFtZU9yUHJlZml4KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZvcihuZXcgRm9yUmFuZ2UodmFyS2luZCwgbmFtZSwgZnJvbSwgdG8pLCAoKSA9PiBmb3JCb2R5KG5hbWUpKTtcbiAgICB9XG4gICAgLy8gYGZvci1vZmAgc3RhdGVtZW50IChpbiBlczUgbW9kZSByZXBsYWNlIHdpdGggYSBub3JtYWwgZm9yIGxvb3ApXG4gICAgZm9yT2YobmFtZU9yUHJlZml4LCBpdGVyYWJsZSwgZm9yQm9keSwgdmFyS2luZCA9IHNjb3BlXzEudmFyS2luZHMuY29uc3QpIHtcbiAgICAgICAgY29uc3QgbmFtZSA9IHRoaXMuX3Njb3BlLnRvTmFtZShuYW1lT3JQcmVmaXgpO1xuICAgICAgICBpZiAodGhpcy5vcHRzLmVzNSkge1xuICAgICAgICAgICAgY29uc3QgYXJyID0gaXRlcmFibGUgaW5zdGFuY2VvZiBjb2RlXzEuTmFtZSA/IGl0ZXJhYmxlIDogdGhpcy52YXIoXCJfYXJyXCIsIGl0ZXJhYmxlKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmZvclJhbmdlKFwiX2lcIiwgMCwgKDAsIGNvZGVfMS5fKSBgJHthcnJ9Lmxlbmd0aGAsIChpKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy52YXIobmFtZSwgKDAsIGNvZGVfMS5fKSBgJHthcnJ9WyR7aX1dYCk7XG4gICAgICAgICAgICAgICAgZm9yQm9keShuYW1lKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9mb3IobmV3IEZvckl0ZXIoXCJvZlwiLCB2YXJLaW5kLCBuYW1lLCBpdGVyYWJsZSksICgpID0+IGZvckJvZHkobmFtZSkpO1xuICAgIH1cbiAgICAvLyBgZm9yLWluYCBzdGF0ZW1lbnQuXG4gICAgLy8gV2l0aCBvcHRpb24gYG93blByb3BlcnRpZXNgIHJlcGxhY2VkIHdpdGggYSBgZm9yLW9mYCBsb29wIGZvciBvYmplY3Qga2V5c1xuICAgIGZvckluKG5hbWVPclByZWZpeCwgb2JqLCBmb3JCb2R5LCB2YXJLaW5kID0gdGhpcy5vcHRzLmVzNSA/IHNjb3BlXzEudmFyS2luZHMudmFyIDogc2NvcGVfMS52YXJLaW5kcy5jb25zdCkge1xuICAgICAgICBpZiAodGhpcy5vcHRzLm93blByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmZvck9mKG5hbWVPclByZWZpeCwgKDAsIGNvZGVfMS5fKSBgT2JqZWN0LmtleXMoJHtvYmp9KWAsIGZvckJvZHkpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG5hbWUgPSB0aGlzLl9zY29wZS50b05hbWUobmFtZU9yUHJlZml4KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZvcihuZXcgRm9ySXRlcihcImluXCIsIHZhcktpbmQsIG5hbWUsIG9iaiksICgpID0+IGZvckJvZHkobmFtZSkpO1xuICAgIH1cbiAgICAvLyBlbmQgYGZvcmAgbG9vcFxuICAgIGVuZEZvcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VuZEJsb2NrTm9kZShGb3IpO1xuICAgIH1cbiAgICAvLyBgbGFiZWxgIHN0YXRlbWVudFxuICAgIGxhYmVsKGxhYmVsKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sZWFmTm9kZShuZXcgTGFiZWwobGFiZWwpKTtcbiAgICB9XG4gICAgLy8gYGJyZWFrYCBzdGF0ZW1lbnRcbiAgICBicmVhayhsYWJlbCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbGVhZk5vZGUobmV3IEJyZWFrKGxhYmVsKSk7XG4gICAgfVxuICAgIC8vIGByZXR1cm5gIHN0YXRlbWVudFxuICAgIHJldHVybih2YWx1ZSkge1xuICAgICAgICBjb25zdCBub2RlID0gbmV3IFJldHVybigpO1xuICAgICAgICB0aGlzLl9ibG9ja05vZGUobm9kZSk7XG4gICAgICAgIHRoaXMuY29kZSh2YWx1ZSk7XG4gICAgICAgIGlmIChub2RlLm5vZGVzLmxlbmd0aCAhPT0gMSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ29kZUdlbjogXCJyZXR1cm5cIiBzaG91bGQgaGF2ZSBvbmUgbm9kZScpO1xuICAgICAgICByZXR1cm4gdGhpcy5fZW5kQmxvY2tOb2RlKFJldHVybik7XG4gICAgfVxuICAgIC8vIGB0cnlgIHN0YXRlbWVudFxuICAgIHRyeSh0cnlCb2R5LCBjYXRjaENvZGUsIGZpbmFsbHlDb2RlKSB7XG4gICAgICAgIGlmICghY2F0Y2hDb2RlICYmICFmaW5hbGx5Q29kZSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ29kZUdlbjogXCJ0cnlcIiB3aXRob3V0IFwiY2F0Y2hcIiBhbmQgXCJmaW5hbGx5XCInKTtcbiAgICAgICAgY29uc3Qgbm9kZSA9IG5ldyBUcnkoKTtcbiAgICAgICAgdGhpcy5fYmxvY2tOb2RlKG5vZGUpO1xuICAgICAgICB0aGlzLmNvZGUodHJ5Qm9keSk7XG4gICAgICAgIGlmIChjYXRjaENvZGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGVycm9yID0gdGhpcy5uYW1lKFwiZVwiKTtcbiAgICAgICAgICAgIHRoaXMuX2N1cnJOb2RlID0gbm9kZS5jYXRjaCA9IG5ldyBDYXRjaChlcnJvcik7XG4gICAgICAgICAgICBjYXRjaENvZGUoZXJyb3IpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmaW5hbGx5Q29kZSkge1xuICAgICAgICAgICAgdGhpcy5fY3Vyck5vZGUgPSBub2RlLmZpbmFsbHkgPSBuZXcgRmluYWxseSgpO1xuICAgICAgICAgICAgdGhpcy5jb2RlKGZpbmFsbHlDb2RlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fZW5kQmxvY2tOb2RlKENhdGNoLCBGaW5hbGx5KTtcbiAgICB9XG4gICAgLy8gYHRocm93YCBzdGF0ZW1lbnRcbiAgICB0aHJvdyhlcnJvcikge1xuICAgICAgICByZXR1cm4gdGhpcy5fbGVhZk5vZGUobmV3IFRocm93KGVycm9yKSk7XG4gICAgfVxuICAgIC8vIHN0YXJ0IHNlbGYtYmFsYW5jaW5nIGJsb2NrXG4gICAgYmxvY2soYm9keSwgbm9kZUNvdW50KSB7XG4gICAgICAgIHRoaXMuX2Jsb2NrU3RhcnRzLnB1c2godGhpcy5fbm9kZXMubGVuZ3RoKTtcbiAgICAgICAgaWYgKGJvZHkpXG4gICAgICAgICAgICB0aGlzLmNvZGUoYm9keSkuZW5kQmxvY2sobm9kZUNvdW50KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8vIGVuZCB0aGUgY3VycmVudCBzZWxmLWJhbGFuY2luZyBibG9ja1xuICAgIGVuZEJsb2NrKG5vZGVDb3VudCkge1xuICAgICAgICBjb25zdCBsZW4gPSB0aGlzLl9ibG9ja1N0YXJ0cy5wb3AoKTtcbiAgICAgICAgaWYgKGxlbiA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ29kZUdlbjogbm90IGluIHNlbGYtYmFsYW5jaW5nIGJsb2NrXCIpO1xuICAgICAgICBjb25zdCB0b0Nsb3NlID0gdGhpcy5fbm9kZXMubGVuZ3RoIC0gbGVuO1xuICAgICAgICBpZiAodG9DbG9zZSA8IDAgfHwgKG5vZGVDb3VudCAhPT0gdW5kZWZpbmVkICYmIHRvQ2xvc2UgIT09IG5vZGVDb3VudCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ29kZUdlbjogd3JvbmcgbnVtYmVyIG9mIG5vZGVzOiAke3RvQ2xvc2V9IHZzICR7bm9kZUNvdW50fSBleHBlY3RlZGApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX25vZGVzLmxlbmd0aCA9IGxlbjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8vIGBmdW5jdGlvbmAgaGVhZGluZyAob3IgZGVmaW5pdGlvbiBpZiBmdW5jQm9keSBpcyBwYXNzZWQpXG4gICAgZnVuYyhuYW1lLCBhcmdzID0gY29kZV8xLm5pbCwgYXN5bmMsIGZ1bmNCb2R5KSB7XG4gICAgICAgIHRoaXMuX2Jsb2NrTm9kZShuZXcgRnVuYyhuYW1lLCBhcmdzLCBhc3luYykpO1xuICAgICAgICBpZiAoZnVuY0JvZHkpXG4gICAgICAgICAgICB0aGlzLmNvZGUoZnVuY0JvZHkpLmVuZEZ1bmMoKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8vIGVuZCBmdW5jdGlvbiBkZWZpbml0aW9uXG4gICAgZW5kRnVuYygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VuZEJsb2NrTm9kZShGdW5jKTtcbiAgICB9XG4gICAgb3B0aW1pemUobiA9IDEpIHtcbiAgICAgICAgd2hpbGUgKG4tLSA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuX3Jvb3Qub3B0aW1pemVOb2RlcygpO1xuICAgICAgICAgICAgdGhpcy5fcm9vdC5vcHRpbWl6ZU5hbWVzKHRoaXMuX3Jvb3QubmFtZXMsIHRoaXMuX2NvbnN0YW50cyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgX2xlYWZOb2RlKG5vZGUpIHtcbiAgICAgICAgdGhpcy5fY3Vyck5vZGUubm9kZXMucHVzaChub2RlKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIF9ibG9ja05vZGUobm9kZSkge1xuICAgICAgICB0aGlzLl9jdXJyTm9kZS5ub2Rlcy5wdXNoKG5vZGUpO1xuICAgICAgICB0aGlzLl9ub2Rlcy5wdXNoKG5vZGUpO1xuICAgIH1cbiAgICBfZW5kQmxvY2tOb2RlKE4xLCBOMikge1xuICAgICAgICBjb25zdCBuID0gdGhpcy5fY3Vyck5vZGU7XG4gICAgICAgIGlmIChuIGluc3RhbmNlb2YgTjEgfHwgKE4yICYmIG4gaW5zdGFuY2VvZiBOMikpIHtcbiAgICAgICAgICAgIHRoaXMuX25vZGVzLnBvcCgpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb2RlR2VuOiBub3QgaW4gYmxvY2sgXCIke04yID8gYCR7TjEua2luZH0vJHtOMi5raW5kfWAgOiBOMS5raW5kfVwiYCk7XG4gICAgfVxuICAgIF9lbHNlTm9kZShub2RlKSB7XG4gICAgICAgIGNvbnN0IG4gPSB0aGlzLl9jdXJyTm9kZTtcbiAgICAgICAgaWYgKCEobiBpbnN0YW5jZW9mIElmKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb2RlR2VuOiBcImVsc2VcIiB3aXRob3V0IFwiaWZcIicpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2N1cnJOb2RlID0gbi5lbHNlID0gbm9kZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGdldCBfcm9vdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX25vZGVzWzBdO1xuICAgIH1cbiAgICBnZXQgX2N1cnJOb2RlKCkge1xuICAgICAgICBjb25zdCBucyA9IHRoaXMuX25vZGVzO1xuICAgICAgICByZXR1cm4gbnNbbnMubGVuZ3RoIC0gMV07XG4gICAgfVxuICAgIHNldCBfY3Vyck5vZGUobm9kZSkge1xuICAgICAgICBjb25zdCBucyA9IHRoaXMuX25vZGVzO1xuICAgICAgICBuc1tucy5sZW5ndGggLSAxXSA9IG5vZGU7XG4gICAgfVxufVxuZXhwb3J0cy5Db2RlR2VuID0gQ29kZUdlbjtcbmZ1bmN0aW9uIGFkZE5hbWVzKG5hbWVzLCBmcm9tKSB7XG4gICAgZm9yIChjb25zdCBuIGluIGZyb20pXG4gICAgICAgIG5hbWVzW25dID0gKG5hbWVzW25dIHx8IDApICsgKGZyb21bbl0gfHwgMCk7XG4gICAgcmV0dXJuIG5hbWVzO1xufVxuZnVuY3Rpb24gYWRkRXhwck5hbWVzKG5hbWVzLCBmcm9tKSB7XG4gICAgcmV0dXJuIGZyb20gaW5zdGFuY2VvZiBjb2RlXzEuX0NvZGVPck5hbWUgPyBhZGROYW1lcyhuYW1lcywgZnJvbS5uYW1lcykgOiBuYW1lcztcbn1cbmZ1bmN0aW9uIG9wdGltaXplRXhwcihleHByLCBuYW1lcywgY29uc3RhbnRzKSB7XG4gICAgaWYgKGV4cHIgaW5zdGFuY2VvZiBjb2RlXzEuTmFtZSlcbiAgICAgICAgcmV0dXJuIHJlcGxhY2VOYW1lKGV4cHIpO1xuICAgIGlmICghY2FuT3B0aW1pemUoZXhwcikpXG4gICAgICAgIHJldHVybiBleHByO1xuICAgIHJldHVybiBuZXcgY29kZV8xLl9Db2RlKGV4cHIuX2l0ZW1zLnJlZHVjZSgoaXRlbXMsIGMpID0+IHtcbiAgICAgICAgaWYgKGMgaW5zdGFuY2VvZiBjb2RlXzEuTmFtZSlcbiAgICAgICAgICAgIGMgPSByZXBsYWNlTmFtZShjKTtcbiAgICAgICAgaWYgKGMgaW5zdGFuY2VvZiBjb2RlXzEuX0NvZGUpXG4gICAgICAgICAgICBpdGVtcy5wdXNoKC4uLmMuX2l0ZW1zKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgaXRlbXMucHVzaChjKTtcbiAgICAgICAgcmV0dXJuIGl0ZW1zO1xuICAgIH0sIFtdKSk7XG4gICAgZnVuY3Rpb24gcmVwbGFjZU5hbWUobikge1xuICAgICAgICBjb25zdCBjID0gY29uc3RhbnRzW24uc3RyXTtcbiAgICAgICAgaWYgKGMgPT09IHVuZGVmaW5lZCB8fCBuYW1lc1tuLnN0cl0gIT09IDEpXG4gICAgICAgICAgICByZXR1cm4gbjtcbiAgICAgICAgZGVsZXRlIG5hbWVzW24uc3RyXTtcbiAgICAgICAgcmV0dXJuIGM7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNhbk9wdGltaXplKGUpIHtcbiAgICAgICAgcmV0dXJuIChlIGluc3RhbmNlb2YgY29kZV8xLl9Db2RlICYmXG4gICAgICAgICAgICBlLl9pdGVtcy5zb21lKChjKSA9PiBjIGluc3RhbmNlb2YgY29kZV8xLk5hbWUgJiYgbmFtZXNbYy5zdHJdID09PSAxICYmIGNvbnN0YW50c1tjLnN0cl0gIT09IHVuZGVmaW5lZCkpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHN1YnRyYWN0TmFtZXMobmFtZXMsIGZyb20pIHtcbiAgICBmb3IgKGNvbnN0IG4gaW4gZnJvbSlcbiAgICAgICAgbmFtZXNbbl0gPSAobmFtZXNbbl0gfHwgMCkgLSAoZnJvbVtuXSB8fCAwKTtcbn1cbmZ1bmN0aW9uIG5vdCh4KSB7XG4gICAgcmV0dXJuIHR5cGVvZiB4ID09IFwiYm9vbGVhblwiIHx8IHR5cGVvZiB4ID09IFwibnVtYmVyXCIgfHwgeCA9PT0gbnVsbCA/ICF4IDogKDAsIGNvZGVfMS5fKSBgISR7cGFyKHgpfWA7XG59XG5leHBvcnRzLm5vdCA9IG5vdDtcbmNvbnN0IGFuZENvZGUgPSBtYXBwZW5kKGV4cG9ydHMub3BlcmF0b3JzLkFORCk7XG4vLyBib29sZWFuIEFORCAoJiYpIGV4cHJlc3Npb24gd2l0aCB0aGUgcGFzc2VkIGFyZ3VtZW50c1xuZnVuY3Rpb24gYW5kKC4uLmFyZ3MpIHtcbiAgICByZXR1cm4gYXJncy5yZWR1Y2UoYW5kQ29kZSk7XG59XG5leHBvcnRzLmFuZCA9IGFuZDtcbmNvbnN0IG9yQ29kZSA9IG1hcHBlbmQoZXhwb3J0cy5vcGVyYXRvcnMuT1IpO1xuLy8gYm9vbGVhbiBPUiAofHwpIGV4cHJlc3Npb24gd2l0aCB0aGUgcGFzc2VkIGFyZ3VtZW50c1xuZnVuY3Rpb24gb3IoLi4uYXJncykge1xuICAgIHJldHVybiBhcmdzLnJlZHVjZShvckNvZGUpO1xufVxuZXhwb3J0cy5vciA9IG9yO1xuZnVuY3Rpb24gbWFwcGVuZChvcCkge1xuICAgIHJldHVybiAoeCwgeSkgPT4gKHggPT09IGNvZGVfMS5uaWwgPyB5IDogeSA9PT0gY29kZV8xLm5pbCA/IHggOiAoMCwgY29kZV8xLl8pIGAke3Bhcih4KX0gJHtvcH0gJHtwYXIoeSl9YCk7XG59XG5mdW5jdGlvbiBwYXIoeCkge1xuICAgIHJldHVybiB4IGluc3RhbmNlb2YgY29kZV8xLk5hbWUgPyB4IDogKDAsIGNvZGVfMS5fKSBgKCR7eH0pYDtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmNoZWNrU3RyaWN0TW9kZSA9IGV4cG9ydHMuZ2V0RXJyb3JQYXRoID0gZXhwb3J0cy5UeXBlID0gZXhwb3J0cy51c2VGdW5jID0gZXhwb3J0cy5zZXRFdmFsdWF0ZWQgPSBleHBvcnRzLmV2YWx1YXRlZFByb3BzVG9OYW1lID0gZXhwb3J0cy5tZXJnZUV2YWx1YXRlZCA9IGV4cG9ydHMuZWFjaEl0ZW0gPSBleHBvcnRzLnVuZXNjYXBlSnNvblBvaW50ZXIgPSBleHBvcnRzLmVzY2FwZUpzb25Qb2ludGVyID0gZXhwb3J0cy5lc2NhcGVGcmFnbWVudCA9IGV4cG9ydHMudW5lc2NhcGVGcmFnbWVudCA9IGV4cG9ydHMuc2NoZW1hUmVmT3JWYWwgPSBleHBvcnRzLnNjaGVtYUhhc1J1bGVzQnV0UmVmID0gZXhwb3J0cy5zY2hlbWFIYXNSdWxlcyA9IGV4cG9ydHMuY2hlY2tVbmtub3duUnVsZXMgPSBleHBvcnRzLmFsd2F5c1ZhbGlkU2NoZW1hID0gZXhwb3J0cy50b0hhc2ggPSB2b2lkIDA7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi9jb2RlZ2VuXCIpO1xuY29uc3QgY29kZV8xID0gcmVxdWlyZShcIi4vY29kZWdlbi9jb2RlXCIpO1xuLy8gVE9ETyByZWZhY3RvciB0byB1c2UgU2V0XG5mdW5jdGlvbiB0b0hhc2goYXJyKSB7XG4gICAgY29uc3QgaGFzaCA9IHt9O1xuICAgIGZvciAoY29uc3QgaXRlbSBvZiBhcnIpXG4gICAgICAgIGhhc2hbaXRlbV0gPSB0cnVlO1xuICAgIHJldHVybiBoYXNoO1xufVxuZXhwb3J0cy50b0hhc2ggPSB0b0hhc2g7XG5mdW5jdGlvbiBhbHdheXNWYWxpZFNjaGVtYShpdCwgc2NoZW1hKSB7XG4gICAgaWYgKHR5cGVvZiBzY2hlbWEgPT0gXCJib29sZWFuXCIpXG4gICAgICAgIHJldHVybiBzY2hlbWE7XG4gICAgaWYgKE9iamVjdC5rZXlzKHNjaGVtYSkubGVuZ3RoID09PSAwKVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICBjaGVja1Vua25vd25SdWxlcyhpdCwgc2NoZW1hKTtcbiAgICByZXR1cm4gIXNjaGVtYUhhc1J1bGVzKHNjaGVtYSwgaXQuc2VsZi5SVUxFUy5hbGwpO1xufVxuZXhwb3J0cy5hbHdheXNWYWxpZFNjaGVtYSA9IGFsd2F5c1ZhbGlkU2NoZW1hO1xuZnVuY3Rpb24gY2hlY2tVbmtub3duUnVsZXMoaXQsIHNjaGVtYSA9IGl0LnNjaGVtYSkge1xuICAgIGNvbnN0IHsgb3B0cywgc2VsZiB9ID0gaXQ7XG4gICAgaWYgKCFvcHRzLnN0cmljdFNjaGVtYSlcbiAgICAgICAgcmV0dXJuO1xuICAgIGlmICh0eXBlb2Ygc2NoZW1hID09PSBcImJvb2xlYW5cIilcbiAgICAgICAgcmV0dXJuO1xuICAgIGNvbnN0IHJ1bGVzID0gc2VsZi5SVUxFUy5rZXl3b3JkcztcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBzY2hlbWEpIHtcbiAgICAgICAgaWYgKCFydWxlc1trZXldKVxuICAgICAgICAgICAgY2hlY2tTdHJpY3RNb2RlKGl0LCBgdW5rbm93biBrZXl3b3JkOiBcIiR7a2V5fVwiYCk7XG4gICAgfVxufVxuZXhwb3J0cy5jaGVja1Vua25vd25SdWxlcyA9IGNoZWNrVW5rbm93blJ1bGVzO1xuZnVuY3Rpb24gc2NoZW1hSGFzUnVsZXMoc2NoZW1hLCBydWxlcykge1xuICAgIGlmICh0eXBlb2Ygc2NoZW1hID09IFwiYm9vbGVhblwiKVxuICAgICAgICByZXR1cm4gIXNjaGVtYTtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBzY2hlbWEpXG4gICAgICAgIGlmIChydWxlc1trZXldKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuZXhwb3J0cy5zY2hlbWFIYXNSdWxlcyA9IHNjaGVtYUhhc1J1bGVzO1xuZnVuY3Rpb24gc2NoZW1hSGFzUnVsZXNCdXRSZWYoc2NoZW1hLCBSVUxFUykge1xuICAgIGlmICh0eXBlb2Ygc2NoZW1hID09IFwiYm9vbGVhblwiKVxuICAgICAgICByZXR1cm4gIXNjaGVtYTtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBzY2hlbWEpXG4gICAgICAgIGlmIChrZXkgIT09IFwiJHJlZlwiICYmIFJVTEVTLmFsbFtrZXldKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuZXhwb3J0cy5zY2hlbWFIYXNSdWxlc0J1dFJlZiA9IHNjaGVtYUhhc1J1bGVzQnV0UmVmO1xuZnVuY3Rpb24gc2NoZW1hUmVmT3JWYWwoeyB0b3BTY2hlbWFSZWYsIHNjaGVtYVBhdGggfSwgc2NoZW1hLCBrZXl3b3JkLCAkZGF0YSkge1xuICAgIGlmICghJGRhdGEpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBzY2hlbWEgPT0gXCJudW1iZXJcIiB8fCB0eXBlb2Ygc2NoZW1hID09IFwiYm9vbGVhblwiKVxuICAgICAgICAgICAgcmV0dXJuIHNjaGVtYTtcbiAgICAgICAgaWYgKHR5cGVvZiBzY2hlbWEgPT0gXCJzdHJpbmdcIilcbiAgICAgICAgICAgIHJldHVybiAoMCwgY29kZWdlbl8xLl8pIGAke3NjaGVtYX1gO1xuICAgIH1cbiAgICByZXR1cm4gKDAsIGNvZGVnZW5fMS5fKSBgJHt0b3BTY2hlbWFSZWZ9JHtzY2hlbWFQYXRofSR7KDAsIGNvZGVnZW5fMS5nZXRQcm9wZXJ0eSkoa2V5d29yZCl9YDtcbn1cbmV4cG9ydHMuc2NoZW1hUmVmT3JWYWwgPSBzY2hlbWFSZWZPclZhbDtcbmZ1bmN0aW9uIHVuZXNjYXBlRnJhZ21lbnQoc3RyKSB7XG4gICAgcmV0dXJuIHVuZXNjYXBlSnNvblBvaW50ZXIoZGVjb2RlVVJJQ29tcG9uZW50KHN0cikpO1xufVxuZXhwb3J0cy51bmVzY2FwZUZyYWdtZW50ID0gdW5lc2NhcGVGcmFnbWVudDtcbmZ1bmN0aW9uIGVzY2FwZUZyYWdtZW50KHN0cikge1xuICAgIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQoZXNjYXBlSnNvblBvaW50ZXIoc3RyKSk7XG59XG5leHBvcnRzLmVzY2FwZUZyYWdtZW50ID0gZXNjYXBlRnJhZ21lbnQ7XG5mdW5jdGlvbiBlc2NhcGVKc29uUG9pbnRlcihzdHIpIHtcbiAgICBpZiAodHlwZW9mIHN0ciA9PSBcIm51bWJlclwiKVxuICAgICAgICByZXR1cm4gYCR7c3RyfWA7XG4gICAgcmV0dXJuIHN0ci5yZXBsYWNlKC9+L2csIFwifjBcIikucmVwbGFjZSgvXFwvL2csIFwifjFcIik7XG59XG5leHBvcnRzLmVzY2FwZUpzb25Qb2ludGVyID0gZXNjYXBlSnNvblBvaW50ZXI7XG5mdW5jdGlvbiB1bmVzY2FwZUpzb25Qb2ludGVyKHN0cikge1xuICAgIHJldHVybiBzdHIucmVwbGFjZSgvfjEvZywgXCIvXCIpLnJlcGxhY2UoL34wL2csIFwiflwiKTtcbn1cbmV4cG9ydHMudW5lc2NhcGVKc29uUG9pbnRlciA9IHVuZXNjYXBlSnNvblBvaW50ZXI7XG5mdW5jdGlvbiBlYWNoSXRlbSh4cywgZikge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHhzKSkge1xuICAgICAgICBmb3IgKGNvbnN0IHggb2YgeHMpXG4gICAgICAgICAgICBmKHgpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgZih4cyk7XG4gICAgfVxufVxuZXhwb3J0cy5lYWNoSXRlbSA9IGVhY2hJdGVtO1xuZnVuY3Rpb24gbWFrZU1lcmdlRXZhbHVhdGVkKHsgbWVyZ2VOYW1lcywgbWVyZ2VUb05hbWUsIG1lcmdlVmFsdWVzLCByZXN1bHRUb05hbWUsIH0pIHtcbiAgICByZXR1cm4gKGdlbiwgZnJvbSwgdG8sIHRvTmFtZSkgPT4ge1xuICAgICAgICBjb25zdCByZXMgPSB0byA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IGZyb21cbiAgICAgICAgICAgIDogdG8gaW5zdGFuY2VvZiBjb2RlZ2VuXzEuTmFtZVxuICAgICAgICAgICAgICAgID8gKGZyb20gaW5zdGFuY2VvZiBjb2RlZ2VuXzEuTmFtZSA/IG1lcmdlTmFtZXMoZ2VuLCBmcm9tLCB0bykgOiBtZXJnZVRvTmFtZShnZW4sIGZyb20sIHRvKSwgdG8pXG4gICAgICAgICAgICAgICAgOiBmcm9tIGluc3RhbmNlb2YgY29kZWdlbl8xLk5hbWVcbiAgICAgICAgICAgICAgICAgICAgPyAobWVyZ2VUb05hbWUoZ2VuLCB0bywgZnJvbSksIGZyb20pXG4gICAgICAgICAgICAgICAgICAgIDogbWVyZ2VWYWx1ZXMoZnJvbSwgdG8pO1xuICAgICAgICByZXR1cm4gdG9OYW1lID09PSBjb2RlZ2VuXzEuTmFtZSAmJiAhKHJlcyBpbnN0YW5jZW9mIGNvZGVnZW5fMS5OYW1lKSA/IHJlc3VsdFRvTmFtZShnZW4sIHJlcykgOiByZXM7XG4gICAgfTtcbn1cbmV4cG9ydHMubWVyZ2VFdmFsdWF0ZWQgPSB7XG4gICAgcHJvcHM6IG1ha2VNZXJnZUV2YWx1YXRlZCh7XG4gICAgICAgIG1lcmdlTmFtZXM6IChnZW4sIGZyb20sIHRvKSA9PiBnZW4uaWYoKDAsIGNvZGVnZW5fMS5fKSBgJHt0b30gIT09IHRydWUgJiYgJHtmcm9tfSAhPT0gdW5kZWZpbmVkYCwgKCkgPT4ge1xuICAgICAgICAgICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7ZnJvbX0gPT09IHRydWVgLCAoKSA9PiBnZW4uYXNzaWduKHRvLCB0cnVlKSwgKCkgPT4gZ2VuLmFzc2lnbih0bywgKDAsIGNvZGVnZW5fMS5fKSBgJHt0b30gfHwge31gKS5jb2RlKCgwLCBjb2RlZ2VuXzEuXykgYE9iamVjdC5hc3NpZ24oJHt0b30sICR7ZnJvbX0pYCkpO1xuICAgICAgICB9KSxcbiAgICAgICAgbWVyZ2VUb05hbWU6IChnZW4sIGZyb20sIHRvKSA9PiBnZW4uaWYoKDAsIGNvZGVnZW5fMS5fKSBgJHt0b30gIT09IHRydWVgLCAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoZnJvbSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgIGdlbi5hc3NpZ24odG8sIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZ2VuLmFzc2lnbih0bywgKDAsIGNvZGVnZW5fMS5fKSBgJHt0b30gfHwge31gKTtcbiAgICAgICAgICAgICAgICBzZXRFdmFsdWF0ZWQoZ2VuLCB0bywgZnJvbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICBtZXJnZVZhbHVlczogKGZyb20sIHRvKSA9PiAoZnJvbSA9PT0gdHJ1ZSA/IHRydWUgOiB7IC4uLmZyb20sIC4uLnRvIH0pLFxuICAgICAgICByZXN1bHRUb05hbWU6IGV2YWx1YXRlZFByb3BzVG9OYW1lLFxuICAgIH0pLFxuICAgIGl0ZW1zOiBtYWtlTWVyZ2VFdmFsdWF0ZWQoe1xuICAgICAgICBtZXJnZU5hbWVzOiAoZ2VuLCBmcm9tLCB0bykgPT4gZ2VuLmlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7dG99ICE9PSB0cnVlICYmICR7ZnJvbX0gIT09IHVuZGVmaW5lZGAsICgpID0+IGdlbi5hc3NpZ24odG8sICgwLCBjb2RlZ2VuXzEuXykgYCR7ZnJvbX0gPT09IHRydWUgPyB0cnVlIDogJHt0b30gPiAke2Zyb219ID8gJHt0b30gOiAke2Zyb219YCkpLFxuICAgICAgICBtZXJnZVRvTmFtZTogKGdlbiwgZnJvbSwgdG8pID0+IGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGAke3RvfSAhPT0gdHJ1ZWAsICgpID0+IGdlbi5hc3NpZ24odG8sIGZyb20gPT09IHRydWUgPyB0cnVlIDogKDAsIGNvZGVnZW5fMS5fKSBgJHt0b30gPiAke2Zyb219ID8gJHt0b30gOiAke2Zyb219YCkpLFxuICAgICAgICBtZXJnZVZhbHVlczogKGZyb20sIHRvKSA9PiAoZnJvbSA9PT0gdHJ1ZSA/IHRydWUgOiBNYXRoLm1heChmcm9tLCB0bykpLFxuICAgICAgICByZXN1bHRUb05hbWU6IChnZW4sIGl0ZW1zKSA9PiBnZW4udmFyKFwiaXRlbXNcIiwgaXRlbXMpLFxuICAgIH0pLFxufTtcbmZ1bmN0aW9uIGV2YWx1YXRlZFByb3BzVG9OYW1lKGdlbiwgcHMpIHtcbiAgICBpZiAocHMgPT09IHRydWUpXG4gICAgICAgIHJldHVybiBnZW4udmFyKFwicHJvcHNcIiwgdHJ1ZSk7XG4gICAgY29uc3QgcHJvcHMgPSBnZW4udmFyKFwicHJvcHNcIiwgKDAsIGNvZGVnZW5fMS5fKSBge31gKTtcbiAgICBpZiAocHMgIT09IHVuZGVmaW5lZClcbiAgICAgICAgc2V0RXZhbHVhdGVkKGdlbiwgcHJvcHMsIHBzKTtcbiAgICByZXR1cm4gcHJvcHM7XG59XG5leHBvcnRzLmV2YWx1YXRlZFByb3BzVG9OYW1lID0gZXZhbHVhdGVkUHJvcHNUb05hbWU7XG5mdW5jdGlvbiBzZXRFdmFsdWF0ZWQoZ2VuLCBwcm9wcywgcHMpIHtcbiAgICBPYmplY3Qua2V5cyhwcykuZm9yRWFjaCgocCkgPT4gZ2VuLmFzc2lnbigoMCwgY29kZWdlbl8xLl8pIGAke3Byb3BzfSR7KDAsIGNvZGVnZW5fMS5nZXRQcm9wZXJ0eSkocCl9YCwgdHJ1ZSkpO1xufVxuZXhwb3J0cy5zZXRFdmFsdWF0ZWQgPSBzZXRFdmFsdWF0ZWQ7XG5jb25zdCBzbmlwcGV0cyA9IHt9O1xuZnVuY3Rpb24gdXNlRnVuYyhnZW4sIGYpIHtcbiAgICByZXR1cm4gZ2VuLnNjb3BlVmFsdWUoXCJmdW5jXCIsIHtcbiAgICAgICAgcmVmOiBmLFxuICAgICAgICBjb2RlOiBzbmlwcGV0c1tmLmNvZGVdIHx8IChzbmlwcGV0c1tmLmNvZGVdID0gbmV3IGNvZGVfMS5fQ29kZShmLmNvZGUpKSxcbiAgICB9KTtcbn1cbmV4cG9ydHMudXNlRnVuYyA9IHVzZUZ1bmM7XG52YXIgVHlwZTtcbihmdW5jdGlvbiAoVHlwZSkge1xuICAgIFR5cGVbVHlwZVtcIk51bVwiXSA9IDBdID0gXCJOdW1cIjtcbiAgICBUeXBlW1R5cGVbXCJTdHJcIl0gPSAxXSA9IFwiU3RyXCI7XG59KShUeXBlID0gZXhwb3J0cy5UeXBlIHx8IChleHBvcnRzLlR5cGUgPSB7fSkpO1xuZnVuY3Rpb24gZ2V0RXJyb3JQYXRoKGRhdGFQcm9wLCBkYXRhUHJvcFR5cGUsIGpzUHJvcGVydHlTeW50YXgpIHtcbiAgICAvLyBsZXQgcGF0aFxuICAgIGlmIChkYXRhUHJvcCBpbnN0YW5jZW9mIGNvZGVnZW5fMS5OYW1lKSB7XG4gICAgICAgIGNvbnN0IGlzTnVtYmVyID0gZGF0YVByb3BUeXBlID09PSBUeXBlLk51bTtcbiAgICAgICAgcmV0dXJuIGpzUHJvcGVydHlTeW50YXhcbiAgICAgICAgICAgID8gaXNOdW1iZXJcbiAgICAgICAgICAgICAgICA/ICgwLCBjb2RlZ2VuXzEuXykgYFwiW1wiICsgJHtkYXRhUHJvcH0gKyBcIl1cImBcbiAgICAgICAgICAgICAgICA6ICgwLCBjb2RlZ2VuXzEuXykgYFwiWydcIiArICR7ZGF0YVByb3B9ICsgXCInXVwiYFxuICAgICAgICAgICAgOiBpc051bWJlclxuICAgICAgICAgICAgICAgID8gKDAsIGNvZGVnZW5fMS5fKSBgXCIvXCIgKyAke2RhdGFQcm9wfWBcbiAgICAgICAgICAgICAgICA6ICgwLCBjb2RlZ2VuXzEuXykgYFwiL1wiICsgJHtkYXRhUHJvcH0ucmVwbGFjZSgvfi9nLCBcIn4wXCIpLnJlcGxhY2UoL1xcXFwvL2csIFwifjFcIilgOyAvLyBUT0RPIG1heWJlIHVzZSBnbG9iYWwgZXNjYXBlUG9pbnRlclxuICAgIH1cbiAgICByZXR1cm4ganNQcm9wZXJ0eVN5bnRheCA/ICgwLCBjb2RlZ2VuXzEuZ2V0UHJvcGVydHkpKGRhdGFQcm9wKS50b1N0cmluZygpIDogXCIvXCIgKyBlc2NhcGVKc29uUG9pbnRlcihkYXRhUHJvcCk7XG59XG5leHBvcnRzLmdldEVycm9yUGF0aCA9IGdldEVycm9yUGF0aDtcbmZ1bmN0aW9uIGNoZWNrU3RyaWN0TW9kZShpdCwgbXNnLCBtb2RlID0gaXQub3B0cy5zdHJpY3RTY2hlbWEpIHtcbiAgICBpZiAoIW1vZGUpXG4gICAgICAgIHJldHVybjtcbiAgICBtc2cgPSBgc3RyaWN0IG1vZGU6ICR7bXNnfWA7XG4gICAgaWYgKG1vZGUgPT09IHRydWUpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihtc2cpO1xuICAgIGl0LnNlbGYubG9nZ2VyLndhcm4obXNnKTtcbn1cbmV4cG9ydHMuY2hlY2tTdHJpY3RNb2RlID0gY2hlY2tTdHJpY3RNb2RlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXRpbC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4vY29kZWdlblwiKTtcbmNvbnN0IG5hbWVzID0ge1xuICAgIC8vIHZhbGlkYXRpb24gZnVuY3Rpb24gYXJndW1lbnRzXG4gICAgZGF0YTogbmV3IGNvZGVnZW5fMS5OYW1lKFwiZGF0YVwiKSxcbiAgICAvLyBhcmdzIHBhc3NlZCBmcm9tIHJlZmVyZW5jaW5nIHNjaGVtYVxuICAgIHZhbEN4dDogbmV3IGNvZGVnZW5fMS5OYW1lKFwidmFsQ3h0XCIpLFxuICAgIGluc3RhbmNlUGF0aDogbmV3IGNvZGVnZW5fMS5OYW1lKFwiaW5zdGFuY2VQYXRoXCIpLFxuICAgIHBhcmVudERhdGE6IG5ldyBjb2RlZ2VuXzEuTmFtZShcInBhcmVudERhdGFcIiksXG4gICAgcGFyZW50RGF0YVByb3BlcnR5OiBuZXcgY29kZWdlbl8xLk5hbWUoXCJwYXJlbnREYXRhUHJvcGVydHlcIiksXG4gICAgcm9vdERhdGE6IG5ldyBjb2RlZ2VuXzEuTmFtZShcInJvb3REYXRhXCIpLFxuICAgIGR5bmFtaWNBbmNob3JzOiBuZXcgY29kZWdlbl8xLk5hbWUoXCJkeW5hbWljQW5jaG9yc1wiKSxcbiAgICAvLyBmdW5jdGlvbiBzY29wZWQgdmFyaWFibGVzXG4gICAgdkVycm9yczogbmV3IGNvZGVnZW5fMS5OYW1lKFwidkVycm9yc1wiKSxcbiAgICBlcnJvcnM6IG5ldyBjb2RlZ2VuXzEuTmFtZShcImVycm9yc1wiKSxcbiAgICB0aGlzOiBuZXcgY29kZWdlbl8xLk5hbWUoXCJ0aGlzXCIpLFxuICAgIC8vIFwiZ2xvYmFsc1wiXG4gICAgc2VsZjogbmV3IGNvZGVnZW5fMS5OYW1lKFwic2VsZlwiKSxcbiAgICBzY29wZTogbmV3IGNvZGVnZW5fMS5OYW1lKFwic2NvcGVcIiksXG4gICAgLy8gSlREIHNlcmlhbGl6ZS9wYXJzZSBuYW1lIGZvciBKU09OIHN0cmluZyBhbmQgcG9zaXRpb25cbiAgICBqc29uOiBuZXcgY29kZWdlbl8xLk5hbWUoXCJqc29uXCIpLFxuICAgIGpzb25Qb3M6IG5ldyBjb2RlZ2VuXzEuTmFtZShcImpzb25Qb3NcIiksXG4gICAganNvbkxlbjogbmV3IGNvZGVnZW5fMS5OYW1lKFwianNvbkxlblwiKSxcbiAgICBqc29uUGFydDogbmV3IGNvZGVnZW5fMS5OYW1lKFwianNvblBhcnRcIiksXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gbmFtZXM7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1uYW1lcy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5leHRlbmRFcnJvcnMgPSBleHBvcnRzLnJlc2V0RXJyb3JzQ291bnQgPSBleHBvcnRzLnJlcG9ydEV4dHJhRXJyb3IgPSBleHBvcnRzLnJlcG9ydEVycm9yID0gZXhwb3J0cy5rZXl3b3JkJERhdGFFcnJvciA9IGV4cG9ydHMua2V5d29yZEVycm9yID0gdm9pZCAwO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4vY29kZWdlblwiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuL3V0aWxcIik7XG5jb25zdCBuYW1lc18xID0gcmVxdWlyZShcIi4vbmFtZXNcIik7XG5leHBvcnRzLmtleXdvcmRFcnJvciA9IHtcbiAgICBtZXNzYWdlOiAoeyBrZXl3b3JkIH0pID0+ICgwLCBjb2RlZ2VuXzEuc3RyKSBgbXVzdCBwYXNzIFwiJHtrZXl3b3JkfVwiIGtleXdvcmQgdmFsaWRhdGlvbmAsXG59O1xuZXhwb3J0cy5rZXl3b3JkJERhdGFFcnJvciA9IHtcbiAgICBtZXNzYWdlOiAoeyBrZXl3b3JkLCBzY2hlbWFUeXBlIH0pID0+IHNjaGVtYVR5cGVcbiAgICAgICAgPyAoMCwgY29kZWdlbl8xLnN0cikgYFwiJHtrZXl3b3JkfVwiIGtleXdvcmQgbXVzdCBiZSAke3NjaGVtYVR5cGV9ICgkZGF0YSlgXG4gICAgICAgIDogKDAsIGNvZGVnZW5fMS5zdHIpIGBcIiR7a2V5d29yZH1cIiBrZXl3b3JkIGlzIGludmFsaWQgKCRkYXRhKWAsXG59O1xuZnVuY3Rpb24gcmVwb3J0RXJyb3IoY3h0LCBlcnJvciA9IGV4cG9ydHMua2V5d29yZEVycm9yLCBlcnJvclBhdGhzLCBvdmVycmlkZUFsbEVycm9ycykge1xuICAgIGNvbnN0IHsgaXQgfSA9IGN4dDtcbiAgICBjb25zdCB7IGdlbiwgY29tcG9zaXRlUnVsZSwgYWxsRXJyb3JzIH0gPSBpdDtcbiAgICBjb25zdCBlcnJPYmogPSBlcnJvck9iamVjdENvZGUoY3h0LCBlcnJvciwgZXJyb3JQYXRocyk7XG4gICAgaWYgKG92ZXJyaWRlQWxsRXJyb3JzICE9PSBudWxsICYmIG92ZXJyaWRlQWxsRXJyb3JzICE9PSB2b2lkIDAgPyBvdmVycmlkZUFsbEVycm9ycyA6IChjb21wb3NpdGVSdWxlIHx8IGFsbEVycm9ycykpIHtcbiAgICAgICAgYWRkRXJyb3IoZ2VuLCBlcnJPYmopO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuRXJyb3JzKGl0LCAoMCwgY29kZWdlbl8xLl8pIGBbJHtlcnJPYmp9XWApO1xuICAgIH1cbn1cbmV4cG9ydHMucmVwb3J0RXJyb3IgPSByZXBvcnRFcnJvcjtcbmZ1bmN0aW9uIHJlcG9ydEV4dHJhRXJyb3IoY3h0LCBlcnJvciA9IGV4cG9ydHMua2V5d29yZEVycm9yLCBlcnJvclBhdGhzKSB7XG4gICAgY29uc3QgeyBpdCB9ID0gY3h0O1xuICAgIGNvbnN0IHsgZ2VuLCBjb21wb3NpdGVSdWxlLCBhbGxFcnJvcnMgfSA9IGl0O1xuICAgIGNvbnN0IGVyck9iaiA9IGVycm9yT2JqZWN0Q29kZShjeHQsIGVycm9yLCBlcnJvclBhdGhzKTtcbiAgICBhZGRFcnJvcihnZW4sIGVyck9iaik7XG4gICAgaWYgKCEoY29tcG9zaXRlUnVsZSB8fCBhbGxFcnJvcnMpKSB7XG4gICAgICAgIHJldHVybkVycm9ycyhpdCwgbmFtZXNfMS5kZWZhdWx0LnZFcnJvcnMpO1xuICAgIH1cbn1cbmV4cG9ydHMucmVwb3J0RXh0cmFFcnJvciA9IHJlcG9ydEV4dHJhRXJyb3I7XG5mdW5jdGlvbiByZXNldEVycm9yc0NvdW50KGdlbiwgZXJyc0NvdW50KSB7XG4gICAgZ2VuLmFzc2lnbihuYW1lc18xLmRlZmF1bHQuZXJyb3JzLCBlcnJzQ291bnQpO1xuICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGAke25hbWVzXzEuZGVmYXVsdC52RXJyb3JzfSAhPT0gbnVsbGAsICgpID0+IGdlbi5pZihlcnJzQ291bnQsICgpID0+IGdlbi5hc3NpZ24oKDAsIGNvZGVnZW5fMS5fKSBgJHtuYW1lc18xLmRlZmF1bHQudkVycm9yc30ubGVuZ3RoYCwgZXJyc0NvdW50KSwgKCkgPT4gZ2VuLmFzc2lnbihuYW1lc18xLmRlZmF1bHQudkVycm9ycywgbnVsbCkpKTtcbn1cbmV4cG9ydHMucmVzZXRFcnJvcnNDb3VudCA9IHJlc2V0RXJyb3JzQ291bnQ7XG5mdW5jdGlvbiBleHRlbmRFcnJvcnMoeyBnZW4sIGtleXdvcmQsIHNjaGVtYVZhbHVlLCBkYXRhLCBlcnJzQ291bnQsIGl0LCB9KSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKGVycnNDb3VudCA9PT0gdW5kZWZpbmVkKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJhanYgaW1wbGVtZW50YXRpb24gZXJyb3JcIik7XG4gICAgY29uc3QgZXJyID0gZ2VuLm5hbWUoXCJlcnJcIik7XG4gICAgZ2VuLmZvclJhbmdlKFwiaVwiLCBlcnJzQ291bnQsIG5hbWVzXzEuZGVmYXVsdC5lcnJvcnMsIChpKSA9PiB7XG4gICAgICAgIGdlbi5jb25zdChlcnIsICgwLCBjb2RlZ2VuXzEuXykgYCR7bmFtZXNfMS5kZWZhdWx0LnZFcnJvcnN9WyR7aX1dYCk7XG4gICAgICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGAke2Vycn0uaW5zdGFuY2VQYXRoID09PSB1bmRlZmluZWRgLCAoKSA9PiBnZW4uYXNzaWduKCgwLCBjb2RlZ2VuXzEuXykgYCR7ZXJyfS5pbnN0YW5jZVBhdGhgLCAoMCwgY29kZWdlbl8xLnN0ckNvbmNhdCkobmFtZXNfMS5kZWZhdWx0Lmluc3RhbmNlUGF0aCwgaXQuZXJyb3JQYXRoKSkpO1xuICAgICAgICBnZW4uYXNzaWduKCgwLCBjb2RlZ2VuXzEuXykgYCR7ZXJyfS5zY2hlbWFQYXRoYCwgKDAsIGNvZGVnZW5fMS5zdHIpIGAke2l0LmVyclNjaGVtYVBhdGh9LyR7a2V5d29yZH1gKTtcbiAgICAgICAgaWYgKGl0Lm9wdHMudmVyYm9zZSkge1xuICAgICAgICAgICAgZ2VuLmFzc2lnbigoMCwgY29kZWdlbl8xLl8pIGAke2Vycn0uc2NoZW1hYCwgc2NoZW1hVmFsdWUpO1xuICAgICAgICAgICAgZ2VuLmFzc2lnbigoMCwgY29kZWdlbl8xLl8pIGAke2Vycn0uZGF0YWAsIGRhdGEpO1xuICAgICAgICB9XG4gICAgfSk7XG59XG5leHBvcnRzLmV4dGVuZEVycm9ycyA9IGV4dGVuZEVycm9ycztcbmZ1bmN0aW9uIGFkZEVycm9yKGdlbiwgZXJyT2JqKSB7XG4gICAgY29uc3QgZXJyID0gZ2VuLmNvbnN0KFwiZXJyXCIsIGVyck9iaik7XG4gICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7bmFtZXNfMS5kZWZhdWx0LnZFcnJvcnN9ID09PSBudWxsYCwgKCkgPT4gZ2VuLmFzc2lnbihuYW1lc18xLmRlZmF1bHQudkVycm9ycywgKDAsIGNvZGVnZW5fMS5fKSBgWyR7ZXJyfV1gKSwgKDAsIGNvZGVnZW5fMS5fKSBgJHtuYW1lc18xLmRlZmF1bHQudkVycm9yc30ucHVzaCgke2Vycn0pYCk7XG4gICAgZ2VuLmNvZGUoKDAsIGNvZGVnZW5fMS5fKSBgJHtuYW1lc18xLmRlZmF1bHQuZXJyb3JzfSsrYCk7XG59XG5mdW5jdGlvbiByZXR1cm5FcnJvcnMoaXQsIGVycnMpIHtcbiAgICBjb25zdCB7IGdlbiwgdmFsaWRhdGVOYW1lLCBzY2hlbWFFbnYgfSA9IGl0O1xuICAgIGlmIChzY2hlbWFFbnYuJGFzeW5jKSB7XG4gICAgICAgIGdlbi50aHJvdygoMCwgY29kZWdlbl8xLl8pIGBuZXcgJHtpdC5WYWxpZGF0aW9uRXJyb3J9KCR7ZXJyc30pYCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBnZW4uYXNzaWduKCgwLCBjb2RlZ2VuXzEuXykgYCR7dmFsaWRhdGVOYW1lfS5lcnJvcnNgLCBlcnJzKTtcbiAgICAgICAgZ2VuLnJldHVybihmYWxzZSk7XG4gICAgfVxufVxuY29uc3QgRSA9IHtcbiAgICBrZXl3b3JkOiBuZXcgY29kZWdlbl8xLk5hbWUoXCJrZXl3b3JkXCIpLFxuICAgIHNjaGVtYVBhdGg6IG5ldyBjb2RlZ2VuXzEuTmFtZShcInNjaGVtYVBhdGhcIiksXG4gICAgcGFyYW1zOiBuZXcgY29kZWdlbl8xLk5hbWUoXCJwYXJhbXNcIiksXG4gICAgcHJvcGVydHlOYW1lOiBuZXcgY29kZWdlbl8xLk5hbWUoXCJwcm9wZXJ0eU5hbWVcIiksXG4gICAgbWVzc2FnZTogbmV3IGNvZGVnZW5fMS5OYW1lKFwibWVzc2FnZVwiKSxcbiAgICBzY2hlbWE6IG5ldyBjb2RlZ2VuXzEuTmFtZShcInNjaGVtYVwiKSxcbiAgICBwYXJlbnRTY2hlbWE6IG5ldyBjb2RlZ2VuXzEuTmFtZShcInBhcmVudFNjaGVtYVwiKSxcbn07XG5mdW5jdGlvbiBlcnJvck9iamVjdENvZGUoY3h0LCBlcnJvciwgZXJyb3JQYXRocykge1xuICAgIGNvbnN0IHsgY3JlYXRlRXJyb3JzIH0gPSBjeHQuaXQ7XG4gICAgaWYgKGNyZWF0ZUVycm9ycyA9PT0gZmFsc2UpXG4gICAgICAgIHJldHVybiAoMCwgY29kZWdlbl8xLl8pIGB7fWA7XG4gICAgcmV0dXJuIGVycm9yT2JqZWN0KGN4dCwgZXJyb3IsIGVycm9yUGF0aHMpO1xufVxuZnVuY3Rpb24gZXJyb3JPYmplY3QoY3h0LCBlcnJvciwgZXJyb3JQYXRocyA9IHt9KSB7XG4gICAgY29uc3QgeyBnZW4sIGl0IH0gPSBjeHQ7XG4gICAgY29uc3Qga2V5VmFsdWVzID0gW1xuICAgICAgICBlcnJvckluc3RhbmNlUGF0aChpdCwgZXJyb3JQYXRocyksXG4gICAgICAgIGVycm9yU2NoZW1hUGF0aChjeHQsIGVycm9yUGF0aHMpLFxuICAgIF07XG4gICAgZXh0cmFFcnJvclByb3BzKGN4dCwgZXJyb3IsIGtleVZhbHVlcyk7XG4gICAgcmV0dXJuIGdlbi5vYmplY3QoLi4ua2V5VmFsdWVzKTtcbn1cbmZ1bmN0aW9uIGVycm9ySW5zdGFuY2VQYXRoKHsgZXJyb3JQYXRoIH0sIHsgaW5zdGFuY2VQYXRoIH0pIHtcbiAgICBjb25zdCBpbnN0UGF0aCA9IGluc3RhbmNlUGF0aFxuICAgICAgICA/ICgwLCBjb2RlZ2VuXzEuc3RyKSBgJHtlcnJvclBhdGh9JHsoMCwgdXRpbF8xLmdldEVycm9yUGF0aCkoaW5zdGFuY2VQYXRoLCB1dGlsXzEuVHlwZS5TdHIpfWBcbiAgICAgICAgOiBlcnJvclBhdGg7XG4gICAgcmV0dXJuIFtuYW1lc18xLmRlZmF1bHQuaW5zdGFuY2VQYXRoLCAoMCwgY29kZWdlbl8xLnN0ckNvbmNhdCkobmFtZXNfMS5kZWZhdWx0Lmluc3RhbmNlUGF0aCwgaW5zdFBhdGgpXTtcbn1cbmZ1bmN0aW9uIGVycm9yU2NoZW1hUGF0aCh7IGtleXdvcmQsIGl0OiB7IGVyclNjaGVtYVBhdGggfSB9LCB7IHNjaGVtYVBhdGgsIHBhcmVudFNjaGVtYSB9KSB7XG4gICAgbGV0IHNjaFBhdGggPSBwYXJlbnRTY2hlbWEgPyBlcnJTY2hlbWFQYXRoIDogKDAsIGNvZGVnZW5fMS5zdHIpIGAke2VyclNjaGVtYVBhdGh9LyR7a2V5d29yZH1gO1xuICAgIGlmIChzY2hlbWFQYXRoKSB7XG4gICAgICAgIHNjaFBhdGggPSAoMCwgY29kZWdlbl8xLnN0cikgYCR7c2NoUGF0aH0keygwLCB1dGlsXzEuZ2V0RXJyb3JQYXRoKShzY2hlbWFQYXRoLCB1dGlsXzEuVHlwZS5TdHIpfWA7XG4gICAgfVxuICAgIHJldHVybiBbRS5zY2hlbWFQYXRoLCBzY2hQYXRoXTtcbn1cbmZ1bmN0aW9uIGV4dHJhRXJyb3JQcm9wcyhjeHQsIHsgcGFyYW1zLCBtZXNzYWdlIH0sIGtleVZhbHVlcykge1xuICAgIGNvbnN0IHsga2V5d29yZCwgZGF0YSwgc2NoZW1hVmFsdWUsIGl0IH0gPSBjeHQ7XG4gICAgY29uc3QgeyBvcHRzLCBwcm9wZXJ0eU5hbWUsIHRvcFNjaGVtYVJlZiwgc2NoZW1hUGF0aCB9ID0gaXQ7XG4gICAga2V5VmFsdWVzLnB1c2goW0Uua2V5d29yZCwga2V5d29yZF0sIFtFLnBhcmFtcywgdHlwZW9mIHBhcmFtcyA9PSBcImZ1bmN0aW9uXCIgPyBwYXJhbXMoY3h0KSA6IHBhcmFtcyB8fCAoMCwgY29kZWdlbl8xLl8pIGB7fWBdKTtcbiAgICBpZiAob3B0cy5tZXNzYWdlcykge1xuICAgICAgICBrZXlWYWx1ZXMucHVzaChbRS5tZXNzYWdlLCB0eXBlb2YgbWVzc2FnZSA9PSBcImZ1bmN0aW9uXCIgPyBtZXNzYWdlKGN4dCkgOiBtZXNzYWdlXSk7XG4gICAgfVxuICAgIGlmIChvcHRzLnZlcmJvc2UpIHtcbiAgICAgICAga2V5VmFsdWVzLnB1c2goW0Uuc2NoZW1hLCBzY2hlbWFWYWx1ZV0sIFtFLnBhcmVudFNjaGVtYSwgKDAsIGNvZGVnZW5fMS5fKSBgJHt0b3BTY2hlbWFSZWZ9JHtzY2hlbWFQYXRofWBdLCBbbmFtZXNfMS5kZWZhdWx0LmRhdGEsIGRhdGFdKTtcbiAgICB9XG4gICAgaWYgKHByb3BlcnR5TmFtZSlcbiAgICAgICAga2V5VmFsdWVzLnB1c2goW0UucHJvcGVydHlOYW1lLCBwcm9wZXJ0eU5hbWVdKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWVycm9ycy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5ib29sT3JFbXB0eVNjaGVtYSA9IGV4cG9ydHMudG9wQm9vbE9yRW1wdHlTY2hlbWEgPSB2b2lkIDA7XG5jb25zdCBlcnJvcnNfMSA9IHJlcXVpcmUoXCIuLi9lcnJvcnNcIik7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi4vY29kZWdlblwiKTtcbmNvbnN0IG5hbWVzXzEgPSByZXF1aXJlKFwiLi4vbmFtZXNcIik7XG5jb25zdCBib29sRXJyb3IgPSB7XG4gICAgbWVzc2FnZTogXCJib29sZWFuIHNjaGVtYSBpcyBmYWxzZVwiLFxufTtcbmZ1bmN0aW9uIHRvcEJvb2xPckVtcHR5U2NoZW1hKGl0KSB7XG4gICAgY29uc3QgeyBnZW4sIHNjaGVtYSwgdmFsaWRhdGVOYW1lIH0gPSBpdDtcbiAgICBpZiAoc2NoZW1hID09PSBmYWxzZSkge1xuICAgICAgICBmYWxzZVNjaGVtYUVycm9yKGl0LCBmYWxzZSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGVvZiBzY2hlbWEgPT0gXCJvYmplY3RcIiAmJiBzY2hlbWEuJGFzeW5jID09PSB0cnVlKSB7XG4gICAgICAgIGdlbi5yZXR1cm4obmFtZXNfMS5kZWZhdWx0LmRhdGEpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgZ2VuLmFzc2lnbigoMCwgY29kZWdlbl8xLl8pIGAke3ZhbGlkYXRlTmFtZX0uZXJyb3JzYCwgbnVsbCk7XG4gICAgICAgIGdlbi5yZXR1cm4odHJ1ZSk7XG4gICAgfVxufVxuZXhwb3J0cy50b3BCb29sT3JFbXB0eVNjaGVtYSA9IHRvcEJvb2xPckVtcHR5U2NoZW1hO1xuZnVuY3Rpb24gYm9vbE9yRW1wdHlTY2hlbWEoaXQsIHZhbGlkKSB7XG4gICAgY29uc3QgeyBnZW4sIHNjaGVtYSB9ID0gaXQ7XG4gICAgaWYgKHNjaGVtYSA9PT0gZmFsc2UpIHtcbiAgICAgICAgZ2VuLnZhcih2YWxpZCwgZmFsc2UpOyAvLyBUT0RPIHZhclxuICAgICAgICBmYWxzZVNjaGVtYUVycm9yKGl0KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGdlbi52YXIodmFsaWQsIHRydWUpOyAvLyBUT0RPIHZhclxuICAgIH1cbn1cbmV4cG9ydHMuYm9vbE9yRW1wdHlTY2hlbWEgPSBib29sT3JFbXB0eVNjaGVtYTtcbmZ1bmN0aW9uIGZhbHNlU2NoZW1hRXJyb3IoaXQsIG92ZXJyaWRlQWxsRXJyb3JzKSB7XG4gICAgY29uc3QgeyBnZW4sIGRhdGEgfSA9IGl0O1xuICAgIC8vIFRPRE8gbWF5YmUgc29tZSBvdGhlciBpbnRlcmZhY2Ugc2hvdWxkIGJlIHVzZWQgZm9yIG5vbi1rZXl3b3JkIHZhbGlkYXRpb24gZXJyb3JzLi4uXG4gICAgY29uc3QgY3h0ID0ge1xuICAgICAgICBnZW4sXG4gICAgICAgIGtleXdvcmQ6IFwiZmFsc2Ugc2NoZW1hXCIsXG4gICAgICAgIGRhdGEsXG4gICAgICAgIHNjaGVtYTogZmFsc2UsXG4gICAgICAgIHNjaGVtYUNvZGU6IGZhbHNlLFxuICAgICAgICBzY2hlbWFWYWx1ZTogZmFsc2UsXG4gICAgICAgIHBhcmFtczoge30sXG4gICAgICAgIGl0LFxuICAgIH07XG4gICAgKDAsIGVycm9yc18xLnJlcG9ydEVycm9yKShjeHQsIGJvb2xFcnJvciwgdW5kZWZpbmVkLCBvdmVycmlkZUFsbEVycm9ycyk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1ib29sU2NoZW1hLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldFJ1bGVzID0gZXhwb3J0cy5pc0pTT05UeXBlID0gdm9pZCAwO1xuY29uc3QgX2pzb25UeXBlcyA9IFtcInN0cmluZ1wiLCBcIm51bWJlclwiLCBcImludGVnZXJcIiwgXCJib29sZWFuXCIsIFwibnVsbFwiLCBcIm9iamVjdFwiLCBcImFycmF5XCJdO1xuY29uc3QganNvblR5cGVzID0gbmV3IFNldChfanNvblR5cGVzKTtcbmZ1bmN0aW9uIGlzSlNPTlR5cGUoeCkge1xuICAgIHJldHVybiB0eXBlb2YgeCA9PSBcInN0cmluZ1wiICYmIGpzb25UeXBlcy5oYXMoeCk7XG59XG5leHBvcnRzLmlzSlNPTlR5cGUgPSBpc0pTT05UeXBlO1xuZnVuY3Rpb24gZ2V0UnVsZXMoKSB7XG4gICAgY29uc3QgZ3JvdXBzID0ge1xuICAgICAgICBudW1iZXI6IHsgdHlwZTogXCJudW1iZXJcIiwgcnVsZXM6IFtdIH0sXG4gICAgICAgIHN0cmluZzogeyB0eXBlOiBcInN0cmluZ1wiLCBydWxlczogW10gfSxcbiAgICAgICAgYXJyYXk6IHsgdHlwZTogXCJhcnJheVwiLCBydWxlczogW10gfSxcbiAgICAgICAgb2JqZWN0OiB7IHR5cGU6IFwib2JqZWN0XCIsIHJ1bGVzOiBbXSB9LFxuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZXM6IHsgLi4uZ3JvdXBzLCBpbnRlZ2VyOiB0cnVlLCBib29sZWFuOiB0cnVlLCBudWxsOiB0cnVlIH0sXG4gICAgICAgIHJ1bGVzOiBbeyBydWxlczogW10gfSwgZ3JvdXBzLm51bWJlciwgZ3JvdXBzLnN0cmluZywgZ3JvdXBzLmFycmF5LCBncm91cHMub2JqZWN0XSxcbiAgICAgICAgcG9zdDogeyBydWxlczogW10gfSxcbiAgICAgICAgYWxsOiB7fSxcbiAgICAgICAga2V5d29yZHM6IHt9LFxuICAgIH07XG59XG5leHBvcnRzLmdldFJ1bGVzID0gZ2V0UnVsZXM7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1ydWxlcy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5zaG91bGRVc2VSdWxlID0gZXhwb3J0cy5zaG91bGRVc2VHcm91cCA9IGV4cG9ydHMuc2NoZW1hSGFzUnVsZXNGb3JUeXBlID0gdm9pZCAwO1xuZnVuY3Rpb24gc2NoZW1hSGFzUnVsZXNGb3JUeXBlKHsgc2NoZW1hLCBzZWxmIH0sIHR5cGUpIHtcbiAgICBjb25zdCBncm91cCA9IHNlbGYuUlVMRVMudHlwZXNbdHlwZV07XG4gICAgcmV0dXJuIGdyb3VwICYmIGdyb3VwICE9PSB0cnVlICYmIHNob3VsZFVzZUdyb3VwKHNjaGVtYSwgZ3JvdXApO1xufVxuZXhwb3J0cy5zY2hlbWFIYXNSdWxlc0ZvclR5cGUgPSBzY2hlbWFIYXNSdWxlc0ZvclR5cGU7XG5mdW5jdGlvbiBzaG91bGRVc2VHcm91cChzY2hlbWEsIGdyb3VwKSB7XG4gICAgcmV0dXJuIGdyb3VwLnJ1bGVzLnNvbWUoKHJ1bGUpID0+IHNob3VsZFVzZVJ1bGUoc2NoZW1hLCBydWxlKSk7XG59XG5leHBvcnRzLnNob3VsZFVzZUdyb3VwID0gc2hvdWxkVXNlR3JvdXA7XG5mdW5jdGlvbiBzaG91bGRVc2VSdWxlKHNjaGVtYSwgcnVsZSkge1xuICAgIHZhciBfYTtcbiAgICByZXR1cm4gKHNjaGVtYVtydWxlLmtleXdvcmRdICE9PSB1bmRlZmluZWQgfHxcbiAgICAgICAgKChfYSA9IHJ1bGUuZGVmaW5pdGlvbi5pbXBsZW1lbnRzKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc29tZSgoa3dkKSA9PiBzY2hlbWFba3dkXSAhPT0gdW5kZWZpbmVkKSkpO1xufVxuZXhwb3J0cy5zaG91bGRVc2VSdWxlID0gc2hvdWxkVXNlUnVsZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFwcGxpY2FiaWxpdHkuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucmVwb3J0VHlwZUVycm9yID0gZXhwb3J0cy5jaGVja0RhdGFUeXBlcyA9IGV4cG9ydHMuY2hlY2tEYXRhVHlwZSA9IGV4cG9ydHMuY29lcmNlQW5kQ2hlY2tEYXRhVHlwZSA9IGV4cG9ydHMuZ2V0SlNPTlR5cGVzID0gZXhwb3J0cy5nZXRTY2hlbWFUeXBlcyA9IGV4cG9ydHMuRGF0YVR5cGUgPSB2b2lkIDA7XG5jb25zdCBydWxlc18xID0gcmVxdWlyZShcIi4uL3J1bGVzXCIpO1xuY29uc3QgYXBwbGljYWJpbGl0eV8xID0gcmVxdWlyZShcIi4vYXBwbGljYWJpbGl0eVwiKTtcbmNvbnN0IGVycm9yc18xID0gcmVxdWlyZShcIi4uL2Vycm9yc1wiKTtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi9jb2RlZ2VuXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uL3V0aWxcIik7XG52YXIgRGF0YVR5cGU7XG4oZnVuY3Rpb24gKERhdGFUeXBlKSB7XG4gICAgRGF0YVR5cGVbRGF0YVR5cGVbXCJDb3JyZWN0XCJdID0gMF0gPSBcIkNvcnJlY3RcIjtcbiAgICBEYXRhVHlwZVtEYXRhVHlwZVtcIldyb25nXCJdID0gMV0gPSBcIldyb25nXCI7XG59KShEYXRhVHlwZSA9IGV4cG9ydHMuRGF0YVR5cGUgfHwgKGV4cG9ydHMuRGF0YVR5cGUgPSB7fSkpO1xuZnVuY3Rpb24gZ2V0U2NoZW1hVHlwZXMoc2NoZW1hKSB7XG4gICAgY29uc3QgdHlwZXMgPSBnZXRKU09OVHlwZXMoc2NoZW1hLnR5cGUpO1xuICAgIGNvbnN0IGhhc051bGwgPSB0eXBlcy5pbmNsdWRlcyhcIm51bGxcIik7XG4gICAgaWYgKGhhc051bGwpIHtcbiAgICAgICAgaWYgKHNjaGVtYS5udWxsYWJsZSA9PT0gZmFsc2UpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ0eXBlOiBudWxsIGNvbnRyYWRpY3RzIG51bGxhYmxlOiBmYWxzZVwiKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGlmICghdHlwZXMubGVuZ3RoICYmIHNjaGVtYS5udWxsYWJsZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1wibnVsbGFibGVcIiBjYW5ub3QgYmUgdXNlZCB3aXRob3V0IFwidHlwZVwiJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNjaGVtYS5udWxsYWJsZSA9PT0gdHJ1ZSlcbiAgICAgICAgICAgIHR5cGVzLnB1c2goXCJudWxsXCIpO1xuICAgIH1cbiAgICByZXR1cm4gdHlwZXM7XG59XG5leHBvcnRzLmdldFNjaGVtYVR5cGVzID0gZ2V0U2NoZW1hVHlwZXM7XG5mdW5jdGlvbiBnZXRKU09OVHlwZXModHMpIHtcbiAgICBjb25zdCB0eXBlcyA9IEFycmF5LmlzQXJyYXkodHMpID8gdHMgOiB0cyA/IFt0c10gOiBbXTtcbiAgICBpZiAodHlwZXMuZXZlcnkocnVsZXNfMS5pc0pTT05UeXBlKSlcbiAgICAgICAgcmV0dXJuIHR5cGVzO1xuICAgIHRocm93IG5ldyBFcnJvcihcInR5cGUgbXVzdCBiZSBKU09OVHlwZSBvciBKU09OVHlwZVtdOiBcIiArIHR5cGVzLmpvaW4oXCIsXCIpKTtcbn1cbmV4cG9ydHMuZ2V0SlNPTlR5cGVzID0gZ2V0SlNPTlR5cGVzO1xuZnVuY3Rpb24gY29lcmNlQW5kQ2hlY2tEYXRhVHlwZShpdCwgdHlwZXMpIHtcbiAgICBjb25zdCB7IGdlbiwgZGF0YSwgb3B0cyB9ID0gaXQ7XG4gICAgY29uc3QgY29lcmNlVG8gPSBjb2VyY2VUb1R5cGVzKHR5cGVzLCBvcHRzLmNvZXJjZVR5cGVzKTtcbiAgICBjb25zdCBjaGVja1R5cGVzID0gdHlwZXMubGVuZ3RoID4gMCAmJlxuICAgICAgICAhKGNvZXJjZVRvLmxlbmd0aCA9PT0gMCAmJiB0eXBlcy5sZW5ndGggPT09IDEgJiYgKDAsIGFwcGxpY2FiaWxpdHlfMS5zY2hlbWFIYXNSdWxlc0ZvclR5cGUpKGl0LCB0eXBlc1swXSkpO1xuICAgIGlmIChjaGVja1R5cGVzKSB7XG4gICAgICAgIGNvbnN0IHdyb25nVHlwZSA9IGNoZWNrRGF0YVR5cGVzKHR5cGVzLCBkYXRhLCBvcHRzLnN0cmljdE51bWJlcnMsIERhdGFUeXBlLldyb25nKTtcbiAgICAgICAgZ2VuLmlmKHdyb25nVHlwZSwgKCkgPT4ge1xuICAgICAgICAgICAgaWYgKGNvZXJjZVRvLmxlbmd0aClcbiAgICAgICAgICAgICAgICBjb2VyY2VEYXRhKGl0LCB0eXBlcywgY29lcmNlVG8pO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHJlcG9ydFR5cGVFcnJvcihpdCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gY2hlY2tUeXBlcztcbn1cbmV4cG9ydHMuY29lcmNlQW5kQ2hlY2tEYXRhVHlwZSA9IGNvZXJjZUFuZENoZWNrRGF0YVR5cGU7XG5jb25zdCBDT0VSQ0lCTEUgPSBuZXcgU2V0KFtcInN0cmluZ1wiLCBcIm51bWJlclwiLCBcImludGVnZXJcIiwgXCJib29sZWFuXCIsIFwibnVsbFwiXSk7XG5mdW5jdGlvbiBjb2VyY2VUb1R5cGVzKHR5cGVzLCBjb2VyY2VUeXBlcykge1xuICAgIHJldHVybiBjb2VyY2VUeXBlc1xuICAgICAgICA/IHR5cGVzLmZpbHRlcigodCkgPT4gQ09FUkNJQkxFLmhhcyh0KSB8fCAoY29lcmNlVHlwZXMgPT09IFwiYXJyYXlcIiAmJiB0ID09PSBcImFycmF5XCIpKVxuICAgICAgICA6IFtdO1xufVxuZnVuY3Rpb24gY29lcmNlRGF0YShpdCwgdHlwZXMsIGNvZXJjZVRvKSB7XG4gICAgY29uc3QgeyBnZW4sIGRhdGEsIG9wdHMgfSA9IGl0O1xuICAgIGNvbnN0IGRhdGFUeXBlID0gZ2VuLmxldChcImRhdGFUeXBlXCIsICgwLCBjb2RlZ2VuXzEuXykgYHR5cGVvZiAke2RhdGF9YCk7XG4gICAgY29uc3QgY29lcmNlZCA9IGdlbi5sZXQoXCJjb2VyY2VkXCIsICgwLCBjb2RlZ2VuXzEuXykgYHVuZGVmaW5lZGApO1xuICAgIGlmIChvcHRzLmNvZXJjZVR5cGVzID09PSBcImFycmF5XCIpIHtcbiAgICAgICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7ZGF0YVR5cGV9ID09ICdvYmplY3QnICYmIEFycmF5LmlzQXJyYXkoJHtkYXRhfSkgJiYgJHtkYXRhfS5sZW5ndGggPT0gMWAsICgpID0+IGdlblxuICAgICAgICAgICAgLmFzc2lnbihkYXRhLCAoMCwgY29kZWdlbl8xLl8pIGAke2RhdGF9WzBdYClcbiAgICAgICAgICAgIC5hc3NpZ24oZGF0YVR5cGUsICgwLCBjb2RlZ2VuXzEuXykgYHR5cGVvZiAke2RhdGF9YClcbiAgICAgICAgICAgIC5pZihjaGVja0RhdGFUeXBlcyh0eXBlcywgZGF0YSwgb3B0cy5zdHJpY3ROdW1iZXJzKSwgKCkgPT4gZ2VuLmFzc2lnbihjb2VyY2VkLCBkYXRhKSkpO1xuICAgIH1cbiAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5fKSBgJHtjb2VyY2VkfSAhPT0gdW5kZWZpbmVkYCk7XG4gICAgZm9yIChjb25zdCB0IG9mIGNvZXJjZVRvKSB7XG4gICAgICAgIGlmIChDT0VSQ0lCTEUuaGFzKHQpIHx8ICh0ID09PSBcImFycmF5XCIgJiYgb3B0cy5jb2VyY2VUeXBlcyA9PT0gXCJhcnJheVwiKSkge1xuICAgICAgICAgICAgY29lcmNlU3BlY2lmaWNUeXBlKHQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdlbi5lbHNlKCk7XG4gICAgcmVwb3J0VHlwZUVycm9yKGl0KTtcbiAgICBnZW4uZW5kSWYoKTtcbiAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5fKSBgJHtjb2VyY2VkfSAhPT0gdW5kZWZpbmVkYCwgKCkgPT4ge1xuICAgICAgICBnZW4uYXNzaWduKGRhdGEsIGNvZXJjZWQpO1xuICAgICAgICBhc3NpZ25QYXJlbnREYXRhKGl0LCBjb2VyY2VkKTtcbiAgICB9KTtcbiAgICBmdW5jdGlvbiBjb2VyY2VTcGVjaWZpY1R5cGUodCkge1xuICAgICAgICBzd2l0Y2ggKHQpIHtcbiAgICAgICAgICAgIGNhc2UgXCJzdHJpbmdcIjpcbiAgICAgICAgICAgICAgICBnZW5cbiAgICAgICAgICAgICAgICAgICAgLmVsc2VJZigoMCwgY29kZWdlbl8xLl8pIGAke2RhdGFUeXBlfSA9PSBcIm51bWJlclwiIHx8ICR7ZGF0YVR5cGV9ID09IFwiYm9vbGVhblwiYClcbiAgICAgICAgICAgICAgICAgICAgLmFzc2lnbihjb2VyY2VkLCAoMCwgY29kZWdlbl8xLl8pIGBcIlwiICsgJHtkYXRhfWApXG4gICAgICAgICAgICAgICAgICAgIC5lbHNlSWYoKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhfSA9PT0gbnVsbGApXG4gICAgICAgICAgICAgICAgICAgIC5hc3NpZ24oY29lcmNlZCwgKDAsIGNvZGVnZW5fMS5fKSBgXCJcImApO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGNhc2UgXCJudW1iZXJcIjpcbiAgICAgICAgICAgICAgICBnZW5cbiAgICAgICAgICAgICAgICAgICAgLmVsc2VJZigoMCwgY29kZWdlbl8xLl8pIGAke2RhdGFUeXBlfSA9PSBcImJvb2xlYW5cIiB8fCAke2RhdGF9ID09PSBudWxsXG4gICAgICAgICAgICAgIHx8ICgke2RhdGFUeXBlfSA9PSBcInN0cmluZ1wiICYmICR7ZGF0YX0gJiYgJHtkYXRhfSA9PSArJHtkYXRhfSlgKVxuICAgICAgICAgICAgICAgICAgICAuYXNzaWduKGNvZXJjZWQsICgwLCBjb2RlZ2VuXzEuXykgYCske2RhdGF9YCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgY2FzZSBcImludGVnZXJcIjpcbiAgICAgICAgICAgICAgICBnZW5cbiAgICAgICAgICAgICAgICAgICAgLmVsc2VJZigoMCwgY29kZWdlbl8xLl8pIGAke2RhdGFUeXBlfSA9PT0gXCJib29sZWFuXCIgfHwgJHtkYXRhfSA9PT0gbnVsbFxuICAgICAgICAgICAgICB8fCAoJHtkYXRhVHlwZX0gPT09IFwic3RyaW5nXCIgJiYgJHtkYXRhfSAmJiAke2RhdGF9ID09ICske2RhdGF9ICYmICEoJHtkYXRhfSAlIDEpKWApXG4gICAgICAgICAgICAgICAgICAgIC5hc3NpZ24oY29lcmNlZCwgKDAsIGNvZGVnZW5fMS5fKSBgKyR7ZGF0YX1gKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBjYXNlIFwiYm9vbGVhblwiOlxuICAgICAgICAgICAgICAgIGdlblxuICAgICAgICAgICAgICAgICAgICAuZWxzZUlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7ZGF0YX0gPT09IFwiZmFsc2VcIiB8fCAke2RhdGF9ID09PSAwIHx8ICR7ZGF0YX0gPT09IG51bGxgKVxuICAgICAgICAgICAgICAgICAgICAuYXNzaWduKGNvZXJjZWQsIGZhbHNlKVxuICAgICAgICAgICAgICAgICAgICAuZWxzZUlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7ZGF0YX0gPT09IFwidHJ1ZVwiIHx8ICR7ZGF0YX0gPT09IDFgKVxuICAgICAgICAgICAgICAgICAgICAuYXNzaWduKGNvZXJjZWQsIHRydWUpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGNhc2UgXCJudWxsXCI6XG4gICAgICAgICAgICAgICAgZ2VuLmVsc2VJZigoMCwgY29kZWdlbl8xLl8pIGAke2RhdGF9ID09PSBcIlwiIHx8ICR7ZGF0YX0gPT09IDAgfHwgJHtkYXRhfSA9PT0gZmFsc2VgKTtcbiAgICAgICAgICAgICAgICBnZW4uYXNzaWduKGNvZXJjZWQsIG51bGwpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGNhc2UgXCJhcnJheVwiOlxuICAgICAgICAgICAgICAgIGdlblxuICAgICAgICAgICAgICAgICAgICAuZWxzZUlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7ZGF0YVR5cGV9ID09PSBcInN0cmluZ1wiIHx8ICR7ZGF0YVR5cGV9ID09PSBcIm51bWJlclwiXG4gICAgICAgICAgICAgIHx8ICR7ZGF0YVR5cGV9ID09PSBcImJvb2xlYW5cIiB8fCAke2RhdGF9ID09PSBudWxsYClcbiAgICAgICAgICAgICAgICAgICAgLmFzc2lnbihjb2VyY2VkLCAoMCwgY29kZWdlbl8xLl8pIGBbJHtkYXRhfV1gKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmZ1bmN0aW9uIGFzc2lnblBhcmVudERhdGEoeyBnZW4sIHBhcmVudERhdGEsIHBhcmVudERhdGFQcm9wZXJ0eSB9LCBleHByKSB7XG4gICAgLy8gVE9ETyB1c2UgZ2VuLnByb3BlcnR5XG4gICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7cGFyZW50RGF0YX0gIT09IHVuZGVmaW5lZGAsICgpID0+IGdlbi5hc3NpZ24oKDAsIGNvZGVnZW5fMS5fKSBgJHtwYXJlbnREYXRhfVske3BhcmVudERhdGFQcm9wZXJ0eX1dYCwgZXhwcikpO1xufVxuZnVuY3Rpb24gY2hlY2tEYXRhVHlwZShkYXRhVHlwZSwgZGF0YSwgc3RyaWN0TnVtcywgY29ycmVjdCA9IERhdGFUeXBlLkNvcnJlY3QpIHtcbiAgICBjb25zdCBFUSA9IGNvcnJlY3QgPT09IERhdGFUeXBlLkNvcnJlY3QgPyBjb2RlZ2VuXzEub3BlcmF0b3JzLkVRIDogY29kZWdlbl8xLm9wZXJhdG9ycy5ORVE7XG4gICAgbGV0IGNvbmQ7XG4gICAgc3dpdGNoIChkYXRhVHlwZSkge1xuICAgICAgICBjYXNlIFwibnVsbFwiOlxuICAgICAgICAgICAgcmV0dXJuICgwLCBjb2RlZ2VuXzEuXykgYCR7ZGF0YX0gJHtFUX0gbnVsbGA7XG4gICAgICAgIGNhc2UgXCJhcnJheVwiOlxuICAgICAgICAgICAgY29uZCA9ICgwLCBjb2RlZ2VuXzEuXykgYEFycmF5LmlzQXJyYXkoJHtkYXRhfSlgO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJvYmplY3RcIjpcbiAgICAgICAgICAgIGNvbmQgPSAoMCwgY29kZWdlbl8xLl8pIGAke2RhdGF9ICYmIHR5cGVvZiAke2RhdGF9ID09IFwib2JqZWN0XCIgJiYgIUFycmF5LmlzQXJyYXkoJHtkYXRhfSlgO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJpbnRlZ2VyXCI6XG4gICAgICAgICAgICBjb25kID0gbnVtQ29uZCgoMCwgY29kZWdlbl8xLl8pIGAhKCR7ZGF0YX0gJSAxKSAmJiAhaXNOYU4oJHtkYXRhfSlgKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgICAgICAgICBjb25kID0gbnVtQ29uZCgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gKDAsIGNvZGVnZW5fMS5fKSBgdHlwZW9mICR7ZGF0YX0gJHtFUX0gJHtkYXRhVHlwZX1gO1xuICAgIH1cbiAgICByZXR1cm4gY29ycmVjdCA9PT0gRGF0YVR5cGUuQ29ycmVjdCA/IGNvbmQgOiAoMCwgY29kZWdlbl8xLm5vdCkoY29uZCk7XG4gICAgZnVuY3Rpb24gbnVtQ29uZChfY29uZCA9IGNvZGVnZW5fMS5uaWwpIHtcbiAgICAgICAgcmV0dXJuICgwLCBjb2RlZ2VuXzEuYW5kKSgoMCwgY29kZWdlbl8xLl8pIGB0eXBlb2YgJHtkYXRhfSA9PSBcIm51bWJlclwiYCwgX2NvbmQsIHN0cmljdE51bXMgPyAoMCwgY29kZWdlbl8xLl8pIGBpc0Zpbml0ZSgke2RhdGF9KWAgOiBjb2RlZ2VuXzEubmlsKTtcbiAgICB9XG59XG5leHBvcnRzLmNoZWNrRGF0YVR5cGUgPSBjaGVja0RhdGFUeXBlO1xuZnVuY3Rpb24gY2hlY2tEYXRhVHlwZXMoZGF0YVR5cGVzLCBkYXRhLCBzdHJpY3ROdW1zLCBjb3JyZWN0KSB7XG4gICAgaWYgKGRhdGFUeXBlcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIGNoZWNrRGF0YVR5cGUoZGF0YVR5cGVzWzBdLCBkYXRhLCBzdHJpY3ROdW1zLCBjb3JyZWN0KTtcbiAgICB9XG4gICAgbGV0IGNvbmQ7XG4gICAgY29uc3QgdHlwZXMgPSAoMCwgdXRpbF8xLnRvSGFzaCkoZGF0YVR5cGVzKTtcbiAgICBpZiAodHlwZXMuYXJyYXkgJiYgdHlwZXMub2JqZWN0KSB7XG4gICAgICAgIGNvbnN0IG5vdE9iaiA9ICgwLCBjb2RlZ2VuXzEuXykgYHR5cGVvZiAke2RhdGF9ICE9IFwib2JqZWN0XCJgO1xuICAgICAgICBjb25kID0gdHlwZXMubnVsbCA/IG5vdE9iaiA6ICgwLCBjb2RlZ2VuXzEuXykgYCEke2RhdGF9IHx8ICR7bm90T2JqfWA7XG4gICAgICAgIGRlbGV0ZSB0eXBlcy5udWxsO1xuICAgICAgICBkZWxldGUgdHlwZXMuYXJyYXk7XG4gICAgICAgIGRlbGV0ZSB0eXBlcy5vYmplY3Q7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBjb25kID0gY29kZWdlbl8xLm5pbDtcbiAgICB9XG4gICAgaWYgKHR5cGVzLm51bWJlcilcbiAgICAgICAgZGVsZXRlIHR5cGVzLmludGVnZXI7XG4gICAgZm9yIChjb25zdCB0IGluIHR5cGVzKVxuICAgICAgICBjb25kID0gKDAsIGNvZGVnZW5fMS5hbmQpKGNvbmQsIGNoZWNrRGF0YVR5cGUodCwgZGF0YSwgc3RyaWN0TnVtcywgY29ycmVjdCkpO1xuICAgIHJldHVybiBjb25kO1xufVxuZXhwb3J0cy5jaGVja0RhdGFUeXBlcyA9IGNoZWNrRGF0YVR5cGVzO1xuY29uc3QgdHlwZUVycm9yID0ge1xuICAgIG1lc3NhZ2U6ICh7IHNjaGVtYSB9KSA9PiBgbXVzdCBiZSAke3NjaGVtYX1gLFxuICAgIHBhcmFtczogKHsgc2NoZW1hLCBzY2hlbWFWYWx1ZSB9KSA9PiB0eXBlb2Ygc2NoZW1hID09IFwic3RyaW5nXCIgPyAoMCwgY29kZWdlbl8xLl8pIGB7dHlwZTogJHtzY2hlbWF9fWAgOiAoMCwgY29kZWdlbl8xLl8pIGB7dHlwZTogJHtzY2hlbWFWYWx1ZX19YCxcbn07XG5mdW5jdGlvbiByZXBvcnRUeXBlRXJyb3IoaXQpIHtcbiAgICBjb25zdCBjeHQgPSBnZXRUeXBlRXJyb3JDb250ZXh0KGl0KTtcbiAgICAoMCwgZXJyb3JzXzEucmVwb3J0RXJyb3IpKGN4dCwgdHlwZUVycm9yKTtcbn1cbmV4cG9ydHMucmVwb3J0VHlwZUVycm9yID0gcmVwb3J0VHlwZUVycm9yO1xuZnVuY3Rpb24gZ2V0VHlwZUVycm9yQ29udGV4dChpdCkge1xuICAgIGNvbnN0IHsgZ2VuLCBkYXRhLCBzY2hlbWEgfSA9IGl0O1xuICAgIGNvbnN0IHNjaGVtYUNvZGUgPSAoMCwgdXRpbF8xLnNjaGVtYVJlZk9yVmFsKShpdCwgc2NoZW1hLCBcInR5cGVcIik7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgZ2VuLFxuICAgICAgICBrZXl3b3JkOiBcInR5cGVcIixcbiAgICAgICAgZGF0YSxcbiAgICAgICAgc2NoZW1hOiBzY2hlbWEudHlwZSxcbiAgICAgICAgc2NoZW1hQ29kZSxcbiAgICAgICAgc2NoZW1hVmFsdWU6IHNjaGVtYUNvZGUsXG4gICAgICAgIHBhcmVudFNjaGVtYTogc2NoZW1hLFxuICAgICAgICBwYXJhbXM6IHt9LFxuICAgICAgICBpdCxcbiAgICB9O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YVR5cGUuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuYXNzaWduRGVmYXVsdHMgPSB2b2lkIDA7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi4vY29kZWdlblwiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi91dGlsXCIpO1xuZnVuY3Rpb24gYXNzaWduRGVmYXVsdHMoaXQsIHR5KSB7XG4gICAgY29uc3QgeyBwcm9wZXJ0aWVzLCBpdGVtcyB9ID0gaXQuc2NoZW1hO1xuICAgIGlmICh0eSA9PT0gXCJvYmplY3RcIiAmJiBwcm9wZXJ0aWVzKSB7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIHByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgIGFzc2lnbkRlZmF1bHQoaXQsIGtleSwgcHJvcGVydGllc1trZXldLmRlZmF1bHQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5ID09PSBcImFycmF5XCIgJiYgQXJyYXkuaXNBcnJheShpdGVtcykpIHtcbiAgICAgICAgaXRlbXMuZm9yRWFjaCgoc2NoLCBpKSA9PiBhc3NpZ25EZWZhdWx0KGl0LCBpLCBzY2guZGVmYXVsdCkpO1xuICAgIH1cbn1cbmV4cG9ydHMuYXNzaWduRGVmYXVsdHMgPSBhc3NpZ25EZWZhdWx0cztcbmZ1bmN0aW9uIGFzc2lnbkRlZmF1bHQoaXQsIHByb3AsIGRlZmF1bHRWYWx1ZSkge1xuICAgIGNvbnN0IHsgZ2VuLCBjb21wb3NpdGVSdWxlLCBkYXRhLCBvcHRzIH0gPSBpdDtcbiAgICBpZiAoZGVmYXVsdFZhbHVlID09PSB1bmRlZmluZWQpXG4gICAgICAgIHJldHVybjtcbiAgICBjb25zdCBjaGlsZERhdGEgPSAoMCwgY29kZWdlbl8xLl8pIGAke2RhdGF9JHsoMCwgY29kZWdlbl8xLmdldFByb3BlcnR5KShwcm9wKX1gO1xuICAgIGlmIChjb21wb3NpdGVSdWxlKSB7XG4gICAgICAgICgwLCB1dGlsXzEuY2hlY2tTdHJpY3RNb2RlKShpdCwgYGRlZmF1bHQgaXMgaWdub3JlZCBmb3I6ICR7Y2hpbGREYXRhfWApO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCBjb25kaXRpb24gPSAoMCwgY29kZWdlbl8xLl8pIGAke2NoaWxkRGF0YX0gPT09IHVuZGVmaW5lZGA7XG4gICAgaWYgKG9wdHMudXNlRGVmYXVsdHMgPT09IFwiZW1wdHlcIikge1xuICAgICAgICBjb25kaXRpb24gPSAoMCwgY29kZWdlbl8xLl8pIGAke2NvbmRpdGlvbn0gfHwgJHtjaGlsZERhdGF9ID09PSBudWxsIHx8ICR7Y2hpbGREYXRhfSA9PT0gXCJcImA7XG4gICAgfVxuICAgIC8vIGAke2NoaWxkRGF0YX0gPT09IHVuZGVmaW5lZGAgK1xuICAgIC8vIChvcHRzLnVzZURlZmF1bHRzID09PSBcImVtcHR5XCIgPyBgIHx8ICR7Y2hpbGREYXRhfSA9PT0gbnVsbCB8fCAke2NoaWxkRGF0YX0gPT09IFwiXCJgIDogXCJcIilcbiAgICBnZW4uaWYoY29uZGl0aW9uLCAoMCwgY29kZWdlbl8xLl8pIGAke2NoaWxkRGF0YX0gPSAkeygwLCBjb2RlZ2VuXzEuc3RyaW5naWZ5KShkZWZhdWx0VmFsdWUpfWApO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGVmYXVsdHMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudmFsaWRhdGVVbmlvbiA9IGV4cG9ydHMudmFsaWRhdGVBcnJheSA9IGV4cG9ydHMudXNlUGF0dGVybiA9IGV4cG9ydHMuY2FsbFZhbGlkYXRlQ29kZSA9IGV4cG9ydHMuc2NoZW1hUHJvcGVydGllcyA9IGV4cG9ydHMuYWxsU2NoZW1hUHJvcGVydGllcyA9IGV4cG9ydHMubm9Qcm9wZXJ0eUluRGF0YSA9IGV4cG9ydHMucHJvcGVydHlJbkRhdGEgPSBleHBvcnRzLmlzT3duUHJvcGVydHkgPSBleHBvcnRzLmhhc1Byb3BGdW5jID0gZXhwb3J0cy5yZXBvcnRNaXNzaW5nUHJvcCA9IGV4cG9ydHMuY2hlY2tNaXNzaW5nUHJvcCA9IGV4cG9ydHMuY2hlY2tSZXBvcnRNaXNzaW5nUHJvcCA9IHZvaWQgMDtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi9jb21waWxlL2NvZGVnZW5cIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi4vY29tcGlsZS91dGlsXCIpO1xuY29uc3QgbmFtZXNfMSA9IHJlcXVpcmUoXCIuLi9jb21waWxlL25hbWVzXCIpO1xuY29uc3QgdXRpbF8yID0gcmVxdWlyZShcIi4uL2NvbXBpbGUvdXRpbFwiKTtcbmZ1bmN0aW9uIGNoZWNrUmVwb3J0TWlzc2luZ1Byb3AoY3h0LCBwcm9wKSB7XG4gICAgY29uc3QgeyBnZW4sIGRhdGEsIGl0IH0gPSBjeHQ7XG4gICAgZ2VuLmlmKG5vUHJvcGVydHlJbkRhdGEoZ2VuLCBkYXRhLCBwcm9wLCBpdC5vcHRzLm93blByb3BlcnRpZXMpLCAoKSA9PiB7XG4gICAgICAgIGN4dC5zZXRQYXJhbXMoeyBtaXNzaW5nUHJvcGVydHk6ICgwLCBjb2RlZ2VuXzEuXykgYCR7cHJvcH1gIH0sIHRydWUpO1xuICAgICAgICBjeHQuZXJyb3IoKTtcbiAgICB9KTtcbn1cbmV4cG9ydHMuY2hlY2tSZXBvcnRNaXNzaW5nUHJvcCA9IGNoZWNrUmVwb3J0TWlzc2luZ1Byb3A7XG5mdW5jdGlvbiBjaGVja01pc3NpbmdQcm9wKHsgZ2VuLCBkYXRhLCBpdDogeyBvcHRzIH0gfSwgcHJvcGVydGllcywgbWlzc2luZykge1xuICAgIHJldHVybiAoMCwgY29kZWdlbl8xLm9yKSguLi5wcm9wZXJ0aWVzLm1hcCgocHJvcCkgPT4gKDAsIGNvZGVnZW5fMS5hbmQpKG5vUHJvcGVydHlJbkRhdGEoZ2VuLCBkYXRhLCBwcm9wLCBvcHRzLm93blByb3BlcnRpZXMpLCAoMCwgY29kZWdlbl8xLl8pIGAke21pc3Npbmd9ID0gJHtwcm9wfWApKSk7XG59XG5leHBvcnRzLmNoZWNrTWlzc2luZ1Byb3AgPSBjaGVja01pc3NpbmdQcm9wO1xuZnVuY3Rpb24gcmVwb3J0TWlzc2luZ1Byb3AoY3h0LCBtaXNzaW5nKSB7XG4gICAgY3h0LnNldFBhcmFtcyh7IG1pc3NpbmdQcm9wZXJ0eTogbWlzc2luZyB9LCB0cnVlKTtcbiAgICBjeHQuZXJyb3IoKTtcbn1cbmV4cG9ydHMucmVwb3J0TWlzc2luZ1Byb3AgPSByZXBvcnRNaXNzaW5nUHJvcDtcbmZ1bmN0aW9uIGhhc1Byb3BGdW5jKGdlbikge1xuICAgIHJldHVybiBnZW4uc2NvcGVWYWx1ZShcImZ1bmNcIiwge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3VuYm91bmQtbWV0aG9kXG4gICAgICAgIHJlZjogT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxcbiAgICAgICAgY29kZTogKDAsIGNvZGVnZW5fMS5fKSBgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eWAsXG4gICAgfSk7XG59XG5leHBvcnRzLmhhc1Byb3BGdW5jID0gaGFzUHJvcEZ1bmM7XG5mdW5jdGlvbiBpc093blByb3BlcnR5KGdlbiwgZGF0YSwgcHJvcGVydHkpIHtcbiAgICByZXR1cm4gKDAsIGNvZGVnZW5fMS5fKSBgJHtoYXNQcm9wRnVuYyhnZW4pfS5jYWxsKCR7ZGF0YX0sICR7cHJvcGVydHl9KWA7XG59XG5leHBvcnRzLmlzT3duUHJvcGVydHkgPSBpc093blByb3BlcnR5O1xuZnVuY3Rpb24gcHJvcGVydHlJbkRhdGEoZ2VuLCBkYXRhLCBwcm9wZXJ0eSwgb3duUHJvcGVydGllcykge1xuICAgIGNvbnN0IGNvbmQgPSAoMCwgY29kZWdlbl8xLl8pIGAke2RhdGF9JHsoMCwgY29kZWdlbl8xLmdldFByb3BlcnR5KShwcm9wZXJ0eSl9ICE9PSB1bmRlZmluZWRgO1xuICAgIHJldHVybiBvd25Qcm9wZXJ0aWVzID8gKDAsIGNvZGVnZW5fMS5fKSBgJHtjb25kfSAmJiAke2lzT3duUHJvcGVydHkoZ2VuLCBkYXRhLCBwcm9wZXJ0eSl9YCA6IGNvbmQ7XG59XG5leHBvcnRzLnByb3BlcnR5SW5EYXRhID0gcHJvcGVydHlJbkRhdGE7XG5mdW5jdGlvbiBub1Byb3BlcnR5SW5EYXRhKGdlbiwgZGF0YSwgcHJvcGVydHksIG93blByb3BlcnRpZXMpIHtcbiAgICBjb25zdCBjb25kID0gKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhfSR7KDAsIGNvZGVnZW5fMS5nZXRQcm9wZXJ0eSkocHJvcGVydHkpfSA9PT0gdW5kZWZpbmVkYDtcbiAgICByZXR1cm4gb3duUHJvcGVydGllcyA/ICgwLCBjb2RlZ2VuXzEub3IpKGNvbmQsICgwLCBjb2RlZ2VuXzEubm90KShpc093blByb3BlcnR5KGdlbiwgZGF0YSwgcHJvcGVydHkpKSkgOiBjb25kO1xufVxuZXhwb3J0cy5ub1Byb3BlcnR5SW5EYXRhID0gbm9Qcm9wZXJ0eUluRGF0YTtcbmZ1bmN0aW9uIGFsbFNjaGVtYVByb3BlcnRpZXMoc2NoZW1hTWFwKSB7XG4gICAgcmV0dXJuIHNjaGVtYU1hcCA/IE9iamVjdC5rZXlzKHNjaGVtYU1hcCkuZmlsdGVyKChwKSA9PiBwICE9PSBcIl9fcHJvdG9fX1wiKSA6IFtdO1xufVxuZXhwb3J0cy5hbGxTY2hlbWFQcm9wZXJ0aWVzID0gYWxsU2NoZW1hUHJvcGVydGllcztcbmZ1bmN0aW9uIHNjaGVtYVByb3BlcnRpZXMoaXQsIHNjaGVtYU1hcCkge1xuICAgIHJldHVybiBhbGxTY2hlbWFQcm9wZXJ0aWVzKHNjaGVtYU1hcCkuZmlsdGVyKChwKSA9PiAhKDAsIHV0aWxfMS5hbHdheXNWYWxpZFNjaGVtYSkoaXQsIHNjaGVtYU1hcFtwXSkpO1xufVxuZXhwb3J0cy5zY2hlbWFQcm9wZXJ0aWVzID0gc2NoZW1hUHJvcGVydGllcztcbmZ1bmN0aW9uIGNhbGxWYWxpZGF0ZUNvZGUoeyBzY2hlbWFDb2RlLCBkYXRhLCBpdDogeyBnZW4sIHRvcFNjaGVtYVJlZiwgc2NoZW1hUGF0aCwgZXJyb3JQYXRoIH0sIGl0IH0sIGZ1bmMsIGNvbnRleHQsIHBhc3NTY2hlbWEpIHtcbiAgICBjb25zdCBkYXRhQW5kU2NoZW1hID0gcGFzc1NjaGVtYSA/ICgwLCBjb2RlZ2VuXzEuXykgYCR7c2NoZW1hQ29kZX0sICR7ZGF0YX0sICR7dG9wU2NoZW1hUmVmfSR7c2NoZW1hUGF0aH1gIDogZGF0YTtcbiAgICBjb25zdCB2YWxDeHQgPSBbXG4gICAgICAgIFtuYW1lc18xLmRlZmF1bHQuaW5zdGFuY2VQYXRoLCAoMCwgY29kZWdlbl8xLnN0ckNvbmNhdCkobmFtZXNfMS5kZWZhdWx0Lmluc3RhbmNlUGF0aCwgZXJyb3JQYXRoKV0sXG4gICAgICAgIFtuYW1lc18xLmRlZmF1bHQucGFyZW50RGF0YSwgaXQucGFyZW50RGF0YV0sXG4gICAgICAgIFtuYW1lc18xLmRlZmF1bHQucGFyZW50RGF0YVByb3BlcnR5LCBpdC5wYXJlbnREYXRhUHJvcGVydHldLFxuICAgICAgICBbbmFtZXNfMS5kZWZhdWx0LnJvb3REYXRhLCBuYW1lc18xLmRlZmF1bHQucm9vdERhdGFdLFxuICAgIF07XG4gICAgaWYgKGl0Lm9wdHMuZHluYW1pY1JlZilcbiAgICAgICAgdmFsQ3h0LnB1c2goW25hbWVzXzEuZGVmYXVsdC5keW5hbWljQW5jaG9ycywgbmFtZXNfMS5kZWZhdWx0LmR5bmFtaWNBbmNob3JzXSk7XG4gICAgY29uc3QgYXJncyA9ICgwLCBjb2RlZ2VuXzEuXykgYCR7ZGF0YUFuZFNjaGVtYX0sICR7Z2VuLm9iamVjdCguLi52YWxDeHQpfWA7XG4gICAgcmV0dXJuIGNvbnRleHQgIT09IGNvZGVnZW5fMS5uaWwgPyAoMCwgY29kZWdlbl8xLl8pIGAke2Z1bmN9LmNhbGwoJHtjb250ZXh0fSwgJHthcmdzfSlgIDogKDAsIGNvZGVnZW5fMS5fKSBgJHtmdW5jfSgke2FyZ3N9KWA7XG59XG5leHBvcnRzLmNhbGxWYWxpZGF0ZUNvZGUgPSBjYWxsVmFsaWRhdGVDb2RlO1xuY29uc3QgbmV3UmVnRXhwID0gKDAsIGNvZGVnZW5fMS5fKSBgbmV3IFJlZ0V4cGA7XG5mdW5jdGlvbiB1c2VQYXR0ZXJuKHsgZ2VuLCBpdDogeyBvcHRzIH0gfSwgcGF0dGVybikge1xuICAgIGNvbnN0IHUgPSBvcHRzLnVuaWNvZGVSZWdFeHAgPyBcInVcIiA6IFwiXCI7XG4gICAgY29uc3QgeyByZWdFeHAgfSA9IG9wdHMuY29kZTtcbiAgICBjb25zdCByeCA9IHJlZ0V4cChwYXR0ZXJuLCB1KTtcbiAgICByZXR1cm4gZ2VuLnNjb3BlVmFsdWUoXCJwYXR0ZXJuXCIsIHtcbiAgICAgICAga2V5OiByeC50b1N0cmluZygpLFxuICAgICAgICByZWY6IHJ4LFxuICAgICAgICBjb2RlOiAoMCwgY29kZWdlbl8xLl8pIGAke3JlZ0V4cC5jb2RlID09PSBcIm5ldyBSZWdFeHBcIiA/IG5ld1JlZ0V4cCA6ICgwLCB1dGlsXzIudXNlRnVuYykoZ2VuLCByZWdFeHApfSgke3BhdHRlcm59LCAke3V9KWAsXG4gICAgfSk7XG59XG5leHBvcnRzLnVzZVBhdHRlcm4gPSB1c2VQYXR0ZXJuO1xuZnVuY3Rpb24gdmFsaWRhdGVBcnJheShjeHQpIHtcbiAgICBjb25zdCB7IGdlbiwgZGF0YSwga2V5d29yZCwgaXQgfSA9IGN4dDtcbiAgICBjb25zdCB2YWxpZCA9IGdlbi5uYW1lKFwidmFsaWRcIik7XG4gICAgaWYgKGl0LmFsbEVycm9ycykge1xuICAgICAgICBjb25zdCB2YWxpZEFyciA9IGdlbi5sZXQoXCJ2YWxpZFwiLCB0cnVlKTtcbiAgICAgICAgdmFsaWRhdGVJdGVtcygoKSA9PiBnZW4uYXNzaWduKHZhbGlkQXJyLCBmYWxzZSkpO1xuICAgICAgICByZXR1cm4gdmFsaWRBcnI7XG4gICAgfVxuICAgIGdlbi52YXIodmFsaWQsIHRydWUpO1xuICAgIHZhbGlkYXRlSXRlbXMoKCkgPT4gZ2VuLmJyZWFrKCkpO1xuICAgIHJldHVybiB2YWxpZDtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZUl0ZW1zKG5vdFZhbGlkKSB7XG4gICAgICAgIGNvbnN0IGxlbiA9IGdlbi5jb25zdChcImxlblwiLCAoMCwgY29kZWdlbl8xLl8pIGAke2RhdGF9Lmxlbmd0aGApO1xuICAgICAgICBnZW4uZm9yUmFuZ2UoXCJpXCIsIDAsIGxlbiwgKGkpID0+IHtcbiAgICAgICAgICAgIGN4dC5zdWJzY2hlbWEoe1xuICAgICAgICAgICAgICAgIGtleXdvcmQsXG4gICAgICAgICAgICAgICAgZGF0YVByb3A6IGksXG4gICAgICAgICAgICAgICAgZGF0YVByb3BUeXBlOiB1dGlsXzEuVHlwZS5OdW0sXG4gICAgICAgICAgICB9LCB2YWxpZCk7XG4gICAgICAgICAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5ub3QpKHZhbGlkKSwgbm90VmFsaWQpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5leHBvcnRzLnZhbGlkYXRlQXJyYXkgPSB2YWxpZGF0ZUFycmF5O1xuZnVuY3Rpb24gdmFsaWRhdGVVbmlvbihjeHQpIHtcbiAgICBjb25zdCB7IGdlbiwgc2NoZW1hLCBrZXl3b3JkLCBpdCB9ID0gY3h0O1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmICghQXJyYXkuaXNBcnJheShzY2hlbWEpKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJhanYgaW1wbGVtZW50YXRpb24gZXJyb3JcIik7XG4gICAgY29uc3QgYWx3YXlzVmFsaWQgPSBzY2hlbWEuc29tZSgoc2NoKSA9PiAoMCwgdXRpbF8xLmFsd2F5c1ZhbGlkU2NoZW1hKShpdCwgc2NoKSk7XG4gICAgaWYgKGFsd2F5c1ZhbGlkICYmICFpdC5vcHRzLnVuZXZhbHVhdGVkKVxuICAgICAgICByZXR1cm47XG4gICAgY29uc3QgdmFsaWQgPSBnZW4ubGV0KFwidmFsaWRcIiwgZmFsc2UpO1xuICAgIGNvbnN0IHNjaFZhbGlkID0gZ2VuLm5hbWUoXCJfdmFsaWRcIik7XG4gICAgZ2VuLmJsb2NrKCgpID0+IHNjaGVtYS5mb3JFYWNoKChfc2NoLCBpKSA9PiB7XG4gICAgICAgIGNvbnN0IHNjaEN4dCA9IGN4dC5zdWJzY2hlbWEoe1xuICAgICAgICAgICAga2V5d29yZCxcbiAgICAgICAgICAgIHNjaGVtYVByb3A6IGksXG4gICAgICAgICAgICBjb21wb3NpdGVSdWxlOiB0cnVlLFxuICAgICAgICB9LCBzY2hWYWxpZCk7XG4gICAgICAgIGdlbi5hc3NpZ24odmFsaWQsICgwLCBjb2RlZ2VuXzEuXykgYCR7dmFsaWR9IHx8ICR7c2NoVmFsaWR9YCk7XG4gICAgICAgIGNvbnN0IG1lcmdlZCA9IGN4dC5tZXJnZVZhbGlkRXZhbHVhdGVkKHNjaEN4dCwgc2NoVmFsaWQpO1xuICAgICAgICAvLyBjYW4gc2hvcnQtY2lyY3VpdCBpZiBgdW5ldmFsdWF0ZWRQcm9wZXJ0aWVzL0l0ZW1zYCBub3Qgc3VwcG9ydGVkIChvcHRzLnVuZXZhbHVhdGVkICE9PSB0cnVlKVxuICAgICAgICAvLyBvciBpZiBhbGwgcHJvcGVydGllcyBhbmQgaXRlbXMgd2VyZSBldmFsdWF0ZWQgKGl0LnByb3BzID09PSB0cnVlICYmIGl0Lml0ZW1zID09PSB0cnVlKVxuICAgICAgICBpZiAoIW1lcmdlZClcbiAgICAgICAgICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLm5vdCkodmFsaWQpKTtcbiAgICB9KSk7XG4gICAgY3h0LnJlc3VsdCh2YWxpZCwgKCkgPT4gY3h0LnJlc2V0KCksICgpID0+IGN4dC5lcnJvcih0cnVlKSk7XG59XG5leHBvcnRzLnZhbGlkYXRlVW5pb24gPSB2YWxpZGF0ZVVuaW9uO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29kZS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy52YWxpZGF0ZUtleXdvcmRVc2FnZSA9IGV4cG9ydHMudmFsaWRTY2hlbWFUeXBlID0gZXhwb3J0cy5mdW5jS2V5d29yZENvZGUgPSBleHBvcnRzLm1hY3JvS2V5d29yZENvZGUgPSB2b2lkIDA7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi4vY29kZWdlblwiKTtcbmNvbnN0IG5hbWVzXzEgPSByZXF1aXJlKFwiLi4vbmFtZXNcIik7XG5jb25zdCBjb2RlXzEgPSByZXF1aXJlKFwiLi4vLi4vdm9jYWJ1bGFyaWVzL2NvZGVcIik7XG5jb25zdCBlcnJvcnNfMSA9IHJlcXVpcmUoXCIuLi9lcnJvcnNcIik7XG5mdW5jdGlvbiBtYWNyb0tleXdvcmRDb2RlKGN4dCwgZGVmKSB7XG4gICAgY29uc3QgeyBnZW4sIGtleXdvcmQsIHNjaGVtYSwgcGFyZW50U2NoZW1hLCBpdCB9ID0gY3h0O1xuICAgIGNvbnN0IG1hY3JvU2NoZW1hID0gZGVmLm1hY3JvLmNhbGwoaXQuc2VsZiwgc2NoZW1hLCBwYXJlbnRTY2hlbWEsIGl0KTtcbiAgICBjb25zdCBzY2hlbWFSZWYgPSB1c2VLZXl3b3JkKGdlbiwga2V5d29yZCwgbWFjcm9TY2hlbWEpO1xuICAgIGlmIChpdC5vcHRzLnZhbGlkYXRlU2NoZW1hICE9PSBmYWxzZSlcbiAgICAgICAgaXQuc2VsZi52YWxpZGF0ZVNjaGVtYShtYWNyb1NjaGVtYSwgdHJ1ZSk7XG4gICAgY29uc3QgdmFsaWQgPSBnZW4ubmFtZShcInZhbGlkXCIpO1xuICAgIGN4dC5zdWJzY2hlbWEoe1xuICAgICAgICBzY2hlbWE6IG1hY3JvU2NoZW1hLFxuICAgICAgICBzY2hlbWFQYXRoOiBjb2RlZ2VuXzEubmlsLFxuICAgICAgICBlcnJTY2hlbWFQYXRoOiBgJHtpdC5lcnJTY2hlbWFQYXRofS8ke2tleXdvcmR9YCxcbiAgICAgICAgdG9wU2NoZW1hUmVmOiBzY2hlbWFSZWYsXG4gICAgICAgIGNvbXBvc2l0ZVJ1bGU6IHRydWUsXG4gICAgfSwgdmFsaWQpO1xuICAgIGN4dC5wYXNzKHZhbGlkLCAoKSA9PiBjeHQuZXJyb3IodHJ1ZSkpO1xufVxuZXhwb3J0cy5tYWNyb0tleXdvcmRDb2RlID0gbWFjcm9LZXl3b3JkQ29kZTtcbmZ1bmN0aW9uIGZ1bmNLZXl3b3JkQ29kZShjeHQsIGRlZikge1xuICAgIHZhciBfYTtcbiAgICBjb25zdCB7IGdlbiwga2V5d29yZCwgc2NoZW1hLCBwYXJlbnRTY2hlbWEsICRkYXRhLCBpdCB9ID0gY3h0O1xuICAgIGNoZWNrQXN5bmNLZXl3b3JkKGl0LCBkZWYpO1xuICAgIGNvbnN0IHZhbGlkYXRlID0gISRkYXRhICYmIGRlZi5jb21waWxlID8gZGVmLmNvbXBpbGUuY2FsbChpdC5zZWxmLCBzY2hlbWEsIHBhcmVudFNjaGVtYSwgaXQpIDogZGVmLnZhbGlkYXRlO1xuICAgIGNvbnN0IHZhbGlkYXRlUmVmID0gdXNlS2V5d29yZChnZW4sIGtleXdvcmQsIHZhbGlkYXRlKTtcbiAgICBjb25zdCB2YWxpZCA9IGdlbi5sZXQoXCJ2YWxpZFwiKTtcbiAgICBjeHQuYmxvY2skZGF0YSh2YWxpZCwgdmFsaWRhdGVLZXl3b3JkKTtcbiAgICBjeHQub2soKF9hID0gZGVmLnZhbGlkKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiB2YWxpZCk7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGVLZXl3b3JkKCkge1xuICAgICAgICBpZiAoZGVmLmVycm9ycyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIGFzc2lnblZhbGlkKCk7XG4gICAgICAgICAgICBpZiAoZGVmLm1vZGlmeWluZylcbiAgICAgICAgICAgICAgICBtb2RpZnlEYXRhKGN4dCk7XG4gICAgICAgICAgICByZXBvcnRFcnJzKCgpID0+IGN4dC5lcnJvcigpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHJ1bGVFcnJzID0gZGVmLmFzeW5jID8gdmFsaWRhdGVBc3luYygpIDogdmFsaWRhdGVTeW5jKCk7XG4gICAgICAgICAgICBpZiAoZGVmLm1vZGlmeWluZylcbiAgICAgICAgICAgICAgICBtb2RpZnlEYXRhKGN4dCk7XG4gICAgICAgICAgICByZXBvcnRFcnJzKCgpID0+IGFkZEVycnMoY3h0LCBydWxlRXJycykpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlQXN5bmMoKSB7XG4gICAgICAgIGNvbnN0IHJ1bGVFcnJzID0gZ2VuLmxldChcInJ1bGVFcnJzXCIsIG51bGwpO1xuICAgICAgICBnZW4udHJ5KCgpID0+IGFzc2lnblZhbGlkKCgwLCBjb2RlZ2VuXzEuXykgYGF3YWl0IGApLCAoZSkgPT4gZ2VuLmFzc2lnbih2YWxpZCwgZmFsc2UpLmlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7ZX0gaW5zdGFuY2VvZiAke2l0LlZhbGlkYXRpb25FcnJvcn1gLCAoKSA9PiBnZW4uYXNzaWduKHJ1bGVFcnJzLCAoMCwgY29kZWdlbl8xLl8pIGAke2V9LmVycm9yc2ApLCAoKSA9PiBnZW4udGhyb3coZSkpKTtcbiAgICAgICAgcmV0dXJuIHJ1bGVFcnJzO1xuICAgIH1cbiAgICBmdW5jdGlvbiB2YWxpZGF0ZVN5bmMoKSB7XG4gICAgICAgIGNvbnN0IHZhbGlkYXRlRXJycyA9ICgwLCBjb2RlZ2VuXzEuXykgYCR7dmFsaWRhdGVSZWZ9LmVycm9yc2A7XG4gICAgICAgIGdlbi5hc3NpZ24odmFsaWRhdGVFcnJzLCBudWxsKTtcbiAgICAgICAgYXNzaWduVmFsaWQoY29kZWdlbl8xLm5pbCk7XG4gICAgICAgIHJldHVybiB2YWxpZGF0ZUVycnM7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGFzc2lnblZhbGlkKF9hd2FpdCA9IGRlZi5hc3luYyA/ICgwLCBjb2RlZ2VuXzEuXykgYGF3YWl0IGAgOiBjb2RlZ2VuXzEubmlsKSB7XG4gICAgICAgIGNvbnN0IHBhc3NDeHQgPSBpdC5vcHRzLnBhc3NDb250ZXh0ID8gbmFtZXNfMS5kZWZhdWx0LnRoaXMgOiBuYW1lc18xLmRlZmF1bHQuc2VsZjtcbiAgICAgICAgY29uc3QgcGFzc1NjaGVtYSA9ICEoKFwiY29tcGlsZVwiIGluIGRlZiAmJiAhJGRhdGEpIHx8IGRlZi5zY2hlbWEgPT09IGZhbHNlKTtcbiAgICAgICAgZ2VuLmFzc2lnbih2YWxpZCwgKDAsIGNvZGVnZW5fMS5fKSBgJHtfYXdhaXR9JHsoMCwgY29kZV8xLmNhbGxWYWxpZGF0ZUNvZGUpKGN4dCwgdmFsaWRhdGVSZWYsIHBhc3NDeHQsIHBhc3NTY2hlbWEpfWAsIGRlZi5tb2RpZnlpbmcpO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZXBvcnRFcnJzKGVycm9ycykge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLm5vdCkoKF9hID0gZGVmLnZhbGlkKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiB2YWxpZCksIGVycm9ycyk7XG4gICAgfVxufVxuZXhwb3J0cy5mdW5jS2V5d29yZENvZGUgPSBmdW5jS2V5d29yZENvZGU7XG5mdW5jdGlvbiBtb2RpZnlEYXRhKGN4dCkge1xuICAgIGNvbnN0IHsgZ2VuLCBkYXRhLCBpdCB9ID0gY3h0O1xuICAgIGdlbi5pZihpdC5wYXJlbnREYXRhLCAoKSA9PiBnZW4uYXNzaWduKGRhdGEsICgwLCBjb2RlZ2VuXzEuXykgYCR7aXQucGFyZW50RGF0YX1bJHtpdC5wYXJlbnREYXRhUHJvcGVydHl9XWApKTtcbn1cbmZ1bmN0aW9uIGFkZEVycnMoY3h0LCBlcnJzKSB7XG4gICAgY29uc3QgeyBnZW4gfSA9IGN4dDtcbiAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5fKSBgQXJyYXkuaXNBcnJheSgke2VycnN9KWAsICgpID0+IHtcbiAgICAgICAgZ2VuXG4gICAgICAgICAgICAuYXNzaWduKG5hbWVzXzEuZGVmYXVsdC52RXJyb3JzLCAoMCwgY29kZWdlbl8xLl8pIGAke25hbWVzXzEuZGVmYXVsdC52RXJyb3JzfSA9PT0gbnVsbCA/ICR7ZXJyc30gOiAke25hbWVzXzEuZGVmYXVsdC52RXJyb3JzfS5jb25jYXQoJHtlcnJzfSlgKVxuICAgICAgICAgICAgLmFzc2lnbihuYW1lc18xLmRlZmF1bHQuZXJyb3JzLCAoMCwgY29kZWdlbl8xLl8pIGAke25hbWVzXzEuZGVmYXVsdC52RXJyb3JzfS5sZW5ndGhgKTtcbiAgICAgICAgKDAsIGVycm9yc18xLmV4dGVuZEVycm9ycykoY3h0KTtcbiAgICB9LCAoKSA9PiBjeHQuZXJyb3IoKSk7XG59XG5mdW5jdGlvbiBjaGVja0FzeW5jS2V5d29yZCh7IHNjaGVtYUVudiB9LCBkZWYpIHtcbiAgICBpZiAoZGVmLmFzeW5jICYmICFzY2hlbWFFbnYuJGFzeW5jKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJhc3luYyBrZXl3b3JkIGluIHN5bmMgc2NoZW1hXCIpO1xufVxuZnVuY3Rpb24gdXNlS2V5d29yZChnZW4sIGtleXdvcmQsIHJlc3VsdCkge1xuICAgIGlmIChyZXN1bHQgPT09IHVuZGVmaW5lZClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBrZXl3b3JkIFwiJHtrZXl3b3JkfVwiIGZhaWxlZCB0byBjb21waWxlYCk7XG4gICAgcmV0dXJuIGdlbi5zY29wZVZhbHVlKFwia2V5d29yZFwiLCB0eXBlb2YgcmVzdWx0ID09IFwiZnVuY3Rpb25cIiA/IHsgcmVmOiByZXN1bHQgfSA6IHsgcmVmOiByZXN1bHQsIGNvZGU6ICgwLCBjb2RlZ2VuXzEuc3RyaW5naWZ5KShyZXN1bHQpIH0pO1xufVxuZnVuY3Rpb24gdmFsaWRTY2hlbWFUeXBlKHNjaGVtYSwgc2NoZW1hVHlwZSwgYWxsb3dVbmRlZmluZWQgPSBmYWxzZSkge1xuICAgIC8vIFRPRE8gYWRkIHRlc3RzXG4gICAgcmV0dXJuICghc2NoZW1hVHlwZS5sZW5ndGggfHxcbiAgICAgICAgc2NoZW1hVHlwZS5zb21lKChzdCkgPT4gc3QgPT09IFwiYXJyYXlcIlxuICAgICAgICAgICAgPyBBcnJheS5pc0FycmF5KHNjaGVtYSlcbiAgICAgICAgICAgIDogc3QgPT09IFwib2JqZWN0XCJcbiAgICAgICAgICAgICAgICA/IHNjaGVtYSAmJiB0eXBlb2Ygc2NoZW1hID09IFwib2JqZWN0XCIgJiYgIUFycmF5LmlzQXJyYXkoc2NoZW1hKVxuICAgICAgICAgICAgICAgIDogdHlwZW9mIHNjaGVtYSA9PSBzdCB8fCAoYWxsb3dVbmRlZmluZWQgJiYgdHlwZW9mIHNjaGVtYSA9PSBcInVuZGVmaW5lZFwiKSkpO1xufVxuZXhwb3J0cy52YWxpZFNjaGVtYVR5cGUgPSB2YWxpZFNjaGVtYVR5cGU7XG5mdW5jdGlvbiB2YWxpZGF0ZUtleXdvcmRVc2FnZSh7IHNjaGVtYSwgb3B0cywgc2VsZiwgZXJyU2NoZW1hUGF0aCB9LCBkZWYsIGtleXdvcmQpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoQXJyYXkuaXNBcnJheShkZWYua2V5d29yZCkgPyAhZGVmLmtleXdvcmQuaW5jbHVkZXMoa2V5d29yZCkgOiBkZWYua2V5d29yZCAhPT0ga2V5d29yZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJhanYgaW1wbGVtZW50YXRpb24gZXJyb3JcIik7XG4gICAgfVxuICAgIGNvbnN0IGRlcHMgPSBkZWYuZGVwZW5kZW5jaWVzO1xuICAgIGlmIChkZXBzID09PSBudWxsIHx8IGRlcHMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGRlcHMuc29tZSgoa3dkKSA9PiAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNjaGVtYSwga3dkKSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBwYXJlbnQgc2NoZW1hIG11c3QgaGF2ZSBkZXBlbmRlbmNpZXMgb2YgJHtrZXl3b3JkfTogJHtkZXBzLmpvaW4oXCIsXCIpfWApO1xuICAgIH1cbiAgICBpZiAoZGVmLnZhbGlkYXRlU2NoZW1hKSB7XG4gICAgICAgIGNvbnN0IHZhbGlkID0gZGVmLnZhbGlkYXRlU2NoZW1hKHNjaGVtYVtrZXl3b3JkXSk7XG4gICAgICAgIGlmICghdmFsaWQpIHtcbiAgICAgICAgICAgIGNvbnN0IG1zZyA9IGBrZXl3b3JkIFwiJHtrZXl3b3JkfVwiIHZhbHVlIGlzIGludmFsaWQgYXQgcGF0aCBcIiR7ZXJyU2NoZW1hUGF0aH1cIjogYCArXG4gICAgICAgICAgICAgICAgc2VsZi5lcnJvcnNUZXh0KGRlZi52YWxpZGF0ZVNjaGVtYS5lcnJvcnMpO1xuICAgICAgICAgICAgaWYgKG9wdHMudmFsaWRhdGVTY2hlbWEgPT09IFwibG9nXCIpXG4gICAgICAgICAgICAgICAgc2VsZi5sb2dnZXIuZXJyb3IobXNnKTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IobXNnKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydHMudmFsaWRhdGVLZXl3b3JkVXNhZ2UgPSB2YWxpZGF0ZUtleXdvcmRVc2FnZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWtleXdvcmQuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZXh0ZW5kU3Vic2NoZW1hTW9kZSA9IGV4cG9ydHMuZXh0ZW5kU3Vic2NoZW1hRGF0YSA9IGV4cG9ydHMuZ2V0U3Vic2NoZW1hID0gdm9pZCAwO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uL2NvZGVnZW5cIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi4vdXRpbFwiKTtcbmZ1bmN0aW9uIGdldFN1YnNjaGVtYShpdCwgeyBrZXl3b3JkLCBzY2hlbWFQcm9wLCBzY2hlbWEsIHNjaGVtYVBhdGgsIGVyclNjaGVtYVBhdGgsIHRvcFNjaGVtYVJlZiB9KSB7XG4gICAgaWYgKGtleXdvcmQgIT09IHVuZGVmaW5lZCAmJiBzY2hlbWEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2JvdGggXCJrZXl3b3JkXCIgYW5kIFwic2NoZW1hXCIgcGFzc2VkLCBvbmx5IG9uZSBhbGxvd2VkJyk7XG4gICAgfVxuICAgIGlmIChrZXl3b3JkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3Qgc2NoID0gaXQuc2NoZW1hW2tleXdvcmRdO1xuICAgICAgICByZXR1cm4gc2NoZW1hUHJvcCA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICBzY2hlbWE6IHNjaCxcbiAgICAgICAgICAgICAgICBzY2hlbWFQYXRoOiAoMCwgY29kZWdlbl8xLl8pIGAke2l0LnNjaGVtYVBhdGh9JHsoMCwgY29kZWdlbl8xLmdldFByb3BlcnR5KShrZXl3b3JkKX1gLFxuICAgICAgICAgICAgICAgIGVyclNjaGVtYVBhdGg6IGAke2l0LmVyclNjaGVtYVBhdGh9LyR7a2V5d29yZH1gLFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiB7XG4gICAgICAgICAgICAgICAgc2NoZW1hOiBzY2hbc2NoZW1hUHJvcF0sXG4gICAgICAgICAgICAgICAgc2NoZW1hUGF0aDogKDAsIGNvZGVnZW5fMS5fKSBgJHtpdC5zY2hlbWFQYXRofSR7KDAsIGNvZGVnZW5fMS5nZXRQcm9wZXJ0eSkoa2V5d29yZCl9JHsoMCwgY29kZWdlbl8xLmdldFByb3BlcnR5KShzY2hlbWFQcm9wKX1gLFxuICAgICAgICAgICAgICAgIGVyclNjaGVtYVBhdGg6IGAke2l0LmVyclNjaGVtYVBhdGh9LyR7a2V5d29yZH0vJHsoMCwgdXRpbF8xLmVzY2FwZUZyYWdtZW50KShzY2hlbWFQcm9wKX1gLFxuICAgICAgICAgICAgfTtcbiAgICB9XG4gICAgaWYgKHNjaGVtYSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmIChzY2hlbWFQYXRoID09PSB1bmRlZmluZWQgfHwgZXJyU2NoZW1hUGF0aCA9PT0gdW5kZWZpbmVkIHx8IHRvcFNjaGVtYVJlZiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1wic2NoZW1hUGF0aFwiLCBcImVyclNjaGVtYVBhdGhcIiBhbmQgXCJ0b3BTY2hlbWFSZWZcIiBhcmUgcmVxdWlyZWQgd2l0aCBcInNjaGVtYVwiJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHNjaGVtYSxcbiAgICAgICAgICAgIHNjaGVtYVBhdGgsXG4gICAgICAgICAgICB0b3BTY2hlbWFSZWYsXG4gICAgICAgICAgICBlcnJTY2hlbWFQYXRoLFxuICAgICAgICB9O1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2VpdGhlciBcImtleXdvcmRcIiBvciBcInNjaGVtYVwiIG11c3QgYmUgcGFzc2VkJyk7XG59XG5leHBvcnRzLmdldFN1YnNjaGVtYSA9IGdldFN1YnNjaGVtYTtcbmZ1bmN0aW9uIGV4dGVuZFN1YnNjaGVtYURhdGEoc3Vic2NoZW1hLCBpdCwgeyBkYXRhUHJvcCwgZGF0YVByb3BUeXBlOiBkcFR5cGUsIGRhdGEsIGRhdGFUeXBlcywgcHJvcGVydHlOYW1lIH0pIHtcbiAgICBpZiAoZGF0YSAhPT0gdW5kZWZpbmVkICYmIGRhdGFQcm9wICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdib3RoIFwiZGF0YVwiIGFuZCBcImRhdGFQcm9wXCIgcGFzc2VkLCBvbmx5IG9uZSBhbGxvd2VkJyk7XG4gICAgfVxuICAgIGNvbnN0IHsgZ2VuIH0gPSBpdDtcbiAgICBpZiAoZGF0YVByb3AgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCB7IGVycm9yUGF0aCwgZGF0YVBhdGhBcnIsIG9wdHMgfSA9IGl0O1xuICAgICAgICBjb25zdCBuZXh0RGF0YSA9IGdlbi5sZXQoXCJkYXRhXCIsICgwLCBjb2RlZ2VuXzEuXykgYCR7aXQuZGF0YX0keygwLCBjb2RlZ2VuXzEuZ2V0UHJvcGVydHkpKGRhdGFQcm9wKX1gLCB0cnVlKTtcbiAgICAgICAgZGF0YUNvbnRleHRQcm9wcyhuZXh0RGF0YSk7XG4gICAgICAgIHN1YnNjaGVtYS5lcnJvclBhdGggPSAoMCwgY29kZWdlbl8xLnN0cikgYCR7ZXJyb3JQYXRofSR7KDAsIHV0aWxfMS5nZXRFcnJvclBhdGgpKGRhdGFQcm9wLCBkcFR5cGUsIG9wdHMuanNQcm9wZXJ0eVN5bnRheCl9YDtcbiAgICAgICAgc3Vic2NoZW1hLnBhcmVudERhdGFQcm9wZXJ0eSA9ICgwLCBjb2RlZ2VuXzEuXykgYCR7ZGF0YVByb3B9YDtcbiAgICAgICAgc3Vic2NoZW1hLmRhdGFQYXRoQXJyID0gWy4uLmRhdGFQYXRoQXJyLCBzdWJzY2hlbWEucGFyZW50RGF0YVByb3BlcnR5XTtcbiAgICB9XG4gICAgaWYgKGRhdGEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCBuZXh0RGF0YSA9IGRhdGEgaW5zdGFuY2VvZiBjb2RlZ2VuXzEuTmFtZSA/IGRhdGEgOiBnZW4ubGV0KFwiZGF0YVwiLCBkYXRhLCB0cnVlKTsgLy8gcmVwbGFjZWFibGUgaWYgdXNlZCBvbmNlP1xuICAgICAgICBkYXRhQ29udGV4dFByb3BzKG5leHREYXRhKTtcbiAgICAgICAgaWYgKHByb3BlcnR5TmFtZSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgc3Vic2NoZW1hLnByb3BlcnR5TmFtZSA9IHByb3BlcnR5TmFtZTtcbiAgICAgICAgLy8gVE9ETyBzb21ldGhpbmcgaXMgcG9zc2libHkgd3JvbmcgaGVyZSB3aXRoIG5vdCBjaGFuZ2luZyBwYXJlbnREYXRhUHJvcGVydHkgYW5kIG5vdCBhcHBlbmRpbmcgZGF0YVBhdGhBcnJcbiAgICB9XG4gICAgaWYgKGRhdGFUeXBlcylcbiAgICAgICAgc3Vic2NoZW1hLmRhdGFUeXBlcyA9IGRhdGFUeXBlcztcbiAgICBmdW5jdGlvbiBkYXRhQ29udGV4dFByb3BzKF9uZXh0RGF0YSkge1xuICAgICAgICBzdWJzY2hlbWEuZGF0YSA9IF9uZXh0RGF0YTtcbiAgICAgICAgc3Vic2NoZW1hLmRhdGFMZXZlbCA9IGl0LmRhdGFMZXZlbCArIDE7XG4gICAgICAgIHN1YnNjaGVtYS5kYXRhVHlwZXMgPSBbXTtcbiAgICAgICAgaXQuZGVmaW5lZFByb3BlcnRpZXMgPSBuZXcgU2V0KCk7XG4gICAgICAgIHN1YnNjaGVtYS5wYXJlbnREYXRhID0gaXQuZGF0YTtcbiAgICAgICAgc3Vic2NoZW1hLmRhdGFOYW1lcyA9IFsuLi5pdC5kYXRhTmFtZXMsIF9uZXh0RGF0YV07XG4gICAgfVxufVxuZXhwb3J0cy5leHRlbmRTdWJzY2hlbWFEYXRhID0gZXh0ZW5kU3Vic2NoZW1hRGF0YTtcbmZ1bmN0aW9uIGV4dGVuZFN1YnNjaGVtYU1vZGUoc3Vic2NoZW1hLCB7IGp0ZERpc2NyaW1pbmF0b3IsIGp0ZE1ldGFkYXRhLCBjb21wb3NpdGVSdWxlLCBjcmVhdGVFcnJvcnMsIGFsbEVycm9ycyB9KSB7XG4gICAgaWYgKGNvbXBvc2l0ZVJ1bGUgIT09IHVuZGVmaW5lZClcbiAgICAgICAgc3Vic2NoZW1hLmNvbXBvc2l0ZVJ1bGUgPSBjb21wb3NpdGVSdWxlO1xuICAgIGlmIChjcmVhdGVFcnJvcnMgIT09IHVuZGVmaW5lZClcbiAgICAgICAgc3Vic2NoZW1hLmNyZWF0ZUVycm9ycyA9IGNyZWF0ZUVycm9ycztcbiAgICBpZiAoYWxsRXJyb3JzICE9PSB1bmRlZmluZWQpXG4gICAgICAgIHN1YnNjaGVtYS5hbGxFcnJvcnMgPSBhbGxFcnJvcnM7XG4gICAgc3Vic2NoZW1hLmp0ZERpc2NyaW1pbmF0b3IgPSBqdGREaXNjcmltaW5hdG9yOyAvLyBub3QgaW5oZXJpdGVkXG4gICAgc3Vic2NoZW1hLmp0ZE1ldGFkYXRhID0ganRkTWV0YWRhdGE7IC8vIG5vdCBpbmhlcml0ZWRcbn1cbmV4cG9ydHMuZXh0ZW5kU3Vic2NoZW1hTW9kZSA9IGV4dGVuZFN1YnNjaGVtYU1vZGU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zdWJzY2hlbWEuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0U2NoZW1hUmVmcyA9IGV4cG9ydHMucmVzb2x2ZVVybCA9IGV4cG9ydHMubm9ybWFsaXplSWQgPSBleHBvcnRzLl9nZXRGdWxsUGF0aCA9IGV4cG9ydHMuZ2V0RnVsbFBhdGggPSBleHBvcnRzLmlubGluZVJlZiA9IHZvaWQgMDtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuL3V0aWxcIik7XG5jb25zdCBlcXVhbCA9IHJlcXVpcmUoXCJmYXN0LWRlZXAtZXF1YWxcIik7XG5jb25zdCB0cmF2ZXJzZSA9IHJlcXVpcmUoXCJqc29uLXNjaGVtYS10cmF2ZXJzZVwiKTtcbi8vIFRPRE8gcmVmYWN0b3IgdG8gdXNlIGtleXdvcmQgZGVmaW5pdGlvbnNcbmNvbnN0IFNJTVBMRV9JTkxJTkVEID0gbmV3IFNldChbXG4gICAgXCJ0eXBlXCIsXG4gICAgXCJmb3JtYXRcIixcbiAgICBcInBhdHRlcm5cIixcbiAgICBcIm1heExlbmd0aFwiLFxuICAgIFwibWluTGVuZ3RoXCIsXG4gICAgXCJtYXhQcm9wZXJ0aWVzXCIsXG4gICAgXCJtaW5Qcm9wZXJ0aWVzXCIsXG4gICAgXCJtYXhJdGVtc1wiLFxuICAgIFwibWluSXRlbXNcIixcbiAgICBcIm1heGltdW1cIixcbiAgICBcIm1pbmltdW1cIixcbiAgICBcInVuaXF1ZUl0ZW1zXCIsXG4gICAgXCJtdWx0aXBsZU9mXCIsXG4gICAgXCJyZXF1aXJlZFwiLFxuICAgIFwiZW51bVwiLFxuICAgIFwiY29uc3RcIixcbl0pO1xuZnVuY3Rpb24gaW5saW5lUmVmKHNjaGVtYSwgbGltaXQgPSB0cnVlKSB7XG4gICAgaWYgKHR5cGVvZiBzY2hlbWEgPT0gXCJib29sZWFuXCIpXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIGlmIChsaW1pdCA9PT0gdHJ1ZSlcbiAgICAgICAgcmV0dXJuICFoYXNSZWYoc2NoZW1hKTtcbiAgICBpZiAoIWxpbWl0KVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIGNvdW50S2V5cyhzY2hlbWEpIDw9IGxpbWl0O1xufVxuZXhwb3J0cy5pbmxpbmVSZWYgPSBpbmxpbmVSZWY7XG5jb25zdCBSRUZfS0VZV09SRFMgPSBuZXcgU2V0KFtcbiAgICBcIiRyZWZcIixcbiAgICBcIiRyZWN1cnNpdmVSZWZcIixcbiAgICBcIiRyZWN1cnNpdmVBbmNob3JcIixcbiAgICBcIiRkeW5hbWljUmVmXCIsXG4gICAgXCIkZHluYW1pY0FuY2hvclwiLFxuXSk7XG5mdW5jdGlvbiBoYXNSZWYoc2NoZW1hKSB7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gc2NoZW1hKSB7XG4gICAgICAgIGlmIChSRUZfS0VZV09SRFMuaGFzKGtleSkpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgY29uc3Qgc2NoID0gc2NoZW1hW2tleV07XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHNjaCkgJiYgc2NoLnNvbWUoaGFzUmVmKSlcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICBpZiAodHlwZW9mIHNjaCA9PSBcIm9iamVjdFwiICYmIGhhc1JlZihzY2gpKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIGNvdW50S2V5cyhzY2hlbWEpIHtcbiAgICBsZXQgY291bnQgPSAwO1xuICAgIGZvciAoY29uc3Qga2V5IGluIHNjaGVtYSkge1xuICAgICAgICBpZiAoa2V5ID09PSBcIiRyZWZcIilcbiAgICAgICAgICAgIHJldHVybiBJbmZpbml0eTtcbiAgICAgICAgY291bnQrKztcbiAgICAgICAgaWYgKFNJTVBMRV9JTkxJTkVELmhhcyhrZXkpKVxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIGlmICh0eXBlb2Ygc2NoZW1hW2tleV0gPT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgKDAsIHV0aWxfMS5lYWNoSXRlbSkoc2NoZW1hW2tleV0sIChzY2gpID0+IChjb3VudCArPSBjb3VudEtleXMoc2NoKSkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb3VudCA9PT0gSW5maW5pdHkpXG4gICAgICAgICAgICByZXR1cm4gSW5maW5pdHk7XG4gICAgfVxuICAgIHJldHVybiBjb3VudDtcbn1cbmZ1bmN0aW9uIGdldEZ1bGxQYXRoKHJlc29sdmVyLCBpZCA9IFwiXCIsIG5vcm1hbGl6ZSkge1xuICAgIGlmIChub3JtYWxpemUgIT09IGZhbHNlKVxuICAgICAgICBpZCA9IG5vcm1hbGl6ZUlkKGlkKTtcbiAgICBjb25zdCBwID0gcmVzb2x2ZXIucGFyc2UoaWQpO1xuICAgIHJldHVybiBfZ2V0RnVsbFBhdGgocmVzb2x2ZXIsIHApO1xufVxuZXhwb3J0cy5nZXRGdWxsUGF0aCA9IGdldEZ1bGxQYXRoO1xuZnVuY3Rpb24gX2dldEZ1bGxQYXRoKHJlc29sdmVyLCBwKSB7XG4gICAgY29uc3Qgc2VyaWFsaXplZCA9IHJlc29sdmVyLnNlcmlhbGl6ZShwKTtcbiAgICByZXR1cm4gc2VyaWFsaXplZC5zcGxpdChcIiNcIilbMF0gKyBcIiNcIjtcbn1cbmV4cG9ydHMuX2dldEZ1bGxQYXRoID0gX2dldEZ1bGxQYXRoO1xuY29uc3QgVFJBSUxJTkdfU0xBU0hfSEFTSCA9IC8jXFwvPyQvO1xuZnVuY3Rpb24gbm9ybWFsaXplSWQoaWQpIHtcbiAgICByZXR1cm4gaWQgPyBpZC5yZXBsYWNlKFRSQUlMSU5HX1NMQVNIX0hBU0gsIFwiXCIpIDogXCJcIjtcbn1cbmV4cG9ydHMubm9ybWFsaXplSWQgPSBub3JtYWxpemVJZDtcbmZ1bmN0aW9uIHJlc29sdmVVcmwocmVzb2x2ZXIsIGJhc2VJZCwgaWQpIHtcbiAgICBpZCA9IG5vcm1hbGl6ZUlkKGlkKTtcbiAgICByZXR1cm4gcmVzb2x2ZXIucmVzb2x2ZShiYXNlSWQsIGlkKTtcbn1cbmV4cG9ydHMucmVzb2x2ZVVybCA9IHJlc29sdmVVcmw7XG5jb25zdCBBTkNIT1IgPSAvXlthLXpfXVstYS16MC05Ll9dKiQvaTtcbmZ1bmN0aW9uIGdldFNjaGVtYVJlZnMoc2NoZW1hLCBiYXNlSWQpIHtcbiAgICBpZiAodHlwZW9mIHNjaGVtYSA9PSBcImJvb2xlYW5cIilcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgIGNvbnN0IHsgc2NoZW1hSWQsIHVyaVJlc29sdmVyIH0gPSB0aGlzLm9wdHM7XG4gICAgY29uc3Qgc2NoSWQgPSBub3JtYWxpemVJZChzY2hlbWFbc2NoZW1hSWRdIHx8IGJhc2VJZCk7XG4gICAgY29uc3QgYmFzZUlkcyA9IHsgXCJcIjogc2NoSWQgfTtcbiAgICBjb25zdCBwYXRoUHJlZml4ID0gZ2V0RnVsbFBhdGgodXJpUmVzb2x2ZXIsIHNjaElkLCBmYWxzZSk7XG4gICAgY29uc3QgbG9jYWxSZWZzID0ge307XG4gICAgY29uc3Qgc2NoZW1hUmVmcyA9IG5ldyBTZXQoKTtcbiAgICB0cmF2ZXJzZShzY2hlbWEsIHsgYWxsS2V5czogdHJ1ZSB9LCAoc2NoLCBqc29uUHRyLCBfLCBwYXJlbnRKc29uUHRyKSA9PiB7XG4gICAgICAgIGlmIChwYXJlbnRKc29uUHRyID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IGZ1bGxQYXRoID0gcGF0aFByZWZpeCArIGpzb25QdHI7XG4gICAgICAgIGxldCBiYXNlSWQgPSBiYXNlSWRzW3BhcmVudEpzb25QdHJdO1xuICAgICAgICBpZiAodHlwZW9mIHNjaFtzY2hlbWFJZF0gPT0gXCJzdHJpbmdcIilcbiAgICAgICAgICAgIGJhc2VJZCA9IGFkZFJlZi5jYWxsKHRoaXMsIHNjaFtzY2hlbWFJZF0pO1xuICAgICAgICBhZGRBbmNob3IuY2FsbCh0aGlzLCBzY2guJGFuY2hvcik7XG4gICAgICAgIGFkZEFuY2hvci5jYWxsKHRoaXMsIHNjaC4kZHluYW1pY0FuY2hvcik7XG4gICAgICAgIGJhc2VJZHNbanNvblB0cl0gPSBiYXNlSWQ7XG4gICAgICAgIGZ1bmN0aW9uIGFkZFJlZihyZWYpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvdW5ib3VuZC1tZXRob2RcbiAgICAgICAgICAgIGNvbnN0IF9yZXNvbHZlID0gdGhpcy5vcHRzLnVyaVJlc29sdmVyLnJlc29sdmU7XG4gICAgICAgICAgICByZWYgPSBub3JtYWxpemVJZChiYXNlSWQgPyBfcmVzb2x2ZShiYXNlSWQsIHJlZikgOiByZWYpO1xuICAgICAgICAgICAgaWYgKHNjaGVtYVJlZnMuaGFzKHJlZikpXG4gICAgICAgICAgICAgICAgdGhyb3cgYW1iaWd1b3MocmVmKTtcbiAgICAgICAgICAgIHNjaGVtYVJlZnMuYWRkKHJlZik7XG4gICAgICAgICAgICBsZXQgc2NoT3JSZWYgPSB0aGlzLnJlZnNbcmVmXTtcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc2NoT3JSZWYgPT0gXCJzdHJpbmdcIilcbiAgICAgICAgICAgICAgICBzY2hPclJlZiA9IHRoaXMucmVmc1tzY2hPclJlZl07XG4gICAgICAgICAgICBpZiAodHlwZW9mIHNjaE9yUmVmID09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgICAgICBjaGVja0FtYmlndW9zUmVmKHNjaCwgc2NoT3JSZWYuc2NoZW1hLCByZWYpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAocmVmICE9PSBub3JtYWxpemVJZChmdWxsUGF0aCkpIHtcbiAgICAgICAgICAgICAgICBpZiAocmVmWzBdID09PSBcIiNcIikge1xuICAgICAgICAgICAgICAgICAgICBjaGVja0FtYmlndW9zUmVmKHNjaCwgbG9jYWxSZWZzW3JlZl0sIHJlZik7XG4gICAgICAgICAgICAgICAgICAgIGxvY2FsUmVmc1tyZWZdID0gc2NoO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWZzW3JlZl0gPSBmdWxsUGF0aDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVmO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGFkZEFuY2hvcihhbmNob3IpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgYW5jaG9yID09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoIUFOQ0hPUi50ZXN0KGFuY2hvcikpXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBhbmNob3IgXCIke2FuY2hvcn1cImApO1xuICAgICAgICAgICAgICAgIGFkZFJlZi5jYWxsKHRoaXMsIGAjJHthbmNob3J9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gbG9jYWxSZWZzO1xuICAgIGZ1bmN0aW9uIGNoZWNrQW1iaWd1b3NSZWYoc2NoMSwgc2NoMiwgcmVmKSB7XG4gICAgICAgIGlmIChzY2gyICE9PSB1bmRlZmluZWQgJiYgIWVxdWFsKHNjaDEsIHNjaDIpKVxuICAgICAgICAgICAgdGhyb3cgYW1iaWd1b3MocmVmKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gYW1iaWd1b3MocmVmKSB7XG4gICAgICAgIHJldHVybiBuZXcgRXJyb3IoYHJlZmVyZW5jZSBcIiR7cmVmfVwiIHJlc29sdmVzIHRvIG1vcmUgdGhhbiBvbmUgc2NoZW1hYCk7XG4gICAgfVxufVxuZXhwb3J0cy5nZXRTY2hlbWFSZWZzID0gZ2V0U2NoZW1hUmVmcztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJlc29sdmUuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0RGF0YSA9IGV4cG9ydHMuS2V5d29yZEN4dCA9IGV4cG9ydHMudmFsaWRhdGVGdW5jdGlvbkNvZGUgPSB2b2lkIDA7XG5jb25zdCBib29sU2NoZW1hXzEgPSByZXF1aXJlKFwiLi9ib29sU2NoZW1hXCIpO1xuY29uc3QgZGF0YVR5cGVfMSA9IHJlcXVpcmUoXCIuL2RhdGFUeXBlXCIpO1xuY29uc3QgYXBwbGljYWJpbGl0eV8xID0gcmVxdWlyZShcIi4vYXBwbGljYWJpbGl0eVwiKTtcbmNvbnN0IGRhdGFUeXBlXzIgPSByZXF1aXJlKFwiLi9kYXRhVHlwZVwiKTtcbmNvbnN0IGRlZmF1bHRzXzEgPSByZXF1aXJlKFwiLi9kZWZhdWx0c1wiKTtcbmNvbnN0IGtleXdvcmRfMSA9IHJlcXVpcmUoXCIuL2tleXdvcmRcIik7XG5jb25zdCBzdWJzY2hlbWFfMSA9IHJlcXVpcmUoXCIuL3N1YnNjaGVtYVwiKTtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi9jb2RlZ2VuXCIpO1xuY29uc3QgbmFtZXNfMSA9IHJlcXVpcmUoXCIuLi9uYW1lc1wiKTtcbmNvbnN0IHJlc29sdmVfMSA9IHJlcXVpcmUoXCIuLi9yZXNvbHZlXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uL3V0aWxcIik7XG5jb25zdCBlcnJvcnNfMSA9IHJlcXVpcmUoXCIuLi9lcnJvcnNcIik7XG4vLyBzY2hlbWEgY29tcGlsYXRpb24gLSBnZW5lcmF0ZXMgdmFsaWRhdGlvbiBmdW5jdGlvbiwgc3Vic2NoZW1hQ29kZSAoYmVsb3cpIGlzIHVzZWQgZm9yIHN1YnNjaGVtYXNcbmZ1bmN0aW9uIHZhbGlkYXRlRnVuY3Rpb25Db2RlKGl0KSB7XG4gICAgaWYgKGlzU2NoZW1hT2JqKGl0KSkge1xuICAgICAgICBjaGVja0tleXdvcmRzKGl0KTtcbiAgICAgICAgaWYgKHNjaGVtYUN4dEhhc1J1bGVzKGl0KSkge1xuICAgICAgICAgICAgdG9wU2NoZW1hT2JqQ29kZShpdCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmFsaWRhdGVGdW5jdGlvbihpdCwgKCkgPT4gKDAsIGJvb2xTY2hlbWFfMS50b3BCb29sT3JFbXB0eVNjaGVtYSkoaXQpKTtcbn1cbmV4cG9ydHMudmFsaWRhdGVGdW5jdGlvbkNvZGUgPSB2YWxpZGF0ZUZ1bmN0aW9uQ29kZTtcbmZ1bmN0aW9uIHZhbGlkYXRlRnVuY3Rpb24oeyBnZW4sIHZhbGlkYXRlTmFtZSwgc2NoZW1hLCBzY2hlbWFFbnYsIG9wdHMgfSwgYm9keSkge1xuICAgIGlmIChvcHRzLmNvZGUuZXM1KSB7XG4gICAgICAgIGdlbi5mdW5jKHZhbGlkYXRlTmFtZSwgKDAsIGNvZGVnZW5fMS5fKSBgJHtuYW1lc18xLmRlZmF1bHQuZGF0YX0sICR7bmFtZXNfMS5kZWZhdWx0LnZhbEN4dH1gLCBzY2hlbWFFbnYuJGFzeW5jLCAoKSA9PiB7XG4gICAgICAgICAgICBnZW4uY29kZSgoMCwgY29kZWdlbl8xLl8pIGBcInVzZSBzdHJpY3RcIjsgJHtmdW5jU291cmNlVXJsKHNjaGVtYSwgb3B0cyl9YCk7XG4gICAgICAgICAgICBkZXN0cnVjdHVyZVZhbEN4dEVTNShnZW4sIG9wdHMpO1xuICAgICAgICAgICAgZ2VuLmNvZGUoYm9keSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgZ2VuLmZ1bmModmFsaWRhdGVOYW1lLCAoMCwgY29kZWdlbl8xLl8pIGAke25hbWVzXzEuZGVmYXVsdC5kYXRhfSwgJHtkZXN0cnVjdHVyZVZhbEN4dChvcHRzKX1gLCBzY2hlbWFFbnYuJGFzeW5jLCAoKSA9PiBnZW4uY29kZShmdW5jU291cmNlVXJsKHNjaGVtYSwgb3B0cykpLmNvZGUoYm9keSkpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGRlc3RydWN0dXJlVmFsQ3h0KG9wdHMpIHtcbiAgICByZXR1cm4gKDAsIGNvZGVnZW5fMS5fKSBgeyR7bmFtZXNfMS5kZWZhdWx0Lmluc3RhbmNlUGF0aH09XCJcIiwgJHtuYW1lc18xLmRlZmF1bHQucGFyZW50RGF0YX0sICR7bmFtZXNfMS5kZWZhdWx0LnBhcmVudERhdGFQcm9wZXJ0eX0sICR7bmFtZXNfMS5kZWZhdWx0LnJvb3REYXRhfT0ke25hbWVzXzEuZGVmYXVsdC5kYXRhfSR7b3B0cy5keW5hbWljUmVmID8gKDAsIGNvZGVnZW5fMS5fKSBgLCAke25hbWVzXzEuZGVmYXVsdC5keW5hbWljQW5jaG9yc309e31gIDogY29kZWdlbl8xLm5pbH19PXt9YDtcbn1cbmZ1bmN0aW9uIGRlc3RydWN0dXJlVmFsQ3h0RVM1KGdlbiwgb3B0cykge1xuICAgIGdlbi5pZihuYW1lc18xLmRlZmF1bHQudmFsQ3h0LCAoKSA9PiB7XG4gICAgICAgIGdlbi52YXIobmFtZXNfMS5kZWZhdWx0Lmluc3RhbmNlUGF0aCwgKDAsIGNvZGVnZW5fMS5fKSBgJHtuYW1lc18xLmRlZmF1bHQudmFsQ3h0fS4ke25hbWVzXzEuZGVmYXVsdC5pbnN0YW5jZVBhdGh9YCk7XG4gICAgICAgIGdlbi52YXIobmFtZXNfMS5kZWZhdWx0LnBhcmVudERhdGEsICgwLCBjb2RlZ2VuXzEuXykgYCR7bmFtZXNfMS5kZWZhdWx0LnZhbEN4dH0uJHtuYW1lc18xLmRlZmF1bHQucGFyZW50RGF0YX1gKTtcbiAgICAgICAgZ2VuLnZhcihuYW1lc18xLmRlZmF1bHQucGFyZW50RGF0YVByb3BlcnR5LCAoMCwgY29kZWdlbl8xLl8pIGAke25hbWVzXzEuZGVmYXVsdC52YWxDeHR9LiR7bmFtZXNfMS5kZWZhdWx0LnBhcmVudERhdGFQcm9wZXJ0eX1gKTtcbiAgICAgICAgZ2VuLnZhcihuYW1lc18xLmRlZmF1bHQucm9vdERhdGEsICgwLCBjb2RlZ2VuXzEuXykgYCR7bmFtZXNfMS5kZWZhdWx0LnZhbEN4dH0uJHtuYW1lc18xLmRlZmF1bHQucm9vdERhdGF9YCk7XG4gICAgICAgIGlmIChvcHRzLmR5bmFtaWNSZWYpXG4gICAgICAgICAgICBnZW4udmFyKG5hbWVzXzEuZGVmYXVsdC5keW5hbWljQW5jaG9ycywgKDAsIGNvZGVnZW5fMS5fKSBgJHtuYW1lc18xLmRlZmF1bHQudmFsQ3h0fS4ke25hbWVzXzEuZGVmYXVsdC5keW5hbWljQW5jaG9yc31gKTtcbiAgICB9LCAoKSA9PiB7XG4gICAgICAgIGdlbi52YXIobmFtZXNfMS5kZWZhdWx0Lmluc3RhbmNlUGF0aCwgKDAsIGNvZGVnZW5fMS5fKSBgXCJcImApO1xuICAgICAgICBnZW4udmFyKG5hbWVzXzEuZGVmYXVsdC5wYXJlbnREYXRhLCAoMCwgY29kZWdlbl8xLl8pIGB1bmRlZmluZWRgKTtcbiAgICAgICAgZ2VuLnZhcihuYW1lc18xLmRlZmF1bHQucGFyZW50RGF0YVByb3BlcnR5LCAoMCwgY29kZWdlbl8xLl8pIGB1bmRlZmluZWRgKTtcbiAgICAgICAgZ2VuLnZhcihuYW1lc18xLmRlZmF1bHQucm9vdERhdGEsIG5hbWVzXzEuZGVmYXVsdC5kYXRhKTtcbiAgICAgICAgaWYgKG9wdHMuZHluYW1pY1JlZilcbiAgICAgICAgICAgIGdlbi52YXIobmFtZXNfMS5kZWZhdWx0LmR5bmFtaWNBbmNob3JzLCAoMCwgY29kZWdlbl8xLl8pIGB7fWApO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gdG9wU2NoZW1hT2JqQ29kZShpdCkge1xuICAgIGNvbnN0IHsgc2NoZW1hLCBvcHRzLCBnZW4gfSA9IGl0O1xuICAgIHZhbGlkYXRlRnVuY3Rpb24oaXQsICgpID0+IHtcbiAgICAgICAgaWYgKG9wdHMuJGNvbW1lbnQgJiYgc2NoZW1hLiRjb21tZW50KVxuICAgICAgICAgICAgY29tbWVudEtleXdvcmQoaXQpO1xuICAgICAgICBjaGVja05vRGVmYXVsdChpdCk7XG4gICAgICAgIGdlbi5sZXQobmFtZXNfMS5kZWZhdWx0LnZFcnJvcnMsIG51bGwpO1xuICAgICAgICBnZW4ubGV0KG5hbWVzXzEuZGVmYXVsdC5lcnJvcnMsIDApO1xuICAgICAgICBpZiAob3B0cy51bmV2YWx1YXRlZClcbiAgICAgICAgICAgIHJlc2V0RXZhbHVhdGVkKGl0KTtcbiAgICAgICAgdHlwZUFuZEtleXdvcmRzKGl0KTtcbiAgICAgICAgcmV0dXJuUmVzdWx0cyhpdCk7XG4gICAgfSk7XG4gICAgcmV0dXJuO1xufVxuZnVuY3Rpb24gcmVzZXRFdmFsdWF0ZWQoaXQpIHtcbiAgICAvLyBUT0RPIG1heWJlIHNvbWUgaG9vayB0byBleGVjdXRlIGl0IGluIHRoZSBlbmQgdG8gY2hlY2sgd2hldGhlciBwcm9wcy9pdGVtcyBhcmUgTmFtZSwgYXMgaW4gYXNzaWduRXZhbHVhdGVkXG4gICAgY29uc3QgeyBnZW4sIHZhbGlkYXRlTmFtZSB9ID0gaXQ7XG4gICAgaXQuZXZhbHVhdGVkID0gZ2VuLmNvbnN0KFwiZXZhbHVhdGVkXCIsICgwLCBjb2RlZ2VuXzEuXykgYCR7dmFsaWRhdGVOYW1lfS5ldmFsdWF0ZWRgKTtcbiAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5fKSBgJHtpdC5ldmFsdWF0ZWR9LmR5bmFtaWNQcm9wc2AsICgpID0+IGdlbi5hc3NpZ24oKDAsIGNvZGVnZW5fMS5fKSBgJHtpdC5ldmFsdWF0ZWR9LnByb3BzYCwgKDAsIGNvZGVnZW5fMS5fKSBgdW5kZWZpbmVkYCkpO1xuICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGAke2l0LmV2YWx1YXRlZH0uZHluYW1pY0l0ZW1zYCwgKCkgPT4gZ2VuLmFzc2lnbigoMCwgY29kZWdlbl8xLl8pIGAke2l0LmV2YWx1YXRlZH0uaXRlbXNgLCAoMCwgY29kZWdlbl8xLl8pIGB1bmRlZmluZWRgKSk7XG59XG5mdW5jdGlvbiBmdW5jU291cmNlVXJsKHNjaGVtYSwgb3B0cykge1xuICAgIGNvbnN0IHNjaElkID0gdHlwZW9mIHNjaGVtYSA9PSBcIm9iamVjdFwiICYmIHNjaGVtYVtvcHRzLnNjaGVtYUlkXTtcbiAgICByZXR1cm4gc2NoSWQgJiYgKG9wdHMuY29kZS5zb3VyY2UgfHwgb3B0cy5jb2RlLnByb2Nlc3MpID8gKDAsIGNvZGVnZW5fMS5fKSBgLyojIHNvdXJjZVVSTD0ke3NjaElkfSAqL2AgOiBjb2RlZ2VuXzEubmlsO1xufVxuLy8gc2NoZW1hIGNvbXBpbGF0aW9uIC0gdGhpcyBmdW5jdGlvbiBpcyB1c2VkIHJlY3Vyc2l2ZWx5IHRvIGdlbmVyYXRlIGNvZGUgZm9yIHN1Yi1zY2hlbWFzXG5mdW5jdGlvbiBzdWJzY2hlbWFDb2RlKGl0LCB2YWxpZCkge1xuICAgIGlmIChpc1NjaGVtYU9iaihpdCkpIHtcbiAgICAgICAgY2hlY2tLZXl3b3JkcyhpdCk7XG4gICAgICAgIGlmIChzY2hlbWFDeHRIYXNSdWxlcyhpdCkpIHtcbiAgICAgICAgICAgIHN1YlNjaGVtYU9iakNvZGUoaXQsIHZhbGlkKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgIH1cbiAgICAoMCwgYm9vbFNjaGVtYV8xLmJvb2xPckVtcHR5U2NoZW1hKShpdCwgdmFsaWQpO1xufVxuZnVuY3Rpb24gc2NoZW1hQ3h0SGFzUnVsZXMoeyBzY2hlbWEsIHNlbGYgfSkge1xuICAgIGlmICh0eXBlb2Ygc2NoZW1hID09IFwiYm9vbGVhblwiKVxuICAgICAgICByZXR1cm4gIXNjaGVtYTtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBzY2hlbWEpXG4gICAgICAgIGlmIChzZWxmLlJVTEVTLmFsbFtrZXldKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gaXNTY2hlbWFPYmooaXQpIHtcbiAgICByZXR1cm4gdHlwZW9mIGl0LnNjaGVtYSAhPSBcImJvb2xlYW5cIjtcbn1cbmZ1bmN0aW9uIHN1YlNjaGVtYU9iakNvZGUoaXQsIHZhbGlkKSB7XG4gICAgY29uc3QgeyBzY2hlbWEsIGdlbiwgb3B0cyB9ID0gaXQ7XG4gICAgaWYgKG9wdHMuJGNvbW1lbnQgJiYgc2NoZW1hLiRjb21tZW50KVxuICAgICAgICBjb21tZW50S2V5d29yZChpdCk7XG4gICAgdXBkYXRlQ29udGV4dChpdCk7XG4gICAgY2hlY2tBc3luY1NjaGVtYShpdCk7XG4gICAgY29uc3QgZXJyc0NvdW50ID0gZ2VuLmNvbnN0KFwiX2VycnNcIiwgbmFtZXNfMS5kZWZhdWx0LmVycm9ycyk7XG4gICAgdHlwZUFuZEtleXdvcmRzKGl0LCBlcnJzQ291bnQpO1xuICAgIC8vIFRPRE8gdmFyXG4gICAgZ2VuLnZhcih2YWxpZCwgKDAsIGNvZGVnZW5fMS5fKSBgJHtlcnJzQ291bnR9ID09PSAke25hbWVzXzEuZGVmYXVsdC5lcnJvcnN9YCk7XG59XG5mdW5jdGlvbiBjaGVja0tleXdvcmRzKGl0KSB7XG4gICAgKDAsIHV0aWxfMS5jaGVja1Vua25vd25SdWxlcykoaXQpO1xuICAgIGNoZWNrUmVmc0FuZEtleXdvcmRzKGl0KTtcbn1cbmZ1bmN0aW9uIHR5cGVBbmRLZXl3b3JkcyhpdCwgZXJyc0NvdW50KSB7XG4gICAgaWYgKGl0Lm9wdHMuanRkKVxuICAgICAgICByZXR1cm4gc2NoZW1hS2V5d29yZHMoaXQsIFtdLCBmYWxzZSwgZXJyc0NvdW50KTtcbiAgICBjb25zdCB0eXBlcyA9ICgwLCBkYXRhVHlwZV8xLmdldFNjaGVtYVR5cGVzKShpdC5zY2hlbWEpO1xuICAgIGNvbnN0IGNoZWNrZWRUeXBlcyA9ICgwLCBkYXRhVHlwZV8xLmNvZXJjZUFuZENoZWNrRGF0YVR5cGUpKGl0LCB0eXBlcyk7XG4gICAgc2NoZW1hS2V5d29yZHMoaXQsIHR5cGVzLCAhY2hlY2tlZFR5cGVzLCBlcnJzQ291bnQpO1xufVxuZnVuY3Rpb24gY2hlY2tSZWZzQW5kS2V5d29yZHMoaXQpIHtcbiAgICBjb25zdCB7IHNjaGVtYSwgZXJyU2NoZW1hUGF0aCwgb3B0cywgc2VsZiB9ID0gaXQ7XG4gICAgaWYgKHNjaGVtYS4kcmVmICYmIG9wdHMuaWdub3JlS2V5d29yZHNXaXRoUmVmICYmICgwLCB1dGlsXzEuc2NoZW1hSGFzUnVsZXNCdXRSZWYpKHNjaGVtYSwgc2VsZi5SVUxFUykpIHtcbiAgICAgICAgc2VsZi5sb2dnZXIud2FybihgJHJlZjoga2V5d29yZHMgaWdub3JlZCBpbiBzY2hlbWEgYXQgcGF0aCBcIiR7ZXJyU2NoZW1hUGF0aH1cImApO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGNoZWNrTm9EZWZhdWx0KGl0KSB7XG4gICAgY29uc3QgeyBzY2hlbWEsIG9wdHMgfSA9IGl0O1xuICAgIGlmIChzY2hlbWEuZGVmYXVsdCAhPT0gdW5kZWZpbmVkICYmIG9wdHMudXNlRGVmYXVsdHMgJiYgb3B0cy5zdHJpY3RTY2hlbWEpIHtcbiAgICAgICAgKDAsIHV0aWxfMS5jaGVja1N0cmljdE1vZGUpKGl0LCBcImRlZmF1bHQgaXMgaWdub3JlZCBpbiB0aGUgc2NoZW1hIHJvb3RcIik7XG4gICAgfVxufVxuZnVuY3Rpb24gdXBkYXRlQ29udGV4dChpdCkge1xuICAgIGNvbnN0IHNjaElkID0gaXQuc2NoZW1hW2l0Lm9wdHMuc2NoZW1hSWRdO1xuICAgIGlmIChzY2hJZClcbiAgICAgICAgaXQuYmFzZUlkID0gKDAsIHJlc29sdmVfMS5yZXNvbHZlVXJsKShpdC5vcHRzLnVyaVJlc29sdmVyLCBpdC5iYXNlSWQsIHNjaElkKTtcbn1cbmZ1bmN0aW9uIGNoZWNrQXN5bmNTY2hlbWEoaXQpIHtcbiAgICBpZiAoaXQuc2NoZW1hLiRhc3luYyAmJiAhaXQuc2NoZW1hRW52LiRhc3luYylcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYXN5bmMgc2NoZW1hIGluIHN5bmMgc2NoZW1hXCIpO1xufVxuZnVuY3Rpb24gY29tbWVudEtleXdvcmQoeyBnZW4sIHNjaGVtYUVudiwgc2NoZW1hLCBlcnJTY2hlbWFQYXRoLCBvcHRzIH0pIHtcbiAgICBjb25zdCBtc2cgPSBzY2hlbWEuJGNvbW1lbnQ7XG4gICAgaWYgKG9wdHMuJGNvbW1lbnQgPT09IHRydWUpIHtcbiAgICAgICAgZ2VuLmNvZGUoKDAsIGNvZGVnZW5fMS5fKSBgJHtuYW1lc18xLmRlZmF1bHQuc2VsZn0ubG9nZ2VyLmxvZygke21zZ30pYCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGVvZiBvcHRzLiRjb21tZW50ID09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBjb25zdCBzY2hlbWFQYXRoID0gKDAsIGNvZGVnZW5fMS5zdHIpIGAke2VyclNjaGVtYVBhdGh9LyRjb21tZW50YDtcbiAgICAgICAgY29uc3Qgcm9vdE5hbWUgPSBnZW4uc2NvcGVWYWx1ZShcInJvb3RcIiwgeyByZWY6IHNjaGVtYUVudi5yb290IH0pO1xuICAgICAgICBnZW4uY29kZSgoMCwgY29kZWdlbl8xLl8pIGAke25hbWVzXzEuZGVmYXVsdC5zZWxmfS5vcHRzLiRjb21tZW50KCR7bXNnfSwgJHtzY2hlbWFQYXRofSwgJHtyb290TmFtZX0uc2NoZW1hKWApO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHJldHVyblJlc3VsdHMoaXQpIHtcbiAgICBjb25zdCB7IGdlbiwgc2NoZW1hRW52LCB2YWxpZGF0ZU5hbWUsIFZhbGlkYXRpb25FcnJvciwgb3B0cyB9ID0gaXQ7XG4gICAgaWYgKHNjaGVtYUVudi4kYXN5bmMpIHtcbiAgICAgICAgLy8gVE9ETyBhc3NpZ24gdW5ldmFsdWF0ZWRcbiAgICAgICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7bmFtZXNfMS5kZWZhdWx0LmVycm9yc30gPT09IDBgLCAoKSA9PiBnZW4ucmV0dXJuKG5hbWVzXzEuZGVmYXVsdC5kYXRhKSwgKCkgPT4gZ2VuLnRocm93KCgwLCBjb2RlZ2VuXzEuXykgYG5ldyAke1ZhbGlkYXRpb25FcnJvcn0oJHtuYW1lc18xLmRlZmF1bHQudkVycm9yc30pYCkpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgZ2VuLmFzc2lnbigoMCwgY29kZWdlbl8xLl8pIGAke3ZhbGlkYXRlTmFtZX0uZXJyb3JzYCwgbmFtZXNfMS5kZWZhdWx0LnZFcnJvcnMpO1xuICAgICAgICBpZiAob3B0cy51bmV2YWx1YXRlZClcbiAgICAgICAgICAgIGFzc2lnbkV2YWx1YXRlZChpdCk7XG4gICAgICAgIGdlbi5yZXR1cm4oKDAsIGNvZGVnZW5fMS5fKSBgJHtuYW1lc18xLmRlZmF1bHQuZXJyb3JzfSA9PT0gMGApO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGFzc2lnbkV2YWx1YXRlZCh7IGdlbiwgZXZhbHVhdGVkLCBwcm9wcywgaXRlbXMgfSkge1xuICAgIGlmIChwcm9wcyBpbnN0YW5jZW9mIGNvZGVnZW5fMS5OYW1lKVxuICAgICAgICBnZW4uYXNzaWduKCgwLCBjb2RlZ2VuXzEuXykgYCR7ZXZhbHVhdGVkfS5wcm9wc2AsIHByb3BzKTtcbiAgICBpZiAoaXRlbXMgaW5zdGFuY2VvZiBjb2RlZ2VuXzEuTmFtZSlcbiAgICAgICAgZ2VuLmFzc2lnbigoMCwgY29kZWdlbl8xLl8pIGAke2V2YWx1YXRlZH0uaXRlbXNgLCBpdGVtcyk7XG59XG5mdW5jdGlvbiBzY2hlbWFLZXl3b3JkcyhpdCwgdHlwZXMsIHR5cGVFcnJvcnMsIGVycnNDb3VudCkge1xuICAgIGNvbnN0IHsgZ2VuLCBzY2hlbWEsIGRhdGEsIGFsbEVycm9ycywgb3B0cywgc2VsZiB9ID0gaXQ7XG4gICAgY29uc3QgeyBSVUxFUyB9ID0gc2VsZjtcbiAgICBpZiAoc2NoZW1hLiRyZWYgJiYgKG9wdHMuaWdub3JlS2V5d29yZHNXaXRoUmVmIHx8ICEoMCwgdXRpbF8xLnNjaGVtYUhhc1J1bGVzQnV0UmVmKShzY2hlbWEsIFJVTEVTKSkpIHtcbiAgICAgICAgZ2VuLmJsb2NrKCgpID0+IGtleXdvcmRDb2RlKGl0LCBcIiRyZWZcIiwgUlVMRVMuYWxsLiRyZWYuZGVmaW5pdGlvbikpOyAvLyBUT0RPIHR5cGVjYXN0XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCFvcHRzLmp0ZClcbiAgICAgICAgY2hlY2tTdHJpY3RUeXBlcyhpdCwgdHlwZXMpO1xuICAgIGdlbi5ibG9jaygoKSA9PiB7XG4gICAgICAgIGZvciAoY29uc3QgZ3JvdXAgb2YgUlVMRVMucnVsZXMpXG4gICAgICAgICAgICBncm91cEtleXdvcmRzKGdyb3VwKTtcbiAgICAgICAgZ3JvdXBLZXl3b3JkcyhSVUxFUy5wb3N0KTtcbiAgICB9KTtcbiAgICBmdW5jdGlvbiBncm91cEtleXdvcmRzKGdyb3VwKSB7XG4gICAgICAgIGlmICghKDAsIGFwcGxpY2FiaWxpdHlfMS5zaG91bGRVc2VHcm91cCkoc2NoZW1hLCBncm91cCkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGlmIChncm91cC50eXBlKSB7XG4gICAgICAgICAgICBnZW4uaWYoKDAsIGRhdGFUeXBlXzIuY2hlY2tEYXRhVHlwZSkoZ3JvdXAudHlwZSwgZGF0YSwgb3B0cy5zdHJpY3ROdW1iZXJzKSk7XG4gICAgICAgICAgICBpdGVyYXRlS2V5d29yZHMoaXQsIGdyb3VwKTtcbiAgICAgICAgICAgIGlmICh0eXBlcy5sZW5ndGggPT09IDEgJiYgdHlwZXNbMF0gPT09IGdyb3VwLnR5cGUgJiYgdHlwZUVycm9ycykge1xuICAgICAgICAgICAgICAgIGdlbi5lbHNlKCk7XG4gICAgICAgICAgICAgICAgKDAsIGRhdGFUeXBlXzIucmVwb3J0VHlwZUVycm9yKShpdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBnZW4uZW5kSWYoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGl0ZXJhdGVLZXl3b3JkcyhpdCwgZ3JvdXApO1xuICAgICAgICB9XG4gICAgICAgIC8vIFRPRE8gbWFrZSBpdCBcIm9rXCIgY2FsbD9cbiAgICAgICAgaWYgKCFhbGxFcnJvcnMpXG4gICAgICAgICAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5fKSBgJHtuYW1lc18xLmRlZmF1bHQuZXJyb3JzfSA9PT0gJHtlcnJzQ291bnQgfHwgMH1gKTtcbiAgICB9XG59XG5mdW5jdGlvbiBpdGVyYXRlS2V5d29yZHMoaXQsIGdyb3VwKSB7XG4gICAgY29uc3QgeyBnZW4sIHNjaGVtYSwgb3B0czogeyB1c2VEZWZhdWx0cyB9LCB9ID0gaXQ7XG4gICAgaWYgKHVzZURlZmF1bHRzKVxuICAgICAgICAoMCwgZGVmYXVsdHNfMS5hc3NpZ25EZWZhdWx0cykoaXQsIGdyb3VwLnR5cGUpO1xuICAgIGdlbi5ibG9jaygoKSA9PiB7XG4gICAgICAgIGZvciAoY29uc3QgcnVsZSBvZiBncm91cC5ydWxlcykge1xuICAgICAgICAgICAgaWYgKCgwLCBhcHBsaWNhYmlsaXR5XzEuc2hvdWxkVXNlUnVsZSkoc2NoZW1hLCBydWxlKSkge1xuICAgICAgICAgICAgICAgIGtleXdvcmRDb2RlKGl0LCBydWxlLmtleXdvcmQsIHJ1bGUuZGVmaW5pdGlvbiwgZ3JvdXAudHlwZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGNoZWNrU3RyaWN0VHlwZXMoaXQsIHR5cGVzKSB7XG4gICAgaWYgKGl0LnNjaGVtYUVudi5tZXRhIHx8ICFpdC5vcHRzLnN0cmljdFR5cGVzKVxuICAgICAgICByZXR1cm47XG4gICAgY2hlY2tDb250ZXh0VHlwZXMoaXQsIHR5cGVzKTtcbiAgICBpZiAoIWl0Lm9wdHMuYWxsb3dVbmlvblR5cGVzKVxuICAgICAgICBjaGVja011bHRpcGxlVHlwZXMoaXQsIHR5cGVzKTtcbiAgICBjaGVja0tleXdvcmRUeXBlcyhpdCwgaXQuZGF0YVR5cGVzKTtcbn1cbmZ1bmN0aW9uIGNoZWNrQ29udGV4dFR5cGVzKGl0LCB0eXBlcykge1xuICAgIGlmICghdHlwZXMubGVuZ3RoKVxuICAgICAgICByZXR1cm47XG4gICAgaWYgKCFpdC5kYXRhVHlwZXMubGVuZ3RoKSB7XG4gICAgICAgIGl0LmRhdGFUeXBlcyA9IHR5cGVzO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHR5cGVzLmZvckVhY2goKHQpID0+IHtcbiAgICAgICAgaWYgKCFpbmNsdWRlc1R5cGUoaXQuZGF0YVR5cGVzLCB0KSkge1xuICAgICAgICAgICAgc3RyaWN0VHlwZXNFcnJvcihpdCwgYHR5cGUgXCIke3R9XCIgbm90IGFsbG93ZWQgYnkgY29udGV4dCBcIiR7aXQuZGF0YVR5cGVzLmpvaW4oXCIsXCIpfVwiYCk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBuYXJyb3dTY2hlbWFUeXBlcyhpdCwgdHlwZXMpO1xufVxuZnVuY3Rpb24gY2hlY2tNdWx0aXBsZVR5cGVzKGl0LCB0cykge1xuICAgIGlmICh0cy5sZW5ndGggPiAxICYmICEodHMubGVuZ3RoID09PSAyICYmIHRzLmluY2x1ZGVzKFwibnVsbFwiKSkpIHtcbiAgICAgICAgc3RyaWN0VHlwZXNFcnJvcihpdCwgXCJ1c2UgYWxsb3dVbmlvblR5cGVzIHRvIGFsbG93IHVuaW9uIHR5cGUga2V5d29yZFwiKTtcbiAgICB9XG59XG5mdW5jdGlvbiBjaGVja0tleXdvcmRUeXBlcyhpdCwgdHMpIHtcbiAgICBjb25zdCBydWxlcyA9IGl0LnNlbGYuUlVMRVMuYWxsO1xuICAgIGZvciAoY29uc3Qga2V5d29yZCBpbiBydWxlcykge1xuICAgICAgICBjb25zdCBydWxlID0gcnVsZXNba2V5d29yZF07XG4gICAgICAgIGlmICh0eXBlb2YgcnVsZSA9PSBcIm9iamVjdFwiICYmICgwLCBhcHBsaWNhYmlsaXR5XzEuc2hvdWxkVXNlUnVsZSkoaXQuc2NoZW1hLCBydWxlKSkge1xuICAgICAgICAgICAgY29uc3QgeyB0eXBlIH0gPSBydWxlLmRlZmluaXRpb247XG4gICAgICAgICAgICBpZiAodHlwZS5sZW5ndGggJiYgIXR5cGUuc29tZSgodCkgPT4gaGFzQXBwbGljYWJsZVR5cGUodHMsIHQpKSkge1xuICAgICAgICAgICAgICAgIHN0cmljdFR5cGVzRXJyb3IoaXQsIGBtaXNzaW5nIHR5cGUgXCIke3R5cGUuam9pbihcIixcIil9XCIgZm9yIGtleXdvcmQgXCIke2tleXdvcmR9XCJgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbmZ1bmN0aW9uIGhhc0FwcGxpY2FibGVUeXBlKHNjaFRzLCBrd2RUKSB7XG4gICAgcmV0dXJuIHNjaFRzLmluY2x1ZGVzKGt3ZFQpIHx8IChrd2RUID09PSBcIm51bWJlclwiICYmIHNjaFRzLmluY2x1ZGVzKFwiaW50ZWdlclwiKSk7XG59XG5mdW5jdGlvbiBpbmNsdWRlc1R5cGUodHMsIHQpIHtcbiAgICByZXR1cm4gdHMuaW5jbHVkZXModCkgfHwgKHQgPT09IFwiaW50ZWdlclwiICYmIHRzLmluY2x1ZGVzKFwibnVtYmVyXCIpKTtcbn1cbmZ1bmN0aW9uIG5hcnJvd1NjaGVtYVR5cGVzKGl0LCB3aXRoVHlwZXMpIHtcbiAgICBjb25zdCB0cyA9IFtdO1xuICAgIGZvciAoY29uc3QgdCBvZiBpdC5kYXRhVHlwZXMpIHtcbiAgICAgICAgaWYgKGluY2x1ZGVzVHlwZSh3aXRoVHlwZXMsIHQpKVxuICAgICAgICAgICAgdHMucHVzaCh0KTtcbiAgICAgICAgZWxzZSBpZiAod2l0aFR5cGVzLmluY2x1ZGVzKFwiaW50ZWdlclwiKSAmJiB0ID09PSBcIm51bWJlclwiKVxuICAgICAgICAgICAgdHMucHVzaChcImludGVnZXJcIik7XG4gICAgfVxuICAgIGl0LmRhdGFUeXBlcyA9IHRzO1xufVxuZnVuY3Rpb24gc3RyaWN0VHlwZXNFcnJvcihpdCwgbXNnKSB7XG4gICAgY29uc3Qgc2NoZW1hUGF0aCA9IGl0LnNjaGVtYUVudi5iYXNlSWQgKyBpdC5lcnJTY2hlbWFQYXRoO1xuICAgIG1zZyArPSBgIGF0IFwiJHtzY2hlbWFQYXRofVwiIChzdHJpY3RUeXBlcylgO1xuICAgICgwLCB1dGlsXzEuY2hlY2tTdHJpY3RNb2RlKShpdCwgbXNnLCBpdC5vcHRzLnN0cmljdFR5cGVzKTtcbn1cbmNsYXNzIEtleXdvcmRDeHQge1xuICAgIGNvbnN0cnVjdG9yKGl0LCBkZWYsIGtleXdvcmQpIHtcbiAgICAgICAgKDAsIGtleXdvcmRfMS52YWxpZGF0ZUtleXdvcmRVc2FnZSkoaXQsIGRlZiwga2V5d29yZCk7XG4gICAgICAgIHRoaXMuZ2VuID0gaXQuZ2VuO1xuICAgICAgICB0aGlzLmFsbEVycm9ycyA9IGl0LmFsbEVycm9ycztcbiAgICAgICAgdGhpcy5rZXl3b3JkID0ga2V5d29yZDtcbiAgICAgICAgdGhpcy5kYXRhID0gaXQuZGF0YTtcbiAgICAgICAgdGhpcy5zY2hlbWEgPSBpdC5zY2hlbWFba2V5d29yZF07XG4gICAgICAgIHRoaXMuJGRhdGEgPSBkZWYuJGRhdGEgJiYgaXQub3B0cy4kZGF0YSAmJiB0aGlzLnNjaGVtYSAmJiB0aGlzLnNjaGVtYS4kZGF0YTtcbiAgICAgICAgdGhpcy5zY2hlbWFWYWx1ZSA9ICgwLCB1dGlsXzEuc2NoZW1hUmVmT3JWYWwpKGl0LCB0aGlzLnNjaGVtYSwga2V5d29yZCwgdGhpcy4kZGF0YSk7XG4gICAgICAgIHRoaXMuc2NoZW1hVHlwZSA9IGRlZi5zY2hlbWFUeXBlO1xuICAgICAgICB0aGlzLnBhcmVudFNjaGVtYSA9IGl0LnNjaGVtYTtcbiAgICAgICAgdGhpcy5wYXJhbXMgPSB7fTtcbiAgICAgICAgdGhpcy5pdCA9IGl0O1xuICAgICAgICB0aGlzLmRlZiA9IGRlZjtcbiAgICAgICAgaWYgKHRoaXMuJGRhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuc2NoZW1hQ29kZSA9IGl0Lmdlbi5jb25zdChcInZTY2hlbWFcIiwgZ2V0RGF0YSh0aGlzLiRkYXRhLCBpdCkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zY2hlbWFDb2RlID0gdGhpcy5zY2hlbWFWYWx1ZTtcbiAgICAgICAgICAgIGlmICghKDAsIGtleXdvcmRfMS52YWxpZFNjaGVtYVR5cGUpKHRoaXMuc2NoZW1hLCBkZWYuc2NoZW1hVHlwZSwgZGVmLmFsbG93VW5kZWZpbmVkKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtrZXl3b3JkfSB2YWx1ZSBtdXN0IGJlICR7SlNPTi5zdHJpbmdpZnkoZGVmLnNjaGVtYVR5cGUpfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChcImNvZGVcIiBpbiBkZWYgPyBkZWYudHJhY2tFcnJvcnMgOiBkZWYuZXJyb3JzICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgdGhpcy5lcnJzQ291bnQgPSBpdC5nZW4uY29uc3QoXCJfZXJyc1wiLCBuYW1lc18xLmRlZmF1bHQuZXJyb3JzKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXN1bHQoY29uZGl0aW9uLCBzdWNjZXNzQWN0aW9uLCBmYWlsQWN0aW9uKSB7XG4gICAgICAgIHRoaXMuZmFpbFJlc3VsdCgoMCwgY29kZWdlbl8xLm5vdCkoY29uZGl0aW9uKSwgc3VjY2Vzc0FjdGlvbiwgZmFpbEFjdGlvbik7XG4gICAgfVxuICAgIGZhaWxSZXN1bHQoY29uZGl0aW9uLCBzdWNjZXNzQWN0aW9uLCBmYWlsQWN0aW9uKSB7XG4gICAgICAgIHRoaXMuZ2VuLmlmKGNvbmRpdGlvbik7XG4gICAgICAgIGlmIChmYWlsQWN0aW9uKVxuICAgICAgICAgICAgZmFpbEFjdGlvbigpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICB0aGlzLmVycm9yKCk7XG4gICAgICAgIGlmIChzdWNjZXNzQWN0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmdlbi5lbHNlKCk7XG4gICAgICAgICAgICBzdWNjZXNzQWN0aW9uKCk7XG4gICAgICAgICAgICBpZiAodGhpcy5hbGxFcnJvcnMpXG4gICAgICAgICAgICAgICAgdGhpcy5nZW4uZW5kSWYoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmFsbEVycm9ycylcbiAgICAgICAgICAgICAgICB0aGlzLmdlbi5lbmRJZigpO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHRoaXMuZ2VuLmVsc2UoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBwYXNzKGNvbmRpdGlvbiwgZmFpbEFjdGlvbikge1xuICAgICAgICB0aGlzLmZhaWxSZXN1bHQoKDAsIGNvZGVnZW5fMS5ub3QpKGNvbmRpdGlvbiksIHVuZGVmaW5lZCwgZmFpbEFjdGlvbik7XG4gICAgfVxuICAgIGZhaWwoY29uZGl0aW9uKSB7XG4gICAgICAgIGlmIChjb25kaXRpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5lcnJvcigpO1xuICAgICAgICAgICAgaWYgKCF0aGlzLmFsbEVycm9ycylcbiAgICAgICAgICAgICAgICB0aGlzLmdlbi5pZihmYWxzZSk7IC8vIHRoaXMgYnJhbmNoIHdpbGwgYmUgcmVtb3ZlZCBieSBnZW4ub3B0aW1pemVcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmdlbi5pZihjb25kaXRpb24pO1xuICAgICAgICB0aGlzLmVycm9yKCk7XG4gICAgICAgIGlmICh0aGlzLmFsbEVycm9ycylcbiAgICAgICAgICAgIHRoaXMuZ2VuLmVuZElmKCk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHRoaXMuZ2VuLmVsc2UoKTtcbiAgICB9XG4gICAgZmFpbCRkYXRhKGNvbmRpdGlvbikge1xuICAgICAgICBpZiAoIXRoaXMuJGRhdGEpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5mYWlsKGNvbmRpdGlvbik7XG4gICAgICAgIGNvbnN0IHsgc2NoZW1hQ29kZSB9ID0gdGhpcztcbiAgICAgICAgdGhpcy5mYWlsKCgwLCBjb2RlZ2VuXzEuXykgYCR7c2NoZW1hQ29kZX0gIT09IHVuZGVmaW5lZCAmJiAoJHsoMCwgY29kZWdlbl8xLm9yKSh0aGlzLmludmFsaWQkZGF0YSgpLCBjb25kaXRpb24pfSlgKTtcbiAgICB9XG4gICAgZXJyb3IoYXBwZW5kLCBlcnJvclBhcmFtcywgZXJyb3JQYXRocykge1xuICAgICAgICBpZiAoZXJyb3JQYXJhbXMpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UGFyYW1zKGVycm9yUGFyYW1zKTtcbiAgICAgICAgICAgIHRoaXMuX2Vycm9yKGFwcGVuZCwgZXJyb3JQYXRocyk7XG4gICAgICAgICAgICB0aGlzLnNldFBhcmFtcyh7fSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fZXJyb3IoYXBwZW5kLCBlcnJvclBhdGhzKTtcbiAgICB9XG4gICAgX2Vycm9yKGFwcGVuZCwgZXJyb3JQYXRocykge1xuICAgICAgICA7XG4gICAgICAgIChhcHBlbmQgPyBlcnJvcnNfMS5yZXBvcnRFeHRyYUVycm9yIDogZXJyb3JzXzEucmVwb3J0RXJyb3IpKHRoaXMsIHRoaXMuZGVmLmVycm9yLCBlcnJvclBhdGhzKTtcbiAgICB9XG4gICAgJGRhdGFFcnJvcigpIHtcbiAgICAgICAgKDAsIGVycm9yc18xLnJlcG9ydEVycm9yKSh0aGlzLCB0aGlzLmRlZi4kZGF0YUVycm9yIHx8IGVycm9yc18xLmtleXdvcmQkRGF0YUVycm9yKTtcbiAgICB9XG4gICAgcmVzZXQoKSB7XG4gICAgICAgIGlmICh0aGlzLmVycnNDb3VudCA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdhZGQgXCJ0cmFja0Vycm9yc1wiIHRvIGtleXdvcmQgZGVmaW5pdGlvbicpO1xuICAgICAgICAoMCwgZXJyb3JzXzEucmVzZXRFcnJvcnNDb3VudCkodGhpcy5nZW4sIHRoaXMuZXJyc0NvdW50KTtcbiAgICB9XG4gICAgb2soY29uZCkge1xuICAgICAgICBpZiAoIXRoaXMuYWxsRXJyb3JzKVxuICAgICAgICAgICAgdGhpcy5nZW4uaWYoY29uZCk7XG4gICAgfVxuICAgIHNldFBhcmFtcyhvYmosIGFzc2lnbikge1xuICAgICAgICBpZiAoYXNzaWduKVxuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLnBhcmFtcywgb2JqKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhpcy5wYXJhbXMgPSBvYmo7XG4gICAgfVxuICAgIGJsb2NrJGRhdGEodmFsaWQsIGNvZGVCbG9jaywgJGRhdGFWYWxpZCA9IGNvZGVnZW5fMS5uaWwpIHtcbiAgICAgICAgdGhpcy5nZW4uYmxvY2soKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jaGVjayRkYXRhKHZhbGlkLCAkZGF0YVZhbGlkKTtcbiAgICAgICAgICAgIGNvZGVCbG9jaygpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgY2hlY2skZGF0YSh2YWxpZCA9IGNvZGVnZW5fMS5uaWwsICRkYXRhVmFsaWQgPSBjb2RlZ2VuXzEubmlsKSB7XG4gICAgICAgIGlmICghdGhpcy4kZGF0YSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3QgeyBnZW4sIHNjaGVtYUNvZGUsIHNjaGVtYVR5cGUsIGRlZiB9ID0gdGhpcztcbiAgICAgICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEub3IpKCgwLCBjb2RlZ2VuXzEuXykgYCR7c2NoZW1hQ29kZX0gPT09IHVuZGVmaW5lZGAsICRkYXRhVmFsaWQpKTtcbiAgICAgICAgaWYgKHZhbGlkICE9PSBjb2RlZ2VuXzEubmlsKVxuICAgICAgICAgICAgZ2VuLmFzc2lnbih2YWxpZCwgdHJ1ZSk7XG4gICAgICAgIGlmIChzY2hlbWFUeXBlLmxlbmd0aCB8fCBkZWYudmFsaWRhdGVTY2hlbWEpIHtcbiAgICAgICAgICAgIGdlbi5lbHNlSWYodGhpcy5pbnZhbGlkJGRhdGEoKSk7XG4gICAgICAgICAgICB0aGlzLiRkYXRhRXJyb3IoKTtcbiAgICAgICAgICAgIGlmICh2YWxpZCAhPT0gY29kZWdlbl8xLm5pbClcbiAgICAgICAgICAgICAgICBnZW4uYXNzaWduKHZhbGlkLCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgZ2VuLmVsc2UoKTtcbiAgICB9XG4gICAgaW52YWxpZCRkYXRhKCkge1xuICAgICAgICBjb25zdCB7IGdlbiwgc2NoZW1hQ29kZSwgc2NoZW1hVHlwZSwgZGVmLCBpdCB9ID0gdGhpcztcbiAgICAgICAgcmV0dXJuICgwLCBjb2RlZ2VuXzEub3IpKHdyb25nJERhdGFUeXBlKCksIGludmFsaWQkRGF0YVNjaGVtYSgpKTtcbiAgICAgICAgZnVuY3Rpb24gd3JvbmckRGF0YVR5cGUoKSB7XG4gICAgICAgICAgICBpZiAoc2NoZW1hVHlwZS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgICAgICAgICBpZiAoIShzY2hlbWFDb2RlIGluc3RhbmNlb2YgY29kZWdlbl8xLk5hbWUpKVxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJhanYgaW1wbGVtZW50YXRpb24gZXJyb3JcIik7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3QgPSBBcnJheS5pc0FycmF5KHNjaGVtYVR5cGUpID8gc2NoZW1hVHlwZSA6IFtzY2hlbWFUeXBlXTtcbiAgICAgICAgICAgICAgICByZXR1cm4gKDAsIGNvZGVnZW5fMS5fKSBgJHsoMCwgZGF0YVR5cGVfMi5jaGVja0RhdGFUeXBlcykoc3QsIHNjaGVtYUNvZGUsIGl0Lm9wdHMuc3RyaWN0TnVtYmVycywgZGF0YVR5cGVfMi5EYXRhVHlwZS5Xcm9uZyl9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBjb2RlZ2VuXzEubmlsO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGludmFsaWQkRGF0YVNjaGVtYSgpIHtcbiAgICAgICAgICAgIGlmIChkZWYudmFsaWRhdGVTY2hlbWEpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWxpZGF0ZVNjaGVtYVJlZiA9IGdlbi5zY29wZVZhbHVlKFwidmFsaWRhdGUkZGF0YVwiLCB7IHJlZjogZGVmLnZhbGlkYXRlU2NoZW1hIH0pOyAvLyBUT0RPIHZhbHVlLmNvZGUgZm9yIHN0YW5kYWxvbmVcbiAgICAgICAgICAgICAgICByZXR1cm4gKDAsIGNvZGVnZW5fMS5fKSBgISR7dmFsaWRhdGVTY2hlbWFSZWZ9KCR7c2NoZW1hQ29kZX0pYDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBjb2RlZ2VuXzEubmlsO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN1YnNjaGVtYShhcHBsLCB2YWxpZCkge1xuICAgICAgICBjb25zdCBzdWJzY2hlbWEgPSAoMCwgc3Vic2NoZW1hXzEuZ2V0U3Vic2NoZW1hKSh0aGlzLml0LCBhcHBsKTtcbiAgICAgICAgKDAsIHN1YnNjaGVtYV8xLmV4dGVuZFN1YnNjaGVtYURhdGEpKHN1YnNjaGVtYSwgdGhpcy5pdCwgYXBwbCk7XG4gICAgICAgICgwLCBzdWJzY2hlbWFfMS5leHRlbmRTdWJzY2hlbWFNb2RlKShzdWJzY2hlbWEsIGFwcGwpO1xuICAgICAgICBjb25zdCBuZXh0Q29udGV4dCA9IHsgLi4udGhpcy5pdCwgLi4uc3Vic2NoZW1hLCBpdGVtczogdW5kZWZpbmVkLCBwcm9wczogdW5kZWZpbmVkIH07XG4gICAgICAgIHN1YnNjaGVtYUNvZGUobmV4dENvbnRleHQsIHZhbGlkKTtcbiAgICAgICAgcmV0dXJuIG5leHRDb250ZXh0O1xuICAgIH1cbiAgICBtZXJnZUV2YWx1YXRlZChzY2hlbWFDeHQsIHRvTmFtZSkge1xuICAgICAgICBjb25zdCB7IGl0LCBnZW4gfSA9IHRoaXM7XG4gICAgICAgIGlmICghaXQub3B0cy51bmV2YWx1YXRlZClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKGl0LnByb3BzICE9PSB0cnVlICYmIHNjaGVtYUN4dC5wcm9wcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBpdC5wcm9wcyA9IHV0aWxfMS5tZXJnZUV2YWx1YXRlZC5wcm9wcyhnZW4sIHNjaGVtYUN4dC5wcm9wcywgaXQucHJvcHMsIHRvTmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGl0Lml0ZW1zICE9PSB0cnVlICYmIHNjaGVtYUN4dC5pdGVtcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBpdC5pdGVtcyA9IHV0aWxfMS5tZXJnZUV2YWx1YXRlZC5pdGVtcyhnZW4sIHNjaGVtYUN4dC5pdGVtcywgaXQuaXRlbXMsIHRvTmFtZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgbWVyZ2VWYWxpZEV2YWx1YXRlZChzY2hlbWFDeHQsIHZhbGlkKSB7XG4gICAgICAgIGNvbnN0IHsgaXQsIGdlbiB9ID0gdGhpcztcbiAgICAgICAgaWYgKGl0Lm9wdHMudW5ldmFsdWF0ZWQgJiYgKGl0LnByb3BzICE9PSB0cnVlIHx8IGl0Lml0ZW1zICE9PSB0cnVlKSkge1xuICAgICAgICAgICAgZ2VuLmlmKHZhbGlkLCAoKSA9PiB0aGlzLm1lcmdlRXZhbHVhdGVkKHNjaGVtYUN4dCwgY29kZWdlbl8xLk5hbWUpKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0cy5LZXl3b3JkQ3h0ID0gS2V5d29yZEN4dDtcbmZ1bmN0aW9uIGtleXdvcmRDb2RlKGl0LCBrZXl3b3JkLCBkZWYsIHJ1bGVUeXBlKSB7XG4gICAgY29uc3QgY3h0ID0gbmV3IEtleXdvcmRDeHQoaXQsIGRlZiwga2V5d29yZCk7XG4gICAgaWYgKFwiY29kZVwiIGluIGRlZikge1xuICAgICAgICBkZWYuY29kZShjeHQsIHJ1bGVUeXBlKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoY3h0LiRkYXRhICYmIGRlZi52YWxpZGF0ZSkge1xuICAgICAgICAoMCwga2V5d29yZF8xLmZ1bmNLZXl3b3JkQ29kZSkoY3h0LCBkZWYpO1xuICAgIH1cbiAgICBlbHNlIGlmIChcIm1hY3JvXCIgaW4gZGVmKSB7XG4gICAgICAgICgwLCBrZXl3b3JkXzEubWFjcm9LZXl3b3JkQ29kZSkoY3h0LCBkZWYpO1xuICAgIH1cbiAgICBlbHNlIGlmIChkZWYuY29tcGlsZSB8fCBkZWYudmFsaWRhdGUpIHtcbiAgICAgICAgKDAsIGtleXdvcmRfMS5mdW5jS2V5d29yZENvZGUpKGN4dCwgZGVmKTtcbiAgICB9XG59XG5jb25zdCBKU09OX1BPSU5URVIgPSAvXlxcLyg/Oltefl18fjB8fjEpKiQvO1xuY29uc3QgUkVMQVRJVkVfSlNPTl9QT0lOVEVSID0gL14oWzAtOV0rKSgjfFxcLyg/Oltefl18fjB8fjEpKik/JC87XG5mdW5jdGlvbiBnZXREYXRhKCRkYXRhLCB7IGRhdGFMZXZlbCwgZGF0YU5hbWVzLCBkYXRhUGF0aEFyciB9KSB7XG4gICAgbGV0IGpzb25Qb2ludGVyO1xuICAgIGxldCBkYXRhO1xuICAgIGlmICgkZGF0YSA9PT0gXCJcIilcbiAgICAgICAgcmV0dXJuIG5hbWVzXzEuZGVmYXVsdC5yb290RGF0YTtcbiAgICBpZiAoJGRhdGFbMF0gPT09IFwiL1wiKSB7XG4gICAgICAgIGlmICghSlNPTl9QT0lOVEVSLnRlc3QoJGRhdGEpKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIEpTT04tcG9pbnRlcjogJHskZGF0YX1gKTtcbiAgICAgICAganNvblBvaW50ZXIgPSAkZGF0YTtcbiAgICAgICAgZGF0YSA9IG5hbWVzXzEuZGVmYXVsdC5yb290RGF0YTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGNvbnN0IG1hdGNoZXMgPSBSRUxBVElWRV9KU09OX1BPSU5URVIuZXhlYygkZGF0YSk7XG4gICAgICAgIGlmICghbWF0Y2hlcylcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBKU09OLXBvaW50ZXI6ICR7JGRhdGF9YCk7XG4gICAgICAgIGNvbnN0IHVwID0gK21hdGNoZXNbMV07XG4gICAgICAgIGpzb25Qb2ludGVyID0gbWF0Y2hlc1syXTtcbiAgICAgICAgaWYgKGpzb25Qb2ludGVyID09PSBcIiNcIikge1xuICAgICAgICAgICAgaWYgKHVwID49IGRhdGFMZXZlbClcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyb3JNc2coXCJwcm9wZXJ0eS9pbmRleFwiLCB1cCkpO1xuICAgICAgICAgICAgcmV0dXJuIGRhdGFQYXRoQXJyW2RhdGFMZXZlbCAtIHVwXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodXAgPiBkYXRhTGV2ZWwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyb3JNc2coXCJkYXRhXCIsIHVwKSk7XG4gICAgICAgIGRhdGEgPSBkYXRhTmFtZXNbZGF0YUxldmVsIC0gdXBdO1xuICAgICAgICBpZiAoIWpzb25Qb2ludGVyKVxuICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuICAgIGxldCBleHByID0gZGF0YTtcbiAgICBjb25zdCBzZWdtZW50cyA9IGpzb25Qb2ludGVyLnNwbGl0KFwiL1wiKTtcbiAgICBmb3IgKGNvbnN0IHNlZ21lbnQgb2Ygc2VnbWVudHMpIHtcbiAgICAgICAgaWYgKHNlZ21lbnQpIHtcbiAgICAgICAgICAgIGRhdGEgPSAoMCwgY29kZWdlbl8xLl8pIGAke2RhdGF9JHsoMCwgY29kZWdlbl8xLmdldFByb3BlcnR5KSgoMCwgdXRpbF8xLnVuZXNjYXBlSnNvblBvaW50ZXIpKHNlZ21lbnQpKX1gO1xuICAgICAgICAgICAgZXhwciA9ICgwLCBjb2RlZ2VuXzEuXykgYCR7ZXhwcn0gJiYgJHtkYXRhfWA7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGV4cHI7XG4gICAgZnVuY3Rpb24gZXJyb3JNc2cocG9pbnRlclR5cGUsIHVwKSB7XG4gICAgICAgIHJldHVybiBgQ2Fubm90IGFjY2VzcyAke3BvaW50ZXJUeXBlfSAke3VwfSBsZXZlbHMgdXAsIGN1cnJlbnQgbGV2ZWwgaXMgJHtkYXRhTGV2ZWx9YDtcbiAgICB9XG59XG5leHBvcnRzLmdldERhdGEgPSBnZXREYXRhO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNsYXNzIFZhbGlkYXRpb25FcnJvciBleHRlbmRzIEVycm9yIHtcbiAgICBjb25zdHJ1Y3RvcihlcnJvcnMpIHtcbiAgICAgICAgc3VwZXIoXCJ2YWxpZGF0aW9uIGZhaWxlZFwiKTtcbiAgICAgICAgdGhpcy5lcnJvcnMgPSBlcnJvcnM7XG4gICAgICAgIHRoaXMuYWp2ID0gdGhpcy52YWxpZGF0aW9uID0gdHJ1ZTtcbiAgICB9XG59XG5leHBvcnRzLmRlZmF1bHQgPSBWYWxpZGF0aW9uRXJyb3I7XG4vLyMgc291cmNlTWFwcGluZ1VSTD12YWxpZGF0aW9uX2Vycm9yLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCByZXNvbHZlXzEgPSByZXF1aXJlKFwiLi9yZXNvbHZlXCIpO1xuY2xhc3MgTWlzc2luZ1JlZkVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKHJlc29sdmVyLCBiYXNlSWQsIHJlZiwgbXNnKSB7XG4gICAgICAgIHN1cGVyKG1zZyB8fCBgY2FuJ3QgcmVzb2x2ZSByZWZlcmVuY2UgJHtyZWZ9IGZyb20gaWQgJHtiYXNlSWR9YCk7XG4gICAgICAgIHRoaXMubWlzc2luZ1JlZiA9ICgwLCByZXNvbHZlXzEucmVzb2x2ZVVybCkocmVzb2x2ZXIsIGJhc2VJZCwgcmVmKTtcbiAgICAgICAgdGhpcy5taXNzaW5nU2NoZW1hID0gKDAsIHJlc29sdmVfMS5ub3JtYWxpemVJZCkoKDAsIHJlc29sdmVfMS5nZXRGdWxsUGF0aCkocmVzb2x2ZXIsIHRoaXMubWlzc2luZ1JlZikpO1xuICAgIH1cbn1cbmV4cG9ydHMuZGVmYXVsdCA9IE1pc3NpbmdSZWZFcnJvcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJlZl9lcnJvci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5yZXNvbHZlU2NoZW1hID0gZXhwb3J0cy5nZXRDb21waWxpbmdTY2hlbWEgPSBleHBvcnRzLnJlc29sdmVSZWYgPSBleHBvcnRzLmNvbXBpbGVTY2hlbWEgPSBleHBvcnRzLlNjaGVtYUVudiA9IHZvaWQgMDtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuL2NvZGVnZW5cIik7XG5jb25zdCB2YWxpZGF0aW9uX2Vycm9yXzEgPSByZXF1aXJlKFwiLi4vcnVudGltZS92YWxpZGF0aW9uX2Vycm9yXCIpO1xuY29uc3QgbmFtZXNfMSA9IHJlcXVpcmUoXCIuL25hbWVzXCIpO1xuY29uc3QgcmVzb2x2ZV8xID0gcmVxdWlyZShcIi4vcmVzb2x2ZVwiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuL3V0aWxcIik7XG5jb25zdCB2YWxpZGF0ZV8xID0gcmVxdWlyZShcIi4vdmFsaWRhdGVcIik7XG5jbGFzcyBTY2hlbWFFbnYge1xuICAgIGNvbnN0cnVjdG9yKGVudikge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHRoaXMucmVmcyA9IHt9O1xuICAgICAgICB0aGlzLmR5bmFtaWNBbmNob3JzID0ge307XG4gICAgICAgIGxldCBzY2hlbWE7XG4gICAgICAgIGlmICh0eXBlb2YgZW52LnNjaGVtYSA9PSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgc2NoZW1hID0gZW52LnNjaGVtYTtcbiAgICAgICAgdGhpcy5zY2hlbWEgPSBlbnYuc2NoZW1hO1xuICAgICAgICB0aGlzLnNjaGVtYUlkID0gZW52LnNjaGVtYUlkO1xuICAgICAgICB0aGlzLnJvb3QgPSBlbnYucm9vdCB8fCB0aGlzO1xuICAgICAgICB0aGlzLmJhc2VJZCA9IChfYSA9IGVudi5iYXNlSWQpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6ICgwLCByZXNvbHZlXzEubm9ybWFsaXplSWQpKHNjaGVtYSA9PT0gbnVsbCB8fCBzY2hlbWEgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNjaGVtYVtlbnYuc2NoZW1hSWQgfHwgXCIkaWRcIl0pO1xuICAgICAgICB0aGlzLnNjaGVtYVBhdGggPSBlbnYuc2NoZW1hUGF0aDtcbiAgICAgICAgdGhpcy5sb2NhbFJlZnMgPSBlbnYubG9jYWxSZWZzO1xuICAgICAgICB0aGlzLm1ldGEgPSBlbnYubWV0YTtcbiAgICAgICAgdGhpcy4kYXN5bmMgPSBzY2hlbWEgPT09IG51bGwgfHwgc2NoZW1hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzY2hlbWEuJGFzeW5jO1xuICAgICAgICB0aGlzLnJlZnMgPSB7fTtcbiAgICB9XG59XG5leHBvcnRzLlNjaGVtYUVudiA9IFNjaGVtYUVudjtcbi8vIGxldCBjb2RlU2l6ZSA9IDBcbi8vIGxldCBub2RlQ291bnQgPSAwXG4vLyBDb21waWxlcyBzY2hlbWEgaW4gU2NoZW1hRW52XG5mdW5jdGlvbiBjb21waWxlU2NoZW1hKHNjaCkge1xuICAgIC8vIFRPRE8gcmVmYWN0b3IgLSByZW1vdmUgY29tcGlsYXRpb25zXG4gICAgY29uc3QgX3NjaCA9IGdldENvbXBpbGluZ1NjaGVtYS5jYWxsKHRoaXMsIHNjaCk7XG4gICAgaWYgKF9zY2gpXG4gICAgICAgIHJldHVybiBfc2NoO1xuICAgIGNvbnN0IHJvb3RJZCA9ICgwLCByZXNvbHZlXzEuZ2V0RnVsbFBhdGgpKHRoaXMub3B0cy51cmlSZXNvbHZlciwgc2NoLnJvb3QuYmFzZUlkKTsgLy8gVE9ETyBpZiBnZXRGdWxsUGF0aCByZW1vdmVkIDEgdGVzdHMgZmFpbHNcbiAgICBjb25zdCB7IGVzNSwgbGluZXMgfSA9IHRoaXMub3B0cy5jb2RlO1xuICAgIGNvbnN0IHsgb3duUHJvcGVydGllcyB9ID0gdGhpcy5vcHRzO1xuICAgIGNvbnN0IGdlbiA9IG5ldyBjb2RlZ2VuXzEuQ29kZUdlbih0aGlzLnNjb3BlLCB7IGVzNSwgbGluZXMsIG93blByb3BlcnRpZXMgfSk7XG4gICAgbGV0IF9WYWxpZGF0aW9uRXJyb3I7XG4gICAgaWYgKHNjaC4kYXN5bmMpIHtcbiAgICAgICAgX1ZhbGlkYXRpb25FcnJvciA9IGdlbi5zY29wZVZhbHVlKFwiRXJyb3JcIiwge1xuICAgICAgICAgICAgcmVmOiB2YWxpZGF0aW9uX2Vycm9yXzEuZGVmYXVsdCxcbiAgICAgICAgICAgIGNvZGU6ICgwLCBjb2RlZ2VuXzEuXykgYHJlcXVpcmUoXCJhanYvZGlzdC9ydW50aW1lL3ZhbGlkYXRpb25fZXJyb3JcIikuZGVmYXVsdGAsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBjb25zdCB2YWxpZGF0ZU5hbWUgPSBnZW4uc2NvcGVOYW1lKFwidmFsaWRhdGVcIik7XG4gICAgc2NoLnZhbGlkYXRlTmFtZSA9IHZhbGlkYXRlTmFtZTtcbiAgICBjb25zdCBzY2hlbWFDeHQgPSB7XG4gICAgICAgIGdlbixcbiAgICAgICAgYWxsRXJyb3JzOiB0aGlzLm9wdHMuYWxsRXJyb3JzLFxuICAgICAgICBkYXRhOiBuYW1lc18xLmRlZmF1bHQuZGF0YSxcbiAgICAgICAgcGFyZW50RGF0YTogbmFtZXNfMS5kZWZhdWx0LnBhcmVudERhdGEsXG4gICAgICAgIHBhcmVudERhdGFQcm9wZXJ0eTogbmFtZXNfMS5kZWZhdWx0LnBhcmVudERhdGFQcm9wZXJ0eSxcbiAgICAgICAgZGF0YU5hbWVzOiBbbmFtZXNfMS5kZWZhdWx0LmRhdGFdLFxuICAgICAgICBkYXRhUGF0aEFycjogW2NvZGVnZW5fMS5uaWxdLFxuICAgICAgICBkYXRhTGV2ZWw6IDAsXG4gICAgICAgIGRhdGFUeXBlczogW10sXG4gICAgICAgIGRlZmluZWRQcm9wZXJ0aWVzOiBuZXcgU2V0KCksXG4gICAgICAgIHRvcFNjaGVtYVJlZjogZ2VuLnNjb3BlVmFsdWUoXCJzY2hlbWFcIiwgdGhpcy5vcHRzLmNvZGUuc291cmNlID09PSB0cnVlXG4gICAgICAgICAgICA/IHsgcmVmOiBzY2guc2NoZW1hLCBjb2RlOiAoMCwgY29kZWdlbl8xLnN0cmluZ2lmeSkoc2NoLnNjaGVtYSkgfVxuICAgICAgICAgICAgOiB7IHJlZjogc2NoLnNjaGVtYSB9KSxcbiAgICAgICAgdmFsaWRhdGVOYW1lLFxuICAgICAgICBWYWxpZGF0aW9uRXJyb3I6IF9WYWxpZGF0aW9uRXJyb3IsXG4gICAgICAgIHNjaGVtYTogc2NoLnNjaGVtYSxcbiAgICAgICAgc2NoZW1hRW52OiBzY2gsXG4gICAgICAgIHJvb3RJZCxcbiAgICAgICAgYmFzZUlkOiBzY2guYmFzZUlkIHx8IHJvb3RJZCxcbiAgICAgICAgc2NoZW1hUGF0aDogY29kZWdlbl8xLm5pbCxcbiAgICAgICAgZXJyU2NoZW1hUGF0aDogc2NoLnNjaGVtYVBhdGggfHwgKHRoaXMub3B0cy5qdGQgPyBcIlwiIDogXCIjXCIpLFxuICAgICAgICBlcnJvclBhdGg6ICgwLCBjb2RlZ2VuXzEuXykgYFwiXCJgLFxuICAgICAgICBvcHRzOiB0aGlzLm9wdHMsXG4gICAgICAgIHNlbGY6IHRoaXMsXG4gICAgfTtcbiAgICBsZXQgc291cmNlQ29kZTtcbiAgICB0cnkge1xuICAgICAgICB0aGlzLl9jb21waWxhdGlvbnMuYWRkKHNjaCk7XG4gICAgICAgICgwLCB2YWxpZGF0ZV8xLnZhbGlkYXRlRnVuY3Rpb25Db2RlKShzY2hlbWFDeHQpO1xuICAgICAgICBnZW4ub3B0aW1pemUodGhpcy5vcHRzLmNvZGUub3B0aW1pemUpO1xuICAgICAgICAvLyBnZW4ub3B0aW1pemUoMSlcbiAgICAgICAgY29uc3QgdmFsaWRhdGVDb2RlID0gZ2VuLnRvU3RyaW5nKCk7XG4gICAgICAgIHNvdXJjZUNvZGUgPSBgJHtnZW4uc2NvcGVSZWZzKG5hbWVzXzEuZGVmYXVsdC5zY29wZSl9cmV0dXJuICR7dmFsaWRhdGVDb2RlfWA7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKChjb2RlU2l6ZSArPSBzb3VyY2VDb2RlLmxlbmd0aCksIChub2RlQ291bnQgKz0gZ2VuLm5vZGVDb3VudCkpXG4gICAgICAgIGlmICh0aGlzLm9wdHMuY29kZS5wcm9jZXNzKVxuICAgICAgICAgICAgc291cmNlQ29kZSA9IHRoaXMub3B0cy5jb2RlLnByb2Nlc3Moc291cmNlQ29kZSwgc2NoKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coXCJcXG5cXG5cXG4gKioqIFxcblwiLCBzb3VyY2VDb2RlKVxuICAgICAgICBjb25zdCBtYWtlVmFsaWRhdGUgPSBuZXcgRnVuY3Rpb24oYCR7bmFtZXNfMS5kZWZhdWx0LnNlbGZ9YCwgYCR7bmFtZXNfMS5kZWZhdWx0LnNjb3BlfWAsIHNvdXJjZUNvZGUpO1xuICAgICAgICBjb25zdCB2YWxpZGF0ZSA9IG1ha2VWYWxpZGF0ZSh0aGlzLCB0aGlzLnNjb3BlLmdldCgpKTtcbiAgICAgICAgdGhpcy5zY29wZS52YWx1ZSh2YWxpZGF0ZU5hbWUsIHsgcmVmOiB2YWxpZGF0ZSB9KTtcbiAgICAgICAgdmFsaWRhdGUuZXJyb3JzID0gbnVsbDtcbiAgICAgICAgdmFsaWRhdGUuc2NoZW1hID0gc2NoLnNjaGVtYTtcbiAgICAgICAgdmFsaWRhdGUuc2NoZW1hRW52ID0gc2NoO1xuICAgICAgICBpZiAoc2NoLiRhc3luYylcbiAgICAgICAgICAgIHZhbGlkYXRlLiRhc3luYyA9IHRydWU7XG4gICAgICAgIGlmICh0aGlzLm9wdHMuY29kZS5zb3VyY2UgPT09IHRydWUpIHtcbiAgICAgICAgICAgIHZhbGlkYXRlLnNvdXJjZSA9IHsgdmFsaWRhdGVOYW1lLCB2YWxpZGF0ZUNvZGUsIHNjb3BlVmFsdWVzOiBnZW4uX3ZhbHVlcyB9O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm9wdHMudW5ldmFsdWF0ZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgcHJvcHMsIGl0ZW1zIH0gPSBzY2hlbWFDeHQ7XG4gICAgICAgICAgICB2YWxpZGF0ZS5ldmFsdWF0ZWQgPSB7XG4gICAgICAgICAgICAgICAgcHJvcHM6IHByb3BzIGluc3RhbmNlb2YgY29kZWdlbl8xLk5hbWUgPyB1bmRlZmluZWQgOiBwcm9wcyxcbiAgICAgICAgICAgICAgICBpdGVtczogaXRlbXMgaW5zdGFuY2VvZiBjb2RlZ2VuXzEuTmFtZSA/IHVuZGVmaW5lZCA6IGl0ZW1zLFxuICAgICAgICAgICAgICAgIGR5bmFtaWNQcm9wczogcHJvcHMgaW5zdGFuY2VvZiBjb2RlZ2VuXzEuTmFtZSxcbiAgICAgICAgICAgICAgICBkeW5hbWljSXRlbXM6IGl0ZW1zIGluc3RhbmNlb2YgY29kZWdlbl8xLk5hbWUsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKHZhbGlkYXRlLnNvdXJjZSlcbiAgICAgICAgICAgICAgICB2YWxpZGF0ZS5zb3VyY2UuZXZhbHVhdGVkID0gKDAsIGNvZGVnZW5fMS5zdHJpbmdpZnkpKHZhbGlkYXRlLmV2YWx1YXRlZCk7XG4gICAgICAgIH1cbiAgICAgICAgc2NoLnZhbGlkYXRlID0gdmFsaWRhdGU7XG4gICAgICAgIHJldHVybiBzY2g7XG4gICAgfVxuICAgIGNhdGNoIChlKSB7XG4gICAgICAgIGRlbGV0ZSBzY2gudmFsaWRhdGU7XG4gICAgICAgIGRlbGV0ZSBzY2gudmFsaWRhdGVOYW1lO1xuICAgICAgICBpZiAoc291cmNlQ29kZSlcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKFwiRXJyb3IgY29tcGlsaW5nIHNjaGVtYSwgZnVuY3Rpb24gY29kZTpcIiwgc291cmNlQ29kZSk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKFwiXFxuXFxuXFxuICoqKiBcXG5cIiwgc291cmNlQ29kZSwgdGhpcy5vcHRzKVxuICAgICAgICB0aHJvdyBlO1xuICAgIH1cbiAgICBmaW5hbGx5IHtcbiAgICAgICAgdGhpcy5fY29tcGlsYXRpb25zLmRlbGV0ZShzY2gpO1xuICAgIH1cbn1cbmV4cG9ydHMuY29tcGlsZVNjaGVtYSA9IGNvbXBpbGVTY2hlbWE7XG5mdW5jdGlvbiByZXNvbHZlUmVmKHJvb3QsIGJhc2VJZCwgcmVmKSB7XG4gICAgdmFyIF9hO1xuICAgIHJlZiA9ICgwLCByZXNvbHZlXzEucmVzb2x2ZVVybCkodGhpcy5vcHRzLnVyaVJlc29sdmVyLCBiYXNlSWQsIHJlZik7XG4gICAgY29uc3Qgc2NoT3JGdW5jID0gcm9vdC5yZWZzW3JlZl07XG4gICAgaWYgKHNjaE9yRnVuYylcbiAgICAgICAgcmV0dXJuIHNjaE9yRnVuYztcbiAgICBsZXQgX3NjaCA9IHJlc29sdmUuY2FsbCh0aGlzLCByb290LCByZWYpO1xuICAgIGlmIChfc2NoID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3Qgc2NoZW1hID0gKF9hID0gcm9vdC5sb2NhbFJlZnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYVtyZWZdOyAvLyBUT0RPIG1heWJlIGxvY2FsUmVmcyBzaG91bGQgaG9sZCBTY2hlbWFFbnZcbiAgICAgICAgY29uc3QgeyBzY2hlbWFJZCB9ID0gdGhpcy5vcHRzO1xuICAgICAgICBpZiAoc2NoZW1hKVxuICAgICAgICAgICAgX3NjaCA9IG5ldyBTY2hlbWFFbnYoeyBzY2hlbWEsIHNjaGVtYUlkLCByb290LCBiYXNlSWQgfSk7XG4gICAgfVxuICAgIGlmIChfc2NoID09PSB1bmRlZmluZWQpXG4gICAgICAgIHJldHVybjtcbiAgICByZXR1cm4gKHJvb3QucmVmc1tyZWZdID0gaW5saW5lT3JDb21waWxlLmNhbGwodGhpcywgX3NjaCkpO1xufVxuZXhwb3J0cy5yZXNvbHZlUmVmID0gcmVzb2x2ZVJlZjtcbmZ1bmN0aW9uIGlubGluZU9yQ29tcGlsZShzY2gpIHtcbiAgICBpZiAoKDAsIHJlc29sdmVfMS5pbmxpbmVSZWYpKHNjaC5zY2hlbWEsIHRoaXMub3B0cy5pbmxpbmVSZWZzKSlcbiAgICAgICAgcmV0dXJuIHNjaC5zY2hlbWE7XG4gICAgcmV0dXJuIHNjaC52YWxpZGF0ZSA/IHNjaCA6IGNvbXBpbGVTY2hlbWEuY2FsbCh0aGlzLCBzY2gpO1xufVxuLy8gSW5kZXggb2Ygc2NoZW1hIGNvbXBpbGF0aW9uIGluIHRoZSBjdXJyZW50bHkgY29tcGlsZWQgbGlzdFxuZnVuY3Rpb24gZ2V0Q29tcGlsaW5nU2NoZW1hKHNjaEVudikge1xuICAgIGZvciAoY29uc3Qgc2NoIG9mIHRoaXMuX2NvbXBpbGF0aW9ucykge1xuICAgICAgICBpZiAoc2FtZVNjaGVtYUVudihzY2gsIHNjaEVudikpXG4gICAgICAgICAgICByZXR1cm4gc2NoO1xuICAgIH1cbn1cbmV4cG9ydHMuZ2V0Q29tcGlsaW5nU2NoZW1hID0gZ2V0Q29tcGlsaW5nU2NoZW1hO1xuZnVuY3Rpb24gc2FtZVNjaGVtYUVudihzMSwgczIpIHtcbiAgICByZXR1cm4gczEuc2NoZW1hID09PSBzMi5zY2hlbWEgJiYgczEucm9vdCA9PT0gczIucm9vdCAmJiBzMS5iYXNlSWQgPT09IHMyLmJhc2VJZDtcbn1cbi8vIHJlc29sdmUgYW5kIGNvbXBpbGUgdGhlIHJlZmVyZW5jZXMgKCRyZWYpXG4vLyBUT0RPIHJldHVybnMgQW55U2NoZW1hT2JqZWN0IChpZiB0aGUgc2NoZW1hIGNhbiBiZSBpbmxpbmVkKSBvciB2YWxpZGF0aW9uIGZ1bmN0aW9uXG5mdW5jdGlvbiByZXNvbHZlKHJvb3QsIC8vIGluZm9ybWF0aW9uIGFib3V0IHRoZSByb290IHNjaGVtYSBmb3IgdGhlIGN1cnJlbnQgc2NoZW1hXG5yZWYgLy8gcmVmZXJlbmNlIHRvIHJlc29sdmVcbikge1xuICAgIGxldCBzY2g7XG4gICAgd2hpbGUgKHR5cGVvZiAoc2NoID0gdGhpcy5yZWZzW3JlZl0pID09IFwic3RyaW5nXCIpXG4gICAgICAgIHJlZiA9IHNjaDtcbiAgICByZXR1cm4gc2NoIHx8IHRoaXMuc2NoZW1hc1tyZWZdIHx8IHJlc29sdmVTY2hlbWEuY2FsbCh0aGlzLCByb290LCByZWYpO1xufVxuLy8gUmVzb2x2ZSBzY2hlbWEsIGl0cyByb290IGFuZCBiYXNlSWRcbmZ1bmN0aW9uIHJlc29sdmVTY2hlbWEocm9vdCwgLy8gcm9vdCBvYmplY3Qgd2l0aCBwcm9wZXJ0aWVzIHNjaGVtYSwgcmVmcyBUT0RPIGJlbG93IFNjaGVtYUVudiBpcyBhc3NpZ25lZCB0byBpdFxucmVmIC8vIHJlZmVyZW5jZSB0byByZXNvbHZlXG4pIHtcbiAgICBjb25zdCBwID0gdGhpcy5vcHRzLnVyaVJlc29sdmVyLnBhcnNlKHJlZik7XG4gICAgY29uc3QgcmVmUGF0aCA9ICgwLCByZXNvbHZlXzEuX2dldEZ1bGxQYXRoKSh0aGlzLm9wdHMudXJpUmVzb2x2ZXIsIHApO1xuICAgIGxldCBiYXNlSWQgPSAoMCwgcmVzb2x2ZV8xLmdldEZ1bGxQYXRoKSh0aGlzLm9wdHMudXJpUmVzb2x2ZXIsIHJvb3QuYmFzZUlkLCB1bmRlZmluZWQpO1xuICAgIC8vIFRPRE8gYE9iamVjdC5rZXlzKHJvb3Quc2NoZW1hKS5sZW5ndGggPiAwYCBzaG91bGQgbm90IGJlIG5lZWRlZCAtIGJ1dCByZW1vdmluZyBicmVha3MgMiB0ZXN0c1xuICAgIGlmIChPYmplY3Qua2V5cyhyb290LnNjaGVtYSkubGVuZ3RoID4gMCAmJiByZWZQYXRoID09PSBiYXNlSWQpIHtcbiAgICAgICAgcmV0dXJuIGdldEpzb25Qb2ludGVyLmNhbGwodGhpcywgcCwgcm9vdCk7XG4gICAgfVxuICAgIGNvbnN0IGlkID0gKDAsIHJlc29sdmVfMS5ub3JtYWxpemVJZCkocmVmUGF0aCk7XG4gICAgY29uc3Qgc2NoT3JSZWYgPSB0aGlzLnJlZnNbaWRdIHx8IHRoaXMuc2NoZW1hc1tpZF07XG4gICAgaWYgKHR5cGVvZiBzY2hPclJlZiA9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGNvbnN0IHNjaCA9IHJlc29sdmVTY2hlbWEuY2FsbCh0aGlzLCByb290LCBzY2hPclJlZik7XG4gICAgICAgIGlmICh0eXBlb2YgKHNjaCA9PT0gbnVsbCB8fCBzY2ggPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNjaC5zY2hlbWEpICE9PSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICByZXR1cm4gZ2V0SnNvblBvaW50ZXIuY2FsbCh0aGlzLCBwLCBzY2gpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIChzY2hPclJlZiA9PT0gbnVsbCB8fCBzY2hPclJlZiA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2NoT3JSZWYuc2NoZW1hKSAhPT0gXCJvYmplY3RcIilcbiAgICAgICAgcmV0dXJuO1xuICAgIGlmICghc2NoT3JSZWYudmFsaWRhdGUpXG4gICAgICAgIGNvbXBpbGVTY2hlbWEuY2FsbCh0aGlzLCBzY2hPclJlZik7XG4gICAgaWYgKGlkID09PSAoMCwgcmVzb2x2ZV8xLm5vcm1hbGl6ZUlkKShyZWYpKSB7XG4gICAgICAgIGNvbnN0IHsgc2NoZW1hIH0gPSBzY2hPclJlZjtcbiAgICAgICAgY29uc3QgeyBzY2hlbWFJZCB9ID0gdGhpcy5vcHRzO1xuICAgICAgICBjb25zdCBzY2hJZCA9IHNjaGVtYVtzY2hlbWFJZF07XG4gICAgICAgIGlmIChzY2hJZClcbiAgICAgICAgICAgIGJhc2VJZCA9ICgwLCByZXNvbHZlXzEucmVzb2x2ZVVybCkodGhpcy5vcHRzLnVyaVJlc29sdmVyLCBiYXNlSWQsIHNjaElkKTtcbiAgICAgICAgcmV0dXJuIG5ldyBTY2hlbWFFbnYoeyBzY2hlbWEsIHNjaGVtYUlkLCByb290LCBiYXNlSWQgfSk7XG4gICAgfVxuICAgIHJldHVybiBnZXRKc29uUG9pbnRlci5jYWxsKHRoaXMsIHAsIHNjaE9yUmVmKTtcbn1cbmV4cG9ydHMucmVzb2x2ZVNjaGVtYSA9IHJlc29sdmVTY2hlbWE7XG5jb25zdCBQUkVWRU5UX1NDT1BFX0NIQU5HRSA9IG5ldyBTZXQoW1xuICAgIFwicHJvcGVydGllc1wiLFxuICAgIFwicGF0dGVyblByb3BlcnRpZXNcIixcbiAgICBcImVudW1cIixcbiAgICBcImRlcGVuZGVuY2llc1wiLFxuICAgIFwiZGVmaW5pdGlvbnNcIixcbl0pO1xuZnVuY3Rpb24gZ2V0SnNvblBvaW50ZXIocGFyc2VkUmVmLCB7IGJhc2VJZCwgc2NoZW1hLCByb290IH0pIHtcbiAgICB2YXIgX2E7XG4gICAgaWYgKCgoX2EgPSBwYXJzZWRSZWYuZnJhZ21lbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYVswXSkgIT09IFwiL1wiKVxuICAgICAgICByZXR1cm47XG4gICAgZm9yIChjb25zdCBwYXJ0IG9mIHBhcnNlZFJlZi5mcmFnbWVudC5zbGljZSgxKS5zcGxpdChcIi9cIikpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBzY2hlbWEgPT09IFwiYm9vbGVhblwiKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCBwYXJ0U2NoZW1hID0gc2NoZW1hWygwLCB1dGlsXzEudW5lc2NhcGVGcmFnbWVudCkocGFydCldO1xuICAgICAgICBpZiAocGFydFNjaGVtYSA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBzY2hlbWEgPSBwYXJ0U2NoZW1hO1xuICAgICAgICAvLyBUT0RPIFBSRVZFTlRfU0NPUEVfQ0hBTkdFIGNvdWxkIGJlIGRlZmluZWQgaW4ga2V5d29yZCBkZWY/XG4gICAgICAgIGNvbnN0IHNjaElkID0gdHlwZW9mIHNjaGVtYSA9PT0gXCJvYmplY3RcIiAmJiBzY2hlbWFbdGhpcy5vcHRzLnNjaGVtYUlkXTtcbiAgICAgICAgaWYgKCFQUkVWRU5UX1NDT1BFX0NIQU5HRS5oYXMocGFydCkgJiYgc2NoSWQpIHtcbiAgICAgICAgICAgIGJhc2VJZCA9ICgwLCByZXNvbHZlXzEucmVzb2x2ZVVybCkodGhpcy5vcHRzLnVyaVJlc29sdmVyLCBiYXNlSWQsIHNjaElkKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBsZXQgZW52O1xuICAgIGlmICh0eXBlb2Ygc2NoZW1hICE9IFwiYm9vbGVhblwiICYmIHNjaGVtYS4kcmVmICYmICEoMCwgdXRpbF8xLnNjaGVtYUhhc1J1bGVzQnV0UmVmKShzY2hlbWEsIHRoaXMuUlVMRVMpKSB7XG4gICAgICAgIGNvbnN0ICRyZWYgPSAoMCwgcmVzb2x2ZV8xLnJlc29sdmVVcmwpKHRoaXMub3B0cy51cmlSZXNvbHZlciwgYmFzZUlkLCBzY2hlbWEuJHJlZik7XG4gICAgICAgIGVudiA9IHJlc29sdmVTY2hlbWEuY2FsbCh0aGlzLCByb290LCAkcmVmKTtcbiAgICB9XG4gICAgLy8gZXZlbiB0aG91Z2ggcmVzb2x1dGlvbiBmYWlsZWQgd2UgbmVlZCB0byByZXR1cm4gU2NoZW1hRW52IHRvIHRocm93IGV4Y2VwdGlvblxuICAgIC8vIHNvIHRoYXQgY29tcGlsZUFzeW5jIGxvYWRzIG1pc3Npbmcgc2NoZW1hLlxuICAgIGNvbnN0IHsgc2NoZW1hSWQgfSA9IHRoaXMub3B0cztcbiAgICBlbnYgPSBlbnYgfHwgbmV3IFNjaGVtYUVudih7IHNjaGVtYSwgc2NoZW1hSWQsIHJvb3QsIGJhc2VJZCB9KTtcbiAgICBpZiAoZW52LnNjaGVtYSAhPT0gZW52LnJvb3Quc2NoZW1hKVxuICAgICAgICByZXR1cm4gZW52O1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIi8qKiBAbGljZW5zZSBVUkkuanMgdjQuNC4xIChjKSAyMDExIEdhcnkgQ291cnQuIExpY2Vuc2U6IGh0dHA6Ly9naXRodWIuY29tL2dhcnljb3VydC91cmktanMgKi9cbihmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG5cdHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyA/IGZhY3RvcnkoZXhwb3J0cykgOlxuXHR0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWydleHBvcnRzJ10sIGZhY3RvcnkpIDpcblx0KGZhY3RvcnkoKGdsb2JhbC5VUkkgPSBnbG9iYWwuVVJJIHx8IHt9KSkpO1xufSh0aGlzLCAoZnVuY3Rpb24gKGV4cG9ydHMpIHsgJ3VzZSBzdHJpY3QnO1xuXG5mdW5jdGlvbiBtZXJnZSgpIHtcbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgc2V0cyA9IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgICBzZXRzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIGlmIChzZXRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgc2V0c1swXSA9IHNldHNbMF0uc2xpY2UoMCwgLTEpO1xuICAgICAgICB2YXIgeGwgPSBzZXRzLmxlbmd0aCAtIDE7XG4gICAgICAgIGZvciAodmFyIHggPSAxOyB4IDwgeGw7ICsreCkge1xuICAgICAgICAgICAgc2V0c1t4XSA9IHNldHNbeF0uc2xpY2UoMSwgLTEpO1xuICAgICAgICB9XG4gICAgICAgIHNldHNbeGxdID0gc2V0c1t4bF0uc2xpY2UoMSk7XG4gICAgICAgIHJldHVybiBzZXRzLmpvaW4oJycpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBzZXRzWzBdO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHN1YmV4cChzdHIpIHtcbiAgICByZXR1cm4gXCIoPzpcIiArIHN0ciArIFwiKVwiO1xufVxuZnVuY3Rpb24gdHlwZU9mKG8pIHtcbiAgICByZXR1cm4gbyA9PT0gdW5kZWZpbmVkID8gXCJ1bmRlZmluZWRcIiA6IG8gPT09IG51bGwgPyBcIm51bGxcIiA6IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zcGxpdChcIiBcIikucG9wKCkuc3BsaXQoXCJdXCIpLnNoaWZ0KCkudG9Mb3dlckNhc2UoKTtcbn1cbmZ1bmN0aW9uIHRvVXBwZXJDYXNlKHN0cikge1xuICAgIHJldHVybiBzdHIudG9VcHBlckNhc2UoKTtcbn1cbmZ1bmN0aW9uIHRvQXJyYXkob2JqKSB7XG4gICAgcmV0dXJuIG9iaiAhPT0gdW5kZWZpbmVkICYmIG9iaiAhPT0gbnVsbCA/IG9iaiBpbnN0YW5jZW9mIEFycmF5ID8gb2JqIDogdHlwZW9mIG9iai5sZW5ndGggIT09IFwibnVtYmVyXCIgfHwgb2JqLnNwbGl0IHx8IG9iai5zZXRJbnRlcnZhbCB8fCBvYmouY2FsbCA/IFtvYmpdIDogQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwob2JqKSA6IFtdO1xufVxuZnVuY3Rpb24gYXNzaWduKHRhcmdldCwgc291cmNlKSB7XG4gICAgdmFyIG9iaiA9IHRhcmdldDtcbiAgICBpZiAoc291cmNlKSB7XG4gICAgICAgIGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHtcbiAgICAgICAgICAgIG9ialtrZXldID0gc291cmNlW2tleV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG9iajtcbn1cblxuZnVuY3Rpb24gYnVpbGRFeHBzKGlzSVJJKSB7XG4gICAgdmFyIEFMUEhBJCQgPSBcIltBLVphLXpdXCIsXG4gICAgICAgIENSJCA9IFwiW1xcXFx4MERdXCIsXG4gICAgICAgIERJR0lUJCQgPSBcIlswLTldXCIsXG4gICAgICAgIERRVU9URSQkID0gXCJbXFxcXHgyMl1cIixcbiAgICAgICAgSEVYRElHJCQgPSBtZXJnZShESUdJVCQkLCBcIltBLUZhLWZdXCIpLFxuICAgICAgICAvL2Nhc2UtaW5zZW5zaXRpdmVcbiAgICBMRiQkID0gXCJbXFxcXHgwQV1cIixcbiAgICAgICAgU1AkJCA9IFwiW1xcXFx4MjBdXCIsXG4gICAgICAgIFBDVF9FTkNPREVEJCA9IHN1YmV4cChzdWJleHAoXCIlW0VGZWZdXCIgKyBIRVhESUckJCArIFwiJVwiICsgSEVYRElHJCQgKyBIRVhESUckJCArIFwiJVwiICsgSEVYRElHJCQgKyBIRVhESUckJCkgKyBcInxcIiArIHN1YmV4cChcIiVbODlBLUZhLWZdXCIgKyBIRVhESUckJCArIFwiJVwiICsgSEVYRElHJCQgKyBIRVhESUckJCkgKyBcInxcIiArIHN1YmV4cChcIiVcIiArIEhFWERJRyQkICsgSEVYRElHJCQpKSxcbiAgICAgICAgLy9leHBhbmRlZFxuICAgIEdFTl9ERUxJTVMkJCA9IFwiW1xcXFw6XFxcXC9cXFxcP1xcXFwjXFxcXFtcXFxcXVxcXFxAXVwiLFxuICAgICAgICBTVUJfREVMSU1TJCQgPSBcIltcXFxcIVxcXFwkXFxcXCZcXFxcJ1xcXFwoXFxcXClcXFxcKlxcXFwrXFxcXCxcXFxcO1xcXFw9XVwiLFxuICAgICAgICBSRVNFUlZFRCQkID0gbWVyZ2UoR0VOX0RFTElNUyQkLCBTVUJfREVMSU1TJCQpLFxuICAgICAgICBVQ1NDSEFSJCQgPSBpc0lSSSA/IFwiW1xcXFx4QTAtXFxcXHUyMDBEXFxcXHUyMDEwLVxcXFx1MjAyOVxcXFx1MjAyRi1cXFxcdUQ3RkZcXFxcdUY5MDAtXFxcXHVGRENGXFxcXHVGREYwLVxcXFx1RkZFRl1cIiA6IFwiW11cIixcbiAgICAgICAgLy9zdWJzZXQsIGV4Y2x1ZGVzIGJpZGkgY29udHJvbCBjaGFyYWN0ZXJzXG4gICAgSVBSSVZBVEUkJCA9IGlzSVJJID8gXCJbXFxcXHVFMDAwLVxcXFx1RjhGRl1cIiA6IFwiW11cIixcbiAgICAgICAgLy9zdWJzZXRcbiAgICBVTlJFU0VSVkVEJCQgPSBtZXJnZShBTFBIQSQkLCBESUdJVCQkLCBcIltcXFxcLVxcXFwuXFxcXF9cXFxcfl1cIiwgVUNTQ0hBUiQkKSxcbiAgICAgICAgU0NIRU1FJCA9IHN1YmV4cChBTFBIQSQkICsgbWVyZ2UoQUxQSEEkJCwgRElHSVQkJCwgXCJbXFxcXCtcXFxcLVxcXFwuXVwiKSArIFwiKlwiKSxcbiAgICAgICAgVVNFUklORk8kID0gc3ViZXhwKHN1YmV4cChQQ1RfRU5DT0RFRCQgKyBcInxcIiArIG1lcmdlKFVOUkVTRVJWRUQkJCwgU1VCX0RFTElNUyQkLCBcIltcXFxcOl1cIikpICsgXCIqXCIpLFxuICAgICAgICBERUNfT0NURVQkID0gc3ViZXhwKHN1YmV4cChcIjI1WzAtNV1cIikgKyBcInxcIiArIHN1YmV4cChcIjJbMC00XVwiICsgRElHSVQkJCkgKyBcInxcIiArIHN1YmV4cChcIjFcIiArIERJR0lUJCQgKyBESUdJVCQkKSArIFwifFwiICsgc3ViZXhwKFwiWzEtOV1cIiArIERJR0lUJCQpICsgXCJ8XCIgKyBESUdJVCQkKSxcbiAgICAgICAgREVDX09DVEVUX1JFTEFYRUQkID0gc3ViZXhwKHN1YmV4cChcIjI1WzAtNV1cIikgKyBcInxcIiArIHN1YmV4cChcIjJbMC00XVwiICsgRElHSVQkJCkgKyBcInxcIiArIHN1YmV4cChcIjFcIiArIERJR0lUJCQgKyBESUdJVCQkKSArIFwifFwiICsgc3ViZXhwKFwiMD9bMS05XVwiICsgRElHSVQkJCkgKyBcInwwPzA/XCIgKyBESUdJVCQkKSxcbiAgICAgICAgLy9yZWxheGVkIHBhcnNpbmcgcnVsZXNcbiAgICBJUFY0QUREUkVTUyQgPSBzdWJleHAoREVDX09DVEVUX1JFTEFYRUQkICsgXCJcXFxcLlwiICsgREVDX09DVEVUX1JFTEFYRUQkICsgXCJcXFxcLlwiICsgREVDX09DVEVUX1JFTEFYRUQkICsgXCJcXFxcLlwiICsgREVDX09DVEVUX1JFTEFYRUQkKSxcbiAgICAgICAgSDE2JCA9IHN1YmV4cChIRVhESUckJCArIFwiezEsNH1cIiksXG4gICAgICAgIExTMzIkID0gc3ViZXhwKHN1YmV4cChIMTYkICsgXCJcXFxcOlwiICsgSDE2JCkgKyBcInxcIiArIElQVjRBRERSRVNTJCksXG4gICAgICAgIElQVjZBRERSRVNTMSQgPSBzdWJleHAoc3ViZXhwKEgxNiQgKyBcIlxcXFw6XCIpICsgXCJ7Nn1cIiArIExTMzIkKSxcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICA2KCBoMTYgXCI6XCIgKSBsczMyXG4gICAgSVBWNkFERFJFU1MyJCA9IHN1YmV4cChcIlxcXFw6XFxcXDpcIiArIHN1YmV4cChIMTYkICsgXCJcXFxcOlwiKSArIFwiezV9XCIgKyBMUzMyJCksXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgIFwiOjpcIiA1KCBoMTYgXCI6XCIgKSBsczMyXG4gICAgSVBWNkFERFJFU1MzJCA9IHN1YmV4cChzdWJleHAoSDE2JCkgKyBcIj9cXFxcOlxcXFw6XCIgKyBzdWJleHAoSDE2JCArIFwiXFxcXDpcIikgKyBcIns0fVwiICsgTFMzMiQpLFxuICAgICAgICAvL1sgICAgICAgICAgICAgICBoMTYgXSBcIjo6XCIgNCggaDE2IFwiOlwiICkgbHMzMlxuICAgIElQVjZBRERSRVNTNCQgPSBzdWJleHAoc3ViZXhwKHN1YmV4cChIMTYkICsgXCJcXFxcOlwiKSArIFwiezAsMX1cIiArIEgxNiQpICsgXCI/XFxcXDpcXFxcOlwiICsgc3ViZXhwKEgxNiQgKyBcIlxcXFw6XCIpICsgXCJ7M31cIiArIExTMzIkKSxcbiAgICAgICAgLy9bICoxKCBoMTYgXCI6XCIgKSBoMTYgXSBcIjo6XCIgMyggaDE2IFwiOlwiICkgbHMzMlxuICAgIElQVjZBRERSRVNTNSQgPSBzdWJleHAoc3ViZXhwKHN1YmV4cChIMTYkICsgXCJcXFxcOlwiKSArIFwiezAsMn1cIiArIEgxNiQpICsgXCI/XFxcXDpcXFxcOlwiICsgc3ViZXhwKEgxNiQgKyBcIlxcXFw6XCIpICsgXCJ7Mn1cIiArIExTMzIkKSxcbiAgICAgICAgLy9bICoyKCBoMTYgXCI6XCIgKSBoMTYgXSBcIjo6XCIgMiggaDE2IFwiOlwiICkgbHMzMlxuICAgIElQVjZBRERSRVNTNiQgPSBzdWJleHAoc3ViZXhwKHN1YmV4cChIMTYkICsgXCJcXFxcOlwiKSArIFwiezAsM31cIiArIEgxNiQpICsgXCI/XFxcXDpcXFxcOlwiICsgSDE2JCArIFwiXFxcXDpcIiArIExTMzIkKSxcbiAgICAgICAgLy9bICozKCBoMTYgXCI6XCIgKSBoMTYgXSBcIjo6XCIgICAgaDE2IFwiOlwiICAgbHMzMlxuICAgIElQVjZBRERSRVNTNyQgPSBzdWJleHAoc3ViZXhwKHN1YmV4cChIMTYkICsgXCJcXFxcOlwiKSArIFwiezAsNH1cIiArIEgxNiQpICsgXCI/XFxcXDpcXFxcOlwiICsgTFMzMiQpLFxuICAgICAgICAvL1sgKjQoIGgxNiBcIjpcIiApIGgxNiBdIFwiOjpcIiAgICAgICAgICAgICAgbHMzMlxuICAgIElQVjZBRERSRVNTOCQgPSBzdWJleHAoc3ViZXhwKHN1YmV4cChIMTYkICsgXCJcXFxcOlwiKSArIFwiezAsNX1cIiArIEgxNiQpICsgXCI/XFxcXDpcXFxcOlwiICsgSDE2JCksXG4gICAgICAgIC8vWyAqNSggaDE2IFwiOlwiICkgaDE2IF0gXCI6OlwiICAgICAgICAgICAgICBoMTZcbiAgICBJUFY2QUREUkVTUzkkID0gc3ViZXhwKHN1YmV4cChzdWJleHAoSDE2JCArIFwiXFxcXDpcIikgKyBcInswLDZ9XCIgKyBIMTYkKSArIFwiP1xcXFw6XFxcXDpcIiksXG4gICAgICAgIC8vWyAqNiggaDE2IFwiOlwiICkgaDE2IF0gXCI6OlwiXG4gICAgSVBWNkFERFJFU1MkID0gc3ViZXhwKFtJUFY2QUREUkVTUzEkLCBJUFY2QUREUkVTUzIkLCBJUFY2QUREUkVTUzMkLCBJUFY2QUREUkVTUzQkLCBJUFY2QUREUkVTUzUkLCBJUFY2QUREUkVTUzYkLCBJUFY2QUREUkVTUzckLCBJUFY2QUREUkVTUzgkLCBJUFY2QUREUkVTUzkkXS5qb2luKFwifFwiKSksXG4gICAgICAgIFpPTkVJRCQgPSBzdWJleHAoc3ViZXhwKFVOUkVTRVJWRUQkJCArIFwifFwiICsgUENUX0VOQ09ERUQkKSArIFwiK1wiKSxcbiAgICAgICAgLy9SRkMgNjg3NFxuICAgIElQVjZBRERSWiQgPSBzdWJleHAoSVBWNkFERFJFU1MkICsgXCJcXFxcJTI1XCIgKyBaT05FSUQkKSxcbiAgICAgICAgLy9SRkMgNjg3NFxuICAgIElQVjZBRERSWl9SRUxBWEVEJCA9IHN1YmV4cChJUFY2QUREUkVTUyQgKyBzdWJleHAoXCJcXFxcJTI1fFxcXFwlKD8hXCIgKyBIRVhESUckJCArIFwiezJ9KVwiKSArIFpPTkVJRCQpLFxuICAgICAgICAvL1JGQyA2ODc0LCB3aXRoIHJlbGF4ZWQgcGFyc2luZyBydWxlc1xuICAgIElQVkZVVFVSRSQgPSBzdWJleHAoXCJbdlZdXCIgKyBIRVhESUckJCArIFwiK1xcXFwuXCIgKyBtZXJnZShVTlJFU0VSVkVEJCQsIFNVQl9ERUxJTVMkJCwgXCJbXFxcXDpdXCIpICsgXCIrXCIpLFxuICAgICAgICBJUF9MSVRFUkFMJCA9IHN1YmV4cChcIlxcXFxbXCIgKyBzdWJleHAoSVBWNkFERFJaX1JFTEFYRUQkICsgXCJ8XCIgKyBJUFY2QUREUkVTUyQgKyBcInxcIiArIElQVkZVVFVSRSQpICsgXCJcXFxcXVwiKSxcbiAgICAgICAgLy9SRkMgNjg3NFxuICAgIFJFR19OQU1FJCA9IHN1YmV4cChzdWJleHAoUENUX0VOQ09ERUQkICsgXCJ8XCIgKyBtZXJnZShVTlJFU0VSVkVEJCQsIFNVQl9ERUxJTVMkJCkpICsgXCIqXCIpLFxuICAgICAgICBIT1NUJCA9IHN1YmV4cChJUF9MSVRFUkFMJCArIFwifFwiICsgSVBWNEFERFJFU1MkICsgXCIoPyFcIiArIFJFR19OQU1FJCArIFwiKVwiICsgXCJ8XCIgKyBSRUdfTkFNRSQpLFxuICAgICAgICBQT1JUJCA9IHN1YmV4cChESUdJVCQkICsgXCIqXCIpLFxuICAgICAgICBBVVRIT1JJVFkkID0gc3ViZXhwKHN1YmV4cChVU0VSSU5GTyQgKyBcIkBcIikgKyBcIj9cIiArIEhPU1QkICsgc3ViZXhwKFwiXFxcXDpcIiArIFBPUlQkKSArIFwiP1wiKSxcbiAgICAgICAgUENIQVIkID0gc3ViZXhwKFBDVF9FTkNPREVEJCArIFwifFwiICsgbWVyZ2UoVU5SRVNFUlZFRCQkLCBTVUJfREVMSU1TJCQsIFwiW1xcXFw6XFxcXEBdXCIpKSxcbiAgICAgICAgU0VHTUVOVCQgPSBzdWJleHAoUENIQVIkICsgXCIqXCIpLFxuICAgICAgICBTRUdNRU5UX05aJCA9IHN1YmV4cChQQ0hBUiQgKyBcIitcIiksXG4gICAgICAgIFNFR01FTlRfTlpfTkMkID0gc3ViZXhwKHN1YmV4cChQQ1RfRU5DT0RFRCQgKyBcInxcIiArIG1lcmdlKFVOUkVTRVJWRUQkJCwgU1VCX0RFTElNUyQkLCBcIltcXFxcQF1cIikpICsgXCIrXCIpLFxuICAgICAgICBQQVRIX0FCRU1QVFkkID0gc3ViZXhwKHN1YmV4cChcIlxcXFwvXCIgKyBTRUdNRU5UJCkgKyBcIipcIiksXG4gICAgICAgIFBBVEhfQUJTT0xVVEUkID0gc3ViZXhwKFwiXFxcXC9cIiArIHN1YmV4cChTRUdNRU5UX05aJCArIFBBVEhfQUJFTVBUWSQpICsgXCI/XCIpLFxuICAgICAgICAvL3NpbXBsaWZpZWRcbiAgICBQQVRIX05PU0NIRU1FJCA9IHN1YmV4cChTRUdNRU5UX05aX05DJCArIFBBVEhfQUJFTVBUWSQpLFxuICAgICAgICAvL3NpbXBsaWZpZWRcbiAgICBQQVRIX1JPT1RMRVNTJCA9IHN1YmV4cChTRUdNRU5UX05aJCArIFBBVEhfQUJFTVBUWSQpLFxuICAgICAgICAvL3NpbXBsaWZpZWRcbiAgICBQQVRIX0VNUFRZJCA9IFwiKD8hXCIgKyBQQ0hBUiQgKyBcIilcIixcbiAgICAgICAgUEFUSCQgPSBzdWJleHAoUEFUSF9BQkVNUFRZJCArIFwifFwiICsgUEFUSF9BQlNPTFVURSQgKyBcInxcIiArIFBBVEhfTk9TQ0hFTUUkICsgXCJ8XCIgKyBQQVRIX1JPT1RMRVNTJCArIFwifFwiICsgUEFUSF9FTVBUWSQpLFxuICAgICAgICBRVUVSWSQgPSBzdWJleHAoc3ViZXhwKFBDSEFSJCArIFwifFwiICsgbWVyZ2UoXCJbXFxcXC9cXFxcP11cIiwgSVBSSVZBVEUkJCkpICsgXCIqXCIpLFxuICAgICAgICBGUkFHTUVOVCQgPSBzdWJleHAoc3ViZXhwKFBDSEFSJCArIFwifFtcXFxcL1xcXFw/XVwiKSArIFwiKlwiKSxcbiAgICAgICAgSElFUl9QQVJUJCA9IHN1YmV4cChzdWJleHAoXCJcXFxcL1xcXFwvXCIgKyBBVVRIT1JJVFkkICsgUEFUSF9BQkVNUFRZJCkgKyBcInxcIiArIFBBVEhfQUJTT0xVVEUkICsgXCJ8XCIgKyBQQVRIX1JPT1RMRVNTJCArIFwifFwiICsgUEFUSF9FTVBUWSQpLFxuICAgICAgICBVUkkkID0gc3ViZXhwKFNDSEVNRSQgKyBcIlxcXFw6XCIgKyBISUVSX1BBUlQkICsgc3ViZXhwKFwiXFxcXD9cIiArIFFVRVJZJCkgKyBcIj9cIiArIHN1YmV4cChcIlxcXFwjXCIgKyBGUkFHTUVOVCQpICsgXCI/XCIpLFxuICAgICAgICBSRUxBVElWRV9QQVJUJCA9IHN1YmV4cChzdWJleHAoXCJcXFxcL1xcXFwvXCIgKyBBVVRIT1JJVFkkICsgUEFUSF9BQkVNUFRZJCkgKyBcInxcIiArIFBBVEhfQUJTT0xVVEUkICsgXCJ8XCIgKyBQQVRIX05PU0NIRU1FJCArIFwifFwiICsgUEFUSF9FTVBUWSQpLFxuICAgICAgICBSRUxBVElWRSQgPSBzdWJleHAoUkVMQVRJVkVfUEFSVCQgKyBzdWJleHAoXCJcXFxcP1wiICsgUVVFUlkkKSArIFwiP1wiICsgc3ViZXhwKFwiXFxcXCNcIiArIEZSQUdNRU5UJCkgKyBcIj9cIiksXG4gICAgICAgIFVSSV9SRUZFUkVOQ0UkID0gc3ViZXhwKFVSSSQgKyBcInxcIiArIFJFTEFUSVZFJCksXG4gICAgICAgIEFCU09MVVRFX1VSSSQgPSBzdWJleHAoU0NIRU1FJCArIFwiXFxcXDpcIiArIEhJRVJfUEFSVCQgKyBzdWJleHAoXCJcXFxcP1wiICsgUVVFUlkkKSArIFwiP1wiKSxcbiAgICAgICAgR0VORVJJQ19SRUYkID0gXCJeKFwiICsgU0NIRU1FJCArIFwiKVxcXFw6XCIgKyBzdWJleHAoc3ViZXhwKFwiXFxcXC9cXFxcLyhcIiArIHN1YmV4cChcIihcIiArIFVTRVJJTkZPJCArIFwiKUBcIikgKyBcIj8oXCIgKyBIT1NUJCArIFwiKVwiICsgc3ViZXhwKFwiXFxcXDooXCIgKyBQT1JUJCArIFwiKVwiKSArIFwiPylcIikgKyBcIj8oXCIgKyBQQVRIX0FCRU1QVFkkICsgXCJ8XCIgKyBQQVRIX0FCU09MVVRFJCArIFwifFwiICsgUEFUSF9ST09UTEVTUyQgKyBcInxcIiArIFBBVEhfRU1QVFkkICsgXCIpXCIpICsgc3ViZXhwKFwiXFxcXD8oXCIgKyBRVUVSWSQgKyBcIilcIikgKyBcIj9cIiArIHN1YmV4cChcIlxcXFwjKFwiICsgRlJBR01FTlQkICsgXCIpXCIpICsgXCI/JFwiLFxuICAgICAgICBSRUxBVElWRV9SRUYkID0gXCJeKCl7MH1cIiArIHN1YmV4cChzdWJleHAoXCJcXFxcL1xcXFwvKFwiICsgc3ViZXhwKFwiKFwiICsgVVNFUklORk8kICsgXCIpQFwiKSArIFwiPyhcIiArIEhPU1QkICsgXCIpXCIgKyBzdWJleHAoXCJcXFxcOihcIiArIFBPUlQkICsgXCIpXCIpICsgXCI/KVwiKSArIFwiPyhcIiArIFBBVEhfQUJFTVBUWSQgKyBcInxcIiArIFBBVEhfQUJTT0xVVEUkICsgXCJ8XCIgKyBQQVRIX05PU0NIRU1FJCArIFwifFwiICsgUEFUSF9FTVBUWSQgKyBcIilcIikgKyBzdWJleHAoXCJcXFxcPyhcIiArIFFVRVJZJCArIFwiKVwiKSArIFwiP1wiICsgc3ViZXhwKFwiXFxcXCMoXCIgKyBGUkFHTUVOVCQgKyBcIilcIikgKyBcIj8kXCIsXG4gICAgICAgIEFCU09MVVRFX1JFRiQgPSBcIl4oXCIgKyBTQ0hFTUUkICsgXCIpXFxcXDpcIiArIHN1YmV4cChzdWJleHAoXCJcXFxcL1xcXFwvKFwiICsgc3ViZXhwKFwiKFwiICsgVVNFUklORk8kICsgXCIpQFwiKSArIFwiPyhcIiArIEhPU1QkICsgXCIpXCIgKyBzdWJleHAoXCJcXFxcOihcIiArIFBPUlQkICsgXCIpXCIpICsgXCI/KVwiKSArIFwiPyhcIiArIFBBVEhfQUJFTVBUWSQgKyBcInxcIiArIFBBVEhfQUJTT0xVVEUkICsgXCJ8XCIgKyBQQVRIX1JPT1RMRVNTJCArIFwifFwiICsgUEFUSF9FTVBUWSQgKyBcIilcIikgKyBzdWJleHAoXCJcXFxcPyhcIiArIFFVRVJZJCArIFwiKVwiKSArIFwiPyRcIixcbiAgICAgICAgU0FNRURPQ19SRUYkID0gXCJeXCIgKyBzdWJleHAoXCJcXFxcIyhcIiArIEZSQUdNRU5UJCArIFwiKVwiKSArIFwiPyRcIixcbiAgICAgICAgQVVUSE9SSVRZX1JFRiQgPSBcIl5cIiArIHN1YmV4cChcIihcIiArIFVTRVJJTkZPJCArIFwiKUBcIikgKyBcIj8oXCIgKyBIT1NUJCArIFwiKVwiICsgc3ViZXhwKFwiXFxcXDooXCIgKyBQT1JUJCArIFwiKVwiKSArIFwiPyRcIjtcbiAgICByZXR1cm4ge1xuICAgICAgICBOT1RfU0NIRU1FOiBuZXcgUmVnRXhwKG1lcmdlKFwiW15dXCIsIEFMUEhBJCQsIERJR0lUJCQsIFwiW1xcXFwrXFxcXC1cXFxcLl1cIiksIFwiZ1wiKSxcbiAgICAgICAgTk9UX1VTRVJJTkZPOiBuZXcgUmVnRXhwKG1lcmdlKFwiW15cXFxcJVxcXFw6XVwiLCBVTlJFU0VSVkVEJCQsIFNVQl9ERUxJTVMkJCksIFwiZ1wiKSxcbiAgICAgICAgTk9UX0hPU1Q6IG5ldyBSZWdFeHAobWVyZ2UoXCJbXlxcXFwlXFxcXFtcXFxcXVxcXFw6XVwiLCBVTlJFU0VSVkVEJCQsIFNVQl9ERUxJTVMkJCksIFwiZ1wiKSxcbiAgICAgICAgTk9UX1BBVEg6IG5ldyBSZWdFeHAobWVyZ2UoXCJbXlxcXFwlXFxcXC9cXFxcOlxcXFxAXVwiLCBVTlJFU0VSVkVEJCQsIFNVQl9ERUxJTVMkJCksIFwiZ1wiKSxcbiAgICAgICAgTk9UX1BBVEhfTk9TQ0hFTUU6IG5ldyBSZWdFeHAobWVyZ2UoXCJbXlxcXFwlXFxcXC9cXFxcQF1cIiwgVU5SRVNFUlZFRCQkLCBTVUJfREVMSU1TJCQpLCBcImdcIiksXG4gICAgICAgIE5PVF9RVUVSWTogbmV3IFJlZ0V4cChtZXJnZShcIlteXFxcXCVdXCIsIFVOUkVTRVJWRUQkJCwgU1VCX0RFTElNUyQkLCBcIltcXFxcOlxcXFxAXFxcXC9cXFxcP11cIiwgSVBSSVZBVEUkJCksIFwiZ1wiKSxcbiAgICAgICAgTk9UX0ZSQUdNRU5UOiBuZXcgUmVnRXhwKG1lcmdlKFwiW15cXFxcJV1cIiwgVU5SRVNFUlZFRCQkLCBTVUJfREVMSU1TJCQsIFwiW1xcXFw6XFxcXEBcXFxcL1xcXFw/XVwiKSwgXCJnXCIpLFxuICAgICAgICBFU0NBUEU6IG5ldyBSZWdFeHAobWVyZ2UoXCJbXl1cIiwgVU5SRVNFUlZFRCQkLCBTVUJfREVMSU1TJCQpLCBcImdcIiksXG4gICAgICAgIFVOUkVTRVJWRUQ6IG5ldyBSZWdFeHAoVU5SRVNFUlZFRCQkLCBcImdcIiksXG4gICAgICAgIE9USEVSX0NIQVJTOiBuZXcgUmVnRXhwKG1lcmdlKFwiW15cXFxcJV1cIiwgVU5SRVNFUlZFRCQkLCBSRVNFUlZFRCQkKSwgXCJnXCIpLFxuICAgICAgICBQQ1RfRU5DT0RFRDogbmV3IFJlZ0V4cChQQ1RfRU5DT0RFRCQsIFwiZ1wiKSxcbiAgICAgICAgSVBWNEFERFJFU1M6IG5ldyBSZWdFeHAoXCJeKFwiICsgSVBWNEFERFJFU1MkICsgXCIpJFwiKSxcbiAgICAgICAgSVBWNkFERFJFU1M6IG5ldyBSZWdFeHAoXCJeXFxcXFs/KFwiICsgSVBWNkFERFJFU1MkICsgXCIpXCIgKyBzdWJleHAoc3ViZXhwKFwiXFxcXCUyNXxcXFxcJSg/IVwiICsgSEVYRElHJCQgKyBcInsyfSlcIikgKyBcIihcIiArIFpPTkVJRCQgKyBcIilcIikgKyBcIj9cXFxcXT8kXCIpIC8vUkZDIDY4NzQsIHdpdGggcmVsYXhlZCBwYXJzaW5nIHJ1bGVzXG4gICAgfTtcbn1cbnZhciBVUklfUFJPVE9DT0wgPSBidWlsZEV4cHMoZmFsc2UpO1xuXG52YXIgSVJJX1BST1RPQ09MID0gYnVpbGRFeHBzKHRydWUpO1xuXG52YXIgc2xpY2VkVG9BcnJheSA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gc2xpY2VJdGVyYXRvcihhcnIsIGkpIHtcbiAgICB2YXIgX2FyciA9IFtdO1xuICAgIHZhciBfbiA9IHRydWU7XG4gICAgdmFyIF9kID0gZmFsc2U7XG4gICAgdmFyIF9lID0gdW5kZWZpbmVkO1xuXG4gICAgdHJ5IHtcbiAgICAgIGZvciAodmFyIF9pID0gYXJyW1N5bWJvbC5pdGVyYXRvcl0oKSwgX3M7ICEoX24gPSAoX3MgPSBfaS5uZXh0KCkpLmRvbmUpOyBfbiA9IHRydWUpIHtcbiAgICAgICAgX2Fyci5wdXNoKF9zLnZhbHVlKTtcblxuICAgICAgICBpZiAoaSAmJiBfYXJyLmxlbmd0aCA9PT0gaSkgYnJlYWs7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBfZCA9IHRydWU7XG4gICAgICBfZSA9IGVycjtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKCFfbiAmJiBfaVtcInJldHVyblwiXSkgX2lbXCJyZXR1cm5cIl0oKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGlmIChfZCkgdGhyb3cgX2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIF9hcnI7XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gKGFyciwgaSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGFycikpIHtcbiAgICAgIHJldHVybiBhcnI7XG4gICAgfSBlbHNlIGlmIChTeW1ib2wuaXRlcmF0b3IgaW4gT2JqZWN0KGFycikpIHtcbiAgICAgIHJldHVybiBzbGljZUl0ZXJhdG9yKGFyciwgaSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlXCIpO1xuICAgIH1cbiAgfTtcbn0oKTtcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxudmFyIHRvQ29uc3VtYWJsZUFycmF5ID0gZnVuY3Rpb24gKGFycikge1xuICBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBBcnJheShhcnIubGVuZ3RoKTsgaSA8IGFyci5sZW5ndGg7IGkrKykgYXJyMltpXSA9IGFycltpXTtcblxuICAgIHJldHVybiBhcnIyO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBBcnJheS5mcm9tKGFycik7XG4gIH1cbn07XG5cbi8qKiBIaWdoZXN0IHBvc2l0aXZlIHNpZ25lZCAzMi1iaXQgZmxvYXQgdmFsdWUgKi9cblxudmFyIG1heEludCA9IDIxNDc0ODM2NDc7IC8vIGFrYS4gMHg3RkZGRkZGRiBvciAyXjMxLTFcblxuLyoqIEJvb3RzdHJpbmcgcGFyYW1ldGVycyAqL1xudmFyIGJhc2UgPSAzNjtcbnZhciB0TWluID0gMTtcbnZhciB0TWF4ID0gMjY7XG52YXIgc2tldyA9IDM4O1xudmFyIGRhbXAgPSA3MDA7XG52YXIgaW5pdGlhbEJpYXMgPSA3MjtcbnZhciBpbml0aWFsTiA9IDEyODsgLy8gMHg4MFxudmFyIGRlbGltaXRlciA9ICctJzsgLy8gJ1xceDJEJ1xuXG4vKiogUmVndWxhciBleHByZXNzaW9ucyAqL1xudmFyIHJlZ2V4UHVueWNvZGUgPSAvXnhuLS0vO1xudmFyIHJlZ2V4Tm9uQVNDSUkgPSAvW15cXDAtXFx4N0VdLzsgLy8gbm9uLUFTQ0lJIGNoYXJzXG52YXIgcmVnZXhTZXBhcmF0b3JzID0gL1tcXHgyRVxcdTMwMDJcXHVGRjBFXFx1RkY2MV0vZzsgLy8gUkZDIDM0OTAgc2VwYXJhdG9yc1xuXG4vKiogRXJyb3IgbWVzc2FnZXMgKi9cbnZhciBlcnJvcnMgPSB7XG5cdCdvdmVyZmxvdyc6ICdPdmVyZmxvdzogaW5wdXQgbmVlZHMgd2lkZXIgaW50ZWdlcnMgdG8gcHJvY2VzcycsXG5cdCdub3QtYmFzaWMnOiAnSWxsZWdhbCBpbnB1dCA+PSAweDgwIChub3QgYSBiYXNpYyBjb2RlIHBvaW50KScsXG5cdCdpbnZhbGlkLWlucHV0JzogJ0ludmFsaWQgaW5wdXQnXG59O1xuXG4vKiogQ29udmVuaWVuY2Ugc2hvcnRjdXRzICovXG52YXIgYmFzZU1pbnVzVE1pbiA9IGJhc2UgLSB0TWluO1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcbnZhciBzdHJpbmdGcm9tQ2hhckNvZGUgPSBTdHJpbmcuZnJvbUNoYXJDb2RlO1xuXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuLyoqXG4gKiBBIGdlbmVyaWMgZXJyb3IgdXRpbGl0eSBmdW5jdGlvbi5cbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge1N0cmluZ30gdHlwZSBUaGUgZXJyb3IgdHlwZS5cbiAqIEByZXR1cm5zIHtFcnJvcn0gVGhyb3dzIGEgYFJhbmdlRXJyb3JgIHdpdGggdGhlIGFwcGxpY2FibGUgZXJyb3IgbWVzc2FnZS5cbiAqL1xuZnVuY3Rpb24gZXJyb3IkMSh0eXBlKSB7XG5cdHRocm93IG5ldyBSYW5nZUVycm9yKGVycm9yc1t0eXBlXSk7XG59XG5cbi8qKlxuICogQSBnZW5lcmljIGBBcnJheSNtYXBgIHV0aWxpdHkgZnVuY3Rpb24uXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIFRoZSBmdW5jdGlvbiB0aGF0IGdldHMgY2FsbGVkIGZvciBldmVyeSBhcnJheVxuICogaXRlbS5cbiAqIEByZXR1cm5zIHtBcnJheX0gQSBuZXcgYXJyYXkgb2YgdmFsdWVzIHJldHVybmVkIGJ5IHRoZSBjYWxsYmFjayBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gbWFwKGFycmF5LCBmbikge1xuXHR2YXIgcmVzdWx0ID0gW107XG5cdHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cdHdoaWxlIChsZW5ndGgtLSkge1xuXHRcdHJlc3VsdFtsZW5ndGhdID0gZm4oYXJyYXlbbGVuZ3RoXSk7XG5cdH1cblx0cmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBBIHNpbXBsZSBgQXJyYXkjbWFwYC1saWtlIHdyYXBwZXIgdG8gd29yayB3aXRoIGRvbWFpbiBuYW1lIHN0cmluZ3Mgb3IgZW1haWxcbiAqIGFkZHJlc3Nlcy5cbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge1N0cmluZ30gZG9tYWluIFRoZSBkb21haW4gbmFtZSBvciBlbWFpbCBhZGRyZXNzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGZ1bmN0aW9uIHRoYXQgZ2V0cyBjYWxsZWQgZm9yIGV2ZXJ5XG4gKiBjaGFyYWN0ZXIuXG4gKiBAcmV0dXJucyB7QXJyYXl9IEEgbmV3IHN0cmluZyBvZiBjaGFyYWN0ZXJzIHJldHVybmVkIGJ5IHRoZSBjYWxsYmFja1xuICogZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIG1hcERvbWFpbihzdHJpbmcsIGZuKSB7XG5cdHZhciBwYXJ0cyA9IHN0cmluZy5zcGxpdCgnQCcpO1xuXHR2YXIgcmVzdWx0ID0gJyc7XG5cdGlmIChwYXJ0cy5sZW5ndGggPiAxKSB7XG5cdFx0Ly8gSW4gZW1haWwgYWRkcmVzc2VzLCBvbmx5IHRoZSBkb21haW4gbmFtZSBzaG91bGQgYmUgcHVueWNvZGVkLiBMZWF2ZVxuXHRcdC8vIHRoZSBsb2NhbCBwYXJ0IChpLmUuIGV2ZXJ5dGhpbmcgdXAgdG8gYEBgKSBpbnRhY3QuXG5cdFx0cmVzdWx0ID0gcGFydHNbMF0gKyAnQCc7XG5cdFx0c3RyaW5nID0gcGFydHNbMV07XG5cdH1cblx0Ly8gQXZvaWQgYHNwbGl0KHJlZ2V4KWAgZm9yIElFOCBjb21wYXRpYmlsaXR5LiBTZWUgIzE3LlxuXHRzdHJpbmcgPSBzdHJpbmcucmVwbGFjZShyZWdleFNlcGFyYXRvcnMsICdcXHgyRScpO1xuXHR2YXIgbGFiZWxzID0gc3RyaW5nLnNwbGl0KCcuJyk7XG5cdHZhciBlbmNvZGVkID0gbWFwKGxhYmVscywgZm4pLmpvaW4oJy4nKTtcblx0cmV0dXJuIHJlc3VsdCArIGVuY29kZWQ7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBjb250YWluaW5nIHRoZSBudW1lcmljIGNvZGUgcG9pbnRzIG9mIGVhY2ggVW5pY29kZVxuICogY2hhcmFjdGVyIGluIHRoZSBzdHJpbmcuIFdoaWxlIEphdmFTY3JpcHQgdXNlcyBVQ1MtMiBpbnRlcm5hbGx5LFxuICogdGhpcyBmdW5jdGlvbiB3aWxsIGNvbnZlcnQgYSBwYWlyIG9mIHN1cnJvZ2F0ZSBoYWx2ZXMgKGVhY2ggb2Ygd2hpY2hcbiAqIFVDUy0yIGV4cG9zZXMgYXMgc2VwYXJhdGUgY2hhcmFjdGVycykgaW50byBhIHNpbmdsZSBjb2RlIHBvaW50LFxuICogbWF0Y2hpbmcgVVRGLTE2LlxuICogQHNlZSBgcHVueWNvZGUudWNzMi5lbmNvZGVgXG4gKiBAc2VlIDxodHRwczovL21hdGhpYXNieW5lbnMuYmUvbm90ZXMvamF2YXNjcmlwdC1lbmNvZGluZz5cbiAqIEBtZW1iZXJPZiBwdW55Y29kZS51Y3MyXG4gKiBAbmFtZSBkZWNvZGVcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJpbmcgVGhlIFVuaWNvZGUgaW5wdXQgc3RyaW5nIChVQ1MtMikuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFRoZSBuZXcgYXJyYXkgb2YgY29kZSBwb2ludHMuXG4gKi9cbmZ1bmN0aW9uIHVjczJkZWNvZGUoc3RyaW5nKSB7XG5cdHZhciBvdXRwdXQgPSBbXTtcblx0dmFyIGNvdW50ZXIgPSAwO1xuXHR2YXIgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aDtcblx0d2hpbGUgKGNvdW50ZXIgPCBsZW5ndGgpIHtcblx0XHR2YXIgdmFsdWUgPSBzdHJpbmcuY2hhckNvZGVBdChjb3VudGVyKyspO1xuXHRcdGlmICh2YWx1ZSA+PSAweEQ4MDAgJiYgdmFsdWUgPD0gMHhEQkZGICYmIGNvdW50ZXIgPCBsZW5ndGgpIHtcblx0XHRcdC8vIEl0J3MgYSBoaWdoIHN1cnJvZ2F0ZSwgYW5kIHRoZXJlIGlzIGEgbmV4dCBjaGFyYWN0ZXIuXG5cdFx0XHR2YXIgZXh0cmEgPSBzdHJpbmcuY2hhckNvZGVBdChjb3VudGVyKyspO1xuXHRcdFx0aWYgKChleHRyYSAmIDB4RkMwMCkgPT0gMHhEQzAwKSB7XG5cdFx0XHRcdC8vIExvdyBzdXJyb2dhdGUuXG5cdFx0XHRcdG91dHB1dC5wdXNoKCgodmFsdWUgJiAweDNGRikgPDwgMTApICsgKGV4dHJhICYgMHgzRkYpICsgMHgxMDAwMCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBJdCdzIGFuIHVubWF0Y2hlZCBzdXJyb2dhdGU7IG9ubHkgYXBwZW5kIHRoaXMgY29kZSB1bml0LCBpbiBjYXNlIHRoZVxuXHRcdFx0XHQvLyBuZXh0IGNvZGUgdW5pdCBpcyB0aGUgaGlnaCBzdXJyb2dhdGUgb2YgYSBzdXJyb2dhdGUgcGFpci5cblx0XHRcdFx0b3V0cHV0LnB1c2godmFsdWUpO1xuXHRcdFx0XHRjb3VudGVyLS07XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdG91dHB1dC5wdXNoKHZhbHVlKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIG91dHB1dDtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgc3RyaW5nIGJhc2VkIG9uIGFuIGFycmF5IG9mIG51bWVyaWMgY29kZSBwb2ludHMuXG4gKiBAc2VlIGBwdW55Y29kZS51Y3MyLmRlY29kZWBcbiAqIEBtZW1iZXJPZiBwdW55Y29kZS51Y3MyXG4gKiBAbmFtZSBlbmNvZGVcbiAqIEBwYXJhbSB7QXJyYXl9IGNvZGVQb2ludHMgVGhlIGFycmF5IG9mIG51bWVyaWMgY29kZSBwb2ludHMuXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgbmV3IFVuaWNvZGUgc3RyaW5nIChVQ1MtMikuXG4gKi9cbnZhciB1Y3MyZW5jb2RlID0gZnVuY3Rpb24gdWNzMmVuY29kZShhcnJheSkge1xuXHRyZXR1cm4gU3RyaW5nLmZyb21Db2RlUG9pbnQuYXBwbHkoU3RyaW5nLCB0b0NvbnN1bWFibGVBcnJheShhcnJheSkpO1xufTtcblxuLyoqXG4gKiBDb252ZXJ0cyBhIGJhc2ljIGNvZGUgcG9pbnQgaW50byBhIGRpZ2l0L2ludGVnZXIuXG4gKiBAc2VlIGBkaWdpdFRvQmFzaWMoKWBcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge051bWJlcn0gY29kZVBvaW50IFRoZSBiYXNpYyBudW1lcmljIGNvZGUgcG9pbnQgdmFsdWUuXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBUaGUgbnVtZXJpYyB2YWx1ZSBvZiBhIGJhc2ljIGNvZGUgcG9pbnQgKGZvciB1c2UgaW5cbiAqIHJlcHJlc2VudGluZyBpbnRlZ2VycykgaW4gdGhlIHJhbmdlIGAwYCB0byBgYmFzZSAtIDFgLCBvciBgYmFzZWAgaWZcbiAqIHRoZSBjb2RlIHBvaW50IGRvZXMgbm90IHJlcHJlc2VudCBhIHZhbHVlLlxuICovXG52YXIgYmFzaWNUb0RpZ2l0ID0gZnVuY3Rpb24gYmFzaWNUb0RpZ2l0KGNvZGVQb2ludCkge1xuXHRpZiAoY29kZVBvaW50IC0gMHgzMCA8IDB4MEEpIHtcblx0XHRyZXR1cm4gY29kZVBvaW50IC0gMHgxNjtcblx0fVxuXHRpZiAoY29kZVBvaW50IC0gMHg0MSA8IDB4MUEpIHtcblx0XHRyZXR1cm4gY29kZVBvaW50IC0gMHg0MTtcblx0fVxuXHRpZiAoY29kZVBvaW50IC0gMHg2MSA8IDB4MUEpIHtcblx0XHRyZXR1cm4gY29kZVBvaW50IC0gMHg2MTtcblx0fVxuXHRyZXR1cm4gYmFzZTtcbn07XG5cbi8qKlxuICogQ29udmVydHMgYSBkaWdpdC9pbnRlZ2VyIGludG8gYSBiYXNpYyBjb2RlIHBvaW50LlxuICogQHNlZSBgYmFzaWNUb0RpZ2l0KClgXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtOdW1iZXJ9IGRpZ2l0IFRoZSBudW1lcmljIHZhbHVlIG9mIGEgYmFzaWMgY29kZSBwb2ludC5cbiAqIEByZXR1cm5zIHtOdW1iZXJ9IFRoZSBiYXNpYyBjb2RlIHBvaW50IHdob3NlIHZhbHVlICh3aGVuIHVzZWQgZm9yXG4gKiByZXByZXNlbnRpbmcgaW50ZWdlcnMpIGlzIGBkaWdpdGAsIHdoaWNoIG5lZWRzIHRvIGJlIGluIHRoZSByYW5nZVxuICogYDBgIHRvIGBiYXNlIC0gMWAuIElmIGBmbGFnYCBpcyBub24temVybywgdGhlIHVwcGVyY2FzZSBmb3JtIGlzXG4gKiB1c2VkOyBlbHNlLCB0aGUgbG93ZXJjYXNlIGZvcm0gaXMgdXNlZC4gVGhlIGJlaGF2aW9yIGlzIHVuZGVmaW5lZFxuICogaWYgYGZsYWdgIGlzIG5vbi16ZXJvIGFuZCBgZGlnaXRgIGhhcyBubyB1cHBlcmNhc2UgZm9ybS5cbiAqL1xudmFyIGRpZ2l0VG9CYXNpYyA9IGZ1bmN0aW9uIGRpZ2l0VG9CYXNpYyhkaWdpdCwgZmxhZykge1xuXHQvLyAgMC4uMjUgbWFwIHRvIEFTQ0lJIGEuLnogb3IgQS4uWlxuXHQvLyAyNi4uMzUgbWFwIHRvIEFTQ0lJIDAuLjlcblx0cmV0dXJuIGRpZ2l0ICsgMjIgKyA3NSAqIChkaWdpdCA8IDI2KSAtICgoZmxhZyAhPSAwKSA8PCA1KTtcbn07XG5cbi8qKlxuICogQmlhcyBhZGFwdGF0aW9uIGZ1bmN0aW9uIGFzIHBlciBzZWN0aW9uIDMuNCBvZiBSRkMgMzQ5Mi5cbiAqIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzNDkyI3NlY3Rpb24tMy40XG4gKiBAcHJpdmF0ZVxuICovXG52YXIgYWRhcHQgPSBmdW5jdGlvbiBhZGFwdChkZWx0YSwgbnVtUG9pbnRzLCBmaXJzdFRpbWUpIHtcblx0dmFyIGsgPSAwO1xuXHRkZWx0YSA9IGZpcnN0VGltZSA/IGZsb29yKGRlbHRhIC8gZGFtcCkgOiBkZWx0YSA+PiAxO1xuXHRkZWx0YSArPSBmbG9vcihkZWx0YSAvIG51bVBvaW50cyk7XG5cdGZvciAoOyAvKiBubyBpbml0aWFsaXphdGlvbiAqL2RlbHRhID4gYmFzZU1pbnVzVE1pbiAqIHRNYXggPj4gMTsgayArPSBiYXNlKSB7XG5cdFx0ZGVsdGEgPSBmbG9vcihkZWx0YSAvIGJhc2VNaW51c1RNaW4pO1xuXHR9XG5cdHJldHVybiBmbG9vcihrICsgKGJhc2VNaW51c1RNaW4gKyAxKSAqIGRlbHRhIC8gKGRlbHRhICsgc2tldykpO1xufTtcblxuLyoqXG4gKiBDb252ZXJ0cyBhIFB1bnljb2RlIHN0cmluZyBvZiBBU0NJSS1vbmx5IHN5bWJvbHMgdG8gYSBzdHJpbmcgb2YgVW5pY29kZVxuICogc3ltYm9scy5cbiAqIEBtZW1iZXJPZiBwdW55Y29kZVxuICogQHBhcmFtIHtTdHJpbmd9IGlucHV0IFRoZSBQdW55Y29kZSBzdHJpbmcgb2YgQVNDSUktb25seSBzeW1ib2xzLlxuICogQHJldHVybnMge1N0cmluZ30gVGhlIHJlc3VsdGluZyBzdHJpbmcgb2YgVW5pY29kZSBzeW1ib2xzLlxuICovXG52YXIgZGVjb2RlID0gZnVuY3Rpb24gZGVjb2RlKGlucHV0KSB7XG5cdC8vIERvbid0IHVzZSBVQ1MtMi5cblx0dmFyIG91dHB1dCA9IFtdO1xuXHR2YXIgaW5wdXRMZW5ndGggPSBpbnB1dC5sZW5ndGg7XG5cdHZhciBpID0gMDtcblx0dmFyIG4gPSBpbml0aWFsTjtcblx0dmFyIGJpYXMgPSBpbml0aWFsQmlhcztcblxuXHQvLyBIYW5kbGUgdGhlIGJhc2ljIGNvZGUgcG9pbnRzOiBsZXQgYGJhc2ljYCBiZSB0aGUgbnVtYmVyIG9mIGlucHV0IGNvZGVcblx0Ly8gcG9pbnRzIGJlZm9yZSB0aGUgbGFzdCBkZWxpbWl0ZXIsIG9yIGAwYCBpZiB0aGVyZSBpcyBub25lLCB0aGVuIGNvcHlcblx0Ly8gdGhlIGZpcnN0IGJhc2ljIGNvZGUgcG9pbnRzIHRvIHRoZSBvdXRwdXQuXG5cblx0dmFyIGJhc2ljID0gaW5wdXQubGFzdEluZGV4T2YoZGVsaW1pdGVyKTtcblx0aWYgKGJhc2ljIDwgMCkge1xuXHRcdGJhc2ljID0gMDtcblx0fVxuXG5cdGZvciAodmFyIGogPSAwOyBqIDwgYmFzaWM7ICsraikge1xuXHRcdC8vIGlmIGl0J3Mgbm90IGEgYmFzaWMgY29kZSBwb2ludFxuXHRcdGlmIChpbnB1dC5jaGFyQ29kZUF0KGopID49IDB4ODApIHtcblx0XHRcdGVycm9yJDEoJ25vdC1iYXNpYycpO1xuXHRcdH1cblx0XHRvdXRwdXQucHVzaChpbnB1dC5jaGFyQ29kZUF0KGopKTtcblx0fVxuXG5cdC8vIE1haW4gZGVjb2RpbmcgbG9vcDogc3RhcnQganVzdCBhZnRlciB0aGUgbGFzdCBkZWxpbWl0ZXIgaWYgYW55IGJhc2ljIGNvZGVcblx0Ly8gcG9pbnRzIHdlcmUgY29waWVkOyBzdGFydCBhdCB0aGUgYmVnaW5uaW5nIG90aGVyd2lzZS5cblxuXHRmb3IgKHZhciBpbmRleCA9IGJhc2ljID4gMCA/IGJhc2ljICsgMSA6IDA7IGluZGV4IDwgaW5wdXRMZW5ndGg7KSAvKiBubyBmaW5hbCBleHByZXNzaW9uICove1xuXG5cdFx0Ly8gYGluZGV4YCBpcyB0aGUgaW5kZXggb2YgdGhlIG5leHQgY2hhcmFjdGVyIHRvIGJlIGNvbnN1bWVkLlxuXHRcdC8vIERlY29kZSBhIGdlbmVyYWxpemVkIHZhcmlhYmxlLWxlbmd0aCBpbnRlZ2VyIGludG8gYGRlbHRhYCxcblx0XHQvLyB3aGljaCBnZXRzIGFkZGVkIHRvIGBpYC4gVGhlIG92ZXJmbG93IGNoZWNraW5nIGlzIGVhc2llclxuXHRcdC8vIGlmIHdlIGluY3JlYXNlIGBpYCBhcyB3ZSBnbywgdGhlbiBzdWJ0cmFjdCBvZmYgaXRzIHN0YXJ0aW5nXG5cdFx0Ly8gdmFsdWUgYXQgdGhlIGVuZCB0byBvYnRhaW4gYGRlbHRhYC5cblx0XHR2YXIgb2xkaSA9IGk7XG5cdFx0Zm9yICh2YXIgdyA9IDEsIGsgPSBiYXNlOzsgLyogbm8gY29uZGl0aW9uICovayArPSBiYXNlKSB7XG5cblx0XHRcdGlmIChpbmRleCA+PSBpbnB1dExlbmd0aCkge1xuXHRcdFx0XHRlcnJvciQxKCdpbnZhbGlkLWlucHV0Jyk7XG5cdFx0XHR9XG5cblx0XHRcdHZhciBkaWdpdCA9IGJhc2ljVG9EaWdpdChpbnB1dC5jaGFyQ29kZUF0KGluZGV4KyspKTtcblxuXHRcdFx0aWYgKGRpZ2l0ID49IGJhc2UgfHwgZGlnaXQgPiBmbG9vcigobWF4SW50IC0gaSkgLyB3KSkge1xuXHRcdFx0XHRlcnJvciQxKCdvdmVyZmxvdycpO1xuXHRcdFx0fVxuXG5cdFx0XHRpICs9IGRpZ2l0ICogdztcblx0XHRcdHZhciB0ID0gayA8PSBiaWFzID8gdE1pbiA6IGsgPj0gYmlhcyArIHRNYXggPyB0TWF4IDogayAtIGJpYXM7XG5cblx0XHRcdGlmIChkaWdpdCA8IHQpIHtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cblx0XHRcdHZhciBiYXNlTWludXNUID0gYmFzZSAtIHQ7XG5cdFx0XHRpZiAodyA+IGZsb29yKG1heEludCAvIGJhc2VNaW51c1QpKSB7XG5cdFx0XHRcdGVycm9yJDEoJ292ZXJmbG93Jyk7XG5cdFx0XHR9XG5cblx0XHRcdHcgKj0gYmFzZU1pbnVzVDtcblx0XHR9XG5cblx0XHR2YXIgb3V0ID0gb3V0cHV0Lmxlbmd0aCArIDE7XG5cdFx0YmlhcyA9IGFkYXB0KGkgLSBvbGRpLCBvdXQsIG9sZGkgPT0gMCk7XG5cblx0XHQvLyBgaWAgd2FzIHN1cHBvc2VkIHRvIHdyYXAgYXJvdW5kIGZyb20gYG91dGAgdG8gYDBgLFxuXHRcdC8vIGluY3JlbWVudGluZyBgbmAgZWFjaCB0aW1lLCBzbyB3ZSdsbCBmaXggdGhhdCBub3c6XG5cdFx0aWYgKGZsb29yKGkgLyBvdXQpID4gbWF4SW50IC0gbikge1xuXHRcdFx0ZXJyb3IkMSgnb3ZlcmZsb3cnKTtcblx0XHR9XG5cblx0XHRuICs9IGZsb29yKGkgLyBvdXQpO1xuXHRcdGkgJT0gb3V0O1xuXG5cdFx0Ly8gSW5zZXJ0IGBuYCBhdCBwb3NpdGlvbiBgaWAgb2YgdGhlIG91dHB1dC5cblx0XHRvdXRwdXQuc3BsaWNlKGkrKywgMCwgbik7XG5cdH1cblxuXHRyZXR1cm4gU3RyaW5nLmZyb21Db2RlUG9pbnQuYXBwbHkoU3RyaW5nLCBvdXRwdXQpO1xufTtcblxuLyoqXG4gKiBDb252ZXJ0cyBhIHN0cmluZyBvZiBVbmljb2RlIHN5bWJvbHMgKGUuZy4gYSBkb21haW4gbmFtZSBsYWJlbCkgdG8gYVxuICogUHVueWNvZGUgc3RyaW5nIG9mIEFTQ0lJLW9ubHkgc3ltYm9scy5cbiAqIEBtZW1iZXJPZiBwdW55Y29kZVxuICogQHBhcmFtIHtTdHJpbmd9IGlucHV0IFRoZSBzdHJpbmcgb2YgVW5pY29kZSBzeW1ib2xzLlxuICogQHJldHVybnMge1N0cmluZ30gVGhlIHJlc3VsdGluZyBQdW55Y29kZSBzdHJpbmcgb2YgQVNDSUktb25seSBzeW1ib2xzLlxuICovXG52YXIgZW5jb2RlID0gZnVuY3Rpb24gZW5jb2RlKGlucHV0KSB7XG5cdHZhciBvdXRwdXQgPSBbXTtcblxuXHQvLyBDb252ZXJ0IHRoZSBpbnB1dCBpbiBVQ1MtMiB0byBhbiBhcnJheSBvZiBVbmljb2RlIGNvZGUgcG9pbnRzLlxuXHRpbnB1dCA9IHVjczJkZWNvZGUoaW5wdXQpO1xuXG5cdC8vIENhY2hlIHRoZSBsZW5ndGguXG5cdHZhciBpbnB1dExlbmd0aCA9IGlucHV0Lmxlbmd0aDtcblxuXHQvLyBJbml0aWFsaXplIHRoZSBzdGF0ZS5cblx0dmFyIG4gPSBpbml0aWFsTjtcblx0dmFyIGRlbHRhID0gMDtcblx0dmFyIGJpYXMgPSBpbml0aWFsQmlhcztcblxuXHQvLyBIYW5kbGUgdGhlIGJhc2ljIGNvZGUgcG9pbnRzLlxuXHR2YXIgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbiA9IHRydWU7XG5cdHZhciBfZGlkSXRlcmF0b3JFcnJvciA9IGZhbHNlO1xuXHR2YXIgX2l0ZXJhdG9yRXJyb3IgPSB1bmRlZmluZWQ7XG5cblx0dHJ5IHtcblx0XHRmb3IgKHZhciBfaXRlcmF0b3IgPSBpbnB1dFtTeW1ib2wuaXRlcmF0b3JdKCksIF9zdGVwOyAhKF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24gPSAoX3N0ZXAgPSBfaXRlcmF0b3IubmV4dCgpKS5kb25lKTsgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbiA9IHRydWUpIHtcblx0XHRcdHZhciBfY3VycmVudFZhbHVlMiA9IF9zdGVwLnZhbHVlO1xuXG5cdFx0XHRpZiAoX2N1cnJlbnRWYWx1ZTIgPCAweDgwKSB7XG5cdFx0XHRcdG91dHB1dC5wdXNoKHN0cmluZ0Zyb21DaGFyQ29kZShfY3VycmVudFZhbHVlMikpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0X2RpZEl0ZXJhdG9yRXJyb3IgPSB0cnVlO1xuXHRcdF9pdGVyYXRvckVycm9yID0gZXJyO1xuXHR9IGZpbmFsbHkge1xuXHRcdHRyeSB7XG5cdFx0XHRpZiAoIV9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24gJiYgX2l0ZXJhdG9yLnJldHVybikge1xuXHRcdFx0XHRfaXRlcmF0b3IucmV0dXJuKCk7XG5cdFx0XHR9XG5cdFx0fSBmaW5hbGx5IHtcblx0XHRcdGlmIChfZGlkSXRlcmF0b3JFcnJvcikge1xuXHRcdFx0XHR0aHJvdyBfaXRlcmF0b3JFcnJvcjtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHR2YXIgYmFzaWNMZW5ndGggPSBvdXRwdXQubGVuZ3RoO1xuXHR2YXIgaGFuZGxlZENQQ291bnQgPSBiYXNpY0xlbmd0aDtcblxuXHQvLyBgaGFuZGxlZENQQ291bnRgIGlzIHRoZSBudW1iZXIgb2YgY29kZSBwb2ludHMgdGhhdCBoYXZlIGJlZW4gaGFuZGxlZDtcblx0Ly8gYGJhc2ljTGVuZ3RoYCBpcyB0aGUgbnVtYmVyIG9mIGJhc2ljIGNvZGUgcG9pbnRzLlxuXG5cdC8vIEZpbmlzaCB0aGUgYmFzaWMgc3RyaW5nIHdpdGggYSBkZWxpbWl0ZXIgdW5sZXNzIGl0J3MgZW1wdHkuXG5cdGlmIChiYXNpY0xlbmd0aCkge1xuXHRcdG91dHB1dC5wdXNoKGRlbGltaXRlcik7XG5cdH1cblxuXHQvLyBNYWluIGVuY29kaW5nIGxvb3A6XG5cdHdoaWxlIChoYW5kbGVkQ1BDb3VudCA8IGlucHV0TGVuZ3RoKSB7XG5cblx0XHQvLyBBbGwgbm9uLWJhc2ljIGNvZGUgcG9pbnRzIDwgbiBoYXZlIGJlZW4gaGFuZGxlZCBhbHJlYWR5LiBGaW5kIHRoZSBuZXh0XG5cdFx0Ly8gbGFyZ2VyIG9uZTpcblx0XHR2YXIgbSA9IG1heEludDtcblx0XHR2YXIgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjIgPSB0cnVlO1xuXHRcdHZhciBfZGlkSXRlcmF0b3JFcnJvcjIgPSBmYWxzZTtcblx0XHR2YXIgX2l0ZXJhdG9yRXJyb3IyID0gdW5kZWZpbmVkO1xuXG5cdFx0dHJ5IHtcblx0XHRcdGZvciAodmFyIF9pdGVyYXRvcjIgPSBpbnB1dFtTeW1ib2wuaXRlcmF0b3JdKCksIF9zdGVwMjsgIShfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMiA9IChfc3RlcDIgPSBfaXRlcmF0b3IyLm5leHQoKSkuZG9uZSk7IF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24yID0gdHJ1ZSkge1xuXHRcdFx0XHR2YXIgY3VycmVudFZhbHVlID0gX3N0ZXAyLnZhbHVlO1xuXG5cdFx0XHRcdGlmIChjdXJyZW50VmFsdWUgPj0gbiAmJiBjdXJyZW50VmFsdWUgPCBtKSB7XG5cdFx0XHRcdFx0bSA9IGN1cnJlbnRWYWx1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBJbmNyZWFzZSBgZGVsdGFgIGVub3VnaCB0byBhZHZhbmNlIHRoZSBkZWNvZGVyJ3MgPG4saT4gc3RhdGUgdG8gPG0sMD4sXG5cdFx0XHQvLyBidXQgZ3VhcmQgYWdhaW5zdCBvdmVyZmxvdy5cblx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdF9kaWRJdGVyYXRvckVycm9yMiA9IHRydWU7XG5cdFx0XHRfaXRlcmF0b3JFcnJvcjIgPSBlcnI7XG5cdFx0fSBmaW5hbGx5IHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGlmICghX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjIgJiYgX2l0ZXJhdG9yMi5yZXR1cm4pIHtcblx0XHRcdFx0XHRfaXRlcmF0b3IyLnJldHVybigpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGZpbmFsbHkge1xuXHRcdFx0XHRpZiAoX2RpZEl0ZXJhdG9yRXJyb3IyKSB7XG5cdFx0XHRcdFx0dGhyb3cgX2l0ZXJhdG9yRXJyb3IyO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dmFyIGhhbmRsZWRDUENvdW50UGx1c09uZSA9IGhhbmRsZWRDUENvdW50ICsgMTtcblx0XHRpZiAobSAtIG4gPiBmbG9vcigobWF4SW50IC0gZGVsdGEpIC8gaGFuZGxlZENQQ291bnRQbHVzT25lKSkge1xuXHRcdFx0ZXJyb3IkMSgnb3ZlcmZsb3cnKTtcblx0XHR9XG5cblx0XHRkZWx0YSArPSAobSAtIG4pICogaGFuZGxlZENQQ291bnRQbHVzT25lO1xuXHRcdG4gPSBtO1xuXG5cdFx0dmFyIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24zID0gdHJ1ZTtcblx0XHR2YXIgX2RpZEl0ZXJhdG9yRXJyb3IzID0gZmFsc2U7XG5cdFx0dmFyIF9pdGVyYXRvckVycm9yMyA9IHVuZGVmaW5lZDtcblxuXHRcdHRyeSB7XG5cdFx0XHRmb3IgKHZhciBfaXRlcmF0b3IzID0gaW5wdXRbU3ltYm9sLml0ZXJhdG9yXSgpLCBfc3RlcDM7ICEoX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjMgPSAoX3N0ZXAzID0gX2l0ZXJhdG9yMy5uZXh0KCkpLmRvbmUpOyBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMyA9IHRydWUpIHtcblx0XHRcdFx0dmFyIF9jdXJyZW50VmFsdWUgPSBfc3RlcDMudmFsdWU7XG5cblx0XHRcdFx0aWYgKF9jdXJyZW50VmFsdWUgPCBuICYmICsrZGVsdGEgPiBtYXhJbnQpIHtcblx0XHRcdFx0XHRlcnJvciQxKCdvdmVyZmxvdycpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChfY3VycmVudFZhbHVlID09IG4pIHtcblx0XHRcdFx0XHQvLyBSZXByZXNlbnQgZGVsdGEgYXMgYSBnZW5lcmFsaXplZCB2YXJpYWJsZS1sZW5ndGggaW50ZWdlci5cblx0XHRcdFx0XHR2YXIgcSA9IGRlbHRhO1xuXHRcdFx0XHRcdGZvciAodmFyIGsgPSBiYXNlOzsgLyogbm8gY29uZGl0aW9uICovayArPSBiYXNlKSB7XG5cdFx0XHRcdFx0XHR2YXIgdCA9IGsgPD0gYmlhcyA/IHRNaW4gOiBrID49IGJpYXMgKyB0TWF4ID8gdE1heCA6IGsgLSBiaWFzO1xuXHRcdFx0XHRcdFx0aWYgKHEgPCB0KSB7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0dmFyIHFNaW51c1QgPSBxIC0gdDtcblx0XHRcdFx0XHRcdHZhciBiYXNlTWludXNUID0gYmFzZSAtIHQ7XG5cdFx0XHRcdFx0XHRvdXRwdXQucHVzaChzdHJpbmdGcm9tQ2hhckNvZGUoZGlnaXRUb0Jhc2ljKHQgKyBxTWludXNUICUgYmFzZU1pbnVzVCwgMCkpKTtcblx0XHRcdFx0XHRcdHEgPSBmbG9vcihxTWludXNUIC8gYmFzZU1pbnVzVCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0b3V0cHV0LnB1c2goc3RyaW5nRnJvbUNoYXJDb2RlKGRpZ2l0VG9CYXNpYyhxLCAwKSkpO1xuXHRcdFx0XHRcdGJpYXMgPSBhZGFwdChkZWx0YSwgaGFuZGxlZENQQ291bnRQbHVzT25lLCBoYW5kbGVkQ1BDb3VudCA9PSBiYXNpY0xlbmd0aCk7XG5cdFx0XHRcdFx0ZGVsdGEgPSAwO1xuXHRcdFx0XHRcdCsraGFuZGxlZENQQ291bnQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdF9kaWRJdGVyYXRvckVycm9yMyA9IHRydWU7XG5cdFx0XHRfaXRlcmF0b3JFcnJvcjMgPSBlcnI7XG5cdFx0fSBmaW5hbGx5IHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGlmICghX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjMgJiYgX2l0ZXJhdG9yMy5yZXR1cm4pIHtcblx0XHRcdFx0XHRfaXRlcmF0b3IzLnJldHVybigpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGZpbmFsbHkge1xuXHRcdFx0XHRpZiAoX2RpZEl0ZXJhdG9yRXJyb3IzKSB7XG5cdFx0XHRcdFx0dGhyb3cgX2l0ZXJhdG9yRXJyb3IzO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0KytkZWx0YTtcblx0XHQrK247XG5cdH1cblx0cmV0dXJuIG91dHB1dC5qb2luKCcnKTtcbn07XG5cbi8qKlxuICogQ29udmVydHMgYSBQdW55Y29kZSBzdHJpbmcgcmVwcmVzZW50aW5nIGEgZG9tYWluIG5hbWUgb3IgYW4gZW1haWwgYWRkcmVzc1xuICogdG8gVW5pY29kZS4gT25seSB0aGUgUHVueWNvZGVkIHBhcnRzIG9mIHRoZSBpbnB1dCB3aWxsIGJlIGNvbnZlcnRlZCwgaS5lLlxuICogaXQgZG9lc24ndCBtYXR0ZXIgaWYgeW91IGNhbGwgaXQgb24gYSBzdHJpbmcgdGhhdCBoYXMgYWxyZWFkeSBiZWVuXG4gKiBjb252ZXJ0ZWQgdG8gVW5pY29kZS5cbiAqIEBtZW1iZXJPZiBwdW55Y29kZVxuICogQHBhcmFtIHtTdHJpbmd9IGlucHV0IFRoZSBQdW55Y29kZWQgZG9tYWluIG5hbWUgb3IgZW1haWwgYWRkcmVzcyB0b1xuICogY29udmVydCB0byBVbmljb2RlLlxuICogQHJldHVybnMge1N0cmluZ30gVGhlIFVuaWNvZGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIFB1bnljb2RlXG4gKiBzdHJpbmcuXG4gKi9cbnZhciB0b1VuaWNvZGUgPSBmdW5jdGlvbiB0b1VuaWNvZGUoaW5wdXQpIHtcblx0cmV0dXJuIG1hcERvbWFpbihpbnB1dCwgZnVuY3Rpb24gKHN0cmluZykge1xuXHRcdHJldHVybiByZWdleFB1bnljb2RlLnRlc3Qoc3RyaW5nKSA/IGRlY29kZShzdHJpbmcuc2xpY2UoNCkudG9Mb3dlckNhc2UoKSkgOiBzdHJpbmc7XG5cdH0pO1xufTtcblxuLyoqXG4gKiBDb252ZXJ0cyBhIFVuaWNvZGUgc3RyaW5nIHJlcHJlc2VudGluZyBhIGRvbWFpbiBuYW1lIG9yIGFuIGVtYWlsIGFkZHJlc3MgdG9cbiAqIFB1bnljb2RlLiBPbmx5IHRoZSBub24tQVNDSUkgcGFydHMgb2YgdGhlIGRvbWFpbiBuYW1lIHdpbGwgYmUgY29udmVydGVkLFxuICogaS5lLiBpdCBkb2Vzbid0IG1hdHRlciBpZiB5b3UgY2FsbCBpdCB3aXRoIGEgZG9tYWluIHRoYXQncyBhbHJlYWR5IGluXG4gKiBBU0NJSS5cbiAqIEBtZW1iZXJPZiBwdW55Y29kZVxuICogQHBhcmFtIHtTdHJpbmd9IGlucHV0IFRoZSBkb21haW4gbmFtZSBvciBlbWFpbCBhZGRyZXNzIHRvIGNvbnZlcnQsIGFzIGFcbiAqIFVuaWNvZGUgc3RyaW5nLlxuICogQHJldHVybnMge1N0cmluZ30gVGhlIFB1bnljb2RlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBnaXZlbiBkb21haW4gbmFtZSBvclxuICogZW1haWwgYWRkcmVzcy5cbiAqL1xudmFyIHRvQVNDSUkgPSBmdW5jdGlvbiB0b0FTQ0lJKGlucHV0KSB7XG5cdHJldHVybiBtYXBEb21haW4oaW5wdXQsIGZ1bmN0aW9uIChzdHJpbmcpIHtcblx0XHRyZXR1cm4gcmVnZXhOb25BU0NJSS50ZXN0KHN0cmluZykgPyAneG4tLScgKyBlbmNvZGUoc3RyaW5nKSA6IHN0cmluZztcblx0fSk7XG59O1xuXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuLyoqIERlZmluZSB0aGUgcHVibGljIEFQSSAqL1xudmFyIHB1bnljb2RlID0ge1xuXHQvKipcbiAgKiBBIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIGN1cnJlbnQgUHVueWNvZGUuanMgdmVyc2lvbiBudW1iZXIuXG4gICogQG1lbWJlck9mIHB1bnljb2RlXG4gICogQHR5cGUgU3RyaW5nXG4gICovXG5cdCd2ZXJzaW9uJzogJzIuMS4wJyxcblx0LyoqXG4gICogQW4gb2JqZWN0IG9mIG1ldGhvZHMgdG8gY29udmVydCBmcm9tIEphdmFTY3JpcHQncyBpbnRlcm5hbCBjaGFyYWN0ZXJcbiAgKiByZXByZXNlbnRhdGlvbiAoVUNTLTIpIHRvIFVuaWNvZGUgY29kZSBwb2ludHMsIGFuZCBiYWNrLlxuICAqIEBzZWUgPGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LWVuY29kaW5nPlxuICAqIEBtZW1iZXJPZiBwdW55Y29kZVxuICAqIEB0eXBlIE9iamVjdFxuICAqL1xuXHQndWNzMic6IHtcblx0XHQnZGVjb2RlJzogdWNzMmRlY29kZSxcblx0XHQnZW5jb2RlJzogdWNzMmVuY29kZVxuXHR9LFxuXHQnZGVjb2RlJzogZGVjb2RlLFxuXHQnZW5jb2RlJzogZW5jb2RlLFxuXHQndG9BU0NJSSc6IHRvQVNDSUksXG5cdCd0b1VuaWNvZGUnOiB0b1VuaWNvZGVcbn07XG5cbi8qKlxuICogVVJJLmpzXG4gKlxuICogQGZpbGVvdmVydmlldyBBbiBSRkMgMzk4NiBjb21wbGlhbnQsIHNjaGVtZSBleHRlbmRhYmxlIFVSSSBwYXJzaW5nL3ZhbGlkYXRpbmcvcmVzb2x2aW5nIGxpYnJhcnkgZm9yIEphdmFTY3JpcHQuXG4gKiBAYXV0aG9yIDxhIGhyZWY9XCJtYWlsdG86Z2FyeS5jb3VydEBnbWFpbC5jb21cIj5HYXJ5IENvdXJ0PC9hPlxuICogQHNlZSBodHRwOi8vZ2l0aHViLmNvbS9nYXJ5Y291cnQvdXJpLWpzXG4gKi9cbi8qKlxuICogQ29weXJpZ2h0IDIwMTEgR2FyeSBDb3VydC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmVcbiAqIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuICpcbiAqICAgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mXG4gKiAgICAgICBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG4gKlxuICogICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3RcbiAqICAgICAgIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzXG4gKiAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG4gKlxuICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBHQVJZIENPVVJUIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRFxuICogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEdBUlkgQ09VUlQgT1JcbiAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SXG4gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SXG4gKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OXG4gKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HXG4gKiBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUZcbiAqIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuICpcbiAqIFRoZSB2aWV3cyBhbmQgY29uY2x1c2lvbnMgY29udGFpbmVkIGluIHRoZSBzb2Z0d2FyZSBhbmQgZG9jdW1lbnRhdGlvbiBhcmUgdGhvc2Ugb2YgdGhlXG4gKiBhdXRob3JzIGFuZCBzaG91bGQgbm90IGJlIGludGVycHJldGVkIGFzIHJlcHJlc2VudGluZyBvZmZpY2lhbCBwb2xpY2llcywgZWl0aGVyIGV4cHJlc3NlZFxuICogb3IgaW1wbGllZCwgb2YgR2FyeSBDb3VydC5cbiAqL1xudmFyIFNDSEVNRVMgPSB7fTtcbmZ1bmN0aW9uIHBjdEVuY0NoYXIoY2hyKSB7XG4gICAgdmFyIGMgPSBjaHIuY2hhckNvZGVBdCgwKTtcbiAgICB2YXIgZSA9IHZvaWQgMDtcbiAgICBpZiAoYyA8IDE2KSBlID0gXCIlMFwiICsgYy50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTtlbHNlIGlmIChjIDwgMTI4KSBlID0gXCIlXCIgKyBjLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpO2Vsc2UgaWYgKGMgPCAyMDQ4KSBlID0gXCIlXCIgKyAoYyA+PiA2IHwgMTkyKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKSArIFwiJVwiICsgKGMgJiA2MyB8IDEyOCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7ZWxzZSBlID0gXCIlXCIgKyAoYyA+PiAxMiB8IDIyNCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCkgKyBcIiVcIiArIChjID4+IDYgJiA2MyB8IDEyOCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCkgKyBcIiVcIiArIChjICYgNjMgfCAxMjgpLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpO1xuICAgIHJldHVybiBlO1xufVxuZnVuY3Rpb24gcGN0RGVjQ2hhcnMoc3RyKSB7XG4gICAgdmFyIG5ld1N0ciA9IFwiXCI7XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBpbCA9IHN0ci5sZW5ndGg7XG4gICAgd2hpbGUgKGkgPCBpbCkge1xuICAgICAgICB2YXIgYyA9IHBhcnNlSW50KHN0ci5zdWJzdHIoaSArIDEsIDIpLCAxNik7XG4gICAgICAgIGlmIChjIDwgMTI4KSB7XG4gICAgICAgICAgICBuZXdTdHIgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShjKTtcbiAgICAgICAgICAgIGkgKz0gMztcbiAgICAgICAgfSBlbHNlIGlmIChjID49IDE5NCAmJiBjIDwgMjI0KSB7XG4gICAgICAgICAgICBpZiAoaWwgLSBpID49IDYpIHtcbiAgICAgICAgICAgICAgICB2YXIgYzIgPSBwYXJzZUludChzdHIuc3Vic3RyKGkgKyA0LCAyKSwgMTYpO1xuICAgICAgICAgICAgICAgIG5ld1N0ciArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKChjICYgMzEpIDw8IDYgfCBjMiAmIDYzKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbmV3U3RyICs9IHN0ci5zdWJzdHIoaSwgNik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpICs9IDY7XG4gICAgICAgIH0gZWxzZSBpZiAoYyA+PSAyMjQpIHtcbiAgICAgICAgICAgIGlmIChpbCAtIGkgPj0gOSkge1xuICAgICAgICAgICAgICAgIHZhciBfYyA9IHBhcnNlSW50KHN0ci5zdWJzdHIoaSArIDQsIDIpLCAxNik7XG4gICAgICAgICAgICAgICAgdmFyIGMzID0gcGFyc2VJbnQoc3RyLnN1YnN0cihpICsgNywgMiksIDE2KTtcbiAgICAgICAgICAgICAgICBuZXdTdHIgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSgoYyAmIDE1KSA8PCAxMiB8IChfYyAmIDYzKSA8PCA2IHwgYzMgJiA2Myk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG5ld1N0ciArPSBzdHIuc3Vic3RyKGksIDkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaSArPSA5O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbmV3U3RyICs9IHN0ci5zdWJzdHIoaSwgMyk7XG4gICAgICAgICAgICBpICs9IDM7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5ld1N0cjtcbn1cbmZ1bmN0aW9uIF9ub3JtYWxpemVDb21wb25lbnRFbmNvZGluZyhjb21wb25lbnRzLCBwcm90b2NvbCkge1xuICAgIGZ1bmN0aW9uIGRlY29kZVVucmVzZXJ2ZWQoc3RyKSB7XG4gICAgICAgIHZhciBkZWNTdHIgPSBwY3REZWNDaGFycyhzdHIpO1xuICAgICAgICByZXR1cm4gIWRlY1N0ci5tYXRjaChwcm90b2NvbC5VTlJFU0VSVkVEKSA/IHN0ciA6IGRlY1N0cjtcbiAgICB9XG4gICAgaWYgKGNvbXBvbmVudHMuc2NoZW1lKSBjb21wb25lbnRzLnNjaGVtZSA9IFN0cmluZyhjb21wb25lbnRzLnNjaGVtZSkucmVwbGFjZShwcm90b2NvbC5QQ1RfRU5DT0RFRCwgZGVjb2RlVW5yZXNlcnZlZCkudG9Mb3dlckNhc2UoKS5yZXBsYWNlKHByb3RvY29sLk5PVF9TQ0hFTUUsIFwiXCIpO1xuICAgIGlmIChjb21wb25lbnRzLnVzZXJpbmZvICE9PSB1bmRlZmluZWQpIGNvbXBvbmVudHMudXNlcmluZm8gPSBTdHJpbmcoY29tcG9uZW50cy51c2VyaW5mbykucmVwbGFjZShwcm90b2NvbC5QQ1RfRU5DT0RFRCwgZGVjb2RlVW5yZXNlcnZlZCkucmVwbGFjZShwcm90b2NvbC5OT1RfVVNFUklORk8sIHBjdEVuY0NoYXIpLnJlcGxhY2UocHJvdG9jb2wuUENUX0VOQ09ERUQsIHRvVXBwZXJDYXNlKTtcbiAgICBpZiAoY29tcG9uZW50cy5ob3N0ICE9PSB1bmRlZmluZWQpIGNvbXBvbmVudHMuaG9zdCA9IFN0cmluZyhjb21wb25lbnRzLmhvc3QpLnJlcGxhY2UocHJvdG9jb2wuUENUX0VOQ09ERUQsIGRlY29kZVVucmVzZXJ2ZWQpLnRvTG93ZXJDYXNlKCkucmVwbGFjZShwcm90b2NvbC5OT1RfSE9TVCwgcGN0RW5jQ2hhcikucmVwbGFjZShwcm90b2NvbC5QQ1RfRU5DT0RFRCwgdG9VcHBlckNhc2UpO1xuICAgIGlmIChjb21wb25lbnRzLnBhdGggIT09IHVuZGVmaW5lZCkgY29tcG9uZW50cy5wYXRoID0gU3RyaW5nKGNvbXBvbmVudHMucGF0aCkucmVwbGFjZShwcm90b2NvbC5QQ1RfRU5DT0RFRCwgZGVjb2RlVW5yZXNlcnZlZCkucmVwbGFjZShjb21wb25lbnRzLnNjaGVtZSA/IHByb3RvY29sLk5PVF9QQVRIIDogcHJvdG9jb2wuTk9UX1BBVEhfTk9TQ0hFTUUsIHBjdEVuY0NoYXIpLnJlcGxhY2UocHJvdG9jb2wuUENUX0VOQ09ERUQsIHRvVXBwZXJDYXNlKTtcbiAgICBpZiAoY29tcG9uZW50cy5xdWVyeSAhPT0gdW5kZWZpbmVkKSBjb21wb25lbnRzLnF1ZXJ5ID0gU3RyaW5nKGNvbXBvbmVudHMucXVlcnkpLnJlcGxhY2UocHJvdG9jb2wuUENUX0VOQ09ERUQsIGRlY29kZVVucmVzZXJ2ZWQpLnJlcGxhY2UocHJvdG9jb2wuTk9UX1FVRVJZLCBwY3RFbmNDaGFyKS5yZXBsYWNlKHByb3RvY29sLlBDVF9FTkNPREVELCB0b1VwcGVyQ2FzZSk7XG4gICAgaWYgKGNvbXBvbmVudHMuZnJhZ21lbnQgIT09IHVuZGVmaW5lZCkgY29tcG9uZW50cy5mcmFnbWVudCA9IFN0cmluZyhjb21wb25lbnRzLmZyYWdtZW50KS5yZXBsYWNlKHByb3RvY29sLlBDVF9FTkNPREVELCBkZWNvZGVVbnJlc2VydmVkKS5yZXBsYWNlKHByb3RvY29sLk5PVF9GUkFHTUVOVCwgcGN0RW5jQ2hhcikucmVwbGFjZShwcm90b2NvbC5QQ1RfRU5DT0RFRCwgdG9VcHBlckNhc2UpO1xuICAgIHJldHVybiBjb21wb25lbnRzO1xufVxuXG5mdW5jdGlvbiBfc3RyaXBMZWFkaW5nWmVyb3Moc3RyKSB7XG4gICAgcmV0dXJuIHN0ci5yZXBsYWNlKC9eMCooLiopLywgXCIkMVwiKSB8fCBcIjBcIjtcbn1cbmZ1bmN0aW9uIF9ub3JtYWxpemVJUHY0KGhvc3QsIHByb3RvY29sKSB7XG4gICAgdmFyIG1hdGNoZXMgPSBob3N0Lm1hdGNoKHByb3RvY29sLklQVjRBRERSRVNTKSB8fCBbXTtcblxuICAgIHZhciBfbWF0Y2hlcyA9IHNsaWNlZFRvQXJyYXkobWF0Y2hlcywgMiksXG4gICAgICAgIGFkZHJlc3MgPSBfbWF0Y2hlc1sxXTtcblxuICAgIGlmIChhZGRyZXNzKSB7XG4gICAgICAgIHJldHVybiBhZGRyZXNzLnNwbGl0KFwiLlwiKS5tYXAoX3N0cmlwTGVhZGluZ1plcm9zKS5qb2luKFwiLlwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gaG9zdDtcbiAgICB9XG59XG5mdW5jdGlvbiBfbm9ybWFsaXplSVB2Nihob3N0LCBwcm90b2NvbCkge1xuICAgIHZhciBtYXRjaGVzID0gaG9zdC5tYXRjaChwcm90b2NvbC5JUFY2QUREUkVTUykgfHwgW107XG5cbiAgICB2YXIgX21hdGNoZXMyID0gc2xpY2VkVG9BcnJheShtYXRjaGVzLCAzKSxcbiAgICAgICAgYWRkcmVzcyA9IF9tYXRjaGVzMlsxXSxcbiAgICAgICAgem9uZSA9IF9tYXRjaGVzMlsyXTtcblxuICAgIGlmIChhZGRyZXNzKSB7XG4gICAgICAgIHZhciBfYWRkcmVzcyR0b0xvd2VyQ2FzZSQgPSBhZGRyZXNzLnRvTG93ZXJDYXNlKCkuc3BsaXQoJzo6JykucmV2ZXJzZSgpLFxuICAgICAgICAgICAgX2FkZHJlc3MkdG9Mb3dlckNhc2UkMiA9IHNsaWNlZFRvQXJyYXkoX2FkZHJlc3MkdG9Mb3dlckNhc2UkLCAyKSxcbiAgICAgICAgICAgIGxhc3QgPSBfYWRkcmVzcyR0b0xvd2VyQ2FzZSQyWzBdLFxuICAgICAgICAgICAgZmlyc3QgPSBfYWRkcmVzcyR0b0xvd2VyQ2FzZSQyWzFdO1xuXG4gICAgICAgIHZhciBmaXJzdEZpZWxkcyA9IGZpcnN0ID8gZmlyc3Quc3BsaXQoXCI6XCIpLm1hcChfc3RyaXBMZWFkaW5nWmVyb3MpIDogW107XG4gICAgICAgIHZhciBsYXN0RmllbGRzID0gbGFzdC5zcGxpdChcIjpcIikubWFwKF9zdHJpcExlYWRpbmdaZXJvcyk7XG4gICAgICAgIHZhciBpc0xhc3RGaWVsZElQdjRBZGRyZXNzID0gcHJvdG9jb2wuSVBWNEFERFJFU1MudGVzdChsYXN0RmllbGRzW2xhc3RGaWVsZHMubGVuZ3RoIC0gMV0pO1xuICAgICAgICB2YXIgZmllbGRDb3VudCA9IGlzTGFzdEZpZWxkSVB2NEFkZHJlc3MgPyA3IDogODtcbiAgICAgICAgdmFyIGxhc3RGaWVsZHNTdGFydCA9IGxhc3RGaWVsZHMubGVuZ3RoIC0gZmllbGRDb3VudDtcbiAgICAgICAgdmFyIGZpZWxkcyA9IEFycmF5KGZpZWxkQ291bnQpO1xuICAgICAgICBmb3IgKHZhciB4ID0gMDsgeCA8IGZpZWxkQ291bnQ7ICsreCkge1xuICAgICAgICAgICAgZmllbGRzW3hdID0gZmlyc3RGaWVsZHNbeF0gfHwgbGFzdEZpZWxkc1tsYXN0RmllbGRzU3RhcnQgKyB4XSB8fCAnJztcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNMYXN0RmllbGRJUHY0QWRkcmVzcykge1xuICAgICAgICAgICAgZmllbGRzW2ZpZWxkQ291bnQgLSAxXSA9IF9ub3JtYWxpemVJUHY0KGZpZWxkc1tmaWVsZENvdW50IC0gMV0sIHByb3RvY29sKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgYWxsWmVyb0ZpZWxkcyA9IGZpZWxkcy5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgZmllbGQsIGluZGV4KSB7XG4gICAgICAgICAgICBpZiAoIWZpZWxkIHx8IGZpZWxkID09PSBcIjBcIikge1xuICAgICAgICAgICAgICAgIHZhciBsYXN0TG9uZ2VzdCA9IGFjY1thY2MubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgICAgaWYgKGxhc3RMb25nZXN0ICYmIGxhc3RMb25nZXN0LmluZGV4ICsgbGFzdExvbmdlc3QubGVuZ3RoID09PSBpbmRleCkge1xuICAgICAgICAgICAgICAgICAgICBsYXN0TG9uZ2VzdC5sZW5ndGgrKztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBhY2MucHVzaCh7IGluZGV4OiBpbmRleCwgbGVuZ3RoOiAxIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgIH0sIFtdKTtcbiAgICAgICAgdmFyIGxvbmdlc3RaZXJvRmllbGRzID0gYWxsWmVyb0ZpZWxkcy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICByZXR1cm4gYi5sZW5ndGggLSBhLmxlbmd0aDtcbiAgICAgICAgfSlbMF07XG4gICAgICAgIHZhciBuZXdIb3N0ID0gdm9pZCAwO1xuICAgICAgICBpZiAobG9uZ2VzdFplcm9GaWVsZHMgJiYgbG9uZ2VzdFplcm9GaWVsZHMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgdmFyIG5ld0ZpcnN0ID0gZmllbGRzLnNsaWNlKDAsIGxvbmdlc3RaZXJvRmllbGRzLmluZGV4KTtcbiAgICAgICAgICAgIHZhciBuZXdMYXN0ID0gZmllbGRzLnNsaWNlKGxvbmdlc3RaZXJvRmllbGRzLmluZGV4ICsgbG9uZ2VzdFplcm9GaWVsZHMubGVuZ3RoKTtcbiAgICAgICAgICAgIG5ld0hvc3QgPSBuZXdGaXJzdC5qb2luKFwiOlwiKSArIFwiOjpcIiArIG5ld0xhc3Quam9pbihcIjpcIik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBuZXdIb3N0ID0gZmllbGRzLmpvaW4oXCI6XCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh6b25lKSB7XG4gICAgICAgICAgICBuZXdIb3N0ICs9IFwiJVwiICsgem9uZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3SG9zdDtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gaG9zdDtcbiAgICB9XG59XG52YXIgVVJJX1BBUlNFID0gL14oPzooW146XFwvPyNdKyk6KT8oPzpcXC9cXC8oKD86KFteXFwvPyNAXSopQCk/KFxcW1teXFwvPyNcXF1dK1xcXXxbXlxcLz8jOl0qKSg/OlxcOihcXGQqKSk/KSk/KFtePyNdKikoPzpcXD8oW14jXSopKT8oPzojKCg/Oi58XFxufFxccikqKSk/L2k7XG52YXIgTk9fTUFUQ0hfSVNfVU5ERUZJTkVEID0gXCJcIi5tYXRjaCgvKCl7MH0vKVsxXSA9PT0gdW5kZWZpbmVkO1xuZnVuY3Rpb24gcGFyc2UodXJpU3RyaW5nKSB7XG4gICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuXG4gICAgdmFyIGNvbXBvbmVudHMgPSB7fTtcbiAgICB2YXIgcHJvdG9jb2wgPSBvcHRpb25zLmlyaSAhPT0gZmFsc2UgPyBJUklfUFJPVE9DT0wgOiBVUklfUFJPVE9DT0w7XG4gICAgaWYgKG9wdGlvbnMucmVmZXJlbmNlID09PSBcInN1ZmZpeFwiKSB1cmlTdHJpbmcgPSAob3B0aW9ucy5zY2hlbWUgPyBvcHRpb25zLnNjaGVtZSArIFwiOlwiIDogXCJcIikgKyBcIi8vXCIgKyB1cmlTdHJpbmc7XG4gICAgdmFyIG1hdGNoZXMgPSB1cmlTdHJpbmcubWF0Y2goVVJJX1BBUlNFKTtcbiAgICBpZiAobWF0Y2hlcykge1xuICAgICAgICBpZiAoTk9fTUFUQ0hfSVNfVU5ERUZJTkVEKSB7XG4gICAgICAgICAgICAvL3N0b3JlIGVhY2ggY29tcG9uZW50XG4gICAgICAgICAgICBjb21wb25lbnRzLnNjaGVtZSA9IG1hdGNoZXNbMV07XG4gICAgICAgICAgICBjb21wb25lbnRzLnVzZXJpbmZvID0gbWF0Y2hlc1szXTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuaG9zdCA9IG1hdGNoZXNbNF07XG4gICAgICAgICAgICBjb21wb25lbnRzLnBvcnQgPSBwYXJzZUludChtYXRjaGVzWzVdLCAxMCk7XG4gICAgICAgICAgICBjb21wb25lbnRzLnBhdGggPSBtYXRjaGVzWzZdIHx8IFwiXCI7XG4gICAgICAgICAgICBjb21wb25lbnRzLnF1ZXJ5ID0gbWF0Y2hlc1s3XTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuZnJhZ21lbnQgPSBtYXRjaGVzWzhdO1xuICAgICAgICAgICAgLy9maXggcG9ydCBudW1iZXJcbiAgICAgICAgICAgIGlmIChpc05hTihjb21wb25lbnRzLnBvcnQpKSB7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50cy5wb3J0ID0gbWF0Y2hlc1s1XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vSUUgRklYIGZvciBpbXByb3BlciBSZWdFeHAgbWF0Y2hpbmdcbiAgICAgICAgICAgIC8vc3RvcmUgZWFjaCBjb21wb25lbnRcbiAgICAgICAgICAgIGNvbXBvbmVudHMuc2NoZW1lID0gbWF0Y2hlc1sxXSB8fCB1bmRlZmluZWQ7XG4gICAgICAgICAgICBjb21wb25lbnRzLnVzZXJpbmZvID0gdXJpU3RyaW5nLmluZGV4T2YoXCJAXCIpICE9PSAtMSA/IG1hdGNoZXNbM10gOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICBjb21wb25lbnRzLmhvc3QgPSB1cmlTdHJpbmcuaW5kZXhPZihcIi8vXCIpICE9PSAtMSA/IG1hdGNoZXNbNF0gOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICBjb21wb25lbnRzLnBvcnQgPSBwYXJzZUludChtYXRjaGVzWzVdLCAxMCk7XG4gICAgICAgICAgICBjb21wb25lbnRzLnBhdGggPSBtYXRjaGVzWzZdIHx8IFwiXCI7XG4gICAgICAgICAgICBjb21wb25lbnRzLnF1ZXJ5ID0gdXJpU3RyaW5nLmluZGV4T2YoXCI/XCIpICE9PSAtMSA/IG1hdGNoZXNbN10gOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICBjb21wb25lbnRzLmZyYWdtZW50ID0gdXJpU3RyaW5nLmluZGV4T2YoXCIjXCIpICE9PSAtMSA/IG1hdGNoZXNbOF0gOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAvL2ZpeCBwb3J0IG51bWJlclxuICAgICAgICAgICAgaWYgKGlzTmFOKGNvbXBvbmVudHMucG9ydCkpIHtcbiAgICAgICAgICAgICAgICBjb21wb25lbnRzLnBvcnQgPSB1cmlTdHJpbmcubWF0Y2goL1xcL1xcLyg/Oi58XFxuKSpcXDooPzpcXC98XFw/fFxcI3wkKS8pID8gbWF0Y2hlc1s0XSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoY29tcG9uZW50cy5ob3N0KSB7XG4gICAgICAgICAgICAvL25vcm1hbGl6ZSBJUCBob3N0c1xuICAgICAgICAgICAgY29tcG9uZW50cy5ob3N0ID0gX25vcm1hbGl6ZUlQdjYoX25vcm1hbGl6ZUlQdjQoY29tcG9uZW50cy5ob3N0LCBwcm90b2NvbCksIHByb3RvY29sKTtcbiAgICAgICAgfVxuICAgICAgICAvL2RldGVybWluZSByZWZlcmVuY2UgdHlwZVxuICAgICAgICBpZiAoY29tcG9uZW50cy5zY2hlbWUgPT09IHVuZGVmaW5lZCAmJiBjb21wb25lbnRzLnVzZXJpbmZvID09PSB1bmRlZmluZWQgJiYgY29tcG9uZW50cy5ob3N0ID09PSB1bmRlZmluZWQgJiYgY29tcG9uZW50cy5wb3J0ID09PSB1bmRlZmluZWQgJiYgIWNvbXBvbmVudHMucGF0aCAmJiBjb21wb25lbnRzLnF1ZXJ5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNvbXBvbmVudHMucmVmZXJlbmNlID0gXCJzYW1lLWRvY3VtZW50XCI7XG4gICAgICAgIH0gZWxzZSBpZiAoY29tcG9uZW50cy5zY2hlbWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29tcG9uZW50cy5yZWZlcmVuY2UgPSBcInJlbGF0aXZlXCI7XG4gICAgICAgIH0gZWxzZSBpZiAoY29tcG9uZW50cy5mcmFnbWVudCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb21wb25lbnRzLnJlZmVyZW5jZSA9IFwiYWJzb2x1dGVcIjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbXBvbmVudHMucmVmZXJlbmNlID0gXCJ1cmlcIjtcbiAgICAgICAgfVxuICAgICAgICAvL2NoZWNrIGZvciByZWZlcmVuY2UgZXJyb3JzXG4gICAgICAgIGlmIChvcHRpb25zLnJlZmVyZW5jZSAmJiBvcHRpb25zLnJlZmVyZW5jZSAhPT0gXCJzdWZmaXhcIiAmJiBvcHRpb25zLnJlZmVyZW5jZSAhPT0gY29tcG9uZW50cy5yZWZlcmVuY2UpIHtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuZXJyb3IgPSBjb21wb25lbnRzLmVycm9yIHx8IFwiVVJJIGlzIG5vdCBhIFwiICsgb3B0aW9ucy5yZWZlcmVuY2UgKyBcIiByZWZlcmVuY2UuXCI7XG4gICAgICAgIH1cbiAgICAgICAgLy9maW5kIHNjaGVtZSBoYW5kbGVyXG4gICAgICAgIHZhciBzY2hlbWVIYW5kbGVyID0gU0NIRU1FU1sob3B0aW9ucy5zY2hlbWUgfHwgY29tcG9uZW50cy5zY2hlbWUgfHwgXCJcIikudG9Mb3dlckNhc2UoKV07XG4gICAgICAgIC8vY2hlY2sgaWYgc2NoZW1lIGNhbid0IGhhbmRsZSBJUklzXG4gICAgICAgIGlmICghb3B0aW9ucy51bmljb2RlU3VwcG9ydCAmJiAoIXNjaGVtZUhhbmRsZXIgfHwgIXNjaGVtZUhhbmRsZXIudW5pY29kZVN1cHBvcnQpKSB7XG4gICAgICAgICAgICAvL2lmIGhvc3QgY29tcG9uZW50IGlzIGEgZG9tYWluIG5hbWVcbiAgICAgICAgICAgIGlmIChjb21wb25lbnRzLmhvc3QgJiYgKG9wdGlvbnMuZG9tYWluSG9zdCB8fCBzY2hlbWVIYW5kbGVyICYmIHNjaGVtZUhhbmRsZXIuZG9tYWluSG9zdCkpIHtcbiAgICAgICAgICAgICAgICAvL2NvbnZlcnQgVW5pY29kZSBJRE4gLT4gQVNDSUkgSUROXG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50cy5ob3N0ID0gcHVueWNvZGUudG9BU0NJSShjb21wb25lbnRzLmhvc3QucmVwbGFjZShwcm90b2NvbC5QQ1RfRU5DT0RFRCwgcGN0RGVjQ2hhcnMpLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50cy5lcnJvciA9IGNvbXBvbmVudHMuZXJyb3IgfHwgXCJIb3N0J3MgZG9tYWluIG5hbWUgY2FuIG5vdCBiZSBjb252ZXJ0ZWQgdG8gQVNDSUkgdmlhIHB1bnljb2RlOiBcIiArIGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy9jb252ZXJ0IElSSSAtPiBVUklcbiAgICAgICAgICAgIF9ub3JtYWxpemVDb21wb25lbnRFbmNvZGluZyhjb21wb25lbnRzLCBVUklfUFJPVE9DT0wpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy9ub3JtYWxpemUgZW5jb2RpbmdzXG4gICAgICAgICAgICBfbm9ybWFsaXplQ29tcG9uZW50RW5jb2RpbmcoY29tcG9uZW50cywgcHJvdG9jb2wpO1xuICAgICAgICB9XG4gICAgICAgIC8vcGVyZm9ybSBzY2hlbWUgc3BlY2lmaWMgcGFyc2luZ1xuICAgICAgICBpZiAoc2NoZW1lSGFuZGxlciAmJiBzY2hlbWVIYW5kbGVyLnBhcnNlKSB7XG4gICAgICAgICAgICBzY2hlbWVIYW5kbGVyLnBhcnNlKGNvbXBvbmVudHMsIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgY29tcG9uZW50cy5lcnJvciA9IGNvbXBvbmVudHMuZXJyb3IgfHwgXCJVUkkgY2FuIG5vdCBiZSBwYXJzZWQuXCI7XG4gICAgfVxuICAgIHJldHVybiBjb21wb25lbnRzO1xufVxuXG5mdW5jdGlvbiBfcmVjb21wb3NlQXV0aG9yaXR5KGNvbXBvbmVudHMsIG9wdGlvbnMpIHtcbiAgICB2YXIgcHJvdG9jb2wgPSBvcHRpb25zLmlyaSAhPT0gZmFsc2UgPyBJUklfUFJPVE9DT0wgOiBVUklfUFJPVE9DT0w7XG4gICAgdmFyIHVyaVRva2VucyA9IFtdO1xuICAgIGlmIChjb21wb25lbnRzLnVzZXJpbmZvICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdXJpVG9rZW5zLnB1c2goY29tcG9uZW50cy51c2VyaW5mbyk7XG4gICAgICAgIHVyaVRva2Vucy5wdXNoKFwiQFwiKTtcbiAgICB9XG4gICAgaWYgKGNvbXBvbmVudHMuaG9zdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vbm9ybWFsaXplIElQIGhvc3RzLCBhZGQgYnJhY2tldHMgYW5kIGVzY2FwZSB6b25lIHNlcGFyYXRvciBmb3IgSVB2NlxuICAgICAgICB1cmlUb2tlbnMucHVzaChfbm9ybWFsaXplSVB2Nihfbm9ybWFsaXplSVB2NChTdHJpbmcoY29tcG9uZW50cy5ob3N0KSwgcHJvdG9jb2wpLCBwcm90b2NvbCkucmVwbGFjZShwcm90b2NvbC5JUFY2QUREUkVTUywgZnVuY3Rpb24gKF8sICQxLCAkMikge1xuICAgICAgICAgICAgcmV0dXJuIFwiW1wiICsgJDEgKyAoJDIgPyBcIiUyNVwiICsgJDIgOiBcIlwiKSArIFwiXVwiO1xuICAgICAgICB9KSk7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgY29tcG9uZW50cy5wb3J0ID09PSBcIm51bWJlclwiIHx8IHR5cGVvZiBjb21wb25lbnRzLnBvcnQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgdXJpVG9rZW5zLnB1c2goXCI6XCIpO1xuICAgICAgICB1cmlUb2tlbnMucHVzaChTdHJpbmcoY29tcG9uZW50cy5wb3J0KSk7XG4gICAgfVxuICAgIHJldHVybiB1cmlUb2tlbnMubGVuZ3RoID8gdXJpVG9rZW5zLmpvaW4oXCJcIikgOiB1bmRlZmluZWQ7XG59XG5cbnZhciBSRFMxID0gL15cXC5cXC4/XFwvLztcbnZhciBSRFMyID0gL15cXC9cXC4oXFwvfCQpLztcbnZhciBSRFMzID0gL15cXC9cXC5cXC4oXFwvfCQpLztcbnZhciBSRFM1ID0gL15cXC8/KD86LnxcXG4pKj8oPz1cXC98JCkvO1xuZnVuY3Rpb24gcmVtb3ZlRG90U2VnbWVudHMoaW5wdXQpIHtcbiAgICB2YXIgb3V0cHV0ID0gW107XG4gICAgd2hpbGUgKGlucHV0Lmxlbmd0aCkge1xuICAgICAgICBpZiAoaW5wdXQubWF0Y2goUkRTMSkpIHtcbiAgICAgICAgICAgIGlucHV0ID0gaW5wdXQucmVwbGFjZShSRFMxLCBcIlwiKTtcbiAgICAgICAgfSBlbHNlIGlmIChpbnB1dC5tYXRjaChSRFMyKSkge1xuICAgICAgICAgICAgaW5wdXQgPSBpbnB1dC5yZXBsYWNlKFJEUzIsIFwiL1wiKTtcbiAgICAgICAgfSBlbHNlIGlmIChpbnB1dC5tYXRjaChSRFMzKSkge1xuICAgICAgICAgICAgaW5wdXQgPSBpbnB1dC5yZXBsYWNlKFJEUzMsIFwiL1wiKTtcbiAgICAgICAgICAgIG91dHB1dC5wb3AoKTtcbiAgICAgICAgfSBlbHNlIGlmIChpbnB1dCA9PT0gXCIuXCIgfHwgaW5wdXQgPT09IFwiLi5cIikge1xuICAgICAgICAgICAgaW5wdXQgPSBcIlwiO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIGltID0gaW5wdXQubWF0Y2goUkRTNSk7XG4gICAgICAgICAgICBpZiAoaW0pIHtcbiAgICAgICAgICAgICAgICB2YXIgcyA9IGltWzBdO1xuICAgICAgICAgICAgICAgIGlucHV0ID0gaW5wdXQuc2xpY2Uocy5sZW5ndGgpO1xuICAgICAgICAgICAgICAgIG91dHB1dC5wdXNoKHMpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmV4cGVjdGVkIGRvdCBzZWdtZW50IGNvbmRpdGlvblwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb3V0cHV0LmpvaW4oXCJcIik7XG59XG5cbmZ1bmN0aW9uIHNlcmlhbGl6ZShjb21wb25lbnRzKSB7XG4gICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuXG4gICAgdmFyIHByb3RvY29sID0gb3B0aW9ucy5pcmkgPyBJUklfUFJPVE9DT0wgOiBVUklfUFJPVE9DT0w7XG4gICAgdmFyIHVyaVRva2VucyA9IFtdO1xuICAgIC8vZmluZCBzY2hlbWUgaGFuZGxlclxuICAgIHZhciBzY2hlbWVIYW5kbGVyID0gU0NIRU1FU1sob3B0aW9ucy5zY2hlbWUgfHwgY29tcG9uZW50cy5zY2hlbWUgfHwgXCJcIikudG9Mb3dlckNhc2UoKV07XG4gICAgLy9wZXJmb3JtIHNjaGVtZSBzcGVjaWZpYyBzZXJpYWxpemF0aW9uXG4gICAgaWYgKHNjaGVtZUhhbmRsZXIgJiYgc2NoZW1lSGFuZGxlci5zZXJpYWxpemUpIHNjaGVtZUhhbmRsZXIuc2VyaWFsaXplKGNvbXBvbmVudHMsIG9wdGlvbnMpO1xuICAgIGlmIChjb21wb25lbnRzLmhvc3QpIHtcbiAgICAgICAgLy9pZiBob3N0IGNvbXBvbmVudCBpcyBhbiBJUHY2IGFkZHJlc3NcbiAgICAgICAgaWYgKHByb3RvY29sLklQVjZBRERSRVNTLnRlc3QoY29tcG9uZW50cy5ob3N0KSkge31cbiAgICAgICAgLy9UT0RPOiBub3JtYWxpemUgSVB2NiBhZGRyZXNzIGFzIHBlciBSRkMgNTk1MlxuXG4gICAgICAgIC8vaWYgaG9zdCBjb21wb25lbnQgaXMgYSBkb21haW4gbmFtZVxuICAgICAgICBlbHNlIGlmIChvcHRpb25zLmRvbWFpbkhvc3QgfHwgc2NoZW1lSGFuZGxlciAmJiBzY2hlbWVIYW5kbGVyLmRvbWFpbkhvc3QpIHtcbiAgICAgICAgICAgICAgICAvL2NvbnZlcnQgSUROIHZpYSBwdW55Y29kZVxuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuaG9zdCA9ICFvcHRpb25zLmlyaSA/IHB1bnljb2RlLnRvQVNDSUkoY29tcG9uZW50cy5ob3N0LnJlcGxhY2UocHJvdG9jb2wuUENUX0VOQ09ERUQsIHBjdERlY0NoYXJzKS50b0xvd2VyQ2FzZSgpKSA6IHB1bnljb2RlLnRvVW5pY29kZShjb21wb25lbnRzLmhvc3QpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50cy5lcnJvciA9IGNvbXBvbmVudHMuZXJyb3IgfHwgXCJIb3N0J3MgZG9tYWluIG5hbWUgY2FuIG5vdCBiZSBjb252ZXJ0ZWQgdG8gXCIgKyAoIW9wdGlvbnMuaXJpID8gXCJBU0NJSVwiIDogXCJVbmljb2RlXCIpICsgXCIgdmlhIHB1bnljb2RlOiBcIiArIGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgIH1cbiAgICAvL25vcm1hbGl6ZSBlbmNvZGluZ1xuICAgIF9ub3JtYWxpemVDb21wb25lbnRFbmNvZGluZyhjb21wb25lbnRzLCBwcm90b2NvbCk7XG4gICAgaWYgKG9wdGlvbnMucmVmZXJlbmNlICE9PSBcInN1ZmZpeFwiICYmIGNvbXBvbmVudHMuc2NoZW1lKSB7XG4gICAgICAgIHVyaVRva2Vucy5wdXNoKGNvbXBvbmVudHMuc2NoZW1lKTtcbiAgICAgICAgdXJpVG9rZW5zLnB1c2goXCI6XCIpO1xuICAgIH1cbiAgICB2YXIgYXV0aG9yaXR5ID0gX3JlY29tcG9zZUF1dGhvcml0eShjb21wb25lbnRzLCBvcHRpb25zKTtcbiAgICBpZiAoYXV0aG9yaXR5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKG9wdGlvbnMucmVmZXJlbmNlICE9PSBcInN1ZmZpeFwiKSB7XG4gICAgICAgICAgICB1cmlUb2tlbnMucHVzaChcIi8vXCIpO1xuICAgICAgICB9XG4gICAgICAgIHVyaVRva2Vucy5wdXNoKGF1dGhvcml0eSk7XG4gICAgICAgIGlmIChjb21wb25lbnRzLnBhdGggJiYgY29tcG9uZW50cy5wYXRoLmNoYXJBdCgwKSAhPT0gXCIvXCIpIHtcbiAgICAgICAgICAgIHVyaVRva2Vucy5wdXNoKFwiL1wiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoY29tcG9uZW50cy5wYXRoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdmFyIHMgPSBjb21wb25lbnRzLnBhdGg7XG4gICAgICAgIGlmICghb3B0aW9ucy5hYnNvbHV0ZVBhdGggJiYgKCFzY2hlbWVIYW5kbGVyIHx8ICFzY2hlbWVIYW5kbGVyLmFic29sdXRlUGF0aCkpIHtcbiAgICAgICAgICAgIHMgPSByZW1vdmVEb3RTZWdtZW50cyhzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYXV0aG9yaXR5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHMgPSBzLnJlcGxhY2UoL15cXC9cXC8vLCBcIi8lMkZcIik7IC8vZG9uJ3QgYWxsb3cgdGhlIHBhdGggdG8gc3RhcnQgd2l0aCBcIi8vXCJcbiAgICAgICAgfVxuICAgICAgICB1cmlUb2tlbnMucHVzaChzKTtcbiAgICB9XG4gICAgaWYgKGNvbXBvbmVudHMucXVlcnkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB1cmlUb2tlbnMucHVzaChcIj9cIik7XG4gICAgICAgIHVyaVRva2Vucy5wdXNoKGNvbXBvbmVudHMucXVlcnkpO1xuICAgIH1cbiAgICBpZiAoY29tcG9uZW50cy5mcmFnbWVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHVyaVRva2Vucy5wdXNoKFwiI1wiKTtcbiAgICAgICAgdXJpVG9rZW5zLnB1c2goY29tcG9uZW50cy5mcmFnbWVudCk7XG4gICAgfVxuICAgIHJldHVybiB1cmlUb2tlbnMuam9pbihcIlwiKTsgLy9tZXJnZSB0b2tlbnMgaW50byBhIHN0cmluZ1xufVxuXG5mdW5jdGlvbiByZXNvbHZlQ29tcG9uZW50cyhiYXNlLCByZWxhdGl2ZSkge1xuICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiB7fTtcbiAgICB2YXIgc2tpcE5vcm1hbGl6YXRpb24gPSBhcmd1bWVudHNbM107XG5cbiAgICB2YXIgdGFyZ2V0ID0ge307XG4gICAgaWYgKCFza2lwTm9ybWFsaXphdGlvbikge1xuICAgICAgICBiYXNlID0gcGFyc2Uoc2VyaWFsaXplKGJhc2UsIG9wdGlvbnMpLCBvcHRpb25zKTsgLy9ub3JtYWxpemUgYmFzZSBjb21wb25lbnRzXG4gICAgICAgIHJlbGF0aXZlID0gcGFyc2Uoc2VyaWFsaXplKHJlbGF0aXZlLCBvcHRpb25zKSwgb3B0aW9ucyk7IC8vbm9ybWFsaXplIHJlbGF0aXZlIGNvbXBvbmVudHNcbiAgICB9XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgaWYgKCFvcHRpb25zLnRvbGVyYW50ICYmIHJlbGF0aXZlLnNjaGVtZSkge1xuICAgICAgICB0YXJnZXQuc2NoZW1lID0gcmVsYXRpdmUuc2NoZW1lO1xuICAgICAgICAvL3RhcmdldC5hdXRob3JpdHkgPSByZWxhdGl2ZS5hdXRob3JpdHk7XG4gICAgICAgIHRhcmdldC51c2VyaW5mbyA9IHJlbGF0aXZlLnVzZXJpbmZvO1xuICAgICAgICB0YXJnZXQuaG9zdCA9IHJlbGF0aXZlLmhvc3Q7XG4gICAgICAgIHRhcmdldC5wb3J0ID0gcmVsYXRpdmUucG9ydDtcbiAgICAgICAgdGFyZ2V0LnBhdGggPSByZW1vdmVEb3RTZWdtZW50cyhyZWxhdGl2ZS5wYXRoIHx8IFwiXCIpO1xuICAgICAgICB0YXJnZXQucXVlcnkgPSByZWxhdGl2ZS5xdWVyeTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBpZiAocmVsYXRpdmUudXNlcmluZm8gIT09IHVuZGVmaW5lZCB8fCByZWxhdGl2ZS5ob3N0ICE9PSB1bmRlZmluZWQgfHwgcmVsYXRpdmUucG9ydCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAvL3RhcmdldC5hdXRob3JpdHkgPSByZWxhdGl2ZS5hdXRob3JpdHk7XG4gICAgICAgICAgICB0YXJnZXQudXNlcmluZm8gPSByZWxhdGl2ZS51c2VyaW5mbztcbiAgICAgICAgICAgIHRhcmdldC5ob3N0ID0gcmVsYXRpdmUuaG9zdDtcbiAgICAgICAgICAgIHRhcmdldC5wb3J0ID0gcmVsYXRpdmUucG9ydDtcbiAgICAgICAgICAgIHRhcmdldC5wYXRoID0gcmVtb3ZlRG90U2VnbWVudHMocmVsYXRpdmUucGF0aCB8fCBcIlwiKTtcbiAgICAgICAgICAgIHRhcmdldC5xdWVyeSA9IHJlbGF0aXZlLnF1ZXJ5O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFyZWxhdGl2ZS5wYXRoKSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0LnBhdGggPSBiYXNlLnBhdGg7XG4gICAgICAgICAgICAgICAgaWYgKHJlbGF0aXZlLnF1ZXJ5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LnF1ZXJ5ID0gYmFzZS5xdWVyeTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChyZWxhdGl2ZS5wYXRoLmNoYXJBdCgwKSA9PT0gXCIvXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LnBhdGggPSByZW1vdmVEb3RTZWdtZW50cyhyZWxhdGl2ZS5wYXRoKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAoKGJhc2UudXNlcmluZm8gIT09IHVuZGVmaW5lZCB8fCBiYXNlLmhvc3QgIT09IHVuZGVmaW5lZCB8fCBiYXNlLnBvcnQgIT09IHVuZGVmaW5lZCkgJiYgIWJhc2UucGF0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LnBhdGggPSBcIi9cIiArIHJlbGF0aXZlLnBhdGg7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIWJhc2UucGF0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LnBhdGggPSByZWxhdGl2ZS5wYXRoO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LnBhdGggPSBiYXNlLnBhdGguc2xpY2UoMCwgYmFzZS5wYXRoLmxhc3RJbmRleE9mKFwiL1wiKSArIDEpICsgcmVsYXRpdmUucGF0aDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0YXJnZXQucGF0aCA9IHJlbW92ZURvdFNlZ21lbnRzKHRhcmdldC5wYXRoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGFyZ2V0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvL3RhcmdldC5hdXRob3JpdHkgPSBiYXNlLmF1dGhvcml0eTtcbiAgICAgICAgICAgIHRhcmdldC51c2VyaW5mbyA9IGJhc2UudXNlcmluZm87XG4gICAgICAgICAgICB0YXJnZXQuaG9zdCA9IGJhc2UuaG9zdDtcbiAgICAgICAgICAgIHRhcmdldC5wb3J0ID0gYmFzZS5wb3J0O1xuICAgICAgICB9XG4gICAgICAgIHRhcmdldC5zY2hlbWUgPSBiYXNlLnNjaGVtZTtcbiAgICB9XG4gICAgdGFyZ2V0LmZyYWdtZW50ID0gcmVsYXRpdmUuZnJhZ21lbnQ7XG4gICAgcmV0dXJuIHRhcmdldDtcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZShiYXNlVVJJLCByZWxhdGl2ZVVSSSwgb3B0aW9ucykge1xuICAgIHZhciBzY2hlbWVsZXNzT3B0aW9ucyA9IGFzc2lnbih7IHNjaGVtZTogJ251bGwnIH0sIG9wdGlvbnMpO1xuICAgIHJldHVybiBzZXJpYWxpemUocmVzb2x2ZUNvbXBvbmVudHMocGFyc2UoYmFzZVVSSSwgc2NoZW1lbGVzc09wdGlvbnMpLCBwYXJzZShyZWxhdGl2ZVVSSSwgc2NoZW1lbGVzc09wdGlvbnMpLCBzY2hlbWVsZXNzT3B0aW9ucywgdHJ1ZSksIHNjaGVtZWxlc3NPcHRpb25zKTtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplKHVyaSwgb3B0aW9ucykge1xuICAgIGlmICh0eXBlb2YgdXJpID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHVyaSA9IHNlcmlhbGl6ZShwYXJzZSh1cmksIG9wdGlvbnMpLCBvcHRpb25zKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVPZih1cmkpID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIHVyaSA9IHBhcnNlKHNlcmlhbGl6ZSh1cmksIG9wdGlvbnMpLCBvcHRpb25zKTtcbiAgICB9XG4gICAgcmV0dXJuIHVyaTtcbn1cblxuZnVuY3Rpb24gZXF1YWwodXJpQSwgdXJpQiwgb3B0aW9ucykge1xuICAgIGlmICh0eXBlb2YgdXJpQSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICB1cmlBID0gc2VyaWFsaXplKHBhcnNlKHVyaUEsIG9wdGlvbnMpLCBvcHRpb25zKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVPZih1cmlBKSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICB1cmlBID0gc2VyaWFsaXplKHVyaUEsIG9wdGlvbnMpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHVyaUIgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgdXJpQiA9IHNlcmlhbGl6ZShwYXJzZSh1cmlCLCBvcHRpb25zKSwgb3B0aW9ucyk7XG4gICAgfSBlbHNlIGlmICh0eXBlT2YodXJpQikgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgdXJpQiA9IHNlcmlhbGl6ZSh1cmlCLCBvcHRpb25zKTtcbiAgICB9XG4gICAgcmV0dXJuIHVyaUEgPT09IHVyaUI7XG59XG5cbmZ1bmN0aW9uIGVzY2FwZUNvbXBvbmVudChzdHIsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gc3RyICYmIHN0ci50b1N0cmluZygpLnJlcGxhY2UoIW9wdGlvbnMgfHwgIW9wdGlvbnMuaXJpID8gVVJJX1BST1RPQ09MLkVTQ0FQRSA6IElSSV9QUk9UT0NPTC5FU0NBUEUsIHBjdEVuY0NoYXIpO1xufVxuXG5mdW5jdGlvbiB1bmVzY2FwZUNvbXBvbmVudChzdHIsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gc3RyICYmIHN0ci50b1N0cmluZygpLnJlcGxhY2UoIW9wdGlvbnMgfHwgIW9wdGlvbnMuaXJpID8gVVJJX1BST1RPQ09MLlBDVF9FTkNPREVEIDogSVJJX1BST1RPQ09MLlBDVF9FTkNPREVELCBwY3REZWNDaGFycyk7XG59XG5cbnZhciBoYW5kbGVyID0ge1xuICAgIHNjaGVtZTogXCJodHRwXCIsXG4gICAgZG9tYWluSG9zdDogdHJ1ZSxcbiAgICBwYXJzZTogZnVuY3Rpb24gcGFyc2UoY29tcG9uZW50cywgb3B0aW9ucykge1xuICAgICAgICAvL3JlcG9ydCBtaXNzaW5nIGhvc3RcbiAgICAgICAgaWYgKCFjb21wb25lbnRzLmhvc3QpIHtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuZXJyb3IgPSBjb21wb25lbnRzLmVycm9yIHx8IFwiSFRUUCBVUklzIG11c3QgaGF2ZSBhIGhvc3QuXCI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudHM7XG4gICAgfSxcbiAgICBzZXJpYWxpemU6IGZ1bmN0aW9uIHNlcmlhbGl6ZShjb21wb25lbnRzLCBvcHRpb25zKSB7XG4gICAgICAgIHZhciBzZWN1cmUgPSBTdHJpbmcoY29tcG9uZW50cy5zY2hlbWUpLnRvTG93ZXJDYXNlKCkgPT09IFwiaHR0cHNcIjtcbiAgICAgICAgLy9ub3JtYWxpemUgdGhlIGRlZmF1bHQgcG9ydFxuICAgICAgICBpZiAoY29tcG9uZW50cy5wb3J0ID09PSAoc2VjdXJlID8gNDQzIDogODApIHx8IGNvbXBvbmVudHMucG9ydCA9PT0gXCJcIikge1xuICAgICAgICAgICAgY29tcG9uZW50cy5wb3J0ID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIC8vbm9ybWFsaXplIHRoZSBlbXB0eSBwYXRoXG4gICAgICAgIGlmICghY29tcG9uZW50cy5wYXRoKSB7XG4gICAgICAgICAgICBjb21wb25lbnRzLnBhdGggPSBcIi9cIjtcbiAgICAgICAgfVxuICAgICAgICAvL05PVEU6IFdlIGRvIG5vdCBwYXJzZSBxdWVyeSBzdHJpbmdzIGZvciBIVFRQIFVSSXNcbiAgICAgICAgLy9hcyBXV1cgRm9ybSBVcmwgRW5jb2RlZCBxdWVyeSBzdHJpbmdzIGFyZSBwYXJ0IG9mIHRoZSBIVE1MNCsgc3BlYyxcbiAgICAgICAgLy9hbmQgbm90IHRoZSBIVFRQIHNwZWMuXG4gICAgICAgIHJldHVybiBjb21wb25lbnRzO1xuICAgIH1cbn07XG5cbnZhciBoYW5kbGVyJDEgPSB7XG4gICAgc2NoZW1lOiBcImh0dHBzXCIsXG4gICAgZG9tYWluSG9zdDogaGFuZGxlci5kb21haW5Ib3N0LFxuICAgIHBhcnNlOiBoYW5kbGVyLnBhcnNlLFxuICAgIHNlcmlhbGl6ZTogaGFuZGxlci5zZXJpYWxpemVcbn07XG5cbmZ1bmN0aW9uIGlzU2VjdXJlKHdzQ29tcG9uZW50cykge1xuICAgIHJldHVybiB0eXBlb2Ygd3NDb21wb25lbnRzLnNlY3VyZSA9PT0gJ2Jvb2xlYW4nID8gd3NDb21wb25lbnRzLnNlY3VyZSA6IFN0cmluZyh3c0NvbXBvbmVudHMuc2NoZW1lKS50b0xvd2VyQ2FzZSgpID09PSBcIndzc1wiO1xufVxuLy9SRkMgNjQ1NVxudmFyIGhhbmRsZXIkMiA9IHtcbiAgICBzY2hlbWU6IFwid3NcIixcbiAgICBkb21haW5Ib3N0OiB0cnVlLFxuICAgIHBhcnNlOiBmdW5jdGlvbiBwYXJzZShjb21wb25lbnRzLCBvcHRpb25zKSB7XG4gICAgICAgIHZhciB3c0NvbXBvbmVudHMgPSBjb21wb25lbnRzO1xuICAgICAgICAvL2luZGljYXRlIGlmIHRoZSBzZWN1cmUgZmxhZyBpcyBzZXRcbiAgICAgICAgd3NDb21wb25lbnRzLnNlY3VyZSA9IGlzU2VjdXJlKHdzQ29tcG9uZW50cyk7XG4gICAgICAgIC8vY29uc3RydWN0IHJlc291Y2UgbmFtZVxuICAgICAgICB3c0NvbXBvbmVudHMucmVzb3VyY2VOYW1lID0gKHdzQ29tcG9uZW50cy5wYXRoIHx8ICcvJykgKyAod3NDb21wb25lbnRzLnF1ZXJ5ID8gJz8nICsgd3NDb21wb25lbnRzLnF1ZXJ5IDogJycpO1xuICAgICAgICB3c0NvbXBvbmVudHMucGF0aCA9IHVuZGVmaW5lZDtcbiAgICAgICAgd3NDb21wb25lbnRzLnF1ZXJ5ID0gdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4gd3NDb21wb25lbnRzO1xuICAgIH0sXG4gICAgc2VyaWFsaXplOiBmdW5jdGlvbiBzZXJpYWxpemUod3NDb21wb25lbnRzLCBvcHRpb25zKSB7XG4gICAgICAgIC8vbm9ybWFsaXplIHRoZSBkZWZhdWx0IHBvcnRcbiAgICAgICAgaWYgKHdzQ29tcG9uZW50cy5wb3J0ID09PSAoaXNTZWN1cmUod3NDb21wb25lbnRzKSA/IDQ0MyA6IDgwKSB8fCB3c0NvbXBvbmVudHMucG9ydCA9PT0gXCJcIikge1xuICAgICAgICAgICAgd3NDb21wb25lbnRzLnBvcnQgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgLy9lbnN1cmUgc2NoZW1lIG1hdGNoZXMgc2VjdXJlIGZsYWdcbiAgICAgICAgaWYgKHR5cGVvZiB3c0NvbXBvbmVudHMuc2VjdXJlID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgIHdzQ29tcG9uZW50cy5zY2hlbWUgPSB3c0NvbXBvbmVudHMuc2VjdXJlID8gJ3dzcycgOiAnd3MnO1xuICAgICAgICAgICAgd3NDb21wb25lbnRzLnNlY3VyZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICAvL3JlY29uc3RydWN0IHBhdGggZnJvbSByZXNvdXJjZSBuYW1lXG4gICAgICAgIGlmICh3c0NvbXBvbmVudHMucmVzb3VyY2VOYW1lKSB7XG4gICAgICAgICAgICB2YXIgX3dzQ29tcG9uZW50cyRyZXNvdXJjID0gd3NDb21wb25lbnRzLnJlc291cmNlTmFtZS5zcGxpdCgnPycpLFxuICAgICAgICAgICAgICAgIF93c0NvbXBvbmVudHMkcmVzb3VyYzIgPSBzbGljZWRUb0FycmF5KF93c0NvbXBvbmVudHMkcmVzb3VyYywgMiksXG4gICAgICAgICAgICAgICAgcGF0aCA9IF93c0NvbXBvbmVudHMkcmVzb3VyYzJbMF0sXG4gICAgICAgICAgICAgICAgcXVlcnkgPSBfd3NDb21wb25lbnRzJHJlc291cmMyWzFdO1xuXG4gICAgICAgICAgICB3c0NvbXBvbmVudHMucGF0aCA9IHBhdGggJiYgcGF0aCAhPT0gJy8nID8gcGF0aCA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHdzQ29tcG9uZW50cy5xdWVyeSA9IHF1ZXJ5O1xuICAgICAgICAgICAgd3NDb21wb25lbnRzLnJlc291cmNlTmFtZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICAvL2ZvcmJpZCBmcmFnbWVudCBjb21wb25lbnRcbiAgICAgICAgd3NDb21wb25lbnRzLmZyYWdtZW50ID0gdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4gd3NDb21wb25lbnRzO1xuICAgIH1cbn07XG5cbnZhciBoYW5kbGVyJDMgPSB7XG4gICAgc2NoZW1lOiBcIndzc1wiLFxuICAgIGRvbWFpbkhvc3Q6IGhhbmRsZXIkMi5kb21haW5Ib3N0LFxuICAgIHBhcnNlOiBoYW5kbGVyJDIucGFyc2UsXG4gICAgc2VyaWFsaXplOiBoYW5kbGVyJDIuc2VyaWFsaXplXG59O1xuXG52YXIgTyA9IHt9O1xudmFyIGlzSVJJID0gdHJ1ZTtcbi8vUkZDIDM5ODZcbnZhciBVTlJFU0VSVkVEJCQgPSBcIltBLVphLXowLTlcXFxcLVxcXFwuXFxcXF9cXFxcflwiICsgKGlzSVJJID8gXCJcXFxceEEwLVxcXFx1MjAwRFxcXFx1MjAxMC1cXFxcdTIwMjlcXFxcdTIwMkYtXFxcXHVEN0ZGXFxcXHVGOTAwLVxcXFx1RkRDRlxcXFx1RkRGMC1cXFxcdUZGRUZcIiA6IFwiXCIpICsgXCJdXCI7XG52YXIgSEVYRElHJCQgPSBcIlswLTlBLUZhLWZdXCI7IC8vY2FzZS1pbnNlbnNpdGl2ZVxudmFyIFBDVF9FTkNPREVEJCA9IHN1YmV4cChzdWJleHAoXCIlW0VGZWZdXCIgKyBIRVhESUckJCArIFwiJVwiICsgSEVYRElHJCQgKyBIRVhESUckJCArIFwiJVwiICsgSEVYRElHJCQgKyBIRVhESUckJCkgKyBcInxcIiArIHN1YmV4cChcIiVbODlBLUZhLWZdXCIgKyBIRVhESUckJCArIFwiJVwiICsgSEVYRElHJCQgKyBIRVhESUckJCkgKyBcInxcIiArIHN1YmV4cChcIiVcIiArIEhFWERJRyQkICsgSEVYRElHJCQpKTsgLy9leHBhbmRlZFxuLy9SRkMgNTMyMiwgZXhjZXB0IHRoZXNlIHN5bWJvbHMgYXMgcGVyIFJGQyA2MDY4OiBAIDogLyA/ICMgWyBdICYgOyA9XG4vL2NvbnN0IEFURVhUJCQgPSBcIltBLVphLXowLTlcXFxcIVxcXFwjXFxcXCRcXFxcJVxcXFwmXFxcXCdcXFxcKlxcXFwrXFxcXC1cXFxcL1xcXFw9XFxcXD9cXFxcXlxcXFxfXFxcXGBcXFxce1xcXFx8XFxcXH1cXFxcfl1cIjtcbi8vY29uc3QgV1NQJCQgPSBcIltcXFxceDIwXFxcXHgwOV1cIjtcbi8vY29uc3QgT0JTX1FURVhUJCQgPSBcIltcXFxceDAxLVxcXFx4MDhcXFxceDBCXFxcXHgwQ1xcXFx4MEUtXFxcXHgxRlxcXFx4N0ZdXCI7ICAvLyglZDEtOCAvICVkMTEtMTIgLyAlZDE0LTMxIC8gJWQxMjcpXG4vL2NvbnN0IFFURVhUJCQgPSBtZXJnZShcIltcXFxceDIxXFxcXHgyMy1cXFxceDVCXFxcXHg1RC1cXFxceDdFXVwiLCBPQlNfUVRFWFQkJCk7ICAvLyVkMzMgLyAlZDM1LTkxIC8gJWQ5My0xMjYgLyBvYnMtcXRleHRcbi8vY29uc3QgVkNIQVIkJCA9IFwiW1xcXFx4MjEtXFxcXHg3RV1cIjtcbi8vY29uc3QgV1NQJCQgPSBcIltcXFxceDIwXFxcXHgwOV1cIjtcbi8vY29uc3QgT0JTX1FQJCA9IHN1YmV4cChcIlxcXFxcXFxcXCIgKyBtZXJnZShcIltcXFxceDAwXFxcXHgwRFxcXFx4MEFdXCIsIE9CU19RVEVYVCQkKSk7ICAvLyVkMCAvIENSIC8gTEYgLyBvYnMtcXRleHRcbi8vY29uc3QgRldTJCA9IHN1YmV4cChzdWJleHAoV1NQJCQgKyBcIipcIiArIFwiXFxcXHgwRFxcXFx4MEFcIikgKyBcIj9cIiArIFdTUCQkICsgXCIrXCIpO1xuLy9jb25zdCBRVU9URURfUEFJUiQgPSBzdWJleHAoc3ViZXhwKFwiXFxcXFxcXFxcIiArIHN1YmV4cChWQ0hBUiQkICsgXCJ8XCIgKyBXU1AkJCkpICsgXCJ8XCIgKyBPQlNfUVAkKTtcbi8vY29uc3QgUVVPVEVEX1NUUklORyQgPSBzdWJleHAoJ1xcXFxcIicgKyBzdWJleHAoRldTJCArIFwiP1wiICsgUUNPTlRFTlQkKSArIFwiKlwiICsgRldTJCArIFwiP1wiICsgJ1xcXFxcIicpO1xudmFyIEFURVhUJCQgPSBcIltBLVphLXowLTlcXFxcIVxcXFwkXFxcXCVcXFxcJ1xcXFwqXFxcXCtcXFxcLVxcXFxeXFxcXF9cXFxcYFxcXFx7XFxcXHxcXFxcfVxcXFx+XVwiO1xudmFyIFFURVhUJCQgPSBcIltcXFxcIVxcXFwkXFxcXCVcXFxcJ1xcXFwoXFxcXClcXFxcKlxcXFwrXFxcXCxcXFxcLVxcXFwuMC05XFxcXDxcXFxcPkEtWlxcXFx4NUUtXFxcXHg3RV1cIjtcbnZhciBWQ0hBUiQkID0gbWVyZ2UoUVRFWFQkJCwgXCJbXFxcXFxcXCJcXFxcXFxcXF1cIik7XG52YXIgU09NRV9ERUxJTVMkJCA9IFwiW1xcXFwhXFxcXCRcXFxcJ1xcXFwoXFxcXClcXFxcKlxcXFwrXFxcXCxcXFxcO1xcXFw6XFxcXEBdXCI7XG52YXIgVU5SRVNFUlZFRCA9IG5ldyBSZWdFeHAoVU5SRVNFUlZFRCQkLCBcImdcIik7XG52YXIgUENUX0VOQ09ERUQgPSBuZXcgUmVnRXhwKFBDVF9FTkNPREVEJCwgXCJnXCIpO1xudmFyIE5PVF9MT0NBTF9QQVJUID0gbmV3IFJlZ0V4cChtZXJnZShcIlteXVwiLCBBVEVYVCQkLCBcIltcXFxcLl1cIiwgJ1tcXFxcXCJdJywgVkNIQVIkJCksIFwiZ1wiKTtcbnZhciBOT1RfSEZOQU1FID0gbmV3IFJlZ0V4cChtZXJnZShcIlteXVwiLCBVTlJFU0VSVkVEJCQsIFNPTUVfREVMSU1TJCQpLCBcImdcIik7XG52YXIgTk9UX0hGVkFMVUUgPSBOT1RfSEZOQU1FO1xuZnVuY3Rpb24gZGVjb2RlVW5yZXNlcnZlZChzdHIpIHtcbiAgICB2YXIgZGVjU3RyID0gcGN0RGVjQ2hhcnMoc3RyKTtcbiAgICByZXR1cm4gIWRlY1N0ci5tYXRjaChVTlJFU0VSVkVEKSA/IHN0ciA6IGRlY1N0cjtcbn1cbnZhciBoYW5kbGVyJDQgPSB7XG4gICAgc2NoZW1lOiBcIm1haWx0b1wiLFxuICAgIHBhcnNlOiBmdW5jdGlvbiBwYXJzZSQkMShjb21wb25lbnRzLCBvcHRpb25zKSB7XG4gICAgICAgIHZhciBtYWlsdG9Db21wb25lbnRzID0gY29tcG9uZW50cztcbiAgICAgICAgdmFyIHRvID0gbWFpbHRvQ29tcG9uZW50cy50byA9IG1haWx0b0NvbXBvbmVudHMucGF0aCA/IG1haWx0b0NvbXBvbmVudHMucGF0aC5zcGxpdChcIixcIikgOiBbXTtcbiAgICAgICAgbWFpbHRvQ29tcG9uZW50cy5wYXRoID0gdW5kZWZpbmVkO1xuICAgICAgICBpZiAobWFpbHRvQ29tcG9uZW50cy5xdWVyeSkge1xuICAgICAgICAgICAgdmFyIHVua25vd25IZWFkZXJzID0gZmFsc2U7XG4gICAgICAgICAgICB2YXIgaGVhZGVycyA9IHt9O1xuICAgICAgICAgICAgdmFyIGhmaWVsZHMgPSBtYWlsdG9Db21wb25lbnRzLnF1ZXJ5LnNwbGl0KFwiJlwiKTtcbiAgICAgICAgICAgIGZvciAodmFyIHggPSAwLCB4bCA9IGhmaWVsZHMubGVuZ3RoOyB4IDwgeGw7ICsreCkge1xuICAgICAgICAgICAgICAgIHZhciBoZmllbGQgPSBoZmllbGRzW3hdLnNwbGl0KFwiPVwiKTtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKGhmaWVsZFswXSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFwidG9cIjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0b0FkZHJzID0gaGZpZWxkWzFdLnNwbGl0KFwiLFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIF94ID0gMCwgX3hsID0gdG9BZGRycy5sZW5ndGg7IF94IDwgX3hsOyArK194KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8ucHVzaCh0b0FkZHJzW194XSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcInN1YmplY3RcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgIG1haWx0b0NvbXBvbmVudHMuc3ViamVjdCA9IHVuZXNjYXBlQ29tcG9uZW50KGhmaWVsZFsxXSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcImJvZHlcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgIG1haWx0b0NvbXBvbmVudHMuYm9keSA9IHVuZXNjYXBlQ29tcG9uZW50KGhmaWVsZFsxXSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHVua25vd25IZWFkZXJzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnNbdW5lc2NhcGVDb21wb25lbnQoaGZpZWxkWzBdLCBvcHRpb25zKV0gPSB1bmVzY2FwZUNvbXBvbmVudChoZmllbGRbMV0sIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHVua25vd25IZWFkZXJzKSBtYWlsdG9Db21wb25lbnRzLmhlYWRlcnMgPSBoZWFkZXJzO1xuICAgICAgICB9XG4gICAgICAgIG1haWx0b0NvbXBvbmVudHMucXVlcnkgPSB1bmRlZmluZWQ7XG4gICAgICAgIGZvciAodmFyIF94MiA9IDAsIF94bDIgPSB0by5sZW5ndGg7IF94MiA8IF94bDI7ICsrX3gyKSB7XG4gICAgICAgICAgICB2YXIgYWRkciA9IHRvW194Ml0uc3BsaXQoXCJAXCIpO1xuICAgICAgICAgICAgYWRkclswXSA9IHVuZXNjYXBlQ29tcG9uZW50KGFkZHJbMF0pO1xuICAgICAgICAgICAgaWYgKCFvcHRpb25zLnVuaWNvZGVTdXBwb3J0KSB7XG4gICAgICAgICAgICAgICAgLy9jb252ZXJ0IFVuaWNvZGUgSUROIC0+IEFTQ0lJIElETlxuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGFkZHJbMV0gPSBwdW55Y29kZS50b0FTQ0lJKHVuZXNjYXBlQ29tcG9uZW50KGFkZHJbMV0sIG9wdGlvbnMpLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgbWFpbHRvQ29tcG9uZW50cy5lcnJvciA9IG1haWx0b0NvbXBvbmVudHMuZXJyb3IgfHwgXCJFbWFpbCBhZGRyZXNzJ3MgZG9tYWluIG5hbWUgY2FuIG5vdCBiZSBjb252ZXJ0ZWQgdG8gQVNDSUkgdmlhIHB1bnljb2RlOiBcIiArIGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhZGRyWzFdID0gdW5lc2NhcGVDb21wb25lbnQoYWRkclsxXSwgb3B0aW9ucykudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRvW194Ml0gPSBhZGRyLmpvaW4oXCJAXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtYWlsdG9Db21wb25lbnRzO1xuICAgIH0sXG4gICAgc2VyaWFsaXplOiBmdW5jdGlvbiBzZXJpYWxpemUkJDEobWFpbHRvQ29tcG9uZW50cywgb3B0aW9ucykge1xuICAgICAgICB2YXIgY29tcG9uZW50cyA9IG1haWx0b0NvbXBvbmVudHM7XG4gICAgICAgIHZhciB0byA9IHRvQXJyYXkobWFpbHRvQ29tcG9uZW50cy50byk7XG4gICAgICAgIGlmICh0bykge1xuICAgICAgICAgICAgZm9yICh2YXIgeCA9IDAsIHhsID0gdG8ubGVuZ3RoOyB4IDwgeGw7ICsreCkge1xuICAgICAgICAgICAgICAgIHZhciB0b0FkZHIgPSBTdHJpbmcodG9beF0pO1xuICAgICAgICAgICAgICAgIHZhciBhdElkeCA9IHRvQWRkci5sYXN0SW5kZXhPZihcIkBcIik7XG4gICAgICAgICAgICAgICAgdmFyIGxvY2FsUGFydCA9IHRvQWRkci5zbGljZSgwLCBhdElkeCkucmVwbGFjZShQQ1RfRU5DT0RFRCwgZGVjb2RlVW5yZXNlcnZlZCkucmVwbGFjZShQQ1RfRU5DT0RFRCwgdG9VcHBlckNhc2UpLnJlcGxhY2UoTk9UX0xPQ0FMX1BBUlQsIHBjdEVuY0NoYXIpO1xuICAgICAgICAgICAgICAgIHZhciBkb21haW4gPSB0b0FkZHIuc2xpY2UoYXRJZHggKyAxKTtcbiAgICAgICAgICAgICAgICAvL2NvbnZlcnQgSUROIHZpYSBwdW55Y29kZVxuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGRvbWFpbiA9ICFvcHRpb25zLmlyaSA/IHB1bnljb2RlLnRvQVNDSUkodW5lc2NhcGVDb21wb25lbnQoZG9tYWluLCBvcHRpb25zKS50b0xvd2VyQ2FzZSgpKSA6IHB1bnljb2RlLnRvVW5pY29kZShkb21haW4pO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50cy5lcnJvciA9IGNvbXBvbmVudHMuZXJyb3IgfHwgXCJFbWFpbCBhZGRyZXNzJ3MgZG9tYWluIG5hbWUgY2FuIG5vdCBiZSBjb252ZXJ0ZWQgdG8gXCIgKyAoIW9wdGlvbnMuaXJpID8gXCJBU0NJSVwiIDogXCJVbmljb2RlXCIpICsgXCIgdmlhIHB1bnljb2RlOiBcIiArIGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRvW3hdID0gbG9jYWxQYXJ0ICsgXCJAXCIgKyBkb21haW47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb21wb25lbnRzLnBhdGggPSB0by5qb2luKFwiLFwiKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgaGVhZGVycyA9IG1haWx0b0NvbXBvbmVudHMuaGVhZGVycyA9IG1haWx0b0NvbXBvbmVudHMuaGVhZGVycyB8fCB7fTtcbiAgICAgICAgaWYgKG1haWx0b0NvbXBvbmVudHMuc3ViamVjdCkgaGVhZGVyc1tcInN1YmplY3RcIl0gPSBtYWlsdG9Db21wb25lbnRzLnN1YmplY3Q7XG4gICAgICAgIGlmIChtYWlsdG9Db21wb25lbnRzLmJvZHkpIGhlYWRlcnNbXCJib2R5XCJdID0gbWFpbHRvQ29tcG9uZW50cy5ib2R5O1xuICAgICAgICB2YXIgZmllbGRzID0gW107XG4gICAgICAgIGZvciAodmFyIG5hbWUgaW4gaGVhZGVycykge1xuICAgICAgICAgICAgaWYgKGhlYWRlcnNbbmFtZV0gIT09IE9bbmFtZV0pIHtcbiAgICAgICAgICAgICAgICBmaWVsZHMucHVzaChuYW1lLnJlcGxhY2UoUENUX0VOQ09ERUQsIGRlY29kZVVucmVzZXJ2ZWQpLnJlcGxhY2UoUENUX0VOQ09ERUQsIHRvVXBwZXJDYXNlKS5yZXBsYWNlKE5PVF9IRk5BTUUsIHBjdEVuY0NoYXIpICsgXCI9XCIgKyBoZWFkZXJzW25hbWVdLnJlcGxhY2UoUENUX0VOQ09ERUQsIGRlY29kZVVucmVzZXJ2ZWQpLnJlcGxhY2UoUENUX0VOQ09ERUQsIHRvVXBwZXJDYXNlKS5yZXBsYWNlKE5PVF9IRlZBTFVFLCBwY3RFbmNDaGFyKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpZWxkcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbXBvbmVudHMucXVlcnkgPSBmaWVsZHMuam9pbihcIiZcIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudHM7XG4gICAgfVxufTtcblxudmFyIFVSTl9QQVJTRSA9IC9eKFteXFw6XSspXFw6KC4qKS87XG4vL1JGQyAyMTQxXG52YXIgaGFuZGxlciQ1ID0ge1xuICAgIHNjaGVtZTogXCJ1cm5cIixcbiAgICBwYXJzZTogZnVuY3Rpb24gcGFyc2UkJDEoY29tcG9uZW50cywgb3B0aW9ucykge1xuICAgICAgICB2YXIgbWF0Y2hlcyA9IGNvbXBvbmVudHMucGF0aCAmJiBjb21wb25lbnRzLnBhdGgubWF0Y2goVVJOX1BBUlNFKTtcbiAgICAgICAgdmFyIHVybkNvbXBvbmVudHMgPSBjb21wb25lbnRzO1xuICAgICAgICBpZiAobWF0Y2hlcykge1xuICAgICAgICAgICAgdmFyIHNjaGVtZSA9IG9wdGlvbnMuc2NoZW1lIHx8IHVybkNvbXBvbmVudHMuc2NoZW1lIHx8IFwidXJuXCI7XG4gICAgICAgICAgICB2YXIgbmlkID0gbWF0Y2hlc1sxXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgdmFyIG5zcyA9IG1hdGNoZXNbMl07XG4gICAgICAgICAgICB2YXIgdXJuU2NoZW1lID0gc2NoZW1lICsgXCI6XCIgKyAob3B0aW9ucy5uaWQgfHwgbmlkKTtcbiAgICAgICAgICAgIHZhciBzY2hlbWVIYW5kbGVyID0gU0NIRU1FU1t1cm5TY2hlbWVdO1xuICAgICAgICAgICAgdXJuQ29tcG9uZW50cy5uaWQgPSBuaWQ7XG4gICAgICAgICAgICB1cm5Db21wb25lbnRzLm5zcyA9IG5zcztcbiAgICAgICAgICAgIHVybkNvbXBvbmVudHMucGF0aCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGlmIChzY2hlbWVIYW5kbGVyKSB7XG4gICAgICAgICAgICAgICAgdXJuQ29tcG9uZW50cyA9IHNjaGVtZUhhbmRsZXIucGFyc2UodXJuQ29tcG9uZW50cywgb3B0aW9ucyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB1cm5Db21wb25lbnRzLmVycm9yID0gdXJuQ29tcG9uZW50cy5lcnJvciB8fCBcIlVSTiBjYW4gbm90IGJlIHBhcnNlZC5cIjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdXJuQ29tcG9uZW50cztcbiAgICB9LFxuICAgIHNlcmlhbGl6ZTogZnVuY3Rpb24gc2VyaWFsaXplJCQxKHVybkNvbXBvbmVudHMsIG9wdGlvbnMpIHtcbiAgICAgICAgdmFyIHNjaGVtZSA9IG9wdGlvbnMuc2NoZW1lIHx8IHVybkNvbXBvbmVudHMuc2NoZW1lIHx8IFwidXJuXCI7XG4gICAgICAgIHZhciBuaWQgPSB1cm5Db21wb25lbnRzLm5pZDtcbiAgICAgICAgdmFyIHVyblNjaGVtZSA9IHNjaGVtZSArIFwiOlwiICsgKG9wdGlvbnMubmlkIHx8IG5pZCk7XG4gICAgICAgIHZhciBzY2hlbWVIYW5kbGVyID0gU0NIRU1FU1t1cm5TY2hlbWVdO1xuICAgICAgICBpZiAoc2NoZW1lSGFuZGxlcikge1xuICAgICAgICAgICAgdXJuQ29tcG9uZW50cyA9IHNjaGVtZUhhbmRsZXIuc2VyaWFsaXplKHVybkNvbXBvbmVudHMsIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIHZhciB1cmlDb21wb25lbnRzID0gdXJuQ29tcG9uZW50cztcbiAgICAgICAgdmFyIG5zcyA9IHVybkNvbXBvbmVudHMubnNzO1xuICAgICAgICB1cmlDb21wb25lbnRzLnBhdGggPSAobmlkIHx8IG9wdGlvbnMubmlkKSArIFwiOlwiICsgbnNzO1xuICAgICAgICByZXR1cm4gdXJpQ29tcG9uZW50cztcbiAgICB9XG59O1xuXG52YXIgVVVJRCA9IC9eWzAtOUEtRmEtZl17OH0oPzpcXC1bMC05QS1GYS1mXXs0fSl7M31cXC1bMC05QS1GYS1mXXsxMn0kLztcbi8vUkZDIDQxMjJcbnZhciBoYW5kbGVyJDYgPSB7XG4gICAgc2NoZW1lOiBcInVybjp1dWlkXCIsXG4gICAgcGFyc2U6IGZ1bmN0aW9uIHBhcnNlKHVybkNvbXBvbmVudHMsIG9wdGlvbnMpIHtcbiAgICAgICAgdmFyIHV1aWRDb21wb25lbnRzID0gdXJuQ29tcG9uZW50cztcbiAgICAgICAgdXVpZENvbXBvbmVudHMudXVpZCA9IHV1aWRDb21wb25lbnRzLm5zcztcbiAgICAgICAgdXVpZENvbXBvbmVudHMubnNzID0gdW5kZWZpbmVkO1xuICAgICAgICBpZiAoIW9wdGlvbnMudG9sZXJhbnQgJiYgKCF1dWlkQ29tcG9uZW50cy51dWlkIHx8ICF1dWlkQ29tcG9uZW50cy51dWlkLm1hdGNoKFVVSUQpKSkge1xuICAgICAgICAgICAgdXVpZENvbXBvbmVudHMuZXJyb3IgPSB1dWlkQ29tcG9uZW50cy5lcnJvciB8fCBcIlVVSUQgaXMgbm90IHZhbGlkLlwiO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1dWlkQ29tcG9uZW50cztcbiAgICB9LFxuICAgIHNlcmlhbGl6ZTogZnVuY3Rpb24gc2VyaWFsaXplKHV1aWRDb21wb25lbnRzLCBvcHRpb25zKSB7XG4gICAgICAgIHZhciB1cm5Db21wb25lbnRzID0gdXVpZENvbXBvbmVudHM7XG4gICAgICAgIC8vbm9ybWFsaXplIFVVSURcbiAgICAgICAgdXJuQ29tcG9uZW50cy5uc3MgPSAodXVpZENvbXBvbmVudHMudXVpZCB8fCBcIlwiKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICByZXR1cm4gdXJuQ29tcG9uZW50cztcbiAgICB9XG59O1xuXG5TQ0hFTUVTW2hhbmRsZXIuc2NoZW1lXSA9IGhhbmRsZXI7XG5TQ0hFTUVTW2hhbmRsZXIkMS5zY2hlbWVdID0gaGFuZGxlciQxO1xuU0NIRU1FU1toYW5kbGVyJDIuc2NoZW1lXSA9IGhhbmRsZXIkMjtcblNDSEVNRVNbaGFuZGxlciQzLnNjaGVtZV0gPSBoYW5kbGVyJDM7XG5TQ0hFTUVTW2hhbmRsZXIkNC5zY2hlbWVdID0gaGFuZGxlciQ0O1xuU0NIRU1FU1toYW5kbGVyJDUuc2NoZW1lXSA9IGhhbmRsZXIkNTtcblNDSEVNRVNbaGFuZGxlciQ2LnNjaGVtZV0gPSBoYW5kbGVyJDY7XG5cbmV4cG9ydHMuU0NIRU1FUyA9IFNDSEVNRVM7XG5leHBvcnRzLnBjdEVuY0NoYXIgPSBwY3RFbmNDaGFyO1xuZXhwb3J0cy5wY3REZWNDaGFycyA9IHBjdERlY0NoYXJzO1xuZXhwb3J0cy5wYXJzZSA9IHBhcnNlO1xuZXhwb3J0cy5yZW1vdmVEb3RTZWdtZW50cyA9IHJlbW92ZURvdFNlZ21lbnRzO1xuZXhwb3J0cy5zZXJpYWxpemUgPSBzZXJpYWxpemU7XG5leHBvcnRzLnJlc29sdmVDb21wb25lbnRzID0gcmVzb2x2ZUNvbXBvbmVudHM7XG5leHBvcnRzLnJlc29sdmUgPSByZXNvbHZlO1xuZXhwb3J0cy5ub3JtYWxpemUgPSBub3JtYWxpemU7XG5leHBvcnRzLmVxdWFsID0gZXF1YWw7XG5leHBvcnRzLmVzY2FwZUNvbXBvbmVudCA9IGVzY2FwZUNvbXBvbmVudDtcbmV4cG9ydHMudW5lc2NhcGVDb21wb25lbnQgPSB1bmVzY2FwZUNvbXBvbmVudDtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxufSkpKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXVyaS5hbGwuanMubWFwXG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgdXJpID0gcmVxdWlyZShcInVyaS1qc1wiKTtcbnVyaS5jb2RlID0gJ3JlcXVpcmUoXCJhanYvZGlzdC9ydW50aW1lL3VyaVwiKS5kZWZhdWx0JztcbmV4cG9ydHMuZGVmYXVsdCA9IHVyaTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXVyaS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Db2RlR2VuID0gZXhwb3J0cy5OYW1lID0gZXhwb3J0cy5uaWwgPSBleHBvcnRzLnN0cmluZ2lmeSA9IGV4cG9ydHMuc3RyID0gZXhwb3J0cy5fID0gZXhwb3J0cy5LZXl3b3JkQ3h0ID0gdm9pZCAwO1xudmFyIHZhbGlkYXRlXzEgPSByZXF1aXJlKFwiLi9jb21waWxlL3ZhbGlkYXRlXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiS2V5d29yZEN4dFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdmFsaWRhdGVfMS5LZXl3b3JkQ3h0OyB9IH0pO1xudmFyIGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuL2NvbXBpbGUvY29kZWdlblwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvZGVnZW5fMS5fOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic3RyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjb2RlZ2VuXzEuc3RyOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic3RyaW5naWZ5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjb2RlZ2VuXzEuc3RyaW5naWZ5OyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibmlsXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjb2RlZ2VuXzEubmlsOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiTmFtZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29kZWdlbl8xLk5hbWU7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJDb2RlR2VuXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjb2RlZ2VuXzEuQ29kZUdlbjsgfSB9KTtcbmNvbnN0IHZhbGlkYXRpb25fZXJyb3JfMSA9IHJlcXVpcmUoXCIuL3J1bnRpbWUvdmFsaWRhdGlvbl9lcnJvclwiKTtcbmNvbnN0IHJlZl9lcnJvcl8xID0gcmVxdWlyZShcIi4vY29tcGlsZS9yZWZfZXJyb3JcIik7XG5jb25zdCBydWxlc18xID0gcmVxdWlyZShcIi4vY29tcGlsZS9ydWxlc1wiKTtcbmNvbnN0IGNvbXBpbGVfMSA9IHJlcXVpcmUoXCIuL2NvbXBpbGVcIik7XG5jb25zdCBjb2RlZ2VuXzIgPSByZXF1aXJlKFwiLi9jb21waWxlL2NvZGVnZW5cIik7XG5jb25zdCByZXNvbHZlXzEgPSByZXF1aXJlKFwiLi9jb21waWxlL3Jlc29sdmVcIik7XG5jb25zdCBkYXRhVHlwZV8xID0gcmVxdWlyZShcIi4vY29tcGlsZS92YWxpZGF0ZS9kYXRhVHlwZVwiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuL2NvbXBpbGUvdXRpbFwiKTtcbmNvbnN0ICRkYXRhUmVmU2NoZW1hID0gcmVxdWlyZShcIi4vcmVmcy9kYXRhLmpzb25cIik7XG5jb25zdCB1cmlfMSA9IHJlcXVpcmUoXCIuL3J1bnRpbWUvdXJpXCIpO1xuY29uc3QgZGVmYXVsdFJlZ0V4cCA9IChzdHIsIGZsYWdzKSA9PiBuZXcgUmVnRXhwKHN0ciwgZmxhZ3MpO1xuZGVmYXVsdFJlZ0V4cC5jb2RlID0gXCJuZXcgUmVnRXhwXCI7XG5jb25zdCBNRVRBX0lHTk9SRV9PUFRJT05TID0gW1wicmVtb3ZlQWRkaXRpb25hbFwiLCBcInVzZURlZmF1bHRzXCIsIFwiY29lcmNlVHlwZXNcIl07XG5jb25zdCBFWFRfU0NPUEVfTkFNRVMgPSBuZXcgU2V0KFtcbiAgICBcInZhbGlkYXRlXCIsXG4gICAgXCJzZXJpYWxpemVcIixcbiAgICBcInBhcnNlXCIsXG4gICAgXCJ3cmFwcGVyXCIsXG4gICAgXCJyb290XCIsXG4gICAgXCJzY2hlbWFcIixcbiAgICBcImtleXdvcmRcIixcbiAgICBcInBhdHRlcm5cIixcbiAgICBcImZvcm1hdHNcIixcbiAgICBcInZhbGlkYXRlJGRhdGFcIixcbiAgICBcImZ1bmNcIixcbiAgICBcIm9ialwiLFxuICAgIFwiRXJyb3JcIixcbl0pO1xuY29uc3QgcmVtb3ZlZE9wdGlvbnMgPSB7XG4gICAgZXJyb3JEYXRhUGF0aDogXCJcIixcbiAgICBmb3JtYXQ6IFwiYHZhbGlkYXRlRm9ybWF0czogZmFsc2VgIGNhbiBiZSB1c2VkIGluc3RlYWQuXCIsXG4gICAgbnVsbGFibGU6ICdcIm51bGxhYmxlXCIga2V5d29yZCBpcyBzdXBwb3J0ZWQgYnkgZGVmYXVsdC4nLFxuICAgIGpzb25Qb2ludGVyczogXCJEZXByZWNhdGVkIGpzUHJvcGVydHlTeW50YXggY2FuIGJlIHVzZWQgaW5zdGVhZC5cIixcbiAgICBleHRlbmRSZWZzOiBcIkRlcHJlY2F0ZWQgaWdub3JlS2V5d29yZHNXaXRoUmVmIGNhbiBiZSB1c2VkIGluc3RlYWQuXCIsXG4gICAgbWlzc2luZ1JlZnM6IFwiUGFzcyBlbXB0eSBzY2hlbWEgd2l0aCAkaWQgdGhhdCBzaG91bGQgYmUgaWdub3JlZCB0byBhanYuYWRkU2NoZW1hLlwiLFxuICAgIHByb2Nlc3NDb2RlOiBcIlVzZSBvcHRpb24gYGNvZGU6IHtwcm9jZXNzOiAoY29kZSwgc2NoZW1hRW52OiBvYmplY3QpID0+IHN0cmluZ31gXCIsXG4gICAgc291cmNlQ29kZTogXCJVc2Ugb3B0aW9uIGBjb2RlOiB7c291cmNlOiB0cnVlfWBcIixcbiAgICBzdHJpY3REZWZhdWx0czogXCJJdCBpcyBkZWZhdWx0IG5vdywgc2VlIG9wdGlvbiBgc3RyaWN0YC5cIixcbiAgICBzdHJpY3RLZXl3b3JkczogXCJJdCBpcyBkZWZhdWx0IG5vdywgc2VlIG9wdGlvbiBgc3RyaWN0YC5cIixcbiAgICB1bmlxdWVJdGVtczogJ1widW5pcXVlSXRlbXNcIiBrZXl3b3JkIGlzIGFsd2F5cyB2YWxpZGF0ZWQuJyxcbiAgICB1bmtub3duRm9ybWF0czogXCJEaXNhYmxlIHN0cmljdCBtb2RlIG9yIHBhc3MgYHRydWVgIHRvIGBhanYuYWRkRm9ybWF0YCAob3IgYGZvcm1hdHNgIG9wdGlvbikuXCIsXG4gICAgY2FjaGU6IFwiTWFwIGlzIHVzZWQgYXMgY2FjaGUsIHNjaGVtYSBvYmplY3QgYXMga2V5LlwiLFxuICAgIHNlcmlhbGl6ZTogXCJNYXAgaXMgdXNlZCBhcyBjYWNoZSwgc2NoZW1hIG9iamVjdCBhcyBrZXkuXCIsXG4gICAgYWp2RXJyb3JzOiBcIkl0IGlzIGRlZmF1bHQgbm93LlwiLFxufTtcbmNvbnN0IGRlcHJlY2F0ZWRPcHRpb25zID0ge1xuICAgIGlnbm9yZUtleXdvcmRzV2l0aFJlZjogXCJcIixcbiAgICBqc1Byb3BlcnR5U3ludGF4OiBcIlwiLFxuICAgIHVuaWNvZGU6ICdcIm1pbkxlbmd0aFwiL1wibWF4TGVuZ3RoXCIgYWNjb3VudCBmb3IgdW5pY29kZSBjaGFyYWN0ZXJzIGJ5IGRlZmF1bHQuJyxcbn07XG5jb25zdCBNQVhfRVhQUkVTU0lPTiA9IDIwMDtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG5mdW5jdGlvbiByZXF1aXJlZE9wdGlvbnMobykge1xuICAgIHZhciBfYSwgX2IsIF9jLCBfZCwgX2UsIF9mLCBfZywgX2gsIF9qLCBfaywgX2wsIF9tLCBfbywgX3AsIF9xLCBfciwgX3MsIF90LCBfdSwgX3YsIF93LCBfeCwgX3ksIF96LCBfMDtcbiAgICBjb25zdCBzID0gby5zdHJpY3Q7XG4gICAgY29uc3QgX29wdHogPSAoX2EgPSBvLmNvZGUpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5vcHRpbWl6ZTtcbiAgICBjb25zdCBvcHRpbWl6ZSA9IF9vcHR6ID09PSB0cnVlIHx8IF9vcHR6ID09PSB1bmRlZmluZWQgPyAxIDogX29wdHogfHwgMDtcbiAgICBjb25zdCByZWdFeHAgPSAoX2MgPSAoX2IgPSBvLmNvZGUpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5yZWdFeHApICE9PSBudWxsICYmIF9jICE9PSB2b2lkIDAgPyBfYyA6IGRlZmF1bHRSZWdFeHA7XG4gICAgY29uc3QgdXJpUmVzb2x2ZXIgPSAoX2QgPSBvLnVyaVJlc29sdmVyKSAhPT0gbnVsbCAmJiBfZCAhPT0gdm9pZCAwID8gX2QgOiB1cmlfMS5kZWZhdWx0O1xuICAgIHJldHVybiB7XG4gICAgICAgIHN0cmljdFNjaGVtYTogKF9mID0gKF9lID0gby5zdHJpY3RTY2hlbWEpICE9PSBudWxsICYmIF9lICE9PSB2b2lkIDAgPyBfZSA6IHMpICE9PSBudWxsICYmIF9mICE9PSB2b2lkIDAgPyBfZiA6IHRydWUsXG4gICAgICAgIHN0cmljdE51bWJlcnM6IChfaCA9IChfZyA9IG8uc3RyaWN0TnVtYmVycykgIT09IG51bGwgJiYgX2cgIT09IHZvaWQgMCA/IF9nIDogcykgIT09IG51bGwgJiYgX2ggIT09IHZvaWQgMCA/IF9oIDogdHJ1ZSxcbiAgICAgICAgc3RyaWN0VHlwZXM6IChfayA9IChfaiA9IG8uc3RyaWN0VHlwZXMpICE9PSBudWxsICYmIF9qICE9PSB2b2lkIDAgPyBfaiA6IHMpICE9PSBudWxsICYmIF9rICE9PSB2b2lkIDAgPyBfayA6IFwibG9nXCIsXG4gICAgICAgIHN0cmljdFR1cGxlczogKF9tID0gKF9sID0gby5zdHJpY3RUdXBsZXMpICE9PSBudWxsICYmIF9sICE9PSB2b2lkIDAgPyBfbCA6IHMpICE9PSBudWxsICYmIF9tICE9PSB2b2lkIDAgPyBfbSA6IFwibG9nXCIsXG4gICAgICAgIHN0cmljdFJlcXVpcmVkOiAoX3AgPSAoX28gPSBvLnN0cmljdFJlcXVpcmVkKSAhPT0gbnVsbCAmJiBfbyAhPT0gdm9pZCAwID8gX28gOiBzKSAhPT0gbnVsbCAmJiBfcCAhPT0gdm9pZCAwID8gX3AgOiBmYWxzZSxcbiAgICAgICAgY29kZTogby5jb2RlID8geyAuLi5vLmNvZGUsIG9wdGltaXplLCByZWdFeHAgfSA6IHsgb3B0aW1pemUsIHJlZ0V4cCB9LFxuICAgICAgICBsb29wUmVxdWlyZWQ6IChfcSA9IG8ubG9vcFJlcXVpcmVkKSAhPT0gbnVsbCAmJiBfcSAhPT0gdm9pZCAwID8gX3EgOiBNQVhfRVhQUkVTU0lPTixcbiAgICAgICAgbG9vcEVudW06IChfciA9IG8ubG9vcEVudW0pICE9PSBudWxsICYmIF9yICE9PSB2b2lkIDAgPyBfciA6IE1BWF9FWFBSRVNTSU9OLFxuICAgICAgICBtZXRhOiAoX3MgPSBvLm1ldGEpICE9PSBudWxsICYmIF9zICE9PSB2b2lkIDAgPyBfcyA6IHRydWUsXG4gICAgICAgIG1lc3NhZ2VzOiAoX3QgPSBvLm1lc3NhZ2VzKSAhPT0gbnVsbCAmJiBfdCAhPT0gdm9pZCAwID8gX3QgOiB0cnVlLFxuICAgICAgICBpbmxpbmVSZWZzOiAoX3UgPSBvLmlubGluZVJlZnMpICE9PSBudWxsICYmIF91ICE9PSB2b2lkIDAgPyBfdSA6IHRydWUsXG4gICAgICAgIHNjaGVtYUlkOiAoX3YgPSBvLnNjaGVtYUlkKSAhPT0gbnVsbCAmJiBfdiAhPT0gdm9pZCAwID8gX3YgOiBcIiRpZFwiLFxuICAgICAgICBhZGRVc2VkU2NoZW1hOiAoX3cgPSBvLmFkZFVzZWRTY2hlbWEpICE9PSBudWxsICYmIF93ICE9PSB2b2lkIDAgPyBfdyA6IHRydWUsXG4gICAgICAgIHZhbGlkYXRlU2NoZW1hOiAoX3ggPSBvLnZhbGlkYXRlU2NoZW1hKSAhPT0gbnVsbCAmJiBfeCAhPT0gdm9pZCAwID8gX3ggOiB0cnVlLFxuICAgICAgICB2YWxpZGF0ZUZvcm1hdHM6IChfeSA9IG8udmFsaWRhdGVGb3JtYXRzKSAhPT0gbnVsbCAmJiBfeSAhPT0gdm9pZCAwID8gX3kgOiB0cnVlLFxuICAgICAgICB1bmljb2RlUmVnRXhwOiAoX3ogPSBvLnVuaWNvZGVSZWdFeHApICE9PSBudWxsICYmIF96ICE9PSB2b2lkIDAgPyBfeiA6IHRydWUsXG4gICAgICAgIGludDMycmFuZ2U6IChfMCA9IG8uaW50MzJyYW5nZSkgIT09IG51bGwgJiYgXzAgIT09IHZvaWQgMCA/IF8wIDogdHJ1ZSxcbiAgICAgICAgdXJpUmVzb2x2ZXI6IHVyaVJlc29sdmVyLFxuICAgIH07XG59XG5jbGFzcyBBanYge1xuICAgIGNvbnN0cnVjdG9yKG9wdHMgPSB7fSkge1xuICAgICAgICB0aGlzLnNjaGVtYXMgPSB7fTtcbiAgICAgICAgdGhpcy5yZWZzID0ge307XG4gICAgICAgIHRoaXMuZm9ybWF0cyA9IHt9O1xuICAgICAgICB0aGlzLl9jb21waWxhdGlvbnMgPSBuZXcgU2V0KCk7XG4gICAgICAgIHRoaXMuX2xvYWRpbmcgPSB7fTtcbiAgICAgICAgdGhpcy5fY2FjaGUgPSBuZXcgTWFwKCk7XG4gICAgICAgIG9wdHMgPSB0aGlzLm9wdHMgPSB7IC4uLm9wdHMsIC4uLnJlcXVpcmVkT3B0aW9ucyhvcHRzKSB9O1xuICAgICAgICBjb25zdCB7IGVzNSwgbGluZXMgfSA9IHRoaXMub3B0cy5jb2RlO1xuICAgICAgICB0aGlzLnNjb3BlID0gbmV3IGNvZGVnZW5fMi5WYWx1ZVNjb3BlKHsgc2NvcGU6IHt9LCBwcmVmaXhlczogRVhUX1NDT1BFX05BTUVTLCBlczUsIGxpbmVzIH0pO1xuICAgICAgICB0aGlzLmxvZ2dlciA9IGdldExvZ2dlcihvcHRzLmxvZ2dlcik7XG4gICAgICAgIGNvbnN0IGZvcm1hdE9wdCA9IG9wdHMudmFsaWRhdGVGb3JtYXRzO1xuICAgICAgICBvcHRzLnZhbGlkYXRlRm9ybWF0cyA9IGZhbHNlO1xuICAgICAgICB0aGlzLlJVTEVTID0gKDAsIHJ1bGVzXzEuZ2V0UnVsZXMpKCk7XG4gICAgICAgIGNoZWNrT3B0aW9ucy5jYWxsKHRoaXMsIHJlbW92ZWRPcHRpb25zLCBvcHRzLCBcIk5PVCBTVVBQT1JURURcIik7XG4gICAgICAgIGNoZWNrT3B0aW9ucy5jYWxsKHRoaXMsIGRlcHJlY2F0ZWRPcHRpb25zLCBvcHRzLCBcIkRFUFJFQ0FURURcIiwgXCJ3YXJuXCIpO1xuICAgICAgICB0aGlzLl9tZXRhT3B0cyA9IGdldE1ldGFTY2hlbWFPcHRpb25zLmNhbGwodGhpcyk7XG4gICAgICAgIGlmIChvcHRzLmZvcm1hdHMpXG4gICAgICAgICAgICBhZGRJbml0aWFsRm9ybWF0cy5jYWxsKHRoaXMpO1xuICAgICAgICB0aGlzLl9hZGRWb2NhYnVsYXJpZXMoKTtcbiAgICAgICAgdGhpcy5fYWRkRGVmYXVsdE1ldGFTY2hlbWEoKTtcbiAgICAgICAgaWYgKG9wdHMua2V5d29yZHMpXG4gICAgICAgICAgICBhZGRJbml0aWFsS2V5d29yZHMuY2FsbCh0aGlzLCBvcHRzLmtleXdvcmRzKTtcbiAgICAgICAgaWYgKHR5cGVvZiBvcHRzLm1ldGEgPT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgIHRoaXMuYWRkTWV0YVNjaGVtYShvcHRzLm1ldGEpO1xuICAgICAgICBhZGRJbml0aWFsU2NoZW1hcy5jYWxsKHRoaXMpO1xuICAgICAgICBvcHRzLnZhbGlkYXRlRm9ybWF0cyA9IGZvcm1hdE9wdDtcbiAgICB9XG4gICAgX2FkZFZvY2FidWxhcmllcygpIHtcbiAgICAgICAgdGhpcy5hZGRLZXl3b3JkKFwiJGFzeW5jXCIpO1xuICAgIH1cbiAgICBfYWRkRGVmYXVsdE1ldGFTY2hlbWEoKSB7XG4gICAgICAgIGNvbnN0IHsgJGRhdGEsIG1ldGEsIHNjaGVtYUlkIH0gPSB0aGlzLm9wdHM7XG4gICAgICAgIGxldCBfZGF0YVJlZlNjaGVtYSA9ICRkYXRhUmVmU2NoZW1hO1xuICAgICAgICBpZiAoc2NoZW1hSWQgPT09IFwiaWRcIikge1xuICAgICAgICAgICAgX2RhdGFSZWZTY2hlbWEgPSB7IC4uLiRkYXRhUmVmU2NoZW1hIH07XG4gICAgICAgICAgICBfZGF0YVJlZlNjaGVtYS5pZCA9IF9kYXRhUmVmU2NoZW1hLiRpZDtcbiAgICAgICAgICAgIGRlbGV0ZSBfZGF0YVJlZlNjaGVtYS4kaWQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1ldGEgJiYgJGRhdGEpXG4gICAgICAgICAgICB0aGlzLmFkZE1ldGFTY2hlbWEoX2RhdGFSZWZTY2hlbWEsIF9kYXRhUmVmU2NoZW1hW3NjaGVtYUlkXSwgZmFsc2UpO1xuICAgIH1cbiAgICBkZWZhdWx0TWV0YSgpIHtcbiAgICAgICAgY29uc3QgeyBtZXRhLCBzY2hlbWFJZCB9ID0gdGhpcy5vcHRzO1xuICAgICAgICByZXR1cm4gKHRoaXMub3B0cy5kZWZhdWx0TWV0YSA9IHR5cGVvZiBtZXRhID09IFwib2JqZWN0XCIgPyBtZXRhW3NjaGVtYUlkXSB8fCBtZXRhIDogdW5kZWZpbmVkKTtcbiAgICB9XG4gICAgdmFsaWRhdGUoc2NoZW1hS2V5UmVmLCAvLyBrZXksIHJlZiBvciBzY2hlbWEgb2JqZWN0XG4gICAgZGF0YSAvLyB0byBiZSB2YWxpZGF0ZWRcbiAgICApIHtcbiAgICAgICAgbGV0IHY7XG4gICAgICAgIGlmICh0eXBlb2Ygc2NoZW1hS2V5UmVmID09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHYgPSB0aGlzLmdldFNjaGVtYShzY2hlbWFLZXlSZWYpO1xuICAgICAgICAgICAgaWYgKCF2KVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgbm8gc2NoZW1hIHdpdGgga2V5IG9yIHJlZiBcIiR7c2NoZW1hS2V5UmVmfVwiYCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2ID0gdGhpcy5jb21waWxlKHNjaGVtYUtleVJlZik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdmFsaWQgPSB2KGRhdGEpO1xuICAgICAgICBpZiAoIShcIiRhc3luY1wiIGluIHYpKVxuICAgICAgICAgICAgdGhpcy5lcnJvcnMgPSB2LmVycm9ycztcbiAgICAgICAgcmV0dXJuIHZhbGlkO1xuICAgIH1cbiAgICBjb21waWxlKHNjaGVtYSwgX21ldGEpIHtcbiAgICAgICAgY29uc3Qgc2NoID0gdGhpcy5fYWRkU2NoZW1hKHNjaGVtYSwgX21ldGEpO1xuICAgICAgICByZXR1cm4gKHNjaC52YWxpZGF0ZSB8fCB0aGlzLl9jb21waWxlU2NoZW1hRW52KHNjaCkpO1xuICAgIH1cbiAgICBjb21waWxlQXN5bmMoc2NoZW1hLCBtZXRhKSB7XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5vcHRzLmxvYWRTY2hlbWEgIT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJvcHRpb25zLmxvYWRTY2hlbWEgc2hvdWxkIGJlIGEgZnVuY3Rpb25cIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyBsb2FkU2NoZW1hIH0gPSB0aGlzLm9wdHM7XG4gICAgICAgIHJldHVybiBydW5Db21waWxlQXN5bmMuY2FsbCh0aGlzLCBzY2hlbWEsIG1ldGEpO1xuICAgICAgICBhc3luYyBmdW5jdGlvbiBydW5Db21waWxlQXN5bmMoX3NjaGVtYSwgX21ldGEpIHtcbiAgICAgICAgICAgIGF3YWl0IGxvYWRNZXRhU2NoZW1hLmNhbGwodGhpcywgX3NjaGVtYS4kc2NoZW1hKTtcbiAgICAgICAgICAgIGNvbnN0IHNjaCA9IHRoaXMuX2FkZFNjaGVtYShfc2NoZW1hLCBfbWV0YSk7XG4gICAgICAgICAgICByZXR1cm4gc2NoLnZhbGlkYXRlIHx8IF9jb21waWxlQXN5bmMuY2FsbCh0aGlzLCBzY2gpO1xuICAgICAgICB9XG4gICAgICAgIGFzeW5jIGZ1bmN0aW9uIGxvYWRNZXRhU2NoZW1hKCRyZWYpIHtcbiAgICAgICAgICAgIGlmICgkcmVmICYmICF0aGlzLmdldFNjaGVtYSgkcmVmKSkge1xuICAgICAgICAgICAgICAgIGF3YWl0IHJ1bkNvbXBpbGVBc3luYy5jYWxsKHRoaXMsIHsgJHJlZiB9LCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBhc3luYyBmdW5jdGlvbiBfY29tcGlsZUFzeW5jKHNjaCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fY29tcGlsZVNjaGVtYUVudihzY2gpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoIShlIGluc3RhbmNlb2YgcmVmX2Vycm9yXzEuZGVmYXVsdCkpXG4gICAgICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICAgICAgY2hlY2tMb2FkZWQuY2FsbCh0aGlzLCBlKTtcbiAgICAgICAgICAgICAgICBhd2FpdCBsb2FkTWlzc2luZ1NjaGVtYS5jYWxsKHRoaXMsIGUubWlzc2luZ1NjaGVtYSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9jb21waWxlQXN5bmMuY2FsbCh0aGlzLCBzY2gpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGNoZWNrTG9hZGVkKHsgbWlzc2luZ1NjaGVtYTogcmVmLCBtaXNzaW5nUmVmIH0pIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnJlZnNbcmVmXSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQW55U2NoZW1hICR7cmVmfSBpcyBsb2FkZWQgYnV0ICR7bWlzc2luZ1JlZn0gY2Fubm90IGJlIHJlc29sdmVkYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYXN5bmMgZnVuY3Rpb24gbG9hZE1pc3NpbmdTY2hlbWEocmVmKSB7XG4gICAgICAgICAgICBjb25zdCBfc2NoZW1hID0gYXdhaXQgX2xvYWRTY2hlbWEuY2FsbCh0aGlzLCByZWYpO1xuICAgICAgICAgICAgaWYgKCF0aGlzLnJlZnNbcmVmXSlcbiAgICAgICAgICAgICAgICBhd2FpdCBsb2FkTWV0YVNjaGVtYS5jYWxsKHRoaXMsIF9zY2hlbWEuJHNjaGVtYSk7XG4gICAgICAgICAgICBpZiAoIXRoaXMucmVmc1tyZWZdKVxuICAgICAgICAgICAgICAgIHRoaXMuYWRkU2NoZW1hKF9zY2hlbWEsIHJlZiwgbWV0YSk7XG4gICAgICAgIH1cbiAgICAgICAgYXN5bmMgZnVuY3Rpb24gX2xvYWRTY2hlbWEocmVmKSB7XG4gICAgICAgICAgICBjb25zdCBwID0gdGhpcy5fbG9hZGluZ1tyZWZdO1xuICAgICAgICAgICAgaWYgKHApXG4gICAgICAgICAgICAgICAgcmV0dXJuIHA7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCAodGhpcy5fbG9hZGluZ1tyZWZdID0gbG9hZFNjaGVtYShyZWYpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9sb2FkaW5nW3JlZl07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gQWRkcyBzY2hlbWEgdG8gdGhlIGluc3RhbmNlXG4gICAgYWRkU2NoZW1hKHNjaGVtYSwgLy8gSWYgYXJyYXkgaXMgcGFzc2VkLCBga2V5YCB3aWxsIGJlIGlnbm9yZWRcbiAgICBrZXksIC8vIE9wdGlvbmFsIHNjaGVtYSBrZXkuIENhbiBiZSBwYXNzZWQgdG8gYHZhbGlkYXRlYCBtZXRob2QgaW5zdGVhZCBvZiBzY2hlbWEgb2JqZWN0IG9yIGlkL3JlZi4gT25lIHNjaGVtYSBwZXIgaW5zdGFuY2UgY2FuIGhhdmUgZW1wdHkgYGlkYCBhbmQgYGtleWAuXG4gICAgX21ldGEsIC8vIHRydWUgaWYgc2NoZW1hIGlzIGEgbWV0YS1zY2hlbWEuIFVzZWQgaW50ZXJuYWxseSwgYWRkTWV0YVNjaGVtYSBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkLlxuICAgIF92YWxpZGF0ZVNjaGVtYSA9IHRoaXMub3B0cy52YWxpZGF0ZVNjaGVtYSAvLyBmYWxzZSB0byBza2lwIHNjaGVtYSB2YWxpZGF0aW9uLiBVc2VkIGludGVybmFsbHksIG9wdGlvbiB2YWxpZGF0ZVNjaGVtYSBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkLlxuICAgICkge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShzY2hlbWEpKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHNjaCBvZiBzY2hlbWEpXG4gICAgICAgICAgICAgICAgdGhpcy5hZGRTY2hlbWEoc2NoLCB1bmRlZmluZWQsIF9tZXRhLCBfdmFsaWRhdGVTY2hlbWEpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGlkO1xuICAgICAgICBpZiAodHlwZW9mIHNjaGVtYSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgY29uc3QgeyBzY2hlbWFJZCB9ID0gdGhpcy5vcHRzO1xuICAgICAgICAgICAgaWQgPSBzY2hlbWFbc2NoZW1hSWRdO1xuICAgICAgICAgICAgaWYgKGlkICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIGlkICE9IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHNjaGVtYSAke3NjaGVtYUlkfSBtdXN0IGJlIHN0cmluZ2ApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGtleSA9ICgwLCByZXNvbHZlXzEubm9ybWFsaXplSWQpKGtleSB8fCBpZCk7XG4gICAgICAgIHRoaXMuX2NoZWNrVW5pcXVlKGtleSk7XG4gICAgICAgIHRoaXMuc2NoZW1hc1trZXldID0gdGhpcy5fYWRkU2NoZW1hKHNjaGVtYSwgX21ldGEsIGtleSwgX3ZhbGlkYXRlU2NoZW1hLCB0cnVlKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8vIEFkZCBzY2hlbWEgdGhhdCB3aWxsIGJlIHVzZWQgdG8gdmFsaWRhdGUgb3RoZXIgc2NoZW1hc1xuICAgIC8vIG9wdGlvbnMgaW4gTUVUQV9JR05PUkVfT1BUSU9OUyBhcmUgYWx3YXkgc2V0IHRvIGZhbHNlXG4gICAgYWRkTWV0YVNjaGVtYShzY2hlbWEsIGtleSwgLy8gc2NoZW1hIGtleVxuICAgIF92YWxpZGF0ZVNjaGVtYSA9IHRoaXMub3B0cy52YWxpZGF0ZVNjaGVtYSAvLyBmYWxzZSB0byBza2lwIHNjaGVtYSB2YWxpZGF0aW9uLCBjYW4gYmUgdXNlZCB0byBvdmVycmlkZSB2YWxpZGF0ZVNjaGVtYSBvcHRpb24gZm9yIG1ldGEtc2NoZW1hXG4gICAgKSB7XG4gICAgICAgIHRoaXMuYWRkU2NoZW1hKHNjaGVtYSwga2V5LCB0cnVlLCBfdmFsaWRhdGVTY2hlbWEpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLy8gIFZhbGlkYXRlIHNjaGVtYSBhZ2FpbnN0IGl0cyBtZXRhLXNjaGVtYVxuICAgIHZhbGlkYXRlU2NoZW1hKHNjaGVtYSwgdGhyb3dPckxvZ0Vycm9yKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc2NoZW1hID09IFwiYm9vbGVhblwiKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIGxldCAkc2NoZW1hO1xuICAgICAgICAkc2NoZW1hID0gc2NoZW1hLiRzY2hlbWE7XG4gICAgICAgIGlmICgkc2NoZW1hICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mICRzY2hlbWEgIT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiJHNjaGVtYSBtdXN0IGJlIGEgc3RyaW5nXCIpO1xuICAgICAgICB9XG4gICAgICAgICRzY2hlbWEgPSAkc2NoZW1hIHx8IHRoaXMub3B0cy5kZWZhdWx0TWV0YSB8fCB0aGlzLmRlZmF1bHRNZXRhKCk7XG4gICAgICAgIGlmICghJHNjaGVtYSkge1xuICAgICAgICAgICAgdGhpcy5sb2dnZXIud2FybihcIm1ldGEtc2NoZW1hIG5vdCBhdmFpbGFibGVcIik7XG4gICAgICAgICAgICB0aGlzLmVycm9ycyA9IG51bGw7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB2YWxpZCA9IHRoaXMudmFsaWRhdGUoJHNjaGVtYSwgc2NoZW1hKTtcbiAgICAgICAgaWYgKCF2YWxpZCAmJiB0aHJvd09yTG9nRXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBcInNjaGVtYSBpcyBpbnZhbGlkOiBcIiArIHRoaXMuZXJyb3JzVGV4dCgpO1xuICAgICAgICAgICAgaWYgKHRoaXMub3B0cy52YWxpZGF0ZVNjaGVtYSA9PT0gXCJsb2dcIilcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcihtZXNzYWdlKTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbGlkO1xuICAgIH1cbiAgICAvLyBHZXQgY29tcGlsZWQgc2NoZW1hIGJ5IGBrZXlgIG9yIGByZWZgLlxuICAgIC8vIChga2V5YCB0aGF0IHdhcyBwYXNzZWQgdG8gYGFkZFNjaGVtYWAgb3IgZnVsbCBzY2hlbWEgcmVmZXJlbmNlIC0gYHNjaGVtYS4kaWRgIG9yIHJlc29sdmVkIGlkKVxuICAgIGdldFNjaGVtYShrZXlSZWYpIHtcbiAgICAgICAgbGV0IHNjaDtcbiAgICAgICAgd2hpbGUgKHR5cGVvZiAoc2NoID0gZ2V0U2NoRW52LmNhbGwodGhpcywga2V5UmVmKSkgPT0gXCJzdHJpbmdcIilcbiAgICAgICAgICAgIGtleVJlZiA9IHNjaDtcbiAgICAgICAgaWYgKHNjaCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb25zdCB7IHNjaGVtYUlkIH0gPSB0aGlzLm9wdHM7XG4gICAgICAgICAgICBjb25zdCByb290ID0gbmV3IGNvbXBpbGVfMS5TY2hlbWFFbnYoeyBzY2hlbWE6IHt9LCBzY2hlbWFJZCB9KTtcbiAgICAgICAgICAgIHNjaCA9IGNvbXBpbGVfMS5yZXNvbHZlU2NoZW1hLmNhbGwodGhpcywgcm9vdCwga2V5UmVmKTtcbiAgICAgICAgICAgIGlmICghc2NoKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIHRoaXMucmVmc1trZXlSZWZdID0gc2NoO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAoc2NoLnZhbGlkYXRlIHx8IHRoaXMuX2NvbXBpbGVTY2hlbWFFbnYoc2NoKSk7XG4gICAgfVxuICAgIC8vIFJlbW92ZSBjYWNoZWQgc2NoZW1hKHMpLlxuICAgIC8vIElmIG5vIHBhcmFtZXRlciBpcyBwYXNzZWQgYWxsIHNjaGVtYXMgYnV0IG1ldGEtc2NoZW1hcyBhcmUgcmVtb3ZlZC5cbiAgICAvLyBJZiBSZWdFeHAgaXMgcGFzc2VkIGFsbCBzY2hlbWFzIHdpdGgga2V5L2lkIG1hdGNoaW5nIHBhdHRlcm4gYnV0IG1ldGEtc2NoZW1hcyBhcmUgcmVtb3ZlZC5cbiAgICAvLyBFdmVuIGlmIHNjaGVtYSBpcyByZWZlcmVuY2VkIGJ5IG90aGVyIHNjaGVtYXMgaXQgc3RpbGwgY2FuIGJlIHJlbW92ZWQgYXMgb3RoZXIgc2NoZW1hcyBoYXZlIGxvY2FsIHJlZmVyZW5jZXMuXG4gICAgcmVtb3ZlU2NoZW1hKHNjaGVtYUtleVJlZikge1xuICAgICAgICBpZiAoc2NoZW1hS2V5UmVmIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICAgICAgICB0aGlzLl9yZW1vdmVBbGxTY2hlbWFzKHRoaXMuc2NoZW1hcywgc2NoZW1hS2V5UmVmKTtcbiAgICAgICAgICAgIHRoaXMuX3JlbW92ZUFsbFNjaGVtYXModGhpcy5yZWZzLCBzY2hlbWFLZXlSZWYpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoICh0eXBlb2Ygc2NoZW1hS2V5UmVmKSB7XG4gICAgICAgICAgICBjYXNlIFwidW5kZWZpbmVkXCI6XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVtb3ZlQWxsU2NoZW1hcyh0aGlzLnNjaGVtYXMpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3JlbW92ZUFsbFNjaGVtYXModGhpcy5yZWZzKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9jYWNoZS5jbGVhcigpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgY2FzZSBcInN0cmluZ1wiOiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2NoID0gZ2V0U2NoRW52LmNhbGwodGhpcywgc2NoZW1hS2V5UmVmKTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHNjaCA9PSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jYWNoZS5kZWxldGUoc2NoLnNjaGVtYSk7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuc2NoZW1hc1tzY2hlbWFLZXlSZWZdO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnJlZnNbc2NoZW1hS2V5UmVmXTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJvYmplY3RcIjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNhY2hlS2V5ID0gc2NoZW1hS2V5UmVmO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NhY2hlLmRlbGV0ZShjYWNoZUtleSk7XG4gICAgICAgICAgICAgICAgbGV0IGlkID0gc2NoZW1hS2V5UmVmW3RoaXMub3B0cy5zY2hlbWFJZF07XG4gICAgICAgICAgICAgICAgaWYgKGlkKSB7XG4gICAgICAgICAgICAgICAgICAgIGlkID0gKDAsIHJlc29sdmVfMS5ub3JtYWxpemVJZCkoaWQpO1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5zY2hlbWFzW2lkXTtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMucmVmc1tpZF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJhanYucmVtb3ZlU2NoZW1hOiBpbnZhbGlkIHBhcmFtZXRlclwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBhZGQgXCJ2b2NhYnVsYXJ5XCIgLSBhIGNvbGxlY3Rpb24gb2Yga2V5d29yZHNcbiAgICBhZGRWb2NhYnVsYXJ5KGRlZmluaXRpb25zKSB7XG4gICAgICAgIGZvciAoY29uc3QgZGVmIG9mIGRlZmluaXRpb25zKVxuICAgICAgICAgICAgdGhpcy5hZGRLZXl3b3JkKGRlZik7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBhZGRLZXl3b3JkKGt3ZE9yRGVmLCBkZWYgLy8gZGVwcmVjYXRlZFxuICAgICkge1xuICAgICAgICBsZXQga2V5d29yZDtcbiAgICAgICAgaWYgKHR5cGVvZiBrd2RPckRlZiA9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICBrZXl3b3JkID0ga3dkT3JEZWY7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGRlZiA9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIud2FybihcInRoZXNlIHBhcmFtZXRlcnMgYXJlIGRlcHJlY2F0ZWQsIHNlZSBkb2NzIGZvciBhZGRLZXl3b3JkXCIpO1xuICAgICAgICAgICAgICAgIGRlZi5rZXl3b3JkID0ga2V5d29yZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlb2Yga3dkT3JEZWYgPT0gXCJvYmplY3RcIiAmJiBkZWYgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZGVmID0ga3dkT3JEZWY7XG4gICAgICAgICAgICBrZXl3b3JkID0gZGVmLmtleXdvcmQ7XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShrZXl3b3JkKSAmJiAha2V5d29yZC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJhZGRLZXl3b3Jkczoga2V5d29yZCBtdXN0IGJlIHN0cmluZyBvciBub24tZW1wdHkgYXJyYXlcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIGFkZEtleXdvcmRzIHBhcmFtZXRlcnNcIik7XG4gICAgICAgIH1cbiAgICAgICAgY2hlY2tLZXl3b3JkLmNhbGwodGhpcywga2V5d29yZCwgZGVmKTtcbiAgICAgICAgaWYgKCFkZWYpIHtcbiAgICAgICAgICAgICgwLCB1dGlsXzEuZWFjaEl0ZW0pKGtleXdvcmQsIChrd2QpID0+IGFkZFJ1bGUuY2FsbCh0aGlzLCBrd2QpKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIGtleXdvcmRNZXRhc2NoZW1hLmNhbGwodGhpcywgZGVmKTtcbiAgICAgICAgY29uc3QgZGVmaW5pdGlvbiA9IHtcbiAgICAgICAgICAgIC4uLmRlZixcbiAgICAgICAgICAgIHR5cGU6ICgwLCBkYXRhVHlwZV8xLmdldEpTT05UeXBlcykoZGVmLnR5cGUpLFxuICAgICAgICAgICAgc2NoZW1hVHlwZTogKDAsIGRhdGFUeXBlXzEuZ2V0SlNPTlR5cGVzKShkZWYuc2NoZW1hVHlwZSksXG4gICAgICAgIH07XG4gICAgICAgICgwLCB1dGlsXzEuZWFjaEl0ZW0pKGtleXdvcmQsIGRlZmluaXRpb24udHlwZS5sZW5ndGggPT09IDBcbiAgICAgICAgICAgID8gKGspID0+IGFkZFJ1bGUuY2FsbCh0aGlzLCBrLCBkZWZpbml0aW9uKVxuICAgICAgICAgICAgOiAoaykgPT4gZGVmaW5pdGlvbi50eXBlLmZvckVhY2goKHQpID0+IGFkZFJ1bGUuY2FsbCh0aGlzLCBrLCBkZWZpbml0aW9uLCB0KSkpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgZ2V0S2V5d29yZChrZXl3b3JkKSB7XG4gICAgICAgIGNvbnN0IHJ1bGUgPSB0aGlzLlJVTEVTLmFsbFtrZXl3b3JkXTtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBydWxlID09IFwib2JqZWN0XCIgPyBydWxlLmRlZmluaXRpb24gOiAhIXJ1bGU7XG4gICAgfVxuICAgIC8vIFJlbW92ZSBrZXl3b3JkXG4gICAgcmVtb3ZlS2V5d29yZChrZXl3b3JkKSB7XG4gICAgICAgIC8vIFRPRE8gcmV0dXJuIHR5cGUgc2hvdWxkIGJlIEFqdlxuICAgICAgICBjb25zdCB7IFJVTEVTIH0gPSB0aGlzO1xuICAgICAgICBkZWxldGUgUlVMRVMua2V5d29yZHNba2V5d29yZF07XG4gICAgICAgIGRlbGV0ZSBSVUxFUy5hbGxba2V5d29yZF07XG4gICAgICAgIGZvciAoY29uc3QgZ3JvdXAgb2YgUlVMRVMucnVsZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGkgPSBncm91cC5ydWxlcy5maW5kSW5kZXgoKHJ1bGUpID0+IHJ1bGUua2V5d29yZCA9PT0ga2V5d29yZCk7XG4gICAgICAgICAgICBpZiAoaSA+PSAwKVxuICAgICAgICAgICAgICAgIGdyb3VwLnJ1bGVzLnNwbGljZShpLCAxKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLy8gQWRkIGZvcm1hdFxuICAgIGFkZEZvcm1hdChuYW1lLCBmb3JtYXQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBmb3JtYXQgPT0gXCJzdHJpbmdcIilcbiAgICAgICAgICAgIGZvcm1hdCA9IG5ldyBSZWdFeHAoZm9ybWF0KTtcbiAgICAgICAgdGhpcy5mb3JtYXRzW25hbWVdID0gZm9ybWF0O1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgZXJyb3JzVGV4dChlcnJvcnMgPSB0aGlzLmVycm9ycywgLy8gb3B0aW9uYWwgYXJyYXkgb2YgdmFsaWRhdGlvbiBlcnJvcnNcbiAgICB7IHNlcGFyYXRvciA9IFwiLCBcIiwgZGF0YVZhciA9IFwiZGF0YVwiIH0gPSB7fSAvLyBvcHRpb25hbCBvcHRpb25zIHdpdGggcHJvcGVydGllcyBgc2VwYXJhdG9yYCBhbmQgYGRhdGFWYXJgXG4gICAgKSB7XG4gICAgICAgIGlmICghZXJyb3JzIHx8IGVycm9ycy5sZW5ndGggPT09IDApXG4gICAgICAgICAgICByZXR1cm4gXCJObyBlcnJvcnNcIjtcbiAgICAgICAgcmV0dXJuIGVycm9yc1xuICAgICAgICAgICAgLm1hcCgoZSkgPT4gYCR7ZGF0YVZhcn0ke2UuaW5zdGFuY2VQYXRofSAke2UubWVzc2FnZX1gKVxuICAgICAgICAgICAgLnJlZHVjZSgodGV4dCwgbXNnKSA9PiB0ZXh0ICsgc2VwYXJhdG9yICsgbXNnKTtcbiAgICB9XG4gICAgJGRhdGFNZXRhU2NoZW1hKG1ldGFTY2hlbWEsIGtleXdvcmRzSnNvblBvaW50ZXJzKSB7XG4gICAgICAgIGNvbnN0IHJ1bGVzID0gdGhpcy5SVUxFUy5hbGw7XG4gICAgICAgIG1ldGFTY2hlbWEgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG1ldGFTY2hlbWEpKTtcbiAgICAgICAgZm9yIChjb25zdCBqc29uUG9pbnRlciBvZiBrZXl3b3Jkc0pzb25Qb2ludGVycykge1xuICAgICAgICAgICAgY29uc3Qgc2VnbWVudHMgPSBqc29uUG9pbnRlci5zcGxpdChcIi9cIikuc2xpY2UoMSk7IC8vIGZpcnN0IHNlZ21lbnQgaXMgYW4gZW1wdHkgc3RyaW5nXG4gICAgICAgICAgICBsZXQga2V5d29yZHMgPSBtZXRhU2NoZW1hO1xuICAgICAgICAgICAgZm9yIChjb25zdCBzZWcgb2Ygc2VnbWVudHMpXG4gICAgICAgICAgICAgICAga2V5d29yZHMgPSBrZXl3b3Jkc1tzZWddO1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gcnVsZXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBydWxlID0gcnVsZXNba2V5XTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHJ1bGUgIT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgY29uc3QgeyAkZGF0YSB9ID0gcnVsZS5kZWZpbml0aW9uO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNjaGVtYSA9IGtleXdvcmRzW2tleV07XG4gICAgICAgICAgICAgICAgaWYgKCRkYXRhICYmIHNjaGVtYSlcbiAgICAgICAgICAgICAgICAgICAga2V5d29yZHNba2V5XSA9IHNjaGVtYU9yRGF0YShzY2hlbWEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtZXRhU2NoZW1hO1xuICAgIH1cbiAgICBfcmVtb3ZlQWxsU2NoZW1hcyhzY2hlbWFzLCByZWdleCkge1xuICAgICAgICBmb3IgKGNvbnN0IGtleVJlZiBpbiBzY2hlbWFzKSB7XG4gICAgICAgICAgICBjb25zdCBzY2ggPSBzY2hlbWFzW2tleVJlZl07XG4gICAgICAgICAgICBpZiAoIXJlZ2V4IHx8IHJlZ2V4LnRlc3Qoa2V5UmVmKSkge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygc2NoID09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHNjaGVtYXNba2V5UmVmXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoc2NoICYmICFzY2gubWV0YSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jYWNoZS5kZWxldGUoc2NoLnNjaGVtYSk7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBzY2hlbWFzW2tleVJlZl07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIF9hZGRTY2hlbWEoc2NoZW1hLCBtZXRhLCBiYXNlSWQsIHZhbGlkYXRlU2NoZW1hID0gdGhpcy5vcHRzLnZhbGlkYXRlU2NoZW1hLCBhZGRTY2hlbWEgPSB0aGlzLm9wdHMuYWRkVXNlZFNjaGVtYSkge1xuICAgICAgICBsZXQgaWQ7XG4gICAgICAgIGNvbnN0IHsgc2NoZW1hSWQgfSA9IHRoaXMub3B0cztcbiAgICAgICAgaWYgKHR5cGVvZiBzY2hlbWEgPT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgaWQgPSBzY2hlbWFbc2NoZW1hSWRdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMub3B0cy5qdGQpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwic2NoZW1hIG11c3QgYmUgb2JqZWN0XCIpO1xuICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIHNjaGVtYSAhPSBcImJvb2xlYW5cIilcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJzY2hlbWEgbXVzdCBiZSBvYmplY3Qgb3IgYm9vbGVhblwiKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgc2NoID0gdGhpcy5fY2FjaGUuZ2V0KHNjaGVtYSk7XG4gICAgICAgIGlmIChzY2ggIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHJldHVybiBzY2g7XG4gICAgICAgIGJhc2VJZCA9ICgwLCByZXNvbHZlXzEubm9ybWFsaXplSWQpKGlkIHx8IGJhc2VJZCk7XG4gICAgICAgIGNvbnN0IGxvY2FsUmVmcyA9IHJlc29sdmVfMS5nZXRTY2hlbWFSZWZzLmNhbGwodGhpcywgc2NoZW1hLCBiYXNlSWQpO1xuICAgICAgICBzY2ggPSBuZXcgY29tcGlsZV8xLlNjaGVtYUVudih7IHNjaGVtYSwgc2NoZW1hSWQsIG1ldGEsIGJhc2VJZCwgbG9jYWxSZWZzIH0pO1xuICAgICAgICB0aGlzLl9jYWNoZS5zZXQoc2NoLnNjaGVtYSwgc2NoKTtcbiAgICAgICAgaWYgKGFkZFNjaGVtYSAmJiAhYmFzZUlkLnN0YXJ0c1dpdGgoXCIjXCIpKSB7XG4gICAgICAgICAgICAvLyBUT0RPIGF0bSBpdCBpcyBhbGxvd2VkIHRvIG92ZXJ3cml0ZSBzY2hlbWFzIHdpdGhvdXQgaWQgKGluc3RlYWQgb2Ygbm90IGFkZGluZyB0aGVtKVxuICAgICAgICAgICAgaWYgKGJhc2VJZClcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGVja1VuaXF1ZShiYXNlSWQpO1xuICAgICAgICAgICAgdGhpcy5yZWZzW2Jhc2VJZF0gPSBzY2g7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbGlkYXRlU2NoZW1hKVxuICAgICAgICAgICAgdGhpcy52YWxpZGF0ZVNjaGVtYShzY2hlbWEsIHRydWUpO1xuICAgICAgICByZXR1cm4gc2NoO1xuICAgIH1cbiAgICBfY2hlY2tVbmlxdWUoaWQpIHtcbiAgICAgICAgaWYgKHRoaXMuc2NoZW1hc1tpZF0gfHwgdGhpcy5yZWZzW2lkXSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBzY2hlbWEgd2l0aCBrZXkgb3IgaWQgXCIke2lkfVwiIGFscmVhZHkgZXhpc3RzYCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgX2NvbXBpbGVTY2hlbWFFbnYoc2NoKSB7XG4gICAgICAgIGlmIChzY2gubWV0YSlcbiAgICAgICAgICAgIHRoaXMuX2NvbXBpbGVNZXRhU2NoZW1hKHNjaCk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIGNvbXBpbGVfMS5jb21waWxlU2NoZW1hLmNhbGwodGhpcywgc2NoKTtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgIGlmICghc2NoLnZhbGlkYXRlKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYWp2IGltcGxlbWVudGF0aW9uIGVycm9yXCIpO1xuICAgICAgICByZXR1cm4gc2NoLnZhbGlkYXRlO1xuICAgIH1cbiAgICBfY29tcGlsZU1ldGFTY2hlbWEoc2NoKSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRPcHRzID0gdGhpcy5vcHRzO1xuICAgICAgICB0aGlzLm9wdHMgPSB0aGlzLl9tZXRhT3B0cztcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbXBpbGVfMS5jb21waWxlU2NoZW1hLmNhbGwodGhpcywgc2NoKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRoaXMub3B0cyA9IGN1cnJlbnRPcHRzO1xuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0cy5kZWZhdWx0ID0gQWp2O1xuQWp2LlZhbGlkYXRpb25FcnJvciA9IHZhbGlkYXRpb25fZXJyb3JfMS5kZWZhdWx0O1xuQWp2Lk1pc3NpbmdSZWZFcnJvciA9IHJlZl9lcnJvcl8xLmRlZmF1bHQ7XG5mdW5jdGlvbiBjaGVja09wdGlvbnMoY2hlY2tPcHRzLCBvcHRpb25zLCBtc2csIGxvZyA9IFwiZXJyb3JcIikge1xuICAgIGZvciAoY29uc3Qga2V5IGluIGNoZWNrT3B0cykge1xuICAgICAgICBjb25zdCBvcHQgPSBrZXk7XG4gICAgICAgIGlmIChvcHQgaW4gb3B0aW9ucylcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyW2xvZ10oYCR7bXNnfTogb3B0aW9uICR7a2V5fS4gJHtjaGVja09wdHNbb3B0XX1gKTtcbiAgICB9XG59XG5mdW5jdGlvbiBnZXRTY2hFbnYoa2V5UmVmKSB7XG4gICAga2V5UmVmID0gKDAsIHJlc29sdmVfMS5ub3JtYWxpemVJZCkoa2V5UmVmKTsgLy8gVE9ETyB0ZXN0cyBmYWlsIHdpdGhvdXQgdGhpcyBsaW5lXG4gICAgcmV0dXJuIHRoaXMuc2NoZW1hc1trZXlSZWZdIHx8IHRoaXMucmVmc1trZXlSZWZdO1xufVxuZnVuY3Rpb24gYWRkSW5pdGlhbFNjaGVtYXMoKSB7XG4gICAgY29uc3Qgb3B0c1NjaGVtYXMgPSB0aGlzLm9wdHMuc2NoZW1hcztcbiAgICBpZiAoIW9wdHNTY2hlbWFzKVxuICAgICAgICByZXR1cm47XG4gICAgaWYgKEFycmF5LmlzQXJyYXkob3B0c1NjaGVtYXMpKVxuICAgICAgICB0aGlzLmFkZFNjaGVtYShvcHRzU2NoZW1hcyk7XG4gICAgZWxzZVxuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBvcHRzU2NoZW1hcylcbiAgICAgICAgICAgIHRoaXMuYWRkU2NoZW1hKG9wdHNTY2hlbWFzW2tleV0sIGtleSk7XG59XG5mdW5jdGlvbiBhZGRJbml0aWFsRm9ybWF0cygpIHtcbiAgICBmb3IgKGNvbnN0IG5hbWUgaW4gdGhpcy5vcHRzLmZvcm1hdHMpIHtcbiAgICAgICAgY29uc3QgZm9ybWF0ID0gdGhpcy5vcHRzLmZvcm1hdHNbbmFtZV07XG4gICAgICAgIGlmIChmb3JtYXQpXG4gICAgICAgICAgICB0aGlzLmFkZEZvcm1hdChuYW1lLCBmb3JtYXQpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGFkZEluaXRpYWxLZXl3b3JkcyhkZWZzKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZGVmcykpIHtcbiAgICAgICAgdGhpcy5hZGRWb2NhYnVsYXJ5KGRlZnMpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMubG9nZ2VyLndhcm4oXCJrZXl3b3JkcyBvcHRpb24gYXMgbWFwIGlzIGRlcHJlY2F0ZWQsIHBhc3MgYXJyYXlcIik7XG4gICAgZm9yIChjb25zdCBrZXl3b3JkIGluIGRlZnMpIHtcbiAgICAgICAgY29uc3QgZGVmID0gZGVmc1trZXl3b3JkXTtcbiAgICAgICAgaWYgKCFkZWYua2V5d29yZClcbiAgICAgICAgICAgIGRlZi5rZXl3b3JkID0ga2V5d29yZDtcbiAgICAgICAgdGhpcy5hZGRLZXl3b3JkKGRlZik7XG4gICAgfVxufVxuZnVuY3Rpb24gZ2V0TWV0YVNjaGVtYU9wdGlvbnMoKSB7XG4gICAgY29uc3QgbWV0YU9wdHMgPSB7IC4uLnRoaXMub3B0cyB9O1xuICAgIGZvciAoY29uc3Qgb3B0IG9mIE1FVEFfSUdOT1JFX09QVElPTlMpXG4gICAgICAgIGRlbGV0ZSBtZXRhT3B0c1tvcHRdO1xuICAgIHJldHVybiBtZXRhT3B0cztcbn1cbmNvbnN0IG5vTG9ncyA9IHsgbG9nKCkgeyB9LCB3YXJuKCkgeyB9LCBlcnJvcigpIHsgfSB9O1xuZnVuY3Rpb24gZ2V0TG9nZ2VyKGxvZ2dlcikge1xuICAgIGlmIChsb2dnZXIgPT09IGZhbHNlKVxuICAgICAgICByZXR1cm4gbm9Mb2dzO1xuICAgIGlmIChsb2dnZXIgPT09IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuIGNvbnNvbGU7XG4gICAgaWYgKGxvZ2dlci5sb2cgJiYgbG9nZ2VyLndhcm4gJiYgbG9nZ2VyLmVycm9yKVxuICAgICAgICByZXR1cm4gbG9nZ2VyO1xuICAgIHRocm93IG5ldyBFcnJvcihcImxvZ2dlciBtdXN0IGltcGxlbWVudCBsb2csIHdhcm4gYW5kIGVycm9yIG1ldGhvZHNcIik7XG59XG5jb25zdCBLRVlXT1JEX05BTUUgPSAvXlthLXpfJF1bYS16MC05XyQ6LV0qJC9pO1xuZnVuY3Rpb24gY2hlY2tLZXl3b3JkKGtleXdvcmQsIGRlZikge1xuICAgIGNvbnN0IHsgUlVMRVMgfSA9IHRoaXM7XG4gICAgKDAsIHV0aWxfMS5lYWNoSXRlbSkoa2V5d29yZCwgKGt3ZCkgPT4ge1xuICAgICAgICBpZiAoUlVMRVMua2V5d29yZHNba3dkXSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgS2V5d29yZCAke2t3ZH0gaXMgYWxyZWFkeSBkZWZpbmVkYCk7XG4gICAgICAgIGlmICghS0VZV09SRF9OQU1FLnRlc3Qoa3dkKSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgS2V5d29yZCAke2t3ZH0gaGFzIGludmFsaWQgbmFtZWApO1xuICAgIH0pO1xuICAgIGlmICghZGVmKVxuICAgICAgICByZXR1cm47XG4gICAgaWYgKGRlZi4kZGF0YSAmJiAhKFwiY29kZVwiIGluIGRlZiB8fCBcInZhbGlkYXRlXCIgaW4gZGVmKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJyRkYXRhIGtleXdvcmQgbXVzdCBoYXZlIFwiY29kZVwiIG9yIFwidmFsaWRhdGVcIiBmdW5jdGlvbicpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGFkZFJ1bGUoa2V5d29yZCwgZGVmaW5pdGlvbiwgZGF0YVR5cGUpIHtcbiAgICB2YXIgX2E7XG4gICAgY29uc3QgcG9zdCA9IGRlZmluaXRpb24gPT09IG51bGwgfHwgZGVmaW5pdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogZGVmaW5pdGlvbi5wb3N0O1xuICAgIGlmIChkYXRhVHlwZSAmJiBwb3N0KVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2tleXdvcmQgd2l0aCBcInBvc3RcIiBmbGFnIGNhbm5vdCBoYXZlIFwidHlwZVwiJyk7XG4gICAgY29uc3QgeyBSVUxFUyB9ID0gdGhpcztcbiAgICBsZXQgcnVsZUdyb3VwID0gcG9zdCA/IFJVTEVTLnBvc3QgOiBSVUxFUy5ydWxlcy5maW5kKCh7IHR5cGU6IHQgfSkgPT4gdCA9PT0gZGF0YVR5cGUpO1xuICAgIGlmICghcnVsZUdyb3VwKSB7XG4gICAgICAgIHJ1bGVHcm91cCA9IHsgdHlwZTogZGF0YVR5cGUsIHJ1bGVzOiBbXSB9O1xuICAgICAgICBSVUxFUy5ydWxlcy5wdXNoKHJ1bGVHcm91cCk7XG4gICAgfVxuICAgIFJVTEVTLmtleXdvcmRzW2tleXdvcmRdID0gdHJ1ZTtcbiAgICBpZiAoIWRlZmluaXRpb24pXG4gICAgICAgIHJldHVybjtcbiAgICBjb25zdCBydWxlID0ge1xuICAgICAgICBrZXl3b3JkLFxuICAgICAgICBkZWZpbml0aW9uOiB7XG4gICAgICAgICAgICAuLi5kZWZpbml0aW9uLFxuICAgICAgICAgICAgdHlwZTogKDAsIGRhdGFUeXBlXzEuZ2V0SlNPTlR5cGVzKShkZWZpbml0aW9uLnR5cGUpLFxuICAgICAgICAgICAgc2NoZW1hVHlwZTogKDAsIGRhdGFUeXBlXzEuZ2V0SlNPTlR5cGVzKShkZWZpbml0aW9uLnNjaGVtYVR5cGUpLFxuICAgICAgICB9LFxuICAgIH07XG4gICAgaWYgKGRlZmluaXRpb24uYmVmb3JlKVxuICAgICAgICBhZGRCZWZvcmVSdWxlLmNhbGwodGhpcywgcnVsZUdyb3VwLCBydWxlLCBkZWZpbml0aW9uLmJlZm9yZSk7XG4gICAgZWxzZVxuICAgICAgICBydWxlR3JvdXAucnVsZXMucHVzaChydWxlKTtcbiAgICBSVUxFUy5hbGxba2V5d29yZF0gPSBydWxlO1xuICAgIChfYSA9IGRlZmluaXRpb24uaW1wbGVtZW50cykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmZvckVhY2goKGt3ZCkgPT4gdGhpcy5hZGRLZXl3b3JkKGt3ZCkpO1xufVxuZnVuY3Rpb24gYWRkQmVmb3JlUnVsZShydWxlR3JvdXAsIHJ1bGUsIGJlZm9yZSkge1xuICAgIGNvbnN0IGkgPSBydWxlR3JvdXAucnVsZXMuZmluZEluZGV4KChfcnVsZSkgPT4gX3J1bGUua2V5d29yZCA9PT0gYmVmb3JlKTtcbiAgICBpZiAoaSA+PSAwKSB7XG4gICAgICAgIHJ1bGVHcm91cC5ydWxlcy5zcGxpY2UoaSwgMCwgcnVsZSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBydWxlR3JvdXAucnVsZXMucHVzaChydWxlKTtcbiAgICAgICAgdGhpcy5sb2dnZXIud2FybihgcnVsZSAke2JlZm9yZX0gaXMgbm90IGRlZmluZWRgKTtcbiAgICB9XG59XG5mdW5jdGlvbiBrZXl3b3JkTWV0YXNjaGVtYShkZWYpIHtcbiAgICBsZXQgeyBtZXRhU2NoZW1hIH0gPSBkZWY7XG4gICAgaWYgKG1ldGFTY2hlbWEgPT09IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuO1xuICAgIGlmIChkZWYuJGRhdGEgJiYgdGhpcy5vcHRzLiRkYXRhKVxuICAgICAgICBtZXRhU2NoZW1hID0gc2NoZW1hT3JEYXRhKG1ldGFTY2hlbWEpO1xuICAgIGRlZi52YWxpZGF0ZVNjaGVtYSA9IHRoaXMuY29tcGlsZShtZXRhU2NoZW1hLCB0cnVlKTtcbn1cbmNvbnN0ICRkYXRhUmVmID0ge1xuICAgICRyZWY6IFwiaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2Fqdi12YWxpZGF0b3IvYWp2L21hc3Rlci9saWIvcmVmcy9kYXRhLmpzb24jXCIsXG59O1xuZnVuY3Rpb24gc2NoZW1hT3JEYXRhKHNjaGVtYSkge1xuICAgIHJldHVybiB7IGFueU9mOiBbc2NoZW1hLCAkZGF0YVJlZl0gfTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvcmUuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcImlkXCIsXG4gICAgY29kZSgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdOT1QgU1VQUE9SVEVEOiBrZXl3b3JkIFwiaWRcIiwgdXNlIFwiJGlkXCIgZm9yIHNjaGVtYSBJRCcpO1xuICAgIH0sXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aWQuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY2FsbFJlZiA9IGV4cG9ydHMuZ2V0VmFsaWRhdGUgPSB2b2lkIDA7XG5jb25zdCByZWZfZXJyb3JfMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL3JlZl9lcnJvclwiKTtcbmNvbnN0IGNvZGVfMSA9IHJlcXVpcmUoXCIuLi9jb2RlXCIpO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvY29kZWdlblwiKTtcbmNvbnN0IG5hbWVzXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS9uYW1lc1wiKTtcbmNvbnN0IGNvbXBpbGVfMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvdXRpbFwiKTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcIiRyZWZcIixcbiAgICBzY2hlbWFUeXBlOiBcInN0cmluZ1wiLFxuICAgIGNvZGUoY3h0KSB7XG4gICAgICAgIGNvbnN0IHsgZ2VuLCBzY2hlbWE6ICRyZWYsIGl0IH0gPSBjeHQ7XG4gICAgICAgIGNvbnN0IHsgYmFzZUlkLCBzY2hlbWFFbnY6IGVudiwgdmFsaWRhdGVOYW1lLCBvcHRzLCBzZWxmIH0gPSBpdDtcbiAgICAgICAgY29uc3QgeyByb290IH0gPSBlbnY7XG4gICAgICAgIGlmICgoJHJlZiA9PT0gXCIjXCIgfHwgJHJlZiA9PT0gXCIjL1wiKSAmJiBiYXNlSWQgPT09IHJvb3QuYmFzZUlkKVxuICAgICAgICAgICAgcmV0dXJuIGNhbGxSb290UmVmKCk7XG4gICAgICAgIGNvbnN0IHNjaE9yRW52ID0gY29tcGlsZV8xLnJlc29sdmVSZWYuY2FsbChzZWxmLCByb290LCBiYXNlSWQsICRyZWYpO1xuICAgICAgICBpZiAoc2NoT3JFbnYgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHRocm93IG5ldyByZWZfZXJyb3JfMS5kZWZhdWx0KGl0Lm9wdHMudXJpUmVzb2x2ZXIsIGJhc2VJZCwgJHJlZik7XG4gICAgICAgIGlmIChzY2hPckVudiBpbnN0YW5jZW9mIGNvbXBpbGVfMS5TY2hlbWFFbnYpXG4gICAgICAgICAgICByZXR1cm4gY2FsbFZhbGlkYXRlKHNjaE9yRW52KTtcbiAgICAgICAgcmV0dXJuIGlubGluZVJlZlNjaGVtYShzY2hPckVudik7XG4gICAgICAgIGZ1bmN0aW9uIGNhbGxSb290UmVmKCkge1xuICAgICAgICAgICAgaWYgKGVudiA9PT0gcm9vdClcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbFJlZihjeHQsIHZhbGlkYXRlTmFtZSwgZW52LCBlbnYuJGFzeW5jKTtcbiAgICAgICAgICAgIGNvbnN0IHJvb3ROYW1lID0gZ2VuLnNjb3BlVmFsdWUoXCJyb290XCIsIHsgcmVmOiByb290IH0pO1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxSZWYoY3h0LCAoMCwgY29kZWdlbl8xLl8pIGAke3Jvb3ROYW1lfS52YWxpZGF0ZWAsIHJvb3QsIHJvb3QuJGFzeW5jKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBjYWxsVmFsaWRhdGUoc2NoKSB7XG4gICAgICAgICAgICBjb25zdCB2ID0gZ2V0VmFsaWRhdGUoY3h0LCBzY2gpO1xuICAgICAgICAgICAgY2FsbFJlZihjeHQsIHYsIHNjaCwgc2NoLiRhc3luYyk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gaW5saW5lUmVmU2NoZW1hKHNjaCkge1xuICAgICAgICAgICAgY29uc3Qgc2NoTmFtZSA9IGdlbi5zY29wZVZhbHVlKFwic2NoZW1hXCIsIG9wdHMuY29kZS5zb3VyY2UgPT09IHRydWUgPyB7IHJlZjogc2NoLCBjb2RlOiAoMCwgY29kZWdlbl8xLnN0cmluZ2lmeSkoc2NoKSB9IDogeyByZWY6IHNjaCB9KTtcbiAgICAgICAgICAgIGNvbnN0IHZhbGlkID0gZ2VuLm5hbWUoXCJ2YWxpZFwiKTtcbiAgICAgICAgICAgIGNvbnN0IHNjaEN4dCA9IGN4dC5zdWJzY2hlbWEoe1xuICAgICAgICAgICAgICAgIHNjaGVtYTogc2NoLFxuICAgICAgICAgICAgICAgIGRhdGFUeXBlczogW10sXG4gICAgICAgICAgICAgICAgc2NoZW1hUGF0aDogY29kZWdlbl8xLm5pbCxcbiAgICAgICAgICAgICAgICB0b3BTY2hlbWFSZWY6IHNjaE5hbWUsXG4gICAgICAgICAgICAgICAgZXJyU2NoZW1hUGF0aDogJHJlZixcbiAgICAgICAgICAgIH0sIHZhbGlkKTtcbiAgICAgICAgICAgIGN4dC5tZXJnZUV2YWx1YXRlZChzY2hDeHQpO1xuICAgICAgICAgICAgY3h0Lm9rKHZhbGlkKTtcbiAgICAgICAgfVxuICAgIH0sXG59O1xuZnVuY3Rpb24gZ2V0VmFsaWRhdGUoY3h0LCBzY2gpIHtcbiAgICBjb25zdCB7IGdlbiB9ID0gY3h0O1xuICAgIHJldHVybiBzY2gudmFsaWRhdGVcbiAgICAgICAgPyBnZW4uc2NvcGVWYWx1ZShcInZhbGlkYXRlXCIsIHsgcmVmOiBzY2gudmFsaWRhdGUgfSlcbiAgICAgICAgOiAoMCwgY29kZWdlbl8xLl8pIGAke2dlbi5zY29wZVZhbHVlKFwid3JhcHBlclwiLCB7IHJlZjogc2NoIH0pfS52YWxpZGF0ZWA7XG59XG5leHBvcnRzLmdldFZhbGlkYXRlID0gZ2V0VmFsaWRhdGU7XG5mdW5jdGlvbiBjYWxsUmVmKGN4dCwgdiwgc2NoLCAkYXN5bmMpIHtcbiAgICBjb25zdCB7IGdlbiwgaXQgfSA9IGN4dDtcbiAgICBjb25zdCB7IGFsbEVycm9ycywgc2NoZW1hRW52OiBlbnYsIG9wdHMgfSA9IGl0O1xuICAgIGNvbnN0IHBhc3NDeHQgPSBvcHRzLnBhc3NDb250ZXh0ID8gbmFtZXNfMS5kZWZhdWx0LnRoaXMgOiBjb2RlZ2VuXzEubmlsO1xuICAgIGlmICgkYXN5bmMpXG4gICAgICAgIGNhbGxBc3luY1JlZigpO1xuICAgIGVsc2VcbiAgICAgICAgY2FsbFN5bmNSZWYoKTtcbiAgICBmdW5jdGlvbiBjYWxsQXN5bmNSZWYoKSB7XG4gICAgICAgIGlmICghZW52LiRhc3luYylcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImFzeW5jIHNjaGVtYSByZWZlcmVuY2VkIGJ5IHN5bmMgc2NoZW1hXCIpO1xuICAgICAgICBjb25zdCB2YWxpZCA9IGdlbi5sZXQoXCJ2YWxpZFwiKTtcbiAgICAgICAgZ2VuLnRyeSgoKSA9PiB7XG4gICAgICAgICAgICBnZW4uY29kZSgoMCwgY29kZWdlbl8xLl8pIGBhd2FpdCAkeygwLCBjb2RlXzEuY2FsbFZhbGlkYXRlQ29kZSkoY3h0LCB2LCBwYXNzQ3h0KX1gKTtcbiAgICAgICAgICAgIGFkZEV2YWx1YXRlZEZyb20odik7IC8vIFRPRE8gd2lsbCBub3Qgd29yayB3aXRoIGFzeW5jLCBpdCBoYXMgdG8gYmUgcmV0dXJuZWQgd2l0aCB0aGUgcmVzdWx0XG4gICAgICAgICAgICBpZiAoIWFsbEVycm9ycylcbiAgICAgICAgICAgICAgICBnZW4uYXNzaWduKHZhbGlkLCB0cnVlKTtcbiAgICAgICAgfSwgKGUpID0+IHtcbiAgICAgICAgICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGAhKCR7ZX0gaW5zdGFuY2VvZiAke2l0LlZhbGlkYXRpb25FcnJvcn0pYCwgKCkgPT4gZ2VuLnRocm93KGUpKTtcbiAgICAgICAgICAgIGFkZEVycm9yc0Zyb20oZSk7XG4gICAgICAgICAgICBpZiAoIWFsbEVycm9ycylcbiAgICAgICAgICAgICAgICBnZW4uYXNzaWduKHZhbGlkLCBmYWxzZSk7XG4gICAgICAgIH0pO1xuICAgICAgICBjeHQub2sodmFsaWQpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjYWxsU3luY1JlZigpIHtcbiAgICAgICAgY3h0LnJlc3VsdCgoMCwgY29kZV8xLmNhbGxWYWxpZGF0ZUNvZGUpKGN4dCwgdiwgcGFzc0N4dCksICgpID0+IGFkZEV2YWx1YXRlZEZyb20odiksICgpID0+IGFkZEVycm9yc0Zyb20odikpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBhZGRFcnJvcnNGcm9tKHNvdXJjZSkge1xuICAgICAgICBjb25zdCBlcnJzID0gKDAsIGNvZGVnZW5fMS5fKSBgJHtzb3VyY2V9LmVycm9yc2A7XG4gICAgICAgIGdlbi5hc3NpZ24obmFtZXNfMS5kZWZhdWx0LnZFcnJvcnMsICgwLCBjb2RlZ2VuXzEuXykgYCR7bmFtZXNfMS5kZWZhdWx0LnZFcnJvcnN9ID09PSBudWxsID8gJHtlcnJzfSA6ICR7bmFtZXNfMS5kZWZhdWx0LnZFcnJvcnN9LmNvbmNhdCgke2VycnN9KWApOyAvLyBUT0RPIHRhZ2dlZFxuICAgICAgICBnZW4uYXNzaWduKG5hbWVzXzEuZGVmYXVsdC5lcnJvcnMsICgwLCBjb2RlZ2VuXzEuXykgYCR7bmFtZXNfMS5kZWZhdWx0LnZFcnJvcnN9Lmxlbmd0aGApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBhZGRFdmFsdWF0ZWRGcm9tKHNvdXJjZSkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGlmICghaXQub3B0cy51bmV2YWx1YXRlZClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3Qgc2NoRXZhbHVhdGVkID0gKF9hID0gc2NoID09PSBudWxsIHx8IHNjaCA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2NoLnZhbGlkYXRlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZXZhbHVhdGVkO1xuICAgICAgICAvLyBUT0RPIHJlZmFjdG9yXG4gICAgICAgIGlmIChpdC5wcm9wcyAhPT0gdHJ1ZSkge1xuICAgICAgICAgICAgaWYgKHNjaEV2YWx1YXRlZCAmJiAhc2NoRXZhbHVhdGVkLmR5bmFtaWNQcm9wcykge1xuICAgICAgICAgICAgICAgIGlmIChzY2hFdmFsdWF0ZWQucHJvcHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBpdC5wcm9wcyA9IHV0aWxfMS5tZXJnZUV2YWx1YXRlZC5wcm9wcyhnZW4sIHNjaEV2YWx1YXRlZC5wcm9wcywgaXQucHJvcHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IHByb3BzID0gZ2VuLnZhcihcInByb3BzXCIsICgwLCBjb2RlZ2VuXzEuXykgYCR7c291cmNlfS5ldmFsdWF0ZWQucHJvcHNgKTtcbiAgICAgICAgICAgICAgICBpdC5wcm9wcyA9IHV0aWxfMS5tZXJnZUV2YWx1YXRlZC5wcm9wcyhnZW4sIHByb3BzLCBpdC5wcm9wcywgY29kZWdlbl8xLk5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChpdC5pdGVtcyAhPT0gdHJ1ZSkge1xuICAgICAgICAgICAgaWYgKHNjaEV2YWx1YXRlZCAmJiAhc2NoRXZhbHVhdGVkLmR5bmFtaWNJdGVtcykge1xuICAgICAgICAgICAgICAgIGlmIChzY2hFdmFsdWF0ZWQuaXRlbXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBpdC5pdGVtcyA9IHV0aWxfMS5tZXJnZUV2YWx1YXRlZC5pdGVtcyhnZW4sIHNjaEV2YWx1YXRlZC5pdGVtcywgaXQuaXRlbXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1zID0gZ2VuLnZhcihcIml0ZW1zXCIsICgwLCBjb2RlZ2VuXzEuXykgYCR7c291cmNlfS5ldmFsdWF0ZWQuaXRlbXNgKTtcbiAgICAgICAgICAgICAgICBpdC5pdGVtcyA9IHV0aWxfMS5tZXJnZUV2YWx1YXRlZC5pdGVtcyhnZW4sIGl0ZW1zLCBpdC5pdGVtcywgY29kZWdlbl8xLk5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0cy5jYWxsUmVmID0gY2FsbFJlZjtcbmV4cG9ydHMuZGVmYXVsdCA9IGRlZjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJlZi5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgaWRfMSA9IHJlcXVpcmUoXCIuL2lkXCIpO1xuY29uc3QgcmVmXzEgPSByZXF1aXJlKFwiLi9yZWZcIik7XG5jb25zdCBjb3JlID0gW1xuICAgIFwiJHNjaGVtYVwiLFxuICAgIFwiJGlkXCIsXG4gICAgXCIkZGVmc1wiLFxuICAgIFwiJHZvY2FidWxhcnlcIixcbiAgICB7IGtleXdvcmQ6IFwiJGNvbW1lbnRcIiB9LFxuICAgIFwiZGVmaW5pdGlvbnNcIixcbiAgICBpZF8xLmRlZmF1bHQsXG4gICAgcmVmXzEuZGVmYXVsdCxcbl07XG5leHBvcnRzLmRlZmF1bHQgPSBjb3JlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL2NvZGVnZW5cIik7XG5jb25zdCBvcHMgPSBjb2RlZ2VuXzEub3BlcmF0b3JzO1xuY29uc3QgS1dEcyA9IHtcbiAgICBtYXhpbXVtOiB7IG9rU3RyOiBcIjw9XCIsIG9rOiBvcHMuTFRFLCBmYWlsOiBvcHMuR1QgfSxcbiAgICBtaW5pbXVtOiB7IG9rU3RyOiBcIj49XCIsIG9rOiBvcHMuR1RFLCBmYWlsOiBvcHMuTFQgfSxcbiAgICBleGNsdXNpdmVNYXhpbXVtOiB7IG9rU3RyOiBcIjxcIiwgb2s6IG9wcy5MVCwgZmFpbDogb3BzLkdURSB9LFxuICAgIGV4Y2x1c2l2ZU1pbmltdW06IHsgb2tTdHI6IFwiPlwiLCBvazogb3BzLkdULCBmYWlsOiBvcHMuTFRFIH0sXG59O1xuY29uc3QgZXJyb3IgPSB7XG4gICAgbWVzc2FnZTogKHsga2V5d29yZCwgc2NoZW1hQ29kZSB9KSA9PiAoMCwgY29kZWdlbl8xLnN0cikgYG11c3QgYmUgJHtLV0RzW2tleXdvcmRdLm9rU3RyfSAke3NjaGVtYUNvZGV9YCxcbiAgICBwYXJhbXM6ICh7IGtleXdvcmQsIHNjaGVtYUNvZGUgfSkgPT4gKDAsIGNvZGVnZW5fMS5fKSBge2NvbXBhcmlzb246ICR7S1dEc1trZXl3b3JkXS5va1N0cn0sIGxpbWl0OiAke3NjaGVtYUNvZGV9fWAsXG59O1xuY29uc3QgZGVmID0ge1xuICAgIGtleXdvcmQ6IE9iamVjdC5rZXlzKEtXRHMpLFxuICAgIHR5cGU6IFwibnVtYmVyXCIsXG4gICAgc2NoZW1hVHlwZTogXCJudW1iZXJcIixcbiAgICAkZGF0YTogdHJ1ZSxcbiAgICBlcnJvcixcbiAgICBjb2RlKGN4dCkge1xuICAgICAgICBjb25zdCB7IGtleXdvcmQsIGRhdGEsIHNjaGVtYUNvZGUgfSA9IGN4dDtcbiAgICAgICAgY3h0LmZhaWwkZGF0YSgoMCwgY29kZWdlbl8xLl8pIGAke2RhdGF9ICR7S1dEc1trZXl3b3JkXS5mYWlsfSAke3NjaGVtYUNvZGV9IHx8IGlzTmFOKCR7ZGF0YX0pYCk7XG4gICAgfSxcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1saW1pdE51bWJlci5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvY29kZWdlblwiKTtcbmNvbnN0IGVycm9yID0ge1xuICAgIG1lc3NhZ2U6ICh7IHNjaGVtYUNvZGUgfSkgPT4gKDAsIGNvZGVnZW5fMS5zdHIpIGBtdXN0IGJlIG11bHRpcGxlIG9mICR7c2NoZW1hQ29kZX1gLFxuICAgIHBhcmFtczogKHsgc2NoZW1hQ29kZSB9KSA9PiAoMCwgY29kZWdlbl8xLl8pIGB7bXVsdGlwbGVPZjogJHtzY2hlbWFDb2RlfX1gLFxufTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcIm11bHRpcGxlT2ZcIixcbiAgICB0eXBlOiBcIm51bWJlclwiLFxuICAgIHNjaGVtYVR5cGU6IFwibnVtYmVyXCIsXG4gICAgJGRhdGE6IHRydWUsXG4gICAgZXJyb3IsXG4gICAgY29kZShjeHQpIHtcbiAgICAgICAgY29uc3QgeyBnZW4sIGRhdGEsIHNjaGVtYUNvZGUsIGl0IH0gPSBjeHQ7XG4gICAgICAgIC8vIGNvbnN0IGJkdCA9IGJhZCREYXRhVHlwZShzY2hlbWFDb2RlLCA8c3RyaW5nPmRlZi5zY2hlbWFUeXBlLCAkZGF0YSlcbiAgICAgICAgY29uc3QgcHJlYyA9IGl0Lm9wdHMubXVsdGlwbGVPZlByZWNpc2lvbjtcbiAgICAgICAgY29uc3QgcmVzID0gZ2VuLmxldChcInJlc1wiKTtcbiAgICAgICAgY29uc3QgaW52YWxpZCA9IHByZWNcbiAgICAgICAgICAgID8gKDAsIGNvZGVnZW5fMS5fKSBgTWF0aC5hYnMoTWF0aC5yb3VuZCgke3Jlc30pIC0gJHtyZXN9KSA+IDFlLSR7cHJlY31gXG4gICAgICAgICAgICA6ICgwLCBjb2RlZ2VuXzEuXykgYCR7cmVzfSAhPT0gcGFyc2VJbnQoJHtyZXN9KWA7XG4gICAgICAgIGN4dC5mYWlsJGRhdGEoKDAsIGNvZGVnZW5fMS5fKSBgKCR7c2NoZW1hQ29kZX0gPT09IDAgfHwgKCR7cmVzfSA9ICR7ZGF0YX0vJHtzY2hlbWFDb2RlfSwgJHtpbnZhbGlkfSkpYCk7XG4gICAgfSxcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1tdWx0aXBsZU9mLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4vLyBodHRwczovL21hdGhpYXNieW5lbnMuYmUvbm90ZXMvamF2YXNjcmlwdC1lbmNvZGluZ1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL2Jlc3RpZWpzL3B1bnljb2RlLmpzIC0gcHVueWNvZGUudWNzMi5kZWNvZGVcbmZ1bmN0aW9uIHVjczJsZW5ndGgoc3RyKSB7XG4gICAgY29uc3QgbGVuID0gc3RyLmxlbmd0aDtcbiAgICBsZXQgbGVuZ3RoID0gMDtcbiAgICBsZXQgcG9zID0gMDtcbiAgICBsZXQgdmFsdWU7XG4gICAgd2hpbGUgKHBvcyA8IGxlbikge1xuICAgICAgICBsZW5ndGgrKztcbiAgICAgICAgdmFsdWUgPSBzdHIuY2hhckNvZGVBdChwb3MrKyk7XG4gICAgICAgIGlmICh2YWx1ZSA+PSAweGQ4MDAgJiYgdmFsdWUgPD0gMHhkYmZmICYmIHBvcyA8IGxlbikge1xuICAgICAgICAgICAgLy8gaGlnaCBzdXJyb2dhdGUsIGFuZCB0aGVyZSBpcyBhIG5leHQgY2hhcmFjdGVyXG4gICAgICAgICAgICB2YWx1ZSA9IHN0ci5jaGFyQ29kZUF0KHBvcyk7XG4gICAgICAgICAgICBpZiAoKHZhbHVlICYgMHhmYzAwKSA9PT0gMHhkYzAwKVxuICAgICAgICAgICAgICAgIHBvcysrOyAvLyBsb3cgc3Vycm9nYXRlXG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGxlbmd0aDtcbn1cbmV4cG9ydHMuZGVmYXVsdCA9IHVjczJsZW5ndGg7XG51Y3MybGVuZ3RoLmNvZGUgPSAncmVxdWlyZShcImFqdi9kaXN0L3J1bnRpbWUvdWNzMmxlbmd0aFwiKS5kZWZhdWx0Jztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXVjczJsZW5ndGguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL2NvZGVnZW5cIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS91dGlsXCIpO1xuY29uc3QgdWNzMmxlbmd0aF8xID0gcmVxdWlyZShcIi4uLy4uL3J1bnRpbWUvdWNzMmxlbmd0aFwiKTtcbmNvbnN0IGVycm9yID0ge1xuICAgIG1lc3NhZ2UoeyBrZXl3b3JkLCBzY2hlbWFDb2RlIH0pIHtcbiAgICAgICAgY29uc3QgY29tcCA9IGtleXdvcmQgPT09IFwibWF4TGVuZ3RoXCIgPyBcIm1vcmVcIiA6IFwiZmV3ZXJcIjtcbiAgICAgICAgcmV0dXJuICgwLCBjb2RlZ2VuXzEuc3RyKSBgbXVzdCBOT1QgaGF2ZSAke2NvbXB9IHRoYW4gJHtzY2hlbWFDb2RlfSBjaGFyYWN0ZXJzYDtcbiAgICB9LFxuICAgIHBhcmFtczogKHsgc2NoZW1hQ29kZSB9KSA9PiAoMCwgY29kZWdlbl8xLl8pIGB7bGltaXQ6ICR7c2NoZW1hQ29kZX19YCxcbn07XG5jb25zdCBkZWYgPSB7XG4gICAga2V5d29yZDogW1wibWF4TGVuZ3RoXCIsIFwibWluTGVuZ3RoXCJdLFxuICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgc2NoZW1hVHlwZTogXCJudW1iZXJcIixcbiAgICAkZGF0YTogdHJ1ZSxcbiAgICBlcnJvcixcbiAgICBjb2RlKGN4dCkge1xuICAgICAgICBjb25zdCB7IGtleXdvcmQsIGRhdGEsIHNjaGVtYUNvZGUsIGl0IH0gPSBjeHQ7XG4gICAgICAgIGNvbnN0IG9wID0ga2V5d29yZCA9PT0gXCJtYXhMZW5ndGhcIiA/IGNvZGVnZW5fMS5vcGVyYXRvcnMuR1QgOiBjb2RlZ2VuXzEub3BlcmF0b3JzLkxUO1xuICAgICAgICBjb25zdCBsZW4gPSBpdC5vcHRzLnVuaWNvZGUgPT09IGZhbHNlID8gKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhfS5sZW5ndGhgIDogKDAsIGNvZGVnZW5fMS5fKSBgJHsoMCwgdXRpbF8xLnVzZUZ1bmMpKGN4dC5nZW4sIHVjczJsZW5ndGhfMS5kZWZhdWx0KX0oJHtkYXRhfSlgO1xuICAgICAgICBjeHQuZmFpbCRkYXRhKCgwLCBjb2RlZ2VuXzEuXykgYCR7bGVufSAke29wfSAke3NjaGVtYUNvZGV9YCk7XG4gICAgfSxcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1saW1pdExlbmd0aC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgY29kZV8xID0gcmVxdWlyZShcIi4uL2NvZGVcIik7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS9jb2RlZ2VuXCIpO1xuY29uc3QgZXJyb3IgPSB7XG4gICAgbWVzc2FnZTogKHsgc2NoZW1hQ29kZSB9KSA9PiAoMCwgY29kZWdlbl8xLnN0cikgYG11c3QgbWF0Y2ggcGF0dGVybiBcIiR7c2NoZW1hQ29kZX1cImAsXG4gICAgcGFyYW1zOiAoeyBzY2hlbWFDb2RlIH0pID0+ICgwLCBjb2RlZ2VuXzEuXykgYHtwYXR0ZXJuOiAke3NjaGVtYUNvZGV9fWAsXG59O1xuY29uc3QgZGVmID0ge1xuICAgIGtleXdvcmQ6IFwicGF0dGVyblwiLFxuICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgc2NoZW1hVHlwZTogXCJzdHJpbmdcIixcbiAgICAkZGF0YTogdHJ1ZSxcbiAgICBlcnJvcixcbiAgICBjb2RlKGN4dCkge1xuICAgICAgICBjb25zdCB7IGRhdGEsICRkYXRhLCBzY2hlbWEsIHNjaGVtYUNvZGUsIGl0IH0gPSBjeHQ7XG4gICAgICAgIC8vIFRPRE8gcmVnZXhwIHNob3VsZCBiZSB3cmFwcGVkIGluIHRyeS9jYXRjaHNcbiAgICAgICAgY29uc3QgdSA9IGl0Lm9wdHMudW5pY29kZVJlZ0V4cCA/IFwidVwiIDogXCJcIjtcbiAgICAgICAgY29uc3QgcmVnRXhwID0gJGRhdGEgPyAoMCwgY29kZWdlbl8xLl8pIGAobmV3IFJlZ0V4cCgke3NjaGVtYUNvZGV9LCAke3V9KSlgIDogKDAsIGNvZGVfMS51c2VQYXR0ZXJuKShjeHQsIHNjaGVtYSk7XG4gICAgICAgIGN4dC5mYWlsJGRhdGEoKDAsIGNvZGVnZW5fMS5fKSBgISR7cmVnRXhwfS50ZXN0KCR7ZGF0YX0pYCk7XG4gICAgfSxcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wYXR0ZXJuLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS9jb2RlZ2VuXCIpO1xuY29uc3QgZXJyb3IgPSB7XG4gICAgbWVzc2FnZSh7IGtleXdvcmQsIHNjaGVtYUNvZGUgfSkge1xuICAgICAgICBjb25zdCBjb21wID0ga2V5d29yZCA9PT0gXCJtYXhQcm9wZXJ0aWVzXCIgPyBcIm1vcmVcIiA6IFwiZmV3ZXJcIjtcbiAgICAgICAgcmV0dXJuICgwLCBjb2RlZ2VuXzEuc3RyKSBgbXVzdCBOT1QgaGF2ZSAke2NvbXB9IHRoYW4gJHtzY2hlbWFDb2RlfSBwcm9wZXJ0aWVzYDtcbiAgICB9LFxuICAgIHBhcmFtczogKHsgc2NoZW1hQ29kZSB9KSA9PiAoMCwgY29kZWdlbl8xLl8pIGB7bGltaXQ6ICR7c2NoZW1hQ29kZX19YCxcbn07XG5jb25zdCBkZWYgPSB7XG4gICAga2V5d29yZDogW1wibWF4UHJvcGVydGllc1wiLCBcIm1pblByb3BlcnRpZXNcIl0sXG4gICAgdHlwZTogXCJvYmplY3RcIixcbiAgICBzY2hlbWFUeXBlOiBcIm51bWJlclwiLFxuICAgICRkYXRhOiB0cnVlLFxuICAgIGVycm9yLFxuICAgIGNvZGUoY3h0KSB7XG4gICAgICAgIGNvbnN0IHsga2V5d29yZCwgZGF0YSwgc2NoZW1hQ29kZSB9ID0gY3h0O1xuICAgICAgICBjb25zdCBvcCA9IGtleXdvcmQgPT09IFwibWF4UHJvcGVydGllc1wiID8gY29kZWdlbl8xLm9wZXJhdG9ycy5HVCA6IGNvZGVnZW5fMS5vcGVyYXRvcnMuTFQ7XG4gICAgICAgIGN4dC5mYWlsJGRhdGEoKDAsIGNvZGVnZW5fMS5fKSBgT2JqZWN0LmtleXMoJHtkYXRhfSkubGVuZ3RoICR7b3B9ICR7c2NoZW1hQ29kZX1gKTtcbiAgICB9LFxufTtcbmV4cG9ydHMuZGVmYXVsdCA9IGRlZjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWxpbWl0UHJvcGVydGllcy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgY29kZV8xID0gcmVxdWlyZShcIi4uL2NvZGVcIik7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS9jb2RlZ2VuXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvdXRpbFwiKTtcbmNvbnN0IGVycm9yID0ge1xuICAgIG1lc3NhZ2U6ICh7IHBhcmFtczogeyBtaXNzaW5nUHJvcGVydHkgfSB9KSA9PiAoMCwgY29kZWdlbl8xLnN0cikgYG11c3QgaGF2ZSByZXF1aXJlZCBwcm9wZXJ0eSAnJHttaXNzaW5nUHJvcGVydHl9J2AsXG4gICAgcGFyYW1zOiAoeyBwYXJhbXM6IHsgbWlzc2luZ1Byb3BlcnR5IH0gfSkgPT4gKDAsIGNvZGVnZW5fMS5fKSBge21pc3NpbmdQcm9wZXJ0eTogJHttaXNzaW5nUHJvcGVydHl9fWAsXG59O1xuY29uc3QgZGVmID0ge1xuICAgIGtleXdvcmQ6IFwicmVxdWlyZWRcIixcbiAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgIHNjaGVtYVR5cGU6IFwiYXJyYXlcIixcbiAgICAkZGF0YTogdHJ1ZSxcbiAgICBlcnJvcixcbiAgICBjb2RlKGN4dCkge1xuICAgICAgICBjb25zdCB7IGdlbiwgc2NoZW1hLCBzY2hlbWFDb2RlLCBkYXRhLCAkZGF0YSwgaXQgfSA9IGN4dDtcbiAgICAgICAgY29uc3QgeyBvcHRzIH0gPSBpdDtcbiAgICAgICAgaWYgKCEkZGF0YSAmJiBzY2hlbWEubGVuZ3RoID09PSAwKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCB1c2VMb29wID0gc2NoZW1hLmxlbmd0aCA+PSBvcHRzLmxvb3BSZXF1aXJlZDtcbiAgICAgICAgaWYgKGl0LmFsbEVycm9ycylcbiAgICAgICAgICAgIGFsbEVycm9yc01vZGUoKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgZXhpdE9uRXJyb3JNb2RlKCk7XG4gICAgICAgIGlmIChvcHRzLnN0cmljdFJlcXVpcmVkKSB7XG4gICAgICAgICAgICBjb25zdCBwcm9wcyA9IGN4dC5wYXJlbnRTY2hlbWEucHJvcGVydGllcztcbiAgICAgICAgICAgIGNvbnN0IHsgZGVmaW5lZFByb3BlcnRpZXMgfSA9IGN4dC5pdDtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcmVxdWlyZWRLZXkgb2Ygc2NoZW1hKSB7XG4gICAgICAgICAgICAgICAgaWYgKChwcm9wcyA9PT0gbnVsbCB8fCBwcm9wcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogcHJvcHNbcmVxdWlyZWRLZXldKSA9PT0gdW5kZWZpbmVkICYmICFkZWZpbmVkUHJvcGVydGllcy5oYXMocmVxdWlyZWRLZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNjaGVtYVBhdGggPSBpdC5zY2hlbWFFbnYuYmFzZUlkICsgaXQuZXJyU2NoZW1hUGF0aDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbXNnID0gYHJlcXVpcmVkIHByb3BlcnR5IFwiJHtyZXF1aXJlZEtleX1cIiBpcyBub3QgZGVmaW5lZCBhdCBcIiR7c2NoZW1hUGF0aH1cIiAoc3RyaWN0UmVxdWlyZWQpYDtcbiAgICAgICAgICAgICAgICAgICAgKDAsIHV0aWxfMS5jaGVja1N0cmljdE1vZGUpKGl0LCBtc2csIGl0Lm9wdHMuc3RyaWN0UmVxdWlyZWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBhbGxFcnJvcnNNb2RlKCkge1xuICAgICAgICAgICAgaWYgKHVzZUxvb3AgfHwgJGRhdGEpIHtcbiAgICAgICAgICAgICAgICBjeHQuYmxvY2skZGF0YShjb2RlZ2VuXzEubmlsLCBsb29wQWxsUmVxdWlyZWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBwcm9wIG9mIHNjaGVtYSkge1xuICAgICAgICAgICAgICAgICAgICAoMCwgY29kZV8xLmNoZWNrUmVwb3J0TWlzc2luZ1Byb3ApKGN4dCwgcHJvcCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGV4aXRPbkVycm9yTW9kZSgpIHtcbiAgICAgICAgICAgIGNvbnN0IG1pc3NpbmcgPSBnZW4ubGV0KFwibWlzc2luZ1wiKTtcbiAgICAgICAgICAgIGlmICh1c2VMb29wIHx8ICRkYXRhKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsaWQgPSBnZW4ubGV0KFwidmFsaWRcIiwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgY3h0LmJsb2NrJGRhdGEodmFsaWQsICgpID0+IGxvb3BVbnRpbE1pc3NpbmcobWlzc2luZywgdmFsaWQpKTtcbiAgICAgICAgICAgICAgICBjeHQub2sodmFsaWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZ2VuLmlmKCgwLCBjb2RlXzEuY2hlY2tNaXNzaW5nUHJvcCkoY3h0LCBzY2hlbWEsIG1pc3NpbmcpKTtcbiAgICAgICAgICAgICAgICAoMCwgY29kZV8xLnJlcG9ydE1pc3NpbmdQcm9wKShjeHQsIG1pc3NpbmcpO1xuICAgICAgICAgICAgICAgIGdlbi5lbHNlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gbG9vcEFsbFJlcXVpcmVkKCkge1xuICAgICAgICAgICAgZ2VuLmZvck9mKFwicHJvcFwiLCBzY2hlbWFDb2RlLCAocHJvcCkgPT4ge1xuICAgICAgICAgICAgICAgIGN4dC5zZXRQYXJhbXMoeyBtaXNzaW5nUHJvcGVydHk6IHByb3AgfSk7XG4gICAgICAgICAgICAgICAgZ2VuLmlmKCgwLCBjb2RlXzEubm9Qcm9wZXJ0eUluRGF0YSkoZ2VuLCBkYXRhLCBwcm9wLCBvcHRzLm93blByb3BlcnRpZXMpLCAoKSA9PiBjeHQuZXJyb3IoKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBsb29wVW50aWxNaXNzaW5nKG1pc3NpbmcsIHZhbGlkKSB7XG4gICAgICAgICAgICBjeHQuc2V0UGFyYW1zKHsgbWlzc2luZ1Byb3BlcnR5OiBtaXNzaW5nIH0pO1xuICAgICAgICAgICAgZ2VuLmZvck9mKG1pc3NpbmcsIHNjaGVtYUNvZGUsICgpID0+IHtcbiAgICAgICAgICAgICAgICBnZW4uYXNzaWduKHZhbGlkLCAoMCwgY29kZV8xLnByb3BlcnR5SW5EYXRhKShnZW4sIGRhdGEsIG1pc3NpbmcsIG9wdHMub3duUHJvcGVydGllcykpO1xuICAgICAgICAgICAgICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLm5vdCkodmFsaWQpLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGN4dC5lcnJvcigpO1xuICAgICAgICAgICAgICAgICAgICBnZW4uYnJlYWsoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sIGNvZGVnZW5fMS5uaWwpO1xuICAgICAgICB9XG4gICAgfSxcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1yZXF1aXJlZC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvY29kZWdlblwiKTtcbmNvbnN0IGVycm9yID0ge1xuICAgIG1lc3NhZ2UoeyBrZXl3b3JkLCBzY2hlbWFDb2RlIH0pIHtcbiAgICAgICAgY29uc3QgY29tcCA9IGtleXdvcmQgPT09IFwibWF4SXRlbXNcIiA/IFwibW9yZVwiIDogXCJmZXdlclwiO1xuICAgICAgICByZXR1cm4gKDAsIGNvZGVnZW5fMS5zdHIpIGBtdXN0IE5PVCBoYXZlICR7Y29tcH0gdGhhbiAke3NjaGVtYUNvZGV9IGl0ZW1zYDtcbiAgICB9LFxuICAgIHBhcmFtczogKHsgc2NoZW1hQ29kZSB9KSA9PiAoMCwgY29kZWdlbl8xLl8pIGB7bGltaXQ6ICR7c2NoZW1hQ29kZX19YCxcbn07XG5jb25zdCBkZWYgPSB7XG4gICAga2V5d29yZDogW1wibWF4SXRlbXNcIiwgXCJtaW5JdGVtc1wiXSxcbiAgICB0eXBlOiBcImFycmF5XCIsXG4gICAgc2NoZW1hVHlwZTogXCJudW1iZXJcIixcbiAgICAkZGF0YTogdHJ1ZSxcbiAgICBlcnJvcixcbiAgICBjb2RlKGN4dCkge1xuICAgICAgICBjb25zdCB7IGtleXdvcmQsIGRhdGEsIHNjaGVtYUNvZGUgfSA9IGN4dDtcbiAgICAgICAgY29uc3Qgb3AgPSBrZXl3b3JkID09PSBcIm1heEl0ZW1zXCIgPyBjb2RlZ2VuXzEub3BlcmF0b3JzLkdUIDogY29kZWdlbl8xLm9wZXJhdG9ycy5MVDtcbiAgICAgICAgY3h0LmZhaWwkZGF0YSgoMCwgY29kZWdlbl8xLl8pIGAke2RhdGF9Lmxlbmd0aCAke29wfSAke3NjaGVtYUNvZGV9YCk7XG4gICAgfSxcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1saW1pdEl0ZW1zLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vYWp2LXZhbGlkYXRvci9hanYvaXNzdWVzLzg4OVxuY29uc3QgZXF1YWwgPSByZXF1aXJlKFwiZmFzdC1kZWVwLWVxdWFsXCIpO1xuZXF1YWwuY29kZSA9ICdyZXF1aXJlKFwiYWp2L2Rpc3QvcnVudGltZS9lcXVhbFwiKS5kZWZhdWx0JztcbmV4cG9ydHMuZGVmYXVsdCA9IGVxdWFsO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZXF1YWwuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGRhdGFUeXBlXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS92YWxpZGF0ZS9kYXRhVHlwZVwiKTtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL2NvZGVnZW5cIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS91dGlsXCIpO1xuY29uc3QgZXF1YWxfMSA9IHJlcXVpcmUoXCIuLi8uLi9ydW50aW1lL2VxdWFsXCIpO1xuY29uc3QgZXJyb3IgPSB7XG4gICAgbWVzc2FnZTogKHsgcGFyYW1zOiB7IGksIGogfSB9KSA9PiAoMCwgY29kZWdlbl8xLnN0cikgYG11c3QgTk9UIGhhdmUgZHVwbGljYXRlIGl0ZW1zIChpdGVtcyAjIyAke2p9IGFuZCAke2l9IGFyZSBpZGVudGljYWwpYCxcbiAgICBwYXJhbXM6ICh7IHBhcmFtczogeyBpLCBqIH0gfSkgPT4gKDAsIGNvZGVnZW5fMS5fKSBge2k6ICR7aX0sIGo6ICR7an19YCxcbn07XG5jb25zdCBkZWYgPSB7XG4gICAga2V5d29yZDogXCJ1bmlxdWVJdGVtc1wiLFxuICAgIHR5cGU6IFwiYXJyYXlcIixcbiAgICBzY2hlbWFUeXBlOiBcImJvb2xlYW5cIixcbiAgICAkZGF0YTogdHJ1ZSxcbiAgICBlcnJvcixcbiAgICBjb2RlKGN4dCkge1xuICAgICAgICBjb25zdCB7IGdlbiwgZGF0YSwgJGRhdGEsIHNjaGVtYSwgcGFyZW50U2NoZW1hLCBzY2hlbWFDb2RlLCBpdCB9ID0gY3h0O1xuICAgICAgICBpZiAoISRkYXRhICYmICFzY2hlbWEpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IHZhbGlkID0gZ2VuLmxldChcInZhbGlkXCIpO1xuICAgICAgICBjb25zdCBpdGVtVHlwZXMgPSBwYXJlbnRTY2hlbWEuaXRlbXMgPyAoMCwgZGF0YVR5cGVfMS5nZXRTY2hlbWFUeXBlcykocGFyZW50U2NoZW1hLml0ZW1zKSA6IFtdO1xuICAgICAgICBjeHQuYmxvY2skZGF0YSh2YWxpZCwgdmFsaWRhdGVVbmlxdWVJdGVtcywgKDAsIGNvZGVnZW5fMS5fKSBgJHtzY2hlbWFDb2RlfSA9PT0gZmFsc2VgKTtcbiAgICAgICAgY3h0Lm9rKHZhbGlkKTtcbiAgICAgICAgZnVuY3Rpb24gdmFsaWRhdGVVbmlxdWVJdGVtcygpIHtcbiAgICAgICAgICAgIGNvbnN0IGkgPSBnZW4ubGV0KFwiaVwiLCAoMCwgY29kZWdlbl8xLl8pIGAke2RhdGF9Lmxlbmd0aGApO1xuICAgICAgICAgICAgY29uc3QgaiA9IGdlbi5sZXQoXCJqXCIpO1xuICAgICAgICAgICAgY3h0LnNldFBhcmFtcyh7IGksIGogfSk7XG4gICAgICAgICAgICBnZW4uYXNzaWduKHZhbGlkLCB0cnVlKTtcbiAgICAgICAgICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGAke2l9ID4gMWAsICgpID0+IChjYW5PcHRpbWl6ZSgpID8gbG9vcE4gOiBsb29wTjIpKGksIGopKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBjYW5PcHRpbWl6ZSgpIHtcbiAgICAgICAgICAgIHJldHVybiBpdGVtVHlwZXMubGVuZ3RoID4gMCAmJiAhaXRlbVR5cGVzLnNvbWUoKHQpID0+IHQgPT09IFwib2JqZWN0XCIgfHwgdCA9PT0gXCJhcnJheVwiKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBsb29wTihpLCBqKSB7XG4gICAgICAgICAgICBjb25zdCBpdGVtID0gZ2VuLm5hbWUoXCJpdGVtXCIpO1xuICAgICAgICAgICAgY29uc3Qgd3JvbmdUeXBlID0gKDAsIGRhdGFUeXBlXzEuY2hlY2tEYXRhVHlwZXMpKGl0ZW1UeXBlcywgaXRlbSwgaXQub3B0cy5zdHJpY3ROdW1iZXJzLCBkYXRhVHlwZV8xLkRhdGFUeXBlLldyb25nKTtcbiAgICAgICAgICAgIGNvbnN0IGluZGljZXMgPSBnZW4uY29uc3QoXCJpbmRpY2VzXCIsICgwLCBjb2RlZ2VuXzEuXykgYHt9YCk7XG4gICAgICAgICAgICBnZW4uZm9yKCgwLCBjb2RlZ2VuXzEuXykgYDske2l9LS07YCwgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGdlbi5sZXQoaXRlbSwgKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhfVske2l9XWApO1xuICAgICAgICAgICAgICAgIGdlbi5pZih3cm9uZ1R5cGUsICgwLCBjb2RlZ2VuXzEuXykgYGNvbnRpbnVlYCk7XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW1UeXBlcy5sZW5ndGggPiAxKVxuICAgICAgICAgICAgICAgICAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5fKSBgdHlwZW9mICR7aXRlbX0gPT0gXCJzdHJpbmdcImAsICgwLCBjb2RlZ2VuXzEuXykgYCR7aXRlbX0gKz0gXCJfXCJgKTtcbiAgICAgICAgICAgICAgICBnZW5cbiAgICAgICAgICAgICAgICAgICAgLmlmKCgwLCBjb2RlZ2VuXzEuXykgYHR5cGVvZiAke2luZGljZXN9WyR7aXRlbX1dID09IFwibnVtYmVyXCJgLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGdlbi5hc3NpZ24oaiwgKDAsIGNvZGVnZW5fMS5fKSBgJHtpbmRpY2VzfVske2l0ZW19XWApO1xuICAgICAgICAgICAgICAgICAgICBjeHQuZXJyb3IoKTtcbiAgICAgICAgICAgICAgICAgICAgZ2VuLmFzc2lnbih2YWxpZCwgZmFsc2UpLmJyZWFrKCk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgLmNvZGUoKDAsIGNvZGVnZW5fMS5fKSBgJHtpbmRpY2VzfVske2l0ZW19XSA9ICR7aX1gKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGxvb3BOMihpLCBqKSB7XG4gICAgICAgICAgICBjb25zdCBlcWwgPSAoMCwgdXRpbF8xLnVzZUZ1bmMpKGdlbiwgZXF1YWxfMS5kZWZhdWx0KTtcbiAgICAgICAgICAgIGNvbnN0IG91dGVyID0gZ2VuLm5hbWUoXCJvdXRlclwiKTtcbiAgICAgICAgICAgIGdlbi5sYWJlbChvdXRlcikuZm9yKCgwLCBjb2RlZ2VuXzEuXykgYDske2l9LS07YCwgKCkgPT4gZ2VuLmZvcigoMCwgY29kZWdlbl8xLl8pIGAke2p9ID0gJHtpfTsgJHtqfS0tO2AsICgpID0+IGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGAke2VxbH0oJHtkYXRhfVske2l9XSwgJHtkYXRhfVske2p9XSlgLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY3h0LmVycm9yKCk7XG4gICAgICAgICAgICAgICAgZ2VuLmFzc2lnbih2YWxpZCwgZmFsc2UpLmJyZWFrKG91dGVyKTtcbiAgICAgICAgICAgIH0pKSk7XG4gICAgICAgIH1cbiAgICB9LFxufTtcbmV4cG9ydHMuZGVmYXVsdCA9IGRlZjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXVuaXF1ZUl0ZW1zLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS9jb2RlZ2VuXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvdXRpbFwiKTtcbmNvbnN0IGVxdWFsXzEgPSByZXF1aXJlKFwiLi4vLi4vcnVudGltZS9lcXVhbFwiKTtcbmNvbnN0IGVycm9yID0ge1xuICAgIG1lc3NhZ2U6IFwibXVzdCBiZSBlcXVhbCB0byBjb25zdGFudFwiLFxuICAgIHBhcmFtczogKHsgc2NoZW1hQ29kZSB9KSA9PiAoMCwgY29kZWdlbl8xLl8pIGB7YWxsb3dlZFZhbHVlOiAke3NjaGVtYUNvZGV9fWAsXG59O1xuY29uc3QgZGVmID0ge1xuICAgIGtleXdvcmQ6IFwiY29uc3RcIixcbiAgICAkZGF0YTogdHJ1ZSxcbiAgICBlcnJvcixcbiAgICBjb2RlKGN4dCkge1xuICAgICAgICBjb25zdCB7IGdlbiwgZGF0YSwgJGRhdGEsIHNjaGVtYUNvZGUsIHNjaGVtYSB9ID0gY3h0O1xuICAgICAgICBpZiAoJGRhdGEgfHwgKHNjaGVtYSAmJiB0eXBlb2Ygc2NoZW1hID09IFwib2JqZWN0XCIpKSB7XG4gICAgICAgICAgICBjeHQuZmFpbCRkYXRhKCgwLCBjb2RlZ2VuXzEuXykgYCEkeygwLCB1dGlsXzEudXNlRnVuYykoZ2VuLCBlcXVhbF8xLmRlZmF1bHQpfSgke2RhdGF9LCAke3NjaGVtYUNvZGV9KWApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY3h0LmZhaWwoKDAsIGNvZGVnZW5fMS5fKSBgJHtzY2hlbWF9ICE9PSAke2RhdGF9YCk7XG4gICAgICAgIH1cbiAgICB9LFxufTtcbmV4cG9ydHMuZGVmYXVsdCA9IGRlZjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbnN0LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS9jb2RlZ2VuXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvdXRpbFwiKTtcbmNvbnN0IGVxdWFsXzEgPSByZXF1aXJlKFwiLi4vLi4vcnVudGltZS9lcXVhbFwiKTtcbmNvbnN0IGVycm9yID0ge1xuICAgIG1lc3NhZ2U6IFwibXVzdCBiZSBlcXVhbCB0byBvbmUgb2YgdGhlIGFsbG93ZWQgdmFsdWVzXCIsXG4gICAgcGFyYW1zOiAoeyBzY2hlbWFDb2RlIH0pID0+ICgwLCBjb2RlZ2VuXzEuXykgYHthbGxvd2VkVmFsdWVzOiAke3NjaGVtYUNvZGV9fWAsXG59O1xuY29uc3QgZGVmID0ge1xuICAgIGtleXdvcmQ6IFwiZW51bVwiLFxuICAgIHNjaGVtYVR5cGU6IFwiYXJyYXlcIixcbiAgICAkZGF0YTogdHJ1ZSxcbiAgICBlcnJvcixcbiAgICBjb2RlKGN4dCkge1xuICAgICAgICBjb25zdCB7IGdlbiwgZGF0YSwgJGRhdGEsIHNjaGVtYSwgc2NoZW1hQ29kZSwgaXQgfSA9IGN4dDtcbiAgICAgICAgaWYgKCEkZGF0YSAmJiBzY2hlbWEubGVuZ3RoID09PSAwKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZW51bSBtdXN0IGhhdmUgbm9uLWVtcHR5IGFycmF5XCIpO1xuICAgICAgICBjb25zdCB1c2VMb29wID0gc2NoZW1hLmxlbmd0aCA+PSBpdC5vcHRzLmxvb3BFbnVtO1xuICAgICAgICBsZXQgZXFsO1xuICAgICAgICBjb25zdCBnZXRFcWwgPSAoKSA9PiAoZXFsICE9PSBudWxsICYmIGVxbCAhPT0gdm9pZCAwID8gZXFsIDogKGVxbCA9ICgwLCB1dGlsXzEudXNlRnVuYykoZ2VuLCBlcXVhbF8xLmRlZmF1bHQpKSk7XG4gICAgICAgIGxldCB2YWxpZDtcbiAgICAgICAgaWYgKHVzZUxvb3AgfHwgJGRhdGEpIHtcbiAgICAgICAgICAgIHZhbGlkID0gZ2VuLmxldChcInZhbGlkXCIpO1xuICAgICAgICAgICAgY3h0LmJsb2NrJGRhdGEodmFsaWQsIGxvb3BFbnVtKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHNjaGVtYSkpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYWp2IGltcGxlbWVudGF0aW9uIGVycm9yXCIpO1xuICAgICAgICAgICAgY29uc3QgdlNjaGVtYSA9IGdlbi5jb25zdChcInZTY2hlbWFcIiwgc2NoZW1hQ29kZSk7XG4gICAgICAgICAgICB2YWxpZCA9ICgwLCBjb2RlZ2VuXzEub3IpKC4uLnNjaGVtYS5tYXAoKF94LCBpKSA9PiBlcXVhbENvZGUodlNjaGVtYSwgaSkpKTtcbiAgICAgICAgfVxuICAgICAgICBjeHQucGFzcyh2YWxpZCk7XG4gICAgICAgIGZ1bmN0aW9uIGxvb3BFbnVtKCkge1xuICAgICAgICAgICAgZ2VuLmFzc2lnbih2YWxpZCwgZmFsc2UpO1xuICAgICAgICAgICAgZ2VuLmZvck9mKFwidlwiLCBzY2hlbWFDb2RlLCAodikgPT4gZ2VuLmlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7Z2V0RXFsKCl9KCR7ZGF0YX0sICR7dn0pYCwgKCkgPT4gZ2VuLmFzc2lnbih2YWxpZCwgdHJ1ZSkuYnJlYWsoKSkpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGVxdWFsQ29kZSh2U2NoZW1hLCBpKSB7XG4gICAgICAgICAgICBjb25zdCBzY2ggPSBzY2hlbWFbaV07XG4gICAgICAgICAgICByZXR1cm4gdHlwZW9mIHNjaCA9PT0gXCJvYmplY3RcIiAmJiBzY2ggIT09IG51bGxcbiAgICAgICAgICAgICAgICA/ICgwLCBjb2RlZ2VuXzEuXykgYCR7Z2V0RXFsKCl9KCR7ZGF0YX0sICR7dlNjaGVtYX1bJHtpfV0pYFxuICAgICAgICAgICAgICAgIDogKDAsIGNvZGVnZW5fMS5fKSBgJHtkYXRhfSA9PT0gJHtzY2h9YDtcbiAgICAgICAgfVxuICAgIH0sXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZW51bS5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgbGltaXROdW1iZXJfMSA9IHJlcXVpcmUoXCIuL2xpbWl0TnVtYmVyXCIpO1xuY29uc3QgbXVsdGlwbGVPZl8xID0gcmVxdWlyZShcIi4vbXVsdGlwbGVPZlwiKTtcbmNvbnN0IGxpbWl0TGVuZ3RoXzEgPSByZXF1aXJlKFwiLi9saW1pdExlbmd0aFwiKTtcbmNvbnN0IHBhdHRlcm5fMSA9IHJlcXVpcmUoXCIuL3BhdHRlcm5cIik7XG5jb25zdCBsaW1pdFByb3BlcnRpZXNfMSA9IHJlcXVpcmUoXCIuL2xpbWl0UHJvcGVydGllc1wiKTtcbmNvbnN0IHJlcXVpcmVkXzEgPSByZXF1aXJlKFwiLi9yZXF1aXJlZFwiKTtcbmNvbnN0IGxpbWl0SXRlbXNfMSA9IHJlcXVpcmUoXCIuL2xpbWl0SXRlbXNcIik7XG5jb25zdCB1bmlxdWVJdGVtc18xID0gcmVxdWlyZShcIi4vdW5pcXVlSXRlbXNcIik7XG5jb25zdCBjb25zdF8xID0gcmVxdWlyZShcIi4vY29uc3RcIik7XG5jb25zdCBlbnVtXzEgPSByZXF1aXJlKFwiLi9lbnVtXCIpO1xuY29uc3QgdmFsaWRhdGlvbiA9IFtcbiAgICAvLyBudW1iZXJcbiAgICBsaW1pdE51bWJlcl8xLmRlZmF1bHQsXG4gICAgbXVsdGlwbGVPZl8xLmRlZmF1bHQsXG4gICAgLy8gc3RyaW5nXG4gICAgbGltaXRMZW5ndGhfMS5kZWZhdWx0LFxuICAgIHBhdHRlcm5fMS5kZWZhdWx0LFxuICAgIC8vIG9iamVjdFxuICAgIGxpbWl0UHJvcGVydGllc18xLmRlZmF1bHQsXG4gICAgcmVxdWlyZWRfMS5kZWZhdWx0LFxuICAgIC8vIGFycmF5XG4gICAgbGltaXRJdGVtc18xLmRlZmF1bHQsXG4gICAgdW5pcXVlSXRlbXNfMS5kZWZhdWx0LFxuICAgIC8vIGFueVxuICAgIHsga2V5d29yZDogXCJ0eXBlXCIsIHNjaGVtYVR5cGU6IFtcInN0cmluZ1wiLCBcImFycmF5XCJdIH0sXG4gICAgeyBrZXl3b3JkOiBcIm51bGxhYmxlXCIsIHNjaGVtYVR5cGU6IFwiYm9vbGVhblwiIH0sXG4gICAgY29uc3RfMS5kZWZhdWx0LFxuICAgIGVudW1fMS5kZWZhdWx0LFxuXTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZhbGlkYXRpb247XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy52YWxpZGF0ZUFkZGl0aW9uYWxJdGVtcyA9IHZvaWQgMDtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL2NvZGVnZW5cIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS91dGlsXCIpO1xuY29uc3QgZXJyb3IgPSB7XG4gICAgbWVzc2FnZTogKHsgcGFyYW1zOiB7IGxlbiB9IH0pID0+ICgwLCBjb2RlZ2VuXzEuc3RyKSBgbXVzdCBOT1QgaGF2ZSBtb3JlIHRoYW4gJHtsZW59IGl0ZW1zYCxcbiAgICBwYXJhbXM6ICh7IHBhcmFtczogeyBsZW4gfSB9KSA9PiAoMCwgY29kZWdlbl8xLl8pIGB7bGltaXQ6ICR7bGVufX1gLFxufTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcImFkZGl0aW9uYWxJdGVtc1wiLFxuICAgIHR5cGU6IFwiYXJyYXlcIixcbiAgICBzY2hlbWFUeXBlOiBbXCJib29sZWFuXCIsIFwib2JqZWN0XCJdLFxuICAgIGJlZm9yZTogXCJ1bmlxdWVJdGVtc1wiLFxuICAgIGVycm9yLFxuICAgIGNvZGUoY3h0KSB7XG4gICAgICAgIGNvbnN0IHsgcGFyZW50U2NoZW1hLCBpdCB9ID0gY3h0O1xuICAgICAgICBjb25zdCB7IGl0ZW1zIH0gPSBwYXJlbnRTY2hlbWE7XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShpdGVtcykpIHtcbiAgICAgICAgICAgICgwLCB1dGlsXzEuY2hlY2tTdHJpY3RNb2RlKShpdCwgJ1wiYWRkaXRpb25hbEl0ZW1zXCIgaXMgaWdub3JlZCB3aGVuIFwiaXRlbXNcIiBpcyBub3QgYW4gYXJyYXkgb2Ygc2NoZW1hcycpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHZhbGlkYXRlQWRkaXRpb25hbEl0ZW1zKGN4dCwgaXRlbXMpO1xuICAgIH0sXG59O1xuZnVuY3Rpb24gdmFsaWRhdGVBZGRpdGlvbmFsSXRlbXMoY3h0LCBpdGVtcykge1xuICAgIGNvbnN0IHsgZ2VuLCBzY2hlbWEsIGRhdGEsIGtleXdvcmQsIGl0IH0gPSBjeHQ7XG4gICAgaXQuaXRlbXMgPSB0cnVlO1xuICAgIGNvbnN0IGxlbiA9IGdlbi5jb25zdChcImxlblwiLCAoMCwgY29kZWdlbl8xLl8pIGAke2RhdGF9Lmxlbmd0aGApO1xuICAgIGlmIChzY2hlbWEgPT09IGZhbHNlKSB7XG4gICAgICAgIGN4dC5zZXRQYXJhbXMoeyBsZW46IGl0ZW1zLmxlbmd0aCB9KTtcbiAgICAgICAgY3h0LnBhc3MoKDAsIGNvZGVnZW5fMS5fKSBgJHtsZW59IDw9ICR7aXRlbXMubGVuZ3RofWApO1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlb2Ygc2NoZW1hID09IFwib2JqZWN0XCIgJiYgISgwLCB1dGlsXzEuYWx3YXlzVmFsaWRTY2hlbWEpKGl0LCBzY2hlbWEpKSB7XG4gICAgICAgIGNvbnN0IHZhbGlkID0gZ2VuLnZhcihcInZhbGlkXCIsICgwLCBjb2RlZ2VuXzEuXykgYCR7bGVufSA8PSAke2l0ZW1zLmxlbmd0aH1gKTsgLy8gVE9ETyB2YXJcbiAgICAgICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEubm90KSh2YWxpZCksICgpID0+IHZhbGlkYXRlSXRlbXModmFsaWQpKTtcbiAgICAgICAgY3h0Lm9rKHZhbGlkKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gdmFsaWRhdGVJdGVtcyh2YWxpZCkge1xuICAgICAgICBnZW4uZm9yUmFuZ2UoXCJpXCIsIGl0ZW1zLmxlbmd0aCwgbGVuLCAoaSkgPT4ge1xuICAgICAgICAgICAgY3h0LnN1YnNjaGVtYSh7IGtleXdvcmQsIGRhdGFQcm9wOiBpLCBkYXRhUHJvcFR5cGU6IHV0aWxfMS5UeXBlLk51bSB9LCB2YWxpZCk7XG4gICAgICAgICAgICBpZiAoIWl0LmFsbEVycm9ycylcbiAgICAgICAgICAgICAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5ub3QpKHZhbGlkKSwgKCkgPT4gZ2VuLmJyZWFrKCkpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5leHBvcnRzLnZhbGlkYXRlQWRkaXRpb25hbEl0ZW1zID0gdmFsaWRhdGVBZGRpdGlvbmFsSXRlbXM7XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1hZGRpdGlvbmFsSXRlbXMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudmFsaWRhdGVUdXBsZSA9IHZvaWQgMDtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL2NvZGVnZW5cIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS91dGlsXCIpO1xuY29uc3QgY29kZV8xID0gcmVxdWlyZShcIi4uL2NvZGVcIik7XG5jb25zdCBkZWYgPSB7XG4gICAga2V5d29yZDogXCJpdGVtc1wiLFxuICAgIHR5cGU6IFwiYXJyYXlcIixcbiAgICBzY2hlbWFUeXBlOiBbXCJvYmplY3RcIiwgXCJhcnJheVwiLCBcImJvb2xlYW5cIl0sXG4gICAgYmVmb3JlOiBcInVuaXF1ZUl0ZW1zXCIsXG4gICAgY29kZShjeHQpIHtcbiAgICAgICAgY29uc3QgeyBzY2hlbWEsIGl0IH0gPSBjeHQ7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHNjaGVtYSkpXG4gICAgICAgICAgICByZXR1cm4gdmFsaWRhdGVUdXBsZShjeHQsIFwiYWRkaXRpb25hbEl0ZW1zXCIsIHNjaGVtYSk7XG4gICAgICAgIGl0Lml0ZW1zID0gdHJ1ZTtcbiAgICAgICAgaWYgKCgwLCB1dGlsXzEuYWx3YXlzVmFsaWRTY2hlbWEpKGl0LCBzY2hlbWEpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjeHQub2soKDAsIGNvZGVfMS52YWxpZGF0ZUFycmF5KShjeHQpKTtcbiAgICB9LFxufTtcbmZ1bmN0aW9uIHZhbGlkYXRlVHVwbGUoY3h0LCBleHRyYUl0ZW1zLCBzY2hBcnIgPSBjeHQuc2NoZW1hKSB7XG4gICAgY29uc3QgeyBnZW4sIHBhcmVudFNjaGVtYSwgZGF0YSwga2V5d29yZCwgaXQgfSA9IGN4dDtcbiAgICBjaGVja1N0cmljdFR1cGxlKHBhcmVudFNjaGVtYSk7XG4gICAgaWYgKGl0Lm9wdHMudW5ldmFsdWF0ZWQgJiYgc2NoQXJyLmxlbmd0aCAmJiBpdC5pdGVtcyAhPT0gdHJ1ZSkge1xuICAgICAgICBpdC5pdGVtcyA9IHV0aWxfMS5tZXJnZUV2YWx1YXRlZC5pdGVtcyhnZW4sIHNjaEFyci5sZW5ndGgsIGl0Lml0ZW1zKTtcbiAgICB9XG4gICAgY29uc3QgdmFsaWQgPSBnZW4ubmFtZShcInZhbGlkXCIpO1xuICAgIGNvbnN0IGxlbiA9IGdlbi5jb25zdChcImxlblwiLCAoMCwgY29kZWdlbl8xLl8pIGAke2RhdGF9Lmxlbmd0aGApO1xuICAgIHNjaEFyci5mb3JFYWNoKChzY2gsIGkpID0+IHtcbiAgICAgICAgaWYgKCgwLCB1dGlsXzEuYWx3YXlzVmFsaWRTY2hlbWEpKGl0LCBzY2gpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5fKSBgJHtsZW59ID4gJHtpfWAsICgpID0+IGN4dC5zdWJzY2hlbWEoe1xuICAgICAgICAgICAga2V5d29yZCxcbiAgICAgICAgICAgIHNjaGVtYVByb3A6IGksXG4gICAgICAgICAgICBkYXRhUHJvcDogaSxcbiAgICAgICAgfSwgdmFsaWQpKTtcbiAgICAgICAgY3h0Lm9rKHZhbGlkKTtcbiAgICB9KTtcbiAgICBmdW5jdGlvbiBjaGVja1N0cmljdFR1cGxlKHNjaCkge1xuICAgICAgICBjb25zdCB7IG9wdHMsIGVyclNjaGVtYVBhdGggfSA9IGl0O1xuICAgICAgICBjb25zdCBsID0gc2NoQXJyLmxlbmd0aDtcbiAgICAgICAgY29uc3QgZnVsbFR1cGxlID0gbCA9PT0gc2NoLm1pbkl0ZW1zICYmIChsID09PSBzY2gubWF4SXRlbXMgfHwgc2NoW2V4dHJhSXRlbXNdID09PSBmYWxzZSk7XG4gICAgICAgIGlmIChvcHRzLnN0cmljdFR1cGxlcyAmJiAhZnVsbFR1cGxlKSB7XG4gICAgICAgICAgICBjb25zdCBtc2cgPSBgXCIke2tleXdvcmR9XCIgaXMgJHtsfS10dXBsZSwgYnV0IG1pbkl0ZW1zIG9yIG1heEl0ZW1zLyR7ZXh0cmFJdGVtc30gYXJlIG5vdCBzcGVjaWZpZWQgb3IgZGlmZmVyZW50IGF0IHBhdGggXCIke2VyclNjaGVtYVBhdGh9XCJgO1xuICAgICAgICAgICAgKDAsIHV0aWxfMS5jaGVja1N0cmljdE1vZGUpKGl0LCBtc2csIG9wdHMuc3RyaWN0VHVwbGVzKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydHMudmFsaWRhdGVUdXBsZSA9IHZhbGlkYXRlVHVwbGU7XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pdGVtcy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgaXRlbXNfMSA9IHJlcXVpcmUoXCIuL2l0ZW1zXCIpO1xuY29uc3QgZGVmID0ge1xuICAgIGtleXdvcmQ6IFwicHJlZml4SXRlbXNcIixcbiAgICB0eXBlOiBcImFycmF5XCIsXG4gICAgc2NoZW1hVHlwZTogW1wiYXJyYXlcIl0sXG4gICAgYmVmb3JlOiBcInVuaXF1ZUl0ZW1zXCIsXG4gICAgY29kZTogKGN4dCkgPT4gKDAsIGl0ZW1zXzEudmFsaWRhdGVUdXBsZSkoY3h0LCBcIml0ZW1zXCIpLFxufTtcbmV4cG9ydHMuZGVmYXVsdCA9IGRlZjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXByZWZpeEl0ZW1zLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS9jb2RlZ2VuXCIpO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvdXRpbFwiKTtcbmNvbnN0IGNvZGVfMSA9IHJlcXVpcmUoXCIuLi9jb2RlXCIpO1xuY29uc3QgYWRkaXRpb25hbEl0ZW1zXzEgPSByZXF1aXJlKFwiLi9hZGRpdGlvbmFsSXRlbXNcIik7XG5jb25zdCBlcnJvciA9IHtcbiAgICBtZXNzYWdlOiAoeyBwYXJhbXM6IHsgbGVuIH0gfSkgPT4gKDAsIGNvZGVnZW5fMS5zdHIpIGBtdXN0IE5PVCBoYXZlIG1vcmUgdGhhbiAke2xlbn0gaXRlbXNgLFxuICAgIHBhcmFtczogKHsgcGFyYW1zOiB7IGxlbiB9IH0pID0+ICgwLCBjb2RlZ2VuXzEuXykgYHtsaW1pdDogJHtsZW59fWAsXG59O1xuY29uc3QgZGVmID0ge1xuICAgIGtleXdvcmQ6IFwiaXRlbXNcIixcbiAgICB0eXBlOiBcImFycmF5XCIsXG4gICAgc2NoZW1hVHlwZTogW1wib2JqZWN0XCIsIFwiYm9vbGVhblwiXSxcbiAgICBiZWZvcmU6IFwidW5pcXVlSXRlbXNcIixcbiAgICBlcnJvcixcbiAgICBjb2RlKGN4dCkge1xuICAgICAgICBjb25zdCB7IHNjaGVtYSwgcGFyZW50U2NoZW1hLCBpdCB9ID0gY3h0O1xuICAgICAgICBjb25zdCB7IHByZWZpeEl0ZW1zIH0gPSBwYXJlbnRTY2hlbWE7XG4gICAgICAgIGl0Lml0ZW1zID0gdHJ1ZTtcbiAgICAgICAgaWYgKCgwLCB1dGlsXzEuYWx3YXlzVmFsaWRTY2hlbWEpKGl0LCBzY2hlbWEpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAocHJlZml4SXRlbXMpXG4gICAgICAgICAgICAoMCwgYWRkaXRpb25hbEl0ZW1zXzEudmFsaWRhdGVBZGRpdGlvbmFsSXRlbXMpKGN4dCwgcHJlZml4SXRlbXMpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICBjeHQub2soKDAsIGNvZGVfMS52YWxpZGF0ZUFycmF5KShjeHQpKTtcbiAgICB9LFxufTtcbmV4cG9ydHMuZGVmYXVsdCA9IGRlZjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWl0ZW1zMjAyMC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvY29kZWdlblwiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL3V0aWxcIik7XG5jb25zdCBlcnJvciA9IHtcbiAgICBtZXNzYWdlOiAoeyBwYXJhbXM6IHsgbWluLCBtYXggfSB9KSA9PiBtYXggPT09IHVuZGVmaW5lZFxuICAgICAgICA/ICgwLCBjb2RlZ2VuXzEuc3RyKSBgbXVzdCBjb250YWluIGF0IGxlYXN0ICR7bWlufSB2YWxpZCBpdGVtKHMpYFxuICAgICAgICA6ICgwLCBjb2RlZ2VuXzEuc3RyKSBgbXVzdCBjb250YWluIGF0IGxlYXN0ICR7bWlufSBhbmQgbm8gbW9yZSB0aGFuICR7bWF4fSB2YWxpZCBpdGVtKHMpYCxcbiAgICBwYXJhbXM6ICh7IHBhcmFtczogeyBtaW4sIG1heCB9IH0pID0+IG1heCA9PT0gdW5kZWZpbmVkID8gKDAsIGNvZGVnZW5fMS5fKSBge21pbkNvbnRhaW5zOiAke21pbn19YCA6ICgwLCBjb2RlZ2VuXzEuXykgYHttaW5Db250YWluczogJHttaW59LCBtYXhDb250YWluczogJHttYXh9fWAsXG59O1xuY29uc3QgZGVmID0ge1xuICAgIGtleXdvcmQ6IFwiY29udGFpbnNcIixcbiAgICB0eXBlOiBcImFycmF5XCIsXG4gICAgc2NoZW1hVHlwZTogW1wib2JqZWN0XCIsIFwiYm9vbGVhblwiXSxcbiAgICBiZWZvcmU6IFwidW5pcXVlSXRlbXNcIixcbiAgICB0cmFja0Vycm9yczogdHJ1ZSxcbiAgICBlcnJvcixcbiAgICBjb2RlKGN4dCkge1xuICAgICAgICBjb25zdCB7IGdlbiwgc2NoZW1hLCBwYXJlbnRTY2hlbWEsIGRhdGEsIGl0IH0gPSBjeHQ7XG4gICAgICAgIGxldCBtaW47XG4gICAgICAgIGxldCBtYXg7XG4gICAgICAgIGNvbnN0IHsgbWluQ29udGFpbnMsIG1heENvbnRhaW5zIH0gPSBwYXJlbnRTY2hlbWE7XG4gICAgICAgIGlmIChpdC5vcHRzLm5leHQpIHtcbiAgICAgICAgICAgIG1pbiA9IG1pbkNvbnRhaW5zID09PSB1bmRlZmluZWQgPyAxIDogbWluQ29udGFpbnM7XG4gICAgICAgICAgICBtYXggPSBtYXhDb250YWlucztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIG1pbiA9IDE7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbGVuID0gZ2VuLmNvbnN0KFwibGVuXCIsICgwLCBjb2RlZ2VuXzEuXykgYCR7ZGF0YX0ubGVuZ3RoYCk7XG4gICAgICAgIGN4dC5zZXRQYXJhbXMoeyBtaW4sIG1heCB9KTtcbiAgICAgICAgaWYgKG1heCA9PT0gdW5kZWZpbmVkICYmIG1pbiA9PT0gMCkge1xuICAgICAgICAgICAgKDAsIHV0aWxfMS5jaGVja1N0cmljdE1vZGUpKGl0LCBgXCJtaW5Db250YWluc1wiID09IDAgd2l0aG91dCBcIm1heENvbnRhaW5zXCI6IFwiY29udGFpbnNcIiBrZXl3b3JkIGlnbm9yZWRgKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWF4ICE9PSB1bmRlZmluZWQgJiYgbWluID4gbWF4KSB7XG4gICAgICAgICAgICAoMCwgdXRpbF8xLmNoZWNrU3RyaWN0TW9kZSkoaXQsIGBcIm1pbkNvbnRhaW5zXCIgPiBcIm1heENvbnRhaW5zXCIgaXMgYWx3YXlzIGludmFsaWRgKTtcbiAgICAgICAgICAgIGN4dC5mYWlsKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCgwLCB1dGlsXzEuYWx3YXlzVmFsaWRTY2hlbWEpKGl0LCBzY2hlbWEpKSB7XG4gICAgICAgICAgICBsZXQgY29uZCA9ICgwLCBjb2RlZ2VuXzEuXykgYCR7bGVufSA+PSAke21pbn1gO1xuICAgICAgICAgICAgaWYgKG1heCAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIGNvbmQgPSAoMCwgY29kZWdlbl8xLl8pIGAke2NvbmR9ICYmICR7bGVufSA8PSAke21heH1gO1xuICAgICAgICAgICAgY3h0LnBhc3MoY29uZCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaXQuaXRlbXMgPSB0cnVlO1xuICAgICAgICBjb25zdCB2YWxpZCA9IGdlbi5uYW1lKFwidmFsaWRcIik7XG4gICAgICAgIGlmIChtYXggPT09IHVuZGVmaW5lZCAmJiBtaW4gPT09IDEpIHtcbiAgICAgICAgICAgIHZhbGlkYXRlSXRlbXModmFsaWQsICgpID0+IGdlbi5pZih2YWxpZCwgKCkgPT4gZ2VuLmJyZWFrKCkpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChtaW4gPT09IDApIHtcbiAgICAgICAgICAgIGdlbi5sZXQodmFsaWQsIHRydWUpO1xuICAgICAgICAgICAgaWYgKG1heCAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGAke2RhdGF9Lmxlbmd0aCA+IDBgLCB2YWxpZGF0ZUl0ZW1zV2l0aENvdW50KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGdlbi5sZXQodmFsaWQsIGZhbHNlKTtcbiAgICAgICAgICAgIHZhbGlkYXRlSXRlbXNXaXRoQ291bnQoKTtcbiAgICAgICAgfVxuICAgICAgICBjeHQucmVzdWx0KHZhbGlkLCAoKSA9PiBjeHQucmVzZXQoKSk7XG4gICAgICAgIGZ1bmN0aW9uIHZhbGlkYXRlSXRlbXNXaXRoQ291bnQoKSB7XG4gICAgICAgICAgICBjb25zdCBzY2hWYWxpZCA9IGdlbi5uYW1lKFwiX3ZhbGlkXCIpO1xuICAgICAgICAgICAgY29uc3QgY291bnQgPSBnZW4ubGV0KFwiY291bnRcIiwgMCk7XG4gICAgICAgICAgICB2YWxpZGF0ZUl0ZW1zKHNjaFZhbGlkLCAoKSA9PiBnZW4uaWYoc2NoVmFsaWQsICgpID0+IGNoZWNrTGltaXRzKGNvdW50KSkpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHZhbGlkYXRlSXRlbXMoX3ZhbGlkLCBibG9jaykge1xuICAgICAgICAgICAgZ2VuLmZvclJhbmdlKFwiaVwiLCAwLCBsZW4sIChpKSA9PiB7XG4gICAgICAgICAgICAgICAgY3h0LnN1YnNjaGVtYSh7XG4gICAgICAgICAgICAgICAgICAgIGtleXdvcmQ6IFwiY29udGFpbnNcIixcbiAgICAgICAgICAgICAgICAgICAgZGF0YVByb3A6IGksXG4gICAgICAgICAgICAgICAgICAgIGRhdGFQcm9wVHlwZTogdXRpbF8xLlR5cGUuTnVtLFxuICAgICAgICAgICAgICAgICAgICBjb21wb3NpdGVSdWxlOiB0cnVlLFxuICAgICAgICAgICAgICAgIH0sIF92YWxpZCk7XG4gICAgICAgICAgICAgICAgYmxvY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGNoZWNrTGltaXRzKGNvdW50KSB7XG4gICAgICAgICAgICBnZW4uY29kZSgoMCwgY29kZWdlbl8xLl8pIGAke2NvdW50fSsrYCk7XG4gICAgICAgICAgICBpZiAobWF4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5fKSBgJHtjb3VudH0gPj0gJHttaW59YCwgKCkgPT4gZ2VuLmFzc2lnbih2YWxpZCwgdHJ1ZSkuYnJlYWsoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5fKSBgJHtjb3VudH0gPiAke21heH1gLCAoKSA9PiBnZW4uYXNzaWduKHZhbGlkLCBmYWxzZSkuYnJlYWsoKSk7XG4gICAgICAgICAgICAgICAgaWYgKG1pbiA9PT0gMSlcbiAgICAgICAgICAgICAgICAgICAgZ2VuLmFzc2lnbih2YWxpZCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5fKSBgJHtjb3VudH0gPj0gJHttaW59YCwgKCkgPT4gZ2VuLmFzc2lnbih2YWxpZCwgdHJ1ZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb250YWlucy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy52YWxpZGF0ZVNjaGVtYURlcHMgPSBleHBvcnRzLnZhbGlkYXRlUHJvcGVydHlEZXBzID0gZXhwb3J0cy5lcnJvciA9IHZvaWQgMDtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL2NvZGVnZW5cIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS91dGlsXCIpO1xuY29uc3QgY29kZV8xID0gcmVxdWlyZShcIi4uL2NvZGVcIik7XG5leHBvcnRzLmVycm9yID0ge1xuICAgIG1lc3NhZ2U6ICh7IHBhcmFtczogeyBwcm9wZXJ0eSwgZGVwc0NvdW50LCBkZXBzIH0gfSkgPT4ge1xuICAgICAgICBjb25zdCBwcm9wZXJ0eV9pZXMgPSBkZXBzQ291bnQgPT09IDEgPyBcInByb3BlcnR5XCIgOiBcInByb3BlcnRpZXNcIjtcbiAgICAgICAgcmV0dXJuICgwLCBjb2RlZ2VuXzEuc3RyKSBgbXVzdCBoYXZlICR7cHJvcGVydHlfaWVzfSAke2RlcHN9IHdoZW4gcHJvcGVydHkgJHtwcm9wZXJ0eX0gaXMgcHJlc2VudGA7XG4gICAgfSxcbiAgICBwYXJhbXM6ICh7IHBhcmFtczogeyBwcm9wZXJ0eSwgZGVwc0NvdW50LCBkZXBzLCBtaXNzaW5nUHJvcGVydHkgfSB9KSA9PiAoMCwgY29kZWdlbl8xLl8pIGB7cHJvcGVydHk6ICR7cHJvcGVydHl9LFxuICAgIG1pc3NpbmdQcm9wZXJ0eTogJHttaXNzaW5nUHJvcGVydHl9LFxuICAgIGRlcHNDb3VudDogJHtkZXBzQ291bnR9LFxuICAgIGRlcHM6ICR7ZGVwc319YCwgLy8gVE9ETyBjaGFuZ2UgdG8gcmVmZXJlbmNlXG59O1xuY29uc3QgZGVmID0ge1xuICAgIGtleXdvcmQ6IFwiZGVwZW5kZW5jaWVzXCIsXG4gICAgdHlwZTogXCJvYmplY3RcIixcbiAgICBzY2hlbWFUeXBlOiBcIm9iamVjdFwiLFxuICAgIGVycm9yOiBleHBvcnRzLmVycm9yLFxuICAgIGNvZGUoY3h0KSB7XG4gICAgICAgIGNvbnN0IFtwcm9wRGVwcywgc2NoRGVwc10gPSBzcGxpdERlcGVuZGVuY2llcyhjeHQpO1xuICAgICAgICB2YWxpZGF0ZVByb3BlcnR5RGVwcyhjeHQsIHByb3BEZXBzKTtcbiAgICAgICAgdmFsaWRhdGVTY2hlbWFEZXBzKGN4dCwgc2NoRGVwcyk7XG4gICAgfSxcbn07XG5mdW5jdGlvbiBzcGxpdERlcGVuZGVuY2llcyh7IHNjaGVtYSB9KSB7XG4gICAgY29uc3QgcHJvcGVydHlEZXBzID0ge307XG4gICAgY29uc3Qgc2NoZW1hRGVwcyA9IHt9O1xuICAgIGZvciAoY29uc3Qga2V5IGluIHNjaGVtYSkge1xuICAgICAgICBpZiAoa2V5ID09PSBcIl9fcHJvdG9fX1wiKVxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNvbnN0IGRlcHMgPSBBcnJheS5pc0FycmF5KHNjaGVtYVtrZXldKSA/IHByb3BlcnR5RGVwcyA6IHNjaGVtYURlcHM7XG4gICAgICAgIGRlcHNba2V5XSA9IHNjaGVtYVtrZXldO1xuICAgIH1cbiAgICByZXR1cm4gW3Byb3BlcnR5RGVwcywgc2NoZW1hRGVwc107XG59XG5mdW5jdGlvbiB2YWxpZGF0ZVByb3BlcnR5RGVwcyhjeHQsIHByb3BlcnR5RGVwcyA9IGN4dC5zY2hlbWEpIHtcbiAgICBjb25zdCB7IGdlbiwgZGF0YSwgaXQgfSA9IGN4dDtcbiAgICBpZiAoT2JqZWN0LmtleXMocHJvcGVydHlEZXBzKS5sZW5ndGggPT09IDApXG4gICAgICAgIHJldHVybjtcbiAgICBjb25zdCBtaXNzaW5nID0gZ2VuLmxldChcIm1pc3NpbmdcIik7XG4gICAgZm9yIChjb25zdCBwcm9wIGluIHByb3BlcnR5RGVwcykge1xuICAgICAgICBjb25zdCBkZXBzID0gcHJvcGVydHlEZXBzW3Byb3BdO1xuICAgICAgICBpZiAoZGVwcy5sZW5ndGggPT09IDApXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY29uc3QgaGFzUHJvcGVydHkgPSAoMCwgY29kZV8xLnByb3BlcnR5SW5EYXRhKShnZW4sIGRhdGEsIHByb3AsIGl0Lm9wdHMub3duUHJvcGVydGllcyk7XG4gICAgICAgIGN4dC5zZXRQYXJhbXMoe1xuICAgICAgICAgICAgcHJvcGVydHk6IHByb3AsXG4gICAgICAgICAgICBkZXBzQ291bnQ6IGRlcHMubGVuZ3RoLFxuICAgICAgICAgICAgZGVwczogZGVwcy5qb2luKFwiLCBcIiksXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoaXQuYWxsRXJyb3JzKSB7XG4gICAgICAgICAgICBnZW4uaWYoaGFzUHJvcGVydHksICgpID0+IHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGRlcFByb3Agb2YgZGVwcykge1xuICAgICAgICAgICAgICAgICAgICAoMCwgY29kZV8xLmNoZWNrUmVwb3J0TWlzc2luZ1Byb3ApKGN4dCwgZGVwUHJvcCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5fKSBgJHtoYXNQcm9wZXJ0eX0gJiYgKCR7KDAsIGNvZGVfMS5jaGVja01pc3NpbmdQcm9wKShjeHQsIGRlcHMsIG1pc3NpbmcpfSlgKTtcbiAgICAgICAgICAgICgwLCBjb2RlXzEucmVwb3J0TWlzc2luZ1Byb3ApKGN4dCwgbWlzc2luZyk7XG4gICAgICAgICAgICBnZW4uZWxzZSgpO1xuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0cy52YWxpZGF0ZVByb3BlcnR5RGVwcyA9IHZhbGlkYXRlUHJvcGVydHlEZXBzO1xuZnVuY3Rpb24gdmFsaWRhdGVTY2hlbWFEZXBzKGN4dCwgc2NoZW1hRGVwcyA9IGN4dC5zY2hlbWEpIHtcbiAgICBjb25zdCB7IGdlbiwgZGF0YSwga2V5d29yZCwgaXQgfSA9IGN4dDtcbiAgICBjb25zdCB2YWxpZCA9IGdlbi5uYW1lKFwidmFsaWRcIik7XG4gICAgZm9yIChjb25zdCBwcm9wIGluIHNjaGVtYURlcHMpIHtcbiAgICAgICAgaWYgKCgwLCB1dGlsXzEuYWx3YXlzVmFsaWRTY2hlbWEpKGl0LCBzY2hlbWFEZXBzW3Byb3BdKSlcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBnZW4uaWYoKDAsIGNvZGVfMS5wcm9wZXJ0eUluRGF0YSkoZ2VuLCBkYXRhLCBwcm9wLCBpdC5vcHRzLm93blByb3BlcnRpZXMpLCAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzY2hDeHQgPSBjeHQuc3Vic2NoZW1hKHsga2V5d29yZCwgc2NoZW1hUHJvcDogcHJvcCB9LCB2YWxpZCk7XG4gICAgICAgICAgICBjeHQubWVyZ2VWYWxpZEV2YWx1YXRlZChzY2hDeHQsIHZhbGlkKTtcbiAgICAgICAgfSwgKCkgPT4gZ2VuLnZhcih2YWxpZCwgdHJ1ZSkgLy8gVE9ETyB2YXJcbiAgICAgICAgKTtcbiAgICAgICAgY3h0Lm9rKHZhbGlkKTtcbiAgICB9XG59XG5leHBvcnRzLnZhbGlkYXRlU2NoZW1hRGVwcyA9IHZhbGlkYXRlU2NoZW1hRGVwcztcbmV4cG9ydHMuZGVmYXVsdCA9IGRlZjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRlcGVuZGVuY2llcy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvY29kZWdlblwiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL3V0aWxcIik7XG5jb25zdCBlcnJvciA9IHtcbiAgICBtZXNzYWdlOiBcInByb3BlcnR5IG5hbWUgbXVzdCBiZSB2YWxpZFwiLFxuICAgIHBhcmFtczogKHsgcGFyYW1zIH0pID0+ICgwLCBjb2RlZ2VuXzEuXykgYHtwcm9wZXJ0eU5hbWU6ICR7cGFyYW1zLnByb3BlcnR5TmFtZX19YCxcbn07XG5jb25zdCBkZWYgPSB7XG4gICAga2V5d29yZDogXCJwcm9wZXJ0eU5hbWVzXCIsXG4gICAgdHlwZTogXCJvYmplY3RcIixcbiAgICBzY2hlbWFUeXBlOiBbXCJvYmplY3RcIiwgXCJib29sZWFuXCJdLFxuICAgIGVycm9yLFxuICAgIGNvZGUoY3h0KSB7XG4gICAgICAgIGNvbnN0IHsgZ2VuLCBzY2hlbWEsIGRhdGEsIGl0IH0gPSBjeHQ7XG4gICAgICAgIGlmICgoMCwgdXRpbF8xLmFsd2F5c1ZhbGlkU2NoZW1hKShpdCwgc2NoZW1hKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3QgdmFsaWQgPSBnZW4ubmFtZShcInZhbGlkXCIpO1xuICAgICAgICBnZW4uZm9ySW4oXCJrZXlcIiwgZGF0YSwgKGtleSkgPT4ge1xuICAgICAgICAgICAgY3h0LnNldFBhcmFtcyh7IHByb3BlcnR5TmFtZToga2V5IH0pO1xuICAgICAgICAgICAgY3h0LnN1YnNjaGVtYSh7XG4gICAgICAgICAgICAgICAga2V5d29yZDogXCJwcm9wZXJ0eU5hbWVzXCIsXG4gICAgICAgICAgICAgICAgZGF0YToga2V5LFxuICAgICAgICAgICAgICAgIGRhdGFUeXBlczogW1wic3RyaW5nXCJdLFxuICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZToga2V5LFxuICAgICAgICAgICAgICAgIGNvbXBvc2l0ZVJ1bGU6IHRydWUsXG4gICAgICAgICAgICB9LCB2YWxpZCk7XG4gICAgICAgICAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5ub3QpKHZhbGlkKSwgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGN4dC5lcnJvcih0cnVlKTtcbiAgICAgICAgICAgICAgICBpZiAoIWl0LmFsbEVycm9ycylcbiAgICAgICAgICAgICAgICAgICAgZ2VuLmJyZWFrKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGN4dC5vayh2YWxpZCk7XG4gICAgfSxcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wcm9wZXJ0eU5hbWVzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBjb2RlXzEgPSByZXF1aXJlKFwiLi4vY29kZVwiKTtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL2NvZGVnZW5cIik7XG5jb25zdCBuYW1lc18xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvbmFtZXNcIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS91dGlsXCIpO1xuY29uc3QgZXJyb3IgPSB7XG4gICAgbWVzc2FnZTogXCJtdXN0IE5PVCBoYXZlIGFkZGl0aW9uYWwgcHJvcGVydGllc1wiLFxuICAgIHBhcmFtczogKHsgcGFyYW1zIH0pID0+ICgwLCBjb2RlZ2VuXzEuXykgYHthZGRpdGlvbmFsUHJvcGVydHk6ICR7cGFyYW1zLmFkZGl0aW9uYWxQcm9wZXJ0eX19YCxcbn07XG5jb25zdCBkZWYgPSB7XG4gICAga2V5d29yZDogXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiLFxuICAgIHR5cGU6IFtcIm9iamVjdFwiXSxcbiAgICBzY2hlbWFUeXBlOiBbXCJib29sZWFuXCIsIFwib2JqZWN0XCJdLFxuICAgIGFsbG93VW5kZWZpbmVkOiB0cnVlLFxuICAgIHRyYWNrRXJyb3JzOiB0cnVlLFxuICAgIGVycm9yLFxuICAgIGNvZGUoY3h0KSB7XG4gICAgICAgIGNvbnN0IHsgZ2VuLCBzY2hlbWEsIHBhcmVudFNjaGVtYSwgZGF0YSwgZXJyc0NvdW50LCBpdCB9ID0gY3h0O1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgaWYgKCFlcnJzQ291bnQpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJhanYgaW1wbGVtZW50YXRpb24gZXJyb3JcIik7XG4gICAgICAgIGNvbnN0IHsgYWxsRXJyb3JzLCBvcHRzIH0gPSBpdDtcbiAgICAgICAgaXQucHJvcHMgPSB0cnVlO1xuICAgICAgICBpZiAob3B0cy5yZW1vdmVBZGRpdGlvbmFsICE9PSBcImFsbFwiICYmICgwLCB1dGlsXzEuYWx3YXlzVmFsaWRTY2hlbWEpKGl0LCBzY2hlbWEpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCBwcm9wcyA9ICgwLCBjb2RlXzEuYWxsU2NoZW1hUHJvcGVydGllcykocGFyZW50U2NoZW1hLnByb3BlcnRpZXMpO1xuICAgICAgICBjb25zdCBwYXRQcm9wcyA9ICgwLCBjb2RlXzEuYWxsU2NoZW1hUHJvcGVydGllcykocGFyZW50U2NoZW1hLnBhdHRlcm5Qcm9wZXJ0aWVzKTtcbiAgICAgICAgY2hlY2tBZGRpdGlvbmFsUHJvcGVydGllcygpO1xuICAgICAgICBjeHQub2soKDAsIGNvZGVnZW5fMS5fKSBgJHtlcnJzQ291bnR9ID09PSAke25hbWVzXzEuZGVmYXVsdC5lcnJvcnN9YCk7XG4gICAgICAgIGZ1bmN0aW9uIGNoZWNrQWRkaXRpb25hbFByb3BlcnRpZXMoKSB7XG4gICAgICAgICAgICBnZW4uZm9ySW4oXCJrZXlcIiwgZGF0YSwgKGtleSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghcHJvcHMubGVuZ3RoICYmICFwYXRQcm9wcy5sZW5ndGgpXG4gICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0eUNvZGUoa2V5KTtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIGdlbi5pZihpc0FkZGl0aW9uYWwoa2V5KSwgKCkgPT4gYWRkaXRpb25hbFByb3BlcnR5Q29kZShrZXkpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGlzQWRkaXRpb25hbChrZXkpIHtcbiAgICAgICAgICAgIGxldCBkZWZpbmVkUHJvcDtcbiAgICAgICAgICAgIGlmIChwcm9wcy5sZW5ndGggPiA4KSB7XG4gICAgICAgICAgICAgICAgLy8gVE9ETyBtYXliZSBhbiBvcHRpb24gaW5zdGVhZCBvZiBoYXJkLWNvZGVkIDg/XG4gICAgICAgICAgICAgICAgY29uc3QgcHJvcHNTY2hlbWEgPSAoMCwgdXRpbF8xLnNjaGVtYVJlZk9yVmFsKShpdCwgcGFyZW50U2NoZW1hLnByb3BlcnRpZXMsIFwicHJvcGVydGllc1wiKTtcbiAgICAgICAgICAgICAgICBkZWZpbmVkUHJvcCA9ICgwLCBjb2RlXzEuaXNPd25Qcm9wZXJ0eSkoZ2VuLCBwcm9wc1NjaGVtYSwga2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHByb3BzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGRlZmluZWRQcm9wID0gKDAsIGNvZGVnZW5fMS5vcikoLi4ucHJvcHMubWFwKChwKSA9PiAoMCwgY29kZWdlbl8xLl8pIGAke2tleX0gPT09ICR7cH1gKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBkZWZpbmVkUHJvcCA9IGNvZGVnZW5fMS5uaWw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocGF0UHJvcHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgZGVmaW5lZFByb3AgPSAoMCwgY29kZWdlbl8xLm9yKShkZWZpbmVkUHJvcCwgLi4ucGF0UHJvcHMubWFwKChwKSA9PiAoMCwgY29kZWdlbl8xLl8pIGAkeygwLCBjb2RlXzEudXNlUGF0dGVybikoY3h0LCBwKX0udGVzdCgke2tleX0pYCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuICgwLCBjb2RlZ2VuXzEubm90KShkZWZpbmVkUHJvcCk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gZGVsZXRlQWRkaXRpb25hbChrZXkpIHtcbiAgICAgICAgICAgIGdlbi5jb2RlKCgwLCBjb2RlZ2VuXzEuXykgYGRlbGV0ZSAke2RhdGF9WyR7a2V5fV1gKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBhZGRpdGlvbmFsUHJvcGVydHlDb2RlKGtleSkge1xuICAgICAgICAgICAgaWYgKG9wdHMucmVtb3ZlQWRkaXRpb25hbCA9PT0gXCJhbGxcIiB8fCAob3B0cy5yZW1vdmVBZGRpdGlvbmFsICYmIHNjaGVtYSA9PT0gZmFsc2UpKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlQWRkaXRpb25hbChrZXkpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzY2hlbWEgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgY3h0LnNldFBhcmFtcyh7IGFkZGl0aW9uYWxQcm9wZXJ0eToga2V5IH0pO1xuICAgICAgICAgICAgICAgIGN4dC5lcnJvcigpO1xuICAgICAgICAgICAgICAgIGlmICghYWxsRXJyb3JzKVxuICAgICAgICAgICAgICAgICAgICBnZW4uYnJlYWsoKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHlwZW9mIHNjaGVtYSA9PSBcIm9iamVjdFwiICYmICEoMCwgdXRpbF8xLmFsd2F5c1ZhbGlkU2NoZW1hKShpdCwgc2NoZW1hKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbGlkID0gZ2VuLm5hbWUoXCJ2YWxpZFwiKTtcbiAgICAgICAgICAgICAgICBpZiAob3B0cy5yZW1vdmVBZGRpdGlvbmFsID09PSBcImZhaWxpbmdcIikge1xuICAgICAgICAgICAgICAgICAgICBhcHBseUFkZGl0aW9uYWxTY2hlbWEoa2V5LCB2YWxpZCwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICBnZW4uaWYoKDAsIGNvZGVnZW5fMS5ub3QpKHZhbGlkKSwgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3h0LnJlc2V0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGVBZGRpdGlvbmFsKGtleSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYXBwbHlBZGRpdGlvbmFsU2NoZW1hKGtleSwgdmFsaWQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWFsbEVycm9ycylcbiAgICAgICAgICAgICAgICAgICAgICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLm5vdCkodmFsaWQpLCAoKSA9PiBnZW4uYnJlYWsoKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGFwcGx5QWRkaXRpb25hbFNjaGVtYShrZXksIHZhbGlkLCBlcnJvcnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHN1YnNjaGVtYSA9IHtcbiAgICAgICAgICAgICAgICBrZXl3b3JkOiBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCIsXG4gICAgICAgICAgICAgICAgZGF0YVByb3A6IGtleSxcbiAgICAgICAgICAgICAgICBkYXRhUHJvcFR5cGU6IHV0aWxfMS5UeXBlLlN0cixcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAoZXJyb3JzID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oc3Vic2NoZW1hLCB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvc2l0ZVJ1bGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGNyZWF0ZUVycm9yczogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIGFsbEVycm9yczogZmFsc2UsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjeHQuc3Vic2NoZW1hKHN1YnNjaGVtYSwgdmFsaWQpO1xuICAgICAgICB9XG4gICAgfSxcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1hZGRpdGlvbmFsUHJvcGVydGllcy5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgdmFsaWRhdGVfMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL3ZhbGlkYXRlXCIpO1xuY29uc3QgY29kZV8xID0gcmVxdWlyZShcIi4uL2NvZGVcIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS91dGlsXCIpO1xuY29uc3QgYWRkaXRpb25hbFByb3BlcnRpZXNfMSA9IHJlcXVpcmUoXCIuL2FkZGl0aW9uYWxQcm9wZXJ0aWVzXCIpO1xuY29uc3QgZGVmID0ge1xuICAgIGtleXdvcmQ6IFwicHJvcGVydGllc1wiLFxuICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgc2NoZW1hVHlwZTogXCJvYmplY3RcIixcbiAgICBjb2RlKGN4dCkge1xuICAgICAgICBjb25zdCB7IGdlbiwgc2NoZW1hLCBwYXJlbnRTY2hlbWEsIGRhdGEsIGl0IH0gPSBjeHQ7XG4gICAgICAgIGlmIChpdC5vcHRzLnJlbW92ZUFkZGl0aW9uYWwgPT09IFwiYWxsXCIgJiYgcGFyZW50U2NoZW1hLmFkZGl0aW9uYWxQcm9wZXJ0aWVzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzXzEuZGVmYXVsdC5jb2RlKG5ldyB2YWxpZGF0ZV8xLktleXdvcmRDeHQoaXQsIGFkZGl0aW9uYWxQcm9wZXJ0aWVzXzEuZGVmYXVsdCwgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiKSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYWxsUHJvcHMgPSAoMCwgY29kZV8xLmFsbFNjaGVtYVByb3BlcnRpZXMpKHNjaGVtYSk7XG4gICAgICAgIGZvciAoY29uc3QgcHJvcCBvZiBhbGxQcm9wcykge1xuICAgICAgICAgICAgaXQuZGVmaW5lZFByb3BlcnRpZXMuYWRkKHByb3ApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpdC5vcHRzLnVuZXZhbHVhdGVkICYmIGFsbFByb3BzLmxlbmd0aCAmJiBpdC5wcm9wcyAhPT0gdHJ1ZSkge1xuICAgICAgICAgICAgaXQucHJvcHMgPSB1dGlsXzEubWVyZ2VFdmFsdWF0ZWQucHJvcHMoZ2VuLCAoMCwgdXRpbF8xLnRvSGFzaCkoYWxsUHJvcHMpLCBpdC5wcm9wcyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcHJvcGVydGllcyA9IGFsbFByb3BzLmZpbHRlcigocCkgPT4gISgwLCB1dGlsXzEuYWx3YXlzVmFsaWRTY2hlbWEpKGl0LCBzY2hlbWFbcF0pKTtcbiAgICAgICAgaWYgKHByb3BlcnRpZXMubGVuZ3RoID09PSAwKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCB2YWxpZCA9IGdlbi5uYW1lKFwidmFsaWRcIik7XG4gICAgICAgIGZvciAoY29uc3QgcHJvcCBvZiBwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICBpZiAoaGFzRGVmYXVsdChwcm9wKSkge1xuICAgICAgICAgICAgICAgIGFwcGx5UHJvcGVydHlTY2hlbWEocHJvcCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBnZW4uaWYoKDAsIGNvZGVfMS5wcm9wZXJ0eUluRGF0YSkoZ2VuLCBkYXRhLCBwcm9wLCBpdC5vcHRzLm93blByb3BlcnRpZXMpKTtcbiAgICAgICAgICAgICAgICBhcHBseVByb3BlcnR5U2NoZW1hKHByb3ApO1xuICAgICAgICAgICAgICAgIGlmICghaXQuYWxsRXJyb3JzKVxuICAgICAgICAgICAgICAgICAgICBnZW4uZWxzZSgpLnZhcih2YWxpZCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgZ2VuLmVuZElmKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjeHQuaXQuZGVmaW5lZFByb3BlcnRpZXMuYWRkKHByb3ApO1xuICAgICAgICAgICAgY3h0Lm9rKHZhbGlkKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBoYXNEZWZhdWx0KHByb3ApIHtcbiAgICAgICAgICAgIHJldHVybiBpdC5vcHRzLnVzZURlZmF1bHRzICYmICFpdC5jb21wb3NpdGVSdWxlICYmIHNjaGVtYVtwcm9wXS5kZWZhdWx0ICE9PSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gYXBwbHlQcm9wZXJ0eVNjaGVtYShwcm9wKSB7XG4gICAgICAgICAgICBjeHQuc3Vic2NoZW1hKHtcbiAgICAgICAgICAgICAgICBrZXl3b3JkOiBcInByb3BlcnRpZXNcIixcbiAgICAgICAgICAgICAgICBzY2hlbWFQcm9wOiBwcm9wLFxuICAgICAgICAgICAgICAgIGRhdGFQcm9wOiBwcm9wLFxuICAgICAgICAgICAgfSwgdmFsaWQpO1xuICAgICAgICB9XG4gICAgfSxcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wcm9wZXJ0aWVzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBjb2RlXzEgPSByZXF1aXJlKFwiLi4vY29kZVwiKTtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL2NvZGVnZW5cIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS91dGlsXCIpO1xuY29uc3QgdXRpbF8yID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvdXRpbFwiKTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcInBhdHRlcm5Qcm9wZXJ0aWVzXCIsXG4gICAgdHlwZTogXCJvYmplY3RcIixcbiAgICBzY2hlbWFUeXBlOiBcIm9iamVjdFwiLFxuICAgIGNvZGUoY3h0KSB7XG4gICAgICAgIGNvbnN0IHsgZ2VuLCBzY2hlbWEsIGRhdGEsIHBhcmVudFNjaGVtYSwgaXQgfSA9IGN4dDtcbiAgICAgICAgY29uc3QgeyBvcHRzIH0gPSBpdDtcbiAgICAgICAgY29uc3QgcGF0dGVybnMgPSAoMCwgY29kZV8xLmFsbFNjaGVtYVByb3BlcnRpZXMpKHNjaGVtYSk7XG4gICAgICAgIGNvbnN0IGFsd2F5c1ZhbGlkUGF0dGVybnMgPSBwYXR0ZXJucy5maWx0ZXIoKHApID0+ICgwLCB1dGlsXzEuYWx3YXlzVmFsaWRTY2hlbWEpKGl0LCBzY2hlbWFbcF0pKTtcbiAgICAgICAgaWYgKHBhdHRlcm5zLmxlbmd0aCA9PT0gMCB8fFxuICAgICAgICAgICAgKGFsd2F5c1ZhbGlkUGF0dGVybnMubGVuZ3RoID09PSBwYXR0ZXJucy5sZW5ndGggJiZcbiAgICAgICAgICAgICAgICAoIWl0Lm9wdHMudW5ldmFsdWF0ZWQgfHwgaXQucHJvcHMgPT09IHRydWUpKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNoZWNrUHJvcGVydGllcyA9IG9wdHMuc3RyaWN0U2NoZW1hICYmICFvcHRzLmFsbG93TWF0Y2hpbmdQcm9wZXJ0aWVzICYmIHBhcmVudFNjaGVtYS5wcm9wZXJ0aWVzO1xuICAgICAgICBjb25zdCB2YWxpZCA9IGdlbi5uYW1lKFwidmFsaWRcIik7XG4gICAgICAgIGlmIChpdC5wcm9wcyAhPT0gdHJ1ZSAmJiAhKGl0LnByb3BzIGluc3RhbmNlb2YgY29kZWdlbl8xLk5hbWUpKSB7XG4gICAgICAgICAgICBpdC5wcm9wcyA9ICgwLCB1dGlsXzIuZXZhbHVhdGVkUHJvcHNUb05hbWUpKGdlbiwgaXQucHJvcHMpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgcHJvcHMgfSA9IGl0O1xuICAgICAgICB2YWxpZGF0ZVBhdHRlcm5Qcm9wZXJ0aWVzKCk7XG4gICAgICAgIGZ1bmN0aW9uIHZhbGlkYXRlUGF0dGVyblByb3BlcnRpZXMoKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHBhdCBvZiBwYXR0ZXJucykge1xuICAgICAgICAgICAgICAgIGlmIChjaGVja1Byb3BlcnRpZXMpXG4gICAgICAgICAgICAgICAgICAgIGNoZWNrTWF0Y2hpbmdQcm9wZXJ0aWVzKHBhdCk7XG4gICAgICAgICAgICAgICAgaWYgKGl0LmFsbEVycm9ycykge1xuICAgICAgICAgICAgICAgICAgICB2YWxpZGF0ZVByb3BlcnRpZXMocGF0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGdlbi52YXIodmFsaWQsIHRydWUpOyAvLyBUT0RPIHZhclxuICAgICAgICAgICAgICAgICAgICB2YWxpZGF0ZVByb3BlcnRpZXMocGF0KTtcbiAgICAgICAgICAgICAgICAgICAgZ2VuLmlmKHZhbGlkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gY2hlY2tNYXRjaGluZ1Byb3BlcnRpZXMocGF0KSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHByb3AgaW4gY2hlY2tQcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgICAgaWYgKG5ldyBSZWdFeHAocGF0KS50ZXN0KHByb3ApKSB7XG4gICAgICAgICAgICAgICAgICAgICgwLCB1dGlsXzEuY2hlY2tTdHJpY3RNb2RlKShpdCwgYHByb3BlcnR5ICR7cHJvcH0gbWF0Y2hlcyBwYXR0ZXJuICR7cGF0fSAodXNlIGFsbG93TWF0Y2hpbmdQcm9wZXJ0aWVzKWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiB2YWxpZGF0ZVByb3BlcnRpZXMocGF0KSB7XG4gICAgICAgICAgICBnZW4uZm9ySW4oXCJrZXlcIiwgZGF0YSwgKGtleSkgPT4ge1xuICAgICAgICAgICAgICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGAkeygwLCBjb2RlXzEudXNlUGF0dGVybikoY3h0LCBwYXQpfS50ZXN0KCR7a2V5fSlgLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFsd2F5c1ZhbGlkID0gYWx3YXlzVmFsaWRQYXR0ZXJucy5pbmNsdWRlcyhwYXQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWFsd2F5c1ZhbGlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjeHQuc3Vic2NoZW1hKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXl3b3JkOiBcInBhdHRlcm5Qcm9wZXJ0aWVzXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NoZW1hUHJvcDogcGF0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFQcm9wOiBrZXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVByb3BUeXBlOiB1dGlsXzIuVHlwZS5TdHIsXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB2YWxpZCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGl0Lm9wdHMudW5ldmFsdWF0ZWQgJiYgcHJvcHMgIT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdlbi5hc3NpZ24oKDAsIGNvZGVnZW5fMS5fKSBgJHtwcm9wc31bJHtrZXl9XWAsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFhbHdheXNWYWxpZCAmJiAhaXQuYWxsRXJyb3JzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjYW4gc2hvcnQtY2lyY3VpdCBpZiBgdW5ldmFsdWF0ZWRQcm9wZXJ0aWVzYCBpcyBub3Qgc3VwcG9ydGVkIChvcHRzLm5leHQgPT09IGZhbHNlKVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gb3IgaWYgYWxsIHByb3BlcnRpZXMgd2VyZSBldmFsdWF0ZWQgKHByb3BzID09PSB0cnVlKVxuICAgICAgICAgICAgICAgICAgICAgICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEubm90KSh2YWxpZCksICgpID0+IGdlbi5icmVhaygpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9LFxufTtcbmV4cG9ydHMuZGVmYXVsdCA9IGRlZjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXBhdHRlcm5Qcm9wZXJ0aWVzLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS91dGlsXCIpO1xuY29uc3QgZGVmID0ge1xuICAgIGtleXdvcmQ6IFwibm90XCIsXG4gICAgc2NoZW1hVHlwZTogW1wib2JqZWN0XCIsIFwiYm9vbGVhblwiXSxcbiAgICB0cmFja0Vycm9yczogdHJ1ZSxcbiAgICBjb2RlKGN4dCkge1xuICAgICAgICBjb25zdCB7IGdlbiwgc2NoZW1hLCBpdCB9ID0gY3h0O1xuICAgICAgICBpZiAoKDAsIHV0aWxfMS5hbHdheXNWYWxpZFNjaGVtYSkoaXQsIHNjaGVtYSkpIHtcbiAgICAgICAgICAgIGN4dC5mYWlsKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdmFsaWQgPSBnZW4ubmFtZShcInZhbGlkXCIpO1xuICAgICAgICBjeHQuc3Vic2NoZW1hKHtcbiAgICAgICAgICAgIGtleXdvcmQ6IFwibm90XCIsXG4gICAgICAgICAgICBjb21wb3NpdGVSdWxlOiB0cnVlLFxuICAgICAgICAgICAgY3JlYXRlRXJyb3JzOiBmYWxzZSxcbiAgICAgICAgICAgIGFsbEVycm9yczogZmFsc2UsXG4gICAgICAgIH0sIHZhbGlkKTtcbiAgICAgICAgY3h0LmZhaWxSZXN1bHQodmFsaWQsICgpID0+IGN4dC5yZXNldCgpLCAoKSA9PiBjeHQuZXJyb3IoKSk7XG4gICAgfSxcbiAgICBlcnJvcjogeyBtZXNzYWdlOiBcIm11c3QgTk9UIGJlIHZhbGlkXCIgfSxcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1ub3QuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGNvZGVfMSA9IHJlcXVpcmUoXCIuLi9jb2RlXCIpO1xuY29uc3QgZGVmID0ge1xuICAgIGtleXdvcmQ6IFwiYW55T2ZcIixcbiAgICBzY2hlbWFUeXBlOiBcImFycmF5XCIsXG4gICAgdHJhY2tFcnJvcnM6IHRydWUsXG4gICAgY29kZTogY29kZV8xLnZhbGlkYXRlVW5pb24sXG4gICAgZXJyb3I6IHsgbWVzc2FnZTogXCJtdXN0IG1hdGNoIGEgc2NoZW1hIGluIGFueU9mXCIgfSxcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1hbnlPZi5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvY29kZWdlblwiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL3V0aWxcIik7XG5jb25zdCBlcnJvciA9IHtcbiAgICBtZXNzYWdlOiBcIm11c3QgbWF0Y2ggZXhhY3RseSBvbmUgc2NoZW1hIGluIG9uZU9mXCIsXG4gICAgcGFyYW1zOiAoeyBwYXJhbXMgfSkgPT4gKDAsIGNvZGVnZW5fMS5fKSBge3Bhc3NpbmdTY2hlbWFzOiAke3BhcmFtcy5wYXNzaW5nfX1gLFxufTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcIm9uZU9mXCIsXG4gICAgc2NoZW1hVHlwZTogXCJhcnJheVwiLFxuICAgIHRyYWNrRXJyb3JzOiB0cnVlLFxuICAgIGVycm9yLFxuICAgIGNvZGUoY3h0KSB7XG4gICAgICAgIGNvbnN0IHsgZ2VuLCBzY2hlbWEsIHBhcmVudFNjaGVtYSwgaXQgfSA9IGN4dDtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShzY2hlbWEpKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYWp2IGltcGxlbWVudGF0aW9uIGVycm9yXCIpO1xuICAgICAgICBpZiAoaXQub3B0cy5kaXNjcmltaW5hdG9yICYmIHBhcmVudFNjaGVtYS5kaXNjcmltaW5hdG9yKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCBzY2hBcnIgPSBzY2hlbWE7XG4gICAgICAgIGNvbnN0IHZhbGlkID0gZ2VuLmxldChcInZhbGlkXCIsIGZhbHNlKTtcbiAgICAgICAgY29uc3QgcGFzc2luZyA9IGdlbi5sZXQoXCJwYXNzaW5nXCIsIG51bGwpO1xuICAgICAgICBjb25zdCBzY2hWYWxpZCA9IGdlbi5uYW1lKFwiX3ZhbGlkXCIpO1xuICAgICAgICBjeHQuc2V0UGFyYW1zKHsgcGFzc2luZyB9KTtcbiAgICAgICAgLy8gVE9ETyBwb3NzaWJseSBmYWlsIHN0cmFpZ2h0IGF3YXkgKHdpdGggd2FybmluZyBvciBleGNlcHRpb24pIGlmIHRoZXJlIGFyZSB0d28gZW1wdHkgYWx3YXlzIHZhbGlkIHNjaGVtYXNcbiAgICAgICAgZ2VuLmJsb2NrKHZhbGlkYXRlT25lT2YpO1xuICAgICAgICBjeHQucmVzdWx0KHZhbGlkLCAoKSA9PiBjeHQucmVzZXQoKSwgKCkgPT4gY3h0LmVycm9yKHRydWUpKTtcbiAgICAgICAgZnVuY3Rpb24gdmFsaWRhdGVPbmVPZigpIHtcbiAgICAgICAgICAgIHNjaEFyci5mb3JFYWNoKChzY2gsIGkpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgc2NoQ3h0O1xuICAgICAgICAgICAgICAgIGlmICgoMCwgdXRpbF8xLmFsd2F5c1ZhbGlkU2NoZW1hKShpdCwgc2NoKSkge1xuICAgICAgICAgICAgICAgICAgICBnZW4udmFyKHNjaFZhbGlkLCB0cnVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHNjaEN4dCA9IGN4dC5zdWJzY2hlbWEoe1xuICAgICAgICAgICAgICAgICAgICAgICAga2V5d29yZDogXCJvbmVPZlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2NoZW1hUHJvcDogaSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvc2l0ZVJ1bGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIH0sIHNjaFZhbGlkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGkgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGdlblxuICAgICAgICAgICAgICAgICAgICAgICAgLmlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7c2NoVmFsaWR9ICYmICR7dmFsaWR9YClcbiAgICAgICAgICAgICAgICAgICAgICAgIC5hc3NpZ24odmFsaWQsIGZhbHNlKVxuICAgICAgICAgICAgICAgICAgICAgICAgLmFzc2lnbihwYXNzaW5nLCAoMCwgY29kZWdlbl8xLl8pIGBbJHtwYXNzaW5nfSwgJHtpfV1gKVxuICAgICAgICAgICAgICAgICAgICAgICAgLmVsc2UoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZ2VuLmlmKHNjaFZhbGlkLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGdlbi5hc3NpZ24odmFsaWQsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICBnZW4uYXNzaWduKHBhc3NpbmcsIGkpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2NoQ3h0KVxuICAgICAgICAgICAgICAgICAgICAgICAgY3h0Lm1lcmdlRXZhbHVhdGVkKHNjaEN4dCwgY29kZWdlbl8xLk5hbWUpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9LFxufTtcbmV4cG9ydHMuZGVmYXVsdCA9IGRlZjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW9uZU9mLmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZS91dGlsXCIpO1xuY29uc3QgZGVmID0ge1xuICAgIGtleXdvcmQ6IFwiYWxsT2ZcIixcbiAgICBzY2hlbWFUeXBlOiBcImFycmF5XCIsXG4gICAgY29kZShjeHQpIHtcbiAgICAgICAgY29uc3QgeyBnZW4sIHNjaGVtYSwgaXQgfSA9IGN4dDtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShzY2hlbWEpKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYWp2IGltcGxlbWVudGF0aW9uIGVycm9yXCIpO1xuICAgICAgICBjb25zdCB2YWxpZCA9IGdlbi5uYW1lKFwidmFsaWRcIik7XG4gICAgICAgIHNjaGVtYS5mb3JFYWNoKChzY2gsIGkpID0+IHtcbiAgICAgICAgICAgIGlmICgoMCwgdXRpbF8xLmFsd2F5c1ZhbGlkU2NoZW1hKShpdCwgc2NoKSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBjb25zdCBzY2hDeHQgPSBjeHQuc3Vic2NoZW1hKHsga2V5d29yZDogXCJhbGxPZlwiLCBzY2hlbWFQcm9wOiBpIH0sIHZhbGlkKTtcbiAgICAgICAgICAgIGN4dC5vayh2YWxpZCk7XG4gICAgICAgICAgICBjeHQubWVyZ2VFdmFsdWF0ZWQoc2NoQ3h0KTtcbiAgICAgICAgfSk7XG4gICAgfSxcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1hbGxPZi5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvY29kZWdlblwiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL3V0aWxcIik7XG5jb25zdCBlcnJvciA9IHtcbiAgICBtZXNzYWdlOiAoeyBwYXJhbXMgfSkgPT4gKDAsIGNvZGVnZW5fMS5zdHIpIGBtdXN0IG1hdGNoIFwiJHtwYXJhbXMuaWZDbGF1c2V9XCIgc2NoZW1hYCxcbiAgICBwYXJhbXM6ICh7IHBhcmFtcyB9KSA9PiAoMCwgY29kZWdlbl8xLl8pIGB7ZmFpbGluZ0tleXdvcmQ6ICR7cGFyYW1zLmlmQ2xhdXNlfX1gLFxufTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBcImlmXCIsXG4gICAgc2NoZW1hVHlwZTogW1wib2JqZWN0XCIsIFwiYm9vbGVhblwiXSxcbiAgICB0cmFja0Vycm9yczogdHJ1ZSxcbiAgICBlcnJvcixcbiAgICBjb2RlKGN4dCkge1xuICAgICAgICBjb25zdCB7IGdlbiwgcGFyZW50U2NoZW1hLCBpdCB9ID0gY3h0O1xuICAgICAgICBpZiAocGFyZW50U2NoZW1hLnRoZW4gPT09IHVuZGVmaW5lZCAmJiBwYXJlbnRTY2hlbWEuZWxzZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAoMCwgdXRpbF8xLmNoZWNrU3RyaWN0TW9kZSkoaXQsICdcImlmXCIgd2l0aG91dCBcInRoZW5cIiBhbmQgXCJlbHNlXCIgaXMgaWdub3JlZCcpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGhhc1RoZW4gPSBoYXNTY2hlbWEoaXQsIFwidGhlblwiKTtcbiAgICAgICAgY29uc3QgaGFzRWxzZSA9IGhhc1NjaGVtYShpdCwgXCJlbHNlXCIpO1xuICAgICAgICBpZiAoIWhhc1RoZW4gJiYgIWhhc0Vsc2UpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IHZhbGlkID0gZ2VuLmxldChcInZhbGlkXCIsIHRydWUpO1xuICAgICAgICBjb25zdCBzY2hWYWxpZCA9IGdlbi5uYW1lKFwiX3ZhbGlkXCIpO1xuICAgICAgICB2YWxpZGF0ZUlmKCk7XG4gICAgICAgIGN4dC5yZXNldCgpO1xuICAgICAgICBpZiAoaGFzVGhlbiAmJiBoYXNFbHNlKSB7XG4gICAgICAgICAgICBjb25zdCBpZkNsYXVzZSA9IGdlbi5sZXQoXCJpZkNsYXVzZVwiKTtcbiAgICAgICAgICAgIGN4dC5zZXRQYXJhbXMoeyBpZkNsYXVzZSB9KTtcbiAgICAgICAgICAgIGdlbi5pZihzY2hWYWxpZCwgdmFsaWRhdGVDbGF1c2UoXCJ0aGVuXCIsIGlmQ2xhdXNlKSwgdmFsaWRhdGVDbGF1c2UoXCJlbHNlXCIsIGlmQ2xhdXNlKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaGFzVGhlbikge1xuICAgICAgICAgICAgZ2VuLmlmKHNjaFZhbGlkLCB2YWxpZGF0ZUNsYXVzZShcInRoZW5cIikpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEubm90KShzY2hWYWxpZCksIHZhbGlkYXRlQ2xhdXNlKFwiZWxzZVwiKSk7XG4gICAgICAgIH1cbiAgICAgICAgY3h0LnBhc3ModmFsaWQsICgpID0+IGN4dC5lcnJvcih0cnVlKSk7XG4gICAgICAgIGZ1bmN0aW9uIHZhbGlkYXRlSWYoKSB7XG4gICAgICAgICAgICBjb25zdCBzY2hDeHQgPSBjeHQuc3Vic2NoZW1hKHtcbiAgICAgICAgICAgICAgICBrZXl3b3JkOiBcImlmXCIsXG4gICAgICAgICAgICAgICAgY29tcG9zaXRlUnVsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBjcmVhdGVFcnJvcnM6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGFsbEVycm9yczogZmFsc2UsXG4gICAgICAgICAgICB9LCBzY2hWYWxpZCk7XG4gICAgICAgICAgICBjeHQubWVyZ2VFdmFsdWF0ZWQoc2NoQ3h0KTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiB2YWxpZGF0ZUNsYXVzZShrZXl3b3JkLCBpZkNsYXVzZSkge1xuICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzY2hDeHQgPSBjeHQuc3Vic2NoZW1hKHsga2V5d29yZCB9LCBzY2hWYWxpZCk7XG4gICAgICAgICAgICAgICAgZ2VuLmFzc2lnbih2YWxpZCwgc2NoVmFsaWQpO1xuICAgICAgICAgICAgICAgIGN4dC5tZXJnZVZhbGlkRXZhbHVhdGVkKHNjaEN4dCwgdmFsaWQpO1xuICAgICAgICAgICAgICAgIGlmIChpZkNsYXVzZSlcbiAgICAgICAgICAgICAgICAgICAgZ2VuLmFzc2lnbihpZkNsYXVzZSwgKDAsIGNvZGVnZW5fMS5fKSBgJHtrZXl3b3JkfWApO1xuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgY3h0LnNldFBhcmFtcyh7IGlmQ2xhdXNlOiBrZXl3b3JkIH0pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH0sXG59O1xuZnVuY3Rpb24gaGFzU2NoZW1hKGl0LCBrZXl3b3JkKSB7XG4gICAgY29uc3Qgc2NoZW1hID0gaXQuc2NoZW1hW2tleXdvcmRdO1xuICAgIHJldHVybiBzY2hlbWEgIT09IHVuZGVmaW5lZCAmJiAhKDAsIHV0aWxfMS5hbHdheXNWYWxpZFNjaGVtYSkoaXQsIHNjaGVtYSk7XG59XG5leHBvcnRzLmRlZmF1bHQgPSBkZWY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pZi5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgdXRpbF8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvdXRpbFwiKTtcbmNvbnN0IGRlZiA9IHtcbiAgICBrZXl3b3JkOiBbXCJ0aGVuXCIsIFwiZWxzZVwiXSxcbiAgICBzY2hlbWFUeXBlOiBbXCJvYmplY3RcIiwgXCJib29sZWFuXCJdLFxuICAgIGNvZGUoeyBrZXl3b3JkLCBwYXJlbnRTY2hlbWEsIGl0IH0pIHtcbiAgICAgICAgaWYgKHBhcmVudFNjaGVtYS5pZiA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgKDAsIHV0aWxfMS5jaGVja1N0cmljdE1vZGUpKGl0LCBgXCIke2tleXdvcmR9XCIgd2l0aG91dCBcImlmXCIgaXMgaWdub3JlZGApO1xuICAgIH0sXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dGhlbkVsc2UuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGFkZGl0aW9uYWxJdGVtc18xID0gcmVxdWlyZShcIi4vYWRkaXRpb25hbEl0ZW1zXCIpO1xuY29uc3QgcHJlZml4SXRlbXNfMSA9IHJlcXVpcmUoXCIuL3ByZWZpeEl0ZW1zXCIpO1xuY29uc3QgaXRlbXNfMSA9IHJlcXVpcmUoXCIuL2l0ZW1zXCIpO1xuY29uc3QgaXRlbXMyMDIwXzEgPSByZXF1aXJlKFwiLi9pdGVtczIwMjBcIik7XG5jb25zdCBjb250YWluc18xID0gcmVxdWlyZShcIi4vY29udGFpbnNcIik7XG5jb25zdCBkZXBlbmRlbmNpZXNfMSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1wiKTtcbmNvbnN0IHByb3BlcnR5TmFtZXNfMSA9IHJlcXVpcmUoXCIuL3Byb3BlcnR5TmFtZXNcIik7XG5jb25zdCBhZGRpdGlvbmFsUHJvcGVydGllc18xID0gcmVxdWlyZShcIi4vYWRkaXRpb25hbFByb3BlcnRpZXNcIik7XG5jb25zdCBwcm9wZXJ0aWVzXzEgPSByZXF1aXJlKFwiLi9wcm9wZXJ0aWVzXCIpO1xuY29uc3QgcGF0dGVyblByb3BlcnRpZXNfMSA9IHJlcXVpcmUoXCIuL3BhdHRlcm5Qcm9wZXJ0aWVzXCIpO1xuY29uc3Qgbm90XzEgPSByZXF1aXJlKFwiLi9ub3RcIik7XG5jb25zdCBhbnlPZl8xID0gcmVxdWlyZShcIi4vYW55T2ZcIik7XG5jb25zdCBvbmVPZl8xID0gcmVxdWlyZShcIi4vb25lT2ZcIik7XG5jb25zdCBhbGxPZl8xID0gcmVxdWlyZShcIi4vYWxsT2ZcIik7XG5jb25zdCBpZl8xID0gcmVxdWlyZShcIi4vaWZcIik7XG5jb25zdCB0aGVuRWxzZV8xID0gcmVxdWlyZShcIi4vdGhlbkVsc2VcIik7XG5mdW5jdGlvbiBnZXRBcHBsaWNhdG9yKGRyYWZ0MjAyMCA9IGZhbHNlKSB7XG4gICAgY29uc3QgYXBwbGljYXRvciA9IFtcbiAgICAgICAgLy8gYW55XG4gICAgICAgIG5vdF8xLmRlZmF1bHQsXG4gICAgICAgIGFueU9mXzEuZGVmYXVsdCxcbiAgICAgICAgb25lT2ZfMS5kZWZhdWx0LFxuICAgICAgICBhbGxPZl8xLmRlZmF1bHQsXG4gICAgICAgIGlmXzEuZGVmYXVsdCxcbiAgICAgICAgdGhlbkVsc2VfMS5kZWZhdWx0LFxuICAgICAgICAvLyBvYmplY3RcbiAgICAgICAgcHJvcGVydHlOYW1lc18xLmRlZmF1bHQsXG4gICAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzXzEuZGVmYXVsdCxcbiAgICAgICAgZGVwZW5kZW5jaWVzXzEuZGVmYXVsdCxcbiAgICAgICAgcHJvcGVydGllc18xLmRlZmF1bHQsXG4gICAgICAgIHBhdHRlcm5Qcm9wZXJ0aWVzXzEuZGVmYXVsdCxcbiAgICBdO1xuICAgIC8vIGFycmF5XG4gICAgaWYgKGRyYWZ0MjAyMClcbiAgICAgICAgYXBwbGljYXRvci5wdXNoKHByZWZpeEl0ZW1zXzEuZGVmYXVsdCwgaXRlbXMyMDIwXzEuZGVmYXVsdCk7XG4gICAgZWxzZVxuICAgICAgICBhcHBsaWNhdG9yLnB1c2goYWRkaXRpb25hbEl0ZW1zXzEuZGVmYXVsdCwgaXRlbXNfMS5kZWZhdWx0KTtcbiAgICBhcHBsaWNhdG9yLnB1c2goY29udGFpbnNfMS5kZWZhdWx0KTtcbiAgICByZXR1cm4gYXBwbGljYXRvcjtcbn1cbmV4cG9ydHMuZGVmYXVsdCA9IGdldEFwcGxpY2F0b3I7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcIi4uLy4uL2NvbXBpbGUvY29kZWdlblwiKTtcbmNvbnN0IGVycm9yID0ge1xuICAgIG1lc3NhZ2U6ICh7IHNjaGVtYUNvZGUgfSkgPT4gKDAsIGNvZGVnZW5fMS5zdHIpIGBtdXN0IG1hdGNoIGZvcm1hdCBcIiR7c2NoZW1hQ29kZX1cImAsXG4gICAgcGFyYW1zOiAoeyBzY2hlbWFDb2RlIH0pID0+ICgwLCBjb2RlZ2VuXzEuXykgYHtmb3JtYXQ6ICR7c2NoZW1hQ29kZX19YCxcbn07XG5jb25zdCBkZWYgPSB7XG4gICAga2V5d29yZDogXCJmb3JtYXRcIixcbiAgICB0eXBlOiBbXCJudW1iZXJcIiwgXCJzdHJpbmdcIl0sXG4gICAgc2NoZW1hVHlwZTogXCJzdHJpbmdcIixcbiAgICAkZGF0YTogdHJ1ZSxcbiAgICBlcnJvcixcbiAgICBjb2RlKGN4dCwgcnVsZVR5cGUpIHtcbiAgICAgICAgY29uc3QgeyBnZW4sIGRhdGEsICRkYXRhLCBzY2hlbWEsIHNjaGVtYUNvZGUsIGl0IH0gPSBjeHQ7XG4gICAgICAgIGNvbnN0IHsgb3B0cywgZXJyU2NoZW1hUGF0aCwgc2NoZW1hRW52LCBzZWxmIH0gPSBpdDtcbiAgICAgICAgaWYgKCFvcHRzLnZhbGlkYXRlRm9ybWF0cylcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKCRkYXRhKVxuICAgICAgICAgICAgdmFsaWRhdGUkRGF0YUZvcm1hdCgpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICB2YWxpZGF0ZUZvcm1hdCgpO1xuICAgICAgICBmdW5jdGlvbiB2YWxpZGF0ZSREYXRhRm9ybWF0KCkge1xuICAgICAgICAgICAgY29uc3QgZm10cyA9IGdlbi5zY29wZVZhbHVlKFwiZm9ybWF0c1wiLCB7XG4gICAgICAgICAgICAgICAgcmVmOiBzZWxmLmZvcm1hdHMsXG4gICAgICAgICAgICAgICAgY29kZTogb3B0cy5jb2RlLmZvcm1hdHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IGZEZWYgPSBnZW4uY29uc3QoXCJmRGVmXCIsICgwLCBjb2RlZ2VuXzEuXykgYCR7Zm10c31bJHtzY2hlbWFDb2RlfV1gKTtcbiAgICAgICAgICAgIGNvbnN0IGZUeXBlID0gZ2VuLmxldChcImZUeXBlXCIpO1xuICAgICAgICAgICAgY29uc3QgZm9ybWF0ID0gZ2VuLmxldChcImZvcm1hdFwiKTtcbiAgICAgICAgICAgIC8vIFRPRE8gc2ltcGxpZnlcbiAgICAgICAgICAgIGdlbi5pZigoMCwgY29kZWdlbl8xLl8pIGB0eXBlb2YgJHtmRGVmfSA9PSBcIm9iamVjdFwiICYmICEoJHtmRGVmfSBpbnN0YW5jZW9mIFJlZ0V4cClgLCAoKSA9PiBnZW4uYXNzaWduKGZUeXBlLCAoMCwgY29kZWdlbl8xLl8pIGAke2ZEZWZ9LnR5cGUgfHwgXCJzdHJpbmdcImApLmFzc2lnbihmb3JtYXQsICgwLCBjb2RlZ2VuXzEuXykgYCR7ZkRlZn0udmFsaWRhdGVgKSwgKCkgPT4gZ2VuLmFzc2lnbihmVHlwZSwgKDAsIGNvZGVnZW5fMS5fKSBgXCJzdHJpbmdcImApLmFzc2lnbihmb3JtYXQsIGZEZWYpKTtcbiAgICAgICAgICAgIGN4dC5mYWlsJGRhdGEoKDAsIGNvZGVnZW5fMS5vcikodW5rbm93bkZtdCgpLCBpbnZhbGlkRm10KCkpKTtcbiAgICAgICAgICAgIGZ1bmN0aW9uIHVua25vd25GbXQoKSB7XG4gICAgICAgICAgICAgICAgaWYgKG9wdHMuc3RyaWN0U2NoZW1hID09PSBmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvZGVnZW5fMS5uaWw7XG4gICAgICAgICAgICAgICAgcmV0dXJuICgwLCBjb2RlZ2VuXzEuXykgYCR7c2NoZW1hQ29kZX0gJiYgISR7Zm9ybWF0fWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBpbnZhbGlkRm10KCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNhbGxGb3JtYXQgPSBzY2hlbWFFbnYuJGFzeW5jXG4gICAgICAgICAgICAgICAgICAgID8gKDAsIGNvZGVnZW5fMS5fKSBgKCR7ZkRlZn0uYXN5bmMgPyBhd2FpdCAke2Zvcm1hdH0oJHtkYXRhfSkgOiAke2Zvcm1hdH0oJHtkYXRhfSkpYFxuICAgICAgICAgICAgICAgICAgICA6ICgwLCBjb2RlZ2VuXzEuXykgYCR7Zm9ybWF0fSgke2RhdGF9KWA7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsaWREYXRhID0gKDAsIGNvZGVnZW5fMS5fKSBgKHR5cGVvZiAke2Zvcm1hdH0gPT0gXCJmdW5jdGlvblwiID8gJHtjYWxsRm9ybWF0fSA6ICR7Zm9ybWF0fS50ZXN0KCR7ZGF0YX0pKWA7XG4gICAgICAgICAgICAgICAgcmV0dXJuICgwLCBjb2RlZ2VuXzEuXykgYCR7Zm9ybWF0fSAmJiAke2Zvcm1hdH0gIT09IHRydWUgJiYgJHtmVHlwZX0gPT09ICR7cnVsZVR5cGV9ICYmICEke3ZhbGlkRGF0YX1gO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHZhbGlkYXRlRm9ybWF0KCkge1xuICAgICAgICAgICAgY29uc3QgZm9ybWF0RGVmID0gc2VsZi5mb3JtYXRzW3NjaGVtYV07XG4gICAgICAgICAgICBpZiAoIWZvcm1hdERlZikge1xuICAgICAgICAgICAgICAgIHVua25vd25Gb3JtYXQoKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZm9ybWF0RGVmID09PSB0cnVlKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGNvbnN0IFtmbXRUeXBlLCBmb3JtYXQsIGZtdFJlZl0gPSBnZXRGb3JtYXQoZm9ybWF0RGVmKTtcbiAgICAgICAgICAgIGlmIChmbXRUeXBlID09PSBydWxlVHlwZSlcbiAgICAgICAgICAgICAgICBjeHQucGFzcyh2YWxpZENvbmRpdGlvbigpKTtcbiAgICAgICAgICAgIGZ1bmN0aW9uIHVua25vd25Gb3JtYXQoKSB7XG4gICAgICAgICAgICAgICAgaWYgKG9wdHMuc3RyaWN0U2NoZW1hID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLmxvZ2dlci53YXJuKHVua25vd25Nc2coKSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHVua25vd25Nc2coKSk7XG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gdW5rbm93bk1zZygpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGB1bmtub3duIGZvcm1hdCBcIiR7c2NoZW1hfVwiIGlnbm9yZWQgaW4gc2NoZW1hIGF0IHBhdGggXCIke2VyclNjaGVtYVBhdGh9XCJgO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIGdldEZvcm1hdChmbXREZWYpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb2RlID0gZm10RGVmIGluc3RhbmNlb2YgUmVnRXhwXG4gICAgICAgICAgICAgICAgICAgID8gKDAsIGNvZGVnZW5fMS5yZWdleHBDb2RlKShmbXREZWYpXG4gICAgICAgICAgICAgICAgICAgIDogb3B0cy5jb2RlLmZvcm1hdHNcbiAgICAgICAgICAgICAgICAgICAgICAgID8gKDAsIGNvZGVnZW5fMS5fKSBgJHtvcHRzLmNvZGUuZm9ybWF0c30keygwLCBjb2RlZ2VuXzEuZ2V0UHJvcGVydHkpKHNjaGVtYSl9YFxuICAgICAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgY29uc3QgZm10ID0gZ2VuLnNjb3BlVmFsdWUoXCJmb3JtYXRzXCIsIHsga2V5OiBzY2hlbWEsIHJlZjogZm10RGVmLCBjb2RlIH0pO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZm10RGVmID09IFwib2JqZWN0XCIgJiYgIShmbXREZWYgaW5zdGFuY2VvZiBSZWdFeHApKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbZm10RGVmLnR5cGUgfHwgXCJzdHJpbmdcIiwgZm10RGVmLnZhbGlkYXRlLCAoMCwgY29kZWdlbl8xLl8pIGAke2ZtdH0udmFsaWRhdGVgXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtcInN0cmluZ1wiLCBmbXREZWYsIGZtdF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiB2YWxpZENvbmRpdGlvbigpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGZvcm1hdERlZiA9PSBcIm9iamVjdFwiICYmICEoZm9ybWF0RGVmIGluc3RhbmNlb2YgUmVnRXhwKSAmJiBmb3JtYXREZWYuYXN5bmMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFzY2hlbWFFbnYuJGFzeW5jKVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYXN5bmMgZm9ybWF0IGluIHN5bmMgc2NoZW1hXCIpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDAsIGNvZGVnZW5fMS5fKSBgYXdhaXQgJHtmbXRSZWZ9KCR7ZGF0YX0pYDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiBmb3JtYXQgPT0gXCJmdW5jdGlvblwiID8gKDAsIGNvZGVnZW5fMS5fKSBgJHtmbXRSZWZ9KCR7ZGF0YX0pYCA6ICgwLCBjb2RlZ2VuXzEuXykgYCR7Zm10UmVmfS50ZXN0KCR7ZGF0YX0pYDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Zm9ybWF0LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBmb3JtYXRfMSA9IHJlcXVpcmUoXCIuL2Zvcm1hdFwiKTtcbmNvbnN0IGZvcm1hdCA9IFtmb3JtYXRfMS5kZWZhdWx0XTtcbmV4cG9ydHMuZGVmYXVsdCA9IGZvcm1hdDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmNvbnRlbnRWb2NhYnVsYXJ5ID0gZXhwb3J0cy5tZXRhZGF0YVZvY2FidWxhcnkgPSB2b2lkIDA7XG5leHBvcnRzLm1ldGFkYXRhVm9jYWJ1bGFyeSA9IFtcbiAgICBcInRpdGxlXCIsXG4gICAgXCJkZXNjcmlwdGlvblwiLFxuICAgIFwiZGVmYXVsdFwiLFxuICAgIFwiZGVwcmVjYXRlZFwiLFxuICAgIFwicmVhZE9ubHlcIixcbiAgICBcIndyaXRlT25seVwiLFxuICAgIFwiZXhhbXBsZXNcIixcbl07XG5leHBvcnRzLmNvbnRlbnRWb2NhYnVsYXJ5ID0gW1xuICAgIFwiY29udGVudE1lZGlhVHlwZVwiLFxuICAgIFwiY29udGVudEVuY29kaW5nXCIsXG4gICAgXCJjb250ZW50U2NoZW1hXCIsXG5dO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bWV0YWRhdGEuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGNvcmVfMSA9IHJlcXVpcmUoXCIuL2NvcmVcIik7XG5jb25zdCB2YWxpZGF0aW9uXzEgPSByZXF1aXJlKFwiLi92YWxpZGF0aW9uXCIpO1xuY29uc3QgYXBwbGljYXRvcl8xID0gcmVxdWlyZShcIi4vYXBwbGljYXRvclwiKTtcbmNvbnN0IGZvcm1hdF8xID0gcmVxdWlyZShcIi4vZm9ybWF0XCIpO1xuY29uc3QgbWV0YWRhdGFfMSA9IHJlcXVpcmUoXCIuL21ldGFkYXRhXCIpO1xuY29uc3QgZHJhZnQ3Vm9jYWJ1bGFyaWVzID0gW1xuICAgIGNvcmVfMS5kZWZhdWx0LFxuICAgIHZhbGlkYXRpb25fMS5kZWZhdWx0LFxuICAgICgwLCBhcHBsaWNhdG9yXzEuZGVmYXVsdCkoKSxcbiAgICBmb3JtYXRfMS5kZWZhdWx0LFxuICAgIG1ldGFkYXRhXzEubWV0YWRhdGFWb2NhYnVsYXJ5LFxuICAgIG1ldGFkYXRhXzEuY29udGVudFZvY2FidWxhcnksXG5dO1xuZXhwb3J0cy5kZWZhdWx0ID0gZHJhZnQ3Vm9jYWJ1bGFyaWVzO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZHJhZnQ3LmpzLm1hcCIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkRpc2NyRXJyb3IgPSB2b2lkIDA7XG52YXIgRGlzY3JFcnJvcjtcbihmdW5jdGlvbiAoRGlzY3JFcnJvcikge1xuICAgIERpc2NyRXJyb3JbXCJUYWdcIl0gPSBcInRhZ1wiO1xuICAgIERpc2NyRXJyb3JbXCJNYXBwaW5nXCJdID0gXCJtYXBwaW5nXCI7XG59KShEaXNjckVycm9yID0gZXhwb3J0cy5EaXNjckVycm9yIHx8IChleHBvcnRzLkRpc2NyRXJyb3IgPSB7fSkpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dHlwZXMuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL2NvZGVnZW5cIik7XG5jb25zdCB0eXBlc18xID0gcmVxdWlyZShcIi4uL2Rpc2NyaW1pbmF0b3IvdHlwZXNcIik7XG5jb25zdCBjb21waWxlXzEgPSByZXF1aXJlKFwiLi4vLi4vY29tcGlsZVwiKTtcbmNvbnN0IHV0aWxfMSA9IHJlcXVpcmUoXCIuLi8uLi9jb21waWxlL3V0aWxcIik7XG5jb25zdCBlcnJvciA9IHtcbiAgICBtZXNzYWdlOiAoeyBwYXJhbXM6IHsgZGlzY3JFcnJvciwgdGFnTmFtZSB9IH0pID0+IGRpc2NyRXJyb3IgPT09IHR5cGVzXzEuRGlzY3JFcnJvci5UYWdcbiAgICAgICAgPyBgdGFnIFwiJHt0YWdOYW1lfVwiIG11c3QgYmUgc3RyaW5nYFxuICAgICAgICA6IGB2YWx1ZSBvZiB0YWcgXCIke3RhZ05hbWV9XCIgbXVzdCBiZSBpbiBvbmVPZmAsXG4gICAgcGFyYW1zOiAoeyBwYXJhbXM6IHsgZGlzY3JFcnJvciwgdGFnLCB0YWdOYW1lIH0gfSkgPT4gKDAsIGNvZGVnZW5fMS5fKSBge2Vycm9yOiAke2Rpc2NyRXJyb3J9LCB0YWc6ICR7dGFnTmFtZX0sIHRhZ1ZhbHVlOiAke3RhZ319YCxcbn07XG5jb25zdCBkZWYgPSB7XG4gICAga2V5d29yZDogXCJkaXNjcmltaW5hdG9yXCIsXG4gICAgdHlwZTogXCJvYmplY3RcIixcbiAgICBzY2hlbWFUeXBlOiBcIm9iamVjdFwiLFxuICAgIGVycm9yLFxuICAgIGNvZGUoY3h0KSB7XG4gICAgICAgIGNvbnN0IHsgZ2VuLCBkYXRhLCBzY2hlbWEsIHBhcmVudFNjaGVtYSwgaXQgfSA9IGN4dDtcbiAgICAgICAgY29uc3QgeyBvbmVPZiB9ID0gcGFyZW50U2NoZW1hO1xuICAgICAgICBpZiAoIWl0Lm9wdHMuZGlzY3JpbWluYXRvcikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZGlzY3JpbWluYXRvcjogcmVxdWlyZXMgZGlzY3JpbWluYXRvciBvcHRpb25cIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdGFnTmFtZSA9IHNjaGVtYS5wcm9wZXJ0eU5hbWU7XG4gICAgICAgIGlmICh0eXBlb2YgdGFnTmFtZSAhPSBcInN0cmluZ1wiKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZGlzY3JpbWluYXRvcjogcmVxdWlyZXMgcHJvcGVydHlOYW1lXCIpO1xuICAgICAgICBpZiAoc2NoZW1hLm1hcHBpbmcpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJkaXNjcmltaW5hdG9yOiBtYXBwaW5nIGlzIG5vdCBzdXBwb3J0ZWRcIik7XG4gICAgICAgIGlmICghb25lT2YpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJkaXNjcmltaW5hdG9yOiByZXF1aXJlcyBvbmVPZiBrZXl3b3JkXCIpO1xuICAgICAgICBjb25zdCB2YWxpZCA9IGdlbi5sZXQoXCJ2YWxpZFwiLCBmYWxzZSk7XG4gICAgICAgIGNvbnN0IHRhZyA9IGdlbi5jb25zdChcInRhZ1wiLCAoMCwgY29kZWdlbl8xLl8pIGAke2RhdGF9JHsoMCwgY29kZWdlbl8xLmdldFByb3BlcnR5KSh0YWdOYW1lKX1gKTtcbiAgICAgICAgZ2VuLmlmKCgwLCBjb2RlZ2VuXzEuXykgYHR5cGVvZiAke3RhZ30gPT0gXCJzdHJpbmdcImAsICgpID0+IHZhbGlkYXRlTWFwcGluZygpLCAoKSA9PiBjeHQuZXJyb3IoZmFsc2UsIHsgZGlzY3JFcnJvcjogdHlwZXNfMS5EaXNjckVycm9yLlRhZywgdGFnLCB0YWdOYW1lIH0pKTtcbiAgICAgICAgY3h0Lm9rKHZhbGlkKTtcbiAgICAgICAgZnVuY3Rpb24gdmFsaWRhdGVNYXBwaW5nKCkge1xuICAgICAgICAgICAgY29uc3QgbWFwcGluZyA9IGdldE1hcHBpbmcoKTtcbiAgICAgICAgICAgIGdlbi5pZihmYWxzZSk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHRhZ1ZhbHVlIGluIG1hcHBpbmcpIHtcbiAgICAgICAgICAgICAgICBnZW4uZWxzZUlmKCgwLCBjb2RlZ2VuXzEuXykgYCR7dGFnfSA9PT0gJHt0YWdWYWx1ZX1gKTtcbiAgICAgICAgICAgICAgICBnZW4uYXNzaWduKHZhbGlkLCBhcHBseVRhZ1NjaGVtYShtYXBwaW5nW3RhZ1ZhbHVlXSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZ2VuLmVsc2UoKTtcbiAgICAgICAgICAgIGN4dC5lcnJvcihmYWxzZSwgeyBkaXNjckVycm9yOiB0eXBlc18xLkRpc2NyRXJyb3IuTWFwcGluZywgdGFnLCB0YWdOYW1lIH0pO1xuICAgICAgICAgICAgZ2VuLmVuZElmKCk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gYXBwbHlUYWdTY2hlbWEoc2NoZW1hUHJvcCkge1xuICAgICAgICAgICAgY29uc3QgX3ZhbGlkID0gZ2VuLm5hbWUoXCJ2YWxpZFwiKTtcbiAgICAgICAgICAgIGNvbnN0IHNjaEN4dCA9IGN4dC5zdWJzY2hlbWEoeyBrZXl3b3JkOiBcIm9uZU9mXCIsIHNjaGVtYVByb3AgfSwgX3ZhbGlkKTtcbiAgICAgICAgICAgIGN4dC5tZXJnZUV2YWx1YXRlZChzY2hDeHQsIGNvZGVnZW5fMS5OYW1lKTtcbiAgICAgICAgICAgIHJldHVybiBfdmFsaWQ7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gZ2V0TWFwcGluZygpIHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIGNvbnN0IG9uZU9mTWFwcGluZyA9IHt9O1xuICAgICAgICAgICAgY29uc3QgdG9wUmVxdWlyZWQgPSBoYXNSZXF1aXJlZChwYXJlbnRTY2hlbWEpO1xuICAgICAgICAgICAgbGV0IHRhZ1JlcXVpcmVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb25lT2YubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgc2NoID0gb25lT2ZbaV07XG4gICAgICAgICAgICAgICAgaWYgKChzY2ggPT09IG51bGwgfHwgc2NoID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzY2guJHJlZikgJiYgISgwLCB1dGlsXzEuc2NoZW1hSGFzUnVsZXNCdXRSZWYpKHNjaCwgaXQuc2VsZi5SVUxFUykpIHtcbiAgICAgICAgICAgICAgICAgICAgc2NoID0gY29tcGlsZV8xLnJlc29sdmVSZWYuY2FsbChpdC5zZWxmLCBpdC5zY2hlbWFFbnYucm9vdCwgaXQuYmFzZUlkLCBzY2ggPT09IG51bGwgfHwgc2NoID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzY2guJHJlZik7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzY2ggaW5zdGFuY2VvZiBjb21waWxlXzEuU2NoZW1hRW52KVxuICAgICAgICAgICAgICAgICAgICAgICAgc2NoID0gc2NoLnNjaGVtYTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgcHJvcFNjaCA9IChfYSA9IHNjaCA9PT0gbnVsbCB8fCBzY2ggPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNjaC5wcm9wZXJ0aWVzKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2FbdGFnTmFtZV07XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBwcm9wU2NoICE9IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBkaXNjcmltaW5hdG9yOiBvbmVPZiBzdWJzY2hlbWFzIChvciByZWZlcmVuY2VkIHNjaGVtYXMpIG11c3QgaGF2ZSBcInByb3BlcnRpZXMvJHt0YWdOYW1lfVwiYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRhZ1JlcXVpcmVkID0gdGFnUmVxdWlyZWQgJiYgKHRvcFJlcXVpcmVkIHx8IGhhc1JlcXVpcmVkKHNjaCkpO1xuICAgICAgICAgICAgICAgIGFkZE1hcHBpbmdzKHByb3BTY2gsIGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCF0YWdSZXF1aXJlZClcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGRpc2NyaW1pbmF0b3I6IFwiJHt0YWdOYW1lfVwiIG11c3QgYmUgcmVxdWlyZWRgKTtcbiAgICAgICAgICAgIHJldHVybiBvbmVPZk1hcHBpbmc7XG4gICAgICAgICAgICBmdW5jdGlvbiBoYXNSZXF1aXJlZCh7IHJlcXVpcmVkIH0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gQXJyYXkuaXNBcnJheShyZXF1aXJlZCkgJiYgcmVxdWlyZWQuaW5jbHVkZXModGFnTmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBhZGRNYXBwaW5ncyhzY2gsIGkpIHtcbiAgICAgICAgICAgICAgICBpZiAoc2NoLmNvbnN0KSB7XG4gICAgICAgICAgICAgICAgICAgIGFkZE1hcHBpbmcoc2NoLmNvbnN0LCBpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoc2NoLmVudW0pIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCB0YWdWYWx1ZSBvZiBzY2guZW51bSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYWRkTWFwcGluZyh0YWdWYWx1ZSwgaSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgZGlzY3JpbWluYXRvcjogXCJwcm9wZXJ0aWVzLyR7dGFnTmFtZX1cIiBtdXN0IGhhdmUgXCJjb25zdFwiIG9yIFwiZW51bVwiYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gYWRkTWFwcGluZyh0YWdWYWx1ZSwgaSkge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdGFnVmFsdWUgIT0gXCJzdHJpbmdcIiB8fCB0YWdWYWx1ZSBpbiBvbmVPZk1hcHBpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBkaXNjcmltaW5hdG9yOiBcIiR7dGFnTmFtZX1cIiB2YWx1ZXMgbXVzdCBiZSB1bmlxdWUgc3RyaW5nc2ApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBvbmVPZk1hcHBpbmdbdGFnVmFsdWVdID0gaTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuTWlzc2luZ1JlZkVycm9yID0gZXhwb3J0cy5WYWxpZGF0aW9uRXJyb3IgPSBleHBvcnRzLkNvZGVHZW4gPSBleHBvcnRzLk5hbWUgPSBleHBvcnRzLm5pbCA9IGV4cG9ydHMuc3RyaW5naWZ5ID0gZXhwb3J0cy5zdHIgPSBleHBvcnRzLl8gPSBleHBvcnRzLktleXdvcmRDeHQgPSB2b2lkIDA7XG5jb25zdCBjb3JlXzEgPSByZXF1aXJlKFwiLi9jb3JlXCIpO1xuY29uc3QgZHJhZnQ3XzEgPSByZXF1aXJlKFwiLi92b2NhYnVsYXJpZXMvZHJhZnQ3XCIpO1xuY29uc3QgZGlzY3JpbWluYXRvcl8xID0gcmVxdWlyZShcIi4vdm9jYWJ1bGFyaWVzL2Rpc2NyaW1pbmF0b3JcIik7XG5jb25zdCBkcmFmdDdNZXRhU2NoZW1hID0gcmVxdWlyZShcIi4vcmVmcy9qc29uLXNjaGVtYS1kcmFmdC0wNy5qc29uXCIpO1xuY29uc3QgTUVUQV9TVVBQT1JUX0RBVEEgPSBbXCIvcHJvcGVydGllc1wiXTtcbmNvbnN0IE1FVEFfU0NIRU1BX0lEID0gXCJodHRwOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LTA3L3NjaGVtYVwiO1xuY2xhc3MgQWp2IGV4dGVuZHMgY29yZV8xLmRlZmF1bHQge1xuICAgIF9hZGRWb2NhYnVsYXJpZXMoKSB7XG4gICAgICAgIHN1cGVyLl9hZGRWb2NhYnVsYXJpZXMoKTtcbiAgICAgICAgZHJhZnQ3XzEuZGVmYXVsdC5mb3JFYWNoKCh2KSA9PiB0aGlzLmFkZFZvY2FidWxhcnkodikpO1xuICAgICAgICBpZiAodGhpcy5vcHRzLmRpc2NyaW1pbmF0b3IpXG4gICAgICAgICAgICB0aGlzLmFkZEtleXdvcmQoZGlzY3JpbWluYXRvcl8xLmRlZmF1bHQpO1xuICAgIH1cbiAgICBfYWRkRGVmYXVsdE1ldGFTY2hlbWEoKSB7XG4gICAgICAgIHN1cGVyLl9hZGREZWZhdWx0TWV0YVNjaGVtYSgpO1xuICAgICAgICBpZiAoIXRoaXMub3B0cy5tZXRhKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCBtZXRhU2NoZW1hID0gdGhpcy5vcHRzLiRkYXRhXG4gICAgICAgICAgICA/IHRoaXMuJGRhdGFNZXRhU2NoZW1hKGRyYWZ0N01ldGFTY2hlbWEsIE1FVEFfU1VQUE9SVF9EQVRBKVxuICAgICAgICAgICAgOiBkcmFmdDdNZXRhU2NoZW1hO1xuICAgICAgICB0aGlzLmFkZE1ldGFTY2hlbWEobWV0YVNjaGVtYSwgTUVUQV9TQ0hFTUFfSUQsIGZhbHNlKTtcbiAgICAgICAgdGhpcy5yZWZzW1wiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9zY2hlbWFcIl0gPSBNRVRBX1NDSEVNQV9JRDtcbiAgICB9XG4gICAgZGVmYXVsdE1ldGEoKSB7XG4gICAgICAgIHJldHVybiAodGhpcy5vcHRzLmRlZmF1bHRNZXRhID1cbiAgICAgICAgICAgIHN1cGVyLmRlZmF1bHRNZXRhKCkgfHwgKHRoaXMuZ2V0U2NoZW1hKE1FVEFfU0NIRU1BX0lEKSA/IE1FVEFfU0NIRU1BX0lEIDogdW5kZWZpbmVkKSk7XG4gICAgfVxufVxubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gQWp2O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gQWp2O1xudmFyIHZhbGlkYXRlXzEgPSByZXF1aXJlKFwiLi9jb21waWxlL3ZhbGlkYXRlXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiS2V5d29yZEN4dFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdmFsaWRhdGVfMS5LZXl3b3JkQ3h0OyB9IH0pO1xudmFyIGNvZGVnZW5fMSA9IHJlcXVpcmUoXCIuL2NvbXBpbGUvY29kZWdlblwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvZGVnZW5fMS5fOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic3RyXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjb2RlZ2VuXzEuc3RyOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic3RyaW5naWZ5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjb2RlZ2VuXzEuc3RyaW5naWZ5OyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibmlsXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjb2RlZ2VuXzEubmlsOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiTmFtZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29kZWdlbl8xLk5hbWU7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJDb2RlR2VuXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjb2RlZ2VuXzEuQ29kZUdlbjsgfSB9KTtcbnZhciB2YWxpZGF0aW9uX2Vycm9yXzEgPSByZXF1aXJlKFwiLi9ydW50aW1lL3ZhbGlkYXRpb25fZXJyb3JcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJWYWxpZGF0aW9uRXJyb3JcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHZhbGlkYXRpb25fZXJyb3JfMS5kZWZhdWx0OyB9IH0pO1xudmFyIHJlZl9lcnJvcl8xID0gcmVxdWlyZShcIi4vY29tcGlsZS9yZWZfZXJyb3JcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJNaXNzaW5nUmVmRXJyb3JcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlZl9lcnJvcl8xLmRlZmF1bHQ7IH0gfSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1hanYuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZm9ybWF0TGltaXREZWZpbml0aW9uID0gdm9pZCAwO1xuY29uc3QgYWp2XzEgPSByZXF1aXJlKFwiYWp2XCIpO1xuY29uc3QgY29kZWdlbl8xID0gcmVxdWlyZShcImFqdi9kaXN0L2NvbXBpbGUvY29kZWdlblwiKTtcbmNvbnN0IG9wcyA9IGNvZGVnZW5fMS5vcGVyYXRvcnM7XG5jb25zdCBLV0RzID0ge1xuICAgIGZvcm1hdE1heGltdW06IHsgb2tTdHI6IFwiPD1cIiwgb2s6IG9wcy5MVEUsIGZhaWw6IG9wcy5HVCB9LFxuICAgIGZvcm1hdE1pbmltdW06IHsgb2tTdHI6IFwiPj1cIiwgb2s6IG9wcy5HVEUsIGZhaWw6IG9wcy5MVCB9LFxuICAgIGZvcm1hdEV4Y2x1c2l2ZU1heGltdW06IHsgb2tTdHI6IFwiPFwiLCBvazogb3BzLkxULCBmYWlsOiBvcHMuR1RFIH0sXG4gICAgZm9ybWF0RXhjbHVzaXZlTWluaW11bTogeyBva1N0cjogXCI+XCIsIG9rOiBvcHMuR1QsIGZhaWw6IG9wcy5MVEUgfSxcbn07XG5jb25zdCBlcnJvciA9IHtcbiAgICBtZXNzYWdlOiAoeyBrZXl3b3JkLCBzY2hlbWFDb2RlIH0pID0+IGNvZGVnZW5fMS5zdHIgYHNob3VsZCBiZSAke0tXRHNba2V5d29yZF0ub2tTdHJ9ICR7c2NoZW1hQ29kZX1gLFxuICAgIHBhcmFtczogKHsga2V5d29yZCwgc2NoZW1hQ29kZSB9KSA9PiBjb2RlZ2VuXzEuXyBge2NvbXBhcmlzb246ICR7S1dEc1trZXl3b3JkXS5va1N0cn0sIGxpbWl0OiAke3NjaGVtYUNvZGV9fWAsXG59O1xuZXhwb3J0cy5mb3JtYXRMaW1pdERlZmluaXRpb24gPSB7XG4gICAga2V5d29yZDogT2JqZWN0LmtleXMoS1dEcyksXG4gICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICBzY2hlbWFUeXBlOiBcInN0cmluZ1wiLFxuICAgICRkYXRhOiB0cnVlLFxuICAgIGVycm9yLFxuICAgIGNvZGUoY3h0KSB7XG4gICAgICAgIGNvbnN0IHsgZ2VuLCBkYXRhLCBzY2hlbWFDb2RlLCBrZXl3b3JkLCBpdCB9ID0gY3h0O1xuICAgICAgICBjb25zdCB7IG9wdHMsIHNlbGYgfSA9IGl0O1xuICAgICAgICBpZiAoIW9wdHMudmFsaWRhdGVGb3JtYXRzKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCBmQ3h0ID0gbmV3IGFqdl8xLktleXdvcmRDeHQoaXQsIHNlbGYuUlVMRVMuYWxsLmZvcm1hdC5kZWZpbml0aW9uLCBcImZvcm1hdFwiKTtcbiAgICAgICAgaWYgKGZDeHQuJGRhdGEpXG4gICAgICAgICAgICB2YWxpZGF0ZSREYXRhRm9ybWF0KCk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHZhbGlkYXRlRm9ybWF0KCk7XG4gICAgICAgIGZ1bmN0aW9uIHZhbGlkYXRlJERhdGFGb3JtYXQoKSB7XG4gICAgICAgICAgICBjb25zdCBmbXRzID0gZ2VuLnNjb3BlVmFsdWUoXCJmb3JtYXRzXCIsIHtcbiAgICAgICAgICAgICAgICByZWY6IHNlbGYuZm9ybWF0cyxcbiAgICAgICAgICAgICAgICBjb2RlOiBvcHRzLmNvZGUuZm9ybWF0cyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3QgZm10ID0gZ2VuLmNvbnN0KFwiZm10XCIsIGNvZGVnZW5fMS5fIGAke2ZtdHN9WyR7ZkN4dC5zY2hlbWFDb2RlfV1gKTtcbiAgICAgICAgICAgIGN4dC5mYWlsJGRhdGEoY29kZWdlbl8xLm9yKGNvZGVnZW5fMS5fIGB0eXBlb2YgJHtmbXR9ICE9IFwib2JqZWN0XCJgLCBjb2RlZ2VuXzEuXyBgJHtmbXR9IGluc3RhbmNlb2YgUmVnRXhwYCwgY29kZWdlbl8xLl8gYHR5cGVvZiAke2ZtdH0uY29tcGFyZSAhPSBcImZ1bmN0aW9uXCJgLCBjb21wYXJlQ29kZShmbXQpKSk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gdmFsaWRhdGVGb3JtYXQoKSB7XG4gICAgICAgICAgICBjb25zdCBmb3JtYXQgPSBmQ3h0LnNjaGVtYTtcbiAgICAgICAgICAgIGNvbnN0IGZtdERlZiA9IHNlbGYuZm9ybWF0c1tmb3JtYXRdO1xuICAgICAgICAgICAgaWYgKCFmbXREZWYgfHwgZm10RGVmID09PSB0cnVlKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZm10RGVmICE9IFwib2JqZWN0XCIgfHxcbiAgICAgICAgICAgICAgICBmbXREZWYgaW5zdGFuY2VvZiBSZWdFeHAgfHxcbiAgICAgICAgICAgICAgICB0eXBlb2YgZm10RGVmLmNvbXBhcmUgIT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBcIiR7a2V5d29yZH1cIjogZm9ybWF0IFwiJHtmb3JtYXR9XCIgZG9lcyBub3QgZGVmaW5lIFwiY29tcGFyZVwiIGZ1bmN0aW9uYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBmbXQgPSBnZW4uc2NvcGVWYWx1ZShcImZvcm1hdHNcIiwge1xuICAgICAgICAgICAgICAgIGtleTogZm9ybWF0LFxuICAgICAgICAgICAgICAgIHJlZjogZm10RGVmLFxuICAgICAgICAgICAgICAgIGNvZGU6IG9wdHMuY29kZS5mb3JtYXRzID8gY29kZWdlbl8xLl8gYCR7b3B0cy5jb2RlLmZvcm1hdHN9JHtjb2RlZ2VuXzEuZ2V0UHJvcGVydHkoZm9ybWF0KX1gIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjeHQuZmFpbCRkYXRhKGNvbXBhcmVDb2RlKGZtdCkpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGNvbXBhcmVDb2RlKGZtdCkge1xuICAgICAgICAgICAgcmV0dXJuIGNvZGVnZW5fMS5fIGAke2ZtdH0uY29tcGFyZSgke2RhdGF9LCAke3NjaGVtYUNvZGV9KSAke0tXRHNba2V5d29yZF0uZmFpbH0gMGA7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIGRlcGVuZGVuY2llczogW1wiZm9ybWF0XCJdLFxufTtcbmNvbnN0IGZvcm1hdExpbWl0UGx1Z2luID0gKGFqdikgPT4ge1xuICAgIGFqdi5hZGRLZXl3b3JkKGV4cG9ydHMuZm9ybWF0TGltaXREZWZpbml0aW9uKTtcbiAgICByZXR1cm4gYWp2O1xufTtcbmV4cG9ydHMuZGVmYXVsdCA9IGZvcm1hdExpbWl0UGx1Z2luO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bGltaXQuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGZvcm1hdHNfMSA9IHJlcXVpcmUoXCIuL2Zvcm1hdHNcIik7XG5jb25zdCBsaW1pdF8xID0gcmVxdWlyZShcIi4vbGltaXRcIik7XG5jb25zdCBjb2RlZ2VuXzEgPSByZXF1aXJlKFwiYWp2L2Rpc3QvY29tcGlsZS9jb2RlZ2VuXCIpO1xuY29uc3QgZnVsbE5hbWUgPSBuZXcgY29kZWdlbl8xLk5hbWUoXCJmdWxsRm9ybWF0c1wiKTtcbmNvbnN0IGZhc3ROYW1lID0gbmV3IGNvZGVnZW5fMS5OYW1lKFwiZmFzdEZvcm1hdHNcIik7XG5jb25zdCBmb3JtYXRzUGx1Z2luID0gKGFqdiwgb3B0cyA9IHsga2V5d29yZHM6IHRydWUgfSkgPT4ge1xuICAgIGlmIChBcnJheS5pc0FycmF5KG9wdHMpKSB7XG4gICAgICAgIGFkZEZvcm1hdHMoYWp2LCBvcHRzLCBmb3JtYXRzXzEuZnVsbEZvcm1hdHMsIGZ1bGxOYW1lKTtcbiAgICAgICAgcmV0dXJuIGFqdjtcbiAgICB9XG4gICAgY29uc3QgW2Zvcm1hdHMsIGV4cG9ydE5hbWVdID0gb3B0cy5tb2RlID09PSBcImZhc3RcIiA/IFtmb3JtYXRzXzEuZmFzdEZvcm1hdHMsIGZhc3ROYW1lXSA6IFtmb3JtYXRzXzEuZnVsbEZvcm1hdHMsIGZ1bGxOYW1lXTtcbiAgICBjb25zdCBsaXN0ID0gb3B0cy5mb3JtYXRzIHx8IGZvcm1hdHNfMS5mb3JtYXROYW1lcztcbiAgICBhZGRGb3JtYXRzKGFqdiwgbGlzdCwgZm9ybWF0cywgZXhwb3J0TmFtZSk7XG4gICAgaWYgKG9wdHMua2V5d29yZHMpXG4gICAgICAgIGxpbWl0XzEuZGVmYXVsdChhanYpO1xuICAgIHJldHVybiBhanY7XG59O1xuZm9ybWF0c1BsdWdpbi5nZXQgPSAobmFtZSwgbW9kZSA9IFwiZnVsbFwiKSA9PiB7XG4gICAgY29uc3QgZm9ybWF0cyA9IG1vZGUgPT09IFwiZmFzdFwiID8gZm9ybWF0c18xLmZhc3RGb3JtYXRzIDogZm9ybWF0c18xLmZ1bGxGb3JtYXRzO1xuICAgIGNvbnN0IGYgPSBmb3JtYXRzW25hbWVdO1xuICAgIGlmICghZilcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGZvcm1hdCBcIiR7bmFtZX1cImApO1xuICAgIHJldHVybiBmO1xufTtcbmZ1bmN0aW9uIGFkZEZvcm1hdHMoYWp2LCBsaXN0LCBmcywgZXhwb3J0TmFtZSkge1xuICAgIHZhciBfYTtcbiAgICB2YXIgX2I7XG4gICAgKF9hID0gKF9iID0gYWp2Lm9wdHMuY29kZSkuZm9ybWF0cykgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogKF9iLmZvcm1hdHMgPSBjb2RlZ2VuXzEuXyBgcmVxdWlyZShcImFqdi1mb3JtYXRzL2Rpc3QvZm9ybWF0c1wiKS4ke2V4cG9ydE5hbWV9YCk7XG4gICAgZm9yIChjb25zdCBmIG9mIGxpc3QpXG4gICAgICAgIGFqdi5hZGRGb3JtYXQoZiwgZnNbZl0pO1xufVxubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gZm9ybWF0c1BsdWdpbjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZGVmYXVsdCA9IGZvcm1hdHNQbHVnaW47XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIihmdW5jdGlvbihyb290LCBmYWN0b3J5KSB7XG4gICAgaWYgKHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnICYmIG1vZHVsZS5leHBvcnRzKSB7XG4gICAgICAgIG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJvb3QubmVhcmxleSA9IGZhY3RvcnkoKTtcbiAgICB9XG59KHRoaXMsIGZ1bmN0aW9uKCkge1xuXG4gICAgZnVuY3Rpb24gUnVsZShuYW1lLCBzeW1ib2xzLCBwb3N0cHJvY2Vzcykge1xuICAgICAgICB0aGlzLmlkID0gKytSdWxlLmhpZ2hlc3RJZDtcbiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICAgICAgdGhpcy5zeW1ib2xzID0gc3ltYm9sczsgICAgICAgIC8vIGEgbGlzdCBvZiBsaXRlcmFsIHwgcmVnZXggY2xhc3MgfCBub250ZXJtaW5hbFxuICAgICAgICB0aGlzLnBvc3Rwcm9jZXNzID0gcG9zdHByb2Nlc3M7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBSdWxlLmhpZ2hlc3RJZCA9IDA7XG5cbiAgICBSdWxlLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKHdpdGhDdXJzb3JBdCkge1xuICAgICAgICB2YXIgc3ltYm9sU2VxdWVuY2UgPSAodHlwZW9mIHdpdGhDdXJzb3JBdCA9PT0gXCJ1bmRlZmluZWRcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB0aGlzLnN5bWJvbHMubWFwKGdldFN5bWJvbFNob3J0RGlzcGxheSkuam9pbignICcpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogKCAgIHRoaXMuc3ltYm9scy5zbGljZSgwLCB3aXRoQ3Vyc29yQXQpLm1hcChnZXRTeW1ib2xTaG9ydERpc3BsYXkpLmpvaW4oJyAnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBcIiDil48gXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgdGhpcy5zeW1ib2xzLnNsaWNlKHdpdGhDdXJzb3JBdCkubWFwKGdldFN5bWJvbFNob3J0RGlzcGxheSkuam9pbignICcpICAgICApO1xuICAgICAgICByZXR1cm4gdGhpcy5uYW1lICsgXCIg4oaSIFwiICsgc3ltYm9sU2VxdWVuY2U7XG4gICAgfVxuXG5cbiAgICAvLyBhIFN0YXRlIGlzIGEgcnVsZSBhdCBhIHBvc2l0aW9uIGZyb20gYSBnaXZlbiBzdGFydGluZyBwb2ludCBpbiB0aGUgaW5wdXQgc3RyZWFtIChyZWZlcmVuY2UpXG4gICAgZnVuY3Rpb24gU3RhdGUocnVsZSwgZG90LCByZWZlcmVuY2UsIHdhbnRlZEJ5KSB7XG4gICAgICAgIHRoaXMucnVsZSA9IHJ1bGU7XG4gICAgICAgIHRoaXMuZG90ID0gZG90O1xuICAgICAgICB0aGlzLnJlZmVyZW5jZSA9IHJlZmVyZW5jZTtcbiAgICAgICAgdGhpcy5kYXRhID0gW107XG4gICAgICAgIHRoaXMud2FudGVkQnkgPSB3YW50ZWRCeTtcbiAgICAgICAgdGhpcy5pc0NvbXBsZXRlID0gdGhpcy5kb3QgPT09IHJ1bGUuc3ltYm9scy5sZW5ndGg7XG4gICAgfVxuXG4gICAgU3RhdGUucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBcIntcIiArIHRoaXMucnVsZS50b1N0cmluZyh0aGlzLmRvdCkgKyBcIn0sIGZyb206IFwiICsgKHRoaXMucmVmZXJlbmNlIHx8IDApO1xuICAgIH07XG5cbiAgICBTdGF0ZS5wcm90b3R5cGUubmV4dFN0YXRlID0gZnVuY3Rpb24oY2hpbGQpIHtcbiAgICAgICAgdmFyIHN0YXRlID0gbmV3IFN0YXRlKHRoaXMucnVsZSwgdGhpcy5kb3QgKyAxLCB0aGlzLnJlZmVyZW5jZSwgdGhpcy53YW50ZWRCeSk7XG4gICAgICAgIHN0YXRlLmxlZnQgPSB0aGlzO1xuICAgICAgICBzdGF0ZS5yaWdodCA9IGNoaWxkO1xuICAgICAgICBpZiAoc3RhdGUuaXNDb21wbGV0ZSkge1xuICAgICAgICAgICAgc3RhdGUuZGF0YSA9IHN0YXRlLmJ1aWxkKCk7XG4gICAgICAgICAgICAvLyBIYXZpbmcgcmlnaHQgc2V0IGhlcmUgd2lsbCBwcmV2ZW50IHRoZSByaWdodCBzdGF0ZSBhbmQgaXRzIGNoaWxkcmVuXG4gICAgICAgICAgICAvLyBmb3JtIGJlaW5nIGdhcmJhZ2UgY29sbGVjdGVkXG4gICAgICAgICAgICBzdGF0ZS5yaWdodCA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3RhdGU7XG4gICAgfTtcblxuICAgIFN0YXRlLnByb3RvdHlwZS5idWlsZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgY2hpbGRyZW4gPSBbXTtcbiAgICAgICAgdmFyIG5vZGUgPSB0aGlzO1xuICAgICAgICBkbyB7XG4gICAgICAgICAgICBjaGlsZHJlbi5wdXNoKG5vZGUucmlnaHQuZGF0YSk7XG4gICAgICAgICAgICBub2RlID0gbm9kZS5sZWZ0O1xuICAgICAgICB9IHdoaWxlIChub2RlLmxlZnQpO1xuICAgICAgICBjaGlsZHJlbi5yZXZlcnNlKCk7XG4gICAgICAgIHJldHVybiBjaGlsZHJlbjtcbiAgICB9O1xuXG4gICAgU3RhdGUucHJvdG90eXBlLmZpbmlzaCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAodGhpcy5ydWxlLnBvc3Rwcm9jZXNzKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEgPSB0aGlzLnJ1bGUucG9zdHByb2Nlc3ModGhpcy5kYXRhLCB0aGlzLnJlZmVyZW5jZSwgUGFyc2VyLmZhaWwpO1xuICAgICAgICB9XG4gICAgfTtcblxuXG4gICAgZnVuY3Rpb24gQ29sdW1uKGdyYW1tYXIsIGluZGV4KSB7XG4gICAgICAgIHRoaXMuZ3JhbW1hciA9IGdyYW1tYXI7XG4gICAgICAgIHRoaXMuaW5kZXggPSBpbmRleDtcbiAgICAgICAgdGhpcy5zdGF0ZXMgPSBbXTtcbiAgICAgICAgdGhpcy53YW50cyA9IHt9OyAvLyBzdGF0ZXMgaW5kZXhlZCBieSB0aGUgbm9uLXRlcm1pbmFsIHRoZXkgZXhwZWN0XG4gICAgICAgIHRoaXMuc2Nhbm5hYmxlID0gW107IC8vIGxpc3Qgb2Ygc3RhdGVzIHRoYXQgZXhwZWN0IGEgdG9rZW5cbiAgICAgICAgdGhpcy5jb21wbGV0ZWQgPSB7fTsgLy8gc3RhdGVzIHRoYXQgYXJlIG51bGxhYmxlXG4gICAgfVxuXG5cbiAgICBDb2x1bW4ucHJvdG90eXBlLnByb2Nlc3MgPSBmdW5jdGlvbihuZXh0Q29sdW1uKSB7XG4gICAgICAgIHZhciBzdGF0ZXMgPSB0aGlzLnN0YXRlcztcbiAgICAgICAgdmFyIHdhbnRzID0gdGhpcy53YW50cztcbiAgICAgICAgdmFyIGNvbXBsZXRlZCA9IHRoaXMuY29tcGxldGVkO1xuXG4gICAgICAgIGZvciAodmFyIHcgPSAwOyB3IDwgc3RhdGVzLmxlbmd0aDsgdysrKSB7IC8vIG5iLiB3ZSBwdXNoKCkgZHVyaW5nIGl0ZXJhdGlvblxuICAgICAgICAgICAgdmFyIHN0YXRlID0gc3RhdGVzW3ddO1xuXG4gICAgICAgICAgICBpZiAoc3RhdGUuaXNDb21wbGV0ZSkge1xuICAgICAgICAgICAgICAgIHN0YXRlLmZpbmlzaCgpO1xuICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5kYXRhICE9PSBQYXJzZXIuZmFpbCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBjb21wbGV0ZVxuICAgICAgICAgICAgICAgICAgICB2YXIgd2FudGVkQnkgPSBzdGF0ZS53YW50ZWRCeTtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IHdhbnRlZEJ5Lmxlbmd0aDsgaS0tOyApIHsgLy8gdGhpcyBsaW5lIGlzIGhvdFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxlZnQgPSB3YW50ZWRCeVtpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29tcGxldGUobGVmdCwgc3RhdGUpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gc3BlY2lhbC1jYXNlIG51bGxhYmxlc1xuICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGUucmVmZXJlbmNlID09PSB0aGlzLmluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBtYWtlIHN1cmUgZnV0dXJlIHByZWRpY3RvcnMgb2YgdGhpcyBydWxlIGdldCBjb21wbGV0ZWQuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXhwID0gc3RhdGUucnVsZS5uYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgKHRoaXMuY29tcGxldGVkW2V4cF0gPSB0aGlzLmNvbXBsZXRlZFtleHBdIHx8IFtdKS5wdXNoKHN0YXRlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBxdWV1ZSBzY2FubmFibGUgc3RhdGVzXG4gICAgICAgICAgICAgICAgdmFyIGV4cCA9IHN0YXRlLnJ1bGUuc3ltYm9sc1tzdGF0ZS5kb3RdO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZXhwICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNjYW5uYWJsZS5wdXNoKHN0YXRlKTtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gcHJlZGljdFxuICAgICAgICAgICAgICAgIGlmICh3YW50c1tleHBdKSB7XG4gICAgICAgICAgICAgICAgICAgIHdhbnRzW2V4cF0ucHVzaChzdGF0ZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbXBsZXRlZC5oYXNPd25Qcm9wZXJ0eShleHApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbnVsbHMgPSBjb21wbGV0ZWRbZXhwXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVsbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmlnaHQgPSBudWxsc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbXBsZXRlKHN0YXRlLCByaWdodCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB3YW50c1tleHBdID0gW3N0YXRlXTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcmVkaWN0KGV4cCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgQ29sdW1uLnByb3RvdHlwZS5wcmVkaWN0ID0gZnVuY3Rpb24oZXhwKSB7XG4gICAgICAgIHZhciBydWxlcyA9IHRoaXMuZ3JhbW1hci5ieU5hbWVbZXhwXSB8fCBbXTtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJ1bGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgciA9IHJ1bGVzW2ldO1xuICAgICAgICAgICAgdmFyIHdhbnRlZEJ5ID0gdGhpcy53YW50c1tleHBdO1xuICAgICAgICAgICAgdmFyIHMgPSBuZXcgU3RhdGUociwgMCwgdGhpcy5pbmRleCwgd2FudGVkQnkpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZXMucHVzaChzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIENvbHVtbi5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbihsZWZ0LCByaWdodCkge1xuICAgICAgICB2YXIgY29weSA9IGxlZnQubmV4dFN0YXRlKHJpZ2h0KTtcbiAgICAgICAgdGhpcy5zdGF0ZXMucHVzaChjb3B5KTtcbiAgICB9XG5cblxuICAgIGZ1bmN0aW9uIEdyYW1tYXIocnVsZXMsIHN0YXJ0KSB7XG4gICAgICAgIHRoaXMucnVsZXMgPSBydWxlcztcbiAgICAgICAgdGhpcy5zdGFydCA9IHN0YXJ0IHx8IHRoaXMucnVsZXNbMF0ubmFtZTtcbiAgICAgICAgdmFyIGJ5TmFtZSA9IHRoaXMuYnlOYW1lID0ge307XG4gICAgICAgIHRoaXMucnVsZXMuZm9yRWFjaChmdW5jdGlvbihydWxlKSB7XG4gICAgICAgICAgICBpZiAoIWJ5TmFtZS5oYXNPd25Qcm9wZXJ0eShydWxlLm5hbWUpKSB7XG4gICAgICAgICAgICAgICAgYnlOYW1lW3J1bGUubmFtZV0gPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJ5TmFtZVtydWxlLm5hbWVdLnB1c2gocnVsZSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIFNvIHdlIGNhbiBhbGxvdyBwYXNzaW5nIChydWxlcywgc3RhcnQpIGRpcmVjdGx5IHRvIFBhcnNlciBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgICBHcmFtbWFyLmZyb21Db21waWxlZCA9IGZ1bmN0aW9uKHJ1bGVzLCBzdGFydCkge1xuICAgICAgICB2YXIgbGV4ZXIgPSBydWxlcy5MZXhlcjtcbiAgICAgICAgaWYgKHJ1bGVzLlBhcnNlclN0YXJ0KSB7XG4gICAgICAgICAgc3RhcnQgPSBydWxlcy5QYXJzZXJTdGFydDtcbiAgICAgICAgICBydWxlcyA9IHJ1bGVzLlBhcnNlclJ1bGVzO1xuICAgICAgICB9XG4gICAgICAgIHZhciBydWxlcyA9IHJ1bGVzLm1hcChmdW5jdGlvbiAocikgeyByZXR1cm4gKG5ldyBSdWxlKHIubmFtZSwgci5zeW1ib2xzLCByLnBvc3Rwcm9jZXNzKSk7IH0pO1xuICAgICAgICB2YXIgZyA9IG5ldyBHcmFtbWFyKHJ1bGVzLCBzdGFydCk7XG4gICAgICAgIGcubGV4ZXIgPSBsZXhlcjsgLy8gbmIuIHN0b3JpbmcgbGV4ZXIgb24gR3JhbW1hciBpcyBpZmZ5LCBidXQgdW5hdm9pZGFibGVcbiAgICAgICAgcmV0dXJuIGc7XG4gICAgfVxuXG5cbiAgICBmdW5jdGlvbiBTdHJlYW1MZXhlcigpIHtcbiAgICAgIHRoaXMucmVzZXQoXCJcIik7XG4gICAgfVxuXG4gICAgU3RyZWFtTGV4ZXIucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24oZGF0YSwgc3RhdGUpIHtcbiAgICAgICAgdGhpcy5idWZmZXIgPSBkYXRhO1xuICAgICAgICB0aGlzLmluZGV4ID0gMDtcbiAgICAgICAgdGhpcy5saW5lID0gc3RhdGUgPyBzdGF0ZS5saW5lIDogMTtcbiAgICAgICAgdGhpcy5sYXN0TGluZUJyZWFrID0gc3RhdGUgPyAtc3RhdGUuY29sIDogMDtcbiAgICB9XG5cbiAgICBTdHJlYW1MZXhlci5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAodGhpcy5pbmRleCA8IHRoaXMuYnVmZmVyLmxlbmd0aCkge1xuICAgICAgICAgICAgdmFyIGNoID0gdGhpcy5idWZmZXJbdGhpcy5pbmRleCsrXTtcbiAgICAgICAgICAgIGlmIChjaCA9PT0gJ1xcbicpIHtcbiAgICAgICAgICAgICAgdGhpcy5saW5lICs9IDE7XG4gICAgICAgICAgICAgIHRoaXMubGFzdExpbmVCcmVhayA9IHRoaXMuaW5kZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4ge3ZhbHVlOiBjaH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBTdHJlYW1MZXhlci5wcm90b3R5cGUuc2F2ZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbGluZTogdGhpcy5saW5lLFxuICAgICAgICBjb2w6IHRoaXMuaW5kZXggLSB0aGlzLmxhc3RMaW5lQnJlYWssXG4gICAgICB9XG4gICAgfVxuXG4gICAgU3RyZWFtTGV4ZXIucHJvdG90eXBlLmZvcm1hdEVycm9yID0gZnVuY3Rpb24odG9rZW4sIG1lc3NhZ2UpIHtcbiAgICAgICAgLy8gbmIuIHRoaXMgZ2V0cyBjYWxsZWQgYWZ0ZXIgY29uc3VtaW5nIHRoZSBvZmZlbmRpbmcgdG9rZW4sXG4gICAgICAgIC8vIHNvIHRoZSBjdWxwcml0IGlzIGluZGV4LTFcbiAgICAgICAgdmFyIGJ1ZmZlciA9IHRoaXMuYnVmZmVyO1xuICAgICAgICBpZiAodHlwZW9mIGJ1ZmZlciA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHZhciBsaW5lcyA9IGJ1ZmZlclxuICAgICAgICAgICAgICAgIC5zcGxpdChcIlxcblwiKVxuICAgICAgICAgICAgICAgIC5zbGljZShcbiAgICAgICAgICAgICAgICAgICAgTWF0aC5tYXgoMCwgdGhpcy5saW5lIC0gNSksIFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxpbmVcbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICB2YXIgbmV4dExpbmVCcmVhayA9IGJ1ZmZlci5pbmRleE9mKCdcXG4nLCB0aGlzLmluZGV4KTtcbiAgICAgICAgICAgIGlmIChuZXh0TGluZUJyZWFrID09PSAtMSkgbmV4dExpbmVCcmVhayA9IGJ1ZmZlci5sZW5ndGg7XG4gICAgICAgICAgICB2YXIgY29sID0gdGhpcy5pbmRleCAtIHRoaXMubGFzdExpbmVCcmVhaztcbiAgICAgICAgICAgIHZhciBsYXN0TGluZURpZ2l0cyA9IFN0cmluZyh0aGlzLmxpbmUpLmxlbmd0aDtcbiAgICAgICAgICAgIG1lc3NhZ2UgKz0gXCIgYXQgbGluZSBcIiArIHRoaXMubGluZSArIFwiIGNvbCBcIiArIGNvbCArIFwiOlxcblxcblwiO1xuICAgICAgICAgICAgbWVzc2FnZSArPSBsaW5lc1xuICAgICAgICAgICAgICAgIC5tYXAoZnVuY3Rpb24obGluZSwgaSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGFkKHRoaXMubGluZSAtIGxpbmVzLmxlbmd0aCArIGkgKyAxLCBsYXN0TGluZURpZ2l0cykgKyBcIiBcIiArIGxpbmU7XG4gICAgICAgICAgICAgICAgfSwgdGhpcylcbiAgICAgICAgICAgICAgICAuam9pbihcIlxcblwiKTtcbiAgICAgICAgICAgIG1lc3NhZ2UgKz0gXCJcXG5cIiArIHBhZChcIlwiLCBsYXN0TGluZURpZ2l0cyArIGNvbCkgKyBcIl5cXG5cIjtcbiAgICAgICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2UgKyBcIiBhdCBpbmRleCBcIiArICh0aGlzLmluZGV4IC0gMSk7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBwYWQobiwgbGVuZ3RoKSB7XG4gICAgICAgICAgICB2YXIgcyA9IFN0cmluZyhuKTtcbiAgICAgICAgICAgIHJldHVybiBBcnJheShsZW5ndGggLSBzLmxlbmd0aCArIDEpLmpvaW4oXCIgXCIpICsgcztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIFBhcnNlcihydWxlcywgc3RhcnQsIG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKHJ1bGVzIGluc3RhbmNlb2YgR3JhbW1hcikge1xuICAgICAgICAgICAgdmFyIGdyYW1tYXIgPSBydWxlcztcbiAgICAgICAgICAgIHZhciBvcHRpb25zID0gc3RhcnQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgZ3JhbW1hciA9IEdyYW1tYXIuZnJvbUNvbXBpbGVkKHJ1bGVzLCBzdGFydCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5ncmFtbWFyID0gZ3JhbW1hcjtcblxuICAgICAgICAvLyBSZWFkIG9wdGlvbnNcbiAgICAgICAgdGhpcy5vcHRpb25zID0ge1xuICAgICAgICAgICAga2VlcEhpc3Rvcnk6IGZhbHNlLFxuICAgICAgICAgICAgbGV4ZXI6IGdyYW1tYXIubGV4ZXIgfHwgbmV3IFN0cmVhbUxleGVyLFxuICAgICAgICB9O1xuICAgICAgICBmb3IgKHZhciBrZXkgaW4gKG9wdGlvbnMgfHwge30pKSB7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnNba2V5XSA9IG9wdGlvbnNba2V5XTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNldHVwIGxleGVyXG4gICAgICAgIHRoaXMubGV4ZXIgPSB0aGlzLm9wdGlvbnMubGV4ZXI7XG4gICAgICAgIHRoaXMubGV4ZXJTdGF0ZSA9IHVuZGVmaW5lZDtcblxuICAgICAgICAvLyBTZXR1cCBhIHRhYmxlXG4gICAgICAgIHZhciBjb2x1bW4gPSBuZXcgQ29sdW1uKGdyYW1tYXIsIDApO1xuICAgICAgICB2YXIgdGFibGUgPSB0aGlzLnRhYmxlID0gW2NvbHVtbl07XG5cbiAgICAgICAgLy8gSSBjb3VsZCBiZSBleHBlY3RpbmcgYW55dGhpbmcuXG4gICAgICAgIGNvbHVtbi53YW50c1tncmFtbWFyLnN0YXJ0XSA9IFtdO1xuICAgICAgICBjb2x1bW4ucHJlZGljdChncmFtbWFyLnN0YXJ0KTtcbiAgICAgICAgLy8gVE9ETyB3aGF0IGlmIHN0YXJ0IHJ1bGUgaXMgbnVsbGFibGU/XG4gICAgICAgIGNvbHVtbi5wcm9jZXNzKCk7XG4gICAgICAgIHRoaXMuY3VycmVudCA9IDA7IC8vIHRva2VuIGluZGV4XG4gICAgfVxuXG4gICAgLy8gY3JlYXRlIGEgcmVzZXJ2ZWQgdG9rZW4gZm9yIGluZGljYXRpbmcgYSBwYXJzZSBmYWlsXG4gICAgUGFyc2VyLmZhaWwgPSB7fTtcblxuICAgIFBhcnNlci5wcm90b3R5cGUuZmVlZCA9IGZ1bmN0aW9uKGNodW5rKSB7XG4gICAgICAgIHZhciBsZXhlciA9IHRoaXMubGV4ZXI7XG4gICAgICAgIGxleGVyLnJlc2V0KGNodW5rLCB0aGlzLmxleGVyU3RhdGUpO1xuXG4gICAgICAgIHZhciB0b2tlbjtcbiAgICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgdG9rZW4gPSBsZXhlci5uZXh0KCk7XG4gICAgICAgICAgICAgICAgaWYgKCF0b2tlbikge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgLy8gQ3JlYXRlIHRoZSBuZXh0IGNvbHVtbiBzbyB0aGF0IHRoZSBlcnJvciByZXBvcnRlclxuICAgICAgICAgICAgICAgIC8vIGNhbiBkaXNwbGF5IHRoZSBjb3JyZWN0bHkgcHJlZGljdGVkIHN0YXRlcy5cbiAgICAgICAgICAgICAgICB2YXIgbmV4dENvbHVtbiA9IG5ldyBDb2x1bW4odGhpcy5ncmFtbWFyLCB0aGlzLmN1cnJlbnQgKyAxKTtcbiAgICAgICAgICAgICAgICB0aGlzLnRhYmxlLnB1c2gobmV4dENvbHVtbik7XG4gICAgICAgICAgICAgICAgdmFyIGVyciA9IG5ldyBFcnJvcih0aGlzLnJlcG9ydExleGVyRXJyb3IoZSkpO1xuICAgICAgICAgICAgICAgIGVyci5vZmZzZXQgPSB0aGlzLmN1cnJlbnQ7XG4gICAgICAgICAgICAgICAgZXJyLnRva2VuID0gZS50b2tlbjtcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBXZSBhZGQgbmV3IHN0YXRlcyB0byB0YWJsZVtjdXJyZW50KzFdXG4gICAgICAgICAgICB2YXIgY29sdW1uID0gdGhpcy50YWJsZVt0aGlzLmN1cnJlbnRdO1xuXG4gICAgICAgICAgICAvLyBHQyB1bnVzZWQgc3RhdGVzXG4gICAgICAgICAgICBpZiAoIXRoaXMub3B0aW9ucy5rZWVwSGlzdG9yeSkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnRhYmxlW3RoaXMuY3VycmVudCAtIDFdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgbiA9IHRoaXMuY3VycmVudCArIDE7XG4gICAgICAgICAgICB2YXIgbmV4dENvbHVtbiA9IG5ldyBDb2x1bW4odGhpcy5ncmFtbWFyLCBuKTtcbiAgICAgICAgICAgIHRoaXMudGFibGUucHVzaChuZXh0Q29sdW1uKTtcblxuICAgICAgICAgICAgLy8gQWR2YW5jZSBhbGwgdG9rZW5zIHRoYXQgZXhwZWN0IHRoZSBzeW1ib2xcbiAgICAgICAgICAgIHZhciBsaXRlcmFsID0gdG9rZW4udGV4dCAhPT0gdW5kZWZpbmVkID8gdG9rZW4udGV4dCA6IHRva2VuLnZhbHVlO1xuICAgICAgICAgICAgdmFyIHZhbHVlID0gbGV4ZXIuY29uc3RydWN0b3IgPT09IFN0cmVhbUxleGVyID8gdG9rZW4udmFsdWUgOiB0b2tlbjtcbiAgICAgICAgICAgIHZhciBzY2FubmFibGUgPSBjb2x1bW4uc2Nhbm5hYmxlO1xuICAgICAgICAgICAgZm9yICh2YXIgdyA9IHNjYW5uYWJsZS5sZW5ndGg7IHctLTsgKSB7XG4gICAgICAgICAgICAgICAgdmFyIHN0YXRlID0gc2Nhbm5hYmxlW3ddO1xuICAgICAgICAgICAgICAgIHZhciBleHBlY3QgPSBzdGF0ZS5ydWxlLnN5bWJvbHNbc3RhdGUuZG90XTtcbiAgICAgICAgICAgICAgICAvLyBUcnkgdG8gY29uc3VtZSB0aGUgdG9rZW5cbiAgICAgICAgICAgICAgICAvLyBlaXRoZXIgcmVnZXggb3IgbGl0ZXJhbFxuICAgICAgICAgICAgICAgIGlmIChleHBlY3QudGVzdCA/IGV4cGVjdC50ZXN0KHZhbHVlKSA6XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdC50eXBlID8gZXhwZWN0LnR5cGUgPT09IHRva2VuLnR5cGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBleHBlY3QubGl0ZXJhbCA9PT0gbGl0ZXJhbCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBBZGQgaXRcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5leHQgPSBzdGF0ZS5uZXh0U3RhdGUoe2RhdGE6IHZhbHVlLCB0b2tlbjogdG9rZW4sIGlzVG9rZW46IHRydWUsIHJlZmVyZW5jZTogbiAtIDF9KTtcbiAgICAgICAgICAgICAgICAgICAgbmV4dENvbHVtbi5zdGF0ZXMucHVzaChuZXh0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIE5leHQsIGZvciBlYWNoIG9mIHRoZSBydWxlcywgd2UgZWl0aGVyXG4gICAgICAgICAgICAvLyAoYSkgY29tcGxldGUgaXQsIGFuZCB0cnkgdG8gc2VlIGlmIHRoZSByZWZlcmVuY2Ugcm93IGV4cGVjdGVkIHRoYXRcbiAgICAgICAgICAgIC8vICAgICBydWxlXG4gICAgICAgICAgICAvLyAoYikgcHJlZGljdCB0aGUgbmV4dCBub250ZXJtaW5hbCBpdCBleHBlY3RzIGJ5IGFkZGluZyB0aGF0XG4gICAgICAgICAgICAvLyAgICAgbm9udGVybWluYWwncyBzdGFydCBzdGF0ZVxuICAgICAgICAgICAgLy8gVG8gcHJldmVudCBkdXBsaWNhdGlvbiwgd2UgYWxzbyBrZWVwIHRyYWNrIG9mIHJ1bGVzIHdlIGhhdmUgYWxyZWFkeVxuICAgICAgICAgICAgLy8gYWRkZWRcblxuICAgICAgICAgICAgbmV4dENvbHVtbi5wcm9jZXNzKCk7XG5cbiAgICAgICAgICAgIC8vIElmIG5lZWRlZCwgdGhyb3cgYW4gZXJyb3I6XG4gICAgICAgICAgICBpZiAobmV4dENvbHVtbi5zdGF0ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgLy8gTm8gc3RhdGVzIGF0IGFsbCEgVGhpcyBpcyBub3QgZ29vZC5cbiAgICAgICAgICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKHRoaXMucmVwb3J0RXJyb3IodG9rZW4pKTtcbiAgICAgICAgICAgICAgICBlcnIub2Zmc2V0ID0gdGhpcy5jdXJyZW50O1xuICAgICAgICAgICAgICAgIGVyci50b2tlbiA9IHRva2VuO1xuICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gbWF5YmUgc2F2ZSBsZXhlciBzdGF0ZVxuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5rZWVwSGlzdG9yeSkge1xuICAgICAgICAgICAgICBjb2x1bW4ubGV4ZXJTdGF0ZSA9IGxleGVyLnNhdmUoKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnQrKztcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29sdW1uKSB7XG4gICAgICAgICAgdGhpcy5sZXhlclN0YXRlID0gbGV4ZXIuc2F2ZSgpXG4gICAgICAgIH1cblxuICAgICAgICAvLyBJbmNyZW1lbnRhbGx5IGtlZXAgdHJhY2sgb2YgcmVzdWx0c1xuICAgICAgICB0aGlzLnJlc3VsdHMgPSB0aGlzLmZpbmlzaCgpO1xuXG4gICAgICAgIC8vIEFsbG93IGNoYWluaW5nLCBmb3Igd2hhdGV2ZXIgaXQncyB3b3J0aFxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG4gICAgUGFyc2VyLnByb3RvdHlwZS5yZXBvcnRMZXhlckVycm9yID0gZnVuY3Rpb24obGV4ZXJFcnJvcikge1xuICAgICAgICB2YXIgdG9rZW5EaXNwbGF5LCBsZXhlck1lc3NhZ2U7XG4gICAgICAgIC8vIFBsYW5uaW5nIHRvIGFkZCBhIHRva2VuIHByb3BlcnR5IHRvIG1vbydzIHRocm93biBlcnJvclxuICAgICAgICAvLyBldmVuIG9uIGVycm9yaW5nIHRva2VucyB0byBiZSB1c2VkIGluIGVycm9yIGRpc3BsYXkgYmVsb3dcbiAgICAgICAgdmFyIHRva2VuID0gbGV4ZXJFcnJvci50b2tlbjtcbiAgICAgICAgaWYgKHRva2VuKSB7XG4gICAgICAgICAgICB0b2tlbkRpc3BsYXkgPSBcImlucHV0IFwiICsgSlNPTi5zdHJpbmdpZnkodG9rZW4udGV4dFswXSkgKyBcIiAobGV4ZXIgZXJyb3IpXCI7XG4gICAgICAgICAgICBsZXhlck1lc3NhZ2UgPSB0aGlzLmxleGVyLmZvcm1hdEVycm9yKHRva2VuLCBcIlN5bnRheCBlcnJvclwiKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRva2VuRGlzcGxheSA9IFwiaW5wdXQgKGxleGVyIGVycm9yKVwiO1xuICAgICAgICAgICAgbGV4ZXJNZXNzYWdlID0gbGV4ZXJFcnJvci5tZXNzYWdlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnJlcG9ydEVycm9yQ29tbW9uKGxleGVyTWVzc2FnZSwgdG9rZW5EaXNwbGF5KTtcbiAgICB9O1xuXG4gICAgUGFyc2VyLnByb3RvdHlwZS5yZXBvcnRFcnJvciA9IGZ1bmN0aW9uKHRva2VuKSB7XG4gICAgICAgIHZhciB0b2tlbkRpc3BsYXkgPSAodG9rZW4udHlwZSA/IHRva2VuLnR5cGUgKyBcIiB0b2tlbjogXCIgOiBcIlwiKSArIEpTT04uc3RyaW5naWZ5KHRva2VuLnZhbHVlICE9PSB1bmRlZmluZWQgPyB0b2tlbi52YWx1ZSA6IHRva2VuKTtcbiAgICAgICAgdmFyIGxleGVyTWVzc2FnZSA9IHRoaXMubGV4ZXIuZm9ybWF0RXJyb3IodG9rZW4sIFwiU3ludGF4IGVycm9yXCIpO1xuICAgICAgICByZXR1cm4gdGhpcy5yZXBvcnRFcnJvckNvbW1vbihsZXhlck1lc3NhZ2UsIHRva2VuRGlzcGxheSk7XG4gICAgfTtcblxuICAgIFBhcnNlci5wcm90b3R5cGUucmVwb3J0RXJyb3JDb21tb24gPSBmdW5jdGlvbihsZXhlck1lc3NhZ2UsIHRva2VuRGlzcGxheSkge1xuICAgICAgICB2YXIgbGluZXMgPSBbXTtcbiAgICAgICAgbGluZXMucHVzaChsZXhlck1lc3NhZ2UpO1xuICAgICAgICB2YXIgbGFzdENvbHVtbkluZGV4ID0gdGhpcy50YWJsZS5sZW5ndGggLSAyO1xuICAgICAgICB2YXIgbGFzdENvbHVtbiA9IHRoaXMudGFibGVbbGFzdENvbHVtbkluZGV4XTtcbiAgICAgICAgdmFyIGV4cGVjdGFudFN0YXRlcyA9IGxhc3RDb2x1bW4uc3RhdGVzXG4gICAgICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uKHN0YXRlKSB7XG4gICAgICAgICAgICAgICAgdmFyIG5leHRTeW1ib2wgPSBzdGF0ZS5ydWxlLnN5bWJvbHNbc3RhdGUuZG90XTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV4dFN5bWJvbCAmJiB0eXBlb2YgbmV4dFN5bWJvbCAhPT0gXCJzdHJpbmdcIjtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChleHBlY3RhbnRTdGF0ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBsaW5lcy5wdXNoKCdVbmV4cGVjdGVkICcgKyB0b2tlbkRpc3BsYXkgKyAnLiBJIGRpZCBub3QgZXhwZWN0IGFueSBtb3JlIGlucHV0LiBIZXJlIGlzIHRoZSBzdGF0ZSBvZiBteSBwYXJzZSB0YWJsZTpcXG4nKTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGxheVN0YXRlU3RhY2sobGFzdENvbHVtbi5zdGF0ZXMsIGxpbmVzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxpbmVzLnB1c2goJ1VuZXhwZWN0ZWQgJyArIHRva2VuRGlzcGxheSArICcuIEluc3RlYWQsIEkgd2FzIGV4cGVjdGluZyB0byBzZWUgb25lIG9mIHRoZSBmb2xsb3dpbmc6XFxuJyk7XG4gICAgICAgICAgICAvLyBEaXNwbGF5IGEgXCJzdGF0ZSBzdGFja1wiIGZvciBlYWNoIGV4cGVjdGFudCBzdGF0ZVxuICAgICAgICAgICAgLy8gLSB3aGljaCBzaG93cyB5b3UgaG93IHRoaXMgc3RhdGUgY2FtZSB0byBiZSwgc3RlcCBieSBzdGVwLlxuICAgICAgICAgICAgLy8gSWYgdGhlcmUgaXMgbW9yZSB0aGFuIG9uZSBkZXJpdmF0aW9uLCB3ZSBvbmx5IGRpc3BsYXkgdGhlIGZpcnN0IG9uZS5cbiAgICAgICAgICAgIHZhciBzdGF0ZVN0YWNrcyA9IGV4cGVjdGFudFN0YXRlc1xuICAgICAgICAgICAgICAgIC5tYXAoZnVuY3Rpb24oc3RhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYnVpbGRGaXJzdFN0YXRlU3RhY2soc3RhdGUsIFtdKSB8fCBbc3RhdGVdO1xuICAgICAgICAgICAgICAgIH0sIHRoaXMpO1xuICAgICAgICAgICAgLy8gRGlzcGxheSBlYWNoIHN0YXRlIHRoYXQgaXMgZXhwZWN0aW5nIGEgdGVybWluYWwgc3ltYm9sIG5leHQuXG4gICAgICAgICAgICBzdGF0ZVN0YWNrcy5mb3JFYWNoKGZ1bmN0aW9uKHN0YXRlU3RhY2spIHtcbiAgICAgICAgICAgICAgICB2YXIgc3RhdGUgPSBzdGF0ZVN0YWNrWzBdO1xuICAgICAgICAgICAgICAgIHZhciBuZXh0U3ltYm9sID0gc3RhdGUucnVsZS5zeW1ib2xzW3N0YXRlLmRvdF07XG4gICAgICAgICAgICAgICAgdmFyIHN5bWJvbERpc3BsYXkgPSB0aGlzLmdldFN5bWJvbERpc3BsYXkobmV4dFN5bWJvbCk7XG4gICAgICAgICAgICAgICAgbGluZXMucHVzaCgnQSAnICsgc3ltYm9sRGlzcGxheSArICcgYmFzZWQgb246Jyk7XG4gICAgICAgICAgICAgICAgdGhpcy5kaXNwbGF5U3RhdGVTdGFjayhzdGF0ZVN0YWNrLCBsaW5lcyk7XG4gICAgICAgICAgICB9LCB0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICBsaW5lcy5wdXNoKFwiXCIpO1xuICAgICAgICByZXR1cm4gbGluZXMuam9pbihcIlxcblwiKTtcbiAgICB9XG4gICAgXG4gICAgUGFyc2VyLnByb3RvdHlwZS5kaXNwbGF5U3RhdGVTdGFjayA9IGZ1bmN0aW9uKHN0YXRlU3RhY2ssIGxpbmVzKSB7XG4gICAgICAgIHZhciBsYXN0RGlzcGxheTtcbiAgICAgICAgdmFyIHNhbWVEaXNwbGF5Q291bnQgPSAwO1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHN0YXRlU3RhY2subGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgIHZhciBzdGF0ZSA9IHN0YXRlU3RhY2tbal07XG4gICAgICAgICAgICB2YXIgZGlzcGxheSA9IHN0YXRlLnJ1bGUudG9TdHJpbmcoc3RhdGUuZG90KTtcbiAgICAgICAgICAgIGlmIChkaXNwbGF5ID09PSBsYXN0RGlzcGxheSkge1xuICAgICAgICAgICAgICAgIHNhbWVEaXNwbGF5Q291bnQrKztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHNhbWVEaXNwbGF5Q291bnQgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGxpbmVzLnB1c2goJyAgICBeICcgKyBzYW1lRGlzcGxheUNvdW50ICsgJyBtb3JlIGxpbmVzIGlkZW50aWNhbCB0byB0aGlzJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHNhbWVEaXNwbGF5Q291bnQgPSAwO1xuICAgICAgICAgICAgICAgIGxpbmVzLnB1c2goJyAgICAnICsgZGlzcGxheSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsYXN0RGlzcGxheSA9IGRpc3BsYXk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgUGFyc2VyLnByb3RvdHlwZS5nZXRTeW1ib2xEaXNwbGF5ID0gZnVuY3Rpb24oc3ltYm9sKSB7XG4gICAgICAgIHJldHVybiBnZXRTeW1ib2xMb25nRGlzcGxheShzeW1ib2wpO1xuICAgIH07XG5cbiAgICAvKlxuICAgIEJ1aWxkcyBhIHRoZSBmaXJzdCBzdGF0ZSBzdGFjay4gWW91IGNhbiB0aGluayBvZiBhIHN0YXRlIHN0YWNrIGFzIHRoZSBjYWxsIHN0YWNrXG4gICAgb2YgdGhlIHJlY3Vyc2l2ZS1kZXNjZW50IHBhcnNlciB3aGljaCB0aGUgTmVhcmxleSBwYXJzZSBhbGdvcml0aG0gc2ltdWxhdGVzLlxuICAgIEEgc3RhdGUgc3RhY2sgaXMgcmVwcmVzZW50ZWQgYXMgYW4gYXJyYXkgb2Ygc3RhdGUgb2JqZWN0cy4gV2l0aGluIGFcbiAgICBzdGF0ZSBzdGFjaywgdGhlIGZpcnN0IGl0ZW0gb2YgdGhlIGFycmF5IHdpbGwgYmUgdGhlIHN0YXJ0aW5nXG4gICAgc3RhdGUsIHdpdGggZWFjaCBzdWNjZXNzaXZlIGl0ZW0gaW4gdGhlIGFycmF5IGdvaW5nIGZ1cnRoZXIgYmFjayBpbnRvIGhpc3RvcnkuXG5cbiAgICBUaGlzIGZ1bmN0aW9uIG5lZWRzIHRvIGJlIGdpdmVuIGEgc3RhcnRpbmcgc3RhdGUgYW5kIGFuIGVtcHR5IGFycmF5IHJlcHJlc2VudGluZ1xuICAgIHRoZSB2aXNpdGVkIHN0YXRlcywgYW5kIGl0IHJldHVybnMgYW4gc2luZ2xlIHN0YXRlIHN0YWNrLlxuXG4gICAgKi9cbiAgICBQYXJzZXIucHJvdG90eXBlLmJ1aWxkRmlyc3RTdGF0ZVN0YWNrID0gZnVuY3Rpb24oc3RhdGUsIHZpc2l0ZWQpIHtcbiAgICAgICAgaWYgKHZpc2l0ZWQuaW5kZXhPZihzdGF0ZSkgIT09IC0xKSB7XG4gICAgICAgICAgICAvLyBGb3VuZCBjeWNsZSwgcmV0dXJuIG51bGxcbiAgICAgICAgICAgIC8vIHRvIGVsaW1pbmF0ZSB0aGlzIHBhdGggZnJvbSB0aGUgcmVzdWx0cywgYmVjYXVzZVxuICAgICAgICAgICAgLy8gd2UgZG9uJ3Qga25vdyBob3cgdG8gZGlzcGxheSBpdCBtZWFuaW5nZnVsbHlcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdGF0ZS53YW50ZWRCeS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBbc3RhdGVdO1xuICAgICAgICB9XG4gICAgICAgIHZhciBwcmV2U3RhdGUgPSBzdGF0ZS53YW50ZWRCeVswXTtcbiAgICAgICAgdmFyIGNoaWxkVmlzaXRlZCA9IFtzdGF0ZV0uY29uY2F0KHZpc2l0ZWQpO1xuICAgICAgICB2YXIgY2hpbGRSZXN1bHQgPSB0aGlzLmJ1aWxkRmlyc3RTdGF0ZVN0YWNrKHByZXZTdGF0ZSwgY2hpbGRWaXNpdGVkKTtcbiAgICAgICAgaWYgKGNoaWxkUmVzdWx0ID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW3N0YXRlXS5jb25jYXQoY2hpbGRSZXN1bHQpO1xuICAgIH07XG5cbiAgICBQYXJzZXIucHJvdG90eXBlLnNhdmUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGNvbHVtbiA9IHRoaXMudGFibGVbdGhpcy5jdXJyZW50XTtcbiAgICAgICAgY29sdW1uLmxleGVyU3RhdGUgPSB0aGlzLmxleGVyU3RhdGU7XG4gICAgICAgIHJldHVybiBjb2x1bW47XG4gICAgfTtcblxuICAgIFBhcnNlci5wcm90b3R5cGUucmVzdG9yZSA9IGZ1bmN0aW9uKGNvbHVtbikge1xuICAgICAgICB2YXIgaW5kZXggPSBjb2x1bW4uaW5kZXg7XG4gICAgICAgIHRoaXMuY3VycmVudCA9IGluZGV4O1xuICAgICAgICB0aGlzLnRhYmxlW2luZGV4XSA9IGNvbHVtbjtcbiAgICAgICAgdGhpcy50YWJsZS5zcGxpY2UoaW5kZXggKyAxKTtcbiAgICAgICAgdGhpcy5sZXhlclN0YXRlID0gY29sdW1uLmxleGVyU3RhdGU7XG5cbiAgICAgICAgLy8gSW5jcmVtZW50YWxseSBrZWVwIHRyYWNrIG9mIHJlc3VsdHNcbiAgICAgICAgdGhpcy5yZXN1bHRzID0gdGhpcy5maW5pc2goKTtcbiAgICB9O1xuXG4gICAgLy8gbmIuIGRlcHJlY2F0ZWQ6IHVzZSBzYXZlL3Jlc3RvcmUgaW5zdGVhZCFcbiAgICBQYXJzZXIucHJvdG90eXBlLnJld2luZCA9IGZ1bmN0aW9uKGluZGV4KSB7XG4gICAgICAgIGlmICghdGhpcy5vcHRpb25zLmtlZXBIaXN0b3J5KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3NldCBvcHRpb24gYGtlZXBIaXN0b3J5YCB0byBlbmFibGUgcmV3aW5kaW5nJylcbiAgICAgICAgfVxuICAgICAgICAvLyBuYi4gcmVjYWxsIGNvbHVtbiAodGFibGUpIGluZGljaWVzIGZhbGwgYmV0d2VlbiB0b2tlbiBpbmRpY2llcy5cbiAgICAgICAgLy8gICAgICAgIGNvbCAwICAgLS0gICB0b2tlbiAwICAgLS0gICBjb2wgMVxuICAgICAgICB0aGlzLnJlc3RvcmUodGhpcy50YWJsZVtpbmRleF0pO1xuICAgIH07XG5cbiAgICBQYXJzZXIucHJvdG90eXBlLmZpbmlzaCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAvLyBSZXR1cm4gdGhlIHBvc3NpYmxlIHBhcnNpbmdzXG4gICAgICAgIHZhciBjb25zaWRlcmF0aW9ucyA9IFtdO1xuICAgICAgICB2YXIgc3RhcnQgPSB0aGlzLmdyYW1tYXIuc3RhcnQ7XG4gICAgICAgIHZhciBjb2x1bW4gPSB0aGlzLnRhYmxlW3RoaXMudGFibGUubGVuZ3RoIC0gMV1cbiAgICAgICAgY29sdW1uLnN0YXRlcy5mb3JFYWNoKGZ1bmN0aW9uICh0KSB7XG4gICAgICAgICAgICBpZiAodC5ydWxlLm5hbWUgPT09IHN0YXJ0XG4gICAgICAgICAgICAgICAgICAgICYmIHQuZG90ID09PSB0LnJ1bGUuc3ltYm9scy5sZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgJiYgdC5yZWZlcmVuY2UgPT09IDBcbiAgICAgICAgICAgICAgICAgICAgJiYgdC5kYXRhICE9PSBQYXJzZXIuZmFpbCkge1xuICAgICAgICAgICAgICAgIGNvbnNpZGVyYXRpb25zLnB1c2godCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gY29uc2lkZXJhdGlvbnMubWFwKGZ1bmN0aW9uKGMpIHtyZXR1cm4gYy5kYXRhOyB9KTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gZ2V0U3ltYm9sTG9uZ0Rpc3BsYXkoc3ltYm9sKSB7XG4gICAgICAgIHZhciB0eXBlID0gdHlwZW9mIHN5bWJvbDtcbiAgICAgICAgaWYgKHR5cGUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBzeW1ib2w7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgaWYgKHN5bWJvbC5saXRlcmFsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHN5bWJvbC5saXRlcmFsKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc3ltYm9sIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdjaGFyYWN0ZXIgbWF0Y2hpbmcgJyArIHN5bWJvbDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc3ltYm9sLnR5cGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3ltYm9sLnR5cGUgKyAnIHRva2VuJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc3ltYm9sLnRlc3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3Rva2VuIG1hdGNoaW5nICcgKyBTdHJpbmcoc3ltYm9sLnRlc3QpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gc3ltYm9sIHR5cGU6ICcgKyBzeW1ib2wpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0U3ltYm9sU2hvcnREaXNwbGF5KHN5bWJvbCkge1xuICAgICAgICB2YXIgdHlwZSA9IHR5cGVvZiBzeW1ib2w7XG4gICAgICAgIGlmICh0eXBlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gc3ltYm9sO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgIGlmIChzeW1ib2wubGl0ZXJhbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShzeW1ib2wubGl0ZXJhbCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHN5bWJvbCBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBzeW1ib2wudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc3ltYm9sLnR5cGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJyUnICsgc3ltYm9sLnR5cGU7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHN5bWJvbC50ZXN0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICc8JyArIFN0cmluZyhzeW1ib2wudGVzdCkgKyAnPic7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5rbm93biBzeW1ib2wgdHlwZTogJyArIHN5bWJvbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBQYXJzZXI6IFBhcnNlcixcbiAgICAgICAgR3JhbW1hcjogR3JhbW1hcixcbiAgICAgICAgUnVsZTogUnVsZSxcbiAgICB9O1xuXG59KSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuLy8gR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgbmVhcmxleSwgdmVyc2lvbiAyLjIwLjFcbi8vIGh0dHA6Ly9naXRodWIuY29tL0hhcmRtYXRoMTIzL25lYXJsZXlcbi8vIEJ5cGFzc2VzIFRTNjEzMy4gQWxsb3cgZGVjbGFyZWQgYnV0IHVudXNlZCBmdW5jdGlvbnMuXG4vLyBAdHMtaWdub3JlXG5mdW5jdGlvbiBpZChkKSB7IHJldHVybiBkWzBdOyB9XG5jb25zdCBkZWVwRmxhdHRlbiA9IChhcnIpID0+IFtdLmNvbmNhdCguLi5hcnIubWFwKCh2KSA9PiAoQXJyYXkuaXNBcnJheSh2KSA/IGRlZXBGbGF0dGVuKHYpIDogdikpKTtcbmZ1bmN0aW9uIGZsYXRfc3RyaW5nKGQpIHtcbiAgICBpZiAoZCkge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShkKSlcbiAgICAgICAgICAgIHJldHVybiBkZWVwRmxhdHRlbihkKS5qb2luKFwiXCIpO1xuICAgICAgICByZXR1cm4gZDtcbiAgICB9XG4gICAgcmV0dXJuIFwiXCI7XG59XG47XG47XG47XG47XG5jb25zdCBncmFtbWFyID0ge1xuICAgIExleGVyOiB1bmRlZmluZWQsXG4gICAgUGFyc2VyUnVsZXM6IFtcbiAgICAgICAgeyBcIm5hbWVcIjogXCJSZXZlcnNlX3BhdGhcIiwgXCJzeW1ib2xzXCI6IFtcIlBhdGhcIl0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJSZXZlcnNlX3BhdGgkc3RyaW5nJDFcIiwgXCJzeW1ib2xzXCI6IFt7IFwibGl0ZXJhbFwiOiBcIjxcIiB9LCB7IFwibGl0ZXJhbFwiOiBcIj5cIiB9XSwgXCJwb3N0cHJvY2Vzc1wiOiAoZCkgPT4gZC5qb2luKCcnKSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIlJldmVyc2VfcGF0aFwiLCBcInN5bWJvbHNcIjogW1wiUmV2ZXJzZV9wYXRoJHN0cmluZyQxXCJdIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiRm9yd2FyZF9wYXRoJHN1YmV4cHJlc3Npb24kMSRzdWJleHByZXNzaW9uJDFcIiwgXCJzeW1ib2xzXCI6IFt7IFwibGl0ZXJhbFwiOiBcIjxcIiB9LCAvW3BQXS8sIC9bb09dLywgL1tzU10vLCAvW3RUXS8sIC9bbU1dLywgL1thQV0vLCAvW3NTXS8sIC9bdFRdLywgL1tlRV0vLCAvW3JSXS8sIHsgXCJsaXRlcmFsXCI6IFwiQFwiIH1dLCBcInBvc3Rwcm9jZXNzXCI6IGZ1bmN0aW9uIChkKSB7IHJldHVybiBkLmpvaW4oXCJcIik7IH0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJGb3J3YXJkX3BhdGgkc3ViZXhwcmVzc2lvbiQxXCIsIFwic3ltYm9sc1wiOiBbXCJGb3J3YXJkX3BhdGgkc3ViZXhwcmVzc2lvbiQxJHN1YmV4cHJlc3Npb24kMVwiLCBcIkRvbWFpblwiLCB7IFwibGl0ZXJhbFwiOiBcIj5cIiB9XSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIkZvcndhcmRfcGF0aFwiLCBcInN5bWJvbHNcIjogW1wiRm9yd2FyZF9wYXRoJHN1YmV4cHJlc3Npb24kMVwiXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIkZvcndhcmRfcGF0aCRzdWJleHByZXNzaW9uJDJcIiwgXCJzeW1ib2xzXCI6IFt7IFwibGl0ZXJhbFwiOiBcIjxcIiB9LCAvW3BQXS8sIC9bb09dLywgL1tzU10vLCAvW3RUXS8sIC9bbU1dLywgL1thQV0vLCAvW3NTXS8sIC9bdFRdLywgL1tlRV0vLCAvW3JSXS8sIHsgXCJsaXRlcmFsXCI6IFwiPlwiIH1dLCBcInBvc3Rwcm9jZXNzXCI6IGZ1bmN0aW9uIChkKSB7IHJldHVybiBkLmpvaW4oXCJcIik7IH0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJGb3J3YXJkX3BhdGhcIiwgXCJzeW1ib2xzXCI6IFtcIkZvcndhcmRfcGF0aCRzdWJleHByZXNzaW9uJDJcIl0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJGb3J3YXJkX3BhdGhcIiwgXCJzeW1ib2xzXCI6IFtcIlBhdGhcIl0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJQYXRoJGVibmYkMSRzdWJleHByZXNzaW9uJDFcIiwgXCJzeW1ib2xzXCI6IFtcIkFfZF9sXCIsIHsgXCJsaXRlcmFsXCI6IFwiOlwiIH1dIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiUGF0aCRlYm5mJDFcIiwgXCJzeW1ib2xzXCI6IFtcIlBhdGgkZWJuZiQxJHN1YmV4cHJlc3Npb24kMVwiXSwgXCJwb3N0cHJvY2Vzc1wiOiBpZCB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIlBhdGgkZWJuZiQxXCIsIFwic3ltYm9sc1wiOiBbXSwgXCJwb3N0cHJvY2Vzc1wiOiAoKSA9PiBudWxsIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiUGF0aFwiLCBcInN5bWJvbHNcIjogW3sgXCJsaXRlcmFsXCI6IFwiPFwiIH0sIFwiUGF0aCRlYm5mJDFcIiwgXCJNYWlsYm94XCIsIHsgXCJsaXRlcmFsXCI6IFwiPlwiIH1dIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiQV9kX2wkZWJuZiQxXCIsIFwic3ltYm9sc1wiOiBbXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIkFfZF9sJGVibmYkMSRzdWJleHByZXNzaW9uJDFcIiwgXCJzeW1ib2xzXCI6IFt7IFwibGl0ZXJhbFwiOiBcIixcIiB9LCBcIkF0X2RvbWFpblwiXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIkFfZF9sJGVibmYkMVwiLCBcInN5bWJvbHNcIjogW1wiQV9kX2wkZWJuZiQxXCIsIFwiQV9kX2wkZWJuZiQxJHN1YmV4cHJlc3Npb24kMVwiXSwgXCJwb3N0cHJvY2Vzc1wiOiAoZCkgPT4gZFswXS5jb25jYXQoW2RbMV1dKSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIkFfZF9sXCIsIFwic3ltYm9sc1wiOiBbXCJBdF9kb21haW5cIiwgXCJBX2RfbCRlYm5mJDFcIl0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJBdF9kb21haW5cIiwgXCJzeW1ib2xzXCI6IFt7IFwibGl0ZXJhbFwiOiBcIkBcIiB9LCBcIkRvbWFpblwiXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIkRvbWFpbiRlYm5mJDFcIiwgXCJzeW1ib2xzXCI6IFtdIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiRG9tYWluJGVibmYkMSRzdWJleHByZXNzaW9uJDFcIiwgXCJzeW1ib2xzXCI6IFt7IFwibGl0ZXJhbFwiOiBcIi5cIiB9LCBcInN1Yl9kb21haW5cIl0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJEb21haW4kZWJuZiQxXCIsIFwic3ltYm9sc1wiOiBbXCJEb21haW4kZWJuZiQxXCIsIFwiRG9tYWluJGVibmYkMSRzdWJleHByZXNzaW9uJDFcIl0sIFwicG9zdHByb2Nlc3NcIjogKGQpID0+IGRbMF0uY29uY2F0KFtkWzFdXSkgfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJEb21haW5cIiwgXCJzeW1ib2xzXCI6IFtcInN1Yl9kb21haW5cIiwgXCJEb21haW4kZWJuZiQxXCJdIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwic3ViX2RvbWFpblwiLCBcInN5bWJvbHNcIjogW1wiVV9sYWJlbFwiXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIkxldF9kaWdcIiwgXCJzeW1ib2xzXCI6IFtcIkFMUEhBX0RJR0lUXCJdLCBcInBvc3Rwcm9jZXNzXCI6IGlkIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiTGRoX3N0ciRlYm5mJDFcIiwgXCJzeW1ib2xzXCI6IFtdIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiTGRoX3N0ciRlYm5mJDFcIiwgXCJzeW1ib2xzXCI6IFtcIkxkaF9zdHIkZWJuZiQxXCIsIFwiQUxQSEFfRElHX0RBU0hcIl0sIFwicG9zdHByb2Nlc3NcIjogKGQpID0+IGRbMF0uY29uY2F0KFtkWzFdXSkgfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJMZGhfc3RyXCIsIFwic3ltYm9sc1wiOiBbXCJMZGhfc3RyJGVibmYkMVwiLCBcIkxldF9kaWdcIl0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJVX0xldF9kaWdcIiwgXCJzeW1ib2xzXCI6IFtcIkFMUEhBX0RJR0lUX1VcIl0sIFwicG9zdHByb2Nlc3NcIjogaWQgfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJVX0xkaF9zdHIkZWJuZiQxXCIsIFwic3ltYm9sc1wiOiBbXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIlVfTGRoX3N0ciRlYm5mJDFcIiwgXCJzeW1ib2xzXCI6IFtcIlVfTGRoX3N0ciRlYm5mJDFcIiwgXCJBTFBIQV9ESUdfREFTSF9VXCJdLCBcInBvc3Rwcm9jZXNzXCI6IChkKSA9PiBkWzBdLmNvbmNhdChbZFsxXV0pIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiVV9MZGhfc3RyXCIsIFwic3ltYm9sc1wiOiBbXCJVX0xkaF9zdHIkZWJuZiQxXCIsIFwiVV9MZXRfZGlnXCJdIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiVV9sYWJlbCRlYm5mJDEkc3ViZXhwcmVzc2lvbiQxXCIsIFwic3ltYm9sc1wiOiBbXCJVX0xkaF9zdHJcIl0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJVX2xhYmVsJGVibmYkMVwiLCBcInN5bWJvbHNcIjogW1wiVV9sYWJlbCRlYm5mJDEkc3ViZXhwcmVzc2lvbiQxXCJdLCBcInBvc3Rwcm9jZXNzXCI6IGlkIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiVV9sYWJlbCRlYm5mJDFcIiwgXCJzeW1ib2xzXCI6IFtdLCBcInBvc3Rwcm9jZXNzXCI6ICgpID0+IG51bGwgfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJVX2xhYmVsXCIsIFwic3ltYm9sc1wiOiBbXCJVX0xldF9kaWdcIiwgXCJVX2xhYmVsJGVibmYkMVwiXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcImFkZHJlc3NfbGl0ZXJhbCRzdWJleHByZXNzaW9uJDFcIiwgXCJzeW1ib2xzXCI6IFtcIklQdjRfYWRkcmVzc19saXRlcmFsXCJdIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiYWRkcmVzc19saXRlcmFsJHN1YmV4cHJlc3Npb24kMVwiLCBcInN5bWJvbHNcIjogW1wiSVB2Nl9hZGRyZXNzX2xpdGVyYWxcIl0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJhZGRyZXNzX2xpdGVyYWwkc3ViZXhwcmVzc2lvbiQxXCIsIFwic3ltYm9sc1wiOiBbXCJHZW5lcmFsX2FkZHJlc3NfbGl0ZXJhbFwiXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcImFkZHJlc3NfbGl0ZXJhbFwiLCBcInN5bWJvbHNcIjogW3sgXCJsaXRlcmFsXCI6IFwiW1wiIH0sIFwiYWRkcmVzc19saXRlcmFsJHN1YmV4cHJlc3Npb24kMVwiLCB7IFwibGl0ZXJhbFwiOiBcIl1cIiB9XSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIm5vbl9sb2NhbF9wYXJ0XCIsIFwic3ltYm9sc1wiOiBbXCJEb21haW5cIl0sIFwicG9zdHByb2Nlc3NcIjogZnVuY3Rpb24gKGQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBEb21haW5OYW1lOiBmbGF0X3N0cmluZyhkWzBdKSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIm5vbl9sb2NhbF9wYXJ0XCIsIFwic3ltYm9sc1wiOiBbXCJhZGRyZXNzX2xpdGVyYWxcIl0sIFwicG9zdHByb2Nlc3NcIjogZnVuY3Rpb24gKGQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBBZGRyZXNzTGl0ZXJhbDogZmxhdF9zdHJpbmcoZFswXSkgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJNYWlsYm94XCIsIFwic3ltYm9sc1wiOiBbXCJMb2NhbF9wYXJ0XCIsIHsgXCJsaXRlcmFsXCI6IFwiQFwiIH0sIFwibm9uX2xvY2FsX3BhcnRcIl0sIFwicG9zdHByb2Nlc3NcIjogZnVuY3Rpb24gKGQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBsb2NhbFBhcnQ6IGZsYXRfc3RyaW5nKGRbMF0pLCBkb21haW5QYXJ0OiBmbGF0X3N0cmluZyhkWzJdKSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIkxvY2FsX3BhcnRcIiwgXCJzeW1ib2xzXCI6IFtcIkRvdF9zdHJpbmdcIl0sIFwicG9zdHByb2Nlc3NcIjogZnVuY3Rpb24gKGQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBEb3RTdHJpbmc6IGZsYXRfc3RyaW5nKGRbMF0pIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiTG9jYWxfcGFydFwiLCBcInN5bWJvbHNcIjogW1wiUXVvdGVkX3N0cmluZ1wiXSwgXCJwb3N0cHJvY2Vzc1wiOiBmdW5jdGlvbiAoZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7IFF1b3RlZFN0cmluZzogZmxhdF9zdHJpbmcoZFswXSkgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJEb3Rfc3RyaW5nJGVibmYkMVwiLCBcInN5bWJvbHNcIjogW10gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJEb3Rfc3RyaW5nJGVibmYkMSRzdWJleHByZXNzaW9uJDFcIiwgXCJzeW1ib2xzXCI6IFt7IFwibGl0ZXJhbFwiOiBcIi5cIiB9LCBcIkF0b21cIl0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJEb3Rfc3RyaW5nJGVibmYkMVwiLCBcInN5bWJvbHNcIjogW1wiRG90X3N0cmluZyRlYm5mJDFcIiwgXCJEb3Rfc3RyaW5nJGVibmYkMSRzdWJleHByZXNzaW9uJDFcIl0sIFwicG9zdHByb2Nlc3NcIjogKGQpID0+IGRbMF0uY29uY2F0KFtkWzFdXSkgfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJEb3Rfc3RyaW5nXCIsIFwic3ltYm9sc1wiOiBbXCJBdG9tXCIsIFwiRG90X3N0cmluZyRlYm5mJDFcIl0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJBdG9tJGVibmYkMVwiLCBcInN5bWJvbHNcIjogWy9bMC05QS1aYS16ISMkJSYnKitcXC0vPT9eX2B7fH1+XFx1MDA4MC1cXHVGRkZGL10vXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIkF0b20kZWJuZiQxXCIsIFwic3ltYm9sc1wiOiBbXCJBdG9tJGVibmYkMVwiLCAvWzAtOUEtWmEteiEjJCUmJyorXFwtLz0/Xl9ge3x9flxcdTAwODAtXFx1RkZGRi9dL10sIFwicG9zdHByb2Nlc3NcIjogKGQpID0+IGRbMF0uY29uY2F0KFtkWzFdXSkgfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJBdG9tXCIsIFwic3ltYm9sc1wiOiBbXCJBdG9tJGVibmYkMVwiXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIlF1b3RlZF9zdHJpbmckZWJuZiQxXCIsIFwic3ltYm9sc1wiOiBbXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIlF1b3RlZF9zdHJpbmckZWJuZiQxXCIsIFwic3ltYm9sc1wiOiBbXCJRdW90ZWRfc3RyaW5nJGVibmYkMVwiLCBcIlFjb250ZW50U01UUFwiXSwgXCJwb3N0cHJvY2Vzc1wiOiAoZCkgPT4gZFswXS5jb25jYXQoW2RbMV1dKSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIlF1b3RlZF9zdHJpbmdcIiwgXCJzeW1ib2xzXCI6IFtcIkRRVU9URVwiLCBcIlF1b3RlZF9zdHJpbmckZWJuZiQxXCIsIFwiRFFVT1RFXCJdIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiUWNvbnRlbnRTTVRQXCIsIFwic3ltYm9sc1wiOiBbXCJxdGV4dFNNVFBcIl0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJRY29udGVudFNNVFBcIiwgXCJzeW1ib2xzXCI6IFtcInF1b3RlZF9wYWlyU01UUFwiXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcInF1b3RlZF9wYWlyU01UUFwiLCBcInN5bWJvbHNcIjogW3sgXCJsaXRlcmFsXCI6IFwiXFxcXFwiIH0sIC9bXFx4MjAtXFx4N2VdL10gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJxdGV4dFNNVFBcIiwgXCJzeW1ib2xzXCI6IFsvW1xceDIwLVxceDIxXFx4MjMtXFx4NWJcXHg1ZC1cXHg3ZVxcdTAwODAtXFx1RkZGRl0vXSwgXCJwb3N0cHJvY2Vzc1wiOiBpZCB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIklQdjRfYWRkcmVzc19saXRlcmFsJG1hY3JvY2FsbCQyXCIsIFwic3ltYm9sc1wiOiBbeyBcImxpdGVyYWxcIjogXCIuXCIgfSwgXCJTbnVtXCJdIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiSVB2NF9hZGRyZXNzX2xpdGVyYWwkbWFjcm9jYWxsJDFcIiwgXCJzeW1ib2xzXCI6IFtcIklQdjRfYWRkcmVzc19saXRlcmFsJG1hY3JvY2FsbCQyXCIsIFwiSVB2NF9hZGRyZXNzX2xpdGVyYWwkbWFjcm9jYWxsJDJcIiwgXCJJUHY0X2FkZHJlc3NfbGl0ZXJhbCRtYWNyb2NhbGwkMlwiXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIklQdjRfYWRkcmVzc19saXRlcmFsXCIsIFwic3ltYm9sc1wiOiBbXCJTbnVtXCIsIFwiSVB2NF9hZGRyZXNzX2xpdGVyYWwkbWFjcm9jYWxsJDFcIl0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJJUHY2X2FkZHJlc3NfbGl0ZXJhbCRzdWJleHByZXNzaW9uJDFcIiwgXCJzeW1ib2xzXCI6IFsvW2lJXS8sIC9bcFBdLywgL1t2Vl0vLCB7IFwibGl0ZXJhbFwiOiBcIjZcIiB9LCB7IFwibGl0ZXJhbFwiOiBcIjpcIiB9XSwgXCJwb3N0cHJvY2Vzc1wiOiBmdW5jdGlvbiAoZCkgeyByZXR1cm4gZC5qb2luKFwiXCIpOyB9IH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiSVB2Nl9hZGRyZXNzX2xpdGVyYWxcIiwgXCJzeW1ib2xzXCI6IFtcIklQdjZfYWRkcmVzc19saXRlcmFsJHN1YmV4cHJlc3Npb24kMVwiLCBcIklQdjZfYWRkclwiXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIkdlbmVyYWxfYWRkcmVzc19saXRlcmFsJGVibmYkMVwiLCBcInN5bWJvbHNcIjogW1wiZGNvbnRlbnRcIl0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJHZW5lcmFsX2FkZHJlc3NfbGl0ZXJhbCRlYm5mJDFcIiwgXCJzeW1ib2xzXCI6IFtcIkdlbmVyYWxfYWRkcmVzc19saXRlcmFsJGVibmYkMVwiLCBcImRjb250ZW50XCJdLCBcInBvc3Rwcm9jZXNzXCI6IChkKSA9PiBkWzBdLmNvbmNhdChbZFsxXV0pIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiR2VuZXJhbF9hZGRyZXNzX2xpdGVyYWxcIiwgXCJzeW1ib2xzXCI6IFtcIlN0YW5kYXJkaXplZF90YWdcIiwgeyBcImxpdGVyYWxcIjogXCI6XCIgfSwgXCJHZW5lcmFsX2FkZHJlc3NfbGl0ZXJhbCRlYm5mJDFcIl0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJTdGFuZGFyZGl6ZWRfdGFnXCIsIFwic3ltYm9sc1wiOiBbXCJMZGhfc3RyXCJdIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiZGNvbnRlbnRcIiwgXCJzeW1ib2xzXCI6IFsvW1xceDIxLVxceDVhXFx4NWUtXFx4N2VdL10sIFwicG9zdHByb2Nlc3NcIjogaWQgfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJTbnVtXCIsIFwic3ltYm9sc1wiOiBbXCJESUdJVFwiXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIlNudW0kc3ViZXhwcmVzc2lvbiQxXCIsIFwic3ltYm9sc1wiOiBbL1sxLTldLywgXCJESUdJVFwiXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIlNudW1cIiwgXCJzeW1ib2xzXCI6IFtcIlNudW0kc3ViZXhwcmVzc2lvbiQxXCJdIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiU251bSRzdWJleHByZXNzaW9uJDJcIiwgXCJzeW1ib2xzXCI6IFt7IFwibGl0ZXJhbFwiOiBcIjFcIiB9LCBcIkRJR0lUXCIsIFwiRElHSVRcIl0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJTbnVtXCIsIFwic3ltYm9sc1wiOiBbXCJTbnVtJHN1YmV4cHJlc3Npb24kMlwiXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIlNudW0kc3ViZXhwcmVzc2lvbiQzXCIsIFwic3ltYm9sc1wiOiBbeyBcImxpdGVyYWxcIjogXCIyXCIgfSwgL1swLTRdLywgXCJESUdJVFwiXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIlNudW1cIiwgXCJzeW1ib2xzXCI6IFtcIlNudW0kc3ViZXhwcmVzc2lvbiQzXCJdIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiU251bSRzdWJleHByZXNzaW9uJDRcIiwgXCJzeW1ib2xzXCI6IFt7IFwibGl0ZXJhbFwiOiBcIjJcIiB9LCB7IFwibGl0ZXJhbFwiOiBcIjVcIiB9LCAvWzAtNV0vXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIlNudW1cIiwgXCJzeW1ib2xzXCI6IFtcIlNudW0kc3ViZXhwcmVzc2lvbiQ0XCJdIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiSVB2Nl9hZGRyXCIsIFwic3ltYm9sc1wiOiBbXCJJUHY2X2Z1bGxcIl0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJJUHY2X2FkZHJcIiwgXCJzeW1ib2xzXCI6IFtcIklQdjZfY29tcFwiXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIklQdjZfYWRkclwiLCBcInN5bWJvbHNcIjogW1wiSVB2NnY0X2Z1bGxcIl0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJJUHY2X2FkZHJcIiwgXCJzeW1ib2xzXCI6IFtcIklQdjZ2NF9jb21wXCJdIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiSVB2Nl9oZXhcIiwgXCJzeW1ib2xzXCI6IFtcIkhFWERJR1wiXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIklQdjZfaGV4JHN1YmV4cHJlc3Npb24kMVwiLCBcInN5bWJvbHNcIjogW1wiSEVYRElHXCIsIFwiSEVYRElHXCJdIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiSVB2Nl9oZXhcIiwgXCJzeW1ib2xzXCI6IFtcIklQdjZfaGV4JHN1YmV4cHJlc3Npb24kMVwiXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIklQdjZfaGV4JHN1YmV4cHJlc3Npb24kMlwiLCBcInN5bWJvbHNcIjogW1wiSEVYRElHXCIsIFwiSEVYRElHXCIsIFwiSEVYRElHXCJdIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiSVB2Nl9oZXhcIiwgXCJzeW1ib2xzXCI6IFtcIklQdjZfaGV4JHN1YmV4cHJlc3Npb24kMlwiXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIklQdjZfaGV4JHN1YmV4cHJlc3Npb24kM1wiLCBcInN5bWJvbHNcIjogW1wiSEVYRElHXCIsIFwiSEVYRElHXCIsIFwiSEVYRElHXCIsIFwiSEVYRElHXCJdIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiSVB2Nl9oZXhcIiwgXCJzeW1ib2xzXCI6IFtcIklQdjZfaGV4JHN1YmV4cHJlc3Npb24kM1wiXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIklQdjZfZnVsbCRtYWNyb2NhbGwkMlwiLCBcInN5bWJvbHNcIjogW3sgXCJsaXRlcmFsXCI6IFwiOlwiIH0sIFwiSVB2Nl9oZXhcIl0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJJUHY2X2Z1bGwkbWFjcm9jYWxsJDFcIiwgXCJzeW1ib2xzXCI6IFtcIklQdjZfZnVsbCRtYWNyb2NhbGwkMlwiLCBcIklQdjZfZnVsbCRtYWNyb2NhbGwkMlwiLCBcIklQdjZfZnVsbCRtYWNyb2NhbGwkMlwiLCBcIklQdjZfZnVsbCRtYWNyb2NhbGwkMlwiLCBcIklQdjZfZnVsbCRtYWNyb2NhbGwkMlwiLCBcIklQdjZfZnVsbCRtYWNyb2NhbGwkMlwiLCBcIklQdjZfZnVsbCRtYWNyb2NhbGwkMlwiXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIklQdjZfZnVsbFwiLCBcInN5bWJvbHNcIjogW1wiSVB2Nl9oZXhcIiwgXCJJUHY2X2Z1bGwkbWFjcm9jYWxsJDFcIl0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJJUHY2X2NvbXAkZWJuZiQxJHN1YmV4cHJlc3Npb24kMSRtYWNyb2NhbGwkMlwiLCBcInN5bWJvbHNcIjogW3sgXCJsaXRlcmFsXCI6IFwiOlwiIH0sIFwiSVB2Nl9oZXhcIl0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJJUHY2X2NvbXAkZWJuZiQxJHN1YmV4cHJlc3Npb24kMSRtYWNyb2NhbGwkMVwiLCBcInN5bWJvbHNcIjogW1wiSVB2Nl9jb21wJGVibmYkMSRzdWJleHByZXNzaW9uJDEkbWFjcm9jYWxsJDJcIiwgXCJJUHY2X2NvbXAkZWJuZiQxJHN1YmV4cHJlc3Npb24kMSRtYWNyb2NhbGwkMlwiLCBcIklQdjZfY29tcCRlYm5mJDEkc3ViZXhwcmVzc2lvbiQxJG1hY3JvY2FsbCQyXCIsIFwiSVB2Nl9jb21wJGVibmYkMSRzdWJleHByZXNzaW9uJDEkbWFjcm9jYWxsJDJcIiwgXCJJUHY2X2NvbXAkZWJuZiQxJHN1YmV4cHJlc3Npb24kMSRtYWNyb2NhbGwkMlwiXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIklQdjZfY29tcCRlYm5mJDEkc3ViZXhwcmVzc2lvbiQxXCIsIFwic3ltYm9sc1wiOiBbXCJJUHY2X2hleFwiLCBcIklQdjZfY29tcCRlYm5mJDEkc3ViZXhwcmVzc2lvbiQxJG1hY3JvY2FsbCQxXCJdIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiSVB2Nl9jb21wJGVibmYkMVwiLCBcInN5bWJvbHNcIjogW1wiSVB2Nl9jb21wJGVibmYkMSRzdWJleHByZXNzaW9uJDFcIl0sIFwicG9zdHByb2Nlc3NcIjogaWQgfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJJUHY2X2NvbXAkZWJuZiQxXCIsIFwic3ltYm9sc1wiOiBbXSwgXCJwb3N0cHJvY2Vzc1wiOiAoKSA9PiBudWxsIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiSVB2Nl9jb21wJHN0cmluZyQxXCIsIFwic3ltYm9sc1wiOiBbeyBcImxpdGVyYWxcIjogXCI6XCIgfSwgeyBcImxpdGVyYWxcIjogXCI6XCIgfV0sIFwicG9zdHByb2Nlc3NcIjogKGQpID0+IGQuam9pbignJykgfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJJUHY2X2NvbXAkZWJuZiQyJHN1YmV4cHJlc3Npb24kMSRtYWNyb2NhbGwkMlwiLCBcInN5bWJvbHNcIjogW3sgXCJsaXRlcmFsXCI6IFwiOlwiIH0sIFwiSVB2Nl9oZXhcIl0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJJUHY2X2NvbXAkZWJuZiQyJHN1YmV4cHJlc3Npb24kMSRtYWNyb2NhbGwkMVwiLCBcInN5bWJvbHNcIjogW1wiSVB2Nl9jb21wJGVibmYkMiRzdWJleHByZXNzaW9uJDEkbWFjcm9jYWxsJDJcIiwgXCJJUHY2X2NvbXAkZWJuZiQyJHN1YmV4cHJlc3Npb24kMSRtYWNyb2NhbGwkMlwiLCBcIklQdjZfY29tcCRlYm5mJDIkc3ViZXhwcmVzc2lvbiQxJG1hY3JvY2FsbCQyXCIsIFwiSVB2Nl9jb21wJGVibmYkMiRzdWJleHByZXNzaW9uJDEkbWFjcm9jYWxsJDJcIiwgXCJJUHY2X2NvbXAkZWJuZiQyJHN1YmV4cHJlc3Npb24kMSRtYWNyb2NhbGwkMlwiXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIklQdjZfY29tcCRlYm5mJDIkc3ViZXhwcmVzc2lvbiQxXCIsIFwic3ltYm9sc1wiOiBbXCJJUHY2X2hleFwiLCBcIklQdjZfY29tcCRlYm5mJDIkc3ViZXhwcmVzc2lvbiQxJG1hY3JvY2FsbCQxXCJdIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiSVB2Nl9jb21wJGVibmYkMlwiLCBcInN5bWJvbHNcIjogW1wiSVB2Nl9jb21wJGVibmYkMiRzdWJleHByZXNzaW9uJDFcIl0sIFwicG9zdHByb2Nlc3NcIjogaWQgfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJJUHY2X2NvbXAkZWJuZiQyXCIsIFwic3ltYm9sc1wiOiBbXSwgXCJwb3N0cHJvY2Vzc1wiOiAoKSA9PiBudWxsIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiSVB2Nl9jb21wXCIsIFwic3ltYm9sc1wiOiBbXCJJUHY2X2NvbXAkZWJuZiQxXCIsIFwiSVB2Nl9jb21wJHN0cmluZyQxXCIsIFwiSVB2Nl9jb21wJGVibmYkMlwiXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIklQdjZ2NF9mdWxsJG1hY3JvY2FsbCQyXCIsIFwic3ltYm9sc1wiOiBbeyBcImxpdGVyYWxcIjogXCI6XCIgfSwgXCJJUHY2X2hleFwiXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIklQdjZ2NF9mdWxsJG1hY3JvY2FsbCQxXCIsIFwic3ltYm9sc1wiOiBbXCJJUHY2djRfZnVsbCRtYWNyb2NhbGwkMlwiLCBcIklQdjZ2NF9mdWxsJG1hY3JvY2FsbCQyXCIsIFwiSVB2NnY0X2Z1bGwkbWFjcm9jYWxsJDJcIiwgXCJJUHY2djRfZnVsbCRtYWNyb2NhbGwkMlwiLCBcIklQdjZ2NF9mdWxsJG1hY3JvY2FsbCQyXCJdIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiSVB2NnY0X2Z1bGxcIiwgXCJzeW1ib2xzXCI6IFtcIklQdjZfaGV4XCIsIFwiSVB2NnY0X2Z1bGwkbWFjcm9jYWxsJDFcIiwgeyBcImxpdGVyYWxcIjogXCI6XCIgfSwgXCJJUHY0X2FkZHJlc3NfbGl0ZXJhbFwiXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIklQdjZ2NF9jb21wJGVibmYkMSRzdWJleHByZXNzaW9uJDEkbWFjcm9jYWxsJDJcIiwgXCJzeW1ib2xzXCI6IFt7IFwibGl0ZXJhbFwiOiBcIjpcIiB9LCBcIklQdjZfaGV4XCJdIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiSVB2NnY0X2NvbXAkZWJuZiQxJHN1YmV4cHJlc3Npb24kMSRtYWNyb2NhbGwkMVwiLCBcInN5bWJvbHNcIjogW1wiSVB2NnY0X2NvbXAkZWJuZiQxJHN1YmV4cHJlc3Npb24kMSRtYWNyb2NhbGwkMlwiLCBcIklQdjZ2NF9jb21wJGVibmYkMSRzdWJleHByZXNzaW9uJDEkbWFjcm9jYWxsJDJcIiwgXCJJUHY2djRfY29tcCRlYm5mJDEkc3ViZXhwcmVzc2lvbiQxJG1hY3JvY2FsbCQyXCJdIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiSVB2NnY0X2NvbXAkZWJuZiQxJHN1YmV4cHJlc3Npb24kMVwiLCBcInN5bWJvbHNcIjogW1wiSVB2Nl9oZXhcIiwgXCJJUHY2djRfY29tcCRlYm5mJDEkc3ViZXhwcmVzc2lvbiQxJG1hY3JvY2FsbCQxXCJdIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiSVB2NnY0X2NvbXAkZWJuZiQxXCIsIFwic3ltYm9sc1wiOiBbXCJJUHY2djRfY29tcCRlYm5mJDEkc3ViZXhwcmVzc2lvbiQxXCJdLCBcInBvc3Rwcm9jZXNzXCI6IGlkIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiSVB2NnY0X2NvbXAkZWJuZiQxXCIsIFwic3ltYm9sc1wiOiBbXSwgXCJwb3N0cHJvY2Vzc1wiOiAoKSA9PiBudWxsIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiSVB2NnY0X2NvbXAkc3RyaW5nJDFcIiwgXCJzeW1ib2xzXCI6IFt7IFwibGl0ZXJhbFwiOiBcIjpcIiB9LCB7IFwibGl0ZXJhbFwiOiBcIjpcIiB9XSwgXCJwb3N0cHJvY2Vzc1wiOiAoZCkgPT4gZC5qb2luKCcnKSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIklQdjZ2NF9jb21wJGVibmYkMiRzdWJleHByZXNzaW9uJDEkbWFjcm9jYWxsJDJcIiwgXCJzeW1ib2xzXCI6IFt7IFwibGl0ZXJhbFwiOiBcIjpcIiB9LCBcIklQdjZfaGV4XCJdIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiSVB2NnY0X2NvbXAkZWJuZiQyJHN1YmV4cHJlc3Npb24kMSRtYWNyb2NhbGwkMVwiLCBcInN5bWJvbHNcIjogW1wiSVB2NnY0X2NvbXAkZWJuZiQyJHN1YmV4cHJlc3Npb24kMSRtYWNyb2NhbGwkMlwiLCBcIklQdjZ2NF9jb21wJGVibmYkMiRzdWJleHByZXNzaW9uJDEkbWFjcm9jYWxsJDJcIiwgXCJJUHY2djRfY29tcCRlYm5mJDIkc3ViZXhwcmVzc2lvbiQxJG1hY3JvY2FsbCQyXCJdIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiSVB2NnY0X2NvbXAkZWJuZiQyJHN1YmV4cHJlc3Npb24kMVwiLCBcInN5bWJvbHNcIjogW1wiSVB2Nl9oZXhcIiwgXCJJUHY2djRfY29tcCRlYm5mJDIkc3ViZXhwcmVzc2lvbiQxJG1hY3JvY2FsbCQxXCIsIHsgXCJsaXRlcmFsXCI6IFwiOlwiIH1dIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiSVB2NnY0X2NvbXAkZWJuZiQyXCIsIFwic3ltYm9sc1wiOiBbXCJJUHY2djRfY29tcCRlYm5mJDIkc3ViZXhwcmVzc2lvbiQxXCJdLCBcInBvc3Rwcm9jZXNzXCI6IGlkIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiSVB2NnY0X2NvbXAkZWJuZiQyXCIsIFwic3ltYm9sc1wiOiBbXSwgXCJwb3N0cHJvY2Vzc1wiOiAoKSA9PiBudWxsIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiSVB2NnY0X2NvbXBcIiwgXCJzeW1ib2xzXCI6IFtcIklQdjZ2NF9jb21wJGVibmYkMVwiLCBcIklQdjZ2NF9jb21wJHN0cmluZyQxXCIsIFwiSVB2NnY0X2NvbXAkZWJuZiQyXCIsIFwiSVB2NF9hZGRyZXNzX2xpdGVyYWxcIl0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJESUdJVFwiLCBcInN5bWJvbHNcIjogWy9bMC05XS9dLCBcInBvc3Rwcm9jZXNzXCI6IGlkIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiQUxQSEFfRElHSVRfVVwiLCBcInN5bWJvbHNcIjogWy9bMC05QS1aYS16XFx1MDA4MC1cXHVGRkZGXS9dLCBcInBvc3Rwcm9jZXNzXCI6IGlkIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiQUxQSEFfRElHSVRcIiwgXCJzeW1ib2xzXCI6IFsvWzAtOUEtWmEtel0vXSwgXCJwb3N0cHJvY2Vzc1wiOiBpZCB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIkFMUEhBX0RJR19EQVNIXCIsIFwic3ltYm9sc1wiOiBbL1stMC05QS1aYS16XS9dLCBcInBvc3Rwcm9jZXNzXCI6IGlkIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiQUxQSEFfRElHX0RBU0hfVVwiLCBcInN5bWJvbHNcIjogWy9bLTAtOUEtWmEtelxcdTAwODAtXFx1RkZGRl0vXSwgXCJwb3N0cHJvY2Vzc1wiOiBpZCB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcIkhFWERJR1wiLCBcInN5bWJvbHNcIjogWy9bMC05QS1GYS1mXS9dLCBcInBvc3Rwcm9jZXNzXCI6IGlkIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiRFFVT1RFXCIsIFwic3ltYm9sc1wiOiBbeyBcImxpdGVyYWxcIjogXCJcXFwiXCIgfV0sIFwicG9zdHByb2Nlc3NcIjogaWQgfVxuICAgIF0sXG4gICAgUGFyc2VyU3RhcnQ6IFwiUmV2ZXJzZV9wYXRoXCIsXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZ3JhbW1hcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWdyYW1tYXIuanMubWFwIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY2Fub25pY2FsaXplID0gZXhwb3J0cy5jYW5vbmljYWxpemVfcXVvdGVkX3N0cmluZyA9IGV4cG9ydHMubm9ybWFsaXplID0gZXhwb3J0cy5ub3JtYWxpemVfZG90X3N0cmluZyA9IGV4cG9ydHMucGFyc2UgPSB2b2lkIDA7XG4vLyBjb25zdCBwdW55Y29kZSA9IHJlcXVpcmUoJ3B1bnljb2RlJyk7XG5jb25zdCBuZWFybGV5ID0gcmVxdWlyZShcIm5lYXJsZXlcIik7XG5jb25zdCBncmFtbWFyXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4vZ3JhbW1hclwiKSk7XG5ncmFtbWFyXzEuZGVmYXVsdC5QYXJzZXJTdGFydCA9IFwiTWFpbGJveFwiO1xuY29uc3QgZ3JhbW1hciA9IG5lYXJsZXkuR3JhbW1hci5mcm9tQ29tcGlsZWQoZ3JhbW1hcl8xLmRlZmF1bHQpO1xuLy8gPGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM1MzIxI3NlY3Rpb24tNC4xLjI+XG5mdW5jdGlvbiBwYXJzZShhZGRyZXNzKSB7XG4gICAgLy8gQW4gaW5zYW5lIGxlbmd0aCwgdG8gcHJvdGVjdCB0aGUgcGFyc2luZyBjb2RlIGZyb20gaHVnZSBpbnB1dC4gU01UUCBsaW5lIGxpbWl0LCBtaW51cyBjb21tYW5kIHNpemUuXG4gICAgY29uc3QgaW5zYW5lX2xlbmd0aCA9IDEwMDAgLSBcIk1BSUwgRlJPTTo8PlxcclxcblwiLmxlbmd0aDtcbiAgICBpZiAoYWRkcmVzcy5sZW5ndGggPiBpbnNhbmVfbGVuZ3RoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcImFkZHJlc3MgdG9vIGxvbmdcIik7XG4gICAgfVxuICAgIGNvbnN0IHBhcnNlciA9IG5ldyBuZWFybGV5LlBhcnNlcihncmFtbWFyKTtcbiAgICBwYXJzZXIuZmVlZChhZGRyZXNzKTtcbiAgICBpZiAocGFyc2VyLnJlc3VsdHMubGVuZ3RoICE9PSAxKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcImFkZHJlc3MgcGFyc2luZyBmYWlsZWQ6IGFtYmlndW91cyBncmFtbWFyXCIpO1xuICAgIH1cbiAgICAvLyBEb21haW4gY2hlY2tzXG4gICAgY29uc3QgYXRfaWR4ID0gYWRkcmVzcy5sYXN0SW5kZXhPZignQCcpOyAvLyBtdXN0IGJlIGZvdW5kLCBzaW5jZSBwYXJzZSB3YXMgc3VjY2Vzc2Z1bFxuICAgIGNvbnN0IGRvbWFpbiA9IGFkZHJlc3Muc3Vic3RyaW5nKGF0X2lkeCArIDEpO1xuICAgIGlmIChkb21haW5bMF0gIT09ICdbJykgeyAvLyBOb3QgYW4gYWRkcmVzcyBsaXRlcmFsXG4gICAgICAgIGlmIChkb21haW4ubGVuZ3RoID4gMjUzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJkb21haW4gdG9vIGxvbmdcIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbGFiZWxzID0gZG9tYWluLnNwbGl0KFwiLlwiKTtcbiAgICAgICAgaWYgKGxhYmVscy5sZW5ndGggPCAyKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJkb21haW4gbm90IGZ1bGx5IHF1YWxpZmllZFwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobGFiZWxzW2xhYmVscy5sZW5ndGggLSAxXS5sZW5ndGggPCAyKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ0b3AgbGV2ZWwgZG9tYWluIGxhYmVsIHRvbyBzaG9ydFwiKTtcbiAgICAgICAgfVxuICAgICAgICBsYWJlbHMuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgcmV0dXJuIGIubGVuZ3RoIC0gYS5sZW5ndGg7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAobGFiZWxzWzBdLmxlbmd0aCA+IDYzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJkb21haW4gbGFiZWwgdG9vIGxvbmdcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlci5yZXN1bHRzWzBdO1xufVxuZXhwb3J0cy5wYXJzZSA9IHBhcnNlO1xuLyoqIFN0cmlwICtzb21ldGhpbmcsIHN0cmlwICcuJ3MsIGFuZCBtYXAgdG8gbG93ZXIgY2FzZS5cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplX2RvdF9zdHJpbmcoZG90X3N0cmluZykge1xuICAgIGNvbnN0IHRhZ2xlc3MgPSAoZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBwbHVzX2xvYyA9IGRvdF9zdHJpbmcuaW5kZXhPZihcIitcIik7XG4gICAgICAgIGlmIChwbHVzX2xvYyA9PT0gLTEpIHtcbiAgICAgICAgICAgIHJldHVybiBkb3Rfc3RyaW5nO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkb3Rfc3RyaW5nLnN1YnN0cigwLCBwbHVzX2xvYyk7XG4gICAgfSkoKTtcbiAgICBjb25zdCBkb3RsZXNzID0gdGFnbGVzcy5yZXBsYWNlKC9cXC4vZywgXCJcIik7XG4gICAgcmV0dXJuIGRvdGxlc3MudG9Mb3dlckNhc2UoKTtcbn1cbmV4cG9ydHMubm9ybWFsaXplX2RvdF9zdHJpbmcgPSBub3JtYWxpemVfZG90X3N0cmluZztcbi8qKiBUaGUgRyBzdHlsZSBhZGRyZXNzIG5vcm1hbGl6YXRpb24uXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZShhZGRyZXNzKSB7XG4gICAgdmFyIF9hLCBfYjtcbiAgICBjb25zdCBhID0gcGFyc2UoYWRkcmVzcyk7XG4gICAgY29uc3QgZG9tYWluID0gKF9hID0gYS5kb21haW5QYXJ0LkFkZHJlc3NMaXRlcmFsKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBhLmRvbWFpblBhcnQuRG9tYWluTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IGxvY2FsID0gKF9iID0gYS5sb2NhbFBhcnQuUXVvdGVkU3RyaW5nKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBub3JtYWxpemVfZG90X3N0cmluZyhhLmxvY2FsUGFydC5Eb3RTdHJpbmcpO1xuICAgIHJldHVybiBgJHtsb2NhbH1AJHtkb21haW59YDtcbn1cbmV4cG9ydHMubm9ybWFsaXplID0gbm9ybWFsaXplO1xuZnVuY3Rpb24gY2Fub25pY2FsaXplX3F1b3RlZF9zdHJpbmcocXVvdGVkX3N0cmluZykge1xuICAgIGNvbnN0IHVucXVvdGVkID0gcXVvdGVkX3N0cmluZy5zdWJzdHIoMSkuc3Vic3RyKDAsIHF1b3RlZF9zdHJpbmcubGVuZ3RoIC0gMik7XG4gICAgY29uc3QgdW5lc2NhcGVkID0gdW5xdW90ZWQucmVwbGFjZSgvKD86XFxcXCguKSkvZywgXCIkMVwiKTtcbiAgICBjb25zdCByZWVzY2FwZWQgPSB1bmVzY2FwZWQucmVwbGFjZSgvKD86KFtcIlxcXFxdKSkvZywgXCJcXFxcJDFcIik7XG4gICAgcmV0dXJuIGBcIiR7cmVlc2NhcGVkfVwiYDsgLy8gcmUtcXVvdGVcbn1cbmV4cG9ydHMuY2Fub25pY2FsaXplX3F1b3RlZF9zdHJpbmcgPSBjYW5vbmljYWxpemVfcXVvdGVkX3N0cmluZztcbi8qKlxuICogQXBwbHkgYSBjYW5vbmljYWxpemF0aW9uIGNvbnNpc3RlbnQgd2l0aCBzdGFuZGFyZHMgdG8gc3VwcG9ydFxuICogY29tcGFyaXNvbiBhcyBhIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gY2Fub25pY2FsaXplKGFkZHJlc3MpIHtcbiAgICB2YXIgX2E7XG4gICAgY29uc3QgYSA9IHBhcnNlKGFkZHJlc3MpO1xuICAgIGNvbnN0IGRvbWFpbiA9IChfYSA9IGEuZG9tYWluUGFydC5BZGRyZXNzTGl0ZXJhbCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogYS5kb21haW5QYXJ0LkRvbWFpbk5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCBsb2NhbCA9IGEubG9jYWxQYXJ0LlF1b3RlZFN0cmluZ1xuICAgICAgICA/IGNhbm9uaWNhbGl6ZV9xdW90ZWRfc3RyaW5nKGEubG9jYWxQYXJ0LlF1b3RlZFN0cmluZylcbiAgICAgICAgOiBhLmxvY2FsUGFydC5Eb3RTdHJpbmc7XG4gICAgcmV0dXJuIGAke2xvY2FsfUAke2RvbWFpbn1gO1xufVxuZXhwb3J0cy5jYW5vbmljYWxpemUgPSBjYW5vbmljYWxpemU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgIid1c2Ugc3RyaWN0JztcblxudmFyIGhhc093biA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIGdPUEQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG52YXIgaXNBcnJheSA9IGZ1bmN0aW9uIGlzQXJyYXkoYXJyKSB7XG5cdGlmICh0eXBlb2YgQXJyYXkuaXNBcnJheSA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdHJldHVybiBBcnJheS5pc0FycmF5KGFycik7XG5cdH1cblxuXHRyZXR1cm4gdG9TdHIuY2FsbChhcnIpID09PSAnW29iamVjdCBBcnJheV0nO1xufTtcblxudmFyIGlzUGxhaW5PYmplY3QgPSBmdW5jdGlvbiBpc1BsYWluT2JqZWN0KG9iaikge1xuXHRpZiAoIW9iaiB8fCB0b1N0ci5jYWxsKG9iaikgIT09ICdbb2JqZWN0IE9iamVjdF0nKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0dmFyIGhhc093bkNvbnN0cnVjdG9yID0gaGFzT3duLmNhbGwob2JqLCAnY29uc3RydWN0b3InKTtcblx0dmFyIGhhc0lzUHJvdG90eXBlT2YgPSBvYmouY29uc3RydWN0b3IgJiYgb2JqLmNvbnN0cnVjdG9yLnByb3RvdHlwZSAmJiBoYXNPd24uY2FsbChvYmouY29uc3RydWN0b3IucHJvdG90eXBlLCAnaXNQcm90b3R5cGVPZicpO1xuXHQvLyBOb3Qgb3duIGNvbnN0cnVjdG9yIHByb3BlcnR5IG11c3QgYmUgT2JqZWN0XG5cdGlmIChvYmouY29uc3RydWN0b3IgJiYgIWhhc093bkNvbnN0cnVjdG9yICYmICFoYXNJc1Byb3RvdHlwZU9mKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0Ly8gT3duIHByb3BlcnRpZXMgYXJlIGVudW1lcmF0ZWQgZmlyc3RseSwgc28gdG8gc3BlZWQgdXAsXG5cdC8vIGlmIGxhc3Qgb25lIGlzIG93biwgdGhlbiBhbGwgcHJvcGVydGllcyBhcmUgb3duLlxuXHR2YXIga2V5O1xuXHRmb3IgKGtleSBpbiBvYmopIHsgLyoqLyB9XG5cblx0cmV0dXJuIHR5cGVvZiBrZXkgPT09ICd1bmRlZmluZWQnIHx8IGhhc093bi5jYWxsKG9iaiwga2V5KTtcbn07XG5cbi8vIElmIG5hbWUgaXMgJ19fcHJvdG9fXycsIGFuZCBPYmplY3QuZGVmaW5lUHJvcGVydHkgaXMgYXZhaWxhYmxlLCBkZWZpbmUgX19wcm90b19fIGFzIGFuIG93biBwcm9wZXJ0eSBvbiB0YXJnZXRcbnZhciBzZXRQcm9wZXJ0eSA9IGZ1bmN0aW9uIHNldFByb3BlcnR5KHRhcmdldCwgb3B0aW9ucykge1xuXHRpZiAoZGVmaW5lUHJvcGVydHkgJiYgb3B0aW9ucy5uYW1lID09PSAnX19wcm90b19fJykge1xuXHRcdGRlZmluZVByb3BlcnR5KHRhcmdldCwgb3B0aW9ucy5uYW1lLCB7XG5cdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdFx0dmFsdWU6IG9wdGlvbnMubmV3VmFsdWUsXG5cdFx0XHR3cml0YWJsZTogdHJ1ZVxuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdHRhcmdldFtvcHRpb25zLm5hbWVdID0gb3B0aW9ucy5uZXdWYWx1ZTtcblx0fVxufTtcblxuLy8gUmV0dXJuIHVuZGVmaW5lZCBpbnN0ZWFkIG9mIF9fcHJvdG9fXyBpZiAnX19wcm90b19fJyBpcyBub3QgYW4gb3duIHByb3BlcnR5XG52YXIgZ2V0UHJvcGVydHkgPSBmdW5jdGlvbiBnZXRQcm9wZXJ0eShvYmosIG5hbWUpIHtcblx0aWYgKG5hbWUgPT09ICdfX3Byb3RvX18nKSB7XG5cdFx0aWYgKCFoYXNPd24uY2FsbChvYmosIG5hbWUpKSB7XG5cdFx0XHRyZXR1cm4gdm9pZCAwO1xuXHRcdH0gZWxzZSBpZiAoZ09QRCkge1xuXHRcdFx0Ly8gSW4gZWFybHkgdmVyc2lvbnMgb2Ygbm9kZSwgb2JqWydfX3Byb3RvX18nXSBpcyBidWdneSB3aGVuIG9iaiBoYXNcblx0XHRcdC8vIF9fcHJvdG9fXyBhcyBhbiBvd24gcHJvcGVydHkuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoKSB3b3Jrcy5cblx0XHRcdHJldHVybiBnT1BEKG9iaiwgbmFtZSkudmFsdWU7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIG9ialtuYW1lXTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZXh0ZW5kKCkge1xuXHR2YXIgb3B0aW9ucywgbmFtZSwgc3JjLCBjb3B5LCBjb3B5SXNBcnJheSwgY2xvbmU7XG5cdHZhciB0YXJnZXQgPSBhcmd1bWVudHNbMF07XG5cdHZhciBpID0gMTtcblx0dmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG5cdHZhciBkZWVwID0gZmFsc2U7XG5cblx0Ly8gSGFuZGxlIGEgZGVlcCBjb3B5IHNpdHVhdGlvblxuXHRpZiAodHlwZW9mIHRhcmdldCA9PT0gJ2Jvb2xlYW4nKSB7XG5cdFx0ZGVlcCA9IHRhcmdldDtcblx0XHR0YXJnZXQgPSBhcmd1bWVudHNbMV0gfHwge307XG5cdFx0Ly8gc2tpcCB0aGUgYm9vbGVhbiBhbmQgdGhlIHRhcmdldFxuXHRcdGkgPSAyO1xuXHR9XG5cdGlmICh0YXJnZXQgPT0gbnVsbCB8fCAodHlwZW9mIHRhcmdldCAhPT0gJ29iamVjdCcgJiYgdHlwZW9mIHRhcmdldCAhPT0gJ2Z1bmN0aW9uJykpIHtcblx0XHR0YXJnZXQgPSB7fTtcblx0fVxuXG5cdGZvciAoOyBpIDwgbGVuZ3RoOyArK2kpIHtcblx0XHRvcHRpb25zID0gYXJndW1lbnRzW2ldO1xuXHRcdC8vIE9ubHkgZGVhbCB3aXRoIG5vbi1udWxsL3VuZGVmaW5lZCB2YWx1ZXNcblx0XHRpZiAob3B0aW9ucyAhPSBudWxsKSB7XG5cdFx0XHQvLyBFeHRlbmQgdGhlIGJhc2Ugb2JqZWN0XG5cdFx0XHRmb3IgKG5hbWUgaW4gb3B0aW9ucykge1xuXHRcdFx0XHRzcmMgPSBnZXRQcm9wZXJ0eSh0YXJnZXQsIG5hbWUpO1xuXHRcdFx0XHRjb3B5ID0gZ2V0UHJvcGVydHkob3B0aW9ucywgbmFtZSk7XG5cblx0XHRcdFx0Ly8gUHJldmVudCBuZXZlci1lbmRpbmcgbG9vcFxuXHRcdFx0XHRpZiAodGFyZ2V0ICE9PSBjb3B5KSB7XG5cdFx0XHRcdFx0Ly8gUmVjdXJzZSBpZiB3ZSdyZSBtZXJnaW5nIHBsYWluIG9iamVjdHMgb3IgYXJyYXlzXG5cdFx0XHRcdFx0aWYgKGRlZXAgJiYgY29weSAmJiAoaXNQbGFpbk9iamVjdChjb3B5KSB8fCAoY29weUlzQXJyYXkgPSBpc0FycmF5KGNvcHkpKSkpIHtcblx0XHRcdFx0XHRcdGlmIChjb3B5SXNBcnJheSkge1xuXHRcdFx0XHRcdFx0XHRjb3B5SXNBcnJheSA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0XHRjbG9uZSA9IHNyYyAmJiBpc0FycmF5KHNyYykgPyBzcmMgOiBbXTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGNsb25lID0gc3JjICYmIGlzUGxhaW5PYmplY3Qoc3JjKSA/IHNyYyA6IHt9O1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHQvLyBOZXZlciBtb3ZlIG9yaWdpbmFsIG9iamVjdHMsIGNsb25lIHRoZW1cblx0XHRcdFx0XHRcdHNldFByb3BlcnR5KHRhcmdldCwgeyBuYW1lOiBuYW1lLCBuZXdWYWx1ZTogZXh0ZW5kKGRlZXAsIGNsb25lLCBjb3B5KSB9KTtcblxuXHRcdFx0XHRcdC8vIERvbid0IGJyaW5nIGluIHVuZGVmaW5lZCB2YWx1ZXNcblx0XHRcdFx0XHR9IGVsc2UgaWYgKHR5cGVvZiBjb3B5ICE9PSAndW5kZWZpbmVkJykge1xuXHRcdFx0XHRcdFx0c2V0UHJvcGVydHkodGFyZ2V0LCB7IG5hbWU6IG5hbWUsIG5ld1ZhbHVlOiBjb3B5IH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIFJldHVybiB0aGUgbW9kaWZpZWQgb2JqZWN0XG5cdHJldHVybiB0YXJnZXQ7XG59O1xuIiwKICAgICIndXNlIHN0cmljdCc7XG5cbnZhciBleHRlbmQgPSByZXF1aXJlKCdleHRlbmQnKTtcblxudmFyIGRhdGEgPSB7XG4gIHBlcm1hbmVudDogcmVxdWlyZSgnLi9saWIvaWFuYS1wZXJtYW5lbnQuanNvbicpLFxuICBwcm92b3Npb25hbDogcmVxdWlyZSgnLi9saWIvaWFuYS1wcm92aXNpb25hbC5qc29uJyksXG4gIGhpc3RvcmljYWw6IHJlcXVpcmUoJy4vbGliL2lhbmEtaGlzdG9yaWNhbC5qc29uJylcbn07XG5cbnZhciBhbGxCeU5hbWUgPSB7fTtcblxuT2JqZWN0LmtleXMoZGF0YSkuZm9yRWFjaChmdW5jdGlvbiAodHlwZSkge1xuICBkYXRhW3R5cGVdLmZvckVhY2goZnVuY3Rpb24gKHNjaGVtZU9iaikge1xuICAgIGFsbEJ5TmFtZVtzY2hlbWVPYmouc2NoZW1lXSA9IGV4dGVuZChzY2hlbWVPYmosIHsgdHlwZTogdHlwZSB9KTtcbiAgfSk7XG59KTtcblxuZGF0YS51bm9mZmljaWFsID0gcmVxdWlyZSgnLi9saWIvdW5vZmZpY2lhbC5qc29uJykuZmlsdGVyKGZ1bmN0aW9uIChpdGVtKSB7XG4gIHJldHVybiAhYWxsQnlOYW1lW2l0ZW0uc2NoZW1lXTtcbn0pO1xuXG5kYXRhLnVub2ZmaWNpYWwuZm9yRWFjaChmdW5jdGlvbiAoc2NoZW1lT2JqKSB7XG4gIGFsbEJ5TmFtZVtzY2hlbWVPYmouc2NoZW1lXSA9IGV4dGVuZChzY2hlbWVPYmosIHsgdHlwZTogJ3Vub2ZmaWNpYWwnIH0pO1xufSk7XG5cblxubW9kdWxlLmV4cG9ydHMgPSBleHRlbmQoZGF0YSwgeyBhbGxCeU5hbWU6IGFsbEJ5TmFtZSB9KTtcbiIsCiAgICAiY29uc3QgeyBwYXJzZSB9ID0gcmVxdWlyZSgndXJpLWpzJyk7XG5jb25zdCB7IGFkZHJlc3NQYXJzZXIgfSA9IHJlcXVpcmUoJ3NtdHAtYWRkcmVzcy1wYXJzZXInKTtcbmNvbnN0IHNjaGVtZXMgPSByZXF1aXJlKCdzY2hlbWVzJyk7XG5cbmZ1bmN0aW9uIHZhbGlkYXRlKGFkZHJlc3MpIHtcbiAgdHJ5IHtcbiAgICBhZGRyZXNzUGFyc2VyKGFkZHJlc3MpO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSAodmFsdWUpID0+IHtcbiAgY29uc3QgaXJpID0gcGFyc2UodmFsdWUpO1xuICBpZiAoaXJpLnNjaGVtZSA9PT0gJ21haWx0bycgJiYgaXJpLnRvLmV2ZXJ5KHZhbGlkYXRlKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmIChpcmkucmVmZXJlbmNlID09PSAnYWJzb2x1dGUnICYmIHNjaGVtZXMuYWxsQnlOYW1lW2lyaS5zY2hlbWVdKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufTtcbiIsCiAgICAiLy8gUmVnZXggZnJvbSBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8zMjA0NDg0Ni9yZWdleC1mb3ItaXNvLTg2MDEtZHVyYXRpb25zXG5tb2R1bGUuZXhwb3J0cyA9XG4gIC9eUCg/ISQpKFxcZCsoPzpcXC5cXGQrKT9ZKT8oXFxkKyg/OlxcLlxcZCspP00pPyhcXGQrKD86XFwuXFxkKyk/Vyk/KFxcZCsoPzpcXC5cXGQrKT9EKT8oVCg/PVxcZCkoXFxkKyg/OlxcLlxcZCspP0gpPyhcXGQrKD86XFwuXFxkKyk/TSk/KFxcZCsoPzpcXC5cXGQrKT9TKT8pPyQvO1xuIiwKICAgICJjb25zdCB7IHBhcnNlIH0gPSByZXF1aXJlKCdzbXRwLWFkZHJlc3MtcGFyc2VyJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gKHZhbHVlKSA9PiB7XG4gIHRyeSB7XG4gICAgcGFyc2UodmFsdWUpO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG4iLAogICAgInZhciBfX2NyZWF0ZT1PYmplY3QuY3JlYXRlO3ZhcntnZXRQcm90b3R5cGVPZjpfX2dldFByb3RvT2YsZGVmaW5lUHJvcGVydHk6X19kZWZQcm9wLGdldE93blByb3BlcnR5TmFtZXM6X19nZXRPd25Qcm9wTmFtZXN9PU9iamVjdDt2YXIgX19oYXNPd25Qcm9wPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksX19yZUV4cG9ydD0odGFyZ2V0LG1vZCxzZWNvbmRUYXJnZXQpPT57Zm9yKGxldCBrZXkgb2YgX19nZXRPd25Qcm9wTmFtZXMobW9kKSlpZighX19oYXNPd25Qcm9wLmNhbGwodGFyZ2V0LGtleSkmJmtleSE9PVwiZGVmYXVsdFwiKV9fZGVmUHJvcCh0YXJnZXQsa2V5LHtnZXQ6KCk9Pm1vZFtrZXldLGVudW1lcmFibGU6ITB9KTtpZihzZWNvbmRUYXJnZXQpe2ZvcihsZXQga2V5IG9mIF9fZ2V0T3duUHJvcE5hbWVzKG1vZCkpaWYoIV9faGFzT3duUHJvcC5jYWxsKHNlY29uZFRhcmdldCxrZXkpJiZrZXkhPT1cImRlZmF1bHRcIilfX2RlZlByb3Aoc2Vjb25kVGFyZ2V0LGtleSx7Z2V0OigpPT5tb2Rba2V5XSxlbnVtZXJhYmxlOiEwfSk7cmV0dXJuIHNlY29uZFRhcmdldH19LF9fdG9FU009KG1vZCxpc05vZGVNb2RlLHRhcmdldCk9Pnt0YXJnZXQ9bW9kIT1udWxsP19fY3JlYXRlKF9fZ2V0UHJvdG9PZihtb2QpKTp7fTtsZXQgdG89aXNOb2RlTW9kZXx8IW1vZHx8IW1vZC5fX2VzTW9kdWxlP19fZGVmUHJvcCh0YXJnZXQsXCJkZWZhdWx0XCIse3ZhbHVlOm1vZCxlbnVtZXJhYmxlOiEwfSk6dGFyZ2V0O2ZvcihsZXQga2V5IG9mIF9fZ2V0T3duUHJvcE5hbWVzKG1vZCkpaWYoIV9faGFzT3duUHJvcC5jYWxsKHRvLGtleSkpX19kZWZQcm9wKHRvLGtleSx7Z2V0OigpPT5tb2Rba2V5XSxlbnVtZXJhYmxlOiEwfSk7cmV0dXJuIHRvfTt2YXIgX19jb21tb25KUz0oY2IsbW9kKT0+KCk9Pihtb2R8fGNiKChtb2Q9e2V4cG9ydHM6e319KS5leHBvcnRzLG1vZCksbW9kLmV4cG9ydHMpO3ZhciBfX2V4cG9ydD0odGFyZ2V0LGFsbCk9Pntmb3IodmFyIG5hbWUgaW4gYWxsKV9fZGVmUHJvcCh0YXJnZXQsbmFtZSx7Z2V0OmFsbFtuYW1lXSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxzZXQ6KG5ld1ZhbHVlKT0+YWxsW25hbWVdPSgpPT5uZXdWYWx1ZX0pfTt2YXIgcmVxdWlyZV9wdW55Y29kZT1fX2NvbW1vbkpTKChleHBvcnRzLG1vZHVsZSk9Pnt2YXIgcmVnZXhQdW55Y29kZT0vXnhuLS0vLHJlZ2V4Tm9uQVNDSUk9L1teXFwwLVxceDdGXS8scmVnZXhTZXBhcmF0b3JzPS9bXFx4MkVcXHUzMDAyXFx1RkYwRVxcdUZGNjFdL2csZXJyb3JzPXtvdmVyZmxvdzpcIk92ZXJmbG93OiBpbnB1dCBuZWVkcyB3aWRlciBpbnRlZ2VycyB0byBwcm9jZXNzXCIsXCJub3QtYmFzaWNcIjpcIklsbGVnYWwgaW5wdXQgPj0gMHg4MCAobm90IGEgYmFzaWMgY29kZSBwb2ludClcIixcImludmFsaWQtaW5wdXRcIjpcIkludmFsaWQgaW5wdXRcIn0sZmxvb3I9TWF0aC5mbG9vcixzdHJpbmdGcm9tQ2hhckNvZGU9U3RyaW5nLmZyb21DaGFyQ29kZTtmdW5jdGlvbiBlcnJvcih0eXBlKXt0aHJvdyBSYW5nZUVycm9yKGVycm9yc1t0eXBlXSl9ZnVuY3Rpb24gbWFwKGFycmF5LGNhbGxiYWNrKXtsZXQgcmVzdWx0PVtdLGxlbmd0aD1hcnJheS5sZW5ndGg7d2hpbGUobGVuZ3RoLS0pcmVzdWx0W2xlbmd0aF09Y2FsbGJhY2soYXJyYXlbbGVuZ3RoXSk7cmV0dXJuIHJlc3VsdH1mdW5jdGlvbiBtYXBEb21haW4oZG9tYWluLGNhbGxiYWNrKXtsZXQgcGFydHM9ZG9tYWluLnNwbGl0KFwiQFwiKSxyZXN1bHQ9XCJcIjtpZihwYXJ0cy5sZW5ndGg+MSlyZXN1bHQ9cGFydHNbMF0rXCJAXCIsZG9tYWluPXBhcnRzWzFdO2RvbWFpbj1kb21haW4ucmVwbGFjZShyZWdleFNlcGFyYXRvcnMsXCIuXCIpO2xldCBsYWJlbHM9ZG9tYWluLnNwbGl0KFwiLlwiKSxlbmNvZGVkPW1hcChsYWJlbHMsY2FsbGJhY2spLmpvaW4oXCIuXCIpO3JldHVybiByZXN1bHQrZW5jb2RlZH1mdW5jdGlvbiB1Y3MyZGVjb2RlKHN0cmluZyl7bGV0IG91dHB1dD1bXSxjb3VudGVyPTAsbGVuZ3RoPXN0cmluZy5sZW5ndGg7d2hpbGUoY291bnRlcjxsZW5ndGgpe2xldCB2YWx1ZT1zdHJpbmcuY2hhckNvZGVBdChjb3VudGVyKyspO2lmKHZhbHVlPj01NTI5NiYmdmFsdWU8PTU2MzE5JiZjb3VudGVyPGxlbmd0aCl7bGV0IGV4dHJhPXN0cmluZy5jaGFyQ29kZUF0KGNvdW50ZXIrKyk7aWYoKGV4dHJhJjY0NTEyKT09NTYzMjApb3V0cHV0LnB1c2goKCh2YWx1ZSYxMDIzKTw8MTApKyhleHRyYSYxMDIzKSs2NTUzNik7ZWxzZSBvdXRwdXQucHVzaCh2YWx1ZSksY291bnRlci0tfWVsc2Ugb3V0cHV0LnB1c2godmFsdWUpfXJldHVybiBvdXRwdXR9dmFyIHVjczJlbmNvZGU9KGNvZGVQb2ludHMpPT5TdHJpbmcuZnJvbUNvZGVQb2ludCguLi5jb2RlUG9pbnRzKSxiYXNpY1RvRGlnaXQ9ZnVuY3Rpb24oY29kZVBvaW50KXtpZihjb2RlUG9pbnQ+PTQ4JiZjb2RlUG9pbnQ8NTgpcmV0dXJuIDI2Kyhjb2RlUG9pbnQtNDgpO2lmKGNvZGVQb2ludD49NjUmJmNvZGVQb2ludDw5MSlyZXR1cm4gY29kZVBvaW50LTY1O2lmKGNvZGVQb2ludD49OTcmJmNvZGVQb2ludDwxMjMpcmV0dXJuIGNvZGVQb2ludC05NztyZXR1cm4gMzZ9LGRpZ2l0VG9CYXNpYz1mdW5jdGlvbihkaWdpdCxmbGFnKXtyZXR1cm4gZGlnaXQrMjIrNzUqKGRpZ2l0PDI2KS0oKGZsYWchPTApPDw1KX0sYWRhcHQ9ZnVuY3Rpb24oZGVsdGEsbnVtUG9pbnRzLGZpcnN0VGltZSl7bGV0IGs9MDtkZWx0YT1maXJzdFRpbWU/Zmxvb3IoZGVsdGEvNzAwKTpkZWx0YT4+MSxkZWx0YSs9Zmxvb3IoZGVsdGEvbnVtUG9pbnRzKTtmb3IoO2RlbHRhPjQ1NTtrKz0zNilkZWx0YT1mbG9vcihkZWx0YS8zNSk7cmV0dXJuIGZsb29yKGsrMzYqZGVsdGEvKGRlbHRhKzM4KSl9LGRlY29kZT1mdW5jdGlvbihpbnB1dCl7bGV0IG91dHB1dD1bXSxpbnB1dExlbmd0aD1pbnB1dC5sZW5ndGgsaT0wLG49MTI4LGJpYXM9NzIsYmFzaWM9aW5wdXQubGFzdEluZGV4T2YoXCItXCIpO2lmKGJhc2ljPDApYmFzaWM9MDtmb3IobGV0IGo9MDtqPGJhc2ljOysrail7aWYoaW5wdXQuY2hhckNvZGVBdChqKT49MTI4KWVycm9yKFwibm90LWJhc2ljXCIpO291dHB1dC5wdXNoKGlucHV0LmNoYXJDb2RlQXQoaikpfWZvcihsZXQgaW5kZXg9YmFzaWM+MD9iYXNpYysxOjA7aW5kZXg8aW5wdXRMZW5ndGg7KXtsZXQgb2xkaT1pO2ZvcihsZXQgdz0xLGs9MzY7O2srPTM2KXtpZihpbmRleD49aW5wdXRMZW5ndGgpZXJyb3IoXCJpbnZhbGlkLWlucHV0XCIpO2xldCBkaWdpdD1iYXNpY1RvRGlnaXQoaW5wdXQuY2hhckNvZGVBdChpbmRleCsrKSk7aWYoZGlnaXQ+PTM2KWVycm9yKFwiaW52YWxpZC1pbnB1dFwiKTtpZihkaWdpdD5mbG9vcigoMjE0NzQ4MzY0Ny1pKS93KSllcnJvcihcIm92ZXJmbG93XCIpO2krPWRpZ2l0Knc7bGV0IHQ9azw9Ymlhcz8xOms+PWJpYXMrMjY/MjY6ay1iaWFzO2lmKGRpZ2l0PHQpYnJlYWs7bGV0IGJhc2VNaW51c1Q9MzYtdDtpZih3PmZsb29yKDIxNDc0ODM2NDcvYmFzZU1pbnVzVCkpZXJyb3IoXCJvdmVyZmxvd1wiKTt3Kj1iYXNlTWludXNUfWxldCBvdXQ9b3V0cHV0Lmxlbmd0aCsxO2lmKGJpYXM9YWRhcHQoaS1vbGRpLG91dCxvbGRpPT0wKSxmbG9vcihpL291dCk+MjE0NzQ4MzY0Ny1uKWVycm9yKFwib3ZlcmZsb3dcIik7bis9Zmxvb3IoaS9vdXQpLGklPW91dCxvdXRwdXQuc3BsaWNlKGkrKywwLG4pfXJldHVybiBTdHJpbmcuZnJvbUNvZGVQb2ludCguLi5vdXRwdXQpfSxlbmNvZGU9ZnVuY3Rpb24oaW5wdXQpe2xldCBvdXRwdXQ9W107aW5wdXQ9dWNzMmRlY29kZShpbnB1dCk7bGV0IGlucHV0TGVuZ3RoPWlucHV0Lmxlbmd0aCxuPTEyOCxkZWx0YT0wLGJpYXM9NzI7Zm9yKGxldCBjdXJyZW50VmFsdWUgb2YgaW5wdXQpaWYoY3VycmVudFZhbHVlPDEyOClvdXRwdXQucHVzaChzdHJpbmdGcm9tQ2hhckNvZGUoY3VycmVudFZhbHVlKSk7bGV0IGJhc2ljTGVuZ3RoPW91dHB1dC5sZW5ndGgsaGFuZGxlZENQQ291bnQ9YmFzaWNMZW5ndGg7aWYoYmFzaWNMZW5ndGgpb3V0cHV0LnB1c2goXCItXCIpO3doaWxlKGhhbmRsZWRDUENvdW50PGlucHV0TGVuZ3RoKXtsZXQgbT0yMTQ3NDgzNjQ3O2ZvcihsZXQgY3VycmVudFZhbHVlIG9mIGlucHV0KWlmKGN1cnJlbnRWYWx1ZT49biYmY3VycmVudFZhbHVlPG0pbT1jdXJyZW50VmFsdWU7bGV0IGhhbmRsZWRDUENvdW50UGx1c09uZT1oYW5kbGVkQ1BDb3VudCsxO2lmKG0tbj5mbG9vcigoMjE0NzQ4MzY0Ny1kZWx0YSkvaGFuZGxlZENQQ291bnRQbHVzT25lKSllcnJvcihcIm92ZXJmbG93XCIpO2RlbHRhKz0obS1uKSpoYW5kbGVkQ1BDb3VudFBsdXNPbmUsbj1tO2ZvcihsZXQgY3VycmVudFZhbHVlIG9mIGlucHV0KXtpZihjdXJyZW50VmFsdWU8biYmKytkZWx0YT4yMTQ3NDgzNjQ3KWVycm9yKFwib3ZlcmZsb3dcIik7aWYoY3VycmVudFZhbHVlPT09bil7bGV0IHE9ZGVsdGE7Zm9yKGxldCBrPTM2OztrKz0zNil7bGV0IHQ9azw9Ymlhcz8xOms+PWJpYXMrMjY/MjY6ay1iaWFzO2lmKHE8dClicmVhaztsZXQgcU1pbnVzVD1xLXQsYmFzZU1pbnVzVD0zNi10O291dHB1dC5wdXNoKHN0cmluZ0Zyb21DaGFyQ29kZShkaWdpdFRvQmFzaWModCtxTWludXNUJWJhc2VNaW51c1QsMCkpKSxxPWZsb29yKHFNaW51c1QvYmFzZU1pbnVzVCl9b3V0cHV0LnB1c2goc3RyaW5nRnJvbUNoYXJDb2RlKGRpZ2l0VG9CYXNpYyhxLDApKSksYmlhcz1hZGFwdChkZWx0YSxoYW5kbGVkQ1BDb3VudFBsdXNPbmUsaGFuZGxlZENQQ291bnQ9PT1iYXNpY0xlbmd0aCksZGVsdGE9MCwrK2hhbmRsZWRDUENvdW50fX0rK2RlbHRhLCsrbn1yZXR1cm4gb3V0cHV0LmpvaW4oXCJcIil9LHRvVW5pY29kZT1mdW5jdGlvbihpbnB1dCl7cmV0dXJuIG1hcERvbWFpbihpbnB1dCxmdW5jdGlvbihzdHJpbmcpe3JldHVybiByZWdleFB1bnljb2RlLnRlc3Qoc3RyaW5nKT9kZWNvZGUoc3RyaW5nLnNsaWNlKDQpLnRvTG93ZXJDYXNlKCkpOnN0cmluZ30pfSx0b0FTQ0lJPWZ1bmN0aW9uKGlucHV0KXtyZXR1cm4gbWFwRG9tYWluKGlucHV0LGZ1bmN0aW9uKHN0cmluZyl7cmV0dXJuIHJlZ2V4Tm9uQVNDSUkudGVzdChzdHJpbmcpP1wieG4tLVwiK2VuY29kZShzdHJpbmcpOnN0cmluZ30pfSxwdW55Y29kZT17dmVyc2lvbjpcIjIuMy4xXCIsdWNzMjp7ZGVjb2RlOnVjczJkZWNvZGUsZW5jb2RlOnVjczJlbmNvZGV9LGRlY29kZSxlbmNvZGUsdG9BU0NJSSx0b1VuaWNvZGV9O21vZHVsZS5leHBvcnRzPXB1bnljb2RlfSk7dmFyIGV4cG9ydHNfcHVueWNvZGU9e307X19leHBvcnQoZXhwb3J0c19wdW55Y29kZSx7ZGVmYXVsdDooKT0+aW1wb3J0X3B1bnljb2RlLmRlZmF1bHR9KTtfX3JlRXhwb3J0KGV4cG9ydHNfcHVueWNvZGUsX190b0VTTShyZXF1aXJlX3B1bnljb2RlKCksMSkpO3ZhciBpbXBvcnRfcHVueWNvZGU9X190b0VTTShyZXF1aXJlX3B1bnljb2RlKCksMSk7dmFyIGV4cG9ydF9kZWZhdWx0PWltcG9ydF9wdW55Y29kZS5kZWZhdWx0O2V4cG9ydHtleHBvcnRfZGVmYXVsdCBhcyBkZWZhdWx0fTsiLAogICAgImNvbnN0IHsgdG9BU0NJSSB9ID0gcmVxdWlyZSgncHVueWNvZGUnKTtcblxuY29uc3QgaG9zdG5hbWVSZWdleCA9XG4gIC9eKD89LnsxLDI1M31cXC4/JClbYS16MC05XSg/OlthLXowLTktXXswLDYxfVthLXowLTldKT8oPzpcXC5bYS16MC05XSg/OlstMC05YS16XXswLDYxfVswLTlhLXpdKT8pKlxcLj8kL2k7XG5cbm1vZHVsZS5leHBvcnRzID0gKHZhbHVlKSA9PiB7XG4gIGNvbnN0IGhvc3RuYW1lID0gdG9BU0NJSSh2YWx1ZSk7XG4gIHJldHVybiAoXG4gICAgaG9zdG5hbWUucmVwbGFjZSgvXFwuJC8sICcnKS5sZW5ndGggPD0gMjUzICYmIGhvc3RuYW1lUmVnZXgudGVzdChob3N0bmFtZSlcbiAgKTtcbn07XG4iLAogICAgImNvbnN0IHsgcGFyc2UgfSA9IHJlcXVpcmUoJ3VyaS1qcycpO1xuY29uc3QgeyBhZGRyZXNzUGFyc2VyIH0gPSByZXF1aXJlKCdzbXRwLWFkZHJlc3MtcGFyc2VyJyk7XG5jb25zdCBzY2hlbWVzID0gcmVxdWlyZSgnc2NoZW1lcycpO1xuXG5mdW5jdGlvbiB2YWxpZGF0ZShhZGRyZXNzKSB7XG4gIHRyeSB7XG4gICAgYWRkcmVzc1BhcnNlcihhZGRyZXNzKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gKHZhbHVlKSA9PiB7XG4gIGNvbnN0IGlyaSA9IHBhcnNlKHZhbHVlKTtcbiAgLy8gQWxsIHZhbGlkIElSSXMgYXJlIHZhbGlkIElSSS1yZWZlcmVuY2VzXG4gIGlmIChpcmkuc2NoZW1lID09PSAnbWFpbHRvJyAmJiBpcmkudG8uZXZlcnkodmFsaWRhdGUpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAoXG4gICAgaXJpLnJlZmVyZW5jZSA9PT0gJ2Fic29sdXRlJyAmJlxuICAgIGlyaS5wYXRoICE9PSB1bmRlZmluZWQgJiZcbiAgICBzY2hlbWVzLmFsbEJ5TmFtZVtpcmkuc2NoZW1lXVxuICApIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8vIENoZWNrIGZvciB2YWxpZCBJUkktcmVmZXJlbmNlXG5cbiAgLy8gSWYgdGhlcmUgaXMgYSBzY2hlbWUsIGl0IG11c3QgYmUgdmFsaWRcbiAgaWYgKGlyaS5zY2hlbWUgJiYgIXNjaGVtZXMuYWxsQnlOYW1lW2lyaS5zY2hlbWVdKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gQ2hlY2sgdGhlcmUncyBhIHBhdGggYW5kIGZvciBhIHByb3BlciB0eXBlIG9mIHJlZmVyZW5jZVxuICByZXR1cm4gKFxuICAgIGlyaS5wYXRoICE9PSB1bmRlZmluZWQgJiZcbiAgICAoaXJpLnJlZmVyZW5jZSA9PT0gJ3JlbGF0aXZlJyB8fFxuICAgICAgaXJpLnJlZmVyZW5jZSA9PT0gJ3NhbWUtZG9jdW1lbnQnIHx8XG4gICAgICBpcmkucmVmZXJlbmNlID09PSAndXJpJylcbiAgKTtcbn07XG4iLAogICAgIm1vZHVsZS5leHBvcnRzLmlyaSA9IHJlcXVpcmUoJy4vaXJpJyk7XG5tb2R1bGUuZXhwb3J0cy5kdXJhdGlvbiA9IHJlcXVpcmUoJy4vZHVyYXRpb24nKTtcbm1vZHVsZS5leHBvcnRzWydpZG4tZW1haWwnXSA9IHJlcXVpcmUoJy4vaWRuLWVtYWlsJyk7XG5tb2R1bGUuZXhwb3J0c1snaWRuLWhvc3RuYW1lJ10gPSByZXF1aXJlKCcuL2lkbi1ob3N0bmFtZScpO1xubW9kdWxlLmV4cG9ydHNbJ2lyaS1yZWZlcmVuY2UnXSA9IHJlcXVpcmUoJy4vaXJpLXJlZmVyZW5jZScpO1xuIiwKICAgICJjb25zdCBmb3JtYXRzID0gcmVxdWlyZSgnLi9mb3JtYXRzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gKGFqdiwgb3B0aW9ucyA9IHt9KSA9PiB7XG4gIGNvbnN0IGFsbEZvcm1hdHMgPSBPYmplY3Qua2V5cyhmb3JtYXRzKTtcbiAgbGV0IGZvcm1hdHNUb0luc3RhbGwgPSBhbGxGb3JtYXRzO1xuXG4gIGlmIChvcHRpb25zLmZvcm1hdHMpIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkob3B0aW9ucy5mb3JtYXRzKSlcbiAgICAgIHRocm93IG5ldyBFcnJvcignb3B0aW9ucy5mb3JtYXRzIG11c3QgYmUgYW4gYXJyYXknKTtcbiAgICBmb3JtYXRzVG9JbnN0YWxsID0gb3B0aW9ucy5mb3JtYXRzO1xuICB9XG5cbiAgYWxsRm9ybWF0c1xuICAgIC5maWx0ZXIoKGZvcm1hdCkgPT4gZm9ybWF0c1RvSW5zdGFsbC5pbmNsdWRlcyhmb3JtYXQpKVxuICAgIC5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgIGFqdi5hZGRGb3JtYXQoa2V5LCBmb3JtYXRzW2tleV0pO1xuICAgIH0pO1xuXG4gIHJldHVybiBhanY7XG59O1xuIiwKICAgICJpbXBvcnQgeyBjcmVhdGVSZXF1aXJlIH0gZnJvbSBcIm5vZGU6bW9kdWxlXCI7XG52YXIgX19jcmVhdGUgPSBPYmplY3QuY3JlYXRlO1xudmFyIF9fZ2V0UHJvdG9PZiA9IE9iamVjdC5nZXRQcm90b3R5cGVPZjtcbnZhciBfX2RlZlByb3AgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgX19nZXRPd25Qcm9wTmFtZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcztcbnZhciBfX2hhc093blByb3AgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuZnVuY3Rpb24gX19hY2Nlc3NQcm9wKGtleSkge1xuICByZXR1cm4gdGhpc1trZXldO1xufVxudmFyIF9fdG9FU01DYWNoZV9ub2RlO1xudmFyIF9fdG9FU01DYWNoZV9lc207XG52YXIgX190b0VTTSA9IChtb2QsIGlzTm9kZU1vZGUsIHRhcmdldCkgPT4ge1xuICB2YXIgY2FuQ2FjaGUgPSBtb2QgIT0gbnVsbCAmJiB0eXBlb2YgbW9kID09PSBcIm9iamVjdFwiO1xuICBpZiAoY2FuQ2FjaGUpIHtcbiAgICB2YXIgY2FjaGUgPSBpc05vZGVNb2RlID8gX190b0VTTUNhY2hlX25vZGUgPz89IG5ldyBXZWFrTWFwIDogX190b0VTTUNhY2hlX2VzbSA/Pz0gbmV3IFdlYWtNYXA7XG4gICAgdmFyIGNhY2hlZCA9IGNhY2hlLmdldChtb2QpO1xuICAgIGlmIChjYWNoZWQpXG4gICAgICByZXR1cm4gY2FjaGVkO1xuICB9XG4gIHRhcmdldCA9IG1vZCAhPSBudWxsID8gX19jcmVhdGUoX19nZXRQcm90b09mKG1vZCkpIDoge307XG4gIGNvbnN0IHRvID0gaXNOb2RlTW9kZSB8fCAhbW9kIHx8ICFtb2QuX19lc01vZHVsZSA/IF9fZGVmUHJvcCh0YXJnZXQsIFwiZGVmYXVsdFwiLCB7IHZhbHVlOiBtb2QsIGVudW1lcmFibGU6IHRydWUgfSkgOiB0YXJnZXQ7XG4gIGZvciAobGV0IGtleSBvZiBfX2dldE93blByb3BOYW1lcyhtb2QpKVxuICAgIGlmICghX19oYXNPd25Qcm9wLmNhbGwodG8sIGtleSkpXG4gICAgICBfX2RlZlByb3AodG8sIGtleSwge1xuICAgICAgICBnZXQ6IF9fYWNjZXNzUHJvcC5iaW5kKG1vZCwga2V5KSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZVxuICAgICAgfSk7XG4gIGlmIChjYW5DYWNoZSlcbiAgICBjYWNoZS5zZXQobW9kLCB0byk7XG4gIHJldHVybiB0bztcbn07XG52YXIgX19jb21tb25KUyA9IChjYiwgbW9kKSA9PiAoKSA9PiAobW9kIHx8IGNiKChtb2QgPSB7IGV4cG9ydHM6IHt9IH0pLmV4cG9ydHMsIG1vZCksIG1vZC5leHBvcnRzKTtcbnZhciBfX3JlcXVpcmUgPSAvKiBAX19QVVJFX18gKi8gY3JlYXRlUmVxdWlyZShpbXBvcnQubWV0YS51cmwpO1xuXG4vLyBzcmMvY29udGV4dC50c1xudmFyIEFTMl9CQVNFX0NPTlRFWFRfVVJMID0gXCJodHRwczovL3d3dy53My5vcmcvbnMvYWN0aXZpdHlzdHJlYW1zXCI7XG52YXIgU09DS0VUSFVCX0JBU0VfQ09OVEVYVF9VUkwgPSBcImh0dHBzOi8vc29ja2V0aHViLm9yZy9ucy9jb250ZXh0L3YxLmpzb25sZFwiO1xudmFyIFBMQVRGT1JNX0NPTlRFWFRfUFJFRklYID0gXCJodHRwczovL3NvY2tldGh1Yi5vcmcvbnMvY29udGV4dC9wbGF0Zm9ybS9cIjtcbnZhciBFUlJPUl9QTEFURk9STV9JRCA9IFwiZXJyb3JcIjtcbnZhciBFUlJPUl9QTEFURk9STV9DT05URVhUX1VSTCA9IFwiaHR0cHM6Ly9zb2NrZXRodWIub3JnL25zL2NvbnRleHQvcGxhdGZvcm0vZXJyb3IvdjEuanNvbmxkXCI7XG52YXIgSU5URVJOQUxfUExBVEZPUk1fSUQgPSBcInNvY2tldGh1YjppbnRlcm5hbFwiO1xudmFyIElOVEVSTkFMX1BMQVRGT1JNX0NPTlRFWFRfVVJMID0gXCJodHRwczovL3NvY2tldGh1Yi5vcmcvbnMvY29udGV4dC9wbGF0Zm9ybS9zb2NrZXRodWI6aW50ZXJuYWwvdjEuanNvbmxkXCI7XG52YXIgcGxhdGZvcm1Db250ZXh0VG9QbGF0Zm9ybUlkID0gbmV3IE1hcDtcbnZhciBwbGF0Zm9ybUNvbnRleHRUb1NjaGVtYUlkID0gbmV3IE1hcDtcbnZhciBwbGF0Zm9ybUNvbnRleHRUb0NyZWRlbnRpYWxzU2NoZW1hSWQgPSBuZXcgTWFwO1xuZnVuY3Rpb24gYnVpbGRDYW5vbmljYWxDb250ZXh0KHBsYXRmb3JtQ29udGV4dFVybCkge1xuICByZXR1cm4gW1xuICAgIEFTMl9CQVNFX0NPTlRFWFRfVVJMLFxuICAgIFNPQ0tFVEhVQl9CQVNFX0NPTlRFWFRfVVJMLFxuICAgIHBsYXRmb3JtQ29udGV4dFVybFxuICBdO1xufVxuZnVuY3Rpb24gbm9ybWFsaXplQ29udGV4dEFycmF5KHZhbHVlKSB7XG4gIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgcmV0dXJuIHZhbHVlLmZpbHRlcigoZW50cnkpID0+IHR5cGVvZiBlbnRyeSA9PT0gXCJzdHJpbmdcIik7XG59XG5mdW5jdGlvbiBnZXRDb250ZXh0QXJyYXkobXNnKSB7XG4gIHJldHVybiBub3JtYWxpemVDb250ZXh0QXJyYXkobXNnW1wiQGNvbnRleHRcIl0pO1xufVxuZnVuY3Rpb24gcmVnaXN0ZXJQbGF0Zm9ybUNvbnRleHQocGxhdGZvcm1JZCwgcGxhdGZvcm1Db250ZXh0VXJsLCBzY2hlbWFJZCwgY3JlZGVudGlhbHNTY2hlbWFJZCkge1xuICBwbGF0Zm9ybUNvbnRleHRUb1BsYXRmb3JtSWQuc2V0KHBsYXRmb3JtQ29udGV4dFVybCwgcGxhdGZvcm1JZCk7XG4gIHBsYXRmb3JtQ29udGV4dFRvU2NoZW1hSWQuc2V0KHBsYXRmb3JtQ29udGV4dFVybCwgc2NoZW1hSWQpO1xuICBwbGF0Zm9ybUNvbnRleHRUb0NyZWRlbnRpYWxzU2NoZW1hSWQuc2V0KHBsYXRmb3JtQ29udGV4dFVybCwgY3JlZGVudGlhbHNTY2hlbWFJZCk7XG59XG5mdW5jdGlvbiByZXNvbHZlUGxhdGZvcm1Db250ZXh0VXJsKG1zZykge1xuICBjb25zdCBjb250ZXh0cyA9IGdldENvbnRleHRBcnJheShtc2cpO1xuICBjb25zdCBtYXRjaGVzID0gY29udGV4dHMuZmlsdGVyKChjb250ZXh0VXJsKSA9PiBwbGF0Zm9ybUNvbnRleHRUb1BsYXRmb3JtSWQuaGFzKGNvbnRleHRVcmwpKTtcbiAgaWYgKG1hdGNoZXMubGVuZ3RoICE9PSAxKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmV0dXJuIG1hdGNoZXNbMF07XG59XG5mdW5jdGlvbiBnZXRQbGF0Zm9ybUlkQnlDb250ZXh0VXJsKHBsYXRmb3JtQ29udGV4dFVybCkge1xuICByZXR1cm4gcGxhdGZvcm1Db250ZXh0VG9QbGF0Zm9ybUlkLmdldChwbGF0Zm9ybUNvbnRleHRVcmwpO1xufVxuZnVuY3Rpb24gZ2V0U2NoZW1hSWRCeUNvbnRleHRVcmwocGxhdGZvcm1Db250ZXh0VXJsKSB7XG4gIHJldHVybiBwbGF0Zm9ybUNvbnRleHRUb1NjaGVtYUlkLmdldChwbGF0Zm9ybUNvbnRleHRVcmwpO1xufVxuZnVuY3Rpb24gZ2V0Q3JlZGVudGlhbHNTY2hlbWFJZEJ5Q29udGV4dFVybChwbGF0Zm9ybUNvbnRleHRVcmwpIHtcbiAgcmV0dXJuIHBsYXRmb3JtQ29udGV4dFRvQ3JlZGVudGlhbHNTY2hlbWFJZC5nZXQocGxhdGZvcm1Db250ZXh0VXJsKTtcbn1cbmV4cG9ydCB7XG4gIHJlc29sdmVQbGF0Zm9ybUNvbnRleHRVcmwsXG4gIHJlZ2lzdGVyUGxhdGZvcm1Db250ZXh0LFxuICBnZXRTY2hlbWFJZEJ5Q29udGV4dFVybCxcbiAgZ2V0UGxhdGZvcm1JZEJ5Q29udGV4dFVybCxcbiAgZ2V0Q3JlZGVudGlhbHNTY2hlbWFJZEJ5Q29udGV4dFVybCxcbiAgZ2V0Q29udGV4dEFycmF5LFxuICBidWlsZENhbm9uaWNhbENvbnRleHQsXG4gIFNPQ0tFVEhVQl9CQVNFX0NPTlRFWFRfVVJMLFxuICBQTEFURk9STV9DT05URVhUX1BSRUZJWCxcbiAgSU5URVJOQUxfUExBVEZPUk1fSUQsXG4gIElOVEVSTkFMX1BMQVRGT1JNX0NPTlRFWFRfVVJMLFxuICBFUlJPUl9QTEFURk9STV9JRCxcbiAgRVJST1JfUExBVEZPUk1fQ09OVEVYVF9VUkwsXG4gIEFTMl9CQVNFX0NPTlRFWFRfVVJMXG59O1xuXG4vLyMgZGVidWdJZD1CODJFQ0I5MzczQUNBNkI0NjQ3NTZFMjE2NDc1NkUyMVxuIiwKICAgICJpbXBvcnQgRXZlbnRFbWl0dGVyIGZyb20gJy4vaW5kZXguanMnXG5cbmV4cG9ydCB7IEV2ZW50RW1pdHRlciB9XG5leHBvcnQgZGVmYXVsdCBFdmVudEVtaXR0ZXJcbiIsCiAgICAiLyohXG4gKiBhY3Rpdml0eS1zdHJlYW1zXG4gKiAgIGh0dHBzOi8vZ2l0aHViLmNvbS9zaWx2ZXJidWNrZXQvYWN0aXZpdHktc3RyZWFtc1xuICpcbiAqIERldmVsb3BlZCBhbmQgTWFpbnRhaW5lZCBieTpcbiAqICAgTmljayBKZW5uaW5ncyA8bmlja0BzaWx2ZXJidWNrZXQubmV0PlxuICpcbiAqIGFjdGl2aXR5LXN0cmVhbXMgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIE1JVCAoc2VlIExJQ0VOU0UpLlxuICpcbiAqIFlvdSBkb24ndCBoYXZlIHRvIGRvIGFueXRoaW5nIHNwZWNpYWwgdG8gY2hvb3NlIG9uZSBsaWNlbnNlIG9yIHRoZSBvdGhlclxuICogYW5kIHlvdSBkb24ndCBoYXZlIHRvIG5vdGlmeSBhbnlvbmUgd2hpY2ggbGljZW5zZSB5b3UgYXJlIHVzaW5nLlxuICogUGxlYXNlIHNlZSB0aGUgY29ycmVzcG9uZGluZyBsaWNlbnNlIGZpbGUgZm9yIGRldGFpbHMgb2YgdGhlc2UgbGljZW5zZXMuXG4gKiBZb3UgYXJlIGZyZWUgdG8gdXNlLCBtb2RpZnkgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSwgYnV0IGFsbCBjb3B5cmlnaHRcbiAqIGluZm9ybWF0aW9uIG11c3QgcmVtYWluLlxuICpcbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEFjdGl2aXR5T2JqZWN0LCBBY3Rpdml0eVN0cmVhbSB9IGZyb20gXCJAc29ja2V0aHViL3NjaGVtYXNcIjtcbmltcG9ydCB7XG4gICAgQVMyX0JBU0VfQ09OVEVYVF9VUkwsXG4gICAgUExBVEZPUk1fQ09OVEVYVF9QUkVGSVgsXG4gICAgU09DS0VUSFVCX0JBU0VfQ09OVEVYVF9VUkwsXG59IGZyb20gXCJAc29ja2V0aHViL3NjaGVtYXMvY29udGV4dFwiO1xuaW1wb3J0IEV2ZW50RW1pdHRlciBmcm9tIFwiZXZlbnRlbWl0dGVyM1wiO1xuXG5jb25zdCBlZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbmNvbnN0IGJhc2VQcm9wcyA9IHtcbiAgICBzdHJlYW06IFtcbiAgICAgICAgXCJAY29udGV4dFwiLFxuICAgICAgICBcImlkXCIsXG4gICAgICAgIFwidHlwZVwiLFxuICAgICAgICBcInBsYXRmb3JtXCIsXG4gICAgICAgIFwiYWN0b3JcIixcbiAgICAgICAgXCJ0YXJnZXRcIixcbiAgICAgICAgXCJvYmplY3RcIixcbiAgICAgICAgXCJwdWJsaXNoZWRcIixcbiAgICAgICAgXCJlcnJvclwiLFxuICAgIF0sXG4gICAgb2JqZWN0OiBbXG4gICAgICAgIFwiaWRcIixcbiAgICAgICAgXCJ0eXBlXCIsXG4gICAgICAgIFwiY29udGV4dFwiLFxuICAgICAgICBcImFsaWFzXCIsXG4gICAgICAgIFwiYXR0YWNoZWRUb1wiLFxuICAgICAgICBcImF0dGFjaG1lbnRcIixcbiAgICAgICAgXCJhdHRyaWJ1dGVkVG9cIixcbiAgICAgICAgXCJhdHRyaWJ1dGVkV2l0aFwiLFxuICAgICAgICBcImNvbmRpdGlvblwiLFxuICAgICAgICBcImNvbnRlbnRcIixcbiAgICAgICAgXCJjb250ZW50TWFwXCIsXG4gICAgICAgIFwiY29udGV4dFwiLFxuICAgICAgICBcImNvbnRleHRPZlwiLFxuICAgICAgICBcIm5hbWVcIixcbiAgICAgICAgXCJlbmRUaW1lXCIsXG4gICAgICAgIFwiZ2VuZXJhdG9yXCIsXG4gICAgICAgIFwiZ2VuZXJhdG9yT2ZcIixcbiAgICAgICAgXCJncm91cFwiLFxuICAgICAgICBcImljb25cIixcbiAgICAgICAgXCJpbWFnZVwiLFxuICAgICAgICBcImluUmVwbHlUb1wiLFxuICAgICAgICBcIm1lbWJlcnNcIixcbiAgICAgICAgXCJtZW1iZXJPZlwiLFxuICAgICAgICBcIm1lc3NhZ2VcIixcbiAgICAgICAgXCJsb2NhdGlvblwiLFxuICAgICAgICBcImxvY2F0aW9uT2ZcIixcbiAgICAgICAgXCJvYmplY3RPZlwiLFxuICAgICAgICBcIm9yaWdpbk9mXCIsXG4gICAgICAgIFwicHJlc2VuY2VcIixcbiAgICAgICAgXCJwcmV2aWV3XCIsXG4gICAgICAgIFwicHJldmlld09mXCIsXG4gICAgICAgIFwicHJvdmlkZXJcIixcbiAgICAgICAgXCJwcm92aWRlck9mXCIsXG4gICAgICAgIFwicHVibGlzaGVkXCIsXG4gICAgICAgIFwicmF0aW5nXCIsXG4gICAgICAgIFwicmVsYXRpb25zaGlwXCIsXG4gICAgICAgIFwicmVzdWx0T2ZcIixcbiAgICAgICAgXCJyZXBsaWVzXCIsXG4gICAgICAgIFwicm9sZVwiLFxuICAgICAgICBcInNjb3BlXCIsXG4gICAgICAgIFwic2NvcGVPZlwiLFxuICAgICAgICBcInN0YXJ0VGltZVwiLFxuICAgICAgICBcInN0YXR1c1wiLFxuICAgICAgICBcInN1bW1hcnlcIixcbiAgICAgICAgXCJ0b3BpY1wiLFxuICAgICAgICBcInRhZ1wiLFxuICAgICAgICBcInRhZ09mXCIsXG4gICAgICAgIFwidGFyZ2V0T2ZcIixcbiAgICAgICAgXCJ0aXRsZVwiLFxuICAgICAgICBcInRpdGxlTWFwXCIsXG4gICAgICAgIFwidXBkYXRlZFwiLFxuICAgICAgICBcInVybFwiLFxuICAgICAgICBcInhtcHA6c3RhbnphLWlkXCIsXG4gICAgXSxcbn0gYXMgY29uc3Q7XG5jb25zdCBleHBhbmQgPSB7XG4gICAgYWN0b3I6IHtcbiAgICAgICAgcHJpbWFyeTogXCJpZFwiLFxuICAgICAgICBwcm9wczogYmFzZVByb3BzLFxuICAgIH0sXG4gICAgdGFyZ2V0OiB7XG4gICAgICAgIHByaW1hcnk6IFwiaWRcIixcbiAgICAgICAgcHJvcHM6IGJhc2VQcm9wcyxcbiAgICB9LFxuICAgIG9iamVjdDoge1xuICAgICAgICBwcmltYXJ5OiBcImNvbnRlbnRcIixcbiAgICAgICAgcHJvcHM6IGJhc2VQcm9wcyxcbiAgICB9LFxufSBhcyBjb25zdDtcblxudHlwZSBDdXN0b21Qcm9wcyA9IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPjtcblxudHlwZSBCYXNlUHJvcEtleSA9IGtleW9mIHR5cGVvZiBiYXNlUHJvcHM7XG5cbmNvbnN0IG9ianMgPSBuZXcgTWFwPHN0cmluZywgQWN0aXZpdHlPYmplY3Q+KCk7XG5jb25zdCBjdXN0b21Qcm9wczogQ3VzdG9tUHJvcHMgPSB7fTtcblxubGV0IGZhaWxPblVua25vd25PYmplY3RQcm9wZXJ0aWVzID0gZmFsc2U7XG5sZXQgd2Fybk9uVW5rbm93bk9iamVjdFByb3BlcnRpZXMgPSB0cnVlO1xubGV0IHNwZWNpYWxPYmpzOiBzdHJpbmdbXSA9IFtdOyAvLyB0aGUgb2JqZWN0cyBkb24ndCBnZXQgcmVqZWN0ZWQgZm9yIGJhZCBwcm9wc1xuXG5mdW5jdGlvbiBtYXRjaGVzQ3VzdG9tUHJvcCh0eXBlOiBzdHJpbmcsIGtleTogc3RyaW5nKSB7XG4gICAgY29uc3QgcHJvcHMgPSBjdXN0b21Qcm9wc1t0eXBlXTtcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheShwcm9wcykgJiYgcHJvcHMuaW5jbHVkZXMoa2V5KTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVPYmplY3QoXG4gICAgdHlwZTogQmFzZVByb3BLZXksXG4gICAgaW5jb21pbmdPYmo6IHVua25vd24sXG4gICAgcmVxdWlyZUlkID0gZmFsc2UsXG4pIHtcbiAgICAvLyBJbnB1dCB2YWxpZGF0aW9uIHdpdGggY2xlYXIgZXJyb3IgbWVzc2FnZXNcbiAgICBpZiAoaW5jb21pbmdPYmogPT09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYEFjdGl2aXR5U3RyZWFtcyB2YWxpZGF0aW9uIGZhaWxlZDogdGhlIFwiJHt0eXBlfVwiIHByb3BlcnR5IGlzIG51bGwuIEV4YW1wbGU6IHsgaWQ6IFwidXNlckBleGFtcGxlLmNvbVwiLCB0eXBlOiBcInBlcnNvblwiIH1gLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIGlmIChpbmNvbWluZ09iaiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBBY3Rpdml0eVN0cmVhbXMgdmFsaWRhdGlvbiBmYWlsZWQ6IHRoZSBcIiR7dHlwZX1cIiBwcm9wZXJ0eSBpcyB1bmRlZmluZWQuIEV4YW1wbGU6IHsgaWQ6IFwidXNlckBleGFtcGxlLmNvbVwiLCB0eXBlOiBcInBlcnNvblwiIH1gLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaW5jb21pbmdPYmogPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYEFjdGl2aXR5U3RyZWFtcyB2YWxpZGF0aW9uIGZhaWxlZDogdGhlIFwiJHt0eXBlfVwiIHByb3BlcnR5IHJlY2VpdmVkIHN0cmluZyBcIiR7aW5jb21pbmdPYmp9XCIgYnV0IGV4cGVjdGVkIGFuIG9iamVjdC4gVXNlOiB7IGlkOiBcIiR7aW5jb21pbmdPYmp9XCIsIHR5cGU6IFwicGVyc29uXCIgfWAsXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBpbmNvbWluZ09iaiAhPT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KGluY29taW5nT2JqKSkge1xuICAgICAgICBjb25zdCByZWNlaXZlZFR5cGUgPSBBcnJheS5pc0FycmF5KGluY29taW5nT2JqKVxuICAgICAgICAgICAgPyBcImFycmF5XCJcbiAgICAgICAgICAgIDogdHlwZW9mIGluY29taW5nT2JqO1xuICAgICAgICBjb25zdCByZWNlaXZlZFZhbHVlID0gU3RyaW5nKGluY29taW5nT2JqKTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYEFjdGl2aXR5U3RyZWFtcyB2YWxpZGF0aW9uIGZhaWxlZDogdGhlIFwiJHt0eXBlfVwiIHByb3BlcnR5IG11c3QgYmUgYW4gb2JqZWN0LCByZWNlaXZlZCAke3JlY2VpdmVkVHlwZX0gKCR7cmVjZWl2ZWRWYWx1ZX0pLiBFeGFtcGxlOiB7IGlkOiBcInVzZXJAZXhhbXBsZS5jb21cIiwgdHlwZTogXCJwZXJzb25cIiB9YCxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBSZXF1aXJlICdpZCcgcHJvcGVydHkgd2hlbiBleHBsaWNpdGx5IHJlcXVlc3RlZCAoZS5nLiwgT2JqZWN0LmNyZWF0ZSgpKVxuICAgIGNvbnN0IG9iaiA9IGluY29taW5nT2JqIGFzIEFjdGl2aXR5T2JqZWN0O1xuICAgIGlmIChyZXF1aXJlSWQgJiYgIW9iai5pZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgQWN0aXZpdHlTdHJlYW1zIHZhbGlkYXRpb24gZmFpbGVkOiB0aGUgXCIke3R5cGV9XCIgcHJvcGVydHkgcmVxdWlyZXMgYW4gJ2lkJyBwcm9wZXJ0eS4gRXhhbXBsZTogeyBpZDogXCJ1c2VyQGV4YW1wbGUuY29tXCIsIHR5cGU6IFwicGVyc29uXCIgfWAsXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgaW5jb21pbmdSZWNvcmQgPSBpbmNvbWluZ09iaiBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBjb25zdCBhbGxvd2VkUHJvcHMgPSBiYXNlUHJvcHNbdHlwZV0gYXMgcmVhZG9ubHkgc3RyaW5nW107XG4gICAgY29uc3QgdW5rbm93bktleXMgPSBPYmplY3Qua2V5cyhpbmNvbWluZ1JlY29yZCkuZmlsdGVyKFxuICAgICAgICAoa2V5OiBzdHJpbmcpOiBib29sZWFuID0+IHtcbiAgICAgICAgICAgIHJldHVybiAhYWxsb3dlZFByb3BzLmluY2x1ZGVzKGtleSk7XG4gICAgICAgIH0sXG4gICAgKTtcblxuICAgIGZvciAoY29uc3Qga2V5IG9mIHVua25vd25LZXlzKSB7XG4gICAgICAgIGNvbnN0IGFvID0gaW5jb21pbmdPYmogYXMgQWN0aXZpdHlPYmplY3Q7XG4gICAgICAgIGlmIChtYXRjaGVzQ3VzdG9tUHJvcChhby50eXBlLCBrZXkpKSB7XG4gICAgICAgICAgICAvLyBjdXN0b20gcHJvcGVydHkgbWF0Y2hlcywgY29udGludWVcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFzcGVjaWFsT2Jqcy5pbmNsdWRlcyhhby50eXBlKSkge1xuICAgICAgICAgICAgLy8gbm90IGRlZmluZWQgYXMgYSBzcGVjaWFsIHByb3BcbiAgICAgICAgICAgIC8vIGRvbid0IGtub3cgd2hhdCB0byBkbyB3aXRoIGl0LCBzbyB0aHJvdyBlcnJvclxuICAgICAgICAgICAgY29uc29sZS5sb2coYW8pO1xuICAgICAgICAgICAgY29uc3QgcmVjZWl2ZWRWYWx1ZSA9XG4gICAgICAgICAgICAgICAgdHlwZW9mIGFvW2tleV0gPT09IFwic3RyaW5nXCIgPyBgXCIke2FvW2tleV19XCJgIDogU3RyaW5nKGFvW2tleV0pO1xuICAgICAgICAgICAgY29uc3QgZXJyID0gYEFjdGl2aXR5U3RyZWFtcyB2YWxpZGF0aW9uIGZhaWxlZDogcHJvcGVydHkgXCIke2tleX1cIiB3aXRoIHZhbHVlICR7cmVjZWl2ZWRWYWx1ZX0gaXMgbm90IGFsbG93ZWQgb24gdGhlIFwiJHt0eXBlfVwiIG9iamVjdCBvZiB0eXBlIFwiJHthby50eXBlfVwiLmA7XG4gICAgICAgICAgICBpZiAoZmFpbE9uVW5rbm93bk9iamVjdFByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh3YXJuT25Vbmtub3duT2JqZWN0UHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG5mdW5jdGlvbiBlbnN1cmVQcm9wcyhvYmo6IEFjdGl2aXR5T2JqZWN0KTogQWN0aXZpdHlPYmplY3Qge1xuICAgIC8vIGVuc3VyZSB0aGUgbmFtZSBwcm9wZXJ0eSwgd2hpY2ggY2FuIGdlbmVyYWxseSBiZSBpbmZlcnJlZCBmcm9tIHRoZSBpZFxuICAgIC8vIG5hbWUgPSBvYmoubWF0Y2goLyg/KD9cXHcrKTpcXC9cXC8pKD86LitAKT8oLis/KSg/OlxcL3wkKS8pWzFdXG4gICAgcmV0dXJuIG9iajtcbn1cblxuZnVuY3Rpb24gZXhwYW5kU3RyZWFtKG1ldGE6IEFjdGl2aXR5U3RyZWFtKSB7XG4gICAgY29uc3Qgc3RyZWFtOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuICAgIGNvbnN0IG1ldGFSZWNvcmQgPSBtZXRhIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMobWV0YVJlY29yZCkpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBtZXRhUmVjb3JkW2tleV07XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHN0cmVhbVtrZXldID0gb2Jqcy5nZXQodmFsdWUpIHx8IHZhbHVlO1xuICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICBjb25zdCBleHBhbmRlZDogQXJyYXk8QWN0aXZpdHlPYmplY3QgfCBzdHJpbmc+ID0gW107XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBlbnRyeSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgICAgICBleHBhbmRlZC5wdXNoKG9ianMuZ2V0KGVudHJ5KSB8fCBlbnRyeSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3RyZWFtW2tleV0gPSBleHBhbmRlZDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN0cmVhbVtrZXldID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBvbmx5IGV4cGFuZCBzdHJpbmcgaW50byBvYmplY3RzIGlmIHRoZXkgYXJlIGluIHRoZSBleHBhbmQgbGlzdFxuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGV4cGFuZCkgYXMgQXJyYXk8a2V5b2YgdHlwZW9mIGV4cGFuZD4pIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBzdHJlYW1ba2V5XTtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgY29uc3QgaWR4ID0gZXhwYW5kW2tleV0ucHJpbWFyeTtcbiAgICAgICAgICAgIHN0cmVhbVtrZXldID0geyBbaWR4XTogdmFsdWUgfTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gc3RyZWFtIGFzIHVua25vd24gYXMgQWN0aXZpdHlTdHJlYW07XG59XG5cbmZ1bmN0aW9uIFN0cmVhbShcbiAgICBtZXRhOiB1bmtub3duLFxuKTogQWN0aXZpdHlTdHJlYW0gfCBBY3Rpdml0eU9iamVjdCB8IFJlY29yZDxzdHJpbmcsIG5ldmVyPiB7XG4gICAgdmFsaWRhdGVPYmplY3QoXCJzdHJlYW1cIiwgbWV0YSk7XG4gICAgaWYgKHR5cGVvZiAobWV0YSBhcyBBY3Rpdml0eVN0cmVhbSkub2JqZWN0ID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIHZhbGlkYXRlT2JqZWN0KFwib2JqZWN0XCIsIChtZXRhIGFzIEFjdGl2aXR5U3RyZWFtKS5vYmplY3QpO1xuICAgIH1cbiAgICBjb25zdCBzdHJlYW0gPSBleHBhbmRTdHJlYW0obWV0YSBhcyBBY3Rpdml0eVN0cmVhbSk7XG4gICAgZWUuZW1pdChcImFjdGl2aXR5LXN0cmVhbVwiLCBzdHJlYW0pO1xuICAgIHJldHVybiBzdHJlYW07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWN0aXZpdHlPYmplY3RNYW5hZ2VyIHtcbiAgICBjcmVhdGUob2JqOiBBY3Rpdml0eU9iamVjdCk6IEFjdGl2aXR5T2JqZWN0O1xuICAgIGRlbGV0ZShpZDogc3RyaW5nKTogYm9vbGVhbjtcbiAgICBsaXN0KCk6IEl0ZXJhYmxlSXRlcmF0b3I8c3RyaW5nPjtcbiAgICBnZXQoaWQ6IHN0cmluZywgZXhwYW5kPzogYm9vbGVhbik6IEFjdGl2aXR5T2JqZWN0IHwgc3RyaW5nO1xufVxuXG5jb25zdCBfT2JqZWN0OiBBY3Rpdml0eU9iamVjdE1hbmFnZXIgPSB7XG4gICAgY3JlYXRlOiAob2JqOiBBY3Rpdml0eU9iamVjdCkgPT4ge1xuICAgICAgICB2YWxpZGF0ZU9iamVjdChcIm9iamVjdFwiLCBvYmosIHRydWUpOyAvLyByZXF1aXJlIElEIGZvciBPYmplY3QuY3JlYXRlKClcbiAgICAgICAgY29uc3QgYW8gPSBlbnN1cmVQcm9wcyhvYmopO1xuICAgICAgICBvYmpzLnNldChhby5pZCwgYW8pO1xuICAgICAgICBlZS5lbWl0KFwiYWN0aXZpdHktb2JqZWN0LWNyZWF0ZVwiLCBhbyk7XG4gICAgICAgIHJldHVybiBhbztcbiAgICB9LFxuXG4gICAgZGVsZXRlOiAoaWQpID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gb2Jqcy5kZWxldGUoaWQpO1xuICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICBlZS5lbWl0KFwiYWN0aXZpdHktb2JqZWN0LWRlbGV0ZVwiLCBpZCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgZ2V0OiAoaWQsIGV4cGFuZCkgPT4ge1xuICAgICAgICBsZXQgb2JqID0gb2Jqcy5nZXQoaWQpO1xuICAgICAgICBpZiAoIW9iaikge1xuICAgICAgICAgICAgaWYgKCFleHBhbmQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvYmogPSB7IGlkOiBpZCB9IGFzIEFjdGl2aXR5T2JqZWN0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlbnN1cmVQcm9wcyhvYmopO1xuICAgIH0sXG5cbiAgICBsaXN0OiAoKTogSXRlcmFibGVJdGVyYXRvcjxzdHJpbmc+ID0+IG9ianMua2V5cygpLFxufTtcblxuZXhwb3J0IGludGVyZmFjZSBBU0ZhY3RvcnlPcHRpb25zIHtcbiAgICBzcGVjaWFsT2Jqcz86IEFycmF5PHN0cmluZz47XG4gICAgZmFpbE9uVW5rbm93bk9iamVjdFByb3BlcnRpZXM/OiBib29sZWFuO1xuICAgIHdhcm5PblVua25vd25PYmplY3RQcm9wZXJ0aWVzPzogYm9vbGVhbjtcbiAgICBjdXN0b21Qcm9wcz86IEN1c3RvbVByb3BzO1xufVxuXG50eXBlIEV2ZW50Q2FsbGJhY2sgPSAoLi4uYXJnczogdW5rbm93bltdKSA9PiB2b2lkO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFTTWFuYWdlciB7XG4gICAgU3RyZWFtKG1ldGE6IEFjdGl2aXR5U3RyZWFtIHwgdW5rbm93bik6IEFjdGl2aXR5U3RyZWFtIHwgQWN0aXZpdHlPYmplY3Q7XG4gICAgT2JqZWN0OiBBY3Rpdml0eU9iamVjdE1hbmFnZXI7XG4gICAgb24oZXZlbnQ6IHN0cmluZywgZnVuYzogRXZlbnRDYWxsYmFjayk6IHZvaWQ7XG4gICAgb25jZShldmVudDogc3RyaW5nLCBmdW5jOiBFdmVudENhbGxiYWNrKTogdm9pZDtcbiAgICBvZmYoZXZlbnQ6IHN0cmluZywgZnVuYzogRXZlbnRDYWxsYmFjayk6IHZvaWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBBU0ZhY3Rvcnkob3B0czogQVNGYWN0b3J5T3B0aW9ucyA9IHt9KTogQVNNYW5hZ2VyIHtcbiAgICBzcGVjaWFsT2JqcyA9IG9wdHM/LnNwZWNpYWxPYmpzIHx8IFtdO1xuICAgIGZhaWxPblVua25vd25PYmplY3RQcm9wZXJ0aWVzID1cbiAgICAgICAgdHlwZW9mIG9wdHMuZmFpbE9uVW5rbm93bk9iamVjdFByb3BlcnRpZXMgPT09IFwiYm9vbGVhblwiXG4gICAgICAgICAgICA/IG9wdHMuZmFpbE9uVW5rbm93bk9iamVjdFByb3BlcnRpZXNcbiAgICAgICAgICAgIDogZmFpbE9uVW5rbm93bk9iamVjdFByb3BlcnRpZXM7XG4gICAgd2Fybk9uVW5rbm93bk9iamVjdFByb3BlcnRpZXMgPVxuICAgICAgICB0eXBlb2Ygb3B0cy53YXJuT25Vbmtub3duT2JqZWN0UHJvcGVydGllcyA9PT0gXCJib29sZWFuXCJcbiAgICAgICAgICAgID8gb3B0cy53YXJuT25Vbmtub3duT2JqZWN0UHJvcGVydGllc1xuICAgICAgICAgICAgOiB3YXJuT25Vbmtub3duT2JqZWN0UHJvcGVydGllcztcbiAgICBjb25zdCBjdXN0b21Qcm9wc0NvbmZpZyA9IG9wdHMuY3VzdG9tUHJvcHMgfHwge307XG4gICAgZm9yIChjb25zdCBwcm9wTmFtZSBvZiBPYmplY3Qua2V5cyhjdXN0b21Qcm9wc0NvbmZpZykpIHtcbiAgICAgICAgY3VzdG9tUHJvcHNbcHJvcE5hbWVdID0gY3VzdG9tUHJvcHNDb25maWdbcHJvcE5hbWVdO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAgIFN0cmVhbTogU3RyZWFtLFxuICAgICAgICBPYmplY3Q6IF9PYmplY3QsXG4gICAgICAgIG9uOiAoZXZlbnQsIGZ1bmMpID0+IGVlLm9uKGV2ZW50LCBmdW5jKSxcbiAgICAgICAgb25jZTogKGV2ZW50LCBmdW5jKSA9PiBlZS5vbmNlKGV2ZW50LCBmdW5jKSxcbiAgICAgICAgb2ZmOiAoZXZlbnQsIGZ1bmNOYW1lKSA9PiBlZS5vZmYoZXZlbnQsIGZ1bmNOYW1lKSxcbiAgICB9IGFzIEFTTWFuYWdlcjtcbn1cblxuKChnbG9iYWw6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA9PiB7XG4gICAgZ2xvYmFsLkFTRmFjdG9yID0gQVNGYWN0b3J5O1xufSkoXG4gICAgdHlwZW9mIGdsb2JhbFRoaXMgPT09IFwib2JqZWN0XCJcbiAgICAgICAgPyAoZ2xvYmFsVGhpcyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilcbiAgICAgICAgOiB7fSxcbik7XG5cbmV4cG9ydCB7XG4gICAgQVMyX0JBU0VfQ09OVEVYVF9VUkwsXG4gICAgUExBVEZPUk1fQ09OVEVYVF9QUkVGSVgsXG4gICAgU09DS0VUSFVCX0JBU0VfQ09OVEVYVF9VUkwsXG59O1xuXG4vKipcbiAqIEJ1aWxkIHRoZSBjYW5vbmljYWwgU29ja2V0aHViIEBjb250ZXh0IGFycmF5IGZvciBhIHBsYXRmb3JtIG5hbWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZENhbm9uaWNhbENvbnRleHQocGxhdGZvcm06IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBwbGF0Zm9ybVVybCA9IHBsYXRmb3JtLnN0YXJ0c1dpdGgoXCJodHRwczovL1wiKVxuICAgICAgICA/IHBsYXRmb3JtXG4gICAgICAgIDogYCR7UExBVEZPUk1fQ09OVEVYVF9QUkVGSVh9JHtwbGF0Zm9ybX0vdjEuanNvbmxkYDtcbiAgICByZXR1cm4gW0FTMl9CQVNFX0NPTlRFWFRfVVJMLCBTT0NLRVRIVUJfQkFTRV9DT05URVhUX1VSTCwgcGxhdGZvcm1VcmxdO1xufVxuXG4vKipcbiAqIEV4dHJhY3QgdGhlIHBsYXRmb3JtIElEIGZyb20gYSBjYW5vbmljYWwgQGNvbnRleHQgYXJyYXkuXG4gKiBSZXR1cm5zIHVuZGVmaW5lZCBpZiBubyBwbGF0Zm9ybSBjb250ZXh0IFVSTCBpcyBmb3VuZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBsYXRmb3JtSWRGcm9tQ29udGV4dChcbiAgICBjb250ZXh0OiBzdHJpbmdbXSB8IHVua25vd24sXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShjb250ZXh0KSkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGNvbnRleHQpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdHlwZW9mIGVudHJ5ID09PSBcInN0cmluZ1wiICYmXG4gICAgICAgICAgICBlbnRyeS5zdGFydHNXaXRoKFBMQVRGT1JNX0NPTlRFWFRfUFJFRklYKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3QgPSBlbnRyeS5zbGljZShQTEFURk9STV9DT05URVhUX1BSRUZJWC5sZW5ndGgpO1xuICAgICAgICAgICAgY29uc3Qgc2xhc2hJZHggPSByZXN0LmluZGV4T2YoXCIvXCIpO1xuICAgICAgICAgICAgaWYgKHNsYXNoSWR4ID4gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN0LnNsaWNlKDAsIHNsYXNoSWR4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufVxuIiwKICAgICJpbXBvcnQgdHlwZSB7IEFjdGl2aXR5U3RyZWFtLCBKc29uTGRDb250ZXh0IH0gZnJvbSBcIi4vdHlwZXMuanNcIjtcblxuLyoqXG4gKiBDYW5vbmljYWwgQVMyIGJhc2Ugdm9jYWJ1bGFyeSBVUkwuXG4gKi9cbmV4cG9ydCBjb25zdCBBUzJfQkFTRV9DT05URVhUX1VSTCA9IFwiaHR0cHM6Ly93d3cudzMub3JnL25zL2FjdGl2aXR5c3RyZWFtc1wiO1xuXG4vKipcbiAqIFNvY2tldGh1YiBiYXNlIHZvY2FidWxhcnkgVVJMIGZvciBzaGFyZWQgcGxhdGZvcm0gdGVybXMuXG4gKi9cbmV4cG9ydCBjb25zdCBTT0NLRVRIVUJfQkFTRV9DT05URVhUX1VSTCA9XG4gICAgXCJodHRwczovL3NvY2tldGh1Yi5vcmcvbnMvY29udGV4dC92MS5qc29ubGRcIjtcblxuLyoqXG4gKiBVUkwgcHJlZml4IGZvciBwZXItcGxhdGZvcm0gY29udGV4dCBVUkxzLlxuICovXG5leHBvcnQgY29uc3QgUExBVEZPUk1fQ09OVEVYVF9QUkVGSVggPVxuICAgIFwiaHR0cHM6Ly9zb2NrZXRodWIub3JnL25zL2NvbnRleHQvcGxhdGZvcm0vXCI7XG5cbi8qKlxuICogQnVpbHQtaW4gcHNldWRvLXBsYXRmb3JtIHVzZWQgZm9yIHNlcnZlci1zaWRlIGVycm9yIHBheWxvYWRzLlxuICovXG5leHBvcnQgY29uc3QgRVJST1JfUExBVEZPUk1fSUQgPSBcImVycm9yXCI7XG5leHBvcnQgY29uc3QgRVJST1JfUExBVEZPUk1fQ09OVEVYVF9VUkwgPVxuICAgIFwiaHR0cHM6Ly9zb2NrZXRodWIub3JnL25zL2NvbnRleHQvcGxhdGZvcm0vZXJyb3IvdjEuanNvbmxkXCI7XG5cbi8qKlxuICogQnVpbHQtaW4gcHNldWRvLXBsYXRmb3JtIHVzZWQgZm9yIGludGVybmFsIGNvbnRyb2wgbWVzc2FnZXMuXG4gKi9cbmV4cG9ydCBjb25zdCBJTlRFUk5BTF9QTEFURk9STV9JRCA9IFwic29ja2V0aHViOmludGVybmFsXCI7XG5leHBvcnQgY29uc3QgSU5URVJOQUxfUExBVEZPUk1fQ09OVEVYVF9VUkwgPVxuICAgIFwiaHR0cHM6Ly9zb2NrZXRodWIub3JnL25zL2NvbnRleHQvcGxhdGZvcm0vc29ja2V0aHViOmludGVybmFsL3YxLmpzb25sZFwiO1xuXG5jb25zdCBwbGF0Zm9ybUNvbnRleHRUb1BsYXRmb3JtSWQgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuY29uc3QgcGxhdGZvcm1Db250ZXh0VG9TY2hlbWFJZCA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG5jb25zdCBwbGF0Zm9ybUNvbnRleHRUb0NyZWRlbnRpYWxzU2NoZW1hSWQgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuXG4vKipcbiAqIEJ1aWxkIHRoZSBjYW5vbmljYWwgU29ja2V0aHViIEBjb250ZXh0IGFycmF5IGZvciBhIHBsYXRmb3JtIGNvbnRleHQgVVJMLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRDYW5vbmljYWxDb250ZXh0KFxuICAgIHBsYXRmb3JtQ29udGV4dFVybDogc3RyaW5nLFxuKTogSnNvbkxkQ29udGV4dCB7XG4gICAgcmV0dXJuIFtcbiAgICAgICAgQVMyX0JBU0VfQ09OVEVYVF9VUkwsXG4gICAgICAgIFNPQ0tFVEhVQl9CQVNFX0NPTlRFWFRfVVJMLFxuICAgICAgICBwbGF0Zm9ybUNvbnRleHRVcmwsXG4gICAgXTtcbn1cblxuLyoqXG4gKiBOb3JtYWxpemUgdW5rbm93biBAY29udGV4dCBpbnB1dCBpbnRvIGEgc3RyaW5nLW9ubHkgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZUNvbnRleHRBcnJheSh2YWx1ZTogdW5rbm93bik6IEFycmF5PHN0cmluZz4ge1xuICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWUuZmlsdGVyKChlbnRyeSk6IGVudHJ5IGlzIHN0cmluZyA9PiB0eXBlb2YgZW50cnkgPT09IFwic3RyaW5nXCIpO1xufVxuXG4vKipcbiAqIEdldCBhIG5vcm1hbGl6ZWQgQGNvbnRleHQgYXJyYXkgZnJvbSBhbiBhY3Rpdml0eSBzdHJlYW0uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb250ZXh0QXJyYXkobXNnOiBBY3Rpdml0eVN0cmVhbSk6IEFycmF5PHN0cmluZz4ge1xuICAgIHJldHVybiBub3JtYWxpemVDb250ZXh0QXJyYXkobXNnW1wiQGNvbnRleHRcIl0pO1xufVxuXG4vKipcbiAqIFJlZ2lzdGVyIGEgcGxhdGZvcm0gY29udGV4dCBVUkwgYW5kIGl0cyBzY2hlbWEgSURzIGZvciBydW50aW1lIHJlc29sdXRpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RlclBsYXRmb3JtQ29udGV4dChcbiAgICBwbGF0Zm9ybUlkOiBzdHJpbmcsXG4gICAgcGxhdGZvcm1Db250ZXh0VXJsOiBzdHJpbmcsXG4gICAgc2NoZW1hSWQ6IHN0cmluZyxcbiAgICBjcmVkZW50aWFsc1NjaGVtYUlkOiBzdHJpbmcsXG4pIHtcbiAgICBwbGF0Zm9ybUNvbnRleHRUb1BsYXRmb3JtSWQuc2V0KHBsYXRmb3JtQ29udGV4dFVybCwgcGxhdGZvcm1JZCk7XG4gICAgcGxhdGZvcm1Db250ZXh0VG9TY2hlbWFJZC5zZXQocGxhdGZvcm1Db250ZXh0VXJsLCBzY2hlbWFJZCk7XG4gICAgcGxhdGZvcm1Db250ZXh0VG9DcmVkZW50aWFsc1NjaGVtYUlkLnNldChcbiAgICAgICAgcGxhdGZvcm1Db250ZXh0VXJsLFxuICAgICAgICBjcmVkZW50aWFsc1NjaGVtYUlkLFxuICAgICk7XG59XG5cbi8qKlxuICogUmVzb2x2ZSB0aGUgc2luZ2xlIHJlZ2lzdGVyZWQgcGxhdGZvcm0gY29udGV4dCBVUkwgZnJvbSBhIG1lc3NhZ2UuXG4gKiBSZXR1cm5zIG51bGwgd2hlbiB0aGVyZSBhcmUgemVybyBvciBtdWx0aXBsZSByZWdpc3RlcmVkIHBsYXRmb3JtIGNvbnRleHRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZVBsYXRmb3JtQ29udGV4dFVybChtc2c6IEFjdGl2aXR5U3RyZWFtKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgY29uc3QgY29udGV4dHMgPSBnZXRDb250ZXh0QXJyYXkobXNnKTtcbiAgICBjb25zdCBtYXRjaGVzID0gY29udGV4dHMuZmlsdGVyKChjb250ZXh0VXJsKSA9PlxuICAgICAgICBwbGF0Zm9ybUNvbnRleHRUb1BsYXRmb3JtSWQuaGFzKGNvbnRleHRVcmwpLFxuICAgICk7XG4gICAgaWYgKG1hdGNoZXMubGVuZ3RoICE9PSAxKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gbWF0Y2hlc1swXTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlIGEgcGxhdGZvcm0gSUQgZnJvbSBhIHBsYXRmb3JtIGNvbnRleHQgVVJMLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGxhdGZvcm1JZEJ5Q29udGV4dFVybChcbiAgICBwbGF0Zm9ybUNvbnRleHRVcmw6IHN0cmluZyxcbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHBsYXRmb3JtQ29udGV4dFRvUGxhdGZvcm1JZC5nZXQocGxhdGZvcm1Db250ZXh0VXJsKTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlIGEgbWVzc2FnZSBzY2hlbWEgSUQgZnJvbSBhIHBsYXRmb3JtIGNvbnRleHQgVVJMLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2NoZW1hSWRCeUNvbnRleHRVcmwoXG4gICAgcGxhdGZvcm1Db250ZXh0VXJsOiBzdHJpbmcsXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiBwbGF0Zm9ybUNvbnRleHRUb1NjaGVtYUlkLmdldChwbGF0Zm9ybUNvbnRleHRVcmwpO1xufVxuXG4vKipcbiAqIFJlc29sdmUgYSBjcmVkZW50aWFscyBzY2hlbWEgSUQgZnJvbSBhIHBsYXRmb3JtIGNvbnRleHQgVVJMLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3JlZGVudGlhbHNTY2hlbWFJZEJ5Q29udGV4dFVybChcbiAgICBwbGF0Zm9ybUNvbnRleHRVcmw6IHN0cmluZyxcbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHBsYXRmb3JtQ29udGV4dFRvQ3JlZGVudGlhbHNTY2hlbWFJZC5nZXQocGxhdGZvcm1Db250ZXh0VXJsKTtcbn1cbiIsCiAgICAiZXhwb3J0IGNvbnN0IHZhbGlkT2JqZWN0UmVmczogQXJyYXk8eyAkcmVmOiBzdHJpbmcgfT4gPSBbXTtcbmV4cG9ydCBjb25zdCB2YWxpZE9iamVjdERlZnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG5cbmV4cG9ydCBjb25zdCBPYmplY3RUeXBlc1NjaGVtYSA9IHtcbiAgICBjcmVkZW50aWFsczoge1xuICAgICAgICByZXF1aXJlZDogW1widHlwZVwiXSxcbiAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IHRydWUsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICBlbnVtOiBbXCJjcmVkZW50aWFsc1wiXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcblxuICAgIGZlZWQ6IHtcbiAgICAgICAgcmVxdWlyZWQ6IFtcImlkXCIsIFwidHlwZVwiXSxcbiAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IHRydWUsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICBlbnVtOiBbXCJmZWVkXCJdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlkOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgICBmb3JtYXQ6IFwiaXJpXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbmFtZToge1xuICAgICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGF1dGhvcjoge1xuICAgICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZmF2aWNvbjoge1xuICAgICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG5cbiAgICBtZXNzYWdlOiB7XG4gICAgICAgIHJlcXVpcmVkOiBbXCJ0eXBlXCIsIFwiY29udGVudFwiXSxcbiAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IHRydWUsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICBlbnVtOiBbXCJtZXNzYWdlXCJdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlkOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBuYW1lOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250ZW50OiB7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcblxuICAgIG1lOiB7XG4gICAgICAgIHJlcXVpcmVkOiBbXCJ0eXBlXCIsIFwiY29udGVudFwiXSxcbiAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IHRydWUsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICBlbnVtOiBbXCJtZVwiXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250ZW50OiB7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcblxuICAgIHBlcnNvbjoge1xuICAgICAgICByZXF1aXJlZDogW1wiaWRcIiwgXCJ0eXBlXCJdLFxuICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogdHJ1ZSxcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgaWQ6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICBlbnVtOiBbXCJwZXJzb25cIl0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbmFtZToge1xuICAgICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG5cbiAgICByb29tOiB7XG4gICAgICAgIHJlcXVpcmVkOiBbXCJpZFwiLCBcInR5cGVcIl0sXG4gICAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiB0cnVlLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBpZDoge1xuICAgICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgIGVudW06IFtcInJvb21cIl0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbmFtZToge1xuICAgICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG5cbiAgICBzZXJ2aWNlOiB7XG4gICAgICAgIHJlcXVpcmVkOiBbXCJpZFwiLCBcInR5cGVcIl0sXG4gICAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiB0cnVlLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBpZDoge1xuICAgICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgIGVudW06IFtcInNlcnZpY2VcIl0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbmFtZToge1xuICAgICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG5cbiAgICBwbGF0Zm9ybToge1xuICAgICAgICByZXF1aXJlZDogW1wiaWRcIiwgXCJ0eXBlXCJdLFxuICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogdHJ1ZSxcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgaWQ6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICBlbnVtOiBbXCJwbGF0Zm9ybVwiXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBuYW1lOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcblxuICAgIHdlYnNpdGU6IHtcbiAgICAgICAgcmVxdWlyZWQ6IFtcImlkXCIsIFwidHlwZVwiXSxcbiAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IHRydWUsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGlkOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgICBmb3JtYXQ6IFwiaXJpXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgIGVudW06IFtcIndlYnNpdGVcIl0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbmFtZToge1xuICAgICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG5cbiAgICBhdHRlbmRhbmNlOiB7XG4gICAgICAgIHJlcXVpcmVkOiBbXCJ0eXBlXCJdLFxuICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICBlbnVtOiBbXCJhdHRlbmRhbmNlXCJdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG1lbWJlcnM6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcImFycmF5XCIsXG4gICAgICAgICAgICAgICAgaXRlbXM6IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxuXG4gICAgcHJlc2VuY2U6IHtcbiAgICAgICAgcmVxdWlyZWQ6IFtcInR5cGVcIl0sXG4gICAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZSxcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgIGVudW06IFtcInByZXNlbmNlXCJdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByZXNlbmNlOiB7XG4gICAgICAgICAgICAgICAgZW51bTogW1wiYXdheVwiLCBcImNoYXRcIiwgXCJkbmRcIiwgXCJ4YVwiLCBcIm9mZmxpbmVcIiwgXCJvbmxpbmVcIl0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcm9sZToge1xuICAgICAgICAgICAgICAgIGVudW06IFtcIm93bmVyXCIsIFwibWVtYmVyXCIsIFwicGFydGljaXBhbnRcIiwgXCJhZG1pblwiXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250ZW50OiB7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcblxuICAgIC8vIGluc3BpcmVkIGJ5IGh0dHBzOi8vd3d3LnczLm9yZy9ucy9hY3Rpdml0eXN0cmVhbXMjUmVsYXRpb25zaGlwXG4gICAgcmVsYXRpb25zaGlwOiB7XG4gICAgICAgIHJlcXVpcmVkOiBbXCJ0eXBlXCIsIFwicmVsYXRpb25zaGlwXCJdLFxuICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICBlbnVtOiBbXCJyZWxhdGlvbnNoaXBcIl0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVsYXRpb25zaGlwOiB7XG4gICAgICAgICAgICAgICAgZW51bTogW1wicm9sZVwiXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzdWJqZWN0OiB7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgICAgICAgICAgICBvbmVPZjogW3sgJHJlZjogXCIjL2RlZmluaXRpb25zL3R5cGUvcHJlc2VuY2VcIiB9XSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvYmplY3Q6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgICAgIG9uZU9mOiB2YWxpZE9iamVjdFJlZnMsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG5cbiAgICB0b3BpYzoge1xuICAgICAgICByZXF1aXJlZDogW1widHlwZVwiXSxcbiAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgZW51bTogW1widG9waWNcIl0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29udGVudDoge1xuICAgICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG5cbiAgICBhZGRyZXNzOiB7XG4gICAgICAgIHJlcXVpcmVkOiBbXCJ0eXBlXCJdLFxuICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICBlbnVtOiBbXCJhZGRyZXNzXCJdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxuXG4gICAgaGVhcnRiZWF0OiB7XG4gICAgICAgIHJlcXVpcmVkOiBbXCJ0eXBlXCIsIFwidGltZXN0YW1wXCJdLFxuICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICBlbnVtOiBbXCJoZWFydGJlYXRcIl0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdGltZXN0YW1wOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJudW1iZXJcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5cbi8vIEludGVybmFsIEFTIG9iamVjdCB0eXBlcyByZXNlcnZlZCBmb3IgU29ja2V0aHViIElQQy9ob3VzZWtlZXBpbmcuXG5leHBvcnQgY29uc3QgSW50ZXJuYWxPYmplY3RUeXBlc0xpc3QgPSBbXCJwbGF0Zm9ybVwiLCBcImhlYXJ0YmVhdFwiXTtcbmV4cG9ydCBjb25zdCBPYmplY3RUeXBlc0xpc3QgPSBPYmplY3Qua2V5cyhPYmplY3RUeXBlc1NjaGVtYSk7XG5leHBvcnQgY29uc3QgQWN0b3JUeXBlc0xpc3QgPSBbXG4gICAgXCJwZXJzb25cIixcbiAgICBcInJvb21cIixcbiAgICBcInNlcnZpY2VcIixcbiAgICBcImZlZWRcIixcbiAgICBcIndlYnNpdGVcIixcbiAgICBcInBsYXRmb3JtXCIsXG5dO1xuZXhwb3J0IGNvbnN0IFRhcmdldFR5cGVzTGlzdCA9IFtcbiAgICBcInBlcnNvblwiLFxuICAgIFwicm9vbVwiLFxuICAgIFwic2VydmljZVwiLFxuICAgIFwiZmVlZFwiLFxuICAgIFwid2Vic2l0ZVwiLFxuICAgIFwicGxhdGZvcm1cIixcbiAgICBcImFkZHJlc3NcIixcbl07XG5leHBvcnQgY29uc3QgdmFsaWRBY3RvclJlZnMgPSBBY3RvclR5cGVzTGlzdC5tYXAoKHR5cGUpID0+ICh7XG4gICAgJHJlZjogYCMvZGVmaW5pdGlvbnMvdHlwZS8ke3R5cGV9YCxcbn0pKTtcbmV4cG9ydCBjb25zdCB2YWxpZFRhcmdldFJlZnMgPSBUYXJnZXRUeXBlc0xpc3QubWFwKCh0eXBlKSA9PiAoe1xuICAgICRyZWY6IGAjL2RlZmluaXRpb25zL3R5cGUvJHt0eXBlfWAsXG59KSk7XG5cbmZvciAoY29uc3QgdHlwZSBvZiBPYmplY3RUeXBlc0xpc3QpIHtcbiAgICBpZiAodHlwZSA9PT0gXCJjcmVkZW50aWFsc1wiKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICB2YWxpZE9iamVjdFJlZnMucHVzaCh7ICRyZWY6IGAjL2RlZmluaXRpb25zL3R5cGUvJHt0eXBlfWAgfSk7XG4gICAgdmFsaWRPYmplY3REZWZzW3R5cGVdID0gKE9iamVjdFR5cGVzU2NoZW1hIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVtcbiAgICAgICAgdHlwZVxuICAgIF07XG59XG4iLAogICAgImltcG9ydCB7IHZhbGlkT2JqZWN0RGVmcywgdmFsaWRPYmplY3RSZWZzIH0gZnJvbSBcIi4uL2hlbHBlcnMvb2JqZWN0cy5qc1wiO1xuXG5leHBvcnQgY29uc3QgQWN0aXZpdHlPYmplY3RTY2hlbWEgPSB7XG4gICAgJGlkOiBcImh0dHBzOi8vc29ja2V0aHViLm9yZy9zY2hlbWFzL3YvYWN0aXZpdHktb2JqZWN0Lmpzb25cIixcbiAgICBkZXNjcmlwdGlvbjogXCJTY2hlbWEgZm9yIFNvY2tldGh1YiBBY3Rpdml0eSBPYmplY3RzXCIsXG5cbiAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgIHJlcXVpcmVkOiBbXCJvYmplY3RcIl0sXG4gICAgcHJvcGVydGllczoge1xuICAgICAgICBvYmplY3Q6IHtcbiAgICAgICAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICAgICAgICBvbmVPZjogdmFsaWRPYmplY3RSZWZzLFxuICAgICAgICB9LFxuICAgIH0sXG5cbiAgICBkZWZpbml0aW9uczoge1xuICAgICAgICB0eXBlOiB2YWxpZE9iamVjdERlZnMsXG4gICAgfSxcbn07XG4iLAogICAgImltcG9ydCB7XG4gICAgQVMyX0JBU0VfQ09OVEVYVF9VUkwsXG4gICAgU09DS0VUSFVCX0JBU0VfQ09OVEVYVF9VUkwsXG59IGZyb20gXCIuLi9jb250ZXh0LmpzXCI7XG5pbXBvcnQge1xuICAgIE9iamVjdFR5cGVzTGlzdCxcbiAgICBPYmplY3RUeXBlc1NjaGVtYSxcbiAgICB2YWxpZEFjdG9yUmVmcyxcbiAgICB2YWxpZFRhcmdldFJlZnMsXG59IGZyb20gXCIuLi9oZWxwZXJzL29iamVjdHMuanNcIjtcblxuY29uc3QgdmFsaWRPYmplY3RSZWZzID0gW107XG5cbmZvciAoY29uc3QgdHlwZSBvZiBPYmplY3RUeXBlc0xpc3QpIHtcbiAgICB2YWxpZE9iamVjdFJlZnMucHVzaCh7ICRyZWY6IGAjL2RlZmluaXRpb25zL3R5cGUvJHt0eXBlfWAgfSk7XG59XG5cbmNvbnN0IGNvbnRleHRTY2hlbWEgPSB7XG4gICAgdHlwZTogXCJhcnJheVwiLFxuICAgIG1pbkl0ZW1zOiAzLFxuICAgIG1heEl0ZW1zOiAzLFxuICAgIGl0ZW1zOiB7XG4gICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgfSxcbiAgICBhbGxPZjogW1xuICAgICAgICB7XG4gICAgICAgICAgICBjb250YWluczoge1xuICAgICAgICAgICAgICAgIGNvbnN0OiBBUzJfQkFTRV9DT05URVhUX1VSTCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRhaW5zOiB7XG4gICAgICAgICAgICAgICAgY29uc3Q6IFNPQ0tFVEhVQl9CQVNFX0NPTlRFWFRfVVJMLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICBdLFxufTtcbmNvbnN0IHR5cGVTY2hlbWEgPSB7XG4gICAgdHlwZTogXCJzdHJpbmdcIixcbn07XG5cbmV4cG9ydCBjb25zdCBBY3Rpdml0eVN0cmVhbVNjaGVtYSA9IHtcbiAgICAkaWQ6IFwiaHR0cHM6Ly9zb2NrZXRodWIub3JnL3NjaGVtYXMvdi9hY3Rpdml0eS1zdHJlYW0uanNvblwiLFxuICAgIGRlc2NyaXB0aW9uOiBcIlNjaGVtYSBmb3IgU29ja2V0aHViIEFjdGl2aXR5IFN0cmVhbXNcIixcblxuICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgcmVxdWlyZWQ6IFtcIkBjb250ZXh0XCIsIFwidHlwZVwiLCBcImFjdG9yXCJdLFxuICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgXCJAY29udGV4dFwiOiBjb250ZXh0U2NoZW1hLFxuICAgICAgICBpZDoge1xuICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICAgICAgdHlwZTogdHlwZVNjaGVtYSxcbiAgICAgICAgYWN0b3I6IHtcbiAgICAgICAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICAgICAgICBvbmVPZjogdmFsaWRBY3RvclJlZnMsXG4gICAgICAgIH0sXG4gICAgICAgIHRhcmdldDoge1xuICAgICAgICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgICAgICAgIG9uZU9mOiB2YWxpZFRhcmdldFJlZnMsXG4gICAgICAgIH0sXG4gICAgICAgIG9iamVjdDoge1xuICAgICAgICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgICAgICAgIG9uZU9mOiB2YWxpZE9iamVjdFJlZnMsXG4gICAgICAgIH0sXG4gICAgICAgIHB1Ymxpc2hlZDoge1xuICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIGZvcm1hdDogXCJkYXRlLXRpbWVcIixcbiAgICAgICAgfSxcbiAgICB9LFxuXG4gICAgZGVmaW5pdGlvbnM6IHtcbiAgICAgICAgdHlwZTogT2JqZWN0VHlwZXNTY2hlbWEsXG4gICAgfSxcbn07XG4iLAogICAgImNvbnN0IGNvbm5lY3RDb25maWdQbGF0Zm9ybXMgPSB7XG4gICAgY29ubmVjdFRpbWVvdXRNczoge1xuICAgICAgICB0eXBlOiBcIm51bWJlclwiLFxuICAgIH0sXG59O1xuXG5leHBvcnQgY29uc3QgU29ja2V0aHViQ29uZmlnU2NoZW1hID0ge1xuICAgICRpZDogXCJodHRwczovL3NvY2tldGh1Yi5vcmcvc2NoZW1hcy92L3NvY2tldGh1Yi1jb25maWcuanNvblwiLFxuICAgIGRlc2NyaXB0aW9uOiBcIlNvY2tldGh1YiBDb25maWcgU2NoZW1hXCIsXG4gICAgdHlwZTogXCJvYmplY3RcIixcbiAgICByZXF1aXJlZDogW1wicGxhdGZvcm1zXCJdLFxuICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZSxcbiAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICRzY2hlbWE6IHtcbiAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgICAgIGV4YW1wbGVzOiB7XG4gICAgICAgICAgICB0eXBlOiBcImJvb2xlYW5cIixcbiAgICAgICAgICAgIGRlZmF1bHQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIGxvZ2dpbmc6IHtcbiAgICAgICAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UsXG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgICAgbGV2ZWw6IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgICAgICAgZW51bTogW1wiZXJyb3JcIiwgXCJ3YXJuXCIsIFwiaW5mb1wiLCBcImRlYnVnXCJdLFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBcImluZm9cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGZpbGVMZXZlbDoge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICAgICAgICBlbnVtOiBbXCJlcnJvclwiLCBcIndhcm5cIiwgXCJpbmZvXCIsIFwiZGVidWdcIl0sXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFwiZGVidWdcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGZpbGU6IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogXCJzb2NrZXRodWIubG9nXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHBhY2thZ2VDb25maWc6IHtcbiAgICAgICAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgICAgXCJAc29ja2V0aHViL2FjdGl2aXR5LXN0cmVhbXNcIjoge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpYWxPYmpzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJhcnJheVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBbXCJjcmVkZW50aWFsc1wiXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBmYWlsT25Vbmtub3duT2JqZWN0UHJvcGVydGllczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgXCJAc29ja2V0aHViL3BsYXRmb3JtLWR1bW15XCI6IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBncmVldGluZzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogXCJIZWxsb1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFwiQHNvY2tldGh1Yi9wbGF0Zm9ybS1mZWVkc1wiOiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4uY29ubmVjdENvbmZpZ1BsYXRmb3JtcyxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFwiQHNvY2tldGh1Yi9wbGF0Zm9ybS1pcmNcIjoge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLmNvbm5lY3RDb25maWdQbGF0Zm9ybXMsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBcIkBzb2NrZXRodWIvcGxhdGZvcm0teG1wcFwiOiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4uY29ubmVjdENvbmZpZ1BsYXRmb3JtcyxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgcGxhdGZvcm1zOiB7XG4gICAgICAgICAgICB0eXBlOiBcImFycmF5XCIsXG4gICAgICAgICAgICBpdGVtczoge1xuICAgICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGVmYXVsdDogW1xuICAgICAgICAgICAgICAgIFwiQHNvY2tldGh1Yi9wbGF0Zm9ybS1kdW1teVwiLFxuICAgICAgICAgICAgICAgIFwiQHNvY2tldGh1Yi9wbGF0Zm9ybS1mZWVkc1wiLFxuICAgICAgICAgICAgICAgIFwiQHNvY2tldGh1Yi9wbGF0Zm9ybS1pcmNcIixcbiAgICAgICAgICAgICAgICBcIkBzb2NrZXRodWIvcGxhdGZvcm0tbWV0YWRhdGFcIixcbiAgICAgICAgICAgICAgICBcIkBzb2NrZXRodWIvcGxhdGZvcm0teG1wcFwiLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgcHVibGljOiB7XG4gICAgICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlLFxuICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICAgIHByb3RvY29sOiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFwiaHR0cFwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgaG9zdDoge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBcImxvY2FsaG9zdFwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgcG9ydDoge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcIm51bWJlclwiLFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiAxMDU1MCxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHBhdGg6IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogXCIvXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHJhdGVMaW1pdGVyOiB7XG4gICAgICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlLFxuICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICAgIHdpbmRvd01zOiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwibnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IDEwMDAsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBtYXhSZXF1ZXN0czoge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcIm51bWJlclwiLFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiAxMDAsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBibG9ja0R1cmF0aW9uTXM6IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJudW1iZXJcIixcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogNTAwMCxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgcmVkaXM6IHtcbiAgICAgICAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UsXG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgICAgdXJsOiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFwicmVkaXM6Ly8xMjcuMC4wLjE6NjM3OVwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgY29ubmVjdFRpbWVvdXQ6IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJudW1iZXJcIixcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogMTAwMDAsXG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIkNvbm5lY3Rpb24gdGltZW91dCBpbiBtaWxsaXNlY29uZHNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGRpc2Nvbm5lY3RUaW1lb3V0OiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwibnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IDUwMDAsXG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIkRpc2Nvbm5lY3QgdGltZW91dCBpbiBtaWxsaXNlY29uZHNcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG1heFJldHJpZXNQZXJSZXF1ZXN0OiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFtcIm51bWJlclwiLCBcIm51bGxcIl0sXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IG51bGwgYXMgbnVtYmVyIHwgbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgICAgICAgICAgICAgICAgICBcIk1heGltdW0gbnVtYmVyIG9mIHJldHJpZXMgcGVyIHJlcXVlc3QgKG51bGwgZm9yIEJ1bGxNUSBkZWZhdWx0KVwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBzZW50cnk6IHtcbiAgICAgICAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UsXG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgICAgZHNuOiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFwiXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB0cmFjZVNhbXBsZVJhdGU6IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJudW1iZXJcIixcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogMS4wLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBzb2NrZXRodWI6IHtcbiAgICAgICAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UsXG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgICAgcG9ydDoge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcIm51bWJlclwiLFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiAxMDU1MCxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGhvc3Q6IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogXCJsb2NhbGhvc3RcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHBhdGg6IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogXCIvc29ja2V0aHViXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHBsYXRmb3JtSGVhcnRiZWF0OiB7XG4gICAgICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlLFxuICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICAgIGludGVydmFsTXM6IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJudW1iZXJcIixcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogNTAwMCxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHRpbWVvdXRNczoge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcIm51bWJlclwiLFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiAxNTAwMCxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbiIsCiAgICAiaW1wb3J0IEFqdiwgeyB0eXBlIFNjaGVtYSB9IGZyb20gXCJhanZcIjtcbmltcG9ydCBhZGRGb3JtYXRzIGZyb20gXCJhanYtZm9ybWF0c1wiO1xuaW1wb3J0IGFkZGl0aW9uc0Zvcm1hdHMyMDE5IGZyb20gXCJhanYtZm9ybWF0cy1kcmFmdDIwMTlcIjtcbmltcG9ydCB7XG4gICAgRVJST1JfUExBVEZPUk1fQ09OVEVYVF9VUkwsXG4gICAgRVJST1JfUExBVEZPUk1fSUQsXG4gICAgZ2V0Q3JlZGVudGlhbHNTY2hlbWFJZEJ5Q29udGV4dFVybCxcbiAgICBnZXRQbGF0Zm9ybUlkQnlDb250ZXh0VXJsLFxuICAgIGdldFNjaGVtYUlkQnlDb250ZXh0VXJsLFxuICAgIElOVEVSTkFMX1BMQVRGT1JNX0NPTlRFWFRfVVJMLFxuICAgIElOVEVSTkFMX1BMQVRGT1JNX0lELFxuICAgIHJlZ2lzdGVyUGxhdGZvcm1Db250ZXh0LFxuICAgIHJlc29sdmVQbGF0Zm9ybUNvbnRleHRVcmwsXG59IGZyb20gXCIuL2NvbnRleHQuanNcIjtcbmltcG9ydCBnZXRFcnJvck1lc3NhZ2UsIHtcbiAgICB0eXBlIFZhbGlkYXRpb25FcnJvck9wdGlvbnMsXG59IGZyb20gXCIuL2hlbHBlcnMvZXJyb3ItcGFyc2VyLmpzXCI7XG5pbXBvcnQgeyBBY3Rpdml0eU9iamVjdFNjaGVtYSB9IGZyb20gXCIuL3NjaGVtYXMvYWN0aXZpdHktb2JqZWN0LmpzXCI7XG5pbXBvcnQgeyBBY3Rpdml0eVN0cmVhbVNjaGVtYSB9IGZyb20gXCIuL3NjaGVtYXMvYWN0aXZpdHktc3RyZWFtLmpzXCI7XG5pbXBvcnQgeyBQbGF0Zm9ybVNjaGVtYSB9IGZyb20gXCIuL3NjaGVtYXMvcGxhdGZvcm0uanNcIjtcbmltcG9ydCB0eXBlIHsgQWN0aXZpdHlPYmplY3QsIEFjdGl2aXR5U3RyZWFtIH0gZnJvbSBcIi4vdHlwZXMuanNcIjtcblxuY29uc3QgYWp2ID0gbmV3IEFqdih7IHN0cmljdFR5cGVzOiBmYWxzZSwgYWxsRXJyb3JzOiB0cnVlIH0pO1xuYWRkRm9ybWF0cyhhanYgYXMgdW5rbm93biBhcyBQYXJhbWV0ZXJzPHR5cGVvZiBhZGRGb3JtYXRzPlswXSk7XG5hZGRpdGlvbnNGb3JtYXRzMjAxOShhanYgYXMgdW5rbm93biBhcyBBanYpO1xuXG50eXBlIFNjaGVtYXNEaWN0ID0gUmVjb3JkPHN0cmluZywgU2NoZW1hPjtcblxuY29uc3Qgc2NoZW1hVVJMID0gXCJodHRwczovL3NvY2tldGh1Yi5vcmcvc2NoZW1hcy92MFwiO1xuY29uc3Qgc2NoZW1hczogU2NoZW1hc0RpY3QgPSB7fTtcbmxldCB2YWxpZGF0aW9uRXJyb3JPcHRpb25zOiBWYWxpZGF0aW9uRXJyb3JPcHRpb25zID0ge307XG5sZXQgc3lzdGVtQ29udGV4dHNSZWdpc3RlcmVkID0gZmFsc2U7XG5cbnNjaGVtYXNbYCR7c2NoZW1hVVJMfS9hY3Rpdml0eS1zdHJlYW1gXSA9IEFjdGl2aXR5U3RyZWFtU2NoZW1hO1xuc2NoZW1hc1tgJHtzY2hlbWFVUkx9L2FjdGl2aXR5LW9iamVjdGBdID0gQWN0aXZpdHlPYmplY3RTY2hlbWE7XG5cbmZvciAoY29uc3QgdXJpIGluIHNjaGVtYXMpIHtcbiAgICBhanYuYWRkU2NoZW1hKHNjaGVtYXNbdXJpXSwgdXJpKTtcbn1cblxuZnVuY3Rpb24gcmVnaXN0ZXJTeXN0ZW1Db250ZXh0KHBsYXRmb3JtSWQ6IHN0cmluZywgY29udGV4dFVybDogc3RyaW5nKTogdm9pZCB7XG4gICAgcmVnaXN0ZXJQbGF0Zm9ybUNvbnRleHQoXG4gICAgICAgIHBsYXRmb3JtSWQsXG4gICAgICAgIGNvbnRleHRVcmwsXG4gICAgICAgIGAke3NjaGVtYVVSTH0vY29udGV4dC8ke3BsYXRmb3JtSWR9L21lc3NhZ2VzYCxcbiAgICAgICAgYCR7c2NoZW1hVVJMfS9jb250ZXh0LyR7cGxhdGZvcm1JZH0vY3JlZGVudGlhbHNgLFxuICAgICk7XG5cbiAgICBjb25zdCBtZXNzYWdlU2NoZW1hUmVmID0gYCR7c2NoZW1hVVJMfS9jb250ZXh0LyR7cGxhdGZvcm1JZH0vbWVzc2FnZXNgO1xuICAgIGlmICghYWp2LmdldFNjaGVtYShtZXNzYWdlU2NoZW1hUmVmKSkge1xuICAgICAgICBhanYuYWRkU2NoZW1hKHt9LCBtZXNzYWdlU2NoZW1hUmVmKTtcbiAgICB9XG5cbiAgICBjb25zdCBjcmVkZW50aWFsc1NjaGVtYVJlZiA9IGAke3NjaGVtYVVSTH0vY29udGV4dC8ke3BsYXRmb3JtSWR9L2NyZWRlbnRpYWxzYDtcbiAgICBpZiAoIWFqdi5nZXRTY2hlbWEoY3JlZGVudGlhbHNTY2hlbWFSZWYpKSB7XG4gICAgICAgIGFqdi5hZGRTY2hlbWEoe30sIGNyZWRlbnRpYWxzU2NoZW1hUmVmKTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RlclN5c3RlbVBsYXRmb3JtQ29udGV4dHMoKTogdm9pZCB7XG4gICAgaWYgKHN5c3RlbUNvbnRleHRzUmVnaXN0ZXJlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHJlZ2lzdGVyU3lzdGVtQ29udGV4dChFUlJPUl9QTEFURk9STV9JRCwgRVJST1JfUExBVEZPUk1fQ09OVEVYVF9VUkwpO1xuICAgIHJlZ2lzdGVyU3lzdGVtQ29udGV4dChJTlRFUk5BTF9QTEFURk9STV9JRCwgSU5URVJOQUxfUExBVEZPUk1fQ09OVEVYVF9VUkwpO1xuICAgIHN5c3RlbUNvbnRleHRzUmVnaXN0ZXJlZCA9IHRydWU7XG59XG5cbnJlZ2lzdGVyU3lzdGVtUGxhdGZvcm1Db250ZXh0cygpO1xuXG5mdW5jdGlvbiBoYW5kbGVWYWxpZGF0aW9uKFxuICAgIHNjaGVtYVJlZjogc3RyaW5nLFxuICAgIG1zZzogQWN0aXZpdHlTdHJlYW0gfCBBY3Rpdml0eU9iamVjdCxcbiAgICBpc09iamVjdCA9IGZhbHNlLFxuKTogc3RyaW5nIHtcbiAgICBjb25zdCB2YWxpZGF0b3IgPSBhanYuZ2V0U2NoZW1hKHNjaGVtYVJlZik7XG4gICAgaWYgKCF2YWxpZGF0b3IpIHtcbiAgICAgICAgcmV0dXJuIGBzY2hlbWEgJHtzY2hlbWFSZWZ9IG5vdCBmb3VuZGA7XG4gICAgfVxuICAgIGxldCByZXN1bHQ6IGJvb2xlYW4gfCBQcm9taXNlPHVua25vd24+O1xuICAgIGlmIChpc09iamVjdCkge1xuICAgICAgICByZXN1bHQgPSB2YWxpZGF0b3IoeyBvYmplY3Q6IG1zZyB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bHQgPSB2YWxpZGF0b3IobXNnKTtcbiAgICB9XG4gICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgICAgbGV0IGVycm9yTWVzc2FnZSA9IGdldEVycm9yTWVzc2FnZShcbiAgICAgICAgICAgIG1zZyxcbiAgICAgICAgICAgIHZhbGlkYXRvci5lcnJvcnMsXG4gICAgICAgICAgICB2YWxpZGF0aW9uRXJyb3JPcHRpb25zLFxuICAgICAgICApO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSgobXNnIGFzIEFjdGl2aXR5U3RyZWFtKVtcIkBjb250ZXh0XCJdKSkge1xuICAgICAgICAgICAgY29uc3QgcGxhdGZvcm1Db250ZXh0VXJsID0gcmVzb2x2ZVBsYXRmb3JtQ29udGV4dFVybChcbiAgICAgICAgICAgICAgICBtc2cgYXMgQWN0aXZpdHlTdHJlYW0sXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKHBsYXRmb3JtQ29udGV4dFVybCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBsYXRmb3JtSWQgPVxuICAgICAgICAgICAgICAgICAgICBnZXRQbGF0Zm9ybUlkQnlDb250ZXh0VXJsKHBsYXRmb3JtQ29udGV4dFVybCk7XG4gICAgICAgICAgICAgICAgaWYgKHBsYXRmb3JtSWQpIHtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gYFske3BsYXRmb3JtSWR9XSAke2Vycm9yTWVzc2FnZX1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZXJyb3JNZXNzYWdlO1xuICAgIH1cbiAgICByZXR1cm4gXCJcIjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldFZhbGlkYXRpb25FcnJvck9wdGlvbnMoXG4gICAgb3B0aW9uczogVmFsaWRhdGlvbkVycm9yT3B0aW9ucyxcbik6IHZvaWQge1xuICAgIHZhbGlkYXRpb25FcnJvck9wdGlvbnMgPSB7IC4uLnZhbGlkYXRpb25FcnJvck9wdGlvbnMsIC4uLm9wdGlvbnMgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlQWN0aXZpdHlPYmplY3QobXNnOiBBY3Rpdml0eU9iamVjdCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGhhbmRsZVZhbGlkYXRpb24oYCR7c2NoZW1hVVJMfS9hY3Rpdml0eS1vYmplY3RgLCBtc2csIHRydWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVBY3Rpdml0eVN0cmVhbShtc2c6IEFjdGl2aXR5U3RyZWFtKTogc3RyaW5nIHtcbiAgICBjb25zdCBzdHJlYW1WYWxpZGF0aW9uRXJyb3IgPSBoYW5kbGVWYWxpZGF0aW9uKFxuICAgICAgICBgJHtzY2hlbWFVUkx9L2FjdGl2aXR5LXN0cmVhbWAsXG4gICAgICAgIG1zZyxcbiAgICApO1xuICAgIGlmIChzdHJlYW1WYWxpZGF0aW9uRXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIHN0cmVhbVZhbGlkYXRpb25FcnJvcjtcbiAgICB9XG4gICAgY29uc3QgcGxhdGZvcm1Db250ZXh0VXJsID0gcmVzb2x2ZVBsYXRmb3JtQ29udGV4dFVybChtc2cpO1xuICAgIGlmICghcGxhdGZvcm1Db250ZXh0VXJsKSB7XG4gICAgICAgIHJldHVybiBcImFjdGl2aXR5IHN0cmVhbXMgbXVzdCBoYXZlIGV4YWN0bHkgb25lIHJlZ2lzdGVyZWQgcGxhdGZvcm0gY29udGV4dCBVUkwgaW4gQGNvbnRleHRcIjtcbiAgICB9XG4gICAgY29uc3Qgc2NoZW1hSWQgPSBnZXRTY2hlbWFJZEJ5Q29udGV4dFVybChwbGF0Zm9ybUNvbnRleHRVcmwpO1xuICAgIGlmICghc2NoZW1hSWQpIHtcbiAgICAgICAgcmV0dXJuIGBwbGF0Zm9ybSBjb250ZXh0IFVSTCAke3BsYXRmb3JtQ29udGV4dFVybH0gZG9lcyBub3QgaGF2ZSBhIHJlZ2lzdGVyZWQgbWVzc2FnZSBzY2hlbWFgO1xuICAgIH1cbiAgICByZXR1cm4gaGFuZGxlVmFsaWRhdGlvbihzY2hlbWFJZCwgbXNnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlQ3JlZGVudGlhbHMobXNnOiBBY3Rpdml0eVN0cmVhbSk6IHN0cmluZyB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KG1zZ1tcIkBjb250ZXh0XCJdKSkge1xuICAgICAgICByZXR1cm4gXCJjcmVkZW50aWFsIGFjdGl2aXR5IHN0cmVhbXMgbXVzdCBoYXZlIGFuIEBjb250ZXh0IHNldFwiO1xuICAgIH1cbiAgICBpZiAobXNnLnR5cGUgIT09IFwiY3JlZGVudGlhbHNcIikge1xuICAgICAgICByZXR1cm4gXCJjcmVkZW50aWFsIGFjdGl2aXR5IHN0cmVhbXMgbXVzdCBoYXZlIGNyZWRlbnRpYWxzIHNldCBhcyB0eXBlXCI7XG4gICAgfVxuICAgIGNvbnN0IHN0cmVhbVZhbGlkYXRpb25FcnJvciA9IGhhbmRsZVZhbGlkYXRpb24oXG4gICAgICAgIGAke3NjaGVtYVVSTH0vYWN0aXZpdHktc3RyZWFtYCxcbiAgICAgICAgbXNnLFxuICAgICk7XG4gICAgaWYgKHN0cmVhbVZhbGlkYXRpb25FcnJvcikge1xuICAgICAgICByZXR1cm4gc3RyZWFtVmFsaWRhdGlvbkVycm9yO1xuICAgIH1cbiAgICBjb25zdCBwbGF0Zm9ybUNvbnRleHRVcmwgPSByZXNvbHZlUGxhdGZvcm1Db250ZXh0VXJsKG1zZyk7XG4gICAgaWYgKCFwbGF0Zm9ybUNvbnRleHRVcmwpIHtcbiAgICAgICAgcmV0dXJuIFwiY3JlZGVudGlhbCBhY3Rpdml0eSBzdHJlYW1zIG11c3QgaGF2ZSBleGFjdGx5IG9uZSByZWdpc3RlcmVkIHBsYXRmb3JtIGNvbnRleHQgVVJMIGluIEBjb250ZXh0XCI7XG4gICAgfVxuICAgIGNvbnN0IGNyZWRlbnRpYWxzU2NoZW1hSWQgPVxuICAgICAgICBnZXRDcmVkZW50aWFsc1NjaGVtYUlkQnlDb250ZXh0VXJsKHBsYXRmb3JtQ29udGV4dFVybCk7XG4gICAgaWYgKCFjcmVkZW50aWFsc1NjaGVtYUlkKSB7XG4gICAgICAgIHJldHVybiBgcGxhdGZvcm0gY29udGV4dCBVUkwgJHtwbGF0Zm9ybUNvbnRleHRVcmx9IGRvZXMgbm90IGhhdmUgYSByZWdpc3RlcmVkIGNyZWRlbnRpYWxzIHNjaGVtYWA7XG4gICAgfVxuICAgIHJldHVybiBoYW5kbGVWYWxpZGF0aW9uKGNyZWRlbnRpYWxzU2NoZW1hSWQsIG1zZyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVBsYXRmb3JtU2NoZW1hKHNjaGVtYTogU2NoZW1hKTogc3RyaW5nIHtcbiAgICBjb25zdCB2YWxpZGF0ZSA9IGFqdi5jb21waWxlKFBsYXRmb3JtU2NoZW1hKTtcbiAgICAvLyB2YWxpZGF0ZSBzY2hlbWEgcHJvcGVydHlcbiAgICBjb25zdCBlcnIgPSB2YWxpZGF0ZShzY2hlbWEpO1xuICAgIGlmICghZXJyKSB7XG4gICAgICAgIHJldHVybiBgcGxhdGZvcm0gc2NoZW1hIGZhaWxlZCB0byB2YWxpZGF0ZTogJHt2YWxpZGF0ZS5lcnJvcnNbMF0uaW5zdGFuY2VQYXRofSAke3ZhbGlkYXRlLmVycm9yc1swXS5tZXNzYWdlfWA7XG4gICAgfVxuICAgIHJldHVybiBcIlwiO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYWRkUGxhdGZvcm1TY2hlbWEoc2NoZW1hOiBTY2hlbWEsIHBsYXRmb3JtX3R5cGU6IHN0cmluZykge1xuICAgIGNvbnN0IHNjaGVtYVJlZiA9IGAke3NjaGVtYVVSTH0vY29udGV4dC8ke3BsYXRmb3JtX3R5cGV9YDtcbiAgICBpZiAoIWFqdi5nZXRTY2hlbWEoc2NoZW1hUmVmKSkge1xuICAgICAgICBhanYuYWRkU2NoZW1hKHNjaGVtYSwgc2NoZW1hUmVmKTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQbGF0Zm9ybVNjaGVtYShwbGF0Zm9ybV90eXBlOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYWp2LmdldFNjaGVtYShgJHtzY2hlbWFVUkx9L2NvbnRleHQvJHtwbGF0Zm9ybV90eXBlfWApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYWRkUGxhdGZvcm1Db250ZXh0KFxuICAgIHBsYXRmb3JtSWQ6IHN0cmluZyxcbiAgICBwbGF0Zm9ybUNvbnRleHRVcmw6IHN0cmluZyxcbikge1xuICAgIHJlZ2lzdGVyUGxhdGZvcm1Db250ZXh0KFxuICAgICAgICBwbGF0Zm9ybUlkLFxuICAgICAgICBwbGF0Zm9ybUNvbnRleHRVcmwsXG4gICAgICAgIGAke3NjaGVtYVVSTH0vY29udGV4dC8ke3BsYXRmb3JtSWR9L21lc3NhZ2VzYCxcbiAgICAgICAgYCR7c2NoZW1hVVJMfS9jb250ZXh0LyR7cGxhdGZvcm1JZH0vY3JlZGVudGlhbHNgLFxuICAgICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlUGxhdGZvcm1JZChtc2c6IEFjdGl2aXR5U3RyZWFtKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgY29uc3QgcGxhdGZvcm1Db250ZXh0VXJsID0gcmVzb2x2ZVBsYXRmb3JtQ29udGV4dFVybChtc2cpO1xuICAgIGlmIChwbGF0Zm9ybUNvbnRleHRVcmwpIHtcbiAgICAgICAgY29uc3QgaWQgPSBnZXRQbGF0Zm9ybUlkQnlDb250ZXh0VXJsKHBsYXRmb3JtQ29udGV4dFVybCk7XG4gICAgICAgIGlmIChpZCkgcmV0dXJuIGlkO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIG1zZy5wbGF0Zm9ybSA9PT0gXCJzdHJpbmdcIiAmJiBtc2cucGxhdGZvcm0pIHtcbiAgICAgICAgcmV0dXJuIG1zZy5wbGF0Zm9ybTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG59XG4iLAogICAgImltcG9ydCB0eXBlIHsgRXJyb3JPYmplY3QgfSBmcm9tIFwiYWp2XCI7XG5pbXBvcnQgdHlwZSB7IEFjdGl2aXR5T2JqZWN0LCBBY3Rpdml0eVN0cmVhbSB9IGZyb20gXCIuLi90eXBlcy5qc1wiO1xuaW1wb3J0IHsgQWN0b3JUeXBlc0xpc3QsIE9iamVjdFR5cGVzTGlzdCwgVGFyZ2V0VHlwZXNMaXN0IH0gZnJvbSBcIi4vb2JqZWN0cy5qc1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFZhbGlkYXRpb25FcnJvck9wdGlvbnMge1xuICAgIGV4Y2x1ZGVUeXBlcz86IEFycmF5PHN0cmluZz47XG59XG5cbmludGVyZmFjZSBUeXBlQnJlYWtkb3duIHtcbiAgICBhY3RvcjogQXJyYXk8c3RyaW5nPjtcbiAgICBvYmplY3Q6IEFycmF5PHN0cmluZz47XG4gICAgdGFyZ2V0OiBBcnJheTxzdHJpbmc+O1xufVxuXG5mdW5jdGlvbiBwYXJzZU1zZyhlcnJvcjogRXJyb3JPYmplY3QpOiBzdHJpbmcge1xuICAgIGxldCBlcnIgPSBgJHtcbiAgICAgICAgZXJyb3IuaW5zdGFuY2VQYXRoID8gZXJyb3IuaW5zdGFuY2VQYXRoIDogXCJhY3Rpdml0eSBzdHJlYW1cIlxuICAgIH06ICR7ZXJyb3IubWVzc2FnZX1gO1xuICAgIGlmIChlcnJvci5rZXl3b3JkID09PSBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCIpIHtcbiAgICAgICAgZXJyICs9IGA6ICR7ZXJyb3IucGFyYW1zLmFkZGl0aW9uYWxQcm9wZXJ0eX1gO1xuICAgIH0gZWxzZSBpZiAoZXJyb3Iua2V5d29yZCA9PT0gXCJlbnVtXCIpIHtcbiAgICAgICAgZXJyICs9IGA6ICR7ZXJyb3IucGFyYW1zLmFsbG93ZWRWYWx1ZXMuam9pbihcIiwgXCIpfWA7XG4gICAgfVxuICAgIHJldHVybiBlcnI7XG59XG5cbmZ1bmN0aW9uIGdldFR5cGVMaXN0KG1zZzogQWN0aXZpdHlTdHJlYW0gfCBBY3Rpdml0eU9iamVjdCk6IEFycmF5PHN0cmluZz4ge1xuICAgIGNvbnN0IHR5cGVzOiBBcnJheTxzdHJpbmc+ID0gW107XG4gICAgaWYgKG1zZz8udHlwZSkge1xuICAgICAgICB0eXBlcy5wdXNoKG1zZy50eXBlKTtcbiAgICB9XG4gICAgY29uc3QgcmVjb3JkID0gbXNnIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIGZvciAoY29uc3QgcHJvcCBpbiByZWNvcmQpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSByZWNvcmRbcHJvcF07XG4gICAgICAgIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiYgXCJ0eXBlXCIgaW4gdmFsdWUpIHtcbiAgICAgICAgICAgIHR5cGVzLnB1c2goXG4gICAgICAgICAgICAgICAgLi4uZ2V0VHlwZUxpc3QodmFsdWUgYXMgQWN0aXZpdHlTdHJlYW0gfCBBY3Rpdml0eU9iamVjdCksXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0eXBlcztcbn1cblxuZnVuY3Rpb24gZ2V0U2NoZW1hVHlwZShlcnJvcjogRXJyb3JPYmplY3QpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHNjaGVtYVR5cGVSZXMgPSBlcnJvci5zY2hlbWFQYXRoLm1hdGNoKC8jXFwvXFx3K1xcL1xcdytcXC8oW1xcdy1dKylcXC8vKTtcbiAgICByZXR1cm4gc2NoZW1hVHlwZVJlcyA/IHNjaGVtYVR5cGVSZXNbMV0gOiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGdldEVyclR5cGUoZXJyb3I6IEVycm9yT2JqZWN0KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBlcnJUeXBlUmVzID0gZXJyb3IuaW5zdGFuY2VQYXRoLm1hdGNoKC9cXC8oXFx3KykvKTtcbiAgICByZXR1cm4gZXJyVHlwZVJlcyA/IGVyclR5cGVSZXNbMV0gOiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGdldFBhcnRzQ291bnQoZXJyb3I6IEVycm9yT2JqZWN0LCB0eXBlczogVHlwZUJyZWFrZG93bik6IG51bWJlciB7XG4gICAgY29uc3Qgc2NoZW1hVHlwZSA9IGdldFNjaGVtYVR5cGUoZXJyb3IpO1xuICAgIGNvbnN0IGVyclR5cGUgPSBnZXRFcnJUeXBlKGVycm9yKTtcbiAgICBpZiAoIWVyclR5cGUpIHtcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgIH1cbiAgICBjb25zdCB0eXBlTGlzdCA9ICh0eXBlcyBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIEFycmF5PHN0cmluZz4+KVtcbiAgICAgICAgZXJyVHlwZVxuICAgIF07XG4gICAgaWYgKCF0eXBlTGlzdCkge1xuICAgICAgICByZXR1cm4gLTE7XG4gICAgfVxuICAgIGlmICghc2NoZW1hVHlwZSB8fCAhdHlwZUxpc3QuaW5jbHVkZXMoc2NoZW1hVHlwZSkpIHtcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgIH1cbiAgICBjb25zdCBwYXJ0cyA9IGVycm9yLmluc3RhbmNlUGF0aC5zcGxpdChcIi9cIik7XG4gICAgcmV0dXJuIHBhcnRzLmxlbmd0aDtcbn1cblxuZnVuY3Rpb24gZ2V0VHlwZXMobXNnOiBBY3Rpdml0eVN0cmVhbSB8IEFjdGl2aXR5T2JqZWN0KTogVHlwZUJyZWFrZG93biB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KChtc2cgYXMgQWN0aXZpdHlTdHJlYW0pW1wiQGNvbnRleHRcIl0pKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBhY3RvcjogW10sXG4gICAgICAgICAgICB0YXJnZXQ6IFtdLFxuICAgICAgICAgICAgb2JqZWN0OiBnZXRUeXBlTGlzdChtc2cpLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IHN0cmVhbSA9IG1zZyBhcyBBY3Rpdml0eVN0cmVhbTtcbiAgICByZXR1cm4ge1xuICAgICAgICBhY3RvcjogZ2V0VHlwZUxpc3Qoc3RyZWFtLmFjdG9yKSxcbiAgICAgICAgdGFyZ2V0OiBnZXRUeXBlTGlzdChzdHJlYW0udGFyZ2V0KSxcbiAgICAgICAgb2JqZWN0OiBzdHJlYW0ub2JqZWN0ID8gZ2V0VHlwZUxpc3Qoc3RyZWFtLm9iamVjdCkgOiBbXSxcbiAgICB9O1xufVxuXG4vKipcbiAqIFRyYXZlcnNlcyB0aGUgZXJyb3JzIGFycmF5IGZyb20gYWp2LCBhbmQgbWFrZXMgYSBzZXJpZXMgb2YgZmlsdGVyaW5nIGRlY2lzaW9ucyB0b1xuICogdHJ5IHRvIGFycml2ZSBhdCB0aGUgbW9zdCB1c2VmdWwgZXJyb3IuXG4gKiBAcGFyYW0gbXNnXG4gKiBAcGFyYW0gZXJyb3JzXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRFcnJvck1lc3NhZ2UoXG4gICAgbXNnOiBBY3Rpdml0eVN0cmVhbSB8IEFjdGl2aXR5T2JqZWN0LFxuICAgIGVycm9yczogQXJyYXk8RXJyb3JPYmplY3Q+LFxuICAgIG9wdGlvbnM/OiBWYWxpZGF0aW9uRXJyb3JPcHRpb25zLFxuKTogc3RyaW5nIHtcbiAgICBjb25zdCB0eXBlcyA9IGdldFR5cGVzKG1zZyk7XG4gICAgbGV0IGRlZXBlc3RfZW50cnkgPSAwO1xuICAgIGxldCBoaWdoZXN0X2RlcHRoID0gLTE7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVycm9ycy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBwYXJ0c0NvdW50ID0gZ2V0UGFydHNDb3VudChlcnJvcnNbaV0sIHR5cGVzKTtcbiAgICAgICAgaWYgKHBhcnRzQ291bnQgPiBoaWdoZXN0X2RlcHRoKSB7XG4gICAgICAgICAgICBoaWdoZXN0X2RlcHRoID0gcGFydHNDb3VudDtcbiAgICAgICAgICAgIGRlZXBlc3RfZW50cnkgPSBpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGhpZ2hlc3RfZGVwdGggPj0gMFxuICAgICAgICA/IHBhcnNlTXNnKGVycm9yc1tkZWVwZXN0X2VudHJ5XSlcbiAgICAgICAgOiBjb21wb3NlRmluYWxFcnJvcihlcnJvcnNbZXJyb3JzLmxlbmd0aCAtIDFdLCBvcHRpb25zKTtcbn1cblxuZnVuY3Rpb24gZmlsdGVyVHlwZUxpc3QoXG4gICAgdHlwZXM6IEFycmF5PHN0cmluZz4sXG4gICAgb3B0aW9ucz86IFZhbGlkYXRpb25FcnJvck9wdGlvbnMsXG4pOiBBcnJheTxzdHJpbmc+IHtcbiAgICBpZiAoIW9wdGlvbnM/LmV4Y2x1ZGVUeXBlcyB8fCBvcHRpb25zLmV4Y2x1ZGVUeXBlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHR5cGVzO1xuICAgIH1cbiAgICBjb25zdCBleGNsdWRlID0gbmV3IFNldChvcHRpb25zLmV4Y2x1ZGVUeXBlcyk7XG4gICAgcmV0dXJuIHR5cGVzLmZpbHRlcigodHlwZSkgPT4gIWV4Y2x1ZGUuaGFzKHR5cGUpKTtcbn1cblxuZnVuY3Rpb24gY29tcG9zZUZpbmFsRXJyb3IoXG4gICAgZXJyb3I6IEVycm9yT2JqZWN0LFxuICAgIG9wdGlvbnM/OiBWYWxpZGF0aW9uRXJyb3JPcHRpb25zLFxuKTogc3RyaW5nIHtcbiAgICAvLyBpZiB3ZSBoYXZlIHlldCB0byBidWlsZCBhbiBlcnJvciBtZXNzYWdlLCBhc3N1bWUgdGhpcyBpcyBhbiBpbnZhbGlkIHR5cGUgdmFsdWUgKG9uZU9mKSxcbiAgICAvLyB0cnkgdG8gYnVpbGQgYSBsaXN0IG9mIHZhbGlkIHR5cGVzXG4gICAgbGV0IG1zZzogc3RyaW5nO1xuICAgIGlmIChlcnJvci5rZXl3b3JkID09PSBcIm9uZU9mXCIpIHtcbiAgICAgICAgY29uc3QgaW5zdGFuY2VSb290ID0gZXJyb3IuaW5zdGFuY2VQYXRoLnNwbGl0KFwiL1wiKVsxXTtcbiAgICAgICAgY29uc3QgcGF0aFNjb3BlZFR5cGVzID1cbiAgICAgICAgICAgIGluc3RhbmNlUm9vdCA9PT0gXCJhY3RvclwiXG4gICAgICAgICAgICAgICAgPyBBY3RvclR5cGVzTGlzdFxuICAgICAgICAgICAgICAgIDogaW5zdGFuY2VSb290ID09PSBcInRhcmdldFwiXG4gICAgICAgICAgICAgICAgICA/IFRhcmdldFR5cGVzTGlzdFxuICAgICAgICAgICAgICAgICAgOiBPYmplY3RUeXBlc0xpc3Q7XG4gICAgICAgIGNvbnN0IGZpbHRlcmVkVHlwZXMgPSBmaWx0ZXJUeXBlTGlzdChwYXRoU2NvcGVkVHlwZXMsIG9wdGlvbnMpO1xuICAgICAgICBjb25zdCB0eXBlc0xpc3QgPVxuICAgICAgICAgICAgZmlsdGVyZWRUeXBlcy5sZW5ndGggPiAwID8gZmlsdGVyZWRUeXBlcyA6IHBhdGhTY29wZWRUeXBlcztcbiAgICAgICAgbXNnID1cbiAgICAgICAgICAgIGAke2Vycm9yLmluc3RhbmNlUGF0aH06ICR7ZXJyb3IubWVzc2FnZX06IGAgK1xuICAgICAgICAgICAgYCR7dHlwZXNMaXN0LmpvaW4oXCIsIFwiKX1gO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIG1zZyA9IGAke1xuICAgICAgICAgICAgZXJyb3IuaW5zdGFuY2VQYXRoID8gZXJyb3IuaW5zdGFuY2VQYXRoIDogXCJhY3Rpdml0eSBzdHJlYW1cIlxuICAgICAgICB9OiAke2Vycm9yLm1lc3NhZ2V9YDtcbiAgICB9XG4gICAgaWYgKFwiYWRkaXRpb25hbFByb3BlcnR5XCIgaW4gZXJyb3IucGFyYW1zKSB7XG4gICAgICAgIG1zZyArPSBgOiAke2Vycm9yLnBhcmFtcy5hZGRpdGlvbmFsUHJvcGVydHl9YDtcbiAgICB9XG4gICAgcmV0dXJuIG1zZztcbn1cbiIsCiAgICAiaW1wb3J0IHsgQVNGYWN0b3J5LCB0eXBlIEFTTWFuYWdlciB9IGZyb20gXCJAc29ja2V0aHViL2FjdGl2aXR5LXN0cmVhbXNcIjtcbmltcG9ydCB0eXBlIHtcbiAgICBBY3Rpdml0eU9iamVjdCxcbiAgICBBY3Rpdml0eVN0cmVhbSxcbiAgICBCYXNlQWN0aXZpdHlPYmplY3QsXG59IGZyb20gXCJAc29ja2V0aHViL3NjaGVtYXNcIjtcbmltcG9ydCB7XG4gICAgYWRkUGxhdGZvcm1Db250ZXh0LFxuICAgIGFkZFBsYXRmb3JtU2NoZW1hLFxuICAgIHZhbGlkYXRlQWN0aXZpdHlTdHJlYW0sXG4gICAgdmFsaWRhdGVDcmVkZW50aWFscyxcbn0gZnJvbSBcIkBzb2NrZXRodWIvc2NoZW1hc1wiO1xuaW1wb3J0IEV2ZW50RW1pdHRlciBmcm9tIFwiZXZlbnRlbWl0dGVyM1wiO1xuaW1wb3J0IHR5cGUgeyBTb2NrZXQgfSBmcm9tIFwic29ja2V0LmlvLWNsaWVudFwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEV2ZW50TWFwcGluZyB7XG4gICAgY3JlZGVudGlhbHM6IE1hcDxzdHJpbmcsIEFjdGl2aXR5U3RyZWFtPjtcbiAgICBcImFjdGl2aXR5LW9iamVjdFwiOiBNYXA8c3RyaW5nLCBCYXNlQWN0aXZpdHlPYmplY3Q+O1xuICAgIGNvbm5lY3Q6IE1hcDxzdHJpbmcsIEFjdGl2aXR5U3RyZWFtPjtcbiAgICBqb2luOiBNYXA8c3RyaW5nLCBBY3Rpdml0eVN0cmVhbT47XG59XG5cbnR5cGUgUmVwbGF5RXZlbnRNYXAgPSB7XG4gICAgXCJhY3Rpdml0eS1vYmplY3RcIjogQmFzZUFjdGl2aXR5T2JqZWN0O1xuICAgIGNyZWRlbnRpYWxzOiBBY3Rpdml0eVN0cmVhbTtcbiAgICBtZXNzYWdlOiBBY3Rpdml0eVN0cmVhbTtcbn07XG5cbnR5cGUgSW5pdFN0YXRlID0gXCJpZGxlXCIgfCBcImluaXRpYWxpemluZ1wiIHwgXCJyZWFkeVwiIHwgXCJpbml0X2Vycm9yXCIgfCBcImNsb3NlZFwiO1xuXG50eXBlIFJlYWR5UmVhc29uID0gXCJpbml0aWFsLWNvbm5lY3RcIiB8IFwicmVjb25uZWN0XCIgfCBcInNjaGVtYXMtdXBkYXRlXCI7XG5cbnR5cGUgSW5pdEVycm9yUGhhc2UgPSBcInNjaGVtYXMtcmVxdWVzdFwiIHwgXCJzY2hlbWFzLWFwcGx5XCIgfCBcInRpbWVvdXRcIjtcblxuaW50ZXJmYWNlIFBlbmRpbmdSZWFkeVdhaXRlciB7XG4gICAgcmVzb2x2ZTogKGluZm86IENsaWVudFJlYWR5SW5mbykgPT4gdm9pZDtcbiAgICByZWplY3Q6IChlcnI6IEVycm9yKSA9PiB2b2lkO1xuICAgIHRpbWVyPzogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD47XG59XG5cbmludGVyZmFjZSBRdWV1ZWRPdXRib3VuZEV2ZW50IHtcbiAgICBldmVudDogc3RyaW5nO1xuICAgIGNvbnRlbnQ6IHVua25vd247XG4gICAgY2FsbGJhY2s/OiB1bmtub3duO1xuICAgIGVucXVldWVkQXQ6IG51bWJlcjtcbiAgICBzZXF1ZW5jZTogbnVtYmVyO1xufVxuXG5pbnRlcmZhY2UgSW5pdGlhbGl6YXRpb25DeWNsZSB7XG4gICAgdG9rZW46IG51bWJlcjtcbiAgICByZWFzb246IFJlYWR5UmVhc29uO1xuICAgIHN0YXJ0ZWRBdDogbnVtYmVyO1xuICAgIHJlcGxheU9uUmVhZHk6IGJvb2xlYW47XG4gICAgdGltZWRPdXQ6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU29ja2V0aHViQ2xpZW50T3B0aW9ucyB7XG4gICAgaW5pdFRpbWVvdXRNcz86IG51bWJlcjtcbiAgICBtYXhRdWV1ZWRPdXRib3VuZD86IG51bWJlcjtcbiAgICBtYXhRdWV1ZWRBZ2VNcz86IG51bWJlcjtcbn1cblxuaW50ZXJmYWNlIEN1c3RvbUVtaXR0ZXIgZXh0ZW5kcyBFdmVudEVtaXR0ZXIge1xuICAgIF9lbWl0KHM6IHN0cmluZywgbzogdW5rbm93biwgYz86IHVua25vd24pOiB2b2lkO1xuICAgIGNvbm5lY3QoKTogdm9pZDtcbiAgICBkaXNjb25uZWN0KCk6IHZvaWQ7XG4gICAgY29ubmVjdGVkOiBib29sZWFuO1xuICAgIGlkOiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBQbGF0Zm9ybVJlZ2lzdHJ5U2NoZW1hcyB7XG4gICAgY3JlZGVudGlhbHM/OiBvYmplY3Q7XG4gICAgbWVzc2FnZXM/OiBvYmplY3Q7XG59XG5cbi8qKlxuICogU2VydmVyLWRlY2xhcmVkIHBsYXRmb3JtIG1ldGFkYXRhIHVzZWQgYnkgdGhlIGNsaWVudCBmb3IgY29udGV4dCBnZW5lcmF0aW9uXG4gKiBhbmQgcnVudGltZSB2YWxpZGF0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBsYXRmb3JtUmVnaXN0cnlFbnRyeSB7XG4gICAgaWQ6IHN0cmluZztcbiAgICB2ZXJzaW9uOiBzdHJpbmc7XG4gICAgY29udGV4dFVybDogc3RyaW5nO1xuICAgIGNvbnRleHRWZXJzaW9uOiBzdHJpbmc7XG4gICAgc2NoZW1hVmVyc2lvbjogc3RyaW5nO1xuICAgIHR5cGVzOiBBcnJheTxzdHJpbmc+O1xuICAgIHNjaGVtYXM6IFBsYXRmb3JtUmVnaXN0cnlTY2hlbWFzO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBsYXRmb3JtUmVnaXN0cnlQYXlsb2FkIHtcbiAgICB2ZXJzaW9uPzogc3RyaW5nO1xuICAgIGNvbnRleHRzPzoge1xuICAgICAgICBhcz86IHN0cmluZztcbiAgICAgICAgc29ja2V0aHViPzogc3RyaW5nO1xuICAgIH07XG4gICAgcGxhdGZvcm1zPzogQXJyYXk8UGxhdGZvcm1SZWdpc3RyeUVudHJ5Pjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDbGllbnRSZWFkeUluZm8ge1xuICAgIHN0YXRlOiBcInJlYWR5XCI7XG4gICAgcmVhc29uOiBSZWFkeVJlYXNvbjtcbiAgICBzb2NrZXRodWJWZXJzaW9uOiBzdHJpbmc7XG4gICAgY29udGV4dHM6IHtcbiAgICAgICAgYXM6IHN0cmluZztcbiAgICAgICAgc29ja2V0aHViOiBzdHJpbmc7XG4gICAgfTtcbiAgICBwbGF0Zm9ybXM6IEFycmF5PHtcbiAgICAgICAgaWQ6IHN0cmluZztcbiAgICAgICAgdmVyc2lvbjogc3RyaW5nO1xuICAgICAgICBjb250ZXh0VXJsOiBzdHJpbmc7XG4gICAgICAgIGNvbnRleHRWZXJzaW9uOiBzdHJpbmc7XG4gICAgICAgIHNjaGVtYVZlcnNpb246IHN0cmluZztcbiAgICAgICAgdHlwZXM6IEFycmF5PHN0cmluZz47XG4gICAgfT47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2xpZW50SW5pdEVycm9yIHtcbiAgICBlcnJvcjogc3RyaW5nO1xuICAgIHBoYXNlOiBJbml0RXJyb3JQaGFzZTtcbiAgICByZXRyeWluZzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBTb2NrZXRodWJDbGllbnQgLSBDbGllbnQgbGlicmFyeSBmb3IgU29ja2V0aHViIHByb3RvY29sIGdhdGV3YXlcbiAqXG4gKiBBIEphdmFTY3JpcHQgY2xpZW50IGZvciBjb25uZWN0aW5nIHRvIFNvY2tldGh1YiBzZXJ2ZXJzLiBQcm92aWRlcyBhIGhpZ2gtbGV2ZWxcbiAqIEFQSSBmb3Igc2VuZGluZyBhbmQgcmVjZWl2aW5nIEFjdGl2aXR5U3RyZWFtcyBtZXNzYWdlcyBvdmVyIFNvY2tldC5JTywgd2l0aFxuICogYXV0b21hdGljIHN0YXRlIG1hbmFnZW1lbnQgYW5kIHJlY29ubmVjdGlvbiBoYW5kbGluZy5cbiAqXG4gKiBTb2NrZXRodWIgYWN0cyBhcyBhIHByb3RvY29sIGdhdGV3YXksIHRyYW5zbGF0aW5nIEFjdGl2aXR5U3RyZWFtcyBtZXNzYWdlcyBpbnRvXG4gKiB2YXJpb3VzIHByb3RvY29scyAoWE1QUCwgSVJDLCBSU1MsIGV0Yy4pLiBUaGlzIGNsaWVudCBoYW5kbGVzIHRoZSBjb21tdW5pY2F0aW9uXG4gKiB3aXRoIHRoZSBTb2NrZXRodWIgc2VydmVyLCBpbmNsdWRpbmcgY3JlZGVudGlhbCBtYW5hZ2VtZW50LCBjb25uZWN0aW9uIHN0YXRlLFxuICogYW5kIGF1dG9tYXRpYyByZWNvbm5lY3Rpb24uXG4gKlxuICogIyMgQXV0b21hdGljIFJlY29ubmVjdGlvbiAmIFN0YXRlIFJlcGxheVxuICpcbiAqIFRoaXMgY2xpZW50IGF1dG9tYXRpY2FsbHkgaGFuZGxlcyB0cmFuc2llbnQgbmV0d29yayBkaXNjb25uZWN0aW9ucyBieSBzdG9yaW5nXG4gKiBjb25uZWN0aW9uIHN0YXRlIGluIG1lbW9yeSBhbmQgcmVwbGF5aW5nIGl0IHdoZW4gdGhlIHNvY2tldCByZWNvbm5lY3RzLlxuICpcbiAqICMjIyBTZWN1cml0eSBNb2RlbFxuICpcbiAqICoqU3RvcmFnZSBMb2NhdGlvbjoqKlxuICogLSBBbGwgY3JlZGVudGlhbHMgYW5kIHN0YXRlIGFyZSBzdG9yZWQgT05MWSBpbiBKYXZhU2NyaXB0IG1lbW9yeSAoaGVhcClcbiAqIC0gTm90aGluZyBpcyBwZXJzaXN0ZWQgdG8gbG9jYWxTdG9yYWdlLCBzZXNzaW9uU3RvcmFnZSwgY29va2llcywgb3IgZGlza1xuICogLSBNZW1vcnkgaXMgY2xlYXJlZCB3aGVuIHRoZSBicm93c2VyIHRhYiBjbG9zZXMgb3IgcGFnZSByZWZyZXNoZXNcbiAqXG4gKiAqKlJlcGxheSBUcmlnZ2VyczoqKlxuICogLSBBdXRvbWF0aWMgcmVwbGF5IG9jY3VycyBvbiBTb2NrZXQuSU8gcmVjb25uZWN0aW9uIGV2ZW50c1xuICogLSBUeXBpY2FsbHkgdHJpZ2dlcmVkIGJ5IGJyaWVmIG5ldHdvcmsgaW50ZXJydXB0aW9ucyAoV2lGaSBzd2l0Y2hpbmcsIG1vYmlsZSBuZXR3b3JrIGJsaXBzKVxuICogLSBEb2VzIE5PVCBvY2N1ciBvbiBwYWdlIHJlZnJlc2ggKG5ldyBTb2NrZXRodWJDbGllbnQgaW5zdGFuY2UgPSBlbXB0eSBzdGF0ZSlcbiAqXG4gKiAqKlNlcnZlciBSZXN0YXJ0IEJlaGF2aW9yOioqXG4gKiAtIElmIHNlcnZlciByZXN0YXJ0cywgY2xpZW50IHNvY2tldCB3aWxsIHJlY29ubmVjdCBhbmQgcmVwbGF5IGNyZWRlbnRpYWxzXG4gKiAtIFNlcnZlciBtdXN0IGhhbmRsZSByZXBsYXllZCBjcmVkZW50aWFscyBhcHByb3ByaWF0ZWx5ICh2YWxpZGF0ZSwgcmVqZWN0IHN0YWxlIHNlc3Npb25zLCBldGMuKVxuICogLSBBcHBsaWNhdGlvbnMgc2hvdWxkIGltcGxlbWVudCBwcm9wZXIgc2Vzc2lvbiB2YWxpZGF0aW9uIHNlcnZlci1zaWRlXG4gKlxuICogKipMaWZldGltZToqKlxuICogLSBDcmVkZW50aWFscyBleGlzdCBvbmx5IGR1cmluZyB0aGUgYnJvd3NlciB0YWIncyBsaWZldGltZVxuICogLSBDbGVhcmVkIG9uIHBhZ2UgcmVsb2FkLCB0YWIgY2xvc2UsIG9yIG1hbnVhbCBkaXNjb25uZWN0XG4gKiAtIE5vdCBhY2Nlc3NpYmxlIGFjcm9zcyB0YWJzIG9yIGFmdGVyIGJyb3dzZXIgcmVzdGFydFxuICpcbiAqICoqV2hhdCBHZXRzIFJlcGxheWVkOioqXG4gKiAtIENyZWRlbnRpYWxzICh1c2VybmFtZS9wYXNzd29yZC90b2tlbnMgc2VudCB2aWEgY3JlZGVudGlhbHMgZXZlbnQpXG4gKiAtIEFjdGl2aXR5IE9iamVjdHMgKGFjdG9yIGRlZmluaXRpb25zKVxuICogLSBDb25uZWN0IGNvbW1hbmRzIChwbGF0Zm9ybSBjb25uZWN0aW9ucylcbiAqIC0gSm9pbiBjb21tYW5kcyAocm9vbS9jaGFubmVsIGpvaW5zKVxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiAvLyBDcmVhdGUgY2xpZW50XG4gKiBjb25zdCBzb2NrZXQgPSBpbygnaHR0cDovL2xvY2FsaG9zdDoxMDU1MCcpO1xuICogY29uc3QgY2xpZW50ID0gbmV3IFNvY2tldGh1YkNsaWVudChzb2NrZXQpO1xuICpcbiAqIC8vIFdhaXQgZm9yIHNjaGVtYSByZWdpc3RyeSBiZWZvcmUgc2VuZGluZyBtZXNzYWdlc1xuICogYXdhaXQgY2xpZW50LnJlYWR5KCk7XG4gKlxuICogLy8gQnVpbGQgY2Fub25pY2FsIEBjb250ZXh0IGZvciBhIHBsYXRmb3JtXG4gKiBjb25zdCBjdHggPSBjbGllbnQuY29udGV4dEZvcignaXJjJyk7XG4gKlxuICogLy8gU2VuZCBjcmVkZW50aWFscyAtIHRoZXNlIHdpbGwgYmUgcmVwbGF5ZWQgb24gcmVjb25uZWN0aW9uXG4gKiBjbGllbnQuc29ja2V0LmVtaXQoJ2NyZWRlbnRpYWxzJywge1xuICogICAnQGNvbnRleHQnOiBjdHgsXG4gKiAgIHR5cGU6ICdjcmVkZW50aWFscycsXG4gKiAgIGFjdG9yOiB7IGlkOiAndXNlckBleGFtcGxlLmNvbScsIHR5cGU6ICdwZXJzb24nIH0sXG4gKiAgIG9iamVjdDogeyB0eXBlOiAnY3JlZGVudGlhbHMnLCB1c2VybmFtZTogJ3VzZXInLCBwYXNzd29yZDogJ3Bhc3MnIH1cbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNvY2tldGh1YkNsaWVudCB7XG4gICAgLyoqXG4gICAgICogSW4tbWVtb3J5IHN0b3JhZ2UgZm9yIGNsaWVudCBzdGF0ZSB0aGF0IHNob3VsZCBiZSByZXBsYXllZCBvbiByZWNvbm5lY3Rpb24uXG4gICAgICpcbiAgICAgKiBTZWN1cml0eTogU3RvcmVkIE9OTFkgaW4gSmF2YVNjcmlwdCBoZWFwIG1lbW9yeS4gTmV2ZXIgcGVyc2lzdGVkIHRvIGRpc2ssXG4gICAgICogbG9jYWxTdG9yYWdlLCBvciBhbnkgcGVybWFuZW50IHN0b3JhZ2UuIENsZWFyZWQgb24gcGFnZSByZWxvYWQuXG4gICAgICovXG4gICAgcHJpdmF0ZSBldmVudHM6IEV2ZW50TWFwcGluZyA9IHtcbiAgICAgICAgY3JlZGVudGlhbHM6IG5ldyBNYXAoKSxcbiAgICAgICAgXCJhY3Rpdml0eS1vYmplY3RcIjogbmV3IE1hcCgpLFxuICAgICAgICBjb25uZWN0OiBuZXcgTWFwKCksXG4gICAgICAgIGpvaW46IG5ldyBNYXAoKSxcbiAgICB9O1xuICAgIHByaXZhdGUgX3NvY2tldDogU29ja2V0O1xuICAgIHB1YmxpYyBBY3Rpdml0eVN0cmVhbXMhOiBBU01hbmFnZXI7XG4gICAgcHVibGljIHNvY2tldCE6IEN1c3RvbUVtaXR0ZXI7XG4gICAgcHVibGljIGRlYnVnID0gdHJ1ZTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IG9wdGlvbnM6IFJlcXVpcmVkPFNvY2tldGh1YkNsaWVudE9wdGlvbnM+O1xuICAgIHByaXZhdGUgcGxhdGZvcm1SZWdpc3RyeSA9IG5ldyBNYXA8c3RyaW5nLCBQbGF0Zm9ybVJlZ2lzdHJ5RW50cnk+KCk7XG4gICAgcHJpdmF0ZSBhc0NvbnRleHRVcmw/OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBzb2NrZXRodWJDb250ZXh0VXJsPzogc3RyaW5nO1xuICAgIHByaXZhdGUgc29ja2V0aHViVmVyc2lvbj86IHN0cmluZztcbiAgICBwcml2YXRlIGluaXRTdGF0ZTogSW5pdFN0YXRlID0gXCJpZGxlXCI7XG4gICAgcHJpdmF0ZSBoYXNSZWFkeU9uY2UgPSBmYWxzZTtcbiAgICBwcml2YXRlIGluaXRDeWNsZT86IEluaXRpYWxpemF0aW9uQ3ljbGU7XG4gICAgcHJpdmF0ZSBpbml0VG9rZW5Db3VudGVyID0gMDtcbiAgICBwcml2YXRlIGluaXRUaW1lb3V0VGltZXI/OiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PjtcbiAgICBwcml2YXRlIHdhaXRpbmdXYXJuaW5nVGltZXI/OiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRJbnRlcnZhbD47XG4gICAgcHJpdmF0ZSB3YWl0aW5nV2FybmluZ0ludGVydmFsTXMgPSAxMDAwMDtcbiAgICBwcml2YXRlIHJlYWR5V2FpdGVyczogQXJyYXk8UGVuZGluZ1JlYWR5V2FpdGVyPiA9IFtdO1xuICAgIHByaXZhdGUgb3V0Ym91bmRRdWV1ZTogQXJyYXk8UXVldWVkT3V0Ym91bmRFdmVudD4gPSBbXTtcbiAgICBwcml2YXRlIG91dGJvdW5kU2VxdWVuY2UgPSAwO1xuICAgIHByaXZhdGUgcmVnaXN0cnlGaW5nZXJwcmludD86IHN0cmluZztcbiAgICBwcml2YXRlIGxhdGVzdFJlYWR5SW5mbz86IENsaWVudFJlYWR5SW5mbztcblxuICAgIGNvbnN0cnVjdG9yKHNvY2tldDogU29ja2V0LCBvcHRpb25zOiBTb2NrZXRodWJDbGllbnRPcHRpb25zID0ge30pIHtcbiAgICAgICAgaWYgKCFzb2NrZXQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlNvY2tldGh1YkNsaWVudCByZXF1aXJlcyBhIHNvY2tldC5pbyBpbnN0YW5jZVwiKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9zb2NrZXQgPSBzb2NrZXQ7XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGluaXRUaW1lb3V0TXM6IG9wdGlvbnMuaW5pdFRpbWVvdXRNcyA/PyA1MDAwLFxuICAgICAgICAgICAgbWF4UXVldWVkT3V0Ym91bmQ6IG9wdGlvbnMubWF4UXVldWVkT3V0Ym91bmQgPz8gMTAwMCxcbiAgICAgICAgICAgIG1heFF1ZXVlZEFnZU1zOiBvcHRpb25zLm1heFF1ZXVlZEFnZU1zID8/IDMwMDAwLFxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuc29ja2V0ID0gdGhpcy5jcmVhdGVQdWJsaWNFbWl0dGVyKCk7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJTb2NrZXRJT0hhbmRsZXJzKCk7XG4gICAgICAgIHRoaXMuaW5pdEFjdGl2aXR5U3RyZWFtcygpO1xuXG4gICAgICAgIHRoaXMuQWN0aXZpdHlTdHJlYW1zLm9uKFxuICAgICAgICAgICAgXCJhY3Rpdml0eS1vYmplY3QtY3JlYXRlXCIsXG4gICAgICAgICAgICAob2JqOiBBY3Rpdml0eU9iamVjdCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc29ja2V0LmVtaXQoXG4gICAgICAgICAgICAgICAgICAgIFwiYWN0aXZpdHktb2JqZWN0XCIsXG4gICAgICAgICAgICAgICAgICAgIG9iaixcbiAgICAgICAgICAgICAgICAgICAgKHJlc3A/OiB7IGVycm9yPzogc3RyaW5nIH0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXNwICYmIHR5cGVvZiByZXNwLmVycm9yID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJmYWlsZWQgdG8gY3JlYXRlIGFjdGl2aXR5LW9iamVjdCBcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcC5lcnJvcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXZlbnRBY3Rpdml0eU9iamVjdChvYmopO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9LFxuICAgICAgICApO1xuXG4gICAgICAgIHNvY2tldC5vbihcImFjdGl2aXR5LW9iamVjdFwiLCAob2JqKSA9PiB7XG4gICAgICAgICAgICB0aGlzLkFjdGl2aXR5U3RyZWFtcy5PYmplY3QuY3JlYXRlKG9iaik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICh0aGlzLl9zb2NrZXQuY29ubmVjdGVkKSB7XG4gICAgICAgICAgICB0aGlzLnNvY2tldC5jb25uZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgKHRoaXMuc29ja2V0IGFzIHVua25vd24gYXMgeyBpZD86IHN0cmluZyB9KS5pZCA9IHRoaXMuX3NvY2tldC5pZDtcbiAgICAgICAgICAgIHRoaXMuc29ja2V0Ll9lbWl0KFwiY29ubmVjdFwiKTtcbiAgICAgICAgICAgIHRoaXMuc3RhcnRJbml0aWFsaXphdGlvbihcImluaXRpYWwtY29ubmVjdFwiLCB0cnVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXRBY3Rpdml0eVN0cmVhbXMoKSB7XG4gICAgICAgIHRoaXMuQWN0aXZpdHlTdHJlYW1zID0gQVNGYWN0b3J5KHsgc3BlY2lhbE9ianM6IFtcImNyZWRlbnRpYWxzXCJdIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENsZWFyIHN0b3JlZCBjcmVkZW50aWFscyB0byBwcmV2ZW50IGF1dG9tYXRpYyByZXBsYXkgb24gcmVjb25uZWN0aW9uLlxuICAgICAqXG4gICAgICogVGhpcyBtZXRob2QgcmVtb3ZlcyBhbGwgc3RvcmVkIGNyZWRlbnRpYWxzIGZyb20gbWVtb3J5LiBVc2VmdWwgZm9yXG4gICAgICogc2VjdXJpdHktc2Vuc2l0aXZlIGFwcGxpY2F0aW9ucyB0aGF0IHdhbnQgdG8gcHJldmVudCBhdXRvbWF0aWMgY3JlZGVudGlhbFxuICAgICAqIHJlcGxheSB3aGVuIHRoZSBzb2NrZXQgcmVjb25uZWN0cy5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIC8vIENsZWFyIGNyZWRlbnRpYWxzIG9uIGRpc2Nvbm5lY3RcbiAgICAgKiBzYy5zb2NrZXQub24oJ2Rpc2Nvbm5lY3QnLCAoKSA9PiB7XG4gICAgICogICBzYy5jbGVhckNyZWRlbnRpYWxzKCk7XG4gICAgICogfSk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGNsZWFyQ3JlZGVudGlhbHMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZXZlbnRzLmNyZWRlbnRpYWxzLmNsZWFyKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJuIHRoZSBwbGF0Zm9ybSByZWdpc3RyeSBkaXNjb3ZlcmVkIGZyb20gdGhlIHNlcnZlci5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0UmVnaXN0ZXJlZFBsYXRmb3JtcygpOiBBcnJheTxQbGF0Zm9ybVJlZ2lzdHJ5RW50cnk+IHtcbiAgICAgICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5wbGF0Zm9ybVJlZ2lzdHJ5LnZhbHVlcygpKS5tYXAoKHBsYXRmb3JtKSA9PiAoe1xuICAgICAgICAgICAgLi4ucGxhdGZvcm0sXG4gICAgICAgICAgICB0eXBlczogWy4uLnBsYXRmb3JtLnR5cGVzXSxcbiAgICAgICAgICAgIHNjaGVtYXM6IHsgLi4ucGxhdGZvcm0uc2NoZW1hcyB9LFxuICAgICAgICB9KSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSW5kaWNhdGVzIHdoZXRoZXIgc2VydmVyLXByb3ZpZGVkIHNjaGVtYS9jb250ZXh0IHJlZ2lzdHJ5IGRhdGEgaXMgbG9hZGVkLlxuICAgICAqL1xuICAgIHB1YmxpYyBpc1NjaGVtYXNSZWFkeSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNSZWFkeSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBjbGllbnQgaGFzIGNvbXBsZXRlZCBzY2hlbWEgaW5pdGlhbGl6YXRpb24uXG4gICAgICovXG4gICAgcHVibGljIGlzUmVhZHkoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmluaXRTdGF0ZSA9PT0gXCJyZWFkeVwiO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGN1cnJlbnQgY2xpZW50IGluaXRpYWxpemF0aW9uIHN0YXRlLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRJbml0U3RhdGUoKTogSW5pdFN0YXRlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5pdFN0YXRlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybiB0aGUgY2Fub25pY2FsIGJhc2UgY29udGV4dHMgbGVhcm5lZCBmcm9tIHRoZSBzZXJ2ZXIgcmVnaXN0cnkuXG4gICAgICovXG4gICAgcHVibGljIGdldFJlZ2lzdGVyZWRCYXNlQ29udGV4dHMoKTogeyBhczogc3RyaW5nOyBzb2NrZXRodWI6IHN0cmluZyB9IHtcbiAgICAgICAgaWYgKCF0aGlzLmFzQ29udGV4dFVybCB8fCAhdGhpcy5zb2NrZXRodWJDb250ZXh0VXJsKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgXCJTY2hlbWEgcmVnaXN0cnkgbm90IGxvYWRlZCB5ZXQuIFdhaXQgZm9yIGNsaWVudCByZWFkeSBzdGF0ZSBhZnRlciBjb25uZWN0LlwiLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYXM6IHRoaXMuYXNDb250ZXh0VXJsLFxuICAgICAgICAgICAgc29ja2V0aHViOiB0aGlzLnNvY2tldGh1YkNvbnRleHRVcmwsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHVibGljIGdldFBsYXRmb3JtU2NoZW1hKFxuICAgICAgICBwbGF0Zm9ybTogc3RyaW5nLFxuICAgICAgICBzY2hlbWFUeXBlOiBcIm1lc3NhZ2VzXCIgfCBcImNyZWRlbnRpYWxzXCIgPSBcIm1lc3NhZ2VzXCIsXG4gICAgKTogb2JqZWN0IHwgdW5kZWZpbmVkIHtcbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZFBsYXRmb3JtID0gcGxhdGZvcm0/LnRyaW0oKTtcbiAgICAgICAgaWYgKCFub3JtYWxpemVkUGxhdGZvcm0pIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMucGxhdGZvcm1SZWdpc3RyeS5nZXQobm9ybWFsaXplZFBsYXRmb3JtKT8uc2NoZW1hcz8uW1xuICAgICAgICAgICAgc2NoZW1hVHlwZVxuICAgICAgICBdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFdhaXQgZm9yIHNjaGVtYSByZWdpc3RyeSBkYXRhIGZyb20gdGhlIHNlcnZlciBhbmQgcmV0dXJuIHRoZSBub3JtYWxpemVkIHBheWxvYWQuXG4gICAgICogQGRlcHJlY2F0ZWQgVXNlIHJlYWR5KHRpbWVvdXRNcz8pIGluc3RlYWQuXG4gICAgICovXG4gICAgcHVibGljIGFzeW5jIHdhaXRGb3JTY2hlbWFzKFxuICAgICAgICB0aW1lb3V0TXMgPSAyMDAwLFxuICAgICk6IFByb21pc2U8UGxhdGZvcm1SZWdpc3RyeVBheWxvYWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5yZWFkeSh0aW1lb3V0TXMpO1xuICAgICAgICByZXR1cm4gdGhpcy5idWlsZFBsYXRmb3JtUmVnaXN0cnlQYXlsb2FkKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogV2FpdCB1bnRpbCB0aGUgY2xpZW50IHJlYWNoZXMgYSByZWFkeSBzdGF0ZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZHkoXG4gICAgICAgIHRpbWVvdXRNcyA9IHRoaXMub3B0aW9ucy5pbml0VGltZW91dE1zLFxuICAgICk6IFByb21pc2U8Q2xpZW50UmVhZHlJbmZvPiB7XG4gICAgICAgIGlmICh0aGlzLmlzUmVhZHkoKSAmJiB0aGlzLmxhdGVzdFJlYWR5SW5mbykge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLmxhdGVzdFJlYWR5SW5mbyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHdhaXRlcjogUGVuZGluZ1JlYWR5V2FpdGVyID0geyByZXNvbHZlLCByZWplY3QgfTtcbiAgICAgICAgICAgIGlmICh0aW1lb3V0TXMgPiAwKSB7XG4gICAgICAgICAgICAgICAgd2FpdGVyLnRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVhZHlXYWl0ZXJzID0gdGhpcy5yZWFkeVdhaXRlcnMuZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgICAgICAgKGVudHJ5KSA9PiBlbnRyeSAhPT0gd2FpdGVyLFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYFNvY2tldGh1YkNsaWVudCByZWFkeSgpIHRpbWVkIG91dCBhZnRlciAke3RpbWVvdXRNc31tc2AsXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0sIHRpbWVvdXRNcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnJlYWR5V2FpdGVycy5wdXNoKHdhaXRlcik7XG4gICAgICAgICAgICBpZiAodGhpcy5zb2NrZXQuY29ubmVjdGVkICYmIHRoaXMuaW5pdFN0YXRlID09PSBcImlkbGVcIikge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhcnRJbml0aWFsaXphdGlvbihcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oYXNSZWFkeU9uY2UgPyBcInJlY29ubmVjdFwiIDogXCJpbml0aWFsLWNvbm5lY3RcIixcbiAgICAgICAgICAgICAgICAgICAgdHJ1ZSxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBWYWxpZGF0ZSBhbiBhY3Rpdml0eSBzdHJlYW0gYWdhaW5zdCBjdXJyZW50bHkgcmVnaXN0ZXJlZCBwbGF0Zm9ybSBzY2hlbWFzLlxuICAgICAqIFJldHVybnMgYW4gZW1wdHkgc3RyaW5nIHdoZW4gdmFsaWQuXG4gICAgICovXG4gICAgcHVibGljIHZhbGlkYXRlQWN0aXZpdHkoYWN0aXZpdHk6IEFjdGl2aXR5U3RyZWFtKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKGFjdGl2aXR5LnR5cGUgPT09IFwiY3JlZGVudGlhbHNcIikge1xuICAgICAgICAgICAgcmV0dXJuIHZhbGlkYXRlQ3JlZGVudGlhbHMoYWN0aXZpdHkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWxpZGF0ZUFjdGl2aXR5U3RyZWFtKGFjdGl2aXR5KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBCdWlsZCBjYW5vbmljYWwgU29ja2V0aHViIGNvbnRleHRzIGZvciBhIHBsYXRmb3JtIHVzaW5nIHNlcnZlci1wcm92aWRlZCBzY2hlbWEgbWV0YWRhdGEuXG4gICAgICovXG4gICAgcHVibGljIGNvbnRleHRGb3IocGxhdGZvcm06IHN0cmluZyk6IEFjdGl2aXR5U3RyZWFtW1wiQGNvbnRleHRcIl0ge1xuICAgICAgICBpZiAodHlwZW9mIHBsYXRmb3JtICE9PSBcInN0cmluZ1wiIHx8IHBsYXRmb3JtLnRyaW0oKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICBcIlNvY2tldGh1YkNsaWVudC5jb250ZXh0Rm9yKHBsYXRmb3JtKSByZXF1aXJlcyBhIG5vbi1lbXB0eSBwbGF0Zm9ybSBzdHJpbmdcIixcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuYXNDb250ZXh0VXJsIHx8ICF0aGlzLnNvY2tldGh1YkNvbnRleHRVcmwpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICBcIlNjaGVtYSByZWdpc3RyeSBub3QgbG9hZGVkIHlldC4gV2FpdCBmb3IgY2xpZW50IHJlYWR5IHN0YXRlIGFmdGVyIGNvbm5lY3QuXCIsXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZFBsYXRmb3JtID0gcGxhdGZvcm0udHJpbSgpO1xuICAgICAgICBjb25zdCBlbnRyeSA9IHRoaXMucGxhdGZvcm1SZWdpc3RyeS5nZXQobm9ybWFsaXplZFBsYXRmb3JtKTtcbiAgICAgICAgaWYgKCFlbnRyeSkge1xuICAgICAgICAgICAgY29uc3QgbmFtZXMgPSBBcnJheS5mcm9tKHRoaXMucGxhdGZvcm1SZWdpc3RyeS5rZXlzKCkpLnNvcnQoKTtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICBgdW5rbm93biBwbGF0Zm9ybSAnJHtub3JtYWxpemVkUGxhdGZvcm19Jy4gUmVnaXN0ZXJlZCBwbGF0Zm9ybXM6ICR7bmFtZXMuam9pbihcIiwgXCIpfWAsXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbdGhpcy5hc0NvbnRleHRVcmwsIHRoaXMuc29ja2V0aHViQ29udGV4dFVybCwgZW50cnkuY29udGV4dFVybF07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVQdWJsaWNFbWl0dGVyKCk6IEN1c3RvbUVtaXR0ZXIge1xuICAgICAgICBjb25zdCBzb2NrZXQgPSBuZXcgRXZlbnRFbWl0dGVyKCkgYXMgQ3VzdG9tRW1pdHRlcjtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgIHNvY2tldC5fZW1pdCA9IHNvY2tldC5lbWl0O1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgICAgc29ja2V0LmVtaXQgPSAoZXZlbnQsIGNvbnRlbnQsIGNhbGxiYWNrKTogdm9pZCA9PiB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZVB1YmxpY0VtaXQoZXZlbnQgYXMgc3RyaW5nLCBjb250ZW50LCBjYWxsYmFjayk7XG4gICAgICAgIH07XG4gICAgICAgIHNvY2tldC5jb25uZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgc29ja2V0LmRpc2Nvbm5lY3QgPSAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9zb2NrZXQuZGlzY29ubmVjdCgpO1xuICAgICAgICB9O1xuICAgICAgICBzb2NrZXQuY29ubmVjdCA9ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX3NvY2tldC5jb25uZWN0KCk7XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBzb2NrZXQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQXNrIHNlcnZlciBmb3IgdGhlIGxhdGVzdCBwbGF0Zm9ybS9jb250ZXh0IHJlZ2lzdHJ5IHZpYSBhY2sgY2FsbGJhY2suXG4gICAgICogVGhpcyBrZWVwcyBjbGllbnQgY29udGV4dCBjb21wb3NpdGlvbiBhbGlnbmVkIHdpdGggc2VydmVyIHNjaGVtYSBzdGF0ZS5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlcXVlc3RTY2hlbWFSZWdpc3RyeSgpIHtcbiAgICAgICAgY29uc3Qgc29ja2V0TGlrZSA9IHRoaXMuX3NvY2tldCBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgICAgICBpZiAoIShcImlvXCIgaW4gc29ja2V0TGlrZSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9zb2NrZXQuZW1pdChcInNjaGVtYXNcIiwgKHBheWxvYWQ6IHVua25vd24pID0+IHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlU2NoZW1hc1BheWxvYWQocGF5bG9hZCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFwcGx5IHNlcnZlci1wcm92aWRlZCByZWdpc3RyeSBtZXRhZGF0YSB0byBsb2NhbCBydW50aW1lIHN0YXRlLlxuICAgICAqIEFsc28gcmVnaXN0ZXJzIHBsYXRmb3JtIGNvbnRleHRzL3NjaGVtYXMgd2l0aCBAc29ja2V0aHViL3NjaGVtYXMgdmFsaWRhdG9yc1xuICAgICAqIHNvIGxvY2FsIHZhbGlkYXRpb24gdXNlcyB0aGUgc2FtZSBjYW5vbmljYWwgc291cmNlcyBhcyB0aGUgc2VydmVyLlxuICAgICAqL1xuICAgIHByaXZhdGUgYXBwbHlQbGF0Zm9ybVJlZ2lzdHJ5KFxuICAgICAgICBwYXlsb2FkOiB1bmtub3duLFxuICAgICk6IFBsYXRmb3JtUmVnaXN0cnlQYXlsb2FkIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgaWYgKCFwYXlsb2FkIHx8IHR5cGVvZiBwYXlsb2FkICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlZ2lzdHJ5ID0gcGF5bG9hZCBhcyBQbGF0Zm9ybVJlZ2lzdHJ5UGF5bG9hZDtcbiAgICAgICAgY29uc3QgYXNDb250ZXh0VXJsID0gcmVnaXN0cnkuY29udGV4dHM/LmFzO1xuICAgICAgICBjb25zdCBzb2NrZXRodWJDb250ZXh0VXJsID0gcmVnaXN0cnkuY29udGV4dHM/LnNvY2tldGh1YjtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdHlwZW9mIGFzQ29udGV4dFVybCAhPT0gXCJzdHJpbmdcIiB8fFxuICAgICAgICAgICAgdHlwZW9mIHNvY2tldGh1YkNvbnRleHRVcmwgIT09IFwic3RyaW5nXCIgfHxcbiAgICAgICAgICAgICFBcnJheS5pc0FycmF5KHJlZ2lzdHJ5LnBsYXRmb3JtcylcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc29ja2V0aHViVmVyc2lvbiA9XG4gICAgICAgICAgICB0eXBlb2YgcmVnaXN0cnkudmVyc2lvbiA9PT0gXCJzdHJpbmdcIiA/IHJlZ2lzdHJ5LnZlcnNpb24gOiBcInVua25vd25cIjtcbiAgICAgICAgdGhpcy5hc0NvbnRleHRVcmwgPSBhc0NvbnRleHRVcmw7XG4gICAgICAgIHRoaXMuc29ja2V0aHViQ29udGV4dFVybCA9IHNvY2tldGh1YkNvbnRleHRVcmw7XG5cbiAgICAgICAgdGhpcy5wbGF0Zm9ybVJlZ2lzdHJ5LmNsZWFyKCk7XG4gICAgICAgIGZvciAoY29uc3QgcGxhdGZvcm0gb2YgcmVnaXN0cnkucGxhdGZvcm1zKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgIXBsYXRmb3JtIHx8XG4gICAgICAgICAgICAgICAgdHlwZW9mIHBsYXRmb3JtICE9PSBcIm9iamVjdFwiIHx8XG4gICAgICAgICAgICAgICAgdHlwZW9mIHBsYXRmb3JtLmlkICE9PSBcInN0cmluZ1wiIHx8XG4gICAgICAgICAgICAgICAgdHlwZW9mIHBsYXRmb3JtLnZlcnNpb24gIT09IFwic3RyaW5nXCIgfHxcbiAgICAgICAgICAgICAgICB0eXBlb2YgcGxhdGZvcm0uY29udGV4dFVybCAhPT0gXCJzdHJpbmdcIlxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnBsYXRmb3JtUmVnaXN0cnkuc2V0KHBsYXRmb3JtLmlkLCB7XG4gICAgICAgICAgICAgICAgLi4ucGxhdGZvcm0sXG4gICAgICAgICAgICAgICAgdmVyc2lvbjogcGxhdGZvcm0udmVyc2lvbixcbiAgICAgICAgICAgICAgICB0eXBlczogQXJyYXkuaXNBcnJheShwbGF0Zm9ybS50eXBlcykgPyBwbGF0Zm9ybS50eXBlcyA6IFtdLFxuICAgICAgICAgICAgICAgIHNjaGVtYXM6IHBsYXRmb3JtLnNjaGVtYXMgfHwge30sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGFkZFBsYXRmb3JtQ29udGV4dChwbGF0Zm9ybS5pZCwgcGxhdGZvcm0uY29udGV4dFVybCk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNyZWRTY2hlbWEgPSBwbGF0Zm9ybS5zY2hlbWFzPy5jcmVkZW50aWFscztcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIGNyZWRTY2hlbWEgJiZcbiAgICAgICAgICAgICAgICAgICAgdHlwZW9mIGNyZWRTY2hlbWEgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgICAgICAgICAgICAgIUFycmF5LmlzQXJyYXkoY3JlZFNjaGVtYSlcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgYWRkUGxhdGZvcm1TY2hlbWEoY3JlZFNjaGVtYSwgYCR7cGxhdGZvcm0uaWR9L2NyZWRlbnRpYWxzYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IG1zZ1NjaGVtYSA9IHBsYXRmb3JtLnNjaGVtYXM/Lm1lc3NhZ2VzO1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgbXNnU2NoZW1hICYmXG4gICAgICAgICAgICAgICAgICAgIHR5cGVvZiBtc2dTY2hlbWEgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgICAgICAgICAgICAgIUFycmF5LmlzQXJyYXkobXNnU2NoZW1hKVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBhZGRQbGF0Zm9ybVNjaGVtYShtc2dTY2hlbWEsIGAke3BsYXRmb3JtLmlkfS9tZXNzYWdlc2ApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPVxuICAgICAgICAgICAgICAgICAgICBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycik7XG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgICAgICAgICBgW1NvY2tldGh1YkNsaWVudF0gRmFpbGVkIHRvIHJlZ2lzdGVyIHNjaGVtYXMgZm9yIHBsYXRmb3JtICR7cGxhdGZvcm0uaWR9OiAke21lc3NhZ2V9YCxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRQYXlsb2FkID0gdGhpcy5idWlsZFBsYXRmb3JtUmVnaXN0cnlQYXlsb2FkKCk7XG4gICAgICAgIHRoaXMucmVnaXN0cnlGaW5nZXJwcmludCA9XG4gICAgICAgICAgICB0aGlzLmNvbXB1dGVQYXlsb2FkRmluZ2VycHJpbnQobm9ybWFsaXplZFBheWxvYWQpO1xuICAgICAgICAvLyBFbWl0IG5vcm1hbGl6ZWQgcmVnaXN0cnkgcGF5bG9hZCBzbyBhcHAgY29kZSByZWNlaXZlcyBhIHN0YWJsZSBzaGFwZS5cbiAgICAgICAgdGhpcy5zb2NrZXQuX2VtaXQoXCJzY2hlbWFzXCIsIG5vcm1hbGl6ZWRQYXlsb2FkKTtcbiAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZWRQYXlsb2FkO1xuICAgIH1cblxuICAgIHByaXZhdGUgZXZlbnRBY3Rpdml0eU9iamVjdChjb250ZW50OiBBY3Rpdml0eU9iamVjdCkge1xuICAgICAgICBpZiAoY29udGVudC5pZCkge1xuICAgICAgICAgICAgdGhpcy5ldmVudHNbXCJhY3Rpdml0eS1vYmplY3RcIl0uc2V0KGNvbnRlbnQuaWQsIGNvbnRlbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBldmVudENyZWRlbnRpYWxzKGNvbnRlbnQ6IEFjdGl2aXR5U3RyZWFtKSB7XG4gICAgICAgIGlmIChjb250ZW50Lm9iamVjdCAmJiBjb250ZW50Lm9iamVjdC50eXBlID09PSBcImNyZWRlbnRpYWxzXCIpIHtcbiAgICAgICAgICAgIGNvbnN0IGtleTogc3RyaW5nID1cbiAgICAgICAgICAgICAgICBjb250ZW50LmFjdG9yLmlkIHx8IChjb250ZW50LmFjdG9yIGFzIHVua25vd24gYXMgc3RyaW5nKTtcbiAgICAgICAgICAgIHRoaXMuZXZlbnRzLmNyZWRlbnRpYWxzLnNldChrZXksIGNvbnRlbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBldmVudE1lc3NhZ2UoY29udGVudDogQmFzZUFjdGl2aXR5T2JqZWN0KSB7XG4gICAgICAgIGlmICghdGhpcy5fc29ja2V0LmNvbm5lY3RlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIGVpdGhlciBzdG9yZXMgb3IgZGVsZXRlIHRoZSBzcGVjaWZpZWQgY29udGVudCBvbnRvIHRoZSBzdG9yZWRKb2lucyBtYXAsXG4gICAgICAgIC8vIGZvciByZXBseSBvbmNlIHdlJ3JlIGJhY2sgb25saW5lLlxuICAgICAgICBjb25zdCBrZXkgPSBTb2NrZXRodWJDbGllbnQuZ2V0S2V5KGNvbnRlbnQgYXMgQWN0aXZpdHlTdHJlYW0pO1xuICAgICAgICBpZiAoY29udGVudC50eXBlID09PSBcImpvaW5cIiB8fCBjb250ZW50LnR5cGUgPT09IFwiY29ubmVjdFwiKSB7XG4gICAgICAgICAgICB0aGlzLmV2ZW50c1tjb250ZW50LnR5cGVdLnNldChrZXksIGNvbnRlbnQgYXMgQWN0aXZpdHlTdHJlYW0pO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbnRlbnQudHlwZSA9PT0gXCJsZWF2ZVwiKSB7XG4gICAgICAgICAgICB0aGlzLmV2ZW50cy5qb2luLmRlbGV0ZShrZXkpO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbnRlbnQudHlwZSA9PT0gXCJkaXNjb25uZWN0XCIpIHtcbiAgICAgICAgICAgIHRoaXMuZXZlbnRzLmNvbm5lY3QuZGVsZXRlKGtleSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBnZXRLZXkoY29udGVudDogQWN0aXZpdHlTdHJlYW0pIHtcbiAgICAgICAgY29uc3QgYWN0b3IgPSBjb250ZW50LmFjdG9yPy5pZCB8fCBjb250ZW50LmFjdG9yO1xuICAgICAgICBpZiAoIWFjdG9yKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgYGFjdG9yIHByb3BlcnR5IG5vdCBwcmVzZW50IGZvciBtZXNzYWdlIHR5cGU6ICR7Y29udGVudD8udHlwZX1gLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0YXJnZXQgPSBjb250ZW50LnRhcmdldFxuICAgICAgICAgICAgPyBjb250ZW50LnRhcmdldC5pZCB8fCBjb250ZW50LnRhcmdldFxuICAgICAgICAgICAgOiBcIlwiO1xuICAgICAgICByZXR1cm4gYCR7YWN0b3J9LSR7dGFyZ2V0fWA7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBidWlsZFBsYXRmb3JtUmVnaXN0cnlQYXlsb2FkKCk6IFBsYXRmb3JtUmVnaXN0cnlQYXlsb2FkIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHZlcnNpb246IHRoaXMuc29ja2V0aHViVmVyc2lvbixcbiAgICAgICAgICAgIGNvbnRleHRzOlxuICAgICAgICAgICAgICAgIHRoaXMuYXNDb250ZXh0VXJsICYmIHRoaXMuc29ja2V0aHViQ29udGV4dFVybFxuICAgICAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYXM6IHRoaXMuYXNDb250ZXh0VXJsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBzb2NrZXRodWI6IHRoaXMuc29ja2V0aHViQ29udGV4dFVybCxcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgcGxhdGZvcm1zOiB0aGlzLmdldFJlZ2lzdGVyZWRQbGF0Zm9ybXMoKSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGJ1aWxkUmVhZHlJbmZvKHJlYXNvbjogUmVhZHlSZWFzb24pOiBDbGllbnRSZWFkeUluZm8gfCB1bmRlZmluZWQge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICAhdGhpcy5zb2NrZXRodWJWZXJzaW9uIHx8XG4gICAgICAgICAgICAhdGhpcy5hc0NvbnRleHRVcmwgfHxcbiAgICAgICAgICAgICF0aGlzLnNvY2tldGh1YkNvbnRleHRVcmxcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzdGF0ZTogXCJyZWFkeVwiLFxuICAgICAgICAgICAgcmVhc29uLFxuICAgICAgICAgICAgc29ja2V0aHViVmVyc2lvbjogdGhpcy5zb2NrZXRodWJWZXJzaW9uLFxuICAgICAgICAgICAgY29udGV4dHM6IHtcbiAgICAgICAgICAgICAgICBhczogdGhpcy5hc0NvbnRleHRVcmwsXG4gICAgICAgICAgICAgICAgc29ja2V0aHViOiB0aGlzLnNvY2tldGh1YkNvbnRleHRVcmwsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcGxhdGZvcm1zOiB0aGlzLmdldFJlZ2lzdGVyZWRQbGF0Zm9ybXMoKS5tYXAoKHBsYXRmb3JtKSA9PiAoe1xuICAgICAgICAgICAgICAgIGlkOiBwbGF0Zm9ybS5pZCxcbiAgICAgICAgICAgICAgICB2ZXJzaW9uOiBwbGF0Zm9ybS52ZXJzaW9uLFxuICAgICAgICAgICAgICAgIGNvbnRleHRVcmw6IHBsYXRmb3JtLmNvbnRleHRVcmwsXG4gICAgICAgICAgICAgICAgY29udGV4dFZlcnNpb246IHBsYXRmb3JtLmNvbnRleHRWZXJzaW9uLFxuICAgICAgICAgICAgICAgIHNjaGVtYVZlcnNpb246IHBsYXRmb3JtLnNjaGVtYVZlcnNpb24sXG4gICAgICAgICAgICAgICAgdHlwZXM6IFsuLi5wbGF0Zm9ybS50eXBlc10sXG4gICAgICAgICAgICB9KSksXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZXNvbHZlUmVhZHlXYWl0ZXJzKGluZm86IENsaWVudFJlYWR5SW5mbykge1xuICAgICAgICBjb25zdCB3YWl0ZXJzID0gdGhpcy5yZWFkeVdhaXRlcnM7XG4gICAgICAgIHRoaXMucmVhZHlXYWl0ZXJzID0gW107XG4gICAgICAgIGZvciAoY29uc3Qgd2FpdGVyIG9mIHdhaXRlcnMpIHtcbiAgICAgICAgICAgIGlmICh3YWl0ZXIudGltZXIpIHtcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQod2FpdGVyLnRpbWVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHdhaXRlci5yZXNvbHZlKGluZm8pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZWplY3RSZWFkeVdhaXRlcnMoZXJyOiBFcnJvcikge1xuICAgICAgICBjb25zdCB3YWl0ZXJzID0gdGhpcy5yZWFkeVdhaXRlcnM7XG4gICAgICAgIHRoaXMucmVhZHlXYWl0ZXJzID0gW107XG4gICAgICAgIGZvciAoY29uc3Qgd2FpdGVyIG9mIHdhaXRlcnMpIHtcbiAgICAgICAgICAgIGlmICh3YWl0ZXIudGltZXIpIHtcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQod2FpdGVyLnRpbWVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHdhaXRlci5yZWplY3QoZXJyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZW1pdEluaXRFcnJvcihcbiAgICAgICAgZXJyb3I6IHN0cmluZyxcbiAgICAgICAgcGhhc2U6IEluaXRFcnJvclBoYXNlLFxuICAgICAgICByZXRyeWluZzogYm9vbGVhbixcbiAgICApIHtcbiAgICAgICAgdGhpcy5zb2NrZXQuX2VtaXQoXCJpbml0X2Vycm9yXCIsIHtcbiAgICAgICAgICAgIGVycm9yLFxuICAgICAgICAgICAgcGhhc2UsXG4gICAgICAgICAgICByZXRyeWluZyxcbiAgICAgICAgfSBzYXRpc2ZpZXMgQ2xpZW50SW5pdEVycm9yKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGVtaXRDbGllbnRFcnJvcihcbiAgICAgICAgZXZlbnQ6IHN0cmluZyxcbiAgICAgICAgY2FsbGJhY2s6IHVua25vd24sXG4gICAgICAgIGVycm9yTWVzc2FnZTogc3RyaW5nLFxuICAgICkge1xuICAgICAgICBpZiAodHlwZW9mIGNhbGxiYWNrID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKHsgZXJyb3I6IGVycm9yTWVzc2FnZSB9KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNvY2tldC5fZW1pdChcImNsaWVudF9lcnJvclwiLCB7XG4gICAgICAgICAgICBldmVudCxcbiAgICAgICAgICAgIGVycm9yOiBlcnJvck1lc3NhZ2UsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2xlYXJJbml0VGltZXJzKCkge1xuICAgICAgICBpZiAodGhpcy5pbml0VGltZW91dFRpbWVyKSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5pbml0VGltZW91dFRpbWVyKTtcbiAgICAgICAgICAgIHRoaXMuaW5pdFRpbWVvdXRUaW1lciA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy53YWl0aW5nV2FybmluZ1RpbWVyKSB7XG4gICAgICAgICAgICBjbGVhckludGVydmFsKHRoaXMud2FpdGluZ1dhcm5pbmdUaW1lcik7XG4gICAgICAgICAgICB0aGlzLndhaXRpbmdXYXJuaW5nVGltZXIgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXJ0V2FpdGluZ1dhcm5pbmdzKCkge1xuICAgICAgICBpZiAodGhpcy53YWl0aW5nV2FybmluZ1RpbWVyKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy53YWl0aW5nV2FybmluZ1RpbWVyID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNSZWFkeSgpIHx8IHRoaXMuaW5pdFN0YXRlID09PSBcImNsb3NlZFwiKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jbGVhckluaXRUaW1lcnMoKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBxdWV1ZVNpemUgPSB0aGlzLm91dGJvdW5kUXVldWUubGVuZ3RoO1xuICAgICAgICAgICAgY29uc3Qgb2xkZXN0ID0gdGhpcy5vdXRib3VuZFF1ZXVlWzBdO1xuICAgICAgICAgICAgY29uc3Qgb2xkZXN0QWdlU2Vjb25kcyA9IG9sZGVzdFxuICAgICAgICAgICAgICAgID8gKChEYXRlLm5vdygpIC0gb2xkZXN0LmVucXVldWVkQXQpIC8gMTAwMCkudG9GaXhlZCgxKVxuICAgICAgICAgICAgICAgIDogXCIwLjBcIjtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgICAgICBgW1NvY2tldGh1YkNsaWVudF0gU3RpbGwgd2FpdGluZyBmb3Igc2NoZW1hczsgcXVldWVkIG91dGJvdW5kIG1lc3NhZ2VzOiAke3F1ZXVlU2l6ZX07IG9sZGVzdCBxdWV1ZWQgYWdlOiAke29sZGVzdEFnZVNlY29uZHN9cy5gLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSwgdGhpcy53YWl0aW5nV2FybmluZ0ludGVydmFsTXMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhcnRJbml0aWFsaXphdGlvbihyZWFzb246IFJlYWR5UmVhc29uLCByZXBsYXlPblJlYWR5OiBib29sZWFuKSB7XG4gICAgICAgIGlmICghdGhpcy5zb2NrZXQuY29ubmVjdGVkIHx8IHRoaXMuaW5pdFN0YXRlID09PSBcImNsb3NlZFwiKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0b2tlbiA9ICsrdGhpcy5pbml0VG9rZW5Db3VudGVyO1xuICAgICAgICB0aGlzLmluaXRDeWNsZSA9IHtcbiAgICAgICAgICAgIHRva2VuLFxuICAgICAgICAgICAgcmVhc29uLFxuICAgICAgICAgICAgc3RhcnRlZEF0OiBEYXRlLm5vdygpLFxuICAgICAgICAgICAgcmVwbGF5T25SZWFkeSxcbiAgICAgICAgICAgIHRpbWVkT3V0OiBmYWxzZSxcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5pbml0U3RhdGUgPSBcImluaXRpYWxpemluZ1wiO1xuICAgICAgICB0aGlzLmNsZWFySW5pdFRpbWVycygpO1xuXG4gICAgICAgIHRoaXMuaW5pdFRpbWVvdXRUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmluaXRDeWNsZSB8fCB0aGlzLmluaXRDeWNsZS50b2tlbiAhPT0gdG9rZW4pIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmluaXRDeWNsZS50aW1lZE91dCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmluaXRTdGF0ZSA9IFwiaW5pdF9lcnJvclwiO1xuICAgICAgICAgICAgY29uc3QgdGltZW91dE1zZyA9IGBJbml0aWFsaXphdGlvbiB0aW1lZCBvdXQgYWZ0ZXIgJHt0aGlzLm9wdGlvbnMuaW5pdFRpbWVvdXRNc31tcyB3YWl0aW5nIGZvciBzY2hlbWFzYDtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgICAgICBgW1NvY2tldGh1YkNsaWVudF0gJHt0aW1lb3V0TXNnfTsgcXVldWVkIG91dGJvdW5kIG1lc3NhZ2VzOiAke3RoaXMub3V0Ym91bmRRdWV1ZS5sZW5ndGh9LiBXYWl0aW5nIGZvciBzY2hlbWFzIGV2ZW50IGZyb20gc2VydmVyLmAsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5lbWl0SW5pdEVycm9yKHRpbWVvdXRNc2csIFwidGltZW91dFwiLCBmYWxzZSk7XG4gICAgICAgICAgICB0aGlzLnN0YXJ0V2FpdGluZ1dhcm5pbmdzKCk7XG4gICAgICAgIH0sIHRoaXMub3B0aW9ucy5pbml0VGltZW91dE1zKTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gUHVsbCB0aGUgbGF0ZXN0IHJlZ2lzdHJ5IGZyb20gdGhlIHNlcnZlciBmb3IgdGhpcyBpbml0IGN5Y2xlLlxuICAgICAgICAgICAgdGhpcy5yZXF1ZXN0U2NoZW1hUmVnaXN0cnkoKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICB0aGlzLmluaXRTdGF0ZSA9IFwiaW5pdF9lcnJvclwiO1xuICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKTtcbiAgICAgICAgICAgIHRoaXMuZW1pdEluaXRFcnJvcihtZXNzYWdlLCBcInNjaGVtYXMtcmVxdWVzdFwiLCBmYWxzZSk7XG4gICAgICAgICAgICB0aGlzLnN0YXJ0V2FpdGluZ1dhcm5pbmdzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIG1hcmtSZWFkeShyZWFzb246IFJlYWR5UmVhc29uKSB7XG4gICAgICAgIGNvbnN0IGN5Y2xlID0gdGhpcy5pbml0Q3ljbGU7XG4gICAgICAgIGNvbnN0IHJlcGxheU9uUmVhZHkgPSBCb29sZWFuKGN5Y2xlPy5yZXBsYXlPblJlYWR5KTtcbiAgICAgICAgdGhpcy5pbml0Q3ljbGUgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuY2xlYXJJbml0VGltZXJzKCk7XG4gICAgICAgIHRoaXMuaW5pdFN0YXRlID0gXCJyZWFkeVwiO1xuICAgICAgICB0aGlzLmhhc1JlYWR5T25jZSA9IHRydWU7XG5cbiAgICAgICAgY29uc3QgaW5mbyA9IHRoaXMuYnVpbGRSZWFkeUluZm8ocmVhc29uKTtcbiAgICAgICAgaWYgKCFpbmZvKSB7XG4gICAgICAgICAgICBjb25zdCBlcnIgPSBuZXcgRXJyb3IoXCJGYWlsZWQgdG8gYnVpbGQgcmVhZHkgcGF5bG9hZFwiKTtcbiAgICAgICAgICAgIHRoaXMuaW5pdFN0YXRlID0gXCJpbml0X2Vycm9yXCI7XG4gICAgICAgICAgICB0aGlzLmVtaXRJbml0RXJyb3IoZXJyLm1lc3NhZ2UsIFwic2NoZW1hcy1hcHBseVwiLCB0cnVlKTtcbiAgICAgICAgICAgIHRoaXMucmVqZWN0UmVhZHlXYWl0ZXJzKGVycik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zb2NrZXQuX2VtaXQoXCJyZWFkeVwiLCBpbmZvKTtcbiAgICAgICAgdGhpcy5sYXRlc3RSZWFkeUluZm8gPSBpbmZvO1xuICAgICAgICB0aGlzLnJlc29sdmVSZWFkeVdhaXRlcnMoaW5mbyk7XG5cbiAgICAgICAgaWYgKHJlcGxheU9uUmVhZHkpIHtcbiAgICAgICAgICAgIC8vIFJlcGxheSBwcmV2aW91c2x5IHNlbnQgc3RhdGUgYmVmb3JlIGZsdXNoaW5nIG5ld2x5IHF1ZXVlZCBvdXRib3VuZCBldmVudHMuXG4gICAgICAgICAgICB0aGlzLnJlcGxheShcImFjdGl2aXR5LW9iamVjdFwiLCB0aGlzLmV2ZW50c1tcImFjdGl2aXR5LW9iamVjdFwiXSk7XG4gICAgICAgICAgICB0aGlzLnJlcGxheShcImNyZWRlbnRpYWxzXCIsIHRoaXMuZXZlbnRzLmNyZWRlbnRpYWxzKTtcbiAgICAgICAgICAgIHRoaXMucmVwbGF5KFwibWVzc2FnZVwiLCB0aGlzLmV2ZW50cy5jb25uZWN0KTtcbiAgICAgICAgICAgIHRoaXMucmVwbGF5KFwibWVzc2FnZVwiLCB0aGlzLmV2ZW50cy5qb2luKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZmx1c2hPdXRib3VuZFF1ZXVlKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjb21wdXRlUGF5bG9hZEZpbmdlcnByaW50KHBheWxvYWQ6IHVua25vd24pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgICAgICBpZiAoIXBheWxvYWQgfHwgdHlwZW9mIHBheWxvYWQgIT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVnaXN0cnkgPSBwYXlsb2FkIGFzIFBsYXRmb3JtUmVnaXN0cnlQYXlsb2FkO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0eXBlb2YgcmVnaXN0cnkuY29udGV4dHM/LmFzICE9PSBcInN0cmluZ1wiIHx8XG4gICAgICAgICAgICB0eXBlb2YgcmVnaXN0cnkuY29udGV4dHM/LnNvY2tldGh1YiAhPT0gXCJzdHJpbmdcIiB8fFxuICAgICAgICAgICAgIUFycmF5LmlzQXJyYXkocmVnaXN0cnkucGxhdGZvcm1zKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZFBsYXRmb3JtcyA9IHJlZ2lzdHJ5LnBsYXRmb3Jtc1xuICAgICAgICAgICAgLm1hcCgocGxhdGZvcm0pID0+ICh7XG4gICAgICAgICAgICAgICAgaWQ6IHBsYXRmb3JtLmlkLFxuICAgICAgICAgICAgICAgIHZlcnNpb246IHBsYXRmb3JtLnZlcnNpb24sXG4gICAgICAgICAgICAgICAgY29udGV4dFVybDogcGxhdGZvcm0uY29udGV4dFVybCxcbiAgICAgICAgICAgICAgICBjb250ZXh0VmVyc2lvbjogcGxhdGZvcm0uY29udGV4dFZlcnNpb24sXG4gICAgICAgICAgICAgICAgc2NoZW1hVmVyc2lvbjogcGxhdGZvcm0uc2NoZW1hVmVyc2lvbixcbiAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IGEuaWQubG9jYWxlQ29tcGFyZShiLmlkKSk7XG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICB2ZXJzaW9uOiByZWdpc3RyeS52ZXJzaW9uLFxuICAgICAgICAgICAgY29udGV4dHM6IHJlZ2lzdHJ5LmNvbnRleHRzLFxuICAgICAgICAgICAgcGxhdGZvcm1zOiBub3JtYWxpemVkUGxhdGZvcm1zLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZVNjaGVtYXNQYXlsb2FkKHBheWxvYWQ6IHVua25vd24pIHtcbiAgICAgICAgaWYgKCFwYXlsb2FkIHx8IHR5cGVvZiBwYXlsb2FkICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaW5jb21pbmdGaW5nZXJwcmludCA9IHRoaXMuY29tcHV0ZVBheWxvYWRGaW5nZXJwcmludChwYXlsb2FkKTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5pbml0U3RhdGUgPT09IFwicmVhZHlcIiAmJlxuICAgICAgICAgICAgIXRoaXMuaW5pdEN5Y2xlICYmXG4gICAgICAgICAgICBpbmNvbWluZ0ZpbmdlcnByaW50ICYmXG4gICAgICAgICAgICBpbmNvbWluZ0ZpbmdlcnByaW50ID09PSB0aGlzLnJlZ2lzdHJ5RmluZ2VycHJpbnRcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5pbml0U3RhdGUgPT09IFwicmVhZHlcIiAmJiAhdGhpcy5pbml0Q3ljbGUpIHtcbiAgICAgICAgICAgIC8vIEEgc2VydmVyLXNpZGUgc2NoZW1hIHVwZGF0ZSBhcnJpdmVkIHdoaWxlIGFscmVhZHkgcnVubmluZy5cbiAgICAgICAgICAgIHRoaXMuaW5pdFN0YXRlID0gXCJpbml0aWFsaXppbmdcIjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRQYXlsb2FkID0gdGhpcy5hcHBseVBsYXRmb3JtUmVnaXN0cnkocGF5bG9hZCk7XG4gICAgICAgIGlmICghbm9ybWFsaXplZFBheWxvYWQpIHtcbiAgICAgICAgICAgIHRoaXMuaW5pdFN0YXRlID0gXCJpbml0X2Vycm9yXCI7XG4gICAgICAgICAgICB0aGlzLmVtaXRJbml0RXJyb3IoXG4gICAgICAgICAgICAgICAgXCJSZWNlaXZlZCBpbnZhbGlkIHNjaGVtYXMgcGF5bG9hZCBmcm9tIHNlcnZlclwiLFxuICAgICAgICAgICAgICAgIFwic2NoZW1hcy1hcHBseVwiLFxuICAgICAgICAgICAgICAgIHRydWUsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5zdGFydFdhaXRpbmdXYXJuaW5ncygpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuaW5pdEN5Y2xlKSB7XG4gICAgICAgICAgICB0aGlzLm1hcmtSZWFkeSh0aGlzLmluaXRDeWNsZS5yZWFzb24pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubWFya1JlYWR5KFwic2NoZW1hcy11cGRhdGVcIik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVQdWJsaWNFbWl0KFxuICAgICAgICBldmVudDogc3RyaW5nLFxuICAgICAgICBjb250ZW50OiB1bmtub3duLFxuICAgICAgICBjYWxsYmFjaz86IHVua25vd24sXG4gICAgKSB7XG4gICAgICAgIGNvbnN0IHF1ZXVlZEV2ZW50OiBRdWV1ZWRPdXRib3VuZEV2ZW50ID0ge1xuICAgICAgICAgICAgZXZlbnQsXG4gICAgICAgICAgICBjb250ZW50LFxuICAgICAgICAgICAgY2FsbGJhY2ssXG4gICAgICAgICAgICBlbnF1ZXVlZEF0OiBEYXRlLm5vdygpLFxuICAgICAgICAgICAgc2VxdWVuY2U6IHRoaXMub3V0Ym91bmRTZXF1ZW5jZSsrLFxuICAgICAgICB9O1xuXG4gICAgICAgIGlmICghdGhpcy5pc1JlYWR5KCkpIHtcbiAgICAgICAgICAgIC8vIEhvbGQgb3V0Ym91bmQgdW50aWwgc2NoZW1hcy9jb250ZXh0IG1ldGFkYXRhIGlzIGxvYWRlZC5cbiAgICAgICAgICAgIHRoaXMuZW5xdWV1ZU91dGJvdW5kKHF1ZXVlZEV2ZW50KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlbmRPdXRib3VuZChxdWV1ZWRFdmVudCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBlbnF1ZXVlT3V0Ym91bmQocXVldWVkRXZlbnQ6IFF1ZXVlZE91dGJvdW5kRXZlbnQpIHtcbiAgICAgICAgdGhpcy5vdXRib3VuZFF1ZXVlLnB1c2gocXVldWVkRXZlbnQpO1xuICAgICAgICBpZiAodGhpcy5vdXRib3VuZFF1ZXVlLmxlbmd0aCA8PSB0aGlzLm9wdGlvbnMubWF4UXVldWVkT3V0Ym91bmQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkcm9wcGVkID0gdGhpcy5vdXRib3VuZFF1ZXVlLnNoaWZ0KCk7XG4gICAgICAgIGlmICghZHJvcHBlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZW1pdENsaWVudEVycm9yKFxuICAgICAgICAgICAgZHJvcHBlZC5ldmVudCxcbiAgICAgICAgICAgIGRyb3BwZWQuY2FsbGJhY2ssXG4gICAgICAgICAgICBcIlNvY2tldGh1YkNsaWVudCBxdWV1ZSBvdmVyZmxvdyBiZWZvcmUgcmVhZHlcIixcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGZsdXNoT3V0Ym91bmRRdWV1ZSgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzUmVhZHkoKSB8fCB0aGlzLm91dGJvdW5kUXVldWUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgY29uc3QgcXVldWVkID0gdGhpcy5vdXRib3VuZFF1ZXVlLnNvcnQoXG4gICAgICAgICAgICAoYSwgYikgPT4gYS5zZXF1ZW5jZSAtIGIuc2VxdWVuY2UsXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMub3V0Ym91bmRRdWV1ZSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIHF1ZXVlZCkge1xuICAgICAgICAgICAgaWYgKG5vdyAtIGVudHJ5LmVucXVldWVkQXQgPiB0aGlzLm9wdGlvbnMubWF4UXVldWVkQWdlTXMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXRDbGllbnRFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgZW50cnkuZXZlbnQsXG4gICAgICAgICAgICAgICAgICAgIGVudHJ5LmNhbGxiYWNrLFxuICAgICAgICAgICAgICAgICAgICBgU29ja2V0aHViQ2xpZW50IHF1ZXVlZCBtZXNzYWdlIGV4cGlyZWQgYWZ0ZXIgJHt0aGlzLm9wdGlvbnMubWF4UXVldWVkQWdlTXN9bXMgYmVmb3JlIGluaXRpYWxpemF0aW9uYCxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zZW5kT3V0Ym91bmQoZW50cnkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZW5kT3V0Ym91bmQoZW50cnk6IFF1ZXVlZE91dGJvdW5kRXZlbnQpIHtcbiAgICAgICAgbGV0IG91dGdvaW5nID0gZW50cnkuY29udGVudDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChlbnRyeS5ldmVudCA9PT0gXCJjcmVkZW50aWFsc1wiIHx8IGVudHJ5LmV2ZW50ID09PSBcIm1lc3NhZ2VcIikge1xuICAgICAgICAgICAgICAgIC8vIFJ1biBjYW5vbmljYWwgZXhwYW5zaW9uL25vcm1hbGl6YXRpb24gYXQgc2VuZCB0aW1lIHNvIHF1ZXVlZCBhbmRcbiAgICAgICAgICAgICAgICAvLyBpbW1lZGlhdGUgc2VuZHMgZm9sbG93IHRoZSBleGFjdCBzYW1lIHBhdGguXG4gICAgICAgICAgICAgICAgb3V0Z29pbmcgPSB0aGlzLkFjdGl2aXR5U3RyZWFtcy5TdHJlYW0oXG4gICAgICAgICAgICAgICAgICAgIGVudHJ5LmNvbnRlbnQgYXMgQWN0aXZpdHlTdHJlYW0sXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBpZiAob3V0Z29pbmcgJiYgdHlwZW9mIG91dGdvaW5nID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFjdGl2aXR5ID0gb3V0Z29pbmcgYXMgQWN0aXZpdHlTdHJlYW07XG4gICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICFhY3Rpdml0eVtcIkBjb250ZXh0XCJdICYmXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YgYWN0aXZpdHkucGxhdGZvcm0gPT09IFwic3RyaW5nXCIgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2aXR5LnBsYXRmb3JtLnRyaW0oKS5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZpdHlbXCJAY29udGV4dFwiXSA9IHRoaXMuY29udGV4dEZvcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpdml0eS5wbGF0Zm9ybSxcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGVudHJ5LmV2ZW50ID09PSBcImNyZWRlbnRpYWxzXCIgJiYgIWFjdGl2aXR5LnR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2aXR5LnR5cGUgPSBcImNyZWRlbnRpYWxzXCI7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZpdHkuYWN0b3IgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVvZiBhY3Rpdml0eS5hY3RvciA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgIWFjdGl2aXR5LmFjdG9yLnR5cGVcbiAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhY3Rpdml0eS5hY3Rvci50eXBlID0gXCJwZXJzb25cIjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5wbGF0Zm9ybVJlZ2lzdHJ5LnNpemUgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbGlkYXRpb25FcnJvciA9IHRoaXMudmFsaWRhdGVBY3Rpdml0eShcbiAgICAgICAgICAgICAgICAgICAgICAgIG91dGdvaW5nIGFzIEFjdGl2aXR5U3RyZWFtLFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBpZiAodmFsaWRhdGlvbkVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXRDbGllbnRFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS5ldmVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS5jYWxsYmFjayxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBgU29ja2V0aHViQ2xpZW50IHZhbGlkYXRpb24gZmFpbGVkOiAke3ZhbGlkYXRpb25FcnJvcn1gLFxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlbnRyeS5ldmVudCA9PT0gXCJjcmVkZW50aWFsc1wiKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ldmVudENyZWRlbnRpYWxzKG91dGdvaW5nIGFzIEFjdGl2aXR5U3RyZWFtKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZW50cnkuZXZlbnQgPT09IFwibWVzc2FnZVwiKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ldmVudE1lc3NhZ2Uob3V0Z29pbmcgYXMgQmFzZUFjdGl2aXR5T2JqZWN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlbnRyeS5ldmVudCA9PT0gXCJhY3Rpdml0eS1vYmplY3RcIikge1xuICAgICAgICAgICAgICAgIC8vIFBlcnNpc3Qgb25seSBhZnRlciBzdWNjZXNzZnVsIHNlcnZlciBBQ0sgdG8gYXZvaWQgcmVwbGF5aW5nXG4gICAgICAgICAgICAgICAgLy8gcmVqZWN0ZWQgb2JqZWN0cyBvbiByZWNvbm5lY3Rpb24uXG4gICAgICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxDYWxsYmFjayA9IGVudHJ5LmNhbGxiYWNrO1xuICAgICAgICAgICAgICAgIGNvbnN0IG9iaiA9IG91dGdvaW5nIGFzIEFjdGl2aXR5T2JqZWN0O1xuICAgICAgICAgICAgICAgIHRoaXMuX3NvY2tldC5lbWl0KFxuICAgICAgICAgICAgICAgICAgICBlbnRyeS5ldmVudCxcbiAgICAgICAgICAgICAgICAgICAgb3V0Z29pbmcsXG4gICAgICAgICAgICAgICAgICAgIChyZXNwPzogeyBlcnJvcj86IHN0cmluZyB9KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzcCAmJiB0eXBlb2YgcmVzcC5lcnJvciA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmouaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ldmVudHNbXCJhY3Rpdml0eS1vYmplY3RcIl0uZGVsZXRlKG9iai5pZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmV2ZW50QWN0aXZpdHlPYmplY3Qob2JqKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb3JpZ2luYWxDYWxsYmFjayA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWxDYWxsYmFjayhyZXNwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zb2NrZXQuZW1pdChlbnRyeS5ldmVudCwgb3V0Z29pbmcsIGVudHJ5LmNhbGxiYWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBjb25zdCBtZXNzYWdlID0gZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpO1xuICAgICAgICAgICAgdGhpcy5lbWl0Q2xpZW50RXJyb3IoZW50cnkuZXZlbnQsIGVudHJ5LmNhbGxiYWNrLCBtZXNzYWdlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgbG9nKG1zZzogc3RyaW5nLCBvYmo/OiB1bmtub3duKSB7XG4gICAgICAgIGlmICh0aGlzLmRlYnVnKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhtc2csIG9iaik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHJlZ2lzdGVyU29ja2V0SU9IYW5kbGVycygpIHtcbiAgICAgICAgLy8gcmVnaXN0ZXIgZm9yIGV2ZW50cyB0aGF0IGdpdmUgdXMgaW5mb3JtYXRpb24gb24gY29ubmVjdGlvbiBzdGF0dXNcbiAgICAgICAgdGhpcy5fc29ja2V0Lm9uKFwiY29ubmVjdFwiLCAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNvY2tldC5pZCA9IHRoaXMuX3NvY2tldC5pZDtcbiAgICAgICAgICAgIHRoaXMuc29ja2V0LmNvbm5lY3RlZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLnNvY2tldC5fZW1pdChcImNvbm5lY3RcIik7XG4gICAgICAgICAgICB0aGlzLnN0YXJ0SW5pdGlhbGl6YXRpb24oXG4gICAgICAgICAgICAgICAgdGhpcy5oYXNSZWFkeU9uY2UgPyBcInJlY29ubmVjdFwiIDogXCJpbml0aWFsLWNvbm5lY3RcIixcbiAgICAgICAgICAgICAgICB0cnVlLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX3NvY2tldC5vbihcImNvbm5lY3RfZXJyb3JcIiwgKG9iaj86IHVua25vd24pID0+IHtcbiAgICAgICAgICAgIHRoaXMuc29ja2V0Ll9lbWl0KFwiY29ubmVjdF9lcnJvclwiLCBvYmopO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fc29ja2V0Lm9uKFwiZGlzY29ubmVjdFwiLCAob2JqPzogdW5rbm93bikgPT4ge1xuICAgICAgICAgICAgdGhpcy5zb2NrZXQuY29ubmVjdGVkID0gZmFsc2U7XG4gICAgICAgICAgICBpZiAodGhpcy5pbml0U3RhdGUgIT09IFwiY2xvc2VkXCIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmluaXRTdGF0ZSA9IFwiaWRsZVwiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5jbGVhckluaXRUaW1lcnMoKTtcbiAgICAgICAgICAgIHRoaXMuc29ja2V0Ll9lbWl0KFwiZGlzY29ubmVjdFwiLCBvYmopO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fc29ja2V0Lm9uKFwic2NoZW1hc1wiLCAocGF5bG9hZDogdW5rbm93bikgPT4ge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVTY2hlbWFzUGF5bG9hZChwYXlsb2FkKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gdXNlIGFzIG1pZGRsZXdhcmUgdG8gcmVjZWl2ZSBpbmNvbWluZyBTb2NrZXRodWIgbWVzc2FnZXMgYW5kIHVucGFjayB0aGVtXG4gICAgICAgIC8vIHVzaW5nIHRoZSBBY3Rpdml0eVN0cmVhbXMgbGlicmFyeSBiZWZvcmUgcGFzc2luZyB0aGVtIGFsb25nIHRvIHRoZSBhcHAuXG4gICAgICAgIHRoaXMuX3NvY2tldC5vbihcIm1lc3NhZ2VcIiwgKG9iaikgPT4ge1xuICAgICAgICAgICAgdGhpcy5zb2NrZXQuX2VtaXQoXCJtZXNzYWdlXCIsIHRoaXMuQWN0aXZpdHlTdHJlYW1zLlN0cmVhbShvYmopKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVHlwZSBndWFyZCB0byBjaGVjayBpZiBhbiBvYmplY3QgaXMgYW4gQWN0aXZpdHlTdHJlYW0gd2l0aCBhIHZhbGlkIGFjdG9yLmlkLlxuICAgICAqL1xuICAgIHByaXZhdGUgaGFzQWN0b3JJZChcbiAgICAgICAgb2JqOiBBY3Rpdml0eVN0cmVhbSB8IEFjdGl2aXR5T2JqZWN0LFxuICAgICk6IG9iaiBpcyBBY3Rpdml0eVN0cmVhbSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBcImFjdG9yXCIgaW4gb2JqICYmXG4gICAgICAgICAgICBvYmouYWN0b3IgIT09IG51bGwgJiZcbiAgICAgICAgICAgIHR5cGVvZiBvYmouYWN0b3IgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgICAgIFwiaWRcIiBpbiBvYmouYWN0b3IgJiZcbiAgICAgICAgICAgIHR5cGVvZiBvYmouYWN0b3IuaWQgPT09IFwic3RyaW5nXCJcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXBsYXlzIHByZXZpb3VzbHkgc2VudCBldmVudHMgdG8gdGhlIHNlcnZlciBhZnRlciByZWNvbm5lY3Rpb24uXG4gICAgICpcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYXV0b21hdGljYWxseSB3aGVuIHRoZSBTb2NrZXQuSU8gY29ubmVjdGlvbiBpc1xuICAgICAqIHJlLWVzdGFibGlzaGVkIGFmdGVyIGEgdHJhbnNpZW50IG5ldHdvcmsgaW50ZXJydXB0aW9uLiBJdCByZXNlbmRzXG4gICAgICogY3JlZGVudGlhbHMgYW5kIGNvbm5lY3Rpb24gc3RhdGUgc28gdGhlIHVzZXIgZG9lc24ndCBuZWVkIHRvIG1hbnVhbGx5XG4gICAgICogcmUtYXV0aGVudGljYXRlIG9yIHJlam9pbiBjaGFubmVscy5cbiAgICAgKlxuICAgICAqIFNlY3VyaXR5IGNvbnNpZGVyYXRpb25zOlxuICAgICAqIC0gT25seSByZXBsYXlzIGV2ZW50cyBzdG9yZWQgaW4gbWVtb3J5IGR1cmluZyB0aGlzIHNlc3Npb25cbiAgICAgKiAtIERvZXMgbm90IHJlcGxheSBhZnRlciBwYWdlIHJlZnJlc2ggKG1lbW9yeSBjbGVhcmVkKVxuICAgICAqIC0gU2VydmVyIHNob3VsZCB2YWxpZGF0ZSByZXBsYXllZCBjcmVkZW50aWFscyAobWF5IGJlIHN0YWxlL3Jldm9rZWQpXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbmFtZSAtIEV2ZW50IG5hbWUgdG8gZW1pdCAoXCJjcmVkZW50aWFsc1wiLCBcImFjdGl2aXR5LW9iamVjdFwiLCBcIm1lc3NhZ2VcIilcbiAgICAgKiBAcGFyYW0gYXNNYXAgLSBNYXAgb2YgZXZlbnRzIHRvIHJlcGxheVxuICAgICAqL1xuICAgIHByaXZhdGUgcmVwbGF5PEsgZXh0ZW5kcyBrZXlvZiBSZXBsYXlFdmVudE1hcD4oXG4gICAgICAgIG5hbWU6IEssXG4gICAgICAgIGFzTWFwOiBNYXA8c3RyaW5nLCBSZXBsYXlFdmVudE1hcFtLXT4sXG4gICAgKTogdm9pZCB7XG4gICAgICAgIGZvciAoY29uc3Qgb2JqIG9mIGFzTWFwLnZhbHVlcygpKSB7XG4gICAgICAgICAgICAvLyBhY3Rpdml0eS1vYmplY3RzIGFyZSByYXcgb2JqZWN0cywgZG9uJ3QgcGFzcyB0aHJvdWdoIFN0cmVhbSgpXG4gICAgICAgICAgICAvLyB3aGljaCBpcyBkZXNpZ25lZCBmb3IgYWN0aXZpdHkgc3RyZWFtcyB3aXRoIGFjdG9yL29iamVjdCBzdHJ1Y3R1cmVcbiAgICAgICAgICAgIGNvbnN0IGlzQWN0aXZpdHlPYmplY3QgPSBuYW1lID09PSBcImFjdGl2aXR5LW9iamVjdFwiO1xuICAgICAgICAgICAgaWYgKGlzQWN0aXZpdHlPYmplY3QpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBleHBhbmRlZE9iaiA9IG9iaiBhcyBCYXNlQWN0aXZpdHlPYmplY3Q7XG4gICAgICAgICAgICAgICAgY29uc3QgaWQgPSBleHBhbmRlZE9iaj8uaWQ7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2coYHJlcGxheWluZyAke25hbWV9IGZvciAke2lkfWApO1xuICAgICAgICAgICAgICAgIHRoaXMuX3NvY2tldC5lbWl0KG5hbWUsIGV4cGFuZGVkT2JqKTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgZXhwYW5kZWRPYmogPSB0aGlzLkFjdGl2aXR5U3RyZWFtcy5TdHJlYW0oXG4gICAgICAgICAgICAgICAgb2JqIGFzIEFjdGl2aXR5U3RyZWFtLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGxldCBpZCA9IGV4cGFuZGVkT2JqPy5pZDtcbiAgICAgICAgICAgIGlmICh0aGlzLmhhc0FjdG9ySWQoZXhwYW5kZWRPYmopKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWN0b3IgPSAoZXhwYW5kZWRPYmogYXMgQWN0aXZpdHlTdHJlYW0pLmFjdG9yO1xuICAgICAgICAgICAgICAgIC8vIGFjdG9yIGNhbiBiZSBhIHN0cmluZyAoSklEKSBvciBhbiBvYmplY3Qgd2l0aCBhbiBpZCBmaWVsZFxuICAgICAgICAgICAgICAgIGlkID0gdHlwZW9mIGFjdG9yID09PSBcInN0cmluZ1wiID8gYWN0b3IgOiBhY3Rvci5pZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMubG9nKGByZXBsYXlpbmcgJHtuYW1lfSBmb3IgJHtpZH1gKTtcbiAgICAgICAgICAgIHRoaXMuX3NvY2tldC5lbWl0KG5hbWUsIGV4cGFuZGVkT2JqKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuKChnbG9iYWw6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA9PiB7XG4gICAgZ2xvYmFsLlNvY2tldGh1YkNsaWVudCA9IFNvY2tldGh1YkNsaWVudDtcbn0pKFxuICAgIHR5cGVvZiBnbG9iYWxUaGlzID09PSBcIm9iamVjdFwiXG4gICAgICAgID8gKGdsb2JhbFRoaXMgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pXG4gICAgICAgIDoge30sXG4pO1xuIgogIF0sCiAgIm1hcHBpbmdzIjogIm94Q0FFQSxJQUFJLEdBQU0sT0FBTyxVQUFVLGVBQ3ZCLEdBQVMsSUFTYixTQUFTLEVBQU0sRUFBRyxFQVNsQixHQUFJLE9BQU8sUUFPVCxHQU5BLEdBQU8sVUFBWSxPQUFPLE9BQU8sSUFBSSxFQU1qQyxDQUFDLElBQUksR0FBTyxFQUFFLFVBQVcsR0FBUyxHQVl4QyxTQUFTLEVBQUUsQ0FBQyxFQUFJLEVBQVMsRUFBTSxDQUM3QixLQUFLLEdBQUssRUFDVixLQUFLLFFBQVUsRUFDZixLQUFLLEtBQU8sR0FBUSxHQWN0QixTQUFTLEVBQVcsQ0FBQyxFQUFTLEVBQU8sRUFBSSxFQUFTLEVBQU0sQ0FDdEQsR0FBSSxPQUFPLElBQU8sV0FDaEIsTUFBVSxVQUFVLGlDQUFpQyxFQUd2RCxJQUFJLEVBQVcsSUFBSSxHQUFHLEVBQUksR0FBVyxFQUFTLENBQUksRUFDOUMsRUFBTSxHQUFTLEdBQVMsRUFBUSxFQUVwQyxHQUFJLENBQUMsRUFBUSxRQUFRLEdBQU0sRUFBUSxRQUFRLEdBQU8sRUFBVSxFQUFRLGVBQy9ELFFBQUksQ0FBQyxFQUFRLFFBQVEsR0FBSyxHQUFJLEVBQVEsUUFBUSxHQUFLLEtBQUssQ0FBUSxFQUNoRSxPQUFRLFFBQVEsR0FBTyxDQUFDLEVBQVEsUUFBUSxHQUFNLENBQVEsRUFFM0QsT0FBTyxFQVVULFNBQVMsRUFBVSxDQUFDLEVBQVMsRUFBSyxDQUNoQyxHQUFJLEVBQUUsRUFBUSxlQUFpQixFQUFHLEVBQVEsUUFBVSxJQUFJLEdBQ25ELFlBQU8sRUFBUSxRQUFRLEdBVTlCLFNBQVMsRUFBWSxFQUFHLENBQ3RCLEtBQUssUUFBVSxJQUFJLEdBQ25CLEtBQUssYUFBZSxFQVV0QixHQUFhLFVBQVUsV0FBYSxRQUFtQixFQUFHLENBQ3hELElBQUksRUFBUSxDQUFDLEVBQ1QsRUFDQSxFQUVKLEdBQUksS0FB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QyxJQUFJLEVBQWMsUUFBUSxFQUFjLGFBQWEsRUFBZ0IsNEJBQTRCLEVBQU8sQ0FBQyxTQUFTLGtEQUFrRCxZQUFZLGlEQUFpRCxnQkFBZ0IsZUFBZSxFQUFFLEVBQU0sS0FBSyxNQUFNLEVBQW1CLE9BQU8sYUFBYSxTQUFTLENBQUssQ0FBQyxFQUFLLENBQUMsTUFBTSxXQUFXLEVBQU8sRUFBSyxFQUFFLFNBQVMsQ0FBRyxDQUFDLEVBQU0sRUFBUyxDQUFDLElBQUksRUFBTyxDQUFDLEVBQUUsRUFBTyxFQUFNLE9BQU8sTUFBTSxJQUFTLEVBQU8sR0FBUSxFQUFTLEVBQU0sRUFBTyxFQUFFLE9BQU8sRUFBTyxTQUFTLENBQVMsQ0FBQyxFQUFPLEVBQVMsQ0FBQyxJQUFJLEVBQU0sRUFBTyxNQUFNLEdBQUcsRUFBRSxFQUFPLEdBQUcsR0FBRyxFQUFNLE9BQU8sRUFBRSxFQUFPLEVBQU0sR0FBRyxJQUFJLEVBQU8sRUFBTSxHQUFHLEVBQU8sRUFBTyxRQUFRLEVBQWdCLEdBQUcsRUFBRSxJQUFJLEdBQU8sRUFBTyxNQUFNLEdBQUcsRUFBRSxFQUFRLEVBQUksR0FBTyxDQUFRLEVBQUUsS0FBSyxHQUFHLEVBQUUsT0FBTyxFQUFPLEVBQVEsU0FBUyxDQUFVLENBQUMsRUFBTyxDQUFDLElBQUksRUFBTyxDQUFDLEVBQUUsRUFBUSxFQUFFLEVBQU8sRUFBTyxPQUFPLE1BQU0sRUFBUSxFQUFPLENBQUMsSUFBSSxHQUFNLEVBQU8sV0FBVyxHQUFTLEVBQUUsR0FBRyxJQUFPLE9BQU8sSUFBTyxPQUFPLEVBQVEsRUFBTyxDQUFDLElBQUksRUFBTSxFQUFPLFdBQVcsR0FBUyxFQUFFLElBQUksRUFBTSxRQUFRLE1BQU0sRUFBTyxPQUFPLEdBQU0sT0FBTyxLQUFLLEVBQU0sTUFBTSxLQUFLLEVBQU8sT0FBTyxLQUFLLEVBQUssRUFBRSxJQUFlLE9BQU8sS0FBSyxFQUFLLEVBQUUsT0FBTyxFQUFPLElBQUksRUFBVyxDQUFDLElBQWEsT0FBTyxjQUFjLEdBQUcsQ0FBVSxFQUFFLEVBQWEsUUFBUSxDQUFDLEVBQVUsQ0FBQyxHQUFHLEdBQVcsSUFBSSxFQUFVLEdBQUcsTUFBTyxLQUFJLEVBQVUsSUFBSSxHQUFHLEdBQVcsSUFBSSxFQUFVLEdBQUcsT0FBTyxFQUFVLEdBQUcsR0FBRyxHQUFXLElBQUksRUFBVSxJQUFJLE9BQU8sRUFBVSxHQUFHLE1BQU8sS0FBSSxFQUFhLFFBQVEsQ0FBQyxFQUFNLEVBQUssQ0FBQyxPQUFPLEVBQU0sR0FBRyxJQUFJLEVBQU0sTUFBTSxHQUFNLElBQUksSUFBSSxFQUFNLFFBQVEsQ0FBQyxFQUFNLEVBQVUsRUFBVSxDQUFDLElBQUksRUFBRSxFQUFFLEVBQU0sRUFBVSxFQUFNLEVBQU0sR0FBRyxFQUFFLEdBQU8sRUFBRSxHQUFPLEVBQU0sRUFBTSxDQUFTLEVBQUUsS0FBSyxFQUFNLElBQUksR0FBRyxHQUFHLEVBQU0sRUFBTSxFQUFNLEVBQUUsRUFBRSxPQUFPLEVBQU0sRUFBRSxHQUFHLEdBQU8sRUFBTSxHQUFHLEdBQUcsRUFBTyxRQUFRLENBQUMsRUFBTSxDQUFDLElBQUksRUFBTyxDQUFDLEVBQUUsRUFBWSxFQUFNLE9BQU8sRUFBRSxFQUFFLEdBQUUsSUFBSSxFQUFLLEdBQUcsR0FBTSxFQUFNLFlBQVksR0FBRyxFQUFFLEdBQUcsR0FBTSxFQUFFLEdBQU0sRUFBRSxRQUFRLEdBQUUsRUFBRSxHQUFFLEdBQU0sRUFBRSxHQUFFLENBQUMsR0FBRyxFQUFNLFdBQVcsRUFBQyxHQUFHLElBQUksRUFBTSxXQUFXLEVBQUUsRUFBTyxLQUFLLEVBQU0sV0FBVyxFQUFDLENBQUMsRUFBRSxRQUFRLEdBQU0sR0FBTSxFQUFFLEdBQU0sRUFBRSxFQUFFLEdBQU0sR0FBYSxDQUFDLElBQUksR0FBSyxFQUFFLFFBQVEsR0FBRSxFQUFFLEdBQUUsSUFBSSxJQUFHLEdBQUcsQ0FBQyxHQUFHLElBQU8sRUFBWSxFQUFNLGVBQWUsRUFBRSxJQUFJLEdBQU0sRUFBYSxFQUFNLFdBQVcsSUFBTyxDQUFDLEVBQUUsR0FBRyxJQUFPLEdBQUcsRUFBTSxlQUFlLEVBQUUsR0FBRyxHQUFNLEdBQU8sV0FBVyxHQUFHLEVBQUMsRUFBRSxFQUFNLFVBQVUsRUFBRSxHQUFHLEdBQU0sR0FBRSxJQUFJLEdBQUUsSUFBRyxFQUFLLEVBQUUsSUFBRyxFQUFLLEdBQUcsR0FBRyxHQUFFLEVBQUssR0FBRyxHQUFNLEdBQUUsTUFBTSxJQUFJLEdBQVcsR0FBRyxHQUFFLEdBQUcsR0FBRSxFQUFNLFdBQVcsRUFBVSxFQUFFLEVBQU0sVUFBVSxFQUFFLElBQUcsR0FBVyxJQUFJLEdBQUksRUFBTyxPQUFPLEVBQUUsR0FBRyxFQUFLLEVBQU0sRUFBRSxHQUFLLEdBQUksSUFBTSxDQUFDLEVBQUUsRUFBTSxFQUFFLEVBQUcsRUFBRSxXQUFXLEdBQUUsRUFBTSxVQUFVLEVBQUUsSUFBRyxFQUFNLEVBQUUsRUFBRyxFQUFFLEdBQUcsR0FBSSxFQUFPLE9BQU8sSUFBSSxFQUFFLEVBQUMsRUFBRSxPQUFPLE9BQU8sY0FBYyxHQUFHLENBQU0sR0FBRyxFQUFPLFFBQVEsQ0FBQyxFQUFNLENBQUMsSUFBSSxFQUFPLENBQUMsRUFBRSxFQUFNLEVBQVcsQ0FBSyxFQUFFLElBQUksRUFBWSxFQUFNLE9BQU8sRUFBRSxJQUFJLEdBQU0sRUFBRSxFQUFLLEdBQUcsUUFBUSxNQUFnQixFQUFNLEdBQUcsR0FBYSxJQUFJLEVBQU8sS0FBSyxFQUFtQixFQUFZLENBQUMsRUFBRSxJQUFJLEdBQVksRUFBTyxPQUFPLEdBQWUsR0FBWSxHQUFHLEdBQVksRUFBTyxLQUFLLEdBQUcsRUFBRSxNQUFNLEdBQWUsRUFBWSxDQUFDLElBQUksR0FBRSxXQUFXLFFBQVEsTUFBZ0IsRUFBTSxHQUFHLElBQWMsR0FBRyxHQUFhLEdBQUUsR0FBRSxHQUFhLElBQUksR0FBc0IsR0FBZSxFQUFFLEdBQUcsR0FBRSxFQUFFLEdBQU8sV0FBVyxJQUFPLEVBQXFCLEVBQUUsRUFBTSxVQUFVLEVBQUUsS0FBUSxHQUFFLEdBQUcsR0FBc0IsRUFBRSxHQUFFLFFBQVEsTUFBZ0IsRUFBTSxDQUFDLEdBQUcsR0FBYSxHQUFHLEVBQUUsR0FBTSxXQUFXLEVBQU0sVUFBVSxFQUFFLEdBQUcsS0FBZSxFQUFFLENBQUMsSUFBSSxHQUFFLEdBQU0sUUFBUSxHQUFFLElBQUksSUFBRyxHQUFHLENBQUMsSUFBSSxHQUFFLElBQUcsRUFBSyxFQUFFLElBQUcsRUFBSyxHQUFHLEdBQUcsR0FBRSxFQUFLLEdBQUcsR0FBRSxHQUFFLE1BQU0sSUFBSSxHQUFRLEdBQUUsR0FBRSxHQUFXLEdBQUcsR0FBRSxFQUFPLEtBQUssRUFBbUIsRUFBYSxHQUFFLEdBQVEsR0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUUsRUFBTSxHQUFRLEVBQVUsRUFBRSxFQUFPLEtBQUssRUFBbUIsRUFBYSxHQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBSyxFQUFNLEdBQU0sR0FBc0IsS0FBaUIsRUFBVyxFQUFFLEdBQU0sRUFBRSxFQUFFLElBQWdCLEVBQUUsR0FBTSxFQUFFLEVBQUUsT0FBTyxFQUFPLEtBQUssRUFBRSxHQUFHLEVBQVUsUUFBUSxDQUFDLEVBQU0sQ0FBQyxPQUFPLEVBQVUsRUFBTSxRQUFRLENBQUMsRUFBTyxDQUFDLE9BQU8sRUFBYyxLQUFLLENBQU0sRUFBRSxFQUFPLEVBQU8sTUFBTSxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsRUFBTyxHQUFHLEVBQVEsUUFBUSxDQUFDLEVBQU0sQ0FBQyxPQUFPLEVBQVUsRUFBTSxRQUFRLENBQUMsRUFBTyxDQUFDLE9BQU8sRUFBYyxLQUFLLENBQU0sRUFBRSxPQUFPLEVBQU8sQ0FBTSxFQUFFLEVBQU8sR0FBRyxFQUFTLENBQUMsUUFBUSxRQUFRLEtBQUssQ0FBQyxPQUFPLEVBQVcsT0FBTyxDQUFVLEVBQUUsU0FBTyxTQUFPLFVBQVEsV0FBUyxFQUFFLEVBQU8sUUFBUSxFQUFTLEVBQU0sR0FBaUIsQ0FBQyxFQUFFLEdBQVMsR0FBaUIsQ0FBQyxRQUFRLElBQUksR0FBZ0IsT0FBTyxDQUFDLEVBQUUsR0FBVyxHQUFpQixHQUFRLEdBQWlCLEVBQUUsQ0FBQyxDQUFDLEVBQU0sR0FBZ0IsR0FBUSxHQUFpQixFQUFFLENBQUMsRUFB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
|