1
0
mirror of https://github.com/zumbiepig/MineXLauncher.git synced 2025-06-08 09:24:48 +00:00

1 line
78 KiB
JavaScript

var n=Object.defineProperty;var T=(A,x)=>{for(var $ in x)n(A,$,{get:x[$],enumerable:!0,configurable:!0,set:(X)=>x[$]=()=>X})};function b(){ModAPI.require("player"),ModAPI.require("network"),ModAPI.require("settings")}var V="burmod";function d(A){console.log(`[${V}] ${A}`)}function P(A){ModAPI.displayToChat({msg:`\xA75[${V}]\xA7r ${A}`})}var v="data:image/png;base64,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";var S={};T(S,{settings:()=>{{return o}},init:()=>{{return r}}});function r(A){A.onUpdate=function(){if(A.getEnabled()){if(!ModAPI.player.capabilities.isFlying)ModAPI.player.capabilities.isFlying=!0,ModAPI.player.reload()}},A.onEnable=function(){if(ModAPI.player!=null){if(ModAPI.player.capabilities!=null)ModAPI.player.capabilities.isFlying=!0,ModAPI.player.reload()}},A.onDisable=function(){if(ModAPI.player!=null){if(ModAPI.player.capabilities!=null)ModAPI.player.capabilities.isFlying=!1,ModAPI.player.reload()}}}var o=[{name:"Mode",type:"List",modes:["Abilities","Packet"],current:0}];var f={};T(f,{init:()=>{{return l}}});function l(A){A.settings=[{name:"Height",type:"Slider",min:1,max:6,step:0.5,current:1.5}],A.onUpdate=function(){if(A.getEnabled()){if(ModAPI.player.stepHeight!=A.settings[0].current)ModAPI.player.stepHeight=A.settings[0].current,ModAPI.player.reload()}},A.onEnable=function(){if(ModAPI.player!=null)ModAPI.player.stepHeight=A.settings[0].current,ModAPI.player.reload()},A.onDisable=function(){if(ModAPI.player!=null)ModAPI.player.stepHeight=0.6000000238418579,ModAPI.player.reload()}}var y={};T(y,{init:()=>{{return s}}});function s(A){var x=!1,$=!1;A.onUpdate=function(){if(A.getEnabled()){if($&&ModAPI.player.fishEntity==null)ModAPI.rightClickMouse(),$=!1;if(ModAPI.player.fishEntity!=null){if(ModAPI.player.fishEntity.ticksExisted<100&&x==!1)x=!0;if(ModAPI.player.fishEntity.isInWater()&&ModAPI.player.fishEntity.ticksExisted>100&&Math.ceil(ModAPI.player.fishEntity.y)-ModAPI.player.fishEntity.y>=0.3){if(x)x=!1,ModAPI.rightClickMouse(),$=!0}}}},A.onEnable=function(){x=!0}}var D={};T(D,{init:()=>{{return t}}});function t(A){A.crshInter=null,A.settings=[{name:"PPS",type:"Slider",min:20,max:20000,step:10,current:5000}];function x(){if(ModAPI.player!=null)for(let $=0;$<A.settings[0].current;$++)ModAPI.player.swingItem();else A.disable()}A.onEnable=function(){A.crshInter=setInterval(x,1000)},A.onDisable=function(){if(A.crshInter!=null)clearInterval(A.crshInter)}}var h={};T(h,{init:()=>{{return e}}});function e(A){function x($,X,Y){X/=100,Y/=100;const z=(w)=>(w+$/30)%12,I=X*Math.min(Y,1-Y),E=(w)=>Y-I*Math.max(-1,Math.min(z(w)-3,Math.min(9-z(w),1)));return[255*E(0),255*E(8),255*E(4)]}A.onUpdate=function(){if(A.getEnabled()){var $=x(Date.now()/10%360,100,50),X=$[0],Y=$[1],z=$[2],I=255;ModAPI.mcinstance.$theWorld.$cloudColour=BigInt((X<<24)+(Y<<16)+(z<<8)+I)}},A.onDisable=function(){if(ModAPI.mcinstance.$theWorld!=null){var $=x(0,0,100),X=$[0],Y=$[1],z=$[2],I=255;ModAPI.mcinstance.$theWorld.$cloudColour=BigInt((X<<24)+(Y<<16)+(z<<8)+I)}}}var j=function(A){this.enabledDONOTUSE=!1,this.init=function(){},this.onEnable=function(){},this.onDisable=function(){},this.enable=function(){this.enabledDONOTUSE=!0,this.onEnable(),_()},this.disable=function(){this.enabledDONOTUSE=!1,this.onDisable(),_()},this.onKey=function(x){},this.onMCKey=function(x){},this.getEnabled=function(){return this.enabledDONOTUSE},this.toggle=function(){if(this.enabledDONOTUSE=!this.enabledDONOTUSE,this.enabledDONOTUSE)this.onEnable();else this.onDisable()},this.onUpdate=function(){},this.alert=function(){alert()},this.settings=[],A.init(this)},M={movement:"Movement",player:"Player",render:"Render",fun:"Fun"},F={flight:{name:"Flight",function:new j(S),category:"Movement",description:"Allows you to fly"},step:{name:"Step",function:new j(f),category:"Movement",description:"Allows you to step"},autofish:{name:"AutoFish",function:new j(y),category:"Player",description:"Automatically casts and reels rod"},servercrasher:{name:"Server Crasher",function:new j(D),category:"Exploit",description:"Sends just a few swing packets ;)"},rgbclouds:{name:"RGB Clouds",function:new j(h),category:"Render",description:"Clouds go weeee"}};function m(){if(document.getElementById("ui")!=null)document.getElementById("ui").remove()}function p(){if(document.getElementById("ui")==null)return!1;else return!0}function xx(A){var x=A.function.settings;console.log(x);var $=document.createElement("div");$.className="setting",$.style.position="absolute",$.style.color="white",$.style.backdropFilter="blur(8px)",$.style.background="rgba(0,0,0,0.5)",$.style.borderRadius="15px",$.style.padding="15px",$.style.fontFamily="monospace",$.style.overflowY="hidden",$.style.animation="rgb 4s linear infinite",$.style.width="15%",$.style.height="50%",$.style.top="100px",$.style.left="100px",$.style.zIndex="1000",$.style.backdropFilter="blur(8px)",$.style.resize="both";const X=document.createElement("div");X.innerText=A.name,X.style.fontSize="22px",$.appendChild(X);var Y=document.createElement("div");Y.innerText="X",Y.style.fontSize="28px",Y.style.position="absolute",Y.style.right="15px",Y.style.top="10px",Y.style.cursor="pointer",Y.onclick=function(){$.remove()},$.appendChild(Y),document.body.appendChild($);for(let B in x)if(x.hasOwnProperty(B)){var z=document.createElement("div");if(z.style.background="rgba(100,100,100,0.5)",z.style.margin="5px",z.style.padding="5px",z.style.borderRadius="10px",$.appendChild(z),x[B].type=="List"){var I=document.createElement("div");I.style.fontSize="20px",I.innerText=`${x[B].name} - ${x[B].current}`,z.appendChild(I);var E=document.createElement("select");E.onchange=function(){x[B].current=parseInt(E.value),I.innerText=`${x[B].name} - ${x[B].current}`};for(let L in x[B].modes){if(x[B].modes.hasOwnProperty(L)){var w=document.createElement("option");w.innerText=x[B].modes[L],w.value=L+""}z.appendChild(E)}}else if(x[B].type=="Slider"){var K=document.createElement("div");K.style.fontSize="20px",K.innerText=`${x[B].name} - ${x[B].current}`,z.appendChild(K);var Z=document.createElement("input");Z.type="range",Z.step=x[B].step,Z.min=x[B].min,Z.max=x[B].max,Z.value=x[B].current,Z.onchange=function(){x[B].current=parseFloat(Z.value),K.innerText=`${x[B].name} - ${x[B].current}`},z.appendChild(Z)}else if(x[B].type=="Boolean"){var q=document.createElement("div");q.style.fontSize="20px",q.innerText=`${x[B].name} - ${x[B].toggled}`,z.appendChild(q);var Q=document.createElement("input");Q.type="checkbox",Q.checked=x[B].toggled,Q.onchange=function(){x[B].toggled=Q.checked,q.innerText=`${x[B].name} - ${x[B].toggled}`},z.appendChild(Q)}}}function c(){document.exitPointerLock();var A=V;const x=document.createElement("div");x.id="ui",x.style.position="fixed",x.style.width="66%",x.style.height="66%",x.style.top=document.body.clientHeight*0.165+"px",x.style.left=document.body.clientWidth*0.165+"px",x.style.color="white",x.style.backdropFilter="blur(8px)",x.style.background="rgba(0,0,0,0.75)",x.style.borderRadius="15px",x.style.padding="15px",x.style.boxShadow="0px 0px 40px rgba(0, 195, 255,0.5)",x.style.fontFamily="monospace",x.style.overflowY="hidden",x.style.animation="rgb 4s linear infinite",document.body.appendChild(x);const $=document.createElement("div");$.innerText=A,$.style.fontSize="24px",$.style.margin="5px",x.appendChild($);var X=document.createElement("input");X.style.width="33%",X.type="text",X.style.border="solid 2px rgba(200,200,200,0.5)",X.style.borderRadius="10px",X.style.color="rgba(255,255,255,1)",X.style.display="inline-block",X.style.padding="8px",X.style.marginLeft="20px",X.style.fontSize="22px",X.style.background="rgba(50,50,50,.24)",X.placeholder="\uD83D\uDD0E\uFE0E Search",X.style.backdropFilter="blur(8px)",$.appendChild(X);const Y=document.createElement("div");Y.innerText="X",Y.style.fontSize="28px",Y.style.position="absolute",Y.style.right="15px",Y.style.top="10px",Y.style.cursor="pointer",Y.onclick=function(){m()},x.appendChild(Y);var z=document.createElement("div");z.style.overflowX="scroll",x.appendChild(z);for(let I in M)if(M.hasOwnProperty(I)){const E=document.createElement("div");E.innerText=M[I],E.style.fontSize="18px",E.style.cursor="pointer",E.style.display="inline-block",E.style.padding="10px",E.style.margin="5px",E.style.background="rgba(100,100,100,0.5)",E.style.borderRadius="5px",E.onclick=function(){},z.appendChild(E)}C=document.createElement("center"),C.style.height="100%",C.style.overflowY="scroll",x.appendChild(C),_()}function _(){if(p()){C.innerHTML="";for(let $ in F)if(F.hasOwnProperty($)){var A=document.createElement("div"),x=document.createElement("div");if(x.innerText=`${F[$].name}`,x.style.fontSize="22px",x.style.fontWeight="bold",A.appendChild(x),A.style.textAlign="left",A.style.display="inline-block",A.style.width="25%",A.style.height="25%",A.style.padding="5px",A.style.borderRadius="15px",A.style.margin="10px",A.style.cursor="pointer",A.style.background="rgba(100,100,100,0.5)",F[$].function.getEnabled())A.style.boxShadow="0px 0px 15px rgba(0, 255, 0,1)";A.onclick=function(X){F[$].function.toggle(),_()},A.oncontextmenu=function(X){new xx(F[$]),console.log(F[$])},C.appendChild(A)}}}var C;var Ax=function(){if(ModAPI.mcinstance.$currentScreen!=null){if(ModAPI.currentScreen().startsWith("net.minecraft.client.gui.GuiMainMenu")){var A=ModAPI.mcinstance.$currentScreen.$buttonList.$array1.data[0],x=ModAPI.mcinstance.$currentScreen.$buttonList.$array1.data[1],$=ModAPI.mcinstance.$currentScreen.$buttonList.$array1.data[2],X=ModAPI.mcinstance.$currentScreen.$buttonList.$array1.data[3],Y=ModAPI.mcinstance.$currentScreen.$buttonList.$array1.data[4],z=ModAPI.mcinstance.$currentScreen.$buttonList.$array1.data[5],I=ModAPI.mcinstance.$currentScreen.$buttonList.$array1.data[6],E=ModAPI.mcinstance.$currentScreen,w=42,K=22,Z=2,q=100,Q=new TextEncoder;if(Y.$width13=q,Y.$yPosition=E.$height7-w,$.$width13=q/2,$.$xPosition0=Y.$xPosition0-q/2-Z,$.$yPosition=E.$height7-w,A.$width13=q,A.$yPosition=Y.$yPosition-K,x.$width13=q+I.$width13+Z,x.$xPosition0=A.$xPosition0+q+Z,x.$yPosition=Y.$yPosition-K,z.$width13=q,z.$yPosition=E.$height7-w,I.$xPosition0=z.$xPosition0+z.$width13+Z,I.$yPosition=E.$height7-w,X.$width13=q/2,X.$yPosition=$.$yPosition-K,X.$xPosition0=$.$xPosition0,X.$displayString.$characters.data=Q.encode("Fork"),E.$openGLWarning1.$characters.data=Q.encode(""),document.getElementById("serverpinglist")==null){var B=document.createElement("div");B.id="serverpinglist";var L=[{name:"Aeon Network",address:"wss://aeon-network.net"},{name:"Arch MC",address:"wss://mc.arch.lol"},{name:"Hellium Network",address:"wss://helltech.cc"},{name:"Clever Teaching",address:"wss://clever-teaching.com"},{name:"Zyth",address:"wss://mc.zyth.me"}];B.style.overflowY="scroll",B.style.wordBreak="break-all",B.style.position="fixed",B.style.top="10%",B.style.left="2.5%",B.style.width="15%",B.style.height="80%",B.style.color="rgba(255,255,255,1)",B.style.backgroundColor="rgba(0,0,0,0.5)",B.style.borderRadius="15px",B.style.fontFamily="monospace",L.forEach(function(H){const N=document.createElement("div");N.style.margin="10px",B.appendChild(N);const O=document.createElement("div");O.style.fontSize="20px",O.innerText=H.name,N.appendChild(O);const g=document.createElement("div");g.innerText=H.address,N.appendChild(g);const J=document.createElement("div");J.innerText="not connected",J.style.color="red",J.style.fontWeight="bold",J.style.fontSize="16px",J.style.width="100%",N.appendChild(J);const W=new WebSocket(H.address),a=Date.now();W.onopen=()=>{W.send("Accept: MOTD")},W.onmessage=(k)=>{if(k.data){if(typeof k.data==="string")try{var G=JSON.parse(k.data);if(G.type.toLowerCase()==="motd"){J.innerText=G.data.online+"/"+G.data.max,J.style.color="lime";const U=document.createElement("div");U.style.display="inline-block",U.style.float="right",U.innerText+=Date.now()-a+"ms",J.appendChild(U),console.log(G)}}catch(U){console.log(U)}}}}),document.body.appendChild(B)}}else if(document.getElementById("serverpinglist")!=null)document.getElementById("serverpinglist").remove()}};b();d("Init...");P("Init...");P("Loading modules...");addEventListener("keydown",function(A){if(A.location==KeyboardEvent.DOM_KEY_LOCATION_RIGHT&&A.key=="Shift"&&!p())c();for(let x in F)if(F.hasOwnProperty(x))F[x].function.onKey(A)});ModAPI.addEventListener("key",function(A){if(A.key==54)m;for(let x in F)if(F.hasOwnProperty(x))F[x].function.onMCKey(A)});ModAPI.addEventListener("update",function(){for(let A in F)if(F.hasOwnProperty(A))F[A].function.onUpdate()});var R=document.styleSheets[0];R.insertRule(` ::-webkit-scrollbar { width: 10px; }`);R.insertRule(` ::-webkit-scrollbar-track { background: rgba(0,0,0,0); }`);R.insertRule(` ::-webkit-scrollbar-thumb { background: rgba(100,100,100,0.5); filter: blur(4px); }`);R.insertRule(`@keyframes rgb { 0% { box-shadow: 0px 0px 40px rgba(255, 0, 0,0.75); } 16% { box-shadow: 0px 0px 40px rgba(255, 255, 0,0.75); } 33% { box-shadow: 0px 0px 40px rgba(0, 255, 0,0.75); } 50% { box-shadow: 0px 0px 40px rgba(0, 255, 255,0.75); } 66% { box-shadow: 0px 0px 40px rgba(0, 0, 255,0.75); } 83% { box-shadow: 0px 0px 40px rgba(255, 0, 255,0.75); } 100% { box-shadow: 0px 0px 40px rgba(255, 0, 0,0.75); } }`);var Ux=setInterval(Ax,50);document.body.getElementsByTagName("canvas")[0].style.cursor='url("'+v+'"), auto';document.body.style.cursor='url("'+v+'"), auto'; //# debugId=C850F3D2B132055C64756e2164756e21 //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL3JlcXVpcmVfYWxsLnRzIiwgInNyYy91dGlsL2NsaWVudE5hbWUudHMiLCAic3JjL3V0aWwvY29uc29sZUxvZ2dlci50cyIsICJzcmMvdXRpbC9jaGF0TG9nZ2VyLnRzIiwgInNyYy9hc3NldHMudHMiLCAic3JjL2NoZWF0cy9mbGlnaHQudHMiLCAic3JjL2NoZWF0cy9zdGVwLnRzIiwgInNyYy9jaGVhdHMvYXV0b2Zpc2gudHMiLCAic3JjL2NoZWF0cy9zZXJ2ZXJjcmFzaGVyLnRzIiwgInNyYy9jaGVhdHMvcmdiY2xvdWRzLnRzIiwgInNyYy91dGlsL2FjdHVhbE1vZHVsZXMudHMiLCAic3JjL2d1aS50cyIsICJzcmMvTWFpbi50cyIsICJzcmMvTWFpbi50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsKICAgICJleHBvcnQgZnVuY3Rpb24gcmVxdWlyZV9hbGwoKXtcbiAgTW9kQVBJLnJlcXVpcmUoXCJwbGF5ZXJcIik7XG4gIE1vZEFQSS5yZXF1aXJlKFwibmV0d29ya1wiKTtcbiAgTW9kQVBJLnJlcXVpcmUoXCJzZXR0aW5nc1wiKTtcbn1cbiIsCiAgIi8vIGdsb2JhbCB2YXJpYWJsZSBmb3IgdGhlIGNsaWVudCdzIG5hbWVcblxuZXhwb3J0IHZhciBjbGllbnROYW1lID0gXCJidXJtb2RcIjsiLAogICJpbXBvcnQgeyBjbGllbnROYW1lIH0gZnJvbSBcIi4vY2xpZW50TmFtZS50c1wiXG5cbmV4cG9ydCBmdW5jdGlvbiBsb2dUb0NvbnNvbGUobXNnKSB7XG4gIGNvbnNvbGUubG9nKGBbJHtjbGllbnROYW1lfV0gJHttc2d9YCk7XG59IiwKICAiaW1wb3J0IHsgY2xpZW50TmFtZSB9IGZyb20gXCIuL2NsaWVudE5hbWUudHNcIlxuXG5leHBvcnQgZnVuY3Rpb24gbG9nVG9DaGF0KG1zZykge1xuICAvL0B0cy1pZ25vcmVcbiAgTW9kQVBJLmRpc3BsYXlUb0NoYXQoe21zZzogYMKnNVske2NsaWVudE5hbWV9XcKnciAke21zZ31gfSk7XG59IiwKICAiZXhwb3J0IHZhciBjdXJzb3IgPSBcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQndBQUFBbENBWUFBQUJSZUlueEFBQUFBWE5TUjBJQXJzNGM2UUFBQ0ZGSlJFRlVXRWV0VjF0dlhOVVpYZnZjcnpNVE8wNUlLNFdxQ29LQ0NnalVxcFhhQ2xTa3dtL29QK2xMZWVHbEQrMUQyMVF0VWt0VnFSZW1nQ2hDSUVnaUF3MUdRSnFRZ0dNU1F4STdkbUtQNTM1dSs1eDlxYjQ5VGtVSVNoVEtrWTVtUEhPODExN3JXOS82OXJESEhyeEhTeW5oZWg0NmV6cm96SFhnZWU1UWEvMEtyNXRudklWaTZmRGh4UXhmMGNVSVVDc0Z5N1lScFFuU1ZnclhkZnRTaVgvbWRmUDc1MTU1OHhRQS9SWGhnZjM0Z2J1MUZCSmU0R1BmSFF2WXYzOEJnZStQR2lHT2xHWDVVdG5VNStxYURUenBqRk8vTi9ubHMwc1ZZMTkrQXdhd0xDdnNtZXZnb1llL2pmc2Z1QmVoNy9QdDN1RHk2dXJGalN0Yk81T2Fpek9TcWVPUlhaLzg0NytPYi80L2JJMmtrMG1HQXdmMjRTZVBQNEpISHYwK1NhcVhsMWZ4L29rejdQTGxxOGlMNGcwTjhWY282OVh1a2VOclh3SGdGQWNPN01mamp6K0tIejN5UGRpMmpmUG5MK0QwNlJWc2JlMDBlVjRjcjRWOFVXdjFKcGZOT2xRa2U1d1hDd3VMVGJjTGVUc2JNSkptV1dGcTk0TWZmaGNQZitkK2NpbUdnekZHb3pFNGI4UTBMejd0OXlkbkI4UFJKOU1zMzVCQ1hCYXg5eDlnc3RIdExwVzNCZmpZZzNmclBLK3dkKzhjSG5yNGZ0enpyVVB3QXhlKzV5TkpZc1JSb0xhMis5WEt5cXE4Y0hHajdnL0dHN3h1bGh5TC9XWHZYWGQ4Y1Bodzk3WmFadGMwSFBQemUvREFnL2ZpMEYzZk1HRHRUZ3NMQy9Ob3RWTnNiRnpWSzJkWDJZV0xhN0szUGRncHEyYko5cXlubGUyZWlYUXdpdSs4c3o1elpsNHVMdjVjQXV5bUxXUUFlVldqMDJuam5uc1A0ZURCcjhGeEhMUTdiY002YmNVZ1V3MEdJL09hWlVXVzVmbnFaRFI5YXpDYWZscFh6WWJuV3V0ZXUzVnB5TzN0YnJkNzA1b2F3Sm8zYUxVU2ZQUFFuY1k4Qk5ocXBaaWJheU5LUWpCWXhrZ1VEazB0bWw2L1AvcjQ0d3ZibTV0YlY0cThPRzhCNzdWRFora1BMeTJ1M0txZUJyQ3BHeVJwaklNSHY0NTkrL2ZDY1Z5emdYWTdSUkFGaUtQUUtKQ21DWlRVNnZMbWxqeDE4a081dHJhWlpYbDJsZ0hIQWo5NEZWTnhLbDlZYU82Nzd6Nzk1Sk5Qa3JRM3lHc0FoUkNJb3RDdzJ6UGZnV083YUxjVHBHbU1JUENSdGhKVHp6MmRqbG5qNnRZT1BsbytoL1gxcXlqeTRnS0F0N1hEam1VRlB4VTQvbGl6WUxRMkhJNFhGeGZGNXhtYnhpZEFQL0F4TjA4MVMrSFlOdElrbmdINkh1STBOdksyMnkwamE1Wmx1SEpsRytQaFZPZEZOYXA0dlphWDVjZVRhWGFPQVd1V2I1K3NOck9QdWtzM3Rvd0JuRTBMRjJtcmhUQU1ZZGtXa2lSRUdzZndQUTl4RWhuWDBnYW9SeHNoVUJZY1RWTVRvSnhNcHJ6Zkd4YkR5WFFiV3AvVXpIbWg0VGphUFhKa0RBMW1XTzdtcndGVVVzRnhIY1JwQWo4SVlGa1dramhDRW9md2ZjZjBJN0dqT251ZUI2VVU2cm9CaFg1WmNlVFRYQTlHWTR3bWVhNkUrc0RTMWo4YU8zL2QwM0ljMnhHL2pGYlc3WFpyZy90WlFCcFBmaERDWWpBZ3JZUUFQU1JKaEZacnhwQ1VrRktCOHhwMTA0QU1SKytyaXFNb1M4SHI1Z0t2K0xIeFpMb2tvQXNYOWthSyt1enZYdjczOERPQUVvN25JazUyQVMwTEtZR2trUUdNNHdpZFRzdTBpdXM2NEUxamVwSnpUcTRGWTVaUlJTc3BpN0thN1BTSDZ6czdvMDJoWkduWjlodStiVC8vcHhkZlcvOUN3SUFZR3RORVNKTEExQ3lKWWxQRFZqdWhTUUplMXhpUHA2ZzRod1ZtWktaMFloWjBuaFZpcTdjaitqc2pVVXRaYThhZWJ5enhtNzg5ZC9UTVQ1OTRJdDJWVk1KeFhTUWtLWm5Hc2hGRlBzTEFNeUVRUnlScGlpU056QWFVMHVBMWg1QVNGbU53Yk1mYzFIUlZWUm4yMDJrT1hqY1FTcjFlQ2Y1TVBpbk9oVzR3L3puQUZHRVVnbGtXSE1lR1kxdXdtR1Urb3phSm9nQkI2Sm5ORVRDMUQxMUNLbEJya1ltVTFpRFhDekc3eTVLdjlJZWpFMFZSRFR6WFMyNEFqS0lJekdaZ2pFRXBRR3R0Mk1aeGlDZ0lFQVFld3BpU3A0VW9EQTNic3FwUUZLVnhMaWxDc2p1T3BiWFNhakFZVGE5dTlZWkZ3V3ZQOCt6clhKb2tDYUk0Tmd3VlpqdWxCY1BBUjB3U2g3T2JudHUzTUk4b2pxQTE2RVF3azdDcDRUdWVlWjdNcGJUU3ZkNVFiMTN0cVpLWDJuVzhhMjJ4VzhNa1FXZ0FaNzFLOGlpdHpBSkpGQ0FNQW9SaFlHbzVQeitQT0E2TUFzUnVtaFdHb1dVeDJJeXNCRWlsTUJ4TnNkTWZtclloOXRkTGFnQWp3NUF1V294QUl3SWhRTU13TkNrMHQzZk9oUG9Nc0VLZWw2WWY2Y2hKOVd3YVliN0xpaExqU1lhNkZxYm1YMWhEMC9tN2dQUlB4TkFZeHZjTVF3cjZEbzJ1MElmU0lHT2dJTUM2aHBJU2RWMmJRRkJLNmFxV3ZDaXJVZ2doYk50bU53TEdFY0N1QjZROEpiUDRubXVTaHZxT05rQi9rd0lFeEN0dUpLV2F6eHdyNkwwU1NtMDBVcTFxcFNmTWhuOUxoc1RVdGkxakF1bzFSbXByUU12WllOZlFKbHRGSTB6a2tTTG1VOU1lU21pTHZlMEV3Y3VlNjY1TDNiUnVXc1BkRldjampiRmRJMGp3cXRaNU5sVlZ4YlZXVXB0b0kxVTB5SEIwTUxlMHhiU1dPbGNhejdwaDlOdWYvZUpYSHg1KzZxbjRsb0FFUTA0bC85UG1wVlN5cmpuUHMyekVlVlZLb1FSaFdHUlBNNFZNMmxHNDBtQ2FhbzBYWUZsL1hqeTFjdkg2TERYUmxzSTBQZ1V4RGJMZFd2NnZKa0pvcFdRdXBMd2tHdm1PYUpxTEVtemlhRzNCZ2llMXRpakxYVENoR1ZQUWx0QmFyMmcvZnYvb3UrLzJ2eGd3aVEwUTFZQmU2YWFwMEZRY1RVMTNNMVJLdnFPMTliU1V6V25meFlRV0toMWhjazRxeld3cjFuWlptdk1NODFrbDBvUDV0ZVBHalZtYVJETm05UGlzYnJxdWE4M0wwbXA0UllFODFsSWRnN0orTGZYZ3ZjWGwzdTBkaE0wQVZzb2NBMmxTMFB3emJVRUdZSXlTUTBwSlB5VjRUOVIxWHpSaVF5dWN0bXo3dGFidXJYNHB3R3Z5MFJDOVZqY2lhTlBVc0sxYWFYMVNhWFZVQ3ZHT3JQVWxNQzlqbnRjL2N1SkVRY1BpZG42d0drbXZIZVZNbE5HSTJMMU0vemwycGJSK1N3cjFkKzVZcjd4MTR1eVZXeDEyYi9iOWRZQ2ZmNUFZdW81VkMrampVcW9YaFdCSHRwcmw4OHZMTUFlaUwzUDlGMlRlUVN4TFRWV0hBQUFBQUVsRlRrU3VRbUNDXCI7IiwKICAiZXhwb3J0IHZhciBzZXR0aW5ncyA9IFtcbiAge1xuICAgIG5hbWU6IFwiTW9kZVwiLFxuICAgIHR5cGU6IFwiTGlzdFwiLFxuICAgIG1vZGVzOiBbXCJBYmlsaXRpZXNcIiwgXCJQYWNrZXRcIl0sXG4gICAgY3VycmVudDogMCxcbiAgfSxcbl07XG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0KHBhcmVudCkge1xuICBwYXJlbnQub25VcGRhdGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHBhcmVudC5nZXRFbmFibGVkKCkpIHtcbiAgICAgICAgLy9AdHMtaWdub3JlXG4gICAgICAgIGlmICghTW9kQVBJLnBsYXllci5jYXBhYmlsaXRpZXMuaXNGbHlpbmcpIHtcbiAgICAgICAgICAvL0B0cy1pZ25vcmVcbiAgICAgICAgICBNb2RBUEkucGxheWVyLmNhcGFiaWxpdGllcy5pc0ZseWluZyA9IHRydWU7XG4gICAgICAgICAgLy9AdHMtaWdub3JlXG4gICAgICAgICAgTW9kQVBJLnBsYXllci5yZWxvYWQoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBwYXJlbnQub25FbmFibGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgLy9AdHMtaWdub3JlXG4gICAgaWYgKE1vZEFQSS5wbGF5ZXIgIT0gbnVsbCkge1xuICAgICAgLy9AdHMtaWdub3JlXG4gICAgICBpZiAoTW9kQVBJLnBsYXllci5jYXBhYmlsaXRpZXMgIT0gbnVsbCkge1xuICAgICAgICAvL0B0cy1pZ25vcmVcbiAgICAgICAgTW9kQVBJLnBsYXllci5jYXBhYmlsaXRpZXMuaXNGbHlpbmcgPSB0cnVlO1xuICAgICAgICAvL0B0cy1pZ25vcmVcbiAgICAgICAgTW9kQVBJLnBsYXllci5yZWxvYWQoKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgcGFyZW50Lm9uRGlzYWJsZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAvL0B0cy1pZ25vcmVcbiAgICBpZiAoTW9kQVBJLnBsYXllciAhPSBudWxsKSB7XG4gICAgICAvL0B0cy1pZ25vcmVcbiAgICAgIGlmIChNb2RBUEkucGxheWVyLmNhcGFiaWxpdGllcyAhPSBudWxsKSB7XG4gICAgICAgIC8vQHRzLWlnbm9yZVxuICAgICAgICBNb2RBUEkucGxheWVyLmNhcGFiaWxpdGllcy5pc0ZseWluZyA9IGZhbHNlO1xuICAgICAgICAvL0B0cy1pZ25vcmVcbiAgICAgICAgTW9kQVBJLnBsYXllci5yZWxvYWQoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsCiAgImV4cG9ydCBmdW5jdGlvbiBpbml0KHBhcmVudCkge1xuICBwYXJlbnQuc2V0dGluZ3MgPSBbXG4gICAge1xuICAgICAgbmFtZTogXCJIZWlnaHRcIixcbiAgICAgIHR5cGU6IFwiU2xpZGVyXCIsXG4gICAgICBtaW46IDEsXG4gICAgICBtYXg6IDYsXG4gICAgICBzdGVwOiAwLjUsXG4gICAgICBjdXJyZW50OiAxLjVcbiAgICB9XG4gIF1cblxuICBwYXJlbnQub25VcGRhdGUgPSBmdW5jdGlvbigpIHtcbiAgICBpZiAocGFyZW50LmdldEVuYWJsZWQoKSkge1xuICAgICAgICAvL0B0cy1pZ25vcmVcbiAgICAgICAgaWYgKE1vZEFQSS5wbGF5ZXIuc3RlcEhlaWdodCAhPSBwYXJlbnQuc2V0dGluZ3NbMF0uY3VycmVudCkge1xuICAgICAgICAgIC8vQHRzLWlnbm9yZVxuICAgICAgICAgIE1vZEFQSS5wbGF5ZXIuc3RlcEhlaWdodCA9IHBhcmVudC5zZXR0aW5nc1swXS5jdXJyZW50O1xuICAgICAgICAgIC8vQHRzLWlnbm9yZVxuICAgICAgICAgIE1vZEFQSS5wbGF5ZXIucmVsb2FkKCk7XG4gICAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwYXJlbnQub25FbmFibGUgPSBmdW5jdGlvbigpIHtcbiAgICAvL0B0cy1pZ25vcmVcbiAgICBpZiAoTW9kQVBJLnBsYXllciAhPSBudWxsKSB7XG4gICAgICAvL0B0cy1pZ25vcmVcbiAgICAgIE1vZEFQSS5wbGF5ZXIuc3RlcEhlaWdodCA9IHBhcmVudC5zZXR0aW5nc1swXS5jdXJyZW50O1xuICAgICAgLy9AdHMtaWdub3JlXG4gICAgICBNb2RBUEkucGxheWVyLnJlbG9hZCgpO1xuICAgIH1cbiAgfVxuXG4gIHBhcmVudC5vbkRpc2FibGUgPSBmdW5jdGlvbigpIHtcbiAgICAvL0B0cy1pZ25vcmVcbiAgICBpZiAoTW9kQVBJLnBsYXllciAhPSBudWxsKSB7XG4gICAgICAvL0B0cy1pZ25vcmVcbiAgICAgIE1vZEFQSS5wbGF5ZXIuc3RlcEhlaWdodCA9IDAuNjAwMDAwMDIzODQxODU3OTtcbiAgICAgIC8vQHRzLWlnbm9yZVxuICAgICAgTW9kQVBJLnBsYXllci5yZWxvYWQoKTtcbiAgICB9XG4gIH1cblxufVxuXG4iLAogICJleHBvcnQgZnVuY3Rpb24gaW5pdChwYXJlbnQpIHtcbiAgdmFyIGNhdGNoZmlzaCA9IGZhbHNlO1xuICB2YXIgY2F0Y2hhZ2FpbiA9IGZhbHNlO1xuICBwYXJlbnQub25VcGRhdGUgPSBmdW5jdGlvbigpIHtcbiAgICBpZiAocGFyZW50LmdldEVuYWJsZWQoKSkge1xuICAgICAgLy9AdHMtaWdub3JlXG4gICAgICBpZiAoY2F0Y2hhZ2FpbiAmJiBNb2RBUEkucGxheWVyLmZpc2hFbnRpdHkgPT0gbnVsbCkge1xuICAgICAgICAvL0B0cy1pZ25vcmVcbiAgICAgICAgTW9kQVBJLnJpZ2h0Q2xpY2tNb3VzZSgpO1xuICAgICAgICBjYXRjaGFnYWluID0gZmFsc2U7XG4gICAgICB9XG4gICAgICAvL0B0cy1pZ25vcmVcbiAgICAgIGlmIChNb2RBUEkucGxheWVyLmZpc2hFbnRpdHkgIT0gbnVsbCkge1xuICAgICAgICAvL0B0cy1pZ25vcmVcbiAgICAgICAgaWYgKE1vZEFQSS5wbGF5ZXIuZmlzaEVudGl0eS50aWNrc0V4aXN0ZWQgPCAxMDAgJiYgY2F0Y2hmaXNoID09IGZhbHNlKSB7XG4gICAgICAgICAgY2F0Y2hmaXNoID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vQHRzLWlnbm9yZVxuICAgICAgICBpZiAoTW9kQVBJLnBsYXllci5maXNoRW50aXR5LmlzSW5XYXRlcigpICYmIE1vZEFQSS5wbGF5ZXIuZmlzaEVudGl0eS50aWNrc0V4aXN0ZWQgPiAxMDAgJiYgKE1hdGguY2VpbChNb2RBUEkucGxheWVyLmZpc2hFbnRpdHkueSkgLSBNb2RBUEkucGxheWVyLmZpc2hFbnRpdHkueSkgPj0gLjMpIHtcbiAgICAgICAgICBpZiAoY2F0Y2hmaXNoKSB7XG4gICAgICAgICAgICBjYXRjaGZpc2ggPSBmYWxzZTtcbiAgICAgICAgICAgIC8vQHRzLWlnbm9yZVxuICAgICAgICAgICAgTW9kQVBJLnJpZ2h0Q2xpY2tNb3VzZSgpO1xuICAgICAgICAgICAgY2F0Y2hhZ2FpbiA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwYXJlbnQub25FbmFibGUgPSBmdW5jdGlvbigpIHtcbiAgICBjYXRjaGZpc2ggPSB0cnVlO1xuICB9XG5cbn1cblxuIiwKICAiZXhwb3J0IGZ1bmN0aW9uIGluaXQocGFyZW50KSB7XG5cbiAgcGFyZW50LmNyc2hJbnRlciA9IG51bGw7XG4gIFxuICBwYXJlbnQuc2V0dGluZ3MgPSBbXG4gICAge1xuICAgICAgbmFtZTogXCJQUFNcIixcbiAgICAgIHR5cGU6IFwiU2xpZGVyXCIsXG4gICAgICBtaW46IDIwLFxuICAgICAgbWF4OiAyMDAwMCxcbiAgICAgIHN0ZXA6IDEwLFxuICAgICAgY3VycmVudDogNTAwMFxuICAgIH1cbiAgXVxuICBcbiAgZnVuY3Rpb24gY3Jhc2goKSB7XG4gICAgaWYoTW9kQVBJLnBsYXllciAhPSBudWxsKXtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFyZW50LnNldHRpbmdzWzBdLmN1cnJlbnQ7IGkrKykge1xuICAgICAgICBNb2RBUEkucGxheWVyLnN3aW5nSXRlbSgpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwYXJlbnQuZGlzYWJsZSgpO1xuICAgIH1cbiAgfVxuXG4gIHBhcmVudC5vbkVuYWJsZSA9IGZ1bmN0aW9uKCl7XG4gICAgcGFyZW50LmNyc2hJbnRlciA9IHNldEludGVydmFsKGNyYXNoLCAxMDAwKTtcbiAgfVxuICBcbiAgcGFyZW50Lm9uRGlzYWJsZSA9IGZ1bmN0aW9uKCkge1xuICAgIGlmKHBhcmVudC5jcnNoSW50ZXIgIT0gbnVsbCl7XG4gICAgICBjbGVhckludGVydmFsKHBhcmVudC5jcnNoSW50ZXIpO1xuICAgIH1cbiAgfVxufSIsCiAgImV4cG9ydCBmdW5jdGlvbiBpbml0KHBhcmVudCl7XG4gICAgXG4gICAgZnVuY3Rpb24gaHNsMnJnYihoLCBzLCBsKXtcbiAgICAgIHMgLz0gMTAwO1xuICAgICAgbCAvPSAxMDA7XG4gICAgICBjb25zdCBrID0gbiA9PiAobiArIGggLyAzMCkgJSAxMjtcbiAgICAgIGNvbnN0IGEgPSBzICogTWF0aC5taW4obCwgMSAtIGwpO1xuICAgICAgY29uc3QgZiA9IG4gPT5cbiAgICAgICAgbCAtIGEgKiBNYXRoLm1heCgtMSwgTWF0aC5taW4oayhuKSAtIDMsIE1hdGgubWluKDkgLSBrKG4pLCAxKSkpO1xuICAgICAgcmV0dXJuIFsyNTUgKiBmKDApLCAyNTUgKiBmKDgpLCAyNTUgKiBmKDQpXTtcbiAgICB9O1xuICBcbiAgICBwYXJlbnQub25VcGRhdGUgPSBmdW5jdGlvbiAoKXtcbiAgICAgIFxuICAgICAgaWYocGFyZW50LmdldEVuYWJsZWQoKSl7XG4gICAgICAgIHZhciByZ2IgPSBoc2wycmdiKERhdGUubm93KCkvMTAgJSAzNjAsMTAwLDUwKTtcbiAgICAgICAgdmFyIHJlZCA9IHJnYlswXTtcbiAgICAgICAgdmFyIGdyZWVuID0gcmdiWzFdO1xuICAgICAgICB2YXIgYmx1ZSA9IHJnYlsyXTtcbiAgICAgICAgdmFyIGFscGhhID0gMjU1O1xuICAgICAgICBNb2RBUEkubWNpbnN0YW5jZS4kdGhlV29ybGQuJGNsb3VkQ29sb3VyID0gQmlnSW50KChyZWQgPDwgMjQpICsgKGdyZWVuIDw8IDE2KSArIChibHVlIDw8IDgpICsgKGFscGhhKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwYXJlbnQub25EaXNhYmxlID0gZnVuY3Rpb24oKXtcbiAgICAgIGlmKE1vZEFQSS5tY2luc3RhbmNlLiR0aGVXb3JsZCAhPSBudWxsKXtcbiAgICAgICAgdmFyIHJnYiA9IGhzbDJyZ2IoMCwwLDEwMCk7XG4gICAgICAgIHZhciByZWQgPSByZ2JbMF07XG4gICAgICAgIHZhciBncmVlbiA9IHJnYlsxXTtcbiAgICAgICAgdmFyIGJsdWUgPSByZ2JbMl07XG4gICAgICAgIHZhciBhbHBoYSA9IDI1NTtcbiAgICAgICAgTW9kQVBJLm1jaW5zdGFuY2UuJHRoZVdvcmxkLiRjbG91ZENvbG91ciA9IEJpZ0ludCgocmVkIDw8IDI0KSArIChncmVlbiA8PCAxNikgKyAoYmx1ZSA8PCA4KSArIChhbHBoYSkpXG4gICAgICB9XG4gICAgfVxuICB9IiwKICAiaW1wb3J0ICogYXMgZmxpZ2h0TU9EIGZyb20gXCIuLi9jaGVhdHMvZmxpZ2h0LnRzXCI7XG5pbXBvcnQgKiBhcyBmdWxsYnJpZ2h0TU9EIGZyb20gXCIuLi9jaGVhdHMvYXV0b2Zpc2gudHNcIjtcbmltcG9ydCAqIGFzIHN0ZXBNT0QgZnJvbSBcIi4uL2NoZWF0cy9zdGVwLnRzXCI7XG5pbXBvcnQgKiBhcyBhdXRvZmlzaE1PRCBmcm9tIFwiLi4vY2hlYXRzL2F1dG9maXNoLnRzXCI7XG5pbXBvcnQgKiBhcyBzZXJ2ZXJjcmFzaGVyTU9EIGZyb20gXCIuLi9jaGVhdHMvc2VydmVyY3Jhc2hlci50c1wiO1xuaW1wb3J0ICogYXMgcmdiY2xvdWRzTU9EIGZyb20gXCIuLi9jaGVhdHMvcmdiY2xvdWRzLnRzXCI7XG5pbXBvcnQgKiBhcyB1aSBmcm9tIFwiLi4vZ3VpXCI7XG5cbmZ1bmN0aW9uIHRlbXBsYXRlKG1vZCkge1xuICAvLyBtb2R1bGUgZnVuY3Rpb25zXG5cbiAgdGhpcy5lbmFibGVkRE9OT1RVU0UgPSBmYWxzZTtcbiAgdGhpcy5pbml0ID0gZnVuY3Rpb24oKSB7IH07XG4gIHRoaXMub25FbmFibGUgPSBmdW5jdGlvbigpIHsgfTtcbiAgdGhpcy5vbkRpc2FibGUgPSBmdW5jdGlvbigpIHsgfTtcbiAgdGhpcy5lbmFibGUgPSBmdW5jdGlvbigpIHsgdGhpcy5lbmFibGVkRE9OT1RVU0UgPSB0cnVlOyB0aGlzLm9uRW5hYmxlKCk7IHVpLnJlZnJlc2hNb2R1bGVzKCkgfTtcbiAgdGhpcy5kaXNhYmxlID0gZnVuY3Rpb24oKSB7IHRoaXMuZW5hYmxlZERPTk9UVVNFID0gZmFsc2U7IHRoaXMub25EaXNhYmxlKCk7IHVpLnJlZnJlc2hNb2R1bGVzKCkgfTtcbiAgdGhpcy5vbktleSA9IGZ1bmN0aW9uKGUpe307XG4gIHRoaXMub25NQ0tleSA9IGZ1bmN0aW9uKGUpe307XG4gIHRoaXMuZ2V0RW5hYmxlZCA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpcy5lbmFibGVkRE9OT1RVU0U7IH07XG4gIHRoaXMudG9nZ2xlID0gZnVuY3Rpb24oKSB7IHRoaXMuZW5hYmxlZERPTk9UVVNFID0gIXRoaXMuZW5hYmxlZERPTk9UVVNFOyBpZiAodGhpcy5lbmFibGVkRE9OT1RVU0UpIHsgdGhpcy5vbkVuYWJsZSgpIH0gZWxzZSB7IHRoaXMub25EaXNhYmxlKCk7IH0gfTtcbiAgLy9tYyBmdW5jdGlvbnNcbiAgdGhpcy5vblVwZGF0ZSA9IGZ1bmN0aW9uKCkgeyB9O1xuXG4gIHRoaXMuYWxlcnQgPSBmdW5jdGlvbigpIHsgYWxlcnQoKSB9O1xuXG4gIHRoaXMuc2V0dGluZ3MgPSBbXVxuXG4gIG1vZC5pbml0KHRoaXMpO1xufVxuXG5leHBvcnQgdmFyIGNhdGVnb3JpZXMgPSB7XG4gIG1vdmVtZW50OiBcIk1vdmVtZW50XCIsXG4gIHBsYXllcjogXCJQbGF5ZXJcIixcbiAgcmVuZGVyOiBcIlJlbmRlclwiLFxuICBmdW46IFwiRnVuXCJcbn1cblxuZXhwb3J0IHZhciBtb2R1bGVzID0ge1xuICBmbGlnaHQ6IHtcbiAgICBuYW1lOiBcIkZsaWdodFwiLFxuICAgIGZ1bmN0aW9uOiBuZXcgdGVtcGxhdGUoZmxpZ2h0TU9EKSxcbiAgICBjYXRlZ29yeTogXCJNb3ZlbWVudFwiLFxuICAgIGRlc2NyaXB0aW9uOiBcIkFsbG93cyB5b3UgdG8gZmx5XCIsXG4gIH0sXG4gIHN0ZXA6IHtcbiAgICBuYW1lOiBcIlN0ZXBcIixcbiAgICBmdW5jdGlvbjogbmV3IHRlbXBsYXRlKHN0ZXBNT0QpLFxuICAgIGNhdGVnb3J5OiBcIk1vdmVtZW50XCIsXG4gICAgZGVzY3JpcHRpb246IFwiQWxsb3dzIHlvdSB0byBzdGVwXCIsXG4gIH0sXG4gIGF1dG9maXNoOiB7XG4gICAgbmFtZTogXCJBdXRvRmlzaFwiLFxuICAgIGZ1bmN0aW9uOiBuZXcgdGVtcGxhdGUoYXV0b2Zpc2hNT0QpLFxuICAgIGNhdGVnb3J5OiBcIlBsYXllclwiLFxuICAgIGRlc2NyaXB0aW9uOiBcIkF1dG9tYXRpY2FsbHkgY2FzdHMgYW5kIHJlZWxzIHJvZFwiLFxuICB9LFxuXG4gIHNlcnZlcmNyYXNoZXI6IHtcbiAgICBuYW1lOiBcIlNlcnZlciBDcmFzaGVyXCIsXG4gICAgZnVuY3Rpb246IG5ldyB0ZW1wbGF0ZShzZXJ2ZXJjcmFzaGVyTU9EKSxcbiAgICBjYXRlZ29yeTogXCJFeHBsb2l0XCIsXG4gICAgZGVzY3JpcHRpb246IFwiU2VuZHMganVzdCBhIGZldyBzd2luZyBwYWNrZXRzIDspXCIsXG4gIH0sXG5cbiAgcmdiY2xvdWRzOiB7XG4gICAgbmFtZTogXCJSR0IgQ2xvdWRzXCIsXG4gICAgZnVuY3Rpb246IG5ldyB0ZW1wbGF0ZShyZ2JjbG91ZHNNT0QpLFxuICAgIGNhdGVnb3J5OiBcIlJlbmRlclwiLFxuICAgIGRlc2NyaXB0aW9uOiBcIkNsb3VkcyBnbyB3ZWVlZVwiLFxuICB9XG59IiwKICAiaW1wb3J0IHsgY2xpZW50TmFtZSB9IGZyb20gXCIuL3V0aWwvY2xpZW50TmFtZVwiO1xuaW1wb3J0IHsgbW9kdWxlcywgY2F0ZWdvcmllcyB9IGZyb20gXCIuL3V0aWwvYWN0dWFsTW9kdWxlc1wiO1xuXG5cbi8vIGRlbGV0ZSB0aGUgdWlcbmV4cG9ydCBmdW5jdGlvbiBkZXN0cm95KCkge1xuICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJ1aVwiKSAhPSBudWxsKSB7XG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJ1aVwiKS5yZW1vdmUoKTtcbiAgfVxufVxuXG52YXIgY29udGFpbmVyO1xuXG5cbi8vIGNoZWNrIGlmIG9wZW5cbmV4cG9ydCBmdW5jdGlvbiBpc09wZW4oKSB7XG4gIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInVpXCIpID09IG51bGwpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cblxuXG4vLyBvcGVuIGEgc2V0dGluZyBtZW51XG5leHBvcnQgZnVuY3Rpb24gc2V0dGluZyhtb2R1bGUpIHtcbiAgLyp2YXIgbHN0ID0gW1xuICAgIHtcbiAgICAgIG5hbWU6IFwiTW9kZVwiLFxuICAgICAgdHlwZTogXCJMaXN0XCIsXG4gICAgICBtb2RlczogW1wiQWJpbGl0aWVzXCIsIFwiUGFja2V0XCJdLFxuICAgICAgY3VycmVudDogMFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJTcGVlZFwiLFxuICAgICAgdHlwZTogXCJTbGlkZXJcIixcbiAgICAgIG1pbjogMSxcbiAgICAgIG1heDogNCxcbiAgICAgIGN1cnJlbnQ6IDFcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwiVGVzdFwiLFxuICAgICAgdHlwZTogXCJCb29sZWFuXCIsXG4gICAgICB0b2dnbGVkOiB0cnVlXG4gICAgfSxcbiAgXSovXG4gIHZhciBsc3QgPSBtb2R1bGUuZnVuY3Rpb24uc2V0dGluZ3M7XG4gIGNvbnNvbGUubG9nKGxzdCk7XG4gIHZhciBzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgcy5jbGFzc05hbWUgPSBcInNldHRpbmdcIjtcbiAgcy5zdHlsZS5wb3NpdGlvbiA9IFwiYWJzb2x1dGVcIjtcbiAgcy5zdHlsZS5jb2xvciA9IFwid2hpdGVcIjtcbiAgcy5zdHlsZS5iYWNrZHJvcEZpbHRlciA9IFwiYmx1cig4cHgpXCI7XG4gIHMuc3R5bGUuYmFja2dyb3VuZCA9IFwicmdiYSgwLDAsMCwwLjUpXCI7XG4gIHMuc3R5bGUuYm9yZGVyUmFkaXVzID0gXCIxNXB4XCI7XG4gIHMuc3R5bGUucGFkZGluZyA9IFwiMTVweFwiO1xuICBzLnN0eWxlLmZvbnRGYW1pbHkgPSBcIm1vbm9zcGFjZVwiO1xuICBzLnN0eWxlLm92ZXJmbG93WSA9IFwiaGlkZGVuXCI7XG4gIHMuc3R5bGUuYW5pbWF0aW9uID0gXCJyZ2IgNHMgbGluZWFyIGluZmluaXRlXCI7XG4gIHMuc3R5bGUud2lkdGggPSBcIjE1JVwiO1xuICBzLnN0eWxlLmhlaWdodCA9IFwiNTAlXCI7XG4gIHMuc3R5bGUudG9wID0gXCIxMDBweFwiXG4gIHMuc3R5bGUubGVmdCA9IFwiMTAwcHhcIlxuXG4gIHMuc3R5bGUuekluZGV4ID0gXCIxMDAwXCI7XG4gIHMuc3R5bGUuYmFja2Ryb3BGaWx0ZXIgPSBcImJsdXIoOHB4KVwiO1xuXG4gIHMuc3R5bGUucmVzaXplID0gXCJib3RoXCI7XG5cbiAgY29uc3QgdGl0bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICB0aXRsZS5pbm5lclRleHQgPSBtb2R1bGUubmFtZTtcbiAgdGl0bGUuc3R5bGUuZm9udFNpemUgPSBcIjIycHhcIjtcbiAgcy5hcHBlbmRDaGlsZCh0aXRsZSk7XG5cbiAgdmFyIGNsb3NlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgY2xvc2UuaW5uZXJUZXh0ID0gXCJYXCI7XG4gIGNsb3NlLnN0eWxlLmZvbnRTaXplID0gXCIyOHB4XCI7XG4gIGNsb3NlLnN0eWxlLnBvc2l0aW9uID0gXCJhYnNvbHV0ZVwiO1xuICBjbG9zZS5zdHlsZS5yaWdodCA9IFwiMTVweFwiO1xuICBjbG9zZS5zdHlsZS50b3AgPSBcIjEwcHhcIjtcbiAgY2xvc2Uuc3R5bGUuY3Vyc29yID0gXCJwb2ludGVyXCI7XG4gIGNsb3NlLm9uY2xpY2sgPSBmdW5jdGlvbigpIHtcbiAgICBzLnJlbW92ZSgpO1xuICB9O1xuICBzLmFwcGVuZENoaWxkKGNsb3NlKTtcblxuXG4gIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQocyk7XG5cbiAgZm9yIChsZXQgaSBpbiBsc3QpIHtcbiAgICBpZiAobHN0Lmhhc093blByb3BlcnR5KGkpKSB7XG5cbiAgICAgIHZhciBiZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICBiZy5zdHlsZS5iYWNrZ3JvdW5kID0gXCJyZ2JhKDEwMCwxMDAsMTAwLDAuNSlcIjtcbiAgICAgIGJnLnN0eWxlLm1hcmdpbiA9IFwiNXB4XCI7XG4gICAgICBiZy5zdHlsZS5wYWRkaW5nID0gXCI1cHhcIjtcbiAgICAgIGJnLnN0eWxlLmJvcmRlclJhZGl1cyA9IFwiMTBweFwiO1xuICAgICAgcy5hcHBlbmRDaGlsZChiZyk7XG4gICAgICBpZiAobHN0W2ldLnR5cGUgPT0gXCJMaXN0XCIpIHtcbiAgICAgICAgdmFyIHNlbERlc2MgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgICBzZWxEZXNjLnN0eWxlLmZvbnRTaXplID0gXCIyMHB4XCI7XG4gICAgICAgIHNlbERlc2MuaW5uZXJUZXh0ID0gYCR7bHN0W2ldLm5hbWV9IC0gJHtsc3RbaV0uY3VycmVudH1gO1xuICAgICAgICBiZy5hcHBlbmRDaGlsZChzZWxEZXNjKTtcbiAgICAgICAgdmFyIHNlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzZWxlY3RcIik7XG4gICAgICAgIHNlbC5vbmNoYW5nZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIGxzdFtpXS5jdXJyZW50ID0gcGFyc2VJbnQoc2VsLnZhbHVlKTtcbiAgICAgICAgICBzZWxEZXNjLmlubmVyVGV4dCA9IGAke2xzdFtpXS5uYW1lfSAtICR7bHN0W2ldLmN1cnJlbnR9YDtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBqIGluIGxzdFtpXS5tb2Rlcykge1xuICAgICAgICAgIGlmIChsc3RbaV0ubW9kZXMuaGFzT3duUHJvcGVydHkoaikpIHtcbiAgICAgICAgICAgIHZhciBvcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwib3B0aW9uXCIpO1xuICAgICAgICAgICAgb3B0LmlubmVyVGV4dCA9IGxzdFtpXS5tb2Rlc1tqXTtcbiAgICAgICAgICAgIG9wdC52YWx1ZSA9IGogKyBcIlwiO1xuICAgICAgICAgIH1cbiAgICAgICAgICBiZy5hcHBlbmRDaGlsZChzZWwpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGxzdFtpXS50eXBlID09IFwiU2xpZGVyXCIpIHtcbiAgICAgICAgdmFyIHNsaWRlRGVzYyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICAgIHNsaWRlRGVzYy5zdHlsZS5mb250U2l6ZSA9IFwiMjBweFwiO1xuICAgICAgICBzbGlkZURlc2MuaW5uZXJUZXh0ID0gYCR7bHN0W2ldLm5hbWV9IC0gJHtsc3RbaV0uY3VycmVudH1gO1xuICAgICAgICBiZy5hcHBlbmRDaGlsZChzbGlkZURlc2MpO1xuICAgICAgICB2YXIgc2xpZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XG4gICAgICAgIHNsaWRlLnR5cGUgPSBcInJhbmdlXCI7XG4gICAgICAgIHNsaWRlLnN0ZXAgPSBsc3RbaV0uc3RlcDtcbiAgICAgICAgc2xpZGUubWluID0gbHN0W2ldLm1pbjtcbiAgICAgICAgc2xpZGUubWF4ID0gbHN0W2ldLm1heDtcbiAgICAgICAgc2xpZGUudmFsdWUgPSBsc3RbaV0uY3VycmVudDtcbiAgICAgICAgc2xpZGUub25jaGFuZ2UgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICBsc3RbaV0uY3VycmVudCA9IHBhcnNlRmxvYXQoc2xpZGUudmFsdWUpO1xuICAgICAgICAgIHNsaWRlRGVzYy5pbm5lclRleHQgPSBgJHtsc3RbaV0ubmFtZX0gLSAke2xzdFtpXS5jdXJyZW50fWA7XG4gICAgICAgIH1cbiAgICAgICAgYmcuYXBwZW5kQ2hpbGQoc2xpZGUpO1xuICAgICAgfSBlbHNlIGlmIChsc3RbaV0udHlwZSA9PSBcIkJvb2xlYW5cIikge1xuICAgICAgICB2YXIgYm9vbERlc2MgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgICBib29sRGVzYy5zdHlsZS5mb250U2l6ZSA9IFwiMjBweFwiO1xuICAgICAgICBib29sRGVzYy5pbm5lclRleHQgPSBgJHtsc3RbaV0ubmFtZX0gLSAke2xzdFtpXS50b2dnbGVkfWA7XG4gICAgICAgIGJnLmFwcGVuZENoaWxkKGJvb2xEZXNjKTtcbiAgICAgICAgdmFyIGJvb2wgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XG4gICAgICAgIGJvb2wudHlwZSA9IFwiY2hlY2tib3hcIjtcbiAgICAgICAgYm9vbC5jaGVja2VkID0gbHN0W2ldLnRvZ2dsZWQ7XG4gICAgICAgIGJvb2wub25jaGFuZ2UgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICBsc3RbaV0udG9nZ2xlZCA9IGJvb2wuY2hlY2tlZDtcbiAgICAgICAgICBib29sRGVzYy5pbm5lclRleHQgPSBgJHtsc3RbaV0ubmFtZX0gLSAke2xzdFtpXS50b2dnbGVkfWA7XG4gICAgICAgIH1cbiAgICAgICAgYmcuYXBwZW5kQ2hpbGQoYm9vbCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cblxuLy9jcmVhdGUgdGhlIGd1aVxuZXhwb3J0IGZ1bmN0aW9uIG9wZW4oKSB7XG4gIGRvY3VtZW50LmV4aXRQb2ludGVyTG9jaygpO1xuICB2YXIgY24gPSBjbGllbnROYW1lO1xuXG4gIGNvbnN0IHVpID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcblxuICB1aS5pZCA9IFwidWlcIjtcbiAgdWkuc3R5bGUucG9zaXRpb24gPSBcImZpeGVkXCI7XG4gIHVpLnN0eWxlLndpZHRoID0gXCI2NiVcIjtcbiAgdWkuc3R5bGUuaGVpZ2h0ID0gXCI2NiVcIjtcbiAgdWkuc3R5bGUudG9wID0gZG9jdW1lbnQuYm9keS5jbGllbnRIZWlnaHQgKiAwLjE2NSArIFwicHhcIjtcbiAgdWkuc3R5bGUubGVmdCA9IGRvY3VtZW50LmJvZHkuY2xpZW50V2lkdGggKiAwLjE2NSArIFwicHhcIjtcbiAgdWkuc3R5bGUuY29sb3IgPSBcIndoaXRlXCI7XG4gIHVpLnN0eWxlLmJhY2tkcm9wRmlsdGVyID0gXCJibHVyKDhweClcIjtcbiAgdWkuc3R5bGUuYmFja2dyb3VuZCA9IFwicmdiYSgwLDAsMCwwLjc1KVwiO1xuICB1aS5zdHlsZS5ib3JkZXJSYWRpdXMgPSBcIjE1cHhcIjtcbiAgdWkuc3R5bGUucGFkZGluZyA9IFwiMTVweFwiO1xuICB1aS5zdHlsZS5ib3hTaGFkb3cgPSBcIjBweCAwcHggNDBweCByZ2JhKDAsIDE5NSwgMjU1LDAuNSlcIjtcbiAgdWkuc3R5bGUuZm9udEZhbWlseSA9IFwibW9ub3NwYWNlXCI7XG4gIHVpLnN0eWxlLm92ZXJmbG93WSA9IFwiaGlkZGVuXCI7XG4gIHVpLnN0eWxlLmFuaW1hdGlvbiA9IFwicmdiIDRzIGxpbmVhciBpbmZpbml0ZVwiO1xuXG5cbiAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh1aSk7XG5cbiAgY29uc3QgdGl0bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICB0aXRsZS5pbm5lclRleHQgPSBjbjtcbiAgdGl0bGUuc3R5bGUuZm9udFNpemUgPSBcIjI0cHhcIjtcbiAgdGl0bGUuc3R5bGUubWFyZ2luID0gXCI1cHhcIjtcbiAgdWkuYXBwZW5kQ2hpbGQodGl0bGUpO1xuXG4gIHZhciBzZWFyY2ggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XG4gIHNlYXJjaC5zdHlsZS53aWR0aCA9IFwiMzMlXCI7XG4gIHNlYXJjaC50eXBlID0gXCJ0ZXh0XCI7XG4gIHNlYXJjaC5zdHlsZS5ib3JkZXIgPSBcInNvbGlkIDJweCByZ2JhKDIwMCwyMDAsMjAwLDAuNSlcIjtcbiAgc2VhcmNoLnN0eWxlLmJvcmRlclJhZGl1cyA9IFwiMTBweFwiO1xuICBzZWFyY2guc3R5bGUuY29sb3IgPSBcInJnYmEoMjU1LDI1NSwyNTUsMSlcIlxuICBzZWFyY2guc3R5bGUuZGlzcGxheSA9IFwiaW5saW5lLWJsb2NrXCI7XG4gIHNlYXJjaC5zdHlsZS5wYWRkaW5nID0gXCI4cHhcIjtcbiAgc2VhcmNoLnN0eWxlLm1hcmdpbkxlZnQgPSBcIjIwcHhcIjtcbiAgc2VhcmNoLnN0eWxlLmZvbnRTaXplID0gXCIyMnB4XCI7XG4gIHNlYXJjaC5zdHlsZS5iYWNrZ3JvdW5kID0gXCJyZ2JhKDUwLDUwLDUwLC4yNClcIjtcbiAgc2VhcmNoLnBsYWNlaG9sZGVyID0gXCLwn5SO77iOIFNlYXJjaFwiXG4gIHNlYXJjaC5zdHlsZS5iYWNrZHJvcEZpbHRlciA9IFwiYmx1cig4cHgpXCI7XG4gIHRpdGxlLmFwcGVuZENoaWxkKHNlYXJjaCk7XG5cbiAgY29uc3QgY2xvc2UgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICBjbG9zZS5pbm5lclRleHQgPSBcIlhcIjtcbiAgY2xvc2Uuc3R5bGUuZm9udFNpemUgPSBcIjI4cHhcIjtcbiAgY2xvc2Uuc3R5bGUucG9zaXRpb24gPSBcImFic29sdXRlXCI7XG4gIGNsb3NlLnN0eWxlLnJpZ2h0ID0gXCIxNXB4XCI7XG4gIGNsb3NlLnN0eWxlLnRvcCA9IFwiMTBweFwiO1xuICBjbG9zZS5zdHlsZS5jdXJzb3IgPSBcInBvaW50ZXJcIjtcbiAgY2xvc2Uub25jbGljayA9IGZ1bmN0aW9uKCkge1xuICAgIGRlc3Ryb3koKTtcbiAgfTtcbiAgdWkuYXBwZW5kQ2hpbGQoY2xvc2UpO1xuXG5cblxuICB2YXIgYmFyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgYmFyLnN0eWxlLm92ZXJmbG93WCA9IFwic2Nyb2xsXCI7XG4gIHVpLmFwcGVuZENoaWxkKGJhcik7XG5cbiAgZm9yIChsZXQgaSBpbiBjYXRlZ29yaWVzKSB7XG4gICAgaWYgKGNhdGVnb3JpZXMuaGFzT3duUHJvcGVydHkoaSkpIHtcbiAgICAgIGNvbnN0IGNhdGVnb3J5ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgIGNhdGVnb3J5LmlubmVyVGV4dCA9IGNhdGVnb3JpZXNbaV07XG4gICAgICBjYXRlZ29yeS5zdHlsZS5mb250U2l6ZSA9IFwiMThweFwiO1xuICAgICAgY2F0ZWdvcnkuc3R5bGUuY3Vyc29yID0gXCJwb2ludGVyXCI7XG4gICAgICBjYXRlZ29yeS5zdHlsZS5kaXNwbGF5ID0gXCJpbmxpbmUtYmxvY2tcIjtcbiAgICAgIGNhdGVnb3J5LnN0eWxlLnBhZGRpbmcgPSBcIjEwcHhcIjtcbiAgICAgIGNhdGVnb3J5LnN0eWxlLm1hcmdpbiA9IFwiNXB4XCI7XG4gICAgICBjYXRlZ29yeS5zdHlsZS5iYWNrZ3JvdW5kID0gXCJyZ2JhKDEwMCwxMDAsMTAwLDAuNSlcIjtcbiAgICAgIGNhdGVnb3J5LnN0eWxlLmJvcmRlclJhZGl1cyA9IFwiNXB4XCI7XG4gICAgICBjYXRlZ29yeS5vbmNsaWNrID0gZnVuY3Rpb24oKSB7XG5cbiAgICAgIH07XG5cbiAgICAgIGJhci5hcHBlbmRDaGlsZChjYXRlZ29yeSk7XG4gICAgfVxuICB9XG5cbiAgY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNlbnRlclwiKTtcbiAgY29udGFpbmVyLnN0eWxlLmhlaWdodCA9IFwiMTAwJVwiO1xuICBjb250YWluZXIuc3R5bGUub3ZlcmZsb3dZID0gXCJzY3JvbGxcIjtcbiAgdWkuYXBwZW5kQ2hpbGQoY29udGFpbmVyKTtcblxuXG4gIHJlZnJlc2hNb2R1bGVzKCk7XG59XG5cblxuLy8gUmVsb2FkIG1vZHVsZSBsaXN0XG5leHBvcnQgZnVuY3Rpb24gcmVmcmVzaE1vZHVsZXMoKSB7XG4gIGlmIChpc09wZW4oKSkge1xuICAgIGNvbnRhaW5lci5pbm5lckhUTUwgPSBcIlwiO1xuICAgIGZvciAobGV0IGkgaW4gbW9kdWxlcykge1xuICAgICAgaWYgKG1vZHVsZXMuaGFzT3duUHJvcGVydHkoaSkpIHtcbiAgICAgICAgdmFyIG1vZGwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgICB2YXIgbW9kbHRpdGxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgICAgbW9kbHRpdGxlLmlubmVyVGV4dCA9IGAke21vZHVsZXNbaV0ubmFtZX1gO1xuICAgICAgICBtb2RsdGl0bGUuc3R5bGUuZm9udFNpemUgPSBcIjIycHhcIjtcbiAgICAgICAgbW9kbHRpdGxlLnN0eWxlLmZvbnRXZWlnaHQgPSBcImJvbGRcIjtcbiAgICAgICAgbW9kbC5hcHBlbmRDaGlsZChtb2RsdGl0bGUpO1xuXG4gICAgICAgIG1vZGwuc3R5bGUudGV4dEFsaWduID0gXCJsZWZ0XCI7XG4gICAgICAgIG1vZGwuc3R5bGUuZGlzcGxheSA9IFwiaW5saW5lLWJsb2NrXCI7XG5cbiAgICAgICAgbW9kbC5zdHlsZS53aWR0aCA9IFwiMjUlXCI7XG4gICAgICAgIG1vZGwuc3R5bGUuaGVpZ2h0ID0gXCIyNSVcIjtcbiAgICAgICAgbW9kbC5zdHlsZS5wYWRkaW5nID0gXCI1cHhcIjtcbiAgICAgICAgbW9kbC5zdHlsZS5ib3JkZXJSYWRpdXMgPSBcIjE1cHhcIjtcbiAgICAgICAgbW9kbC5zdHlsZS5tYXJnaW4gPSBcIjEwcHhcIjtcbiAgICAgICAgbW9kbC5zdHlsZS5jdXJzb3IgPSBcInBvaW50ZXJcIjtcblxuICAgICAgICBtb2RsLnN0eWxlLmJhY2tncm91bmQgPSBcInJnYmEoMTAwLDEwMCwxMDAsMC41KVwiO1xuICAgICAgICBpZiAobW9kdWxlc1tpXS5mdW5jdGlvbi5nZXRFbmFibGVkKCkpIHtcbiAgICAgICAgICBtb2RsLnN0eWxlLmJveFNoYWRvdyA9IFwiMHB4IDBweCAxNXB4IHJnYmEoMCwgMjU1LCAwLDEpXCI7XG4gICAgICAgIH1cblxuICAgICAgICBtb2RsLm9uY2xpY2sgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgbW9kdWxlc1tpXS5mdW5jdGlvbi50b2dnbGUoKTtcbiAgICAgICAgICByZWZyZXNoTW9kdWxlcygpO1xuICAgICAgICB9O1xuXG4gICAgICAgIG1vZGwub25jb250ZXh0bWVudSA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICBuZXcgc2V0dGluZyhtb2R1bGVzW2ldKTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhtb2R1bGVzW2ldKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChtb2RsKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsCiAgImltcG9ydCB7IHJlcXVpcmVfYWxsIH0gZnJvbSBcIi4vcmVxdWlyZV9hbGwudHNcIjtcbnJlcXVpcmVfYWxsKClcbmltcG9ydCB7IGNsaWVudE5hbWUgfSBmcm9tIFwiLi91dGlsL2NsaWVudE5hbWUudHNcIjtcbmltcG9ydCB7IGxvZ1RvQ29uc29sZSB9IGZyb20gXCIuL3V0aWwvY29uc29sZUxvZ2dlclwiO1xuaW1wb3J0IHsgbG9nVG9DaGF0IH0gZnJvbSBcIi4vdXRpbC9jaGF0TG9nZ2VyXCI7XG4vL2ltcG9ydCB7IGluaXRodWQgfSBmcm9tIFwiLi9IVUQudHNcIjtcbmltcG9ydCAqIGFzIGFzc2V0cyBmcm9tIFwiLi9hc3NldHNcIjtcbmltcG9ydCAqIGFzIHVpIGZyb20gXCIuL2d1aS50c1wiO1xuXG5sb2dUb0NvbnNvbGUoXCJJbml0Li4uXCIpO1xubG9nVG9DaGF0KFwiSW5pdC4uLlwiKTtcbi8vaW5pdGh1ZCgpXG5sb2dUb0NoYXQoXCJMb2FkaW5nIG1vZHVsZXMuLi5cIik7XG5cbmltcG9ydCB7IG1vZHVsZXMgfSBmcm9tIFwiLi91dGlsL2FjdHVhbE1vZHVsZXNcIjtcblxuXG5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCBmdW5jdGlvbihlKSB7XG4gIGlmIChcbiAgICBlLmxvY2F0aW9uID09IEtleWJvYXJkRXZlbnQuRE9NX0tFWV9MT0NBVElPTl9SSUdIVCAmJlxuICAgIGUua2V5ID09IFwiU2hpZnRcIiAmJlxuICAgICF1aS5pc09wZW4oKVxuICApIHtcbiAgICB1aS5vcGVuKCk7XG4gIH1cbiAgZm9yIChsZXQga2V5IGluIG1vZHVsZXMpIHtcbiAgICBpZiAobW9kdWxlcy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICBtb2R1bGVzW2tleV0uZnVuY3Rpb24ub25LZXkoZSk7XG4gICAgfVxuICB9XG59KTtcblxuTW9kQVBJLmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlcIiwgZnVuY3Rpb24oZSkge1xuICBpZiAoZS5rZXkgPT0gNTQpIHtcbiAgICB1aS5kZXN0cm95O1xuICB9XG4gIGZvciAobGV0IGtleSBpbiBtb2R1bGVzKSB7XG4gICAgaWYgKG1vZHVsZXMuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgbW9kdWxlc1trZXldLmZ1bmN0aW9uLm9uTUNLZXkoZSk7XG4gICAgfVxuICB9XG59KTtcblxuTW9kQVBJLmFkZEV2ZW50TGlzdGVuZXIoXCJ1cGRhdGVcIiwgZnVuY3Rpb24oKSB7XG4gIGZvciAobGV0IGtleSBpbiBtb2R1bGVzKSB7XG4gICAgaWYgKG1vZHVsZXMuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgbW9kdWxlc1trZXldLmZ1bmN0aW9uLm9uVXBkYXRlKCk7XG4gICAgfVxuICB9XG59KTtcblxuY29uc3Qgc3R5bGVTaGVldCA9IGRvY3VtZW50LnN0eWxlU2hlZXRzWzBdO1xuXG5zdHlsZVNoZWV0Lmluc2VydFJ1bGUoYFxuOjotd2Via2l0LXNjcm9sbGJhciB7XG4gIHdpZHRoOiAxMHB4O1xufWApO1xuXG5zdHlsZVNoZWV0Lmluc2VydFJ1bGUoYFxuOjotd2Via2l0LXNjcm9sbGJhci10cmFjayB7XG4gIGJhY2tncm91bmQ6IHJnYmEoMCwwLDAsMCk7XG59YCk7XG5cbnN0eWxlU2hlZXQuaW5zZXJ0UnVsZShgXG46Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHtcbmJhY2tncm91bmQ6IHJnYmEoMTAwLDEwMCwxMDAsMC41KTtcbmZpbHRlcjogYmx1cig0cHgpO1xufWApO1xuXG5zdHlsZVNoZWV0Lmluc2VydFJ1bGUoYEBrZXlmcmFtZXMgcmdiIHtcbiAgMCUgeyBib3gtc2hhZG93OiAwcHggMHB4IDQwcHggcmdiYSgyNTUsIDAsIDAsMC43NSk7IH1cbiAgMTYlIHsgYm94LXNoYWRvdzogMHB4IDBweCA0MHB4IHJnYmEoMjU1LCAyNTUsIDAsMC43NSk7IH1cbiAgMzMlIHsgYm94LXNoYWRvdzogMHB4IDBweCA0MHB4IHJnYmEoMCwgMjU1LCAwLDAuNzUpOyB9XG4gIDUwJSB7IGJveC1zaGFkb3c6IDBweCAwcHggNDBweCByZ2JhKDAsIDI1NSwgMjU1LDAuNzUpOyB9XG4gIDY2JSB7IGJveC1zaGFkb3c6IDBweCAwcHggNDBweCByZ2JhKDAsIDAsIDI1NSwwLjc1KTsgfVxuICA4MyUgeyBib3gtc2hhZG93OiAwcHggMHB4IDQwcHggcmdiYSgyNTUsIDAsIDI1NSwwLjc1KTsgfVxuICAxMDAlIHsgYm94LXNoYWRvdzogMHB4IDBweCA0MHB4IHJnYmEoMjU1LCAwLCAwLDAuNzUpOyB9XG59YCk7XG5cbmZ1bmN0aW9uIGN1c3RvbVVJKCkge1xuICAvL0B0cy1pZ25vcmVcbiAgaWYgKE1vZEFQSS5tY2luc3RhbmNlLiRjdXJyZW50U2NyZWVuICE9IG51bGwpIHtcbiAgICBpZiAoXG4gICAgICBNb2RBUEkuY3VycmVudFNjcmVlbigpLnN0YXJ0c1dpdGgoXCJuZXQubWluZWNyYWZ0LmNsaWVudC5ndWkuR3VpTWFpbk1lbnVcIilcbiAgICApIHtcbiAgICAgIC8vQHRzLWlnbm9yZVxuICAgICAgdmFyIHNpbmdsZVBsYXllciA9XG4gICAgICAgIE1vZEFQSS5tY2luc3RhbmNlLiRjdXJyZW50U2NyZWVuLiRidXR0b25MaXN0LiRhcnJheTEuZGF0YVswXTtcbiAgICAgIC8vQHRzLWlnbm9yZVxuICAgICAgdmFyIG11bHRpUGxheWVyID1cbiAgICAgICAgTW9kQVBJLm1jaW5zdGFuY2UuJGN1cnJlbnRTY3JlZW4uJGJ1dHRvbkxpc3QuJGFycmF5MS5kYXRhWzFdO1xuICAgICAgLy9AdHMtaWdub3JlXG4gICAgICB2YXIgbW9kcyA9IE1vZEFQSS5tY2luc3RhbmNlLiRjdXJyZW50U2NyZWVuLiRidXR0b25MaXN0LiRhcnJheTEuZGF0YVsyXTtcbiAgICAgIC8vQHRzLWlnbm9yZVxuICAgICAgdmFyIGZvcmtPbkdpdEh1YiA9XG4gICAgICAgIE1vZEFQSS5tY2luc3RhbmNlLiRjdXJyZW50U2NyZWVuLiRidXR0b25MaXN0LiRhcnJheTEuZGF0YVszXTtcbiAgICAgIC8vQHRzLWlnbm9yZVxuICAgICAgdmFyIG9wdGlvbnMgPVxuICAgICAgICBNb2RBUEkubWNpbnN0YW5jZS4kY3VycmVudFNjcmVlbi4kYnV0dG9uTGlzdC4kYXJyYXkxLmRhdGFbNF07XG4gICAgICAvL0B0cy1pZ25vcmVcbiAgICAgIHZhciBlZGl0UHJvZmlsZSA9XG4gICAgICAgIE1vZEFQSS5tY2luc3RhbmNlLiRjdXJyZW50U2NyZWVuLiRidXR0b25MaXN0LiRhcnJheTEuZGF0YVs1XTtcbiAgICAgIC8vQHRzLWlnbm9yZVxuICAgICAgdmFyIGxhdW5ndWFnZSA9XG4gICAgICAgIE1vZEFQSS5tY2luc3RhbmNlLiRjdXJyZW50U2NyZWVuLiRidXR0b25MaXN0LiRhcnJheTEuZGF0YVs2XTtcbiAgICAgIC8vQHRzLWlnbm9yZVxuICAgICAgdmFyIGN1cnJlbnRTY3JlZW4gPSBNb2RBUEkubWNpbnN0YW5jZS4kY3VycmVudFNjcmVlbjtcblxuICAgICAgdmFyIGJ1dHRvbkRpc3RhbmNlID0gNDI7XG4gICAgICB2YXIgYnV0dG9uRGlzdGFuY2VSZWwgPSAyMjtcbiAgICAgIHZhciBidXR0b25TcGFjaW5nID0gMjtcbiAgICAgIHZhciBidXR0b25XaWR0aCA9IDEwMDtcbiAgICAgIHZhciBlbmMgPSBuZXcgVGV4dEVuY29kZXIoKTtcbiAgICAgIC8vb3B0aW9uc1xuICAgICAgb3B0aW9ucy4kd2lkdGgxMyA9IGJ1dHRvbldpZHRoO1xuICAgICAgb3B0aW9ucy4keVBvc2l0aW9uID0gY3VycmVudFNjcmVlbi4kaGVpZ2h0NyAtIGJ1dHRvbkRpc3RhbmNlO1xuICAgICAgLy9tb2RzXG4gICAgICBtb2RzLiR3aWR0aDEzID0gYnV0dG9uV2lkdGggLyAyO1xuICAgICAgbW9kcy4keFBvc2l0aW9uMCA9IG9wdGlvbnMuJHhQb3NpdGlvbjAgLSBidXR0b25XaWR0aCAvIDIgLSBidXR0b25TcGFjaW5nO1xuICAgICAgbW9kcy4keVBvc2l0aW9uID0gY3VycmVudFNjcmVlbi4kaGVpZ2h0NyAtIGJ1dHRvbkRpc3RhbmNlO1xuICAgICAgLy9TaW5nbGVQbGF5ZXJcbiAgICAgIHNpbmdsZVBsYXllci4kd2lkdGgxMyA9IGJ1dHRvbldpZHRoO1xuICAgICAgc2luZ2xlUGxheWVyLiR5UG9zaXRpb24gPSBvcHRpb25zLiR5UG9zaXRpb24gLSBidXR0b25EaXN0YW5jZVJlbDtcbiAgICAgIC8vTXVsdGlQbGF5ZXJcbiAgICAgIG11bHRpUGxheWVyLiR3aWR0aDEzID0gYnV0dG9uV2lkdGggKyBsYXVuZ3VhZ2UuJHdpZHRoMTMgKyBidXR0b25TcGFjaW5nO1xuICAgICAgbXVsdGlQbGF5ZXIuJHhQb3NpdGlvbjAgPVxuICAgICAgICBzaW5nbGVQbGF5ZXIuJHhQb3NpdGlvbjAgKyBidXR0b25XaWR0aCArIGJ1dHRvblNwYWNpbmc7XG4gICAgICBtdWx0aVBsYXllci4keVBvc2l0aW9uID0gb3B0aW9ucy4keVBvc2l0aW9uIC0gYnV0dG9uRGlzdGFuY2VSZWw7XG4gICAgICAvL0VkaXQgcHJvZmlsZVxuICAgICAgZWRpdFByb2ZpbGUuJHdpZHRoMTMgPSBidXR0b25XaWR0aDtcbiAgICAgIGVkaXRQcm9maWxlLiR5UG9zaXRpb24gPSBjdXJyZW50U2NyZWVuLiRoZWlnaHQ3IC0gYnV0dG9uRGlzdGFuY2U7XG4gICAgICAvL0xhbmdcbiAgICAgIGxhdW5ndWFnZS4keFBvc2l0aW9uMCA9XG4gICAgICAgIGVkaXRQcm9maWxlLiR4UG9zaXRpb24wICsgZWRpdFByb2ZpbGUuJHdpZHRoMTMgKyBidXR0b25TcGFjaW5nO1xuICAgICAgbGF1bmd1YWdlLiR5UG9zaXRpb24gPSBjdXJyZW50U2NyZWVuLiRoZWlnaHQ3IC0gYnV0dG9uRGlzdGFuY2U7XG4gICAgICAvL0ZvcmtcbiAgICAgIGZvcmtPbkdpdEh1Yi4kd2lkdGgxMyA9IGJ1dHRvbldpZHRoIC8gMjtcbiAgICAgIGZvcmtPbkdpdEh1Yi4keVBvc2l0aW9uID0gbW9kcy4keVBvc2l0aW9uIC0gYnV0dG9uRGlzdGFuY2VSZWw7XG4gICAgICBmb3JrT25HaXRIdWIuJHhQb3NpdGlvbjAgPSBtb2RzLiR4UG9zaXRpb24wO1xuICAgICAgZm9ya09uR2l0SHViLiRkaXNwbGF5U3RyaW5nLiRjaGFyYWN0ZXJzLmRhdGEgPSBlbmMuZW5jb2RlKFwiRm9ya1wiKTtcblxuICAgICAgY3VycmVudFNjcmVlbi4kb3BlbkdMV2FybmluZzEuJGNoYXJhY3RlcnMuZGF0YSA9IGVuYy5lbmNvZGUoXCJcIik7XG4gICAgICAvL2N1cnJlbnRTY3JlZW4uJHNwbGFzaFRleHQuJGNoYXJhY3RlcnMuZGF0YSA9IGVuYy5lbmNvZGUoXCJKdXN0aW4gaXMgdGhlIHNwZWQgdmVyc2lvbiBvZiBEYW5pZWxcIilcblxuICAgICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic2VydmVycGluZ2xpc3RcIikgPT0gbnVsbCkge1xuICAgICAgICB2YXIgc2VydmVycyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICAgIHNlcnZlcnMuaWQgPSBcInNlcnZlcnBpbmdsaXN0XCI7XG5cbiAgICAgICAgdmFyIHBpbmdzID0gW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IFwiQWVvbiBOZXR3b3JrXCIsXG4gICAgICAgICAgICBhZGRyZXNzOiBcIndzczovL2Flb24tbmV0d29yay5uZXRcIixcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IFwiQXJjaCBNQ1wiLFxuICAgICAgICAgICAgYWRkcmVzczogXCJ3c3M6Ly9tYy5hcmNoLmxvbFwiLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogXCJIZWxsaXVtIE5ldHdvcmtcIixcbiAgICAgICAgICAgIGFkZHJlc3M6IFwid3NzOi8vaGVsbHRlY2guY2NcIixcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IFwiQ2xldmVyIFRlYWNoaW5nXCIsXG4gICAgICAgICAgICBhZGRyZXNzOiBcIndzczovL2NsZXZlci10ZWFjaGluZy5jb21cIixcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IFwiWnl0aFwiLFxuICAgICAgICAgICAgYWRkcmVzczogXCJ3c3M6Ly9tYy56eXRoLm1lXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgXTtcblxuICAgICAgICBzZXJ2ZXJzLnN0eWxlLm92ZXJmbG93WSA9IFwic2Nyb2xsXCI7XG4gICAgICAgIHNlcnZlcnMuc3R5bGUud29yZEJyZWFrID0gXCJicmVhay1hbGxcIjtcbiAgICAgICAgc2VydmVycy5zdHlsZS5wb3NpdGlvbiA9IFwiZml4ZWRcIjtcbiAgICAgICAgc2VydmVycy5zdHlsZS50b3AgPSBcIjEwJVwiO1xuICAgICAgICBzZXJ2ZXJzLnN0eWxlLmxlZnQgPSBcIjIuNSVcIjtcbiAgICAgICAgc2VydmVycy5zdHlsZS53aWR0aCA9IFwiMTUlXCI7XG4gICAgICAgIHNlcnZlcnMuc3R5bGUuaGVpZ2h0ID0gXCI4MCVcIjtcbiAgICAgICAgc2VydmVycy5zdHlsZS5jb2xvciA9IFwicmdiYSgyNTUsMjU1LDI1NSwxKVwiO1xuICAgICAgICBzZXJ2ZXJzLnN0eWxlLmJhY2tncm91bmRDb2xvciA9IFwicmdiYSgwLDAsMCwwLjUpXCI7XG4gICAgICAgIHNlcnZlcnMuc3R5bGUuYm9yZGVyUmFkaXVzID0gXCIxNXB4XCI7XG4gICAgICAgIHNlcnZlcnMuc3R5bGUuZm9udEZhbWlseSA9IFwibW9ub3NwYWNlXCI7XG5cbiAgICAgICAgcGluZ3MuZm9yRWFjaChmdW5jdGlvbihlKSB7XG4gICAgICAgICAgY29uc3QgY3VyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgICAgICBjdXIuc3R5bGUubWFyZ2luID0gXCIxMHB4XCI7XG4gICAgICAgICAgc2VydmVycy5hcHBlbmRDaGlsZChjdXIpO1xuXG4gICAgICAgICAgY29uc3QgY3VyaDIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgICAgIGN1cmgyLnN0eWxlLmZvbnRTaXplID0gXCIyMHB4XCI7XG4gICAgICAgICAgY3VyaDIuaW5uZXJUZXh0ID0gZS5uYW1lO1xuICAgICAgICAgIGN1ci5hcHBlbmRDaGlsZChjdXJoMik7XG5cbiAgICAgICAgICBjb25zdCBjdXJzZXJ2ZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgICAgIGN1cnNlcnZlci5pbm5lclRleHQgPSBlLmFkZHJlc3M7XG4gICAgICAgICAgY3VyLmFwcGVuZENoaWxkKGN1cnNlcnZlcik7XG5cbiAgICAgICAgICBjb25zdCBwbGF5ZXJpbmZvID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgICAgICBwbGF5ZXJpbmZvLmlubmVyVGV4dCA9IFwibm90IGNvbm5lY3RlZFwiO1xuICAgICAgICAgIHBsYXllcmluZm8uc3R5bGUuY29sb3IgPSBcInJlZFwiO1xuICAgICAgICAgIHBsYXllcmluZm8uc3R5bGUuZm9udFdlaWdodCA9IFwiYm9sZFwiO1xuICAgICAgICAgIHBsYXllcmluZm8uc3R5bGUuZm9udFNpemUgPSBcIjE2cHhcIjtcbiAgICAgICAgICBwbGF5ZXJpbmZvLnN0eWxlLndpZHRoID0gXCIxMDAlXCI7XG5cbiAgICAgICAgICBjdXIuYXBwZW5kQ2hpbGQocGxheWVyaW5mbyk7XG5cbiAgICAgICAgICBjb25zdCB0ZXN0d2Vic29ja2V0ID0gbmV3IFdlYlNvY2tldChlLmFkZHJlc3MpO1xuICAgICAgICAgIGNvbnN0IHRpbWVwaW5nID0gRGF0ZS5ub3coKTtcblxuICAgICAgICAgIHRlc3R3ZWJzb2NrZXQub25vcGVuID0gKCkgPT4ge1xuICAgICAgICAgICAgdGVzdHdlYnNvY2tldC5zZW5kKFwiQWNjZXB0OiBNT1REXCIpO1xuICAgICAgICAgIH07XG5cbiAgICAgICAgICB0ZXN0d2Vic29ja2V0Lm9ubWVzc2FnZSA9IChlKSA9PiB7XG4gICAgICAgICAgICBpZiAoZS5kYXRhKSB7XG4gICAgICAgICAgICAgIGlmICh0eXBlb2YgZS5kYXRhID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgIHZhciBkYXQgPSBKU09OLnBhcnNlKGUuZGF0YSk7XG4gICAgICAgICAgICAgICAgICBpZiAoZGF0W1widHlwZVwiXS50b0xvd2VyQ2FzZSgpID09PSBcIm1vdGRcIikge1xuICAgICAgICAgICAgICAgICAgICBwbGF5ZXJpbmZvLmlubmVyVGV4dCA9XG4gICAgICAgICAgICAgICAgICAgICAgZGF0W1wiZGF0YVwiXVtcIm9ubGluZVwiXSArIFwiL1wiICsgZGF0W1wiZGF0YVwiXVtcIm1heFwiXTtcbiAgICAgICAgICAgICAgICAgICAgcGxheWVyaW5mby5zdHlsZS5jb2xvciA9IFwibGltZVwiO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBpbmcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgICAgICAgICAgICAgICBwaW5nLnN0eWxlLmRpc3BsYXkgPSBcImlubGluZS1ibG9ja1wiO1xuICAgICAgICAgICAgICAgICAgICBwaW5nLnN0eWxlLmZsb2F0ID0gXCJyaWdodFwiO1xuICAgICAgICAgICAgICAgICAgICBwaW5nLmlubmVyVGV4dCArPSBEYXRlLm5vdygpIC0gdGltZXBpbmcgKyBcIm1zXCI7XG4gICAgICAgICAgICAgICAgICAgIHBsYXllcmluZm8uYXBwZW5kQ2hpbGQocGluZyk7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coZGF0KTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoc2VydmVycyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInNlcnZlcnBpbmdsaXN0XCIpICE9IG51bGwpIHtcbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzZXJ2ZXJwaW5nbGlzdFwiKS5yZW1vdmUoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxudmFyIGN1c3R1aSA9IHNldEludGVydmFsKGN1c3RvbVVJLCA1MCk7XG5cbi8vQ3VzdG9tIEN1cnNvclxuZG9jdW1lbnQuYm9keS5nZXRFbGVtZW50c0J5VGFnTmFtZShcImNhbnZhc1wiKVswXS5zdHlsZS5jdXJzb3IgPVxuICAndXJsKFwiJyArIGFzc2V0cy5jdXJzb3IgKyAnXCIpLCBhdXRvJztcbmRvY3VtZW50LmJvZHkuc3R5bGUuY3Vyc29yID0gJ3VybChcIicgKyBhc3NldHMuY3Vyc29yICsgJ1wiKSwgYXV0byc7XG5cbmZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gIGNsZWFySW50ZXJ2YWwoY3VzdHVpKTtcbiAgdWkuZGVzdHJveSgpO1xuICBkb2N1bWVudC5ib2R5LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiY2FudmFzXCIpWzBdLnN0eWxlLmN1cnNvciA9IFwiYXV0b1wiO1xuICBkb2N1bWVudC5ib2R5LnN0eWxlLmN1cnNvciA9IFwiYXV0b1wiO1xuICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzZXJ2ZXJwaW5nbGlzdFwiKSAhPSBudWxsKSB7XG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzZXJ2ZXJwaW5nbGlzdFwiKS5yZW1vdmUoKTtcbiAgfVxufVxuIiwKICAiaW1wb3J0IHsgcmVxdWlyZV9hbGwgfSBmcm9tIFwiLi9yZXF1aXJlX2FsbC50c1wiO1xucmVxdWlyZV9hbGwoKVxuaW1wb3J0IHsgY2xpZW50TmFtZSB9IGZyb20gXCIuL3V0aWwvY2xpZW50TmFtZS50c1wiO1xuaW1wb3J0IHsgbG9nVG9Db25zb2xlIH0gZnJvbSBcIi4vdXRpbC9jb25zb2xlTG9nZ2VyXCI7XG5pbXBvcnQgeyBsb2dUb0NoYXQgfSBmcm9tIFwiLi91dGlsL2NoYXRMb2dnZXJcIjtcbi8vaW1wb3J0IHsgaW5pdGh1ZCB9IGZyb20gXCIuL0hVRC50c1wiO1xuaW1wb3J0ICogYXMgYXNzZXRzIGZyb20gXCIuL2Fzc2V0c1wiO1xuaW1wb3J0ICogYXMgdWkgZnJvbSBcIi4vZ3VpLnRzXCI7XG5cbmxvZ1RvQ29uc29sZShcIkluaXQuLi5cIik7XG5sb2dUb0NoYXQoXCJJbml0Li4uXCIpO1xuLy9pbml0aHVkKClcbmxvZ1RvQ2hhdChcIkxvYWRpbmcgbW9kdWxlcy4uLlwiKTtcblxuaW1wb3J0IHsgbW9kdWxlcyB9IGZyb20gXCIuL3V0aWwvYWN0dWFsTW9kdWxlc1wiO1xuXG5cbmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIGZ1bmN0aW9uKGUpIHtcbiAgaWYgKFxuICAgIGUubG9jYXRpb24gPT0gS2V5Ym9hcmRFdmVudC5ET01fS0VZX0xPQ0FUSU9OX1JJR0hUICYmXG4gICAgZS5rZXkgPT0gXCJTaGlmdFwiICYmXG4gICAgIXVpLmlzT3BlbigpXG4gICkge1xuICAgIHVpLm9wZW4oKTtcbiAgfVxuICBmb3IgKGxldCBrZXkgaW4gbW9kdWxlcykge1xuICAgIGlmIChtb2R1bGVzLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgIG1vZHVsZXNba2V5XS5mdW5jdGlvbi5vbktleShlKTtcbiAgICB9XG4gIH1cbn0pO1xuXG5Nb2RBUEkuYWRkRXZlbnRMaXN0ZW5lcihcImtleVwiLCBmdW5jdGlvbihlKSB7XG4gIGlmIChlLmtleSA9PSA1NCkge1xuICAgIHVpLmRlc3Ryb3k7XG4gIH1cbiAgZm9yIChsZXQga2V5IGluIG1vZHVsZXMpIHtcbiAgICBpZiAobW9kdWxlcy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICBtb2R1bGVzW2tleV0uZnVuY3Rpb24ub25NQ0tleShlKTtcbiAgICB9XG4gIH1cbn0pO1xuXG5Nb2RBUEkuYWRkRXZlbnRMaXN0ZW5lcihcInVwZGF0ZVwiLCBmdW5jdGlvbigpIHtcbiAgZm9yIChsZXQga2V5IGluIG1vZHVsZXMpIHtcbiAgICBpZiAobW9kdWxlcy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICBtb2R1bGVzW2tleV0uZnVuY3Rpb24ub25VcGRhdGUoKTtcbiAgICB9XG4gIH1cbn0pO1xuXG5jb25zdCBzdHlsZVNoZWV0ID0gZG9jdW1lbnQuc3R5bGVTaGVldHNbMF07XG5cbnN0eWxlU2hlZXQuaW5zZXJ0UnVsZShgXG46Oi13ZWJraXQtc2Nyb2xsYmFyIHtcbiAgd2lkdGg6IDEwcHg7XG59YCk7XG5cbnN0eWxlU2hlZXQuaW5zZXJ0UnVsZShgXG46Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIHtcbiAgYmFja2dyb3VuZDogcmdiYSgwLDAsMCwwKTtcbn1gKTtcblxuc3R5bGVTaGVldC5pbnNlcnRSdWxlKGBcbjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIge1xuYmFja2dyb3VuZDogcmdiYSgxMDAsMTAwLDEwMCwwLjUpO1xuZmlsdGVyOiBibHVyKDRweCk7XG59YCk7XG5cbnN0eWxlU2hlZXQuaW5zZXJ0UnVsZShgQGtleWZyYW1lcyByZ2Ige1xuICAwJSB7IGJveC1zaGFkb3c6IDBweCAwcHggNDBweCByZ2JhKDI1NSwgMCwgMCwwLjc1KTsgfVxuICAxNiUgeyBib3gtc2hhZG93OiAwcHggMHB4IDQwcHggcmdiYSgyNTUsIDI1NSwgMCwwLjc1KTsgfVxuICAzMyUgeyBib3gtc2hhZG93OiAwcHggMHB4IDQwcHggcmdiYSgwLCAyNTUsIDAsMC43NSk7IH1cbiAgNTAlIHsgYm94LXNoYWRvdzogMHB4IDBweCA0MHB4IHJnYmEoMCwgMjU1LCAyNTUsMC43NSk7IH1cbiAgNjYlIHsgYm94LXNoYWRvdzogMHB4IDBweCA0MHB4IHJnYmEoMCwgMCwgMjU1LDAuNzUpOyB9XG4gIDgzJSB7IGJveC1zaGFkb3c6IDBweCAwcHggNDBweCByZ2JhKDI1NSwgMCwgMjU1LDAuNzUpOyB9XG4gIDEwMCUgeyBib3gtc2hhZG93OiAwcHggMHB4IDQwcHggcmdiYSgyNTUsIDAsIDAsMC43NSk7IH1cbn1gKTtcblxuZnVuY3Rpb24gY3VzdG9tVUkoKSB7XG4gIC8vQHRzLWlnbm9yZVxuICBpZiAoTW9kQVBJLm1jaW5zdGFuY2UuJGN1cnJlbnRTY3JlZW4gIT0gbnVsbCkge1xuICAgIGlmIChcbiAgICAgIE1vZEFQSS5jdXJyZW50U2NyZWVuKCkuc3RhcnRzV2l0aChcIm5ldC5taW5lY3JhZnQuY2xpZW50Lmd1aS5HdWlNYWluTWVudVwiKVxuICAgICkge1xuICAgICAgLy9AdHMtaWdub3JlXG4gICAgICB2YXIgc2luZ2xlUGxheWVyID1cbiAgICAgICAgTW9kQVBJLm1jaW5zdGFuY2UuJGN1cnJlbnRTY3JlZW4uJGJ1dHRvbkxpc3QuJGFycmF5MS5kYXRhWzBdO1xuICAgICAgLy9AdHMtaWdub3JlXG4gICAgICB2YXIgbXVsdGlQbGF5ZXIgPVxuICAgICAgICBNb2RBUEkubWNpbnN0YW5jZS4kY3VycmVudFNjcmVlbi4kYnV0dG9uTGlzdC4kYXJyYXkxLmRhdGFbMV07XG4gICAgICAvL0B0cy1pZ25vcmVcbiAgICAgIHZhciBtb2RzID0gTW9kQVBJLm1jaW5zdGFuY2UuJGN1cnJlbnRTY3JlZW4uJGJ1dHRvbkxpc3QuJGFycmF5MS5kYXRhWzJdO1xuICAgICAgLy9AdHMtaWdub3JlXG4gICAgICB2YXIgZm9ya09uR2l0SHViID1cbiAgICAgICAgTW9kQVBJLm1jaW5zdGFuY2UuJGN1cnJlbnRTY3JlZW4uJGJ1dHRvbkxpc3QuJGFycmF5MS5kYXRhWzNdO1xuICAgICAgLy9AdHMtaWdub3JlXG4gICAgICB2YXIgb3B0aW9ucyA9XG4gICAgICAgIE1vZEFQSS5tY2luc3RhbmNlLiRjdXJyZW50U2NyZWVuLiRidXR0b25MaXN0LiRhcnJheTEuZGF0YVs0XTtcbiAgICAgIC8vQHRzLWlnbm9yZVxuICAgICAgdmFyIGVkaXRQcm9maWxlID1cbiAgICAgICAgTW9kQVBJLm1jaW5zdGFuY2UuJGN1cnJlbnRTY3JlZW4uJGJ1dHRvbkxpc3QuJGFycmF5MS5kYXRhWzVdO1xuICAgICAgLy9AdHMtaWdub3JlXG4gICAgICB2YXIgbGF1bmd1YWdlID1cbiAgICAgICAgTW9kQVBJLm1jaW5zdGFuY2UuJGN1cnJlbnRTY3JlZW4uJGJ1dHRvbkxpc3QuJGFycmF5MS5kYXRhWzZdO1xuICAgICAgLy9AdHMtaWdub3JlXG4gICAgICB2YXIgY3VycmVudFNjcmVlbiA9IE1vZEFQSS5tY2luc3RhbmNlLiRjdXJyZW50U2NyZWVuO1xuXG4gICAgICB2YXIgYnV0dG9uRGlzdGFuY2UgPSA0MjtcbiAgICAgIHZhciBidXR0b25EaXN0YW5jZVJlbCA9IDIyO1xuICAgICAgdmFyIGJ1dHRvblNwYWNpbmcgPSAyO1xuICAgICAgdmFyIGJ1dHRvbldpZHRoID0gMTAwO1xuICAgICAgdmFyIGVuYyA9IG5ldyBUZXh0RW5jb2RlcigpO1xuICAgICAgLy9vcHRpb25zXG4gICAgICBvcHRpb25zLiR3aWR0aDEzID0gYnV0dG9uV2lkdGg7XG4gICAgICBvcHRpb25zLiR5UG9zaXRpb24gPSBjdXJyZW50U2NyZWVuLiRoZWlnaHQ3IC0gYnV0dG9uRGlzdGFuY2U7XG4gICAgICAvL21vZHNcbiAgICAgIG1vZHMuJHdpZHRoMTMgPSBidXR0b25XaWR0aCAvIDI7XG4gICAgICBtb2RzLiR4UG9zaXRpb24wID0gb3B0aW9ucy4keFBvc2l0aW9uMCAtIGJ1dHRvbldpZHRoIC8gMiAtIGJ1dHRvblNwYWNpbmc7XG4gICAgICBtb2RzLiR5UG9zaXRpb24gPSBjdXJyZW50U2NyZWVuLiRoZWlnaHQ3IC0gYnV0dG9uRGlzdGFuY2U7XG4gICAgICAvL1NpbmdsZVBsYXllclxuICAgICAgc2luZ2xlUGxheWVyLiR3aWR0aDEzID0gYnV0dG9uV2lkdGg7XG4gICAgICBzaW5nbGVQbGF5ZXIuJHlQb3NpdGlvbiA9IG9wdGlvbnMuJHlQb3NpdGlvbiAtIGJ1dHRvbkRpc3RhbmNlUmVsO1xuICAgICAgLy9NdWx0aVBsYXllclxuICAgICAgbXVsdGlQbGF5ZXIuJHdpZHRoMTMgPSBidXR0b25XaWR0aCArIGxhdW5ndWFnZS4kd2lkdGgxMyArIGJ1dHRvblNwYWNpbmc7XG4gICAgICBtdWx0aVBsYXllci4keFBvc2l0aW9uMCA9XG4gICAgICAgIHNpbmdsZVBsYXllci4keFBvc2l0aW9uMCArIGJ1dHRvbldpZHRoICsgYnV0dG9uU3BhY2luZztcbiAgICAgIG11bHRpUGxheWVyLiR5UG9zaXRpb24gPSBvcHRpb25zLiR5UG9zaXRpb24gLSBidXR0b25EaXN0YW5jZVJlbDtcbiAgICAgIC8vRWRpdCBwcm9maWxlXG4gICAgICBlZGl0UHJvZmlsZS4kd2lkdGgxMyA9IGJ1dHRvbldpZHRoO1xuICAgICAgZWRpdFByb2ZpbGUuJHlQb3NpdGlvbiA9IGN1cnJlbnRTY3JlZW4uJGhlaWdodDcgLSBidXR0b25EaXN0YW5jZTtcbiAgICAgIC8vTGFuZ1xuICAgICAgbGF1bmd1YWdlLiR4UG9zaXRpb24wID1cbiAgICAgICAgZWRpdFByb2ZpbGUuJHhQb3NpdGlvbjAgKyBlZGl0UHJvZmlsZS4kd2lkdGgxMyArIGJ1dHRvblNwYWNpbmc7XG4gICAgICBsYXVuZ3VhZ2UuJHlQb3NpdGlvbiA9IGN1cnJlbnRTY3JlZW4uJGhlaWdodDcgLSBidXR0b25EaXN0YW5jZTtcbiAgICAgIC8vRm9ya1xuICAgICAgZm9ya09uR2l0SHViLiR3aWR0aDEzID0gYnV0dG9uV2lkdGggLyAyO1xuICAgICAgZm9ya09uR2l0SHViLiR5UG9zaXRpb24gPSBtb2RzLiR5UG9zaXRpb24gLSBidXR0b25EaXN0YW5jZVJlbDtcbiAgICAgIGZvcmtPbkdpdEh1Yi4keFBvc2l0aW9uMCA9IG1vZHMuJHhQb3NpdGlvbjA7XG4gICAgICBmb3JrT25HaXRIdWIuJGRpc3BsYXlTdHJpbmcuJGNoYXJhY3RlcnMuZGF0YSA9IGVuYy5lbmNvZGUoXCJGb3JrXCIpO1xuXG4gICAgICBjdXJyZW50U2NyZWVuLiRvcGVuR0xXYXJuaW5nMS4kY2hhcmFjdGVycy5kYXRhID0gZW5jLmVuY29kZShcIlwiKTtcbiAgICAgIC8vY3VycmVudFNjcmVlbi4kc3BsYXNoVGV4dC4kY2hhcmFjdGVycy5kYXRhID0gZW5jLmVuY29kZShcIkp1c3RpbiBpcyB0aGUgc3BlZCB2ZXJzaW9uIG9mIERhbmllbFwiKVxuXG4gICAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzZXJ2ZXJwaW5nbGlzdFwiKSA9PSBudWxsKSB7XG4gICAgICAgIHZhciBzZXJ2ZXJzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgICAgc2VydmVycy5pZCA9IFwic2VydmVycGluZ2xpc3RcIjtcblxuICAgICAgICB2YXIgcGluZ3MgPSBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogXCJBZW9uIE5ldHdvcmtcIixcbiAgICAgICAgICAgIGFkZHJlc3M6IFwid3NzOi8vYWVvbi1uZXR3b3JrLm5ldFwiLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogXCJBcmNoIE1DXCIsXG4gICAgICAgICAgICBhZGRyZXNzOiBcIndzczovL21jLmFyY2gubG9sXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBcIkhlbGxpdW0gTmV0d29ya1wiLFxuICAgICAgICAgICAgYWRkcmVzczogXCJ3c3M6Ly9oZWxsdGVjaC5jY1wiLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogXCJDbGV2ZXIgVGVhY2hpbmdcIixcbiAgICAgICAgICAgIGFkZHJlc3M6IFwid3NzOi8vY2xldmVyLXRlYWNoaW5nLmNvbVwiLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogXCJaeXRoXCIsXG4gICAgICAgICAgICBhZGRyZXNzOiBcIndzczovL21jLnp5dGgubWVcIixcbiAgICAgICAgICB9LFxuICAgICAgICBdO1xuXG4gICAgICAgIHNlcnZlcnMuc3R5bGUub3ZlcmZsb3dZID0gXCJzY3JvbGxcIjtcbiAgICAgICAgc2VydmVycy5zdHlsZS53b3JkQnJlYWsgPSBcImJyZWFrLWFsbFwiO1xuICAgICAgICBzZXJ2ZXJzLnN0eWxlLnBvc2l0aW9uID0gXCJmaXhlZFwiO1xuICAgICAgICBzZXJ2ZXJzLnN0eWxlLnRvcCA9IFwiMTAlXCI7XG4gICAgICAgIHNlcnZlcnMuc3R5bGUubGVmdCA9IFwiMi41JVwiO1xuICAgICAgICBzZXJ2ZXJzLnN0eWxlLndpZHRoID0gXCIxNSVcIjtcbiAgICAgICAgc2VydmVycy5zdHlsZS5oZWlnaHQgPSBcIjgwJVwiO1xuICAgICAgICBzZXJ2ZXJzLnN0eWxlLmNvbG9yID0gXCJyZ2JhKDI1NSwyNTUsMjU1LDEpXCI7XG4gICAgICAgIHNlcnZlcnMuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gXCJyZ2JhKDAsMCwwLDAuNSlcIjtcbiAgICAgICAgc2VydmVycy5zdHlsZS5ib3JkZXJSYWRpdXMgPSBcIjE1cHhcIjtcbiAgICAgICAgc2VydmVycy5zdHlsZS5mb250RmFtaWx5ID0gXCJtb25vc3BhY2VcIjtcblxuICAgICAgICBwaW5ncy5mb3JFYWNoKGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICBjb25zdCBjdXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgICAgIGN1ci5zdHlsZS5tYXJnaW4gPSBcIjEwcHhcIjtcbiAgICAgICAgICBzZXJ2ZXJzLmFwcGVuZENoaWxkKGN1cik7XG5cbiAgICAgICAgICBjb25zdCBjdXJoMiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICAgICAgY3VyaDIuc3R5bGUuZm9udFNpemUgPSBcIjIwcHhcIjtcbiAgICAgICAgICBjdXJoMi5pbm5lclRleHQgPSBlLm5hbWU7XG4gICAgICAgICAgY3VyLmFwcGVuZENoaWxkKGN1cmgyKTtcblxuICAgICAgICAgIGNvbnN0IGN1cnNlcnZlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICAgICAgY3Vyc2VydmVyLmlubmVyVGV4dCA9IGUuYWRkcmVzcztcbiAgICAgICAgICBjdXIuYXBwZW5kQ2hpbGQoY3Vyc2VydmVyKTtcblxuICAgICAgICAgIGNvbnN0IHBsYXllcmluZm8gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgICAgIHBsYXllcmluZm8uaW5uZXJUZXh0ID0gXCJub3QgY29ubmVjdGVkXCI7XG4gICAgICAgICAgcGxheWVyaW5mby5zdHlsZS5jb2xvciA9IFwicmVkXCI7XG4gICAgICAgICAgcGxheWVyaW5mby5zdHlsZS5mb250V2VpZ2h0ID0gXCJib2xkXCI7XG4gICAgICAgICAgcGxheWVyaW5mby5zdHlsZS5mb250U2l6ZSA9IFwiMTZweFwiO1xuICAgICAgICAgIHBsYXllcmluZm8uc3R5bGUud2lkdGggPSBcIjEwMCVcIjtcblxuICAgICAgICAgIGN1ci5hcHBlbmRDaGlsZChwbGF5ZXJpbmZvKTtcblxuICAgICAgICAgIGNvbnN0IHRlc3R3ZWJzb2NrZXQgPSBuZXcgV2ViU29ja2V0KGUuYWRkcmVzcyk7XG4gICAgICAgICAgY29uc3QgdGltZXBpbmcgPSBEYXRlLm5vdygpO1xuXG4gICAgICAgICAgdGVzdHdlYnNvY2tldC5vbm9wZW4gPSAoKSA9PiB7XG4gICAgICAgICAgICB0ZXN0d2Vic29ja2V0LnNlbmQoXCJBY2NlcHQ6IE1PVERcIik7XG4gICAgICAgICAgfTtcblxuICAgICAgICAgIHRlc3R3ZWJzb2NrZXQub25tZXNzYWdlID0gKGUpID0+IHtcbiAgICAgICAgICAgIGlmIChlLmRhdGEpIHtcbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiBlLmRhdGEgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgdmFyIGRhdCA9IEpTT04ucGFyc2UoZS5kYXRhKTtcbiAgICAgICAgICAgICAgICAgIGlmIChkYXRbXCJ0eXBlXCJdLnRvTG93ZXJDYXNlKCkgPT09IFwibW90ZFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHBsYXllcmluZm8uaW5uZXJUZXh0ID1cbiAgICAgICAgICAgICAgICAgICAgICBkYXRbXCJkYXRhXCJdW1wib25saW5lXCJdICsgXCIvXCIgKyBkYXRbXCJkYXRhXCJdW1wibWF4XCJdO1xuICAgICAgICAgICAgICAgICAgICBwbGF5ZXJpbmZvLnN0eWxlLmNvbG9yID0gXCJsaW1lXCI7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGluZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICAgICAgICAgICAgICAgIHBpbmcuc3R5bGUuZGlzcGxheSA9IFwiaW5saW5lLWJsb2NrXCI7XG4gICAgICAgICAgICAgICAgICAgIHBpbmcuc3R5bGUuZmxvYXQgPSBcInJpZ2h0XCI7XG4gICAgICAgICAgICAgICAgICAgIHBpbmcuaW5uZXJUZXh0ICs9IERhdGUubm93KCkgLSB0aW1lcGluZyArIFwibXNcIjtcbiAgICAgICAgICAgICAgICAgICAgcGxheWVyaW5mby5hcHBlbmRDaGlsZChwaW5nKTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhkYXQpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChzZXJ2ZXJzKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic2VydmVycGluZ2xpc3RcIikgIT0gbnVsbCkge1xuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInNlcnZlcnBpbmdsaXN0XCIpLnJlbW92ZSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG52YXIgY3VzdHVpID0gc2V0SW50ZXJ2YWwoY3VzdG9tVUksIDUwKTtcblxuLy9DdXN0b20gQ3Vyc29yXG5kb2N1bWVudC5ib2R5LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiY2FudmFzXCIpWzBdLnN0eWxlLmN1cnNvciA9XG4gICd1cmwoXCInICsgYXNzZXRzLmN1cnNvciArICdcIiksIGF1dG8nO1xuZG9jdW1lbnQuYm9keS5zdHlsZS5jdXJzb3IgPSAndXJsKFwiJyArIGFzc2V0cy5jdXJzb3IgKyAnXCIpLCBhdXRvJztcblxuZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgY2xlYXJJbnRlcnZhbChjdXN0dWkpO1xuICB1aS5kZXN0cm95KCk7XG4gIGRvY3VtZW50LmJvZHkuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJjYW52YXNcIilbMF0uc3R5bGUuY3Vyc29yID0gXCJhdXRvXCI7XG4gIGRvY3VtZW50LmJvZHkuc3R5bGUuY3Vyc29yID0gXCJhdXRvXCI7XG4gIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInNlcnZlcnBpbmdsaXN0XCIpICE9IG51bGwpIHtcbiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInNlcnZlcnBpbmdsaXN0XCIpLnJlbW92ZSgpO1xuICB9XG59XG4iCiAgXSwKICAibWFwcGluZ3MiOiAiQUFBTyxTQUFTLENBQVcsRUFBRSxDQUMzQixPQUFPLFFBQVEsUUFBUSxFQUN2QixPQUFPLFFBQVEsU0FBUyxFQUN4QixPQUFPLFFBQVEsVUFBVUFDRHBCLElBQUksRUFBYUFDQWpCLFNBQVMsQ0FBWSxDQUFDLEVBQUssQ0FDaEMsUUFBUSxJQUFJLElBQUksTUFBZSxHQUFLQUNEL0IsU0FBUyxDQUFTLENBQUMsRUFBSyxDQUU3QixPQUFPLGNBQWMsQ0FBQyxJQUFLLFNBQUssV0FBaUIsR0FBSyxDQUFDQUNKbEQsSUFBSSxFQUFTZ0VDU2IsU0FBUyxDQUFJLENBQUMsRUFBUSxDQUMzQixFQUFPLGlCQUFvQixFQUFHLENBQzVCLEdBQUksRUFBTyxXQUFXLEdBRWxCLElBQUssT0FBTyxPQUFPLGFBQWEsU0FFOUIsT0FBTyxPQUFPLGFBQWEsU0FBVyxHQUV0QyxPQUFPLE9BQU8sT0FBTyxJQUs3QixFQUFPLGlCQUFvQixFQUFHLENBRTVCLEdBQUksT0FBTyxRQUFVLE1BRW5CLEdBQUksT0FBTyxPQUFPLGNBQWdCLEtBRWhDLE9BQU8sT0FBTyxhQUFhLFNBQVcsR0FFdEMsT0FBTyxPQUFPLE9BQU8sSUFLM0IsRUFBTyxrQkFBcUIsRUFBRyxDQUU3QixHQUFJLE9BQU8sUUFBVSxNQUVuQixHQUFJLE9BQU8sT0FBTyxjQUFnQixLQUVoQyxPQUFPLE9BQU8sYUFBYSxTQUFXLEdBRXRDLE9BQU8sT0FBTyxPQUFPLElBM0N0QixJQUFJLEVBQVcsQ0FDcEIsQ0FDRSxLQUFNLE9B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TUFBTSxPQUFTLE1BQ3ZCLEVBQVEsTUFBTSxNQUFRLHNCQUN0QixFQUFRLE1BQU0sZ0JBQWtCLGtCQUNoQyxFQUFRLE1BQU0sYUFBZSxPQUM3QixFQUFRLE1BQU0sV0FBYSxZQUUzQixFQUFNLGdCQUFnQixDQUFDLEVBQUcsQ0FDeEIsTUFBTSxFQUFNLFNBQVMsY0FBYyxLQUFLLEVBQ3hDLEVBQUksTUFBTSxPQUFTLE9BQ25CLEVBQVEsWUFBWSxDQUFHLEVBRXZCLE1BQU0sRUFBUSxTQUFTLGNBQWMsS0FBSyxFQUMxQyxFQUFNLE1BQU0sU0FBVyxPQUN2QixFQUFNLFVBQVksRUFBRSxLQUNwQixFQUFJLFlBQVksQ0FBSyxFQUVyQixNQUFNLEVBQVksU0FBUyxjQUFjLEtBQUssRUFDOUMsRUFBVSxVQUFZLEVBQUUsUUFDeEIsRUFBSSxZQUFZLENBQVMsRUFFekIsTUFBTSxFQUFhLFNBQVMsY0FBYyxLQUFLLEVBQy9DLEVBQVcsVUFBWSxnQkFDdkIsRUFBVyxNQUFNLE1BQVEsTUFDekIsRUFBVyxNQUFNLFdBQWEsT0FDOUIsRUFBVyxNQUFNLFNBQVcsT0FDNUIsRUFBVyxNQUFNLE1BQVEsT0FFekIsRUFBSSxZQUFZLENBQVUsRUFFMUIsTUFBTSxFQUFnQixJQUFJLFVBQVUsRUFBRSxPQUFPLEVBQ3ZDLEVBQVcsS0FBSyxJQUFJLEVBRTFCLEVBQWMsT0FBUyxJQUFNLENBQzNCLEVBQWMsS0FBSyxjQUFjLEdBR25DLEVBQWMsVUFBWSxDQUFDLElBQU0sQ0FDL0IsR0FBSSxFQUFFLE1BQ0osVUFBVyxFQUFFLE9BQVMsU0FDcEIsR0FBSSxDQUNGLElBQUksRUFBTSxLQUFLLE1BQU0sRUFBRSxJQUFJLEVBQzNCLEdBQUksRUFBSSxLQUFRLFlBQVksSUFBTSxPQUFRLENBQ3hDLEVBQVcsVUFDVCxFQUFJLEtBQVEsT0FBWSxJQUFNLEVBQUksS0FBUSxJQUM1QyxFQUFXLE1BQU0sTUFBUSxPQUV6QixNQUFNLEVBQU8sU0FBUyxjQUFjLEtBQUssRUFDekMsRUFBSyxNQUFNLFFBQVUsZUFDckIsRUFBSyxNQUFNLE1BQVEsUUFDbkIsRUFBSyxXQUFhLEtBQUssSUFBSSxFQUFJLEVBQVcsS0FDMUMsRUFBVyxZQUFZLENBQUksRUFFM0IsUUFBUSxJQUFJLENBQUcsU0FFVixFQUFQLENBQ0EsUUFBUSxJQUFJLENBQUcsS0FLeEIsRUFDRCxTQUFTLEtBQUssWUFBWSxDQUFPLFdBRy9CLFNBQVMsZUFBZSxnQkFBZ0IsR0FBSyxLQUMvQyxTQUFTLGVBQWUsZ0JBQWdCLEVBQUUsT0FBTyIsCiAgImRlYnVnSWQiOiAiQzg1MEYzRDJCMTMyMDU1QzY0NzU2ZTIxNjQ3NTZlMjEiLAogICJuYW1lcyI6IFtdCn0=