@milkio/redis 1.0.0-alpha.103 → 1.0.0-alpha.104
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/chunk-a0gkrykm.js +8 -0
- package/chunk-sgjns701.js +5 -0
- package/index.js +4 -0
- package/package.json +1 -11
- package/.publish/publish.json +0 -7
- package/README.md +0 -15
- package/bun.lockb +0 -0
- package/index.ts +0 -110
- package/tsconfig.json +0 -21
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import{b as f,c as or}from"./chunk-sgjns701.js";var no=f((to)=>{Object.defineProperty(to,"__esModule",{value:!0});to.transformArguments=to.FIRST_KEY_INDEX=void 0;to.FIRST_KEY_INDEX=1;function Q8(r,t){return["APPEND",r,t]}to.transformArguments=Q8});var oo=f((eo)=>{Object.defineProperty(eo,"__esModule",{value:!0});eo.transformArguments=eo.IS_READ_ONLY=eo.FIRST_KEY_INDEX=void 0;eo.FIRST_KEY_INDEX=1;eo.IS_READ_ONLY=!0;function W8(r,t){let u=["BITCOUNT",r];if(t){if(u.push(t.start.toString(),t.end.toString()),t.mode)u.push(t.mode)}return u}eo.transformArguments=W8});var Eo=f((mo)=>{Object.defineProperty(mo,"__esModule",{value:!0});mo.transformArguments=mo.IS_READ_ONLY=mo.FIRST_KEY_INDEX=void 0;mo.FIRST_KEY_INDEX=1;mo.IS_READ_ONLY=!0;function H8(r,t){let u=["BITFIELD_RO",r];for(let n of t)u.push("GET",n.encoding,n.offset.toString());return u}mo.transformArguments=H8});var _o=f((so)=>{Object.defineProperty(so,"__esModule",{value:!0});so.transformArguments=so.FIRST_KEY_INDEX=void 0;so.FIRST_KEY_INDEX=1;function h8(r,t){let u=["BITFIELD",r];for(let n of t)switch(n.operation){case"GET":u.push("GET",n.encoding,n.offset.toString());break;case"SET":u.push("SET",n.encoding,n.offset.toString(),n.value.toString());break;case"INCRBY":u.push("INCRBY",n.encoding,n.offset.toString(),n.increment.toString());break;case"OVERFLOW":u.push("OVERFLOW",n.behavior);break}return u}so.transformArguments=h8});var m=f((Mo)=>{Object.defineProperty(Mo,"__esModule",{value:!0});Mo.transformRangeReply=Mo.pushSlotRangesArguments=Mo.pushSortArguments=Mo.transformFunctionListItemReply=Mo.RedisFunctionFlags=Mo.transformCommandReply=Mo.CommandCategories=Mo.CommandFlags=Mo.pushOptionalVerdictArgument=Mo.pushVerdictArgument=Mo.pushVerdictNumberArguments=Mo.pushVerdictArguments=Mo.pushEvalArguments=Mo.evalFirstKeyIndex=Mo.transformPXAT=Mo.transformEXAT=Mo.transformGeoMembersWithReply=Mo.GeoReplyWith=Mo.pushGeoRadiusStoreArguments=Mo.pushGeoRadiusArguments=Mo.pushGeoSearchArguments=Mo.pushGeoCountArgument=Mo.transformLMPopArguments=Mo.transformZMPopArguments=Mo.transformSortedSetWithScoresReply=Mo.transformSortedSetMemberReply=Mo.transformSortedSetMemberNullReply=Mo.transformStreamsMessagesReply=Mo.transformStreamMessagesNullReply=Mo.transformStreamMessagesReply=Mo.transformStreamMessageNullReply=Mo.transformStreamMessageReply=Mo.transformTuplesReply=Mo.transformStringNumberInfinityArgument=Mo.transformNumberInfinityArgument=Mo.transformNumberInfinityNullArrayReply=Mo.transformNumberInfinityNullReply=Mo.transformNumberInfinityReply=Mo.pushScanArguments=Mo.transformBooleanArrayReply=Mo.transformBooleanReply=void 0;function Oo(r){return r===1}Mo.transformBooleanReply=Oo;function d8(r){return r.map(Oo)}Mo.transformBooleanArrayReply=d8;function C8(r,t,u){if(r.push(t.toString()),u?.MATCH)r.push("MATCH",u.MATCH);if(u?.COUNT)r.push("COUNT",u.COUNT.toString());return r}Mo.pushScanArguments=C8;function nu(r){switch(r.toString()){case"+inf":return 1/0;case"-inf":return-1/0;default:return Number(r)}}Mo.transformNumberInfinityReply=nu;function Ro(r){if(r===null)return null;return nu(r)}Mo.transformNumberInfinityNullReply=Ro;function G8(r){return r.map(Ro)}Mo.transformNumberInfinityNullArrayReply=G8;function xo(r){switch(r){case 1/0:return"+inf";case-1/0:return"-inf";default:return r.toString()}}Mo.transformNumberInfinityArgument=xo;function k8(r){if(typeof r!=="number")return r;return xo(r)}Mo.transformStringNumberInfinityArgument=k8;function co(r){let t=Object.create(null);for(let u=0;u<r.length;u+=2)t[r[u].toString()]=r[u+1];return t}Mo.transformTuplesReply=co;function Yn([r,t]){return{id:r,message:co(t)}}Mo.transformStreamMessageReply=Yn;function Xo(r){if(r===null)return null;return Yn(r)}Mo.transformStreamMessageNullReply=Xo;function jo(r){return r.map(Yn)}Mo.transformStreamMessagesReply=jo;function i8(r){return r.map(Xo)}Mo.transformStreamMessagesNullReply=i8;function a8(r){if(r===null)return null;return r.map(([t,u])=>({name:t,messages:jo(u)}))}Mo.transformStreamsMessagesReply=a8;function l8(r){if(!r.length)return null;return Ko(r)}Mo.transformSortedSetMemberNullReply=l8;function Ko(r){return{value:r[0],score:nu(r[1])}}Mo.transformSortedSetMemberReply=Ko;function r9(r){let t=[];for(let u=0;u<r.length;u+=2)t.push({value:r[u],score:nu(r[u+1])});return t}Mo.transformSortedSetWithScoresReply=r9;function t9(r,t,u,n){if(eu(r,t),r.push(u),n?.COUNT)r.push("COUNT",n.COUNT.toString());return r}Mo.transformZMPopArguments=t9;function u9(r,t,u,n){if(eu(r,t),r.push(u),n?.COUNT)r.push("COUNT",n.COUNT.toString());return r}Mo.transformLMPopArguments=u9;function gn(r,t){if(typeof t==="number")r.push("COUNT",t.toString());else if(t){if(r.push("COUNT",t.value.toString()),t.ANY)r.push("ANY")}return r}Mo.pushGeoCountArgument=gn;function n9(r,t,u,n,e){if(r.push(t),typeof u==="string")r.push("FROMMEMBER",u);else r.push("FROMLONLAT",u.longitude.toString(),u.latitude.toString());if("radius"in n)r.push("BYRADIUS",n.radius.toString());else r.push("BYBOX",n.width.toString(),n.height.toString());if(r.push(n.unit),e?.SORT)r.push(e.SORT);return gn(r,e?.COUNT),r}Mo.pushGeoSearchArguments=n9;function So(r,t,u,n,e,o){if(r.push(t),typeof u==="string")r.push(u);else r.push(u.longitude.toString(),u.latitude.toString());if(r.push(n.toString(),e),o?.SORT)r.push(o.SORT);return gn(r,o?.COUNT),r}Mo.pushGeoRadiusArguments=So;function e9(r,t,u,n,e,o,A){if(So(r,t,u,n,e,A),A?.STOREDIST)r.push("STOREDIST",o);else r.push("STORE",o);return r}Mo.pushGeoRadiusStoreArguments=e9;var jt;(function(r){r.DISTANCE="WITHDIST",r.HASH="WITHHASH",r.COORDINATES="WITHCOORD"})(jt||(Mo.GeoReplyWith=jt={}));function f9(r,t){let u=new Set(t),n=0,e=u.has(jt.DISTANCE)&&++n,o=u.has(jt.HASH)&&++n,A=u.has(jt.COORDINATES)&&++n;return r.map((s)=>{let I={member:s[0]};if(e)I.distance=s[e];if(o)I.hash=s[o];if(A){let[O,rr]=s[A];I.coordinates={longitude:O,latitude:rr}}return I})}Mo.transformGeoMembersWithReply=f9;function o9(r){return(typeof r==="number"?r:Math.floor(r.getTime()/1000)).toString()}Mo.transformEXAT=o9;function m9(r){return(typeof r==="number"?r:r.getTime()).toString()}Mo.transformPXAT=m9;function A9(r){return r?.keys?.[0]}Mo.evalFirstKeyIndex=A9;function E9(r,t){if(t?.keys)r.push(t.keys.length.toString(),...t.keys);else r.push("0");if(t?.arguments)r.push(...t.arguments);return r}Mo.pushEvalArguments=E9;function s9(r,t){if(Array.isArray(t))r=r.concat(t);else r.push(t);return r}Mo.pushVerdictArguments=s9;function I9(r,t){if(Array.isArray(t))for(let u of t)r.push(u.toString());else r.push(t.toString());return r}Mo.pushVerdictNumberArguments=I9;function eu(r,t){if(Array.isArray(t))r.push(t.length.toString(),...t);else r.push("1",t);return r}Mo.pushVerdictArgument=eu;function _9(r,t,u){if(u===void 0)return r;return r.push(t),eu(r,u)}Mo.pushOptionalVerdictArgument=_9;var No;(function(r){r.WRITE="write",r.READONLY="readonly",r.DENYOOM="denyoom",r.ADMIN="admin",r.PUBSUB="pubsub",r.NOSCRIPT="noscript",r.RANDOM="random",r.SORT_FOR_SCRIPT="sort_for_script",r.LOADING="loading",r.STALE="stale",r.SKIP_MONITOR="skip_monitor",r.ASKING="asking",r.FAST="fast",r.MOVABLEKEYS="movablekeys"})(No||(Mo.CommandFlags=No={}));var Yo;(function(r){r.KEYSPACE="@keyspace",r.READ="@read",r.WRITE="@write",r.SET="@set",r.SORTEDSET="@sortedset",r.LIST="@list",r.HASH="@hash",r.STRING="@string",r.BITMAP="@bitmap",r.HYPERLOGLOG="@hyperloglog",r.GEO="@geo",r.STREAM="@stream",r.PUBSUB="@pubsub",r.ADMIN="@admin",r.FAST="@fast",r.SLOW="@slow",r.BLOCKING="@blocking",r.DANGEROUS="@dangerous",r.CONNECTION="@connection",r.TRANSACTION="@transaction",r.SCRIPTING="@scripting"})(Yo||(Mo.CommandCategories=Yo={}));function N9([r,t,u,n,e,o,A]){return{name:r,arity:t,flags:new Set(u),firstKeyIndex:n,lastKeyIndex:e,step:o,categories:new Set(A)}}Mo.transformCommandReply=N9;var go;(function(r){r.NO_WRITES="no-writes",r.ALLOW_OOM="allow-oom",r.ALLOW_STALE="allow-stale",r.NO_CLUSTER="no-cluster"})(go||(Mo.RedisFunctionFlags=go={}));function Y9(r){return{libraryName:r[1],engine:r[3],functions:r[5].map((t)=>({name:t[1],description:t[3],flags:t[5]}))}}Mo.transformFunctionListItemReply=Y9;function g9(r,t){if(t?.BY)r.push("BY",t.BY);if(t?.LIMIT)r.push("LIMIT",t.LIMIT.offset.toString(),t.LIMIT.count.toString());if(t?.GET)for(let u of typeof t.GET==="string"?[t.GET]:t.GET)r.push("GET",u);if(t?.DIRECTION)r.push(t.DIRECTION);if(t?.ALPHA)r.push("ALPHA");return r}Mo.pushSortArguments=g9;function Do(r,t){r.push(t.start.toString(),t.end.toString())}function D9(r,t){if(Array.isArray(t))for(let u of t)Do(r,u);else Do(r,t);return r}Mo.pushSlotRangesArguments=D9;function O9([r,t]){return{start:r,end:t}}Mo.transformRangeReply=O9});var qo=f((To)=>{Object.defineProperty(To,"__esModule",{value:!0});To.transformArguments=To.FIRST_KEY_INDEX=void 0;var ez=m();To.FIRST_KEY_INDEX=2;function fz(r,t,u){return ez.pushVerdictArguments(["BITOP",r,t],u)}To.transformArguments=fz});var Lo=f((yo)=>{Object.defineProperty(yo,"__esModule",{value:!0});yo.transformArguments=yo.IS_READ_ONLY=yo.FIRST_KEY_INDEX=void 0;yo.FIRST_KEY_INDEX=1;yo.IS_READ_ONLY=!0;function mz(r,t,u,n,e){let o=["BITPOS",r,t.toString()];if(typeof u==="number")o.push(u.toString());if(typeof n==="number")o.push(n.toString());if(e)o.push(e);return o}yo.transformArguments=mz});var $o=f((Fo)=>{Object.defineProperty(Fo,"__esModule",{value:!0});Fo.transformArguments=Fo.FIRST_KEY_INDEX=void 0;Fo.FIRST_KEY_INDEX=1;function sz(r,t,u,n,e){return["BLMOVE",r,t,u,n,e.toString()]}Fo.transformArguments=sz});var Dn=f((zo)=>{Object.defineProperty(zo,"__esModule",{value:!0});zo.transformArguments=zo.FIRST_KEY_INDEX=void 0;var _z=m();zo.FIRST_KEY_INDEX=2;function Nz(r,t,u){return _z.transformLMPopArguments(["LMPOP"],r,t,u)}zo.transformArguments=Nz});var Vo=f((On)=>{Object.defineProperty(On,"__esModule",{value:!0});On.transformReply=On.transformArguments=On.FIRST_KEY_INDEX=void 0;var gz=m();On.FIRST_KEY_INDEX=3;function Dz(r,t,u,n){return gz.transformLMPopArguments(["BLMPOP",r.toString()],t,u,n)}On.transformArguments=Dz;var Oz=Dn();Object.defineProperty(On,"transformReply",{enumerable:!0,get:function(){return Oz.transformReply}})});var Rn=f((Wo)=>{Object.defineProperty(Wo,"__esModule",{value:!0});Wo.transformReply=Wo.transformArguments=Wo.FIRST_KEY_INDEX=void 0;var Xz=m();Wo.FIRST_KEY_INDEX=1;function jz(r,t){let u=Xz.pushVerdictArguments(["BLPOP"],r);return u.push(t.toString()),u}Wo.transformArguments=jz;function Kz(r){if(r===null)return null;return{key:r[0],element:r[1]}}Wo.transformReply=Kz});var Po=f((xn)=>{Object.defineProperty(xn,"__esModule",{value:!0});xn.transformReply=xn.transformArguments=xn.FIRST_KEY_INDEX=void 0;var bz=m();xn.FIRST_KEY_INDEX=1;function Tz(r,t){let u=bz.pushVerdictArguments(["BRPOP"],r);return u.push(t.toString()),u}xn.transformArguments=Tz;var pz=Rn();Object.defineProperty(xn,"transformReply",{enumerable:!0,get:function(){return pz.transformReply}})});var Uo=f((Ho)=>{Object.defineProperty(Ho,"__esModule",{value:!0});Ho.transformArguments=Ho.FIRST_KEY_INDEX=void 0;Ho.FIRST_KEY_INDEX=1;function Lz(r,t,u){return["BRPOPLPUSH",r,t,u.toString()]}Ho.transformArguments=Lz});var cn=f((wo)=>{Object.defineProperty(wo,"__esModule",{value:!0});wo.transformReply=wo.transformArguments=wo.FIRST_KEY_INDEX=void 0;var ho=m();wo.FIRST_KEY_INDEX=2;function Jz(r,t,u){return ho.transformZMPopArguments(["ZMPOP"],r,t,u)}wo.transformArguments=Jz;function $z(r){return r===null?null:{key:r[0],elements:r[1].map(ho.transformSortedSetMemberReply)}}wo.transformReply=$z});var Go=f((Xn)=>{Object.defineProperty(Xn,"__esModule",{value:!0});Xn.transformReply=Xn.transformArguments=Xn.FIRST_KEY_INDEX=void 0;var Vz=m();Xn.FIRST_KEY_INDEX=3;function Wz(r,t,u,n){return Vz.transformZMPopArguments(["BZMPOP",r.toString()],t,u,n)}Xn.transformArguments=Wz;var Zz=cn();Object.defineProperty(Xn,"transformReply",{enumerable:!0,get:function(){return Zz.transformReply}})});var jn=f((io)=>{Object.defineProperty(io,"__esModule",{value:!0});io.transformReply=io.transformArguments=io.FIRST_KEY_INDEX=void 0;var ko=m();io.FIRST_KEY_INDEX=1;function Uz(r,t){let u=ko.pushVerdictArguments(["BZPOPMAX"],r);return u.push(t.toString()),u}io.transformArguments=Uz;function hz(r){if(!r)return null;return{key:r[0],value:r[1],score:ko.transformNumberInfinityReply(r[2])}}io.transformReply=hz});var lo=f((Kn)=>{Object.defineProperty(Kn,"__esModule",{value:!0});Kn.transformReply=Kn.transformArguments=Kn.FIRST_KEY_INDEX=void 0;var Cz=m();Kn.FIRST_KEY_INDEX=1;function Gz(r,t){let u=Cz.pushVerdictArguments(["BZPOPMIN"],r);return u.push(t.toString()),u}Kn.transformArguments=Gz;var kz=jn();Object.defineProperty(Kn,"transformReply",{enumerable:!0,get:function(){return kz.transformReply}})});var rm=f((Sn)=>{Object.defineProperty(Sn,"__esModule",{value:!0});Sn.transformReply=Sn.transformArguments=Sn.FIRST_KEY_INDEX=void 0;Sn.FIRST_KEY_INDEX=1;function rQ(r,t,u){let n=["COPY",r,t];if(u?.destinationDb)n.push("DB",u.destinationDb.toString());if(u?.replace)n.push("REPLACE");return n}Sn.transformArguments=rQ;var tQ=m();Object.defineProperty(Sn,"transformReply",{enumerable:!0,get:function(){return tQ.transformBooleanReply}})});var nm=f((tm)=>{Object.defineProperty(tm,"__esModule",{value:!0});tm.transformArguments=tm.FIRST_KEY_INDEX=void 0;tm.FIRST_KEY_INDEX=1;function fQ(r){return["DECR",r]}tm.transformArguments=fQ});var om=f((em)=>{Object.defineProperty(em,"__esModule",{value:!0});em.transformArguments=em.FIRST_KEY_INDEX=void 0;em.FIRST_KEY_INDEX=1;function mQ(r,t){return["DECRBY",r,t.toString()]}em.transformArguments=mQ});var Em=f((mm)=>{Object.defineProperty(mm,"__esModule",{value:!0});mm.transformArguments=mm.FIRST_KEY_INDEX=void 0;var EQ=m();mm.FIRST_KEY_INDEX=1;function sQ(r){return EQ.pushVerdictArguments(["DEL"],r)}mm.transformArguments=sQ});var _m=f((sm)=>{Object.defineProperty(sm,"__esModule",{value:!0});sm.transformArguments=sm.FIRST_KEY_INDEX=void 0;sm.FIRST_KEY_INDEX=1;function _Q(r){return["DUMP",r]}sm.transformArguments=_Q});var Dm=f((Ym)=>{Object.defineProperty(Ym,"__esModule",{value:!0});Ym.transformArguments=Ym.IS_READ_ONLY=Ym.FIRST_KEY_INDEX=void 0;var Nm=m();Ym.FIRST_KEY_INDEX=Nm.evalFirstKeyIndex;Ym.IS_READ_ONLY=!0;function YQ(r,t){return Nm.pushEvalArguments(["EVAL_RO",r],t)}Ym.transformArguments=YQ});var cm=f((Rm)=>{Object.defineProperty(Rm,"__esModule",{value:!0});Rm.transformArguments=Rm.FIRST_KEY_INDEX=void 0;var Om=m();Rm.FIRST_KEY_INDEX=Om.evalFirstKeyIndex;function OQ(r,t){return Om.pushEvalArguments(["EVAL",r],t)}Rm.transformArguments=OQ});var Sm=f((jm)=>{Object.defineProperty(jm,"__esModule",{value:!0});jm.transformArguments=jm.IS_READ_ONLY=jm.FIRST_KEY_INDEX=void 0;var Xm=m();jm.FIRST_KEY_INDEX=Xm.evalFirstKeyIndex;jm.IS_READ_ONLY=!0;function xQ(r,t){return Xm.pushEvalArguments(["EVALSHA_RO",r],t)}jm.transformArguments=xQ});var pm=f((bm)=>{Object.defineProperty(bm,"__esModule",{value:!0});bm.transformArguments=bm.FIRST_KEY_INDEX=void 0;var Mm=m();bm.FIRST_KEY_INDEX=Mm.evalFirstKeyIndex;function jQ(r,t){return Mm.pushEvalArguments(["EVALSHA",r],t)}bm.transformArguments=jQ});var vm=f((qm)=>{Object.defineProperty(qm,"__esModule",{value:!0});qm.transformArguments=qm.IS_READ_ONLY=qm.FIRST_KEY_INDEX=void 0;var SQ=m();qm.FIRST_KEY_INDEX=1;qm.IS_READ_ONLY=!0;function MQ(r){return SQ.pushVerdictArguments(["EXISTS"],r)}qm.transformArguments=MQ});var Lm=f((Mn)=>{Object.defineProperty(Mn,"__esModule",{value:!0});Mn.transformReply=Mn.transformArguments=Mn.FIRST_KEY_INDEX=void 0;Mn.FIRST_KEY_INDEX=1;function pQ(r,t,u){let n=["EXPIRE",r,t.toString()];if(u)n.push(u);return n}Mn.transformArguments=pQ;var qQ=m();Object.defineProperty(Mn,"transformReply",{enumerable:!0,get:function(){return qQ.transformBooleanReply}})});var Fm=f((bn)=>{Object.defineProperty(bn,"__esModule",{value:!0});bn.transformReply=bn.transformArguments=bn.FIRST_KEY_INDEX=void 0;var FQ=m();bn.FIRST_KEY_INDEX=1;function JQ(r,t,u){let n=["EXPIREAT",r,FQ.transformEXAT(t)];if(u)n.push(u);return n}bn.transformArguments=JQ;var $Q=m();Object.defineProperty(bn,"transformReply",{enumerable:!0,get:function(){return $Q.transformBooleanReply}})});var zm=f((Jm)=>{Object.defineProperty(Jm,"__esModule",{value:!0});Jm.transformArguments=Jm.FIRST_KEY_INDEX=void 0;Jm.FIRST_KEY_INDEX=1;function WQ(r){return["EXPIRETIME",r]}Jm.transformArguments=WQ});var Zm=f((Vm)=>{Object.defineProperty(Vm,"__esModule",{value:!0});Vm.transformArguments=Vm.IS_READ_ONLY=Vm.FIRST_KEY_INDEX=void 0;var Qm=m();Vm.FIRST_KEY_INDEX=Qm.evalFirstKeyIndex;Vm.IS_READ_ONLY=!0;function PQ(r,t){return Qm.pushEvalArguments(["FCALL_RO",r],t)}Vm.transformArguments=PQ});var Um=f((Hm)=>{Object.defineProperty(Hm,"__esModule",{value:!0});Hm.transformArguments=Hm.FIRST_KEY_INDEX=void 0;var Pm=m();Hm.FIRST_KEY_INDEX=Pm.evalFirstKeyIndex;function UQ(r,t){return Pm.pushEvalArguments(["FCALL",r],t)}Hm.transformArguments=UQ});var dm=f((hm)=>{Object.defineProperty(hm,"__esModule",{value:!0});hm.transformArguments=hm.FIRST_KEY_INDEX=void 0;hm.FIRST_KEY_INDEX=1;function wQ(r,t,u){let n=["GEOADD",r];if(u?.NX)n.push("NX");else if(u?.XX)n.push("XX");if(u?.CH)n.push("CH");for(let{longitude:e,latitude:o,member:A}of Array.isArray(t)?t:[t])n.push(e.toString(),o.toString(),A);return n}hm.transformArguments=wQ});var km=f((Cm)=>{Object.defineProperty(Cm,"__esModule",{value:!0});Cm.transformReply=Cm.transformArguments=Cm.IS_READ_ONLY=Cm.FIRST_KEY_INDEX=void 0;Cm.FIRST_KEY_INDEX=1;Cm.IS_READ_ONLY=!0;function CQ(r,t,u,n){let e=["GEODIST",r,t,u];if(n)e.push(n);return e}Cm.transformArguments=CQ;function GQ(r){return r===null?null:Number(r)}Cm.transformReply=GQ});var lm=f((im)=>{Object.defineProperty(im,"__esModule",{value:!0});im.transformArguments=im.IS_READ_ONLY=im.FIRST_KEY_INDEX=void 0;var lQ=m();im.FIRST_KEY_INDEX=1;im.IS_READ_ONLY=!0;function rV(r,t){return lQ.pushVerdictArguments(["GEOHASH",r],t)}im.transformArguments=rV});var uA=f((rA)=>{Object.defineProperty(rA,"__esModule",{value:!0});rA.transformReply=rA.transformArguments=rA.IS_READ_ONLY=rA.FIRST_KEY_INDEX=void 0;var nV=m();rA.FIRST_KEY_INDEX=1;rA.IS_READ_ONLY=!0;function eV(r,t){return nV.pushVerdictArguments(["GEOPOS",r],t)}rA.transformArguments=eV;function fV(r){return r.map((t)=>t===null?null:{longitude:t[0],latitude:t[1]})}rA.transformReply=fV});var fu=f((nA)=>{Object.defineProperty(nA,"__esModule",{value:!0});nA.transformArguments=nA.IS_READ_ONLY=nA.FIRST_KEY_INDEX=void 0;var EV=m();nA.FIRST_KEY_INDEX=1;nA.IS_READ_ONLY=!0;function sV(r,t,u,n,e){return EV.pushGeoRadiusArguments(["GEORADIUS_RO"],r,t,u,n,e)}nA.transformArguments=sV});var oA=f((Kt)=>{Object.defineProperty(Kt,"__esModule",{value:!0});Kt.transformReply=Kt.transformArguments=Kt.IS_READ_ONLY=Kt.FIRST_KEY_INDEX=void 0;var NV=fu(),fA=fu();Object.defineProperty(Kt,"FIRST_KEY_INDEX",{enumerable:!0,get:function(){return fA.FIRST_KEY_INDEX}});Object.defineProperty(Kt,"IS_READ_ONLY",{enumerable:!0,get:function(){return fA.IS_READ_ONLY}});function YV(r,t,u,n,e,o){let A=NV.transformArguments(r,t,u,n,o);return A.push(...e),A.preserve=e,A}Kt.transformArguments=YV;var gV=m();Object.defineProperty(Kt,"transformReply",{enumerable:!0,get:function(){return gV.transformGeoMembersWithReply}})});var St=f((mA)=>{Object.defineProperty(mA,"__esModule",{value:!0});mA.transformArguments=mA.IS_READ_ONLY=mA.FIRST_KEY_INDEX=void 0;var RV=m();mA.FIRST_KEY_INDEX=1;mA.IS_READ_ONLY=!0;function xV(r,t,u,n,e){return RV.pushGeoRadiusArguments(["GEORADIUS"],r,t,u,n,e)}mA.transformArguments=xV});var sA=f((Mt)=>{Object.defineProperty(Mt,"__esModule",{value:!0});Mt.transformReply=Mt.transformArguments=Mt.IS_READ_ONLY=Mt.FIRST_KEY_INDEX=void 0;var jV=St(),EA=St();Object.defineProperty(Mt,"FIRST_KEY_INDEX",{enumerable:!0,get:function(){return EA.FIRST_KEY_INDEX}});Object.defineProperty(Mt,"IS_READ_ONLY",{enumerable:!0,get:function(){return EA.IS_READ_ONLY}});function KV(r,t,u,n,e,o){let A=jV.transformArguments(r,t,u,n,o);return A.push(...e),A.preserve=e,A}Mt.transformArguments=KV;var SV=m();Object.defineProperty(Mt,"transformReply",{enumerable:!0,get:function(){return SV.transformGeoMembersWithReply}})});var ou=f((IA)=>{Object.defineProperty(IA,"__esModule",{value:!0});IA.transformArguments=IA.IS_READ_ONLY=IA.FIRST_KEY_INDEX=void 0;var TV=m();IA.FIRST_KEY_INDEX=1;IA.IS_READ_ONLY=!0;function pV(r,t,u,n,e){return TV.pushGeoRadiusArguments(["GEORADIUSBYMEMBER_RO"],r,t,u,n,e)}IA.transformArguments=pV});var YA=f((bt)=>{Object.defineProperty(bt,"__esModule",{value:!0});bt.transformReply=bt.transformArguments=bt.IS_READ_ONLY=bt.FIRST_KEY_INDEX=void 0;var vV=ou(),NA=ou();Object.defineProperty(bt,"FIRST_KEY_INDEX",{enumerable:!0,get:function(){return NA.FIRST_KEY_INDEX}});Object.defineProperty(bt,"IS_READ_ONLY",{enumerable:!0,get:function(){return NA.IS_READ_ONLY}});function LV(r,t,u,n,e,o){let A=vV.transformArguments(r,t,u,n,o);return A.push(...e),A.preserve=e,A}bt.transformArguments=LV;var FV=m();Object.defineProperty(bt,"transformReply",{enumerable:!0,get:function(){return FV.transformGeoMembersWithReply}})});var Tt=f((gA)=>{Object.defineProperty(gA,"__esModule",{value:!0});gA.transformArguments=gA.IS_READ_ONLY=gA.FIRST_KEY_INDEX=void 0;var zV=m();gA.FIRST_KEY_INDEX=1;gA.IS_READ_ONLY=!0;function QV(r,t,u,n,e){return zV.pushGeoRadiusArguments(["GEORADIUSBYMEMBER"],r,t,u,n,e)}gA.transformArguments=QV});var RA=f((pt)=>{Object.defineProperty(pt,"__esModule",{value:!0});pt.transformReply=pt.transformArguments=pt.IS_READ_ONLY=pt.FIRST_KEY_INDEX=void 0;var ZV=Tt(),OA=Tt();Object.defineProperty(pt,"FIRST_KEY_INDEX",{enumerable:!0,get:function(){return OA.FIRST_KEY_INDEX}});Object.defineProperty(pt,"IS_READ_ONLY",{enumerable:!0,get:function(){return OA.IS_READ_ONLY}});function PV(r,t,u,n,e,o){let A=ZV.transformArguments(r,t,u,n,o);return A.push(...e),A.preserve=e,A}pt.transformArguments=PV;var HV=m();Object.defineProperty(pt,"transformReply",{enumerable:!0,get:function(){return HV.transformGeoMembersWithReply}})});var XA=f((mu)=>{Object.defineProperty(mu,"__esModule",{value:!0});mu.transformArguments=mu.IS_READ_ONLY=mu.FIRST_KEY_INDEX=void 0;var hV=m(),xA=Tt();Object.defineProperty(mu,"FIRST_KEY_INDEX",{enumerable:!0,get:function(){return xA.FIRST_KEY_INDEX}});Object.defineProperty(mu,"IS_READ_ONLY",{enumerable:!0,get:function(){return xA.IS_READ_ONLY}});function wV(r,t,u,n,e,o){return hV.pushGeoRadiusStoreArguments(["GEORADIUSBYMEMBER"],r,t,u,n,e,o)}mu.transformArguments=wV});var SA=f((Au)=>{Object.defineProperty(Au,"__esModule",{value:!0});Au.transformArguments=Au.IS_READ_ONLY=Au.FIRST_KEY_INDEX=void 0;var dV=m(),jA=St();Object.defineProperty(Au,"FIRST_KEY_INDEX",{enumerable:!0,get:function(){return jA.FIRST_KEY_INDEX}});Object.defineProperty(Au,"IS_READ_ONLY",{enumerable:!0,get:function(){return jA.IS_READ_ONLY}});function CV(r,t,u,n,e,o){return dV.pushGeoRadiusStoreArguments(["GEORADIUS"],r,t,u,n,e,o)}Au.transformArguments=CV});var qt=f((MA)=>{Object.defineProperty(MA,"__esModule",{value:!0});MA.transformArguments=MA.IS_READ_ONLY=MA.FIRST_KEY_INDEX=void 0;var GV=m();MA.FIRST_KEY_INDEX=1;MA.IS_READ_ONLY=!0;function kV(r,t,u,n){return GV.pushGeoSearchArguments(["GEOSEARCH"],r,t,u,n)}MA.transformArguments=kV});var pA=f((yt)=>{Object.defineProperty(yt,"__esModule",{value:!0});yt.transformReply=yt.transformArguments=yt.IS_READ_ONLY=yt.FIRST_KEY_INDEX=void 0;var lV=qt(),TA=qt();Object.defineProperty(yt,"FIRST_KEY_INDEX",{enumerable:!0,get:function(){return TA.FIRST_KEY_INDEX}});Object.defineProperty(yt,"IS_READ_ONLY",{enumerable:!0,get:function(){return TA.IS_READ_ONLY}});function rW(r,t,u,n,e){let o=lV.transformArguments(r,t,u,e);return o.push(...n),o.preserve=n,o}yt.transformArguments=rW;var tW=m();Object.defineProperty(yt,"transformReply",{enumerable:!0,get:function(){return tW.transformGeoMembersWithReply}})});var vA=f((Eu)=>{Object.defineProperty(Eu,"__esModule",{value:!0});Eu.transformReply=Eu.transformArguments=Eu.IS_READ_ONLY=Eu.FIRST_KEY_INDEX=void 0;var eW=m(),qA=qt();Object.defineProperty(Eu,"FIRST_KEY_INDEX",{enumerable:!0,get:function(){return qA.FIRST_KEY_INDEX}});Object.defineProperty(Eu,"IS_READ_ONLY",{enumerable:!0,get:function(){return qA.IS_READ_ONLY}});function fW(r,t,u,n,e){let o=eW.pushGeoSearchArguments(["GEOSEARCHSTORE",r],t,u,n,e);if(e?.STOREDIST)o.push("STOREDIST");return o}Eu.transformArguments=fW;function oW(r){if(typeof r!=="number")throw new TypeError("https://github.com/redis/redis/issues/9261");return r}Eu.transformReply=oW});var JA=f((LA)=>{Object.defineProperty(LA,"__esModule",{value:!0});LA.transformArguments=LA.IS_READ_ONLY=LA.FIRST_KEY_INDEX=void 0;LA.FIRST_KEY_INDEX=1;LA.IS_READ_ONLY=!0;function AW(r){return["GET",r]}LA.transformArguments=AW});var QA=f(($A)=>{Object.defineProperty($A,"__esModule",{value:!0});$A.transformArguments=$A.IS_READ_ONLY=$A.FIRST_KEY_INDEX=void 0;$A.FIRST_KEY_INDEX=1;$A.IS_READ_ONLY=!0;function IW(r,t){return["GETBIT",r,t.toString()]}$A.transformArguments=IW});var ZA=f((VA)=>{Object.defineProperty(VA,"__esModule",{value:!0});VA.transformArguments=VA.FIRST_KEY_INDEX=void 0;VA.FIRST_KEY_INDEX=1;function YW(r){return["GETDEL",r]}VA.transformArguments=YW});var UA=f((HA)=>{Object.defineProperty(HA,"__esModule",{value:!0});HA.transformArguments=HA.FIRST_KEY_INDEX=void 0;var PA=m();HA.FIRST_KEY_INDEX=1;function DW(r,t){let u=["GETEX",r];if("EX"in t)u.push("EX",t.EX.toString());else if("PX"in t)u.push("PX",t.PX.toString());else if("EXAT"in t)u.push("EXAT",PA.transformEXAT(t.EXAT));else if("PXAT"in t)u.push("PXAT",PA.transformPXAT(t.PXAT));else u.push("PERSIST");return u}HA.transformArguments=DW});var dA=f((hA)=>{Object.defineProperty(hA,"__esModule",{value:!0});hA.transformArguments=hA.IS_READ_ONLY=hA.FIRST_KEY_INDEX=void 0;hA.FIRST_KEY_INDEX=1;hA.IS_READ_ONLY=!0;function RW(r,t,u){return["GETRANGE",r,t.toString(),u.toString()]}hA.transformArguments=RW});var kA=f((CA)=>{Object.defineProperty(CA,"__esModule",{value:!0});CA.transformArguments=CA.FIRST_KEY_INDEX=void 0;CA.FIRST_KEY_INDEX=1;function XW(r,t){return["GETSET",r,t]}CA.transformArguments=XW});var lA=f((iA)=>{Object.defineProperty(iA,"__esModule",{value:!0});iA.transformArguments=iA.FIRST_KEY_INDEX=void 0;var KW=m();iA.FIRST_KEY_INDEX=1;function SW(r,t){return KW.pushVerdictArguments(["HDEL",r],t)}iA.transformArguments=SW});var rE=f((Tn)=>{Object.defineProperty(Tn,"__esModule",{value:!0});Tn.transformReply=Tn.transformArguments=Tn.FIRST_KEY_INDEX=void 0;Tn.FIRST_KEY_INDEX=1;function bW(r,t){return["HEXISTS",r,t]}Tn.transformArguments=bW;var TW=m();Object.defineProperty(Tn,"transformReply",{enumerable:!0,get:function(){return TW.transformBooleanReply}})});var nE=f((tE)=>{Object.defineProperty(tE,"__esModule",{value:!0});tE.transformArguments=tE.FIRST_KEY_INDEX=tE.HASH_EXPIRATION=void 0;var vW=m();tE.HASH_EXPIRATION={FIELD_NOT_EXISTS:-2,CONDITION_NOT_MET:0,UPDATED:1,DELETED:2};tE.FIRST_KEY_INDEX=1;function LW(r,t,u,n){let e=["HEXPIRE",r,u.toString()];if(n)e.push(n);return e.push("FIELDS"),vW.pushVerdictArgument(e,t)}tE.transformArguments=LW});var mE=f((fE)=>{Object.defineProperty(fE,"__esModule",{value:!0});fE.transformArguments=fE.FIRST_KEY_INDEX=void 0;var eE=m();fE.FIRST_KEY_INDEX=1;function $W(r,t,u,n){let e=["HEXPIREAT",r,eE.transformEXAT(u)];if(n)e.push(n);return e.push("FIELDS"),eE.pushVerdictArgument(e,t)}fE.transformArguments=$W});var sE=f((AE)=>{Object.defineProperty(AE,"__esModule",{value:!0});AE.transformArguments=AE.IS_READ_ONLY=AE.FIRST_KEY_INDEX=AE.HASH_EXPIRATION_TIME=void 0;var QW=m();AE.HASH_EXPIRATION_TIME={FIELD_NOT_EXISTS:-2,NO_EXPIRATION:-1};AE.FIRST_KEY_INDEX=1;AE.IS_READ_ONLY=!0;function VW(r,t){return QW.pushVerdictArgument(["HEXPIRETIME",r,"FIELDS"],t)}AE.transformArguments=VW});var NE=f((IE)=>{Object.defineProperty(IE,"__esModule",{value:!0});IE.transformArguments=IE.IS_READ_ONLY=IE.FIRST_KEY_INDEX=void 0;IE.FIRST_KEY_INDEX=1;IE.IS_READ_ONLY=!0;function HW(r,t){return["HGET",r,t]}IE.transformArguments=HW});var YE=f((pn)=>{Object.defineProperty(pn,"__esModule",{value:!0});pn.transformReply=pn.transformArguments=pn.TRANSFORM_LEGACY_REPLY=pn.IS_READ_ONLY=pn.FIRST_KEY_INDEX=void 0;pn.FIRST_KEY_INDEX=1;pn.IS_READ_ONLY=!0;pn.TRANSFORM_LEGACY_REPLY=!0;function hW(r){return["HGETALL",r]}pn.transformArguments=hW;var wW=m();Object.defineProperty(pn,"transformReply",{enumerable:!0,get:function(){return wW.transformTuplesReply}})});var OE=f((gE)=>{Object.defineProperty(gE,"__esModule",{value:!0});gE.transformArguments=gE.FIRST_KEY_INDEX=void 0;gE.FIRST_KEY_INDEX=1;function aW(r,t,u){return["HINCRBY",r,t,u.toString()]}gE.transformArguments=aW});var cE=f((RE)=>{Object.defineProperty(RE,"__esModule",{value:!0});RE.transformArguments=RE.FIRST_KEY_INDEX=void 0;RE.FIRST_KEY_INDEX=1;function rZ(r,t,u){return["HINCRBYFLOAT",r,t,u.toString()]}RE.transformArguments=rZ});var KE=f((XE)=>{Object.defineProperty(XE,"__esModule",{value:!0});XE.transformArguments=XE.FIRST_KEY_INDEX=void 0;XE.FIRST_KEY_INDEX=1;function uZ(r){return["HKEYS",r]}XE.transformArguments=uZ});var bE=f((SE)=>{Object.defineProperty(SE,"__esModule",{value:!0});SE.transformArguments=SE.FIRST_KEY_INDEX=void 0;SE.FIRST_KEY_INDEX=1;function eZ(r){return["HLEN",r]}SE.transformArguments=eZ});var qE=f((TE)=>{Object.defineProperty(TE,"__esModule",{value:!0});TE.transformArguments=TE.IS_READ_ONLY=TE.FIRST_KEY_INDEX=void 0;var oZ=m();TE.FIRST_KEY_INDEX=1;TE.IS_READ_ONLY=!0;function mZ(r,t){return oZ.pushVerdictArguments(["HMGET",r],t)}TE.transformArguments=mZ});var LE=f((yE)=>{Object.defineProperty(yE,"__esModule",{value:!0});yE.transformArguments=yE.FIRST_KEY_INDEX=void 0;var sZ=m();yE.FIRST_KEY_INDEX=1;function IZ(r,t){return sZ.pushVerdictArgument(["HPERSIST",r,"FIELDS"],t)}yE.transformArguments=IZ});var $E=f((FE)=>{Object.defineProperty(FE,"__esModule",{value:!0});FE.transformArguments=FE.FIRST_KEY_INDEX=void 0;var NZ=m();FE.FIRST_KEY_INDEX=1;function YZ(r,t,u,n){let e=["HPEXPIRE",r,u.toString()];if(n)e.push(n);return e.push("FIELDS"),NZ.pushVerdictArgument(e,t)}FE.transformArguments=YZ});var WE=f((QE)=>{Object.defineProperty(QE,"__esModule",{value:!0});QE.transformArguments=QE.IS_READ_ONLY=QE.FIRST_KEY_INDEX=void 0;var zE=m();QE.FIRST_KEY_INDEX=1;QE.IS_READ_ONLY=!0;function DZ(r,t,u,n){let e=["HPEXPIREAT",r,zE.transformPXAT(u)];if(n)e.push(n);return e.push("FIELDS"),zE.pushVerdictArgument(e,t)}QE.transformArguments=DZ});var HE=f((ZE)=>{Object.defineProperty(ZE,"__esModule",{value:!0});ZE.transformArguments=ZE.IS_READ_ONLY=ZE.FIRST_KEY_INDEX=void 0;var xZ=m();ZE.FIRST_KEY_INDEX=1;ZE.IS_READ_ONLY=!0;function cZ(r,t){return xZ.pushVerdictArgument(["HPEXPIRETIME",r,"FIELDS"],t)}ZE.transformArguments=cZ});var hE=f((BE)=>{Object.defineProperty(BE,"__esModule",{value:!0});BE.transformArguments=BE.IS_READ_ONLY=BE.FIRST_KEY_INDEX=void 0;var KZ=m();BE.FIRST_KEY_INDEX=1;BE.IS_READ_ONLY=!0;function SZ(r,t){return KZ.pushVerdictArgument(["HPTTL",r,"FIELDS"],t)}BE.transformArguments=SZ});var su=f((wE)=>{Object.defineProperty(wE,"__esModule",{value:!0});wE.transformArguments=wE.IS_READ_ONLY=wE.FIRST_KEY_INDEX=void 0;wE.FIRST_KEY_INDEX=1;wE.IS_READ_ONLY=!0;function TZ(r){return["HRANDFIELD",r]}wE.transformArguments=TZ});var _u=f((Iu)=>{Object.defineProperty(Iu,"__esModule",{value:!0});Iu.transformArguments=Iu.IS_READ_ONLY=Iu.FIRST_KEY_INDEX=void 0;var yZ=su(),CE=su();Object.defineProperty(Iu,"FIRST_KEY_INDEX",{enumerable:!0,get:function(){return CE.FIRST_KEY_INDEX}});Object.defineProperty(Iu,"IS_READ_ONLY",{enumerable:!0,get:function(){return CE.IS_READ_ONLY}});function vZ(r,t){return[...yZ.transformArguments(r),t.toString()]}Iu.transformArguments=vZ});var iE=f((vt)=>{Object.defineProperty(vt,"__esModule",{value:!0});vt.transformReply=vt.transformArguments=vt.IS_READ_ONLY=vt.FIRST_KEY_INDEX=void 0;var LZ=_u(),kE=_u();Object.defineProperty(vt,"FIRST_KEY_INDEX",{enumerable:!0,get:function(){return kE.FIRST_KEY_INDEX}});Object.defineProperty(vt,"IS_READ_ONLY",{enumerable:!0,get:function(){return kE.IS_READ_ONLY}});function FZ(r,t){return[...LZ.transformArguments(r,t),"WITHVALUES"]}vt.transformArguments=FZ;var JZ=m();Object.defineProperty(vt,"transformReply",{enumerable:!0,get:function(){return JZ.transformTuplesReply}})});var Nu=f((aE)=>{Object.defineProperty(aE,"__esModule",{value:!0});aE.transformReply=aE.transformArguments=aE.IS_READ_ONLY=aE.FIRST_KEY_INDEX=void 0;var QZ=m();aE.FIRST_KEY_INDEX=1;aE.IS_READ_ONLY=!0;function VZ(r,t,u){return QZ.pushScanArguments(["HSCAN",r],t,u)}aE.transformArguments=VZ;function WZ([r,t]){let u=[];for(let n=0;n<t.length;n+=2)u.push({field:t[n],value:t[n+1]});return{cursor:Number(r),tuples:u}}aE.transformReply=WZ});var us=f((Yu)=>{Object.defineProperty(Yu,"__esModule",{value:!0});Yu.transformReply=Yu.transformArguments=Yu.IS_READ_ONLY=Yu.FIRST_KEY_INDEX=void 0;var BZ=Nu(),rs=Nu();Object.defineProperty(Yu,"FIRST_KEY_INDEX",{enumerable:!0,get:function(){return rs.FIRST_KEY_INDEX}});Object.defineProperty(Yu,"IS_READ_ONLY",{enumerable:!0,get:function(){return rs.IS_READ_ONLY}});function UZ(r,t,u){let n=BZ.transformArguments(r,t,u);return n.push("NOVALUES"),n}Yu.transformArguments=UZ;function hZ([r,t]){return{cursor:Number(r),keys:t}}Yu.transformReply=hZ});var os=f((es)=>{Object.defineProperty(es,"__esModule",{value:!0});es.transformArguments=es.FIRST_KEY_INDEX=void 0;es.FIRST_KEY_INDEX=1;function dZ(...[r,t,u]){let n=["HSET",r];if(typeof t==="string"||typeof t==="number"||Buffer.isBuffer(t))n.push(zr(t),zr(u));else if(t instanceof Map)CZ(n,t);else if(Array.isArray(t))ns(n,t);else GZ(n,t);return n}es.transformArguments=dZ;function CZ(r,t){for(let[u,n]of t.entries())r.push(zr(u),zr(n))}function ns(r,t){for(let u of t){if(Array.isArray(u)){ns(r,u);continue}r.push(zr(u))}}function GZ(r,t){for(let u of Object.keys(t))r.push(zr(u),zr(t[u]))}function zr(r){return typeof r==="number"?r.toString():r}});var ms=f((qn)=>{Object.defineProperty(qn,"__esModule",{value:!0});qn.transformReply=qn.transformArguments=qn.FIRST_KEY_INDEX=void 0;qn.FIRST_KEY_INDEX=1;function iZ(r,t,u){return["HSETNX",r,t,u]}qn.transformArguments=iZ;var aZ=m();Object.defineProperty(qn,"transformReply",{enumerable:!0,get:function(){return aZ.transformBooleanReply}})});var ss=f((As)=>{Object.defineProperty(As,"__esModule",{value:!0});As.transformArguments=As.FIRST_KEY_INDEX=void 0;As.FIRST_KEY_INDEX=1;function uP(r,t){return["HSTRLEN",r,t]}As.transformArguments=uP});var Ns=f((Is)=>{Object.defineProperty(Is,"__esModule",{value:!0});Is.transformArguments=Is.IS_READ_ONLY=Is.FIRST_KEY_INDEX=void 0;var eP=m();Is.FIRST_KEY_INDEX=1;Is.IS_READ_ONLY=!0;function fP(r,t){return eP.pushVerdictArgument(["HTTL",r,"FIELDS"],t)}Is.transformArguments=fP});var Ds=f((Ys)=>{Object.defineProperty(Ys,"__esModule",{value:!0});Ys.transformArguments=Ys.FIRST_KEY_INDEX=void 0;Ys.FIRST_KEY_INDEX=1;function AP(r){return["HVALS",r]}Ys.transformArguments=AP});var xs=f((Os)=>{Object.defineProperty(Os,"__esModule",{value:!0});Os.transformArguments=Os.FIRST_KEY_INDEX=void 0;Os.FIRST_KEY_INDEX=1;function sP(r){return["INCR",r]}Os.transformArguments=sP});var js=f((cs)=>{Object.defineProperty(cs,"__esModule",{value:!0});cs.transformArguments=cs.FIRST_KEY_INDEX=void 0;cs.FIRST_KEY_INDEX=1;function _P(r,t){return["INCRBY",r,t.toString()]}cs.transformArguments=_P});var Ms=f((Ks)=>{Object.defineProperty(Ks,"__esModule",{value:!0});Ks.transformArguments=Ks.FIRST_KEY_INDEX=void 0;Ks.FIRST_KEY_INDEX=1;function YP(r,t){return["INCRBYFLOAT",r,t.toString()]}Ks.transformArguments=YP});var Kr=f((bs)=>{Object.defineProperty(bs,"__esModule",{value:!0});bs.transformArguments=bs.IS_READ_ONLY=bs.FIRST_KEY_INDEX=void 0;bs.FIRST_KEY_INDEX=1;bs.IS_READ_ONLY=!0;function DP(r,t){return["LCS",r,t]}bs.transformArguments=DP});var vs=f((gu)=>{Object.defineProperty(gu,"__esModule",{value:!0});gu.transformReply=gu.transformArguments=gu.IS_READ_ONLY=gu.FIRST_KEY_INDEX=void 0;var ps=m(),xP=Kr(),qs=Kr();Object.defineProperty(gu,"FIRST_KEY_INDEX",{enumerable:!0,get:function(){return qs.FIRST_KEY_INDEX}});Object.defineProperty(gu,"IS_READ_ONLY",{enumerable:!0,get:function(){return qs.IS_READ_ONLY}});function cP(r,t){let u=xP.transformArguments(r,t);return u.push("IDX","WITHMATCHLEN"),u}gu.transformArguments=cP;function XP(r){return{matches:r[1].map(([t,u,n])=>({key1:ps.transformRangeReply(t),key2:ps.transformRangeReply(u),length:n})),length:r[3]}}gu.transformReply=XP});var $s=f((Du)=>{Object.defineProperty(Du,"__esModule",{value:!0});Du.transformReply=Du.transformArguments=Du.IS_READ_ONLY=Du.FIRST_KEY_INDEX=void 0;var Ls=m(),KP=Kr(),Fs=Kr();Object.defineProperty(Du,"FIRST_KEY_INDEX",{enumerable:!0,get:function(){return Fs.FIRST_KEY_INDEX}});Object.defineProperty(Du,"IS_READ_ONLY",{enumerable:!0,get:function(){return Fs.IS_READ_ONLY}});function SP(r,t){let u=KP.transformArguments(r,t);return u.push("IDX"),u}Du.transformArguments=SP;function MP(r){return{matches:r[1].map(([t,u])=>({key1:Ls.transformRangeReply(t),key2:Ls.transformRangeReply(u)})),length:r[3]}}Du.transformReply=MP});var Vs=f((Ou)=>{Object.defineProperty(Ou,"__esModule",{value:!0});Ou.transformArguments=Ou.IS_READ_ONLY=Ou.FIRST_KEY_INDEX=void 0;var TP=Kr(),zs=Kr();Object.defineProperty(Ou,"FIRST_KEY_INDEX",{enumerable:!0,get:function(){return zs.FIRST_KEY_INDEX}});Object.defineProperty(Ou,"IS_READ_ONLY",{enumerable:!0,get:function(){return zs.IS_READ_ONLY}});function pP(r,t){let u=TP.transformArguments(r,t);return u.push("LEN"),u}Ou.transformArguments=pP});var Ps=f((Ws)=>{Object.defineProperty(Ws,"__esModule",{value:!0});Ws.transformArguments=Ws.IS_READ_ONLY=Ws.FIRST_KEY_INDEX=void 0;Ws.FIRST_KEY_INDEX=1;Ws.IS_READ_ONLY=!0;function qP(r,t){return["LINDEX",r,t.toString()]}Ws.transformArguments=qP});var Us=f((Hs)=>{Object.defineProperty(Hs,"__esModule",{value:!0});Hs.transformArguments=Hs.FIRST_KEY_INDEX=void 0;Hs.FIRST_KEY_INDEX=1;function LP(r,t,u,n){return["LINSERT",r,t,u,n]}Hs.transformArguments=LP});var ds=f((hs)=>{Object.defineProperty(hs,"__esModule",{value:!0});hs.transformArguments=hs.IS_READ_ONLY=hs.FIRST_KEY_INDEX=void 0;hs.FIRST_KEY_INDEX=1;hs.IS_READ_ONLY=!0;function JP(r){return["LLEN",r]}hs.transformArguments=JP});var ks=f((Cs)=>{Object.defineProperty(Cs,"__esModule",{value:!0});Cs.transformArguments=Cs.FIRST_KEY_INDEX=void 0;Cs.FIRST_KEY_INDEX=1;function QP(r,t,u,n){return["LMOVE",r,t,u,n]}Cs.transformArguments=QP});var ls=f((is)=>{Object.defineProperty(is,"__esModule",{value:!0});is.transformArguments=is.FIRST_KEY_INDEX=void 0;is.FIRST_KEY_INDEX=1;function WP(r,t){return["LPOP",r,t.toString()]}is.transformArguments=WP});var uI=f((rI)=>{Object.defineProperty(rI,"__esModule",{value:!0});rI.transformArguments=rI.FIRST_KEY_INDEX=void 0;rI.FIRST_KEY_INDEX=1;function PP(r){return["LPOP",r]}rI.transformArguments=PP});var yn=f((nI)=>{Object.defineProperty(nI,"__esModule",{value:!0});nI.transformArguments=nI.IS_READ_ONLY=nI.FIRST_KEY_INDEX=void 0;nI.FIRST_KEY_INDEX=1;nI.IS_READ_ONLY=!0;function BP(r,t,u){let n=["LPOS",r,t];if(typeof u?.RANK==="number")n.push("RANK",u.RANK.toString());if(typeof u?.MAXLEN==="number")n.push("MAXLEN",u.MAXLEN.toString());return n}nI.transformArguments=BP});var mI=f((Ru)=>{Object.defineProperty(Ru,"__esModule",{value:!0});Ru.transformArguments=Ru.IS_READ_ONLY=Ru.FIRST_KEY_INDEX=void 0;var fI=yn();Object.defineProperty(Ru,"FIRST_KEY_INDEX",{enumerable:!0,get:function(){return fI.FIRST_KEY_INDEX}});Object.defineProperty(Ru,"IS_READ_ONLY",{enumerable:!0,get:function(){return fI.IS_READ_ONLY}});function wP(r,t,u,n){let e=["LPOS",r,t];if(typeof n?.RANK==="number")e.push("RANK",n.RANK.toString());if(e.push("COUNT",u.toString()),typeof n?.MAXLEN==="number")e.push("MAXLEN",n.MAXLEN.toString());return e}Ru.transformArguments=wP});var sI=f((AI)=>{Object.defineProperty(AI,"__esModule",{value:!0});AI.transformArguments=AI.FIRST_KEY_INDEX=void 0;var dP=m();AI.FIRST_KEY_INDEX=1;function CP(r,t){return dP.pushVerdictArguments(["LPUSH",r],t)}AI.transformArguments=CP});var NI=f((II)=>{Object.defineProperty(II,"__esModule",{value:!0});II.transformArguments=II.FIRST_KEY_INDEX=void 0;var kP=m();II.FIRST_KEY_INDEX=1;function iP(r,t){return kP.pushVerdictArguments(["LPUSHX",r],t)}II.transformArguments=iP});var DI=f((YI)=>{Object.defineProperty(YI,"__esModule",{value:!0});YI.transformArguments=YI.IS_READ_ONLY=YI.FIRST_KEY_INDEX=void 0;YI.FIRST_KEY_INDEX=1;YI.IS_READ_ONLY=!0;function lP(r,t,u){return["LRANGE",r,t.toString(),u.toString()]}YI.transformArguments=lP});var xI=f((OI)=>{Object.defineProperty(OI,"__esModule",{value:!0});OI.transformArguments=OI.FIRST_KEY_INDEX=void 0;OI.FIRST_KEY_INDEX=1;function uH(r,t,u){return["LREM",r,t.toString(),u]}OI.transformArguments=uH});var jI=f((cI)=>{Object.defineProperty(cI,"__esModule",{value:!0});cI.transformArguments=cI.FIRST_KEY_INDEX=void 0;cI.FIRST_KEY_INDEX=1;function eH(r,t,u){return["LSET",r,t.toString(),u]}cI.transformArguments=eH});var MI=f((KI)=>{Object.defineProperty(KI,"__esModule",{value:!0});KI.transformArguments=KI.FIRST_KEY_INDEX=void 0;KI.FIRST_KEY_INDEX=1;function oH(r,t,u){return["LTRIM",r,t.toString(),u.toString()]}KI.transformArguments=oH});var pI=f((bI)=>{Object.defineProperty(bI,"__esModule",{value:!0});bI.transformArguments=bI.IS_READ_ONLY=bI.FIRST_KEY_INDEX=void 0;bI.FIRST_KEY_INDEX=1;bI.IS_READ_ONLY=!0;function AH(r){return["MGET",...r]}bI.transformArguments=AH});var vI=f((qI)=>{Object.defineProperty(qI,"__esModule",{value:!0});qI.transformArguments=void 0;function IH(r,t,u,n,e,o){let A=["MIGRATE",r,t.toString()],s=Array.isArray(u);if(s)A.push("");else A.push(u);if(A.push(n.toString(),e.toString()),o?.COPY)A.push("COPY");if(o?.REPLACE)A.push("REPLACE");if(o?.AUTH)if(o.AUTH.username)A.push("AUTH2",o.AUTH.username,o.AUTH.password);else A.push("AUTH",o.AUTH.password);if(s)A.push("KEYS",...u);return A}qI.transformArguments=IH});var JI=f((LI)=>{Object.defineProperty(LI,"__esModule",{value:!0});LI.transformArguments=LI.FIRST_KEY_INDEX=void 0;LI.FIRST_KEY_INDEX=1;function _H(r){let t=["MSET"];if(Array.isArray(r))t.push(...r.flat());else for(let u of Object.keys(r))t.push(u,r[u]);return t}LI.transformArguments=_H});var $I=f((vn)=>{Object.defineProperty(vn,"__esModule",{value:!0});vn.transformReply=vn.transformArguments=vn.FIRST_KEY_INDEX=void 0;vn.FIRST_KEY_INDEX=1;function YH(r){let t=["MSETNX"];if(Array.isArray(r))t.push(...r.flat());else for(let u of Object.keys(r))t.push(u,r[u]);return t}vn.transformArguments=YH;var gH=m();Object.defineProperty(vn,"transformReply",{enumerable:!0,get:function(){return gH.transformBooleanReply}})});var VI=f((zI)=>{Object.defineProperty(zI,"__esModule",{value:!0});zI.transformArguments=zI.IS_READ_ONLY=zI.FIRST_KEY_INDEX=void 0;zI.FIRST_KEY_INDEX=2;zI.IS_READ_ONLY=!0;function xH(r){return["OBJECT","ENCODING",r]}zI.transformArguments=xH});var PI=f((WI)=>{Object.defineProperty(WI,"__esModule",{value:!0});WI.transformArguments=WI.IS_READ_ONLY=WI.FIRST_KEY_INDEX=void 0;WI.FIRST_KEY_INDEX=2;WI.IS_READ_ONLY=!0;function jH(r){return["OBJECT","FREQ",r]}WI.transformArguments=jH});var UI=f((HI)=>{Object.defineProperty(HI,"__esModule",{value:!0});HI.transformArguments=HI.IS_READ_ONLY=HI.FIRST_KEY_INDEX=void 0;HI.FIRST_KEY_INDEX=2;HI.IS_READ_ONLY=!0;function MH(r){return["OBJECT","IDLETIME",r]}HI.transformArguments=MH});var dI=f((hI)=>{Object.defineProperty(hI,"__esModule",{value:!0});hI.transformArguments=hI.IS_READ_ONLY=hI.FIRST_KEY_INDEX=void 0;hI.FIRST_KEY_INDEX=2;hI.IS_READ_ONLY=!0;function pH(r){return["OBJECT","REFCOUNT",r]}hI.transformArguments=pH});var CI=f((Ln)=>{Object.defineProperty(Ln,"__esModule",{value:!0});Ln.transformReply=Ln.transformArguments=Ln.FIRST_KEY_INDEX=void 0;Ln.FIRST_KEY_INDEX=1;function vH(r){return["PERSIST",r]}Ln.transformArguments=vH;var LH=m();Object.defineProperty(Ln,"transformReply",{enumerable:!0,get:function(){return LH.transformBooleanReply}})});var GI=f((Fn)=>{Object.defineProperty(Fn,"__esModule",{value:!0});Fn.transformReply=Fn.transformArguments=Fn.FIRST_KEY_INDEX=void 0;Fn.FIRST_KEY_INDEX=1;function zH(r,t,u){let n=["PEXPIRE",r,t.toString()];if(u)n.push(u);return n}Fn.transformArguments=zH;var QH=m();Object.defineProperty(Fn,"transformReply",{enumerable:!0,get:function(){return QH.transformBooleanReply}})});var kI=f((Jn)=>{Object.defineProperty(Jn,"__esModule",{value:!0});Jn.transformReply=Jn.transformArguments=Jn.FIRST_KEY_INDEX=void 0;var PH=m();Jn.FIRST_KEY_INDEX=1;function HH(r,t,u){let n=["PEXPIREAT",r,PH.transformPXAT(t)];if(u)n.push(u);return n}Jn.transformArguments=HH;var BH=m();Object.defineProperty(Jn,"transformReply",{enumerable:!0,get:function(){return BH.transformBooleanReply}})});var lI=f((iI)=>{Object.defineProperty(iI,"__esModule",{value:!0});iI.transformArguments=iI.FIRST_KEY_INDEX=void 0;iI.FIRST_KEY_INDEX=1;function dH(r){return["PEXPIRETIME",r]}iI.transformArguments=dH});var r_=f(($n)=>{Object.defineProperty($n,"__esModule",{value:!0});$n.transformReply=$n.transformArguments=$n.FIRST_KEY_INDEX=void 0;var GH=m();$n.FIRST_KEY_INDEX=1;function kH(r,t){return GH.pushVerdictArguments(["PFADD",r],t)}$n.transformArguments=kH;var iH=m();Object.defineProperty($n,"transformReply",{enumerable:!0,get:function(){return iH.transformBooleanReply}})});var n_=f((t_)=>{Object.defineProperty(t_,"__esModule",{value:!0});t_.transformArguments=t_.FIRST_KEY_INDEX=void 0;var tB=m();t_.FIRST_KEY_INDEX=1;function uB(r){return tB.pushVerdictArguments(["PFCOUNT"],r)}t_.transformArguments=uB});var o_=f((e_)=>{Object.defineProperty(e_,"__esModule",{value:!0});e_.transformArguments=e_.FIRST_KEY_INDEX=void 0;var eB=m();e_.FIRST_KEY_INDEX=1;function fB(r,t){return eB.pushVerdictArguments(["PFMERGE",r],t)}e_.transformArguments=fB});var E_=f((m_)=>{Object.defineProperty(m_,"__esModule",{value:!0});m_.transformArguments=m_.FIRST_KEY_INDEX=void 0;m_.FIRST_KEY_INDEX=1;function mB(r,t,u){return["PSETEX",r,t.toString(),u]}m_.transformArguments=mB});var __=f((s_)=>{Object.defineProperty(s_,"__esModule",{value:!0});s_.transformArguments=s_.IS_READ_ONLY=s_.FIRST_KEY_INDEX=void 0;s_.FIRST_KEY_INDEX=1;s_.IS_READ_ONLY=!0;function EB(r){return["PTTL",r]}s_.transformArguments=EB});var g_=f((N_)=>{Object.defineProperty(N_,"__esModule",{value:!0});N_.transformArguments=N_.IS_READ_ONLY=void 0;N_.IS_READ_ONLY=!0;function _B(r,t){return["PUBLISH",r,t]}N_.transformArguments=_B});var R_=f((D_)=>{Object.defineProperty(D_,"__esModule",{value:!0});D_.transformArguments=D_.FIRST_KEY_INDEX=void 0;D_.FIRST_KEY_INDEX=1;function YB(r,t){return["RENAME",r,t]}D_.transformArguments=YB});var x_=f((zn)=>{Object.defineProperty(zn,"__esModule",{value:!0});zn.transformReply=zn.transformArguments=zn.FIRST_KEY_INDEX=void 0;zn.FIRST_KEY_INDEX=1;function DB(r,t){return["RENAMENX",r,t]}zn.transformArguments=DB;var OB=m();Object.defineProperty(zn,"transformReply",{enumerable:!0,get:function(){return OB.transformBooleanReply}})});var j_=f((c_)=>{Object.defineProperty(c_,"__esModule",{value:!0});c_.transformArguments=c_.FIRST_KEY_INDEX=void 0;c_.FIRST_KEY_INDEX=1;function XB(r,t,u,n){let e=["RESTORE",r,t.toString(),u];if(n?.REPLACE)e.push("REPLACE");if(n?.ABSTTL)e.push("ABSTTL");if(n?.IDLETIME)e.push("IDLETIME",n.IDLETIME.toString());if(n?.FREQ)e.push("FREQ",n.FREQ.toString());return e}c_.transformArguments=XB});var M_=f((K_)=>{Object.defineProperty(K_,"__esModule",{value:!0});K_.transformArguments=K_.FIRST_KEY_INDEX=void 0;K_.FIRST_KEY_INDEX=1;function KB(r,t){return["RPOP",r,t.toString()]}K_.transformArguments=KB});var p_=f((b_)=>{Object.defineProperty(b_,"__esModule",{value:!0});b_.transformArguments=b_.FIRST_KEY_INDEX=void 0;b_.FIRST_KEY_INDEX=1;function MB(r){return["RPOP",r]}b_.transformArguments=MB});var v_=f((q_)=>{Object.defineProperty(q_,"__esModule",{value:!0});q_.transformArguments=q_.FIRST_KEY_INDEX=void 0;q_.FIRST_KEY_INDEX=1;function TB(r,t){return["RPOPLPUSH",r,t]}q_.transformArguments=TB});var J_=f((L_)=>{Object.defineProperty(L_,"__esModule",{value:!0});L_.transformArguments=L_.FIRST_KEY_INDEX=void 0;var qB=m();L_.FIRST_KEY_INDEX=1;function yB(r,t){return qB.pushVerdictArguments(["RPUSH",r],t)}L_.transformArguments=yB});var Q_=f(($_)=>{Object.defineProperty($_,"__esModule",{value:!0});$_.transformArguments=$_.FIRST_KEY_INDEX=void 0;var LB=m();$_.FIRST_KEY_INDEX=1;function FB(r,t){return LB.pushVerdictArguments(["RPUSHX",r],t)}$_.transformArguments=FB});var Z_=f((V_)=>{Object.defineProperty(V_,"__esModule",{value:!0});V_.transformArguments=V_.FIRST_KEY_INDEX=void 0;var $B=m();V_.FIRST_KEY_INDEX=1;function zB(r,t){return $B.pushVerdictArguments(["SADD",r],t)}V_.transformArguments=zB});var B_=f((P_)=>{Object.defineProperty(P_,"__esModule",{value:!0});P_.transformArguments=P_.FIRST_KEY_INDEX=void 0;P_.FIRST_KEY_INDEX=1;function VB(r){return["SCARD",r]}P_.transformArguments=VB});var w_=f((U_)=>{Object.defineProperty(U_,"__esModule",{value:!0});U_.transformArguments=U_.IS_READ_ONLY=U_.FIRST_KEY_INDEX=void 0;var ZB=m();U_.FIRST_KEY_INDEX=1;U_.IS_READ_ONLY=!0;function PB(r){return ZB.pushVerdictArguments(["SDIFF"],r)}U_.transformArguments=PB});var G_=f((d_)=>{Object.defineProperty(d_,"__esModule",{value:!0});d_.transformArguments=d_.FIRST_KEY_INDEX=void 0;var UB=m();d_.FIRST_KEY_INDEX=1;function hB(r,t){return UB.pushVerdictArguments(["SDIFFSTORE",r],t)}d_.transformArguments=hB});var a_=f((k_)=>{Object.defineProperty(k_,"__esModule",{value:!0});k_.transformArguments=k_.FIRST_KEY_INDEX=void 0;k_.FIRST_KEY_INDEX=1;function dB(r,t,u){let n=["SET",r,typeof t==="number"?t.toString():t];if(u?.EX!==void 0)n.push("EX",u.EX.toString());else if(u?.PX!==void 0)n.push("PX",u.PX.toString());else if(u?.EXAT!==void 0)n.push("EXAT",u.EXAT.toString());else if(u?.PXAT!==void 0)n.push("PXAT",u.PXAT.toString());else if(u?.KEEPTTL)n.push("KEEPTTL");if(u?.NX)n.push("NX");else if(u?.XX)n.push("XX");if(u?.GET)n.push("GET");return n}k_.transformArguments=dB});var tN=f((l_)=>{Object.defineProperty(l_,"__esModule",{value:!0});l_.transformArguments=l_.FIRST_KEY_INDEX=void 0;l_.FIRST_KEY_INDEX=1;function GB(r,t,u){return["SETBIT",r,t.toString(),u.toString()]}l_.transformArguments=GB});var eN=f((uN)=>{Object.defineProperty(uN,"__esModule",{value:!0});uN.transformArguments=uN.FIRST_KEY_INDEX=void 0;uN.FIRST_KEY_INDEX=1;function iB(r,t,u){return["SETEX",r,t.toString(),u]}uN.transformArguments=iB});var fN=f((Qn)=>{Object.defineProperty(Qn,"__esModule",{value:!0});Qn.transformReply=Qn.transformArguments=Qn.FIRST_KEY_INDEX=void 0;Qn.FIRST_KEY_INDEX=1;function lB(r,t){return["SETNX",r,t]}Qn.transformArguments=lB;var rU=m();Object.defineProperty(Qn,"transformReply",{enumerable:!0,get:function(){return rU.transformBooleanReply}})});var AN=f((oN)=>{Object.defineProperty(oN,"__esModule",{value:!0});oN.transformArguments=oN.FIRST_KEY_INDEX=void 0;oN.FIRST_KEY_INDEX=1;function eU(r,t,u){return["SETRANGE",r,t.toString(),u]}oN.transformArguments=eU});var IN=f((EN)=>{Object.defineProperty(EN,"__esModule",{value:!0});EN.transformArguments=EN.IS_READ_ONLY=EN.FIRST_KEY_INDEX=void 0;var oU=m();EN.FIRST_KEY_INDEX=1;EN.IS_READ_ONLY=!0;function mU(r){return oU.pushVerdictArguments(["SINTER"],r)}EN.transformArguments=mU});var YN=f((_N)=>{Object.defineProperty(_N,"__esModule",{value:!0});_N.transformArguments=_N.IS_READ_ONLY=_N.FIRST_KEY_INDEX=void 0;var sU=m();_N.FIRST_KEY_INDEX=2;_N.IS_READ_ONLY=!0;function IU(r,t){let u=sU.pushVerdictArgument(["SINTERCARD"],r);if(t)u.push("LIMIT",t.toString());return u}_N.transformArguments=IU});var ON=f((gN)=>{Object.defineProperty(gN,"__esModule",{value:!0});gN.transformArguments=gN.FIRST_KEY_INDEX=void 0;var YU=m();gN.FIRST_KEY_INDEX=1;function gU(r,t){return YU.pushVerdictArguments(["SINTERSTORE",r],t)}gN.transformArguments=gU});var RN=f((Vn)=>{Object.defineProperty(Vn,"__esModule",{value:!0});Vn.transformReply=Vn.transformArguments=Vn.FIRST_KEY_INDEX=void 0;Vn.FIRST_KEY_INDEX=1;function OU(r,t){return["SISMEMBER",r,t]}Vn.transformArguments=OU;var RU=m();Object.defineProperty(Vn,"transformReply",{enumerable:!0,get:function(){return RU.transformBooleanReply}})});var XN=f((xN)=>{Object.defineProperty(xN,"__esModule",{value:!0});xN.transformArguments=xN.FIRST_KEY_INDEX=void 0;xN.FIRST_KEY_INDEX=1;function jU(r){return["SMEMBERS",r]}xN.transformArguments=jU});var jN=f((Wn)=>{Object.defineProperty(Wn,"__esModule",{value:!0});Wn.transformReply=Wn.transformArguments=Wn.FIRST_KEY_INDEX=void 0;Wn.FIRST_KEY_INDEX=1;function SU(r,t){return["SMISMEMBER",r,...t]}Wn.transformArguments=SU;var MU=m();Object.defineProperty(Wn,"transformReply",{enumerable:!0,get:function(){return MU.transformBooleanArrayReply}})});var KN=f((Zn)=>{Object.defineProperty(Zn,"__esModule",{value:!0});Zn.transformReply=Zn.transformArguments=Zn.FIRST_KEY_INDEX=void 0;Zn.FIRST_KEY_INDEX=1;function qU(r,t,u){return["SMOVE",r,t,u]}Zn.transformArguments=qU;var yU=m();Object.defineProperty(Zn,"transformReply",{enumerable:!0,get:function(){return yU.transformBooleanReply}})});var bN=f((SN)=>{Object.defineProperty(SN,"__esModule",{value:!0});SN.transformArguments=SN.IS_READ_ONLY=SN.FIRST_KEY_INDEX=void 0;var JU=m();SN.FIRST_KEY_INDEX=1;SN.IS_READ_ONLY=!0;function $U(r,t){return JU.pushSortArguments(["SORT_RO",r],t)}SN.transformArguments=$U});var Pn=f((TN)=>{Object.defineProperty(TN,"__esModule",{value:!0});TN.transformArguments=TN.FIRST_KEY_INDEX=void 0;var VU=m();TN.FIRST_KEY_INDEX=1;function WU(r,t){return VU.pushSortArguments(["SORT",r],t)}TN.transformArguments=WU});var vN=f((qN)=>{Object.defineProperty(qN,"__esModule",{value:!0});qN.transformArguments=qN.FIRST_KEY_INDEX=void 0;var PU=Pn();qN.FIRST_KEY_INDEX=1;function HU(r,t,u){let n=PU.transformArguments(r,u);return n.push("STORE",t),n}qN.transformArguments=HU});var JN=f((LN)=>{Object.defineProperty(LN,"__esModule",{value:!0});LN.transformArguments=LN.FIRST_KEY_INDEX=void 0;LN.FIRST_KEY_INDEX=1;function UU(r,t){let u=["SPOP",r];if(typeof t==="number")u.push(t.toString());return u}LN.transformArguments=UU});var QN=f(($N)=>{Object.defineProperty($N,"__esModule",{value:!0});$N.transformArguments=$N.FIRST_KEY_INDEX=$N.IS_READ_ONLY=void 0;$N.IS_READ_ONLY=!0;$N.FIRST_KEY_INDEX=1;function wU(r,t){return["SPUBLISH",r,t]}$N.transformArguments=wU});var xu=f((VN)=>{Object.defineProperty(VN,"__esModule",{value:!0});VN.transformArguments=VN.FIRST_KEY_INDEX=void 0;VN.FIRST_KEY_INDEX=1;function GU(r){return["SRANDMEMBER",r]}VN.transformArguments=GU});var PN=f((Hn)=>{Object.defineProperty(Hn,"__esModule",{value:!0});Hn.transformArguments=Hn.FIRST_KEY_INDEX=void 0;var iU=xu(),aU=xu();Object.defineProperty(Hn,"FIRST_KEY_INDEX",{enumerable:!0,get:function(){return aU.FIRST_KEY_INDEX}});function lU(r,t){return[...iU.transformArguments(r),t.toString()]}Hn.transformArguments=lU});var UN=f((HN)=>{Object.defineProperty(HN,"__esModule",{value:!0});HN.transformArguments=HN.FIRST_KEY_INDEX=void 0;var r3=m();HN.FIRST_KEY_INDEX=1;function t3(r,t){return r3.pushVerdictArguments(["SREM",r],t)}HN.transformArguments=t3});var dN=f((hN)=>{Object.defineProperty(hN,"__esModule",{value:!0});hN.transformReply=hN.transformArguments=hN.IS_READ_ONLY=hN.FIRST_KEY_INDEX=void 0;var n3=m();hN.FIRST_KEY_INDEX=1;hN.IS_READ_ONLY=!0;function e3(r,t,u){return n3.pushScanArguments(["SSCAN",r],t,u)}hN.transformArguments=e3;function f3([r,t]){return{cursor:Number(r),members:t}}hN.transformReply=f3});var kN=f((CN)=>{Object.defineProperty(CN,"__esModule",{value:!0});CN.transformArguments=CN.IS_READ_ONLY=CN.FIRST_KEY_INDEX=void 0;CN.FIRST_KEY_INDEX=1;CN.IS_READ_ONLY=!0;function E3(r){return["STRLEN",r]}CN.transformArguments=E3});var lN=f((iN)=>{Object.defineProperty(iN,"__esModule",{value:!0});iN.transformArguments=iN.IS_READ_ONLY=iN.FIRST_KEY_INDEX=void 0;var _3=m();iN.FIRST_KEY_INDEX=1;iN.IS_READ_ONLY=!0;function N3(r){return _3.pushVerdictArguments(["SUNION"],r)}iN.transformArguments=N3});var uY=f((rY)=>{Object.defineProperty(rY,"__esModule",{value:!0});rY.transformArguments=rY.FIRST_KEY_INDEX=void 0;var D3=m();rY.FIRST_KEY_INDEX=1;function O3(r,t){return D3.pushVerdictArguments(["SUNIONSTORE",r],t)}rY.transformArguments=O3});var fY=f((nY)=>{Object.defineProperty(nY,"__esModule",{value:!0});nY.transformArguments=nY.FIRST_KEY_INDEX=void 0;var x3=m();nY.FIRST_KEY_INDEX=1;function c3(r){return x3.pushVerdictArguments(["TOUCH"],r)}nY.transformArguments=c3});var AY=f((oY)=>{Object.defineProperty(oY,"__esModule",{value:!0});oY.transformArguments=oY.IS_READ_ONLY=oY.FIRST_KEY_INDEX=void 0;oY.FIRST_KEY_INDEX=1;oY.IS_READ_ONLY=!0;function j3(r){return["TTL",r]}oY.transformArguments=j3});var IY=f((EY)=>{Object.defineProperty(EY,"__esModule",{value:!0});EY.transformArguments=EY.IS_READ_ONLY=EY.FIRST_KEY_INDEX=void 0;EY.FIRST_KEY_INDEX=1;EY.IS_READ_ONLY=!0;function M3(r){return["TYPE",r]}EY.transformArguments=M3});var YY=f((_Y)=>{Object.defineProperty(_Y,"__esModule",{value:!0});_Y.transformArguments=_Y.FIRST_KEY_INDEX=void 0;var p3=m();_Y.FIRST_KEY_INDEX=1;function q3(r){return p3.pushVerdictArguments(["UNLINK"],r)}_Y.transformArguments=q3});var OY=f((gY)=>{Object.defineProperty(gY,"__esModule",{value:!0});gY.transformArguments=gY.FIRST_KEY_INDEX=void 0;var v3=m();gY.FIRST_KEY_INDEX=1;function L3(r){return v3.pushVerdictArguments(["WATCH"],r)}gY.transformArguments=L3});var cY=f((RY)=>{Object.defineProperty(RY,"__esModule",{value:!0});RY.transformArguments=RY.FIRST_KEY_INDEX=void 0;var J3=m();RY.FIRST_KEY_INDEX=1;function $3(r,t,u){return J3.pushVerdictArguments(["XACK",r,t],u)}RY.transformArguments=$3});var KY=f((XY)=>{Object.defineProperty(XY,"__esModule",{value:!0});XY.transformArguments=XY.FIRST_KEY_INDEX=void 0;XY.FIRST_KEY_INDEX=1;function Q3(r,t,u,n){let e=["XADD",r];if(n?.NOMKSTREAM)e.push("NOMKSTREAM");if(n?.TRIM){if(n.TRIM.strategy)e.push(n.TRIM.strategy);if(n.TRIM.strategyModifier)e.push(n.TRIM.strategyModifier);if(e.push(n.TRIM.threshold.toString()),n.TRIM.limit)e.push("LIMIT",n.TRIM.limit.toString())}e.push(t);for(let[o,A]of Object.entries(u))e.push(o,A);return e}XY.transformArguments=Q3});var cu=f((SY)=>{Object.defineProperty(SY,"__esModule",{value:!0});SY.transformReply=SY.transformArguments=SY.FIRST_KEY_INDEX=void 0;var W3=m();SY.FIRST_KEY_INDEX=1;function Z3(r,t,u,n,e,o){let A=["XAUTOCLAIM",r,t,u,n.toString(),e];if(o?.COUNT)A.push("COUNT",o.COUNT.toString());return A}SY.transformArguments=Z3;function P3(r){return{nextId:r[0],messages:W3.transformStreamMessagesNullReply(r[1])}}SY.transformReply=P3});var TY=f((Bn)=>{Object.defineProperty(Bn,"__esModule",{value:!0});Bn.transformReply=Bn.transformArguments=Bn.FIRST_KEY_INDEX=void 0;var U3=cu(),h3=cu();Object.defineProperty(Bn,"FIRST_KEY_INDEX",{enumerable:!0,get:function(){return h3.FIRST_KEY_INDEX}});function w3(...r){return[...U3.transformArguments(...r),"JUSTID"]}Bn.transformArguments=w3;function d3(r){return{nextId:r[0],messages:r[1]}}Bn.transformReply=d3});var Xu=f((Un)=>{Object.defineProperty(Un,"__esModule",{value:!0});Un.transformReply=Un.transformArguments=Un.FIRST_KEY_INDEX=void 0;var G3=m();Un.FIRST_KEY_INDEX=1;function k3(r,t,u,n,e,o){let A=G3.pushVerdictArguments(["XCLAIM",r,t,u,n.toString()],e);if(o?.IDLE)A.push("IDLE",o.IDLE.toString());if(o?.TIME)A.push("TIME",(typeof o.TIME==="number"?o.TIME:o.TIME.getTime()).toString());if(o?.RETRYCOUNT)A.push("RETRYCOUNT",o.RETRYCOUNT.toString());if(o?.FORCE)A.push("FORCE");return A}Un.transformArguments=k3;var i3=m();Object.defineProperty(Un,"transformReply",{enumerable:!0,get:function(){return i3.transformStreamMessagesNullReply}})});var qY=f((hn)=>{Object.defineProperty(hn,"__esModule",{value:!0});hn.transformArguments=hn.FIRST_KEY_INDEX=void 0;var th=Xu(),uh=Xu();Object.defineProperty(hn,"FIRST_KEY_INDEX",{enumerable:!0,get:function(){return uh.FIRST_KEY_INDEX}});function nh(...r){return[...th.transformArguments(...r),"JUSTID"]}hn.transformArguments=nh});var LY=f((yY)=>{Object.defineProperty(yY,"__esModule",{value:!0});yY.transformArguments=yY.FIRST_KEY_INDEX=void 0;var eh=m();yY.FIRST_KEY_INDEX=1;function fh(r,t){return eh.pushVerdictArguments(["XDEL",r],t)}yY.transformArguments=fh});var $Y=f((FY)=>{Object.defineProperty(FY,"__esModule",{value:!0});FY.transformArguments=FY.FIRST_KEY_INDEX=void 0;FY.FIRST_KEY_INDEX=2;function mh(r,t,u,n){let e=["XGROUP","CREATE",r,t,u];if(n?.MKSTREAM)e.push("MKSTREAM");return e}FY.transformArguments=mh});var zY=f((wn)=>{Object.defineProperty(wn,"__esModule",{value:!0});wn.transformReply=wn.transformArguments=wn.FIRST_KEY_INDEX=void 0;wn.FIRST_KEY_INDEX=2;function Eh(r,t,u){return["XGROUP","CREATECONSUMER",r,t,u]}wn.transformArguments=Eh;var sh=m();Object.defineProperty(wn,"transformReply",{enumerable:!0,get:function(){return sh.transformBooleanReply}})});var WY=f((QY)=>{Object.defineProperty(QY,"__esModule",{value:!0});QY.transformArguments=QY.FIRST_KEY_INDEX=void 0;QY.FIRST_KEY_INDEX=2;function Yh(r,t,u){return["XGROUP","DELCONSUMER",r,t,u]}QY.transformArguments=Yh});var ZY=f((dn)=>{Object.defineProperty(dn,"__esModule",{value:!0});dn.transformReply=dn.transformArguments=dn.FIRST_KEY_INDEX=void 0;dn.FIRST_KEY_INDEX=2;function Dh(r,t){return["XGROUP","DESTROY",r,t]}dn.transformArguments=Dh;var Oh=m();Object.defineProperty(dn,"transformReply",{enumerable:!0,get:function(){return Oh.transformBooleanReply}})});var BY=f((PY)=>{Object.defineProperty(PY,"__esModule",{value:!0});PY.transformArguments=PY.FIRST_KEY_INDEX=void 0;PY.FIRST_KEY_INDEX=2;function Xh(r,t,u){return["XGROUP","SETID",r,t,u]}PY.transformArguments=Xh});var wY=f((UY)=>{Object.defineProperty(UY,"__esModule",{value:!0});UY.transformReply=UY.transformArguments=UY.IS_READ_ONLY=UY.FIRST_KEY_INDEX=void 0;UY.FIRST_KEY_INDEX=2;UY.IS_READ_ONLY=!0;function Kh(r,t){return["XINFO","CONSUMERS",r,t]}UY.transformArguments=Kh;function Sh(r){return r.map((t)=>({name:t[1],pending:t[3],idle:t[5],inactive:t[7]}))}UY.transformReply=Sh});var GY=f((dY)=>{Object.defineProperty(dY,"__esModule",{value:!0});dY.transformReply=dY.transformArguments=dY.IS_READ_ONLY=dY.FIRST_KEY_INDEX=void 0;dY.FIRST_KEY_INDEX=2;dY.IS_READ_ONLY=!0;function ph(r){return["XINFO","GROUPS",r]}dY.transformArguments=ph;function qh(r){return r.map((t)=>({name:t[1],consumers:t[3],pending:t[5],lastDeliveredId:t[7]}))}dY.transformReply=qh});var lY=f((iY)=>{Object.defineProperty(iY,"__esModule",{value:!0});iY.transformReply=iY.transformArguments=iY.IS_READ_ONLY=iY.FIRST_KEY_INDEX=void 0;var kY=m();iY.FIRST_KEY_INDEX=2;iY.IS_READ_ONLY=!0;function Fh(r){return["XINFO","STREAM",r]}iY.transformArguments=Fh;function Jh(r){let t={};for(let u=0;u<r.length;u+=2)switch(r[u]){case"length":t.length=r[u+1];break;case"radix-tree-keys":t.radixTreeKeys=r[u+1];break;case"radix-tree-nodes":t.radixTreeNodes=r[u+1];break;case"groups":t.groups=r[u+1];break;case"last-generated-id":t.lastGeneratedId=r[u+1];break;case"first-entry":t.firstEntry=r[u+1]?{id:r[u+1][0],message:kY.transformTuplesReply(r[u+1][1])}:null;break;case"last-entry":t.lastEntry=r[u+1]?{id:r[u+1][0],message:kY.transformTuplesReply(r[u+1][1])}:null;break}return t}iY.transformReply=Jh});var u1=f((r1)=>{Object.defineProperty(r1,"__esModule",{value:!0});r1.transformArguments=r1.IS_READ_ONLY=r1.FIRST_KEY_INDEX=void 0;r1.FIRST_KEY_INDEX=1;r1.IS_READ_ONLY=!0;function Vh(r){return["XLEN",r]}r1.transformArguments=Vh});var f1=f((n1)=>{Object.defineProperty(n1,"__esModule",{value:!0});n1.transformReply=n1.transformArguments=n1.IS_READ_ONLY=n1.FIRST_KEY_INDEX=void 0;n1.FIRST_KEY_INDEX=1;n1.IS_READ_ONLY=!0;function Ph(r,t,u,n,e,o){let A=["XPENDING",r,t];if(o?.IDLE)A.push("IDLE",o.IDLE.toString());if(A.push(u,n,e.toString()),o?.consumer)A.push(o.consumer);return A}n1.transformArguments=Ph;function Hh(r){return r.map(([t,u,n,e])=>({id:t,owner:u,millisecondsSinceLastDelivery:n,deliveriesCounter:e}))}n1.transformReply=Hh});var A1=f((o1)=>{Object.defineProperty(o1,"__esModule",{value:!0});o1.transformReply=o1.transformArguments=o1.IS_READ_ONLY=o1.FIRST_KEY_INDEX=void 0;o1.FIRST_KEY_INDEX=1;o1.IS_READ_ONLY=!0;function wh(r,t){return["XPENDING",r,t]}o1.transformArguments=wh;function dh(r){return{pending:r[0],firstId:r[1],lastId:r[2],consumers:r[3]===null?null:r[3].map(([t,u])=>({name:t,deliveriesCounter:Number(u)}))}}o1.transformReply=dh});var E1=f((Cn)=>{Object.defineProperty(Cn,"__esModule",{value:!0});Cn.transformReply=Cn.transformArguments=Cn.IS_READ_ONLY=Cn.FIRST_KEY_INDEX=void 0;Cn.FIRST_KEY_INDEX=1;Cn.IS_READ_ONLY=!0;function ih(r,t,u,n){let e=["XRANGE",r,t,u];if(n?.COUNT)e.push("COUNT",n.COUNT.toString());return e}Cn.transformArguments=ih;var ah=m();Object.defineProperty(Cn,"transformReply",{enumerable:!0,get:function(){return ah.transformStreamMessagesReply}})});var s1=f((Gn)=>{Object.defineProperty(Gn,"__esModule",{value:!0});Gn.transformReply=Gn.transformArguments=Gn.IS_READ_ONLY=Gn.FIRST_KEY_INDEX=void 0;var n2=(r)=>{return Array.isArray(r)?r[0].key:r.key};Gn.FIRST_KEY_INDEX=n2;Gn.IS_READ_ONLY=!0;function e2(r,t){let u=["XREAD"];if(t?.COUNT)u.push("COUNT",t.COUNT.toString());if(typeof t?.BLOCK==="number")u.push("BLOCK",t.BLOCK.toString());u.push("STREAMS");let n=Array.isArray(r)?r:[r],e=u.length;for(let o=0;o<n.length;o++){let A=n[o];u[e+o]=A.key,u[e+n.length+o]=A.id}return u}Gn.transformArguments=e2;var f2=m();Object.defineProperty(Gn,"transformReply",{enumerable:!0,get:function(){return f2.transformStreamsMessagesReply}})});var I1=f((kn)=>{Object.defineProperty(kn,"__esModule",{value:!0});kn.transformReply=kn.transformArguments=kn.IS_READ_ONLY=kn.FIRST_KEY_INDEX=void 0;var s2=(r,t,u)=>{return Array.isArray(u)?u[0].key:u.key};kn.FIRST_KEY_INDEX=s2;kn.IS_READ_ONLY=!0;function I2(r,t,u,n){let e=["XREADGROUP","GROUP",r,t];if(n?.COUNT)e.push("COUNT",n.COUNT.toString());if(typeof n?.BLOCK==="number")e.push("BLOCK",n.BLOCK.toString());if(n?.NOACK)e.push("NOACK");e.push("STREAMS");let o=Array.isArray(u)?u:[u],A=e.length;for(let s=0;s<o.length;s++){let I=o[s];e[A+s]=I.key,e[A+o.length+s]=I.id}return e}kn.transformArguments=I2;var _2=m();Object.defineProperty(kn,"transformReply",{enumerable:!0,get:function(){return _2.transformStreamsMessagesReply}})});var _1=f((an)=>{Object.defineProperty(an,"__esModule",{value:!0});an.transformReply=an.transformArguments=an.IS_READ_ONLY=an.FIRST_KEY_INDEX=void 0;an.FIRST_KEY_INDEX=1;an.IS_READ_ONLY=!0;function O2(r,t,u,n){let e=["XREVRANGE",r,t,u];if(n?.COUNT)e.push("COUNT",n.COUNT.toString());return e}an.transformArguments=O2;var R2=m();Object.defineProperty(an,"transformReply",{enumerable:!0,get:function(){return R2.transformStreamMessagesReply}})});var g1=f((N1)=>{Object.defineProperty(N1,"__esModule",{value:!0});N1.transformArguments=N1.FIRST_KEY_INDEX=void 0;N1.FIRST_KEY_INDEX=1;function K2(r,t,u){let n=["XSETID",r,t];if(u?.ENTRIESADDED)n.push("ENTRIESADDED",u.ENTRIESADDED.toString());if(u?.MAXDELETEDID)n.push("MAXDELETEDID",u.MAXDELETEDID);return n}N1.transformArguments=K2});var R1=f((D1)=>{Object.defineProperty(D1,"__esModule",{value:!0});D1.transformArguments=D1.FIRST_KEY_INDEX=void 0;D1.FIRST_KEY_INDEX=1;function M2(r,t,u,n){let e=["XTRIM",r,t];if(n?.strategyModifier)e.push(n.strategyModifier);if(e.push(u.toString()),n?.LIMIT)e.push("LIMIT",n.LIMIT.toString());return e}D1.transformArguments=M2});var x1=f((ln)=>{Object.defineProperty(ln,"__esModule",{value:!0});ln.transformReply=ln.transformArguments=ln.FIRST_KEY_INDEX=void 0;var T2=m();ln.FIRST_KEY_INDEX=1;function p2(r,t,u){let n=["ZADD",r];if(u?.NX)n.push("NX");else{if(u?.XX)n.push("XX");if(u?.GT)n.push("GT");else if(u?.LT)n.push("LT")}if(u?.CH)n.push("CH");if(u?.INCR)n.push("INCR");for(let{score:e,value:o}of Array.isArray(t)?t:[t])n.push(T2.transformNumberInfinityArgument(e),o);return n}ln.transformArguments=p2;var q2=m();Object.defineProperty(ln,"transformReply",{enumerable:!0,get:function(){return q2.transformNumberInfinityReply}})});var j1=f((c1)=>{Object.defineProperty(c1,"__esModule",{value:!0});c1.transformArguments=c1.IS_READ_ONLY=c1.FIRST_KEY_INDEX=void 0;c1.FIRST_KEY_INDEX=1;c1.IS_READ_ONLY=!0;function F2(r){return["ZCARD",r]}c1.transformArguments=F2});var b1=f((S1)=>{Object.defineProperty(S1,"__esModule",{value:!0});S1.transformArguments=S1.IS_READ_ONLY=S1.FIRST_KEY_INDEX=void 0;var K1=m();S1.FIRST_KEY_INDEX=1;S1.IS_READ_ONLY=!0;function z2(r,t,u){return["ZCOUNT",r,K1.transformStringNumberInfinityArgument(t),K1.transformStringNumberInfinityArgument(u)]}S1.transformArguments=z2});var ju=f((T1)=>{Object.defineProperty(T1,"__esModule",{value:!0});T1.transformArguments=T1.IS_READ_ONLY=T1.FIRST_KEY_INDEX=void 0;var W2=m();T1.FIRST_KEY_INDEX=2;T1.IS_READ_ONLY=!0;function Z2(r){return W2.pushVerdictArgument(["ZDIFF"],r)}T1.transformArguments=Z2});var y1=f((Lt)=>{Object.defineProperty(Lt,"__esModule",{value:!0});Lt.transformReply=Lt.transformArguments=Lt.IS_READ_ONLY=Lt.FIRST_KEY_INDEX=void 0;var B2=ju(),q1=ju();Object.defineProperty(Lt,"FIRST_KEY_INDEX",{enumerable:!0,get:function(){return q1.FIRST_KEY_INDEX}});Object.defineProperty(Lt,"IS_READ_ONLY",{enumerable:!0,get:function(){return q1.IS_READ_ONLY}});function U2(...r){return[...B2.transformArguments(...r),"WITHSCORES"]}Lt.transformArguments=U2;var h2=m();Object.defineProperty(Lt,"transformReply",{enumerable:!0,get:function(){return h2.transformSortedSetWithScoresReply}})});var F1=f((v1)=>{Object.defineProperty(v1,"__esModule",{value:!0});v1.transformArguments=v1.FIRST_KEY_INDEX=void 0;var C2=m();v1.FIRST_KEY_INDEX=1;function G2(r,t){return C2.pushVerdictArgument(["ZDIFFSTORE",r],t)}v1.transformArguments=G2});var J1=f((re)=>{Object.defineProperty(re,"__esModule",{value:!0});re.transformReply=re.transformArguments=re.FIRST_KEY_INDEX=void 0;var i2=m();re.FIRST_KEY_INDEX=1;function a2(r,t,u){return["ZINCRBY",r,i2.transformNumberInfinityArgument(t),u]}re.transformArguments=a2;var l2=m();Object.defineProperty(re,"transformReply",{enumerable:!0,get:function(){return l2.transformNumberInfinityReply}})});var Ku=f(($1)=>{Object.defineProperty($1,"__esModule",{value:!0});$1.transformArguments=$1.IS_READ_ONLY=$1.FIRST_KEY_INDEX=void 0;var nw=m();$1.FIRST_KEY_INDEX=2;$1.IS_READ_ONLY=!0;function ew(r,t){let u=nw.pushVerdictArgument(["ZINTER"],r);if(t?.WEIGHTS)u.push("WEIGHTS",...t.WEIGHTS.map((n)=>n.toString()));if(t?.AGGREGATE)u.push("AGGREGATE",t.AGGREGATE);return u}$1.transformArguments=ew});var V1=f((Ft)=>{Object.defineProperty(Ft,"__esModule",{value:!0});Ft.transformReply=Ft.transformArguments=Ft.IS_READ_ONLY=Ft.FIRST_KEY_INDEX=void 0;var mw=Ku(),Q1=Ku();Object.defineProperty(Ft,"FIRST_KEY_INDEX",{enumerable:!0,get:function(){return Q1.FIRST_KEY_INDEX}});Object.defineProperty(Ft,"IS_READ_ONLY",{enumerable:!0,get:function(){return Q1.IS_READ_ONLY}});function Aw(...r){return[...mw.transformArguments(...r),"WITHSCORES"]}Ft.transformArguments=Aw;var Ew=m();Object.defineProperty(Ft,"transformReply",{enumerable:!0,get:function(){return Ew.transformSortedSetWithScoresReply}})});var P1=f((W1)=>{Object.defineProperty(W1,"__esModule",{value:!0});W1.transformArguments=W1.IS_READ_ONLY=W1.FIRST_KEY_INDEX=void 0;var _w=m();W1.FIRST_KEY_INDEX=2;W1.IS_READ_ONLY=!0;function Nw(r,t){let u=_w.pushVerdictArgument(["ZINTERCARD"],r);if(t)u.push("LIMIT",t.toString());return u}W1.transformArguments=Nw});var U1=f((H1)=>{Object.defineProperty(H1,"__esModule",{value:!0});H1.transformArguments=H1.FIRST_KEY_INDEX=void 0;var Dw=m();H1.FIRST_KEY_INDEX=1;function Ow(r,t,u){let n=Dw.pushVerdictArgument(["ZINTERSTORE",r],t);if(u?.WEIGHTS)n.push("WEIGHTS",...u.WEIGHTS.map((e)=>e.toString()));if(u?.AGGREGATE)n.push("AGGREGATE",u.AGGREGATE);return n}H1.transformArguments=Ow});var d1=f((h1)=>{Object.defineProperty(h1,"__esModule",{value:!0});h1.transformArguments=h1.IS_READ_ONLY=h1.FIRST_KEY_INDEX=void 0;h1.FIRST_KEY_INDEX=1;h1.IS_READ_ONLY=!0;function xw(r,t,u){return["ZLEXCOUNT",r,t,u]}h1.transformArguments=xw});var C1=f((te)=>{Object.defineProperty(te,"__esModule",{value:!0});te.transformReply=te.transformArguments=te.IS_READ_ONLY=te.FIRST_KEY_INDEX=void 0;var jw=m();te.FIRST_KEY_INDEX=1;te.IS_READ_ONLY=!0;function Kw(r,t){return jw.pushVerdictArguments(["ZMSCORE",r],t)}te.transformArguments=Kw;var Sw=m();Object.defineProperty(te,"transformReply",{enumerable:!0,get:function(){return Sw.transformNumberInfinityNullArrayReply}})});var Su=f((ue)=>{Object.defineProperty(ue,"__esModule",{value:!0});ue.transformReply=ue.transformArguments=ue.FIRST_KEY_INDEX=void 0;ue.FIRST_KEY_INDEX=1;function qw(r){return["ZPOPMAX",r]}ue.transformArguments=qw;var yw=m();Object.defineProperty(ue,"transformReply",{enumerable:!0,get:function(){return yw.transformSortedSetMemberNullReply}})});var G1=f((Mu)=>{Object.defineProperty(Mu,"__esModule",{value:!0});Mu.transformReply=Mu.transformArguments=Mu.FIRST_KEY_INDEX=void 0;var Jw=Su(),$w=Su();Object.defineProperty(Mu,"FIRST_KEY_INDEX",{enumerable:!0,get:function(){return $w.FIRST_KEY_INDEX}});function zw(r,t){return[...Jw.transformArguments(r),t.toString()]}Mu.transformArguments=zw;var Qw=m();Object.defineProperty(Mu,"transformReply",{enumerable:!0,get:function(){return Qw.transformSortedSetWithScoresReply}})});var bu=f((ne)=>{Object.defineProperty(ne,"__esModule",{value:!0});ne.transformReply=ne.transformArguments=ne.FIRST_KEY_INDEX=void 0;ne.FIRST_KEY_INDEX=1;function Zw(r){return["ZPOPMIN",r]}ne.transformArguments=Zw;var Pw=m();Object.defineProperty(ne,"transformReply",{enumerable:!0,get:function(){return Pw.transformSortedSetMemberNullReply}})});var k1=f((Tu)=>{Object.defineProperty(Tu,"__esModule",{value:!0});Tu.transformReply=Tu.transformArguments=Tu.FIRST_KEY_INDEX=void 0;var hw=bu(),ww=bu();Object.defineProperty(Tu,"FIRST_KEY_INDEX",{enumerable:!0,get:function(){return ww.FIRST_KEY_INDEX}});function dw(r,t){return[...hw.transformArguments(r),t.toString()]}Tu.transformArguments=dw;var Cw=m();Object.defineProperty(Tu,"transformReply",{enumerable:!0,get:function(){return Cw.transformSortedSetWithScoresReply}})});var pu=f((i1)=>{Object.defineProperty(i1,"__esModule",{value:!0});i1.transformArguments=i1.IS_READ_ONLY=i1.FIRST_KEY_INDEX=void 0;i1.FIRST_KEY_INDEX=1;i1.IS_READ_ONLY=!0;function iw(r){return["ZRANDMEMBER",r]}i1.transformArguments=iw});var yu=f((qu)=>{Object.defineProperty(qu,"__esModule",{value:!0});qu.transformArguments=qu.IS_READ_ONLY=qu.FIRST_KEY_INDEX=void 0;var rd=pu(),l1=pu();Object.defineProperty(qu,"FIRST_KEY_INDEX",{enumerable:!0,get:function(){return l1.FIRST_KEY_INDEX}});Object.defineProperty(qu,"IS_READ_ONLY",{enumerable:!0,get:function(){return l1.IS_READ_ONLY}});function td(r,t){return[...rd.transformArguments(r),t.toString()]}qu.transformArguments=td});var ug=f((Jt)=>{Object.defineProperty(Jt,"__esModule",{value:!0});Jt.transformReply=Jt.transformArguments=Jt.IS_READ_ONLY=Jt.FIRST_KEY_INDEX=void 0;var ud=yu(),tg=yu();Object.defineProperty(Jt,"FIRST_KEY_INDEX",{enumerable:!0,get:function(){return tg.FIRST_KEY_INDEX}});Object.defineProperty(Jt,"IS_READ_ONLY",{enumerable:!0,get:function(){return tg.IS_READ_ONLY}});function nd(...r){return[...ud.transformArguments(...r),"WITHSCORES"]}Jt.transformArguments=nd;var ed=m();Object.defineProperty(Jt,"transformReply",{enumerable:!0,get:function(){return ed.transformSortedSetWithScoresReply}})});var vu=f((eg)=>{Object.defineProperty(eg,"__esModule",{value:!0});eg.transformArguments=eg.IS_READ_ONLY=eg.FIRST_KEY_INDEX=void 0;var ng=m();eg.FIRST_KEY_INDEX=1;eg.IS_READ_ONLY=!0;function md(r,t,u,n){let e=["ZRANGE",r,ng.transformStringNumberInfinityArgument(t),ng.transformStringNumberInfinityArgument(u)];switch(n?.BY){case"SCORE":e.push("BYSCORE");break;case"LEX":e.push("BYLEX");break}if(n?.REV)e.push("REV");if(n?.LIMIT)e.push("LIMIT",n.LIMIT.offset.toString(),n.LIMIT.count.toString());return e}eg.transformArguments=md});var mg=f(($t)=>{Object.defineProperty($t,"__esModule",{value:!0});$t.transformReply=$t.transformArguments=$t.IS_READ_ONLY=$t.FIRST_KEY_INDEX=void 0;var sd=vu(),og=vu();Object.defineProperty($t,"FIRST_KEY_INDEX",{enumerable:!0,get:function(){return og.FIRST_KEY_INDEX}});Object.defineProperty($t,"IS_READ_ONLY",{enumerable:!0,get:function(){return og.IS_READ_ONLY}});function Id(...r){return[...sd.transformArguments(...r),"WITHSCORES"]}$t.transformArguments=Id;var _d=m();Object.defineProperty($t,"transformReply",{enumerable:!0,get:function(){return _d.transformSortedSetWithScoresReply}})});var Ig=f((Eg)=>{Object.defineProperty(Eg,"__esModule",{value:!0});Eg.transformArguments=Eg.IS_READ_ONLY=Eg.FIRST_KEY_INDEX=void 0;var Ag=m();Eg.FIRST_KEY_INDEX=1;Eg.IS_READ_ONLY=!0;function gd(r,t,u,n){let e=["ZRANGEBYLEX",r,Ag.transformStringNumberInfinityArgument(t),Ag.transformStringNumberInfinityArgument(u)];if(n?.LIMIT)e.push("LIMIT",n.LIMIT.offset.toString(),n.LIMIT.count.toString());return e}Eg.transformArguments=gd});var Lu=f((Ng)=>{Object.defineProperty(Ng,"__esModule",{value:!0});Ng.transformArguments=Ng.IS_READ_ONLY=Ng.FIRST_KEY_INDEX=void 0;var _g=m();Ng.FIRST_KEY_INDEX=1;Ng.IS_READ_ONLY=!0;function Rd(r,t,u,n){let e=["ZRANGEBYSCORE",r,_g.transformStringNumberInfinityArgument(t),_g.transformStringNumberInfinityArgument(u)];if(n?.LIMIT)e.push("LIMIT",n.LIMIT.offset.toString(),n.LIMIT.count.toString());return e}Ng.transformArguments=Rd});var Dg=f((zt)=>{Object.defineProperty(zt,"__esModule",{value:!0});zt.transformReply=zt.transformArguments=zt.IS_READ_ONLY=zt.FIRST_KEY_INDEX=void 0;var Xd=Lu(),gg=Lu();Object.defineProperty(zt,"FIRST_KEY_INDEX",{enumerable:!0,get:function(){return gg.FIRST_KEY_INDEX}});Object.defineProperty(zt,"IS_READ_ONLY",{enumerable:!0,get:function(){return gg.IS_READ_ONLY}});function jd(r,t,u,n){return[...Xd.transformArguments(r,t,u,n),"WITHSCORES"]}zt.transformArguments=jd;var Kd=m();Object.defineProperty(zt,"transformReply",{enumerable:!0,get:function(){return Kd.transformSortedSetWithScoresReply}})});var cg=f((Rg)=>{Object.defineProperty(Rg,"__esModule",{value:!0});Rg.transformReply=Rg.transformArguments=Rg.FIRST_KEY_INDEX=void 0;var Og=m();Rg.FIRST_KEY_INDEX=1;function bd(r,t,u,n,e){let o=["ZRANGESTORE",r,t,Og.transformStringNumberInfinityArgument(u),Og.transformStringNumberInfinityArgument(n)];switch(e?.BY){case"SCORE":o.push("BYSCORE");break;case"LEX":o.push("BYLEX");break}if(e?.REV)o.push("REV");if(e?.LIMIT)o.push("LIMIT",e.LIMIT.offset.toString(),e.LIMIT.count.toString());if(e?.WITHSCORES)o.push("WITHSCORES");return o}Rg.transformArguments=bd;function Td(r){if(typeof r!=="number")throw new TypeError("Upgrade to Redis 6.2.5 and up (https://github.com/redis/redis/pull/9089)");return r}Rg.transformReply=Td});var Kg=f((Xg)=>{Object.defineProperty(Xg,"__esModule",{value:!0});Xg.transformArguments=Xg.IS_READ_ONLY=Xg.FIRST_KEY_INDEX=void 0;Xg.FIRST_KEY_INDEX=1;Xg.IS_READ_ONLY=!0;function yd(r,t){return["ZRANK",r,t]}Xg.transformArguments=yd});var bg=f((Sg)=>{Object.defineProperty(Sg,"__esModule",{value:!0});Sg.transformArguments=Sg.FIRST_KEY_INDEX=void 0;var Fd=m();Sg.FIRST_KEY_INDEX=1;function Jd(r,t){return Fd.pushVerdictArguments(["ZREM",r],t)}Sg.transformArguments=Jd});var yg=f((pg)=>{Object.defineProperty(pg,"__esModule",{value:!0});pg.transformArguments=pg.FIRST_KEY_INDEX=void 0;var Tg=m();pg.FIRST_KEY_INDEX=1;function zd(r,t,u){return["ZREMRANGEBYLEX",r,Tg.transformStringNumberInfinityArgument(t),Tg.transformStringNumberInfinityArgument(u)]}pg.transformArguments=zd});var Fg=f((vg)=>{Object.defineProperty(vg,"__esModule",{value:!0});vg.transformArguments=vg.FIRST_KEY_INDEX=void 0;vg.FIRST_KEY_INDEX=1;function Vd(r,t,u){return["ZREMRANGEBYRANK",r,t.toString(),u.toString()]}vg.transformArguments=Vd});var Qg=f(($g)=>{Object.defineProperty($g,"__esModule",{value:!0});$g.transformArguments=$g.FIRST_KEY_INDEX=void 0;var Jg=m();$g.FIRST_KEY_INDEX=1;function Zd(r,t,u){return["ZREMRANGEBYSCORE",r,Jg.transformStringNumberInfinityArgument(t),Jg.transformStringNumberInfinityArgument(u)]}$g.transformArguments=Zd});var Zg=f((Vg)=>{Object.defineProperty(Vg,"__esModule",{value:!0});Vg.transformArguments=Vg.IS_READ_ONLY=Vg.FIRST_KEY_INDEX=void 0;Vg.FIRST_KEY_INDEX=1;Vg.IS_READ_ONLY=!0;function Hd(r,t){return["ZREVRANK",r,t]}Vg.transformArguments=Hd});var Ug=f((Hg)=>{Object.defineProperty(Hg,"__esModule",{value:!0});Hg.transformReply=Hg.transformArguments=Hg.IS_READ_ONLY=Hg.FIRST_KEY_INDEX=void 0;var Pg=m();Hg.FIRST_KEY_INDEX=1;Hg.IS_READ_ONLY=!0;function hd(r,t,u){return Pg.pushScanArguments(["ZSCAN",r],t,u)}Hg.transformArguments=hd;function wd([r,t]){let u=[];for(let n=0;n<t.length;n+=2)u.push({value:t[n],score:Pg.transformNumberInfinityReply(t[n+1])});return{cursor:Number(r),members:u}}Hg.transformReply=wd});var hg=f((ee)=>{Object.defineProperty(ee,"__esModule",{value:!0});ee.transformReply=ee.transformArguments=ee.IS_READ_ONLY=ee.FIRST_KEY_INDEX=void 0;ee.FIRST_KEY_INDEX=1;ee.IS_READ_ONLY=!0;function kd(r,t){return["ZSCORE",r,t]}ee.transformArguments=kd;var id=m();Object.defineProperty(ee,"transformReply",{enumerable:!0,get:function(){return id.transformNumberInfinityNullReply}})});var Fu=f((wg)=>{Object.defineProperty(wg,"__esModule",{value:!0});wg.transformArguments=wg.IS_READ_ONLY=wg.FIRST_KEY_INDEX=void 0;var uC=m();wg.FIRST_KEY_INDEX=2;wg.IS_READ_ONLY=!0;function nC(r,t){let u=uC.pushVerdictArgument(["ZUNION"],r);if(t?.WEIGHTS)u.push("WEIGHTS",...t.WEIGHTS.map((n)=>n.toString()));if(t?.AGGREGATE)u.push("AGGREGATE",t.AGGREGATE);return u}wg.transformArguments=nC});var Gg=f((Qt)=>{Object.defineProperty(Qt,"__esModule",{value:!0});Qt.transformReply=Qt.transformArguments=Qt.IS_READ_ONLY=Qt.FIRST_KEY_INDEX=void 0;var oC=Fu(),Cg=Fu();Object.defineProperty(Qt,"FIRST_KEY_INDEX",{enumerable:!0,get:function(){return Cg.FIRST_KEY_INDEX}});Object.defineProperty(Qt,"IS_READ_ONLY",{enumerable:!0,get:function(){return Cg.IS_READ_ONLY}});function mC(...r){return[...oC.transformArguments(...r),"WITHSCORES"]}Qt.transformArguments=mC;var AC=m();Object.defineProperty(Qt,"transformReply",{enumerable:!0,get:function(){return AC.transformSortedSetWithScoresReply}})});var ag=f((kg)=>{Object.defineProperty(kg,"__esModule",{value:!0});kg.transformArguments=kg.FIRST_KEY_INDEX=void 0;var IC=m();kg.FIRST_KEY_INDEX=1;function _C(r,t,u){let n=IC.pushVerdictArgument(["ZUNIONSTORE",r],t);if(u?.WEIGHTS)n.push("WEIGHTS",...u.WEIGHTS.map((e)=>e.toString()));if(u?.AGGREGATE)n.push("AGGREGATE",u.AGGREGATE);return n}kg.transformArguments=_C});var Ju=f((f0)=>{Object.defineProperty(f0,"__esModule",{value:!0});var lg=no(),rD=oo(),tD=Eo(),uD=_o(),nD=qo(),eD=Lo(),fD=$o(),oD=Vo(),mD=Rn(),AD=Po(),ED=Uo(),sD=Go(),ID=jn(),_D=lo(),ND=rm(),YD=nm(),gD=om(),DD=Em(),OD=_m(),RD=Dm(),xD=cm(),cD=Sm(),XD=pm(),jD=vm(),KD=Lm(),SD=Fm(),MD=zm(),bD=Zm(),TD=Um(),pD=dm(),qD=km(),yD=lm(),vD=uA(),LD=oA(),FD=fu(),JD=sA(),$D=St(),zD=YA(),QD=ou(),VD=RA(),WD=Tt(),ZD=XA(),PD=SA(),HD=pA(),BD=qt(),UD=vA(),hD=JA(),wD=QA(),dD=ZA(),CD=UA(),GD=dA(),kD=kA(),iD=lA(),aD=rE(),lD=nE(),rO=mE(),tO=sE(),uO=NE(),nO=YE(),eO=OE(),fO=cE(),oO=KE(),mO=bE(),AO=qE(),EO=LE(),sO=$E(),IO=WE(),_O=HE(),NO=hE(),YO=iE(),gO=_u(),DO=su(),OO=Nu(),RO=us(),xO=os(),cO=ms(),XO=ss(),jO=Ns(),KO=Ds(),SO=xs(),MO=js(),bO=Ms(),TO=vs(),pO=$s(),qO=Vs(),yO=Kr(),vO=Ps(),LO=Us(),FO=ds(),JO=ks(),$O=Dn(),zO=ls(),QO=uI(),VO=mI(),WO=yn(),ZO=sI(),PO=NI(),HO=DI(),BO=xI(),UO=jI(),hO=MI(),wO=pI(),dO=vI(),CO=JI(),GO=$I(),kO=VI(),iO=PI(),aO=UI(),lO=dI(),rR=CI(),tR=GI(),uR=kI(),nR=lI(),eR=r_(),fR=n_(),oR=o_(),mR=E_(),AR=__(),ER=g_(),sR=R_(),IR=x_(),_R=j_(),NR=M_(),YR=p_(),gR=v_(),DR=J_(),OR=Q_(),RR=Z_(),xR=B_(),cR=w_(),XR=G_(),jR=a_(),KR=tN(),SR=eN(),MR=fN(),bR=AN(),TR=IN(),pR=YN(),qR=ON(),yR=RN(),vR=XN(),LR=jN(),FR=KN(),JR=bN(),$R=vN(),zR=Pn(),QR=JN(),VR=QN(),WR=PN(),ZR=xu(),PR=UN(),HR=dN(),BR=kN(),UR=lN(),hR=uY(),wR=fY(),dR=AY(),CR=IY(),GR=YY(),kR=OY(),iR=cY(),aR=KY(),lR=TY(),rx=cu(),tx=qY(),ux=Xu(),nx=LY(),ex=$Y(),fx=zY(),ox=WY(),mx=ZY(),Ax=BY(),Ex=wY(),sx=GY(),Ix=lY(),_x=u1(),Nx=f1(),Yx=A1(),gx=E1(),Dx=s1(),Ox=I1(),Rx=_1(),xx=g1(),cx=R1(),Xx=x1(),jx=j1(),Kx=b1(),Sx=y1(),Mx=ju(),bx=F1(),Tx=J1(),px=V1(),qx=Ku(),yx=P1(),vx=U1(),Lx=d1(),Fx=cn(),Jx=C1(),$x=G1(),zx=Su(),Qx=k1(),Vx=bu(),Wx=ug(),Zx=yu(),Px=pu(),Hx=mg(),Bx=vu(),Ux=Ig(),hx=Dg(),wx=Lu(),dx=cg(),Cx=Kg(),Gx=bg(),kx=yg(),ix=Fg(),ax=Qg(),lx=Zg(),r0=Ug(),t0=hg(),u0=Gg(),n0=Fu(),e0=ag();f0.default={APPEND:lg,append:lg,BITCOUNT:rD,bitCount:rD,BITFIELD_RO:tD,bitFieldRo:tD,BITFIELD:uD,bitField:uD,BITOP:nD,bitOp:nD,BITPOS:eD,bitPos:eD,BLMOVE:fD,blMove:fD,BLMPOP:oD,blmPop:oD,BLPOP:mD,blPop:mD,BRPOP:AD,brPop:AD,BRPOPLPUSH:ED,brPopLPush:ED,BZMPOP:sD,bzmPop:sD,BZPOPMAX:ID,bzPopMax:ID,BZPOPMIN:_D,bzPopMin:_D,COPY:ND,copy:ND,DECR:YD,decr:YD,DECRBY:gD,decrBy:gD,DEL:DD,del:DD,DUMP:OD,dump:OD,EVAL_RO:RD,evalRo:RD,EVAL:xD,eval:xD,EVALSHA:XD,evalSha:XD,EVALSHA_RO:cD,evalShaRo:cD,EXISTS:jD,exists:jD,EXPIRE:KD,expire:KD,EXPIREAT:SD,expireAt:SD,EXPIRETIME:MD,expireTime:MD,FCALL_RO:bD,fCallRo:bD,FCALL:TD,fCall:TD,GEOADD:pD,geoAdd:pD,GEODIST:qD,geoDist:qD,GEOHASH:yD,geoHash:yD,GEOPOS:vD,geoPos:vD,GEORADIUS_RO_WITH:LD,geoRadiusRoWith:LD,GEORADIUS_RO:FD,geoRadiusRo:FD,GEORADIUS_WITH:JD,geoRadiusWith:JD,GEORADIUS:$D,geoRadius:$D,GEORADIUSBYMEMBER_RO_WITH:zD,geoRadiusByMemberRoWith:zD,GEORADIUSBYMEMBER_RO:QD,geoRadiusByMemberRo:QD,GEORADIUSBYMEMBER_WITH:VD,geoRadiusByMemberWith:VD,GEORADIUSBYMEMBER:WD,geoRadiusByMember:WD,GEORADIUSBYMEMBERSTORE:ZD,geoRadiusByMemberStore:ZD,GEORADIUSSTORE:PD,geoRadiusStore:PD,GEOSEARCH_WITH:HD,geoSearchWith:HD,GEOSEARCH:BD,geoSearch:BD,GEOSEARCHSTORE:UD,geoSearchStore:UD,GET:hD,get:hD,GETBIT:wD,getBit:wD,GETDEL:dD,getDel:dD,GETEX:CD,getEx:CD,GETRANGE:GD,getRange:GD,GETSET:kD,getSet:kD,HDEL:iD,hDel:iD,HEXISTS:aD,hExists:aD,HEXPIRE:lD,hExpire:lD,HEXPIREAT:rO,hExpireAt:rO,HEXPIRETIME:tO,hExpireTime:tO,HGET:uO,hGet:uO,HGETALL:nO,hGetAll:nO,HINCRBY:eO,hIncrBy:eO,HINCRBYFLOAT:fO,hIncrByFloat:fO,HKEYS:oO,hKeys:oO,HLEN:mO,hLen:mO,HMGET:AO,hmGet:AO,HPERSIST:EO,hPersist:EO,HPEXPIRE:sO,hpExpire:sO,HPEXPIREAT:IO,hpExpireAt:IO,HPEXPIRETIME:_O,hpExpireTime:_O,HPTTL:NO,hpTTL:NO,HRANDFIELD_COUNT_WITHVALUES:YO,hRandFieldCountWithValues:YO,HRANDFIELD_COUNT:gO,hRandFieldCount:gO,HRANDFIELD:DO,hRandField:DO,HSCAN:OO,hScan:OO,HSCAN_NOVALUES:RO,hScanNoValues:RO,HSET:xO,hSet:xO,HSETNX:cO,hSetNX:cO,HSTRLEN:XO,hStrLen:XO,HTTL:jO,hTTL:jO,HVALS:KO,hVals:KO,INCR:SO,incr:SO,INCRBY:MO,incrBy:MO,INCRBYFLOAT:bO,incrByFloat:bO,LCS_IDX_WITHMATCHLEN:TO,lcsIdxWithMatchLen:TO,LCS_IDX:pO,lcsIdx:pO,LCS_LEN:qO,lcsLen:qO,LCS:yO,lcs:yO,LINDEX:vO,lIndex:vO,LINSERT:LO,lInsert:LO,LLEN:FO,lLen:FO,LMOVE:JO,lMove:JO,LMPOP:$O,lmPop:$O,LPOP_COUNT:zO,lPopCount:zO,LPOP:QO,lPop:QO,LPOS_COUNT:VO,lPosCount:VO,LPOS:WO,lPos:WO,LPUSH:ZO,lPush:ZO,LPUSHX:PO,lPushX:PO,LRANGE:HO,lRange:HO,LREM:BO,lRem:BO,LSET:UO,lSet:UO,LTRIM:hO,lTrim:hO,MGET:wO,mGet:wO,MIGRATE:dO,migrate:dO,MSET:CO,mSet:CO,MSETNX:GO,mSetNX:GO,OBJECT_ENCODING:kO,objectEncoding:kO,OBJECT_FREQ:iO,objectFreq:iO,OBJECT_IDLETIME:aO,objectIdleTime:aO,OBJECT_REFCOUNT:lO,objectRefCount:lO,PERSIST:rR,persist:rR,PEXPIRE:tR,pExpire:tR,PEXPIREAT:uR,pExpireAt:uR,PEXPIRETIME:nR,pExpireTime:nR,PFADD:eR,pfAdd:eR,PFCOUNT:fR,pfCount:fR,PFMERGE:oR,pfMerge:oR,PSETEX:mR,pSetEx:mR,PTTL:AR,pTTL:AR,PUBLISH:ER,publish:ER,RENAME:sR,rename:sR,RENAMENX:IR,renameNX:IR,RESTORE:_R,restore:_R,RPOP_COUNT:NR,rPopCount:NR,RPOP:YR,rPop:YR,RPOPLPUSH:gR,rPopLPush:gR,RPUSH:DR,rPush:DR,RPUSHX:OR,rPushX:OR,SADD:RR,sAdd:RR,SCARD:xR,sCard:xR,SDIFF:cR,sDiff:cR,SDIFFSTORE:XR,sDiffStore:XR,SINTER:TR,sInter:TR,SINTERCARD:pR,sInterCard:pR,SINTERSTORE:qR,sInterStore:qR,SET:jR,set:jR,SETBIT:KR,setBit:KR,SETEX:SR,setEx:SR,SETNX:MR,setNX:MR,SETRANGE:bR,setRange:bR,SISMEMBER:yR,sIsMember:yR,SMEMBERS:vR,sMembers:vR,SMISMEMBER:LR,smIsMember:LR,SMOVE:FR,sMove:FR,SORT_RO:JR,sortRo:JR,SORT_STORE:$R,sortStore:$R,SORT:zR,sort:zR,SPOP:QR,sPop:QR,SPUBLISH:VR,sPublish:VR,SRANDMEMBER_COUNT:WR,sRandMemberCount:WR,SRANDMEMBER:ZR,sRandMember:ZR,SREM:PR,sRem:PR,SSCAN:HR,sScan:HR,STRLEN:BR,strLen:BR,SUNION:UR,sUnion:UR,SUNIONSTORE:hR,sUnionStore:hR,TOUCH:wR,touch:wR,TTL:dR,ttl:dR,TYPE:CR,type:CR,UNLINK:GR,unlink:GR,WATCH:kR,watch:kR,XACK:iR,xAck:iR,XADD:aR,xAdd:aR,XAUTOCLAIM_JUSTID:lR,xAutoClaimJustId:lR,XAUTOCLAIM:rx,xAutoClaim:rx,XCLAIM:ux,xClaim:ux,XCLAIM_JUSTID:tx,xClaimJustId:tx,XDEL:nx,xDel:nx,XGROUP_CREATE:ex,xGroupCreate:ex,XGROUP_CREATECONSUMER:fx,xGroupCreateConsumer:fx,XGROUP_DELCONSUMER:ox,xGroupDelConsumer:ox,XGROUP_DESTROY:mx,xGroupDestroy:mx,XGROUP_SETID:Ax,xGroupSetId:Ax,XINFO_CONSUMERS:Ex,xInfoConsumers:Ex,XINFO_GROUPS:sx,xInfoGroups:sx,XINFO_STREAM:Ix,xInfoStream:Ix,XLEN:_x,xLen:_x,XPENDING_RANGE:Nx,xPendingRange:Nx,XPENDING:Yx,xPending:Yx,XRANGE:gx,xRange:gx,XREAD:Dx,xRead:Dx,XREADGROUP:Ox,xReadGroup:Ox,XREVRANGE:Rx,xRevRange:Rx,XSETID:xx,xSetId:xx,XTRIM:cx,xTrim:cx,ZADD:Xx,zAdd:Xx,ZCARD:jx,zCard:jx,ZCOUNT:Kx,zCount:Kx,ZDIFF_WITHSCORES:Sx,zDiffWithScores:Sx,ZDIFF:Mx,zDiff:Mx,ZDIFFSTORE:bx,zDiffStore:bx,ZINCRBY:Tx,zIncrBy:Tx,ZINTER_WITHSCORES:px,zInterWithScores:px,ZINTER:qx,zInter:qx,ZINTERCARD:yx,zInterCard:yx,ZINTERSTORE:vx,zInterStore:vx,ZLEXCOUNT:Lx,zLexCount:Lx,ZMPOP:Fx,zmPop:Fx,ZMSCORE:Jx,zmScore:Jx,ZPOPMAX_COUNT:$x,zPopMaxCount:$x,ZPOPMAX:zx,zPopMax:zx,ZPOPMIN_COUNT:Qx,zPopMinCount:Qx,ZPOPMIN:Vx,zPopMin:Vx,ZRANDMEMBER_COUNT_WITHSCORES:Wx,zRandMemberCountWithScores:Wx,ZRANDMEMBER_COUNT:Zx,zRandMemberCount:Zx,ZRANDMEMBER:Px,zRandMember:Px,ZRANGE_WITHSCORES:Hx,zRangeWithScores:Hx,ZRANGE:Bx,zRange:Bx,ZRANGEBYLEX:Ux,zRangeByLex:Ux,ZRANGEBYSCORE_WITHSCORES:hx,zRangeByScoreWithScores:hx,ZRANGEBYSCORE:wx,zRangeByScore:wx,ZRANGESTORE:dx,zRangeStore:dx,ZRANK:Cx,zRank:Cx,ZREM:Gx,zRem:Gx,ZREMRANGEBYLEX:kx,zRemRangeByLex:kx,ZREMRANGEBYRANK:ix,zRemRangeByRank:ix,ZREMRANGEBYSCORE:ax,zRemRangeByScore:ax,ZREVRANK:lx,zRevRank:lx,ZSCAN:r0,zScan:r0,ZSCORE:t0,zScore:t0,ZUNION_WITHSCORES:u0,zUnionWithScores:u0,ZUNION:n0,zUnion:n0,ZUNIONSTORE:e0,zUnionStore:e0}});var A0=f((o0)=>{Object.defineProperty(o0,"__esModule",{value:!0});o0.transformArguments=void 0;function gC(r){let t=["ACL","CAT"];if(r)t.push(r);return t}o0.transformArguments=gC});var I0=f((E0)=>{Object.defineProperty(E0,"__esModule",{value:!0});E0.transformArguments=void 0;var DC=m();function OC(r){return DC.pushVerdictArguments(["ACL","DELUSER"],r)}E0.transformArguments=OC});var Y0=f((_0)=>{Object.defineProperty(_0,"__esModule",{value:!0});_0.transformArguments=_0.IS_READ_ONLY=void 0;_0.IS_READ_ONLY=!0;function RC(r,t){return["ACL","DRYRUN",r,...t]}_0.transformArguments=RC});var O0=f((g0)=>{Object.defineProperty(g0,"__esModule",{value:!0});g0.transformArguments=void 0;function cC(r){let t=["ACL","GENPASS"];if(r)t.push(r.toString());return t}g0.transformArguments=cC});var c0=f((R0)=>{Object.defineProperty(R0,"__esModule",{value:!0});R0.transformReply=R0.transformArguments=void 0;function XC(r){return["ACL","GETUSER",r]}R0.transformArguments=XC;function jC(r){return{flags:r[1],passwords:r[3],commands:r[5],keys:r[7],channels:r[9],selectors:r[11]}}R0.transformReply=jC});var K0=f((X0)=>{Object.defineProperty(X0,"__esModule",{value:!0});X0.transformArguments=void 0;function SC(){return["ACL","LIST"]}X0.transformArguments=SC});var b0=f((S0)=>{Object.defineProperty(S0,"__esModule",{value:!0});S0.transformArguments=void 0;function MC(){return["ACL","LOAD"]}S0.transformArguments=MC});var q0=f((T0)=>{Object.defineProperty(T0,"__esModule",{value:!0});T0.transformArguments=void 0;function bC(){return["ACL","LOG","RESET"]}T0.transformArguments=bC});var L0=f((y0)=>{Object.defineProperty(y0,"__esModule",{value:!0});y0.transformReply=y0.transformArguments=void 0;function TC(r){let t=["ACL","LOG"];if(r)t.push(r.toString());return t}y0.transformArguments=TC;function pC(r){return r.map((t)=>({count:t[1],reason:t[3],context:t[5],object:t[7],username:t[9],ageSeconds:Number(t[11]),clientInfo:t[13]}))}y0.transformReply=pC});var $0=f((F0)=>{Object.defineProperty(F0,"__esModule",{value:!0});F0.transformArguments=void 0;function yC(){return["ACL","SAVE"]}F0.transformArguments=yC});var V0=f((z0)=>{Object.defineProperty(z0,"__esModule",{value:!0});z0.transformArguments=void 0;var vC=m();function LC(r,t){return vC.pushVerdictArguments(["ACL","SETUSER",r],t)}z0.transformArguments=LC});var P0=f((W0)=>{Object.defineProperty(W0,"__esModule",{value:!0});W0.transformArguments=void 0;function FC(){return["ACL","USERS"]}W0.transformArguments=FC});var U0=f((H0)=>{Object.defineProperty(H0,"__esModule",{value:!0});H0.transformArguments=void 0;function JC(){return["ACL","WHOAMI"]}H0.transformArguments=JC});var d0=f((h0)=>{Object.defineProperty(h0,"__esModule",{value:!0});h0.transformArguments=void 0;function $C(){return["ASKING"]}h0.transformArguments=$C});var k0=f((C0)=>{Object.defineProperty(C0,"__esModule",{value:!0});C0.transformArguments=void 0;function zC({username:r,password:t}){if(!r)return["AUTH",t];return["AUTH",r,t]}C0.transformArguments=zC});var l0=f((i0)=>{Object.defineProperty(i0,"__esModule",{value:!0});i0.transformArguments=void 0;function QC(){return["BGREWRITEAOF"]}i0.transformArguments=QC});var uc=f((rc)=>{Object.defineProperty(rc,"__esModule",{value:!0});rc.transformArguments=void 0;function VC(r){let t=["BGSAVE"];if(r?.SCHEDULE)t.push("SCHEDULE");return t}rc.transformArguments=VC});var fc=f((nc)=>{Object.defineProperty(nc,"__esModule",{value:!0});nc.transformArguments=void 0;function WC(r){return["CLIENT","CACHING",r?"YES":"NO"]}nc.transformArguments=WC});var Ac=f((oc)=>{Object.defineProperty(oc,"__esModule",{value:!0});oc.transformArguments=void 0;function ZC(){return["CLIENT","GETNAME"]}oc.transformArguments=ZC});var Ic=f((Ec)=>{Object.defineProperty(Ec,"__esModule",{value:!0});Ec.transformArguments=void 0;function PC(){return["CLIENT","GETREDIR"]}Ec.transformArguments=PC});var Yc=f((_c)=>{Object.defineProperty(_c,"__esModule",{value:!0});_c.transformArguments=_c.IS_READ_ONLY=void 0;_c.IS_READ_ONLY=!0;function HC(){return["CLIENT","ID"]}_c.transformArguments=HC});var Rc=f((Dc)=>{Object.defineProperty(Dc,"__esModule",{value:!0});Dc.transformArguments=Dc.ClientKillFilters=void 0;var fr;(function(r){r.ADDRESS="ADDR",r.LOCAL_ADDRESS="LADDR",r.ID="ID",r.TYPE="TYPE",r.USER="USER",r.SKIP_ME="SKIPME",r.MAXAGE="MAXAGE"})(fr||(Dc.ClientKillFilters=fr={}));function UC(r){let t=["CLIENT","KILL"];if(Array.isArray(r))for(let u of r)gc(t,u);else gc(t,r);return t}Dc.transformArguments=UC;function gc(r,t){if(t===fr.SKIP_ME){r.push("SKIPME");return}switch(r.push(t.filter),t.filter){case fr.ADDRESS:r.push(t.address);break;case fr.LOCAL_ADDRESS:r.push(t.localAddress);break;case fr.ID:r.push(typeof t.id==="number"?t.id.toString():t.id);break;case fr.TYPE:r.push(t.type);break;case fr.USER:r.push(t.username);break;case fr.SKIP_ME:r.push(t.skipMe?"yes":"no");break;case fr.MAXAGE:r.push(t.maxAge.toString());break}}});var fe=f((xc)=>{Object.defineProperty(xc,"__esModule",{value:!0});xc.transformReply=xc.transformArguments=xc.IS_READ_ONLY=void 0;xc.IS_READ_ONLY=!0;function wC(){return["CLIENT","INFO"]}xc.transformArguments=wC;var dC=/([^\s=]+)=([^\s]*)/g;function CC(r){let t={};for(let n of r.matchAll(dC))t[n[1]]=n[2];let u={id:Number(t.id),addr:t.addr,fd:Number(t.fd),name:t.name,age:Number(t.age),idle:Number(t.idle),flags:t.flags,db:Number(t.db),sub:Number(t.sub),psub:Number(t.psub),multi:Number(t.multi),qbuf:Number(t.qbuf),qbufFree:Number(t["qbuf-free"]),argvMem:Number(t["argv-mem"]),obl:Number(t.obl),oll:Number(t.oll),omem:Number(t.omem),totMem:Number(t["tot-mem"]),events:t.events,cmd:t.cmd,user:t.user,libName:t["lib-name"],libVer:t["lib-ver"]};if(t.laddr!==void 0)u.laddr=t.laddr;if(t.redir!==void 0)u.redir=Number(t.redir);if(t.ssub!==void 0)u.ssub=Number(t.ssub);if(t["multi-mem"]!==void 0)u.multiMem=Number(t["multi-mem"]);if(t.resp!==void 0)u.resp=Number(t.resp);return u}xc.transformReply=CC});var Kc=f((Xc)=>{Object.defineProperty(Xc,"__esModule",{value:!0});Xc.transformReply=Xc.transformArguments=Xc.IS_READ_ONLY=void 0;var iC=m(),aC=fe();Xc.IS_READ_ONLY=!0;function lC(r){let t=["CLIENT","LIST"];if(r)if(r.TYPE!==void 0)t.push("TYPE",r.TYPE);else t.push("ID"),t=iC.pushVerdictArguments(t,r.ID);return t}Xc.transformArguments=lC;function rG(r){let t=r.split(`
|
|
2
|
+
`),u=t.length-1,n=[];for(let e=0;e<u;e++)n.push(aC.transformReply(t[e]));return n}Xc.transformReply=rG});var bc=f((Sc)=>{Object.defineProperty(Sc,"__esModule",{value:!0});Sc.transformArguments=void 0;function nG(r){return["CLIENT","NO-EVICT",r?"ON":"OFF"]}Sc.transformArguments=nG});var qc=f((Tc)=>{Object.defineProperty(Tc,"__esModule",{value:!0});Tc.transformArguments=void 0;function eG(r){return["CLIENT","NO-TOUCH",r?"ON":"OFF"]}Tc.transformArguments=eG});var Lc=f((yc)=>{Object.defineProperty(yc,"__esModule",{value:!0});yc.transformArguments=void 0;function fG(r,t){let u=["CLIENT","PAUSE",r.toString()];if(t)u.push(t);return u}yc.transformArguments=fG});var $c=f((Fc)=>{Object.defineProperty(Fc,"__esModule",{value:!0});Fc.transformArguments=void 0;function oG(r){return["CLIENT","SETNAME",r]}Fc.transformArguments=oG});var Vc=f((zc)=>{Object.defineProperty(zc,"__esModule",{value:!0});zc.transformArguments=void 0;function mG(r,t){let u=["CLIENT","TRACKING",r?"ON":"OFF"];if(r){if(t?.REDIRECT)u.push("REDIRECT",t.REDIRECT.toString());if(AG(t)){if(u.push("BCAST"),t?.PREFIX)if(Array.isArray(t.PREFIX))for(let n of t.PREFIX)u.push("PREFIX",n);else u.push("PREFIX",t.PREFIX)}else if(EG(t))u.push("OPTIN");else if(sG(t))u.push("OPTOUT");if(t?.NOLOOP)u.push("NOLOOP")}return u}zc.transformArguments=mG;function AG(r){return r?.BCAST===!0}function EG(r){return r?.OPTIN===!0}function sG(r){return r?.OPTOUT===!0}});var Pc=f((Wc)=>{Object.defineProperty(Wc,"__esModule",{value:!0});Wc.transformReply=Wc.transformArguments=void 0;function IG(){return["CLIENT","TRACKINGINFO"]}Wc.transformArguments=IG;function _G(r){return{flags:new Set(r[1]),redirect:r[3],prefixes:r[5]}}Wc.transformReply=_G});var Uc=f((Hc)=>{Object.defineProperty(Hc,"__esModule",{value:!0});Hc.transformArguments=void 0;function YG(){return["CLIENT","UNPAUSE"]}Hc.transformArguments=YG});var dc=f((hc)=>{Object.defineProperty(hc,"__esModule",{value:!0});hc.transformArguments=void 0;var gG=m();function DG(r){return gG.pushVerdictNumberArguments(["CLUSTER","ADDSLOTS"],r)}hc.transformArguments=DG});var kc=f((Cc)=>{Object.defineProperty(Cc,"__esModule",{value:!0});Cc.transformArguments=void 0;var OG=m();function RG(r){return OG.pushSlotRangesArguments(["CLUSTER","ADDSLOTSRANGE"],r)}Cc.transformArguments=RG});var lc=f((ic)=>{Object.defineProperty(ic,"__esModule",{value:!0});ic.transformArguments=void 0;function xG(){return["CLUSTER","BUMPEPOCH"]}ic.transformArguments=xG});var uX=f((rX)=>{Object.defineProperty(rX,"__esModule",{value:!0});rX.transformArguments=void 0;function cG(r){return["CLUSTER","COUNT-FAILURE-REPORTS",r]}rX.transformArguments=cG});var fX=f((nX)=>{Object.defineProperty(nX,"__esModule",{value:!0});nX.transformArguments=void 0;function XG(r){return["CLUSTER","COUNTKEYSINSLOT",r.toString()]}nX.transformArguments=XG});var AX=f((oX)=>{Object.defineProperty(oX,"__esModule",{value:!0});oX.transformArguments=void 0;var jG=m();function KG(r){return jG.pushVerdictNumberArguments(["CLUSTER","DELSLOTS"],r)}oX.transformArguments=KG});var IX=f((EX)=>{Object.defineProperty(EX,"__esModule",{value:!0});EX.transformArguments=void 0;var SG=m();function MG(r){return SG.pushSlotRangesArguments(["CLUSTER","DELSLOTSRANGE"],r)}EX.transformArguments=MG});var gX=f((NX)=>{Object.defineProperty(NX,"__esModule",{value:!0});NX.transformArguments=NX.FailoverModes=void 0;var _X;(function(r){r.FORCE="FORCE",r.TAKEOVER="TAKEOVER"})(_X||(NX.FailoverModes=_X={}));function bG(r){let t=["CLUSTER","FAILOVER"];if(r)t.push(r);return t}NX.transformArguments=bG});var RX=f((DX)=>{Object.defineProperty(DX,"__esModule",{value:!0});DX.transformArguments=void 0;function pG(){return["CLUSTER","FLUSHSLOTS"]}DX.transformArguments=pG});var XX=f((xX)=>{Object.defineProperty(xX,"__esModule",{value:!0});xX.transformArguments=void 0;function qG(r){return["CLUSTER","FORGET",r]}xX.transformArguments=qG});var SX=f((jX)=>{Object.defineProperty(jX,"__esModule",{value:!0});jX.transformArguments=void 0;function yG(r,t){return["CLUSTER","GETKEYSINSLOT",r.toString(),t.toString()]}jX.transformArguments=yG});var TX=f((MX)=>{Object.defineProperty(MX,"__esModule",{value:!0});MX.extractLineValue=MX.transformReply=MX.transformArguments=void 0;function vG(){return["CLUSTER","INFO"]}MX.transformArguments=vG;function LG(r){let t=r.split(`\r
|
|
3
|
+
`);return{state:i(t[0]),slots:{assigned:Number(i(t[1])),ok:Number(i(t[2])),pfail:Number(i(t[3])),fail:Number(i(t[4]))},knownNodes:Number(i(t[5])),size:Number(i(t[6])),currentEpoch:Number(i(t[7])),myEpoch:Number(i(t[8])),stats:{messagesSent:Number(i(t[9])),messagesReceived:Number(i(t[10]))}}}MX.transformReply=LG;function i(r){return r.substring(r.indexOf(":")+1)}MX.extractLineValue=i});var yX=f((pX)=>{Object.defineProperty(pX,"__esModule",{value:!0});pX.transformArguments=void 0;function $G(r){return["CLUSTER","KEYSLOT",r]}pX.transformArguments=$G});var FX=f((vX)=>{Object.defineProperty(vX,"__esModule",{value:!0});vX.transformReply=vX.transformArguments=void 0;function zG(){return["CLUSTER","LINKS"]}vX.transformArguments=zG;function QG(r){return r.map((t)=>({direction:t[1],node:t[3],createTime:Number(t[5]),events:t[7],sendBufferAllocated:Number(t[9]),sendBufferUsed:Number(t[11])}))}vX.transformReply=QG});var zX=f((JX)=>{Object.defineProperty(JX,"__esModule",{value:!0});JX.transformArguments=void 0;function WG(r,t){return["CLUSTER","MEET",r,t.toString()]}JX.transformArguments=WG});var WX=f((QX)=>{Object.defineProperty(QX,"__esModule",{value:!0});QX.transformArguments=void 0;function ZG(){return["CLUSTER","MYID"]}QX.transformArguments=ZG});var HX=f((ZX)=>{Object.defineProperty(ZX,"__esModule",{value:!0});ZX.transformArguments=ZX.IS_READ_ONLY=void 0;ZX.IS_READ_ONLY=!0;function PG(){return["CLUSTER","MYSHARDID"]}ZX.transformArguments=PG});var oe=f((UX)=>{Object.defineProperty(UX,"__esModule",{value:!0});UX.transformReply=UX.RedisClusterNodeLinkStates=UX.transformArguments=void 0;function BG(){return["CLUSTER","NODES"]}UX.transformArguments=BG;var BX;(function(r){r.CONNECTED="connected",r.DISCONNECTED="disconnected"})(BX||(UX.RedisClusterNodeLinkStates=BX={}));function UG(r){let t=r.split(`
|
|
4
|
+
`);t.pop();let u=new Map,n=new Map;for(let e of t){let[o,A,s,I,O,rr,jr,F8,...J8]=e.split(" "),Nn={id:o,address:A,...hG(A),flags:s.split(","),pingSent:Number(O),pongRecv:Number(rr),configEpoch:Number(jr),linkState:F8};if(I==="-"){let $r=n.get(o);if(!$r)$r=[],n.set(o,$r);u.set(o,{...Nn,slots:J8.map(($8)=>{let[z8,lf]=$8.split("-",2),ro=Number(z8);return{from:ro,to:lf?Number(lf):ro}}),replicas:$r})}else{let $r=n.get(I);if(!$r)n.set(I,[Nn]);else $r.push(Nn)}}return[...u.values()]}UX.transformReply=UG;function hG(r){let t=r.lastIndexOf(":"),u=r.indexOf("@",t),n=r.substring(0,t);if(u===-1)return{host:n,port:Number(r.substring(t+1)),cport:null};return{host:r.substring(0,t),port:Number(r.substring(t+1,u)),cport:Number(r.substring(u+1))}}});var wX=f((me)=>{Object.defineProperty(me,"__esModule",{value:!0});me.transformReply=me.transformArguments=void 0;function CG(r){return["CLUSTER","REPLICAS",r]}me.transformArguments=CG;var GG=oe();Object.defineProperty(me,"transformReply",{enumerable:!0,get:function(){return GG.transformReply}})});var GX=f((dX)=>{Object.defineProperty(dX,"__esModule",{value:!0});dX.transformArguments=void 0;function aG(r){return["CLUSTER","REPLICATE",r]}dX.transformArguments=aG});var aX=f((kX)=>{Object.defineProperty(kX,"__esModule",{value:!0});kX.transformArguments=void 0;function lG(r){let t=["CLUSTER","RESET"];if(r)t.push(r);return t}kX.transformArguments=lG});var tj=f((lX)=>{Object.defineProperty(lX,"__esModule",{value:!0});lX.transformArguments=void 0;function rk(){return["CLUSTER","SAVECONFIG"]}lX.transformArguments=rk});var ej=f((uj)=>{Object.defineProperty(uj,"__esModule",{value:!0});uj.transformArguments=void 0;function tk(r){return["CLUSTER","SET-CONFIG-EPOCH",r.toString()]}uj.transformArguments=tk});var Aj=f((oj)=>{Object.defineProperty(oj,"__esModule",{value:!0});oj.transformArguments=oj.ClusterSlotStates=void 0;var fj;(function(r){r.IMPORTING="IMPORTING",r.MIGRATING="MIGRATING",r.STABLE="STABLE",r.NODE="NODE"})(fj||(oj.ClusterSlotStates=fj={}));function uk(r,t,u){let n=["CLUSTER","SETSLOT",r.toString(),t];if(u)n.push(u);return n}oj.transformArguments=uk});var _j=f((sj)=>{Object.defineProperty(sj,"__esModule",{value:!0});sj.transformReply=sj.transformArguments=void 0;function ek(){return["CLUSTER","SLOTS"]}sj.transformArguments=ek;function fk(r){return r.map(([t,u,n,...e])=>{return{from:t,to:u,master:Ej(n),replicas:e.map(Ej)}})}sj.transformReply=fk;function Ej([r,t,u]){return{ip:r,port:t,id:u}}});var gj=f((Nj)=>{Object.defineProperty(Nj,"__esModule",{value:!0});Nj.transformArguments=Nj.IS_READ_ONLY=void 0;Nj.IS_READ_ONLY=!0;function mk(){return["COMMAND","COUNT"]}Nj.transformArguments=mk});var Rj=f((Dj)=>{Object.defineProperty(Dj,"__esModule",{value:!0});Dj.transformArguments=Dj.IS_READ_ONLY=void 0;Dj.IS_READ_ONLY=!0;function Ek(r){return["COMMAND","GETKEYS",...r]}Dj.transformArguments=Ek});var Xj=f((xj)=>{Object.defineProperty(xj,"__esModule",{value:!0});xj.transformReply=xj.transformArguments=xj.IS_READ_ONLY=void 0;xj.IS_READ_ONLY=!0;function Ik(r){return["COMMAND","GETKEYSANDFLAGS",...r]}xj.transformArguments=Ik;function _k(r){return r.map(([t,u])=>({key:t,flags:u}))}xj.transformReply=_k});var Sj=f((jj)=>{Object.defineProperty(jj,"__esModule",{value:!0});jj.transformReply=jj.transformArguments=jj.IS_READ_ONLY=void 0;var gk=m();jj.IS_READ_ONLY=!0;function Dk(r){return["COMMAND","INFO",...r]}jj.transformArguments=Dk;function Ok(r){return r.map((t)=>t?gk.transformCommandReply(t):null)}jj.transformReply=Ok});var pj=f((bj)=>{Object.defineProperty(bj,"__esModule",{value:!0});bj.transformArguments=bj.FilterBy=bj.IS_READ_ONLY=void 0;bj.IS_READ_ONLY=!0;var Mj;(function(r){r.MODULE="MODULE",r.ACLCAT="ACLCAT",r.PATTERN="PATTERN"})(Mj||(bj.FilterBy=Mj={}));function ck(r){let t=["COMMAND","LIST"];if(r)t.push("FILTERBY",r.filterBy,r.value);return t}bj.transformArguments=ck});var vj=f((qj)=>{Object.defineProperty(qj,"__esModule",{value:!0});qj.transformReply=qj.transformArguments=qj.IS_READ_ONLY=void 0;var Kk=m();qj.IS_READ_ONLY=!0;function Sk(){return["COMMAND"]}qj.transformArguments=Sk;function Mk(r){return r.map(Kk.transformCommandReply)}qj.transformReply=Mk});var Lj=f((Ae)=>{Object.defineProperty(Ae,"__esModule",{value:!0});Ae.transformReply=Ae.transformArguments=void 0;function pk(r){return["CONFIG","GET",r]}Ae.transformArguments=pk;var qk=m();Object.defineProperty(Ae,"transformReply",{enumerable:!0,get:function(){return qk.transformTuplesReply}})});var $j=f((Fj)=>{Object.defineProperty(Fj,"__esModule",{value:!0});Fj.transformArguments=void 0;function Lk(){return["CONFIG","RESETSTAT"]}Fj.transformArguments=Lk});var Vj=f((zj)=>{Object.defineProperty(zj,"__esModule",{value:!0});zj.transformArguments=void 0;function Fk(){return["CONFIG","REWRITE"]}zj.transformArguments=Fk});var Pj=f((Wj)=>{Object.defineProperty(Wj,"__esModule",{value:!0});Wj.transformArguments=void 0;function Jk(...[r,t]){let u=["CONFIG","SET"];if(typeof r==="string")u.push(r,t);else for(let[n,e]of Object.entries(r))u.push(n,e);return u}Wj.transformArguments=Jk});var Uj=f((Hj)=>{Object.defineProperty(Hj,"__esModule",{value:!0});Hj.transformArguments=Hj.IS_READ_ONLY=void 0;Hj.IS_READ_ONLY=!0;function $k(){return["DBSIZE"]}Hj.transformArguments=$k});var dj=f((hj)=>{Object.defineProperty(hj,"__esModule",{value:!0});hj.transformArguments=void 0;function Qk(){return["DISCARD"]}hj.transformArguments=Qk});var kj=f((Cj)=>{Object.defineProperty(Cj,"__esModule",{value:!0});Cj.transformArguments=Cj.IS_READ_ONLY=void 0;Cj.IS_READ_ONLY=!0;function Vk(r){return["ECHO",r]}Cj.transformArguments=Vk});var lj=f((ij)=>{Object.defineProperty(ij,"__esModule",{value:!0});ij.transformArguments=void 0;function Zk(r){let t=["FAILOVER"];if(r?.TO){if(t.push("TO",r.TO.host,r.TO.port.toString()),r.TO.FORCE)t.push("FORCE")}if(r?.ABORT)t.push("ABORT");if(r?.TIMEOUT)t.push("TIMEOUT",r.TIMEOUT.toString());return t}ij.transformArguments=Zk});var Ee=f((tK)=>{Object.defineProperty(tK,"__esModule",{value:!0});tK.transformArguments=tK.RedisFlushModes=void 0;var rK;(function(r){r.ASYNC="ASYNC",r.SYNC="SYNC"})(rK||(tK.RedisFlushModes=rK={}));function Pk(r){let t=["FLUSHALL"];if(r)t.push(r);return t}tK.transformArguments=Pk});var fK=f((nK)=>{Object.defineProperty(nK,"__esModule",{value:!0});nK.transformArguments=void 0;function Bk(r){let t=["FLUSHDB"];if(r)t.push(r);return t}nK.transformArguments=Bk});var AK=f((oK)=>{Object.defineProperty(oK,"__esModule",{value:!0});oK.transformArguments=void 0;function Uk(r){return["FUNCTION","DELETE",r]}oK.transformArguments=Uk});var IK=f((EK)=>{Object.defineProperty(EK,"__esModule",{value:!0});EK.transformArguments=void 0;function hk(){return["FUNCTION","DUMP"]}EK.transformArguments=hk});var YK=f((_K)=>{Object.defineProperty(_K,"__esModule",{value:!0});_K.transformArguments=void 0;function wk(r){let t=["FUNCTION","FLUSH"];if(r)t.push(r);return t}_K.transformArguments=wk});var OK=f((gK)=>{Object.defineProperty(gK,"__esModule",{value:!0});gK.transformArguments=void 0;function dk(){return["FUNCTION","KILL"]}gK.transformArguments=dk});var se=f((RK)=>{Object.defineProperty(RK,"__esModule",{value:!0});RK.transformReply=RK.transformArguments=void 0;var Ck=m();function Gk(r){let t=["FUNCTION","LIST"];if(r)t.push(r);return t}RK.transformArguments=Gk;function kk(r){return r.map(Ck.transformFunctionListItemReply)}RK.transformReply=kk});var jK=f((cK)=>{Object.defineProperty(cK,"__esModule",{value:!0});cK.transformReply=cK.transformArguments=void 0;var ak=se(),lk=m();function ri(r){let t=ak.transformArguments(r);return t.push("WITHCODE"),t}cK.transformArguments=ri;function ti(r){return r.map((t)=>({...lk.transformFunctionListItemReply(t),libraryCode:t[7]}))}cK.transformReply=ti});var MK=f((KK)=>{Object.defineProperty(KK,"__esModule",{value:!0});KK.transformArguments=void 0;function ni(r,t){let u=["FUNCTION","LOAD"];if(t?.REPLACE)u.push("REPLACE");return u.push(r),u}KK.transformArguments=ni});var pK=f((bK)=>{Object.defineProperty(bK,"__esModule",{value:!0});bK.transformArguments=void 0;function ei(r,t){let u=["FUNCTION","RESTORE",r];if(t)u.push(t);return u}bK.transformArguments=ei});var vK=f((qK)=>{Object.defineProperty(qK,"__esModule",{value:!0});qK.transformReply=qK.transformArguments=void 0;function fi(){return["FUNCTION","STATS"]}qK.transformArguments=fi;function oi(r){let t=Object.create(null);for(let u=0;u<r[3].length;u++)t[r[3][u]]={librariesCount:r[3][++u][1],functionsCount:r[3][u][3]};return{runningScript:r[1]===null?null:{name:r[1][1],command:r[1][3],durationMs:r[1][5]},engines:t}}qK.transformReply=oi});var JK=f((LK)=>{Object.defineProperty(LK,"__esModule",{value:!0});LK.transformReply=LK.transformArguments=void 0;function Ai(r){let t=["HELLO"];if(r){if(t.push(r.protover.toString()),r.auth)t.push("AUTH",r.auth.username,r.auth.password);if(r.clientName)t.push("SETNAME",r.clientName)}return t}LK.transformArguments=Ai;function Ei(r){return{server:r[1],version:r[3],proto:r[5],id:r[7],mode:r[9],role:r[11],modules:r[13]}}LK.transformReply=Ei});var QK=f(($K)=>{Object.defineProperty($K,"__esModule",{value:!0});$K.transformArguments=$K.IS_READ_ONLY=void 0;$K.IS_READ_ONLY=!0;function Ii(r){let t=["INFO"];if(r)t.push(r);return t}$K.transformArguments=Ii});var ZK=f((VK)=>{Object.defineProperty(VK,"__esModule",{value:!0});VK.transformArguments=void 0;function Ni(r){return["KEYS",r]}VK.transformArguments=Ni});var BK=f((PK)=>{Object.defineProperty(PK,"__esModule",{value:!0});PK.transformReply=PK.transformArguments=PK.IS_READ_ONLY=void 0;PK.IS_READ_ONLY=!0;function Yi(){return["LASTSAVE"]}PK.transformArguments=Yi;function gi(r){return new Date(r)}PK.transformReply=gi});var wK=f((UK)=>{Object.defineProperty(UK,"__esModule",{value:!0});UK.transformArguments=void 0;function Ri(){return["LATENCY","DOCTOR"]}UK.transformArguments=Ri});var GK=f((dK)=>{Object.defineProperty(dK,"__esModule",{value:!0});dK.transformArguments=void 0;function xi(r){return["LATENCY","GRAPH",r]}dK.transformArguments=xi});var aK=f((kK)=>{Object.defineProperty(kK,"__esModule",{value:!0});kK.transformArguments=void 0;function ci(r){return["LATENCY","HISTORY",r]}kK.transformArguments=ci});var tS=f((lK)=>{Object.defineProperty(lK,"__esModule",{value:!0});lK.transformArguments=void 0;function Xi(){return["LATENCY","LATEST"]}lK.transformArguments=Xi});var eS=f((uS)=>{Object.defineProperty(uS,"__esModule",{value:!0});uS.transformArguments=uS.IS_READ_ONLY=void 0;uS.IS_READ_ONLY=!0;function ji(r,...t){let u=["LOLWUT"];if(r)u.push("VERSION",r.toString(),...t.map(String));return u}uS.transformArguments=ji});var mS=f((fS)=>{Object.defineProperty(fS,"__esModule",{value:!0});fS.transformArguments=void 0;function Si(){return["MEMORY","DOCTOR"]}fS.transformArguments=Si});var sS=f((AS)=>{Object.defineProperty(AS,"__esModule",{value:!0});AS.transformArguments=void 0;function Mi(){return["MEMORY","MALLOC-STATS"]}AS.transformArguments=Mi});var NS=f((IS)=>{Object.defineProperty(IS,"__esModule",{value:!0});IS.transformArguments=void 0;function bi(){return["MEMORY","PURGE"]}IS.transformArguments=bi});var DS=f((YS)=>{Object.defineProperty(YS,"__esModule",{value:!0});YS.transformReply=YS.transformArguments=void 0;function Ti(){return["MEMORY","STATS"]}YS.transformArguments=Ti;var pi={"peak.allocated":"peakAllocated","total.allocated":"totalAllocated","startup.allocated":"startupAllocated","replication.backlog":"replicationBacklog","clients.slaves":"clientsReplicas","clients.normal":"clientsNormal","aof.buffer":"aofBuffer","lua.caches":"luaCaches","overhead.total":"overheadTotal","keys.count":"keysCount","keys.bytes-per-key":"keysBytesPerKey","dataset.bytes":"datasetBytes","dataset.percentage":"datasetPercentage","peak.percentage":"peakPercentage","allocator.allocated":"allocatorAllocated","allocator.active":"allocatorActive","allocator.resident":"allocatorResident","allocator-fragmentation.ratio":"allocatorFragmentationRatio","allocator-fragmentation.bytes":"allocatorFragmentationBytes","allocator-rss.ratio":"allocatorRssRatio","allocator-rss.bytes":"allocatorRssBytes","rss-overhead.ratio":"rssOverheadRatio","rss-overhead.bytes":"rssOverheadBytes",fragmentation:"fragmentation","fragmentation.bytes":"fragmentationBytes"},qi={"overhead.hashtable.main":"overheadHashtableMain","overhead.hashtable.expires":"overheadHashtableExpires"};function yi(r){let t={db:{}};for(let u=0;u<r.length;u+=2){let n=r[u];if(n.startsWith("db.")){let e=r[u+1],o={};for(let A=0;A<e.length;A+=2)o[qi[e[A]]]=e[A+1];t.db[n.substring(3)]=o;continue}t[pi[n]]=Number(r[u+1])}return t}YS.transformReply=yi});var xS=f((OS)=>{Object.defineProperty(OS,"__esModule",{value:!0});OS.transformArguments=OS.IS_READ_ONLY=OS.FIRST_KEY_INDEX=void 0;OS.FIRST_KEY_INDEX=1;OS.IS_READ_ONLY=!0;function Li(r,t){let u=["MEMORY","USAGE",r];if(t?.SAMPLES)u.push("SAMPLES",t.SAMPLES.toString());return u}OS.transformArguments=Li});var jS=f((cS)=>{Object.defineProperty(cS,"__esModule",{value:!0});cS.transformArguments=void 0;function $i(){return["MODULE","LIST"]}cS.transformArguments=$i});var MS=f((KS)=>{Object.defineProperty(KS,"__esModule",{value:!0});KS.transformArguments=void 0;function zi(r,t){let u=["MODULE","LOAD",r];if(t)u.push(...t);return u}KS.transformArguments=zi});var pS=f((bS)=>{Object.defineProperty(bS,"__esModule",{value:!0});bS.transformArguments=void 0;function Qi(r){return["MODULE","UNLOAD",r]}bS.transformArguments=Qi});var qS=f((Ie)=>{Object.defineProperty(Ie,"__esModule",{value:!0});Ie.transformReply=Ie.transformArguments=Ie.FIRST_KEY_INDEX=void 0;Ie.FIRST_KEY_INDEX=1;function Vi(r,t){return["MOVE",r,t.toString()]}Ie.transformArguments=Vi;var Wi=m();Object.defineProperty(Ie,"transformReply",{enumerable:!0,get:function(){return Wi.transformBooleanReply}})});var LS=f((yS)=>{Object.defineProperty(yS,"__esModule",{value:!0});yS.transformArguments=void 0;function Bi(r){let t=["PING"];if(r)t.push(r);return t}yS.transformArguments=Bi});var $S=f((FS)=>{Object.defineProperty(FS,"__esModule",{value:!0});FS.transformArguments=FS.IS_READ_ONLY=void 0;FS.IS_READ_ONLY=!0;function Ui(r){let t=["PUBSUB","CHANNELS"];if(r)t.push(r);return t}FS.transformArguments=Ui});var VS=f((zS)=>{Object.defineProperty(zS,"__esModule",{value:!0});zS.transformArguments=zS.IS_READ_ONLY=void 0;zS.IS_READ_ONLY=!0;function wi(){return["PUBSUB","NUMPAT"]}zS.transformArguments=wi});var PS=f((WS)=>{Object.defineProperty(WS,"__esModule",{value:!0});WS.transformReply=WS.transformArguments=WS.IS_READ_ONLY=void 0;var Ci=m();WS.IS_READ_ONLY=!0;function Gi(r){let t=["PUBSUB","NUMSUB"];if(r)return Ci.pushVerdictArguments(t,r);return t}WS.transformArguments=Gi;function ki(r){let t=Object.create(null);for(let u=0;u<r.length;u+=2)t[r[u]]=r[u+1];return t}WS.transformReply=ki});var US=f((HS)=>{Object.defineProperty(HS,"__esModule",{value:!0});HS.transformArguments=HS.IS_READ_ONLY=void 0;HS.IS_READ_ONLY=!0;function li(r){let t=["PUBSUB","SHARDCHANNELS"];if(r)t.push(r);return t}HS.transformArguments=li});var dS=f((hS)=>{Object.defineProperty(hS,"__esModule",{value:!0});hS.transformReply=hS.transformArguments=hS.IS_READ_ONLY=void 0;var ta=m();hS.IS_READ_ONLY=!0;function ua(r){let t=["PUBSUB","SHARDNUMSUB"];if(r)return ta.pushVerdictArguments(t,r);return t}hS.transformArguments=ua;function na(r){let t=Object.create(null);for(let u=0;u<r.length;u+=2)t[r[u]]=r[u+1];return t}hS.transformReply=na});var kS=f((CS)=>{Object.defineProperty(CS,"__esModule",{value:!0});CS.transformArguments=CS.IS_READ_ONLY=void 0;CS.IS_READ_ONLY=!0;function oa(){return["RANDOMKEY"]}CS.transformArguments=oa});var lS=f((iS)=>{Object.defineProperty(iS,"__esModule",{value:!0});iS.transformArguments=void 0;function Aa(){return["READONLY"]}iS.transformArguments=Aa});var uM=f((rM)=>{Object.defineProperty(rM,"__esModule",{value:!0});rM.transformArguments=void 0;function Ea(){return["READWRITE"]}rM.transformArguments=Ea});var fM=f((nM)=>{Object.defineProperty(nM,"__esModule",{value:!0});nM.transformArguments=void 0;function sa(r,t){return["REPLICAOF",r,t.toString()]}nM.transformArguments=sa});var AM=f((oM)=>{Object.defineProperty(oM,"__esModule",{value:!0});oM.transformArguments=void 0;function Ia(){return["RESTORE-ASKING"]}oM.transformArguments=Ia});var IM=f((EM)=>{Object.defineProperty(EM,"__esModule",{value:!0});EM.transformReply=EM.transformArguments=EM.IS_READ_ONLY=void 0;EM.IS_READ_ONLY=!0;function _a(){return["ROLE"]}EM.transformArguments=_a;function Na(r){switch(r[0]){case"master":return{role:"master",replicationOffest:r[1],replicas:r[2].map(([t,u,n])=>({ip:t,port:Number(u),replicationOffest:Number(n)}))};case"slave":return{role:"slave",master:{ip:r[1],port:r[2]},state:r[3],dataReceived:r[4]};case"sentinel":return{role:"sentinel",masterNames:r[1]}}}EM.transformReply=Na});var YM=f((_M)=>{Object.defineProperty(_M,"__esModule",{value:!0});_M.transformArguments=void 0;function Da(){return["SAVE"]}_M.transformArguments=Da});var OM=f((gM)=>{Object.defineProperty(gM,"__esModule",{value:!0});gM.transformReply=gM.transformArguments=gM.IS_READ_ONLY=void 0;var Oa=m();gM.IS_READ_ONLY=!0;function Ra(r,t){let u=Oa.pushScanArguments(["SCAN"],r,t);if(t?.TYPE)u.push("TYPE",t.TYPE);return u}gM.transformArguments=Ra;function xa([r,t]){return{cursor:Number(r),keys:t}}gM.transformReply=xa});var cM=f((RM)=>{Object.defineProperty(RM,"__esModule",{value:!0});RM.transformArguments=void 0;function ja(r){return["SCRIPT","DEBUG",r]}RM.transformArguments=ja});var XM=f((_e)=>{Object.defineProperty(_e,"__esModule",{value:!0});_e.transformReply=_e.transformArguments=void 0;var Ka=m();function Sa(r){return Ka.pushVerdictArguments(["SCRIPT","EXISTS"],r)}_e.transformArguments=Sa;var Ma=m();Object.defineProperty(_e,"transformReply",{enumerable:!0,get:function(){return Ma.transformBooleanArrayReply}})});var SM=f((jM)=>{Object.defineProperty(jM,"__esModule",{value:!0});jM.transformArguments=void 0;function pa(r){let t=["SCRIPT","FLUSH"];if(r)t.push(r);return t}jM.transformArguments=pa});var TM=f((MM)=>{Object.defineProperty(MM,"__esModule",{value:!0});MM.transformArguments=void 0;function qa(){return["SCRIPT","KILL"]}MM.transformArguments=qa});var yM=f((pM)=>{Object.defineProperty(pM,"__esModule",{value:!0});pM.transformArguments=void 0;function ya(r){return["SCRIPT","LOAD",r]}pM.transformArguments=ya});var FM=f((vM)=>{Object.defineProperty(vM,"__esModule",{value:!0});vM.transformArguments=void 0;function va(r){let t=["SHUTDOWN"];if(r)t.push(r);return t}vM.transformArguments=va});var zM=f((JM)=>{Object.defineProperty(JM,"__esModule",{value:!0});JM.transformArguments=void 0;function La(r,t){return["SWAPDB",r.toString(),t.toString()]}JM.transformArguments=La});var WM=f((QM)=>{Object.defineProperty(QM,"__esModule",{value:!0});QM.transformReply=QM.transformArguments=void 0;function Fa(){return["TIME"]}QM.transformArguments=Fa;function Ja(r){let t=Number(r[0]),u=Number(r[1]),n=new Date(t*1000+u/1000);return n.microseconds=u,n}QM.transformReply=Ja});var HM=f((ZM)=>{Object.defineProperty(ZM,"__esModule",{value:!0});ZM.transformArguments=void 0;function za(){return["UNWATCH"]}ZM.transformArguments=za});var hM=f((BM)=>{Object.defineProperty(BM,"__esModule",{value:!0});BM.transformArguments=BM.FIRST_KEY_INDEX=void 0;BM.FIRST_KEY_INDEX=1;function Qa(r,t){return["WAIT",r.toString(),t.toString()]}BM.transformArguments=Qa});var Ne=f((mp)=>{Object.defineProperty(mp,"__esModule",{value:!0});var Wa=Ju(),wM=A0(),dM=I0(),CM=Y0(),GM=O0(),kM=c0(),iM=K0(),aM=b0(),lM=q0(),rb=L0(),tb=$0(),ub=V0(),nb=P0(),eb=U0(),fb=d0(),ob=k0(),mb=l0(),Ab=uc(),Eb=fc(),sb=Ac(),Ib=Ic(),_b=Yc(),Nb=Rc(),Yb=Kc(),gb=bc(),Db=qc(),Ob=Lc(),Rb=$c(),xb=Vc(),cb=Pc(),Xb=Uc(),jb=fe(),Kb=dc(),Sb=kc(),Mb=lc(),bb=uX(),Tb=fX(),pb=AX(),qb=IX(),yb=gX(),vb=RX(),Lb=XX(),Fb=SX(),Jb=TX(),$b=yX(),zb=FX(),Qb=zX(),Vb=WX(),Wb=HX(),Zb=oe(),Pb=wX(),Hb=GX(),Bb=aX(),Ub=tj(),hb=ej(),wb=Aj(),db=_j(),Cb=gj(),Gb=Rj(),kb=Xj(),ib=Sj(),ab=pj(),lb=vj(),rT=Lj(),tT=$j(),uT=Vj(),nT=Pj(),eT=Uj(),fT=dj(),oT=kj(),mT=lj(),AT=Ee(),ET=fK(),sT=AK(),IT=IK(),_T=YK(),NT=OK(),YT=jK(),gT=se(),DT=MK(),OT=pK(),RT=vK(),xT=JK(),cT=QK(),XT=ZK(),jT=BK(),KT=wK(),ST=GK(),MT=aK(),bT=tS(),TT=eS(),pT=mS(),qT=sS(),yT=NS(),vT=DS(),LT=xS(),FT=jS(),JT=MS(),$T=pS(),zT=qS(),QT=LS(),VT=$S(),WT=VS(),ZT=PS(),PT=US(),HT=dS(),BT=kS(),UT=lS(),hT=uM(),wT=fM(),dT=AM(),CT=IM(),GT=YM(),kT=OM(),iT=cM(),aT=XM(),lT=SM(),rp=TM(),tp=yM(),up=FM(),np=zM(),ep=WM(),fp=HM(),op=hM();mp.default={...Wa.default,ACL_CAT:wM,aclCat:wM,ACL_DELUSER:dM,aclDelUser:dM,ACL_DRYRUN:CM,aclDryRun:CM,ACL_GENPASS:GM,aclGenPass:GM,ACL_GETUSER:kM,aclGetUser:kM,ACL_LIST:iM,aclList:iM,ACL_LOAD:aM,aclLoad:aM,ACL_LOG_RESET:lM,aclLogReset:lM,ACL_LOG:rb,aclLog:rb,ACL_SAVE:tb,aclSave:tb,ACL_SETUSER:ub,aclSetUser:ub,ACL_USERS:nb,aclUsers:nb,ACL_WHOAMI:eb,aclWhoAmI:eb,ASKING:fb,asking:fb,AUTH:ob,auth:ob,BGREWRITEAOF:mb,bgRewriteAof:mb,BGSAVE:Ab,bgSave:Ab,CLIENT_CACHING:Eb,clientCaching:Eb,CLIENT_GETNAME:sb,clientGetName:sb,CLIENT_GETREDIR:Ib,clientGetRedir:Ib,CLIENT_ID:_b,clientId:_b,CLIENT_KILL:Nb,clientKill:Nb,"CLIENT_NO-EVICT":gb,clientNoEvict:gb,"CLIENT_NO-TOUCH":Db,clientNoTouch:Db,CLIENT_LIST:Yb,clientList:Yb,CLIENT_PAUSE:Ob,clientPause:Ob,CLIENT_SETNAME:Rb,clientSetName:Rb,CLIENT_TRACKING:xb,clientTracking:xb,CLIENT_TRACKINGINFO:cb,clientTrackingInfo:cb,CLIENT_UNPAUSE:Xb,clientUnpause:Xb,CLIENT_INFO:jb,clientInfo:jb,CLUSTER_ADDSLOTS:Kb,clusterAddSlots:Kb,CLUSTER_ADDSLOTSRANGE:Sb,clusterAddSlotsRange:Sb,CLUSTER_BUMPEPOCH:Mb,clusterBumpEpoch:Mb,CLUSTER_COUNT_FAILURE_REPORTS:bb,clusterCountFailureReports:bb,CLUSTER_COUNTKEYSINSLOT:Tb,clusterCountKeysInSlot:Tb,CLUSTER_DELSLOTS:pb,clusterDelSlots:pb,CLUSTER_DELSLOTSRANGE:qb,clusterDelSlotsRange:qb,CLUSTER_FAILOVER:yb,clusterFailover:yb,CLUSTER_FLUSHSLOTS:vb,clusterFlushSlots:vb,CLUSTER_FORGET:Lb,clusterForget:Lb,CLUSTER_GETKEYSINSLOT:Fb,clusterGetKeysInSlot:Fb,CLUSTER_INFO:Jb,clusterInfo:Jb,CLUSTER_KEYSLOT:$b,clusterKeySlot:$b,CLUSTER_LINKS:zb,clusterLinks:zb,CLUSTER_MEET:Qb,clusterMeet:Qb,CLUSTER_MYID:Vb,clusterMyId:Vb,CLUSTER_MYSHARDID:Wb,clusterMyShardId:Wb,CLUSTER_NODES:Zb,clusterNodes:Zb,CLUSTER_REPLICAS:Pb,clusterReplicas:Pb,CLUSTER_REPLICATE:Hb,clusterReplicate:Hb,CLUSTER_RESET:Bb,clusterReset:Bb,CLUSTER_SAVECONFIG:Ub,clusterSaveConfig:Ub,CLUSTER_SET_CONFIG_EPOCH:hb,clusterSetConfigEpoch:hb,CLUSTER_SETSLOT:wb,clusterSetSlot:wb,CLUSTER_SLOTS:db,clusterSlots:db,COMMAND_COUNT:Cb,commandCount:Cb,COMMAND_GETKEYS:Gb,commandGetKeys:Gb,COMMAND_GETKEYSANDFLAGS:kb,commandGetKeysAndFlags:kb,COMMAND_INFO:ib,commandInfo:ib,COMMAND_LIST:ab,commandList:ab,COMMAND:lb,command:lb,CONFIG_GET:rT,configGet:rT,CONFIG_RESETASTAT:tT,configResetStat:tT,CONFIG_REWRITE:uT,configRewrite:uT,CONFIG_SET:nT,configSet:nT,DBSIZE:eT,dbSize:eT,DISCARD:fT,discard:fT,ECHO:oT,echo:oT,FAILOVER:mT,failover:mT,FLUSHALL:AT,flushAll:AT,FLUSHDB:ET,flushDb:ET,FUNCTION_DELETE:sT,functionDelete:sT,FUNCTION_DUMP:IT,functionDump:IT,FUNCTION_FLUSH:_T,functionFlush:_T,FUNCTION_KILL:NT,functionKill:NT,FUNCTION_LIST_WITHCODE:YT,functionListWithCode:YT,FUNCTION_LIST:gT,functionList:gT,FUNCTION_LOAD:DT,functionLoad:DT,FUNCTION_RESTORE:OT,functionRestore:OT,FUNCTION_STATS:RT,functionStats:RT,HELLO:xT,hello:xT,INFO:cT,info:cT,KEYS:XT,keys:XT,LASTSAVE:jT,lastSave:jT,LATENCY_DOCTOR:KT,latencyDoctor:KT,LATENCY_GRAPH:ST,latencyGraph:ST,LATENCY_HISTORY:MT,latencyHistory:MT,LATENCY_LATEST:bT,latencyLatest:bT,LOLWUT:TT,lolwut:TT,MEMORY_DOCTOR:pT,memoryDoctor:pT,"MEMORY_MALLOC-STATS":qT,memoryMallocStats:qT,MEMORY_PURGE:yT,memoryPurge:yT,MEMORY_STATS:vT,memoryStats:vT,MEMORY_USAGE:LT,memoryUsage:LT,MODULE_LIST:FT,moduleList:FT,MODULE_LOAD:JT,moduleLoad:JT,MODULE_UNLOAD:$T,moduleUnload:$T,MOVE:zT,move:zT,PING:QT,ping:QT,PUBSUB_CHANNELS:VT,pubSubChannels:VT,PUBSUB_NUMPAT:WT,pubSubNumPat:WT,PUBSUB_NUMSUB:ZT,pubSubNumSub:ZT,PUBSUB_SHARDCHANNELS:PT,pubSubShardChannels:PT,PUBSUB_SHARDNUMSUB:HT,pubSubShardNumSub:HT,RANDOMKEY:BT,randomKey:BT,READONLY:UT,readonly:UT,READWRITE:hT,readwrite:hT,REPLICAOF:wT,replicaOf:wT,"RESTORE-ASKING":dT,restoreAsking:dT,ROLE:CT,role:CT,SAVE:GT,save:GT,SCAN:kT,scan:kT,SCRIPT_DEBUG:iT,scriptDebug:iT,SCRIPT_EXISTS:aT,scriptExists:aT,SCRIPT_FLUSH:lT,scriptFlush:lT,SCRIPT_KILL:rp,scriptKill:rp,SCRIPT_LOAD:tp,scriptLoad:tp,SHUTDOWN:up,shutdown:up,SWAPDB:np,swapDb:np,TIME:ep,time:ep,UNWATCH:fp,unwatch:fp,WAIT:op,wait:op}});var gr=f((Rp)=>{Object.defineProperty(Rp,"__esModule",{value:!0});Rp.MultiErrorReply=Rp.ErrorReply=Rp.ReconnectStrategyError=Rp.RootNodesUnavailableError=Rp.SocketClosedUnexpectedlyError=Rp.DisconnectsClientError=Rp.ClientOfflineError=Rp.ClientClosedError=Rp.ConnectionTimeoutError=Rp.WatchError=Rp.AbortError=void 0;class Ap extends Error{constructor(){super("The command was aborted")}}Rp.AbortError=Ap;class Ep extends Error{constructor(){super("One (or more) of the watched keys has been changed")}}Rp.WatchError=Ep;class sp extends Error{constructor(){super("Connection timeout")}}Rp.ConnectionTimeoutError=sp;class Ip extends Error{constructor(){super("The client is closed")}}Rp.ClientClosedError=Ip;class _p extends Error{constructor(){super("The client is offline")}}Rp.ClientOfflineError=_p;class Np extends Error{constructor(){super("Disconnects client")}}Rp.DisconnectsClientError=Np;class Yp extends Error{constructor(){super("Socket closed unexpectedly")}}Rp.SocketClosedUnexpectedlyError=Yp;class gp extends Error{constructor(){super("All the root nodes are unavailable")}}Rp.RootNodesUnavailableError=gp;class Dp extends Error{constructor(r,t){super(r.message);Object.defineProperty(this,"originalError",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"socketError",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.originalError=r,this.socketError=t}}Rp.ReconnectStrategyError=Dp;class Ye extends Error{constructor(r){super(r);this.stack=void 0}}Rp.ErrorReply=Ye;class Op extends Ye{constructor(r,t){super(`${t.length} commands failed, see .replies and .errorIndexes for more information`);Object.defineProperty(this,"replies",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"errorIndexes",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.replies=r,this.errorIndexes=t}*errors(){for(let r of this.errorIndexes)yield this.replies[r]}}Rp.MultiErrorReply=Op});var jp=f((cp)=>{Object.defineProperty(cp,"__esModule",{value:!0});cp.promiseTimeout=void 0;function ia(r){return new Promise((t)=>setTimeout(t,r))}cp.promiseTimeout=ia});var qp=f((Vr)=>{var Y=Vr&&Vr.__classPrivateFieldGet||function(r,t,u,n){if(u==="a"&&!n)throw new TypeError("Private accessor was defined without a getter");if(typeof t==="function"?r!==t||!n:!t.has(r))throw new TypeError("Cannot read private member from an object whose class did not declare it");return u==="m"?n:u==="a"?n.call(r):n?n.value:t.get(r)},y=Vr&&Vr.__classPrivateFieldSet||function(r,t,u,n,e){if(n==="m")throw new TypeError("Private method is not writable");if(n==="a"&&!e)throw new TypeError("Private accessor was defined without a setter");if(typeof t==="function"?r!==t||!e:!t.has(r))throw new TypeError("Cannot write private member to an object whose class did not declare it");return n==="a"?e.call(r,u):e?e.value=u:t.set(r,u),u},U,Qr,pp,Kp,$u,J,$,h,Sr,nt,Wt,Sp,ge,Oe,Mp,bp,Tp,De,Re,Vt;Object.defineProperty(Vr,"__esModule",{value:!0});var aa=or("events"),la=or("net"),rl=or("tls"),et=gr(),tl=jp();class xe extends aa.EventEmitter{get isOpen(){return Y(this,h,"f")}get isReady(){return Y(this,Sr,"f")}get writableNeedDrain(){return Y(this,nt,"f")}constructor(r,t){super();U.add(this),$u.set(this,void 0),J.set(this,void 0),$.set(this,void 0),h.set(this,!1),Sr.set(this,!1),nt.set(this,!1),Wt.set(this,!1),Vt.set(this,!1),y(this,$u,r,"f"),y(this,J,Y(Qr,Qr,"m",pp).call(Qr,t),"f")}async connect(){if(Y(this,h,"f"))throw new Error("Socket already opened");return y(this,h,!0,"f"),Y(this,U,"m",Oe).call(this)}writeCommand(r){if(!Y(this,$,"f"))throw new et.ClientClosedError;for(let t of r)y(this,nt,!Y(this,$,"f").write(t),"f")}disconnect(){if(!Y(this,h,"f"))throw new et.ClientClosedError;y(this,h,!1,"f"),Y(this,U,"m",Re).call(this)}async quit(r){if(!Y(this,h,"f"))throw new et.ClientClosedError;y(this,h,!1,"f");let t=await r();return Y(this,U,"m",Re).call(this),t}cork(){if(!Y(this,$,"f")||Y(this,Vt,"f"))return;Y(this,$,"f").cork(),y(this,Vt,!0,"f"),setImmediate(()=>{Y(this,$,"f")?.uncork(),y(this,Vt,!1,"f")})}ref(){y(this,Wt,!1,"f"),Y(this,$,"f")?.ref()}unref(){y(this,Wt,!0,"f"),Y(this,$,"f")?.unref()}}Qr=xe,$u=new WeakMap,J=new WeakMap,$=new WeakMap,h=new WeakMap,Sr=new WeakMap,nt=new WeakMap,Wt=new WeakMap,Vt=new WeakMap,U=new WeakSet,pp=function r(t){var u,n;if(t??(t={}),!t.path)(u=t).port??(u.port=6379),(n=t).host??(n.host="localhost");return t.connectTimeout??(t.connectTimeout=5000),t.keepAlive??(t.keepAlive=5000),t.noDelay??(t.noDelay=!0),t},Kp=function r(t){return t.tls===!0},Sp=function r(t,u){if(Y(this,J,"f").reconnectStrategy===!1)return!1;else if(typeof Y(this,J,"f").reconnectStrategy==="number")return Y(this,J,"f").reconnectStrategy;else if(Y(this,J,"f").reconnectStrategy)try{let n=Y(this,J,"f").reconnectStrategy(t,u);if(n!==!1&&!(n instanceof Error)&&typeof n!=="number")throw new TypeError(`Reconnect strategy should return \`false | Error | number\`, got ${n} instead`);return n}catch(n){this.emit("error",n)}return Math.min(t*50,500)},ge=function r(t,u){let n=Y(this,U,"m",Sp).call(this,t,u);if(n===!1)return y(this,h,!1,"f"),this.emit("error",u),u;else if(n instanceof Error)return y(this,h,!1,"f"),this.emit("error",u),new et.ReconnectStrategyError(n,u);return n},Oe=async function r(){let t=0;do try{y(this,$,await Y(this,U,"m",Mp).call(this),"f"),y(this,nt,!1,"f"),this.emit("connect");try{await Y(this,$u,"f").call(this)}catch(u){throw Y(this,$,"f").destroy(),y(this,$,void 0,"f"),u}y(this,Sr,!0,"f"),this.emit("ready")}catch(u){let n=Y(this,U,"m",ge).call(this,t++,u);if(typeof n!=="number")throw n;this.emit("error",u),await tl.promiseTimeout(n),this.emit("reconnecting")}while(Y(this,h,"f")&&!Y(this,Sr,"f"))},Mp=function r(){return new Promise((t,u)=>{let{connectEvent:n,socket:e}=Y(Qr,Qr,"m",Kp).call(Qr,Y(this,J,"f"))?Y(this,U,"m",Tp).call(this):Y(this,U,"m",bp).call(this);if(Y(this,J,"f").connectTimeout)e.setTimeout(Y(this,J,"f").connectTimeout,()=>e.destroy(new et.ConnectionTimeoutError));if(Y(this,Wt,"f"))e.unref();e.setNoDelay(Y(this,J,"f").noDelay).once("error",u).once(n,()=>{e.setTimeout(0).setKeepAlive(Y(this,J,"f").keepAlive!==!1,Y(this,J,"f").keepAlive||0).off("error",u).once("error",(o)=>Y(this,U,"m",De).call(this,o)).once("close",(o)=>{if(!o&&Y(this,h,"f")&&Y(this,$,"f")===e)Y(this,U,"m",De).call(this,new et.SocketClosedUnexpectedlyError)}).on("drain",()=>{y(this,nt,!1,"f"),this.emit("drain")}).on("data",(o)=>this.emit("data",o)),t(e)})})},bp=function r(){return{connectEvent:"connect",socket:la.connect(Y(this,J,"f"))}},Tp=function r(){return{connectEvent:"secureConnect",socket:rl.connect(Y(this,J,"f"))}},De=function r(t){let u=Y(this,Sr,"f");if(y(this,Sr,!1,"f"),this.emit("error",t),!u||!Y(this,h,"f")||typeof Y(this,U,"m",ge).call(this,0,t)!=="number")return;this.emit("reconnecting"),Y(this,U,"m",Oe).call(this).catch(()=>{})},Re=function r(){if(y(this,Sr,!1,"f"),Y(this,$,"f"))Y(this,$,"f").destroy(),y(this,$,void 0,"f");this.emit("end")};Vr.default=xe});var vp=f((vOr,yp)=>{yp.exports=function(r){r.prototype[Symbol.iterator]=function*(){for(let t=this.head;t;t=t.next)yield t.value}}});var Fp=f((LOr,Lp)=>{Lp.exports=X;X.Node=Wr;X.create=X;function X(r){var t=this;if(!(t instanceof X))t=new X;if(t.tail=null,t.head=null,t.length=0,r&&typeof r.forEach==="function")r.forEach(function(e){t.push(e)});else if(arguments.length>0)for(var u=0,n=arguments.length;u<n;u++)t.push(arguments[u]);return t}X.prototype.removeNode=function(r){if(r.list!==this)throw new Error("removing node which does not belong to this list");var{next:t,prev:u}=r;if(t)t.prev=u;if(u)u.next=t;if(r===this.head)this.head=t;if(r===this.tail)this.tail=u;return r.list.length--,r.next=null,r.prev=null,r.list=null,t};X.prototype.unshiftNode=function(r){if(r===this.head)return;if(r.list)r.list.removeNode(r);var t=this.head;if(r.list=this,r.next=t,t)t.prev=r;if(this.head=r,!this.tail)this.tail=r;this.length++};X.prototype.pushNode=function(r){if(r===this.tail)return;if(r.list)r.list.removeNode(r);var t=this.tail;if(r.list=this,r.prev=t,t)t.next=r;if(this.tail=r,!this.head)this.head=r;this.length++};X.prototype.push=function(){for(var r=0,t=arguments.length;r<t;r++)nl(this,arguments[r]);return this.length};X.prototype.unshift=function(){for(var r=0,t=arguments.length;r<t;r++)el(this,arguments[r]);return this.length};X.prototype.pop=function(){if(!this.tail)return;var r=this.tail.value;if(this.tail=this.tail.prev,this.tail)this.tail.next=null;else this.head=null;return this.length--,r};X.prototype.shift=function(){if(!this.head)return;var r=this.head.value;if(this.head=this.head.next,this.head)this.head.prev=null;else this.tail=null;return this.length--,r};X.prototype.forEach=function(r,t){t=t||this;for(var u=this.head,n=0;u!==null;n++)r.call(t,u.value,n,this),u=u.next};X.prototype.forEachReverse=function(r,t){t=t||this;for(var u=this.tail,n=this.length-1;u!==null;n--)r.call(t,u.value,n,this),u=u.prev};X.prototype.get=function(r){for(var t=0,u=this.head;u!==null&&t<r;t++)u=u.next;if(t===r&&u!==null)return u.value};X.prototype.getReverse=function(r){for(var t=0,u=this.tail;u!==null&&t<r;t++)u=u.prev;if(t===r&&u!==null)return u.value};X.prototype.map=function(r,t){t=t||this;var u=new X;for(var n=this.head;n!==null;)u.push(r.call(t,n.value,this)),n=n.next;return u};X.prototype.mapReverse=function(r,t){t=t||this;var u=new X;for(var n=this.tail;n!==null;)u.push(r.call(t,n.value,this)),n=n.prev;return u};X.prototype.reduce=function(r,t){var u,n=this.head;if(arguments.length>1)u=t;else if(this.head)n=this.head.next,u=this.head.value;else throw new TypeError("Reduce of empty list with no initial value");for(var e=0;n!==null;e++)u=r(u,n.value,e),n=n.next;return u};X.prototype.reduceReverse=function(r,t){var u,n=this.tail;if(arguments.length>1)u=t;else if(this.tail)n=this.tail.prev,u=this.tail.value;else throw new TypeError("Reduce of empty list with no initial value");for(var e=this.length-1;n!==null;e--)u=r(u,n.value,e),n=n.prev;return u};X.prototype.toArray=function(){var r=new Array(this.length);for(var t=0,u=this.head;u!==null;t++)r[t]=u.value,u=u.next;return r};X.prototype.toArrayReverse=function(){var r=new Array(this.length);for(var t=0,u=this.tail;u!==null;t++)r[t]=u.value,u=u.prev;return r};X.prototype.slice=function(r,t){if(t=t||this.length,t<0)t+=this.length;if(r=r||0,r<0)r+=this.length;var u=new X;if(t<r||t<0)return u;if(r<0)r=0;if(t>this.length)t=this.length;for(var n=0,e=this.head;e!==null&&n<r;n++)e=e.next;for(;e!==null&&n<t;n++,e=e.next)u.push(e.value);return u};X.prototype.sliceReverse=function(r,t){if(t=t||this.length,t<0)t+=this.length;if(r=r||0,r<0)r+=this.length;var u=new X;if(t<r||t<0)return u;if(r<0)r=0;if(t>this.length)t=this.length;for(var n=this.length,e=this.tail;e!==null&&n>t;n--)e=e.prev;for(;e!==null&&n>r;n--,e=e.prev)u.push(e.value);return u};X.prototype.splice=function(r,t,...u){if(r>this.length)r=this.length-1;if(r<0)r=this.length+r;for(var n=0,e=this.head;e!==null&&n<r;n++)e=e.next;var o=[];for(var n=0;e&&n<t;n++)o.push(e.value),e=this.removeNode(e);if(e===null)e=this.tail;if(e!==this.head&&e!==this.tail)e=e.prev;for(var n=0;n<u.length;n++)e=ul(this,e,u[n]);return o};X.prototype.reverse=function(){var r=this.head,t=this.tail;for(var u=r;u!==null;u=u.prev){var n=u.prev;u.prev=u.next,u.next=n}return this.head=t,this.tail=r,this};function ul(r,t,u){var n=t===r.head?new Wr(u,null,t,r):new Wr(u,t,t.next,r);if(n.next===null)r.tail=n;if(n.prev===null)r.head=n;return r.length++,n}function nl(r,t){if(r.tail=new Wr(t,r.tail,null,r),!r.head)r.head=r.tail;r.length++}function el(r,t){if(r.head=new Wr(t,null,r.head,r),!r.tail)r.tail=r.head;r.length++}function Wr(r,t,u,n){if(!(this instanceof Wr))return new Wr(r,t,u,n);if(this.list=n,this.value=r,t)t.next=this,this.prev=t;else this.prev=null;if(u)u.prev=this,this.next=u;else this.next=null}try{vp()(X)}catch(r){}});var zp=f(($p)=>{Object.defineProperty($p,"__esModule",{value:!0});class Jp{constructor(){Object.defineProperty(this,"chunks",{enumerable:!0,configurable:!0,writable:!0,value:[]})}write(r){this.chunks.push(r)}end(r){return this.write(r),Buffer.concat(this.chunks.splice(0))}reset(){this.chunks=[]}}$p.default=Jp});var Wp=f((Vp)=>{Object.defineProperty(Vp,"__esModule",{value:!0});var ol=or("string_decoder");class Qp{constructor(){Object.defineProperty(this,"decoder",{enumerable:!0,configurable:!0,writable:!0,value:new ol.StringDecoder}),Object.defineProperty(this,"string",{enumerable:!0,configurable:!0,writable:!0,value:""})}write(r){this.string+=this.decoder.write(r)}end(r){let t=this.string+this.decoder.end(r);return this.string="",t}reset(){this.string=""}}Vp.default=Qp});var Hp=f((Pp)=>{Object.defineProperty(Pp,"__esModule",{value:!0});var Al=gr(),El=zp(),sl=Wp(),Zr;(function(r){r[r.SIMPLE_STRING=43]="SIMPLE_STRING",r[r.ERROR=45]="ERROR",r[r.INTEGER=58]="INTEGER",r[r.BULK_STRING=36]="BULK_STRING",r[r.ARRAY=42]="ARRAY"})(Zr||(Zr={}));var ft;(function(r){r[r.CR=13]="CR",r[r.ZERO=48]="ZERO",r[r.MINUS=45]="MINUS"})(ft||(ft={}));class Zp{constructor(r){Object.defineProperty(this,"options",{enumerable:!0,configurable:!0,writable:!0,value:r}),Object.defineProperty(this,"cursor",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"type",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"bufferComposer",{enumerable:!0,configurable:!0,writable:!0,value:new El.default}),Object.defineProperty(this,"stringComposer",{enumerable:!0,configurable:!0,writable:!0,value:new sl.default}),Object.defineProperty(this,"currentStringComposer",{enumerable:!0,configurable:!0,writable:!0,value:this.stringComposer}),Object.defineProperty(this,"integer",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"isNegativeInteger",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"bulkStringRemainingLength",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"arraysInProcess",{enumerable:!0,configurable:!0,writable:!0,value:[]}),Object.defineProperty(this,"initializeArray",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,"arrayItemType",{enumerable:!0,configurable:!0,writable:!0,value:void 0})}reset(){this.cursor=0,this.type=void 0,this.bufferComposer.reset(),this.stringComposer.reset(),this.currentStringComposer=this.stringComposer}write(r){while(this.cursor<r.length){if(!this.type){if(this.currentStringComposer=this.options.returnStringsAsBuffers()?this.bufferComposer:this.stringComposer,this.type=r[this.cursor],++this.cursor>=r.length)break}let t=this.parseType(r,this.type);if(t===void 0)break;this.type=void 0,this.options.onReply(t)}this.cursor-=r.length}parseType(r,t,u){switch(t){case Zr.SIMPLE_STRING:return this.parseSimpleString(r);case Zr.ERROR:return this.parseError(r);case Zr.INTEGER:return this.parseInteger(r);case Zr.BULK_STRING:return this.parseBulkString(r);case Zr.ARRAY:return this.parseArray(r,u)}}compose(r,t){for(let n=this.cursor;n<r.length;n++)if(r[n]===ft.CR){let e=t.end(r.subarray(this.cursor,n));return this.cursor=n+2,e}let u=r.subarray(this.cursor);t.write(u),this.cursor=r.length}parseSimpleString(r){return this.compose(r,this.currentStringComposer)}parseError(r){let t=this.compose(r,this.stringComposer);if(t!==void 0)return new Al.ErrorReply(t)}parseInteger(r){if(this.isNegativeInteger===void 0){if(this.isNegativeInteger=r[this.cursor]===ft.MINUS,this.isNegativeInteger&&++this.cursor===r.length)return}do{let t=r[this.cursor];if(t===ft.CR){let u=this.isNegativeInteger?-this.integer:this.integer;return this.integer=0,this.isNegativeInteger=void 0,this.cursor+=2,u}this.integer=this.integer*10+t-ft.ZERO}while(++this.cursor<r.length)}parseBulkString(r){if(this.bulkStringRemainingLength===void 0){let n=this.parseInteger(r);if(n===void 0)return;if(n===-1)return null;if(this.bulkStringRemainingLength=n,this.cursor>=r.length)return}let t=this.cursor+this.bulkStringRemainingLength;if(r.length>=t){let n=this.currentStringComposer.end(r.subarray(this.cursor,t));return this.bulkStringRemainingLength=void 0,this.cursor=t+2,n}let u=r.subarray(this.cursor);this.currentStringComposer.write(u),this.bulkStringRemainingLength-=u.length,this.cursor=r.length}parseArray(r,t=0){if(this.initializeArray||this.arraysInProcess.length===t){let u=this.parseInteger(r);if(u===void 0){this.initializeArray=!0;return}if(this.initializeArray=!1,this.arrayItemType=void 0,u===-1)return this.returnArrayReply(null,t,r);else if(u===0)return this.returnArrayReply([],t,r);this.arraysInProcess.push({array:new Array(u),pushCounter:0})}while(this.cursor<r.length){if(!this.arrayItemType){if(this.arrayItemType=r[this.cursor],++this.cursor>=r.length)break}let u=this.parseType(r,this.arrayItemType,t+1);if(u===void 0)break;this.arrayItemType=void 0;let n=this.pushArrayItem(u,t);if(n!==void 0)return n}}returnArrayReply(r,t,u){if(this.arraysInProcess.length<=t)return r;return this.pushArrayItem(r,t,u)}pushArrayItem(r,t,u){let n=this.arraysInProcess[this.arraysInProcess.length-1];if(n.array[n.pushCounter]=r,++n.pushCounter===n.array.length)return this.returnArrayReply(this.arraysInProcess.pop().array,t,u);else if(u&&u.length>this.cursor)return this.parseArray(u,t)}}Pp.default=Zp});var Up=f((Bp)=>{Object.defineProperty(Bp,"__esModule",{value:!0});var Zt=`\r
|
|
5
|
+
`;function _l(r){let t=[],u="*"+r.length+Zt;for(let n=0;n<r.length;n++){let e=r[n];if(typeof e==="string")u+="$"+Buffer.byteLength(e)+Zt+e+Zt;else if(e instanceof Buffer)t.push(u+"$"+e.length.toString()+Zt,e),u=Zt;else throw new TypeError("Invalid argument type")}return t.push(u),t}Bp.default=_l});var Wu=f((mr)=>{var D=mr&&mr.__classPrivateFieldGet||function(r,t,u,n){if(u==="a"&&!n)throw new TypeError("Private accessor was defined without a getter");if(typeof t==="function"?r!==t||!n:!t.has(r))throw new TypeError("Cannot read private member from an object whose class did not declare it");return u==="m"?n:u==="a"?n.call(r):n?n.value:t.get(r)},L=mr&&mr.__classPrivateFieldSet||function(r,t,u,n,e){if(n==="m")throw new TypeError("Private method is not writable");if(n==="a"&&!e)throw new TypeError("Private accessor was defined without a setter");if(typeof t==="function"?r!==t||!e:!t.has(r))throw new TypeError("Cannot write private member to an object whose class did not declare it");return n==="a"?e.call(r,u):e?e.value=u:t.set(r,u),u},P,Q,ce,zu,S,Dr,F,Xe,Qu,ot,Vu;Object.defineProperty(mr,"__esModule",{value:!0});mr.PubSub=mr.PubSubType=void 0;var M;(function(r){r.CHANNELS="CHANNELS",r.PATTERNS="PATTERNS",r.SHARDED="SHARDED"})(M||(mr.PubSubType=M={}));var z={[M.CHANNELS]:{subscribe:Buffer.from("subscribe"),unsubscribe:Buffer.from("unsubscribe"),message:Buffer.from("message")},[M.PATTERNS]:{subscribe:Buffer.from("psubscribe"),unsubscribe:Buffer.from("punsubscribe"),message:Buffer.from("pmessage")},[M.SHARDED]:{subscribe:Buffer.from("ssubscribe"),unsubscribe:Buffer.from("sunsubscribe"),message:Buffer.from("smessage")}};class je{constructor(){P.add(this),S.set(this,0),Dr.set(this,!1),F.set(this,{[M.CHANNELS]:new Map,[M.PATTERNS]:new Map,[M.SHARDED]:new Map})}static isStatusReply(r){return z[M.CHANNELS].subscribe.equals(r[0])||z[M.CHANNELS].unsubscribe.equals(r[0])||z[M.PATTERNS].subscribe.equals(r[0])||z[M.PATTERNS].unsubscribe.equals(r[0])||z[M.SHARDED].subscribe.equals(r[0])}static isShardedUnsubscribe(r){return z[M.SHARDED].unsubscribe.equals(r[0])}get isActive(){return D(this,Dr,"f")}subscribe(r,t,u,n){var e;let o=[z[r].subscribe],A=D(Q,Q,"m",ce).call(Q,t);for(let s of A){let I=D(this,F,"f")[r].get(s);if(!I||I.unsubscribing)o.push(s)}if(o.length===1){for(let s of A)D(Q,Q,"m",zu).call(Q,D(this,F,"f")[r].get(s),n).add(u);return}return L(this,Dr,!0,"f"),L(this,S,(e=D(this,S,"f"),e++,e),"f"),{args:o,channelsCounter:o.length-1,resolve:()=>{var s;L(this,S,(s=D(this,S,"f"),s--,s),"f");for(let I of A){let O=D(this,F,"f")[r].get(I);if(!O)O={unsubscribing:!1,buffers:new Set,strings:new Set},D(this,F,"f")[r].set(I,O);D(Q,Q,"m",zu).call(Q,O,n).add(u)}},reject:()=>{var s;L(this,S,(s=D(this,S,"f"),s--,s),"f"),D(this,P,"m",ot).call(this)}}}extendChannelListeners(r,t,u){var n;if(!D(this,P,"m",Xe).call(this,r,t,u))return;return L(this,Dr,!0,"f"),L(this,S,(n=D(this,S,"f"),n++,n),"f"),{args:[z[r].subscribe,t],channelsCounter:1,resolve:()=>{var e,o;return L(this,S,(o=D(this,S,"f"),e=o--,o),"f"),e},reject:()=>{var e;L(this,S,(e=D(this,S,"f"),e--,e),"f"),D(this,P,"m",ot).call(this)}}}extendTypeListeners(r,t){var u;let n=[z[r].subscribe];for(let[e,o]of t)if(D(this,P,"m",Xe).call(this,r,e,o))n.push(e);if(n.length===1)return;return L(this,Dr,!0,"f"),L(this,S,(u=D(this,S,"f"),u++,u),"f"),{args:n,channelsCounter:n.length-1,resolve:()=>{var e,o;return L(this,S,(o=D(this,S,"f"),e=o--,o),"f"),e},reject:()=>{var e;L(this,S,(e=D(this,S,"f"),e--,e),"f"),D(this,P,"m",ot).call(this)}}}unsubscribe(r,t,u,n){let e=D(this,F,"f")[r];if(!t)return D(this,P,"m",Qu).call(this,[z[r].unsubscribe],NaN,()=>e.clear());let o=D(Q,Q,"m",ce).call(Q,t);if(!u)return D(this,P,"m",Qu).call(this,[z[r].unsubscribe,...o],o.length,()=>{for(let s of o)e.delete(s)});let A=[z[r].unsubscribe];for(let s of o){let I=e.get(s);if(I){let O,rr;if(n)O=I.buffers,rr=I.strings;else O=I.strings,rr=I.buffers;if((O.has(u)?O.size-1:O.size)!==0||rr.size!==0)continue;I.unsubscribing=!0}A.push(s)}if(A.length===1){for(let s of o)D(Q,Q,"m",zu).call(Q,e.get(s),n).delete(u);return}return D(this,P,"m",Qu).call(this,A,A.length-1,()=>{for(let s of o){let I=e.get(s);if(!I)continue;if((n?I.buffers:I.strings).delete(u),I.buffers.size===0&&I.strings.size===0)e.delete(s)}})}reset(){L(this,Dr,!1,"f"),L(this,S,0,"f")}resubscribe(){var r;let t=[];for(let[u,n]of Object.entries(D(this,F,"f"))){if(!n.size)continue;L(this,Dr,!0,"f"),L(this,S,(r=D(this,S,"f"),r++,r),"f");let e=()=>{var o,A;return L(this,S,(A=D(this,S,"f"),o=A--,A),"f"),o};t.push({args:[z[u].subscribe,...n.keys()],channelsCounter:n.size,resolve:e,reject:e})}return t}handleMessageReply(r){if(z[M.CHANNELS].message.equals(r[0]))return D(this,P,"m",Vu).call(this,M.CHANNELS,r[2],r[1]),!0;else if(z[M.PATTERNS].message.equals(r[0]))return D(this,P,"m",Vu).call(this,M.PATTERNS,r[3],r[2],r[1]),!0;else if(z[M.SHARDED].message.equals(r[0]))return D(this,P,"m",Vu).call(this,M.SHARDED,r[2],r[1]),!0;return!1}removeShardedListeners(r){let t=D(this,F,"f")[M.SHARDED].get(r);return D(this,F,"f")[M.SHARDED].delete(r),D(this,P,"m",ot).call(this),t}getTypeListeners(r){return D(this,F,"f")[r]}}mr.PubSub=je;Q=je,S=new WeakMap,Dr=new WeakMap,F=new WeakMap,P=new WeakSet,ce=function r(t){return Array.isArray(t)?t:[t]},zu=function r(t,u){return u?t.buffers:t.strings},Xe=function r(t,u,n){let e=D(this,F,"f")[t].get(u);if(!e)return D(this,F,"f")[t].set(u,n),!0;for(let o of n.buffers)e.buffers.add(o);for(let o of n.strings)e.strings.add(o);return!1},Qu=function r(t,u,n){return{args:t,channelsCounter:u,resolve:()=>{n(),D(this,P,"m",ot).call(this)},reject:void 0}},ot=function r(){L(this,Dr,D(this,F,"f")[M.CHANNELS].size!==0||D(this,F,"f")[M.PATTERNS].size!==0||D(this,F,"f")[M.SHARDED].size!==0||D(this,S,"f")!==0,"f")},Vu=function r(t,u,n,e){let o=(e??n).toString(),A=D(this,F,"f")[t].get(o);if(!A)return;for(let O of A.buffers)O(u,n);if(!A.strings.size)return;let s=e?n.toString():o,I=s==="__redis__:invalidate"?u===null?null:u.map((O)=>O.toString()):u.toString();for(let O of A.strings)O(I,s)}});var hp=f((Hr)=>{var g=Hr&&Hr.__classPrivateFieldGet||function(r,t,u,n){if(u==="a"&&!n)throw new TypeError("Private accessor was defined without a getter");if(typeof t==="function"?r!==t||!n:!t.has(r))throw new TypeError("Cannot read private member from an object whose class did not declare it");return u==="m"?n:u==="a"?n.call(r):n?n.value:t.get(r)},Zu=Hr&&Hr.__classPrivateFieldSet||function(r,t,u,n,e){if(n==="m")throw new TypeError("Private method is not writable");if(n==="a"&&!e)throw new TypeError("Private accessor was defined without a setter");if(typeof t==="function"?r!==t||!e:!t.has(r))throw new TypeError("Cannot write private member to an object whose class did not declare it");return n==="a"?e.call(r,u):e?e.value=u:t.set(r,u),u},Pr,Ar,Pu,Pt,tr,a,Hu,H,mt,Ht,At;Object.defineProperty(Hr,"__esModule",{value:!0});var Ke=Fp(),Se=gr(),Yl=Hp(),gl=Up(),Me=Wu(),Dl=Buffer.from("pong");class be{get isPubSubActive(){return g(this,H,"f").isActive}constructor(r,t){Pr.add(this),Pt.set(this,void 0),tr.set(this,new Ke),a.set(this,new Ke),Hu.set(this,void 0),H.set(this,new Me.PubSub),mt.set(this,void 0),Ht.set(this,new Yl.default({returnStringsAsBuffers:()=>{return!!g(this,a,"f").head?.value.returnBuffers||g(this,H,"f").isActive},onReply:(u)=>{if(g(this,H,"f").isActive&&Array.isArray(u)){if(g(this,H,"f").handleMessageReply(u))return;let o=Me.PubSub.isShardedUnsubscribe(u);if(o&&!g(this,a,"f").length){let A=u[1].toString();g(this,Hu,"f").call(this,A,g(this,H,"f").removeShardedListeners(A));return}else if(o||Me.PubSub.isStatusReply(u)){let A=g(this,a,"f").head.value;if(Number.isNaN(A.channelsCounter)&&u[2]===0||--A.channelsCounter===0)g(this,a,"f").shift().resolve();return}if(Dl.equals(u[0])){let{resolve:A,returnBuffers:s}=g(this,a,"f").shift(),I=u[1].length===0?u[0]:u[1];A(s?I:I.toString());return}}let{resolve:n,reject:e}=g(this,a,"f").shift();if(u instanceof Se.ErrorReply)e(u);else n(u)}})),Zu(this,Pt,r,"f"),Zu(this,Hu,t,"f")}addCommand(r,t){if(g(this,Pt,"f")&&g(this,tr,"f").length+g(this,a,"f").length>=g(this,Pt,"f"))return Promise.reject(new Error("The queue is full"));else if(t?.signal?.aborted)return Promise.reject(new Se.AbortError);return new Promise((u,n)=>{let e=new Ke.Node({args:r,chainId:t?.chainId,returnBuffers:t?.returnBuffers,resolve:u,reject:n});if(t?.signal){let o=()=>{g(this,tr,"f").removeNode(e),e.value.reject(new Se.AbortError)};e.value.abort={signal:t.signal,listener:o},t.signal.addEventListener("abort",o,{once:!0})}if(t?.asap)g(this,tr,"f").unshiftNode(e);else g(this,tr,"f").pushNode(e)})}subscribe(r,t,u,n){return g(this,Pr,"m",At).call(this,g(this,H,"f").subscribe(r,t,u,n))}unsubscribe(r,t,u,n){return g(this,Pr,"m",At).call(this,g(this,H,"f").unsubscribe(r,t,u,n))}resubscribe(){let r=g(this,H,"f").resubscribe();if(!r.length)return;return Promise.all(r.map((t)=>g(this,Pr,"m",At).call(this,t)))}extendPubSubChannelListeners(r,t,u){return g(this,Pr,"m",At).call(this,g(this,H,"f").extendChannelListeners(r,t,u))}extendPubSubListeners(r,t){return g(this,Pr,"m",At).call(this,g(this,H,"f").extendTypeListeners(r,t))}getPubSubListeners(r){return g(this,H,"f").getTypeListeners(r)}getCommandToSend(){let r=g(this,tr,"f").shift();if(!r)return;let t;try{t=gl.default(r.args)}catch(u){r.reject(u);return}return g(this,a,"f").push({resolve:r.resolve,reject:r.reject,channelsCounter:r.channelsCounter,returnBuffers:r.returnBuffers}),Zu(this,mt,r.chainId,"f"),t}onReplyChunk(r){g(this,Ht,"f").write(r)}flushWaitingForReply(r){if(g(this,Ht,"f").reset(),g(this,H,"f").reset(),g(Ar,Ar,"m",Pu).call(Ar,g(this,a,"f"),r),!g(this,mt,"f"))return;while(g(this,tr,"f").head?.value.chainId===g(this,mt,"f"))g(this,tr,"f").shift();Zu(this,mt,void 0,"f")}flushAll(r){g(this,Ht,"f").reset(),g(this,H,"f").reset(),g(Ar,Ar,"m",Pu).call(Ar,g(this,a,"f"),r),g(Ar,Ar,"m",Pu).call(Ar,g(this,tr,"f"),r)}}Ar=be,Pt=new WeakMap,tr=new WeakMap,a=new WeakMap,Hu=new WeakMap,H=new WeakMap,mt=new WeakMap,Ht=new WeakMap,Pr=new WeakSet,Pu=function r(t,u){while(t.length)t.shift().reject(u)},At=function r(t){if(t===void 0)return;return new Promise((u,n)=>{g(this,tr,"f").push({args:t.args,channelsCounter:t.channelsCounter,returnBuffers:!0,resolve:()=>{t.resolve(),u()},reject:(e)=>{t.reject?.(),n(e)}})})};Hr.default=be});var Te=f((dp)=>{Object.defineProperty(dp,"__esModule",{value:!0});dp.isCommandOptions=dp.commandOptions=void 0;var wp=Symbol("Command Options");function Ol(r){return r[wp]=!0,r}dp.commandOptions=Ol;function Rl(r){return r?.[wp]===!0}dp.isCommandOptions=Rl});var Et=f((ip)=>{Object.defineProperty(ip,"__esModule",{value:!0});ip.fCallArguments=ip.transformCommandReply=ip.transformLegacyCommandArguments=ip.transformCommandArguments=ip.attachExtensions=ip.attachCommands=void 0;var cl=Te();function kp({BaseClass:r,commands:t,executor:u}){for(let[n,e]of Object.entries(t))r.prototype[n]=function(...o){return u.call(this,e,o,n)}}ip.attachCommands=kp;function Xl(r){let t;if(r.modules)t=Gp({BaseClass:r.BaseClass,namespaces:r.modules,executor:r.modulesExecutor});if(r.functions)t=Gp({BaseClass:t??r.BaseClass,namespaces:r.functions,executor:r.functionsExecutor});if(r.scripts)t??(t=class extends r.BaseClass{}),kp({BaseClass:t,commands:r.scripts,executor:r.scriptsExecutor});return t??r.BaseClass}ip.attachExtensions=Xl;function Gp({BaseClass:r,namespaces:t,executor:u}){let n=class extends r{constructor(...e){super(...e);for(let o of Object.keys(t))this[o]=Object.create(this[o],{self:{value:this}})}};for(let[e,o]of Object.entries(t)){n.prototype[e]={};for(let[A,s]of Object.entries(o))n.prototype[e][A]=function(...I){return u.call(this.self,s,I,A)}}return n}function jl(r,t){let u;if(cl.isCommandOptions(t[0]))u=t[0],t=t.slice(1);return{jsArgs:t,args:r.transformArguments(...t),options:u}}ip.transformCommandArguments=jl;function Kl(r){return r.flat().map((t)=>{return typeof t==="number"||t instanceof Date?t.toString():t})}ip.transformLegacyCommandArguments=Kl;function Sl(r,t,u){if(!r.transformReply)return t;return r.transformReply(t,u)}ip.transformCommandReply=Sl;function Ml(r,t,u){let n=[t.IS_READ_ONLY?"FCALL_RO":"FCALL",r];if(t.NUMBER_OF_KEYS!==void 0)n.push(t.NUMBER_OF_KEYS.toString());return n.push(...u),n}ip.fCallArguments=Ml});var qe=f((rq)=>{Object.defineProperty(rq,"__esModule",{value:!0});var vl=Et(),pe=gr();class lp{constructor(){Object.defineProperty(this,"queue",{enumerable:!0,configurable:!0,writable:!0,value:[]}),Object.defineProperty(this,"scriptsInUse",{enumerable:!0,configurable:!0,writable:!0,value:new Set})}static generateChainId(){return Symbol("RedisMultiCommand Chain Id")}addCommand(r,t){this.queue.push({args:r,transformReply:t})}addFunction(r,t,u){let n=vl.fCallArguments(r,t,t.transformArguments(...u));return this.queue.push({args:n,transformReply:t.transformReply}),n}addScript(r,t){let u=[];if(this.scriptsInUse.has(r.SHA1))u.push("EVALSHA",r.SHA1);else this.scriptsInUse.add(r.SHA1),u.push("EVAL",r.SCRIPT);if(r.NUMBER_OF_KEYS!==void 0)u.push(r.NUMBER_OF_KEYS.toString());let n=r.transformArguments(...t);if(u.push(...n),n.preserve)u.preserve=n.preserve;return this.addCommand(u,r.transformReply),u}handleExecReplies(r){let t=r[r.length-1];if(t===null)throw new pe.WatchError;return this.transformReplies(t)}transformReplies(r){let t=[],u=r.map((n,e)=>{if(n instanceof pe.ErrorReply)return t.push(e),n;let{transformReply:o,args:A}=this.queue[e];return o?o(n,A.preserve):n});if(t.length)throw new pe.MultiErrorReply(u,t);return u}}rq.default=lp});var oq=f((Br)=>{var tq=Br&&Br.__classPrivateFieldSet||function(r,t,u,n,e){if(n==="m")throw new TypeError("Private method is not writable");if(n==="a"&&!e)throw new TypeError("Private accessor was defined without a setter");if(typeof t==="function"?r!==t||!e:!t.has(r))throw new TypeError("Cannot write private member to an object whose class did not declare it");return n==="a"?e.call(r,u):e?e.value=u:t.set(r,u),u},V=Br&&Br.__classPrivateFieldGet||function(r,t,u,n){if(u==="a"&&!n)throw new TypeError("Private accessor was defined without a getter");if(typeof t==="function"?r!==t||!n:!t.has(r))throw new TypeError("Cannot read private member from an object whose class did not declare it");return u==="m"?n:u==="a"?n.call(r):n?n.value:t.get(r)},Bu,l,Bt,Ut,eq,uq;Object.defineProperty(Br,"__esModule",{value:!0});var fq=Ne(),nq=qe(),Uu=Et();class Mr{static extend(r){return Uu.attachExtensions({BaseClass:Mr,modulesExecutor:Mr.prototype.commandsExecutor,modules:r?.modules,functionsExecutor:Mr.prototype.functionsExecutor,functions:r?.functions,scriptsExecutor:Mr.prototype.scriptsExecutor,scripts:r?.scripts})}constructor(r,t=!1){if(Bu.add(this),l.set(this,new nq.default),Bt.set(this,void 0),Object.defineProperty(this,"v4",{enumerable:!0,configurable:!0,writable:!0,value:{}}),Ut.set(this,void 0),Object.defineProperty(this,"select",{enumerable:!0,configurable:!0,writable:!0,value:this.SELECT}),Object.defineProperty(this,"EXEC",{enumerable:!0,configurable:!0,writable:!0,value:this.exec}),tq(this,Bt,r,"f"),t)V(this,Bu,"m",eq).call(this)}commandsExecutor(r,t){return this.addCommand(r.transformArguments(...t),r.transformReply)}SELECT(r,t){return tq(this,Ut,r,"f"),this.addCommand(["SELECT",r.toString()],t)}addCommand(r,t){return V(this,l,"f").addCommand(r,t),this}functionsExecutor(r,t,u){return V(this,l,"f").addFunction(u,r,t),this}scriptsExecutor(r,t){return V(this,l,"f").addScript(r,t),this}async exec(r=!1){if(r)return this.execAsPipeline();return V(this,l,"f").handleExecReplies(await V(this,Bt,"f").call(this,V(this,l,"f").queue,V(this,Ut,"f"),nq.default.generateChainId()))}async execAsPipeline(){if(V(this,l,"f").queue.length===0)return[];return V(this,l,"f").transformReplies(await V(this,Bt,"f").call(this,V(this,l,"f").queue,V(this,Ut,"f")))}}l=new WeakMap,Bt=new WeakMap,Ut=new WeakMap,Bu=new WeakSet,eq=function r(){var t,u;this.v4.addCommand=this.addCommand.bind(this),this.addCommand=(...n)=>{return V(this,l,"f").addCommand(Uu.transformLegacyCommandArguments(n)),this},this.v4.exec=this.exec.bind(this),this.exec=(n)=>{this.v4.exec().then((e)=>{if(!n)return;n(null,e)}).catch((e)=>{if(!n)return;n(e)})};for(let[n,e]of Object.entries(fq.default))V(this,Bu,"m",uq).call(this,n,e),(t=this)[u=n.toLowerCase()]??(t[u]=this[n])},uq=function r(t,u){this.v4[t]=this[t].bind(this.v4),this[t]=u&&u.TRANSFORM_LEGACY_REPLY&&u.transformReply?(...n)=>{return V(this,l,"f").addCommand([t,...Uu.transformLegacyCommandArguments(n)],u.transformReply),this}:(...n)=>this.addCommand(t,...n)};Br.default=Mr;Uu.attachCommands({BaseClass:Mr,commands:fq.default,executor:Mr.prototype.commandsExecutor})});var Aq=f((hOr,mq)=>{mq.exports=function(r){if(typeof r.create!=="function")throw new TypeError("factory.create must be a function");if(typeof r.destroy!=="function")throw new TypeError("factory.destroy must be a function");if(typeof r.validate!=="undefined"&&typeof r.validate!=="function")throw new TypeError("factory.validate must be a function")}});var Iq=f((wOr,sq)=>{class Eq{constructor(){this.fifo=!0,this.priorityRange=1,this.testOnBorrow=!1,this.testOnReturn=!1,this.autostart=!0,this.evictionRunIntervalMillis=0,this.numTestsPerEvictionRun=3,this.softIdleTimeoutMillis=-1,this.idleTimeoutMillis=30000,this.acquireTimeoutMillis=null,this.destroyTimeoutMillis=null,this.maxWaitingClients=null,this.min=null,this.max=null,this.Promise=Promise}}sq.exports=Eq});var Yq=f((dOr,Nq)=>{var Fl=Iq();class _q{constructor(r){let t=new Fl;if(r=r||{},this.fifo=typeof r.fifo==="boolean"?r.fifo:t.fifo,this.priorityRange=r.priorityRange||t.priorityRange,this.testOnBorrow=typeof r.testOnBorrow==="boolean"?r.testOnBorrow:t.testOnBorrow,this.testOnReturn=typeof r.testOnReturn==="boolean"?r.testOnReturn:t.testOnReturn,this.autostart=typeof r.autostart==="boolean"?r.autostart:t.autostart,r.acquireTimeoutMillis)this.acquireTimeoutMillis=parseInt(r.acquireTimeoutMillis,10);if(r.destroyTimeoutMillis)this.destroyTimeoutMillis=parseInt(r.destroyTimeoutMillis,10);if(r.maxWaitingClients!==void 0)this.maxWaitingClients=parseInt(r.maxWaitingClients,10);this.max=parseInt(r.max,10),this.min=parseInt(r.min,10),this.max=Math.max(isNaN(this.max)?1:this.max,1),this.min=Math.min(isNaN(this.min)?0:this.min,this.max),this.evictionRunIntervalMillis=r.evictionRunIntervalMillis||t.evictionRunIntervalMillis,this.numTestsPerEvictionRun=r.numTestsPerEvictionRun||t.numTestsPerEvictionRun,this.softIdleTimeoutMillis=r.softIdleTimeoutMillis||t.softIdleTimeoutMillis,this.idleTimeoutMillis=r.idleTimeoutMillis||t.idleTimeoutMillis,this.Promise=r.Promise!=null?r.Promise:t.Promise}}Nq.exports=_q});var hu=f((COr,gq)=>{class Er{constructor(r){this._state=Er.PENDING,this._resolve=void 0,this._reject=void 0,this._promise=new r((t,u)=>{this._resolve=t,this._reject=u})}get state(){return this._state}get promise(){return this._promise}reject(r){if(this._state!==Er.PENDING)return;this._state=Er.REJECTED,this._reject(r)}resolve(r){if(this._state!==Er.PENDING)return;this._state=Er.FULFILLED,this._resolve(r)}}Er.PENDING="PENDING";Er.FULFILLED="FULFILLED";Er.REJECTED="REJECTED";gq.exports=Er});var xq=f((GOr,Rq)=>{class Dq extends Error{constructor(r){super(r);if(this.name=this.constructor.name,this.message=r,typeof Error.captureStackTrace==="function")Error.captureStackTrace(this,this.constructor);else this.stack=new Error(r).stack}}class Oq extends Dq{constructor(r){super(r)}}Rq.exports={TimeoutError:Oq}});var Xq=f((kOr,cq)=>{var Jl=hu(),$l=xq();function zl(r,t){return function u(){return r.apply(t,arguments)}}class ye extends Jl{constructor(r,t){super(t);if(this._creationTimestamp=Date.now(),this._timeout=null,r!==void 0)this.setTimeout(r)}setTimeout(r){if(this._state!==ye.PENDING)return;let t=parseInt(r,10);if(isNaN(t)||t<=0)throw new Error("delay must be a positive int");let u=Date.now()-this._creationTimestamp;if(this._timeout)this.removeTimeout();this._timeout=setTimeout(zl(this._fireTimeout,this),Math.max(t-u,0))}removeTimeout(){if(this._timeout)clearTimeout(this._timeout);this._timeout=null}_fireTimeout(){this.reject(new $l.TimeoutError("ResourceRequest timed out"))}reject(r){this.removeTimeout(),super.reject(r)}resolve(r){this.removeTimeout(),super.resolve(r)}}cq.exports=ye});var Sq=f((iOr,Kq)=>{var Ql=hu();class jq extends Ql{constructor(r,t){super(t);this._creationTimestamp=Date.now(),this.pooledResource=r}reject(){}}Kq.exports=jq});var bq=f((aOr,Mq)=>{var Vl={ALLOCATED:"ALLOCATED",IDLE:"IDLE",INVALID:"INVALID",RETURNING:"RETURNING",VALIDATION:"VALIDATION"};Mq.exports=Vl});var qq=f((lOr,pq)=>{var Ur=bq();class Tq{constructor(r){this.creationTime=Date.now(),this.lastReturnTime=null,this.lastBorrowTime=null,this.lastIdleTime=null,this.obj=r,this.state=Ur.IDLE}allocate(){this.lastBorrowTime=Date.now(),this.state=Ur.ALLOCATED}deallocate(){this.lastReturnTime=Date.now(),this.state=Ur.IDLE}invalidate(){this.state=Ur.INVALID}test(){this.state=Ur.VALIDATION}idle(){this.lastIdleTime=Date.now(),this.state=Ur.IDLE}returning(){this.state=Ur.RETURNING}}pq.exports=Tq});var ve=f((rRr,vq)=>{class yq{evict(r,t,u){let n=Date.now()-t.lastIdleTime;if(r.softIdleTimeoutMillis>0&&r.softIdleTimeoutMillis<n&&r.min<u)return!0;if(r.idleTimeoutMillis<n)return!0;return!1}}vq.exports=yq});var Le=f((tRr,Fq)=>{class Lq{constructor(){this.head=null,this.tail=null,this.length=0}insertBeginning(r){if(this.head===null)this.head=r,this.tail=r,r.prev=null,r.next=null,this.length++;else this.insertBefore(this.head,r)}insertEnd(r){if(this.tail===null)this.insertBeginning(r);else this.insertAfter(this.tail,r)}insertAfter(r,t){if(t.prev=r,t.next=r.next,r.next===null)this.tail=t;else r.next.prev=t;r.next=t,this.length++}insertBefore(r,t){if(t.prev=r.prev,t.next=r,r.prev===null)this.head=t;else r.prev.next=t;r.prev=t,this.length++}remove(r){if(r.prev===null)this.head=r.next;else r.prev.next=r.next;if(r.next===null)this.tail=r.prev;else r.next.prev=r.prev;r.prev=null,r.next=null,this.length--}static createNode(r){return{prev:null,next:null,data:r}}}Fq.exports=Lq});var zq=f((uRr,$q)=>{class Jq{constructor(r,t){this._list=r,this._direction=t===!0?"prev":"next",this._startPosition=t===!0?"tail":"head",this._started=!1,this._cursor=null,this._done=!1}_start(){this._cursor=this._list[this._startPosition],this._started=!0}_advanceCursor(){if(this._started===!1){this._started=!0,this._cursor=this._list[this._startPosition];return}this._cursor=this._cursor[this._direction]}reset(){this._done=!1,this._started=!1,this._cursor=null}remove(){if(this._started===!1||this._done===!0||this._isCursorDetached())return!1;this._list.remove(this._cursor)}next(){if(this._done===!0)return{done:!0};if(this._advanceCursor(),this._cursor===null||this._isCursorDetached())return this._done=!0,{done:!0};return{value:this._cursor,done:!1}}_isCursorDetached(){return this._cursor.prev===null&&this._cursor.next===null&&this._list.tail!==this._cursor&&this._list.head!==this._cursor}}$q.exports=Jq});var Fe=f((nRr,Vq)=>{var Wl=zq();class Qq extends Wl{next(){let r=super.next();if(r.value)r.value=r.value.data;return r}}Vq.exports=Qq});var wu=f((eRr,Zq)=>{var Je=Le(),$e=Fe();class Wq{constructor(){this._list=new Je}shift(){if(this.length===0)return;let r=this._list.head;return this._list.remove(r),r.data}unshift(r){let t=Je.createNode(r);this._list.insertBeginning(t)}push(r){let t=Je.createNode(r);this._list.insertEnd(t)}pop(){if(this.length===0)return;let r=this._list.tail;return this._list.remove(r),r.data}[Symbol.iterator](){return new $e(this._list)}iterator(){return new $e(this._list)}reverseIterator(){return new $e(this._list,!0)}get head(){if(this.length===0)return;return this._list.head.data}get tail(){if(this.length===0)return;return this._list.tail.data}get length(){return this._list.length}}Zq.exports=Wq});var Bq=f((fRr,Hq)=>{var Zl=Le(),Pl=wu();class Pq extends Pl{push(r){let t=Zl.createNode(r);r.promise.catch(this._createTimeoutRejectionHandler(t)),this._list.insertEnd(t)}_createTimeoutRejectionHandler(r){return(t)=>{if(t.name==="TimeoutError")this._list.remove(r)}}}Hq.exports=Pq});var ze=f((oRr,hq)=>{var Hl=Bq();class Uq{constructor(r){this._size=Math.max(+r|0,1),this._slots=[];for(let t=0;t<this._size;t++)this._slots.push(new Hl)}get length(){let r=0;for(let t=0,u=this._slots.length;t<u;t++)r+=this._slots[t].length;return r}enqueue(r,t){if(t=t&&+t|0||0,t){if(t<0||t>=this._size)t=this._size-1}this._slots[t].push(r)}dequeue(){for(let r=0,t=this._slots.length;r<t;r+=1)if(this._slots[r].length)return this._slots[r].shift();return}get head(){for(let r=0,t=this._slots.length;r<t;r+=1)if(this._slots[r].length>0)return this._slots[r].head;return}get tail(){for(let r=this._slots.length-1;r>=0;r--)if(this._slots[r].length>0)return this._slots[r].tail;return}}hq.exports=Uq});var dq=f((Bl)=>{function wq(){}Bl.reflector=function(r){return r.then(wq,wq)}});var kq=f((_Rr,Gq)=>{var hl=or("events").EventEmitter,wl=Aq(),dl=Yq(),Cl=Xq(),Gl=Sq(),kl=qq(),ARr=ve(),ERr=wu(),il=hu(),sRr=ze(),IRr=Fe(),ht=dq().reflector;class Cq extends hl{constructor(r,t,u,n,e){super();if(wl(n),this._config=new dl(e),this._Promise=this._config.Promise,this._factory=n,this._draining=!1,this._started=!1,this._waitingClientsQueue=new u(this._config.priorityRange),this._factoryCreateOperations=new Set,this._factoryDestroyOperations=new Set,this._availableObjects=new t,this._testOnBorrowResources=new Set,this._testOnReturnResources=new Set,this._validationOperations=new Set,this._allObjects=new Set,this._resourceLoans=new Map,this._evictionIterator=this._availableObjects.iterator(),this._evictor=new r,this._scheduledEviction=null,this._config.autostart===!0)this.start()}_destroy(r){r.invalidate(),this._allObjects.delete(r);let t=this._factory.destroy(r.obj),u=this._config.destroyTimeoutMillis?this._Promise.resolve(this._applyDestroyTimeout(t)):this._Promise.resolve(t);this._trackOperation(u,this._factoryDestroyOperations).catch((n)=>{this.emit("factoryDestroyError",n)}),this._ensureMinimum()}_applyDestroyTimeout(r){let t=new this._Promise((u,n)=>{setTimeout(()=>{n(new Error("destroy timed out"))},this._config.destroyTimeoutMillis).unref()});return this._Promise.race([t,r])}_testOnBorrow(){if(this._availableObjects.length<1)return!1;let r=this._availableObjects.shift();r.test(),this._testOnBorrowResources.add(r);let t=this._factory.validate(r.obj),u=this._Promise.resolve(t);return this._trackOperation(u,this._validationOperations).then((n)=>{if(this._testOnBorrowResources.delete(r),n===!1){r.invalidate(),this._destroy(r),this._dispense();return}this._dispatchPooledResourceToNextWaitingClient(r)}),!0}_dispatchResource(){if(this._availableObjects.length<1)return!1;let r=this._availableObjects.shift();return this._dispatchPooledResourceToNextWaitingClient(r),!1}_dispense(){let r=this._waitingClientsQueue.length;if(r<1)return;let t=r-this._potentiallyAllocableResourceCount,u=Math.min(this.spareResourceCapacity,t);for(let n=0;u>n;n++)this._createResource();if(this._config.testOnBorrow===!0){let n=r-this._testOnBorrowResources.size,e=Math.min(this._availableObjects.length,n);for(let o=0;e>o;o++)this._testOnBorrow()}if(this._config.testOnBorrow===!1){let n=Math.min(this._availableObjects.length,r);for(let e=0;n>e;e++)this._dispatchResource()}}_dispatchPooledResourceToNextWaitingClient(r){let t=this._waitingClientsQueue.dequeue();if(t===void 0||t.state!==il.PENDING)return this._addPooledResourceToAvailableObjects(r),!1;let u=new Gl(r,this._Promise);return this._resourceLoans.set(r.obj,u),r.allocate(),t.resolve(r.obj),!0}_trackOperation(r,t){return t.add(r),r.then((u)=>{return t.delete(r),this._Promise.resolve(u)},(u)=>{return t.delete(r),this._Promise.reject(u)})}_createResource(){let r=this._factory.create(),t=this._Promise.resolve(r).then((u)=>{let n=new kl(u);this._allObjects.add(n),this._addPooledResourceToAvailableObjects(n)});this._trackOperation(t,this._factoryCreateOperations).then(()=>{return this._dispense(),null}).catch((u)=>{this.emit("factoryCreateError",u),this._dispense()})}_ensureMinimum(){if(this._draining===!0)return;let r=this._config.min-this._count;for(let t=0;t<r;t++)this._createResource()}_evict(){let r=Math.min(this._config.numTestsPerEvictionRun,this._availableObjects.length),t={softIdleTimeoutMillis:this._config.softIdleTimeoutMillis,idleTimeoutMillis:this._config.idleTimeoutMillis,min:this._config.min};for(let u=0;u<r;){let n=this._evictionIterator.next();if(n.done===!0&&this._availableObjects.length<1){this._evictionIterator.reset();return}if(n.done===!0&&this._availableObjects.length>0){this._evictionIterator.reset();continue}let e=n.value,o=this._evictor.evict(t,e,this._availableObjects.length);if(u++,o===!0)this._evictionIterator.remove(),this._destroy(e)}}_scheduleEvictorRun(){if(this._config.evictionRunIntervalMillis>0)this._scheduledEviction=setTimeout(()=>{this._evict(),this._scheduleEvictorRun()},this._config.evictionRunIntervalMillis).unref()}_descheduleEvictorRun(){if(this._scheduledEviction)clearTimeout(this._scheduledEviction);this._scheduledEviction=null}start(){if(this._draining===!0)return;if(this._started===!0)return;this._started=!0,this._scheduleEvictorRun(),this._ensureMinimum()}acquire(r){if(this._started===!1&&this._config.autostart===!1)this.start();if(this._draining)return this._Promise.reject(new Error("pool is draining and cannot accept work"));if(this.spareResourceCapacity<1&&this._availableObjects.length<1&&this._config.maxWaitingClients!==void 0&&this._waitingClientsQueue.length>=this._config.maxWaitingClients)return this._Promise.reject(new Error("max waitingClients count exceeded"));let t=new Cl(this._config.acquireTimeoutMillis,this._Promise);return this._waitingClientsQueue.enqueue(t,r),this._dispense(),t.promise}use(r,t){return this.acquire(t).then((u)=>{return r(u).then((n)=>{return this.release(u),n},(n)=>{throw this.destroy(u),n})})}isBorrowedResource(r){return this._resourceLoans.has(r)}release(r){let t=this._resourceLoans.get(r);if(t===void 0)return this._Promise.reject(new Error("Resource not currently part of this pool"));this._resourceLoans.delete(r),t.resolve();let u=t.pooledResource;return u.deallocate(),this._addPooledResourceToAvailableObjects(u),this._dispense(),this._Promise.resolve()}destroy(r){let t=this._resourceLoans.get(r);if(t===void 0)return this._Promise.reject(new Error("Resource not currently part of this pool"));this._resourceLoans.delete(r),t.resolve();let u=t.pooledResource;return u.deallocate(),this._destroy(u),this._dispense(),this._Promise.resolve()}_addPooledResourceToAvailableObjects(r){if(r.idle(),this._config.fifo===!0)this._availableObjects.push(r);else this._availableObjects.unshift(r)}drain(){return this._draining=!0,this.__allResourceRequestsSettled().then(()=>{return this.__allResourcesReturned()}).then(()=>{this._descheduleEvictorRun()})}__allResourceRequestsSettled(){if(this._waitingClientsQueue.length>0)return ht(this._waitingClientsQueue.tail.promise);return this._Promise.resolve()}__allResourcesReturned(){let r=Array.from(this._resourceLoans.values()).map((t)=>t.promise).map(ht);return this._Promise.all(r)}clear(){let r=Array.from(this._factoryCreateOperations).map(ht);return this._Promise.all(r).then(()=>{for(let u of this._availableObjects)this._destroy(u);let t=Array.from(this._factoryDestroyOperations).map(ht);return ht(this._Promise.all(t))})}ready(){return new this._Promise((r)=>{let t=()=>{if(this.available>=this.min)r();else setTimeout(t,100)};t()})}get _potentiallyAllocableResourceCount(){return this._availableObjects.length+this._testOnBorrowResources.size+this._testOnReturnResources.size+this._factoryCreateOperations.size}get _count(){return this._allObjects.size+this._factoryCreateOperations.size}get spareResourceCapacity(){return this._config.max-(this._allObjects.size+this._factoryCreateOperations.size)}get size(){return this._count}get available(){return this._availableObjects.length}get borrowed(){return this._resourceLoans.size}get pending(){return this._waitingClientsQueue.length}get max(){return this._config.max}get min(){return this._config.min}}Gq.exports=Cq});var uy=f((NRr,ty)=>{var iq=kq(),aq=wu(),lq=ze(),ry=ve();ty.exports={Pool:iq,Deque:aq,PriorityQueue:lq,DefaultEvictor:ry,createPool:function(r,t){return new iq(ry,aq,lq,r,t)}}});var ny=f((YRr,al)=>{al.exports={name:"@redis/client",version:"1.5.17",license:"MIT",main:"./dist/index.js",types:"./dist/index.d.ts",files:["dist/"],scripts:{test:"nyc -r text-summary -r lcov mocha -r source-map-support/register -r ts-node/register './lib/**/*.spec.ts'",build:"tsc",lint:"eslint ./*.ts ./lib/**/*.ts",documentation:"typedoc"},dependencies:{"cluster-key-slot":"1.1.2","generic-pool":"3.9.0",yallist:"4.0.0"},devDependencies:{"@istanbuljs/nyc-config-typescript":"^1.0.2","@redis/test-utils":"*","@types/node":"^20.6.2","@types/sinon":"^10.0.16","@types/yallist":"^4.0.1","@typescript-eslint/eslint-plugin":"^6.7.2","@typescript-eslint/parser":"^6.7.2",eslint:"^8.49.0",nyc:"^15.1.0","release-it":"^16.1.5",sinon:"^16.0.0","source-map-support":"^0.5.21","ts-node":"^10.9.1",typedoc:"^0.25.1",typescript:"^5.2.2"},engines:{node:">=14"},repository:{type:"git",url:"git://github.com/redis/node-redis.git"},bugs:{url:"https://github.com/redis/node-redis/issues"},homepage:"https://github.com/redis/node-redis/tree/master/packages/client",keywords:["redis"]}});var Pe=f((dr)=>{var E=dr&&dr.__classPrivateFieldGet||function(r,t,u,n){if(u==="a"&&!n)throw new TypeError("Private accessor was defined without a getter");if(typeof t==="function"?r!==t||!n:!t.has(r))throw new TypeError("Cannot read private member from an object whose class did not declare it");return u==="m"?n:u==="a"?n.call(r):n?n.value:t.get(r)},Ir=dr&&dr.__classPrivateFieldSet||function(r,t,u,n,e){if(n==="m")throw new TypeError("Private method is not writable");if(n==="a"&&!e)throw new TypeError("Private accessor was defined without a setter");if(typeof t==="function"?r!==t||!e:!t.has(r))throw new TypeError("Cannot write private member to an object whose class did not declare it");return n==="a"?e.call(r,u):e?e.value=u:t.set(r,u),u},N,Rr,b,q,j,_r,dt,hr,oy,my,Ay,Ve,Ey,Qe,w,Tr,ey,Nr,Or,br,We,Ze;Object.defineProperty(dr,"__esModule",{value:!0});var wt=Ne(),ll=qp(),rrr=hp(),sy=oq(),trr=or("events"),fy=Te(),sr=Et(),urr=uy(),wr=gr(),nrr=or("url"),st=Wu(),err=ny();class It extends trr.EventEmitter{static commandOptions(r){return fy.commandOptions(r)}static extend(r){let t=sr.attachExtensions({BaseClass:Rr,modulesExecutor:Rr.prototype.commandsExecutor,modules:r?.modules,functionsExecutor:Rr.prototype.functionsExecuter,functions:r?.functions,scriptsExecutor:Rr.prototype.scriptsExecuter,scripts:r?.scripts});if(t!==Rr)t.prototype.Multi=sy.default.extend(r);return t}static create(r){return new(Rr.extend(r))(r)}static parseURL(r){let{hostname:t,port:u,protocol:n,username:e,password:o,pathname:A}=new nrr.URL(r),s={socket:{host:t}};if(n==="rediss:")s.socket.tls=!0;else if(n!=="redis:")throw new TypeError("Invalid protocol");if(u)s.socket.port=Number(u);if(e)s.username=decodeURIComponent(e);if(o)s.password=decodeURIComponent(o);if(A.length>1){let I=Number(A.substring(1));if(isNaN(I))throw new TypeError("Invalid pathname");s.database=I}return s}get options(){return E(this,b,"f")}get isOpen(){return E(this,q,"f").isOpen}get isReady(){return E(this,q,"f").isReady}get isPubSubActive(){return E(this,j,"f").isPubSubActive}get v4(){if(!E(this,b,"f")?.legacyMode)throw new Error('the client is not in "legacy mode"');return E(this,dt,"f")}constructor(r){super();N.add(this),Object.defineProperty(this,"commandOptions",{enumerable:!0,configurable:!0,writable:!0,value:Rr.commandOptions}),b.set(this,void 0),q.set(this,void 0),j.set(this,void 0),_r.set(this,void 0),dt.set(this,{}),hr.set(this,0),Tr.set(this,void 0),Object.defineProperty(this,"select",{enumerable:!0,configurable:!0,writable:!0,value:this.SELECT}),Object.defineProperty(this,"subscribe",{enumerable:!0,configurable:!0,writable:!0,value:this.SUBSCRIBE}),Object.defineProperty(this,"unsubscribe",{enumerable:!0,configurable:!0,writable:!0,value:this.UNSUBSCRIBE}),Object.defineProperty(this,"pSubscribe",{enumerable:!0,configurable:!0,writable:!0,value:this.PSUBSCRIBE}),Object.defineProperty(this,"pUnsubscribe",{enumerable:!0,configurable:!0,writable:!0,value:this.PUNSUBSCRIBE}),Object.defineProperty(this,"sSubscribe",{enumerable:!0,configurable:!0,writable:!0,value:this.SSUBSCRIBE}),Object.defineProperty(this,"sUnsubscribe",{enumerable:!0,configurable:!0,writable:!0,value:this.SUNSUBSCRIBE}),Object.defineProperty(this,"quit",{enumerable:!0,configurable:!0,writable:!0,value:this.QUIT}),Object.defineProperty(this,"multi",{enumerable:!0,configurable:!0,writable:!0,value:this.MULTI}),Ir(this,b,E(this,N,"m",oy).call(this,r),"f"),Ir(this,j,E(this,N,"m",my).call(this),"f"),Ir(this,q,E(this,N,"m",Ay).call(this),"f"),Ir(this,_r,E(this,N,"m",Ve).call(this),"f"),E(this,N,"m",Ey).call(this)}duplicate(r){return new(Object.getPrototypeOf(this)).constructor({...E(this,b,"f"),...r})}async connect(){return Ir(this,_r,E(this,_r,"f")??E(this,N,"m",Ve).call(this),"f"),await E(this,q,"f").connect(),this}async commandsExecutor(r,t){let{args:u,options:n}=sr.transformCommandArguments(r,t);return sr.transformCommandReply(r,await E(this,N,"m",Nr).call(this,u,n),u.preserve)}sendCommand(r,t){return E(this,N,"m",Nr).call(this,r,t)}async functionsExecuter(r,t,u){let{args:n,options:e}=sr.transformCommandArguments(r,t);return sr.transformCommandReply(r,await this.executeFunction(u,r,n,e),n.preserve)}executeFunction(r,t,u,n){return E(this,N,"m",Nr).call(this,sr.fCallArguments(r,t,u),n)}async scriptsExecuter(r,t){let{args:u,options:n}=sr.transformCommandArguments(r,t);return sr.transformCommandReply(r,await this.executeScript(r,u,n),u.preserve)}async executeScript(r,t,u){let n=["EVALSHA",r.SHA1];if(r.NUMBER_OF_KEYS!==void 0)n.push(r.NUMBER_OF_KEYS.toString());n.push(...t);try{return await E(this,N,"m",Nr).call(this,n,u)}catch(e){if(!e?.message?.startsWith?.("NOSCRIPT"))throw e;return n[0]="EVAL",n[1]=r.SCRIPT,E(this,N,"m",Nr).call(this,n,u)}}async SELECT(r,t){if(!fy.isCommandOptions(r))t=r,r=null;await E(this,N,"m",Nr).call(this,["SELECT",t.toString()],r),Ir(this,hr,t,"f")}SUBSCRIBE(r,t,u){return E(this,N,"m",Or).call(this,E(this,j,"f").subscribe(st.PubSubType.CHANNELS,r,t,u))}UNSUBSCRIBE(r,t,u){return E(this,N,"m",Or).call(this,E(this,j,"f").unsubscribe(st.PubSubType.CHANNELS,r,t,u))}PSUBSCRIBE(r,t,u){return E(this,N,"m",Or).call(this,E(this,j,"f").subscribe(st.PubSubType.PATTERNS,r,t,u))}PUNSUBSCRIBE(r,t,u){return E(this,N,"m",Or).call(this,E(this,j,"f").unsubscribe(st.PubSubType.PATTERNS,r,t,u))}SSUBSCRIBE(r,t,u){return E(this,N,"m",Or).call(this,E(this,j,"f").subscribe(st.PubSubType.SHARDED,r,t,u))}SUNSUBSCRIBE(r,t,u){return E(this,N,"m",Or).call(this,E(this,j,"f").unsubscribe(st.PubSubType.SHARDED,r,t,u))}getPubSubListeners(r){return E(this,j,"f").getPubSubListeners(r)}extendPubSubChannelListeners(r,t,u){return E(this,N,"m",Or).call(this,E(this,j,"f").extendPubSubChannelListeners(r,t,u))}extendPubSubListeners(r,t){return E(this,N,"m",Or).call(this,E(this,j,"f").extendPubSubListeners(r,t))}QUIT(){return E(this,q,"f").quit(async()=>{if(E(this,Tr,"f"))clearTimeout(E(this,Tr,"f"));let r=E(this,j,"f").addCommand(["QUIT"]);E(this,N,"m",br).call(this);let[t]=await Promise.all([r,E(this,N,"m",Ze).call(this)]);return t})}executeIsolated(r){if(!E(this,_r,"f"))return Promise.reject(new wr.ClientClosedError);return E(this,_r,"f").use(r)}MULTI(){return new this.Multi(this.multiExecutor.bind(this),E(this,b,"f")?.legacyMode)}async multiExecutor(r,t,u){if(!E(this,q,"f").isOpen)return Promise.reject(new wr.ClientClosedError);let n=u?Promise.all([E(this,j,"f").addCommand(["MULTI"],{chainId:u}),E(this,N,"m",We).call(this,r,u),E(this,j,"f").addCommand(["EXEC"],{chainId:u})]):E(this,N,"m",We).call(this,r);E(this,N,"m",br).call(this);let e=await n;if(t!==void 0)Ir(this,hr,t,"f");return e}async*scanIterator(r){let t=0;do{let u=await this.scan(t,r);t=u.cursor;for(let n of u.keys)yield n}while(t!==0)}async*hScanIterator(r,t){let u=0;do{let n=await this.hScan(r,u,t);u=n.cursor;for(let e of n.tuples)yield e}while(u!==0)}async*hScanNoValuesIterator(r,t){let u=0;do{let n=await this.hScanNoValues(r,u,t);u=n.cursor;for(let e of n.keys)yield e}while(u!==0)}async*sScanIterator(r,t){let u=0;do{let n=await this.sScan(r,u,t);u=n.cursor;for(let e of n.members)yield e}while(u!==0)}async*zScanIterator(r,t){let u=0;do{let n=await this.zScan(r,u,t);u=n.cursor;for(let e of n.members)yield e}while(u!==0)}async disconnect(){if(E(this,Tr,"f"))clearTimeout(E(this,Tr,"f"));E(this,j,"f").flushAll(new wr.DisconnectsClientError),E(this,q,"f").disconnect(),await E(this,N,"m",Ze).call(this)}ref(){E(this,q,"f").ref()}unref(){E(this,q,"f").unref()}}Rr=It,b=new WeakMap,q=new WeakMap,j=new WeakMap,_r=new WeakMap,dt=new WeakMap,hr=new WeakMap,Tr=new WeakMap,N=new WeakSet,oy=function r(t){if(t?.url){let u=Rr.parseURL(t.url);if(t.socket)u.socket=Object.assign(t.socket,u.socket);Object.assign(t,u)}if(t?.database)Ir(this,hr,t.database,"f");return t},my=function r(){return new rrr.default(E(this,b,"f")?.commandsQueueMaxLength,(t,u)=>this.emit("sharded-channel-moved",t,u))},Ay=function r(){let t=async()=>{let u=[];if(E(this,hr,"f")!==0)u.push(E(this,j,"f").addCommand(["SELECT",E(this,hr,"f").toString()],{asap:!0}));if(E(this,b,"f")?.readonly)u.push(E(this,j,"f").addCommand(wt.default.READONLY.transformArguments(),{asap:!0}));if(!E(this,b,"f")?.disableClientInfo)u.push(E(this,j,"f").addCommand(["CLIENT","SETINFO","LIB-VER",err.version],{asap:!0}).catch((e)=>{if(!(e instanceof wr.ErrorReply))throw e})),u.push(E(this,j,"f").addCommand(["CLIENT","SETINFO","LIB-NAME",E(this,b,"f")?.clientInfoTag?`node-redis(${E(this,b,"f").clientInfoTag})`:"node-redis"],{asap:!0}).catch((e)=>{if(!(e instanceof wr.ErrorReply))throw e}));if(E(this,b,"f")?.name)u.push(E(this,j,"f").addCommand(wt.default.CLIENT_SETNAME.transformArguments(E(this,b,"f").name),{asap:!0}));if(E(this,b,"f")?.username||E(this,b,"f")?.password)u.push(E(this,j,"f").addCommand(wt.default.AUTH.transformArguments({username:E(this,b,"f").username,password:E(this,b,"f").password??""}),{asap:!0}));let n=E(this,j,"f").resubscribe();if(n)u.push(n);if(u.length)E(this,N,"m",br).call(this,!0),await Promise.all(u)};return new ll.default(t,E(this,b,"f")?.socket).on("data",(u)=>E(this,j,"f").onReplyChunk(u)).on("error",(u)=>{if(this.emit("error",u),E(this,q,"f").isOpen&&!E(this,b,"f")?.disableOfflineQueue)E(this,j,"f").flushWaitingForReply(u);else E(this,j,"f").flushAll(u)}).on("connect",()=>{this.emit("connect")}).on("ready",()=>{this.emit("ready"),E(this,N,"m",ey).call(this),E(this,N,"m",br).call(this)}).on("reconnecting",()=>this.emit("reconnecting")).on("drain",()=>E(this,N,"m",br).call(this)).on("end",()=>this.emit("end"))},Ve=function r(){return urr.createPool({create:async()=>{let t=this.duplicate({isolationPoolOptions:void 0}).on("error",(u)=>this.emit("error",u));return await t.connect(),t},destroy:(t)=>t.disconnect()},E(this,b,"f")?.isolationPoolOptions)},Ey=function r(){var t,u;if(!E(this,b,"f")?.legacyMode)return;E(this,dt,"f").sendCommand=E(this,N,"m",Nr).bind(this),this.sendCommand=(...n)=>{let e=E(this,N,"m",Qe).call(this,...n);if(e)e.promise.then((o)=>e.callback(null,o)).catch((o)=>e.callback(o))};for(let[n,e]of Object.entries(wt.default))E(this,N,"m",w).call(this,n,e),(t=this)[u=n.toLowerCase()]??(t[u]=this[n]);E(this,N,"m",w).call(this,"SELECT"),E(this,N,"m",w).call(this,"select"),E(this,N,"m",w).call(this,"SUBSCRIBE"),E(this,N,"m",w).call(this,"subscribe"),E(this,N,"m",w).call(this,"PSUBSCRIBE"),E(this,N,"m",w).call(this,"pSubscribe"),E(this,N,"m",w).call(this,"UNSUBSCRIBE"),E(this,N,"m",w).call(this,"unsubscribe"),E(this,N,"m",w).call(this,"PUNSUBSCRIBE"),E(this,N,"m",w).call(this,"pUnsubscribe"),E(this,N,"m",w).call(this,"QUIT"),E(this,N,"m",w).call(this,"quit")},Qe=function r(...t){let u=typeof t[t.length-1]==="function"?t.pop():void 0,n=E(this,N,"m",Nr).call(this,sr.transformLegacyCommandArguments(t));if(u)return{promise:n,callback:u};n.catch((e)=>this.emit("error",e))},w=function r(t,u){E(this,dt,"f")[t]=this[t].bind(this),this[t]=u&&u.TRANSFORM_LEGACY_REPLY&&u.transformReply?(...n)=>{let e=E(this,N,"m",Qe).call(this,t,...n);if(e)e.promise.then((o)=>e.callback(null,u.transformReply(o))).catch((o)=>e.callback(o))}:(...n)=>this.sendCommand(t,...n)},ey=function r(){if(!E(this,b,"f")?.pingInterval||!E(this,q,"f").isReady)return;clearTimeout(E(this,Tr,"f")),Ir(this,Tr,setTimeout(()=>{if(!E(this,q,"f").isReady)return;E(this,N,"m",Nr).call(this,["PING"]).then((t)=>this.emit("ping-interval",t)).catch((t)=>this.emit("error",t)).finally(()=>E(this,N,"m",r).call(this))},E(this,b,"f").pingInterval),"f")},Nr=function r(t,u){if(!E(this,q,"f").isOpen)return Promise.reject(new wr.ClientClosedError);else if(u?.isolated)return this.executeIsolated((e)=>e.sendCommand(t,{...u,isolated:!1}));else if(!E(this,q,"f").isReady&&E(this,b,"f")?.disableOfflineQueue)return Promise.reject(new wr.ClientOfflineError);let n=E(this,j,"f").addCommand(t,u);return E(this,N,"m",br).call(this),n},Or=function r(t){if(t===void 0)return Promise.resolve();return E(this,N,"m",br).call(this),t},br=function r(t=!1){if(E(this,q,"f").writableNeedDrain||!t&&!E(this,q,"f").isReady)return;E(this,q,"f").cork();while(!E(this,q,"f").writableNeedDrain){let u=E(this,j,"f").getCommandToSend();if(u===void 0)break;E(this,q,"f").writeCommand(u)}},We=function r(t,u){return Promise.all(t.map(({args:n})=>E(this,j,"f").addCommand(n,{chainId:u})))},Ze=async function r(){await E(this,_r,"f").drain(),await E(this,_r,"f").clear(),Ir(this,_r,void 0,"f")};dr.default=It;sr.attachCommands({BaseClass:It,commands:wt.default,executor:It.prototype.commandsExecutor});It.prototype.Multi=sy.default});var Ny=f((DRr,He)=>{var Iy=[0,4129,8258,12387,16516,20645,24774,28903,33032,37161,41290,45419,49548,53677,57806,61935,4657,528,12915,8786,21173,17044,29431,25302,37689,33560,45947,41818,54205,50076,62463,58334,9314,13379,1056,5121,25830,29895,17572,21637,42346,46411,34088,38153,58862,62927,50604,54669,13907,9842,5649,1584,30423,26358,22165,18100,46939,42874,38681,34616,63455,59390,55197,51132,18628,22757,26758,30887,2112,6241,10242,14371,51660,55789,59790,63919,35144,39273,43274,47403,23285,19156,31415,27286,6769,2640,14899,10770,56317,52188,64447,60318,39801,35672,47931,43802,27814,31879,19684,23749,11298,15363,3168,7233,60846,64911,52716,56781,44330,48395,36200,40265,32407,28342,24277,20212,15891,11826,7761,3696,65439,61374,57309,53244,48923,44858,40793,36728,37256,33193,45514,41451,53516,49453,61774,57711,4224,161,12482,8419,20484,16421,28742,24679,33721,37784,41979,46042,49981,54044,58239,62302,689,4752,8947,13010,16949,21012,25207,29270,46570,42443,38312,34185,62830,58703,54572,50445,13538,9411,5280,1153,29798,25671,21540,17413,42971,47098,34713,38840,59231,63358,50973,55100,9939,14066,1681,5808,26199,30326,17941,22068,55628,51565,63758,59695,39368,35305,47498,43435,22596,18533,30726,26663,6336,2273,14466,10403,52093,56156,60223,64286,35833,39896,43963,48026,19061,23124,27191,31254,2801,6864,10931,14994,64814,60687,56684,52557,48554,44427,40424,36297,31782,27655,23652,19525,15522,11395,7392,3265,61215,65342,53085,57212,44955,49082,36825,40952,28183,32310,20053,24180,11923,16050,3793,7920],frr=function r(t){var u,n=0,e=0,o=[],A=t.length;for(;n<A;n++)if(u=t.charCodeAt(n),u<128)o[e++]=u;else if(u<2048)o[e++]=u>>6|192,o[e++]=u&63|128;else if((u&64512)===55296&&n+1<t.length&&(t.charCodeAt(n+1)&64512)===56320)u=65536+((u&1023)<<10)+(t.charCodeAt(++n)&1023),o[e++]=u>>18|240,o[e++]=u>>12&63|128,o[e++]=u>>6&63|128,o[e++]=u&63|128;else o[e++]=u>>12|224,o[e++]=u>>6&63|128,o[e++]=u&63|128;return o},_y=He.exports=function r(t){var u,n=0,e=-1,o=0,A=0,s=typeof t==="string"?frr(t):t,I=s.length;while(n<I){if(u=s[n++],e===-1){if(u===123)e=n}else if(u!==125)A=Iy[(u^A>>8)&255]^A<<8;else if(n-1!==e)return A&16383;o=Iy[(u^o>>8)&255]^o<<8}return o&16383};He.exports.generateMulti=function r(t){var u=1,n=t.length,e=_y(t[0]);while(u<n)if(_y(t[u++])!==e)return-1;return e}});var Xy=f((ir)=>{var _=ir&&ir.__classPrivateFieldGet||function(r,t,u,n){if(u==="a"&&!n)throw new TypeError("Private accessor was defined without a getter");if(typeof t==="function"?r!==t||!n:!t.has(r))throw new TypeError("Cannot read private member from an object whose class did not declare it");return u==="m"?n:u==="a"?n.call(r):n?n.value:t.get(r)},Yr=ir&&ir.__classPrivateFieldSet||function(r,t,u,n,e){if(n==="m")throw new TypeError("Private method is not writable");if(n==="a"&&!e)throw new TypeError("Private accessor was defined without a setter");if(typeof t==="function"?r!==t||!e:!t.has(r))throw new TypeError("Cannot write private member to an object whose class did not declare it");return n==="a"?e.call(r,u):e?e.value=u:t.set(r,u),u},c,Ct,ie,W,Gt,Gr,kr,de,Be,du,Yy,gy,Ue,he,Cu,Ce,_t,Oy,Ge,Cr,Ry,Nt,xy,ke,cy;Object.defineProperty(ir,"__esModule",{value:!0});var orr=Pe(),mrr=gr(),Dy=or("util"),xr=Wu(),we=Ny();class ae{get isOpen(){return _(this,kr,"f")}constructor(r,t){c.add(this),W.set(this,void 0),Gt.set(this,void 0),Gr.set(this,void 0),Object.defineProperty(this,"slots",{enumerable:!0,configurable:!0,writable:!0,value:new Array(_(Ct,Ct,"f",ie))}),Object.defineProperty(this,"shards",{enumerable:!0,configurable:!0,writable:!0,value:new Array}),Object.defineProperty(this,"masters",{enumerable:!0,configurable:!0,writable:!0,value:new Array}),Object.defineProperty(this,"replicas",{enumerable:!0,configurable:!0,writable:!0,value:new Array}),Object.defineProperty(this,"nodeByAddress",{enumerable:!0,configurable:!0,writable:!0,value:new Map}),Object.defineProperty(this,"pubSubNode",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),kr.set(this,!1),_t.set(this,void 0),Nt.set(this,void 0),Yr(this,W,r,"f"),Yr(this,Gt,orr.default.extend(r),"f"),Yr(this,Gr,t,"f")}async connect(){if(_(this,kr,"f"))throw new Error("Cluster already open");Yr(this,kr,!0,"f");try{await _(this,c,"m",de).call(this)}catch(r){throw Yr(this,kr,!1,"f"),r}}nodeClient(r){return r.client??_(this,c,"m",Ce).call(this,r)}async rediscover(r){return Yr(this,_t,_(this,_t,"f")??_(this,c,"m",Oy).call(this,r).finally(()=>Yr(this,_t,void 0,"f")),"f"),_(this,_t,"f")}quit(){return _(this,c,"m",Ge).call(this,(r)=>r.quit())}disconnect(){return _(this,c,"m",Ge).call(this,(r)=>r.disconnect())}getClient(r,t){if(!r)return this.nodeClient(this.getRandomNode());let u=we(r);if(!t)return this.nodeClient(this.slots[u].master);return this.nodeClient(this.getSlotRandomNode(u))}getRandomNode(){return Yr(this,Nt,_(this,Nt,"f")??_(this,c,"m",Ry).call(this),"f"),_(this,Nt,"f").next().value}getSlotRandomNode(r){let t=this.slots[r];if(!t.replicas?.length)return t.master;return t.nodesIterator??(t.nodesIterator=_(this,c,"m",xy).call(this,t)),t.nodesIterator.next().value}getMasterByAddress(r){let t=this.nodeByAddress.get(r);if(!t)return;return this.nodeClient(t)}getPubSubClient(){return this.pubSubNode?this.pubSubNode.client:_(this,c,"m",ke).call(this)}async executeUnsubscribeCommand(r){let t=await this.getPubSubClient();if(await r(t),!t.isPubSubActive&&t.isOpen)await t.disconnect(),this.pubSubNode=void 0}getShardedPubSubClient(r){let{master:t}=this.slots[we(r)];return t.pubSubClient??_(this,c,"m",cy).call(this,t)}async executeShardedUnsubscribeCommand(r,t){let{master:u}=this.slots[we(r)];if(!u.pubSubClient)return Promise.resolve();let n=await u.pubSubClient;if(await t(n),!n.isPubSubActive&&n.isOpen)await n.disconnect(),u.pubSubClient=void 0}}Ct=ae,W=new WeakMap,Gt=new WeakMap,Gr=new WeakMap,kr=new WeakMap,_t=new WeakMap,Nt=new WeakMap,c=new WeakSet,de=async function r(){let t=Math.floor(Math.random()*_(this,W,"f").rootNodes.length);for(let u=t;u<_(this,W,"f").rootNodes.length;u++)if(await _(this,c,"m",du).call(this,_(this,W,"f").rootNodes[u]))return;for(let u=0;u<t;u++)if(await _(this,c,"m",du).call(this,_(this,W,"f").rootNodes[u]))return;throw new mrr.RootNodesUnavailableError},Be=function r(){this.slots=new Array(_(Ct,Ct,"f",ie)),this.shards=[],this.masters=[],this.replicas=[],Yr(this,Nt,void 0,"f")},du=async function r(t){let u=new Set;try{let n=await _(this,c,"m",Yy).call(this,t),e=[],o=_(this,W,"f").minimizeConnections!==!0;_(this,c,"m",Be).call(this);for(let{from:A,to:s,master:I,replicas:O}of n){let rr={master:_(this,c,"m",he).call(this,I,!1,o,u,e)};if(_(this,W,"f").useReplicas)rr.replicas=O.map((jr)=>_(this,c,"m",he).call(this,jr,!0,o,u,e));this.shards.push(rr);for(let jr=A;jr<=s;jr++)this.slots[jr]=rr}if(this.pubSubNode&&!u.has(this.pubSubNode.address))if(Dy.types.isPromise(this.pubSubNode.client))e.push(this.pubSubNode.client.then((A)=>A.disconnect())),this.pubSubNode=void 0;else{e.push(this.pubSubNode.client.disconnect());let A=this.pubSubNode.client.getPubSubListeners(xr.PubSubType.CHANNELS),s=this.pubSubNode.client.getPubSubListeners(xr.PubSubType.PATTERNS);if(A.size||s.size)e.push(_(this,c,"m",ke).call(this,{[xr.PubSubType.CHANNELS]:A,[xr.PubSubType.PATTERNS]:s}))}for(let[A,s]of this.nodeByAddress.entries()){if(u.has(A))continue;if(s.client)e.push(_(this,c,"m",Cr).call(this,s.client,(O)=>O.disconnect()));let{pubSubClient:I}=s;if(I)e.push(_(this,c,"m",Cr).call(this,I,(O)=>O.disconnect()));this.nodeByAddress.delete(A)}return await Promise.all(e),!0}catch(n){return _(this,Gr,"f").call(this,"error",n),!1}},Yy=async function r(t){let u=new(_(this,Gt,"f"))(_(this,c,"m",Ue).call(this,t,!0));u.on("error",(n)=>_(this,Gr,"f").call(this,"error",n)),await u.connect();try{return await u.clusterSlots()}finally{await u.disconnect()}},gy=function r(t){switch(typeof _(this,W,"f").nodeAddressMap){case"object":return _(this,W,"f").nodeAddressMap[t];case"function":return _(this,W,"f").nodeAddressMap(t)}},Ue=function r(t,u){let n;if(_(this,W,"f").defaults){let e;if(_(this,W,"f").defaults.socket)e={..._(this,W,"f").defaults.socket,...t?.socket};else e=t?.socket;n={..._(this,W,"f").defaults,...t,socket:e}}else n=t;if(u)n??(n={}),n.socket??(n.socket={}),n.socket.reconnectStrategy=!1;return n},he=function r({id:t,ip:u,port:n},e,o,A,s){let I=`${u}:${n}`;A.add(I);let O=this.nodeByAddress.get(I);if(!O){if(O={id:t,host:u,port:n,address:I,readonly:e,client:void 0},o)s.push(_(this,c,"m",Ce).call(this,O));this.nodeByAddress.set(I,O)}return(e?this.replicas:this.masters).push(O),O},Cu=async function r(t,u=t.readonly){let n=new(_(this,Gt,"f"))(_(this,c,"m",Ue).call(this,{socket:_(this,c,"m",gy).call(this,t.address)??{host:t.host,port:t.port},readonly:u}));return n.on("error",(e)=>_(this,Gr,"f").call(this,"error",e)),await n.connect(),n},Ce=function r(t){let u=_(this,c,"m",Cu).call(this,t).then((n)=>{return t.client=n,n}).catch((n)=>{throw t.client=void 0,n});return t.client=u,u},Oy=async function r(t){if(await _(this,c,"m",du).call(this,t.options))return;return _(this,c,"m",de).call(this)},Ge=async function r(t){Yr(this,kr,!1,"f");let u=[];for(let{master:n,replicas:e}of this.shards){if(n.client)u.push(_(this,c,"m",Cr).call(this,n.client,t));if(n.pubSubClient)u.push(_(this,c,"m",Cr).call(this,n.pubSubClient,t));if(e){for(let{client:o}of e)if(o)u.push(_(this,c,"m",Cr).call(this,o,t))}}if(this.pubSubNode)u.push(_(this,c,"m",Cr).call(this,this.pubSubNode.client,t)),this.pubSubNode=void 0;_(this,c,"m",Be).call(this),this.nodeByAddress.clear(),await Promise.allSettled(u)},Cr=function r(t,u){return Dy.types.isPromise(t)?t.then(u):u(t)},Ry=function*r(){let t=Math.floor(Math.random()*(this.masters.length+this.replicas.length));if(t<this.masters.length){do yield this.masters[t];while(++t<this.masters.length);for(let u of this.replicas)yield u}else{t-=this.masters.length;do yield this.replicas[t];while(++t<this.replicas.length)}while(!0){for(let u of this.masters)yield u;for(let u of this.replicas)yield u}},xy=function*r(t){let u=Math.floor(Math.random()*(1+t.replicas.length));if(u<t.replicas.length)do yield t.replicas[u];while(++u<t.replicas.length);while(!0){yield t.master;for(let n of t.replicas)yield n}},ke=async function r(t){let u=Math.floor(Math.random()*(this.masters.length+this.replicas.length)),n=u<this.masters.length?this.masters[u]:this.replicas[u-this.masters.length];return this.pubSubNode={address:n.address,client:_(this,c,"m",Cu).call(this,n,!0).then(async(e)=>{if(t)await Promise.all([e.extendPubSubListeners(xr.PubSubType.CHANNELS,t[xr.PubSubType.CHANNELS]),e.extendPubSubListeners(xr.PubSubType.PATTERNS,t[xr.PubSubType.PATTERNS])]);return this.pubSubNode.client=e,e}).catch((e)=>{throw this.pubSubNode=void 0,e})},this.pubSubNode.client},cy=function r(t){let u=_(this,c,"m",Cu).call(this,t,!0).then((n)=>{return n.on("server-sunsubscribe",async(e,o)=>{try{await this.rediscover(n),(await this.getShardedPubSubClient(e)).extendPubSubChannelListeners(xr.PubSubType.SHARDED,e,o)}catch(A){_(this,Gr,"f").call(this,"sharded-shannel-moved-error",A,e,o)}}),t.pubSubClient=n,n}).catch((n)=>{throw t.pubSubClient=void 0,n});return t.pubSubClient=u,u};ie={value:16384};ir.default=ae});var Sy=f((ar)=>{var Yt=ar&&ar.__classPrivateFieldSet||function(r,t,u,n,e){if(n==="m")throw new TypeError("Private method is not writable");if(n==="a"&&!e)throw new TypeError("Private accessor was defined without a setter");if(typeof t==="function"?r!==t||!e:!t.has(r))throw new TypeError("Cannot write private member to an object whose class did not declare it");return n==="a"?e.call(r,u):e?e.value=u:t.set(r,u),u},B=ar&&ar.__classPrivateFieldGet||function(r,t,u,n){if(u==="a"&&!n)throw new TypeError("Private accessor was defined without a getter");if(typeof t==="function"?r!==t||!n:!t.has(r))throw new TypeError("Cannot read private member from an object whose class did not declare it");return u==="m"?n:u==="a"?n.call(r):n?n.value:t.get(r)},cr,kt,G;Object.defineProperty(ar,"__esModule",{value:!0});var Arr=Ju(),jy=qe(),Ky=Et(),le=rf();class pr{static extend(r){return Ky.attachExtensions({BaseClass:pr,modulesExecutor:pr.prototype.commandsExecutor,modules:r?.modules,functionsExecutor:pr.prototype.functionsExecutor,functions:r?.functions,scriptsExecutor:pr.prototype.scriptsExecutor,scripts:r?.scripts})}constructor(r,t){cr.set(this,new jy.default),kt.set(this,void 0),G.set(this,void 0),Object.defineProperty(this,"EXEC",{enumerable:!0,configurable:!0,writable:!0,value:this.exec}),Yt(this,kt,r,"f"),Yt(this,G,t,"f")}commandsExecutor(r,t){let u=r.transformArguments(...t);return Yt(this,G,B(this,G,"f")??le.default.extractFirstKey(r,t,u),"f"),this.addCommand(void 0,u,r.transformReply)}addCommand(r,t,u){return Yt(this,G,B(this,G,"f")??r,"f"),B(this,cr,"f").addCommand(t,u),this}functionsExecutor(r,t,u){let n=B(this,cr,"f").addFunction(u,r,t);return Yt(this,G,B(this,G,"f")??le.default.extractFirstKey(r,t,n),"f"),this}scriptsExecutor(r,t){let u=B(this,cr,"f").addScript(r,t);return Yt(this,G,B(this,G,"f")??le.default.extractFirstKey(r,t,u),"f"),this}async exec(r=!1){if(r)return this.execAsPipeline();return B(this,cr,"f").handleExecReplies(await B(this,kt,"f").call(this,B(this,cr,"f").queue,B(this,G,"f"),jy.default.generateChainId()))}async execAsPipeline(){return B(this,cr,"f").transformReplies(await B(this,kt,"f").call(this,B(this,cr,"f").queue,B(this,G,"f")))}}cr=new WeakMap,kt=new WeakMap,G=new WeakMap;ar.default=pr;Ky.attachCommands({BaseClass:pr,commands:Arr.default,executor:pr.prototype.commandsExecutor})});var rf=f((lr)=>{var R=lr&&lr.__classPrivateFieldGet||function(r,t,u,n){if(u==="a"&&!n)throw new TypeError("Private accessor was defined without a getter");if(typeof t==="function"?r!==t||!n:!t.has(r))throw new TypeError("Cannot read private member from an object whose class did not declare it");return u==="m"?n:u==="a"?n.call(r):n?n.value:t.get(r)},tf=lr&&lr.__classPrivateFieldSet||function(r,t,u,n,e){if(n==="m")throw new TypeError("Private method is not writable");if(n==="a"&&!e)throw new TypeError("Private accessor was defined without a setter");if(typeof t==="function"?r!==t||!e:!t.has(r))throw new TypeError("Cannot write private member to an object whose class did not declare it");return n==="a"?e.call(r,u):e?e.value=u:t.set(r,u),u},gt,Dt,K,Gu,it;Object.defineProperty(lr,"__esModule",{value:!0});var Err=Ju(),srr=Xy(),qr=Et(),Irr=or("events"),_rr=Sy(),My=gr();class ur extends Irr.EventEmitter{static extractFirstKey(r,t,u){if(r.FIRST_KEY_INDEX===void 0)return;else if(typeof r.FIRST_KEY_INDEX==="number")return u[r.FIRST_KEY_INDEX];return r.FIRST_KEY_INDEX(...t)}static create(r){return new(qr.attachExtensions({BaseClass:ur,modulesExecutor:ur.prototype.commandsExecutor,modules:r?.modules,functionsExecutor:ur.prototype.functionsExecutor,functions:r?.functions,scriptsExecutor:ur.prototype.scriptsExecutor,scripts:r?.scripts}))(r)}get slots(){return R(this,K,"f").slots}get shards(){return R(this,K,"f").shards}get masters(){return R(this,K,"f").masters}get replicas(){return R(this,K,"f").replicas}get nodeByAddress(){return R(this,K,"f").nodeByAddress}get pubSubNode(){return R(this,K,"f").pubSubNode}get isOpen(){return R(this,K,"f").isOpen}constructor(r){super();gt.add(this),Dt.set(this,void 0),K.set(this,void 0),Gu.set(this,void 0),Object.defineProperty(this,"multi",{enumerable:!0,configurable:!0,writable:!0,value:this.MULTI}),Object.defineProperty(this,"subscribe",{enumerable:!0,configurable:!0,writable:!0,value:this.SUBSCRIBE}),Object.defineProperty(this,"unsubscribe",{enumerable:!0,configurable:!0,writable:!0,value:this.UNSUBSCRIBE}),Object.defineProperty(this,"pSubscribe",{enumerable:!0,configurable:!0,writable:!0,value:this.PSUBSCRIBE}),Object.defineProperty(this,"pUnsubscribe",{enumerable:!0,configurable:!0,writable:!0,value:this.PUNSUBSCRIBE}),Object.defineProperty(this,"sSubscribe",{enumerable:!0,configurable:!0,writable:!0,value:this.SSUBSCRIBE}),Object.defineProperty(this,"sUnsubscribe",{enumerable:!0,configurable:!0,writable:!0,value:this.SUNSUBSCRIBE}),tf(this,Dt,r,"f"),tf(this,K,new srr.default(r,this.emit.bind(this)),"f"),tf(this,Gu,_rr.default.extend(r),"f")}duplicate(r){return new(Object.getPrototypeOf(this)).constructor({...R(this,Dt,"f"),...r})}connect(){return R(this,K,"f").connect()}async commandsExecutor(r,t){let{jsArgs:u,args:n,options:e}=qr.transformCommandArguments(r,t);return qr.transformCommandReply(r,await this.sendCommand(ur.extractFirstKey(r,u,n),r.IS_READ_ONLY,n,e),n.preserve)}async sendCommand(r,t,u,n){return R(this,gt,"m",it).call(this,r,t,(e)=>e.sendCommand(u,n))}async functionsExecutor(r,t,u){let{args:n,options:e}=qr.transformCommandArguments(r,t);return qr.transformCommandReply(r,await this.executeFunction(u,r,t,n,e),n.preserve)}async executeFunction(r,t,u,n,e){return R(this,gt,"m",it).call(this,ur.extractFirstKey(t,u,n),t.IS_READ_ONLY,(o)=>o.executeFunction(r,t,n,e))}async scriptsExecutor(r,t){let{args:u,options:n}=qr.transformCommandArguments(r,t);return qr.transformCommandReply(r,await this.executeScript(r,t,u,n),u.preserve)}async executeScript(r,t,u,n){return R(this,gt,"m",it).call(this,ur.extractFirstKey(r,t,u),r.IS_READ_ONLY,(e)=>e.executeScript(r,u,n))}MULTI(r){return new(R(this,Gu,"f"))((t,u,n)=>{return R(this,gt,"m",it).call(this,u,!1,(e)=>e.multiExecutor(t,void 0,n))},r)}async SUBSCRIBE(r,t,u){return(await R(this,K,"f").getPubSubClient()).SUBSCRIBE(r,t,u)}async UNSUBSCRIBE(r,t,u){return R(this,K,"f").executeUnsubscribeCommand((n)=>n.UNSUBSCRIBE(r,t,u))}async PSUBSCRIBE(r,t,u){return(await R(this,K,"f").getPubSubClient()).PSUBSCRIBE(r,t,u)}async PUNSUBSCRIBE(r,t,u){return R(this,K,"f").executeUnsubscribeCommand((n)=>n.PUNSUBSCRIBE(r,t,u))}async SSUBSCRIBE(r,t,u){let n=R(this,Dt,"f").maxCommandRedirections??16,e=Array.isArray(r)?r[0]:r,o=await R(this,K,"f").getShardedPubSubClient(e);for(let A=0;;A++)try{return await o.SSUBSCRIBE(r,t,u)}catch(s){if(++A>n||!(s instanceof My.ErrorReply))throw s;if(s.message.startsWith("MOVED")){await R(this,K,"f").rediscover(o),o=await R(this,K,"f").getShardedPubSubClient(e);continue}throw s}}SUNSUBSCRIBE(r,t,u){return R(this,K,"f").executeShardedUnsubscribeCommand(Array.isArray(r)?r[0]:r,(n)=>n.SUNSUBSCRIBE(r,t,u))}quit(){return R(this,K,"f").quit()}disconnect(){return R(this,K,"f").disconnect()}nodeClient(r){return R(this,K,"f").nodeClient(r)}getRandomNode(){return R(this,K,"f").getRandomNode()}getSlotRandomNode(r){return R(this,K,"f").getSlotRandomNode(r)}getMasters(){return this.masters}getSlotMaster(r){return this.slots[r].master}}Dt=new WeakMap,K=new WeakMap,Gu=new WeakMap,gt=new WeakSet,it=async function r(t,u,n){let e=R(this,Dt,"f").maxCommandRedirections??16,o=await R(this,K,"f").getClient(t,u);for(let A=0;;A++)try{return await n(o)}catch(s){if(++A>e||!(s instanceof My.ErrorReply))throw s;if(s.message.startsWith("ASK")){let I=s.message.substring(s.message.lastIndexOf(" ")+1),O=await R(this,K,"f").getMasterByAddress(I);if(!O)await R(this,K,"f").rediscover(o),O=await R(this,K,"f").getMasterByAddress(I);if(!O)throw new Error(`Cannot find node ${I}`);await O.asking(),o=O;continue}else if(s.message.startsWith("MOVED")){await R(this,K,"f").rediscover(o),o=await R(this,K,"f").getClient(t,u);continue}throw s}};lr.default=ur;qr.attachCommands({BaseClass:ur,commands:Err.default,executor:ur.prototype.commandsExecutor})});var qy=f((Ty)=>{Object.defineProperty(Ty,"__esModule",{value:!0});Ty.scriptSha1=Ty.defineScript=void 0;var Nrr=or("crypto");function Yrr(r){return{...r,SHA1:by(r.SCRIPT)}}Ty.defineScript=Yrr;function by(r){return Nrr.createHash("sha1").update(r).digest("hex")}Ty.scriptSha1=by});var uf=f((v)=>{var Drr=v&&v.__createBinding||(Object.create?function(r,t,u,n){if(n===void 0)n=u;var e=Object.getOwnPropertyDescriptor(t,u);if(!e||("get"in e?!t.__esModule:e.writable||e.configurable))e={enumerable:!0,get:function(){return t[u]}};Object.defineProperty(r,n,e)}:function(r,t,u,n){if(n===void 0)n=u;r[n]=t[u]}),Orr=v&&v.__exportStar||function(r,t){for(var u in r)if(u!=="default"&&!Object.prototype.hasOwnProperty.call(t,u))Drr(t,r,u)};Object.defineProperty(v,"__esModule",{value:!0});v.RedisFlushModes=v.GeoReplyWith=v.defineScript=v.createCluster=v.commandOptions=v.createClient=void 0;var yy=Pe(),Rrr=rf();v.createClient=yy.default.create;v.commandOptions=yy.default.commandOptions;v.createCluster=Rrr.default.create;var xrr=qy();Object.defineProperty(v,"defineScript",{enumerable:!0,get:function(){return xrr.defineScript}});Orr(gr(),v);var crr=m();Object.defineProperty(v,"GeoReplyWith",{enumerable:!0,get:function(){return crr.GeoReplyWith}});var Xrr=Ee();Object.defineProperty(v,"RedisFlushModes",{enumerable:!0,get:function(){return Xrr.RedisFlushModes}})});var vy=f((nf)=>{Object.defineProperty(nf,"__esModule",{value:!0});nf.transformReply=nf.transformArguments=nf.FIRST_KEY_INDEX=void 0;nf.FIRST_KEY_INDEX=1;function jrr(r,t){return["BF.ADD",r,t]}nf.transformArguments=jrr;var Krr=m();Object.defineProperty(nf,"transformReply",{enumerable:!0,get:function(){return Krr.transformBooleanReply}})});var Jy=f((Ly)=>{Object.defineProperty(Ly,"__esModule",{value:!0});Ly.transformArguments=Ly.IS_READ_ONLY=Ly.FIRST_KEY_INDEX=void 0;Ly.FIRST_KEY_INDEX=1;Ly.IS_READ_ONLY=!0;function Trr(r){return["BF.CARD",r]}Ly.transformArguments=Trr});var $y=f((ef)=>{Object.defineProperty(ef,"__esModule",{value:!0});ef.transformReply=ef.transformArguments=ef.IS_READ_ONLY=ef.FIRST_KEY_INDEX=void 0;ef.FIRST_KEY_INDEX=1;ef.IS_READ_ONLY=!0;function yrr(r,t){return["BF.EXISTS",r,t]}ef.transformArguments=yrr;var vrr=m();Object.defineProperty(ef,"transformReply",{enumerable:!0,get:function(){return vrr.transformBooleanReply}})});var Vy=f((zy)=>{Object.defineProperty(zy,"__esModule",{value:!0});zy.transformReply=zy.transformArguments=zy.IS_READ_ONLY=zy.FIRST_KEY_INDEX=void 0;zy.FIRST_KEY_INDEX=1;zy.IS_READ_ONLY=!0;function zrr(r){return["BF.INFO",r]}zy.transformArguments=zrr;function Qrr(r){return{capacity:r[1],size:r[3],numberOfFilters:r[5],numberOfInsertedItems:r[7],expansionRate:r[9]}}zy.transformReply=Qrr});var Wy=f((ff)=>{Object.defineProperty(ff,"__esModule",{value:!0});ff.transformReply=ff.transformArguments=ff.FIRST_KEY_INDEX=void 0;var Prr=m();ff.FIRST_KEY_INDEX=1;function Hrr(r,t,u){let n=["BF.INSERT",r];if(u?.CAPACITY)n.push("CAPACITY",u.CAPACITY.toString());if(u?.ERROR)n.push("ERROR",u.ERROR.toString());if(u?.EXPANSION)n.push("EXPANSION",u.EXPANSION.toString());if(u?.NOCREATE)n.push("NOCREATE");if(u?.NONSCALING)n.push("NONSCALING");return n.push("ITEMS"),Prr.pushVerdictArguments(n,t)}ff.transformArguments=Hrr;var Brr=m();Object.defineProperty(ff,"transformReply",{enumerable:!0,get:function(){return Brr.transformBooleanArrayReply}})});var Hy=f((Zy)=>{Object.defineProperty(Zy,"__esModule",{value:!0});Zy.transformArguments=Zy.FIRST_KEY_INDEX=void 0;Zy.FIRST_KEY_INDEX=1;function drr(r,t,u){return["BF.LOADCHUNK",r,t.toString(),u]}Zy.transformArguments=drr});var By=f((of)=>{Object.defineProperty(of,"__esModule",{value:!0});of.transformReply=of.transformArguments=of.FIRST_KEY_INDEX=void 0;of.FIRST_KEY_INDEX=1;function Grr(r,t){return["BF.MADD",r,...t]}of.transformArguments=Grr;var krr=m();Object.defineProperty(of,"transformReply",{enumerable:!0,get:function(){return krr.transformBooleanArrayReply}})});var Uy=f((mf)=>{Object.defineProperty(mf,"__esModule",{value:!0});mf.transformReply=mf.transformArguments=mf.IS_READ_ONLY=mf.FIRST_KEY_INDEX=void 0;mf.FIRST_KEY_INDEX=1;mf.IS_READ_ONLY=!0;function rtr(r,t){return["BF.MEXISTS",r,...t]}mf.transformArguments=rtr;var ttr=m();Object.defineProperty(mf,"transformReply",{enumerable:!0,get:function(){return ttr.transformBooleanArrayReply}})});var dy=f((hy)=>{Object.defineProperty(hy,"__esModule",{value:!0});hy.transformArguments=hy.FIRST_KEY_INDEX=void 0;hy.FIRST_KEY_INDEX=1;function otr(r,t,u,n){let e=["BF.RESERVE",r,t.toString(),u.toString()];if(n?.EXPANSION)e.push("EXPANSION",n.EXPANSION.toString());if(n?.NONSCALING)e.push("NONSCALING");return e}hy.transformArguments=otr});var ky=f((Cy)=>{Object.defineProperty(Cy,"__esModule",{value:!0});Cy.transformReply=Cy.transformArguments=Cy.IS_READ_ONLY=Cy.FIRST_KEY_INDEX=void 0;Cy.FIRST_KEY_INDEX=1;Cy.IS_READ_ONLY=!0;function Atr(r,t){return["BF.SCANDUMP",r,t.toString()]}Cy.transformArguments=Atr;function Etr([r,t]){return{iterator:r,chunk:t}}Cy.transformReply=Etr});var Av=f((mv)=>{Object.defineProperty(mv,"__esModule",{value:!0});var iy=vy(),ay=Jy(),ly=$y(),rv=Vy(),tv=Wy(),uv=Hy(),nv=By(),ev=Uy(),fv=dy(),ov=ky();mv.default={ADD:iy,add:iy,CARD:ay,card:ay,EXISTS:ly,exists:ly,INFO:rv,info:rv,INSERT:tv,insert:tv,LOADCHUNK:uv,loadChunk:uv,MADD:nv,mAdd:nv,MEXISTS:ev,mExists:ev,RESERVE:fv,reserve:fv,SCANDUMP:ov,scanDump:ov}});var _v=f((sv)=>{Object.defineProperty(sv,"__esModule",{value:!0});sv.transformArguments=sv.FIRST_KEY_INDEX=void 0;sv.FIRST_KEY_INDEX=1;function Ytr(r,t){let u=["CMS.INCRBY",r];if(Array.isArray(t))for(let n of t)Ev(u,n);else Ev(u,t);return u}sv.transformArguments=Ytr;function Ev(r,{item:t,incrementBy:u}){r.push(t,u.toString())}});var gv=f((Nv)=>{Object.defineProperty(Nv,"__esModule",{value:!0});Nv.transformReply=Nv.transformArguments=Nv.IS_READ_ONLY=Nv.FIRST_KEY_INDEX=void 0;Nv.FIRST_KEY_INDEX=1;Nv.IS_READ_ONLY=!0;function Dtr(r){return["CMS.INFO",r]}Nv.transformArguments=Dtr;function Otr(r){return{width:r[1],depth:r[3],count:r[5]}}Nv.transformReply=Otr});var Rv=f((Dv)=>{Object.defineProperty(Dv,"__esModule",{value:!0});Dv.transformArguments=Dv.FIRST_KEY_INDEX=void 0;Dv.FIRST_KEY_INDEX=1;function Xtr(r,t,u){return["CMS.INITBYDIM",r,t.toString(),u.toString()]}Dv.transformArguments=Xtr});var Xv=f((xv)=>{Object.defineProperty(xv,"__esModule",{value:!0});xv.transformArguments=xv.FIRST_KEY_INDEX=void 0;xv.FIRST_KEY_INDEX=1;function Ktr(r,t,u){return["CMS.INITBYPROB",r,t.toString(),u.toString()]}xv.transformArguments=Ktr});var Sv=f((jv)=>{Object.defineProperty(jv,"__esModule",{value:!0});jv.transformArguments=jv.FIRST_KEY_INDEX=void 0;jv.FIRST_KEY_INDEX=1;function Mtr(r,t){let u=["CMS.MERGE",r,t.length.toString()];if(btr(t))u.push(...t);else{for(let n of t)u.push(n.name);u.push("WEIGHTS");for(let n of t)u.push(n.weight.toString())}return u}jv.transformArguments=Mtr;function btr(r){return typeof r[0]==="string"}});var Tv=f((Mv)=>{Object.defineProperty(Mv,"__esModule",{value:!0});Mv.transformArguments=Mv.IS_READ_ONLY=Mv.FIRST_KEY_INDEX=void 0;var ptr=m();Mv.FIRST_KEY_INDEX=1;Mv.IS_READ_ONLY=!0;function qtr(r,t){return ptr.pushVerdictArguments(["CMS.QUERY",r],t)}Mv.transformArguments=qtr});var $v=f((Jv)=>{Object.defineProperty(Jv,"__esModule",{value:!0});var pv=_v(),qv=gv(),yv=Rv(),vv=Xv(),Lv=Sv(),Fv=Tv();Jv.default={INCRBY:pv,incrBy:pv,INFO:qv,info:qv,INITBYDIM:yv,initByDim:yv,INITBYPROB:vv,initByProb:vv,MERGE:Lv,merge:Lv,QUERY:Fv,query:Fv}});var zv=f((Af)=>{Object.defineProperty(Af,"__esModule",{value:!0});Af.transformReply=Af.transformArguments=Af.FIRST_KEY_INDEX=void 0;Af.FIRST_KEY_INDEX=1;function Ftr(r,t){return["CF.ADD",r,t]}Af.transformArguments=Ftr;var Jtr=m();Object.defineProperty(Af,"transformReply",{enumerable:!0,get:function(){return Jtr.transformBooleanReply}})});var Qv=f((Ef)=>{Object.defineProperty(Ef,"__esModule",{value:!0});Ef.transformReply=Ef.transformArguments=Ef.FIRST_KEY_INDEX=void 0;Ef.FIRST_KEY_INDEX=1;function Vtr(r,t){return["CF.ADDNX",r,t]}Ef.transformArguments=Vtr;var Wtr=m();Object.defineProperty(Ef,"transformReply",{enumerable:!0,get:function(){return Wtr.transformBooleanReply}})});var Zv=f((Vv)=>{Object.defineProperty(Vv,"__esModule",{value:!0});Vv.transformArguments=Vv.FIRST_KEY_INDEX=void 0;Vv.FIRST_KEY_INDEX=1;function Btr(r,t){return["CF.COUNT",r,t]}Vv.transformArguments=Btr});var Pv=f((sf)=>{Object.defineProperty(sf,"__esModule",{value:!0});sf.transformReply=sf.transformArguments=sf.FIRST_KEY_INDEX=void 0;sf.FIRST_KEY_INDEX=1;function htr(r,t){return["CF.DEL",r,t]}sf.transformArguments=htr;var wtr=m();Object.defineProperty(sf,"transformReply",{enumerable:!0,get:function(){return wtr.transformBooleanReply}})});var Hv=f((If)=>{Object.defineProperty(If,"__esModule",{value:!0});If.transformReply=If.transformArguments=If.IS_READ_ONLY=If.FIRST_KEY_INDEX=void 0;If.FIRST_KEY_INDEX=1;If.IS_READ_ONLY=!0;function ktr(r,t){return["CF.EXISTS",r,t]}If.transformArguments=ktr;var itr=m();Object.defineProperty(If,"transformReply",{enumerable:!0,get:function(){return itr.transformBooleanReply}})});var hv=f((Bv)=>{Object.defineProperty(Bv,"__esModule",{value:!0});Bv.transformReply=Bv.transformArguments=Bv.IS_READ_ONLY=Bv.FIRST_KEY_INDEX=void 0;Bv.FIRST_KEY_INDEX=1;Bv.IS_READ_ONLY=!0;function uur(r){return["CF.INFO",r]}Bv.transformArguments=uur;function nur(r){return{size:r[1],numberOfBuckets:r[3],numberOfFilters:r[5],numberOfInsertedItems:r[7],numberOfDeletedItems:r[9],bucketSize:r[11],expansionRate:r[13],maxIteration:r[15]}}Bv.transformReply=nur});var wv=f((_f)=>{Object.defineProperty(_f,"__esModule",{value:!0});_f.transformReply=_f.transformArguments=_f.FIRST_KEY_INDEX=void 0;var mur=ku();_f.FIRST_KEY_INDEX=1;function Aur(r,t,u){return mur.pushInsertOptions(["CF.INSERT",r],t,u)}_f.transformArguments=Aur;var Eur=m();Object.defineProperty(_f,"transformReply",{enumerable:!0,get:function(){return Eur.transformBooleanArrayReply}})});var dv=f((Nf)=>{Object.defineProperty(Nf,"__esModule",{value:!0});Nf.transformReply=Nf.transformArguments=Nf.FIRST_KEY_INDEX=void 0;var Nur=ku();Nf.FIRST_KEY_INDEX=1;function Yur(r,t,u){return Nur.pushInsertOptions(["CF.INSERTNX",r],t,u)}Nf.transformArguments=Yur;var gur=m();Object.defineProperty(Nf,"transformReply",{enumerable:!0,get:function(){return gur.transformBooleanArrayReply}})});var kv=f((Cv)=>{Object.defineProperty(Cv,"__esModule",{value:!0});Cv.transformArguments=Cv.FIRST_KEY_INDEX=void 0;Cv.FIRST_KEY_INDEX=1;function xur(r,t,u){return["CF.LOADCHUNK",r,t.toString(),u]}Cv.transformArguments=xur});var lv=f((iv)=>{Object.defineProperty(iv,"__esModule",{value:!0});iv.transformArguments=iv.FIRST_KEY_INDEX=void 0;iv.FIRST_KEY_INDEX=1;function Xur(r,t,u){let n=["CF.RESERVE",r,t.toString()];if(u?.BUCKETSIZE)n.push("BUCKETSIZE",u.BUCKETSIZE.toString());if(u?.MAXITERATIONS)n.push("MAXITERATIONS",u.MAXITERATIONS.toString());if(u?.EXPANSION)n.push("EXPANSION",u.EXPANSION.toString());return n}iv.transformArguments=Xur});var uL=f((rL)=>{Object.defineProperty(rL,"__esModule",{value:!0});rL.transformReply=rL.transformArguments=rL.FIRST_KEY_INDEX=void 0;rL.FIRST_KEY_INDEX=1;function Kur(r,t){return["CF.SCANDUMP",r,t.toString()]}rL.transformArguments=Kur;function Sur([r,t]){return{iterator:r,chunk:t}}rL.transformReply=Sur});var ku=f((YL)=>{Object.defineProperty(YL,"__esModule",{value:!0});YL.pushInsertOptions=void 0;var nL=zv(),eL=Qv(),fL=Zv(),oL=Pv(),mL=Hv(),AL=hv(),EL=wv(),sL=dv(),IL=kv(),_L=lv(),NL=uL(),Tur=m();YL.default={ADD:nL,add:nL,ADDNX:eL,addNX:eL,COUNT:fL,count:fL,DEL:oL,del:oL,EXISTS:mL,exists:mL,INFO:AL,info:AL,INSERT:EL,insert:EL,INSERTNX:sL,insertNX:sL,LOADCHUNK:IL,loadChunk:IL,RESERVE:_L,reserve:_L,SCANDUMP:NL,scanDump:NL};function pur(r,t,u){if(u?.CAPACITY)r.push("CAPACITY"),r.push(u.CAPACITY.toString());if(u?.NOCREATE)r.push("NOCREATE");return r.push("ITEMS"),Tur.pushVerdictArguments(r,t)}YL.pushInsertOptions=pur});var RL=f((DL)=>{Object.defineProperty(DL,"__esModule",{value:!0});DL.transformArguments=DL.FIRST_KEY_INDEX=void 0;DL.FIRST_KEY_INDEX=1;function yur(r,t){let u=["TDIGEST.ADD",r];for(let n of t)u.push(n.toString());return u}DL.transformArguments=yur});var xL=f((Yf)=>{Object.defineProperty(Yf,"__esModule",{value:!0});Yf.transformReply=Yf.transformArguments=Yf.IS_READ_ONLY=Yf.FIRST_KEY_INDEX=void 0;Yf.FIRST_KEY_INDEX=1;Yf.IS_READ_ONLY=!0;function Lur(r,t){let u=["TDIGEST.BYRANK",r];for(let n of t)u.push(n.toString());return u}Yf.transformArguments=Lur;var Fur=nr();Object.defineProperty(Yf,"transformReply",{enumerable:!0,get:function(){return Fur.transformDoublesReply}})});var cL=f((gf)=>{Object.defineProperty(gf,"__esModule",{value:!0});gf.transformReply=gf.transformArguments=gf.IS_READ_ONLY=gf.FIRST_KEY_INDEX=void 0;gf.FIRST_KEY_INDEX=1;gf.IS_READ_ONLY=!0;function Vur(r,t){let u=["TDIGEST.BYREVRANK",r];for(let n of t)u.push(n.toString());return u}gf.transformArguments=Vur;var Wur=nr();Object.defineProperty(gf,"transformReply",{enumerable:!0,get:function(){return Wur.transformDoublesReply}})});var XL=f((Df)=>{Object.defineProperty(Df,"__esModule",{value:!0});Df.transformReply=Df.transformArguments=Df.IS_READ_ONLY=Df.FIRST_KEY_INDEX=void 0;Df.FIRST_KEY_INDEX=1;Df.IS_READ_ONLY=!0;function Uur(r,t){let u=["TDIGEST.CDF",r];for(let n of t)u.push(n.toString());return u}Df.transformArguments=Uur;var hur=nr();Object.defineProperty(Df,"transformReply",{enumerable:!0,get:function(){return hur.transformDoublesReply}})});var SL=f((jL)=>{Object.defineProperty(jL,"__esModule",{value:!0});jL.transformArguments=jL.FIRST_KEY_INDEX=void 0;var kur=nr();jL.FIRST_KEY_INDEX=1;function iur(r,t){return kur.pushCompressionArgument(["TDIGEST.CREATE",r],t)}jL.transformArguments=iur});var TL=f((ML)=>{Object.defineProperty(ML,"__esModule",{value:!0});ML.transformReply=ML.transformArguments=ML.IS_READ_ONLY=ML.FIRST_KEY_INDEX=void 0;ML.FIRST_KEY_INDEX=1;ML.IS_READ_ONLY=!0;function lur(r){return["TDIGEST.INFO",r]}ML.transformArguments=lur;function rnr(r){return{comperssion:r[1],capacity:r[3],mergedNodes:r[5],unmergedNodes:r[7],mergedWeight:Number(r[9]),unmergedWeight:Number(r[11]),totalCompression:r[13]}}ML.transformReply=rnr});var pL=f((Of)=>{Object.defineProperty(Of,"__esModule",{value:!0});Of.transformReply=Of.transformArguments=Of.IS_READ_ONLY=Of.FIRST_KEY_INDEX=void 0;Of.FIRST_KEY_INDEX=1;Of.IS_READ_ONLY=!0;function enr(r){return["TDIGEST.MAX",r]}Of.transformArguments=enr;var fnr=nr();Object.defineProperty(Of,"transformReply",{enumerable:!0,get:function(){return fnr.transformDoubleReply}})});var vL=f((qL)=>{Object.defineProperty(qL,"__esModule",{value:!0});qL.transformArguments=qL.FIRST_KEY_INDEX=void 0;var snr=m(),Inr=nr();qL.FIRST_KEY_INDEX=1;function _nr(r,t,u){let n=snr.pushVerdictArgument(["TDIGEST.MERGE",r],t);if(Inr.pushCompressionArgument(n,u),u?.OVERRIDE)n.push("OVERRIDE");return n}qL.transformArguments=_nr});var LL=f((Rf)=>{Object.defineProperty(Rf,"__esModule",{value:!0});Rf.transformReply=Rf.transformArguments=Rf.IS_READ_ONLY=Rf.FIRST_KEY_INDEX=void 0;Rf.FIRST_KEY_INDEX=1;Rf.IS_READ_ONLY=!0;function Ynr(r){return["TDIGEST.MIN",r]}Rf.transformArguments=Ynr;var gnr=nr();Object.defineProperty(Rf,"transformReply",{enumerable:!0,get:function(){return gnr.transformDoubleReply}})});var FL=f((xf)=>{Object.defineProperty(xf,"__esModule",{value:!0});xf.transformReply=xf.transformArguments=xf.IS_READ_ONLY=xf.FIRST_KEY_INDEX=void 0;xf.FIRST_KEY_INDEX=1;xf.IS_READ_ONLY=!0;function cnr(r,t){let u=["TDIGEST.QUANTILE",r];for(let n of t)u.push(n.toString());return u}xf.transformArguments=cnr;var Xnr=nr();Object.defineProperty(xf,"transformReply",{enumerable:!0,get:function(){return Xnr.transformDoublesReply}})});var zL=f((JL)=>{Object.defineProperty(JL,"__esModule",{value:!0});JL.transformArguments=JL.IS_READ_ONLY=JL.FIRST_KEY_INDEX=void 0;JL.FIRST_KEY_INDEX=1;JL.IS_READ_ONLY=!0;function bnr(r,t){let u=["TDIGEST.RANK",r];for(let n of t)u.push(n.toString());return u}JL.transformArguments=bnr});var WL=f((QL)=>{Object.defineProperty(QL,"__esModule",{value:!0});QL.transformArguments=QL.FIRST_KEY_INDEX=void 0;QL.FIRST_KEY_INDEX=1;function qnr(r){return["TDIGEST.RESET",r]}QL.transformArguments=qnr});var HL=f((ZL)=>{Object.defineProperty(ZL,"__esModule",{value:!0});ZL.transformArguments=ZL.IS_READ_ONLY=ZL.FIRST_KEY_INDEX=void 0;ZL.FIRST_KEY_INDEX=1;ZL.IS_READ_ONLY=!0;function vnr(r,t){let u=["TDIGEST.REVRANK",r];for(let n of t)u.push(n.toString());return u}ZL.transformArguments=vnr});var BL=f((cf)=>{Object.defineProperty(cf,"__esModule",{value:!0});cf.transformReply=cf.transformArguments=cf.IS_READ_ONLY=cf.FIRST_KEY_INDEX=void 0;cf.FIRST_KEY_INDEX=1;cf.IS_READ_ONLY=!0;function Jnr(r,t,u){return["TDIGEST.TRIMMED_MEAN",r,t.toString(),u.toString()]}cf.transformArguments=Jnr;var $nr=nr();Object.defineProperty(cf,"transformReply",{enumerable:!0,get:function(){return $nr.transformDoubleReply}})});var nr=f((fF)=>{Object.defineProperty(fF,"__esModule",{value:!0});fF.transformDoublesReply=fF.transformDoubleReply=fF.pushCompressionArgument=void 0;var UL=RL(),hL=xL(),wL=cL(),dL=XL(),CL=SL(),GL=TL(),kL=pL(),iL=vL(),aL=LL(),lL=FL(),rF=zL(),tF=WL(),uF=HL(),nF=BL();fF.default={ADD:UL,add:UL,BYRANK:hL,byRank:hL,BYREVRANK:wL,byRevRank:wL,CDF:dL,cdf:dL,CREATE:CL,create:CL,INFO:GL,info:GL,MAX:kL,max:kL,MERGE:iL,merge:iL,MIN:aL,min:aL,QUANTILE:lL,quantile:lL,RANK:rF,rank:rF,RESET:tF,reset:tF,REVRANK:uF,revRank:uF,TRIMMED_MEAN:nF,trimmedMean:nF};function Znr(r,t){if(t?.COMPRESSION)r.push("COMPRESSION",t.COMPRESSION.toString());return r}fF.pushCompressionArgument=Znr;function eF(r){switch(r){case"inf":return 1/0;case"-inf":return-1/0;case"nan":return NaN;default:return parseFloat(r)}}fF.transformDoubleReply=eF;function Pnr(r){return r.map(eF)}fF.transformDoublesReply=Pnr});var EF=f((mF)=>{Object.defineProperty(mF,"__esModule",{value:!0});mF.transformArguments=mF.FIRST_KEY_INDEX=void 0;var hnr=m();mF.FIRST_KEY_INDEX=1;function wnr(r,t){return hnr.pushVerdictArguments(["TOPK.ADD",r],t)}mF.transformArguments=wnr});var _F=f((sF)=>{Object.defineProperty(sF,"__esModule",{value:!0});sF.transformArguments=sF.IS_READ_ONLY=sF.FIRST_KEY_INDEX=void 0;var Cnr=m();sF.FIRST_KEY_INDEX=1;sF.IS_READ_ONLY=!0;function Gnr(r,t){return Cnr.pushVerdictArguments(["TOPK.COUNT",r],t)}sF.transformArguments=Gnr});var DF=f((YF)=>{Object.defineProperty(YF,"__esModule",{value:!0});YF.transformArguments=YF.FIRST_KEY_INDEX=void 0;YF.FIRST_KEY_INDEX=1;function anr(r,t){let u=["TOPK.INCRBY",r];if(Array.isArray(t))for(let n of t)NF(u,n);else NF(u,t);return u}YF.transformArguments=anr;function NF(r,{item:t,incrementBy:u}){r.push(t,u.toString())}});var xF=f((OF)=>{Object.defineProperty(OF,"__esModule",{value:!0});OF.transformReply=OF.transformArguments=OF.IS_READ_ONLY=OF.FIRST_KEY_INDEX=void 0;OF.FIRST_KEY_INDEX=1;OF.IS_READ_ONLY=!0;function rer(r){return["TOPK.INFO",r]}OF.transformArguments=rer;function ter(r){return{k:r[1],width:r[3],depth:r[5],decay:Number(r[7])}}OF.transformReply=ter});var jF=f((cF)=>{Object.defineProperty(cF,"__esModule",{value:!0});cF.transformReply=cF.transformArguments=cF.IS_READ_ONLY=cF.FIRST_KEY_INDEX=void 0;cF.FIRST_KEY_INDEX=1;cF.IS_READ_ONLY=!0;function fer(r){return["TOPK.LIST",r,"WITHCOUNT"]}cF.transformArguments=fer;function oer(r){let t=[];for(let u=0;u<r.length;u++)t.push({item:r[u],count:r[++u]});return t}cF.transformReply=oer});var MF=f((KF)=>{Object.defineProperty(KF,"__esModule",{value:!0});KF.transformArguments=KF.IS_READ_ONLY=KF.FIRST_KEY_INDEX=void 0;KF.FIRST_KEY_INDEX=1;KF.IS_READ_ONLY=!0;function ser(r){return["TOPK.LIST",r]}KF.transformArguments=ser});var pF=f((bF)=>{Object.defineProperty(bF,"__esModule",{value:!0});bF.transformArguments=bF.IS_READ_ONLY=bF.FIRST_KEY_INDEX=void 0;var Ner=m();bF.FIRST_KEY_INDEX=1;bF.IS_READ_ONLY=!0;function Yer(r,t){return Ner.pushVerdictArguments(["TOPK.QUERY",r],t)}bF.transformArguments=Yer});var vF=f((qF)=>{Object.defineProperty(qF,"__esModule",{value:!0});qF.transformArguments=qF.IS_READ_ONLY=qF.FIRST_KEY_INDEX=void 0;qF.FIRST_KEY_INDEX=1;qF.IS_READ_ONLY=!0;function Oer(r,t,u){let n=["TOPK.RESERVE",r,t.toString()];if(u)n.push(u.width.toString(),u.depth.toString(),u.decay.toString());return n}qF.transformArguments=Oer});var PF=f((ZF)=>{Object.defineProperty(ZF,"__esModule",{value:!0});var LF=EF(),FF=_F(),JF=DF(),$F=xF(),zF=jF(),QF=MF(),VF=pF(),WF=vF();ZF.default={ADD:LF,add:LF,COUNT:FF,count:FF,INCRBY:JF,incrBy:JF,INFO:$F,info:$F,LIST_WITHCOUNT:zF,listWithCount:zF,LIST:QF,list:QF,QUERY:VF,query:VF,RESERVE:WF,reserve:WF}});var BF=f((HF)=>{Object.defineProperty(HF,"__esModule",{value:!0});var Xer=Av(),jer=$v(),Ker=ku(),Ser=nr(),Mer=PF();HF.default={bf:Xer.default,cms:jer.default,cf:Ker.default,tDigest:Ser.default,topK:Mer.default}});var jf=f((Xf)=>{Object.defineProperty(Xf,"__esModule",{value:!0});Xf.default=void 0;var Ter=BF();Object.defineProperty(Xf,"default",{enumerable:!0,get:function(){return Ter.default}})});var wF=f((UF)=>{Object.defineProperty(UF,"__esModule",{value:!0});UF.transformArguments=UF.IS_READ_ONLY=void 0;UF.IS_READ_ONLY=!0;function qer(r){return["GRAPH.CONFIG","GET",r]}UF.transformArguments=qer});var GF=f((dF)=>{Object.defineProperty(dF,"__esModule",{value:!0});dF.transformArguments=void 0;function ver(r,t){return["GRAPH.CONFIG","SET",r,t.toString()]}dF.transformArguments=ver});var aF=f((kF)=>{Object.defineProperty(kF,"__esModule",{value:!0});kF.transformArguments=kF.FIRST_KEY_INDEX=void 0;kF.FIRST_KEY_INDEX=1;function Ler(r){return["GRAPH.DELETE",r]}kF.transformArguments=Ler});var tJ=f((lF)=>{Object.defineProperty(lF,"__esModule",{value:!0});lF.transformArguments=lF.IS_READ_ONLY=lF.FIRST_KEY_INDEX=void 0;lF.FIRST_KEY_INDEX=1;lF.IS_READ_ONLY=!0;function Jer(r,t){return["GRAPH.EXPLAIN",r,t]}lF.transformArguments=Jer});var eJ=f((uJ)=>{Object.defineProperty(uJ,"__esModule",{value:!0});uJ.transformArguments=uJ.IS_READ_ONLY=void 0;uJ.IS_READ_ONLY=!0;function Qer(){return["GRAPH.LIST"]}uJ.transformArguments=Qer});var mJ=f((fJ)=>{Object.defineProperty(fJ,"__esModule",{value:!0});fJ.transformArguments=fJ.IS_READ_ONLY=fJ.FIRST_KEY_INDEX=void 0;fJ.FIRST_KEY_INDEX=1;fJ.IS_READ_ONLY=!0;function Wer(r,t){return["GRAPH.PROFILE",r,t]}fJ.transformArguments=Wer});var iu=f((AJ)=>{Object.defineProperty(AJ,"__esModule",{value:!0});AJ.transformReply=AJ.transformArguments=AJ.FIRST_KEY_INDEX=void 0;var Her=au();AJ.FIRST_KEY_INDEX=1;function Ber(r,t,u,n){return Her.pushQueryArguments(["GRAPH.QUERY"],r,t,u,n)}AJ.transformArguments=Ber;function Uer(r){return r.length===1?{headers:void 0,data:void 0,metadata:r[0]}:{headers:r[0],data:r[1],metadata:r[2]}}AJ.transformReply=Uer});var sJ=f((lu)=>{Object.defineProperty(lu,"__esModule",{value:!0});lu.transformReply=lu.transformArguments=lu.IS_READ_ONLY=lu.FIRST_KEY_INDEX=void 0;var der=au(),Cer=iu();Object.defineProperty(lu,"FIRST_KEY_INDEX",{enumerable:!0,get:function(){return Cer.FIRST_KEY_INDEX}});lu.IS_READ_ONLY=!0;function Ger(r,t,u,n){return der.pushQueryArguments(["GRAPH.RO_QUERY"],r,t,u,n)}lu.transformArguments=Ger;var ker=iu();Object.defineProperty(lu,"transformReply",{enumerable:!0,get:function(){return ker.transformReply}})});var NJ=f((IJ)=>{Object.defineProperty(IJ,"__esModule",{value:!0});IJ.transformReply=IJ.transformArguments=IJ.FIRST_KEY_INDEX=IJ.IS_READ_ONLY=void 0;IJ.IS_READ_ONLY=!0;IJ.FIRST_KEY_INDEX=1;function rfr(r){return["GRAPH.SLOWLOG",r]}IJ.transformArguments=rfr;function tfr(r){return r.map(([t,u,n,e])=>({timestamp:new Date(Number(t)*1000),command:u,query:n,took:Number(e)}))}IJ.transformReply=tfr});var au=f((SJ)=>{Object.defineProperty(SJ,"__esModule",{value:!0});SJ.pushQueryArguments=void 0;var YJ=wF(),gJ=GF(),DJ=aF(),OJ=tJ(),RJ=eJ(),xJ=mJ(),cJ=iu(),XJ=sJ(),jJ=NJ();SJ.default={CONFIG_GET:YJ,configGet:YJ,CONFIG_SET:gJ,configSet:gJ,DELETE:DJ,delete:DJ,EXPLAIN:OJ,explain:OJ,LIST:RJ,list:RJ,PROFILE:xJ,profile:xJ,QUERY:cJ,query:cJ,RO_QUERY:XJ,roQuery:XJ,SLOWLOG:jJ,slowLog:jJ};function ffr(r,t,u,n,e){if(r.push(t),typeof n==="number")r.push(u),KJ(r,n);else if(r.push(n?.params?`CYPHER ${ofr(n.params)} ${u}`:u),n?.TIMEOUT!==void 0)KJ(r,n.TIMEOUT);if(e)r.push("--compact");return r}SJ.pushQueryArguments=ffr;function KJ(r,t){r.push("TIMEOUT",t.toString())}function ofr(r){let t=[];for(let[u,n]of Object.entries(r))t.push(`${u}=${Kf(n)}`);return t.join(" ")}function Kf(r){if(r===null)return"null";switch(typeof r){case"string":return`"${r.replace(/["\\]/g,"\\$&")}"`;case"number":case"boolean":return r.toString()}if(Array.isArray(r))return`[${r.map(Kf).join(",")}]`;else if(typeof r==="object"){let t=[];for(let[u,n]of Object.entries(r))t.push(`${u}:${Kf(n)}`);return`{${t.join(",")}}`}else throw new TypeError(`Unexpected param type ${typeof r} ${r}`)}});var yJ=f((rt)=>{var lt=rt&&rt.__classPrivateFieldSet||function(r,t,u,n,e){if(n==="m")throw new TypeError("Private method is not writable");if(n==="a"&&!e)throw new TypeError("Private accessor was defined without a setter");if(typeof t==="function"?r!==t||!e:!t.has(r))throw new TypeError("Cannot write private member to an object whose class did not declare it");return n==="a"?e.call(r,u):e?e.value=u:t.set(r,u),u},x=rt&&rt.__classPrivateFieldGet||function(r,t,u,n){if(u==="a"&&!n)throw new TypeError("Private accessor was defined without a getter");if(typeof t==="function"?r!==t||!n:!t.has(r))throw new TypeError("Cannot read private member from an object whose class did not declare it");return u==="m"?n:u==="a"?n.call(r):n?n.value:t.get(r)},T,yr,vr,at,Ot,bJ,TJ,rn,tn,pJ,pf,Sf,Mf,bf,Tf;Object.defineProperty(rt,"__esModule",{value:!0});var k;(function(r){r[r.UNKNOWN=0]="UNKNOWN",r[r.NULL=1]="NULL",r[r.STRING=2]="STRING",r[r.INTEGER=3]="INTEGER",r[r.BOOLEAN=4]="BOOLEAN",r[r.DOUBLE=5]="DOUBLE",r[r.ARRAY=6]="ARRAY",r[r.EDGE=7]="EDGE",r[r.NODE=8]="NODE",r[r.PATH=9]="PATH",r[r.MAP=10]="MAP",r[r.POINT=11]="POINT"})(k||(k={}));class qJ{constructor(r,t){T.add(this),yr.set(this,void 0),vr.set(this,void 0),at.set(this,void 0),Ot.set(this,void 0),lt(this,yr,r,"f"),lt(this,vr,t,"f")}async query(r,t){return x(this,T,"m",pf).call(this,await x(this,yr,"f").graph.query(x(this,vr,"f"),r,t,!0))}async roQuery(r,t){return x(this,T,"m",pf).call(this,await x(this,yr,"f").graph.roQuery(x(this,vr,"f"),r,t,!0))}}yr=new WeakMap,vr=new WeakMap,at=new WeakMap,Ot=new WeakMap,T=new WeakSet,bJ=function r(){return lt(this,Ot,x(this,Ot,"f")??x(this,T,"m",TJ).call(this).finally(()=>lt(this,Ot,void 0,"f")),"f"),x(this,Ot,"f")},TJ=async function r(){let[t,u,n]=await Promise.all([x(this,yr,"f").graph.roQuery(x(this,vr,"f"),"CALL db.labels()"),x(this,yr,"f").graph.roQuery(x(this,vr,"f"),"CALL db.relationshipTypes()"),x(this,yr,"f").graph.roQuery(x(this,vr,"f"),"CALL db.propertyKeys()")]);return lt(this,at,{labels:x(this,T,"m",rn).call(this,t.data),relationshipTypes:x(this,T,"m",rn).call(this,u.data),propertyKeys:x(this,T,"m",rn).call(this,n.data)},"f"),x(this,at,"f")},rn=function r(t){return t.map(([u])=>u)},tn=function r(t,u){return x(this,at,"f")?.[t][u]??x(this,T,"m",pJ).call(this,t,u)},pJ=async function r(t,u){let n=(await x(this,T,"m",bJ).call(this))[t][u];if(n===void 0)throw new Error(`Cannot find value from ${t}[${u}]`);return n},pf=async function r(t){if(!t.data)return t;let u=[],n={metadata:t.metadata,data:t.data.map((e)=>{let o={};for(let A=0;A<e.length;A++)o[t.headers[A][1]]=x(this,T,"m",Sf).call(this,e[A],u);return o})};if(u.length)await Promise.all(u);return n},Sf=function r([t,u],n){switch(t){case k.NULL:return null;case k.STRING:case k.INTEGER:return u;case k.BOOLEAN:return u==="true";case k.DOUBLE:return parseFloat(u);case k.ARRAY:return u.map((o)=>x(this,T,"m",r).call(this,o,n));case k.EDGE:return x(this,T,"m",Mf).call(this,u,n);case k.NODE:return x(this,T,"m",bf).call(this,u,n);case k.PATH:return{nodes:u[0][1].map(([,o])=>x(this,T,"m",bf).call(this,o,n)),edges:u[1][1].map(([,o])=>x(this,T,"m",Mf).call(this,o,n))};case k.MAP:let e={};for(let o=0;o<u.length;o++)e[u[o++]]=x(this,T,"m",r).call(this,u[o],n);return e;case k.POINT:return{latitude:parseFloat(u[0]),longitude:parseFloat(u[1])};default:throw new Error(`unknown scalar type: ${t}`)}},Mf=function r([t,u,n,e,o],A){let s={id:t,sourceId:n,destinationId:e,properties:x(this,T,"m",Tf).call(this,o,A)},I=x(this,T,"m",tn).call(this,"relationshipTypes",u);if(I instanceof Promise)A.push(I.then((O)=>s.relationshipType=O));else s.relationshipType=I;return s},bf=function r([t,u,n],e){let o=new Array(u.length);for(let A=0;A<u.length;A++){let s=x(this,T,"m",tn).call(this,"labels",u[A]);if(s instanceof Promise)e.push(s.then((I)=>o[A]=I));else o[A]=s}return{id:t,labels:o,properties:x(this,T,"m",Tf).call(this,n,e)}},Tf=function r(t,u){let n={};for(let[e,o,A]of t){let s=x(this,T,"m",Sf).call(this,[o,A],u),I=x(this,T,"m",tn).call(this,"propertyKeys",e);if(I instanceof Promise)u.push(I.then((O)=>n[O]=s));else n[I]=s}return n};rt.default=qJ});var qf=f((un)=>{Object.defineProperty(un,"__esModule",{value:!0});un.Graph=un.default=void 0;var Afr=au();Object.defineProperty(un,"default",{enumerable:!0,get:function(){return Afr.default}});var Efr=yJ();Object.defineProperty(un,"Graph",{enumerable:!0,get:function(){return Efr.default}})});var FJ=f((vJ)=>{Object.defineProperty(vJ,"__esModule",{value:!0});vJ.transformArguments=vJ.FIRST_KEY_INDEX=void 0;var Ifr=d();vJ.FIRST_KEY_INDEX=1;function _fr(r,t,...u){let n=["JSON.ARRAPPEND",r,t];for(let e of u)n.push(Ifr.transformRedisJsonArgument(e));return n}vJ.transformArguments=_fr});var zJ=f((JJ)=>{Object.defineProperty(JJ,"__esModule",{value:!0});JJ.transformArguments=JJ.IS_READ_ONLY=JJ.FIRST_KEY_INDEX=void 0;var Yfr=d();JJ.FIRST_KEY_INDEX=1;JJ.IS_READ_ONLY=!0;function gfr(r,t,u,n,e){let o=["JSON.ARRINDEX",r,t,Yfr.transformRedisJsonArgument(u)];if(n!==void 0&&n!==null){if(o.push(n.toString()),e!==void 0&&e!==null)o.push(e.toString())}return o}JJ.transformArguments=gfr});var WJ=f((QJ)=>{Object.defineProperty(QJ,"__esModule",{value:!0});QJ.transformArguments=QJ.FIRST_KEY_INDEX=void 0;var Rfr=d();QJ.FIRST_KEY_INDEX=1;function xfr(r,t,u,...n){let e=["JSON.ARRINSERT",r,t,u.toString()];for(let o of n)e.push(Rfr.transformRedisJsonArgument(o));return e}QJ.transformArguments=xfr});var HJ=f((ZJ)=>{Object.defineProperty(ZJ,"__esModule",{value:!0});ZJ.transformArguments=ZJ.IS_READ_ONLY=ZJ.FIRST_KEY_INDEX=void 0;ZJ.FIRST_KEY_INDEX=1;ZJ.IS_READ_ONLY=!0;function Xfr(r,t){let u=["JSON.ARRLEN",r];if(t)u.push(t);return u}ZJ.transformArguments=Xfr});var wJ=f((UJ)=>{Object.defineProperty(UJ,"__esModule",{value:!0});UJ.transformReply=UJ.transformArguments=UJ.FIRST_KEY_INDEX=void 0;var BJ=d();UJ.FIRST_KEY_INDEX=1;function Sfr(r,t,u){let n=["JSON.ARRPOP",r];if(t){if(n.push(t),u!==void 0&&u!==null)n.push(u.toString())}return n}UJ.transformArguments=Sfr;function Mfr(r){if(r===null)return null;if(Array.isArray(r))return r.map(BJ.transformRedisJsonNullReply);return BJ.transformRedisJsonNullReply(r)}UJ.transformReply=Mfr});var GJ=f((dJ)=>{Object.defineProperty(dJ,"__esModule",{value:!0});dJ.transformArguments=dJ.FIRST_KEY_INDEX=void 0;dJ.FIRST_KEY_INDEX=1;function pfr(r,t,u,n){return["JSON.ARRTRIM",r,t,u.toString(),n.toString()]}dJ.transformArguments=pfr});var aJ=f((kJ)=>{Object.defineProperty(kJ,"__esModule",{value:!0});kJ.transformArguments=kJ.FIRST_KEY_INDEX=void 0;kJ.FIRST_KEY_INDEX=2;function yfr(r,t){let u=["JSON.DEBUG","MEMORY",r];if(t)u.push(t);return u}kJ.transformArguments=yfr});var t5=f((lJ)=>{Object.defineProperty(lJ,"__esModule",{value:!0});lJ.transformArguments=lJ.FIRST_KEY_INDEX=void 0;lJ.FIRST_KEY_INDEX=1;function Lfr(r,t){let u=["JSON.DEL",r];if(t)u.push(t);return u}lJ.transformArguments=Lfr});var e5=f((u5)=>{Object.defineProperty(u5,"__esModule",{value:!0});u5.transformArguments=u5.FIRST_KEY_INDEX=void 0;u5.FIRST_KEY_INDEX=1;function Jfr(r,t){let u=["JSON.FORGET",r];if(t)u.push(t);return u}u5.transformArguments=Jfr});var f5=f((yf)=>{Object.defineProperty(yf,"__esModule",{value:!0});yf.transformReply=yf.transformArguments=yf.IS_READ_ONLY=yf.FIRST_KEY_INDEX=void 0;var zfr=m();yf.FIRST_KEY_INDEX=1;yf.IS_READ_ONLY=!0;function Qfr(r,t){let u=["JSON.GET",r];if(t?.path)u=zfr.pushVerdictArguments(u,t.path);if(t?.INDENT)u.push("INDENT",t.INDENT);if(t?.NEWLINE)u.push("NEWLINE",t.NEWLINE);if(t?.SPACE)u.push("SPACE",t.SPACE);if(t?.NOESCAPE)u.push("NOESCAPE");return u}yf.transformArguments=Qfr;var Vfr=d();Object.defineProperty(yf,"transformReply",{enumerable:!0,get:function(){return Vfr.transformRedisJsonNullReply}})});var A5=f((o5)=>{Object.defineProperty(o5,"__esModule",{value:!0});o5.transformArguments=o5.FIRST_KEY_INDEX=void 0;var Bfr=d();o5.FIRST_KEY_INDEX=1;function Ufr(r,t,u){return["JSON.MERGE",r,t,Bfr.transformRedisJsonArgument(u)]}o5.transformArguments=Ufr});var I5=f((E5)=>{Object.defineProperty(E5,"__esModule",{value:!0});E5.transformReply=E5.transformArguments=E5.IS_READ_ONLY=E5.FIRST_KEY_INDEX=void 0;var wfr=d();E5.FIRST_KEY_INDEX=1;E5.IS_READ_ONLY=!0;function dfr(r,t){return["JSON.MGET",...r,t]}E5.transformArguments=dfr;function Cfr(r){return r.map(wfr.transformRedisJsonNullReply)}E5.transformReply=Cfr});var Y5=f((_5)=>{Object.defineProperty(_5,"__esModule",{value:!0});_5.transformArguments=_5.FIRST_KEY_INDEX=void 0;var afr=d();_5.FIRST_KEY_INDEX=1;function lfr(r){let t=new Array(1+r.length*3);t[0]="JSON.MSET";let u=1;for(let n=0;n<r.length;n++){let e=r[n];t[u++]=e.key,t[u++]=e.path,t[u++]=afr.transformRedisJsonArgument(e.value)}return t}_5.transformArguments=lfr});var g5=f((vf)=>{Object.defineProperty(vf,"__esModule",{value:!0});vf.transformReply=vf.transformArguments=vf.FIRST_KEY_INDEX=void 0;vf.FIRST_KEY_INDEX=1;function tor(r,t,u){return["JSON.NUMINCRBY",r,t,u.toString()]}vf.transformArguments=tor;var uor=d();Object.defineProperty(vf,"transformReply",{enumerable:!0,get:function(){return uor.transformNumbersReply}})});var D5=f((Lf)=>{Object.defineProperty(Lf,"__esModule",{value:!0});Lf.transformReply=Lf.transformArguments=Lf.FIRST_KEY_INDEX=void 0;Lf.FIRST_KEY_INDEX=1;function mor(r,t,u){return["JSON.NUMMULTBY",r,t,u.toString()]}Lf.transformArguments=mor;var Aor=d();Object.defineProperty(Lf,"transformReply",{enumerable:!0,get:function(){return Aor.transformNumbersReply}})});var x5=f((O5)=>{Object.defineProperty(O5,"__esModule",{value:!0});O5.transformArguments=O5.FIRST_KEY_INDEX=void 0;O5.FIRST_KEY_INDEX=1;function _or(r,t){let u=["JSON.OBJKEYS",r];if(t)u.push(t);return u}O5.transformArguments=_or});var j5=f((c5)=>{Object.defineProperty(c5,"__esModule",{value:!0});c5.transformArguments=c5.FIRST_KEY_INDEX=void 0;c5.FIRST_KEY_INDEX=1;function Yor(r,t){let u=["JSON.OBJLEN",r];if(t)u.push(t);return u}c5.transformArguments=Yor});var M5=f((K5)=>{Object.defineProperty(K5,"__esModule",{value:!0});K5.transformArguments=K5.FIRST_KEY_INDEX=void 0;K5.FIRST_KEY_INDEX=1;function Dor(r,t){let u=["JSON.RESP",r];if(t)u.push(t);return u}K5.transformArguments=Dor});var p5=f((b5)=>{Object.defineProperty(b5,"__esModule",{value:!0});b5.transformArguments=b5.FIRST_KEY_INDEX=void 0;var Ror=d();b5.FIRST_KEY_INDEX=1;function xor(r,t,u,n){let e=["JSON.SET",r,t,Ror.transformRedisJsonArgument(u)];if(n?.NX)e.push("NX");else if(n?.XX)e.push("XX");return e}b5.transformArguments=xor});var L5=f((y5)=>{Object.defineProperty(y5,"__esModule",{value:!0});y5.transformArguments=y5.FIRST_KEY_INDEX=void 0;var q5=d();y5.FIRST_KEY_INDEX=1;function Xor(...[r,t,u]){let n=["JSON.STRAPPEND",r];if(u!==void 0&&u!==null)n.push(t,q5.transformRedisJsonArgument(u));else n.push(q5.transformRedisJsonArgument(t));return n}y5.transformArguments=Xor});var $5=f((F5)=>{Object.defineProperty(F5,"__esModule",{value:!0});F5.transformArguments=F5.IS_READ_ONLY=F5.FIRST_KEY_INDEX=void 0;F5.FIRST_KEY_INDEX=1;F5.IS_READ_ONLY=!0;function Kor(r,t){let u=["JSON.STRLEN",r];if(t)u.push(t);return u}F5.transformArguments=Kor});var V5=f((z5)=>{Object.defineProperty(z5,"__esModule",{value:!0});z5.transformArguments=z5.FIRST_KEY_INDEX=void 0;z5.FIRST_KEY_INDEX=1;function bor(r,t){let u=["JSON.TYPE",r];if(t)u.push(t);return u}z5.transformArguments=bor});var d=f((A7)=>{Object.defineProperty(A7,"__esModule",{value:!0});A7.transformNumbersReply=A7.transformRedisJsonNullReply=A7.transformRedisJsonReply=A7.transformRedisJsonArgument=void 0;var W5=FJ(),Z5=zJ(),P5=WJ(),H5=HJ(),B5=wJ(),U5=GJ(),h5=aJ(),w5=t5(),d5=e5(),C5=f5(),G5=A5(),k5=I5(),i5=Y5(),a5=g5(),l5=D5(),r7=x5(),t7=j5(),u7=M5(),n7=p5(),e7=L5(),f7=$5(),o7=V5();A7.default={ARRAPPEND:W5,arrAppend:W5,ARRINDEX:Z5,arrIndex:Z5,ARRINSERT:P5,arrInsert:P5,ARRLEN:H5,arrLen:H5,ARRPOP:B5,arrPop:B5,ARRTRIM:U5,arrTrim:U5,DEBUG_MEMORY:h5,debugMemory:h5,DEL:w5,del:w5,FORGET:d5,forget:d5,GET:C5,get:C5,MERGE:G5,merge:G5,MGET:k5,mGet:k5,MSET:i5,mSet:i5,NUMINCRBY:a5,numIncrBy:a5,NUMMULTBY:l5,numMultBy:l5,OBJKEYS:r7,objKeys:r7,OBJLEN:t7,objLen:t7,RESP:u7,resp:u7,SET:n7,set:n7,STRAPPEND:e7,strAppend:e7,STRLEN:f7,strLen:f7,TYPE:o7,type:o7};function por(r){return JSON.stringify(r)}A7.transformRedisJsonArgument=por;function m7(r){return JSON.parse(r)}A7.transformRedisJsonReply=m7;function qor(r){if(r===null)return null;return m7(r)}A7.transformRedisJsonNullReply=qor;function yor(r){return JSON.parse(r)}A7.transformNumbersReply=yor});var Jf=f((Ff)=>{Object.defineProperty(Ff,"__esModule",{value:!0});Ff.default=void 0;var $or=d();Object.defineProperty(Ff,"default",{enumerable:!0,get:function(){return $or.default}})});var _7=f((s7)=>{Object.defineProperty(s7,"__esModule",{value:!0});s7.transformArguments=void 0;function Qor(){return["FT._LIST"]}s7.transformArguments=Qor});var g7=f((N7)=>{Object.defineProperty(N7,"__esModule",{value:!0});N7.transformArguments=void 0;var Vor=er();function Wor(r,t){let u=["FT.ALTER",r,"SCHEMA","ADD"];return Vor.pushSchema(u,t),u}N7.transformArguments=Wor});var Rt=f((c7)=>{Object.defineProperty(c7,"__esModule",{value:!0});c7.transformReply=c7.pushAggregatehOptions=c7.transformArguments=c7.IS_READ_ONLY=c7.FIRST_KEY_INDEX=c7.AggregateGroupByReducers=c7.AggregateSteps=void 0;var R7=m(),nn=er(),tt;(function(r){r.GROUPBY="GROUPBY",r.SORTBY="SORTBY",r.APPLY="APPLY",r.LIMIT="LIMIT",r.FILTER="FILTER"})(tt||(c7.AggregateSteps=tt={}));var C;(function(r){r.COUNT="COUNT",r.COUNT_DISTINCT="COUNT_DISTINCT",r.COUNT_DISTINCTISH="COUNT_DISTINCTISH",r.SUM="SUM",r.MIN="MIN",r.MAX="MAX",r.AVG="AVG",r.STDDEV="STDDEV",r.QUANTILE="QUANTILE",r.TOLIST="TOLIST",r.TO_LIST="TOLIST",r.FIRST_VALUE="FIRST_VALUE",r.RANDOM_SAMPLE="RANDOM_SAMPLE"})(C||(c7.AggregateGroupByReducers=C={}));c7.FIRST_KEY_INDEX=1;c7.IS_READ_ONLY=!0;function Zor(r,t,u){return x7(["FT.AGGREGATE",r,t],u)}c7.transformArguments=Zor;function x7(r,t){if(t?.VERBATIM)r.push("VERBATIM");if(t?.ADDSCORES)r.push("ADDSCORES");if(t?.LOAD)r.push("LOAD"),nn.pushArgumentsWithLength(r,()=>{if(Array.isArray(t.LOAD))for(let u of t.LOAD)D7(r,u);else D7(r,t.LOAD)});if(t?.STEPS)for(let u of t.STEPS)switch(u.type){case tt.GROUPBY:if(r.push("GROUPBY"),!u.properties)r.push("0");else R7.pushVerdictArgument(r,u.properties);if(Array.isArray(u.REDUCE))for(let n of u.REDUCE)O7(r,n);else O7(r,u.REDUCE);break;case tt.SORTBY:if(nn.pushSortByArguments(r,"SORTBY",u.BY),u.MAX)r.push("MAX",u.MAX.toString());break;case tt.APPLY:r.push("APPLY",u.expression,"AS",u.AS);break;case tt.LIMIT:r.push("LIMIT",u.from.toString(),u.size.toString());break;case tt.FILTER:r.push("FILTER",u.expression);break}if(nn.pushParamsArgs(r,t?.PARAMS),t?.DIALECT)r.push("DIALECT",t.DIALECT.toString());if(t?.TIMEOUT!==void 0)r.push("TIMEOUT",t.TIMEOUT.toString());return r}c7.pushAggregatehOptions=x7;function D7(r,t){if(typeof t==="string")r.push(t);else if(r.push(t.identifier),t.AS)r.push("AS",t.AS)}function O7(r,t){switch(r.push("REDUCE",t.type),t.type){case C.COUNT:r.push("0");break;case C.COUNT_DISTINCT:case C.COUNT_DISTINCTISH:case C.SUM:case C.MIN:case C.MAX:case C.AVG:case C.STDDEV:case C.TOLIST:r.push("1",t.property);break;case C.QUANTILE:r.push("2",t.property,t.quantile.toString());break;case C.FIRST_VALUE:{nn.pushArgumentsWithLength(r,()=>{if(r.push(t.property),t.BY){if(r.push("BY"),typeof t.BY==="string")r.push(t.BY);else if(r.push(t.BY.property),t.BY.direction)r.push(t.BY.direction)}});break}case C.RANDOM_SAMPLE:r.push("2",t.property,t.sampleSize.toString());break}if(t.AS)r.push("AS",t.AS)}function Por(r){let t=[];for(let u=1;u<r.length;u++)t.push(R7.transformTuplesReply(r[u]));return{total:r[0],results:t}}c7.transformReply=Por});var $f=f((en)=>{Object.defineProperty(en,"__esModule",{value:!0});en.transformReply=en.transformArguments=en.IS_READ_ONLY=en.FIRST_KEY_INDEX=void 0;var j7=Rt(),K7=Rt();Object.defineProperty(en,"FIRST_KEY_INDEX",{enumerable:!0,get:function(){return K7.FIRST_KEY_INDEX}});Object.defineProperty(en,"IS_READ_ONLY",{enumerable:!0,get:function(){return K7.IS_READ_ONLY}});function Cor(r,t,u){let n=j7.transformArguments(r,t,u);if(n.push("WITHCURSOR"),u?.COUNT)n.push("COUNT",u.COUNT.toString());return n}en.transformArguments=Cor;function Gor(r){return{...j7.transformReply(r[0]),cursor:r[1]}}en.transformReply=Gor});var T7=f((M7)=>{Object.defineProperty(M7,"__esModule",{value:!0});M7.transformArguments=void 0;function ior(r,t){return["FT.ALIASADD",r,t]}M7.transformArguments=ior});var y7=f((p7)=>{Object.defineProperty(p7,"__esModule",{value:!0});p7.transformArguments=void 0;function aor(r,t){return["FT.ALIASDEL",r,t]}p7.transformArguments=aor});var F7=f((v7)=>{Object.defineProperty(v7,"__esModule",{value:!0});v7.transformArguments=void 0;function lor(r,t){return["FT.ALIASUPDATE",r,t]}v7.transformArguments=lor});var z7=f((J7)=>{Object.defineProperty(J7,"__esModule",{value:!0});J7.transformReply=J7.transformArguments=void 0;function rmr(r){return["FT.CONFIG","GET",r]}J7.transformArguments=rmr;function tmr(r){let t=Object.create(null);for(let[u,n]of r)t[u]=n;return t}J7.transformReply=tmr});var W7=f((Q7)=>{Object.defineProperty(Q7,"__esModule",{value:!0});Q7.transformArguments=void 0;function nmr(r,t){return["FT.CONFIG","SET",r,t]}Q7.transformArguments=nmr});var B7=f((P7)=>{Object.defineProperty(P7,"__esModule",{value:!0});P7.transformArguments=void 0;var Z7=m(),emr=er();function fmr(r,t,u){let n=["FT.CREATE",r];if(u?.ON)n.push("ON",u.ON);if(Z7.pushOptionalVerdictArgument(n,"PREFIX",u?.PREFIX),u?.FILTER)n.push("FILTER",u.FILTER);if(u?.LANGUAGE)n.push("LANGUAGE",u.LANGUAGE);if(u?.LANGUAGE_FIELD)n.push("LANGUAGE_FIELD",u.LANGUAGE_FIELD);if(u?.SCORE)n.push("SCORE",u.SCORE.toString());if(u?.SCORE_FIELD)n.push("SCORE_FIELD",u.SCORE_FIELD);if(u?.MAXTEXTFIELDS)n.push("MAXTEXTFIELDS");if(u?.TEMPORARY)n.push("TEMPORARY",u.TEMPORARY.toString());if(u?.NOOFFSETS)n.push("NOOFFSETS");if(u?.NOHL)n.push("NOHL");if(u?.NOFIELDS)n.push("NOFIELDS");if(u?.NOFREQS)n.push("NOFREQS");if(u?.SKIPINITIALSCAN)n.push("SKIPINITIALSCAN");return Z7.pushOptionalVerdictArgument(n,"STOPWORDS",u?.STOPWORDS),n.push("SCHEMA"),emr.pushSchema(n,t),n}P7.transformArguments=fmr});var w7=f((U7)=>{Object.defineProperty(U7,"__esModule",{value:!0});U7.transformArguments=U7.FIRST_KEY_INDEX=void 0;U7.FIRST_KEY_INDEX=1;function omr(r,t){return["FT.CURSOR","DEL",r,t.toString()]}U7.transformArguments=omr});var d7=f((zf)=>{Object.defineProperty(zf,"__esModule",{value:!0});zf.transformReply=zf.transformArguments=zf.IS_READ_ONLY=zf.FIRST_KEY_INDEX=void 0;zf.FIRST_KEY_INDEX=1;zf.IS_READ_ONLY=!0;function Amr(r,t,u){let n=["FT.CURSOR","READ",r,t.toString()];if(u?.COUNT)n.push("COUNT",u.COUNT.toString());return n}zf.transformArguments=Amr;var Emr=$f();Object.defineProperty(zf,"transformReply",{enumerable:!0,get:function(){return Emr.transformReply}})});var k7=f((C7)=>{Object.defineProperty(C7,"__esModule",{value:!0});C7.transformArguments=void 0;var Ymr=m();function gmr(r,t){return Ymr.pushVerdictArguments(["FT.DICTADD",r],t)}C7.transformArguments=gmr});var l7=f((i7)=>{Object.defineProperty(i7,"__esModule",{value:!0});i7.transformArguments=void 0;var Dmr=m();function Omr(r,t){return Dmr.pushVerdictArguments(["FT.DICTDEL",r],t)}i7.transformArguments=Omr});var u$=f((r$)=>{Object.defineProperty(r$,"__esModule",{value:!0});r$.transformArguments=void 0;function Rmr(r){return["FT.DICTDUMP",r]}r$.transformArguments=Rmr});var f$=f((n$)=>{Object.defineProperty(n$,"__esModule",{value:!0});n$.transformArguments=void 0;function xmr(r,t){let u=["FT.DROPINDEX",r];if(t?.DD)u.push("DD");return u}n$.transformArguments=xmr});var A$=f((o$)=>{Object.defineProperty(o$,"__esModule",{value:!0});o$.transformArguments=o$.IS_READ_ONLY=void 0;var cmr=er();o$.IS_READ_ONLY=!0;function Xmr(r,t,u){let n=["FT.EXPLAIN",r,t];if(cmr.pushParamsArgs(n,u?.PARAMS),u?.DIALECT)n.push("DIALECT",u.DIALECT.toString());return n}o$.transformArguments=Xmr});var I$=f((E$)=>{Object.defineProperty(E$,"__esModule",{value:!0});E$.transformArguments=E$.IS_READ_ONLY=void 0;E$.IS_READ_ONLY=!0;function Kmr(r,t){return["FT.EXPLAINCLI",r,t]}E$.transformArguments=Kmr});var g$=f((N$)=>{Object.defineProperty(N$,"__esModule",{value:!0});N$.transformReply=N$.transformArguments=void 0;var _$=m();function Mmr(r){return["FT.INFO",r]}N$.transformArguments=Mmr;function bmr(r){return{indexName:r[1],indexOptions:r[3],indexDefinition:_$.transformTuplesReply(r[5]),attributes:r[7].map((t)=>_$.transformTuplesReply(t)),numDocs:r[9],maxDocId:r[11],numTerms:r[13],numRecords:r[15],invertedSzMb:r[17],vectorIndexSzMb:r[19],totalInvertedIndexBlocks:r[21],offsetVectorsSzMb:r[23],docTableSizeMb:r[25],sortableValuesSizeMb:r[27],keyTableSizeMb:r[29],recordsPerDocAvg:r[31],bytesPerRecordAvg:r[33],offsetsPerTermAvg:r[35],offsetBitsPerRecordAvg:r[37],hashIndexingFailures:r[39],indexing:r[41],percentIndexed:r[43],gcStats:{bytesCollected:r[45][1],totalMsRun:r[45][3],totalCycles:r[45][5],averageCycleTimeMs:r[45][7],lastRunTimeMs:r[45][9],gcNumericTreesMissed:r[45][11],gcBlocksDenied:r[45][13]},cursorStats:{globalIdle:r[47][1],globalTotal:r[47][3],indexCapacity:r[47][5],idnexTotal:r[47][7]},stopWords:r[49]}}N$.transformReply=bmr});var Qf=f((D$)=>{Object.defineProperty(D$,"__esModule",{value:!0});D$.transformReply=D$.transformArguments=D$.IS_READ_ONLY=D$.FIRST_KEY_INDEX=void 0;var pmr=er();D$.FIRST_KEY_INDEX=1;D$.IS_READ_ONLY=!0;function qmr(r,t,u){return pmr.pushSearchOptions(["FT.SEARCH",r,t],u)}D$.transformArguments=qmr;function ymr(r,t){let u=[],n=1;while(n<r.length)u.push({id:r[n++],value:t?Object.create(null):vmr(r[n++])});return{total:r[0],documents:u}}D$.transformReply=ymr;function vmr(r){let t=Object.create(null),u=0;while(u<r.length){let n=r[u++],e=r[u++];if(n==="$")try{Object.assign(t,JSON.parse(e));continue}catch{}t[n]=e}return t}});var X$=f((x$)=>{Object.defineProperty(x$,"__esModule",{value:!0});x$.transformReply=x$.transformArguments=x$.IS_READ_ONLY=void 0;var $mr=Qf(),R$=er();x$.IS_READ_ONLY=!0;function zmr(r,t,u){let n=["FT.PROFILE",r,"SEARCH"];if(u?.LIMITED)n.push("LIMITED");return n.push("QUERY",t),R$.pushSearchOptions(n,u)}x$.transformArguments=zmr;function Qmr(r,t){return{results:$mr.transformReply(r[0],t),profile:R$.transformProfile(r[1])}}x$.transformReply=Qmr});var M$=f((K$)=>{Object.defineProperty(K$,"__esModule",{value:!0});K$.transformReply=K$.transformArguments=K$.IS_READ_ONLY=void 0;var j$=Rt(),Zmr=er();K$.IS_READ_ONLY=!0;function Pmr(r,t,u){let n=["FT.PROFILE",r,"AGGREGATE"];if(u?.LIMITED)n.push("LIMITED");return n.push("QUERY",t),j$.pushAggregatehOptions(n,u),n}K$.transformArguments=Pmr;function Hmr(r){return{results:j$.transformReply(r[0]),profile:Zmr.transformProfile(r[1])}}K$.transformReply=Hmr});var p$=f((b$)=>{Object.defineProperty(b$,"__esModule",{value:!0});b$.transformReply=b$.transformArguments=b$.IS_READ_ONLY=b$.FIRST_KEY_INDEX=void 0;var hmr=er();b$.FIRST_KEY_INDEX=1;b$.IS_READ_ONLY=!0;function wmr(r,t,u){return hmr.pushSearchOptions(["FT.SEARCH",r,t,"NOCONTENT"],u)}b$.transformArguments=wmr;function dmr(r){return{total:r[0],documents:r.slice(1)}}b$.transformReply=dmr});var L$=f((y$)=>{Object.defineProperty(y$,"__esModule",{value:!0});y$.transformReply=y$.transformArguments=void 0;function imr(r,t,u){let n=["FT.SPELLCHECK",r,t];if(u?.DISTANCE)n.push("DISTANCE",u.DISTANCE.toString());if(u?.TERMS)if(Array.isArray(u.TERMS))for(let e of u.TERMS)q$(n,e);else q$(n,u.TERMS);if(u?.DIALECT)n.push("DIALECT",u.DIALECT.toString());return n}y$.transformArguments=imr;function q$(r,{mode:t,dictionary:u}){r.push("TERMS",t,u)}function amr(r){return r.map(([,t,u])=>({term:t,suggestions:u.map(([n,e])=>({score:Number(n),suggestion:e}))}))}y$.transformReply=amr});var $$=f((F$)=>{Object.defineProperty(F$,"__esModule",{value:!0});F$.transformArguments=void 0;function rAr(r,t,u,n){let e=["FT.SUGADD",r,t,u.toString()];if(n?.INCR)e.push("INCR");if(n?.PAYLOAD)e.push("PAYLOAD",n.PAYLOAD);return e}F$.transformArguments=rAr});var z$=f((Vf)=>{Object.defineProperty(Vf,"__esModule",{value:!0});Vf.transformReply=Vf.transformArguments=void 0;function tAr(r,t){return["FT.SUGDEL",r,t]}Vf.transformArguments=tAr;var uAr=m();Object.defineProperty(Vf,"transformReply",{enumerable:!0,get:function(){return uAr.transformBooleanReply}})});var Lr=f((Q$)=>{Object.defineProperty(Q$,"__esModule",{value:!0});Q$.transformArguments=Q$.IS_READ_ONLY=void 0;Q$.IS_READ_ONLY=!0;function fAr(r,t,u){let n=["FT.SUGGET",r,t];if(u?.FUZZY)n.push("FUZZY");if(u?.MAX)n.push("MAX",u.MAX.toString());return n}Q$.transformArguments=fAr});var Z$=f((Wf)=>{Object.defineProperty(Wf,"__esModule",{value:!0});Wf.transformReply=Wf.transformArguments=Wf.IS_READ_ONLY=void 0;var mAr=Lr(),AAr=Lr();Object.defineProperty(Wf,"IS_READ_ONLY",{enumerable:!0,get:function(){return AAr.IS_READ_ONLY}});function EAr(r,t,u){return[...mAr.transformArguments(r,t,u),"WITHPAYLOADS"]}Wf.transformArguments=EAr;function sAr(r){if(r===null)return null;let t=[];for(let u=0;u<r.length;u+=2)t.push({suggestion:r[u],payload:r[u+1]});return t}Wf.transformReply=sAr});var H$=f((Zf)=>{Object.defineProperty(Zf,"__esModule",{value:!0});Zf.transformReply=Zf.transformArguments=Zf.IS_READ_ONLY=void 0;var _Ar=Lr(),NAr=Lr();Object.defineProperty(Zf,"IS_READ_ONLY",{enumerable:!0,get:function(){return NAr.IS_READ_ONLY}});function YAr(r,t,u){return[..._Ar.transformArguments(r,t,u),"WITHSCORES","WITHPAYLOADS"]}Zf.transformArguments=YAr;function gAr(r){if(r===null)return null;let t=[];for(let u=0;u<r.length;u+=3)t.push({suggestion:r[u],score:Number(r[u+1]),payload:r[u+2]});return t}Zf.transformReply=gAr});var U$=f((Pf)=>{Object.defineProperty(Pf,"__esModule",{value:!0});Pf.transformReply=Pf.transformArguments=Pf.IS_READ_ONLY=void 0;var OAr=Lr(),RAr=Lr();Object.defineProperty(Pf,"IS_READ_ONLY",{enumerable:!0,get:function(){return RAr.IS_READ_ONLY}});function xAr(r,t,u){return[...OAr.transformArguments(r,t,u),"WITHSCORES"]}Pf.transformArguments=xAr;function cAr(r){if(r===null)return null;let t=[];for(let u=0;u<r.length;u+=2)t.push({suggestion:r[u],score:Number(r[u+1])});return t}Pf.transformReply=cAr});var d$=f((h$)=>{Object.defineProperty(h$,"__esModule",{value:!0});h$.transformArguments=h$.IS_READ_ONLY=void 0;h$.IS_READ_ONLY=!0;function jAr(r){return["FT.SUGLEN",r]}h$.transformArguments=jAr});var k$=f((C$)=>{Object.defineProperty(C$,"__esModule",{value:!0});C$.transformArguments=void 0;function SAr(r){return["FT.SYNDUMP",r]}C$.transformArguments=SAr});var l$=f((i$)=>{Object.defineProperty(i$,"__esModule",{value:!0});i$.transformArguments=void 0;var MAr=m();function bAr(r,t,u,n){let e=["FT.SYNUPDATE",r,t];if(n?.SKIPINITIALSCAN)e.push("SKIPINITIALSCAN");return MAr.pushVerdictArguments(e,u)}i$.transformArguments=bAr});var u6=f((r6)=>{Object.defineProperty(r6,"__esModule",{value:!0});r6.transformArguments=void 0;function TAr(r,t){return["FT.TAGVALS",r,t]}r6.transformArguments=TAr});var er=f((H6)=>{Object.defineProperty(H6,"__esModule",{value:!0});H6.transformProfile=H6.pushSearchOptions=H6.pushParamsArgs=H6.pushSchema=H6.SCHEMA_GEO_SHAPE_COORD_SYSTEM=H6.VectorAlgorithms=H6.SchemaTextFieldPhonetics=H6.SchemaFieldTypes=H6.pushArgumentsWithLength=H6.pushSortByArguments=H6.pushSortByProperty=H6.RedisSearchLanguages=void 0;var n6=_7(),e6=g7(),f6=$f(),o6=Rt(),m6=T7(),A6=y7(),E6=F7(),s6=z7(),I6=W7(),_6=B7(),N6=w7(),Y6=d7(),g6=k7(),D6=l7(),O6=u$(),R6=f$(),x6=A$(),c6=I$(),X6=g$(),j6=X$(),K6=M$(),S6=Qf(),M6=p$(),b6=L$(),T6=$$(),p6=z$(),q6=Z$(),y6=H$(),v6=U$(),L6=Lr(),F6=d$(),J6=k$(),$6=l$(),z6=u6(),ru=m();H6.default={_LIST:n6,_list:n6,ALTER:e6,alter:e6,AGGREGATE_WITHCURSOR:f6,aggregateWithCursor:f6,AGGREGATE:o6,aggregate:o6,ALIASADD:m6,aliasAdd:m6,ALIASDEL:A6,aliasDel:A6,ALIASUPDATE:E6,aliasUpdate:E6,CONFIG_GET:s6,configGet:s6,CONFIG_SET:I6,configSet:I6,CREATE:_6,create:_6,CURSOR_DEL:N6,cursorDel:N6,CURSOR_READ:Y6,cursorRead:Y6,DICTADD:g6,dictAdd:g6,DICTDEL:D6,dictDel:D6,DICTDUMP:O6,dictDump:O6,DROPINDEX:R6,dropIndex:R6,EXPLAIN:x6,explain:x6,EXPLAINCLI:c6,explainCli:c6,INFO:X6,info:X6,PROFILESEARCH:j6,profileSearch:j6,PROFILEAGGREGATE:K6,profileAggregate:K6,SEARCH:S6,search:S6,SEARCH_NOCONTENT:M6,searchNoContent:M6,SPELLCHECK:b6,spellCheck:b6,SUGADD:T6,sugAdd:T6,SUGDEL:p6,sugDel:p6,SUGGET_WITHPAYLOADS:q6,sugGetWithPayloads:q6,SUGGET_WITHSCORES_WITHPAYLOADS:y6,sugGetWithScoresWithPayloads:y6,SUGGET_WITHSCORES:v6,sugGetWithScores:v6,SUGGET:L6,sugGet:L6,SUGLEN:F6,sugLen:F6,SYNDUMP:J6,synDump:J6,SYNUPDATE:$6,synUpdate:$6,TAGVALS:z6,tagVals:z6};var Q6;(function(r){r.ARABIC="Arabic",r.BASQUE="Basque",r.CATALANA="Catalan",r.DANISH="Danish",r.DUTCH="Dutch",r.ENGLISH="English",r.FINNISH="Finnish",r.FRENCH="French",r.GERMAN="German",r.GREEK="Greek",r.HUNGARIAN="Hungarian",r.INDONESAIN="Indonesian",r.IRISH="Irish",r.ITALIAN="Italian",r.LITHUANIAN="Lithuanian",r.NEPALI="Nepali",r.NORWEIGAN="Norwegian",r.PORTUGUESE="Portuguese",r.ROMANIAN="Romanian",r.RUSSIAN="Russian",r.SPANISH="Spanish",r.SWEDISH="Swedish",r.TAMIL="Tamil",r.TURKISH="Turkish",r.CHINESE="Chinese"})(Q6||(H6.RedisSearchLanguages=Q6={}));function on(r,t){if(typeof t==="string")r.push(t);else if(r.push(t.BY),t.DIRECTION)r.push(t.DIRECTION)}H6.pushSortByProperty=on;function pAr(r,t,u){let n=r.push(t,"");if(Array.isArray(u))for(let e of u)on(r,e);else on(r,u);return r[n-1]=(r.length-n).toString(),r}H6.pushSortByArguments=pAr;function W6(r,t){let u=r.push("")-1;return t(r),r[u]=(r.length-u-1).toString(),r}H6.pushArgumentsWithLength=W6;var Fr;(function(r){r.TEXT="TEXT",r.NUMERIC="NUMERIC",r.GEO="GEO",r.TAG="TAG",r.VECTOR="VECTOR",r.GEOSHAPE="GEOSHAPE"})(Fr||(H6.SchemaFieldTypes=Fr={}));function fn(r,t){if(t.SORTABLE){if(r.push("SORTABLE"),t.SORTABLE==="UNF")r.push("UNF")}if(t.NOINDEX)r.push("NOINDEX")}var V6;(function(r){r.DM_EN="dm:en",r.DM_FR="dm:fr",r.FM_PT="dm:pt",r.DM_ES="dm:es"})(V6||(H6.SchemaTextFieldPhonetics=V6={}));var mn;(function(r){r.FLAT="FLAT",r.HNSW="HNSW"})(mn||(H6.VectorAlgorithms=mn={}));H6.SCHEMA_GEO_SHAPE_COORD_SYSTEM={SPHERICAL:"SPHERICAL",FLAT:"FLAT"};function qAr(r,t){for(let[u,n]of Object.entries(t)){if(r.push(u),typeof n==="string"){r.push(n);continue}if(n.AS)r.push("AS",n.AS);switch(r.push(n.type),n.type){case Fr.TEXT:if(n.NOSTEM)r.push("NOSTEM");if(n.WEIGHT)r.push("WEIGHT",n.WEIGHT.toString());if(n.PHONETIC)r.push("PHONETIC",n.PHONETIC);if(n.WITHSUFFIXTRIE)r.push("WITHSUFFIXTRIE");if(fn(r,n),n.INDEXEMPTY)r.push("INDEXEMPTY");break;case Fr.NUMERIC:case Fr.GEO:fn(r,n);break;case Fr.TAG:if(n.SEPARATOR)r.push("SEPARATOR",n.SEPARATOR);if(n.CASESENSITIVE)r.push("CASESENSITIVE");if(n.WITHSUFFIXTRIE)r.push("WITHSUFFIXTRIE");if(fn(r,n),n.INDEXEMPTY)r.push("INDEXEMPTY");break;case Fr.VECTOR:r.push(n.ALGORITHM),W6(r,()=>{if(r.push("TYPE",n.TYPE,"DIM",n.DIM.toString(),"DISTANCE_METRIC",n.DISTANCE_METRIC),n.INITIAL_CAP)r.push("INITIAL_CAP",n.INITIAL_CAP.toString());switch(n.ALGORITHM){case mn.FLAT:if(n.BLOCK_SIZE)r.push("BLOCK_SIZE",n.BLOCK_SIZE.toString());break;case mn.HNSW:if(n.M)r.push("M",n.M.toString());if(n.EF_CONSTRUCTION)r.push("EF_CONSTRUCTION",n.EF_CONSTRUCTION.toString());if(n.EF_RUNTIME)r.push("EF_RUNTIME",n.EF_RUNTIME.toString());break}});break;case Fr.GEOSHAPE:if(n.COORD_SYSTEM!==void 0)r.push("COORD_SYSTEM",n.COORD_SYSTEM);fn(r,n);break}if(n.INDEXMISSING)r.push("INDEXMISSING")}}H6.pushSchema=qAr;function Z6(r,t){if(t){let u=Object.entries(t);r.push("PARAMS",(u.length*2).toString());for(let[n,e]of u)r.push(n,typeof e==="number"?e.toString():e)}return r}H6.pushParamsArgs=Z6;function yAr(r,t){if(t?.VERBATIM)r.push("VERBATIM");if(t?.NOSTOPWORDS)r.push("NOSTOPWORDS");if(ru.pushOptionalVerdictArgument(r,"INKEYS",t?.INKEYS),ru.pushOptionalVerdictArgument(r,"INFIELDS",t?.INFIELDS),ru.pushOptionalVerdictArgument(r,"RETURN",t?.RETURN),t?.SUMMARIZE){if(r.push("SUMMARIZE"),typeof t.SUMMARIZE==="object"){if(t.SUMMARIZE.FIELDS)r.push("FIELDS"),ru.pushVerdictArgument(r,t.SUMMARIZE.FIELDS);if(t.SUMMARIZE.FRAGS)r.push("FRAGS",t.SUMMARIZE.FRAGS.toString());if(t.SUMMARIZE.LEN)r.push("LEN",t.SUMMARIZE.LEN.toString());if(t.SUMMARIZE.SEPARATOR)r.push("SEPARATOR",t.SUMMARIZE.SEPARATOR)}}if(t?.HIGHLIGHT){if(r.push("HIGHLIGHT"),typeof t.HIGHLIGHT==="object"){if(t.HIGHLIGHT.FIELDS)r.push("FIELDS"),ru.pushVerdictArgument(r,t.HIGHLIGHT.FIELDS);if(t.HIGHLIGHT.TAGS)r.push("TAGS",t.HIGHLIGHT.TAGS.open,t.HIGHLIGHT.TAGS.close)}}if(t?.SLOP)r.push("SLOP",t.SLOP.toString());if(t?.INORDER)r.push("INORDER");if(t?.LANGUAGE)r.push("LANGUAGE",t.LANGUAGE);if(t?.EXPANDER)r.push("EXPANDER",t.EXPANDER);if(t?.SCORER)r.push("SCORER",t.SCORER);if(t?.SORTBY)r.push("SORTBY"),on(r,t.SORTBY);if(t?.LIMIT)r.push("LIMIT",t.LIMIT.from.toString(),t.LIMIT.size.toString());if(t?.PARAMS)Z6(r,t.PARAMS);if(t?.DIALECT)r.push("DIALECT",t.DIALECT.toString());if(t?.RETURN?.length===0)r.preserve=!0;if(t?.TIMEOUT!==void 0)r.push("TIMEOUT",t.TIMEOUT.toString());return r}H6.pushSearchOptions=yAr;function vAr(r){return{totalProfileTime:r[0][1],parsingTime:r[1][1],pipelineCreationTime:r[2][1],iteratorsProfile:LAr(r[3][1])}}H6.transformProfile=vAr;function LAr(r){var t={};for(let u=0;u<r.length;u+=2){let n=r[u+1];switch(r[u]){case"Type":t.type=n;break;case"Counter":t.counter=n;break;case"Time":t.time=n;break;case"Query type":t.queryType=n;break;case"Child iterators":t.childIterators=n.map(P6);break}}return t}function P6(r){var t={};for(let u=1;u<r.length;u+=2){let n=r[u+1];switch(r[u]){case"Type":t.type=n;break;case"Counter":t.counter=n;break;case"Time":t.time=n;break;case"Size":t.size=n;break;case"Term":t.term=n;break;case"Child iterators":t.childIterators=n.map(P6);break}}return t}});var Hf=f((Xr)=>{Object.defineProperty(Xr,"__esModule",{value:!0});Xr.AggregateSteps=Xr.AggregateGroupByReducers=Xr.VectorAlgorithms=Xr.SchemaTextFieldPhonetics=Xr.SchemaFieldTypes=Xr.RedisSearchLanguages=Xr.default=void 0;var hAr=er();Object.defineProperty(Xr,"default",{enumerable:!0,get:function(){return hAr.default}});var An=er();Object.defineProperty(Xr,"RedisSearchLanguages",{enumerable:!0,get:function(){return An.RedisSearchLanguages}});Object.defineProperty(Xr,"SchemaFieldTypes",{enumerable:!0,get:function(){return An.SchemaFieldTypes}});Object.defineProperty(Xr,"SchemaTextFieldPhonetics",{enumerable:!0,get:function(){return An.SchemaTextFieldPhonetics}});Object.defineProperty(Xr,"VectorAlgorithms",{enumerable:!0,get:function(){return An.VectorAlgorithms}});var U6=Rt();Object.defineProperty(Xr,"AggregateGroupByReducers",{enumerable:!0,get:function(){return U6.AggregateGroupByReducers}});Object.defineProperty(Xr,"AggregateSteps",{enumerable:!0,get:function(){return U6.AggregateSteps}})});var d6=f((h6)=>{Object.defineProperty(h6,"__esModule",{value:!0});h6.transformArguments=h6.FIRST_KEY_INDEX=void 0;var xt=p();h6.FIRST_KEY_INDEX=1;function dAr(r,t,u,n){let e=["TS.ADD",r,xt.transformTimestampArgument(t),u.toString()];if(xt.pushRetentionArgument(e,n?.RETENTION),xt.pushEncodingArgument(e,n?.ENCODING),xt.pushChunkSizeArgument(e,n?.CHUNK_SIZE),n?.ON_DUPLICATE)e.push("ON_DUPLICATE",n.ON_DUPLICATE);return xt.pushLabelsArgument(e,n?.LABELS),xt.pushIgnoreArgument(e,n?.IGNORE),e}h6.transformArguments=dAr});var k6=f((C6)=>{Object.defineProperty(C6,"__esModule",{value:!0});C6.transformArguments=C6.FIRST_KEY_INDEX=void 0;var tu=p();C6.FIRST_KEY_INDEX=1;function GAr(r,t){let u=["TS.ALTER",r];return tu.pushRetentionArgument(u,t?.RETENTION),tu.pushChunkSizeArgument(u,t?.CHUNK_SIZE),tu.pushDuplicatePolicy(u,t?.DUPLICATE_POLICY),tu.pushLabelsArgument(u,t?.LABELS),tu.pushIgnoreArgument(u,t?.IGNORE),u}C6.transformArguments=GAr});var l6=f((i6)=>{Object.defineProperty(i6,"__esModule",{value:!0});i6.transformArguments=i6.FIRST_KEY_INDEX=void 0;var ct=p();i6.FIRST_KEY_INDEX=1;function iAr(r,t){let u=["TS.CREATE",r];return ct.pushRetentionArgument(u,t?.RETENTION),ct.pushEncodingArgument(u,t?.ENCODING),ct.pushChunkSizeArgument(u,t?.CHUNK_SIZE),ct.pushDuplicatePolicy(u,t?.DUPLICATE_POLICY),ct.pushLabelsArgument(u,t?.LABELS),ct.pushIgnoreArgument(u,t?.IGNORE),u}i6.transformArguments=iAr});var u4=f((r4)=>{Object.defineProperty(r4,"__esModule",{value:!0});r4.transformArguments=r4.FIRST_KEY_INDEX=void 0;r4.FIRST_KEY_INDEX=1;function lAr(r,t,u,n,e){let o=["TS.CREATERULE",r,t,"AGGREGATION",u,n.toString()];if(e)o.push(e.toString());return o}r4.transformArguments=lAr});var f4=f((n4)=>{Object.defineProperty(n4,"__esModule",{value:!0});n4.transformArguments=n4.FIRST_KEY_INDEX=void 0;var tEr=p();n4.FIRST_KEY_INDEX=1;function uEr(r,t,u){return tEr.transformIncrDecrArguments("TS.DECRBY",r,t,u)}n4.transformArguments=uEr});var E4=f((m4)=>{Object.defineProperty(m4,"__esModule",{value:!0});m4.transformArguments=m4.FIRTS_KEY_INDEX=void 0;var o4=p();m4.FIRTS_KEY_INDEX=1;function eEr(r,t,u){return["TS.DEL",r,o4.transformTimestampArgument(t),o4.transformTimestampArgument(u)]}m4.transformArguments=eEr});var _4=f((s4)=>{Object.defineProperty(s4,"__esModule",{value:!0});s4.transformArguments=s4.FIRST_KEY_INDEX=void 0;s4.FIRST_KEY_INDEX=1;function oEr(r,t){return["TS.DELETERULE",r,t]}s4.transformArguments=oEr});var D4=f((Y4)=>{Object.defineProperty(Y4,"__esModule",{value:!0});Y4.transformReply=Y4.transformArguments=Y4.IS_READ_ONLY=Y4.FIRST_KEY_INDEX=void 0;var N4=p();Y4.FIRST_KEY_INDEX=1;Y4.IS_READ_ONLY=!0;function AEr(r,t){return N4.pushLatestArgument(["TS.GET",r],t?.LATEST)}Y4.transformArguments=AEr;function EEr(r){if(r.length===0)return null;return N4.transformSampleReply(r)}Y4.transformReply=EEr});var x4=f((O4)=>{Object.defineProperty(O4,"__esModule",{value:!0});O4.transformArguments=O4.FIRST_KEY_INDEX=void 0;var NEr=p();O4.FIRST_KEY_INDEX=1;function YEr(r,t,u){return NEr.transformIncrDecrArguments("TS.INCRBY",r,t,u)}O4.transformArguments=YEr});var En=f((c4)=>{Object.defineProperty(c4,"__esModule",{value:!0});c4.transformReply=c4.transformArguments=c4.IS_READ_ONLY=c4.FIRST_KEY_INDEX=void 0;c4.FIRST_KEY_INDEX=1;c4.IS_READ_ONLY=!0;function DEr(r){return["TS.INFO",r]}c4.transformArguments=DEr;function OEr(r){return{totalSamples:r[1],memoryUsage:r[3],firstTimestamp:r[5],lastTimestamp:r[7],retentionTime:r[9],chunkCount:r[11],chunkSize:r[13],chunkType:r[15],duplicatePolicy:r[17],labels:r[19].map(([t,u])=>({name:t,value:u})),sourceKey:r[21],rules:r[23].map(([t,u,n])=>({key:t,timeBucket:u,aggregationType:n}))}}c4.transformReply=OEr});var M4=f((sn)=>{Object.defineProperty(sn,"__esModule",{value:!0});sn.transformReply=sn.transformArguments=sn.FIRST_KEY_INDEX=sn.IS_READ_ONLY=void 0;var j4=En(),K4=En();Object.defineProperty(sn,"IS_READ_ONLY",{enumerable:!0,get:function(){return K4.IS_READ_ONLY}});Object.defineProperty(sn,"FIRST_KEY_INDEX",{enumerable:!0,get:function(){return K4.FIRST_KEY_INDEX}});function XEr(r){let t=j4.transformArguments(r);return t.push("DEBUG"),t}sn.transformArguments=XEr;function jEr(r){let t=j4.transformReply(r);return t.keySelfName=r[25],t.chunks=r[27].map((u)=>({startTimestamp:u[1],endTimestamp:u[3],samples:u[5],size:u[7],bytesPerSample:u[9]})),t}sn.transformReply=jEr});var p4=f((b4)=>{Object.defineProperty(b4,"__esModule",{value:!0});b4.transformArguments=b4.FIRST_KEY_INDEX=void 0;var SEr=p();b4.FIRST_KEY_INDEX=1;function MEr(r){let t=["TS.MADD"];for(let{key:u,timestamp:n,value:e}of r)t.push(u,SEr.transformTimestampArgument(n),e.toString());return t}b4.transformArguments=MEr});var v4=f((q4)=>{Object.defineProperty(q4,"__esModule",{value:!0});q4.transformReply=q4.transformArguments=q4.IS_READ_ONLY=void 0;var Bf=p();q4.IS_READ_ONLY=!0;function TEr(r,t){let u=Bf.pushLatestArgument(["TS.MGET"],t?.LATEST);return Bf.pushFilterArgument(u,r)}q4.transformArguments=TEr;function pEr(r){return r.map(([t,u,n])=>({key:t,sample:Bf.transformSampleReply(n)}))}q4.transformReply=pEr});var J4=f((L4)=>{Object.defineProperty(L4,"__esModule",{value:!0});L4.transformReply=L4.transformArguments=L4.IS_READ_ONLY=void 0;var In=p();L4.IS_READ_ONLY=!0;function vEr(r,t){let u=In.pushWithLabelsArgument(["TS.MGET"],t?.SELECTED_LABELS);return In.pushFilterArgument(u,r)}L4.transformArguments=vEr;function LEr(r){return r.map(([t,u,n])=>({key:t,labels:In.transformLablesReply(u),sample:In.transformSampleReply(n)}))}L4.transformReply=LEr});var Q4=f(($4)=>{Object.defineProperty($4,"__esModule",{value:!0});$4.transformArguments=$4.IS_READ_ONLY=void 0;var $Er=m();$4.IS_READ_ONLY=!0;function zEr(r){return $Er.pushVerdictArguments(["TS.QUERYINDEX"],r)}$4.transformArguments=zEr});var P4=f((W4)=>{Object.defineProperty(W4,"__esModule",{value:!0});W4.transformReply=W4.transformArguments=W4.IS_READ_ONLY=W4.FIRST_KEY_INDEX=void 0;var V4=p();W4.FIRST_KEY_INDEX=1;W4.IS_READ_ONLY=!0;function VEr(r,t,u,n){return V4.pushRangeArguments(["TS.RANGE",r],t,u,n)}W4.transformArguments=VEr;function WEr(r){return V4.transformRangeReply(r)}W4.transformReply=WEr});var h4=f((B4)=>{Object.defineProperty(B4,"__esModule",{value:!0});B4.transformReply=B4.transformArguments=B4.IS_READ_ONLY=B4.FIRST_KEY_INDEX=void 0;var H4=p();B4.FIRST_KEY_INDEX=1;B4.IS_READ_ONLY=!0;function BEr(r,t,u,n){return H4.pushRangeArguments(["TS.REVRANGE",r],t,u,n)}B4.transformArguments=BEr;function UEr(r){return H4.transformRangeReply(r)}B4.transformReply=UEr});var w4=f((Uf)=>{Object.defineProperty(Uf,"__esModule",{value:!0});Uf.transformReply=Uf.transformArguments=Uf.IS_READ_ONLY=void 0;var CEr=p();Uf.IS_READ_ONLY=!0;function GEr(r,t,u,n){return CEr.pushMRangeArguments(["TS.MRANGE"],r,t,u,n)}Uf.transformArguments=GEr;var kEr=p();Object.defineProperty(Uf,"transformReply",{enumerable:!0,get:function(){return kEr.transformMRangeReply}})});var d4=f((hf)=>{Object.defineProperty(hf,"__esModule",{value:!0});hf.transformReply=hf.transformArguments=hf.IS_READ_ONLY=void 0;var rsr=p();hf.IS_READ_ONLY=!0;function tsr(r,t,u,n){return rsr.pushMRangeWithLabelsArguments(["TS.MRANGE"],r,t,u,n)}hf.transformArguments=tsr;var usr=p();Object.defineProperty(hf,"transformReply",{enumerable:!0,get:function(){return usr.transformMRangeWithLabelsReply}})});var C4=f((wf)=>{Object.defineProperty(wf,"__esModule",{value:!0});wf.transformReply=wf.transformArguments=wf.IS_READ_ONLY=void 0;var osr=p();wf.IS_READ_ONLY=!0;function msr(r,t,u,n){return osr.pushMRangeArguments(["TS.MREVRANGE"],r,t,u,n)}wf.transformArguments=msr;var Asr=p();Object.defineProperty(wf,"transformReply",{enumerable:!0,get:function(){return Asr.transformMRangeReply}})});var G4=f((df)=>{Object.defineProperty(df,"__esModule",{value:!0});df.transformReply=df.transformArguments=df.IS_READ_ONLY=void 0;var _sr=p();df.IS_READ_ONLY=!0;function Nsr(r,t,u,n){return _sr.pushMRangeWithLabelsArguments(["TS.MREVRANGE"],r,t,u,n)}df.transformArguments=Nsr;var Ysr=p();Object.defineProperty(df,"transformReply",{enumerable:!0,get:function(){return Ysr.transformMRangeWithLabelsReply}})});var p=f((q8)=>{Object.defineProperty(q8,"__esModule",{value:!0});q8.pushLatestArgument=q8.transformMRangeWithLabelsReply=q8.transformMRangeReply=q8.transformRangeReply=q8.pushMRangeWithLabelsArguments=q8.pushWithLabelsArgument=q8.pushMRangeArguments=q8.pushFilterArgument=q8.pushMRangeGroupByArguments=q8.pushRangeArguments=q8.TimeSeriesBucketTimestamp=q8.transformSampleReply=q8.transformIncrDecrArguments=q8.pushLabelsArgument=q8.transformLablesReply=q8.pushDuplicatePolicy=q8.pushChunkSizeArgument=q8.pushEncodingArgument=q8.TimeSeriesEncoding=q8.pushRetentionArgument=q8.pushIgnoreArgument=q8.transformTimestampArgument=q8.TimeSeriesReducers=q8.TimeSeriesDuplicatePolicies=q8.TimeSeriesAggregationType=void 0;var k4=d6(),i4=k6(),a4=l6(),l4=u4(),r8=f4(),t8=E4(),u8=_4(),n8=D4(),e8=x4(),f8=M4(),o8=En(),m8=p4(),A8=v4(),E8=J4(),s8=Q4(),I8=P4(),_8=h4(),N8=w4(),Y8=d4(),g8=C4(),D8=G4(),j8=m();q8.default={ADD:k4,add:k4,ALTER:i4,alter:i4,CREATE:a4,create:a4,CREATERULE:l4,createRule:l4,DECRBY:r8,decrBy:r8,DEL:t8,del:t8,DELETERULE:u8,deleteRule:u8,GET:n8,get:n8,INCRBY:e8,incrBy:e8,INFO_DEBUG:f8,infoDebug:f8,INFO:o8,info:o8,MADD:m8,mAdd:m8,MGET:A8,mGet:A8,MGET_WITHLABELS:E8,mGetWithLabels:E8,QUERYINDEX:s8,queryIndex:s8,RANGE:I8,range:I8,REVRANGE:_8,revRange:_8,MRANGE:N8,mRange:N8,MRANGE_WITHLABELS:Y8,mRangeWithLabels:Y8,MREVRANGE:g8,mRevRange:g8,MREVRANGE_WITHLABELS:D8,mRevRangeWithLabels:D8};var O8;(function(r){r.AVG="AVG",r.AVERAGE="AVG",r.FIRST="FIRST",r.LAST="LAST",r.MIN="MIN",r.MINIMUM="MIN",r.MAX="MAX",r.MAXIMUM="MAX",r.SUM="SUM",r.RANGE="RANGE",r.COUNT="COUNT",r.STD_P="STD.P",r.STD_S="STD.S",r.VAR_P="VAR.P",r.VAR_S="VAR.S",r.TWA="TWA"})(O8||(q8.TimeSeriesAggregationType=O8={}));var R8;(function(r){r.BLOCK="BLOCK",r.FIRST="FIRST",r.LAST="LAST",r.MIN="MIN",r.MAX="MAX",r.SUM="SUM"})(R8||(q8.TimeSeriesDuplicatePolicies=R8={}));var x8;(function(r){r.AVG="AVG",r.SUM="SUM",r.MIN="MIN",r.MINIMUM="MIN",r.MAX="MAX",r.MAXIMUM="MAX",r.RANGE="range",r.COUNT="COUNT",r.STD_P="STD.P",r.STD_S="STD.S",r.VAR_P="VAR.P",r.VAR_S="VAR.S"})(x8||(q8.TimeSeriesReducers=x8={}));function ut(r){if(typeof r==="string")return r;return(typeof r==="number"?r:r.getTime()).toString()}q8.transformTimestampArgument=ut;function Rsr(r,t){if(t!==void 0)r.push("IGNORE",t.MAX_TIME_DIFF.toString(),t.MAX_VAL_DIFF.toString())}q8.pushIgnoreArgument=Rsr;function K8(r,t){if(t!==void 0)r.push("RETENTION",t.toString());return r}q8.pushRetentionArgument=K8;var c8;(function(r){r.COMPRESSED="COMPRESSED",r.UNCOMPRESSED="UNCOMPRESSED"})(c8||(q8.TimeSeriesEncoding=c8={}));function xsr(r,t){if(t!==void 0)r.push("ENCODING",t);return r}q8.pushEncodingArgument=xsr;function S8(r,t){if(t!==void 0)r.push("CHUNK_SIZE",t.toString());return r}q8.pushChunkSizeArgument=S8;function csr(r,t){if(t!==void 0)r.push("DUPLICATE_POLICY",t);return r}q8.pushDuplicatePolicy=csr;function M8(r){let t={};for(let[u,n]of r)t[u]=n;return t}q8.transformLablesReply=M8;function b8(r,t){if(t){r.push("LABELS");for(let[u,n]of Object.entries(t))r.push(u,n)}return r}q8.pushLabelsArgument=b8;function Xsr(r,t,u,n){let e=[r,t,u.toString()];if(n?.TIMESTAMP!==void 0&&n?.TIMESTAMP!==null)e.push("TIMESTAMP",ut(n.TIMESTAMP));if(K8(e,n?.RETENTION),n?.UNCOMPRESSED)e.push("UNCOMPRESSED");return S8(e,n?.CHUNK_SIZE),b8(e,n?.LABELS),e}q8.transformIncrDecrArguments=Xsr;function _n(r){return{timestamp:r[0],value:Number(r[1])}}q8.transformSampleReply=_n;var X8;(function(r){r.LOW="-",r.HIGH="+",r.MID="~"})(X8||(q8.TimeSeriesBucketTimestamp=X8={}));function Cf(r,t,u,n){if(r.push(ut(t),ut(u)),p8(r,n?.LATEST),n?.FILTER_BY_TS){r.push("FILTER_BY_TS");for(let e of n.FILTER_BY_TS)r.push(ut(e))}if(n?.FILTER_BY_VALUE)r.push("FILTER_BY_VALUE",n.FILTER_BY_VALUE.min.toString(),n.FILTER_BY_VALUE.max.toString());if(n?.COUNT)r.push("COUNT",n.COUNT.toString());if(n?.ALIGN)r.push("ALIGN",ut(n.ALIGN));if(n?.AGGREGATION){if(r.push("AGGREGATION",n.AGGREGATION.type,ut(n.AGGREGATION.timeBucket)),n.AGGREGATION.BUCKETTIMESTAMP)r.push("BUCKETTIMESTAMP",n.AGGREGATION.BUCKETTIMESTAMP);if(n.AGGREGATION.EMPTY)r.push("EMPTY")}return r}q8.pushRangeArguments=Cf;function Gf(r,t){if(t)r.push("GROUPBY",t.label,"REDUCE",t.reducer);return r}q8.pushMRangeGroupByArguments=Gf;function kf(r,t){return r.push("FILTER"),j8.pushVerdictArguments(r,t)}q8.pushFilterArgument=kf;function jsr(r,t,u,n,e){return r=Cf(r,t,u,e),r=kf(r,n),Gf(r,e?.GROUPBY)}q8.pushMRangeArguments=jsr;function T8(r,t){if(!t)r.push("WITHLABELS");else r.push("SELECTED_LABELS"),r=j8.pushVerdictArguments(r,t);return r}q8.pushWithLabelsArgument=T8;function Ksr(r,t,u,n,e){return r=Cf(r,t,u,e),r=T8(r,e?.SELECTED_LABELS),r=kf(r,n),Gf(r,e?.GROUPBY)}q8.pushMRangeWithLabelsArguments=Ksr;function Ssr(r){return r.map(_n)}q8.transformRangeReply=Ssr;function Msr(r){let t=[];for(let[u,n,e]of r)t.push({key:u,samples:e.map(_n)});return t}q8.transformMRangeReply=Msr;function bsr(r){let t=[];for(let[u,n,e]of r)t.push({key:u,labels:M8(n),samples:e.map(_n)});return t}q8.transformMRangeWithLabelsReply=bsr;function p8(r,t){if(t)r.push("LATEST");return r}q8.pushLatestArgument=p8});var af=f((Jr)=>{Object.defineProperty(Jr,"__esModule",{value:!0});Jr.TimeSeriesBucketTimestamp=Jr.TimeSeriesReducers=Jr.TimeSeriesAggregationType=Jr.TimeSeriesEncoding=Jr.TimeSeriesDuplicatePolicies=Jr.default=void 0;var asr=p();Object.defineProperty(Jr,"default",{enumerable:!0,get:function(){return asr.default}});var uu=p();Object.defineProperty(Jr,"TimeSeriesDuplicatePolicies",{enumerable:!0,get:function(){return uu.TimeSeriesDuplicatePolicies}});Object.defineProperty(Jr,"TimeSeriesEncoding",{enumerable:!0,get:function(){return uu.TimeSeriesEncoding}});Object.defineProperty(Jr,"TimeSeriesAggregationType",{enumerable:!0,get:function(){return uu.TimeSeriesAggregationType}});Object.defineProperty(Jr,"TimeSeriesReducers",{enumerable:!0,get:function(){return uu.TimeSeriesReducers}});Object.defineProperty(Jr,"TimeSeriesBucketTimestamp",{enumerable:!0,get:function(){return uu.TimeSeriesBucketTimestamp}})});var AIr=f((Z)=>{var rIr=Z&&Z.__createBinding||(Object.create?function(r,t,u,n){if(n===void 0)n=u;var e=Object.getOwnPropertyDescriptor(t,u);if(!e||("get"in e?!t.__esModule:e.writable||e.configurable))e={enumerable:!0,get:function(){return t[u]}};Object.defineProperty(r,n,e)}:function(r,t,u,n){if(n===void 0)n=u;r[n]=t[u]}),Xt=Z&&Z.__exportStar||function(r,t){for(var u in r)if(u!=="default"&&!Object.prototype.hasOwnProperty.call(t,u))rIr(t,r,u)};Object.defineProperty(Z,"__esModule",{value:!0});Z.createCluster=Z.createClient=void 0;var v8=uf(),tIr=jf(),uIr=qf(),nIr=Jf(),eIr=Hf(),fIr=af();Xt(uf(),Z);Xt(jf(),Z);Xt(qf(),Z);Xt(Jf(),Z);Xt(Hf(),Z);Xt(af(),Z);var L8={...tIr.default,graph:uIr.default,json:nIr.default,ft:eIr.default,ts:fIr.default};function oIr(r){return v8.createClient({...r,modules:{...L8,...r?.modules}})}Z.createClient=oIr;function mIr(r){return v8.createCluster({...r,modules:{...L8,...r?.modules}})}Z.createCluster=mIr});export default AIr();
|
|
6
|
+
|
|
7
|
+
//# debugId=AD3749236816293364756E2164756E21
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXEFQUEVORC5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kc1xcQklUQ09VTlQuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXEJJVEZJRUxEX1JPLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcY2xpZW50XFxkaXN0XFxsaWJcXGNvbW1hbmRzXFxCSVRGSUVMRC5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kc1xcZ2VuZXJpYy10cmFuc2Zvcm1lcnMuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXEJJVE9QLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcY2xpZW50XFxkaXN0XFxsaWJcXGNvbW1hbmRzXFxCSVRQT1MuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXEJMTU9WRS5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kc1xcTE1QT1AuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXEJMTVBPUC5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kc1xcQkxQT1AuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXEJSUE9QLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcY2xpZW50XFxkaXN0XFxsaWJcXGNvbW1hbmRzXFxCUlBPUExQVVNILmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcY2xpZW50XFxkaXN0XFxsaWJcXGNvbW1hbmRzXFxaTVBPUC5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kc1xcQlpNUE9QLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcY2xpZW50XFxkaXN0XFxsaWJcXGNvbW1hbmRzXFxCWlBPUE1BWC5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kc1xcQlpQT1BNSU4uanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXENPUFkuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXERFQ1IuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXERFQ1JCWS5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kc1xcREVMLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcY2xpZW50XFxkaXN0XFxsaWJcXGNvbW1hbmRzXFxEVU1QLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcY2xpZW50XFxkaXN0XFxsaWJcXGNvbW1hbmRzXFxFVkFMX1JPLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcY2xpZW50XFxkaXN0XFxsaWJcXGNvbW1hbmRzXFxFVkFMLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcY2xpZW50XFxkaXN0XFxsaWJcXGNvbW1hbmRzXFxFVkFMU0hBX1JPLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcY2xpZW50XFxkaXN0XFxsaWJcXGNvbW1hbmRzXFxFVkFMU0hBLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcY2xpZW50XFxkaXN0XFxsaWJcXGNvbW1hbmRzXFxFWElTVFMuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXEVYUElSRS5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kc1xcRVhQSVJFQVQuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXEVYUElSRVRJTUUuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXEZDQUxMX1JPLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcY2xpZW50XFxkaXN0XFxsaWJcXGNvbW1hbmRzXFxGQ0FMTC5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kc1xcR0VPQURELmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcY2xpZW50XFxkaXN0XFxsaWJcXGNvbW1hbmRzXFxHRU9ESVNULmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcY2xpZW50XFxkaXN0XFxsaWJcXGNvbW1hbmRzXFxHRU9IQVNILmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcY2xpZW50XFxkaXN0XFxsaWJcXGNvbW1hbmRzXFxHRU9QT1MuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXEdFT1JBRElVU19STy5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kc1xcR0VPUkFESVVTX1JPX1dJVEguanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXEdFT1JBRElVUy5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kc1xcR0VPUkFESVVTX1dJVEguanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXEdFT1JBRElVU0JZTUVNQkVSX1JPLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcY2xpZW50XFxkaXN0XFxsaWJcXGNvbW1hbmRzXFxHRU9SQURJVVNCWU1FTUJFUl9ST19XSVRILmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcY2xpZW50XFxkaXN0XFxsaWJcXGNvbW1hbmRzXFxHRU9SQURJVVNCWU1FTUJFUi5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kc1xcR0VPUkFESVVTQllNRU1CRVJfV0lUSC5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kc1xcR0VPUkFESVVTQllNRU1CRVJTVE9SRS5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kc1xcR0VPUkFESVVTU1RPUkUuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXEdFT1NFQVJDSC5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kc1xcR0VPU0VBUkNIX1dJVEguanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXEdFT1NFQVJDSFNUT1JFLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcY2xpZW50XFxkaXN0XFxsaWJcXGNvbW1hbmRzXFxHRVQuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXEdFVEJJVC5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kc1xcR0VUREVMLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcY2xpZW50XFxkaXN0XFxsaWJcXGNvbW1hbmRzXFxHRVRFWC5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kc1xcR0VUUkFOR0UuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXEdFVFNFVC5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kc1xcSERFTC5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kc1xcSEVYSVNUUy5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kc1xcSEVYUElSRS5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kc1xcSEVYUElSRUFULmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcY2xpZW50XFxkaXN0XFxsaWJcXGNvbW1hbmRzXFxIRVhQSVJFVElNRS5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kc1xcSEdFVC5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kc1xcSEdFVEFMTC5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kc1xcSElOQ1JCWS5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kc1xcSElOQ1JCWUZMT0FULmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcY2xpZW50XFxkaXN0XFxsaWJcXGNvbW1hbmRzXFxIS0VZUy5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kc1xcSExFTi5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kc1xcSE1HRVQuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXEhQRVJTSVNULmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcY2xpZW50XFxkaXN0XFxsaWJcXGNvbW1hbmRzXFxIUEVYUElSRS5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kc1xcSFBFWFBJUkVBVC5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kc1xcSFBFWFBJUkVUSU1FLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcY2xpZW50XFxkaXN0XFxsaWJcXGNvbW1hbmRzXFxIUFRUTC5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kc1xcSFJBTkRGSUVMRC5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kc1xcSFJBTkRGSUVMRF9DT1VOVC5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kc1xcSFJBTkRGSUVMRF9DT1VOVF9XSVRIVkFMVUVTLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcY2xpZW50XFxkaXN0XFxsaWJcXGNvbW1hbmRzXFxIU0NBTi5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kc1xcSFNDQU5fTk9WQUxVRVMuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXEhTRVQuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXEhTRVROWC5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kc1xcSFNUUkxFTi5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kc1xcSFRUTC5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kc1xcSFZBTFMuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXElOQ1IuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXElOQ1JCWS5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kc1xcSU5DUkJZRkxPQVQuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXExDUy5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kc1xcTENTX0lEWF9XSVRITUFUQ0hMRU4uanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXExDU19JRFguanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXExDU19MRU4uanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXExJTkRFWC5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kc1xcTElOU0VSVC5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kc1xcTExFTi5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kc1xcTE1PVkUuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXExQT1BfQ09VTlQuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXExQT1AuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXExQT1MuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXExQT1NfQ09VTlQuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXExQVVNILmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcY2xpZW50XFxkaXN0XFxsaWJcXGNvbW1hbmRzXFxMUFVTSFguanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXExSQU5HRS5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kc1xcTFJFTS5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kc1xcTFNFVC5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kc1xcTFRSSU0uanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXE1HRVQuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXE1JR1JBVEUuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXE1TRVQuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXE1TRVROWC5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kc1xcT0JKRUNUX0VOQ09ESU5HLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcY2xpZW50XFxkaXN0XFxsaWJcXGNvbW1hbmRzXFxPQkpFQ1RfRlJFUS5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kc1xcT0JKRUNUX0lETEVUSU1FLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcY2xpZW50XFxkaXN0XFxsaWJcXGNvbW1hbmRzXFxPQkpFQ1RfUkVGQ09VTlQuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXFBFUlNJU1QuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXFBFWFBJUkUuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXFBFWFBJUkVBVC5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kc1xcUEVYUElSRVRJTUUuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXFBGQURELmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcY2xpZW50XFxkaXN0XFxsaWJcXGNvbW1hbmRzXFxQRkNPVU5ULmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcY2xpZW50XFxkaXN0XFxsaWJcXGNvbW1hbmRzXFxQRk1FUkdFLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcY2xpZW50XFxkaXN0XFxsaWJcXGNvbW1hbmRzXFxQU0VURVguanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXFBUVEwuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXFBVQkxJU0guanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXFJFTkFNRS5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kc1xcUkVOQU1FTlguanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXFJFU1RPUkUuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXFJQT1BfQ09VTlQuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXFJQT1AuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXFJQT1BMUFVTSC5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kc1xcUlBVU0guanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXFJQVVNIWC5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kc1xcU0FERC5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kc1xcU0NBUkQuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXFNESUZGLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcY2xpZW50XFxkaXN0XFxsaWJcXGNvbW1hbmRzXFxTRElGRlNUT1JFLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcY2xpZW50XFxkaXN0XFxsaWJcXGNvbW1hbmRzXFxTRVQuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXFNFVEJJVC5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kc1xcU0VURVguanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXFNFVE5YLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcY2xpZW50XFxkaXN0XFxsaWJcXGNvbW1hbmRzXFxTRVRSQU5HRS5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kc1xcU0lOVEVSLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcY2xpZW50XFxkaXN0XFxsaWJcXGNvbW1hbmRzXFxTSU5URVJDQVJELmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcY2xpZW50XFxkaXN0XFxsaWJcXGNvbW1hbmRzXFxTSU5URVJTVE9SRS5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kc1xcU0lTTUVNQkVSLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcY2xpZW50XFxkaXN0XFxsaWJcXGNvbW1hbmRzXFxTTUVNQkVSUy5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kc1xcU01JU01FTUJFUi5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kc1xcU01PVkUuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXFNPUlRfUk8uanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXFNPUlQuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXFNPUlRfU1RPUkUuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXFNQT1AuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXFNQVUJMSVNILmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcY2xpZW50XFxkaXN0XFxsaWJcXGNvbW1hbmRzXFxTUkFORE1FTUJFUi5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kc1xcU1JBTkRNRU1CRVJfQ09VTlQuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXFNSRU0uanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXFNTQ0FOLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcY2xpZW50XFxkaXN0XFxsaWJcXGNvbW1hbmRzXFxTVFJMRU4uanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXFNVTklPTi5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kc1xcU1VOSU9OU1RPUkUuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXFRPVUNILmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcY2xpZW50XFxkaXN0XFxsaWJcXGNvbW1hbmRzXFxUVEwuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXFRZUEUuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXFVOTElOSy5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kc1xcV0FUQ0guanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXFhBQ0suanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXFhBREQuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXFhBVVRPQ0xBSU0uanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXFhBVVRPQ0xBSU1fSlVTVElELmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcY2xpZW50XFxkaXN0XFxsaWJcXGNvbW1hbmRzXFxYQ0xBSU0uanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXFhDTEFJTV9KVVNUSUQuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXFhERUwuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXFhHUk9VUF9DUkVBVEUuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXFhHUk9VUF9DUkVBVEVDT05TVU1FUi5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kc1xcWEdST1VQX0RFTENPTlNVTUVSLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcY2xpZW50XFxkaXN0XFxsaWJcXGNvbW1hbmRzXFxYR1JPVVBfREVTVFJPWS5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kc1xcWEdST1VQX1NFVElELmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcY2xpZW50XFxkaXN0XFxsaWJcXGNvbW1hbmRzXFxYSU5GT19DT05TVU1FUlMuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXFhJTkZPX0dST1VQUy5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kc1xcWElORk9fU1RSRUFNLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcY2xpZW50XFxkaXN0XFxsaWJcXGNvbW1hbmRzXFxYTEVOLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcY2xpZW50XFxkaXN0XFxsaWJcXGNvbW1hbmRzXFxYUEVORElOR19SQU5HRS5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kc1xcWFBFTkRJTkcuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXFhSQU5HRS5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kc1xcWFJFQUQuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXFhSRUFER1JPVVAuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXFhSRVZSQU5HRS5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kc1xcWFNFVElELmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcY2xpZW50XFxkaXN0XFxsaWJcXGNvbW1hbmRzXFxYVFJJTS5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kc1xcWkFERC5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kc1xcWkNBUkQuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXFpDT1VOVC5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kc1xcWkRJRkYuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXFpESUZGX1dJVEhTQ09SRVMuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXFpESUZGU1RPUkUuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXFpJTkNSQlkuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXFpJTlRFUi5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kc1xcWklOVEVSX1dJVEhTQ09SRVMuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXFpJTlRFUkNBUkQuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXFpJTlRFUlNUT1JFLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcY2xpZW50XFxkaXN0XFxsaWJcXGNvbW1hbmRzXFxaTEVYQ09VTlQuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXFpNU0NPUkUuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXFpQT1BNQVguanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXFpQT1BNQVhfQ09VTlQuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXFpQT1BNSU4uanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXFpQT1BNSU5fQ09VTlQuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXFpSQU5ETUVNQkVSLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcY2xpZW50XFxkaXN0XFxsaWJcXGNvbW1hbmRzXFxaUkFORE1FTUJFUl9DT1VOVC5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kc1xcWlJBTkRNRU1CRVJfQ09VTlRfV0lUSFNDT1JFUy5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kc1xcWlJBTkdFLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcY2xpZW50XFxkaXN0XFxsaWJcXGNvbW1hbmRzXFxaUkFOR0VfV0lUSFNDT1JFUy5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kc1xcWlJBTkdFQllMRVguanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXFpSQU5HRUJZU0NPUkUuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXFpSQU5HRUJZU0NPUkVfV0lUSFNDT1JFUy5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kc1xcWlJBTkdFU1RPUkUuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXFpSQU5LLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcY2xpZW50XFxkaXN0XFxsaWJcXGNvbW1hbmRzXFxaUkVNLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcY2xpZW50XFxkaXN0XFxsaWJcXGNvbW1hbmRzXFxaUkVNUkFOR0VCWUxFWC5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kc1xcWlJFTVJBTkdFQllSQU5LLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcY2xpZW50XFxkaXN0XFxsaWJcXGNvbW1hbmRzXFxaUkVNUkFOR0VCWVNDT1JFLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcY2xpZW50XFxkaXN0XFxsaWJcXGNvbW1hbmRzXFxaUkVWUkFOSy5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kc1xcWlNDQU4uanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXFpTQ09SRS5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kc1xcWlVOSU9OLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcY2xpZW50XFxkaXN0XFxsaWJcXGNvbW1hbmRzXFxaVU5JT05fV0lUSFNDT1JFUy5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kc1xcWlVOSU9OU1RPUkUuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY2x1c3RlclxcY29tbWFuZHMuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXEFDTF9DQVQuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXEFDTF9ERUxVU0VSLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcY2xpZW50XFxkaXN0XFxsaWJcXGNvbW1hbmRzXFxBQ0xfRFJZUlVOLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcY2xpZW50XFxkaXN0XFxsaWJcXGNvbW1hbmRzXFxBQ0xfR0VOUEFTUy5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kc1xcQUNMX0dFVFVTRVIuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXEFDTF9MSVNULmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcY2xpZW50XFxkaXN0XFxsaWJcXGNvbW1hbmRzXFxBQ0xfTE9BRC5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kc1xcQUNMX0xPR19SRVNFVC5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kc1xcQUNMX0xPRy5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kc1xcQUNMX1NBVkUuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXEFDTF9TRVRVU0VSLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcY2xpZW50XFxkaXN0XFxsaWJcXGNvbW1hbmRzXFxBQ0xfVVNFUlMuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXEFDTF9XSE9BTUkuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXEFTS0lORy5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kc1xcQVVUSC5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kc1xcQkdSRVdSSVRFQU9GLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcY2xpZW50XFxkaXN0XFxsaWJcXGNvbW1hbmRzXFxCR1NBVkUuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXENMSUVOVF9DQUNISU5HLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcY2xpZW50XFxkaXN0XFxsaWJcXGNvbW1hbmRzXFxDTElFTlRfR0VUTkFNRS5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kc1xcQ0xJRU5UX0dFVFJFRElSLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcY2xpZW50XFxkaXN0XFxsaWJcXGNvbW1hbmRzXFxDTElFTlRfSUQuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXENMSUVOVF9LSUxMLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcY2xpZW50XFxkaXN0XFxsaWJcXGNvbW1hbmRzXFxDTElFTlRfSU5GTy5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kc1xcQ0xJRU5UX0xJU1QuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXENMSUVOVF9OTy1FVklDVC5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kc1xcQ0xJRU5UX05PLVRPVUNILmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcY2xpZW50XFxkaXN0XFxsaWJcXGNvbW1hbmRzXFxDTElFTlRfUEFVU0UuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXENMSUVOVF9TRVROQU1FLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcY2xpZW50XFxkaXN0XFxsaWJcXGNvbW1hbmRzXFxDTElFTlRfVFJBQ0tJTkcuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXENMSUVOVF9UUkFDS0lOR0lORk8uanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXENMSUVOVF9VTlBBVVNFLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcY2xpZW50XFxkaXN0XFxsaWJcXGNvbW1hbmRzXFxDTFVTVEVSX0FERFNMT1RTLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcY2xpZW50XFxkaXN0XFxsaWJcXGNvbW1hbmRzXFxDTFVTVEVSX0FERFNMT1RTUkFOR0UuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXENMVVNURVJfQlVNUEVQT0NILmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcY2xpZW50XFxkaXN0XFxsaWJcXGNvbW1hbmRzXFxDTFVTVEVSX0NPVU5ULUZBSUxVUkUtUkVQT1JUUy5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kc1xcQ0xVU1RFUl9DT1VOVEtFWVNJTlNMT1QuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXENMVVNURVJfREVMU0xPVFMuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXENMVVNURVJfREVMU0xPVFNSQU5HRS5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kc1xcQ0xVU1RFUl9GQUlMT1ZFUi5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kc1xcQ0xVU1RFUl9GTFVTSFNMT1RTLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcY2xpZW50XFxkaXN0XFxsaWJcXGNvbW1hbmRzXFxDTFVTVEVSX0ZPUkdFVC5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kc1xcQ0xVU1RFUl9HRVRLRVlTSU5TTE9ULmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcY2xpZW50XFxkaXN0XFxsaWJcXGNvbW1hbmRzXFxDTFVTVEVSX0lORk8uanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXENMVVNURVJfS0VZU0xPVC5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kc1xcQ0xVU1RFUl9MSU5LUy5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kc1xcQ0xVU1RFUl9NRUVULmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcY2xpZW50XFxkaXN0XFxsaWJcXGNvbW1hbmRzXFxDTFVTVEVSX01ZSUQuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXENMVVNURVJfTVlTSEFSRElELmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcY2xpZW50XFxkaXN0XFxsaWJcXGNvbW1hbmRzXFxDTFVTVEVSX05PREVTLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcY2xpZW50XFxkaXN0XFxsaWJcXGNvbW1hbmRzXFxDTFVTVEVSX1JFUExJQ0FTLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcY2xpZW50XFxkaXN0XFxsaWJcXGNvbW1hbmRzXFxDTFVTVEVSX1JFUExJQ0FURS5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kc1xcQ0xVU1RFUl9SRVNFVC5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kc1xcQ0xVU1RFUl9TQVZFQ09ORklHLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcY2xpZW50XFxkaXN0XFxsaWJcXGNvbW1hbmRzXFxDTFVTVEVSX1NFVC1DT05GSUctRVBPQ0guanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXENMVVNURVJfU0VUU0xPVC5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kc1xcQ0xVU1RFUl9TTE9UUy5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kc1xcQ09NTUFORF9DT1VOVC5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kc1xcQ09NTUFORF9HRVRLRVlTLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcY2xpZW50XFxkaXN0XFxsaWJcXGNvbW1hbmRzXFxDT01NQU5EX0dFVEtFWVNBTkRGTEFHUy5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kc1xcQ09NTUFORF9JTkZPLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcY2xpZW50XFxkaXN0XFxsaWJcXGNvbW1hbmRzXFxDT01NQU5EX0xJU1QuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXENPTU1BTkQuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXENPTkZJR19HRVQuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXENPTkZJR19SRVNFVFNUQVQuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXENPTkZJR19SRVdSSVRFLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcY2xpZW50XFxkaXN0XFxsaWJcXGNvbW1hbmRzXFxDT05GSUdfU0VULmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcY2xpZW50XFxkaXN0XFxsaWJcXGNvbW1hbmRzXFxEQlNJWkUuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXERJU0NBUkQuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXEVDSE8uanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXEZBSUxPVkVSLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcY2xpZW50XFxkaXN0XFxsaWJcXGNvbW1hbmRzXFxGTFVTSEFMTC5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kc1xcRkxVU0hEQi5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kc1xcRlVOQ1RJT05fREVMRVRFLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcY2xpZW50XFxkaXN0XFxsaWJcXGNvbW1hbmRzXFxGVU5DVElPTl9EVU1QLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcY2xpZW50XFxkaXN0XFxsaWJcXGNvbW1hbmRzXFxGVU5DVElPTl9GTFVTSC5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kc1xcRlVOQ1RJT05fS0lMTC5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kc1xcRlVOQ1RJT05fTElTVC5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kc1xcRlVOQ1RJT05fTElTVF9XSVRIQ09ERS5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kc1xcRlVOQ1RJT05fTE9BRC5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kc1xcRlVOQ1RJT05fUkVTVE9SRS5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kc1xcRlVOQ1RJT05fU1RBVFMuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXEhFTExPLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcY2xpZW50XFxkaXN0XFxsaWJcXGNvbW1hbmRzXFxJTkZPLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcY2xpZW50XFxkaXN0XFxsaWJcXGNvbW1hbmRzXFxLRVlTLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcY2xpZW50XFxkaXN0XFxsaWJcXGNvbW1hbmRzXFxMQVNUU0FWRS5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kc1xcTEFURU5DWV9ET0NUT1IuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXExBVEVOQ1lfR1JBUEguanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXExBVEVOQ1lfSElTVE9SWS5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kc1xcTEFURU5DWV9MQVRFU1QuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXExPTFdVVC5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kc1xcTUVNT1JZX0RPQ1RPUi5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kc1xcTUVNT1JZX01BTExPQy1TVEFUUy5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kc1xcTUVNT1JZX1BVUkdFLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcY2xpZW50XFxkaXN0XFxsaWJcXGNvbW1hbmRzXFxNRU1PUllfU1RBVFMuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXE1FTU9SWV9VU0FHRS5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kc1xcTU9EVUxFX0xJU1QuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXE1PRFVMRV9MT0FELmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcY2xpZW50XFxkaXN0XFxsaWJcXGNvbW1hbmRzXFxNT0RVTEVfVU5MT0FELmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcY2xpZW50XFxkaXN0XFxsaWJcXGNvbW1hbmRzXFxNT1ZFLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcY2xpZW50XFxkaXN0XFxsaWJcXGNvbW1hbmRzXFxQSU5HLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcY2xpZW50XFxkaXN0XFxsaWJcXGNvbW1hbmRzXFxQVUJTVUJfQ0hBTk5FTFMuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXFBVQlNVQl9OVU1QQVQuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXFBVQlNVQl9OVU1TVUIuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXFBVQlNVQl9TSEFSRENIQU5ORUxTLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcY2xpZW50XFxkaXN0XFxsaWJcXGNvbW1hbmRzXFxQVUJTVUJfU0hBUkROVU1TVUIuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXFJBTkRPTUtFWS5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kc1xcUkVBRE9OTFkuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXFJFQURXUklURS5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kc1xcUkVQTElDQU9GLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcY2xpZW50XFxkaXN0XFxsaWJcXGNvbW1hbmRzXFxSRVNUT1JFLUFTS0lORy5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kc1xcUk9MRS5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kc1xcU0FWRS5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kc1xcU0NBTi5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kc1xcU0NSSVBUX0RFQlVHLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcY2xpZW50XFxkaXN0XFxsaWJcXGNvbW1hbmRzXFxTQ1JJUFRfRVhJU1RTLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcY2xpZW50XFxkaXN0XFxsaWJcXGNvbW1hbmRzXFxTQ1JJUFRfRkxVU0guanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXFNDUklQVF9LSUxMLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcY2xpZW50XFxkaXN0XFxsaWJcXGNvbW1hbmRzXFxTQ1JJUFRfTE9BRC5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kc1xcU0hVVERPV04uanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZHNcXFNXQVBEQi5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kc1xcVElNRS5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kc1xcVU5XQVRDSC5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kc1xcV0FJVC5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjbGllbnRcXGNvbW1hbmRzLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcY2xpZW50XFxkaXN0XFxsaWJcXGVycm9ycy5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFx1dGlscy5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjbGllbnRcXHNvY2tldC5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFx5YWxsaXN0XFxpdGVyYXRvci5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFx5YWxsaXN0XFx5YWxsaXN0LmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcY2xpZW50XFxkaXN0XFxsaWJcXGNsaWVudFxcUkVTUDJcXGNvbXBvc2Vyc1xcYnVmZmVyLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcY2xpZW50XFxkaXN0XFxsaWJcXGNsaWVudFxcUkVTUDJcXGNvbXBvc2Vyc1xcc3RyaW5nLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcY2xpZW50XFxkaXN0XFxsaWJcXGNsaWVudFxcUkVTUDJcXGRlY29kZXIuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY2xpZW50XFxSRVNQMlxcZW5jb2Rlci5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjbGllbnRcXHB1Yi1zdWIuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY2xpZW50XFxjb21tYW5kcy1xdWV1ZS5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjb21tYW5kLW9wdGlvbnMuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY29tbWFuZGVyLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcY2xpZW50XFxkaXN0XFxsaWJcXG11bHRpLWNvbW1hbmQuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY2xpZW50XFxtdWx0aS1jb21tYW5kLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXGdlbmVyaWMtcG9vbFxcbGliXFxmYWN0b3J5VmFsaWRhdG9yLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXGdlbmVyaWMtcG9vbFxcbGliXFxQb29sRGVmYXVsdHMuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcZ2VuZXJpYy1wb29sXFxsaWJcXFBvb2xPcHRpb25zLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXGdlbmVyaWMtcG9vbFxcbGliXFxEZWZlcnJlZC5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxnZW5lcmljLXBvb2xcXGxpYlxcZXJyb3JzLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXGdlbmVyaWMtcG9vbFxcbGliXFxSZXNvdXJjZVJlcXVlc3QuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcZ2VuZXJpYy1wb29sXFxsaWJcXFJlc291cmNlTG9hbi5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxnZW5lcmljLXBvb2xcXGxpYlxcUG9vbGVkUmVzb3VyY2VTdGF0ZUVudW0uanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcZ2VuZXJpYy1wb29sXFxsaWJcXFBvb2xlZFJlc291cmNlLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXGdlbmVyaWMtcG9vbFxcbGliXFxEZWZhdWx0RXZpY3Rvci5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxnZW5lcmljLXBvb2xcXGxpYlxcRG91Ymx5TGlua2VkTGlzdC5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxnZW5lcmljLXBvb2xcXGxpYlxcRG91Ymx5TGlua2VkTGlzdEl0ZXJhdG9yLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXGdlbmVyaWMtcG9vbFxcbGliXFxEZXF1ZUl0ZXJhdG9yLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXGdlbmVyaWMtcG9vbFxcbGliXFxEZXF1ZS5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxnZW5lcmljLXBvb2xcXGxpYlxcUXVldWUuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcZ2VuZXJpYy1wb29sXFxsaWJcXFByaW9yaXR5UXVldWUuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcZ2VuZXJpYy1wb29sXFxsaWJcXHV0aWxzLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXGdlbmVyaWMtcG9vbFxcbGliXFxQb29sLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXGdlbmVyaWMtcG9vbFxcaW5kZXguanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY2xpZW50XFxpbmRleC5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxjbHVzdGVyLWtleS1zbG90XFxsaWJcXGluZGV4LmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcY2xpZW50XFxkaXN0XFxsaWJcXGNsdXN0ZXJcXGNsdXN0ZXItc2xvdHMuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxjbGllbnRcXGRpc3RcXGxpYlxcY2x1c3RlclxcbXVsdGktY29tbWFuZC5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxjbHVzdGVyXFxpbmRleC5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGNsaWVudFxcZGlzdFxcbGliXFxsdWEtc2NyaXB0LmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcY2xpZW50XFxkaXN0XFxpbmRleC5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGJsb29tXFxkaXN0XFxjb21tYW5kc1xcYmxvb21cXEFERC5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGJsb29tXFxkaXN0XFxjb21tYW5kc1xcYmxvb21cXENBUkQuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxibG9vbVxcZGlzdFxcY29tbWFuZHNcXGJsb29tXFxFWElTVFMuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxibG9vbVxcZGlzdFxcY29tbWFuZHNcXGJsb29tXFxJTkZPLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcYmxvb21cXGRpc3RcXGNvbW1hbmRzXFxibG9vbVxcSU5TRVJULmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcYmxvb21cXGRpc3RcXGNvbW1hbmRzXFxibG9vbVxcTE9BRENIVU5LLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcYmxvb21cXGRpc3RcXGNvbW1hbmRzXFxibG9vbVxcTUFERC5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGJsb29tXFxkaXN0XFxjb21tYW5kc1xcYmxvb21cXE1FWElTVFMuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxibG9vbVxcZGlzdFxcY29tbWFuZHNcXGJsb29tXFxSRVNFUlZFLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcYmxvb21cXGRpc3RcXGNvbW1hbmRzXFxibG9vbVxcU0NBTkRVTVAuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxibG9vbVxcZGlzdFxcY29tbWFuZHNcXGJsb29tXFxpbmRleC5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGJsb29tXFxkaXN0XFxjb21tYW5kc1xcY291bnQtbWluLXNrZXRjaFxcSU5DUkJZLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcYmxvb21cXGRpc3RcXGNvbW1hbmRzXFxjb3VudC1taW4tc2tldGNoXFxJTkZPLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcYmxvb21cXGRpc3RcXGNvbW1hbmRzXFxjb3VudC1taW4tc2tldGNoXFxJTklUQllESU0uanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxibG9vbVxcZGlzdFxcY29tbWFuZHNcXGNvdW50LW1pbi1za2V0Y2hcXElOSVRCWVBST0IuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxibG9vbVxcZGlzdFxcY29tbWFuZHNcXGNvdW50LW1pbi1za2V0Y2hcXE1FUkdFLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcYmxvb21cXGRpc3RcXGNvbW1hbmRzXFxjb3VudC1taW4tc2tldGNoXFxRVUVSWS5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGJsb29tXFxkaXN0XFxjb21tYW5kc1xcY291bnQtbWluLXNrZXRjaFxcaW5kZXguanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxibG9vbVxcZGlzdFxcY29tbWFuZHNcXGN1Y2tvb1xcQURELmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcYmxvb21cXGRpc3RcXGNvbW1hbmRzXFxjdWNrb29cXEFERE5YLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcYmxvb21cXGRpc3RcXGNvbW1hbmRzXFxjdWNrb29cXENPVU5ULmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcYmxvb21cXGRpc3RcXGNvbW1hbmRzXFxjdWNrb29cXERFTC5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGJsb29tXFxkaXN0XFxjb21tYW5kc1xcY3Vja29vXFxFWElTVFMuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxibG9vbVxcZGlzdFxcY29tbWFuZHNcXGN1Y2tvb1xcSU5GTy5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGJsb29tXFxkaXN0XFxjb21tYW5kc1xcY3Vja29vXFxJTlNFUlQuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxibG9vbVxcZGlzdFxcY29tbWFuZHNcXGN1Y2tvb1xcSU5TRVJUTlguanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxibG9vbVxcZGlzdFxcY29tbWFuZHNcXGN1Y2tvb1xcTE9BRENIVU5LLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcYmxvb21cXGRpc3RcXGNvbW1hbmRzXFxjdWNrb29cXFJFU0VSVkUuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxibG9vbVxcZGlzdFxcY29tbWFuZHNcXGN1Y2tvb1xcU0NBTkRVTVAuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxibG9vbVxcZGlzdFxcY29tbWFuZHNcXGN1Y2tvb1xcaW5kZXguanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxibG9vbVxcZGlzdFxcY29tbWFuZHNcXHQtZGlnZXN0XFxBREQuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxibG9vbVxcZGlzdFxcY29tbWFuZHNcXHQtZGlnZXN0XFxCWVJBTksuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxibG9vbVxcZGlzdFxcY29tbWFuZHNcXHQtZGlnZXN0XFxCWVJFVlJBTksuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxibG9vbVxcZGlzdFxcY29tbWFuZHNcXHQtZGlnZXN0XFxDREYuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxibG9vbVxcZGlzdFxcY29tbWFuZHNcXHQtZGlnZXN0XFxDUkVBVEUuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxibG9vbVxcZGlzdFxcY29tbWFuZHNcXHQtZGlnZXN0XFxJTkZPLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcYmxvb21cXGRpc3RcXGNvbW1hbmRzXFx0LWRpZ2VzdFxcTUFYLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcYmxvb21cXGRpc3RcXGNvbW1hbmRzXFx0LWRpZ2VzdFxcTUVSR0UuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxibG9vbVxcZGlzdFxcY29tbWFuZHNcXHQtZGlnZXN0XFxNSU4uanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxibG9vbVxcZGlzdFxcY29tbWFuZHNcXHQtZGlnZXN0XFxRVUFOVElMRS5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGJsb29tXFxkaXN0XFxjb21tYW5kc1xcdC1kaWdlc3RcXFJBTksuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxibG9vbVxcZGlzdFxcY29tbWFuZHNcXHQtZGlnZXN0XFxSRVNFVC5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGJsb29tXFxkaXN0XFxjb21tYW5kc1xcdC1kaWdlc3RcXFJFVlJBTksuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxibG9vbVxcZGlzdFxcY29tbWFuZHNcXHQtZGlnZXN0XFxUUklNTUVEX01FQU4uanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxibG9vbVxcZGlzdFxcY29tbWFuZHNcXHQtZGlnZXN0XFxpbmRleC5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGJsb29tXFxkaXN0XFxjb21tYW5kc1xcdG9wLWtcXEFERC5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGJsb29tXFxkaXN0XFxjb21tYW5kc1xcdG9wLWtcXENPVU5ULmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcYmxvb21cXGRpc3RcXGNvbW1hbmRzXFx0b3Ata1xcSU5DUkJZLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcYmxvb21cXGRpc3RcXGNvbW1hbmRzXFx0b3Ata1xcSU5GTy5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGJsb29tXFxkaXN0XFxjb21tYW5kc1xcdG9wLWtcXExJU1RfV0lUSENPVU5ULmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcYmxvb21cXGRpc3RcXGNvbW1hbmRzXFx0b3Ata1xcTElTVC5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGJsb29tXFxkaXN0XFxjb21tYW5kc1xcdG9wLWtcXFFVRVJZLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcYmxvb21cXGRpc3RcXGNvbW1hbmRzXFx0b3Ata1xcUkVTRVJWRS5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGJsb29tXFxkaXN0XFxjb21tYW5kc1xcdG9wLWtcXGluZGV4LmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcYmxvb21cXGRpc3RcXGNvbW1hbmRzXFxpbmRleC5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGJsb29tXFxkaXN0XFxpbmRleC5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGdyYXBoXFxkaXN0XFxjb21tYW5kc1xcQ09ORklHX0dFVC5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGdyYXBoXFxkaXN0XFxjb21tYW5kc1xcQ09ORklHX1NFVC5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGdyYXBoXFxkaXN0XFxjb21tYW5kc1xcREVMRVRFLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcZ3JhcGhcXGRpc3RcXGNvbW1hbmRzXFxFWFBMQUlOLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcZ3JhcGhcXGRpc3RcXGNvbW1hbmRzXFxMSVNULmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcZ3JhcGhcXGRpc3RcXGNvbW1hbmRzXFxQUk9GSUxFLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcZ3JhcGhcXGRpc3RcXGNvbW1hbmRzXFxRVUVSWS5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGdyYXBoXFxkaXN0XFxjb21tYW5kc1xcUk9fUVVFUlkuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxncmFwaFxcZGlzdFxcY29tbWFuZHNcXFNMT1dMT0cuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxncmFwaFxcZGlzdFxcY29tbWFuZHNcXGluZGV4LmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcZ3JhcGhcXGRpc3RcXGdyYXBoLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcZ3JhcGhcXGRpc3RcXGluZGV4LmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcanNvblxcZGlzdFxcY29tbWFuZHNcXEFSUkFQUEVORC5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGpzb25cXGRpc3RcXGNvbW1hbmRzXFxBUlJJTkRFWC5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGpzb25cXGRpc3RcXGNvbW1hbmRzXFxBUlJJTlNFUlQuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxqc29uXFxkaXN0XFxjb21tYW5kc1xcQVJSTEVOLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcanNvblxcZGlzdFxcY29tbWFuZHNcXEFSUlBPUC5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGpzb25cXGRpc3RcXGNvbW1hbmRzXFxBUlJUUklNLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcanNvblxcZGlzdFxcY29tbWFuZHNcXERFQlVHX01FTU9SWS5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGpzb25cXGRpc3RcXGNvbW1hbmRzXFxERUwuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxqc29uXFxkaXN0XFxjb21tYW5kc1xcRk9SR0VULmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcanNvblxcZGlzdFxcY29tbWFuZHNcXEdFVC5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGpzb25cXGRpc3RcXGNvbW1hbmRzXFxNRVJHRS5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGpzb25cXGRpc3RcXGNvbW1hbmRzXFxNR0VULmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcanNvblxcZGlzdFxcY29tbWFuZHNcXE1TRVQuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxqc29uXFxkaXN0XFxjb21tYW5kc1xcTlVNSU5DUkJZLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcanNvblxcZGlzdFxcY29tbWFuZHNcXE5VTU1VTFRCWS5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGpzb25cXGRpc3RcXGNvbW1hbmRzXFxPQkpLRVlTLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcanNvblxcZGlzdFxcY29tbWFuZHNcXE9CSkxFTi5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGpzb25cXGRpc3RcXGNvbW1hbmRzXFxSRVNQLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcanNvblxcZGlzdFxcY29tbWFuZHNcXFNFVC5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXGpzb25cXGRpc3RcXGNvbW1hbmRzXFxTVFJBUFBFTkQuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxqc29uXFxkaXN0XFxjb21tYW5kc1xcU1RSTEVOLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcanNvblxcZGlzdFxcY29tbWFuZHNcXFRZUEUuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxqc29uXFxkaXN0XFxjb21tYW5kc1xcaW5kZXguanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxqc29uXFxkaXN0XFxpbmRleC5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXHNlYXJjaFxcZGlzdFxcY29tbWFuZHNcXF9MSVNULmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcc2VhcmNoXFxkaXN0XFxjb21tYW5kc1xcQUxURVIuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxzZWFyY2hcXGRpc3RcXGNvbW1hbmRzXFxBR0dSRUdBVEUuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxzZWFyY2hcXGRpc3RcXGNvbW1hbmRzXFxBR0dSRUdBVEVfV0lUSENVUlNPUi5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXHNlYXJjaFxcZGlzdFxcY29tbWFuZHNcXEFMSUFTQURELmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcc2VhcmNoXFxkaXN0XFxjb21tYW5kc1xcQUxJQVNERUwuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxzZWFyY2hcXGRpc3RcXGNvbW1hbmRzXFxBTElBU1VQREFURS5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXHNlYXJjaFxcZGlzdFxcY29tbWFuZHNcXENPTkZJR19HRVQuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxzZWFyY2hcXGRpc3RcXGNvbW1hbmRzXFxDT05GSUdfU0VULmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcc2VhcmNoXFxkaXN0XFxjb21tYW5kc1xcQ1JFQVRFLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcc2VhcmNoXFxkaXN0XFxjb21tYW5kc1xcQ1VSU09SX0RFTC5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXHNlYXJjaFxcZGlzdFxcY29tbWFuZHNcXENVUlNPUl9SRUFELmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcc2VhcmNoXFxkaXN0XFxjb21tYW5kc1xcRElDVEFERC5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXHNlYXJjaFxcZGlzdFxcY29tbWFuZHNcXERJQ1RERUwuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxzZWFyY2hcXGRpc3RcXGNvbW1hbmRzXFxESUNURFVNUC5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXHNlYXJjaFxcZGlzdFxcY29tbWFuZHNcXERST1BJTkRFWC5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXHNlYXJjaFxcZGlzdFxcY29tbWFuZHNcXEVYUExBSU4uanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxzZWFyY2hcXGRpc3RcXGNvbW1hbmRzXFxFWFBMQUlOQ0xJLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcc2VhcmNoXFxkaXN0XFxjb21tYW5kc1xcSU5GTy5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXHNlYXJjaFxcZGlzdFxcY29tbWFuZHNcXFNFQVJDSC5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXHNlYXJjaFxcZGlzdFxcY29tbWFuZHNcXFBST0ZJTEVfU0VBUkNILmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcc2VhcmNoXFxkaXN0XFxjb21tYW5kc1xcUFJPRklMRV9BR0dSRUdBVEUuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxzZWFyY2hcXGRpc3RcXGNvbW1hbmRzXFxTRUFSQ0hfTk9DT05URU5ULmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcc2VhcmNoXFxkaXN0XFxjb21tYW5kc1xcU1BFTExDSEVDSy5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXHNlYXJjaFxcZGlzdFxcY29tbWFuZHNcXFNVR0FERC5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXHNlYXJjaFxcZGlzdFxcY29tbWFuZHNcXFNVR0RFTC5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXHNlYXJjaFxcZGlzdFxcY29tbWFuZHNcXFNVR0dFVC5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXHNlYXJjaFxcZGlzdFxcY29tbWFuZHNcXFNVR0dFVF9XSVRIUEFZTE9BRFMuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxzZWFyY2hcXGRpc3RcXGNvbW1hbmRzXFxTVUdHRVRfV0lUSFNDT1JFU19XSVRIUEFZTE9BRFMuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxzZWFyY2hcXGRpc3RcXGNvbW1hbmRzXFxTVUdHRVRfV0lUSFNDT1JFUy5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXHNlYXJjaFxcZGlzdFxcY29tbWFuZHNcXFNVR0xFTi5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXHNlYXJjaFxcZGlzdFxcY29tbWFuZHNcXFNZTkRVTVAuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxzZWFyY2hcXGRpc3RcXGNvbW1hbmRzXFxTWU5VUERBVEUuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxzZWFyY2hcXGRpc3RcXGNvbW1hbmRzXFxUQUdWQUxTLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcc2VhcmNoXFxkaXN0XFxjb21tYW5kc1xcaW5kZXguanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFxzZWFyY2hcXGRpc3RcXGluZGV4LmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcdGltZS1zZXJpZXNcXGRpc3RcXGNvbW1hbmRzXFxBREQuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFx0aW1lLXNlcmllc1xcZGlzdFxcY29tbWFuZHNcXEFMVEVSLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcdGltZS1zZXJpZXNcXGRpc3RcXGNvbW1hbmRzXFxDUkVBVEUuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFx0aW1lLXNlcmllc1xcZGlzdFxcY29tbWFuZHNcXENSRUFURVJVTEUuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFx0aW1lLXNlcmllc1xcZGlzdFxcY29tbWFuZHNcXERFQ1JCWS5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXHRpbWUtc2VyaWVzXFxkaXN0XFxjb21tYW5kc1xcREVMLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcdGltZS1zZXJpZXNcXGRpc3RcXGNvbW1hbmRzXFxERUxFVEVSVUxFLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcdGltZS1zZXJpZXNcXGRpc3RcXGNvbW1hbmRzXFxHRVQuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFx0aW1lLXNlcmllc1xcZGlzdFxcY29tbWFuZHNcXElOQ1JCWS5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXHRpbWUtc2VyaWVzXFxkaXN0XFxjb21tYW5kc1xcSU5GTy5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXHRpbWUtc2VyaWVzXFxkaXN0XFxjb21tYW5kc1xcSU5GT19ERUJVRy5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXHRpbWUtc2VyaWVzXFxkaXN0XFxjb21tYW5kc1xcTUFERC5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXHRpbWUtc2VyaWVzXFxkaXN0XFxjb21tYW5kc1xcTUdFVC5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXHRpbWUtc2VyaWVzXFxkaXN0XFxjb21tYW5kc1xcTUdFVF9XSVRITEFCRUxTLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcdGltZS1zZXJpZXNcXGRpc3RcXGNvbW1hbmRzXFxRVUVSWUlOREVYLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcdGltZS1zZXJpZXNcXGRpc3RcXGNvbW1hbmRzXFxSQU5HRS5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXHRpbWUtc2VyaWVzXFxkaXN0XFxjb21tYW5kc1xcUkVWUkFOR0UuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFx0aW1lLXNlcmllc1xcZGlzdFxcY29tbWFuZHNcXE1SQU5HRS5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXHRpbWUtc2VyaWVzXFxkaXN0XFxjb21tYW5kc1xcTVJBTkdFX1dJVEhMQUJFTFMuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFx0aW1lLXNlcmllc1xcZGlzdFxcY29tbWFuZHNcXE1SRVZSQU5HRS5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxAcmVkaXNcXHRpbWUtc2VyaWVzXFxkaXN0XFxjb21tYW5kc1xcTVJFVlJBTkdFX1dJVEhMQUJFTFMuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHJlZGlzXFx0aW1lLXNlcmllc1xcZGlzdFxcY29tbWFuZHNcXGluZGV4LmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXEByZWRpc1xcdGltZS1zZXJpZXNcXGRpc3RcXGluZGV4LmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXHJlZGlzXFxkaXN0XFxpbmRleC5qcyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSB2b2lkIDA7XG5leHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IDE7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMoa2V5LCB2YWx1ZSkge1xuICAgIHJldHVybiBbJ0FQUEVORCcsIGtleSwgdmFsdWVdO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLklTX1JFQURfT05MWSA9IGV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gdm9pZCAwO1xuZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSAxO1xuZXhwb3J0cy5JU19SRUFEX09OTFkgPSB0cnVlO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGtleSwgcmFuZ2UpIHtcbiAgICBjb25zdCBhcmdzID0gWydCSVRDT1VOVCcsIGtleV07XG4gICAgaWYgKHJhbmdlKSB7XG4gICAgICAgIGFyZ3MucHVzaChyYW5nZS5zdGFydC50b1N0cmluZygpLCByYW5nZS5lbmQudG9TdHJpbmcoKSk7XG4gICAgICAgIGlmIChyYW5nZS5tb2RlKSB7XG4gICAgICAgICAgICBhcmdzLnB1c2gocmFuZ2UubW9kZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGFyZ3M7XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IGV4cG9ydHMuSVNfUkVBRF9PTkxZID0gZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSB2b2lkIDA7XG5leHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IDE7XG5leHBvcnRzLklTX1JFQURfT05MWSA9IHRydWU7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMoa2V5LCBvcGVyYXRpb25zKSB7XG4gICAgY29uc3QgYXJncyA9IFsnQklURklFTERfUk8nLCBrZXldO1xuICAgIGZvciAoY29uc3Qgb3BlcmF0aW9uIG9mIG9wZXJhdGlvbnMpIHtcbiAgICAgICAgYXJncy5wdXNoKCdHRVQnLCBvcGVyYXRpb24uZW5jb2RpbmcsIG9wZXJhdGlvbi5vZmZzZXQudG9TdHJpbmcoKSk7XG4gICAgfVxuICAgIHJldHVybiBhcmdzO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IHZvaWQgMDtcbmV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gMTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhrZXksIG9wZXJhdGlvbnMpIHtcbiAgICBjb25zdCBhcmdzID0gWydCSVRGSUVMRCcsIGtleV07XG4gICAgZm9yIChjb25zdCBvcHRpb25zIG9mIG9wZXJhdGlvbnMpIHtcbiAgICAgICAgc3dpdGNoIChvcHRpb25zLm9wZXJhdGlvbikge1xuICAgICAgICAgICAgY2FzZSAnR0VUJzpcbiAgICAgICAgICAgICAgICBhcmdzLnB1c2goJ0dFVCcsIG9wdGlvbnMuZW5jb2RpbmcsIG9wdGlvbnMub2Zmc2V0LnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnU0VUJzpcbiAgICAgICAgICAgICAgICBhcmdzLnB1c2goJ1NFVCcsIG9wdGlvbnMuZW5jb2RpbmcsIG9wdGlvbnMub2Zmc2V0LnRvU3RyaW5nKCksIG9wdGlvbnMudmFsdWUudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdJTkNSQlknOlxuICAgICAgICAgICAgICAgIGFyZ3MucHVzaCgnSU5DUkJZJywgb3B0aW9ucy5lbmNvZGluZywgb3B0aW9ucy5vZmZzZXQudG9TdHJpbmcoKSwgb3B0aW9ucy5pbmNyZW1lbnQudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdPVkVSRkxPVyc6XG4gICAgICAgICAgICAgICAgYXJncy5wdXNoKCdPVkVSRkxPVycsIG9wdGlvbnMuYmVoYXZpb3IpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhcmdzO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1SYW5nZVJlcGx5ID0gZXhwb3J0cy5wdXNoU2xvdFJhbmdlc0FyZ3VtZW50cyA9IGV4cG9ydHMucHVzaFNvcnRBcmd1bWVudHMgPSBleHBvcnRzLnRyYW5zZm9ybUZ1bmN0aW9uTGlzdEl0ZW1SZXBseSA9IGV4cG9ydHMuUmVkaXNGdW5jdGlvbkZsYWdzID0gZXhwb3J0cy50cmFuc2Zvcm1Db21tYW5kUmVwbHkgPSBleHBvcnRzLkNvbW1hbmRDYXRlZ29yaWVzID0gZXhwb3J0cy5Db21tYW5kRmxhZ3MgPSBleHBvcnRzLnB1c2hPcHRpb25hbFZlcmRpY3RBcmd1bWVudCA9IGV4cG9ydHMucHVzaFZlcmRpY3RBcmd1bWVudCA9IGV4cG9ydHMucHVzaFZlcmRpY3ROdW1iZXJBcmd1bWVudHMgPSBleHBvcnRzLnB1c2hWZXJkaWN0QXJndW1lbnRzID0gZXhwb3J0cy5wdXNoRXZhbEFyZ3VtZW50cyA9IGV4cG9ydHMuZXZhbEZpcnN0S2V5SW5kZXggPSBleHBvcnRzLnRyYW5zZm9ybVBYQVQgPSBleHBvcnRzLnRyYW5zZm9ybUVYQVQgPSBleHBvcnRzLnRyYW5zZm9ybUdlb01lbWJlcnNXaXRoUmVwbHkgPSBleHBvcnRzLkdlb1JlcGx5V2l0aCA9IGV4cG9ydHMucHVzaEdlb1JhZGl1c1N0b3JlQXJndW1lbnRzID0gZXhwb3J0cy5wdXNoR2VvUmFkaXVzQXJndW1lbnRzID0gZXhwb3J0cy5wdXNoR2VvU2VhcmNoQXJndW1lbnRzID0gZXhwb3J0cy5wdXNoR2VvQ291bnRBcmd1bWVudCA9IGV4cG9ydHMudHJhbnNmb3JtTE1Qb3BBcmd1bWVudHMgPSBleHBvcnRzLnRyYW5zZm9ybVpNUG9wQXJndW1lbnRzID0gZXhwb3J0cy50cmFuc2Zvcm1Tb3J0ZWRTZXRXaXRoU2NvcmVzUmVwbHkgPSBleHBvcnRzLnRyYW5zZm9ybVNvcnRlZFNldE1lbWJlclJlcGx5ID0gZXhwb3J0cy50cmFuc2Zvcm1Tb3J0ZWRTZXRNZW1iZXJOdWxsUmVwbHkgPSBleHBvcnRzLnRyYW5zZm9ybVN0cmVhbXNNZXNzYWdlc1JlcGx5ID0gZXhwb3J0cy50cmFuc2Zvcm1TdHJlYW1NZXNzYWdlc051bGxSZXBseSA9IGV4cG9ydHMudHJhbnNmb3JtU3RyZWFtTWVzc2FnZXNSZXBseSA9IGV4cG9ydHMudHJhbnNmb3JtU3RyZWFtTWVzc2FnZU51bGxSZXBseSA9IGV4cG9ydHMudHJhbnNmb3JtU3RyZWFtTWVzc2FnZVJlcGx5ID0gZXhwb3J0cy50cmFuc2Zvcm1UdXBsZXNSZXBseSA9IGV4cG9ydHMudHJhbnNmb3JtU3RyaW5nTnVtYmVySW5maW5pdHlBcmd1bWVudCA9IGV4cG9ydHMudHJhbnNmb3JtTnVtYmVySW5maW5pdHlBcmd1bWVudCA9IGV4cG9ydHMudHJhbnNmb3JtTnVtYmVySW5maW5pdHlOdWxsQXJyYXlSZXBseSA9IGV4cG9ydHMudHJhbnNmb3JtTnVtYmVySW5maW5pdHlOdWxsUmVwbHkgPSBleHBvcnRzLnRyYW5zZm9ybU51bWJlckluZmluaXR5UmVwbHkgPSBleHBvcnRzLnB1c2hTY2FuQXJndW1lbnRzID0gZXhwb3J0cy50cmFuc2Zvcm1Cb29sZWFuQXJyYXlSZXBseSA9IGV4cG9ydHMudHJhbnNmb3JtQm9vbGVhblJlcGx5ID0gdm9pZCAwO1xuZnVuY3Rpb24gdHJhbnNmb3JtQm9vbGVhblJlcGx5KHJlcGx5KSB7XG4gICAgcmV0dXJuIHJlcGx5ID09PSAxO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Cb29sZWFuUmVwbHkgPSB0cmFuc2Zvcm1Cb29sZWFuUmVwbHk7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Cb29sZWFuQXJyYXlSZXBseShyZXBseSkge1xuICAgIHJldHVybiByZXBseS5tYXAodHJhbnNmb3JtQm9vbGVhblJlcGx5KTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtQm9vbGVhbkFycmF5UmVwbHkgPSB0cmFuc2Zvcm1Cb29sZWFuQXJyYXlSZXBseTtcbmZ1bmN0aW9uIHB1c2hTY2FuQXJndW1lbnRzKGFyZ3MsIGN1cnNvciwgb3B0aW9ucykge1xuICAgIGFyZ3MucHVzaChjdXJzb3IudG9TdHJpbmcoKSk7XG4gICAgaWYgKG9wdGlvbnM/Lk1BVENIKSB7XG4gICAgICAgIGFyZ3MucHVzaCgnTUFUQ0gnLCBvcHRpb25zLk1BVENIKTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnM/LkNPVU5UKSB7XG4gICAgICAgIGFyZ3MucHVzaCgnQ09VTlQnLCBvcHRpb25zLkNPVU5ULnRvU3RyaW5nKCkpO1xuICAgIH1cbiAgICByZXR1cm4gYXJncztcbn1cbmV4cG9ydHMucHVzaFNjYW5Bcmd1bWVudHMgPSBwdXNoU2NhbkFyZ3VtZW50cztcbmZ1bmN0aW9uIHRyYW5zZm9ybU51bWJlckluZmluaXR5UmVwbHkocmVwbHkpIHtcbiAgICBzd2l0Y2ggKHJlcGx5LnRvU3RyaW5nKCkpIHtcbiAgICAgICAgY2FzZSAnK2luZic6XG4gICAgICAgICAgICByZXR1cm4gSW5maW5pdHk7XG4gICAgICAgIGNhc2UgJy1pbmYnOlxuICAgICAgICAgICAgcmV0dXJuIC1JbmZpbml0eTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBOdW1iZXIocmVwbHkpO1xuICAgIH1cbn1cbmV4cG9ydHMudHJhbnNmb3JtTnVtYmVySW5maW5pdHlSZXBseSA9IHRyYW5zZm9ybU51bWJlckluZmluaXR5UmVwbHk7XG5mdW5jdGlvbiB0cmFuc2Zvcm1OdW1iZXJJbmZpbml0eU51bGxSZXBseShyZXBseSkge1xuICAgIGlmIChyZXBseSA9PT0gbnVsbClcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHRyYW5zZm9ybU51bWJlckluZmluaXR5UmVwbHkocmVwbHkpO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1OdW1iZXJJbmZpbml0eU51bGxSZXBseSA9IHRyYW5zZm9ybU51bWJlckluZmluaXR5TnVsbFJlcGx5O1xuZnVuY3Rpb24gdHJhbnNmb3JtTnVtYmVySW5maW5pdHlOdWxsQXJyYXlSZXBseShyZXBseSkge1xuICAgIHJldHVybiByZXBseS5tYXAodHJhbnNmb3JtTnVtYmVySW5maW5pdHlOdWxsUmVwbHkpO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1OdW1iZXJJbmZpbml0eU51bGxBcnJheVJlcGx5ID0gdHJhbnNmb3JtTnVtYmVySW5maW5pdHlOdWxsQXJyYXlSZXBseTtcbmZ1bmN0aW9uIHRyYW5zZm9ybU51bWJlckluZmluaXR5QXJndW1lbnQobnVtKSB7XG4gICAgc3dpdGNoIChudW0pIHtcbiAgICAgICAgY2FzZSBJbmZpbml0eTpcbiAgICAgICAgICAgIHJldHVybiAnK2luZic7XG4gICAgICAgIGNhc2UgLUluZmluaXR5OlxuICAgICAgICAgICAgcmV0dXJuICctaW5mJztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBudW0udG9TdHJpbmcoKTtcbiAgICB9XG59XG5leHBvcnRzLnRyYW5zZm9ybU51bWJlckluZmluaXR5QXJndW1lbnQgPSB0cmFuc2Zvcm1OdW1iZXJJbmZpbml0eUFyZ3VtZW50O1xuZnVuY3Rpb24gdHJhbnNmb3JtU3RyaW5nTnVtYmVySW5maW5pdHlBcmd1bWVudChudW0pIHtcbiAgICBpZiAodHlwZW9mIG51bSAhPT0gJ251bWJlcicpXG4gICAgICAgIHJldHVybiBudW07XG4gICAgcmV0dXJuIHRyYW5zZm9ybU51bWJlckluZmluaXR5QXJndW1lbnQobnVtKTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtU3RyaW5nTnVtYmVySW5maW5pdHlBcmd1bWVudCA9IHRyYW5zZm9ybVN0cmluZ051bWJlckluZmluaXR5QXJndW1lbnQ7XG5mdW5jdGlvbiB0cmFuc2Zvcm1UdXBsZXNSZXBseShyZXBseSkge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVwbHkubGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgICAgbWVzc2FnZVtyZXBseVtpXS50b1N0cmluZygpXSA9IHJlcGx5W2kgKyAxXTtcbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2U7XG59XG5leHBvcnRzLnRyYW5zZm9ybVR1cGxlc1JlcGx5ID0gdHJhbnNmb3JtVHVwbGVzUmVwbHk7XG5mdW5jdGlvbiB0cmFuc2Zvcm1TdHJlYW1NZXNzYWdlUmVwbHkoW2lkLCBtZXNzYWdlXSkge1xuICAgIHJldHVybiB7XG4gICAgICAgIGlkLFxuICAgICAgICBtZXNzYWdlOiB0cmFuc2Zvcm1UdXBsZXNSZXBseShtZXNzYWdlKVxuICAgIH07XG59XG5leHBvcnRzLnRyYW5zZm9ybVN0cmVhbU1lc3NhZ2VSZXBseSA9IHRyYW5zZm9ybVN0cmVhbU1lc3NhZ2VSZXBseTtcbmZ1bmN0aW9uIHRyYW5zZm9ybVN0cmVhbU1lc3NhZ2VOdWxsUmVwbHkocmVwbHkpIHtcbiAgICBpZiAocmVwbHkgPT09IG51bGwpXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIHJldHVybiB0cmFuc2Zvcm1TdHJlYW1NZXNzYWdlUmVwbHkocmVwbHkpO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1TdHJlYW1NZXNzYWdlTnVsbFJlcGx5ID0gdHJhbnNmb3JtU3RyZWFtTWVzc2FnZU51bGxSZXBseTtcbmZ1bmN0aW9uIHRyYW5zZm9ybVN0cmVhbU1lc3NhZ2VzUmVwbHkocmVwbHkpIHtcbiAgICByZXR1cm4gcmVwbHkubWFwKHRyYW5zZm9ybVN0cmVhbU1lc3NhZ2VSZXBseSk7XG59XG5leHBvcnRzLnRyYW5zZm9ybVN0cmVhbU1lc3NhZ2VzUmVwbHkgPSB0cmFuc2Zvcm1TdHJlYW1NZXNzYWdlc1JlcGx5O1xuZnVuY3Rpb24gdHJhbnNmb3JtU3RyZWFtTWVzc2FnZXNOdWxsUmVwbHkocmVwbHkpIHtcbiAgICByZXR1cm4gcmVwbHkubWFwKHRyYW5zZm9ybVN0cmVhbU1lc3NhZ2VOdWxsUmVwbHkpO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1TdHJlYW1NZXNzYWdlc051bGxSZXBseSA9IHRyYW5zZm9ybVN0cmVhbU1lc3NhZ2VzTnVsbFJlcGx5O1xuZnVuY3Rpb24gdHJhbnNmb3JtU3RyZWFtc01lc3NhZ2VzUmVwbHkocmVwbHkpIHtcbiAgICBpZiAocmVwbHkgPT09IG51bGwpXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIHJldHVybiByZXBseS5tYXAoKFtuYW1lLCByYXdNZXNzYWdlc10pID0+ICh7XG4gICAgICAgIG5hbWUsXG4gICAgICAgIG1lc3NhZ2VzOiB0cmFuc2Zvcm1TdHJlYW1NZXNzYWdlc1JlcGx5KHJhd01lc3NhZ2VzKVxuICAgIH0pKTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtU3RyZWFtc01lc3NhZ2VzUmVwbHkgPSB0cmFuc2Zvcm1TdHJlYW1zTWVzc2FnZXNSZXBseTtcbmZ1bmN0aW9uIHRyYW5zZm9ybVNvcnRlZFNldE1lbWJlck51bGxSZXBseShyZXBseSkge1xuICAgIGlmICghcmVwbHkubGVuZ3RoKVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gdHJhbnNmb3JtU29ydGVkU2V0TWVtYmVyUmVwbHkocmVwbHkpO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Tb3J0ZWRTZXRNZW1iZXJOdWxsUmVwbHkgPSB0cmFuc2Zvcm1Tb3J0ZWRTZXRNZW1iZXJOdWxsUmVwbHk7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Tb3J0ZWRTZXRNZW1iZXJSZXBseShyZXBseSkge1xuICAgIHJldHVybiB7XG4gICAgICAgIHZhbHVlOiByZXBseVswXSxcbiAgICAgICAgc2NvcmU6IHRyYW5zZm9ybU51bWJlckluZmluaXR5UmVwbHkocmVwbHlbMV0pXG4gICAgfTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtU29ydGVkU2V0TWVtYmVyUmVwbHkgPSB0cmFuc2Zvcm1Tb3J0ZWRTZXRNZW1iZXJSZXBseTtcbmZ1bmN0aW9uIHRyYW5zZm9ybVNvcnRlZFNldFdpdGhTY29yZXNSZXBseShyZXBseSkge1xuICAgIGNvbnN0IG1lbWJlcnMgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlcGx5Lmxlbmd0aDsgaSArPSAyKSB7XG4gICAgICAgIG1lbWJlcnMucHVzaCh7XG4gICAgICAgICAgICB2YWx1ZTogcmVwbHlbaV0sXG4gICAgICAgICAgICBzY29yZTogdHJhbnNmb3JtTnVtYmVySW5maW5pdHlSZXBseShyZXBseVtpICsgMV0pXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gbWVtYmVycztcbn1cbmV4cG9ydHMudHJhbnNmb3JtU29ydGVkU2V0V2l0aFNjb3Jlc1JlcGx5ID0gdHJhbnNmb3JtU29ydGVkU2V0V2l0aFNjb3Jlc1JlcGx5O1xuZnVuY3Rpb24gdHJhbnNmb3JtWk1Qb3BBcmd1bWVudHMoYXJncywga2V5cywgc2lkZSwgb3B0aW9ucykge1xuICAgIHB1c2hWZXJkaWN0QXJndW1lbnQoYXJncywga2V5cyk7XG4gICAgYXJncy5wdXNoKHNpZGUpO1xuICAgIGlmIChvcHRpb25zPy5DT1VOVCkge1xuICAgICAgICBhcmdzLnB1c2goJ0NPVU5UJywgb3B0aW9ucy5DT1VOVC50b1N0cmluZygpKTtcbiAgICB9XG4gICAgcmV0dXJuIGFyZ3M7XG59XG5leHBvcnRzLnRyYW5zZm9ybVpNUG9wQXJndW1lbnRzID0gdHJhbnNmb3JtWk1Qb3BBcmd1bWVudHM7XG5mdW5jdGlvbiB0cmFuc2Zvcm1MTVBvcEFyZ3VtZW50cyhhcmdzLCBrZXlzLCBzaWRlLCBvcHRpb25zKSB7XG4gICAgcHVzaFZlcmRpY3RBcmd1bWVudChhcmdzLCBrZXlzKTtcbiAgICBhcmdzLnB1c2goc2lkZSk7XG4gICAgaWYgKG9wdGlvbnM/LkNPVU5UKSB7XG4gICAgICAgIGFyZ3MucHVzaCgnQ09VTlQnLCBvcHRpb25zLkNPVU5ULnRvU3RyaW5nKCkpO1xuICAgIH1cbiAgICByZXR1cm4gYXJncztcbn1cbmV4cG9ydHMudHJhbnNmb3JtTE1Qb3BBcmd1bWVudHMgPSB0cmFuc2Zvcm1MTVBvcEFyZ3VtZW50cztcbmZ1bmN0aW9uIHB1c2hHZW9Db3VudEFyZ3VtZW50KGFyZ3MsIGNvdW50KSB7XG4gICAgaWYgKHR5cGVvZiBjb3VudCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgYXJncy5wdXNoKCdDT1VOVCcsIGNvdW50LnRvU3RyaW5nKCkpO1xuICAgIH1cbiAgICBlbHNlIGlmIChjb3VudCkge1xuICAgICAgICBhcmdzLnB1c2goJ0NPVU5UJywgY291bnQudmFsdWUudG9TdHJpbmcoKSk7XG4gICAgICAgIGlmIChjb3VudC5BTlkpIHtcbiAgICAgICAgICAgIGFyZ3MucHVzaCgnQU5ZJyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGFyZ3M7XG59XG5leHBvcnRzLnB1c2hHZW9Db3VudEFyZ3VtZW50ID0gcHVzaEdlb0NvdW50QXJndW1lbnQ7XG5mdW5jdGlvbiBwdXNoR2VvU2VhcmNoQXJndW1lbnRzKGFyZ3MsIGtleSwgZnJvbSwgYnksIG9wdGlvbnMpIHtcbiAgICBhcmdzLnB1c2goa2V5KTtcbiAgICBpZiAodHlwZW9mIGZyb20gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGFyZ3MucHVzaCgnRlJPTU1FTUJFUicsIGZyb20pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgYXJncy5wdXNoKCdGUk9NTE9OTEFUJywgZnJvbS5sb25naXR1ZGUudG9TdHJpbmcoKSwgZnJvbS5sYXRpdHVkZS50b1N0cmluZygpKTtcbiAgICB9XG4gICAgaWYgKCdyYWRpdXMnIGluIGJ5KSB7XG4gICAgICAgIGFyZ3MucHVzaCgnQllSQURJVVMnLCBieS5yYWRpdXMudG9TdHJpbmcoKSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBhcmdzLnB1c2goJ0JZQk9YJywgYnkud2lkdGgudG9TdHJpbmcoKSwgYnkuaGVpZ2h0LnRvU3RyaW5nKCkpO1xuICAgIH1cbiAgICBhcmdzLnB1c2goYnkudW5pdCk7XG4gICAgaWYgKG9wdGlvbnM/LlNPUlQpIHtcbiAgICAgICAgYXJncy5wdXNoKG9wdGlvbnMuU09SVCk7XG4gICAgfVxuICAgIHB1c2hHZW9Db3VudEFyZ3VtZW50KGFyZ3MsIG9wdGlvbnM/LkNPVU5UKTtcbiAgICByZXR1cm4gYXJncztcbn1cbmV4cG9ydHMucHVzaEdlb1NlYXJjaEFyZ3VtZW50cyA9IHB1c2hHZW9TZWFyY2hBcmd1bWVudHM7XG5mdW5jdGlvbiBwdXNoR2VvUmFkaXVzQXJndW1lbnRzKGFyZ3MsIGtleSwgZnJvbSwgcmFkaXVzLCB1bml0LCBvcHRpb25zKSB7XG4gICAgYXJncy5wdXNoKGtleSk7XG4gICAgaWYgKHR5cGVvZiBmcm9tID09PSAnc3RyaW5nJykge1xuICAgICAgICBhcmdzLnB1c2goZnJvbSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBhcmdzLnB1c2goZnJvbS5sb25naXR1ZGUudG9TdHJpbmcoKSwgZnJvbS5sYXRpdHVkZS50b1N0cmluZygpKTtcbiAgICB9XG4gICAgYXJncy5wdXNoKHJhZGl1cy50b1N0cmluZygpLCB1bml0KTtcbiAgICBpZiAob3B0aW9ucz8uU09SVCkge1xuICAgICAgICBhcmdzLnB1c2gob3B0aW9ucy5TT1JUKTtcbiAgICB9XG4gICAgcHVzaEdlb0NvdW50QXJndW1lbnQoYXJncywgb3B0aW9ucz8uQ09VTlQpO1xuICAgIHJldHVybiBhcmdzO1xufVxuZXhwb3J0cy5wdXNoR2VvUmFkaXVzQXJndW1lbnRzID0gcHVzaEdlb1JhZGl1c0FyZ3VtZW50cztcbmZ1bmN0aW9uIHB1c2hHZW9SYWRpdXNTdG9yZUFyZ3VtZW50cyhhcmdzLCBrZXksIGZyb20sIHJhZGl1cywgdW5pdCwgZGVzdGluYXRpb24sIG9wdGlvbnMpIHtcbiAgICBwdXNoR2VvUmFkaXVzQXJndW1lbnRzKGFyZ3MsIGtleSwgZnJvbSwgcmFkaXVzLCB1bml0LCBvcHRpb25zKTtcbiAgICBpZiAob3B0aW9ucz8uU1RPUkVESVNUKSB7XG4gICAgICAgIGFyZ3MucHVzaCgnU1RPUkVESVNUJywgZGVzdGluYXRpb24pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgYXJncy5wdXNoKCdTVE9SRScsIGRlc3RpbmF0aW9uKTtcbiAgICB9XG4gICAgcmV0dXJuIGFyZ3M7XG59XG5leHBvcnRzLnB1c2hHZW9SYWRpdXNTdG9yZUFyZ3VtZW50cyA9IHB1c2hHZW9SYWRpdXNTdG9yZUFyZ3VtZW50cztcbnZhciBHZW9SZXBseVdpdGg7XG4oZnVuY3Rpb24gKEdlb1JlcGx5V2l0aCkge1xuICAgIEdlb1JlcGx5V2l0aFtcIkRJU1RBTkNFXCJdID0gXCJXSVRIRElTVFwiO1xuICAgIEdlb1JlcGx5V2l0aFtcIkhBU0hcIl0gPSBcIldJVEhIQVNIXCI7XG4gICAgR2VvUmVwbHlXaXRoW1wiQ09PUkRJTkFURVNcIl0gPSBcIldJVEhDT09SRFwiO1xufSkoR2VvUmVwbHlXaXRoIHx8IChleHBvcnRzLkdlb1JlcGx5V2l0aCA9IEdlb1JlcGx5V2l0aCA9IHt9KSk7XG5mdW5jdGlvbiB0cmFuc2Zvcm1HZW9NZW1iZXJzV2l0aFJlcGx5KHJlcGx5LCByZXBseVdpdGgpIHtcbiAgICBjb25zdCByZXBseVdpdGhTZXQgPSBuZXcgU2V0KHJlcGx5V2l0aCk7XG4gICAgbGV0IGluZGV4ID0gMDtcbiAgICBjb25zdCBkaXN0YW5jZUluZGV4ID0gcmVwbHlXaXRoU2V0LmhhcyhHZW9SZXBseVdpdGguRElTVEFOQ0UpICYmICsraW5kZXgsIGhhc2hJbmRleCA9IHJlcGx5V2l0aFNldC5oYXMoR2VvUmVwbHlXaXRoLkhBU0gpICYmICsraW5kZXgsIGNvb3JkaW5hdGVzSW5kZXggPSByZXBseVdpdGhTZXQuaGFzKEdlb1JlcGx5V2l0aC5DT09SRElOQVRFUykgJiYgKytpbmRleDtcbiAgICByZXR1cm4gcmVwbHkubWFwKG1lbWJlciA9PiB7XG4gICAgICAgIGNvbnN0IHRyYW5zZm9ybWVkTWVtYmVyID0ge1xuICAgICAgICAgICAgbWVtYmVyOiBtZW1iZXJbMF1cbiAgICAgICAgfTtcbiAgICAgICAgaWYgKGRpc3RhbmNlSW5kZXgpIHtcbiAgICAgICAgICAgIHRyYW5zZm9ybWVkTWVtYmVyLmRpc3RhbmNlID0gbWVtYmVyW2Rpc3RhbmNlSW5kZXhdO1xuICAgICAgICB9XG4gICAgICAgIGlmIChoYXNoSW5kZXgpIHtcbiAgICAgICAgICAgIHRyYW5zZm9ybWVkTWVtYmVyLmhhc2ggPSBtZW1iZXJbaGFzaEluZGV4XTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29vcmRpbmF0ZXNJbmRleCkge1xuICAgICAgICAgICAgY29uc3QgW2xvbmdpdHVkZSwgbGF0aXR1ZGVdID0gbWVtYmVyW2Nvb3JkaW5hdGVzSW5kZXhdO1xuICAgICAgICAgICAgdHJhbnNmb3JtZWRNZW1iZXIuY29vcmRpbmF0ZXMgPSB7XG4gICAgICAgICAgICAgICAgbG9uZ2l0dWRlLFxuICAgICAgICAgICAgICAgIGxhdGl0dWRlXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cmFuc2Zvcm1lZE1lbWJlcjtcbiAgICB9KTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtR2VvTWVtYmVyc1dpdGhSZXBseSA9IHRyYW5zZm9ybUdlb01lbWJlcnNXaXRoUmVwbHk7XG5mdW5jdGlvbiB0cmFuc2Zvcm1FWEFUKEVYQVQpIHtcbiAgICByZXR1cm4gKHR5cGVvZiBFWEFUID09PSAnbnVtYmVyJyA/IEVYQVQgOiBNYXRoLmZsb29yKEVYQVQuZ2V0VGltZSgpIC8gMTAwMCkpLnRvU3RyaW5nKCk7XG59XG5leHBvcnRzLnRyYW5zZm9ybUVYQVQgPSB0cmFuc2Zvcm1FWEFUO1xuZnVuY3Rpb24gdHJhbnNmb3JtUFhBVChQWEFUKSB7XG4gICAgcmV0dXJuICh0eXBlb2YgUFhBVCA9PT0gJ251bWJlcicgPyBQWEFUIDogUFhBVC5nZXRUaW1lKCkpLnRvU3RyaW5nKCk7XG59XG5leHBvcnRzLnRyYW5zZm9ybVBYQVQgPSB0cmFuc2Zvcm1QWEFUO1xuZnVuY3Rpb24gZXZhbEZpcnN0S2V5SW5kZXgob3B0aW9ucykge1xuICAgIHJldHVybiBvcHRpb25zPy5rZXlzPy5bMF07XG59XG5leHBvcnRzLmV2YWxGaXJzdEtleUluZGV4ID0gZXZhbEZpcnN0S2V5SW5kZXg7XG5mdW5jdGlvbiBwdXNoRXZhbEFyZ3VtZW50cyhhcmdzLCBvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnM/LmtleXMpIHtcbiAgICAgICAgYXJncy5wdXNoKG9wdGlvbnMua2V5cy5sZW5ndGgudG9TdHJpbmcoKSwgLi4ub3B0aW9ucy5rZXlzKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGFyZ3MucHVzaCgnMCcpO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucz8uYXJndW1lbnRzKSB7XG4gICAgICAgIGFyZ3MucHVzaCguLi5vcHRpb25zLmFyZ3VtZW50cyk7XG4gICAgfVxuICAgIHJldHVybiBhcmdzO1xufVxuZXhwb3J0cy5wdXNoRXZhbEFyZ3VtZW50cyA9IHB1c2hFdmFsQXJndW1lbnRzO1xuZnVuY3Rpb24gcHVzaFZlcmRpY3RBcmd1bWVudHMoYXJncywgdmFsdWUpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3JlZGlzL25vZGUtcmVkaXMvcHVsbC8yMTYwXG4gICAgICAgIGFyZ3MgPSBhcmdzLmNvbmNhdCh2YWx1ZSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBhcmdzLnB1c2godmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gYXJncztcbn1cbmV4cG9ydHMucHVzaFZlcmRpY3RBcmd1bWVudHMgPSBwdXNoVmVyZGljdEFyZ3VtZW50cztcbmZ1bmN0aW9uIHB1c2hWZXJkaWN0TnVtYmVyQXJndW1lbnRzKGFyZ3MsIHZhbHVlKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiB2YWx1ZSkge1xuICAgICAgICAgICAgYXJncy5wdXNoKGl0ZW0udG9TdHJpbmcoKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGFyZ3MucHVzaCh2YWx1ZS50b1N0cmluZygpKTtcbiAgICB9XG4gICAgcmV0dXJuIGFyZ3M7XG59XG5leHBvcnRzLnB1c2hWZXJkaWN0TnVtYmVyQXJndW1lbnRzID0gcHVzaFZlcmRpY3ROdW1iZXJBcmd1bWVudHM7XG5mdW5jdGlvbiBwdXNoVmVyZGljdEFyZ3VtZW50KGFyZ3MsIHZhbHVlKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIGFyZ3MucHVzaCh2YWx1ZS5sZW5ndGgudG9TdHJpbmcoKSwgLi4udmFsdWUpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgYXJncy5wdXNoKCcxJywgdmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gYXJncztcbn1cbmV4cG9ydHMucHVzaFZlcmRpY3RBcmd1bWVudCA9IHB1c2hWZXJkaWN0QXJndW1lbnQ7XG5mdW5jdGlvbiBwdXNoT3B0aW9uYWxWZXJkaWN0QXJndW1lbnQoYXJncywgbmFtZSwgdmFsdWUpIHtcbiAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuIGFyZ3M7XG4gICAgYXJncy5wdXNoKG5hbWUpO1xuICAgIHJldHVybiBwdXNoVmVyZGljdEFyZ3VtZW50KGFyZ3MsIHZhbHVlKTtcbn1cbmV4cG9ydHMucHVzaE9wdGlvbmFsVmVyZGljdEFyZ3VtZW50ID0gcHVzaE9wdGlvbmFsVmVyZGljdEFyZ3VtZW50O1xudmFyIENvbW1hbmRGbGFncztcbihmdW5jdGlvbiAoQ29tbWFuZEZsYWdzKSB7XG4gICAgQ29tbWFuZEZsYWdzW1wiV1JJVEVcIl0gPSBcIndyaXRlXCI7XG4gICAgQ29tbWFuZEZsYWdzW1wiUkVBRE9OTFlcIl0gPSBcInJlYWRvbmx5XCI7XG4gICAgQ29tbWFuZEZsYWdzW1wiREVOWU9PTVwiXSA9IFwiZGVueW9vbVwiO1xuICAgIENvbW1hbmRGbGFnc1tcIkFETUlOXCJdID0gXCJhZG1pblwiO1xuICAgIENvbW1hbmRGbGFnc1tcIlBVQlNVQlwiXSA9IFwicHVic3ViXCI7XG4gICAgQ29tbWFuZEZsYWdzW1wiTk9TQ1JJUFRcIl0gPSBcIm5vc2NyaXB0XCI7XG4gICAgQ29tbWFuZEZsYWdzW1wiUkFORE9NXCJdID0gXCJyYW5kb21cIjtcbiAgICBDb21tYW5kRmxhZ3NbXCJTT1JUX0ZPUl9TQ1JJUFRcIl0gPSBcInNvcnRfZm9yX3NjcmlwdFwiO1xuICAgIENvbW1hbmRGbGFnc1tcIkxPQURJTkdcIl0gPSBcImxvYWRpbmdcIjtcbiAgICBDb21tYW5kRmxhZ3NbXCJTVEFMRVwiXSA9IFwic3RhbGVcIjtcbiAgICBDb21tYW5kRmxhZ3NbXCJTS0lQX01PTklUT1JcIl0gPSBcInNraXBfbW9uaXRvclwiO1xuICAgIENvbW1hbmRGbGFnc1tcIkFTS0lOR1wiXSA9IFwiYXNraW5nXCI7XG4gICAgQ29tbWFuZEZsYWdzW1wiRkFTVFwiXSA9IFwiZmFzdFwiO1xuICAgIENvbW1hbmRGbGFnc1tcIk1PVkFCTEVLRVlTXCJdID0gXCJtb3ZhYmxla2V5c1wiOyAvLyBrZXlzIGhhdmUgbm8gcHJlLWRldGVybWluZWQgcG9zaXRpb24uIFlvdSBtdXN0IGRpc2NvdmVyIGtleXMgeW91cnNlbGYuXG59KShDb21tYW5kRmxhZ3MgfHwgKGV4cG9ydHMuQ29tbWFuZEZsYWdzID0gQ29tbWFuZEZsYWdzID0ge30pKTtcbnZhciBDb21tYW5kQ2F0ZWdvcmllcztcbihmdW5jdGlvbiAoQ29tbWFuZENhdGVnb3JpZXMpIHtcbiAgICBDb21tYW5kQ2F0ZWdvcmllc1tcIktFWVNQQUNFXCJdID0gXCJAa2V5c3BhY2VcIjtcbiAgICBDb21tYW5kQ2F0ZWdvcmllc1tcIlJFQURcIl0gPSBcIkByZWFkXCI7XG4gICAgQ29tbWFuZENhdGVnb3JpZXNbXCJXUklURVwiXSA9IFwiQHdyaXRlXCI7XG4gICAgQ29tbWFuZENhdGVnb3JpZXNbXCJTRVRcIl0gPSBcIkBzZXRcIjtcbiAgICBDb21tYW5kQ2F0ZWdvcmllc1tcIlNPUlRFRFNFVFwiXSA9IFwiQHNvcnRlZHNldFwiO1xuICAgIENvbW1hbmRDYXRlZ29yaWVzW1wiTElTVFwiXSA9IFwiQGxpc3RcIjtcbiAgICBDb21tYW5kQ2F0ZWdvcmllc1tcIkhBU0hcIl0gPSBcIkBoYXNoXCI7XG4gICAgQ29tbWFuZENhdGVnb3JpZXNbXCJTVFJJTkdcIl0gPSBcIkBzdHJpbmdcIjtcbiAgICBDb21tYW5kQ2F0ZWdvcmllc1tcIkJJVE1BUFwiXSA9IFwiQGJpdG1hcFwiO1xuICAgIENvbW1hbmRDYXRlZ29yaWVzW1wiSFlQRVJMT0dMT0dcIl0gPSBcIkBoeXBlcmxvZ2xvZ1wiO1xuICAgIENvbW1hbmRDYXRlZ29yaWVzW1wiR0VPXCJdID0gXCJAZ2VvXCI7XG4gICAgQ29tbWFuZENhdGVnb3JpZXNbXCJTVFJFQU1cIl0gPSBcIkBzdHJlYW1cIjtcbiAgICBDb21tYW5kQ2F0ZWdvcmllc1tcIlBVQlNVQlwiXSA9IFwiQHB1YnN1YlwiO1xuICAgIENvbW1hbmRDYXRlZ29yaWVzW1wiQURNSU5cIl0gPSBcIkBhZG1pblwiO1xuICAgIENvbW1hbmRDYXRlZ29yaWVzW1wiRkFTVFwiXSA9IFwiQGZhc3RcIjtcbiAgICBDb21tYW5kQ2F0ZWdvcmllc1tcIlNMT1dcIl0gPSBcIkBzbG93XCI7XG4gICAgQ29tbWFuZENhdGVnb3JpZXNbXCJCTE9DS0lOR1wiXSA9IFwiQGJsb2NraW5nXCI7XG4gICAgQ29tbWFuZENhdGVnb3JpZXNbXCJEQU5HRVJPVVNcIl0gPSBcIkBkYW5nZXJvdXNcIjtcbiAgICBDb21tYW5kQ2F0ZWdvcmllc1tcIkNPTk5FQ1RJT05cIl0gPSBcIkBjb25uZWN0aW9uXCI7XG4gICAgQ29tbWFuZENhdGVnb3JpZXNbXCJUUkFOU0FDVElPTlwiXSA9IFwiQHRyYW5zYWN0aW9uXCI7XG4gICAgQ29tbWFuZENhdGVnb3JpZXNbXCJTQ1JJUFRJTkdcIl0gPSBcIkBzY3JpcHRpbmdcIjtcbn0pKENvbW1hbmRDYXRlZ29yaWVzIHx8IChleHBvcnRzLkNvbW1hbmRDYXRlZ29yaWVzID0gQ29tbWFuZENhdGVnb3JpZXMgPSB7fSkpO1xuZnVuY3Rpb24gdHJhbnNmb3JtQ29tbWFuZFJlcGx5KFtuYW1lLCBhcml0eSwgZmxhZ3MsIGZpcnN0S2V5SW5kZXgsIGxhc3RLZXlJbmRleCwgc3RlcCwgY2F0ZWdvcmllc10pIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBuYW1lLFxuICAgICAgICBhcml0eSxcbiAgICAgICAgZmxhZ3M6IG5ldyBTZXQoZmxhZ3MpLFxuICAgICAgICBmaXJzdEtleUluZGV4LFxuICAgICAgICBsYXN0S2V5SW5kZXgsXG4gICAgICAgIHN0ZXAsXG4gICAgICAgIGNhdGVnb3JpZXM6IG5ldyBTZXQoY2F0ZWdvcmllcylcbiAgICB9O1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Db21tYW5kUmVwbHkgPSB0cmFuc2Zvcm1Db21tYW5kUmVwbHk7XG52YXIgUmVkaXNGdW5jdGlvbkZsYWdzO1xuKGZ1bmN0aW9uIChSZWRpc0Z1bmN0aW9uRmxhZ3MpIHtcbiAgICBSZWRpc0Z1bmN0aW9uRmxhZ3NbXCJOT19XUklURVNcIl0gPSBcIm5vLXdyaXRlc1wiO1xuICAgIFJlZGlzRnVuY3Rpb25GbGFnc1tcIkFMTE9XX09PTVwiXSA9IFwiYWxsb3ctb29tXCI7XG4gICAgUmVkaXNGdW5jdGlvbkZsYWdzW1wiQUxMT1dfU1RBTEVcIl0gPSBcImFsbG93LXN0YWxlXCI7XG4gICAgUmVkaXNGdW5jdGlvbkZsYWdzW1wiTk9fQ0xVU1RFUlwiXSA9IFwibm8tY2x1c3RlclwiO1xufSkoUmVkaXNGdW5jdGlvbkZsYWdzIHx8IChleHBvcnRzLlJlZGlzRnVuY3Rpb25GbGFncyA9IFJlZGlzRnVuY3Rpb25GbGFncyA9IHt9KSk7XG5mdW5jdGlvbiB0cmFuc2Zvcm1GdW5jdGlvbkxpc3RJdGVtUmVwbHkocmVwbHkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBsaWJyYXJ5TmFtZTogcmVwbHlbMV0sXG4gICAgICAgIGVuZ2luZTogcmVwbHlbM10sXG4gICAgICAgIGZ1bmN0aW9uczogcmVwbHlbNV0ubWFwKGZuID0+ICh7XG4gICAgICAgICAgICBuYW1lOiBmblsxXSxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBmblszXSxcbiAgICAgICAgICAgIGZsYWdzOiBmbls1XVxuICAgICAgICB9KSlcbiAgICB9O1xufVxuZXhwb3J0cy50cmFuc2Zvcm1GdW5jdGlvbkxpc3RJdGVtUmVwbHkgPSB0cmFuc2Zvcm1GdW5jdGlvbkxpc3RJdGVtUmVwbHk7XG5mdW5jdGlvbiBwdXNoU29ydEFyZ3VtZW50cyhhcmdzLCBvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnM/LkJZKSB7XG4gICAgICAgIGFyZ3MucHVzaCgnQlknLCBvcHRpb25zLkJZKTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnM/LkxJTUlUKSB7XG4gICAgICAgIGFyZ3MucHVzaCgnTElNSVQnLCBvcHRpb25zLkxJTUlULm9mZnNldC50b1N0cmluZygpLCBvcHRpb25zLkxJTUlULmNvdW50LnRvU3RyaW5nKCkpO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucz8uR0VUKSB7XG4gICAgICAgIGZvciAoY29uc3QgcGF0dGVybiBvZiAodHlwZW9mIG9wdGlvbnMuR0VUID09PSAnc3RyaW5nJyA/IFtvcHRpb25zLkdFVF0gOiBvcHRpb25zLkdFVCkpIHtcbiAgICAgICAgICAgIGFyZ3MucHVzaCgnR0VUJywgcGF0dGVybik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKG9wdGlvbnM/LkRJUkVDVElPTikge1xuICAgICAgICBhcmdzLnB1c2gob3B0aW9ucy5ESVJFQ1RJT04pO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucz8uQUxQSEEpIHtcbiAgICAgICAgYXJncy5wdXNoKCdBTFBIQScpO1xuICAgIH1cbiAgICByZXR1cm4gYXJncztcbn1cbmV4cG9ydHMucHVzaFNvcnRBcmd1bWVudHMgPSBwdXNoU29ydEFyZ3VtZW50cztcbmZ1bmN0aW9uIHB1c2hTbG90UmFuZ2VBcmd1bWVudHMoYXJncywgcmFuZ2UpIHtcbiAgICBhcmdzLnB1c2gocmFuZ2Uuc3RhcnQudG9TdHJpbmcoKSwgcmFuZ2UuZW5kLnRvU3RyaW5nKCkpO1xufVxuZnVuY3Rpb24gcHVzaFNsb3RSYW5nZXNBcmd1bWVudHMoYXJncywgcmFuZ2VzKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkocmFuZ2VzKSkge1xuICAgICAgICBmb3IgKGNvbnN0IHJhbmdlIG9mIHJhbmdlcykge1xuICAgICAgICAgICAgcHVzaFNsb3RSYW5nZUFyZ3VtZW50cyhhcmdzLCByYW5nZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHB1c2hTbG90UmFuZ2VBcmd1bWVudHMoYXJncywgcmFuZ2VzKTtcbiAgICB9XG4gICAgcmV0dXJuIGFyZ3M7XG59XG5leHBvcnRzLnB1c2hTbG90UmFuZ2VzQXJndW1lbnRzID0gcHVzaFNsb3RSYW5nZXNBcmd1bWVudHM7XG5mdW5jdGlvbiB0cmFuc2Zvcm1SYW5nZVJlcGx5KFtzdGFydCwgZW5kXSkge1xuICAgIHJldHVybiB7XG4gICAgICAgIHN0YXJ0LFxuICAgICAgICBlbmRcbiAgICB9O1xufVxuZXhwb3J0cy50cmFuc2Zvcm1SYW5nZVJlcGx5ID0gdHJhbnNmb3JtUmFuZ2VSZXBseTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IGV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gdm9pZCAwO1xuY29uc3QgZ2VuZXJpY190cmFuc2Zvcm1lcnNfMSA9IHJlcXVpcmUoXCIuL2dlbmVyaWMtdHJhbnNmb3JtZXJzXCIpO1xuZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSAyO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKG9wZXJhdGlvbiwgZGVzdEtleSwga2V5KSB7XG4gICAgcmV0dXJuICgwLCBnZW5lcmljX3RyYW5zZm9ybWVyc18xLnB1c2hWZXJkaWN0QXJndW1lbnRzKShbJ0JJVE9QJywgb3BlcmF0aW9uLCBkZXN0S2V5XSwga2V5KTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gZXhwb3J0cy5JU19SRUFEX09OTFkgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IHZvaWQgMDtcbmV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gMTtcbmV4cG9ydHMuSVNfUkVBRF9PTkxZID0gdHJ1ZTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhrZXksIGJpdCwgc3RhcnQsIGVuZCwgbW9kZSkge1xuICAgIGNvbnN0IGFyZ3MgPSBbJ0JJVFBPUycsIGtleSwgYml0LnRvU3RyaW5nKCldO1xuICAgIGlmICh0eXBlb2Ygc3RhcnQgPT09ICdudW1iZXInKSB7XG4gICAgICAgIGFyZ3MucHVzaChzdGFydC50b1N0cmluZygpKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBlbmQgPT09ICdudW1iZXInKSB7XG4gICAgICAgIGFyZ3MucHVzaChlbmQudG9TdHJpbmcoKSk7XG4gICAgfVxuICAgIGlmIChtb2RlKSB7XG4gICAgICAgIGFyZ3MucHVzaChtb2RlKTtcbiAgICB9XG4gICAgcmV0dXJuIGFyZ3M7XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IGV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gdm9pZCAwO1xuZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSAxO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKHNvdXJjZSwgZGVzdGluYXRpb24sIHNvdXJjZURpcmVjdGlvbiwgZGVzdGluYXRpb25EaXJlY3Rpb24sIHRpbWVvdXQpIHtcbiAgICByZXR1cm4gW1xuICAgICAgICAnQkxNT1ZFJyxcbiAgICAgICAgc291cmNlLFxuICAgICAgICBkZXN0aW5hdGlvbixcbiAgICAgICAgc291cmNlRGlyZWN0aW9uLFxuICAgICAgICBkZXN0aW5hdGlvbkRpcmVjdGlvbixcbiAgICAgICAgdGltZW91dC50b1N0cmluZygpXG4gICAgXTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSB2b2lkIDA7XG5jb25zdCBnZW5lcmljX3RyYW5zZm9ybWVyc18xID0gcmVxdWlyZShcIi4vZ2VuZXJpYy10cmFuc2Zvcm1lcnNcIik7XG5leHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IDI7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMoa2V5cywgc2lkZSwgb3B0aW9ucykge1xuICAgIHJldHVybiAoMCwgZ2VuZXJpY190cmFuc2Zvcm1lcnNfMS50cmFuc2Zvcm1MTVBvcEFyZ3VtZW50cykoWydMTVBPUCddLCBrZXlzLCBzaWRlLCBvcHRpb25zKTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtUmVwbHkgPSBleHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IGV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gdm9pZCAwO1xuY29uc3QgZ2VuZXJpY190cmFuc2Zvcm1lcnNfMSA9IHJlcXVpcmUoXCIuL2dlbmVyaWMtdHJhbnNmb3JtZXJzXCIpO1xuZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSAzO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKHRpbWVvdXQsIGtleXMsIHNpZGUsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gKDAsIGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEudHJhbnNmb3JtTE1Qb3BBcmd1bWVudHMpKFsnQkxNUE9QJywgdGltZW91dC50b1N0cmluZygpXSwga2V5cywgc2lkZSwgb3B0aW9ucyk7XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbnZhciBMTVBPUF8xID0gcmVxdWlyZShcIi4vTE1QT1BcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ0cmFuc2Zvcm1SZXBseVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gTE1QT1BfMS50cmFuc2Zvcm1SZXBseTsgfSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybVJlcGx5ID0gZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IHZvaWQgMDtcbmNvbnN0IGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEgPSByZXF1aXJlKFwiLi9nZW5lcmljLXRyYW5zZm9ybWVyc1wiKTtcbmV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gMTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhrZXlzLCB0aW1lb3V0KSB7XG4gICAgY29uc3QgYXJncyA9ICgwLCBnZW5lcmljX3RyYW5zZm9ybWVyc18xLnB1c2hWZXJkaWN0QXJndW1lbnRzKShbJ0JMUE9QJ10sIGtleXMpO1xuICAgIGFyZ3MucHVzaCh0aW1lb3V0LnRvU3RyaW5nKCkpO1xuICAgIHJldHVybiBhcmdzO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG5mdW5jdGlvbiB0cmFuc2Zvcm1SZXBseShyZXBseSkge1xuICAgIGlmIChyZXBseSA9PT0gbnVsbClcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHtcbiAgICAgICAga2V5OiByZXBseVswXSxcbiAgICAgICAgZWxlbWVudDogcmVwbHlbMV1cbiAgICB9O1xufVxuZXhwb3J0cy50cmFuc2Zvcm1SZXBseSA9IHRyYW5zZm9ybVJlcGx5O1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtUmVwbHkgPSBleHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IGV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gdm9pZCAwO1xuY29uc3QgZ2VuZXJpY190cmFuc2Zvcm1lcnNfMSA9IHJlcXVpcmUoXCIuL2dlbmVyaWMtdHJhbnNmb3JtZXJzXCIpO1xuZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSAxO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGtleSwgdGltZW91dCkge1xuICAgIGNvbnN0IGFyZ3MgPSAoMCwgZ2VuZXJpY190cmFuc2Zvcm1lcnNfMS5wdXNoVmVyZGljdEFyZ3VtZW50cykoWydCUlBPUCddLCBrZXkpO1xuICAgIGFyZ3MucHVzaCh0aW1lb3V0LnRvU3RyaW5nKCkpO1xuICAgIHJldHVybiBhcmdzO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG52YXIgQkxQT1BfMSA9IHJlcXVpcmUoXCIuL0JMUE9QXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidHJhbnNmb3JtUmVwbHlcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIEJMUE9QXzEudHJhbnNmb3JtUmVwbHk7IH0gfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IHZvaWQgMDtcbmV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gMTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhzb3VyY2UsIGRlc3RpbmF0aW9uLCB0aW1lb3V0KSB7XG4gICAgcmV0dXJuIFsnQlJQT1BMUFVTSCcsIHNvdXJjZSwgZGVzdGluYXRpb24sIHRpbWVvdXQudG9TdHJpbmcoKV07XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybVJlcGx5ID0gZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IHZvaWQgMDtcbmNvbnN0IGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEgPSByZXF1aXJlKFwiLi9nZW5lcmljLXRyYW5zZm9ybWVyc1wiKTtcbmV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gMjtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhrZXlzLCBzaWRlLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuICgwLCBnZW5lcmljX3RyYW5zZm9ybWVyc18xLnRyYW5zZm9ybVpNUG9wQXJndW1lbnRzKShbJ1pNUE9QJ10sIGtleXMsIHNpZGUsIG9wdGlvbnMpO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG5mdW5jdGlvbiB0cmFuc2Zvcm1SZXBseShyZXBseSkge1xuICAgIHJldHVybiByZXBseSA9PT0gbnVsbCA/IG51bGwgOiB7XG4gICAgICAgIGtleTogcmVwbHlbMF0sXG4gICAgICAgIGVsZW1lbnRzOiByZXBseVsxXS5tYXAoZ2VuZXJpY190cmFuc2Zvcm1lcnNfMS50cmFuc2Zvcm1Tb3J0ZWRTZXRNZW1iZXJSZXBseSlcbiAgICB9O1xufVxuZXhwb3J0cy50cmFuc2Zvcm1SZXBseSA9IHRyYW5zZm9ybVJlcGx5O1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtUmVwbHkgPSBleHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IGV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gdm9pZCAwO1xuY29uc3QgZ2VuZXJpY190cmFuc2Zvcm1lcnNfMSA9IHJlcXVpcmUoXCIuL2dlbmVyaWMtdHJhbnNmb3JtZXJzXCIpO1xuZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSAzO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKHRpbWVvdXQsIGtleXMsIHNpZGUsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gKDAsIGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEudHJhbnNmb3JtWk1Qb3BBcmd1bWVudHMpKFsnQlpNUE9QJywgdGltZW91dC50b1N0cmluZygpXSwga2V5cywgc2lkZSwgb3B0aW9ucyk7XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbnZhciBaTVBPUF8xID0gcmVxdWlyZShcIi4vWk1QT1BcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ0cmFuc2Zvcm1SZXBseVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gWk1QT1BfMS50cmFuc2Zvcm1SZXBseTsgfSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybVJlcGx5ID0gZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IHZvaWQgMDtcbmNvbnN0IGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEgPSByZXF1aXJlKFwiLi9nZW5lcmljLXRyYW5zZm9ybWVyc1wiKTtcbmV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gMTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhrZXksIHRpbWVvdXQpIHtcbiAgICBjb25zdCBhcmdzID0gKDAsIGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEucHVzaFZlcmRpY3RBcmd1bWVudHMpKFsnQlpQT1BNQVgnXSwga2V5KTtcbiAgICBhcmdzLnB1c2godGltZW91dC50b1N0cmluZygpKTtcbiAgICByZXR1cm4gYXJncztcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuZnVuY3Rpb24gdHJhbnNmb3JtUmVwbHkocmVwbHkpIHtcbiAgICBpZiAoIXJlcGx5KVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4ge1xuICAgICAgICBrZXk6IHJlcGx5WzBdLFxuICAgICAgICB2YWx1ZTogcmVwbHlbMV0sXG4gICAgICAgIHNjb3JlOiAoMCwgZ2VuZXJpY190cmFuc2Zvcm1lcnNfMS50cmFuc2Zvcm1OdW1iZXJJbmZpbml0eVJlcGx5KShyZXBseVsyXSlcbiAgICB9O1xufVxuZXhwb3J0cy50cmFuc2Zvcm1SZXBseSA9IHRyYW5zZm9ybVJlcGx5O1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtUmVwbHkgPSBleHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IGV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gdm9pZCAwO1xuY29uc3QgZ2VuZXJpY190cmFuc2Zvcm1lcnNfMSA9IHJlcXVpcmUoXCIuL2dlbmVyaWMtdHJhbnNmb3JtZXJzXCIpO1xuZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSAxO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGtleSwgdGltZW91dCkge1xuICAgIGNvbnN0IGFyZ3MgPSAoMCwgZ2VuZXJpY190cmFuc2Zvcm1lcnNfMS5wdXNoVmVyZGljdEFyZ3VtZW50cykoWydCWlBPUE1JTiddLCBrZXkpO1xuICAgIGFyZ3MucHVzaCh0aW1lb3V0LnRvU3RyaW5nKCkpO1xuICAgIHJldHVybiBhcmdzO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG52YXIgQlpQT1BNQVhfMSA9IHJlcXVpcmUoXCIuL0JaUE9QTUFYXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidHJhbnNmb3JtUmVwbHlcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIEJaUE9QTUFYXzEudHJhbnNmb3JtUmVwbHk7IH0gfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1SZXBseSA9IGV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSB2b2lkIDA7XG5leHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IDE7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMoc291cmNlLCBkZXN0aW5hdGlvbiwgb3B0aW9ucykge1xuICAgIGNvbnN0IGFyZ3MgPSBbJ0NPUFknLCBzb3VyY2UsIGRlc3RpbmF0aW9uXTtcbiAgICBpZiAob3B0aW9ucz8uZGVzdGluYXRpb25EYikge1xuICAgICAgICBhcmdzLnB1c2goJ0RCJywgb3B0aW9ucy5kZXN0aW5hdGlvbkRiLnRvU3RyaW5nKCkpO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucz8ucmVwbGFjZSkge1xuICAgICAgICBhcmdzLnB1c2goJ1JFUExBQ0UnKTtcbiAgICB9XG4gICAgcmV0dXJuIGFyZ3M7XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbnZhciBnZW5lcmljX3RyYW5zZm9ybWVyc18xID0gcmVxdWlyZShcIi4vZ2VuZXJpYy10cmFuc2Zvcm1lcnNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ0cmFuc2Zvcm1SZXBseVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZ2VuZXJpY190cmFuc2Zvcm1lcnNfMS50cmFuc2Zvcm1Cb29sZWFuUmVwbHk7IH0gfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IHZvaWQgMDtcbmV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gMTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhrZXkpIHtcbiAgICByZXR1cm4gWydERUNSJywga2V5XTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSB2b2lkIDA7XG5leHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IDE7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMoa2V5LCBkZWNyZW1lbnQpIHtcbiAgICByZXR1cm4gWydERUNSQlknLCBrZXksIGRlY3JlbWVudC50b1N0cmluZygpXTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSB2b2lkIDA7XG5jb25zdCBnZW5lcmljX3RyYW5zZm9ybWVyc18xID0gcmVxdWlyZShcIi4vZ2VuZXJpYy10cmFuc2Zvcm1lcnNcIik7XG5leHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IDE7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMoa2V5cykge1xuICAgIHJldHVybiAoMCwgZ2VuZXJpY190cmFuc2Zvcm1lcnNfMS5wdXNoVmVyZGljdEFyZ3VtZW50cykoWydERUwnXSwga2V5cyk7XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IGV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gdm9pZCAwO1xuZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSAxO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGtleSkge1xuICAgIHJldHVybiBbJ0RVTVAnLCBrZXldO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLklTX1JFQURfT05MWSA9IGV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gdm9pZCAwO1xuY29uc3QgZ2VuZXJpY190cmFuc2Zvcm1lcnNfMSA9IHJlcXVpcmUoXCIuL2dlbmVyaWMtdHJhbnNmb3JtZXJzXCIpO1xuZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSBnZW5lcmljX3RyYW5zZm9ybWVyc18xLmV2YWxGaXJzdEtleUluZGV4O1xuZXhwb3J0cy5JU19SRUFEX09OTFkgPSB0cnVlO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKHNjcmlwdCwgb3B0aW9ucykge1xuICAgIHJldHVybiAoMCwgZ2VuZXJpY190cmFuc2Zvcm1lcnNfMS5wdXNoRXZhbEFyZ3VtZW50cykoWydFVkFMX1JPJywgc2NyaXB0XSwgb3B0aW9ucyk7XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IGV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gdm9pZCAwO1xuY29uc3QgZ2VuZXJpY190cmFuc2Zvcm1lcnNfMSA9IHJlcXVpcmUoXCIuL2dlbmVyaWMtdHJhbnNmb3JtZXJzXCIpO1xuZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSBnZW5lcmljX3RyYW5zZm9ybWVyc18xLmV2YWxGaXJzdEtleUluZGV4O1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKHNjcmlwdCwgb3B0aW9ucykge1xuICAgIHJldHVybiAoMCwgZ2VuZXJpY190cmFuc2Zvcm1lcnNfMS5wdXNoRXZhbEFyZ3VtZW50cykoWydFVkFMJywgc2NyaXB0XSwgb3B0aW9ucyk7XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IGV4cG9ydHMuSVNfUkVBRF9PTkxZID0gZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSB2b2lkIDA7XG5jb25zdCBnZW5lcmljX3RyYW5zZm9ybWVyc18xID0gcmVxdWlyZShcIi4vZ2VuZXJpYy10cmFuc2Zvcm1lcnNcIik7XG5leHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEuZXZhbEZpcnN0S2V5SW5kZXg7XG5leHBvcnRzLklTX1JFQURfT05MWSA9IHRydWU7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMoc2hhMSwgb3B0aW9ucykge1xuICAgIHJldHVybiAoMCwgZ2VuZXJpY190cmFuc2Zvcm1lcnNfMS5wdXNoRXZhbEFyZ3VtZW50cykoWydFVkFMU0hBX1JPJywgc2hhMV0sIG9wdGlvbnMpO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IHZvaWQgMDtcbmNvbnN0IGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEgPSByZXF1aXJlKFwiLi9nZW5lcmljLXRyYW5zZm9ybWVyc1wiKTtcbmV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gZ2VuZXJpY190cmFuc2Zvcm1lcnNfMS5ldmFsRmlyc3RLZXlJbmRleDtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhzaGExLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuICgwLCBnZW5lcmljX3RyYW5zZm9ybWVyc18xLnB1c2hFdmFsQXJndW1lbnRzKShbJ0VWQUxTSEEnLCBzaGExXSwgb3B0aW9ucyk7XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IGV4cG9ydHMuSVNfUkVBRF9PTkxZID0gZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSB2b2lkIDA7XG5jb25zdCBnZW5lcmljX3RyYW5zZm9ybWVyc18xID0gcmVxdWlyZShcIi4vZ2VuZXJpYy10cmFuc2Zvcm1lcnNcIik7XG5leHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IDE7XG5leHBvcnRzLklTX1JFQURfT05MWSA9IHRydWU7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMoa2V5cykge1xuICAgIHJldHVybiAoMCwgZ2VuZXJpY190cmFuc2Zvcm1lcnNfMS5wdXNoVmVyZGljdEFyZ3VtZW50cykoWydFWElTVFMnXSwga2V5cyk7XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybVJlcGx5ID0gZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IHZvaWQgMDtcbmV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gMTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhrZXksIHNlY29uZHMsIG1vZGUpIHtcbiAgICBjb25zdCBhcmdzID0gWydFWFBJUkUnLCBrZXksIHNlY29uZHMudG9TdHJpbmcoKV07XG4gICAgaWYgKG1vZGUpIHtcbiAgICAgICAgYXJncy5wdXNoKG1vZGUpO1xuICAgIH1cbiAgICByZXR1cm4gYXJncztcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xudmFyIGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEgPSByZXF1aXJlKFwiLi9nZW5lcmljLXRyYW5zZm9ybWVyc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInRyYW5zZm9ybVJlcGx5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBnZW5lcmljX3RyYW5zZm9ybWVyc18xLnRyYW5zZm9ybUJvb2xlYW5SZXBseTsgfSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybVJlcGx5ID0gZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IHZvaWQgMDtcbmNvbnN0IGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEgPSByZXF1aXJlKFwiLi9nZW5lcmljLXRyYW5zZm9ybWVyc1wiKTtcbmV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gMTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhrZXksIHRpbWVzdGFtcCwgbW9kZSkge1xuICAgIGNvbnN0IGFyZ3MgPSBbXG4gICAgICAgICdFWFBJUkVBVCcsXG4gICAgICAgIGtleSxcbiAgICAgICAgKDAsIGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEudHJhbnNmb3JtRVhBVCkodGltZXN0YW1wKVxuICAgIF07XG4gICAgaWYgKG1vZGUpIHtcbiAgICAgICAgYXJncy5wdXNoKG1vZGUpO1xuICAgIH1cbiAgICByZXR1cm4gYXJncztcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xudmFyIGdlbmVyaWNfdHJhbnNmb3JtZXJzXzIgPSByZXF1aXJlKFwiLi9nZW5lcmljLXRyYW5zZm9ybWVyc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInRyYW5zZm9ybVJlcGx5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBnZW5lcmljX3RyYW5zZm9ybWVyc18yLnRyYW5zZm9ybUJvb2xlYW5SZXBseTsgfSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IGV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gdm9pZCAwO1xuZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSAxO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGtleSkge1xuICAgIHJldHVybiBbJ0VYUElSRVRJTUUnLCBrZXldO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLklTX1JFQURfT05MWSA9IGV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gdm9pZCAwO1xuY29uc3QgZ2VuZXJpY190cmFuc2Zvcm1lcnNfMSA9IHJlcXVpcmUoXCIuL2dlbmVyaWMtdHJhbnNmb3JtZXJzXCIpO1xuZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSBnZW5lcmljX3RyYW5zZm9ybWVyc18xLmV2YWxGaXJzdEtleUluZGV4O1xuZXhwb3J0cy5JU19SRUFEX09OTFkgPSB0cnVlO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGZuLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuICgwLCBnZW5lcmljX3RyYW5zZm9ybWVyc18xLnB1c2hFdmFsQXJndW1lbnRzKShbJ0ZDQUxMX1JPJywgZm5dLCBvcHRpb25zKTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSB2b2lkIDA7XG5jb25zdCBnZW5lcmljX3RyYW5zZm9ybWVyc18xID0gcmVxdWlyZShcIi4vZ2VuZXJpYy10cmFuc2Zvcm1lcnNcIik7XG5leHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEuZXZhbEZpcnN0S2V5SW5kZXg7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMoZm4sIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gKDAsIGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEucHVzaEV2YWxBcmd1bWVudHMpKFsnRkNBTEwnLCBmbl0sIG9wdGlvbnMpO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IHZvaWQgMDtcbmV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gMTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhrZXksIHRvQWRkLCBvcHRpb25zKSB7XG4gICAgY29uc3QgYXJncyA9IFsnR0VPQUREJywga2V5XTtcbiAgICBpZiAob3B0aW9ucz8uTlgpIHtcbiAgICAgICAgYXJncy5wdXNoKCdOWCcpO1xuICAgIH1cbiAgICBlbHNlIGlmIChvcHRpb25zPy5YWCkge1xuICAgICAgICBhcmdzLnB1c2goJ1hYJyk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zPy5DSCkge1xuICAgICAgICBhcmdzLnB1c2goJ0NIJyk7XG4gICAgfVxuICAgIGZvciAoY29uc3QgeyBsb25naXR1ZGUsIGxhdGl0dWRlLCBtZW1iZXIgfSBvZiAoQXJyYXkuaXNBcnJheSh0b0FkZCkgPyB0b0FkZCA6IFt0b0FkZF0pKSB7XG4gICAgICAgIGFyZ3MucHVzaChsb25naXR1ZGUudG9TdHJpbmcoKSwgbGF0aXR1ZGUudG9TdHJpbmcoKSwgbWVtYmVyKTtcbiAgICB9XG4gICAgcmV0dXJuIGFyZ3M7XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybVJlcGx5ID0gZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLklTX1JFQURfT05MWSA9IGV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gdm9pZCAwO1xuZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSAxO1xuZXhwb3J0cy5JU19SRUFEX09OTFkgPSB0cnVlO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGtleSwgbWVtYmVyMSwgbWVtYmVyMiwgdW5pdCkge1xuICAgIGNvbnN0IGFyZ3MgPSBbJ0dFT0RJU1QnLCBrZXksIG1lbWJlcjEsIG1lbWJlcjJdO1xuICAgIGlmICh1bml0KSB7XG4gICAgICAgIGFyZ3MucHVzaCh1bml0KTtcbiAgICB9XG4gICAgcmV0dXJuIGFyZ3M7XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbmZ1bmN0aW9uIHRyYW5zZm9ybVJlcGx5KHJlcGx5KSB7XG4gICAgcmV0dXJuIHJlcGx5ID09PSBudWxsID8gbnVsbCA6IE51bWJlcihyZXBseSk7XG59XG5leHBvcnRzLnRyYW5zZm9ybVJlcGx5ID0gdHJhbnNmb3JtUmVwbHk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLklTX1JFQURfT05MWSA9IGV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gdm9pZCAwO1xuY29uc3QgZ2VuZXJpY190cmFuc2Zvcm1lcnNfMSA9IHJlcXVpcmUoXCIuL2dlbmVyaWMtdHJhbnNmb3JtZXJzXCIpO1xuZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSAxO1xuZXhwb3J0cy5JU19SRUFEX09OTFkgPSB0cnVlO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGtleSwgbWVtYmVyKSB7XG4gICAgcmV0dXJuICgwLCBnZW5lcmljX3RyYW5zZm9ybWVyc18xLnB1c2hWZXJkaWN0QXJndW1lbnRzKShbJ0dFT0hBU0gnLCBrZXldLCBtZW1iZXIpO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1SZXBseSA9IGV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gZXhwb3J0cy5JU19SRUFEX09OTFkgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IHZvaWQgMDtcbmNvbnN0IGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEgPSByZXF1aXJlKFwiLi9nZW5lcmljLXRyYW5zZm9ybWVyc1wiKTtcbmV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gMTtcbmV4cG9ydHMuSVNfUkVBRF9PTkxZID0gdHJ1ZTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhrZXksIG1lbWJlcikge1xuICAgIHJldHVybiAoMCwgZ2VuZXJpY190cmFuc2Zvcm1lcnNfMS5wdXNoVmVyZGljdEFyZ3VtZW50cykoWydHRU9QT1MnLCBrZXldLCBtZW1iZXIpO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG5mdW5jdGlvbiB0cmFuc2Zvcm1SZXBseShyZXBseSkge1xuICAgIHJldHVybiByZXBseS5tYXAoY29vcmRpbmF0ZXMgPT4gY29vcmRpbmF0ZXMgPT09IG51bGwgPyBudWxsIDoge1xuICAgICAgICBsb25naXR1ZGU6IGNvb3JkaW5hdGVzWzBdLFxuICAgICAgICBsYXRpdHVkZTogY29vcmRpbmF0ZXNbMV1cbiAgICB9KTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtUmVwbHkgPSB0cmFuc2Zvcm1SZXBseTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IGV4cG9ydHMuSVNfUkVBRF9PTkxZID0gZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSB2b2lkIDA7XG5jb25zdCBnZW5lcmljX3RyYW5zZm9ybWVyc18xID0gcmVxdWlyZShcIi4vZ2VuZXJpYy10cmFuc2Zvcm1lcnNcIik7XG5leHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IDE7XG5leHBvcnRzLklTX1JFQURfT05MWSA9IHRydWU7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMoa2V5LCBjb29yZGluYXRlcywgcmFkaXVzLCB1bml0LCBvcHRpb25zKSB7XG4gICAgcmV0dXJuICgwLCBnZW5lcmljX3RyYW5zZm9ybWVyc18xLnB1c2hHZW9SYWRpdXNBcmd1bWVudHMpKFsnR0VPUkFESVVTX1JPJ10sIGtleSwgY29vcmRpbmF0ZXMsIHJhZGl1cywgdW5pdCwgb3B0aW9ucyk7XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybVJlcGx5ID0gZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLklTX1JFQURfT05MWSA9IGV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gdm9pZCAwO1xuY29uc3QgR0VPUkFESVVTX1JPXzEgPSByZXF1aXJlKFwiLi9HRU9SQURJVVNfUk9cIik7XG52YXIgR0VPUkFESVVTX1JPXzIgPSByZXF1aXJlKFwiLi9HRU9SQURJVVNfUk9cIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJGSVJTVF9LRVlfSU5ERVhcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIEdFT1JBRElVU19ST18yLkZJUlNUX0tFWV9JTkRFWDsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIklTX1JFQURfT05MWVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gR0VPUkFESVVTX1JPXzIuSVNfUkVBRF9PTkxZOyB9IH0pO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGtleSwgY29vcmRpbmF0ZXMsIHJhZGl1cywgdW5pdCwgcmVwbHlXaXRoLCBvcHRpb25zKSB7XG4gICAgY29uc3QgYXJncyA9ICgwLCBHRU9SQURJVVNfUk9fMS50cmFuc2Zvcm1Bcmd1bWVudHMpKGtleSwgY29vcmRpbmF0ZXMsIHJhZGl1cywgdW5pdCwgb3B0aW9ucyk7XG4gICAgYXJncy5wdXNoKC4uLnJlcGx5V2l0aCk7XG4gICAgYXJncy5wcmVzZXJ2ZSA9IHJlcGx5V2l0aDtcbiAgICByZXR1cm4gYXJncztcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xudmFyIGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEgPSByZXF1aXJlKFwiLi9nZW5lcmljLXRyYW5zZm9ybWVyc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInRyYW5zZm9ybVJlcGx5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBnZW5lcmljX3RyYW5zZm9ybWVyc18xLnRyYW5zZm9ybUdlb01lbWJlcnNXaXRoUmVwbHk7IH0gfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLklTX1JFQURfT05MWSA9IGV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gdm9pZCAwO1xuY29uc3QgZ2VuZXJpY190cmFuc2Zvcm1lcnNfMSA9IHJlcXVpcmUoXCIuL2dlbmVyaWMtdHJhbnNmb3JtZXJzXCIpO1xuZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSAxO1xuZXhwb3J0cy5JU19SRUFEX09OTFkgPSB0cnVlO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGtleSwgY29vcmRpbmF0ZXMsIHJhZGl1cywgdW5pdCwgb3B0aW9ucykge1xuICAgIHJldHVybiAoMCwgZ2VuZXJpY190cmFuc2Zvcm1lcnNfMS5wdXNoR2VvUmFkaXVzQXJndW1lbnRzKShbJ0dFT1JBRElVUyddLCBrZXksIGNvb3JkaW5hdGVzLCByYWRpdXMsIHVuaXQsIG9wdGlvbnMpO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1SZXBseSA9IGV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gZXhwb3J0cy5JU19SRUFEX09OTFkgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IHZvaWQgMDtcbmNvbnN0IEdFT1JBRElVU18xID0gcmVxdWlyZShcIi4vR0VPUkFESVVTXCIpO1xudmFyIEdFT1JBRElVU18yID0gcmVxdWlyZShcIi4vR0VPUkFESVVTXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiRklSU1RfS0VZX0lOREVYXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBHRU9SQURJVVNfMi5GSVJTVF9LRVlfSU5ERVg7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJJU19SRUFEX09OTFlcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIEdFT1JBRElVU18yLklTX1JFQURfT05MWTsgfSB9KTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhrZXksIGNvb3JkaW5hdGVzLCByYWRpdXMsIHVuaXQsIHJlcGx5V2l0aCwgb3B0aW9ucykge1xuICAgIGNvbnN0IGFyZ3MgPSAoMCwgR0VPUkFESVVTXzEudHJhbnNmb3JtQXJndW1lbnRzKShrZXksIGNvb3JkaW5hdGVzLCByYWRpdXMsIHVuaXQsIG9wdGlvbnMpO1xuICAgIGFyZ3MucHVzaCguLi5yZXBseVdpdGgpO1xuICAgIGFyZ3MucHJlc2VydmUgPSByZXBseVdpdGg7XG4gICAgcmV0dXJuIGFyZ3M7XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbnZhciBnZW5lcmljX3RyYW5zZm9ybWVyc18xID0gcmVxdWlyZShcIi4vZ2VuZXJpYy10cmFuc2Zvcm1lcnNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ0cmFuc2Zvcm1SZXBseVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZ2VuZXJpY190cmFuc2Zvcm1lcnNfMS50cmFuc2Zvcm1HZW9NZW1iZXJzV2l0aFJlcGx5OyB9IH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gZXhwb3J0cy5JU19SRUFEX09OTFkgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IHZvaWQgMDtcbmNvbnN0IGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEgPSByZXF1aXJlKFwiLi9nZW5lcmljLXRyYW5zZm9ybWVyc1wiKTtcbmV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gMTtcbmV4cG9ydHMuSVNfUkVBRF9PTkxZID0gdHJ1ZTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhrZXksIG1lbWJlciwgcmFkaXVzLCB1bml0LCBvcHRpb25zKSB7XG4gICAgcmV0dXJuICgwLCBnZW5lcmljX3RyYW5zZm9ybWVyc18xLnB1c2hHZW9SYWRpdXNBcmd1bWVudHMpKFsnR0VPUkFESVVTQllNRU1CRVJfUk8nXSwga2V5LCBtZW1iZXIsIHJhZGl1cywgdW5pdCwgb3B0aW9ucyk7XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybVJlcGx5ID0gZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLklTX1JFQURfT05MWSA9IGV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gdm9pZCAwO1xuY29uc3QgR0VPUkFESVVTQllNRU1CRVJfUk9fMSA9IHJlcXVpcmUoXCIuL0dFT1JBRElVU0JZTUVNQkVSX1JPXCIpO1xudmFyIEdFT1JBRElVU0JZTUVNQkVSX1JPXzIgPSByZXF1aXJlKFwiLi9HRU9SQURJVVNCWU1FTUJFUl9ST1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkZJUlNUX0tFWV9JTkRFWFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gR0VPUkFESVVTQllNRU1CRVJfUk9fMi5GSVJTVF9LRVlfSU5ERVg7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJJU19SRUFEX09OTFlcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIEdFT1JBRElVU0JZTUVNQkVSX1JPXzIuSVNfUkVBRF9PTkxZOyB9IH0pO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGtleSwgbWVtYmVyLCByYWRpdXMsIHVuaXQsIHJlcGx5V2l0aCwgb3B0aW9ucykge1xuICAgIGNvbnN0IGFyZ3MgPSAoMCwgR0VPUkFESVVTQllNRU1CRVJfUk9fMS50cmFuc2Zvcm1Bcmd1bWVudHMpKGtleSwgbWVtYmVyLCByYWRpdXMsIHVuaXQsIG9wdGlvbnMpO1xuICAgIGFyZ3MucHVzaCguLi5yZXBseVdpdGgpO1xuICAgIGFyZ3MucHJlc2VydmUgPSByZXBseVdpdGg7XG4gICAgcmV0dXJuIGFyZ3M7XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbnZhciBnZW5lcmljX3RyYW5zZm9ybWVyc18xID0gcmVxdWlyZShcIi4vZ2VuZXJpYy10cmFuc2Zvcm1lcnNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ0cmFuc2Zvcm1SZXBseVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZ2VuZXJpY190cmFuc2Zvcm1lcnNfMS50cmFuc2Zvcm1HZW9NZW1iZXJzV2l0aFJlcGx5OyB9IH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gZXhwb3J0cy5JU19SRUFEX09OTFkgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IHZvaWQgMDtcbmNvbnN0IGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEgPSByZXF1aXJlKFwiLi9nZW5lcmljLXRyYW5zZm9ybWVyc1wiKTtcbmV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gMTtcbmV4cG9ydHMuSVNfUkVBRF9PTkxZID0gdHJ1ZTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhrZXksIG1lbWJlciwgcmFkaXVzLCB1bml0LCBvcHRpb25zKSB7XG4gICAgcmV0dXJuICgwLCBnZW5lcmljX3RyYW5zZm9ybWVyc18xLnB1c2hHZW9SYWRpdXNBcmd1bWVudHMpKFsnR0VPUkFESVVTQllNRU1CRVInXSwga2V5LCBtZW1iZXIsIHJhZGl1cywgdW5pdCwgb3B0aW9ucyk7XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybVJlcGx5ID0gZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLklTX1JFQURfT05MWSA9IGV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gdm9pZCAwO1xuY29uc3QgR0VPUkFESVVTQllNRU1CRVJfMSA9IHJlcXVpcmUoXCIuL0dFT1JBRElVU0JZTUVNQkVSXCIpO1xudmFyIEdFT1JBRElVU0JZTUVNQkVSXzIgPSByZXF1aXJlKFwiLi9HRU9SQURJVVNCWU1FTUJFUlwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkZJUlNUX0tFWV9JTkRFWFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gR0VPUkFESVVTQllNRU1CRVJfMi5GSVJTVF9LRVlfSU5ERVg7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJJU19SRUFEX09OTFlcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIEdFT1JBRElVU0JZTUVNQkVSXzIuSVNfUkVBRF9PTkxZOyB9IH0pO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGtleSwgbWVtYmVyLCByYWRpdXMsIHVuaXQsIHJlcGx5V2l0aCwgb3B0aW9ucykge1xuICAgIGNvbnN0IGFyZ3MgPSAoMCwgR0VPUkFESVVTQllNRU1CRVJfMS50cmFuc2Zvcm1Bcmd1bWVudHMpKGtleSwgbWVtYmVyLCByYWRpdXMsIHVuaXQsIG9wdGlvbnMpO1xuICAgIGFyZ3MucHVzaCguLi5yZXBseVdpdGgpO1xuICAgIGFyZ3MucHJlc2VydmUgPSByZXBseVdpdGg7XG4gICAgcmV0dXJuIGFyZ3M7XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbnZhciBnZW5lcmljX3RyYW5zZm9ybWVyc18xID0gcmVxdWlyZShcIi4vZ2VuZXJpYy10cmFuc2Zvcm1lcnNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ0cmFuc2Zvcm1SZXBseVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZ2VuZXJpY190cmFuc2Zvcm1lcnNfMS50cmFuc2Zvcm1HZW9NZW1iZXJzV2l0aFJlcGx5OyB9IH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gZXhwb3J0cy5JU19SRUFEX09OTFkgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IHZvaWQgMDtcbmNvbnN0IGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEgPSByZXF1aXJlKFwiLi9nZW5lcmljLXRyYW5zZm9ybWVyc1wiKTtcbnZhciBHRU9SQURJVVNCWU1FTUJFUl8xID0gcmVxdWlyZShcIi4vR0VPUkFESVVTQllNRU1CRVJcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJGSVJTVF9LRVlfSU5ERVhcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIEdFT1JBRElVU0JZTUVNQkVSXzEuRklSU1RfS0VZX0lOREVYOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiSVNfUkVBRF9PTkxZXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBHRU9SQURJVVNCWU1FTUJFUl8xLklTX1JFQURfT05MWTsgfSB9KTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhrZXksIG1lbWJlciwgcmFkaXVzLCB1bml0LCBkZXN0aW5hdGlvbiwgb3B0aW9ucykge1xuICAgIHJldHVybiAoMCwgZ2VuZXJpY190cmFuc2Zvcm1lcnNfMS5wdXNoR2VvUmFkaXVzU3RvcmVBcmd1bWVudHMpKFsnR0VPUkFESVVTQllNRU1CRVInXSwga2V5LCBtZW1iZXIsIHJhZGl1cywgdW5pdCwgZGVzdGluYXRpb24sIG9wdGlvbnMpO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLklTX1JFQURfT05MWSA9IGV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gdm9pZCAwO1xuY29uc3QgZ2VuZXJpY190cmFuc2Zvcm1lcnNfMSA9IHJlcXVpcmUoXCIuL2dlbmVyaWMtdHJhbnNmb3JtZXJzXCIpO1xudmFyIEdFT1JBRElVU18xID0gcmVxdWlyZShcIi4vR0VPUkFESVVTXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiRklSU1RfS0VZX0lOREVYXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBHRU9SQURJVVNfMS5GSVJTVF9LRVlfSU5ERVg7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJJU19SRUFEX09OTFlcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIEdFT1JBRElVU18xLklTX1JFQURfT05MWTsgfSB9KTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhrZXksIGNvb3JkaW5hdGVzLCByYWRpdXMsIHVuaXQsIGRlc3RpbmF0aW9uLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuICgwLCBnZW5lcmljX3RyYW5zZm9ybWVyc18xLnB1c2hHZW9SYWRpdXNTdG9yZUFyZ3VtZW50cykoWydHRU9SQURJVVMnXSwga2V5LCBjb29yZGluYXRlcywgcmFkaXVzLCB1bml0LCBkZXN0aW5hdGlvbiwgb3B0aW9ucyk7XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IGV4cG9ydHMuSVNfUkVBRF9PTkxZID0gZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSB2b2lkIDA7XG5jb25zdCBnZW5lcmljX3RyYW5zZm9ybWVyc18xID0gcmVxdWlyZShcIi4vZ2VuZXJpYy10cmFuc2Zvcm1lcnNcIik7XG5leHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IDE7XG5leHBvcnRzLklTX1JFQURfT05MWSA9IHRydWU7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMoa2V5LCBmcm9tLCBieSwgb3B0aW9ucykge1xuICAgIHJldHVybiAoMCwgZ2VuZXJpY190cmFuc2Zvcm1lcnNfMS5wdXNoR2VvU2VhcmNoQXJndW1lbnRzKShbJ0dFT1NFQVJDSCddLCBrZXksIGZyb20sIGJ5LCBvcHRpb25zKTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtUmVwbHkgPSBleHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IGV4cG9ydHMuSVNfUkVBRF9PTkxZID0gZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSB2b2lkIDA7XG5jb25zdCBHRU9TRUFSQ0hfMSA9IHJlcXVpcmUoXCIuL0dFT1NFQVJDSFwiKTtcbnZhciBHRU9TRUFSQ0hfMiA9IHJlcXVpcmUoXCIuL0dFT1NFQVJDSFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkZJUlNUX0tFWV9JTkRFWFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gR0VPU0VBUkNIXzIuRklSU1RfS0VZX0lOREVYOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiSVNfUkVBRF9PTkxZXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBHRU9TRUFSQ0hfMi5JU19SRUFEX09OTFk7IH0gfSk7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMoa2V5LCBmcm9tLCBieSwgcmVwbHlXaXRoLCBvcHRpb25zKSB7XG4gICAgY29uc3QgYXJncyA9ICgwLCBHRU9TRUFSQ0hfMS50cmFuc2Zvcm1Bcmd1bWVudHMpKGtleSwgZnJvbSwgYnksIG9wdGlvbnMpO1xuICAgIGFyZ3MucHVzaCguLi5yZXBseVdpdGgpO1xuICAgIGFyZ3MucHJlc2VydmUgPSByZXBseVdpdGg7XG4gICAgcmV0dXJuIGFyZ3M7XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbnZhciBnZW5lcmljX3RyYW5zZm9ybWVyc18xID0gcmVxdWlyZShcIi4vZ2VuZXJpYy10cmFuc2Zvcm1lcnNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ0cmFuc2Zvcm1SZXBseVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZ2VuZXJpY190cmFuc2Zvcm1lcnNfMS50cmFuc2Zvcm1HZW9NZW1iZXJzV2l0aFJlcGx5OyB9IH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtUmVwbHkgPSBleHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IGV4cG9ydHMuSVNfUkVBRF9PTkxZID0gZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSB2b2lkIDA7XG5jb25zdCBnZW5lcmljX3RyYW5zZm9ybWVyc18xID0gcmVxdWlyZShcIi4vZ2VuZXJpYy10cmFuc2Zvcm1lcnNcIik7XG52YXIgR0VPU0VBUkNIXzEgPSByZXF1aXJlKFwiLi9HRU9TRUFSQ0hcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJGSVJTVF9LRVlfSU5ERVhcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIEdFT1NFQVJDSF8xLkZJUlNUX0tFWV9JTkRFWDsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIklTX1JFQURfT05MWVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gR0VPU0VBUkNIXzEuSVNfUkVBRF9PTkxZOyB9IH0pO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGRlc3RpbmF0aW9uLCBzb3VyY2UsIGZyb20sIGJ5LCBvcHRpb25zKSB7XG4gICAgY29uc3QgYXJncyA9ICgwLCBnZW5lcmljX3RyYW5zZm9ybWVyc18xLnB1c2hHZW9TZWFyY2hBcmd1bWVudHMpKFsnR0VPU0VBUkNIU1RPUkUnLCBkZXN0aW5hdGlvbl0sIHNvdXJjZSwgZnJvbSwgYnksIG9wdGlvbnMpO1xuICAgIGlmIChvcHRpb25zPy5TVE9SRURJU1QpIHtcbiAgICAgICAgYXJncy5wdXNoKCdTVE9SRURJU1QnKTtcbiAgICB9XG4gICAgcmV0dXJuIGFyZ3M7XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbmZ1bmN0aW9uIHRyYW5zZm9ybVJlcGx5KHJlcGx5KSB7XG4gICAgaWYgKHR5cGVvZiByZXBseSAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgaHR0cHM6Ly9naXRodWIuY29tL3JlZGlzL3JlZGlzL2lzc3Vlcy85MjYxYCk7XG4gICAgfVxuICAgIHJldHVybiByZXBseTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtUmVwbHkgPSB0cmFuc2Zvcm1SZXBseTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IGV4cG9ydHMuSVNfUkVBRF9PTkxZID0gZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSB2b2lkIDA7XG5leHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IDE7XG5leHBvcnRzLklTX1JFQURfT05MWSA9IHRydWU7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMoa2V5KSB7XG4gICAgcmV0dXJuIFsnR0VUJywga2V5XTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gZXhwb3J0cy5JU19SRUFEX09OTFkgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IHZvaWQgMDtcbmV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gMTtcbmV4cG9ydHMuSVNfUkVBRF9PTkxZID0gdHJ1ZTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhrZXksIG9mZnNldCkge1xuICAgIHJldHVybiBbJ0dFVEJJVCcsIGtleSwgb2Zmc2V0LnRvU3RyaW5nKCldO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IHZvaWQgMDtcbmV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gMTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhrZXkpIHtcbiAgICByZXR1cm4gWydHRVRERUwnLCBrZXldO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IHZvaWQgMDtcbmNvbnN0IGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEgPSByZXF1aXJlKFwiLi9nZW5lcmljLXRyYW5zZm9ybWVyc1wiKTtcbmV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gMTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhrZXksIG1vZGUpIHtcbiAgICBjb25zdCBhcmdzID0gWydHRVRFWCcsIGtleV07XG4gICAgaWYgKCdFWCcgaW4gbW9kZSkge1xuICAgICAgICBhcmdzLnB1c2goJ0VYJywgbW9kZS5FWC50b1N0cmluZygpKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoJ1BYJyBpbiBtb2RlKSB7XG4gICAgICAgIGFyZ3MucHVzaCgnUFgnLCBtb2RlLlBYLnRvU3RyaW5nKCkpO1xuICAgIH1cbiAgICBlbHNlIGlmICgnRVhBVCcgaW4gbW9kZSkge1xuICAgICAgICBhcmdzLnB1c2goJ0VYQVQnLCAoMCwgZ2VuZXJpY190cmFuc2Zvcm1lcnNfMS50cmFuc2Zvcm1FWEFUKShtb2RlLkVYQVQpKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoJ1BYQVQnIGluIG1vZGUpIHtcbiAgICAgICAgYXJncy5wdXNoKCdQWEFUJywgKDAsIGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEudHJhbnNmb3JtUFhBVCkobW9kZS5QWEFUKSk7XG4gICAgfVxuICAgIGVsc2UgeyAvLyBQRVJTSVNUXG4gICAgICAgIGFyZ3MucHVzaCgnUEVSU0lTVCcpO1xuICAgIH1cbiAgICByZXR1cm4gYXJncztcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gZXhwb3J0cy5JU19SRUFEX09OTFkgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IHZvaWQgMDtcbmV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gMTtcbmV4cG9ydHMuSVNfUkVBRF9PTkxZID0gdHJ1ZTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhrZXksIHN0YXJ0LCBlbmQpIHtcbiAgICByZXR1cm4gWydHRVRSQU5HRScsIGtleSwgc3RhcnQudG9TdHJpbmcoKSwgZW5kLnRvU3RyaW5nKCldO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IHZvaWQgMDtcbmV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gMTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhrZXksIHZhbHVlKSB7XG4gICAgcmV0dXJuIFsnR0VUU0VUJywga2V5LCB2YWx1ZV07XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IGV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gdm9pZCAwO1xuY29uc3QgZ2VuZXJpY190cmFuc2Zvcm1lcnNfMSA9IHJlcXVpcmUoXCIuL2dlbmVyaWMtdHJhbnNmb3JtZXJzXCIpO1xuZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSAxO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGtleSwgZmllbGQpIHtcbiAgICByZXR1cm4gKDAsIGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEucHVzaFZlcmRpY3RBcmd1bWVudHMpKFsnSERFTCcsIGtleV0sIGZpZWxkKTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtUmVwbHkgPSBleHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IGV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gdm9pZCAwO1xuZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSAxO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGtleSwgZmllbGQpIHtcbiAgICByZXR1cm4gWydIRVhJU1RTJywga2V5LCBmaWVsZF07XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbnZhciBnZW5lcmljX3RyYW5zZm9ybWVyc18xID0gcmVxdWlyZShcIi4vZ2VuZXJpYy10cmFuc2Zvcm1lcnNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ0cmFuc2Zvcm1SZXBseVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZ2VuZXJpY190cmFuc2Zvcm1lcnNfMS50cmFuc2Zvcm1Cb29sZWFuUmVwbHk7IH0gfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IGV4cG9ydHMuSEFTSF9FWFBJUkFUSU9OID0gdm9pZCAwO1xuY29uc3QgZ2VuZXJpY190cmFuc2Zvcm1lcnNfMSA9IHJlcXVpcmUoXCIuL2dlbmVyaWMtdHJhbnNmb3JtZXJzXCIpO1xuLyoqXG4gKiBAcmVhZG9ubHlcbiAqIEBlbnVtIHtudW1iZXJ9XG4gKi9cbmV4cG9ydHMuSEFTSF9FWFBJUkFUSU9OID0ge1xuICAgIC8qKiBAcHJvcGVydHkge251bWJlcn0gKi9cbiAgICAvKiogVGhlIGZpZWxkIGRvZXMgbm90IGV4aXN0ICovXG4gICAgRklFTERfTk9UX0VYSVNUUzogLTIsXG4gICAgLyoqIEBwcm9wZXJ0eSB7bnVtYmVyfSAqL1xuICAgIC8qKiBTcGVjaWZpZWQgTlggfCBYWCB8IEdUIHwgTFQgY29uZGl0aW9uIG5vdCBtZXQgKi9cbiAgICBDT05ESVRJT05fTk9UX01FVDogMCxcbiAgICAvKiogQHByb3BlcnR5IHtudW1iZXJ9ICovXG4gICAgLyoqIEV4cGlyYXRpb24gdGltZSB3YXMgc2V0IG9yIHVwZGF0ZWQgKi9cbiAgICBVUERBVEVEOiAxLFxuICAgIC8qKiBAcHJvcGVydHkge251bWJlcn0gKi9cbiAgICAvKiogRmllbGQgZGVsZXRlZCBiZWNhdXNlIHRoZSBzcGVjaWZpZWQgZXhwaXJhdGlvbiB0aW1lIGlzIGluIHRoZSBwYXN0ICovXG4gICAgREVMRVRFRDogMlxufTtcbmV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gMTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhrZXksIGZpZWxkcywgc2Vjb25kcywgbW9kZSkge1xuICAgIGNvbnN0IGFyZ3MgPSBbJ0hFWFBJUkUnLCBrZXksIHNlY29uZHMudG9TdHJpbmcoKV07XG4gICAgaWYgKG1vZGUpIHtcbiAgICAgICAgYXJncy5wdXNoKG1vZGUpO1xuICAgIH1cbiAgICBhcmdzLnB1c2goJ0ZJRUxEUycpO1xuICAgIHJldHVybiAoMCwgZ2VuZXJpY190cmFuc2Zvcm1lcnNfMS5wdXNoVmVyZGljdEFyZ3VtZW50KShhcmdzLCBmaWVsZHMpO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IHZvaWQgMDtcbmNvbnN0IGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEgPSByZXF1aXJlKFwiLi9nZW5lcmljLXRyYW5zZm9ybWVyc1wiKTtcbmV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gMTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhrZXksIGZpZWxkcywgdGltZXN0YW1wLCBtb2RlKSB7XG4gICAgY29uc3QgYXJncyA9IFtcbiAgICAgICAgJ0hFWFBJUkVBVCcsXG4gICAgICAgIGtleSxcbiAgICAgICAgKDAsIGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEudHJhbnNmb3JtRVhBVCkodGltZXN0YW1wKVxuICAgIF07XG4gICAgaWYgKG1vZGUpIHtcbiAgICAgICAgYXJncy5wdXNoKG1vZGUpO1xuICAgIH1cbiAgICBhcmdzLnB1c2goJ0ZJRUxEUycpO1xuICAgIHJldHVybiAoMCwgZ2VuZXJpY190cmFuc2Zvcm1lcnNfMS5wdXNoVmVyZGljdEFyZ3VtZW50KShhcmdzLCBmaWVsZHMpO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLklTX1JFQURfT05MWSA9IGV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gZXhwb3J0cy5IQVNIX0VYUElSQVRJT05fVElNRSA9IHZvaWQgMDtcbmNvbnN0IGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEgPSByZXF1aXJlKFwiLi9nZW5lcmljLXRyYW5zZm9ybWVyc1wiKTtcbmV4cG9ydHMuSEFTSF9FWFBJUkFUSU9OX1RJTUUgPSB7XG4gICAgLyoqIEBwcm9wZXJ0eSB7bnVtYmVyfSAqL1xuICAgIC8qKiBUaGUgZmllbGQgZG9lcyBub3QgZXhpc3QgKi9cbiAgICBGSUVMRF9OT1RfRVhJU1RTOiAtMixcbiAgICAvKiogQHByb3BlcnR5IHtudW1iZXJ9ICovXG4gICAgLyoqIFRoZSBmaWVsZCBleGlzdHMgYnV0IGhhcyBubyBhc3NvY2lhdGVkIGV4cGlyZSAqL1xuICAgIE5PX0VYUElSQVRJT046IC0xLFxufTtcbmV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gMTtcbmV4cG9ydHMuSVNfUkVBRF9PTkxZID0gdHJ1ZTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhrZXksIGZpZWxkcykge1xuICAgIHJldHVybiAoMCwgZ2VuZXJpY190cmFuc2Zvcm1lcnNfMS5wdXNoVmVyZGljdEFyZ3VtZW50KShbJ0hFWFBJUkVUSU1FJywga2V5LCAnRklFTERTJ10sIGZpZWxkcyk7XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IGV4cG9ydHMuSVNfUkVBRF9PTkxZID0gZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSB2b2lkIDA7XG5leHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IDE7XG5leHBvcnRzLklTX1JFQURfT05MWSA9IHRydWU7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMoa2V5LCBmaWVsZCkge1xuICAgIHJldHVybiBbJ0hHRVQnLCBrZXksIGZpZWxkXTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtUmVwbHkgPSBleHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IGV4cG9ydHMuVFJBTlNGT1JNX0xFR0FDWV9SRVBMWSA9IGV4cG9ydHMuSVNfUkVBRF9PTkxZID0gZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSB2b2lkIDA7XG5leHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IDE7XG5leHBvcnRzLklTX1JFQURfT05MWSA9IHRydWU7XG5leHBvcnRzLlRSQU5TRk9STV9MRUdBQ1lfUkVQTFkgPSB0cnVlO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGtleSkge1xuICAgIHJldHVybiBbJ0hHRVRBTEwnLCBrZXldO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG52YXIgZ2VuZXJpY190cmFuc2Zvcm1lcnNfMSA9IHJlcXVpcmUoXCIuL2dlbmVyaWMtdHJhbnNmb3JtZXJzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidHJhbnNmb3JtUmVwbHlcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEudHJhbnNmb3JtVHVwbGVzUmVwbHk7IH0gfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IHZvaWQgMDtcbmV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gMTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhrZXksIGZpZWxkLCBpbmNyZW1lbnQpIHtcbiAgICByZXR1cm4gWydISU5DUkJZJywga2V5LCBmaWVsZCwgaW5jcmVtZW50LnRvU3RyaW5nKCldO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IHZvaWQgMDtcbmV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gMTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhrZXksIGZpZWxkLCBpbmNyZW1lbnQpIHtcbiAgICByZXR1cm4gWydISU5DUkJZRkxPQVQnLCBrZXksIGZpZWxkLCBpbmNyZW1lbnQudG9TdHJpbmcoKV07XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IGV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gdm9pZCAwO1xuZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSAxO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGtleSkge1xuICAgIHJldHVybiBbJ0hLRVlTJywga2V5XTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSB2b2lkIDA7XG5leHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IDE7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMoa2V5KSB7XG4gICAgcmV0dXJuIFsnSExFTicsIGtleV07XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IGV4cG9ydHMuSVNfUkVBRF9PTkxZID0gZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSB2b2lkIDA7XG5jb25zdCBnZW5lcmljX3RyYW5zZm9ybWVyc18xID0gcmVxdWlyZShcIi4vZ2VuZXJpYy10cmFuc2Zvcm1lcnNcIik7XG5leHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IDE7XG5leHBvcnRzLklTX1JFQURfT05MWSA9IHRydWU7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMoa2V5LCBmaWVsZHMpIHtcbiAgICByZXR1cm4gKDAsIGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEucHVzaFZlcmRpY3RBcmd1bWVudHMpKFsnSE1HRVQnLCBrZXldLCBmaWVsZHMpO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IHZvaWQgMDtcbmNvbnN0IGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEgPSByZXF1aXJlKFwiLi9nZW5lcmljLXRyYW5zZm9ybWVyc1wiKTtcbmV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gMTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhrZXksIGZpZWxkcykge1xuICAgIHJldHVybiAoMCwgZ2VuZXJpY190cmFuc2Zvcm1lcnNfMS5wdXNoVmVyZGljdEFyZ3VtZW50KShbJ0hQRVJTSVNUJywga2V5LCAnRklFTERTJ10sIGZpZWxkcyk7XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IGV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gdm9pZCAwO1xuY29uc3QgZ2VuZXJpY190cmFuc2Zvcm1lcnNfMSA9IHJlcXVpcmUoXCIuL2dlbmVyaWMtdHJhbnNmb3JtZXJzXCIpO1xuZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSAxO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGtleSwgZmllbGRzLCBtcywgbW9kZSkge1xuICAgIGNvbnN0IGFyZ3MgPSBbJ0hQRVhQSVJFJywga2V5LCBtcy50b1N0cmluZygpXTtcbiAgICBpZiAobW9kZSkge1xuICAgICAgICBhcmdzLnB1c2gobW9kZSk7XG4gICAgfVxuICAgIGFyZ3MucHVzaCgnRklFTERTJyk7XG4gICAgcmV0dXJuICgwLCBnZW5lcmljX3RyYW5zZm9ybWVyc18xLnB1c2hWZXJkaWN0QXJndW1lbnQpKGFyZ3MsIGZpZWxkcyk7XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IGV4cG9ydHMuSVNfUkVBRF9PTkxZID0gZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSB2b2lkIDA7XG5jb25zdCBnZW5lcmljX3RyYW5zZm9ybWVyc18xID0gcmVxdWlyZShcIi4vZ2VuZXJpYy10cmFuc2Zvcm1lcnNcIik7XG5leHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IDE7XG5leHBvcnRzLklTX1JFQURfT05MWSA9IHRydWU7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMoa2V5LCBmaWVsZHMsIHRpbWVzdGFtcCwgbW9kZSkge1xuICAgIGNvbnN0IGFyZ3MgPSBbJ0hQRVhQSVJFQVQnLCBrZXksICgwLCBnZW5lcmljX3RyYW5zZm9ybWVyc18xLnRyYW5zZm9ybVBYQVQpKHRpbWVzdGFtcCldO1xuICAgIGlmIChtb2RlKSB7XG4gICAgICAgIGFyZ3MucHVzaChtb2RlKTtcbiAgICB9XG4gICAgYXJncy5wdXNoKCdGSUVMRFMnKTtcbiAgICByZXR1cm4gKDAsIGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEucHVzaFZlcmRpY3RBcmd1bWVudCkoYXJncywgZmllbGRzKTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gZXhwb3J0cy5JU19SRUFEX09OTFkgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IHZvaWQgMDtcbmNvbnN0IGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEgPSByZXF1aXJlKFwiLi9nZW5lcmljLXRyYW5zZm9ybWVyc1wiKTtcbmV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gMTtcbmV4cG9ydHMuSVNfUkVBRF9PTkxZID0gdHJ1ZTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhrZXksIGZpZWxkcykge1xuICAgIHJldHVybiAoMCwgZ2VuZXJpY190cmFuc2Zvcm1lcnNfMS5wdXNoVmVyZGljdEFyZ3VtZW50KShbJ0hQRVhQSVJFVElNRScsIGtleSwgJ0ZJRUxEUyddLCBmaWVsZHMpO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLklTX1JFQURfT05MWSA9IGV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gdm9pZCAwO1xuY29uc3QgZ2VuZXJpY190cmFuc2Zvcm1lcnNfMSA9IHJlcXVpcmUoXCIuL2dlbmVyaWMtdHJhbnNmb3JtZXJzXCIpO1xuZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSAxO1xuZXhwb3J0cy5JU19SRUFEX09OTFkgPSB0cnVlO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGtleSwgZmllbGRzKSB7XG4gICAgcmV0dXJuICgwLCBnZW5lcmljX3RyYW5zZm9ybWVyc18xLnB1c2hWZXJkaWN0QXJndW1lbnQpKFsnSFBUVEwnLCBrZXksICdGSUVMRFMnXSwgZmllbGRzKTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gZXhwb3J0cy5JU19SRUFEX09OTFkgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IHZvaWQgMDtcbmV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gMTtcbmV4cG9ydHMuSVNfUkVBRF9PTkxZID0gdHJ1ZTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhrZXkpIHtcbiAgICByZXR1cm4gWydIUkFOREZJRUxEJywga2V5XTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gZXhwb3J0cy5JU19SRUFEX09OTFkgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IHZvaWQgMDtcbmNvbnN0IEhSQU5ERklFTERfMSA9IHJlcXVpcmUoXCIuL0hSQU5ERklFTERcIik7XG52YXIgSFJBTkRGSUVMRF8yID0gcmVxdWlyZShcIi4vSFJBTkRGSUVMRFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkZJUlNUX0tFWV9JTkRFWFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gSFJBTkRGSUVMRF8yLkZJUlNUX0tFWV9JTkRFWDsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIklTX1JFQURfT05MWVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gSFJBTkRGSUVMRF8yLklTX1JFQURfT05MWTsgfSB9KTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhrZXksIGNvdW50KSB7XG4gICAgcmV0dXJuIFtcbiAgICAgICAgLi4uKDAsIEhSQU5ERklFTERfMS50cmFuc2Zvcm1Bcmd1bWVudHMpKGtleSksXG4gICAgICAgIGNvdW50LnRvU3RyaW5nKClcbiAgICBdO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1SZXBseSA9IGV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gZXhwb3J0cy5JU19SRUFEX09OTFkgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IHZvaWQgMDtcbmNvbnN0IEhSQU5ERklFTERfQ09VTlRfMSA9IHJlcXVpcmUoXCIuL0hSQU5ERklFTERfQ09VTlRcIik7XG52YXIgSFJBTkRGSUVMRF9DT1VOVF8yID0gcmVxdWlyZShcIi4vSFJBTkRGSUVMRF9DT1VOVFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkZJUlNUX0tFWV9JTkRFWFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gSFJBTkRGSUVMRF9DT1VOVF8yLkZJUlNUX0tFWV9JTkRFWDsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIklTX1JFQURfT05MWVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gSFJBTkRGSUVMRF9DT1VOVF8yLklTX1JFQURfT05MWTsgfSB9KTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhrZXksIGNvdW50KSB7XG4gICAgcmV0dXJuIFtcbiAgICAgICAgLi4uKDAsIEhSQU5ERklFTERfQ09VTlRfMS50cmFuc2Zvcm1Bcmd1bWVudHMpKGtleSwgY291bnQpLFxuICAgICAgICAnV0lUSFZBTFVFUydcbiAgICBdO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG52YXIgZ2VuZXJpY190cmFuc2Zvcm1lcnNfMSA9IHJlcXVpcmUoXCIuL2dlbmVyaWMtdHJhbnNmb3JtZXJzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidHJhbnNmb3JtUmVwbHlcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEudHJhbnNmb3JtVHVwbGVzUmVwbHk7IH0gfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1SZXBseSA9IGV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gZXhwb3J0cy5JU19SRUFEX09OTFkgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IHZvaWQgMDtcbmNvbnN0IGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEgPSByZXF1aXJlKFwiLi9nZW5lcmljLXRyYW5zZm9ybWVyc1wiKTtcbmV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gMTtcbmV4cG9ydHMuSVNfUkVBRF9PTkxZID0gdHJ1ZTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhrZXksIGN1cnNvciwgb3B0aW9ucykge1xuICAgIHJldHVybiAoMCwgZ2VuZXJpY190cmFuc2Zvcm1lcnNfMS5wdXNoU2NhbkFyZ3VtZW50cykoW1xuICAgICAgICAnSFNDQU4nLFxuICAgICAgICBrZXlcbiAgICBdLCBjdXJzb3IsIG9wdGlvbnMpO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG5mdW5jdGlvbiB0cmFuc2Zvcm1SZXBseShbY3Vyc29yLCByYXdUdXBsZXNdKSB7XG4gICAgY29uc3QgcGFyc2VkVHVwbGVzID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCByYXdUdXBsZXMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgICAgcGFyc2VkVHVwbGVzLnB1c2goe1xuICAgICAgICAgICAgZmllbGQ6IHJhd1R1cGxlc1tpXSxcbiAgICAgICAgICAgIHZhbHVlOiByYXdUdXBsZXNbaSArIDFdXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBjdXJzb3I6IE51bWJlcihjdXJzb3IpLFxuICAgICAgICB0dXBsZXM6IHBhcnNlZFR1cGxlc1xuICAgIH07XG59XG5leHBvcnRzLnRyYW5zZm9ybVJlcGx5ID0gdHJhbnNmb3JtUmVwbHk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1SZXBseSA9IGV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gZXhwb3J0cy5JU19SRUFEX09OTFkgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IHZvaWQgMDtcbmNvbnN0IEhTQ0FOXzEgPSByZXF1aXJlKFwiLi9IU0NBTlwiKTtcbnZhciBIU0NBTl8yID0gcmVxdWlyZShcIi4vSFNDQU5cIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJGSVJTVF9LRVlfSU5ERVhcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIEhTQ0FOXzIuRklSU1RfS0VZX0lOREVYOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiSVNfUkVBRF9PTkxZXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBIU0NBTl8yLklTX1JFQURfT05MWTsgfSB9KTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhrZXksIGN1cnNvciwgb3B0aW9ucykge1xuICAgIGNvbnN0IGFyZ3MgPSAoMCwgSFNDQU5fMS50cmFuc2Zvcm1Bcmd1bWVudHMpKGtleSwgY3Vyc29yLCBvcHRpb25zKTtcbiAgICBhcmdzLnB1c2goJ05PVkFMVUVTJyk7XG4gICAgcmV0dXJuIGFyZ3M7XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbmZ1bmN0aW9uIHRyYW5zZm9ybVJlcGx5KFtjdXJzb3IsIHJhd0RhdGFdKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgY3Vyc29yOiBOdW1iZXIoY3Vyc29yKSxcbiAgICAgICAga2V5czogcmF3RGF0YVxuICAgIH07XG59XG5leHBvcnRzLnRyYW5zZm9ybVJlcGx5ID0gdHJhbnNmb3JtUmVwbHk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IHZvaWQgMDtcbmV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gMTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyguLi5ba2V5LCB2YWx1ZSwgZmllbGRWYWx1ZV0pIHtcbiAgICBjb25zdCBhcmdzID0gWydIU0VUJywga2V5XTtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInIHx8IEJ1ZmZlci5pc0J1ZmZlcih2YWx1ZSkpIHtcbiAgICAgICAgYXJncy5wdXNoKGNvbnZlcnRWYWx1ZSh2YWx1ZSksIGNvbnZlcnRWYWx1ZShmaWVsZFZhbHVlKSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgTWFwKSB7XG4gICAgICAgIHB1c2hNYXAoYXJncywgdmFsdWUpO1xuICAgIH1cbiAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICBwdXNoVHVwbGVzKGFyZ3MsIHZhbHVlKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHB1c2hPYmplY3QoYXJncywgdmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gYXJncztcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuZnVuY3Rpb24gcHVzaE1hcChhcmdzLCBtYXApIHtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBtYXAuZW50cmllcygpKSB7XG4gICAgICAgIGFyZ3MucHVzaChjb252ZXJ0VmFsdWUoa2V5KSwgY29udmVydFZhbHVlKHZhbHVlKSk7XG4gICAgfVxufVxuZnVuY3Rpb24gcHVzaFR1cGxlcyhhcmdzLCB0dXBsZXMpIHtcbiAgICBmb3IgKGNvbnN0IHR1cGxlIG9mIHR1cGxlcykge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0dXBsZSkpIHtcbiAgICAgICAgICAgIHB1c2hUdXBsZXMoYXJncywgdHVwbGUpO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgYXJncy5wdXNoKGNvbnZlcnRWYWx1ZSh0dXBsZSkpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHB1c2hPYmplY3QoYXJncywgb2JqZWN0KSB7XG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMob2JqZWN0KSkge1xuICAgICAgICBhcmdzLnB1c2goY29udmVydFZhbHVlKGtleSksIGNvbnZlcnRWYWx1ZShvYmplY3Rba2V5XSkpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGNvbnZlcnRWYWx1ZSh2YWx1ZSkge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInID9cbiAgICAgICAgdmFsdWUudG9TdHJpbmcoKSA6XG4gICAgICAgIHZhbHVlO1xufVxuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtUmVwbHkgPSBleHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IGV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gdm9pZCAwO1xuZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSAxO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGtleSwgZmllbGQsIHZhbHVlKSB7XG4gICAgcmV0dXJuIFsnSFNFVE5YJywga2V5LCBmaWVsZCwgdmFsdWVdO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG52YXIgZ2VuZXJpY190cmFuc2Zvcm1lcnNfMSA9IHJlcXVpcmUoXCIuL2dlbmVyaWMtdHJhbnNmb3JtZXJzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidHJhbnNmb3JtUmVwbHlcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEudHJhbnNmb3JtQm9vbGVhblJlcGx5OyB9IH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSB2b2lkIDA7XG5leHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IDE7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMoa2V5LCBmaWVsZCkge1xuICAgIHJldHVybiBbJ0hTVFJMRU4nLCBrZXksIGZpZWxkXTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gZXhwb3J0cy5JU19SRUFEX09OTFkgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IHZvaWQgMDtcbmNvbnN0IGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEgPSByZXF1aXJlKFwiLi9nZW5lcmljLXRyYW5zZm9ybWVyc1wiKTtcbmV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gMTtcbmV4cG9ydHMuSVNfUkVBRF9PTkxZID0gdHJ1ZTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhrZXksIGZpZWxkcykge1xuICAgIHJldHVybiAoMCwgZ2VuZXJpY190cmFuc2Zvcm1lcnNfMS5wdXNoVmVyZGljdEFyZ3VtZW50KShbJ0hUVEwnLCBrZXksICdGSUVMRFMnXSwgZmllbGRzKTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSB2b2lkIDA7XG5leHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IDE7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMoa2V5KSB7XG4gICAgcmV0dXJuIFsnSFZBTFMnLCBrZXldO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IHZvaWQgMDtcbmV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gMTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhrZXkpIHtcbiAgICByZXR1cm4gWydJTkNSJywga2V5XTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSB2b2lkIDA7XG5leHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IDE7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMoa2V5LCBpbmNyZW1lbnQpIHtcbiAgICByZXR1cm4gWydJTkNSQlknLCBrZXksIGluY3JlbWVudC50b1N0cmluZygpXTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSB2b2lkIDA7XG5leHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IDE7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMoa2V5LCBpbmNyZW1lbnQpIHtcbiAgICByZXR1cm4gWydJTkNSQllGTE9BVCcsIGtleSwgaW5jcmVtZW50LnRvU3RyaW5nKCldO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLklTX1JFQURfT05MWSA9IGV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gdm9pZCAwO1xuZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSAxO1xuZXhwb3J0cy5JU19SRUFEX09OTFkgPSB0cnVlO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGtleTEsIGtleTIpIHtcbiAgICByZXR1cm4gW1xuICAgICAgICAnTENTJyxcbiAgICAgICAga2V5MSxcbiAgICAgICAga2V5MlxuICAgIF07XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybVJlcGx5ID0gZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLklTX1JFQURfT05MWSA9IGV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gdm9pZCAwO1xuY29uc3QgZ2VuZXJpY190cmFuc2Zvcm1lcnNfMSA9IHJlcXVpcmUoXCIuL2dlbmVyaWMtdHJhbnNmb3JtZXJzXCIpO1xuY29uc3QgTENTXzEgPSByZXF1aXJlKFwiLi9MQ1NcIik7XG52YXIgTENTXzIgPSByZXF1aXJlKFwiLi9MQ1NcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJGSVJTVF9LRVlfSU5ERVhcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIExDU18yLkZJUlNUX0tFWV9JTkRFWDsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIklTX1JFQURfT05MWVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gTENTXzIuSVNfUkVBRF9PTkxZOyB9IH0pO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGtleTEsIGtleTIpIHtcbiAgICBjb25zdCBhcmdzID0gKDAsIExDU18xLnRyYW5zZm9ybUFyZ3VtZW50cykoa2V5MSwga2V5Mik7XG4gICAgYXJncy5wdXNoKCdJRFgnLCAnV0lUSE1BVENITEVOJyk7XG4gICAgcmV0dXJuIGFyZ3M7XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbmZ1bmN0aW9uIHRyYW5zZm9ybVJlcGx5KHJlcGx5KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbWF0Y2hlczogcmVwbHlbMV0ubWFwKChba2V5MSwga2V5MiwgbGVuZ3RoXSkgPT4gKHtcbiAgICAgICAgICAgIGtleTE6ICgwLCBnZW5lcmljX3RyYW5zZm9ybWVyc18xLnRyYW5zZm9ybVJhbmdlUmVwbHkpKGtleTEpLFxuICAgICAgICAgICAga2V5MjogKDAsIGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEudHJhbnNmb3JtUmFuZ2VSZXBseSkoa2V5MiksXG4gICAgICAgICAgICBsZW5ndGhcbiAgICAgICAgfSkpLFxuICAgICAgICBsZW5ndGg6IHJlcGx5WzNdXG4gICAgfTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtUmVwbHkgPSB0cmFuc2Zvcm1SZXBseTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybVJlcGx5ID0gZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLklTX1JFQURfT05MWSA9IGV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gdm9pZCAwO1xuY29uc3QgZ2VuZXJpY190cmFuc2Zvcm1lcnNfMSA9IHJlcXVpcmUoXCIuL2dlbmVyaWMtdHJhbnNmb3JtZXJzXCIpO1xuY29uc3QgTENTXzEgPSByZXF1aXJlKFwiLi9MQ1NcIik7XG52YXIgTENTXzIgPSByZXF1aXJlKFwiLi9MQ1NcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJGSVJTVF9LRVlfSU5ERVhcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIExDU18yLkZJUlNUX0tFWV9JTkRFWDsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIklTX1JFQURfT05MWVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gTENTXzIuSVNfUkVBRF9PTkxZOyB9IH0pO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGtleTEsIGtleTIpIHtcbiAgICBjb25zdCBhcmdzID0gKDAsIExDU18xLnRyYW5zZm9ybUFyZ3VtZW50cykoa2V5MSwga2V5Mik7XG4gICAgYXJncy5wdXNoKCdJRFgnKTtcbiAgICByZXR1cm4gYXJncztcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuZnVuY3Rpb24gdHJhbnNmb3JtUmVwbHkocmVwbHkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBtYXRjaGVzOiByZXBseVsxXS5tYXAoKFtrZXkxLCBrZXkyXSkgPT4gKHtcbiAgICAgICAgICAgIGtleTE6ICgwLCBnZW5lcmljX3RyYW5zZm9ybWVyc18xLnRyYW5zZm9ybVJhbmdlUmVwbHkpKGtleTEpLFxuICAgICAgICAgICAga2V5MjogKDAsIGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEudHJhbnNmb3JtUmFuZ2VSZXBseSkoa2V5MilcbiAgICAgICAgfSkpLFxuICAgICAgICBsZW5ndGg6IHJlcGx5WzNdXG4gICAgfTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtUmVwbHkgPSB0cmFuc2Zvcm1SZXBseTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IGV4cG9ydHMuSVNfUkVBRF9PTkxZID0gZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSB2b2lkIDA7XG5jb25zdCBMQ1NfMSA9IHJlcXVpcmUoXCIuL0xDU1wiKTtcbnZhciBMQ1NfMiA9IHJlcXVpcmUoXCIuL0xDU1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkZJUlNUX0tFWV9JTkRFWFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gTENTXzIuRklSU1RfS0VZX0lOREVYOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiSVNfUkVBRF9PTkxZXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBMQ1NfMi5JU19SRUFEX09OTFk7IH0gfSk7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMoa2V5MSwga2V5Mikge1xuICAgIGNvbnN0IGFyZ3MgPSAoMCwgTENTXzEudHJhbnNmb3JtQXJndW1lbnRzKShrZXkxLCBrZXkyKTtcbiAgICBhcmdzLnB1c2goJ0xFTicpO1xuICAgIHJldHVybiBhcmdzO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLklTX1JFQURfT05MWSA9IGV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gdm9pZCAwO1xuZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSAxO1xuZXhwb3J0cy5JU19SRUFEX09OTFkgPSB0cnVlO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGtleSwgaW5kZXgpIHtcbiAgICByZXR1cm4gWydMSU5ERVgnLCBrZXksIGluZGV4LnRvU3RyaW5nKCldO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IHZvaWQgMDtcbmV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gMTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhrZXksIHBvc2l0aW9uLCBwaXZvdCwgZWxlbWVudCkge1xuICAgIHJldHVybiBbXG4gICAgICAgICdMSU5TRVJUJyxcbiAgICAgICAga2V5LFxuICAgICAgICBwb3NpdGlvbixcbiAgICAgICAgcGl2b3QsXG4gICAgICAgIGVsZW1lbnRcbiAgICBdO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLklTX1JFQURfT05MWSA9IGV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gdm9pZCAwO1xuZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSAxO1xuZXhwb3J0cy5JU19SRUFEX09OTFkgPSB0cnVlO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGtleSkge1xuICAgIHJldHVybiBbJ0xMRU4nLCBrZXldO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IHZvaWQgMDtcbmV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gMTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhzb3VyY2UsIGRlc3RpbmF0aW9uLCBzb3VyY2VTaWRlLCBkZXN0aW5hdGlvblNpZGUpIHtcbiAgICByZXR1cm4gW1xuICAgICAgICAnTE1PVkUnLFxuICAgICAgICBzb3VyY2UsXG4gICAgICAgIGRlc3RpbmF0aW9uLFxuICAgICAgICBzb3VyY2VTaWRlLFxuICAgICAgICBkZXN0aW5hdGlvblNpZGUsXG4gICAgXTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSB2b2lkIDA7XG5leHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IDE7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMoa2V5LCBjb3VudCkge1xuICAgIHJldHVybiBbJ0xQT1AnLCBrZXksIGNvdW50LnRvU3RyaW5nKCldO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IHZvaWQgMDtcbmV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gMTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhrZXkpIHtcbiAgICByZXR1cm4gWydMUE9QJywga2V5XTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gZXhwb3J0cy5JU19SRUFEX09OTFkgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IHZvaWQgMDtcbmV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gMTtcbmV4cG9ydHMuSVNfUkVBRF9PTkxZID0gdHJ1ZTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhrZXksIGVsZW1lbnQsIG9wdGlvbnMpIHtcbiAgICBjb25zdCBhcmdzID0gWydMUE9TJywga2V5LCBlbGVtZW50XTtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnM/LlJBTksgPT09ICdudW1iZXInKSB7XG4gICAgICAgIGFyZ3MucHVzaCgnUkFOSycsIG9wdGlvbnMuUkFOSy50b1N0cmluZygpKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zPy5NQVhMRU4gPT09ICdudW1iZXInKSB7XG4gICAgICAgIGFyZ3MucHVzaCgnTUFYTEVOJywgb3B0aW9ucy5NQVhMRU4udG9TdHJpbmcoKSk7XG4gICAgfVxuICAgIHJldHVybiBhcmdzO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLklTX1JFQURfT05MWSA9IGV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gdm9pZCAwO1xudmFyIExQT1NfMSA9IHJlcXVpcmUoXCIuL0xQT1NcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJGSVJTVF9LRVlfSU5ERVhcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIExQT1NfMS5GSVJTVF9LRVlfSU5ERVg7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJJU19SRUFEX09OTFlcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIExQT1NfMS5JU19SRUFEX09OTFk7IH0gfSk7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMoa2V5LCBlbGVtZW50LCBjb3VudCwgb3B0aW9ucykge1xuICAgIGNvbnN0IGFyZ3MgPSBbJ0xQT1MnLCBrZXksIGVsZW1lbnRdO1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucz8uUkFOSyA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgYXJncy5wdXNoKCdSQU5LJywgb3B0aW9ucy5SQU5LLnRvU3RyaW5nKCkpO1xuICAgIH1cbiAgICBhcmdzLnB1c2goJ0NPVU5UJywgY291bnQudG9TdHJpbmcoKSk7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zPy5NQVhMRU4gPT09ICdudW1iZXInKSB7XG4gICAgICAgIGFyZ3MucHVzaCgnTUFYTEVOJywgb3B0aW9ucy5NQVhMRU4udG9TdHJpbmcoKSk7XG4gICAgfVxuICAgIHJldHVybiBhcmdzO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IHZvaWQgMDtcbmNvbnN0IGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEgPSByZXF1aXJlKFwiLi9nZW5lcmljLXRyYW5zZm9ybWVyc1wiKTtcbmV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gMTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhrZXksIGVsZW1lbnRzKSB7XG4gICAgcmV0dXJuICgwLCBnZW5lcmljX3RyYW5zZm9ybWVyc18xLnB1c2hWZXJkaWN0QXJndW1lbnRzKShbJ0xQVVNIJywga2V5XSwgZWxlbWVudHMpO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IHZvaWQgMDtcbmNvbnN0IGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEgPSByZXF1aXJlKFwiLi9nZW5lcmljLXRyYW5zZm9ybWVyc1wiKTtcbmV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gMTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhrZXksIGVsZW1lbnQpIHtcbiAgICByZXR1cm4gKDAsIGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEucHVzaFZlcmRpY3RBcmd1bWVudHMpKFsnTFBVU0hYJywga2V5XSwgZWxlbWVudCk7XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IGV4cG9ydHMuSVNfUkVBRF9PTkxZID0gZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSB2b2lkIDA7XG5leHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IDE7XG5leHBvcnRzLklTX1JFQURfT05MWSA9IHRydWU7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMoa2V5LCBzdGFydCwgc3RvcCkge1xuICAgIHJldHVybiBbXG4gICAgICAgICdMUkFOR0UnLFxuICAgICAgICBrZXksXG4gICAgICAgIHN0YXJ0LnRvU3RyaW5nKCksXG4gICAgICAgIHN0b3AudG9TdHJpbmcoKVxuICAgIF07XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IGV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gdm9pZCAwO1xuZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSAxO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGtleSwgY291bnQsIGVsZW1lbnQpIHtcbiAgICByZXR1cm4gW1xuICAgICAgICAnTFJFTScsXG4gICAgICAgIGtleSxcbiAgICAgICAgY291bnQudG9TdHJpbmcoKSxcbiAgICAgICAgZWxlbWVudFxuICAgIF07XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IGV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gdm9pZCAwO1xuZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSAxO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGtleSwgaW5kZXgsIGVsZW1lbnQpIHtcbiAgICByZXR1cm4gW1xuICAgICAgICAnTFNFVCcsXG4gICAgICAgIGtleSxcbiAgICAgICAgaW5kZXgudG9TdHJpbmcoKSxcbiAgICAgICAgZWxlbWVudFxuICAgIF07XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IGV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gdm9pZCAwO1xuZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSAxO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGtleSwgc3RhcnQsIHN0b3ApIHtcbiAgICByZXR1cm4gW1xuICAgICAgICAnTFRSSU0nLFxuICAgICAgICBrZXksXG4gICAgICAgIHN0YXJ0LnRvU3RyaW5nKCksXG4gICAgICAgIHN0b3AudG9TdHJpbmcoKVxuICAgIF07XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IGV4cG9ydHMuSVNfUkVBRF9PTkxZID0gZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSB2b2lkIDA7XG5leHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IDE7XG5leHBvcnRzLklTX1JFQURfT05MWSA9IHRydWU7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMoa2V5cykge1xuICAgIHJldHVybiBbJ01HRVQnLCAuLi5rZXlzXTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdm9pZCAwO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGhvc3QsIHBvcnQsIGtleSwgZGVzdGluYXRpb25EYiwgdGltZW91dCwgb3B0aW9ucykge1xuICAgIGNvbnN0IGFyZ3MgPSBbJ01JR1JBVEUnLCBob3N0LCBwb3J0LnRvU3RyaW5nKCldLCBpc0tleUFycmF5ID0gQXJyYXkuaXNBcnJheShrZXkpO1xuICAgIGlmIChpc0tleUFycmF5KSB7XG4gICAgICAgIGFyZ3MucHVzaCgnJyk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBhcmdzLnB1c2goa2V5KTtcbiAgICB9XG4gICAgYXJncy5wdXNoKGRlc3RpbmF0aW9uRGIudG9TdHJpbmcoKSwgdGltZW91dC50b1N0cmluZygpKTtcbiAgICBpZiAob3B0aW9ucz8uQ09QWSkge1xuICAgICAgICBhcmdzLnB1c2goJ0NPUFknKTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnM/LlJFUExBQ0UpIHtcbiAgICAgICAgYXJncy5wdXNoKCdSRVBMQUNFJyk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zPy5BVVRIKSB7XG4gICAgICAgIGlmIChvcHRpb25zLkFVVEgudXNlcm5hbWUpIHtcbiAgICAgICAgICAgIGFyZ3MucHVzaCgnQVVUSDInLCBvcHRpb25zLkFVVEgudXNlcm5hbWUsIG9wdGlvbnMuQVVUSC5wYXNzd29yZCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBhcmdzLnB1c2goJ0FVVEgnLCBvcHRpb25zLkFVVEgucGFzc3dvcmQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChpc0tleUFycmF5KSB7XG4gICAgICAgIGFyZ3MucHVzaCgnS0VZUycsIC4uLmtleSk7XG4gICAgfVxuICAgIHJldHVybiBhcmdzO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IHZvaWQgMDtcbmV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gMTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyh0b1NldCkge1xuICAgIGNvbnN0IGFyZ3MgPSBbJ01TRVQnXTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh0b1NldCkpIHtcbiAgICAgICAgYXJncy5wdXNoKC4uLnRvU2V0LmZsYXQoKSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyh0b1NldCkpIHtcbiAgICAgICAgICAgIGFyZ3MucHVzaChrZXksIHRvU2V0W2tleV0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhcmdzO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1SZXBseSA9IGV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSB2b2lkIDA7XG5leHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IDE7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHModG9TZXQpIHtcbiAgICBjb25zdCBhcmdzID0gWydNU0VUTlgnXTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh0b1NldCkpIHtcbiAgICAgICAgYXJncy5wdXNoKC4uLnRvU2V0LmZsYXQoKSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyh0b1NldCkpIHtcbiAgICAgICAgICAgIGFyZ3MucHVzaChrZXksIHRvU2V0W2tleV0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhcmdzO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG52YXIgZ2VuZXJpY190cmFuc2Zvcm1lcnNfMSA9IHJlcXVpcmUoXCIuL2dlbmVyaWMtdHJhbnNmb3JtZXJzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidHJhbnNmb3JtUmVwbHlcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEudHJhbnNmb3JtQm9vbGVhblJlcGx5OyB9IH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gZXhwb3J0cy5JU19SRUFEX09OTFkgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IHZvaWQgMDtcbmV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gMjtcbmV4cG9ydHMuSVNfUkVBRF9PTkxZID0gdHJ1ZTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhrZXkpIHtcbiAgICByZXR1cm4gWydPQkpFQ1QnLCAnRU5DT0RJTkcnLCBrZXldO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLklTX1JFQURfT05MWSA9IGV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gdm9pZCAwO1xuZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSAyO1xuZXhwb3J0cy5JU19SRUFEX09OTFkgPSB0cnVlO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGtleSkge1xuICAgIHJldHVybiBbJ09CSkVDVCcsICdGUkVRJywga2V5XTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gZXhwb3J0cy5JU19SRUFEX09OTFkgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IHZvaWQgMDtcbmV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gMjtcbmV4cG9ydHMuSVNfUkVBRF9PTkxZID0gdHJ1ZTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhrZXkpIHtcbiAgICByZXR1cm4gWydPQkpFQ1QnLCAnSURMRVRJTUUnLCBrZXldO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLklTX1JFQURfT05MWSA9IGV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gdm9pZCAwO1xuZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSAyO1xuZXhwb3J0cy5JU19SRUFEX09OTFkgPSB0cnVlO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGtleSkge1xuICAgIHJldHVybiBbJ09CSkVDVCcsICdSRUZDT1VOVCcsIGtleV07XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybVJlcGx5ID0gZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IHZvaWQgMDtcbmV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gMTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhrZXkpIHtcbiAgICByZXR1cm4gWydQRVJTSVNUJywga2V5XTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xudmFyIGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEgPSByZXF1aXJlKFwiLi9nZW5lcmljLXRyYW5zZm9ybWVyc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInRyYW5zZm9ybVJlcGx5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBnZW5lcmljX3RyYW5zZm9ybWVyc18xLnRyYW5zZm9ybUJvb2xlYW5SZXBseTsgfSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybVJlcGx5ID0gZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IHZvaWQgMDtcbmV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gMTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhrZXksIG1pbGxpc2Vjb25kcywgbW9kZSkge1xuICAgIGNvbnN0IGFyZ3MgPSBbJ1BFWFBJUkUnLCBrZXksIG1pbGxpc2Vjb25kcy50b1N0cmluZygpXTtcbiAgICBpZiAobW9kZSkge1xuICAgICAgICBhcmdzLnB1c2gobW9kZSk7XG4gICAgfVxuICAgIHJldHVybiBhcmdzO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG52YXIgZ2VuZXJpY190cmFuc2Zvcm1lcnNfMSA9IHJlcXVpcmUoXCIuL2dlbmVyaWMtdHJhbnNmb3JtZXJzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidHJhbnNmb3JtUmVwbHlcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEudHJhbnNmb3JtQm9vbGVhblJlcGx5OyB9IH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtUmVwbHkgPSBleHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IGV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gdm9pZCAwO1xuY29uc3QgZ2VuZXJpY190cmFuc2Zvcm1lcnNfMSA9IHJlcXVpcmUoXCIuL2dlbmVyaWMtdHJhbnNmb3JtZXJzXCIpO1xuZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSAxO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGtleSwgbWlsbGlzZWNvbmRzVGltZXN0YW1wLCBtb2RlKSB7XG4gICAgY29uc3QgYXJncyA9IFtcbiAgICAgICAgJ1BFWFBJUkVBVCcsXG4gICAgICAgIGtleSxcbiAgICAgICAgKDAsIGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEudHJhbnNmb3JtUFhBVCkobWlsbGlzZWNvbmRzVGltZXN0YW1wKVxuICAgIF07XG4gICAgaWYgKG1vZGUpIHtcbiAgICAgICAgYXJncy5wdXNoKG1vZGUpO1xuICAgIH1cbiAgICByZXR1cm4gYXJncztcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xudmFyIGdlbmVyaWNfdHJhbnNmb3JtZXJzXzIgPSByZXF1aXJlKFwiLi9nZW5lcmljLXRyYW5zZm9ybWVyc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInRyYW5zZm9ybVJlcGx5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBnZW5lcmljX3RyYW5zZm9ybWVyc18yLnRyYW5zZm9ybUJvb2xlYW5SZXBseTsgfSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IGV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gdm9pZCAwO1xuZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSAxO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGtleSkge1xuICAgIHJldHVybiBbJ1BFWFBJUkVUSU1FJywga2V5XTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtUmVwbHkgPSBleHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IGV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gdm9pZCAwO1xuY29uc3QgZ2VuZXJpY190cmFuc2Zvcm1lcnNfMSA9IHJlcXVpcmUoXCIuL2dlbmVyaWMtdHJhbnNmb3JtZXJzXCIpO1xuZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSAxO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGtleSwgZWxlbWVudCkge1xuICAgIHJldHVybiAoMCwgZ2VuZXJpY190cmFuc2Zvcm1lcnNfMS5wdXNoVmVyZGljdEFyZ3VtZW50cykoWydQRkFERCcsIGtleV0sIGVsZW1lbnQpO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG52YXIgZ2VuZXJpY190cmFuc2Zvcm1lcnNfMiA9IHJlcXVpcmUoXCIuL2dlbmVyaWMtdHJhbnNmb3JtZXJzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidHJhbnNmb3JtUmVwbHlcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGdlbmVyaWNfdHJhbnNmb3JtZXJzXzIudHJhbnNmb3JtQm9vbGVhblJlcGx5OyB9IH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSB2b2lkIDA7XG5jb25zdCBnZW5lcmljX3RyYW5zZm9ybWVyc18xID0gcmVxdWlyZShcIi4vZ2VuZXJpYy10cmFuc2Zvcm1lcnNcIik7XG5leHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IDE7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMoa2V5KSB7XG4gICAgcmV0dXJuICgwLCBnZW5lcmljX3RyYW5zZm9ybWVyc18xLnB1c2hWZXJkaWN0QXJndW1lbnRzKShbJ1BGQ09VTlQnXSwga2V5KTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSB2b2lkIDA7XG5jb25zdCBnZW5lcmljX3RyYW5zZm9ybWVyc18xID0gcmVxdWlyZShcIi4vZ2VuZXJpYy10cmFuc2Zvcm1lcnNcIik7XG5leHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IDE7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMoZGVzdGluYXRpb24sIHNvdXJjZSkge1xuICAgIHJldHVybiAoMCwgZ2VuZXJpY190cmFuc2Zvcm1lcnNfMS5wdXNoVmVyZGljdEFyZ3VtZW50cykoWydQRk1FUkdFJywgZGVzdGluYXRpb25dLCBzb3VyY2UpO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IHZvaWQgMDtcbmV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gMTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhrZXksIG1pbGxpc2Vjb25kcywgdmFsdWUpIHtcbiAgICByZXR1cm4gW1xuICAgICAgICAnUFNFVEVYJyxcbiAgICAgICAga2V5LFxuICAgICAgICBtaWxsaXNlY29uZHMudG9TdHJpbmcoKSxcbiAgICAgICAgdmFsdWVcbiAgICBdO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLklTX1JFQURfT05MWSA9IGV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gdm9pZCAwO1xuZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSAxO1xuZXhwb3J0cy5JU19SRUFEX09OTFkgPSB0cnVlO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGtleSkge1xuICAgIHJldHVybiBbJ1BUVEwnLCBrZXldO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLklTX1JFQURfT05MWSA9IHZvaWQgMDtcbmV4cG9ydHMuSVNfUkVBRF9PTkxZID0gdHJ1ZTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhjaGFubmVsLCBtZXNzYWdlKSB7XG4gICAgcmV0dXJuIFsnUFVCTElTSCcsIGNoYW5uZWwsIG1lc3NhZ2VdO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IHZvaWQgMDtcbmV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gMTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhrZXksIG5ld0tleSkge1xuICAgIHJldHVybiBbJ1JFTkFNRScsIGtleSwgbmV3S2V5XTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtUmVwbHkgPSBleHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IGV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gdm9pZCAwO1xuZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSAxO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGtleSwgbmV3S2V5KSB7XG4gICAgcmV0dXJuIFsnUkVOQU1FTlgnLCBrZXksIG5ld0tleV07XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbnZhciBnZW5lcmljX3RyYW5zZm9ybWVyc18xID0gcmVxdWlyZShcIi4vZ2VuZXJpYy10cmFuc2Zvcm1lcnNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ0cmFuc2Zvcm1SZXBseVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZ2VuZXJpY190cmFuc2Zvcm1lcnNfMS50cmFuc2Zvcm1Cb29sZWFuUmVwbHk7IH0gfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IHZvaWQgMDtcbmV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gMTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhrZXksIHR0bCwgc2VyaWFsaXplZFZhbHVlLCBvcHRpb25zKSB7XG4gICAgY29uc3QgYXJncyA9IFsnUkVTVE9SRScsIGtleSwgdHRsLnRvU3RyaW5nKCksIHNlcmlhbGl6ZWRWYWx1ZV07XG4gICAgaWYgKG9wdGlvbnM/LlJFUExBQ0UpIHtcbiAgICAgICAgYXJncy5wdXNoKCdSRVBMQUNFJyk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zPy5BQlNUVEwpIHtcbiAgICAgICAgYXJncy5wdXNoKCdBQlNUVEwnKTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnM/LklETEVUSU1FKSB7XG4gICAgICAgIGFyZ3MucHVzaCgnSURMRVRJTUUnLCBvcHRpb25zLklETEVUSU1FLnRvU3RyaW5nKCkpO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucz8uRlJFUSkge1xuICAgICAgICBhcmdzLnB1c2goJ0ZSRVEnLCBvcHRpb25zLkZSRVEudG9TdHJpbmcoKSk7XG4gICAgfVxuICAgIHJldHVybiBhcmdzO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IHZvaWQgMDtcbmV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gMTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhrZXksIGNvdW50KSB7XG4gICAgcmV0dXJuIFsnUlBPUCcsIGtleSwgY291bnQudG9TdHJpbmcoKV07XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IGV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gdm9pZCAwO1xuZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSAxO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGtleSkge1xuICAgIHJldHVybiBbJ1JQT1AnLCBrZXldO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IHZvaWQgMDtcbmV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gMTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhzb3VyY2UsIGRlc3RpbmF0aW9uKSB7XG4gICAgcmV0dXJuIFsnUlBPUExQVVNIJywgc291cmNlLCBkZXN0aW5hdGlvbl07XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IGV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gdm9pZCAwO1xuY29uc3QgZ2VuZXJpY190cmFuc2Zvcm1lcnNfMSA9IHJlcXVpcmUoXCIuL2dlbmVyaWMtdHJhbnNmb3JtZXJzXCIpO1xuZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSAxO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGtleSwgZWxlbWVudCkge1xuICAgIHJldHVybiAoMCwgZ2VuZXJpY190cmFuc2Zvcm1lcnNfMS5wdXNoVmVyZGljdEFyZ3VtZW50cykoWydSUFVTSCcsIGtleV0sIGVsZW1lbnQpO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IHZvaWQgMDtcbmNvbnN0IGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEgPSByZXF1aXJlKFwiLi9nZW5lcmljLXRyYW5zZm9ybWVyc1wiKTtcbmV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gMTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhrZXksIGVsZW1lbnQpIHtcbiAgICByZXR1cm4gKDAsIGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEucHVzaFZlcmRpY3RBcmd1bWVudHMpKFsnUlBVU0hYJywga2V5XSwgZWxlbWVudCk7XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IGV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gdm9pZCAwO1xuY29uc3QgZ2VuZXJpY190cmFuc2Zvcm1lcnNfMSA9IHJlcXVpcmUoXCIuL2dlbmVyaWMtdHJhbnNmb3JtZXJzXCIpO1xuZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSAxO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGtleSwgbWVtYmVycykge1xuICAgIHJldHVybiAoMCwgZ2VuZXJpY190cmFuc2Zvcm1lcnNfMS5wdXNoVmVyZGljdEFyZ3VtZW50cykoWydTQUREJywga2V5XSwgbWVtYmVycyk7XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IGV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gdm9pZCAwO1xuZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSAxO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGtleSkge1xuICAgIHJldHVybiBbJ1NDQVJEJywga2V5XTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gZXhwb3J0cy5JU19SRUFEX09OTFkgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IHZvaWQgMDtcbmNvbnN0IGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEgPSByZXF1aXJlKFwiLi9nZW5lcmljLXRyYW5zZm9ybWVyc1wiKTtcbmV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gMTtcbmV4cG9ydHMuSVNfUkVBRF9PTkxZID0gdHJ1ZTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhrZXlzKSB7XG4gICAgcmV0dXJuICgwLCBnZW5lcmljX3RyYW5zZm9ybWVyc18xLnB1c2hWZXJkaWN0QXJndW1lbnRzKShbJ1NESUZGJ10sIGtleXMpO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IHZvaWQgMDtcbmNvbnN0IGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEgPSByZXF1aXJlKFwiLi9nZW5lcmljLXRyYW5zZm9ybWVyc1wiKTtcbmV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gMTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhkZXN0aW5hdGlvbiwga2V5cykge1xuICAgIHJldHVybiAoMCwgZ2VuZXJpY190cmFuc2Zvcm1lcnNfMS5wdXNoVmVyZGljdEFyZ3VtZW50cykoWydTRElGRlNUT1JFJywgZGVzdGluYXRpb25dLCBrZXlzKTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSB2b2lkIDA7XG5leHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IDE7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMoa2V5LCB2YWx1ZSwgb3B0aW9ucykge1xuICAgIGNvbnN0IGFyZ3MgPSBbXG4gICAgICAgICdTRVQnLFxuICAgICAgICBrZXksXG4gICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgPyB2YWx1ZS50b1N0cmluZygpIDogdmFsdWVcbiAgICBdO1xuICAgIGlmIChvcHRpb25zPy5FWCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGFyZ3MucHVzaCgnRVgnLCBvcHRpb25zLkVYLnRvU3RyaW5nKCkpO1xuICAgIH1cbiAgICBlbHNlIGlmIChvcHRpb25zPy5QWCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGFyZ3MucHVzaCgnUFgnLCBvcHRpb25zLlBYLnRvU3RyaW5nKCkpO1xuICAgIH1cbiAgICBlbHNlIGlmIChvcHRpb25zPy5FWEFUICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgYXJncy5wdXNoKCdFWEFUJywgb3B0aW9ucy5FWEFULnRvU3RyaW5nKCkpO1xuICAgIH1cbiAgICBlbHNlIGlmIChvcHRpb25zPy5QWEFUICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgYXJncy5wdXNoKCdQWEFUJywgb3B0aW9ucy5QWEFULnRvU3RyaW5nKCkpO1xuICAgIH1cbiAgICBlbHNlIGlmIChvcHRpb25zPy5LRUVQVFRMKSB7XG4gICAgICAgIGFyZ3MucHVzaCgnS0VFUFRUTCcpO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucz8uTlgpIHtcbiAgICAgICAgYXJncy5wdXNoKCdOWCcpO1xuICAgIH1cbiAgICBlbHNlIGlmIChvcHRpb25zPy5YWCkge1xuICAgICAgICBhcmdzLnB1c2goJ1hYJyk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zPy5HRVQpIHtcbiAgICAgICAgYXJncy5wdXNoKCdHRVQnKTtcbiAgICB9XG4gICAgcmV0dXJuIGFyZ3M7XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IGV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gdm9pZCAwO1xuZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSAxO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGtleSwgb2Zmc2V0LCB2YWx1ZSkge1xuICAgIHJldHVybiBbJ1NFVEJJVCcsIGtleSwgb2Zmc2V0LnRvU3RyaW5nKCksIHZhbHVlLnRvU3RyaW5nKCldO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IHZvaWQgMDtcbmV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gMTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhrZXksIHNlY29uZHMsIHZhbHVlKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgICAgJ1NFVEVYJyxcbiAgICAgICAga2V5LFxuICAgICAgICBzZWNvbmRzLnRvU3RyaW5nKCksXG4gICAgICAgIHZhbHVlXG4gICAgXTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtUmVwbHkgPSBleHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IGV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gdm9pZCAwO1xuZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSAxO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGtleSwgdmFsdWUpIHtcbiAgICByZXR1cm4gWydTRVROWCcsIGtleSwgdmFsdWVdO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG52YXIgZ2VuZXJpY190cmFuc2Zvcm1lcnNfMSA9IHJlcXVpcmUoXCIuL2dlbmVyaWMtdHJhbnNmb3JtZXJzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidHJhbnNmb3JtUmVwbHlcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEudHJhbnNmb3JtQm9vbGVhblJlcGx5OyB9IH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSB2b2lkIDA7XG5leHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IDE7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMoa2V5LCBvZmZzZXQsIHZhbHVlKSB7XG4gICAgcmV0dXJuIFsnU0VUUkFOR0UnLCBrZXksIG9mZnNldC50b1N0cmluZygpLCB2YWx1ZV07XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IGV4cG9ydHMuSVNfUkVBRF9PTkxZID0gZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSB2b2lkIDA7XG5jb25zdCBnZW5lcmljX3RyYW5zZm9ybWVyc18xID0gcmVxdWlyZShcIi4vZ2VuZXJpYy10cmFuc2Zvcm1lcnNcIik7XG5leHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IDE7XG5leHBvcnRzLklTX1JFQURfT05MWSA9IHRydWU7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMoa2V5cykge1xuICAgIHJldHVybiAoMCwgZ2VuZXJpY190cmFuc2Zvcm1lcnNfMS5wdXNoVmVyZGljdEFyZ3VtZW50cykoWydTSU5URVInXSwga2V5cyk7XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IGV4cG9ydHMuSVNfUkVBRF9PTkxZID0gZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSB2b2lkIDA7XG5jb25zdCBnZW5lcmljX3RyYW5zZm9ybWVyc18xID0gcmVxdWlyZShcIi4vZ2VuZXJpYy10cmFuc2Zvcm1lcnNcIik7XG5leHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IDI7XG5leHBvcnRzLklTX1JFQURfT05MWSA9IHRydWU7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMoa2V5cywgbGltaXQpIHtcbiAgICBjb25zdCBhcmdzID0gKDAsIGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEucHVzaFZlcmRpY3RBcmd1bWVudCkoWydTSU5URVJDQVJEJ10sIGtleXMpO1xuICAgIGlmIChsaW1pdCkge1xuICAgICAgICBhcmdzLnB1c2goJ0xJTUlUJywgbGltaXQudG9TdHJpbmcoKSk7XG4gICAgfVxuICAgIHJldHVybiBhcmdzO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IHZvaWQgMDtcbmNvbnN0IGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEgPSByZXF1aXJlKFwiLi9nZW5lcmljLXRyYW5zZm9ybWVyc1wiKTtcbmV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gMTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhkZXN0aW5hdGlvbiwga2V5cykge1xuICAgIHJldHVybiAoMCwgZ2VuZXJpY190cmFuc2Zvcm1lcnNfMS5wdXNoVmVyZGljdEFyZ3VtZW50cykoWydTSU5URVJTVE9SRScsIGRlc3RpbmF0aW9uXSwga2V5cyk7XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybVJlcGx5ID0gZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IHZvaWQgMDtcbmV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gMTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhrZXksIG1lbWJlcikge1xuICAgIHJldHVybiBbJ1NJU01FTUJFUicsIGtleSwgbWVtYmVyXTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xudmFyIGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEgPSByZXF1aXJlKFwiLi9nZW5lcmljLXRyYW5zZm9ybWVyc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInRyYW5zZm9ybVJlcGx5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBnZW5lcmljX3RyYW5zZm9ybWVyc18xLnRyYW5zZm9ybUJvb2xlYW5SZXBseTsgfSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IGV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gdm9pZCAwO1xuZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSAxO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGtleSkge1xuICAgIHJldHVybiBbJ1NNRU1CRVJTJywga2V5XTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtUmVwbHkgPSBleHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IGV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gdm9pZCAwO1xuZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSAxO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGtleSwgbWVtYmVycykge1xuICAgIHJldHVybiBbJ1NNSVNNRU1CRVInLCBrZXksIC4uLm1lbWJlcnNdO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG52YXIgZ2VuZXJpY190cmFuc2Zvcm1lcnNfMSA9IHJlcXVpcmUoXCIuL2dlbmVyaWMtdHJhbnNmb3JtZXJzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidHJhbnNmb3JtUmVwbHlcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEudHJhbnNmb3JtQm9vbGVhbkFycmF5UmVwbHk7IH0gfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1SZXBseSA9IGV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSB2b2lkIDA7XG5leHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IDE7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMoc291cmNlLCBkZXN0aW5hdGlvbiwgbWVtYmVyKSB7XG4gICAgcmV0dXJuIFsnU01PVkUnLCBzb3VyY2UsIGRlc3RpbmF0aW9uLCBtZW1iZXJdO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG52YXIgZ2VuZXJpY190cmFuc2Zvcm1lcnNfMSA9IHJlcXVpcmUoXCIuL2dlbmVyaWMtdHJhbnNmb3JtZXJzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidHJhbnNmb3JtUmVwbHlcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEudHJhbnNmb3JtQm9vbGVhblJlcGx5OyB9IH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gZXhwb3J0cy5JU19SRUFEX09OTFkgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IHZvaWQgMDtcbmNvbnN0IGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEgPSByZXF1aXJlKFwiLi9nZW5lcmljLXRyYW5zZm9ybWVyc1wiKTtcbmV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gMTtcbmV4cG9ydHMuSVNfUkVBRF9PTkxZID0gdHJ1ZTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhrZXksIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gKDAsIGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEucHVzaFNvcnRBcmd1bWVudHMpKFsnU09SVF9STycsIGtleV0sIG9wdGlvbnMpO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IHZvaWQgMDtcbmNvbnN0IGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEgPSByZXF1aXJlKFwiLi9nZW5lcmljLXRyYW5zZm9ybWVyc1wiKTtcbmV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gMTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhrZXksIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gKDAsIGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEucHVzaFNvcnRBcmd1bWVudHMpKFsnU09SVCcsIGtleV0sIG9wdGlvbnMpO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IHZvaWQgMDtcbmNvbnN0IFNPUlRfMSA9IHJlcXVpcmUoXCIuL1NPUlRcIik7XG5leHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IDE7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMoc291cmNlLCBkZXN0aW5hdGlvbiwgb3B0aW9ucykge1xuICAgIGNvbnN0IGFyZ3MgPSAoMCwgU09SVF8xLnRyYW5zZm9ybUFyZ3VtZW50cykoc291cmNlLCBvcHRpb25zKTtcbiAgICBhcmdzLnB1c2goJ1NUT1JFJywgZGVzdGluYXRpb24pO1xuICAgIHJldHVybiBhcmdzO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IHZvaWQgMDtcbmV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gMTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhrZXksIGNvdW50KSB7XG4gICAgY29uc3QgYXJncyA9IFsnU1BPUCcsIGtleV07XG4gICAgaWYgKHR5cGVvZiBjb3VudCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgYXJncy5wdXNoKGNvdW50LnRvU3RyaW5nKCkpO1xuICAgIH1cbiAgICByZXR1cm4gYXJncztcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSBleHBvcnRzLklTX1JFQURfT05MWSA9IHZvaWQgMDtcbmV4cG9ydHMuSVNfUkVBRF9PTkxZID0gdHJ1ZTtcbmV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gMTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhjaGFubmVsLCBtZXNzYWdlKSB7XG4gICAgcmV0dXJuIFsnU1BVQkxJU0gnLCBjaGFubmVsLCBtZXNzYWdlXTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSB2b2lkIDA7XG5leHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IDE7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMoa2V5KSB7XG4gICAgcmV0dXJuIFsnU1JBTkRNRU1CRVInLCBrZXldO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IHZvaWQgMDtcbmNvbnN0IFNSQU5ETUVNQkVSXzEgPSByZXF1aXJlKFwiLi9TUkFORE1FTUJFUlwiKTtcbnZhciBTUkFORE1FTUJFUl8yID0gcmVxdWlyZShcIi4vU1JBTkRNRU1CRVJcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJGSVJTVF9LRVlfSU5ERVhcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFNSQU5ETUVNQkVSXzIuRklSU1RfS0VZX0lOREVYOyB9IH0pO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGtleSwgY291bnQpIHtcbiAgICByZXR1cm4gW1xuICAgICAgICAuLi4oMCwgU1JBTkRNRU1CRVJfMS50cmFuc2Zvcm1Bcmd1bWVudHMpKGtleSksXG4gICAgICAgIGNvdW50LnRvU3RyaW5nKClcbiAgICBdO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IHZvaWQgMDtcbmNvbnN0IGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEgPSByZXF1aXJlKFwiLi9nZW5lcmljLXRyYW5zZm9ybWVyc1wiKTtcbmV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gMTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhrZXksIG1lbWJlcnMpIHtcbiAgICByZXR1cm4gKDAsIGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEucHVzaFZlcmRpY3RBcmd1bWVudHMpKFsnU1JFTScsIGtleV0sIG1lbWJlcnMpO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1SZXBseSA9IGV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gZXhwb3J0cy5JU19SRUFEX09OTFkgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IHZvaWQgMDtcbmNvbnN0IGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEgPSByZXF1aXJlKFwiLi9nZW5lcmljLXRyYW5zZm9ybWVyc1wiKTtcbmV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gMTtcbmV4cG9ydHMuSVNfUkVBRF9PTkxZID0gdHJ1ZTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhrZXksIGN1cnNvciwgb3B0aW9ucykge1xuICAgIHJldHVybiAoMCwgZ2VuZXJpY190cmFuc2Zvcm1lcnNfMS5wdXNoU2NhbkFyZ3VtZW50cykoW1xuICAgICAgICAnU1NDQU4nLFxuICAgICAgICBrZXksXG4gICAgXSwgY3Vyc29yLCBvcHRpb25zKTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuZnVuY3Rpb24gdHJhbnNmb3JtUmVwbHkoW2N1cnNvciwgbWVtYmVyc10pIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBjdXJzb3I6IE51bWJlcihjdXJzb3IpLFxuICAgICAgICBtZW1iZXJzXG4gICAgfTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtUmVwbHkgPSB0cmFuc2Zvcm1SZXBseTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IGV4cG9ydHMuSVNfUkVBRF9PTkxZID0gZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSB2b2lkIDA7XG5leHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IDE7XG5leHBvcnRzLklTX1JFQURfT05MWSA9IHRydWU7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMoa2V5KSB7XG4gICAgcmV0dXJuIFsnU1RSTEVOJywga2V5XTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gZXhwb3J0cy5JU19SRUFEX09OTFkgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IHZvaWQgMDtcbmNvbnN0IGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEgPSByZXF1aXJlKFwiLi9nZW5lcmljLXRyYW5zZm9ybWVyc1wiKTtcbmV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gMTtcbmV4cG9ydHMuSVNfUkVBRF9PTkxZID0gdHJ1ZTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhrZXlzKSB7XG4gICAgcmV0dXJuICgwLCBnZW5lcmljX3RyYW5zZm9ybWVyc18xLnB1c2hWZXJkaWN0QXJndW1lbnRzKShbJ1NVTklPTiddLCBrZXlzKTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSB2b2lkIDA7XG5jb25zdCBnZW5lcmljX3RyYW5zZm9ybWVyc18xID0gcmVxdWlyZShcIi4vZ2VuZXJpYy10cmFuc2Zvcm1lcnNcIik7XG5leHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IDE7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMoZGVzdGluYXRpb24sIGtleXMpIHtcbiAgICByZXR1cm4gKDAsIGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEucHVzaFZlcmRpY3RBcmd1bWVudHMpKFsnU1VOSU9OU1RPUkUnLCBkZXN0aW5hdGlvbl0sIGtleXMpO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IHZvaWQgMDtcbmNvbnN0IGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEgPSByZXF1aXJlKFwiLi9nZW5lcmljLXRyYW5zZm9ybWVyc1wiKTtcbmV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gMTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhrZXkpIHtcbiAgICByZXR1cm4gKDAsIGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEucHVzaFZlcmRpY3RBcmd1bWVudHMpKFsnVE9VQ0gnXSwga2V5KTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gZXhwb3J0cy5JU19SRUFEX09OTFkgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IHZvaWQgMDtcbmV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gMTtcbmV4cG9ydHMuSVNfUkVBRF9PTkxZID0gdHJ1ZTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhrZXkpIHtcbiAgICByZXR1cm4gWydUVEwnLCBrZXldO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLklTX1JFQURfT05MWSA9IGV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gdm9pZCAwO1xuZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSAxO1xuZXhwb3J0cy5JU19SRUFEX09OTFkgPSB0cnVlO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGtleSkge1xuICAgIHJldHVybiBbJ1RZUEUnLCBrZXldO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IHZvaWQgMDtcbmNvbnN0IGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEgPSByZXF1aXJlKFwiLi9nZW5lcmljLXRyYW5zZm9ybWVyc1wiKTtcbmV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gMTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhrZXkpIHtcbiAgICByZXR1cm4gKDAsIGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEucHVzaFZlcmRpY3RBcmd1bWVudHMpKFsnVU5MSU5LJ10sIGtleSk7XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IGV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gdm9pZCAwO1xuY29uc3QgZ2VuZXJpY190cmFuc2Zvcm1lcnNfMSA9IHJlcXVpcmUoXCIuL2dlbmVyaWMtdHJhbnNmb3JtZXJzXCIpO1xuZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSAxO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGtleSkge1xuICAgIHJldHVybiAoMCwgZ2VuZXJpY190cmFuc2Zvcm1lcnNfMS5wdXNoVmVyZGljdEFyZ3VtZW50cykoWydXQVRDSCddLCBrZXkpO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IHZvaWQgMDtcbmNvbnN0IGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEgPSByZXF1aXJlKFwiLi9nZW5lcmljLXRyYW5zZm9ybWVyc1wiKTtcbmV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gMTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhrZXksIGdyb3VwLCBpZCkge1xuICAgIHJldHVybiAoMCwgZ2VuZXJpY190cmFuc2Zvcm1lcnNfMS5wdXNoVmVyZGljdEFyZ3VtZW50cykoWydYQUNLJywga2V5LCBncm91cF0sIGlkKTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSB2b2lkIDA7XG5leHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IDE7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMoa2V5LCBpZCwgbWVzc2FnZSwgb3B0aW9ucykge1xuICAgIGNvbnN0IGFyZ3MgPSBbJ1hBREQnLCBrZXldO1xuICAgIGlmIChvcHRpb25zPy5OT01LU1RSRUFNKSB7XG4gICAgICAgIGFyZ3MucHVzaCgnTk9NS1NUUkVBTScpO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucz8uVFJJTSkge1xuICAgICAgICBpZiAob3B0aW9ucy5UUklNLnN0cmF0ZWd5KSB7XG4gICAgICAgICAgICBhcmdzLnB1c2gob3B0aW9ucy5UUklNLnN0cmF0ZWd5KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5UUklNLnN0cmF0ZWd5TW9kaWZpZXIpIHtcbiAgICAgICAgICAgIGFyZ3MucHVzaChvcHRpb25zLlRSSU0uc3RyYXRlZ3lNb2RpZmllcik7XG4gICAgICAgIH1cbiAgICAgICAgYXJncy5wdXNoKG9wdGlvbnMuVFJJTS50aHJlc2hvbGQudG9TdHJpbmcoKSk7XG4gICAgICAgIGlmIChvcHRpb25zLlRSSU0ubGltaXQpIHtcbiAgICAgICAgICAgIGFyZ3MucHVzaCgnTElNSVQnLCBvcHRpb25zLlRSSU0ubGltaXQudG9TdHJpbmcoKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYXJncy5wdXNoKGlkKTtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhtZXNzYWdlKSkge1xuICAgICAgICBhcmdzLnB1c2goa2V5LCB2YWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiBhcmdzO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1SZXBseSA9IGV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSB2b2lkIDA7XG5jb25zdCBnZW5lcmljX3RyYW5zZm9ybWVyc18xID0gcmVxdWlyZShcIi4vZ2VuZXJpYy10cmFuc2Zvcm1lcnNcIik7XG5leHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IDE7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMoa2V5LCBncm91cCwgY29uc3VtZXIsIG1pbklkbGVUaW1lLCBzdGFydCwgb3B0aW9ucykge1xuICAgIGNvbnN0IGFyZ3MgPSBbJ1hBVVRPQ0xBSU0nLCBrZXksIGdyb3VwLCBjb25zdW1lciwgbWluSWRsZVRpbWUudG9TdHJpbmcoKSwgc3RhcnRdO1xuICAgIGlmIChvcHRpb25zPy5DT1VOVCkge1xuICAgICAgICBhcmdzLnB1c2goJ0NPVU5UJywgb3B0aW9ucy5DT1VOVC50b1N0cmluZygpKTtcbiAgICB9XG4gICAgcmV0dXJuIGFyZ3M7XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbmZ1bmN0aW9uIHRyYW5zZm9ybVJlcGx5KHJlcGx5KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbmV4dElkOiByZXBseVswXSxcbiAgICAgICAgbWVzc2FnZXM6ICgwLCBnZW5lcmljX3RyYW5zZm9ybWVyc18xLnRyYW5zZm9ybVN0cmVhbU1lc3NhZ2VzTnVsbFJlcGx5KShyZXBseVsxXSlcbiAgICB9O1xufVxuZXhwb3J0cy50cmFuc2Zvcm1SZXBseSA9IHRyYW5zZm9ybVJlcGx5O1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtUmVwbHkgPSBleHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IGV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gdm9pZCAwO1xuY29uc3QgWEFVVE9DTEFJTV8xID0gcmVxdWlyZShcIi4vWEFVVE9DTEFJTVwiKTtcbnZhciBYQVVUT0NMQUlNXzIgPSByZXF1aXJlKFwiLi9YQVVUT0NMQUlNXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiRklSU1RfS0VZX0lOREVYXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBYQVVUT0NMQUlNXzIuRklSU1RfS0VZX0lOREVYOyB9IH0pO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKC4uLmFyZ3MpIHtcbiAgICByZXR1cm4gW1xuICAgICAgICAuLi4oMCwgWEFVVE9DTEFJTV8xLnRyYW5zZm9ybUFyZ3VtZW50cykoLi4uYXJncyksXG4gICAgICAgICdKVVNUSUQnXG4gICAgXTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuZnVuY3Rpb24gdHJhbnNmb3JtUmVwbHkocmVwbHkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBuZXh0SWQ6IHJlcGx5WzBdLFxuICAgICAgICBtZXNzYWdlczogcmVwbHlbMV1cbiAgICB9O1xufVxuZXhwb3J0cy50cmFuc2Zvcm1SZXBseSA9IHRyYW5zZm9ybVJlcGx5O1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtUmVwbHkgPSBleHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IGV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gdm9pZCAwO1xuY29uc3QgZ2VuZXJpY190cmFuc2Zvcm1lcnNfMSA9IHJlcXVpcmUoXCIuL2dlbmVyaWMtdHJhbnNmb3JtZXJzXCIpO1xuZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSAxO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGtleSwgZ3JvdXAsIGNvbnN1bWVyLCBtaW5JZGxlVGltZSwgaWQsIG9wdGlvbnMpIHtcbiAgICBjb25zdCBhcmdzID0gKDAsIGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEucHVzaFZlcmRpY3RBcmd1bWVudHMpKFsnWENMQUlNJywga2V5LCBncm91cCwgY29uc3VtZXIsIG1pbklkbGVUaW1lLnRvU3RyaW5nKCldLCBpZCk7XG4gICAgaWYgKG9wdGlvbnM/LklETEUpIHtcbiAgICAgICAgYXJncy5wdXNoKCdJRExFJywgb3B0aW9ucy5JRExFLnRvU3RyaW5nKCkpO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucz8uVElNRSkge1xuICAgICAgICBhcmdzLnB1c2goJ1RJTUUnLCAodHlwZW9mIG9wdGlvbnMuVElNRSA9PT0gJ251bWJlcicgPyBvcHRpb25zLlRJTUUgOiBvcHRpb25zLlRJTUUuZ2V0VGltZSgpKS50b1N0cmluZygpKTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnM/LlJFVFJZQ09VTlQpIHtcbiAgICAgICAgYXJncy5wdXNoKCdSRVRSWUNPVU5UJywgb3B0aW9ucy5SRVRSWUNPVU5ULnRvU3RyaW5nKCkpO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucz8uRk9SQ0UpIHtcbiAgICAgICAgYXJncy5wdXNoKCdGT1JDRScpO1xuICAgIH1cbiAgICByZXR1cm4gYXJncztcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xudmFyIGdlbmVyaWNfdHJhbnNmb3JtZXJzXzIgPSByZXF1aXJlKFwiLi9nZW5lcmljLXRyYW5zZm9ybWVyc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInRyYW5zZm9ybVJlcGx5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBnZW5lcmljX3RyYW5zZm9ybWVyc18yLnRyYW5zZm9ybVN0cmVhbU1lc3NhZ2VzTnVsbFJlcGx5OyB9IH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSB2b2lkIDA7XG5jb25zdCBYQ0xBSU1fMSA9IHJlcXVpcmUoXCIuL1hDTEFJTVwiKTtcbnZhciBYQ0xBSU1fMiA9IHJlcXVpcmUoXCIuL1hDTEFJTVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkZJUlNUX0tFWV9JTkRFWFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gWENMQUlNXzIuRklSU1RfS0VZX0lOREVYOyB9IH0pO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKC4uLmFyZ3MpIHtcbiAgICByZXR1cm4gW1xuICAgICAgICAuLi4oMCwgWENMQUlNXzEudHJhbnNmb3JtQXJndW1lbnRzKSguLi5hcmdzKSxcbiAgICAgICAgJ0pVU1RJRCdcbiAgICBdO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IHZvaWQgMDtcbmNvbnN0IGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEgPSByZXF1aXJlKFwiLi9nZW5lcmljLXRyYW5zZm9ybWVyc1wiKTtcbmV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gMTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhrZXksIGlkKSB7XG4gICAgcmV0dXJuICgwLCBnZW5lcmljX3RyYW5zZm9ybWVyc18xLnB1c2hWZXJkaWN0QXJndW1lbnRzKShbJ1hERUwnLCBrZXldLCBpZCk7XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IGV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gdm9pZCAwO1xuZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSAyO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGtleSwgZ3JvdXAsIGlkLCBvcHRpb25zKSB7XG4gICAgY29uc3QgYXJncyA9IFsnWEdST1VQJywgJ0NSRUFURScsIGtleSwgZ3JvdXAsIGlkXTtcbiAgICBpZiAob3B0aW9ucz8uTUtTVFJFQU0pIHtcbiAgICAgICAgYXJncy5wdXNoKCdNS1NUUkVBTScpO1xuICAgIH1cbiAgICByZXR1cm4gYXJncztcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtUmVwbHkgPSBleHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IGV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gdm9pZCAwO1xuZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSAyO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGtleSwgZ3JvdXAsIGNvbnN1bWVyKSB7XG4gICAgcmV0dXJuIFsnWEdST1VQJywgJ0NSRUFURUNPTlNVTUVSJywga2V5LCBncm91cCwgY29uc3VtZXJdO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG52YXIgZ2VuZXJpY190cmFuc2Zvcm1lcnNfMSA9IHJlcXVpcmUoXCIuL2dlbmVyaWMtdHJhbnNmb3JtZXJzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidHJhbnNmb3JtUmVwbHlcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEudHJhbnNmb3JtQm9vbGVhblJlcGx5OyB9IH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSB2b2lkIDA7XG5leHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IDI7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMoa2V5LCBncm91cCwgY29uc3VtZXIpIHtcbiAgICByZXR1cm4gWydYR1JPVVAnLCAnREVMQ09OU1VNRVInLCBrZXksIGdyb3VwLCBjb25zdW1lcl07XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybVJlcGx5ID0gZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IHZvaWQgMDtcbmV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gMjtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhrZXksIGdyb3VwKSB7XG4gICAgcmV0dXJuIFsnWEdST1VQJywgJ0RFU1RST1knLCBrZXksIGdyb3VwXTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xudmFyIGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEgPSByZXF1aXJlKFwiLi9nZW5lcmljLXRyYW5zZm9ybWVyc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInRyYW5zZm9ybVJlcGx5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBnZW5lcmljX3RyYW5zZm9ybWVyc18xLnRyYW5zZm9ybUJvb2xlYW5SZXBseTsgfSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IGV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gdm9pZCAwO1xuZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSAyO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGtleSwgZ3JvdXAsIGlkKSB7XG4gICAgcmV0dXJuIFsnWEdST1VQJywgJ1NFVElEJywga2V5LCBncm91cCwgaWRdO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1SZXBseSA9IGV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gZXhwb3J0cy5JU19SRUFEX09OTFkgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IHZvaWQgMDtcbmV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gMjtcbmV4cG9ydHMuSVNfUkVBRF9PTkxZID0gdHJ1ZTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhrZXksIGdyb3VwKSB7XG4gICAgcmV0dXJuIFsnWElORk8nLCAnQ09OU1VNRVJTJywga2V5LCBncm91cF07XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbmZ1bmN0aW9uIHRyYW5zZm9ybVJlcGx5KHJhd1JlcGx5KSB7XG4gICAgcmV0dXJuIHJhd1JlcGx5Lm1hcChjb25zdW1lciA9PiAoe1xuICAgICAgICBuYW1lOiBjb25zdW1lclsxXSxcbiAgICAgICAgcGVuZGluZzogY29uc3VtZXJbM10sXG4gICAgICAgIGlkbGU6IGNvbnN1bWVyWzVdLFxuICAgICAgICBpbmFjdGl2ZTogY29uc3VtZXJbN11cbiAgICB9KSk7XG59XG5leHBvcnRzLnRyYW5zZm9ybVJlcGx5ID0gdHJhbnNmb3JtUmVwbHk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1SZXBseSA9IGV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gZXhwb3J0cy5JU19SRUFEX09OTFkgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IHZvaWQgMDtcbmV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gMjtcbmV4cG9ydHMuSVNfUkVBRF9PTkxZID0gdHJ1ZTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhrZXkpIHtcbiAgICByZXR1cm4gWydYSU5GTycsICdHUk9VUFMnLCBrZXldO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG5mdW5jdGlvbiB0cmFuc2Zvcm1SZXBseShyYXdSZXBseSkge1xuICAgIHJldHVybiByYXdSZXBseS5tYXAoZ3JvdXAgPT4gKHtcbiAgICAgICAgbmFtZTogZ3JvdXBbMV0sXG4gICAgICAgIGNvbnN1bWVyczogZ3JvdXBbM10sXG4gICAgICAgIHBlbmRpbmc6IGdyb3VwWzVdLFxuICAgICAgICBsYXN0RGVsaXZlcmVkSWQ6IGdyb3VwWzddXG4gICAgfSkpO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1SZXBseSA9IHRyYW5zZm9ybVJlcGx5O1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtUmVwbHkgPSBleHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IGV4cG9ydHMuSVNfUkVBRF9PTkxZID0gZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSB2b2lkIDA7XG5jb25zdCBnZW5lcmljX3RyYW5zZm9ybWVyc18xID0gcmVxdWlyZShcIi4vZ2VuZXJpYy10cmFuc2Zvcm1lcnNcIik7XG5leHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IDI7XG5leHBvcnRzLklTX1JFQURfT05MWSA9IHRydWU7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMoa2V5KSB7XG4gICAgcmV0dXJuIFsnWElORk8nLCAnU1RSRUFNJywga2V5XTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuZnVuY3Rpb24gdHJhbnNmb3JtUmVwbHkocmF3UmVwbHkpIHtcbiAgICBjb25zdCBwYXJzZWRSZXBseSA9IHt9O1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmF3UmVwbHkubGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgICAgc3dpdGNoIChyYXdSZXBseVtpXSkge1xuICAgICAgICAgICAgY2FzZSAnbGVuZ3RoJzpcbiAgICAgICAgICAgICAgICBwYXJzZWRSZXBseS5sZW5ndGggPSByYXdSZXBseVtpICsgMV07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdyYWRpeC10cmVlLWtleXMnOlxuICAgICAgICAgICAgICAgIHBhcnNlZFJlcGx5LnJhZGl4VHJlZUtleXMgPSByYXdSZXBseVtpICsgMV07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdyYWRpeC10cmVlLW5vZGVzJzpcbiAgICAgICAgICAgICAgICBwYXJzZWRSZXBseS5yYWRpeFRyZWVOb2RlcyA9IHJhd1JlcGx5W2kgKyAxXTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2dyb3Vwcyc6XG4gICAgICAgICAgICAgICAgcGFyc2VkUmVwbHkuZ3JvdXBzID0gcmF3UmVwbHlbaSArIDFdO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbGFzdC1nZW5lcmF0ZWQtaWQnOlxuICAgICAgICAgICAgICAgIHBhcnNlZFJlcGx5Lmxhc3RHZW5lcmF0ZWRJZCA9IHJhd1JlcGx5W2kgKyAxXTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2ZpcnN0LWVudHJ5JzpcbiAgICAgICAgICAgICAgICBwYXJzZWRSZXBseS5maXJzdEVudHJ5ID0gcmF3UmVwbHlbaSArIDFdID8ge1xuICAgICAgICAgICAgICAgICAgICBpZDogcmF3UmVwbHlbaSArIDFdWzBdLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiAoMCwgZ2VuZXJpY190cmFuc2Zvcm1lcnNfMS50cmFuc2Zvcm1UdXBsZXNSZXBseSkocmF3UmVwbHlbaSArIDFdWzFdKVxuICAgICAgICAgICAgICAgIH0gOiBudWxsO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbGFzdC1lbnRyeSc6XG4gICAgICAgICAgICAgICAgcGFyc2VkUmVwbHkubGFzdEVudHJ5ID0gcmF3UmVwbHlbaSArIDFdID8ge1xuICAgICAgICAgICAgICAgICAgICBpZDogcmF3UmVwbHlbaSArIDFdWzBdLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiAoMCwgZ2VuZXJpY190cmFuc2Zvcm1lcnNfMS50cmFuc2Zvcm1UdXBsZXNSZXBseSkocmF3UmVwbHlbaSArIDFdWzFdKVxuICAgICAgICAgICAgICAgIH0gOiBudWxsO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBwYXJzZWRSZXBseTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtUmVwbHkgPSB0cmFuc2Zvcm1SZXBseTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IGV4cG9ydHMuSVNfUkVBRF9PTkxZID0gZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSB2b2lkIDA7XG5leHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IDE7XG5leHBvcnRzLklTX1JFQURfT05MWSA9IHRydWU7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMoa2V5KSB7XG4gICAgcmV0dXJuIFsnWExFTicsIGtleV07XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybVJlcGx5ID0gZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLklTX1JFQURfT05MWSA9IGV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gdm9pZCAwO1xuZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSAxO1xuZXhwb3J0cy5JU19SRUFEX09OTFkgPSB0cnVlO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGtleSwgZ3JvdXAsIHN0YXJ0LCBlbmQsIGNvdW50LCBvcHRpb25zKSB7XG4gICAgY29uc3QgYXJncyA9IFsnWFBFTkRJTkcnLCBrZXksIGdyb3VwXTtcbiAgICBpZiAob3B0aW9ucz8uSURMRSkge1xuICAgICAgICBhcmdzLnB1c2goJ0lETEUnLCBvcHRpb25zLklETEUudG9TdHJpbmcoKSk7XG4gICAgfVxuICAgIGFyZ3MucHVzaChzdGFydCwgZW5kLCBjb3VudC50b1N0cmluZygpKTtcbiAgICBpZiAob3B0aW9ucz8uY29uc3VtZXIpIHtcbiAgICAgICAgYXJncy5wdXNoKG9wdGlvbnMuY29uc3VtZXIpO1xuICAgIH1cbiAgICByZXR1cm4gYXJncztcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuZnVuY3Rpb24gdHJhbnNmb3JtUmVwbHkocmVwbHkpIHtcbiAgICByZXR1cm4gcmVwbHkubWFwKChbaWQsIG93bmVyLCBtaWxsaXNlY29uZHNTaW5jZUxhc3REZWxpdmVyeSwgZGVsaXZlcmllc0NvdW50ZXJdKSA9PiAoe1xuICAgICAgICBpZCxcbiAgICAgICAgb3duZXIsXG4gICAgICAgIG1pbGxpc2Vjb25kc1NpbmNlTGFzdERlbGl2ZXJ5LFxuICAgICAgICBkZWxpdmVyaWVzQ291bnRlclxuICAgIH0pKTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtUmVwbHkgPSB0cmFuc2Zvcm1SZXBseTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybVJlcGx5ID0gZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLklTX1JFQURfT05MWSA9IGV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gdm9pZCAwO1xuZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSAxO1xuZXhwb3J0cy5JU19SRUFEX09OTFkgPSB0cnVlO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGtleSwgZ3JvdXApIHtcbiAgICByZXR1cm4gWydYUEVORElORycsIGtleSwgZ3JvdXBdO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG5mdW5jdGlvbiB0cmFuc2Zvcm1SZXBseShyZXBseSkge1xuICAgIHJldHVybiB7XG4gICAgICAgIHBlbmRpbmc6IHJlcGx5WzBdLFxuICAgICAgICBmaXJzdElkOiByZXBseVsxXSxcbiAgICAgICAgbGFzdElkOiByZXBseVsyXSxcbiAgICAgICAgY29uc3VtZXJzOiByZXBseVszXSA9PT0gbnVsbCA/IG51bGwgOiByZXBseVszXS5tYXAoKFtuYW1lLCBkZWxpdmVyaWVzQ291bnRlcl0pID0+ICh7XG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgZGVsaXZlcmllc0NvdW50ZXI6IE51bWJlcihkZWxpdmVyaWVzQ291bnRlcilcbiAgICAgICAgfSkpXG4gICAgfTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtUmVwbHkgPSB0cmFuc2Zvcm1SZXBseTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybVJlcGx5ID0gZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLklTX1JFQURfT05MWSA9IGV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gdm9pZCAwO1xuZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSAxO1xuZXhwb3J0cy5JU19SRUFEX09OTFkgPSB0cnVlO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGtleSwgc3RhcnQsIGVuZCwgb3B0aW9ucykge1xuICAgIGNvbnN0IGFyZ3MgPSBbJ1hSQU5HRScsIGtleSwgc3RhcnQsIGVuZF07XG4gICAgaWYgKG9wdGlvbnM/LkNPVU5UKSB7XG4gICAgICAgIGFyZ3MucHVzaCgnQ09VTlQnLCBvcHRpb25zLkNPVU5ULnRvU3RyaW5nKCkpO1xuICAgIH1cbiAgICByZXR1cm4gYXJncztcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xudmFyIGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEgPSByZXF1aXJlKFwiLi9nZW5lcmljLXRyYW5zZm9ybWVyc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInRyYW5zZm9ybVJlcGx5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBnZW5lcmljX3RyYW5zZm9ybWVyc18xLnRyYW5zZm9ybVN0cmVhbU1lc3NhZ2VzUmVwbHk7IH0gfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1SZXBseSA9IGV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gZXhwb3J0cy5JU19SRUFEX09OTFkgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IHZvaWQgMDtcbmNvbnN0IEZJUlNUX0tFWV9JTkRFWCA9IChzdHJlYW1zKSA9PiB7XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkoc3RyZWFtcykgPyBzdHJlYW1zWzBdLmtleSA6IHN0cmVhbXMua2V5O1xufTtcbmV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gRklSU1RfS0VZX0lOREVYO1xuZXhwb3J0cy5JU19SRUFEX09OTFkgPSB0cnVlO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKHN0cmVhbXMsIG9wdGlvbnMpIHtcbiAgICBjb25zdCBhcmdzID0gWydYUkVBRCddO1xuICAgIGlmIChvcHRpb25zPy5DT1VOVCkge1xuICAgICAgICBhcmdzLnB1c2goJ0NPVU5UJywgb3B0aW9ucy5DT1VOVC50b1N0cmluZygpKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zPy5CTE9DSyA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgYXJncy5wdXNoKCdCTE9DSycsIG9wdGlvbnMuQkxPQ0sudG9TdHJpbmcoKSk7XG4gICAgfVxuICAgIGFyZ3MucHVzaCgnU1RSRUFNUycpO1xuICAgIGNvbnN0IHN0cmVhbXNBcnJheSA9IEFycmF5LmlzQXJyYXkoc3RyZWFtcykgPyBzdHJlYW1zIDogW3N0cmVhbXNdLCBhcmdzTGVuZ3RoID0gYXJncy5sZW5ndGg7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHJlYW1zQXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3Qgc3RyZWFtID0gc3RyZWFtc0FycmF5W2ldO1xuICAgICAgICBhcmdzW2FyZ3NMZW5ndGggKyBpXSA9IHN0cmVhbS5rZXk7XG4gICAgICAgIGFyZ3NbYXJnc0xlbmd0aCArIHN0cmVhbXNBcnJheS5sZW5ndGggKyBpXSA9IHN0cmVhbS5pZDtcbiAgICB9XG4gICAgcmV0dXJuIGFyZ3M7XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbnZhciBnZW5lcmljX3RyYW5zZm9ybWVyc18xID0gcmVxdWlyZShcIi4vZ2VuZXJpYy10cmFuc2Zvcm1lcnNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ0cmFuc2Zvcm1SZXBseVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZ2VuZXJpY190cmFuc2Zvcm1lcnNfMS50cmFuc2Zvcm1TdHJlYW1zTWVzc2FnZXNSZXBseTsgfSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybVJlcGx5ID0gZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLklTX1JFQURfT05MWSA9IGV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gdm9pZCAwO1xuY29uc3QgRklSU1RfS0VZX0lOREVYID0gKF9ncm91cCwgX2NvbnN1bWVyLCBzdHJlYW1zKSA9PiB7XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkoc3RyZWFtcykgPyBzdHJlYW1zWzBdLmtleSA6IHN0cmVhbXMua2V5O1xufTtcbmV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gRklSU1RfS0VZX0lOREVYO1xuZXhwb3J0cy5JU19SRUFEX09OTFkgPSB0cnVlO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGdyb3VwLCBjb25zdW1lciwgc3RyZWFtcywgb3B0aW9ucykge1xuICAgIGNvbnN0IGFyZ3MgPSBbJ1hSRUFER1JPVVAnLCAnR1JPVVAnLCBncm91cCwgY29uc3VtZXJdO1xuICAgIGlmIChvcHRpb25zPy5DT1VOVCkge1xuICAgICAgICBhcmdzLnB1c2goJ0NPVU5UJywgb3B0aW9ucy5DT1VOVC50b1N0cmluZygpKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zPy5CTE9DSyA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgYXJncy5wdXNoKCdCTE9DSycsIG9wdGlvbnMuQkxPQ0sudG9TdHJpbmcoKSk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zPy5OT0FDSykge1xuICAgICAgICBhcmdzLnB1c2goJ05PQUNLJyk7XG4gICAgfVxuICAgIGFyZ3MucHVzaCgnU1RSRUFNUycpO1xuICAgIGNvbnN0IHN0cmVhbXNBcnJheSA9IEFycmF5LmlzQXJyYXkoc3RyZWFtcykgPyBzdHJlYW1zIDogW3N0cmVhbXNdLCBhcmdzTGVuZ3RoID0gYXJncy5sZW5ndGg7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHJlYW1zQXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3Qgc3RyZWFtID0gc3RyZWFtc0FycmF5W2ldO1xuICAgICAgICBhcmdzW2FyZ3NMZW5ndGggKyBpXSA9IHN0cmVhbS5rZXk7XG4gICAgICAgIGFyZ3NbYXJnc0xlbmd0aCArIHN0cmVhbXNBcnJheS5sZW5ndGggKyBpXSA9IHN0cmVhbS5pZDtcbiAgICB9XG4gICAgcmV0dXJuIGFyZ3M7XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbnZhciBnZW5lcmljX3RyYW5zZm9ybWVyc18xID0gcmVxdWlyZShcIi4vZ2VuZXJpYy10cmFuc2Zvcm1lcnNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ0cmFuc2Zvcm1SZXBseVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZ2VuZXJpY190cmFuc2Zvcm1lcnNfMS50cmFuc2Zvcm1TdHJlYW1zTWVzc2FnZXNSZXBseTsgfSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybVJlcGx5ID0gZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLklTX1JFQURfT05MWSA9IGV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gdm9pZCAwO1xuZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSAxO1xuZXhwb3J0cy5JU19SRUFEX09OTFkgPSB0cnVlO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGtleSwgc3RhcnQsIGVuZCwgb3B0aW9ucykge1xuICAgIGNvbnN0IGFyZ3MgPSBbJ1hSRVZSQU5HRScsIGtleSwgc3RhcnQsIGVuZF07XG4gICAgaWYgKG9wdGlvbnM/LkNPVU5UKSB7XG4gICAgICAgIGFyZ3MucHVzaCgnQ09VTlQnLCBvcHRpb25zLkNPVU5ULnRvU3RyaW5nKCkpO1xuICAgIH1cbiAgICByZXR1cm4gYXJncztcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xudmFyIGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEgPSByZXF1aXJlKFwiLi9nZW5lcmljLXRyYW5zZm9ybWVyc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInRyYW5zZm9ybVJlcGx5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBnZW5lcmljX3RyYW5zZm9ybWVyc18xLnRyYW5zZm9ybVN0cmVhbU1lc3NhZ2VzUmVwbHk7IH0gfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IHZvaWQgMDtcbmV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gMTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhrZXksIGxhc3RJZCwgb3B0aW9ucykge1xuICAgIGNvbnN0IGFyZ3MgPSBbJ1hTRVRJRCcsIGtleSwgbGFzdElkXTtcbiAgICBpZiAob3B0aW9ucz8uRU5UUklFU0FEREVEKSB7XG4gICAgICAgIGFyZ3MucHVzaCgnRU5UUklFU0FEREVEJywgb3B0aW9ucy5FTlRSSUVTQURERUQudG9TdHJpbmcoKSk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zPy5NQVhERUxFVEVESUQpIHtcbiAgICAgICAgYXJncy5wdXNoKCdNQVhERUxFVEVESUQnLCBvcHRpb25zLk1BWERFTEVURURJRCk7XG4gICAgfVxuICAgIHJldHVybiBhcmdzO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IHZvaWQgMDtcbmV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gMTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhrZXksIHN0cmF0ZWd5LCB0aHJlc2hvbGQsIG9wdGlvbnMpIHtcbiAgICBjb25zdCBhcmdzID0gWydYVFJJTScsIGtleSwgc3RyYXRlZ3ldO1xuICAgIGlmIChvcHRpb25zPy5zdHJhdGVneU1vZGlmaWVyKSB7XG4gICAgICAgIGFyZ3MucHVzaChvcHRpb25zLnN0cmF0ZWd5TW9kaWZpZXIpO1xuICAgIH1cbiAgICBhcmdzLnB1c2godGhyZXNob2xkLnRvU3RyaW5nKCkpO1xuICAgIGlmIChvcHRpb25zPy5MSU1JVCkge1xuICAgICAgICBhcmdzLnB1c2goJ0xJTUlUJywgb3B0aW9ucy5MSU1JVC50b1N0cmluZygpKTtcbiAgICB9XG4gICAgcmV0dXJuIGFyZ3M7XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybVJlcGx5ID0gZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IHZvaWQgMDtcbmNvbnN0IGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEgPSByZXF1aXJlKFwiLi9nZW5lcmljLXRyYW5zZm9ybWVyc1wiKTtcbmV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gMTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhrZXksIG1lbWJlcnMsIG9wdGlvbnMpIHtcbiAgICBjb25zdCBhcmdzID0gWydaQUREJywga2V5XTtcbiAgICBpZiAob3B0aW9ucz8uTlgpIHtcbiAgICAgICAgYXJncy5wdXNoKCdOWCcpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgaWYgKG9wdGlvbnM/LlhYKSB7XG4gICAgICAgICAgICBhcmdzLnB1c2goJ1hYJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnM/LkdUKSB7XG4gICAgICAgICAgICBhcmdzLnB1c2goJ0dUJyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAob3B0aW9ucz8uTFQpIHtcbiAgICAgICAgICAgIGFyZ3MucHVzaCgnTFQnKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAob3B0aW9ucz8uQ0gpIHtcbiAgICAgICAgYXJncy5wdXNoKCdDSCcpO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucz8uSU5DUikge1xuICAgICAgICBhcmdzLnB1c2goJ0lOQ1InKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCB7IHNjb3JlLCB2YWx1ZSB9IG9mIChBcnJheS5pc0FycmF5KG1lbWJlcnMpID8gbWVtYmVycyA6IFttZW1iZXJzXSkpIHtcbiAgICAgICAgYXJncy5wdXNoKCgwLCBnZW5lcmljX3RyYW5zZm9ybWVyc18xLnRyYW5zZm9ybU51bWJlckluZmluaXR5QXJndW1lbnQpKHNjb3JlKSwgdmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gYXJncztcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xudmFyIGdlbmVyaWNfdHJhbnNmb3JtZXJzXzIgPSByZXF1aXJlKFwiLi9nZW5lcmljLXRyYW5zZm9ybWVyc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInRyYW5zZm9ybVJlcGx5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBnZW5lcmljX3RyYW5zZm9ybWVyc18yLnRyYW5zZm9ybU51bWJlckluZmluaXR5UmVwbHk7IH0gfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLklTX1JFQURfT05MWSA9IGV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gdm9pZCAwO1xuZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSAxO1xuZXhwb3J0cy5JU19SRUFEX09OTFkgPSB0cnVlO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGtleSkge1xuICAgIHJldHVybiBbJ1pDQVJEJywga2V5XTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gZXhwb3J0cy5JU19SRUFEX09OTFkgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IHZvaWQgMDtcbmNvbnN0IGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEgPSByZXF1aXJlKFwiLi9nZW5lcmljLXRyYW5zZm9ybWVyc1wiKTtcbmV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gMTtcbmV4cG9ydHMuSVNfUkVBRF9PTkxZID0gdHJ1ZTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhrZXksIG1pbiwgbWF4KSB7XG4gICAgcmV0dXJuIFtcbiAgICAgICAgJ1pDT1VOVCcsXG4gICAgICAgIGtleSxcbiAgICAgICAgKDAsIGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEudHJhbnNmb3JtU3RyaW5nTnVtYmVySW5maW5pdHlBcmd1bWVudCkobWluKSxcbiAgICAgICAgKDAsIGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEudHJhbnNmb3JtU3RyaW5nTnVtYmVySW5maW5pdHlBcmd1bWVudCkobWF4KVxuICAgIF07XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IGV4cG9ydHMuSVNfUkVBRF9PTkxZID0gZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSB2b2lkIDA7XG5jb25zdCBnZW5lcmljX3RyYW5zZm9ybWVyc18xID0gcmVxdWlyZShcIi4vZ2VuZXJpYy10cmFuc2Zvcm1lcnNcIik7XG5leHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IDI7XG5leHBvcnRzLklTX1JFQURfT05MWSA9IHRydWU7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMoa2V5cykge1xuICAgIHJldHVybiAoMCwgZ2VuZXJpY190cmFuc2Zvcm1lcnNfMS5wdXNoVmVyZGljdEFyZ3VtZW50KShbJ1pESUZGJ10sIGtleXMpO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1SZXBseSA9IGV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gZXhwb3J0cy5JU19SRUFEX09OTFkgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IHZvaWQgMDtcbmNvbnN0IFpESUZGXzEgPSByZXF1aXJlKFwiLi9aRElGRlwiKTtcbnZhciBaRElGRl8yID0gcmVxdWlyZShcIi4vWkRJRkZcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJGSVJTVF9LRVlfSU5ERVhcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFpESUZGXzIuRklSU1RfS0VZX0lOREVYOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiSVNfUkVBRF9PTkxZXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBaRElGRl8yLklTX1JFQURfT05MWTsgfSB9KTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyguLi5hcmdzKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgICAgLi4uKDAsIFpESUZGXzEudHJhbnNmb3JtQXJndW1lbnRzKSguLi5hcmdzKSxcbiAgICAgICAgJ1dJVEhTQ09SRVMnXG4gICAgXTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xudmFyIGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEgPSByZXF1aXJlKFwiLi9nZW5lcmljLXRyYW5zZm9ybWVyc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInRyYW5zZm9ybVJlcGx5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBnZW5lcmljX3RyYW5zZm9ybWVyc18xLnRyYW5zZm9ybVNvcnRlZFNldFdpdGhTY29yZXNSZXBseTsgfSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IGV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gdm9pZCAwO1xuY29uc3QgZ2VuZXJpY190cmFuc2Zvcm1lcnNfMSA9IHJlcXVpcmUoXCIuL2dlbmVyaWMtdHJhbnNmb3JtZXJzXCIpO1xuZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSAxO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGRlc3RpbmF0aW9uLCBrZXlzKSB7XG4gICAgcmV0dXJuICgwLCBnZW5lcmljX3RyYW5zZm9ybWVyc18xLnB1c2hWZXJkaWN0QXJndW1lbnQpKFsnWkRJRkZTVE9SRScsIGRlc3RpbmF0aW9uXSwga2V5cyk7XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybVJlcGx5ID0gZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IHZvaWQgMDtcbmNvbnN0IGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEgPSByZXF1aXJlKFwiLi9nZW5lcmljLXRyYW5zZm9ybWVyc1wiKTtcbmV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gMTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhrZXksIGluY3JlbWVudCwgbWVtYmVyKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgICAgJ1pJTkNSQlknLFxuICAgICAgICBrZXksXG4gICAgICAgICgwLCBnZW5lcmljX3RyYW5zZm9ybWVyc18xLnRyYW5zZm9ybU51bWJlckluZmluaXR5QXJndW1lbnQpKGluY3JlbWVudCksXG4gICAgICAgIG1lbWJlclxuICAgIF07XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbnZhciBnZW5lcmljX3RyYW5zZm9ybWVyc18yID0gcmVxdWlyZShcIi4vZ2VuZXJpYy10cmFuc2Zvcm1lcnNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ0cmFuc2Zvcm1SZXBseVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZ2VuZXJpY190cmFuc2Zvcm1lcnNfMi50cmFuc2Zvcm1OdW1iZXJJbmZpbml0eVJlcGx5OyB9IH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gZXhwb3J0cy5JU19SRUFEX09OTFkgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IHZvaWQgMDtcbmNvbnN0IGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEgPSByZXF1aXJlKFwiLi9nZW5lcmljLXRyYW5zZm9ybWVyc1wiKTtcbmV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gMjtcbmV4cG9ydHMuSVNfUkVBRF9PTkxZID0gdHJ1ZTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhrZXlzLCBvcHRpb25zKSB7XG4gICAgY29uc3QgYXJncyA9ICgwLCBnZW5lcmljX3RyYW5zZm9ybWVyc18xLnB1c2hWZXJkaWN0QXJndW1lbnQpKFsnWklOVEVSJ10sIGtleXMpO1xuICAgIGlmIChvcHRpb25zPy5XRUlHSFRTKSB7XG4gICAgICAgIGFyZ3MucHVzaCgnV0VJR0hUUycsIC4uLm9wdGlvbnMuV0VJR0hUUy5tYXAod2VpZ2h0ID0+IHdlaWdodC50b1N0cmluZygpKSk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zPy5BR0dSRUdBVEUpIHtcbiAgICAgICAgYXJncy5wdXNoKCdBR0dSRUdBVEUnLCBvcHRpb25zLkFHR1JFR0FURSk7XG4gICAgfVxuICAgIHJldHVybiBhcmdzO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1SZXBseSA9IGV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gZXhwb3J0cy5JU19SRUFEX09OTFkgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IHZvaWQgMDtcbmNvbnN0IFpJTlRFUl8xID0gcmVxdWlyZShcIi4vWklOVEVSXCIpO1xudmFyIFpJTlRFUl8yID0gcmVxdWlyZShcIi4vWklOVEVSXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiRklSU1RfS0VZX0lOREVYXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBaSU5URVJfMi5GSVJTVF9LRVlfSU5ERVg7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJJU19SRUFEX09OTFlcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFpJTlRFUl8yLklTX1JFQURfT05MWTsgfSB9KTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyguLi5hcmdzKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgICAgLi4uKDAsIFpJTlRFUl8xLnRyYW5zZm9ybUFyZ3VtZW50cykoLi4uYXJncyksXG4gICAgICAgICdXSVRIU0NPUkVTJ1xuICAgIF07XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbnZhciBnZW5lcmljX3RyYW5zZm9ybWVyc18xID0gcmVxdWlyZShcIi4vZ2VuZXJpYy10cmFuc2Zvcm1lcnNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ0cmFuc2Zvcm1SZXBseVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZ2VuZXJpY190cmFuc2Zvcm1lcnNfMS50cmFuc2Zvcm1Tb3J0ZWRTZXRXaXRoU2NvcmVzUmVwbHk7IH0gfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLklTX1JFQURfT05MWSA9IGV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gdm9pZCAwO1xuY29uc3QgZ2VuZXJpY190cmFuc2Zvcm1lcnNfMSA9IHJlcXVpcmUoXCIuL2dlbmVyaWMtdHJhbnNmb3JtZXJzXCIpO1xuZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSAyO1xuZXhwb3J0cy5JU19SRUFEX09OTFkgPSB0cnVlO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGtleXMsIGxpbWl0KSB7XG4gICAgY29uc3QgYXJncyA9ICgwLCBnZW5lcmljX3RyYW5zZm9ybWVyc18xLnB1c2hWZXJkaWN0QXJndW1lbnQpKFsnWklOVEVSQ0FSRCddLCBrZXlzKTtcbiAgICBpZiAobGltaXQpIHtcbiAgICAgICAgYXJncy5wdXNoKCdMSU1JVCcsIGxpbWl0LnRvU3RyaW5nKCkpO1xuICAgIH1cbiAgICByZXR1cm4gYXJncztcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSB2b2lkIDA7XG5jb25zdCBnZW5lcmljX3RyYW5zZm9ybWVyc18xID0gcmVxdWlyZShcIi4vZ2VuZXJpYy10cmFuc2Zvcm1lcnNcIik7XG5leHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IDE7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMoZGVzdGluYXRpb24sIGtleXMsIG9wdGlvbnMpIHtcbiAgICBjb25zdCBhcmdzID0gKDAsIGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEucHVzaFZlcmRpY3RBcmd1bWVudCkoWydaSU5URVJTVE9SRScsIGRlc3RpbmF0aW9uXSwga2V5cyk7XG4gICAgaWYgKG9wdGlvbnM/LldFSUdIVFMpIHtcbiAgICAgICAgYXJncy5wdXNoKCdXRUlHSFRTJywgLi4ub3B0aW9ucy5XRUlHSFRTLm1hcCh3ZWlnaHQgPT4gd2VpZ2h0LnRvU3RyaW5nKCkpKTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnM/LkFHR1JFR0FURSkge1xuICAgICAgICBhcmdzLnB1c2goJ0FHR1JFR0FURScsIG9wdGlvbnMuQUdHUkVHQVRFKTtcbiAgICB9XG4gICAgcmV0dXJuIGFyZ3M7XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IGV4cG9ydHMuSVNfUkVBRF9PTkxZID0gZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSB2b2lkIDA7XG5leHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IDE7XG5leHBvcnRzLklTX1JFQURfT05MWSA9IHRydWU7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMoa2V5LCBtaW4sIG1heCkge1xuICAgIHJldHVybiBbXG4gICAgICAgICdaTEVYQ09VTlQnLFxuICAgICAgICBrZXksXG4gICAgICAgIG1pbixcbiAgICAgICAgbWF4XG4gICAgXTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtUmVwbHkgPSBleHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IGV4cG9ydHMuSVNfUkVBRF9PTkxZID0gZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSB2b2lkIDA7XG5jb25zdCBnZW5lcmljX3RyYW5zZm9ybWVyc18xID0gcmVxdWlyZShcIi4vZ2VuZXJpYy10cmFuc2Zvcm1lcnNcIik7XG5leHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IDE7XG5leHBvcnRzLklTX1JFQURfT05MWSA9IHRydWU7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMoa2V5LCBtZW1iZXIpIHtcbiAgICByZXR1cm4gKDAsIGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEucHVzaFZlcmRpY3RBcmd1bWVudHMpKFsnWk1TQ09SRScsIGtleV0sIG1lbWJlcik7XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbnZhciBnZW5lcmljX3RyYW5zZm9ybWVyc18yID0gcmVxdWlyZShcIi4vZ2VuZXJpYy10cmFuc2Zvcm1lcnNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ0cmFuc2Zvcm1SZXBseVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZ2VuZXJpY190cmFuc2Zvcm1lcnNfMi50cmFuc2Zvcm1OdW1iZXJJbmZpbml0eU51bGxBcnJheVJlcGx5OyB9IH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtUmVwbHkgPSBleHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IGV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gdm9pZCAwO1xuZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSAxO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGtleSkge1xuICAgIHJldHVybiBbXG4gICAgICAgICdaUE9QTUFYJyxcbiAgICAgICAga2V5XG4gICAgXTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xudmFyIGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEgPSByZXF1aXJlKFwiLi9nZW5lcmljLXRyYW5zZm9ybWVyc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInRyYW5zZm9ybVJlcGx5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBnZW5lcmljX3RyYW5zZm9ybWVyc18xLnRyYW5zZm9ybVNvcnRlZFNldE1lbWJlck51bGxSZXBseTsgfSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybVJlcGx5ID0gZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IHZvaWQgMDtcbmNvbnN0IFpQT1BNQVhfMSA9IHJlcXVpcmUoXCIuL1pQT1BNQVhcIik7XG52YXIgWlBPUE1BWF8yID0gcmVxdWlyZShcIi4vWlBPUE1BWFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkZJUlNUX0tFWV9JTkRFWFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gWlBPUE1BWF8yLkZJUlNUX0tFWV9JTkRFWDsgfSB9KTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhrZXksIGNvdW50KSB7XG4gICAgcmV0dXJuIFtcbiAgICAgICAgLi4uKDAsIFpQT1BNQVhfMS50cmFuc2Zvcm1Bcmd1bWVudHMpKGtleSksXG4gICAgICAgIGNvdW50LnRvU3RyaW5nKClcbiAgICBdO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG52YXIgZ2VuZXJpY190cmFuc2Zvcm1lcnNfMSA9IHJlcXVpcmUoXCIuL2dlbmVyaWMtdHJhbnNmb3JtZXJzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidHJhbnNmb3JtUmVwbHlcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEudHJhbnNmb3JtU29ydGVkU2V0V2l0aFNjb3Jlc1JlcGx5OyB9IH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtUmVwbHkgPSBleHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IGV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gdm9pZCAwO1xuZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSAxO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGtleSkge1xuICAgIHJldHVybiBbXG4gICAgICAgICdaUE9QTUlOJyxcbiAgICAgICAga2V5XG4gICAgXTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xudmFyIGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEgPSByZXF1aXJlKFwiLi9nZW5lcmljLXRyYW5zZm9ybWVyc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInRyYW5zZm9ybVJlcGx5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBnZW5lcmljX3RyYW5zZm9ybWVyc18xLnRyYW5zZm9ybVNvcnRlZFNldE1lbWJlck51bGxSZXBseTsgfSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybVJlcGx5ID0gZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IHZvaWQgMDtcbmNvbnN0IFpQT1BNSU5fMSA9IHJlcXVpcmUoXCIuL1pQT1BNSU5cIik7XG52YXIgWlBPUE1JTl8yID0gcmVxdWlyZShcIi4vWlBPUE1JTlwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkZJUlNUX0tFWV9JTkRFWFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gWlBPUE1JTl8yLkZJUlNUX0tFWV9JTkRFWDsgfSB9KTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhrZXksIGNvdW50KSB7XG4gICAgcmV0dXJuIFtcbiAgICAgICAgLi4uKDAsIFpQT1BNSU5fMS50cmFuc2Zvcm1Bcmd1bWVudHMpKGtleSksXG4gICAgICAgIGNvdW50LnRvU3RyaW5nKClcbiAgICBdO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG52YXIgZ2VuZXJpY190cmFuc2Zvcm1lcnNfMSA9IHJlcXVpcmUoXCIuL2dlbmVyaWMtdHJhbnNmb3JtZXJzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidHJhbnNmb3JtUmVwbHlcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEudHJhbnNmb3JtU29ydGVkU2V0V2l0aFNjb3Jlc1JlcGx5OyB9IH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gZXhwb3J0cy5JU19SRUFEX09OTFkgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IHZvaWQgMDtcbmV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gMTtcbmV4cG9ydHMuSVNfUkVBRF9PTkxZID0gdHJ1ZTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhrZXkpIHtcbiAgICByZXR1cm4gWydaUkFORE1FTUJFUicsIGtleV07XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IGV4cG9ydHMuSVNfUkVBRF9PTkxZID0gZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSB2b2lkIDA7XG5jb25zdCBaUkFORE1FTUJFUl8xID0gcmVxdWlyZShcIi4vWlJBTkRNRU1CRVJcIik7XG52YXIgWlJBTkRNRU1CRVJfMiA9IHJlcXVpcmUoXCIuL1pSQU5ETUVNQkVSXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiRklSU1RfS0VZX0lOREVYXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBaUkFORE1FTUJFUl8yLkZJUlNUX0tFWV9JTkRFWDsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIklTX1JFQURfT05MWVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gWlJBTkRNRU1CRVJfMi5JU19SRUFEX09OTFk7IH0gfSk7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMoa2V5LCBjb3VudCkge1xuICAgIHJldHVybiBbXG4gICAgICAgIC4uLigwLCBaUkFORE1FTUJFUl8xLnRyYW5zZm9ybUFyZ3VtZW50cykoa2V5KSxcbiAgICAgICAgY291bnQudG9TdHJpbmcoKVxuICAgIF07XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybVJlcGx5ID0gZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLklTX1JFQURfT05MWSA9IGV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gdm9pZCAwO1xuY29uc3QgWlJBTkRNRU1CRVJfQ09VTlRfMSA9IHJlcXVpcmUoXCIuL1pSQU5ETUVNQkVSX0NPVU5UXCIpO1xudmFyIFpSQU5ETUVNQkVSX0NPVU5UXzIgPSByZXF1aXJlKFwiLi9aUkFORE1FTUJFUl9DT1VOVFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkZJUlNUX0tFWV9JTkRFWFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gWlJBTkRNRU1CRVJfQ09VTlRfMi5GSVJTVF9LRVlfSU5ERVg7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJJU19SRUFEX09OTFlcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFpSQU5ETUVNQkVSX0NPVU5UXzIuSVNfUkVBRF9PTkxZOyB9IH0pO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKC4uLmFyZ3MpIHtcbiAgICByZXR1cm4gW1xuICAgICAgICAuLi4oMCwgWlJBTkRNRU1CRVJfQ09VTlRfMS50cmFuc2Zvcm1Bcmd1bWVudHMpKC4uLmFyZ3MpLFxuICAgICAgICAnV0lUSFNDT1JFUydcbiAgICBdO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG52YXIgZ2VuZXJpY190cmFuc2Zvcm1lcnNfMSA9IHJlcXVpcmUoXCIuL2dlbmVyaWMtdHJhbnNmb3JtZXJzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidHJhbnNmb3JtUmVwbHlcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEudHJhbnNmb3JtU29ydGVkU2V0V2l0aFNjb3Jlc1JlcGx5OyB9IH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gZXhwb3J0cy5JU19SRUFEX09OTFkgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IHZvaWQgMDtcbmNvbnN0IGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEgPSByZXF1aXJlKFwiLi9nZW5lcmljLXRyYW5zZm9ybWVyc1wiKTtcbmV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gMTtcbmV4cG9ydHMuSVNfUkVBRF9PTkxZID0gdHJ1ZTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhrZXksIG1pbiwgbWF4LCBvcHRpb25zKSB7XG4gICAgY29uc3QgYXJncyA9IFtcbiAgICAgICAgJ1pSQU5HRScsXG4gICAgICAgIGtleSxcbiAgICAgICAgKDAsIGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEudHJhbnNmb3JtU3RyaW5nTnVtYmVySW5maW5pdHlBcmd1bWVudCkobWluKSxcbiAgICAgICAgKDAsIGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEudHJhbnNmb3JtU3RyaW5nTnVtYmVySW5maW5pdHlBcmd1bWVudCkobWF4KVxuICAgIF07XG4gICAgc3dpdGNoIChvcHRpb25zPy5CWSkge1xuICAgICAgICBjYXNlICdTQ09SRSc6XG4gICAgICAgICAgICBhcmdzLnB1c2goJ0JZU0NPUkUnKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdMRVgnOlxuICAgICAgICAgICAgYXJncy5wdXNoKCdCWUxFWCcpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGlmIChvcHRpb25zPy5SRVYpIHtcbiAgICAgICAgYXJncy5wdXNoKCdSRVYnKTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnM/LkxJTUlUKSB7XG4gICAgICAgIGFyZ3MucHVzaCgnTElNSVQnLCBvcHRpb25zLkxJTUlULm9mZnNldC50b1N0cmluZygpLCBvcHRpb25zLkxJTUlULmNvdW50LnRvU3RyaW5nKCkpO1xuICAgIH1cbiAgICByZXR1cm4gYXJncztcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtUmVwbHkgPSBleHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IGV4cG9ydHMuSVNfUkVBRF9PTkxZID0gZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSB2b2lkIDA7XG5jb25zdCBaUkFOR0VfMSA9IHJlcXVpcmUoXCIuL1pSQU5HRVwiKTtcbnZhciBaUkFOR0VfMiA9IHJlcXVpcmUoXCIuL1pSQU5HRVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkZJUlNUX0tFWV9JTkRFWFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gWlJBTkdFXzIuRklSU1RfS0VZX0lOREVYOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiSVNfUkVBRF9PTkxZXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBaUkFOR0VfMi5JU19SRUFEX09OTFk7IH0gfSk7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMoLi4uYXJncykge1xuICAgIHJldHVybiBbXG4gICAgICAgIC4uLigwLCBaUkFOR0VfMS50cmFuc2Zvcm1Bcmd1bWVudHMpKC4uLmFyZ3MpLFxuICAgICAgICAnV0lUSFNDT1JFUydcbiAgICBdO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG52YXIgZ2VuZXJpY190cmFuc2Zvcm1lcnNfMSA9IHJlcXVpcmUoXCIuL2dlbmVyaWMtdHJhbnNmb3JtZXJzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidHJhbnNmb3JtUmVwbHlcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEudHJhbnNmb3JtU29ydGVkU2V0V2l0aFNjb3Jlc1JlcGx5OyB9IH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gZXhwb3J0cy5JU19SRUFEX09OTFkgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IHZvaWQgMDtcbmNvbnN0IGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEgPSByZXF1aXJlKFwiLi9nZW5lcmljLXRyYW5zZm9ybWVyc1wiKTtcbmV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gMTtcbmV4cG9ydHMuSVNfUkVBRF9PTkxZID0gdHJ1ZTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhrZXksIG1pbiwgbWF4LCBvcHRpb25zKSB7XG4gICAgY29uc3QgYXJncyA9IFtcbiAgICAgICAgJ1pSQU5HRUJZTEVYJyxcbiAgICAgICAga2V5LFxuICAgICAgICAoMCwgZ2VuZXJpY190cmFuc2Zvcm1lcnNfMS50cmFuc2Zvcm1TdHJpbmdOdW1iZXJJbmZpbml0eUFyZ3VtZW50KShtaW4pLFxuICAgICAgICAoMCwgZ2VuZXJpY190cmFuc2Zvcm1lcnNfMS50cmFuc2Zvcm1TdHJpbmdOdW1iZXJJbmZpbml0eUFyZ3VtZW50KShtYXgpXG4gICAgXTtcbiAgICBpZiAob3B0aW9ucz8uTElNSVQpIHtcbiAgICAgICAgYXJncy5wdXNoKCdMSU1JVCcsIG9wdGlvbnMuTElNSVQub2Zmc2V0LnRvU3RyaW5nKCksIG9wdGlvbnMuTElNSVQuY291bnQudG9TdHJpbmcoKSk7XG4gICAgfVxuICAgIHJldHVybiBhcmdzO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLklTX1JFQURfT05MWSA9IGV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gdm9pZCAwO1xuY29uc3QgZ2VuZXJpY190cmFuc2Zvcm1lcnNfMSA9IHJlcXVpcmUoXCIuL2dlbmVyaWMtdHJhbnNmb3JtZXJzXCIpO1xuZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSAxO1xuZXhwb3J0cy5JU19SRUFEX09OTFkgPSB0cnVlO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGtleSwgbWluLCBtYXgsIG9wdGlvbnMpIHtcbiAgICBjb25zdCBhcmdzID0gW1xuICAgICAgICAnWlJBTkdFQllTQ09SRScsXG4gICAgICAgIGtleSxcbiAgICAgICAgKDAsIGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEudHJhbnNmb3JtU3RyaW5nTnVtYmVySW5maW5pdHlBcmd1bWVudCkobWluKSxcbiAgICAgICAgKDAsIGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEudHJhbnNmb3JtU3RyaW5nTnVtYmVySW5maW5pdHlBcmd1bWVudCkobWF4KVxuICAgIF07XG4gICAgaWYgKG9wdGlvbnM/LkxJTUlUKSB7XG4gICAgICAgIGFyZ3MucHVzaCgnTElNSVQnLCBvcHRpb25zLkxJTUlULm9mZnNldC50b1N0cmluZygpLCBvcHRpb25zLkxJTUlULmNvdW50LnRvU3RyaW5nKCkpO1xuICAgIH1cbiAgICByZXR1cm4gYXJncztcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtUmVwbHkgPSBleHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IGV4cG9ydHMuSVNfUkVBRF9PTkxZID0gZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSB2b2lkIDA7XG5jb25zdCBaUkFOR0VCWVNDT1JFXzEgPSByZXF1aXJlKFwiLi9aUkFOR0VCWVNDT1JFXCIpO1xudmFyIFpSQU5HRUJZU0NPUkVfMiA9IHJlcXVpcmUoXCIuL1pSQU5HRUJZU0NPUkVcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJGSVJTVF9LRVlfSU5ERVhcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFpSQU5HRUJZU0NPUkVfMi5GSVJTVF9LRVlfSU5ERVg7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJJU19SRUFEX09OTFlcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFpSQU5HRUJZU0NPUkVfMi5JU19SRUFEX09OTFk7IH0gfSk7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMoa2V5LCBtaW4sIG1heCwgb3B0aW9ucykge1xuICAgIHJldHVybiBbXG4gICAgICAgIC4uLigwLCBaUkFOR0VCWVNDT1JFXzEudHJhbnNmb3JtQXJndW1lbnRzKShrZXksIG1pbiwgbWF4LCBvcHRpb25zKSxcbiAgICAgICAgJ1dJVEhTQ09SRVMnXG4gICAgXTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xudmFyIGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEgPSByZXF1aXJlKFwiLi9nZW5lcmljLXRyYW5zZm9ybWVyc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInRyYW5zZm9ybVJlcGx5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBnZW5lcmljX3RyYW5zZm9ybWVyc18xLnRyYW5zZm9ybVNvcnRlZFNldFdpdGhTY29yZXNSZXBseTsgfSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybVJlcGx5ID0gZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IHZvaWQgMDtcbmNvbnN0IGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEgPSByZXF1aXJlKFwiLi9nZW5lcmljLXRyYW5zZm9ybWVyc1wiKTtcbmV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gMTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhkc3QsIHNyYywgbWluLCBtYXgsIG9wdGlvbnMpIHtcbiAgICBjb25zdCBhcmdzID0gW1xuICAgICAgICAnWlJBTkdFU1RPUkUnLFxuICAgICAgICBkc3QsXG4gICAgICAgIHNyYyxcbiAgICAgICAgKDAsIGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEudHJhbnNmb3JtU3RyaW5nTnVtYmVySW5maW5pdHlBcmd1bWVudCkobWluKSxcbiAgICAgICAgKDAsIGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEudHJhbnNmb3JtU3RyaW5nTnVtYmVySW5maW5pdHlBcmd1bWVudCkobWF4KVxuICAgIF07XG4gICAgc3dpdGNoIChvcHRpb25zPy5CWSkge1xuICAgICAgICBjYXNlICdTQ09SRSc6XG4gICAgICAgICAgICBhcmdzLnB1c2goJ0JZU0NPUkUnKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdMRVgnOlxuICAgICAgICAgICAgYXJncy5wdXNoKCdCWUxFWCcpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGlmIChvcHRpb25zPy5SRVYpIHtcbiAgICAgICAgYXJncy5wdXNoKCdSRVYnKTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnM/LkxJTUlUKSB7XG4gICAgICAgIGFyZ3MucHVzaCgnTElNSVQnLCBvcHRpb25zLkxJTUlULm9mZnNldC50b1N0cmluZygpLCBvcHRpb25zLkxJTUlULmNvdW50LnRvU3RyaW5nKCkpO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucz8uV0lUSFNDT1JFUykge1xuICAgICAgICBhcmdzLnB1c2goJ1dJVEhTQ09SRVMnKTtcbiAgICB9XG4gICAgcmV0dXJuIGFyZ3M7XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbmZ1bmN0aW9uIHRyYW5zZm9ybVJlcGx5KHJlcGx5KSB7XG4gICAgaWYgKHR5cGVvZiByZXBseSAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgVXBncmFkZSB0byBSZWRpcyA2LjIuNSBhbmQgdXAgKGh0dHBzOi8vZ2l0aHViLmNvbS9yZWRpcy9yZWRpcy9wdWxsLzkwODkpYCk7XG4gICAgfVxuICAgIHJldHVybiByZXBseTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtUmVwbHkgPSB0cmFuc2Zvcm1SZXBseTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IGV4cG9ydHMuSVNfUkVBRF9PTkxZID0gZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSB2b2lkIDA7XG5leHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IDE7XG5leHBvcnRzLklTX1JFQURfT05MWSA9IHRydWU7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMoa2V5LCBtZW1iZXIpIHtcbiAgICByZXR1cm4gWydaUkFOSycsIGtleSwgbWVtYmVyXTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSB2b2lkIDA7XG5jb25zdCBnZW5lcmljX3RyYW5zZm9ybWVyc18xID0gcmVxdWlyZShcIi4vZ2VuZXJpYy10cmFuc2Zvcm1lcnNcIik7XG5leHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IDE7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMoa2V5LCBtZW1iZXIpIHtcbiAgICByZXR1cm4gKDAsIGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEucHVzaFZlcmRpY3RBcmd1bWVudHMpKFsnWlJFTScsIGtleV0sIG1lbWJlcik7XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IGV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gdm9pZCAwO1xuY29uc3QgZ2VuZXJpY190cmFuc2Zvcm1lcnNfMSA9IHJlcXVpcmUoXCIuL2dlbmVyaWMtdHJhbnNmb3JtZXJzXCIpO1xuZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSAxO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGtleSwgbWluLCBtYXgpIHtcbiAgICByZXR1cm4gW1xuICAgICAgICAnWlJFTVJBTkdFQllMRVgnLFxuICAgICAgICBrZXksXG4gICAgICAgICgwLCBnZW5lcmljX3RyYW5zZm9ybWVyc18xLnRyYW5zZm9ybVN0cmluZ051bWJlckluZmluaXR5QXJndW1lbnQpKG1pbiksXG4gICAgICAgICgwLCBnZW5lcmljX3RyYW5zZm9ybWVyc18xLnRyYW5zZm9ybVN0cmluZ051bWJlckluZmluaXR5QXJndW1lbnQpKG1heClcbiAgICBdO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IHZvaWQgMDtcbmV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gMTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhrZXksIHN0YXJ0LCBzdG9wKSB7XG4gICAgcmV0dXJuIFsnWlJFTVJBTkdFQllSQU5LJywga2V5LCBzdGFydC50b1N0cmluZygpLCBzdG9wLnRvU3RyaW5nKCldO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IHZvaWQgMDtcbmNvbnN0IGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEgPSByZXF1aXJlKFwiLi9nZW5lcmljLXRyYW5zZm9ybWVyc1wiKTtcbmV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gMTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhrZXksIG1pbiwgbWF4KSB7XG4gICAgcmV0dXJuIFtcbiAgICAgICAgJ1pSRU1SQU5HRUJZU0NPUkUnLFxuICAgICAgICBrZXksXG4gICAgICAgICgwLCBnZW5lcmljX3RyYW5zZm9ybWVyc18xLnRyYW5zZm9ybVN0cmluZ051bWJlckluZmluaXR5QXJndW1lbnQpKG1pbiksXG4gICAgICAgICgwLCBnZW5lcmljX3RyYW5zZm9ybWVyc18xLnRyYW5zZm9ybVN0cmluZ051bWJlckluZmluaXR5QXJndW1lbnQpKG1heClcbiAgICBdO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLklTX1JFQURfT05MWSA9IGV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gdm9pZCAwO1xuZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSAxO1xuZXhwb3J0cy5JU19SRUFEX09OTFkgPSB0cnVlO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGtleSwgbWVtYmVyKSB7XG4gICAgcmV0dXJuIFsnWlJFVlJBTksnLCBrZXksIG1lbWJlcl07XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybVJlcGx5ID0gZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLklTX1JFQURfT05MWSA9IGV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gdm9pZCAwO1xuY29uc3QgZ2VuZXJpY190cmFuc2Zvcm1lcnNfMSA9IHJlcXVpcmUoXCIuL2dlbmVyaWMtdHJhbnNmb3JtZXJzXCIpO1xuZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSAxO1xuZXhwb3J0cy5JU19SRUFEX09OTFkgPSB0cnVlO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGtleSwgY3Vyc29yLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuICgwLCBnZW5lcmljX3RyYW5zZm9ybWVyc18xLnB1c2hTY2FuQXJndW1lbnRzKShbXG4gICAgICAgICdaU0NBTicsXG4gICAgICAgIGtleVxuICAgIF0sIGN1cnNvciwgb3B0aW9ucyk7XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbmZ1bmN0aW9uIHRyYW5zZm9ybVJlcGx5KFtjdXJzb3IsIHJhd01lbWJlcnNdKSB7XG4gICAgY29uc3QgcGFyc2VkTWVtYmVycyA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmF3TWVtYmVycy5sZW5ndGg7IGkgKz0gMikge1xuICAgICAgICBwYXJzZWRNZW1iZXJzLnB1c2goe1xuICAgICAgICAgICAgdmFsdWU6IHJhd01lbWJlcnNbaV0sXG4gICAgICAgICAgICBzY29yZTogKDAsIGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEudHJhbnNmb3JtTnVtYmVySW5maW5pdHlSZXBseSkocmF3TWVtYmVyc1tpICsgMV0pXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBjdXJzb3I6IE51bWJlcihjdXJzb3IpLFxuICAgICAgICBtZW1iZXJzOiBwYXJzZWRNZW1iZXJzXG4gICAgfTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtUmVwbHkgPSB0cmFuc2Zvcm1SZXBseTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybVJlcGx5ID0gZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLklTX1JFQURfT05MWSA9IGV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gdm9pZCAwO1xuZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSAxO1xuZXhwb3J0cy5JU19SRUFEX09OTFkgPSB0cnVlO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGtleSwgbWVtYmVyKSB7XG4gICAgcmV0dXJuIFsnWlNDT1JFJywga2V5LCBtZW1iZXJdO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG52YXIgZ2VuZXJpY190cmFuc2Zvcm1lcnNfMSA9IHJlcXVpcmUoXCIuL2dlbmVyaWMtdHJhbnNmb3JtZXJzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidHJhbnNmb3JtUmVwbHlcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEudHJhbnNmb3JtTnVtYmVySW5maW5pdHlOdWxsUmVwbHk7IH0gfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLklTX1JFQURfT05MWSA9IGV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gdm9pZCAwO1xuY29uc3QgZ2VuZXJpY190cmFuc2Zvcm1lcnNfMSA9IHJlcXVpcmUoXCIuL2dlbmVyaWMtdHJhbnNmb3JtZXJzXCIpO1xuZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSAyO1xuZXhwb3J0cy5JU19SRUFEX09OTFkgPSB0cnVlO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGtleXMsIG9wdGlvbnMpIHtcbiAgICBjb25zdCBhcmdzID0gKDAsIGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEucHVzaFZlcmRpY3RBcmd1bWVudCkoWydaVU5JT04nXSwga2V5cyk7XG4gICAgaWYgKG9wdGlvbnM/LldFSUdIVFMpIHtcbiAgICAgICAgYXJncy5wdXNoKCdXRUlHSFRTJywgLi4ub3B0aW9ucy5XRUlHSFRTLm1hcCh3ZWlnaHQgPT4gd2VpZ2h0LnRvU3RyaW5nKCkpKTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnM/LkFHR1JFR0FURSkge1xuICAgICAgICBhcmdzLnB1c2goJ0FHR1JFR0FURScsIG9wdGlvbnMuQUdHUkVHQVRFKTtcbiAgICB9XG4gICAgcmV0dXJuIGFyZ3M7XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybVJlcGx5ID0gZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLklTX1JFQURfT05MWSA9IGV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gdm9pZCAwO1xuY29uc3QgWlVOSU9OXzEgPSByZXF1aXJlKFwiLi9aVU5JT05cIik7XG52YXIgWlVOSU9OXzIgPSByZXF1aXJlKFwiLi9aVU5JT05cIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJGSVJTVF9LRVlfSU5ERVhcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFpVTklPTl8yLkZJUlNUX0tFWV9JTkRFWDsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIklTX1JFQURfT05MWVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gWlVOSU9OXzIuSVNfUkVBRF9PTkxZOyB9IH0pO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKC4uLmFyZ3MpIHtcbiAgICByZXR1cm4gW1xuICAgICAgICAuLi4oMCwgWlVOSU9OXzEudHJhbnNmb3JtQXJndW1lbnRzKSguLi5hcmdzKSxcbiAgICAgICAgJ1dJVEhTQ09SRVMnXG4gICAgXTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xudmFyIGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEgPSByZXF1aXJlKFwiLi9nZW5lcmljLXRyYW5zZm9ybWVyc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInRyYW5zZm9ybVJlcGx5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBnZW5lcmljX3RyYW5zZm9ybWVyc18xLnRyYW5zZm9ybVNvcnRlZFNldFdpdGhTY29yZXNSZXBseTsgfSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IGV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gdm9pZCAwO1xuY29uc3QgZ2VuZXJpY190cmFuc2Zvcm1lcnNfMSA9IHJlcXVpcmUoXCIuL2dlbmVyaWMtdHJhbnNmb3JtZXJzXCIpO1xuZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSAxO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGRlc3RpbmF0aW9uLCBrZXlzLCBvcHRpb25zKSB7XG4gICAgY29uc3QgYXJncyA9ICgwLCBnZW5lcmljX3RyYW5zZm9ybWVyc18xLnB1c2hWZXJkaWN0QXJndW1lbnQpKFsnWlVOSU9OU1RPUkUnLCBkZXN0aW5hdGlvbl0sIGtleXMpO1xuICAgIGlmIChvcHRpb25zPy5XRUlHSFRTKSB7XG4gICAgICAgIGFyZ3MucHVzaCgnV0VJR0hUUycsIC4uLm9wdGlvbnMuV0VJR0hUUy5tYXAod2VpZ2h0ID0+IHdlaWdodC50b1N0cmluZygpKSk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zPy5BR0dSRUdBVEUpIHtcbiAgICAgICAgYXJncy5wdXNoKCdBR0dSRUdBVEUnLCBvcHRpb25zLkFHR1JFR0FURSk7XG4gICAgfVxuICAgIHJldHVybiBhcmdzO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgQVBQRU5EID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL0FQUEVORFwiKTtcbmNvbnN0IEJJVENPVU5UID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL0JJVENPVU5UXCIpO1xuY29uc3QgQklURklFTERfUk8gPSByZXF1aXJlKFwiLi4vY29tbWFuZHMvQklURklFTERfUk9cIik7XG5jb25zdCBCSVRGSUVMRCA9IHJlcXVpcmUoXCIuLi9jb21tYW5kcy9CSVRGSUVMRFwiKTtcbmNvbnN0IEJJVE9QID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL0JJVE9QXCIpO1xuY29uc3QgQklUUE9TID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL0JJVFBPU1wiKTtcbmNvbnN0IEJMTU9WRSA9IHJlcXVpcmUoXCIuLi9jb21tYW5kcy9CTE1PVkVcIik7XG5jb25zdCBCTE1QT1AgPSByZXF1aXJlKFwiLi4vY29tbWFuZHMvQkxNUE9QXCIpO1xuY29uc3QgQkxQT1AgPSByZXF1aXJlKFwiLi4vY29tbWFuZHMvQkxQT1BcIik7XG5jb25zdCBCUlBPUCA9IHJlcXVpcmUoXCIuLi9jb21tYW5kcy9CUlBPUFwiKTtcbmNvbnN0IEJSUE9QTFBVU0ggPSByZXF1aXJlKFwiLi4vY29tbWFuZHMvQlJQT1BMUFVTSFwiKTtcbmNvbnN0IEJaTVBPUCA9IHJlcXVpcmUoXCIuLi9jb21tYW5kcy9CWk1QT1BcIik7XG5jb25zdCBCWlBPUE1BWCA9IHJlcXVpcmUoXCIuLi9jb21tYW5kcy9CWlBPUE1BWFwiKTtcbmNvbnN0IEJaUE9QTUlOID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL0JaUE9QTUlOXCIpO1xuY29uc3QgQ09QWSA9IHJlcXVpcmUoXCIuLi9jb21tYW5kcy9DT1BZXCIpO1xuY29uc3QgREVDUiA9IHJlcXVpcmUoXCIuLi9jb21tYW5kcy9ERUNSXCIpO1xuY29uc3QgREVDUkJZID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL0RFQ1JCWVwiKTtcbmNvbnN0IERFTCA9IHJlcXVpcmUoXCIuLi9jb21tYW5kcy9ERUxcIik7XG5jb25zdCBEVU1QID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL0RVTVBcIik7XG5jb25zdCBFVkFMX1JPID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL0VWQUxfUk9cIik7XG5jb25zdCBFVkFMID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL0VWQUxcIik7XG5jb25zdCBFVkFMU0hBX1JPID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL0VWQUxTSEFfUk9cIik7XG5jb25zdCBFVkFMU0hBID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL0VWQUxTSEFcIik7XG5jb25zdCBFWElTVFMgPSByZXF1aXJlKFwiLi4vY29tbWFuZHMvRVhJU1RTXCIpO1xuY29uc3QgRVhQSVJFID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL0VYUElSRVwiKTtcbmNvbnN0IEVYUElSRUFUID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL0VYUElSRUFUXCIpO1xuY29uc3QgRVhQSVJFVElNRSA9IHJlcXVpcmUoXCIuLi9jb21tYW5kcy9FWFBJUkVUSU1FXCIpO1xuY29uc3QgRkNBTExfUk8gPSByZXF1aXJlKFwiLi4vY29tbWFuZHMvRkNBTExfUk9cIik7XG5jb25zdCBGQ0FMTCA9IHJlcXVpcmUoXCIuLi9jb21tYW5kcy9GQ0FMTFwiKTtcbmNvbnN0IEdFT0FERCA9IHJlcXVpcmUoXCIuLi9jb21tYW5kcy9HRU9BRERcIik7XG5jb25zdCBHRU9ESVNUID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL0dFT0RJU1RcIik7XG5jb25zdCBHRU9IQVNIID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL0dFT0hBU0hcIik7XG5jb25zdCBHRU9QT1MgPSByZXF1aXJlKFwiLi4vY29tbWFuZHMvR0VPUE9TXCIpO1xuY29uc3QgR0VPUkFESVVTX1JPX1dJVEggPSByZXF1aXJlKFwiLi4vY29tbWFuZHMvR0VPUkFESVVTX1JPX1dJVEhcIik7XG5jb25zdCBHRU9SQURJVVNfUk8gPSByZXF1aXJlKFwiLi4vY29tbWFuZHMvR0VPUkFESVVTX1JPXCIpO1xuY29uc3QgR0VPUkFESVVTX1dJVEggPSByZXF1aXJlKFwiLi4vY29tbWFuZHMvR0VPUkFESVVTX1dJVEhcIik7XG5jb25zdCBHRU9SQURJVVMgPSByZXF1aXJlKFwiLi4vY29tbWFuZHMvR0VPUkFESVVTXCIpO1xuY29uc3QgR0VPUkFESVVTQllNRU1CRVJfUk9fV0lUSCA9IHJlcXVpcmUoXCIuLi9jb21tYW5kcy9HRU9SQURJVVNCWU1FTUJFUl9ST19XSVRIXCIpO1xuY29uc3QgR0VPUkFESVVTQllNRU1CRVJfUk8gPSByZXF1aXJlKFwiLi4vY29tbWFuZHMvR0VPUkFESVVTQllNRU1CRVJfUk9cIik7XG5jb25zdCBHRU9SQURJVVNCWU1FTUJFUl9XSVRIID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL0dFT1JBRElVU0JZTUVNQkVSX1dJVEhcIik7XG5jb25zdCBHRU9SQURJVVNCWU1FTUJFUiA9IHJlcXVpcmUoXCIuLi9jb21tYW5kcy9HRU9SQURJVVNCWU1FTUJFUlwiKTtcbmNvbnN0IEdFT1JBRElVU0JZTUVNQkVSU1RPUkUgPSByZXF1aXJlKFwiLi4vY29tbWFuZHMvR0VPUkFESVVTQllNRU1CRVJTVE9SRVwiKTtcbmNvbnN0IEdFT1JBRElVU1NUT1JFID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL0dFT1JBRElVU1NUT1JFXCIpO1xuY29uc3QgR0VPU0VBUkNIX1dJVEggPSByZXF1aXJlKFwiLi4vY29tbWFuZHMvR0VPU0VBUkNIX1dJVEhcIik7XG5jb25zdCBHRU9TRUFSQ0ggPSByZXF1aXJlKFwiLi4vY29tbWFuZHMvR0VPU0VBUkNIXCIpO1xuY29uc3QgR0VPU0VBUkNIU1RPUkUgPSByZXF1aXJlKFwiLi4vY29tbWFuZHMvR0VPU0VBUkNIU1RPUkVcIik7XG5jb25zdCBHRVQgPSByZXF1aXJlKFwiLi4vY29tbWFuZHMvR0VUXCIpO1xuY29uc3QgR0VUQklUID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL0dFVEJJVFwiKTtcbmNvbnN0IEdFVERFTCA9IHJlcXVpcmUoXCIuLi9jb21tYW5kcy9HRVRERUxcIik7XG5jb25zdCBHRVRFWCA9IHJlcXVpcmUoXCIuLi9jb21tYW5kcy9HRVRFWFwiKTtcbmNvbnN0IEdFVFJBTkdFID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL0dFVFJBTkdFXCIpO1xuY29uc3QgR0VUU0VUID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL0dFVFNFVFwiKTtcbmNvbnN0IEhERUwgPSByZXF1aXJlKFwiLi4vY29tbWFuZHMvSERFTFwiKTtcbmNvbnN0IEhFWElTVFMgPSByZXF1aXJlKFwiLi4vY29tbWFuZHMvSEVYSVNUU1wiKTtcbmNvbnN0IEhFWFBJUkUgPSByZXF1aXJlKFwiLi4vY29tbWFuZHMvSEVYUElSRVwiKTtcbmNvbnN0IEhFWFBJUkVBVCA9IHJlcXVpcmUoXCIuLi9jb21tYW5kcy9IRVhQSVJFQVRcIik7XG5jb25zdCBIRVhQSVJFVElNRSA9IHJlcXVpcmUoXCIuLi9jb21tYW5kcy9IRVhQSVJFVElNRVwiKTtcbmNvbnN0IEhHRVQgPSByZXF1aXJlKFwiLi4vY29tbWFuZHMvSEdFVFwiKTtcbmNvbnN0IEhHRVRBTEwgPSByZXF1aXJlKFwiLi4vY29tbWFuZHMvSEdFVEFMTFwiKTtcbmNvbnN0IEhJTkNSQlkgPSByZXF1aXJlKFwiLi4vY29tbWFuZHMvSElOQ1JCWVwiKTtcbmNvbnN0IEhJTkNSQllGTE9BVCA9IHJlcXVpcmUoXCIuLi9jb21tYW5kcy9ISU5DUkJZRkxPQVRcIik7XG5jb25zdCBIS0VZUyA9IHJlcXVpcmUoXCIuLi9jb21tYW5kcy9IS0VZU1wiKTtcbmNvbnN0IEhMRU4gPSByZXF1aXJlKFwiLi4vY29tbWFuZHMvSExFTlwiKTtcbmNvbnN0IEhNR0VUID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL0hNR0VUXCIpO1xuY29uc3QgSFBFUlNJU1QgPSByZXF1aXJlKFwiLi4vY29tbWFuZHMvSFBFUlNJU1RcIik7XG5jb25zdCBIUEVYUElSRSA9IHJlcXVpcmUoXCIuLi9jb21tYW5kcy9IUEVYUElSRVwiKTtcbmNvbnN0IEhQRVhQSVJFQVQgPSByZXF1aXJlKFwiLi4vY29tbWFuZHMvSFBFWFBJUkVBVFwiKTtcbmNvbnN0IEhQRVhQSVJFVElNRSA9IHJlcXVpcmUoXCIuLi9jb21tYW5kcy9IUEVYUElSRVRJTUVcIik7XG5jb25zdCBIUFRUTCA9IHJlcXVpcmUoXCIuLi9jb21tYW5kcy9IUFRUTFwiKTtcbmNvbnN0IEhSQU5ERklFTERfQ09VTlRfV0lUSFZBTFVFUyA9IHJlcXVpcmUoXCIuLi9jb21tYW5kcy9IUkFOREZJRUxEX0NPVU5UX1dJVEhWQUxVRVNcIik7XG5jb25zdCBIUkFOREZJRUxEX0NPVU5UID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL0hSQU5ERklFTERfQ09VTlRcIik7XG5jb25zdCBIUkFOREZJRUxEID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL0hSQU5ERklFTERcIik7XG5jb25zdCBIU0NBTiA9IHJlcXVpcmUoXCIuLi9jb21tYW5kcy9IU0NBTlwiKTtcbmNvbnN0IEhTQ0FOX05PVkFMVUVTID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL0hTQ0FOX05PVkFMVUVTXCIpO1xuY29uc3QgSFNFVCA9IHJlcXVpcmUoXCIuLi9jb21tYW5kcy9IU0VUXCIpO1xuY29uc3QgSFNFVE5YID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL0hTRVROWFwiKTtcbmNvbnN0IEhTVFJMRU4gPSByZXF1aXJlKFwiLi4vY29tbWFuZHMvSFNUUkxFTlwiKTtcbmNvbnN0IEhUVEwgPSByZXF1aXJlKFwiLi4vY29tbWFuZHMvSFRUTFwiKTtcbmNvbnN0IEhWQUxTID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL0hWQUxTXCIpO1xuY29uc3QgSU5DUiA9IHJlcXVpcmUoXCIuLi9jb21tYW5kcy9JTkNSXCIpO1xuY29uc3QgSU5DUkJZID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL0lOQ1JCWVwiKTtcbmNvbnN0IElOQ1JCWUZMT0FUID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL0lOQ1JCWUZMT0FUXCIpO1xuY29uc3QgTENTX0lEWF9XSVRITUFUQ0hMRU4gPSByZXF1aXJlKFwiLi4vY29tbWFuZHMvTENTX0lEWF9XSVRITUFUQ0hMRU5cIik7XG5jb25zdCBMQ1NfSURYID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL0xDU19JRFhcIik7XG5jb25zdCBMQ1NfTEVOID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL0xDU19MRU5cIik7XG5jb25zdCBMQ1MgPSByZXF1aXJlKFwiLi4vY29tbWFuZHMvTENTXCIpO1xuY29uc3QgTElOREVYID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL0xJTkRFWFwiKTtcbmNvbnN0IExJTlNFUlQgPSByZXF1aXJlKFwiLi4vY29tbWFuZHMvTElOU0VSVFwiKTtcbmNvbnN0IExMRU4gPSByZXF1aXJlKFwiLi4vY29tbWFuZHMvTExFTlwiKTtcbmNvbnN0IExNT1ZFID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL0xNT1ZFXCIpO1xuY29uc3QgTE1QT1AgPSByZXF1aXJlKFwiLi4vY29tbWFuZHMvTE1QT1BcIik7XG5jb25zdCBMUE9QX0NPVU5UID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL0xQT1BfQ09VTlRcIik7XG5jb25zdCBMUE9QID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL0xQT1BcIik7XG5jb25zdCBMUE9TX0NPVU5UID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL0xQT1NfQ09VTlRcIik7XG5jb25zdCBMUE9TID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL0xQT1NcIik7XG5jb25zdCBMUFVTSCA9IHJlcXVpcmUoXCIuLi9jb21tYW5kcy9MUFVTSFwiKTtcbmNvbnN0IExQVVNIWCA9IHJlcXVpcmUoXCIuLi9jb21tYW5kcy9MUFVTSFhcIik7XG5jb25zdCBMUkFOR0UgPSByZXF1aXJlKFwiLi4vY29tbWFuZHMvTFJBTkdFXCIpO1xuY29uc3QgTFJFTSA9IHJlcXVpcmUoXCIuLi9jb21tYW5kcy9MUkVNXCIpO1xuY29uc3QgTFNFVCA9IHJlcXVpcmUoXCIuLi9jb21tYW5kcy9MU0VUXCIpO1xuY29uc3QgTFRSSU0gPSByZXF1aXJlKFwiLi4vY29tbWFuZHMvTFRSSU1cIik7XG5jb25zdCBNR0VUID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL01HRVRcIik7XG5jb25zdCBNSUdSQVRFID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL01JR1JBVEVcIik7XG5jb25zdCBNU0VUID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL01TRVRcIik7XG5jb25zdCBNU0VUTlggPSByZXF1aXJlKFwiLi4vY29tbWFuZHMvTVNFVE5YXCIpO1xuY29uc3QgT0JKRUNUX0VOQ09ESU5HID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL09CSkVDVF9FTkNPRElOR1wiKTtcbmNvbnN0IE9CSkVDVF9GUkVRID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL09CSkVDVF9GUkVRXCIpO1xuY29uc3QgT0JKRUNUX0lETEVUSU1FID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL09CSkVDVF9JRExFVElNRVwiKTtcbmNvbnN0IE9CSkVDVF9SRUZDT1VOVCA9IHJlcXVpcmUoXCIuLi9jb21tYW5kcy9PQkpFQ1RfUkVGQ09VTlRcIik7XG5jb25zdCBQRVJTSVNUID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL1BFUlNJU1RcIik7XG5jb25zdCBQRVhQSVJFID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL1BFWFBJUkVcIik7XG5jb25zdCBQRVhQSVJFQVQgPSByZXF1aXJlKFwiLi4vY29tbWFuZHMvUEVYUElSRUFUXCIpO1xuY29uc3QgUEVYUElSRVRJTUUgPSByZXF1aXJlKFwiLi4vY29tbWFuZHMvUEVYUElSRVRJTUVcIik7XG5jb25zdCBQRkFERCA9IHJlcXVpcmUoXCIuLi9jb21tYW5kcy9QRkFERFwiKTtcbmNvbnN0IFBGQ09VTlQgPSByZXF1aXJlKFwiLi4vY29tbWFuZHMvUEZDT1VOVFwiKTtcbmNvbnN0IFBGTUVSR0UgPSByZXF1aXJlKFwiLi4vY29tbWFuZHMvUEZNRVJHRVwiKTtcbmNvbnN0IFBTRVRFWCA9IHJlcXVpcmUoXCIuLi9jb21tYW5kcy9QU0VURVhcIik7XG5jb25zdCBQVFRMID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL1BUVExcIik7XG5jb25zdCBQVUJMSVNIID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL1BVQkxJU0hcIik7XG5jb25zdCBSRU5BTUUgPSByZXF1aXJlKFwiLi4vY29tbWFuZHMvUkVOQU1FXCIpO1xuY29uc3QgUkVOQU1FTlggPSByZXF1aXJlKFwiLi4vY29tbWFuZHMvUkVOQU1FTlhcIik7XG5jb25zdCBSRVNUT1JFID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL1JFU1RPUkVcIik7XG5jb25zdCBSUE9QX0NPVU5UID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL1JQT1BfQ09VTlRcIik7XG5jb25zdCBSUE9QID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL1JQT1BcIik7XG5jb25zdCBSUE9QTFBVU0ggPSByZXF1aXJlKFwiLi4vY29tbWFuZHMvUlBPUExQVVNIXCIpO1xuY29uc3QgUlBVU0ggPSByZXF1aXJlKFwiLi4vY29tbWFuZHMvUlBVU0hcIik7XG5jb25zdCBSUFVTSFggPSByZXF1aXJlKFwiLi4vY29tbWFuZHMvUlBVU0hYXCIpO1xuY29uc3QgU0FERCA9IHJlcXVpcmUoXCIuLi9jb21tYW5kcy9TQUREXCIpO1xuY29uc3QgU0NBUkQgPSByZXF1aXJlKFwiLi4vY29tbWFuZHMvU0NBUkRcIik7XG5jb25zdCBTRElGRiA9IHJlcXVpcmUoXCIuLi9jb21tYW5kcy9TRElGRlwiKTtcbmNvbnN0IFNESUZGU1RPUkUgPSByZXF1aXJlKFwiLi4vY29tbWFuZHMvU0RJRkZTVE9SRVwiKTtcbmNvbnN0IFNFVCA9IHJlcXVpcmUoXCIuLi9jb21tYW5kcy9TRVRcIik7XG5jb25zdCBTRVRCSVQgPSByZXF1aXJlKFwiLi4vY29tbWFuZHMvU0VUQklUXCIpO1xuY29uc3QgU0VURVggPSByZXF1aXJlKFwiLi4vY29tbWFuZHMvU0VURVhcIik7XG5jb25zdCBTRVROWCA9IHJlcXVpcmUoXCIuLi9jb21tYW5kcy9TRVROWFwiKTtcbmNvbnN0IFNFVFJBTkdFID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL1NFVFJBTkdFXCIpO1xuY29uc3QgU0lOVEVSID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL1NJTlRFUlwiKTtcbmNvbnN0IFNJTlRFUkNBUkQgPSByZXF1aXJlKFwiLi4vY29tbWFuZHMvU0lOVEVSQ0FSRFwiKTtcbmNvbnN0IFNJTlRFUlNUT1JFID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL1NJTlRFUlNUT1JFXCIpO1xuY29uc3QgU0lTTUVNQkVSID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL1NJU01FTUJFUlwiKTtcbmNvbnN0IFNNRU1CRVJTID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL1NNRU1CRVJTXCIpO1xuY29uc3QgU01JU01FTUJFUiA9IHJlcXVpcmUoXCIuLi9jb21tYW5kcy9TTUlTTUVNQkVSXCIpO1xuY29uc3QgU01PVkUgPSByZXF1aXJlKFwiLi4vY29tbWFuZHMvU01PVkVcIik7XG5jb25zdCBTT1JUX1JPID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL1NPUlRfUk9cIik7XG5jb25zdCBTT1JUX1NUT1JFID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL1NPUlRfU1RPUkVcIik7XG5jb25zdCBTT1JUID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL1NPUlRcIik7XG5jb25zdCBTUE9QID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL1NQT1BcIik7XG5jb25zdCBTUFVCTElTSCA9IHJlcXVpcmUoXCIuLi9jb21tYW5kcy9TUFVCTElTSFwiKTtcbmNvbnN0IFNSQU5ETUVNQkVSX0NPVU5UID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL1NSQU5ETUVNQkVSX0NPVU5UXCIpO1xuY29uc3QgU1JBTkRNRU1CRVIgPSByZXF1aXJlKFwiLi4vY29tbWFuZHMvU1JBTkRNRU1CRVJcIik7XG5jb25zdCBTUkVNID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL1NSRU1cIik7XG5jb25zdCBTU0NBTiA9IHJlcXVpcmUoXCIuLi9jb21tYW5kcy9TU0NBTlwiKTtcbmNvbnN0IFNUUkxFTiA9IHJlcXVpcmUoXCIuLi9jb21tYW5kcy9TVFJMRU5cIik7XG5jb25zdCBTVU5JT04gPSByZXF1aXJlKFwiLi4vY29tbWFuZHMvU1VOSU9OXCIpO1xuY29uc3QgU1VOSU9OU1RPUkUgPSByZXF1aXJlKFwiLi4vY29tbWFuZHMvU1VOSU9OU1RPUkVcIik7XG5jb25zdCBUT1VDSCA9IHJlcXVpcmUoXCIuLi9jb21tYW5kcy9UT1VDSFwiKTtcbmNvbnN0IFRUTCA9IHJlcXVpcmUoXCIuLi9jb21tYW5kcy9UVExcIik7XG5jb25zdCBUWVBFID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL1RZUEVcIik7XG5jb25zdCBVTkxJTksgPSByZXF1aXJlKFwiLi4vY29tbWFuZHMvVU5MSU5LXCIpO1xuY29uc3QgV0FUQ0ggPSByZXF1aXJlKFwiLi4vY29tbWFuZHMvV0FUQ0hcIik7XG5jb25zdCBYQUNLID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL1hBQ0tcIik7XG5jb25zdCBYQUREID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL1hBRERcIik7XG5jb25zdCBYQVVUT0NMQUlNX0pVU1RJRCA9IHJlcXVpcmUoXCIuLi9jb21tYW5kcy9YQVVUT0NMQUlNX0pVU1RJRFwiKTtcbmNvbnN0IFhBVVRPQ0xBSU0gPSByZXF1aXJlKFwiLi4vY29tbWFuZHMvWEFVVE9DTEFJTVwiKTtcbmNvbnN0IFhDTEFJTV9KVVNUSUQgPSByZXF1aXJlKFwiLi4vY29tbWFuZHMvWENMQUlNX0pVU1RJRFwiKTtcbmNvbnN0IFhDTEFJTSA9IHJlcXVpcmUoXCIuLi9jb21tYW5kcy9YQ0xBSU1cIik7XG5jb25zdCBYREVMID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL1hERUxcIik7XG5jb25zdCBYR1JPVVBfQ1JFQVRFID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL1hHUk9VUF9DUkVBVEVcIik7XG5jb25zdCBYR1JPVVBfQ1JFQVRFQ09OU1VNRVIgPSByZXF1aXJlKFwiLi4vY29tbWFuZHMvWEdST1VQX0NSRUFURUNPTlNVTUVSXCIpO1xuY29uc3QgWEdST1VQX0RFTENPTlNVTUVSID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL1hHUk9VUF9ERUxDT05TVU1FUlwiKTtcbmNvbnN0IFhHUk9VUF9ERVNUUk9ZID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL1hHUk9VUF9ERVNUUk9ZXCIpO1xuY29uc3QgWEdST1VQX1NFVElEID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL1hHUk9VUF9TRVRJRFwiKTtcbmNvbnN0IFhJTkZPX0NPTlNVTUVSUyA9IHJlcXVpcmUoXCIuLi9jb21tYW5kcy9YSU5GT19DT05TVU1FUlNcIik7XG5jb25zdCBYSU5GT19HUk9VUFMgPSByZXF1aXJlKFwiLi4vY29tbWFuZHMvWElORk9fR1JPVVBTXCIpO1xuY29uc3QgWElORk9fU1RSRUFNID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL1hJTkZPX1NUUkVBTVwiKTtcbmNvbnN0IFhMRU4gPSByZXF1aXJlKFwiLi4vY29tbWFuZHMvWExFTlwiKTtcbmNvbnN0IFhQRU5ESU5HX1JBTkdFID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL1hQRU5ESU5HX1JBTkdFXCIpO1xuY29uc3QgWFBFTkRJTkcgPSByZXF1aXJlKFwiLi4vY29tbWFuZHMvWFBFTkRJTkdcIik7XG5jb25zdCBYUkFOR0UgPSByZXF1aXJlKFwiLi4vY29tbWFuZHMvWFJBTkdFXCIpO1xuY29uc3QgWFJFQUQgPSByZXF1aXJlKFwiLi4vY29tbWFuZHMvWFJFQURcIik7XG5jb25zdCBYUkVBREdST1VQID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL1hSRUFER1JPVVBcIik7XG5jb25zdCBYUkVWUkFOR0UgPSByZXF1aXJlKFwiLi4vY29tbWFuZHMvWFJFVlJBTkdFXCIpO1xuY29uc3QgWFNFVElEID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL1hTRVRJRFwiKTtcbmNvbnN0IFhUUklNID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL1hUUklNXCIpO1xuY29uc3QgWkFERCA9IHJlcXVpcmUoXCIuLi9jb21tYW5kcy9aQUREXCIpO1xuY29uc3QgWkNBUkQgPSByZXF1aXJlKFwiLi4vY29tbWFuZHMvWkNBUkRcIik7XG5jb25zdCBaQ09VTlQgPSByZXF1aXJlKFwiLi4vY29tbWFuZHMvWkNPVU5UXCIpO1xuY29uc3QgWkRJRkZfV0lUSFNDT1JFUyA9IHJlcXVpcmUoXCIuLi9jb21tYW5kcy9aRElGRl9XSVRIU0NPUkVTXCIpO1xuY29uc3QgWkRJRkYgPSByZXF1aXJlKFwiLi4vY29tbWFuZHMvWkRJRkZcIik7XG5jb25zdCBaRElGRlNUT1JFID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL1pESUZGU1RPUkVcIik7XG5jb25zdCBaSU5DUkJZID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL1pJTkNSQllcIik7XG5jb25zdCBaSU5URVJfV0lUSFNDT1JFUyA9IHJlcXVpcmUoXCIuLi9jb21tYW5kcy9aSU5URVJfV0lUSFNDT1JFU1wiKTtcbmNvbnN0IFpJTlRFUiA9IHJlcXVpcmUoXCIuLi9jb21tYW5kcy9aSU5URVJcIik7XG5jb25zdCBaSU5URVJDQVJEID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL1pJTlRFUkNBUkRcIik7XG5jb25zdCBaSU5URVJTVE9SRSA9IHJlcXVpcmUoXCIuLi9jb21tYW5kcy9aSU5URVJTVE9SRVwiKTtcbmNvbnN0IFpMRVhDT1VOVCA9IHJlcXVpcmUoXCIuLi9jb21tYW5kcy9aTEVYQ09VTlRcIik7XG5jb25zdCBaTVBPUCA9IHJlcXVpcmUoXCIuLi9jb21tYW5kcy9aTVBPUFwiKTtcbmNvbnN0IFpNU0NPUkUgPSByZXF1aXJlKFwiLi4vY29tbWFuZHMvWk1TQ09SRVwiKTtcbmNvbnN0IFpQT1BNQVhfQ09VTlQgPSByZXF1aXJlKFwiLi4vY29tbWFuZHMvWlBPUE1BWF9DT1VOVFwiKTtcbmNvbnN0IFpQT1BNQVggPSByZXF1aXJlKFwiLi4vY29tbWFuZHMvWlBPUE1BWFwiKTtcbmNvbnN0IFpQT1BNSU5fQ09VTlQgPSByZXF1aXJlKFwiLi4vY29tbWFuZHMvWlBPUE1JTl9DT1VOVFwiKTtcbmNvbnN0IFpQT1BNSU4gPSByZXF1aXJlKFwiLi4vY29tbWFuZHMvWlBPUE1JTlwiKTtcbmNvbnN0IFpSQU5ETUVNQkVSX0NPVU5UX1dJVEhTQ09SRVMgPSByZXF1aXJlKFwiLi4vY29tbWFuZHMvWlJBTkRNRU1CRVJfQ09VTlRfV0lUSFNDT1JFU1wiKTtcbmNvbnN0IFpSQU5ETUVNQkVSX0NPVU5UID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL1pSQU5ETUVNQkVSX0NPVU5UXCIpO1xuY29uc3QgWlJBTkRNRU1CRVIgPSByZXF1aXJlKFwiLi4vY29tbWFuZHMvWlJBTkRNRU1CRVJcIik7XG5jb25zdCBaUkFOR0VfV0lUSFNDT1JFUyA9IHJlcXVpcmUoXCIuLi9jb21tYW5kcy9aUkFOR0VfV0lUSFNDT1JFU1wiKTtcbmNvbnN0IFpSQU5HRSA9IHJlcXVpcmUoXCIuLi9jb21tYW5kcy9aUkFOR0VcIik7XG5jb25zdCBaUkFOR0VCWUxFWCA9IHJlcXVpcmUoXCIuLi9jb21tYW5kcy9aUkFOR0VCWUxFWFwiKTtcbmNvbnN0IFpSQU5HRUJZU0NPUkVfV0lUSFNDT1JFUyA9IHJlcXVpcmUoXCIuLi9jb21tYW5kcy9aUkFOR0VCWVNDT1JFX1dJVEhTQ09SRVNcIik7XG5jb25zdCBaUkFOR0VCWVNDT1JFID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL1pSQU5HRUJZU0NPUkVcIik7XG5jb25zdCBaUkFOR0VTVE9SRSA9IHJlcXVpcmUoXCIuLi9jb21tYW5kcy9aUkFOR0VTVE9SRVwiKTtcbmNvbnN0IFpSQU5LID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL1pSQU5LXCIpO1xuY29uc3QgWlJFTSA9IHJlcXVpcmUoXCIuLi9jb21tYW5kcy9aUkVNXCIpO1xuY29uc3QgWlJFTVJBTkdFQllMRVggPSByZXF1aXJlKFwiLi4vY29tbWFuZHMvWlJFTVJBTkdFQllMRVhcIik7XG5jb25zdCBaUkVNUkFOR0VCWVJBTksgPSByZXF1aXJlKFwiLi4vY29tbWFuZHMvWlJFTVJBTkdFQllSQU5LXCIpO1xuY29uc3QgWlJFTVJBTkdFQllTQ09SRSA9IHJlcXVpcmUoXCIuLi9jb21tYW5kcy9aUkVNUkFOR0VCWVNDT1JFXCIpO1xuY29uc3QgWlJFVlJBTksgPSByZXF1aXJlKFwiLi4vY29tbWFuZHMvWlJFVlJBTktcIik7XG5jb25zdCBaU0NBTiA9IHJlcXVpcmUoXCIuLi9jb21tYW5kcy9aU0NBTlwiKTtcbmNvbnN0IFpTQ09SRSA9IHJlcXVpcmUoXCIuLi9jb21tYW5kcy9aU0NPUkVcIik7XG5jb25zdCBaVU5JT05fV0lUSFNDT1JFUyA9IHJlcXVpcmUoXCIuLi9jb21tYW5kcy9aVU5JT05fV0lUSFNDT1JFU1wiKTtcbmNvbnN0IFpVTklPTiA9IHJlcXVpcmUoXCIuLi9jb21tYW5kcy9aVU5JT05cIik7XG5jb25zdCBaVU5JT05TVE9SRSA9IHJlcXVpcmUoXCIuLi9jb21tYW5kcy9aVU5JT05TVE9SRVwiKTtcbmV4cG9ydHMuZGVmYXVsdCA9IHtcbiAgICBBUFBFTkQsXG4gICAgYXBwZW5kOiBBUFBFTkQsXG4gICAgQklUQ09VTlQsXG4gICAgYml0Q291bnQ6IEJJVENPVU5ULFxuICAgIEJJVEZJRUxEX1JPLFxuICAgIGJpdEZpZWxkUm86IEJJVEZJRUxEX1JPLFxuICAgIEJJVEZJRUxELFxuICAgIGJpdEZpZWxkOiBCSVRGSUVMRCxcbiAgICBCSVRPUCxcbiAgICBiaXRPcDogQklUT1AsXG4gICAgQklUUE9TLFxuICAgIGJpdFBvczogQklUUE9TLFxuICAgIEJMTU9WRSxcbiAgICBibE1vdmU6IEJMTU9WRSxcbiAgICBCTE1QT1AsXG4gICAgYmxtUG9wOiBCTE1QT1AsXG4gICAgQkxQT1AsXG4gICAgYmxQb3A6IEJMUE9QLFxuICAgIEJSUE9QLFxuICAgIGJyUG9wOiBCUlBPUCxcbiAgICBCUlBPUExQVVNILFxuICAgIGJyUG9wTFB1c2g6IEJSUE9QTFBVU0gsXG4gICAgQlpNUE9QLFxuICAgIGJ6bVBvcDogQlpNUE9QLFxuICAgIEJaUE9QTUFYLFxuICAgIGJ6UG9wTWF4OiBCWlBPUE1BWCxcbiAgICBCWlBPUE1JTixcbiAgICBielBvcE1pbjogQlpQT1BNSU4sXG4gICAgQ09QWSxcbiAgICBjb3B5OiBDT1BZLFxuICAgIERFQ1IsXG4gICAgZGVjcjogREVDUixcbiAgICBERUNSQlksXG4gICAgZGVjckJ5OiBERUNSQlksXG4gICAgREVMLFxuICAgIGRlbDogREVMLFxuICAgIERVTVAsXG4gICAgZHVtcDogRFVNUCxcbiAgICBFVkFMX1JPLFxuICAgIGV2YWxSbzogRVZBTF9STyxcbiAgICBFVkFMLFxuICAgIGV2YWw6IEVWQUwsXG4gICAgRVZBTFNIQSxcbiAgICBldmFsU2hhOiBFVkFMU0hBLFxuICAgIEVWQUxTSEFfUk8sXG4gICAgZXZhbFNoYVJvOiBFVkFMU0hBX1JPLFxuICAgIEVYSVNUUyxcbiAgICBleGlzdHM6IEVYSVNUUyxcbiAgICBFWFBJUkUsXG4gICAgZXhwaXJlOiBFWFBJUkUsXG4gICAgRVhQSVJFQVQsXG4gICAgZXhwaXJlQXQ6IEVYUElSRUFULFxuICAgIEVYUElSRVRJTUUsXG4gICAgZXhwaXJlVGltZTogRVhQSVJFVElNRSxcbiAgICBGQ0FMTF9STyxcbiAgICBmQ2FsbFJvOiBGQ0FMTF9STyxcbiAgICBGQ0FMTCxcbiAgICBmQ2FsbDogRkNBTEwsXG4gICAgR0VPQURELFxuICAgIGdlb0FkZDogR0VPQURELFxuICAgIEdFT0RJU1QsXG4gICAgZ2VvRGlzdDogR0VPRElTVCxcbiAgICBHRU9IQVNILFxuICAgIGdlb0hhc2g6IEdFT0hBU0gsXG4gICAgR0VPUE9TLFxuICAgIGdlb1BvczogR0VPUE9TLFxuICAgIEdFT1JBRElVU19ST19XSVRILFxuICAgIGdlb1JhZGl1c1JvV2l0aDogR0VPUkFESVVTX1JPX1dJVEgsXG4gICAgR0VPUkFESVVTX1JPLFxuICAgIGdlb1JhZGl1c1JvOiBHRU9SQURJVVNfUk8sXG4gICAgR0VPUkFESVVTX1dJVEgsXG4gICAgZ2VvUmFkaXVzV2l0aDogR0VPUkFESVVTX1dJVEgsXG4gICAgR0VPUkFESVVTLFxuICAgIGdlb1JhZGl1czogR0VPUkFESVVTLFxuICAgIEdFT1JBRElVU0JZTUVNQkVSX1JPX1dJVEgsXG4gICAgZ2VvUmFkaXVzQnlNZW1iZXJSb1dpdGg6IEdFT1JBRElVU0JZTUVNQkVSX1JPX1dJVEgsXG4gICAgR0VPUkFESVVTQllNRU1CRVJfUk8sXG4gICAgZ2VvUmFkaXVzQnlNZW1iZXJSbzogR0VPUkFESVVTQllNRU1CRVJfUk8sXG4gICAgR0VPUkFESVVTQllNRU1CRVJfV0lUSCxcbiAgICBnZW9SYWRpdXNCeU1lbWJlcldpdGg6IEdFT1JBRElVU0JZTUVNQkVSX1dJVEgsXG4gICAgR0VPUkFESVVTQllNRU1CRVIsXG4gICAgZ2VvUmFkaXVzQnlNZW1iZXI6IEdFT1JBRElVU0JZTUVNQkVSLFxuICAgIEdFT1JBRElVU0JZTUVNQkVSU1RPUkUsXG4gICAgZ2VvUmFkaXVzQnlNZW1iZXJTdG9yZTogR0VPUkFESVVTQllNRU1CRVJTVE9SRSxcbiAgICBHRU9SQURJVVNTVE9SRSxcbiAgICBnZW9SYWRpdXNTdG9yZTogR0VPUkFESVVTU1RPUkUsXG4gICAgR0VPU0VBUkNIX1dJVEgsXG4gICAgZ2VvU2VhcmNoV2l0aDogR0VPU0VBUkNIX1dJVEgsXG4gICAgR0VPU0VBUkNILFxuICAgIGdlb1NlYXJjaDogR0VPU0VBUkNILFxuICAgIEdFT1NFQVJDSFNUT1JFLFxuICAgIGdlb1NlYXJjaFN0b3JlOiBHRU9TRUFSQ0hTVE9SRSxcbiAgICBHRVQsXG4gICAgZ2V0OiBHRVQsXG4gICAgR0VUQklULFxuICAgIGdldEJpdDogR0VUQklULFxuICAgIEdFVERFTCxcbiAgICBnZXREZWw6IEdFVERFTCxcbiAgICBHRVRFWCxcbiAgICBnZXRFeDogR0VURVgsXG4gICAgR0VUUkFOR0UsXG4gICAgZ2V0UmFuZ2U6IEdFVFJBTkdFLFxuICAgIEdFVFNFVCxcbiAgICBnZXRTZXQ6IEdFVFNFVCxcbiAgICBIREVMLFxuICAgIGhEZWw6IEhERUwsXG4gICAgSEVYSVNUUyxcbiAgICBoRXhpc3RzOiBIRVhJU1RTLFxuICAgIEhFWFBJUkUsXG4gICAgaEV4cGlyZTogSEVYUElSRSxcbiAgICBIRVhQSVJFQVQsXG4gICAgaEV4cGlyZUF0OiBIRVhQSVJFQVQsXG4gICAgSEVYUElSRVRJTUUsXG4gICAgaEV4cGlyZVRpbWU6IEhFWFBJUkVUSU1FLFxuICAgIEhHRVQsXG4gICAgaEdldDogSEdFVCxcbiAgICBIR0VUQUxMLFxuICAgIGhHZXRBbGw6IEhHRVRBTEwsXG4gICAgSElOQ1JCWSxcbiAgICBoSW5jckJ5OiBISU5DUkJZLFxuICAgIEhJTkNSQllGTE9BVCxcbiAgICBoSW5jckJ5RmxvYXQ6IEhJTkNSQllGTE9BVCxcbiAgICBIS0VZUyxcbiAgICBoS2V5czogSEtFWVMsXG4gICAgSExFTixcbiAgICBoTGVuOiBITEVOLFxuICAgIEhNR0VULFxuICAgIGhtR2V0OiBITUdFVCxcbiAgICBIUEVSU0lTVCxcbiAgICBoUGVyc2lzdDogSFBFUlNJU1QsXG4gICAgSFBFWFBJUkUsXG4gICAgaHBFeHBpcmU6IEhQRVhQSVJFLFxuICAgIEhQRVhQSVJFQVQsXG4gICAgaHBFeHBpcmVBdDogSFBFWFBJUkVBVCxcbiAgICBIUEVYUElSRVRJTUUsXG4gICAgaHBFeHBpcmVUaW1lOiBIUEVYUElSRVRJTUUsXG4gICAgSFBUVEwsXG4gICAgaHBUVEw6IEhQVFRMLFxuICAgIEhSQU5ERklFTERfQ09VTlRfV0lUSFZBTFVFUyxcbiAgICBoUmFuZEZpZWxkQ291bnRXaXRoVmFsdWVzOiBIUkFOREZJRUxEX0NPVU5UX1dJVEhWQUxVRVMsXG4gICAgSFJBTkRGSUVMRF9DT1VOVCxcbiAgICBoUmFuZEZpZWxkQ291bnQ6IEhSQU5ERklFTERfQ09VTlQsXG4gICAgSFJBTkRGSUVMRCxcbiAgICBoUmFuZEZpZWxkOiBIUkFOREZJRUxELFxuICAgIEhTQ0FOLFxuICAgIGhTY2FuOiBIU0NBTixcbiAgICBIU0NBTl9OT1ZBTFVFUyxcbiAgICBoU2Nhbk5vVmFsdWVzOiBIU0NBTl9OT1ZBTFVFUyxcbiAgICBIU0VULFxuICAgIGhTZXQ6IEhTRVQsXG4gICAgSFNFVE5YLFxuICAgIGhTZXROWDogSFNFVE5YLFxuICAgIEhTVFJMRU4sXG4gICAgaFN0ckxlbjogSFNUUkxFTixcbiAgICBIVFRMLFxuICAgIGhUVEw6IEhUVEwsXG4gICAgSFZBTFMsXG4gICAgaFZhbHM6IEhWQUxTLFxuICAgIElOQ1IsXG4gICAgaW5jcjogSU5DUixcbiAgICBJTkNSQlksXG4gICAgaW5jckJ5OiBJTkNSQlksXG4gICAgSU5DUkJZRkxPQVQsXG4gICAgaW5jckJ5RmxvYXQ6IElOQ1JCWUZMT0FULFxuICAgIExDU19JRFhfV0lUSE1BVENITEVOLFxuICAgIGxjc0lkeFdpdGhNYXRjaExlbjogTENTX0lEWF9XSVRITUFUQ0hMRU4sXG4gICAgTENTX0lEWCxcbiAgICBsY3NJZHg6IExDU19JRFgsXG4gICAgTENTX0xFTixcbiAgICBsY3NMZW46IExDU19MRU4sXG4gICAgTENTLFxuICAgIGxjczogTENTLFxuICAgIExJTkRFWCxcbiAgICBsSW5kZXg6IExJTkRFWCxcbiAgICBMSU5TRVJULFxuICAgIGxJbnNlcnQ6IExJTlNFUlQsXG4gICAgTExFTixcbiAgICBsTGVuOiBMTEVOLFxuICAgIExNT1ZFLFxuICAgIGxNb3ZlOiBMTU9WRSxcbiAgICBMTVBPUCxcbiAgICBsbVBvcDogTE1QT1AsXG4gICAgTFBPUF9DT1VOVCxcbiAgICBsUG9wQ291bnQ6IExQT1BfQ09VTlQsXG4gICAgTFBPUCxcbiAgICBsUG9wOiBMUE9QLFxuICAgIExQT1NfQ09VTlQsXG4gICAgbFBvc0NvdW50OiBMUE9TX0NPVU5ULFxuICAgIExQT1MsXG4gICAgbFBvczogTFBPUyxcbiAgICBMUFVTSCxcbiAgICBsUHVzaDogTFBVU0gsXG4gICAgTFBVU0hYLFxuICAgIGxQdXNoWDogTFBVU0hYLFxuICAgIExSQU5HRSxcbiAgICBsUmFuZ2U6IExSQU5HRSxcbiAgICBMUkVNLFxuICAgIGxSZW06IExSRU0sXG4gICAgTFNFVCxcbiAgICBsU2V0OiBMU0VULFxuICAgIExUUklNLFxuICAgIGxUcmltOiBMVFJJTSxcbiAgICBNR0VULFxuICAgIG1HZXQ6IE1HRVQsXG4gICAgTUlHUkFURSxcbiAgICBtaWdyYXRlOiBNSUdSQVRFLFxuICAgIE1TRVQsXG4gICAgbVNldDogTVNFVCxcbiAgICBNU0VUTlgsXG4gICAgbVNldE5YOiBNU0VUTlgsXG4gICAgT0JKRUNUX0VOQ09ESU5HLFxuICAgIG9iamVjdEVuY29kaW5nOiBPQkpFQ1RfRU5DT0RJTkcsXG4gICAgT0JKRUNUX0ZSRVEsXG4gICAgb2JqZWN0RnJlcTogT0JKRUNUX0ZSRVEsXG4gICAgT0JKRUNUX0lETEVUSU1FLFxuICAgIG9iamVjdElkbGVUaW1lOiBPQkpFQ1RfSURMRVRJTUUsXG4gICAgT0JKRUNUX1JFRkNPVU5ULFxuICAgIG9iamVjdFJlZkNvdW50OiBPQkpFQ1RfUkVGQ09VTlQsXG4gICAgUEVSU0lTVCxcbiAgICBwZXJzaXN0OiBQRVJTSVNULFxuICAgIFBFWFBJUkUsXG4gICAgcEV4cGlyZTogUEVYUElSRSxcbiAgICBQRVhQSVJFQVQsXG4gICAgcEV4cGlyZUF0OiBQRVhQSVJFQVQsXG4gICAgUEVYUElSRVRJTUUsXG4gICAgcEV4cGlyZVRpbWU6IFBFWFBJUkVUSU1FLFxuICAgIFBGQURELFxuICAgIHBmQWRkOiBQRkFERCxcbiAgICBQRkNPVU5ULFxuICAgIHBmQ291bnQ6IFBGQ09VTlQsXG4gICAgUEZNRVJHRSxcbiAgICBwZk1lcmdlOiBQRk1FUkdFLFxuICAgIFBTRVRFWCxcbiAgICBwU2V0RXg6IFBTRVRFWCxcbiAgICBQVFRMLFxuICAgIHBUVEw6IFBUVEwsXG4gICAgUFVCTElTSCxcbiAgICBwdWJsaXNoOiBQVUJMSVNILFxuICAgIFJFTkFNRSxcbiAgICByZW5hbWU6IFJFTkFNRSxcbiAgICBSRU5BTUVOWCxcbiAgICByZW5hbWVOWDogUkVOQU1FTlgsXG4gICAgUkVTVE9SRSxcbiAgICByZXN0b3JlOiBSRVNUT1JFLFxuICAgIFJQT1BfQ09VTlQsXG4gICAgclBvcENvdW50OiBSUE9QX0NPVU5ULFxuICAgIFJQT1AsXG4gICAgclBvcDogUlBPUCxcbiAgICBSUE9QTFBVU0gsXG4gICAgclBvcExQdXNoOiBSUE9QTFBVU0gsXG4gICAgUlBVU0gsXG4gICAgclB1c2g6IFJQVVNILFxuICAgIFJQVVNIWCxcbiAgICByUHVzaFg6IFJQVVNIWCxcbiAgICBTQURELFxuICAgIHNBZGQ6IFNBREQsXG4gICAgU0NBUkQsXG4gICAgc0NhcmQ6IFNDQVJELFxuICAgIFNESUZGLFxuICAgIHNEaWZmOiBTRElGRixcbiAgICBTRElGRlNUT1JFLFxuICAgIHNEaWZmU3RvcmU6IFNESUZGU1RPUkUsXG4gICAgU0lOVEVSLFxuICAgIHNJbnRlcjogU0lOVEVSLFxuICAgIFNJTlRFUkNBUkQsXG4gICAgc0ludGVyQ2FyZDogU0lOVEVSQ0FSRCxcbiAgICBTSU5URVJTVE9SRSxcbiAgICBzSW50ZXJTdG9yZTogU0lOVEVSU1RPUkUsXG4gICAgU0VULFxuICAgIHNldDogU0VULFxuICAgIFNFVEJJVCxcbiAgICBzZXRCaXQ6IFNFVEJJVCxcbiAgICBTRVRFWCxcbiAgICBzZXRFeDogU0VURVgsXG4gICAgU0VUTlgsXG4gICAgc2V0Tlg6IFNFVE5YLFxuICAgIFNFVFJBTkdFLFxuICAgIHNldFJhbmdlOiBTRVRSQU5HRSxcbiAgICBTSVNNRU1CRVIsXG4gICAgc0lzTWVtYmVyOiBTSVNNRU1CRVIsXG4gICAgU01FTUJFUlMsXG4gICAgc01lbWJlcnM6IFNNRU1CRVJTLFxuICAgIFNNSVNNRU1CRVIsXG4gICAgc21Jc01lbWJlcjogU01JU01FTUJFUixcbiAgICBTTU9WRSxcbiAgICBzTW92ZTogU01PVkUsXG4gICAgU09SVF9STyxcbiAgICBzb3J0Um86IFNPUlRfUk8sXG4gICAgU09SVF9TVE9SRSxcbiAgICBzb3J0U3RvcmU6IFNPUlRfU1RPUkUsXG4gICAgU09SVCxcbiAgICBzb3J0OiBTT1JULFxuICAgIFNQT1AsXG4gICAgc1BvcDogU1BPUCxcbiAgICBTUFVCTElTSCxcbiAgICBzUHVibGlzaDogU1BVQkxJU0gsXG4gICAgU1JBTkRNRU1CRVJfQ09VTlQsXG4gICAgc1JhbmRNZW1iZXJDb3VudDogU1JBTkRNRU1CRVJfQ09VTlQsXG4gICAgU1JBTkRNRU1CRVIsXG4gICAgc1JhbmRNZW1iZXI6IFNSQU5ETUVNQkVSLFxuICAgIFNSRU0sXG4gICAgc1JlbTogU1JFTSxcbiAgICBTU0NBTixcbiAgICBzU2NhbjogU1NDQU4sXG4gICAgU1RSTEVOLFxuICAgIHN0ckxlbjogU1RSTEVOLFxuICAgIFNVTklPTixcbiAgICBzVW5pb246IFNVTklPTixcbiAgICBTVU5JT05TVE9SRSxcbiAgICBzVW5pb25TdG9yZTogU1VOSU9OU1RPUkUsXG4gICAgVE9VQ0gsXG4gICAgdG91Y2g6IFRPVUNILFxuICAgIFRUTCxcbiAgICB0dGw6IFRUTCxcbiAgICBUWVBFLFxuICAgIHR5cGU6IFRZUEUsXG4gICAgVU5MSU5LLFxuICAgIHVubGluazogVU5MSU5LLFxuICAgIFdBVENILFxuICAgIHdhdGNoOiBXQVRDSCxcbiAgICBYQUNLLFxuICAgIHhBY2s6IFhBQ0ssXG4gICAgWEFERCxcbiAgICB4QWRkOiBYQURELFxuICAgIFhBVVRPQ0xBSU1fSlVTVElELFxuICAgIHhBdXRvQ2xhaW1KdXN0SWQ6IFhBVVRPQ0xBSU1fSlVTVElELFxuICAgIFhBVVRPQ0xBSU0sXG4gICAgeEF1dG9DbGFpbTogWEFVVE9DTEFJTSxcbiAgICBYQ0xBSU0sXG4gICAgeENsYWltOiBYQ0xBSU0sXG4gICAgWENMQUlNX0pVU1RJRCxcbiAgICB4Q2xhaW1KdXN0SWQ6IFhDTEFJTV9KVVNUSUQsXG4gICAgWERFTCxcbiAgICB4RGVsOiBYREVMLFxuICAgIFhHUk9VUF9DUkVBVEUsXG4gICAgeEdyb3VwQ3JlYXRlOiBYR1JPVVBfQ1JFQVRFLFxuICAgIFhHUk9VUF9DUkVBVEVDT05TVU1FUixcbiAgICB4R3JvdXBDcmVhdGVDb25zdW1lcjogWEdST1VQX0NSRUFURUNPTlNVTUVSLFxuICAgIFhHUk9VUF9ERUxDT05TVU1FUixcbiAgICB4R3JvdXBEZWxDb25zdW1lcjogWEdST1VQX0RFTENPTlNVTUVSLFxuICAgIFhHUk9VUF9ERVNUUk9ZLFxuICAgIHhHcm91cERlc3Ryb3k6IFhHUk9VUF9ERVNUUk9ZLFxuICAgIFhHUk9VUF9TRVRJRCxcbiAgICB4R3JvdXBTZXRJZDogWEdST1VQX1NFVElELFxuICAgIFhJTkZPX0NPTlNVTUVSUyxcbiAgICB4SW5mb0NvbnN1bWVyczogWElORk9fQ09OU1VNRVJTLFxuICAgIFhJTkZPX0dST1VQUyxcbiAgICB4SW5mb0dyb3VwczogWElORk9fR1JPVVBTLFxuICAgIFhJTkZPX1NUUkVBTSxcbiAgICB4SW5mb1N0cmVhbTogWElORk9fU1RSRUFNLFxuICAgIFhMRU4sXG4gICAgeExlbjogWExFTixcbiAgICBYUEVORElOR19SQU5HRSxcbiAgICB4UGVuZGluZ1JhbmdlOiBYUEVORElOR19SQU5HRSxcbiAgICBYUEVORElORyxcbiAgICB4UGVuZGluZzogWFBFTkRJTkcsXG4gICAgWFJBTkdFLFxuICAgIHhSYW5nZTogWFJBTkdFLFxuICAgIFhSRUFELFxuICAgIHhSZWFkOiBYUkVBRCxcbiAgICBYUkVBREdST1VQLFxuICAgIHhSZWFkR3JvdXA6IFhSRUFER1JPVVAsXG4gICAgWFJFVlJBTkdFLFxuICAgIHhSZXZSYW5nZTogWFJFVlJBTkdFLFxuICAgIFhTRVRJRCxcbiAgICB4U2V0SWQ6IFhTRVRJRCxcbiAgICBYVFJJTSxcbiAgICB4VHJpbTogWFRSSU0sXG4gICAgWkFERCxcbiAgICB6QWRkOiBaQURELFxuICAgIFpDQVJELFxuICAgIHpDYXJkOiBaQ0FSRCxcbiAgICBaQ09VTlQsXG4gICAgekNvdW50OiBaQ09VTlQsXG4gICAgWkRJRkZfV0lUSFNDT1JFUyxcbiAgICB6RGlmZldpdGhTY29yZXM6IFpESUZGX1dJVEhTQ09SRVMsXG4gICAgWkRJRkYsXG4gICAgekRpZmY6IFpESUZGLFxuICAgIFpESUZGU1RPUkUsXG4gICAgekRpZmZTdG9yZTogWkRJRkZTVE9SRSxcbiAgICBaSU5DUkJZLFxuICAgIHpJbmNyQnk6IFpJTkNSQlksXG4gICAgWklOVEVSX1dJVEhTQ09SRVMsXG4gICAgekludGVyV2l0aFNjb3JlczogWklOVEVSX1dJVEhTQ09SRVMsXG4gICAgWklOVEVSLFxuICAgIHpJbnRlcjogWklOVEVSLFxuICAgIFpJTlRFUkNBUkQsXG4gICAgekludGVyQ2FyZDogWklOVEVSQ0FSRCxcbiAgICBaSU5URVJTVE9SRSxcbiAgICB6SW50ZXJTdG9yZTogWklOVEVSU1RPUkUsXG4gICAgWkxFWENPVU5ULFxuICAgIHpMZXhDb3VudDogWkxFWENPVU5ULFxuICAgIFpNUE9QLFxuICAgIHptUG9wOiBaTVBPUCxcbiAgICBaTVNDT1JFLFxuICAgIHptU2NvcmU6IFpNU0NPUkUsXG4gICAgWlBPUE1BWF9DT1VOVCxcbiAgICB6UG9wTWF4Q291bnQ6IFpQT1BNQVhfQ09VTlQsXG4gICAgWlBPUE1BWCxcbiAgICB6UG9wTWF4OiBaUE9QTUFYLFxuICAgIFpQT1BNSU5fQ09VTlQsXG4gICAgelBvcE1pbkNvdW50OiBaUE9QTUlOX0NPVU5ULFxuICAgIFpQT1BNSU4sXG4gICAgelBvcE1pbjogWlBPUE1JTixcbiAgICBaUkFORE1FTUJFUl9DT1VOVF9XSVRIU0NPUkVTLFxuICAgIHpSYW5kTWVtYmVyQ291bnRXaXRoU2NvcmVzOiBaUkFORE1FTUJFUl9DT1VOVF9XSVRIU0NPUkVTLFxuICAgIFpSQU5ETUVNQkVSX0NPVU5ULFxuICAgIHpSYW5kTWVtYmVyQ291bnQ6IFpSQU5ETUVNQkVSX0NPVU5ULFxuICAgIFpSQU5ETUVNQkVSLFxuICAgIHpSYW5kTWVtYmVyOiBaUkFORE1FTUJFUixcbiAgICBaUkFOR0VfV0lUSFNDT1JFUyxcbiAgICB6UmFuZ2VXaXRoU2NvcmVzOiBaUkFOR0VfV0lUSFNDT1JFUyxcbiAgICBaUkFOR0UsXG4gICAgelJhbmdlOiBaUkFOR0UsXG4gICAgWlJBTkdFQllMRVgsXG4gICAgelJhbmdlQnlMZXg6IFpSQU5HRUJZTEVYLFxuICAgIFpSQU5HRUJZU0NPUkVfV0lUSFNDT1JFUyxcbiAgICB6UmFuZ2VCeVNjb3JlV2l0aFNjb3JlczogWlJBTkdFQllTQ09SRV9XSVRIU0NPUkVTLFxuICAgIFpSQU5HRUJZU0NPUkUsXG4gICAgelJhbmdlQnlTY29yZTogWlJBTkdFQllTQ09SRSxcbiAgICBaUkFOR0VTVE9SRSxcbiAgICB6UmFuZ2VTdG9yZTogWlJBTkdFU1RPUkUsXG4gICAgWlJBTkssXG4gICAgelJhbms6IFpSQU5LLFxuICAgIFpSRU0sXG4gICAgelJlbTogWlJFTSxcbiAgICBaUkVNUkFOR0VCWUxFWCxcbiAgICB6UmVtUmFuZ2VCeUxleDogWlJFTVJBTkdFQllMRVgsXG4gICAgWlJFTVJBTkdFQllSQU5LLFxuICAgIHpSZW1SYW5nZUJ5UmFuazogWlJFTVJBTkdFQllSQU5LLFxuICAgIFpSRU1SQU5HRUJZU0NPUkUsXG4gICAgelJlbVJhbmdlQnlTY29yZTogWlJFTVJBTkdFQllTQ09SRSxcbiAgICBaUkVWUkFOSyxcbiAgICB6UmV2UmFuazogWlJFVlJBTkssXG4gICAgWlNDQU4sXG4gICAgelNjYW46IFpTQ0FOLFxuICAgIFpTQ09SRSxcbiAgICB6U2NvcmU6IFpTQ09SRSxcbiAgICBaVU5JT05fV0lUSFNDT1JFUyxcbiAgICB6VW5pb25XaXRoU2NvcmVzOiBaVU5JT05fV0lUSFNDT1JFUyxcbiAgICBaVU5JT04sXG4gICAgelVuaW9uOiBaVU5JT04sXG4gICAgWlVOSU9OU1RPUkUsXG4gICAgelVuaW9uU3RvcmU6IFpVTklPTlNUT1JFXG59O1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdm9pZCAwO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGNhdGVnb3J5TmFtZSkge1xuICAgIGNvbnN0IGFyZ3MgPSBbJ0FDTCcsICdDQVQnXTtcbiAgICBpZiAoY2F0ZWdvcnlOYW1lKSB7XG4gICAgICAgIGFyZ3MucHVzaChjYXRlZ29yeU5hbWUpO1xuICAgIH1cbiAgICByZXR1cm4gYXJncztcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdm9pZCAwO1xuY29uc3QgZ2VuZXJpY190cmFuc2Zvcm1lcnNfMSA9IHJlcXVpcmUoXCIuL2dlbmVyaWMtdHJhbnNmb3JtZXJzXCIpO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKHVzZXJuYW1lKSB7XG4gICAgcmV0dXJuICgwLCBnZW5lcmljX3RyYW5zZm9ybWVyc18xLnB1c2hWZXJkaWN0QXJndW1lbnRzKShbJ0FDTCcsICdERUxVU0VSJ10sIHVzZXJuYW1lKTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gZXhwb3J0cy5JU19SRUFEX09OTFkgPSB2b2lkIDA7XG5leHBvcnRzLklTX1JFQURfT05MWSA9IHRydWU7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHModXNlcm5hbWUsIGNvbW1hbmQpIHtcbiAgICByZXR1cm4gW1xuICAgICAgICAnQUNMJyxcbiAgICAgICAgJ0RSWVJVTicsXG4gICAgICAgIHVzZXJuYW1lLFxuICAgICAgICAuLi5jb21tYW5kXG4gICAgXTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdm9pZCAwO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGJpdHMpIHtcbiAgICBjb25zdCBhcmdzID0gWydBQ0wnLCAnR0VOUEFTUyddO1xuICAgIGlmIChiaXRzKSB7XG4gICAgICAgIGFyZ3MucHVzaChiaXRzLnRvU3RyaW5nKCkpO1xuICAgIH1cbiAgICByZXR1cm4gYXJncztcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtUmVwbHkgPSBleHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHZvaWQgMDtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyh1c2VybmFtZSkge1xuICAgIHJldHVybiBbJ0FDTCcsICdHRVRVU0VSJywgdXNlcm5hbWVdO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG5mdW5jdGlvbiB0cmFuc2Zvcm1SZXBseShyZXBseSkge1xuICAgIHJldHVybiB7XG4gICAgICAgIGZsYWdzOiByZXBseVsxXSxcbiAgICAgICAgcGFzc3dvcmRzOiByZXBseVszXSxcbiAgICAgICAgY29tbWFuZHM6IHJlcGx5WzVdLFxuICAgICAgICBrZXlzOiByZXBseVs3XSxcbiAgICAgICAgY2hhbm5lbHM6IHJlcGx5WzldLFxuICAgICAgICBzZWxlY3RvcnM6IHJlcGx5WzExXVxuICAgIH07XG59XG5leHBvcnRzLnRyYW5zZm9ybVJlcGx5ID0gdHJhbnNmb3JtUmVwbHk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB2b2lkIDA7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMoKSB7XG4gICAgcmV0dXJuIFsnQUNMJywgJ0xJU1QnXTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdm9pZCAwO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKCkge1xuICAgIHJldHVybiBbJ0FDTCcsICdMT0FEJ107XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHZvaWQgMDtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cygpIHtcbiAgICByZXR1cm4gWydBQ0wnLCAnTE9HJywgJ1JFU0VUJ107XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybVJlcGx5ID0gZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB2b2lkIDA7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMoY291bnQpIHtcbiAgICBjb25zdCBhcmdzID0gWydBQ0wnLCAnTE9HJ107XG4gICAgaWYgKGNvdW50KSB7XG4gICAgICAgIGFyZ3MucHVzaChjb3VudC50b1N0cmluZygpKTtcbiAgICB9XG4gICAgcmV0dXJuIGFyZ3M7XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbmZ1bmN0aW9uIHRyYW5zZm9ybVJlcGx5KHJlcGx5KSB7XG4gICAgcmV0dXJuIHJlcGx5Lm1hcChsb2cgPT4gKHtcbiAgICAgICAgY291bnQ6IGxvZ1sxXSxcbiAgICAgICAgcmVhc29uOiBsb2dbM10sXG4gICAgICAgIGNvbnRleHQ6IGxvZ1s1XSxcbiAgICAgICAgb2JqZWN0OiBsb2dbN10sXG4gICAgICAgIHVzZXJuYW1lOiBsb2dbOV0sXG4gICAgICAgIGFnZVNlY29uZHM6IE51bWJlcihsb2dbMTFdKSxcbiAgICAgICAgY2xpZW50SW5mbzogbG9nWzEzXVxuICAgIH0pKTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtUmVwbHkgPSB0cmFuc2Zvcm1SZXBseTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHZvaWQgMDtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cygpIHtcbiAgICByZXR1cm4gWydBQ0wnLCAnU0FWRSddO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB2b2lkIDA7XG5jb25zdCBnZW5lcmljX3RyYW5zZm9ybWVyc18xID0gcmVxdWlyZShcIi4vZ2VuZXJpYy10cmFuc2Zvcm1lcnNcIik7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHModXNlcm5hbWUsIHJ1bGUpIHtcbiAgICByZXR1cm4gKDAsIGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEucHVzaFZlcmRpY3RBcmd1bWVudHMpKFsnQUNMJywgJ1NFVFVTRVInLCB1c2VybmFtZV0sIHJ1bGUpO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB2b2lkIDA7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMoKSB7XG4gICAgcmV0dXJuIFsnQUNMJywgJ1VTRVJTJ107XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHZvaWQgMDtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cygpIHtcbiAgICByZXR1cm4gWydBQ0wnLCAnV0hPQU1JJ107XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHZvaWQgMDtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cygpIHtcbiAgICByZXR1cm4gWydBU0tJTkcnXTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdm9pZCAwO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKHsgdXNlcm5hbWUsIHBhc3N3b3JkIH0pIHtcbiAgICBpZiAoIXVzZXJuYW1lKSB7XG4gICAgICAgIHJldHVybiBbJ0FVVEgnLCBwYXNzd29yZF07XG4gICAgfVxuICAgIHJldHVybiBbJ0FVVEgnLCB1c2VybmFtZSwgcGFzc3dvcmRdO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB2b2lkIDA7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMoKSB7XG4gICAgcmV0dXJuIFsnQkdSRVdSSVRFQU9GJ107XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHZvaWQgMDtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhvcHRpb25zKSB7XG4gICAgY29uc3QgYXJncyA9IFsnQkdTQVZFJ107XG4gICAgaWYgKG9wdGlvbnM/LlNDSEVEVUxFKSB7XG4gICAgICAgIGFyZ3MucHVzaCgnU0NIRURVTEUnKTtcbiAgICB9XG4gICAgcmV0dXJuIGFyZ3M7XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHZvaWQgMDtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyh2YWx1ZSkge1xuICAgIHJldHVybiBbXG4gICAgICAgICdDTElFTlQnLFxuICAgICAgICAnQ0FDSElORycsXG4gICAgICAgIHZhbHVlID8gJ1lFUycgOiAnTk8nXG4gICAgXTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdm9pZCAwO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKCkge1xuICAgIHJldHVybiBbJ0NMSUVOVCcsICdHRVROQU1FJ107XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHZvaWQgMDtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cygpIHtcbiAgICByZXR1cm4gWydDTElFTlQnLCAnR0VUUkVESVInXTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gZXhwb3J0cy5JU19SRUFEX09OTFkgPSB2b2lkIDA7XG5leHBvcnRzLklTX1JFQURfT05MWSA9IHRydWU7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMoKSB7XG4gICAgcmV0dXJuIFsnQ0xJRU5UJywgJ0lEJ107XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IGV4cG9ydHMuQ2xpZW50S2lsbEZpbHRlcnMgPSB2b2lkIDA7XG52YXIgQ2xpZW50S2lsbEZpbHRlcnM7XG4oZnVuY3Rpb24gKENsaWVudEtpbGxGaWx0ZXJzKSB7XG4gICAgQ2xpZW50S2lsbEZpbHRlcnNbXCJBRERSRVNTXCJdID0gXCJBRERSXCI7XG4gICAgQ2xpZW50S2lsbEZpbHRlcnNbXCJMT0NBTF9BRERSRVNTXCJdID0gXCJMQUREUlwiO1xuICAgIENsaWVudEtpbGxGaWx0ZXJzW1wiSURcIl0gPSBcIklEXCI7XG4gICAgQ2xpZW50S2lsbEZpbHRlcnNbXCJUWVBFXCJdID0gXCJUWVBFXCI7XG4gICAgQ2xpZW50S2lsbEZpbHRlcnNbXCJVU0VSXCJdID0gXCJVU0VSXCI7XG4gICAgQ2xpZW50S2lsbEZpbHRlcnNbXCJTS0lQX01FXCJdID0gXCJTS0lQTUVcIjtcbiAgICBDbGllbnRLaWxsRmlsdGVyc1tcIk1BWEFHRVwiXSA9IFwiTUFYQUdFXCI7XG59KShDbGllbnRLaWxsRmlsdGVycyB8fCAoZXhwb3J0cy5DbGllbnRLaWxsRmlsdGVycyA9IENsaWVudEtpbGxGaWx0ZXJzID0ge30pKTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhmaWx0ZXJzKSB7XG4gICAgY29uc3QgYXJncyA9IFsnQ0xJRU5UJywgJ0tJTEwnXTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShmaWx0ZXJzKSkge1xuICAgICAgICBmb3IgKGNvbnN0IGZpbHRlciBvZiBmaWx0ZXJzKSB7XG4gICAgICAgICAgICBwdXNoRmlsdGVyKGFyZ3MsIGZpbHRlcik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHB1c2hGaWx0ZXIoYXJncywgZmlsdGVycyk7XG4gICAgfVxuICAgIHJldHVybiBhcmdzO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG5mdW5jdGlvbiBwdXNoRmlsdGVyKGFyZ3MsIGZpbHRlcikge1xuICAgIGlmIChmaWx0ZXIgPT09IENsaWVudEtpbGxGaWx0ZXJzLlNLSVBfTUUpIHtcbiAgICAgICAgYXJncy5wdXNoKCdTS0lQTUUnKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBhcmdzLnB1c2goZmlsdGVyLmZpbHRlcik7XG4gICAgc3dpdGNoIChmaWx0ZXIuZmlsdGVyKSB7XG4gICAgICAgIGNhc2UgQ2xpZW50S2lsbEZpbHRlcnMuQUREUkVTUzpcbiAgICAgICAgICAgIGFyZ3MucHVzaChmaWx0ZXIuYWRkcmVzcyk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBDbGllbnRLaWxsRmlsdGVycy5MT0NBTF9BRERSRVNTOlxuICAgICAgICAgICAgYXJncy5wdXNoKGZpbHRlci5sb2NhbEFkZHJlc3MpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgQ2xpZW50S2lsbEZpbHRlcnMuSUQ6XG4gICAgICAgICAgICBhcmdzLnB1c2godHlwZW9mIGZpbHRlci5pZCA9PT0gJ251bWJlcicgP1xuICAgICAgICAgICAgICAgIGZpbHRlci5pZC50b1N0cmluZygpIDpcbiAgICAgICAgICAgICAgICBmaWx0ZXIuaWQpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgQ2xpZW50S2lsbEZpbHRlcnMuVFlQRTpcbiAgICAgICAgICAgIGFyZ3MucHVzaChmaWx0ZXIudHlwZSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBDbGllbnRLaWxsRmlsdGVycy5VU0VSOlxuICAgICAgICAgICAgYXJncy5wdXNoKGZpbHRlci51c2VybmFtZSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBDbGllbnRLaWxsRmlsdGVycy5TS0lQX01FOlxuICAgICAgICAgICAgYXJncy5wdXNoKGZpbHRlci5za2lwTWUgPyAneWVzJyA6ICdubycpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgQ2xpZW50S2lsbEZpbHRlcnMuTUFYQUdFOlxuICAgICAgICAgICAgYXJncy5wdXNoKGZpbHRlci5tYXhBZ2UudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICB9XG59XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1SZXBseSA9IGV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gZXhwb3J0cy5JU19SRUFEX09OTFkgPSB2b2lkIDA7XG5leHBvcnRzLklTX1JFQURfT05MWSA9IHRydWU7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMoKSB7XG4gICAgcmV0dXJuIFsnQ0xJRU5UJywgJ0lORk8nXTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuY29uc3QgQ0xJRU5UX0lORk9fUkVHRVggPSAvKFteXFxzPV0rKT0oW15cXHNdKikvZztcbmZ1bmN0aW9uIHRyYW5zZm9ybVJlcGx5KHJhd1JlcGx5KSB7XG4gICAgY29uc3QgbWFwID0ge307XG4gICAgZm9yIChjb25zdCBpdGVtIG9mIHJhd1JlcGx5Lm1hdGNoQWxsKENMSUVOVF9JTkZPX1JFR0VYKSkge1xuICAgICAgICBtYXBbaXRlbVsxXV0gPSBpdGVtWzJdO1xuICAgIH1cbiAgICBjb25zdCByZXBseSA9IHtcbiAgICAgICAgaWQ6IE51bWJlcihtYXAuaWQpLFxuICAgICAgICBhZGRyOiBtYXAuYWRkcixcbiAgICAgICAgZmQ6IE51bWJlcihtYXAuZmQpLFxuICAgICAgICBuYW1lOiBtYXAubmFtZSxcbiAgICAgICAgYWdlOiBOdW1iZXIobWFwLmFnZSksXG4gICAgICAgIGlkbGU6IE51bWJlcihtYXAuaWRsZSksXG4gICAgICAgIGZsYWdzOiBtYXAuZmxhZ3MsXG4gICAgICAgIGRiOiBOdW1iZXIobWFwLmRiKSxcbiAgICAgICAgc3ViOiBOdW1iZXIobWFwLnN1YiksXG4gICAgICAgIHBzdWI6IE51bWJlcihtYXAucHN1YiksXG4gICAgICAgIG11bHRpOiBOdW1iZXIobWFwLm11bHRpKSxcbiAgICAgICAgcWJ1ZjogTnVtYmVyKG1hcC5xYnVmKSxcbiAgICAgICAgcWJ1ZkZyZWU6IE51bWJlcihtYXBbJ3FidWYtZnJlZSddKSxcbiAgICAgICAgYXJndk1lbTogTnVtYmVyKG1hcFsnYXJndi1tZW0nXSksXG4gICAgICAgIG9ibDogTnVtYmVyKG1hcC5vYmwpLFxuICAgICAgICBvbGw6IE51bWJlcihtYXAub2xsKSxcbiAgICAgICAgb21lbTogTnVtYmVyKG1hcC5vbWVtKSxcbiAgICAgICAgdG90TWVtOiBOdW1iZXIobWFwWyd0b3QtbWVtJ10pLFxuICAgICAgICBldmVudHM6IG1hcC5ldmVudHMsXG4gICAgICAgIGNtZDogbWFwLmNtZCxcbiAgICAgICAgdXNlcjogbWFwLnVzZXIsXG4gICAgICAgIGxpYk5hbWU6IG1hcFsnbGliLW5hbWUnXSxcbiAgICAgICAgbGliVmVyOiBtYXBbJ2xpYi12ZXInXSxcbiAgICB9O1xuICAgIGlmIChtYXAubGFkZHIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXBseS5sYWRkciA9IG1hcC5sYWRkcjtcbiAgICB9XG4gICAgaWYgKG1hcC5yZWRpciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJlcGx5LnJlZGlyID0gTnVtYmVyKG1hcC5yZWRpcik7XG4gICAgfVxuICAgIGlmIChtYXAuc3N1YiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJlcGx5LnNzdWIgPSBOdW1iZXIobWFwLnNzdWIpO1xuICAgIH1cbiAgICBpZiAobWFwWydtdWx0aS1tZW0nXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJlcGx5Lm11bHRpTWVtID0gTnVtYmVyKG1hcFsnbXVsdGktbWVtJ10pO1xuICAgIH1cbiAgICBpZiAobWFwLnJlc3AgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXBseS5yZXNwID0gTnVtYmVyKG1hcC5yZXNwKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcGx5O1xufVxuZXhwb3J0cy50cmFuc2Zvcm1SZXBseSA9IHRyYW5zZm9ybVJlcGx5O1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtUmVwbHkgPSBleHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IGV4cG9ydHMuSVNfUkVBRF9PTkxZID0gdm9pZCAwO1xuY29uc3QgZ2VuZXJpY190cmFuc2Zvcm1lcnNfMSA9IHJlcXVpcmUoXCIuL2dlbmVyaWMtdHJhbnNmb3JtZXJzXCIpO1xuY29uc3QgQ0xJRU5UX0lORk9fMSA9IHJlcXVpcmUoXCIuL0NMSUVOVF9JTkZPXCIpO1xuZXhwb3J0cy5JU19SRUFEX09OTFkgPSB0cnVlO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGZpbHRlcikge1xuICAgIGxldCBhcmdzID0gWydDTElFTlQnLCAnTElTVCddO1xuICAgIGlmIChmaWx0ZXIpIHtcbiAgICAgICAgaWYgKGZpbHRlci5UWVBFICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGFyZ3MucHVzaCgnVFlQRScsIGZpbHRlci5UWVBFKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGFyZ3MucHVzaCgnSUQnKTtcbiAgICAgICAgICAgIGFyZ3MgPSAoMCwgZ2VuZXJpY190cmFuc2Zvcm1lcnNfMS5wdXNoVmVyZGljdEFyZ3VtZW50cykoYXJncywgZmlsdGVyLklEKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYXJncztcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuZnVuY3Rpb24gdHJhbnNmb3JtUmVwbHkocmF3UmVwbHkpIHtcbiAgICBjb25zdCBzcGxpdCA9IHJhd1JlcGx5LnNwbGl0KCdcXG4nKSwgbGVuZ3RoID0gc3BsaXQubGVuZ3RoIC0gMSwgcmVwbHkgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHJlcGx5LnB1c2goKDAsIENMSUVOVF9JTkZPXzEudHJhbnNmb3JtUmVwbHkpKHNwbGl0W2ldKSk7XG4gICAgfVxuICAgIHJldHVybiByZXBseTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtUmVwbHkgPSB0cmFuc2Zvcm1SZXBseTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHZvaWQgMDtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyh2YWx1ZSkge1xuICAgIHJldHVybiBbXG4gICAgICAgICdDTElFTlQnLFxuICAgICAgICAnTk8tRVZJQ1QnLFxuICAgICAgICB2YWx1ZSA/ICdPTicgOiAnT0ZGJ1xuICAgIF07XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHZvaWQgMDtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyh2YWx1ZSkge1xuICAgIHJldHVybiBbXG4gICAgICAgICdDTElFTlQnLFxuICAgICAgICAnTk8tVE9VQ0gnLFxuICAgICAgICB2YWx1ZSA/ICdPTicgOiAnT0ZGJ1xuICAgIF07XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHZvaWQgMDtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyh0aW1lb3V0LCBtb2RlKSB7XG4gICAgY29uc3QgYXJncyA9IFtcbiAgICAgICAgJ0NMSUVOVCcsXG4gICAgICAgICdQQVVTRScsXG4gICAgICAgIHRpbWVvdXQudG9TdHJpbmcoKVxuICAgIF07XG4gICAgaWYgKG1vZGUpIHtcbiAgICAgICAgYXJncy5wdXNoKG1vZGUpO1xuICAgIH1cbiAgICByZXR1cm4gYXJncztcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdm9pZCAwO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKG5hbWUpIHtcbiAgICByZXR1cm4gWydDTElFTlQnLCAnU0VUTkFNRScsIG5hbWVdO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB2b2lkIDA7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMobW9kZSwgb3B0aW9ucykge1xuICAgIGNvbnN0IGFyZ3MgPSBbXG4gICAgICAgICdDTElFTlQnLFxuICAgICAgICAnVFJBQ0tJTkcnLFxuICAgICAgICBtb2RlID8gJ09OJyA6ICdPRkYnXG4gICAgXTtcbiAgICBpZiAobW9kZSkge1xuICAgICAgICBpZiAob3B0aW9ucz8uUkVESVJFQ1QpIHtcbiAgICAgICAgICAgIGFyZ3MucHVzaCgnUkVESVJFQ1QnLCBvcHRpb25zLlJFRElSRUNULnRvU3RyaW5nKCkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0Jyb2FkY2FzdChvcHRpb25zKSkge1xuICAgICAgICAgICAgYXJncy5wdXNoKCdCQ0FTVCcpO1xuICAgICAgICAgICAgaWYgKG9wdGlvbnM/LlBSRUZJWCkge1xuICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KG9wdGlvbnMuUFJFRklYKSkge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHByZWZpeCBvZiBvcHRpb25zLlBSRUZJWCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5wdXNoKCdQUkVGSVgnLCBwcmVmaXgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBhcmdzLnB1c2goJ1BSRUZJWCcsIG9wdGlvbnMuUFJFRklYKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNPcHRJbihvcHRpb25zKSkge1xuICAgICAgICAgICAgYXJncy5wdXNoKCdPUFRJTicpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlzT3B0T3V0KG9wdGlvbnMpKSB7XG4gICAgICAgICAgICBhcmdzLnB1c2goJ09QVE9VVCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zPy5OT0xPT1ApIHtcbiAgICAgICAgICAgIGFyZ3MucHVzaCgnTk9MT09QJyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGFyZ3M7XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbmZ1bmN0aW9uIGlzQnJvYWRjYXN0KG9wdGlvbnMpIHtcbiAgICByZXR1cm4gb3B0aW9ucz8uQkNBU1QgPT09IHRydWU7XG59XG5mdW5jdGlvbiBpc09wdEluKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gb3B0aW9ucz8uT1BUSU4gPT09IHRydWU7XG59XG5mdW5jdGlvbiBpc09wdE91dChvcHRpb25zKSB7XG4gICAgcmV0dXJuIG9wdGlvbnM/Lk9QVE9VVCA9PT0gdHJ1ZTtcbn1cbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybVJlcGx5ID0gZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB2b2lkIDA7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMoKSB7XG4gICAgcmV0dXJuIFsnQ0xJRU5UJywgJ1RSQUNLSU5HSU5GTyddO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG5mdW5jdGlvbiB0cmFuc2Zvcm1SZXBseShyZXBseSkge1xuICAgIHJldHVybiB7XG4gICAgICAgIGZsYWdzOiBuZXcgU2V0KHJlcGx5WzFdKSxcbiAgICAgICAgcmVkaXJlY3Q6IHJlcGx5WzNdLFxuICAgICAgICBwcmVmaXhlczogcmVwbHlbNV1cbiAgICB9O1xufVxuZXhwb3J0cy50cmFuc2Zvcm1SZXBseSA9IHRyYW5zZm9ybVJlcGx5O1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdm9pZCAwO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKCkge1xuICAgIHJldHVybiBbJ0NMSUVOVCcsICdVTlBBVVNFJ107XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHZvaWQgMDtcbmNvbnN0IGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEgPSByZXF1aXJlKFwiLi9nZW5lcmljLXRyYW5zZm9ybWVyc1wiKTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhzbG90cykge1xuICAgIHJldHVybiAoMCwgZ2VuZXJpY190cmFuc2Zvcm1lcnNfMS5wdXNoVmVyZGljdE51bWJlckFyZ3VtZW50cykoWydDTFVTVEVSJywgJ0FERFNMT1RTJ10sIHNsb3RzKTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdm9pZCAwO1xuY29uc3QgZ2VuZXJpY190cmFuc2Zvcm1lcnNfMSA9IHJlcXVpcmUoXCIuL2dlbmVyaWMtdHJhbnNmb3JtZXJzXCIpO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKHJhbmdlcykge1xuICAgIHJldHVybiAoMCwgZ2VuZXJpY190cmFuc2Zvcm1lcnNfMS5wdXNoU2xvdFJhbmdlc0FyZ3VtZW50cykoWydDTFVTVEVSJywgJ0FERFNMT1RTUkFOR0UnXSwgcmFuZ2VzKTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdm9pZCAwO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKCkge1xuICAgIHJldHVybiBbJ0NMVVNURVInLCAnQlVNUEVQT0NIJ107XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHZvaWQgMDtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhub2RlSWQpIHtcbiAgICByZXR1cm4gWydDTFVTVEVSJywgJ0NPVU5ULUZBSUxVUkUtUkVQT1JUUycsIG5vZGVJZF07XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHZvaWQgMDtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhzbG90KSB7XG4gICAgcmV0dXJuIFsnQ0xVU1RFUicsICdDT1VOVEtFWVNJTlNMT1QnLCBzbG90LnRvU3RyaW5nKCldO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB2b2lkIDA7XG5jb25zdCBnZW5lcmljX3RyYW5zZm9ybWVyc18xID0gcmVxdWlyZShcIi4vZ2VuZXJpYy10cmFuc2Zvcm1lcnNcIik7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMoc2xvdHMpIHtcbiAgICByZXR1cm4gKDAsIGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEucHVzaFZlcmRpY3ROdW1iZXJBcmd1bWVudHMpKFsnQ0xVU1RFUicsICdERUxTTE9UUyddLCBzbG90cyk7XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHZvaWQgMDtcbmNvbnN0IGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEgPSByZXF1aXJlKFwiLi9nZW5lcmljLXRyYW5zZm9ybWVyc1wiKTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhyYW5nZXMpIHtcbiAgICByZXR1cm4gKDAsIGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEucHVzaFNsb3RSYW5nZXNBcmd1bWVudHMpKFsnQ0xVU1RFUicsICdERUxTTE9UU1JBTkdFJ10sIHJhbmdlcyk7XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IGV4cG9ydHMuRmFpbG92ZXJNb2RlcyA9IHZvaWQgMDtcbnZhciBGYWlsb3Zlck1vZGVzO1xuKGZ1bmN0aW9uIChGYWlsb3Zlck1vZGVzKSB7XG4gICAgRmFpbG92ZXJNb2Rlc1tcIkZPUkNFXCJdID0gXCJGT1JDRVwiO1xuICAgIEZhaWxvdmVyTW9kZXNbXCJUQUtFT1ZFUlwiXSA9IFwiVEFLRU9WRVJcIjtcbn0pKEZhaWxvdmVyTW9kZXMgfHwgKGV4cG9ydHMuRmFpbG92ZXJNb2RlcyA9IEZhaWxvdmVyTW9kZXMgPSB7fSkpO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKG1vZGUpIHtcbiAgICBjb25zdCBhcmdzID0gWydDTFVTVEVSJywgJ0ZBSUxPVkVSJ107XG4gICAgaWYgKG1vZGUpIHtcbiAgICAgICAgYXJncy5wdXNoKG1vZGUpO1xuICAgIH1cbiAgICByZXR1cm4gYXJncztcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdm9pZCAwO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKCkge1xuICAgIHJldHVybiBbJ0NMVVNURVInLCAnRkxVU0hTTE9UUyddO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB2b2lkIDA7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMobm9kZUlkKSB7XG4gICAgcmV0dXJuIFsnQ0xVU1RFUicsICdGT1JHRVQnLCBub2RlSWRdO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB2b2lkIDA7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMoc2xvdCwgY291bnQpIHtcbiAgICByZXR1cm4gWydDTFVTVEVSJywgJ0dFVEtFWVNJTlNMT1QnLCBzbG90LnRvU3RyaW5nKCksIGNvdW50LnRvU3RyaW5nKCldO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5leHRyYWN0TGluZVZhbHVlID0gZXhwb3J0cy50cmFuc2Zvcm1SZXBseSA9IGV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdm9pZCAwO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKCkge1xuICAgIHJldHVybiBbJ0NMVVNURVInLCAnSU5GTyddO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG5mdW5jdGlvbiB0cmFuc2Zvcm1SZXBseShyZXBseSkge1xuICAgIGNvbnN0IGxpbmVzID0gcmVwbHkuc3BsaXQoJ1xcclxcbicpO1xuICAgIHJldHVybiB7XG4gICAgICAgIHN0YXRlOiBleHRyYWN0TGluZVZhbHVlKGxpbmVzWzBdKSxcbiAgICAgICAgc2xvdHM6IHtcbiAgICAgICAgICAgIGFzc2lnbmVkOiBOdW1iZXIoZXh0cmFjdExpbmVWYWx1ZShsaW5lc1sxXSkpLFxuICAgICAgICAgICAgb2s6IE51bWJlcihleHRyYWN0TGluZVZhbHVlKGxpbmVzWzJdKSksXG4gICAgICAgICAgICBwZmFpbDogTnVtYmVyKGV4dHJhY3RMaW5lVmFsdWUobGluZXNbM10pKSxcbiAgICAgICAgICAgIGZhaWw6IE51bWJlcihleHRyYWN0TGluZVZhbHVlKGxpbmVzWzRdKSlcbiAgICAgICAgfSxcbiAgICAgICAga25vd25Ob2RlczogTnVtYmVyKGV4dHJhY3RMaW5lVmFsdWUobGluZXNbNV0pKSxcbiAgICAgICAgc2l6ZTogTnVtYmVyKGV4dHJhY3RMaW5lVmFsdWUobGluZXNbNl0pKSxcbiAgICAgICAgY3VycmVudEVwb2NoOiBOdW1iZXIoZXh0cmFjdExpbmVWYWx1ZShsaW5lc1s3XSkpLFxuICAgICAgICBteUVwb2NoOiBOdW1iZXIoZXh0cmFjdExpbmVWYWx1ZShsaW5lc1s4XSkpLFxuICAgICAgICBzdGF0czoge1xuICAgICAgICAgICAgbWVzc2FnZXNTZW50OiBOdW1iZXIoZXh0cmFjdExpbmVWYWx1ZShsaW5lc1s5XSkpLFxuICAgICAgICAgICAgbWVzc2FnZXNSZWNlaXZlZDogTnVtYmVyKGV4dHJhY3RMaW5lVmFsdWUobGluZXNbMTBdKSlcbiAgICAgICAgfVxuICAgIH07XG59XG5leHBvcnRzLnRyYW5zZm9ybVJlcGx5ID0gdHJhbnNmb3JtUmVwbHk7XG5mdW5jdGlvbiBleHRyYWN0TGluZVZhbHVlKGxpbmUpIHtcbiAgICByZXR1cm4gbGluZS5zdWJzdHJpbmcobGluZS5pbmRleE9mKCc6JykgKyAxKTtcbn1cbmV4cG9ydHMuZXh0cmFjdExpbmVWYWx1ZSA9IGV4dHJhY3RMaW5lVmFsdWU7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB2b2lkIDA7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMoa2V5KSB7XG4gICAgcmV0dXJuIFsnQ0xVU1RFUicsICdLRVlTTE9UJywga2V5XTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtUmVwbHkgPSBleHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHZvaWQgMDtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cygpIHtcbiAgICByZXR1cm4gWydDTFVTVEVSJywgJ0xJTktTJ107XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbmZ1bmN0aW9uIHRyYW5zZm9ybVJlcGx5KHJlcGx5KSB7XG4gICAgcmV0dXJuIHJlcGx5Lm1hcChwZWVyTGluayA9PiAoe1xuICAgICAgICBkaXJlY3Rpb246IHBlZXJMaW5rWzFdLFxuICAgICAgICBub2RlOiBwZWVyTGlua1szXSxcbiAgICAgICAgY3JlYXRlVGltZTogTnVtYmVyKHBlZXJMaW5rWzVdKSxcbiAgICAgICAgZXZlbnRzOiBwZWVyTGlua1s3XSxcbiAgICAgICAgc2VuZEJ1ZmZlckFsbG9jYXRlZDogTnVtYmVyKHBlZXJMaW5rWzldKSxcbiAgICAgICAgc2VuZEJ1ZmZlclVzZWQ6IE51bWJlcihwZWVyTGlua1sxMV0pXG4gICAgfSkpO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1SZXBseSA9IHRyYW5zZm9ybVJlcGx5O1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdm9pZCAwO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGlwLCBwb3J0KSB7XG4gICAgcmV0dXJuIFsnQ0xVU1RFUicsICdNRUVUJywgaXAsIHBvcnQudG9TdHJpbmcoKV07XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHZvaWQgMDtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cygpIHtcbiAgICByZXR1cm4gWydDTFVTVEVSJywgJ01ZSUQnXTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gZXhwb3J0cy5JU19SRUFEX09OTFkgPSB2b2lkIDA7XG5leHBvcnRzLklTX1JFQURfT05MWSA9IHRydWU7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMoKSB7XG4gICAgcmV0dXJuIFsnQ0xVU1RFUicsICdNWVNIQVJESUQnXTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtUmVwbHkgPSBleHBvcnRzLlJlZGlzQ2x1c3Rlck5vZGVMaW5rU3RhdGVzID0gZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB2b2lkIDA7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMoKSB7XG4gICAgcmV0dXJuIFsnQ0xVU1RFUicsICdOT0RFUyddO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG52YXIgUmVkaXNDbHVzdGVyTm9kZUxpbmtTdGF0ZXM7XG4oZnVuY3Rpb24gKFJlZGlzQ2x1c3Rlck5vZGVMaW5rU3RhdGVzKSB7XG4gICAgUmVkaXNDbHVzdGVyTm9kZUxpbmtTdGF0ZXNbXCJDT05ORUNURURcIl0gPSBcImNvbm5lY3RlZFwiO1xuICAgIFJlZGlzQ2x1c3Rlck5vZGVMaW5rU3RhdGVzW1wiRElTQ09OTkVDVEVEXCJdID0gXCJkaXNjb25uZWN0ZWRcIjtcbn0pKFJlZGlzQ2x1c3Rlck5vZGVMaW5rU3RhdGVzIHx8IChleHBvcnRzLlJlZGlzQ2x1c3Rlck5vZGVMaW5rU3RhdGVzID0gUmVkaXNDbHVzdGVyTm9kZUxpbmtTdGF0ZXMgPSB7fSkpO1xuZnVuY3Rpb24gdHJhbnNmb3JtUmVwbHkocmVwbHkpIHtcbiAgICBjb25zdCBsaW5lcyA9IHJlcGx5LnNwbGl0KCdcXG4nKTtcbiAgICBsaW5lcy5wb3AoKTsgLy8gbGFzdCBsaW5lIGlzIGVtcHR5XG4gICAgY29uc3QgbWFzdGVyc01hcCA9IG5ldyBNYXAoKSwgcmVwbGljYXNNYXAgPSBuZXcgTWFwKCk7XG4gICAgZm9yIChjb25zdCBsaW5lIG9mIGxpbmVzKSB7XG4gICAgICAgIGNvbnN0IFtpZCwgYWRkcmVzcywgZmxhZ3MsIG1hc3RlcklkLCBwaW5nU2VudCwgcG9uZ1JlY3YsIGNvbmZpZ0Vwb2NoLCBsaW5rU3RhdGUsIC4uLnNsb3RzXSA9IGxpbmUuc3BsaXQoJyAnKSwgbm9kZSA9IHtcbiAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgYWRkcmVzcyxcbiAgICAgICAgICAgIC4uLnRyYW5zZm9ybU5vZGVBZGRyZXNzKGFkZHJlc3MpLFxuICAgICAgICAgICAgZmxhZ3M6IGZsYWdzLnNwbGl0KCcsJyksXG4gICAgICAgICAgICBwaW5nU2VudDogTnVtYmVyKHBpbmdTZW50KSxcbiAgICAgICAgICAgIHBvbmdSZWN2OiBOdW1iZXIocG9uZ1JlY3YpLFxuICAgICAgICAgICAgY29uZmlnRXBvY2g6IE51bWJlcihjb25maWdFcG9jaCksXG4gICAgICAgICAgICBsaW5rU3RhdGU6IGxpbmtTdGF0ZVxuICAgICAgICB9O1xuICAgICAgICBpZiAobWFzdGVySWQgPT09ICctJykge1xuICAgICAgICAgICAgbGV0IHJlcGxpY2FzID0gcmVwbGljYXNNYXAuZ2V0KGlkKTtcbiAgICAgICAgICAgIGlmICghcmVwbGljYXMpIHtcbiAgICAgICAgICAgICAgICByZXBsaWNhcyA9IFtdO1xuICAgICAgICAgICAgICAgIHJlcGxpY2FzTWFwLnNldChpZCwgcmVwbGljYXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbWFzdGVyc01hcC5zZXQoaWQsIHtcbiAgICAgICAgICAgICAgICAuLi5ub2RlLFxuICAgICAgICAgICAgICAgIHNsb3RzOiBzbG90cy5tYXAoc2xvdCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFRPRE86IGltcG9ydGluZyAmIGV4cG9ydGluZyAoaHR0cHM6Ly9yZWRpcy5pby9jb21tYW5kcy9jbHVzdGVyLW5vZGVzI3NwZWNpYWwtc2xvdC1lbnRyaWVzKVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBbZnJvbVN0cmluZywgdG9TdHJpbmddID0gc2xvdC5zcGxpdCgnLScsIDIpLCBmcm9tID0gTnVtYmVyKGZyb21TdHJpbmcpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvOiB0b1N0cmluZyA/IE51bWJlcih0b1N0cmluZykgOiBmcm9tXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgcmVwbGljYXNcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgcmVwbGljYXMgPSByZXBsaWNhc01hcC5nZXQobWFzdGVySWQpO1xuICAgICAgICAgICAgaWYgKCFyZXBsaWNhcykge1xuICAgICAgICAgICAgICAgIHJlcGxpY2FzTWFwLnNldChtYXN0ZXJJZCwgW25vZGVdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlcGxpY2FzLnB1c2gobm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIFsuLi5tYXN0ZXJzTWFwLnZhbHVlcygpXTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtUmVwbHkgPSB0cmFuc2Zvcm1SZXBseTtcbmZ1bmN0aW9uIHRyYW5zZm9ybU5vZGVBZGRyZXNzKGFkZHJlc3MpIHtcbiAgICBjb25zdCBpbmRleE9mQ29sb24gPSBhZGRyZXNzLmxhc3RJbmRleE9mKCc6JyksIGluZGV4T2ZBdCA9IGFkZHJlc3MuaW5kZXhPZignQCcsIGluZGV4T2ZDb2xvbiksIGhvc3QgPSBhZGRyZXNzLnN1YnN0cmluZygwLCBpbmRleE9mQ29sb24pO1xuICAgIGlmIChpbmRleE9mQXQgPT09IC0xKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBob3N0LFxuICAgICAgICAgICAgcG9ydDogTnVtYmVyKGFkZHJlc3Muc3Vic3RyaW5nKGluZGV4T2ZDb2xvbiArIDEpKSxcbiAgICAgICAgICAgIGNwb3J0OiBudWxsXG4gICAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIGhvc3Q6IGFkZHJlc3Muc3Vic3RyaW5nKDAsIGluZGV4T2ZDb2xvbiksXG4gICAgICAgIHBvcnQ6IE51bWJlcihhZGRyZXNzLnN1YnN0cmluZyhpbmRleE9mQ29sb24gKyAxLCBpbmRleE9mQXQpKSxcbiAgICAgICAgY3BvcnQ6IE51bWJlcihhZGRyZXNzLnN1YnN0cmluZyhpbmRleE9mQXQgKyAxKSlcbiAgICB9O1xufVxuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtUmVwbHkgPSBleHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHZvaWQgMDtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhub2RlSWQpIHtcbiAgICByZXR1cm4gWydDTFVTVEVSJywgJ1JFUExJQ0FTJywgbm9kZUlkXTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xudmFyIENMVVNURVJfTk9ERVNfMSA9IHJlcXVpcmUoXCIuL0NMVVNURVJfTk9ERVNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ0cmFuc2Zvcm1SZXBseVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gQ0xVU1RFUl9OT0RFU18xLnRyYW5zZm9ybVJlcGx5OyB9IH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdm9pZCAwO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKG5vZGVJZCkge1xuICAgIHJldHVybiBbJ0NMVVNURVInLCAnUkVQTElDQVRFJywgbm9kZUlkXTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdm9pZCAwO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKG1vZGUpIHtcbiAgICBjb25zdCBhcmdzID0gWydDTFVTVEVSJywgJ1JFU0VUJ107XG4gICAgaWYgKG1vZGUpIHtcbiAgICAgICAgYXJncy5wdXNoKG1vZGUpO1xuICAgIH1cbiAgICByZXR1cm4gYXJncztcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdm9pZCAwO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKCkge1xuICAgIHJldHVybiBbJ0NMVVNURVInLCAnU0FWRUNPTkZJRyddO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB2b2lkIDA7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMoY29uZmlnRXBvY2gpIHtcbiAgICByZXR1cm4gWydDTFVTVEVSJywgJ1NFVC1DT05GSUctRVBPQ0gnLCBjb25maWdFcG9jaC50b1N0cmluZygpXTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gZXhwb3J0cy5DbHVzdGVyU2xvdFN0YXRlcyA9IHZvaWQgMDtcbnZhciBDbHVzdGVyU2xvdFN0YXRlcztcbihmdW5jdGlvbiAoQ2x1c3RlclNsb3RTdGF0ZXMpIHtcbiAgICBDbHVzdGVyU2xvdFN0YXRlc1tcIklNUE9SVElOR1wiXSA9IFwiSU1QT1JUSU5HXCI7XG4gICAgQ2x1c3RlclNsb3RTdGF0ZXNbXCJNSUdSQVRJTkdcIl0gPSBcIk1JR1JBVElOR1wiO1xuICAgIENsdXN0ZXJTbG90U3RhdGVzW1wiU1RBQkxFXCJdID0gXCJTVEFCTEVcIjtcbiAgICBDbHVzdGVyU2xvdFN0YXRlc1tcIk5PREVcIl0gPSBcIk5PREVcIjtcbn0pKENsdXN0ZXJTbG90U3RhdGVzIHx8IChleHBvcnRzLkNsdXN0ZXJTbG90U3RhdGVzID0gQ2x1c3RlclNsb3RTdGF0ZXMgPSB7fSkpO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKHNsb3QsIHN0YXRlLCBub2RlSWQpIHtcbiAgICBjb25zdCBhcmdzID0gWydDTFVTVEVSJywgJ1NFVFNMT1QnLCBzbG90LnRvU3RyaW5nKCksIHN0YXRlXTtcbiAgICBpZiAobm9kZUlkKSB7XG4gICAgICAgIGFyZ3MucHVzaChub2RlSWQpO1xuICAgIH1cbiAgICByZXR1cm4gYXJncztcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtUmVwbHkgPSBleHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHZvaWQgMDtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cygpIHtcbiAgICByZXR1cm4gWydDTFVTVEVSJywgJ1NMT1RTJ107XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbjtcbmZ1bmN0aW9uIHRyYW5zZm9ybVJlcGx5KHJlcGx5KSB7XG4gICAgcmV0dXJuIHJlcGx5Lm1hcCgoW2Zyb20sIHRvLCBtYXN0ZXIsIC4uLnJlcGxpY2FzXSkgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZnJvbSxcbiAgICAgICAgICAgIHRvLFxuICAgICAgICAgICAgbWFzdGVyOiB0cmFuc2Zvcm1Ob2RlKG1hc3RlciksXG4gICAgICAgICAgICByZXBsaWNhczogcmVwbGljYXMubWFwKHRyYW5zZm9ybU5vZGUpXG4gICAgICAgIH07XG4gICAgfSk7XG59XG5leHBvcnRzLnRyYW5zZm9ybVJlcGx5ID0gdHJhbnNmb3JtUmVwbHk7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Ob2RlKFtpcCwgcG9ydCwgaWRdKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgaXAsXG4gICAgICAgIHBvcnQsXG4gICAgICAgIGlkXG4gICAgfTtcbn1cbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IGV4cG9ydHMuSVNfUkVBRF9PTkxZID0gdm9pZCAwO1xuZXhwb3J0cy5JU19SRUFEX09OTFkgPSB0cnVlO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKCkge1xuICAgIHJldHVybiBbJ0NPTU1BTkQnLCAnQ09VTlQnXTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gZXhwb3J0cy5JU19SRUFEX09OTFkgPSB2b2lkIDA7XG5leHBvcnRzLklTX1JFQURfT05MWSA9IHRydWU7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMoYXJncykge1xuICAgIHJldHVybiBbJ0NPTU1BTkQnLCAnR0VUS0VZUycsIC4uLmFyZ3NdO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1SZXBseSA9IGV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gZXhwb3J0cy5JU19SRUFEX09OTFkgPSB2b2lkIDA7XG5leHBvcnRzLklTX1JFQURfT05MWSA9IHRydWU7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMoYXJncykge1xuICAgIHJldHVybiBbJ0NPTU1BTkQnLCAnR0VUS0VZU0FOREZMQUdTJywgLi4uYXJnc107XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbmZ1bmN0aW9uIHRyYW5zZm9ybVJlcGx5KHJlcGx5KSB7XG4gICAgcmV0dXJuIHJlcGx5Lm1hcCgoW2tleSwgZmxhZ3NdKSA9PiAoe1xuICAgICAgICBrZXksXG4gICAgICAgIGZsYWdzXG4gICAgfSkpO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1SZXBseSA9IHRyYW5zZm9ybVJlcGx5O1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtUmVwbHkgPSBleHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IGV4cG9ydHMuSVNfUkVBRF9PTkxZID0gdm9pZCAwO1xuY29uc3QgZ2VuZXJpY190cmFuc2Zvcm1lcnNfMSA9IHJlcXVpcmUoXCIuL2dlbmVyaWMtdHJhbnNmb3JtZXJzXCIpO1xuZXhwb3J0cy5JU19SRUFEX09OTFkgPSB0cnVlO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGNvbW1hbmRzKSB7XG4gICAgcmV0dXJuIFsnQ09NTUFORCcsICdJTkZPJywgLi4uY29tbWFuZHNdO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG5mdW5jdGlvbiB0cmFuc2Zvcm1SZXBseShyZXBseSkge1xuICAgIHJldHVybiByZXBseS5tYXAoY29tbWFuZCA9PiBjb21tYW5kID8gKDAsIGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEudHJhbnNmb3JtQ29tbWFuZFJlcGx5KShjb21tYW5kKSA6IG51bGwpO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1SZXBseSA9IHRyYW5zZm9ybVJlcGx5O1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gZXhwb3J0cy5GaWx0ZXJCeSA9IGV4cG9ydHMuSVNfUkVBRF9PTkxZID0gdm9pZCAwO1xuZXhwb3J0cy5JU19SRUFEX09OTFkgPSB0cnVlO1xudmFyIEZpbHRlckJ5O1xuKGZ1bmN0aW9uIChGaWx0ZXJCeSkge1xuICAgIEZpbHRlckJ5W1wiTU9EVUxFXCJdID0gXCJNT0RVTEVcIjtcbiAgICBGaWx0ZXJCeVtcIkFDTENBVFwiXSA9IFwiQUNMQ0FUXCI7XG4gICAgRmlsdGVyQnlbXCJQQVRURVJOXCJdID0gXCJQQVRURVJOXCI7XG59KShGaWx0ZXJCeSB8fCAoZXhwb3J0cy5GaWx0ZXJCeSA9IEZpbHRlckJ5ID0ge30pKTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhmaWx0ZXIpIHtcbiAgICBjb25zdCBhcmdzID0gWydDT01NQU5EJywgJ0xJU1QnXTtcbiAgICBpZiAoZmlsdGVyKSB7XG4gICAgICAgIGFyZ3MucHVzaCgnRklMVEVSQlknLCBmaWx0ZXIuZmlsdGVyQnksIGZpbHRlci52YWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiBhcmdzO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1SZXBseSA9IGV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gZXhwb3J0cy5JU19SRUFEX09OTFkgPSB2b2lkIDA7XG5jb25zdCBnZW5lcmljX3RyYW5zZm9ybWVyc18xID0gcmVxdWlyZShcIi4vZ2VuZXJpYy10cmFuc2Zvcm1lcnNcIik7XG5leHBvcnRzLklTX1JFQURfT05MWSA9IHRydWU7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMoKSB7XG4gICAgcmV0dXJuIFsnQ09NTUFORCddO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG5mdW5jdGlvbiB0cmFuc2Zvcm1SZXBseShyZXBseSkge1xuICAgIHJldHVybiByZXBseS5tYXAoZ2VuZXJpY190cmFuc2Zvcm1lcnNfMS50cmFuc2Zvcm1Db21tYW5kUmVwbHkpO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1SZXBseSA9IHRyYW5zZm9ybVJlcGx5O1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtUmVwbHkgPSBleHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHZvaWQgMDtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhwYXJhbWV0ZXIpIHtcbiAgICByZXR1cm4gWydDT05GSUcnLCAnR0VUJywgcGFyYW1ldGVyXTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xudmFyIGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEgPSByZXF1aXJlKFwiLi9nZW5lcmljLXRyYW5zZm9ybWVyc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInRyYW5zZm9ybVJlcGx5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBnZW5lcmljX3RyYW5zZm9ybWVyc18xLnRyYW5zZm9ybVR1cGxlc1JlcGx5OyB9IH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdm9pZCAwO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKCkge1xuICAgIHJldHVybiBbJ0NPTkZJRycsICdSRVNFVFNUQVQnXTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdm9pZCAwO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKCkge1xuICAgIHJldHVybiBbJ0NPTkZJRycsICdSRVdSSVRFJ107XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHZvaWQgMDtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyguLi5bcGFyYW1ldGVyT3JDb25maWcsIHZhbHVlXSkge1xuICAgIGNvbnN0IGFyZ3MgPSBbJ0NPTkZJRycsICdTRVQnXTtcbiAgICBpZiAodHlwZW9mIHBhcmFtZXRlck9yQ29uZmlnID09PSAnc3RyaW5nJykge1xuICAgICAgICBhcmdzLnB1c2gocGFyYW1ldGVyT3JDb25maWcsIHZhbHVlKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHBhcmFtZXRlck9yQ29uZmlnKSkge1xuICAgICAgICAgICAgYXJncy5wdXNoKGtleSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhcmdzO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLklTX1JFQURfT05MWSA9IHZvaWQgMDtcbmV4cG9ydHMuSVNfUkVBRF9PTkxZID0gdHJ1ZTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cygpIHtcbiAgICByZXR1cm4gWydEQlNJWkUnXTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdm9pZCAwO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKCkge1xuICAgIHJldHVybiBbJ0RJU0NBUkQnXTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gZXhwb3J0cy5JU19SRUFEX09OTFkgPSB2b2lkIDA7XG5leHBvcnRzLklTX1JFQURfT05MWSA9IHRydWU7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMobWVzc2FnZSkge1xuICAgIHJldHVybiBbJ0VDSE8nLCBtZXNzYWdlXTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdm9pZCAwO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKG9wdGlvbnMpIHtcbiAgICBjb25zdCBhcmdzID0gWydGQUlMT1ZFUiddO1xuICAgIGlmIChvcHRpb25zPy5UTykge1xuICAgICAgICBhcmdzLnB1c2goJ1RPJywgb3B0aW9ucy5UTy5ob3N0LCBvcHRpb25zLlRPLnBvcnQudG9TdHJpbmcoKSk7XG4gICAgICAgIGlmIChvcHRpb25zLlRPLkZPUkNFKSB7XG4gICAgICAgICAgICBhcmdzLnB1c2goJ0ZPUkNFJyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKG9wdGlvbnM/LkFCT1JUKSB7XG4gICAgICAgIGFyZ3MucHVzaCgnQUJPUlQnKTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnM/LlRJTUVPVVQpIHtcbiAgICAgICAgYXJncy5wdXNoKCdUSU1FT1VUJywgb3B0aW9ucy5USU1FT1VULnRvU3RyaW5nKCkpO1xuICAgIH1cbiAgICByZXR1cm4gYXJncztcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gZXhwb3J0cy5SZWRpc0ZsdXNoTW9kZXMgPSB2b2lkIDA7XG52YXIgUmVkaXNGbHVzaE1vZGVzO1xuKGZ1bmN0aW9uIChSZWRpc0ZsdXNoTW9kZXMpIHtcbiAgICBSZWRpc0ZsdXNoTW9kZXNbXCJBU1lOQ1wiXSA9IFwiQVNZTkNcIjtcbiAgICBSZWRpc0ZsdXNoTW9kZXNbXCJTWU5DXCJdID0gXCJTWU5DXCI7XG59KShSZWRpc0ZsdXNoTW9kZXMgfHwgKGV4cG9ydHMuUmVkaXNGbHVzaE1vZGVzID0gUmVkaXNGbHVzaE1vZGVzID0ge30pKTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhtb2RlKSB7XG4gICAgY29uc3QgYXJncyA9IFsnRkxVU0hBTEwnXTtcbiAgICBpZiAobW9kZSkge1xuICAgICAgICBhcmdzLnB1c2gobW9kZSk7XG4gICAgfVxuICAgIHJldHVybiBhcmdzO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB2b2lkIDA7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMobW9kZSkge1xuICAgIGNvbnN0IGFyZ3MgPSBbJ0ZMVVNIREInXTtcbiAgICBpZiAobW9kZSkge1xuICAgICAgICBhcmdzLnB1c2gobW9kZSk7XG4gICAgfVxuICAgIHJldHVybiBhcmdzO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB2b2lkIDA7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMobGlicmFyeSkge1xuICAgIHJldHVybiBbJ0ZVTkNUSU9OJywgJ0RFTEVURScsIGxpYnJhcnldO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB2b2lkIDA7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMoKSB7XG4gICAgcmV0dXJuIFsnRlVOQ1RJT04nLCAnRFVNUCddO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB2b2lkIDA7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMobW9kZSkge1xuICAgIGNvbnN0IGFyZ3MgPSBbJ0ZVTkNUSU9OJywgJ0ZMVVNIJ107XG4gICAgaWYgKG1vZGUpIHtcbiAgICAgICAgYXJncy5wdXNoKG1vZGUpO1xuICAgIH1cbiAgICByZXR1cm4gYXJncztcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdm9pZCAwO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKCkge1xuICAgIHJldHVybiBbJ0ZVTkNUSU9OJywgJ0tJTEwnXTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtUmVwbHkgPSBleHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHZvaWQgMDtcbmNvbnN0IGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEgPSByZXF1aXJlKFwiLi9nZW5lcmljLXRyYW5zZm9ybWVyc1wiKTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhwYXR0ZXJuKSB7XG4gICAgY29uc3QgYXJncyA9IFsnRlVOQ1RJT04nLCAnTElTVCddO1xuICAgIGlmIChwYXR0ZXJuKSB7XG4gICAgICAgIGFyZ3MucHVzaChwYXR0ZXJuKTtcbiAgICB9XG4gICAgcmV0dXJuIGFyZ3M7XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbmZ1bmN0aW9uIHRyYW5zZm9ybVJlcGx5KHJlcGx5KSB7XG4gICAgcmV0dXJuIHJlcGx5Lm1hcChnZW5lcmljX3RyYW5zZm9ybWVyc18xLnRyYW5zZm9ybUZ1bmN0aW9uTGlzdEl0ZW1SZXBseSk7XG59XG5leHBvcnRzLnRyYW5zZm9ybVJlcGx5ID0gdHJhbnNmb3JtUmVwbHk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1SZXBseSA9IGV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdm9pZCAwO1xuY29uc3QgRlVOQ1RJT05fTElTVF8xID0gcmVxdWlyZShcIi4vRlVOQ1RJT05fTElTVFwiKTtcbmNvbnN0IGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEgPSByZXF1aXJlKFwiLi9nZW5lcmljLXRyYW5zZm9ybWVyc1wiKTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhwYXR0ZXJuKSB7XG4gICAgY29uc3QgYXJncyA9ICgwLCBGVU5DVElPTl9MSVNUXzEudHJhbnNmb3JtQXJndW1lbnRzKShwYXR0ZXJuKTtcbiAgICBhcmdzLnB1c2goJ1dJVEhDT0RFJyk7XG4gICAgcmV0dXJuIGFyZ3M7XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbmZ1bmN0aW9uIHRyYW5zZm9ybVJlcGx5KHJlcGx5KSB7XG4gICAgcmV0dXJuIHJlcGx5Lm1hcChsaWJyYXJ5ID0+ICh7XG4gICAgICAgIC4uLigwLCBnZW5lcmljX3RyYW5zZm9ybWVyc18xLnRyYW5zZm9ybUZ1bmN0aW9uTGlzdEl0ZW1SZXBseSkobGlicmFyeSksXG4gICAgICAgIGxpYnJhcnlDb2RlOiBsaWJyYXJ5WzddXG4gICAgfSkpO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1SZXBseSA9IHRyYW5zZm9ybVJlcGx5O1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdm9pZCAwO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGNvZGUsIG9wdGlvbnMpIHtcbiAgICBjb25zdCBhcmdzID0gWydGVU5DVElPTicsICdMT0FEJ107XG4gICAgaWYgKG9wdGlvbnM/LlJFUExBQ0UpIHtcbiAgICAgICAgYXJncy5wdXNoKCdSRVBMQUNFJyk7XG4gICAgfVxuICAgIGFyZ3MucHVzaChjb2RlKTtcbiAgICByZXR1cm4gYXJncztcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdm9pZCAwO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGR1bXAsIG1vZGUpIHtcbiAgICBjb25zdCBhcmdzID0gWydGVU5DVElPTicsICdSRVNUT1JFJywgZHVtcF07XG4gICAgaWYgKG1vZGUpIHtcbiAgICAgICAgYXJncy5wdXNoKG1vZGUpO1xuICAgIH1cbiAgICByZXR1cm4gYXJncztcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtUmVwbHkgPSBleHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHZvaWQgMDtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cygpIHtcbiAgICByZXR1cm4gWydGVU5DVElPTicsICdTVEFUUyddO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG5mdW5jdGlvbiB0cmFuc2Zvcm1SZXBseShyZXBseSkge1xuICAgIGNvbnN0IGVuZ2luZXMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVwbHlbM10ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgZW5naW5lc1tyZXBseVszXVtpXV0gPSB7XG4gICAgICAgICAgICBsaWJyYXJpZXNDb3VudDogcmVwbHlbM11bKytpXVsxXSxcbiAgICAgICAgICAgIGZ1bmN0aW9uc0NvdW50OiByZXBseVszXVtpXVszXVxuICAgICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBydW5uaW5nU2NyaXB0OiByZXBseVsxXSA9PT0gbnVsbCA/IG51bGwgOiB7XG4gICAgICAgICAgICBuYW1lOiByZXBseVsxXVsxXSxcbiAgICAgICAgICAgIGNvbW1hbmQ6IHJlcGx5WzFdWzNdLFxuICAgICAgICAgICAgZHVyYXRpb25NczogcmVwbHlbMV1bNV1cbiAgICAgICAgfSxcbiAgICAgICAgZW5naW5lc1xuICAgIH07XG59XG5leHBvcnRzLnRyYW5zZm9ybVJlcGx5ID0gdHJhbnNmb3JtUmVwbHk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1SZXBseSA9IGV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdm9pZCAwO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKG9wdGlvbnMpIHtcbiAgICBjb25zdCBhcmdzID0gWydIRUxMTyddO1xuICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAgIGFyZ3MucHVzaChvcHRpb25zLnByb3RvdmVyLnRvU3RyaW5nKCkpO1xuICAgICAgICBpZiAob3B0aW9ucy5hdXRoKSB7XG4gICAgICAgICAgICBhcmdzLnB1c2goJ0FVVEgnLCBvcHRpb25zLmF1dGgudXNlcm5hbWUsIG9wdGlvbnMuYXV0aC5wYXNzd29yZCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuY2xpZW50TmFtZSkge1xuICAgICAgICAgICAgYXJncy5wdXNoKCdTRVROQU1FJywgb3B0aW9ucy5jbGllbnROYW1lKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYXJncztcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuZnVuY3Rpb24gdHJhbnNmb3JtUmVwbHkocmVwbHkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBzZXJ2ZXI6IHJlcGx5WzFdLFxuICAgICAgICB2ZXJzaW9uOiByZXBseVszXSxcbiAgICAgICAgcHJvdG86IHJlcGx5WzVdLFxuICAgICAgICBpZDogcmVwbHlbN10sXG4gICAgICAgIG1vZGU6IHJlcGx5WzldLFxuICAgICAgICByb2xlOiByZXBseVsxMV0sXG4gICAgICAgIG1vZHVsZXM6IHJlcGx5WzEzXVxuICAgIH07XG59XG5leHBvcnRzLnRyYW5zZm9ybVJlcGx5ID0gdHJhbnNmb3JtUmVwbHk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLklTX1JFQURfT05MWSA9IHZvaWQgMDtcbmV4cG9ydHMuSVNfUkVBRF9PTkxZID0gdHJ1ZTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhzZWN0aW9uKSB7XG4gICAgY29uc3QgYXJncyA9IFsnSU5GTyddO1xuICAgIGlmIChzZWN0aW9uKSB7XG4gICAgICAgIGFyZ3MucHVzaChzZWN0aW9uKTtcbiAgICB9XG4gICAgcmV0dXJuIGFyZ3M7XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHZvaWQgMDtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhwYXR0ZXJuKSB7XG4gICAgcmV0dXJuIFsnS0VZUycsIHBhdHRlcm5dO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1SZXBseSA9IGV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gZXhwb3J0cy5JU19SRUFEX09OTFkgPSB2b2lkIDA7XG5leHBvcnRzLklTX1JFQURfT05MWSA9IHRydWU7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMoKSB7XG4gICAgcmV0dXJuIFsnTEFTVFNBVkUnXTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuZnVuY3Rpb24gdHJhbnNmb3JtUmVwbHkocmVwbHkpIHtcbiAgICByZXR1cm4gbmV3IERhdGUocmVwbHkpO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1SZXBseSA9IHRyYW5zZm9ybVJlcGx5O1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdm9pZCAwO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKCkge1xuICAgIHJldHVybiBbJ0xBVEVOQ1knLCAnRE9DVE9SJ107XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHZvaWQgMDtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhldmVudCkge1xuICAgIHJldHVybiBbJ0xBVEVOQ1knLCAnR1JBUEgnLCBldmVudF07XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHZvaWQgMDtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhldmVudCkge1xuICAgIHJldHVybiBbJ0xBVEVOQ1knLCAnSElTVE9SWScsIGV2ZW50XTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdm9pZCAwO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKCkge1xuICAgIHJldHVybiBbJ0xBVEVOQ1knLCAnTEFURVNUJ107XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IGV4cG9ydHMuSVNfUkVBRF9PTkxZID0gdm9pZCAwO1xuZXhwb3J0cy5JU19SRUFEX09OTFkgPSB0cnVlO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKHZlcnNpb24sIC4uLm9wdGlvbmFsQXJndW1lbnRzKSB7XG4gICAgY29uc3QgYXJncyA9IFsnTE9MV1VUJ107XG4gICAgaWYgKHZlcnNpb24pIHtcbiAgICAgICAgYXJncy5wdXNoKCdWRVJTSU9OJywgdmVyc2lvbi50b1N0cmluZygpLCAuLi5vcHRpb25hbEFyZ3VtZW50cy5tYXAoU3RyaW5nKSk7XG4gICAgfVxuICAgIHJldHVybiBhcmdzO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB2b2lkIDA7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMoKSB7XG4gICAgcmV0dXJuIFsnTUVNT1JZJywgJ0RPQ1RPUiddO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB2b2lkIDA7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMoKSB7XG4gICAgcmV0dXJuIFsnTUVNT1JZJywgJ01BTExPQy1TVEFUUyddO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB2b2lkIDA7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMoKSB7XG4gICAgcmV0dXJuIFsnTUVNT1JZJywgJ1BVUkdFJ107XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybVJlcGx5ID0gZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB2b2lkIDA7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMoKSB7XG4gICAgcmV0dXJuIFsnTUVNT1JZJywgJ1NUQVRTJ107XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbmNvbnN0IEZJRUxEU19NQVBQSU5HID0ge1xuICAgICdwZWFrLmFsbG9jYXRlZCc6ICdwZWFrQWxsb2NhdGVkJyxcbiAgICAndG90YWwuYWxsb2NhdGVkJzogJ3RvdGFsQWxsb2NhdGVkJyxcbiAgICAnc3RhcnR1cC5hbGxvY2F0ZWQnOiAnc3RhcnR1cEFsbG9jYXRlZCcsXG4gICAgJ3JlcGxpY2F0aW9uLmJhY2tsb2cnOiAncmVwbGljYXRpb25CYWNrbG9nJyxcbiAgICAnY2xpZW50cy5zbGF2ZXMnOiAnY2xpZW50c1JlcGxpY2FzJyxcbiAgICAnY2xpZW50cy5ub3JtYWwnOiAnY2xpZW50c05vcm1hbCcsXG4gICAgJ2FvZi5idWZmZXInOiAnYW9mQnVmZmVyJyxcbiAgICAnbHVhLmNhY2hlcyc6ICdsdWFDYWNoZXMnLFxuICAgICdvdmVyaGVhZC50b3RhbCc6ICdvdmVyaGVhZFRvdGFsJyxcbiAgICAna2V5cy5jb3VudCc6ICdrZXlzQ291bnQnLFxuICAgICdrZXlzLmJ5dGVzLXBlci1rZXknOiAna2V5c0J5dGVzUGVyS2V5JyxcbiAgICAnZGF0YXNldC5ieXRlcyc6ICdkYXRhc2V0Qnl0ZXMnLFxuICAgICdkYXRhc2V0LnBlcmNlbnRhZ2UnOiAnZGF0YXNldFBlcmNlbnRhZ2UnLFxuICAgICdwZWFrLnBlcmNlbnRhZ2UnOiAncGVha1BlcmNlbnRhZ2UnLFxuICAgICdhbGxvY2F0b3IuYWxsb2NhdGVkJzogJ2FsbG9jYXRvckFsbG9jYXRlZCcsXG4gICAgJ2FsbG9jYXRvci5hY3RpdmUnOiAnYWxsb2NhdG9yQWN0aXZlJyxcbiAgICAnYWxsb2NhdG9yLnJlc2lkZW50JzogJ2FsbG9jYXRvclJlc2lkZW50JyxcbiAgICAnYWxsb2NhdG9yLWZyYWdtZW50YXRpb24ucmF0aW8nOiAnYWxsb2NhdG9yRnJhZ21lbnRhdGlvblJhdGlvJyxcbiAgICAnYWxsb2NhdG9yLWZyYWdtZW50YXRpb24uYnl0ZXMnOiAnYWxsb2NhdG9yRnJhZ21lbnRhdGlvbkJ5dGVzJyxcbiAgICAnYWxsb2NhdG9yLXJzcy5yYXRpbyc6ICdhbGxvY2F0b3JSc3NSYXRpbycsXG4gICAgJ2FsbG9jYXRvci1yc3MuYnl0ZXMnOiAnYWxsb2NhdG9yUnNzQnl0ZXMnLFxuICAgICdyc3Mtb3ZlcmhlYWQucmF0aW8nOiAncnNzT3ZlcmhlYWRSYXRpbycsXG4gICAgJ3Jzcy1vdmVyaGVhZC5ieXRlcyc6ICdyc3NPdmVyaGVhZEJ5dGVzJyxcbiAgICAnZnJhZ21lbnRhdGlvbic6ICdmcmFnbWVudGF0aW9uJyxcbiAgICAnZnJhZ21lbnRhdGlvbi5ieXRlcyc6ICdmcmFnbWVudGF0aW9uQnl0ZXMnXG59LCBEQl9GSUVMRFNfTUFQUElORyA9IHtcbiAgICAnb3ZlcmhlYWQuaGFzaHRhYmxlLm1haW4nOiAnb3ZlcmhlYWRIYXNodGFibGVNYWluJyxcbiAgICAnb3ZlcmhlYWQuaGFzaHRhYmxlLmV4cGlyZXMnOiAnb3ZlcmhlYWRIYXNodGFibGVFeHBpcmVzJ1xufTtcbmZ1bmN0aW9uIHRyYW5zZm9ybVJlcGx5KHJhd1JlcGx5KSB7XG4gICAgY29uc3QgcmVwbHkgPSB7XG4gICAgICAgIGRiOiB7fVxuICAgIH07XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCByYXdSZXBseS5sZW5ndGg7IGkgKz0gMikge1xuICAgICAgICBjb25zdCBrZXkgPSByYXdSZXBseVtpXTtcbiAgICAgICAgaWYgKGtleS5zdGFydHNXaXRoKCdkYi4nKSkge1xuICAgICAgICAgICAgY29uc3QgZGJUdXBsZXMgPSByYXdSZXBseVtpICsgMV0sIGRiID0ge307XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGRiVHVwbGVzLmxlbmd0aDsgaiArPSAyKSB7XG4gICAgICAgICAgICAgICAgZGJbREJfRklFTERTX01BUFBJTkdbZGJUdXBsZXNbal1dXSA9IGRiVHVwbGVzW2ogKyAxXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlcGx5LmRiW2tleS5zdWJzdHJpbmcoMyldID0gZGI7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICByZXBseVtGSUVMRFNfTUFQUElOR1trZXldXSA9IE51bWJlcihyYXdSZXBseVtpICsgMV0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVwbHk7XG59XG5leHBvcnRzLnRyYW5zZm9ybVJlcGx5ID0gdHJhbnNmb3JtUmVwbHk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLklTX1JFQURfT05MWSA9IGV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gdm9pZCAwO1xuZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSAxO1xuZXhwb3J0cy5JU19SRUFEX09OTFkgPSB0cnVlO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGtleSwgb3B0aW9ucykge1xuICAgIGNvbnN0IGFyZ3MgPSBbJ01FTU9SWScsICdVU0FHRScsIGtleV07XG4gICAgaWYgKG9wdGlvbnM/LlNBTVBMRVMpIHtcbiAgICAgICAgYXJncy5wdXNoKCdTQU1QTEVTJywgb3B0aW9ucy5TQU1QTEVTLnRvU3RyaW5nKCkpO1xuICAgIH1cbiAgICByZXR1cm4gYXJncztcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdm9pZCAwO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKCkge1xuICAgIHJldHVybiBbJ01PRFVMRScsICdMSVNUJ107XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHZvaWQgMDtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhwYXRoLCBtb2R1bGVBcmdzKSB7XG4gICAgY29uc3QgYXJncyA9IFsnTU9EVUxFJywgJ0xPQUQnLCBwYXRoXTtcbiAgICBpZiAobW9kdWxlQXJncykge1xuICAgICAgICBhcmdzLnB1c2goLi4ubW9kdWxlQXJncyk7XG4gICAgfVxuICAgIHJldHVybiBhcmdzO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB2b2lkIDA7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMobmFtZSkge1xuICAgIHJldHVybiBbJ01PRFVMRScsICdVTkxPQUQnLCBuYW1lXTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtUmVwbHkgPSBleHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IGV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gdm9pZCAwO1xuZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSAxO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGtleSwgZGIpIHtcbiAgICByZXR1cm4gWydNT1ZFJywga2V5LCBkYi50b1N0cmluZygpXTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xudmFyIGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEgPSByZXF1aXJlKFwiLi9nZW5lcmljLXRyYW5zZm9ybWVyc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInRyYW5zZm9ybVJlcGx5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBnZW5lcmljX3RyYW5zZm9ybWVyc18xLnRyYW5zZm9ybUJvb2xlYW5SZXBseTsgfSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHZvaWQgMDtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhtZXNzYWdlKSB7XG4gICAgY29uc3QgYXJncyA9IFsnUElORyddO1xuICAgIGlmIChtZXNzYWdlKSB7XG4gICAgICAgIGFyZ3MucHVzaChtZXNzYWdlKTtcbiAgICB9XG4gICAgcmV0dXJuIGFyZ3M7XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IGV4cG9ydHMuSVNfUkVBRF9PTkxZID0gdm9pZCAwO1xuZXhwb3J0cy5JU19SRUFEX09OTFkgPSB0cnVlO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKHBhdHRlcm4pIHtcbiAgICBjb25zdCBhcmdzID0gWydQVUJTVUInLCAnQ0hBTk5FTFMnXTtcbiAgICBpZiAocGF0dGVybikge1xuICAgICAgICBhcmdzLnB1c2gocGF0dGVybik7XG4gICAgfVxuICAgIHJldHVybiBhcmdzO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLklTX1JFQURfT05MWSA9IHZvaWQgMDtcbmV4cG9ydHMuSVNfUkVBRF9PTkxZID0gdHJ1ZTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cygpIHtcbiAgICByZXR1cm4gWydQVUJTVUInLCAnTlVNUEFUJ107XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybVJlcGx5ID0gZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLklTX1JFQURfT05MWSA9IHZvaWQgMDtcbmNvbnN0IGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEgPSByZXF1aXJlKFwiLi9nZW5lcmljLXRyYW5zZm9ybWVyc1wiKTtcbmV4cG9ydHMuSVNfUkVBRF9PTkxZID0gdHJ1ZTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhjaGFubmVscykge1xuICAgIGNvbnN0IGFyZ3MgPSBbJ1BVQlNVQicsICdOVU1TVUInXTtcbiAgICBpZiAoY2hhbm5lbHMpXG4gICAgICAgIHJldHVybiAoMCwgZ2VuZXJpY190cmFuc2Zvcm1lcnNfMS5wdXNoVmVyZGljdEFyZ3VtZW50cykoYXJncywgY2hhbm5lbHMpO1xuICAgIHJldHVybiBhcmdzO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG5mdW5jdGlvbiB0cmFuc2Zvcm1SZXBseShyYXdSZXBseSkge1xuICAgIGNvbnN0IHRyYW5zZm9ybWVkUmVwbHkgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmF3UmVwbHkubGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgICAgdHJhbnNmb3JtZWRSZXBseVtyYXdSZXBseVtpXV0gPSByYXdSZXBseVtpICsgMV07XG4gICAgfVxuICAgIHJldHVybiB0cmFuc2Zvcm1lZFJlcGx5O1xufVxuZXhwb3J0cy50cmFuc2Zvcm1SZXBseSA9IHRyYW5zZm9ybVJlcGx5O1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gZXhwb3J0cy5JU19SRUFEX09OTFkgPSB2b2lkIDA7XG5leHBvcnRzLklTX1JFQURfT05MWSA9IHRydWU7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMocGF0dGVybikge1xuICAgIGNvbnN0IGFyZ3MgPSBbJ1BVQlNVQicsICdTSEFSRENIQU5ORUxTJ107XG4gICAgaWYgKHBhdHRlcm4pXG4gICAgICAgIGFyZ3MucHVzaChwYXR0ZXJuKTtcbiAgICByZXR1cm4gYXJncztcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtUmVwbHkgPSBleHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IGV4cG9ydHMuSVNfUkVBRF9PTkxZID0gdm9pZCAwO1xuY29uc3QgZ2VuZXJpY190cmFuc2Zvcm1lcnNfMSA9IHJlcXVpcmUoXCIuL2dlbmVyaWMtdHJhbnNmb3JtZXJzXCIpO1xuZXhwb3J0cy5JU19SRUFEX09OTFkgPSB0cnVlO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGNoYW5uZWxzKSB7XG4gICAgY29uc3QgYXJncyA9IFsnUFVCU1VCJywgJ1NIQVJETlVNU1VCJ107XG4gICAgaWYgKGNoYW5uZWxzKVxuICAgICAgICByZXR1cm4gKDAsIGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEucHVzaFZlcmRpY3RBcmd1bWVudHMpKGFyZ3MsIGNoYW5uZWxzKTtcbiAgICByZXR1cm4gYXJncztcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuZnVuY3Rpb24gdHJhbnNmb3JtUmVwbHkocmF3UmVwbHkpIHtcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFJlcGx5ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJhd1JlcGx5Lmxlbmd0aDsgaSArPSAyKSB7XG4gICAgICAgIHRyYW5zZm9ybWVkUmVwbHlbcmF3UmVwbHlbaV1dID0gcmF3UmVwbHlbaSArIDFdO1xuICAgIH1cbiAgICByZXR1cm4gdHJhbnNmb3JtZWRSZXBseTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtUmVwbHkgPSB0cmFuc2Zvcm1SZXBseTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IGV4cG9ydHMuSVNfUkVBRF9PTkxZID0gdm9pZCAwO1xuZXhwb3J0cy5JU19SRUFEX09OTFkgPSB0cnVlO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKCkge1xuICAgIHJldHVybiBbJ1JBTkRPTUtFWSddO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB2b2lkIDA7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMoKSB7XG4gICAgcmV0dXJuIFsnUkVBRE9OTFknXTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdm9pZCAwO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKCkge1xuICAgIHJldHVybiBbJ1JFQURXUklURSddO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB2b2lkIDA7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMoaG9zdCwgcG9ydCkge1xuICAgIHJldHVybiBbJ1JFUExJQ0FPRicsIGhvc3QsIHBvcnQudG9TdHJpbmcoKV07XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHZvaWQgMDtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cygpIHtcbiAgICByZXR1cm4gWydSRVNUT1JFLUFTS0lORyddO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1SZXBseSA9IGV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gZXhwb3J0cy5JU19SRUFEX09OTFkgPSB2b2lkIDA7XG5leHBvcnRzLklTX1JFQURfT05MWSA9IHRydWU7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMoKSB7XG4gICAgcmV0dXJuIFsnUk9MRSddO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG5mdW5jdGlvbiB0cmFuc2Zvcm1SZXBseShyZXBseSkge1xuICAgIHN3aXRjaCAocmVwbHlbMF0pIHtcbiAgICAgICAgY2FzZSAnbWFzdGVyJzpcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcm9sZTogJ21hc3RlcicsXG4gICAgICAgICAgICAgICAgcmVwbGljYXRpb25PZmZlc3Q6IHJlcGx5WzFdLFxuICAgICAgICAgICAgICAgIHJlcGxpY2FzOiByZXBseVsyXS5tYXAoKFtpcCwgcG9ydCwgcmVwbGljYXRpb25PZmZlc3RdKSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICBpcCxcbiAgICAgICAgICAgICAgICAgICAgcG9ydDogTnVtYmVyKHBvcnQpLFxuICAgICAgICAgICAgICAgICAgICByZXBsaWNhdGlvbk9mZmVzdDogTnVtYmVyKHJlcGxpY2F0aW9uT2ZmZXN0KVxuICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgY2FzZSAnc2xhdmUnOlxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICByb2xlOiAnc2xhdmUnLFxuICAgICAgICAgICAgICAgIG1hc3Rlcjoge1xuICAgICAgICAgICAgICAgICAgICBpcDogcmVwbHlbMV0sXG4gICAgICAgICAgICAgICAgICAgIHBvcnQ6IHJlcGx5WzJdXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzdGF0ZTogcmVwbHlbM10sXG4gICAgICAgICAgICAgICAgZGF0YVJlY2VpdmVkOiByZXBseVs0XVxuICAgICAgICAgICAgfTtcbiAgICAgICAgY2FzZSAnc2VudGluZWwnOlxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICByb2xlOiAnc2VudGluZWwnLFxuICAgICAgICAgICAgICAgIG1hc3Rlck5hbWVzOiByZXBseVsxXVxuICAgICAgICAgICAgfTtcbiAgICB9XG59XG5leHBvcnRzLnRyYW5zZm9ybVJlcGx5ID0gdHJhbnNmb3JtUmVwbHk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB2b2lkIDA7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMoKSB7XG4gICAgcmV0dXJuIFsnU0FWRSddO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1SZXBseSA9IGV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gZXhwb3J0cy5JU19SRUFEX09OTFkgPSB2b2lkIDA7XG5jb25zdCBnZW5lcmljX3RyYW5zZm9ybWVyc18xID0gcmVxdWlyZShcIi4vZ2VuZXJpYy10cmFuc2Zvcm1lcnNcIik7XG5leHBvcnRzLklTX1JFQURfT05MWSA9IHRydWU7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMoY3Vyc29yLCBvcHRpb25zKSB7XG4gICAgY29uc3QgYXJncyA9ICgwLCBnZW5lcmljX3RyYW5zZm9ybWVyc18xLnB1c2hTY2FuQXJndW1lbnRzKShbJ1NDQU4nXSwgY3Vyc29yLCBvcHRpb25zKTtcbiAgICBpZiAob3B0aW9ucz8uVFlQRSkge1xuICAgICAgICBhcmdzLnB1c2goJ1RZUEUnLCBvcHRpb25zLlRZUEUpO1xuICAgIH1cbiAgICByZXR1cm4gYXJncztcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuZnVuY3Rpb24gdHJhbnNmb3JtUmVwbHkoW2N1cnNvciwga2V5c10pIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBjdXJzb3I6IE51bWJlcihjdXJzb3IpLFxuICAgICAgICBrZXlzXG4gICAgfTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtUmVwbHkgPSB0cmFuc2Zvcm1SZXBseTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHZvaWQgMDtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhtb2RlKSB7XG4gICAgcmV0dXJuIFsnU0NSSVBUJywgJ0RFQlVHJywgbW9kZV07XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybVJlcGx5ID0gZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB2b2lkIDA7XG5jb25zdCBnZW5lcmljX3RyYW5zZm9ybWVyc18xID0gcmVxdWlyZShcIi4vZ2VuZXJpYy10cmFuc2Zvcm1lcnNcIik7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMoc2hhMSkge1xuICAgIHJldHVybiAoMCwgZ2VuZXJpY190cmFuc2Zvcm1lcnNfMS5wdXNoVmVyZGljdEFyZ3VtZW50cykoWydTQ1JJUFQnLCAnRVhJU1RTJ10sIHNoYTEpO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG52YXIgZ2VuZXJpY190cmFuc2Zvcm1lcnNfMiA9IHJlcXVpcmUoXCIuL2dlbmVyaWMtdHJhbnNmb3JtZXJzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidHJhbnNmb3JtUmVwbHlcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGdlbmVyaWNfdHJhbnNmb3JtZXJzXzIudHJhbnNmb3JtQm9vbGVhbkFycmF5UmVwbHk7IH0gfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB2b2lkIDA7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMobW9kZSkge1xuICAgIGNvbnN0IGFyZ3MgPSBbJ1NDUklQVCcsICdGTFVTSCddO1xuICAgIGlmIChtb2RlKSB7XG4gICAgICAgIGFyZ3MucHVzaChtb2RlKTtcbiAgICB9XG4gICAgcmV0dXJuIGFyZ3M7XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHZvaWQgMDtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cygpIHtcbiAgICByZXR1cm4gWydTQ1JJUFQnLCAnS0lMTCddO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB2b2lkIDA7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMoc2NyaXB0KSB7XG4gICAgcmV0dXJuIFsnU0NSSVBUJywgJ0xPQUQnLCBzY3JpcHRdO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB2b2lkIDA7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMobW9kZSkge1xuICAgIGNvbnN0IGFyZ3MgPSBbJ1NIVVRET1dOJ107XG4gICAgaWYgKG1vZGUpIHtcbiAgICAgICAgYXJncy5wdXNoKG1vZGUpO1xuICAgIH1cbiAgICByZXR1cm4gYXJncztcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdm9pZCAwO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGluZGV4MSwgaW5kZXgyKSB7XG4gICAgcmV0dXJuIFsnU1dBUERCJywgaW5kZXgxLnRvU3RyaW5nKCksIGluZGV4Mi50b1N0cmluZygpXTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtUmVwbHkgPSBleHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHZvaWQgMDtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cygpIHtcbiAgICByZXR1cm4gWydUSU1FJ107XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbmZ1bmN0aW9uIHRyYW5zZm9ybVJlcGx5KHJlcGx5KSB7XG4gICAgY29uc3Qgc2Vjb25kcyA9IE51bWJlcihyZXBseVswXSksIG1pY3Jvc2Vjb25kcyA9IE51bWJlcihyZXBseVsxXSksIGQgPSBuZXcgRGF0ZShzZWNvbmRzICogMTAwMCArIG1pY3Jvc2Vjb25kcyAvIDEwMDApO1xuICAgIGQubWljcm9zZWNvbmRzID0gbWljcm9zZWNvbmRzO1xuICAgIHJldHVybiBkO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1SZXBseSA9IHRyYW5zZm9ybVJlcGx5O1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdm9pZCAwO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKCkge1xuICAgIHJldHVybiBbJ1VOV0FUQ0gnXTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSB2b2lkIDA7XG5leHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IDE7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMobnVtYmVyT2ZSZXBsaWNhcywgdGltZW91dCkge1xuICAgIHJldHVybiBbJ1dBSVQnLCBudW1iZXJPZlJlcGxpY2FzLnRvU3RyaW5nKCksIHRpbWVvdXQudG9TdHJpbmcoKV07XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBjb21tYW5kc18xID0gcmVxdWlyZShcIi4uL2NsdXN0ZXIvY29tbWFuZHNcIik7XG5jb25zdCBBQ0xfQ0FUID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL0FDTF9DQVRcIik7XG5jb25zdCBBQ0xfREVMVVNFUiA9IHJlcXVpcmUoXCIuLi9jb21tYW5kcy9BQ0xfREVMVVNFUlwiKTtcbmNvbnN0IEFDTF9EUllSVU4gPSByZXF1aXJlKFwiLi4vY29tbWFuZHMvQUNMX0RSWVJVTlwiKTtcbmNvbnN0IEFDTF9HRU5QQVNTID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL0FDTF9HRU5QQVNTXCIpO1xuY29uc3QgQUNMX0dFVFVTRVIgPSByZXF1aXJlKFwiLi4vY29tbWFuZHMvQUNMX0dFVFVTRVJcIik7XG5jb25zdCBBQ0xfTElTVCA9IHJlcXVpcmUoXCIuLi9jb21tYW5kcy9BQ0xfTElTVFwiKTtcbmNvbnN0IEFDTF9MT0FEID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL0FDTF9MT0FEXCIpO1xuY29uc3QgQUNMX0xPR19SRVNFVCA9IHJlcXVpcmUoXCIuLi9jb21tYW5kcy9BQ0xfTE9HX1JFU0VUXCIpO1xuY29uc3QgQUNMX0xPRyA9IHJlcXVpcmUoXCIuLi9jb21tYW5kcy9BQ0xfTE9HXCIpO1xuY29uc3QgQUNMX1NBVkUgPSByZXF1aXJlKFwiLi4vY29tbWFuZHMvQUNMX1NBVkVcIik7XG5jb25zdCBBQ0xfU0VUVVNFUiA9IHJlcXVpcmUoXCIuLi9jb21tYW5kcy9BQ0xfU0VUVVNFUlwiKTtcbmNvbnN0IEFDTF9VU0VSUyA9IHJlcXVpcmUoXCIuLi9jb21tYW5kcy9BQ0xfVVNFUlNcIik7XG5jb25zdCBBQ0xfV0hPQU1JID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL0FDTF9XSE9BTUlcIik7XG5jb25zdCBBU0tJTkcgPSByZXF1aXJlKFwiLi4vY29tbWFuZHMvQVNLSU5HXCIpO1xuY29uc3QgQVVUSCA9IHJlcXVpcmUoXCIuLi9jb21tYW5kcy9BVVRIXCIpO1xuY29uc3QgQkdSRVdSSVRFQU9GID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL0JHUkVXUklURUFPRlwiKTtcbmNvbnN0IEJHU0FWRSA9IHJlcXVpcmUoXCIuLi9jb21tYW5kcy9CR1NBVkVcIik7XG5jb25zdCBDTElFTlRfQ0FDSElORyA9IHJlcXVpcmUoXCIuLi9jb21tYW5kcy9DTElFTlRfQ0FDSElOR1wiKTtcbmNvbnN0IENMSUVOVF9HRVROQU1FID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL0NMSUVOVF9HRVROQU1FXCIpO1xuY29uc3QgQ0xJRU5UX0dFVFJFRElSID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL0NMSUVOVF9HRVRSRURJUlwiKTtcbmNvbnN0IENMSUVOVF9JRCA9IHJlcXVpcmUoXCIuLi9jb21tYW5kcy9DTElFTlRfSURcIik7XG5jb25zdCBDTElFTlRfS0lMTCA9IHJlcXVpcmUoXCIuLi9jb21tYW5kcy9DTElFTlRfS0lMTFwiKTtcbmNvbnN0IENMSUVOVF9MSVNUID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL0NMSUVOVF9MSVNUXCIpO1xuY29uc3QgQ0xJRU5UX05PX0VWSUNUID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL0NMSUVOVF9OTy1FVklDVFwiKTtcbmNvbnN0IENMSUVOVF9OT19UT1VDSCA9IHJlcXVpcmUoXCIuLi9jb21tYW5kcy9DTElFTlRfTk8tVE9VQ0hcIik7XG5jb25zdCBDTElFTlRfUEFVU0UgPSByZXF1aXJlKFwiLi4vY29tbWFuZHMvQ0xJRU5UX1BBVVNFXCIpO1xuY29uc3QgQ0xJRU5UX1NFVE5BTUUgPSByZXF1aXJlKFwiLi4vY29tbWFuZHMvQ0xJRU5UX1NFVE5BTUVcIik7XG5jb25zdCBDTElFTlRfVFJBQ0tJTkcgPSByZXF1aXJlKFwiLi4vY29tbWFuZHMvQ0xJRU5UX1RSQUNLSU5HXCIpO1xuY29uc3QgQ0xJRU5UX1RSQUNLSU5HSU5GTyA9IHJlcXVpcmUoXCIuLi9jb21tYW5kcy9DTElFTlRfVFJBQ0tJTkdJTkZPXCIpO1xuY29uc3QgQ0xJRU5UX1VOUEFVU0UgPSByZXF1aXJlKFwiLi4vY29tbWFuZHMvQ0xJRU5UX1VOUEFVU0VcIik7XG5jb25zdCBDTElFTlRfSU5GTyA9IHJlcXVpcmUoXCIuLi9jb21tYW5kcy9DTElFTlRfSU5GT1wiKTtcbmNvbnN0IENMVVNURVJfQUREU0xPVFMgPSByZXF1aXJlKFwiLi4vY29tbWFuZHMvQ0xVU1RFUl9BRERTTE9UU1wiKTtcbmNvbnN0IENMVVNURVJfQUREU0xPVFNSQU5HRSA9IHJlcXVpcmUoXCIuLi9jb21tYW5kcy9DTFVTVEVSX0FERFNMT1RTUkFOR0VcIik7XG5jb25zdCBDTFVTVEVSX0JVTVBFUE9DSCA9IHJlcXVpcmUoXCIuLi9jb21tYW5kcy9DTFVTVEVSX0JVTVBFUE9DSFwiKTtcbmNvbnN0IENMVVNURVJfQ09VTlRfRkFJTFVSRV9SRVBPUlRTID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL0NMVVNURVJfQ09VTlQtRkFJTFVSRS1SRVBPUlRTXCIpO1xuY29uc3QgQ0xVU1RFUl9DT1VOVEtFWVNJTlNMT1QgPSByZXF1aXJlKFwiLi4vY29tbWFuZHMvQ0xVU1RFUl9DT1VOVEtFWVNJTlNMT1RcIik7XG5jb25zdCBDTFVTVEVSX0RFTFNMT1RTID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL0NMVVNURVJfREVMU0xPVFNcIik7XG5jb25zdCBDTFVTVEVSX0RFTFNMT1RTUkFOR0UgPSByZXF1aXJlKFwiLi4vY29tbWFuZHMvQ0xVU1RFUl9ERUxTTE9UU1JBTkdFXCIpO1xuY29uc3QgQ0xVU1RFUl9GQUlMT1ZFUiA9IHJlcXVpcmUoXCIuLi9jb21tYW5kcy9DTFVTVEVSX0ZBSUxPVkVSXCIpO1xuY29uc3QgQ0xVU1RFUl9GTFVTSFNMT1RTID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL0NMVVNURVJfRkxVU0hTTE9UU1wiKTtcbmNvbnN0IENMVVNURVJfRk9SR0VUID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL0NMVVNURVJfRk9SR0VUXCIpO1xuY29uc3QgQ0xVU1RFUl9HRVRLRVlTSU5TTE9UID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL0NMVVNURVJfR0VUS0VZU0lOU0xPVFwiKTtcbmNvbnN0IENMVVNURVJfSU5GTyA9IHJlcXVpcmUoXCIuLi9jb21tYW5kcy9DTFVTVEVSX0lORk9cIik7XG5jb25zdCBDTFVTVEVSX0tFWVNMT1QgPSByZXF1aXJlKFwiLi4vY29tbWFuZHMvQ0xVU1RFUl9LRVlTTE9UXCIpO1xuY29uc3QgQ0xVU1RFUl9MSU5LUyA9IHJlcXVpcmUoXCIuLi9jb21tYW5kcy9DTFVTVEVSX0xJTktTXCIpO1xuY29uc3QgQ0xVU1RFUl9NRUVUID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL0NMVVNURVJfTUVFVFwiKTtcbmNvbnN0IENMVVNURVJfTVlJRCA9IHJlcXVpcmUoXCIuLi9jb21tYW5kcy9DTFVTVEVSX01ZSURcIik7XG5jb25zdCBDTFVTVEVSX01ZU0hBUkRJRCA9IHJlcXVpcmUoXCIuLi9jb21tYW5kcy9DTFVTVEVSX01ZU0hBUkRJRFwiKTtcbmNvbnN0IENMVVNURVJfTk9ERVMgPSByZXF1aXJlKFwiLi4vY29tbWFuZHMvQ0xVU1RFUl9OT0RFU1wiKTtcbmNvbnN0IENMVVNURVJfUkVQTElDQVMgPSByZXF1aXJlKFwiLi4vY29tbWFuZHMvQ0xVU1RFUl9SRVBMSUNBU1wiKTtcbmNvbnN0IENMVVNURVJfUkVQTElDQVRFID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL0NMVVNURVJfUkVQTElDQVRFXCIpO1xuY29uc3QgQ0xVU1RFUl9SRVNFVCA9IHJlcXVpcmUoXCIuLi9jb21tYW5kcy9DTFVTVEVSX1JFU0VUXCIpO1xuY29uc3QgQ0xVU1RFUl9TQVZFQ09ORklHID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL0NMVVNURVJfU0FWRUNPTkZJR1wiKTtcbmNvbnN0IENMVVNURVJfU0VUX0NPTkZJR19FUE9DSCA9IHJlcXVpcmUoXCIuLi9jb21tYW5kcy9DTFVTVEVSX1NFVC1DT05GSUctRVBPQ0hcIik7XG5jb25zdCBDTFVTVEVSX1NFVFNMT1QgPSByZXF1aXJlKFwiLi4vY29tbWFuZHMvQ0xVU1RFUl9TRVRTTE9UXCIpO1xuY29uc3QgQ0xVU1RFUl9TTE9UUyA9IHJlcXVpcmUoXCIuLi9jb21tYW5kcy9DTFVTVEVSX1NMT1RTXCIpO1xuY29uc3QgQ09NTUFORF9DT1VOVCA9IHJlcXVpcmUoXCIuLi9jb21tYW5kcy9DT01NQU5EX0NPVU5UXCIpO1xuY29uc3QgQ09NTUFORF9HRVRLRVlTID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL0NPTU1BTkRfR0VUS0VZU1wiKTtcbmNvbnN0IENPTU1BTkRfR0VUS0VZU0FOREZMQUdTID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL0NPTU1BTkRfR0VUS0VZU0FOREZMQUdTXCIpO1xuY29uc3QgQ09NTUFORF9JTkZPID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL0NPTU1BTkRfSU5GT1wiKTtcbmNvbnN0IENPTU1BTkRfTElTVCA9IHJlcXVpcmUoXCIuLi9jb21tYW5kcy9DT01NQU5EX0xJU1RcIik7XG5jb25zdCBDT01NQU5EID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL0NPTU1BTkRcIik7XG5jb25zdCBDT05GSUdfR0VUID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL0NPTkZJR19HRVRcIik7XG5jb25zdCBDT05GSUdfUkVTRVRBU1RBVCA9IHJlcXVpcmUoXCIuLi9jb21tYW5kcy9DT05GSUdfUkVTRVRTVEFUXCIpO1xuY29uc3QgQ09ORklHX1JFV1JJVEUgPSByZXF1aXJlKFwiLi4vY29tbWFuZHMvQ09ORklHX1JFV1JJVEVcIik7XG5jb25zdCBDT05GSUdfU0VUID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL0NPTkZJR19TRVRcIik7XG5jb25zdCBEQlNJWkUgPSByZXF1aXJlKFwiLi4vY29tbWFuZHMvREJTSVpFXCIpO1xuY29uc3QgRElTQ0FSRCA9IHJlcXVpcmUoXCIuLi9jb21tYW5kcy9ESVNDQVJEXCIpO1xuY29uc3QgRUNITyA9IHJlcXVpcmUoXCIuLi9jb21tYW5kcy9FQ0hPXCIpO1xuY29uc3QgRkFJTE9WRVIgPSByZXF1aXJlKFwiLi4vY29tbWFuZHMvRkFJTE9WRVJcIik7XG5jb25zdCBGTFVTSEFMTCA9IHJlcXVpcmUoXCIuLi9jb21tYW5kcy9GTFVTSEFMTFwiKTtcbmNvbnN0IEZMVVNIREIgPSByZXF1aXJlKFwiLi4vY29tbWFuZHMvRkxVU0hEQlwiKTtcbmNvbnN0IEZVTkNUSU9OX0RFTEVURSA9IHJlcXVpcmUoXCIuLi9jb21tYW5kcy9GVU5DVElPTl9ERUxFVEVcIik7XG5jb25zdCBGVU5DVElPTl9EVU1QID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL0ZVTkNUSU9OX0RVTVBcIik7XG5jb25zdCBGVU5DVElPTl9GTFVTSCA9IHJlcXVpcmUoXCIuLi9jb21tYW5kcy9GVU5DVElPTl9GTFVTSFwiKTtcbmNvbnN0IEZVTkNUSU9OX0tJTEwgPSByZXF1aXJlKFwiLi4vY29tbWFuZHMvRlVOQ1RJT05fS0lMTFwiKTtcbmNvbnN0IEZVTkNUSU9OX0xJU1RfV0lUSENPREUgPSByZXF1aXJlKFwiLi4vY29tbWFuZHMvRlVOQ1RJT05fTElTVF9XSVRIQ09ERVwiKTtcbmNvbnN0IEZVTkNUSU9OX0xJU1QgPSByZXF1aXJlKFwiLi4vY29tbWFuZHMvRlVOQ1RJT05fTElTVFwiKTtcbmNvbnN0IEZVTkNUSU9OX0xPQUQgPSByZXF1aXJlKFwiLi4vY29tbWFuZHMvRlVOQ1RJT05fTE9BRFwiKTtcbmNvbnN0IEZVTkNUSU9OX1JFU1RPUkUgPSByZXF1aXJlKFwiLi4vY29tbWFuZHMvRlVOQ1RJT05fUkVTVE9SRVwiKTtcbmNvbnN0IEZVTkNUSU9OX1NUQVRTID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL0ZVTkNUSU9OX1NUQVRTXCIpO1xuY29uc3QgSEVMTE8gPSByZXF1aXJlKFwiLi4vY29tbWFuZHMvSEVMTE9cIik7XG5jb25zdCBJTkZPID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL0lORk9cIik7XG5jb25zdCBLRVlTID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL0tFWVNcIik7XG5jb25zdCBMQVNUU0FWRSA9IHJlcXVpcmUoXCIuLi9jb21tYW5kcy9MQVNUU0FWRVwiKTtcbmNvbnN0IExBVEVOQ1lfRE9DVE9SID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL0xBVEVOQ1lfRE9DVE9SXCIpO1xuY29uc3QgTEFURU5DWV9HUkFQSCA9IHJlcXVpcmUoXCIuLi9jb21tYW5kcy9MQVRFTkNZX0dSQVBIXCIpO1xuY29uc3QgTEFURU5DWV9ISVNUT1JZID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL0xBVEVOQ1lfSElTVE9SWVwiKTtcbmNvbnN0IExBVEVOQ1lfTEFURVNUID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL0xBVEVOQ1lfTEFURVNUXCIpO1xuY29uc3QgTE9MV1VUID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL0xPTFdVVFwiKTtcbmNvbnN0IE1FTU9SWV9ET0NUT1IgPSByZXF1aXJlKFwiLi4vY29tbWFuZHMvTUVNT1JZX0RPQ1RPUlwiKTtcbmNvbnN0IE1FTU9SWV9NQUxMT0NfU1RBVFMgPSByZXF1aXJlKFwiLi4vY29tbWFuZHMvTUVNT1JZX01BTExPQy1TVEFUU1wiKTtcbmNvbnN0IE1FTU9SWV9QVVJHRSA9IHJlcXVpcmUoXCIuLi9jb21tYW5kcy9NRU1PUllfUFVSR0VcIik7XG5jb25zdCBNRU1PUllfU1RBVFMgPSByZXF1aXJlKFwiLi4vY29tbWFuZHMvTUVNT1JZX1NUQVRTXCIpO1xuY29uc3QgTUVNT1JZX1VTQUdFID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL01FTU9SWV9VU0FHRVwiKTtcbmNvbnN0IE1PRFVMRV9MSVNUID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL01PRFVMRV9MSVNUXCIpO1xuY29uc3QgTU9EVUxFX0xPQUQgPSByZXF1aXJlKFwiLi4vY29tbWFuZHMvTU9EVUxFX0xPQURcIik7XG5jb25zdCBNT0RVTEVfVU5MT0FEID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL01PRFVMRV9VTkxPQURcIik7XG5jb25zdCBNT1ZFID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL01PVkVcIik7XG5jb25zdCBQSU5HID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL1BJTkdcIik7XG5jb25zdCBQVUJTVUJfQ0hBTk5FTFMgPSByZXF1aXJlKFwiLi4vY29tbWFuZHMvUFVCU1VCX0NIQU5ORUxTXCIpO1xuY29uc3QgUFVCU1VCX05VTVBBVCA9IHJlcXVpcmUoXCIuLi9jb21tYW5kcy9QVUJTVUJfTlVNUEFUXCIpO1xuY29uc3QgUFVCU1VCX05VTVNVQiA9IHJlcXVpcmUoXCIuLi9jb21tYW5kcy9QVUJTVUJfTlVNU1VCXCIpO1xuY29uc3QgUFVCU1VCX1NIQVJEQ0hBTk5FTFMgPSByZXF1aXJlKFwiLi4vY29tbWFuZHMvUFVCU1VCX1NIQVJEQ0hBTk5FTFNcIik7XG5jb25zdCBQVUJTVUJfU0hBUkROVU1TVUIgPSByZXF1aXJlKFwiLi4vY29tbWFuZHMvUFVCU1VCX1NIQVJETlVNU1VCXCIpO1xuY29uc3QgUkFORE9NS0VZID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL1JBTkRPTUtFWVwiKTtcbmNvbnN0IFJFQURPTkxZID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL1JFQURPTkxZXCIpO1xuY29uc3QgUkVBRFdSSVRFID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL1JFQURXUklURVwiKTtcbmNvbnN0IFJFUExJQ0FPRiA9IHJlcXVpcmUoXCIuLi9jb21tYW5kcy9SRVBMSUNBT0ZcIik7XG5jb25zdCBSRVNUT1JFX0FTS0lORyA9IHJlcXVpcmUoXCIuLi9jb21tYW5kcy9SRVNUT1JFLUFTS0lOR1wiKTtcbmNvbnN0IFJPTEUgPSByZXF1aXJlKFwiLi4vY29tbWFuZHMvUk9MRVwiKTtcbmNvbnN0IFNBVkUgPSByZXF1aXJlKFwiLi4vY29tbWFuZHMvU0FWRVwiKTtcbmNvbnN0IFNDQU4gPSByZXF1aXJlKFwiLi4vY29tbWFuZHMvU0NBTlwiKTtcbmNvbnN0IFNDUklQVF9ERUJVRyA9IHJlcXVpcmUoXCIuLi9jb21tYW5kcy9TQ1JJUFRfREVCVUdcIik7XG5jb25zdCBTQ1JJUFRfRVhJU1RTID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL1NDUklQVF9FWElTVFNcIik7XG5jb25zdCBTQ1JJUFRfRkxVU0ggPSByZXF1aXJlKFwiLi4vY29tbWFuZHMvU0NSSVBUX0ZMVVNIXCIpO1xuY29uc3QgU0NSSVBUX0tJTEwgPSByZXF1aXJlKFwiLi4vY29tbWFuZHMvU0NSSVBUX0tJTExcIik7XG5jb25zdCBTQ1JJUFRfTE9BRCA9IHJlcXVpcmUoXCIuLi9jb21tYW5kcy9TQ1JJUFRfTE9BRFwiKTtcbmNvbnN0IFNIVVRET1dOID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL1NIVVRET1dOXCIpO1xuY29uc3QgU1dBUERCID0gcmVxdWlyZShcIi4uL2NvbW1hbmRzL1NXQVBEQlwiKTtcbmNvbnN0IFRJTUUgPSByZXF1aXJlKFwiLi4vY29tbWFuZHMvVElNRVwiKTtcbmNvbnN0IFVOV0FUQ0ggPSByZXF1aXJlKFwiLi4vY29tbWFuZHMvVU5XQVRDSFwiKTtcbmNvbnN0IFdBSVQgPSByZXF1aXJlKFwiLi4vY29tbWFuZHMvV0FJVFwiKTtcbmV4cG9ydHMuZGVmYXVsdCA9IHtcbiAgICAuLi5jb21tYW5kc18xLmRlZmF1bHQsXG4gICAgQUNMX0NBVCxcbiAgICBhY2xDYXQ6IEFDTF9DQVQsXG4gICAgQUNMX0RFTFVTRVIsXG4gICAgYWNsRGVsVXNlcjogQUNMX0RFTFVTRVIsXG4gICAgQUNMX0RSWVJVTixcbiAgICBhY2xEcnlSdW46IEFDTF9EUllSVU4sXG4gICAgQUNMX0dFTlBBU1MsXG4gICAgYWNsR2VuUGFzczogQUNMX0dFTlBBU1MsXG4gICAgQUNMX0dFVFVTRVIsXG4gICAgYWNsR2V0VXNlcjogQUNMX0dFVFVTRVIsXG4gICAgQUNMX0xJU1QsXG4gICAgYWNsTGlzdDogQUNMX0xJU1QsXG4gICAgQUNMX0xPQUQsXG4gICAgYWNsTG9hZDogQUNMX0xPQUQsXG4gICAgQUNMX0xPR19SRVNFVCxcbiAgICBhY2xMb2dSZXNldDogQUNMX0xPR19SRVNFVCxcbiAgICBBQ0xfTE9HLFxuICAgIGFjbExvZzogQUNMX0xPRyxcbiAgICBBQ0xfU0FWRSxcbiAgICBhY2xTYXZlOiBBQ0xfU0FWRSxcbiAgICBBQ0xfU0VUVVNFUixcbiAgICBhY2xTZXRVc2VyOiBBQ0xfU0VUVVNFUixcbiAgICBBQ0xfVVNFUlMsXG4gICAgYWNsVXNlcnM6IEFDTF9VU0VSUyxcbiAgICBBQ0xfV0hPQU1JLFxuICAgIGFjbFdob0FtSTogQUNMX1dIT0FNSSxcbiAgICBBU0tJTkcsXG4gICAgYXNraW5nOiBBU0tJTkcsXG4gICAgQVVUSCxcbiAgICBhdXRoOiBBVVRILFxuICAgIEJHUkVXUklURUFPRixcbiAgICBiZ1Jld3JpdGVBb2Y6IEJHUkVXUklURUFPRixcbiAgICBCR1NBVkUsXG4gICAgYmdTYXZlOiBCR1NBVkUsXG4gICAgQ0xJRU5UX0NBQ0hJTkcsXG4gICAgY2xpZW50Q2FjaGluZzogQ0xJRU5UX0NBQ0hJTkcsXG4gICAgQ0xJRU5UX0dFVE5BTUUsXG4gICAgY2xpZW50R2V0TmFtZTogQ0xJRU5UX0dFVE5BTUUsXG4gICAgQ0xJRU5UX0dFVFJFRElSLFxuICAgIGNsaWVudEdldFJlZGlyOiBDTElFTlRfR0VUUkVESVIsXG4gICAgQ0xJRU5UX0lELFxuICAgIGNsaWVudElkOiBDTElFTlRfSUQsXG4gICAgQ0xJRU5UX0tJTEwsXG4gICAgY2xpZW50S2lsbDogQ0xJRU5UX0tJTEwsXG4gICAgJ0NMSUVOVF9OTy1FVklDVCc6IENMSUVOVF9OT19FVklDVCxcbiAgICBjbGllbnROb0V2aWN0OiBDTElFTlRfTk9fRVZJQ1QsXG4gICAgJ0NMSUVOVF9OTy1UT1VDSCc6IENMSUVOVF9OT19UT1VDSCxcbiAgICBjbGllbnROb1RvdWNoOiBDTElFTlRfTk9fVE9VQ0gsXG4gICAgQ0xJRU5UX0xJU1QsXG4gICAgY2xpZW50TGlzdDogQ0xJRU5UX0xJU1QsXG4gICAgQ0xJRU5UX1BBVVNFLFxuICAgIGNsaWVudFBhdXNlOiBDTElFTlRfUEFVU0UsXG4gICAgQ0xJRU5UX1NFVE5BTUUsXG4gICAgY2xpZW50U2V0TmFtZTogQ0xJRU5UX1NFVE5BTUUsXG4gICAgQ0xJRU5UX1RSQUNLSU5HLFxuICAgIGNsaWVudFRyYWNraW5nOiBDTElFTlRfVFJBQ0tJTkcsXG4gICAgQ0xJRU5UX1RSQUNLSU5HSU5GTyxcbiAgICBjbGllbnRUcmFja2luZ0luZm86IENMSUVOVF9UUkFDS0lOR0lORk8sXG4gICAgQ0xJRU5UX1VOUEFVU0UsXG4gICAgY2xpZW50VW5wYXVzZTogQ0xJRU5UX1VOUEFVU0UsXG4gICAgQ0xJRU5UX0lORk8sXG4gICAgY2xpZW50SW5mbzogQ0xJRU5UX0lORk8sXG4gICAgQ0xVU1RFUl9BRERTTE9UUyxcbiAgICBjbHVzdGVyQWRkU2xvdHM6IENMVVNURVJfQUREU0xPVFMsXG4gICAgQ0xVU1RFUl9BRERTTE9UU1JBTkdFLFxuICAgIGNsdXN0ZXJBZGRTbG90c1JhbmdlOiBDTFVTVEVSX0FERFNMT1RTUkFOR0UsXG4gICAgQ0xVU1RFUl9CVU1QRVBPQ0gsXG4gICAgY2x1c3RlckJ1bXBFcG9jaDogQ0xVU1RFUl9CVU1QRVBPQ0gsXG4gICAgQ0xVU1RFUl9DT1VOVF9GQUlMVVJFX1JFUE9SVFMsXG4gICAgY2x1c3RlckNvdW50RmFpbHVyZVJlcG9ydHM6IENMVVNURVJfQ09VTlRfRkFJTFVSRV9SRVBPUlRTLFxuICAgIENMVVNURVJfQ09VTlRLRVlTSU5TTE9ULFxuICAgIGNsdXN0ZXJDb3VudEtleXNJblNsb3Q6IENMVVNURVJfQ09VTlRLRVlTSU5TTE9ULFxuICAgIENMVVNURVJfREVMU0xPVFMsXG4gICAgY2x1c3RlckRlbFNsb3RzOiBDTFVTVEVSX0RFTFNMT1RTLFxuICAgIENMVVNURVJfREVMU0xPVFNSQU5HRSxcbiAgICBjbHVzdGVyRGVsU2xvdHNSYW5nZTogQ0xVU1RFUl9ERUxTTE9UU1JBTkdFLFxuICAgIENMVVNURVJfRkFJTE9WRVIsXG4gICAgY2x1c3RlckZhaWxvdmVyOiBDTFVTVEVSX0ZBSUxPVkVSLFxuICAgIENMVVNURVJfRkxVU0hTTE9UUyxcbiAgICBjbHVzdGVyRmx1c2hTbG90czogQ0xVU1RFUl9GTFVTSFNMT1RTLFxuICAgIENMVVNURVJfRk9SR0VULFxuICAgIGNsdXN0ZXJGb3JnZXQ6IENMVVNURVJfRk9SR0VULFxuICAgIENMVVNURVJfR0VUS0VZU0lOU0xPVCxcbiAgICBjbHVzdGVyR2V0S2V5c0luU2xvdDogQ0xVU1RFUl9HRVRLRVlTSU5TTE9ULFxuICAgIENMVVNURVJfSU5GTyxcbiAgICBjbHVzdGVySW5mbzogQ0xVU1RFUl9JTkZPLFxuICAgIENMVVNURVJfS0VZU0xPVCxcbiAgICBjbHVzdGVyS2V5U2xvdDogQ0xVU1RFUl9LRVlTTE9ULFxuICAgIENMVVNURVJfTElOS1MsXG4gICAgY2x1c3RlckxpbmtzOiBDTFVTVEVSX0xJTktTLFxuICAgIENMVVNURVJfTUVFVCxcbiAgICBjbHVzdGVyTWVldDogQ0xVU1RFUl9NRUVULFxuICAgIENMVVNURVJfTVlJRCxcbiAgICBjbHVzdGVyTXlJZDogQ0xVU1RFUl9NWUlELFxuICAgIENMVVNURVJfTVlTSEFSRElELFxuICAgIGNsdXN0ZXJNeVNoYXJkSWQ6IENMVVNURVJfTVlTSEFSRElELFxuICAgIENMVVNURVJfTk9ERVMsXG4gICAgY2x1c3Rlck5vZGVzOiBDTFVTVEVSX05PREVTLFxuICAgIENMVVNURVJfUkVQTElDQVMsXG4gICAgY2x1c3RlclJlcGxpY2FzOiBDTFVTVEVSX1JFUExJQ0FTLFxuICAgIENMVVNURVJfUkVQTElDQVRFLFxuICAgIGNsdXN0ZXJSZXBsaWNhdGU6IENMVVNURVJfUkVQTElDQVRFLFxuICAgIENMVVNURVJfUkVTRVQsXG4gICAgY2x1c3RlclJlc2V0OiBDTFVTVEVSX1JFU0VULFxuICAgIENMVVNURVJfU0FWRUNPTkZJRyxcbiAgICBjbHVzdGVyU2F2ZUNvbmZpZzogQ0xVU1RFUl9TQVZFQ09ORklHLFxuICAgIENMVVNURVJfU0VUX0NPTkZJR19FUE9DSCxcbiAgICBjbHVzdGVyU2V0Q29uZmlnRXBvY2g6IENMVVNURVJfU0VUX0NPTkZJR19FUE9DSCxcbiAgICBDTFVTVEVSX1NFVFNMT1QsXG4gICAgY2x1c3RlclNldFNsb3Q6IENMVVNURVJfU0VUU0xPVCxcbiAgICBDTFVTVEVSX1NMT1RTLFxuICAgIGNsdXN0ZXJTbG90czogQ0xVU1RFUl9TTE9UUyxcbiAgICBDT01NQU5EX0NPVU5ULFxuICAgIGNvbW1hbmRDb3VudDogQ09NTUFORF9DT1VOVCxcbiAgICBDT01NQU5EX0dFVEtFWVMsXG4gICAgY29tbWFuZEdldEtleXM6IENPTU1BTkRfR0VUS0VZUyxcbiAgICBDT01NQU5EX0dFVEtFWVNBTkRGTEFHUyxcbiAgICBjb21tYW5kR2V0S2V5c0FuZEZsYWdzOiBDT01NQU5EX0dFVEtFWVNBTkRGTEFHUyxcbiAgICBDT01NQU5EX0lORk8sXG4gICAgY29tbWFuZEluZm86IENPTU1BTkRfSU5GTyxcbiAgICBDT01NQU5EX0xJU1QsXG4gICAgY29tbWFuZExpc3Q6IENPTU1BTkRfTElTVCxcbiAgICBDT01NQU5ELFxuICAgIGNvbW1hbmQ6IENPTU1BTkQsXG4gICAgQ09ORklHX0dFVCxcbiAgICBjb25maWdHZXQ6IENPTkZJR19HRVQsXG4gICAgQ09ORklHX1JFU0VUQVNUQVQsXG4gICAgY29uZmlnUmVzZXRTdGF0OiBDT05GSUdfUkVTRVRBU1RBVCxcbiAgICBDT05GSUdfUkVXUklURSxcbiAgICBjb25maWdSZXdyaXRlOiBDT05GSUdfUkVXUklURSxcbiAgICBDT05GSUdfU0VULFxuICAgIGNvbmZpZ1NldDogQ09ORklHX1NFVCxcbiAgICBEQlNJWkUsXG4gICAgZGJTaXplOiBEQlNJWkUsXG4gICAgRElTQ0FSRCxcbiAgICBkaXNjYXJkOiBESVNDQVJELFxuICAgIEVDSE8sXG4gICAgZWNobzogRUNITyxcbiAgICBGQUlMT1ZFUixcbiAgICBmYWlsb3ZlcjogRkFJTE9WRVIsXG4gICAgRkxVU0hBTEwsXG4gICAgZmx1c2hBbGw6IEZMVVNIQUxMLFxuICAgIEZMVVNIREIsXG4gICAgZmx1c2hEYjogRkxVU0hEQixcbiAgICBGVU5DVElPTl9ERUxFVEUsXG4gICAgZnVuY3Rpb25EZWxldGU6IEZVTkNUSU9OX0RFTEVURSxcbiAgICBGVU5DVElPTl9EVU1QLFxuICAgIGZ1bmN0aW9uRHVtcDogRlVOQ1RJT05fRFVNUCxcbiAgICBGVU5DVElPTl9GTFVTSCxcbiAgICBmdW5jdGlvbkZsdXNoOiBGVU5DVElPTl9GTFVTSCxcbiAgICBGVU5DVElPTl9LSUxMLFxuICAgIGZ1bmN0aW9uS2lsbDogRlVOQ1RJT05fS0lMTCxcbiAgICBGVU5DVElPTl9MSVNUX1dJVEhDT0RFLFxuICAgIGZ1bmN0aW9uTGlzdFdpdGhDb2RlOiBGVU5DVElPTl9MSVNUX1dJVEhDT0RFLFxuICAgIEZVTkNUSU9OX0xJU1QsXG4gICAgZnVuY3Rpb25MaXN0OiBGVU5DVElPTl9MSVNULFxuICAgIEZVTkNUSU9OX0xPQUQsXG4gICAgZnVuY3Rpb25Mb2FkOiBGVU5DVElPTl9MT0FELFxuICAgIEZVTkNUSU9OX1JFU1RPUkUsXG4gICAgZnVuY3Rpb25SZXN0b3JlOiBGVU5DVElPTl9SRVNUT1JFLFxuICAgIEZVTkNUSU9OX1NUQVRTLFxuICAgIGZ1bmN0aW9uU3RhdHM6IEZVTkNUSU9OX1NUQVRTLFxuICAgIEhFTExPLFxuICAgIGhlbGxvOiBIRUxMTyxcbiAgICBJTkZPLFxuICAgIGluZm86IElORk8sXG4gICAgS0VZUyxcbiAgICBrZXlzOiBLRVlTLFxuICAgIExBU1RTQVZFLFxuICAgIGxhc3RTYXZlOiBMQVNUU0FWRSxcbiAgICBMQVRFTkNZX0RPQ1RPUixcbiAgICBsYXRlbmN5RG9jdG9yOiBMQVRFTkNZX0RPQ1RPUixcbiAgICBMQVRFTkNZX0dSQVBILFxuICAgIGxhdGVuY3lHcmFwaDogTEFURU5DWV9HUkFQSCxcbiAgICBMQVRFTkNZX0hJU1RPUlksXG4gICAgbGF0ZW5jeUhpc3Rvcnk6IExBVEVOQ1lfSElTVE9SWSxcbiAgICBMQVRFTkNZX0xBVEVTVCxcbiAgICBsYXRlbmN5TGF0ZXN0OiBMQVRFTkNZX0xBVEVTVCxcbiAgICBMT0xXVVQsXG4gICAgbG9sd3V0OiBMT0xXVVQsXG4gICAgTUVNT1JZX0RPQ1RPUixcbiAgICBtZW1vcnlEb2N0b3I6IE1FTU9SWV9ET0NUT1IsXG4gICAgJ01FTU9SWV9NQUxMT0MtU1RBVFMnOiBNRU1PUllfTUFMTE9DX1NUQVRTLFxuICAgIG1lbW9yeU1hbGxvY1N0YXRzOiBNRU1PUllfTUFMTE9DX1NUQVRTLFxuICAgIE1FTU9SWV9QVVJHRSxcbiAgICBtZW1vcnlQdXJnZTogTUVNT1JZX1BVUkdFLFxuICAgIE1FTU9SWV9TVEFUUyxcbiAgICBtZW1vcnlTdGF0czogTUVNT1JZX1NUQVRTLFxuICAgIE1FTU9SWV9VU0FHRSxcbiAgICBtZW1vcnlVc2FnZTogTUVNT1JZX1VTQUdFLFxuICAgIE1PRFVMRV9MSVNULFxuICAgIG1vZHVsZUxpc3Q6IE1PRFVMRV9MSVNULFxuICAgIE1PRFVMRV9MT0FELFxuICAgIG1vZHVsZUxvYWQ6IE1PRFVMRV9MT0FELFxuICAgIE1PRFVMRV9VTkxPQUQsXG4gICAgbW9kdWxlVW5sb2FkOiBNT0RVTEVfVU5MT0FELFxuICAgIE1PVkUsXG4gICAgbW92ZTogTU9WRSxcbiAgICBQSU5HLFxuICAgIHBpbmc6IFBJTkcsXG4gICAgUFVCU1VCX0NIQU5ORUxTLFxuICAgIHB1YlN1YkNoYW5uZWxzOiBQVUJTVUJfQ0hBTk5FTFMsXG4gICAgUFVCU1VCX05VTVBBVCxcbiAgICBwdWJTdWJOdW1QYXQ6IFBVQlNVQl9OVU1QQVQsXG4gICAgUFVCU1VCX05VTVNVQixcbiAgICBwdWJTdWJOdW1TdWI6IFBVQlNVQl9OVU1TVUIsXG4gICAgUFVCU1VCX1NIQVJEQ0hBTk5FTFMsXG4gICAgcHViU3ViU2hhcmRDaGFubmVsczogUFVCU1VCX1NIQVJEQ0hBTk5FTFMsXG4gICAgUFVCU1VCX1NIQVJETlVNU1VCLFxuICAgIHB1YlN1YlNoYXJkTnVtU3ViOiBQVUJTVUJfU0hBUkROVU1TVUIsXG4gICAgUkFORE9NS0VZLFxuICAgIHJhbmRvbUtleTogUkFORE9NS0VZLFxuICAgIFJFQURPTkxZLFxuICAgIHJlYWRvbmx5OiBSRUFET05MWSxcbiAgICBSRUFEV1JJVEUsXG4gICAgcmVhZHdyaXRlOiBSRUFEV1JJVEUsXG4gICAgUkVQTElDQU9GLFxuICAgIHJlcGxpY2FPZjogUkVQTElDQU9GLFxuICAgICdSRVNUT1JFLUFTS0lORyc6IFJFU1RPUkVfQVNLSU5HLFxuICAgIHJlc3RvcmVBc2tpbmc6IFJFU1RPUkVfQVNLSU5HLFxuICAgIFJPTEUsXG4gICAgcm9sZTogUk9MRSxcbiAgICBTQVZFLFxuICAgIHNhdmU6IFNBVkUsXG4gICAgU0NBTixcbiAgICBzY2FuOiBTQ0FOLFxuICAgIFNDUklQVF9ERUJVRyxcbiAgICBzY3JpcHREZWJ1ZzogU0NSSVBUX0RFQlVHLFxuICAgIFNDUklQVF9FWElTVFMsXG4gICAgc2NyaXB0RXhpc3RzOiBTQ1JJUFRfRVhJU1RTLFxuICAgIFNDUklQVF9GTFVTSCxcbiAgICBzY3JpcHRGbHVzaDogU0NSSVBUX0ZMVVNILFxuICAgIFNDUklQVF9LSUxMLFxuICAgIHNjcmlwdEtpbGw6IFNDUklQVF9LSUxMLFxuICAgIFNDUklQVF9MT0FELFxuICAgIHNjcmlwdExvYWQ6IFNDUklQVF9MT0FELFxuICAgIFNIVVRET1dOLFxuICAgIHNodXRkb3duOiBTSFVURE9XTixcbiAgICBTV0FQREIsXG4gICAgc3dhcERiOiBTV0FQREIsXG4gICAgVElNRSxcbiAgICB0aW1lOiBUSU1FLFxuICAgIFVOV0FUQ0gsXG4gICAgdW53YXRjaDogVU5XQVRDSCxcbiAgICBXQUlULFxuICAgIHdhaXQ6IFdBSVRcbn07XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5NdWx0aUVycm9yUmVwbHkgPSBleHBvcnRzLkVycm9yUmVwbHkgPSBleHBvcnRzLlJlY29ubmVjdFN0cmF0ZWd5RXJyb3IgPSBleHBvcnRzLlJvb3ROb2Rlc1VuYXZhaWxhYmxlRXJyb3IgPSBleHBvcnRzLlNvY2tldENsb3NlZFVuZXhwZWN0ZWRseUVycm9yID0gZXhwb3J0cy5EaXNjb25uZWN0c0NsaWVudEVycm9yID0gZXhwb3J0cy5DbGllbnRPZmZsaW5lRXJyb3IgPSBleHBvcnRzLkNsaWVudENsb3NlZEVycm9yID0gZXhwb3J0cy5Db25uZWN0aW9uVGltZW91dEVycm9yID0gZXhwb3J0cy5XYXRjaEVycm9yID0gZXhwb3J0cy5BYm9ydEVycm9yID0gdm9pZCAwO1xuY2xhc3MgQWJvcnRFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoJ1RoZSBjb21tYW5kIHdhcyBhYm9ydGVkJyk7XG4gICAgfVxufVxuZXhwb3J0cy5BYm9ydEVycm9yID0gQWJvcnRFcnJvcjtcbmNsYXNzIFdhdGNoRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCdPbmUgKG9yIG1vcmUpIG9mIHRoZSB3YXRjaGVkIGtleXMgaGFzIGJlZW4gY2hhbmdlZCcpO1xuICAgIH1cbn1cbmV4cG9ydHMuV2F0Y2hFcnJvciA9IFdhdGNoRXJyb3I7XG5jbGFzcyBDb25uZWN0aW9uVGltZW91dEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcignQ29ubmVjdGlvbiB0aW1lb3V0Jyk7XG4gICAgfVxufVxuZXhwb3J0cy5Db25uZWN0aW9uVGltZW91dEVycm9yID0gQ29ubmVjdGlvblRpbWVvdXRFcnJvcjtcbmNsYXNzIENsaWVudENsb3NlZEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcignVGhlIGNsaWVudCBpcyBjbG9zZWQnKTtcbiAgICB9XG59XG5leHBvcnRzLkNsaWVudENsb3NlZEVycm9yID0gQ2xpZW50Q2xvc2VkRXJyb3I7XG5jbGFzcyBDbGllbnRPZmZsaW5lRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCdUaGUgY2xpZW50IGlzIG9mZmxpbmUnKTtcbiAgICB9XG59XG5leHBvcnRzLkNsaWVudE9mZmxpbmVFcnJvciA9IENsaWVudE9mZmxpbmVFcnJvcjtcbmNsYXNzIERpc2Nvbm5lY3RzQ2xpZW50RXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCdEaXNjb25uZWN0cyBjbGllbnQnKTtcbiAgICB9XG59XG5leHBvcnRzLkRpc2Nvbm5lY3RzQ2xpZW50RXJyb3IgPSBEaXNjb25uZWN0c0NsaWVudEVycm9yO1xuY2xhc3MgU29ja2V0Q2xvc2VkVW5leHBlY3RlZGx5RXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCdTb2NrZXQgY2xvc2VkIHVuZXhwZWN0ZWRseScpO1xuICAgIH1cbn1cbmV4cG9ydHMuU29ja2V0Q2xvc2VkVW5leHBlY3RlZGx5RXJyb3IgPSBTb2NrZXRDbG9zZWRVbmV4cGVjdGVkbHlFcnJvcjtcbmNsYXNzIFJvb3ROb2Rlc1VuYXZhaWxhYmxlRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCdBbGwgdGhlIHJvb3Qgbm9kZXMgYXJlIHVuYXZhaWxhYmxlJyk7XG4gICAgfVxufVxuZXhwb3J0cy5Sb290Tm9kZXNVbmF2YWlsYWJsZUVycm9yID0gUm9vdE5vZGVzVW5hdmFpbGFibGVFcnJvcjtcbmNsYXNzIFJlY29ubmVjdFN0cmF0ZWd5RXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgY29uc3RydWN0b3Iob3JpZ2luYWxFcnJvciwgc29ja2V0RXJyb3IpIHtcbiAgICAgICAgc3VwZXIob3JpZ2luYWxFcnJvci5tZXNzYWdlKTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIFwib3JpZ2luYWxFcnJvclwiLCB7XG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogdm9pZCAwXG4gICAgICAgIH0pO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgXCJzb2NrZXRFcnJvclwiLCB7XG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogdm9pZCAwXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm9yaWdpbmFsRXJyb3IgPSBvcmlnaW5hbEVycm9yO1xuICAgICAgICB0aGlzLnNvY2tldEVycm9yID0gc29ja2V0RXJyb3I7XG4gICAgfVxufVxuZXhwb3J0cy5SZWNvbm5lY3RTdHJhdGVneUVycm9yID0gUmVjb25uZWN0U3RyYXRlZ3lFcnJvcjtcbmNsYXNzIEVycm9yUmVwbHkgZXh0ZW5kcyBFcnJvciB7XG4gICAgY29uc3RydWN0b3IobWVzc2FnZSkge1xuICAgICAgICBzdXBlcihtZXNzYWdlKTtcbiAgICAgICAgdGhpcy5zdGFjayA9IHVuZGVmaW5lZDtcbiAgICB9XG59XG5leHBvcnRzLkVycm9yUmVwbHkgPSBFcnJvclJlcGx5O1xuY2xhc3MgTXVsdGlFcnJvclJlcGx5IGV4dGVuZHMgRXJyb3JSZXBseSB7XG4gICAgY29uc3RydWN0b3IocmVwbGllcywgZXJyb3JJbmRleGVzKSB7XG4gICAgICAgIHN1cGVyKGAke2Vycm9ySW5kZXhlcy5sZW5ndGh9IGNvbW1hbmRzIGZhaWxlZCwgc2VlIC5yZXBsaWVzIGFuZCAuZXJyb3JJbmRleGVzIGZvciBtb3JlIGluZm9ybWF0aW9uYCk7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcInJlcGxpZXNcIiwge1xuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IHZvaWQgMFxuICAgICAgICB9KTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIFwiZXJyb3JJbmRleGVzXCIsIHtcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDBcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucmVwbGllcyA9IHJlcGxpZXM7XG4gICAgICAgIHRoaXMuZXJyb3JJbmRleGVzID0gZXJyb3JJbmRleGVzO1xuICAgIH1cbiAgICAqZXJyb3JzKCkge1xuICAgICAgICBmb3IgKGNvbnN0IGluZGV4IG9mIHRoaXMuZXJyb3JJbmRleGVzKSB7XG4gICAgICAgICAgICB5aWVsZCB0aGlzLnJlcGxpZXNbaW5kZXhdO1xuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0cy5NdWx0aUVycm9yUmVwbHkgPSBNdWx0aUVycm9yUmVwbHk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5wcm9taXNlVGltZW91dCA9IHZvaWQgMDtcbmZ1bmN0aW9uIHByb21pc2VUaW1lb3V0KG1zKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCBtcykpO1xufVxuZXhwb3J0cy5wcm9taXNlVGltZW91dCA9IHByb21pc2VUaW1lb3V0O1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0ID0gKHRoaXMgJiYgdGhpcy5fX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KSB8fCBmdW5jdGlvbiAocmVjZWl2ZXIsIHN0YXRlLCBraW5kLCBmKSB7XG4gICAgaWYgKGtpbmQgPT09IFwiYVwiICYmICFmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgZ2V0dGVyXCIpO1xuICAgIGlmICh0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyICE9PSBzdGF0ZSB8fCAhZiA6ICFzdGF0ZS5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHJlYWQgcHJpdmF0ZSBtZW1iZXIgZnJvbSBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0XCIpO1xuICAgIHJldHVybiBraW5kID09PSBcIm1cIiA/IGYgOiBraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlcikgOiBmID8gZi52YWx1ZSA6IHN0YXRlLmdldChyZWNlaXZlcik7XG59O1xudmFyIF9fY2xhc3NQcml2YXRlRmllbGRTZXQgPSAodGhpcyAmJiB0aGlzLl9fY2xhc3NQcml2YXRlRmllbGRTZXQpIHx8IGZ1bmN0aW9uIChyZWNlaXZlciwgc3RhdGUsIHZhbHVlLCBraW5kLCBmKSB7XG4gICAgaWYgKGtpbmQgPT09IFwibVwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBtZXRob2QgaXMgbm90IHdyaXRhYmxlXCIpO1xuICAgIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIHNldHRlclwiKTtcbiAgICBpZiAodHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciAhPT0gc3RhdGUgfHwgIWYgOiAhc3RhdGUuaGFzKHJlY2VpdmVyKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCB3cml0ZSBwcml2YXRlIG1lbWJlciB0byBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0XCIpO1xuICAgIHJldHVybiAoa2luZCA9PT0gXCJhXCIgPyBmLmNhbGwocmVjZWl2ZXIsIHZhbHVlKSA6IGYgPyBmLnZhbHVlID0gdmFsdWUgOiBzdGF0ZS5zZXQocmVjZWl2ZXIsIHZhbHVlKSksIHZhbHVlO1xufTtcbnZhciBfUmVkaXNTb2NrZXRfaW5zdGFuY2VzLCBfYSwgX1JlZGlzU29ja2V0X2luaXRpYXRlT3B0aW9ucywgX1JlZGlzU29ja2V0X2lzVGxzU29ja2V0LCBfUmVkaXNTb2NrZXRfaW5pdGlhdG9yLCBfUmVkaXNTb2NrZXRfb3B0aW9ucywgX1JlZGlzU29ja2V0X3NvY2tldCwgX1JlZGlzU29ja2V0X2lzT3BlbiwgX1JlZGlzU29ja2V0X2lzUmVhZHksIF9SZWRpc1NvY2tldF93cml0YWJsZU5lZWREcmFpbiwgX1JlZGlzU29ja2V0X2lzU29ja2V0VW5yZWZlZCwgX1JlZGlzU29ja2V0X3JlY29ubmVjdFN0cmF0ZWd5LCBfUmVkaXNTb2NrZXRfc2hvdWxkUmVjb25uZWN0LCBfUmVkaXNTb2NrZXRfY29ubmVjdCwgX1JlZGlzU29ja2V0X2NyZWF0ZVNvY2tldCwgX1JlZGlzU29ja2V0X2NyZWF0ZU5ldFNvY2tldCwgX1JlZGlzU29ja2V0X2NyZWF0ZVRsc1NvY2tldCwgX1JlZGlzU29ja2V0X29uU29ja2V0RXJyb3IsIF9SZWRpc1NvY2tldF9kaXNjb25uZWN0LCBfUmVkaXNTb2NrZXRfaXNDb3JrZWQ7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBldmVudHNfMSA9IHJlcXVpcmUoXCJldmVudHNcIik7XG5jb25zdCBuZXQgPSByZXF1aXJlKFwibmV0XCIpO1xuY29uc3QgdGxzID0gcmVxdWlyZShcInRsc1wiKTtcbmNvbnN0IGVycm9yc18xID0gcmVxdWlyZShcIi4uL2Vycm9yc1wiKTtcbmNvbnN0IHV0aWxzXzEgPSByZXF1aXJlKFwiLi4vdXRpbHNcIik7XG5jbGFzcyBSZWRpc1NvY2tldCBleHRlbmRzIGV2ZW50c18xLkV2ZW50RW1pdHRlciB7XG4gICAgZ2V0IGlzT3BlbigpIHtcbiAgICAgICAgcmV0dXJuIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzU29ja2V0X2lzT3BlbiwgXCJmXCIpO1xuICAgIH1cbiAgICBnZXQgaXNSZWFkeSgpIHtcbiAgICAgICAgcmV0dXJuIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzU29ja2V0X2lzUmVhZHksIFwiZlwiKTtcbiAgICB9XG4gICAgZ2V0IHdyaXRhYmxlTmVlZERyYWluKCkge1xuICAgICAgICByZXR1cm4gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUmVkaXNTb2NrZXRfd3JpdGFibGVOZWVkRHJhaW4sIFwiZlwiKTtcbiAgICB9XG4gICAgY29uc3RydWN0b3IoaW5pdGlhdG9yLCBvcHRpb25zKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIF9SZWRpc1NvY2tldF9pbnN0YW5jZXMuYWRkKHRoaXMpO1xuICAgICAgICBfUmVkaXNTb2NrZXRfaW5pdGlhdG9yLnNldCh0aGlzLCB2b2lkIDApO1xuICAgICAgICBfUmVkaXNTb2NrZXRfb3B0aW9ucy5zZXQodGhpcywgdm9pZCAwKTtcbiAgICAgICAgX1JlZGlzU29ja2V0X3NvY2tldC5zZXQodGhpcywgdm9pZCAwKTtcbiAgICAgICAgX1JlZGlzU29ja2V0X2lzT3Blbi5zZXQodGhpcywgZmFsc2UpO1xuICAgICAgICBfUmVkaXNTb2NrZXRfaXNSZWFkeS5zZXQodGhpcywgZmFsc2UpO1xuICAgICAgICAvLyBgd3JpdGFibGUud3JpdGFibGVOZWVkRHJhaW5gIHdhcyBhZGRlZCBpbiB2MTUuMi4wIGFuZCB0aGVyZWZvcmUgY2FuJ3QgYmUgdXNlZFxuICAgICAgICAvLyBodHRwczovL25vZGVqcy5vcmcvYXBpL3N0cmVhbS5odG1sI3N0cmVhbV93cml0YWJsZV93cml0YWJsZW5lZWRkcmFpblxuICAgICAgICBfUmVkaXNTb2NrZXRfd3JpdGFibGVOZWVkRHJhaW4uc2V0KHRoaXMsIGZhbHNlKTtcbiAgICAgICAgX1JlZGlzU29ja2V0X2lzU29ja2V0VW5yZWZlZC5zZXQodGhpcywgZmFsc2UpO1xuICAgICAgICBfUmVkaXNTb2NrZXRfaXNDb3JrZWQuc2V0KHRoaXMsIGZhbHNlKTtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfUmVkaXNTb2NrZXRfaW5pdGlhdG9yLCBpbml0aWF0b3IsIFwiZlwiKTtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfUmVkaXNTb2NrZXRfb3B0aW9ucywgX19jbGFzc1ByaXZhdGVGaWVsZEdldChfYSwgX2EsIFwibVwiLCBfUmVkaXNTb2NrZXRfaW5pdGlhdGVPcHRpb25zKS5jYWxsKF9hLCBvcHRpb25zKSwgXCJmXCIpO1xuICAgIH1cbiAgICBhc3luYyBjb25uZWN0KCkge1xuICAgICAgICBpZiAoX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUmVkaXNTb2NrZXRfaXNPcGVuLCBcImZcIikpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignU29ja2V0IGFscmVhZHkgb3BlbmVkJyk7XG4gICAgICAgIH1cbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfUmVkaXNTb2NrZXRfaXNPcGVuLCB0cnVlLCBcImZcIik7XG4gICAgICAgIHJldHVybiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc1NvY2tldF9pbnN0YW5jZXMsIFwibVwiLCBfUmVkaXNTb2NrZXRfY29ubmVjdCkuY2FsbCh0aGlzKTtcbiAgICB9XG4gICAgd3JpdGVDb21tYW5kKGFyZ3MpIHtcbiAgICAgICAgaWYgKCFfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc1NvY2tldF9zb2NrZXQsIFwiZlwiKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IGVycm9yc18xLkNsaWVudENsb3NlZEVycm9yKCk7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCB0b1dyaXRlIG9mIGFyZ3MpIHtcbiAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX1JlZGlzU29ja2V0X3dyaXRhYmxlTmVlZERyYWluLCAhX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUmVkaXNTb2NrZXRfc29ja2V0LCBcImZcIikud3JpdGUodG9Xcml0ZSksIFwiZlwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBkaXNjb25uZWN0KCkge1xuICAgICAgICBpZiAoIV9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzU29ja2V0X2lzT3BlbiwgXCJmXCIpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgZXJyb3JzXzEuQ2xpZW50Q2xvc2VkRXJyb3IoKTtcbiAgICAgICAgfVxuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9SZWRpc1NvY2tldF9pc09wZW4sIGZhbHNlLCBcImZcIik7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzU29ja2V0X2luc3RhbmNlcywgXCJtXCIsIF9SZWRpc1NvY2tldF9kaXNjb25uZWN0KS5jYWxsKHRoaXMpO1xuICAgIH1cbiAgICBhc3luYyBxdWl0KGZuKSB7XG4gICAgICAgIGlmICghX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUmVkaXNTb2NrZXRfaXNPcGVuLCBcImZcIikpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBlcnJvcnNfMS5DbGllbnRDbG9zZWRFcnJvcigpO1xuICAgICAgICB9XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX1JlZGlzU29ja2V0X2lzT3BlbiwgZmFsc2UsIFwiZlwiKTtcbiAgICAgICAgY29uc3QgcmVwbHkgPSBhd2FpdCBmbigpO1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc1NvY2tldF9pbnN0YW5jZXMsIFwibVwiLCBfUmVkaXNTb2NrZXRfZGlzY29ubmVjdCkuY2FsbCh0aGlzKTtcbiAgICAgICAgcmV0dXJuIHJlcGx5O1xuICAgIH1cbiAgICBjb3JrKCkge1xuICAgICAgICBpZiAoIV9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzU29ja2V0X3NvY2tldCwgXCJmXCIpIHx8IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzU29ja2V0X2lzQ29ya2VkLCBcImZcIikpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc1NvY2tldF9zb2NrZXQsIFwiZlwiKS5jb3JrKCk7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX1JlZGlzU29ja2V0X2lzQ29ya2VkLCB0cnVlLCBcImZcIik7XG4gICAgICAgIHNldEltbWVkaWF0ZSgoKSA9PiB7XG4gICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc1NvY2tldF9zb2NrZXQsIFwiZlwiKT8udW5jb3JrKCk7XG4gICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9SZWRpc1NvY2tldF9pc0NvcmtlZCwgZmFsc2UsIFwiZlwiKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJlZigpIHtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfUmVkaXNTb2NrZXRfaXNTb2NrZXRVbnJlZmVkLCBmYWxzZSwgXCJmXCIpO1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc1NvY2tldF9zb2NrZXQsIFwiZlwiKT8ucmVmKCk7XG4gICAgfVxuICAgIHVucmVmKCkge1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9SZWRpc1NvY2tldF9pc1NvY2tldFVucmVmZWQsIHRydWUsIFwiZlwiKTtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUmVkaXNTb2NrZXRfc29ja2V0LCBcImZcIik/LnVucmVmKCk7XG4gICAgfVxufVxuX2EgPSBSZWRpc1NvY2tldCwgX1JlZGlzU29ja2V0X2luaXRpYXRvciA9IG5ldyBXZWFrTWFwKCksIF9SZWRpc1NvY2tldF9vcHRpb25zID0gbmV3IFdlYWtNYXAoKSwgX1JlZGlzU29ja2V0X3NvY2tldCA9IG5ldyBXZWFrTWFwKCksIF9SZWRpc1NvY2tldF9pc09wZW4gPSBuZXcgV2Vha01hcCgpLCBfUmVkaXNTb2NrZXRfaXNSZWFkeSA9IG5ldyBXZWFrTWFwKCksIF9SZWRpc1NvY2tldF93cml0YWJsZU5lZWREcmFpbiA9IG5ldyBXZWFrTWFwKCksIF9SZWRpc1NvY2tldF9pc1NvY2tldFVucmVmZWQgPSBuZXcgV2Vha01hcCgpLCBfUmVkaXNTb2NrZXRfaXNDb3JrZWQgPSBuZXcgV2Vha01hcCgpLCBfUmVkaXNTb2NrZXRfaW5zdGFuY2VzID0gbmV3IFdlYWtTZXQoKSwgX1JlZGlzU29ja2V0X2luaXRpYXRlT3B0aW9ucyA9IGZ1bmN0aW9uIF9SZWRpc1NvY2tldF9pbml0aWF0ZU9wdGlvbnMob3B0aW9ucykge1xuICAgIHZhciBfYiwgX2M7XG4gICAgb3B0aW9ucyA/PyAob3B0aW9ucyA9IHt9KTtcbiAgICBpZiAoIW9wdGlvbnMucGF0aCkge1xuICAgICAgICAoX2IgPSBvcHRpb25zKS5wb3J0ID8/IChfYi5wb3J0ID0gNjM3OSk7XG4gICAgICAgIChfYyA9IG9wdGlvbnMpLmhvc3QgPz8gKF9jLmhvc3QgPSAnbG9jYWxob3N0Jyk7XG4gICAgfVxuICAgIG9wdGlvbnMuY29ubmVjdFRpbWVvdXQgPz8gKG9wdGlvbnMuY29ubmVjdFRpbWVvdXQgPSA1MDAwKTtcbiAgICBvcHRpb25zLmtlZXBBbGl2ZSA/PyAob3B0aW9ucy5rZWVwQWxpdmUgPSA1MDAwKTtcbiAgICBvcHRpb25zLm5vRGVsYXkgPz8gKG9wdGlvbnMubm9EZWxheSA9IHRydWUpO1xuICAgIHJldHVybiBvcHRpb25zO1xufSwgX1JlZGlzU29ja2V0X2lzVGxzU29ja2V0ID0gZnVuY3Rpb24gX1JlZGlzU29ja2V0X2lzVGxzU29ja2V0KG9wdGlvbnMpIHtcbiAgICByZXR1cm4gb3B0aW9ucy50bHMgPT09IHRydWU7XG59LCBfUmVkaXNTb2NrZXRfcmVjb25uZWN0U3RyYXRlZ3kgPSBmdW5jdGlvbiBfUmVkaXNTb2NrZXRfcmVjb25uZWN0U3RyYXRlZ3kocmV0cmllcywgY2F1c2UpIHtcbiAgICBpZiAoX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUmVkaXNTb2NrZXRfb3B0aW9ucywgXCJmXCIpLnJlY29ubmVjdFN0cmF0ZWd5ID09PSBmYWxzZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGVvZiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc1NvY2tldF9vcHRpb25zLCBcImZcIikucmVjb25uZWN0U3RyYXRlZ3kgPT09ICdudW1iZXInKSB7XG4gICAgICAgIHJldHVybiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc1NvY2tldF9vcHRpb25zLCBcImZcIikucmVjb25uZWN0U3RyYXRlZ3k7XG4gICAgfVxuICAgIGVsc2UgaWYgKF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzU29ja2V0X29wdGlvbnMsIFwiZlwiKS5yZWNvbm5lY3RTdHJhdGVneSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcmV0cnlJbiA9IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzU29ja2V0X29wdGlvbnMsIFwiZlwiKS5yZWNvbm5lY3RTdHJhdGVneShyZXRyaWVzLCBjYXVzZSk7XG4gICAgICAgICAgICBpZiAocmV0cnlJbiAhPT0gZmFsc2UgJiYgIShyZXRyeUluIGluc3RhbmNlb2YgRXJyb3IpICYmIHR5cGVvZiByZXRyeUluICE9PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYFJlY29ubmVjdCBzdHJhdGVneSBzaG91bGQgcmV0dXJuIFxcYGZhbHNlIHwgRXJyb3IgfCBudW1iZXJcXGAsIGdvdCAke3JldHJ5SW59IGluc3RlYWRgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXRyeUluO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdCgnZXJyb3InLCBlcnIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBNYXRoLm1pbihyZXRyaWVzICogNTAsIDUwMCk7XG59LCBfUmVkaXNTb2NrZXRfc2hvdWxkUmVjb25uZWN0ID0gZnVuY3Rpb24gX1JlZGlzU29ja2V0X3Nob3VsZFJlY29ubmVjdChyZXRyaWVzLCBjYXVzZSkge1xuICAgIGNvbnN0IHJldHJ5SW4gPSBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc1NvY2tldF9pbnN0YW5jZXMsIFwibVwiLCBfUmVkaXNTb2NrZXRfcmVjb25uZWN0U3RyYXRlZ3kpLmNhbGwodGhpcywgcmV0cmllcywgY2F1c2UpO1xuICAgIGlmIChyZXRyeUluID09PSBmYWxzZSkge1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9SZWRpc1NvY2tldF9pc09wZW4sIGZhbHNlLCBcImZcIik7XG4gICAgICAgIHRoaXMuZW1pdCgnZXJyb3InLCBjYXVzZSk7XG4gICAgICAgIHJldHVybiBjYXVzZTtcbiAgICB9XG4gICAgZWxzZSBpZiAocmV0cnlJbiBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX1JlZGlzU29ja2V0X2lzT3BlbiwgZmFsc2UsIFwiZlwiKTtcbiAgICAgICAgdGhpcy5lbWl0KCdlcnJvcicsIGNhdXNlKTtcbiAgICAgICAgcmV0dXJuIG5ldyBlcnJvcnNfMS5SZWNvbm5lY3RTdHJhdGVneUVycm9yKHJldHJ5SW4sIGNhdXNlKTtcbiAgICB9XG4gICAgcmV0dXJuIHJldHJ5SW47XG59LCBfUmVkaXNTb2NrZXRfY29ubmVjdCA9IGFzeW5jIGZ1bmN0aW9uIF9SZWRpc1NvY2tldF9jb25uZWN0KCkge1xuICAgIGxldCByZXRyaWVzID0gMDtcbiAgICBkbyB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9SZWRpc1NvY2tldF9zb2NrZXQsIGF3YWl0IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzU29ja2V0X2luc3RhbmNlcywgXCJtXCIsIF9SZWRpc1NvY2tldF9jcmVhdGVTb2NrZXQpLmNhbGwodGhpcyksIFwiZlwiKTtcbiAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX1JlZGlzU29ja2V0X3dyaXRhYmxlTmVlZERyYWluLCBmYWxzZSwgXCJmXCIpO1xuICAgICAgICAgICAgdGhpcy5lbWl0KCdjb25uZWN0Jyk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGF3YWl0IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzU29ja2V0X2luaXRpYXRvciwgXCJmXCIpLmNhbGwodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUmVkaXNTb2NrZXRfc29ja2V0LCBcImZcIikuZGVzdHJveSgpO1xuICAgICAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX1JlZGlzU29ja2V0X3NvY2tldCwgdW5kZWZpbmVkLCBcImZcIik7XG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfUmVkaXNTb2NrZXRfaXNSZWFkeSwgdHJ1ZSwgXCJmXCIpO1xuICAgICAgICAgICAgdGhpcy5lbWl0KCdyZWFkeScpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGNvbnN0IHJldHJ5SW4gPSBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc1NvY2tldF9pbnN0YW5jZXMsIFwibVwiLCBfUmVkaXNTb2NrZXRfc2hvdWxkUmVjb25uZWN0KS5jYWxsKHRoaXMsIHJldHJpZXMrKywgZXJyKTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcmV0cnlJbiAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyByZXRyeUluO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5lbWl0KCdlcnJvcicsIGVycik7XG4gICAgICAgICAgICBhd2FpdCAoMCwgdXRpbHNfMS5wcm9taXNlVGltZW91dCkocmV0cnlJbik7XG4gICAgICAgICAgICB0aGlzLmVtaXQoJ3JlY29ubmVjdGluZycpO1xuICAgICAgICB9XG4gICAgfSB3aGlsZSAoX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUmVkaXNTb2NrZXRfaXNPcGVuLCBcImZcIikgJiYgIV9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzU29ja2V0X2lzUmVhZHksIFwiZlwiKSk7XG59LCBfUmVkaXNTb2NrZXRfY3JlYXRlU29ja2V0ID0gZnVuY3Rpb24gX1JlZGlzU29ja2V0X2NyZWF0ZVNvY2tldCgpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBjb25zdCB7IGNvbm5lY3RFdmVudCwgc29ja2V0IH0gPSBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9hLCBfYSwgXCJtXCIsIF9SZWRpc1NvY2tldF9pc1Rsc1NvY2tldCkuY2FsbChfYSwgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUmVkaXNTb2NrZXRfb3B0aW9ucywgXCJmXCIpKSA/XG4gICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc1NvY2tldF9pbnN0YW5jZXMsIFwibVwiLCBfUmVkaXNTb2NrZXRfY3JlYXRlVGxzU29ja2V0KS5jYWxsKHRoaXMpIDpcbiAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzU29ja2V0X2luc3RhbmNlcywgXCJtXCIsIF9SZWRpc1NvY2tldF9jcmVhdGVOZXRTb2NrZXQpLmNhbGwodGhpcyk7XG4gICAgICAgIGlmIChfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc1NvY2tldF9vcHRpb25zLCBcImZcIikuY29ubmVjdFRpbWVvdXQpIHtcbiAgICAgICAgICAgIHNvY2tldC5zZXRUaW1lb3V0KF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzU29ja2V0X29wdGlvbnMsIFwiZlwiKS5jb25uZWN0VGltZW91dCwgKCkgPT4gc29ja2V0LmRlc3Ryb3kobmV3IGVycm9yc18xLkNvbm5lY3Rpb25UaW1lb3V0RXJyb3IoKSkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc1NvY2tldF9pc1NvY2tldFVucmVmZWQsIFwiZlwiKSkge1xuICAgICAgICAgICAgc29ja2V0LnVucmVmKCk7XG4gICAgICAgIH1cbiAgICAgICAgc29ja2V0XG4gICAgICAgICAgICAuc2V0Tm9EZWxheShfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc1NvY2tldF9vcHRpb25zLCBcImZcIikubm9EZWxheSlcbiAgICAgICAgICAgIC5vbmNlKCdlcnJvcicsIHJlamVjdClcbiAgICAgICAgICAgIC5vbmNlKGNvbm5lY3RFdmVudCwgKCkgPT4ge1xuICAgICAgICAgICAgc29ja2V0XG4gICAgICAgICAgICAgICAgLnNldFRpbWVvdXQoMClcbiAgICAgICAgICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvaXNzdWVzLzMxNjYzXG4gICAgICAgICAgICAgICAgLnNldEtlZXBBbGl2ZShfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc1NvY2tldF9vcHRpb25zLCBcImZcIikua2VlcEFsaXZlICE9PSBmYWxzZSwgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUmVkaXNTb2NrZXRfb3B0aW9ucywgXCJmXCIpLmtlZXBBbGl2ZSB8fCAwKVxuICAgICAgICAgICAgICAgIC5vZmYoJ2Vycm9yJywgcmVqZWN0KVxuICAgICAgICAgICAgICAgIC5vbmNlKCdlcnJvcicsIChlcnIpID0+IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzU29ja2V0X2luc3RhbmNlcywgXCJtXCIsIF9SZWRpc1NvY2tldF9vblNvY2tldEVycm9yKS5jYWxsKHRoaXMsIGVycikpXG4gICAgICAgICAgICAgICAgLm9uY2UoJ2Nsb3NlJywgaGFkRXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghaGFkRXJyb3IgJiYgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUmVkaXNTb2NrZXRfaXNPcGVuLCBcImZcIikgJiYgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUmVkaXNTb2NrZXRfc29ja2V0LCBcImZcIikgPT09IHNvY2tldCkge1xuICAgICAgICAgICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc1NvY2tldF9pbnN0YW5jZXMsIFwibVwiLCBfUmVkaXNTb2NrZXRfb25Tb2NrZXRFcnJvcikuY2FsbCh0aGlzLCBuZXcgZXJyb3JzXzEuU29ja2V0Q2xvc2VkVW5leHBlY3RlZGx5RXJyb3IoKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAub24oJ2RyYWluJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX1JlZGlzU29ja2V0X3dyaXRhYmxlTmVlZERyYWluLCBmYWxzZSwgXCJmXCIpO1xuICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgnZHJhaW4nKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLm9uKCdkYXRhJywgZGF0YSA9PiB0aGlzLmVtaXQoJ2RhdGEnLCBkYXRhKSk7XG4gICAgICAgICAgICByZXNvbHZlKHNvY2tldCk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xufSwgX1JlZGlzU29ja2V0X2NyZWF0ZU5ldFNvY2tldCA9IGZ1bmN0aW9uIF9SZWRpc1NvY2tldF9jcmVhdGVOZXRTb2NrZXQoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgY29ubmVjdEV2ZW50OiAnY29ubmVjdCcsXG4gICAgICAgIHNvY2tldDogbmV0LmNvbm5lY3QoX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUmVkaXNTb2NrZXRfb3B0aW9ucywgXCJmXCIpKSAvLyBUT0RPXG4gICAgfTtcbn0sIF9SZWRpc1NvY2tldF9jcmVhdGVUbHNTb2NrZXQgPSBmdW5jdGlvbiBfUmVkaXNTb2NrZXRfY3JlYXRlVGxzU29ja2V0KCkge1xuICAgIHJldHVybiB7XG4gICAgICAgIGNvbm5lY3RFdmVudDogJ3NlY3VyZUNvbm5lY3QnLFxuICAgICAgICBzb2NrZXQ6IHRscy5jb25uZWN0KF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzU29ja2V0X29wdGlvbnMsIFwiZlwiKSkgLy8gVE9ET1xuICAgIH07XG59LCBfUmVkaXNTb2NrZXRfb25Tb2NrZXRFcnJvciA9IGZ1bmN0aW9uIF9SZWRpc1NvY2tldF9vblNvY2tldEVycm9yKGVycikge1xuICAgIGNvbnN0IHdhc1JlYWR5ID0gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUmVkaXNTb2NrZXRfaXNSZWFkeSwgXCJmXCIpO1xuICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX1JlZGlzU29ja2V0X2lzUmVhZHksIGZhbHNlLCBcImZcIik7XG4gICAgdGhpcy5lbWl0KCdlcnJvcicsIGVycik7XG4gICAgaWYgKCF3YXNSZWFkeSB8fCAhX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUmVkaXNTb2NrZXRfaXNPcGVuLCBcImZcIikgfHwgdHlwZW9mIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzU29ja2V0X2luc3RhbmNlcywgXCJtXCIsIF9SZWRpc1NvY2tldF9zaG91bGRSZWNvbm5lY3QpLmNhbGwodGhpcywgMCwgZXJyKSAhPT0gJ251bWJlcicpXG4gICAgICAgIHJldHVybjtcbiAgICB0aGlzLmVtaXQoJ3JlY29ubmVjdGluZycpO1xuICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzU29ja2V0X2luc3RhbmNlcywgXCJtXCIsIF9SZWRpc1NvY2tldF9jb25uZWN0KS5jYWxsKHRoaXMpLmNhdGNoKCgpID0+IHtcbiAgICAgICAgLy8gdGhlIGVycm9yIHdhcyBhbHJlYWR5IGVtaXR0ZWQsIHNpbGVudGx5IGlnbm9yZSBpdFxuICAgIH0pO1xufSwgX1JlZGlzU29ja2V0X2Rpc2Nvbm5lY3QgPSBmdW5jdGlvbiBfUmVkaXNTb2NrZXRfZGlzY29ubmVjdCgpIHtcbiAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9SZWRpc1NvY2tldF9pc1JlYWR5LCBmYWxzZSwgXCJmXCIpO1xuICAgIGlmIChfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc1NvY2tldF9zb2NrZXQsIFwiZlwiKSkge1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc1NvY2tldF9zb2NrZXQsIFwiZlwiKS5kZXN0cm95KCk7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX1JlZGlzU29ja2V0X3NvY2tldCwgdW5kZWZpbmVkLCBcImZcIik7XG4gICAgfVxuICAgIHRoaXMuZW1pdCgnZW5kJyk7XG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gUmVkaXNTb2NrZXQ7XG4iLAogICAgIid1c2Ugc3RyaWN0J1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoWWFsbGlzdCkge1xuICBZYWxsaXN0LnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24qICgpIHtcbiAgICBmb3IgKGxldCB3YWxrZXIgPSB0aGlzLmhlYWQ7IHdhbGtlcjsgd2Fsa2VyID0gd2Fsa2VyLm5leHQpIHtcbiAgICAgIHlpZWxkIHdhbGtlci52YWx1ZVxuICAgIH1cbiAgfVxufVxuIiwKICAgICIndXNlIHN0cmljdCdcbm1vZHVsZS5leHBvcnRzID0gWWFsbGlzdFxuXG5ZYWxsaXN0Lk5vZGUgPSBOb2RlXG5ZYWxsaXN0LmNyZWF0ZSA9IFlhbGxpc3RcblxuZnVuY3Rpb24gWWFsbGlzdCAobGlzdCkge1xuICB2YXIgc2VsZiA9IHRoaXNcbiAgaWYgKCEoc2VsZiBpbnN0YW5jZW9mIFlhbGxpc3QpKSB7XG4gICAgc2VsZiA9IG5ldyBZYWxsaXN0KClcbiAgfVxuXG4gIHNlbGYudGFpbCA9IG51bGxcbiAgc2VsZi5oZWFkID0gbnVsbFxuICBzZWxmLmxlbmd0aCA9IDBcblxuICBpZiAobGlzdCAmJiB0eXBlb2YgbGlzdC5mb3JFYWNoID09PSAnZnVuY3Rpb24nKSB7XG4gICAgbGlzdC5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICBzZWxmLnB1c2goaXRlbSlcbiAgICB9KVxuICB9IGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAwKSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIGwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICBzZWxmLnB1c2goYXJndW1lbnRzW2ldKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzZWxmXG59XG5cbllhbGxpc3QucHJvdG90eXBlLnJlbW92ZU5vZGUgPSBmdW5jdGlvbiAobm9kZSkge1xuICBpZiAobm9kZS5saXN0ICE9PSB0aGlzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdyZW1vdmluZyBub2RlIHdoaWNoIGRvZXMgbm90IGJlbG9uZyB0byB0aGlzIGxpc3QnKVxuICB9XG5cbiAgdmFyIG5leHQgPSBub2RlLm5leHRcbiAgdmFyIHByZXYgPSBub2RlLnByZXZcblxuICBpZiAobmV4dCkge1xuICAgIG5leHQucHJldiA9IHByZXZcbiAgfVxuXG4gIGlmIChwcmV2KSB7XG4gICAgcHJldi5uZXh0ID0gbmV4dFxuICB9XG5cbiAgaWYgKG5vZGUgPT09IHRoaXMuaGVhZCkge1xuICAgIHRoaXMuaGVhZCA9IG5leHRcbiAgfVxuICBpZiAobm9kZSA9PT0gdGhpcy50YWlsKSB7XG4gICAgdGhpcy50YWlsID0gcHJldlxuICB9XG5cbiAgbm9kZS5saXN0Lmxlbmd0aC0tXG4gIG5vZGUubmV4dCA9IG51bGxcbiAgbm9kZS5wcmV2ID0gbnVsbFxuICBub2RlLmxpc3QgPSBudWxsXG5cbiAgcmV0dXJuIG5leHRcbn1cblxuWWFsbGlzdC5wcm90b3R5cGUudW5zaGlmdE5vZGUgPSBmdW5jdGlvbiAobm9kZSkge1xuICBpZiAobm9kZSA9PT0gdGhpcy5oZWFkKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBpZiAobm9kZS5saXN0KSB7XG4gICAgbm9kZS5saXN0LnJlbW92ZU5vZGUobm9kZSlcbiAgfVxuXG4gIHZhciBoZWFkID0gdGhpcy5oZWFkXG4gIG5vZGUubGlzdCA9IHRoaXNcbiAgbm9kZS5uZXh0ID0gaGVhZFxuICBpZiAoaGVhZCkge1xuICAgIGhlYWQucHJldiA9IG5vZGVcbiAgfVxuXG4gIHRoaXMuaGVhZCA9IG5vZGVcbiAgaWYgKCF0aGlzLnRhaWwpIHtcbiAgICB0aGlzLnRhaWwgPSBub2RlXG4gIH1cbiAgdGhpcy5sZW5ndGgrK1xufVxuXG5ZYWxsaXN0LnByb3RvdHlwZS5wdXNoTm9kZSA9IGZ1bmN0aW9uIChub2RlKSB7XG4gIGlmIChub2RlID09PSB0aGlzLnRhaWwpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIGlmIChub2RlLmxpc3QpIHtcbiAgICBub2RlLmxpc3QucmVtb3ZlTm9kZShub2RlKVxuICB9XG5cbiAgdmFyIHRhaWwgPSB0aGlzLnRhaWxcbiAgbm9kZS5saXN0ID0gdGhpc1xuICBub2RlLnByZXYgPSB0YWlsXG4gIGlmICh0YWlsKSB7XG4gICAgdGFpbC5uZXh0ID0gbm9kZVxuICB9XG5cbiAgdGhpcy50YWlsID0gbm9kZVxuICBpZiAoIXRoaXMuaGVhZCkge1xuICAgIHRoaXMuaGVhZCA9IG5vZGVcbiAgfVxuICB0aGlzLmxlbmd0aCsrXG59XG5cbllhbGxpc3QucHJvdG90eXBlLnB1c2ggPSBmdW5jdGlvbiAoKSB7XG4gIGZvciAodmFyIGkgPSAwLCBsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIHB1c2godGhpcywgYXJndW1lbnRzW2ldKVxuICB9XG4gIHJldHVybiB0aGlzLmxlbmd0aFxufVxuXG5ZYWxsaXN0LnByb3RvdHlwZS51bnNoaWZ0ID0gZnVuY3Rpb24gKCkge1xuICBmb3IgKHZhciBpID0gMCwgbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICB1bnNoaWZ0KHRoaXMsIGFyZ3VtZW50c1tpXSlcbiAgfVxuICByZXR1cm4gdGhpcy5sZW5ndGhcbn1cblxuWWFsbGlzdC5wcm90b3R5cGUucG9wID0gZnVuY3Rpb24gKCkge1xuICBpZiAoIXRoaXMudGFpbCkge1xuICAgIHJldHVybiB1bmRlZmluZWRcbiAgfVxuXG4gIHZhciByZXMgPSB0aGlzLnRhaWwudmFsdWVcbiAgdGhpcy50YWlsID0gdGhpcy50YWlsLnByZXZcbiAgaWYgKHRoaXMudGFpbCkge1xuICAgIHRoaXMudGFpbC5uZXh0ID0gbnVsbFxuICB9IGVsc2Uge1xuICAgIHRoaXMuaGVhZCA9IG51bGxcbiAgfVxuICB0aGlzLmxlbmd0aC0tXG4gIHJldHVybiByZXNcbn1cblxuWWFsbGlzdC5wcm90b3R5cGUuc2hpZnQgPSBmdW5jdGlvbiAoKSB7XG4gIGlmICghdGhpcy5oZWFkKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZFxuICB9XG5cbiAgdmFyIHJlcyA9IHRoaXMuaGVhZC52YWx1ZVxuICB0aGlzLmhlYWQgPSB0aGlzLmhlYWQubmV4dFxuICBpZiAodGhpcy5oZWFkKSB7XG4gICAgdGhpcy5oZWFkLnByZXYgPSBudWxsXG4gIH0gZWxzZSB7XG4gICAgdGhpcy50YWlsID0gbnVsbFxuICB9XG4gIHRoaXMubGVuZ3RoLS1cbiAgcmV0dXJuIHJlc1xufVxuXG5ZYWxsaXN0LnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24gKGZuLCB0aGlzcCkge1xuICB0aGlzcCA9IHRoaXNwIHx8IHRoaXNcbiAgZm9yICh2YXIgd2Fsa2VyID0gdGhpcy5oZWFkLCBpID0gMDsgd2Fsa2VyICE9PSBudWxsOyBpKyspIHtcbiAgICBmbi5jYWxsKHRoaXNwLCB3YWxrZXIudmFsdWUsIGksIHRoaXMpXG4gICAgd2Fsa2VyID0gd2Fsa2VyLm5leHRcbiAgfVxufVxuXG5ZYWxsaXN0LnByb3RvdHlwZS5mb3JFYWNoUmV2ZXJzZSA9IGZ1bmN0aW9uIChmbiwgdGhpc3ApIHtcbiAgdGhpc3AgPSB0aGlzcCB8fCB0aGlzXG4gIGZvciAodmFyIHdhbGtlciA9IHRoaXMudGFpbCwgaSA9IHRoaXMubGVuZ3RoIC0gMTsgd2Fsa2VyICE9PSBudWxsOyBpLS0pIHtcbiAgICBmbi5jYWxsKHRoaXNwLCB3YWxrZXIudmFsdWUsIGksIHRoaXMpXG4gICAgd2Fsa2VyID0gd2Fsa2VyLnByZXZcbiAgfVxufVxuXG5ZYWxsaXN0LnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAobikge1xuICBmb3IgKHZhciBpID0gMCwgd2Fsa2VyID0gdGhpcy5oZWFkOyB3YWxrZXIgIT09IG51bGwgJiYgaSA8IG47IGkrKykge1xuICAgIC8vIGFib3J0IG91dCBvZiB0aGUgbGlzdCBlYXJseSBpZiB3ZSBoaXQgYSBjeWNsZVxuICAgIHdhbGtlciA9IHdhbGtlci5uZXh0XG4gIH1cbiAgaWYgKGkgPT09IG4gJiYgd2Fsa2VyICE9PSBudWxsKSB7XG4gICAgcmV0dXJuIHdhbGtlci52YWx1ZVxuICB9XG59XG5cbllhbGxpc3QucHJvdG90eXBlLmdldFJldmVyc2UgPSBmdW5jdGlvbiAobikge1xuICBmb3IgKHZhciBpID0gMCwgd2Fsa2VyID0gdGhpcy50YWlsOyB3YWxrZXIgIT09IG51bGwgJiYgaSA8IG47IGkrKykge1xuICAgIC8vIGFib3J0IG91dCBvZiB0aGUgbGlzdCBlYXJseSBpZiB3ZSBoaXQgYSBjeWNsZVxuICAgIHdhbGtlciA9IHdhbGtlci5wcmV2XG4gIH1cbiAgaWYgKGkgPT09IG4gJiYgd2Fsa2VyICE9PSBudWxsKSB7XG4gICAgcmV0dXJuIHdhbGtlci52YWx1ZVxuICB9XG59XG5cbllhbGxpc3QucHJvdG90eXBlLm1hcCA9IGZ1bmN0aW9uIChmbiwgdGhpc3ApIHtcbiAgdGhpc3AgPSB0aGlzcCB8fCB0aGlzXG4gIHZhciByZXMgPSBuZXcgWWFsbGlzdCgpXG4gIGZvciAodmFyIHdhbGtlciA9IHRoaXMuaGVhZDsgd2Fsa2VyICE9PSBudWxsOykge1xuICAgIHJlcy5wdXNoKGZuLmNhbGwodGhpc3AsIHdhbGtlci52YWx1ZSwgdGhpcykpXG4gICAgd2Fsa2VyID0gd2Fsa2VyLm5leHRcbiAgfVxuICByZXR1cm4gcmVzXG59XG5cbllhbGxpc3QucHJvdG90eXBlLm1hcFJldmVyc2UgPSBmdW5jdGlvbiAoZm4sIHRoaXNwKSB7XG4gIHRoaXNwID0gdGhpc3AgfHwgdGhpc1xuICB2YXIgcmVzID0gbmV3IFlhbGxpc3QoKVxuICBmb3IgKHZhciB3YWxrZXIgPSB0aGlzLnRhaWw7IHdhbGtlciAhPT0gbnVsbDspIHtcbiAgICByZXMucHVzaChmbi5jYWxsKHRoaXNwLCB3YWxrZXIudmFsdWUsIHRoaXMpKVxuICAgIHdhbGtlciA9IHdhbGtlci5wcmV2XG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG5ZYWxsaXN0LnByb3RvdHlwZS5yZWR1Y2UgPSBmdW5jdGlvbiAoZm4sIGluaXRpYWwpIHtcbiAgdmFyIGFjY1xuICB2YXIgd2Fsa2VyID0gdGhpcy5oZWFkXG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuICAgIGFjYyA9IGluaXRpYWxcbiAgfSBlbHNlIGlmICh0aGlzLmhlYWQpIHtcbiAgICB3YWxrZXIgPSB0aGlzLmhlYWQubmV4dFxuICAgIGFjYyA9IHRoaXMuaGVhZC52YWx1ZVxuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1JlZHVjZSBvZiBlbXB0eSBsaXN0IHdpdGggbm8gaW5pdGlhbCB2YWx1ZScpXG4gIH1cblxuICBmb3IgKHZhciBpID0gMDsgd2Fsa2VyICE9PSBudWxsOyBpKyspIHtcbiAgICBhY2MgPSBmbihhY2MsIHdhbGtlci52YWx1ZSwgaSlcbiAgICB3YWxrZXIgPSB3YWxrZXIubmV4dFxuICB9XG5cbiAgcmV0dXJuIGFjY1xufVxuXG5ZYWxsaXN0LnByb3RvdHlwZS5yZWR1Y2VSZXZlcnNlID0gZnVuY3Rpb24gKGZuLCBpbml0aWFsKSB7XG4gIHZhciBhY2NcbiAgdmFyIHdhbGtlciA9IHRoaXMudGFpbFxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICBhY2MgPSBpbml0aWFsXG4gIH0gZWxzZSBpZiAodGhpcy50YWlsKSB7XG4gICAgd2Fsa2VyID0gdGhpcy50YWlsLnByZXZcbiAgICBhY2MgPSB0aGlzLnRhaWwudmFsdWVcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdSZWR1Y2Ugb2YgZW1wdHkgbGlzdCB3aXRoIG5vIGluaXRpYWwgdmFsdWUnKVxuICB9XG5cbiAgZm9yICh2YXIgaSA9IHRoaXMubGVuZ3RoIC0gMTsgd2Fsa2VyICE9PSBudWxsOyBpLS0pIHtcbiAgICBhY2MgPSBmbihhY2MsIHdhbGtlci52YWx1ZSwgaSlcbiAgICB3YWxrZXIgPSB3YWxrZXIucHJldlxuICB9XG5cbiAgcmV0dXJuIGFjY1xufVxuXG5ZYWxsaXN0LnByb3RvdHlwZS50b0FycmF5ID0gZnVuY3Rpb24gKCkge1xuICB2YXIgYXJyID0gbmV3IEFycmF5KHRoaXMubGVuZ3RoKVxuICBmb3IgKHZhciBpID0gMCwgd2Fsa2VyID0gdGhpcy5oZWFkOyB3YWxrZXIgIT09IG51bGw7IGkrKykge1xuICAgIGFycltpXSA9IHdhbGtlci52YWx1ZVxuICAgIHdhbGtlciA9IHdhbGtlci5uZXh0XG4gIH1cbiAgcmV0dXJuIGFyclxufVxuXG5ZYWxsaXN0LnByb3RvdHlwZS50b0FycmF5UmV2ZXJzZSA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGFyciA9IG5ldyBBcnJheSh0aGlzLmxlbmd0aClcbiAgZm9yICh2YXIgaSA9IDAsIHdhbGtlciA9IHRoaXMudGFpbDsgd2Fsa2VyICE9PSBudWxsOyBpKyspIHtcbiAgICBhcnJbaV0gPSB3YWxrZXIudmFsdWVcbiAgICB3YWxrZXIgPSB3YWxrZXIucHJldlxuICB9XG4gIHJldHVybiBhcnJcbn1cblxuWWFsbGlzdC5wcm90b3R5cGUuc2xpY2UgPSBmdW5jdGlvbiAoZnJvbSwgdG8pIHtcbiAgdG8gPSB0byB8fCB0aGlzLmxlbmd0aFxuICBpZiAodG8gPCAwKSB7XG4gICAgdG8gKz0gdGhpcy5sZW5ndGhcbiAgfVxuICBmcm9tID0gZnJvbSB8fCAwXG4gIGlmIChmcm9tIDwgMCkge1xuICAgIGZyb20gKz0gdGhpcy5sZW5ndGhcbiAgfVxuICB2YXIgcmV0ID0gbmV3IFlhbGxpc3QoKVxuICBpZiAodG8gPCBmcm9tIHx8IHRvIDwgMCkge1xuICAgIHJldHVybiByZXRcbiAgfVxuICBpZiAoZnJvbSA8IDApIHtcbiAgICBmcm9tID0gMFxuICB9XG4gIGlmICh0byA+IHRoaXMubGVuZ3RoKSB7XG4gICAgdG8gPSB0aGlzLmxlbmd0aFxuICB9XG4gIGZvciAodmFyIGkgPSAwLCB3YWxrZXIgPSB0aGlzLmhlYWQ7IHdhbGtlciAhPT0gbnVsbCAmJiBpIDwgZnJvbTsgaSsrKSB7XG4gICAgd2Fsa2VyID0gd2Fsa2VyLm5leHRcbiAgfVxuICBmb3IgKDsgd2Fsa2VyICE9PSBudWxsICYmIGkgPCB0bzsgaSsrLCB3YWxrZXIgPSB3YWxrZXIubmV4dCkge1xuICAgIHJldC5wdXNoKHdhbGtlci52YWx1ZSlcbiAgfVxuICByZXR1cm4gcmV0XG59XG5cbllhbGxpc3QucHJvdG90eXBlLnNsaWNlUmV2ZXJzZSA9IGZ1bmN0aW9uIChmcm9tLCB0bykge1xuICB0byA9IHRvIHx8IHRoaXMubGVuZ3RoXG4gIGlmICh0byA8IDApIHtcbiAgICB0byArPSB0aGlzLmxlbmd0aFxuICB9XG4gIGZyb20gPSBmcm9tIHx8IDBcbiAgaWYgKGZyb20gPCAwKSB7XG4gICAgZnJvbSArPSB0aGlzLmxlbmd0aFxuICB9XG4gIHZhciByZXQgPSBuZXcgWWFsbGlzdCgpXG4gIGlmICh0byA8IGZyb20gfHwgdG8gPCAwKSB7XG4gICAgcmV0dXJuIHJldFxuICB9XG4gIGlmIChmcm9tIDwgMCkge1xuICAgIGZyb20gPSAwXG4gIH1cbiAgaWYgKHRvID4gdGhpcy5sZW5ndGgpIHtcbiAgICB0byA9IHRoaXMubGVuZ3RoXG4gIH1cbiAgZm9yICh2YXIgaSA9IHRoaXMubGVuZ3RoLCB3YWxrZXIgPSB0aGlzLnRhaWw7IHdhbGtlciAhPT0gbnVsbCAmJiBpID4gdG87IGktLSkge1xuICAgIHdhbGtlciA9IHdhbGtlci5wcmV2XG4gIH1cbiAgZm9yICg7IHdhbGtlciAhPT0gbnVsbCAmJiBpID4gZnJvbTsgaS0tLCB3YWxrZXIgPSB3YWxrZXIucHJldikge1xuICAgIHJldC5wdXNoKHdhbGtlci52YWx1ZSlcbiAgfVxuICByZXR1cm4gcmV0XG59XG5cbllhbGxpc3QucHJvdG90eXBlLnNwbGljZSA9IGZ1bmN0aW9uIChzdGFydCwgZGVsZXRlQ291bnQsIC4uLm5vZGVzKSB7XG4gIGlmIChzdGFydCA+IHRoaXMubGVuZ3RoKSB7XG4gICAgc3RhcnQgPSB0aGlzLmxlbmd0aCAtIDFcbiAgfVxuICBpZiAoc3RhcnQgPCAwKSB7XG4gICAgc3RhcnQgPSB0aGlzLmxlbmd0aCArIHN0YXJ0O1xuICB9XG5cbiAgZm9yICh2YXIgaSA9IDAsIHdhbGtlciA9IHRoaXMuaGVhZDsgd2Fsa2VyICE9PSBudWxsICYmIGkgPCBzdGFydDsgaSsrKSB7XG4gICAgd2Fsa2VyID0gd2Fsa2VyLm5leHRcbiAgfVxuXG4gIHZhciByZXQgPSBbXVxuICBmb3IgKHZhciBpID0gMDsgd2Fsa2VyICYmIGkgPCBkZWxldGVDb3VudDsgaSsrKSB7XG4gICAgcmV0LnB1c2god2Fsa2VyLnZhbHVlKVxuICAgIHdhbGtlciA9IHRoaXMucmVtb3ZlTm9kZSh3YWxrZXIpXG4gIH1cbiAgaWYgKHdhbGtlciA9PT0gbnVsbCkge1xuICAgIHdhbGtlciA9IHRoaXMudGFpbFxuICB9XG5cbiAgaWYgKHdhbGtlciAhPT0gdGhpcy5oZWFkICYmIHdhbGtlciAhPT0gdGhpcy50YWlsKSB7XG4gICAgd2Fsa2VyID0gd2Fsa2VyLnByZXZcbiAgfVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICB3YWxrZXIgPSBpbnNlcnQodGhpcywgd2Fsa2VyLCBub2Rlc1tpXSlcbiAgfVxuICByZXR1cm4gcmV0O1xufVxuXG5ZYWxsaXN0LnByb3RvdHlwZS5yZXZlcnNlID0gZnVuY3Rpb24gKCkge1xuICB2YXIgaGVhZCA9IHRoaXMuaGVhZFxuICB2YXIgdGFpbCA9IHRoaXMudGFpbFxuICBmb3IgKHZhciB3YWxrZXIgPSBoZWFkOyB3YWxrZXIgIT09IG51bGw7IHdhbGtlciA9IHdhbGtlci5wcmV2KSB7XG4gICAgdmFyIHAgPSB3YWxrZXIucHJldlxuICAgIHdhbGtlci5wcmV2ID0gd2Fsa2VyLm5leHRcbiAgICB3YWxrZXIubmV4dCA9IHBcbiAgfVxuICB0aGlzLmhlYWQgPSB0YWlsXG4gIHRoaXMudGFpbCA9IGhlYWRcbiAgcmV0dXJuIHRoaXNcbn1cblxuZnVuY3Rpb24gaW5zZXJ0IChzZWxmLCBub2RlLCB2YWx1ZSkge1xuICB2YXIgaW5zZXJ0ZWQgPSBub2RlID09PSBzZWxmLmhlYWQgP1xuICAgIG5ldyBOb2RlKHZhbHVlLCBudWxsLCBub2RlLCBzZWxmKSA6XG4gICAgbmV3IE5vZGUodmFsdWUsIG5vZGUsIG5vZGUubmV4dCwgc2VsZilcblxuICBpZiAoaW5zZXJ0ZWQubmV4dCA9PT0gbnVsbCkge1xuICAgIHNlbGYudGFpbCA9IGluc2VydGVkXG4gIH1cbiAgaWYgKGluc2VydGVkLnByZXYgPT09IG51bGwpIHtcbiAgICBzZWxmLmhlYWQgPSBpbnNlcnRlZFxuICB9XG5cbiAgc2VsZi5sZW5ndGgrK1xuXG4gIHJldHVybiBpbnNlcnRlZFxufVxuXG5mdW5jdGlvbiBwdXNoIChzZWxmLCBpdGVtKSB7XG4gIHNlbGYudGFpbCA9IG5ldyBOb2RlKGl0ZW0sIHNlbGYudGFpbCwgbnVsbCwgc2VsZilcbiAgaWYgKCFzZWxmLmhlYWQpIHtcbiAgICBzZWxmLmhlYWQgPSBzZWxmLnRhaWxcbiAgfVxuICBzZWxmLmxlbmd0aCsrXG59XG5cbmZ1bmN0aW9uIHVuc2hpZnQgKHNlbGYsIGl0ZW0pIHtcbiAgc2VsZi5oZWFkID0gbmV3IE5vZGUoaXRlbSwgbnVsbCwgc2VsZi5oZWFkLCBzZWxmKVxuICBpZiAoIXNlbGYudGFpbCkge1xuICAgIHNlbGYudGFpbCA9IHNlbGYuaGVhZFxuICB9XG4gIHNlbGYubGVuZ3RoKytcbn1cblxuZnVuY3Rpb24gTm9kZSAodmFsdWUsIHByZXYsIG5leHQsIGxpc3QpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIE5vZGUpKSB7XG4gICAgcmV0dXJuIG5ldyBOb2RlKHZhbHVlLCBwcmV2LCBuZXh0LCBsaXN0KVxuICB9XG5cbiAgdGhpcy5saXN0ID0gbGlzdFxuICB0aGlzLnZhbHVlID0gdmFsdWVcblxuICBpZiAocHJldikge1xuICAgIHByZXYubmV4dCA9IHRoaXNcbiAgICB0aGlzLnByZXYgPSBwcmV2XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5wcmV2ID0gbnVsbFxuICB9XG5cbiAgaWYgKG5leHQpIHtcbiAgICBuZXh0LnByZXYgPSB0aGlzXG4gICAgdGhpcy5uZXh0ID0gbmV4dFxuICB9IGVsc2Uge1xuICAgIHRoaXMubmV4dCA9IG51bGxcbiAgfVxufVxuXG50cnkge1xuICAvLyBhZGQgaWYgc3VwcG9ydCBmb3IgU3ltYm9sLml0ZXJhdG9yIGlzIHByZXNlbnRcbiAgcmVxdWlyZSgnLi9pdGVyYXRvci5qcycpKFlhbGxpc3QpXG59IGNhdGNoIChlcikge31cbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jbGFzcyBCdWZmZXJDb21wb3NlciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImNodW5rc1wiLCB7XG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogW11cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHdyaXRlKGJ1ZmZlcikge1xuICAgICAgICB0aGlzLmNodW5rcy5wdXNoKGJ1ZmZlcik7XG4gICAgfVxuICAgIGVuZChidWZmZXIpIHtcbiAgICAgICAgdGhpcy53cml0ZShidWZmZXIpO1xuICAgICAgICByZXR1cm4gQnVmZmVyLmNvbmNhdCh0aGlzLmNodW5rcy5zcGxpY2UoMCkpO1xuICAgIH1cbiAgICByZXNldCgpIHtcbiAgICAgICAgdGhpcy5jaHVua3MgPSBbXTtcbiAgICB9XG59XG5leHBvcnRzLmRlZmF1bHQgPSBCdWZmZXJDb21wb3NlcjtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBzdHJpbmdfZGVjb2Rlcl8xID0gcmVxdWlyZShcInN0cmluZ19kZWNvZGVyXCIpO1xuY2xhc3MgU3RyaW5nQ29tcG9zZXIge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgXCJkZWNvZGVyXCIsIHtcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiBuZXcgc3RyaW5nX2RlY29kZXJfMS5TdHJpbmdEZWNvZGVyKClcbiAgICAgICAgfSk7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcInN0cmluZ1wiLCB7XG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogJydcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHdyaXRlKGJ1ZmZlcikge1xuICAgICAgICB0aGlzLnN0cmluZyArPSB0aGlzLmRlY29kZXIud3JpdGUoYnVmZmVyKTtcbiAgICB9XG4gICAgZW5kKGJ1ZmZlcikge1xuICAgICAgICBjb25zdCBzdHJpbmcgPSB0aGlzLnN0cmluZyArIHRoaXMuZGVjb2Rlci5lbmQoYnVmZmVyKTtcbiAgICAgICAgdGhpcy5zdHJpbmcgPSAnJztcbiAgICAgICAgcmV0dXJuIHN0cmluZztcbiAgICB9XG4gICAgcmVzZXQoKSB7XG4gICAgICAgIHRoaXMuc3RyaW5nID0gJyc7XG4gICAgfVxufVxuZXhwb3J0cy5kZWZhdWx0ID0gU3RyaW5nQ29tcG9zZXI7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgZXJyb3JzXzEgPSByZXF1aXJlKFwiLi4vLi4vZXJyb3JzXCIpO1xuY29uc3QgYnVmZmVyXzEgPSByZXF1aXJlKFwiLi9jb21wb3NlcnMvYnVmZmVyXCIpO1xuY29uc3Qgc3RyaW5nXzEgPSByZXF1aXJlKFwiLi9jb21wb3NlcnMvc3RyaW5nXCIpO1xuLy8gUkVTUDIgc3BlY2lmaWNhdGlvblxuLy8gaHR0cHM6Ly9yZWRpcy5pby90b3BpY3MvcHJvdG9jb2xcbnZhciBUeXBlcztcbihmdW5jdGlvbiAoVHlwZXMpIHtcbiAgICBUeXBlc1tUeXBlc1tcIlNJTVBMRV9TVFJJTkdcIl0gPSA0M10gPSBcIlNJTVBMRV9TVFJJTkdcIjtcbiAgICBUeXBlc1tUeXBlc1tcIkVSUk9SXCJdID0gNDVdID0gXCJFUlJPUlwiO1xuICAgIFR5cGVzW1R5cGVzW1wiSU5URUdFUlwiXSA9IDU4XSA9IFwiSU5URUdFUlwiO1xuICAgIFR5cGVzW1R5cGVzW1wiQlVMS19TVFJJTkdcIl0gPSAzNl0gPSBcIkJVTEtfU1RSSU5HXCI7XG4gICAgVHlwZXNbVHlwZXNbXCJBUlJBWVwiXSA9IDQyXSA9IFwiQVJSQVlcIjsgLy8gKlxufSkoVHlwZXMgfHwgKFR5cGVzID0ge30pKTtcbnZhciBBU0NJSTtcbihmdW5jdGlvbiAoQVNDSUkpIHtcbiAgICBBU0NJSVtBU0NJSVtcIkNSXCJdID0gMTNdID0gXCJDUlwiO1xuICAgIEFTQ0lJW0FTQ0lJW1wiWkVST1wiXSA9IDQ4XSA9IFwiWkVST1wiO1xuICAgIEFTQ0lJW0FTQ0lJW1wiTUlOVVNcIl0gPSA0NV0gPSBcIk1JTlVTXCI7XG59KShBU0NJSSB8fCAoQVNDSUkgPSB7fSkpO1xuLy8gVXNpbmcgVHlwZVNjcmlwdCBgcHJpdmF0ZWAgYW5kIG5vdCB0aGUgYnVpbGQtaW4gYCNgIHRvIGF2b2lkIF9fY2xhc3NQcml2YXRlRmllbGRHZXQgYW5kIF9fY2xhc3NQcml2YXRlRmllbGRTZXRcbmNsYXNzIFJFU1AyRGVjb2RlciB7XG4gICAgY29uc3RydWN0b3Iob3B0aW9ucykge1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgXCJvcHRpb25zXCIsIHtcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiBvcHRpb25zXG4gICAgICAgIH0pO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgXCJjdXJzb3JcIiwge1xuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IDBcbiAgICAgICAgfSk7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcInR5cGVcIiwge1xuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IHZvaWQgMFxuICAgICAgICB9KTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIFwiYnVmZmVyQ29tcG9zZXJcIiwge1xuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IG5ldyBidWZmZXJfMS5kZWZhdWx0KClcbiAgICAgICAgfSk7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcInN0cmluZ0NvbXBvc2VyXCIsIHtcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiBuZXcgc3RyaW5nXzEuZGVmYXVsdCgpXG4gICAgICAgIH0pO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgXCJjdXJyZW50U3RyaW5nQ29tcG9zZXJcIiwge1xuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IHRoaXMuc3RyaW5nQ29tcG9zZXJcbiAgICAgICAgfSk7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImludGVnZXJcIiwge1xuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IDBcbiAgICAgICAgfSk7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImlzTmVnYXRpdmVJbnRlZ2VyXCIsIHtcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDBcbiAgICAgICAgfSk7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImJ1bGtTdHJpbmdSZW1haW5pbmdMZW5ndGhcIiwge1xuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IHZvaWQgMFxuICAgICAgICB9KTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIFwiYXJyYXlzSW5Qcm9jZXNzXCIsIHtcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiBbXVxuICAgICAgICB9KTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIFwiaW5pdGlhbGl6ZUFycmF5XCIsIHtcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiBmYWxzZVxuICAgICAgICB9KTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIFwiYXJyYXlJdGVtVHlwZVwiLCB7XG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogdm9pZCAwXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXNldCgpIHtcbiAgICAgICAgdGhpcy5jdXJzb3IgPSAwO1xuICAgICAgICB0aGlzLnR5cGUgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuYnVmZmVyQ29tcG9zZXIucmVzZXQoKTtcbiAgICAgICAgdGhpcy5zdHJpbmdDb21wb3Nlci5yZXNldCgpO1xuICAgICAgICB0aGlzLmN1cnJlbnRTdHJpbmdDb21wb3NlciA9IHRoaXMuc3RyaW5nQ29tcG9zZXI7XG4gICAgfVxuICAgIHdyaXRlKGNodW5rKSB7XG4gICAgICAgIHdoaWxlICh0aGlzLmN1cnNvciA8IGNodW5rLmxlbmd0aCkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLnR5cGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRTdHJpbmdDb21wb3NlciA9IHRoaXMub3B0aW9ucy5yZXR1cm5TdHJpbmdzQXNCdWZmZXJzKCkgP1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1ZmZlckNvbXBvc2VyIDpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdHJpbmdDb21wb3NlcjtcbiAgICAgICAgICAgICAgICB0aGlzLnR5cGUgPSBjaHVua1t0aGlzLmN1cnNvcl07XG4gICAgICAgICAgICAgICAgaWYgKCsrdGhpcy5jdXJzb3IgPj0gY2h1bmsubGVuZ3RoKVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHJlcGx5ID0gdGhpcy5wYXJzZVR5cGUoY2h1bmssIHRoaXMudHlwZSk7XG4gICAgICAgICAgICBpZiAocmVwbHkgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIHRoaXMudHlwZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5vblJlcGx5KHJlcGx5KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmN1cnNvciAtPSBjaHVuay5sZW5ndGg7XG4gICAgfVxuICAgIHBhcnNlVHlwZShjaHVuaywgdHlwZSwgYXJyYXlzVG9LZWVwKSB7XG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgY2FzZSBUeXBlcy5TSU1QTEVfU1RSSU5HOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcnNlU2ltcGxlU3RyaW5nKGNodW5rKTtcbiAgICAgICAgICAgIGNhc2UgVHlwZXMuRVJST1I6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VFcnJvcihjaHVuayk7XG4gICAgICAgICAgICBjYXNlIFR5cGVzLklOVEVHRVI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VJbnRlZ2VyKGNodW5rKTtcbiAgICAgICAgICAgIGNhc2UgVHlwZXMuQlVMS19TVFJJTkc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VCdWxrU3RyaW5nKGNodW5rKTtcbiAgICAgICAgICAgIGNhc2UgVHlwZXMuQVJSQVk6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VBcnJheShjaHVuaywgYXJyYXlzVG9LZWVwKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjb21wb3NlKGNodW5rLCBjb21wb3Nlcikge1xuICAgICAgICBmb3IgKGxldCBpID0gdGhpcy5jdXJzb3I7IGkgPCBjaHVuay5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGNodW5rW2ldID09PSBBU0NJSS5DUikge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlcGx5ID0gY29tcG9zZXIuZW5kKGNodW5rLnN1YmFycmF5KHRoaXMuY3Vyc29yLCBpKSk7XG4gICAgICAgICAgICAgICAgdGhpcy5jdXJzb3IgPSBpICsgMjtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVwbHk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdG9Xcml0ZSA9IGNodW5rLnN1YmFycmF5KHRoaXMuY3Vyc29yKTtcbiAgICAgICAgY29tcG9zZXIud3JpdGUodG9Xcml0ZSk7XG4gICAgICAgIHRoaXMuY3Vyc29yID0gY2h1bmsubGVuZ3RoO1xuICAgIH1cbiAgICBwYXJzZVNpbXBsZVN0cmluZyhjaHVuaykge1xuICAgICAgICByZXR1cm4gdGhpcy5jb21wb3NlKGNodW5rLCB0aGlzLmN1cnJlbnRTdHJpbmdDb21wb3Nlcik7XG4gICAgfVxuICAgIHBhcnNlRXJyb3IoY2h1bmspIHtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IHRoaXMuY29tcG9zZShjaHVuaywgdGhpcy5zdHJpbmdDb21wb3Nlcik7XG4gICAgICAgIGlmIChtZXNzYWdlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgZXJyb3JzXzEuRXJyb3JSZXBseShtZXNzYWdlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBwYXJzZUludGVnZXIoY2h1bmspIHtcbiAgICAgICAgaWYgKHRoaXMuaXNOZWdhdGl2ZUludGVnZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5pc05lZ2F0aXZlSW50ZWdlciA9IGNodW5rW3RoaXMuY3Vyc29yXSA9PT0gQVNDSUkuTUlOVVM7XG4gICAgICAgICAgICBpZiAodGhpcy5pc05lZ2F0aXZlSW50ZWdlciAmJiArK3RoaXMuY3Vyc29yID09PSBjaHVuay5sZW5ndGgpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGRvIHtcbiAgICAgICAgICAgIGNvbnN0IGJ5dGUgPSBjaHVua1t0aGlzLmN1cnNvcl07XG4gICAgICAgICAgICBpZiAoYnl0ZSA9PT0gQVNDSUkuQ1IpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbnRlZ2VyID0gdGhpcy5pc05lZ2F0aXZlSW50ZWdlciA/IC10aGlzLmludGVnZXIgOiB0aGlzLmludGVnZXI7XG4gICAgICAgICAgICAgICAgdGhpcy5pbnRlZ2VyID0gMDtcbiAgICAgICAgICAgICAgICB0aGlzLmlzTmVnYXRpdmVJbnRlZ2VyID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIHRoaXMuY3Vyc29yICs9IDI7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGludGVnZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmludGVnZXIgPSB0aGlzLmludGVnZXIgKiAxMCArIGJ5dGUgLSBBU0NJSS5aRVJPO1xuICAgICAgICB9IHdoaWxlICgrK3RoaXMuY3Vyc29yIDwgY2h1bmsubGVuZ3RoKTtcbiAgICB9XG4gICAgcGFyc2VCdWxrU3RyaW5nKGNodW5rKSB7XG4gICAgICAgIGlmICh0aGlzLmJ1bGtTdHJpbmdSZW1haW5pbmdMZW5ndGggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uc3QgbGVuZ3RoID0gdGhpcy5wYXJzZUludGVnZXIoY2h1bmspO1xuICAgICAgICAgICAgaWYgKGxlbmd0aCA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGlmIChsZW5ndGggPT09IC0xKVxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgdGhpcy5idWxrU3RyaW5nUmVtYWluaW5nTGVuZ3RoID0gbGVuZ3RoO1xuICAgICAgICAgICAgaWYgKHRoaXMuY3Vyc29yID49IGNodW5rLmxlbmd0aClcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZW5kID0gdGhpcy5jdXJzb3IgKyB0aGlzLmJ1bGtTdHJpbmdSZW1haW5pbmdMZW5ndGg7XG4gICAgICAgIGlmIChjaHVuay5sZW5ndGggPj0gZW5kKSB7XG4gICAgICAgICAgICBjb25zdCByZXBseSA9IHRoaXMuY3VycmVudFN0cmluZ0NvbXBvc2VyLmVuZChjaHVuay5zdWJhcnJheSh0aGlzLmN1cnNvciwgZW5kKSk7XG4gICAgICAgICAgICB0aGlzLmJ1bGtTdHJpbmdSZW1haW5pbmdMZW5ndGggPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB0aGlzLmN1cnNvciA9IGVuZCArIDI7XG4gICAgICAgICAgICByZXR1cm4gcmVwbHk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdG9Xcml0ZSA9IGNodW5rLnN1YmFycmF5KHRoaXMuY3Vyc29yKTtcbiAgICAgICAgdGhpcy5jdXJyZW50U3RyaW5nQ29tcG9zZXIud3JpdGUodG9Xcml0ZSk7XG4gICAgICAgIHRoaXMuYnVsa1N0cmluZ1JlbWFpbmluZ0xlbmd0aCAtPSB0b1dyaXRlLmxlbmd0aDtcbiAgICAgICAgdGhpcy5jdXJzb3IgPSBjaHVuay5sZW5ndGg7XG4gICAgfVxuICAgIHBhcnNlQXJyYXkoY2h1bmssIGFycmF5c1RvS2VlcCA9IDApIHtcbiAgICAgICAgaWYgKHRoaXMuaW5pdGlhbGl6ZUFycmF5IHx8IHRoaXMuYXJyYXlzSW5Qcm9jZXNzLmxlbmd0aCA9PT0gYXJyYXlzVG9LZWVwKSB7XG4gICAgICAgICAgICBjb25zdCBsZW5ndGggPSB0aGlzLnBhcnNlSW50ZWdlcihjaHVuayk7XG4gICAgICAgICAgICBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmluaXRpYWxpemVBcnJheSA9IHRydWU7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuaW5pdGlhbGl6ZUFycmF5ID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmFycmF5SXRlbVR5cGUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBpZiAobGVuZ3RoID09PSAtMSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnJldHVybkFycmF5UmVwbHkobnVsbCwgYXJyYXlzVG9LZWVwLCBjaHVuayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChsZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5yZXR1cm5BcnJheVJlcGx5KFtdLCBhcnJheXNUb0tlZXAsIGNodW5rKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuYXJyYXlzSW5Qcm9jZXNzLnB1c2goe1xuICAgICAgICAgICAgICAgIGFycmF5OiBuZXcgQXJyYXkobGVuZ3RoKSxcbiAgICAgICAgICAgICAgICBwdXNoQ291bnRlcjogMFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgd2hpbGUgKHRoaXMuY3Vyc29yIDwgY2h1bmsubGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuYXJyYXlJdGVtVHlwZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYXJyYXlJdGVtVHlwZSA9IGNodW5rW3RoaXMuY3Vyc29yXTtcbiAgICAgICAgICAgICAgICBpZiAoKyt0aGlzLmN1cnNvciA+PSBjaHVuay5sZW5ndGgpXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMucGFyc2VUeXBlKGNodW5rLCB0aGlzLmFycmF5SXRlbVR5cGUsIGFycmF5c1RvS2VlcCArIDEpO1xuICAgICAgICAgICAgaWYgKGl0ZW0gPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIHRoaXMuYXJyYXlJdGVtVHlwZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGNvbnN0IHJlcGx5ID0gdGhpcy5wdXNoQXJyYXlJdGVtKGl0ZW0sIGFycmF5c1RvS2VlcCk7XG4gICAgICAgICAgICBpZiAocmVwbHkgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVwbHk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuQXJyYXlSZXBseShyZXBseSwgYXJyYXlzVG9LZWVwLCBjaHVuaykge1xuICAgICAgICBpZiAodGhpcy5hcnJheXNJblByb2Nlc3MubGVuZ3RoIDw9IGFycmF5c1RvS2VlcClcbiAgICAgICAgICAgIHJldHVybiByZXBseTtcbiAgICAgICAgcmV0dXJuIHRoaXMucHVzaEFycmF5SXRlbShyZXBseSwgYXJyYXlzVG9LZWVwLCBjaHVuayk7XG4gICAgfVxuICAgIHB1c2hBcnJheUl0ZW0oaXRlbSwgYXJyYXlzVG9LZWVwLCBjaHVuaykge1xuICAgICAgICBjb25zdCB0byA9IHRoaXMuYXJyYXlzSW5Qcm9jZXNzW3RoaXMuYXJyYXlzSW5Qcm9jZXNzLmxlbmd0aCAtIDFdO1xuICAgICAgICB0by5hcnJheVt0by5wdXNoQ291bnRlcl0gPSBpdGVtO1xuICAgICAgICBpZiAoKyt0by5wdXNoQ291bnRlciA9PT0gdG8uYXJyYXkubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZXR1cm5BcnJheVJlcGx5KHRoaXMuYXJyYXlzSW5Qcm9jZXNzLnBvcCgpLmFycmF5LCBhcnJheXNUb0tlZXAsIGNodW5rKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjaHVuayAmJiBjaHVuay5sZW5ndGggPiB0aGlzLmN1cnNvcikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VBcnJheShjaHVuaywgYXJyYXlzVG9LZWVwKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydHMuZGVmYXVsdCA9IFJFU1AyRGVjb2RlcjtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBDUkxGID0gJ1xcclxcbic7XG5mdW5jdGlvbiBlbmNvZGVDb21tYW5kKGFyZ3MpIHtcbiAgICBjb25zdCB0b1dyaXRlID0gW107XG4gICAgbGV0IHN0cmluZ3MgPSAnKicgKyBhcmdzLmxlbmd0aCArIENSTEY7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGFyZyA9IGFyZ3NbaV07XG4gICAgICAgIGlmICh0eXBlb2YgYXJnID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgc3RyaW5ncyArPSAnJCcgKyBCdWZmZXIuYnl0ZUxlbmd0aChhcmcpICsgQ1JMRiArIGFyZyArIENSTEY7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoYXJnIGluc3RhbmNlb2YgQnVmZmVyKSB7XG4gICAgICAgICAgICB0b1dyaXRlLnB1c2goc3RyaW5ncyArICckJyArIGFyZy5sZW5ndGgudG9TdHJpbmcoKSArIENSTEYsIGFyZyk7XG4gICAgICAgICAgICBzdHJpbmdzID0gQ1JMRjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgYXJndW1lbnQgdHlwZScpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHRvV3JpdGUucHVzaChzdHJpbmdzKTtcbiAgICByZXR1cm4gdG9Xcml0ZTtcbn1cbmV4cG9ydHMuZGVmYXVsdCA9IGVuY29kZUNvbW1hbmQ7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fY2xhc3NQcml2YXRlRmllbGRHZXQgPSAodGhpcyAmJiB0aGlzLl9fY2xhc3NQcml2YXRlRmllbGRHZXQpIHx8IGZ1bmN0aW9uIChyZWNlaXZlciwgc3RhdGUsIGtpbmQsIGYpIHtcbiAgICBpZiAoa2luZCA9PT0gXCJhXCIgJiYgIWYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBnZXR0ZXJcIik7XG4gICAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgcmVhZCBwcml2YXRlIG1lbWJlciBmcm9tIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7XG4gICAgcmV0dXJuIGtpbmQgPT09IFwibVwiID8gZiA6IGtpbmQgPT09IFwiYVwiID8gZi5jYWxsKHJlY2VpdmVyKSA6IGYgPyBmLnZhbHVlIDogc3RhdGUuZ2V0KHJlY2VpdmVyKTtcbn07XG52YXIgX19jbGFzc1ByaXZhdGVGaWVsZFNldCA9ICh0aGlzICYmIHRoaXMuX19jbGFzc1ByaXZhdGVGaWVsZFNldCkgfHwgZnVuY3Rpb24gKHJlY2VpdmVyLCBzdGF0ZSwgdmFsdWUsIGtpbmQsIGYpIHtcbiAgICBpZiAoa2luZCA9PT0gXCJtXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIG1ldGhvZCBpcyBub3Qgd3JpdGFibGVcIik7XG4gICAgaWYgKGtpbmQgPT09IFwiYVwiICYmICFmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgc2V0dGVyXCIpO1xuICAgIGlmICh0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyICE9PSBzdGF0ZSB8fCAhZiA6ICFzdGF0ZS5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHdyaXRlIHByaXZhdGUgbWVtYmVyIHRvIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7XG4gICAgcmV0dXJuIChraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlciwgdmFsdWUpIDogZiA/IGYudmFsdWUgPSB2YWx1ZSA6IHN0YXRlLnNldChyZWNlaXZlciwgdmFsdWUpKSwgdmFsdWU7XG59O1xudmFyIF9QdWJTdWJfaW5zdGFuY2VzLCBfYSwgX1B1YlN1Yl9jaGFubmVsc0FycmF5LCBfUHViU3ViX2xpc3RlbmVyc1NldCwgX1B1YlN1Yl9zdWJzY3JpYmluZywgX1B1YlN1Yl9pc0FjdGl2ZSwgX1B1YlN1Yl9saXN0ZW5lcnMsIF9QdWJTdWJfZXh0ZW5kQ2hhbm5lbExpc3RlbmVycywgX1B1YlN1Yl91bnN1YnNjcmliZUNvbW1hbmQsIF9QdWJTdWJfdXBkYXRlSXNBY3RpdmUsIF9QdWJTdWJfZW1pdFB1YlN1Yk1lc3NhZ2U7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlB1YlN1YiA9IGV4cG9ydHMuUHViU3ViVHlwZSA9IHZvaWQgMDtcbnZhciBQdWJTdWJUeXBlO1xuKGZ1bmN0aW9uIChQdWJTdWJUeXBlKSB7XG4gICAgUHViU3ViVHlwZVtcIkNIQU5ORUxTXCJdID0gXCJDSEFOTkVMU1wiO1xuICAgIFB1YlN1YlR5cGVbXCJQQVRURVJOU1wiXSA9IFwiUEFUVEVSTlNcIjtcbiAgICBQdWJTdWJUeXBlW1wiU0hBUkRFRFwiXSA9IFwiU0hBUkRFRFwiO1xufSkoUHViU3ViVHlwZSB8fCAoZXhwb3J0cy5QdWJTdWJUeXBlID0gUHViU3ViVHlwZSA9IHt9KSk7XG5jb25zdCBDT01NQU5EUyA9IHtcbiAgICBbUHViU3ViVHlwZS5DSEFOTkVMU106IHtcbiAgICAgICAgc3Vic2NyaWJlOiBCdWZmZXIuZnJvbSgnc3Vic2NyaWJlJyksXG4gICAgICAgIHVuc3Vic2NyaWJlOiBCdWZmZXIuZnJvbSgndW5zdWJzY3JpYmUnKSxcbiAgICAgICAgbWVzc2FnZTogQnVmZmVyLmZyb20oJ21lc3NhZ2UnKVxuICAgIH0sXG4gICAgW1B1YlN1YlR5cGUuUEFUVEVSTlNdOiB7XG4gICAgICAgIHN1YnNjcmliZTogQnVmZmVyLmZyb20oJ3BzdWJzY3JpYmUnKSxcbiAgICAgICAgdW5zdWJzY3JpYmU6IEJ1ZmZlci5mcm9tKCdwdW5zdWJzY3JpYmUnKSxcbiAgICAgICAgbWVzc2FnZTogQnVmZmVyLmZyb20oJ3BtZXNzYWdlJylcbiAgICB9LFxuICAgIFtQdWJTdWJUeXBlLlNIQVJERURdOiB7XG4gICAgICAgIHN1YnNjcmliZTogQnVmZmVyLmZyb20oJ3NzdWJzY3JpYmUnKSxcbiAgICAgICAgdW5zdWJzY3JpYmU6IEJ1ZmZlci5mcm9tKCdzdW5zdWJzY3JpYmUnKSxcbiAgICAgICAgbWVzc2FnZTogQnVmZmVyLmZyb20oJ3NtZXNzYWdlJylcbiAgICB9XG59O1xuY2xhc3MgUHViU3ViIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgX1B1YlN1Yl9pbnN0YW5jZXMuYWRkKHRoaXMpO1xuICAgICAgICBfUHViU3ViX3N1YnNjcmliaW5nLnNldCh0aGlzLCAwKTtcbiAgICAgICAgX1B1YlN1Yl9pc0FjdGl2ZS5zZXQodGhpcywgZmFsc2UpO1xuICAgICAgICBfUHViU3ViX2xpc3RlbmVycy5zZXQodGhpcywge1xuICAgICAgICAgICAgW1B1YlN1YlR5cGUuQ0hBTk5FTFNdOiBuZXcgTWFwKCksXG4gICAgICAgICAgICBbUHViU3ViVHlwZS5QQVRURVJOU106IG5ldyBNYXAoKSxcbiAgICAgICAgICAgIFtQdWJTdWJUeXBlLlNIQVJERURdOiBuZXcgTWFwKClcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHN0YXRpYyBpc1N0YXR1c1JlcGx5KHJlcGx5KSB7XG4gICAgICAgIHJldHVybiAoQ09NTUFORFNbUHViU3ViVHlwZS5DSEFOTkVMU10uc3Vic2NyaWJlLmVxdWFscyhyZXBseVswXSkgfHxcbiAgICAgICAgICAgIENPTU1BTkRTW1B1YlN1YlR5cGUuQ0hBTk5FTFNdLnVuc3Vic2NyaWJlLmVxdWFscyhyZXBseVswXSkgfHxcbiAgICAgICAgICAgIENPTU1BTkRTW1B1YlN1YlR5cGUuUEFUVEVSTlNdLnN1YnNjcmliZS5lcXVhbHMocmVwbHlbMF0pIHx8XG4gICAgICAgICAgICBDT01NQU5EU1tQdWJTdWJUeXBlLlBBVFRFUk5TXS51bnN1YnNjcmliZS5lcXVhbHMocmVwbHlbMF0pIHx8XG4gICAgICAgICAgICBDT01NQU5EU1tQdWJTdWJUeXBlLlNIQVJERURdLnN1YnNjcmliZS5lcXVhbHMocmVwbHlbMF0pKTtcbiAgICB9XG4gICAgc3RhdGljIGlzU2hhcmRlZFVuc3Vic2NyaWJlKHJlcGx5KSB7XG4gICAgICAgIHJldHVybiBDT01NQU5EU1tQdWJTdWJUeXBlLlNIQVJERURdLnVuc3Vic2NyaWJlLmVxdWFscyhyZXBseVswXSk7XG4gICAgfVxuICAgIGdldCBpc0FjdGl2ZSgpIHtcbiAgICAgICAgcmV0dXJuIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1B1YlN1Yl9pc0FjdGl2ZSwgXCJmXCIpO1xuICAgIH1cbiAgICBzdWJzY3JpYmUodHlwZSwgY2hhbm5lbHMsIGxpc3RlbmVyLCByZXR1cm5CdWZmZXJzKSB7XG4gICAgICAgIHZhciBfYjtcbiAgICAgICAgY29uc3QgYXJncyA9IFtDT01NQU5EU1t0eXBlXS5zdWJzY3JpYmVdLCBjaGFubmVsc0FycmF5ID0gX19jbGFzc1ByaXZhdGVGaWVsZEdldChfYSwgX2EsIFwibVwiLCBfUHViU3ViX2NoYW5uZWxzQXJyYXkpLmNhbGwoX2EsIGNoYW5uZWxzKTtcbiAgICAgICAgZm9yIChjb25zdCBjaGFubmVsIG9mIGNoYW5uZWxzQXJyYXkpIHtcbiAgICAgICAgICAgIGxldCBjaGFubmVsTGlzdGVuZXJzID0gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUHViU3ViX2xpc3RlbmVycywgXCJmXCIpW3R5cGVdLmdldChjaGFubmVsKTtcbiAgICAgICAgICAgIGlmICghY2hhbm5lbExpc3RlbmVycyB8fCBjaGFubmVsTGlzdGVuZXJzLnVuc3Vic2NyaWJpbmcpIHtcbiAgICAgICAgICAgICAgICBhcmdzLnB1c2goY2hhbm5lbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAvLyBhbGwgY2hhbm5lbHMgYXJlIGFscmVhZHkgc3Vic2NyaWJlZCwgYWRkIGxpc3RlbmVycyB3aXRob3V0IGlzc3VpbmcgYSBjb21tYW5kXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNoYW5uZWwgb2YgY2hhbm5lbHNBcnJheSkge1xuICAgICAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQoX2EsIF9hLCBcIm1cIiwgX1B1YlN1Yl9saXN0ZW5lcnNTZXQpLmNhbGwoX2EsIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1B1YlN1Yl9saXN0ZW5lcnMsIFwiZlwiKVt0eXBlXS5nZXQoY2hhbm5lbCksIHJldHVybkJ1ZmZlcnMpLmFkZChsaXN0ZW5lcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfUHViU3ViX2lzQWN0aXZlLCB0cnVlLCBcImZcIik7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX1B1YlN1Yl9zdWJzY3JpYmluZywgKF9iID0gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUHViU3ViX3N1YnNjcmliaW5nLCBcImZcIiksIF9iKyssIF9iKSwgXCJmXCIpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYXJncyxcbiAgICAgICAgICAgIGNoYW5uZWxzQ291bnRlcjogYXJncy5sZW5ndGggLSAxLFxuICAgICAgICAgICAgcmVzb2x2ZTogKCkgPT4ge1xuICAgICAgICAgICAgICAgIHZhciBfYjtcbiAgICAgICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9QdWJTdWJfc3Vic2NyaWJpbmcsIChfYiA9IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1B1YlN1Yl9zdWJzY3JpYmluZywgXCJmXCIpLCBfYi0tLCBfYiksIFwiZlwiKTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNoYW5uZWwgb2YgY2hhbm5lbHNBcnJheSkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgbGlzdGVuZXJzID0gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUHViU3ViX2xpc3RlbmVycywgXCJmXCIpW3R5cGVdLmdldChjaGFubmVsKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFsaXN0ZW5lcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RlbmVycyA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnN1YnNjcmliaW5nOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJzOiBuZXcgU2V0KCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nczogbmV3IFNldCgpXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUHViU3ViX2xpc3RlbmVycywgXCJmXCIpW3R5cGVdLnNldChjaGFubmVsLCBsaXN0ZW5lcnMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQoX2EsIF9hLCBcIm1cIiwgX1B1YlN1Yl9saXN0ZW5lcnNTZXQpLmNhbGwoX2EsIGxpc3RlbmVycywgcmV0dXJuQnVmZmVycykuYWRkKGxpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVqZWN0OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdmFyIF9iO1xuICAgICAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX1B1YlN1Yl9zdWJzY3JpYmluZywgKF9iID0gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUHViU3ViX3N1YnNjcmliaW5nLCBcImZcIiksIF9iLS0sIF9iKSwgXCJmXCIpO1xuICAgICAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1B1YlN1Yl9pbnN0YW5jZXMsIFwibVwiLCBfUHViU3ViX3VwZGF0ZUlzQWN0aXZlKS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cbiAgICBleHRlbmRDaGFubmVsTGlzdGVuZXJzKHR5cGUsIGNoYW5uZWwsIGxpc3RlbmVycykge1xuICAgICAgICB2YXIgX2I7XG4gICAgICAgIGlmICghX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUHViU3ViX2luc3RhbmNlcywgXCJtXCIsIF9QdWJTdWJfZXh0ZW5kQ2hhbm5lbExpc3RlbmVycykuY2FsbCh0aGlzLCB0eXBlLCBjaGFubmVsLCBsaXN0ZW5lcnMpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9QdWJTdWJfaXNBY3RpdmUsIHRydWUsIFwiZlwiKTtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfUHViU3ViX3N1YnNjcmliaW5nLCAoX2IgPSBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9QdWJTdWJfc3Vic2NyaWJpbmcsIFwiZlwiKSwgX2IrKywgX2IpLCBcImZcIik7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBhcmdzOiBbXG4gICAgICAgICAgICAgICAgQ09NTUFORFNbdHlwZV0uc3Vic2NyaWJlLFxuICAgICAgICAgICAgICAgIGNoYW5uZWxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBjaGFubmVsc0NvdW50ZXI6IDEsXG4gICAgICAgICAgICByZXNvbHZlOiAoKSA9PiB7IHZhciBfYiwgX2M7IHJldHVybiBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9QdWJTdWJfc3Vic2NyaWJpbmcsIChfYyA9IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1B1YlN1Yl9zdWJzY3JpYmluZywgXCJmXCIpLCBfYiA9IF9jLS0sIF9jKSwgXCJmXCIpLCBfYjsgfSxcbiAgICAgICAgICAgIHJlamVjdDogKCkgPT4ge1xuICAgICAgICAgICAgICAgIHZhciBfYjtcbiAgICAgICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9QdWJTdWJfc3Vic2NyaWJpbmcsIChfYiA9IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1B1YlN1Yl9zdWJzY3JpYmluZywgXCJmXCIpLCBfYi0tLCBfYiksIFwiZlwiKTtcbiAgICAgICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9QdWJTdWJfaW5zdGFuY2VzLCBcIm1cIiwgX1B1YlN1Yl91cGRhdGVJc0FjdGl2ZSkuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG4gICAgZXh0ZW5kVHlwZUxpc3RlbmVycyh0eXBlLCBsaXN0ZW5lcnMpIHtcbiAgICAgICAgdmFyIF9iO1xuICAgICAgICBjb25zdCBhcmdzID0gW0NPTU1BTkRTW3R5cGVdLnN1YnNjcmliZV07XG4gICAgICAgIGZvciAoY29uc3QgW2NoYW5uZWwsIGNoYW5uZWxMaXN0ZW5lcnNdIG9mIGxpc3RlbmVycykge1xuICAgICAgICAgICAgaWYgKF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1B1YlN1Yl9pbnN0YW5jZXMsIFwibVwiLCBfUHViU3ViX2V4dGVuZENoYW5uZWxMaXN0ZW5lcnMpLmNhbGwodGhpcywgdHlwZSwgY2hhbm5lbCwgY2hhbm5lbExpc3RlbmVycykpIHtcbiAgICAgICAgICAgICAgICBhcmdzLnB1c2goY2hhbm5lbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID09PSAxKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9QdWJTdWJfaXNBY3RpdmUsIHRydWUsIFwiZlwiKTtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfUHViU3ViX3N1YnNjcmliaW5nLCAoX2IgPSBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9QdWJTdWJfc3Vic2NyaWJpbmcsIFwiZlwiKSwgX2IrKywgX2IpLCBcImZcIik7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBhcmdzLFxuICAgICAgICAgICAgY2hhbm5lbHNDb3VudGVyOiBhcmdzLmxlbmd0aCAtIDEsXG4gICAgICAgICAgICByZXNvbHZlOiAoKSA9PiB7IHZhciBfYiwgX2M7IHJldHVybiBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9QdWJTdWJfc3Vic2NyaWJpbmcsIChfYyA9IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1B1YlN1Yl9zdWJzY3JpYmluZywgXCJmXCIpLCBfYiA9IF9jLS0sIF9jKSwgXCJmXCIpLCBfYjsgfSxcbiAgICAgICAgICAgIHJlamVjdDogKCkgPT4ge1xuICAgICAgICAgICAgICAgIHZhciBfYjtcbiAgICAgICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9QdWJTdWJfc3Vic2NyaWJpbmcsIChfYiA9IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1B1YlN1Yl9zdWJzY3JpYmluZywgXCJmXCIpLCBfYi0tLCBfYiksIFwiZlwiKTtcbiAgICAgICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9QdWJTdWJfaW5zdGFuY2VzLCBcIm1cIiwgX1B1YlN1Yl91cGRhdGVJc0FjdGl2ZSkuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG4gICAgdW5zdWJzY3JpYmUodHlwZSwgY2hhbm5lbHMsIGxpc3RlbmVyLCByZXR1cm5CdWZmZXJzKSB7XG4gICAgICAgIGNvbnN0IGxpc3RlbmVycyA9IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1B1YlN1Yl9saXN0ZW5lcnMsIFwiZlwiKVt0eXBlXTtcbiAgICAgICAgaWYgKCFjaGFubmVscykge1xuICAgICAgICAgICAgcmV0dXJuIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1B1YlN1Yl9pbnN0YW5jZXMsIFwibVwiLCBfUHViU3ViX3Vuc3Vic2NyaWJlQ29tbWFuZCkuY2FsbCh0aGlzLCBbQ09NTUFORFNbdHlwZV0udW5zdWJzY3JpYmVdLCBcbiAgICAgICAgICAgIC8vIGNhbm5vdCB1c2UgYHRoaXMuI3N1YnNjcmliZWRgIGJlY2F1c2UgdGhlcmUgbWlnaHQgYmUgc29tZSBgU1VCU0NSSUJFYCBjb21tYW5kcyBpbiB0aGUgcXVldWVcbiAgICAgICAgICAgIC8vIGNhbm5vdCB1c2UgYHRoaXMuI3N1YnNjcmliZWQgKyB0aGlzLiNzdWJzY3JpYmluZ2AgYmVjYXVzZSBzb21lIGBTVUJTQ1JJQkVgIGNvbW1hbmRzIG1pZ2h0IGZhaWxcbiAgICAgICAgICAgIE5hTiwgKCkgPT4gbGlzdGVuZXJzLmNsZWFyKCkpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNoYW5uZWxzQXJyYXkgPSBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9hLCBfYSwgXCJtXCIsIF9QdWJTdWJfY2hhbm5lbHNBcnJheSkuY2FsbChfYSwgY2hhbm5lbHMpO1xuICAgICAgICBpZiAoIWxpc3RlbmVyKSB7XG4gICAgICAgICAgICByZXR1cm4gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUHViU3ViX2luc3RhbmNlcywgXCJtXCIsIF9QdWJTdWJfdW5zdWJzY3JpYmVDb21tYW5kKS5jYWxsKHRoaXMsIFtDT01NQU5EU1t0eXBlXS51bnN1YnNjcmliZSwgLi4uY2hhbm5lbHNBcnJheV0sIGNoYW5uZWxzQXJyYXkubGVuZ3RoLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBjaGFubmVsIG9mIGNoYW5uZWxzQXJyYXkpIHtcbiAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXJzLmRlbGV0ZShjaGFubmVsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhcmdzID0gW0NPTU1BTkRTW3R5cGVdLnVuc3Vic2NyaWJlXTtcbiAgICAgICAgZm9yIChjb25zdCBjaGFubmVsIG9mIGNoYW5uZWxzQXJyYXkpIHtcbiAgICAgICAgICAgIGNvbnN0IHNldHMgPSBsaXN0ZW5lcnMuZ2V0KGNoYW5uZWwpO1xuICAgICAgICAgICAgaWYgKHNldHMpIHtcbiAgICAgICAgICAgICAgICBsZXQgY3VycmVudCwgb3RoZXI7XG4gICAgICAgICAgICAgICAgaWYgKHJldHVybkJ1ZmZlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudCA9IHNldHMuYnVmZmVycztcbiAgICAgICAgICAgICAgICAgICAgb3RoZXIgPSBzZXRzLnN0cmluZ3M7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50ID0gc2V0cy5zdHJpbmdzO1xuICAgICAgICAgICAgICAgICAgICBvdGhlciA9IHNldHMuYnVmZmVycztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgY3VycmVudFNpemUgPSBjdXJyZW50LmhhcyhsaXN0ZW5lcikgPyBjdXJyZW50LnNpemUgLSAxIDogY3VycmVudC5zaXplO1xuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50U2l6ZSAhPT0gMCB8fCBvdGhlci5zaXplICE9PSAwKVxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBzZXRzLnVuc3Vic2NyaWJpbmcgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYXJncy5wdXNoKGNoYW5uZWwpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgLy8gYWxsIGNoYW5uZWxzIGhhcyBvdGhlciBsaXN0ZW5lcnMsXG4gICAgICAgICAgICAvLyBkZWxldGUgdGhlIGxpc3RlbmVycyB3aXRob3V0IGlzc3VpbmcgYSBjb21tYW5kXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNoYW5uZWwgb2YgY2hhbm5lbHNBcnJheSkge1xuICAgICAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQoX2EsIF9hLCBcIm1cIiwgX1B1YlN1Yl9saXN0ZW5lcnNTZXQpLmNhbGwoX2EsIGxpc3RlbmVycy5nZXQoY2hhbm5lbCksIHJldHVybkJ1ZmZlcnMpLmRlbGV0ZShsaXN0ZW5lcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1B1YlN1Yl9pbnN0YW5jZXMsIFwibVwiLCBfUHViU3ViX3Vuc3Vic2NyaWJlQ29tbWFuZCkuY2FsbCh0aGlzLCBhcmdzLCBhcmdzLmxlbmd0aCAtIDEsICgpID0+IHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgY2hhbm5lbCBvZiBjaGFubmVsc0FycmF5KSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2V0cyA9IGxpc3RlbmVycy5nZXQoY2hhbm5lbCk7XG4gICAgICAgICAgICAgICAgaWYgKCFzZXRzKVxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAocmV0dXJuQnVmZmVycyA/IHNldHMuYnVmZmVycyA6IHNldHMuc3RyaW5ncykuZGVsZXRlKGxpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICBpZiAoc2V0cy5idWZmZXJzLnNpemUgPT09IDAgJiYgc2V0cy5zdHJpbmdzLnNpemUgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXJzLmRlbGV0ZShjaGFubmVsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXNldCgpIHtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfUHViU3ViX2lzQWN0aXZlLCBmYWxzZSwgXCJmXCIpO1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9QdWJTdWJfc3Vic2NyaWJpbmcsIDAsIFwiZlwiKTtcbiAgICB9XG4gICAgcmVzdWJzY3JpYmUoKSB7XG4gICAgICAgIHZhciBfYjtcbiAgICAgICAgY29uc3QgY29tbWFuZHMgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBbdHlwZSwgbGlzdGVuZXJzXSBvZiBPYmplY3QuZW50cmllcyhfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9QdWJTdWJfbGlzdGVuZXJzLCBcImZcIikpKSB7XG4gICAgICAgICAgICBpZiAoIWxpc3RlbmVycy5zaXplKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfUHViU3ViX2lzQWN0aXZlLCB0cnVlLCBcImZcIik7XG4gICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9QdWJTdWJfc3Vic2NyaWJpbmcsIChfYiA9IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1B1YlN1Yl9zdWJzY3JpYmluZywgXCJmXCIpLCBfYisrLCBfYiksIFwiZlwiKTtcbiAgICAgICAgICAgIGNvbnN0IGNhbGxiYWNrID0gKCkgPT4geyB2YXIgX2IsIF9jOyByZXR1cm4gX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfUHViU3ViX3N1YnNjcmliaW5nLCAoX2MgPSBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9QdWJTdWJfc3Vic2NyaWJpbmcsIFwiZlwiKSwgX2IgPSBfYy0tLCBfYyksIFwiZlwiKSwgX2I7IH07XG4gICAgICAgICAgICBjb21tYW5kcy5wdXNoKHtcbiAgICAgICAgICAgICAgICBhcmdzOiBbXG4gICAgICAgICAgICAgICAgICAgIENPTU1BTkRTW3R5cGVdLnN1YnNjcmliZSxcbiAgICAgICAgICAgICAgICAgICAgLi4ubGlzdGVuZXJzLmtleXMoKVxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgY2hhbm5lbHNDb3VudGVyOiBsaXN0ZW5lcnMuc2l6ZSxcbiAgICAgICAgICAgICAgICByZXNvbHZlOiBjYWxsYmFjayxcbiAgICAgICAgICAgICAgICByZWplY3Q6IGNhbGxiYWNrXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29tbWFuZHM7XG4gICAgfVxuICAgIGhhbmRsZU1lc3NhZ2VSZXBseShyZXBseSkge1xuICAgICAgICBpZiAoQ09NTUFORFNbUHViU3ViVHlwZS5DSEFOTkVMU10ubWVzc2FnZS5lcXVhbHMocmVwbHlbMF0pKSB7XG4gICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9QdWJTdWJfaW5zdGFuY2VzLCBcIm1cIiwgX1B1YlN1Yl9lbWl0UHViU3ViTWVzc2FnZSkuY2FsbCh0aGlzLCBQdWJTdWJUeXBlLkNIQU5ORUxTLCByZXBseVsyXSwgcmVwbHlbMV0pO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoQ09NTUFORFNbUHViU3ViVHlwZS5QQVRURVJOU10ubWVzc2FnZS5lcXVhbHMocmVwbHlbMF0pKSB7XG4gICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9QdWJTdWJfaW5zdGFuY2VzLCBcIm1cIiwgX1B1YlN1Yl9lbWl0UHViU3ViTWVzc2FnZSkuY2FsbCh0aGlzLCBQdWJTdWJUeXBlLlBBVFRFUk5TLCByZXBseVszXSwgcmVwbHlbMl0sIHJlcGx5WzFdKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKENPTU1BTkRTW1B1YlN1YlR5cGUuU0hBUkRFRF0ubWVzc2FnZS5lcXVhbHMocmVwbHlbMF0pKSB7XG4gICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9QdWJTdWJfaW5zdGFuY2VzLCBcIm1cIiwgX1B1YlN1Yl9lbWl0UHViU3ViTWVzc2FnZSkuY2FsbCh0aGlzLCBQdWJTdWJUeXBlLlNIQVJERUQsIHJlcGx5WzJdLCByZXBseVsxXSk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJlbW92ZVNoYXJkZWRMaXN0ZW5lcnMoY2hhbm5lbCkge1xuICAgICAgICBjb25zdCBsaXN0ZW5lcnMgPSBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9QdWJTdWJfbGlzdGVuZXJzLCBcImZcIilbUHViU3ViVHlwZS5TSEFSREVEXS5nZXQoY2hhbm5lbCk7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1B1YlN1Yl9saXN0ZW5lcnMsIFwiZlwiKVtQdWJTdWJUeXBlLlNIQVJERURdLmRlbGV0ZShjaGFubmVsKTtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUHViU3ViX2luc3RhbmNlcywgXCJtXCIsIF9QdWJTdWJfdXBkYXRlSXNBY3RpdmUpLmNhbGwodGhpcyk7XG4gICAgICAgIHJldHVybiBsaXN0ZW5lcnM7XG4gICAgfVxuICAgIGdldFR5cGVMaXN0ZW5lcnModHlwZSkge1xuICAgICAgICByZXR1cm4gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUHViU3ViX2xpc3RlbmVycywgXCJmXCIpW3R5cGVdO1xuICAgIH1cbn1cbmV4cG9ydHMuUHViU3ViID0gUHViU3ViO1xuX2EgPSBQdWJTdWIsIF9QdWJTdWJfc3Vic2NyaWJpbmcgPSBuZXcgV2Vha01hcCgpLCBfUHViU3ViX2lzQWN0aXZlID0gbmV3IFdlYWtNYXAoKSwgX1B1YlN1Yl9saXN0ZW5lcnMgPSBuZXcgV2Vha01hcCgpLCBfUHViU3ViX2luc3RhbmNlcyA9IG5ldyBXZWFrU2V0KCksIF9QdWJTdWJfY2hhbm5lbHNBcnJheSA9IGZ1bmN0aW9uIF9QdWJTdWJfY2hhbm5lbHNBcnJheShjaGFubmVscykge1xuICAgIHJldHVybiAoQXJyYXkuaXNBcnJheShjaGFubmVscykgPyBjaGFubmVscyA6IFtjaGFubmVsc10pO1xufSwgX1B1YlN1Yl9saXN0ZW5lcnNTZXQgPSBmdW5jdGlvbiBfUHViU3ViX2xpc3RlbmVyc1NldChsaXN0ZW5lcnMsIHJldHVybkJ1ZmZlcnMpIHtcbiAgICByZXR1cm4gKHJldHVybkJ1ZmZlcnMgPyBsaXN0ZW5lcnMuYnVmZmVycyA6IGxpc3RlbmVycy5zdHJpbmdzKTtcbn0sIF9QdWJTdWJfZXh0ZW5kQ2hhbm5lbExpc3RlbmVycyA9IGZ1bmN0aW9uIF9QdWJTdWJfZXh0ZW5kQ2hhbm5lbExpc3RlbmVycyh0eXBlLCBjaGFubmVsLCBsaXN0ZW5lcnMpIHtcbiAgICBjb25zdCBleGlzdGluZ0xpc3RlbmVycyA9IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1B1YlN1Yl9saXN0ZW5lcnMsIFwiZlwiKVt0eXBlXS5nZXQoY2hhbm5lbCk7XG4gICAgaWYgKCFleGlzdGluZ0xpc3RlbmVycykge1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9QdWJTdWJfbGlzdGVuZXJzLCBcImZcIilbdHlwZV0uc2V0KGNoYW5uZWwsIGxpc3RlbmVycyk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGxpc3RlbmVyIG9mIGxpc3RlbmVycy5idWZmZXJzKSB7XG4gICAgICAgIGV4aXN0aW5nTGlzdGVuZXJzLmJ1ZmZlcnMuYWRkKGxpc3RlbmVyKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBsaXN0ZW5lciBvZiBsaXN0ZW5lcnMuc3RyaW5ncykge1xuICAgICAgICBleGlzdGluZ0xpc3RlbmVycy5zdHJpbmdzLmFkZChsaXN0ZW5lcik7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn0sIF9QdWJTdWJfdW5zdWJzY3JpYmVDb21tYW5kID0gZnVuY3Rpb24gX1B1YlN1Yl91bnN1YnNjcmliZUNvbW1hbmQoYXJncywgY2hhbm5lbHNDb3VudGVyLCByZW1vdmVMaXN0ZW5lcnMpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBhcmdzLFxuICAgICAgICBjaGFubmVsc0NvdW50ZXIsXG4gICAgICAgIHJlc29sdmU6ICgpID0+IHtcbiAgICAgICAgICAgIHJlbW92ZUxpc3RlbmVycygpO1xuICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUHViU3ViX2luc3RhbmNlcywgXCJtXCIsIF9QdWJTdWJfdXBkYXRlSXNBY3RpdmUpLmNhbGwodGhpcyk7XG4gICAgICAgIH0sXG4gICAgICAgIHJlamVjdDogdW5kZWZpbmVkIC8vIHVzZSB0aGUgc2FtZSBzdHJ1Y3R1cmUgYXMgYHN1YnNjcmliZWBcbiAgICB9O1xufSwgX1B1YlN1Yl91cGRhdGVJc0FjdGl2ZSA9IGZ1bmN0aW9uIF9QdWJTdWJfdXBkYXRlSXNBY3RpdmUoKSB7XG4gICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfUHViU3ViX2lzQWN0aXZlLCAoX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUHViU3ViX2xpc3RlbmVycywgXCJmXCIpW1B1YlN1YlR5cGUuQ0hBTk5FTFNdLnNpemUgIT09IDAgfHxcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUHViU3ViX2xpc3RlbmVycywgXCJmXCIpW1B1YlN1YlR5cGUuUEFUVEVSTlNdLnNpemUgIT09IDAgfHxcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUHViU3ViX2xpc3RlbmVycywgXCJmXCIpW1B1YlN1YlR5cGUuU0hBUkRFRF0uc2l6ZSAhPT0gMCB8fFxuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9QdWJTdWJfc3Vic2NyaWJpbmcsIFwiZlwiKSAhPT0gMCksIFwiZlwiKTtcbn0sIF9QdWJTdWJfZW1pdFB1YlN1Yk1lc3NhZ2UgPSBmdW5jdGlvbiBfUHViU3ViX2VtaXRQdWJTdWJNZXNzYWdlKHR5cGUsIG1lc3NhZ2UsIGNoYW5uZWwsIHBhdHRlcm4pIHtcbiAgICBjb25zdCBrZXlTdHJpbmcgPSAocGF0dGVybiA/PyBjaGFubmVsKS50b1N0cmluZygpLCBsaXN0ZW5lcnMgPSBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9QdWJTdWJfbGlzdGVuZXJzLCBcImZcIilbdHlwZV0uZ2V0KGtleVN0cmluZyk7XG4gICAgaWYgKCFsaXN0ZW5lcnMpXG4gICAgICAgIHJldHVybjtcbiAgICBmb3IgKGNvbnN0IGxpc3RlbmVyIG9mIGxpc3RlbmVycy5idWZmZXJzKSB7XG4gICAgICAgIGxpc3RlbmVyKG1lc3NhZ2UsIGNoYW5uZWwpO1xuICAgIH1cbiAgICBpZiAoIWxpc3RlbmVycy5zdHJpbmdzLnNpemUpXG4gICAgICAgIHJldHVybjtcbiAgICBjb25zdCBjaGFubmVsU3RyaW5nID0gcGF0dGVybiA/IGNoYW5uZWwudG9TdHJpbmcoKSA6IGtleVN0cmluZywgbWVzc2FnZVN0cmluZyA9IGNoYW5uZWxTdHJpbmcgPT09ICdfX3JlZGlzX186aW52YWxpZGF0ZScgP1xuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vcmVkaXMvcmVkaXMvcHVsbC83NDY5XG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9yZWRpcy9yZWRpcy9pc3N1ZXMvNzQ2M1xuICAgICAgICAobWVzc2FnZSA9PT0gbnVsbCA/IG51bGwgOiBtZXNzYWdlLm1hcCh4ID0+IHgudG9TdHJpbmcoKSkpIDpcbiAgICAgICAgbWVzc2FnZS50b1N0cmluZygpO1xuICAgIGZvciAoY29uc3QgbGlzdGVuZXIgb2YgbGlzdGVuZXJzLnN0cmluZ3MpIHtcbiAgICAgICAgbGlzdGVuZXIobWVzc2FnZVN0cmluZywgY2hhbm5lbFN0cmluZyk7XG4gICAgfVxufTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19jbGFzc1ByaXZhdGVGaWVsZEdldCA9ICh0aGlzICYmIHRoaXMuX19jbGFzc1ByaXZhdGVGaWVsZEdldCkgfHwgZnVuY3Rpb24gKHJlY2VpdmVyLCBzdGF0ZSwga2luZCwgZikge1xuICAgIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIGdldHRlclwiKTtcbiAgICBpZiAodHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciAhPT0gc3RhdGUgfHwgIWYgOiAhc3RhdGUuaGFzKHJlY2VpdmVyKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCByZWFkIHByaXZhdGUgbWVtYmVyIGZyb20gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtcbiAgICByZXR1cm4ga2luZCA9PT0gXCJtXCIgPyBmIDoga2luZCA9PT0gXCJhXCIgPyBmLmNhbGwocmVjZWl2ZXIpIDogZiA/IGYudmFsdWUgOiBzdGF0ZS5nZXQocmVjZWl2ZXIpO1xufTtcbnZhciBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0ID0gKHRoaXMgJiYgdGhpcy5fX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KSB8fCBmdW5jdGlvbiAocmVjZWl2ZXIsIHN0YXRlLCB2YWx1ZSwga2luZCwgZikge1xuICAgIGlmIChraW5kID09PSBcIm1cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgbWV0aG9kIGlzIG5vdCB3cml0YWJsZVwiKTtcbiAgICBpZiAoa2luZCA9PT0gXCJhXCIgJiYgIWYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBzZXR0ZXJcIik7XG4gICAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3Qgd3JpdGUgcHJpdmF0ZSBtZW1iZXIgdG8gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtcbiAgICByZXR1cm4gKGtpbmQgPT09IFwiYVwiID8gZi5jYWxsKHJlY2VpdmVyLCB2YWx1ZSkgOiBmID8gZi52YWx1ZSA9IHZhbHVlIDogc3RhdGUuc2V0KHJlY2VpdmVyLCB2YWx1ZSkpLCB2YWx1ZTtcbn07XG52YXIgX1JlZGlzQ29tbWFuZHNRdWV1ZV9pbnN0YW5jZXMsIF9hLCBfUmVkaXNDb21tYW5kc1F1ZXVlX2ZsdXNoUXVldWUsIF9SZWRpc0NvbW1hbmRzUXVldWVfbWF4TGVuZ3RoLCBfUmVkaXNDb21tYW5kc1F1ZXVlX3dhaXRpbmdUb0JlU2VudCwgX1JlZGlzQ29tbWFuZHNRdWV1ZV93YWl0aW5nRm9yUmVwbHksIF9SZWRpc0NvbW1hbmRzUXVldWVfb25TaGFyZGVkQ2hhbm5lbE1vdmVkLCBfUmVkaXNDb21tYW5kc1F1ZXVlX3B1YlN1YiwgX1JlZGlzQ29tbWFuZHNRdWV1ZV9jaGFpbkluRXhlY3V0aW9uLCBfUmVkaXNDb21tYW5kc1F1ZXVlX2RlY29kZXIsIF9SZWRpc0NvbW1hbmRzUXVldWVfcHVzaFB1YlN1YkNvbW1hbmQ7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBMaW5rZWRMaXN0ID0gcmVxdWlyZShcInlhbGxpc3RcIik7XG5jb25zdCBlcnJvcnNfMSA9IHJlcXVpcmUoXCIuLi9lcnJvcnNcIik7XG5jb25zdCBkZWNvZGVyXzEgPSByZXF1aXJlKFwiLi9SRVNQMi9kZWNvZGVyXCIpO1xuY29uc3QgZW5jb2Rlcl8xID0gcmVxdWlyZShcIi4vUkVTUDIvZW5jb2RlclwiKTtcbmNvbnN0IHB1Yl9zdWJfMSA9IHJlcXVpcmUoXCIuL3B1Yi1zdWJcIik7XG5jb25zdCBQT05HID0gQnVmZmVyLmZyb20oJ3BvbmcnKTtcbmNsYXNzIFJlZGlzQ29tbWFuZHNRdWV1ZSB7XG4gICAgZ2V0IGlzUHViU3ViQWN0aXZlKCkge1xuICAgICAgICByZXR1cm4gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUmVkaXNDb21tYW5kc1F1ZXVlX3B1YlN1YiwgXCJmXCIpLmlzQWN0aXZlO1xuICAgIH1cbiAgICBjb25zdHJ1Y3RvcihtYXhMZW5ndGgsIG9uU2hhcmRlZENoYW5uZWxNb3ZlZCkge1xuICAgICAgICBfUmVkaXNDb21tYW5kc1F1ZXVlX2luc3RhbmNlcy5hZGQodGhpcyk7XG4gICAgICAgIF9SZWRpc0NvbW1hbmRzUXVldWVfbWF4TGVuZ3RoLnNldCh0aGlzLCB2b2lkIDApO1xuICAgICAgICBfUmVkaXNDb21tYW5kc1F1ZXVlX3dhaXRpbmdUb0JlU2VudC5zZXQodGhpcywgbmV3IExpbmtlZExpc3QoKSk7XG4gICAgICAgIF9SZWRpc0NvbW1hbmRzUXVldWVfd2FpdGluZ0ZvclJlcGx5LnNldCh0aGlzLCBuZXcgTGlua2VkTGlzdCgpKTtcbiAgICAgICAgX1JlZGlzQ29tbWFuZHNRdWV1ZV9vblNoYXJkZWRDaGFubmVsTW92ZWQuc2V0KHRoaXMsIHZvaWQgMCk7XG4gICAgICAgIF9SZWRpc0NvbW1hbmRzUXVldWVfcHViU3ViLnNldCh0aGlzLCBuZXcgcHViX3N1Yl8xLlB1YlN1YigpKTtcbiAgICAgICAgX1JlZGlzQ29tbWFuZHNRdWV1ZV9jaGFpbkluRXhlY3V0aW9uLnNldCh0aGlzLCB2b2lkIDApO1xuICAgICAgICBfUmVkaXNDb21tYW5kc1F1ZXVlX2RlY29kZXIuc2V0KHRoaXMsIG5ldyBkZWNvZGVyXzEuZGVmYXVsdCh7XG4gICAgICAgICAgICByZXR1cm5TdHJpbmdzQXNCdWZmZXJzOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICEhX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUmVkaXNDb21tYW5kc1F1ZXVlX3dhaXRpbmdGb3JSZXBseSwgXCJmXCIpLmhlYWQ/LnZhbHVlLnJldHVybkJ1ZmZlcnMgfHxcbiAgICAgICAgICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUmVkaXNDb21tYW5kc1F1ZXVlX3B1YlN1YiwgXCJmXCIpLmlzQWN0aXZlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uUmVwbHk6IHJlcGx5ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUmVkaXNDb21tYW5kc1F1ZXVlX3B1YlN1YiwgXCJmXCIpLmlzQWN0aXZlICYmIEFycmF5LmlzQXJyYXkocmVwbHkpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc0NvbW1hbmRzUXVldWVfcHViU3ViLCBcImZcIikuaGFuZGxlTWVzc2FnZVJlcGx5KHJlcGx5KSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNTaGFyZGVkVW5zdWJzY3JpYmUgPSBwdWJfc3ViXzEuUHViU3ViLmlzU2hhcmRlZFVuc3Vic2NyaWJlKHJlcGx5KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzU2hhcmRlZFVuc3Vic2NyaWJlICYmICFfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc0NvbW1hbmRzUXVldWVfd2FpdGluZ0ZvclJlcGx5LCBcImZcIikubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFubmVsID0gcmVwbHlbMV0udG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzQ29tbWFuZHNRdWV1ZV9vblNoYXJkZWRDaGFubmVsTW92ZWQsIFwiZlwiKS5jYWxsKHRoaXMsIGNoYW5uZWwsIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzQ29tbWFuZHNRdWV1ZV9wdWJTdWIsIFwiZlwiKS5yZW1vdmVTaGFyZGVkTGlzdGVuZXJzKGNoYW5uZWwpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChpc1NoYXJkZWRVbnN1YnNjcmliZSB8fCBwdWJfc3ViXzEuUHViU3ViLmlzU3RhdHVzUmVwbHkocmVwbHkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBoZWFkID0gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUmVkaXNDb21tYW5kc1F1ZXVlX3dhaXRpbmdGb3JSZXBseSwgXCJmXCIpLmhlYWQudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKE51bWJlci5pc05hTihoZWFkLmNoYW5uZWxzQ291bnRlcikgJiYgcmVwbHlbMl0gPT09IDApIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLS1oZWFkLmNoYW5uZWxzQ291bnRlciA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzQ29tbWFuZHNRdWV1ZV93YWl0aW5nRm9yUmVwbHksIFwiZlwiKS5zaGlmdCgpLnJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoUE9ORy5lcXVhbHMocmVwbHlbMF0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB7IHJlc29sdmUsIHJldHVybkJ1ZmZlcnMgfSA9IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzQ29tbWFuZHNRdWV1ZV93YWl0aW5nRm9yUmVwbHksIFwiZlwiKS5zaGlmdCgpLCBidWZmZXIgPSAocmVwbHlbMV0ubGVuZ3RoID09PSAwID8gcmVwbHlbMF0gOiByZXBseVsxXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJldHVybkJ1ZmZlcnMgPyBidWZmZXIgOiBidWZmZXIudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgeyByZXNvbHZlLCByZWplY3QgfSA9IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzQ29tbWFuZHNRdWV1ZV93YWl0aW5nRm9yUmVwbHksIFwiZlwiKS5zaGlmdCgpO1xuICAgICAgICAgICAgICAgIGlmIChyZXBseSBpbnN0YW5jZW9mIGVycm9yc18xLkVycm9yUmVwbHkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KHJlcGx5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVwbHkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkpO1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9SZWRpc0NvbW1hbmRzUXVldWVfbWF4TGVuZ3RoLCBtYXhMZW5ndGgsIFwiZlwiKTtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfUmVkaXNDb21tYW5kc1F1ZXVlX29uU2hhcmRlZENoYW5uZWxNb3ZlZCwgb25TaGFyZGVkQ2hhbm5lbE1vdmVkLCBcImZcIik7XG4gICAgfVxuICAgIGFkZENvbW1hbmQoYXJncywgb3B0aW9ucykge1xuICAgICAgICBpZiAoX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUmVkaXNDb21tYW5kc1F1ZXVlX21heExlbmd0aCwgXCJmXCIpICYmIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzQ29tbWFuZHNRdWV1ZV93YWl0aW5nVG9CZVNlbnQsIFwiZlwiKS5sZW5ndGggKyBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc0NvbW1hbmRzUXVldWVfd2FpdGluZ0ZvclJlcGx5LCBcImZcIikubGVuZ3RoID49IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzQ29tbWFuZHNRdWV1ZV9tYXhMZW5ndGgsIFwiZlwiKSkge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcignVGhlIHF1ZXVlIGlzIGZ1bGwnKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAob3B0aW9ucz8uc2lnbmFsPy5hYm9ydGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IGVycm9yc18xLkFib3J0RXJyb3IoKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5vZGUgPSBuZXcgTGlua2VkTGlzdC5Ob2RlKHtcbiAgICAgICAgICAgICAgICBhcmdzLFxuICAgICAgICAgICAgICAgIGNoYWluSWQ6IG9wdGlvbnM/LmNoYWluSWQsXG4gICAgICAgICAgICAgICAgcmV0dXJuQnVmZmVyczogb3B0aW9ucz8ucmV0dXJuQnVmZmVycyxcbiAgICAgICAgICAgICAgICByZXNvbHZlLFxuICAgICAgICAgICAgICAgIHJlamVjdFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAob3B0aW9ucz8uc2lnbmFsKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbGlzdGVuZXIgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzQ29tbWFuZHNRdWV1ZV93YWl0aW5nVG9CZVNlbnQsIFwiZlwiKS5yZW1vdmVOb2RlKG5vZGUpO1xuICAgICAgICAgICAgICAgICAgICBub2RlLnZhbHVlLnJlamVjdChuZXcgZXJyb3JzXzEuQWJvcnRFcnJvcigpKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIG5vZGUudmFsdWUuYWJvcnQgPSB7XG4gICAgICAgICAgICAgICAgICAgIHNpZ25hbDogb3B0aW9ucy5zaWduYWwsXG4gICAgICAgICAgICAgICAgICAgIGxpc3RlbmVyXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAvLyBBYm9ydFNpZ25hbCB0eXBlIGlzIGluY29ycmVudFxuICAgICAgICAgICAgICAgIG9wdGlvbnMuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgbGlzdGVuZXIsIHtcbiAgICAgICAgICAgICAgICAgICAgb25jZTogdHJ1ZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdGlvbnM/LmFzYXApIHtcbiAgICAgICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc0NvbW1hbmRzUXVldWVfd2FpdGluZ1RvQmVTZW50LCBcImZcIikudW5zaGlmdE5vZGUobm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc0NvbW1hbmRzUXVldWVfd2FpdGluZ1RvQmVTZW50LCBcImZcIikucHVzaE5vZGUobm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBzdWJzY3JpYmUodHlwZSwgY2hhbm5lbHMsIGxpc3RlbmVyLCByZXR1cm5CdWZmZXJzKSB7XG4gICAgICAgIHJldHVybiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc0NvbW1hbmRzUXVldWVfaW5zdGFuY2VzLCBcIm1cIiwgX1JlZGlzQ29tbWFuZHNRdWV1ZV9wdXNoUHViU3ViQ29tbWFuZCkuY2FsbCh0aGlzLCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc0NvbW1hbmRzUXVldWVfcHViU3ViLCBcImZcIikuc3Vic2NyaWJlKHR5cGUsIGNoYW5uZWxzLCBsaXN0ZW5lciwgcmV0dXJuQnVmZmVycykpO1xuICAgIH1cbiAgICB1bnN1YnNjcmliZSh0eXBlLCBjaGFubmVscywgbGlzdGVuZXIsIHJldHVybkJ1ZmZlcnMpIHtcbiAgICAgICAgcmV0dXJuIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzQ29tbWFuZHNRdWV1ZV9pbnN0YW5jZXMsIFwibVwiLCBfUmVkaXNDb21tYW5kc1F1ZXVlX3B1c2hQdWJTdWJDb21tYW5kKS5jYWxsKHRoaXMsIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzQ29tbWFuZHNRdWV1ZV9wdWJTdWIsIFwiZlwiKS51bnN1YnNjcmliZSh0eXBlLCBjaGFubmVscywgbGlzdGVuZXIsIHJldHVybkJ1ZmZlcnMpKTtcbiAgICB9XG4gICAgcmVzdWJzY3JpYmUoKSB7XG4gICAgICAgIGNvbnN0IGNvbW1hbmRzID0gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUmVkaXNDb21tYW5kc1F1ZXVlX3B1YlN1YiwgXCJmXCIpLnJlc3Vic2NyaWJlKCk7XG4gICAgICAgIGlmICghY29tbWFuZHMubGVuZ3RoKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwoY29tbWFuZHMubWFwKGNvbW1hbmQgPT4gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUmVkaXNDb21tYW5kc1F1ZXVlX2luc3RhbmNlcywgXCJtXCIsIF9SZWRpc0NvbW1hbmRzUXVldWVfcHVzaFB1YlN1YkNvbW1hbmQpLmNhbGwodGhpcywgY29tbWFuZCkpKTtcbiAgICB9XG4gICAgZXh0ZW5kUHViU3ViQ2hhbm5lbExpc3RlbmVycyh0eXBlLCBjaGFubmVsLCBsaXN0ZW5lcnMpIHtcbiAgICAgICAgcmV0dXJuIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzQ29tbWFuZHNRdWV1ZV9pbnN0YW5jZXMsIFwibVwiLCBfUmVkaXNDb21tYW5kc1F1ZXVlX3B1c2hQdWJTdWJDb21tYW5kKS5jYWxsKHRoaXMsIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzQ29tbWFuZHNRdWV1ZV9wdWJTdWIsIFwiZlwiKS5leHRlbmRDaGFubmVsTGlzdGVuZXJzKHR5cGUsIGNoYW5uZWwsIGxpc3RlbmVycykpO1xuICAgIH1cbiAgICBleHRlbmRQdWJTdWJMaXN0ZW5lcnModHlwZSwgbGlzdGVuZXJzKSB7XG4gICAgICAgIHJldHVybiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc0NvbW1hbmRzUXVldWVfaW5zdGFuY2VzLCBcIm1cIiwgX1JlZGlzQ29tbWFuZHNRdWV1ZV9wdXNoUHViU3ViQ29tbWFuZCkuY2FsbCh0aGlzLCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc0NvbW1hbmRzUXVldWVfcHViU3ViLCBcImZcIikuZXh0ZW5kVHlwZUxpc3RlbmVycyh0eXBlLCBsaXN0ZW5lcnMpKTtcbiAgICB9XG4gICAgZ2V0UHViU3ViTGlzdGVuZXJzKHR5cGUpIHtcbiAgICAgICAgcmV0dXJuIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzQ29tbWFuZHNRdWV1ZV9wdWJTdWIsIFwiZlwiKS5nZXRUeXBlTGlzdGVuZXJzKHR5cGUpO1xuICAgIH1cbiAgICBnZXRDb21tYW5kVG9TZW5kKCkge1xuICAgICAgICBjb25zdCB0b1NlbmQgPSBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc0NvbW1hbmRzUXVldWVfd2FpdGluZ1RvQmVTZW50LCBcImZcIikuc2hpZnQoKTtcbiAgICAgICAgaWYgKCF0b1NlbmQpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGxldCBlbmNvZGVkO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgZW5jb2RlZCA9ICgwLCBlbmNvZGVyXzEuZGVmYXVsdCkodG9TZW5kLmFyZ3MpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHRvU2VuZC5yZWplY3QoZXJyKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc0NvbW1hbmRzUXVldWVfd2FpdGluZ0ZvclJlcGx5LCBcImZcIikucHVzaCh7XG4gICAgICAgICAgICByZXNvbHZlOiB0b1NlbmQucmVzb2x2ZSxcbiAgICAgICAgICAgIHJlamVjdDogdG9TZW5kLnJlamVjdCxcbiAgICAgICAgICAgIGNoYW5uZWxzQ291bnRlcjogdG9TZW5kLmNoYW5uZWxzQ291bnRlcixcbiAgICAgICAgICAgIHJldHVybkJ1ZmZlcnM6IHRvU2VuZC5yZXR1cm5CdWZmZXJzXG4gICAgICAgIH0pO1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9SZWRpc0NvbW1hbmRzUXVldWVfY2hhaW5JbkV4ZWN1dGlvbiwgdG9TZW5kLmNoYWluSWQsIFwiZlwiKTtcbiAgICAgICAgcmV0dXJuIGVuY29kZWQ7XG4gICAgfVxuICAgIG9uUmVwbHlDaHVuayhjaHVuaykge1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc0NvbW1hbmRzUXVldWVfZGVjb2RlciwgXCJmXCIpLndyaXRlKGNodW5rKTtcbiAgICB9XG4gICAgZmx1c2hXYWl0aW5nRm9yUmVwbHkoZXJyKSB7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzQ29tbWFuZHNRdWV1ZV9kZWNvZGVyLCBcImZcIikucmVzZXQoKTtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUmVkaXNDb21tYW5kc1F1ZXVlX3B1YlN1YiwgXCJmXCIpLnJlc2V0KCk7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQoX2EsIF9hLCBcIm1cIiwgX1JlZGlzQ29tbWFuZHNRdWV1ZV9mbHVzaFF1ZXVlKS5jYWxsKF9hLCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc0NvbW1hbmRzUXVldWVfd2FpdGluZ0ZvclJlcGx5LCBcImZcIiksIGVycik7XG4gICAgICAgIGlmICghX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUmVkaXNDb21tYW5kc1F1ZXVlX2NoYWluSW5FeGVjdXRpb24sIFwiZlwiKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgd2hpbGUgKF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzQ29tbWFuZHNRdWV1ZV93YWl0aW5nVG9CZVNlbnQsIFwiZlwiKS5oZWFkPy52YWx1ZS5jaGFpbklkID09PSBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc0NvbW1hbmRzUXVldWVfY2hhaW5JbkV4ZWN1dGlvbiwgXCJmXCIpKSB7XG4gICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc0NvbW1hbmRzUXVldWVfd2FpdGluZ1RvQmVTZW50LCBcImZcIikuc2hpZnQoKTtcbiAgICAgICAgfVxuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9SZWRpc0NvbW1hbmRzUXVldWVfY2hhaW5JbkV4ZWN1dGlvbiwgdW5kZWZpbmVkLCBcImZcIik7XG4gICAgfVxuICAgIGZsdXNoQWxsKGVycikge1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc0NvbW1hbmRzUXVldWVfZGVjb2RlciwgXCJmXCIpLnJlc2V0KCk7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzQ29tbWFuZHNRdWV1ZV9wdWJTdWIsIFwiZlwiKS5yZXNldCgpO1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9hLCBfYSwgXCJtXCIsIF9SZWRpc0NvbW1hbmRzUXVldWVfZmx1c2hRdWV1ZSkuY2FsbChfYSwgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUmVkaXNDb21tYW5kc1F1ZXVlX3dhaXRpbmdGb3JSZXBseSwgXCJmXCIpLCBlcnIpO1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9hLCBfYSwgXCJtXCIsIF9SZWRpc0NvbW1hbmRzUXVldWVfZmx1c2hRdWV1ZSkuY2FsbChfYSwgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUmVkaXNDb21tYW5kc1F1ZXVlX3dhaXRpbmdUb0JlU2VudCwgXCJmXCIpLCBlcnIpO1xuICAgIH1cbn1cbl9hID0gUmVkaXNDb21tYW5kc1F1ZXVlLCBfUmVkaXNDb21tYW5kc1F1ZXVlX21heExlbmd0aCA9IG5ldyBXZWFrTWFwKCksIF9SZWRpc0NvbW1hbmRzUXVldWVfd2FpdGluZ1RvQmVTZW50ID0gbmV3IFdlYWtNYXAoKSwgX1JlZGlzQ29tbWFuZHNRdWV1ZV93YWl0aW5nRm9yUmVwbHkgPSBuZXcgV2Vha01hcCgpLCBfUmVkaXNDb21tYW5kc1F1ZXVlX29uU2hhcmRlZENoYW5uZWxNb3ZlZCA9IG5ldyBXZWFrTWFwKCksIF9SZWRpc0NvbW1hbmRzUXVldWVfcHViU3ViID0gbmV3IFdlYWtNYXAoKSwgX1JlZGlzQ29tbWFuZHNRdWV1ZV9jaGFpbkluRXhlY3V0aW9uID0gbmV3IFdlYWtNYXAoKSwgX1JlZGlzQ29tbWFuZHNRdWV1ZV9kZWNvZGVyID0gbmV3IFdlYWtNYXAoKSwgX1JlZGlzQ29tbWFuZHNRdWV1ZV9pbnN0YW5jZXMgPSBuZXcgV2Vha1NldCgpLCBfUmVkaXNDb21tYW5kc1F1ZXVlX2ZsdXNoUXVldWUgPSBmdW5jdGlvbiBfUmVkaXNDb21tYW5kc1F1ZXVlX2ZsdXNoUXVldWUocXVldWUsIGVycikge1xuICAgIHdoaWxlIChxdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgcXVldWUuc2hpZnQoKS5yZWplY3QoZXJyKTtcbiAgICB9XG59LCBfUmVkaXNDb21tYW5kc1F1ZXVlX3B1c2hQdWJTdWJDb21tYW5kID0gZnVuY3Rpb24gX1JlZGlzQ29tbWFuZHNRdWV1ZV9wdXNoUHViU3ViQ29tbWFuZChjb21tYW5kKSB7XG4gICAgaWYgKGNvbW1hbmQgPT09IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzQ29tbWFuZHNRdWV1ZV93YWl0aW5nVG9CZVNlbnQsIFwiZlwiKS5wdXNoKHtcbiAgICAgICAgICAgIGFyZ3M6IGNvbW1hbmQuYXJncyxcbiAgICAgICAgICAgIGNoYW5uZWxzQ291bnRlcjogY29tbWFuZC5jaGFubmVsc0NvdW50ZXIsXG4gICAgICAgICAgICByZXR1cm5CdWZmZXJzOiB0cnVlLFxuICAgICAgICAgICAgcmVzb2x2ZTogKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbW1hbmQucmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZWplY3Q6IGVyciA9PiB7XG4gICAgICAgICAgICAgICAgY29tbWFuZC5yZWplY3Q/LigpO1xuICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBSZWRpc0NvbW1hbmRzUXVldWU7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5pc0NvbW1hbmRPcHRpb25zID0gZXhwb3J0cy5jb21tYW5kT3B0aW9ucyA9IHZvaWQgMDtcbmNvbnN0IHN5bWJvbCA9IFN5bWJvbCgnQ29tbWFuZCBPcHRpb25zJyk7XG5mdW5jdGlvbiBjb21tYW5kT3B0aW9ucyhvcHRpb25zKSB7XG4gICAgb3B0aW9uc1tzeW1ib2xdID0gdHJ1ZTtcbiAgICByZXR1cm4gb3B0aW9ucztcbn1cbmV4cG9ydHMuY29tbWFuZE9wdGlvbnMgPSBjb21tYW5kT3B0aW9ucztcbmZ1bmN0aW9uIGlzQ29tbWFuZE9wdGlvbnMob3B0aW9ucykge1xuICAgIHJldHVybiBvcHRpb25zPy5bc3ltYm9sXSA9PT0gdHJ1ZTtcbn1cbmV4cG9ydHMuaXNDb21tYW5kT3B0aW9ucyA9IGlzQ29tbWFuZE9wdGlvbnM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5mQ2FsbEFyZ3VtZW50cyA9IGV4cG9ydHMudHJhbnNmb3JtQ29tbWFuZFJlcGx5ID0gZXhwb3J0cy50cmFuc2Zvcm1MZWdhY3lDb21tYW5kQXJndW1lbnRzID0gZXhwb3J0cy50cmFuc2Zvcm1Db21tYW5kQXJndW1lbnRzID0gZXhwb3J0cy5hdHRhY2hFeHRlbnNpb25zID0gZXhwb3J0cy5hdHRhY2hDb21tYW5kcyA9IHZvaWQgMDtcbmNvbnN0IGNvbW1hbmRfb3B0aW9uc18xID0gcmVxdWlyZShcIi4vY29tbWFuZC1vcHRpb25zXCIpO1xuZnVuY3Rpb24gYXR0YWNoQ29tbWFuZHMoeyBCYXNlQ2xhc3MsIGNvbW1hbmRzLCBleGVjdXRvciB9KSB7XG4gICAgZm9yIChjb25zdCBbbmFtZSwgY29tbWFuZF0gb2YgT2JqZWN0LmVudHJpZXMoY29tbWFuZHMpKSB7XG4gICAgICAgIEJhc2VDbGFzcy5wcm90b3R5cGVbbmFtZV0gPSBmdW5jdGlvbiAoLi4uYXJncykge1xuICAgICAgICAgICAgcmV0dXJuIGV4ZWN1dG9yLmNhbGwodGhpcywgY29tbWFuZCwgYXJncywgbmFtZSk7XG4gICAgICAgIH07XG4gICAgfVxufVxuZXhwb3J0cy5hdHRhY2hDb21tYW5kcyA9IGF0dGFjaENvbW1hbmRzO1xuZnVuY3Rpb24gYXR0YWNoRXh0ZW5zaW9ucyhjb25maWcpIHtcbiAgICBsZXQgQ29tbWFuZGVyO1xuICAgIGlmIChjb25maWcubW9kdWxlcykge1xuICAgICAgICBDb21tYW5kZXIgPSBhdHRhY2hXaXRoTmFtZXNwYWNlcyh7XG4gICAgICAgICAgICBCYXNlQ2xhc3M6IGNvbmZpZy5CYXNlQ2xhc3MsXG4gICAgICAgICAgICBuYW1lc3BhY2VzOiBjb25maWcubW9kdWxlcyxcbiAgICAgICAgICAgIGV4ZWN1dG9yOiBjb25maWcubW9kdWxlc0V4ZWN1dG9yXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoY29uZmlnLmZ1bmN0aW9ucykge1xuICAgICAgICBDb21tYW5kZXIgPSBhdHRhY2hXaXRoTmFtZXNwYWNlcyh7XG4gICAgICAgICAgICBCYXNlQ2xhc3M6IENvbW1hbmRlciA/PyBjb25maWcuQmFzZUNsYXNzLFxuICAgICAgICAgICAgbmFtZXNwYWNlczogY29uZmlnLmZ1bmN0aW9ucyxcbiAgICAgICAgICAgIGV4ZWN1dG9yOiBjb25maWcuZnVuY3Rpb25zRXhlY3V0b3JcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChjb25maWcuc2NyaXB0cykge1xuICAgICAgICBDb21tYW5kZXIgPz8gKENvbW1hbmRlciA9IGNsYXNzIGV4dGVuZHMgY29uZmlnLkJhc2VDbGFzcyB7XG4gICAgICAgIH0pO1xuICAgICAgICBhdHRhY2hDb21tYW5kcyh7XG4gICAgICAgICAgICBCYXNlQ2xhc3M6IENvbW1hbmRlcixcbiAgICAgICAgICAgIGNvbW1hbmRzOiBjb25maWcuc2NyaXB0cyxcbiAgICAgICAgICAgIGV4ZWN1dG9yOiBjb25maWcuc2NyaXB0c0V4ZWN1dG9yXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gQ29tbWFuZGVyID8/IGNvbmZpZy5CYXNlQ2xhc3M7XG59XG5leHBvcnRzLmF0dGFjaEV4dGVuc2lvbnMgPSBhdHRhY2hFeHRlbnNpb25zO1xuZnVuY3Rpb24gYXR0YWNoV2l0aE5hbWVzcGFjZXMoeyBCYXNlQ2xhc3MsIG5hbWVzcGFjZXMsIGV4ZWN1dG9yIH0pIHtcbiAgICBjb25zdCBDb21tYW5kZXIgPSBjbGFzcyBleHRlbmRzIEJhc2VDbGFzcyB7XG4gICAgICAgIGNvbnN0cnVjdG9yKC4uLmFyZ3MpIHtcbiAgICAgICAgICAgIHN1cGVyKC4uLmFyZ3MpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBuYW1lc3BhY2Ugb2YgT2JqZWN0LmtleXMobmFtZXNwYWNlcykpIHtcbiAgICAgICAgICAgICAgICB0aGlzW25hbWVzcGFjZV0gPSBPYmplY3QuY3JlYXRlKHRoaXNbbmFtZXNwYWNlXSwge1xuICAgICAgICAgICAgICAgICAgICBzZWxmOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdGhpc1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGZvciAoY29uc3QgW25hbWVzcGFjZSwgY29tbWFuZHNdIG9mIE9iamVjdC5lbnRyaWVzKG5hbWVzcGFjZXMpKSB7XG4gICAgICAgIENvbW1hbmRlci5wcm90b3R5cGVbbmFtZXNwYWNlXSA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IFtuYW1lLCBjb21tYW5kXSBvZiBPYmplY3QuZW50cmllcyhjb21tYW5kcykpIHtcbiAgICAgICAgICAgIENvbW1hbmRlci5wcm90b3R5cGVbbmFtZXNwYWNlXVtuYW1lXSA9IGZ1bmN0aW9uICguLi5hcmdzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGV4ZWN1dG9yLmNhbGwodGhpcy5zZWxmLCBjb21tYW5kLCBhcmdzLCBuYW1lKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIENvbW1hbmRlcjtcbn1cbmZ1bmN0aW9uIHRyYW5zZm9ybUNvbW1hbmRBcmd1bWVudHMoY29tbWFuZCwgYXJncykge1xuICAgIGxldCBvcHRpb25zO1xuICAgIGlmICgoMCwgY29tbWFuZF9vcHRpb25zXzEuaXNDb21tYW5kT3B0aW9ucykoYXJnc1swXSkpIHtcbiAgICAgICAgb3B0aW9ucyA9IGFyZ3NbMF07XG4gICAgICAgIGFyZ3MgPSBhcmdzLnNsaWNlKDEpO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBqc0FyZ3M6IGFyZ3MsXG4gICAgICAgIGFyZ3M6IGNvbW1hbmQudHJhbnNmb3JtQXJndW1lbnRzKC4uLmFyZ3MpLFxuICAgICAgICBvcHRpb25zXG4gICAgfTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtQ29tbWFuZEFyZ3VtZW50cyA9IHRyYW5zZm9ybUNvbW1hbmRBcmd1bWVudHM7XG5mdW5jdGlvbiB0cmFuc2Zvcm1MZWdhY3lDb21tYW5kQXJndW1lbnRzKGFyZ3MpIHtcbiAgICByZXR1cm4gYXJncy5mbGF0KCkubWFwKGFyZyA9PiB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgYXJnID09PSAnbnVtYmVyJyB8fCBhcmcgaW5zdGFuY2VvZiBEYXRlID9cbiAgICAgICAgICAgIGFyZy50b1N0cmluZygpIDpcbiAgICAgICAgICAgIGFyZztcbiAgICB9KTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtTGVnYWN5Q29tbWFuZEFyZ3VtZW50cyA9IHRyYW5zZm9ybUxlZ2FjeUNvbW1hbmRBcmd1bWVudHM7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Db21tYW5kUmVwbHkoY29tbWFuZCwgcmF3UmVwbHksIHByZXNlcnZlZCkge1xuICAgIGlmICghY29tbWFuZC50cmFuc2Zvcm1SZXBseSkge1xuICAgICAgICByZXR1cm4gcmF3UmVwbHk7XG4gICAgfVxuICAgIHJldHVybiBjb21tYW5kLnRyYW5zZm9ybVJlcGx5KHJhd1JlcGx5LCBwcmVzZXJ2ZWQpO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Db21tYW5kUmVwbHkgPSB0cmFuc2Zvcm1Db21tYW5kUmVwbHk7XG5mdW5jdGlvbiBmQ2FsbEFyZ3VtZW50cyhuYW1lLCBmbiwgYXJncykge1xuICAgIGNvbnN0IGFjdHVhbEFyZ3MgPSBbXG4gICAgICAgIGZuLklTX1JFQURfT05MWSA/ICdGQ0FMTF9STycgOiAnRkNBTEwnLFxuICAgICAgICBuYW1lXG4gICAgXTtcbiAgICBpZiAoZm4uTlVNQkVSX09GX0tFWVMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBhY3R1YWxBcmdzLnB1c2goZm4uTlVNQkVSX09GX0tFWVMudG9TdHJpbmcoKSk7XG4gICAgfVxuICAgIGFjdHVhbEFyZ3MucHVzaCguLi5hcmdzKTtcbiAgICByZXR1cm4gYWN0dWFsQXJncztcbn1cbmV4cG9ydHMuZkNhbGxBcmd1bWVudHMgPSBmQ2FsbEFyZ3VtZW50cztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBjb21tYW5kZXJfMSA9IHJlcXVpcmUoXCIuL2NvbW1hbmRlclwiKTtcbmNvbnN0IGVycm9yc18xID0gcmVxdWlyZShcIi4vZXJyb3JzXCIpO1xuY2xhc3MgUmVkaXNNdWx0aUNvbW1hbmQge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgXCJxdWV1ZVwiLCB7XG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogW11cbiAgICAgICAgfSk7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcInNjcmlwdHNJblVzZVwiLCB7XG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogbmV3IFNldCgpXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBzdGF0aWMgZ2VuZXJhdGVDaGFpbklkKCkge1xuICAgICAgICByZXR1cm4gU3ltYm9sKCdSZWRpc011bHRpQ29tbWFuZCBDaGFpbiBJZCcpO1xuICAgIH1cbiAgICBhZGRDb21tYW5kKGFyZ3MsIHRyYW5zZm9ybVJlcGx5KSB7XG4gICAgICAgIHRoaXMucXVldWUucHVzaCh7XG4gICAgICAgICAgICBhcmdzLFxuICAgICAgICAgICAgdHJhbnNmb3JtUmVwbHlcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGFkZEZ1bmN0aW9uKG5hbWUsIGZuLCBhcmdzKSB7XG4gICAgICAgIGNvbnN0IHRyYW5zZm9ybWVkQXJndW1lbnRzID0gKDAsIGNvbW1hbmRlcl8xLmZDYWxsQXJndW1lbnRzKShuYW1lLCBmbiwgZm4udHJhbnNmb3JtQXJndW1lbnRzKC4uLmFyZ3MpKTtcbiAgICAgICAgdGhpcy5xdWV1ZS5wdXNoKHtcbiAgICAgICAgICAgIGFyZ3M6IHRyYW5zZm9ybWVkQXJndW1lbnRzLFxuICAgICAgICAgICAgdHJhbnNmb3JtUmVwbHk6IGZuLnRyYW5zZm9ybVJlcGx5XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdHJhbnNmb3JtZWRBcmd1bWVudHM7XG4gICAgfVxuICAgIGFkZFNjcmlwdChzY3JpcHQsIGFyZ3MpIHtcbiAgICAgICAgY29uc3QgdHJhbnNmb3JtZWRBcmd1bWVudHMgPSBbXTtcbiAgICAgICAgaWYgKHRoaXMuc2NyaXB0c0luVXNlLmhhcyhzY3JpcHQuU0hBMSkpIHtcbiAgICAgICAgICAgIHRyYW5zZm9ybWVkQXJndW1lbnRzLnB1c2goJ0VWQUxTSEEnLCBzY3JpcHQuU0hBMSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNjcmlwdHNJblVzZS5hZGQoc2NyaXB0LlNIQTEpO1xuICAgICAgICAgICAgdHJhbnNmb3JtZWRBcmd1bWVudHMucHVzaCgnRVZBTCcsIHNjcmlwdC5TQ1JJUFQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzY3JpcHQuTlVNQkVSX09GX0tFWVMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdHJhbnNmb3JtZWRBcmd1bWVudHMucHVzaChzY3JpcHQuTlVNQkVSX09GX0tFWVMudG9TdHJpbmcoKSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2NyaXB0QXJndW1lbnRzID0gc2NyaXB0LnRyYW5zZm9ybUFyZ3VtZW50cyguLi5hcmdzKTtcbiAgICAgICAgdHJhbnNmb3JtZWRBcmd1bWVudHMucHVzaCguLi5zY3JpcHRBcmd1bWVudHMpO1xuICAgICAgICBpZiAoc2NyaXB0QXJndW1lbnRzLnByZXNlcnZlKSB7XG4gICAgICAgICAgICB0cmFuc2Zvcm1lZEFyZ3VtZW50cy5wcmVzZXJ2ZSA9IHNjcmlwdEFyZ3VtZW50cy5wcmVzZXJ2ZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFkZENvbW1hbmQodHJhbnNmb3JtZWRBcmd1bWVudHMsIHNjcmlwdC50cmFuc2Zvcm1SZXBseSk7XG4gICAgICAgIHJldHVybiB0cmFuc2Zvcm1lZEFyZ3VtZW50cztcbiAgICB9XG4gICAgaGFuZGxlRXhlY1JlcGxpZXMocmF3UmVwbGllcykge1xuICAgICAgICBjb25zdCBleGVjUmVwbHkgPSByYXdSZXBsaWVzW3Jhd1JlcGxpZXMubGVuZ3RoIC0gMV07XG4gICAgICAgIGlmIChleGVjUmVwbHkgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBlcnJvcnNfMS5XYXRjaEVycm9yKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNmb3JtUmVwbGllcyhleGVjUmVwbHkpO1xuICAgIH1cbiAgICB0cmFuc2Zvcm1SZXBsaWVzKHJhd1JlcGxpZXMpIHtcbiAgICAgICAgY29uc3QgZXJyb3JJbmRleGVzID0gW10sIHJlcGxpZXMgPSByYXdSZXBsaWVzLm1hcCgocmVwbHksIGkpID0+IHtcbiAgICAgICAgICAgIGlmIChyZXBseSBpbnN0YW5jZW9mIGVycm9yc18xLkVycm9yUmVwbHkpIHtcbiAgICAgICAgICAgICAgICBlcnJvckluZGV4ZXMucHVzaChpKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVwbHk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB7IHRyYW5zZm9ybVJlcGx5LCBhcmdzIH0gPSB0aGlzLnF1ZXVlW2ldO1xuICAgICAgICAgICAgcmV0dXJuIHRyYW5zZm9ybVJlcGx5ID8gdHJhbnNmb3JtUmVwbHkocmVwbHksIGFyZ3MucHJlc2VydmUpIDogcmVwbHk7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoZXJyb3JJbmRleGVzLmxlbmd0aClcbiAgICAgICAgICAgIHRocm93IG5ldyBlcnJvcnNfMS5NdWx0aUVycm9yUmVwbHkocmVwbGllcywgZXJyb3JJbmRleGVzKTtcbiAgICAgICAgcmV0dXJuIHJlcGxpZXM7XG4gICAgfVxufVxuZXhwb3J0cy5kZWZhdWx0ID0gUmVkaXNNdWx0aUNvbW1hbmQ7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fY2xhc3NQcml2YXRlRmllbGRTZXQgPSAodGhpcyAmJiB0aGlzLl9fY2xhc3NQcml2YXRlRmllbGRTZXQpIHx8IGZ1bmN0aW9uIChyZWNlaXZlciwgc3RhdGUsIHZhbHVlLCBraW5kLCBmKSB7XG4gICAgaWYgKGtpbmQgPT09IFwibVwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBtZXRob2QgaXMgbm90IHdyaXRhYmxlXCIpO1xuICAgIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIHNldHRlclwiKTtcbiAgICBpZiAodHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciAhPT0gc3RhdGUgfHwgIWYgOiAhc3RhdGUuaGFzKHJlY2VpdmVyKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCB3cml0ZSBwcml2YXRlIG1lbWJlciB0byBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0XCIpO1xuICAgIHJldHVybiAoa2luZCA9PT0gXCJhXCIgPyBmLmNhbGwocmVjZWl2ZXIsIHZhbHVlKSA6IGYgPyBmLnZhbHVlID0gdmFsdWUgOiBzdGF0ZS5zZXQocmVjZWl2ZXIsIHZhbHVlKSksIHZhbHVlO1xufTtcbnZhciBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0ID0gKHRoaXMgJiYgdGhpcy5fX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KSB8fCBmdW5jdGlvbiAocmVjZWl2ZXIsIHN0YXRlLCBraW5kLCBmKSB7XG4gICAgaWYgKGtpbmQgPT09IFwiYVwiICYmICFmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgZ2V0dGVyXCIpO1xuICAgIGlmICh0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyICE9PSBzdGF0ZSB8fCAhZiA6ICFzdGF0ZS5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHJlYWQgcHJpdmF0ZSBtZW1iZXIgZnJvbSBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0XCIpO1xuICAgIHJldHVybiBraW5kID09PSBcIm1cIiA/IGYgOiBraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlcikgOiBmID8gZi52YWx1ZSA6IHN0YXRlLmdldChyZWNlaXZlcik7XG59O1xudmFyIF9SZWRpc0NsaWVudE11bHRpQ29tbWFuZF9pbnN0YW5jZXMsIF9SZWRpc0NsaWVudE11bHRpQ29tbWFuZF9tdWx0aSwgX1JlZGlzQ2xpZW50TXVsdGlDb21tYW5kX2V4ZWN1dG9yLCBfUmVkaXNDbGllbnRNdWx0aUNvbW1hbmRfc2VsZWN0ZWREQiwgX1JlZGlzQ2xpZW50TXVsdGlDb21tYW5kX2xlZ2FjeU1vZGUsIF9SZWRpc0NsaWVudE11bHRpQ29tbWFuZF9kZWZpbmVMZWdhY3lDb21tYW5kO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgY29tbWFuZHNfMSA9IHJlcXVpcmUoXCIuL2NvbW1hbmRzXCIpO1xuY29uc3QgbXVsdGlfY29tbWFuZF8xID0gcmVxdWlyZShcIi4uL211bHRpLWNvbW1hbmRcIik7XG5jb25zdCBjb21tYW5kZXJfMSA9IHJlcXVpcmUoXCIuLi9jb21tYW5kZXJcIik7XG5jbGFzcyBSZWRpc0NsaWVudE11bHRpQ29tbWFuZCB7XG4gICAgc3RhdGljIGV4dGVuZChleHRlbnNpb25zKSB7XG4gICAgICAgIHJldHVybiAoMCwgY29tbWFuZGVyXzEuYXR0YWNoRXh0ZW5zaW9ucykoe1xuICAgICAgICAgICAgQmFzZUNsYXNzOiBSZWRpc0NsaWVudE11bHRpQ29tbWFuZCxcbiAgICAgICAgICAgIG1vZHVsZXNFeGVjdXRvcjogUmVkaXNDbGllbnRNdWx0aUNvbW1hbmQucHJvdG90eXBlLmNvbW1hbmRzRXhlY3V0b3IsXG4gICAgICAgICAgICBtb2R1bGVzOiBleHRlbnNpb25zPy5tb2R1bGVzLFxuICAgICAgICAgICAgZnVuY3Rpb25zRXhlY3V0b3I6IFJlZGlzQ2xpZW50TXVsdGlDb21tYW5kLnByb3RvdHlwZS5mdW5jdGlvbnNFeGVjdXRvcixcbiAgICAgICAgICAgIGZ1bmN0aW9uczogZXh0ZW5zaW9ucz8uZnVuY3Rpb25zLFxuICAgICAgICAgICAgc2NyaXB0c0V4ZWN1dG9yOiBSZWRpc0NsaWVudE11bHRpQ29tbWFuZC5wcm90b3R5cGUuc2NyaXB0c0V4ZWN1dG9yLFxuICAgICAgICAgICAgc2NyaXB0czogZXh0ZW5zaW9ucz8uc2NyaXB0c1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgY29uc3RydWN0b3IoZXhlY3V0b3IsIGxlZ2FjeU1vZGUgPSBmYWxzZSkge1xuICAgICAgICBfUmVkaXNDbGllbnRNdWx0aUNvbW1hbmRfaW5zdGFuY2VzLmFkZCh0aGlzKTtcbiAgICAgICAgX1JlZGlzQ2xpZW50TXVsdGlDb21tYW5kX211bHRpLnNldCh0aGlzLCBuZXcgbXVsdGlfY29tbWFuZF8xLmRlZmF1bHQoKSk7XG4gICAgICAgIF9SZWRpc0NsaWVudE11bHRpQ29tbWFuZF9leGVjdXRvci5zZXQodGhpcywgdm9pZCAwKTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIFwidjRcIiwge1xuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IHt9XG4gICAgICAgIH0pO1xuICAgICAgICBfUmVkaXNDbGllbnRNdWx0aUNvbW1hbmRfc2VsZWN0ZWREQi5zZXQodGhpcywgdm9pZCAwKTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIFwic2VsZWN0XCIsIHtcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLlNFTEVDVFxuICAgICAgICB9KTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIFwiRVhFQ1wiLCB7XG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogdGhpcy5leGVjXG4gICAgICAgIH0pO1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9SZWRpc0NsaWVudE11bHRpQ29tbWFuZF9leGVjdXRvciwgZXhlY3V0b3IsIFwiZlwiKTtcbiAgICAgICAgaWYgKGxlZ2FjeU1vZGUpIHtcbiAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzQ2xpZW50TXVsdGlDb21tYW5kX2luc3RhbmNlcywgXCJtXCIsIF9SZWRpc0NsaWVudE11bHRpQ29tbWFuZF9sZWdhY3lNb2RlKS5jYWxsKHRoaXMpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNvbW1hbmRzRXhlY3V0b3IoY29tbWFuZCwgYXJncykge1xuICAgICAgICByZXR1cm4gdGhpcy5hZGRDb21tYW5kKGNvbW1hbmQudHJhbnNmb3JtQXJndW1lbnRzKC4uLmFyZ3MpLCBjb21tYW5kLnRyYW5zZm9ybVJlcGx5KTtcbiAgICB9XG4gICAgU0VMRUNUKGRiLCB0cmFuc2Zvcm1SZXBseSkge1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9SZWRpc0NsaWVudE11bHRpQ29tbWFuZF9zZWxlY3RlZERCLCBkYiwgXCJmXCIpO1xuICAgICAgICByZXR1cm4gdGhpcy5hZGRDb21tYW5kKFsnU0VMRUNUJywgZGIudG9TdHJpbmcoKV0sIHRyYW5zZm9ybVJlcGx5KTtcbiAgICB9XG4gICAgYWRkQ29tbWFuZChhcmdzLCB0cmFuc2Zvcm1SZXBseSkge1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc0NsaWVudE11bHRpQ29tbWFuZF9tdWx0aSwgXCJmXCIpLmFkZENvbW1hbmQoYXJncywgdHJhbnNmb3JtUmVwbHkpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgZnVuY3Rpb25zRXhlY3V0b3IoZm4sIGFyZ3MsIG5hbWUpIHtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUmVkaXNDbGllbnRNdWx0aUNvbW1hbmRfbXVsdGksIFwiZlwiKS5hZGRGdW5jdGlvbihuYW1lLCBmbiwgYXJncyk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBzY3JpcHRzRXhlY3V0b3Ioc2NyaXB0LCBhcmdzKSB7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzQ2xpZW50TXVsdGlDb21tYW5kX211bHRpLCBcImZcIikuYWRkU2NyaXB0KHNjcmlwdCwgYXJncyk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBhc3luYyBleGVjKGV4ZWNBc1BpcGVsaW5lID0gZmFsc2UpIHtcbiAgICAgICAgaWYgKGV4ZWNBc1BpcGVsaW5lKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5leGVjQXNQaXBlbGluZSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc0NsaWVudE11bHRpQ29tbWFuZF9tdWx0aSwgXCJmXCIpLmhhbmRsZUV4ZWNSZXBsaWVzKGF3YWl0IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzQ2xpZW50TXVsdGlDb21tYW5kX2V4ZWN1dG9yLCBcImZcIikuY2FsbCh0aGlzLCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc0NsaWVudE11bHRpQ29tbWFuZF9tdWx0aSwgXCJmXCIpLnF1ZXVlLCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc0NsaWVudE11bHRpQ29tbWFuZF9zZWxlY3RlZERCLCBcImZcIiksIG11bHRpX2NvbW1hbmRfMS5kZWZhdWx0LmdlbmVyYXRlQ2hhaW5JZCgpKSk7XG4gICAgfVxuICAgIGFzeW5jIGV4ZWNBc1BpcGVsaW5lKCkge1xuICAgICAgICBpZiAoX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUmVkaXNDbGllbnRNdWx0aUNvbW1hbmRfbXVsdGksIFwiZlwiKS5xdWV1ZS5sZW5ndGggPT09IDApXG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIHJldHVybiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc0NsaWVudE11bHRpQ29tbWFuZF9tdWx0aSwgXCJmXCIpLnRyYW5zZm9ybVJlcGxpZXMoYXdhaXQgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUmVkaXNDbGllbnRNdWx0aUNvbW1hbmRfZXhlY3V0b3IsIFwiZlwiKS5jYWxsKHRoaXMsIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzQ2xpZW50TXVsdGlDb21tYW5kX211bHRpLCBcImZcIikucXVldWUsIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzQ2xpZW50TXVsdGlDb21tYW5kX3NlbGVjdGVkREIsIFwiZlwiKSkpO1xuICAgIH1cbn1cbl9SZWRpc0NsaWVudE11bHRpQ29tbWFuZF9tdWx0aSA9IG5ldyBXZWFrTWFwKCksIF9SZWRpc0NsaWVudE11bHRpQ29tbWFuZF9leGVjdXRvciA9IG5ldyBXZWFrTWFwKCksIF9SZWRpc0NsaWVudE11bHRpQ29tbWFuZF9zZWxlY3RlZERCID0gbmV3IFdlYWtNYXAoKSwgX1JlZGlzQ2xpZW50TXVsdGlDb21tYW5kX2luc3RhbmNlcyA9IG5ldyBXZWFrU2V0KCksIF9SZWRpc0NsaWVudE11bHRpQ29tbWFuZF9sZWdhY3lNb2RlID0gZnVuY3Rpb24gX1JlZGlzQ2xpZW50TXVsdGlDb21tYW5kX2xlZ2FjeU1vZGUoKSB7XG4gICAgdmFyIF9hLCBfYjtcbiAgICB0aGlzLnY0LmFkZENvbW1hbmQgPSB0aGlzLmFkZENvbW1hbmQuYmluZCh0aGlzKTtcbiAgICB0aGlzLmFkZENvbW1hbmQgPSAoLi4uYXJncykgPT4ge1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc0NsaWVudE11bHRpQ29tbWFuZF9tdWx0aSwgXCJmXCIpLmFkZENvbW1hbmQoKDAsIGNvbW1hbmRlcl8xLnRyYW5zZm9ybUxlZ2FjeUNvbW1hbmRBcmd1bWVudHMpKGFyZ3MpKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICB0aGlzLnY0LmV4ZWMgPSB0aGlzLmV4ZWMuYmluZCh0aGlzKTtcbiAgICB0aGlzLmV4ZWMgPSAoY2FsbGJhY2spID0+IHtcbiAgICAgICAgdGhpcy52NC5leGVjKClcbiAgICAgICAgICAgIC50aGVuKChyZXBseSkgPT4ge1xuICAgICAgICAgICAgaWYgKCFjYWxsYmFjaylcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBjYWxsYmFjayhudWxsLCByZXBseSk7XG4gICAgICAgIH0pXG4gICAgICAgICAgICAuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAgICAgaWYgKCFjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIC8vIHRoaXMuZW1pdCgnZXJyb3InLCBlcnIpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgZm9yIChjb25zdCBbbmFtZSwgY29tbWFuZF0gb2YgT2JqZWN0LmVudHJpZXMoY29tbWFuZHNfMS5kZWZhdWx0KSkge1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc0NsaWVudE11bHRpQ29tbWFuZF9pbnN0YW5jZXMsIFwibVwiLCBfUmVkaXNDbGllbnRNdWx0aUNvbW1hbmRfZGVmaW5lTGVnYWN5Q29tbWFuZCkuY2FsbCh0aGlzLCBuYW1lLCBjb21tYW5kKTtcbiAgICAgICAgKF9hID0gdGhpcylbX2IgPSBuYW1lLnRvTG93ZXJDYXNlKCldID8/IChfYVtfYl0gPSB0aGlzW25hbWVdKTtcbiAgICB9XG59LCBfUmVkaXNDbGllbnRNdWx0aUNvbW1hbmRfZGVmaW5lTGVnYWN5Q29tbWFuZCA9IGZ1bmN0aW9uIF9SZWRpc0NsaWVudE11bHRpQ29tbWFuZF9kZWZpbmVMZWdhY3lDb21tYW5kKG5hbWUsIGNvbW1hbmQpIHtcbiAgICB0aGlzLnY0W25hbWVdID0gdGhpc1tuYW1lXS5iaW5kKHRoaXMudjQpO1xuICAgIHRoaXNbbmFtZV0gPSBjb21tYW5kICYmIGNvbW1hbmQuVFJBTlNGT1JNX0xFR0FDWV9SRVBMWSAmJiBjb21tYW5kLnRyYW5zZm9ybVJlcGx5ID9cbiAgICAgICAgKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzQ2xpZW50TXVsdGlDb21tYW5kX211bHRpLCBcImZcIikuYWRkQ29tbWFuZChbbmFtZSwgLi4uKDAsIGNvbW1hbmRlcl8xLnRyYW5zZm9ybUxlZ2FjeUNvbW1hbmRBcmd1bWVudHMpKGFyZ3MpXSwgY29tbWFuZC50cmFuc2Zvcm1SZXBseSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSA6XG4gICAgICAgICguLi5hcmdzKSA9PiB0aGlzLmFkZENvbW1hbmQobmFtZSwgLi4uYXJncyk7XG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gUmVkaXNDbGllbnRNdWx0aUNvbW1hbmQ7XG4oMCwgY29tbWFuZGVyXzEuYXR0YWNoQ29tbWFuZHMpKHtcbiAgICBCYXNlQ2xhc3M6IFJlZGlzQ2xpZW50TXVsdGlDb21tYW5kLFxuICAgIGNvbW1hbmRzOiBjb21tYW5kc18xLmRlZmF1bHQsXG4gICAgZXhlY3V0b3I6IFJlZGlzQ2xpZW50TXVsdGlDb21tYW5kLnByb3RvdHlwZS5jb21tYW5kc0V4ZWN1dG9yXG59KTtcbiIsCiAgICAibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihmYWN0b3J5KSB7XG4gIGlmICh0eXBlb2YgZmFjdG9yeS5jcmVhdGUgIT09IFwiZnVuY3Rpb25cIikge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJmYWN0b3J5LmNyZWF0ZSBtdXN0IGJlIGEgZnVuY3Rpb25cIik7XG4gIH1cblxuICBpZiAodHlwZW9mIGZhY3RvcnkuZGVzdHJveSAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImZhY3RvcnkuZGVzdHJveSBtdXN0IGJlIGEgZnVuY3Rpb25cIik7XG4gIH1cblxuICBpZiAoXG4gICAgdHlwZW9mIGZhY3RvcnkudmFsaWRhdGUgIT09IFwidW5kZWZpbmVkXCIgJiZcbiAgICB0eXBlb2YgZmFjdG9yeS52YWxpZGF0ZSAhPT0gXCJmdW5jdGlvblwiXG4gICkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJmYWN0b3J5LnZhbGlkYXRlIG11c3QgYmUgYSBmdW5jdGlvblwiKTtcbiAgfVxufTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG4vKipcbiAqIENyZWF0ZSB0aGUgZGVmYXVsdCBzZXR0aW5ncyB1c2VkIGJ5IHRoZSBwb29sXG4gKlxuICogQGNsYXNzXG4gKi9cbmNsYXNzIFBvb2xEZWZhdWx0cyB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuZmlmbyA9IHRydWU7XG4gICAgdGhpcy5wcmlvcml0eVJhbmdlID0gMTtcblxuICAgIHRoaXMudGVzdE9uQm9ycm93ID0gZmFsc2U7XG4gICAgdGhpcy50ZXN0T25SZXR1cm4gPSBmYWxzZTtcblxuICAgIHRoaXMuYXV0b3N0YXJ0ID0gdHJ1ZTtcblxuICAgIHRoaXMuZXZpY3Rpb25SdW5JbnRlcnZhbE1pbGxpcyA9IDA7XG4gICAgdGhpcy5udW1UZXN0c1BlckV2aWN0aW9uUnVuID0gMztcbiAgICB0aGlzLnNvZnRJZGxlVGltZW91dE1pbGxpcyA9IC0xO1xuICAgIHRoaXMuaWRsZVRpbWVvdXRNaWxsaXMgPSAzMDAwMDtcblxuICAgIC8vIEZJWE1FOiBubyBkZWZhdWx0cyFcbiAgICB0aGlzLmFjcXVpcmVUaW1lb3V0TWlsbGlzID0gbnVsbDtcbiAgICB0aGlzLmRlc3Ryb3lUaW1lb3V0TWlsbGlzID0gbnVsbDtcbiAgICB0aGlzLm1heFdhaXRpbmdDbGllbnRzID0gbnVsbDtcblxuICAgIHRoaXMubWluID0gbnVsbDtcbiAgICB0aGlzLm1heCA9IG51bGw7XG4gICAgLy8gRklYTUU6IHRoaXMgc2VlbXMgb2RkP1xuICAgIHRoaXMuUHJvbWlzZSA9IFByb21pc2U7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBQb29sRGVmYXVsdHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBQb29sRGVmYXVsdHMgPSByZXF1aXJlKFwiLi9Qb29sRGVmYXVsdHNcIik7XG5cbmNsYXNzIFBvb2xPcHRpb25zIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzXG4gICAqICAgY29uZmlndXJhdGlvbiBmb3IgdGhlIHBvb2xcbiAgICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRzLm1heD1udWxsXVxuICAgKiAgIE1heGltdW0gbnVtYmVyIG9mIGl0ZW1zIHRoYXQgY2FuIGV4aXN0IGF0IHRoZSBzYW1lIHRpbWUuICBEZWZhdWx0OiAxLlxuICAgKiAgIEFueSBmdXJ0aGVyIGFjcXVpcmUgcmVxdWVzdHMgd2lsbCBiZSBwdXNoZWQgdG8gdGhlIHdhaXRpbmcgbGlzdC5cbiAgICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRzLm1pbj1udWxsXVxuICAgKiAgIE1pbmltdW0gbnVtYmVyIG9mIGl0ZW1zIGluIHBvb2wgKGluY2x1ZGluZyBpbi11c2UpLiBEZWZhdWx0OiAwLlxuICAgKiAgIFdoZW4gdGhlIHBvb2wgaXMgY3JlYXRlZCwgb3IgYSByZXNvdXJjZSBkZXN0cm95ZWQsIHRoaXMgbWluaW11bSB3aWxsXG4gICAqICAgYmUgY2hlY2tlZC4gSWYgdGhlIHBvb2wgcmVzb3VyY2UgY291bnQgaXMgYmVsb3cgdGhlIG1pbmltdW0sIGEgbmV3XG4gICAqICAgcmVzb3VyY2Ugd2lsbCBiZSBjcmVhdGVkIGFuZCBhZGRlZCB0byB0aGUgcG9vbC5cbiAgICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRzLm1heFdhaXRpbmdDbGllbnRzPW51bGxdXG4gICAqICAgbWF4aW11bSBudW1iZXIgb2YgcXVldWVkIHJlcXVlc3RzIGFsbG93ZWQgYWZ0ZXIgd2hpY2ggYWNxdWlyZSBjYWxscyB3aWxsIGJlIHJlamVjdGVkXG4gICAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdHMudGVzdE9uQm9ycm93PWZhbHNlXVxuICAgKiAgIHNob3VsZCB0aGUgcG9vbCB2YWxpZGF0ZSByZXNvdXJjZXMgYmVmb3JlIGdpdmluZyB0aGVtIHRvIGNsaWVudHMuIFJlcXVpcmVzIHRoYXRcbiAgICogICBgZmFjdG9yeS52YWxpZGF0ZWAgaXMgc3BlY2lmaWVkLlxuICAgKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRzLnRlc3RPblJldHVybj1mYWxzZV1cbiAgICogICBzaG91bGQgdGhlIHBvb2wgdmFsaWRhdGUgcmVzb3VyY2VzIGJlZm9yZSByZXR1cm5pbmcgdGhlbSB0byB0aGUgcG9vbC5cbiAgICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRzLmFjcXVpcmVUaW1lb3V0TWlsbGlzPW51bGxdXG4gICAqICAgRGVsYXkgaW4gbWlsbGlzZWNvbmRzIGFmdGVyIHdoaWNoIHRoZSBhbiBgYWNxdWlyZWAgY2FsbCB3aWxsIGZhaWwuIG9wdGlvbmFsLlxuICAgKiAgIERlZmF1bHQ6IHVuZGVmaW5lZC4gU2hvdWxkIGJlIHBvc2l0aXZlIGFuZCBub24temVyb1xuICAgKiBAcGFyYW0ge051bWJlcn0gW29wdHMuZGVzdHJveVRpbWVvdXRNaWxsaXM9bnVsbF1cbiAgICogICBEZWxheSBpbiBtaWxsaXNlY29uZHMgYWZ0ZXIgd2hpY2ggdGhlIGFuIGBkZXN0cm95YCBjYWxsIHdpbGwgZmFpbCwgY2F1c2luZyBpdCB0byBlbWl0IGEgZmFjdG9yeURlc3Ryb3lFcnJvciBldmVudC4gb3B0aW9uYWwuXG4gICAqICAgRGVmYXVsdDogdW5kZWZpbmVkLiBTaG91bGQgYmUgcG9zaXRpdmUgYW5kIG5vbi16ZXJvXG4gICAqIEBwYXJhbSB7TnVtYmVyfSBbb3B0cy5wcmlvcml0eVJhbmdlPTFdXG4gICAqICAgVGhlIHJhbmdlIGZyb20gMSB0byBiZSB0cmVhdGVkIGFzIGEgdmFsaWQgcHJpb3JpdHlcbiAgICogQHBhcmFtIHtCb29sZWFufSBbb3B0cy5maWZvPXRydWVdXG4gICAqICAgU2V0cyB3aGV0aGVyIHRoZSBwb29sIGhhcyBMSUZPIChsYXN0IGluLCBmaXJzdCBvdXQpIGJlaGF2aW91ciB3aXRoIHJlc3BlY3QgdG8gaWRsZSBvYmplY3RzLlxuICAgKiAgIGlmIGZhbHNlIHRoZW4gcG9vbCBoYXMgRklGTyBiZWhhdmlvdXJcbiAgICogQHBhcmFtIHtCb29sZWFufSBbb3B0cy5hdXRvc3RhcnQ9dHJ1ZV1cbiAgICogICBTaG91bGQgdGhlIHBvb2wgc3RhcnQgY3JlYXRpbmcgcmVzb3VyY2VzIGV0YyBvbmNlIHRoZSBjb25zdHJ1Y3RvciBpcyBjYWxsZWRcbiAgICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRzLmV2aWN0aW9uUnVuSW50ZXJ2YWxNaWxsaXM9MF1cbiAgICogICBIb3cgb2Z0ZW4gdG8gcnVuIGV2aWN0aW9uIGNoZWNrcy4gIERlZmF1bHQ6IDAgKGRvZXMgbm90IHJ1bikuXG4gICAqIEBwYXJhbSB7TnVtYmVyfSBbb3B0cy5udW1UZXN0c1BlckV2aWN0aW9uUnVuPTNdXG4gICAqICAgTnVtYmVyIG9mIHJlc291cmNlcyB0byBjaGVjayBlYWNoIGV2aWN0aW9uIHJ1bi4gIERlZmF1bHQ6IDMuXG4gICAqIEBwYXJhbSB7TnVtYmVyfSBbb3B0cy5zb2Z0SWRsZVRpbWVvdXRNaWxsaXM9LTFdXG4gICAqICAgYW1vdW50IG9mIHRpbWUgYW4gb2JqZWN0IG1heSBzaXQgaWRsZSBpbiB0aGUgcG9vbCBiZWZvcmUgaXQgaXMgZWxpZ2libGVcbiAgICogICBmb3IgZXZpY3Rpb24gYnkgdGhlIGlkbGUgb2JqZWN0IGV2aWN0b3IgKGlmIGFueSksIHdpdGggdGhlIGV4dHJhIGNvbmRpdGlvblxuICAgKiAgIHRoYXQgYXQgbGVhc3QgXCJtaW4gaWRsZVwiIG9iamVjdCBpbnN0YW5jZXMgcmVtYWluIGluIHRoZSBwb29sLiBEZWZhdWx0IC0xIChub3RoaW5nIGNhbiBnZXQgZXZpY3RlZClcbiAgICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRzLmlkbGVUaW1lb3V0TWlsbGlzPTMwMDAwXVxuICAgKiAgIHRoZSBtaW5pbXVtIGFtb3VudCBvZiB0aW1lIHRoYXQgYW4gb2JqZWN0IG1heSBzaXQgaWRsZSBpbiB0aGUgcG9vbCBiZWZvcmUgaXQgaXMgZWxpZ2libGUgZm9yIGV2aWN0aW9uXG4gICAqICAgZHVlIHRvIGlkbGUgdGltZS4gU3VwZXJjZWRlcyBcInNvZnRJZGxlVGltZW91dE1pbGxpc1wiIERlZmF1bHQ6IDMwMDAwXG4gICAqIEBwYXJhbSB7dHlwZW9mIFByb21pc2V9IFtvcHRzLlByb21pc2U9UHJvbWlzZV1cbiAgICogICBXaGF0IHByb21pc2UgaW1wbGVtZW50YXRpb24gc2hvdWxkIHRoZSBwb29sIHVzZSwgZGVmYXVsdHMgdG8gbmF0aXZlIHByb21pc2VzLlxuICAgKi9cbiAgY29uc3RydWN0b3Iob3B0cykge1xuICAgIGNvbnN0IHBvb2xEZWZhdWx0cyA9IG5ldyBQb29sRGVmYXVsdHMoKTtcblxuICAgIG9wdHMgPSBvcHRzIHx8IHt9O1xuXG4gICAgdGhpcy5maWZvID0gdHlwZW9mIG9wdHMuZmlmbyA9PT0gXCJib29sZWFuXCIgPyBvcHRzLmZpZm8gOiBwb29sRGVmYXVsdHMuZmlmbztcbiAgICB0aGlzLnByaW9yaXR5UmFuZ2UgPSBvcHRzLnByaW9yaXR5UmFuZ2UgfHwgcG9vbERlZmF1bHRzLnByaW9yaXR5UmFuZ2U7XG5cbiAgICB0aGlzLnRlc3RPbkJvcnJvdyA9XG4gICAgICB0eXBlb2Ygb3B0cy50ZXN0T25Cb3Jyb3cgPT09IFwiYm9vbGVhblwiXG4gICAgICAgID8gb3B0cy50ZXN0T25Cb3Jyb3dcbiAgICAgICAgOiBwb29sRGVmYXVsdHMudGVzdE9uQm9ycm93O1xuICAgIHRoaXMudGVzdE9uUmV0dXJuID1cbiAgICAgIHR5cGVvZiBvcHRzLnRlc3RPblJldHVybiA9PT0gXCJib29sZWFuXCJcbiAgICAgICAgPyBvcHRzLnRlc3RPblJldHVyblxuICAgICAgICA6IHBvb2xEZWZhdWx0cy50ZXN0T25SZXR1cm47XG5cbiAgICB0aGlzLmF1dG9zdGFydCA9XG4gICAgICB0eXBlb2Ygb3B0cy5hdXRvc3RhcnQgPT09IFwiYm9vbGVhblwiXG4gICAgICAgID8gb3B0cy5hdXRvc3RhcnRcbiAgICAgICAgOiBwb29sRGVmYXVsdHMuYXV0b3N0YXJ0O1xuXG4gICAgaWYgKG9wdHMuYWNxdWlyZVRpbWVvdXRNaWxsaXMpIHtcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIHRoaXMuYWNxdWlyZVRpbWVvdXRNaWxsaXMgPSBwYXJzZUludChvcHRzLmFjcXVpcmVUaW1lb3V0TWlsbGlzLCAxMCk7XG4gICAgfVxuXG4gICAgaWYgKG9wdHMuZGVzdHJveVRpbWVvdXRNaWxsaXMpIHtcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIHRoaXMuZGVzdHJveVRpbWVvdXRNaWxsaXMgPSBwYXJzZUludChvcHRzLmRlc3Ryb3lUaW1lb3V0TWlsbGlzLCAxMCk7XG4gICAgfVxuXG4gICAgaWYgKG9wdHMubWF4V2FpdGluZ0NsaWVudHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgdGhpcy5tYXhXYWl0aW5nQ2xpZW50cyA9IHBhcnNlSW50KG9wdHMubWF4V2FpdGluZ0NsaWVudHMsIDEwKTtcbiAgICB9XG5cbiAgICAvLyBAdHMtaWdub3JlXG4gICAgdGhpcy5tYXggPSBwYXJzZUludChvcHRzLm1heCwgMTApO1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICB0aGlzLm1pbiA9IHBhcnNlSW50KG9wdHMubWluLCAxMCk7XG5cbiAgICB0aGlzLm1heCA9IE1hdGgubWF4KGlzTmFOKHRoaXMubWF4KSA/IDEgOiB0aGlzLm1heCwgMSk7XG4gICAgdGhpcy5taW4gPSBNYXRoLm1pbihpc05hTih0aGlzLm1pbikgPyAwIDogdGhpcy5taW4sIHRoaXMubWF4KTtcblxuICAgIHRoaXMuZXZpY3Rpb25SdW5JbnRlcnZhbE1pbGxpcyA9XG4gICAgICBvcHRzLmV2aWN0aW9uUnVuSW50ZXJ2YWxNaWxsaXMgfHwgcG9vbERlZmF1bHRzLmV2aWN0aW9uUnVuSW50ZXJ2YWxNaWxsaXM7XG4gICAgdGhpcy5udW1UZXN0c1BlckV2aWN0aW9uUnVuID1cbiAgICAgIG9wdHMubnVtVGVzdHNQZXJFdmljdGlvblJ1biB8fCBwb29sRGVmYXVsdHMubnVtVGVzdHNQZXJFdmljdGlvblJ1bjtcbiAgICB0aGlzLnNvZnRJZGxlVGltZW91dE1pbGxpcyA9XG4gICAgICBvcHRzLnNvZnRJZGxlVGltZW91dE1pbGxpcyB8fCBwb29sRGVmYXVsdHMuc29mdElkbGVUaW1lb3V0TWlsbGlzO1xuICAgIHRoaXMuaWRsZVRpbWVvdXRNaWxsaXMgPVxuICAgICAgb3B0cy5pZGxlVGltZW91dE1pbGxpcyB8fCBwb29sRGVmYXVsdHMuaWRsZVRpbWVvdXRNaWxsaXM7XG5cbiAgICB0aGlzLlByb21pc2UgPSBvcHRzLlByb21pc2UgIT0gbnVsbCA/IG9wdHMuUHJvbWlzZSA6IHBvb2xEZWZhdWx0cy5Qcm9taXNlO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gUG9vbE9wdGlvbnM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuXG4vKipcbiAqIFRoaXMgaXMgYXBwYXJlbnRseSBhIGJpdCBsaWtlIGEgSnF1ZXJ5IGRlZmVycmVkLCBoZW5jZSB0aGUgbmFtZVxuICovXG5cbmNsYXNzIERlZmVycmVkIHtcbiAgY29uc3RydWN0b3IoUHJvbWlzZSkge1xuICAgIHRoaXMuX3N0YXRlID0gRGVmZXJyZWQuUEVORElORztcbiAgICB0aGlzLl9yZXNvbHZlID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuX3JlamVjdCA9IHVuZGVmaW5lZDtcblxuICAgIHRoaXMuX3Byb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLl9yZXNvbHZlID0gcmVzb2x2ZTtcbiAgICAgIHRoaXMuX3JlamVjdCA9IHJlamVjdDtcbiAgICB9KTtcbiAgfVxuXG4gIGdldCBzdGF0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhdGU7XG4gIH1cblxuICBnZXQgcHJvbWlzZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fcHJvbWlzZTtcbiAgfVxuXG4gIHJlamVjdChyZWFzb24pIHtcbiAgICBpZiAodGhpcy5fc3RhdGUgIT09IERlZmVycmVkLlBFTkRJTkcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fc3RhdGUgPSBEZWZlcnJlZC5SRUpFQ1RFRDtcbiAgICB0aGlzLl9yZWplY3QocmVhc29uKTtcbiAgfVxuXG4gIHJlc29sdmUodmFsdWUpIHtcbiAgICBpZiAodGhpcy5fc3RhdGUgIT09IERlZmVycmVkLlBFTkRJTkcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fc3RhdGUgPSBEZWZlcnJlZC5GVUxGSUxMRUQ7XG4gICAgdGhpcy5fcmVzb2x2ZSh2YWx1ZSk7XG4gIH1cbn1cblxuLy8gVE9ETzogc2hvdWxkIHRoZXNlIHJlYWxseSBsaXZlIGhlcmU/IG9yIGJlIGEgc2VwZXJhdGUgJ3N0YXRlJyBlbnVtXG5EZWZlcnJlZC5QRU5ESU5HID0gXCJQRU5ESU5HXCI7XG5EZWZlcnJlZC5GVUxGSUxMRUQgPSBcIkZVTEZJTExFRFwiO1xuRGVmZXJyZWQuUkVKRUNURUQgPSBcIlJFSkVDVEVEXCI7XG5cbm1vZHVsZS5leHBvcnRzID0gRGVmZXJyZWQ7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuXG5jbGFzcyBFeHRlbmRhYmxlRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKTtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgdGhpcy5uYW1lID0gdGhpcy5jb25zdHJ1Y3Rvci5uYW1lO1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgaWYgKHR5cGVvZiBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCB0aGlzLmNvbnN0cnVjdG9yKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zdGFjayA9IG5ldyBFcnJvcihtZXNzYWdlKS5zdGFjaztcbiAgICB9XG4gIH1cbn1cblxuLyogZXNsaW50LWRpc2FibGUgbm8tdXNlbGVzcy1jb25zdHJ1Y3RvciAqL1xuY2xhc3MgVGltZW91dEVycm9yIGV4dGVuZHMgRXh0ZW5kYWJsZUVycm9yIHtcbiAgY29uc3RydWN0b3IobSkge1xuICAgIHN1cGVyKG0pO1xuICB9XG59XG4vKiBlc2xpbnQtZW5hYmxlIG5vLXVzZWxlc3MtY29uc3RydWN0b3IgKi9cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIFRpbWVvdXRFcnJvcjogVGltZW91dEVycm9yXG59O1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgRGVmZXJyZWQgPSByZXF1aXJlKFwiLi9EZWZlcnJlZFwiKTtcbmNvbnN0IGVycm9ycyA9IHJlcXVpcmUoXCIuL2Vycm9yc1wiKTtcblxuZnVuY3Rpb24gZmJpbmQoZm4sIGN0eCkge1xuICByZXR1cm4gZnVuY3Rpb24gYm91bmQoKSB7XG4gICAgcmV0dXJuIGZuLmFwcGx5KGN0eCwgYXJndW1lbnRzKTtcbiAgfTtcbn1cblxuLyoqXG4gKiBXcmFwcyBhIHVzZXJzIHJlcXVlc3QgZm9yIGEgcmVzb3VyY2VcbiAqIEJhc2ljYWxseSBhIHByb21pc2UgbWFzaGVkIGluIHdpdGggYSB0aW1lb3V0XG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBSZXNvdXJjZVJlcXVlc3QgZXh0ZW5kcyBEZWZlcnJlZCB7XG4gIC8qKlxuICAgKiBbY29uc3RydWN0b3IgZGVzY3JpcHRpb25dXG4gICAqIEBwYXJhbSAge051bWJlcn0gdHRsICAgICB0aW1lb3V0XG4gICAqL1xuICBjb25zdHJ1Y3Rvcih0dGwsIFByb21pc2UpIHtcbiAgICBzdXBlcihQcm9taXNlKTtcbiAgICB0aGlzLl9jcmVhdGlvblRpbWVzdGFtcCA9IERhdGUubm93KCk7XG4gICAgdGhpcy5fdGltZW91dCA9IG51bGw7XG5cbiAgICBpZiAodHRsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuc2V0VGltZW91dCh0dGwpO1xuICAgIH1cbiAgfVxuXG4gIHNldFRpbWVvdXQoZGVsYXkpIHtcbiAgICBpZiAodGhpcy5fc3RhdGUgIT09IFJlc291cmNlUmVxdWVzdC5QRU5ESU5HKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHR0bCA9IHBhcnNlSW50KGRlbGF5LCAxMCk7XG5cbiAgICBpZiAoaXNOYU4odHRsKSB8fCB0dGwgPD0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZGVsYXkgbXVzdCBiZSBhIHBvc2l0aXZlIGludFwiKTtcbiAgICB9XG5cbiAgICBjb25zdCBhZ2UgPSBEYXRlLm5vdygpIC0gdGhpcy5fY3JlYXRpb25UaW1lc3RhbXA7XG5cbiAgICBpZiAodGhpcy5fdGltZW91dCkge1xuICAgICAgdGhpcy5yZW1vdmVUaW1lb3V0KCk7XG4gICAgfVxuXG4gICAgdGhpcy5fdGltZW91dCA9IHNldFRpbWVvdXQoXG4gICAgICBmYmluZCh0aGlzLl9maXJlVGltZW91dCwgdGhpcyksXG4gICAgICBNYXRoLm1heCh0dGwgLSBhZ2UsIDApXG4gICAgKTtcbiAgfVxuXG4gIHJlbW92ZVRpbWVvdXQoKSB7XG4gICAgaWYgKHRoaXMuX3RpbWVvdXQpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLl90aW1lb3V0KTtcbiAgICB9XG4gICAgdGhpcy5fdGltZW91dCA9IG51bGw7XG4gIH1cblxuICBfZmlyZVRpbWVvdXQoKSB7XG4gICAgdGhpcy5yZWplY3QobmV3IGVycm9ycy5UaW1lb3V0RXJyb3IoXCJSZXNvdXJjZVJlcXVlc3QgdGltZWQgb3V0XCIpKTtcbiAgfVxuXG4gIHJlamVjdChyZWFzb24pIHtcbiAgICB0aGlzLnJlbW92ZVRpbWVvdXQoKTtcbiAgICBzdXBlci5yZWplY3QocmVhc29uKTtcbiAgfVxuXG4gIHJlc29sdmUodmFsdWUpIHtcbiAgICB0aGlzLnJlbW92ZVRpbWVvdXQoKTtcbiAgICBzdXBlci5yZXNvbHZlKHZhbHVlKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFJlc291cmNlUmVxdWVzdDtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IERlZmVycmVkID0gcmVxdWlyZShcIi4vRGVmZXJyZWRcIik7XG5cbi8qKlxuICogUGxhbiBpcyB0byBtYXliZSBhZGQgdHJhY2tpbmcgdmlhIEVycm9yIG9iamVjdHNcbiAqIGFuZCBvdGhlciBmdW4gc3R1ZmYhXG4gKi9cblxuY2xhc3MgUmVzb3VyY2VMb2FuIGV4dGVuZHMgRGVmZXJyZWQge1xuICAvKipcbiAgICpcbiAgICogQHBhcmFtICB7YW55fSBwb29sZWRSZXNvdXJjZSB0aGUgUG9vbGVkUmVzb3VyY2UgdGhpcyBsb2FuIGJlbG9uZ3MgdG9cbiAgICogQHJldHVybiB7YW55fSAgICAgICAgICAgICAgICBbZGVzY3JpcHRpb25dXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihwb29sZWRSZXNvdXJjZSwgUHJvbWlzZSkge1xuICAgIHN1cGVyKFByb21pc2UpO1xuICAgIHRoaXMuX2NyZWF0aW9uVGltZXN0YW1wID0gRGF0ZS5ub3coKTtcbiAgICB0aGlzLnBvb2xlZFJlc291cmNlID0gcG9vbGVkUmVzb3VyY2U7XG4gIH1cblxuICByZWplY3QoKSB7XG4gICAgLyoqXG4gICAgICogTG9hbnMgY2FuIG9ubHkgYmUgcmVzb2x2ZWQgYXQgdGhlIG1vbWVudFxuICAgICAqL1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gUmVzb3VyY2VMb2FuO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgUG9vbGVkUmVzb3VyY2VTdGF0ZUVudW0gPSB7XG4gIEFMTE9DQVRFRDogXCJBTExPQ0FURURcIiwgLy8gSW4gdXNlXG4gIElETEU6IFwiSURMRVwiLCAvLyBJbiB0aGUgcXVldWUsIG5vdCBpbiB1c2UuXG4gIElOVkFMSUQ6IFwiSU5WQUxJRFwiLCAvLyBGYWlsZWQgdmFsaWRhdGlvblxuICBSRVRVUk5JTkc6IFwiUkVUVVJOSU5HXCIsIC8vIFJlc291cmNlIGlzIGluIHByb2Nlc3Mgb2YgcmV0dXJuaW5nXG4gIFZBTElEQVRJT046IFwiVkFMSURBVElPTlwiIC8vIEN1cnJlbnRseSBiZWluZyB0ZXN0ZWRcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUG9vbGVkUmVzb3VyY2VTdGF0ZUVudW07XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBQb29sZWRSZXNvdXJjZVN0YXRlRW51bSA9IHJlcXVpcmUoXCIuL1Bvb2xlZFJlc291cmNlU3RhdGVFbnVtXCIpO1xuXG4vKipcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqL1xuY2xhc3MgUG9vbGVkUmVzb3VyY2Uge1xuICBjb25zdHJ1Y3RvcihyZXNvdXJjZSkge1xuICAgIHRoaXMuY3JlYXRpb25UaW1lID0gRGF0ZS5ub3coKTtcbiAgICB0aGlzLmxhc3RSZXR1cm5UaW1lID0gbnVsbDtcbiAgICB0aGlzLmxhc3RCb3Jyb3dUaW1lID0gbnVsbDtcbiAgICB0aGlzLmxhc3RJZGxlVGltZSA9IG51bGw7XG4gICAgdGhpcy5vYmogPSByZXNvdXJjZTtcbiAgICB0aGlzLnN0YXRlID0gUG9vbGVkUmVzb3VyY2VTdGF0ZUVudW0uSURMRTtcbiAgfVxuXG4gIC8vIG1hcmsgdGhlIHJlc291cmNlIGFzIFwiYWxsb2NhdGVkXCJcbiAgYWxsb2NhdGUoKSB7XG4gICAgdGhpcy5sYXN0Qm9ycm93VGltZSA9IERhdGUubm93KCk7XG4gICAgdGhpcy5zdGF0ZSA9IFBvb2xlZFJlc291cmNlU3RhdGVFbnVtLkFMTE9DQVRFRDtcbiAgfVxuXG4gIC8vIG1hcmsgdGhlIHJlc291cmNlIGFzIFwiZGVhbGxvY2F0ZWRcIlxuICBkZWFsbG9jYXRlKCkge1xuICAgIHRoaXMubGFzdFJldHVyblRpbWUgPSBEYXRlLm5vdygpO1xuICAgIHRoaXMuc3RhdGUgPSBQb29sZWRSZXNvdXJjZVN0YXRlRW51bS5JRExFO1xuICB9XG5cbiAgaW52YWxpZGF0ZSgpIHtcbiAgICB0aGlzLnN0YXRlID0gUG9vbGVkUmVzb3VyY2VTdGF0ZUVudW0uSU5WQUxJRDtcbiAgfVxuXG4gIHRlc3QoKSB7XG4gICAgdGhpcy5zdGF0ZSA9IFBvb2xlZFJlc291cmNlU3RhdGVFbnVtLlZBTElEQVRJT047XG4gIH1cblxuICBpZGxlKCkge1xuICAgIHRoaXMubGFzdElkbGVUaW1lID0gRGF0ZS5ub3coKTtcbiAgICB0aGlzLnN0YXRlID0gUG9vbGVkUmVzb3VyY2VTdGF0ZUVudW0uSURMRTtcbiAgfVxuXG4gIHJldHVybmluZygpIHtcbiAgICB0aGlzLnN0YXRlID0gUG9vbGVkUmVzb3VyY2VTdGF0ZUVudW0uUkVUVVJOSU5HO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gUG9vbGVkUmVzb3VyY2U7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuXG5jbGFzcyBEZWZhdWx0RXZpY3RvciB7XG4gIGV2aWN0KGNvbmZpZywgcG9vbGVkUmVzb3VyY2UsIGF2YWlsYWJsZU9iamVjdHNDb3VudCkge1xuICAgIGNvbnN0IGlkbGVUaW1lID0gRGF0ZS5ub3coKSAtIHBvb2xlZFJlc291cmNlLmxhc3RJZGxlVGltZTtcblxuICAgIGlmIChcbiAgICAgIGNvbmZpZy5zb2Z0SWRsZVRpbWVvdXRNaWxsaXMgPiAwICYmXG4gICAgICBjb25maWcuc29mdElkbGVUaW1lb3V0TWlsbGlzIDwgaWRsZVRpbWUgJiZcbiAgICAgIGNvbmZpZy5taW4gPCBhdmFpbGFibGVPYmplY3RzQ291bnRcbiAgICApIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmIChjb25maWcuaWRsZVRpbWVvdXRNaWxsaXMgPCBpZGxlVGltZSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gRGVmYXVsdEV2aWN0b3I7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuXG4vKipcbiAqIEEgRG91Ymx5IExpbmtlZCBMaXN0LCBiZWNhdXNlIHRoZXJlIGFyZW4ndCBlbm91Z2ggaW4gdGhlIHdvcmxkLi4uXG4gKiB0aGlzIGlzIHByZXR0eSBtdWNoIGEgZGlyZWN0IEpTIHBvcnQgb2YgdGhlIG9uZSB3aWtpcGVkaWFcbiAqIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0RvdWJseV9saW5rZWRfbGlzdFxuICpcbiAqIEZvciBtb3N0IHVzYWdlICdpbnNlcnRCZWdpbm5pbmcnIGFuZCAnaW5zZXJ0RW5kJyBzaG91bGQgYmUgZW5vdWdoXG4gKlxuICogbm9kZXMgYXJlIGV4cGVjdGVkIHRvIHNvbWV0aGluZyBsaWtlIGEgUE9KU08gbGlrZVxuICoge1xuICogICBwcmV2OiBudWxsLFxuICogICBuZXh0OiBudWxsLFxuICogICBzb21ldGhpbmc6ICd3aGF0ZXZlciB5b3UgbGlrZSdcbiAqIH1cbiAqL1xuY2xhc3MgRG91Ymx5TGlua2VkTGlzdCB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuaGVhZCA9IG51bGw7XG4gICAgdGhpcy50YWlsID0gbnVsbDtcbiAgICB0aGlzLmxlbmd0aCA9IDA7XG4gIH1cblxuICBpbnNlcnRCZWdpbm5pbmcobm9kZSkge1xuICAgIGlmICh0aGlzLmhlYWQgPT09IG51bGwpIHtcbiAgICAgIHRoaXMuaGVhZCA9IG5vZGU7XG4gICAgICB0aGlzLnRhaWwgPSBub2RlO1xuICAgICAgbm9kZS5wcmV2ID0gbnVsbDtcbiAgICAgIG5vZGUubmV4dCA9IG51bGw7XG4gICAgICB0aGlzLmxlbmd0aCsrO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmluc2VydEJlZm9yZSh0aGlzLmhlYWQsIG5vZGUpO1xuICAgIH1cbiAgfVxuXG4gIGluc2VydEVuZChub2RlKSB7XG4gICAgaWYgKHRoaXMudGFpbCA9PT0gbnVsbCkge1xuICAgICAgdGhpcy5pbnNlcnRCZWdpbm5pbmcobm9kZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaW5zZXJ0QWZ0ZXIodGhpcy50YWlsLCBub2RlKTtcbiAgICB9XG4gIH1cblxuICBpbnNlcnRBZnRlcihub2RlLCBuZXdOb2RlKSB7XG4gICAgbmV3Tm9kZS5wcmV2ID0gbm9kZTtcbiAgICBuZXdOb2RlLm5leHQgPSBub2RlLm5leHQ7XG4gICAgaWYgKG5vZGUubmV4dCA9PT0gbnVsbCkge1xuICAgICAgdGhpcy50YWlsID0gbmV3Tm9kZTtcbiAgICB9IGVsc2Uge1xuICAgICAgbm9kZS5uZXh0LnByZXYgPSBuZXdOb2RlO1xuICAgIH1cbiAgICBub2RlLm5leHQgPSBuZXdOb2RlO1xuICAgIHRoaXMubGVuZ3RoKys7XG4gIH1cblxuICBpbnNlcnRCZWZvcmUobm9kZSwgbmV3Tm9kZSkge1xuICAgIG5ld05vZGUucHJldiA9IG5vZGUucHJldjtcbiAgICBuZXdOb2RlLm5leHQgPSBub2RlO1xuICAgIGlmIChub2RlLnByZXYgPT09IG51bGwpIHtcbiAgICAgIHRoaXMuaGVhZCA9IG5ld05vZGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5vZGUucHJldi5uZXh0ID0gbmV3Tm9kZTtcbiAgICB9XG4gICAgbm9kZS5wcmV2ID0gbmV3Tm9kZTtcbiAgICB0aGlzLmxlbmd0aCsrO1xuICB9XG5cbiAgcmVtb3ZlKG5vZGUpIHtcbiAgICBpZiAobm9kZS5wcmV2ID09PSBudWxsKSB7XG4gICAgICB0aGlzLmhlYWQgPSBub2RlLm5leHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5vZGUucHJldi5uZXh0ID0gbm9kZS5uZXh0O1xuICAgIH1cbiAgICBpZiAobm9kZS5uZXh0ID09PSBudWxsKSB7XG4gICAgICB0aGlzLnRhaWwgPSBub2RlLnByZXY7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5vZGUubmV4dC5wcmV2ID0gbm9kZS5wcmV2O1xuICAgIH1cbiAgICBub2RlLnByZXYgPSBudWxsO1xuICAgIG5vZGUubmV4dCA9IG51bGw7XG4gICAgdGhpcy5sZW5ndGgtLTtcbiAgfVxuXG4gIC8vIEZJWE1FOiB0aGlzIHNob3VsZCBub3QgbGl2ZSBoZXJlIGFuZCBoYXMgYmVjb21lIGEgZHVtcGluZyBncm91bmQuLi5cbiAgc3RhdGljIGNyZWF0ZU5vZGUoZGF0YSkge1xuICAgIHJldHVybiB7XG4gICAgICBwcmV2OiBudWxsLFxuICAgICAgbmV4dDogbnVsbCxcbiAgICAgIGRhdGE6IGRhdGFcbiAgICB9O1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gRG91Ymx5TGlua2VkTGlzdDtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBpbnRlcmF0b3IgZm9yIGEgRG91Ymx5TGlua2VkTGlzdCBzdGFydGluZyBhdCB0aGUgZ2l2ZW4gbm9kZVxuICogSXQncyBpbnRlcm5hbCBjdXJzb3Igd2lsbCByZW1haW5zIHJlbGF0aXZlIHRvIHRoZSBsYXN0IFwiaXRlcmF0ZWRcIiBub2RlIGFzIHRoYXRcbiAqIG5vZGUgbW92ZXMgdGhyb3VnaCB0aGUgbGlzdCB1bnRpbCBpdCBlaXRoZXIgaXRlcmF0ZXMgdG8gdGhlIGVuZCBvZiB0aGUgbGlzdCxcbiAqIG9yIHRoZSB0aGUgbm9kZSBpdCdzIHRyYWNraW5nIGlzIHJlbW92ZWQgZnJvbSB0aGUgbGlzdC4gVW50aWwgdGhlIGZpcnN0ICduZXh0J1xuICogY2FsbCBpdCB0cmFja3MgdGhlIGhlYWQvdGFpbCBvZiB0aGUgbGlua2VkIGxpc3QuIFRoaXMgbWVhbnMgdGhhdCBvbmUgY2FuIGNyZWF0ZVxuICogYW4gaXRlcmF0b3Igb24gYW4gZW1wdHkgbGlzdCwgdGhlbiBhZGQgbm9kZXMsIGFuZCB0aGVuIHRoZSBpdGVyYXRvciB3aWxsIGZvbGxvd1xuICogdGhvc2Ugbm9kZXMuIEJlY2F1c2UgdGhlIERvdWJseUxpbmtlZExpc3Qgbm9kZXMgZG9uJ3QgdHJhY2sgdGhlaXIgb3duaW5nIFwibGlzdFwiIGFuZFxuICogaXQncyBoaWdobHkgaW5lZmZpY2llbnQgdG8gd2FsayB0aGUgbGlzdCBmb3IgZXZlcnkgaXRlcmF0aW9uLCB0aGUgaXRlcmF0b3Igd29uJ3Qga25vd1xuICogaWYgdGhlIG5vZGUgaGFzIGJlZW4gZGV0YWNoZWQgZnJvbSBvbmUgTGlzdCBhbmQgYWRkZWQgdG8gYW5vdGhlciBsaXN0LCBvciBpZiB0aGUgaXRlcmF0b3JcbiAqXG4gKiBUaGUgY3JlYXRlZCBvYmplY3QgaXMgYW4gZXM2IGNvbXBhdGlibGUgaXRlcmF0b3JcbiAqL1xuY2xhc3MgRG91Ymx5TGlua2VkTGlzdEl0ZXJhdG9yIHtcbiAgLyoqXG4gICAqIEBwYXJhbSAge09iamVjdH0gZG91Ymx5TGlua2VkTGlzdCAgICAgYSBub2RlIHRoYXQgaXMgcGFydCBvZiBhIGRvdWJseUxpbmtlZExpc3RcbiAgICogQHBhcmFtICB7Qm9vbGVhbn0gW3JldmVyc2U9ZmFsc2VdICAgICBpcyB0aGlzIGEgcmV2ZXJzZSBpdGVyYXRvcj8gZGVmYXVsdDogZmFsc2VcbiAgICovXG4gIGNvbnN0cnVjdG9yKGRvdWJseUxpbmtlZExpc3QsIHJldmVyc2UpIHtcbiAgICB0aGlzLl9saXN0ID0gZG91Ymx5TGlua2VkTGlzdDtcbiAgICAvLyBOT1RFOiB0aGVzZSBrZXkgbmFtZXMgYXJlIHRpZWQgdG8gdGhlIERvdWJseUxpbmtlZExpc3RJdGVyYXRvclxuICAgIHRoaXMuX2RpcmVjdGlvbiA9IHJldmVyc2UgPT09IHRydWUgPyBcInByZXZcIiA6IFwibmV4dFwiO1xuICAgIHRoaXMuX3N0YXJ0UG9zaXRpb24gPSByZXZlcnNlID09PSB0cnVlID8gXCJ0YWlsXCIgOiBcImhlYWRcIjtcbiAgICB0aGlzLl9zdGFydGVkID0gZmFsc2U7XG4gICAgdGhpcy5fY3Vyc29yID0gbnVsbDtcbiAgICB0aGlzLl9kb25lID0gZmFsc2U7XG4gIH1cblxuICBfc3RhcnQoKSB7XG4gICAgdGhpcy5fY3Vyc29yID0gdGhpcy5fbGlzdFt0aGlzLl9zdGFydFBvc2l0aW9uXTtcbiAgICB0aGlzLl9zdGFydGVkID0gdHJ1ZTtcbiAgfVxuXG4gIF9hZHZhbmNlQ3Vyc29yKCkge1xuICAgIGlmICh0aGlzLl9zdGFydGVkID09PSBmYWxzZSkge1xuICAgICAgdGhpcy5fc3RhcnRlZCA9IHRydWU7XG4gICAgICB0aGlzLl9jdXJzb3IgPSB0aGlzLl9saXN0W3RoaXMuX3N0YXJ0UG9zaXRpb25dO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9jdXJzb3IgPSB0aGlzLl9jdXJzb3JbdGhpcy5fZGlyZWN0aW9uXTtcbiAgfVxuXG4gIHJlc2V0KCkge1xuICAgIHRoaXMuX2RvbmUgPSBmYWxzZTtcbiAgICB0aGlzLl9zdGFydGVkID0gZmFsc2U7XG4gICAgdGhpcy5fY3Vyc29yID0gbnVsbDtcbiAgfVxuXG4gIHJlbW92ZSgpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLl9zdGFydGVkID09PSBmYWxzZSB8fFxuICAgICAgdGhpcy5fZG9uZSA9PT0gdHJ1ZSB8fFxuICAgICAgdGhpcy5faXNDdXJzb3JEZXRhY2hlZCgpXG4gICAgKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMuX2xpc3QucmVtb3ZlKHRoaXMuX2N1cnNvcik7XG4gIH1cblxuICBuZXh0KCkge1xuICAgIGlmICh0aGlzLl9kb25lID09PSB0cnVlKSB7XG4gICAgICByZXR1cm4geyBkb25lOiB0cnVlIH07XG4gICAgfVxuXG4gICAgdGhpcy5fYWR2YW5jZUN1cnNvcigpO1xuXG4gICAgLy8gaWYgdGhlcmUgaXMgbm8gbm9kZSBhdCB0aGUgY3Vyc29yIG9yIHRoZSBub2RlIGF0IHRoZSBjdXJzb3IgaXMgbm8gbG9uZ2VyIHBhcnQgb2ZcbiAgICAvLyBhIGRvdWJseSBsaW5rZWQgbGlzdCB0aGVuIHdlIGFyZSBkb25lL2ZpbmlzaGVkL2thcHV0XG4gICAgaWYgKHRoaXMuX2N1cnNvciA9PT0gbnVsbCB8fCB0aGlzLl9pc0N1cnNvckRldGFjaGVkKCkpIHtcbiAgICAgIHRoaXMuX2RvbmUgPSB0cnVlO1xuICAgICAgcmV0dXJuIHsgZG9uZTogdHJ1ZSB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB2YWx1ZTogdGhpcy5fY3Vyc29yLFxuICAgICAgZG9uZTogZmFsc2VcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIElzIHRoZSBub2RlIGRldGFjaGVkIGZyb20gYSBsaXN0P1xuICAgKiBOT1RFOiB5b3UgY2FuIHRyaWNrL2J5cGFzcy9jb25mdXNlIHRoaXMgY2hlY2sgYnkgcmVtb3ZpbmcgYSBub2RlIGZyb20gb25lIERvdWJseUxpbmtlZExpc3RcbiAgICogYW5kIGFkZGluZyBpdCB0byBhbm90aGVyLlxuICAgKiBUT0RPOiBXZSBjYW4gbWFrZSB0aGlzIHNtYXJ0ZXIgYnkgY2hlY2tpbmcgdGhlIGRpcmVjdGlvbiBvZiB0cmF2ZWwgYW5kIG9ubHkgY2hlY2tpbmdcbiAgICogdGhlIHJlcXVpcmVkIG5leHQvcHJldi9oZWFkL3RhaWwgcmF0aGVyIHRoYW4gYWxsIG9mIHRoZW1cbiAgICogQHJldHVybiB7Qm9vbGVhbn0gICAgICBbZGVzY3JpcHRpb25dXG4gICAqL1xuICBfaXNDdXJzb3JEZXRhY2hlZCgpIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5fY3Vyc29yLnByZXYgPT09IG51bGwgJiZcbiAgICAgIHRoaXMuX2N1cnNvci5uZXh0ID09PSBudWxsICYmXG4gICAgICB0aGlzLl9saXN0LnRhaWwgIT09IHRoaXMuX2N1cnNvciAmJlxuICAgICAgdGhpcy5fbGlzdC5oZWFkICE9PSB0aGlzLl9jdXJzb3JcbiAgICApO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gRG91Ymx5TGlua2VkTGlzdEl0ZXJhdG9yO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgRG91Ymx5TGlua2VkTGlzdEl0ZXJhdG9yID0gcmVxdWlyZShcIi4vRG91Ymx5TGlua2VkTGlzdEl0ZXJhdG9yXCIpO1xuLyoqXG4gKiBUaGluIHdyYXBwZXIgYXJvdW5kIGFuIHVuZGVybHlpbmcgRERMIGl0ZXJhdG9yXG4gKi9cbmNsYXNzIERlcXVlSXRlcmF0b3IgZXh0ZW5kcyBEb3VibHlMaW5rZWRMaXN0SXRlcmF0b3Ige1xuICBuZXh0KCkge1xuICAgIGNvbnN0IHJlc3VsdCA9IHN1cGVyLm5leHQoKTtcblxuICAgIC8vIHVud3JhcCB0aGUgbm9kZS4uLlxuICAgIGlmIChyZXN1bHQudmFsdWUpIHtcbiAgICAgIHJlc3VsdC52YWx1ZSA9IHJlc3VsdC52YWx1ZS5kYXRhO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBEZXF1ZUl0ZXJhdG9yO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgRG91Ymx5TGlua2VkTGlzdCA9IHJlcXVpcmUoXCIuL0RvdWJseUxpbmtlZExpc3RcIik7XG5jb25zdCBEZXF1ZUl0ZXJhdG9yID0gcmVxdWlyZShcIi4vRGVxdWVJdGVyYXRvclwiKTtcbi8qKlxuICogRG91Ymx5TGlua2VkTGlzdCBiYWNrZWQgZG91YmxlIGVuZGVkIHF1ZXVlXG4gKiBpbXBsZW1lbnRzIGp1c3QgZW5vdWdoIHRvIGtlZXAgdGhlIFBvb2xcbiAqL1xuY2xhc3MgRGVxdWUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLl9saXN0ID0gbmV3IERvdWJseUxpbmtlZExpc3QoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiByZW1vdmVzIGFuZCByZXR1cm5zIHRoZSBmaXJzdCBlbGVtZW50IGZyb20gdGhlIHF1ZXVlXG4gICAqIEByZXR1cm4ge2FueX0gW2Rlc2NyaXB0aW9uXVxuICAgKi9cbiAgc2hpZnQoKSB7XG4gICAgaWYgKHRoaXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IG5vZGUgPSB0aGlzLl9saXN0LmhlYWQ7XG4gICAgdGhpcy5fbGlzdC5yZW1vdmUobm9kZSk7XG5cbiAgICByZXR1cm4gbm9kZS5kYXRhO1xuICB9XG5cbiAgLyoqXG4gICAqIGFkZHMgb25lIGVsZW10cyB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBxdWV1ZVxuICAgKiBAcGFyYW0gIHthbnl9IGVsZW1lbnQgW2Rlc2NyaXB0aW9uXVxuICAgKiBAcmV0dXJuIHthbnl9ICAgICAgICAgW2Rlc2NyaXB0aW9uXVxuICAgKi9cbiAgdW5zaGlmdChlbGVtZW50KSB7XG4gICAgY29uc3Qgbm9kZSA9IERvdWJseUxpbmtlZExpc3QuY3JlYXRlTm9kZShlbGVtZW50KTtcblxuICAgIHRoaXMuX2xpc3QuaW5zZXJ0QmVnaW5uaW5nKG5vZGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIGFkZHMgb25lIHRvIHRoZSBlbmQgb2YgdGhlIHF1ZXVlXG4gICAqIEBwYXJhbSAge2FueX0gZWxlbWVudCBbZGVzY3JpcHRpb25dXG4gICAqIEByZXR1cm4ge2FueX0gICAgICAgICBbZGVzY3JpcHRpb25dXG4gICAqL1xuICBwdXNoKGVsZW1lbnQpIHtcbiAgICBjb25zdCBub2RlID0gRG91Ymx5TGlua2VkTGlzdC5jcmVhdGVOb2RlKGVsZW1lbnQpO1xuXG4gICAgdGhpcy5fbGlzdC5pbnNlcnRFbmQobm9kZSk7XG4gIH1cblxuICAvKipcbiAgICogcmVtb3ZlcyBhbmQgcmV0dXJucyB0aGUgbGFzdCBlbGVtZW50IGZyb20gdGhlIHF1ZXVlXG4gICAqL1xuICBwb3AoKSB7XG4gICAgaWYgKHRoaXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IG5vZGUgPSB0aGlzLl9saXN0LnRhaWw7XG4gICAgdGhpcy5fbGlzdC5yZW1vdmUobm9kZSk7XG5cbiAgICByZXR1cm4gbm9kZS5kYXRhO1xuICB9XG5cbiAgW1N5bWJvbC5pdGVyYXRvcl0oKSB7XG4gICAgcmV0dXJuIG5ldyBEZXF1ZUl0ZXJhdG9yKHRoaXMuX2xpc3QpO1xuICB9XG5cbiAgaXRlcmF0b3IoKSB7XG4gICAgcmV0dXJuIG5ldyBEZXF1ZUl0ZXJhdG9yKHRoaXMuX2xpc3QpO1xuICB9XG5cbiAgcmV2ZXJzZUl0ZXJhdG9yKCkge1xuICAgIHJldHVybiBuZXcgRGVxdWVJdGVyYXRvcih0aGlzLl9saXN0LCB0cnVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBnZXQgYSByZWZlcmVuY2UgdG8gdGhlIGl0ZW0gYXQgdGhlIGhlYWQgb2YgdGhlIHF1ZXVlXG4gICAqIEByZXR1cm4ge2FueX0gW2Rlc2NyaXB0aW9uXVxuICAgKi9cbiAgZ2V0IGhlYWQoKSB7XG4gICAgaWYgKHRoaXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCBub2RlID0gdGhpcy5fbGlzdC5oZWFkO1xuICAgIHJldHVybiBub2RlLmRhdGE7XG4gIH1cblxuICAvKipcbiAgICogZ2V0IGEgcmVmZXJlbmNlIHRvIHRoZSBpdGVtIGF0IHRoZSB0YWlsIG9mIHRoZSBxdWV1ZVxuICAgKiBAcmV0dXJuIHthbnl9IFtkZXNjcmlwdGlvbl1cbiAgICovXG4gIGdldCB0YWlsKCkge1xuICAgIGlmICh0aGlzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuX2xpc3QudGFpbDtcbiAgICByZXR1cm4gbm9kZS5kYXRhO1xuICB9XG5cbiAgZ2V0IGxlbmd0aCgpIHtcbiAgICByZXR1cm4gdGhpcy5fbGlzdC5sZW5ndGg7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBEZXF1ZTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IERvdWJseUxpbmtlZExpc3QgPSByZXF1aXJlKFwiLi9Eb3VibHlMaW5rZWRMaXN0XCIpO1xuY29uc3QgRGVxdWUgPSByZXF1aXJlKFwiLi9EZXF1ZVwiKTtcblxuLyoqXG4gKiBTb3J0IG9mIGEgaW50ZXJuYWwgcXVldWUgZm9yIGhvbGRpbmcgdGhlIHdhaXRpbmdcbiAqIHJlc291cmNlIHJlcXVldHMgZm9yIGEgZ2l2ZW4gXCJwcmlvcml0eVwiLlxuICogQWxzbyBoYW5kbGVzIG1hbmFnaW5nIHRpbWVvdXRzIHJlamVjdGlvbnMgb24gaXRlbXMgKGlzIHRoaXMgdGhlIGJlc3QgcGxhY2UgZm9yIHRoaXM/KVxuICogVGhpcyBpcyB0aGUgbGFzdCBwb2ludCB3aGVyZSB3ZSBrbm93IHdoaWNoIHF1ZXVlIGEgcmVzb3VyY2VSZXF1ZXN0IGlzIGluXG4gKlxuICovXG5jbGFzcyBRdWV1ZSBleHRlbmRzIERlcXVlIHtcbiAgLyoqXG4gICAqIEFkZHMgdGhlIG9iaiB0byB0aGUgZW5kIG9mIHRoZSBsaXN0IGZvciB0aGlzIHNsb3RcbiAgICogd2UgY29tcGxldGVseSBvdmVycmlkZSB0aGUgcGFyZW50IG1ldGhvZCBiZWNhdXNlIHdlIG5lZWQgYWNjZXNzIHRvIHRoZVxuICAgKiBub2RlIGZvciBvdXIgcmVqZWN0aW9uIGhhbmRsZXJcbiAgICogQHBhcmFtIHthbnl9IHJlc291cmNlUmVxdWVzdCBbZGVzY3JpcHRpb25dXG4gICAqL1xuICBwdXNoKHJlc291cmNlUmVxdWVzdCkge1xuICAgIGNvbnN0IG5vZGUgPSBEb3VibHlMaW5rZWRMaXN0LmNyZWF0ZU5vZGUocmVzb3VyY2VSZXF1ZXN0KTtcbiAgICByZXNvdXJjZVJlcXVlc3QucHJvbWlzZS5jYXRjaCh0aGlzLl9jcmVhdGVUaW1lb3V0UmVqZWN0aW9uSGFuZGxlcihub2RlKSk7XG4gICAgdGhpcy5fbGlzdC5pbnNlcnRFbmQobm9kZSk7XG4gIH1cblxuICBfY3JlYXRlVGltZW91dFJlamVjdGlvbkhhbmRsZXIobm9kZSkge1xuICAgIHJldHVybiByZWFzb24gPT4ge1xuICAgICAgaWYgKHJlYXNvbi5uYW1lID09PSBcIlRpbWVvdXRFcnJvclwiKSB7XG4gICAgICAgIHRoaXMuX2xpc3QucmVtb3ZlKG5vZGUpO1xuICAgICAgfVxuICAgIH07XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBRdWV1ZTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IFF1ZXVlID0gcmVxdWlyZShcIi4vUXVldWVcIik7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBQcmlvcml0eVF1ZXVlIHtcbiAgY29uc3RydWN0b3Ioc2l6ZSkge1xuICAgIHRoaXMuX3NpemUgPSBNYXRoLm1heCgrc2l6ZSB8IDAsIDEpO1xuICAgIC8qKiBAdHlwZSB7UXVldWVbXX0gKi9cbiAgICB0aGlzLl9zbG90cyA9IFtdO1xuICAgIC8vIGluaXRpYWxpemUgYXJyYXlzIHRvIGhvbGQgcXVldWUgZWxlbWVudHNcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuX3NpemU7IGkrKykge1xuICAgICAgdGhpcy5fc2xvdHMucHVzaChuZXcgUXVldWUoKSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGxlbmd0aCgpIHtcbiAgICBsZXQgX2xlbmd0aCA9IDA7XG4gICAgZm9yIChsZXQgaSA9IDAsIHNsb3RzID0gdGhpcy5fc2xvdHMubGVuZ3RoOyBpIDwgc2xvdHM7IGkrKykge1xuICAgICAgX2xlbmd0aCArPSB0aGlzLl9zbG90c1tpXS5sZW5ndGg7XG4gICAgfVxuICAgIHJldHVybiBfbGVuZ3RoO1xuICB9XG5cbiAgZW5xdWV1ZShvYmosIHByaW9yaXR5KSB7XG4gICAgLy8gQ29udmVydCB0byBpbnRlZ2VyIHdpdGggYSBkZWZhdWx0IHZhbHVlIG9mIDAuXG4gICAgcHJpb3JpdHkgPSAocHJpb3JpdHkgJiYgK3ByaW9yaXR5IHwgMCkgfHwgMDtcblxuICAgIGlmIChwcmlvcml0eSkge1xuICAgICAgaWYgKHByaW9yaXR5IDwgMCB8fCBwcmlvcml0eSA+PSB0aGlzLl9zaXplKSB7XG4gICAgICAgIHByaW9yaXR5ID0gdGhpcy5fc2l6ZSAtIDE7XG4gICAgICAgIC8vIHB1dCBvYmogYXQgdGhlIGVuZCBvZiB0aGUgbGluZVxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLl9zbG90c1twcmlvcml0eV0ucHVzaChvYmopO1xuICB9XG5cbiAgZGVxdWV1ZSgpIHtcbiAgICBmb3IgKGxldCBpID0gMCwgc2wgPSB0aGlzLl9zbG90cy5sZW5ndGg7IGkgPCBzbDsgaSArPSAxKSB7XG4gICAgICBpZiAodGhpcy5fc2xvdHNbaV0ubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zbG90c1tpXS5zaGlmdCgpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICBnZXQgaGVhZCgpIHtcbiAgICBmb3IgKGxldCBpID0gMCwgc2wgPSB0aGlzLl9zbG90cy5sZW5ndGg7IGkgPCBzbDsgaSArPSAxKSB7XG4gICAgICBpZiAodGhpcy5fc2xvdHNbaV0ubGVuZ3RoID4gMCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2xvdHNbaV0uaGVhZDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZ2V0IHRhaWwoKSB7XG4gICAgZm9yIChsZXQgaSA9IHRoaXMuX3Nsb3RzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBpZiAodGhpcy5fc2xvdHNbaV0ubGVuZ3RoID4gMCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2xvdHNbaV0udGFpbDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gUHJpb3JpdHlRdWV1ZTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmZ1bmN0aW9uIG5vb3AoKSB7fVxuXG4vKipcbiAqIFJlZmxlY3RzIGEgcHJvbWlzZSBidXQgZG9lcyBub3QgZXhwb3NlIGFueVxuICogdW5kZXJseWluZyB2YWx1ZSBvciByZWplY3Rpb24gZnJvbSB0aGF0IHByb21pc2UuXG4gKiBAcGFyYW0gIHtQcm9taXNlfSBwcm9taXNlIFtkZXNjcmlwdGlvbl1cbiAqIEByZXR1cm4ge1Byb21pc2V9ICAgICAgICAgW2Rlc2NyaXB0aW9uXVxuICovXG5leHBvcnRzLnJlZmxlY3RvciA9IGZ1bmN0aW9uKHByb21pc2UpIHtcbiAgcmV0dXJuIHByb21pc2UudGhlbihub29wLCBub29wKTtcbn07XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKFwiZXZlbnRzXCIpLkV2ZW50RW1pdHRlcjtcblxuY29uc3QgZmFjdG9yeVZhbGlkYXRvciA9IHJlcXVpcmUoXCIuL2ZhY3RvcnlWYWxpZGF0b3JcIik7XG5jb25zdCBQb29sT3B0aW9ucyA9IHJlcXVpcmUoXCIuL1Bvb2xPcHRpb25zXCIpO1xuY29uc3QgUmVzb3VyY2VSZXF1ZXN0ID0gcmVxdWlyZShcIi4vUmVzb3VyY2VSZXF1ZXN0XCIpO1xuY29uc3QgUmVzb3VyY2VMb2FuID0gcmVxdWlyZShcIi4vUmVzb3VyY2VMb2FuXCIpO1xuY29uc3QgUG9vbGVkUmVzb3VyY2UgPSByZXF1aXJlKFwiLi9Qb29sZWRSZXNvdXJjZVwiKTtcbmNvbnN0IERlZmF1bHRFdmljdG9yID0gcmVxdWlyZShcIi4vRGVmYXVsdEV2aWN0b3JcIik7XG5jb25zdCBEZXF1ZSA9IHJlcXVpcmUoXCIuL0RlcXVlXCIpO1xuY29uc3QgRGVmZXJyZWQgPSByZXF1aXJlKFwiLi9EZWZlcnJlZFwiKTtcbmNvbnN0IFByaW9yaXR5UXVldWUgPSByZXF1aXJlKFwiLi9Qcmlvcml0eVF1ZXVlXCIpO1xuY29uc3QgRGVxdWVJdGVyYXRvciA9IHJlcXVpcmUoXCIuL0RlcXVlSXRlcmF0b3JcIik7XG5cbmNvbnN0IHJlZmxlY3RvciA9IHJlcXVpcmUoXCIuL3V0aWxzXCIpLnJlZmxlY3RvcjtcblxuLyoqXG4gKiBUT0RPOiBtb3ZlIG1lXG4gKi9cbmNvbnN0IEZBQ1RPUllfQ1JFQVRFX0VSUk9SID0gXCJmYWN0b3J5Q3JlYXRlRXJyb3JcIjtcbmNvbnN0IEZBQ1RPUllfREVTVFJPWV9FUlJPUiA9IFwiZmFjdG9yeURlc3Ryb3lFcnJvclwiO1xuXG5jbGFzcyBQb29sIGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcbiAgLyoqXG4gICAqIEdlbmVyYXRlIGFuIE9iamVjdCBwb29sIHdpdGggYSBzcGVjaWZpZWQgYGZhY3RvcnlgIGFuZCBgY29uZmlnYC5cbiAgICpcbiAgICogQHBhcmFtIHt0eXBlb2YgRGVmYXVsdEV2aWN0b3J9IEV2aWN0b3JcbiAgICogQHBhcmFtIHt0eXBlb2YgRGVxdWV9IERlcXVlXG4gICAqIEBwYXJhbSB7dHlwZW9mIFByaW9yaXR5UXVldWV9IFByaW9yaXR5UXVldWVcbiAgICogQHBhcmFtIHtPYmplY3R9IGZhY3RvcnlcbiAgICogICBGYWN0b3J5IHRvIGJlIHVzZWQgZm9yIGdlbmVyYXRpbmcgYW5kIGRlc3Ryb3lpbmcgdGhlIGl0ZW1zLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmYWN0b3J5LmNyZWF0ZVxuICAgKiAgIFNob3VsZCBjcmVhdGUgdGhlIGl0ZW0gdG8gYmUgYWNxdWlyZWQsXG4gICAqICAgYW5kIGNhbGwgaXQncyBmaXJzdCBjYWxsYmFjayBhcmd1bWVudCB3aXRoIHRoZSBnZW5lcmF0ZWQgaXRlbSBhcyBpdCdzIGFyZ3VtZW50LlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmYWN0b3J5LmRlc3Ryb3lcbiAgICogICBTaG91bGQgZ2VudGx5IGNsb3NlIGFueSByZXNvdXJjZXMgdGhhdCB0aGUgaXRlbSBpcyB1c2luZy5cbiAgICogICBDYWxsZWQgYmVmb3JlIHRoZSBpdGVtcyBpcyBkZXN0cm95ZWQuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGZhY3RvcnkudmFsaWRhdGVcbiAgICogICBUZXN0IGlmIGEgcmVzb3VyY2UgaXMgc3RpbGwgdmFsaWQgLlNob3VsZCByZXR1cm4gYSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gYSBib29sZWFuLCB0cnVlIGlmIHJlc291cmNlIGlzIHN0aWxsIHZhbGlkIGFuZCBmYWxzZVxuICAgKiAgIElmIGl0IHNob3VsZCBiZSByZW1vdmVkIGZyb20gcG9vbC5cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICovXG4gIGNvbnN0cnVjdG9yKEV2aWN0b3IsIERlcXVlLCBQcmlvcml0eVF1ZXVlLCBmYWN0b3J5LCBvcHRpb25zKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIGZhY3RvcnlWYWxpZGF0b3IoZmFjdG9yeSk7XG5cbiAgICB0aGlzLl9jb25maWcgPSBuZXcgUG9vbE9wdGlvbnMob3B0aW9ucyk7XG5cbiAgICAvLyBUT0RPOiBmaXggdXAgdGhpcyB1Z2x5IGdsdWUtaW5nXG4gICAgdGhpcy5fUHJvbWlzZSA9IHRoaXMuX2NvbmZpZy5Qcm9taXNlO1xuXG4gICAgdGhpcy5fZmFjdG9yeSA9IGZhY3Rvcnk7XG4gICAgdGhpcy5fZHJhaW5pbmcgPSBmYWxzZTtcbiAgICB0aGlzLl9zdGFydGVkID0gZmFsc2U7XG4gICAgLyoqXG4gICAgICogSG9sZHMgd2FpdGluZyBjbGllbnRzXG4gICAgICogQHR5cGUge1ByaW9yaXR5UXVldWV9XG4gICAgICovXG4gICAgdGhpcy5fd2FpdGluZ0NsaWVudHNRdWV1ZSA9IG5ldyBQcmlvcml0eVF1ZXVlKHRoaXMuX2NvbmZpZy5wcmlvcml0eVJhbmdlKTtcblxuICAgIC8qKlxuICAgICAqIENvbGxlY3Rpb24gb2YgcHJvbWlzZXMgZm9yIHJlc291cmNlIGNyZWF0aW9uIGNhbGxzIG1hZGUgYnkgdGhlIHBvb2wgdG8gZmFjdG9yeS5jcmVhdGVcbiAgICAgKiBAdHlwZSB7U2V0fVxuICAgICAqL1xuICAgIHRoaXMuX2ZhY3RvcnlDcmVhdGVPcGVyYXRpb25zID0gbmV3IFNldCgpO1xuXG4gICAgLyoqXG4gICAgICogQ29sbGVjdGlvbiBvZiBwcm9taXNlcyBmb3IgcmVzb3VyY2UgZGVzdHJ1Y3Rpb24gY2FsbHMgbWFkZSBieSB0aGUgcG9vbCB0byBmYWN0b3J5LmRlc3Ryb3lcbiAgICAgKiBAdHlwZSB7U2V0fVxuICAgICAqL1xuICAgIHRoaXMuX2ZhY3RvcnlEZXN0cm95T3BlcmF0aW9ucyA9IG5ldyBTZXQoKTtcblxuICAgIC8qKlxuICAgICAqIEEgcXVldWUvc3RhY2sgb2YgcG9vbGVkUmVzb3VyY2VzIGF3YWl0aW5nIGFjcXVpc2l0aW9uXG4gICAgICogVE9ETzogcmVwbGFjZSB3aXRoIExpbmtlZExpc3QgYmFja2VkIGFycmF5XG4gICAgICogQHR5cGUge0RlcXVlfVxuICAgICAqL1xuICAgIHRoaXMuX2F2YWlsYWJsZU9iamVjdHMgPSBuZXcgRGVxdWUoKTtcblxuICAgIC8qKlxuICAgICAqIENvbGxlY3Rpb24gb2YgcmVmZXJlbmNlcyBmb3IgYW55IHJlc291cmNlIHRoYXQgYXJlIHVuZGVyZ29pbmcgdmFsaWRhdGlvbiBiZWZvcmUgYmVpbmcgYWNxdWlyZWRcbiAgICAgKiBAdHlwZSB7U2V0fVxuICAgICAqL1xuICAgIHRoaXMuX3Rlc3RPbkJvcnJvd1Jlc291cmNlcyA9IG5ldyBTZXQoKTtcblxuICAgIC8qKlxuICAgICAqIENvbGxlY3Rpb24gb2YgcmVmZXJlbmNlcyBmb3IgYW55IHJlc291cmNlIHRoYXQgYXJlIHVuZGVyZ29pbmcgdmFsaWRhdGlvbiBiZWZvcmUgYmVpbmcgcmV0dXJuZWRcbiAgICAgKiBAdHlwZSB7U2V0fVxuICAgICAqL1xuICAgIHRoaXMuX3Rlc3RPblJldHVyblJlc291cmNlcyA9IG5ldyBTZXQoKTtcblxuICAgIC8qKlxuICAgICAqIENvbGxlY3Rpb24gb2YgcHJvbWlzZXMgZm9yIGFueSB2YWxpZGF0aW9ucyBjdXJyZW50bHkgaW4gcHJvY2Vzc1xuICAgICAqIEB0eXBlIHtTZXR9XG4gICAgICovXG4gICAgdGhpcy5fdmFsaWRhdGlvbk9wZXJhdGlvbnMgPSBuZXcgU2V0KCk7XG5cbiAgICAvKipcbiAgICAgKiBBbGwgb2JqZWN0cyBhc3NvY2lhdGVkIHdpdGggdGhpcyBwb29sIGluIGFueSBzdGF0ZSAoZXhjZXB0IGRlc3Ryb3llZClcbiAgICAgKiBAdHlwZSB7U2V0fVxuICAgICAqL1xuICAgIHRoaXMuX2FsbE9iamVjdHMgPSBuZXcgU2V0KCk7XG5cbiAgICAvKipcbiAgICAgKiBMb2FucyBrZXllZCBieSB0aGUgYm9ycm93ZWQgcmVzb3VyY2VcbiAgICAgKiBAdHlwZSB7TWFwfVxuICAgICAqL1xuICAgIHRoaXMuX3Jlc291cmNlTG9hbnMgPSBuZXcgTWFwKCk7XG5cbiAgICAvKipcbiAgICAgKiBJbmZpbml0ZWx5IGxvb3BpbmcgaXRlcmF0b3Igb3ZlciBhdmFpbGFibGUgb2JqZWN0XG4gICAgICogQHR5cGUge0RlcXVlSXRlcmF0b3J9XG4gICAgICovXG4gICAgdGhpcy5fZXZpY3Rpb25JdGVyYXRvciA9IHRoaXMuX2F2YWlsYWJsZU9iamVjdHMuaXRlcmF0b3IoKTtcblxuICAgIHRoaXMuX2V2aWN0b3IgPSBuZXcgRXZpY3RvcigpO1xuXG4gICAgLyoqXG4gICAgICogaGFuZGxlIGZvciBzZXRUaW1lb3V0IGZvciBuZXh0IGV2aWN0aW9uIHJ1blxuICAgICAqIEB0eXBlIHsobnVtYmVyfG51bGwpfVxuICAgICAqL1xuICAgIHRoaXMuX3NjaGVkdWxlZEV2aWN0aW9uID0gbnVsbDtcblxuICAgIC8vIGNyZWF0ZSBpbml0aWFsIHJlc291cmNlcyAoaWYgZmFjdG9yeS5taW4gPiAwKVxuICAgIGlmICh0aGlzLl9jb25maWcuYXV0b3N0YXJ0ID09PSB0cnVlKSB7XG4gICAgICB0aGlzLnN0YXJ0KCk7XG4gICAgfVxuICB9XG5cbiAgX2Rlc3Ryb3kocG9vbGVkUmVzb3VyY2UpIHtcbiAgICAvLyBGSVhNRTogZG8gd2UgbmVlZCBhbm90aGVyIHN0YXRlIGZvciBcImluIGRlc3RydWN0aW9uXCI/XG4gICAgcG9vbGVkUmVzb3VyY2UuaW52YWxpZGF0ZSgpO1xuICAgIHRoaXMuX2FsbE9iamVjdHMuZGVsZXRlKHBvb2xlZFJlc291cmNlKTtcbiAgICAvLyBOT1RFOiB0aGlzIG1heWJlIHZlcnkgYmFkIHByb21pc2UgdXNhZ2U/XG4gICAgY29uc3QgZGVzdHJveVByb21pc2UgPSB0aGlzLl9mYWN0b3J5LmRlc3Ryb3kocG9vbGVkUmVzb3VyY2Uub2JqKTtcbiAgICBjb25zdCB3cmFwcGVkRGVzdHJveVByb21pc2UgPSB0aGlzLl9jb25maWcuZGVzdHJveVRpbWVvdXRNaWxsaXNcbiAgICAgID8gdGhpcy5fUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2FwcGx5RGVzdHJveVRpbWVvdXQoZGVzdHJveVByb21pc2UpKVxuICAgICAgOiB0aGlzLl9Qcm9taXNlLnJlc29sdmUoZGVzdHJveVByb21pc2UpO1xuXG4gICAgdGhpcy5fdHJhY2tPcGVyYXRpb24oXG4gICAgICB3cmFwcGVkRGVzdHJveVByb21pc2UsXG4gICAgICB0aGlzLl9mYWN0b3J5RGVzdHJveU9wZXJhdGlvbnNcbiAgICApLmNhdGNoKHJlYXNvbiA9PiB7XG4gICAgICB0aGlzLmVtaXQoRkFDVE9SWV9ERVNUUk9ZX0VSUk9SLCByZWFzb24pO1xuICAgIH0pO1xuXG4gICAgLy8gVE9ETzogbWF5YmUgZW5zdXJpbmcgbWluaW11bSBwb29sIHNpemUgc2hvdWxkIGxpdmUgb3V0c2lkZSBoZXJlXG4gICAgdGhpcy5fZW5zdXJlTWluaW11bSgpO1xuICB9XG5cbiAgX2FwcGx5RGVzdHJveVRpbWVvdXQocHJvbWlzZSkge1xuICAgIGNvbnN0IHRpbWVvdXRQcm9taXNlID0gbmV3IHRoaXMuX1Byb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHJlamVjdChuZXcgRXJyb3IoXCJkZXN0cm95IHRpbWVkIG91dFwiKSk7XG4gICAgICB9LCB0aGlzLl9jb25maWcuZGVzdHJveVRpbWVvdXRNaWxsaXMpLnVucmVmKCk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuX1Byb21pc2UucmFjZShbdGltZW91dFByb21pc2UsIHByb21pc2VdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBdHRlbXB0IHRvIG1vdmUgYW4gYXZhaWxhYmxlIHJlc291cmNlIGludG8gdGVzdCBhbmQgdGhlbiBvbnRvIGEgd2FpdGluZyBjbGllbnRcbiAgICogQHJldHVybiB7Qm9vbGVhbn0gY291bGQgd2UgbW92ZSBhbiBhdmFpbGFibGUgcmVzb3VyY2UgaW50byB0ZXN0XG4gICAqL1xuICBfdGVzdE9uQm9ycm93KCkge1xuICAgIGlmICh0aGlzLl9hdmFpbGFibGVPYmplY3RzLmxlbmd0aCA8IDEpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCBwb29sZWRSZXNvdXJjZSA9IHRoaXMuX2F2YWlsYWJsZU9iamVjdHMuc2hpZnQoKTtcbiAgICAvLyBNYXJrIHRoZSByZXNvdXJjZSBhcyBpbiB0ZXN0XG4gICAgcG9vbGVkUmVzb3VyY2UudGVzdCgpO1xuICAgIHRoaXMuX3Rlc3RPbkJvcnJvd1Jlc291cmNlcy5hZGQocG9vbGVkUmVzb3VyY2UpO1xuICAgIGNvbnN0IHZhbGlkYXRpb25Qcm9taXNlID0gdGhpcy5fZmFjdG9yeS52YWxpZGF0ZShwb29sZWRSZXNvdXJjZS5vYmopO1xuICAgIGNvbnN0IHdyYXBwZWRWYWxpZGF0aW9uUHJvbWlzZSA9IHRoaXMuX1Byb21pc2UucmVzb2x2ZSh2YWxpZGF0aW9uUHJvbWlzZSk7XG5cbiAgICB0aGlzLl90cmFja09wZXJhdGlvbihcbiAgICAgIHdyYXBwZWRWYWxpZGF0aW9uUHJvbWlzZSxcbiAgICAgIHRoaXMuX3ZhbGlkYXRpb25PcGVyYXRpb25zXG4gICAgKS50aGVuKGlzVmFsaWQgPT4ge1xuICAgICAgdGhpcy5fdGVzdE9uQm9ycm93UmVzb3VyY2VzLmRlbGV0ZShwb29sZWRSZXNvdXJjZSk7XG5cbiAgICAgIGlmIChpc1ZhbGlkID09PSBmYWxzZSkge1xuICAgICAgICBwb29sZWRSZXNvdXJjZS5pbnZhbGlkYXRlKCk7XG4gICAgICAgIHRoaXMuX2Rlc3Ryb3kocG9vbGVkUmVzb3VyY2UpO1xuICAgICAgICB0aGlzLl9kaXNwZW5zZSgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLl9kaXNwYXRjaFBvb2xlZFJlc291cmNlVG9OZXh0V2FpdGluZ0NsaWVudChwb29sZWRSZXNvdXJjZSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBdHRlbXB0IHRvIG1vdmUgYW4gYXZhaWxhYmxlIHJlc291cmNlIHRvIGEgd2FpdGluZyBjbGllbnRcbiAgICogQHJldHVybiB7Qm9vbGVhbn0gW2Rlc2NyaXB0aW9uXVxuICAgKi9cbiAgX2Rpc3BhdGNoUmVzb3VyY2UoKSB7XG4gICAgaWYgKHRoaXMuX2F2YWlsYWJsZU9iamVjdHMubGVuZ3RoIDwgMSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IHBvb2xlZFJlc291cmNlID0gdGhpcy5fYXZhaWxhYmxlT2JqZWN0cy5zaGlmdCgpO1xuICAgIHRoaXMuX2Rpc3BhdGNoUG9vbGVkUmVzb3VyY2VUb05leHRXYWl0aW5nQ2xpZW50KHBvb2xlZFJlc291cmNlKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogQXR0ZW1wdCB0byByZXNvbHZlIGFuIG91dHN0YW5kaW5nIHJlc291cmNlIHJlcXVlc3QgdXNpbmcgYW4gYXZhaWxhYmxlIHJlc291cmNlIGZyb21cbiAgICogdGhlIHBvb2wsIG9yIGNyZWF0aW5nIG5ldyBvbmVzXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZGlzcGVuc2UoKSB7XG4gICAgLyoqXG4gICAgICogTG9jYWwgdmFyaWFibGVzIGZvciBlYXNlIG9mIHJlYWRpbmcvd3JpdGluZ1xuICAgICAqIHRoZXNlIGRvbid0IChzaG91bGRuJ3QpIGNoYW5nZSBhY3Jvc3MgdGhlIGV4ZWN1dGlvbiBvZiB0aGlzIGZuXG4gICAgICovXG4gICAgY29uc3QgbnVtV2FpdGluZ0NsaWVudHMgPSB0aGlzLl93YWl0aW5nQ2xpZW50c1F1ZXVlLmxlbmd0aDtcblxuICAgIC8vIElmIHRoZXJlIGFyZW4ndCBhbnkgd2FpdGluZyByZXF1ZXN0cyB0aGVuIHRoZXJlIGlzIG5vdGhpbmcgdG8gZG9cbiAgICAvLyBzbyBsZXRzIHNob3J0LWNpcmN1aXRcbiAgICBpZiAobnVtV2FpdGluZ0NsaWVudHMgPCAxKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcmVzb3VyY2VTaG9ydGZhbGwgPVxuICAgICAgbnVtV2FpdGluZ0NsaWVudHMgLSB0aGlzLl9wb3RlbnRpYWxseUFsbG9jYWJsZVJlc291cmNlQ291bnQ7XG5cbiAgICBjb25zdCBhY3R1YWxOdW1iZXJPZlJlc291cmNlc1RvQ3JlYXRlID0gTWF0aC5taW4oXG4gICAgICB0aGlzLnNwYXJlUmVzb3VyY2VDYXBhY2l0eSxcbiAgICAgIHJlc291cmNlU2hvcnRmYWxsXG4gICAgKTtcbiAgICBmb3IgKGxldCBpID0gMDsgYWN0dWFsTnVtYmVyT2ZSZXNvdXJjZXNUb0NyZWF0ZSA+IGk7IGkrKykge1xuICAgICAgdGhpcy5fY3JlYXRlUmVzb3VyY2UoKTtcbiAgICB9XG5cbiAgICAvLyBJZiB3ZSBhcmUgZG9pbmcgdGVzdC1vbi1ib3Jyb3cgc2VlIGhvdyBtYW55IG1vcmUgcmVzb3VyY2VzIG5lZWQgdG8gYmUgbW92ZWQgaW50byB0ZXN0XG4gICAgLy8gdG8gaGVscCBzYXRpc2Z5IHdhaXRpbmdDbGllbnRzXG4gICAgaWYgKHRoaXMuX2NvbmZpZy50ZXN0T25Cb3Jyb3cgPT09IHRydWUpIHtcbiAgICAgIC8vIGhvdyBtYW55IGF2YWlsYWJsZSByZXNvdXJjZXMgZG8gd2UgbmVlZCB0byBzaGlmdCBpbnRvIHRlc3RcbiAgICAgIGNvbnN0IGRlc2lyZWROdW1iZXJPZlJlc291cmNlc1RvTW92ZUludG9UZXN0ID1cbiAgICAgICAgbnVtV2FpdGluZ0NsaWVudHMgLSB0aGlzLl90ZXN0T25Cb3Jyb3dSZXNvdXJjZXMuc2l6ZTtcbiAgICAgIGNvbnN0IGFjdHVhbE51bWJlck9mUmVzb3VyY2VzVG9Nb3ZlSW50b1Rlc3QgPSBNYXRoLm1pbihcbiAgICAgICAgdGhpcy5fYXZhaWxhYmxlT2JqZWN0cy5sZW5ndGgsXG4gICAgICAgIGRlc2lyZWROdW1iZXJPZlJlc291cmNlc1RvTW92ZUludG9UZXN0XG4gICAgICApO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGFjdHVhbE51bWJlck9mUmVzb3VyY2VzVG9Nb3ZlSW50b1Rlc3QgPiBpOyBpKyspIHtcbiAgICAgICAgdGhpcy5fdGVzdE9uQm9ycm93KCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gaWYgd2UgYXJlbid0IHRlc3Rpbmctb24tYm9ycm93IHRoZW4gbGV0cyB0cnkgdG8gYWxsb2NhdGUgd2hhdCB3ZSBjYW5cbiAgICBpZiAodGhpcy5fY29uZmlnLnRlc3RPbkJvcnJvdyA9PT0gZmFsc2UpIHtcbiAgICAgIGNvbnN0IGFjdHVhbE51bWJlck9mUmVzb3VyY2VzVG9EaXNwYXRjaCA9IE1hdGgubWluKFxuICAgICAgICB0aGlzLl9hdmFpbGFibGVPYmplY3RzLmxlbmd0aCxcbiAgICAgICAgbnVtV2FpdGluZ0NsaWVudHNcbiAgICAgICk7XG4gICAgICBmb3IgKGxldCBpID0gMDsgYWN0dWFsTnVtYmVyT2ZSZXNvdXJjZXNUb0Rpc3BhdGNoID4gaTsgaSsrKSB7XG4gICAgICAgIHRoaXMuX2Rpc3BhdGNoUmVzb3VyY2UoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRGlzcGF0Y2hlcyBhIHBvb2xlZFJlc291cmNlIHRvIHRoZSBuZXh0IHdhaXRpbmcgY2xpZW50IChpZiBhbnkpIGVsc2VcbiAgICogcHV0cyB0aGUgUG9vbGVkUmVzb3VyY2UgYmFjayBvbiB0aGUgYXZhaWxhYmxlIGxpc3RcbiAgICogQHBhcmFtICB7UG9vbGVkUmVzb3VyY2V9IHBvb2xlZFJlc291cmNlIFtkZXNjcmlwdGlvbl1cbiAgICogQHJldHVybiB7Qm9vbGVhbn0gICAgICAgICAgICAgICAgW2Rlc2NyaXB0aW9uXVxuICAgKi9cbiAgX2Rpc3BhdGNoUG9vbGVkUmVzb3VyY2VUb05leHRXYWl0aW5nQ2xpZW50KHBvb2xlZFJlc291cmNlKSB7XG4gICAgY29uc3QgY2xpZW50UmVzb3VyY2VSZXF1ZXN0ID0gdGhpcy5fd2FpdGluZ0NsaWVudHNRdWV1ZS5kZXF1ZXVlKCk7XG4gICAgaWYgKFxuICAgICAgY2xpZW50UmVzb3VyY2VSZXF1ZXN0ID09PSB1bmRlZmluZWQgfHxcbiAgICAgIGNsaWVudFJlc291cmNlUmVxdWVzdC5zdGF0ZSAhPT0gRGVmZXJyZWQuUEVORElOR1xuICAgICkge1xuICAgICAgLy8gV2hpbGUgd2Ugd2VyZSBhd2F5IGVpdGhlciBhbGwgdGhlIHdhaXRpbmcgY2xpZW50cyB0aW1lZCBvdXRcbiAgICAgIC8vIG9yIHdlcmUgc29tZWhvdyBmdWxmaWxsZWQuIHB1dCBvdXIgcG9vbGVkUmVzb3VyY2UgYmFjay5cbiAgICAgIHRoaXMuX2FkZFBvb2xlZFJlc291cmNlVG9BdmFpbGFibGVPYmplY3RzKHBvb2xlZFJlc291cmNlKTtcbiAgICAgIC8vIFRPRE86IGRvIG5lZWQgdG8gdHJpZ2dlciBhbnl0aGluZyBiZWZvcmUgd2UgbGVhdmU/XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IGxvYW4gPSBuZXcgUmVzb3VyY2VMb2FuKHBvb2xlZFJlc291cmNlLCB0aGlzLl9Qcm9taXNlKTtcbiAgICB0aGlzLl9yZXNvdXJjZUxvYW5zLnNldChwb29sZWRSZXNvdXJjZS5vYmosIGxvYW4pO1xuICAgIHBvb2xlZFJlc291cmNlLmFsbG9jYXRlKCk7XG4gICAgY2xpZW50UmVzb3VyY2VSZXF1ZXN0LnJlc29sdmUocG9vbGVkUmVzb3VyY2Uub2JqKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiB0cmFja3Mgb24gb3BlcmF0aW9uIHVzaW5nIGdpdmVuIHNldFxuICAgKiBoYW5kbGVzIGFkZGluZy9yZW1vdmluZyBmcm9tIHRoZSBzZXQgYW5kIHJlc29sdmUvcmVqZWN0cyB0aGUgdmFsdWUvcmVhc29uXG4gICAqIEBwYXJhbSAge1Byb21pc2V9IG9wZXJhdGlvblxuICAgKiBAcGFyYW0gIHtTZXR9IHNldCAgICAgICBTZXQgaG9sZGluZyBvcGVyYXRpb25zXG4gICAqIEByZXR1cm4ge1Byb21pc2V9ICAgICAgIFByb21pc2UgdGhhdCByZXNvbHZlcyBvbmNlIG9wZXJhdGlvbiBoYXMgYmVlbiByZW1vdmVkIGZyb20gc2V0XG4gICAqL1xuICBfdHJhY2tPcGVyYXRpb24ob3BlcmF0aW9uLCBzZXQpIHtcbiAgICBzZXQuYWRkKG9wZXJhdGlvbik7XG5cbiAgICByZXR1cm4gb3BlcmF0aW9uLnRoZW4oXG4gICAgICB2ID0+IHtcbiAgICAgICAgc2V0LmRlbGV0ZShvcGVyYXRpb24pO1xuICAgICAgICByZXR1cm4gdGhpcy5fUHJvbWlzZS5yZXNvbHZlKHYpO1xuICAgICAgfSxcbiAgICAgIGUgPT4ge1xuICAgICAgICBzZXQuZGVsZXRlKG9wZXJhdGlvbik7XG4gICAgICAgIHJldHVybiB0aGlzLl9Qcm9taXNlLnJlamVjdChlKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfY3JlYXRlUmVzb3VyY2UoKSB7XG4gICAgLy8gQW4gYXR0ZW1wdCB0byBjcmVhdGUgYSByZXNvdXJjZVxuICAgIGNvbnN0IGZhY3RvcnlQcm9taXNlID0gdGhpcy5fZmFjdG9yeS5jcmVhdGUoKTtcbiAgICBjb25zdCB3cmFwcGVkRmFjdG9yeVByb21pc2UgPSB0aGlzLl9Qcm9taXNlXG4gICAgICAucmVzb2x2ZShmYWN0b3J5UHJvbWlzZSlcbiAgICAgIC50aGVuKHJlc291cmNlID0+IHtcbiAgICAgICAgY29uc3QgcG9vbGVkUmVzb3VyY2UgPSBuZXcgUG9vbGVkUmVzb3VyY2UocmVzb3VyY2UpO1xuICAgICAgICB0aGlzLl9hbGxPYmplY3RzLmFkZChwb29sZWRSZXNvdXJjZSk7XG4gICAgICAgIHRoaXMuX2FkZFBvb2xlZFJlc291cmNlVG9BdmFpbGFibGVPYmplY3RzKHBvb2xlZFJlc291cmNlKTtcbiAgICAgIH0pO1xuXG4gICAgdGhpcy5fdHJhY2tPcGVyYXRpb24od3JhcHBlZEZhY3RvcnlQcm9taXNlLCB0aGlzLl9mYWN0b3J5Q3JlYXRlT3BlcmF0aW9ucylcbiAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgdGhpcy5fZGlzcGVuc2UoKTtcbiAgICAgICAgLy8gU3RvcCBibHVlYmlyZCBjb21wbGFpbmluZyBhYm91dCB0aGlzIHNpZGUtZWZmZWN0IG9ubHkgaGFuZGxlclxuICAgICAgICAvLyAtIGEgcHJvbWlzZSB3YXMgY3JlYXRlZCBpbiBhIGhhbmRsZXIgYnV0IHdhcyBub3QgcmV0dXJuZWQgZnJvbSBpdFxuICAgICAgICAvLyBodHRwczovL2dvby5nbC9yUnFNVXdcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKHJlYXNvbiA9PiB7XG4gICAgICAgIHRoaXMuZW1pdChGQUNUT1JZX0NSRUFURV9FUlJPUiwgcmVhc29uKTtcbiAgICAgICAgdGhpcy5fZGlzcGVuc2UoKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZW5zdXJlTWluaW11bSgpIHtcbiAgICBpZiAodGhpcy5fZHJhaW5pbmcgPT09IHRydWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgbWluU2hvcnRmYWxsID0gdGhpcy5fY29uZmlnLm1pbiAtIHRoaXMuX2NvdW50O1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWluU2hvcnRmYWxsOyBpKyspIHtcbiAgICAgIHRoaXMuX2NyZWF0ZVJlc291cmNlKCk7XG4gICAgfVxuICB9XG5cbiAgX2V2aWN0KCkge1xuICAgIGNvbnN0IHRlc3RzVG9SdW4gPSBNYXRoLm1pbihcbiAgICAgIHRoaXMuX2NvbmZpZy5udW1UZXN0c1BlckV2aWN0aW9uUnVuLFxuICAgICAgdGhpcy5fYXZhaWxhYmxlT2JqZWN0cy5sZW5ndGhcbiAgICApO1xuICAgIGNvbnN0IGV2aWN0aW9uQ29uZmlnID0ge1xuICAgICAgc29mdElkbGVUaW1lb3V0TWlsbGlzOiB0aGlzLl9jb25maWcuc29mdElkbGVUaW1lb3V0TWlsbGlzLFxuICAgICAgaWRsZVRpbWVvdXRNaWxsaXM6IHRoaXMuX2NvbmZpZy5pZGxlVGltZW91dE1pbGxpcyxcbiAgICAgIG1pbjogdGhpcy5fY29uZmlnLm1pblxuICAgIH07XG4gICAgZm9yIChsZXQgdGVzdHNIYXZlUnVuID0gMDsgdGVzdHNIYXZlUnVuIDwgdGVzdHNUb1J1bjsgKSB7XG4gICAgICBjb25zdCBpdGVyYXRpb25SZXN1bHQgPSB0aGlzLl9ldmljdGlvbkl0ZXJhdG9yLm5leHQoKTtcblxuICAgICAgLy8gU2FmZXR5IGNoZWNrIGluY2FzZSB3ZSBjb3VsZCBnZXQgc3R1Y2sgaW4gaW5maW5pdGUgbG9vcCBiZWNhdXNlIHdlXG4gICAgICAvLyBzb21laG93IGVtcHRpZWQgdGhlIGFycmF5IGFmdGVyIGNoZWNraW5nIGl0cyBsZW5ndGguXG4gICAgICBpZiAoaXRlcmF0aW9uUmVzdWx0LmRvbmUgPT09IHRydWUgJiYgdGhpcy5fYXZhaWxhYmxlT2JqZWN0cy5sZW5ndGggPCAxKSB7XG4gICAgICAgIHRoaXMuX2V2aWN0aW9uSXRlcmF0b3IucmVzZXQoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgLy8gSWYgdGhpcyBoYXBwZW5zIGl0IHNob3VsZCBqdXN0IG1lYW4gd2UgcmVhY2hlZCB0aGUgZW5kIG9mIHRoZVxuICAgICAgLy8gbGlzdCBhbmQgY2FuIHJlc2V0IHRoZSBjdXJzb3IuXG4gICAgICBpZiAoaXRlcmF0aW9uUmVzdWx0LmRvbmUgPT09IHRydWUgJiYgdGhpcy5fYXZhaWxhYmxlT2JqZWN0cy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMuX2V2aWN0aW9uSXRlcmF0b3IucmVzZXQoKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlc291cmNlID0gaXRlcmF0aW9uUmVzdWx0LnZhbHVlO1xuXG4gICAgICBjb25zdCBzaG91bGRFdmljdCA9IHRoaXMuX2V2aWN0b3IuZXZpY3QoXG4gICAgICAgIGV2aWN0aW9uQ29uZmlnLFxuICAgICAgICByZXNvdXJjZSxcbiAgICAgICAgdGhpcy5fYXZhaWxhYmxlT2JqZWN0cy5sZW5ndGhcbiAgICAgICk7XG4gICAgICB0ZXN0c0hhdmVSdW4rKztcblxuICAgICAgaWYgKHNob3VsZEV2aWN0ID09PSB0cnVlKSB7XG4gICAgICAgIC8vIHRha2UgaXQgb3V0IG9mIHRoZSBfYXZhaWxhYmxlT2JqZWN0cyBsaXN0XG4gICAgICAgIHRoaXMuX2V2aWN0aW9uSXRlcmF0b3IucmVtb3ZlKCk7XG4gICAgICAgIHRoaXMuX2Rlc3Ryb3kocmVzb3VyY2UpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIF9zY2hlZHVsZUV2aWN0b3JSdW4oKSB7XG4gICAgLy8gU3RhcnQgZXZpY3Rpb24gaWYgc2V0XG4gICAgaWYgKHRoaXMuX2NvbmZpZy5ldmljdGlvblJ1bkludGVydmFsTWlsbGlzID4gMCkge1xuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgdGhpcy5fc2NoZWR1bGVkRXZpY3Rpb24gPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5fZXZpY3QoKTtcbiAgICAgICAgdGhpcy5fc2NoZWR1bGVFdmljdG9yUnVuKCk7XG4gICAgICB9LCB0aGlzLl9jb25maWcuZXZpY3Rpb25SdW5JbnRlcnZhbE1pbGxpcykudW5yZWYoKTtcbiAgICB9XG4gIH1cblxuICBfZGVzY2hlZHVsZUV2aWN0b3JSdW4oKSB7XG4gICAgaWYgKHRoaXMuX3NjaGVkdWxlZEV2aWN0aW9uKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5fc2NoZWR1bGVkRXZpY3Rpb24pO1xuICAgIH1cbiAgICB0aGlzLl9zY2hlZHVsZWRFdmljdGlvbiA9IG51bGw7XG4gIH1cblxuICBzdGFydCgpIHtcbiAgICBpZiAodGhpcy5fZHJhaW5pbmcgPT09IHRydWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuX3N0YXJ0ZWQgPT09IHRydWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fc3RhcnRlZCA9IHRydWU7XG4gICAgdGhpcy5fc2NoZWR1bGVFdmljdG9yUnVuKCk7XG4gICAgdGhpcy5fZW5zdXJlTWluaW11bSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlcXVlc3QgYSBuZXcgcmVzb3VyY2UuIFRoZSBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCxcbiAgICogd2hlbiBhIG5ldyByZXNvdXJjZSBpcyBhdmFpbGFibGUsIHBhc3NpbmcgdGhlIHJlc291cmNlIHRvIHRoZSBjYWxsYmFjay5cbiAgICogVE9ETzogc2hvdWxkIHdlIGFkZCBhIHNlcGVyYXRlIFwiYWNxdWlyZVdpdGhQcmlvcml0eVwiIGZ1bmN0aW9uXG4gICAqXG4gICAqIEBwYXJhbSB7TnVtYmVyfSBbcHJpb3JpdHk9MF1cbiAgICogICBPcHRpb25hbC4gIEludGVnZXIgYmV0d2VlbiAwIGFuZCAocHJpb3JpdHlSYW5nZSAtIDEpLiAgU3BlY2lmaWVzIHRoZSBwcmlvcml0eVxuICAgKiAgIG9mIHRoZSBjYWxsZXIgaWYgdGhlcmUgYXJlIG5vIGF2YWlsYWJsZSByZXNvdXJjZXMuICBMb3dlciBudW1iZXJzIG1lYW4gaGlnaGVyXG4gICAqICAgcHJpb3JpdHkuXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfVxuICAgKi9cbiAgYWNxdWlyZShwcmlvcml0eSkge1xuICAgIGlmICh0aGlzLl9zdGFydGVkID09PSBmYWxzZSAmJiB0aGlzLl9jb25maWcuYXV0b3N0YXJ0ID09PSBmYWxzZSkge1xuICAgICAgdGhpcy5zdGFydCgpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9kcmFpbmluZykge1xuICAgICAgcmV0dXJuIHRoaXMuX1Byb21pc2UucmVqZWN0KFxuICAgICAgICBuZXcgRXJyb3IoXCJwb29sIGlzIGRyYWluaW5nIGFuZCBjYW5ub3QgYWNjZXB0IHdvcmtcIilcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gVE9ETzogc2hvdWxkIHdlIGRlZmVyIHRoaXMgY2hlY2sgdGlsbCBhZnRlciB0aGlzIGV2ZW50IGxvb3AgaW5jYXNlIFwidGhlIHNpdHVhdGlvblwiIGNoYW5nZXMgaW4gdGhlIG1lYW50aW1lXG4gICAgaWYgKFxuICAgICAgdGhpcy5zcGFyZVJlc291cmNlQ2FwYWNpdHkgPCAxICYmXG4gICAgICB0aGlzLl9hdmFpbGFibGVPYmplY3RzLmxlbmd0aCA8IDEgJiZcbiAgICAgIHRoaXMuX2NvbmZpZy5tYXhXYWl0aW5nQ2xpZW50cyAhPT0gdW5kZWZpbmVkICYmXG4gICAgICB0aGlzLl93YWl0aW5nQ2xpZW50c1F1ZXVlLmxlbmd0aCA+PSB0aGlzLl9jb25maWcubWF4V2FpdGluZ0NsaWVudHNcbiAgICApIHtcbiAgICAgIHJldHVybiB0aGlzLl9Qcm9taXNlLnJlamVjdChcbiAgICAgICAgbmV3IEVycm9yKFwibWF4IHdhaXRpbmdDbGllbnRzIGNvdW50IGV4Y2VlZGVkXCIpXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc291cmNlUmVxdWVzdCA9IG5ldyBSZXNvdXJjZVJlcXVlc3QoXG4gICAgICB0aGlzLl9jb25maWcuYWNxdWlyZVRpbWVvdXRNaWxsaXMsXG4gICAgICB0aGlzLl9Qcm9taXNlXG4gICAgKTtcbiAgICB0aGlzLl93YWl0aW5nQ2xpZW50c1F1ZXVlLmVucXVldWUocmVzb3VyY2VSZXF1ZXN0LCBwcmlvcml0eSk7XG4gICAgdGhpcy5fZGlzcGVuc2UoKTtcblxuICAgIHJldHVybiByZXNvdXJjZVJlcXVlc3QucHJvbWlzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBbdXNlIG1ldGhvZCwgYXF1aXJlcyBhIHJlc291cmNlLCBwYXNzZXMgdGhlIHJlc291cmNlIHRvIGEgdXNlciBzdXBwbGllZCBmdW5jdGlvbiBhbmQgcmVsZWFzZXMgaXRdXG4gICAqIEBwYXJhbSAge0Z1bmN0aW9ufSBmbiBbYSBmdW5jdGlvbiB0aGF0IGFjY2VwdHMgYSByZXNvdXJjZSBhbmQgcmV0dXJucyBhIHByb21pc2UgdGhhdCByZXNvbHZlcy9yZWplY3RzIG9uY2UgaXQgaGFzIGZpbmlzaGVkIHVzaW5nIHRoZSByZXNvdXJjZV1cbiAgICogQHJldHVybiB7UHJvbWlzZX0gICAgICBbcmVzb2x2ZXMgb25jZSB0aGUgcmVzb3VyY2UgaXMgcmVsZWFzZWQgdG8gdGhlIHBvb2xdXG4gICAqL1xuICB1c2UoZm4sIHByaW9yaXR5KSB7XG4gICAgcmV0dXJuIHRoaXMuYWNxdWlyZShwcmlvcml0eSkudGhlbihyZXNvdXJjZSA9PiB7XG4gICAgICByZXR1cm4gZm4ocmVzb3VyY2UpLnRoZW4oXG4gICAgICAgIHJlc3VsdCA9PiB7XG4gICAgICAgICAgdGhpcy5yZWxlYXNlKHJlc291cmNlKTtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9LFxuICAgICAgICBlcnIgPT4ge1xuICAgICAgICAgIHRoaXMuZGVzdHJveShyZXNvdXJjZSk7XG4gICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9XG4gICAgICApO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIHJlc291cmNlIGlzIGN1cnJlbnRseSBvbiBsb2FuIGZyb20gdGhlIHBvb2xcbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gcmVzb3VyY2VcbiAgICogICAgUmVzb3VyY2UgZm9yIGNoZWNraW5nLlxuICAgKlxuICAgKiBAcmV0dXJucyB7Qm9vbGVhbn1cbiAgICogIFRydWUgaWYgcmVzb3VyY2UgYmVsb25ncyB0byB0aGlzIHBvb2wgYW5kIGZhbHNlIG90aGVyd2lzZVxuICAgKi9cbiAgaXNCb3Jyb3dlZFJlc291cmNlKHJlc291cmNlKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Jlc291cmNlTG9hbnMuaGFzKHJlc291cmNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIHJlc291cmNlIHRvIHRoZSBwb29sIHdoZW4gaXQgaXMgbm8gbG9uZ2VyIHJlcXVpcmVkLlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gcmVzb3VyY2VcbiAgICogICBUaGUgYWNxdWlyZWQgb2JqZWN0IHRvIGJlIHB1dCBiYWNrIHRvIHRoZSBwb29sLlxuICAgKi9cbiAgcmVsZWFzZShyZXNvdXJjZSkge1xuICAgIC8vIGNoZWNrIGZvciBhbiBvdXRzdGFuZGluZyBsb2FuXG4gICAgY29uc3QgbG9hbiA9IHRoaXMuX3Jlc291cmNlTG9hbnMuZ2V0KHJlc291cmNlKTtcblxuICAgIGlmIChsb2FuID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLl9Qcm9taXNlLnJlamVjdChcbiAgICAgICAgbmV3IEVycm9yKFwiUmVzb3VyY2Ugbm90IGN1cnJlbnRseSBwYXJ0IG9mIHRoaXMgcG9vbFwiKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLl9yZXNvdXJjZUxvYW5zLmRlbGV0ZShyZXNvdXJjZSk7XG4gICAgbG9hbi5yZXNvbHZlKCk7XG4gICAgY29uc3QgcG9vbGVkUmVzb3VyY2UgPSBsb2FuLnBvb2xlZFJlc291cmNlO1xuXG4gICAgcG9vbGVkUmVzb3VyY2UuZGVhbGxvY2F0ZSgpO1xuICAgIHRoaXMuX2FkZFBvb2xlZFJlc291cmNlVG9BdmFpbGFibGVPYmplY3RzKHBvb2xlZFJlc291cmNlKTtcblxuICAgIHRoaXMuX2Rpc3BlbnNlKCk7XG4gICAgcmV0dXJuIHRoaXMuX1Byb21pc2UucmVzb2x2ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlcXVlc3QgdGhlIHJlc291cmNlIHRvIGJlIGRlc3Ryb3llZC4gVGhlIGZhY3RvcnkncyBkZXN0cm95IGhhbmRsZXJcbiAgICogd2lsbCBhbHNvIGJlIGNhbGxlZC5cbiAgICpcbiAgICogVGhpcyBzaG91bGQgYmUgY2FsbGVkIHdpdGhpbiBhbiBhY3F1aXJlKCkgYmxvY2sgYXMgYW4gYWx0ZXJuYXRpdmUgdG8gcmVsZWFzZSgpLlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gcmVzb3VyY2VcbiAgICogICBUaGUgYWNxdWlyZWQgcmVzb3VyY2UgdG8gYmUgZGVzdG95ZWQuXG4gICAqL1xuICBkZXN0cm95KHJlc291cmNlKSB7XG4gICAgLy8gY2hlY2sgZm9yIGFuIG91dHN0YW5kaW5nIGxvYW5cbiAgICBjb25zdCBsb2FuID0gdGhpcy5fcmVzb3VyY2VMb2Fucy5nZXQocmVzb3VyY2UpO1xuXG4gICAgaWYgKGxvYW4gPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHRoaXMuX1Byb21pc2UucmVqZWN0KFxuICAgICAgICBuZXcgRXJyb3IoXCJSZXNvdXJjZSBub3QgY3VycmVudGx5IHBhcnQgb2YgdGhpcyBwb29sXCIpXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMuX3Jlc291cmNlTG9hbnMuZGVsZXRlKHJlc291cmNlKTtcbiAgICBsb2FuLnJlc29sdmUoKTtcbiAgICBjb25zdCBwb29sZWRSZXNvdXJjZSA9IGxvYW4ucG9vbGVkUmVzb3VyY2U7XG5cbiAgICBwb29sZWRSZXNvdXJjZS5kZWFsbG9jYXRlKCk7XG4gICAgdGhpcy5fZGVzdHJveShwb29sZWRSZXNvdXJjZSk7XG5cbiAgICB0aGlzLl9kaXNwZW5zZSgpO1xuICAgIHJldHVybiB0aGlzLl9Qcm9taXNlLnJlc29sdmUoKTtcbiAgfVxuXG4gIF9hZGRQb29sZWRSZXNvdXJjZVRvQXZhaWxhYmxlT2JqZWN0cyhwb29sZWRSZXNvdXJjZSkge1xuICAgIHBvb2xlZFJlc291cmNlLmlkbGUoKTtcbiAgICBpZiAodGhpcy5fY29uZmlnLmZpZm8gPT09IHRydWUpIHtcbiAgICAgIHRoaXMuX2F2YWlsYWJsZU9iamVjdHMucHVzaChwb29sZWRSZXNvdXJjZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2F2YWlsYWJsZU9iamVjdHMudW5zaGlmdChwb29sZWRSZXNvdXJjZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIERpc2FsbG93IGFueSBuZXcgYWNxdWlyZSBjYWxscyBhbmQgbGV0IHRoZSByZXF1ZXN0IGJhY2tsb2cgZGlzc2FwYXRlLlxuICAgKiBUaGUgUG9vbCB3aWxsIG5vIGxvbmdlciBhdHRlbXB0IHRvIG1haW50YWluIGEgXCJtaW5cIiBudW1iZXIgb2YgcmVzb3VyY2VzXG4gICAqIGFuZCB3aWxsIG9ubHkgbWFrZSBuZXcgcmVzb3VyY2VzIG9uIGRlbWFuZC5cbiAgICogUmVzb2x2ZXMgb25jZSBhbGwgcmVzb3VyY2UgcmVxdWVzdHMgYXJlIGZ1bGZpbGxlZCBhbmQgYWxsIHJlc291cmNlcyBhcmUgcmV0dXJuZWQgdG8gcG9vbCBhbmQgYXZhaWxhYmxlLi4uXG4gICAqIFNob3VsZCBwcm9iYWJseSBiZSBjYWxsZWQgXCJkcmFpbiB3b3JrXCJcbiAgICogQHJldHVybnMge1Byb21pc2V9XG4gICAqL1xuICBkcmFpbigpIHtcbiAgICB0aGlzLl9kcmFpbmluZyA9IHRydWU7XG4gICAgcmV0dXJuIHRoaXMuX19hbGxSZXNvdXJjZVJlcXVlc3RzU2V0dGxlZCgpXG4gICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9fYWxsUmVzb3VyY2VzUmV0dXJuZWQoKTtcbiAgICAgIH0pXG4gICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgIHRoaXMuX2Rlc2NoZWR1bGVFdmljdG9yUnVuKCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIF9fYWxsUmVzb3VyY2VSZXF1ZXN0c1NldHRsZWQoKSB7XG4gICAgaWYgKHRoaXMuX3dhaXRpbmdDbGllbnRzUXVldWUubGVuZ3RoID4gMCkge1xuICAgICAgLy8gd2FpdCBmb3IgbGFzdCB3YWl0aW5nIGNsaWVudCB0byBiZSBzZXR0bGVkXG4gICAgICAvLyBGSVhNRTogd2hhdCBpZiB0aGV5IGNhbiBcInJlc29sdmVcIiBvdXQgb2Ygb3JkZXIuLi4uP1xuICAgICAgcmV0dXJuIHJlZmxlY3Rvcih0aGlzLl93YWl0aW5nQ2xpZW50c1F1ZXVlLnRhaWwucHJvbWlzZSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9Qcm9taXNlLnJlc29sdmUoKTtcbiAgfVxuXG4gIC8vIEZJWE1FOiB0aGlzIGlzIGEgaG9ycmlmaWMgbWVzc1xuICBfX2FsbFJlc291cmNlc1JldHVybmVkKCkge1xuICAgIGNvbnN0IHBzID0gQXJyYXkuZnJvbSh0aGlzLl9yZXNvdXJjZUxvYW5zLnZhbHVlcygpKVxuICAgICAgLm1hcChsb2FuID0+IGxvYW4ucHJvbWlzZSlcbiAgICAgIC5tYXAocmVmbGVjdG9yKTtcbiAgICByZXR1cm4gdGhpcy5fUHJvbWlzZS5hbGwocHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvcmNpYmx5IGRlc3Ryb3lzIGFsbCBhdmFpbGFibGUgcmVzb3VyY2VzIHJlZ2FyZGxlc3Mgb2YgdGltZW91dC4gIEludGVuZGVkIHRvIGJlXG4gICAqIGludm9rZWQgYXMgcGFydCBvZiBhIGRyYWluLiAgRG9lcyBub3QgcHJldmVudCB0aGUgY3JlYXRpb24gb2YgbmV3XG4gICAqIHJlc291cmNlcyBhcyBhIHJlc3VsdCBvZiBzdWJzZXF1ZW50IGNhbGxzIHRvIGFjcXVpcmUuXG4gICAqXG4gICAqIE5vdGUgdGhhdCBpZiBmYWN0b3J5Lm1pbiA+IDAgYW5kIHRoZSBwb29sIGlzbid0IFwiZHJhaW5pbmdcIiwgdGhlIHBvb2wgd2lsbCBkZXN0cm95IGFsbCBpZGxlIHJlc291cmNlc1xuICAgKiBpbiB0aGUgcG9vbCwgYnV0IHJlcGxhY2UgdGhlbSB3aXRoIG5ld2x5IGNyZWF0ZWQgcmVzb3VyY2VzIHVwIHRvIHRoZVxuICAgKiBzcGVjaWZpZWQgZmFjdG9yeS5taW4gdmFsdWUuICBJZiB0aGlzIGlzIG5vdCBkZXNpcmVkLCBzZXQgZmFjdG9yeS5taW5cbiAgICogdG8gemVybyBiZWZvcmUgY2FsbGluZyBjbGVhcigpXG4gICAqXG4gICAqL1xuICBjbGVhcigpIHtcbiAgICBjb25zdCByZWZsZWN0ZWRDcmVhdGVQcm9taXNlcyA9IEFycmF5LmZyb20oXG4gICAgICB0aGlzLl9mYWN0b3J5Q3JlYXRlT3BlcmF0aW9uc1xuICAgICkubWFwKHJlZmxlY3Rvcik7XG5cbiAgICAvLyB3YWl0IGZvciBvdXRzdGFuZGluZyBmYWN0b3J5LmNyZWF0ZSB0byBjb21wbGV0ZVxuICAgIHJldHVybiB0aGlzLl9Qcm9taXNlLmFsbChyZWZsZWN0ZWRDcmVhdGVQcm9taXNlcykudGhlbigoKSA9PiB7XG4gICAgICAvLyBEZXN0cm95IGV4aXN0aW5nIHJlc291cmNlc1xuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgZm9yIChjb25zdCByZXNvdXJjZSBvZiB0aGlzLl9hdmFpbGFibGVPYmplY3RzKSB7XG4gICAgICAgIHRoaXMuX2Rlc3Ryb3kocmVzb3VyY2UpO1xuICAgICAgfVxuICAgICAgY29uc3QgcmVmbGVjdGVkRGVzdHJveVByb21pc2VzID0gQXJyYXkuZnJvbShcbiAgICAgICAgdGhpcy5fZmFjdG9yeURlc3Ryb3lPcGVyYXRpb25zXG4gICAgICApLm1hcChyZWZsZWN0b3IpO1xuICAgICAgcmV0dXJuIHJlZmxlY3Rvcih0aGlzLl9Qcm9taXNlLmFsbChyZWZsZWN0ZWREZXN0cm95UHJvbWlzZXMpKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXYWl0cyB1bnRpbCB0aGUgcG9vbCBpcyByZWFkeS5cbiAgICogV2UgZGVmaW5lIHJlYWR5IGJ5IGNoZWNraW5nIGlmIHRoZSBjdXJyZW50IHJlc291cmNlIG51bWJlciBpcyBhdCBsZWFzdFxuICAgKiB0aGUgbWluaW11bSBudW1iZXIgZGVmaW5lZC5cbiAgICogQHJldHVybnMge1Byb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgbWluaW11bSBudW1iZXIgaXMgcmVhZHkuXG4gICAqL1xuICByZWFkeSgpIHtcbiAgICByZXR1cm4gbmV3IHRoaXMuX1Byb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICBjb25zdCBpc1JlYWR5ID0gKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5hdmFpbGFibGUgPj0gdGhpcy5taW4pIHtcbiAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2V0VGltZW91dChpc1JlYWR5LCAxMDApO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBpc1JlYWR5KCk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogSG93IG1hbnkgcmVzb3VyY2VzIGFyZSBhdmFpbGFibGUgdG8gYWxsb2NhdGVkXG4gICAqIChpbmNsdWRlcyByZXNvdXJjZXMgdGhhdCBoYXZlIG5vdCBiZWVuIHRlc3RlZCBhbmQgbWF5IGZhdWwgdmFsaWRhdGlvbilcbiAgICogTk9URTogaW50ZXJuYWwgZm9yIG5vdyBhcyB0aGUgbmFtZSBpcyBhd2Z1bCBhbmQgbWlnaHQgbm90IGJlIHVzZWZ1bCB0byBhbnlvbmVcbiAgICogQHJldHVybiB7TnVtYmVyfSBudW1iZXIgb2YgcmVzb3VyY2VzIHRoZSBwb29sIGhhcyB0byBhbGxvY2F0ZVxuICAgKi9cbiAgZ2V0IF9wb3RlbnRpYWxseUFsbG9jYWJsZVJlc291cmNlQ291bnQoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuX2F2YWlsYWJsZU9iamVjdHMubGVuZ3RoICtcbiAgICAgIHRoaXMuX3Rlc3RPbkJvcnJvd1Jlc291cmNlcy5zaXplICtcbiAgICAgIHRoaXMuX3Rlc3RPblJldHVyblJlc291cmNlcy5zaXplICtcbiAgICAgIHRoaXMuX2ZhY3RvcnlDcmVhdGVPcGVyYXRpb25zLnNpemVcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBjb21iaW5lZCBjb3VudCBvZiB0aGUgY3VycmVudGx5IGNyZWF0ZWQgb2JqZWN0cyBhbmQgdGhvc2UgaW4gdGhlXG4gICAqIHByb2Nlc3Mgb2YgYmVpbmcgY3JlYXRlZFxuICAgKiBEb2VzIE5PVCBpbmNsdWRlIHJlc291cmNlcyBpbiB0aGUgcHJvY2VzcyBvZiBiZWluZyBkZXN0cm95ZWRcbiAgICogc29ydCBvZiBsZWdhY3kuLi5cbiAgICogQHJldHVybiB7TnVtYmVyfVxuICAgKi9cbiAgZ2V0IF9jb3VudCgpIHtcbiAgICByZXR1cm4gdGhpcy5fYWxsT2JqZWN0cy5zaXplICsgdGhpcy5fZmFjdG9yeUNyZWF0ZU9wZXJhdGlvbnMuc2l6ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIb3cgbWFueSBtb3JlIHJlc291cmNlcyBkb2VzIHRoZSBwb29sIGhhdmUgcm9vbSBmb3JcbiAgICogQHJldHVybiB7TnVtYmVyfSBudW1iZXIgb2YgcmVzb3VyY2VzIHRoZSBwb29sIGNvdWxkIGNyZWF0ZSBiZWZvcmUgaGl0dGluZyBhbnkgbGltaXRzXG4gICAqL1xuICBnZXQgc3BhcmVSZXNvdXJjZUNhcGFjaXR5KCkge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLl9jb25maWcubWF4IC1cbiAgICAgICh0aGlzLl9hbGxPYmplY3RzLnNpemUgKyB0aGlzLl9mYWN0b3J5Q3JlYXRlT3BlcmF0aW9ucy5zaXplKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogc2VlIF9jb3VudCBhYm92ZVxuICAgKiBAcmV0dXJuIHtOdW1iZXJ9IFtkZXNjcmlwdGlvbl1cbiAgICovXG4gIGdldCBzaXplKCkge1xuICAgIHJldHVybiB0aGlzLl9jb3VudDtcbiAgfVxuXG4gIC8qKlxuICAgKiBudW1iZXIgb2YgYXZhaWxhYmxlIHJlc291cmNlc1xuICAgKiBAcmV0dXJuIHtOdW1iZXJ9IFtkZXNjcmlwdGlvbl1cbiAgICovXG4gIGdldCBhdmFpbGFibGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2F2YWlsYWJsZU9iamVjdHMubGVuZ3RoO1xuICB9XG5cbiAgLyoqXG4gICAqIG51bWJlciBvZiByZXNvdXJjZXMgdGhhdCBhcmUgY3VycmVudGx5IGFjcXVpcmVkXG4gICAqIEByZXR1cm4ge051bWJlcn0gW2Rlc2NyaXB0aW9uXVxuICAgKi9cbiAgZ2V0IGJvcnJvd2VkKCkge1xuICAgIHJldHVybiB0aGlzLl9yZXNvdXJjZUxvYW5zLnNpemU7XG4gIH1cblxuICAvKipcbiAgICogbnVtYmVyIG9mIHdhaXRpbmcgYWNxdWlyZSBjYWxsc1xuICAgKiBAcmV0dXJuIHtOdW1iZXJ9IFtkZXNjcmlwdGlvbl1cbiAgICovXG4gIGdldCBwZW5kaW5nKCkge1xuICAgIHJldHVybiB0aGlzLl93YWl0aW5nQ2xpZW50c1F1ZXVlLmxlbmd0aDtcbiAgfVxuXG4gIC8qKlxuICAgKiBtYXhpbXVtIHNpemUgb2YgdGhlIHBvb2xcbiAgICogQHJldHVybiB7TnVtYmVyfSBbZGVzY3JpcHRpb25dXG4gICAqL1xuICBnZXQgbWF4KCkge1xuICAgIHJldHVybiB0aGlzLl9jb25maWcubWF4O1xuICB9XG5cbiAgLyoqXG4gICAqIG1pbmltdW0gc2l6ZSBvZiB0aGUgcG9vbFxuICAgKiBAcmV0dXJuIHtOdW1iZXJ9IFtkZXNjcmlwdGlvbl1cbiAgICovXG4gIGdldCBtaW4oKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbmZpZy5taW47XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBQb29sO1xuIiwKICAgICJjb25zdCBQb29sID0gcmVxdWlyZShcIi4vbGliL1Bvb2xcIik7XG5jb25zdCBEZXF1ZSA9IHJlcXVpcmUoXCIuL2xpYi9EZXF1ZVwiKTtcbmNvbnN0IFByaW9yaXR5UXVldWUgPSByZXF1aXJlKFwiLi9saWIvUHJpb3JpdHlRdWV1ZVwiKTtcbmNvbnN0IERlZmF1bHRFdmljdG9yID0gcmVxdWlyZShcIi4vbGliL0RlZmF1bHRFdmljdG9yXCIpO1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gIFBvb2w6IFBvb2wsXG4gIERlcXVlOiBEZXF1ZSxcbiAgUHJpb3JpdHlRdWV1ZTogUHJpb3JpdHlRdWV1ZSxcbiAgRGVmYXVsdEV2aWN0b3I6IERlZmF1bHRFdmljdG9yLFxuICBjcmVhdGVQb29sOiBmdW5jdGlvbihmYWN0b3J5LCBjb25maWcpIHtcbiAgICByZXR1cm4gbmV3IFBvb2woRGVmYXVsdEV2aWN0b3IsIERlcXVlLCBQcmlvcml0eVF1ZXVlLCBmYWN0b3J5LCBjb25maWcpO1xuICB9XG59O1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0ID0gKHRoaXMgJiYgdGhpcy5fX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KSB8fCBmdW5jdGlvbiAocmVjZWl2ZXIsIHN0YXRlLCBraW5kLCBmKSB7XG4gICAgaWYgKGtpbmQgPT09IFwiYVwiICYmICFmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgZ2V0dGVyXCIpO1xuICAgIGlmICh0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyICE9PSBzdGF0ZSB8fCAhZiA6ICFzdGF0ZS5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHJlYWQgcHJpdmF0ZSBtZW1iZXIgZnJvbSBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0XCIpO1xuICAgIHJldHVybiBraW5kID09PSBcIm1cIiA/IGYgOiBraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlcikgOiBmID8gZi52YWx1ZSA6IHN0YXRlLmdldChyZWNlaXZlcik7XG59O1xudmFyIF9fY2xhc3NQcml2YXRlRmllbGRTZXQgPSAodGhpcyAmJiB0aGlzLl9fY2xhc3NQcml2YXRlRmllbGRTZXQpIHx8IGZ1bmN0aW9uIChyZWNlaXZlciwgc3RhdGUsIHZhbHVlLCBraW5kLCBmKSB7XG4gICAgaWYgKGtpbmQgPT09IFwibVwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBtZXRob2QgaXMgbm90IHdyaXRhYmxlXCIpO1xuICAgIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIHNldHRlclwiKTtcbiAgICBpZiAodHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciAhPT0gc3RhdGUgfHwgIWYgOiAhc3RhdGUuaGFzKHJlY2VpdmVyKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCB3cml0ZSBwcml2YXRlIG1lbWJlciB0byBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0XCIpO1xuICAgIHJldHVybiAoa2luZCA9PT0gXCJhXCIgPyBmLmNhbGwocmVjZWl2ZXIsIHZhbHVlKSA6IGYgPyBmLnZhbHVlID0gdmFsdWUgOiBzdGF0ZS5zZXQocmVjZWl2ZXIsIHZhbHVlKSksIHZhbHVlO1xufTtcbnZhciBfUmVkaXNDbGllbnRfaW5zdGFuY2VzLCBfYSwgX1JlZGlzQ2xpZW50X29wdGlvbnMsIF9SZWRpc0NsaWVudF9zb2NrZXQsIF9SZWRpc0NsaWVudF9xdWV1ZSwgX1JlZGlzQ2xpZW50X2lzb2xhdGlvblBvb2wsIF9SZWRpc0NsaWVudF92NCwgX1JlZGlzQ2xpZW50X3NlbGVjdGVkREIsIF9SZWRpc0NsaWVudF9pbml0aWF0ZU9wdGlvbnMsIF9SZWRpc0NsaWVudF9pbml0aWF0ZVF1ZXVlLCBfUmVkaXNDbGllbnRfaW5pdGlhdGVTb2NrZXQsIF9SZWRpc0NsaWVudF9pbml0aWF0ZUlzb2xhdGlvblBvb2wsIF9SZWRpc0NsaWVudF9sZWdhY3lNb2RlLCBfUmVkaXNDbGllbnRfbGVnYWN5U2VuZENvbW1hbmQsIF9SZWRpc0NsaWVudF9kZWZpbmVMZWdhY3lDb21tYW5kLCBfUmVkaXNDbGllbnRfcGluZ1RpbWVyLCBfUmVkaXNDbGllbnRfc2V0UGluZ1RpbWVyLCBfUmVkaXNDbGllbnRfc2VuZENvbW1hbmQsIF9SZWRpc0NsaWVudF9wdWJTdWJDb21tYW5kLCBfUmVkaXNDbGllbnRfdGljaywgX1JlZGlzQ2xpZW50X2FkZE11bHRpQ29tbWFuZHMsIF9SZWRpc0NsaWVudF9kZXN0cm95SXNvbGF0aW9uUG9vbDtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGNvbW1hbmRzXzEgPSByZXF1aXJlKFwiLi9jb21tYW5kc1wiKTtcbmNvbnN0IHNvY2tldF8xID0gcmVxdWlyZShcIi4vc29ja2V0XCIpO1xuY29uc3QgY29tbWFuZHNfcXVldWVfMSA9IHJlcXVpcmUoXCIuL2NvbW1hbmRzLXF1ZXVlXCIpO1xuY29uc3QgbXVsdGlfY29tbWFuZF8xID0gcmVxdWlyZShcIi4vbXVsdGktY29tbWFuZFwiKTtcbmNvbnN0IGV2ZW50c18xID0gcmVxdWlyZShcImV2ZW50c1wiKTtcbmNvbnN0IGNvbW1hbmRfb3B0aW9uc18xID0gcmVxdWlyZShcIi4uL2NvbW1hbmQtb3B0aW9uc1wiKTtcbmNvbnN0IGNvbW1hbmRlcl8xID0gcmVxdWlyZShcIi4uL2NvbW1hbmRlclwiKTtcbmNvbnN0IGdlbmVyaWNfcG9vbF8xID0gcmVxdWlyZShcImdlbmVyaWMtcG9vbFwiKTtcbmNvbnN0IGVycm9yc18xID0gcmVxdWlyZShcIi4uL2Vycm9yc1wiKTtcbmNvbnN0IHVybF8xID0gcmVxdWlyZShcInVybFwiKTtcbmNvbnN0IHB1Yl9zdWJfMSA9IHJlcXVpcmUoXCIuL3B1Yi1zdWJcIik7XG5jb25zdCBwYWNrYWdlX2pzb25fMSA9IHJlcXVpcmUoXCIuLi8uLi9wYWNrYWdlLmpzb25cIik7XG5jbGFzcyBSZWRpc0NsaWVudCBleHRlbmRzIGV2ZW50c18xLkV2ZW50RW1pdHRlciB7XG4gICAgc3RhdGljIGNvbW1hbmRPcHRpb25zKG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuICgwLCBjb21tYW5kX29wdGlvbnNfMS5jb21tYW5kT3B0aW9ucykob3B0aW9ucyk7XG4gICAgfVxuICAgIHN0YXRpYyBleHRlbmQoZXh0ZW5zaW9ucykge1xuICAgICAgICBjb25zdCBDbGllbnQgPSAoMCwgY29tbWFuZGVyXzEuYXR0YWNoRXh0ZW5zaW9ucykoe1xuICAgICAgICAgICAgQmFzZUNsYXNzOiBfYSxcbiAgICAgICAgICAgIG1vZHVsZXNFeGVjdXRvcjogX2EucHJvdG90eXBlLmNvbW1hbmRzRXhlY3V0b3IsXG4gICAgICAgICAgICBtb2R1bGVzOiBleHRlbnNpb25zPy5tb2R1bGVzLFxuICAgICAgICAgICAgZnVuY3Rpb25zRXhlY3V0b3I6IF9hLnByb3RvdHlwZS5mdW5jdGlvbnNFeGVjdXRlcixcbiAgICAgICAgICAgIGZ1bmN0aW9uczogZXh0ZW5zaW9ucz8uZnVuY3Rpb25zLFxuICAgICAgICAgICAgc2NyaXB0c0V4ZWN1dG9yOiBfYS5wcm90b3R5cGUuc2NyaXB0c0V4ZWN1dGVyLFxuICAgICAgICAgICAgc2NyaXB0czogZXh0ZW5zaW9ucz8uc2NyaXB0c1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKENsaWVudCAhPT0gX2EpIHtcbiAgICAgICAgICAgIENsaWVudC5wcm90b3R5cGUuTXVsdGkgPSBtdWx0aV9jb21tYW5kXzEuZGVmYXVsdC5leHRlbmQoZXh0ZW5zaW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIENsaWVudDtcbiAgICB9XG4gICAgc3RhdGljIGNyZWF0ZShvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiBuZXcgKF9hLmV4dGVuZChvcHRpb25zKSkob3B0aW9ucyk7XG4gICAgfVxuICAgIHN0YXRpYyBwYXJzZVVSTCh1cmwpIHtcbiAgICAgICAgLy8gaHR0cHM6Ly93d3cuaWFuYS5vcmcvYXNzaWdubWVudHMvdXJpLXNjaGVtZXMvcHJvdi9yZWRpc1xuICAgICAgICBjb25zdCB7IGhvc3RuYW1lLCBwb3J0LCBwcm90b2NvbCwgdXNlcm5hbWUsIHBhc3N3b3JkLCBwYXRobmFtZSB9ID0gbmV3IHVybF8xLlVSTCh1cmwpLCBwYXJzZWQgPSB7XG4gICAgICAgICAgICBzb2NrZXQ6IHtcbiAgICAgICAgICAgICAgICBob3N0OiBob3N0bmFtZVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBpZiAocHJvdG9jb2wgPT09ICdyZWRpc3M6Jykge1xuICAgICAgICAgICAgcGFyc2VkLnNvY2tldC50bHMgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHByb3RvY29sICE9PSAncmVkaXM6Jykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBwcm90b2NvbCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwb3J0KSB7XG4gICAgICAgICAgICBwYXJzZWQuc29ja2V0LnBvcnQgPSBOdW1iZXIocG9ydCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHVzZXJuYW1lKSB7XG4gICAgICAgICAgICBwYXJzZWQudXNlcm5hbWUgPSBkZWNvZGVVUklDb21wb25lbnQodXNlcm5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYXNzd29yZCkge1xuICAgICAgICAgICAgcGFyc2VkLnBhc3N3b3JkID0gZGVjb2RlVVJJQ29tcG9uZW50KHBhc3N3b3JkKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGF0aG5hbWUubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgY29uc3QgZGF0YWJhc2UgPSBOdW1iZXIocGF0aG5hbWUuc3Vic3RyaW5nKDEpKTtcbiAgICAgICAgICAgIGlmIChpc05hTihkYXRhYmFzZSkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIHBhdGhuYW1lJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwYXJzZWQuZGF0YWJhc2UgPSBkYXRhYmFzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGFyc2VkO1xuICAgIH1cbiAgICBnZXQgb3B0aW9ucygpIHtcbiAgICAgICAgcmV0dXJuIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzQ2xpZW50X29wdGlvbnMsIFwiZlwiKTtcbiAgICB9XG4gICAgZ2V0IGlzT3BlbigpIHtcbiAgICAgICAgcmV0dXJuIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzQ2xpZW50X3NvY2tldCwgXCJmXCIpLmlzT3BlbjtcbiAgICB9XG4gICAgZ2V0IGlzUmVhZHkoKSB7XG4gICAgICAgIHJldHVybiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc0NsaWVudF9zb2NrZXQsIFwiZlwiKS5pc1JlYWR5O1xuICAgIH1cbiAgICBnZXQgaXNQdWJTdWJBY3RpdmUoKSB7XG4gICAgICAgIHJldHVybiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc0NsaWVudF9xdWV1ZSwgXCJmXCIpLmlzUHViU3ViQWN0aXZlO1xuICAgIH1cbiAgICBnZXQgdjQoKSB7XG4gICAgICAgIGlmICghX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUmVkaXNDbGllbnRfb3B0aW9ucywgXCJmXCIpPy5sZWdhY3lNb2RlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3RoZSBjbGllbnQgaXMgbm90IGluIFwibGVnYWN5IG1vZGVcIicpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc0NsaWVudF92NCwgXCJmXCIpO1xuICAgIH1cbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIF9SZWRpc0NsaWVudF9pbnN0YW5jZXMuYWRkKHRoaXMpO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgXCJjb21tYW5kT3B0aW9uc1wiLCB7XG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogX2EuY29tbWFuZE9wdGlvbnNcbiAgICAgICAgfSk7XG4gICAgICAgIF9SZWRpc0NsaWVudF9vcHRpb25zLnNldCh0aGlzLCB2b2lkIDApO1xuICAgICAgICBfUmVkaXNDbGllbnRfc29ja2V0LnNldCh0aGlzLCB2b2lkIDApO1xuICAgICAgICBfUmVkaXNDbGllbnRfcXVldWUuc2V0KHRoaXMsIHZvaWQgMCk7XG4gICAgICAgIF9SZWRpc0NsaWVudF9pc29sYXRpb25Qb29sLnNldCh0aGlzLCB2b2lkIDApO1xuICAgICAgICBfUmVkaXNDbGllbnRfdjQuc2V0KHRoaXMsIHt9KTtcbiAgICAgICAgX1JlZGlzQ2xpZW50X3NlbGVjdGVkREIuc2V0KHRoaXMsIDApO1xuICAgICAgICBfUmVkaXNDbGllbnRfcGluZ1RpbWVyLnNldCh0aGlzLCB2b2lkIDApO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgXCJzZWxlY3RcIiwge1xuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IHRoaXMuU0VMRUNUXG4gICAgICAgIH0pO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgXCJzdWJzY3JpYmVcIiwge1xuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IHRoaXMuU1VCU0NSSUJFXG4gICAgICAgIH0pO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgXCJ1bnN1YnNjcmliZVwiLCB7XG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogdGhpcy5VTlNVQlNDUklCRVxuICAgICAgICB9KTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIFwicFN1YnNjcmliZVwiLCB7XG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogdGhpcy5QU1VCU0NSSUJFXG4gICAgICAgIH0pO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgXCJwVW5zdWJzY3JpYmVcIiwge1xuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IHRoaXMuUFVOU1VCU0NSSUJFXG4gICAgICAgIH0pO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgXCJzU3Vic2NyaWJlXCIsIHtcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLlNTVUJTQ1JJQkVcbiAgICAgICAgfSk7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcInNVbnN1YnNjcmliZVwiLCB7XG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogdGhpcy5TVU5TVUJTQ1JJQkVcbiAgICAgICAgfSk7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcInF1aXRcIiwge1xuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IHRoaXMuUVVJVFxuICAgICAgICB9KTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIFwibXVsdGlcIiwge1xuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IHRoaXMuTVVMVElcbiAgICAgICAgfSk7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX1JlZGlzQ2xpZW50X29wdGlvbnMsIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzQ2xpZW50X2luc3RhbmNlcywgXCJtXCIsIF9SZWRpc0NsaWVudF9pbml0aWF0ZU9wdGlvbnMpLmNhbGwodGhpcywgb3B0aW9ucyksIFwiZlwiKTtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfUmVkaXNDbGllbnRfcXVldWUsIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzQ2xpZW50X2luc3RhbmNlcywgXCJtXCIsIF9SZWRpc0NsaWVudF9pbml0aWF0ZVF1ZXVlKS5jYWxsKHRoaXMpLCBcImZcIik7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX1JlZGlzQ2xpZW50X3NvY2tldCwgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUmVkaXNDbGllbnRfaW5zdGFuY2VzLCBcIm1cIiwgX1JlZGlzQ2xpZW50X2luaXRpYXRlU29ja2V0KS5jYWxsKHRoaXMpLCBcImZcIik7XG4gICAgICAgIC8vIHNob3VsZCBiZSBpbml0aWF0ZWQgaW4gY29ubmVjdCwgbm90IGhlcmVcbiAgICAgICAgLy8gVE9ETzogY29uc2lkZXIgYnJlYWtpbmcgaW4gdjVcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfUmVkaXNDbGllbnRfaXNvbGF0aW9uUG9vbCwgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUmVkaXNDbGllbnRfaW5zdGFuY2VzLCBcIm1cIiwgX1JlZGlzQ2xpZW50X2luaXRpYXRlSXNvbGF0aW9uUG9vbCkuY2FsbCh0aGlzKSwgXCJmXCIpO1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc0NsaWVudF9pbnN0YW5jZXMsIFwibVwiLCBfUmVkaXNDbGllbnRfbGVnYWN5TW9kZSkuY2FsbCh0aGlzKTtcbiAgICB9XG4gICAgZHVwbGljYXRlKG92ZXJyaWRlcykge1xuICAgICAgICByZXR1cm4gbmV3IChPYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3IpKHtcbiAgICAgICAgICAgIC4uLl9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzQ2xpZW50X29wdGlvbnMsIFwiZlwiKSxcbiAgICAgICAgICAgIC4uLm92ZXJyaWRlc1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgYXN5bmMgY29ubmVjdCgpIHtcbiAgICAgICAgLy8gc2VlIGNvbW1lbnQgaW4gY29uc3RydWN0b3JcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfUmVkaXNDbGllbnRfaXNvbGF0aW9uUG9vbCwgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUmVkaXNDbGllbnRfaXNvbGF0aW9uUG9vbCwgXCJmXCIpID8/IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzQ2xpZW50X2luc3RhbmNlcywgXCJtXCIsIF9SZWRpc0NsaWVudF9pbml0aWF0ZUlzb2xhdGlvblBvb2wpLmNhbGwodGhpcyksIFwiZlwiKTtcbiAgICAgICAgYXdhaXQgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUmVkaXNDbGllbnRfc29ja2V0LCBcImZcIikuY29ubmVjdCgpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgYXN5bmMgY29tbWFuZHNFeGVjdXRvcihjb21tYW5kLCBhcmdzKSB7XG4gICAgICAgIGNvbnN0IHsgYXJnczogcmVkaXNBcmdzLCBvcHRpb25zIH0gPSAoMCwgY29tbWFuZGVyXzEudHJhbnNmb3JtQ29tbWFuZEFyZ3VtZW50cykoY29tbWFuZCwgYXJncyk7XG4gICAgICAgIHJldHVybiAoMCwgY29tbWFuZGVyXzEudHJhbnNmb3JtQ29tbWFuZFJlcGx5KShjb21tYW5kLCBhd2FpdCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc0NsaWVudF9pbnN0YW5jZXMsIFwibVwiLCBfUmVkaXNDbGllbnRfc2VuZENvbW1hbmQpLmNhbGwodGhpcywgcmVkaXNBcmdzLCBvcHRpb25zKSwgcmVkaXNBcmdzLnByZXNlcnZlKTtcbiAgICB9XG4gICAgc2VuZENvbW1hbmQoYXJncywgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUmVkaXNDbGllbnRfaW5zdGFuY2VzLCBcIm1cIiwgX1JlZGlzQ2xpZW50X3NlbmRDb21tYW5kKS5jYWxsKHRoaXMsIGFyZ3MsIG9wdGlvbnMpO1xuICAgIH1cbiAgICBhc3luYyBmdW5jdGlvbnNFeGVjdXRlcihmbiwgYXJncywgbmFtZSkge1xuICAgICAgICBjb25zdCB7IGFyZ3M6IHJlZGlzQXJncywgb3B0aW9ucyB9ID0gKDAsIGNvbW1hbmRlcl8xLnRyYW5zZm9ybUNvbW1hbmRBcmd1bWVudHMpKGZuLCBhcmdzKTtcbiAgICAgICAgcmV0dXJuICgwLCBjb21tYW5kZXJfMS50cmFuc2Zvcm1Db21tYW5kUmVwbHkpKGZuLCBhd2FpdCB0aGlzLmV4ZWN1dGVGdW5jdGlvbihuYW1lLCBmbiwgcmVkaXNBcmdzLCBvcHRpb25zKSwgcmVkaXNBcmdzLnByZXNlcnZlKTtcbiAgICB9XG4gICAgZXhlY3V0ZUZ1bmN0aW9uKG5hbWUsIGZuLCBhcmdzLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc0NsaWVudF9pbnN0YW5jZXMsIFwibVwiLCBfUmVkaXNDbGllbnRfc2VuZENvbW1hbmQpLmNhbGwodGhpcywgKDAsIGNvbW1hbmRlcl8xLmZDYWxsQXJndW1lbnRzKShuYW1lLCBmbiwgYXJncyksIG9wdGlvbnMpO1xuICAgIH1cbiAgICBhc3luYyBzY3JpcHRzRXhlY3V0ZXIoc2NyaXB0LCBhcmdzKSB7XG4gICAgICAgIGNvbnN0IHsgYXJnczogcmVkaXNBcmdzLCBvcHRpb25zIH0gPSAoMCwgY29tbWFuZGVyXzEudHJhbnNmb3JtQ29tbWFuZEFyZ3VtZW50cykoc2NyaXB0LCBhcmdzKTtcbiAgICAgICAgcmV0dXJuICgwLCBjb21tYW5kZXJfMS50cmFuc2Zvcm1Db21tYW5kUmVwbHkpKHNjcmlwdCwgYXdhaXQgdGhpcy5leGVjdXRlU2NyaXB0KHNjcmlwdCwgcmVkaXNBcmdzLCBvcHRpb25zKSwgcmVkaXNBcmdzLnByZXNlcnZlKTtcbiAgICB9XG4gICAgYXN5bmMgZXhlY3V0ZVNjcmlwdChzY3JpcHQsIGFyZ3MsIG9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgcmVkaXNBcmdzID0gWydFVkFMU0hBJywgc2NyaXB0LlNIQTFdO1xuICAgICAgICBpZiAoc2NyaXB0Lk5VTUJFUl9PRl9LRVlTICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJlZGlzQXJncy5wdXNoKHNjcmlwdC5OVU1CRVJfT0ZfS0VZUy50b1N0cmluZygpKTtcbiAgICAgICAgfVxuICAgICAgICByZWRpc0FyZ3MucHVzaCguLi5hcmdzKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc0NsaWVudF9pbnN0YW5jZXMsIFwibVwiLCBfUmVkaXNDbGllbnRfc2VuZENvbW1hbmQpLmNhbGwodGhpcywgcmVkaXNBcmdzLCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBpZiAoIWVycj8ubWVzc2FnZT8uc3RhcnRzV2l0aD8uKCdOT1NDUklQVCcpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVkaXNBcmdzWzBdID0gJ0VWQUwnO1xuICAgICAgICAgICAgcmVkaXNBcmdzWzFdID0gc2NyaXB0LlNDUklQVDtcbiAgICAgICAgICAgIHJldHVybiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc0NsaWVudF9pbnN0YW5jZXMsIFwibVwiLCBfUmVkaXNDbGllbnRfc2VuZENvbW1hbmQpLmNhbGwodGhpcywgcmVkaXNBcmdzLCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBhc3luYyBTRUxFQ1Qob3B0aW9ucywgZGIpIHtcbiAgICAgICAgaWYgKCEoMCwgY29tbWFuZF9vcHRpb25zXzEuaXNDb21tYW5kT3B0aW9ucykob3B0aW9ucykpIHtcbiAgICAgICAgICAgIGRiID0gb3B0aW9ucztcbiAgICAgICAgICAgIG9wdGlvbnMgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzQ2xpZW50X2luc3RhbmNlcywgXCJtXCIsIF9SZWRpc0NsaWVudF9zZW5kQ29tbWFuZCkuY2FsbCh0aGlzLCBbJ1NFTEVDVCcsIGRiLnRvU3RyaW5nKCldLCBvcHRpb25zKTtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfUmVkaXNDbGllbnRfc2VsZWN0ZWREQiwgZGIsIFwiZlwiKTtcbiAgICB9XG4gICAgU1VCU0NSSUJFKGNoYW5uZWxzLCBsaXN0ZW5lciwgYnVmZmVyTW9kZSkge1xuICAgICAgICByZXR1cm4gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUmVkaXNDbGllbnRfaW5zdGFuY2VzLCBcIm1cIiwgX1JlZGlzQ2xpZW50X3B1YlN1YkNvbW1hbmQpLmNhbGwodGhpcywgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUmVkaXNDbGllbnRfcXVldWUsIFwiZlwiKS5zdWJzY3JpYmUocHViX3N1Yl8xLlB1YlN1YlR5cGUuQ0hBTk5FTFMsIGNoYW5uZWxzLCBsaXN0ZW5lciwgYnVmZmVyTW9kZSkpO1xuICAgIH1cbiAgICBVTlNVQlNDUklCRShjaGFubmVscywgbGlzdGVuZXIsIGJ1ZmZlck1vZGUpIHtcbiAgICAgICAgcmV0dXJuIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzQ2xpZW50X2luc3RhbmNlcywgXCJtXCIsIF9SZWRpc0NsaWVudF9wdWJTdWJDb21tYW5kKS5jYWxsKHRoaXMsIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzQ2xpZW50X3F1ZXVlLCBcImZcIikudW5zdWJzY3JpYmUocHViX3N1Yl8xLlB1YlN1YlR5cGUuQ0hBTk5FTFMsIGNoYW5uZWxzLCBsaXN0ZW5lciwgYnVmZmVyTW9kZSkpO1xuICAgIH1cbiAgICBQU1VCU0NSSUJFKHBhdHRlcm5zLCBsaXN0ZW5lciwgYnVmZmVyTW9kZSkge1xuICAgICAgICByZXR1cm4gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUmVkaXNDbGllbnRfaW5zdGFuY2VzLCBcIm1cIiwgX1JlZGlzQ2xpZW50X3B1YlN1YkNvbW1hbmQpLmNhbGwodGhpcywgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUmVkaXNDbGllbnRfcXVldWUsIFwiZlwiKS5zdWJzY3JpYmUocHViX3N1Yl8xLlB1YlN1YlR5cGUuUEFUVEVSTlMsIHBhdHRlcm5zLCBsaXN0ZW5lciwgYnVmZmVyTW9kZSkpO1xuICAgIH1cbiAgICBQVU5TVUJTQ1JJQkUocGF0dGVybnMsIGxpc3RlbmVyLCBidWZmZXJNb2RlKSB7XG4gICAgICAgIHJldHVybiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc0NsaWVudF9pbnN0YW5jZXMsIFwibVwiLCBfUmVkaXNDbGllbnRfcHViU3ViQ29tbWFuZCkuY2FsbCh0aGlzLCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc0NsaWVudF9xdWV1ZSwgXCJmXCIpLnVuc3Vic2NyaWJlKHB1Yl9zdWJfMS5QdWJTdWJUeXBlLlBBVFRFUk5TLCBwYXR0ZXJucywgbGlzdGVuZXIsIGJ1ZmZlck1vZGUpKTtcbiAgICB9XG4gICAgU1NVQlNDUklCRShjaGFubmVscywgbGlzdGVuZXIsIGJ1ZmZlck1vZGUpIHtcbiAgICAgICAgcmV0dXJuIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzQ2xpZW50X2luc3RhbmNlcywgXCJtXCIsIF9SZWRpc0NsaWVudF9wdWJTdWJDb21tYW5kKS5jYWxsKHRoaXMsIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzQ2xpZW50X3F1ZXVlLCBcImZcIikuc3Vic2NyaWJlKHB1Yl9zdWJfMS5QdWJTdWJUeXBlLlNIQVJERUQsIGNoYW5uZWxzLCBsaXN0ZW5lciwgYnVmZmVyTW9kZSkpO1xuICAgIH1cbiAgICBTVU5TVUJTQ1JJQkUoY2hhbm5lbHMsIGxpc3RlbmVyLCBidWZmZXJNb2RlKSB7XG4gICAgICAgIHJldHVybiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc0NsaWVudF9pbnN0YW5jZXMsIFwibVwiLCBfUmVkaXNDbGllbnRfcHViU3ViQ29tbWFuZCkuY2FsbCh0aGlzLCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc0NsaWVudF9xdWV1ZSwgXCJmXCIpLnVuc3Vic2NyaWJlKHB1Yl9zdWJfMS5QdWJTdWJUeXBlLlNIQVJERUQsIGNoYW5uZWxzLCBsaXN0ZW5lciwgYnVmZmVyTW9kZSkpO1xuICAgIH1cbiAgICBnZXRQdWJTdWJMaXN0ZW5lcnModHlwZSkge1xuICAgICAgICByZXR1cm4gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUmVkaXNDbGllbnRfcXVldWUsIFwiZlwiKS5nZXRQdWJTdWJMaXN0ZW5lcnModHlwZSk7XG4gICAgfVxuICAgIGV4dGVuZFB1YlN1YkNoYW5uZWxMaXN0ZW5lcnModHlwZSwgY2hhbm5lbCwgbGlzdGVuZXJzKSB7XG4gICAgICAgIHJldHVybiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc0NsaWVudF9pbnN0YW5jZXMsIFwibVwiLCBfUmVkaXNDbGllbnRfcHViU3ViQ29tbWFuZCkuY2FsbCh0aGlzLCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc0NsaWVudF9xdWV1ZSwgXCJmXCIpLmV4dGVuZFB1YlN1YkNoYW5uZWxMaXN0ZW5lcnModHlwZSwgY2hhbm5lbCwgbGlzdGVuZXJzKSk7XG4gICAgfVxuICAgIGV4dGVuZFB1YlN1Ykxpc3RlbmVycyh0eXBlLCBsaXN0ZW5lcnMpIHtcbiAgICAgICAgcmV0dXJuIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzQ2xpZW50X2luc3RhbmNlcywgXCJtXCIsIF9SZWRpc0NsaWVudF9wdWJTdWJDb21tYW5kKS5jYWxsKHRoaXMsIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzQ2xpZW50X3F1ZXVlLCBcImZcIikuZXh0ZW5kUHViU3ViTGlzdGVuZXJzKHR5cGUsIGxpc3RlbmVycykpO1xuICAgIH1cbiAgICBRVUlUKCkge1xuICAgICAgICByZXR1cm4gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUmVkaXNDbGllbnRfc29ja2V0LCBcImZcIikucXVpdChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUmVkaXNDbGllbnRfcGluZ1RpbWVyLCBcImZcIikpXG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzQ2xpZW50X3BpbmdUaW1lciwgXCJmXCIpKTtcbiAgICAgICAgICAgIGNvbnN0IHF1aXRQcm9taXNlID0gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUmVkaXNDbGllbnRfcXVldWUsIFwiZlwiKS5hZGRDb21tYW5kKFsnUVVJVCddKTtcbiAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzQ2xpZW50X2luc3RhbmNlcywgXCJtXCIsIF9SZWRpc0NsaWVudF90aWNrKS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgY29uc3QgW3JlcGx5XSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgICAgICAgICAgICBxdWl0UHJvbWlzZSxcbiAgICAgICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc0NsaWVudF9pbnN0YW5jZXMsIFwibVwiLCBfUmVkaXNDbGllbnRfZGVzdHJveUlzb2xhdGlvblBvb2wpLmNhbGwodGhpcylcbiAgICAgICAgICAgIF0pO1xuICAgICAgICAgICAgcmV0dXJuIHJlcGx5O1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgZXhlY3V0ZUlzb2xhdGVkKGZuKSB7XG4gICAgICAgIGlmICghX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUmVkaXNDbGllbnRfaXNvbGF0aW9uUG9vbCwgXCJmXCIpKVxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBlcnJvcnNfMS5DbGllbnRDbG9zZWRFcnJvcigpKTtcbiAgICAgICAgcmV0dXJuIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzQ2xpZW50X2lzb2xhdGlvblBvb2wsIFwiZlwiKS51c2UoZm4pO1xuICAgIH1cbiAgICBNVUxUSSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyB0aGlzLk11bHRpKHRoaXMubXVsdGlFeGVjdXRvci5iaW5kKHRoaXMpLCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc0NsaWVudF9vcHRpb25zLCBcImZcIik/LmxlZ2FjeU1vZGUpO1xuICAgIH1cbiAgICBhc3luYyBtdWx0aUV4ZWN1dG9yKGNvbW1hbmRzLCBzZWxlY3RlZERCLCBjaGFpbklkKSB7XG4gICAgICAgIGlmICghX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUmVkaXNDbGllbnRfc29ja2V0LCBcImZcIikuaXNPcGVuKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IGVycm9yc18xLkNsaWVudENsb3NlZEVycm9yKCkpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHByb21pc2UgPSBjaGFpbklkID9cbiAgICAgICAgICAgIC8vIGlmIGBjaGFpbklkYCBoYXMgYSB2YWx1ZSwgaXQncyBhIGBNVUxUSWAgKGFuZCBub3QgXCJwaXBlbGluZVwiKSAtIG5lZWQgdG8gYWRkIHRoZSBgTVVMVElgIGFuZCBgRVhFQ2AgY29tbWFuZHNcbiAgICAgICAgICAgIFByb21pc2UuYWxsKFtcbiAgICAgICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc0NsaWVudF9xdWV1ZSwgXCJmXCIpLmFkZENvbW1hbmQoWydNVUxUSSddLCB7IGNoYWluSWQgfSksXG4gICAgICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUmVkaXNDbGllbnRfaW5zdGFuY2VzLCBcIm1cIiwgX1JlZGlzQ2xpZW50X2FkZE11bHRpQ29tbWFuZHMpLmNhbGwodGhpcywgY29tbWFuZHMsIGNoYWluSWQpLFxuICAgICAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzQ2xpZW50X3F1ZXVlLCBcImZcIikuYWRkQ29tbWFuZChbJ0VYRUMnXSwgeyBjaGFpbklkIH0pXG4gICAgICAgICAgICBdKSA6XG4gICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc0NsaWVudF9pbnN0YW5jZXMsIFwibVwiLCBfUmVkaXNDbGllbnRfYWRkTXVsdGlDb21tYW5kcykuY2FsbCh0aGlzLCBjb21tYW5kcyk7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzQ2xpZW50X2luc3RhbmNlcywgXCJtXCIsIF9SZWRpc0NsaWVudF90aWNrKS5jYWxsKHRoaXMpO1xuICAgICAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgcHJvbWlzZTtcbiAgICAgICAgaWYgKHNlbGVjdGVkREIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfUmVkaXNDbGllbnRfc2VsZWN0ZWREQiwgc2VsZWN0ZWREQiwgXCJmXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgIH1cbiAgICBhc3luYyAqc2Nhbkl0ZXJhdG9yKG9wdGlvbnMpIHtcbiAgICAgICAgbGV0IGN1cnNvciA9IDA7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICAgIGNvbnN0IHJlcGx5ID0gYXdhaXQgdGhpcy5zY2FuKGN1cnNvciwgb3B0aW9ucyk7XG4gICAgICAgICAgICBjdXJzb3IgPSByZXBseS5jdXJzb3I7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiByZXBseS5rZXlzKSB7XG4gICAgICAgICAgICAgICAgeWllbGQga2V5O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IHdoaWxlIChjdXJzb3IgIT09IDApO1xuICAgIH1cbiAgICBhc3luYyAqaFNjYW5JdGVyYXRvcihrZXksIG9wdGlvbnMpIHtcbiAgICAgICAgbGV0IGN1cnNvciA9IDA7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICAgIGNvbnN0IHJlcGx5ID0gYXdhaXQgdGhpcy5oU2NhbihrZXksIGN1cnNvciwgb3B0aW9ucyk7XG4gICAgICAgICAgICBjdXJzb3IgPSByZXBseS5jdXJzb3I7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHR1cGxlIG9mIHJlcGx5LnR1cGxlcykge1xuICAgICAgICAgICAgICAgIHlpZWxkIHR1cGxlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IHdoaWxlIChjdXJzb3IgIT09IDApO1xuICAgIH1cbiAgICBhc3luYyAqaFNjYW5Ob1ZhbHVlc0l0ZXJhdG9yKGtleSwgb3B0aW9ucykge1xuICAgICAgICBsZXQgY3Vyc29yID0gMDtcbiAgICAgICAgZG8ge1xuICAgICAgICAgICAgY29uc3QgcmVwbHkgPSBhd2FpdCB0aGlzLmhTY2FuTm9WYWx1ZXMoa2V5LCBjdXJzb3IsIG9wdGlvbnMpO1xuICAgICAgICAgICAgY3Vyc29yID0gcmVwbHkuY3Vyc29yO1xuICAgICAgICAgICAgZm9yIChjb25zdCBrIG9mIHJlcGx5LmtleXMpIHtcbiAgICAgICAgICAgICAgICB5aWVsZCBrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IHdoaWxlIChjdXJzb3IgIT09IDApO1xuICAgIH1cbiAgICBhc3luYyAqc1NjYW5JdGVyYXRvcihrZXksIG9wdGlvbnMpIHtcbiAgICAgICAgbGV0IGN1cnNvciA9IDA7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICAgIGNvbnN0IHJlcGx5ID0gYXdhaXQgdGhpcy5zU2NhbihrZXksIGN1cnNvciwgb3B0aW9ucyk7XG4gICAgICAgICAgICBjdXJzb3IgPSByZXBseS5jdXJzb3I7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IG1lbWJlciBvZiByZXBseS5tZW1iZXJzKSB7XG4gICAgICAgICAgICAgICAgeWllbGQgbWVtYmVyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IHdoaWxlIChjdXJzb3IgIT09IDApO1xuICAgIH1cbiAgICBhc3luYyAqelNjYW5JdGVyYXRvcihrZXksIG9wdGlvbnMpIHtcbiAgICAgICAgbGV0IGN1cnNvciA9IDA7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICAgIGNvbnN0IHJlcGx5ID0gYXdhaXQgdGhpcy56U2NhbihrZXksIGN1cnNvciwgb3B0aW9ucyk7XG4gICAgICAgICAgICBjdXJzb3IgPSByZXBseS5jdXJzb3I7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IG1lbWJlciBvZiByZXBseS5tZW1iZXJzKSB7XG4gICAgICAgICAgICAgICAgeWllbGQgbWVtYmVyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IHdoaWxlIChjdXJzb3IgIT09IDApO1xuICAgIH1cbiAgICBhc3luYyBkaXNjb25uZWN0KCkge1xuICAgICAgICBpZiAoX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUmVkaXNDbGllbnRfcGluZ1RpbWVyLCBcImZcIikpXG4gICAgICAgICAgICBjbGVhclRpbWVvdXQoX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUmVkaXNDbGllbnRfcGluZ1RpbWVyLCBcImZcIikpO1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc0NsaWVudF9xdWV1ZSwgXCJmXCIpLmZsdXNoQWxsKG5ldyBlcnJvcnNfMS5EaXNjb25uZWN0c0NsaWVudEVycm9yKCkpO1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc0NsaWVudF9zb2NrZXQsIFwiZlwiKS5kaXNjb25uZWN0KCk7XG4gICAgICAgIGF3YWl0IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzQ2xpZW50X2luc3RhbmNlcywgXCJtXCIsIF9SZWRpc0NsaWVudF9kZXN0cm95SXNvbGF0aW9uUG9vbCkuY2FsbCh0aGlzKTtcbiAgICB9XG4gICAgcmVmKCkge1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc0NsaWVudF9zb2NrZXQsIFwiZlwiKS5yZWYoKTtcbiAgICB9XG4gICAgdW5yZWYoKSB7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzQ2xpZW50X3NvY2tldCwgXCJmXCIpLnVucmVmKCk7XG4gICAgfVxufVxuX2EgPSBSZWRpc0NsaWVudCwgX1JlZGlzQ2xpZW50X29wdGlvbnMgPSBuZXcgV2Vha01hcCgpLCBfUmVkaXNDbGllbnRfc29ja2V0ID0gbmV3IFdlYWtNYXAoKSwgX1JlZGlzQ2xpZW50X3F1ZXVlID0gbmV3IFdlYWtNYXAoKSwgX1JlZGlzQ2xpZW50X2lzb2xhdGlvblBvb2wgPSBuZXcgV2Vha01hcCgpLCBfUmVkaXNDbGllbnRfdjQgPSBuZXcgV2Vha01hcCgpLCBfUmVkaXNDbGllbnRfc2VsZWN0ZWREQiA9IG5ldyBXZWFrTWFwKCksIF9SZWRpc0NsaWVudF9waW5nVGltZXIgPSBuZXcgV2Vha01hcCgpLCBfUmVkaXNDbGllbnRfaW5zdGFuY2VzID0gbmV3IFdlYWtTZXQoKSwgX1JlZGlzQ2xpZW50X2luaXRpYXRlT3B0aW9ucyA9IGZ1bmN0aW9uIF9SZWRpc0NsaWVudF9pbml0aWF0ZU9wdGlvbnMob3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zPy51cmwpIHtcbiAgICAgICAgY29uc3QgcGFyc2VkID0gX2EucGFyc2VVUkwob3B0aW9ucy51cmwpO1xuICAgICAgICBpZiAob3B0aW9ucy5zb2NrZXQpIHtcbiAgICAgICAgICAgIHBhcnNlZC5zb2NrZXQgPSBPYmplY3QuYXNzaWduKG9wdGlvbnMuc29ja2V0LCBwYXJzZWQuc29ja2V0KTtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKG9wdGlvbnMsIHBhcnNlZCk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zPy5kYXRhYmFzZSkge1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9SZWRpc0NsaWVudF9zZWxlY3RlZERCLCBvcHRpb25zLmRhdGFiYXNlLCBcImZcIik7XG4gICAgfVxuICAgIHJldHVybiBvcHRpb25zO1xufSwgX1JlZGlzQ2xpZW50X2luaXRpYXRlUXVldWUgPSBmdW5jdGlvbiBfUmVkaXNDbGllbnRfaW5pdGlhdGVRdWV1ZSgpIHtcbiAgICByZXR1cm4gbmV3IGNvbW1hbmRzX3F1ZXVlXzEuZGVmYXVsdChfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc0NsaWVudF9vcHRpb25zLCBcImZcIik/LmNvbW1hbmRzUXVldWVNYXhMZW5ndGgsIChjaGFubmVsLCBsaXN0ZW5lcnMpID0+IHRoaXMuZW1pdCgnc2hhcmRlZC1jaGFubmVsLW1vdmVkJywgY2hhbm5lbCwgbGlzdGVuZXJzKSk7XG59LCBfUmVkaXNDbGllbnRfaW5pdGlhdGVTb2NrZXQgPSBmdW5jdGlvbiBfUmVkaXNDbGllbnRfaW5pdGlhdGVTb2NrZXQoKSB7XG4gICAgY29uc3Qgc29ja2V0SW5pdGlhdG9yID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBwcm9taXNlcyA9IFtdO1xuICAgICAgICBpZiAoX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUmVkaXNDbGllbnRfc2VsZWN0ZWREQiwgXCJmXCIpICE9PSAwKSB7XG4gICAgICAgICAgICBwcm9taXNlcy5wdXNoKF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzQ2xpZW50X3F1ZXVlLCBcImZcIikuYWRkQ29tbWFuZChbJ1NFTEVDVCcsIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzQ2xpZW50X3NlbGVjdGVkREIsIFwiZlwiKS50b1N0cmluZygpXSwgeyBhc2FwOiB0cnVlIH0pKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUmVkaXNDbGllbnRfb3B0aW9ucywgXCJmXCIpPy5yZWFkb25seSkge1xuICAgICAgICAgICAgcHJvbWlzZXMucHVzaChfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc0NsaWVudF9xdWV1ZSwgXCJmXCIpLmFkZENvbW1hbmQoY29tbWFuZHNfMS5kZWZhdWx0LlJFQURPTkxZLnRyYW5zZm9ybUFyZ3VtZW50cygpLCB7IGFzYXA6IHRydWUgfSkpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUmVkaXNDbGllbnRfb3B0aW9ucywgXCJmXCIpPy5kaXNhYmxlQ2xpZW50SW5mbykge1xuICAgICAgICAgICAgcHJvbWlzZXMucHVzaChfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc0NsaWVudF9xdWV1ZSwgXCJmXCIpLmFkZENvbW1hbmQoWydDTElFTlQnLCAnU0VUSU5GTycsICdMSUItVkVSJywgcGFja2FnZV9qc29uXzEudmVyc2lvbl0sIHsgYXNhcDogdHJ1ZSB9KS5jYXRjaChlcnIgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghKGVyciBpbnN0YW5jZW9mIGVycm9yc18xLkVycm9yUmVwbHkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICBwcm9taXNlcy5wdXNoKF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzQ2xpZW50X3F1ZXVlLCBcImZcIikuYWRkQ29tbWFuZChbXG4gICAgICAgICAgICAgICAgJ0NMSUVOVCcsICdTRVRJTkZPJywgJ0xJQi1OQU1FJyxcbiAgICAgICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc0NsaWVudF9vcHRpb25zLCBcImZcIik/LmNsaWVudEluZm9UYWcgPyBgbm9kZS1yZWRpcygke19fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzQ2xpZW50X29wdGlvbnMsIFwiZlwiKS5jbGllbnRJbmZvVGFnfSlgIDogJ25vZGUtcmVkaXMnXG4gICAgICAgICAgICBdLCB7IGFzYXA6IHRydWUgfSkuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIShlcnIgaW5zdGFuY2VvZiBlcnJvcnNfMS5FcnJvclJlcGx5KSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc0NsaWVudF9vcHRpb25zLCBcImZcIik/Lm5hbWUpIHtcbiAgICAgICAgICAgIHByb21pc2VzLnB1c2goX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUmVkaXNDbGllbnRfcXVldWUsIFwiZlwiKS5hZGRDb21tYW5kKGNvbW1hbmRzXzEuZGVmYXVsdC5DTElFTlRfU0VUTkFNRS50cmFuc2Zvcm1Bcmd1bWVudHMoX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUmVkaXNDbGllbnRfb3B0aW9ucywgXCJmXCIpLm5hbWUpLCB7IGFzYXA6IHRydWUgfSkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc0NsaWVudF9vcHRpb25zLCBcImZcIik/LnVzZXJuYW1lIHx8IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzQ2xpZW50X29wdGlvbnMsIFwiZlwiKT8ucGFzc3dvcmQpIHtcbiAgICAgICAgICAgIHByb21pc2VzLnB1c2goX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUmVkaXNDbGllbnRfcXVldWUsIFwiZlwiKS5hZGRDb21tYW5kKGNvbW1hbmRzXzEuZGVmYXVsdC5BVVRILnRyYW5zZm9ybUFyZ3VtZW50cyh7XG4gICAgICAgICAgICAgICAgdXNlcm5hbWU6IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzQ2xpZW50X29wdGlvbnMsIFwiZlwiKS51c2VybmFtZSxcbiAgICAgICAgICAgICAgICBwYXNzd29yZDogX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUmVkaXNDbGllbnRfb3B0aW9ucywgXCJmXCIpLnBhc3N3b3JkID8/ICcnXG4gICAgICAgICAgICB9KSwgeyBhc2FwOiB0cnVlIH0pKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXN1YnNjcmliZVByb21pc2UgPSBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc0NsaWVudF9xdWV1ZSwgXCJmXCIpLnJlc3Vic2NyaWJlKCk7XG4gICAgICAgIGlmIChyZXN1YnNjcmliZVByb21pc2UpIHtcbiAgICAgICAgICAgIHByb21pc2VzLnB1c2gocmVzdWJzY3JpYmVQcm9taXNlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocHJvbWlzZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc0NsaWVudF9pbnN0YW5jZXMsIFwibVwiLCBfUmVkaXNDbGllbnRfdGljaykuY2FsbCh0aGlzLCB0cnVlKTtcbiAgICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIG5ldyBzb2NrZXRfMS5kZWZhdWx0KHNvY2tldEluaXRpYXRvciwgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUmVkaXNDbGllbnRfb3B0aW9ucywgXCJmXCIpPy5zb2NrZXQpXG4gICAgICAgIC5vbignZGF0YScsIGNodW5rID0+IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzQ2xpZW50X3F1ZXVlLCBcImZcIikub25SZXBseUNodW5rKGNodW5rKSlcbiAgICAgICAgLm9uKCdlcnJvcicsIGVyciA9PiB7XG4gICAgICAgIHRoaXMuZW1pdCgnZXJyb3InLCBlcnIpO1xuICAgICAgICBpZiAoX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUmVkaXNDbGllbnRfc29ja2V0LCBcImZcIikuaXNPcGVuICYmICFfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc0NsaWVudF9vcHRpb25zLCBcImZcIik/LmRpc2FibGVPZmZsaW5lUXVldWUpIHtcbiAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzQ2xpZW50X3F1ZXVlLCBcImZcIikuZmx1c2hXYWl0aW5nRm9yUmVwbHkoZXJyKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzQ2xpZW50X3F1ZXVlLCBcImZcIikuZmx1c2hBbGwoZXJyKTtcbiAgICAgICAgfVxuICAgIH0pXG4gICAgICAgIC5vbignY29ubmVjdCcsICgpID0+IHtcbiAgICAgICAgdGhpcy5lbWl0KCdjb25uZWN0Jyk7XG4gICAgfSlcbiAgICAgICAgLm9uKCdyZWFkeScsICgpID0+IHtcbiAgICAgICAgdGhpcy5lbWl0KCdyZWFkeScpO1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc0NsaWVudF9pbnN0YW5jZXMsIFwibVwiLCBfUmVkaXNDbGllbnRfc2V0UGluZ1RpbWVyKS5jYWxsKHRoaXMpO1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc0NsaWVudF9pbnN0YW5jZXMsIFwibVwiLCBfUmVkaXNDbGllbnRfdGljaykuY2FsbCh0aGlzKTtcbiAgICB9KVxuICAgICAgICAub24oJ3JlY29ubmVjdGluZycsICgpID0+IHRoaXMuZW1pdCgncmVjb25uZWN0aW5nJykpXG4gICAgICAgIC5vbignZHJhaW4nLCAoKSA9PiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc0NsaWVudF9pbnN0YW5jZXMsIFwibVwiLCBfUmVkaXNDbGllbnRfdGljaykuY2FsbCh0aGlzKSlcbiAgICAgICAgLm9uKCdlbmQnLCAoKSA9PiB0aGlzLmVtaXQoJ2VuZCcpKTtcbn0sIF9SZWRpc0NsaWVudF9pbml0aWF0ZUlzb2xhdGlvblBvb2wgPSBmdW5jdGlvbiBfUmVkaXNDbGllbnRfaW5pdGlhdGVJc29sYXRpb25Qb29sKCkge1xuICAgIHJldHVybiAoMCwgZ2VuZXJpY19wb29sXzEuY3JlYXRlUG9vbCkoe1xuICAgICAgICBjcmVhdGU6IGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGR1cGxpY2F0ZSA9IHRoaXMuZHVwbGljYXRlKHtcbiAgICAgICAgICAgICAgICBpc29sYXRpb25Qb29sT3B0aW9uczogdW5kZWZpbmVkXG4gICAgICAgICAgICB9KS5vbignZXJyb3InLCBlcnIgPT4gdGhpcy5lbWl0KCdlcnJvcicsIGVycikpO1xuICAgICAgICAgICAgYXdhaXQgZHVwbGljYXRlLmNvbm5lY3QoKTtcbiAgICAgICAgICAgIHJldHVybiBkdXBsaWNhdGU7XG4gICAgICAgIH0sXG4gICAgICAgIGRlc3Ryb3k6IGNsaWVudCA9PiBjbGllbnQuZGlzY29ubmVjdCgpXG4gICAgfSwgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUmVkaXNDbGllbnRfb3B0aW9ucywgXCJmXCIpPy5pc29sYXRpb25Qb29sT3B0aW9ucyk7XG59LCBfUmVkaXNDbGllbnRfbGVnYWN5TW9kZSA9IGZ1bmN0aW9uIF9SZWRpc0NsaWVudF9sZWdhY3lNb2RlKCkge1xuICAgIHZhciBfYiwgX2M7XG4gICAgaWYgKCFfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc0NsaWVudF9vcHRpb25zLCBcImZcIik/LmxlZ2FjeU1vZGUpXG4gICAgICAgIHJldHVybjtcbiAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc0NsaWVudF92NCwgXCJmXCIpLnNlbmRDb21tYW5kID0gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUmVkaXNDbGllbnRfaW5zdGFuY2VzLCBcIm1cIiwgX1JlZGlzQ2xpZW50X3NlbmRDb21tYW5kKS5iaW5kKHRoaXMpO1xuICAgIHRoaXMuc2VuZENvbW1hbmQgPSAoLi4uYXJncykgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc0NsaWVudF9pbnN0YW5jZXMsIFwibVwiLCBfUmVkaXNDbGllbnRfbGVnYWN5U2VuZENvbW1hbmQpLmNhbGwodGhpcywgLi4uYXJncyk7XG4gICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgIHJlc3VsdC5wcm9taXNlXG4gICAgICAgICAgICAgICAgLnRoZW4ocmVwbHkgPT4gcmVzdWx0LmNhbGxiYWNrKG51bGwsIHJlcGx5KSlcbiAgICAgICAgICAgICAgICAuY2F0Y2goZXJyID0+IHJlc3VsdC5jYWxsYmFjayhlcnIpKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgZm9yIChjb25zdCBbbmFtZSwgY29tbWFuZF0gb2YgT2JqZWN0LmVudHJpZXMoY29tbWFuZHNfMS5kZWZhdWx0KSkge1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc0NsaWVudF9pbnN0YW5jZXMsIFwibVwiLCBfUmVkaXNDbGllbnRfZGVmaW5lTGVnYWN5Q29tbWFuZCkuY2FsbCh0aGlzLCBuYW1lLCBjb21tYW5kKTtcbiAgICAgICAgKF9iID0gdGhpcylbX2MgPSBuYW1lLnRvTG93ZXJDYXNlKCldID8/IChfYltfY10gPSB0aGlzW25hbWVdKTtcbiAgICB9XG4gICAgLy8gaGFyZCBjb2RlZCBjb21tYW5kc1xuICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzQ2xpZW50X2luc3RhbmNlcywgXCJtXCIsIF9SZWRpc0NsaWVudF9kZWZpbmVMZWdhY3lDb21tYW5kKS5jYWxsKHRoaXMsICdTRUxFQ1QnKTtcbiAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc0NsaWVudF9pbnN0YW5jZXMsIFwibVwiLCBfUmVkaXNDbGllbnRfZGVmaW5lTGVnYWN5Q29tbWFuZCkuY2FsbCh0aGlzLCAnc2VsZWN0Jyk7XG4gICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUmVkaXNDbGllbnRfaW5zdGFuY2VzLCBcIm1cIiwgX1JlZGlzQ2xpZW50X2RlZmluZUxlZ2FjeUNvbW1hbmQpLmNhbGwodGhpcywgJ1NVQlNDUklCRScpO1xuICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzQ2xpZW50X2luc3RhbmNlcywgXCJtXCIsIF9SZWRpc0NsaWVudF9kZWZpbmVMZWdhY3lDb21tYW5kKS5jYWxsKHRoaXMsICdzdWJzY3JpYmUnKTtcbiAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc0NsaWVudF9pbnN0YW5jZXMsIFwibVwiLCBfUmVkaXNDbGllbnRfZGVmaW5lTGVnYWN5Q29tbWFuZCkuY2FsbCh0aGlzLCAnUFNVQlNDUklCRScpO1xuICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzQ2xpZW50X2luc3RhbmNlcywgXCJtXCIsIF9SZWRpc0NsaWVudF9kZWZpbmVMZWdhY3lDb21tYW5kKS5jYWxsKHRoaXMsICdwU3Vic2NyaWJlJyk7XG4gICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUmVkaXNDbGllbnRfaW5zdGFuY2VzLCBcIm1cIiwgX1JlZGlzQ2xpZW50X2RlZmluZUxlZ2FjeUNvbW1hbmQpLmNhbGwodGhpcywgJ1VOU1VCU0NSSUJFJyk7XG4gICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUmVkaXNDbGllbnRfaW5zdGFuY2VzLCBcIm1cIiwgX1JlZGlzQ2xpZW50X2RlZmluZUxlZ2FjeUNvbW1hbmQpLmNhbGwodGhpcywgJ3Vuc3Vic2NyaWJlJyk7XG4gICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUmVkaXNDbGllbnRfaW5zdGFuY2VzLCBcIm1cIiwgX1JlZGlzQ2xpZW50X2RlZmluZUxlZ2FjeUNvbW1hbmQpLmNhbGwodGhpcywgJ1BVTlNVQlNDUklCRScpO1xuICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzQ2xpZW50X2luc3RhbmNlcywgXCJtXCIsIF9SZWRpc0NsaWVudF9kZWZpbmVMZWdhY3lDb21tYW5kKS5jYWxsKHRoaXMsICdwVW5zdWJzY3JpYmUnKTtcbiAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc0NsaWVudF9pbnN0YW5jZXMsIFwibVwiLCBfUmVkaXNDbGllbnRfZGVmaW5lTGVnYWN5Q29tbWFuZCkuY2FsbCh0aGlzLCAnUVVJVCcpO1xuICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzQ2xpZW50X2luc3RhbmNlcywgXCJtXCIsIF9SZWRpc0NsaWVudF9kZWZpbmVMZWdhY3lDb21tYW5kKS5jYWxsKHRoaXMsICdxdWl0Jyk7XG59LCBfUmVkaXNDbGllbnRfbGVnYWN5U2VuZENvbW1hbmQgPSBmdW5jdGlvbiBfUmVkaXNDbGllbnRfbGVnYWN5U2VuZENvbW1hbmQoLi4uYXJncykge1xuICAgIGNvbnN0IGNhbGxiYWNrID0gdHlwZW9mIGFyZ3NbYXJncy5sZW5ndGggLSAxXSA9PT0gJ2Z1bmN0aW9uJyA/XG4gICAgICAgIGFyZ3MucG9wKCkgOlxuICAgICAgICB1bmRlZmluZWQ7XG4gICAgY29uc3QgcHJvbWlzZSA9IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzQ2xpZW50X2luc3RhbmNlcywgXCJtXCIsIF9SZWRpc0NsaWVudF9zZW5kQ29tbWFuZCkuY2FsbCh0aGlzLCAoMCwgY29tbWFuZGVyXzEudHJhbnNmb3JtTGVnYWN5Q29tbWFuZEFyZ3VtZW50cykoYXJncykpO1xuICAgIGlmIChjYWxsYmFjaylcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHByb21pc2UsXG4gICAgICAgICAgICBjYWxsYmFja1xuICAgICAgICB9O1xuICAgIHByb21pc2UuY2F0Y2goZXJyID0+IHRoaXMuZW1pdCgnZXJyb3InLCBlcnIpKTtcbn0sIF9SZWRpc0NsaWVudF9kZWZpbmVMZWdhY3lDb21tYW5kID0gZnVuY3Rpb24gX1JlZGlzQ2xpZW50X2RlZmluZUxlZ2FjeUNvbW1hbmQobmFtZSwgY29tbWFuZCkge1xuICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzQ2xpZW50X3Y0LCBcImZcIilbbmFtZV0gPSB0aGlzW25hbWVdLmJpbmQodGhpcyk7XG4gICAgdGhpc1tuYW1lXSA9IGNvbW1hbmQgJiYgY29tbWFuZC5UUkFOU0ZPUk1fTEVHQUNZX1JFUExZICYmIGNvbW1hbmQudHJhbnNmb3JtUmVwbHkgP1xuICAgICAgICAoLi4uYXJncykgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUmVkaXNDbGllbnRfaW5zdGFuY2VzLCBcIm1cIiwgX1JlZGlzQ2xpZW50X2xlZ2FjeVNlbmRDb21tYW5kKS5jYWxsKHRoaXMsIG5hbWUsIC4uLmFyZ3MpO1xuICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wcm9taXNlXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKHJlcGx5ID0+IHJlc3VsdC5jYWxsYmFjayhudWxsLCBjb21tYW5kLnRyYW5zZm9ybVJlcGx5KHJlcGx5KSkpXG4gICAgICAgICAgICAgICAgICAgIC5jYXRjaChlcnIgPT4gcmVzdWx0LmNhbGxiYWNrKGVycikpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IDpcbiAgICAgICAgKC4uLmFyZ3MpID0+IHRoaXMuc2VuZENvbW1hbmQobmFtZSwgLi4uYXJncyk7XG59LCBfUmVkaXNDbGllbnRfc2V0UGluZ1RpbWVyID0gZnVuY3Rpb24gX1JlZGlzQ2xpZW50X3NldFBpbmdUaW1lcigpIHtcbiAgICBpZiAoIV9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzQ2xpZW50X29wdGlvbnMsIFwiZlwiKT8ucGluZ0ludGVydmFsIHx8ICFfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc0NsaWVudF9zb2NrZXQsIFwiZlwiKS5pc1JlYWR5KVxuICAgICAgICByZXR1cm47XG4gICAgY2xlYXJUaW1lb3V0KF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzQ2xpZW50X3BpbmdUaW1lciwgXCJmXCIpKTtcbiAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9SZWRpc0NsaWVudF9waW5nVGltZXIsIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBpZiAoIV9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzQ2xpZW50X3NvY2tldCwgXCJmXCIpLmlzUmVhZHkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIC8vIHVzaW5nICNzZW5kQ29tbWFuZCB0byBzdXBwb3J0IGxlZ2FjeSBtb2RlXG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzQ2xpZW50X2luc3RhbmNlcywgXCJtXCIsIF9SZWRpc0NsaWVudF9zZW5kQ29tbWFuZCkuY2FsbCh0aGlzLCBbJ1BJTkcnXSlcbiAgICAgICAgICAgIC50aGVuKHJlcGx5ID0+IHRoaXMuZW1pdCgncGluZy1pbnRlcnZhbCcsIHJlcGx5KSlcbiAgICAgICAgICAgIC5jYXRjaChlcnIgPT4gdGhpcy5lbWl0KCdlcnJvcicsIGVycikpXG4gICAgICAgICAgICAuZmluYWxseSgoKSA9PiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc0NsaWVudF9pbnN0YW5jZXMsIFwibVwiLCBfUmVkaXNDbGllbnRfc2V0UGluZ1RpbWVyKS5jYWxsKHRoaXMpKTtcbiAgICB9LCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc0NsaWVudF9vcHRpb25zLCBcImZcIikucGluZ0ludGVydmFsKSwgXCJmXCIpO1xufSwgX1JlZGlzQ2xpZW50X3NlbmRDb21tYW5kID0gZnVuY3Rpb24gX1JlZGlzQ2xpZW50X3NlbmRDb21tYW5kKGFyZ3MsIG9wdGlvbnMpIHtcbiAgICBpZiAoIV9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzQ2xpZW50X3NvY2tldCwgXCJmXCIpLmlzT3Blbikge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IGVycm9yc18xLkNsaWVudENsb3NlZEVycm9yKCkpO1xuICAgIH1cbiAgICBlbHNlIGlmIChvcHRpb25zPy5pc29sYXRlZCkge1xuICAgICAgICByZXR1cm4gdGhpcy5leGVjdXRlSXNvbGF0ZWQoaXNvbGF0ZWRDbGllbnQgPT4gaXNvbGF0ZWRDbGllbnQuc2VuZENvbW1hbmQoYXJncywge1xuICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgIGlzb2xhdGVkOiBmYWxzZVxuICAgICAgICB9KSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKCFfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc0NsaWVudF9zb2NrZXQsIFwiZlwiKS5pc1JlYWR5ICYmIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzQ2xpZW50X29wdGlvbnMsIFwiZlwiKT8uZGlzYWJsZU9mZmxpbmVRdWV1ZSkge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IGVycm9yc18xLkNsaWVudE9mZmxpbmVFcnJvcigpKTtcbiAgICB9XG4gICAgY29uc3QgcHJvbWlzZSA9IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzQ2xpZW50X3F1ZXVlLCBcImZcIikuYWRkQ29tbWFuZChhcmdzLCBvcHRpb25zKTtcbiAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc0NsaWVudF9pbnN0YW5jZXMsIFwibVwiLCBfUmVkaXNDbGllbnRfdGljaykuY2FsbCh0aGlzKTtcbiAgICByZXR1cm4gcHJvbWlzZTtcbn0sIF9SZWRpc0NsaWVudF9wdWJTdWJDb21tYW5kID0gZnVuY3Rpb24gX1JlZGlzQ2xpZW50X3B1YlN1YkNvbW1hbmQocHJvbWlzZSkge1xuICAgIGlmIChwcm9taXNlID09PSB1bmRlZmluZWQpXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc0NsaWVudF9pbnN0YW5jZXMsIFwibVwiLCBfUmVkaXNDbGllbnRfdGljaykuY2FsbCh0aGlzKTtcbiAgICByZXR1cm4gcHJvbWlzZTtcbn0sIF9SZWRpc0NsaWVudF90aWNrID0gZnVuY3Rpb24gX1JlZGlzQ2xpZW50X3RpY2soZm9yY2UgPSBmYWxzZSkge1xuICAgIGlmIChfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc0NsaWVudF9zb2NrZXQsIFwiZlwiKS53cml0YWJsZU5lZWREcmFpbiB8fCAoIWZvcmNlICYmICFfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc0NsaWVudF9zb2NrZXQsIFwiZlwiKS5pc1JlYWR5KSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzQ2xpZW50X3NvY2tldCwgXCJmXCIpLmNvcmsoKTtcbiAgICB3aGlsZSAoIV9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzQ2xpZW50X3NvY2tldCwgXCJmXCIpLndyaXRhYmxlTmVlZERyYWluKSB7XG4gICAgICAgIGNvbnN0IGFyZ3MgPSBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc0NsaWVudF9xdWV1ZSwgXCJmXCIpLmdldENvbW1hbmRUb1NlbmQoKTtcbiAgICAgICAgaWYgKGFyZ3MgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc0NsaWVudF9zb2NrZXQsIFwiZlwiKS53cml0ZUNvbW1hbmQoYXJncyk7XG4gICAgfVxufSwgX1JlZGlzQ2xpZW50X2FkZE11bHRpQ29tbWFuZHMgPSBmdW5jdGlvbiBfUmVkaXNDbGllbnRfYWRkTXVsdGlDb21tYW5kcyhjb21tYW5kcywgY2hhaW5JZCkge1xuICAgIHJldHVybiBQcm9taXNlLmFsbChjb21tYW5kcy5tYXAoKHsgYXJncyB9KSA9PiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc0NsaWVudF9xdWV1ZSwgXCJmXCIpLmFkZENvbW1hbmQoYXJncywgeyBjaGFpbklkIH0pKSk7XG59LCBfUmVkaXNDbGllbnRfZGVzdHJveUlzb2xhdGlvblBvb2wgPSBhc3luYyBmdW5jdGlvbiBfUmVkaXNDbGllbnRfZGVzdHJveUlzb2xhdGlvblBvb2woKSB7XG4gICAgYXdhaXQgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUmVkaXNDbGllbnRfaXNvbGF0aW9uUG9vbCwgXCJmXCIpLmRyYWluKCk7XG4gICAgYXdhaXQgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUmVkaXNDbGllbnRfaXNvbGF0aW9uUG9vbCwgXCJmXCIpLmNsZWFyKCk7XG4gICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfUmVkaXNDbGllbnRfaXNvbGF0aW9uUG9vbCwgdW5kZWZpbmVkLCBcImZcIik7XG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gUmVkaXNDbGllbnQ7XG4oMCwgY29tbWFuZGVyXzEuYXR0YWNoQ29tbWFuZHMpKHtcbiAgICBCYXNlQ2xhc3M6IFJlZGlzQ2xpZW50LFxuICAgIGNvbW1hbmRzOiBjb21tYW5kc18xLmRlZmF1bHQsXG4gICAgZXhlY3V0b3I6IFJlZGlzQ2xpZW50LnByb3RvdHlwZS5jb21tYW5kc0V4ZWN1dG9yXG59KTtcblJlZGlzQ2xpZW50LnByb3RvdHlwZS5NdWx0aSA9IG11bHRpX2NvbW1hbmRfMS5kZWZhdWx0O1xuIiwKICAgICIvKlxuICogQ29weXJpZ2h0IDIwMDEtMjAxMCBHZW9yZ2VzIE1lbmllICh3d3cubWVuaWUub3JnKVxuICogQ29weXJpZ2h0IDIwMTAgU2FsdmF0b3JlIFNhbmZpbGlwcG8gKGFkYXB0ZWQgdG8gUmVkaXMgY29kaW5nIHN0eWxlKVxuICogQ29weXJpZ2h0IDIwMTUgWmlodWEgTGkgKGh0dHA6Ly96aWh1YS5saSkgKHBvcnRlZCB0byBKYXZhU2NyaXB0KVxuICogQ29weXJpZ2h0IDIwMTYgTWlrZSBEaWFybWlkIChodHRwOi8vZ2l0aHViLmNvbS9zYWxha2FyKSAocmUtd3JpdGUgZm9yIHBlcmZvcm1hbmNlLCB+NzAwJSBwZXJmIGluYylcbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXRcbiAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuICpcbiAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0XG4gKiAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG4gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodFxuICogICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZVxuICogICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cbiAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYSwgQmVya2VsZXkgbm9yIHRoZVxuICogICAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHNcbiAqICAgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxuICpcbiAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWVxuICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRFxuICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRVxuICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWVxuICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbiAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcbiAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORFxuICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbiAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTXG4gKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiAqL1xuXG4vKiBDUkMxNiBpbXBsZW1lbnRhdGlvbiBhY2NvcmRpbmcgdG8gQ0NJVFQgc3RhbmRhcmRzLlxuICpcbiAqIE5vdGUgYnkgQGFudGlyZXo6IHRoaXMgaXMgYWN0dWFsbHkgdGhlIFhNT0RFTSBDUkMgMTYgYWxnb3JpdGhtLCB1c2luZyB0aGVcbiAqIGZvbGxvd2luZyBwYXJhbWV0ZXJzOlxuICpcbiAqIE5hbWUgICAgICAgICAgICAgICAgICAgICAgIDogXCJYTU9ERU1cIiwgYWxzbyBrbm93biBhcyBcIlpNT0RFTVwiLCBcIkNSQy0xNi9BQ09STlwiXG4gKiBXaWR0aCAgICAgICAgICAgICAgICAgICAgICA6IDE2IGJpdFxuICogUG9seSAgICAgICAgICAgICAgICAgICAgICAgOiAxMDIxIChUaGF0IGlzIGFjdHVhbGx5IHheMTYgKyB4XjEyICsgeF41ICsgMSlcbiAqIEluaXRpYWxpemF0aW9uICAgICAgICAgICAgIDogMDAwMFxuICogUmVmbGVjdCBJbnB1dCBieXRlICAgICAgICAgOiBGYWxzZVxuICogUmVmbGVjdCBPdXRwdXQgQ1JDICAgICAgICAgOiBGYWxzZVxuICogWG9yIGNvbnN0YW50IHRvIG91dHB1dCBDUkMgOiAwMDAwXG4gKiBPdXRwdXQgZm9yIFwiMTIzNDU2Nzg5XCIgICAgIDogMzFDM1xuICovXG5cbnZhciBsb29rdXAgPSBbXG4gIDB4MDAwMCwgMHgxMDIxLCAweDIwNDIsIDB4MzA2MywgMHg0MDg0LCAweDUwYTUsIDB4NjBjNiwgMHg3MGU3LFxuICAweDgxMDgsIDB4OTEyOSwgMHhhMTRhLCAweGIxNmIsIDB4YzE4YywgMHhkMWFkLCAweGUxY2UsIDB4ZjFlZixcbiAgMHgxMjMxLCAweDAyMTAsIDB4MzI3MywgMHgyMjUyLCAweDUyYjUsIDB4NDI5NCwgMHg3MmY3LCAweDYyZDYsXG4gIDB4OTMzOSwgMHg4MzE4LCAweGIzN2IsIDB4YTM1YSwgMHhkM2JkLCAweGMzOWMsIDB4ZjNmZiwgMHhlM2RlLFxuICAweDI0NjIsIDB4MzQ0MywgMHgwNDIwLCAweDE0MDEsIDB4NjRlNiwgMHg3NGM3LCAweDQ0YTQsIDB4NTQ4NSxcbiAgMHhhNTZhLCAweGI1NGIsIDB4ODUyOCwgMHg5NTA5LCAweGU1ZWUsIDB4ZjVjZiwgMHhjNWFjLCAweGQ1OGQsXG4gIDB4MzY1MywgMHgyNjcyLCAweDE2MTEsIDB4MDYzMCwgMHg3NmQ3LCAweDY2ZjYsIDB4NTY5NSwgMHg0NmI0LFxuICAweGI3NWIsIDB4YTc3YSwgMHg5NzE5LCAweDg3MzgsIDB4ZjdkZiwgMHhlN2ZlLCAweGQ3OWQsIDB4YzdiYyxcbiAgMHg0OGM0LCAweDU4ZTUsIDB4Njg4NiwgMHg3OGE3LCAweDA4NDAsIDB4MTg2MSwgMHgyODAyLCAweDM4MjMsXG4gIDB4YzljYywgMHhkOWVkLCAweGU5OGUsIDB4ZjlhZiwgMHg4OTQ4LCAweDk5NjksIDB4YTkwYSwgMHhiOTJiLFxuICAweDVhZjUsIDB4NGFkNCwgMHg3YWI3LCAweDZhOTYsIDB4MWE3MSwgMHgwYTUwLCAweDNhMzMsIDB4MmExMixcbiAgMHhkYmZkLCAweGNiZGMsIDB4ZmJiZiwgMHhlYjllLCAweDliNzksIDB4OGI1OCwgMHhiYjNiLCAweGFiMWEsXG4gIDB4NmNhNiwgMHg3Yzg3LCAweDRjZTQsIDB4NWNjNSwgMHgyYzIyLCAweDNjMDMsIDB4MGM2MCwgMHgxYzQxLFxuICAweGVkYWUsIDB4ZmQ4ZiwgMHhjZGVjLCAweGRkY2QsIDB4YWQyYSwgMHhiZDBiLCAweDhkNjgsIDB4OWQ0OSxcbiAgMHg3ZTk3LCAweDZlYjYsIDB4NWVkNSwgMHg0ZWY0LCAweDNlMTMsIDB4MmUzMiwgMHgxZTUxLCAweDBlNzAsXG4gIDB4ZmY5ZiwgMHhlZmJlLCAweGRmZGQsIDB4Y2ZmYywgMHhiZjFiLCAweGFmM2EsIDB4OWY1OSwgMHg4Zjc4LFxuICAweDkxODgsIDB4ODFhOSwgMHhiMWNhLCAweGExZWIsIDB4ZDEwYywgMHhjMTJkLCAweGYxNGUsIDB4ZTE2ZixcbiAgMHgxMDgwLCAweDAwYTEsIDB4MzBjMiwgMHgyMGUzLCAweDUwMDQsIDB4NDAyNSwgMHg3MDQ2LCAweDYwNjcsXG4gIDB4ODNiOSwgMHg5Mzk4LCAweGEzZmIsIDB4YjNkYSwgMHhjMzNkLCAweGQzMWMsIDB4ZTM3ZiwgMHhmMzVlLFxuICAweDAyYjEsIDB4MTI5MCwgMHgyMmYzLCAweDMyZDIsIDB4NDIzNSwgMHg1MjE0LCAweDYyNzcsIDB4NzI1NixcbiAgMHhiNWVhLCAweGE1Y2IsIDB4OTVhOCwgMHg4NTg5LCAweGY1NmUsIDB4ZTU0ZiwgMHhkNTJjLCAweGM1MGQsXG4gIDB4MzRlMiwgMHgyNGMzLCAweDE0YTAsIDB4MDQ4MSwgMHg3NDY2LCAweDY0NDcsIDB4NTQyNCwgMHg0NDA1LFxuICAweGE3ZGIsIDB4YjdmYSwgMHg4Nzk5LCAweDk3YjgsIDB4ZTc1ZiwgMHhmNzdlLCAweGM3MWQsIDB4ZDczYyxcbiAgMHgyNmQzLCAweDM2ZjIsIDB4MDY5MSwgMHgxNmIwLCAweDY2NTcsIDB4NzY3NiwgMHg0NjE1LCAweDU2MzQsXG4gIDB4ZDk0YywgMHhjOTZkLCAweGY5MGUsIDB4ZTkyZiwgMHg5OWM4LCAweDg5ZTksIDB4Yjk4YSwgMHhhOWFiLFxuICAweDU4NDQsIDB4NDg2NSwgMHg3ODA2LCAweDY4MjcsIDB4MThjMCwgMHgwOGUxLCAweDM4ODIsIDB4MjhhMyxcbiAgMHhjYjdkLCAweGRiNWMsIDB4ZWIzZiwgMHhmYjFlLCAweDhiZjksIDB4OWJkOCwgMHhhYmJiLCAweGJiOWEsXG4gIDB4NGE3NSwgMHg1YTU0LCAweDZhMzcsIDB4N2ExNiwgMHgwYWYxLCAweDFhZDAsIDB4MmFiMywgMHgzYTkyLFxuICAweGZkMmUsIDB4ZWQwZiwgMHhkZDZjLCAweGNkNGQsIDB4YmRhYSwgMHhhZDhiLCAweDlkZTgsIDB4OGRjOSxcbiAgMHg3YzI2LCAweDZjMDcsIDB4NWM2NCwgMHg0YzQ1LCAweDNjYTIsIDB4MmM4MywgMHgxY2UwLCAweDBjYzEsXG4gIDB4ZWYxZiwgMHhmZjNlLCAweGNmNWQsIDB4ZGY3YywgMHhhZjliLCAweGJmYmEsIDB4OGZkOSwgMHg5ZmY4LFxuICAweDZlMTcsIDB4N2UzNiwgMHg0ZTU1LCAweDVlNzQsIDB4MmU5MywgMHgzZWIyLCAweDBlZDEsIDB4MWVmMFxuXTtcblxuLyoqXG4gKiBDb252ZXJ0IGEgc3RyaW5nIHRvIGEgVVRGOCBhcnJheSAtIGZhc3RlciB0aGFuIHZpYSBidWZmZXJcbiAqIEBwYXJhbSBzdHJcbiAqIEByZXR1cm5zIHtBcnJheX1cbiAqL1xudmFyIHRvVVRGOEFycmF5ID0gZnVuY3Rpb24gdG9VVEY4QXJyYXkoc3RyKSB7XG4gIHZhciBjaGFyO1xuICB2YXIgaSA9IDA7XG4gIHZhciBwID0gMDtcbiAgdmFyIHV0ZjggPSBbXTtcbiAgdmFyIGxlbiA9IHN0ci5sZW5ndGg7XG5cbiAgZm9yICg7IGkgPCBsZW47IGkrKykge1xuICAgIGNoYXIgPSBzdHIuY2hhckNvZGVBdChpKTtcbiAgICBpZiAoY2hhciA8IDEyOCkge1xuICAgICAgdXRmOFtwKytdID0gY2hhcjtcbiAgICB9IGVsc2UgaWYgKGNoYXIgPCAyMDQ4KSB7XG4gICAgICB1dGY4W3ArK10gPSAoY2hhciA+PiA2KSB8IDE5MjtcbiAgICAgIHV0ZjhbcCsrXSA9IChjaGFyICYgNjMpIHwgMTI4O1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICgoY2hhciAmIDB4RkMwMCkgPT09IDB4RDgwMCkgJiYgKGkgKyAxKSA8IHN0ci5sZW5ndGggJiZcbiAgICAgICAgKChzdHIuY2hhckNvZGVBdChpICsgMSkgJiAweEZDMDApID09PSAweERDMDApKSB7XG4gICAgICBjaGFyID0gMHgxMDAwMCArICgoY2hhciAmIDB4MDNGRikgPDwgMTApICsgKHN0ci5jaGFyQ29kZUF0KCsraSkgJiAweDAzRkYpO1xuICAgICAgdXRmOFtwKytdID0gKGNoYXIgPj4gMTgpIHwgMjQwO1xuICAgICAgdXRmOFtwKytdID0gKChjaGFyID4+IDEyKSAmIDYzKSB8IDEyODtcbiAgICAgIHV0ZjhbcCsrXSA9ICgoY2hhciA+PiA2KSAmIDYzKSB8IDEyODtcbiAgICAgIHV0ZjhbcCsrXSA9IChjaGFyICYgNjMpIHwgMTI4O1xuICAgIH0gZWxzZSB7XG4gICAgICB1dGY4W3ArK10gPSAoY2hhciA+PiAxMikgfCAyMjQ7XG4gICAgICB1dGY4W3ArK10gPSAoKGNoYXIgPj4gNikgJiA2MykgfCAxMjg7XG4gICAgICB1dGY4W3ArK10gPSAoY2hhciAmIDYzKSB8IDEyODtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdXRmODtcbn07XG5cbi8qKlxuICogQ29udmVydCBhIHN0cmluZyBpbnRvIGEgcmVkaXMgc2xvdCBoYXNoLlxuICogQHBhcmFtIHN0clxuICogQHJldHVybnMge251bWJlcn1cbiAqL1xudmFyIGdlbmVyYXRlID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZW5lcmF0ZShzdHIpIHtcbiAgdmFyIGNoYXI7XG4gIHZhciBpID0gMDtcbiAgdmFyIHN0YXJ0ID0gLTE7XG4gIHZhciByZXN1bHQgPSAwO1xuICB2YXIgcmVzdWx0SGFzaCA9IDA7XG4gIHZhciB1dGY4ID0gdHlwZW9mIHN0ciA9PT0gJ3N0cmluZycgPyB0b1VURjhBcnJheShzdHIpIDogc3RyO1xuICB2YXIgbGVuID0gdXRmOC5sZW5ndGg7XG5cbiAgd2hpbGUgKGkgPCBsZW4pIHtcbiAgICBjaGFyID0gdXRmOFtpKytdO1xuICAgIGlmIChzdGFydCA9PT0gLTEpIHtcbiAgICAgIGlmIChjaGFyID09PSAweDdCKSB7XG4gICAgICAgIHN0YXJ0ID0gaTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGNoYXIgIT09IDB4N0QpIHtcbiAgICAgIHJlc3VsdEhhc2ggPSBsb29rdXBbKGNoYXIgXiAocmVzdWx0SGFzaCA+PiA4KSkgJiAweEZGXSBeIChyZXN1bHRIYXNoIDw8IDgpO1xuICAgIH0gZWxzZSBpZiAoaSAtIDEgIT09IHN0YXJ0KSB7XG4gICAgICByZXR1cm4gcmVzdWx0SGFzaCAmIDB4M0ZGRjtcbiAgICB9XG5cbiAgICByZXN1bHQgPSBsb29rdXBbKGNoYXIgXiAocmVzdWx0ID4+IDgpKSAmIDB4RkZdIF4gKHJlc3VsdCA8PCA4KTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQgJiAweDNGRkY7XG59O1xuXG4vKipcbiAqIENvbnZlcnQgYW4gYXJyYXkgb2YgbXVsdGlwbGUgc3RyaW5ncyBpbnRvIGEgcmVkaXMgc2xvdCBoYXNoLlxuICogUmV0dXJucyAtMSBpZiBvbmUgb2YgdGhlIGtleXMgaXMgbm90IGZvciB0aGUgc2FtZSBzbG90IGFzIHRoZSBvdGhlcnNcbiAqIEBwYXJhbSBrZXlzXG4gKiBAcmV0dXJucyB7bnVtYmVyfVxuICovXG5tb2R1bGUuZXhwb3J0cy5nZW5lcmF0ZU11bHRpID0gZnVuY3Rpb24gZ2VuZXJhdGVNdWx0aShrZXlzKSB7XG4gIHZhciBpID0gMTtcbiAgdmFyIGxlbiA9IGtleXMubGVuZ3RoO1xuICB2YXIgYmFzZSA9IGdlbmVyYXRlKGtleXNbMF0pO1xuXG4gIHdoaWxlIChpIDwgbGVuKSB7XG4gICAgaWYgKGdlbmVyYXRlKGtleXNbaSsrXSkgIT09IGJhc2UpIHJldHVybiAtMTtcbiAgfVxuXG4gIHJldHVybiBiYXNlO1xufTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19jbGFzc1ByaXZhdGVGaWVsZEdldCA9ICh0aGlzICYmIHRoaXMuX19jbGFzc1ByaXZhdGVGaWVsZEdldCkgfHwgZnVuY3Rpb24gKHJlY2VpdmVyLCBzdGF0ZSwga2luZCwgZikge1xuICAgIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIGdldHRlclwiKTtcbiAgICBpZiAodHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciAhPT0gc3RhdGUgfHwgIWYgOiAhc3RhdGUuaGFzKHJlY2VpdmVyKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCByZWFkIHByaXZhdGUgbWVtYmVyIGZyb20gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtcbiAgICByZXR1cm4ga2luZCA9PT0gXCJtXCIgPyBmIDoga2luZCA9PT0gXCJhXCIgPyBmLmNhbGwocmVjZWl2ZXIpIDogZiA/IGYudmFsdWUgOiBzdGF0ZS5nZXQocmVjZWl2ZXIpO1xufTtcbnZhciBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0ID0gKHRoaXMgJiYgdGhpcy5fX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KSB8fCBmdW5jdGlvbiAocmVjZWl2ZXIsIHN0YXRlLCB2YWx1ZSwga2luZCwgZikge1xuICAgIGlmIChraW5kID09PSBcIm1cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgbWV0aG9kIGlzIG5vdCB3cml0YWJsZVwiKTtcbiAgICBpZiAoa2luZCA9PT0gXCJhXCIgJiYgIWYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBzZXR0ZXJcIik7XG4gICAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3Qgd3JpdGUgcHJpdmF0ZSBtZW1iZXIgdG8gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtcbiAgICByZXR1cm4gKGtpbmQgPT09IFwiYVwiID8gZi5jYWxsKHJlY2VpdmVyLCB2YWx1ZSkgOiBmID8gZi52YWx1ZSA9IHZhbHVlIDogc3RhdGUuc2V0KHJlY2VpdmVyLCB2YWx1ZSkpLCB2YWx1ZTtcbn07XG52YXIgX1JlZGlzQ2x1c3RlclNsb3RzX2luc3RhbmNlcywgX2EsIF9SZWRpc0NsdXN0ZXJTbG90c19TTE9UUywgX1JlZGlzQ2x1c3RlclNsb3RzX29wdGlvbnMsIF9SZWRpc0NsdXN0ZXJTbG90c19DbGllbnQsIF9SZWRpc0NsdXN0ZXJTbG90c19lbWl0LCBfUmVkaXNDbHVzdGVyU2xvdHNfaXNPcGVuLCBfUmVkaXNDbHVzdGVyU2xvdHNfZGlzY292ZXJXaXRoUm9vdE5vZGVzLCBfUmVkaXNDbHVzdGVyU2xvdHNfcmVzZXRTbG90cywgX1JlZGlzQ2x1c3RlclNsb3RzX2Rpc2NvdmVyLCBfUmVkaXNDbHVzdGVyU2xvdHNfZ2V0U2hhcmRzLCBfUmVkaXNDbHVzdGVyU2xvdHNfZ2V0Tm9kZUFkZHJlc3MsIF9SZWRpc0NsdXN0ZXJTbG90c19jbGllbnRPcHRpb25zRGVmYXVsdHMsIF9SZWRpc0NsdXN0ZXJTbG90c19pbml0aWF0ZVNsb3ROb2RlLCBfUmVkaXNDbHVzdGVyU2xvdHNfY3JlYXRlQ2xpZW50LCBfUmVkaXNDbHVzdGVyU2xvdHNfY3JlYXRlTm9kZUNsaWVudCwgX1JlZGlzQ2x1c3RlclNsb3RzX3J1bm5pbmdSZWRpc2NvdmVyUHJvbWlzZSwgX1JlZGlzQ2x1c3RlclNsb3RzX3JlZGlzY292ZXIsIF9SZWRpc0NsdXN0ZXJTbG90c19kZXN0cm95LCBfUmVkaXNDbHVzdGVyU2xvdHNfZXhlY09uTm9kZUNsaWVudCwgX1JlZGlzQ2x1c3RlclNsb3RzX2l0ZXJhdGVBbGxOb2RlcywgX1JlZGlzQ2x1c3RlclNsb3RzX3JhbmRvbU5vZGVJdGVyYXRvciwgX1JlZGlzQ2x1c3RlclNsb3RzX3Nsb3ROb2Rlc0l0ZXJhdG9yLCBfUmVkaXNDbHVzdGVyU2xvdHNfaW5pdGlhdGVQdWJTdWJDbGllbnQsIF9SZWRpc0NsdXN0ZXJTbG90c19pbml0aWF0ZVNoYXJkZWRQdWJTdWJDbGllbnQ7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBjbGllbnRfMSA9IHJlcXVpcmUoXCIuLi9jbGllbnRcIik7XG5jb25zdCBlcnJvcnNfMSA9IHJlcXVpcmUoXCIuLi9lcnJvcnNcIik7XG5jb25zdCB1dGlsXzEgPSByZXF1aXJlKFwidXRpbFwiKTtcbmNvbnN0IHB1Yl9zdWJfMSA9IHJlcXVpcmUoXCIuLi9jbGllbnQvcHViLXN1YlwiKTtcbi8vIFdlIG5lZWQgdG8gdXNlICdyZXF1aXJlJywgYmVjYXVzZSBpdCdzIG5vdCBwb3NzaWJsZSB3aXRoIFR5cGVzY3JpcHQgdG8gaW1wb3J0XG4vLyBmdW5jdGlvbiB0aGF0IGFyZSBleHBvcnRlZCBhcyAnbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbmAsIHdpdGhvdXQgZXNNb2R1bGVJbnRlcm9wXG4vLyBzZXQgdG8gdHJ1ZS5cbmNvbnN0IGNhbGN1bGF0ZVNsb3QgPSByZXF1aXJlKCdjbHVzdGVyLWtleS1zbG90Jyk7XG5jbGFzcyBSZWRpc0NsdXN0ZXJTbG90cyB7XG4gICAgZ2V0IGlzT3BlbigpIHtcbiAgICAgICAgcmV0dXJuIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzQ2x1c3RlclNsb3RzX2lzT3BlbiwgXCJmXCIpO1xuICAgIH1cbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zLCBlbWl0KSB7XG4gICAgICAgIF9SZWRpc0NsdXN0ZXJTbG90c19pbnN0YW5jZXMuYWRkKHRoaXMpO1xuICAgICAgICBfUmVkaXNDbHVzdGVyU2xvdHNfb3B0aW9ucy5zZXQodGhpcywgdm9pZCAwKTtcbiAgICAgICAgX1JlZGlzQ2x1c3RlclNsb3RzX0NsaWVudC5zZXQodGhpcywgdm9pZCAwKTtcbiAgICAgICAgX1JlZGlzQ2x1c3RlclNsb3RzX2VtaXQuc2V0KHRoaXMsIHZvaWQgMCk7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcInNsb3RzXCIsIHtcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiBuZXcgQXJyYXkoX19jbGFzc1ByaXZhdGVGaWVsZEdldChfYSwgX2EsIFwiZlwiLCBfUmVkaXNDbHVzdGVyU2xvdHNfU0xPVFMpKVxuICAgICAgICB9KTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIFwic2hhcmRzXCIsIHtcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiBuZXcgQXJyYXkoKVxuICAgICAgICB9KTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIFwibWFzdGVyc1wiLCB7XG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogbmV3IEFycmF5KClcbiAgICAgICAgfSk7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcInJlcGxpY2FzXCIsIHtcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiBuZXcgQXJyYXkoKVxuICAgICAgICB9KTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIFwibm9kZUJ5QWRkcmVzc1wiLCB7XG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogbmV3IE1hcCgpXG4gICAgICAgIH0pO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgXCJwdWJTdWJOb2RlXCIsIHtcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDBcbiAgICAgICAgfSk7XG4gICAgICAgIF9SZWRpc0NsdXN0ZXJTbG90c19pc09wZW4uc2V0KHRoaXMsIGZhbHNlKTtcbiAgICAgICAgX1JlZGlzQ2x1c3RlclNsb3RzX3J1bm5pbmdSZWRpc2NvdmVyUHJvbWlzZS5zZXQodGhpcywgdm9pZCAwKTtcbiAgICAgICAgX1JlZGlzQ2x1c3RlclNsb3RzX3JhbmRvbU5vZGVJdGVyYXRvci5zZXQodGhpcywgdm9pZCAwKTtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfUmVkaXNDbHVzdGVyU2xvdHNfb3B0aW9ucywgb3B0aW9ucywgXCJmXCIpO1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9SZWRpc0NsdXN0ZXJTbG90c19DbGllbnQsIGNsaWVudF8xLmRlZmF1bHQuZXh0ZW5kKG9wdGlvbnMpLCBcImZcIik7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX1JlZGlzQ2x1c3RlclNsb3RzX2VtaXQsIGVtaXQsIFwiZlwiKTtcbiAgICB9XG4gICAgYXN5bmMgY29ubmVjdCgpIHtcbiAgICAgICAgaWYgKF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzQ2x1c3RlclNsb3RzX2lzT3BlbiwgXCJmXCIpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NsdXN0ZXIgYWxyZWFkeSBvcGVuJyk7XG4gICAgICAgIH1cbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfUmVkaXNDbHVzdGVyU2xvdHNfaXNPcGVuLCB0cnVlLCBcImZcIik7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc0NsdXN0ZXJTbG90c19pbnN0YW5jZXMsIFwibVwiLCBfUmVkaXNDbHVzdGVyU2xvdHNfZGlzY292ZXJXaXRoUm9vdE5vZGVzKS5jYWxsKHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX1JlZGlzQ2x1c3RlclNsb3RzX2lzT3BlbiwgZmFsc2UsIFwiZlwiKTtcbiAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfVxuICAgIH1cbiAgICBub2RlQ2xpZW50KG5vZGUpIHtcbiAgICAgICAgcmV0dXJuIG5vZGUuY2xpZW50ID8/IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzQ2x1c3RlclNsb3RzX2luc3RhbmNlcywgXCJtXCIsIF9SZWRpc0NsdXN0ZXJTbG90c19jcmVhdGVOb2RlQ2xpZW50KS5jYWxsKHRoaXMsIG5vZGUpO1xuICAgIH1cbiAgICBhc3luYyByZWRpc2NvdmVyKHN0YXJ0V2l0aCkge1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9SZWRpc0NsdXN0ZXJTbG90c19ydW5uaW5nUmVkaXNjb3ZlclByb21pc2UsIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzQ2x1c3RlclNsb3RzX3J1bm5pbmdSZWRpc2NvdmVyUHJvbWlzZSwgXCJmXCIpID8/IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzQ2x1c3RlclNsb3RzX2luc3RhbmNlcywgXCJtXCIsIF9SZWRpc0NsdXN0ZXJTbG90c19yZWRpc2NvdmVyKS5jYWxsKHRoaXMsIHN0YXJ0V2l0aClcbiAgICAgICAgICAgIC5maW5hbGx5KCgpID0+IF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX1JlZGlzQ2x1c3RlclNsb3RzX3J1bm5pbmdSZWRpc2NvdmVyUHJvbWlzZSwgdW5kZWZpbmVkLCBcImZcIikpLCBcImZcIik7XG4gICAgICAgIHJldHVybiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc0NsdXN0ZXJTbG90c19ydW5uaW5nUmVkaXNjb3ZlclByb21pc2UsIFwiZlwiKTtcbiAgICB9XG4gICAgcXVpdCgpIHtcbiAgICAgICAgcmV0dXJuIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzQ2x1c3RlclNsb3RzX2luc3RhbmNlcywgXCJtXCIsIF9SZWRpc0NsdXN0ZXJTbG90c19kZXN0cm95KS5jYWxsKHRoaXMsIGNsaWVudCA9PiBjbGllbnQucXVpdCgpKTtcbiAgICB9XG4gICAgZGlzY29ubmVjdCgpIHtcbiAgICAgICAgcmV0dXJuIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzQ2x1c3RlclNsb3RzX2luc3RhbmNlcywgXCJtXCIsIF9SZWRpc0NsdXN0ZXJTbG90c19kZXN0cm95KS5jYWxsKHRoaXMsIGNsaWVudCA9PiBjbGllbnQuZGlzY29ubmVjdCgpKTtcbiAgICB9XG4gICAgZ2V0Q2xpZW50KGZpcnN0S2V5LCBpc1JlYWRvbmx5KSB7XG4gICAgICAgIGlmICghZmlyc3RLZXkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm5vZGVDbGllbnQodGhpcy5nZXRSYW5kb21Ob2RlKCkpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNsb3ROdW1iZXIgPSBjYWxjdWxhdGVTbG90KGZpcnN0S2V5KTtcbiAgICAgICAgaWYgKCFpc1JlYWRvbmx5KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ub2RlQ2xpZW50KHRoaXMuc2xvdHNbc2xvdE51bWJlcl0ubWFzdGVyKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5ub2RlQ2xpZW50KHRoaXMuZ2V0U2xvdFJhbmRvbU5vZGUoc2xvdE51bWJlcikpO1xuICAgIH1cbiAgICBnZXRSYW5kb21Ob2RlKCkge1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9SZWRpc0NsdXN0ZXJTbG90c19yYW5kb21Ob2RlSXRlcmF0b3IsIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzQ2x1c3RlclNsb3RzX3JhbmRvbU5vZGVJdGVyYXRvciwgXCJmXCIpID8/IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzQ2x1c3RlclNsb3RzX2luc3RhbmNlcywgXCJtXCIsIF9SZWRpc0NsdXN0ZXJTbG90c19pdGVyYXRlQWxsTm9kZXMpLmNhbGwodGhpcyksIFwiZlwiKTtcbiAgICAgICAgcmV0dXJuIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzQ2x1c3RlclNsb3RzX3JhbmRvbU5vZGVJdGVyYXRvciwgXCJmXCIpLm5leHQoKS52YWx1ZTtcbiAgICB9XG4gICAgZ2V0U2xvdFJhbmRvbU5vZGUoc2xvdE51bWJlcikge1xuICAgICAgICBjb25zdCBzbG90ID0gdGhpcy5zbG90c1tzbG90TnVtYmVyXTtcbiAgICAgICAgaWYgKCFzbG90LnJlcGxpY2FzPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBzbG90Lm1hc3RlcjtcbiAgICAgICAgfVxuICAgICAgICBzbG90Lm5vZGVzSXRlcmF0b3IgPz8gKHNsb3Qubm9kZXNJdGVyYXRvciA9IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzQ2x1c3RlclNsb3RzX2luc3RhbmNlcywgXCJtXCIsIF9SZWRpc0NsdXN0ZXJTbG90c19zbG90Tm9kZXNJdGVyYXRvcikuY2FsbCh0aGlzLCBzbG90KSk7XG4gICAgICAgIHJldHVybiBzbG90Lm5vZGVzSXRlcmF0b3IubmV4dCgpLnZhbHVlO1xuICAgIH1cbiAgICBnZXRNYXN0ZXJCeUFkZHJlc3MoYWRkcmVzcykge1xuICAgICAgICBjb25zdCBtYXN0ZXIgPSB0aGlzLm5vZGVCeUFkZHJlc3MuZ2V0KGFkZHJlc3MpO1xuICAgICAgICBpZiAoIW1hc3RlcilcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgcmV0dXJuIHRoaXMubm9kZUNsaWVudChtYXN0ZXIpO1xuICAgIH1cbiAgICBnZXRQdWJTdWJDbGllbnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnB1YlN1Yk5vZGUgP1xuICAgICAgICAgICAgdGhpcy5wdWJTdWJOb2RlLmNsaWVudCA6XG4gICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc0NsdXN0ZXJTbG90c19pbnN0YW5jZXMsIFwibVwiLCBfUmVkaXNDbHVzdGVyU2xvdHNfaW5pdGlhdGVQdWJTdWJDbGllbnQpLmNhbGwodGhpcyk7XG4gICAgfVxuICAgIGFzeW5jIGV4ZWN1dGVVbnN1YnNjcmliZUNvbW1hbmQodW5zdWJzY3JpYmUpIHtcbiAgICAgICAgY29uc3QgY2xpZW50ID0gYXdhaXQgdGhpcy5nZXRQdWJTdWJDbGllbnQoKTtcbiAgICAgICAgYXdhaXQgdW5zdWJzY3JpYmUoY2xpZW50KTtcbiAgICAgICAgaWYgKCFjbGllbnQuaXNQdWJTdWJBY3RpdmUgJiYgY2xpZW50LmlzT3Blbikge1xuICAgICAgICAgICAgYXdhaXQgY2xpZW50LmRpc2Nvbm5lY3QoKTtcbiAgICAgICAgICAgIHRoaXMucHViU3ViTm9kZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXRTaGFyZGVkUHViU3ViQ2xpZW50KGNoYW5uZWwpIHtcbiAgICAgICAgY29uc3QgeyBtYXN0ZXIgfSA9IHRoaXMuc2xvdHNbY2FsY3VsYXRlU2xvdChjaGFubmVsKV07XG4gICAgICAgIHJldHVybiBtYXN0ZXIucHViU3ViQ2xpZW50ID8/IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzQ2x1c3RlclNsb3RzX2luc3RhbmNlcywgXCJtXCIsIF9SZWRpc0NsdXN0ZXJTbG90c19pbml0aWF0ZVNoYXJkZWRQdWJTdWJDbGllbnQpLmNhbGwodGhpcywgbWFzdGVyKTtcbiAgICB9XG4gICAgYXN5bmMgZXhlY3V0ZVNoYXJkZWRVbnN1YnNjcmliZUNvbW1hbmQoY2hhbm5lbCwgdW5zdWJzY3JpYmUpIHtcbiAgICAgICAgY29uc3QgeyBtYXN0ZXIgfSA9IHRoaXMuc2xvdHNbY2FsY3VsYXRlU2xvdChjaGFubmVsKV07XG4gICAgICAgIGlmICghbWFzdGVyLnB1YlN1YkNsaWVudClcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgY29uc3QgY2xpZW50ID0gYXdhaXQgbWFzdGVyLnB1YlN1YkNsaWVudDtcbiAgICAgICAgYXdhaXQgdW5zdWJzY3JpYmUoY2xpZW50KTtcbiAgICAgICAgaWYgKCFjbGllbnQuaXNQdWJTdWJBY3RpdmUgJiYgY2xpZW50LmlzT3Blbikge1xuICAgICAgICAgICAgYXdhaXQgY2xpZW50LmRpc2Nvbm5lY3QoKTtcbiAgICAgICAgICAgIG1hc3Rlci5wdWJTdWJDbGllbnQgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICB9XG59XG5fYSA9IFJlZGlzQ2x1c3RlclNsb3RzLCBfUmVkaXNDbHVzdGVyU2xvdHNfb3B0aW9ucyA9IG5ldyBXZWFrTWFwKCksIF9SZWRpc0NsdXN0ZXJTbG90c19DbGllbnQgPSBuZXcgV2Vha01hcCgpLCBfUmVkaXNDbHVzdGVyU2xvdHNfZW1pdCA9IG5ldyBXZWFrTWFwKCksIF9SZWRpc0NsdXN0ZXJTbG90c19pc09wZW4gPSBuZXcgV2Vha01hcCgpLCBfUmVkaXNDbHVzdGVyU2xvdHNfcnVubmluZ1JlZGlzY292ZXJQcm9taXNlID0gbmV3IFdlYWtNYXAoKSwgX1JlZGlzQ2x1c3RlclNsb3RzX3JhbmRvbU5vZGVJdGVyYXRvciA9IG5ldyBXZWFrTWFwKCksIF9SZWRpc0NsdXN0ZXJTbG90c19pbnN0YW5jZXMgPSBuZXcgV2Vha1NldCgpLCBfUmVkaXNDbHVzdGVyU2xvdHNfZGlzY292ZXJXaXRoUm9vdE5vZGVzID0gYXN5bmMgZnVuY3Rpb24gX1JlZGlzQ2x1c3RlclNsb3RzX2Rpc2NvdmVyV2l0aFJvb3ROb2RlcygpIHtcbiAgICBsZXQgc3RhcnQgPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc0NsdXN0ZXJTbG90c19vcHRpb25zLCBcImZcIikucm9vdE5vZGVzLmxlbmd0aCk7XG4gICAgZm9yIChsZXQgaSA9IHN0YXJ0OyBpIDwgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUmVkaXNDbHVzdGVyU2xvdHNfb3B0aW9ucywgXCJmXCIpLnJvb3ROb2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoYXdhaXQgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUmVkaXNDbHVzdGVyU2xvdHNfaW5zdGFuY2VzLCBcIm1cIiwgX1JlZGlzQ2x1c3RlclNsb3RzX2Rpc2NvdmVyKS5jYWxsKHRoaXMsIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzQ2x1c3RlclNsb3RzX29wdGlvbnMsIFwiZlwiKS5yb290Tm9kZXNbaV0pKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN0YXJ0OyBpKyspIHtcbiAgICAgICAgaWYgKGF3YWl0IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzQ2x1c3RlclNsb3RzX2luc3RhbmNlcywgXCJtXCIsIF9SZWRpc0NsdXN0ZXJTbG90c19kaXNjb3ZlcikuY2FsbCh0aGlzLCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc0NsdXN0ZXJTbG90c19vcHRpb25zLCBcImZcIikucm9vdE5vZGVzW2ldKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhyb3cgbmV3IGVycm9yc18xLlJvb3ROb2Rlc1VuYXZhaWxhYmxlRXJyb3IoKTtcbn0sIF9SZWRpc0NsdXN0ZXJTbG90c19yZXNldFNsb3RzID0gZnVuY3Rpb24gX1JlZGlzQ2x1c3RlclNsb3RzX3Jlc2V0U2xvdHMoKSB7XG4gICAgdGhpcy5zbG90cyA9IG5ldyBBcnJheShfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9hLCBfYSwgXCJmXCIsIF9SZWRpc0NsdXN0ZXJTbG90c19TTE9UUykpO1xuICAgIHRoaXMuc2hhcmRzID0gW107XG4gICAgdGhpcy5tYXN0ZXJzID0gW107XG4gICAgdGhpcy5yZXBsaWNhcyA9IFtdO1xuICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX1JlZGlzQ2x1c3RlclNsb3RzX3JhbmRvbU5vZGVJdGVyYXRvciwgdW5kZWZpbmVkLCBcImZcIik7XG59LCBfUmVkaXNDbHVzdGVyU2xvdHNfZGlzY292ZXIgPSBhc3luYyBmdW5jdGlvbiBfUmVkaXNDbHVzdGVyU2xvdHNfZGlzY292ZXIocm9vdE5vZGUpIHtcbiAgICBjb25zdCBhZGRyZXNzZXNJblVzZSA9IG5ldyBTZXQoKTtcbiAgICB0cnkge1xuICAgICAgICBjb25zdCBzaGFyZHMgPSBhd2FpdCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc0NsdXN0ZXJTbG90c19pbnN0YW5jZXMsIFwibVwiLCBfUmVkaXNDbHVzdGVyU2xvdHNfZ2V0U2hhcmRzKS5jYWxsKHRoaXMsIHJvb3ROb2RlKSwgcHJvbWlzZXMgPSBbXSwgZWFnZXJDb25uZWN0ID0gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUmVkaXNDbHVzdGVyU2xvdHNfb3B0aW9ucywgXCJmXCIpLm1pbmltaXplQ29ubmVjdGlvbnMgIT09IHRydWU7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzQ2x1c3RlclNsb3RzX2luc3RhbmNlcywgXCJtXCIsIF9SZWRpc0NsdXN0ZXJTbG90c19yZXNldFNsb3RzKS5jYWxsKHRoaXMpO1xuICAgICAgICBmb3IgKGNvbnN0IHsgZnJvbSwgdG8sIG1hc3RlciwgcmVwbGljYXMgfSBvZiBzaGFyZHMpIHtcbiAgICAgICAgICAgIGNvbnN0IHNoYXJkID0ge1xuICAgICAgICAgICAgICAgIG1hc3RlcjogX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUmVkaXNDbHVzdGVyU2xvdHNfaW5zdGFuY2VzLCBcIm1cIiwgX1JlZGlzQ2x1c3RlclNsb3RzX2luaXRpYXRlU2xvdE5vZGUpLmNhbGwodGhpcywgbWFzdGVyLCBmYWxzZSwgZWFnZXJDb25uZWN0LCBhZGRyZXNzZXNJblVzZSwgcHJvbWlzZXMpXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzQ2x1c3RlclNsb3RzX29wdGlvbnMsIFwiZlwiKS51c2VSZXBsaWNhcykge1xuICAgICAgICAgICAgICAgIHNoYXJkLnJlcGxpY2FzID0gcmVwbGljYXMubWFwKHJlcGxpY2EgPT4gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUmVkaXNDbHVzdGVyU2xvdHNfaW5zdGFuY2VzLCBcIm1cIiwgX1JlZGlzQ2x1c3RlclNsb3RzX2luaXRpYXRlU2xvdE5vZGUpLmNhbGwodGhpcywgcmVwbGljYSwgdHJ1ZSwgZWFnZXJDb25uZWN0LCBhZGRyZXNzZXNJblVzZSwgcHJvbWlzZXMpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc2hhcmRzLnB1c2goc2hhcmQpO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IGZyb207IGkgPD0gdG87IGkrKykge1xuICAgICAgICAgICAgICAgIHRoaXMuc2xvdHNbaV0gPSBzaGFyZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5wdWJTdWJOb2RlICYmICFhZGRyZXNzZXNJblVzZS5oYXModGhpcy5wdWJTdWJOb2RlLmFkZHJlc3MpKSB7XG4gICAgICAgICAgICBpZiAodXRpbF8xLnR5cGVzLmlzUHJvbWlzZSh0aGlzLnB1YlN1Yk5vZGUuY2xpZW50KSkge1xuICAgICAgICAgICAgICAgIHByb21pc2VzLnB1c2godGhpcy5wdWJTdWJOb2RlLmNsaWVudC50aGVuKGNsaWVudCA9PiBjbGllbnQuZGlzY29ubmVjdCgpKSk7XG4gICAgICAgICAgICAgICAgdGhpcy5wdWJTdWJOb2RlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcHJvbWlzZXMucHVzaCh0aGlzLnB1YlN1Yk5vZGUuY2xpZW50LmRpc2Nvbm5lY3QoKSk7XG4gICAgICAgICAgICAgICAgY29uc3QgY2hhbm5lbHNMaXN0ZW5lcnMgPSB0aGlzLnB1YlN1Yk5vZGUuY2xpZW50LmdldFB1YlN1Ykxpc3RlbmVycyhwdWJfc3ViXzEuUHViU3ViVHlwZS5DSEFOTkVMUyksIHBhdHRlcm5zTGlzdGVuZXJzID0gdGhpcy5wdWJTdWJOb2RlLmNsaWVudC5nZXRQdWJTdWJMaXN0ZW5lcnMocHViX3N1Yl8xLlB1YlN1YlR5cGUuUEFUVEVSTlMpO1xuICAgICAgICAgICAgICAgIGlmIChjaGFubmVsc0xpc3RlbmVycy5zaXplIHx8IHBhdHRlcm5zTGlzdGVuZXJzLnNpemUpIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvbWlzZXMucHVzaChfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc0NsdXN0ZXJTbG90c19pbnN0YW5jZXMsIFwibVwiLCBfUmVkaXNDbHVzdGVyU2xvdHNfaW5pdGlhdGVQdWJTdWJDbGllbnQpLmNhbGwodGhpcywge1xuICAgICAgICAgICAgICAgICAgICAgICAgW3B1Yl9zdWJfMS5QdWJTdWJUeXBlLkNIQU5ORUxTXTogY2hhbm5lbHNMaXN0ZW5lcnMsXG4gICAgICAgICAgICAgICAgICAgICAgICBbcHViX3N1Yl8xLlB1YlN1YlR5cGUuUEFUVEVSTlNdOiBwYXR0ZXJuc0xpc3RlbmVyc1xuICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgW2FkZHJlc3MsIG5vZGVdIG9mIHRoaXMubm9kZUJ5QWRkcmVzcy5lbnRyaWVzKCkpIHtcbiAgICAgICAgICAgIGlmIChhZGRyZXNzZXNJblVzZS5oYXMoYWRkcmVzcykpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICBpZiAobm9kZS5jbGllbnQpIHtcbiAgICAgICAgICAgICAgICBwcm9taXNlcy5wdXNoKF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzQ2x1c3RlclNsb3RzX2luc3RhbmNlcywgXCJtXCIsIF9SZWRpc0NsdXN0ZXJTbG90c19leGVjT25Ob2RlQ2xpZW50KS5jYWxsKHRoaXMsIG5vZGUuY2xpZW50LCBjbGllbnQgPT4gY2xpZW50LmRpc2Nvbm5lY3QoKSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgeyBwdWJTdWJDbGllbnQgfSA9IG5vZGU7XG4gICAgICAgICAgICBpZiAocHViU3ViQ2xpZW50KSB7XG4gICAgICAgICAgICAgICAgcHJvbWlzZXMucHVzaChfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc0NsdXN0ZXJTbG90c19pbnN0YW5jZXMsIFwibVwiLCBfUmVkaXNDbHVzdGVyU2xvdHNfZXhlY09uTm9kZUNsaWVudCkuY2FsbCh0aGlzLCBwdWJTdWJDbGllbnQsIGNsaWVudCA9PiBjbGllbnQuZGlzY29ubmVjdCgpKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLm5vZGVCeUFkZHJlc3MuZGVsZXRlKGFkZHJlc3MpO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUmVkaXNDbHVzdGVyU2xvdHNfZW1pdCwgXCJmXCIpLmNhbGwodGhpcywgJ2Vycm9yJywgZXJyKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn0sIF9SZWRpc0NsdXN0ZXJTbG90c19nZXRTaGFyZHMgPSBhc3luYyBmdW5jdGlvbiBfUmVkaXNDbHVzdGVyU2xvdHNfZ2V0U2hhcmRzKHJvb3ROb2RlKSB7XG4gICAgY29uc3QgY2xpZW50ID0gbmV3IChfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc0NsdXN0ZXJTbG90c19DbGllbnQsIFwiZlwiKSkoX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUmVkaXNDbHVzdGVyU2xvdHNfaW5zdGFuY2VzLCBcIm1cIiwgX1JlZGlzQ2x1c3RlclNsb3RzX2NsaWVudE9wdGlvbnNEZWZhdWx0cykuY2FsbCh0aGlzLCByb290Tm9kZSwgdHJ1ZSkpO1xuICAgIGNsaWVudC5vbignZXJyb3InLCBlcnIgPT4gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUmVkaXNDbHVzdGVyU2xvdHNfZW1pdCwgXCJmXCIpLmNhbGwodGhpcywgJ2Vycm9yJywgZXJyKSk7XG4gICAgYXdhaXQgY2xpZW50LmNvbm5lY3QoKTtcbiAgICB0cnkge1xuICAgICAgICAvLyB1c2luZyBgQ0xVU1RFUiBTTE9UU2AgYW5kIG5vdCBgQ0xVU1RFUiBTSEFSRFNgIHRvIHN1cHBvcnQgb2xkZXIgdmVyc2lvbnNcbiAgICAgICAgcmV0dXJuIGF3YWl0IGNsaWVudC5jbHVzdGVyU2xvdHMoKTtcbiAgICB9XG4gICAgZmluYWxseSB7XG4gICAgICAgIGF3YWl0IGNsaWVudC5kaXNjb25uZWN0KCk7XG4gICAgfVxufSwgX1JlZGlzQ2x1c3RlclNsb3RzX2dldE5vZGVBZGRyZXNzID0gZnVuY3Rpb24gX1JlZGlzQ2x1c3RlclNsb3RzX2dldE5vZGVBZGRyZXNzKGFkZHJlc3MpIHtcbiAgICBzd2l0Y2ggKHR5cGVvZiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc0NsdXN0ZXJTbG90c19vcHRpb25zLCBcImZcIikubm9kZUFkZHJlc3NNYXApIHtcbiAgICAgICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgICAgICAgIHJldHVybiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc0NsdXN0ZXJTbG90c19vcHRpb25zLCBcImZcIikubm9kZUFkZHJlc3NNYXBbYWRkcmVzc107XG4gICAgICAgIGNhc2UgJ2Z1bmN0aW9uJzpcbiAgICAgICAgICAgIHJldHVybiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc0NsdXN0ZXJTbG90c19vcHRpb25zLCBcImZcIikubm9kZUFkZHJlc3NNYXAoYWRkcmVzcyk7XG4gICAgfVxufSwgX1JlZGlzQ2x1c3RlclNsb3RzX2NsaWVudE9wdGlvbnNEZWZhdWx0cyA9IGZ1bmN0aW9uIF9SZWRpc0NsdXN0ZXJTbG90c19jbGllbnRPcHRpb25zRGVmYXVsdHMob3B0aW9ucywgZGlzYWJsZVJlY29ubmVjdCkge1xuICAgIGxldCByZXN1bHQ7XG4gICAgaWYgKF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzQ2x1c3RlclNsb3RzX29wdGlvbnMsIFwiZlwiKS5kZWZhdWx0cykge1xuICAgICAgICBsZXQgc29ja2V0O1xuICAgICAgICBpZiAoX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUmVkaXNDbHVzdGVyU2xvdHNfb3B0aW9ucywgXCJmXCIpLmRlZmF1bHRzLnNvY2tldCkge1xuICAgICAgICAgICAgc29ja2V0ID0ge1xuICAgICAgICAgICAgICAgIC4uLl9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzQ2x1c3RlclNsb3RzX29wdGlvbnMsIFwiZlwiKS5kZWZhdWx0cy5zb2NrZXQsXG4gICAgICAgICAgICAgICAgLi4ub3B0aW9ucz8uc29ja2V0XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgc29ja2V0ID0gb3B0aW9ucz8uc29ja2V0O1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdCA9IHtcbiAgICAgICAgICAgIC4uLl9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzQ2x1c3RlclNsb3RzX29wdGlvbnMsIFwiZlwiKS5kZWZhdWx0cyxcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICBzb2NrZXRcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJlc3VsdCA9IG9wdGlvbnM7XG4gICAgfVxuICAgIGlmIChkaXNhYmxlUmVjb25uZWN0KSB7XG4gICAgICAgIHJlc3VsdCA/PyAocmVzdWx0ID0ge30pO1xuICAgICAgICByZXN1bHQuc29ja2V0ID8/IChyZXN1bHQuc29ja2V0ID0ge30pO1xuICAgICAgICByZXN1bHQuc29ja2V0LnJlY29ubmVjdFN0cmF0ZWd5ID0gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59LCBfUmVkaXNDbHVzdGVyU2xvdHNfaW5pdGlhdGVTbG90Tm9kZSA9IGZ1bmN0aW9uIF9SZWRpc0NsdXN0ZXJTbG90c19pbml0aWF0ZVNsb3ROb2RlKHsgaWQsIGlwLCBwb3J0IH0sIHJlYWRvbmx5LCBlYWdlckNvbm5lbnQsIGFkZHJlc3Nlc0luVXNlLCBwcm9taXNlcykge1xuICAgIGNvbnN0IGFkZHJlc3MgPSBgJHtpcH06JHtwb3J0fWA7XG4gICAgYWRkcmVzc2VzSW5Vc2UuYWRkKGFkZHJlc3MpO1xuICAgIGxldCBub2RlID0gdGhpcy5ub2RlQnlBZGRyZXNzLmdldChhZGRyZXNzKTtcbiAgICBpZiAoIW5vZGUpIHtcbiAgICAgICAgbm9kZSA9IHtcbiAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgaG9zdDogaXAsXG4gICAgICAgICAgICBwb3J0LFxuICAgICAgICAgICAgYWRkcmVzcyxcbiAgICAgICAgICAgIHJlYWRvbmx5LFxuICAgICAgICAgICAgY2xpZW50OiB1bmRlZmluZWRcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKGVhZ2VyQ29ubmVudCkge1xuICAgICAgICAgICAgcHJvbWlzZXMucHVzaChfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc0NsdXN0ZXJTbG90c19pbnN0YW5jZXMsIFwibVwiLCBfUmVkaXNDbHVzdGVyU2xvdHNfY3JlYXRlTm9kZUNsaWVudCkuY2FsbCh0aGlzLCBub2RlKSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5ub2RlQnlBZGRyZXNzLnNldChhZGRyZXNzLCBub2RlKTtcbiAgICB9XG4gICAgKHJlYWRvbmx5ID8gdGhpcy5yZXBsaWNhcyA6IHRoaXMubWFzdGVycykucHVzaChub2RlKTtcbiAgICByZXR1cm4gbm9kZTtcbn0sIF9SZWRpc0NsdXN0ZXJTbG90c19jcmVhdGVDbGllbnQgPSBhc3luYyBmdW5jdGlvbiBfUmVkaXNDbHVzdGVyU2xvdHNfY3JlYXRlQ2xpZW50KG5vZGUsIHJlYWRvbmx5ID0gbm9kZS5yZWFkb25seSkge1xuICAgIGNvbnN0IGNsaWVudCA9IG5ldyAoX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUmVkaXNDbHVzdGVyU2xvdHNfQ2xpZW50LCBcImZcIikpKF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzQ2x1c3RlclNsb3RzX2luc3RhbmNlcywgXCJtXCIsIF9SZWRpc0NsdXN0ZXJTbG90c19jbGllbnRPcHRpb25zRGVmYXVsdHMpLmNhbGwodGhpcywge1xuICAgICAgICBzb2NrZXQ6IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzQ2x1c3RlclNsb3RzX2luc3RhbmNlcywgXCJtXCIsIF9SZWRpc0NsdXN0ZXJTbG90c19nZXROb2RlQWRkcmVzcykuY2FsbCh0aGlzLCBub2RlLmFkZHJlc3MpID8/IHtcbiAgICAgICAgICAgIGhvc3Q6IG5vZGUuaG9zdCxcbiAgICAgICAgICAgIHBvcnQ6IG5vZGUucG9ydFxuICAgICAgICB9LFxuICAgICAgICByZWFkb25seVxuICAgIH0pKTtcbiAgICBjbGllbnQub24oJ2Vycm9yJywgZXJyID0+IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzQ2x1c3RlclNsb3RzX2VtaXQsIFwiZlwiKS5jYWxsKHRoaXMsICdlcnJvcicsIGVycikpO1xuICAgIGF3YWl0IGNsaWVudC5jb25uZWN0KCk7XG4gICAgcmV0dXJuIGNsaWVudDtcbn0sIF9SZWRpc0NsdXN0ZXJTbG90c19jcmVhdGVOb2RlQ2xpZW50ID0gZnVuY3Rpb24gX1JlZGlzQ2x1c3RlclNsb3RzX2NyZWF0ZU5vZGVDbGllbnQobm9kZSkge1xuICAgIGNvbnN0IHByb21pc2UgPSBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc0NsdXN0ZXJTbG90c19pbnN0YW5jZXMsIFwibVwiLCBfUmVkaXNDbHVzdGVyU2xvdHNfY3JlYXRlQ2xpZW50KS5jYWxsKHRoaXMsIG5vZGUpXG4gICAgICAgIC50aGVuKGNsaWVudCA9PiB7XG4gICAgICAgIG5vZGUuY2xpZW50ID0gY2xpZW50O1xuICAgICAgICByZXR1cm4gY2xpZW50O1xuICAgIH0pXG4gICAgICAgIC5jYXRjaChlcnIgPT4ge1xuICAgICAgICBub2RlLmNsaWVudCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhyb3cgZXJyO1xuICAgIH0pO1xuICAgIG5vZGUuY2xpZW50ID0gcHJvbWlzZTtcbiAgICByZXR1cm4gcHJvbWlzZTtcbn0sIF9SZWRpc0NsdXN0ZXJTbG90c19yZWRpc2NvdmVyID0gYXN5bmMgZnVuY3Rpb24gX1JlZGlzQ2x1c3RlclNsb3RzX3JlZGlzY292ZXIoc3RhcnRXaXRoKSB7XG4gICAgaWYgKGF3YWl0IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzQ2x1c3RlclNsb3RzX2luc3RhbmNlcywgXCJtXCIsIF9SZWRpc0NsdXN0ZXJTbG90c19kaXNjb3ZlcikuY2FsbCh0aGlzLCBzdGFydFdpdGgub3B0aW9ucykpXG4gICAgICAgIHJldHVybjtcbiAgICByZXR1cm4gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUmVkaXNDbHVzdGVyU2xvdHNfaW5zdGFuY2VzLCBcIm1cIiwgX1JlZGlzQ2x1c3RlclNsb3RzX2Rpc2NvdmVyV2l0aFJvb3ROb2RlcykuY2FsbCh0aGlzKTtcbn0sIF9SZWRpc0NsdXN0ZXJTbG90c19kZXN0cm95ID0gYXN5bmMgZnVuY3Rpb24gX1JlZGlzQ2x1c3RlclNsb3RzX2Rlc3Ryb3koZm4pIHtcbiAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9SZWRpc0NsdXN0ZXJTbG90c19pc09wZW4sIGZhbHNlLCBcImZcIik7XG4gICAgY29uc3QgcHJvbWlzZXMgPSBbXTtcbiAgICBmb3IgKGNvbnN0IHsgbWFzdGVyLCByZXBsaWNhcyB9IG9mIHRoaXMuc2hhcmRzKSB7XG4gICAgICAgIGlmIChtYXN0ZXIuY2xpZW50KSB7XG4gICAgICAgICAgICBwcm9taXNlcy5wdXNoKF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzQ2x1c3RlclNsb3RzX2luc3RhbmNlcywgXCJtXCIsIF9SZWRpc0NsdXN0ZXJTbG90c19leGVjT25Ob2RlQ2xpZW50KS5jYWxsKHRoaXMsIG1hc3Rlci5jbGllbnQsIGZuKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hc3Rlci5wdWJTdWJDbGllbnQpIHtcbiAgICAgICAgICAgIHByb21pc2VzLnB1c2goX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUmVkaXNDbHVzdGVyU2xvdHNfaW5zdGFuY2VzLCBcIm1cIiwgX1JlZGlzQ2x1c3RlclNsb3RzX2V4ZWNPbk5vZGVDbGllbnQpLmNhbGwodGhpcywgbWFzdGVyLnB1YlN1YkNsaWVudCwgZm4pKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVwbGljYXMpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgeyBjbGllbnQgfSBvZiByZXBsaWNhcykge1xuICAgICAgICAgICAgICAgIGlmIChjbGllbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvbWlzZXMucHVzaChfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc0NsdXN0ZXJTbG90c19pbnN0YW5jZXMsIFwibVwiLCBfUmVkaXNDbHVzdGVyU2xvdHNfZXhlY09uTm9kZUNsaWVudCkuY2FsbCh0aGlzLCBjbGllbnQsIGZuKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLnB1YlN1Yk5vZGUpIHtcbiAgICAgICAgcHJvbWlzZXMucHVzaChfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc0NsdXN0ZXJTbG90c19pbnN0YW5jZXMsIFwibVwiLCBfUmVkaXNDbHVzdGVyU2xvdHNfZXhlY09uTm9kZUNsaWVudCkuY2FsbCh0aGlzLCB0aGlzLnB1YlN1Yk5vZGUuY2xpZW50LCBmbikpO1xuICAgICAgICB0aGlzLnB1YlN1Yk5vZGUgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzQ2x1c3RlclNsb3RzX2luc3RhbmNlcywgXCJtXCIsIF9SZWRpc0NsdXN0ZXJTbG90c19yZXNldFNsb3RzKS5jYWxsKHRoaXMpO1xuICAgIHRoaXMubm9kZUJ5QWRkcmVzcy5jbGVhcigpO1xuICAgIGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChwcm9taXNlcyk7XG59LCBfUmVkaXNDbHVzdGVyU2xvdHNfZXhlY09uTm9kZUNsaWVudCA9IGZ1bmN0aW9uIF9SZWRpc0NsdXN0ZXJTbG90c19leGVjT25Ob2RlQ2xpZW50KGNsaWVudCwgZm4pIHtcbiAgICByZXR1cm4gdXRpbF8xLnR5cGVzLmlzUHJvbWlzZShjbGllbnQpID9cbiAgICAgICAgY2xpZW50LnRoZW4oZm4pIDpcbiAgICAgICAgZm4oY2xpZW50KTtcbn0sIF9SZWRpc0NsdXN0ZXJTbG90c19pdGVyYXRlQWxsTm9kZXMgPSBmdW5jdGlvbiogX1JlZGlzQ2x1c3RlclNsb3RzX2l0ZXJhdGVBbGxOb2RlcygpIHtcbiAgICBsZXQgaSA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqICh0aGlzLm1hc3RlcnMubGVuZ3RoICsgdGhpcy5yZXBsaWNhcy5sZW5ndGgpKTtcbiAgICBpZiAoaSA8IHRoaXMubWFzdGVycy5sZW5ndGgpIHtcbiAgICAgICAgZG8ge1xuICAgICAgICAgICAgeWllbGQgdGhpcy5tYXN0ZXJzW2ldO1xuICAgICAgICB9IHdoaWxlICgrK2kgPCB0aGlzLm1hc3RlcnMubGVuZ3RoKTtcbiAgICAgICAgZm9yIChjb25zdCByZXBsaWNhIG9mIHRoaXMucmVwbGljYXMpIHtcbiAgICAgICAgICAgIHlpZWxkIHJlcGxpY2E7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGkgLT0gdGhpcy5tYXN0ZXJzLmxlbmd0aDtcbiAgICAgICAgZG8ge1xuICAgICAgICAgICAgeWllbGQgdGhpcy5yZXBsaWNhc1tpXTtcbiAgICAgICAgfSB3aGlsZSAoKytpIDwgdGhpcy5yZXBsaWNhcy5sZW5ndGgpO1xuICAgIH1cbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICBmb3IgKGNvbnN0IG1hc3RlciBvZiB0aGlzLm1hc3RlcnMpIHtcbiAgICAgICAgICAgIHlpZWxkIG1hc3RlcjtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IHJlcGxpY2Egb2YgdGhpcy5yZXBsaWNhcykge1xuICAgICAgICAgICAgeWllbGQgcmVwbGljYTtcbiAgICAgICAgfVxuICAgIH1cbn0sIF9SZWRpc0NsdXN0ZXJTbG90c19zbG90Tm9kZXNJdGVyYXRvciA9IGZ1bmN0aW9uKiBfUmVkaXNDbHVzdGVyU2xvdHNfc2xvdE5vZGVzSXRlcmF0b3Ioc2xvdCkge1xuICAgIGxldCBpID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKDEgKyBzbG90LnJlcGxpY2FzLmxlbmd0aCkpO1xuICAgIGlmIChpIDwgc2xvdC5yZXBsaWNhcy5sZW5ndGgpIHtcbiAgICAgICAgZG8ge1xuICAgICAgICAgICAgeWllbGQgc2xvdC5yZXBsaWNhc1tpXTtcbiAgICAgICAgfSB3aGlsZSAoKytpIDwgc2xvdC5yZXBsaWNhcy5sZW5ndGgpO1xuICAgIH1cbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICB5aWVsZCBzbG90Lm1hc3RlcjtcbiAgICAgICAgZm9yIChjb25zdCByZXBsaWNhIG9mIHNsb3QucmVwbGljYXMpIHtcbiAgICAgICAgICAgIHlpZWxkIHJlcGxpY2E7XG4gICAgICAgIH1cbiAgICB9XG59LCBfUmVkaXNDbHVzdGVyU2xvdHNfaW5pdGlhdGVQdWJTdWJDbGllbnQgPSBhc3luYyBmdW5jdGlvbiBfUmVkaXNDbHVzdGVyU2xvdHNfaW5pdGlhdGVQdWJTdWJDbGllbnQodG9SZXN1YnNjcmliZSkge1xuICAgIGNvbnN0IGluZGV4ID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKHRoaXMubWFzdGVycy5sZW5ndGggKyB0aGlzLnJlcGxpY2FzLmxlbmd0aCkpLCBub2RlID0gaW5kZXggPCB0aGlzLm1hc3RlcnMubGVuZ3RoID9cbiAgICAgICAgdGhpcy5tYXN0ZXJzW2luZGV4XSA6XG4gICAgICAgIHRoaXMucmVwbGljYXNbaW5kZXggLSB0aGlzLm1hc3RlcnMubGVuZ3RoXTtcbiAgICB0aGlzLnB1YlN1Yk5vZGUgPSB7XG4gICAgICAgIGFkZHJlc3M6IG5vZGUuYWRkcmVzcyxcbiAgICAgICAgY2xpZW50OiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc0NsdXN0ZXJTbG90c19pbnN0YW5jZXMsIFwibVwiLCBfUmVkaXNDbHVzdGVyU2xvdHNfY3JlYXRlQ2xpZW50KS5jYWxsKHRoaXMsIG5vZGUsIHRydWUpXG4gICAgICAgICAgICAudGhlbihhc3luYyAoY2xpZW50KSA9PiB7XG4gICAgICAgICAgICBpZiAodG9SZXN1YnNjcmliZSkge1xuICAgICAgICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgICAgICAgICAgICAgICAgY2xpZW50LmV4dGVuZFB1YlN1Ykxpc3RlbmVycyhwdWJfc3ViXzEuUHViU3ViVHlwZS5DSEFOTkVMUywgdG9SZXN1YnNjcmliZVtwdWJfc3ViXzEuUHViU3ViVHlwZS5DSEFOTkVMU10pLFxuICAgICAgICAgICAgICAgICAgICBjbGllbnQuZXh0ZW5kUHViU3ViTGlzdGVuZXJzKHB1Yl9zdWJfMS5QdWJTdWJUeXBlLlBBVFRFUk5TLCB0b1Jlc3Vic2NyaWJlW3B1Yl9zdWJfMS5QdWJTdWJUeXBlLlBBVFRFUk5TXSlcbiAgICAgICAgICAgICAgICBdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucHViU3ViTm9kZS5jbGllbnQgPSBjbGllbnQ7XG4gICAgICAgICAgICByZXR1cm4gY2xpZW50O1xuICAgICAgICB9KVxuICAgICAgICAgICAgLmNhdGNoKGVyciA9PiB7XG4gICAgICAgICAgICB0aGlzLnB1YlN1Yk5vZGUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH0pXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5wdWJTdWJOb2RlLmNsaWVudDtcbn0sIF9SZWRpc0NsdXN0ZXJTbG90c19pbml0aWF0ZVNoYXJkZWRQdWJTdWJDbGllbnQgPSBmdW5jdGlvbiBfUmVkaXNDbHVzdGVyU2xvdHNfaW5pdGlhdGVTaGFyZGVkUHViU3ViQ2xpZW50KG1hc3Rlcikge1xuICAgIGNvbnN0IHByb21pc2UgPSBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc0NsdXN0ZXJTbG90c19pbnN0YW5jZXMsIFwibVwiLCBfUmVkaXNDbHVzdGVyU2xvdHNfY3JlYXRlQ2xpZW50KS5jYWxsKHRoaXMsIG1hc3RlciwgdHJ1ZSlcbiAgICAgICAgLnRoZW4oY2xpZW50ID0+IHtcbiAgICAgICAgY2xpZW50Lm9uKCdzZXJ2ZXItc3Vuc3Vic2NyaWJlJywgYXN5bmMgKGNoYW5uZWwsIGxpc3RlbmVycykgPT4ge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnJlZGlzY292ZXIoY2xpZW50KTtcbiAgICAgICAgICAgICAgICBjb25zdCByZWRpcmVjdFRvID0gYXdhaXQgdGhpcy5nZXRTaGFyZGVkUHViU3ViQ2xpZW50KGNoYW5uZWwpO1xuICAgICAgICAgICAgICAgIHJlZGlyZWN0VG8uZXh0ZW5kUHViU3ViQ2hhbm5lbExpc3RlbmVycyhwdWJfc3ViXzEuUHViU3ViVHlwZS5TSEFSREVELCBjaGFubmVsLCBsaXN0ZW5lcnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzQ2x1c3RlclNsb3RzX2VtaXQsIFwiZlwiKS5jYWxsKHRoaXMsICdzaGFyZGVkLXNoYW5uZWwtbW92ZWQtZXJyb3InLCBlcnIsIGNoYW5uZWwsIGxpc3RlbmVycyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBtYXN0ZXIucHViU3ViQ2xpZW50ID0gY2xpZW50O1xuICAgICAgICByZXR1cm4gY2xpZW50O1xuICAgIH0pXG4gICAgICAgIC5jYXRjaChlcnIgPT4ge1xuICAgICAgICBtYXN0ZXIucHViU3ViQ2xpZW50ID0gdW5kZWZpbmVkO1xuICAgICAgICB0aHJvdyBlcnI7XG4gICAgfSk7XG4gICAgbWFzdGVyLnB1YlN1YkNsaWVudCA9IHByb21pc2U7XG4gICAgcmV0dXJuIHByb21pc2U7XG59O1xuX1JlZGlzQ2x1c3RlclNsb3RzX1NMT1RTID0geyB2YWx1ZTogMTYzODQgfTtcbmV4cG9ydHMuZGVmYXVsdCA9IFJlZGlzQ2x1c3RlclNsb3RzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0ID0gKHRoaXMgJiYgdGhpcy5fX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KSB8fCBmdW5jdGlvbiAocmVjZWl2ZXIsIHN0YXRlLCB2YWx1ZSwga2luZCwgZikge1xuICAgIGlmIChraW5kID09PSBcIm1cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgbWV0aG9kIGlzIG5vdCB3cml0YWJsZVwiKTtcbiAgICBpZiAoa2luZCA9PT0gXCJhXCIgJiYgIWYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBzZXR0ZXJcIik7XG4gICAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3Qgd3JpdGUgcHJpdmF0ZSBtZW1iZXIgdG8gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtcbiAgICByZXR1cm4gKGtpbmQgPT09IFwiYVwiID8gZi5jYWxsKHJlY2VpdmVyLCB2YWx1ZSkgOiBmID8gZi52YWx1ZSA9IHZhbHVlIDogc3RhdGUuc2V0KHJlY2VpdmVyLCB2YWx1ZSkpLCB2YWx1ZTtcbn07XG52YXIgX19jbGFzc1ByaXZhdGVGaWVsZEdldCA9ICh0aGlzICYmIHRoaXMuX19jbGFzc1ByaXZhdGVGaWVsZEdldCkgfHwgZnVuY3Rpb24gKHJlY2VpdmVyLCBzdGF0ZSwga2luZCwgZikge1xuICAgIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIGdldHRlclwiKTtcbiAgICBpZiAodHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciAhPT0gc3RhdGUgfHwgIWYgOiAhc3RhdGUuaGFzKHJlY2VpdmVyKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCByZWFkIHByaXZhdGUgbWVtYmVyIGZyb20gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtcbiAgICByZXR1cm4ga2luZCA9PT0gXCJtXCIgPyBmIDoga2luZCA9PT0gXCJhXCIgPyBmLmNhbGwocmVjZWl2ZXIpIDogZiA/IGYudmFsdWUgOiBzdGF0ZS5nZXQocmVjZWl2ZXIpO1xufTtcbnZhciBfUmVkaXNDbHVzdGVyTXVsdGlDb21tYW5kX211bHRpLCBfUmVkaXNDbHVzdGVyTXVsdGlDb21tYW5kX2V4ZWN1dG9yLCBfUmVkaXNDbHVzdGVyTXVsdGlDb21tYW5kX2ZpcnN0S2V5O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgY29tbWFuZHNfMSA9IHJlcXVpcmUoXCIuL2NvbW1hbmRzXCIpO1xuY29uc3QgbXVsdGlfY29tbWFuZF8xID0gcmVxdWlyZShcIi4uL211bHRpLWNvbW1hbmRcIik7XG5jb25zdCBjb21tYW5kZXJfMSA9IHJlcXVpcmUoXCIuLi9jb21tYW5kZXJcIik7XG5jb25zdCBfMSA9IHJlcXVpcmUoXCIuXCIpO1xuY2xhc3MgUmVkaXNDbHVzdGVyTXVsdGlDb21tYW5kIHtcbiAgICBzdGF0aWMgZXh0ZW5kKGV4dGVuc2lvbnMpIHtcbiAgICAgICAgcmV0dXJuICgwLCBjb21tYW5kZXJfMS5hdHRhY2hFeHRlbnNpb25zKSh7XG4gICAgICAgICAgICBCYXNlQ2xhc3M6IFJlZGlzQ2x1c3Rlck11bHRpQ29tbWFuZCxcbiAgICAgICAgICAgIG1vZHVsZXNFeGVjdXRvcjogUmVkaXNDbHVzdGVyTXVsdGlDb21tYW5kLnByb3RvdHlwZS5jb21tYW5kc0V4ZWN1dG9yLFxuICAgICAgICAgICAgbW9kdWxlczogZXh0ZW5zaW9ucz8ubW9kdWxlcyxcbiAgICAgICAgICAgIGZ1bmN0aW9uc0V4ZWN1dG9yOiBSZWRpc0NsdXN0ZXJNdWx0aUNvbW1hbmQucHJvdG90eXBlLmZ1bmN0aW9uc0V4ZWN1dG9yLFxuICAgICAgICAgICAgZnVuY3Rpb25zOiBleHRlbnNpb25zPy5mdW5jdGlvbnMsXG4gICAgICAgICAgICBzY3JpcHRzRXhlY3V0b3I6IFJlZGlzQ2x1c3Rlck11bHRpQ29tbWFuZC5wcm90b3R5cGUuc2NyaXB0c0V4ZWN1dG9yLFxuICAgICAgICAgICAgc2NyaXB0czogZXh0ZW5zaW9ucz8uc2NyaXB0c1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgY29uc3RydWN0b3IoZXhlY3V0b3IsIGZpcnN0S2V5KSB7XG4gICAgICAgIF9SZWRpc0NsdXN0ZXJNdWx0aUNvbW1hbmRfbXVsdGkuc2V0KHRoaXMsIG5ldyBtdWx0aV9jb21tYW5kXzEuZGVmYXVsdCgpKTtcbiAgICAgICAgX1JlZGlzQ2x1c3Rlck11bHRpQ29tbWFuZF9leGVjdXRvci5zZXQodGhpcywgdm9pZCAwKTtcbiAgICAgICAgX1JlZGlzQ2x1c3Rlck11bHRpQ29tbWFuZF9maXJzdEtleS5zZXQodGhpcywgdm9pZCAwKTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIFwiRVhFQ1wiLCB7XG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogdGhpcy5leGVjXG4gICAgICAgIH0pO1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9SZWRpc0NsdXN0ZXJNdWx0aUNvbW1hbmRfZXhlY3V0b3IsIGV4ZWN1dG9yLCBcImZcIik7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX1JlZGlzQ2x1c3Rlck11bHRpQ29tbWFuZF9maXJzdEtleSwgZmlyc3RLZXksIFwiZlwiKTtcbiAgICB9XG4gICAgY29tbWFuZHNFeGVjdXRvcihjb21tYW5kLCBhcmdzKSB7XG4gICAgICAgIGNvbnN0IHRyYW5zZm9ybWVkQXJndW1lbnRzID0gY29tbWFuZC50cmFuc2Zvcm1Bcmd1bWVudHMoLi4uYXJncyk7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX1JlZGlzQ2x1c3Rlck11bHRpQ29tbWFuZF9maXJzdEtleSwgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUmVkaXNDbHVzdGVyTXVsdGlDb21tYW5kX2ZpcnN0S2V5LCBcImZcIikgPz8gXzEuZGVmYXVsdC5leHRyYWN0Rmlyc3RLZXkoY29tbWFuZCwgYXJncywgdHJhbnNmb3JtZWRBcmd1bWVudHMpLCBcImZcIik7XG4gICAgICAgIHJldHVybiB0aGlzLmFkZENvbW1hbmQodW5kZWZpbmVkLCB0cmFuc2Zvcm1lZEFyZ3VtZW50cywgY29tbWFuZC50cmFuc2Zvcm1SZXBseSk7XG4gICAgfVxuICAgIGFkZENvbW1hbmQoZmlyc3RLZXksIGFyZ3MsIHRyYW5zZm9ybVJlcGx5KSB7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX1JlZGlzQ2x1c3Rlck11bHRpQ29tbWFuZF9maXJzdEtleSwgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUmVkaXNDbHVzdGVyTXVsdGlDb21tYW5kX2ZpcnN0S2V5LCBcImZcIikgPz8gZmlyc3RLZXksIFwiZlwiKTtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUmVkaXNDbHVzdGVyTXVsdGlDb21tYW5kX211bHRpLCBcImZcIikuYWRkQ29tbWFuZChhcmdzLCB0cmFuc2Zvcm1SZXBseSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBmdW5jdGlvbnNFeGVjdXRvcihmbiwgYXJncywgbmFtZSkge1xuICAgICAgICBjb25zdCB0cmFuc2Zvcm1lZEFyZ3VtZW50cyA9IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzQ2x1c3Rlck11bHRpQ29tbWFuZF9tdWx0aSwgXCJmXCIpLmFkZEZ1bmN0aW9uKG5hbWUsIGZuLCBhcmdzKTtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfUmVkaXNDbHVzdGVyTXVsdGlDb21tYW5kX2ZpcnN0S2V5LCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc0NsdXN0ZXJNdWx0aUNvbW1hbmRfZmlyc3RLZXksIFwiZlwiKSA/PyBfMS5kZWZhdWx0LmV4dHJhY3RGaXJzdEtleShmbiwgYXJncywgdHJhbnNmb3JtZWRBcmd1bWVudHMpLCBcImZcIik7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBzY3JpcHRzRXhlY3V0b3Ioc2NyaXB0LCBhcmdzKSB7XG4gICAgICAgIGNvbnN0IHRyYW5zZm9ybWVkQXJndW1lbnRzID0gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUmVkaXNDbHVzdGVyTXVsdGlDb21tYW5kX211bHRpLCBcImZcIikuYWRkU2NyaXB0KHNjcmlwdCwgYXJncyk7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX1JlZGlzQ2x1c3Rlck11bHRpQ29tbWFuZF9maXJzdEtleSwgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUmVkaXNDbHVzdGVyTXVsdGlDb21tYW5kX2ZpcnN0S2V5LCBcImZcIikgPz8gXzEuZGVmYXVsdC5leHRyYWN0Rmlyc3RLZXkoc2NyaXB0LCBhcmdzLCB0cmFuc2Zvcm1lZEFyZ3VtZW50cyksIFwiZlwiKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGFzeW5jIGV4ZWMoZXhlY0FzUGlwZWxpbmUgPSBmYWxzZSkge1xuICAgICAgICBpZiAoZXhlY0FzUGlwZWxpbmUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmV4ZWNBc1BpcGVsaW5lKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzQ2x1c3Rlck11bHRpQ29tbWFuZF9tdWx0aSwgXCJmXCIpLmhhbmRsZUV4ZWNSZXBsaWVzKGF3YWl0IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzQ2x1c3Rlck11bHRpQ29tbWFuZF9leGVjdXRvciwgXCJmXCIpLmNhbGwodGhpcywgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUmVkaXNDbHVzdGVyTXVsdGlDb21tYW5kX211bHRpLCBcImZcIikucXVldWUsIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzQ2x1c3Rlck11bHRpQ29tbWFuZF9maXJzdEtleSwgXCJmXCIpLCBtdWx0aV9jb21tYW5kXzEuZGVmYXVsdC5nZW5lcmF0ZUNoYWluSWQoKSkpO1xuICAgIH1cbiAgICBhc3luYyBleGVjQXNQaXBlbGluZSgpIHtcbiAgICAgICAgcmV0dXJuIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzQ2x1c3Rlck11bHRpQ29tbWFuZF9tdWx0aSwgXCJmXCIpLnRyYW5zZm9ybVJlcGxpZXMoYXdhaXQgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUmVkaXNDbHVzdGVyTXVsdGlDb21tYW5kX2V4ZWN1dG9yLCBcImZcIikuY2FsbCh0aGlzLCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc0NsdXN0ZXJNdWx0aUNvbW1hbmRfbXVsdGksIFwiZlwiKS5xdWV1ZSwgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUmVkaXNDbHVzdGVyTXVsdGlDb21tYW5kX2ZpcnN0S2V5LCBcImZcIikpKTtcbiAgICB9XG59XG5fUmVkaXNDbHVzdGVyTXVsdGlDb21tYW5kX211bHRpID0gbmV3IFdlYWtNYXAoKSwgX1JlZGlzQ2x1c3Rlck11bHRpQ29tbWFuZF9leGVjdXRvciA9IG5ldyBXZWFrTWFwKCksIF9SZWRpc0NsdXN0ZXJNdWx0aUNvbW1hbmRfZmlyc3RLZXkgPSBuZXcgV2Vha01hcCgpO1xuZXhwb3J0cy5kZWZhdWx0ID0gUmVkaXNDbHVzdGVyTXVsdGlDb21tYW5kO1xuKDAsIGNvbW1hbmRlcl8xLmF0dGFjaENvbW1hbmRzKSh7XG4gICAgQmFzZUNsYXNzOiBSZWRpc0NsdXN0ZXJNdWx0aUNvbW1hbmQsXG4gICAgY29tbWFuZHM6IGNvbW1hbmRzXzEuZGVmYXVsdCxcbiAgICBleGVjdXRvcjogUmVkaXNDbHVzdGVyTXVsdGlDb21tYW5kLnByb3RvdHlwZS5jb21tYW5kc0V4ZWN1dG9yXG59KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19jbGFzc1ByaXZhdGVGaWVsZEdldCA9ICh0aGlzICYmIHRoaXMuX19jbGFzc1ByaXZhdGVGaWVsZEdldCkgfHwgZnVuY3Rpb24gKHJlY2VpdmVyLCBzdGF0ZSwga2luZCwgZikge1xuICAgIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIGdldHRlclwiKTtcbiAgICBpZiAodHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciAhPT0gc3RhdGUgfHwgIWYgOiAhc3RhdGUuaGFzKHJlY2VpdmVyKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCByZWFkIHByaXZhdGUgbWVtYmVyIGZyb20gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtcbiAgICByZXR1cm4ga2luZCA9PT0gXCJtXCIgPyBmIDoga2luZCA9PT0gXCJhXCIgPyBmLmNhbGwocmVjZWl2ZXIpIDogZiA/IGYudmFsdWUgOiBzdGF0ZS5nZXQocmVjZWl2ZXIpO1xufTtcbnZhciBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0ID0gKHRoaXMgJiYgdGhpcy5fX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KSB8fCBmdW5jdGlvbiAocmVjZWl2ZXIsIHN0YXRlLCB2YWx1ZSwga2luZCwgZikge1xuICAgIGlmIChraW5kID09PSBcIm1cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgbWV0aG9kIGlzIG5vdCB3cml0YWJsZVwiKTtcbiAgICBpZiAoa2luZCA9PT0gXCJhXCIgJiYgIWYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBzZXR0ZXJcIik7XG4gICAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3Qgd3JpdGUgcHJpdmF0ZSBtZW1iZXIgdG8gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtcbiAgICByZXR1cm4gKGtpbmQgPT09IFwiYVwiID8gZi5jYWxsKHJlY2VpdmVyLCB2YWx1ZSkgOiBmID8gZi52YWx1ZSA9IHZhbHVlIDogc3RhdGUuc2V0KHJlY2VpdmVyLCB2YWx1ZSkpLCB2YWx1ZTtcbn07XG52YXIgX1JlZGlzQ2x1c3Rlcl9pbnN0YW5jZXMsIF9SZWRpc0NsdXN0ZXJfb3B0aW9ucywgX1JlZGlzQ2x1c3Rlcl9zbG90cywgX1JlZGlzQ2x1c3Rlcl9NdWx0aSwgX1JlZGlzQ2x1c3Rlcl9leGVjdXRlO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgY29tbWFuZHNfMSA9IHJlcXVpcmUoXCIuL2NvbW1hbmRzXCIpO1xuY29uc3QgY2x1c3Rlcl9zbG90c18xID0gcmVxdWlyZShcIi4vY2x1c3Rlci1zbG90c1wiKTtcbmNvbnN0IGNvbW1hbmRlcl8xID0gcmVxdWlyZShcIi4uL2NvbW1hbmRlclwiKTtcbmNvbnN0IGV2ZW50c18xID0gcmVxdWlyZShcImV2ZW50c1wiKTtcbmNvbnN0IG11bHRpX2NvbW1hbmRfMSA9IHJlcXVpcmUoXCIuL211bHRpLWNvbW1hbmRcIik7XG5jb25zdCBlcnJvcnNfMSA9IHJlcXVpcmUoXCIuLi9lcnJvcnNcIik7XG5jbGFzcyBSZWRpc0NsdXN0ZXIgZXh0ZW5kcyBldmVudHNfMS5FdmVudEVtaXR0ZXIge1xuICAgIHN0YXRpYyBleHRyYWN0Rmlyc3RLZXkoY29tbWFuZCwgb3JpZ2luYWxBcmdzLCByZWRpc0FyZ3MpIHtcbiAgICAgICAgaWYgKGNvbW1hbmQuRklSU1RfS0VZX0lOREVYID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIGNvbW1hbmQuRklSU1RfS0VZX0lOREVYID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgcmV0dXJuIHJlZGlzQXJnc1tjb21tYW5kLkZJUlNUX0tFWV9JTkRFWF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbW1hbmQuRklSU1RfS0VZX0lOREVYKC4uLm9yaWdpbmFsQXJncyk7XG4gICAgfVxuICAgIHN0YXRpYyBjcmVhdGUob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gbmV3ICgoMCwgY29tbWFuZGVyXzEuYXR0YWNoRXh0ZW5zaW9ucykoe1xuICAgICAgICAgICAgQmFzZUNsYXNzOiBSZWRpc0NsdXN0ZXIsXG4gICAgICAgICAgICBtb2R1bGVzRXhlY3V0b3I6IFJlZGlzQ2x1c3Rlci5wcm90b3R5cGUuY29tbWFuZHNFeGVjdXRvcixcbiAgICAgICAgICAgIG1vZHVsZXM6IG9wdGlvbnM/Lm1vZHVsZXMsXG4gICAgICAgICAgICBmdW5jdGlvbnNFeGVjdXRvcjogUmVkaXNDbHVzdGVyLnByb3RvdHlwZS5mdW5jdGlvbnNFeGVjdXRvcixcbiAgICAgICAgICAgIGZ1bmN0aW9uczogb3B0aW9ucz8uZnVuY3Rpb25zLFxuICAgICAgICAgICAgc2NyaXB0c0V4ZWN1dG9yOiBSZWRpc0NsdXN0ZXIucHJvdG90eXBlLnNjcmlwdHNFeGVjdXRvcixcbiAgICAgICAgICAgIHNjcmlwdHM6IG9wdGlvbnM/LnNjcmlwdHNcbiAgICAgICAgfSkpKG9wdGlvbnMpO1xuICAgIH1cbiAgICBnZXQgc2xvdHMoKSB7XG4gICAgICAgIHJldHVybiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc0NsdXN0ZXJfc2xvdHMsIFwiZlwiKS5zbG90cztcbiAgICB9XG4gICAgZ2V0IHNoYXJkcygpIHtcbiAgICAgICAgcmV0dXJuIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzQ2x1c3Rlcl9zbG90cywgXCJmXCIpLnNoYXJkcztcbiAgICB9XG4gICAgZ2V0IG1hc3RlcnMoKSB7XG4gICAgICAgIHJldHVybiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc0NsdXN0ZXJfc2xvdHMsIFwiZlwiKS5tYXN0ZXJzO1xuICAgIH1cbiAgICBnZXQgcmVwbGljYXMoKSB7XG4gICAgICAgIHJldHVybiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc0NsdXN0ZXJfc2xvdHMsIFwiZlwiKS5yZXBsaWNhcztcbiAgICB9XG4gICAgZ2V0IG5vZGVCeUFkZHJlc3MoKSB7XG4gICAgICAgIHJldHVybiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc0NsdXN0ZXJfc2xvdHMsIFwiZlwiKS5ub2RlQnlBZGRyZXNzO1xuICAgIH1cbiAgICBnZXQgcHViU3ViTm9kZSgpIHtcbiAgICAgICAgcmV0dXJuIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzQ2x1c3Rlcl9zbG90cywgXCJmXCIpLnB1YlN1Yk5vZGU7XG4gICAgfVxuICAgIGdldCBpc09wZW4oKSB7XG4gICAgICAgIHJldHVybiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc0NsdXN0ZXJfc2xvdHMsIFwiZlwiKS5pc09wZW47XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgX1JlZGlzQ2x1c3Rlcl9pbnN0YW5jZXMuYWRkKHRoaXMpO1xuICAgICAgICBfUmVkaXNDbHVzdGVyX29wdGlvbnMuc2V0KHRoaXMsIHZvaWQgMCk7XG4gICAgICAgIF9SZWRpc0NsdXN0ZXJfc2xvdHMuc2V0KHRoaXMsIHZvaWQgMCk7XG4gICAgICAgIF9SZWRpc0NsdXN0ZXJfTXVsdGkuc2V0KHRoaXMsIHZvaWQgMCk7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcIm11bHRpXCIsIHtcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLk1VTFRJXG4gICAgICAgIH0pO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgXCJzdWJzY3JpYmVcIiwge1xuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IHRoaXMuU1VCU0NSSUJFXG4gICAgICAgIH0pO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgXCJ1bnN1YnNjcmliZVwiLCB7XG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogdGhpcy5VTlNVQlNDUklCRVxuICAgICAgICB9KTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIFwicFN1YnNjcmliZVwiLCB7XG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogdGhpcy5QU1VCU0NSSUJFXG4gICAgICAgIH0pO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgXCJwVW5zdWJzY3JpYmVcIiwge1xuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IHRoaXMuUFVOU1VCU0NSSUJFXG4gICAgICAgIH0pO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgXCJzU3Vic2NyaWJlXCIsIHtcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLlNTVUJTQ1JJQkVcbiAgICAgICAgfSk7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcInNVbnN1YnNjcmliZVwiLCB7XG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogdGhpcy5TVU5TVUJTQ1JJQkVcbiAgICAgICAgfSk7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX1JlZGlzQ2x1c3Rlcl9vcHRpb25zLCBvcHRpb25zLCBcImZcIik7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX1JlZGlzQ2x1c3Rlcl9zbG90cywgbmV3IGNsdXN0ZXJfc2xvdHNfMS5kZWZhdWx0KG9wdGlvbnMsIHRoaXMuZW1pdC5iaW5kKHRoaXMpKSwgXCJmXCIpO1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9SZWRpc0NsdXN0ZXJfTXVsdGksIG11bHRpX2NvbW1hbmRfMS5kZWZhdWx0LmV4dGVuZChvcHRpb25zKSwgXCJmXCIpO1xuICAgIH1cbiAgICBkdXBsaWNhdGUob3ZlcnJpZGVzKSB7XG4gICAgICAgIHJldHVybiBuZXcgKE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3Rvcikoe1xuICAgICAgICAgICAgLi4uX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUmVkaXNDbHVzdGVyX29wdGlvbnMsIFwiZlwiKSxcbiAgICAgICAgICAgIC4uLm92ZXJyaWRlc1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgY29ubmVjdCgpIHtcbiAgICAgICAgcmV0dXJuIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzQ2x1c3Rlcl9zbG90cywgXCJmXCIpLmNvbm5lY3QoKTtcbiAgICB9XG4gICAgYXN5bmMgY29tbWFuZHNFeGVjdXRvcihjb21tYW5kLCBhcmdzKSB7XG4gICAgICAgIGNvbnN0IHsganNBcmdzLCBhcmdzOiByZWRpc0FyZ3MsIG9wdGlvbnMgfSA9ICgwLCBjb21tYW5kZXJfMS50cmFuc2Zvcm1Db21tYW5kQXJndW1lbnRzKShjb21tYW5kLCBhcmdzKTtcbiAgICAgICAgcmV0dXJuICgwLCBjb21tYW5kZXJfMS50cmFuc2Zvcm1Db21tYW5kUmVwbHkpKGNvbW1hbmQsIGF3YWl0IHRoaXMuc2VuZENvbW1hbmQoUmVkaXNDbHVzdGVyLmV4dHJhY3RGaXJzdEtleShjb21tYW5kLCBqc0FyZ3MsIHJlZGlzQXJncyksIGNvbW1hbmQuSVNfUkVBRF9PTkxZLCByZWRpc0FyZ3MsIG9wdGlvbnMpLCByZWRpc0FyZ3MucHJlc2VydmUpO1xuICAgIH1cbiAgICBhc3luYyBzZW5kQ29tbWFuZChmaXJzdEtleSwgaXNSZWFkb25seSwgYXJncywgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUmVkaXNDbHVzdGVyX2luc3RhbmNlcywgXCJtXCIsIF9SZWRpc0NsdXN0ZXJfZXhlY3V0ZSkuY2FsbCh0aGlzLCBmaXJzdEtleSwgaXNSZWFkb25seSwgY2xpZW50ID0+IGNsaWVudC5zZW5kQ29tbWFuZChhcmdzLCBvcHRpb25zKSk7XG4gICAgfVxuICAgIGFzeW5jIGZ1bmN0aW9uc0V4ZWN1dG9yKGZuLCBhcmdzLCBuYW1lKSB7XG4gICAgICAgIGNvbnN0IHsgYXJnczogcmVkaXNBcmdzLCBvcHRpb25zIH0gPSAoMCwgY29tbWFuZGVyXzEudHJhbnNmb3JtQ29tbWFuZEFyZ3VtZW50cykoZm4sIGFyZ3MpO1xuICAgICAgICByZXR1cm4gKDAsIGNvbW1hbmRlcl8xLnRyYW5zZm9ybUNvbW1hbmRSZXBseSkoZm4sIGF3YWl0IHRoaXMuZXhlY3V0ZUZ1bmN0aW9uKG5hbWUsIGZuLCBhcmdzLCByZWRpc0FyZ3MsIG9wdGlvbnMpLCByZWRpc0FyZ3MucHJlc2VydmUpO1xuICAgIH1cbiAgICBhc3luYyBleGVjdXRlRnVuY3Rpb24obmFtZSwgZm4sIG9yaWdpbmFsQXJncywgcmVkaXNBcmdzLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc0NsdXN0ZXJfaW5zdGFuY2VzLCBcIm1cIiwgX1JlZGlzQ2x1c3Rlcl9leGVjdXRlKS5jYWxsKHRoaXMsIFJlZGlzQ2x1c3Rlci5leHRyYWN0Rmlyc3RLZXkoZm4sIG9yaWdpbmFsQXJncywgcmVkaXNBcmdzKSwgZm4uSVNfUkVBRF9PTkxZLCBjbGllbnQgPT4gY2xpZW50LmV4ZWN1dGVGdW5jdGlvbihuYW1lLCBmbiwgcmVkaXNBcmdzLCBvcHRpb25zKSk7XG4gICAgfVxuICAgIGFzeW5jIHNjcmlwdHNFeGVjdXRvcihzY3JpcHQsIGFyZ3MpIHtcbiAgICAgICAgY29uc3QgeyBhcmdzOiByZWRpc0FyZ3MsIG9wdGlvbnMgfSA9ICgwLCBjb21tYW5kZXJfMS50cmFuc2Zvcm1Db21tYW5kQXJndW1lbnRzKShzY3JpcHQsIGFyZ3MpO1xuICAgICAgICByZXR1cm4gKDAsIGNvbW1hbmRlcl8xLnRyYW5zZm9ybUNvbW1hbmRSZXBseSkoc2NyaXB0LCBhd2FpdCB0aGlzLmV4ZWN1dGVTY3JpcHQoc2NyaXB0LCBhcmdzLCByZWRpc0FyZ3MsIG9wdGlvbnMpLCByZWRpc0FyZ3MucHJlc2VydmUpO1xuICAgIH1cbiAgICBhc3luYyBleGVjdXRlU2NyaXB0KHNjcmlwdCwgb3JpZ2luYWxBcmdzLCByZWRpc0FyZ3MsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzQ2x1c3Rlcl9pbnN0YW5jZXMsIFwibVwiLCBfUmVkaXNDbHVzdGVyX2V4ZWN1dGUpLmNhbGwodGhpcywgUmVkaXNDbHVzdGVyLmV4dHJhY3RGaXJzdEtleShzY3JpcHQsIG9yaWdpbmFsQXJncywgcmVkaXNBcmdzKSwgc2NyaXB0LklTX1JFQURfT05MWSwgY2xpZW50ID0+IGNsaWVudC5leGVjdXRlU2NyaXB0KHNjcmlwdCwgcmVkaXNBcmdzLCBvcHRpb25zKSk7XG4gICAgfVxuICAgIE1VTFRJKHJvdXRpbmcpIHtcbiAgICAgICAgcmV0dXJuIG5ldyAoX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUmVkaXNDbHVzdGVyX011bHRpLCBcImZcIikpKChjb21tYW5kcywgZmlyc3RLZXksIGNoYWluSWQpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc0NsdXN0ZXJfaW5zdGFuY2VzLCBcIm1cIiwgX1JlZGlzQ2x1c3Rlcl9leGVjdXRlKS5jYWxsKHRoaXMsIGZpcnN0S2V5LCBmYWxzZSwgY2xpZW50ID0+IGNsaWVudC5tdWx0aUV4ZWN1dG9yKGNvbW1hbmRzLCB1bmRlZmluZWQsIGNoYWluSWQpKTtcbiAgICAgICAgfSwgcm91dGluZyk7XG4gICAgfVxuICAgIGFzeW5jIFNVQlNDUklCRShjaGFubmVscywgbGlzdGVuZXIsIGJ1ZmZlck1vZGUpIHtcbiAgICAgICAgcmV0dXJuIChhd2FpdCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc0NsdXN0ZXJfc2xvdHMsIFwiZlwiKS5nZXRQdWJTdWJDbGllbnQoKSlcbiAgICAgICAgICAgIC5TVUJTQ1JJQkUoY2hhbm5lbHMsIGxpc3RlbmVyLCBidWZmZXJNb2RlKTtcbiAgICB9XG4gICAgYXN5bmMgVU5TVUJTQ1JJQkUoY2hhbm5lbHMsIGxpc3RlbmVyLCBidWZmZXJNb2RlKSB7XG4gICAgICAgIHJldHVybiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc0NsdXN0ZXJfc2xvdHMsIFwiZlwiKS5leGVjdXRlVW5zdWJzY3JpYmVDb21tYW5kKGNsaWVudCA9PiBjbGllbnQuVU5TVUJTQ1JJQkUoY2hhbm5lbHMsIGxpc3RlbmVyLCBidWZmZXJNb2RlKSk7XG4gICAgfVxuICAgIGFzeW5jIFBTVUJTQ1JJQkUocGF0dGVybnMsIGxpc3RlbmVyLCBidWZmZXJNb2RlKSB7XG4gICAgICAgIHJldHVybiAoYXdhaXQgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUmVkaXNDbHVzdGVyX3Nsb3RzLCBcImZcIikuZ2V0UHViU3ViQ2xpZW50KCkpXG4gICAgICAgICAgICAuUFNVQlNDUklCRShwYXR0ZXJucywgbGlzdGVuZXIsIGJ1ZmZlck1vZGUpO1xuICAgIH1cbiAgICBhc3luYyBQVU5TVUJTQ1JJQkUocGF0dGVybnMsIGxpc3RlbmVyLCBidWZmZXJNb2RlKSB7XG4gICAgICAgIHJldHVybiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc0NsdXN0ZXJfc2xvdHMsIFwiZlwiKS5leGVjdXRlVW5zdWJzY3JpYmVDb21tYW5kKGNsaWVudCA9PiBjbGllbnQuUFVOU1VCU0NSSUJFKHBhdHRlcm5zLCBsaXN0ZW5lciwgYnVmZmVyTW9kZSkpO1xuICAgIH1cbiAgICBhc3luYyBTU1VCU0NSSUJFKGNoYW5uZWxzLCBsaXN0ZW5lciwgYnVmZmVyTW9kZSkge1xuICAgICAgICBjb25zdCBtYXhDb21tYW5kUmVkaXJlY3Rpb25zID0gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUmVkaXNDbHVzdGVyX29wdGlvbnMsIFwiZlwiKS5tYXhDb21tYW5kUmVkaXJlY3Rpb25zID8/IDE2LCBmaXJzdENoYW5uZWwgPSBBcnJheS5pc0FycmF5KGNoYW5uZWxzKSA/IGNoYW5uZWxzWzBdIDogY2hhbm5lbHM7XG4gICAgICAgIGxldCBjbGllbnQgPSBhd2FpdCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc0NsdXN0ZXJfc2xvdHMsIFwiZlwiKS5nZXRTaGFyZGVkUHViU3ViQ2xpZW50KGZpcnN0Q2hhbm5lbCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOzsgaSsrKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCBjbGllbnQuU1NVQlNDUklCRShjaGFubmVscywgbGlzdGVuZXIsIGJ1ZmZlck1vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgIGlmICgrK2kgPiBtYXhDb21tYW5kUmVkaXJlY3Rpb25zIHx8ICEoZXJyIGluc3RhbmNlb2YgZXJyb3JzXzEuRXJyb3JSZXBseSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZXJyLm1lc3NhZ2Uuc3RhcnRzV2l0aCgnTU9WRUQnKSkge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc0NsdXN0ZXJfc2xvdHMsIFwiZlwiKS5yZWRpc2NvdmVyKGNsaWVudCk7XG4gICAgICAgICAgICAgICAgICAgIGNsaWVudCA9IGF3YWl0IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzQ2x1c3Rlcl9zbG90cywgXCJmXCIpLmdldFNoYXJkZWRQdWJTdWJDbGllbnQoZmlyc3RDaGFubmVsKTtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBTVU5TVUJTQ1JJQkUoY2hhbm5lbHMsIGxpc3RlbmVyLCBidWZmZXJNb2RlKSB7XG4gICAgICAgIHJldHVybiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc0NsdXN0ZXJfc2xvdHMsIFwiZlwiKS5leGVjdXRlU2hhcmRlZFVuc3Vic2NyaWJlQ29tbWFuZChBcnJheS5pc0FycmF5KGNoYW5uZWxzKSA/IGNoYW5uZWxzWzBdIDogY2hhbm5lbHMsIGNsaWVudCA9PiBjbGllbnQuU1VOU1VCU0NSSUJFKGNoYW5uZWxzLCBsaXN0ZW5lciwgYnVmZmVyTW9kZSkpO1xuICAgIH1cbiAgICBxdWl0KCkge1xuICAgICAgICByZXR1cm4gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUmVkaXNDbHVzdGVyX3Nsb3RzLCBcImZcIikucXVpdCgpO1xuICAgIH1cbiAgICBkaXNjb25uZWN0KCkge1xuICAgICAgICByZXR1cm4gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUmVkaXNDbHVzdGVyX3Nsb3RzLCBcImZcIikuZGlzY29ubmVjdCgpO1xuICAgIH1cbiAgICBub2RlQ2xpZW50KG5vZGUpIHtcbiAgICAgICAgcmV0dXJuIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzQ2x1c3Rlcl9zbG90cywgXCJmXCIpLm5vZGVDbGllbnQobm9kZSk7XG4gICAgfVxuICAgIGdldFJhbmRvbU5vZGUoKSB7XG4gICAgICAgIHJldHVybiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc0NsdXN0ZXJfc2xvdHMsIFwiZlwiKS5nZXRSYW5kb21Ob2RlKCk7XG4gICAgfVxuICAgIGdldFNsb3RSYW5kb21Ob2RlKHNsb3QpIHtcbiAgICAgICAgcmV0dXJuIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzQ2x1c3Rlcl9zbG90cywgXCJmXCIpLmdldFNsb3RSYW5kb21Ob2RlKHNsb3QpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZCB1c2UgYC5tYXN0ZXJzYCBpbnN0ZWFkXG4gICAgICovXG4gICAgZ2V0TWFzdGVycygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFzdGVycztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgdXNlIGAuc2xvdHNbPFNMT1Q+XWAgaW5zdGVhZFxuICAgICAqL1xuICAgIGdldFNsb3RNYXN0ZXIoc2xvdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zbG90c1tzbG90XS5tYXN0ZXI7XG4gICAgfVxufVxuX1JlZGlzQ2x1c3Rlcl9vcHRpb25zID0gbmV3IFdlYWtNYXAoKSwgX1JlZGlzQ2x1c3Rlcl9zbG90cyA9IG5ldyBXZWFrTWFwKCksIF9SZWRpc0NsdXN0ZXJfTXVsdGkgPSBuZXcgV2Vha01hcCgpLCBfUmVkaXNDbHVzdGVyX2luc3RhbmNlcyA9IG5ldyBXZWFrU2V0KCksIF9SZWRpc0NsdXN0ZXJfZXhlY3V0ZSA9IGFzeW5jIGZ1bmN0aW9uIF9SZWRpc0NsdXN0ZXJfZXhlY3V0ZShmaXJzdEtleSwgaXNSZWFkb25seSwgZXhlY3V0b3IpIHtcbiAgICBjb25zdCBtYXhDb21tYW5kUmVkaXJlY3Rpb25zID0gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUmVkaXNDbHVzdGVyX29wdGlvbnMsIFwiZlwiKS5tYXhDb21tYW5kUmVkaXJlY3Rpb25zID8/IDE2O1xuICAgIGxldCBjbGllbnQgPSBhd2FpdCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc0NsdXN0ZXJfc2xvdHMsIFwiZlwiKS5nZXRDbGllbnQoZmlyc3RLZXksIGlzUmVhZG9ubHkpO1xuICAgIGZvciAobGV0IGkgPSAwOzsgaSsrKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgZXhlY3V0b3IoY2xpZW50KTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBpZiAoKytpID4gbWF4Q29tbWFuZFJlZGlyZWN0aW9ucyB8fCAhKGVyciBpbnN0YW5jZW9mIGVycm9yc18xLkVycm9yUmVwbHkpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGVyci5tZXNzYWdlLnN0YXJ0c1dpdGgoJ0FTSycpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWRkcmVzcyA9IGVyci5tZXNzYWdlLnN1YnN0cmluZyhlcnIubWVzc2FnZS5sYXN0SW5kZXhPZignICcpICsgMSk7XG4gICAgICAgICAgICAgICAgbGV0IHJlZGlyZWN0VG8gPSBhd2FpdCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc0NsdXN0ZXJfc2xvdHMsIFwiZlwiKS5nZXRNYXN0ZXJCeUFkZHJlc3MoYWRkcmVzcyk7XG4gICAgICAgICAgICAgICAgaWYgKCFyZWRpcmVjdFRvKSB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzQ2x1c3Rlcl9zbG90cywgXCJmXCIpLnJlZGlzY292ZXIoY2xpZW50KTtcbiAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3RUbyA9IGF3YWl0IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1JlZGlzQ2x1c3Rlcl9zbG90cywgXCJmXCIpLmdldE1hc3RlckJ5QWRkcmVzcyhhZGRyZXNzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCFyZWRpcmVjdFRvKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGZpbmQgbm9kZSAke2FkZHJlc3N9YCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGF3YWl0IHJlZGlyZWN0VG8uYXNraW5nKCk7XG4gICAgICAgICAgICAgICAgY2xpZW50ID0gcmVkaXJlY3RUbztcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGVyci5tZXNzYWdlLnN0YXJ0c1dpdGgoJ01PVkVEJykpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SZWRpc0NsdXN0ZXJfc2xvdHMsIFwiZlwiKS5yZWRpc2NvdmVyKGNsaWVudCk7XG4gICAgICAgICAgICAgICAgY2xpZW50ID0gYXdhaXQgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUmVkaXNDbHVzdGVyX3Nsb3RzLCBcImZcIikuZ2V0Q2xpZW50KGZpcnN0S2V5LCBpc1JlYWRvbmx5KTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfVxuICAgIH1cbn07XG5leHBvcnRzLmRlZmF1bHQgPSBSZWRpc0NsdXN0ZXI7XG4oMCwgY29tbWFuZGVyXzEuYXR0YWNoQ29tbWFuZHMpKHtcbiAgICBCYXNlQ2xhc3M6IFJlZGlzQ2x1c3RlcixcbiAgICBjb21tYW5kczogY29tbWFuZHNfMS5kZWZhdWx0LFxuICAgIGV4ZWN1dG9yOiBSZWRpc0NsdXN0ZXIucHJvdG90eXBlLmNvbW1hbmRzRXhlY3V0b3Jcbn0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuc2NyaXB0U2hhMSA9IGV4cG9ydHMuZGVmaW5lU2NyaXB0ID0gdm9pZCAwO1xuY29uc3QgY3J5cHRvXzEgPSByZXF1aXJlKFwiY3J5cHRvXCIpO1xuZnVuY3Rpb24gZGVmaW5lU2NyaXB0KHNjcmlwdCkge1xuICAgIHJldHVybiB7XG4gICAgICAgIC4uLnNjcmlwdCxcbiAgICAgICAgU0hBMTogc2NyaXB0U2hhMShzY3JpcHQuU0NSSVBUKVxuICAgIH07XG59XG5leHBvcnRzLmRlZmluZVNjcmlwdCA9IGRlZmluZVNjcmlwdDtcbmZ1bmN0aW9uIHNjcmlwdFNoYTEoc2NyaXB0KSB7XG4gICAgcmV0dXJuICgwLCBjcnlwdG9fMS5jcmVhdGVIYXNoKSgnc2hhMScpLnVwZGF0ZShzY3JpcHQpLmRpZ2VzdCgnaGV4Jyk7XG59XG5leHBvcnRzLnNjcmlwdFNoYTEgPSBzY3JpcHRTaGExO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19leHBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2V4cG9ydFN0YXIpIHx8IGZ1bmN0aW9uKG0sIGV4cG9ydHMpIHtcbiAgICBmb3IgKHZhciBwIGluIG0pIGlmIChwICE9PSBcImRlZmF1bHRcIiAmJiAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGV4cG9ydHMsIHApKSBfX2NyZWF0ZUJpbmRpbmcoZXhwb3J0cywgbSwgcCk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5SZWRpc0ZsdXNoTW9kZXMgPSBleHBvcnRzLkdlb1JlcGx5V2l0aCA9IGV4cG9ydHMuZGVmaW5lU2NyaXB0ID0gZXhwb3J0cy5jcmVhdGVDbHVzdGVyID0gZXhwb3J0cy5jb21tYW5kT3B0aW9ucyA9IGV4cG9ydHMuY3JlYXRlQ2xpZW50ID0gdm9pZCAwO1xuY29uc3QgY2xpZW50XzEgPSByZXF1aXJlKFwiLi9saWIvY2xpZW50XCIpO1xuY29uc3QgY2x1c3Rlcl8xID0gcmVxdWlyZShcIi4vbGliL2NsdXN0ZXJcIik7XG5leHBvcnRzLmNyZWF0ZUNsaWVudCA9IGNsaWVudF8xLmRlZmF1bHQuY3JlYXRlO1xuZXhwb3J0cy5jb21tYW5kT3B0aW9ucyA9IGNsaWVudF8xLmRlZmF1bHQuY29tbWFuZE9wdGlvbnM7XG5leHBvcnRzLmNyZWF0ZUNsdXN0ZXIgPSBjbHVzdGVyXzEuZGVmYXVsdC5jcmVhdGU7XG52YXIgbHVhX3NjcmlwdF8xID0gcmVxdWlyZShcIi4vbGliL2x1YS1zY3JpcHRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJkZWZpbmVTY3JpcHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGx1YV9zY3JpcHRfMS5kZWZpbmVTY3JpcHQ7IH0gfSk7XG5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vbGliL2Vycm9yc1wiKSwgZXhwb3J0cyk7XG52YXIgZ2VuZXJpY190cmFuc2Zvcm1lcnNfMSA9IHJlcXVpcmUoXCIuL2xpYi9jb21tYW5kcy9nZW5lcmljLXRyYW5zZm9ybWVyc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkdlb1JlcGx5V2l0aFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZ2VuZXJpY190cmFuc2Zvcm1lcnNfMS5HZW9SZXBseVdpdGg7IH0gfSk7XG52YXIgRkxVU0hBTExfMSA9IHJlcXVpcmUoXCIuL2xpYi9jb21tYW5kcy9GTFVTSEFMTFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlJlZGlzRmx1c2hNb2Rlc1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gRkxVU0hBTExfMS5SZWRpc0ZsdXNoTW9kZXM7IH0gfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1SZXBseSA9IGV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSB2b2lkIDA7XG5leHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IDE7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMoa2V5LCBpdGVtKSB7XG4gICAgcmV0dXJuIFsnQkYuQUREJywga2V5LCBpdGVtXTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xudmFyIGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEgPSByZXF1aXJlKFwiQHJlZGlzL2NsaWVudC9kaXN0L2xpYi9jb21tYW5kcy9nZW5lcmljLXRyYW5zZm9ybWVyc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInRyYW5zZm9ybVJlcGx5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBnZW5lcmljX3RyYW5zZm9ybWVyc18xLnRyYW5zZm9ybUJvb2xlYW5SZXBseTsgfSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IGV4cG9ydHMuSVNfUkVBRF9PTkxZID0gZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSB2b2lkIDA7XG5leHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IDE7XG5leHBvcnRzLklTX1JFQURfT05MWSA9IHRydWU7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMoa2V5KSB7XG4gICAgcmV0dXJuIFsnQkYuQ0FSRCcsIGtleV07XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybVJlcGx5ID0gZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLklTX1JFQURfT05MWSA9IGV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gdm9pZCAwO1xuZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSAxO1xuZXhwb3J0cy5JU19SRUFEX09OTFkgPSB0cnVlO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGtleSwgaXRlbSkge1xuICAgIHJldHVybiBbJ0JGLkVYSVNUUycsIGtleSwgaXRlbV07XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbnZhciBnZW5lcmljX3RyYW5zZm9ybWVyc18xID0gcmVxdWlyZShcIkByZWRpcy9jbGllbnQvZGlzdC9saWIvY29tbWFuZHMvZ2VuZXJpYy10cmFuc2Zvcm1lcnNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ0cmFuc2Zvcm1SZXBseVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZ2VuZXJpY190cmFuc2Zvcm1lcnNfMS50cmFuc2Zvcm1Cb29sZWFuUmVwbHk7IH0gfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1SZXBseSA9IGV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gZXhwb3J0cy5JU19SRUFEX09OTFkgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IHZvaWQgMDtcbmV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gMTtcbmV4cG9ydHMuSVNfUkVBRF9PTkxZID0gdHJ1ZTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhrZXkpIHtcbiAgICByZXR1cm4gWydCRi5JTkZPJywga2V5XTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuZnVuY3Rpb24gdHJhbnNmb3JtUmVwbHkocmVwbHkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBjYXBhY2l0eTogcmVwbHlbMV0sXG4gICAgICAgIHNpemU6IHJlcGx5WzNdLFxuICAgICAgICBudW1iZXJPZkZpbHRlcnM6IHJlcGx5WzVdLFxuICAgICAgICBudW1iZXJPZkluc2VydGVkSXRlbXM6IHJlcGx5WzddLFxuICAgICAgICBleHBhbnNpb25SYXRlOiByZXBseVs5XVxuICAgIH07XG59XG5leHBvcnRzLnRyYW5zZm9ybVJlcGx5ID0gdHJhbnNmb3JtUmVwbHk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1SZXBseSA9IGV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSB2b2lkIDA7XG5jb25zdCBnZW5lcmljX3RyYW5zZm9ybWVyc18xID0gcmVxdWlyZShcIkByZWRpcy9jbGllbnQvZGlzdC9saWIvY29tbWFuZHMvZ2VuZXJpYy10cmFuc2Zvcm1lcnNcIik7XG5leHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IDE7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMoa2V5LCBpdGVtcywgb3B0aW9ucykge1xuICAgIGNvbnN0IGFyZ3MgPSBbJ0JGLklOU0VSVCcsIGtleV07XG4gICAgaWYgKG9wdGlvbnM/LkNBUEFDSVRZKSB7XG4gICAgICAgIGFyZ3MucHVzaCgnQ0FQQUNJVFknLCBvcHRpb25zLkNBUEFDSVRZLnRvU3RyaW5nKCkpO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucz8uRVJST1IpIHtcbiAgICAgICAgYXJncy5wdXNoKCdFUlJPUicsIG9wdGlvbnMuRVJST1IudG9TdHJpbmcoKSk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zPy5FWFBBTlNJT04pIHtcbiAgICAgICAgYXJncy5wdXNoKCdFWFBBTlNJT04nLCBvcHRpb25zLkVYUEFOU0lPTi50b1N0cmluZygpKTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnM/Lk5PQ1JFQVRFKSB7XG4gICAgICAgIGFyZ3MucHVzaCgnTk9DUkVBVEUnKTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnM/Lk5PTlNDQUxJTkcpIHtcbiAgICAgICAgYXJncy5wdXNoKCdOT05TQ0FMSU5HJyk7XG4gICAgfVxuICAgIGFyZ3MucHVzaCgnSVRFTVMnKTtcbiAgICByZXR1cm4gKDAsIGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEucHVzaFZlcmRpY3RBcmd1bWVudHMpKGFyZ3MsIGl0ZW1zKTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xudmFyIGdlbmVyaWNfdHJhbnNmb3JtZXJzXzIgPSByZXF1aXJlKFwiQHJlZGlzL2NsaWVudC9kaXN0L2xpYi9jb21tYW5kcy9nZW5lcmljLXRyYW5zZm9ybWVyc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInRyYW5zZm9ybVJlcGx5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBnZW5lcmljX3RyYW5zZm9ybWVyc18yLnRyYW5zZm9ybUJvb2xlYW5BcnJheVJlcGx5OyB9IH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSB2b2lkIDA7XG5leHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IDE7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMoa2V5LCBpdGVyZXRvciwgY2h1bmspIHtcbiAgICByZXR1cm4gWydCRi5MT0FEQ0hVTksnLCBrZXksIGl0ZXJldG9yLnRvU3RyaW5nKCksIGNodW5rXTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtUmVwbHkgPSBleHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IGV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gdm9pZCAwO1xuZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSAxO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGtleSwgaXRlbXMpIHtcbiAgICByZXR1cm4gWydCRi5NQUREJywga2V5LCAuLi5pdGVtc107XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbnZhciBnZW5lcmljX3RyYW5zZm9ybWVyc18xID0gcmVxdWlyZShcIkByZWRpcy9jbGllbnQvZGlzdC9saWIvY29tbWFuZHMvZ2VuZXJpYy10cmFuc2Zvcm1lcnNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ0cmFuc2Zvcm1SZXBseVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZ2VuZXJpY190cmFuc2Zvcm1lcnNfMS50cmFuc2Zvcm1Cb29sZWFuQXJyYXlSZXBseTsgfSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybVJlcGx5ID0gZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLklTX1JFQURfT05MWSA9IGV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gdm9pZCAwO1xuZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSAxO1xuZXhwb3J0cy5JU19SRUFEX09OTFkgPSB0cnVlO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGtleSwgaXRlbXMpIHtcbiAgICByZXR1cm4gWydCRi5NRVhJU1RTJywga2V5LCAuLi5pdGVtc107XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbnZhciBnZW5lcmljX3RyYW5zZm9ybWVyc18xID0gcmVxdWlyZShcIkByZWRpcy9jbGllbnQvZGlzdC9saWIvY29tbWFuZHMvZ2VuZXJpYy10cmFuc2Zvcm1lcnNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ0cmFuc2Zvcm1SZXBseVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZ2VuZXJpY190cmFuc2Zvcm1lcnNfMS50cmFuc2Zvcm1Cb29sZWFuQXJyYXlSZXBseTsgfSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IGV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gdm9pZCAwO1xuZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSAxO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGtleSwgZXJyb3JSYXRlLCBjYXBhY2l0eSwgb3B0aW9ucykge1xuICAgIGNvbnN0IGFyZ3MgPSBbJ0JGLlJFU0VSVkUnLCBrZXksIGVycm9yUmF0ZS50b1N0cmluZygpLCBjYXBhY2l0eS50b1N0cmluZygpXTtcbiAgICBpZiAob3B0aW9ucz8uRVhQQU5TSU9OKSB7XG4gICAgICAgIGFyZ3MucHVzaCgnRVhQQU5TSU9OJywgb3B0aW9ucy5FWFBBTlNJT04udG9TdHJpbmcoKSk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zPy5OT05TQ0FMSU5HKSB7XG4gICAgICAgIGFyZ3MucHVzaCgnTk9OU0NBTElORycpO1xuICAgIH1cbiAgICByZXR1cm4gYXJncztcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtUmVwbHkgPSBleHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IGV4cG9ydHMuSVNfUkVBRF9PTkxZID0gZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSB2b2lkIDA7XG5leHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IDE7XG5leHBvcnRzLklTX1JFQURfT05MWSA9IHRydWU7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMoa2V5LCBpdGVyYXRvcikge1xuICAgIHJldHVybiBbJ0JGLlNDQU5EVU1QJywga2V5LCBpdGVyYXRvci50b1N0cmluZygpXTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuZnVuY3Rpb24gdHJhbnNmb3JtUmVwbHkoW2l0ZXJhdG9yLCBjaHVua10pIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBpdGVyYXRvcixcbiAgICAgICAgY2h1bmtcbiAgICB9O1xufVxuZXhwb3J0cy50cmFuc2Zvcm1SZXBseSA9IHRyYW5zZm9ybVJlcGx5O1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IEFERCA9IHJlcXVpcmUoXCIuL0FERFwiKTtcbmNvbnN0IENBUkQgPSByZXF1aXJlKFwiLi9DQVJEXCIpO1xuY29uc3QgRVhJU1RTID0gcmVxdWlyZShcIi4vRVhJU1RTXCIpO1xuY29uc3QgSU5GTyA9IHJlcXVpcmUoXCIuL0lORk9cIik7XG5jb25zdCBJTlNFUlQgPSByZXF1aXJlKFwiLi9JTlNFUlRcIik7XG5jb25zdCBMT0FEQ0hVTksgPSByZXF1aXJlKFwiLi9MT0FEQ0hVTktcIik7XG5jb25zdCBNQUREID0gcmVxdWlyZShcIi4vTUFERFwiKTtcbmNvbnN0IE1FWElTVFMgPSByZXF1aXJlKFwiLi9NRVhJU1RTXCIpO1xuY29uc3QgUkVTRVJWRSA9IHJlcXVpcmUoXCIuL1JFU0VSVkVcIik7XG5jb25zdCBTQ0FORFVNUCA9IHJlcXVpcmUoXCIuL1NDQU5EVU1QXCIpO1xuZXhwb3J0cy5kZWZhdWx0ID0ge1xuICAgIEFERCxcbiAgICBhZGQ6IEFERCxcbiAgICBDQVJELFxuICAgIGNhcmQ6IENBUkQsXG4gICAgRVhJU1RTLFxuICAgIGV4aXN0czogRVhJU1RTLFxuICAgIElORk8sXG4gICAgaW5mbzogSU5GTyxcbiAgICBJTlNFUlQsXG4gICAgaW5zZXJ0OiBJTlNFUlQsXG4gICAgTE9BRENIVU5LLFxuICAgIGxvYWRDaHVuazogTE9BRENIVU5LLFxuICAgIE1BREQsXG4gICAgbUFkZDogTUFERCxcbiAgICBNRVhJU1RTLFxuICAgIG1FeGlzdHM6IE1FWElTVFMsXG4gICAgUkVTRVJWRSxcbiAgICByZXNlcnZlOiBSRVNFUlZFLFxuICAgIFNDQU5EVU1QLFxuICAgIHNjYW5EdW1wOiBTQ0FORFVNUFxufTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IGV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gdm9pZCAwO1xuZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSAxO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGtleSwgaXRlbXMpIHtcbiAgICBjb25zdCBhcmdzID0gWydDTVMuSU5DUkJZJywga2V5XTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShpdGVtcykpIHtcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgICAgICAgICBwdXNoSW5jckJ5SXRlbShhcmdzLCBpdGVtKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcHVzaEluY3JCeUl0ZW0oYXJncywgaXRlbXMpO1xuICAgIH1cbiAgICByZXR1cm4gYXJncztcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuZnVuY3Rpb24gcHVzaEluY3JCeUl0ZW0oYXJncywgeyBpdGVtLCBpbmNyZW1lbnRCeSB9KSB7XG4gICAgYXJncy5wdXNoKGl0ZW0sIGluY3JlbWVudEJ5LnRvU3RyaW5nKCkpO1xufVxuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtUmVwbHkgPSBleHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IGV4cG9ydHMuSVNfUkVBRF9PTkxZID0gZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSB2b2lkIDA7XG5leHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IDE7XG5leHBvcnRzLklTX1JFQURfT05MWSA9IHRydWU7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMoa2V5KSB7XG4gICAgcmV0dXJuIFsnQ01TLklORk8nLCBrZXldO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG5mdW5jdGlvbiB0cmFuc2Zvcm1SZXBseShyZXBseSkge1xuICAgIHJldHVybiB7XG4gICAgICAgIHdpZHRoOiByZXBseVsxXSxcbiAgICAgICAgZGVwdGg6IHJlcGx5WzNdLFxuICAgICAgICBjb3VudDogcmVwbHlbNV1cbiAgICB9O1xufVxuZXhwb3J0cy50cmFuc2Zvcm1SZXBseSA9IHRyYW5zZm9ybVJlcGx5O1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSB2b2lkIDA7XG5leHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IDE7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMoa2V5LCB3aWR0aCwgZGVwdGgpIHtcbiAgICByZXR1cm4gWydDTVMuSU5JVEJZRElNJywga2V5LCB3aWR0aC50b1N0cmluZygpLCBkZXB0aC50b1N0cmluZygpXTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSB2b2lkIDA7XG5leHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IDE7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMoa2V5LCBlcnJvciwgcHJvYmFiaWxpdHkpIHtcbiAgICByZXR1cm4gWydDTVMuSU5JVEJZUFJPQicsIGtleSwgZXJyb3IudG9TdHJpbmcoKSwgcHJvYmFiaWxpdHkudG9TdHJpbmcoKV07XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IGV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gdm9pZCAwO1xuZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSAxO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGRlc3QsIHNyYykge1xuICAgIGNvbnN0IGFyZ3MgPSBbXG4gICAgICAgICdDTVMuTUVSR0UnLFxuICAgICAgICBkZXN0LFxuICAgICAgICBzcmMubGVuZ3RoLnRvU3RyaW5nKClcbiAgICBdO1xuICAgIGlmIChpc1N0cmluZ1NrZXRjaGVzKHNyYykpIHtcbiAgICAgICAgYXJncy5wdXNoKC4uLnNyYyk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBmb3IgKGNvbnN0IHNrZXRjaCBvZiBzcmMpIHtcbiAgICAgICAgICAgIGFyZ3MucHVzaChza2V0Y2gubmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgYXJncy5wdXNoKCdXRUlHSFRTJyk7XG4gICAgICAgIGZvciAoY29uc3Qgc2tldGNoIG9mIHNyYykge1xuICAgICAgICAgICAgYXJncy5wdXNoKHNrZXRjaC53ZWlnaHQudG9TdHJpbmcoKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGFyZ3M7XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbmZ1bmN0aW9uIGlzU3RyaW5nU2tldGNoZXMoc3JjKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBzcmNbMF0gPT09ICdzdHJpbmcnO1xufVxuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gZXhwb3J0cy5JU19SRUFEX09OTFkgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IHZvaWQgMDtcbmNvbnN0IGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEgPSByZXF1aXJlKFwiQHJlZGlzL2NsaWVudC9kaXN0L2xpYi9jb21tYW5kcy9nZW5lcmljLXRyYW5zZm9ybWVyc1wiKTtcbmV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gMTtcbmV4cG9ydHMuSVNfUkVBRF9PTkxZID0gdHJ1ZTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhrZXksIGl0ZW1zKSB7XG4gICAgcmV0dXJuICgwLCBnZW5lcmljX3RyYW5zZm9ybWVyc18xLnB1c2hWZXJkaWN0QXJndW1lbnRzKShbJ0NNUy5RVUVSWScsIGtleV0sIGl0ZW1zKTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IElOQ1JCWSA9IHJlcXVpcmUoXCIuL0lOQ1JCWVwiKTtcbmNvbnN0IElORk8gPSByZXF1aXJlKFwiLi9JTkZPXCIpO1xuY29uc3QgSU5JVEJZRElNID0gcmVxdWlyZShcIi4vSU5JVEJZRElNXCIpO1xuY29uc3QgSU5JVEJZUFJPQiA9IHJlcXVpcmUoXCIuL0lOSVRCWVBST0JcIik7XG5jb25zdCBNRVJHRSA9IHJlcXVpcmUoXCIuL01FUkdFXCIpO1xuY29uc3QgUVVFUlkgPSByZXF1aXJlKFwiLi9RVUVSWVwiKTtcbmV4cG9ydHMuZGVmYXVsdCA9IHtcbiAgICBJTkNSQlksXG4gICAgaW5jckJ5OiBJTkNSQlksXG4gICAgSU5GTyxcbiAgICBpbmZvOiBJTkZPLFxuICAgIElOSVRCWURJTSxcbiAgICBpbml0QnlEaW06IElOSVRCWURJTSxcbiAgICBJTklUQllQUk9CLFxuICAgIGluaXRCeVByb2I6IElOSVRCWVBST0IsXG4gICAgTUVSR0UsXG4gICAgbWVyZ2U6IE1FUkdFLFxuICAgIFFVRVJZLFxuICAgIHF1ZXJ5OiBRVUVSWVxufTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybVJlcGx5ID0gZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IHZvaWQgMDtcbmV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gMTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhrZXksIGl0ZW0pIHtcbiAgICByZXR1cm4gWydDRi5BREQnLCBrZXksIGl0ZW1dO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG52YXIgZ2VuZXJpY190cmFuc2Zvcm1lcnNfMSA9IHJlcXVpcmUoXCJAcmVkaXMvY2xpZW50L2Rpc3QvbGliL2NvbW1hbmRzL2dlbmVyaWMtdHJhbnNmb3JtZXJzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidHJhbnNmb3JtUmVwbHlcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEudHJhbnNmb3JtQm9vbGVhblJlcGx5OyB9IH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtUmVwbHkgPSBleHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IGV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gdm9pZCAwO1xuZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSAxO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGtleSwgaXRlbSkge1xuICAgIHJldHVybiBbJ0NGLkFERE5YJywga2V5LCBpdGVtXTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xudmFyIGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEgPSByZXF1aXJlKFwiQHJlZGlzL2NsaWVudC9kaXN0L2xpYi9jb21tYW5kcy9nZW5lcmljLXRyYW5zZm9ybWVyc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInRyYW5zZm9ybVJlcGx5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBnZW5lcmljX3RyYW5zZm9ybWVyc18xLnRyYW5zZm9ybUJvb2xlYW5SZXBseTsgfSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IGV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gdm9pZCAwO1xuZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSAxO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGtleSwgaXRlbSkge1xuICAgIHJldHVybiBbJ0NGLkNPVU5UJywga2V5LCBpdGVtXTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtUmVwbHkgPSBleHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IGV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gdm9pZCAwO1xuZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSAxO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGtleSwgaXRlbSkge1xuICAgIHJldHVybiBbJ0NGLkRFTCcsIGtleSwgaXRlbV07XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbnZhciBnZW5lcmljX3RyYW5zZm9ybWVyc18xID0gcmVxdWlyZShcIkByZWRpcy9jbGllbnQvZGlzdC9saWIvY29tbWFuZHMvZ2VuZXJpYy10cmFuc2Zvcm1lcnNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ0cmFuc2Zvcm1SZXBseVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZ2VuZXJpY190cmFuc2Zvcm1lcnNfMS50cmFuc2Zvcm1Cb29sZWFuUmVwbHk7IH0gfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1SZXBseSA9IGV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gZXhwb3J0cy5JU19SRUFEX09OTFkgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IHZvaWQgMDtcbmV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gMTtcbmV4cG9ydHMuSVNfUkVBRF9PTkxZID0gdHJ1ZTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhrZXksIGl0ZW0pIHtcbiAgICByZXR1cm4gWydDRi5FWElTVFMnLCBrZXksIGl0ZW1dO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG52YXIgZ2VuZXJpY190cmFuc2Zvcm1lcnNfMSA9IHJlcXVpcmUoXCJAcmVkaXMvY2xpZW50L2Rpc3QvbGliL2NvbW1hbmRzL2dlbmVyaWMtdHJhbnNmb3JtZXJzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidHJhbnNmb3JtUmVwbHlcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEudHJhbnNmb3JtQm9vbGVhblJlcGx5OyB9IH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtUmVwbHkgPSBleHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IGV4cG9ydHMuSVNfUkVBRF9PTkxZID0gZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSB2b2lkIDA7XG5leHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IDE7XG5leHBvcnRzLklTX1JFQURfT05MWSA9IHRydWU7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMoa2V5KSB7XG4gICAgcmV0dXJuIFsnQ0YuSU5GTycsIGtleV07XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbmZ1bmN0aW9uIHRyYW5zZm9ybVJlcGx5KHJlcGx5KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgc2l6ZTogcmVwbHlbMV0sXG4gICAgICAgIG51bWJlck9mQnVja2V0czogcmVwbHlbM10sXG4gICAgICAgIG51bWJlck9mRmlsdGVyczogcmVwbHlbNV0sXG4gICAgICAgIG51bWJlck9mSW5zZXJ0ZWRJdGVtczogcmVwbHlbN10sXG4gICAgICAgIG51bWJlck9mRGVsZXRlZEl0ZW1zOiByZXBseVs5XSxcbiAgICAgICAgYnVja2V0U2l6ZTogcmVwbHlbMTFdLFxuICAgICAgICBleHBhbnNpb25SYXRlOiByZXBseVsxM10sXG4gICAgICAgIG1heEl0ZXJhdGlvbjogcmVwbHlbMTVdXG4gICAgfTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtUmVwbHkgPSB0cmFuc2Zvcm1SZXBseTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybVJlcGx5ID0gZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IHZvaWQgMDtcbmNvbnN0IF8xID0gcmVxdWlyZShcIi5cIik7XG5leHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IDE7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMoa2V5LCBpdGVtcywgb3B0aW9ucykge1xuICAgIHJldHVybiAoMCwgXzEucHVzaEluc2VydE9wdGlvbnMpKFsnQ0YuSU5TRVJUJywga2V5XSwgaXRlbXMsIG9wdGlvbnMpO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG52YXIgZ2VuZXJpY190cmFuc2Zvcm1lcnNfMSA9IHJlcXVpcmUoXCJAcmVkaXMvY2xpZW50L2Rpc3QvbGliL2NvbW1hbmRzL2dlbmVyaWMtdHJhbnNmb3JtZXJzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidHJhbnNmb3JtUmVwbHlcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEudHJhbnNmb3JtQm9vbGVhbkFycmF5UmVwbHk7IH0gfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1SZXBseSA9IGV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSB2b2lkIDA7XG5jb25zdCBfMSA9IHJlcXVpcmUoXCIuXCIpO1xuZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSAxO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGtleSwgaXRlbXMsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gKDAsIF8xLnB1c2hJbnNlcnRPcHRpb25zKShbJ0NGLklOU0VSVE5YJywga2V5XSwgaXRlbXMsIG9wdGlvbnMpO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG52YXIgZ2VuZXJpY190cmFuc2Zvcm1lcnNfMSA9IHJlcXVpcmUoXCJAcmVkaXMvY2xpZW50L2Rpc3QvbGliL2NvbW1hbmRzL2dlbmVyaWMtdHJhbnNmb3JtZXJzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidHJhbnNmb3JtUmVwbHlcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEudHJhbnNmb3JtQm9vbGVhbkFycmF5UmVwbHk7IH0gfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IHZvaWQgMDtcbmV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gMTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhrZXksIGl0ZXJhdG9yLCBjaHVuaykge1xuICAgIHJldHVybiBbJ0NGLkxPQURDSFVOSycsIGtleSwgaXRlcmF0b3IudG9TdHJpbmcoKSwgY2h1bmtdO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IHZvaWQgMDtcbmV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gMTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhrZXksIGNhcGFjaXR5LCBvcHRpb25zKSB7XG4gICAgY29uc3QgYXJncyA9IFsnQ0YuUkVTRVJWRScsIGtleSwgY2FwYWNpdHkudG9TdHJpbmcoKV07XG4gICAgaWYgKG9wdGlvbnM/LkJVQ0tFVFNJWkUpIHtcbiAgICAgICAgYXJncy5wdXNoKCdCVUNLRVRTSVpFJywgb3B0aW9ucy5CVUNLRVRTSVpFLnRvU3RyaW5nKCkpO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucz8uTUFYSVRFUkFUSU9OUykge1xuICAgICAgICBhcmdzLnB1c2goJ01BWElURVJBVElPTlMnLCBvcHRpb25zLk1BWElURVJBVElPTlMudG9TdHJpbmcoKSk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zPy5FWFBBTlNJT04pIHtcbiAgICAgICAgYXJncy5wdXNoKCdFWFBBTlNJT04nLCBvcHRpb25zLkVYUEFOU0lPTi50b1N0cmluZygpKTtcbiAgICB9XG4gICAgcmV0dXJuIGFyZ3M7XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybVJlcGx5ID0gZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IHZvaWQgMDtcbmV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gMTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhrZXksIGl0ZXJhdG9yKSB7XG4gICAgcmV0dXJuIFsnQ0YuU0NBTkRVTVAnLCBrZXksIGl0ZXJhdG9yLnRvU3RyaW5nKCldO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG5mdW5jdGlvbiB0cmFuc2Zvcm1SZXBseShbaXRlcmF0b3IsIGNodW5rXSkge1xuICAgIHJldHVybiB7XG4gICAgICAgIGl0ZXJhdG9yLFxuICAgICAgICBjaHVua1xuICAgIH07XG59XG5leHBvcnRzLnRyYW5zZm9ybVJlcGx5ID0gdHJhbnNmb3JtUmVwbHk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5wdXNoSW5zZXJ0T3B0aW9ucyA9IHZvaWQgMDtcbmNvbnN0IEFERCA9IHJlcXVpcmUoXCIuL0FERFwiKTtcbmNvbnN0IEFERE5YID0gcmVxdWlyZShcIi4vQURETlhcIik7XG5jb25zdCBDT1VOVCA9IHJlcXVpcmUoXCIuL0NPVU5UXCIpO1xuY29uc3QgREVMID0gcmVxdWlyZShcIi4vREVMXCIpO1xuY29uc3QgRVhJU1RTID0gcmVxdWlyZShcIi4vRVhJU1RTXCIpO1xuY29uc3QgSU5GTyA9IHJlcXVpcmUoXCIuL0lORk9cIik7XG5jb25zdCBJTlNFUlQgPSByZXF1aXJlKFwiLi9JTlNFUlRcIik7XG5jb25zdCBJTlNFUlROWCA9IHJlcXVpcmUoXCIuL0lOU0VSVE5YXCIpO1xuY29uc3QgTE9BRENIVU5LID0gcmVxdWlyZShcIi4vTE9BRENIVU5LXCIpO1xuY29uc3QgUkVTRVJWRSA9IHJlcXVpcmUoXCIuL1JFU0VSVkVcIik7XG5jb25zdCBTQ0FORFVNUCA9IHJlcXVpcmUoXCIuL1NDQU5EVU1QXCIpO1xuY29uc3QgZ2VuZXJpY190cmFuc2Zvcm1lcnNfMSA9IHJlcXVpcmUoXCJAcmVkaXMvY2xpZW50L2Rpc3QvbGliL2NvbW1hbmRzL2dlbmVyaWMtdHJhbnNmb3JtZXJzXCIpO1xuZXhwb3J0cy5kZWZhdWx0ID0ge1xuICAgIEFERCxcbiAgICBhZGQ6IEFERCxcbiAgICBBREROWCxcbiAgICBhZGROWDogQURETlgsXG4gICAgQ09VTlQsXG4gICAgY291bnQ6IENPVU5ULFxuICAgIERFTCxcbiAgICBkZWw6IERFTCxcbiAgICBFWElTVFMsXG4gICAgZXhpc3RzOiBFWElTVFMsXG4gICAgSU5GTyxcbiAgICBpbmZvOiBJTkZPLFxuICAgIElOU0VSVCxcbiAgICBpbnNlcnQ6IElOU0VSVCxcbiAgICBJTlNFUlROWCxcbiAgICBpbnNlcnROWDogSU5TRVJUTlgsXG4gICAgTE9BRENIVU5LLFxuICAgIGxvYWRDaHVuazogTE9BRENIVU5LLFxuICAgIFJFU0VSVkUsXG4gICAgcmVzZXJ2ZTogUkVTRVJWRSxcbiAgICBTQ0FORFVNUCxcbiAgICBzY2FuRHVtcDogU0NBTkRVTVBcbn07XG5mdW5jdGlvbiBwdXNoSW5zZXJ0T3B0aW9ucyhhcmdzLCBpdGVtcywgb3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zPy5DQVBBQ0lUWSkge1xuICAgICAgICBhcmdzLnB1c2goJ0NBUEFDSVRZJyk7XG4gICAgICAgIGFyZ3MucHVzaChvcHRpb25zLkNBUEFDSVRZLnRvU3RyaW5nKCkpO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucz8uTk9DUkVBVEUpIHtcbiAgICAgICAgYXJncy5wdXNoKCdOT0NSRUFURScpO1xuICAgIH1cbiAgICBhcmdzLnB1c2goJ0lURU1TJyk7XG4gICAgcmV0dXJuICgwLCBnZW5lcmljX3RyYW5zZm9ybWVyc18xLnB1c2hWZXJkaWN0QXJndW1lbnRzKShhcmdzLCBpdGVtcyk7XG59XG5leHBvcnRzLnB1c2hJbnNlcnRPcHRpb25zID0gcHVzaEluc2VydE9wdGlvbnM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IHZvaWQgMDtcbmV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gMTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhrZXksIHZhbHVlcykge1xuICAgIGNvbnN0IGFyZ3MgPSBbJ1RESUdFU1QuQUREJywga2V5XTtcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdmFsdWVzKSB7XG4gICAgICAgIGFyZ3MucHVzaChpdGVtLnRvU3RyaW5nKCkpO1xuICAgIH1cbiAgICByZXR1cm4gYXJncztcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtUmVwbHkgPSBleHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IGV4cG9ydHMuSVNfUkVBRF9PTkxZID0gZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSB2b2lkIDA7XG5leHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IDE7XG5leHBvcnRzLklTX1JFQURfT05MWSA9IHRydWU7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMoa2V5LCByYW5rcykge1xuICAgIGNvbnN0IGFyZ3MgPSBbJ1RESUdFU1QuQllSQU5LJywga2V5XTtcbiAgICBmb3IgKGNvbnN0IHJhbmsgb2YgcmFua3MpIHtcbiAgICAgICAgYXJncy5wdXNoKHJhbmsudG9TdHJpbmcoKSk7XG4gICAgfVxuICAgIHJldHVybiBhcmdzO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG52YXIgXzEgPSByZXF1aXJlKFwiLlwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInRyYW5zZm9ybVJlcGx5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBfMS50cmFuc2Zvcm1Eb3VibGVzUmVwbHk7IH0gfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1SZXBseSA9IGV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gZXhwb3J0cy5JU19SRUFEX09OTFkgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IHZvaWQgMDtcbmV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gMTtcbmV4cG9ydHMuSVNfUkVBRF9PTkxZID0gdHJ1ZTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhrZXksIHJhbmtzKSB7XG4gICAgY29uc3QgYXJncyA9IFsnVERJR0VTVC5CWVJFVlJBTksnLCBrZXldO1xuICAgIGZvciAoY29uc3QgcmFuayBvZiByYW5rcykge1xuICAgICAgICBhcmdzLnB1c2gocmFuay50b1N0cmluZygpKTtcbiAgICB9XG4gICAgcmV0dXJuIGFyZ3M7XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbnZhciBfMSA9IHJlcXVpcmUoXCIuXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidHJhbnNmb3JtUmVwbHlcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIF8xLnRyYW5zZm9ybURvdWJsZXNSZXBseTsgfSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybVJlcGx5ID0gZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLklTX1JFQURfT05MWSA9IGV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gdm9pZCAwO1xuZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSAxO1xuZXhwb3J0cy5JU19SRUFEX09OTFkgPSB0cnVlO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGtleSwgdmFsdWVzKSB7XG4gICAgY29uc3QgYXJncyA9IFsnVERJR0VTVC5DREYnLCBrZXldO1xuICAgIGZvciAoY29uc3QgaXRlbSBvZiB2YWx1ZXMpIHtcbiAgICAgICAgYXJncy5wdXNoKGl0ZW0udG9TdHJpbmcoKSk7XG4gICAgfVxuICAgIHJldHVybiBhcmdzO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG52YXIgXzEgPSByZXF1aXJlKFwiLlwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInRyYW5zZm9ybVJlcGx5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBfMS50cmFuc2Zvcm1Eb3VibGVzUmVwbHk7IH0gfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IHZvaWQgMDtcbmNvbnN0IF8xID0gcmVxdWlyZShcIi5cIik7XG5leHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IDE7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMoa2V5LCBvcHRpb25zKSB7XG4gICAgcmV0dXJuICgwLCBfMS5wdXNoQ29tcHJlc3Npb25Bcmd1bWVudCkoWydURElHRVNULkNSRUFURScsIGtleV0sIG9wdGlvbnMpO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1SZXBseSA9IGV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gZXhwb3J0cy5JU19SRUFEX09OTFkgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IHZvaWQgMDtcbmV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gMTtcbmV4cG9ydHMuSVNfUkVBRF9PTkxZID0gdHJ1ZTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhrZXkpIHtcbiAgICByZXR1cm4gW1xuICAgICAgICAnVERJR0VTVC5JTkZPJyxcbiAgICAgICAga2V5XG4gICAgXTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuZnVuY3Rpb24gdHJhbnNmb3JtUmVwbHkocmVwbHkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBjb21wZXJzc2lvbjogcmVwbHlbMV0sXG4gICAgICAgIGNhcGFjaXR5OiByZXBseVszXSxcbiAgICAgICAgbWVyZ2VkTm9kZXM6IHJlcGx5WzVdLFxuICAgICAgICB1bm1lcmdlZE5vZGVzOiByZXBseVs3XSxcbiAgICAgICAgbWVyZ2VkV2VpZ2h0OiBOdW1iZXIocmVwbHlbOV0pLFxuICAgICAgICB1bm1lcmdlZFdlaWdodDogTnVtYmVyKHJlcGx5WzExXSksXG4gICAgICAgIHRvdGFsQ29tcHJlc3Npb246IHJlcGx5WzEzXVxuICAgIH07XG59XG5leHBvcnRzLnRyYW5zZm9ybVJlcGx5ID0gdHJhbnNmb3JtUmVwbHk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1SZXBseSA9IGV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gZXhwb3J0cy5JU19SRUFEX09OTFkgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IHZvaWQgMDtcbmV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gMTtcbmV4cG9ydHMuSVNfUkVBRF9PTkxZID0gdHJ1ZTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhrZXkpIHtcbiAgICByZXR1cm4gW1xuICAgICAgICAnVERJR0VTVC5NQVgnLFxuICAgICAgICBrZXlcbiAgICBdO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG52YXIgXzEgPSByZXF1aXJlKFwiLlwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInRyYW5zZm9ybVJlcGx5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBfMS50cmFuc2Zvcm1Eb3VibGVSZXBseTsgfSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IGV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gdm9pZCAwO1xuY29uc3QgZ2VuZXJpY190cmFuc2Zvcm1lcnNfMSA9IHJlcXVpcmUoXCJAcmVkaXMvY2xpZW50L2Rpc3QvbGliL2NvbW1hbmRzL2dlbmVyaWMtdHJhbnNmb3JtZXJzXCIpO1xuY29uc3QgXzEgPSByZXF1aXJlKFwiLlwiKTtcbmV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gMTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhkZXN0S2V5LCBzcmNLZXlzLCBvcHRpb25zKSB7XG4gICAgY29uc3QgYXJncyA9ICgwLCBnZW5lcmljX3RyYW5zZm9ybWVyc18xLnB1c2hWZXJkaWN0QXJndW1lbnQpKFsnVERJR0VTVC5NRVJHRScsIGRlc3RLZXldLCBzcmNLZXlzKTtcbiAgICAoMCwgXzEucHVzaENvbXByZXNzaW9uQXJndW1lbnQpKGFyZ3MsIG9wdGlvbnMpO1xuICAgIGlmIChvcHRpb25zPy5PVkVSUklERSkge1xuICAgICAgICBhcmdzLnB1c2goJ09WRVJSSURFJyk7XG4gICAgfVxuICAgIHJldHVybiBhcmdzO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1SZXBseSA9IGV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gZXhwb3J0cy5JU19SRUFEX09OTFkgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IHZvaWQgMDtcbmV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gMTtcbmV4cG9ydHMuSVNfUkVBRF9PTkxZID0gdHJ1ZTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhrZXkpIHtcbiAgICByZXR1cm4gW1xuICAgICAgICAnVERJR0VTVC5NSU4nLFxuICAgICAgICBrZXlcbiAgICBdO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG52YXIgXzEgPSByZXF1aXJlKFwiLlwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInRyYW5zZm9ybVJlcGx5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBfMS50cmFuc2Zvcm1Eb3VibGVSZXBseTsgfSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybVJlcGx5ID0gZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLklTX1JFQURfT05MWSA9IGV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gdm9pZCAwO1xuZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSAxO1xuZXhwb3J0cy5JU19SRUFEX09OTFkgPSB0cnVlO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGtleSwgcXVhbnRpbGVzKSB7XG4gICAgY29uc3QgYXJncyA9IFtcbiAgICAgICAgJ1RESUdFU1QuUVVBTlRJTEUnLFxuICAgICAgICBrZXlcbiAgICBdO1xuICAgIGZvciAoY29uc3QgcXVhbnRpbGUgb2YgcXVhbnRpbGVzKSB7XG4gICAgICAgIGFyZ3MucHVzaChxdWFudGlsZS50b1N0cmluZygpKTtcbiAgICB9XG4gICAgcmV0dXJuIGFyZ3M7XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbnZhciBfMSA9IHJlcXVpcmUoXCIuXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidHJhbnNmb3JtUmVwbHlcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIF8xLnRyYW5zZm9ybURvdWJsZXNSZXBseTsgfSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IGV4cG9ydHMuSVNfUkVBRF9PTkxZID0gZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSB2b2lkIDA7XG5leHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IDE7XG5leHBvcnRzLklTX1JFQURfT05MWSA9IHRydWU7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMoa2V5LCB2YWx1ZXMpIHtcbiAgICBjb25zdCBhcmdzID0gWydURElHRVNULlJBTksnLCBrZXldO1xuICAgIGZvciAoY29uc3QgaXRlbSBvZiB2YWx1ZXMpIHtcbiAgICAgICAgYXJncy5wdXNoKGl0ZW0udG9TdHJpbmcoKSk7XG4gICAgfVxuICAgIHJldHVybiBhcmdzO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IHZvaWQgMDtcbmV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gMTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhrZXkpIHtcbiAgICByZXR1cm4gWydURElHRVNULlJFU0VUJywga2V5XTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gZXhwb3J0cy5JU19SRUFEX09OTFkgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IHZvaWQgMDtcbmV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gMTtcbmV4cG9ydHMuSVNfUkVBRF9PTkxZID0gdHJ1ZTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhrZXksIHZhbHVlcykge1xuICAgIGNvbnN0IGFyZ3MgPSBbJ1RESUdFU1QuUkVWUkFOSycsIGtleV07XG4gICAgZm9yIChjb25zdCBpdGVtIG9mIHZhbHVlcykge1xuICAgICAgICBhcmdzLnB1c2goaXRlbS50b1N0cmluZygpKTtcbiAgICB9XG4gICAgcmV0dXJuIGFyZ3M7XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybVJlcGx5ID0gZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLklTX1JFQURfT05MWSA9IGV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gdm9pZCAwO1xuZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSAxO1xuZXhwb3J0cy5JU19SRUFEX09OTFkgPSB0cnVlO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGtleSwgbG93Q3V0UGVyY2VudGlsZSwgaGlnaEN1dFBlcmNlbnRpbGUpIHtcbiAgICByZXR1cm4gW1xuICAgICAgICAnVERJR0VTVC5UUklNTUVEX01FQU4nLFxuICAgICAgICBrZXksXG4gICAgICAgIGxvd0N1dFBlcmNlbnRpbGUudG9TdHJpbmcoKSxcbiAgICAgICAgaGlnaEN1dFBlcmNlbnRpbGUudG9TdHJpbmcoKVxuICAgIF07XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbnZhciBfMSA9IHJlcXVpcmUoXCIuXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidHJhbnNmb3JtUmVwbHlcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIF8xLnRyYW5zZm9ybURvdWJsZVJlcGx5OyB9IH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtRG91Ymxlc1JlcGx5ID0gZXhwb3J0cy50cmFuc2Zvcm1Eb3VibGVSZXBseSA9IGV4cG9ydHMucHVzaENvbXByZXNzaW9uQXJndW1lbnQgPSB2b2lkIDA7XG5jb25zdCBBREQgPSByZXF1aXJlKFwiLi9BRERcIik7XG5jb25zdCBCWVJBTksgPSByZXF1aXJlKFwiLi9CWVJBTktcIik7XG5jb25zdCBCWVJFVlJBTksgPSByZXF1aXJlKFwiLi9CWVJFVlJBTktcIik7XG5jb25zdCBDREYgPSByZXF1aXJlKFwiLi9DREZcIik7XG5jb25zdCBDUkVBVEUgPSByZXF1aXJlKFwiLi9DUkVBVEVcIik7XG5jb25zdCBJTkZPID0gcmVxdWlyZShcIi4vSU5GT1wiKTtcbmNvbnN0IE1BWCA9IHJlcXVpcmUoXCIuL01BWFwiKTtcbmNvbnN0IE1FUkdFID0gcmVxdWlyZShcIi4vTUVSR0VcIik7XG5jb25zdCBNSU4gPSByZXF1aXJlKFwiLi9NSU5cIik7XG5jb25zdCBRVUFOVElMRSA9IHJlcXVpcmUoXCIuL1FVQU5USUxFXCIpO1xuY29uc3QgUkFOSyA9IHJlcXVpcmUoXCIuL1JBTktcIik7XG5jb25zdCBSRVNFVCA9IHJlcXVpcmUoXCIuL1JFU0VUXCIpO1xuY29uc3QgUkVWUkFOSyA9IHJlcXVpcmUoXCIuL1JFVlJBTktcIik7XG5jb25zdCBUUklNTUVEX01FQU4gPSByZXF1aXJlKFwiLi9UUklNTUVEX01FQU5cIik7XG5leHBvcnRzLmRlZmF1bHQgPSB7XG4gICAgQURELFxuICAgIGFkZDogQURELFxuICAgIEJZUkFOSyxcbiAgICBieVJhbms6IEJZUkFOSyxcbiAgICBCWVJFVlJBTkssXG4gICAgYnlSZXZSYW5rOiBCWVJFVlJBTkssXG4gICAgQ0RGLFxuICAgIGNkZjogQ0RGLFxuICAgIENSRUFURSxcbiAgICBjcmVhdGU6IENSRUFURSxcbiAgICBJTkZPLFxuICAgIGluZm86IElORk8sXG4gICAgTUFYLFxuICAgIG1heDogTUFYLFxuICAgIE1FUkdFLFxuICAgIG1lcmdlOiBNRVJHRSxcbiAgICBNSU4sXG4gICAgbWluOiBNSU4sXG4gICAgUVVBTlRJTEUsXG4gICAgcXVhbnRpbGU6IFFVQU5USUxFLFxuICAgIFJBTkssXG4gICAgcmFuazogUkFOSyxcbiAgICBSRVNFVCxcbiAgICByZXNldDogUkVTRVQsXG4gICAgUkVWUkFOSyxcbiAgICByZXZSYW5rOiBSRVZSQU5LLFxuICAgIFRSSU1NRURfTUVBTixcbiAgICB0cmltbWVkTWVhbjogVFJJTU1FRF9NRUFOXG59O1xuZnVuY3Rpb24gcHVzaENvbXByZXNzaW9uQXJndW1lbnQoYXJncywgb3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zPy5DT01QUkVTU0lPTikge1xuICAgICAgICBhcmdzLnB1c2goJ0NPTVBSRVNTSU9OJywgb3B0aW9ucy5DT01QUkVTU0lPTi50b1N0cmluZygpKTtcbiAgICB9XG4gICAgcmV0dXJuIGFyZ3M7XG59XG5leHBvcnRzLnB1c2hDb21wcmVzc2lvbkFyZ3VtZW50ID0gcHVzaENvbXByZXNzaW9uQXJndW1lbnQ7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Eb3VibGVSZXBseShyZXBseSkge1xuICAgIHN3aXRjaCAocmVwbHkpIHtcbiAgICAgICAgY2FzZSAnaW5mJzpcbiAgICAgICAgICAgIHJldHVybiBJbmZpbml0eTtcbiAgICAgICAgY2FzZSAnLWluZic6XG4gICAgICAgICAgICByZXR1cm4gLUluZmluaXR5O1xuICAgICAgICBjYXNlICduYW4nOlxuICAgICAgICAgICAgcmV0dXJuIE5hTjtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBwYXJzZUZsb2F0KHJlcGx5KTtcbiAgICB9XG59XG5leHBvcnRzLnRyYW5zZm9ybURvdWJsZVJlcGx5ID0gdHJhbnNmb3JtRG91YmxlUmVwbHk7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Eb3VibGVzUmVwbHkocmVwbHkpIHtcbiAgICByZXR1cm4gcmVwbHkubWFwKHRyYW5zZm9ybURvdWJsZVJlcGx5KTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtRG91Ymxlc1JlcGx5ID0gdHJhbnNmb3JtRG91Ymxlc1JlcGx5O1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSB2b2lkIDA7XG5jb25zdCBnZW5lcmljX3RyYW5zZm9ybWVyc18xID0gcmVxdWlyZShcIkByZWRpcy9jbGllbnQvZGlzdC9saWIvY29tbWFuZHMvZ2VuZXJpYy10cmFuc2Zvcm1lcnNcIik7XG5leHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IDE7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMoa2V5LCBpdGVtcykge1xuICAgIHJldHVybiAoMCwgZ2VuZXJpY190cmFuc2Zvcm1lcnNfMS5wdXNoVmVyZGljdEFyZ3VtZW50cykoWydUT1BLLkFERCcsIGtleV0sIGl0ZW1zKTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gZXhwb3J0cy5JU19SRUFEX09OTFkgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IHZvaWQgMDtcbmNvbnN0IGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEgPSByZXF1aXJlKFwiQHJlZGlzL2NsaWVudC9kaXN0L2xpYi9jb21tYW5kcy9nZW5lcmljLXRyYW5zZm9ybWVyc1wiKTtcbmV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gMTtcbmV4cG9ydHMuSVNfUkVBRF9PTkxZID0gdHJ1ZTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhrZXksIGl0ZW1zKSB7XG4gICAgcmV0dXJuICgwLCBnZW5lcmljX3RyYW5zZm9ybWVyc18xLnB1c2hWZXJkaWN0QXJndW1lbnRzKShbJ1RPUEsuQ09VTlQnLCBrZXldLCBpdGVtcyk7XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IGV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gdm9pZCAwO1xuZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSAxO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGtleSwgaXRlbXMpIHtcbiAgICBjb25zdCBhcmdzID0gWydUT1BLLklOQ1JCWScsIGtleV07XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoaXRlbXMpKSB7XG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykge1xuICAgICAgICAgICAgcHVzaEluY3JCeUl0ZW0oYXJncywgaXRlbSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHB1c2hJbmNyQnlJdGVtKGFyZ3MsIGl0ZW1zKTtcbiAgICB9XG4gICAgcmV0dXJuIGFyZ3M7XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbmZ1bmN0aW9uIHB1c2hJbmNyQnlJdGVtKGFyZ3MsIHsgaXRlbSwgaW5jcmVtZW50QnkgfSkge1xuICAgIGFyZ3MucHVzaChpdGVtLCBpbmNyZW1lbnRCeS50b1N0cmluZygpKTtcbn1cbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybVJlcGx5ID0gZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLklTX1JFQURfT05MWSA9IGV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gdm9pZCAwO1xuZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSAxO1xuZXhwb3J0cy5JU19SRUFEX09OTFkgPSB0cnVlO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGtleSkge1xuICAgIHJldHVybiBbJ1RPUEsuSU5GTycsIGtleV07XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbmZ1bmN0aW9uIHRyYW5zZm9ybVJlcGx5KHJlcGx5KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgazogcmVwbHlbMV0sXG4gICAgICAgIHdpZHRoOiByZXBseVszXSxcbiAgICAgICAgZGVwdGg6IHJlcGx5WzVdLFxuICAgICAgICBkZWNheTogTnVtYmVyKHJlcGx5WzddKVxuICAgIH07XG59XG5leHBvcnRzLnRyYW5zZm9ybVJlcGx5ID0gdHJhbnNmb3JtUmVwbHk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1SZXBseSA9IGV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gZXhwb3J0cy5JU19SRUFEX09OTFkgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IHZvaWQgMDtcbmV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gMTtcbmV4cG9ydHMuSVNfUkVBRF9PTkxZID0gdHJ1ZTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhrZXkpIHtcbiAgICByZXR1cm4gWydUT1BLLkxJU1QnLCBrZXksICdXSVRIQ09VTlQnXTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuZnVuY3Rpb24gdHJhbnNmb3JtUmVwbHkocmF3UmVwbHkpIHtcbiAgICBjb25zdCByZXBseSA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmF3UmVwbHkubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgcmVwbHkucHVzaCh7XG4gICAgICAgICAgICBpdGVtOiByYXdSZXBseVtpXSxcbiAgICAgICAgICAgIGNvdW50OiByYXdSZXBseVsrK2ldXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVwbHk7XG59XG5leHBvcnRzLnRyYW5zZm9ybVJlcGx5ID0gdHJhbnNmb3JtUmVwbHk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLklTX1JFQURfT05MWSA9IGV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gdm9pZCAwO1xuZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSAxO1xuZXhwb3J0cy5JU19SRUFEX09OTFkgPSB0cnVlO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGtleSkge1xuICAgIHJldHVybiBbJ1RPUEsuTElTVCcsIGtleV07XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IGV4cG9ydHMuSVNfUkVBRF9PTkxZID0gZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSB2b2lkIDA7XG5jb25zdCBnZW5lcmljX3RyYW5zZm9ybWVyc18xID0gcmVxdWlyZShcIkByZWRpcy9jbGllbnQvZGlzdC9saWIvY29tbWFuZHMvZ2VuZXJpYy10cmFuc2Zvcm1lcnNcIik7XG5leHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IDE7XG5leHBvcnRzLklTX1JFQURfT05MWSA9IHRydWU7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMoa2V5LCBpdGVtcykge1xuICAgIHJldHVybiAoMCwgZ2VuZXJpY190cmFuc2Zvcm1lcnNfMS5wdXNoVmVyZGljdEFyZ3VtZW50cykoWydUT1BLLlFVRVJZJywga2V5XSwgaXRlbXMpO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLklTX1JFQURfT05MWSA9IGV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gdm9pZCAwO1xuZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSAxO1xuZXhwb3J0cy5JU19SRUFEX09OTFkgPSB0cnVlO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGtleSwgdG9wSywgb3B0aW9ucykge1xuICAgIGNvbnN0IGFyZ3MgPSBbJ1RPUEsuUkVTRVJWRScsIGtleSwgdG9wSy50b1N0cmluZygpXTtcbiAgICBpZiAob3B0aW9ucykge1xuICAgICAgICBhcmdzLnB1c2gob3B0aW9ucy53aWR0aC50b1N0cmluZygpLCBvcHRpb25zLmRlcHRoLnRvU3RyaW5nKCksIG9wdGlvbnMuZGVjYXkudG9TdHJpbmcoKSk7XG4gICAgfVxuICAgIHJldHVybiBhcmdzO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgQUREID0gcmVxdWlyZShcIi4vQUREXCIpO1xuY29uc3QgQ09VTlQgPSByZXF1aXJlKFwiLi9DT1VOVFwiKTtcbmNvbnN0IElOQ1JCWSA9IHJlcXVpcmUoXCIuL0lOQ1JCWVwiKTtcbmNvbnN0IElORk8gPSByZXF1aXJlKFwiLi9JTkZPXCIpO1xuY29uc3QgTElTVF9XSVRIQ09VTlQgPSByZXF1aXJlKFwiLi9MSVNUX1dJVEhDT1VOVFwiKTtcbmNvbnN0IExJU1QgPSByZXF1aXJlKFwiLi9MSVNUXCIpO1xuY29uc3QgUVVFUlkgPSByZXF1aXJlKFwiLi9RVUVSWVwiKTtcbmNvbnN0IFJFU0VSVkUgPSByZXF1aXJlKFwiLi9SRVNFUlZFXCIpO1xuZXhwb3J0cy5kZWZhdWx0ID0ge1xuICAgIEFERCxcbiAgICBhZGQ6IEFERCxcbiAgICBDT1VOVCxcbiAgICBjb3VudDogQ09VTlQsXG4gICAgSU5DUkJZLFxuICAgIGluY3JCeTogSU5DUkJZLFxuICAgIElORk8sXG4gICAgaW5mbzogSU5GTyxcbiAgICBMSVNUX1dJVEhDT1VOVCxcbiAgICBsaXN0V2l0aENvdW50OiBMSVNUX1dJVEhDT1VOVCxcbiAgICBMSVNULFxuICAgIGxpc3Q6IExJU1QsXG4gICAgUVVFUlksXG4gICAgcXVlcnk6IFFVRVJZLFxuICAgIFJFU0VSVkUsXG4gICAgcmVzZXJ2ZTogUkVTRVJWRVxufTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBibG9vbV8xID0gcmVxdWlyZShcIi4vYmxvb21cIik7XG5jb25zdCBjb3VudF9taW5fc2tldGNoXzEgPSByZXF1aXJlKFwiLi9jb3VudC1taW4tc2tldGNoXCIpO1xuY29uc3QgY3Vja29vXzEgPSByZXF1aXJlKFwiLi9jdWNrb29cIik7XG5jb25zdCB0X2RpZ2VzdF8xID0gcmVxdWlyZShcIi4vdC1kaWdlc3RcIik7XG5jb25zdCB0b3Bfa18xID0gcmVxdWlyZShcIi4vdG9wLWtcIik7XG5leHBvcnRzLmRlZmF1bHQgPSB7XG4gICAgYmY6IGJsb29tXzEuZGVmYXVsdCxcbiAgICBjbXM6IGNvdW50X21pbl9za2V0Y2hfMS5kZWZhdWx0LFxuICAgIGNmOiBjdWNrb29fMS5kZWZhdWx0LFxuICAgIHREaWdlc3Q6IHRfZGlnZXN0XzEuZGVmYXVsdCxcbiAgICB0b3BLOiB0b3Bfa18xLmRlZmF1bHRcbn07XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xudmFyIGNvbW1hbmRzXzEgPSByZXF1aXJlKFwiLi9jb21tYW5kc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvbW1hbmRzXzEuZGVmYXVsdDsgfSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IGV4cG9ydHMuSVNfUkVBRF9PTkxZID0gdm9pZCAwO1xuZXhwb3J0cy5JU19SRUFEX09OTFkgPSB0cnVlO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGNvbmZpZ0tleSkge1xuICAgIHJldHVybiBbJ0dSQVBILkNPTkZJRycsICdHRVQnLCBjb25maWdLZXldO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB2b2lkIDA7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMoY29uZmlnS2V5LCB2YWx1ZSkge1xuICAgIHJldHVybiBbXG4gICAgICAgICdHUkFQSC5DT05GSUcnLFxuICAgICAgICAnU0VUJyxcbiAgICAgICAgY29uZmlnS2V5LFxuICAgICAgICB2YWx1ZS50b1N0cmluZygpXG4gICAgXTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSB2b2lkIDA7XG5leHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IDE7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMoa2V5KSB7XG4gICAgcmV0dXJuIFsnR1JBUEguREVMRVRFJywga2V5XTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gZXhwb3J0cy5JU19SRUFEX09OTFkgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IHZvaWQgMDtcbmV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gMTtcbmV4cG9ydHMuSVNfUkVBRF9PTkxZID0gdHJ1ZTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhrZXksIHF1ZXJ5KSB7XG4gICAgcmV0dXJuIFsnR1JBUEguRVhQTEFJTicsIGtleSwgcXVlcnldO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLklTX1JFQURfT05MWSA9IHZvaWQgMDtcbmV4cG9ydHMuSVNfUkVBRF9PTkxZID0gdHJ1ZTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cygpIHtcbiAgICByZXR1cm4gWydHUkFQSC5MSVNUJ107XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IGV4cG9ydHMuSVNfUkVBRF9PTkxZID0gZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSB2b2lkIDA7XG5leHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IDE7XG5leHBvcnRzLklTX1JFQURfT05MWSA9IHRydWU7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMoa2V5LCBxdWVyeSkge1xuICAgIHJldHVybiBbJ0dSQVBILlBST0ZJTEUnLCBrZXksIHF1ZXJ5XTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtUmVwbHkgPSBleHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IGV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gdm9pZCAwO1xuY29uc3QgXzEgPSByZXF1aXJlKFwiLlwiKTtcbmV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gMTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhncmFwaCwgcXVlcnksIG9wdGlvbnMsIGNvbXBhY3QpIHtcbiAgICByZXR1cm4gKDAsIF8xLnB1c2hRdWVyeUFyZ3VtZW50cykoWydHUkFQSC5RVUVSWSddLCBncmFwaCwgcXVlcnksIG9wdGlvbnMsIGNvbXBhY3QpO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG5mdW5jdGlvbiB0cmFuc2Zvcm1SZXBseShyZXBseSkge1xuICAgIHJldHVybiByZXBseS5sZW5ndGggPT09IDEgPyB7XG4gICAgICAgIGhlYWRlcnM6IHVuZGVmaW5lZCxcbiAgICAgICAgZGF0YTogdW5kZWZpbmVkLFxuICAgICAgICBtZXRhZGF0YTogcmVwbHlbMF1cbiAgICB9IDoge1xuICAgICAgICBoZWFkZXJzOiByZXBseVswXSxcbiAgICAgICAgZGF0YTogcmVwbHlbMV0sXG4gICAgICAgIG1ldGFkYXRhOiByZXBseVsyXVxuICAgIH07XG59XG5leHBvcnRzLnRyYW5zZm9ybVJlcGx5ID0gdHJhbnNmb3JtUmVwbHk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1SZXBseSA9IGV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gZXhwb3J0cy5JU19SRUFEX09OTFkgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IHZvaWQgMDtcbmNvbnN0IF8xID0gcmVxdWlyZShcIi5cIik7XG52YXIgUVVFUllfMSA9IHJlcXVpcmUoXCIuL1FVRVJZXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiRklSU1RfS0VZX0lOREVYXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBRVUVSWV8xLkZJUlNUX0tFWV9JTkRFWDsgfSB9KTtcbmV4cG9ydHMuSVNfUkVBRF9PTkxZID0gdHJ1ZTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhncmFwaCwgcXVlcnksIG9wdGlvbnMsIGNvbXBhY3QpIHtcbiAgICByZXR1cm4gKDAsIF8xLnB1c2hRdWVyeUFyZ3VtZW50cykoWydHUkFQSC5ST19RVUVSWSddLCBncmFwaCwgcXVlcnksIG9wdGlvbnMsIGNvbXBhY3QpO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG52YXIgUVVFUllfMiA9IHJlcXVpcmUoXCIuL1FVRVJZXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidHJhbnNmb3JtUmVwbHlcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFFVRVJZXzIudHJhbnNmb3JtUmVwbHk7IH0gfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1SZXBseSA9IGV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSBleHBvcnRzLklTX1JFQURfT05MWSA9IHZvaWQgMDtcbmV4cG9ydHMuSVNfUkVBRF9PTkxZID0gdHJ1ZTtcbmV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gMTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhrZXkpIHtcbiAgICByZXR1cm4gWydHUkFQSC5TTE9XTE9HJywga2V5XTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuZnVuY3Rpb24gdHJhbnNmb3JtUmVwbHkobG9ncykge1xuICAgIHJldHVybiBsb2dzLm1hcCgoW3RpbWVzdGFtcCwgY29tbWFuZCwgcXVlcnksIHRvb2tdKSA9PiAoe1xuICAgICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKE51bWJlcih0aW1lc3RhbXApICogMTAwMCksXG4gICAgICAgIGNvbW1hbmQsXG4gICAgICAgIHF1ZXJ5LFxuICAgICAgICB0b29rOiBOdW1iZXIodG9vaylcbiAgICB9KSk7XG59XG5leHBvcnRzLnRyYW5zZm9ybVJlcGx5ID0gdHJhbnNmb3JtUmVwbHk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5wdXNoUXVlcnlBcmd1bWVudHMgPSB2b2lkIDA7XG5jb25zdCBDT05GSUdfR0VUID0gcmVxdWlyZShcIi4vQ09ORklHX0dFVFwiKTtcbmNvbnN0IENPTkZJR19TRVQgPSByZXF1aXJlKFwiLi9DT05GSUdfU0VUXCIpO1xuO1xuY29uc3QgREVMRVRFID0gcmVxdWlyZShcIi4vREVMRVRFXCIpO1xuY29uc3QgRVhQTEFJTiA9IHJlcXVpcmUoXCIuL0VYUExBSU5cIik7XG5jb25zdCBMSVNUID0gcmVxdWlyZShcIi4vTElTVFwiKTtcbmNvbnN0IFBST0ZJTEUgPSByZXF1aXJlKFwiLi9QUk9GSUxFXCIpO1xuY29uc3QgUVVFUlkgPSByZXF1aXJlKFwiLi9RVUVSWVwiKTtcbmNvbnN0IFJPX1FVRVJZID0gcmVxdWlyZShcIi4vUk9fUVVFUllcIik7XG5jb25zdCBTTE9XTE9HID0gcmVxdWlyZShcIi4vU0xPV0xPR1wiKTtcbmV4cG9ydHMuZGVmYXVsdCA9IHtcbiAgICBDT05GSUdfR0VULFxuICAgIGNvbmZpZ0dldDogQ09ORklHX0dFVCxcbiAgICBDT05GSUdfU0VULFxuICAgIGNvbmZpZ1NldDogQ09ORklHX1NFVCxcbiAgICBERUxFVEUsXG4gICAgZGVsZXRlOiBERUxFVEUsXG4gICAgRVhQTEFJTixcbiAgICBleHBsYWluOiBFWFBMQUlOLFxuICAgIExJU1QsXG4gICAgbGlzdDogTElTVCxcbiAgICBQUk9GSUxFLFxuICAgIHByb2ZpbGU6IFBST0ZJTEUsXG4gICAgUVVFUlksXG4gICAgcXVlcnk6IFFVRVJZLFxuICAgIFJPX1FVRVJZLFxuICAgIHJvUXVlcnk6IFJPX1FVRVJZLFxuICAgIFNMT1dMT0csXG4gICAgc2xvd0xvZzogU0xPV0xPR1xufTtcbmZ1bmN0aW9uIHB1c2hRdWVyeUFyZ3VtZW50cyhhcmdzLCBncmFwaCwgcXVlcnksIG9wdGlvbnMsIGNvbXBhY3QpIHtcbiAgICBhcmdzLnB1c2goZ3JhcGgpO1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgYXJncy5wdXNoKHF1ZXJ5KTtcbiAgICAgICAgcHVzaFRpbWVvdXQoYXJncywgb3B0aW9ucyk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBhcmdzLnB1c2gob3B0aW9ucz8ucGFyYW1zID9cbiAgICAgICAgICAgIGBDWVBIRVIgJHtxdWVyeVBhcmFtc1RvU3RyaW5nKG9wdGlvbnMucGFyYW1zKX0gJHtxdWVyeX1gIDpcbiAgICAgICAgICAgIHF1ZXJ5KTtcbiAgICAgICAgaWYgKG9wdGlvbnM/LlRJTUVPVVQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcHVzaFRpbWVvdXQoYXJncywgb3B0aW9ucy5USU1FT1VUKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoY29tcGFjdCkge1xuICAgICAgICBhcmdzLnB1c2goJy0tY29tcGFjdCcpO1xuICAgIH1cbiAgICByZXR1cm4gYXJncztcbn1cbmV4cG9ydHMucHVzaFF1ZXJ5QXJndW1lbnRzID0gcHVzaFF1ZXJ5QXJndW1lbnRzO1xuZnVuY3Rpb24gcHVzaFRpbWVvdXQoYXJncywgdGltZW91dCkge1xuICAgIGFyZ3MucHVzaCgnVElNRU9VVCcsIHRpbWVvdXQudG9TdHJpbmcoKSk7XG59XG5mdW5jdGlvbiBxdWVyeVBhcmFtc1RvU3RyaW5nKHBhcmFtcykge1xuICAgIGNvbnN0IHBhcnRzID0gW107XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMocGFyYW1zKSkge1xuICAgICAgICBwYXJ0cy5wdXNoKGAke2tleX09JHtxdWVyeVBhcmFtVG9TdHJpbmcodmFsdWUpfWApO1xuICAgIH1cbiAgICByZXR1cm4gcGFydHMuam9pbignICcpO1xufVxuZnVuY3Rpb24gcXVlcnlQYXJhbVRvU3RyaW5nKHBhcmFtKSB7XG4gICAgaWYgKHBhcmFtID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiAnbnVsbCc7XG4gICAgfVxuICAgIHN3aXRjaCAodHlwZW9mIHBhcmFtKSB7XG4gICAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgICAgICByZXR1cm4gYFwiJHtwYXJhbS5yZXBsYWNlKC9bXCJcXFxcXS9nLCAnXFxcXCQmJyl9XCJgO1xuICAgICAgICBjYXNlICdudW1iZXInOlxuICAgICAgICBjYXNlICdib29sZWFuJzpcbiAgICAgICAgICAgIHJldHVybiBwYXJhbS50b1N0cmluZygpO1xuICAgIH1cbiAgICBpZiAoQXJyYXkuaXNBcnJheShwYXJhbSkpIHtcbiAgICAgICAgcmV0dXJuIGBbJHtwYXJhbS5tYXAocXVlcnlQYXJhbVRvU3RyaW5nKS5qb2luKCcsJyl9XWA7XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGVvZiBwYXJhbSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgY29uc3QgYm9keSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhwYXJhbSkpIHtcbiAgICAgICAgICAgIGJvZHkucHVzaChgJHtrZXl9OiR7cXVlcnlQYXJhbVRvU3RyaW5nKHZhbHVlKX1gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYHske2JvZHkuam9pbignLCcpfX1gO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgVW5leHBlY3RlZCBwYXJhbSB0eXBlICR7dHlwZW9mIHBhcmFtfSAke3BhcmFtfWApO1xuICAgIH1cbn1cbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19jbGFzc1ByaXZhdGVGaWVsZFNldCA9ICh0aGlzICYmIHRoaXMuX19jbGFzc1ByaXZhdGVGaWVsZFNldCkgfHwgZnVuY3Rpb24gKHJlY2VpdmVyLCBzdGF0ZSwgdmFsdWUsIGtpbmQsIGYpIHtcbiAgICBpZiAoa2luZCA9PT0gXCJtXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIG1ldGhvZCBpcyBub3Qgd3JpdGFibGVcIik7XG4gICAgaWYgKGtpbmQgPT09IFwiYVwiICYmICFmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgc2V0dGVyXCIpO1xuICAgIGlmICh0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyICE9PSBzdGF0ZSB8fCAhZiA6ICFzdGF0ZS5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHdyaXRlIHByaXZhdGUgbWVtYmVyIHRvIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7XG4gICAgcmV0dXJuIChraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlciwgdmFsdWUpIDogZiA/IGYudmFsdWUgPSB2YWx1ZSA6IHN0YXRlLnNldChyZWNlaXZlciwgdmFsdWUpKSwgdmFsdWU7XG59O1xudmFyIF9fY2xhc3NQcml2YXRlRmllbGRHZXQgPSAodGhpcyAmJiB0aGlzLl9fY2xhc3NQcml2YXRlRmllbGRHZXQpIHx8IGZ1bmN0aW9uIChyZWNlaXZlciwgc3RhdGUsIGtpbmQsIGYpIHtcbiAgICBpZiAoa2luZCA9PT0gXCJhXCIgJiYgIWYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBnZXR0ZXJcIik7XG4gICAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgcmVhZCBwcml2YXRlIG1lbWJlciBmcm9tIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7XG4gICAgcmV0dXJuIGtpbmQgPT09IFwibVwiID8gZiA6IGtpbmQgPT09IFwiYVwiID8gZi5jYWxsKHJlY2VpdmVyKSA6IGYgPyBmLnZhbHVlIDogc3RhdGUuZ2V0KHJlY2VpdmVyKTtcbn07XG52YXIgX0dyYXBoX2luc3RhbmNlcywgX0dyYXBoX2NsaWVudCwgX0dyYXBoX25hbWUsIF9HcmFwaF9tZXRhZGF0YSwgX0dyYXBoX3NldE1ldGFkYXRhUHJvbWlzZSwgX0dyYXBoX3VwZGF0ZU1ldGFkYXRhLCBfR3JhcGhfc2V0TWV0YWRhdGEsIF9HcmFwaF9jbGVhbk1ldGFkYXRhQXJyYXksIF9HcmFwaF9nZXRNZXRhZGF0YSwgX0dyYXBoX2dldE1ldGFkYXRhQXN5bmMsIF9HcmFwaF9wYXJzZVJlcGx5LCBfR3JhcGhfcGFyc2VWYWx1ZSwgX0dyYXBoX3BhcnNlRWRnZSwgX0dyYXBoX3BhcnNlTm9kZSwgX0dyYXBoX3BhcnNlUHJvcGVydGllcztcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9SZWRpc0dyYXBoL1JlZGlzR3JhcGgvYmxvYi9tYXN0ZXIvc3JjL3Jlc3VsdHNldC9mb3JtYXR0ZXJzL3Jlc3VsdHNldF9mb3JtYXR0ZXIuaCNMMjBcbnZhciBHcmFwaFZhbHVlVHlwZXM7XG4oZnVuY3Rpb24gKEdyYXBoVmFsdWVUeXBlcykge1xuICAgIEdyYXBoVmFsdWVUeXBlc1tHcmFwaFZhbHVlVHlwZXNbXCJVTktOT1dOXCJdID0gMF0gPSBcIlVOS05PV05cIjtcbiAgICBHcmFwaFZhbHVlVHlwZXNbR3JhcGhWYWx1ZVR5cGVzW1wiTlVMTFwiXSA9IDFdID0gXCJOVUxMXCI7XG4gICAgR3JhcGhWYWx1ZVR5cGVzW0dyYXBoVmFsdWVUeXBlc1tcIlNUUklOR1wiXSA9IDJdID0gXCJTVFJJTkdcIjtcbiAgICBHcmFwaFZhbHVlVHlwZXNbR3JhcGhWYWx1ZVR5cGVzW1wiSU5URUdFUlwiXSA9IDNdID0gXCJJTlRFR0VSXCI7XG4gICAgR3JhcGhWYWx1ZVR5cGVzW0dyYXBoVmFsdWVUeXBlc1tcIkJPT0xFQU5cIl0gPSA0XSA9IFwiQk9PTEVBTlwiO1xuICAgIEdyYXBoVmFsdWVUeXBlc1tHcmFwaFZhbHVlVHlwZXNbXCJET1VCTEVcIl0gPSA1XSA9IFwiRE9VQkxFXCI7XG4gICAgR3JhcGhWYWx1ZVR5cGVzW0dyYXBoVmFsdWVUeXBlc1tcIkFSUkFZXCJdID0gNl0gPSBcIkFSUkFZXCI7XG4gICAgR3JhcGhWYWx1ZVR5cGVzW0dyYXBoVmFsdWVUeXBlc1tcIkVER0VcIl0gPSA3XSA9IFwiRURHRVwiO1xuICAgIEdyYXBoVmFsdWVUeXBlc1tHcmFwaFZhbHVlVHlwZXNbXCJOT0RFXCJdID0gOF0gPSBcIk5PREVcIjtcbiAgICBHcmFwaFZhbHVlVHlwZXNbR3JhcGhWYWx1ZVR5cGVzW1wiUEFUSFwiXSA9IDldID0gXCJQQVRIXCI7XG4gICAgR3JhcGhWYWx1ZVR5cGVzW0dyYXBoVmFsdWVUeXBlc1tcIk1BUFwiXSA9IDEwXSA9IFwiTUFQXCI7XG4gICAgR3JhcGhWYWx1ZVR5cGVzW0dyYXBoVmFsdWVUeXBlc1tcIlBPSU5UXCJdID0gMTFdID0gXCJQT0lOVFwiO1xufSkoR3JhcGhWYWx1ZVR5cGVzIHx8IChHcmFwaFZhbHVlVHlwZXMgPSB7fSkpO1xuY2xhc3MgR3JhcGgge1xuICAgIGNvbnN0cnVjdG9yKGNsaWVudCwgbmFtZSkge1xuICAgICAgICBfR3JhcGhfaW5zdGFuY2VzLmFkZCh0aGlzKTtcbiAgICAgICAgX0dyYXBoX2NsaWVudC5zZXQodGhpcywgdm9pZCAwKTtcbiAgICAgICAgX0dyYXBoX25hbWUuc2V0KHRoaXMsIHZvaWQgMCk7XG4gICAgICAgIF9HcmFwaF9tZXRhZGF0YS5zZXQodGhpcywgdm9pZCAwKTtcbiAgICAgICAgX0dyYXBoX3NldE1ldGFkYXRhUHJvbWlzZS5zZXQodGhpcywgdm9pZCAwKTtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfR3JhcGhfY2xpZW50LCBjbGllbnQsIFwiZlwiKTtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfR3JhcGhfbmFtZSwgbmFtZSwgXCJmXCIpO1xuICAgIH1cbiAgICBhc3luYyBxdWVyeShxdWVyeSwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfR3JhcGhfaW5zdGFuY2VzLCBcIm1cIiwgX0dyYXBoX3BhcnNlUmVwbHkpLmNhbGwodGhpcywgYXdhaXQgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfR3JhcGhfY2xpZW50LCBcImZcIikuZ3JhcGgucXVlcnkoX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfR3JhcGhfbmFtZSwgXCJmXCIpLCBxdWVyeSwgb3B0aW9ucywgdHJ1ZSkpO1xuICAgIH1cbiAgICBhc3luYyByb1F1ZXJ5KHF1ZXJ5LCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9HcmFwaF9pbnN0YW5jZXMsIFwibVwiLCBfR3JhcGhfcGFyc2VSZXBseSkuY2FsbCh0aGlzLCBhd2FpdCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9HcmFwaF9jbGllbnQsIFwiZlwiKS5ncmFwaC5yb1F1ZXJ5KF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0dyYXBoX25hbWUsIFwiZlwiKSwgcXVlcnksIG9wdGlvbnMsIHRydWUpKTtcbiAgICB9XG59XG5fR3JhcGhfY2xpZW50ID0gbmV3IFdlYWtNYXAoKSwgX0dyYXBoX25hbWUgPSBuZXcgV2Vha01hcCgpLCBfR3JhcGhfbWV0YWRhdGEgPSBuZXcgV2Vha01hcCgpLCBfR3JhcGhfc2V0TWV0YWRhdGFQcm9taXNlID0gbmV3IFdlYWtNYXAoKSwgX0dyYXBoX2luc3RhbmNlcyA9IG5ldyBXZWFrU2V0KCksIF9HcmFwaF91cGRhdGVNZXRhZGF0YSA9IGZ1bmN0aW9uIF9HcmFwaF91cGRhdGVNZXRhZGF0YSgpIHtcbiAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9HcmFwaF9zZXRNZXRhZGF0YVByb21pc2UsIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0dyYXBoX3NldE1ldGFkYXRhUHJvbWlzZSwgXCJmXCIpID8/IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0dyYXBoX2luc3RhbmNlcywgXCJtXCIsIF9HcmFwaF9zZXRNZXRhZGF0YSkuY2FsbCh0aGlzKVxuICAgICAgICAuZmluYWxseSgoKSA9PiBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9HcmFwaF9zZXRNZXRhZGF0YVByb21pc2UsIHVuZGVmaW5lZCwgXCJmXCIpKSwgXCJmXCIpO1xuICAgIHJldHVybiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9HcmFwaF9zZXRNZXRhZGF0YVByb21pc2UsIFwiZlwiKTtcbn0sIF9HcmFwaF9zZXRNZXRhZGF0YSA9IFxuLy8gRE8gTk9UIHVzZSBkaXJlY3RseSwgdXNlICN1cGRhdGVNZXRhZGF0YSBpbnN0ZWFkXG5hc3luYyBmdW5jdGlvbiBfR3JhcGhfc2V0TWV0YWRhdGEoKSB7XG4gICAgY29uc3QgW2xhYmVscywgcmVsYXRpb25zaGlwVHlwZXMsIHByb3BlcnR5S2V5c10gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0dyYXBoX2NsaWVudCwgXCJmXCIpLmdyYXBoLnJvUXVlcnkoX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfR3JhcGhfbmFtZSwgXCJmXCIpLCAnQ0FMTCBkYi5sYWJlbHMoKScpLFxuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9HcmFwaF9jbGllbnQsIFwiZlwiKS5ncmFwaC5yb1F1ZXJ5KF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0dyYXBoX25hbWUsIFwiZlwiKSwgJ0NBTEwgZGIucmVsYXRpb25zaGlwVHlwZXMoKScpLFxuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9HcmFwaF9jbGllbnQsIFwiZlwiKS5ncmFwaC5yb1F1ZXJ5KF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0dyYXBoX25hbWUsIFwiZlwiKSwgJ0NBTEwgZGIucHJvcGVydHlLZXlzKCknKVxuICAgIF0pO1xuICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX0dyYXBoX21ldGFkYXRhLCB7XG4gICAgICAgIGxhYmVsczogX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfR3JhcGhfaW5zdGFuY2VzLCBcIm1cIiwgX0dyYXBoX2NsZWFuTWV0YWRhdGFBcnJheSkuY2FsbCh0aGlzLCBsYWJlbHMuZGF0YSksXG4gICAgICAgIHJlbGF0aW9uc2hpcFR5cGVzOiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9HcmFwaF9pbnN0YW5jZXMsIFwibVwiLCBfR3JhcGhfY2xlYW5NZXRhZGF0YUFycmF5KS5jYWxsKHRoaXMsIHJlbGF0aW9uc2hpcFR5cGVzLmRhdGEpLFxuICAgICAgICBwcm9wZXJ0eUtleXM6IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0dyYXBoX2luc3RhbmNlcywgXCJtXCIsIF9HcmFwaF9jbGVhbk1ldGFkYXRhQXJyYXkpLmNhbGwodGhpcywgcHJvcGVydHlLZXlzLmRhdGEpXG4gICAgfSwgXCJmXCIpO1xuICAgIHJldHVybiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9HcmFwaF9tZXRhZGF0YSwgXCJmXCIpO1xufSwgX0dyYXBoX2NsZWFuTWV0YWRhdGFBcnJheSA9IGZ1bmN0aW9uIF9HcmFwaF9jbGVhbk1ldGFkYXRhQXJyYXkoYXJyKSB7XG4gICAgcmV0dXJuIGFyci5tYXAoKFt2YWx1ZV0pID0+IHZhbHVlKTtcbn0sIF9HcmFwaF9nZXRNZXRhZGF0YSA9IGZ1bmN0aW9uIF9HcmFwaF9nZXRNZXRhZGF0YShrZXksIGlkKSB7XG4gICAgcmV0dXJuIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0dyYXBoX21ldGFkYXRhLCBcImZcIik/LltrZXldW2lkXSA/PyBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9HcmFwaF9pbnN0YW5jZXMsIFwibVwiLCBfR3JhcGhfZ2V0TWV0YWRhdGFBc3luYykuY2FsbCh0aGlzLCBrZXksIGlkKTtcbn0sIF9HcmFwaF9nZXRNZXRhZGF0YUFzeW5jID0gXG4vLyBETyBOT1QgdXNlIGRpcmVjdGx5LCB1c2UgI2dldE1ldGFkYXRhIGluc3RlYWRcbmFzeW5jIGZ1bmN0aW9uIF9HcmFwaF9nZXRNZXRhZGF0YUFzeW5jKGtleSwgaWQpIHtcbiAgICBjb25zdCB2YWx1ZSA9IChhd2FpdCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9HcmFwaF9pbnN0YW5jZXMsIFwibVwiLCBfR3JhcGhfdXBkYXRlTWV0YWRhdGEpLmNhbGwodGhpcykpW2tleV1baWRdO1xuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBmaW5kIHZhbHVlIGZyb20gJHtrZXl9WyR7aWR9XWApO1xuICAgIHJldHVybiB2YWx1ZTtcbn0sIF9HcmFwaF9wYXJzZVJlcGx5ID0gYXN5bmMgZnVuY3Rpb24gX0dyYXBoX3BhcnNlUmVwbHkocmVwbHkpIHtcbiAgICBpZiAoIXJlcGx5LmRhdGEpXG4gICAgICAgIHJldHVybiByZXBseTtcbiAgICBjb25zdCBwcm9taXNlcyA9IFtdLCBwYXJzZWQgPSB7XG4gICAgICAgIG1ldGFkYXRhOiByZXBseS5tZXRhZGF0YSxcbiAgICAgICAgZGF0YTogcmVwbHkuZGF0YS5tYXAoKHJvdykgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGF0YSA9IHt9O1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3cubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBkYXRhW3JlcGx5LmhlYWRlcnNbaV1bMV1dID0gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfR3JhcGhfaW5zdGFuY2VzLCBcIm1cIiwgX0dyYXBoX3BhcnNlVmFsdWUpLmNhbGwodGhpcywgcm93W2ldLCBwcm9taXNlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgICAgfSlcbiAgICB9O1xuICAgIGlmIChwcm9taXNlcy5sZW5ndGgpXG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKTtcbiAgICByZXR1cm4gcGFyc2VkO1xufSwgX0dyYXBoX3BhcnNlVmFsdWUgPSBmdW5jdGlvbiBfR3JhcGhfcGFyc2VWYWx1ZShbdmFsdWVUeXBlLCB2YWx1ZV0sIHByb21pc2VzKSB7XG4gICAgc3dpdGNoICh2YWx1ZVR5cGUpIHtcbiAgICAgICAgY2FzZSBHcmFwaFZhbHVlVHlwZXMuTlVMTDpcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICBjYXNlIEdyYXBoVmFsdWVUeXBlcy5TVFJJTkc6XG4gICAgICAgIGNhc2UgR3JhcGhWYWx1ZVR5cGVzLklOVEVHRVI6XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIGNhc2UgR3JhcGhWYWx1ZVR5cGVzLkJPT0xFQU46XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUgPT09ICd0cnVlJztcbiAgICAgICAgY2FzZSBHcmFwaFZhbHVlVHlwZXMuRE9VQkxFOlxuICAgICAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXQodmFsdWUpO1xuICAgICAgICBjYXNlIEdyYXBoVmFsdWVUeXBlcy5BUlJBWTpcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZS5tYXAoeCA9PiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9HcmFwaF9pbnN0YW5jZXMsIFwibVwiLCBfR3JhcGhfcGFyc2VWYWx1ZSkuY2FsbCh0aGlzLCB4LCBwcm9taXNlcykpO1xuICAgICAgICBjYXNlIEdyYXBoVmFsdWVUeXBlcy5FREdFOlxuICAgICAgICAgICAgcmV0dXJuIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0dyYXBoX2luc3RhbmNlcywgXCJtXCIsIF9HcmFwaF9wYXJzZUVkZ2UpLmNhbGwodGhpcywgdmFsdWUsIHByb21pc2VzKTtcbiAgICAgICAgY2FzZSBHcmFwaFZhbHVlVHlwZXMuTk9ERTpcbiAgICAgICAgICAgIHJldHVybiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9HcmFwaF9pbnN0YW5jZXMsIFwibVwiLCBfR3JhcGhfcGFyc2VOb2RlKS5jYWxsKHRoaXMsIHZhbHVlLCBwcm9taXNlcyk7XG4gICAgICAgIGNhc2UgR3JhcGhWYWx1ZVR5cGVzLlBBVEg6XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIG5vZGVzOiB2YWx1ZVswXVsxXS5tYXAoKFssIG5vZGVdKSA9PiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9HcmFwaF9pbnN0YW5jZXMsIFwibVwiLCBfR3JhcGhfcGFyc2VOb2RlKS5jYWxsKHRoaXMsIG5vZGUsIHByb21pc2VzKSksXG4gICAgICAgICAgICAgICAgZWRnZXM6IHZhbHVlWzFdWzFdLm1hcCgoWywgZWRnZV0pID0+IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0dyYXBoX2luc3RhbmNlcywgXCJtXCIsIF9HcmFwaF9wYXJzZUVkZ2UpLmNhbGwodGhpcywgZWRnZSwgcHJvbWlzZXMpKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgY2FzZSBHcmFwaFZhbHVlVHlwZXMuTUFQOlxuICAgICAgICAgICAgY29uc3QgbWFwID0ge307XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbWFwW3ZhbHVlW2krK11dID0gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfR3JhcGhfaW5zdGFuY2VzLCBcIm1cIiwgX0dyYXBoX3BhcnNlVmFsdWUpLmNhbGwodGhpcywgdmFsdWVbaV0sIHByb21pc2VzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBtYXA7XG4gICAgICAgIGNhc2UgR3JhcGhWYWx1ZVR5cGVzLlBPSU5UOlxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBsYXRpdHVkZTogcGFyc2VGbG9hdCh2YWx1ZVswXSksXG4gICAgICAgICAgICAgICAgbG9uZ2l0dWRlOiBwYXJzZUZsb2F0KHZhbHVlWzFdKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgdW5rbm93biBzY2FsYXIgdHlwZTogJHt2YWx1ZVR5cGV9YCk7XG4gICAgfVxufSwgX0dyYXBoX3BhcnNlRWRnZSA9IGZ1bmN0aW9uIF9HcmFwaF9wYXJzZUVkZ2UoW2lkLCByZWxhdGlvbnNoaXBUeXBlSWQsIHNvdXJjZUlkLCBkZXN0aW5hdGlvbklkLCBwcm9wZXJ0aWVzXSwgcHJvbWlzZXMpIHtcbiAgICBjb25zdCBlZGdlID0ge1xuICAgICAgICBpZCxcbiAgICAgICAgc291cmNlSWQsXG4gICAgICAgIGRlc3RpbmF0aW9uSWQsXG4gICAgICAgIHByb3BlcnRpZXM6IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0dyYXBoX2luc3RhbmNlcywgXCJtXCIsIF9HcmFwaF9wYXJzZVByb3BlcnRpZXMpLmNhbGwodGhpcywgcHJvcGVydGllcywgcHJvbWlzZXMpXG4gICAgfTtcbiAgICBjb25zdCByZWxhdGlvbnNoaXBUeXBlID0gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfR3JhcGhfaW5zdGFuY2VzLCBcIm1cIiwgX0dyYXBoX2dldE1ldGFkYXRhKS5jYWxsKHRoaXMsICdyZWxhdGlvbnNoaXBUeXBlcycsIHJlbGF0aW9uc2hpcFR5cGVJZCk7XG4gICAgaWYgKHJlbGF0aW9uc2hpcFR5cGUgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgIHByb21pc2VzLnB1c2gocmVsYXRpb25zaGlwVHlwZS50aGVuKHZhbHVlID0+IGVkZ2UucmVsYXRpb25zaGlwVHlwZSA9IHZhbHVlKSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBlZGdlLnJlbGF0aW9uc2hpcFR5cGUgPSByZWxhdGlvbnNoaXBUeXBlO1xuICAgIH1cbiAgICByZXR1cm4gZWRnZTtcbn0sIF9HcmFwaF9wYXJzZU5vZGUgPSBmdW5jdGlvbiBfR3JhcGhfcGFyc2VOb2RlKFtpZCwgbGFiZWxJZHMsIHByb3BlcnRpZXNdLCBwcm9taXNlcykge1xuICAgIGNvbnN0IGxhYmVscyA9IG5ldyBBcnJheShsYWJlbElkcy5sZW5ndGgpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGFiZWxJZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9HcmFwaF9pbnN0YW5jZXMsIFwibVwiLCBfR3JhcGhfZ2V0TWV0YWRhdGEpLmNhbGwodGhpcywgJ2xhYmVscycsIGxhYmVsSWRzW2ldKTtcbiAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICAgICAgcHJvbWlzZXMucHVzaCh2YWx1ZS50aGVuKHZhbHVlID0+IGxhYmVsc1tpXSA9IHZhbHVlKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBsYWJlbHNbaV0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBpZCxcbiAgICAgICAgbGFiZWxzLFxuICAgICAgICBwcm9wZXJ0aWVzOiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9HcmFwaF9pbnN0YW5jZXMsIFwibVwiLCBfR3JhcGhfcGFyc2VQcm9wZXJ0aWVzKS5jYWxsKHRoaXMsIHByb3BlcnRpZXMsIHByb21pc2VzKVxuICAgIH07XG59LCBfR3JhcGhfcGFyc2VQcm9wZXJ0aWVzID0gZnVuY3Rpb24gX0dyYXBoX3BhcnNlUHJvcGVydGllcyhyYXcsIHByb21pc2VzKSB7XG4gICAgY29uc3QgcGFyc2VkID0ge307XG4gICAgZm9yIChjb25zdCBbaWQsIHR5cGUsIHZhbHVlXSBvZiByYXcpIHtcbiAgICAgICAgY29uc3QgcGFyc2VkVmFsdWUgPSBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9HcmFwaF9pbnN0YW5jZXMsIFwibVwiLCBfR3JhcGhfcGFyc2VWYWx1ZSkuY2FsbCh0aGlzLCBbdHlwZSwgdmFsdWVdLCBwcm9taXNlcyksIGtleSA9IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0dyYXBoX2luc3RhbmNlcywgXCJtXCIsIF9HcmFwaF9nZXRNZXRhZGF0YSkuY2FsbCh0aGlzLCAncHJvcGVydHlLZXlzJywgaWQpO1xuICAgICAgICBpZiAoa2V5IGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICAgICAgcHJvbWlzZXMucHVzaChrZXkudGhlbihrZXkgPT4gcGFyc2VkW2tleV0gPSBwYXJzZWRWYWx1ZSkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcGFyc2VkW2tleV0gPSBwYXJzZWRWYWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcGFyc2VkO1xufTtcbmV4cG9ydHMuZGVmYXVsdCA9IEdyYXBoO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuR3JhcGggPSBleHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG52YXIgY29tbWFuZHNfMSA9IHJlcXVpcmUoXCIuL2NvbW1hbmRzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29tbWFuZHNfMS5kZWZhdWx0OyB9IH0pO1xudmFyIGdyYXBoXzEgPSByZXF1aXJlKFwiLi9ncmFwaFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkdyYXBoXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBncmFwaF8xLmRlZmF1bHQ7IH0gfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IHZvaWQgMDtcbmNvbnN0IF8xID0gcmVxdWlyZShcIi5cIik7XG5leHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IDE7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMoa2V5LCBwYXRoLCAuLi5qc29ucykge1xuICAgIGNvbnN0IGFyZ3MgPSBbJ0pTT04uQVJSQVBQRU5EJywga2V5LCBwYXRoXTtcbiAgICBmb3IgKGNvbnN0IGpzb24gb2YganNvbnMpIHtcbiAgICAgICAgYXJncy5wdXNoKCgwLCBfMS50cmFuc2Zvcm1SZWRpc0pzb25Bcmd1bWVudCkoanNvbikpO1xuICAgIH1cbiAgICByZXR1cm4gYXJncztcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gZXhwb3J0cy5JU19SRUFEX09OTFkgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IHZvaWQgMDtcbmNvbnN0IF8xID0gcmVxdWlyZShcIi5cIik7XG5leHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IDE7XG5leHBvcnRzLklTX1JFQURfT05MWSA9IHRydWU7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMoa2V5LCBwYXRoLCBqc29uLCBzdGFydCwgc3RvcCkge1xuICAgIGNvbnN0IGFyZ3MgPSBbJ0pTT04uQVJSSU5ERVgnLCBrZXksIHBhdGgsICgwLCBfMS50cmFuc2Zvcm1SZWRpc0pzb25Bcmd1bWVudCkoanNvbildO1xuICAgIGlmIChzdGFydCAhPT0gdW5kZWZpbmVkICYmIHN0YXJ0ICE9PSBudWxsKSB7XG4gICAgICAgIGFyZ3MucHVzaChzdGFydC50b1N0cmluZygpKTtcbiAgICAgICAgaWYgKHN0b3AgIT09IHVuZGVmaW5lZCAmJiBzdG9wICE9PSBudWxsKSB7XG4gICAgICAgICAgICBhcmdzLnB1c2goc3RvcC50b1N0cmluZygpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYXJncztcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSB2b2lkIDA7XG5jb25zdCBfMSA9IHJlcXVpcmUoXCIuXCIpO1xuZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSAxO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGtleSwgcGF0aCwgaW5kZXgsIC4uLmpzb25zKSB7XG4gICAgY29uc3QgYXJncyA9IFsnSlNPTi5BUlJJTlNFUlQnLCBrZXksIHBhdGgsIGluZGV4LnRvU3RyaW5nKCldO1xuICAgIGZvciAoY29uc3QganNvbiBvZiBqc29ucykge1xuICAgICAgICBhcmdzLnB1c2goKDAsIF8xLnRyYW5zZm9ybVJlZGlzSnNvbkFyZ3VtZW50KShqc29uKSk7XG4gICAgfVxuICAgIHJldHVybiBhcmdzO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLklTX1JFQURfT05MWSA9IGV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gdm9pZCAwO1xuZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSAxO1xuZXhwb3J0cy5JU19SRUFEX09OTFkgPSB0cnVlO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGtleSwgcGF0aCkge1xuICAgIGNvbnN0IGFyZ3MgPSBbJ0pTT04uQVJSTEVOJywga2V5XTtcbiAgICBpZiAocGF0aCkge1xuICAgICAgICBhcmdzLnB1c2gocGF0aCk7XG4gICAgfVxuICAgIHJldHVybiBhcmdzO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1SZXBseSA9IGV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSB2b2lkIDA7XG5jb25zdCBfMSA9IHJlcXVpcmUoXCIuXCIpO1xuZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSAxO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGtleSwgcGF0aCwgaW5kZXgpIHtcbiAgICBjb25zdCBhcmdzID0gWydKU09OLkFSUlBPUCcsIGtleV07XG4gICAgaWYgKHBhdGgpIHtcbiAgICAgICAgYXJncy5wdXNoKHBhdGgpO1xuICAgICAgICBpZiAoaW5kZXggIT09IHVuZGVmaW5lZCAmJiBpbmRleCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgYXJncy5wdXNoKGluZGV4LnRvU3RyaW5nKCkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhcmdzO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG5mdW5jdGlvbiB0cmFuc2Zvcm1SZXBseShyZXBseSkge1xuICAgIGlmIChyZXBseSA9PT0gbnVsbClcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkocmVwbHkpKSB7XG4gICAgICAgIHJldHVybiByZXBseS5tYXAoXzEudHJhbnNmb3JtUmVkaXNKc29uTnVsbFJlcGx5KTtcbiAgICB9XG4gICAgcmV0dXJuICgwLCBfMS50cmFuc2Zvcm1SZWRpc0pzb25OdWxsUmVwbHkpKHJlcGx5KTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtUmVwbHkgPSB0cmFuc2Zvcm1SZXBseTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IGV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gdm9pZCAwO1xuZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSAxO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGtleSwgcGF0aCwgc3RhcnQsIHN0b3ApIHtcbiAgICByZXR1cm4gWydKU09OLkFSUlRSSU0nLCBrZXksIHBhdGgsIHN0YXJ0LnRvU3RyaW5nKCksIHN0b3AudG9TdHJpbmcoKV07XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IGV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gdm9pZCAwO1xuZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSAyO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGtleSwgcGF0aCkge1xuICAgIGNvbnN0IGFyZ3MgPSBbJ0pTT04uREVCVUcnLCAnTUVNT1JZJywga2V5XTtcbiAgICBpZiAocGF0aCkge1xuICAgICAgICBhcmdzLnB1c2gocGF0aCk7XG4gICAgfVxuICAgIHJldHVybiBhcmdzO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IHZvaWQgMDtcbmV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gMTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhrZXksIHBhdGgpIHtcbiAgICBjb25zdCBhcmdzID0gWydKU09OLkRFTCcsIGtleV07XG4gICAgaWYgKHBhdGgpIHtcbiAgICAgICAgYXJncy5wdXNoKHBhdGgpO1xuICAgIH1cbiAgICByZXR1cm4gYXJncztcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSB2b2lkIDA7XG5leHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IDE7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMoa2V5LCBwYXRoKSB7XG4gICAgY29uc3QgYXJncyA9IFsnSlNPTi5GT1JHRVQnLCBrZXldO1xuICAgIGlmIChwYXRoKSB7XG4gICAgICAgIGFyZ3MucHVzaChwYXRoKTtcbiAgICB9XG4gICAgcmV0dXJuIGFyZ3M7XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybVJlcGx5ID0gZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLklTX1JFQURfT05MWSA9IGV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gdm9pZCAwO1xuY29uc3QgZ2VuZXJpY190cmFuc2Zvcm1lcnNfMSA9IHJlcXVpcmUoXCJAcmVkaXMvY2xpZW50L2Rpc3QvbGliL2NvbW1hbmRzL2dlbmVyaWMtdHJhbnNmb3JtZXJzXCIpO1xuZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSAxO1xuZXhwb3J0cy5JU19SRUFEX09OTFkgPSB0cnVlO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGtleSwgb3B0aW9ucykge1xuICAgIGxldCBhcmdzID0gWydKU09OLkdFVCcsIGtleV07XG4gICAgaWYgKG9wdGlvbnM/LnBhdGgpIHtcbiAgICAgICAgYXJncyA9ICgwLCBnZW5lcmljX3RyYW5zZm9ybWVyc18xLnB1c2hWZXJkaWN0QXJndW1lbnRzKShhcmdzLCBvcHRpb25zLnBhdGgpO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucz8uSU5ERU5UKSB7XG4gICAgICAgIGFyZ3MucHVzaCgnSU5ERU5UJywgb3B0aW9ucy5JTkRFTlQpO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucz8uTkVXTElORSkge1xuICAgICAgICBhcmdzLnB1c2goJ05FV0xJTkUnLCBvcHRpb25zLk5FV0xJTkUpO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucz8uU1BBQ0UpIHtcbiAgICAgICAgYXJncy5wdXNoKCdTUEFDRScsIG9wdGlvbnMuU1BBQ0UpO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucz8uTk9FU0NBUEUpIHtcbiAgICAgICAgYXJncy5wdXNoKCdOT0VTQ0FQRScpO1xuICAgIH1cbiAgICByZXR1cm4gYXJncztcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xudmFyIF8xID0gcmVxdWlyZShcIi5cIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ0cmFuc2Zvcm1SZXBseVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gXzEudHJhbnNmb3JtUmVkaXNKc29uTnVsbFJlcGx5OyB9IH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSB2b2lkIDA7XG5jb25zdCBfMSA9IHJlcXVpcmUoXCIuXCIpO1xuZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSAxO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGtleSwgcGF0aCwganNvbikge1xuICAgIHJldHVybiBbJ0pTT04uTUVSR0UnLCBrZXksIHBhdGgsICgwLCBfMS50cmFuc2Zvcm1SZWRpc0pzb25Bcmd1bWVudCkoanNvbildO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1SZXBseSA9IGV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gZXhwb3J0cy5JU19SRUFEX09OTFkgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IHZvaWQgMDtcbmNvbnN0IF8xID0gcmVxdWlyZShcIi5cIik7XG5leHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IDE7XG5leHBvcnRzLklTX1JFQURfT05MWSA9IHRydWU7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMoa2V5cywgcGF0aCkge1xuICAgIHJldHVybiBbXG4gICAgICAgICdKU09OLk1HRVQnLFxuICAgICAgICAuLi5rZXlzLFxuICAgICAgICBwYXRoXG4gICAgXTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuZnVuY3Rpb24gdHJhbnNmb3JtUmVwbHkocmVwbHkpIHtcbiAgICByZXR1cm4gcmVwbHkubWFwKF8xLnRyYW5zZm9ybVJlZGlzSnNvbk51bGxSZXBseSk7XG59XG5leHBvcnRzLnRyYW5zZm9ybVJlcGx5ID0gdHJhbnNmb3JtUmVwbHk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IHZvaWQgMDtcbmNvbnN0IF8xID0gcmVxdWlyZShcIi5cIik7XG5leHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IDE7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMoaXRlbXMpIHtcbiAgICBjb25zdCBhcmdzID0gbmV3IEFycmF5KDEgKyBpdGVtcy5sZW5ndGggKiAzKTtcbiAgICBhcmdzWzBdID0gJ0pTT04uTVNFVCc7XG4gICAgbGV0IGFyZ3NJbmRleCA9IDE7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBpdGVtID0gaXRlbXNbaV07XG4gICAgICAgIGFyZ3NbYXJnc0luZGV4KytdID0gaXRlbS5rZXk7XG4gICAgICAgIGFyZ3NbYXJnc0luZGV4KytdID0gaXRlbS5wYXRoO1xuICAgICAgICBhcmdzW2FyZ3NJbmRleCsrXSA9ICgwLCBfMS50cmFuc2Zvcm1SZWRpc0pzb25Bcmd1bWVudCkoaXRlbS52YWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiBhcmdzO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1SZXBseSA9IGV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSB2b2lkIDA7XG5leHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IDE7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMoa2V5LCBwYXRoLCBieSkge1xuICAgIHJldHVybiBbJ0pTT04uTlVNSU5DUkJZJywga2V5LCBwYXRoLCBieS50b1N0cmluZygpXTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xudmFyIF8xID0gcmVxdWlyZShcIi5cIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ0cmFuc2Zvcm1SZXBseVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gXzEudHJhbnNmb3JtTnVtYmVyc1JlcGx5OyB9IH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtUmVwbHkgPSBleHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IGV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gdm9pZCAwO1xuZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSAxO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGtleSwgcGF0aCwgYnkpIHtcbiAgICByZXR1cm4gWydKU09OLk5VTU1VTFRCWScsIGtleSwgcGF0aCwgYnkudG9TdHJpbmcoKV07XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbnZhciBfMSA9IHJlcXVpcmUoXCIuXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidHJhbnNmb3JtUmVwbHlcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIF8xLnRyYW5zZm9ybU51bWJlcnNSZXBseTsgfSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IGV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gdm9pZCAwO1xuZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSAxO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGtleSwgcGF0aCkge1xuICAgIGNvbnN0IGFyZ3MgPSBbJ0pTT04uT0JKS0VZUycsIGtleV07XG4gICAgaWYgKHBhdGgpIHtcbiAgICAgICAgYXJncy5wdXNoKHBhdGgpO1xuICAgIH1cbiAgICByZXR1cm4gYXJncztcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSB2b2lkIDA7XG5leHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IDE7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMoa2V5LCBwYXRoKSB7XG4gICAgY29uc3QgYXJncyA9IFsnSlNPTi5PQkpMRU4nLCBrZXldO1xuICAgIGlmIChwYXRoKSB7XG4gICAgICAgIGFyZ3MucHVzaChwYXRoKTtcbiAgICB9XG4gICAgcmV0dXJuIGFyZ3M7XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IGV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gdm9pZCAwO1xuZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSAxO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGtleSwgcGF0aCkge1xuICAgIGNvbnN0IGFyZ3MgPSBbJ0pTT04uUkVTUCcsIGtleV07XG4gICAgaWYgKHBhdGgpIHtcbiAgICAgICAgYXJncy5wdXNoKHBhdGgpO1xuICAgIH1cbiAgICByZXR1cm4gYXJncztcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSB2b2lkIDA7XG5jb25zdCBfMSA9IHJlcXVpcmUoXCIuXCIpO1xuZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSAxO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGtleSwgcGF0aCwganNvbiwgb3B0aW9ucykge1xuICAgIGNvbnN0IGFyZ3MgPSBbJ0pTT04uU0VUJywga2V5LCBwYXRoLCAoMCwgXzEudHJhbnNmb3JtUmVkaXNKc29uQXJndW1lbnQpKGpzb24pXTtcbiAgICBpZiAob3B0aW9ucz8uTlgpIHtcbiAgICAgICAgYXJncy5wdXNoKCdOWCcpO1xuICAgIH1cbiAgICBlbHNlIGlmIChvcHRpb25zPy5YWCkge1xuICAgICAgICBhcmdzLnB1c2goJ1hYJyk7XG4gICAgfVxuICAgIHJldHVybiBhcmdzO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IHZvaWQgMDtcbmNvbnN0IF8xID0gcmVxdWlyZShcIi5cIik7XG5leHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IDE7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMoLi4uW2tleSwgcGF0aE9yQXBwZW5kLCBhcHBlbmRdKSB7XG4gICAgY29uc3QgYXJncyA9IFsnSlNPTi5TVFJBUFBFTkQnLCBrZXldO1xuICAgIGlmIChhcHBlbmQgIT09IHVuZGVmaW5lZCAmJiBhcHBlbmQgIT09IG51bGwpIHtcbiAgICAgICAgYXJncy5wdXNoKHBhdGhPckFwcGVuZCwgKDAsIF8xLnRyYW5zZm9ybVJlZGlzSnNvbkFyZ3VtZW50KShhcHBlbmQpKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGFyZ3MucHVzaCgoMCwgXzEudHJhbnNmb3JtUmVkaXNKc29uQXJndW1lbnQpKHBhdGhPckFwcGVuZCkpO1xuICAgIH1cbiAgICByZXR1cm4gYXJncztcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gZXhwb3J0cy5JU19SRUFEX09OTFkgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IHZvaWQgMDtcbmV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gMTtcbmV4cG9ydHMuSVNfUkVBRF9PTkxZID0gdHJ1ZTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhrZXksIHBhdGgpIHtcbiAgICBjb25zdCBhcmdzID0gWydKU09OLlNUUkxFTicsIGtleV07XG4gICAgaWYgKHBhdGgpIHtcbiAgICAgICAgYXJncy5wdXNoKHBhdGgpO1xuICAgIH1cbiAgICByZXR1cm4gYXJncztcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSB2b2lkIDA7XG5leHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IDE7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMoa2V5LCBwYXRoKSB7XG4gICAgY29uc3QgYXJncyA9IFsnSlNPTi5UWVBFJywga2V5XTtcbiAgICBpZiAocGF0aCkge1xuICAgICAgICBhcmdzLnB1c2gocGF0aCk7XG4gICAgfVxuICAgIHJldHVybiBhcmdzO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1OdW1iZXJzUmVwbHkgPSBleHBvcnRzLnRyYW5zZm9ybVJlZGlzSnNvbk51bGxSZXBseSA9IGV4cG9ydHMudHJhbnNmb3JtUmVkaXNKc29uUmVwbHkgPSBleHBvcnRzLnRyYW5zZm9ybVJlZGlzSnNvbkFyZ3VtZW50ID0gdm9pZCAwO1xuY29uc3QgQVJSQVBQRU5EID0gcmVxdWlyZShcIi4vQVJSQVBQRU5EXCIpO1xuY29uc3QgQVJSSU5ERVggPSByZXF1aXJlKFwiLi9BUlJJTkRFWFwiKTtcbmNvbnN0IEFSUklOU0VSVCA9IHJlcXVpcmUoXCIuL0FSUklOU0VSVFwiKTtcbmNvbnN0IEFSUkxFTiA9IHJlcXVpcmUoXCIuL0FSUkxFTlwiKTtcbmNvbnN0IEFSUlBPUCA9IHJlcXVpcmUoXCIuL0FSUlBPUFwiKTtcbmNvbnN0IEFSUlRSSU0gPSByZXF1aXJlKFwiLi9BUlJUUklNXCIpO1xuY29uc3QgREVCVUdfTUVNT1JZID0gcmVxdWlyZShcIi4vREVCVUdfTUVNT1JZXCIpO1xuY29uc3QgREVMID0gcmVxdWlyZShcIi4vREVMXCIpO1xuY29uc3QgRk9SR0VUID0gcmVxdWlyZShcIi4vRk9SR0VUXCIpO1xuY29uc3QgR0VUID0gcmVxdWlyZShcIi4vR0VUXCIpO1xuY29uc3QgTUVSR0UgPSByZXF1aXJlKFwiLi9NRVJHRVwiKTtcbmNvbnN0IE1HRVQgPSByZXF1aXJlKFwiLi9NR0VUXCIpO1xuY29uc3QgTVNFVCA9IHJlcXVpcmUoXCIuL01TRVRcIik7XG5jb25zdCBOVU1JTkNSQlkgPSByZXF1aXJlKFwiLi9OVU1JTkNSQllcIik7XG5jb25zdCBOVU1NVUxUQlkgPSByZXF1aXJlKFwiLi9OVU1NVUxUQllcIik7XG5jb25zdCBPQkpLRVlTID0gcmVxdWlyZShcIi4vT0JKS0VZU1wiKTtcbmNvbnN0IE9CSkxFTiA9IHJlcXVpcmUoXCIuL09CSkxFTlwiKTtcbmNvbnN0IFJFU1AgPSByZXF1aXJlKFwiLi9SRVNQXCIpO1xuY29uc3QgU0VUID0gcmVxdWlyZShcIi4vU0VUXCIpO1xuY29uc3QgU1RSQVBQRU5EID0gcmVxdWlyZShcIi4vU1RSQVBQRU5EXCIpO1xuY29uc3QgU1RSTEVOID0gcmVxdWlyZShcIi4vU1RSTEVOXCIpO1xuY29uc3QgVFlQRSA9IHJlcXVpcmUoXCIuL1RZUEVcIik7XG5leHBvcnRzLmRlZmF1bHQgPSB7XG4gICAgQVJSQVBQRU5ELFxuICAgIGFyckFwcGVuZDogQVJSQVBQRU5ELFxuICAgIEFSUklOREVYLFxuICAgIGFyckluZGV4OiBBUlJJTkRFWCxcbiAgICBBUlJJTlNFUlQsXG4gICAgYXJySW5zZXJ0OiBBUlJJTlNFUlQsXG4gICAgQVJSTEVOLFxuICAgIGFyckxlbjogQVJSTEVOLFxuICAgIEFSUlBPUCxcbiAgICBhcnJQb3A6IEFSUlBPUCxcbiAgICBBUlJUUklNLFxuICAgIGFyclRyaW06IEFSUlRSSU0sXG4gICAgREVCVUdfTUVNT1JZLFxuICAgIGRlYnVnTWVtb3J5OiBERUJVR19NRU1PUlksXG4gICAgREVMLFxuICAgIGRlbDogREVMLFxuICAgIEZPUkdFVCxcbiAgICBmb3JnZXQ6IEZPUkdFVCxcbiAgICBHRVQsXG4gICAgZ2V0OiBHRVQsXG4gICAgTUVSR0UsXG4gICAgbWVyZ2U6IE1FUkdFLFxuICAgIE1HRVQsXG4gICAgbUdldDogTUdFVCxcbiAgICBNU0VULFxuICAgIG1TZXQ6IE1TRVQsXG4gICAgTlVNSU5DUkJZLFxuICAgIG51bUluY3JCeTogTlVNSU5DUkJZLFxuICAgIE5VTU1VTFRCWSxcbiAgICBudW1NdWx0Qnk6IE5VTU1VTFRCWSxcbiAgICBPQkpLRVlTLFxuICAgIG9iaktleXM6IE9CSktFWVMsXG4gICAgT0JKTEVOLFxuICAgIG9iakxlbjogT0JKTEVOLFxuICAgIFJFU1AsXG4gICAgcmVzcDogUkVTUCxcbiAgICBTRVQsXG4gICAgc2V0OiBTRVQsXG4gICAgU1RSQVBQRU5ELFxuICAgIHN0ckFwcGVuZDogU1RSQVBQRU5ELFxuICAgIFNUUkxFTixcbiAgICBzdHJMZW46IFNUUkxFTixcbiAgICBUWVBFLFxuICAgIHR5cGU6IFRZUEVcbn07XG5mdW5jdGlvbiB0cmFuc2Zvcm1SZWRpc0pzb25Bcmd1bWVudChqc29uKSB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGpzb24pO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1SZWRpc0pzb25Bcmd1bWVudCA9IHRyYW5zZm9ybVJlZGlzSnNvbkFyZ3VtZW50O1xuZnVuY3Rpb24gdHJhbnNmb3JtUmVkaXNKc29uUmVwbHkoanNvbikge1xuICAgIHJldHVybiBKU09OLnBhcnNlKGpzb24pO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1SZWRpc0pzb25SZXBseSA9IHRyYW5zZm9ybVJlZGlzSnNvblJlcGx5O1xuZnVuY3Rpb24gdHJhbnNmb3JtUmVkaXNKc29uTnVsbFJlcGx5KGpzb24pIHtcbiAgICBpZiAoanNvbiA9PT0gbnVsbClcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHRyYW5zZm9ybVJlZGlzSnNvblJlcGx5KGpzb24pO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1SZWRpc0pzb25OdWxsUmVwbHkgPSB0cmFuc2Zvcm1SZWRpc0pzb25OdWxsUmVwbHk7XG5mdW5jdGlvbiB0cmFuc2Zvcm1OdW1iZXJzUmVwbHkocmVwbHkpIHtcbiAgICByZXR1cm4gSlNPTi5wYXJzZShyZXBseSk7XG59XG5leHBvcnRzLnRyYW5zZm9ybU51bWJlcnNSZXBseSA9IHRyYW5zZm9ybU51bWJlcnNSZXBseTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG52YXIgY29tbWFuZHNfMSA9IHJlcXVpcmUoXCIuL2NvbW1hbmRzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29tbWFuZHNfMS5kZWZhdWx0OyB9IH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdm9pZCAwO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKCkge1xuICAgIHJldHVybiBbJ0ZULl9MSVNUJ107XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHZvaWQgMDtcbmNvbnN0IF8xID0gcmVxdWlyZShcIi5cIik7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMoaW5kZXgsIHNjaGVtYSkge1xuICAgIGNvbnN0IGFyZ3MgPSBbJ0ZULkFMVEVSJywgaW5kZXgsICdTQ0hFTUEnLCAnQUREJ107XG4gICAgKDAsIF8xLnB1c2hTY2hlbWEpKGFyZ3MsIHNjaGVtYSk7XG4gICAgcmV0dXJuIGFyZ3M7XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybVJlcGx5ID0gZXhwb3J0cy5wdXNoQWdncmVnYXRlaE9wdGlvbnMgPSBleHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IGV4cG9ydHMuSVNfUkVBRF9PTkxZID0gZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSBleHBvcnRzLkFnZ3JlZ2F0ZUdyb3VwQnlSZWR1Y2VycyA9IGV4cG9ydHMuQWdncmVnYXRlU3RlcHMgPSB2b2lkIDA7XG5jb25zdCBnZW5lcmljX3RyYW5zZm9ybWVyc18xID0gcmVxdWlyZShcIkByZWRpcy9jbGllbnQvZGlzdC9saWIvY29tbWFuZHMvZ2VuZXJpYy10cmFuc2Zvcm1lcnNcIik7XG5jb25zdCBfMSA9IHJlcXVpcmUoXCIuXCIpO1xudmFyIEFnZ3JlZ2F0ZVN0ZXBzO1xuKGZ1bmN0aW9uIChBZ2dyZWdhdGVTdGVwcykge1xuICAgIEFnZ3JlZ2F0ZVN0ZXBzW1wiR1JPVVBCWVwiXSA9IFwiR1JPVVBCWVwiO1xuICAgIEFnZ3JlZ2F0ZVN0ZXBzW1wiU09SVEJZXCJdID0gXCJTT1JUQllcIjtcbiAgICBBZ2dyZWdhdGVTdGVwc1tcIkFQUExZXCJdID0gXCJBUFBMWVwiO1xuICAgIEFnZ3JlZ2F0ZVN0ZXBzW1wiTElNSVRcIl0gPSBcIkxJTUlUXCI7XG4gICAgQWdncmVnYXRlU3RlcHNbXCJGSUxURVJcIl0gPSBcIkZJTFRFUlwiO1xufSkoQWdncmVnYXRlU3RlcHMgfHwgKGV4cG9ydHMuQWdncmVnYXRlU3RlcHMgPSBBZ2dyZWdhdGVTdGVwcyA9IHt9KSk7XG52YXIgQWdncmVnYXRlR3JvdXBCeVJlZHVjZXJzO1xuKGZ1bmN0aW9uIChBZ2dyZWdhdGVHcm91cEJ5UmVkdWNlcnMpIHtcbiAgICBBZ2dyZWdhdGVHcm91cEJ5UmVkdWNlcnNbXCJDT1VOVFwiXSA9IFwiQ09VTlRcIjtcbiAgICBBZ2dyZWdhdGVHcm91cEJ5UmVkdWNlcnNbXCJDT1VOVF9ESVNUSU5DVFwiXSA9IFwiQ09VTlRfRElTVElOQ1RcIjtcbiAgICBBZ2dyZWdhdGVHcm91cEJ5UmVkdWNlcnNbXCJDT1VOVF9ESVNUSU5DVElTSFwiXSA9IFwiQ09VTlRfRElTVElOQ1RJU0hcIjtcbiAgICBBZ2dyZWdhdGVHcm91cEJ5UmVkdWNlcnNbXCJTVU1cIl0gPSBcIlNVTVwiO1xuICAgIEFnZ3JlZ2F0ZUdyb3VwQnlSZWR1Y2Vyc1tcIk1JTlwiXSA9IFwiTUlOXCI7XG4gICAgQWdncmVnYXRlR3JvdXBCeVJlZHVjZXJzW1wiTUFYXCJdID0gXCJNQVhcIjtcbiAgICBBZ2dyZWdhdGVHcm91cEJ5UmVkdWNlcnNbXCJBVkdcIl0gPSBcIkFWR1wiO1xuICAgIEFnZ3JlZ2F0ZUdyb3VwQnlSZWR1Y2Vyc1tcIlNURERFVlwiXSA9IFwiU1REREVWXCI7XG4gICAgQWdncmVnYXRlR3JvdXBCeVJlZHVjZXJzW1wiUVVBTlRJTEVcIl0gPSBcIlFVQU5USUxFXCI7XG4gICAgQWdncmVnYXRlR3JvdXBCeVJlZHVjZXJzW1wiVE9MSVNUXCJdID0gXCJUT0xJU1RcIjtcbiAgICBBZ2dyZWdhdGVHcm91cEJ5UmVkdWNlcnNbXCJUT19MSVNUXCJdID0gXCJUT0xJU1RcIjtcbiAgICBBZ2dyZWdhdGVHcm91cEJ5UmVkdWNlcnNbXCJGSVJTVF9WQUxVRVwiXSA9IFwiRklSU1RfVkFMVUVcIjtcbiAgICBBZ2dyZWdhdGVHcm91cEJ5UmVkdWNlcnNbXCJSQU5ET01fU0FNUExFXCJdID0gXCJSQU5ET01fU0FNUExFXCI7XG59KShBZ2dyZWdhdGVHcm91cEJ5UmVkdWNlcnMgfHwgKGV4cG9ydHMuQWdncmVnYXRlR3JvdXBCeVJlZHVjZXJzID0gQWdncmVnYXRlR3JvdXBCeVJlZHVjZXJzID0ge30pKTtcbmV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gMTtcbmV4cG9ydHMuSVNfUkVBRF9PTkxZID0gdHJ1ZTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhpbmRleCwgcXVlcnksIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gcHVzaEFnZ3JlZ2F0ZWhPcHRpb25zKFsnRlQuQUdHUkVHQVRFJywgaW5kZXgsIHF1ZXJ5XSwgb3B0aW9ucyk7XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbmZ1bmN0aW9uIHB1c2hBZ2dyZWdhdGVoT3B0aW9ucyhhcmdzLCBvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnM/LlZFUkJBVElNKSB7XG4gICAgICAgIGFyZ3MucHVzaCgnVkVSQkFUSU0nKTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnM/LkFERFNDT1JFUykge1xuICAgICAgICBhcmdzLnB1c2goJ0FERFNDT1JFUycpO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucz8uTE9BRCkge1xuICAgICAgICBhcmdzLnB1c2goJ0xPQUQnKTtcbiAgICAgICAgKDAsIF8xLnB1c2hBcmd1bWVudHNXaXRoTGVuZ3RoKShhcmdzLCAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvcHRpb25zLkxPQUQpKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBsb2FkIG9mIG9wdGlvbnMuTE9BRCkge1xuICAgICAgICAgICAgICAgICAgICBwdXNoTG9hZEZpZWxkKGFyZ3MsIGxvYWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHB1c2hMb2FkRmllbGQoYXJncywgb3B0aW9ucy5MT0FEKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zPy5TVEVQUykge1xuICAgICAgICBmb3IgKGNvbnN0IHN0ZXAgb2Ygb3B0aW9ucy5TVEVQUykge1xuICAgICAgICAgICAgc3dpdGNoIChzdGVwLnR5cGUpIHtcbiAgICAgICAgICAgICAgICBjYXNlIEFnZ3JlZ2F0ZVN0ZXBzLkdST1VQQlk6XG4gICAgICAgICAgICAgICAgICAgIGFyZ3MucHVzaCgnR1JPVVBCWScpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXN0ZXAucHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5wdXNoKCcwJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAoMCwgZ2VuZXJpY190cmFuc2Zvcm1lcnNfMS5wdXNoVmVyZGljdEFyZ3VtZW50KShhcmdzLCBzdGVwLnByb3BlcnRpZXMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHN0ZXAuUkVEVUNFKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCByZWR1Y2VyIG9mIHN0ZXAuUkVEVUNFKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaEdyb3VwQnlSZWR1Y2VyKGFyZ3MsIHJlZHVjZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHVzaEdyb3VwQnlSZWR1Y2VyKGFyZ3MsIHN0ZXAuUkVEVUNFKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIEFnZ3JlZ2F0ZVN0ZXBzLlNPUlRCWTpcbiAgICAgICAgICAgICAgICAgICAgKDAsIF8xLnB1c2hTb3J0QnlBcmd1bWVudHMpKGFyZ3MsICdTT1JUQlknLCBzdGVwLkJZKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN0ZXAuTUFYKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzLnB1c2goJ01BWCcsIHN0ZXAuTUFYLnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgQWdncmVnYXRlU3RlcHMuQVBQTFk6XG4gICAgICAgICAgICAgICAgICAgIGFyZ3MucHVzaCgnQVBQTFknLCBzdGVwLmV4cHJlc3Npb24sICdBUycsIHN0ZXAuQVMpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIEFnZ3JlZ2F0ZVN0ZXBzLkxJTUlUOlxuICAgICAgICAgICAgICAgICAgICBhcmdzLnB1c2goJ0xJTUlUJywgc3RlcC5mcm9tLnRvU3RyaW5nKCksIHN0ZXAuc2l6ZS50b1N0cmluZygpKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBBZ2dyZWdhdGVTdGVwcy5GSUxURVI6XG4gICAgICAgICAgICAgICAgICAgIGFyZ3MucHVzaCgnRklMVEVSJywgc3RlcC5leHByZXNzaW9uKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgKDAsIF8xLnB1c2hQYXJhbXNBcmdzKShhcmdzLCBvcHRpb25zPy5QQVJBTVMpO1xuICAgIGlmIChvcHRpb25zPy5ESUFMRUNUKSB7XG4gICAgICAgIGFyZ3MucHVzaCgnRElBTEVDVCcsIG9wdGlvbnMuRElBTEVDVC50b1N0cmluZygpKTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnM/LlRJTUVPVVQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBhcmdzLnB1c2goJ1RJTUVPVVQnLCBvcHRpb25zLlRJTUVPVVQudG9TdHJpbmcoKSk7XG4gICAgfVxuICAgIHJldHVybiBhcmdzO1xufVxuZXhwb3J0cy5wdXNoQWdncmVnYXRlaE9wdGlvbnMgPSBwdXNoQWdncmVnYXRlaE9wdGlvbnM7XG5mdW5jdGlvbiBwdXNoTG9hZEZpZWxkKGFyZ3MsIHRvTG9hZCkge1xuICAgIGlmICh0eXBlb2YgdG9Mb2FkID09PSAnc3RyaW5nJykge1xuICAgICAgICBhcmdzLnB1c2godG9Mb2FkKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGFyZ3MucHVzaCh0b0xvYWQuaWRlbnRpZmllcik7XG4gICAgICAgIGlmICh0b0xvYWQuQVMpIHtcbiAgICAgICAgICAgIGFyZ3MucHVzaCgnQVMnLCB0b0xvYWQuQVMpO1xuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gcHVzaEdyb3VwQnlSZWR1Y2VyKGFyZ3MsIHJlZHVjZXIpIHtcbiAgICBhcmdzLnB1c2goJ1JFRFVDRScsIHJlZHVjZXIudHlwZSk7XG4gICAgc3dpdGNoIChyZWR1Y2VyLnR5cGUpIHtcbiAgICAgICAgY2FzZSBBZ2dyZWdhdGVHcm91cEJ5UmVkdWNlcnMuQ09VTlQ6XG4gICAgICAgICAgICBhcmdzLnB1c2goJzAnKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIEFnZ3JlZ2F0ZUdyb3VwQnlSZWR1Y2Vycy5DT1VOVF9ESVNUSU5DVDpcbiAgICAgICAgY2FzZSBBZ2dyZWdhdGVHcm91cEJ5UmVkdWNlcnMuQ09VTlRfRElTVElOQ1RJU0g6XG4gICAgICAgIGNhc2UgQWdncmVnYXRlR3JvdXBCeVJlZHVjZXJzLlNVTTpcbiAgICAgICAgY2FzZSBBZ2dyZWdhdGVHcm91cEJ5UmVkdWNlcnMuTUlOOlxuICAgICAgICBjYXNlIEFnZ3JlZ2F0ZUdyb3VwQnlSZWR1Y2Vycy5NQVg6XG4gICAgICAgIGNhc2UgQWdncmVnYXRlR3JvdXBCeVJlZHVjZXJzLkFWRzpcbiAgICAgICAgY2FzZSBBZ2dyZWdhdGVHcm91cEJ5UmVkdWNlcnMuU1REREVWOlxuICAgICAgICBjYXNlIEFnZ3JlZ2F0ZUdyb3VwQnlSZWR1Y2Vycy5UT0xJU1Q6XG4gICAgICAgICAgICBhcmdzLnB1c2goJzEnLCByZWR1Y2VyLnByb3BlcnR5KTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIEFnZ3JlZ2F0ZUdyb3VwQnlSZWR1Y2Vycy5RVUFOVElMRTpcbiAgICAgICAgICAgIGFyZ3MucHVzaCgnMicsIHJlZHVjZXIucHJvcGVydHksIHJlZHVjZXIucXVhbnRpbGUudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBBZ2dyZWdhdGVHcm91cEJ5UmVkdWNlcnMuRklSU1RfVkFMVUU6IHtcbiAgICAgICAgICAgICgwLCBfMS5wdXNoQXJndW1lbnRzV2l0aExlbmd0aCkoYXJncywgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGFyZ3MucHVzaChyZWR1Y2VyLnByb3BlcnR5KTtcbiAgICAgICAgICAgICAgICBpZiAocmVkdWNlci5CWSkge1xuICAgICAgICAgICAgICAgICAgICBhcmdzLnB1c2goJ0JZJyk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcmVkdWNlci5CWSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MucHVzaChyZWR1Y2VyLkJZKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MucHVzaChyZWR1Y2VyLkJZLnByb3BlcnR5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWR1Y2VyLkJZLmRpcmVjdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MucHVzaChyZWR1Y2VyLkJZLmRpcmVjdGlvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgQWdncmVnYXRlR3JvdXBCeVJlZHVjZXJzLlJBTkRPTV9TQU1QTEU6XG4gICAgICAgICAgICBhcmdzLnB1c2goJzInLCByZWR1Y2VyLnByb3BlcnR5LCByZWR1Y2VyLnNhbXBsZVNpemUudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICB9XG4gICAgaWYgKHJlZHVjZXIuQVMpIHtcbiAgICAgICAgYXJncy5wdXNoKCdBUycsIHJlZHVjZXIuQVMpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHRyYW5zZm9ybVJlcGx5KHJhd1JlcGx5KSB7XG4gICAgY29uc3QgcmVzdWx0cyA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAxOyBpIDwgcmF3UmVwbHkubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgcmVzdWx0cy5wdXNoKCgwLCBnZW5lcmljX3RyYW5zZm9ybWVyc18xLnRyYW5zZm9ybVR1cGxlc1JlcGx5KShyYXdSZXBseVtpXSkpO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICB0b3RhbDogcmF3UmVwbHlbMF0sXG4gICAgICAgIHJlc3VsdHNcbiAgICB9O1xufVxuZXhwb3J0cy50cmFuc2Zvcm1SZXBseSA9IHRyYW5zZm9ybVJlcGx5O1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtUmVwbHkgPSBleHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IGV4cG9ydHMuSVNfUkVBRF9PTkxZID0gZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSB2b2lkIDA7XG5jb25zdCBBR0dSRUdBVEVfMSA9IHJlcXVpcmUoXCIuL0FHR1JFR0FURVwiKTtcbnZhciBBR0dSRUdBVEVfMiA9IHJlcXVpcmUoXCIuL0FHR1JFR0FURVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkZJUlNUX0tFWV9JTkRFWFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gQUdHUkVHQVRFXzIuRklSU1RfS0VZX0lOREVYOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiSVNfUkVBRF9PTkxZXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBBR0dSRUdBVEVfMi5JU19SRUFEX09OTFk7IH0gfSk7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMoaW5kZXgsIHF1ZXJ5LCBvcHRpb25zKSB7XG4gICAgY29uc3QgYXJncyA9ICgwLCBBR0dSRUdBVEVfMS50cmFuc2Zvcm1Bcmd1bWVudHMpKGluZGV4LCBxdWVyeSwgb3B0aW9ucyk7XG4gICAgYXJncy5wdXNoKCdXSVRIQ1VSU09SJyk7XG4gICAgaWYgKG9wdGlvbnM/LkNPVU5UKSB7XG4gICAgICAgIGFyZ3MucHVzaCgnQ09VTlQnLCBvcHRpb25zLkNPVU5ULnRvU3RyaW5nKCkpO1xuICAgIH1cbiAgICByZXR1cm4gYXJncztcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuZnVuY3Rpb24gdHJhbnNmb3JtUmVwbHkocmVwbHkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICAuLi4oMCwgQUdHUkVHQVRFXzEudHJhbnNmb3JtUmVwbHkpKHJlcGx5WzBdKSxcbiAgICAgICAgY3Vyc29yOiByZXBseVsxXVxuICAgIH07XG59XG5leHBvcnRzLnRyYW5zZm9ybVJlcGx5ID0gdHJhbnNmb3JtUmVwbHk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB2b2lkIDA7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMobmFtZSwgaW5kZXgpIHtcbiAgICByZXR1cm4gWydGVC5BTElBU0FERCcsIG5hbWUsIGluZGV4XTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdm9pZCAwO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKG5hbWUsIGluZGV4KSB7XG4gICAgcmV0dXJuIFsnRlQuQUxJQVNERUwnLCBuYW1lLCBpbmRleF07XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHZvaWQgMDtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhuYW1lLCBpbmRleCkge1xuICAgIHJldHVybiBbJ0ZULkFMSUFTVVBEQVRFJywgbmFtZSwgaW5kZXhdO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1SZXBseSA9IGV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdm9pZCAwO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKG9wdGlvbikge1xuICAgIHJldHVybiBbJ0ZULkNPTkZJRycsICdHRVQnLCBvcHRpb25dO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG5mdW5jdGlvbiB0cmFuc2Zvcm1SZXBseShyYXdSZXBseSkge1xuICAgIGNvbnN0IHRyYW5zZm9ybWVkUmVwbHkgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIHJhd1JlcGx5KSB7XG4gICAgICAgIHRyYW5zZm9ybWVkUmVwbHlba2V5XSA9IHZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gdHJhbnNmb3JtZWRSZXBseTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtUmVwbHkgPSB0cmFuc2Zvcm1SZXBseTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHZvaWQgMDtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhvcHRpb24sIHZhbHVlKSB7XG4gICAgcmV0dXJuIFsnRlQuQ09ORklHJywgJ1NFVCcsIG9wdGlvbiwgdmFsdWVdO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB2b2lkIDA7XG5jb25zdCBnZW5lcmljX3RyYW5zZm9ybWVyc18xID0gcmVxdWlyZShcIkByZWRpcy9jbGllbnQvZGlzdC9saWIvY29tbWFuZHMvZ2VuZXJpYy10cmFuc2Zvcm1lcnNcIik7XG5jb25zdCBfMSA9IHJlcXVpcmUoXCIuXCIpO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGluZGV4LCBzY2hlbWEsIG9wdGlvbnMpIHtcbiAgICBjb25zdCBhcmdzID0gWydGVC5DUkVBVEUnLCBpbmRleF07XG4gICAgaWYgKG9wdGlvbnM/Lk9OKSB7XG4gICAgICAgIGFyZ3MucHVzaCgnT04nLCBvcHRpb25zLk9OKTtcbiAgICB9XG4gICAgKDAsIGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEucHVzaE9wdGlvbmFsVmVyZGljdEFyZ3VtZW50KShhcmdzLCAnUFJFRklYJywgb3B0aW9ucz8uUFJFRklYKTtcbiAgICBpZiAob3B0aW9ucz8uRklMVEVSKSB7XG4gICAgICAgIGFyZ3MucHVzaCgnRklMVEVSJywgb3B0aW9ucy5GSUxURVIpO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucz8uTEFOR1VBR0UpIHtcbiAgICAgICAgYXJncy5wdXNoKCdMQU5HVUFHRScsIG9wdGlvbnMuTEFOR1VBR0UpO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucz8uTEFOR1VBR0VfRklFTEQpIHtcbiAgICAgICAgYXJncy5wdXNoKCdMQU5HVUFHRV9GSUVMRCcsIG9wdGlvbnMuTEFOR1VBR0VfRklFTEQpO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucz8uU0NPUkUpIHtcbiAgICAgICAgYXJncy5wdXNoKCdTQ09SRScsIG9wdGlvbnMuU0NPUkUudG9TdHJpbmcoKSk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zPy5TQ09SRV9GSUVMRCkge1xuICAgICAgICBhcmdzLnB1c2goJ1NDT1JFX0ZJRUxEJywgb3B0aW9ucy5TQ09SRV9GSUVMRCk7XG4gICAgfVxuICAgIC8vIGlmIChvcHRpb25zPy5QQVlMT0FEX0ZJRUxEKSB7XG4gICAgLy8gICAgIGFyZ3MucHVzaCgnUEFZTE9BRF9GSUVMRCcsIG9wdGlvbnMuUEFZTE9BRF9GSUVMRCk7XG4gICAgLy8gfVxuICAgIGlmIChvcHRpb25zPy5NQVhURVhURklFTERTKSB7XG4gICAgICAgIGFyZ3MucHVzaCgnTUFYVEVYVEZJRUxEUycpO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucz8uVEVNUE9SQVJZKSB7XG4gICAgICAgIGFyZ3MucHVzaCgnVEVNUE9SQVJZJywgb3B0aW9ucy5URU1QT1JBUlkudG9TdHJpbmcoKSk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zPy5OT09GRlNFVFMpIHtcbiAgICAgICAgYXJncy5wdXNoKCdOT09GRlNFVFMnKTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnM/Lk5PSEwpIHtcbiAgICAgICAgYXJncy5wdXNoKCdOT0hMJyk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zPy5OT0ZJRUxEUykge1xuICAgICAgICBhcmdzLnB1c2goJ05PRklFTERTJyk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zPy5OT0ZSRVFTKSB7XG4gICAgICAgIGFyZ3MucHVzaCgnTk9GUkVRUycpO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucz8uU0tJUElOSVRJQUxTQ0FOKSB7XG4gICAgICAgIGFyZ3MucHVzaCgnU0tJUElOSVRJQUxTQ0FOJyk7XG4gICAgfVxuICAgICgwLCBnZW5lcmljX3RyYW5zZm9ybWVyc18xLnB1c2hPcHRpb25hbFZlcmRpY3RBcmd1bWVudCkoYXJncywgJ1NUT1BXT1JEUycsIG9wdGlvbnM/LlNUT1BXT1JEUyk7XG4gICAgYXJncy5wdXNoKCdTQ0hFTUEnKTtcbiAgICAoMCwgXzEucHVzaFNjaGVtYSkoYXJncywgc2NoZW1hKTtcbiAgICByZXR1cm4gYXJncztcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSB2b2lkIDA7XG5leHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IDE7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMoaW5kZXgsIGN1cnNvcklkKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgICAgJ0ZULkNVUlNPUicsXG4gICAgICAgICdERUwnLFxuICAgICAgICBpbmRleCxcbiAgICAgICAgY3Vyc29ySWQudG9TdHJpbmcoKVxuICAgIF07XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybVJlcGx5ID0gZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLklTX1JFQURfT05MWSA9IGV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gdm9pZCAwO1xuZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSAxO1xuZXhwb3J0cy5JU19SRUFEX09OTFkgPSB0cnVlO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGluZGV4LCBjdXJzb3IsIG9wdGlvbnMpIHtcbiAgICBjb25zdCBhcmdzID0gW1xuICAgICAgICAnRlQuQ1VSU09SJyxcbiAgICAgICAgJ1JFQUQnLFxuICAgICAgICBpbmRleCxcbiAgICAgICAgY3Vyc29yLnRvU3RyaW5nKClcbiAgICBdO1xuICAgIGlmIChvcHRpb25zPy5DT1VOVCkge1xuICAgICAgICBhcmdzLnB1c2goJ0NPVU5UJywgb3B0aW9ucy5DT1VOVC50b1N0cmluZygpKTtcbiAgICB9XG4gICAgcmV0dXJuIGFyZ3M7XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbnZhciBBR0dSRUdBVEVfV0lUSENVUlNPUl8xID0gcmVxdWlyZShcIi4vQUdHUkVHQVRFX1dJVEhDVVJTT1JcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ0cmFuc2Zvcm1SZXBseVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gQUdHUkVHQVRFX1dJVEhDVVJTT1JfMS50cmFuc2Zvcm1SZXBseTsgfSB9KTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHZvaWQgMDtcbmNvbnN0IGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEgPSByZXF1aXJlKFwiQHJlZGlzL2NsaWVudC9kaXN0L2xpYi9jb21tYW5kcy9nZW5lcmljLXRyYW5zZm9ybWVyc1wiKTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhkaWN0aW9uYXJ5LCB0ZXJtKSB7XG4gICAgcmV0dXJuICgwLCBnZW5lcmljX3RyYW5zZm9ybWVyc18xLnB1c2hWZXJkaWN0QXJndW1lbnRzKShbJ0ZULkRJQ1RBREQnLCBkaWN0aW9uYXJ5XSwgdGVybSk7XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHZvaWQgMDtcbmNvbnN0IGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEgPSByZXF1aXJlKFwiQHJlZGlzL2NsaWVudC9kaXN0L2xpYi9jb21tYW5kcy9nZW5lcmljLXRyYW5zZm9ybWVyc1wiKTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhkaWN0aW9uYXJ5LCB0ZXJtKSB7XG4gICAgcmV0dXJuICgwLCBnZW5lcmljX3RyYW5zZm9ybWVyc18xLnB1c2hWZXJkaWN0QXJndW1lbnRzKShbJ0ZULkRJQ1RERUwnLCBkaWN0aW9uYXJ5XSwgdGVybSk7XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHZvaWQgMDtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhkaWN0aW9uYXJ5KSB7XG4gICAgcmV0dXJuIFsnRlQuRElDVERVTVAnLCBkaWN0aW9uYXJ5XTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdm9pZCAwO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGluZGV4LCBvcHRpb25zKSB7XG4gICAgY29uc3QgYXJncyA9IFsnRlQuRFJPUElOREVYJywgaW5kZXhdO1xuICAgIGlmIChvcHRpb25zPy5ERCkge1xuICAgICAgICBhcmdzLnB1c2goJ0REJyk7XG4gICAgfVxuICAgIHJldHVybiBhcmdzO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLklTX1JFQURfT05MWSA9IHZvaWQgMDtcbmNvbnN0IF8xID0gcmVxdWlyZShcIi5cIik7XG5leHBvcnRzLklTX1JFQURfT05MWSA9IHRydWU7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMoaW5kZXgsIHF1ZXJ5LCBvcHRpb25zKSB7XG4gICAgY29uc3QgYXJncyA9IFsnRlQuRVhQTEFJTicsIGluZGV4LCBxdWVyeV07XG4gICAgKDAsIF8xLnB1c2hQYXJhbXNBcmdzKShhcmdzLCBvcHRpb25zPy5QQVJBTVMpO1xuICAgIGlmIChvcHRpb25zPy5ESUFMRUNUKSB7XG4gICAgICAgIGFyZ3MucHVzaCgnRElBTEVDVCcsIG9wdGlvbnMuRElBTEVDVC50b1N0cmluZygpKTtcbiAgICB9XG4gICAgcmV0dXJuIGFyZ3M7XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IGV4cG9ydHMuSVNfUkVBRF9PTkxZID0gdm9pZCAwO1xuZXhwb3J0cy5JU19SRUFEX09OTFkgPSB0cnVlO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGluZGV4LCBxdWVyeSkge1xuICAgIHJldHVybiBbJ0ZULkVYUExBSU5DTEknLCBpbmRleCwgcXVlcnldO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1SZXBseSA9IGV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdm9pZCAwO1xuY29uc3QgZ2VuZXJpY190cmFuc2Zvcm1lcnNfMSA9IHJlcXVpcmUoXCJAcmVkaXMvY2xpZW50L2Rpc3QvbGliL2NvbW1hbmRzL2dlbmVyaWMtdHJhbnNmb3JtZXJzXCIpO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGluZGV4KSB7XG4gICAgcmV0dXJuIFsnRlQuSU5GTycsIGluZGV4XTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuZnVuY3Rpb24gdHJhbnNmb3JtUmVwbHkocmF3UmVwbHkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBpbmRleE5hbWU6IHJhd1JlcGx5WzFdLFxuICAgICAgICBpbmRleE9wdGlvbnM6IHJhd1JlcGx5WzNdLFxuICAgICAgICBpbmRleERlZmluaXRpb246ICgwLCBnZW5lcmljX3RyYW5zZm9ybWVyc18xLnRyYW5zZm9ybVR1cGxlc1JlcGx5KShyYXdSZXBseVs1XSksXG4gICAgICAgIGF0dHJpYnV0ZXM6IHJhd1JlcGx5WzddLm1hcChhdHRyaWJ1dGUgPT4gKDAsIGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEudHJhbnNmb3JtVHVwbGVzUmVwbHkpKGF0dHJpYnV0ZSkpLFxuICAgICAgICBudW1Eb2NzOiByYXdSZXBseVs5XSxcbiAgICAgICAgbWF4RG9jSWQ6IHJhd1JlcGx5WzExXSxcbiAgICAgICAgbnVtVGVybXM6IHJhd1JlcGx5WzEzXSxcbiAgICAgICAgbnVtUmVjb3JkczogcmF3UmVwbHlbMTVdLFxuICAgICAgICBpbnZlcnRlZFN6TWI6IHJhd1JlcGx5WzE3XSxcbiAgICAgICAgdmVjdG9ySW5kZXhTek1iOiByYXdSZXBseVsxOV0sXG4gICAgICAgIHRvdGFsSW52ZXJ0ZWRJbmRleEJsb2NrczogcmF3UmVwbHlbMjFdLFxuICAgICAgICBvZmZzZXRWZWN0b3JzU3pNYjogcmF3UmVwbHlbMjNdLFxuICAgICAgICBkb2NUYWJsZVNpemVNYjogcmF3UmVwbHlbMjVdLFxuICAgICAgICBzb3J0YWJsZVZhbHVlc1NpemVNYjogcmF3UmVwbHlbMjddLFxuICAgICAgICBrZXlUYWJsZVNpemVNYjogcmF3UmVwbHlbMjldLFxuICAgICAgICByZWNvcmRzUGVyRG9jQXZnOiByYXdSZXBseVszMV0sXG4gICAgICAgIGJ5dGVzUGVyUmVjb3JkQXZnOiByYXdSZXBseVszM10sXG4gICAgICAgIG9mZnNldHNQZXJUZXJtQXZnOiByYXdSZXBseVszNV0sXG4gICAgICAgIG9mZnNldEJpdHNQZXJSZWNvcmRBdmc6IHJhd1JlcGx5WzM3XSxcbiAgICAgICAgaGFzaEluZGV4aW5nRmFpbHVyZXM6IHJhd1JlcGx5WzM5XSxcbiAgICAgICAgaW5kZXhpbmc6IHJhd1JlcGx5WzQxXSxcbiAgICAgICAgcGVyY2VudEluZGV4ZWQ6IHJhd1JlcGx5WzQzXSxcbiAgICAgICAgZ2NTdGF0czoge1xuICAgICAgICAgICAgYnl0ZXNDb2xsZWN0ZWQ6IHJhd1JlcGx5WzQ1XVsxXSxcbiAgICAgICAgICAgIHRvdGFsTXNSdW46IHJhd1JlcGx5WzQ1XVszXSxcbiAgICAgICAgICAgIHRvdGFsQ3ljbGVzOiByYXdSZXBseVs0NV1bNV0sXG4gICAgICAgICAgICBhdmVyYWdlQ3ljbGVUaW1lTXM6IHJhd1JlcGx5WzQ1XVs3XSxcbiAgICAgICAgICAgIGxhc3RSdW5UaW1lTXM6IHJhd1JlcGx5WzQ1XVs5XSxcbiAgICAgICAgICAgIGdjTnVtZXJpY1RyZWVzTWlzc2VkOiByYXdSZXBseVs0NV1bMTFdLFxuICAgICAgICAgICAgZ2NCbG9ja3NEZW5pZWQ6IHJhd1JlcGx5WzQ1XVsxM11cbiAgICAgICAgfSxcbiAgICAgICAgY3Vyc29yU3RhdHM6IHtcbiAgICAgICAgICAgIGdsb2JhbElkbGU6IHJhd1JlcGx5WzQ3XVsxXSxcbiAgICAgICAgICAgIGdsb2JhbFRvdGFsOiByYXdSZXBseVs0N11bM10sXG4gICAgICAgICAgICBpbmRleENhcGFjaXR5OiByYXdSZXBseVs0N11bNV0sXG4gICAgICAgICAgICBpZG5leFRvdGFsOiByYXdSZXBseVs0N11bN11cbiAgICAgICAgfSxcbiAgICAgICAgc3RvcFdvcmRzOiByYXdSZXBseVs0OV1cbiAgICB9O1xufVxuZXhwb3J0cy50cmFuc2Zvcm1SZXBseSA9IHRyYW5zZm9ybVJlcGx5O1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtUmVwbHkgPSBleHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IGV4cG9ydHMuSVNfUkVBRF9PTkxZID0gZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSB2b2lkIDA7XG5jb25zdCBfMSA9IHJlcXVpcmUoXCIuXCIpO1xuZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSAxO1xuZXhwb3J0cy5JU19SRUFEX09OTFkgPSB0cnVlO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGluZGV4LCBxdWVyeSwgb3B0aW9ucykge1xuICAgIHJldHVybiAoMCwgXzEucHVzaFNlYXJjaE9wdGlvbnMpKFsnRlQuU0VBUkNIJywgaW5kZXgsIHF1ZXJ5XSwgb3B0aW9ucyk7XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbmZ1bmN0aW9uIHRyYW5zZm9ybVJlcGx5KHJlcGx5LCB3aXRob3V0RG9jdW1lbnRzKSB7XG4gICAgY29uc3QgZG9jdW1lbnRzID0gW107XG4gICAgbGV0IGkgPSAxO1xuICAgIHdoaWxlIChpIDwgcmVwbHkubGVuZ3RoKSB7XG4gICAgICAgIGRvY3VtZW50cy5wdXNoKHtcbiAgICAgICAgICAgIGlkOiByZXBseVtpKytdLFxuICAgICAgICAgICAgdmFsdWU6IHdpdGhvdXREb2N1bWVudHMgPyBPYmplY3QuY3JlYXRlKG51bGwpIDogZG9jdW1lbnRWYWx1ZShyZXBseVtpKytdKVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdG90YWw6IHJlcGx5WzBdLFxuICAgICAgICBkb2N1bWVudHNcbiAgICB9O1xufVxuZXhwb3J0cy50cmFuc2Zvcm1SZXBseSA9IHRyYW5zZm9ybVJlcGx5O1xuZnVuY3Rpb24gZG9jdW1lbnRWYWx1ZSh0dXBsZXMpIHtcbiAgICBjb25zdCBtZXNzYWdlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICBsZXQgaSA9IDA7XG4gICAgd2hpbGUgKGkgPCB0dXBsZXMubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IHR1cGxlc1tpKytdLCB2YWx1ZSA9IHR1cGxlc1tpKytdO1xuICAgICAgICBpZiAoa2V5ID09PSAnJCcpIHsgLy8gbWlnaHQgYmUgYSBKU09OIHJlcGx5XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24obWVzc2FnZSwgSlNPTi5wYXJzZSh2YWx1ZSkpO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2gge1xuICAgICAgICAgICAgICAgIC8vIHNldCBhcyBhIHJlZ3VsYXIgcHJvcGVydHkgaWYgbm90IGEgdmFsaWQgSlNPTlxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG1lc3NhZ2Vba2V5XSA9IHZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZTtcbn1cbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybVJlcGx5ID0gZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLklTX1JFQURfT05MWSA9IHZvaWQgMDtcbmNvbnN0IFNFQVJDSF8xID0gcmVxdWlyZShcIi4vU0VBUkNIXCIpO1xuY29uc3QgXzEgPSByZXF1aXJlKFwiLlwiKTtcbmV4cG9ydHMuSVNfUkVBRF9PTkxZID0gdHJ1ZTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhpbmRleCwgcXVlcnksIG9wdGlvbnMpIHtcbiAgICBsZXQgYXJncyA9IFsnRlQuUFJPRklMRScsIGluZGV4LCAnU0VBUkNIJ107XG4gICAgaWYgKG9wdGlvbnM/LkxJTUlURUQpIHtcbiAgICAgICAgYXJncy5wdXNoKCdMSU1JVEVEJyk7XG4gICAgfVxuICAgIGFyZ3MucHVzaCgnUVVFUlknLCBxdWVyeSk7XG4gICAgcmV0dXJuICgwLCBfMS5wdXNoU2VhcmNoT3B0aW9ucykoYXJncywgb3B0aW9ucyk7XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbmZ1bmN0aW9uIHRyYW5zZm9ybVJlcGx5KHJlcGx5LCB3aXRob3V0RG9jdW1lbnRzKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgcmVzdWx0czogKDAsIFNFQVJDSF8xLnRyYW5zZm9ybVJlcGx5KShyZXBseVswXSwgd2l0aG91dERvY3VtZW50cyksXG4gICAgICAgIHByb2ZpbGU6ICgwLCBfMS50cmFuc2Zvcm1Qcm9maWxlKShyZXBseVsxXSlcbiAgICB9O1xufVxuZXhwb3J0cy50cmFuc2Zvcm1SZXBseSA9IHRyYW5zZm9ybVJlcGx5O1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtUmVwbHkgPSBleHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IGV4cG9ydHMuSVNfUkVBRF9PTkxZID0gdm9pZCAwO1xuY29uc3QgQUdHUkVHQVRFXzEgPSByZXF1aXJlKFwiLi9BR0dSRUdBVEVcIik7XG5jb25zdCBfMSA9IHJlcXVpcmUoXCIuXCIpO1xuZXhwb3J0cy5JU19SRUFEX09OTFkgPSB0cnVlO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGluZGV4LCBxdWVyeSwgb3B0aW9ucykge1xuICAgIGNvbnN0IGFyZ3MgPSBbJ0ZULlBST0ZJTEUnLCBpbmRleCwgJ0FHR1JFR0FURSddO1xuICAgIGlmIChvcHRpb25zPy5MSU1JVEVEKSB7XG4gICAgICAgIGFyZ3MucHVzaCgnTElNSVRFRCcpO1xuICAgIH1cbiAgICBhcmdzLnB1c2goJ1FVRVJZJywgcXVlcnkpO1xuICAgICgwLCBBR0dSRUdBVEVfMS5wdXNoQWdncmVnYXRlaE9wdGlvbnMpKGFyZ3MsIG9wdGlvbnMpO1xuICAgIHJldHVybiBhcmdzO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG5mdW5jdGlvbiB0cmFuc2Zvcm1SZXBseShyZXBseSkge1xuICAgIHJldHVybiB7XG4gICAgICAgIHJlc3VsdHM6ICgwLCBBR0dSRUdBVEVfMS50cmFuc2Zvcm1SZXBseSkocmVwbHlbMF0pLFxuICAgICAgICBwcm9maWxlOiAoMCwgXzEudHJhbnNmb3JtUHJvZmlsZSkocmVwbHlbMV0pXG4gICAgfTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtUmVwbHkgPSB0cmFuc2Zvcm1SZXBseTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybVJlcGx5ID0gZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLklTX1JFQURfT05MWSA9IGV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gdm9pZCAwO1xuY29uc3QgXzEgPSByZXF1aXJlKFwiLlwiKTtcbmV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gMTtcbmV4cG9ydHMuSVNfUkVBRF9PTkxZID0gdHJ1ZTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhpbmRleCwgcXVlcnksIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gKDAsIF8xLnB1c2hTZWFyY2hPcHRpb25zKShbJ0ZULlNFQVJDSCcsIGluZGV4LCBxdWVyeSwgJ05PQ09OVEVOVCddLCBvcHRpb25zKTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuO1xuZnVuY3Rpb24gdHJhbnNmb3JtUmVwbHkocmVwbHkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICB0b3RhbDogcmVwbHlbMF0sXG4gICAgICAgIGRvY3VtZW50czogcmVwbHkuc2xpY2UoMSlcbiAgICB9O1xufVxuZXhwb3J0cy50cmFuc2Zvcm1SZXBseSA9IHRyYW5zZm9ybVJlcGx5O1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtUmVwbHkgPSBleHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHZvaWQgMDtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhpbmRleCwgcXVlcnksIG9wdGlvbnMpIHtcbiAgICBjb25zdCBhcmdzID0gWydGVC5TUEVMTENIRUNLJywgaW5kZXgsIHF1ZXJ5XTtcbiAgICBpZiAob3B0aW9ucz8uRElTVEFOQ0UpIHtcbiAgICAgICAgYXJncy5wdXNoKCdESVNUQU5DRScsIG9wdGlvbnMuRElTVEFOQ0UudG9TdHJpbmcoKSk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zPy5URVJNUykge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvcHRpb25zLlRFUk1TKSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCB0ZXJtIG9mIG9wdGlvbnMuVEVSTVMpIHtcbiAgICAgICAgICAgICAgICBwdXNoVGVybXMoYXJncywgdGVybSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBwdXNoVGVybXMoYXJncywgb3B0aW9ucy5URVJNUyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKG9wdGlvbnM/LkRJQUxFQ1QpIHtcbiAgICAgICAgYXJncy5wdXNoKCdESUFMRUNUJywgb3B0aW9ucy5ESUFMRUNULnRvU3RyaW5nKCkpO1xuICAgIH1cbiAgICByZXR1cm4gYXJncztcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuZnVuY3Rpb24gcHVzaFRlcm1zKGFyZ3MsIHsgbW9kZSwgZGljdGlvbmFyeSB9KSB7XG4gICAgYXJncy5wdXNoKCdURVJNUycsIG1vZGUsIGRpY3Rpb25hcnkpO1xufVxuZnVuY3Rpb24gdHJhbnNmb3JtUmVwbHkocmF3UmVwbHkpIHtcbiAgICByZXR1cm4gcmF3UmVwbHkubWFwKChbLCB0ZXJtLCBzdWdnZXN0aW9uc10pID0+ICh7XG4gICAgICAgIHRlcm0sXG4gICAgICAgIHN1Z2dlc3Rpb25zOiBzdWdnZXN0aW9ucy5tYXAoKFtzY29yZSwgc3VnZ2VzdGlvbl0pID0+ICh7XG4gICAgICAgICAgICBzY29yZTogTnVtYmVyKHNjb3JlKSxcbiAgICAgICAgICAgIHN1Z2dlc3Rpb25cbiAgICAgICAgfSkpXG4gICAgfSkpO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1SZXBseSA9IHRyYW5zZm9ybVJlcGx5O1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdm9pZCAwO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGtleSwgc3RyaW5nLCBzY29yZSwgb3B0aW9ucykge1xuICAgIGNvbnN0IGFyZ3MgPSBbJ0ZULlNVR0FERCcsIGtleSwgc3RyaW5nLCBzY29yZS50b1N0cmluZygpXTtcbiAgICBpZiAob3B0aW9ucz8uSU5DUikge1xuICAgICAgICBhcmdzLnB1c2goJ0lOQ1InKTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnM/LlBBWUxPQUQpIHtcbiAgICAgICAgYXJncy5wdXNoKCdQQVlMT0FEJywgb3B0aW9ucy5QQVlMT0FEKTtcbiAgICB9XG4gICAgcmV0dXJuIGFyZ3M7XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybVJlcGx5ID0gZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB2b2lkIDA7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMoa2V5LCBzdHJpbmcpIHtcbiAgICByZXR1cm4gWydGVC5TVUdERUwnLCBrZXksIHN0cmluZ107XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbnZhciBnZW5lcmljX3RyYW5zZm9ybWVyc18xID0gcmVxdWlyZShcIkByZWRpcy9jbGllbnQvZGlzdC9saWIvY29tbWFuZHMvZ2VuZXJpYy10cmFuc2Zvcm1lcnNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ0cmFuc2Zvcm1SZXBseVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZ2VuZXJpY190cmFuc2Zvcm1lcnNfMS50cmFuc2Zvcm1Cb29sZWFuUmVwbHk7IH0gfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLklTX1JFQURfT05MWSA9IHZvaWQgMDtcbmV4cG9ydHMuSVNfUkVBRF9PTkxZID0gdHJ1ZTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhrZXksIHByZWZpeCwgb3B0aW9ucykge1xuICAgIGNvbnN0IGFyZ3MgPSBbJ0ZULlNVR0dFVCcsIGtleSwgcHJlZml4XTtcbiAgICBpZiAob3B0aW9ucz8uRlVaWlkpIHtcbiAgICAgICAgYXJncy5wdXNoKCdGVVpaWScpO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucz8uTUFYKSB7XG4gICAgICAgIGFyZ3MucHVzaCgnTUFYJywgb3B0aW9ucy5NQVgudG9TdHJpbmcoKSk7XG4gICAgfVxuICAgIHJldHVybiBhcmdzO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1SZXBseSA9IGV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gZXhwb3J0cy5JU19SRUFEX09OTFkgPSB2b2lkIDA7XG5jb25zdCBTVUdHRVRfMSA9IHJlcXVpcmUoXCIuL1NVR0dFVFwiKTtcbnZhciBTVUdHRVRfMiA9IHJlcXVpcmUoXCIuL1NVR0dFVFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIklTX1JFQURfT05MWVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gU1VHR0VUXzIuSVNfUkVBRF9PTkxZOyB9IH0pO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGtleSwgcHJlZml4LCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgICAgLi4uKDAsIFNVR0dFVF8xLnRyYW5zZm9ybUFyZ3VtZW50cykoa2V5LCBwcmVmaXgsIG9wdGlvbnMpLFxuICAgICAgICAnV0lUSFBBWUxPQURTJ1xuICAgIF07XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbmZ1bmN0aW9uIHRyYW5zZm9ybVJlcGx5KHJhd1JlcGx5KSB7XG4gICAgaWYgKHJhd1JlcGx5ID09PSBudWxsKVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFJlcGx5ID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCByYXdSZXBseS5sZW5ndGg7IGkgKz0gMikge1xuICAgICAgICB0cmFuc2Zvcm1lZFJlcGx5LnB1c2goe1xuICAgICAgICAgICAgc3VnZ2VzdGlvbjogcmF3UmVwbHlbaV0sXG4gICAgICAgICAgICBwYXlsb2FkOiByYXdSZXBseVtpICsgMV1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiB0cmFuc2Zvcm1lZFJlcGx5O1xufVxuZXhwb3J0cy50cmFuc2Zvcm1SZXBseSA9IHRyYW5zZm9ybVJlcGx5O1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtUmVwbHkgPSBleHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IGV4cG9ydHMuSVNfUkVBRF9PTkxZID0gdm9pZCAwO1xuY29uc3QgU1VHR0VUXzEgPSByZXF1aXJlKFwiLi9TVUdHRVRcIik7XG52YXIgU1VHR0VUXzIgPSByZXF1aXJlKFwiLi9TVUdHRVRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJJU19SRUFEX09OTFlcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFNVR0dFVF8yLklTX1JFQURfT05MWTsgfSB9KTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhrZXksIHByZWZpeCwgb3B0aW9ucykge1xuICAgIHJldHVybiBbXG4gICAgICAgIC4uLigwLCBTVUdHRVRfMS50cmFuc2Zvcm1Bcmd1bWVudHMpKGtleSwgcHJlZml4LCBvcHRpb25zKSxcbiAgICAgICAgJ1dJVEhTQ09SRVMnLFxuICAgICAgICAnV0lUSFBBWUxPQURTJ1xuICAgIF07XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbmZ1bmN0aW9uIHRyYW5zZm9ybVJlcGx5KHJhd1JlcGx5KSB7XG4gICAgaWYgKHJhd1JlcGx5ID09PSBudWxsKVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFJlcGx5ID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCByYXdSZXBseS5sZW5ndGg7IGkgKz0gMykge1xuICAgICAgICB0cmFuc2Zvcm1lZFJlcGx5LnB1c2goe1xuICAgICAgICAgICAgc3VnZ2VzdGlvbjogcmF3UmVwbHlbaV0sXG4gICAgICAgICAgICBzY29yZTogTnVtYmVyKHJhd1JlcGx5W2kgKyAxXSksXG4gICAgICAgICAgICBwYXlsb2FkOiByYXdSZXBseVtpICsgMl1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiB0cmFuc2Zvcm1lZFJlcGx5O1xufVxuZXhwb3J0cy50cmFuc2Zvcm1SZXBseSA9IHRyYW5zZm9ybVJlcGx5O1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtUmVwbHkgPSBleHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IGV4cG9ydHMuSVNfUkVBRF9PTkxZID0gdm9pZCAwO1xuY29uc3QgU1VHR0VUXzEgPSByZXF1aXJlKFwiLi9TVUdHRVRcIik7XG52YXIgU1VHR0VUXzIgPSByZXF1aXJlKFwiLi9TVUdHRVRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJJU19SRUFEX09OTFlcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFNVR0dFVF8yLklTX1JFQURfT05MWTsgfSB9KTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhrZXksIHByZWZpeCwgb3B0aW9ucykge1xuICAgIHJldHVybiBbXG4gICAgICAgIC4uLigwLCBTVUdHRVRfMS50cmFuc2Zvcm1Bcmd1bWVudHMpKGtleSwgcHJlZml4LCBvcHRpb25zKSxcbiAgICAgICAgJ1dJVEhTQ09SRVMnXG4gICAgXTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuZnVuY3Rpb24gdHJhbnNmb3JtUmVwbHkocmF3UmVwbHkpIHtcbiAgICBpZiAocmF3UmVwbHkgPT09IG51bGwpXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIGNvbnN0IHRyYW5zZm9ybWVkUmVwbHkgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJhd1JlcGx5Lmxlbmd0aDsgaSArPSAyKSB7XG4gICAgICAgIHRyYW5zZm9ybWVkUmVwbHkucHVzaCh7XG4gICAgICAgICAgICBzdWdnZXN0aW9uOiByYXdSZXBseVtpXSxcbiAgICAgICAgICAgIHNjb3JlOiBOdW1iZXIocmF3UmVwbHlbaSArIDFdKVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHRyYW5zZm9ybWVkUmVwbHk7XG59XG5leHBvcnRzLnRyYW5zZm9ybVJlcGx5ID0gdHJhbnNmb3JtUmVwbHk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLklTX1JFQURfT05MWSA9IHZvaWQgMDtcbmV4cG9ydHMuSVNfUkVBRF9PTkxZID0gdHJ1ZTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhrZXkpIHtcbiAgICByZXR1cm4gWydGVC5TVUdMRU4nLCBrZXldO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB2b2lkIDA7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMoaW5kZXgpIHtcbiAgICByZXR1cm4gWydGVC5TWU5EVU1QJywgaW5kZXhdO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB2b2lkIDA7XG5jb25zdCBnZW5lcmljX3RyYW5zZm9ybWVyc18xID0gcmVxdWlyZShcIkByZWRpcy9jbGllbnQvZGlzdC9saWIvY29tbWFuZHMvZ2VuZXJpYy10cmFuc2Zvcm1lcnNcIik7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMoaW5kZXgsIGdyb3VwSWQsIHRlcm1zLCBvcHRpb25zKSB7XG4gICAgY29uc3QgYXJncyA9IFsnRlQuU1lOVVBEQVRFJywgaW5kZXgsIGdyb3VwSWRdO1xuICAgIGlmIChvcHRpb25zPy5TS0lQSU5JVElBTFNDQU4pIHtcbiAgICAgICAgYXJncy5wdXNoKCdTS0lQSU5JVElBTFNDQU4nKTtcbiAgICB9XG4gICAgcmV0dXJuICgwLCBnZW5lcmljX3RyYW5zZm9ybWVyc18xLnB1c2hWZXJkaWN0QXJndW1lbnRzKShhcmdzLCB0ZXJtcyk7XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHZvaWQgMDtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhpbmRleCwgZmllbGROYW1lKSB7XG4gICAgcmV0dXJuIFsnRlQuVEFHVkFMUycsIGluZGV4LCBmaWVsZE5hbWVdO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1Qcm9maWxlID0gZXhwb3J0cy5wdXNoU2VhcmNoT3B0aW9ucyA9IGV4cG9ydHMucHVzaFBhcmFtc0FyZ3MgPSBleHBvcnRzLnB1c2hTY2hlbWEgPSBleHBvcnRzLlNDSEVNQV9HRU9fU0hBUEVfQ09PUkRfU1lTVEVNID0gZXhwb3J0cy5WZWN0b3JBbGdvcml0aG1zID0gZXhwb3J0cy5TY2hlbWFUZXh0RmllbGRQaG9uZXRpY3MgPSBleHBvcnRzLlNjaGVtYUZpZWxkVHlwZXMgPSBleHBvcnRzLnB1c2hBcmd1bWVudHNXaXRoTGVuZ3RoID0gZXhwb3J0cy5wdXNoU29ydEJ5QXJndW1lbnRzID0gZXhwb3J0cy5wdXNoU29ydEJ5UHJvcGVydHkgPSBleHBvcnRzLlJlZGlzU2VhcmNoTGFuZ3VhZ2VzID0gdm9pZCAwO1xuY29uc3QgX0xJU1QgPSByZXF1aXJlKFwiLi9fTElTVFwiKTtcbmNvbnN0IEFMVEVSID0gcmVxdWlyZShcIi4vQUxURVJcIik7XG5jb25zdCBBR0dSRUdBVEVfV0lUSENVUlNPUiA9IHJlcXVpcmUoXCIuL0FHR1JFR0FURV9XSVRIQ1VSU09SXCIpO1xuY29uc3QgQUdHUkVHQVRFID0gcmVxdWlyZShcIi4vQUdHUkVHQVRFXCIpO1xuY29uc3QgQUxJQVNBREQgPSByZXF1aXJlKFwiLi9BTElBU0FERFwiKTtcbmNvbnN0IEFMSUFTREVMID0gcmVxdWlyZShcIi4vQUxJQVNERUxcIik7XG5jb25zdCBBTElBU1VQREFURSA9IHJlcXVpcmUoXCIuL0FMSUFTVVBEQVRFXCIpO1xuY29uc3QgQ09ORklHX0dFVCA9IHJlcXVpcmUoXCIuL0NPTkZJR19HRVRcIik7XG5jb25zdCBDT05GSUdfU0VUID0gcmVxdWlyZShcIi4vQ09ORklHX1NFVFwiKTtcbmNvbnN0IENSRUFURSA9IHJlcXVpcmUoXCIuL0NSRUFURVwiKTtcbmNvbnN0IENVUlNPUl9ERUwgPSByZXF1aXJlKFwiLi9DVVJTT1JfREVMXCIpO1xuY29uc3QgQ1VSU09SX1JFQUQgPSByZXF1aXJlKFwiLi9DVVJTT1JfUkVBRFwiKTtcbmNvbnN0IERJQ1RBREQgPSByZXF1aXJlKFwiLi9ESUNUQUREXCIpO1xuY29uc3QgRElDVERFTCA9IHJlcXVpcmUoXCIuL0RJQ1RERUxcIik7XG5jb25zdCBESUNURFVNUCA9IHJlcXVpcmUoXCIuL0RJQ1REVU1QXCIpO1xuY29uc3QgRFJPUElOREVYID0gcmVxdWlyZShcIi4vRFJPUElOREVYXCIpO1xuY29uc3QgRVhQTEFJTiA9IHJlcXVpcmUoXCIuL0VYUExBSU5cIik7XG5jb25zdCBFWFBMQUlOQ0xJID0gcmVxdWlyZShcIi4vRVhQTEFJTkNMSVwiKTtcbmNvbnN0IElORk8gPSByZXF1aXJlKFwiLi9JTkZPXCIpO1xuY29uc3QgUFJPRklMRVNFQVJDSCA9IHJlcXVpcmUoXCIuL1BST0ZJTEVfU0VBUkNIXCIpO1xuY29uc3QgUFJPRklMRUFHR1JFR0FURSA9IHJlcXVpcmUoXCIuL1BST0ZJTEVfQUdHUkVHQVRFXCIpO1xuY29uc3QgU0VBUkNIID0gcmVxdWlyZShcIi4vU0VBUkNIXCIpO1xuY29uc3QgU0VBUkNIX05PQ09OVEVOVCA9IHJlcXVpcmUoXCIuL1NFQVJDSF9OT0NPTlRFTlRcIik7XG5jb25zdCBTUEVMTENIRUNLID0gcmVxdWlyZShcIi4vU1BFTExDSEVDS1wiKTtcbmNvbnN0IFNVR0FERCA9IHJlcXVpcmUoXCIuL1NVR0FERFwiKTtcbmNvbnN0IFNVR0RFTCA9IHJlcXVpcmUoXCIuL1NVR0RFTFwiKTtcbmNvbnN0IFNVR0dFVF9XSVRIUEFZTE9BRFMgPSByZXF1aXJlKFwiLi9TVUdHRVRfV0lUSFBBWUxPQURTXCIpO1xuY29uc3QgU1VHR0VUX1dJVEhTQ09SRVNfV0lUSFBBWUxPQURTID0gcmVxdWlyZShcIi4vU1VHR0VUX1dJVEhTQ09SRVNfV0lUSFBBWUxPQURTXCIpO1xuY29uc3QgU1VHR0VUX1dJVEhTQ09SRVMgPSByZXF1aXJlKFwiLi9TVUdHRVRfV0lUSFNDT1JFU1wiKTtcbmNvbnN0IFNVR0dFVCA9IHJlcXVpcmUoXCIuL1NVR0dFVFwiKTtcbmNvbnN0IFNVR0xFTiA9IHJlcXVpcmUoXCIuL1NVR0xFTlwiKTtcbmNvbnN0IFNZTkRVTVAgPSByZXF1aXJlKFwiLi9TWU5EVU1QXCIpO1xuY29uc3QgU1lOVVBEQVRFID0gcmVxdWlyZShcIi4vU1lOVVBEQVRFXCIpO1xuY29uc3QgVEFHVkFMUyA9IHJlcXVpcmUoXCIuL1RBR1ZBTFNcIik7XG5jb25zdCBnZW5lcmljX3RyYW5zZm9ybWVyc18xID0gcmVxdWlyZShcIkByZWRpcy9jbGllbnQvZGlzdC9saWIvY29tbWFuZHMvZ2VuZXJpYy10cmFuc2Zvcm1lcnNcIik7XG5leHBvcnRzLmRlZmF1bHQgPSB7XG4gICAgX0xJU1QsXG4gICAgX2xpc3Q6IF9MSVNULFxuICAgIEFMVEVSLFxuICAgIGFsdGVyOiBBTFRFUixcbiAgICBBR0dSRUdBVEVfV0lUSENVUlNPUixcbiAgICBhZ2dyZWdhdGVXaXRoQ3Vyc29yOiBBR0dSRUdBVEVfV0lUSENVUlNPUixcbiAgICBBR0dSRUdBVEUsXG4gICAgYWdncmVnYXRlOiBBR0dSRUdBVEUsXG4gICAgQUxJQVNBREQsXG4gICAgYWxpYXNBZGQ6IEFMSUFTQURELFxuICAgIEFMSUFTREVMLFxuICAgIGFsaWFzRGVsOiBBTElBU0RFTCxcbiAgICBBTElBU1VQREFURSxcbiAgICBhbGlhc1VwZGF0ZTogQUxJQVNVUERBVEUsXG4gICAgQ09ORklHX0dFVCxcbiAgICBjb25maWdHZXQ6IENPTkZJR19HRVQsXG4gICAgQ09ORklHX1NFVCxcbiAgICBjb25maWdTZXQ6IENPTkZJR19TRVQsXG4gICAgQ1JFQVRFLFxuICAgIGNyZWF0ZTogQ1JFQVRFLFxuICAgIENVUlNPUl9ERUwsXG4gICAgY3Vyc29yRGVsOiBDVVJTT1JfREVMLFxuICAgIENVUlNPUl9SRUFELFxuICAgIGN1cnNvclJlYWQ6IENVUlNPUl9SRUFELFxuICAgIERJQ1RBREQsXG4gICAgZGljdEFkZDogRElDVEFERCxcbiAgICBESUNUREVMLFxuICAgIGRpY3REZWw6IERJQ1RERUwsXG4gICAgRElDVERVTVAsXG4gICAgZGljdER1bXA6IERJQ1REVU1QLFxuICAgIERST1BJTkRFWCxcbiAgICBkcm9wSW5kZXg6IERST1BJTkRFWCxcbiAgICBFWFBMQUlOLFxuICAgIGV4cGxhaW46IEVYUExBSU4sXG4gICAgRVhQTEFJTkNMSSxcbiAgICBleHBsYWluQ2xpOiBFWFBMQUlOQ0xJLFxuICAgIElORk8sXG4gICAgaW5mbzogSU5GTyxcbiAgICBQUk9GSUxFU0VBUkNILFxuICAgIHByb2ZpbGVTZWFyY2g6IFBST0ZJTEVTRUFSQ0gsXG4gICAgUFJPRklMRUFHR1JFR0FURSxcbiAgICBwcm9maWxlQWdncmVnYXRlOiBQUk9GSUxFQUdHUkVHQVRFLFxuICAgIFNFQVJDSCxcbiAgICBzZWFyY2g6IFNFQVJDSCxcbiAgICBTRUFSQ0hfTk9DT05URU5ULFxuICAgIHNlYXJjaE5vQ29udGVudDogU0VBUkNIX05PQ09OVEVOVCxcbiAgICBTUEVMTENIRUNLLFxuICAgIHNwZWxsQ2hlY2s6IFNQRUxMQ0hFQ0ssXG4gICAgU1VHQURELFxuICAgIHN1Z0FkZDogU1VHQURELFxuICAgIFNVR0RFTCxcbiAgICBzdWdEZWw6IFNVR0RFTCxcbiAgICBTVUdHRVRfV0lUSFBBWUxPQURTLFxuICAgIHN1Z0dldFdpdGhQYXlsb2FkczogU1VHR0VUX1dJVEhQQVlMT0FEUyxcbiAgICBTVUdHRVRfV0lUSFNDT1JFU19XSVRIUEFZTE9BRFMsXG4gICAgc3VnR2V0V2l0aFNjb3Jlc1dpdGhQYXlsb2FkczogU1VHR0VUX1dJVEhTQ09SRVNfV0lUSFBBWUxPQURTLFxuICAgIFNVR0dFVF9XSVRIU0NPUkVTLFxuICAgIHN1Z0dldFdpdGhTY29yZXM6IFNVR0dFVF9XSVRIU0NPUkVTLFxuICAgIFNVR0dFVCxcbiAgICBzdWdHZXQ6IFNVR0dFVCxcbiAgICBTVUdMRU4sXG4gICAgc3VnTGVuOiBTVUdMRU4sXG4gICAgU1lORFVNUCxcbiAgICBzeW5EdW1wOiBTWU5EVU1QLFxuICAgIFNZTlVQREFURSxcbiAgICBzeW5VcGRhdGU6IFNZTlVQREFURSxcbiAgICBUQUdWQUxTLFxuICAgIHRhZ1ZhbHM6IFRBR1ZBTFNcbn07XG52YXIgUmVkaXNTZWFyY2hMYW5ndWFnZXM7XG4oZnVuY3Rpb24gKFJlZGlzU2VhcmNoTGFuZ3VhZ2VzKSB7XG4gICAgUmVkaXNTZWFyY2hMYW5ndWFnZXNbXCJBUkFCSUNcIl0gPSBcIkFyYWJpY1wiO1xuICAgIFJlZGlzU2VhcmNoTGFuZ3VhZ2VzW1wiQkFTUVVFXCJdID0gXCJCYXNxdWVcIjtcbiAgICBSZWRpc1NlYXJjaExhbmd1YWdlc1tcIkNBVEFMQU5BXCJdID0gXCJDYXRhbGFuXCI7XG4gICAgUmVkaXNTZWFyY2hMYW5ndWFnZXNbXCJEQU5JU0hcIl0gPSBcIkRhbmlzaFwiO1xuICAgIFJlZGlzU2VhcmNoTGFuZ3VhZ2VzW1wiRFVUQ0hcIl0gPSBcIkR1dGNoXCI7XG4gICAgUmVkaXNTZWFyY2hMYW5ndWFnZXNbXCJFTkdMSVNIXCJdID0gXCJFbmdsaXNoXCI7XG4gICAgUmVkaXNTZWFyY2hMYW5ndWFnZXNbXCJGSU5OSVNIXCJdID0gXCJGaW5uaXNoXCI7XG4gICAgUmVkaXNTZWFyY2hMYW5ndWFnZXNbXCJGUkVOQ0hcIl0gPSBcIkZyZW5jaFwiO1xuICAgIFJlZGlzU2VhcmNoTGFuZ3VhZ2VzW1wiR0VSTUFOXCJdID0gXCJHZXJtYW5cIjtcbiAgICBSZWRpc1NlYXJjaExhbmd1YWdlc1tcIkdSRUVLXCJdID0gXCJHcmVla1wiO1xuICAgIFJlZGlzU2VhcmNoTGFuZ3VhZ2VzW1wiSFVOR0FSSUFOXCJdID0gXCJIdW5nYXJpYW5cIjtcbiAgICBSZWRpc1NlYXJjaExhbmd1YWdlc1tcIklORE9ORVNBSU5cIl0gPSBcIkluZG9uZXNpYW5cIjtcbiAgICBSZWRpc1NlYXJjaExhbmd1YWdlc1tcIklSSVNIXCJdID0gXCJJcmlzaFwiO1xuICAgIFJlZGlzU2VhcmNoTGFuZ3VhZ2VzW1wiSVRBTElBTlwiXSA9IFwiSXRhbGlhblwiO1xuICAgIFJlZGlzU2VhcmNoTGFuZ3VhZ2VzW1wiTElUSFVBTklBTlwiXSA9IFwiTGl0aHVhbmlhblwiO1xuICAgIFJlZGlzU2VhcmNoTGFuZ3VhZ2VzW1wiTkVQQUxJXCJdID0gXCJOZXBhbGlcIjtcbiAgICBSZWRpc1NlYXJjaExhbmd1YWdlc1tcIk5PUldFSUdBTlwiXSA9IFwiTm9yd2VnaWFuXCI7XG4gICAgUmVkaXNTZWFyY2hMYW5ndWFnZXNbXCJQT1JUVUdVRVNFXCJdID0gXCJQb3J0dWd1ZXNlXCI7XG4gICAgUmVkaXNTZWFyY2hMYW5ndWFnZXNbXCJST01BTklBTlwiXSA9IFwiUm9tYW5pYW5cIjtcbiAgICBSZWRpc1NlYXJjaExhbmd1YWdlc1tcIlJVU1NJQU5cIl0gPSBcIlJ1c3NpYW5cIjtcbiAgICBSZWRpc1NlYXJjaExhbmd1YWdlc1tcIlNQQU5JU0hcIl0gPSBcIlNwYW5pc2hcIjtcbiAgICBSZWRpc1NlYXJjaExhbmd1YWdlc1tcIlNXRURJU0hcIl0gPSBcIlN3ZWRpc2hcIjtcbiAgICBSZWRpc1NlYXJjaExhbmd1YWdlc1tcIlRBTUlMXCJdID0gXCJUYW1pbFwiO1xuICAgIFJlZGlzU2VhcmNoTGFuZ3VhZ2VzW1wiVFVSS0lTSFwiXSA9IFwiVHVya2lzaFwiO1xuICAgIFJlZGlzU2VhcmNoTGFuZ3VhZ2VzW1wiQ0hJTkVTRVwiXSA9IFwiQ2hpbmVzZVwiO1xufSkoUmVkaXNTZWFyY2hMYW5ndWFnZXMgfHwgKGV4cG9ydHMuUmVkaXNTZWFyY2hMYW5ndWFnZXMgPSBSZWRpc1NlYXJjaExhbmd1YWdlcyA9IHt9KSk7XG5mdW5jdGlvbiBwdXNoU29ydEJ5UHJvcGVydHkoYXJncywgc29ydEJ5KSB7XG4gICAgaWYgKHR5cGVvZiBzb3J0QnkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGFyZ3MucHVzaChzb3J0QnkpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgYXJncy5wdXNoKHNvcnRCeS5CWSk7XG4gICAgICAgIGlmIChzb3J0QnkuRElSRUNUSU9OKSB7XG4gICAgICAgICAgICBhcmdzLnB1c2goc29ydEJ5LkRJUkVDVElPTik7XG4gICAgICAgIH1cbiAgICB9XG59XG5leHBvcnRzLnB1c2hTb3J0QnlQcm9wZXJ0eSA9IHB1c2hTb3J0QnlQcm9wZXJ0eTtcbmZ1bmN0aW9uIHB1c2hTb3J0QnlBcmd1bWVudHMoYXJncywgbmFtZSwgc29ydEJ5KSB7XG4gICAgY29uc3QgbGVuZ3RoQmVmb3JlID0gYXJncy5wdXNoKG5hbWUsICcnIC8vIHdpbGwgYmUgb3ZlcndyaXR0ZW5cbiAgICApO1xuICAgIGlmIChBcnJheS5pc0FycmF5KHNvcnRCeSkpIHtcbiAgICAgICAgZm9yIChjb25zdCBmaWVsZCBvZiBzb3J0QnkpIHtcbiAgICAgICAgICAgIHB1c2hTb3J0QnlQcm9wZXJ0eShhcmdzLCBmaWVsZCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHB1c2hTb3J0QnlQcm9wZXJ0eShhcmdzLCBzb3J0QnkpO1xuICAgIH1cbiAgICBhcmdzW2xlbmd0aEJlZm9yZSAtIDFdID0gKGFyZ3MubGVuZ3RoIC0gbGVuZ3RoQmVmb3JlKS50b1N0cmluZygpO1xuICAgIHJldHVybiBhcmdzO1xufVxuZXhwb3J0cy5wdXNoU29ydEJ5QXJndW1lbnRzID0gcHVzaFNvcnRCeUFyZ3VtZW50cztcbmZ1bmN0aW9uIHB1c2hBcmd1bWVudHNXaXRoTGVuZ3RoKGFyZ3MsIGZuKSB7XG4gICAgY29uc3QgbGVuZ3RoSW5kZXggPSBhcmdzLnB1c2goJycpIC0gMTtcbiAgICBmbihhcmdzKTtcbiAgICBhcmdzW2xlbmd0aEluZGV4XSA9IChhcmdzLmxlbmd0aCAtIGxlbmd0aEluZGV4IC0gMSkudG9TdHJpbmcoKTtcbiAgICByZXR1cm4gYXJncztcbn1cbmV4cG9ydHMucHVzaEFyZ3VtZW50c1dpdGhMZW5ndGggPSBwdXNoQXJndW1lbnRzV2l0aExlbmd0aDtcbnZhciBTY2hlbWFGaWVsZFR5cGVzO1xuKGZ1bmN0aW9uIChTY2hlbWFGaWVsZFR5cGVzKSB7XG4gICAgU2NoZW1hRmllbGRUeXBlc1tcIlRFWFRcIl0gPSBcIlRFWFRcIjtcbiAgICBTY2hlbWFGaWVsZFR5cGVzW1wiTlVNRVJJQ1wiXSA9IFwiTlVNRVJJQ1wiO1xuICAgIFNjaGVtYUZpZWxkVHlwZXNbXCJHRU9cIl0gPSBcIkdFT1wiO1xuICAgIFNjaGVtYUZpZWxkVHlwZXNbXCJUQUdcIl0gPSBcIlRBR1wiO1xuICAgIFNjaGVtYUZpZWxkVHlwZXNbXCJWRUNUT1JcIl0gPSBcIlZFQ1RPUlwiO1xuICAgIFNjaGVtYUZpZWxkVHlwZXNbXCJHRU9TSEFQRVwiXSA9IFwiR0VPU0hBUEVcIjtcbn0pKFNjaGVtYUZpZWxkVHlwZXMgfHwgKGV4cG9ydHMuU2NoZW1hRmllbGRUeXBlcyA9IFNjaGVtYUZpZWxkVHlwZXMgPSB7fSkpO1xuZnVuY3Rpb24gcHVzaENvbW1vbkZpZWxkQXJndW1lbnRzKGFyZ3MsIGZpZWxkT3B0aW9ucykge1xuICAgIGlmIChmaWVsZE9wdGlvbnMuU09SVEFCTEUpIHtcbiAgICAgICAgYXJncy5wdXNoKCdTT1JUQUJMRScpO1xuICAgICAgICBpZiAoZmllbGRPcHRpb25zLlNPUlRBQkxFID09PSAnVU5GJykge1xuICAgICAgICAgICAgYXJncy5wdXNoKCdVTkYnKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoZmllbGRPcHRpb25zLk5PSU5ERVgpIHtcbiAgICAgICAgYXJncy5wdXNoKCdOT0lOREVYJyk7XG4gICAgfVxufVxudmFyIFNjaGVtYVRleHRGaWVsZFBob25ldGljcztcbihmdW5jdGlvbiAoU2NoZW1hVGV4dEZpZWxkUGhvbmV0aWNzKSB7XG4gICAgU2NoZW1hVGV4dEZpZWxkUGhvbmV0aWNzW1wiRE1fRU5cIl0gPSBcImRtOmVuXCI7XG4gICAgU2NoZW1hVGV4dEZpZWxkUGhvbmV0aWNzW1wiRE1fRlJcIl0gPSBcImRtOmZyXCI7XG4gICAgU2NoZW1hVGV4dEZpZWxkUGhvbmV0aWNzW1wiRk1fUFRcIl0gPSBcImRtOnB0XCI7XG4gICAgU2NoZW1hVGV4dEZpZWxkUGhvbmV0aWNzW1wiRE1fRVNcIl0gPSBcImRtOmVzXCI7XG59KShTY2hlbWFUZXh0RmllbGRQaG9uZXRpY3MgfHwgKGV4cG9ydHMuU2NoZW1hVGV4dEZpZWxkUGhvbmV0aWNzID0gU2NoZW1hVGV4dEZpZWxkUGhvbmV0aWNzID0ge30pKTtcbnZhciBWZWN0b3JBbGdvcml0aG1zO1xuKGZ1bmN0aW9uIChWZWN0b3JBbGdvcml0aG1zKSB7XG4gICAgVmVjdG9yQWxnb3JpdGhtc1tcIkZMQVRcIl0gPSBcIkZMQVRcIjtcbiAgICBWZWN0b3JBbGdvcml0aG1zW1wiSE5TV1wiXSA9IFwiSE5TV1wiO1xufSkoVmVjdG9yQWxnb3JpdGhtcyB8fCAoZXhwb3J0cy5WZWN0b3JBbGdvcml0aG1zID0gVmVjdG9yQWxnb3JpdGhtcyA9IHt9KSk7XG5leHBvcnRzLlNDSEVNQV9HRU9fU0hBUEVfQ09PUkRfU1lTVEVNID0ge1xuICAgIFNQSEVSSUNBTDogJ1NQSEVSSUNBTCcsXG4gICAgRkxBVDogJ0ZMQVQnXG59O1xuZnVuY3Rpb24gcHVzaFNjaGVtYShhcmdzLCBzY2hlbWEpIHtcbiAgICBmb3IgKGNvbnN0IFtmaWVsZCwgZmllbGRPcHRpb25zXSBvZiBPYmplY3QuZW50cmllcyhzY2hlbWEpKSB7XG4gICAgICAgIGFyZ3MucHVzaChmaWVsZCk7XG4gICAgICAgIGlmICh0eXBlb2YgZmllbGRPcHRpb25zID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgYXJncy5wdXNoKGZpZWxkT3B0aW9ucyk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmllbGRPcHRpb25zLkFTKSB7XG4gICAgICAgICAgICBhcmdzLnB1c2goJ0FTJywgZmllbGRPcHRpb25zLkFTKTtcbiAgICAgICAgfVxuICAgICAgICBhcmdzLnB1c2goZmllbGRPcHRpb25zLnR5cGUpO1xuICAgICAgICBzd2l0Y2ggKGZpZWxkT3B0aW9ucy50eXBlKSB7XG4gICAgICAgICAgICBjYXNlIFNjaGVtYUZpZWxkVHlwZXMuVEVYVDpcbiAgICAgICAgICAgICAgICBpZiAoZmllbGRPcHRpb25zLk5PU1RFTSkge1xuICAgICAgICAgICAgICAgICAgICBhcmdzLnB1c2goJ05PU1RFTScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZmllbGRPcHRpb25zLldFSUdIVCkge1xuICAgICAgICAgICAgICAgICAgICBhcmdzLnB1c2goJ1dFSUdIVCcsIGZpZWxkT3B0aW9ucy5XRUlHSFQudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChmaWVsZE9wdGlvbnMuUEhPTkVUSUMpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJncy5wdXNoKCdQSE9ORVRJQycsIGZpZWxkT3B0aW9ucy5QSE9ORVRJQyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChmaWVsZE9wdGlvbnMuV0lUSFNVRkZJWFRSSUUpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJncy5wdXNoKCdXSVRIU1VGRklYVFJJRScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBwdXNoQ29tbW9uRmllbGRBcmd1bWVudHMoYXJncywgZmllbGRPcHRpb25zKTtcbiAgICAgICAgICAgICAgICBpZiAoZmllbGRPcHRpb25zLklOREVYRU1QVFkpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJncy5wdXNoKCdJTkRFWEVNUFRZJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBTY2hlbWFGaWVsZFR5cGVzLk5VTUVSSUM6XG4gICAgICAgICAgICBjYXNlIFNjaGVtYUZpZWxkVHlwZXMuR0VPOlxuICAgICAgICAgICAgICAgIHB1c2hDb21tb25GaWVsZEFyZ3VtZW50cyhhcmdzLCBmaWVsZE9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBTY2hlbWFGaWVsZFR5cGVzLlRBRzpcbiAgICAgICAgICAgICAgICBpZiAoZmllbGRPcHRpb25zLlNFUEFSQVRPUikge1xuICAgICAgICAgICAgICAgICAgICBhcmdzLnB1c2goJ1NFUEFSQVRPUicsIGZpZWxkT3B0aW9ucy5TRVBBUkFUT1IpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZmllbGRPcHRpb25zLkNBU0VTRU5TSVRJVkUpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJncy5wdXNoKCdDQVNFU0VOU0lUSVZFJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChmaWVsZE9wdGlvbnMuV0lUSFNVRkZJWFRSSUUpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJncy5wdXNoKCdXSVRIU1VGRklYVFJJRScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBwdXNoQ29tbW9uRmllbGRBcmd1bWVudHMoYXJncywgZmllbGRPcHRpb25zKTtcbiAgICAgICAgICAgICAgICBpZiAoZmllbGRPcHRpb25zLklOREVYRU1QVFkpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJncy5wdXNoKCdJTkRFWEVNUFRZJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBTY2hlbWFGaWVsZFR5cGVzLlZFQ1RPUjpcbiAgICAgICAgICAgICAgICBhcmdzLnB1c2goZmllbGRPcHRpb25zLkFMR09SSVRITSk7XG4gICAgICAgICAgICAgICAgcHVzaEFyZ3VtZW50c1dpdGhMZW5ndGgoYXJncywgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBhcmdzLnB1c2goJ1RZUEUnLCBmaWVsZE9wdGlvbnMuVFlQRSwgJ0RJTScsIGZpZWxkT3B0aW9ucy5ESU0udG9TdHJpbmcoKSwgJ0RJU1RBTkNFX01FVFJJQycsIGZpZWxkT3B0aW9ucy5ESVNUQU5DRV9NRVRSSUMpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZmllbGRPcHRpb25zLklOSVRJQUxfQ0FQKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzLnB1c2goJ0lOSVRJQUxfQ0FQJywgZmllbGRPcHRpb25zLklOSVRJQUxfQ0FQLnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZmllbGRPcHRpb25zLkFMR09SSVRITSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBWZWN0b3JBbGdvcml0aG1zLkZMQVQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkT3B0aW9ucy5CTE9DS19TSVpFKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MucHVzaCgnQkxPQ0tfU0laRScsIGZpZWxkT3B0aW9ucy5CTE9DS19TSVpFLnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgVmVjdG9yQWxnb3JpdGhtcy5ITlNXOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWVsZE9wdGlvbnMuTSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzLnB1c2goJ00nLCBmaWVsZE9wdGlvbnMuTS50b1N0cmluZygpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkT3B0aW9ucy5FRl9DT05TVFJVQ1RJT04pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5wdXNoKCdFRl9DT05TVFJVQ1RJT04nLCBmaWVsZE9wdGlvbnMuRUZfQ09OU1RSVUNUSU9OLnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmllbGRPcHRpb25zLkVGX1JVTlRJTUUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5wdXNoKCdFRl9SVU5USU1FJywgZmllbGRPcHRpb25zLkVGX1JVTlRJTUUudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFNjaGVtYUZpZWxkVHlwZXMuR0VPU0hBUEU6XG4gICAgICAgICAgICAgICAgaWYgKGZpZWxkT3B0aW9ucy5DT09SRF9TWVNURU0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBhcmdzLnB1c2goJ0NPT1JEX1NZU1RFTScsIGZpZWxkT3B0aW9ucy5DT09SRF9TWVNURU0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBwdXNoQ29tbW9uRmllbGRBcmd1bWVudHMoYXJncywgZmllbGRPcHRpb25zKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmllbGRPcHRpb25zLklOREVYTUlTU0lORykge1xuICAgICAgICAgICAgYXJncy5wdXNoKCdJTkRFWE1JU1NJTkcnKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydHMucHVzaFNjaGVtYSA9IHB1c2hTY2hlbWE7XG5mdW5jdGlvbiBwdXNoUGFyYW1zQXJncyhhcmdzLCBwYXJhbXMpIHtcbiAgICBpZiAocGFyYW1zKSB7XG4gICAgICAgIGNvbnN0IGVucnRpZXMgPSBPYmplY3QuZW50cmllcyhwYXJhbXMpO1xuICAgICAgICBhcmdzLnB1c2goJ1BBUkFNUycsIChlbnJ0aWVzLmxlbmd0aCAqIDIpLnRvU3RyaW5nKCkpO1xuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBlbnJ0aWVzKSB7XG4gICAgICAgICAgICBhcmdzLnB1c2goa2V5LCB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInID8gdmFsdWUudG9TdHJpbmcoKSA6IHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYXJncztcbn1cbmV4cG9ydHMucHVzaFBhcmFtc0FyZ3MgPSBwdXNoUGFyYW1zQXJncztcbmZ1bmN0aW9uIHB1c2hTZWFyY2hPcHRpb25zKGFyZ3MsIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucz8uVkVSQkFUSU0pIHtcbiAgICAgICAgYXJncy5wdXNoKCdWRVJCQVRJTScpO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucz8uTk9TVE9QV09SRFMpIHtcbiAgICAgICAgYXJncy5wdXNoKCdOT1NUT1BXT1JEUycpO1xuICAgIH1cbiAgICAvLyBpZiAob3B0aW9ucz8uV0lUSFNDT1JFUykge1xuICAgIC8vICAgICBhcmdzLnB1c2goJ1dJVEhTQ09SRVMnKTtcbiAgICAvLyB9XG4gICAgLy8gaWYgKG9wdGlvbnM/LldJVEhQQVlMT0FEUykge1xuICAgIC8vICAgICBhcmdzLnB1c2goJ1dJVEhQQVlMT0FEUycpO1xuICAgIC8vIH1cbiAgICAoMCwgZ2VuZXJpY190cmFuc2Zvcm1lcnNfMS5wdXNoT3B0aW9uYWxWZXJkaWN0QXJndW1lbnQpKGFyZ3MsICdJTktFWVMnLCBvcHRpb25zPy5JTktFWVMpO1xuICAgICgwLCBnZW5lcmljX3RyYW5zZm9ybWVyc18xLnB1c2hPcHRpb25hbFZlcmRpY3RBcmd1bWVudCkoYXJncywgJ0lORklFTERTJywgb3B0aW9ucz8uSU5GSUVMRFMpO1xuICAgICgwLCBnZW5lcmljX3RyYW5zZm9ybWVyc18xLnB1c2hPcHRpb25hbFZlcmRpY3RBcmd1bWVudCkoYXJncywgJ1JFVFVSTicsIG9wdGlvbnM/LlJFVFVSTik7XG4gICAgaWYgKG9wdGlvbnM/LlNVTU1BUklaRSkge1xuICAgICAgICBhcmdzLnB1c2goJ1NVTU1BUklaRScpO1xuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMuU1VNTUFSSVpFID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMuU1VNTUFSSVpFLkZJRUxEUykge1xuICAgICAgICAgICAgICAgIGFyZ3MucHVzaCgnRklFTERTJyk7XG4gICAgICAgICAgICAgICAgKDAsIGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEucHVzaFZlcmRpY3RBcmd1bWVudCkoYXJncywgb3B0aW9ucy5TVU1NQVJJWkUuRklFTERTKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHRpb25zLlNVTU1BUklaRS5GUkFHUykge1xuICAgICAgICAgICAgICAgIGFyZ3MucHVzaCgnRlJBR1MnLCBvcHRpb25zLlNVTU1BUklaRS5GUkFHUy50b1N0cmluZygpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHRpb25zLlNVTU1BUklaRS5MRU4pIHtcbiAgICAgICAgICAgICAgICBhcmdzLnB1c2goJ0xFTicsIG9wdGlvbnMuU1VNTUFSSVpFLkxFTi50b1N0cmluZygpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHRpb25zLlNVTU1BUklaRS5TRVBBUkFUT1IpIHtcbiAgICAgICAgICAgICAgICBhcmdzLnB1c2goJ1NFUEFSQVRPUicsIG9wdGlvbnMuU1VNTUFSSVpFLlNFUEFSQVRPUik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKG9wdGlvbnM/LkhJR0hMSUdIVCkge1xuICAgICAgICBhcmdzLnB1c2goJ0hJR0hMSUdIVCcpO1xuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMuSElHSExJR0hUID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMuSElHSExJR0hULkZJRUxEUykge1xuICAgICAgICAgICAgICAgIGFyZ3MucHVzaCgnRklFTERTJyk7XG4gICAgICAgICAgICAgICAgKDAsIGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEucHVzaFZlcmRpY3RBcmd1bWVudCkoYXJncywgb3B0aW9ucy5ISUdITElHSFQuRklFTERTKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHRpb25zLkhJR0hMSUdIVC5UQUdTKSB7XG4gICAgICAgICAgICAgICAgYXJncy5wdXNoKCdUQUdTJywgb3B0aW9ucy5ISUdITElHSFQuVEFHUy5vcGVuLCBvcHRpb25zLkhJR0hMSUdIVC5UQUdTLmNsb3NlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAob3B0aW9ucz8uU0xPUCkge1xuICAgICAgICBhcmdzLnB1c2goJ1NMT1AnLCBvcHRpb25zLlNMT1AudG9TdHJpbmcoKSk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zPy5JTk9SREVSKSB7XG4gICAgICAgIGFyZ3MucHVzaCgnSU5PUkRFUicpO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucz8uTEFOR1VBR0UpIHtcbiAgICAgICAgYXJncy5wdXNoKCdMQU5HVUFHRScsIG9wdGlvbnMuTEFOR1VBR0UpO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucz8uRVhQQU5ERVIpIHtcbiAgICAgICAgYXJncy5wdXNoKCdFWFBBTkRFUicsIG9wdGlvbnMuRVhQQU5ERVIpO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucz8uU0NPUkVSKSB7XG4gICAgICAgIGFyZ3MucHVzaCgnU0NPUkVSJywgb3B0aW9ucy5TQ09SRVIpO1xuICAgIH1cbiAgICAvLyBpZiAob3B0aW9ucz8uRVhQTEFJTlNDT1JFKSB7XG4gICAgLy8gICAgIGFyZ3MucHVzaCgnRVhQTEFJTlNDT1JFJyk7XG4gICAgLy8gfVxuICAgIC8vIGlmIChvcHRpb25zPy5QQVlMT0FEKSB7XG4gICAgLy8gICAgIGFyZ3MucHVzaCgnUEFZTE9BRCcsIG9wdGlvbnMuUEFZTE9BRCk7XG4gICAgLy8gfVxuICAgIGlmIChvcHRpb25zPy5TT1JUQlkpIHtcbiAgICAgICAgYXJncy5wdXNoKCdTT1JUQlknKTtcbiAgICAgICAgcHVzaFNvcnRCeVByb3BlcnR5KGFyZ3MsIG9wdGlvbnMuU09SVEJZKTtcbiAgICB9XG4gICAgLy8gaWYgKG9wdGlvbnM/Lk1TT1JUQlkpIHtcbiAgICAvLyAgICAgcHVzaFNvcnRCeUFyZ3VtZW50cyhhcmdzLCAnTVNPUlRCWScsIG9wdGlvbnMuTVNPUlRCWSk7XG4gICAgLy8gfVxuICAgIGlmIChvcHRpb25zPy5MSU1JVCkge1xuICAgICAgICBhcmdzLnB1c2goJ0xJTUlUJywgb3B0aW9ucy5MSU1JVC5mcm9tLnRvU3RyaW5nKCksIG9wdGlvbnMuTElNSVQuc2l6ZS50b1N0cmluZygpKTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnM/LlBBUkFNUykge1xuICAgICAgICBwdXNoUGFyYW1zQXJncyhhcmdzLCBvcHRpb25zLlBBUkFNUyk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zPy5ESUFMRUNUKSB7XG4gICAgICAgIGFyZ3MucHVzaCgnRElBTEVDVCcsIG9wdGlvbnMuRElBTEVDVC50b1N0cmluZygpKTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnM/LlJFVFVSTj8ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGFyZ3MucHJlc2VydmUgPSB0cnVlO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucz8uVElNRU9VVCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGFyZ3MucHVzaCgnVElNRU9VVCcsIG9wdGlvbnMuVElNRU9VVC50b1N0cmluZygpKTtcbiAgICB9XG4gICAgcmV0dXJuIGFyZ3M7XG59XG5leHBvcnRzLnB1c2hTZWFyY2hPcHRpb25zID0gcHVzaFNlYXJjaE9wdGlvbnM7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Qcm9maWxlKHJlcGx5KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdG90YWxQcm9maWxlVGltZTogcmVwbHlbMF1bMV0sXG4gICAgICAgIHBhcnNpbmdUaW1lOiByZXBseVsxXVsxXSxcbiAgICAgICAgcGlwZWxpbmVDcmVhdGlvblRpbWU6IHJlcGx5WzJdWzFdLFxuICAgICAgICBpdGVyYXRvcnNQcm9maWxlOiB0cmFuc2Zvcm1JdGVyYXRvcnMocmVwbHlbM11bMV0pXG4gICAgfTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtUHJvZmlsZSA9IHRyYW5zZm9ybVByb2ZpbGU7XG5mdW5jdGlvbiB0cmFuc2Zvcm1JdGVyYXRvcnMoSXRlcmF0b3JzUHJvZmlsZSkge1xuICAgIHZhciByZXMgPSB7fTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IEl0ZXJhdG9yc1Byb2ZpbGUubGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBJdGVyYXRvcnNQcm9maWxlW2kgKyAxXTtcbiAgICAgICAgc3dpdGNoIChJdGVyYXRvcnNQcm9maWxlW2ldKSB7XG4gICAgICAgICAgICBjYXNlICdUeXBlJzpcbiAgICAgICAgICAgICAgICByZXMudHlwZSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnQ291bnRlcic6XG4gICAgICAgICAgICAgICAgcmVzLmNvdW50ZXIgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ1RpbWUnOlxuICAgICAgICAgICAgICAgIHJlcy50aW1lID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdRdWVyeSB0eXBlJzpcbiAgICAgICAgICAgICAgICByZXMucXVlcnlUeXBlID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdDaGlsZCBpdGVyYXRvcnMnOlxuICAgICAgICAgICAgICAgIHJlcy5jaGlsZEl0ZXJhdG9ycyA9IHZhbHVlLm1hcCh0cmFuc2Zvcm1DaGlsZEl0ZXJhdG9ycyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbn1cbmZ1bmN0aW9uIHRyYW5zZm9ybUNoaWxkSXRlcmF0b3JzKEl0ZXJhdG9yc1Byb2ZpbGUpIHtcbiAgICB2YXIgcmVzID0ge307XG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPCBJdGVyYXRvcnNQcm9maWxlLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gSXRlcmF0b3JzUHJvZmlsZVtpICsgMV07XG4gICAgICAgIHN3aXRjaCAoSXRlcmF0b3JzUHJvZmlsZVtpXSkge1xuICAgICAgICAgICAgY2FzZSAnVHlwZSc6XG4gICAgICAgICAgICAgICAgcmVzLnR5cGUgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ0NvdW50ZXInOlxuICAgICAgICAgICAgICAgIHJlcy5jb3VudGVyID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdUaW1lJzpcbiAgICAgICAgICAgICAgICByZXMudGltZSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnU2l6ZSc6XG4gICAgICAgICAgICAgICAgcmVzLnNpemUgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ1Rlcm0nOlxuICAgICAgICAgICAgICAgIHJlcy50ZXJtID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdDaGlsZCBpdGVyYXRvcnMnOlxuICAgICAgICAgICAgICAgIHJlcy5jaGlsZEl0ZXJhdG9ycyA9IHZhbHVlLm1hcCh0cmFuc2Zvcm1DaGlsZEl0ZXJhdG9ycyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbn1cbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkFnZ3JlZ2F0ZVN0ZXBzID0gZXhwb3J0cy5BZ2dyZWdhdGVHcm91cEJ5UmVkdWNlcnMgPSBleHBvcnRzLlZlY3RvckFsZ29yaXRobXMgPSBleHBvcnRzLlNjaGVtYVRleHRGaWVsZFBob25ldGljcyA9IGV4cG9ydHMuU2NoZW1hRmllbGRUeXBlcyA9IGV4cG9ydHMuUmVkaXNTZWFyY2hMYW5ndWFnZXMgPSBleHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG52YXIgY29tbWFuZHNfMSA9IHJlcXVpcmUoXCIuL2NvbW1hbmRzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29tbWFuZHNfMS5kZWZhdWx0OyB9IH0pO1xudmFyIGNvbW1hbmRzXzIgPSByZXF1aXJlKFwiLi9jb21tYW5kc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlJlZGlzU2VhcmNoTGFuZ3VhZ2VzXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjb21tYW5kc18yLlJlZGlzU2VhcmNoTGFuZ3VhZ2VzOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiU2NoZW1hRmllbGRUeXBlc1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29tbWFuZHNfMi5TY2hlbWFGaWVsZFR5cGVzOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiU2NoZW1hVGV4dEZpZWxkUGhvbmV0aWNzXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjb21tYW5kc18yLlNjaGVtYVRleHRGaWVsZFBob25ldGljczsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlZlY3RvckFsZ29yaXRobXNcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvbW1hbmRzXzIuVmVjdG9yQWxnb3JpdGhtczsgfSB9KTtcbnZhciBBR0dSRUdBVEVfMSA9IHJlcXVpcmUoXCIuL2NvbW1hbmRzL0FHR1JFR0FURVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkFnZ3JlZ2F0ZUdyb3VwQnlSZWR1Y2Vyc1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gQUdHUkVHQVRFXzEuQWdncmVnYXRlR3JvdXBCeVJlZHVjZXJzOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQWdncmVnYXRlU3RlcHNcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIEFHR1JFR0FURV8xLkFnZ3JlZ2F0ZVN0ZXBzOyB9IH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSB2b2lkIDA7XG5jb25zdCBfMSA9IHJlcXVpcmUoXCIuXCIpO1xuZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSAxO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGtleSwgdGltZXN0YW1wLCB2YWx1ZSwgb3B0aW9ucykge1xuICAgIGNvbnN0IGFyZ3MgPSBbXG4gICAgICAgICdUUy5BREQnLFxuICAgICAgICBrZXksXG4gICAgICAgICgwLCBfMS50cmFuc2Zvcm1UaW1lc3RhbXBBcmd1bWVudCkodGltZXN0YW1wKSxcbiAgICAgICAgdmFsdWUudG9TdHJpbmcoKVxuICAgIF07XG4gICAgKDAsIF8xLnB1c2hSZXRlbnRpb25Bcmd1bWVudCkoYXJncywgb3B0aW9ucz8uUkVURU5USU9OKTtcbiAgICAoMCwgXzEucHVzaEVuY29kaW5nQXJndW1lbnQpKGFyZ3MsIG9wdGlvbnM/LkVOQ09ESU5HKTtcbiAgICAoMCwgXzEucHVzaENodW5rU2l6ZUFyZ3VtZW50KShhcmdzLCBvcHRpb25zPy5DSFVOS19TSVpFKTtcbiAgICBpZiAob3B0aW9ucz8uT05fRFVQTElDQVRFKSB7XG4gICAgICAgIGFyZ3MucHVzaCgnT05fRFVQTElDQVRFJywgb3B0aW9ucy5PTl9EVVBMSUNBVEUpO1xuICAgIH1cbiAgICAoMCwgXzEucHVzaExhYmVsc0FyZ3VtZW50KShhcmdzLCBvcHRpb25zPy5MQUJFTFMpO1xuICAgICgwLCBfMS5wdXNoSWdub3JlQXJndW1lbnQpKGFyZ3MsIG9wdGlvbnM/LklHTk9SRSk7XG4gICAgcmV0dXJuIGFyZ3M7XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IGV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gdm9pZCAwO1xuY29uc3QgXzEgPSByZXF1aXJlKFwiLlwiKTtcbmV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gMTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhrZXksIG9wdGlvbnMpIHtcbiAgICBjb25zdCBhcmdzID0gWydUUy5BTFRFUicsIGtleV07XG4gICAgKDAsIF8xLnB1c2hSZXRlbnRpb25Bcmd1bWVudCkoYXJncywgb3B0aW9ucz8uUkVURU5USU9OKTtcbiAgICAoMCwgXzEucHVzaENodW5rU2l6ZUFyZ3VtZW50KShhcmdzLCBvcHRpb25zPy5DSFVOS19TSVpFKTtcbiAgICAoMCwgXzEucHVzaER1cGxpY2F0ZVBvbGljeSkoYXJncywgb3B0aW9ucz8uRFVQTElDQVRFX1BPTElDWSk7XG4gICAgKDAsIF8xLnB1c2hMYWJlbHNBcmd1bWVudCkoYXJncywgb3B0aW9ucz8uTEFCRUxTKTtcbiAgICAoMCwgXzEucHVzaElnbm9yZUFyZ3VtZW50KShhcmdzLCBvcHRpb25zPy5JR05PUkUpO1xuICAgIHJldHVybiBhcmdzO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IHZvaWQgMDtcbmNvbnN0IF8xID0gcmVxdWlyZShcIi5cIik7XG5leHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IDE7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMoa2V5LCBvcHRpb25zKSB7XG4gICAgY29uc3QgYXJncyA9IFsnVFMuQ1JFQVRFJywga2V5XTtcbiAgICAoMCwgXzEucHVzaFJldGVudGlvbkFyZ3VtZW50KShhcmdzLCBvcHRpb25zPy5SRVRFTlRJT04pO1xuICAgICgwLCBfMS5wdXNoRW5jb2RpbmdBcmd1bWVudCkoYXJncywgb3B0aW9ucz8uRU5DT0RJTkcpO1xuICAgICgwLCBfMS5wdXNoQ2h1bmtTaXplQXJndW1lbnQpKGFyZ3MsIG9wdGlvbnM/LkNIVU5LX1NJWkUpO1xuICAgICgwLCBfMS5wdXNoRHVwbGljYXRlUG9saWN5KShhcmdzLCBvcHRpb25zPy5EVVBMSUNBVEVfUE9MSUNZKTtcbiAgICAoMCwgXzEucHVzaExhYmVsc0FyZ3VtZW50KShhcmdzLCBvcHRpb25zPy5MQUJFTFMpO1xuICAgICgwLCBfMS5wdXNoSWdub3JlQXJndW1lbnQpKGFyZ3MsIG9wdGlvbnM/LklHTk9SRSk7XG4gICAgcmV0dXJuIGFyZ3M7XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IGV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gdm9pZCAwO1xuZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSAxO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKHNvdXJjZUtleSwgZGVzdGluYXRpb25LZXksIGFnZ3JlZ2F0aW9uVHlwZSwgYnVja2V0RHVyYXRpb24sIGFsaWduVGltZXN0YW1wKSB7XG4gICAgY29uc3QgYXJncyA9IFtcbiAgICAgICAgJ1RTLkNSRUFURVJVTEUnLFxuICAgICAgICBzb3VyY2VLZXksXG4gICAgICAgIGRlc3RpbmF0aW9uS2V5LFxuICAgICAgICAnQUdHUkVHQVRJT04nLFxuICAgICAgICBhZ2dyZWdhdGlvblR5cGUsXG4gICAgICAgIGJ1Y2tldER1cmF0aW9uLnRvU3RyaW5nKClcbiAgICBdO1xuICAgIGlmIChhbGlnblRpbWVzdGFtcCkge1xuICAgICAgICBhcmdzLnB1c2goYWxpZ25UaW1lc3RhbXAudG9TdHJpbmcoKSk7XG4gICAgfVxuICAgIHJldHVybiBhcmdzO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IHZvaWQgMDtcbmNvbnN0IF8xID0gcmVxdWlyZShcIi5cIik7XG5leHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IDE7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMoa2V5LCB2YWx1ZSwgb3B0aW9ucykge1xuICAgIHJldHVybiAoMCwgXzEudHJhbnNmb3JtSW5jckRlY3JBcmd1bWVudHMpKCdUUy5ERUNSQlknLCBrZXksIHZhbHVlLCBvcHRpb25zKTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gZXhwb3J0cy5GSVJUU19LRVlfSU5ERVggPSB2b2lkIDA7XG5jb25zdCBfMSA9IHJlcXVpcmUoXCIuXCIpO1xuZXhwb3J0cy5GSVJUU19LRVlfSU5ERVggPSAxO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGtleSwgZnJvbVRpbWVzdGFtcCwgdG9UaW1lc3RhbXApIHtcbiAgICByZXR1cm4gW1xuICAgICAgICAnVFMuREVMJyxcbiAgICAgICAga2V5LFxuICAgICAgICAoMCwgXzEudHJhbnNmb3JtVGltZXN0YW1wQXJndW1lbnQpKGZyb21UaW1lc3RhbXApLFxuICAgICAgICAoMCwgXzEudHJhbnNmb3JtVGltZXN0YW1wQXJndW1lbnQpKHRvVGltZXN0YW1wKVxuICAgIF07XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IGV4cG9ydHMuRklSU1RfS0VZX0lOREVYID0gdm9pZCAwO1xuZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSAxO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKHNvdXJjZUtleSwgZGVzdGluYXRpb25LZXkpIHtcbiAgICByZXR1cm4gW1xuICAgICAgICAnVFMuREVMRVRFUlVMRScsXG4gICAgICAgIHNvdXJjZUtleSxcbiAgICAgICAgZGVzdGluYXRpb25LZXlcbiAgICBdO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1SZXBseSA9IGV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gZXhwb3J0cy5JU19SRUFEX09OTFkgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IHZvaWQgMDtcbmNvbnN0IF8xID0gcmVxdWlyZShcIi5cIik7XG5leHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IDE7XG5leHBvcnRzLklTX1JFQURfT05MWSA9IHRydWU7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMoa2V5LCBvcHRpb25zKSB7XG4gICAgcmV0dXJuICgwLCBfMS5wdXNoTGF0ZXN0QXJndW1lbnQpKFsnVFMuR0VUJywga2V5XSwgb3B0aW9ucz8uTEFURVNUKTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuZnVuY3Rpb24gdHJhbnNmb3JtUmVwbHkocmVwbHkpIHtcbiAgICBpZiAocmVwbHkubGVuZ3RoID09PSAwKVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gKDAsIF8xLnRyYW5zZm9ybVNhbXBsZVJlcGx5KShyZXBseSk7XG59XG5leHBvcnRzLnRyYW5zZm9ybVJlcGx5ID0gdHJhbnNmb3JtUmVwbHk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IHZvaWQgMDtcbmNvbnN0IF8xID0gcmVxdWlyZShcIi5cIik7XG5leHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IDE7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMoa2V5LCB2YWx1ZSwgb3B0aW9ucykge1xuICAgIHJldHVybiAoMCwgXzEudHJhbnNmb3JtSW5jckRlY3JBcmd1bWVudHMpKCdUUy5JTkNSQlknLCBrZXksIHZhbHVlLCBvcHRpb25zKTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtUmVwbHkgPSBleHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IGV4cG9ydHMuSVNfUkVBRF9PTkxZID0gZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSB2b2lkIDA7XG5leHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IDE7XG5leHBvcnRzLklTX1JFQURfT05MWSA9IHRydWU7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMoa2V5KSB7XG4gICAgcmV0dXJuIFsnVFMuSU5GTycsIGtleV07XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbmZ1bmN0aW9uIHRyYW5zZm9ybVJlcGx5KHJlcGx5KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdG90YWxTYW1wbGVzOiByZXBseVsxXSxcbiAgICAgICAgbWVtb3J5VXNhZ2U6IHJlcGx5WzNdLFxuICAgICAgICBmaXJzdFRpbWVzdGFtcDogcmVwbHlbNV0sXG4gICAgICAgIGxhc3RUaW1lc3RhbXA6IHJlcGx5WzddLFxuICAgICAgICByZXRlbnRpb25UaW1lOiByZXBseVs5XSxcbiAgICAgICAgY2h1bmtDb3VudDogcmVwbHlbMTFdLFxuICAgICAgICBjaHVua1NpemU6IHJlcGx5WzEzXSxcbiAgICAgICAgY2h1bmtUeXBlOiByZXBseVsxNV0sXG4gICAgICAgIGR1cGxpY2F0ZVBvbGljeTogcmVwbHlbMTddLFxuICAgICAgICBsYWJlbHM6IHJlcGx5WzE5XS5tYXAoKFtuYW1lLCB2YWx1ZV0pID0+ICh7XG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgdmFsdWVcbiAgICAgICAgfSkpLFxuICAgICAgICBzb3VyY2VLZXk6IHJlcGx5WzIxXSxcbiAgICAgICAgcnVsZXM6IHJlcGx5WzIzXS5tYXAoKFtrZXksIHRpbWVCdWNrZXQsIGFnZ3JlZ2F0aW9uVHlwZV0pID0+ICh7XG4gICAgICAgICAgICBrZXksXG4gICAgICAgICAgICB0aW1lQnVja2V0LFxuICAgICAgICAgICAgYWdncmVnYXRpb25UeXBlXG4gICAgICAgIH0pKVxuICAgIH07XG59XG5leHBvcnRzLnRyYW5zZm9ybVJlcGx5ID0gdHJhbnNmb3JtUmVwbHk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1SZXBseSA9IGV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSBleHBvcnRzLklTX1JFQURfT05MWSA9IHZvaWQgMDtcbmNvbnN0IElORk9fMSA9IHJlcXVpcmUoXCIuL0lORk9cIik7XG52YXIgSU5GT18yID0gcmVxdWlyZShcIi4vSU5GT1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIklTX1JFQURfT05MWVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gSU5GT18yLklTX1JFQURfT05MWTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkZJUlNUX0tFWV9JTkRFWFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gSU5GT18yLkZJUlNUX0tFWV9JTkRFWDsgfSB9KTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhrZXkpIHtcbiAgICBjb25zdCBhcmdzID0gKDAsIElORk9fMS50cmFuc2Zvcm1Bcmd1bWVudHMpKGtleSk7XG4gICAgYXJncy5wdXNoKCdERUJVRycpO1xuICAgIHJldHVybiBhcmdzO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG5mdW5jdGlvbiB0cmFuc2Zvcm1SZXBseShyYXdSZXBseSkge1xuICAgIGNvbnN0IHJlcGx5ID0gKDAsIElORk9fMS50cmFuc2Zvcm1SZXBseSkocmF3UmVwbHkpO1xuICAgIHJlcGx5LmtleVNlbGZOYW1lID0gcmF3UmVwbHlbMjVdO1xuICAgIHJlcGx5LmNodW5rcyA9IHJhd1JlcGx5WzI3XS5tYXAoY2h1bmsgPT4gKHtcbiAgICAgICAgc3RhcnRUaW1lc3RhbXA6IGNodW5rWzFdLFxuICAgICAgICBlbmRUaW1lc3RhbXA6IGNodW5rWzNdLFxuICAgICAgICBzYW1wbGVzOiBjaHVua1s1XSxcbiAgICAgICAgc2l6ZTogY2h1bmtbN10sXG4gICAgICAgIGJ5dGVzUGVyU2FtcGxlOiBjaHVua1s5XVxuICAgIH0pKTtcbiAgICByZXR1cm4gcmVwbHk7XG59XG5leHBvcnRzLnRyYW5zZm9ybVJlcGx5ID0gdHJhbnNmb3JtUmVwbHk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IHZvaWQgMDtcbmNvbnN0IF8xID0gcmVxdWlyZShcIi5cIik7XG5leHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IDE7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHModG9BZGQpIHtcbiAgICBjb25zdCBhcmdzID0gWydUUy5NQUREJ107XG4gICAgZm9yIChjb25zdCB7IGtleSwgdGltZXN0YW1wLCB2YWx1ZSB9IG9mIHRvQWRkKSB7XG4gICAgICAgIGFyZ3MucHVzaChrZXksICgwLCBfMS50cmFuc2Zvcm1UaW1lc3RhbXBBcmd1bWVudCkodGltZXN0YW1wKSwgdmFsdWUudG9TdHJpbmcoKSk7XG4gICAgfVxuICAgIHJldHVybiBhcmdzO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1SZXBseSA9IGV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gZXhwb3J0cy5JU19SRUFEX09OTFkgPSB2b2lkIDA7XG5jb25zdCBfMSA9IHJlcXVpcmUoXCIuXCIpO1xuZXhwb3J0cy5JU19SRUFEX09OTFkgPSB0cnVlO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGZpbHRlciwgb3B0aW9ucykge1xuICAgIGNvbnN0IGFyZ3MgPSAoMCwgXzEucHVzaExhdGVzdEFyZ3VtZW50KShbJ1RTLk1HRVQnXSwgb3B0aW9ucz8uTEFURVNUKTtcbiAgICByZXR1cm4gKDAsIF8xLnB1c2hGaWx0ZXJBcmd1bWVudCkoYXJncywgZmlsdGVyKTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuZnVuY3Rpb24gdHJhbnNmb3JtUmVwbHkocmVwbHkpIHtcbiAgICByZXR1cm4gcmVwbHkubWFwKChba2V5LCBfLCBzYW1wbGVdKSA9PiAoe1xuICAgICAgICBrZXksXG4gICAgICAgIHNhbXBsZTogKDAsIF8xLnRyYW5zZm9ybVNhbXBsZVJlcGx5KShzYW1wbGUpXG4gICAgfSkpO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1SZXBseSA9IHRyYW5zZm9ybVJlcGx5O1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtUmVwbHkgPSBleHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IGV4cG9ydHMuSVNfUkVBRF9PTkxZID0gdm9pZCAwO1xuY29uc3QgXzEgPSByZXF1aXJlKFwiLlwiKTtcbmV4cG9ydHMuSVNfUkVBRF9PTkxZID0gdHJ1ZTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhmaWx0ZXIsIG9wdGlvbnMpIHtcbiAgICBjb25zdCBhcmdzID0gKDAsIF8xLnB1c2hXaXRoTGFiZWxzQXJndW1lbnQpKFsnVFMuTUdFVCddLCBvcHRpb25zPy5TRUxFQ1RFRF9MQUJFTFMpO1xuICAgIHJldHVybiAoMCwgXzEucHVzaEZpbHRlckFyZ3VtZW50KShhcmdzLCBmaWx0ZXIpO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG47XG5mdW5jdGlvbiB0cmFuc2Zvcm1SZXBseShyZXBseSkge1xuICAgIHJldHVybiByZXBseS5tYXAoKFtrZXksIGxhYmVscywgc2FtcGxlXSkgPT4gKHtcbiAgICAgICAga2V5LFxuICAgICAgICBsYWJlbHM6ICgwLCBfMS50cmFuc2Zvcm1MYWJsZXNSZXBseSkobGFiZWxzKSxcbiAgICAgICAgc2FtcGxlOiAoMCwgXzEudHJhbnNmb3JtU2FtcGxlUmVwbHkpKHNhbXBsZSlcbiAgICB9KSk7XG59XG5leHBvcnRzLnRyYW5zZm9ybVJlcGx5ID0gdHJhbnNmb3JtUmVwbHk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLklTX1JFQURfT05MWSA9IHZvaWQgMDtcbmNvbnN0IGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEgPSByZXF1aXJlKFwiQHJlZGlzL2NsaWVudC9kaXN0L2xpYi9jb21tYW5kcy9nZW5lcmljLXRyYW5zZm9ybWVyc1wiKTtcbmV4cG9ydHMuSVNfUkVBRF9PTkxZID0gdHJ1ZTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhmaWx0ZXIpIHtcbiAgICByZXR1cm4gKDAsIGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEucHVzaFZlcmRpY3RBcmd1bWVudHMpKFsnVFMuUVVFUllJTkRFWCddLCBmaWx0ZXIpO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1SZXBseSA9IGV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gZXhwb3J0cy5JU19SRUFEX09OTFkgPSBleHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IHZvaWQgMDtcbmNvbnN0IF8xID0gcmVxdWlyZShcIi5cIik7XG5leHBvcnRzLkZJUlNUX0tFWV9JTkRFWCA9IDE7XG5leHBvcnRzLklTX1JFQURfT05MWSA9IHRydWU7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMoa2V5LCBmcm9tVGltZXN0YW1wLCB0b1RpbWVzdGFtcCwgb3B0aW9ucykge1xuICAgIHJldHVybiAoMCwgXzEucHVzaFJhbmdlQXJndW1lbnRzKShbJ1RTLlJBTkdFJywga2V5XSwgZnJvbVRpbWVzdGFtcCwgdG9UaW1lc3RhbXAsIG9wdGlvbnMpO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG5mdW5jdGlvbiB0cmFuc2Zvcm1SZXBseShyZXBseSkge1xuICAgIHJldHVybiAoMCwgXzEudHJhbnNmb3JtUmFuZ2VSZXBseSkocmVwbHkpO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1SZXBseSA9IHRyYW5zZm9ybVJlcGx5O1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtUmVwbHkgPSBleHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IGV4cG9ydHMuSVNfUkVBRF9PTkxZID0gZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSB2b2lkIDA7XG5jb25zdCBfMSA9IHJlcXVpcmUoXCIuXCIpO1xuZXhwb3J0cy5GSVJTVF9LRVlfSU5ERVggPSAxO1xuZXhwb3J0cy5JU19SRUFEX09OTFkgPSB0cnVlO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGtleSwgZnJvbVRpbWVzdGFtcCwgdG9UaW1lc3RhbXAsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gKDAsIF8xLnB1c2hSYW5nZUFyZ3VtZW50cykoWydUUy5SRVZSQU5HRScsIGtleV0sIGZyb21UaW1lc3RhbXAsIHRvVGltZXN0YW1wLCBvcHRpb25zKTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xuZnVuY3Rpb24gdHJhbnNmb3JtUmVwbHkocmVwbHkpIHtcbiAgICByZXR1cm4gKDAsIF8xLnRyYW5zZm9ybVJhbmdlUmVwbHkpKHJlcGx5KTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtUmVwbHkgPSB0cmFuc2Zvcm1SZXBseTtcbiIsCiAgICAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRyYW5zZm9ybVJlcGx5ID0gZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSBleHBvcnRzLklTX1JFQURfT05MWSA9IHZvaWQgMDtcbmNvbnN0IF8xID0gcmVxdWlyZShcIi5cIik7XG5leHBvcnRzLklTX1JFQURfT05MWSA9IHRydWU7XG5mdW5jdGlvbiB0cmFuc2Zvcm1Bcmd1bWVudHMoZnJvbVRpbWVzdGFtcCwgdG9UaW1lc3RhbXAsIGZpbHRlcnMsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gKDAsIF8xLnB1c2hNUmFuZ2VBcmd1bWVudHMpKFsnVFMuTVJBTkdFJ10sIGZyb21UaW1lc3RhbXAsIHRvVGltZXN0YW1wLCBmaWx0ZXJzLCBvcHRpb25zKTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xudmFyIF8yID0gcmVxdWlyZShcIi5cIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ0cmFuc2Zvcm1SZXBseVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gXzIudHJhbnNmb3JtTVJhbmdlUmVwbHk7IH0gfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1SZXBseSA9IGV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gZXhwb3J0cy5JU19SRUFEX09OTFkgPSB2b2lkIDA7XG5jb25zdCBfMSA9IHJlcXVpcmUoXCIuXCIpO1xuZXhwb3J0cy5JU19SRUFEX09OTFkgPSB0cnVlO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGZyb21UaW1lc3RhbXAsIHRvVGltZXN0YW1wLCBmaWx0ZXJzLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuICgwLCBfMS5wdXNoTVJhbmdlV2l0aExhYmVsc0FyZ3VtZW50cykoWydUUy5NUkFOR0UnXSwgZnJvbVRpbWVzdGFtcCwgdG9UaW1lc3RhbXAsIGZpbHRlcnMsIG9wdGlvbnMpO1xufVxuZXhwb3J0cy50cmFuc2Zvcm1Bcmd1bWVudHMgPSB0cmFuc2Zvcm1Bcmd1bWVudHM7XG52YXIgXzIgPSByZXF1aXJlKFwiLlwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInRyYW5zZm9ybVJlcGx5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBfMi50cmFuc2Zvcm1NUmFuZ2VXaXRoTGFiZWxzUmVwbHk7IH0gfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50cmFuc2Zvcm1SZXBseSA9IGV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gZXhwb3J0cy5JU19SRUFEX09OTFkgPSB2b2lkIDA7XG5jb25zdCBfMSA9IHJlcXVpcmUoXCIuXCIpO1xuZXhwb3J0cy5JU19SRUFEX09OTFkgPSB0cnVlO1xuZnVuY3Rpb24gdHJhbnNmb3JtQXJndW1lbnRzKGZyb21UaW1lc3RhbXAsIHRvVGltZXN0YW1wLCBmaWx0ZXJzLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuICgwLCBfMS5wdXNoTVJhbmdlQXJndW1lbnRzKShbJ1RTLk1SRVZSQU5HRSddLCBmcm9tVGltZXN0YW1wLCB0b1RpbWVzdGFtcCwgZmlsdGVycywgb3B0aW9ucyk7XG59XG5leHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IHRyYW5zZm9ybUFyZ3VtZW50cztcbnZhciBfMiA9IHJlcXVpcmUoXCIuXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidHJhbnNmb3JtUmVwbHlcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIF8yLnRyYW5zZm9ybU1SYW5nZVJlcGx5OyB9IH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudHJhbnNmb3JtUmVwbHkgPSBleHBvcnRzLnRyYW5zZm9ybUFyZ3VtZW50cyA9IGV4cG9ydHMuSVNfUkVBRF9PTkxZID0gdm9pZCAwO1xuY29uc3QgXzEgPSByZXF1aXJlKFwiLlwiKTtcbmV4cG9ydHMuSVNfUkVBRF9PTkxZID0gdHJ1ZTtcbmZ1bmN0aW9uIHRyYW5zZm9ybUFyZ3VtZW50cyhmcm9tVGltZXN0YW1wLCB0b1RpbWVzdGFtcCwgZmlsdGVycywgb3B0aW9ucykge1xuICAgIHJldHVybiAoMCwgXzEucHVzaE1SYW5nZVdpdGhMYWJlbHNBcmd1bWVudHMpKFsnVFMuTVJFVlJBTkdFJ10sIGZyb21UaW1lc3RhbXAsIHRvVGltZXN0YW1wLCBmaWx0ZXJzLCBvcHRpb25zKTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtQXJndW1lbnRzID0gdHJhbnNmb3JtQXJndW1lbnRzO1xudmFyIF8yID0gcmVxdWlyZShcIi5cIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ0cmFuc2Zvcm1SZXBseVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gXzIudHJhbnNmb3JtTVJhbmdlV2l0aExhYmVsc1JlcGx5OyB9IH0pO1xuIiwKICAgICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucHVzaExhdGVzdEFyZ3VtZW50ID0gZXhwb3J0cy50cmFuc2Zvcm1NUmFuZ2VXaXRoTGFiZWxzUmVwbHkgPSBleHBvcnRzLnRyYW5zZm9ybU1SYW5nZVJlcGx5ID0gZXhwb3J0cy50cmFuc2Zvcm1SYW5nZVJlcGx5ID0gZXhwb3J0cy5wdXNoTVJhbmdlV2l0aExhYmVsc0FyZ3VtZW50cyA9IGV4cG9ydHMucHVzaFdpdGhMYWJlbHNBcmd1bWVudCA9IGV4cG9ydHMucHVzaE1SYW5nZUFyZ3VtZW50cyA9IGV4cG9ydHMucHVzaEZpbHRlckFyZ3VtZW50ID0gZXhwb3J0cy5wdXNoTVJhbmdlR3JvdXBCeUFyZ3VtZW50cyA9IGV4cG9ydHMucHVzaFJhbmdlQXJndW1lbnRzID0gZXhwb3J0cy5UaW1lU2VyaWVzQnVja2V0VGltZXN0YW1wID0gZXhwb3J0cy50cmFuc2Zvcm1TYW1wbGVSZXBseSA9IGV4cG9ydHMudHJhbnNmb3JtSW5jckRlY3JBcmd1bWVudHMgPSBleHBvcnRzLnB1c2hMYWJlbHNBcmd1bWVudCA9IGV4cG9ydHMudHJhbnNmb3JtTGFibGVzUmVwbHkgPSBleHBvcnRzLnB1c2hEdXBsaWNhdGVQb2xpY3kgPSBleHBvcnRzLnB1c2hDaHVua1NpemVBcmd1bWVudCA9IGV4cG9ydHMucHVzaEVuY29kaW5nQXJndW1lbnQgPSBleHBvcnRzLlRpbWVTZXJpZXNFbmNvZGluZyA9IGV4cG9ydHMucHVzaFJldGVudGlvbkFyZ3VtZW50ID0gZXhwb3J0cy5wdXNoSWdub3JlQXJndW1lbnQgPSBleHBvcnRzLnRyYW5zZm9ybVRpbWVzdGFtcEFyZ3VtZW50ID0gZXhwb3J0cy5UaW1lU2VyaWVzUmVkdWNlcnMgPSBleHBvcnRzLlRpbWVTZXJpZXNEdXBsaWNhdGVQb2xpY2llcyA9IGV4cG9ydHMuVGltZVNlcmllc0FnZ3JlZ2F0aW9uVHlwZSA9IHZvaWQgMDtcbmNvbnN0IEFERCA9IHJlcXVpcmUoXCIuL0FERFwiKTtcbmNvbnN0IEFMVEVSID0gcmVxdWlyZShcIi4vQUxURVJcIik7XG5jb25zdCBDUkVBVEUgPSByZXF1aXJlKFwiLi9DUkVBVEVcIik7XG5jb25zdCBDUkVBVEVSVUxFID0gcmVxdWlyZShcIi4vQ1JFQVRFUlVMRVwiKTtcbmNvbnN0IERFQ1JCWSA9IHJlcXVpcmUoXCIuL0RFQ1JCWVwiKTtcbmNvbnN0IERFTCA9IHJlcXVpcmUoXCIuL0RFTFwiKTtcbmNvbnN0IERFTEVURVJVTEUgPSByZXF1aXJlKFwiLi9ERUxFVEVSVUxFXCIpO1xuY29uc3QgR0VUID0gcmVxdWlyZShcIi4vR0VUXCIpO1xuY29uc3QgSU5DUkJZID0gcmVxdWlyZShcIi4vSU5DUkJZXCIpO1xuY29uc3QgSU5GT19ERUJVRyA9IHJlcXVpcmUoXCIuL0lORk9fREVCVUdcIik7XG5jb25zdCBJTkZPID0gcmVxdWlyZShcIi4vSU5GT1wiKTtcbmNvbnN0IE1BREQgPSByZXF1aXJlKFwiLi9NQUREXCIpO1xuY29uc3QgTUdFVCA9IHJlcXVpcmUoXCIuL01HRVRcIik7XG5jb25zdCBNR0VUX1dJVEhMQUJFTFMgPSByZXF1aXJlKFwiLi9NR0VUX1dJVEhMQUJFTFNcIik7XG5jb25zdCBRVUVSWUlOREVYID0gcmVxdWlyZShcIi4vUVVFUllJTkRFWFwiKTtcbmNvbnN0IFJBTkdFID0gcmVxdWlyZShcIi4vUkFOR0VcIik7XG5jb25zdCBSRVZSQU5HRSA9IHJlcXVpcmUoXCIuL1JFVlJBTkdFXCIpO1xuY29uc3QgTVJBTkdFID0gcmVxdWlyZShcIi4vTVJBTkdFXCIpO1xuY29uc3QgTVJBTkdFX1dJVEhMQUJFTFMgPSByZXF1aXJlKFwiLi9NUkFOR0VfV0lUSExBQkVMU1wiKTtcbmNvbnN0IE1SRVZSQU5HRSA9IHJlcXVpcmUoXCIuL01SRVZSQU5HRVwiKTtcbmNvbnN0IE1SRVZSQU5HRV9XSVRITEFCRUxTID0gcmVxdWlyZShcIi4vTVJFVlJBTkdFX1dJVEhMQUJFTFNcIik7XG5jb25zdCBnZW5lcmljX3RyYW5zZm9ybWVyc18xID0gcmVxdWlyZShcIkByZWRpcy9jbGllbnQvZGlzdC9saWIvY29tbWFuZHMvZ2VuZXJpYy10cmFuc2Zvcm1lcnNcIik7XG5leHBvcnRzLmRlZmF1bHQgPSB7XG4gICAgQURELFxuICAgIGFkZDogQURELFxuICAgIEFMVEVSLFxuICAgIGFsdGVyOiBBTFRFUixcbiAgICBDUkVBVEUsXG4gICAgY3JlYXRlOiBDUkVBVEUsXG4gICAgQ1JFQVRFUlVMRSxcbiAgICBjcmVhdGVSdWxlOiBDUkVBVEVSVUxFLFxuICAgIERFQ1JCWSxcbiAgICBkZWNyQnk6IERFQ1JCWSxcbiAgICBERUwsXG4gICAgZGVsOiBERUwsXG4gICAgREVMRVRFUlVMRSxcbiAgICBkZWxldGVSdWxlOiBERUxFVEVSVUxFLFxuICAgIEdFVCxcbiAgICBnZXQ6IEdFVCxcbiAgICBJTkNSQlksXG4gICAgaW5jckJ5OiBJTkNSQlksXG4gICAgSU5GT19ERUJVRyxcbiAgICBpbmZvRGVidWc6IElORk9fREVCVUcsXG4gICAgSU5GTyxcbiAgICBpbmZvOiBJTkZPLFxuICAgIE1BREQsXG4gICAgbUFkZDogTUFERCxcbiAgICBNR0VULFxuICAgIG1HZXQ6IE1HRVQsXG4gICAgTUdFVF9XSVRITEFCRUxTLFxuICAgIG1HZXRXaXRoTGFiZWxzOiBNR0VUX1dJVEhMQUJFTFMsXG4gICAgUVVFUllJTkRFWCxcbiAgICBxdWVyeUluZGV4OiBRVUVSWUlOREVYLFxuICAgIFJBTkdFLFxuICAgIHJhbmdlOiBSQU5HRSxcbiAgICBSRVZSQU5HRSxcbiAgICByZXZSYW5nZTogUkVWUkFOR0UsXG4gICAgTVJBTkdFLFxuICAgIG1SYW5nZTogTVJBTkdFLFxuICAgIE1SQU5HRV9XSVRITEFCRUxTLFxuICAgIG1SYW5nZVdpdGhMYWJlbHM6IE1SQU5HRV9XSVRITEFCRUxTLFxuICAgIE1SRVZSQU5HRSxcbiAgICBtUmV2UmFuZ2U6IE1SRVZSQU5HRSxcbiAgICBNUkVWUkFOR0VfV0lUSExBQkVMUyxcbiAgICBtUmV2UmFuZ2VXaXRoTGFiZWxzOiBNUkVWUkFOR0VfV0lUSExBQkVMU1xufTtcbnZhciBUaW1lU2VyaWVzQWdncmVnYXRpb25UeXBlO1xuKGZ1bmN0aW9uIChUaW1lU2VyaWVzQWdncmVnYXRpb25UeXBlKSB7XG4gICAgVGltZVNlcmllc0FnZ3JlZ2F0aW9uVHlwZVtcIkFWR1wiXSA9IFwiQVZHXCI7XG4gICAgLy8gQGRlcHJlY2F0ZWRcbiAgICBUaW1lU2VyaWVzQWdncmVnYXRpb25UeXBlW1wiQVZFUkFHRVwiXSA9IFwiQVZHXCI7XG4gICAgVGltZVNlcmllc0FnZ3JlZ2F0aW9uVHlwZVtcIkZJUlNUXCJdID0gXCJGSVJTVFwiO1xuICAgIFRpbWVTZXJpZXNBZ2dyZWdhdGlvblR5cGVbXCJMQVNUXCJdID0gXCJMQVNUXCI7XG4gICAgVGltZVNlcmllc0FnZ3JlZ2F0aW9uVHlwZVtcIk1JTlwiXSA9IFwiTUlOXCI7XG4gICAgLy8gQGRlcHJlY2F0ZWRcbiAgICBUaW1lU2VyaWVzQWdncmVnYXRpb25UeXBlW1wiTUlOSU1VTVwiXSA9IFwiTUlOXCI7XG4gICAgVGltZVNlcmllc0FnZ3JlZ2F0aW9uVHlwZVtcIk1BWFwiXSA9IFwiTUFYXCI7XG4gICAgLy8gQGRlcHJlY2F0ZWRcbiAgICBUaW1lU2VyaWVzQWdncmVnYXRpb25UeXBlW1wiTUFYSU1VTVwiXSA9IFwiTUFYXCI7XG4gICAgVGltZVNlcmllc0FnZ3JlZ2F0aW9uVHlwZVtcIlNVTVwiXSA9IFwiU1VNXCI7XG4gICAgVGltZVNlcmllc0FnZ3JlZ2F0aW9uVHlwZVtcIlJBTkdFXCJdID0gXCJSQU5HRVwiO1xuICAgIFRpbWVTZXJpZXNBZ2dyZWdhdGlvblR5cGVbXCJDT1VOVFwiXSA9IFwiQ09VTlRcIjtcbiAgICBUaW1lU2VyaWVzQWdncmVnYXRpb25UeXBlW1wiU1REX1BcIl0gPSBcIlNURC5QXCI7XG4gICAgVGltZVNlcmllc0FnZ3JlZ2F0aW9uVHlwZVtcIlNURF9TXCJdID0gXCJTVEQuU1wiO1xuICAgIFRpbWVTZXJpZXNBZ2dyZWdhdGlvblR5cGVbXCJWQVJfUFwiXSA9IFwiVkFSLlBcIjtcbiAgICBUaW1lU2VyaWVzQWdncmVnYXRpb25UeXBlW1wiVkFSX1NcIl0gPSBcIlZBUi5TXCI7XG4gICAgVGltZVNlcmllc0FnZ3JlZ2F0aW9uVHlwZVtcIlRXQVwiXSA9IFwiVFdBXCI7XG59KShUaW1lU2VyaWVzQWdncmVnYXRpb25UeXBlIHx8IChleHBvcnRzLlRpbWVTZXJpZXNBZ2dyZWdhdGlvblR5cGUgPSBUaW1lU2VyaWVzQWdncmVnYXRpb25UeXBlID0ge30pKTtcbnZhciBUaW1lU2VyaWVzRHVwbGljYXRlUG9saWNpZXM7XG4oZnVuY3Rpb24gKFRpbWVTZXJpZXNEdXBsaWNhdGVQb2xpY2llcykge1xuICAgIFRpbWVTZXJpZXNEdXBsaWNhdGVQb2xpY2llc1tcIkJMT0NLXCJdID0gXCJCTE9DS1wiO1xuICAgIFRpbWVTZXJpZXNEdXBsaWNhdGVQb2xpY2llc1tcIkZJUlNUXCJdID0gXCJGSVJTVFwiO1xuICAgIFRpbWVTZXJpZXNEdXBsaWNhdGVQb2xpY2llc1tcIkxBU1RcIl0gPSBcIkxBU1RcIjtcbiAgICBUaW1lU2VyaWVzRHVwbGljYXRlUG9saWNpZXNbXCJNSU5cIl0gPSBcIk1JTlwiO1xuICAgIFRpbWVTZXJpZXNEdXBsaWNhdGVQb2xpY2llc1tcIk1BWFwiXSA9IFwiTUFYXCI7XG4gICAgVGltZVNlcmllc0R1cGxpY2F0ZVBvbGljaWVzW1wiU1VNXCJdID0gXCJTVU1cIjtcbn0pKFRpbWVTZXJpZXNEdXBsaWNhdGVQb2xpY2llcyB8fCAoZXhwb3J0cy5UaW1lU2VyaWVzRHVwbGljYXRlUG9saWNpZXMgPSBUaW1lU2VyaWVzRHVwbGljYXRlUG9saWNpZXMgPSB7fSkpO1xudmFyIFRpbWVTZXJpZXNSZWR1Y2VycztcbihmdW5jdGlvbiAoVGltZVNlcmllc1JlZHVjZXJzKSB7XG4gICAgVGltZVNlcmllc1JlZHVjZXJzW1wiQVZHXCJdID0gXCJBVkdcIjtcbiAgICBUaW1lU2VyaWVzUmVkdWNlcnNbXCJTVU1cIl0gPSBcIlNVTVwiO1xuICAgIFRpbWVTZXJpZXNSZWR1Y2Vyc1tcIk1JTlwiXSA9IFwiTUlOXCI7XG4gICAgLy8gQGRlcHJlY2F0ZWRcbiAgICBUaW1lU2VyaWVzUmVkdWNlcnNbXCJNSU5JTVVNXCJdID0gXCJNSU5cIjtcbiAgICBUaW1lU2VyaWVzUmVkdWNlcnNbXCJNQVhcIl0gPSBcIk1BWFwiO1xuICAgIC8vIEBkZXByZWNhdGVkXG4gICAgVGltZVNlcmllc1JlZHVjZXJzW1wiTUFYSU1VTVwiXSA9IFwiTUFYXCI7XG4gICAgVGltZVNlcmllc1JlZHVjZXJzW1wiUkFOR0VcIl0gPSBcInJhbmdlXCI7XG4gICAgVGltZVNlcmllc1JlZHVjZXJzW1wiQ09VTlRcIl0gPSBcIkNPVU5UXCI7XG4gICAgVGltZVNlcmllc1JlZHVjZXJzW1wiU1REX1BcIl0gPSBcIlNURC5QXCI7XG4gICAgVGltZVNlcmllc1JlZHVjZXJzW1wiU1REX1NcIl0gPSBcIlNURC5TXCI7XG4gICAgVGltZVNlcmllc1JlZHVjZXJzW1wiVkFSX1BcIl0gPSBcIlZBUi5QXCI7XG4gICAgVGltZVNlcmllc1JlZHVjZXJzW1wiVkFSX1NcIl0gPSBcIlZBUi5TXCI7XG59KShUaW1lU2VyaWVzUmVkdWNlcnMgfHwgKGV4cG9ydHMuVGltZVNlcmllc1JlZHVjZXJzID0gVGltZVNlcmllc1JlZHVjZXJzID0ge30pKTtcbmZ1bmN0aW9uIHRyYW5zZm9ybVRpbWVzdGFtcEFyZ3VtZW50KHRpbWVzdGFtcCkge1xuICAgIGlmICh0eXBlb2YgdGltZXN0YW1wID09PSAnc3RyaW5nJylcbiAgICAgICAgcmV0dXJuIHRpbWVzdGFtcDtcbiAgICByZXR1cm4gKHR5cGVvZiB0aW1lc3RhbXAgPT09ICdudW1iZXInID9cbiAgICAgICAgdGltZXN0YW1wIDpcbiAgICAgICAgdGltZXN0YW1wLmdldFRpbWUoKSkudG9TdHJpbmcoKTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtVGltZXN0YW1wQXJndW1lbnQgPSB0cmFuc2Zvcm1UaW1lc3RhbXBBcmd1bWVudDtcbmZ1bmN0aW9uIHB1c2hJZ25vcmVBcmd1bWVudChhcmdzLCBpZ25vcmUpIHtcbiAgICBpZiAoaWdub3JlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgYXJncy5wdXNoKCdJR05PUkUnLCBpZ25vcmUuTUFYX1RJTUVfRElGRi50b1N0cmluZygpLCBpZ25vcmUuTUFYX1ZBTF9ESUZGLnRvU3RyaW5nKCkpO1xuICAgIH1cbn1cbmV4cG9ydHMucHVzaElnbm9yZUFyZ3VtZW50ID0gcHVzaElnbm9yZUFyZ3VtZW50O1xuZnVuY3Rpb24gcHVzaFJldGVudGlvbkFyZ3VtZW50KGFyZ3MsIHJldGVudGlvbikge1xuICAgIGlmIChyZXRlbnRpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBhcmdzLnB1c2goJ1JFVEVOVElPTicsIHJldGVudGlvbi50b1N0cmluZygpKTtcbiAgICB9XG4gICAgcmV0dXJuIGFyZ3M7XG59XG5leHBvcnRzLnB1c2hSZXRlbnRpb25Bcmd1bWVudCA9IHB1c2hSZXRlbnRpb25Bcmd1bWVudDtcbnZhciBUaW1lU2VyaWVzRW5jb2Rpbmc7XG4oZnVuY3Rpb24gKFRpbWVTZXJpZXNFbmNvZGluZykge1xuICAgIFRpbWVTZXJpZXNFbmNvZGluZ1tcIkNPTVBSRVNTRURcIl0gPSBcIkNPTVBSRVNTRURcIjtcbiAgICBUaW1lU2VyaWVzRW5jb2RpbmdbXCJVTkNPTVBSRVNTRURcIl0gPSBcIlVOQ09NUFJFU1NFRFwiO1xufSkoVGltZVNlcmllc0VuY29kaW5nIHx8IChleHBvcnRzLlRpbWVTZXJpZXNFbmNvZGluZyA9IFRpbWVTZXJpZXNFbmNvZGluZyA9IHt9KSk7XG5mdW5jdGlvbiBwdXNoRW5jb2RpbmdBcmd1bWVudChhcmdzLCBlbmNvZGluZykge1xuICAgIGlmIChlbmNvZGluZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGFyZ3MucHVzaCgnRU5DT0RJTkcnLCBlbmNvZGluZyk7XG4gICAgfVxuICAgIHJldHVybiBhcmdzO1xufVxuZXhwb3J0cy5wdXNoRW5jb2RpbmdBcmd1bWVudCA9IHB1c2hFbmNvZGluZ0FyZ3VtZW50O1xuZnVuY3Rpb24gcHVzaENodW5rU2l6ZUFyZ3VtZW50KGFyZ3MsIGNodW5rU2l6ZSkge1xuICAgIGlmIChjaHVua1NpemUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBhcmdzLnB1c2goJ0NIVU5LX1NJWkUnLCBjaHVua1NpemUudG9TdHJpbmcoKSk7XG4gICAgfVxuICAgIHJldHVybiBhcmdzO1xufVxuZXhwb3J0cy5wdXNoQ2h1bmtTaXplQXJndW1lbnQgPSBwdXNoQ2h1bmtTaXplQXJndW1lbnQ7XG5mdW5jdGlvbiBwdXNoRHVwbGljYXRlUG9saWN5KGFyZ3MsIGR1cGxpY2F0ZVBvbGljeSkge1xuICAgIGlmIChkdXBsaWNhdGVQb2xpY3kgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBhcmdzLnB1c2goJ0RVUExJQ0FURV9QT0xJQ1knLCBkdXBsaWNhdGVQb2xpY3kpO1xuICAgIH1cbiAgICByZXR1cm4gYXJncztcbn1cbmV4cG9ydHMucHVzaER1cGxpY2F0ZVBvbGljeSA9IHB1c2hEdXBsaWNhdGVQb2xpY3k7XG5mdW5jdGlvbiB0cmFuc2Zvcm1MYWJsZXNSZXBseShyZXBseSkge1xuICAgIGNvbnN0IGxhYmVscyA9IHt9O1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIHJlcGx5KSB7XG4gICAgICAgIGxhYmVsc1trZXldID0gdmFsdWU7XG4gICAgfVxuICAgIHJldHVybiBsYWJlbHM7XG59XG5leHBvcnRzLnRyYW5zZm9ybUxhYmxlc1JlcGx5ID0gdHJhbnNmb3JtTGFibGVzUmVwbHk7XG5mdW5jdGlvbiBwdXNoTGFiZWxzQXJndW1lbnQoYXJncywgbGFiZWxzKSB7XG4gICAgaWYgKGxhYmVscykge1xuICAgICAgICBhcmdzLnB1c2goJ0xBQkVMUycpO1xuICAgICAgICBmb3IgKGNvbnN0IFtsYWJlbCwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGxhYmVscykpIHtcbiAgICAgICAgICAgIGFyZ3MucHVzaChsYWJlbCwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhcmdzO1xufVxuZXhwb3J0cy5wdXNoTGFiZWxzQXJndW1lbnQgPSBwdXNoTGFiZWxzQXJndW1lbnQ7XG5mdW5jdGlvbiB0cmFuc2Zvcm1JbmNyRGVjckFyZ3VtZW50cyhjb21tYW5kLCBrZXksIHZhbHVlLCBvcHRpb25zKSB7XG4gICAgY29uc3QgYXJncyA9IFtcbiAgICAgICAgY29tbWFuZCxcbiAgICAgICAga2V5LFxuICAgICAgICB2YWx1ZS50b1N0cmluZygpXG4gICAgXTtcbiAgICBpZiAob3B0aW9ucz8uVElNRVNUQU1QICE9PSB1bmRlZmluZWQgJiYgb3B0aW9ucz8uVElNRVNUQU1QICE9PSBudWxsKSB7XG4gICAgICAgIGFyZ3MucHVzaCgnVElNRVNUQU1QJywgdHJhbnNmb3JtVGltZXN0YW1wQXJndW1lbnQob3B0aW9ucy5USU1FU1RBTVApKTtcbiAgICB9XG4gICAgcHVzaFJldGVudGlvbkFyZ3VtZW50KGFyZ3MsIG9wdGlvbnM/LlJFVEVOVElPTik7XG4gICAgaWYgKG9wdGlvbnM/LlVOQ09NUFJFU1NFRCkge1xuICAgICAgICBhcmdzLnB1c2goJ1VOQ09NUFJFU1NFRCcpO1xuICAgIH1cbiAgICBwdXNoQ2h1bmtTaXplQXJndW1lbnQoYXJncywgb3B0aW9ucz8uQ0hVTktfU0laRSk7XG4gICAgcHVzaExhYmVsc0FyZ3VtZW50KGFyZ3MsIG9wdGlvbnM/LkxBQkVMUyk7XG4gICAgcmV0dXJuIGFyZ3M7XG59XG5leHBvcnRzLnRyYW5zZm9ybUluY3JEZWNyQXJndW1lbnRzID0gdHJhbnNmb3JtSW5jckRlY3JBcmd1bWVudHM7XG5mdW5jdGlvbiB0cmFuc2Zvcm1TYW1wbGVSZXBseShyZXBseSkge1xuICAgIHJldHVybiB7XG4gICAgICAgIHRpbWVzdGFtcDogcmVwbHlbMF0sXG4gICAgICAgIHZhbHVlOiBOdW1iZXIocmVwbHlbMV0pXG4gICAgfTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtU2FtcGxlUmVwbHkgPSB0cmFuc2Zvcm1TYW1wbGVSZXBseTtcbnZhciBUaW1lU2VyaWVzQnVja2V0VGltZXN0YW1wO1xuKGZ1bmN0aW9uIChUaW1lU2VyaWVzQnVja2V0VGltZXN0YW1wKSB7XG4gICAgVGltZVNlcmllc0J1Y2tldFRpbWVzdGFtcFtcIkxPV1wiXSA9IFwiLVwiO1xuICAgIFRpbWVTZXJpZXNCdWNrZXRUaW1lc3RhbXBbXCJISUdIXCJdID0gXCIrXCI7XG4gICAgVGltZVNlcmllc0J1Y2tldFRpbWVzdGFtcFtcIk1JRFwiXSA9IFwiflwiO1xufSkoVGltZVNlcmllc0J1Y2tldFRpbWVzdGFtcCB8fCAoZXhwb3J0cy5UaW1lU2VyaWVzQnVja2V0VGltZXN0YW1wID0gVGltZVNlcmllc0J1Y2tldFRpbWVzdGFtcCA9IHt9KSk7XG5mdW5jdGlvbiBwdXNoUmFuZ2VBcmd1bWVudHMoYXJncywgZnJvbVRpbWVzdGFtcCwgdG9UaW1lc3RhbXAsIG9wdGlvbnMpIHtcbiAgICBhcmdzLnB1c2godHJhbnNmb3JtVGltZXN0YW1wQXJndW1lbnQoZnJvbVRpbWVzdGFtcCksIHRyYW5zZm9ybVRpbWVzdGFtcEFyZ3VtZW50KHRvVGltZXN0YW1wKSk7XG4gICAgcHVzaExhdGVzdEFyZ3VtZW50KGFyZ3MsIG9wdGlvbnM/LkxBVEVTVCk7XG4gICAgaWYgKG9wdGlvbnM/LkZJTFRFUl9CWV9UUykge1xuICAgICAgICBhcmdzLnB1c2goJ0ZJTFRFUl9CWV9UUycpO1xuICAgICAgICBmb3IgKGNvbnN0IHRzIG9mIG9wdGlvbnMuRklMVEVSX0JZX1RTKSB7XG4gICAgICAgICAgICBhcmdzLnB1c2godHJhbnNmb3JtVGltZXN0YW1wQXJndW1lbnQodHMpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAob3B0aW9ucz8uRklMVEVSX0JZX1ZBTFVFKSB7XG4gICAgICAgIGFyZ3MucHVzaCgnRklMVEVSX0JZX1ZBTFVFJywgb3B0aW9ucy5GSUxURVJfQllfVkFMVUUubWluLnRvU3RyaW5nKCksIG9wdGlvbnMuRklMVEVSX0JZX1ZBTFVFLm1heC50b1N0cmluZygpKTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnM/LkNPVU5UKSB7XG4gICAgICAgIGFyZ3MucHVzaCgnQ09VTlQnLCBvcHRpb25zLkNPVU5ULnRvU3RyaW5nKCkpO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucz8uQUxJR04pIHtcbiAgICAgICAgYXJncy5wdXNoKCdBTElHTicsIHRyYW5zZm9ybVRpbWVzdGFtcEFyZ3VtZW50KG9wdGlvbnMuQUxJR04pKTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnM/LkFHR1JFR0FUSU9OKSB7XG4gICAgICAgIGFyZ3MucHVzaCgnQUdHUkVHQVRJT04nLCBvcHRpb25zLkFHR1JFR0FUSU9OLnR5cGUsIHRyYW5zZm9ybVRpbWVzdGFtcEFyZ3VtZW50KG9wdGlvbnMuQUdHUkVHQVRJT04udGltZUJ1Y2tldCkpO1xuICAgICAgICBpZiAob3B0aW9ucy5BR0dSRUdBVElPTi5CVUNLRVRUSU1FU1RBTVApIHtcbiAgICAgICAgICAgIGFyZ3MucHVzaCgnQlVDS0VUVElNRVNUQU1QJywgb3B0aW9ucy5BR0dSRUdBVElPTi5CVUNLRVRUSU1FU1RBTVApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLkFHR1JFR0FUSU9OLkVNUFRZKSB7XG4gICAgICAgICAgICBhcmdzLnB1c2goJ0VNUFRZJyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGFyZ3M7XG59XG5leHBvcnRzLnB1c2hSYW5nZUFyZ3VtZW50cyA9IHB1c2hSYW5nZUFyZ3VtZW50cztcbmZ1bmN0aW9uIHB1c2hNUmFuZ2VHcm91cEJ5QXJndW1lbnRzKGFyZ3MsIGdyb3VwQnkpIHtcbiAgICBpZiAoZ3JvdXBCeSkge1xuICAgICAgICBhcmdzLnB1c2goJ0dST1VQQlknLCBncm91cEJ5LmxhYmVsLCAnUkVEVUNFJywgZ3JvdXBCeS5yZWR1Y2VyKTtcbiAgICB9XG4gICAgcmV0dXJuIGFyZ3M7XG59XG5leHBvcnRzLnB1c2hNUmFuZ2VHcm91cEJ5QXJndW1lbnRzID0gcHVzaE1SYW5nZUdyb3VwQnlBcmd1bWVudHM7XG5mdW5jdGlvbiBwdXNoRmlsdGVyQXJndW1lbnQoYXJncywgZmlsdGVyKSB7XG4gICAgYXJncy5wdXNoKCdGSUxURVInKTtcbiAgICByZXR1cm4gKDAsIGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEucHVzaFZlcmRpY3RBcmd1bWVudHMpKGFyZ3MsIGZpbHRlcik7XG59XG5leHBvcnRzLnB1c2hGaWx0ZXJBcmd1bWVudCA9IHB1c2hGaWx0ZXJBcmd1bWVudDtcbmZ1bmN0aW9uIHB1c2hNUmFuZ2VBcmd1bWVudHMoYXJncywgZnJvbVRpbWVzdGFtcCwgdG9UaW1lc3RhbXAsIGZpbHRlciwgb3B0aW9ucykge1xuICAgIGFyZ3MgPSBwdXNoUmFuZ2VBcmd1bWVudHMoYXJncywgZnJvbVRpbWVzdGFtcCwgdG9UaW1lc3RhbXAsIG9wdGlvbnMpO1xuICAgIGFyZ3MgPSBwdXNoRmlsdGVyQXJndW1lbnQoYXJncywgZmlsdGVyKTtcbiAgICByZXR1cm4gcHVzaE1SYW5nZUdyb3VwQnlBcmd1bWVudHMoYXJncywgb3B0aW9ucz8uR1JPVVBCWSk7XG59XG5leHBvcnRzLnB1c2hNUmFuZ2VBcmd1bWVudHMgPSBwdXNoTVJhbmdlQXJndW1lbnRzO1xuZnVuY3Rpb24gcHVzaFdpdGhMYWJlbHNBcmd1bWVudChhcmdzLCBzZWxlY3RlZExhYmVscykge1xuICAgIGlmICghc2VsZWN0ZWRMYWJlbHMpIHtcbiAgICAgICAgYXJncy5wdXNoKCdXSVRITEFCRUxTJyk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBhcmdzLnB1c2goJ1NFTEVDVEVEX0xBQkVMUycpO1xuICAgICAgICBhcmdzID0gKDAsIGdlbmVyaWNfdHJhbnNmb3JtZXJzXzEucHVzaFZlcmRpY3RBcmd1bWVudHMpKGFyZ3MsIHNlbGVjdGVkTGFiZWxzKTtcbiAgICB9XG4gICAgcmV0dXJuIGFyZ3M7XG59XG5leHBvcnRzLnB1c2hXaXRoTGFiZWxzQXJndW1lbnQgPSBwdXNoV2l0aExhYmVsc0FyZ3VtZW50O1xuZnVuY3Rpb24gcHVzaE1SYW5nZVdpdGhMYWJlbHNBcmd1bWVudHMoYXJncywgZnJvbVRpbWVzdGFtcCwgdG9UaW1lc3RhbXAsIGZpbHRlciwgb3B0aW9ucykge1xuICAgIGFyZ3MgPSBwdXNoUmFuZ2VBcmd1bWVudHMoYXJncywgZnJvbVRpbWVzdGFtcCwgdG9UaW1lc3RhbXAsIG9wdGlvbnMpO1xuICAgIGFyZ3MgPSBwdXNoV2l0aExhYmVsc0FyZ3VtZW50KGFyZ3MsIG9wdGlvbnM/LlNFTEVDVEVEX0xBQkVMUyk7XG4gICAgYXJncyA9IHB1c2hGaWx0ZXJBcmd1bWVudChhcmdzLCBmaWx0ZXIpO1xuICAgIHJldHVybiBwdXNoTVJhbmdlR3JvdXBCeUFyZ3VtZW50cyhhcmdzLCBvcHRpb25zPy5HUk9VUEJZKTtcbn1cbmV4cG9ydHMucHVzaE1SYW5nZVdpdGhMYWJlbHNBcmd1bWVudHMgPSBwdXNoTVJhbmdlV2l0aExhYmVsc0FyZ3VtZW50cztcbmZ1bmN0aW9uIHRyYW5zZm9ybVJhbmdlUmVwbHkocmVwbHkpIHtcbiAgICByZXR1cm4gcmVwbHkubWFwKHRyYW5zZm9ybVNhbXBsZVJlcGx5KTtcbn1cbmV4cG9ydHMudHJhbnNmb3JtUmFuZ2VSZXBseSA9IHRyYW5zZm9ybVJhbmdlUmVwbHk7XG5mdW5jdGlvbiB0cmFuc2Zvcm1NUmFuZ2VSZXBseShyZXBseSkge1xuICAgIGNvbnN0IGFyZ3MgPSBbXTtcbiAgICBmb3IgKGNvbnN0IFtrZXksIF8sIHNhbXBsZV0gb2YgcmVwbHkpIHtcbiAgICAgICAgYXJncy5wdXNoKHtcbiAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgIHNhbXBsZXM6IHNhbXBsZS5tYXAodHJhbnNmb3JtU2FtcGxlUmVwbHkpXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gYXJncztcbn1cbmV4cG9ydHMudHJhbnNmb3JtTVJhbmdlUmVwbHkgPSB0cmFuc2Zvcm1NUmFuZ2VSZXBseTtcbmZ1bmN0aW9uIHRyYW5zZm9ybU1SYW5nZVdpdGhMYWJlbHNSZXBseShyZXBseSkge1xuICAgIGNvbnN0IGFyZ3MgPSBbXTtcbiAgICBmb3IgKGNvbnN0IFtrZXksIGxhYmVscywgc2FtcGxlc10gb2YgcmVwbHkpIHtcbiAgICAgICAgYXJncy5wdXNoKHtcbiAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgIGxhYmVsczogdHJhbnNmb3JtTGFibGVzUmVwbHkobGFiZWxzKSxcbiAgICAgICAgICAgIHNhbXBsZXM6IHNhbXBsZXMubWFwKHRyYW5zZm9ybVNhbXBsZVJlcGx5KVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGFyZ3M7XG59XG5leHBvcnRzLnRyYW5zZm9ybU1SYW5nZVdpdGhMYWJlbHNSZXBseSA9IHRyYW5zZm9ybU1SYW5nZVdpdGhMYWJlbHNSZXBseTtcbmZ1bmN0aW9uIHB1c2hMYXRlc3RBcmd1bWVudChhcmdzLCBsYXRlc3QpIHtcbiAgICBpZiAobGF0ZXN0KSB7XG4gICAgICAgIGFyZ3MucHVzaCgnTEFURVNUJyk7XG4gICAgfVxuICAgIHJldHVybiBhcmdzO1xufVxuZXhwb3J0cy5wdXNoTGF0ZXN0QXJndW1lbnQgPSBwdXNoTGF0ZXN0QXJndW1lbnQ7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5UaW1lU2VyaWVzQnVja2V0VGltZXN0YW1wID0gZXhwb3J0cy5UaW1lU2VyaWVzUmVkdWNlcnMgPSBleHBvcnRzLlRpbWVTZXJpZXNBZ2dyZWdhdGlvblR5cGUgPSBleHBvcnRzLlRpbWVTZXJpZXNFbmNvZGluZyA9IGV4cG9ydHMuVGltZVNlcmllc0R1cGxpY2F0ZVBvbGljaWVzID0gZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xudmFyIGNvbW1hbmRzXzEgPSByZXF1aXJlKFwiLi9jb21tYW5kc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvbW1hbmRzXzEuZGVmYXVsdDsgfSB9KTtcbnZhciBjb21tYW5kc18yID0gcmVxdWlyZShcIi4vY29tbWFuZHNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJUaW1lU2VyaWVzRHVwbGljYXRlUG9saWNpZXNcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvbW1hbmRzXzIuVGltZVNlcmllc0R1cGxpY2F0ZVBvbGljaWVzOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiVGltZVNlcmllc0VuY29kaW5nXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjb21tYW5kc18yLlRpbWVTZXJpZXNFbmNvZGluZzsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlRpbWVTZXJpZXNBZ2dyZWdhdGlvblR5cGVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvbW1hbmRzXzIuVGltZVNlcmllc0FnZ3JlZ2F0aW9uVHlwZTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlRpbWVTZXJpZXNSZWR1Y2Vyc1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY29tbWFuZHNfMi5UaW1lU2VyaWVzUmVkdWNlcnM7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJUaW1lU2VyaWVzQnVja2V0VGltZXN0YW1wXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBjb21tYW5kc18yLlRpbWVTZXJpZXNCdWNrZXRUaW1lc3RhbXA7IH0gfSk7XG4iLAogICAgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fY3JlYXRlQmluZGluZyA9ICh0aGlzICYmIHRoaXMuX19jcmVhdGVCaW5kaW5nKSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG0sIGspO1xuICAgIGlmICghZGVzYyB8fCAoXCJnZXRcIiBpbiBkZXNjID8gIW0uX19lc01vZHVsZSA6IGRlc2Mud3JpdGFibGUgfHwgZGVzYy5jb25maWd1cmFibGUpKSB7XG4gICAgICBkZXNjID0geyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9O1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIGRlc2MpO1xufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIG9bazJdID0gbVtrXTtcbn0pKTtcbnZhciBfX2V4cG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9fZXhwb3J0U3RhcikgfHwgZnVuY3Rpb24obSwgZXhwb3J0cykge1xuICAgIGZvciAodmFyIHAgaW4gbSkgaWYgKHAgIT09IFwiZGVmYXVsdFwiICYmICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZXhwb3J0cywgcCkpIF9fY3JlYXRlQmluZGluZyhleHBvcnRzLCBtLCBwKTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmNyZWF0ZUNsdXN0ZXIgPSBleHBvcnRzLmNyZWF0ZUNsaWVudCA9IHZvaWQgMDtcbmNvbnN0IGNsaWVudF8xID0gcmVxdWlyZShcIkByZWRpcy9jbGllbnRcIik7XG5jb25zdCBibG9vbV8xID0gcmVxdWlyZShcIkByZWRpcy9ibG9vbVwiKTtcbmNvbnN0IGdyYXBoXzEgPSByZXF1aXJlKFwiQHJlZGlzL2dyYXBoXCIpO1xuY29uc3QganNvbl8xID0gcmVxdWlyZShcIkByZWRpcy9qc29uXCIpO1xuY29uc3Qgc2VhcmNoXzEgPSByZXF1aXJlKFwiQHJlZGlzL3NlYXJjaFwiKTtcbmNvbnN0IHRpbWVfc2VyaWVzXzEgPSByZXF1aXJlKFwiQHJlZGlzL3RpbWUtc2VyaWVzXCIpO1xuX19leHBvcnRTdGFyKHJlcXVpcmUoXCJAcmVkaXMvY2xpZW50XCIpLCBleHBvcnRzKTtcbl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiQHJlZGlzL2Jsb29tXCIpLCBleHBvcnRzKTtcbl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiQHJlZGlzL2dyYXBoXCIpLCBleHBvcnRzKTtcbl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiQHJlZGlzL2pzb25cIiksIGV4cG9ydHMpO1xuX19leHBvcnRTdGFyKHJlcXVpcmUoXCJAcmVkaXMvc2VhcmNoXCIpLCBleHBvcnRzKTtcbl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiQHJlZGlzL3RpbWUtc2VyaWVzXCIpLCBleHBvcnRzKTtcbmNvbnN0IG1vZHVsZXMgPSB7XG4gICAgLi4uYmxvb21fMS5kZWZhdWx0LFxuICAgIGdyYXBoOiBncmFwaF8xLmRlZmF1bHQsXG4gICAganNvbjoganNvbl8xLmRlZmF1bHQsXG4gICAgZnQ6IHNlYXJjaF8xLmRlZmF1bHQsXG4gICAgdHM6IHRpbWVfc2VyaWVzXzEuZGVmYXVsdFxufTtcbmZ1bmN0aW9uIGNyZWF0ZUNsaWVudChvcHRpb25zKSB7XG4gICAgcmV0dXJuICgwLCBjbGllbnRfMS5jcmVhdGVDbGllbnQpKHtcbiAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgbW9kdWxlczoge1xuICAgICAgICAgICAgLi4ubW9kdWxlcyxcbiAgICAgICAgICAgIC4uLm9wdGlvbnM/Lm1vZHVsZXNcbiAgICAgICAgfVxuICAgIH0pO1xufVxuZXhwb3J0cy5jcmVhdGVDbGllbnQgPSBjcmVhdGVDbGllbnQ7XG5mdW5jdGlvbiBjcmVhdGVDbHVzdGVyKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gKDAsIGNsaWVudF8xLmNyZWF0ZUNsdXN0ZXIpKHtcbiAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgbW9kdWxlczoge1xuICAgICAgICAgICAgLi4ubW9kdWxlcyxcbiAgICAgICAgICAgIC4uLm9wdGlvbnM/Lm1vZHVsZXNcbiAgICAgICAgfVxuICAgIH0pO1xufVxuZXhwb3J0cy5jcmVhdGVDbHVzdGVyID0gY3JlYXRlQ2x1c3RlcjtcbiIKICBdLAogICJtYXBwaW5ncyI6ICJnRUFDQSxPQUFPLGVBQWUsR0FBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDcEQsc0JBQTZCLG1CQUF1QixPQUNwRCxtQkFBa0IsRUFDMUIsU0FBUyxFQUFrQixDQUFDLEVBQUssRUFBTyxDQUNwQyxNQUFPLENBQUMsU0FBVSxFQUFLLENBQUssRUFFeEIsc0JBQXFCLHFCQ043QixPQUFPLGVBQWUsR0FBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDcEQsc0JBQTZCLGdCQUF1QixtQkFBdUIsT0FDM0UsbUJBQWtCLEVBQ2xCLGdCQUFlLEdBQ3ZCLFNBQVMsRUFBa0IsQ0FBQyxFQUFLLEVBQU8sQ0FDcEMsSUFBTSxFQUFPLENBQUMsV0FBWSxDQUFHLEVBQzdCLEdBQUksR0FFQSxHQURBLEVBQUssS0FBSyxFQUFNLE1BQU0sU0FBUyxFQUFHLEVBQU0sSUFBSSxTQUFTLENBQUMsRUFDbEQsRUFBTSxLQUNOLEVBQUssS0FBSyxFQUFNLElBQUksRUFHNUIsT0FBTyxFQUVILHNCQUFxQixxQkNkN0IsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQ3BELHNCQUE2QixnQkFBdUIsbUJBQXVCLE9BQzNFLG1CQUFrQixFQUNsQixnQkFBZSxHQUN2QixTQUFTLEVBQWtCLENBQUMsRUFBSyxFQUFZLENBQ3pDLElBQU0sRUFBTyxDQUFDLGNBQWUsQ0FBRyxFQUNoQyxRQUFXLEtBQWEsRUFDcEIsRUFBSyxLQUFLLE1BQU8sRUFBVSxTQUFVLEVBQVUsT0FBTyxTQUFTLENBQUMsRUFFcEUsT0FBTyxFQUVILHNCQUFxQixxQkNYN0IsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQ3BELHNCQUE2QixtQkFBdUIsT0FDcEQsbUJBQWtCLEVBQzFCLFNBQVMsRUFBa0IsQ0FBQyxFQUFLLEVBQVksQ0FDekMsSUFBTSxFQUFPLENBQUMsV0FBWSxDQUFHLEVBQzdCLFFBQVcsS0FBVyxFQUNsQixPQUFRLEVBQVEsZUFDUCxNQUNELEVBQUssS0FBSyxNQUFPLEVBQVEsU0FBVSxFQUFRLE9BQU8sU0FBUyxDQUFDLEVBQzVELFVBQ0MsTUFDRCxFQUFLLEtBQUssTUFBTyxFQUFRLFNBQVUsRUFBUSxPQUFPLFNBQVMsRUFBRyxFQUFRLE1BQU0sU0FBUyxDQUFDLEVBQ3RGLFVBQ0MsU0FDRCxFQUFLLEtBQUssU0FBVSxFQUFRLFNBQVUsRUFBUSxPQUFPLFNBQVMsRUFBRyxFQUFRLFVBQVUsU0FBUyxDQUFDLEVBQzdGLFVBQ0MsV0FDRCxFQUFLLEtBQUssV0FBWSxFQUFRLFFBQVEsRUFDdEMsTUFHWixPQUFPLEVBRUgsc0JBQXFCLG9CQ3ZCN0IsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQ3BELHVCQUE4QiwyQkFBa0MscUJBQTRCLGtDQUF5QyxzQkFBNkIseUJBQWdDLHFCQUE0QixnQkFBdUIsK0JBQXNDLHVCQUE4Qiw4QkFBcUMsd0JBQStCLHFCQUE0QixxQkFBNEIsaUJBQXdCLGlCQUF3QixnQ0FBdUMsZ0JBQXVCLCtCQUFzQywwQkFBaUMsMEJBQWlDLHdCQUErQiwyQkFBa0MsMkJBQWtDLHFDQUE0QyxpQ0FBd0MscUNBQTRDLGlDQUF3QyxvQ0FBMkMsZ0NBQXVDLG1DQUEwQywrQkFBc0Msd0JBQStCLHlDQUFnRCxtQ0FBMEMseUNBQWdELG9DQUEyQyxnQ0FBdUMscUJBQTRCLDhCQUFxQyx5QkFBNkIsT0FDejVDLFNBQVMsRUFBcUIsQ0FBQyxFQUFPLENBQ2xDLE9BQU8sSUFBVSxFQUViLHlCQUF3QixHQUNoQyxTQUFTLEVBQTBCLENBQUMsRUFBTyxDQUN2QyxPQUFPLEVBQU0sSUFBSSxFQUFxQixFQUVsQyw4QkFBNkIsR0FDckMsU0FBUyxFQUFpQixDQUFDLEVBQU0sRUFBUSxFQUFTLENBRTlDLEdBREEsRUFBSyxLQUFLLEVBQU8sU0FBUyxDQUFDLEVBQ3ZCLEdBQVMsTUFDVCxFQUFLLEtBQUssUUFBUyxFQUFRLEtBQUssRUFFcEMsR0FBSSxHQUFTLE1BQ1QsRUFBSyxLQUFLLFFBQVMsRUFBUSxNQUFNLFNBQVMsQ0FBQyxFQUUvQyxPQUFPLEVBRUgscUJBQW9CLEdBQzVCLFNBQVMsRUFBNEIsQ0FBQyxFQUFPLENBQ3pDLE9BQVEsRUFBTSxTQUFTLE9BQ2QsT0FDRCxNQUFPLFNBQ04sT0FDRCxNQUFPLGFBRVAsT0FBTyxPQUFPLENBQUssR0FHdkIsZ0NBQStCLEdBQ3ZDLFNBQVMsRUFBZ0MsQ0FBQyxFQUFPLENBQzdDLEdBQUksSUFBVSxLQUNWLE9BQU8sS0FDWCxPQUFPLEdBQTZCLENBQUssRUFFckMsb0NBQW1DLEdBQzNDLFNBQVMsRUFBcUMsQ0FBQyxFQUFPLENBQ2xELE9BQU8sRUFBTSxJQUFJLEVBQWdDLEVBRTdDLHlDQUF3QyxHQUNoRCxTQUFTLEVBQStCLENBQUMsRUFBSyxDQUMxQyxPQUFRLE9BQ0MsS0FDRCxNQUFPLFdBQ04sS0FDRCxNQUFPLGVBRVAsT0FBTyxFQUFJLFNBQVMsR0FHeEIsbUNBQWtDLEdBQzFDLFNBQVMsRUFBcUMsQ0FBQyxFQUFLLENBQ2hELEdBQUksT0FBTyxJQUFRLFNBQ2YsT0FBTyxFQUNYLE9BQU8sR0FBZ0MsQ0FBRyxFQUV0Qyx5Q0FBd0MsR0FDaEQsU0FBUyxFQUFvQixDQUFDLEVBQU8sQ0FDakMsSUFBTSxFQUFVLE9BQU8sT0FBTyxJQUFJLEVBQ2xDLFFBQVMsRUFBSSxFQUFHLEVBQUksRUFBTSxPQUFRLEdBQUssRUFDbkMsRUFBUSxFQUFNLEdBQUcsU0FBUyxHQUFLLEVBQU0sRUFBSSxHQUU3QyxPQUFPLEVBRUgsd0JBQXVCLEdBQy9CLFNBQVMsRUFBMkIsRUFBRSxFQUFJLEdBQVUsQ0FDaEQsTUFBTyxDQUNILEtBQ0EsUUFBUyxHQUFxQixDQUFPLENBQ3pDLEVBRUksK0JBQThCLEdBQ3RDLFNBQVMsRUFBK0IsQ0FBQyxFQUFPLENBQzVDLEdBQUksSUFBVSxLQUNWLE9BQU8sS0FDWCxPQUFPLEdBQTRCLENBQUssRUFFcEMsbUNBQWtDLEdBQzFDLFNBQVMsRUFBNEIsQ0FBQyxFQUFPLENBQ3pDLE9BQU8sRUFBTSxJQUFJLEVBQTJCLEVBRXhDLGdDQUErQixHQUN2QyxTQUFTLEVBQWdDLENBQUMsRUFBTyxDQUM3QyxPQUFPLEVBQU0sSUFBSSxFQUErQixFQUU1QyxvQ0FBbUMsR0FDM0MsU0FBUyxFQUE2QixDQUFDLEVBQU8sQ0FDMUMsR0FBSSxJQUFVLEtBQ1YsT0FBTyxLQUNYLE9BQU8sRUFBTSxJQUFJLEVBQUUsRUFBTSxNQUFrQixDQUN2QyxPQUNBLFNBQVUsR0FBNkIsQ0FBVyxDQUN0RCxFQUFFLEVBRUUsaUNBQWdDLEdBQ3hDLFNBQVMsRUFBaUMsQ0FBQyxFQUFPLENBQzlDLElBQUssRUFBTSxPQUNQLE9BQU8sS0FDWCxPQUFPLEdBQThCLENBQUssRUFFdEMscUNBQW9DLEdBQzVDLFNBQVMsRUFBNkIsQ0FBQyxFQUFPLENBQzFDLE1BQU8sQ0FDSCxNQUFPLEVBQU0sR0FDYixNQUFPLEdBQTZCLEVBQU0sRUFBRSxDQUNoRCxFQUVJLGlDQUFnQyxHQUN4QyxTQUFTLEVBQWlDLENBQUMsRUFBTyxDQUM5QyxJQUFNLEVBQVUsQ0FBQyxFQUNqQixRQUFTLEVBQUksRUFBRyxFQUFJLEVBQU0sT0FBUSxHQUFLLEVBQ25DLEVBQVEsS0FBSyxDQUNULE1BQU8sRUFBTSxHQUNiLE1BQU8sR0FBNkIsRUFBTSxFQUFJLEVBQUUsQ0FDcEQsQ0FBQyxFQUVMLE9BQU8sRUFFSCxxQ0FBb0MsR0FDNUMsU0FBUyxFQUF1QixDQUFDLEVBQU0sRUFBTSxFQUFNLEVBQVMsQ0FHeEQsR0FGQSxHQUFvQixFQUFNLENBQUksRUFDOUIsRUFBSyxLQUFLLENBQUksRUFDVixHQUFTLE1BQ1QsRUFBSyxLQUFLLFFBQVMsRUFBUSxNQUFNLFNBQVMsQ0FBQyxFQUUvQyxPQUFPLEVBRUgsMkJBQTBCLEdBQ2xDLFNBQVMsRUFBdUIsQ0FBQyxFQUFNLEVBQU0sRUFBTSxFQUFTLENBR3hELEdBRkEsR0FBb0IsRUFBTSxDQUFJLEVBQzlCLEVBQUssS0FBSyxDQUFJLEVBQ1YsR0FBUyxNQUNULEVBQUssS0FBSyxRQUFTLEVBQVEsTUFBTSxTQUFTLENBQUMsRUFFL0MsT0FBTyxFQUVILDJCQUEwQixHQUNsQyxTQUFTLEVBQW9CLENBQUMsRUFBTSxFQUFPLENBQ3ZDLEdBQUksT0FBTyxJQUFVLFNBQ2pCLEVBQUssS0FBSyxRQUFTLEVBQU0sU0FBUyxDQUFDLEVBRWxDLFFBQUksR0FFTCxHQURBLEVBQUssS0FBSyxRQUFTLEVBQU0sTUFBTSxTQUFTLENBQUMsRUFDckMsRUFBTSxJQUNOLEVBQUssS0FBSyxLQUFLLEVBR3ZCLE9BQU8sRUFFSCx3QkFBdUIsR0FDL0IsU0FBUyxFQUFzQixDQUFDLEVBQU0sRUFBSyxFQUFNLEVBQUksRUFBUyxDQUUxRCxHQURBLEVBQUssS0FBSyxDQUFHLEVBQ1QsT0FBTyxJQUFTLFNBQ2hCLEVBQUssS0FBSyxhQUFjLENBQUksRUFHNUIsT0FBSyxLQUFLLGFBQWMsRUFBSyxVQUFVLFNBQVMsRUFBRyxFQUFLLFNBQVMsU0FBUyxDQUFDLEVBRS9FLEdBQUksV0FBWSxFQUNaLEVBQUssS0FBSyxXQUFZLEVBQUcsT0FBTyxTQUFTLENBQUMsRUFHMUMsT0FBSyxLQUFLLFFBQVMsRUFBRyxNQUFNLFNBQVMsRUFBRyxFQUFHLE9BQU8sU0FBUyxDQUFDLEVBR2hFLEdBREEsRUFBSyxLQUFLLEVBQUcsSUFBSSxFQUNiLEdBQVMsS0FDVCxFQUFLLEtBQUssRUFBUSxJQUFJLEVBRzFCLE9BREEsR0FBcUIsRUFBTSxHQUFTLEtBQUssRUFDbEMsRUFFSCwwQkFBeUIsR0FDakMsU0FBUyxFQUFzQixDQUFDLEVBQU0sRUFBSyxFQUFNLEVBQVEsRUFBTSxFQUFTLENBRXBFLEdBREEsRUFBSyxLQUFLLENBQUcsRUFDVCxPQUFPLElBQVMsU0FDaEIsRUFBSyxLQUFLLENBQUksRUFHZCxPQUFLLEtBQUssRUFBSyxVQUFVLFNBQVMsRUFBRyxFQUFLLFNBQVMsU0FBUyxDQUFDLEVBR2pFLEdBREEsRUFBSyxLQUFLLEVBQU8sU0FBUyxFQUFHLENBQUksRUFDN0IsR0FBUyxLQUNULEVBQUssS0FBSyxFQUFRLElBQUksRUFHMUIsT0FEQSxHQUFxQixFQUFNLEdBQVMsS0FBSyxFQUNsQyxFQUVILDBCQUF5QixHQUNqQyxTQUFTLEVBQTJCLENBQUMsRUFBTSxFQUFLLEVBQU0sRUFBUSxFQUFNLEVBQWEsRUFBUyxDQUV0RixHQURBLEdBQXVCLEVBQU0sRUFBSyxFQUFNLEVBQVEsRUFBTSxDQUFPLEVBQ3pELEdBQVMsVUFDVCxFQUFLLEtBQUssWUFBYSxDQUFXLEVBR2xDLE9BQUssS0FBSyxRQUFTLENBQVcsRUFFbEMsT0FBTyxFQUVILCtCQUE4QixHQUN0QyxJQUFJLElBQ0gsUUFBUyxDQUFDLEVBQWMsQ0FDckIsRUFBYSxTQUFjLFdBQzNCLEVBQWEsS0FBVSxXQUN2QixFQUFhLFlBQWlCLGNBQy9CLEtBQXlCLGdCQUFlLEdBQWUsQ0FBQyxFQUFFLEVBQzdELFNBQVMsRUFBNEIsQ0FBQyxFQUFPLEVBQVcsQ0FDcEQsSUFBTSxFQUFlLElBQUksSUFBSSxDQUFTLEVBQ2xDLEVBQVEsRUFDTixFQUFnQixFQUFhLElBQUksR0FBYSxRQUFRLEtBQU8sRUFBTyxFQUFZLEVBQWEsSUFBSSxHQUFhLElBQUksS0FBTyxFQUFPLEVBQW1CLEVBQWEsSUFBSSxHQUFhLFdBQVcsS0FBTyxFQUN6TSxPQUFPLEVBQU0sSUFBSSxLQUFVLENBQ3ZCLElBQU0sRUFBb0IsQ0FDdEIsT0FBUSxFQUFPLEVBQ25CLEVBQ0EsR0FBSSxFQUNBLEVBQWtCLFNBQVcsRUFBTyxHQUV4QyxHQUFJLEVBQ0EsRUFBa0IsS0FBTyxFQUFPLEdBRXBDLEdBQUksRUFBa0IsQ0FDbEIsSUFBTyxFQUFXLElBQVksRUFBTyxHQUNyQyxFQUFrQixZQUFjLENBQzVCLFlBQ0EsV0FDSixFQUVKLE9BQU8sRUFDVixFQUVHLGdDQUErQixHQUN2QyxTQUFTLEVBQWEsQ0FBQyxFQUFNLENBQ3pCLE9BQVEsT0FBTyxJQUFTLFNBQVcsRUFBTyxLQUFLLE1BQU0sRUFBSyxRQUFRLEVBQUksSUFBSSxHQUFHLFNBQVMsRUFFbEYsaUJBQWdCLEdBQ3hCLFNBQVMsRUFBYSxDQUFDLEVBQU0sQ0FDekIsT0FBUSxPQUFPLElBQVMsU0FBVyxFQUFPLEVBQUssUUFBUSxHQUFHLFNBQVMsRUFFL0QsaUJBQWdCLEdBQ3hCLFNBQVMsRUFBaUIsQ0FBQyxFQUFTLENBQ2hDLE9BQU8sR0FBUyxPQUFPLEdBRW5CLHFCQUFvQixHQUM1QixTQUFTLEVBQWlCLENBQUMsRUFBTSxFQUFTLENBQ3RDLEdBQUksR0FBUyxLQUNULEVBQUssS0FBSyxFQUFRLEtBQUssT0FBTyxTQUFTLEVBQUcsR0FBRyxFQUFRLElBQUksRUFHekQsT0FBSyxLQUFLLEdBQUcsRUFFakIsR0FBSSxHQUFTLFVBQ1QsRUFBSyxLQUFLLEdBQUcsRUFBUSxTQUFTLEVBRWxDLE9BQU8sRUFFSCxxQkFBb0IsR0FDNUIsU0FBUyxFQUFvQixDQUFDLEVBQU0sRUFBTyxDQUN2QyxHQUFJLE1BQU0sUUFBUSxDQUFLLEVBRW5CLEVBQU8sRUFBSyxPQUFPLENBQUssRUFHeEIsT0FBSyxLQUFLLENBQUssRUFFbkIsT0FBTyxFQUVILHdCQUF1QixHQUMvQixTQUFTLEVBQTBCLENBQUMsRUFBTSxFQUFPLENBQzdDLEdBQUksTUFBTSxRQUFRLENBQUssRUFDbkIsUUFBVyxLQUFRLEVBQ2YsRUFBSyxLQUFLLEVBQUssU0FBUyxDQUFDLEVBSTdCLE9BQUssS0FBSyxFQUFNLFNBQVMsQ0FBQyxFQUU5QixPQUFPLEVBRUgsOEJBQTZCLEdBQ3JDLFNBQVMsRUFBbUIsQ0FBQyxFQUFNLEVBQU8sQ0FDdEMsR0FBSSxNQUFNLFFBQVEsQ0FBSyxFQUNuQixFQUFLLEtBQUssRUFBTSxPQUFPLFNBQVMsRUFBRyxHQUFHLENBQUssRUFHM0MsT0FBSyxLQUFLLElBQUssQ0FBSyxFQUV4QixPQUFPLEVBRUgsdUJBQXNCLEdBQzlCLFNBQVMsRUFBMkIsQ0FBQyxFQUFNLEVBQU0sRUFBTyxDQUNwRCxHQUFJLElBQVUsT0FDVixPQUFPLEVBRVgsT0FEQSxFQUFLLEtBQUssQ0FBSSxFQUNQLEdBQW9CLEVBQU0sQ0FBSyxFQUVsQywrQkFBOEIsR0FDdEMsSUFBSSxJQUNILFFBQVMsQ0FBQyxFQUFjLENBQ3JCLEVBQWEsTUFBVyxRQUN4QixFQUFhLFNBQWMsV0FDM0IsRUFBYSxRQUFhLFVBQzFCLEVBQWEsTUFBVyxRQUN4QixFQUFhLE9BQVksU0FDekIsRUFBYSxTQUFjLFdBQzNCLEVBQWEsT0FBWSxTQUN6QixFQUFhLGdCQUFxQixrQkFDbEMsRUFBYSxRQUFhLFVBQzFCLEVBQWEsTUFBVyxRQUN4QixFQUFhLGFBQWtCLGVBQy9CLEVBQWEsT0FBWSxTQUN6QixFQUFhLEtBQVUsT0FDdkIsRUFBYSxZQUFpQixnQkFDL0IsS0FBeUIsZ0JBQWUsR0FBZSxDQUFDLEVBQUUsRUFDN0QsSUFBSSxJQUNILFFBQVMsQ0FBQyxFQUFtQixDQUMxQixFQUFrQixTQUFjLFlBQ2hDLEVBQWtCLEtBQVUsUUFDNUIsRUFBa0IsTUFBVyxTQUM3QixFQUFrQixJQUFTLE9BQzNCLEVBQWtCLFVBQWUsYUFDakMsRUFBa0IsS0FBVSxRQUM1QixFQUFrQixLQUFVLFFBQzVCLEVBQWtCLE9BQVksVUFDOUIsRUFBa0IsT0FBWSxVQUM5QixFQUFrQixZQUFpQixlQUNuQyxFQUFrQixJQUFTLE9BQzNCLEVBQWtCLE9BQVksVUFDOUIsRUFBa0IsT0FBWSxVQUM5QixFQUFrQixNQUFXLFNBQzdCLEVBQWtCLEtBQVUsUUFDNUIsRUFBa0IsS0FBVSxRQUM1QixFQUFrQixTQUFjLFlBQ2hDLEVBQWtCLFVBQWUsYUFDakMsRUFBa0IsV0FBZ0IsY0FDbEMsRUFBa0IsWUFBaUIsZUFDbkMsRUFBa0IsVUFBZSxlQUNsQyxLQUE4QixxQkFBb0IsR0FBb0IsQ0FBQyxFQUFFLEVBQzVFLFNBQVMsRUFBcUIsRUFBRSxFQUFNLEVBQU8sRUFBTyxFQUFlLEVBQWMsRUFBTSxHQUFhLENBQ2hHLE1BQU8sQ0FDSCxPQUNBLFFBQ0EsTUFBTyxJQUFJLElBQUksQ0FBSyxFQUNwQixnQkFDQSxlQUNBLE9BQ0EsV0FBWSxJQUFJLElBQUksQ0FBVSxDQUNsQyxFQUVJLHlCQUF3QixHQUNoQyxJQUFJLElBQ0gsUUFBUyxDQUFDLEVBQW9CLENBQzNCLEVBQW1CLFVBQWUsWUFDbEMsRUFBbUIsVUFBZSxZQUNsQyxFQUFtQixZQUFpQixjQUNwQyxFQUFtQixXQUFnQixlQUNwQyxLQUErQixzQkFBcUIsR0FBcUIsQ0FBQyxFQUFFLEVBQy9FLFNBQVMsRUFBOEIsQ0FBQyxFQUFPLENBQzNDLE1BQU8sQ0FDSCxZQUFhLEVBQU0sR0FDbkIsT0FBUSxFQUFNLEdBQ2QsVUFBVyxFQUFNLEdBQUcsSUFBSSxNQUFPLENBQzNCLEtBQU0sRUFBRyxHQUNULFlBQWEsRUFBRyxHQUNoQixNQUFPLEVBQUcsRUFDZCxFQUFFLENBQ04sRUFFSSxrQ0FBaUMsR0FDekMsU0FBUyxFQUFpQixDQUFDLEVBQU0sRUFBUyxDQUN0QyxHQUFJLEdBQVMsR0FDVCxFQUFLLEtBQUssS0FBTSxFQUFRLEVBQUUsRUFFOUIsR0FBSSxHQUFTLE1BQ1QsRUFBSyxLQUFLLFFBQVMsRUFBUSxNQUFNLE9BQU8sU0FBUyxFQUFHLEVBQVEsTUFBTSxNQUFNLFNBQVMsQ0FBQyxFQUV0RixHQUFJLEdBQVMsSUFDVCxRQUFXLEtBQVksT0FBTyxFQUFRLE1BQVEsU0FBVyxDQUFDLEVBQVEsR0FBRyxFQUFJLEVBQVEsSUFDN0UsRUFBSyxLQUFLLE1BQU8sQ0FBTyxFQUdoQyxHQUFJLEdBQVMsVUFDVCxFQUFLLEtBQUssRUFBUSxTQUFTLEVBRS9CLEdBQUksR0FBUyxNQUNULEVBQUssS0FBSyxPQUFPLEVBRXJCLE9BQU8sRUFFSCxxQkFBb0IsR0FDNUIsU0FBUyxFQUFzQixDQUFDLEVBQU0sRUFBTyxDQUN6QyxFQUFLLEtBQUssRUFBTSxNQUFNLFNBQVMsRUFBRyxFQUFNLElBQUksU0FBUyxDQUFDLEVBRTFELFNBQVMsRUFBdUIsQ0FBQyxFQUFNLEVBQVEsQ0FDM0MsR0FBSSxNQUFNLFFBQVEsQ0FBTSxFQUNwQixRQUFXLEtBQVMsRUFDaEIsR0FBdUIsRUFBTSxDQUFLLEVBSXRDLFFBQXVCLEVBQU0sQ0FBTSxFQUV2QyxPQUFPLEVBRUgsMkJBQTBCLEdBQ2xDLFNBQVMsRUFBbUIsRUFBRSxFQUFPLEdBQU0sQ0FDdkMsTUFBTyxDQUNILFFBQ0EsS0FDSixFQUVJLHVCQUFzQixxQkMzWjlCLE9BQU8sZUFBZSxHQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUNwRCxzQkFBNkIsbUJBQXVCLE9BQzVELElBQU0sT0FDRSxtQkFBa0IsRUFDMUIsU0FBUyxFQUFrQixDQUFDLEVBQVcsRUFBUyxFQUFLLENBQ2pELE9BQVcsR0FBdUIscUJBQXNCLENBQUMsUUFBUyxFQUFXLENBQU8sRUFBRyxDQUFHLEVBRXRGLHNCQUFxQixxQkNQN0IsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQ3BELHNCQUE2QixnQkFBdUIsbUJBQXVCLE9BQzNFLG1CQUFrQixFQUNsQixnQkFBZSxHQUN2QixTQUFTLEVBQWtCLENBQUMsRUFBSyxFQUFLLEVBQU8sRUFBSyxFQUFNLENBQ3BELElBQU0sRUFBTyxDQUFDLFNBQVUsRUFBSyxFQUFJLFNBQVMsQ0FBQyxFQUMzQyxHQUFJLE9BQU8sSUFBVSxTQUNqQixFQUFLLEtBQUssRUFBTSxTQUFTLENBQUMsRUFFOUIsR0FBSSxPQUFPLElBQVEsU0FDZixFQUFLLEtBQUssRUFBSSxTQUFTLENBQUMsRUFFNUIsR0FBSSxFQUNBLEVBQUssS0FBSyxDQUFJLEVBRWxCLE9BQU8sRUFFSCxzQkFBcUIscUJDakI3QixPQUFPLGVBQWUsR0FBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDcEQsc0JBQTZCLG1CQUF1QixPQUNwRCxtQkFBa0IsRUFDMUIsU0FBUyxFQUFrQixDQUFDLEVBQVEsRUFBYSxFQUFpQixFQUFzQixFQUFTLENBQzdGLE1BQU8sQ0FDSCxTQUNBLEVBQ0EsRUFDQSxFQUNBLEVBQ0EsRUFBUSxTQUFTLENBQ3JCLEVBRUksc0JBQXFCLHFCQ2I3QixPQUFPLGVBQWUsR0FBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDcEQsc0JBQTZCLG1CQUF1QixPQUM1RCxJQUFNLE9BQ0UsbUJBQWtCLEVBQzFCLFNBQVMsRUFBa0IsQ0FBQyxFQUFNLEVBQU0sRUFBUyxDQUM3QyxPQUFXLEdBQXVCLHdCQUF5QixDQUFDLE9BQU8sRUFBRyxFQUFNLEVBQU0sQ0FBTyxFQUVyRixzQkFBcUIscUJDUDdCLE9BQU8sZUFBZSxHQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUNwRCxrQkFBeUIsc0JBQTZCLG1CQUF1QixPQUNyRixJQUFNLE9BQ0UsbUJBQWtCLEVBQzFCLFNBQVMsRUFBa0IsQ0FBQyxFQUFTLEVBQU0sRUFBTSxFQUFTLENBQ3RELE9BQVcsR0FBdUIsd0JBQXlCLENBQUMsU0FBVSxFQUFRLFNBQVMsQ0FBQyxFQUFHLEVBQU0sRUFBTSxDQUFPLEVBRTFHLHNCQUFxQixHQUM3QixJQUFJLFFBQ0osT0FBTyxlQUFlLEdBQVMsaUJBQWtCLENBQUUsV0FBWSxHQUFNLElBQUssUUFBUyxFQUFHLENBQUUsT0FBTyxHQUFRLGVBQWtCLENBQUMsb0JDVDFILE9BQU8sZUFBZSxHQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUNwRCxrQkFBeUIsc0JBQTZCLG1CQUF1QixPQUNyRixJQUFNLE9BQ0UsbUJBQWtCLEVBQzFCLFNBQVMsRUFBa0IsQ0FBQyxFQUFNLEVBQVMsQ0FDdkMsSUFBTSxFQUFXLEdBQXVCLHFCQUFzQixDQUFDLE9BQU8sRUFBRyxDQUFJLEVBRTdFLE9BREEsRUFBSyxLQUFLLEVBQVEsU0FBUyxDQUFDLEVBQ3JCLEVBRUgsc0JBQXFCLEdBQzdCLFNBQVMsRUFBYyxDQUFDLEVBQU8sQ0FDM0IsR0FBSSxJQUFVLEtBQ1YsT0FBTyxLQUNYLE1BQU8sQ0FDSCxJQUFLLEVBQU0sR0FDWCxRQUFTLEVBQU0sRUFDbkIsRUFFSSxrQkFBaUIscUJDbEJ6QixPQUFPLGVBQWUsR0FBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDcEQsa0JBQXlCLHNCQUE2QixtQkFBdUIsT0FDckYsSUFBTSxPQUNFLG1CQUFrQixFQUMxQixTQUFTLEVBQWtCLENBQUMsRUFBSyxFQUFTLENBQ3RDLElBQU0sRUFBVyxHQUF1QixxQkFBc0IsQ0FBQyxPQUFPLEVBQUcsQ0FBRyxFQUU1RSxPQURBLEVBQUssS0FBSyxFQUFRLFNBQVMsQ0FBQyxFQUNyQixFQUVILHNCQUFxQixHQUM3QixJQUFJLFFBQ0osT0FBTyxlQUFlLEdBQVMsaUJBQWtCLENBQUUsV0FBWSxHQUFNLElBQUssUUFBUyxFQUFHLENBQUUsT0FBTyxHQUFRLGVBQWtCLENBQUMsb0JDWDFILE9BQU8sZUFBZSxHQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUNwRCxzQkFBNkIsbUJBQXVCLE9BQ3BELG1CQUFrQixFQUMxQixTQUFTLEVBQWtCLENBQUMsRUFBUSxFQUFhLEVBQVMsQ0FDdEQsTUFBTyxDQUFDLGFBQWMsRUFBUSxFQUFhLEVBQVEsU0FBUyxDQUFDLEVBRXpELHNCQUFxQixxQkNON0IsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQ3BELGtCQUF5QixzQkFBNkIsbUJBQXVCLE9BQ3JGLElBQU0sT0FDRSxtQkFBa0IsRUFDMUIsU0FBUyxFQUFrQixDQUFDLEVBQU0sRUFBTSxFQUFTLENBQzdDLE9BQVcsR0FBdUIsd0JBQXlCLENBQUMsT0FBTyxFQUFHLEVBQU0sRUFBTSxDQUFPLEVBRXJGLHNCQUFxQixHQUM3QixTQUFTLEVBQWMsQ0FBQyxFQUFPLENBQzNCLE9BQU8sSUFBVSxLQUFPLEtBQU8sQ0FDM0IsSUFBSyxFQUFNLEdBQ1gsU0FBVSxFQUFNLEdBQUcsSUFBSSxHQUF1Qiw2QkFBNkIsQ0FDL0UsRUFFSSxrQkFBaUIscUJDZHpCLE9BQU8sZUFBZSxHQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUNwRCxrQkFBeUIsc0JBQTZCLG1CQUF1QixPQUNyRixJQUFNLE9BQ0UsbUJBQWtCLEVBQzFCLFNBQVMsRUFBa0IsQ0FBQyxFQUFTLEVBQU0sRUFBTSxFQUFTLENBQ3RELE9BQVcsR0FBdUIsd0JBQXlCLENBQUMsU0FBVSxFQUFRLFNBQVMsQ0FBQyxFQUFHLEVBQU0sRUFBTSxDQUFPLEVBRTFHLHNCQUFxQixHQUM3QixJQUFJLFFBQ0osT0FBTyxlQUFlLEdBQVMsaUJBQWtCLENBQUUsV0FBWSxHQUFNLElBQUssUUFBUyxFQUFHLENBQUUsT0FBTyxHQUFRLGVBQWtCLENBQUMsb0JDVDFILE9BQU8sZUFBZSxHQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUNwRCxrQkFBeUIsc0JBQTZCLG1CQUF1QixPQUNyRixJQUFNLE9BQ0UsbUJBQWtCLEVBQzFCLFNBQVMsRUFBa0IsQ0FBQyxFQUFLLEVBQVMsQ0FDdEMsSUFBTSxFQUFXLEdBQXVCLHFCQUFzQixDQUFDLFVBQVUsRUFBRyxDQUFHLEVBRS9FLE9BREEsRUFBSyxLQUFLLEVBQVEsU0FBUyxDQUFDLEVBQ3JCLEVBRUgsc0JBQXFCLEdBQzdCLFNBQVMsRUFBYyxDQUFDLEVBQU8sQ0FDM0IsSUFBSyxFQUNELE9BQU8sS0FDWCxNQUFPLENBQ0gsSUFBSyxFQUFNLEdBQ1gsTUFBTyxFQUFNLEdBQ2IsTUFBVyxHQUF1Qiw2QkFBOEIsRUFBTSxFQUFFLENBQzVFLEVBRUksa0JBQWlCLHFCQ25CekIsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQ3BELGtCQUF5QixzQkFBNkIsbUJBQXVCLE9BQ3JGLElBQU0sT0FDRSxtQkFBa0IsRUFDMUIsU0FBUyxFQUFrQixDQUFDLEVBQUssRUFBUyxDQUN0QyxJQUFNLEVBQVcsR0FBdUIscUJBQXNCLENBQUMsVUFBVSxFQUFHLENBQUcsRUFFL0UsT0FEQSxFQUFLLEtBQUssRUFBUSxTQUFTLENBQUMsRUFDckIsRUFFSCxzQkFBcUIsR0FDN0IsSUFBSSxRQUNKLE9BQU8sZUFBZSxHQUFTLGlCQUFrQixDQUFFLFdBQVksR0FBTSxJQUFLLFFBQVMsRUFBRyxDQUFFLE9BQU8sR0FBVyxlQUFrQixDQUFDLG9CQ1g3SCxPQUFPLGVBQWUsR0FBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDcEQsa0JBQXlCLHNCQUE2QixtQkFBdUIsT0FDN0UsbUJBQWtCLEVBQzFCLFNBQVMsRUFBa0IsQ0FBQyxFQUFRLEVBQWEsRUFBUyxDQUN0RCxJQUFNLEVBQU8sQ0FBQyxPQUFRLEVBQVEsQ0FBVyxFQUN6QyxHQUFJLEdBQVMsY0FDVCxFQUFLLEtBQUssS0FBTSxFQUFRLGNBQWMsU0FBUyxDQUFDLEVBRXBELEdBQUksR0FBUyxRQUNULEVBQUssS0FBSyxTQUFTLEVBRXZCLE9BQU8sRUFFSCxzQkFBcUIsR0FDN0IsSUFBSSxPQUNKLE9BQU8sZUFBZSxHQUFTLGlCQUFrQixDQUFFLFdBQVksR0FBTSxJQUFLLFFBQVMsRUFBRyxDQUFFLE9BQU8sR0FBdUIsc0JBQXlCLENBQUMsb0JDZmhKLE9BQU8sZUFBZSxHQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUNwRCxzQkFBNkIsbUJBQXVCLE9BQ3BELG1CQUFrQixFQUMxQixTQUFTLEVBQWtCLENBQUMsRUFBSyxDQUM3QixNQUFPLENBQUMsT0FBUSxDQUFHLEVBRWYsc0JBQXFCLHFCQ043QixPQUFPLGVBQWUsR0FBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDcEQsc0JBQTZCLG1CQUF1QixPQUNwRCxtQkFBa0IsRUFDMUIsU0FBUyxFQUFrQixDQUFDLEVBQUssRUFBVyxDQUN4QyxNQUFPLENBQUMsU0FBVSxFQUFLLEVBQVUsU0FBUyxDQUFDLEVBRXZDLHNCQUFxQixxQkNON0IsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQ3BELHNCQUE2QixtQkFBdUIsT0FDNUQsSUFBTSxPQUNFLG1CQUFrQixFQUMxQixTQUFTLEVBQWtCLENBQUMsRUFBTSxDQUM5QixPQUFXLEdBQXVCLHFCQUFzQixDQUFDLEtBQUssRUFBRyxDQUFJLEVBRWpFLHNCQUFxQixxQkNQN0IsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQ3BELHNCQUE2QixtQkFBdUIsT0FDcEQsbUJBQWtCLEVBQzFCLFNBQVMsRUFBa0IsQ0FBQyxFQUFLLENBQzdCLE1BQU8sQ0FBQyxPQUFRLENBQUcsRUFFZixzQkFBcUIscUJDTjdCLE9BQU8sZUFBZSxHQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUNwRCxzQkFBNkIsZ0JBQXVCLG1CQUF1QixPQUNuRixJQUFNLE9BQ0UsbUJBQWtCLEdBQXVCLGtCQUN6QyxnQkFBZSxHQUN2QixTQUFTLEVBQWtCLENBQUMsRUFBUSxFQUFTLENBQ3pDLE9BQVcsR0FBdUIsa0JBQW1CLENBQUMsVUFBVyxDQUFNLEVBQUcsQ0FBTyxFQUU3RSxzQkFBcUIscUJDUjdCLE9BQU8sZUFBZSxHQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUNwRCxzQkFBNkIsbUJBQXVCLE9BQzVELElBQU0sT0FDRSxtQkFBa0IsR0FBdUIsa0JBQ2pELFNBQVMsRUFBa0IsQ0FBQyxFQUFRLEVBQVMsQ0FDekMsT0FBVyxHQUF1QixrQkFBbUIsQ0FBQyxPQUFRLENBQU0sRUFBRyxDQUFPLEVBRTFFLHNCQUFxQixxQkNQN0IsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQ3BELHNCQUE2QixnQkFBdUIsbUJBQXVCLE9BQ25GLElBQU0sT0FDRSxtQkFBa0IsR0FBdUIsa0JBQ3pDLGdCQUFlLEdBQ3ZCLFNBQVMsRUFBa0IsQ0FBQyxFQUFNLEVBQVMsQ0FDdkMsT0FBVyxHQUF1QixrQkFBbUIsQ0FBQyxhQUFjLENBQUksRUFBRyxDQUFPLEVBRTlFLHNCQUFxQixxQkNSN0IsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQ3BELHNCQUE2QixtQkFBdUIsT0FDNUQsSUFBTSxPQUNFLG1CQUFrQixHQUF1QixrQkFDakQsU0FBUyxFQUFrQixDQUFDLEVBQU0sRUFBUyxDQUN2QyxPQUFXLEdBQXVCLGtCQUFtQixDQUFDLFVBQVcsQ0FBSSxFQUFHLENBQU8sRUFFM0Usc0JBQXFCLHFCQ1A3QixPQUFPLGVBQWUsR0FBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDcEQsc0JBQTZCLGdCQUF1QixtQkFBdUIsT0FDbkYsSUFBTSxPQUNFLG1CQUFrQixFQUNsQixnQkFBZSxHQUN2QixTQUFTLEVBQWtCLENBQUMsRUFBTSxDQUM5QixPQUFXLEdBQXVCLHFCQUFzQixDQUFDLFFBQVEsRUFBRyxDQUFJLEVBRXBFLHNCQUFxQixxQkNSN0IsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQ3BELGtCQUF5QixzQkFBNkIsbUJBQXVCLE9BQzdFLG1CQUFrQixFQUMxQixTQUFTLEVBQWtCLENBQUMsRUFBSyxFQUFTLEVBQU0sQ0FDNUMsSUFBTSxFQUFPLENBQUMsU0FBVSxFQUFLLEVBQVEsU0FBUyxDQUFDLEVBQy9DLEdBQUksRUFDQSxFQUFLLEtBQUssQ0FBSSxFQUVsQixPQUFPLEVBRUgsc0JBQXFCLEdBQzdCLElBQUksT0FDSixPQUFPLGVBQWUsR0FBUyxpQkFBa0IsQ0FBRSxXQUFZLEdBQU0sSUFBSyxRQUFTLEVBQUcsQ0FBRSxPQUFPLEdBQXVCLHNCQUF5QixDQUFDLG9CQ1poSixPQUFPLGVBQWUsR0FBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDcEQsa0JBQXlCLHNCQUE2QixtQkFBdUIsT0FDckYsSUFBTSxPQUNFLG1CQUFrQixFQUMxQixTQUFTLEVBQWtCLENBQUMsRUFBSyxFQUFXLEVBQU0sQ0FDOUMsSUFBTSxFQUFPLENBQ1QsV0FDQSxFQUNJLEdBQXVCLGNBQWUsQ0FBUyxDQUN2RCxFQUNBLEdBQUksRUFDQSxFQUFLLEtBQUssQ0FBSSxFQUVsQixPQUFPLEVBRUgsc0JBQXFCLEdBQzdCLElBQUksT0FDSixPQUFPLGVBQWUsR0FBUyxpQkFBa0IsQ0FBRSxXQUFZLEdBQU0sSUFBSyxRQUFTLEVBQUcsQ0FBRSxPQUFPLEdBQXVCLHNCQUF5QixDQUFDLG9CQ2pCaEosT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQ3BELHNCQUE2QixtQkFBdUIsT0FDcEQsbUJBQWtCLEVBQzFCLFNBQVMsRUFBa0IsQ0FBQyxFQUFLLENBQzdCLE1BQU8sQ0FBQyxhQUFjLENBQUcsRUFFckIsc0JBQXFCLHFCQ043QixPQUFPLGVBQWUsR0FBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDcEQsc0JBQTZCLGdCQUF1QixtQkFBdUIsT0FDbkYsSUFBTSxPQUNFLG1CQUFrQixHQUF1QixrQkFDekMsZ0JBQWUsR0FDdkIsU0FBUyxFQUFrQixDQUFDLEVBQUksRUFBUyxDQUNyQyxPQUFXLEdBQXVCLGtCQUFtQixDQUFDLFdBQVksQ0FBRSxFQUFHLENBQU8sRUFFMUUsc0JBQXFCLHFCQ1I3QixPQUFPLGVBQWUsR0FBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDcEQsc0JBQTZCLG1CQUF1QixPQUM1RCxJQUFNLE9BQ0UsbUJBQWtCLEdBQXVCLGtCQUNqRCxTQUFTLEVBQWtCLENBQUMsRUFBSSxFQUFTLENBQ3JDLE9BQVcsR0FBdUIsa0JBQW1CLENBQUMsUUFBUyxDQUFFLEVBQUcsQ0FBTyxFQUV2RSxzQkFBcUIscUJDUDdCLE9BQU8sZUFBZSxHQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUNwRCxzQkFBNkIsbUJBQXVCLE9BQ3BELG1CQUFrQixFQUMxQixTQUFTLEVBQWtCLENBQUMsRUFBSyxFQUFPLEVBQVMsQ0FDN0MsSUFBTSxFQUFPLENBQUMsU0FBVSxDQUFHLEVBQzNCLEdBQUksR0FBUyxHQUNULEVBQUssS0FBSyxJQUFJLEVBRWIsUUFBSSxHQUFTLEdBQ2QsRUFBSyxLQUFLLElBQUksRUFFbEIsR0FBSSxHQUFTLEdBQ1QsRUFBSyxLQUFLLElBQUksRUFFbEIsUUFBYSxZQUFXLFdBQVUsWUFBYSxNQUFNLFFBQVEsQ0FBSyxFQUFJLEVBQVEsQ0FBQyxDQUFLLEVBQ2hGLEVBQUssS0FBSyxFQUFVLFNBQVMsRUFBRyxFQUFTLFNBQVMsRUFBRyxDQUFNLEVBRS9ELE9BQU8sRUFFSCxzQkFBcUIscUJDbkI3QixPQUFPLGVBQWUsR0FBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDcEQsa0JBQXlCLHNCQUE2QixnQkFBdUIsbUJBQXVCLE9BQ3BHLG1CQUFrQixFQUNsQixnQkFBZSxHQUN2QixTQUFTLEVBQWtCLENBQUMsRUFBSyxFQUFTLEVBQVMsRUFBTSxDQUNyRCxJQUFNLEVBQU8sQ0FBQyxVQUFXLEVBQUssRUFBUyxDQUFPLEVBQzlDLEdBQUksRUFDQSxFQUFLLEtBQUssQ0FBSSxFQUVsQixPQUFPLEVBRUgsc0JBQXFCLEdBQzdCLFNBQVMsRUFBYyxDQUFDLEVBQU8sQ0FDM0IsT0FBTyxJQUFVLEtBQU8sS0FBTyxPQUFPLENBQUssRUFFdkMsa0JBQWlCLHFCQ2Z6QixPQUFPLGVBQWUsR0FBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDcEQsc0JBQTZCLGdCQUF1QixtQkFBdUIsT0FDbkYsSUFBTSxPQUNFLG1CQUFrQixFQUNsQixnQkFBZSxHQUN2QixTQUFTLEVBQWtCLENBQUMsRUFBSyxFQUFRLENBQ3JDLE9BQVcsR0FBdUIscUJBQXNCLENBQUMsVUFBVyxDQUFHLEVBQUcsQ0FBTSxFQUU1RSxzQkFBcUIscUJDUjdCLE9BQU8sZUFBZSxHQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUNwRCxrQkFBeUIsc0JBQTZCLGdCQUF1QixtQkFBdUIsT0FDNUcsSUFBTSxPQUNFLG1CQUFrQixFQUNsQixnQkFBZSxHQUN2QixTQUFTLEVBQWtCLENBQUMsRUFBSyxFQUFRLENBQ3JDLE9BQVcsR0FBdUIscUJBQXNCLENBQUMsU0FBVSxDQUFHLEVBQUcsQ0FBTSxFQUUzRSxzQkFBcUIsR0FDN0IsU0FBUyxFQUFjLENBQUMsRUFBTyxDQUMzQixPQUFPLEVBQU0sSUFBSSxLQUFlLElBQWdCLEtBQU8sS0FBTyxDQUMxRCxVQUFXLEVBQVksR0FDdkIsU0FBVSxFQUFZLEVBQzFCLENBQUMsRUFFRyxrQkFBaUIscUJDZnpCLE9BQU8sZUFBZSxHQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUNwRCxzQkFBNkIsZ0JBQXVCLG1CQUF1QixPQUNuRixJQUFNLE9BQ0UsbUJBQWtCLEVBQ2xCLGdCQUFlLEdBQ3ZCLFNBQVMsRUFBa0IsQ0FBQyxFQUFLLEVBQWEsRUFBUSxFQUFNLEVBQVMsQ0FDakUsT0FBVyxHQUF1Qix1QkFBd0IsQ0FBQyxjQUFjLEVBQUcsRUFBSyxFQUFhLEVBQVEsRUFBTSxDQUFPLEVBRS9HLHNCQUFxQixxQkNSN0IsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQ3BELGtCQUF5QixzQkFBNkIsZ0JBQXVCLG1CQUF1QixPQUM1RyxJQUFNLFFBQ0YsUUFDSixPQUFPLGVBQWUsR0FBUyxrQkFBbUIsQ0FBRSxXQUFZLEdBQU0sSUFBSyxRQUFTLEVBQUcsQ0FBRSxPQUFPLEdBQWUsZ0JBQW1CLENBQUMsRUFDbkksT0FBTyxlQUFlLEdBQVMsZUFBZ0IsQ0FBRSxXQUFZLEdBQU0sSUFBSyxRQUFTLEVBQUcsQ0FBRSxPQUFPLEdBQWUsYUFBZ0IsQ0FBQyxFQUM3SCxTQUFTLEVBQWtCLENBQUMsRUFBSyxFQUFhLEVBQVEsRUFBTSxFQUFXLEVBQVMsQ0FDNUUsSUFBTSxFQUFXLEdBQWUsbUJBQW9CLEVBQUssRUFBYSxFQUFRLEVBQU0sQ0FBTyxFQUczRixPQUZBLEVBQUssS0FBSyxHQUFHLENBQVMsRUFDdEIsRUFBSyxTQUFXLEVBQ1QsRUFFSCxzQkFBcUIsR0FDN0IsSUFBSSxPQUNKLE9BQU8sZUFBZSxHQUFTLGlCQUFrQixDQUFFLFdBQVksR0FBTSxJQUFLLFFBQVMsRUFBRyxDQUFFLE9BQU8sR0FBdUIsNkJBQWdDLENBQUMsb0JDZHZKLE9BQU8sZUFBZSxHQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUNwRCxzQkFBNkIsZ0JBQXVCLG1CQUF1QixPQUNuRixJQUFNLE9BQ0UsbUJBQWtCLEVBQ2xCLGdCQUFlLEdBQ3ZCLFNBQVMsRUFBa0IsQ0FBQyxFQUFLLEVBQWEsRUFBUSxFQUFNLEVBQVMsQ0FDakUsT0FBVyxHQUF1Qix1QkFBd0IsQ0FBQyxXQUFXLEVBQUcsRUFBSyxFQUFhLEVBQVEsRUFBTSxDQUFPLEVBRTVHLHNCQUFxQixxQkNSN0IsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQ3BELGtCQUF5QixzQkFBNkIsZ0JBQXVCLG1CQUF1QixPQUM1RyxJQUFNLFFBQ0YsUUFDSixPQUFPLGVBQWUsR0FBUyxrQkFBbUIsQ0FBRSxXQUFZLEdBQU0sSUFBSyxRQUFTLEVBQUcsQ0FBRSxPQUFPLEdBQVksZ0JBQW1CLENBQUMsRUFDaEksT0FBTyxlQUFlLEdBQVMsZUFBZ0IsQ0FBRSxXQUFZLEdBQU0sSUFBSyxRQUFTLEVBQUcsQ0FBRSxPQUFPLEdBQVksYUFBZ0IsQ0FBQyxFQUMxSCxTQUFTLEVBQWtCLENBQUMsRUFBSyxFQUFhLEVBQVEsRUFBTSxFQUFXLEVBQVMsQ0FDNUUsSUFBTSxFQUFXLEdBQVksbUJBQW9CLEVBQUssRUFBYSxFQUFRLEVBQU0sQ0FBTyxFQUd4RixPQUZBLEVBQUssS0FBSyxHQUFHLENBQVMsRUFDdEIsRUFBSyxTQUFXLEVBQ1QsRUFFSCxzQkFBcUIsR0FDN0IsSUFBSSxPQUNKLE9BQU8sZUFBZSxHQUFTLGlCQUFrQixDQUFFLFdBQVksR0FBTSxJQUFLLFFBQVMsRUFBRyxDQUFFLE9BQU8sR0FBdUIsNkJBQWdDLENBQUMsb0JDZHZKLE9BQU8sZUFBZSxHQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUNwRCxzQkFBNkIsZ0JBQXVCLG1CQUF1QixPQUNuRixJQUFNLE9BQ0UsbUJBQWtCLEVBQ2xCLGdCQUFlLEdBQ3ZCLFNBQVMsRUFBa0IsQ0FBQyxFQUFLLEVBQVEsRUFBUSxFQUFNLEVBQVMsQ0FDNUQsT0FBVyxHQUF1Qix1QkFBd0IsQ0FBQyxzQkFBc0IsRUFBRyxFQUFLLEVBQVEsRUFBUSxFQUFNLENBQU8sRUFFbEgsc0JBQXFCLHFCQ1I3QixPQUFPLGVBQWUsR0FBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDcEQsa0JBQXlCLHNCQUE2QixnQkFBdUIsbUJBQXVCLE9BQzVHLElBQU0sUUFDRixRQUNKLE9BQU8sZUFBZSxHQUFTLGtCQUFtQixDQUFFLFdBQVksR0FBTSxJQUFLLFFBQVMsRUFBRyxDQUFFLE9BQU8sR0FBdUIsZ0JBQW1CLENBQUMsRUFDM0ksT0FBTyxlQUFlLEdBQVMsZUFBZ0IsQ0FBRSxXQUFZLEdBQU0sSUFBSyxRQUFTLEVBQUcsQ0FBRSxPQUFPLEdBQXVCLGFBQWdCLENBQUMsRUFDckksU0FBUyxFQUFrQixDQUFDLEVBQUssRUFBUSxFQUFRLEVBQU0sRUFBVyxFQUFTLENBQ3ZFLElBQU0sRUFBVyxHQUF1QixtQkFBb0IsRUFBSyxFQUFRLEVBQVEsRUFBTSxDQUFPLEVBRzlGLE9BRkEsRUFBSyxLQUFLLEdBQUcsQ0FBUyxFQUN0QixFQUFLLFNBQVcsRUFDVCxFQUVILHNCQUFxQixHQUM3QixJQUFJLE9BQ0osT0FBTyxlQUFlLEdBQVMsaUJBQWtCLENBQUUsV0FBWSxHQUFNLElBQUssUUFBUyxFQUFHLENBQUUsT0FBTyxHQUF1Qiw2QkFBZ0MsQ0FBQyxvQkNkdkosT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQ3BELHNCQUE2QixnQkFBdUIsbUJBQXVCLE9BQ25GLElBQU0sT0FDRSxtQkFBa0IsRUFDbEIsZ0JBQWUsR0FDdkIsU0FBUyxFQUFrQixDQUFDLEVBQUssRUFBUSxFQUFRLEVBQU0sRUFBUyxDQUM1RCxPQUFXLEdBQXVCLHVCQUF3QixDQUFDLG1CQUFtQixFQUFHLEVBQUssRUFBUSxFQUFRLEVBQU0sQ0FBTyxFQUUvRyxzQkFBcUIscUJDUjdCLE9BQU8sZUFBZSxHQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUNwRCxrQkFBeUIsc0JBQTZCLGdCQUF1QixtQkFBdUIsT0FDNUcsSUFBTSxRQUNGLFFBQ0osT0FBTyxlQUFlLEdBQVMsa0JBQW1CLENBQUUsV0FBWSxHQUFNLElBQUssUUFBUyxFQUFHLENBQUUsT0FBTyxHQUFvQixnQkFBbUIsQ0FBQyxFQUN4SSxPQUFPLGVBQWUsR0FBUyxlQUFnQixDQUFFLFdBQVksR0FBTSxJQUFLLFFBQVMsRUFBRyxDQUFFLE9BQU8sR0FBb0IsYUFBZ0IsQ0FBQyxFQUNsSSxTQUFTLEVBQWtCLENBQUMsRUFBSyxFQUFRLEVBQVEsRUFBTSxFQUFXLEVBQVMsQ0FDdkUsSUFBTSxFQUFXLEdBQW9CLG1CQUFvQixFQUFLLEVBQVEsRUFBUSxFQUFNLENBQU8sRUFHM0YsT0FGQSxFQUFLLEtBQUssR0FBRyxDQUFTLEVBQ3RCLEVBQUssU0FBVyxFQUNULEVBRUgsc0JBQXFCLEdBQzdCLElBQUksT0FDSixPQUFPLGVBQWUsR0FBUyxpQkFBa0IsQ0FBRSxXQUFZLEdBQU0sSUFBSyxRQUFTLEVBQUcsQ0FBRSxPQUFPLEdBQXVCLDZCQUFnQyxDQUFDLG9CQ2R2SixPQUFPLGVBQWUsR0FBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDcEQsc0JBQTZCLGdCQUF1QixtQkFBdUIsT0FDbkYsSUFBTSxPQUNGLFFBQ0osT0FBTyxlQUFlLEdBQVMsa0JBQW1CLENBQUUsV0FBWSxHQUFNLElBQUssUUFBUyxFQUFHLENBQUUsT0FBTyxHQUFvQixnQkFBbUIsQ0FBQyxFQUN4SSxPQUFPLGVBQWUsR0FBUyxlQUFnQixDQUFFLFdBQVksR0FBTSxJQUFLLFFBQVMsRUFBRyxDQUFFLE9BQU8sR0FBb0IsYUFBZ0IsQ0FBQyxFQUNsSSxTQUFTLEVBQWtCLENBQUMsRUFBSyxFQUFRLEVBQVEsRUFBTSxFQUFhLEVBQVMsQ0FDekUsT0FBVyxHQUF1Qiw0QkFBNkIsQ0FBQyxtQkFBbUIsRUFBRyxFQUFLLEVBQVEsRUFBUSxFQUFNLEVBQWEsQ0FBTyxFQUVqSSxzQkFBcUIscUJDVDdCLE9BQU8sZUFBZSxHQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUNwRCxzQkFBNkIsZ0JBQXVCLG1CQUF1QixPQUNuRixJQUFNLE9BQ0YsUUFDSixPQUFPLGVBQWUsR0FBUyxrQkFBbUIsQ0FBRSxXQUFZLEdBQU0sSUFBSyxRQUFTLEVBQUcsQ0FBRSxPQUFPLEdBQVksZ0JBQW1CLENBQUMsRUFDaEksT0FBTyxlQUFlLEdBQVMsZUFBZ0IsQ0FBRSxXQUFZLEdBQU0sSUFBSyxRQUFTLEVBQUcsQ0FBRSxPQUFPLEdBQVksYUFBZ0IsQ0FBQyxFQUMxSCxTQUFTLEVBQWtCLENBQUMsRUFBSyxFQUFhLEVBQVEsRUFBTSxFQUFhLEVBQVMsQ0FDOUUsT0FBVyxHQUF1Qiw0QkFBNkIsQ0FBQyxXQUFXLEVBQUcsRUFBSyxFQUFhLEVBQVEsRUFBTSxFQUFhLENBQU8sRUFFOUgsc0JBQXFCLHFCQ1Q3QixPQUFPLGVBQWUsR0FBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDcEQsc0JBQTZCLGdCQUF1QixtQkFBdUIsT0FDbkYsSUFBTSxPQUNFLG1CQUFrQixFQUNsQixnQkFBZSxHQUN2QixTQUFTLEVBQWtCLENBQUMsRUFBSyxFQUFNLEVBQUksRUFBUyxDQUNoRCxPQUFXLEdBQXVCLHVCQUF3QixDQUFDLFdBQVcsRUFBRyxFQUFLLEVBQU0sRUFBSSxDQUFPLEVBRTNGLHNCQUFxQixxQkNSN0IsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQ3BELGtCQUF5QixzQkFBNkIsZ0JBQXVCLG1CQUF1QixPQUM1RyxJQUFNLFFBQ0YsUUFDSixPQUFPLGVBQWUsR0FBUyxrQkFBbUIsQ0FBRSxXQUFZLEdBQU0sSUFBSyxRQUFTLEVBQUcsQ0FBRSxPQUFPLEdBQVksZ0JBQW1CLENBQUMsRUFDaEksT0FBTyxlQUFlLEdBQVMsZUFBZ0IsQ0FBRSxXQUFZLEdBQU0sSUFBSyxRQUFTLEVBQUcsQ0FBRSxPQUFPLEdBQVksYUFBZ0IsQ0FBQyxFQUMxSCxTQUFTLEVBQWtCLENBQUMsRUFBSyxFQUFNLEVBQUksRUFBVyxFQUFTLENBQzNELElBQU0sRUFBVyxHQUFZLG1CQUFvQixFQUFLLEVBQU0sRUFBSSxDQUFPLEVBR3ZFLE9BRkEsRUFBSyxLQUFLLEdBQUcsQ0FBUyxFQUN0QixFQUFLLFNBQVcsRUFDVCxFQUVILHNCQUFxQixHQUM3QixJQUFJLE9BQ0osT0FBTyxlQUFlLEdBQVMsaUJBQWtCLENBQUUsV0FBWSxHQUFNLElBQUssUUFBUyxFQUFHLENBQUUsT0FBTyxHQUF1Qiw2QkFBZ0MsQ0FBQyxvQkNkdkosT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQ3BELGtCQUF5QixzQkFBNkIsZ0JBQXVCLG1CQUF1QixPQUM1RyxJQUFNLE9BQ0YsUUFDSixPQUFPLGVBQWUsR0FBUyxrQkFBbUIsQ0FBRSxXQUFZLEdBQU0sSUFBSyxRQUFTLEVBQUcsQ0FBRSxPQUFPLEdBQVksZ0JBQW1CLENBQUMsRUFDaEksT0FBTyxlQUFlLEdBQVMsZUFBZ0IsQ0FBRSxXQUFZLEdBQU0sSUFBSyxRQUFTLEVBQUcsQ0FBRSxPQUFPLEdBQVksYUFBZ0IsQ0FBQyxFQUMxSCxTQUFTLEVBQWtCLENBQUMsRUFBYSxFQUFRLEVBQU0sRUFBSSxFQUFTLENBQ2hFLElBQU0sRUFBVyxHQUF1Qix1QkFBd0IsQ0FBQyxpQkFBa0IsQ0FBVyxFQUFHLEVBQVEsRUFBTSxFQUFJLENBQU8sRUFDMUgsR0FBSSxHQUFTLFVBQ1QsRUFBSyxLQUFLLFdBQVcsRUFFekIsT0FBTyxFQUVILHNCQUFxQixHQUM3QixTQUFTLEVBQWMsQ0FBQyxFQUFPLENBQzNCLEdBQUksT0FBTyxJQUFVLFNBQ2pCLE1BQU0sSUFBSSxVQUFVLDRDQUE0QyxFQUVwRSxPQUFPLEVBRUgsa0JBQWlCLHFCQ3BCekIsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQ3BELHNCQUE2QixnQkFBdUIsbUJBQXVCLE9BQzNFLG1CQUFrQixFQUNsQixnQkFBZSxHQUN2QixTQUFTLEVBQWtCLENBQUMsRUFBSyxDQUM3QixNQUFPLENBQUMsTUFBTyxDQUFHLEVBRWQsc0JBQXFCLHFCQ1A3QixPQUFPLGVBQWUsR0FBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDcEQsc0JBQTZCLGdCQUF1QixtQkFBdUIsT0FDM0UsbUJBQWtCLEVBQ2xCLGdCQUFlLEdBQ3ZCLFNBQVMsRUFBa0IsQ0FBQyxFQUFLLEVBQVEsQ0FDckMsTUFBTyxDQUFDLFNBQVUsRUFBSyxFQUFPLFNBQVMsQ0FBQyxFQUVwQyxzQkFBcUIscUJDUDdCLE9BQU8sZUFBZSxHQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUNwRCxzQkFBNkIsbUJBQXVCLE9BQ3BELG1CQUFrQixFQUMxQixTQUFTLEVBQWtCLENBQUMsRUFBSyxDQUM3QixNQUFPLENBQUMsU0FBVSxDQUFHLEVBRWpCLHNCQUFxQixxQkNON0IsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQ3BELHNCQUE2QixtQkFBdUIsT0FDNUQsSUFBTSxPQUNFLG1CQUFrQixFQUMxQixTQUFTLEVBQWtCLENBQUMsRUFBSyxFQUFNLENBQ25DLElBQU0sRUFBTyxDQUFDLFFBQVMsQ0FBRyxFQUMxQixHQUFJLE9BQVEsRUFDUixFQUFLLEtBQUssS0FBTSxFQUFLLEdBQUcsU0FBUyxDQUFDLEVBRWpDLFFBQUksT0FBUSxFQUNiLEVBQUssS0FBSyxLQUFNLEVBQUssR0FBRyxTQUFTLENBQUMsRUFFakMsUUFBSSxTQUFVLEVBQ2YsRUFBSyxLQUFLLE9BQVksR0FBdUIsY0FBZSxFQUFLLElBQUksQ0FBQyxFQUVyRSxRQUFJLFNBQVUsRUFDZixFQUFLLEtBQUssT0FBWSxHQUF1QixjQUFlLEVBQUssSUFBSSxDQUFDLEVBR3RFLE9BQUssS0FBSyxTQUFTLEVBRXZCLE9BQU8sRUFFSCxzQkFBcUIscUJDdkI3QixPQUFPLGVBQWUsR0FBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDcEQsc0JBQTZCLGdCQUF1QixtQkFBdUIsT0FDM0UsbUJBQWtCLEVBQ2xCLGdCQUFlLEdBQ3ZCLFNBQVMsRUFBa0IsQ0FBQyxFQUFLLEVBQU8sRUFBSyxDQUN6QyxNQUFPLENBQUMsV0FBWSxFQUFLLEVBQU0sU0FBUyxFQUFHLEVBQUksU0FBUyxDQUFDLEVBRXJELHNCQUFxQixxQkNQN0IsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQ3BELHNCQUE2QixtQkFBdUIsT0FDcEQsbUJBQWtCLEVBQzFCLFNBQVMsRUFBa0IsQ0FBQyxFQUFLLEVBQU8sQ0FDcEMsTUFBTyxDQUFDLFNBQVUsRUFBSyxDQUFLLEVBRXhCLHNCQUFxQixxQkNON0IsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQ3BELHNCQUE2QixtQkFBdUIsT0FDNUQsSUFBTSxPQUNFLG1CQUFrQixFQUMxQixTQUFTLEVBQWtCLENBQUMsRUFBSyxFQUFPLENBQ3BDLE9BQVcsR0FBdUIscUJBQXNCLENBQUMsT0FBUSxDQUFHLEVBQUcsQ0FBSyxFQUV4RSxzQkFBcUIscUJDUDdCLE9BQU8sZUFBZSxHQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUNwRCxrQkFBeUIsc0JBQTZCLG1CQUF1QixPQUM3RSxtQkFBa0IsRUFDMUIsU0FBUyxFQUFrQixDQUFDLEVBQUssRUFBTyxDQUNwQyxNQUFPLENBQUMsVUFBVyxFQUFLLENBQUssRUFFekIsc0JBQXFCLEdBQzdCLElBQUksT0FDSixPQUFPLGVBQWUsR0FBUyxpQkFBa0IsQ0FBRSxXQUFZLEdBQU0sSUFBSyxRQUFTLEVBQUcsQ0FBRSxPQUFPLEdBQXVCLHNCQUF5QixDQUFDLG9CQ1JoSixPQUFPLGVBQWUsR0FBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDcEQsc0JBQTZCLG1CQUEwQixtQkFBdUIsT0FDdEYsSUFBTSxPQUtFLG1CQUFrQixDQUd0QixpQkFBa0IsR0FHbEIsa0JBQW1CLEVBR25CLFFBQVMsRUFHVCxRQUFTLENBQ2IsRUFDUSxtQkFBa0IsRUFDMUIsU0FBUyxFQUFrQixDQUFDLEVBQUssRUFBUSxFQUFTLEVBQU0sQ0FDcEQsSUFBTSxFQUFPLENBQUMsVUFBVyxFQUFLLEVBQVEsU0FBUyxDQUFDLEVBQ2hELEdBQUksRUFDQSxFQUFLLEtBQUssQ0FBSSxFQUdsQixPQURBLEVBQUssS0FBSyxRQUFRLEVBQ1AsR0FBdUIsb0JBQXFCLEVBQU0sQ0FBTSxFQUUvRCxzQkFBcUIscUJDOUI3QixPQUFPLGVBQWUsR0FBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDcEQsc0JBQTZCLG1CQUF1QixPQUM1RCxJQUFNLE9BQ0UsbUJBQWtCLEVBQzFCLFNBQVMsRUFBa0IsQ0FBQyxFQUFLLEVBQVEsRUFBVyxFQUFNLENBQ3RELElBQU0sRUFBTyxDQUNULFlBQ0EsRUFDSSxHQUF1QixjQUFlLENBQVMsQ0FDdkQsRUFDQSxHQUFJLEVBQ0EsRUFBSyxLQUFLLENBQUksRUFHbEIsT0FEQSxFQUFLLEtBQUssUUFBUSxFQUNQLEdBQXVCLG9CQUFxQixFQUFNLENBQU0sRUFFL0Qsc0JBQXFCLHFCQ2hCN0IsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQ3BELHNCQUE2QixnQkFBdUIsbUJBQTBCLHdCQUE0QixPQUNsSCxJQUFNLE9BQ0Usd0JBQXVCLENBRzNCLGlCQUFrQixHQUdsQixjQUFlLEVBQ25CLEVBQ1EsbUJBQWtCLEVBQ2xCLGdCQUFlLEdBQ3ZCLFNBQVMsRUFBa0IsQ0FBQyxFQUFLLEVBQVEsQ0FDckMsT0FBVyxHQUF1QixvQkFBcUIsQ0FBQyxjQUFlLEVBQUssUUFBUSxFQUFHLENBQU0sRUFFekYsc0JBQXFCLHFCQ2hCN0IsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQ3BELHNCQUE2QixnQkFBdUIsbUJBQXVCLE9BQzNFLG1CQUFrQixFQUNsQixnQkFBZSxHQUN2QixTQUFTLEVBQWtCLENBQUMsRUFBSyxFQUFPLENBQ3BDLE1BQU8sQ0FBQyxPQUFRLEVBQUssQ0FBSyxFQUV0QixzQkFBcUIscUJDUDdCLE9BQU8sZUFBZSxHQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUNwRCxrQkFBeUIsc0JBQTZCLDBCQUFpQyxnQkFBdUIsbUJBQXVCLE9BQ3JJLG1CQUFrQixFQUNsQixnQkFBZSxHQUNmLDBCQUF5QixHQUNqQyxTQUFTLEVBQWtCLENBQUMsRUFBSyxDQUM3QixNQUFPLENBQUMsVUFBVyxDQUFHLEVBRWxCLHNCQUFxQixHQUM3QixJQUFJLE9BQ0osT0FBTyxlQUFlLEdBQVMsaUJBQWtCLENBQUUsV0FBWSxHQUFNLElBQUssUUFBUyxFQUFHLENBQUUsT0FBTyxHQUF1QixxQkFBd0IsQ0FBQyxvQkNWL0ksT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQ3BELHNCQUE2QixtQkFBdUIsT0FDcEQsbUJBQWtCLEVBQzFCLFNBQVMsRUFBa0IsQ0FBQyxFQUFLLEVBQU8sRUFBVyxDQUMvQyxNQUFPLENBQUMsVUFBVyxFQUFLLEVBQU8sRUFBVSxTQUFTLENBQUMsRUFFL0Msc0JBQXFCLHFCQ043QixPQUFPLGVBQWUsR0FBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDcEQsc0JBQTZCLG1CQUF1QixPQUNwRCxtQkFBa0IsRUFDMUIsU0FBUyxFQUFrQixDQUFDLEVBQUssRUFBTyxFQUFXLENBQy9DLE1BQU8sQ0FBQyxlQUFnQixFQUFLLEVBQU8sRUFBVSxTQUFTLENBQUMsRUFFcEQsc0JBQXFCLHFCQ043QixPQUFPLGVBQWUsR0FBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDcEQsc0JBQTZCLG1CQUF1QixPQUNwRCxtQkFBa0IsRUFDMUIsU0FBUyxFQUFrQixDQUFDLEVBQUssQ0FDN0IsTUFBTyxDQUFDLFFBQVMsQ0FBRyxFQUVoQixzQkFBcUIscUJDTjdCLE9BQU8sZUFBZSxHQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUNwRCxzQkFBNkIsbUJBQXVCLE9BQ3BELG1CQUFrQixFQUMxQixTQUFTLEVBQWtCLENBQUMsRUFBSyxDQUM3QixNQUFPLENBQUMsT0FBUSxDQUFHLEVBRWYsc0JBQXFCLHFCQ043QixPQUFPLGVBQWUsR0FBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDcEQsc0JBQTZCLGdCQUF1QixtQkFBdUIsT0FDbkYsSUFBTSxPQUNFLG1CQUFrQixFQUNsQixnQkFBZSxHQUN2QixTQUFTLEVBQWtCLENBQUMsRUFBSyxFQUFRLENBQ3JDLE9BQVcsR0FBdUIscUJBQXNCLENBQUMsUUFBUyxDQUFHLEVBQUcsQ0FBTSxFQUUxRSxzQkFBcUIscUJDUjdCLE9BQU8sZUFBZSxHQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUNwRCxzQkFBNkIsbUJBQXVCLE9BQzVELElBQU0sT0FDRSxtQkFBa0IsRUFDMUIsU0FBUyxFQUFrQixDQUFDLEVBQUssRUFBUSxDQUNyQyxPQUFXLEdBQXVCLG9CQUFxQixDQUFDLFdBQVksRUFBSyxRQUFRLEVBQUcsQ0FBTSxFQUV0RixzQkFBcUIscUJDUDdCLE9BQU8sZUFBZSxHQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUNwRCxzQkFBNkIsbUJBQXVCLE9BQzVELElBQU0sT0FDRSxtQkFBa0IsRUFDMUIsU0FBUyxFQUFrQixDQUFDLEVBQUssRUFBUSxFQUFJLEVBQU0sQ0FDL0MsSUFBTSxFQUFPLENBQUMsV0FBWSxFQUFLLEVBQUcsU0FBUyxDQUFDLEVBQzVDLEdBQUksRUFDQSxFQUFLLEtBQUssQ0FBSSxFQUdsQixPQURBLEVBQUssS0FBSyxRQUFRLEVBQ1AsR0FBdUIsb0JBQXFCLEVBQU0sQ0FBTSxFQUUvRCxzQkFBcUIscUJDWjdCLE9BQU8sZUFBZSxHQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUNwRCxzQkFBNkIsZ0JBQXVCLG1CQUF1QixPQUNuRixJQUFNLE9BQ0UsbUJBQWtCLEVBQ2xCLGdCQUFlLEdBQ3ZCLFNBQVMsRUFBa0IsQ0FBQyxFQUFLLEVBQVEsRUFBVyxFQUFNLENBQ3RELElBQU0sRUFBTyxDQUFDLGFBQWMsRUFBUyxHQUF1QixjQUFlLENBQVMsQ0FBQyxFQUNyRixHQUFJLEVBQ0EsRUFBSyxLQUFLLENBQUksRUFHbEIsT0FEQSxFQUFLLEtBQUssUUFBUSxFQUNQLEdBQXVCLG9CQUFxQixFQUFNLENBQU0sRUFFL0Qsc0JBQXFCLHFCQ2I3QixPQUFPLGVBQWUsR0FBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDcEQsc0JBQTZCLGdCQUF1QixtQkFBdUIsT0FDbkYsSUFBTSxPQUNFLG1CQUFrQixFQUNsQixnQkFBZSxHQUN2QixTQUFTLEVBQWtCLENBQUMsRUFBSyxFQUFRLENBQ3JDLE9BQVcsR0FBdUIsb0JBQXFCLENBQUMsZUFBZ0IsRUFBSyxRQUFRLEVBQUcsQ0FBTSxFQUUxRixzQkFBcUIscUJDUjdCLE9BQU8sZUFBZSxHQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUNwRCxzQkFBNkIsZ0JBQXVCLG1CQUF1QixPQUNuRixJQUFNLE9BQ0UsbUJBQWtCLEVBQ2xCLGdCQUFlLEdBQ3ZCLFNBQVMsRUFBa0IsQ0FBQyxFQUFLLEVBQVEsQ0FDckMsT0FBVyxHQUF1QixvQkFBcUIsQ0FBQyxRQUFTLEVBQUssUUFBUSxFQUFHLENBQU0sRUFFbkYsc0JBQXFCLHFCQ1I3QixPQUFPLGVBQWUsR0FBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDcEQsc0JBQTZCLGdCQUF1QixtQkFBdUIsT0FDM0UsbUJBQWtCLEVBQ2xCLGdCQUFlLEdBQ3ZCLFNBQVMsRUFBa0IsQ0FBQyxFQUFLLENBQzdCLE1BQU8sQ0FBQyxhQUFjLENBQUcsRUFFckIsc0JBQXFCLHFCQ1A3QixPQUFPLGVBQWUsR0FBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDcEQsc0JBQTZCLGdCQUF1QixtQkFBdUIsT0FDbkYsSUFBTSxRQUNGLFFBQ0osT0FBTyxlQUFlLEdBQVMsa0JBQW1CLENBQUUsV0FBWSxHQUFNLElBQUssUUFBUyxFQUFHLENBQUUsT0FBTyxHQUFhLGdCQUFtQixDQUFDLEVBQ2pJLE9BQU8sZUFBZSxHQUFTLGVBQWdCLENBQUUsV0FBWSxHQUFNLElBQUssUUFBUyxFQUFHLENBQUUsT0FBTyxHQUFhLGFBQWdCLENBQUMsRUFDM0gsU0FBUyxFQUFrQixDQUFDLEVBQUssRUFBTyxDQUNwQyxNQUFPLENBQ0gsR0FBTyxHQUFhLG1CQUFvQixDQUFHLEVBQzNDLEVBQU0sU0FBUyxDQUNuQixFQUVJLHNCQUFxQixxQkNaN0IsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQ3BELGtCQUF5QixzQkFBNkIsZ0JBQXVCLG1CQUF1QixPQUM1RyxJQUFNLFFBQ0YsUUFDSixPQUFPLGVBQWUsR0FBUyxrQkFBbUIsQ0FBRSxXQUFZLEdBQU0sSUFBSyxRQUFTLEVBQUcsQ0FBRSxPQUFPLEdBQW1CLGdCQUFtQixDQUFDLEVBQ3ZJLE9BQU8sZUFBZSxHQUFTLGVBQWdCLENBQUUsV0FBWSxHQUFNLElBQUssUUFBUyxFQUFHLENBQUUsT0FBTyxHQUFtQixhQUFnQixDQUFDLEVBQ2pJLFNBQVMsRUFBa0IsQ0FBQyxFQUFLLEVBQU8sQ0FDcEMsTUFBTyxDQUNILEdBQU8sR0FBbUIsbUJBQW9CLEVBQUssQ0FBSyxFQUN4RCxZQUNKLEVBRUksc0JBQXFCLEdBQzdCLElBQUksT0FDSixPQUFPLGVBQWUsR0FBUyxpQkFBa0IsQ0FBRSxXQUFZLEdBQU0sSUFBSyxRQUFTLEVBQUcsQ0FBRSxPQUFPLEdBQXVCLHFCQUF3QixDQUFDLG9CQ2QvSSxPQUFPLGVBQWUsR0FBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDcEQsa0JBQXlCLHNCQUE2QixnQkFBdUIsbUJBQXVCLE9BQzVHLElBQU0sT0FDRSxtQkFBa0IsRUFDbEIsZ0JBQWUsR0FDdkIsU0FBUyxFQUFrQixDQUFDLEVBQUssRUFBUSxFQUFTLENBQzlDLE9BQVcsR0FBdUIsa0JBQW1CLENBQ2pELFFBQ0EsQ0FDSixFQUFHLEVBQVEsQ0FBTyxFQUVkLHNCQUFxQixHQUM3QixTQUFTLEVBQWMsRUFBRSxFQUFRLEdBQVksQ0FDekMsSUFBTSxFQUFlLENBQUMsRUFDdEIsUUFBUyxFQUFJLEVBQUcsRUFBSSxFQUFVLE9BQVEsR0FBSyxFQUN2QyxFQUFhLEtBQUssQ0FDZCxNQUFPLEVBQVUsR0FDakIsTUFBTyxFQUFVLEVBQUksRUFDekIsQ0FBQyxFQUVMLE1BQU8sQ0FDSCxPQUFRLE9BQU8sQ0FBTSxFQUNyQixPQUFRLENBQ1osRUFFSSxrQkFBaUIscUJDekJ6QixPQUFPLGVBQWUsR0FBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDcEQsa0JBQXlCLHNCQUE2QixnQkFBdUIsbUJBQXVCLE9BQzVHLElBQU0sUUFDRixRQUNKLE9BQU8sZUFBZSxHQUFTLGtCQUFtQixDQUFFLFdBQVksR0FBTSxJQUFLLFFBQVMsRUFBRyxDQUFFLE9BQU8sR0FBUSxnQkFBbUIsQ0FBQyxFQUM1SCxPQUFPLGVBQWUsR0FBUyxlQUFnQixDQUFFLFdBQVksR0FBTSxJQUFLLFFBQVMsRUFBRyxDQUFFLE9BQU8sR0FBUSxhQUFnQixDQUFDLEVBQ3RILFNBQVMsRUFBa0IsQ0FBQyxFQUFLLEVBQVEsRUFBUyxDQUM5QyxJQUFNLEVBQVcsR0FBUSxtQkFBb0IsRUFBSyxFQUFRLENBQU8sRUFFakUsT0FEQSxFQUFLLEtBQUssVUFBVSxFQUNiLEVBRUgsc0JBQXFCLEdBQzdCLFNBQVMsRUFBYyxFQUFFLEVBQVEsR0FBVSxDQUN2QyxNQUFPLENBQ0gsT0FBUSxPQUFPLENBQU0sRUFDckIsS0FBTSxDQUNWLEVBRUksa0JBQWlCLHFCQ2xCekIsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQ3BELHNCQUE2QixtQkFBdUIsT0FDcEQsbUJBQWtCLEVBQzFCLFNBQVMsRUFBa0IsS0FBSyxFQUFLLEVBQU8sR0FBYSxDQUNyRCxJQUFNLEVBQU8sQ0FBQyxPQUFRLENBQUcsRUFDekIsR0FBSSxPQUFPLElBQVUsVUFBWSxPQUFPLElBQVUsVUFBWSxPQUFPLFNBQVMsQ0FBSyxFQUMvRSxFQUFLLEtBQUssR0FBYSxDQUFLLEVBQUcsR0FBYSxDQUFVLENBQUMsRUFFdEQsUUFBSSxhQUFpQixJQUN0QixHQUFRLEVBQU0sQ0FBSyxFQUVsQixRQUFJLE1BQU0sUUFBUSxDQUFLLEVBQ3hCLEdBQVcsRUFBTSxDQUFLLEVBR3RCLFFBQVcsRUFBTSxDQUFLLEVBRTFCLE9BQU8sRUFFSCxzQkFBcUIsR0FDN0IsU0FBUyxFQUFPLENBQUMsRUFBTSxFQUFLLENBQ3hCLFFBQVksRUFBSyxLQUFVLEVBQUksUUFBUSxFQUNuQyxFQUFLLEtBQUssR0FBYSxDQUFHLEVBQUcsR0FBYSxDQUFLLENBQUMsRUFHeEQsU0FBUyxFQUFVLENBQUMsRUFBTSxFQUFRLENBQzlCLFFBQVcsS0FBUyxFQUFRLENBQ3hCLEdBQUksTUFBTSxRQUFRLENBQUssRUFBRyxDQUN0QixHQUFXLEVBQU0sQ0FBSyxFQUN0QixTQUVKLEVBQUssS0FBSyxHQUFhLENBQUssQ0FBQyxHQUdyQyxTQUFTLEVBQVUsQ0FBQyxFQUFNLEVBQVEsQ0FDOUIsUUFBVyxLQUFPLE9BQU8sS0FBSyxDQUFNLEVBQ2hDLEVBQUssS0FBSyxHQUFhLENBQUcsRUFBRyxHQUFhLEVBQU8sRUFBSSxDQUFDLEVBRzlELFNBQVMsRUFBWSxDQUFDLEVBQU8sQ0FDekIsT0FBTyxPQUFPLElBQVUsU0FDcEIsRUFBTSxTQUFTLEVBQ2YscUJDMUNSLE9BQU8sZUFBZSxHQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUNwRCxrQkFBeUIsc0JBQTZCLG1CQUF1QixPQUM3RSxtQkFBa0IsRUFDMUIsU0FBUyxFQUFrQixDQUFDLEVBQUssRUFBTyxFQUFPLENBQzNDLE1BQU8sQ0FBQyxTQUFVLEVBQUssRUFBTyxDQUFLLEVBRS9CLHNCQUFxQixHQUM3QixJQUFJLE9BQ0osT0FBTyxlQUFlLEdBQVMsaUJBQWtCLENBQUUsV0FBWSxHQUFNLElBQUssUUFBUyxFQUFHLENBQUUsT0FBTyxHQUF1QixzQkFBeUIsQ0FBQyxvQkNSaEosT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQ3BELHNCQUE2QixtQkFBdUIsT0FDcEQsbUJBQWtCLEVBQzFCLFNBQVMsRUFBa0IsQ0FBQyxFQUFLLEVBQU8sQ0FDcEMsTUFBTyxDQUFDLFVBQVcsRUFBSyxDQUFLLEVBRXpCLHNCQUFxQixxQkNON0IsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQ3BELHNCQUE2QixnQkFBdUIsbUJBQXVCLE9BQ25GLElBQU0sT0FDRSxtQkFBa0IsRUFDbEIsZ0JBQWUsR0FDdkIsU0FBUyxFQUFrQixDQUFDLEVBQUssRUFBUSxDQUNyQyxPQUFXLEdBQXVCLG9CQUFxQixDQUFDLE9BQVEsRUFBSyxRQUFRLEVBQUcsQ0FBTSxFQUVsRixzQkFBcUIscUJDUjdCLE9BQU8sZUFBZSxHQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUNwRCxzQkFBNkIsbUJBQXVCLE9BQ3BELG1CQUFrQixFQUMxQixTQUFTLEVBQWtCLENBQUMsRUFBSyxDQUM3QixNQUFPLENBQUMsUUFBUyxDQUFHLEVBRWhCLHNCQUFxQixxQkNON0IsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQ3BELHNCQUE2QixtQkFBdUIsT0FDcEQsbUJBQWtCLEVBQzFCLFNBQVMsRUFBa0IsQ0FBQyxFQUFLLENBQzdCLE1BQU8sQ0FBQyxPQUFRLENBQUcsRUFFZixzQkFBcUIscUJDTjdCLE9BQU8sZUFBZSxHQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUNwRCxzQkFBNkIsbUJBQXVCLE9BQ3BELG1CQUFrQixFQUMxQixTQUFTLEVBQWtCLENBQUMsRUFBSyxFQUFXLENBQ3hDLE1BQU8sQ0FBQyxTQUFVLEVBQUssRUFBVSxTQUFTLENBQUMsRUFFdkMsc0JBQXFCLHFCQ043QixPQUFPLGVBQWUsR0FBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDcEQsc0JBQTZCLG1CQUF1QixPQUNwRCxtQkFBa0IsRUFDMUIsU0FBUyxFQUFrQixDQUFDLEVBQUssRUFBVyxDQUN4QyxNQUFPLENBQUMsY0FBZSxFQUFLLEVBQVUsU0FBUyxDQUFDLEVBRTVDLHNCQUFxQixxQkNON0IsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQ3BELHNCQUE2QixnQkFBdUIsbUJBQXVCLE9BQzNFLG1CQUFrQixFQUNsQixnQkFBZSxHQUN2QixTQUFTLEVBQWtCLENBQUMsRUFBTSxFQUFNLENBQ3BDLE1BQU8sQ0FDSCxNQUNBLEVBQ0EsQ0FDSixFQUVJLHNCQUFxQixxQkNYN0IsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQ3BELGtCQUF5QixzQkFBNkIsZ0JBQXVCLG1CQUF1QixPQUM1RyxJQUFNLE9BQ0EsUUFDRixRQUNKLE9BQU8sZUFBZSxHQUFTLGtCQUFtQixDQUFFLFdBQVksR0FBTSxJQUFLLFFBQVMsRUFBRyxDQUFFLE9BQU8sR0FBTSxnQkFBbUIsQ0FBQyxFQUMxSCxPQUFPLGVBQWUsR0FBUyxlQUFnQixDQUFFLFdBQVksR0FBTSxJQUFLLFFBQVMsRUFBRyxDQUFFLE9BQU8sR0FBTSxhQUFnQixDQUFDLEVBQ3BILFNBQVMsRUFBa0IsQ0FBQyxFQUFNLEVBQU0sQ0FDcEMsSUFBTSxFQUFXLEdBQU0sbUJBQW9CLEVBQU0sQ0FBSSxFQUVyRCxPQURBLEVBQUssS0FBSyxNQUFPLGNBQWMsRUFDeEIsRUFFSCxzQkFBcUIsR0FDN0IsU0FBUyxFQUFjLENBQUMsRUFBTyxDQUMzQixNQUFPLENBQ0gsUUFBUyxFQUFNLEdBQUcsSUFBSSxFQUFFLEVBQU0sRUFBTSxNQUFhLENBQzdDLEtBQVUsR0FBdUIsb0JBQXFCLENBQUksRUFDMUQsS0FBVSxHQUF1QixvQkFBcUIsQ0FBSSxFQUMxRCxRQUNKLEVBQUUsRUFDRixPQUFRLEVBQU0sRUFDbEIsRUFFSSxrQkFBaUIscUJDdkJ6QixPQUFPLGVBQWUsR0FBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDcEQsa0JBQXlCLHNCQUE2QixnQkFBdUIsbUJBQXVCLE9BQzVHLElBQU0sT0FDQSxRQUNGLFFBQ0osT0FBTyxlQUFlLEdBQVMsa0JBQW1CLENBQUUsV0FBWSxHQUFNLElBQUssUUFBUyxFQUFHLENBQUUsT0FBTyxHQUFNLGdCQUFtQixDQUFDLEVBQzFILE9BQU8sZUFBZSxHQUFTLGVBQWdCLENBQUUsV0FBWSxHQUFNLElBQUssUUFBUyxFQUFHLENBQUUsT0FBTyxHQUFNLGFBQWdCLENBQUMsRUFDcEgsU0FBUyxFQUFrQixDQUFDLEVBQU0sRUFBTSxDQUNwQyxJQUFNLEVBQVcsR0FBTSxtQkFBb0IsRUFBTSxDQUFJLEVBRXJELE9BREEsRUFBSyxLQUFLLEtBQUssRUFDUixFQUVILHNCQUFxQixHQUM3QixTQUFTLEVBQWMsQ0FBQyxFQUFPLENBQzNCLE1BQU8sQ0FDSCxRQUFTLEVBQU0sR0FBRyxJQUFJLEVBQUUsRUFBTSxNQUFXLENBQ3JDLEtBQVUsR0FBdUIsb0JBQXFCLENBQUksRUFDMUQsS0FBVSxHQUF1QixvQkFBcUIsQ0FBSSxDQUM5RCxFQUFFLEVBQ0YsT0FBUSxFQUFNLEVBQ2xCLEVBRUksa0JBQWlCLHFCQ3RCekIsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQ3BELHNCQUE2QixnQkFBdUIsbUJBQXVCLE9BQ25GLElBQU0sUUFDRixRQUNKLE9BQU8sZUFBZSxHQUFTLGtCQUFtQixDQUFFLFdBQVksR0FBTSxJQUFLLFFBQVMsRUFBRyxDQUFFLE9BQU8sR0FBTSxnQkFBbUIsQ0FBQyxFQUMxSCxPQUFPLGVBQWUsR0FBUyxlQUFnQixDQUFFLFdBQVksR0FBTSxJQUFLLFFBQVMsRUFBRyxDQUFFLE9BQU8sR0FBTSxhQUFnQixDQUFDLEVBQ3BILFNBQVMsRUFBa0IsQ0FBQyxFQUFNLEVBQU0sQ0FDcEMsSUFBTSxFQUFXLEdBQU0sbUJBQW9CLEVBQU0sQ0FBSSxFQUVyRCxPQURBLEVBQUssS0FBSyxLQUFLLEVBQ1IsRUFFSCxzQkFBcUIscUJDWDdCLE9BQU8sZUFBZSxHQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUNwRCxzQkFBNkIsZ0JBQXVCLG1CQUF1QixPQUMzRSxtQkFBa0IsRUFDbEIsZ0JBQWUsR0FDdkIsU0FBUyxFQUFrQixDQUFDLEVBQUssRUFBTyxDQUNwQyxNQUFPLENBQUMsU0FBVSxFQUFLLEVBQU0sU0FBUyxDQUFDLEVBRW5DLHNCQUFxQixxQkNQN0IsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQ3BELHNCQUE2QixtQkFBdUIsT0FDcEQsbUJBQWtCLEVBQzFCLFNBQVMsRUFBa0IsQ0FBQyxFQUFLLEVBQVUsRUFBTyxFQUFTLENBQ3ZELE1BQU8sQ0FDSCxVQUNBLEVBQ0EsRUFDQSxFQUNBLENBQ0osRUFFSSxzQkFBcUIscUJDWjdCLE9BQU8sZUFBZSxHQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUNwRCxzQkFBNkIsZ0JBQXVCLG1CQUF1QixPQUMzRSxtQkFBa0IsRUFDbEIsZ0JBQWUsR0FDdkIsU0FBUyxFQUFrQixDQUFDLEVBQUssQ0FDN0IsTUFBTyxDQUFDLE9BQVEsQ0FBRyxFQUVmLHNCQUFxQixxQkNQN0IsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQ3BELHNCQUE2QixtQkFBdUIsT0FDcEQsbUJBQWtCLEVBQzFCLFNBQVMsRUFBa0IsQ0FBQyxFQUFRLEVBQWEsRUFBWSxFQUFpQixDQUMxRSxNQUFPLENBQ0gsUUFDQSxFQUNBLEVBQ0EsRUFDQSxDQUNKLEVBRUksc0JBQXFCLHFCQ1o3QixPQUFPLGVBQWUsR0FBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDcEQsc0JBQTZCLG1CQUF1QixPQUNwRCxtQkFBa0IsRUFDMUIsU0FBUyxFQUFrQixDQUFDLEVBQUssRUFBTyxDQUNwQyxNQUFPLENBQUMsT0FBUSxFQUFLLEVBQU0sU0FBUyxDQUFDLEVBRWpDLHNCQUFxQixxQkNON0IsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQ3BELHNCQUE2QixtQkFBdUIsT0FDcEQsbUJBQWtCLEVBQzFCLFNBQVMsRUFBa0IsQ0FBQyxFQUFLLENBQzdCLE1BQU8sQ0FBQyxPQUFRLENBQUcsRUFFZixzQkFBcUIscUJDTjdCLE9BQU8sZUFBZSxHQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUNwRCxzQkFBNkIsZ0JBQXVCLG1CQUF1QixPQUMzRSxtQkFBa0IsRUFDbEIsZ0JBQWUsR0FDdkIsU0FBUyxFQUFrQixDQUFDLEVBQUssRUFBUyxFQUFTLENBQy9DLElBQU0sRUFBTyxDQUFDLE9BQVEsRUFBSyxDQUFPLEVBQ2xDLEdBQUksT0FBTyxHQUFTLE9BQVMsU0FDekIsRUFBSyxLQUFLLE9BQVEsRUFBUSxLQUFLLFNBQVMsQ0FBQyxFQUU3QyxHQUFJLE9BQU8sR0FBUyxTQUFXLFNBQzNCLEVBQUssS0FBSyxTQUFVLEVBQVEsT0FBTyxTQUFTLENBQUMsRUFFakQsT0FBTyxFQUVILHNCQUFxQixxQkNkN0IsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQ3BELHNCQUE2QixnQkFBdUIsbUJBQXVCLE9BQ25GLElBQUksUUFDSixPQUFPLGVBQWUsR0FBUyxrQkFBbUIsQ0FBRSxXQUFZLEdBQU0sSUFBSyxRQUFTLEVBQUcsQ0FBRSxPQUFPLEdBQU8sZ0JBQW1CLENBQUMsRUFDM0gsT0FBTyxlQUFlLEdBQVMsZUFBZ0IsQ0FBRSxXQUFZLEdBQU0sSUFBSyxRQUFTLEVBQUcsQ0FBRSxPQUFPLEdBQU8sYUFBZ0IsQ0FBQyxFQUNySCxTQUFTLEVBQWtCLENBQUMsRUFBSyxFQUFTLEVBQU8sRUFBUyxDQUN0RCxJQUFNLEVBQU8sQ0FBQyxPQUFRLEVBQUssQ0FBTyxFQUNsQyxHQUFJLE9BQU8sR0FBUyxPQUFTLFNBQ3pCLEVBQUssS0FBSyxPQUFRLEVBQVEsS0FBSyxTQUFTLENBQUMsRUFHN0MsR0FEQSxFQUFLLEtBQUssUUFBUyxFQUFNLFNBQVMsQ0FBQyxFQUMvQixPQUFPLEdBQVMsU0FBVyxTQUMzQixFQUFLLEtBQUssU0FBVSxFQUFRLE9BQU8sU0FBUyxDQUFDLEVBRWpELE9BQU8sRUFFSCxzQkFBcUIscUJDaEI3QixPQUFPLGVBQWUsR0FBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDcEQsc0JBQTZCLG1CQUF1QixPQUM1RCxJQUFNLE9BQ0UsbUJBQWtCLEVBQzFCLFNBQVMsRUFBa0IsQ0FBQyxFQUFLLEVBQVUsQ0FDdkMsT0FBVyxHQUF1QixxQkFBc0IsQ0FBQyxRQUFTLENBQUcsRUFBRyxDQUFRLEVBRTVFLHNCQUFxQixxQkNQN0IsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQ3BELHNCQUE2QixtQkFBdUIsT0FDNUQsSUFBTSxPQUNFLG1CQUFrQixFQUMxQixTQUFTLEVBQWtCLENBQUMsRUFBSyxFQUFTLENBQ3RDLE9BQVcsR0FBdUIscUJBQXNCLENBQUMsU0FBVSxDQUFHLEVBQUcsQ0FBTyxFQUU1RSxzQkFBcUIscUJDUDdCLE9BQU8sZUFBZSxHQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUNwRCxzQkFBNkIsZ0JBQXVCLG1CQUF1QixPQUMzRSxtQkFBa0IsRUFDbEIsZ0JBQWUsR0FDdkIsU0FBUyxFQUFrQixDQUFDLEVBQUssRUFBTyxFQUFNLENBQzFDLE1BQU8sQ0FDSCxTQUNBLEVBQ0EsRUFBTSxTQUFTLEVBQ2YsRUFBSyxTQUFTLENBQ2xCLEVBRUksc0JBQXFCLHFCQ1o3QixPQUFPLGVBQWUsR0FBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDcEQsc0JBQTZCLG1CQUF1QixPQUNwRCxtQkFBa0IsRUFDMUIsU0FBUyxFQUFrQixDQUFDLEVBQUssRUFBTyxFQUFTLENBQzdDLE1BQU8sQ0FDSCxPQUNBLEVBQ0EsRUFBTSxTQUFTLEVBQ2YsQ0FDSixFQUVJLHNCQUFxQixxQkNYN0IsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQ3BELHNCQUE2QixtQkFBdUIsT0FDcEQsbUJBQWtCLEVBQzFCLFNBQVMsRUFBa0IsQ0FBQyxFQUFLLEVBQU8sRUFBUyxDQUM3QyxNQUFPLENBQ0gsT0FDQSxFQUNBLEVBQU0sU0FBUyxFQUNmLENBQ0osRUFFSSxzQkFBcUIscUJDWDdCLE9BQU8sZUFBZSxHQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUNwRCxzQkFBNkIsbUJBQXVCLE9BQ3BELG1CQUFrQixFQUMxQixTQUFTLEVBQWtCLENBQUMsRUFBSyxFQUFPLEVBQU0sQ0FDMUMsTUFBTyxDQUNILFFBQ0EsRUFDQSxFQUFNLFNBQVMsRUFDZixFQUFLLFNBQVMsQ0FDbEIsRUFFSSxzQkFBcUIscUJDWDdCLE9BQU8sZUFBZSxHQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUNwRCxzQkFBNkIsZ0JBQXVCLG1CQUF1QixPQUMzRSxtQkFBa0IsRUFDbEIsZ0JBQWUsR0FDdkIsU0FBUyxFQUFrQixDQUFDLEVBQU0sQ0FDOUIsTUFBTyxDQUFDLE9BQVEsR0FBRyxDQUFJLEVBRW5CLHNCQUFxQixxQkNQN0IsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQ3BELHNCQUEwQixPQUNsQyxTQUFTLEVBQWtCLENBQUMsRUFBTSxFQUFNLEVBQUssRUFBZSxFQUFTLEVBQVMsQ0FDMUUsSUFBTSxFQUFPLENBQUMsVUFBVyxFQUFNLEVBQUssU0FBUyxDQUFDLEVBQUcsRUFBYSxNQUFNLFFBQVEsQ0FBRyxFQUMvRSxHQUFJLEVBQ0EsRUFBSyxLQUFLLEVBQUUsRUFHWixPQUFLLEtBQUssQ0FBRyxFQUdqQixHQURBLEVBQUssS0FBSyxFQUFjLFNBQVMsRUFBRyxFQUFRLFNBQVMsQ0FBQyxFQUNsRCxHQUFTLEtBQ1QsRUFBSyxLQUFLLE1BQU0sRUFFcEIsR0FBSSxHQUFTLFFBQ1QsRUFBSyxLQUFLLFNBQVMsRUFFdkIsR0FBSSxHQUFTLEtBQ1QsR0FBSSxFQUFRLEtBQUssU0FDYixFQUFLLEtBQUssUUFBUyxFQUFRLEtBQUssU0FBVSxFQUFRLEtBQUssUUFBUSxFQUcvRCxPQUFLLEtBQUssT0FBUSxFQUFRLEtBQUssUUFBUSxFQUcvQyxHQUFJLEVBQ0EsRUFBSyxLQUFLLE9BQVEsR0FBRyxDQUFHLEVBRTVCLE9BQU8sRUFFSCxzQkFBcUIscUJDOUI3QixPQUFPLGVBQWUsR0FBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDcEQsc0JBQTZCLG1CQUF1QixPQUNwRCxtQkFBa0IsRUFDMUIsU0FBUyxFQUFrQixDQUFDLEVBQU8sQ0FDL0IsSUFBTSxFQUFPLENBQUMsTUFBTSxFQUNwQixHQUFJLE1BQU0sUUFBUSxDQUFLLEVBQ25CLEVBQUssS0FBSyxHQUFHLEVBQU0sS0FBSyxDQUFDLEVBR3pCLGFBQVcsS0FBTyxPQUFPLEtBQUssQ0FBSyxFQUMvQixFQUFLLEtBQUssRUFBSyxFQUFNLEVBQUksRUFHakMsT0FBTyxFQUVILHNCQUFxQixxQkNmN0IsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQ3BELGtCQUF5QixzQkFBNkIsbUJBQXVCLE9BQzdFLG1CQUFrQixFQUMxQixTQUFTLEVBQWtCLENBQUMsRUFBTyxDQUMvQixJQUFNLEVBQU8sQ0FBQyxRQUFRLEVBQ3RCLEdBQUksTUFBTSxRQUFRLENBQUssRUFDbkIsRUFBSyxLQUFLLEdBQUcsRUFBTSxLQUFLLENBQUMsRUFHekIsYUFBVyxLQUFPLE9BQU8sS0FBSyxDQUFLLEVBQy9CLEVBQUssS0FBSyxFQUFLLEVBQU0sRUFBSSxFQUdqQyxPQUFPLEVBRUgsc0JBQXFCLEdBQzdCLElBQUksT0FDSixPQUFPLGVBQWUsR0FBUyxpQkFBa0IsQ0FBRSxXQUFZLEdBQU0sSUFBSyxRQUFTLEVBQUcsQ0FBRSxPQUFPLEdBQXVCLHNCQUF5QixDQUFDLG9CQ2pCaEosT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQ3BELHNCQUE2QixnQkFBdUIsbUJBQXVCLE9BQzNFLG1CQUFrQixFQUNsQixnQkFBZSxHQUN2QixTQUFTLEVBQWtCLENBQUMsRUFBSyxDQUM3QixNQUFPLENBQUMsU0FBVSxXQUFZLENBQUcsRUFFN0Isc0JBQXFCLHFCQ1A3QixPQUFPLGVBQWUsR0FBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDcEQsc0JBQTZCLGdCQUF1QixtQkFBdUIsT0FDM0UsbUJBQWtCLEVBQ2xCLGdCQUFlLEdBQ3ZCLFNBQVMsRUFBa0IsQ0FBQyxFQUFLLENBQzdCLE1BQU8sQ0FBQyxTQUFVLE9BQVEsQ0FBRyxFQUV6QixzQkFBcUIscUJDUDdCLE9BQU8sZUFBZSxHQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUNwRCxzQkFBNkIsZ0JBQXVCLG1CQUF1QixPQUMzRSxtQkFBa0IsRUFDbEIsZ0JBQWUsR0FDdkIsU0FBUyxFQUFrQixDQUFDLEVBQUssQ0FDN0IsTUFBTyxDQUFDLFNBQVUsV0FBWSxDQUFHLEVBRTdCLHNCQUFxQixxQkNQN0IsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQ3BELHNCQUE2QixnQkFBdUIsbUJBQXVCLE9BQzNFLG1CQUFrQixFQUNsQixnQkFBZSxHQUN2QixTQUFTLEVBQWtCLENBQUMsRUFBSyxDQUM3QixNQUFPLENBQUMsU0FBVSxXQUFZLENBQUcsRUFFN0Isc0JBQXFCLHFCQ1A3QixPQUFPLGVBQWUsR0FBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDcEQsa0JBQXlCLHNCQUE2QixtQkFBdUIsT0FDN0UsbUJBQWtCLEVBQzFCLFNBQVMsRUFBa0IsQ0FBQyxFQUFLLENBQzdCLE1BQU8sQ0FBQyxVQUFXLENBQUcsRUFFbEIsc0JBQXFCLEdBQzdCLElBQUksT0FDSixPQUFPLGVBQWUsR0FBUyxpQkFBa0IsQ0FBRSxXQUFZLEdBQU0sSUFBSyxRQUFTLEVBQUcsQ0FBRSxPQUFPLEdBQXVCLHNCQUF5QixDQUFDLG9CQ1JoSixPQUFPLGVBQWUsR0FBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDcEQsa0JBQXlCLHNCQUE2QixtQkFBdUIsT0FDN0UsbUJBQWtCLEVBQzFCLFNBQVMsRUFBa0IsQ0FBQyxFQUFLLEVBQWMsRUFBTSxDQUNqRCxJQUFNLEVBQU8sQ0FBQyxVQUFXLEVBQUssRUFBYSxTQUFTLENBQUMsRUFDckQsR0FBSSxFQUNBLEVBQUssS0FBSyxDQUFJLEVBRWxCLE9BQU8sRUFFSCxzQkFBcUIsR0FDN0IsSUFBSSxPQUNKLE9BQU8sZUFBZSxHQUFTLGlCQUFrQixDQUFFLFdBQVksR0FBTSxJQUFLLFFBQVMsRUFBRyxDQUFFLE9BQU8sR0FBdUIsc0JBQXlCLENBQUMsb0JDWmhKLE9BQU8sZUFBZSxHQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUNwRCxrQkFBeUIsc0JBQTZCLG1CQUF1QixPQUNyRixJQUFNLE9BQ0UsbUJBQWtCLEVBQzFCLFNBQVMsRUFBa0IsQ0FBQyxFQUFLLEVBQXVCLEVBQU0sQ0FDMUQsSUFBTSxFQUFPLENBQ1QsWUFDQSxFQUNJLEdBQXVCLGNBQWUsQ0FBcUIsQ0FDbkUsRUFDQSxHQUFJLEVBQ0EsRUFBSyxLQUFLLENBQUksRUFFbEIsT0FBTyxFQUVILHNCQUFxQixHQUM3QixJQUFJLE9BQ0osT0FBTyxlQUFlLEdBQVMsaUJBQWtCLENBQUUsV0FBWSxHQUFNLElBQUssUUFBUyxFQUFHLENBQUUsT0FBTyxHQUF1QixzQkFBeUIsQ0FBQyxvQkNqQmhKLE9BQU8sZUFBZSxHQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUNwRCxzQkFBNkIsbUJBQXVCLE9BQ3BELG1CQUFrQixFQUMxQixTQUFTLEVBQWtCLENBQUMsRUFBSyxDQUM3QixNQUFPLENBQUMsY0FBZSxDQUFHLEVBRXRCLHNCQUFxQixxQkNON0IsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQ3BELGtCQUF5QixzQkFBNkIsbUJBQXVCLE9BQ3JGLElBQU0sT0FDRSxtQkFBa0IsRUFDMUIsU0FBUyxFQUFrQixDQUFDLEVBQUssRUFBUyxDQUN0QyxPQUFXLEdBQXVCLHFCQUFzQixDQUFDLFFBQVMsQ0FBRyxFQUFHLENBQU8sRUFFM0Usc0JBQXFCLEdBQzdCLElBQUksT0FDSixPQUFPLGVBQWUsR0FBUyxpQkFBa0IsQ0FBRSxXQUFZLEdBQU0sSUFBSyxRQUFTLEVBQUcsQ0FBRSxPQUFPLEdBQXVCLHNCQUF5QixDQUFDLG9CQ1RoSixPQUFPLGVBQWUsR0FBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDcEQsc0JBQTZCLG1CQUF1QixPQUM1RCxJQUFNLE9BQ0UsbUJBQWtCLEVBQzFCLFNBQVMsRUFBa0IsQ0FBQyxFQUFLLENBQzdCLE9BQVcsR0FBdUIscUJBQXNCLENBQUMsU0FBUyxFQUFHLENBQUcsRUFFcEUsc0JBQXFCLHFCQ1A3QixPQUFPLGVBQWUsR0FBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDcEQsc0JBQTZCLG1CQUF1QixPQUM1RCxJQUFNLE9BQ0UsbUJBQWtCLEVBQzFCLFNBQVMsRUFBa0IsQ0FBQyxFQUFhLEVBQVEsQ0FDN0MsT0FBVyxHQUF1QixxQkFBc0IsQ0FBQyxVQUFXLENBQVcsRUFBRyxDQUFNLEVBRXBGLHNCQUFxQixxQkNQN0IsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQ3BELHNCQUE2QixtQkFBdUIsT0FDcEQsbUJBQWtCLEVBQzFCLFNBQVMsRUFBa0IsQ0FBQyxFQUFLLEVBQWMsRUFBTyxDQUNsRCxNQUFPLENBQ0gsU0FDQSxFQUNBLEVBQWEsU0FBUyxFQUN0QixDQUNKLEVBRUksc0JBQXFCLHFCQ1g3QixPQUFPLGVBQWUsR0FBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDcEQsc0JBQTZCLGdCQUF1QixtQkFBdUIsT0FDM0UsbUJBQWtCLEVBQ2xCLGdCQUFlLEdBQ3ZCLFNBQVMsRUFBa0IsQ0FBQyxFQUFLLENBQzdCLE1BQU8sQ0FBQyxPQUFRLENBQUcsRUFFZixzQkFBcUIscUJDUDdCLE9BQU8sZUFBZSxHQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUNwRCxzQkFBNkIsZ0JBQW9CLE9BQ2pELGdCQUFlLEdBQ3ZCLFNBQVMsRUFBa0IsQ0FBQyxFQUFTLEVBQVMsQ0FDMUMsTUFBTyxDQUFDLFVBQVcsRUFBUyxDQUFPLEVBRS9CLHNCQUFxQixxQkNON0IsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQ3BELHNCQUE2QixtQkFBdUIsT0FDcEQsbUJBQWtCLEVBQzFCLFNBQVMsRUFBa0IsQ0FBQyxFQUFLLEVBQVEsQ0FDckMsTUFBTyxDQUFDLFNBQVUsRUFBSyxDQUFNLEVBRXpCLHNCQUFxQixxQkNON0IsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQ3BELGtCQUF5QixzQkFBNkIsbUJBQXVCLE9BQzdFLG1CQUFrQixFQUMxQixTQUFTLEVBQWtCLENBQUMsRUFBSyxFQUFRLENBQ3JDLE1BQU8sQ0FBQyxXQUFZLEVBQUssQ0FBTSxFQUUzQixzQkFBcUIsR0FDN0IsSUFBSSxPQUNKLE9BQU8sZUFBZSxHQUFTLGlCQUFrQixDQUFFLFdBQVksR0FBTSxJQUFLLFFBQVMsRUFBRyxDQUFFLE9BQU8sR0FBdUIsc0JBQXlCLENBQUMsb0JDUmhKLE9BQU8sZUFBZSxHQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUNwRCxzQkFBNkIsbUJBQXVCLE9BQ3BELG1CQUFrQixFQUMxQixTQUFTLEVBQWtCLENBQUMsRUFBSyxFQUFLLEVBQWlCLEVBQVMsQ0FDNUQsSUFBTSxFQUFPLENBQUMsVUFBVyxFQUFLLEVBQUksU0FBUyxFQUFHLENBQWUsRUFDN0QsR0FBSSxHQUFTLFFBQ1QsRUFBSyxLQUFLLFNBQVMsRUFFdkIsR0FBSSxHQUFTLE9BQ1QsRUFBSyxLQUFLLFFBQVEsRUFFdEIsR0FBSSxHQUFTLFNBQ1QsRUFBSyxLQUFLLFdBQVksRUFBUSxTQUFTLFNBQVMsQ0FBQyxFQUVyRCxHQUFJLEdBQVMsS0FDVCxFQUFLLEtBQUssT0FBUSxFQUFRLEtBQUssU0FBUyxDQUFDLEVBRTdDLE9BQU8sRUFFSCxzQkFBcUIscUJDbkI3QixPQUFPLGVBQWUsR0FBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDcEQsc0JBQTZCLG1CQUF1QixPQUNwRCxtQkFBa0IsRUFDMUIsU0FBUyxFQUFrQixDQUFDLEVBQUssRUFBTyxDQUNwQyxNQUFPLENBQUMsT0FBUSxFQUFLLEVBQU0sU0FBUyxDQUFDLEVBRWpDLHNCQUFxQixxQkNON0IsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQ3BELHNCQUE2QixtQkFBdUIsT0FDcEQsbUJBQWtCLEVBQzFCLFNBQVMsRUFBa0IsQ0FBQyxFQUFLLENBQzdCLE1BQU8sQ0FBQyxPQUFRLENBQUcsRUFFZixzQkFBcUIscUJDTjdCLE9BQU8sZUFBZSxHQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUNwRCxzQkFBNkIsbUJBQXVCLE9BQ3BELG1CQUFrQixFQUMxQixTQUFTLEVBQWtCLENBQUMsRUFBUSxFQUFhLENBQzdDLE1BQU8sQ0FBQyxZQUFhLEVBQVEsQ0FBVyxFQUVwQyxzQkFBcUIscUJDTjdCLE9BQU8sZUFBZSxHQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUNwRCxzQkFBNkIsbUJBQXVCLE9BQzVELElBQU0sT0FDRSxtQkFBa0IsRUFDMUIsU0FBUyxFQUFrQixDQUFDLEVBQUssRUFBUyxDQUN0QyxPQUFXLEdBQXVCLHFCQUFzQixDQUFDLFFBQVMsQ0FBRyxFQUFHLENBQU8sRUFFM0Usc0JBQXFCLHFCQ1A3QixPQUFPLGVBQWUsR0FBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDcEQsc0JBQTZCLG1CQUF1QixPQUM1RCxJQUFNLE9BQ0UsbUJBQWtCLEVBQzFCLFNBQVMsRUFBa0IsQ0FBQyxFQUFLLEVBQVMsQ0FDdEMsT0FBVyxHQUF1QixxQkFBc0IsQ0FBQyxTQUFVLENBQUcsRUFBRyxDQUFPLEVBRTVFLHNCQUFxQixxQkNQN0IsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQ3BELHNCQUE2QixtQkFBdUIsT0FDNUQsSUFBTSxPQUNFLG1CQUFrQixFQUMxQixTQUFTLEVBQWtCLENBQUMsRUFBSyxFQUFTLENBQ3RDLE9BQVcsR0FBdUIscUJBQXNCLENBQUMsT0FBUSxDQUFHLEVBQUcsQ0FBTyxFQUUxRSxzQkFBcUIscUJDUDdCLE9BQU8sZUFBZSxHQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUNwRCxzQkFBNkIsbUJBQXVCLE9BQ3BELG1CQUFrQixFQUMxQixTQUFTLEVBQWtCLENBQUMsRUFBSyxDQUM3QixNQUFPLENBQUMsUUFBUyxDQUFHLEVBRWhCLHNCQUFxQixxQkNON0IsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQ3BELHNCQUE2QixnQkFBdUIsbUJBQXVCLE9BQ25GLElBQU0sT0FDRSxtQkFBa0IsRUFDbEIsZ0JBQWUsR0FDdkIsU0FBUyxFQUFrQixDQUFDLEVBQU0sQ0FDOUIsT0FBVyxHQUF1QixxQkFBc0IsQ0FBQyxPQUFPLEVBQUcsQ0FBSSxFQUVuRSxzQkFBcUIscUJDUjdCLE9BQU8sZUFBZSxHQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUNwRCxzQkFBNkIsbUJBQXVCLE9BQzVELElBQU0sT0FDRSxtQkFBa0IsRUFDMUIsU0FBUyxFQUFrQixDQUFDLEVBQWEsRUFBTSxDQUMzQyxPQUFXLEdBQXVCLHFCQUFzQixDQUFDLGFBQWMsQ0FBVyxFQUFHLENBQUksRUFFckYsc0JBQXFCLHFCQ1A3QixPQUFPLGVBQWUsR0FBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDcEQsc0JBQTZCLG1CQUF1QixPQUNwRCxtQkFBa0IsRUFDMUIsU0FBUyxFQUFrQixDQUFDLEVBQUssRUFBTyxFQUFTLENBQzdDLElBQU0sRUFBTyxDQUNULE1BQ0EsRUFDQSxPQUFPLElBQVUsU0FBVyxFQUFNLFNBQVMsRUFBSSxDQUNuRCxFQUNBLEdBQUksR0FBUyxLQUFPLE9BQ2hCLEVBQUssS0FBSyxLQUFNLEVBQVEsR0FBRyxTQUFTLENBQUMsRUFFcEMsUUFBSSxHQUFTLEtBQU8sT0FDckIsRUFBSyxLQUFLLEtBQU0sRUFBUSxHQUFHLFNBQVMsQ0FBQyxFQUVwQyxRQUFJLEdBQVMsT0FBUyxPQUN2QixFQUFLLEtBQUssT0FBUSxFQUFRLEtBQUssU0FBUyxDQUFDLEVBRXhDLFFBQUksR0FBUyxPQUFTLE9BQ3ZCLEVBQUssS0FBSyxPQUFRLEVBQVEsS0FBSyxTQUFTLENBQUMsRUFFeEMsUUFBSSxHQUFTLFFBQ2QsRUFBSyxLQUFLLFNBQVMsRUFFdkIsR0FBSSxHQUFTLEdBQ1QsRUFBSyxLQUFLLElBQUksRUFFYixRQUFJLEdBQVMsR0FDZCxFQUFLLEtBQUssSUFBSSxFQUVsQixHQUFJLEdBQVMsSUFDVCxFQUFLLEtBQUssS0FBSyxFQUVuQixPQUFPLEVBRUgsc0JBQXFCLHFCQ25DN0IsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQ3BELHNCQUE2QixtQkFBdUIsT0FDcEQsbUJBQWtCLEVBQzFCLFNBQVMsRUFBa0IsQ0FBQyxFQUFLLEVBQVEsRUFBTyxDQUM1QyxNQUFPLENBQUMsU0FBVSxFQUFLLEVBQU8sU0FBUyxFQUFHLEVBQU0sU0FBUyxDQUFDLEVBRXRELHNCQUFxQixxQkNON0IsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQ3BELHNCQUE2QixtQkFBdUIsT0FDcEQsbUJBQWtCLEVBQzFCLFNBQVMsRUFBa0IsQ0FBQyxFQUFLLEVBQVMsRUFBTyxDQUM3QyxNQUFPLENBQ0gsUUFDQSxFQUNBLEVBQVEsU0FBUyxFQUNqQixDQUNKLEVBRUksc0JBQXFCLHFCQ1g3QixPQUFPLGVBQWUsR0FBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDcEQsa0JBQXlCLHNCQUE2QixtQkFBdUIsT0FDN0UsbUJBQWtCLEVBQzFCLFNBQVMsRUFBa0IsQ0FBQyxFQUFLLEVBQU8sQ0FDcEMsTUFBTyxDQUFDLFFBQVMsRUFBSyxDQUFLLEVBRXZCLHNCQUFxQixHQUM3QixJQUFJLE9BQ0osT0FBTyxlQUFlLEdBQVMsaUJBQWtCLENBQUUsV0FBWSxHQUFNLElBQUssUUFBUyxFQUFHLENBQUUsT0FBTyxHQUF1QixzQkFBeUIsQ0FBQyxvQkNSaEosT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQ3BELHNCQUE2QixtQkFBdUIsT0FDcEQsbUJBQWtCLEVBQzFCLFNBQVMsRUFBa0IsQ0FBQyxFQUFLLEVBQVEsRUFBTyxDQUM1QyxNQUFPLENBQUMsV0FBWSxFQUFLLEVBQU8sU0FBUyxFQUFHLENBQUssRUFFN0Msc0JBQXFCLHFCQ043QixPQUFPLGVBQWUsR0FBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDcEQsc0JBQTZCLGdCQUF1QixtQkFBdUIsT0FDbkYsSUFBTSxPQUNFLG1CQUFrQixFQUNsQixnQkFBZSxHQUN2QixTQUFTLEVBQWtCLENBQUMsRUFBTSxDQUM5QixPQUFXLEdBQXVCLHFCQUFzQixDQUFDLFFBQVEsRUFBRyxDQUFJLEVBRXBFLHNCQUFxQixxQkNSN0IsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQ3BELHNCQUE2QixnQkFBdUIsbUJBQXVCLE9BQ25GLElBQU0sT0FDRSxtQkFBa0IsRUFDbEIsZ0JBQWUsR0FDdkIsU0FBUyxFQUFrQixDQUFDLEVBQU0sRUFBTyxDQUNyQyxJQUFNLEVBQVcsR0FBdUIsb0JBQXFCLENBQUMsWUFBWSxFQUFHLENBQUksRUFDakYsR0FBSSxFQUNBLEVBQUssS0FBSyxRQUFTLEVBQU0sU0FBUyxDQUFDLEVBRXZDLE9BQU8sRUFFSCxzQkFBcUIscUJDWjdCLE9BQU8sZUFBZSxHQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUNwRCxzQkFBNkIsbUJBQXVCLE9BQzVELElBQU0sT0FDRSxtQkFBa0IsRUFDMUIsU0FBUyxFQUFrQixDQUFDLEVBQWEsRUFBTSxDQUMzQyxPQUFXLEdBQXVCLHFCQUFzQixDQUFDLGNBQWUsQ0FBVyxFQUFHLENBQUksRUFFdEYsc0JBQXFCLHFCQ1A3QixPQUFPLGVBQWUsR0FBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDcEQsa0JBQXlCLHNCQUE2QixtQkFBdUIsT0FDN0UsbUJBQWtCLEVBQzFCLFNBQVMsRUFBa0IsQ0FBQyxFQUFLLEVBQVEsQ0FDckMsTUFBTyxDQUFDLFlBQWEsRUFBSyxDQUFNLEVBRTVCLHNCQUFxQixHQUM3QixJQUFJLE9BQ0osT0FBTyxlQUFlLEdBQVMsaUJBQWtCLENBQUUsV0FBWSxHQUFNLElBQUssUUFBUyxFQUFHLENBQUUsT0FBTyxHQUF1QixzQkFBeUIsQ0FBQyxvQkNSaEosT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQ3BELHNCQUE2QixtQkFBdUIsT0FDcEQsbUJBQWtCLEVBQzFCLFNBQVMsRUFBa0IsQ0FBQyxFQUFLLENBQzdCLE1BQU8sQ0FBQyxXQUFZLENBQUcsRUFFbkIsc0JBQXFCLHFCQ043QixPQUFPLGVBQWUsR0FBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDcEQsa0JBQXlCLHNCQUE2QixtQkFBdUIsT0FDN0UsbUJBQWtCLEVBQzFCLFNBQVMsRUFBa0IsQ0FBQyxFQUFLLEVBQVMsQ0FDdEMsTUFBTyxDQUFDLGFBQWMsRUFBSyxHQUFHLENBQU8sRUFFakMsc0JBQXFCLEdBQzdCLElBQUksT0FDSixPQUFPLGVBQWUsR0FBUyxpQkFBa0IsQ0FBRSxXQUFZLEdBQU0sSUFBSyxRQUFTLEVBQUcsQ0FBRSxPQUFPLEdBQXVCLDJCQUE4QixDQUFDLG9CQ1JySixPQUFPLGVBQWUsR0FBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDcEQsa0JBQXlCLHNCQUE2QixtQkFBdUIsT0FDN0UsbUJBQWtCLEVBQzFCLFNBQVMsRUFBa0IsQ0FBQyxFQUFRLEVBQWEsRUFBUSxDQUNyRCxNQUFPLENBQUMsUUFBUyxFQUFRLEVBQWEsQ0FBTSxFQUV4QyxzQkFBcUIsR0FDN0IsSUFBSSxPQUNKLE9BQU8sZUFBZSxHQUFTLGlCQUFrQixDQUFFLFdBQVksR0FBTSxJQUFLLFFBQVMsRUFBRyxDQUFFLE9BQU8sR0FBdUIsc0JBQXlCLENBQUMsb0JDUmhKLE9BQU8sZUFBZSxHQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUNwRCxzQkFBNkIsZ0JBQXVCLG1CQUF1QixPQUNuRixJQUFNLE9BQ0UsbUJBQWtCLEVBQ2xCLGdCQUFlLEdBQ3ZCLFNBQVMsRUFBa0IsQ0FBQyxFQUFLLEVBQVMsQ0FDdEMsT0FBVyxHQUF1QixrQkFBbUIsQ0FBQyxVQUFXLENBQUcsRUFBRyxDQUFPLEVBRTFFLHNCQUFxQixxQkNSN0IsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQ3BELHNCQUE2QixtQkFBdUIsT0FDNUQsSUFBTSxPQUNFLG1CQUFrQixFQUMxQixTQUFTLEVBQWtCLENBQUMsRUFBSyxFQUFTLENBQ3RDLE9BQVcsR0FBdUIsa0JBQW1CLENBQUMsT0FBUSxDQUFHLEVBQUcsQ0FBTyxFQUV2RSxzQkFBcUIscUJDUDdCLE9BQU8sZUFBZSxHQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUNwRCxzQkFBNkIsbUJBQXVCLE9BQzVELElBQU0sUUFDRSxtQkFBa0IsRUFDMUIsU0FBUyxFQUFrQixDQUFDLEVBQVEsRUFBYSxFQUFTLENBQ3RELElBQU0sRUFBVyxHQUFPLG1CQUFvQixFQUFRLENBQU8sRUFFM0QsT0FEQSxFQUFLLEtBQUssUUFBUyxDQUFXLEVBQ3ZCLEVBRUgsc0JBQXFCLHFCQ1Q3QixPQUFPLGVBQWUsR0FBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDcEQsc0JBQTZCLG1CQUF1QixPQUNwRCxtQkFBa0IsRUFDMUIsU0FBUyxFQUFrQixDQUFDLEVBQUssRUFBTyxDQUNwQyxJQUFNLEVBQU8sQ0FBQyxPQUFRLENBQUcsRUFDekIsR0FBSSxPQUFPLElBQVUsU0FDakIsRUFBSyxLQUFLLEVBQU0sU0FBUyxDQUFDLEVBRTlCLE9BQU8sRUFFSCxzQkFBcUIscUJDVjdCLE9BQU8sZUFBZSxHQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUNwRCxzQkFBNkIsbUJBQTBCLGdCQUFvQixPQUMzRSxnQkFBZSxHQUNmLG1CQUFrQixFQUMxQixTQUFTLEVBQWtCLENBQUMsRUFBUyxFQUFTLENBQzFDLE1BQU8sQ0FBQyxXQUFZLEVBQVMsQ0FBTyxFQUVoQyxzQkFBcUIscUJDUDdCLE9BQU8sZUFBZSxHQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUNwRCxzQkFBNkIsbUJBQXVCLE9BQ3BELG1CQUFrQixFQUMxQixTQUFTLEVBQWtCLENBQUMsRUFBSyxDQUM3QixNQUFPLENBQUMsY0FBZSxDQUFHLEVBRXRCLHNCQUFxQixxQkNON0IsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQ3BELHNCQUE2QixtQkFBdUIsT0FDNUQsSUFBTSxRQUNGLFFBQ0osT0FBTyxlQUFlLEdBQVMsa0JBQW1CLENBQUUsV0FBWSxHQUFNLElBQUssUUFBUyxFQUFHLENBQUUsT0FBTyxHQUFjLGdCQUFtQixDQUFDLEVBQ2xJLFNBQVMsRUFBa0IsQ0FBQyxFQUFLLEVBQU8sQ0FDcEMsTUFBTyxDQUNILEdBQU8sR0FBYyxtQkFBb0IsQ0FBRyxFQUM1QyxFQUFNLFNBQVMsQ0FDbkIsRUFFSSxzQkFBcUIscUJDWDdCLE9BQU8sZUFBZSxHQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUNwRCxzQkFBNkIsbUJBQXVCLE9BQzVELElBQU0sT0FDRSxtQkFBa0IsRUFDMUIsU0FBUyxFQUFrQixDQUFDLEVBQUssRUFBUyxDQUN0QyxPQUFXLEdBQXVCLHFCQUFzQixDQUFDLE9BQVEsQ0FBRyxFQUFHLENBQU8sRUFFMUUsc0JBQXFCLHFCQ1A3QixPQUFPLGVBQWUsR0FBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDcEQsa0JBQXlCLHNCQUE2QixnQkFBdUIsbUJBQXVCLE9BQzVHLElBQU0sT0FDRSxtQkFBa0IsRUFDbEIsZ0JBQWUsR0FDdkIsU0FBUyxFQUFrQixDQUFDLEVBQUssRUFBUSxFQUFTLENBQzlDLE9BQVcsR0FBdUIsa0JBQW1CLENBQ2pELFFBQ0EsQ0FDSixFQUFHLEVBQVEsQ0FBTyxFQUVkLHNCQUFxQixHQUM3QixTQUFTLEVBQWMsRUFBRSxFQUFRLEdBQVUsQ0FDdkMsTUFBTyxDQUNILE9BQVEsT0FBTyxDQUFNLEVBQ3JCLFNBQ0osRUFFSSxrQkFBaUIscUJDbEJ6QixPQUFPLGVBQWUsR0FBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDcEQsc0JBQTZCLGdCQUF1QixtQkFBdUIsT0FDM0UsbUJBQWtCLEVBQ2xCLGdCQUFlLEdBQ3ZCLFNBQVMsRUFBa0IsQ0FBQyxFQUFLLENBQzdCLE1BQU8sQ0FBQyxTQUFVLENBQUcsRUFFakIsc0JBQXFCLHFCQ1A3QixPQUFPLGVBQWUsR0FBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDcEQsc0JBQTZCLGdCQUF1QixtQkFBdUIsT0FDbkYsSUFBTSxPQUNFLG1CQUFrQixFQUNsQixnQkFBZSxHQUN2QixTQUFTLEVBQWtCLENBQUMsRUFBTSxDQUM5QixPQUFXLEdBQXVCLHFCQUFzQixDQUFDLFFBQVEsRUFBRyxDQUFJLEVBRXBFLHNCQUFxQixxQkNSN0IsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQ3BELHNCQUE2QixtQkFBdUIsT0FDNUQsSUFBTSxPQUNFLG1CQUFrQixFQUMxQixTQUFTLEVBQWtCLENBQUMsRUFBYSxFQUFNLENBQzNDLE9BQVcsR0FBdUIscUJBQXNCLENBQUMsY0FBZSxDQUFXLEVBQUcsQ0FBSSxFQUV0RixzQkFBcUIscUJDUDdCLE9BQU8sZUFBZSxHQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUNwRCxzQkFBNkIsbUJBQXVCLE9BQzVELElBQU0sT0FDRSxtQkFBa0IsRUFDMUIsU0FBUyxFQUFrQixDQUFDLEVBQUssQ0FDN0IsT0FBVyxHQUF1QixxQkFBc0IsQ0FBQyxPQUFPLEVBQUcsQ0FBRyxFQUVsRSxzQkFBcUIscUJDUDdCLE9BQU8sZUFBZSxHQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUNwRCxzQkFBNkIsZ0JBQXVCLG1CQUF1QixPQUMzRSxtQkFBa0IsRUFDbEIsZ0JBQWUsR0FDdkIsU0FBUyxFQUFrQixDQUFDLEVBQUssQ0FDN0IsTUFBTyxDQUFDLE1BQU8sQ0FBRyxFQUVkLHNCQUFxQixxQkNQN0IsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQ3BELHNCQUE2QixnQkFBdUIsbUJBQXVCLE9BQzNFLG1CQUFrQixFQUNsQixnQkFBZSxHQUN2QixTQUFTLEVBQWtCLENBQUMsRUFBSyxDQUM3QixNQUFPLENBQUMsT0FBUSxDQUFHLEVBRWYsc0JBQXFCLHFCQ1A3QixPQUFPLGVBQWUsR0FBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDcEQsc0JBQTZCLG1CQUF1QixPQUM1RCxJQUFNLE9BQ0UsbUJBQWtCLEVBQzFCLFNBQVMsRUFBa0IsQ0FBQyxFQUFLLENBQzdCLE9BQVcsR0FBdUIscUJBQXNCLENBQUMsUUFBUSxFQUFHLENBQUcsRUFFbkUsc0JBQXFCLHFCQ1A3QixPQUFPLGVBQWUsR0FBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDcEQsc0JBQTZCLG1CQUF1QixPQUM1RCxJQUFNLE9BQ0UsbUJBQWtCLEVBQzFCLFNBQVMsRUFBa0IsQ0FBQyxFQUFLLENBQzdCLE9BQVcsR0FBdUIscUJBQXNCLENBQUMsT0FBTyxFQUFHLENBQUcsRUFFbEUsc0JBQXFCLHFCQ1A3QixPQUFPLGVBQWUsR0FBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDcEQsc0JBQTZCLG1CQUF1QixPQUM1RCxJQUFNLE9BQ0UsbUJBQWtCLEVBQzFCLFNBQVMsRUFBa0IsQ0FBQyxFQUFLLEVBQU8sRUFBSSxDQUN4QyxPQUFXLEdBQXVCLHFCQUFzQixDQUFDLE9BQVEsRUFBSyxDQUFLLEVBQUcsQ0FBRSxFQUU1RSxzQkFBcUIscUJDUDdCLE9BQU8sZUFBZSxHQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUNwRCxzQkFBNkIsbUJBQXVCLE9BQ3BELG1CQUFrQixFQUMxQixTQUFTLEVBQWtCLENBQUMsRUFBSyxFQUFJLEVBQVMsRUFBUyxDQUNuRCxJQUFNLEVBQU8sQ0FBQyxPQUFRLENBQUcsRUFDekIsR0FBSSxHQUFTLFdBQ1QsRUFBSyxLQUFLLFlBQVksRUFFMUIsR0FBSSxHQUFTLEtBQU0sQ0FDZixHQUFJLEVBQVEsS0FBSyxTQUNiLEVBQUssS0FBSyxFQUFRLEtBQUssUUFBUSxFQUVuQyxHQUFJLEVBQVEsS0FBSyxpQkFDYixFQUFLLEtBQUssRUFBUSxLQUFLLGdCQUFnQixFQUczQyxHQURBLEVBQUssS0FBSyxFQUFRLEtBQUssVUFBVSxTQUFTLENBQUMsRUFDdkMsRUFBUSxLQUFLLE1BQ2IsRUFBSyxLQUFLLFFBQVMsRUFBUSxLQUFLLE1BQU0sU0FBUyxDQUFDLEVBR3hELEVBQUssS0FBSyxDQUFFLEVBQ1osUUFBWSxFQUFLLEtBQVUsT0FBTyxRQUFRLENBQU8sRUFDN0MsRUFBSyxLQUFLLEVBQUssQ0FBSyxFQUV4QixPQUFPLEVBRUgsc0JBQXFCLHFCQzFCN0IsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQ3BELGtCQUF5QixzQkFBNkIsbUJBQXVCLE9BQ3JGLElBQU0sT0FDRSxtQkFBa0IsRUFDMUIsU0FBUyxFQUFrQixDQUFDLEVBQUssRUFBTyxFQUFVLEVBQWEsRUFBTyxFQUFTLENBQzNFLElBQU0sRUFBTyxDQUFDLGFBQWMsRUFBSyxFQUFPLEVBQVUsRUFBWSxTQUFTLEVBQUcsQ0FBSyxFQUMvRSxHQUFJLEdBQVMsTUFDVCxFQUFLLEtBQUssUUFBUyxFQUFRLE1BQU0sU0FBUyxDQUFDLEVBRS9DLE9BQU8sRUFFSCxzQkFBcUIsR0FDN0IsU0FBUyxFQUFjLENBQUMsRUFBTyxDQUMzQixNQUFPLENBQ0gsT0FBUSxFQUFNLEdBQ2QsU0FBYyxHQUF1QixpQ0FBa0MsRUFBTSxFQUFFLENBQ25GLEVBRUksa0JBQWlCLHFCQ2xCekIsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQ3BELGtCQUF5QixzQkFBNkIsbUJBQXVCLE9BQ3JGLElBQU0sUUFDRixRQUNKLE9BQU8sZUFBZSxHQUFTLGtCQUFtQixDQUFFLFdBQVksR0FBTSxJQUFLLFFBQVMsRUFBRyxDQUFFLE9BQU8sR0FBYSxnQkFBbUIsQ0FBQyxFQUNqSSxTQUFTLEVBQWtCLElBQUksRUFBTSxDQUNqQyxNQUFPLENBQ0gsR0FBTyxHQUFhLG1CQUFvQixHQUFHLENBQUksRUFDL0MsUUFDSixFQUVJLHNCQUFxQixHQUM3QixTQUFTLEVBQWMsQ0FBQyxFQUFPLENBQzNCLE1BQU8sQ0FDSCxPQUFRLEVBQU0sR0FDZCxTQUFVLEVBQU0sRUFDcEIsRUFFSSxrQkFBaUIscUJDbEJ6QixPQUFPLGVBQWUsR0FBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDcEQsa0JBQXlCLHNCQUE2QixtQkFBdUIsT0FDckYsSUFBTSxPQUNFLG1CQUFrQixFQUMxQixTQUFTLEVBQWtCLENBQUMsRUFBSyxFQUFPLEVBQVUsRUFBYSxFQUFJLEVBQVMsQ0FDeEUsSUFBTSxFQUFXLEdBQXVCLHFCQUFzQixDQUFDLFNBQVUsRUFBSyxFQUFPLEVBQVUsRUFBWSxTQUFTLENBQUMsRUFBRyxDQUFFLEVBQzFILEdBQUksR0FBUyxLQUNULEVBQUssS0FBSyxPQUFRLEVBQVEsS0FBSyxTQUFTLENBQUMsRUFFN0MsR0FBSSxHQUFTLEtBQ1QsRUFBSyxLQUFLLFFBQVMsT0FBTyxFQUFRLE9BQVMsU0FBVyxFQUFRLEtBQU8sRUFBUSxLQUFLLFFBQVEsR0FBRyxTQUFTLENBQUMsRUFFM0csR0FBSSxHQUFTLFdBQ1QsRUFBSyxLQUFLLGFBQWMsRUFBUSxXQUFXLFNBQVMsQ0FBQyxFQUV6RCxHQUFJLEdBQVMsTUFDVCxFQUFLLEtBQUssT0FBTyxFQUVyQixPQUFPLEVBRUgsc0JBQXFCLEdBQzdCLElBQUksT0FDSixPQUFPLGVBQWUsR0FBUyxpQkFBa0IsQ0FBRSxXQUFZLEdBQU0sSUFBSyxRQUFTLEVBQUcsQ0FBRSxPQUFPLEdBQXVCLGlDQUFvQyxDQUFDLG9CQ3RCM0osT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQ3BELHNCQUE2QixtQkFBdUIsT0FDNUQsSUFBTSxRQUNGLFFBQ0osT0FBTyxlQUFlLEdBQVMsa0JBQW1CLENBQUUsV0FBWSxHQUFNLElBQUssUUFBUyxFQUFHLENBQUUsT0FBTyxHQUFTLGdCQUFtQixDQUFDLEVBQzdILFNBQVMsRUFBa0IsSUFBSSxFQUFNLENBQ2pDLE1BQU8sQ0FDSCxHQUFPLEdBQVMsbUJBQW9CLEdBQUcsQ0FBSSxFQUMzQyxRQUNKLEVBRUksc0JBQXFCLHFCQ1g3QixPQUFPLGVBQWUsR0FBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDcEQsc0JBQTZCLG1CQUF1QixPQUM1RCxJQUFNLE9BQ0UsbUJBQWtCLEVBQzFCLFNBQVMsRUFBa0IsQ0FBQyxFQUFLLEVBQUksQ0FDakMsT0FBVyxHQUF1QixxQkFBc0IsQ0FBQyxPQUFRLENBQUcsRUFBRyxDQUFFLEVBRXJFLHNCQUFxQixxQkNQN0IsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQ3BELHNCQUE2QixtQkFBdUIsT0FDcEQsbUJBQWtCLEVBQzFCLFNBQVMsRUFBa0IsQ0FBQyxFQUFLLEVBQU8sRUFBSSxFQUFTLENBQ2pELElBQU0sRUFBTyxDQUFDLFNBQVUsU0FBVSxFQUFLLEVBQU8sQ0FBRSxFQUNoRCxHQUFJLEdBQVMsU0FDVCxFQUFLLEtBQUssVUFBVSxFQUV4QixPQUFPLEVBRUgsc0JBQXFCLHFCQ1Y3QixPQUFPLGVBQWUsR0FBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDcEQsa0JBQXlCLHNCQUE2QixtQkFBdUIsT0FDN0UsbUJBQWtCLEVBQzFCLFNBQVMsRUFBa0IsQ0FBQyxFQUFLLEVBQU8sRUFBVSxDQUM5QyxNQUFPLENBQUMsU0FBVSxpQkFBa0IsRUFBSyxFQUFPLENBQVEsRUFFcEQsc0JBQXFCLEdBQzdCLElBQUksT0FDSixPQUFPLGVBQWUsR0FBUyxpQkFBa0IsQ0FBRSxXQUFZLEdBQU0sSUFBSyxRQUFTLEVBQUcsQ0FBRSxPQUFPLEdBQXVCLHNCQUF5QixDQUFDLG9CQ1JoSixPQUFPLGVBQWUsR0FBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDcEQsc0JBQTZCLG1CQUF1QixPQUNwRCxtQkFBa0IsRUFDMUIsU0FBUyxFQUFrQixDQUFDLEVBQUssRUFBTyxFQUFVLENBQzlDLE1BQU8sQ0FBQyxTQUFVLGNBQWUsRUFBSyxFQUFPLENBQVEsRUFFakQsc0JBQXFCLHFCQ043QixPQUFPLGVBQWUsR0FBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDcEQsa0JBQXlCLHNCQUE2QixtQkFBdUIsT0FDN0UsbUJBQWtCLEVBQzFCLFNBQVMsRUFBa0IsQ0FBQyxFQUFLLEVBQU8sQ0FDcEMsTUFBTyxDQUFDLFNBQVUsVUFBVyxFQUFLLENBQUssRUFFbkMsc0JBQXFCLEdBQzdCLElBQUksT0FDSixPQUFPLGVBQWUsR0FBUyxpQkFBa0IsQ0FBRSxXQUFZLEdBQU0sSUFBSyxRQUFTLEVBQUcsQ0FBRSxPQUFPLEdBQXVCLHNCQUF5QixDQUFDLG9CQ1JoSixPQUFPLGVBQWUsR0FBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDcEQsc0JBQTZCLG1CQUF1QixPQUNwRCxtQkFBa0IsRUFDMUIsU0FBUyxFQUFrQixDQUFDLEVBQUssRUFBTyxFQUFJLENBQ3hDLE1BQU8sQ0FBQyxTQUFVLFFBQVMsRUFBSyxFQUFPLENBQUUsRUFFckMsc0JBQXFCLHFCQ043QixPQUFPLGVBQWUsR0FBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDcEQsa0JBQXlCLHNCQUE2QixnQkFBdUIsbUJBQXVCLE9BQ3BHLG1CQUFrQixFQUNsQixnQkFBZSxHQUN2QixTQUFTLEVBQWtCLENBQUMsRUFBSyxFQUFPLENBQ3BDLE1BQU8sQ0FBQyxRQUFTLFlBQWEsRUFBSyxDQUFLLEVBRXBDLHNCQUFxQixHQUM3QixTQUFTLEVBQWMsQ0FBQyxFQUFVLENBQzlCLE9BQU8sRUFBUyxJQUFJLE1BQWEsQ0FDN0IsS0FBTSxFQUFTLEdBQ2YsUUFBUyxFQUFTLEdBQ2xCLEtBQU0sRUFBUyxHQUNmLFNBQVUsRUFBUyxFQUN2QixFQUFFLEVBRUUsa0JBQWlCLHFCQ2hCekIsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQ3BELGtCQUF5QixzQkFBNkIsZ0JBQXVCLG1CQUF1QixPQUNwRyxtQkFBa0IsRUFDbEIsZ0JBQWUsR0FDdkIsU0FBUyxFQUFrQixDQUFDLEVBQUssQ0FDN0IsTUFBTyxDQUFDLFFBQVMsU0FBVSxDQUFHLEVBRTFCLHNCQUFxQixHQUM3QixTQUFTLEVBQWMsQ0FBQyxFQUFVLENBQzlCLE9BQU8sRUFBUyxJQUFJLE1BQVUsQ0FDMUIsS0FBTSxFQUFNLEdBQ1osVUFBVyxFQUFNLEdBQ2pCLFFBQVMsRUFBTSxHQUNmLGdCQUFpQixFQUFNLEVBQzNCLEVBQUUsRUFFRSxrQkFBaUIscUJDaEJ6QixPQUFPLGVBQWUsR0FBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDcEQsa0JBQXlCLHNCQUE2QixnQkFBdUIsbUJBQXVCLE9BQzVHLElBQU0sT0FDRSxtQkFBa0IsRUFDbEIsZ0JBQWUsR0FDdkIsU0FBUyxFQUFrQixDQUFDLEVBQUssQ0FDN0IsTUFBTyxDQUFDLFFBQVMsU0FBVSxDQUFHLEVBRTFCLHNCQUFxQixHQUM3QixTQUFTLEVBQWMsQ0FBQyxFQUFVLENBQzlCLElBQU0sRUFBYyxDQUFDLEVBQ3JCLFFBQVMsRUFBSSxFQUFHLEVBQUksRUFBUyxPQUFRLEdBQUssRUFDdEMsT0FBUSxFQUFTLFFBQ1IsU0FDRCxFQUFZLE9BQVMsRUFBUyxFQUFJLEdBQ2xDLFVBQ0Msa0JBQ0QsRUFBWSxjQUFnQixFQUFTLEVBQUksR0FDekMsVUFDQyxtQkFDRCxFQUFZLGVBQWlCLEVBQVMsRUFBSSxHQUMxQyxVQUNDLFNBQ0QsRUFBWSxPQUFTLEVBQVMsRUFBSSxHQUNsQyxVQUNDLG9CQUNELEVBQVksZ0JBQWtCLEVBQVMsRUFBSSxHQUMzQyxVQUNDLGNBQ0QsRUFBWSxXQUFhLEVBQVMsRUFBSSxHQUFLLENBQ3ZDLEdBQUksRUFBUyxFQUFJLEdBQUcsR0FDcEIsUUFBYSxHQUF1QixxQkFBc0IsRUFBUyxFQUFJLEdBQUcsRUFBRSxDQUNoRixFQUFJLEtBQ0osVUFDQyxhQUNELEVBQVksVUFBWSxFQUFTLEVBQUksR0FBSyxDQUN0QyxHQUFJLEVBQVMsRUFBSSxHQUFHLEdBQ3BCLFFBQWEsR0FBdUIscUJBQXNCLEVBQVMsRUFBSSxHQUFHLEVBQUUsQ0FDaEYsRUFBSSxLQUNKLE1BR1osT0FBTyxFQUVILGtCQUFpQixxQkM1Q3pCLE9BQU8sZUFBZSxHQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUNwRCxzQkFBNkIsZ0JBQXVCLG1CQUF1QixPQUMzRSxtQkFBa0IsRUFDbEIsZ0JBQWUsR0FDdkIsU0FBUyxFQUFrQixDQUFDLEVBQUssQ0FDN0IsTUFBTyxDQUFDLE9BQVEsQ0FBRyxFQUVmLHNCQUFxQixxQkNQN0IsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQ3BELGtCQUF5QixzQkFBNkIsZ0JBQXVCLG1CQUF1QixPQUNwRyxtQkFBa0IsRUFDbEIsZ0JBQWUsR0FDdkIsU0FBUyxFQUFrQixDQUFDLEVBQUssRUFBTyxFQUFPLEVBQUssRUFBTyxFQUFTLENBQ2hFLElBQU0sRUFBTyxDQUFDLFdBQVksRUFBSyxDQUFLLEVBQ3BDLEdBQUksR0FBUyxLQUNULEVBQUssS0FBSyxPQUFRLEVBQVEsS0FBSyxTQUFTLENBQUMsRUFHN0MsR0FEQSxFQUFLLEtBQUssRUFBTyxFQUFLLEVBQU0sU0FBUyxDQUFDLEVBQ2xDLEdBQVMsU0FDVCxFQUFLLEtBQUssRUFBUSxRQUFRLEVBRTlCLE9BQU8sRUFFSCxzQkFBcUIsR0FDN0IsU0FBUyxFQUFjLENBQUMsRUFBTyxDQUMzQixPQUFPLEVBQU0sSUFBSSxFQUFFLEVBQUksRUFBTyxFQUErQixNQUF3QixDQUNqRixLQUNBLFFBQ0EsZ0NBQ0EsbUJBQ0osRUFBRSxFQUVFLGtCQUFpQixxQkN4QnpCLE9BQU8sZUFBZSxHQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUNwRCxrQkFBeUIsc0JBQTZCLGdCQUF1QixtQkFBdUIsT0FDcEcsbUJBQWtCLEVBQ2xCLGdCQUFlLEdBQ3ZCLFNBQVMsRUFBa0IsQ0FBQyxFQUFLLEVBQU8sQ0FDcEMsTUFBTyxDQUFDLFdBQVksRUFBSyxDQUFLLEVBRTFCLHNCQUFxQixHQUM3QixTQUFTLEVBQWMsQ0FBQyxFQUFPLENBQzNCLE1BQU8sQ0FDSCxRQUFTLEVBQU0sR0FDZixRQUFTLEVBQU0sR0FDZixPQUFRLEVBQU0sR0FDZCxVQUFXLEVBQU0sS0FBTyxLQUFPLEtBQU8sRUFBTSxHQUFHLElBQUksRUFBRSxFQUFNLE1BQXdCLENBQy9FLE9BQ0Esa0JBQW1CLE9BQU8sQ0FBaUIsQ0FDL0MsRUFBRSxDQUNOLEVBRUksa0JBQWlCLHFCQ25CekIsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQ3BELGtCQUF5QixzQkFBNkIsZ0JBQXVCLG1CQUF1QixPQUNwRyxtQkFBa0IsRUFDbEIsZ0JBQWUsR0FDdkIsU0FBUyxFQUFrQixDQUFDLEVBQUssRUFBTyxFQUFLLEVBQVMsQ0FDbEQsSUFBTSxFQUFPLENBQUMsU0FBVSxFQUFLLEVBQU8sQ0FBRyxFQUN2QyxHQUFJLEdBQVMsTUFDVCxFQUFLLEtBQUssUUFBUyxFQUFRLE1BQU0sU0FBUyxDQUFDLEVBRS9DLE9BQU8sRUFFSCxzQkFBcUIsR0FDN0IsSUFBSSxPQUNKLE9BQU8sZUFBZSxHQUFTLGlCQUFrQixDQUFFLFdBQVksR0FBTSxJQUFLLFFBQVMsRUFBRyxDQUFFLE9BQU8sR0FBdUIsNkJBQWdDLENBQUMsb0JDYnZKLE9BQU8sZUFBZSxHQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUNwRCxrQkFBeUIsc0JBQTZCLGdCQUF1QixtQkFBdUIsT0FDNUcsSUFBTSxHQUFrQixDQUFDLElBQVksQ0FDakMsT0FBTyxNQUFNLFFBQVEsQ0FBTyxFQUFJLEVBQVEsR0FBRyxJQUFNLEVBQVEsS0FFckQsbUJBQWtCLEdBQ2xCLGdCQUFlLEdBQ3ZCLFNBQVMsRUFBa0IsQ0FBQyxFQUFTLEVBQVMsQ0FDMUMsSUFBTSxFQUFPLENBQUMsT0FBTyxFQUNyQixHQUFJLEdBQVMsTUFDVCxFQUFLLEtBQUssUUFBUyxFQUFRLE1BQU0sU0FBUyxDQUFDLEVBRS9DLEdBQUksT0FBTyxHQUFTLFFBQVUsU0FDMUIsRUFBSyxLQUFLLFFBQVMsRUFBUSxNQUFNLFNBQVMsQ0FBQyxFQUUvQyxFQUFLLEtBQUssU0FBUyxFQUNuQixJQUFNLEVBQWUsTUFBTSxRQUFRLENBQU8sRUFBSSxFQUFVLENBQUMsQ0FBTyxFQUFHLEVBQWEsRUFBSyxPQUNyRixRQUFTLEVBQUksRUFBRyxFQUFJLEVBQWEsT0FBUSxJQUFLLENBQzFDLElBQU0sRUFBUyxFQUFhLEdBQzVCLEVBQUssRUFBYSxHQUFLLEVBQU8sSUFDOUIsRUFBSyxFQUFhLEVBQWEsT0FBUyxHQUFLLEVBQU8sR0FFeEQsT0FBTyxFQUVILHNCQUFxQixHQUM3QixJQUFJLE9BQ0osT0FBTyxlQUFlLEdBQVMsaUJBQWtCLENBQUUsV0FBWSxHQUFNLElBQUssUUFBUyxFQUFHLENBQUUsT0FBTyxHQUF1Qiw4QkFBaUMsQ0FBQyxvQkMxQnhKLE9BQU8sZUFBZSxHQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUNwRCxrQkFBeUIsc0JBQTZCLGdCQUF1QixtQkFBdUIsT0FDNUcsSUFBTSxHQUFrQixDQUFDLEVBQVEsRUFBVyxJQUFZLENBQ3BELE9BQU8sTUFBTSxRQUFRLENBQU8sRUFBSSxFQUFRLEdBQUcsSUFBTSxFQUFRLEtBRXJELG1CQUFrQixHQUNsQixnQkFBZSxHQUN2QixTQUFTLEVBQWtCLENBQUMsRUFBTyxFQUFVLEVBQVMsRUFBUyxDQUMzRCxJQUFNLEVBQU8sQ0FBQyxhQUFjLFFBQVMsRUFBTyxDQUFRLEVBQ3BELEdBQUksR0FBUyxNQUNULEVBQUssS0FBSyxRQUFTLEVBQVEsTUFBTSxTQUFTLENBQUMsRUFFL0MsR0FBSSxPQUFPLEdBQVMsUUFBVSxTQUMxQixFQUFLLEtBQUssUUFBUyxFQUFRLE1BQU0sU0FBUyxDQUFDLEVBRS9DLEdBQUksR0FBUyxNQUNULEVBQUssS0FBSyxPQUFPLEVBRXJCLEVBQUssS0FBSyxTQUFTLEVBQ25CLElBQU0sRUFBZSxNQUFNLFFBQVEsQ0FBTyxFQUFJLEVBQVUsQ0FBQyxDQUFPLEVBQUcsRUFBYSxFQUFLLE9BQ3JGLFFBQVMsRUFBSSxFQUFHLEVBQUksRUFBYSxPQUFRLElBQUssQ0FDMUMsSUFBTSxFQUFTLEVBQWEsR0FDNUIsRUFBSyxFQUFhLEdBQUssRUFBTyxJQUM5QixFQUFLLEVBQWEsRUFBYSxPQUFTLEdBQUssRUFBTyxHQUV4RCxPQUFPLEVBRUgsc0JBQXFCLEdBQzdCLElBQUksT0FDSixPQUFPLGVBQWUsR0FBUyxpQkFBa0IsQ0FBRSxXQUFZLEdBQU0sSUFBSyxRQUFTLEVBQUcsQ0FBRSxPQUFPLEdBQXVCLDhCQUFpQyxDQUFDLG9CQzdCeEosT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQ3BELGtCQUF5QixzQkFBNkIsZ0JBQXVCLG1CQUF1QixPQUNwRyxtQkFBa0IsRUFDbEIsZ0JBQWUsR0FDdkIsU0FBUyxFQUFrQixDQUFDLEVBQUssRUFBTyxFQUFLLEVBQVMsQ0FDbEQsSUFBTSxFQUFPLENBQUMsWUFBYSxFQUFLLEVBQU8sQ0FBRyxFQUMxQyxHQUFJLEdBQVMsTUFDVCxFQUFLLEtBQUssUUFBUyxFQUFRLE1BQU0sU0FBUyxDQUFDLEVBRS9DLE9BQU8sRUFFSCxzQkFBcUIsR0FDN0IsSUFBSSxPQUNKLE9BQU8sZUFBZSxHQUFTLGlCQUFrQixDQUFFLFdBQVksR0FBTSxJQUFLLFFBQVMsRUFBRyxDQUFFLE9BQU8sR0FBdUIsNkJBQWdDLENBQUMsb0JDYnZKLE9BQU8sZUFBZSxHQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUNwRCxzQkFBNkIsbUJBQXVCLE9BQ3BELG1CQUFrQixFQUMxQixTQUFTLEVBQWtCLENBQUMsRUFBSyxFQUFRLEVBQVMsQ0FDOUMsSUFBTSxFQUFPLENBQUMsU0FBVSxFQUFLLENBQU0sRUFDbkMsR0FBSSxHQUFTLGFBQ1QsRUFBSyxLQUFLLGVBQWdCLEVBQVEsYUFBYSxTQUFTLENBQUMsRUFFN0QsR0FBSSxHQUFTLGFBQ1QsRUFBSyxLQUFLLGVBQWdCLEVBQVEsWUFBWSxFQUVsRCxPQUFPLEVBRUgsc0JBQXFCLHFCQ2I3QixPQUFPLGVBQWUsR0FBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDcEQsc0JBQTZCLG1CQUF1QixPQUNwRCxtQkFBa0IsRUFDMUIsU0FBUyxFQUFrQixDQUFDLEVBQUssRUFBVSxFQUFXLEVBQVMsQ0FDM0QsSUFBTSxFQUFPLENBQUMsUUFBUyxFQUFLLENBQVEsRUFDcEMsR0FBSSxHQUFTLGlCQUNULEVBQUssS0FBSyxFQUFRLGdCQUFnQixFQUd0QyxHQURBLEVBQUssS0FBSyxFQUFVLFNBQVMsQ0FBQyxFQUMxQixHQUFTLE1BQ1QsRUFBSyxLQUFLLFFBQVMsRUFBUSxNQUFNLFNBQVMsQ0FBQyxFQUUvQyxPQUFPLEVBRUgsc0JBQXFCLHFCQ2Q3QixPQUFPLGVBQWUsR0FBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDcEQsa0JBQXlCLHNCQUE2QixtQkFBdUIsT0FDckYsSUFBTSxPQUNFLG1CQUFrQixFQUMxQixTQUFTLEVBQWtCLENBQUMsRUFBSyxFQUFTLEVBQVMsQ0FDL0MsSUFBTSxFQUFPLENBQUMsT0FBUSxDQUFHLEVBQ3pCLEdBQUksR0FBUyxHQUNULEVBQUssS0FBSyxJQUFJLEVBRWIsS0FDRCxHQUFJLEdBQVMsR0FDVCxFQUFLLEtBQUssSUFBSSxFQUVsQixHQUFJLEdBQVMsR0FDVCxFQUFLLEtBQUssSUFBSSxFQUViLFFBQUksR0FBUyxHQUNkLEVBQUssS0FBSyxJQUFJLEVBR3RCLEdBQUksR0FBUyxHQUNULEVBQUssS0FBSyxJQUFJLEVBRWxCLEdBQUksR0FBUyxLQUNULEVBQUssS0FBSyxNQUFNLEVBRXBCLFFBQWEsUUFBTyxXQUFZLE1BQU0sUUFBUSxDQUFPLEVBQUksRUFBVSxDQUFDLENBQU8sRUFDdkUsRUFBSyxLQUFTLEdBQXVCLGdDQUFpQyxDQUFLLEVBQUcsQ0FBSyxFQUV2RixPQUFPLEVBRUgsc0JBQXFCLEdBQzdCLElBQUksT0FDSixPQUFPLGVBQWUsR0FBUyxpQkFBa0IsQ0FBRSxXQUFZLEdBQU0sSUFBSyxRQUFTLEVBQUcsQ0FBRSxPQUFPLEdBQXVCLDZCQUFnQyxDQUFDLG9CQ2pDdkosT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQ3BELHNCQUE2QixnQkFBdUIsbUJBQXVCLE9BQzNFLG1CQUFrQixFQUNsQixnQkFBZSxHQUN2QixTQUFTLEVBQWtCLENBQUMsRUFBSyxDQUM3QixNQUFPLENBQUMsUUFBUyxDQUFHLEVBRWhCLHNCQUFxQixxQkNQN0IsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQ3BELHNCQUE2QixnQkFBdUIsbUJBQXVCLE9BQ25GLElBQU0sT0FDRSxtQkFBa0IsRUFDbEIsZ0JBQWUsR0FDdkIsU0FBUyxFQUFrQixDQUFDLEVBQUssRUFBSyxFQUFLLENBQ3ZDLE1BQU8sQ0FDSCxTQUNBLEVBQ0ksR0FBdUIsc0NBQXVDLENBQUcsRUFDakUsR0FBdUIsc0NBQXVDLENBQUcsQ0FDekUsRUFFSSxzQkFBcUIscUJDYjdCLE9BQU8sZUFBZSxHQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUNwRCxzQkFBNkIsZ0JBQXVCLG1CQUF1QixPQUNuRixJQUFNLE9BQ0UsbUJBQWtCLEVBQ2xCLGdCQUFlLEdBQ3ZCLFNBQVMsRUFBa0IsQ0FBQyxFQUFNLENBQzlCLE9BQVcsR0FBdUIsb0JBQXFCLENBQUMsT0FBTyxFQUFHLENBQUksRUFFbEUsc0JBQXFCLHFCQ1I3QixPQUFPLGVBQWUsR0FBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDcEQsa0JBQXlCLHNCQUE2QixnQkFBdUIsbUJBQXVCLE9BQzVHLElBQU0sUUFDRixRQUNKLE9BQU8sZUFBZSxHQUFTLGtCQUFtQixDQUFFLFdBQVksR0FBTSxJQUFLLFFBQVMsRUFBRyxDQUFFLE9BQU8sR0FBUSxnQkFBbUIsQ0FBQyxFQUM1SCxPQUFPLGVBQWUsR0FBUyxlQUFnQixDQUFFLFdBQVksR0FBTSxJQUFLLFFBQVMsRUFBRyxDQUFFLE9BQU8sR0FBUSxhQUFnQixDQUFDLEVBQ3RILFNBQVMsRUFBa0IsSUFBSSxFQUFNLENBQ2pDLE1BQU8sQ0FDSCxHQUFPLEdBQVEsbUJBQW9CLEdBQUcsQ0FBSSxFQUMxQyxZQUNKLEVBRUksc0JBQXFCLEdBQzdCLElBQUksT0FDSixPQUFPLGVBQWUsR0FBUyxpQkFBa0IsQ0FBRSxXQUFZLEdBQU0sSUFBSyxRQUFTLEVBQUcsQ0FBRSxPQUFPLEdBQXVCLGtDQUFxQyxDQUFDLG9CQ2Q1SixPQUFPLGVBQWUsR0FBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDcEQsc0JBQTZCLG1CQUF1QixPQUM1RCxJQUFNLE9BQ0UsbUJBQWtCLEVBQzFCLFNBQVMsRUFBa0IsQ0FBQyxFQUFhLEVBQU0sQ0FDM0MsT0FBVyxHQUF1QixvQkFBcUIsQ0FBQyxhQUFjLENBQVcsRUFBRyxDQUFJLEVBRXBGLHNCQUFxQixxQkNQN0IsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQ3BELGtCQUF5QixzQkFBNkIsbUJBQXVCLE9BQ3JGLElBQU0sT0FDRSxtQkFBa0IsRUFDMUIsU0FBUyxFQUFrQixDQUFDLEVBQUssRUFBVyxFQUFRLENBQ2hELE1BQU8sQ0FDSCxVQUNBLEVBQ0ksR0FBdUIsZ0NBQWlDLENBQVMsRUFDckUsQ0FDSixFQUVJLHNCQUFxQixHQUM3QixJQUFJLE9BQ0osT0FBTyxlQUFlLEdBQVMsaUJBQWtCLENBQUUsV0FBWSxHQUFNLElBQUssUUFBUyxFQUFHLENBQUUsT0FBTyxHQUF1Qiw2QkFBZ0MsQ0FBQyxvQkNkdkosT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQ3BELHNCQUE2QixnQkFBdUIsbUJBQXVCLE9BQ25GLElBQU0sT0FDRSxtQkFBa0IsRUFDbEIsZ0JBQWUsR0FDdkIsU0FBUyxFQUFrQixDQUFDLEVBQU0sRUFBUyxDQUN2QyxJQUFNLEVBQVcsR0FBdUIsb0JBQXFCLENBQUMsUUFBUSxFQUFHLENBQUksRUFDN0UsR0FBSSxHQUFTLFFBQ1QsRUFBSyxLQUFLLFVBQVcsR0FBRyxFQUFRLFFBQVEsSUFBSSxLQUFVLEVBQU8sU0FBUyxDQUFDLENBQUMsRUFFNUUsR0FBSSxHQUFTLFVBQ1QsRUFBSyxLQUFLLFlBQWEsRUFBUSxTQUFTLEVBRTVDLE9BQU8sRUFFSCxzQkFBcUIscUJDZjdCLE9BQU8sZUFBZSxHQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUNwRCxrQkFBeUIsc0JBQTZCLGdCQUF1QixtQkFBdUIsT0FDNUcsSUFBTSxRQUNGLFFBQ0osT0FBTyxlQUFlLEdBQVMsa0JBQW1CLENBQUUsV0FBWSxHQUFNLElBQUssUUFBUyxFQUFHLENBQUUsT0FBTyxHQUFTLGdCQUFtQixDQUFDLEVBQzdILE9BQU8sZUFBZSxHQUFTLGVBQWdCLENBQUUsV0FBWSxHQUFNLElBQUssUUFBUyxFQUFHLENBQUUsT0FBTyxHQUFTLGFBQWdCLENBQUMsRUFDdkgsU0FBUyxFQUFrQixJQUFJLEVBQU0sQ0FDakMsTUFBTyxDQUNILEdBQU8sR0FBUyxtQkFBb0IsR0FBRyxDQUFJLEVBQzNDLFlBQ0osRUFFSSxzQkFBcUIsR0FDN0IsSUFBSSxPQUNKLE9BQU8sZUFBZSxHQUFTLGlCQUFrQixDQUFFLFdBQVksR0FBTSxJQUFLLFFBQVMsRUFBRyxDQUFFLE9BQU8sR0FBdUIsa0NBQXFDLENBQUMsb0JDZDVKLE9BQU8sZUFBZSxHQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUNwRCxzQkFBNkIsZ0JBQXVCLG1CQUF1QixPQUNuRixJQUFNLE9BQ0UsbUJBQWtCLEVBQ2xCLGdCQUFlLEdBQ3ZCLFNBQVMsRUFBa0IsQ0FBQyxFQUFNLEVBQU8sQ0FDckMsSUFBTSxFQUFXLEdBQXVCLG9CQUFxQixDQUFDLFlBQVksRUFBRyxDQUFJLEVBQ2pGLEdBQUksRUFDQSxFQUFLLEtBQUssUUFBUyxFQUFNLFNBQVMsQ0FBQyxFQUV2QyxPQUFPLEVBRUgsc0JBQXFCLHFCQ1o3QixPQUFPLGVBQWUsR0FBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDcEQsc0JBQTZCLG1CQUF1QixPQUM1RCxJQUFNLE9BQ0UsbUJBQWtCLEVBQzFCLFNBQVMsRUFBa0IsQ0FBQyxFQUFhLEVBQU0sRUFBUyxDQUNwRCxJQUFNLEVBQVcsR0FBdUIsb0JBQXFCLENBQUMsY0FBZSxDQUFXLEVBQUcsQ0FBSSxFQUMvRixHQUFJLEdBQVMsUUFDVCxFQUFLLEtBQUssVUFBVyxHQUFHLEVBQVEsUUFBUSxJQUFJLEtBQVUsRUFBTyxTQUFTLENBQUMsQ0FBQyxFQUU1RSxHQUFJLEdBQVMsVUFDVCxFQUFLLEtBQUssWUFBYSxFQUFRLFNBQVMsRUFFNUMsT0FBTyxFQUVILHNCQUFxQixxQkNkN0IsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQ3BELHNCQUE2QixnQkFBdUIsbUJBQXVCLE9BQzNFLG1CQUFrQixFQUNsQixnQkFBZSxHQUN2QixTQUFTLEVBQWtCLENBQUMsRUFBSyxFQUFLLEVBQUssQ0FDdkMsTUFBTyxDQUNILFlBQ0EsRUFDQSxFQUNBLENBQ0osRUFFSSxzQkFBcUIscUJDWjdCLE9BQU8sZUFBZSxHQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUNwRCxrQkFBeUIsc0JBQTZCLGdCQUF1QixtQkFBdUIsT0FDNUcsSUFBTSxPQUNFLG1CQUFrQixFQUNsQixnQkFBZSxHQUN2QixTQUFTLEVBQWtCLENBQUMsRUFBSyxFQUFRLENBQ3JDLE9BQVcsR0FBdUIscUJBQXNCLENBQUMsVUFBVyxDQUFHLEVBQUcsQ0FBTSxFQUU1RSxzQkFBcUIsR0FDN0IsSUFBSSxPQUNKLE9BQU8sZUFBZSxHQUFTLGlCQUFrQixDQUFFLFdBQVksR0FBTSxJQUFLLFFBQVMsRUFBRyxDQUFFLE9BQU8sR0FBdUIsc0NBQXlDLENBQUMsb0JDVmhLLE9BQU8sZUFBZSxHQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUNwRCxrQkFBeUIsc0JBQTZCLG1CQUF1QixPQUM3RSxtQkFBa0IsRUFDMUIsU0FBUyxFQUFrQixDQUFDLEVBQUssQ0FDN0IsTUFBTyxDQUNILFVBQ0EsQ0FDSixFQUVJLHNCQUFxQixHQUM3QixJQUFJLE9BQ0osT0FBTyxlQUFlLEdBQVMsaUJBQWtCLENBQUUsV0FBWSxHQUFNLElBQUssUUFBUyxFQUFHLENBQUUsT0FBTyxHQUF1QixrQ0FBcUMsQ0FBQyxvQkNYNUosT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQ3BELGtCQUF5QixzQkFBNkIsbUJBQXVCLE9BQ3JGLElBQU0sUUFDRixRQUNKLE9BQU8sZUFBZSxHQUFTLGtCQUFtQixDQUFFLFdBQVksR0FBTSxJQUFLLFFBQVMsRUFBRyxDQUFFLE9BQU8sR0FBVSxnQkFBbUIsQ0FBQyxFQUM5SCxTQUFTLEVBQWtCLENBQUMsRUFBSyxFQUFPLENBQ3BDLE1BQU8sQ0FDSCxHQUFPLEdBQVUsbUJBQW9CLENBQUcsRUFDeEMsRUFBTSxTQUFTLENBQ25CLEVBRUksc0JBQXFCLEdBQzdCLElBQUksT0FDSixPQUFPLGVBQWUsR0FBUyxpQkFBa0IsQ0FBRSxXQUFZLEdBQU0sSUFBSyxRQUFTLEVBQUcsQ0FBRSxPQUFPLEdBQXVCLGtDQUFxQyxDQUFDLG9CQ2I1SixPQUFPLGVBQWUsR0FBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDcEQsa0JBQXlCLHNCQUE2QixtQkFBdUIsT0FDN0UsbUJBQWtCLEVBQzFCLFNBQVMsRUFBa0IsQ0FBQyxFQUFLLENBQzdCLE1BQU8sQ0FDSCxVQUNBLENBQ0osRUFFSSxzQkFBcUIsR0FDN0IsSUFBSSxPQUNKLE9BQU8sZUFBZSxHQUFTLGlCQUFrQixDQUFFLFdBQVksR0FBTSxJQUFLLFFBQVMsRUFBRyxDQUFFLE9BQU8sR0FBdUIsa0NBQXFDLENBQUMsb0JDWDVKLE9BQU8sZUFBZSxHQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUNwRCxrQkFBeUIsc0JBQTZCLG1CQUF1QixPQUNyRixJQUFNLFFBQ0YsUUFDSixPQUFPLGVBQWUsR0FBUyxrQkFBbUIsQ0FBRSxXQUFZLEdBQU0sSUFBSyxRQUFTLEVBQUcsQ0FBRSxPQUFPLEdBQVUsZ0JBQW1CLENBQUMsRUFDOUgsU0FBUyxFQUFrQixDQUFDLEVBQUssRUFBTyxDQUNwQyxNQUFPLENBQ0gsR0FBTyxHQUFVLG1CQUFvQixDQUFHLEVBQ3hDLEVBQU0sU0FBUyxDQUNuQixFQUVJLHNCQUFxQixHQUM3QixJQUFJLE9BQ0osT0FBTyxlQUFlLEdBQVMsaUJBQWtCLENBQUUsV0FBWSxHQUFNLElBQUssUUFBUyxFQUFHLENBQUUsT0FBTyxHQUF1QixrQ0FBcUMsQ0FBQyxvQkNiNUosT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQ3BELHNCQUE2QixnQkFBdUIsbUJBQXVCLE9BQzNFLG1CQUFrQixFQUNsQixnQkFBZSxHQUN2QixTQUFTLEVBQWtCLENBQUMsRUFBSyxDQUM3QixNQUFPLENBQUMsY0FBZSxDQUFHLEVBRXRCLHNCQUFxQixxQkNQN0IsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQ3BELHNCQUE2QixnQkFBdUIsbUJBQXVCLE9BQ25GLElBQU0sUUFDRixRQUNKLE9BQU8sZUFBZSxHQUFTLGtCQUFtQixDQUFFLFdBQVksR0FBTSxJQUFLLFFBQVMsRUFBRyxDQUFFLE9BQU8sR0FBYyxnQkFBbUIsQ0FBQyxFQUNsSSxPQUFPLGVBQWUsR0FBUyxlQUFnQixDQUFFLFdBQVksR0FBTSxJQUFLLFFBQVMsRUFBRyxDQUFFLE9BQU8sR0FBYyxhQUFnQixDQUFDLEVBQzVILFNBQVMsRUFBa0IsQ0FBQyxFQUFLLEVBQU8sQ0FDcEMsTUFBTyxDQUNILEdBQU8sR0FBYyxtQkFBb0IsQ0FBRyxFQUM1QyxFQUFNLFNBQVMsQ0FDbkIsRUFFSSxzQkFBcUIscUJDWjdCLE9BQU8sZUFBZSxHQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUNwRCxrQkFBeUIsc0JBQTZCLGdCQUF1QixtQkFBdUIsT0FDNUcsSUFBTSxRQUNGLFFBQ0osT0FBTyxlQUFlLEdBQVMsa0JBQW1CLENBQUUsV0FBWSxHQUFNLElBQUssUUFBUyxFQUFHLENBQUUsT0FBTyxHQUFvQixnQkFBbUIsQ0FBQyxFQUN4SSxPQUFPLGVBQWUsR0FBUyxlQUFnQixDQUFFLFdBQVksR0FBTSxJQUFLLFFBQVMsRUFBRyxDQUFFLE9BQU8sR0FBb0IsYUFBZ0IsQ0FBQyxFQUNsSSxTQUFTLEVBQWtCLElBQUksRUFBTSxDQUNqQyxNQUFPLENBQ0gsR0FBTyxHQUFvQixtQkFBb0IsR0FBRyxDQUFJLEVBQ3RELFlBQ0osRUFFSSxzQkFBcUIsR0FDN0IsSUFBSSxPQUNKLE9BQU8sZUFBZSxHQUFTLGlCQUFrQixDQUFFLFdBQVksR0FBTSxJQUFLLFFBQVMsRUFBRyxDQUFFLE9BQU8sR0FBdUIsa0NBQXFDLENBQUMsb0JDZDVKLE9BQU8sZUFBZSxHQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUNwRCxzQkFBNkIsZ0JBQXVCLG1CQUF1QixPQUNuRixJQUFNLE9BQ0UsbUJBQWtCLEVBQ2xCLGdCQUFlLEdBQ3ZCLFNBQVMsRUFBa0IsQ0FBQyxFQUFLLEVBQUssRUFBSyxFQUFTLENBQ2hELElBQU0sRUFBTyxDQUNULFNBQ0EsRUFDSSxHQUF1QixzQ0FBdUMsQ0FBRyxFQUNqRSxHQUF1QixzQ0FBdUMsQ0FBRyxDQUN6RSxFQUNBLE9BQVEsR0FBUyxRQUNSLFFBQ0QsRUFBSyxLQUFLLFNBQVMsRUFDbkIsVUFDQyxNQUNELEVBQUssS0FBSyxPQUFPLEVBQ2pCLE1BRVIsR0FBSSxHQUFTLElBQ1QsRUFBSyxLQUFLLEtBQUssRUFFbkIsR0FBSSxHQUFTLE1BQ1QsRUFBSyxLQUFLLFFBQVMsRUFBUSxNQUFNLE9BQU8sU0FBUyxFQUFHLEVBQVEsTUFBTSxNQUFNLFNBQVMsQ0FBQyxFQUV0RixPQUFPLEVBRUgsc0JBQXFCLHFCQzVCN0IsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQ3BELGtCQUF5QixzQkFBNkIsZ0JBQXVCLG1CQUF1QixPQUM1RyxJQUFNLFFBQ0YsUUFDSixPQUFPLGVBQWUsR0FBUyxrQkFBbUIsQ0FBRSxXQUFZLEdBQU0sSUFBSyxRQUFTLEVBQUcsQ0FBRSxPQUFPLEdBQVMsZ0JBQW1CLENBQUMsRUFDN0gsT0FBTyxlQUFlLEdBQVMsZUFBZ0IsQ0FBRSxXQUFZLEdBQU0sSUFBSyxRQUFTLEVBQUcsQ0FBRSxPQUFPLEdBQVMsYUFBZ0IsQ0FBQyxFQUN2SCxTQUFTLEVBQWtCLElBQUksRUFBTSxDQUNqQyxNQUFPLENBQ0gsR0FBTyxHQUFTLG1CQUFvQixHQUFHLENBQUksRUFDM0MsWUFDSixFQUVJLHNCQUFxQixHQUM3QixJQUFJLE9BQ0osT0FBTyxlQUFlLEdBQVMsaUJBQWtCLENBQUUsV0FBWSxHQUFNLElBQUssUUFBUyxFQUFHLENBQUUsT0FBTyxHQUF1QixrQ0FBcUMsQ0FBQyxvQkNkNUosT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQ3BELHNCQUE2QixnQkFBdUIsbUJBQXVCLE9BQ25GLElBQU0sT0FDRSxtQkFBa0IsRUFDbEIsZ0JBQWUsR0FDdkIsU0FBUyxFQUFrQixDQUFDLEVBQUssRUFBSyxFQUFLLEVBQVMsQ0FDaEQsSUFBTSxFQUFPLENBQ1QsY0FDQSxFQUNJLEdBQXVCLHNDQUF1QyxDQUFHLEVBQ2pFLEdBQXVCLHNDQUF1QyxDQUFHLENBQ3pFLEVBQ0EsR0FBSSxHQUFTLE1BQ1QsRUFBSyxLQUFLLFFBQVMsRUFBUSxNQUFNLE9BQU8sU0FBUyxFQUFHLEVBQVEsTUFBTSxNQUFNLFNBQVMsQ0FBQyxFQUV0RixPQUFPLEVBRUgsc0JBQXFCLHFCQ2pCN0IsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQ3BELHNCQUE2QixnQkFBdUIsbUJBQXVCLE9BQ25GLElBQU0sT0FDRSxtQkFBa0IsRUFDbEIsZ0JBQWUsR0FDdkIsU0FBUyxFQUFrQixDQUFDLEVBQUssRUFBSyxFQUFLLEVBQVMsQ0FDaEQsSUFBTSxFQUFPLENBQ1QsZ0JBQ0EsRUFDSSxHQUF1QixzQ0FBdUMsQ0FBRyxFQUNqRSxHQUF1QixzQ0FBdUMsQ0FBRyxDQUN6RSxFQUNBLEdBQUksR0FBUyxNQUNULEVBQUssS0FBSyxRQUFTLEVBQVEsTUFBTSxPQUFPLFNBQVMsRUFBRyxFQUFRLE1BQU0sTUFBTSxTQUFTLENBQUMsRUFFdEYsT0FBTyxFQUVILHNCQUFxQixxQkNqQjdCLE9BQU8sZUFBZSxHQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUNwRCxrQkFBeUIsc0JBQTZCLGdCQUF1QixtQkFBdUIsT0FDNUcsSUFBTSxRQUNGLFFBQ0osT0FBTyxlQUFlLEdBQVMsa0JBQW1CLENBQUUsV0FBWSxHQUFNLElBQUssUUFBUyxFQUFHLENBQUUsT0FBTyxHQUFnQixnQkFBbUIsQ0FBQyxFQUNwSSxPQUFPLGVBQWUsR0FBUyxlQUFnQixDQUFFLFdBQVksR0FBTSxJQUFLLFFBQVMsRUFBRyxDQUFFLE9BQU8sR0FBZ0IsYUFBZ0IsQ0FBQyxFQUM5SCxTQUFTLEVBQWtCLENBQUMsRUFBSyxFQUFLLEVBQUssRUFBUyxDQUNoRCxNQUFPLENBQ0gsR0FBTyxHQUFnQixtQkFBb0IsRUFBSyxFQUFLLEVBQUssQ0FBTyxFQUNqRSxZQUNKLEVBRUksc0JBQXFCLEdBQzdCLElBQUksT0FDSixPQUFPLGVBQWUsR0FBUyxpQkFBa0IsQ0FBRSxXQUFZLEdBQU0sSUFBSyxRQUFTLEVBQUcsQ0FBRSxPQUFPLEdBQXVCLGtDQUFxQyxDQUFDLG9CQ2Q1SixPQUFPLGVBQWUsR0FBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDcEQsa0JBQXlCLHNCQUE2QixtQkFBdUIsT0FDckYsSUFBTSxPQUNFLG1CQUFrQixFQUMxQixTQUFTLEVBQWtCLENBQUMsRUFBSyxFQUFLLEVBQUssRUFBSyxFQUFTLENBQ3JELElBQU0sRUFBTyxDQUNULGNBQ0EsRUFDQSxFQUNJLEdBQXVCLHNDQUF1QyxDQUFHLEVBQ2pFLEdBQXVCLHNDQUF1QyxDQUFHLENBQ3pFLEVBQ0EsT0FBUSxHQUFTLFFBQ1IsUUFDRCxFQUFLLEtBQUssU0FBUyxFQUNuQixVQUNDLE1BQ0QsRUFBSyxLQUFLLE9BQU8sRUFDakIsTUFFUixHQUFJLEdBQVMsSUFDVCxFQUFLLEtBQUssS0FBSyxFQUVuQixHQUFJLEdBQVMsTUFDVCxFQUFLLEtBQUssUUFBUyxFQUFRLE1BQU0sT0FBTyxTQUFTLEVBQUcsRUFBUSxNQUFNLE1BQU0sU0FBUyxDQUFDLEVBRXRGLEdBQUksR0FBUyxXQUNULEVBQUssS0FBSyxZQUFZLEVBRTFCLE9BQU8sRUFFSCxzQkFBcUIsR0FDN0IsU0FBUyxFQUFjLENBQUMsRUFBTyxDQUMzQixHQUFJLE9BQU8sSUFBVSxTQUNqQixNQUFNLElBQUksVUFBVSwwRUFBMEUsRUFFbEcsT0FBTyxFQUVILGtCQUFpQixxQkN0Q3pCLE9BQU8sZUFBZSxHQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUNwRCxzQkFBNkIsZ0JBQXVCLG1CQUF1QixPQUMzRSxtQkFBa0IsRUFDbEIsZ0JBQWUsR0FDdkIsU0FBUyxFQUFrQixDQUFDLEVBQUssRUFBUSxDQUNyQyxNQUFPLENBQUMsUUFBUyxFQUFLLENBQU0sRUFFeEIsc0JBQXFCLHFCQ1A3QixPQUFPLGVBQWUsR0FBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDcEQsc0JBQTZCLG1CQUF1QixPQUM1RCxJQUFNLE9BQ0UsbUJBQWtCLEVBQzFCLFNBQVMsRUFBa0IsQ0FBQyxFQUFLLEVBQVEsQ0FDckMsT0FBVyxHQUF1QixxQkFBc0IsQ0FBQyxPQUFRLENBQUcsRUFBRyxDQUFNLEVBRXpFLHNCQUFxQixxQkNQN0IsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQ3BELHNCQUE2QixtQkFBdUIsT0FDNUQsSUFBTSxPQUNFLG1CQUFrQixFQUMxQixTQUFTLEVBQWtCLENBQUMsRUFBSyxFQUFLLEVBQUssQ0FDdkMsTUFBTyxDQUNILGlCQUNBLEVBQ0ksR0FBdUIsc0NBQXVDLENBQUcsRUFDakUsR0FBdUIsc0NBQXVDLENBQUcsQ0FDekUsRUFFSSxzQkFBcUIscUJDWjdCLE9BQU8sZUFBZSxHQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUNwRCxzQkFBNkIsbUJBQXVCLE9BQ3BELG1CQUFrQixFQUMxQixTQUFTLEVBQWtCLENBQUMsRUFBSyxFQUFPLEVBQU0sQ0FDMUMsTUFBTyxDQUFDLGtCQUFtQixFQUFLLEVBQU0sU0FBUyxFQUFHLEVBQUssU0FBUyxDQUFDLEVBRTdELHNCQUFxQixxQkNON0IsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQ3BELHNCQUE2QixtQkFBdUIsT0FDNUQsSUFBTSxPQUNFLG1CQUFrQixFQUMxQixTQUFTLEVBQWtCLENBQUMsRUFBSyxFQUFLLEVBQUssQ0FDdkMsTUFBTyxDQUNILG1CQUNBLEVBQ0ksR0FBdUIsc0NBQXVDLENBQUcsRUFDakUsR0FBdUIsc0NBQXVDLENBQUcsQ0FDekUsRUFFSSxzQkFBcUIscUJDWjdCLE9BQU8sZUFBZSxHQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUNwRCxzQkFBNkIsZ0JBQXVCLG1CQUF1QixPQUMzRSxtQkFBa0IsRUFDbEIsZ0JBQWUsR0FDdkIsU0FBUyxFQUFrQixDQUFDLEVBQUssRUFBUSxDQUNyQyxNQUFPLENBQUMsV0FBWSxFQUFLLENBQU0sRUFFM0Isc0JBQXFCLHFCQ1A3QixPQUFPLGVBQWUsR0FBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDcEQsa0JBQXlCLHNCQUE2QixnQkFBdUIsbUJBQXVCLE9BQzVHLElBQU0sT0FDRSxtQkFBa0IsRUFDbEIsZ0JBQWUsR0FDdkIsU0FBUyxFQUFrQixDQUFDLEVBQUssRUFBUSxFQUFTLENBQzlDLE9BQVcsR0FBdUIsa0JBQW1CLENBQ2pELFFBQ0EsQ0FDSixFQUFHLEVBQVEsQ0FBTyxFQUVkLHNCQUFxQixHQUM3QixTQUFTLEVBQWMsRUFBRSxFQUFRLEdBQWEsQ0FDMUMsSUFBTSxFQUFnQixDQUFDLEVBQ3ZCLFFBQVMsRUFBSSxFQUFHLEVBQUksRUFBVyxPQUFRLEdBQUssRUFDeEMsRUFBYyxLQUFLLENBQ2YsTUFBTyxFQUFXLEdBQ2xCLE1BQVcsR0FBdUIsNkJBQThCLEVBQVcsRUFBSSxFQUFFLENBQ3JGLENBQUMsRUFFTCxNQUFPLENBQ0gsT0FBUSxPQUFPLENBQU0sRUFDckIsUUFBUyxDQUNiLEVBRUksa0JBQWlCLHFCQ3pCekIsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQ3BELGtCQUF5QixzQkFBNkIsZ0JBQXVCLG1CQUF1QixPQUNwRyxtQkFBa0IsRUFDbEIsZ0JBQWUsR0FDdkIsU0FBUyxFQUFrQixDQUFDLEVBQUssRUFBUSxDQUNyQyxNQUFPLENBQUMsU0FBVSxFQUFLLENBQU0sRUFFekIsc0JBQXFCLEdBQzdCLElBQUksT0FDSixPQUFPLGVBQWUsR0FBUyxpQkFBa0IsQ0FBRSxXQUFZLEdBQU0sSUFBSyxRQUFTLEVBQUcsQ0FBRSxPQUFPLEdBQXVCLGlDQUFvQyxDQUFDLG9CQ1QzSixPQUFPLGVBQWUsR0FBUyxhQUFjLENBQUUsTUFBTyxFQUFLLENBQUMsRUFDcEQsc0JBQTZCLGdCQUF1QixtQkFBdUIsT0FDbkYsSUFBTSxPQUNFLG1CQUFrQixFQUNsQixnQkFBZSxHQUN2QixTQUFTLEVBQWtCLENBQUMsRUFBTSxFQUFTLENBQ3ZDLElBQU0sRUFBVyxHQUF1QixvQkFBcUIsQ0FBQyxRQUFRLEVBQUcsQ0FBSSxFQUM3RSxHQUFJLEdBQVMsUUFDVCxFQUFLLEtBQUssVUFBVyxHQUFHLEVBQVEsUUFBUSxJQUFJLEtBQVUsRUFBTyxTQUFTLENBQUMsQ0FBQyxFQUU1RSxHQUFJLEdBQVMsVUFDVCxFQUFLLEtBQUssWUFBYSxFQUFRLFNBQVMsRUFFNUMsT0FBTyxFQUVILHNCQUFxQixxQkNmN0IsT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQ3BELGtCQUF5QixzQkFBNkIsZ0JBQXVCLG1CQUF1QixPQUM1RyxJQUFNLFFBQ0YsUUFDSixPQUFPLGVBQWUsR0FBUyxrQkFBbUIsQ0FBRSxXQUFZLEdBQU0sSUFBSyxRQUFTLEVBQUcsQ0FBRSxPQUFPLEdBQVMsZ0JBQW1CLENBQUMsRUFDN0gsT0FBTyxlQUFlLEdBQVMsZUFBZ0IsQ0FBRSxXQUFZLEdBQU0sSUFBSyxRQUFTLEVBQUcsQ0FBRSxPQUFPLEdBQVMsYUFBZ0IsQ0FBQyxFQUN2SCxTQUFTLEVBQWtCLElBQUksRUFBTSxDQUNqQyxNQUFPLENBQ0gsR0FBTyxHQUFTLG1CQUFvQixHQUFHLENBQUksRUFDM0MsWUFDSixFQUVJLHNCQUFxQixHQUM3QixJQUFJLE9BQ0osT0FBTyxlQUFlLEdBQVMsaUJBQWtCLENBQUUsV0FBWSxHQUFNLElBQUssUUFBUyxFQUFHLENBQUUsT0FBTyxHQUF1QixrQ0FBcUMsQ0FBQyxvQkNkNUosT0FBTyxlQUFlLEdBQVMsYUFBYyxDQUFFLE1BQU8sRUFBSyxDQUFDLEVBQ3BELHNCQUE2QixtQkFBdUIsT0FDNUQsSUFBTSxPQUNFLG1CQUFrQixFQUMxQixTQUFTLEVBQWtCLENBQUMsRUFBYSxFQUFNLEVBQVMsQ0FDcEQsSUFBTSxFQUFXLEdBQXVCLG9CQUFxQixDQUFDLGNBQWUsQ0FBVyxFQUFHLENBQUksRUFDL0YsR0FBSSxHQUFTLFFBQ1QsRUFBSyxLQUFLLFVBQVcsR0FBRyxFQUFRLFFBQVEsSUFBSSxLQUFVLEVBQU8sU0FBUyxDQUFDLENBQUMsRUFFNUUsR0FBSSxHQUFTLFVBQ1QsRUFBSyxLQUFLLFlBQWEsRUFBUSxTQUFTLEVBRTVDLE9BQU8sRUFFSCxzQkFBcUIscUJDZDdCLE9BQU8sZUFBZSxHQUFTLGFBQWMsQ0FBRSxNQUFPLEVBQUssQ0FBQyxFQUM1RCxJQUFNLFFBQ0EsUUFDQSxRQUNBLFFBQ0EsUUFDQSxRQUNBLFFBQ0EsUUFDQSxRQUNBLFFBQ0EsUUFDQSxRQUNBLFFBQ0EsUUFDQSxRQUNBLFFBQ0EsUUFDQSxRQUNBLFFBQ0EsUUFDQSxRQUNBLFFBQ0EsUUFDQSxRQUNBLFFBQ0EsUUFDQSxRQUNBLFFBQ0EsUUFDQSxRQUNBLFFBQ0EsUUFDQSxRQUNBLFFBQ0EsUUFDQSxRQUNBLFFBQ0EsUUFDQSxRQUNBLFFBQ0EsUUFDQSxRQUNBLFFBQ0EsUUFDQSxRQUNBLFFBQ0EsUUFDQSxRQUNBLFFBQ0EsUUFDQSxRQUNBLFFBQ0EsUUFDQSxRQUNBLFFBQ0EsUUFDQSxRQUNBLFFBQ0EsUUFDQSxRQUNBLFFBQ0EsUUFDQSxRQUNBLFFBQ0EsUUFDQSxRQUNBLFFBQ0EsUUFDQSxRQUNBLFFBQ0EsUUFDQSxRQUNBLFFBQ0EsUUFDQSxRQUNBLFFBQ0EsUUFDQSxRQUNBLFFBQ0EsUUFDQSxRQUNBLFFBQ0EsUUFDQSxRQUNBLFFBQ0EsUUFDQSxRQUNBLFFBQ0EsUUFDQSxRQUNBLFFBQ0EsUUFDQSxRQUNBLFFBQ0EsUUFDQSxRQUNBLFFBQ0EsUUFDQSxRQUNBLFFBQ0EsUUFDQSxRQUNBLFFBQ0EsUUFDQSxRQUNBLFFBQ0EsUUFDQSxRQUNBLFFBQ0EsUUFDQSxRQUNBLFFBQ0EsUUFDQSxRQUNBLFFBQ0EsUUFDQSxRQUNBLFFBQ0EsUUFDQSxRQUNBLFFBQ0EsUUFDQSxRQUNBLFFBQ0EsUUFDQSxRQUNBLFFBQ0EsUUFDQSxRQUNBLFFBQ0EsUUFDQSxRQUNBLFFBQ0EsUUFDQSxRQUNBLFFBQ0EsUUFDQSxRQUNBLFFBQ0EsUUFDQSxRQUNBLFFBQ0EsUUFDQSxRQUNBLFFBQ0EsUUFDQSxRQUNBLFFBQ0EsUUFDQSxRQUNBLFFBQ0EsUUFDQSxRQUNBLFFBQ0EsUUFDQSxRQUNBLFFBQ0EsUUFDQSxRQUNBLFFBQ0EsUUFDQSxRQUNBLFFBQ0EsUUFDQSxRQUNBLFFBQ0EsUUFDQSxRQUNBLFFBQ0EsUUFDQSxRQUNBLFFBQ0EsUUFDQSxRQUNBLFFBQ0EsUUFDQSxRQUNBLFFBQ0EsUUFDQSxRQUNBLFFBQ0EsUUFDQSxRQUNBLFFBQ0EsUUFDQSxRQUNBLFFBQ0EsUUFDQSxRQUNBLFFBQ0EsUUFDQSxRQUNBLFFBQ0EsUUFDQSxRQUNBLFFBQ0EsUUFDQSxRQUNBLFFBQ0EsUUFDQSxRQUNBLFFBQ0EsUUFDQSxRQUNBLFFBQ0EsUUFDQSxRQUNBLFFBQ0EsUUFDQSxR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USxNQUFRLE1BQVEsTUFBUSxNQUN4RCxLQUFRLElBQVEsTUFBUSxLQUFRLE1BQVEsTUFBUSxNQUFRLE1BQ3hELE1BQVEsTUFBUSxNQUFRLE1BQVEsTUFBUSxNQUFRLE1BQVEsTUFDeEQsS0FBUSxNQUFRLEtBQVEsS0FBUSxNQUFRLE1BQVEsTUFBUSxNQUN4RCxNQUFRLE1BQVEsTUFBUSxNQUFRLE1BQVEsTUFBUSxNQUFRLE1BQ3hELE1BQVEsS0FBUSxLQUFRLEtBQVEsTUFBUSxNQUFRLE1BQVEsTUFDeEQsTUFBUSxNQUFRLE1BQVEsTUFBUSxNQUFRLE1BQVEsTUFBUSxNQUN4RCxNQUFRLE1BQVEsTUFBUSxNQUFRLEtBQVEsS0FBUSxNQUFRLE1BQ3hELE1BQVEsTUFBUSxNQUFRLE1BQVEsTUFBUSxNQUFRLE1BQVEsTUFDeEQsTUFBUSxNQUFRLE1BQVEsTUFBUSxLQUFRLEtBQVEsTUFBUSxNQUN4RCxNQUFRLE1BQVEsTUFBUSxNQUFRLE1BQVEsTUFBUSxNQUFRLE1BQ3hELE1BQVEsTUFBUSxNQUFRLE1BQVEsTUFBUSxNQUFRLEtBQVEsS0FDeEQsTUFBUSxNQUFRLE1BQVEsTUFBUSxNQUFRLE1BQVEsTUFBUSxNQUN4RCxNQUFRLE1BQVEsTUFBUSxNQUFRLE1BQVEsTUFBUSxLQUFRLEtBQ3hELE1BQVEsTUFBUSxNQUFRLE1BQVEsTUFBUSxNQUFRLE1BQVEsTUFDeEQsTUFBUSxNQUFRLE1BQVEsTUFBUSxNQUFRLE1BQVEsTUFBUSxNQUN4RCxLQUFRLElBQVEsTUFBUSxLQUFRLE1BQVEsTUFBUSxNQUFRLE1BQ3hELE1BQVEsTUFBUSxNQUFRLE1BQVEsTUFBUSxNQUFRLE1BQVEsTUFDeEQsSUFBUSxLQUFRLEtBQVEsTUFBUSxNQUFRLE1BQVEsTUFBUSxNQUN4RCxNQUFRLE1BQVEsTUFBUSxNQUFRLE1BQVEsTUFBUSxNQUFRLE1BQ3hELE1BQVEsS0FBUSxLQUFRLEtBQVEsTUFBUSxNQUFRLE1BQVEsTUFDeEQsTUFBUSxNQUFRLE1BQVEsTUFBUSxNQUFRLE1BQVEsTUFBUSxNQUN4RCxLQUFRLE1BQVEsS0FBUSxL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
|