pup-recorder 0.3.8 → 0.3.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/app.cjs +108 -108
- package/dist/cli.js +0 -0
- package/package.json +1 -1
package/dist/app.cjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
'use strict';require('source-map-support/register.js');var assert=require('assert'),electron=require('electron'),promises=require('fs/promises'),path=require('path'),fs=require('fs'),nodeAv=require('node-av'),constants=require('node-av/constants'),module$1=require('module'),commander=require('commander');require('tree-kill');var P=require('zod'),crypto=require('crypto'),child_process=require('child_process'),ffmpeg=require('node-av/ffmpeg'),api=require('node-av/api'),promises$1=require('timers/promises'),url=require('url');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var P__default=/*#__PURE__*/_interopDefault(P);var eo=Object.create;var Je=Object.defineProperty;var to=Object.getOwnPropertyDescriptor;var Se=(r,e)=>(e=Symbol[r])?e:Symbol.for("Symbol."+r),$=r=>{throw TypeError(r)};var It=(r,e,t)=>e in r?Je(r,e,{enumerable:true,configurable:true,writable:true,value:t}):r[e]=t;var Rt=r=>[,,,eo(null)],Mt=["class","method","getter","setter","accessor","field","value","get","set"],he=r=>r!==void 0&&typeof r!="function"?$("Function expected"):r,ro=(r,e,t,o,n)=>({kind:Mt[r],name:e,metadata:o,addInitializer:i=>t._?$("Already initialized"):n.push(he(i||null))}),Ze=(r,e)=>It(e,Se("metadata"),r[3]),Ot=(r,e,t,o)=>{for(var n=0,i=r[e>>1],s=i&&i.length;n<s;n++)i[n].call(t);return o},ee=(r,e,t,o,n,i)=>{var c,a,d,p,u=e&7,f=false,w=false,h=2,b=Mt[u+5],x=r[h]||(r[h]=[]),g=((n=n.prototype),to(n,t));for(var y=o.length-1;y>=0;y--)d=ro(u,t,a={},r[3],x),(d.static=f,d.private=w,p=d.access={has:v=>t in v},(p.get=v=>v[t]),u>2),c=(0, o[y])(g[b],d),a._=1,he(c)&&(g[b]=c);return g&&Je(n,t,g),n},Bt=(r,e,t)=>It(r,e+"",t);var F=(r,e,t)=>{if(e!=null){typeof e!="object"&&typeof e!="function"&&$("Object expected");var o,n;t&&(o=e[Se("asyncDispose")]),o===void 0&&(o=e[Se("dispose")],t&&(n=o)),typeof o!="function"&&$("Object not disposable"),n&&(o=function(){try{n.call(this);}catch(i){return Promise.reject(i)}}),r.push([t,o,e]);}else t&&r.push([t]);return e},A=(r,e,t)=>{var o=typeof SuppressedError=="function"?SuppressedError:function(s,c,a,d){return d=Error(a),d.name="SuppressedError",d.error=s,d.suppressed=c,d},n=s=>e=t?new o(s,e,"An error was suppressed during disposal"):(t=true,s),i=s=>{for(;s=r.pop();)try{var c=s[1]&&s[1].call(s[2]);if(s[0])return Promise.resolve(c).then(i,a=>(n(a),i()))}catch(a){n(a);}if(t)throw e};return i()};var io=()=>typeof document>"u"?new URL(`file:${__filename}`).href:document.currentScript&&document.currentScript.tagName.toUpperCase()==="SCRIPT"?document.currentScript.src:new URL("main.js",document.baseURI).href,m=io();function Dt(r,e,t){try{return e(process.env[r])}catch{return t}}function G(r){if(typeof r=="number")return r;let e=Number(r);if(Number.isNaN(e))throw new Error(`Value ${r} is not a valid number`);return e}var co=module$1.createRequire(m),Nt=Dt("PUP_LOG_LEVEL",G,2),Ht=path.dirname(co.resolve("pup-recorder/package.json"));path.join(Ht,"dist","app.cjs");var Vt=path.join(Ht,"dist","audio_preload.cjs");var tt="<pup@debug>",rt="<pup@info>",ot="<pup@warn>",nt="<pup@error>",it="<pup@fatal>";function we(r,e){return function(...t){let o=t.map(n=>n instanceof Error?n.stack??String(n):n);return r.call(this,...o)}}var Ut,Wt,$t,Gt,jt,j;jt=[we],Gt=[we],$t=[we],Wt=[we],Ut=[we];var I=class{constructor(e=Nt){this._level=e;Ot(j,5,this);Bt(this,"_impl");this.impl=console;}_level;get level(){return this._level}set level(e){this._level=e,this.impl=this._impl??console;}get impl(){return this._impl}set impl(e){let t=e.debug??console.debug,o=e.info??console.info,n=e.warn??console.warn,i=e.error??console.error,s=this._level;this._impl={debug:s>=3?t:void 0,info:s>=2?o:void 0,warn:s>=1?n:void 0,error:s>=0?i:void 0};}debug(...e){this.impl?.debug?.(tt,...e);}info(...e){this.impl?.info?.(rt,...e);}warn(...e){this.impl?.warn?.(ot,...e);}error(...e){this.impl?.error?.(nt,...e);}fatal(...e){this.impl?.error?.(it,...e),process.exit(1);}dispatch(e){let t=e.trimEnd();t.startsWith(tt)?this.debug(t.slice(tt.length+1)):t.startsWith(rt)?this.info(t.slice(rt.length+1)):t.startsWith(ot)?this.warn(t.slice(ot.length+1)):t.startsWith(nt)?this.error(t.slice(nt.length+1)):this.info(t);}attach(e,t){return new Promise((o,n)=>{this.debug(`${t}.attach`);let i="",s=c=>{let a=c.toString();a.startsWith(it)?i+=a.slice(it.length+1):this.dispatch(a);};e.stderr?.on("data",s),e.stdout?.on("data",s),e.on("error",c=>{i+=c.message,e.kill();}).once("close",(c,a)=>{c||a||i?(i||=`command failed: ${e.spawnargs.join(" ")}`,this.debug(`${t}.close`,{code:c,signal:a,fatal:i}),n(new Error(i))):(this.debug(`${t}.close`),o());}).on("unhandledRejection",c=>{this.error(`${t}.unhandled`,c);}).on("uncaughtExceptionMonitor",c=>{this.error(`${t}.unhandled`,c);});})}};j=Rt(),ee(j,1,"debug",jt,I),ee(j,1,"info",Gt,I),ee(j,1,"warn",$t,I),ee(j,1,"error",Wt,I),ee(j,1,"fatal",Ut,I),Ze(j,I);var l=new I;nodeAv.Log.setCallback((r,e)=>{let t=e.trimEnd();t&&(r<=constants.AV_LOG_ERROR?l.error(t):r<=constants.AV_LOG_WARNING&&l.warn(t));});var wo="[Crash]";function qt(){let r=path.join(electron.app.getPath("userData"),"crashes");fs.mkdirSync(r,{recursive:true}),electron.app.setPath("crashDumps",r),electron.crashReporter.start({productName:"pup-recorder",uploadToServer:false,compress:false,ignoreSystemCrashHandler:true}),l.debug(wo,"set dump to",r);}function ge(r,e){return (...t)=>{try{let o=r(...t);return o instanceof Promise?o.catch(()=>e):o}catch{return e}}}var go="--pup-priv-args";function Kt(){let r=process.argv,e=r.find(o=>o.startsWith(go));if(!e)return l.debug("procargv",r),process.argv;let t=["exec",...r.slice(-1)];return e=Buffer.from(e.split("=")[1],"base64").toString(),t.push(...JSON.parse(e)),l.debug("pupargs",t),t}var bo=1920,vo=1080,_o=30,xo=5,yo="out/html.mp4,out/html.webm",Xt=P__default.default.object({duration:P__default.default.number().describe("Duration in seconds"),width:P__default.default.number().describe("Video width"),height:P__default.default.number().describe("Video height"),fps:P__default.default.number().describe("Frames per second"),withAudio:P__default.default.boolean().describe("Capture and encode audio"),outFile:P__default.default.string().describe("Comma-separated output paths; extension (.mp4/.webm) selects encoder"),useInnerProxy:P__default.default.boolean().describe("Use bilibili inner proxy for resource access"),deterministic:P__default.default.boolean().describe("Render by frame rather than recording"),disableGpu:P__default.default.boolean().describe("Disable GPU rendering, may reduce performance but increase stability"),disableHwCodec:P__default.default.boolean().describe("Disable hardware video encoder (NVENC/VideoToolbox), use software x265"),windowTolerant:P__default.default.boolean().describe("Fall back to dom-ready if warmup load times out")}),Qt={width:bo,height:vo,fps:_o,duration:xo,outFile:yo,withAudio:false,useInnerProxy:false,deterministic:false,disableGpu:false,disableHwCodec:false,windowTolerant:false};async function Jt(r){let e=Xt.shape,t=Qt;commander.program.name(r.name).argument("<source>","file://, http(s)://, or data: URI").option("-W, --width <number>",e.width.description,`${t.width}`).option("-H, --height <number>",e.height.description,`${t.height}`).option("-f, --fps <number>",e.fps.description,`${t.fps}`).option("-t, --duration <number>",e.duration.description,`${t.duration}`).option("-o, --out-file <path>",e.outFile.description,t.outFile).option("-a, --with-audio",e.withAudio.description,t.withAudio).option("-d, --deterministic",e.deterministic.description,t.deterministic).option("--use-inner-proxy",e.useInnerProxy.description,t.useInnerProxy).option("--disable-gpu",e.disableGpu.description,t.disableGpu).option("--disable-hw-codec",e.disableHwCodec.description,t.disableHwCodec).option("--window-tolerant",e.windowTolerant.description,t.windowTolerant).action(async(o,n)=>{try{await r.run(o,{width:ge(G,t.width)(n.width),height:ge(G,t.height)(n.height),fps:ge(G,t.fps)(n.fps),duration:ge(G,t.duration)(n.duration),outFile:n.outFile??t.outFile,withAudio:n.withAudio??t.withAudio,useInnerProxy:n.useInnerProxy??t.useInnerProxy,deterministic:n.deterministic??t.deterministic,disableGpu:n.disableGpu??t.disableGpu,disableHwCodec:n.disableHwCodec??t.disableHwCodec,windowTolerant:n.windowTolerant??t.windowTolerant});}catch(i){l.fatal(i);}}),await commander.program.parseAsync(Kt());}var Ce=class{writeConsole(e,t){this.send({type:"console",level:e,message:t});}writeProgress(e){this.send({type:"progress",value:e});}writeError(e){return this.send({type:"error",error:e})}writeDone(e){return this.send({type:"done",payload:e})}send(e){return new Promise(t=>{if(!process.send)return t();process.send(e,()=>t());})}};var Zt=Buffer.from([73,69,78,68,174,66,96,130]),be=class{buf=Buffer.alloc(0);feed(e){this.buf=Buffer.concat([this.buf,e]);let t=[];for(;;){let o=this.buf.indexOf(Zt);if(o<0)break;let n=o+Zt.length;t.push(Buffer.from(this.buf.subarray(0,n))),this.buf=this.buf.subarray(n);}return t}};var Fe="[DecodeSession]",So=ffmpeg.ffmpegPath(),st=240,Co=90,Fo=90,er=5e3,Ae=class{constructor(e,t,o){this.meta=e;this.src=t;this.frameCount=o;this.spawn(0);}meta;src;frameCount;ffmpeg;parser=new be;ring=new Map;runBaseIdx=0;nextFrameIdx=0;waiters=new Map;exhausted=false;async getFrame(e){let t=Math.max(0,e);if(t>=this.frameCount)return Buffer.alloc(0);let o=this.ring.get(t);if(o)return this.onServe(t),o;if(this.needsReseek(t))this.reseek(t);else if(this.exhausted&&t>=this.nextFrameIdx)return Buffer.alloc(0);return this.waitFrame(t)}close(){this.killFfmpeg(),this.rejectAllWaiters(new Error(`frame-server: session ${this.meta.id} closed`)),this.ring.clear();}needsReseek(e){return e<this.runBaseIdx||e<this.nextFrameIdx?true:e>this.nextFrameIdx+Fo}reseek(e){this.killFfmpeg(),this.rejectAllWaiters(new Error(`frame-server: superseded by re-seek to frame ${e}`)),this.spawn(e);}waitFrame(e){return new Promise((t,o)=>{let n=setTimeout(()=>{this.waiters.delete(e),o(new Error(`frame-server: frame ${e} not decoded within ${er}ms`));},er);this.waiters.set(e,{resolve:t,reject:o,timer:n}),this.refillIfNeeded();})}onServe(e){let t=e-Co,o=e+st;for(let n of this.ring.keys())(n<t||n>o)&&this.ring.delete(n);this.refillIfNeeded();}refillIfNeeded(){let e=this.ffmpeg?.stdout;e&&this.ring.size<st&&e.isPaused()&&e.resume();}spawn(e){this.parser=new be,this.runBaseIdx=e,this.nextFrameIdx=e,this.exhausted=false;let t=e/this.meta.fps,o=["-hide_banner","-loglevel","error",...t>0?["-ss",String(t)]:[],"-i",this.src,"-vf",`fps=${this.meta.fps}`,"-color_range","pc","-colorspace","bt709","-color_primaries","bt709","-color_trc","bt709","-f","image2pipe","-c:v","png","-pix_fmt","rgba","-"];l.debug(Fe,`spawn id=${this.meta.id.slice(0,8)} from=${e} ${this.meta.width}x${this.meta.height}`);let n=child_process.spawn(So,o,{stdio:["ignore","pipe","pipe"]});this.ffmpeg=n,n.stdout.on("data",i=>this.onStdout(i)),n.stderr.on("data",i=>l.warn(Fe,`[${this.meta.id}] ffmpeg stderr:`,i.toString().trim())),n.on("error",i=>l.warn(Fe,`[${this.meta.id}] ffmpeg spawn error:`,i.message)),n.on("exit",i=>{if(n===this.ffmpeg)if(l.debug(Fe,`exit id=${this.meta.id.slice(0,8)} code=${i} head=${this.nextFrameIdx}`),i===0||i===null){this.exhausted=true;for(let[s,c]of this.waiters)s>=this.nextFrameIdx&&(clearTimeout(c.timer),this.waiters.delete(s),c.resolve(Buffer.alloc(0)));}else i!==255&&this.rejectAllWaiters(new Error(`ffmpeg exited ${i} for ${this.src}`));});}onStdout(e){for(let t of this.parser.feed(e)){let o=this.nextFrameIdx++;this.ring.set(o,t);let n=this.waiters.get(o);n&&(this.waiters.delete(o),clearTimeout(n.timer),n.resolve(t));}this.ring.size>=st&&this.ffmpeg?.stdout?.pause();}killFfmpeg(){this.ffmpeg&&(this.ffmpeg.kill("SIGKILL"),this.ffmpeg=void 0);}rejectAllWaiters(e){for(let t of this.waiters.values())clearTimeout(t.timer),t.reject(e);this.waiters.clear();}};var To=ffmpeg.ffmpegPath(),tr=5e3;function rr(r){return new Promise((e,t)=>{let o=child_process.spawn(To,["-hide_banner","-i",r,"-vframes","0","-f","ffmetadata","-"],{stdio:["ignore","pipe","pipe"]}),n="",i=setTimeout(()=>{o.kill("SIGKILL"),t(new Error(`probe timed out after ${tr}ms: ${r}`));},tr);o.stderr.on("data",s=>n+=s.toString()),o.on("error",s=>{clearTimeout(i),t(s);}),o.on("exit",()=>{clearTimeout(i);let s=n.match(/, (\d+)x(\d+)[, ]/),c=n.match(/Duration: (\d+):(\d+):(\d+\.\d+)/);if(!s||!c)return t(new Error(`probe failed: ${r}
|
|
2
|
-
${n}`));e({width:parseInt(s[1],10),height:parseInt(s[2],10),duration:parseInt(c[1],10)*3600+parseInt(c[2],10)*60+parseFloat(c[3])});});})}var at=class{sessions=new Map;async open(e){let t=await rr(e.src),o=crypto.randomUUID(),n={id:o,width:t.width,height:t.height,fps:e.fps,duration:t.duration},i=Math.max(1,Math.round(t.duration*e.fps));return this.sessions.set(o,new Ae(n,e.src,i)),n}getFrame(e,t){return this.must(e).getFrame(t)}close(e){let t=this.sessions.get(e);t&&(t.close(),this.sessions.delete(e));}closeAll(){for(let e of [...this.sessions.keys()])this.close(e);}must(e){let t=this.sessions.get(e);if(!t)throw new Error(`frame-server: unknown session id=${e}`);return t}},
|
|
1
|
+
'use strict';require('source-map-support/register.js');var assert=require('assert'),electron=require('electron'),promises=require('fs/promises'),path=require('path'),fs=require('fs'),nodeAv=require('node-av'),constants=require('node-av/constants'),module$1=require('module'),commander=require('commander');require('tree-kill');var P=require('zod'),crypto=require('crypto'),child_process=require('child_process'),ffmpeg=require('node-av/ffmpeg'),api=require('node-av/api'),promises$1=require('timers/promises'),url=require('url');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var P__default=/*#__PURE__*/_interopDefault(P);var eo=Object.create;var Je=Object.defineProperty;var to=Object.getOwnPropertyDescriptor;var Se=(r,e)=>(e=Symbol[r])?e:Symbol.for("Symbol."+r),$=r=>{throw TypeError(r)};var It=(r,e,t)=>e in r?Je(r,e,{enumerable:true,configurable:true,writable:true,value:t}):r[e]=t;var Rt=r=>[,,,eo(null)],Mt=["class","method","getter","setter","accessor","field","value","get","set"],he=r=>r!==void 0&&typeof r!="function"?$("Function expected"):r,ro=(r,e,t,o,n)=>({kind:Mt[r],name:e,metadata:o,addInitializer:i=>t._?$("Already initialized"):n.push(he(i||null))}),Ze=(r,e)=>It(e,Se("metadata"),r[3]),Ot=(r,e,t,o)=>{for(var n=0,i=r[e>>1],s=i&&i.length;n<s;n++)i[n].call(t);return o},Z=(r,e,t,o,n,i)=>{var c,a,d,p,u=e&7,f=false,w=false,h=2,b=Mt[u+5],x=r[h]||(r[h]=[]),g=((n=n.prototype),to(n,t));for(var y=o.length-1;y>=0;y--)d=ro(u,t,a={},r[3],x),(d.static=f,d.private=w,p=d.access={has:v=>t in v},(p.get=v=>v[t]),u>2),c=(0, o[y])(g[b],d),a._=1,he(c)&&(g[b]=c);return g&&Je(n,t,g),n},Bt=(r,e,t)=>It(r,e+"",t);var F=(r,e,t)=>{if(e!=null){typeof e!="object"&&typeof e!="function"&&$("Object expected");var o,n;t&&(o=e[Se("asyncDispose")]),o===void 0&&(o=e[Se("dispose")],t&&(n=o)),typeof o!="function"&&$("Object not disposable"),n&&(o=function(){try{n.call(this);}catch(i){return Promise.reject(i)}}),r.push([t,o,e]);}else t&&r.push([t]);return e},A=(r,e,t)=>{var o=typeof SuppressedError=="function"?SuppressedError:function(s,c,a,d){return d=Error(a),d.name="SuppressedError",d.error=s,d.suppressed=c,d},n=s=>e=t?new o(s,e,"An error was suppressed during disposal"):(t=true,s),i=s=>{for(;s=r.pop();)try{var c=s[1]&&s[1].call(s[2]);if(s[0])return Promise.resolve(c).then(i,a=>(n(a),i()))}catch(a){n(a);}if(t)throw e};return i()};var io=()=>typeof document>"u"?new URL(`file:${__filename}`).href:document.currentScript&&document.currentScript.tagName.toUpperCase()==="SCRIPT"?document.currentScript.src:new URL("main.js",document.baseURI).href,m=io();function Dt(r,e,t){try{return e(process.env[r])}catch{return t}}function G(r){if(typeof r=="number")return r;let e=Number(r);if(Number.isNaN(e))throw new Error(`Value ${r} is not a valid number`);return e}var co=module$1.createRequire(m),Nt=Dt("PUP_LOG_LEVEL",G,2),Ht=path.dirname(co.resolve("pup-recorder/package.json"));path.join(Ht,"dist","app.cjs");var Vt=path.join(Ht,"dist","audio_preload.cjs");var tt="<pup@debug>",rt="<pup@info>",ot="<pup@warn>",nt="<pup@error>",it="<pup@fatal>";function we(r,e){return function(...t){let o=t.map(n=>n instanceof Error?n.stack??String(n):n);return r.call(this,...o)}}var Ut,Wt,$t,Gt,jt,j;jt=[we],Gt=[we],$t=[we],Wt=[we],Ut=[we];var I=class{constructor(e=Nt){this._level=e;Ot(j,5,this);Bt(this,"_impl");this.impl=console;}_level;get level(){return this._level}set level(e){this._level=e,this.impl=this._impl??console;}get impl(){return this._impl}set impl(e){let t=e.debug??console.debug,o=e.info??console.info,n=e.warn??console.warn,i=e.error??console.error,s=this._level;this._impl={debug:s>=3?t:void 0,info:s>=2?o:void 0,warn:s>=1?n:void 0,error:s>=0?i:void 0};}debug(...e){this.impl?.debug?.(tt,...e);}info(...e){this.impl?.info?.(rt,...e);}warn(...e){this.impl?.warn?.(ot,...e);}error(...e){this.impl?.error?.(nt,...e);}fatal(...e){this.impl?.error?.(it,...e),process.exit(1);}dispatch(e){let t=e.trimEnd();t.startsWith(tt)?this.debug(t.slice(tt.length+1)):t.startsWith(rt)?this.info(t.slice(rt.length+1)):t.startsWith(ot)?this.warn(t.slice(ot.length+1)):t.startsWith(nt)?this.error(t.slice(nt.length+1)):this.info(t);}attach(e,t){return new Promise((o,n)=>{this.debug(`${t}.attach`);let i="",s=c=>{let a=c.toString();a.startsWith(it)?i+=a.slice(it.length+1):this.dispatch(a);};e.stderr?.on("data",s),e.stdout?.on("data",s),e.on("error",c=>{i+=c.message,e.kill();}).once("close",(c,a)=>{c||a||i?(i||=`command failed: ${e.spawnargs.join(" ")}`,this.debug(`${t}.close`,{code:c,signal:a,fatal:i}),n(new Error(i))):(this.debug(`${t}.close`),o());}).on("unhandledRejection",c=>{this.error(`${t}.unhandled`,c);}).on("uncaughtExceptionMonitor",c=>{this.error(`${t}.unhandled`,c);});})}};j=Rt(),Z(j,1,"debug",jt,I),Z(j,1,"info",Gt,I),Z(j,1,"warn",$t,I),Z(j,1,"error",Wt,I),Z(j,1,"fatal",Ut,I),Ze(j,I);var l=new I;nodeAv.Log.setCallback((r,e)=>{let t=e.trimEnd();t&&(r<=constants.AV_LOG_ERROR?l.error(t):r<=constants.AV_LOG_WARNING&&l.warn(t));});var wo="[Crash]";function qt(){let r=path.join(electron.app.getPath("userData"),"crashes");fs.mkdirSync(r,{recursive:true}),electron.app.setPath("crashDumps",r),electron.crashReporter.start({productName:"pup-recorder",uploadToServer:false,compress:false,ignoreSystemCrashHandler:true}),l.debug(wo,"set dump to",r);}function ge(r,e){return (...t)=>{try{let o=r(...t);return o instanceof Promise?o.catch(()=>e):o}catch{return e}}}var go="--pup-priv-args";function Kt(){let r=process.argv,e=r.find(o=>o.startsWith(go));if(!e)return l.debug("procargv",r),process.argv;let t=["exec",...r.slice(-1)];return e=Buffer.from(e.split("=")[1],"base64").toString(),t.push(...JSON.parse(e)),l.debug("pupargs",t),t}var bo=1920,vo=1080,_o=30,xo=5,yo="out/html.mp4,out/html.webm",Xt=P__default.default.object({duration:P__default.default.number().describe("Duration in seconds"),width:P__default.default.number().describe("Video width"),height:P__default.default.number().describe("Video height"),fps:P__default.default.number().describe("Frames per second"),withAudio:P__default.default.boolean().describe("Capture and encode audio"),outFile:P__default.default.string().describe("Comma-separated output paths; extension (.mp4/.webm) selects encoder"),useInnerProxy:P__default.default.boolean().describe("Use bilibili inner proxy for resource access"),deterministic:P__default.default.boolean().describe("Render by frame rather than recording"),disableGpu:P__default.default.boolean().describe("Disable GPU rendering, may reduce performance but increase stability"),disableHwCodec:P__default.default.boolean().describe("Disable hardware video encoder (NVENC/VideoToolbox), use software x265"),windowTolerant:P__default.default.boolean().describe("Fall back to dom-ready if warmup load times out")}),Qt={width:bo,height:vo,fps:_o,duration:xo,outFile:yo,withAudio:false,useInnerProxy:false,deterministic:false,disableGpu:false,disableHwCodec:false,windowTolerant:false};async function Jt(r){let e=Xt.shape,t=Qt;commander.program.name(r.name).argument("<source>","file://, http(s)://, or data: URI").option("-W, --width <number>",e.width.description,`${t.width}`).option("-H, --height <number>",e.height.description,`${t.height}`).option("-f, --fps <number>",e.fps.description,`${t.fps}`).option("-t, --duration <number>",e.duration.description,`${t.duration}`).option("-o, --out-file <path>",e.outFile.description,t.outFile).option("-a, --with-audio",e.withAudio.description,t.withAudio).option("-d, --deterministic",e.deterministic.description,t.deterministic).option("--use-inner-proxy",e.useInnerProxy.description,t.useInnerProxy).option("--disable-gpu",e.disableGpu.description,t.disableGpu).option("--disable-hw-codec",e.disableHwCodec.description,t.disableHwCodec).option("--window-tolerant",e.windowTolerant.description,t.windowTolerant).action(async(o,n)=>{try{await r.run(o,{width:ge(G,t.width)(n.width),height:ge(G,t.height)(n.height),fps:ge(G,t.fps)(n.fps),duration:ge(G,t.duration)(n.duration),outFile:n.outFile??t.outFile,withAudio:n.withAudio??t.withAudio,useInnerProxy:n.useInnerProxy??t.useInnerProxy,deterministic:n.deterministic??t.deterministic,disableGpu:n.disableGpu??t.disableGpu,disableHwCodec:n.disableHwCodec??t.disableHwCodec,windowTolerant:n.windowTolerant??t.windowTolerant});}catch(i){l.fatal(i);}}),await commander.program.parseAsync(Kt());}var Ce=class{writeConsole(e,t){this.send({type:"console",level:e,message:t});}writeProgress(e){this.send({type:"progress",value:e});}writeError(e){return this.send({type:"error",error:e})}writeDone(e){return this.send({type:"done",payload:e})}send(e){return new Promise(t=>{if(!process.send)return t();process.send(e,()=>t());})}};var Zt=Buffer.from([73,69,78,68,174,66,96,130]),be=class{buf=Buffer.alloc(0);feed(e){this.buf=Buffer.concat([this.buf,e]);let t=[];for(;;){let o=this.buf.indexOf(Zt);if(o<0)break;let n=o+Zt.length;t.push(Buffer.from(this.buf.subarray(0,n))),this.buf=this.buf.subarray(n);}return t}};var Fe="[DecodeSession]",So=ffmpeg.ffmpegPath(),st=240,Co=90,Fo=90,er=5e3,Ae=class{constructor(e,t,o){this.meta=e;this.src=t;this.frameCount=o;this.spawn(0);}meta;src;frameCount;ffmpeg;parser=new be;ring=new Map;runBaseIdx=0;nextFrameIdx=0;waiters=new Map;exhausted=false;async getFrame(e){let t=Math.max(0,e);if(t>=this.frameCount)return Buffer.alloc(0);let o=this.ring.get(t);if(o)return this.onServe(t),o;if(this.needsReseek(t))this.reseek(t);else if(this.exhausted&&t>=this.nextFrameIdx)return Buffer.alloc(0);return this.waitFrame(t)}close(){this.killFfmpeg(),this.rejectAllWaiters(new Error(`frame-server: session ${this.meta.id} closed`)),this.ring.clear();}needsReseek(e){return e<this.runBaseIdx||e<this.nextFrameIdx?true:e>this.nextFrameIdx+Fo}reseek(e){this.killFfmpeg(),this.rejectAllWaiters(new Error(`frame-server: superseded by re-seek to frame ${e}`)),this.spawn(e);}waitFrame(e){return new Promise((t,o)=>{let n=setTimeout(()=>{this.waiters.delete(e),o(new Error(`frame-server: frame ${e} not decoded within ${er}ms`));},er);this.waiters.set(e,{resolve:t,reject:o,timer:n}),this.refillIfNeeded();})}onServe(e){let t=e-Co,o=e+st;for(let n of this.ring.keys())(n<t||n>o)&&this.ring.delete(n);this.refillIfNeeded();}refillIfNeeded(){let e=this.ffmpeg?.stdout;e&&this.ring.size<st&&e.isPaused()&&e.resume();}spawn(e){this.parser=new be,this.runBaseIdx=e,this.nextFrameIdx=e,this.exhausted=false;let t=e/this.meta.fps,o=["-hide_banner","-loglevel","error",...t>0?["-ss",String(t)]:[],"-i",this.src,"-vf",`fps=${this.meta.fps}`,"-color_range","pc","-colorspace","bt709","-color_primaries","bt709","-color_trc","bt709","-f","image2pipe","-c:v","png","-pix_fmt","rgba","-"];l.debug(Fe,`spawn id=${this.meta.id.slice(0,8)} from=${e} ${this.meta.width}x${this.meta.height}`);let n=child_process.spawn(So,o,{stdio:["ignore","pipe","pipe"]});this.ffmpeg=n,n.stdout.on("data",i=>this.onStdout(i)),n.stderr.on("data",i=>l.warn(Fe,`[${this.meta.id}] ffmpeg stderr:`,i.toString().trim())),n.on("error",i=>l.warn(Fe,`[${this.meta.id}] ffmpeg spawn error:`,i.message)),n.on("exit",i=>{if(n===this.ffmpeg)if(l.debug(Fe,`exit id=${this.meta.id.slice(0,8)} code=${i} head=${this.nextFrameIdx}`),i===0||i===null){this.exhausted=true;for(let[s,c]of this.waiters)s>=this.nextFrameIdx&&(clearTimeout(c.timer),this.waiters.delete(s),c.resolve(Buffer.alloc(0)));}else i!==255&&this.rejectAllWaiters(new Error(`ffmpeg exited ${i} for ${this.src}`));});}onStdout(e){for(let t of this.parser.feed(e)){let o=this.nextFrameIdx++;this.ring.set(o,t);let n=this.waiters.get(o);n&&(this.waiters.delete(o),clearTimeout(n.timer),n.resolve(t));}this.ring.size>=st&&this.ffmpeg?.stdout?.pause();}killFfmpeg(){this.ffmpeg&&(this.ffmpeg.kill("SIGKILL"),this.ffmpeg=void 0);}rejectAllWaiters(e){for(let t of this.waiters.values())clearTimeout(t.timer),t.reject(e);this.waiters.clear();}};var To=ffmpeg.ffmpegPath(),tr=5e3;function rr(r){return new Promise((e,t)=>{let o=child_process.spawn(To,["-hide_banner","-i",r,"-vframes","0","-f","ffmetadata","-"],{stdio:["ignore","pipe","pipe"]}),n="",i=setTimeout(()=>{o.kill("SIGKILL"),t(new Error(`probe timed out after ${tr}ms: ${r}`));},tr);o.stderr.on("data",s=>n+=s.toString()),o.on("error",s=>{clearTimeout(i),t(s);}),o.on("exit",()=>{clearTimeout(i);let s=n.match(/, (\d+)x(\d+)[, ]/),c=n.match(/Duration: (\d+):(\d+):(\d+\.\d+)/);if(!s||!c)return t(new Error(`probe failed: ${r}
|
|
2
|
+
${n}`));e({width:parseInt(s[1],10),height:parseInt(s[2],10),duration:parseInt(c[1],10)*3600+parseInt(c[2],10)*60+parseFloat(c[3])});});})}var at=class{sessions=new Map;async open(e){let t=await rr(e.src),o=crypto.randomUUID(),n={id:o,width:t.width,height:t.height,fps:e.fps,duration:t.duration},i=Math.max(1,Math.round(t.duration*e.fps));return this.sessions.set(o,new Ae(n,e.src,i)),n}getFrame(e,t){return this.must(e).getFrame(t)}close(e){let t=this.sessions.get(e);t&&(t.close(),this.sessions.delete(e));}closeAll(){for(let e of [...this.sessions.keys()])this.close(e);}must(e){let t=this.sessions.get(e);if(!t)throw new Error(`frame-server: unknown session id=${e}`);return t}},ee=new at;var Mo="[FrameProtocol]",Oo="pup-frame",z={"access-control-allow-origin":"*","access-control-allow-methods":"GET, OPTIONS","access-control-allow-headers":"*"};function nr(){electron.protocol.handle(Oo,async r=>{if(r.method==="OPTIONS")return new Response(null,{status:204,headers:z});let e=new URL(r.url);l.debug(Mo,`${r.method} ${e.hostname}${e.search}`);try{switch(e.hostname){case "open":return Bo(await ee.open({src:e.searchParams.get("src")??"",fps:or(e,"fps",30)}));case "frame":return Do(await ee.getFrame(e.searchParams.get("id")??"",or(e,"idx",0)));case "close":return ee.close(e.searchParams.get("id")??""),new Response(null,{status:204,headers:z});default:return new Response(`unknown action: ${e.hostname}`,{status:404,headers:z})}}catch(t){let o=t instanceof Error?t.message:String(t);return new Response(o,{status:500,headers:z})}});}function Bo(r){return new Response(JSON.stringify(r),{headers:{...z,"content-type":"application/json"}})}function Do(r){if(r.byteLength===0)return new Response(null,{status:410,headers:z});let e=new Uint8Array(r.byteLength);e.set(r);let t=new Blob([e.buffer],{type:"image/png"});return new Response(t,{headers:{...z,"cache-control":"no-store"}})}function or(r,e,t){let o=r.searchParams.get(e),n=o?parseInt(o,10):NaN;return Number.isFinite(n)?n:t}function ke(r){return new Promise(e=>setTimeout(e,r))}function R(r,e,t){return new Promise((o,n)=>{let i=setTimeout(()=>n(new Error(`${t} timed out after ${e}ms`)),e);r.then(o,n).finally(()=>clearTimeout(i));})}var Te=5e3;function Ie(r,e,t){return R(r.sendCommand(e,t),Te,`cdp.${e}`)}function ct(r,e){return R(Ie(r,"Runtime.evaluate",{expression:e}),Te,"evalIn")}function ir(r,e){return new Promise((t,o)=>{let n=setTimeout(()=>{r.off("message",i),o(new Error(`advanceVirtualTime timed out after ${Te}ms`));},Te),i=(s,c)=>{c==="Emulation.virtualTimeBudgetExpired"&&(clearTimeout(n),r.off("message",i),t());};r.on("message",i),Ie(r,"Emulation.setVirtualTimePolicy",{policy:"advance",budget:e,maxVirtualTimeTaskStarvationCount:1}).catch(s=>{clearTimeout(n),r.off("message",i),o(s);});})}async function sr(r){await Ie(r,"Emulation.setVirtualTimePolicy",{policy:"pause"});}async function Re(r,e){await Ie(r,"Emulation.setDeviceMetricsOverride",{...e,deviceScaleFactor:1,mobile:false});}var dt=32;var ar="stego-tick";function cr(r,e){let{width:t,height:o}=e;return `<!DOCTYPE html>
|
|
3
3
|
<html>
|
|
4
4
|
<head>
|
|
5
5
|
<meta charset="UTF-8">
|
|
@@ -113,110 +113,7 @@ ${n}`));e({width:parseInt(s[1],10),height:parseInt(s[2],10),duration:parseInt(c[
|
|
|
113
113
|
})();
|
|
114
114
|
</script>
|
|
115
115
|
</body>
|
|
116
|
-
</html>`}function Me(r,e){let{width:t,height:o}=e;if(t<dt||o<2)return;let n=o-1,i=0;for(let s=0;s<dt;s++){let c=(n*t+s)*4,d=(r[c]??0)>127?1:0;i=i<<1|d;}if(i=i>>>0,!(!Number.isFinite(i)||i<0||i>1e7))return i}function dr(r){return ct(r,"__pup_start_stego__()")}async function ur(r,e,t){let o=new Promise(n=>r.ipc.once(ar,n));await ct(r.debugger,`__pup_draw_stego__(${e})`),await ir(r.debugger,t),await R(o,5e3,"swapBuffer");}var ut="pup",Lo="pup-frame",pr={standard:true,secure:true,bypassCSP:true,allowServiceWorkers:true,supportFetchAPI:true,corsEnabled:true,stream:true,codeCache:true};electron.protocol.registerSchemesAsPrivileged([{scheme:ut,privileges:pr},{scheme:Lo,privileges:pr}]);function lr(){electron.protocol.handle(ut,r=>{let e=new URL(r.url),t=e.searchParams.get("src")??"",o=parseInt(e.searchParams.get("w")??"0",10),n=parseInt(e.searchParams.get("h")??"0",10),i=cr(t,{width:o,height:n});return new Response(i,{headers:{"content-type":"text/html"}})});}function fr(r,e){let t=new URL(`${ut}://stego`);return t.searchParams.set("src",r.replace("http://","https://")),t.searchParams.set("w",String(e.width)),t.searchParams.set("h",String(e.height)),t.toString()}var re=class{constructor(e){this.maxConcurrency=e;}maxConcurrency;_active=0;_queue=[];_signals=new WeakSet;_resolve;get active(){return this._active}get pending(){return this._queue.length}get stats(){return `active: ${this.active}, pending: ${this.pending}`}async schedule(e,t){return t?.throwIfAborted(),t&&!this._signals.has(t)&&(this._signals.add(t),t.addEventListener("abort",()=>this.flush(t),{once:true})),new Promise((o,n)=>{this._queue.push({run:()=>{if(t?.aborted){n(t.reason),this.next();return}this._active++,e().then(i=>{this._active--,o(i),this.next();}).catch(i=>{this._active--,n(i),this.next();});},reject:n,signal:t}),this.next();})}async drain(){if(!(this._active===0&&this.pending===0))return new Promise(e=>this._resolve=e)}flush(e){let t=[];for(let o of this._queue)o.signal===e?o.reject(e.reason):t.push(o);this._queue=t,this.next();}next(){if(this._active===0&&this.pending===0){this._resolve?.(),this._resolve=void 0;return}this._active<this.maxConcurrency&&this._queue.shift()?.run();}};async function q(r,e){let t=new nodeAv.CodecContext;t.allocContext3(r.codec),t.codecId=r.codec.id,t.width=r.width,t.height=r.height,t.pixelFormat=r.pixelFormat,t.timeBase=new nodeAv.Rational(1,r.fps),t.framerate=new nodeAv.Rational(r.fps,1),t.gopSize=r.fps*2,t.bitRate=BigInt(r.bitrate),t.setFlags(constants.AV_CODEC_FLAG_GLOBAL_HEADER),r.codecTag&&(t.codecTag=r.codecTag),r.colorRange!==void 0&&(t.colorRange=r.colorRange),r.hwFramesCtx&&(t.hwFramesCtx=r.hwFramesCtx);for(let[o,n]of Object.entries(r.options??{}))t.setOption(o,n);return nodeAv.FFmpegError.throwIfError(await t.open2(r.codec,null),e),t}function K(r,e,t){let o=new nodeAv.Frame;return o.alloc(),o.format=t,o.width=r,o.height=e,nodeAv.FFmpegError.throwIfError(o.getBuffer(0),"frame.getBuffer"),o}function S(){let r=new nodeAv.Packet;return r.alloc(),r}async function oe(r,e,t,o){for(;;){let n=await r.receivePacket(e);if(n===constants.AVERROR_EAGAIN||n===constants.AVERROR_EOF)break;nodeAv.FFmpegError.throwIfError(n,"receivePacket"),e.streamIndex=t.index,e.duration===0n&&(e.duration=1n),e.rescaleTs(r.timeBase,t.timeBase),await o.writePacket(e),e.unref();}}var D=class r{src;dst;pkt;_sws;_png;static async create(e,t){let o=nodeAv.Codec.findDecoderByName(nodeAv.FF_DECODER_PNG);return assert.ok(o,"png decoder unavailable"),new r(e,t,o)}constructor(e,t,o){this._png=o,this.src=K(e,t,nodeAv.AV_PIX_FMT_BGRA),this.dst=K(e,t,nodeAv.AV_PIX_FMT_YUVA420P),this.pkt=S();}async png(){let e=new nodeAv.CodecContext;return e.allocContext3(this._png),nodeAv.FFmpegError.throwIfError(await e.open2(this._png),"pngDecoder.open2"),e}async decodePNG(e){var o=[];try{let t=F(o,await this.png());this.pkt.data=e;nodeAv.FFmpegError.throwIfError(await t.sendPacket(this.pkt),"pngDecoder.sendPacket");this.pkt.unref();nodeAv.FFmpegError.throwIfError(await t.receiveFrame(this.src),"pngDecoder.receiveFrame");return this.src}catch(n){var i=n,s=true;}finally{A(o,i,s);}}get sws(){if(!this._sws){let e=new nodeAv.SoftwareScaleContext,t=this.src.format;e.getContext(this.src.width,this.src.height,t,this.src.width,this.src.height,nodeAv.AV_PIX_FMT_YUVA420P,nodeAv.SWS_BILINEAR),this._sws=e;}return this._sws}[Symbol.dispose](){this.src[Symbol.dispose](),this.dst[Symbol.dispose](),this.pkt[Symbol.dispose](),this._sws?.[Symbol.dispose]();}};var sn={[constants.AV_SAMPLE_FMT_FLT]:"flt",[constants.AV_SAMPLE_FMT_FLTP]:"fltp"},Oe=class r{_ctx;_stream;_pkt;_outRate;_outFmt;_frameSize;_filterFrame;_graph;_bufSrc;_bufSink;_inRate;_pts=0n;constructor(e,t,o){this._ctx=e,this._stream=t,this._outRate=e.sampleRate,this._outFmt=o,this._frameSize=e.frameSize,this._pkt=S(),this._filterFrame=new nodeAv.Frame,this._filterFrame.alloc();}static async create(e){let t=nodeAv.Codec.findEncoderByName(e.codecName);if(!t)throw new Error(`Audio encoder not found: ${e.codecName}`);let o=new nodeAv.CodecContext;o.allocContext3(t),o.codecId=t.id,o.sampleFormat=e.outSampleFmt,o.sampleRate=e.outSampleRate,o.channelLayout=constants.AV_CHANNEL_LAYOUT_STEREO,o.timeBase=new nodeAv.Rational(1,e.outSampleRate),o.bitRate=BigInt(e.bitrate),e.globalHeader&&o.setFlags(constants.AV_CODEC_FLAG_GLOBAL_HEADER),nodeAv.FFmpegError.throwIfError(await o.open2(t,null),"audioCtx.open2");let n=e.muxer.addStream(o);return new r(o,n,e.outSampleFmt)}setInputRate(e){this._graph?.[Symbol.dispose](),this._inRate=e;let t=new nodeAv.FilterGraph;t.alloc();let o=nodeAv.Filter.getByName("abuffer"),n=t.createFilter(o,"src",`sample_rate=${e}:sample_fmt=flt:channel_layout=stereo:time_base=1/${e}`);if(!n)throw new Error("Failed to create abuffer");let i=nodeAv.Filter.getByName("abuffersink"),s=t.createFilter(i,"sink");if(!s)throw new Error("Failed to create abuffersink");let a=`aformat=sample_fmts=${sn[this._outFmt]??"flt"}:sample_rates=${this._outRate}:channel_layouts=stereo,asetnsamples=n=${this._frameSize}:p=1`,d=nodeAv.FilterInOut.createList([{name:"in",filterCtx:n,padIdx:0}]),p=nodeAv.FilterInOut.createList([{name:"out",filterCtx:s,padIdx:0}]);nodeAv.FFmpegError.throwIfError(t.parsePtr(a,p,d),"graph.parsePtr"),nodeAv.FFmpegError.throwIfError(t.configSync(),"graph.config"),this._graph=t,this._bufSrc=n,this._bufSink=s;}async encode(e,t){var s=[];try{if(!this._bufSrc||!this._inRate)return;let o=new Float32Array(e.buffer,e.byteOffset,e.byteLength/4);for(let p=0;p<o.length;p++)isFinite(o[p])||(o[p]=0);let n=o.length>>1;let i=F(s,nodeAv.Frame.fromAudioBuffer(Buffer.from(o.buffer,o.byteOffset,o.byteLength),{nbSamples:n,format:constants.AV_SAMPLE_FMT_FLT,sampleRate:this._inRate,channelLayout:constants.AV_CHANNEL_LAYOUT_STEREO,pts:this._pts,timeBase:{num:1,den:this._inRate}}));this._pts+=BigInt(n);nodeAv.FFmpegError.throwIfError(await this._bufSrc.buffersrcAddFrame(i),"buffersrcAddFrame");await this.drain(t);}catch(c){var a=c,d=true;}finally{A(s,a,d);}}async flush(e){this._bufSrc&&(await this._bufSrc.buffersrcAddFrame(null),await this.drain(e)),await this._ctx.sendFrame(null),await this.drainCodec(e);}[Symbol.dispose](){this._pkt.free(),this._filterFrame.free(),this._graph?.[Symbol.dispose](),this._ctx.freeContext();}async drain(e){for(;;){let t=await this._bufSink.buffersinkGetFrame(this._filterFrame);if(t===constants.AVERROR_EAGAIN||t===constants.AVERROR_EOF)break;nodeAv.FFmpegError.throwIfError(t,"buffersinkGetFrame"),nodeAv.FFmpegError.throwIfError(await this._ctx.sendFrame(this._filterFrame),"audioCtx.sendFrame"),this._filterFrame.unref(),await this.drainCodec(e);}}drainCodec(e){return oe(this._ctx,this._pkt,this._stream,e)}};function N(r){let e=Buffer.alloc(r.length>>3);for(let t=0;t<e.length;t++){let o=0;for(let n=0;n<8;n++)o=o<<1|r[t*8+n];e[t]=o;}return e}var L=class{bits=[];w(e,t){for(let o=t-1;o>=0;o--)this.bits.push(e>>o&1);}flag(e){this.bits.push(e?1:0);}ue(e){let t=e+1,o=32-Math.clz32(t);for(let n=0;n<o-1;n++)this.bits.push(0);for(let n=o-1;n>=0;n--)this.bits.push(t>>n&1);}align(e){for(;this.bits.length%8!==0;)this.bits.push(e);}copy(e,t,o){for(let n=0;n<o;n++)this.bits.push(e[t+n]);}},E=class{_bits;pos=0;constructor(e){this._bits=[];for(let t=0;t<e.length;t++)for(let o=7;o>=0;o--)this._bits.push(e[t]>>o&1);}get bits(){return this._bits}read(e){let t=0;for(let o=0;o<e;o++)t=t<<1|this._bits[this.pos++];return t}readUe(){let e=0;for(;this._bits[this.pos]===0;)e++,this.pos++;this.pos++;let t=1;for(let o=0;o<e;o++)t=t<<1|this._bits[this.pos++];return t-1}};var H=Buffer.from([0,0,0,1]);var lt=16;var ft=23,ie=32,se=33,Be=34,yr=39;function Pr(r,e){let t=r>>1&63,o=(r&1)<<5|e>>3&31,n=e&7;return {type:t,layerId:o,temporalId:n}}function ht(r,e,t){let o=(r&63)<<1|e>>5&1,n=(e&31)<<3|t&7;return [o,n]}function k(r){let e=[],t=0;for(;t<r.length;){let o=0;if(t+3<r.length&&r[t]===0&&r[t+1]===0&&r[t+2]===1)o=3;else if(t+4<r.length&&r[t]===0&&r[t+1]===0&&r[t+2]===0&&r[t+3]===1)o=4;else {t++;continue}let n=t+o;if(n+2>r.length)break;let i=r.length;for(let a=n+2;a<r.length-2;a++)if(r[a]===0&&r[a+1]===0&&(r[a+2]===1||a+3<r.length&&r[a+2]===0&&r[a+3]===1)){i=a;break}let{type:s,layerId:c}=Pr(r[n],r[n+1]);e.push({type:s,layerId:c,data:r.subarray(n,i)}),t=i;}return e}function wt(r,e){let t=Buffer.from(r),{type:o,temporalId:n}=Pr(t[0],t[1]),[i,s]=ht(o,e,n);return t[0]=i,t[1]=s,t}function T(r){let e=[];for(let t=0;t<r.length;t++)t+2<r.length&&r[t]===0&&r[t+1]===0&&r[t+2]===3?(e.push(0,0),t+=2):e.push(r[t]);return Buffer.from(e)}function X(r){let e=[];e.push(r[0],r[1]);let t=0;for(let o=2;o<r.length;o++)t===2&&r[o]<=3&&(e.push(3),t=0),r[o]===0?t++:t=0,e.push(r[o]);return Buffer.from(e)}var an=48,Cr=24,cn=2,dn=10,gt=0,un=1;function Er(r,e,t){let o=e>>3,n=1<<7-(e&7),i=r[o]??0;r[o]=t?i|n:i&~n;}function Sr(r,e){let t=T(r);return Er(t,e+cn,0),Er(t,e+dn,1),X(t)}function De(r){let e=k(r);if(e.length===0)return r;let t=[];for(let o of e){let n=o.data;o.type===ie?n=Sr(o.data,an):o.type===se&&(n=Sr(o.data,Cr)),t.push(H,n);}return Buffer.concat(t)}function pn(r,e,t){let o=T(r),n=new E(o),i=new L;for(let s=0;s<e;s++)i.bits.push(n.read(1));for(n.readUe(),i.ue(t);n.pos<n.bits.length;)i.bits.push(n.read(1));for(;i.bits.length%8!==0;)i.bits.push(0);return X(N(i.bits))}function mn(r,e,t,o){let n=T(r),i=new E(n),s=new L;for(let c=0;c<e;c++)s.bits.push(i.read(1));for(i.readUe(),i.readUe(),s.ue(t),s.ue(o);i.pos<i.bits.length;)s.bits.push(i.read(1));for(;s.bits.length%8!==0;)s.bits.push(0);return X(N(s.bits))}function Fr(r){let e=Cr+96;return pn(r,e,1)}function Ar(r){return mn(r,16,1,1)}function ln(r){let e=r.readUe();return e&1?e+1>>1:-(e>>1)}function fn(r,e){if(r.read(1)){let o=r.readUe();if(o!==0)throw new Error(`apple_alpha: unexpected delta_idx_minus1=${o}`);r.read(1),r.readUe();for(let n=0;n<=e;n++)r.read(1)||r.read(1);}else {let o=r.readUe(),n=r.readUe();for(let i=0;i<o;i++)r.readUe(),r.read(1);for(let i=0;i<n;i++)r.readUe(),r.read(1);}}function hn(r,e,t){if(r.read(16),r.read(1)!==1)throw new Error("apple_alpha: expected first_slice_segment_in_pic_flag=1");let o=e>=lt&&e<=ft;o&&r.read(1),r.readUe();let n=r.readUe();if(!o){if(r.read(t.log2MaxPocLsb),r.read(1)?t.numShortTermRefPicSets>1&&r.read(Math.ceil(Math.log2(t.numShortTermRefPicSets))):fn(r,t.numDeltaPocsSet0),t.longTermRefPicsPresent)throw new Error("apple_alpha: long_term_ref_pics path unimplemented");t.spsTemporalMvpEnabled&&r.read(1);}return t.saoEnabled&&(r.read(1),r.read(1)),(n===un||n===gt)&&(r.read(1)&&(r.readUe(),n===gt&&r.readUe()),n===gt&&r.read(1),t.cabacInitPresent&&r.read(1),r.readUe()),ln(r),t.ppsHasLoopFilterAcrossSlicesFlag&&r.read(1),r.pos}function kr(r,e,t){let o=T(r),n=new E(o),i=new E(o),s=hn(i,e,t),c=s%8===0?8:8-s%8,a=(s+c)/8,d=new L;for(let u=0;u<16;u++)d.bits.push(n.read(1));for(d.bits.push(n.read(1)),e>=lt&&e<=ft&&d.bits.push(n.read(1)),n.readUe(),d.ue(1);n.pos<s;)d.bits.push(n.read(1));for(d.bits.push(1);d.bits.length%8!==0;)d.bits.push(0);return X(Buffer.concat([N(d.bits),o.subarray(a)]))}function wn(r){let e=new E(T(r));if(e.read(16),e.read(4),e.read(2),e.read(6)>0)return;let t=e.read(3);e.read(17);let o=e.pos;return e.read(96),t>0&&e.read(t*2+(8-t)*2),{ptlStart:o,ptlEnd:e.pos,ptlBits:e.bits,maxSubLayersMinus1:t}}function gn(r,e){r.w(16385,16),r.w(0,4),r.flag(1),r.flag(1),r.w(1,6),r.w(e.maxSubLayersMinus1,3),r.flag(e.maxSubLayersMinus1===0),r.w(65535,16),r.copy(e.ptlBits,e.ptlStart,e.ptlEnd-e.ptlStart),r.flag(1);for(let t=0;t<=e.maxSubLayersMinus1;t++)r.ue(4),r.ue(2),r.ue(4);r.w(1,6),r.ue(1),r.flag(1),r.flag(1),r.flag(0),r.flag(1),r.align(1);}function bn(r,e,t,o){if(r.copy(e.ptlBits,e.ptlEnd-8,8),e.maxSubLayersMinus1>0){for(let n=0;n<e.maxSubLayersMinus1;n++)r.w(0,2);for(let n=e.maxSubLayersMinus1;n<8;n++)r.w(0,2);}r.flag(0);for(let n=0;n<16;n++)r.flag(n===2||n===3);r.w(0,3),r.w(0,3),r.flag(1),r.w(1,6),r.w(1,1),r.w(1,1),r.w(0,4),r.flag(0),r.ue(0),r.flag(0),r.flag(0),r.flag(0),r.ue(2),r.flag(1),r.copy(e.ptlBits,e.ptlStart,e.ptlEnd-e.ptlStart),r.ue(0),r.w(0,2),r.w(1,2),r.w(2,2),r.ue(0),r.w(t,16),r.w(o,16),r.flag(1),r.w(1,2),r.w(0,4),r.w(0,4),r.flag(0),r.flag(1),r.flag(0),r.flag(1),r.flag(0),r.ue(0),r.ue(0),r.ue(0),r.ue(0),r.ue(0),r.flag(0),r.ue(0),r.flag(0),r.flag(0);}function Tr(r,e,t){let o=wn(r);if(!o)return r;let n=new L;return gn(n,o),bn(n,o,e,t),n.bits.push(1),n.align(0),X(N(n.bits))}function Ir(r,e){let t=r.data?.[0],o=r.linesize?.[0];if(!t||!o)throw new Error("extractAlpha: missing BGRA data");let n=r.width,i=r.height,s=n*i;if(t.byteOffset%4===0&&o===n*4){let c=new Uint32Array(t.buffer,t.byteOffset,s);for(let a=0;a<s;a++)e[a]=c[a]>>>24;}else for(let c=0;c<i;c++){let a=c*o+3,d=c*n;for(let p=0;p<n;p++)e[d+p]=t[a+p*4];}}function vn(r,e){return r===se?Fr(e):r===Be?Ar(e):e}function Rr(r){let{baseExtradata:e,alphaExtradata:t}=r,o=k(e),n=k(t),i=new Map;for(let a of n){if(a.type===ie)continue;let d=i.get(a.type)??[];d.push(a),i.set(a.type,d);}let s=[],c=new Set;for(let a of o){let d=a.type===ie?Tr(a.data,r.width,r.height):a.data;if(s.push(H,d),!c.has(a.type)){c.add(a.type);for(let p of i.get(a.type)??[]){let u=vn(a.type,p.data);s.push(H,wt(u,1));}}}return s.push(_n()),Buffer.concat(s)}function _n(){let[t,o]=ht(yr,0,1),n=[],i=(s,c)=>{for(let a=c-1;a>=0;a--)n.push(s>>a&1);};for(i(0,1),i(0,3),i(0,3),i(0,9),i(255,9),i(0,1),i(0,1),i(1,1);n.length%8!==0;)i(0,1);return Buffer.concat([H,Buffer.from([t,o]),Buffer.from([165,4]),N(n),Buffer.from([128])])}function Mr(r,e,t){let o=[];for(let n of r)o.push(H,n.data);for(let n of e)if(n.type<ie){let i=kr(n.data,n.type,t);o.push(H,wt(i,1));}return Buffer.concat(o)}var Le=class{_s;_baseQueue=[];_alphaQueue=[];constructor(e){this._s=e;}async drain(e){let{baseCtx:t,alphaCtx:o,basePkt:n,alphaPkt:i}=this._s;for(this._baseQueue.push(...await this.receiveAll(t,n,"base")),this._alphaQueue.push(...await this.receiveAll(o,i,"alpha"));this._baseQueue.length&&this._alphaQueue.length;)await this.writePair(this._baseQueue.shift(),this._alphaQueue.shift(),e);}desyncAfterEof(){if(!(!this._baseQueue.length&&!this._alphaQueue.length))return `base=${this._baseQueue.length}, alpha=${this._alphaQueue.length} unpaired`}async receiveAll(e,t,o){let n=[];for(;;){let i=await e.receivePacket(t);if(i>=0){n.push(this.snapshot(t)),t.unref();continue}if(i===constants.AVERROR_EAGAIN||i===constants.AVERROR_EOF)return n;nodeAv.FFmpegError.throwIfError(i,`nvenc.${o}.receivePacket`);}}snapshot(e){return {data:Buffer.from(e.data),pts:e.pts,dts:e.dts,duration:e.duration,flags:e.flags}}async writePair(e,t,o){let{basePkt:n,baseCtx:i,stream:s,hevcCfg:c}=this._s,a=Mr(k(e.data),k(t.data),c);n.data=De(a),n.pts=e.pts,n.dts=e.dts,n.duration=e.duration===0n?1n:e.duration,n.flags=e.flags,n.streamIndex=s.index,n.rescaleTs(i.timeBase,s.timeBase),await o.writePacket(n),n.unref();}};function V(r,e,t){throw new Error(`hevc_alpha: NVENC SPS/PPS unsupported: ${r}=${e}, expected ${t}`)}function En(r,e){r.read(8),r.read(32),r.read(48),r.read(8);let t=[],o=[];for(let n=0;n<e;n++)t.push(r.read(1)),o.push(r.read(1));if(e>0)for(let n=e;n<8;n++)r.read(2);for(let n=0;n<e;n++)t[n]&&r.read(88),o[n]&&r.read(8);}function Sn(r){let e=new E(r);e.read(16),e.read(4);let t=e.read(3);t!==0&&V("sps_max_sub_layers_minus1",t,"0"),e.read(1),En(e,t),e.readUe();let o=e.readUe();o===3&&V("chroma_format_idc",o,"\u22603"),e.readUe(),e.readUe(),e.read(1)&&(e.readUe(),e.readUe(),e.readUe(),e.readUe()),e.readUe(),e.readUe();let n=e.readUe()+4,s=e.read(1)?t+1:1;for(let f=0;f<s;f++)e.readUe(),e.readUe(),e.readUe();e.readUe(),e.readUe(),e.readUe(),e.readUe(),e.readUe(),e.readUe(),e.read(1)&&V("scaling_list_enabled_flag",1,"0"),e.read(1);let c=e.read(1)===1;e.read(1)&&V("pcm_enabled_flag",1,"0");let a=e.readUe();a>1&&V("num_short_term_ref_pic_sets",a,"\u22641");let d=0;if(a===1){let f=e.readUe(),w=e.readUe();d=f+w;for(let h=0;h<f;h++)e.readUe(),e.read(1);for(let h=0;h<w;h++)e.readUe(),e.read(1);}let p=e.read(1)===1;p&&V("long_term_ref_pics_present_flag",1,"0");let u=e.read(1)===1;return {log2MaxPocLsb:n,saoEnabled:c,numShortTermRefPicSets:a,numDeltaPocsSet0:d,longTermRefPicsPresent:p,spsTemporalMvpEnabled:u}}function Cn(r){let e=new E(r);e.read(16),e.readUe(),e.readUe(),e.read(1),e.read(1);let t=e.read(3);t!==0&&V("num_extra_slice_header_bits",t,"0"),e.read(1);let o=e.read(1)===1;e.readUe(),e.readUe(),e.readUe(),e.read(1),e.read(1),e.read(1)&&e.readUe(),e.readUe(),e.readUe(),e.read(1),e.read(1),e.read(1),e.read(1),e.read(1)&&V("tiles_enabled_flag",1,"0"),e.read(1);let n=e.read(1)===1,i=e.read(1),s=false;return i&&(e.read(1),s=e.read(1)===1,s||(e.readUe(),e.readUe())),{cabacInitPresent:o,ppsHasLoopFilterAcrossSlicesFlag:n&&!s}}function Or(r){let e=k(r),t=e.find(s=>s.type===se),o=e.find(s=>s.type===Be);if(!t)throw new Error("hevc_alpha: SPS missing in NVENC extradata");if(!o)throw new Error("hevc_alpha: PPS missing in NVENC extradata");let n=Sn(T(t.data)),i=Cn(T(o.data));return {...n,...i}}var Ne=class r{_s;_mux;_pts=0n;constructor(e){this._s=e,this._mux=new Le({baseCtx:e.baseCtx,alphaCtx:e.alphaCtx,basePkt:e.basePkt,alphaPkt:e.alphaPkt,stream:e.stream,hevcCfg:e.hevcCfg});}static async create(e){let{width:t,height:o,fps:n,bitrate:i,muxer:s}=e,c=nodeAv.Codec.findEncoderByName(constants.FF_ENCODER_HEVC_NVENC);if(!c)throw new Error("hevc_nvenc encoder not found");let d={codec:c,width:t,height:o,fps:n,bitrate:i,options:{preset:"p4",bf:"0",tier:"main"}},p=await q({...d,pixelFormat:constants.AV_PIX_FMT_BGRA},"nvenc.base.open2"),u,f,w,h;try{if(u=await q({...d,pixelFormat:constants.AV_PIX_FMT_YUV420P},"nvenc.alpha.open2"),!p.extraData||!u.extraData)throw new Error("nvenc: codec extradata missing");let b=Or(p.extraData),_=s.addStream(p,"hvc1"),x=Rr({baseExtradata:p.extraData,alphaExtradata:u.extraData,width:t,height:o});_.codecpar.extradata=De(x);let g=t*o,y=(t+1>>1)*(o+1>>1),v=Buffer.alloc(g+y*2);return v.fill(128,g),f=S(),w=S(),h=K(t,o,constants.AV_PIX_FMT_YUV420P),new r({baseCtx:p,alphaCtx:u,basePkt:f,alphaPkt:w,stream:_,alphaSwFrame:h,alphaBuf:v,hevcCfg:b})}catch(b){throw f?.free(),w?.free(),h?.free(),u?.freeContext(),p.freeContext(),b}}async encode(e,t){let{baseCtx:o,alphaCtx:n,alphaSwFrame:i,alphaBuf:s}=this._s,c=this._pts++;Ir(e,s),nodeAv.FFmpegError.throwIfError(i.makeWritable(),"alphaSw.makeWritable"),nodeAv.FFmpegError.throwIfError(i.fromBuffer(s),"alphaSw.fromBuffer"),i.pts=c,i.duration=1n,e.pts=c,e.duration=1n,nodeAv.FFmpegError.throwIfError(await o.sendFrame(e),"base.sendFrame"),nodeAv.FFmpegError.throwIfError(await n.sendFrame(i),"alpha.sendFrame"),await this._mux.drain(t);}async flush(e){await this.sendEof(this._s.baseCtx,"base"),await this.sendEof(this._s.alphaCtx,"alpha"),await this._mux.drain(e);let t=this._mux.desyncAfterEof();if(t)throw new Error(`NVENC desync: ${t}`)}[Symbol.dispose](){let{basePkt:e,alphaPkt:t,baseCtx:o,alphaCtx:n,alphaSwFrame:i}=this._s;e.free(),t.free(),i.free(),n.freeContext(),o.freeContext();}async sendEof(e,t){let o=await e.sendFrame(null);o<0&&o!==constants.AVERROR_EAGAIN&&o!==constants.AVERROR_EOF&&nodeAv.FFmpegError.throwIfError(o,`nvenc.${t}.sendFrame(null)`);}};var ae=class r{_ctx;_pkt;_stream;_pts=0n;constructor(e,t,o){this._ctx=e,this._pkt=t,this._stream=o;}static async create(e){let{codecName:t,codecTag:o,codecOpts:n,muxer:i,...s}=e,c=nodeAv.Codec.findEncoderByName(t);if(!c)throw new Error(`Video encoder not found: ${t}`);let a=await q({codec:c,...s,codecTag:o,options:n},"videoCtx.open2"),d=i.addStream(a,o);return new r(a,S(),d)}async encode(e,t){e.pts=this._pts++,e.duration=1n,nodeAv.FFmpegError.throwIfError(await this._ctx.sendFrame(e),"videoCtx.sendFrame"),await this.drain(t);}async flush(e){await this._ctx.sendFrame(null),await this.drain(e);}[Symbol.dispose](){this._pkt.free(),this._ctx.freeContext();}drain(e){return oe(this._ctx,this._pkt,this._stream,e)}};var He=class r{_ctx;_pkt;_stream;_pts=0n;constructor(e,t,o){this._ctx=e,this._pkt=t,this._stream=o;}static async create(e){let{width:t,height:o,fps:n,hw:i,bitrate:s,muxer:c}=e,a=i.getEncoderCodec("hevc");if(!a)throw new Error("hevc_videotoolbox encoder not found");let d=await q({codec:a,width:t,height:o,fps:n,bitrate:s,pixelFormat:constants.AV_PIX_FMT_BGRA,colorRange:constants.AVCOL_RANGE_JPEG,codecTag:"hvc1",options:{alpha_quality:"1"}},"vtEnc.open2"),p;try{let u=c.addStream(d,"hvc1");return p=S(),new r(d,p,u)}catch(u){throw p?.free(),d.freeContext(),u}}async encode(e,t){e.pts=this._pts++,e.duration=1n,nodeAv.FFmpegError.throwIfError(await this._ctx.sendFrame(e),"vtEnc.sendFrame"),await this.drain(t);}async flush(e){await this._ctx.sendFrame(null),await this.drain(e);}[Symbol.dispose](){this._pkt.free(),this._ctx.freeContext();}drain(e){return oe(this._ctx,this._pkt,this._stream,e)}};var Ve="[Encoder]";async function Dr(r,e){let{width:t,height:o,fps:n,bitrate:i=8e6,disableHwCodec:s=false,sharedHw:c}=r,a=c??(s?void 0:api.HardwareContext.auto()??void 0),d=!c&&!!a;try{if(a?.deviceTypeName===constants.FF_HWDEVICE_TYPE_VIDEOTOOLBOX&&a.getEncoderCodec("hevc"))return l.debug(Ve,"using VideoToolbox HEVC alpha encoder"),{hwVideo:await He.create({width:t,height:o,fps:n,hw:a,bitrate:i,muxer:e}),hw:a,ownsHw:d};if(a?.deviceTypeName===constants.FF_HWDEVICE_TYPE_CUDA&&a.getEncoderCodec("hevc"))return l.debug(Ve,"using NVENC dual-layer HEVC alpha encoder"),{hwVideo:await Ne.create({width:t,height:o,fps:n,hw:a,bitrate:i,muxer:e}),hw:a,ownsHw:d}}catch(u){l.warn(Ve,"Hardware codec session limits reached, use software encoder",u),d&&a?.dispose();}return l.debug(Ve,"using software libx265 HEVC alpha encoder"),{video:await ae.create({width:t,height:o,fps:n,codecName:constants.FF_ENCODER_LIBX265,codecTag:"hvc1",codecOpts:{preset:"medium","x265-params":"log-level=1:bframes=3:pools=+:frame-threads=0"},bitrate:i,pixelFormat:constants.AV_PIX_FMT_YUVA420P,muxer:e}),codec:await D.create(t,o),ownsHw:false}}var Ue=class{_ctx;_opened=false;constructor(e,t){this._ctx=new nodeAv.FormatContext,nodeAv.FFmpegError.throwIfError(this._ctx.allocOutputContext2(null,t??null,e),"allocOutputContext2");}addStream(e,t){let o=this._ctx.newStream(null);return o.timeBase=e.timeBase,nodeAv.FFmpegError.throwIfError(o.codecpar.fromContext(e),"codecpar.fromContext"),t&&(o.codecpar.codecTag=t),o}async open(){this._opened||(nodeAv.FFmpegError.throwIfError(await this._ctx.openOutput(),"openOutput"),nodeAv.FFmpegError.throwIfError(await this._ctx.writeHeader(null),"writeHeader"),this._opened=true);}async writePacket(e){nodeAv.FFmpegError.throwIfError(await this._ctx.interleavedWriteFrame(e),"interleavedWriteFrame");}async[Symbol.asyncDispose](){if(this._opened){this._opened=false;try{await this._ctx.writeTrailer();}finally{await this._ctx.closeOutput(),await this._ctx[Symbol.asyncDispose]();}}}};var Xn="libvpx-vp9",xe=class r{_s;_disposed=false;constructor(e){this._s=e;}static kindFromPath(e){let t=e.toLowerCase();if(t.endsWith(".webm"))return "webm";if(t.endsWith(".mp4")||t.endsWith(".mov"))return "mp4";throw new Error(`Unsupported output extension: ${e}`)}static async create(e){let t=new Ue(e.outFile),o=e.kind==="mp4"?await this.mp4Video(e,t):await this.webmVideo(e,t),n=e.withAudio?await this.audioFor(e,t):void 0;return await t.open(),new r({muxer:t,...o,audio:n,opts:e})}static mp4Video(e,t){let{width:o,height:n,fps:i,disableHwCodec:s,sharedHw:c}=e;return Dr({width:o,height:n,fps:i,disableHwCodec:s,sharedHw:c},t)}static async webmVideo(e,t){let{width:o,height:n,fps:i}=e;return {video:await ae.create({width:o,height:n,fps:i,codecName:Xn,codecOpts:{deadline:"realtime","cpu-used":"8","row-mt":"1",threads:"2"},bitrate:4e6,pixelFormat:constants.AV_PIX_FMT_YUVA420P,muxer:t}),codec:await D.create(o,n),ownsHw:false}}static audioFor(e,t){let o=e.kind==="mp4"?{outSampleRate:44100,outSampleFmt:constants.AV_SAMPLE_FMT_FLTP,codecName:constants.FF_ENCODER_AAC}:{outSampleRate:48e3,outSampleFmt:constants.AV_SAMPLE_FMT_FLT,codecName:constants.FF_ENCODER_LIBOPUS};return Oe.create({...o,globalHeader:true,bitrate:128e3,muxer:t})}setInputRate(e){this._s.audio?.setInputRate(e);}async encodeBGRA(e){let{hwVideo:t,muxer:o}=this._s;return t?t.encode(e,o):this.swEncode(e)}async encodeDecodedFrame(e){let{hwVideo:t,muxer:o}=this._s;return t?t.encode(e,o):this.swEncode(e)}async encodeAudio(e){await this._s.audio?.encode(e,this._s.muxer);}async flush(){let{hwVideo:e,video:t,audio:o,muxer:n}=this._s;await o?.flush(n),e?await e.flush(n):await t.flush(n);}async[Symbol.asyncDispose](){if(this._disposed)return;this._disposed=true;let{muxer:e,video:t,hwVideo:o,audio:n,codec:i,hw:s,ownsHw:c}=this._s;t?.[Symbol.dispose](),o?.[Symbol.dispose](),n?.[Symbol.dispose](),i?.[Symbol.dispose](),await e[Symbol.asyncDispose](),c&&s?.dispose();}async swEncode(e){let{video:t,codec:o,muxer:n}=this._s;assert.ok(o?.sws,"sws not initialized"),nodeAv.FFmpegError.throwIfError(o.dst.makeWritable(),"sinkDst.makeWritable"),nodeAv.FFmpegError.throwIfError(await o.sws.scaleFrame(o.dst,e),"sinkSws.scaleFrame"),await t.encode(o.dst,n);}};var ce=class r{_s;_disposed=false;constructor(e){this._s=e;}static async create(e){let{width:t,height:o,fps:n,outFile:i,withAudio:s=false,disableHwCodec:c=false}=e,a=i.split(",").map(h=>h.trim()).filter(Boolean);if(a.length===0)throw new Error("outFile must contain at least one path");let d=a.map(h=>xe.kindFromPath(h)),u=!c&&d.includes("mp4")?api.HardwareContext.auto()??void 0:void 0,f=u?.deviceTypeName===constants.FF_HWDEVICE_TYPE_VIDEOTOOLBOX||u?.deviceTypeName===constants.FF_HWDEVICE_TYPE_CUDA,w=[];for(let h=0;h<a.length;h++){let b=await xe.create({outFile:a[h],kind:d[h],width:t,height:o,fps:n,withAudio:s,disableHwCodec:c,sharedHw:d[h]==="mp4"&&f?u:void 0});w.push(b);}return new r({sinks:w,sharedHw:u,limiter:new re(1),outFiles:a,opts:e})}setupAudio(e){for(let t of this._s.sinks)t.setInputRate(e);}async encodeBGRA(e){await this._s.limiter.schedule(async()=>{var o=[];try{let t=F(o,this.bgraFrame(e));await Promise.all(this._s.sinks.map(c=>c.encodeBGRA(t)));}catch(n){var i=n,s=true;}finally{A(o,i,s);}});}async encodePNG(e){await this._s.limiter.schedule(async()=>{let{width:t,height:o}=this._s.opts;this._s.pngCodec??=await D.create(t,o);let n=await this._s.pngCodec.decodePNG(e);for(let i of this._s.sinks)await i.encodeDecodedFrame(n);});}async encodeAudio(e){await this._s.limiter.schedule(async()=>{for(let t of this._s.sinks)await t.encodeAudio(e);});}async finish(){try{await this._s.limiter.drain();for(let e of this._s.sinks)await e.flush();}finally{await this.free();}return this._s.outFiles}async[Symbol.asyncDispose](){this._disposed||(await this._s.limiter.drain(),await this.free());}async free(){if(!this._disposed){this._disposed=true;for(let e of this._s.sinks)await e[Symbol.asyncDispose]();this._s.pngCodec?.[Symbol.dispose](),this._s.sharedHw?.dispose();}}bgraFrame(e){let t=K(this._s.opts.width,this._s.opts.height,constants.AV_PIX_FMT_BGRA);return nodeAv.FFmpegError.throwIfError(t.fromBuffer(e),"bgraFrame.fromBuffer"),t}};var We=class{_fps;_actual=0;_currentBurst=0;_bursts=[];constructor(e){this._fps=e;}wrote(e=1){this._currentBurst>0&&(this._bursts.push(this._currentBurst),this._currentBurst=0),this._actual+=e;}dropped(e=1){this._currentBurst+=e;}finalize(){this._currentBurst>0&&(this._bursts.push(this._currentBurst),this._currentBurst=0);let e=0,t=0,o=0;for(let a of this._bursts){e+=a,o=Math.max(o,a);let d=Math.max(0,a-1);t+=(d/this._fps)**2;}let n=this._actual+e,i=n>0?e/n:0,s=Math.min(1,t),c=1-(1-i)*(1-s);return {global:i,local:s,jank:c,expected:n,actual:this._actual,maxBurst:o}}};function $e(r,e){return r.width===e.width&&r.height===e.height}var Nr="audio-meta",Hr="audio-chunk";function Vr({wc:r,encoder:e,getVideoTimeMs:t,onError:o}){let n=async(s,c)=>{let a=c.sampleRate,d=t();e.setupAudio(a);let p=Math.ceil(d*a/1e3);if(!(p<=0))try{await e.encodeAudio(Buffer.alloc(p*2*4));}catch(u){o(u);}},i=async(s,c)=>{try{await e.encodeAudio(c);}catch(a){o(a);}};return r.ipc.on(Nr,n),r.ipc.on(Hr,i),()=>{r.ipc.removeListener(Nr,n),r.ipc.removeListener(Hr,i);}}function Ur({fn:r,maxAttempts:e=3,timeout:t,signal:o}){let n=new Error(`timeout over ${t}ms`);return async function(...i){let s=0;for(;;){o?.throwIfAborted();try{let c=[r(...i)];return t&&c.push(promises$1.setTimeout(t).then(()=>{throw n})),await Promise.race(c)}catch(c){if(o?.throwIfAborted(),s++,s>=e)throw c;await ke(Math.pow(2,s)*100+Math.random()*100);}}}}var bt=["file:","http:","https:","data:"],ri=/^(file:|https?:|data:)/;function Wr(r){if(ri.test(r))return;let e=r.split(":")[0]+":",t=bt.includes(e)?`unsupported protocol: ${e}, expected ${bt.join(", ")}`:`invalid source format, expected ${bt.join(", ")}`;throw new Error(t)}var Ge=class{_promise;_resolve;_timeoutToken;wait(e){if(this._promise)throw new Error("already waiting");return this._promise=new Promise(t=>{this._resolve=t,e?.timeout!==void 0&&(this._timeoutToken=setTimeout(()=>{e.onTimeout?.(),t();},e.timeout));}),this._promise}signal(){clearTimeout(this._timeoutToken),this._promise=void 0,this._resolve?.();}};var je="[Network]",ni=new Map([["jssz-boss.hdslb.com","jssz-boss.bilibili.co"],["boss.hdslb.com","shjd-boss.bilibili.co"]]);function vt(r){if(!r.startsWith("http"))return r;let e=new url.URL(r),t=ni.get(e.hostname);return t?(e.hostname=t,e.protocol="http:",e.toString()):r}function $r({source:r,window:e,useInnerProxy:t}){let o=e.webContents.session.webRequest,n=new re(256),i=new Map;async function s(a,d){let p=new Ge;i.set(a,p),await p.wait({timeout:5e3,onTimeout:d}).finally(()=>i.delete(a));}function c(a){i.get(a)?.signal();}o.onBeforeRequest((a,d)=>{let p=a.url,u=t?vt(p):p;n.schedule(()=>{let f=`${e.id}_${a.id}`;return l.debug(je,"start:",{key:f,url:p,proxied:u,method:a.method,source:r,stats:n.stats}),d(u===p?{cancel:false}:{cancel:false,redirectURL:u}),s(f,()=>{l.warn(je,"maybe timeout:",{key:f,url:p,proxied:u,method:a.method,source:r});})});}),o.onHeadersReceived(({responseHeaders:a},d)=>{delete a?.["x-frame-options"],delete a?.["X-Frame-Options"],delete a?.["content-security-policy"],delete a?.["Content-Security-Policy"],d({cancel:false,responseHeaders:a});}),o.onCompleted(a=>{let d=`${e.id}_${a.id}`;c(d),l.debug(je,"completed:",{key:d,url:a.url,method:a.method,statusCode:a.statusCode,source:r});}),o.onErrorOccurred(a=>{let d=`${e.id}_${a.id}`;c(d),l.error(je,"error:",{key:d,url:a.url,method:a.method,error:a.error,source:r});});}function _t(r){let e=r.webContents.session.webRequest;e.onBeforeRequest(null),e.onHeadersReceived(null),e.onCompleted(null),e.onErrorOccurred(null);}var Q="[Window]",Gr=new Error("window timeout");function si({source:r,win:e,action:t,tolerant:o,signal:n}){return new Promise((i,s)=>{let c=setTimeout(()=>a(Gr),1e4),a=d=>{clearTimeout(c),d?s(d):i();};n?.throwIfAborted(),n?.addEventListener("abort",()=>a(n.reason),{once:true}),e.webContents.once("dom-ready",()=>{l.debug(Q,"dom-ready:",{source:r}),o&&a();}),e.webContents.once("did-stop-loading",()=>{l.debug(Q,"did-stop-loading:",{source:r}),a();}),e.webContents.once("did-fail-load",(d,p,u,f)=>{let w=`did-fail-load: ${JSON.stringify({url:f,source:r,code:p,desc:u})}`;l.error(Q,w),a(new Error(w));}),e.webContents.once("render-process-gone",(d,{exitCode:p,reason:u})=>{let f=`render-process-gone: ${JSON.stringify({source:r,exitCode:p,reason:u})}`;l.error(Q,f),a(new Error(f));}),t();})}function de(r){return new Promise(e=>{_t(r);let t=setTimeout(()=>{try{l.warn(Q,"force close"),r.destroy();}catch{}o();},1e3),o=()=>(clearTimeout(t),e());r.webContents.stopPainting(),r.webContents.debugger.detach(),r.once("closed",o),r.close();})}async function jr({source:r,renderer:e,tolerant:t,preload:o,signal:n,onCreated:i}){let{width:s,height:c,useInnerProxy:a}=e,d=a?vt(r):r,p=new electron.BrowserWindow({width:s,height:c+1,minWidth:s,minHeight:c+1,maxWidth:s,maxHeight:c+1,resizable:false,minimizable:false,movable:false,show:false,transparent:true,backgroundColor:void 0,frame:false,webPreferences:{offscreen:true,backgroundThrottling:false,nodeIntegration:true,nodeIntegrationInSubFrames:true,nodeIntegrationInWorker:true,contextIsolation:false,webSecurity:false,allowRunningInsecureContent:true,experimentalFeatures:true,preload:o}});$r({source:r,window:p,useInnerProxy:a}),p.webContents.debugger.attach("1.3"),await i?.(p),p.webContents.on("console-message",({level:u,message:f,lineNumber:w,sourceId:h})=>{let b=[Q,"console:",{message:f,lineNumber:w,sourceId:h,source:r}];u==="error"?l.error(...b):l.debug(...b),!(u==="warning"&&f.startsWith("%cElectron Security Warning"))&&e.onConsole(u,f);});try{let u=fr(d,{width:s,height:c});await si({source:r,win:p,action:()=>p.loadURL(u),tolerant:t,signal:n});}catch(u){throw await de(p),u}return p}var ai=Ur({fn:jr,maxAttempts:2});async function ze({source:r,renderer:e,preload:t,onCreated:o,signal:n}){Wr(r),n?.throwIfAborted();let i,s;try{i=await ai({source:r,renderer:e,signal:n});}catch(a){s=a;}let c=()=>jr({source:r,renderer:e,preload:t,onCreated:o,signal:n,tolerant:e.windowTolerant});if(e.windowTolerant&&s===Gr)return l.warn(Q,`warmup timeout: ${r}, falling back to dom-ready`),await c();if(s){let{message:a,stack:d}=s;throw new Error(`failed to warmup window: ${JSON.stringify({source:r,message:a,stack:d})}`)}i&&(i.webContents.removeAllListeners(),_t(i),await ke(2e3),await de(i));try{return await c()}catch(a){let{message:d,stack:p}=a;throw new Error(`failed to load window: ${JSON.stringify({source:r,message:d,stack:p})}`)}}var ci="[Render]";async function zr(r){var Y=[];try{let{source:e,fps:t,width:o,height:n,duration:i,withAudio:s,outFile:c,disableHwCodec:a,signal:d,onProgress:p}=r;let u=F(Y,await ce.create({width:o,height:n,fps:t,outFile:c,withAudio:s,disableHwCodec:a}),!0);let f=Math.ceil(t*i);let w=1e3/t;let h={width:o,height:n+1};let b=0;let _;let x=0;let g;let y;let v;let M;let O=new We(t);let ue;let pe=B=>{b++,u.encodeBGRA(B).catch(Z=>g??=Z);};let ye=(B,Z,le)=>{if(g??=d?.reason,g){v?.(g);return}let W=le.getSize();if(!$e(W,h)){Re(me,h);return}let Qe=le.toBitmap(),fe=Me(Qe,W);if(fe===void 0){g??=new Error(`no timestamp @ ${b}`);return}if(_!==void 0&&fe-_<w*.8)return;let Ye=Buffer.from(Qe.buffer,Qe.byteOffset,n*o*4);if(_===void 0)pe(Ye),O.wrote();else {let St=fe-_;if(St<=w*1.2)pe(Ye),O.wrote();else {let Ct=Math.round(St/w);O.dropped(Ct-1),O.wrote();for(let Ft=0;Ft<Ct&&b<f;Ft++)pe(Ye);}}_=fe;let Et=Math.floor(b/f*100);Math.abs(Et-x)>10&&(x=Et,p(x));let Zr=i*1e3;(fe>=Zr-w*.5||b>=f)&&y?.();};let C=await ze({source:e,renderer:r,signal:d,preload:s?Vt:void 0,onCreated:B=>{s&&(ue=Vr({wc:B.webContents,encoder:u,getVideoTimeMs:()=>_??0,onError:Z=>g??=Z}));}});let me=C.webContents.debugger;try{C.webContents.stopPainting(),C.webContents.setFrameRate(t),C.webContents.on("paint",ye),C.webContents.startPainting(),d?.throwIfAborted(),d?.addEventListener("abort",()=>v?.(d.reason),{once:!0}),await dr(me),await new Promise((B,Z)=>{[y,v]=[B,Z];let le=0,W=0;M=setInterval(()=>{if(b!==le){le=b,W=0;return}if(W>=3){v?.(new Error("drawable timeout"));return}l.warn(ci,`${e} render is extremely slow, written=${b} stuck=${W}`),W++,C.webContents.invalidate();},1e3);});}finally{clearInterval(M),C.webContents.off("paint",ye),await de(C),ue?.(),await u.finish();}if(g||b===0)throw g??new Error("no frames captured");else {let B=O.finalize();return {written:b,jank:B.jank,outFile:c}}}catch(J){var Xe=J,Pe=true;}finally{var Ee=A(Y,Xe,Pe);Ee&&await Ee;}}var di="[Rerender]",qr=3;async function Kr(r){let e;for(let t=0;t<qr;t++)try{return await r()}catch(o){e=o,l.warn(di,`retry ${t+1}/${qr}: ${o.message}`);}throw e}var qe="__pup_tick__",ui=`(function() {
|
|
117
|
-
if (window.self === window.top) return;
|
|
118
|
-
if (typeof ${qe} !== 'undefined') return;
|
|
119
|
-
|
|
120
|
-
const orig = {
|
|
121
|
-
Date: Date,
|
|
122
|
-
dateNow: Date.now.bind(Date),
|
|
123
|
-
performanceNow: performance.now.bind(performance),
|
|
124
|
-
raf: requestAnimationFrame.bind(window),
|
|
125
|
-
caf: cancelAnimationFrame.bind(window),
|
|
126
|
-
setTimeout: setTimeout.bind(window),
|
|
127
|
-
clearTimeout: clearTimeout.bind(window),
|
|
128
|
-
setInterval: setInterval.bind(window),
|
|
129
|
-
clearInterval: clearInterval.bind(window),
|
|
130
|
-
};
|
|
131
|
-
|
|
132
|
-
let currMs = 0;
|
|
133
|
-
let rafQueue = [];
|
|
134
|
-
const timers = {};
|
|
135
|
-
let nextId = 1;
|
|
136
|
-
const dateOrigin = new orig.Date();
|
|
137
|
-
const perfOrigin = orig.performanceNow();
|
|
138
|
-
|
|
139
|
-
performance.now = function() { return perfOrigin + currMs; };
|
|
140
|
-
Date.now = function() { return dateOrigin.getTime() + currMs; };
|
|
141
|
-
Date = function() {
|
|
142
|
-
var O = orig.Date;
|
|
143
|
-
if (arguments.length === 0) return new O(dateOrigin.getTime() + currMs);
|
|
144
|
-
return new (Function.prototype.bind.apply(O, [null].concat(Array.prototype.slice.call(arguments))))();
|
|
145
|
-
};
|
|
146
|
-
Date.now = function() { return dateOrigin.getTime() + currMs; };
|
|
147
|
-
Date.parse = orig.Date.parse;
|
|
148
|
-
Date.UTC = orig.Date.UTC;
|
|
149
|
-
Date.prototype = orig.Date.prototype;
|
|
150
|
-
|
|
151
|
-
window.requestAnimationFrame = function(cb) {
|
|
152
|
-
const id = nextId++;
|
|
153
|
-
rafQueue.push({ id, cb });
|
|
154
|
-
return id;
|
|
155
|
-
};
|
|
156
|
-
window.cancelAnimationFrame = function(id) {
|
|
157
|
-
rafQueue = rafQueue.filter((r) => r.id !== id);
|
|
158
|
-
};
|
|
159
|
-
|
|
160
|
-
window.setTimeout = function(cb, delay, ...args) {
|
|
161
|
-
const id = nextId++;
|
|
162
|
-
timers[id] = { type: 'timeout', cb, delay: delay || 0, next: currMs + (delay || 0), args };
|
|
163
|
-
return id;
|
|
164
|
-
};
|
|
165
|
-
window.clearTimeout = function(id) { delete timers[id]; };
|
|
166
|
-
|
|
167
|
-
window.setInterval = function(cb, delay, ...args) {
|
|
168
|
-
const id = nextId++;
|
|
169
|
-
const d = Math.max(delay || 0, 1);
|
|
170
|
-
timers[id] = { type: 'interval', cb, delay: d, next: currMs + d, args };
|
|
171
|
-
return id;
|
|
172
|
-
};
|
|
173
|
-
window.clearInterval = function(id) { delete timers[id]; };
|
|
174
|
-
|
|
175
|
-
function safeInvoke(fn, args) {
|
|
176
|
-
try {
|
|
177
|
-
if (typeof fn === 'string') eval(fn);
|
|
178
|
-
else fn.apply(undefined, args || []);
|
|
179
|
-
} catch (e) {
|
|
180
|
-
console.error('[Tick] error:', e && e.stack || e);
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
function process(timestampMs) {
|
|
185
|
-
currMs = timestampMs;
|
|
186
|
-
document.getAnimations().forEach(a => {
|
|
187
|
-
a.pause();
|
|
188
|
-
a.currentTime = currMs;
|
|
189
|
-
});
|
|
190
|
-
const ids = Object.keys(timers);
|
|
191
|
-
for (let i = 0; i < ids.length; i++) {
|
|
192
|
-
const t = timers[ids[i]];
|
|
193
|
-
if (!t) continue;
|
|
194
|
-
while (t.next <= currMs) {
|
|
195
|
-
safeInvoke(t.cb, t.args);
|
|
196
|
-
if (t.type === 'timeout') { delete timers[ids[i]]; break; }
|
|
197
|
-
t.next += t.delay;
|
|
198
|
-
}
|
|
199
|
-
}
|
|
200
|
-
const rafs = rafQueue.splice(0);
|
|
201
|
-
for (let j = 0; j < rafs.length; j++) {
|
|
202
|
-
safeInvoke(rafs[j].cb, [currMs]);
|
|
203
|
-
}
|
|
204
|
-
}
|
|
205
|
-
|
|
206
|
-
function eject() {
|
|
207
|
-
Date = orig.Date;
|
|
208
|
-
performance.now = orig.performanceNow;
|
|
209
|
-
window.requestAnimationFrame = orig.raf;
|
|
210
|
-
window.cancelAnimationFrame = orig.caf;
|
|
211
|
-
window.setTimeout = orig.setTimeout;
|
|
212
|
-
window.clearTimeout = orig.clearTimeout;
|
|
213
|
-
window.setInterval = orig.setInterval;
|
|
214
|
-
window.clearInterval = orig.clearInterval;
|
|
215
|
-
delete window.${qe};
|
|
216
|
-
}
|
|
217
|
-
|
|
218
|
-
window.${qe} = { process: process, eject: eject };
|
|
219
|
-
})();`;async function Xr(r,e){if(!r)return;let t=r.executeJavaScript(`${ui} ${qe}.process(${e})`);await R(t,5e3,"tick.executeJavaScript");}var pi="[Video]",xt="__pup_video__",mi=`(function() {
|
|
116
|
+
</html>`}function Me(r,e){let{width:t,height:o}=e;if(t<dt||o<2)return;let n=o-1,i=0;for(let s=0;s<dt;s++){let c=(n*t+s)*4,d=(r[c]??0)>127?1:0;i=i<<1|d;}if(i=i>>>0,!(!Number.isFinite(i)||i<0||i>1e7))return i}function dr(r){return ct(r,"__pup_start_stego__()")}async function ur(r,e,t){let o=new Promise(n=>r.ipc.once(ar,n));await ct(r.debugger,`__pup_draw_stego__(${e})`),await ir(r.debugger,t),await R(o,5e3,"swapBuffer");}var ut="pup",Lo="pup-frame",pr={standard:true,secure:true,bypassCSP:true,allowServiceWorkers:true,supportFetchAPI:true,corsEnabled:true,stream:true,codeCache:true};electron.protocol.registerSchemesAsPrivileged([{scheme:ut,privileges:pr},{scheme:Lo,privileges:pr}]);function lr(){electron.protocol.handle(ut,r=>{let e=new URL(r.url),t=e.searchParams.get("src")??"",o=parseInt(e.searchParams.get("w")??"0",10),n=parseInt(e.searchParams.get("h")??"0",10),i=cr(t,{width:o,height:n});return new Response(i,{headers:{"content-type":"text/html"}})});}function fr(r,e){let t=new URL(`${ut}://stego`);return t.searchParams.set("src",r.replace("http://","https://")),t.searchParams.set("w",String(e.width)),t.searchParams.set("h",String(e.height)),t.toString()}var te=class{constructor(e){this.maxConcurrency=e;}maxConcurrency;_active=0;_queue=[];_signals=new WeakSet;_resolve;get active(){return this._active}get pending(){return this._queue.length}get stats(){return `active: ${this.active}, pending: ${this.pending}`}async schedule(e,t){return t?.throwIfAborted(),t&&!this._signals.has(t)&&(this._signals.add(t),t.addEventListener("abort",()=>this.flush(t),{once:true})),new Promise((o,n)=>{this._queue.push({run:()=>{if(t?.aborted){n(t.reason),this.next();return}this._active++,e().then(i=>{this._active--,o(i),this.next();}).catch(i=>{this._active--,n(i),this.next();});},reject:n,signal:t}),this.next();})}async drain(){if(!(this._active===0&&this.pending===0))return new Promise(e=>this._resolve=e)}flush(e){let t=[];for(let o of this._queue)o.signal===e?o.reject(e.reason):t.push(o);this._queue=t,this.next();}next(){if(this._active===0&&this.pending===0){this._resolve?.(),this._resolve=void 0;return}this._active<this.maxConcurrency&&this._queue.shift()?.run();}};async function q(r,e){let t=new nodeAv.CodecContext;t.allocContext3(r.codec),t.codecId=r.codec.id,t.width=r.width,t.height=r.height,t.pixelFormat=r.pixelFormat,t.timeBase=new nodeAv.Rational(1,r.fps),t.framerate=new nodeAv.Rational(r.fps,1),t.gopSize=r.fps*2,t.bitRate=BigInt(r.bitrate),t.setFlags(constants.AV_CODEC_FLAG_GLOBAL_HEADER),r.codecTag&&(t.codecTag=r.codecTag),r.colorRange!==void 0&&(t.colorRange=r.colorRange),r.hwFramesCtx&&(t.hwFramesCtx=r.hwFramesCtx);for(let[o,n]of Object.entries(r.options??{}))t.setOption(o,n);return nodeAv.FFmpegError.throwIfError(await t.open2(r.codec,null),e),t}function K(r,e,t){let o=new nodeAv.Frame;return o.alloc(),o.format=t,o.width=r,o.height=e,nodeAv.FFmpegError.throwIfError(o.getBuffer(0),"frame.getBuffer"),o}function S(){let r=new nodeAv.Packet;return r.alloc(),r}async function re(r,e,t,o){for(;;){let n=await r.receivePacket(e);if(n===constants.AVERROR_EAGAIN||n===constants.AVERROR_EOF)break;nodeAv.FFmpegError.throwIfError(n,"receivePacket"),e.streamIndex=t.index,e.duration===0n&&(e.duration=1n),e.rescaleTs(r.timeBase,t.timeBase),await o.writePacket(e),e.unref();}}var B=class r{src;dst;pkt;_sws;_png;static async create(e,t){let o=nodeAv.Codec.findDecoderByName(nodeAv.FF_DECODER_PNG);return assert.ok(o,"png decoder unavailable"),new r(e,t,o)}constructor(e,t,o){this._png=o,this.src=K(e,t,nodeAv.AV_PIX_FMT_BGRA),this.dst=K(e,t,nodeAv.AV_PIX_FMT_YUVA420P),this.pkt=S();}async png(){let e=new nodeAv.CodecContext;return e.allocContext3(this._png),nodeAv.FFmpegError.throwIfError(await e.open2(this._png),"pngDecoder.open2"),e}async decodePNG(e){var o=[];try{let t=F(o,await this.png());this.pkt.data=e;nodeAv.FFmpegError.throwIfError(await t.sendPacket(this.pkt),"pngDecoder.sendPacket");this.pkt.unref();nodeAv.FFmpegError.throwIfError(await t.receiveFrame(this.src),"pngDecoder.receiveFrame");return this.src}catch(n){var i=n,s=true;}finally{A(o,i,s);}}get sws(){if(!this._sws){let e=new nodeAv.SoftwareScaleContext,t=this.src.format;e.getContext(this.src.width,this.src.height,t,this.src.width,this.src.height,nodeAv.AV_PIX_FMT_YUVA420P,nodeAv.SWS_BILINEAR),this._sws=e;}return this._sws}[Symbol.dispose](){this.src[Symbol.dispose](),this.dst[Symbol.dispose](),this.pkt[Symbol.dispose](),this._sws?.[Symbol.dispose]();}};var sn={[constants.AV_SAMPLE_FMT_FLT]:"flt",[constants.AV_SAMPLE_FMT_FLTP]:"fltp"},Oe=class r{_ctx;_stream;_pkt;_outRate;_outFmt;_frameSize;_filterFrame;_graph;_bufSrc;_bufSink;_inRate;_pts=0n;constructor(e,t,o){this._ctx=e,this._stream=t,this._outRate=e.sampleRate,this._outFmt=o,this._frameSize=e.frameSize,this._pkt=S(),this._filterFrame=new nodeAv.Frame,this._filterFrame.alloc();}static async create(e){let t=nodeAv.Codec.findEncoderByName(e.codecName);if(!t)throw new Error(`Audio encoder not found: ${e.codecName}`);let o=new nodeAv.CodecContext;o.allocContext3(t),o.codecId=t.id,o.sampleFormat=e.outSampleFmt,o.sampleRate=e.outSampleRate,o.channelLayout=constants.AV_CHANNEL_LAYOUT_STEREO,o.timeBase=new nodeAv.Rational(1,e.outSampleRate),o.bitRate=BigInt(e.bitrate),e.globalHeader&&o.setFlags(constants.AV_CODEC_FLAG_GLOBAL_HEADER),nodeAv.FFmpegError.throwIfError(await o.open2(t,null),"audioCtx.open2");let n=e.muxer.addStream(o);return new r(o,n,e.outSampleFmt)}setInputRate(e){this._graph?.[Symbol.dispose](),this._inRate=e;let t=new nodeAv.FilterGraph;t.alloc();let o=nodeAv.Filter.getByName("abuffer"),n=t.createFilter(o,"src",`sample_rate=${e}:sample_fmt=flt:channel_layout=stereo:time_base=1/${e}`);if(!n)throw new Error("Failed to create abuffer");let i=nodeAv.Filter.getByName("abuffersink"),s=t.createFilter(i,"sink");if(!s)throw new Error("Failed to create abuffersink");let a=`aformat=sample_fmts=${sn[this._outFmt]??"flt"}:sample_rates=${this._outRate}:channel_layouts=stereo,asetnsamples=n=${this._frameSize}:p=1`,d=nodeAv.FilterInOut.createList([{name:"in",filterCtx:n,padIdx:0}]),p=nodeAv.FilterInOut.createList([{name:"out",filterCtx:s,padIdx:0}]);nodeAv.FFmpegError.throwIfError(t.parsePtr(a,p,d),"graph.parsePtr"),nodeAv.FFmpegError.throwIfError(t.configSync(),"graph.config"),this._graph=t,this._bufSrc=n,this._bufSink=s;}async encode(e,t){var s=[];try{if(!this._bufSrc||!this._inRate)return;let o=new Float32Array(e.buffer,e.byteOffset,e.byteLength/4);for(let p=0;p<o.length;p++)isFinite(o[p])||(o[p]=0);let n=o.length>>1;let i=F(s,nodeAv.Frame.fromAudioBuffer(Buffer.from(o.buffer,o.byteOffset,o.byteLength),{nbSamples:n,format:constants.AV_SAMPLE_FMT_FLT,sampleRate:this._inRate,channelLayout:constants.AV_CHANNEL_LAYOUT_STEREO,pts:this._pts,timeBase:{num:1,den:this._inRate}}));this._pts+=BigInt(n);nodeAv.FFmpegError.throwIfError(await this._bufSrc.buffersrcAddFrame(i),"buffersrcAddFrame");await this.drain(t);}catch(c){var a=c,d=true;}finally{A(s,a,d);}}async flush(e){this._bufSrc&&(await this._bufSrc.buffersrcAddFrame(null),await this.drain(e)),await this._ctx.sendFrame(null),await this.drainCodec(e);}[Symbol.dispose](){this._pkt.free(),this._filterFrame.free(),this._graph?.[Symbol.dispose](),this._ctx.freeContext();}async drain(e){for(;;){let t=await this._bufSink.buffersinkGetFrame(this._filterFrame);if(t===constants.AVERROR_EAGAIN||t===constants.AVERROR_EOF)break;nodeAv.FFmpegError.throwIfError(t,"buffersinkGetFrame"),nodeAv.FFmpegError.throwIfError(await this._ctx.sendFrame(this._filterFrame),"audioCtx.sendFrame"),this._filterFrame.unref(),await this.drainCodec(e);}}drainCodec(e){return re(this._ctx,this._pkt,this._stream,e)}};function L(r){let e=Buffer.alloc(r.length>>3);for(let t=0;t<e.length;t++){let o=0;for(let n=0;n<8;n++)o=o<<1|r[t*8+n];e[t]=o;}return e}var D=class{bits=[];w(e,t){for(let o=t-1;o>=0;o--)this.bits.push(e>>o&1);}flag(e){this.bits.push(e?1:0);}ue(e){let t=e+1,o=32-Math.clz32(t);for(let n=0;n<o-1;n++)this.bits.push(0);for(let n=o-1;n>=0;n--)this.bits.push(t>>n&1);}align(e){for(;this.bits.length%8!==0;)this.bits.push(e);}copy(e,t,o){for(let n=0;n<o;n++)this.bits.push(e[t+n]);}},E=class{_bits;pos=0;constructor(e){this._bits=[];for(let t=0;t<e.length;t++)for(let o=7;o>=0;o--)this._bits.push(e[t]>>o&1);}get bits(){return this._bits}read(e){let t=0;for(let o=0;o<e;o++)t=t<<1|this._bits[this.pos++];return t}readUe(){let e=0;for(;this._bits[this.pos]===0;)e++,this.pos++;this.pos++;let t=1;for(let o=0;o<e;o++)t=t<<1|this._bits[this.pos++];return t-1}};var N=Buffer.from([0,0,0,1]);var lt=16;var ft=23,ne=32,ie=33,Be=34,yr=39;function Pr(r,e){let t=r>>1&63,o=(r&1)<<5|e>>3&31,n=e&7;return {type:t,layerId:o,temporalId:n}}function ht(r,e,t){let o=(r&63)<<1|e>>5&1,n=(e&31)<<3|t&7;return [o,n]}function k(r){let e=[],t=0;for(;t<r.length;){let o=0;if(t+3<r.length&&r[t]===0&&r[t+1]===0&&r[t+2]===1)o=3;else if(t+4<r.length&&r[t]===0&&r[t+1]===0&&r[t+2]===0&&r[t+3]===1)o=4;else {t++;continue}let n=t+o;if(n+2>r.length)break;let i=r.length;for(let a=n+2;a<r.length-2;a++)if(r[a]===0&&r[a+1]===0&&(r[a+2]===1||a+3<r.length&&r[a+2]===0&&r[a+3]===1)){i=a;break}let{type:s,layerId:c}=Pr(r[n],r[n+1]);e.push({type:s,layerId:c,data:r.subarray(n,i)}),t=i;}return e}function wt(r,e){let t=Buffer.from(r),{type:o,temporalId:n}=Pr(t[0],t[1]),[i,s]=ht(o,e,n);return t[0]=i,t[1]=s,t}function T(r){let e=[];for(let t=0;t<r.length;t++)t+2<r.length&&r[t]===0&&r[t+1]===0&&r[t+2]===3?(e.push(0,0),t+=2):e.push(r[t]);return Buffer.from(e)}function X(r){let e=[];e.push(r[0],r[1]);let t=0;for(let o=2;o<r.length;o++)t===2&&r[o]<=3&&(e.push(3),t=0),r[o]===0?t++:t=0,e.push(r[o]);return Buffer.from(e)}var an=48,Cr=24,cn=2,dn=10,gt=0,un=1;function Er(r,e,t){let o=e>>3,n=1<<7-(e&7),i=r[o]??0;r[o]=t?i|n:i&~n;}function Sr(r,e){let t=T(r);return Er(t,e+cn,0),Er(t,e+dn,1),X(t)}function De(r){let e=k(r);if(e.length===0)return r;let t=[];for(let o of e){let n=o.data;o.type===ne?n=Sr(o.data,an):o.type===ie&&(n=Sr(o.data,Cr)),t.push(N,n);}return Buffer.concat(t)}function pn(r,e,t){let o=T(r),n=new E(o),i=new D;for(let s=0;s<e;s++)i.bits.push(n.read(1));for(n.readUe(),i.ue(t);n.pos<n.bits.length;)i.bits.push(n.read(1));for(;i.bits.length%8!==0;)i.bits.push(0);return X(L(i.bits))}function mn(r,e,t,o){let n=T(r),i=new E(n),s=new D;for(let c=0;c<e;c++)s.bits.push(i.read(1));for(i.readUe(),i.readUe(),s.ue(t),s.ue(o);i.pos<i.bits.length;)s.bits.push(i.read(1));for(;s.bits.length%8!==0;)s.bits.push(0);return X(L(s.bits))}function Fr(r){let e=Cr+96;return pn(r,e,1)}function Ar(r){return mn(r,16,1,1)}function ln(r){let e=r.readUe();return e&1?e+1>>1:-(e>>1)}function fn(r,e){if(r.read(1)){let o=r.readUe();if(o!==0)throw new Error(`apple_alpha: unexpected delta_idx_minus1=${o}`);r.read(1),r.readUe();for(let n=0;n<=e;n++)r.read(1)||r.read(1);}else {let o=r.readUe(),n=r.readUe();for(let i=0;i<o;i++)r.readUe(),r.read(1);for(let i=0;i<n;i++)r.readUe(),r.read(1);}}function hn(r,e,t){if(r.read(16),r.read(1)!==1)throw new Error("apple_alpha: expected first_slice_segment_in_pic_flag=1");let o=e>=lt&&e<=ft;o&&r.read(1),r.readUe();let n=r.readUe();if(!o){if(r.read(t.log2MaxPocLsb),r.read(1)?t.numShortTermRefPicSets>1&&r.read(Math.ceil(Math.log2(t.numShortTermRefPicSets))):fn(r,t.numDeltaPocsSet0),t.longTermRefPicsPresent)throw new Error("apple_alpha: long_term_ref_pics path unimplemented");t.spsTemporalMvpEnabled&&r.read(1);}return t.saoEnabled&&(r.read(1),r.read(1)),(n===un||n===gt)&&(r.read(1)&&(r.readUe(),n===gt&&r.readUe()),n===gt&&r.read(1),t.cabacInitPresent&&r.read(1),r.readUe()),ln(r),t.ppsHasLoopFilterAcrossSlicesFlag&&r.read(1),r.pos}function kr(r,e,t){let o=T(r),n=new E(o),i=new E(o),s=hn(i,e,t),c=s%8===0?8:8-s%8,a=(s+c)/8,d=new D;for(let u=0;u<16;u++)d.bits.push(n.read(1));for(d.bits.push(n.read(1)),e>=lt&&e<=ft&&d.bits.push(n.read(1)),n.readUe(),d.ue(1);n.pos<s;)d.bits.push(n.read(1));for(d.bits.push(1);d.bits.length%8!==0;)d.bits.push(0);return X(Buffer.concat([L(d.bits),o.subarray(a)]))}function wn(r){let e=new E(T(r));if(e.read(16),e.read(4),e.read(2),e.read(6)>0)return;let t=e.read(3);e.read(17);let o=e.pos;return e.read(96),t>0&&e.read(t*2+(8-t)*2),{ptlStart:o,ptlEnd:e.pos,ptlBits:e.bits,maxSubLayersMinus1:t}}function gn(r,e){r.w(16385,16),r.w(0,4),r.flag(1),r.flag(1),r.w(1,6),r.w(e.maxSubLayersMinus1,3),r.flag(e.maxSubLayersMinus1===0),r.w(65535,16),r.copy(e.ptlBits,e.ptlStart,e.ptlEnd-e.ptlStart),r.flag(1);for(let t=0;t<=e.maxSubLayersMinus1;t++)r.ue(4),r.ue(2),r.ue(4);r.w(1,6),r.ue(1),r.flag(1),r.flag(1),r.flag(0),r.flag(1),r.align(1);}function bn(r,e,t,o){if(r.copy(e.ptlBits,e.ptlEnd-8,8),e.maxSubLayersMinus1>0){for(let n=0;n<e.maxSubLayersMinus1;n++)r.w(0,2);for(let n=e.maxSubLayersMinus1;n<8;n++)r.w(0,2);}r.flag(0);for(let n=0;n<16;n++)r.flag(n===2||n===3);r.w(0,3),r.w(0,3),r.flag(1),r.w(1,6),r.w(1,1),r.w(1,1),r.w(0,4),r.flag(0),r.ue(0),r.flag(0),r.flag(0),r.flag(0),r.ue(2),r.flag(1),r.copy(e.ptlBits,e.ptlStart,e.ptlEnd-e.ptlStart),r.ue(0),r.w(0,2),r.w(1,2),r.w(2,2),r.ue(0),r.w(t,16),r.w(o,16),r.flag(1),r.w(1,2),r.w(0,4),r.w(0,4),r.flag(0),r.flag(1),r.flag(0),r.flag(1),r.flag(0),r.ue(0),r.ue(0),r.ue(0),r.ue(0),r.ue(0),r.flag(0),r.ue(0),r.flag(0),r.flag(0);}function Tr(r,e,t){let o=wn(r);if(!o)return r;let n=new D;return gn(n,o),bn(n,o,e,t),n.bits.push(1),n.align(0),X(L(n.bits))}function Ir(r,e){let t=r.data?.[0],o=r.linesize?.[0];if(!t||!o)throw new Error("extractAlpha: missing BGRA data");let n=r.width,i=r.height,s=n*i;if(t.byteOffset%4===0&&o===n*4){let c=new Uint32Array(t.buffer,t.byteOffset,s);for(let a=0;a<s;a++)e[a]=c[a]>>>24;}else for(let c=0;c<i;c++){let a=c*o+3,d=c*n;for(let p=0;p<n;p++)e[d+p]=t[a+p*4];}}function vn(r,e){return r===ie?Fr(e):r===Be?Ar(e):e}function Rr(r){let{baseExtradata:e,alphaExtradata:t}=r,o=k(e),n=k(t),i=new Map;for(let a of n){if(a.type===ne)continue;let d=i.get(a.type)??[];d.push(a),i.set(a.type,d);}let s=[],c=new Set;for(let a of o){let d=a.type===ne?Tr(a.data,r.width,r.height):a.data;if(s.push(N,d),!c.has(a.type)){c.add(a.type);for(let p of i.get(a.type)??[]){let u=vn(a.type,p.data);s.push(N,wt(u,1));}}}return s.push(_n()),Buffer.concat(s)}function _n(){let[t,o]=ht(yr,0,1),n=[],i=(s,c)=>{for(let a=c-1;a>=0;a--)n.push(s>>a&1);};for(i(0,1),i(0,3),i(0,3),i(0,9),i(255,9),i(0,1),i(0,1),i(1,1);n.length%8!==0;)i(0,1);return Buffer.concat([N,Buffer.from([t,o]),Buffer.from([165,4]),L(n),Buffer.from([128])])}function Mr(r,e,t){let o=[];for(let n of r)o.push(N,n.data);for(let n of e)if(n.type<ne){let i=kr(n.data,n.type,t);o.push(N,wt(i,1));}return Buffer.concat(o)}var Le=class{_s;_baseQueue=[];_alphaQueue=[];constructor(e){this._s=e;}async drain(e){let{baseCtx:t,alphaCtx:o,basePkt:n,alphaPkt:i}=this._s;for(this._baseQueue.push(...await this.receiveAll(t,n,"base")),this._alphaQueue.push(...await this.receiveAll(o,i,"alpha"));this._baseQueue.length&&this._alphaQueue.length;)await this.writePair(this._baseQueue.shift(),this._alphaQueue.shift(),e);}desyncAfterEof(){if(!(!this._baseQueue.length&&!this._alphaQueue.length))return `base=${this._baseQueue.length}, alpha=${this._alphaQueue.length} unpaired`}async receiveAll(e,t,o){let n=[];for(;;){let i=await e.receivePacket(t);if(i>=0){n.push(this.snapshot(t)),t.unref();continue}if(i===constants.AVERROR_EAGAIN||i===constants.AVERROR_EOF)return n;nodeAv.FFmpegError.throwIfError(i,`nvenc.${o}.receivePacket`);}}snapshot(e){return {data:Buffer.from(e.data),pts:e.pts,dts:e.dts,duration:e.duration,flags:e.flags}}async writePair(e,t,o){let{basePkt:n,baseCtx:i,stream:s,hevcCfg:c}=this._s,a=Mr(k(e.data),k(t.data),c);n.data=De(a),n.pts=e.pts,n.dts=e.dts,n.duration=e.duration===0n?1n:e.duration,n.flags=e.flags,n.streamIndex=s.index,n.rescaleTs(i.timeBase,s.timeBase),await o.writePacket(n),n.unref();}};function H(r,e,t){throw new Error(`hevc_alpha: NVENC SPS/PPS unsupported: ${r}=${e}, expected ${t}`)}function En(r,e){r.read(8),r.read(32),r.read(48),r.read(8);let t=[],o=[];for(let n=0;n<e;n++)t.push(r.read(1)),o.push(r.read(1));if(e>0)for(let n=e;n<8;n++)r.read(2);for(let n=0;n<e;n++)t[n]&&r.read(88),o[n]&&r.read(8);}function Sn(r){let e=new E(r);e.read(16),e.read(4);let t=e.read(3);t!==0&&H("sps_max_sub_layers_minus1",t,"0"),e.read(1),En(e,t),e.readUe();let o=e.readUe();o===3&&H("chroma_format_idc",o,"\u22603"),e.readUe(),e.readUe(),e.read(1)&&(e.readUe(),e.readUe(),e.readUe(),e.readUe()),e.readUe(),e.readUe();let n=e.readUe()+4,s=e.read(1)?t+1:1;for(let f=0;f<s;f++)e.readUe(),e.readUe(),e.readUe();e.readUe(),e.readUe(),e.readUe(),e.readUe(),e.readUe(),e.readUe(),e.read(1)&&H("scaling_list_enabled_flag",1,"0"),e.read(1);let c=e.read(1)===1;e.read(1)&&H("pcm_enabled_flag",1,"0");let a=e.readUe();a>1&&H("num_short_term_ref_pic_sets",a,"\u22641");let d=0;if(a===1){let f=e.readUe(),w=e.readUe();d=f+w;for(let h=0;h<f;h++)e.readUe(),e.read(1);for(let h=0;h<w;h++)e.readUe(),e.read(1);}let p=e.read(1)===1;p&&H("long_term_ref_pics_present_flag",1,"0");let u=e.read(1)===1;return {log2MaxPocLsb:n,saoEnabled:c,numShortTermRefPicSets:a,numDeltaPocsSet0:d,longTermRefPicsPresent:p,spsTemporalMvpEnabled:u}}function Cn(r){let e=new E(r);e.read(16),e.readUe(),e.readUe(),e.read(1),e.read(1);let t=e.read(3);t!==0&&H("num_extra_slice_header_bits",t,"0"),e.read(1);let o=e.read(1)===1;e.readUe(),e.readUe(),e.readUe(),e.read(1),e.read(1),e.read(1)&&e.readUe(),e.readUe(),e.readUe(),e.read(1),e.read(1),e.read(1),e.read(1),e.read(1)&&H("tiles_enabled_flag",1,"0"),e.read(1);let n=e.read(1)===1,i=e.read(1),s=false;return i&&(e.read(1),s=e.read(1)===1,s||(e.readUe(),e.readUe())),{cabacInitPresent:o,ppsHasLoopFilterAcrossSlicesFlag:n&&!s}}function Or(r){let e=k(r),t=e.find(s=>s.type===ie),o=e.find(s=>s.type===Be);if(!t)throw new Error("hevc_alpha: SPS missing in NVENC extradata");if(!o)throw new Error("hevc_alpha: PPS missing in NVENC extradata");let n=Sn(T(t.data)),i=Cn(T(o.data));return {...n,...i}}var Ne=class r{_s;_mux;_pts=0n;constructor(e){this._s=e,this._mux=new Le({baseCtx:e.baseCtx,alphaCtx:e.alphaCtx,basePkt:e.basePkt,alphaPkt:e.alphaPkt,stream:e.stream,hevcCfg:e.hevcCfg});}static async create(e){let{width:t,height:o,fps:n,bitrate:i,muxer:s}=e,c=nodeAv.Codec.findEncoderByName(constants.FF_ENCODER_HEVC_NVENC);if(!c)throw new Error("hevc_nvenc encoder not found");let d={codec:c,width:t,height:o,fps:n,bitrate:i,options:{preset:"p4",bf:"0",tier:"main"}},p=await q({...d,pixelFormat:constants.AV_PIX_FMT_BGRA},"nvenc.base.open2"),u,f,w,h;try{if(u=await q({...d,pixelFormat:constants.AV_PIX_FMT_YUV420P},"nvenc.alpha.open2"),!p.extraData||!u.extraData)throw new Error("nvenc: codec extradata missing");let b=Or(p.extraData),_=s.addStream(p,"hvc1"),x=Rr({baseExtradata:p.extraData,alphaExtradata:u.extraData,width:t,height:o});_.codecpar.extradata=De(x);let g=t*o,y=(t+1>>1)*(o+1>>1),v=Buffer.alloc(g+y*2);return v.fill(128,g),f=S(),w=S(),h=K(t,o,constants.AV_PIX_FMT_YUV420P),new r({baseCtx:p,alphaCtx:u,basePkt:f,alphaPkt:w,stream:_,alphaSwFrame:h,alphaBuf:v,hevcCfg:b})}catch(b){throw f?.free(),w?.free(),h?.free(),u?.freeContext(),p.freeContext(),b}}async encode(e,t){let{baseCtx:o,alphaCtx:n,alphaSwFrame:i,alphaBuf:s}=this._s,c=this._pts++;Ir(e,s),nodeAv.FFmpegError.throwIfError(i.makeWritable(),"alphaSw.makeWritable"),nodeAv.FFmpegError.throwIfError(i.fromBuffer(s),"alphaSw.fromBuffer"),i.pts=c,i.duration=1n,e.pts=c,e.duration=1n,nodeAv.FFmpegError.throwIfError(await o.sendFrame(e),"base.sendFrame"),nodeAv.FFmpegError.throwIfError(await n.sendFrame(i),"alpha.sendFrame"),await this._mux.drain(t);}async flush(e){await this.sendEof(this._s.baseCtx,"base"),await this.sendEof(this._s.alphaCtx,"alpha"),await this._mux.drain(e);let t=this._mux.desyncAfterEof();if(t)throw new Error(`NVENC desync: ${t}`)}[Symbol.dispose](){let{basePkt:e,alphaPkt:t,baseCtx:o,alphaCtx:n,alphaSwFrame:i}=this._s;e.free(),t.free(),i.free(),n.freeContext(),o.freeContext();}async sendEof(e,t){let o=await e.sendFrame(null);o<0&&o!==constants.AVERROR_EAGAIN&&o!==constants.AVERROR_EOF&&nodeAv.FFmpegError.throwIfError(o,`nvenc.${t}.sendFrame(null)`);}};var se=class r{_ctx;_pkt;_stream;_pts=0n;constructor(e,t,o){this._ctx=e,this._pkt=t,this._stream=o;}static async create(e){let{codecName:t,codecTag:o,codecOpts:n,muxer:i,...s}=e,c=nodeAv.Codec.findEncoderByName(t);if(!c)throw new Error(`Video encoder not found: ${t}`);let a=await q({codec:c,...s,codecTag:o,options:n},"videoCtx.open2"),d=i.addStream(a,o);return new r(a,S(),d)}async encode(e,t){e.pts=this._pts++,e.duration=1n,nodeAv.FFmpegError.throwIfError(await this._ctx.sendFrame(e),"videoCtx.sendFrame"),await this.drain(t);}async flush(e){await this._ctx.sendFrame(null),await this.drain(e);}[Symbol.dispose](){this._pkt.free(),this._ctx.freeContext();}drain(e){return re(this._ctx,this._pkt,this._stream,e)}};var He=class r{_ctx;_pkt;_stream;_pts=0n;constructor(e,t,o){this._ctx=e,this._pkt=t,this._stream=o;}static async create(e){let{width:t,height:o,fps:n,hw:i,bitrate:s,muxer:c}=e,a=i.getEncoderCodec("hevc");if(!a)throw new Error("hevc_videotoolbox encoder not found");let d=await q({codec:a,width:t,height:o,fps:n,bitrate:s,pixelFormat:constants.AV_PIX_FMT_BGRA,colorRange:constants.AVCOL_RANGE_JPEG,codecTag:"hvc1",options:{alpha_quality:"1"}},"vtEnc.open2"),p;try{let u=c.addStream(d,"hvc1");return p=S(),new r(d,p,u)}catch(u){throw p?.free(),d.freeContext(),u}}async encode(e,t){e.pts=this._pts++,e.duration=1n,nodeAv.FFmpegError.throwIfError(await this._ctx.sendFrame(e),"vtEnc.sendFrame"),await this.drain(t);}async flush(e){await this._ctx.sendFrame(null),await this.drain(e);}[Symbol.dispose](){this._pkt.free(),this._ctx.freeContext();}drain(e){return re(this._ctx,this._pkt,this._stream,e)}};var Ve="[Encoder]";async function Dr(r,e){let{width:t,height:o,fps:n,bitrate:i=8e6,disableHwCodec:s=false,sharedHw:c}=r,a=c??(s?void 0:api.HardwareContext.auto()??void 0),d=!c&&!!a;try{if(a?.deviceTypeName===constants.FF_HWDEVICE_TYPE_VIDEOTOOLBOX&&a.getEncoderCodec("hevc"))return l.debug(Ve,"using VideoToolbox HEVC alpha encoder"),{hwVideo:await He.create({width:t,height:o,fps:n,hw:a,bitrate:i,muxer:e}),hw:a,ownsHw:d};if(a?.deviceTypeName===constants.FF_HWDEVICE_TYPE_CUDA&&a.getEncoderCodec("hevc"))return l.debug(Ve,"using NVENC dual-layer HEVC alpha encoder"),{hwVideo:await Ne.create({width:t,height:o,fps:n,hw:a,bitrate:i,muxer:e}),hw:a,ownsHw:d}}catch(u){l.warn(Ve,"Hardware codec session limits reached, use software encoder",u),d&&a?.dispose();}return l.debug(Ve,"using software libx265 HEVC alpha encoder"),{video:await se.create({width:t,height:o,fps:n,codecName:constants.FF_ENCODER_LIBX265,codecTag:"hvc1",codecOpts:{preset:"medium","x265-params":"log-level=1:bframes=3:pools=+:frame-threads=0"},bitrate:i,pixelFormat:constants.AV_PIX_FMT_YUVA420P,muxer:e}),codec:await B.create(t,o),ownsHw:false}}var Ue=class{_ctx;_opened=false;constructor(e,t){this._ctx=new nodeAv.FormatContext,nodeAv.FFmpegError.throwIfError(this._ctx.allocOutputContext2(null,t??null,e),"allocOutputContext2");}addStream(e,t){let o=this._ctx.newStream(null);return o.timeBase=e.timeBase,nodeAv.FFmpegError.throwIfError(o.codecpar.fromContext(e),"codecpar.fromContext"),t&&(o.codecpar.codecTag=t),o}async open(){this._opened||(nodeAv.FFmpegError.throwIfError(await this._ctx.openOutput(),"openOutput"),nodeAv.FFmpegError.throwIfError(await this._ctx.writeHeader(null),"writeHeader"),this._opened=true);}async writePacket(e){nodeAv.FFmpegError.throwIfError(await this._ctx.interleavedWriteFrame(e),"interleavedWriteFrame");}async[Symbol.asyncDispose](){if(this._opened){this._opened=false;try{await this._ctx.writeTrailer();}finally{await this._ctx.closeOutput(),await this._ctx[Symbol.asyncDispose]();}}}};var Xn="libvpx-vp9",xe=class r{_s;_disposed=false;constructor(e){this._s=e;}static kindFromPath(e){let t=e.toLowerCase();if(t.endsWith(".webm"))return "webm";if(t.endsWith(".mp4")||t.endsWith(".mov"))return "mp4";throw new Error(`Unsupported output extension: ${e}`)}static async create(e){let t=new Ue(e.outFile),o=e.kind==="mp4"?await this.mp4Video(e,t):await this.webmVideo(e,t),n=e.withAudio?await this.audioFor(e,t):void 0;return await t.open(),new r({muxer:t,...o,audio:n,opts:e})}static mp4Video(e,t){let{width:o,height:n,fps:i,disableHwCodec:s,sharedHw:c}=e;return Dr({width:o,height:n,fps:i,disableHwCodec:s,sharedHw:c},t)}static async webmVideo(e,t){let{width:o,height:n,fps:i}=e;return {video:await se.create({width:o,height:n,fps:i,codecName:Xn,codecOpts:{deadline:"realtime","cpu-used":"8","row-mt":"1",threads:"2"},bitrate:4e6,pixelFormat:constants.AV_PIX_FMT_YUVA420P,muxer:t}),codec:await B.create(o,n),ownsHw:false}}static audioFor(e,t){let o=e.kind==="mp4"?{outSampleRate:44100,outSampleFmt:constants.AV_SAMPLE_FMT_FLTP,codecName:constants.FF_ENCODER_AAC}:{outSampleRate:48e3,outSampleFmt:constants.AV_SAMPLE_FMT_FLT,codecName:constants.FF_ENCODER_LIBOPUS};return Oe.create({...o,globalHeader:true,bitrate:128e3,muxer:t})}setInputRate(e){this._s.audio?.setInputRate(e);}async encodeBGRA(e){let{hwVideo:t,muxer:o}=this._s;return t?t.encode(e,o):this.swEncode(e)}async encodeDecodedFrame(e){let{hwVideo:t,muxer:o}=this._s;return t?t.encode(e,o):this.swEncode(e)}async encodeAudio(e){await this._s.audio?.encode(e,this._s.muxer);}async flush(){let{hwVideo:e,video:t,audio:o,muxer:n}=this._s;await o?.flush(n),e?await e.flush(n):await t.flush(n);}async[Symbol.asyncDispose](){if(this._disposed)return;this._disposed=true;let{muxer:e,video:t,hwVideo:o,audio:n,codec:i,hw:s,ownsHw:c}=this._s;t?.[Symbol.dispose](),o?.[Symbol.dispose](),n?.[Symbol.dispose](),i?.[Symbol.dispose](),await e[Symbol.asyncDispose](),c&&s?.dispose();}async swEncode(e){let{video:t,codec:o,muxer:n}=this._s;assert.ok(o?.sws,"sws not initialized"),nodeAv.FFmpegError.throwIfError(o.dst.makeWritable(),"sinkDst.makeWritable"),nodeAv.FFmpegError.throwIfError(await o.sws.scaleFrame(o.dst,e),"sinkSws.scaleFrame"),await t.encode(o.dst,n);}};var ae=class r{_s;_disposed=false;constructor(e){this._s=e;}static async create(e){let{width:t,height:o,fps:n,outFile:i,withAudio:s=false,disableHwCodec:c=false}=e,a=i.split(",").map(h=>h.trim()).filter(Boolean);if(a.length===0)throw new Error("outFile must contain at least one path");let d=a.map(h=>xe.kindFromPath(h)),u=!c&&d.includes("mp4")?api.HardwareContext.auto()??void 0:void 0,f=u?.deviceTypeName===constants.FF_HWDEVICE_TYPE_VIDEOTOOLBOX||u?.deviceTypeName===constants.FF_HWDEVICE_TYPE_CUDA,w=[];for(let h=0;h<a.length;h++){let b=await xe.create({outFile:a[h],kind:d[h],width:t,height:o,fps:n,withAudio:s,disableHwCodec:c,sharedHw:d[h]==="mp4"&&f?u:void 0});w.push(b);}return new r({sinks:w,sharedHw:u,limiter:new te(1),outFiles:a,opts:e})}setupAudio(e){for(let t of this._s.sinks)t.setInputRate(e);}async encodeBGRA(e){await this._s.limiter.schedule(async()=>{var o=[];try{let t=F(o,this.bgraFrame(e));await Promise.all(this._s.sinks.map(c=>c.encodeBGRA(t)));}catch(n){var i=n,s=true;}finally{A(o,i,s);}});}async encodePNG(e){await this._s.limiter.schedule(async()=>{let{width:t,height:o}=this._s.opts;this._s.pngCodec??=await B.create(t,o);let n=await this._s.pngCodec.decodePNG(e);for(let i of this._s.sinks)await i.encodeDecodedFrame(n);});}async encodeAudio(e){await this._s.limiter.schedule(async()=>{for(let t of this._s.sinks)await t.encodeAudio(e);});}async finish(){try{await this._s.limiter.drain();for(let e of this._s.sinks)await e.flush();}finally{await this.free();}return this._s.outFiles}async[Symbol.asyncDispose](){this._disposed||(await this._s.limiter.drain(),await this.free());}async free(){if(!this._disposed){this._disposed=true;for(let e of this._s.sinks)await e[Symbol.asyncDispose]();this._s.pngCodec?.[Symbol.dispose](),this._s.sharedHw?.dispose();}}bgraFrame(e){let t=K(this._s.opts.width,this._s.opts.height,constants.AV_PIX_FMT_BGRA);return nodeAv.FFmpegError.throwIfError(t.fromBuffer(e),"bgraFrame.fromBuffer"),t}};var We=class{_fps;_actual=0;_currentBurst=0;_bursts=[];constructor(e){this._fps=e;}wrote(e=1){this._currentBurst>0&&(this._bursts.push(this._currentBurst),this._currentBurst=0),this._actual+=e;}dropped(e=1){this._currentBurst+=e;}finalize(){this._currentBurst>0&&(this._bursts.push(this._currentBurst),this._currentBurst=0);let e=0,t=0,o=0;for(let a of this._bursts){e+=a,o=Math.max(o,a);let d=Math.max(0,a-1);t+=(d/this._fps)**2;}let n=this._actual+e,i=n>0?e/n:0,s=Math.min(1,t),c=1-(1-i)*(1-s);return {global:i,local:s,jank:c,expected:n,actual:this._actual,maxBurst:o}}};function $e(r,e){return r.width===e.width&&r.height===e.height}var Nr="audio-meta",Hr="audio-chunk";function Vr({wc:r,encoder:e,getVideoTimeMs:t,onError:o}){let n=async(s,c)=>{let a=c.sampleRate,d=t();e.setupAudio(a);let p=Math.ceil(d*a/1e3);if(!(p<=0))try{await e.encodeAudio(Buffer.alloc(p*2*4));}catch(u){o(u);}},i=async(s,c)=>{try{await e.encodeAudio(c);}catch(a){o(a);}};return r.ipc.on(Nr,n),r.ipc.on(Hr,i),()=>{r.ipc.removeListener(Nr,n),r.ipc.removeListener(Hr,i);}}function Ur({fn:r,maxAttempts:e=3,timeout:t,signal:o}){let n=new Error(`timeout over ${t}ms`);return async function(...i){let s=0;for(;;){o?.throwIfAborted();try{let c=[r(...i)];return t&&c.push(promises$1.setTimeout(t).then(()=>{throw n})),await Promise.race(c)}catch(c){if(o?.throwIfAborted(),s++,s>=e)throw c;await ke(Math.pow(2,s)*100+Math.random()*100);}}}}var bt=["file:","http:","https:","data:"],ri=/^(file:|https?:|data:)/;function Wr(r){if(ri.test(r))return;let e=r.split(":")[0]+":",t=bt.includes(e)?`unsupported protocol: ${e}, expected ${bt.join(", ")}`:`invalid source format, expected ${bt.join(", ")}`;throw new Error(t)}var Ge=class{_promise;_resolve;_timeoutToken;wait(e){if(this._promise)throw new Error("already waiting");return this._promise=new Promise(t=>{this._resolve=t,e?.timeout!==void 0&&(this._timeoutToken=setTimeout(()=>{e.onTimeout?.(),t();},e.timeout));}),this._promise}signal(){clearTimeout(this._timeoutToken),this._promise=void 0,this._resolve?.();}};var je="[Network]",ni=new Map([["jssz-boss.hdslb.com","jssz-boss.bilibili.co"],["boss.hdslb.com","shjd-boss.bilibili.co"]]);function vt(r){if(!r.startsWith("http"))return r;let e=new url.URL(r),t=ni.get(e.hostname);return t?(e.hostname=t,e.protocol="http:",e.toString()):r}function $r({source:r,window:e,useInnerProxy:t}){let o=e.webContents.session.webRequest,n=new te(256),i=new Map;async function s(a,d){let p=new Ge;i.set(a,p),await p.wait({timeout:5e3,onTimeout:d}).finally(()=>i.delete(a));}function c(a){i.get(a)?.signal();}o.onBeforeRequest((a,d)=>{let p=a.url,u=t?vt(p):p;n.schedule(()=>{let f=`${e.id}_${a.id}`;return l.debug(je,"start:",{key:f,url:p,proxied:u,method:a.method,source:r,stats:n.stats}),d(u===p?{cancel:false}:{cancel:false,redirectURL:u}),s(f,()=>{l.warn(je,"maybe timeout:",{key:f,url:p,proxied:u,method:a.method,source:r});})});}),o.onHeadersReceived(({responseHeaders:a},d)=>{delete a?.["x-frame-options"],delete a?.["X-Frame-Options"],delete a?.["content-security-policy"],delete a?.["Content-Security-Policy"],d({cancel:false,responseHeaders:a});}),o.onCompleted(a=>{let d=`${e.id}_${a.id}`;c(d),l.debug(je,"completed:",{key:d,url:a.url,method:a.method,statusCode:a.statusCode,source:r});}),o.onErrorOccurred(a=>{let d=`${e.id}_${a.id}`;c(d),l.error(je,"error:",{key:d,url:a.url,method:a.method,error:a.error,source:r});});}function _t(r){let e=r.webContents.session.webRequest;e.onBeforeRequest(null),e.onHeadersReceived(null),e.onCompleted(null),e.onErrorOccurred(null);}var Q="[Window]",Gr=new Error("window timeout");function si({source:r,win:e,action:t,tolerant:o,signal:n}){return new Promise((i,s)=>{let c=setTimeout(()=>a(Gr),1e4),a=d=>{clearTimeout(c),d?s(d):i();};n?.throwIfAborted(),n?.addEventListener("abort",()=>a(n.reason),{once:true}),e.webContents.once("dom-ready",()=>{l.debug(Q,"dom-ready:",{source:r}),o&&a();}),e.webContents.once("did-stop-loading",()=>{l.debug(Q,"did-stop-loading:",{source:r}),a();}),e.webContents.once("did-fail-load",(d,p,u,f)=>{let w=`did-fail-load: ${JSON.stringify({url:f,source:r,code:p,desc:u})}`;l.error(Q,w),a(new Error(w));}),e.webContents.once("render-process-gone",(d,{exitCode:p,reason:u})=>{let f=`render-process-gone: ${JSON.stringify({source:r,exitCode:p,reason:u})}`;l.error(Q,f),a(new Error(f));}),t();})}function ce(r){return new Promise(e=>{_t(r);let t=setTimeout(()=>{try{l.warn(Q,"force close"),r.destroy();}catch{}o();},1e3),o=()=>(clearTimeout(t),e());r.webContents.stopPainting(),r.webContents.debugger.detach(),r.once("closed",o),r.close();})}async function jr({source:r,renderer:e,tolerant:t,preload:o,signal:n,onCreated:i}){let{width:s,height:c,useInnerProxy:a}=e,d=a?vt(r):r,p=new electron.BrowserWindow({width:s,height:c+1,minWidth:s,minHeight:c+1,maxWidth:s,maxHeight:c+1,resizable:false,minimizable:false,movable:false,show:false,transparent:true,backgroundColor:void 0,frame:false,webPreferences:{offscreen:true,backgroundThrottling:false,nodeIntegration:true,nodeIntegrationInSubFrames:true,nodeIntegrationInWorker:true,contextIsolation:false,webSecurity:false,allowRunningInsecureContent:true,experimentalFeatures:true,preload:o}});$r({source:r,window:p,useInnerProxy:a}),p.webContents.debugger.attach("1.3"),await i?.(p),p.webContents.on("console-message",({level:u,message:f,lineNumber:w,sourceId:h})=>{let b=[Q,"console:",{message:f,lineNumber:w,sourceId:h,source:r}];u==="error"?l.error(...b):l.debug(...b),!(u==="warning"&&f.startsWith("%cElectron Security Warning"))&&e.onConsole(u,f);});try{let u=fr(d,{width:s,height:c});await si({source:r,win:p,action:()=>p.loadURL(u),tolerant:t,signal:n});}catch(u){throw await ce(p),u}return p}var ai=Ur({fn:jr,maxAttempts:2});async function ze({source:r,renderer:e,preload:t,onCreated:o,signal:n}){Wr(r),n?.throwIfAborted();let i,s;try{i=await ai({source:r,renderer:e,signal:n});}catch(a){s=a;}let c=()=>jr({source:r,renderer:e,preload:t,onCreated:o,signal:n,tolerant:e.windowTolerant});if(e.windowTolerant&&s===Gr)return l.warn(Q,`warmup timeout: ${r}, falling back to dom-ready`),await c();if(s){let{message:a,stack:d}=s;throw new Error(`failed to warmup window: ${JSON.stringify({source:r,message:a,stack:d})}`)}i&&(i.webContents.removeAllListeners(),_t(i),await ke(2e3),await ce(i));try{return await c()}catch(a){let{message:d,stack:p}=a;throw new Error(`failed to load window: ${JSON.stringify({source:r,message:d,stack:p})}`)}}var ci="[Render]";async function zr(r){var Y=[];try{let{source:e,fps:t,width:o,height:n,duration:i,withAudio:s,outFile:c,disableHwCodec:a,signal:d,onProgress:p}=r;let u=F(Y,await ae.create({width:o,height:n,fps:t,outFile:c,withAudio:s,disableHwCodec:a}),!0);let f=Math.ceil(t*i);let w=1e3/t;let h={width:o,height:n+1};let b=0;let _;let x=0;let g;let y;let v;let M;let U=new We(t);let de;let ue=O=>{b++,u.encodeBGRA(O).catch(J=>g??=J);};let ye=(O,J,le)=>{if(g??=d?.reason,g){v?.(g);return}let W=le.getSize();if(!$e(W,h)){Re(pe,h);return}let Qe=le.toBitmap(),fe=Me(Qe,W);if(fe===void 0){g??=new Error(`no timestamp @ ${b}`);return}if(_!==void 0&&fe-_<w*.8)return;let Ye=Buffer.from(Qe.buffer,Qe.byteOffset,n*o*4);if(_===void 0)ue(Ye),U.wrote();else {let St=fe-_;if(St<=w*1.2)ue(Ye),U.wrote();else {let Ct=Math.round(St/w);U.dropped(Ct-1),U.wrote();for(let Ft=0;Ft<Ct&&b<f;Ft++)ue(Ye);}}_=fe;let Et=Math.floor(b/f*100);Math.abs(Et-x)>10&&(x=Et,p(x));let Zr=i*1e3;(fe>=Zr-w*.5||b>=f)&&y?.();};let C=await ze({source:e,renderer:r,signal:d,preload:s?Vt:void 0,onCreated:O=>{s&&(de=Vr({wc:O.webContents,encoder:u,getVideoTimeMs:()=>_??0,onError:J=>g??=J}));}});let pe=C.webContents.debugger;try{C.webContents.stopPainting(),C.webContents.setFrameRate(t),C.webContents.on("paint",ye),C.webContents.startPainting(),d?.throwIfAborted(),d?.addEventListener("abort",()=>v?.(d.reason),{once:!0}),await dr(pe),await new Promise((O,J)=>{[y,v]=[O,J];let le=0,W=0;M=setInterval(()=>{if(b!==le){le=b,W=0;return}if(W>=3){v?.(new Error("drawable timeout"));return}l.warn(ci,`${e} render is extremely slow, written=${b} stuck=${W}`),W++,C.webContents.invalidate();},1e3);});}finally{clearInterval(M),C.webContents.off("paint",ye),await ce(C),de?.(),await u.finish();}if(g||b===0)throw g??new Error("no frames captured");else {let O=U.finalize();return {written:b,jank:O.jank,outFile:c}}}catch(me){var Xe=me,Pe=true;}finally{var Ee=A(Y,Xe,Pe);Ee&&await Ee;}}var di="[Rerender]",qr=3;async function Kr(r){let e;for(let t=0;t<qr;t++)try{return await r()}catch(o){e=o,l.warn(di,`retry ${t+1}/${qr}: ${o.message}`);}throw e}var ui="[Video]",xt="__pup_video__",pi=`(function() {
|
|
220
117
|
if (window.self === window.top) return;
|
|
221
118
|
if (typeof ${xt} !== 'undefined') return;
|
|
222
119
|
|
|
@@ -498,5 +395,108 @@ ${n}`));e({width:parseInt(s[1],10),height:parseInt(s[2],10),duration:parseInt(c[
|
|
|
498
395
|
}
|
|
499
396
|
|
|
500
397
|
window.${xt} = { advance: advance };
|
|
501
|
-
})();`,
|
|
502
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL3RzdXBAOC41LjErMjdmMDFhNjExOTE5MTEzMC9ub2RlX21vZHVsZXMvdHN1cC9hc3NldHMvY2pzX3NoaW1zLmpzIiwiLi4vc3JjL2Jhc2UvZW52LnRzIiwiLi4vc3JjL2Jhc2UvcGFyc2VyLnRzIiwiLi4vc3JjL2Jhc2UvY29uc3RhbnRzLnRzIiwiLi4vc3JjL2Jhc2UvbG9nZ2luZy50cyIsIi4uL3NyYy9iYXNlL2NyYXNoLnRzIiwiLi4vc3JjL2Jhc2Uvbm9lcnIudHMiLCIuLi9zcmMvYmFzZS9wcm9jZXNzLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3NjaGVtYS50cyIsIi4uL3NyYy9jb21tb24udHMiLCIuLi9zcmMvcmVuZGVyZXIvaXBjLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3ZpZGVvL3BuZ19zdHJlYW0udHMiLCIuLi9zcmMvcmVuZGVyZXIvdmlkZW8vZGVjb2RlX3Nlc3Npb24udHMiLCIuLi9zcmMvcmVuZGVyZXIvdmlkZW8vZmZwcm9iZS50cyIsIi4uL3NyYy9yZW5kZXJlci92aWRlby9mcmFtZV9zZXJ2ZXIudHMiLCIuLi9zcmMvcmVuZGVyZXIvdmlkZW8vcHJvdG9jb2wudHMiLCIuLi9zcmMvYmFzZS90aW1pbmcudHMiLCIuLi9zcmMvYmFzZS9jZHAudHMiLCIuLi9zcmMvcmVuZGVyZXIvc3RlZ28udHMiLCIuLi9zcmMvcmVuZGVyZXIvcHJvdG9jb2wudHMiLCIuLi9zcmMvYmFzZS9saW1pdGVyLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9taXNjLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9jb2RlYy50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvYXVkaW8udHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL2hldmNfYWxwaGEvYml0LnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9oZXZjX2FscGhhL25hbC50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvaGV2Y19hbHBoYS9hbHBoYV9kYXJ3aW4udHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL2hldmNfYWxwaGEvdnBzLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9oZXZjX2FscGhhL2FscGhhLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9oZXZjX2FscGhhL2R1YWxfbGF5ZXJfbXV4LnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9oZXZjX2FscGhhL3BhcnNlci50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvaGV2Y19hbHBoYS9udmVuYy50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvdmlkZW8udHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL3ZpZGVvdG9vbGJveC50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvZmFjdG9yeS50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvbXV4ZXIudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL3NpbmsudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL3BpcGVsaW5lLnRzIiwiLi4vc3JjL2Jhc2UvZnJhbWVfZHJvcC50cyIsIi4uL3NyYy9iYXNlL2ltYWdlLnRzIiwiLi4vc3JjL3JlbmRlcmVyL2F1ZGlvLnRzIiwiLi4vc3JjL2Jhc2UvcmV0cnkudHMiLCIuLi9zcmMvcmVuZGVyZXIvaHRtbF9jaGVjay50cyIsIi4uL3NyYy9iYXNlL3dhaXRhYmxlX2V2ZW50LnRzIiwiLi4vc3JjL3JlbmRlcmVyL25ldHdvcmsudHMiLCIuLi9zcmMvcmVuZGVyZXIvd2luZG93LnRzIiwiLi4vc3JjL3JlbmRlcmVyL3JlbmRlci50cyIsIi4uL3NyYy9yZW5kZXJlci9yZXJlbmRlci50cyIsIi4uL3NyYy9yZW5kZXJlci90aWNrLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3ZpZGVvL3NoaW0udHMiLCIuLi9zcmMvcmVuZGVyZXIvc2hvb3QudHMiLCIuLi9zcmMvYXBwLnRzIl0sIm5hbWVzIjpbImdldEltcG9ydE1ldGFVcmwiLCJpbXBvcnRNZXRhVXJsIiwicGVudiIsIm5hbWUiLCJwYXJzZXIiLCJkZWZhdWx0VmFsdWUiLCJwYXJzZU51bWJlciIsIngiLCJudW0iLCJyZXF1aXJlIiwiY3JlYXRlUmVxdWlyZSIsInB1cExvZ0xldmVsIiwicHVwUGtnUm9vdCIsImRpcm5hbWUiLCJqb2luIiwicHVwQXVkaW9QcmVsb2FkIiwiREVCVUciLCJJTkZPIiwiV0FSTiIsIkVSUk9SIiwiRkFUQUwiLCJzdGFja0hvb2siLCJ0YXJnZXQiLCJfY29udGV4dCIsIm1lc3NhZ2VzIiwicHJvY2Vzc2VkIiwibXNnIiwiX2ZhdGFsX2RlYyIsIl9lcnJvcl9kZWMiLCJfd2Fybl9kZWMiLCJfaW5mb19kZWMiLCJfZGVidWdfZGVjIiwiX2luaXQiLCJMb2dnZXIiLCJfbGV2ZWwiLCJfX3J1bkluaXRpYWxpemVycyIsIl9fcHVibGljRmllbGQiLCJ2YWx1ZSIsImRlYnVnIiwiaW5mbyIsIndhcm4iLCJlcnJvciIsImx2IiwibWVzc2FnZSIsInByb2MiLCJyZXNvbHZlIiwicmVqZWN0IiwiZmF0YWwiLCJkaXNwYXRjaCIsImRhdGEiLCJlcnIiLCJjb2RlIiwic2lnbmFsIiwicmVhc29uIiwiX19kZWNvcmF0b3JTdGFydCIsIl9fZGVjb3JhdGVFbGVtZW50IiwiX19kZWNvcmF0b3JNZXRhZGF0YSIsImxvZ2dlciIsIkxvZyIsImxldmVsIiwiQVZfTE9HX0VSUk9SIiwiQVZfTE9HX1dBUk5JTkciLCJUQUciLCJzdGFydEVsZWN0cm9uQ3Jhc2hSZXBvcnRlciIsImR1bXBEaXIiLCJhcHAiLCJta2RpclN5bmMiLCJjcmFzaFJlcG9ydGVyIiwibm9lcnIiLCJmbiIsImFyZ3MiLCJyZXQiLCJQVVBfQVJHU19LRVkiLCJwYXJncyIsImFyZ3YiLCJwcml2IiwiYXJnIiwiREVGQVVMVF9XSURUSCIsIkRFRkFVTFRfSEVJR0hUIiwiREVGQVVMVF9GUFMiLCJERUZBVUxUX0RVUkFUSU9OIiwiREVGQVVMVF9PVVRfRklMRSIsIlJlbmRlclNjaGVtYSIsInoiLCJkZWZhdWx0UmVuZGVyT3B0aW9ucyIsIm1ha2VDTEkiLCJvcHRpb25zIiwic2hhcGUiLCJkIiwicHJvZ3JhbSIsInNvdXJjZSIsIm9wdHMiLCJlIiwiSXBjV3JpdGVyIiwicGF5bG9hZCIsIlBOR19UQUlMIiwiUG5nU3RyZWFtUGFyc2VyIiwiY2h1bmsiLCJmcmFtZXMiLCJpZHgiLCJlbmQiLCJGRk1QRUciLCJmZm1wZWdQYXRoIiwiUklOR19NQVgiLCJSSU5HX0VWSUNUX0xPT0tCQUNLIiwiRk9SV0FSRF9XQUlUX01BWCIsIkZSQU1FX1dBSVRfVElNRU9VVF9NUyIsIkRlY29kZVNlc3Npb24iLCJtZXRhIiwic3JjIiwiZnJhbWVDb3VudCIsImlkeFJhdyIsImhpdCIsInRpbWVyIiwibG8iLCJoaSIsImsiLCJvdXQiLCJmcm9tSWR4Iiwic3NTZWMiLCJzcGF3biIsInciLCJmIiwid2FpdGVyIiwiUFJPQkVfVElNRU9VVF9NUyIsInByb2JlIiwic3RkZXJyIiwiYiIsImRpbSIsImR1ciIsIkZyYW1lU2VydmVyIiwiaWQiLCJyYW5kb21VVUlEIiwicyIsImZyYW1lU2VydmVyIiwiU0NIRU1FIiwiQ09SU19IRUFERVJTIiwic2V0dXBGcmFtZVByb3RvY29sIiwicHJvdG9jb2wiLCJyZXEiLCJ1cmwiLCJqc29uT2siLCJpbnQiLCJwbmdPayIsImJ5dGVzIiwiY29weSIsImJsb2IiLCJrZXkiLCJmYWxsYmFjayIsInYiLCJzbGVlcCIsIm1zIiwid2l0aFRpbWVvdXQiLCJwIiwibGFiZWwiLCJDRFBfVElNRU9VVF9NUyIsInNlbmQiLCJjZHAiLCJtZXRob2QiLCJwYXJhbXMiLCJldmFsSW4iLCJleHByZXNzaW9uIiwiYWR2YW5jZVZpcnR1YWxUaW1lIiwiYnVkZ2V0IiwidGltZW91dCIsImhhbmRsZXIiLCJfIiwicGF1c2VWaXJ0dWFsVGltZSIsInJlc2l6ZURyYXdhYmxlIiwic2l6ZSIsIkZSQU1FX1NZTkNfTUFSS0VSX1dJRFRIIiwiU1RFR09fVElDS19DSEFOTkVMIiwiYnVpbGRTdGVnb0hUTUwiLCJ0YXJnZXRVUkwiLCJ3aWR0aCIsImhlaWdodCIsImRlY29kZVN0ZWdvIiwiYml0bWFwIiwibWFya2VyUm93IiwidGltZXN0YW1wIiwiaSIsInBpeGVsSWR4IiwiYml0Iiwic3RhcnRTdGVnbyIsInN3YXBCdWZmZXIiLCJ3YyIsImV4cGVjdGVkIiwiaW50ZXJ2YWwiLCJzd2FwcGVkIiwiciIsIlBVUF9TQ0hFTUUiLCJGUkFNRV9TQ0hFTUUiLCJQUklWSUxFR0VEX1BSSVZJTEVHRVMiLCJzZXR1cFB1cFByb3RvY29sIiwiaHRtbCIsImNyZWF0ZVN0ZWdvVVJMIiwiQ29uY3VycmVuY3lMaW1pdGVyIiwibWF4Q29uY3VycmVuY3kiLCJrZWVwIiwiZW50cnkiLCJvcGVuVmlkZW9DdHgiLCJjdHgiLCJDb2RlY0NvbnRleHQiLCJSYXRpb25hbCIsIkFWX0NPREVDX0ZMQUdfR0xPQkFMX0hFQURFUiIsIkZGbXBlZ0Vycm9yIiwibWFrZUZyYW1lIiwicGl4Rm10IiwiZnJhbWUiLCJGcmFtZSIsIm1ha2VQYWNrZXQiLCJwa3QiLCJQYWNrZXQiLCJkcmFpblBhY2tldHMiLCJzdHJlYW0iLCJtdXhlciIsIkFWRVJST1JfRUFHQUlOIiwiQVZFUlJPUl9FT0YiLCJDb2RlY1N0YXRlIiwiX0NvZGVjU3RhdGUiLCJjb2RlYyIsIkNvZGVjIiwiRkZfREVDT0RFUl9QTkciLCJvayIsInBuZyIsIkFWX1BJWF9GTVRfQkdSQSIsIkFWX1BJWF9GTVRfWVVWQTQyMFAiLCJwbmdEYXRhIiwiX3N0YWNrIiwiX191c2luZyIsIl9lcnJvciIsIl9oYXNFcnJvciIsIl9fY2FsbERpc3Bvc2UiLCJzd3MiLCJTb2Z0d2FyZVNjYWxlQ29udGV4dCIsImZtdCIsIlNXU19CSUxJTkVBUiIsIlNBTVBMRV9GTVRfTkFNRSIsIkFWX1NBTVBMRV9GTVRfRkxUIiwiQVZfU0FNUExFX0ZNVF9GTFRQIiwiQXVkaW9FbmNvZGVyIiwiX0F1ZGlvRW5jb2RlciIsIm91dEZtdCIsIkFWX0NIQU5ORUxfTEFZT1VUX1NURVJFTyIsImluU2FtcGxlUmF0ZSIsImdyYXBoIiwiRmlsdGVyR3JhcGgiLCJhYnVmZmVyIiwiRmlsdGVyIiwiYnVmU3JjIiwiYWJ1ZmZlcnNpbmsiLCJidWZTaW5rIiwiZmlsdGVyRGVzYyIsIm91dHB1dHMiLCJGaWx0ZXJJbk91dCIsImlucHV0cyIsInBjbSIsIm5TYW1wbGVzIiwicGFja0JpdHMiLCJiaXRzIiwiYnVmIiwiYnl0ZSIsIkJpdFdyaXRlciIsInZhbCIsIm4iLCJsZW4iLCJwYWQiLCJzdGFydCIsIkJpdFJlYWRlciIsInplcm9zIiwiQU5ORVhfQl9TVEFSVF9DT0RFIiwiTkFMX0JMQV9XX0xQIiwiTkFMX1JTVl9JUkFQX1ZDTDIzIiwiTkFMX1ZQUyIsIk5BTF9TUFMiLCJOQUxfUFBTIiwiTkFMX1NFSV9QUkVGSVgiLCJwYXJzZU5hbFR5cGUiLCJoZWFkZXIwIiwiaGVhZGVyMSIsInR5cGUiLCJsYXllcklkIiwidGVtcG9yYWxJZCIsImVuY29kZU5hbEhlYWRlciIsImJ5dGUwIiwiYnl0ZTEiLCJzcGxpdE5hbFVuaXRzIiwiYml0c3RyZWFtIiwibmFscyIsInNjTGVuIiwibmFsU3RhcnQiLCJuYWxFbmQiLCJqIiwicmV3cml0ZU5hbExheWVySWQiLCJuYWwiLCJiMCIsImIxIiwicmVtb3ZlRW11bGF0aW9uUHJldmVudGlvbiIsImFkZEVtdWxhdGlvblByZXZlbnRpb24iLCJWUFNfUFRMX0JJVCIsIlNQU19QVExfQklUIiwiUFRMX1RJRVJfQklUIiwiUFRMX0NPTVBBVDJfQklUIiwiU0xJQ0VfVFlQRV9CIiwiU0xJQ0VfVFlQRV9QIiwic2V0Qml0IiwiYml0T2Zmc2V0IiwibWFzayIsImN1ciIsInBhdGNoUHRsIiwibmFsRGF0YSIsInB0bFN0YXJ0Qml0IiwicmJzcCIsInBhdGNoSGV2Y0FscGhhUHRsIiwiY2h1bmtzIiwicmV3cml0ZU9uZVVlIiwibmFsSW4iLCJuZXdWYWwiLCJiciIsImJ3IiwicmV3cml0ZVR3b1VlIiwibmV3VmFsMSIsIm5ld1ZhbDIiLCJyZXdyaXRlQWxwaGFTcHMiLCJzcHMiLCJTUFNfU0VRX0lEX0JJVCIsInJld3JpdGVBbHBoYVBwcyIsInBwcyIsInJlYWRTZSIsInVlIiwicGFyc2VJbmxpbmVTdFJlZlBpY1NldCIsIm51bURlbHRhUG9jc1NldDAiLCJkZWx0YUlkeE1pbnVzMSIsIm51bU5lZyIsIm51bVBvcyIsInBhcnNlSGVhZGVyVG9BbGlnbm1lbnQiLCJuYWxUeXBlIiwiY2ZnIiwiaXNJcmFwIiwic2xpY2VUeXBlIiwicmV3cml0ZUFscGhhU2xpY2VIZWFkZXIiLCJzbGljZSIsIkIiLCJvbGRBbGlnbkJpdHMiLCJzbGljZURhdGFCeXRlT2Zmc2V0IiwiZXh0cmFjdFBUTCIsInZwc0RhdGEiLCJtYXhTdWJMYXllcnNNaW51czEiLCJwdGxTdGFydCIsIndyaXRlQmFzZVZQUyIsInB0bCIsIndyaXRlVlBTRXh0ZW5zaW9uIiwiYnVpbGRBbHBoYVZQUyIsImV4dHJhY3RBbHBoYVRvWXV2NDIwcEJ1ZmZlciIsImJncmFGcmFtZSIsInNyY0xzIiwiaCIsInlTaXplIiwic3JjMzIiLCJ5Iiwicm93QmFzZSIsImRzdEJhc2UiLCJyZXdyaXRlQWxwaGFQYXJhbVNldCIsImJ1aWxkVW5pZmllZEV4dHJhZGF0YSIsImJhc2VFeHRyYWRhdGEiLCJhbHBoYUV4dHJhZGF0YSIsImJhc2VOYWxzIiwiYWxwaGFOYWxzIiwiYWxwaGFCeVR5cGUiLCJhcnIiLCJlbWl0dGVkIiwiYWxwaGFOYWwiLCJhRGF0YSIsImJ1aWxkQWxwaGFDaGFubmVsSW5mb1NFSSIsImgwIiwiaDEiLCJ3cml0ZUJpdHMiLCJpbnRlcmxlYXZlQWNjZXNzVW5pdHMiLCJEdWFsTGF5ZXJNdXgiLCJiYXNlQ3R4IiwiYWxwaGFDdHgiLCJiYXNlUGt0IiwiYWxwaGFQa3QiLCJ0YWciLCJiYXNlIiwiYWxwaGEiLCJoZXZjQ2ZnIiwiaW50ZXJsZWF2ZWQiLCJmYWlsIiwiZmllbGQiLCJnb3QiLCJza2lwUHRsIiwibWF4U3ViTGF5ZXJzIiwic3ViUHJvZmlsZVByZXNlbnQiLCJzdWJMZXZlbFByZXNlbnQiLCJwYXJzZVNwcyIsInNwc1Jic3AiLCJjaHJvbWFGb3JtYXQiLCJsb2cyTWF4UG9jTHNiIiwib3JkZXJDb3VudCIsInNhb0VuYWJsZWQiLCJudW1TdFJwcyIsImxvbmdUZXJtUmVmUGljc1ByZXNlbnQiLCJzcHNUZW1wb3JhbE12cEVuYWJsZWQiLCJwYXJzZVBwcyIsInBwc1Jic3AiLCJudW1FeHRyYVNsaWNlSGVhZGVyQml0cyIsImNhYmFjSW5pdFByZXNlbnQiLCJwcHNMb29wRmlsdGVyQWNyb3NzU2xpY2VzRW5hYmxlZCIsImRlYmxvY2tpbmdDb250cm9sUHJlc2VudCIsInNsaWNlRGVibG9ja2luZ0Rpc2FibGVkT3ZlcnJpZGUiLCJwYXJzZU52ZW5jSGV2Y0NvbmZpZyIsImV4dHJhZGF0YSIsIk52ZW5jRHVhbExheWVyRW5jb2RlciIsIl9OdmVuY0R1YWxMYXllckVuY29kZXIiLCJmcHMiLCJiaXRyYXRlIiwiRkZfRU5DT0RFUl9IRVZDX05WRU5DIiwiY29tbW9uIiwiYWxwaGFTd0ZyYW1lIiwiQVZfUElYX0ZNVF9ZVVY0MjBQIiwidW5pZmllZCIsImNocm9tYVNpemUiLCJhbHBoYUJ1ZiIsInB0cyIsImRlc3luYyIsIlZpZGVvRW5jb2RlciIsIl9WaWRlb0VuY29kZXIiLCJjb2RlY05hbWUiLCJjb2RlY1RhZyIsImNvZGVjT3B0cyIsInJlc3QiLCJWaWRlb1Rvb2xib3hFbmNvZGVyIiwiX1ZpZGVvVG9vbGJveEVuY29kZXIiLCJodyIsIkFWQ09MX1JBTkdFX0pQRUciLCJjcmVhdGVId1ZpZGVvRW5jb2RlciIsImRpc2FibGVId0NvZGVjIiwic2hhcmVkSHciLCJIYXJkd2FyZUNvbnRleHQiLCJvd25zSHciLCJGRl9IV0RFVklDRV9UWVBFX1ZJREVPVE9PTEJPWCIsIkZGX0hXREVWSUNFX1RZUEVfQ1VEQSIsIkZGX0VOQ09ERVJfTElCWDI2NSIsIkZvcm1hdE11eGVyIiwib3V0UGF0aCIsImZvcm1hdE5hbWUiLCJGb3JtYXRDb250ZXh0IiwiY29kZWNDdHgiLCJGRl9FTkNPREVSX0xJQlZQWF9WUDkiLCJPdXRwdXRTaW5rIiwiX091dHB1dFNpbmsiLCJwYXRoIiwibG93ZXIiLCJ2aWRlbyIsImF1ZGlvIiwiRkZfRU5DT0RFUl9BQUMiLCJGRl9FTkNPREVSX0xJQk9QVVMiLCJzYW1wbGVSYXRlIiwiaHdWaWRlbyIsIkVuY29kZXJQaXBlbGluZSIsIl9FbmNvZGVyUGlwZWxpbmUiLCJvdXRGaWxlIiwid2l0aEF1ZGlvIiwib3V0RmlsZXMiLCJraW5kcyIsImlzSHdBbHBoYUNhcGFibGUiLCJzaW5rcyIsInNpbmsiLCJpbnB1dCIsIkZyYW1lRHJvcFN0YXRzIiwiY291bnQiLCJ0b3RhbERyb3BwZWQiLCJsb2NhbFN1bSIsIm1heEJ1cnN0IiwiYnVyc3QiLCJwZXJjZXB0aWJsZSIsImciLCJsIiwic2NvcmUiLCJzaXplRXF1YWxzIiwiYSIsIkFVRElPX01FVEFfQ0hBTk5FTCIsIkFVRElPX0NIVU5LX0NIQU5ORUwiLCJhdHRhY2hBdWRpb0xpc3RlbmVycyIsImVuY29kZXIiLCJnZXRWaWRlb1RpbWVNcyIsIm9uRXJyb3IiLCJvbk1ldGEiLCJfZSIsInN0YXJ0TXMiLCJzaWxlbmNlU2FtcGxlcyIsIm9uQ2h1bmsiLCJidWZmZXIiLCJ1c2VSZXRyeSIsIm1heEF0dGVtcHRzIiwidGltZW91dEVycm9yIiwiYXR0ZW1wdCIsInByb21pc2VzIiwic2V0VGltZW91dCIsIlNVUFBPUlRFRF9QUk9UT0NPTFMiLCJTT1VSQ0VfUEFUVEVSTiIsImNoZWNrSFRNTCIsIldhaXRhYmxlRXZlbnQiLCJtYXAiLCJwcm94aWVkVXJsIiwicGFyc2VkIiwiVVJMIiwic2V0SW50ZXJjZXB0b3IiLCJ3aW5kb3ciLCJ1c2VJbm5lclByb3h5IiwibGltaXRlciIsImV2ZW50cyIsIndhaXQiLCJvblRpbWVvdXQiLCJldmVudCIsImRldGFpbHMiLCJjYWxsYmFjayIsInByb3hpZWQiLCJyZXNwb25zZUhlYWRlcnMiLCJ1bnNldEludGVyY2VwdG9yIiwiVElNRU9VVF9FUlJPUiIsIndhaXRGb3JGaW5pc2giLCJ3aW4iLCJhY3Rpb24iLCJ0b2xlcmFudCIsImRvbmUiLCJkZXNjIiwiZXhpdENvZGUiLCJkaXNwb3NlV2luZG93Iiwib3BlbldpbmRvdyIsInJlbmRlcmVyIiwicHJlbG9hZCIsIm9uQ3JlYXRlZCIsIkJyb3dzZXJXaW5kb3ciLCJsaW5lTnVtYmVyIiwic291cmNlSWQiLCJtc2dzIiwib3BlbldpbmRvd1dpdGhSZXRyeSIsImxvYWRXaW5kb3ciLCJ3YXJtdXAiLCJvcGVuIiwic3RhY2siLCJyZW5kZXIiLCJkdXJhdGlvbiIsIm9uUHJvZ3Jlc3MiLCJ0b3RhbCIsImZyYW1lSW50ZXJ2YWwiLCJmcmFtZVNpemUiLCJ3cml0dGVuIiwibGFzdFdyaXR0ZW5UaW1lIiwicHJvZ3Jlc3MiLCJlbmNvZGVFcnJvciIsInJlc29sdmVyIiwicmVqZWN0ZXIiLCJkcm9wU3RhdHMiLCJkaXNwb3NlQXVkaW8iLCJzY2hlZHVsZUZyYW1lIiwicGFpbnQiLCJfciIsImltYWdlIiwiaW1hZ2VTaXplIiwiY3VycmVudFRpbWUiLCJjcm9wcGVkIiwidGltZURlbHRhIiwiZnJhbWVzVG9JbnNlcnQiLCJuZXdQcm9ncmVzcyIsImR1cmF0aW9uTXMiLCJsYXN0V3JpdHRlbiIsInN0dWNrIiwiZHJvcFNjb3JlIiwiX3Byb21pc2UiLCJNQVhfUkVOREVSX0FUVEVNUFRTIiwid2l0aFJlcmVuZGVyIiwibGFzdEVyciIsIlRJQ0tfU1lNQk9MIiwiSE9PSyIsInRpY2siLCJ0aW1lc3RhbXBNcyIsImV2IiwiVklERU9fU1lNQk9MIiwiQURWQU5DRV9USU1FT1VUX01TIiwiYWR2YW5jZVZpZGVvcyIsImxhc3RUcyIsImxhZ2d5IiwiX2QiLCJ0cyIsInNob290IiwidEluaXQiLCJ3aW5QIiwicGlwZWxpbmUiLCJtYWluIiwiaWZyYW1lIiwiZnJhbWVNcyIsInByaW50RmVhdHVyZXMiLCJjdHJsIiwiZXhpdGluZyIsIk1lbnUiLCJyYXciLCJpcGMiLCJta2RpciIsInJlc3VsdCIsIm0iXSwibWFwcGluZ3MiOiJpb0JBS0EsSUFBQSxFQUFBLENBQUEsTUFBQSxDQUFBLE1BQUEsQ0FBQSxJQUFBLEVBQUEsQ0FBQSxNQUFBLENBQUEsY0FBQSxDQUFBLElBQUEsRUFBQSxDQUFBLE1BQUEsQ0FBQSx3QkFBQSxDQUFBLElBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsR0FBQSxDQUFBLENBQUEsQ0FBQSxNQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLE1BQUEsQ0FBQSxHQUFBLENBQUEsU0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxNQUFBLFNBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLElBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEdBQUEsQ0FBQSxJQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLFVBQUEsQ0FBQSxJQUFBLENBQUEsWUFBQSxDQUFBLElBQUEsQ0FBQSxRQUFBLENBQUEsSUFBQSxDQUFBLEtBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsSUFBQSxFQUFBLENBQUEsQ0FBQSxFQUFBLElBQUEsRUFBQSxDQUFBLElBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsT0FBQSxDQUFBLFFBQUEsQ0FBQSxRQUFBLENBQUEsUUFBQSxDQUFBLFVBQUEsQ0FBQSxPQUFBLENBQUEsT0FBQSxDQUFBLEtBQUEsQ0FBQSxLQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsR0FBQSxNQUFBLEVBQUEsT0FBQSxDQUFBLEVBQUEsVUFBQSxDQUFBLENBQUEsQ0FBQSxtQkFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLElBQUEsQ0FBQSxJQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLElBQUEsQ0FBQSxDQUFBLENBQUEsUUFBQSxDQUFBLENBQUEsQ0FBQSxjQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLHFCQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsSUFBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLEVBQUEsSUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsR0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxVQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEdBQUEsQ0FBQSxJQUFBLElBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxNQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsSUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLE9BQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEdBQUEsQ0FBQSxJQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsS0FBQSxDQUFBLENBQUEsQ0FBQSxLQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxHQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsU0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxJQUFBLElBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxNQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLE1BQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLE9BQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxNQUFBLENBQUEsQ0FBQSxHQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsSUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxHQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsSUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsR0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsT0FBQSxDQUFBLEVBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEdBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLElBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEdBQUEsQ0FBQSxHQUFBLENBQUEsRUFBQSxJQUFBLENBQUEsQ0FBQSxPQUFBLENBQUEsRUFBQSxRQUFBLEVBQUEsT0FBQSxDQUFBLEVBQUEsVUFBQSxFQUFBLENBQUEsQ0FBQSxpQkFBQSxDQUFBLENBQUEsSUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsR0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxjQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxHQUFBLE1BQUEsR0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxTQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsR0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxPQUFBLENBQUEsRUFBQSxVQUFBLEVBQUEsQ0FBQSxDQUFBLHVCQUFBLENBQUEsQ0FBQSxDQUFBLEdBQUEsQ0FBQSxDQUFBLFVBQUEsQ0FBQSxHQUFBLENBQUEsQ0FBQSxDQUFBLElBQUEsQ0FBQSxJQUFBLEVBQUEsQ0FBQSxNQUFBLENBQUEsQ0FBQSxDQUFBLE9BQUEsT0FBQSxDQUFBLE1BQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsSUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLEtBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxJQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLE9BQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEdBQUEsQ0FBQSxJQUFBLENBQUEsQ0FBQSxPQUFBLGVBQUEsRUFBQSxVQUFBLENBQUEsZUFBQSxDQUFBLFNBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsT0FBQSxDQUFBLENBQUEsS0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxJQUFBLENBQUEsaUJBQUEsQ0FBQSxDQUFBLENBQUEsS0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsVUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsSUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENB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QUUsQ0FBQSxDQUFHLENBQUMsRUFDNUQsQ0FFQUEsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxDQUFBLENBQ1QsSUFBQSxJQUFTM0ksQ0FBQUEsQ0FBSSxFQUFHQSxDQUFBQSxDQUFJLEVBQUEsQ0FBSUEsQ0FBQUEsRUFBQUEsQ0FBSzJJLENBQUFBLENBQUcsSUFBQSxDQUFLM0ksQ0FBQUEsR0FBTSxDQUFBLEVBQUtBLENBQUFBLEdBQU0sQ0FBQyxDQUFBLENBQ3ZEMkksQ0FBQUEsQ0FBRyxDQUFBLENBQUUsQ0FBQSxDQUFHLENBQUMsQ0FBQSxDQUNUQSxDQUFBQSxDQUFHLEVBQUUsQ0FBQSxDQUFHLENBQUMsQ0FBQSxDQUNUQSxDQUFBQSxDQUFHLElBQUEsQ0FBSyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxDQUFBLENBQUUsQ0FBQSxDQUFHLENBQUMsQ0FBQSxDQUNUQSxDQUFBQSxDQUFHLENBQUEsQ0FBRSxDQUFBLENBQUcsQ0FBQyxFQUNUQSxDQUFBQSxDQUFHLENBQUEsQ0FBRSxDQUFBLENBQUcsQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsQ0FBQSxDQUFFLENBQUEsQ0FBRyxDQUFDLENBQUEsQ0FFVEEsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsRUFBQSxDQUFHLENBQUMsQ0FBQSxDQUNQQSxDQUFBQSxDQUFHLElBQUEsQ0FBSyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsSUFBQSxDQUFLLENBQUMsQ0FBQSxDQUdUQSxDQUFBQSxDQUFHLEVBQUEsQ0FBRyxDQUFDLEVBQ1BBLENBQUFBLENBQUcsSUFBQSxDQUFLLENBQUMsQ0FBQSxDQUNUQSxDQUFBQSxDQUFHLElBQUEsQ0FBSytCLENBQUFBLENBQUksT0FBQSxDQUFTQSxDQUFBQSxDQUFJLFFBQUEsQ0FBVUEsQ0FBQUEsQ0FBSSxNQUFBLENBQVNBLENBQUFBLENBQUksUUFBUSxDQUFBLENBRTVEL0IsQ0FBQUEsQ0FBRyxHQUFHLENBQUMsQ0FBQSxDQUNQQSxDQUFBQSxDQUFHLENBQUEsQ0FBRSxDQUFBLENBQUcsQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsQ0FBQSxDQUFFLENBQUEsQ0FBRyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxDQUFBLENBQUUsQ0FBQSxDQUFHLENBQUMsQ0FBQSxDQUVUQSxDQUFBQSxDQUFHLEVBQUEsQ0FBRyxDQUFDLENBQUEsQ0FDUEEsQ0FBQUEsQ0FBRyxDQUFBLENBQUVqSixDQUFBQSxDQUFPLEVBQUUsQ0FBQSxDQUNkaUosQ0FBQUEsQ0FBRyxDQUFBLENBQUVoSixDQUFBQSxDQUFRLEVBQUUsQ0FBQSxDQUNmZ0osQ0FBQUEsQ0FBRyxLQUFLLENBQUMsQ0FBQSxDQUNUQSxDQUFBQSxDQUFHLENBQUEsQ0FBRSxDQUFBLENBQUcsQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsQ0FBQSxDQUFFLENBQUEsQ0FBRyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxDQUFBLENBQUUsQ0FBQSxDQUFHLENBQUMsRUFDVEEsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxDQUFBLENBRVRBLENBQUFBLENBQUcsSUFBQSxDQUFLLENBQUMsQ0FBQSxDQUNUQSxDQUFBQSxDQUFHLElBQUEsQ0FBSyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxDQUFBLENBR1RBLEVBQUcsSUFBQSxDQUFLLENBQUMsQ0FBQSxDQUNUQSxDQUFBQSxDQUFHLEVBQUEsQ0FBRyxDQUFDLENBQUEsQ0FDUEEsQ0FBQUEsQ0FBRyxFQUFBLENBQUcsQ0FBQyxDQUFBLENBQ1BBLENBQUFBLENBQUcsRUFBQSxDQUFHLENBQUMsQ0FBQSxDQUNQQSxDQUFBQSxDQUFHLEdBQUcsQ0FBQyxDQUFBLENBRVBBLENBQUFBLENBQUcsRUFBQSxDQUFHLENBQUMsQ0FBQSxDQUNQQSxDQUFBQSxDQUFHLElBQUEsQ0FBSyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxFQUFBLENBQUcsQ0FBQyxDQUFBLENB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QUEsQ0FBQSxFQUFJRCxFQUFXLENBQUEsU0FBQSxFQUFZRyxDQUFXLENBQUEsQ0FBQSxDQUFHLENBQUEsQ0FDbkYsTUFBTTFhLEVBQVkyYSxDQUFBQSxDQUFJLEdBQUEsQ0FBTyx3QkFBd0IsRUFDdkQsQ0NoSEEsSUFBTXJnQixFQUFBQSxDQUFNLFNBQUEsQ0FDQ3NnQixFQUFBQSxDQUFlLGdCQUd0QkosRUFBQUEsQ0FBTyxDQUFBO0FBQUE7QUFBQSxhQUFBLEVBRUVJLEVBQVksQ0FBQTs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztB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Q29ELEdBQUssTUFBQSxDQUFPLGNBQUEsRUFBZSxDQUMzQixJQUFNTSxFQUFTLE1BQU01QixFQUFBQSxDQUFhLElBQ2hDakQsQ0FBQUEsQ0FBTyxDQUNMLE9BQUFsYixDQUFBQSxDQUNBLEdBQUdKLEVBQ0gsTUFBQSxDQUFRNmYsRUFBQUEsQ0FBSyxPQUNiLFVBQUEsQ0FBYTFiLENBQUFBLEVBQU04YixFQUFJLGFBQUEsQ0FBYzliLENBQUMsRUFDdEMsU0FBQSxDQUFXLENBQUNxVSxDQUFBQSxDQUFHNEgsQ0FBQUEsR0FBTUgsRUFBSSxZQUFBLENBQWF6SCxDQUFBQSxDQUFHNEgsQ0FBQyxDQUM1QyxDQUFDLENBQ0gsQ0FBQSxDQUNBLE1BQU1ILEVBQUksU0FBQSxDQUFVRSxDQUFNLEVBQzVCLENBQUEsTUFBUzdmLENBQUFBLENBQUcsQ0FDVixJQUFNbkQsQ0FBQUEsQ0FBUW1ELEVBQ1I4ZixDQUFBQSxDQUFJampCLENBQUFBLENBQU0sS0FBQSxFQUFTQSxDQUFBQSxDQUFNLFNBQVcsTUFBQSxDQUFPbUQsQ0FBQUEsRUFBSyxlQUFlLENBQUEsQ0FDckUsTUFBTTJmLEVBQUksVUFBQSxDQUFXRyxDQUFDLEVBQ3hCLENBQUEsT0FBRSxDQUNBTixHQUFVLElBQUEsQ0FDVm5oQixZQUFBQSxDQUFJLE9BQ04sQ0FDRixDQUNGLENBQUMsQ0FBQSIsImZpbGUiOiJhcHAuY2pzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gU2hpbSBnbG9iYWxzIGluIGNqcyBidW5kbGVcbi8vIFRoZXJlJ3MgYSB3ZWlyZCBidWcgdGhhdCBlc2J1aWxkIHdpbGwgYWx3YXlzIGluamVjdCBpbXBvcnRNZXRhVXJsXG4vLyBpZiB3ZSBleHBvcnQgaXQgYXMgYGNvbnN0IGltcG9ydE1ldGFVcmwgPSAuLi4gX19maWxlbmFtZSAuLi5gXG4vLyBCdXQgdXNpbmcgYSBmdW5jdGlvbiB3aWxsIG5vdCBjYXVzZSB0aGlzIGlzc3VlXG5cbmNvbnN0IGdldEltcG9ydE1ldGFVcmwgPSAoKSA9PiBcbiAgdHlwZW9mIGRvY3VtZW50ID09PSBcInVuZGVmaW5lZFwiIFxuICAgID8gbmV3IFVSTChgZmlsZToke19fZmlsZW5hbWV9YCkuaHJlZiBcbiAgICA6IChkb2N1bWVudC5jdXJyZW50U2NyaXB0ICYmIGRvY3VtZW50LmN1cnJlbnRTY3JpcHQudGFnTmFtZS50b1VwcGVyQ2FzZSgpID09PSAnU0NSSVBUJykgXG4gICAgICA/IGRvY3VtZW50LmN1cnJlbnRTY3JpcHQuc3JjIFxuICAgICAgOiBuZXcgVVJMKFwibWFpbi5qc1wiLCBkb2N1bWVudC5iYXNlVVJJKS5ocmVmO1xuXG5leHBvcnQgY29uc3QgaW1wb3J0TWV0YVVybCA9IC8qIEBfX1BVUkVfXyAqLyBnZXRJbXBvcnRNZXRhVXJsKClcbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMjUuXG5cbmV4cG9ydCB0eXBlIEVudlBhcnNlcjxUPiA9ICh2YWx1ZTogdW5rbm93bikgPT4gVDtcblxuZXhwb3J0IGZ1bmN0aW9uIHBlbnY8VD4obmFtZTogc3RyaW5nLCBwYXJzZXI6IEVudlBhcnNlcjxUPiwgZGVmYXVsdFZhbHVlOiBUKTogVDtcbmV4cG9ydCBmdW5jdGlvbiBwZW52PFQ+KG5hbWU6IHN0cmluZywgcGFyc2VyOiBFbnZQYXJzZXI8VD4sIGRlZmF1bHRWYWx1ZT86IFQpOiBUIHwgdW5kZWZpbmVkO1xuZXhwb3J0IGZ1bmN0aW9uIHBlbnY8VD4obmFtZTogc3RyaW5nLCBwYXJzZXI6IEVudlBhcnNlcjxUPiwgZGVmYXVsdFZhbHVlPzogVCk6IFQgfCB1bmRlZmluZWQge1xuICB0cnkge1xuICAgIHJldHVybiBwYXJzZXIocHJvY2Vzcy5lbnZbbmFtZV0pO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZGVmYXVsdFZhbHVlO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAxLzMwLlxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VOdW1iZXIoeDogdW5rbm93bik6IG51bWJlciB7XG4gIGlmICh0eXBlb2YgeCA9PT0gXCJudW1iZXJcIikge1xuICAgIHJldHVybiB4O1xuICB9XG4gIGNvbnN0IG51bSA9IE51bWJlcih4KTtcbiAgaWYgKE51bWJlci5pc05hTihudW0pKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBWYWx1ZSAke3h9IGlzIG5vdCBhIHZhbGlkIG51bWJlcmApO1xuICB9XG4gIHJldHVybiBudW07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVN0cmluZyh4OiB1bmtub3duKTogc3RyaW5nIHtcbiAgaWYgKHR5cGVvZiB4ID09PSBcInN0cmluZ1wiKSByZXR1cm4geDtcbiAgcmV0dXJuIFN0cmluZyh4KTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDkuXG5cbmltcG9ydCB7IGNyZWF0ZVJlcXVpcmUgfSBmcm9tIFwibW9kdWxlXCI7XG5pbXBvcnQgeyBkaXJuYW1lLCBqb2luIH0gZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IHBlbnYgfSBmcm9tIFwiLi9lbnZcIjtcbmltcG9ydCB7IHBhcnNlTnVtYmVyIH0gZnJvbSBcIi4vcGFyc2VyXCI7XG5cbmNvbnN0IHJlcXVpcmUgPSBjcmVhdGVSZXF1aXJlKGltcG9ydC5tZXRhLnVybCk7XG5cbmV4cG9ydCBjb25zdCBwdXBMb2dMZXZlbCA9IHBlbnYoXCJQVVBfTE9HX0xFVkVMXCIsIHBhcnNlTnVtYmVyLCAyKTtcblxuZXhwb3J0IGNvbnN0IHB1cFBrZ1Jvb3QgPSBkaXJuYW1lKHJlcXVpcmUucmVzb2x2ZShcInB1cC1yZWNvcmRlci9wYWNrYWdlLmpzb25cIikpO1xuZXhwb3J0IGNvbnN0IHB1cEFwcCA9IGpvaW4ocHVwUGtnUm9vdCwgXCJkaXN0XCIsIFwiYXBwLmNqc1wiKTtcbmV4cG9ydCBjb25zdCBwdXBBdWRpb1ByZWxvYWQgPSBqb2luKHB1cFBrZ1Jvb3QsIFwiZGlzdFwiLCBcImF1ZGlvX3ByZWxvYWQuY2pzXCIpO1xuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wNi5cblxuaW1wb3J0IHR5cGUgeyBDaGlsZFByb2Nlc3MgfSBmcm9tIFwiY2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0IHsgTG9nIH0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB7IEFWX0xPR19FUlJPUiwgQVZfTE9HX1dBUk5JTkcgfSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcbmltcG9ydCB7IHB1cExvZ0xldmVsIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTG9nZ2VyTGlrZSB7XG4gIGRlYnVnPyh0aGlzOiB2b2lkLCAuLi5tZXNzYWdlczogdW5rbm93bltdKTogdm9pZDtcblxuICBpbmZvPyh0aGlzOiB2b2lkLCAuLi5tZXNzYWdlczogdW5rbm93bltdKTogdm9pZDtcblxuICB3YXJuPyh0aGlzOiB2b2lkLCAuLi5tZXNzYWdlczogdW5rbm93bltdKTogdm9pZDtcblxuICBlcnJvcj8odGhpczogdm9pZCwgLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQ7XG59XG5cbmNvbnN0IERFQlVHID0gXCI8cHVwQGRlYnVnPlwiO1xuY29uc3QgSU5GTyA9IFwiPHB1cEBpbmZvPlwiO1xuY29uc3QgV0FSTiA9IFwiPHB1cEB3YXJuPlwiO1xuY29uc3QgRVJST1IgPSBcIjxwdXBAZXJyb3I+XCI7XG5jb25zdCBGQVRBTCA9IFwiPHB1cEBmYXRhbD5cIjtcblxuZnVuY3Rpb24gc3RhY2tIb29rKHRhcmdldDogRnVuY3Rpb24sIF9jb250ZXh0OiBDbGFzc01ldGhvZERlY29yYXRvckNvbnRleHQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh0aGlzOiBMb2dnZXIsIC4uLm1lc3NhZ2VzOiB1bmtub3duW10pIHtcbiAgICBjb25zdCBwcm9jZXNzZWQgPSBtZXNzYWdlcy5tYXAoKG1zZykgPT4ge1xuICAgICAgcmV0dXJuIG1zZyBpbnN0YW5jZW9mIEVycm9yID8gKG1zZy5zdGFjayA/PyBTdHJpbmcobXNnKSkgOiBtc2c7XG4gICAgfSk7XG4gICAgcmV0dXJuIHRhcmdldC5jYWxsKHRoaXMsIC4uLnByb2Nlc3NlZCk7XG4gIH07XG59XG5cbmV4cG9ydCBjbGFzcyBMb2dnZXIgaW1wbGVtZW50cyBMb2dnZXJMaWtlIHtcbiAgcHJpdmF0ZSBfaW1wbD86IExvZ2dlckxpa2U7XG5cbiAgZ2V0IGxldmVsKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2xldmVsO1xuICB9XG5cbiAgc2V0IGxldmVsKHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLl9sZXZlbCA9IHZhbHVlO1xuICAgIHRoaXMuaW1wbCA9IHRoaXMuX2ltcGwgPz8gY29uc29sZTtcbiAgfVxuXG4gIGdldCBpbXBsKCk6IExvZ2dlckxpa2UgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9pbXBsO1xuICB9XG5cbiAgc2V0IGltcGwodmFsdWU6IExvZ2dlckxpa2UpIHtcbiAgICBjb25zdCBkZWJ1ZyA9IHZhbHVlLmRlYnVnID8/IGNvbnNvbGUuZGVidWc7XG4gICAgY29uc3QgaW5mbyA9IHZhbHVlLmluZm8gPz8gY29uc29sZS5pbmZvO1xuICAgIGNvbnN0IHdhcm4gPSB2YWx1ZS53YXJuID8/IGNvbnNvbGUud2FybjtcbiAgICBjb25zdCBlcnJvciA9IHZhbHVlLmVycm9yID8/IGNvbnNvbGUuZXJyb3I7XG4gICAgY29uc3QgbHYgPSB0aGlzLl9sZXZlbDtcbiAgICB0aGlzLl9pbXBsID0ge1xuICAgICAgZGVidWc6IGx2ID49IDMgPyBkZWJ1ZyA6IHVuZGVmaW5lZCxcbiAgICAgIGluZm86IGx2ID49IDIgPyBpbmZvIDogdW5kZWZpbmVkLFxuICAgICAgd2FybjogbHYgPj0gMSA/IHdhcm4gOiB1bmRlZmluZWQsXG4gICAgICBlcnJvcjogbHYgPj0gMCA/IGVycm9yIDogdW5kZWZpbmVkLFxuICAgIH07XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9sZXZlbDogbnVtYmVyID0gcHVwTG9nTGV2ZWwpIHtcbiAgICB0aGlzLmltcGwgPSBjb25zb2xlO1xuICB9XG5cbiAgQHN0YWNrSG9va1xuICBkZWJ1ZyguLi5tZXNzYWdlczogdW5rbm93bltdKTogdm9pZCB7XG4gICAgdGhpcy5pbXBsPy5kZWJ1Zz8uKERFQlVHLCAuLi5tZXNzYWdlcyk7XG4gIH1cblxuICBAc3RhY2tIb29rXG4gIGluZm8oLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQge1xuICAgIHRoaXMuaW1wbD8uaW5mbz8uKElORk8sIC4uLm1lc3NhZ2VzKTtcbiAgfVxuXG4gIEBzdGFja0hvb2tcbiAgd2FybiguLi5tZXNzYWdlczogdW5rbm93bltdKTogdm9pZCB7XG4gICAgdGhpcy5pbXBsPy53YXJuPy4oV0FSTiwgLi4ubWVzc2FnZXMpO1xuICB9XG5cbiAgQHN0YWNrSG9va1xuICBlcnJvciguLi5tZXNzYWdlczogdW5rbm93bltdKTogdm9pZCB7XG4gICAgdGhpcy5pbXBsPy5lcnJvcj8uKEVSUk9SLCAuLi5tZXNzYWdlcyk7XG4gIH1cblxuICBAc3RhY2tIb29rXG4gIGZhdGFsKC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkIHtcbiAgICB0aGlzLmltcGw/LmVycm9yPy4oRkFUQUwsIC4uLm1lc3NhZ2VzKTtcbiAgICBwcm9jZXNzLmV4aXQoMSk7XG4gIH1cblxuICBwcml2YXRlIGRpc3BhdGNoKG1lc3NhZ2U6IHN0cmluZykge1xuICAgIGNvbnN0IG1zZyA9IG1lc3NhZ2UudHJpbUVuZCgpO1xuICAgIGlmIChtc2cuc3RhcnRzV2l0aChERUJVRykpIHtcbiAgICAgIHRoaXMuZGVidWcobXNnLnNsaWNlKERFQlVHLmxlbmd0aCArIDEpKTtcbiAgICB9IGVsc2UgaWYgKG1zZy5zdGFydHNXaXRoKElORk8pKSB7XG4gICAgICB0aGlzLmluZm8obXNnLnNsaWNlKElORk8ubGVuZ3RoICsgMSkpO1xuICAgIH0gZWxzZSBpZiAobXNnLnN0YXJ0c1dpdGgoV0FSTikpIHtcbiAgICAgIHRoaXMud2Fybihtc2cuc2xpY2UoV0FSTi5sZW5ndGggKyAxKSk7XG4gICAgfSBlbHNlIGlmIChtc2cuc3RhcnRzV2l0aChFUlJPUikpIHtcbiAgICAgIHRoaXMuZXJyb3IobXNnLnNsaWNlKEVSUk9SLmxlbmd0aCArIDEpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pbmZvKG1zZyk7XG4gICAgfVxuICB9XG5cbiAgYXR0YWNoKHByb2M6IENoaWxkUHJvY2VzcywgbmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMuZGVidWcoYCR7bmFtZX0uYXR0YWNoYCk7XG4gICAgICBsZXQgZmF0YWw6IHN0cmluZyA9IFwiXCI7XG4gICAgICBjb25zdCBkaXNwYXRjaCA9IChkYXRhOiBCdWZmZXIpID0+IHtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IGRhdGEudG9TdHJpbmcoKTtcbiAgICAgICAgaWYgKG1lc3NhZ2Uuc3RhcnRzV2l0aChGQVRBTCkpIHtcbiAgICAgICAgICBmYXRhbCArPSBtZXNzYWdlLnNsaWNlKEZBVEFMLmxlbmd0aCArIDEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZGlzcGF0Y2gobWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBwcm9jLnN0ZGVycj8ub24oXCJkYXRhXCIsIGRpc3BhdGNoKTtcbiAgICAgIHByb2Muc3Rkb3V0Py5vbihcImRhdGFcIiwgZGlzcGF0Y2gpO1xuICAgICAgcHJvY1xuICAgICAgICAub24oXCJlcnJvclwiLCAoZXJyKSA9PiB7XG4gICAgICAgICAgZmF0YWwgKz0gZXJyLm1lc3NhZ2U7XG4gICAgICAgICAgcHJvYy5raWxsKCk7XG4gICAgICAgIH0pXG4gICAgICAgIC5vbmNlKFwiY2xvc2VcIiwgKGNvZGUsIHNpZ25hbCkgPT4ge1xuICAgICAgICAgIGlmIChjb2RlIHx8IHNpZ25hbCB8fCBmYXRhbCkge1xuICAgICAgICAgICAgZmF0YWwgfHw9IGBjb21tYW5kIGZhaWxlZDogJHtwcm9jLnNwYXduYXJncy5qb2luKFwiIFwiKX1gO1xuICAgICAgICAgICAgdGhpcy5kZWJ1ZyhgJHtuYW1lfS5jbG9zZWAsIHsgY29kZSwgc2lnbmFsLCBmYXRhbCB9KTtcbiAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoZmF0YWwpKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5kZWJ1ZyhgJHtuYW1lfS5jbG9zZWApO1xuICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgLm9uKFwidW5oYW5kbGVkUmVqZWN0aW9uXCIsIChyZWFzb24pID0+IHtcbiAgICAgICAgICB0aGlzLmVycm9yKGAke25hbWV9LnVuaGFuZGxlZGAsIHJlYXNvbik7XG4gICAgICAgIH0pXG4gICAgICAgIC5vbihcInVuY2F1Z2h0RXhjZXB0aW9uTW9uaXRvclwiLCAoZXJyKSA9PiB7XG4gICAgICAgICAgdGhpcy5lcnJvcihgJHtuYW1lfS51bmhhbmRsZWRgLCBlcnIpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfVxufVxuXG5jb25zdCBsb2dnZXIgPSBuZXcgTG9nZ2VyKCk7XG5cbi8vIFJvdXRlIGZmbXBlZyBuYXRpdmUgbG9ncyB0aHJvdWdoIHB1cCdzIGxvZ2dlci5cbkxvZy5zZXRDYWxsYmFjaygobGV2ZWwsIG1lc3NhZ2UpID0+IHtcbiAgY29uc3QgbXNnID0gbWVzc2FnZS50cmltRW5kKCk7XG4gIGlmICghbXNnKSByZXR1cm47XG4gIGlmIChsZXZlbCA8PSBBVl9MT0dfRVJST1IpIGxvZ2dlci5lcnJvcihtc2cpO1xuICBlbHNlIGlmIChsZXZlbCA8PSBBVl9MT0dfV0FSTklORykgbG9nZ2VyLndhcm4obXNnKTtcbn0pO1xuXG5leHBvcnQgeyBsb2dnZXIgfTtcbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMjEuXG5cbmltcG9ydCB7IGFwcCwgY3Jhc2hSZXBvcnRlciB9IGZyb20gXCJlbGVjdHJvblwiO1xuaW1wb3J0IHsgbWtkaXJTeW5jIH0gZnJvbSBcImZzXCI7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuL2xvZ2dpbmdcIjtcblxuY29uc3QgVEFHID0gXCJbQ3Jhc2hdXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGFydEVsZWN0cm9uQ3Jhc2hSZXBvcnRlcigpIHtcbiAgY29uc3QgZHVtcERpciA9IGpvaW4oYXBwLmdldFBhdGgoXCJ1c2VyRGF0YVwiKSwgXCJjcmFzaGVzXCIpO1xuICBta2RpclN5bmMoZHVtcERpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gIGFwcC5zZXRQYXRoKFwiY3Jhc2hEdW1wc1wiLCBkdW1wRGlyKTtcbiAgY3Jhc2hSZXBvcnRlci5zdGFydCh7XG4gICAgcHJvZHVjdE5hbWU6IFwicHVwLXJlY29yZGVyXCIsXG4gICAgdXBsb2FkVG9TZXJ2ZXI6IGZhbHNlLFxuICAgIGNvbXByZXNzOiBmYWxzZSxcbiAgICBpZ25vcmVTeXN0ZW1DcmFzaEhhbmRsZXI6IHRydWUsXG4gIH0pO1xuICBsb2dnZXIuZGVidWcoVEFHLCBcInNldCBkdW1wIHRvXCIsIGR1bXBEaXIpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8yNC5cblxuZXhwb3J0IGZ1bmN0aW9uIG5vZXJyPEZuIGV4dGVuZHMgKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnksIEQ+KFxuICBmbjogRm4sXG4gIGRlZmF1bHRWYWx1ZTogRCxcbik6ICguLi5hcmdzOiBQYXJhbWV0ZXJzPEZuPikgPT4gUmV0dXJuVHlwZTxGbj4gfCBEIHtcbiAgcmV0dXJuICguLi5hcmdzKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJldCA9IGZuKC4uLmFyZ3MpO1xuICAgICAgaWYgKHJldCBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgcmV0dXJuIHJldC5jYXRjaCgoKSA9PiBkZWZhdWx0VmFsdWUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJldDtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gICAgfVxuICB9O1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMS8zMC5cblxuaW1wb3J0IHsgc3Bhd24sIHR5cGUgQ2hpbGRQcm9jZXNzLCB0eXBlIFNwYXduT3B0aW9ucyB9IGZyb20gXCJjaGlsZF9wcm9jZXNzXCI7XG5pbXBvcnQgdHJlZUtpbGwgZnJvbSBcInRyZWUta2lsbFwiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4vbG9nZ2luZ1wiO1xuXG5leHBvcnQgY29uc3QgUFVQX0FSR1NfS0VZID0gXCItLXB1cC1wcml2LWFyZ3NcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHBhcmdzKCkge1xuICBjb25zdCBhcmd2ID0gcHJvY2Vzcy5hcmd2O1xuICBsZXQgcHJpdiA9IGFyZ3YuZmluZCgoYXJnKSA9PiBhcmcuc3RhcnRzV2l0aChQVVBfQVJHU19LRVkpKTtcbiAgaWYgKCFwcml2KSB7XG4gICAgbG9nZ2VyLmRlYnVnKFwicHJvY2FyZ3ZcIiwgYXJndik7XG4gICAgcmV0dXJuIHByb2Nlc3MuYXJndjtcbiAgfVxuICBjb25zdCBhcmdzID0gW1wiZXhlY1wiLCAuLi5hcmd2LnNsaWNlKC0xKV07XG4gIHByaXYgPSBCdWZmZXIuZnJvbShwcml2LnNwbGl0KFwiPVwiKVsxXSEsIFwiYmFzZTY0XCIpLnRvU3RyaW5nKCk7XG4gIGFyZ3MucHVzaCguLi5KU09OLnBhcnNlKHByaXYpKTtcbiAgbG9nZ2VyLmRlYnVnKFwicHVwYXJnc1wiLCBhcmdzKTtcbiAgcmV0dXJuIGFyZ3M7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJvY2Vzc0hhbmRsZSB7XG4gIHByb2Nlc3M6IENoaWxkUHJvY2VzcztcbiAgd2FpdDogUHJvbWlzZTx2b2lkPjtcbiAgZ2V0IGtpbGxlZCgpOiBib29sZWFuO1xuICBraWxsKCk6IHZvaWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleGVjKGNtZDogc3RyaW5nLCBvcHRpb25zPzogU3Bhd25PcHRpb25zKTogUHJvY2Vzc0hhbmRsZSB7XG4gIGNvbnN0IHBhcnRzID0gY21kLnNwbGl0KFwiIFwiKS5maWx0ZXIoKHMpID0+IHMubGVuZ3RoKTtcbiAgY29uc3QgW2NvbW1hbmQsIC4uLmFyZ3NdID0gcGFydHM7XG4gIGlmICghY29tbWFuZCkgdGhyb3cgbmV3IEVycm9yKFwiZW1wdHkgY29tbWFuZFwiKTtcbiAgY29uc3QgcHJvYyA9IHNwYXduKGNvbW1hbmQsIGFyZ3MsIHtcbiAgICBzdGRpbzogXCJpbmhlcml0XCIsXG4gICAgLi4ub3B0aW9ucyxcbiAgfSk7XG4gIGxldCBraWxsZWQgPSBmYWxzZTtcbiAgcmV0dXJuIHtcbiAgICBwcm9jZXNzOiBwcm9jLFxuICAgIHdhaXQ6IGxvZ2dlci5hdHRhY2gocHJvYywgY29tbWFuZCksXG4gICAgZ2V0IGtpbGxlZCgpIHtcbiAgICAgIHJldHVybiBraWxsZWQ7XG4gICAgfSxcbiAgICBraWxsKCkge1xuICAgICAgaWYgKGtpbGxlZCkgcmV0dXJuO1xuICAgICAga2lsbGVkID0gdHJ1ZTtcbiAgICAgIGNvbnN0IHBpZCA9IHByb2MucGlkO1xuICAgICAgaWYgKHBpZCkgdHJlZUtpbGwocGlkLCBcIlNJR0tJTExcIik7XG4gICAgICBlbHNlIHByb2Mua2lsbChcIlNJR0tJTExcIik7XG4gICAgfSxcbiAgfTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDYuXG5cbmltcG9ydCB6IGZyb20gXCJ6b2RcIjtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfV0lEVEggPSAxOTIwO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfSEVJR0hUID0gMTA4MDtcbmV4cG9ydCBjb25zdCBERUZBVUxUX0ZQUyA9IDMwO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfRFVSQVRJT04gPSA1O1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfT1VUX0ZJTEUgPSBcIm91dC9odG1sLm1wNCxvdXQvaHRtbC53ZWJtXCI7XG5cbmV4cG9ydCBjb25zdCBSZW5kZXJTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIGR1cmF0aW9uOiB6Lm51bWJlcigpLmRlc2NyaWJlKFwiRHVyYXRpb24gaW4gc2Vjb25kc1wiKSxcbiAgd2lkdGg6IHoubnVtYmVyKCkuZGVzY3JpYmUoXCJWaWRlbyB3aWR0aFwiKSxcbiAgaGVpZ2h0OiB6Lm51bWJlcigpLmRlc2NyaWJlKFwiVmlkZW8gaGVpZ2h0XCIpLFxuICBmcHM6IHoubnVtYmVyKCkuZGVzY3JpYmUoXCJGcmFtZXMgcGVyIHNlY29uZFwiKSxcbiAgd2l0aEF1ZGlvOiB6LmJvb2xlYW4oKS5kZXNjcmliZShcIkNhcHR1cmUgYW5kIGVuY29kZSBhdWRpb1wiKSxcbiAgb3V0RmlsZTogei5zdHJpbmcoKS5kZXNjcmliZShcIkNvbW1hLXNlcGFyYXRlZCBvdXRwdXQgcGF0aHM7IGV4dGVuc2lvbiAoLm1wNC8ud2VibSkgc2VsZWN0cyBlbmNvZGVyXCIpLFxuICB1c2VJbm5lclByb3h5OiB6LmJvb2xlYW4oKS5kZXNjcmliZShcIlVzZSBiaWxpYmlsaSBpbm5lciBwcm94eSBmb3IgcmVzb3VyY2UgYWNjZXNzXCIpLFxuICBkZXRlcm1pbmlzdGljOiB6LmJvb2xlYW4oKS5kZXNjcmliZShcIlJlbmRlciBieSBmcmFtZSByYXRoZXIgdGhhbiByZWNvcmRpbmdcIiksXG4gIGRpc2FibGVHcHU6IHouYm9vbGVhbigpLmRlc2NyaWJlKFwiRGlzYWJsZSBHUFUgcmVuZGVyaW5nLCBtYXkgcmVkdWNlIHBlcmZvcm1hbmNlIGJ1dCBpbmNyZWFzZSBzdGFiaWxpdHlcIiksXG4gIGRpc2FibGVId0NvZGVjOiB6LmJvb2xlYW4oKS5kZXNjcmliZShcIkRpc2FibGUgaGFyZHdhcmUgdmlkZW8gZW5jb2RlciAoTlZFTkMvVmlkZW9Ub29sYm94KSwgdXNlIHNvZnR3YXJlIHgyNjVcIiksXG4gIHdpbmRvd1RvbGVyYW50OiB6LmJvb2xlYW4oKS5kZXNjcmliZShcIkZhbGwgYmFjayB0byBkb20tcmVhZHkgaWYgd2FybXVwIGxvYWQgdGltZXMgb3V0XCIpLFxufSk7XG5cbmV4cG9ydCB0eXBlIFJlbmRlck9wdGlvbnMgPSB6LmluZmVyPHR5cGVvZiBSZW5kZXJTY2hlbWE+O1xuXG5leHBvcnQgdHlwZSBDb25zb2xlQ2FsbGJhY2sgPSAobGV2ZWw6IHN0cmluZywgbWVzc2FnZTogc3RyaW5nKSA9PiB2b2lkO1xuXG5leHBvcnQgdHlwZSBQcm9ncmVzc0NhbGxiYWNrID0gKHByb2dyZXNzOiBudW1iZXIpID0+IHZvaWQ7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVBDUmVuZGVyT3B0aW9ucyBleHRlbmRzIFJlbmRlck9wdGlvbnMge1xuICBzb3VyY2U6IHN0cmluZztcbiAgc2lnbmFsOiBBYm9ydFNpZ25hbDtcbiAgb25Qcm9ncmVzczogUHJvZ3Jlc3NDYWxsYmFjaztcbiAgb25Db25zb2xlOiBDb25zb2xlQ2FsbGJhY2s7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVuZGVyUmVzdWx0IHtcbiAgb3B0aW9uczogUmVuZGVyT3B0aW9ucztcbiAgd3JpdHRlbjogbnVtYmVyO1xuICBqYW5rOiBudW1iZXI7XG4gIG91dEZpbGU6IHN0cmluZztcbn1cblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRSZW5kZXJPcHRpb25zOiBSZW5kZXJPcHRpb25zID0ge1xuICB3aWR0aDogREVGQVVMVF9XSURUSCxcbiAgaGVpZ2h0OiBERUZBVUxUX0hFSUdIVCxcbiAgZnBzOiBERUZBVUxUX0ZQUyxcbiAgZHVyYXRpb246IERFRkFVTFRfRFVSQVRJT04sXG4gIG91dEZpbGU6IERFRkFVTFRfT1VUX0ZJTEUsXG4gIHdpdGhBdWRpbzogZmFsc2UsXG4gIHVzZUlubmVyUHJveHk6IGZhbHNlLFxuICBkZXRlcm1pbmlzdGljOiBmYWxzZSxcbiAgZGlzYWJsZUdwdTogZmFsc2UsXG4gIGRpc2FibGVId0NvZGVjOiBmYWxzZSxcbiAgd2luZG93VG9sZXJhbnQ6IGZhbHNlLFxufTtcbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDkuXG5cbmltcG9ydCB7IHByb2dyYW0gfSBmcm9tIFwiY29tbWFuZGVyXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi9iYXNlL2xvZ2dpbmdcIjtcbmltcG9ydCB7IG5vZXJyIH0gZnJvbSBcIi4vYmFzZS9ub2VyclwiO1xuaW1wb3J0IHsgcGFyc2VOdW1iZXIgfSBmcm9tIFwiLi9iYXNlL3BhcnNlclwiO1xuaW1wb3J0IHsgcGFyZ3MgfSBmcm9tIFwiLi9iYXNlL3Byb2Nlc3NcIjtcbmltcG9ydCB7IGRlZmF1bHRSZW5kZXJPcHRpb25zLCBSZW5kZXJTY2hlbWEsIHR5cGUgUmVuZGVyT3B0aW9ucyB9IGZyb20gXCIuL3JlbmRlcmVyL3NjaGVtYVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIENMSU9wdGlvbnMge1xuICBuYW1lOiBzdHJpbmc7XG4gIHJ1bjogKHNvdXJjZTogc3RyaW5nLCBvcHRpb25zOiBSZW5kZXJPcHRpb25zKSA9PiBQcm9taXNlPHVua25vd24+O1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbWFrZUNMSShvcHRpb25zOiBDTElPcHRpb25zKSB7XG4gIGNvbnN0IHNoYXBlID0gUmVuZGVyU2NoZW1hLnNoYXBlO1xuICBjb25zdCBkID0gZGVmYXVsdFJlbmRlck9wdGlvbnM7XG4gIHByb2dyYW1cbiAgICAubmFtZShvcHRpb25zLm5hbWUpXG4gICAgLmFyZ3VtZW50KFwiPHNvdXJjZT5cIiwgXCJmaWxlOi8vLCBodHRwKHMpOi8vLCBvciBkYXRhOiBVUklcIilcbiAgICAub3B0aW9uKFwiLVcsIC0td2lkdGggPG51bWJlcj5cIiwgc2hhcGUud2lkdGguZGVzY3JpcHRpb24sIGAke2Qud2lkdGh9YClcbiAgICAub3B0aW9uKFwiLUgsIC0taGVpZ2h0IDxudW1iZXI+XCIsIHNoYXBlLmhlaWdodC5kZXNjcmlwdGlvbiwgYCR7ZC5oZWlnaHR9YClcbiAgICAub3B0aW9uKFwiLWYsIC0tZnBzIDxudW1iZXI+XCIsIHNoYXBlLmZwcy5kZXNjcmlwdGlvbiwgYCR7ZC5mcHN9YClcbiAgICAub3B0aW9uKFwiLXQsIC0tZHVyYXRpb24gPG51bWJlcj5cIiwgc2hhcGUuZHVyYXRpb24uZGVzY3JpcHRpb24sIGAke2QuZHVyYXRpb259YClcbiAgICAub3B0aW9uKFwiLW8sIC0tb3V0LWZpbGUgPHBhdGg+XCIsIHNoYXBlLm91dEZpbGUuZGVzY3JpcHRpb24sIGQub3V0RmlsZSlcbiAgICAub3B0aW9uKFwiLWEsIC0td2l0aC1hdWRpb1wiLCBzaGFwZS53aXRoQXVkaW8uZGVzY3JpcHRpb24sIGQud2l0aEF1ZGlvKVxuICAgIC5vcHRpb24oXCItZCwgLS1kZXRlcm1pbmlzdGljXCIsIHNoYXBlLmRldGVybWluaXN0aWMuZGVzY3JpcHRpb24sIGQuZGV0ZXJtaW5pc3RpYylcbiAgICAub3B0aW9uKFwiLS11c2UtaW5uZXItcHJveHlcIiwgc2hhcGUudXNlSW5uZXJQcm94eS5kZXNjcmlwdGlvbiwgZC51c2VJbm5lclByb3h5KVxuICAgIC5vcHRpb24oXCItLWRpc2FibGUtZ3B1XCIsIHNoYXBlLmRpc2FibGVHcHUuZGVzY3JpcHRpb24sIGQuZGlzYWJsZUdwdSlcbiAgICAub3B0aW9uKFwiLS1kaXNhYmxlLWh3LWNvZGVjXCIsIHNoYXBlLmRpc2FibGVId0NvZGVjLmRlc2NyaXB0aW9uLCBkLmRpc2FibGVId0NvZGVjKVxuICAgIC5vcHRpb24oXCItLXdpbmRvdy10b2xlcmFudFwiLCBzaGFwZS53aW5kb3dUb2xlcmFudC5kZXNjcmlwdGlvbiwgZC53aW5kb3dUb2xlcmFudClcbiAgICAuYWN0aW9uKGFzeW5jIChzb3VyY2U6IHN0cmluZywgb3B0cykgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgb3B0aW9ucy5ydW4oc291cmNlLCB7XG4gICAgICAgICAgd2lkdGg6IG5vZXJyKHBhcnNlTnVtYmVyLCBkLndpZHRoKShvcHRzLndpZHRoKSxcbiAgICAgICAgICBoZWlnaHQ6IG5vZXJyKHBhcnNlTnVtYmVyLCBkLmhlaWdodCkob3B0cy5oZWlnaHQpLFxuICAgICAgICAgIGZwczogbm9lcnIocGFyc2VOdW1iZXIsIGQuZnBzKShvcHRzLmZwcyksXG4gICAgICAgICAgZHVyYXRpb246IG5vZXJyKHBhcnNlTnVtYmVyLCBkLmR1cmF0aW9uKShvcHRzLmR1cmF0aW9uKSxcbiAgICAgICAgICBvdXRGaWxlOiBvcHRzLm91dEZpbGUgPz8gZC5vdXRGaWxlLFxuICAgICAgICAgIHdpdGhBdWRpbzogb3B0cy53aXRoQXVkaW8gPz8gZC53aXRoQXVkaW8sXG4gICAgICAgICAgdXNlSW5uZXJQcm94eTogb3B0cy51c2VJbm5lclByb3h5ID8/IGQudXNlSW5uZXJQcm94eSxcbiAgICAgICAgICBkZXRlcm1pbmlzdGljOiBvcHRzLmRldGVybWluaXN0aWMgPz8gZC5kZXRlcm1pbmlzdGljLFxuICAgICAgICAgIGRpc2FibGVHcHU6IG9wdHMuZGlzYWJsZUdwdSA/PyBkLmRpc2FibGVHcHUsXG4gICAgICAgICAgZGlzYWJsZUh3Q29kZWM6IG9wdHMuZGlzYWJsZUh3Q29kZWMgPz8gZC5kaXNhYmxlSHdDb2RlYyxcbiAgICAgICAgICB3aW5kb3dUb2xlcmFudDogb3B0cy53aW5kb3dUb2xlcmFudCA/PyBkLndpbmRvd1RvbGVyYW50LFxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgbG9nZ2VyLmZhdGFsKGUpO1xuICAgICAgfVxuICAgIH0pO1xuICBhd2FpdCBwcm9ncmFtLnBhcnNlQXN5bmMocGFyZ3MoKSk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzAxLlxuXG5pbXBvcnQgdHlwZSB7IENoaWxkUHJvY2VzcyB9IGZyb20gXCJjaGlsZF9wcm9jZXNzXCI7XG5pbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tIFwiZXZlbnRzXCI7XG5cbmV4cG9ydCBjb25zdCBlbnVtIElwY01zZ1R5cGUge1xuICAvLyBjaGlsZCDihpIgcGFyZW50XG4gIENPTlNPTEUgPSBcImNvbnNvbGVcIixcbiAgUFJPR1JFU1MgPSBcInByb2dyZXNzXCIsXG4gIERPTkUgPSBcImRvbmVcIixcbiAgRVJST1IgPSBcImVycm9yXCIsXG4gIC8vIHBhcmVudCDihpIgY2hpbGRcbiAgQ0FOQ0VMID0gXCJjYW5jZWxcIixcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb25zb2xlTXNnIHtcbiAgdHlwZTogSXBjTXNnVHlwZS5DT05TT0xFO1xuICBsZXZlbDogc3RyaW5nO1xuICBtZXNzYWdlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2FuY2VsTXNnIHtcbiAgdHlwZTogSXBjTXNnVHlwZS5DQU5DRUw7XG4gIHJlYXNvbj86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJcGNEb25lUGF5bG9hZCB7XG4gIHdyaXR0ZW46IG51bWJlcjtcbiAgamFuazogbnVtYmVyO1xuICBvdXRGaWxlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJvZ3Jlc3NNc2cge1xuICB0eXBlOiBJcGNNc2dUeXBlLlBST0dSRVNTO1xuICB2YWx1ZTogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERvbmVNc2cge1xuICB0eXBlOiBJcGNNc2dUeXBlLkRPTkU7XG4gIHBheWxvYWQ6IElwY0RvbmVQYXlsb2FkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEVycm9yTXNnIHtcbiAgdHlwZTogSXBjTXNnVHlwZS5FUlJPUjtcbiAgZXJyb3I6IHN0cmluZztcbn1cblxuZXhwb3J0IHR5cGUgSXBjTXNnID0gQ29uc29sZU1zZyB8IFByb2dyZXNzTXNnIHwgRG9uZU1zZyB8IEVycm9yTXNnIHwgQ2FuY2VsTXNnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElwY0V2ZW50cyB7XG4gIHByb2dyZXNzOiBbdmFsdWU6IG51bWJlcl07XG4gIGNvbnNvbGU6IFtsZXZlbDogc3RyaW5nLCBtc2c6IHN0cmluZ107XG4gIGRvbmU6IFtwYXlsb2FkOiBJcGNEb25lUGF5bG9hZF07XG4gIGVycm9yOiBbZXJyb3I6IEVycm9yXTtcbiAgY2xvc2U6IFtjb2RlOiBudW1iZXIgfCBudWxsXTtcbn1cblxuZXhwb3J0IGNsYXNzIElwY1dyaXRlciB7XG4gIHdyaXRlQ29uc29sZShsZXZlbDogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNlbmQoeyB0eXBlOiBJcGNNc2dUeXBlLkNPTlNPTEUsIGxldmVsLCBtZXNzYWdlIH0pO1xuICB9XG5cbiAgd3JpdGVQcm9ncmVzcyh2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5zZW5kKHsgdHlwZTogSXBjTXNnVHlwZS5QUk9HUkVTUywgdmFsdWUgfSk7XG4gIH1cblxuICB3cml0ZUVycm9yKGVycm9yOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5zZW5kKHsgdHlwZTogSXBjTXNnVHlwZS5FUlJPUiwgZXJyb3IgfSk7XG4gIH1cblxuICB3cml0ZURvbmUocGF5bG9hZDogSXBjRG9uZVBheWxvYWQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5zZW5kKHsgdHlwZTogSXBjTXNnVHlwZS5ET05FLCBwYXlsb2FkIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzZW5kKG1zZzogSXBjTXNnKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICBpZiAoIXByb2Nlc3Muc2VuZCkgcmV0dXJuIHJlc29sdmUoKTtcbiAgICAgIHByb2Nlc3Muc2VuZChtc2csICgpID0+IHJlc29sdmUoKSk7XG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIElwY1JlYWRlciBleHRlbmRzIEV2ZW50RW1pdHRlcjxJcGNFdmVudHM+IHtcbiAgY29uc3RydWN0b3IoY2hpbGQ6IENoaWxkUHJvY2Vzcykge1xuICAgIHN1cGVyKCk7XG4gICAgY2hpbGQub24oXCJtZXNzYWdlXCIsIChyYXcpID0+IHtcbiAgICAgIGNvbnN0IG1zZyA9IHJhdyBhcyBJcGNNc2c7XG4gICAgICBzd2l0Y2ggKG1zZy50eXBlKSB7XG4gICAgICAgIGNhc2UgSXBjTXNnVHlwZS5DT05TT0xFOiB7XG4gICAgICAgICAgdGhpcy5lbWl0KFwiY29uc29sZVwiLCBtc2cubGV2ZWwsIG1zZy5tZXNzYWdlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIElwY01zZ1R5cGUuUFJPR1JFU1M6IHtcbiAgICAgICAgICB0aGlzLmVtaXQoXCJwcm9ncmVzc1wiLCBtc2cudmFsdWUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgSXBjTXNnVHlwZS5ET05FOiB7XG4gICAgICAgICAgdGhpcy5lbWl0KFwiZG9uZVwiLCBtc2cucGF5bG9hZCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBJcGNNc2dUeXBlLkVSUk9SOiB7XG4gICAgICAgICAgdGhpcy5lbWl0KFwiZXJyb3JcIiwgbmV3IEVycm9yKG1zZy5lcnJvcikpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgY2hpbGQub25jZShcImV4aXRcIiwgKGMpID0+IHRoaXMuZW1pdChcImNsb3NlXCIsIGMpKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBMdSBBbyAobHVhb0BiaWxpYmlsaS5jb20pIG9uIDIwMjYvMDUvMTguXG5cbmNvbnN0IFBOR19UQUlMID0gQnVmZmVyLmZyb20oWzB4NDksIDB4NDUsIDB4NGUsIDB4NDQsIDB4YWUsIDB4NDIsIDB4NjAsIDB4ODJdKTtcblxuLy8gU3BsaXRzIGEgY29uY2F0ZW5hdGVkIFBORyBieXRlIHN0cmVhbSAoZmZtcGVnIGltYWdlMnBpcGUpIGludG8gaW5kaXZpZHVhbCBQTkcgYnVmZmVycy5cbmV4cG9ydCBjbGFzcyBQbmdTdHJlYW1QYXJzZXIge1xuICBwcml2YXRlIGJ1ZiA9IEJ1ZmZlci5hbGxvYygwKTtcblxuICBmZWVkKGNodW5rOiBCdWZmZXIpOiBCdWZmZXJbXSB7XG4gICAgdGhpcy5idWYgPSBCdWZmZXIuY29uY2F0KFt0aGlzLmJ1ZiwgY2h1bmtdKTtcbiAgICBjb25zdCBmcmFtZXM6IEJ1ZmZlcltdID0gW107XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGNvbnN0IGlkeCA9IHRoaXMuYnVmLmluZGV4T2YoUE5HX1RBSUwpO1xuICAgICAgaWYgKGlkeCA8IDApIGJyZWFrO1xuICAgICAgY29uc3QgZW5kID0gaWR4ICsgUE5HX1RBSUwubGVuZ3RoO1xuICAgICAgZnJhbWVzLnB1c2goQnVmZmVyLmZyb20odGhpcy5idWYuc3ViYXJyYXkoMCwgZW5kKSkpO1xuICAgICAgdGhpcy5idWYgPSB0aGlzLmJ1Zi5zdWJhcnJheShlbmQpO1xuICAgIH1cbiAgICByZXR1cm4gZnJhbWVzO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEx1IEFvIChsdWFvQGJpbGliaWxpLmNvbSkgb24gMjAyNi8wNS8xOC5cblxuaW1wb3J0IHsgc3Bhd24sIHR5cGUgQ2hpbGRQcm9jZXNzIH0gZnJvbSBcImNoaWxkX3Byb2Nlc3NcIjtcbmltcG9ydCB7IGZmbXBlZ1BhdGggfSBmcm9tIFwibm9kZS1hdi9mZm1wZWdcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuLi8uLi9iYXNlL2xvZ2dpbmdcIjtcbmltcG9ydCB0eXBlIHsgVmlkZW9NZXRhIH0gZnJvbSBcIi4vZnJhbWVfc2VydmVyXCI7XG5pbXBvcnQgeyBQbmdTdHJlYW1QYXJzZXIgfSBmcm9tIFwiLi9wbmdfc3RyZWFtXCI7XG5cbmNvbnN0IFRBRyA9IFwiW0RlY29kZVNlc3Npb25dXCI7XG5jb25zdCBGRk1QRUcgPSBmZm1wZWdQYXRoKCk7XG4vLyBDYWNoZWQgZnJhbWVzIGFyb3VuZCB0aGUgY29uc3VtZXI7IGZvcndhcmQgcGxheSArIHNob3J0IGJhY2t3YXJkIHNjcnViIGJvdGggaGl0LlxuY29uc3QgUklOR19NQVggPSAyNDA7XG5jb25zdCBSSU5HX0VWSUNUX0xPT0tCQUNLID0gOTA7XG4vLyBHYXAgbGFyZ2VyIHRoYW4gdGhpcyByZS1zZWVrcyBpbnN0ZWFkIG9mIGRlY29kaW5nIHRocm91Z2guXG5jb25zdCBGT1JXQVJEX1dBSVRfTUFYID0gOTA7XG5jb25zdCBGUkFNRV9XQUlUX1RJTUVPVVRfTVMgPSA1XzAwMDtcblxuaW50ZXJmYWNlIFdhaXRlciB7XG4gIHJlc29sdmU6IChiOiBCdWZmZXIpID0+IHZvaWQ7XG4gIHJlamVjdDogKGU6IEVycm9yKSA9PiB2b2lkO1xuICB0aW1lcjogTm9kZUpTLlRpbWVvdXQ7XG59XG5cbi8vIE9uZSB2aWRlbydzIGRlY29kZSBwaXBlbGluZTogYW4gZmZtcGVnIGNoaWxkLCBhbiBhYnNvbHV0ZS1pbmRleGVkIGZyYW1lIHJpbmcsIGFuZCByZS1zZWVrIGNvbnRyb2wuXG5leHBvcnQgY2xhc3MgRGVjb2RlU2Vzc2lvbiB7XG4gIHByaXZhdGUgZmZtcGVnOiBDaGlsZFByb2Nlc3MgfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgcGFyc2VyID0gbmV3IFBuZ1N0cmVhbVBhcnNlcigpO1xuICBwcml2YXRlIHJpbmcgPSBuZXcgTWFwPG51bWJlciwgQnVmZmVyPigpO1xuICBwcml2YXRlIHJ1bkJhc2VJZHggPSAwO1xuICBwcml2YXRlIG5leHRGcmFtZUlkeCA9IDA7XG4gIHByaXZhdGUgd2FpdGVycyA9IG5ldyBNYXA8bnVtYmVyLCBXYWl0ZXI+KCk7XG4gIHByaXZhdGUgZXhoYXVzdGVkID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcmVhZG9ubHkgbWV0YTogVmlkZW9NZXRhLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgc3JjOiBzdHJpbmcsXG4gICAgcHJpdmF0ZSByZWFkb25seSBmcmFtZUNvdW50OiBudW1iZXIsXG4gICkge1xuICAgIHRoaXMuc3Bhd24oMCk7XG4gIH1cblxuICAvLyBBYnNvbHV0ZS1pbmRleGVkOyBlbXB0eSBidWZmZXIgPSBwYXN0IGVuZC4gQmFja3dhcmQvZmFyIGp1bXBzIHJlLXNlZWsuXG4gIGFzeW5jIGdldEZyYW1lKGlkeFJhdzogbnVtYmVyKTogUHJvbWlzZTxCdWZmZXI+IHtcbiAgICBjb25zdCBpZHggPSBNYXRoLm1heCgwLCBpZHhSYXcpO1xuICAgIGlmIChpZHggPj0gdGhpcy5mcmFtZUNvdW50KSByZXR1cm4gQnVmZmVyLmFsbG9jKDApO1xuICAgIGNvbnN0IGhpdCA9IHRoaXMucmluZy5nZXQoaWR4KTtcbiAgICBpZiAoaGl0KSB7XG4gICAgICB0aGlzLm9uU2VydmUoaWR4KTtcbiAgICAgIHJldHVybiBoaXQ7XG4gICAgfVxuICAgIGlmICh0aGlzLm5lZWRzUmVzZWVrKGlkeCkpIHRoaXMucmVzZWVrKGlkeCk7XG4gICAgZWxzZSBpZiAodGhpcy5leGhhdXN0ZWQgJiYgaWR4ID49IHRoaXMubmV4dEZyYW1lSWR4KSByZXR1cm4gQnVmZmVyLmFsbG9jKDApO1xuICAgIHJldHVybiB0aGlzLndhaXRGcmFtZShpZHgpO1xuICB9XG5cbiAgY2xvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5raWxsRmZtcGVnKCk7XG4gICAgdGhpcy5yZWplY3RBbGxXYWl0ZXJzKG5ldyBFcnJvcihgZnJhbWUtc2VydmVyOiBzZXNzaW9uICR7dGhpcy5tZXRhLmlkfSBjbG9zZWRgKSk7XG4gICAgdGhpcy5yaW5nLmNsZWFyKCk7XG4gIH1cblxuICBwcml2YXRlIG5lZWRzUmVzZWVrKGlkeDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgaWYgKGlkeCA8IHRoaXMucnVuQmFzZUlkeCkgcmV0dXJuIHRydWU7IC8vIGJlZm9yZSB0aGlzIHJ1bidzIGZpcnN0IGZyYW1lXG4gICAgaWYgKGlkeCA8IHRoaXMubmV4dEZyYW1lSWR4KSByZXR1cm4gdHJ1ZTsgLy8gcHJvZHVjZWQgYWxyZWFkeSBidXQgZXZpY3RlZCBmcm9tIHJpbmdcbiAgICByZXR1cm4gaWR4ID4gdGhpcy5uZXh0RnJhbWVJZHggKyBGT1JXQVJEX1dBSVRfTUFYOyAvLyB0b28gZmFyIGFoZWFkIHRvIHdhaXQgb3V0XG4gIH1cblxuICBwcml2YXRlIHJlc2VlayhpZHg6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMua2lsbEZmbXBlZygpO1xuICAgIHRoaXMucmVqZWN0QWxsV2FpdGVycyhuZXcgRXJyb3IoYGZyYW1lLXNlcnZlcjogc3VwZXJzZWRlZCBieSByZS1zZWVrIHRvIGZyYW1lICR7aWR4fWApKTtcbiAgICB0aGlzLnNwYXduKGlkeCk7XG4gIH1cblxuICBwcml2YXRlIHdhaXRGcmFtZShpZHg6IG51bWJlcik6IFByb21pc2U8QnVmZmVyPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPEJ1ZmZlcj4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy53YWl0ZXJzLmRlbGV0ZShpZHgpO1xuICAgICAgICByZWplY3QobmV3IEVycm9yKGBmcmFtZS1zZXJ2ZXI6IGZyYW1lICR7aWR4fSBub3QgZGVjb2RlZCB3aXRoaW4gJHtGUkFNRV9XQUlUX1RJTUVPVVRfTVN9bXNgKSk7XG4gICAgICB9LCBGUkFNRV9XQUlUX1RJTUVPVVRfTVMpO1xuICAgICAgdGhpcy53YWl0ZXJzLnNldChpZHgsIHsgcmVzb2x2ZSwgcmVqZWN0LCB0aW1lciB9KTtcbiAgICAgIHRoaXMucmVmaWxsSWZOZWVkZWQoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgb25TZXJ2ZShpZHg6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IGxvID0gaWR4IC0gUklOR19FVklDVF9MT09LQkFDSztcbiAgICBjb25zdCBoaSA9IGlkeCArIFJJTkdfTUFYO1xuICAgIGZvciAoY29uc3QgayBvZiB0aGlzLnJpbmcua2V5cygpKSB7XG4gICAgICBpZiAoayA8IGxvIHx8IGsgPiBoaSkgdGhpcy5yaW5nLmRlbGV0ZShrKTtcbiAgICB9XG4gICAgdGhpcy5yZWZpbGxJZk5lZWRlZCgpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWZpbGxJZk5lZWRlZCgpOiB2b2lkIHtcbiAgICBjb25zdCBvdXQgPSB0aGlzLmZmbXBlZz8uc3Rkb3V0O1xuICAgIGlmIChvdXQgJiYgdGhpcy5yaW5nLnNpemUgPCBSSU5HX01BWCAmJiBvdXQuaXNQYXVzZWQoKSkgb3V0LnJlc3VtZSgpO1xuICB9XG5cbiAgLy8gYC1zc2AgYmVmb3JlIGAtaWAgaXMgZnJhbWUtYWNjdXJhdGUgaW4gbW9kZXJuIGZmbXBlZy5cbiAgcHJpdmF0ZSBzcGF3bihmcm9tSWR4OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLnBhcnNlciA9IG5ldyBQbmdTdHJlYW1QYXJzZXIoKTtcbiAgICB0aGlzLnJ1bkJhc2VJZHggPSBmcm9tSWR4O1xuICAgIHRoaXMubmV4dEZyYW1lSWR4ID0gZnJvbUlkeDtcbiAgICB0aGlzLmV4aGF1c3RlZCA9IGZhbHNlO1xuICAgIGNvbnN0IHNzU2VjID0gZnJvbUlkeCAvIHRoaXMubWV0YS5mcHM7XG4gICAgY29uc3QgYXJncyA9IFtcbiAgICAgIFwiLWhpZGVfYmFubmVyXCIsXG4gICAgICBcIi1sb2dsZXZlbFwiLFxuICAgICAgXCJlcnJvclwiLFxuICAgICAgLi4uKHNzU2VjID4gMCA/IFtcIi1zc1wiLCBTdHJpbmcoc3NTZWMpXSA6IFtdKSxcbiAgICAgIFwiLWlcIixcbiAgICAgIHRoaXMuc3JjLFxuICAgICAgXCItdmZcIixcbiAgICAgIGBmcHM9JHt0aGlzLm1ldGEuZnBzfWAsXG4gICAgICBcIi1jb2xvcl9yYW5nZVwiLFxuICAgICAgXCJwY1wiLFxuICAgICAgXCItY29sb3JzcGFjZVwiLFxuICAgICAgXCJidDcwOVwiLFxuICAgICAgXCItY29sb3JfcHJpbWFyaWVzXCIsXG4gICAgICBcImJ0NzA5XCIsXG4gICAgICBcIi1jb2xvcl90cmNcIixcbiAgICAgIFwiYnQ3MDlcIixcbiAgICAgIFwiLWZcIixcbiAgICAgIFwiaW1hZ2UycGlwZVwiLFxuICAgICAgXCItYzp2XCIsXG4gICAgICBcInBuZ1wiLFxuICAgICAgXCItcGl4X2ZtdFwiLFxuICAgICAgXCJyZ2JhXCIsXG4gICAgICBcIi1cIixcbiAgICBdO1xuICAgIGxvZ2dlci5kZWJ1ZyhUQUcsIGBzcGF3biBpZD0ke3RoaXMubWV0YS5pZC5zbGljZSgwLCA4KX0gZnJvbT0ke2Zyb21JZHh9ICR7dGhpcy5tZXRhLndpZHRofXgke3RoaXMubWV0YS5oZWlnaHR9YCk7XG4gICAgY29uc3QgcHJvYyA9IHNwYXduKEZGTVBFRywgYXJncywgeyBzdGRpbzogW1wiaWdub3JlXCIsIFwicGlwZVwiLCBcInBpcGVcIl0gfSk7XG4gICAgdGhpcy5mZm1wZWcgPSBwcm9jO1xuICAgIHByb2Muc3Rkb3V0IS5vbihcImRhdGFcIiwgKGNodW5rOiBCdWZmZXIpID0+IHRoaXMub25TdGRvdXQoY2h1bmspKTtcbiAgICBwcm9jLnN0ZGVyciEub24oXCJkYXRhXCIsIChjaHVuazogQnVmZmVyKSA9PlxuICAgICAgbG9nZ2VyLndhcm4oVEFHLCBgWyR7dGhpcy5tZXRhLmlkfV0gZmZtcGVnIHN0ZGVycjpgLCBjaHVuay50b1N0cmluZygpLnRyaW0oKSksXG4gICAgKTtcbiAgICBwcm9jLm9uKFwiZXJyb3JcIiwgKGUpID0+IGxvZ2dlci53YXJuKFRBRywgYFske3RoaXMubWV0YS5pZH1dIGZmbXBlZyBzcGF3biBlcnJvcjpgLCBlLm1lc3NhZ2UpKTtcbiAgICBwcm9jLm9uKFwiZXhpdFwiLCAoY29kZSkgPT4ge1xuICAgICAgaWYgKHByb2MgIT09IHRoaXMuZmZtcGVnKSByZXR1cm47IC8vIHN1cGVyc2VkZWQgYnkgYSByZS1zZWVrXG4gICAgICBsb2dnZXIuZGVidWcoVEFHLCBgZXhpdCBpZD0ke3RoaXMubWV0YS5pZC5zbGljZSgwLCA4KX0gY29kZT0ke2NvZGV9IGhlYWQ9JHt0aGlzLm5leHRGcmFtZUlkeH1gKTtcbiAgICAgIGlmIChjb2RlID09PSAwIHx8IGNvZGUgPT09IG51bGwpIHtcbiAgICAgICAgdGhpcy5leGhhdXN0ZWQgPSB0cnVlO1xuICAgICAgICBmb3IgKGNvbnN0IFtpZHgsIHddIG9mIHRoaXMud2FpdGVycykge1xuICAgICAgICAgIGlmIChpZHggPj0gdGhpcy5uZXh0RnJhbWVJZHgpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh3LnRpbWVyKTtcbiAgICAgICAgICAgIHRoaXMud2FpdGVycy5kZWxldGUoaWR4KTtcbiAgICAgICAgICAgIHcucmVzb2x2ZShCdWZmZXIuYWxsb2MoMCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChjb2RlICE9PSAyNTUpIHtcbiAgICAgICAgdGhpcy5yZWplY3RBbGxXYWl0ZXJzKG5ldyBFcnJvcihgZmZtcGVnIGV4aXRlZCAke2NvZGV9IGZvciAke3RoaXMuc3JjfWApKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgb25TdGRvdXQoY2h1bms6IEJ1ZmZlcik6IHZvaWQge1xuICAgIGZvciAoY29uc3QgZiBvZiB0aGlzLnBhcnNlci5mZWVkKGNodW5rKSkge1xuICAgICAgY29uc3QgaWR4ID0gdGhpcy5uZXh0RnJhbWVJZHgrKztcbiAgICAgIHRoaXMucmluZy5zZXQoaWR4LCBmKTtcbiAgICAgIGNvbnN0IHdhaXRlciA9IHRoaXMud2FpdGVycy5nZXQoaWR4KTtcbiAgICAgIGlmICh3YWl0ZXIpIHtcbiAgICAgICAgdGhpcy53YWl0ZXJzLmRlbGV0ZShpZHgpO1xuICAgICAgICBjbGVhclRpbWVvdXQod2FpdGVyLnRpbWVyKTtcbiAgICAgICAgd2FpdGVyLnJlc29sdmUoZik7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLnJpbmcuc2l6ZSA+PSBSSU5HX01BWCkgdGhpcy5mZm1wZWc/LnN0ZG91dD8ucGF1c2UoKTtcbiAgfVxuXG4gIHByaXZhdGUga2lsbEZmbXBlZygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZmZtcGVnKSByZXR1cm47XG4gICAgdGhpcy5mZm1wZWcua2lsbChcIlNJR0tJTExcIik7XG4gICAgdGhpcy5mZm1wZWcgPSB1bmRlZmluZWQ7XG4gIH1cblxuICBwcml2YXRlIHJlamVjdEFsbFdhaXRlcnMoZXJyOiBFcnJvcik6IHZvaWQge1xuICAgIGZvciAoY29uc3QgdyBvZiB0aGlzLndhaXRlcnMudmFsdWVzKCkpIHtcbiAgICAgIGNsZWFyVGltZW91dCh3LnRpbWVyKTtcbiAgICAgIHcucmVqZWN0KGVycik7XG4gICAgfVxuICAgIHRoaXMud2FpdGVycy5jbGVhcigpO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEx1IEFvIChsdWFvQGJpbGliaWxpLmNvbSkgb24gMjAyNi8wNS8xOC5cblxuaW1wb3J0IHsgc3Bhd24gfSBmcm9tIFwiY2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0IHsgZmZtcGVnUGF0aCB9IGZyb20gXCJub2RlLWF2L2ZmbXBlZ1wiO1xuXG5jb25zdCBGRk1QRUcgPSBmZm1wZWdQYXRoKCk7XG5jb25zdCBQUk9CRV9USU1FT1VUX01TID0gNV8wMDA7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJvYmVSZXN1bHQge1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgZHVyYXRpb246IG51bWJlcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2JlKHNyYzogc3RyaW5nKTogUHJvbWlzZTxQcm9iZVJlc3VsdD4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHByb2MgPSBzcGF3bihGRk1QRUcsIFtcIi1oaWRlX2Jhbm5lclwiLCBcIi1pXCIsIHNyYywgXCItdmZyYW1lc1wiLCBcIjBcIiwgXCItZlwiLCBcImZmbWV0YWRhdGFcIiwgXCItXCJdLCB7XG4gICAgICBzdGRpbzogW1wiaWdub3JlXCIsIFwicGlwZVwiLCBcInBpcGVcIl0sXG4gICAgfSk7XG4gICAgbGV0IHN0ZGVyciA9IFwiXCI7XG4gICAgY29uc3QgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHByb2Mua2lsbChcIlNJR0tJTExcIik7XG4gICAgICByZWplY3QobmV3IEVycm9yKGBwcm9iZSB0aW1lZCBvdXQgYWZ0ZXIgJHtQUk9CRV9USU1FT1VUX01TfW1zOiAke3NyY31gKSk7XG4gICAgfSwgUFJPQkVfVElNRU9VVF9NUyk7XG4gICAgcHJvYy5zdGRlcnIhLm9uKFwiZGF0YVwiLCAoYjogQnVmZmVyKSA9PiAoc3RkZXJyICs9IGIudG9TdHJpbmcoKSkpO1xuICAgIHByb2Mub24oXCJlcnJvclwiLCAoZSkgPT4ge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICAgIHJlamVjdChlKTtcbiAgICB9KTtcbiAgICBwcm9jLm9uKFwiZXhpdFwiLCAoKSA9PiB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgICAgY29uc3QgZGltID0gc3RkZXJyLm1hdGNoKC8sIChcXGQrKXgoXFxkKylbLCBdLyk7XG4gICAgICBjb25zdCBkdXIgPSBzdGRlcnIubWF0Y2goL0R1cmF0aW9uOiAoXFxkKyk6KFxcZCspOihcXGQrXFwuXFxkKykvKTtcbiAgICAgIGlmICghZGltIHx8ICFkdXIpIHJldHVybiByZWplY3QobmV3IEVycm9yKGBwcm9iZSBmYWlsZWQ6ICR7c3JjfVxcbiR7c3RkZXJyfWApKTtcbiAgICAgIHJlc29sdmUoe1xuICAgICAgICB3aWR0aDogcGFyc2VJbnQoZGltWzFdISwgMTApLFxuICAgICAgICBoZWlnaHQ6IHBhcnNlSW50KGRpbVsyXSEsIDEwKSxcbiAgICAgICAgZHVyYXRpb246IHBhcnNlSW50KGR1clsxXSEsIDEwKSAqIDM2MDAgKyBwYXJzZUludChkdXJbMl0hLCAxMCkgKiA2MCArIHBhcnNlRmxvYXQoZHVyWzNdISksXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEx1IEFvIChsdWFvQGJpbGliaWxpLmNvbSkgb24gMjAyNi8wNS8xOC5cblxuaW1wb3J0IHsgcmFuZG9tVVVJRCB9IGZyb20gXCJjcnlwdG9cIjtcbmltcG9ydCB7IERlY29kZVNlc3Npb24gfSBmcm9tIFwiLi9kZWNvZGVfc2Vzc2lvblwiO1xuaW1wb3J0IHsgcHJvYmUgfSBmcm9tIFwiLi9mZnByb2JlXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmlkZW9NZXRhIHtcbiAgaWQ6IHN0cmluZztcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIGZwczogbnVtYmVyO1xuICBkdXJhdGlvbjogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9wZW5PcHRpb25zIHtcbiAgc3JjOiBzdHJpbmc7XG4gIGZwczogbnVtYmVyO1xufVxuXG4vLyBSZWdpc3RyeSBvZiBkZWNvZGUgc2Vzc2lvbnMga2V5ZWQgYnkgb3BhcXVlIGlkOyB0aGUgcHVwLWZyYW1lIHByb3RvY29sIGxheWVyIGlzIHRoZSBvbmx5IGNhbGxlci5cbmV4cG9ydCBjbGFzcyBGcmFtZVNlcnZlciB7XG4gIHByaXZhdGUgc2Vzc2lvbnMgPSBuZXcgTWFwPHN0cmluZywgRGVjb2RlU2Vzc2lvbj4oKTtcblxuICBhc3luYyBvcGVuKG9wdHM6IE9wZW5PcHRpb25zKTogUHJvbWlzZTxWaWRlb01ldGE+IHtcbiAgICBjb25zdCBpbmZvID0gYXdhaXQgcHJvYmUob3B0cy5zcmMpO1xuICAgIGNvbnN0IGlkID0gcmFuZG9tVVVJRCgpO1xuICAgIGNvbnN0IG1ldGE6IFZpZGVvTWV0YSA9IHsgaWQsIHdpZHRoOiBpbmZvLndpZHRoLCBoZWlnaHQ6IGluZm8uaGVpZ2h0LCBmcHM6IG9wdHMuZnBzLCBkdXJhdGlvbjogaW5mby5kdXJhdGlvbiB9O1xuICAgIGNvbnN0IGZyYW1lQ291bnQgPSBNYXRoLm1heCgxLCBNYXRoLnJvdW5kKGluZm8uZHVyYXRpb24gKiBvcHRzLmZwcykpO1xuICAgIHRoaXMuc2Vzc2lvbnMuc2V0KGlkLCBuZXcgRGVjb2RlU2Vzc2lvbihtZXRhLCBvcHRzLnNyYywgZnJhbWVDb3VudCkpO1xuICAgIHJldHVybiBtZXRhO1xuICB9XG5cbiAgZ2V0RnJhbWUoaWQ6IHN0cmluZywgaWR4OiBudW1iZXIpOiBQcm9taXNlPEJ1ZmZlcj4ge1xuICAgIHJldHVybiB0aGlzLm11c3QoaWQpLmdldEZyYW1lKGlkeCk7XG4gIH1cblxuICBjbG9zZShpZDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgcyA9IHRoaXMuc2Vzc2lvbnMuZ2V0KGlkKTtcbiAgICBpZiAoIXMpIHJldHVybjtcbiAgICBzLmNsb3NlKCk7XG4gICAgdGhpcy5zZXNzaW9ucy5kZWxldGUoaWQpO1xuICB9XG5cbiAgLy8gUmVuZGVyLWVuZCAvIGFib3J0IHNhZmV0eSBuZXQ6IHRoZSBzaGltIG9ubHkgY2xvc2VzIHNlc3Npb25zIG9uIERPTSByZW1vdmFsLlxuICBjbG9zZUFsbCgpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGlkIG9mIFsuLi50aGlzLnNlc3Npb25zLmtleXMoKV0pIHRoaXMuY2xvc2UoaWQpO1xuICB9XG5cbiAgcHJpdmF0ZSBtdXN0KGlkOiBzdHJpbmcpOiBEZWNvZGVTZXNzaW9uIHtcbiAgICBjb25zdCBzID0gdGhpcy5zZXNzaW9ucy5nZXQoaWQpO1xuICAgIGlmICghcykgdGhyb3cgbmV3IEVycm9yKGBmcmFtZS1zZXJ2ZXI6IHVua25vd24gc2Vzc2lvbiBpZD0ke2lkfWApO1xuICAgIHJldHVybiBzO1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCBmcmFtZVNlcnZlciA9IG5ldyBGcmFtZVNlcnZlcigpO1xuIiwiLy8gQ3JlYXRlZCBieSBMdSBBbyAobHVhb0BiaWxpYmlsaS5jb20pIG9uIDIwMjYvMDUvMTguXG5cbmltcG9ydCB7IHByb3RvY29sIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi4vLi4vYmFzZS9sb2dnaW5nXCI7XG5pbXBvcnQgeyBmcmFtZVNlcnZlciwgdHlwZSBWaWRlb01ldGEgfSBmcm9tIFwiLi9mcmFtZV9zZXJ2ZXJcIjtcblxuY29uc3QgVEFHID0gXCJbRnJhbWVQcm90b2NvbF1cIjtcblxuLy8gU2NoZW1lIGlzIHJlZ2lzdGVyZWQgYWxvbmdzaWRlIGBwdXBgIGluIHJlbmRlcmVyL3Byb3RvY29sLnRzIChzaW5nbGUgY2FsbCBvbmx5KS5cbmNvbnN0IFNDSEVNRSA9IFwicHVwLWZyYW1lXCI7XG5cbmNvbnN0IENPUlNfSEVBREVSUzogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgXCJhY2Nlc3MtY29udHJvbC1hbGxvdy1vcmlnaW5cIjogXCIqXCIsXG4gIFwiYWNjZXNzLWNvbnRyb2wtYWxsb3ctbWV0aG9kc1wiOiBcIkdFVCwgT1BUSU9OU1wiLFxuICBcImFjY2Vzcy1jb250cm9sLWFsbG93LWhlYWRlcnNcIjogXCIqXCIsXG59O1xuXG4vLyBNdXN0IGJlIGNhbGxlZCBhZnRlciBhcHAgaXMgcmVhZHkuXG5leHBvcnQgZnVuY3Rpb24gc2V0dXBGcmFtZVByb3RvY29sKCk6IHZvaWQge1xuICBwcm90b2NvbC5oYW5kbGUoU0NIRU1FLCBhc3luYyAocmVxKSA9PiB7XG4gICAgaWYgKHJlcS5tZXRob2QgPT09IFwiT1BUSU9OU1wiKSByZXR1cm4gbmV3IFJlc3BvbnNlKG51bGwsIHsgc3RhdHVzOiAyMDQsIGhlYWRlcnM6IENPUlNfSEVBREVSUyB9KTtcbiAgICBjb25zdCB1cmwgPSBuZXcgVVJMKHJlcS51cmwpO1xuICAgIGxvZ2dlci5kZWJ1ZyhUQUcsIGAke3JlcS5tZXRob2R9ICR7dXJsLmhvc3RuYW1lfSR7dXJsLnNlYXJjaH1gKTtcbiAgICB0cnkge1xuICAgICAgc3dpdGNoICh1cmwuaG9zdG5hbWUpIHtcbiAgICAgICAgY2FzZSBcIm9wZW5cIjpcbiAgICAgICAgICByZXR1cm4ganNvbk9rKGF3YWl0IGZyYW1lU2VydmVyLm9wZW4oeyBzcmM6IHVybC5zZWFyY2hQYXJhbXMuZ2V0KFwic3JjXCIpID8/IFwiXCIsIGZwczogaW50KHVybCwgXCJmcHNcIiwgMzApIH0pKTtcbiAgICAgICAgY2FzZSBcImZyYW1lXCI6XG4gICAgICAgICAgcmV0dXJuIHBuZ09rKGF3YWl0IGZyYW1lU2VydmVyLmdldEZyYW1lKHVybC5zZWFyY2hQYXJhbXMuZ2V0KFwiaWRcIikgPz8gXCJcIiwgaW50KHVybCwgXCJpZHhcIiwgMCkpKTtcbiAgICAgICAgY2FzZSBcImNsb3NlXCI6XG4gICAgICAgICAgZnJhbWVTZXJ2ZXIuY2xvc2UodXJsLnNlYXJjaFBhcmFtcy5nZXQoXCJpZFwiKSA/PyBcIlwiKTtcbiAgICAgICAgICByZXR1cm4gbmV3IFJlc3BvbnNlKG51bGwsIHsgc3RhdHVzOiAyMDQsIGhlYWRlcnM6IENPUlNfSEVBREVSUyB9KTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gbmV3IFJlc3BvbnNlKGB1bmtub3duIGFjdGlvbjogJHt1cmwuaG9zdG5hbWV9YCwgeyBzdGF0dXM6IDQwNCwgaGVhZGVyczogQ09SU19IRUFERVJTIH0pO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnN0IG1zZyA9IGUgaW5zdGFuY2VvZiBFcnJvciA/IGUubWVzc2FnZSA6IFN0cmluZyhlKTtcbiAgICAgIHJldHVybiBuZXcgUmVzcG9uc2UobXNnLCB7IHN0YXR1czogNTAwLCBoZWFkZXJzOiBDT1JTX0hFQURFUlMgfSk7XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24ganNvbk9rKG1ldGE6IFZpZGVvTWV0YSk6IFJlc3BvbnNlIHtcbiAgcmV0dXJuIG5ldyBSZXNwb25zZShKU09OLnN0cmluZ2lmeShtZXRhKSwge1xuICAgIGhlYWRlcnM6IHsgLi4uQ09SU19IRUFERVJTLCBcImNvbnRlbnQtdHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIiB9LFxuICB9KTtcbn1cblxuZnVuY3Rpb24gcG5nT2soYnl0ZXM6IEJ1ZmZlcik6IFJlc3BvbnNlIHtcbiAgLy8gRW1wdHkgYnVmZmVyIGlzIHRoZSBmcmFtZV9zZXJ2ZXIgXCJ2aWRlbyBleGhhdXN0ZWRcIiBzaWduYWwg4oaSIDQxMCBHb25lIHRlbGxzIHRoZSBzaGltIHRvIGZpcmUgYGVuZGVkYC5cbiAgaWYgKGJ5dGVzLmJ5dGVMZW5ndGggPT09IDApIHJldHVybiBuZXcgUmVzcG9uc2UobnVsbCwgeyBzdGF0dXM6IDQxMCwgaGVhZGVyczogQ09SU19IRUFERVJTIH0pO1xuICAvLyBDb3B5IGludG8gYSBmcmVzaCBBcnJheUJ1ZmZlciBzbyBCbG9iIG93bnMgYSBjb250aWd1b3VzLCBub24tc2hhcmVkIHJlZ2lvbjsgdGhpcyBnaXZlc1xuICAvLyBDaHJvbWl1bSBhIGZpbml0ZS1sZW5ndGggYm9keSBpdCBjYW4gZHJhaW4gYW5kIHJlcG9ydCBhcyBjb21wbGV0ZWQgcHJvbXB0bHkuXG4gIGNvbnN0IGNvcHkgPSBuZXcgVWludDhBcnJheShieXRlcy5ieXRlTGVuZ3RoKTtcbiAgY29weS5zZXQoYnl0ZXMpO1xuICBjb25zdCBibG9iID0gbmV3IEJsb2IoW2NvcHkuYnVmZmVyIGFzIEFycmF5QnVmZmVyXSwgeyB0eXBlOiBcImltYWdlL3BuZ1wiIH0pO1xuICByZXR1cm4gbmV3IFJlc3BvbnNlKGJsb2IsIHtcbiAgICBoZWFkZXJzOiB7IC4uLkNPUlNfSEVBREVSUywgXCJjYWNoZS1jb250cm9sXCI6IFwibm8tc3RvcmVcIiB9LFxuICB9KTtcbn1cblxuZnVuY3Rpb24gaW50KHVybDogVVJMLCBrZXk6IHN0cmluZywgZmFsbGJhY2s6IG51bWJlcik6IG51bWJlciB7XG4gIGNvbnN0IHYgPSB1cmwuc2VhcmNoUGFyYW1zLmdldChrZXkpO1xuICBjb25zdCBuID0gdiA/IHBhcnNlSW50KHYsIDEwKSA6IE5hTjtcbiAgcmV0dXJuIE51bWJlci5pc0Zpbml0ZShuKSA/IG4gOiBmYWxsYmFjaztcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDkuXG5cbmV4cG9ydCBmdW5jdGlvbiBzbGVlcChtczogbnVtYmVyKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCBtcykpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gd2l0aFRpbWVvdXQ8VD4ocDogUHJvbWlzZTxUPiwgbXM6IG51bWJlciwgbGFiZWw6IHN0cmluZyk6IFByb21pc2U8VD4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiByZWplY3QobmV3IEVycm9yKGAke2xhYmVsfSB0aW1lZCBvdXQgYWZ0ZXIgJHttc31tc2ApKSwgbXMpO1xuICAgIHAudGhlbihyZXNvbHZlLCByZWplY3QpLmZpbmFsbHkoKCkgPT4gY2xlYXJUaW1lb3V0KHRpbWVyKSk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGVyaW9kaWNhbChjYWxsYmFjazogKGNvdW50OiBudW1iZXIpID0+IFByb21pc2U8dm9pZD4gfCB2b2lkLCBtczogbnVtYmVyKSB7XG4gIGxldCB0b2tlbjogTm9kZUpTLlRpbWVvdXQ7XG4gIGxldCBjbG9zZWQgPSBmYWxzZTtcbiAgYXN5bmMgZnVuY3Rpb24gdGljayhjb3VudDogbnVtYmVyKSB7XG4gICAgYXdhaXQgY2FsbGJhY2soY291bnQpO1xuICAgIGlmIChjbG9zZWQpIHJldHVybjtcbiAgICB0b2tlbiA9IHNldFRpbWVvdXQoKCkgPT4gdGljayhjb3VudCArIDEpLCBtcyk7XG4gIH1cbiAgdG9rZW4gPSBzZXRUaW1lb3V0KCgpID0+IHRpY2soMCksIG1zKTtcbiAgcmV0dXJuICgpID0+IHtcbiAgICBjbG9zZWQgPSB0cnVlO1xuICAgIGNsZWFyVGltZW91dCh0b2tlbik7XG4gIH07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAzLzEzLlxuXG5pbXBvcnQgdHlwZSB7IERlYnVnZ2VyLCBTaXplIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyB3aXRoVGltZW91dCB9IGZyb20gXCIuL3RpbWluZ1wiO1xuXG5jb25zdCBDRFBfVElNRU9VVF9NUyA9IDVfMDAwO1xuXG5leHBvcnQgZnVuY3Rpb24gc2VuZChjZHA6IERlYnVnZ2VyLCBtZXRob2Q6IHN0cmluZywgcGFyYW1zPzogb2JqZWN0KTogUHJvbWlzZTx1bmtub3duPiB7XG4gIHJldHVybiB3aXRoVGltZW91dChjZHAuc2VuZENvbW1hbmQobWV0aG9kLCBwYXJhbXMpLCBDRFBfVElNRU9VVF9NUywgYGNkcC4ke21ldGhvZH1gKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV2YWxJbihjZHA6IERlYnVnZ2VyLCBleHByZXNzaW9uOiBzdHJpbmcpOiBQcm9taXNlPHVua25vd24+IHtcbiAgcmV0dXJuIHdpdGhUaW1lb3V0KHNlbmQoY2RwLCBcIlJ1bnRpbWUuZXZhbHVhdGVcIiwgeyBleHByZXNzaW9uIH0pLCBDRFBfVElNRU9VVF9NUywgXCJldmFsSW5cIik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhZHZhbmNlVmlydHVhbFRpbWUoY2RwOiBEZWJ1Z2dlciwgYnVkZ2V0OiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjZHAub2ZmKFwibWVzc2FnZVwiLCBoYW5kbGVyKTtcbiAgICAgIHJlamVjdChuZXcgRXJyb3IoYGFkdmFuY2VWaXJ0dWFsVGltZSB0aW1lZCBvdXQgYWZ0ZXIgJHtDRFBfVElNRU9VVF9NU31tc2ApKTtcbiAgICB9LCBDRFBfVElNRU9VVF9NUyk7XG5cbiAgICBjb25zdCBoYW5kbGVyID0gKF86IEVsZWN0cm9uLkV2ZW50LCBtZXRob2Q6IHN0cmluZykgPT4ge1xuICAgICAgaWYgKG1ldGhvZCA9PT0gXCJFbXVsYXRpb24udmlydHVhbFRpbWVCdWRnZXRFeHBpcmVkXCIpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICBjZHAub2ZmKFwibWVzc2FnZVwiLCBoYW5kbGVyKTtcbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgfVxuICAgIH07XG4gICAgY2RwLm9uKFwibWVzc2FnZVwiLCBoYW5kbGVyKTtcbiAgICBzZW5kKGNkcCwgXCJFbXVsYXRpb24uc2V0VmlydHVhbFRpbWVQb2xpY3lcIiwgeyBwb2xpY3k6IFwiYWR2YW5jZVwiLCBidWRnZXQgfSkuY2F0Y2goKGUpID0+IHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgIGNkcC5vZmYoXCJtZXNzYWdlXCIsIGhhbmRsZXIpO1xuICAgICAgcmVqZWN0KGUpO1xuICAgIH0pO1xuICB9KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHBhdXNlVmlydHVhbFRpbWUoY2RwOiBEZWJ1Z2dlcik6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBzZW5kKGNkcCwgXCJFbXVsYXRpb24uc2V0VmlydHVhbFRpbWVQb2xpY3lcIiwgeyBwb2xpY3k6IFwicGF1c2VcIiB9KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc2l6ZURyYXdhYmxlKGNkcDogRGVidWdnZXIsIHNpemU6IFNpemUpIHtcbiAgYXdhaXQgc2VuZChjZHAsIFwiRW11bGF0aW9uLnNldERldmljZU1ldHJpY3NPdmVycmlkZVwiLCB7XG4gICAgLi4uc2l6ZSxcbiAgICBkZXZpY2VTY2FsZUZhY3RvcjogMSxcbiAgICBtb2JpbGU6IGZhbHNlLFxuICB9KTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDkuXG5cbmltcG9ydCB7IHR5cGUgRGVidWdnZXIsIHR5cGUgU2l6ZSwgdHlwZSBXZWJDb250ZW50cyB9IGZyb20gXCJlbGVjdHJvblwiO1xuaW1wb3J0IHsgYWR2YW5jZVZpcnR1YWxUaW1lLCBldmFsSW4gfSBmcm9tIFwiLi4vYmFzZS9jZHBcIjtcbmltcG9ydCB7IHdpdGhUaW1lb3V0IH0gZnJvbSBcIi4uL2Jhc2UvdGltaW5nXCI7XG5cbmV4cG9ydCBjb25zdCBGUkFNRV9TWU5DX01BUktFUl9XSURUSCA9IDMyO1xuZXhwb3J0IGNvbnN0IEZSQU1FX1NZTkNfTUFSS0VSX0hFSUdIVCA9IDE7XG5leHBvcnQgY29uc3QgU1RFR09fVElDS19DSEFOTkVMID0gXCJzdGVnby10aWNrXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFN0ZWdvSFRNTCh0YXJnZXRVUkw6IHN0cmluZywgc2l6ZTogU2l6ZSk6IHN0cmluZyB7XG4gIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gc2l6ZTtcbiAgcmV0dXJuIGA8IURPQ1RZUEUgaHRtbD5cbjxodG1sPlxuPGhlYWQ+XG4gIDxtZXRhIGNoYXJzZXQ9XCJVVEYtOFwiPlxuICA8c3R5bGU+XG4gICAgKiB7IG1hcmdpbjogMDsgcGFkZGluZzogMDsgYm94LXNpemluZzogYm9yZGVyLWJveDsgfVxuICAgIGh0bWwsIGJvZHkgeyB3aWR0aDogJHt3aWR0aH1weDsgaGVpZ2h0OiAke2hlaWdodCArIDF9cHg7IG92ZXJmbG93OiBoaWRkZW47IH1cbiAgICAjdGFyZ2V0IHsgXG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7IFxuICAgICAgdG9wOiAwOyBcbiAgICAgIGxlZnQ6IDA7IFxuICAgICAgd2lkdGg6ICR7d2lkdGh9cHg7IFxuICAgICAgaGVpZ2h0OiAke2hlaWdodH1weDsgXG4gICAgICBib3JkZXI6IG5vbmU7IFxuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgfVxuICAgICNzdGVnbyB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB0b3A6ICR7aGVpZ2h0fXB4O1xuICAgICAgbGVmdDogMDtcbiAgICAgIHdpZHRoOiAke3dpZHRofXB4O1xuICAgICAgaGVpZ2h0OiAxcHg7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIGltYWdlLXJlbmRlcmluZzogcGl4ZWxhdGVkO1xuICAgIH1cbiAgICAvKiBIZWFydGJlYXQ6IGludmlzaWJsZSBhbHdheXMtb24gdGljay4gRm9yY2VzIENocm9taXVtIGNvbXBvc2l0b3IgdG8gaXNzdWUgQmVnaW5GcmFtZSBlYWNoXG4gICAgICAgdmlydHVhbCB0aWNrIG9uIG90aGVyd2lzZS1zdGF0aWMgcGFnZXMgc28gY2FudmFzI3N0ZWdvIHB1dEltYWdlRGF0YSB1cGRhdGVzIGxhbmQgaW4gdGhlXG4gICAgICAgY2FwdHVyZWQgcGFpbnQgZXZlbnQuIFdpdGhvdXQgdGhpcywgYSBzdGF0aWMgaWZyYW1lICsgcGF1c2VkIHZpcnR1YWwgdGltZSBsZWF2ZXMgdGhlXG4gICAgICAgY29tcG9zaXRvcidzIGxhc3QgZnJhbWUgY2FjaGVkIGV2ZW4gYWZ0ZXIgY2FudmFzIGRpcnRpZXM7IGludmFsaWRhdGUoKSBvbmx5IHJlLWVtaXRzIHRoZVxuICAgICAgIGNhY2hlZCBmcmFtZS4gKi9cbiAgICBAa2V5ZnJhbWVzIHB1cF9oZWFydGJlYXQge1xuICAgICAgMCUgeyBvcGFjaXR5OiAwLjU7IH1cbiAgICAgIDEwMCUgeyBvcGFjaXR5OiAxOyB9XG4gICAgfVxuICAgICNoZWFydGJlYXQge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgYm90dG9tOiAwO1xuICAgICAgcmlnaHQ6IDA7XG4gICAgICB3aWR0aDogMXB4O1xuICAgICAgaGVpZ2h0OiAxcHg7XG4gICAgICBiYWNrZ3JvdW5kOiAjMDAwO1xuICAgICAgYW5pbWF0aW9uOiBwdXBfaGVhcnRiZWF0IDFzIGxpbmVhciBpbmZpbml0ZTtcbiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgIH1cbiAgPC9zdHlsZT5cbjwvaGVhZD5cbjxib2R5PlxuICA8aWZyYW1lIGlkPVwidGFyZ2V0XCIgc3JjPVwiJHt0YXJnZXRVUkx9XCI+PC9pZnJhbWU+XG4gIDxjYW52YXMgaWQ9XCJzdGVnb1wiIHdpZHRoPVwiJHt3aWR0aH1cIiBoZWlnaHQ9XCIxXCI+PC9jYW52YXM+XG4gIDxkaXYgaWQ9XCJoZWFydGJlYXRcIj48L2Rpdj5cbiAgPHNjcmlwdD5cbiAgICAoZnVuY3Rpb24oKSB7XG4gICAgICBjb25zdCB7IGlwY1JlbmRlcmVyIH0gPSByZXF1aXJlKCdlbGVjdHJvbicpO1xuICAgICAgY29uc3QgV0lEVEggPSAke3dpZHRofTtcbiAgICAgIGNvbnN0IE1BUktFUl9XSURUSCA9ICR7RlJBTUVfU1lOQ19NQVJLRVJfV0lEVEh9O1xuICAgICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N0ZWdvJyk7XG4gICAgICBjb25zdCBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnLCB7IHdpbGxSZWFkRnJlcXVlbnRseTogdHJ1ZSB9KTtcbiAgICAgIGxldCBzdGFydFRpbWUgPSBudWxsO1xuICAgICAgbGV0IHJhZklkID0gbnVsbDtcblxuICAgICAgZnVuY3Rpb24gZW5jb2RlVGltZXN0YW1wKHRpbWVzdGFtcE1zKSB7XG4gICAgICAgIGNvbnN0IGltYWdlRGF0YSA9IGN0eC5jcmVhdGVJbWFnZURhdGEoV0lEVEgsIDEpO1xuICAgICAgICBjb25zdCBkYXRhID0gaW1hZ2VEYXRhLmRhdGE7XG5cbiAgICAgICAgY29uc3QgdGltZXN0YW1wSW50ID0gTWF0aC5mbG9vcih0aW1lc3RhbXBNcykgPj4+IDA7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBNQVJLRVJfV0lEVEg7IGkrKykge1xuICAgICAgICAgIGNvbnN0IGJpdCA9ICh0aW1lc3RhbXBJbnQgPj4+IChNQVJLRVJfV0lEVEggLSAxIC0gaSkpICYgMTtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IGJpdCA/IDI1NSA6IDA7XG4gICAgICAgICAgY29uc3QgaWR4ID0gaSAqIDQ7XG4gICAgICAgICAgZGF0YVtpZHhdID0gdmFsdWU7XG4gICAgICAgICAgZGF0YVtpZHggKyAxXSA9IHZhbHVlO1xuICAgICAgICAgIGRhdGFbaWR4ICsgMl0gPSB2YWx1ZTtcbiAgICAgICAgICBkYXRhW2lkeCArIDNdID0gMjU1O1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IE1BUktFUl9XSURUSDsgaSA8IFdJRFRIOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBpZHggPSBpICogNDtcbiAgICAgICAgICBkYXRhW2lkeF0gPSAwO1xuICAgICAgICAgIGRhdGFbaWR4ICsgMV0gPSAwO1xuICAgICAgICAgIGRhdGFbaWR4ICsgMl0gPSAwO1xuICAgICAgICAgIGRhdGFbaWR4ICsgM10gPSAyNTU7XG4gICAgICAgIH1cblxuICAgICAgICBjdHgucHV0SW1hZ2VEYXRhKGltYWdlRGF0YSwgMCwgMCk7XG4gICAgICAgIGlwY1JlbmRlcmVyLnNlbmQoJyR7U1RFR09fVElDS19DSEFOTkVMfScpO1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiB1cGRhdGVMb29wKCkge1xuICAgICAgICBpZiAoc3RhcnRUaW1lID09PSBudWxsKSByZXR1cm47XG4gICAgICAgIGNvbnN0IGVsYXBzZWQgPSBwZXJmb3JtYW5jZS5ub3coKSAtIHN0YXJ0VGltZTtcbiAgICAgICAgZW5jb2RlVGltZXN0YW1wKGVsYXBzZWQpO1xuICAgICAgICByYWZJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSh1cGRhdGVMb29wKTtcbiAgICAgIH1cblxuICAgICAgd2luZG93Ll9fcHVwX3N0YXJ0X3N0ZWdvX18gPSAoKSA9PiB7XG4gICAgICAgIHN0YXJ0VGltZSA9IHBlcmZvcm1hbmNlLm5vdygpO1xuICAgICAgICBlbmNvZGVUaW1lc3RhbXAoMCk7XG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSh1cGRhdGVMb29wKTtcbiAgICAgIH07XG5cbiAgICAgIHdpbmRvdy5fX3B1cF9kcmF3X3N0ZWdvX18gPSAobXMpID0+IHtcbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IGVuY29kZVRpbWVzdGFtcChtcykpO1xuICAgICAgfTtcblxuICAgICAgd2luZG93Ll9fcHVwX3N0b3Bfc3RlZ29fXyA9ICgpID0+IHtcbiAgICAgICAgaWYgKHJhZklkICE9PSBudWxsKSB7XG4gICAgICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUocmFmSWQpO1xuICAgICAgICAgIHJhZklkID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9KSgpO1xuICA8L3NjcmlwdD5cbjwvYm9keT5cbjwvaHRtbD5gO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVjb2RlU3RlZ28oYml0bWFwOiBCdWZmZXIsIHNpemU6IFNpemUpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IHNpemU7XG4gIGlmICh3aWR0aCA8IEZSQU1FX1NZTkNfTUFSS0VSX1dJRFRIIHx8IGhlaWdodCA8IDIpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgbWFya2VyUm93ID0gaGVpZ2h0IC0gMTtcblxuICBsZXQgdGltZXN0YW1wID0gMDtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBGUkFNRV9TWU5DX01BUktFUl9XSURUSDsgaSsrKSB7XG4gICAgY29uc3QgcGl4ZWxJZHggPSAobWFya2VyUm93ICogd2lkdGggKyBpKSAqIDQ7XG4gICAgY29uc3QgciA9IGJpdG1hcFtwaXhlbElkeF0gPz8gMDtcbiAgICBjb25zdCBiaXQgPSByID4gMTI3ID8gMSA6IDA7XG4gICAgdGltZXN0YW1wID0gKHRpbWVzdGFtcCA8PCAxKSB8IGJpdDtcbiAgfVxuXG4gIHRpbWVzdGFtcCA9IHRpbWVzdGFtcCA+Pj4gMDtcblxuICBpZiAoIU51bWJlci5pc0Zpbml0ZSh0aW1lc3RhbXApIHx8IHRpbWVzdGFtcCA8IDAgfHwgdGltZXN0YW1wID4gMWU3KSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHJldHVybiB0aW1lc3RhbXA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGFydFN0ZWdvKGNkcDogRGVidWdnZXIpIHtcbiAgcmV0dXJuIGV2YWxJbihjZHAsIGBfX3B1cF9zdGFydF9zdGVnb19fKClgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0b3BTdGVnbyhjZHA6IERlYnVnZ2VyKSB7XG4gIHJldHVybiBldmFsSW4oY2RwLCBgX19wdXBfc3RvcF9zdGVnb19fKClgKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHN3YXBCdWZmZXIod2M6IFdlYkNvbnRlbnRzLCBleHBlY3RlZDogbnVtYmVyLCBpbnRlcnZhbDogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHN3YXBwZWQgPSBuZXcgUHJvbWlzZSgocikgPT4gd2MuaXBjLm9uY2UoU1RFR09fVElDS19DSEFOTkVMLCByKSk7XG4gIGF3YWl0IGV2YWxJbih3Yy5kZWJ1Z2dlciwgYF9fcHVwX2RyYXdfc3RlZ29fXygke2V4cGVjdGVkfSlgKTtcbiAgYXdhaXQgYWR2YW5jZVZpcnR1YWxUaW1lKHdjLmRlYnVnZ2VyLCBpbnRlcnZhbCk7XG4gIGF3YWl0IHdpdGhUaW1lb3V0KHN3YXBwZWQsIDVfMDAwLCBcInN3YXBCdWZmZXJcIik7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzAxLlxuXG5pbXBvcnQgdHlwZSB7IFNpemUgfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IHByb3RvY29sIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBidWlsZFN0ZWdvSFRNTCB9IGZyb20gXCIuL3N0ZWdvXCI7XG5cbmNvbnN0IFBVUF9TQ0hFTUUgPSBcInB1cFwiO1xuY29uc3QgRlJBTUVfU0NIRU1FID0gXCJwdXAtZnJhbWVcIjtcblxuLy8gYHByb3RvY29sLnJlZ2lzdGVyU2NoZW1lc0FzUHJpdmlsZWdlZGAgaG9ub3JzIG9ubHkgdGhlIExBU1QgY2FsbCDigJQgcmVnaXN0ZXIgZXZlcnlcbi8vIGN1c3RvbSBzY2hlbWUgaW4gdGhpcyBvbmUgcGxhY2UuIE5ldyBzY2hlbWVzIG11c3QgYmUgYWRkZWQgdG8gUFJJVklMRUdFRF9TQ0hFTUVTIGJlbG93LlxuY29uc3QgUFJJVklMRUdFRF9QUklWSUxFR0VTID0ge1xuICBzdGFuZGFyZDogdHJ1ZSxcbiAgc2VjdXJlOiB0cnVlLFxuICBieXBhc3NDU1A6IHRydWUsXG4gIGFsbG93U2VydmljZVdvcmtlcnM6IHRydWUsXG4gIHN1cHBvcnRGZXRjaEFQSTogdHJ1ZSxcbiAgY29yc0VuYWJsZWQ6IHRydWUsXG4gIHN0cmVhbTogdHJ1ZSxcbiAgY29kZUNhY2hlOiB0cnVlLFxufSBhcyBjb25zdDtcblxuLy8gTXVzdCBiZSBjYWxsZWQgc3luY2hyb25vdXNseSBiZWZvcmUgYXBwIGlzIHJlYWR5LlxucHJvdG9jb2wucmVnaXN0ZXJTY2hlbWVzQXNQcml2aWxlZ2VkKFtcbiAgeyBzY2hlbWU6IFBVUF9TQ0hFTUUsIHByaXZpbGVnZXM6IFBSSVZJTEVHRURfUFJJVklMRUdFUyB9LFxuICB7IHNjaGVtZTogRlJBTUVfU0NIRU1FLCBwcml2aWxlZ2VzOiBQUklWSUxFR0VEX1BSSVZJTEVHRVMgfSxcbl0pO1xuXG4vLyBNdXN0IGJlIGNhbGxlZCBhZnRlciBhcHAgaXMgcmVhZHkuXG5leHBvcnQgZnVuY3Rpb24gc2V0dXBQdXBQcm90b2NvbCgpOiB2b2lkIHtcbiAgcHJvdG9jb2wuaGFuZGxlKFBVUF9TQ0hFTUUsIChyZXEpID0+IHtcbiAgICBjb25zdCB1cmwgPSBuZXcgVVJMKHJlcS51cmwpO1xuICAgIGNvbnN0IHNyYyA9IHVybC5zZWFyY2hQYXJhbXMuZ2V0KFwic3JjXCIpID8/IFwiXCI7XG4gICAgY29uc3Qgd2lkdGggPSBwYXJzZUludCh1cmwuc2VhcmNoUGFyYW1zLmdldChcIndcIikgPz8gXCIwXCIsIDEwKTtcbiAgICBjb25zdCBoZWlnaHQgPSBwYXJzZUludCh1cmwuc2VhcmNoUGFyYW1zLmdldChcImhcIikgPz8gXCIwXCIsIDEwKTtcbiAgICBjb25zdCBodG1sID0gYnVpbGRTdGVnb0hUTUwoc3JjLCB7IHdpZHRoLCBoZWlnaHQgfSk7XG4gICAgcmV0dXJuIG5ldyBSZXNwb25zZShodG1sLCB7IGhlYWRlcnM6IHsgXCJjb250ZW50LXR5cGVcIjogXCJ0ZXh0L2h0bWxcIiB9IH0pO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVN0ZWdvVVJMKHNyYzogc3RyaW5nLCBzaXplOiBTaXplKTogc3RyaW5nIHtcbiAgY29uc3QgdXJsID0gbmV3IFVSTChgJHtQVVBfU0NIRU1FfTovL3N0ZWdvYCk7XG4gIHVybC5zZWFyY2hQYXJhbXMuc2V0KFwic3JjXCIsIHNyYy5yZXBsYWNlKFwiaHR0cDovL1wiLCBcImh0dHBzOi8vXCIpKTtcbiAgdXJsLnNlYXJjaFBhcmFtcy5zZXQoXCJ3XCIsIFN0cmluZyhzaXplLndpZHRoKSk7XG4gIHVybC5zZWFyY2hQYXJhbXMuc2V0KFwiaFwiLCBTdHJpbmcoc2l6ZS5oZWlnaHQpKTtcbiAgcmV0dXJuIHVybC50b1N0cmluZygpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMS8zMC5cblxuaW50ZXJmYWNlIFF1ZXVlRW50cnkge1xuICBydW46IFZvaWRGdW5jdGlvbjtcbiAgcmVqZWN0OiAocmVhc29uOiB1bmtub3duKSA9PiB2b2lkO1xuICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbn1cblxuZXhwb3J0IGNsYXNzIENvbmN1cnJlbmN5TGltaXRlciB7XG4gIHByaXZhdGUgX2FjdGl2ZSA9IDA7XG4gIHByaXZhdGUgX3F1ZXVlOiBRdWV1ZUVudHJ5W10gPSBbXTtcbiAgcHJpdmF0ZSBfc2lnbmFscyA9IG5ldyBXZWFrU2V0PEFib3J0U2lnbmFsPigpO1xuICBwcml2YXRlIF9yZXNvbHZlPzogVm9pZEZ1bmN0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKHJlYWRvbmx5IG1heENvbmN1cnJlbmN5OiBudW1iZXIpIHt9XG5cbiAgZ2V0IGFjdGl2ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9hY3RpdmU7XG4gIH1cblxuICBnZXQgcGVuZGluZygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9xdWV1ZS5sZW5ndGg7XG4gIH1cblxuICBnZXQgc3RhdHMoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYGFjdGl2ZTogJHt0aGlzLmFjdGl2ZX0sIHBlbmRpbmc6ICR7dGhpcy5wZW5kaW5nfWA7XG4gIH1cblxuICBhc3luYyBzY2hlZHVsZTxUPihmbjogKCkgPT4gUHJvbWlzZTxUPiwgc2lnbmFsPzogQWJvcnRTaWduYWwpOiBQcm9taXNlPFQ+IHtcbiAgICBzaWduYWw/LnRocm93SWZBYm9ydGVkKCk7XG5cbiAgICBpZiAoc2lnbmFsICYmICF0aGlzLl9zaWduYWxzLmhhcyhzaWduYWwpKSB7XG4gICAgICB0aGlzLl9zaWduYWxzLmFkZChzaWduYWwpO1xuICAgICAgc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCAoKSA9PiB0aGlzLmZsdXNoKHNpZ25hbCksIHsgb25jZTogdHJ1ZSB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2U8VD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpcy5fcXVldWUucHVzaCh7XG4gICAgICAgIHJ1bjogKCkgPT4ge1xuICAgICAgICAgIGlmIChzaWduYWw/LmFib3J0ZWQpIHtcbiAgICAgICAgICAgIHJlamVjdChzaWduYWwucmVhc29uKTtcbiAgICAgICAgICAgIHRoaXMubmV4dCgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLl9hY3RpdmUrKztcbiAgICAgICAgICBmbigpXG4gICAgICAgICAgICAudGhlbigodikgPT4ge1xuICAgICAgICAgICAgICB0aGlzLl9hY3RpdmUtLTtcbiAgICAgICAgICAgICAgcmVzb2x2ZSh2KTtcbiAgICAgICAgICAgICAgdGhpcy5uZXh0KCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuX2FjdGl2ZS0tO1xuICAgICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgICAgIHRoaXMubmV4dCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIHJlamVjdCxcbiAgICAgICAgc2lnbmFsLFxuICAgICAgfSk7XG4gICAgICB0aGlzLm5leHQoKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGRyYWluKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9hY3RpdmUgPT09IDAgJiYgdGhpcy5wZW5kaW5nID09PSAwKSByZXR1cm47XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyKSA9PiAodGhpcy5fcmVzb2x2ZSA9IHIpKTtcbiAgfVxuXG4gIHByaXZhdGUgZmx1c2goc2lnbmFsOiBBYm9ydFNpZ25hbCkge1xuICAgIGNvbnN0IGtlZXA6IFF1ZXVlRW50cnlbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgZW50cnkgb2YgdGhpcy5fcXVldWUpIHtcbiAgICAgIGlmIChlbnRyeS5zaWduYWwgPT09IHNpZ25hbCkge1xuICAgICAgICBlbnRyeS5yZWplY3Qoc2lnbmFsLnJlYXNvbik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBrZWVwLnB1c2goZW50cnkpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLl9xdWV1ZSA9IGtlZXA7XG4gICAgdGhpcy5uZXh0KCk7XG4gIH1cblxuICBwcml2YXRlIG5leHQoKSB7XG4gICAgaWYgKHRoaXMuX2FjdGl2ZSA9PT0gMCAmJiB0aGlzLnBlbmRpbmcgPT09IDApIHtcbiAgICAgIHRoaXMuX3Jlc29sdmU/LigpO1xuICAgICAgdGhpcy5fcmVzb2x2ZSA9IHVuZGVmaW5lZDtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuX2FjdGl2ZSA8IHRoaXMubWF4Q29uY3VycmVuY3kpIHtcbiAgICAgIHRoaXMuX3F1ZXVlLnNoaWZ0KCk/LnJ1bigpO1xuICAgIH1cbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8xMi5cblxuaW1wb3J0IHsgQ29kZWMsIENvZGVjQ29udGV4dCwgRkZtcGVnRXJyb3IsIEZyYW1lLCBIYXJkd2FyZUZyYW1lc0NvbnRleHQsIFBhY2tldCwgUmF0aW9uYWwsIHR5cGUgU3RyZWFtIH0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB7XG4gIEFWX0NPREVDX0ZMQUdfR0xPQkFMX0hFQURFUixcbiAgQVZFUlJPUl9FQUdBSU4sXG4gIEFWRVJST1JfRU9GLFxuICB0eXBlIEFWQ29sb3JSYW5nZSxcbiAgdHlwZSBBVlBpeGVsRm9ybWF0LFxufSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcbmltcG9ydCB0eXBlIHsgRm9ybWF0TXV4ZXIgfSBmcm9tIFwiLi9tdXhlclwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFZpZGVvQ3R4T3B0aW9ucyB7XG4gIGNvZGVjOiBDb2RlYztcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIGZwczogbnVtYmVyO1xuICBiaXRyYXRlOiBudW1iZXI7XG4gIHBpeGVsRm9ybWF0OiBBVlBpeGVsRm9ybWF0O1xuICBjb2RlY1RhZz86IHN0cmluZztcbiAgY29sb3JSYW5nZT86IEFWQ29sb3JSYW5nZTtcbiAgb3B0aW9ucz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIGh3RnJhbWVzQ3R4PzogSGFyZHdhcmVGcmFtZXNDb250ZXh0O1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gb3BlblZpZGVvQ3R4KG9wdHM6IFZpZGVvQ3R4T3B0aW9ucywgbGFiZWw6IHN0cmluZyk6IFByb21pc2U8Q29kZWNDb250ZXh0PiB7XG4gIGNvbnN0IGN0eCA9IG5ldyBDb2RlY0NvbnRleHQoKTtcbiAgY3R4LmFsbG9jQ29udGV4dDMob3B0cy5jb2RlYyk7XG4gIGN0eC5jb2RlY0lkID0gb3B0cy5jb2RlYy5pZDtcbiAgY3R4LndpZHRoID0gb3B0cy53aWR0aDtcbiAgY3R4LmhlaWdodCA9IG9wdHMuaGVpZ2h0O1xuICBjdHgucGl4ZWxGb3JtYXQgPSBvcHRzLnBpeGVsRm9ybWF0O1xuICBjdHgudGltZUJhc2UgPSBuZXcgUmF0aW9uYWwoMSwgb3B0cy5mcHMpO1xuICBjdHguZnJhbWVyYXRlID0gbmV3IFJhdGlvbmFsKG9wdHMuZnBzLCAxKTtcbiAgY3R4LmdvcFNpemUgPSBvcHRzLmZwcyAqIDI7XG4gIGN0eC5iaXRSYXRlID0gQmlnSW50KG9wdHMuYml0cmF0ZSk7XG4gIGN0eC5zZXRGbGFncyhBVl9DT0RFQ19GTEFHX0dMT0JBTF9IRUFERVIpO1xuICBpZiAob3B0cy5jb2RlY1RhZykgY3R4LmNvZGVjVGFnID0gb3B0cy5jb2RlY1RhZztcbiAgaWYgKG9wdHMuY29sb3JSYW5nZSAhPT0gdW5kZWZpbmVkKSBjdHguY29sb3JSYW5nZSA9IG9wdHMuY29sb3JSYW5nZTtcbiAgaWYgKG9wdHMuaHdGcmFtZXNDdHgpIGN0eC5od0ZyYW1lc0N0eCA9IG9wdHMuaHdGcmFtZXNDdHg7XG4gIGZvciAoY29uc3QgW2ssIHZdIG9mIE9iamVjdC5lbnRyaWVzKG9wdHMub3B0aW9ucyA/PyB7fSkpIGN0eC5zZXRPcHRpb24oaywgdik7XG4gIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCBjdHgub3BlbjIob3B0cy5jb2RlYywgbnVsbCksIGxhYmVsKTtcbiAgcmV0dXJuIGN0eDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ha2VGcmFtZSh3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlciwgcGl4Rm10OiBBVlBpeGVsRm9ybWF0KTogRnJhbWUge1xuICBjb25zdCBmcmFtZSA9IG5ldyBGcmFtZSgpO1xuICBmcmFtZS5hbGxvYygpO1xuICBmcmFtZS5mb3JtYXQgPSBwaXhGbXQ7XG4gIGZyYW1lLndpZHRoID0gd2lkdGg7XG4gIGZyYW1lLmhlaWdodCA9IGhlaWdodDtcbiAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGZyYW1lLmdldEJ1ZmZlcigwKSwgXCJmcmFtZS5nZXRCdWZmZXJcIik7XG4gIHJldHVybiBmcmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ha2VQYWNrZXQoKTogUGFja2V0IHtcbiAgY29uc3QgcGt0ID0gbmV3IFBhY2tldCgpO1xuICBwa3QuYWxsb2MoKTtcbiAgcmV0dXJuIHBrdDtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRyYWluUGFja2V0cyhjdHg6IENvZGVjQ29udGV4dCwgcGt0OiBQYWNrZXQsIHN0cmVhbTogU3RyZWFtLCBtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgd2hpbGUgKHRydWUpIHtcbiAgICBjb25zdCByID0gYXdhaXQgY3R4LnJlY2VpdmVQYWNrZXQocGt0KTtcbiAgICBpZiAociA9PT0gQVZFUlJPUl9FQUdBSU4gfHwgciA9PT0gQVZFUlJPUl9FT0YpIGJyZWFrO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihyLCBcInJlY2VpdmVQYWNrZXRcIik7XG4gICAgcGt0LnN0cmVhbUluZGV4ID0gc3RyZWFtLmluZGV4O1xuICAgIGlmIChwa3QuZHVyYXRpb24gPT09IDBuKSBwa3QuZHVyYXRpb24gPSAxbjtcbiAgICBwa3QucmVzY2FsZVRzKGN0eC50aW1lQmFzZSwgc3RyZWFtLnRpbWVCYXNlKTtcbiAgICBhd2FpdCBtdXhlci53cml0ZVBhY2tldChwa3QpO1xuICAgIHBrdC51bnJlZigpO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzAzLlxuXG5pbXBvcnQgeyBvayB9IGZyb20gXCJhc3NlcnRcIjtcbmltcG9ydCB7XG4gIEFWX1BJWF9GTVRfQkdSQSxcbiAgQVZfUElYX0ZNVF9ZVVZBNDIwUCxcbiAgQ29kZWMsXG4gIENvZGVjQ29udGV4dCxcbiAgRkZfREVDT0RFUl9QTkcsXG4gIEZGbXBlZ0Vycm9yLFxuICB0eXBlIEZyYW1lLFxuICBQYWNrZXQsXG4gIFNvZnR3YXJlU2NhbGVDb250ZXh0LFxuICBTV1NfQklMSU5FQVIsXG4gIHR5cGUgQVZQaXhlbEZvcm1hdCxcbn0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB7IG1ha2VGcmFtZSwgbWFrZVBhY2tldCB9IGZyb20gXCIuL21pc2NcIjtcblxuZXhwb3J0IGNsYXNzIENvZGVjU3RhdGUgaW1wbGVtZW50cyBEaXNwb3NhYmxlIHtcbiAgcmVhZG9ubHkgc3JjOiBGcmFtZTtcbiAgcmVhZG9ubHkgZHN0OiBGcmFtZTtcbiAgcmVhZG9ubHkgcGt0OiBQYWNrZXQ7XG4gIHByaXZhdGUgX3N3cz86IFNvZnR3YXJlU2NhbGVDb250ZXh0O1xuICBwcml2YXRlIF9wbmc/OiBDb2RlYztcblxuICBzdGF0aWMgYXN5bmMgY3JlYXRlKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKSB7XG4gICAgY29uc3QgY29kZWMgPSBDb2RlYy5maW5kRGVjb2RlckJ5TmFtZShGRl9ERUNPREVSX1BORyk7XG4gICAgb2soY29kZWMsIFwicG5nIGRlY29kZXIgdW5hdmFpbGFibGVcIik7XG4gICAgcmV0dXJuIG5ldyBDb2RlY1N0YXRlKHdpZHRoLCBoZWlnaHQsIGNvZGVjKTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3Iod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIsIHBuZzogQ29kZWMpIHtcbiAgICB0aGlzLl9wbmcgPSBwbmc7XG4gICAgdGhpcy5zcmMgPSBtYWtlRnJhbWUod2lkdGgsIGhlaWdodCwgQVZfUElYX0ZNVF9CR1JBKTtcbiAgICB0aGlzLmRzdCA9IG1ha2VGcmFtZSh3aWR0aCwgaGVpZ2h0LCBBVl9QSVhfRk1UX1lVVkE0MjBQKTtcbiAgICB0aGlzLnBrdCA9IG1ha2VQYWNrZXQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBmcmVzaCBQTkcgZGVjb2RlciBjb250ZXh0LlxuICAgKiBUaGUgRkZtcGVnIFBORyBkZWNvZGVyIGFjY3VtdWxhdGVzIEFQTkcgYmxlbmRpbmcgc3RhdGVcbiAgICogYWNyb3NzIGZyYW1lcywgc28gYSBzaGFyZWQgaW5zdGFuY2UgY29ycnVwdHMgb3V0cHV0IHdoZW4gZGVjb2Rpbmcgc3RhbmRhbG9uZSBQTkdzLlxuICAgKi9cbiAgYXN5bmMgcG5nKCk6IFByb21pc2U8Q29kZWNDb250ZXh0PiB7XG4gICAgY29uc3QgcG5nID0gbmV3IENvZGVjQ29udGV4dCgpO1xuICAgIHBuZy5hbGxvY0NvbnRleHQzKHRoaXMuX3BuZyk7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IHBuZy5vcGVuMih0aGlzLl9wbmcpLCBcInBuZ0RlY29kZXIub3BlbjJcIik7XG4gICAgcmV0dXJuIHBuZztcbiAgfVxuXG4gIGFzeW5jIGRlY29kZVBORyhwbmdEYXRhOiBCdWZmZXIpOiBQcm9taXNlPEZyYW1lPiB7XG4gICAgdXNpbmcgcG5nID0gYXdhaXQgdGhpcy5wbmcoKTtcbiAgICB0aGlzLnBrdC5kYXRhID0gcG5nRGF0YTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgcG5nLnNlbmRQYWNrZXQodGhpcy5wa3QpLCBcInBuZ0RlY29kZXIuc2VuZFBhY2tldFwiKTtcbiAgICB0aGlzLnBrdC51bnJlZigpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCBwbmcucmVjZWl2ZUZyYW1lKHRoaXMuc3JjKSwgXCJwbmdEZWNvZGVyLnJlY2VpdmVGcmFtZVwiKTtcbiAgICByZXR1cm4gdGhpcy5zcmM7XG4gIH1cblxuICBnZXQgc3dzKCkge1xuICAgIGlmICghdGhpcy5fc3dzKSB7XG4gICAgICBjb25zdCBzd3MgPSBuZXcgU29mdHdhcmVTY2FsZUNvbnRleHQoKTtcbiAgICAgIGNvbnN0IGZtdCA9IHRoaXMuc3JjLmZvcm1hdCBhcyBBVlBpeGVsRm9ybWF0O1xuICAgICAgc3dzLmdldENvbnRleHQoXG4gICAgICAgIHRoaXMuc3JjLndpZHRoLFxuICAgICAgICB0aGlzLnNyYy5oZWlnaHQsXG4gICAgICAgIGZtdCxcbiAgICAgICAgdGhpcy5zcmMud2lkdGgsXG4gICAgICAgIHRoaXMuc3JjLmhlaWdodCxcbiAgICAgICAgQVZfUElYX0ZNVF9ZVVZBNDIwUCxcbiAgICAgICAgU1dTX0JJTElORUFSLFxuICAgICAgKTtcbiAgICAgIHRoaXMuX3N3cyA9IHN3cztcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3N3cztcbiAgfVxuXG4gIFtTeW1ib2wuZGlzcG9zZV0oKTogdm9pZCB7XG4gICAgdGhpcy5zcmNbU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgdGhpcy5kc3RbU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgdGhpcy5wa3RbU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgdGhpcy5fc3dzPy5bU3ltYm9sLmRpc3Bvc2VdKCk7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMDEuXG5cbmltcG9ydCB7XG4gIENvZGVjLFxuICBDb2RlY0NvbnRleHQsXG4gIEZGbXBlZ0Vycm9yLFxuICBGaWx0ZXIsXG4gIEZpbHRlckNvbnRleHQsXG4gIEZpbHRlckdyYXBoLFxuICBGaWx0ZXJJbk91dCxcbiAgRnJhbWUsXG4gIHR5cGUgUGFja2V0LFxuICBSYXRpb25hbCxcbiAgdHlwZSBTdHJlYW0sXG59IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQge1xuICBBVl9DSEFOTkVMX0xBWU9VVF9TVEVSRU8sXG4gIEFWX0NPREVDX0ZMQUdfR0xPQkFMX0hFQURFUixcbiAgQVZfU0FNUExFX0ZNVF9GTFQsXG4gIEFWX1NBTVBMRV9GTVRfRkxUUCxcbiAgQVZFUlJPUl9FQUdBSU4sXG4gIEFWRVJST1JfRU9GLFxuICB0eXBlIEZGQXVkaW9FbmNvZGVyLFxufSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcbmltcG9ydCB0eXBlIHsgRm9ybWF0TXV4ZXIgfSBmcm9tIFwiLi9tdXhlclwiO1xuaW1wb3J0IHsgZHJhaW5QYWNrZXRzLCBtYWtlUGFja2V0IH0gZnJvbSBcIi4vbWlzY1wiO1xuXG5jb25zdCBTQU1QTEVfRk1UX05BTUU6IFBhcnRpYWw8UmVjb3JkPG51bWJlciwgc3RyaW5nPj4gPSB7IFtBVl9TQU1QTEVfRk1UX0ZMVF06IFwiZmx0XCIsIFtBVl9TQU1QTEVfRk1UX0ZMVFBdOiBcImZsdHBcIiB9O1xuXG5leHBvcnQgaW50ZXJmYWNlIEF1ZGlvRW5jb2Rlck9wdGlvbnMge1xuICBvdXRTYW1wbGVSYXRlOiBudW1iZXI7XG4gIG91dFNhbXBsZUZtdDogdHlwZW9mIEFWX1NBTVBMRV9GTVRfRkxUIHwgdHlwZW9mIEFWX1NBTVBMRV9GTVRfRkxUUDtcbiAgY29kZWNOYW1lOiBGRkF1ZGlvRW5jb2RlcjtcbiAgZ2xvYmFsSGVhZGVyOiBib29sZWFuO1xuICBiaXRyYXRlOiBudW1iZXI7XG4gIG11eGVyOiBGb3JtYXRNdXhlcjtcbn1cblxuZXhwb3J0IGNsYXNzIEF1ZGlvRW5jb2RlciBpbXBsZW1lbnRzIERpc3Bvc2FibGUge1xuICBwcml2YXRlIF9jdHg6IENvZGVjQ29udGV4dDtcbiAgcHJpdmF0ZSBfc3RyZWFtOiBTdHJlYW07XG4gIHByaXZhdGUgX3BrdDogUGFja2V0O1xuICBwcml2YXRlIF9vdXRSYXRlOiBudW1iZXI7XG4gIHByaXZhdGUgX291dEZtdDogdHlwZW9mIEFWX1NBTVBMRV9GTVRfRkxUIHwgdHlwZW9mIEFWX1NBTVBMRV9GTVRfRkxUUDtcbiAgcHJpdmF0ZSBfZnJhbWVTaXplOiBudW1iZXI7XG4gIHByaXZhdGUgX2ZpbHRlckZyYW1lOiBGcmFtZTtcbiAgcHJpdmF0ZSBfZ3JhcGg/OiBGaWx0ZXJHcmFwaDtcbiAgcHJpdmF0ZSBfYnVmU3JjPzogRmlsdGVyQ29udGV4dDtcbiAgcHJpdmF0ZSBfYnVmU2luaz86IEZpbHRlckNvbnRleHQ7XG4gIHByaXZhdGUgX2luUmF0ZT86IG51bWJlcjtcbiAgcHJpdmF0ZSBfcHRzID0gMG47XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihjdHg6IENvZGVjQ29udGV4dCwgc3RyZWFtOiBTdHJlYW0sIG91dEZtdDogdHlwZW9mIEFWX1NBTVBMRV9GTVRfRkxUIHwgdHlwZW9mIEFWX1NBTVBMRV9GTVRfRkxUUCkge1xuICAgIHRoaXMuX2N0eCA9IGN0eDtcbiAgICB0aGlzLl9zdHJlYW0gPSBzdHJlYW07XG4gICAgdGhpcy5fb3V0UmF0ZSA9IGN0eC5zYW1wbGVSYXRlO1xuICAgIHRoaXMuX291dEZtdCA9IG91dEZtdDtcbiAgICB0aGlzLl9mcmFtZVNpemUgPSBjdHguZnJhbWVTaXplO1xuICAgIHRoaXMuX3BrdCA9IG1ha2VQYWNrZXQoKTtcbiAgICB0aGlzLl9maWx0ZXJGcmFtZSA9IG5ldyBGcmFtZSgpO1xuICAgIHRoaXMuX2ZpbHRlckZyYW1lLmFsbG9jKCk7XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgY3JlYXRlKG9wdHM6IEF1ZGlvRW5jb2Rlck9wdGlvbnMpOiBQcm9taXNlPEF1ZGlvRW5jb2Rlcj4ge1xuICAgIGNvbnN0IGNvZGVjID0gQ29kZWMuZmluZEVuY29kZXJCeU5hbWUob3B0cy5jb2RlY05hbWUpO1xuICAgIGlmICghY29kZWMpIHRocm93IG5ldyBFcnJvcihgQXVkaW8gZW5jb2RlciBub3QgZm91bmQ6ICR7b3B0cy5jb2RlY05hbWV9YCk7XG4gICAgY29uc3QgY3R4ID0gbmV3IENvZGVjQ29udGV4dCgpO1xuICAgIGN0eC5hbGxvY0NvbnRleHQzKGNvZGVjKTtcbiAgICBjdHguY29kZWNJZCA9IGNvZGVjLmlkO1xuICAgIGN0eC5zYW1wbGVGb3JtYXQgPSBvcHRzLm91dFNhbXBsZUZtdDtcbiAgICBjdHguc2FtcGxlUmF0ZSA9IG9wdHMub3V0U2FtcGxlUmF0ZTtcbiAgICBjdHguY2hhbm5lbExheW91dCA9IEFWX0NIQU5ORUxfTEFZT1VUX1NURVJFTztcbiAgICBjdHgudGltZUJhc2UgPSBuZXcgUmF0aW9uYWwoMSwgb3B0cy5vdXRTYW1wbGVSYXRlKTtcbiAgICBjdHguYml0UmF0ZSA9IEJpZ0ludChvcHRzLmJpdHJhdGUpO1xuICAgIGlmIChvcHRzLmdsb2JhbEhlYWRlcikgY3R4LnNldEZsYWdzKEFWX0NPREVDX0ZMQUdfR0xPQkFMX0hFQURFUik7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IGN0eC5vcGVuMihjb2RlYywgbnVsbCksIFwiYXVkaW9DdHgub3BlbjJcIik7XG4gICAgY29uc3Qgc3RyZWFtID0gb3B0cy5tdXhlci5hZGRTdHJlYW0oY3R4KTtcbiAgICByZXR1cm4gbmV3IEF1ZGlvRW5jb2RlcihjdHgsIHN0cmVhbSwgb3B0cy5vdXRTYW1wbGVGbXQpO1xuICB9XG5cbiAgc2V0SW5wdXRSYXRlKGluU2FtcGxlUmF0ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5fZ3JhcGg/LltTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICB0aGlzLl9pblJhdGUgPSBpblNhbXBsZVJhdGU7XG4gICAgY29uc3QgZ3JhcGggPSBuZXcgRmlsdGVyR3JhcGgoKTtcbiAgICBncmFwaC5hbGxvYygpO1xuICAgIGNvbnN0IGFidWZmZXIgPSBGaWx0ZXIuZ2V0QnlOYW1lKFwiYWJ1ZmZlclwiKSE7XG4gICAgY29uc3QgYnVmU3JjID0gZ3JhcGguY3JlYXRlRmlsdGVyKFxuICAgICAgYWJ1ZmZlcixcbiAgICAgIFwic3JjXCIsXG4gICAgICBgc2FtcGxlX3JhdGU9JHtpblNhbXBsZVJhdGV9OnNhbXBsZV9mbXQ9Zmx0OmNoYW5uZWxfbGF5b3V0PXN0ZXJlbzp0aW1lX2Jhc2U9MS8ke2luU2FtcGxlUmF0ZX1gLFxuICAgICk7XG4gICAgaWYgKCFidWZTcmMpIHRocm93IG5ldyBFcnJvcihcIkZhaWxlZCB0byBjcmVhdGUgYWJ1ZmZlclwiKTtcbiAgICBjb25zdCBhYnVmZmVyc2luayA9IEZpbHRlci5nZXRCeU5hbWUoXCJhYnVmZmVyc2lua1wiKSE7XG4gICAgY29uc3QgYnVmU2luayA9IGdyYXBoLmNyZWF0ZUZpbHRlcihhYnVmZmVyc2luaywgXCJzaW5rXCIpO1xuICAgIGlmICghYnVmU2luaykgdGhyb3cgbmV3IEVycm9yKFwiRmFpbGVkIHRvIGNyZWF0ZSBhYnVmZmVyc2lua1wiKTtcbiAgICBjb25zdCBmbXROYW1lID0gU0FNUExFX0ZNVF9OQU1FW3RoaXMuX291dEZtdF0gPz8gXCJmbHRcIjtcbiAgICBjb25zdCBmaWx0ZXJEZXNjID0gYGFmb3JtYXQ9c2FtcGxlX2ZtdHM9JHtmbXROYW1lfTpzYW1wbGVfcmF0ZXM9JHt0aGlzLl9vdXRSYXRlfTpjaGFubmVsX2xheW91dHM9c3RlcmVvLGFzZXRuc2FtcGxlcz1uPSR7dGhpcy5fZnJhbWVTaXplfTpwPTFgO1xuICAgIGNvbnN0IG91dHB1dHMgPSBGaWx0ZXJJbk91dC5jcmVhdGVMaXN0KFt7IG5hbWU6IFwiaW5cIiwgZmlsdGVyQ3R4OiBidWZTcmMsIHBhZElkeDogMCB9XSk7XG4gICAgY29uc3QgaW5wdXRzID0gRmlsdGVySW5PdXQuY3JlYXRlTGlzdChbeyBuYW1lOiBcIm91dFwiLCBmaWx0ZXJDdHg6IGJ1ZlNpbmssIHBhZElkeDogMCB9XSk7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGdyYXBoLnBhcnNlUHRyKGZpbHRlckRlc2MsIGlucHV0cywgb3V0cHV0cyksIFwiZ3JhcGgucGFyc2VQdHJcIik7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGdyYXBoLmNvbmZpZ1N5bmMoKSwgXCJncmFwaC5jb25maWdcIik7XG4gICAgdGhpcy5fZ3JhcGggPSBncmFwaDtcbiAgICB0aGlzLl9idWZTcmMgPSBidWZTcmM7XG4gICAgdGhpcy5fYnVmU2luayA9IGJ1ZlNpbms7XG4gIH1cblxuICBhc3luYyBlbmNvZGUocGNtOiBCdWZmZXIsIG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5fYnVmU3JjIHx8ICF0aGlzLl9pblJhdGUpIHJldHVybjtcbiAgICBjb25zdCBzcmMgPSBuZXcgRmxvYXQzMkFycmF5KHBjbS5idWZmZXIsIHBjbS5ieXRlT2Zmc2V0LCBwY20uYnl0ZUxlbmd0aCAvIDQpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3JjLmxlbmd0aDsgaSsrKSBpZiAoIWlzRmluaXRlKHNyY1tpXSEpKSBzcmNbaV0gPSAwO1xuICAgIGNvbnN0IG5TYW1wbGVzID0gc3JjLmxlbmd0aCA+PiAxO1xuICAgIHVzaW5nIGZyYW1lID0gRnJhbWUuZnJvbUF1ZGlvQnVmZmVyKEJ1ZmZlci5mcm9tKHNyYy5idWZmZXIsIHNyYy5ieXRlT2Zmc2V0LCBzcmMuYnl0ZUxlbmd0aCksIHtcbiAgICAgIG5iU2FtcGxlczogblNhbXBsZXMsXG4gICAgICBmb3JtYXQ6IEFWX1NBTVBMRV9GTVRfRkxULFxuICAgICAgc2FtcGxlUmF0ZTogdGhpcy5faW5SYXRlLFxuICAgICAgY2hhbm5lbExheW91dDogQVZfQ0hBTk5FTF9MQVlPVVRfU1RFUkVPLFxuICAgICAgcHRzOiB0aGlzLl9wdHMsXG4gICAgICB0aW1lQmFzZTogeyBudW06IDEsIGRlbjogdGhpcy5faW5SYXRlIH0sXG4gICAgfSk7XG4gICAgdGhpcy5fcHRzICs9IEJpZ0ludChuU2FtcGxlcyk7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IHRoaXMuX2J1ZlNyYy5idWZmZXJzcmNBZGRGcmFtZShmcmFtZSksIFwiYnVmZmVyc3JjQWRkRnJhbWVcIik7XG4gICAgYXdhaXQgdGhpcy5kcmFpbihtdXhlcik7XG4gIH1cblxuICBhc3luYyBmbHVzaChtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fYnVmU3JjKSB7XG4gICAgICBhd2FpdCB0aGlzLl9idWZTcmMuYnVmZmVyc3JjQWRkRnJhbWUobnVsbCk7XG4gICAgICBhd2FpdCB0aGlzLmRyYWluKG11eGVyKTtcbiAgICB9XG4gICAgYXdhaXQgdGhpcy5fY3R4LnNlbmRGcmFtZShudWxsKTtcbiAgICBhd2FpdCB0aGlzLmRyYWluQ29kZWMobXV4ZXIpO1xuICB9XG5cbiAgW1N5bWJvbC5kaXNwb3NlXSgpOiB2b2lkIHtcbiAgICB0aGlzLl9wa3QuZnJlZSgpO1xuICAgIHRoaXMuX2ZpbHRlckZyYW1lLmZyZWUoKTtcbiAgICB0aGlzLl9ncmFwaD8uW1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgIHRoaXMuX2N0eC5mcmVlQ29udGV4dCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBkcmFpbihtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgY29uc3QgciA9IGF3YWl0IHRoaXMuX2J1ZlNpbmshLmJ1ZmZlcnNpbmtHZXRGcmFtZSh0aGlzLl9maWx0ZXJGcmFtZSk7XG4gICAgICBpZiAociA9PT0gQVZFUlJPUl9FQUdBSU4gfHwgciA9PT0gQVZFUlJPUl9FT0YpIGJyZWFrO1xuICAgICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKHIsIFwiYnVmZmVyc2lua0dldEZyYW1lXCIpO1xuICAgICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IHRoaXMuX2N0eC5zZW5kRnJhbWUodGhpcy5fZmlsdGVyRnJhbWUpLCBcImF1ZGlvQ3R4LnNlbmRGcmFtZVwiKTtcbiAgICAgIHRoaXMuX2ZpbHRlckZyYW1lLnVucmVmKCk7XG4gICAgICBhd2FpdCB0aGlzLmRyYWluQ29kZWMobXV4ZXIpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZHJhaW5Db2RlYyhtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gZHJhaW5QYWNrZXRzKHRoaXMuX2N0eCwgdGhpcy5fcGt0LCB0aGlzLl9zdHJlYW0sIG11eGVyKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8xMy5cblxuZXhwb3J0IGZ1bmN0aW9uIHBhY2tCaXRzKGJpdHM6IG51bWJlcltdKTogQnVmZmVyIHtcbiAgY29uc3QgYnVmID0gQnVmZmVyLmFsbG9jKGJpdHMubGVuZ3RoID4+IDMpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGJ1Zi5sZW5ndGg7IGkrKykge1xuICAgIGxldCBieXRlID0gMDtcbiAgICBmb3IgKGxldCBiID0gMDsgYiA8IDg7IGIrKykgYnl0ZSA9IChieXRlIDw8IDEpIHwgYml0c1tpICogOCArIGJdITtcbiAgICBidWZbaV0gPSBieXRlO1xuICB9XG4gIHJldHVybiBidWY7XG59XG5cbmV4cG9ydCBjbGFzcyBCaXRXcml0ZXIge1xuICBiaXRzOiBudW1iZXJbXSA9IFtdO1xuICB3KHZhbDogbnVtYmVyLCBuOiBudW1iZXIpIHtcbiAgICBmb3IgKGxldCBpID0gbiAtIDE7IGkgPj0gMDsgaS0tKSB0aGlzLmJpdHMucHVzaCgodmFsID4+IGkpICYgMSk7XG4gIH1cbiAgZmxhZyh2YWw6IGJvb2xlYW4gfCBudW1iZXIpIHtcbiAgICB0aGlzLmJpdHMucHVzaCh2YWwgPyAxIDogMCk7XG4gIH1cbiAgdWUodmFsOiBudW1iZXIpIHtcbiAgICBjb25zdCB2ID0gdmFsICsgMTtcbiAgICBjb25zdCBsZW4gPSAzMiAtIE1hdGguY2x6MzIodik7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW4gLSAxOyBpKyspIHRoaXMuYml0cy5wdXNoKDApO1xuICAgIGZvciAobGV0IGkgPSBsZW4gLSAxOyBpID49IDA7IGktLSkgdGhpcy5iaXRzLnB1c2goKHYgPj4gaSkgJiAxKTtcbiAgfVxuICBhbGlnbihwYWQ6IG51bWJlcikge1xuICAgIHdoaWxlICh0aGlzLmJpdHMubGVuZ3RoICUgOCAhPT0gMCkgdGhpcy5iaXRzLnB1c2gocGFkKTtcbiAgfVxuICBjb3B5KHNyYzogbnVtYmVyW10sIHN0YXJ0OiBudW1iZXIsIGxlbjogbnVtYmVyKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykgdGhpcy5iaXRzLnB1c2goc3JjW3N0YXJ0ICsgaV0hKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQml0UmVhZGVyIHtcbiAgcHJpdmF0ZSBfYml0czogbnVtYmVyW107XG4gIHBvcyA9IDA7XG4gIGNvbnN0cnVjdG9yKGRhdGE6IEJ1ZmZlcikge1xuICAgIHRoaXMuX2JpdHMgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGIgPSA3OyBiID49IDA7IGItLSkgdGhpcy5fYml0cy5wdXNoKChkYXRhW2ldISA+PiBiKSAmIDEpO1xuICAgIH1cbiAgfVxuICBnZXQgYml0cygpIHtcbiAgICByZXR1cm4gdGhpcy5fYml0cztcbiAgfVxuICByZWFkKG46IG51bWJlcik6IG51bWJlciB7XG4gICAgbGV0IHZhbCA9IDA7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuOyBpKyspIHZhbCA9ICh2YWwgPDwgMSkgfCB0aGlzLl9iaXRzW3RoaXMucG9zKytdITtcbiAgICByZXR1cm4gdmFsO1xuICB9XG4gIHJlYWRVZSgpOiBudW1iZXIge1xuICAgIGxldCB6ZXJvcyA9IDA7XG4gICAgd2hpbGUgKHRoaXMuX2JpdHNbdGhpcy5wb3NdID09PSAwKSB7XG4gICAgICB6ZXJvcysrO1xuICAgICAgdGhpcy5wb3MrKztcbiAgICB9XG4gICAgdGhpcy5wb3MrKztcbiAgICBsZXQgdmFsID0gMTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHplcm9zOyBpKyspIHZhbCA9ICh2YWwgPDwgMSkgfCB0aGlzLl9iaXRzW3RoaXMucG9zKytdITtcbiAgICByZXR1cm4gdmFsIC0gMTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8xMi5cblxuY29uc3QgTkFMX0hFQURFUl9TSVpFID0gMjtcbmNvbnN0IEFOTkVYX0JfU1RBUlRfQ09ERSA9IEJ1ZmZlci5mcm9tKFsweDAwLCAweDAwLCAweDAwLCAweDAxXSk7XG5cbmV4cG9ydCB7IEFOTkVYX0JfU1RBUlRfQ09ERSwgTkFMX0hFQURFUl9TSVpFIH07XG5cbi8vIEhFVkMgTkFMIHVuaXQgdHlwZXMgKFQtUkVDLUguMjY1IFRhYmxlIDctMSlcbmV4cG9ydCBjb25zdCBOQUxfQkxBX1dfTFAgPSAxNjtcbmV4cG9ydCBjb25zdCBOQUxfSURSX1dfUkFETCA9IDE5O1xuZXhwb3J0IGNvbnN0IE5BTF9JRFJfTl9MUCA9IDIwO1xuZXhwb3J0IGNvbnN0IE5BTF9SU1ZfSVJBUF9WQ0wyMyA9IDIzO1xuZXhwb3J0IGNvbnN0IE5BTF9WUFMgPSAzMjtcbmV4cG9ydCBjb25zdCBOQUxfU1BTID0gMzM7XG5leHBvcnQgY29uc3QgTkFMX1BQUyA9IDM0O1xuZXhwb3J0IGNvbnN0IE5BTF9TRUlfUFJFRklYID0gMzk7XG5leHBvcnQgY29uc3QgTkFMX1NFSV9TVUZGSVggPSA0MDtcblxuZXhwb3J0IGludGVyZmFjZSBOYWxVbml0IHtcbiAgdHlwZTogbnVtYmVyO1xuICBsYXllcklkOiBudW1iZXI7XG4gIGRhdGE6IEJ1ZmZlcjtcbn1cblxuZnVuY3Rpb24gcGFyc2VOYWxUeXBlKGhlYWRlcjA6IG51bWJlciwgaGVhZGVyMTogbnVtYmVyKTogeyB0eXBlOiBudW1iZXI7IGxheWVySWQ6IG51bWJlcjsgdGVtcG9yYWxJZDogbnVtYmVyIH0ge1xuICBjb25zdCB0eXBlID0gKGhlYWRlcjAgPj4gMSkgJiAweDNmO1xuICBjb25zdCBsYXllcklkID0gKChoZWFkZXIwICYgMSkgPDwgNSkgfCAoKGhlYWRlcjEgPj4gMykgJiAweDFmKTtcbiAgY29uc3QgdGVtcG9yYWxJZCA9IGhlYWRlcjEgJiAweDA3O1xuICByZXR1cm4geyB0eXBlLCBsYXllcklkLCB0ZW1wb3JhbElkIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbmNvZGVOYWxIZWFkZXIodHlwZTogbnVtYmVyLCBsYXllcklkOiBudW1iZXIsIHRlbXBvcmFsSWQ6IG51bWJlcik6IFtudW1iZXIsIG51bWJlcl0ge1xuICBjb25zdCBieXRlMCA9ICgodHlwZSAmIDB4M2YpIDw8IDEpIHwgKChsYXllcklkID4+IDUpICYgMSk7XG4gIGNvbnN0IGJ5dGUxID0gKChsYXllcklkICYgMHgxZikgPDwgMykgfCAodGVtcG9yYWxJZCAmIDB4MDcpO1xuICByZXR1cm4gW2J5dGUwLCBieXRlMV07XG59XG5cbi8qKiBTcGxpdCBBbm5leCBCIGJpdHN0cmVhbSBpbnRvIE5BTCB1bml0cy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzcGxpdE5hbFVuaXRzKGJpdHN0cmVhbTogQnVmZmVyKTogTmFsVW5pdFtdIHtcbiAgY29uc3QgbmFsczogTmFsVW5pdFtdID0gW107XG4gIGxldCBpID0gMDtcblxuICB3aGlsZSAoaSA8IGJpdHN0cmVhbS5sZW5ndGgpIHtcbiAgICBsZXQgc2NMZW4gPSAwO1xuICAgIGlmIChpICsgMyA8IGJpdHN0cmVhbS5sZW5ndGggJiYgYml0c3RyZWFtW2ldID09PSAwICYmIGJpdHN0cmVhbVtpICsgMV0gPT09IDAgJiYgYml0c3RyZWFtW2kgKyAyXSA9PT0gMSkge1xuICAgICAgc2NMZW4gPSAzO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICBpICsgNCA8IGJpdHN0cmVhbS5sZW5ndGggJiZcbiAgICAgIGJpdHN0cmVhbVtpXSA9PT0gMCAmJlxuICAgICAgYml0c3RyZWFtW2kgKyAxXSA9PT0gMCAmJlxuICAgICAgYml0c3RyZWFtW2kgKyAyXSA9PT0gMCAmJlxuICAgICAgYml0c3RyZWFtW2kgKyAzXSA9PT0gMVxuICAgICkge1xuICAgICAgc2NMZW4gPSA0O1xuICAgIH0gZWxzZSB7XG4gICAgICBpKys7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCBuYWxTdGFydCA9IGkgKyBzY0xlbjtcbiAgICBpZiAobmFsU3RhcnQgKyBOQUxfSEVBREVSX1NJWkUgPiBiaXRzdHJlYW0ubGVuZ3RoKSBicmVhaztcblxuICAgIGxldCBuYWxFbmQgPSBiaXRzdHJlYW0ubGVuZ3RoO1xuICAgIGZvciAobGV0IGogPSBuYWxTdGFydCArIE5BTF9IRUFERVJfU0laRTsgaiA8IGJpdHN0cmVhbS5sZW5ndGggLSAyOyBqKyspIHtcbiAgICAgIGlmIChcbiAgICAgICAgYml0c3RyZWFtW2pdID09PSAwICYmXG4gICAgICAgIGJpdHN0cmVhbVtqICsgMV0gPT09IDAgJiZcbiAgICAgICAgKGJpdHN0cmVhbVtqICsgMl0gPT09IDEgfHwgKGogKyAzIDwgYml0c3RyZWFtLmxlbmd0aCAmJiBiaXRzdHJlYW1baiArIDJdID09PSAwICYmIGJpdHN0cmVhbVtqICsgM10gPT09IDEpKVxuICAgICAgKSB7XG4gICAgICAgIG5hbEVuZCA9IGo7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHsgdHlwZSwgbGF5ZXJJZCB9ID0gcGFyc2VOYWxUeXBlKGJpdHN0cmVhbVtuYWxTdGFydF0hLCBiaXRzdHJlYW1bbmFsU3RhcnQgKyAxXSEpO1xuICAgIG5hbHMucHVzaCh7IHR5cGUsIGxheWVySWQsIGRhdGE6IGJpdHN0cmVhbS5zdWJhcnJheShuYWxTdGFydCwgbmFsRW5kKSB9KTtcbiAgICBpID0gbmFsRW5kO1xuICB9XG5cbiAgcmV0dXJuIG5hbHM7XG59XG5cbi8qKiBSZXdyaXRlIG51aF9sYXllcl9pZCBpbiBhIE5BTCB1bml0IChyZXR1cm5zIGNvcHkpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJld3JpdGVOYWxMYXllcklkKG5hbDogQnVmZmVyLCBsYXllcklkOiBudW1iZXIpOiBCdWZmZXIge1xuICBjb25zdCBvdXQgPSBCdWZmZXIuZnJvbShuYWwpO1xuICBjb25zdCB7IHR5cGUsIHRlbXBvcmFsSWQgfSA9IHBhcnNlTmFsVHlwZShvdXRbMF0hLCBvdXRbMV0hKTtcbiAgY29uc3QgW2IwLCBiMV0gPSBlbmNvZGVOYWxIZWFkZXIodHlwZSwgbGF5ZXJJZCwgdGVtcG9yYWxJZCk7XG4gIG91dFswXSA9IGIwO1xuICBvdXRbMV0gPSBiMTtcbiAgcmV0dXJuIG91dDtcbn1cblxuLyoqIFJld3JpdGUgbmFsX3VuaXRfdHlwZSBpbiBhIE5BTCB1bml0IChyZXR1cm5zIGNvcHkpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJld3JpdGVOYWxUeXBlKG5hbDogQnVmZmVyLCBuZXdUeXBlOiBudW1iZXIpOiBCdWZmZXIge1xuICBjb25zdCBvdXQgPSBCdWZmZXIuZnJvbShuYWwpO1xuICBjb25zdCB7IGxheWVySWQsIHRlbXBvcmFsSWQgfSA9IHBhcnNlTmFsVHlwZShvdXRbMF0hLCBvdXRbMV0hKTtcbiAgY29uc3QgW2IwLCBiMV0gPSBlbmNvZGVOYWxIZWFkZXIobmV3VHlwZSwgbGF5ZXJJZCwgdGVtcG9yYWxJZCk7XG4gIG91dFswXSA9IGIwO1xuICBvdXRbMV0gPSBiMTtcbiAgcmV0dXJuIG91dDtcbn1cblxuLyoqIFJlbW92ZSBlbXVsYXRpb24gcHJldmVudGlvbiBieXRlcyAoMDAgMDAgMDMg4oaSIDAwIDAwKSBmcm9tIFJCU1AuICovXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlRW11bGF0aW9uUHJldmVudGlvbihkYXRhOiBCdWZmZXIpOiBCdWZmZXIge1xuICBjb25zdCBvdXQ6IG51bWJlcltdID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkrKykge1xuICAgIGlmIChpICsgMiA8IGRhdGEubGVuZ3RoICYmIGRhdGFbaV0gPT09IDAgJiYgZGF0YVtpICsgMV0gPT09IDAgJiYgZGF0YVtpICsgMl0gPT09IDMpIHtcbiAgICAgIG91dC5wdXNoKDAsIDApO1xuICAgICAgaSArPSAyO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXQucHVzaChkYXRhW2ldISk7XG4gICAgfVxuICB9XG4gIHJldHVybiBCdWZmZXIuZnJvbShvdXQpO1xufVxuXG4vKiogSW5zZXJ0IGVtdWxhdGlvbiBwcmV2ZW50aW9uIGJ5dGVzICgwMCAwMCAwMykgZm9yIEFubmV4IEIgY29tcGxpYW5jZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGRFbXVsYXRpb25QcmV2ZW50aW9uKG5hbDogQnVmZmVyKTogQnVmZmVyIHtcbiAgY29uc3Qgb3V0OiBudW1iZXJbXSA9IFtdO1xuICBvdXQucHVzaChuYWxbMF0hLCBuYWxbMV0hKTtcbiAgbGV0IHplcm9zID0gMDtcbiAgZm9yIChsZXQgaSA9IDI7IGkgPCBuYWwubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoemVyb3MgPT09IDIgJiYgbmFsW2ldISA8PSAzKSB7XG4gICAgICBvdXQucHVzaCgzKTtcbiAgICAgIHplcm9zID0gMDtcbiAgICB9XG4gICAgaWYgKG5hbFtpXSA9PT0gMCkgemVyb3MrKztcbiAgICBlbHNlIHplcm9zID0gMDtcbiAgICBvdXQucHVzaChuYWxbaV0hKTtcbiAgfVxuICByZXR1cm4gQnVmZmVyLmZyb20ob3V0KTtcbn1cbiIsIi8vIFBhdGNoIE5WRU5DIG91dHB1dCB0byBjb25mb3JtIHRvIEFwcGxlIEhFVkMgVmlkZW8gd2l0aCBBbHBoYSBJbnRlcm9wZXJhYmlsaXR5IFByb2ZpbGUuXG4vLyBTcGVjOiBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vYXYtZm91bmRhdGlvbi9IRVZDLVZpZGVvLXdpdGgtQWxwaGEtSW50ZXJvcGVyYWJpbGl0eS1Qcm9maWxlLnBkZlxuLy8gU2xpY2UgcGFyc2VyIGlzIGNvbmZpZy1kcml2ZW46IE52ZW5jSGV2Y0NvbmZpZyBmcm9tIHBhcnNlLnRzIGRlcml2ZXMgZmxhZ3MgYXQgZW5jb2RlciBpbml0LlxuXG5pbXBvcnQgeyBCaXRSZWFkZXIsIEJpdFdyaXRlciwgcGFja0JpdHMgfSBmcm9tIFwiLi9iaXRcIjtcbmltcG9ydCB7XG4gIEFOTkVYX0JfU1RBUlRfQ09ERSxcbiAgYWRkRW11bGF0aW9uUHJldmVudGlvbixcbiAgTkFMX0JMQV9XX0xQLFxuICBOQUxfUlNWX0lSQVBfVkNMMjMsXG4gIE5BTF9TUFMsXG4gIE5BTF9WUFMsXG4gIHJlbW92ZUVtdWxhdGlvblByZXZlbnRpb24sXG4gIHNwbGl0TmFsVW5pdHMsXG59IGZyb20gXCIuL25hbFwiO1xuaW1wb3J0IHR5cGUgeyBOdmVuY0hldmNDb25maWcgfSBmcm9tIFwiLi9wYXJzZXJcIjtcblxuLy8gUFRMIGJpdCBvZmZzZXRzIHdpdGhpbiBlbXVsYXRpb24tcHJldmVudGlvbi1zdHJpcHBlZCBOQUwgKE5BTCBoZWFkZXIgaW5jbHVkZWQpLlxuY29uc3QgVlBTX1BUTF9CSVQgPSA0ODsgLy8gMTYgKE5BTCBoZHIpICsgMzIgKFZQUyBwcmVmaXgpXG5jb25zdCBTUFNfUFRMX0JJVCA9IDI0OyAvLyAxNiAoTkFMIGhkcikgKyA4IChTUFMgcHJlZml4KVxuY29uc3QgUFRMX1RJRVJfQklUID0gMjtcbmNvbnN0IFBUTF9DT01QQVQyX0JJVCA9IDEwOyAvLyBwcm9maWxlX3NwYWNlKDIpICsgdGllcigxKSArIGlkYyg1KSArIGNvbXBhdFswLDFdKDIpXG5jb25zdCBTTElDRV9UWVBFX0IgPSAwO1xuY29uc3QgU0xJQ0VfVFlQRV9QID0gMTtcblxuZnVuY3Rpb24gc2V0Qml0KGJ1ZjogQnVmZmVyLCBiaXRPZmZzZXQ6IG51bWJlciwgdmFsdWU6IDAgfCAxKTogdm9pZCB7XG4gIGNvbnN0IGJ5dGUgPSBiaXRPZmZzZXQgPj4gMztcbiAgY29uc3QgbWFzayA9IDEgPDwgKDcgLSAoYml0T2Zmc2V0ICYgNykpO1xuICBjb25zdCBjdXIgPSBidWZbYnl0ZV0gPz8gMDtcbiAgYnVmW2J5dGVdID0gdmFsdWUgPyBjdXIgfCBtYXNrIDogY3VyICYgfm1hc2s7XG59XG5cbmZ1bmN0aW9uIHBhdGNoUHRsKG5hbERhdGE6IEJ1ZmZlciwgcHRsU3RhcnRCaXQ6IG51bWJlcik6IEJ1ZmZlciB7XG4gIGNvbnN0IHJic3AgPSByZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uKG5hbERhdGEpO1xuICBzZXRCaXQocmJzcCwgcHRsU3RhcnRCaXQgKyBQVExfVElFUl9CSVQsIDApO1xuICBzZXRCaXQocmJzcCwgcHRsU3RhcnRCaXQgKyBQVExfQ09NUEFUMl9CSVQsIDEpO1xuICByZXR1cm4gYWRkRW11bGF0aW9uUHJldmVudGlvbihyYnNwKTtcbn1cblxuLyoqIFBhdGNoIGV2ZXJ5IFZQUy9TUFMgTkFMIGluIGFuIEFubmV4IEIgYml0c3RyZWFtIHNvIFBUTCBtYXRjaGVzIEFwcGxlL3gyNjUuICovXG5leHBvcnQgZnVuY3Rpb24gcGF0Y2hIZXZjQWxwaGFQdGwoYml0c3RyZWFtOiBCdWZmZXIpOiBCdWZmZXIge1xuICBjb25zdCBuYWxzID0gc3BsaXROYWxVbml0cyhiaXRzdHJlYW0pO1xuICBpZiAobmFscy5sZW5ndGggPT09IDApIHJldHVybiBiaXRzdHJlYW07XG4gIGNvbnN0IGNodW5rczogQnVmZmVyW10gPSBbXTtcbiAgZm9yIChjb25zdCBuYWwgb2YgbmFscykge1xuICAgIGxldCBkYXRhID0gbmFsLmRhdGE7XG4gICAgaWYgKG5hbC50eXBlID09PSBOQUxfVlBTKSBkYXRhID0gcGF0Y2hQdGwobmFsLmRhdGEsIFZQU19QVExfQklUKTtcbiAgICBlbHNlIGlmIChuYWwudHlwZSA9PT0gTkFMX1NQUykgZGF0YSA9IHBhdGNoUHRsKG5hbC5kYXRhLCBTUFNfUFRMX0JJVCk7XG4gICAgY2h1bmtzLnB1c2goQU5ORVhfQl9TVEFSVF9DT0RFLCBkYXRhKTtcbiAgfVxuICByZXR1cm4gQnVmZmVyLmNvbmNhdChjaHVua3MpO1xufVxuXG4vLyDilIDilIDilIAgdWUodikgcmV3cml0ZSBoZWxwZXJzIChTUFMvUFBTIOKAlCBSQlNQIGNhbiBncm93IGZyZWVseSwgbm8gQ0FCQUMgdHJhaWxpbmcpIOKUgOKUgFxuXG5mdW5jdGlvbiByZXdyaXRlT25lVWUobmFsSW46IEJ1ZmZlciwgYml0T2Zmc2V0OiBudW1iZXIsIG5ld1ZhbDogbnVtYmVyKTogQnVmZmVyIHtcbiAgY29uc3QgcmJzcCA9IHJlbW92ZUVtdWxhdGlvblByZXZlbnRpb24obmFsSW4pO1xuICBjb25zdCBiciA9IG5ldyBCaXRSZWFkZXIocmJzcCk7XG4gIGNvbnN0IGJ3ID0gbmV3IEJpdFdyaXRlcigpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGJpdE9mZnNldDsgaSsrKSBidy5iaXRzLnB1c2goYnIucmVhZCgxKSk7XG4gIGJyLnJlYWRVZSgpO1xuICBidy51ZShuZXdWYWwpO1xuICB3aGlsZSAoYnIucG9zIDwgYnIuYml0cy5sZW5ndGgpIGJ3LmJpdHMucHVzaChici5yZWFkKDEpKTtcbiAgd2hpbGUgKGJ3LmJpdHMubGVuZ3RoICUgOCAhPT0gMCkgYncuYml0cy5wdXNoKDApO1xuICByZXR1cm4gYWRkRW11bGF0aW9uUHJldmVudGlvbihwYWNrQml0cyhidy5iaXRzKSk7XG59XG5cbmZ1bmN0aW9uIHJld3JpdGVUd29VZShuYWxJbjogQnVmZmVyLCBiaXRPZmZzZXQ6IG51bWJlciwgbmV3VmFsMTogbnVtYmVyLCBuZXdWYWwyOiBudW1iZXIpOiBCdWZmZXIge1xuICBjb25zdCByYnNwID0gcmVtb3ZlRW11bGF0aW9uUHJldmVudGlvbihuYWxJbik7XG4gIGNvbnN0IGJyID0gbmV3IEJpdFJlYWRlcihyYnNwKTtcbiAgY29uc3QgYncgPSBuZXcgQml0V3JpdGVyKCk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYml0T2Zmc2V0OyBpKyspIGJ3LmJpdHMucHVzaChici5yZWFkKDEpKTtcbiAgYnIucmVhZFVlKCk7XG4gIGJyLnJlYWRVZSgpO1xuICBidy51ZShuZXdWYWwxKTtcbiAgYncudWUobmV3VmFsMik7XG4gIHdoaWxlIChici5wb3MgPCBici5iaXRzLmxlbmd0aCkgYncuYml0cy5wdXNoKGJyLnJlYWQoMSkpO1xuICB3aGlsZSAoYncuYml0cy5sZW5ndGggJSA4ICE9PSAwKSBidy5iaXRzLnB1c2goMCk7XG4gIHJldHVybiBhZGRFbXVsYXRpb25QcmV2ZW50aW9uKHBhY2tCaXRzKGJ3LmJpdHMpKTtcbn1cblxuLyoqIEFscGhhIFNQUzogc3BzX3NlcV9wYXJhbWV0ZXJfc2V0X2lkIDAg4oaSIDEuICovXG5leHBvcnQgZnVuY3Rpb24gcmV3cml0ZUFscGhhU3BzKHNwczogQnVmZmVyKTogQnVmZmVyIHtcbiAgY29uc3QgU1BTX1NFUV9JRF9CSVQgPSBTUFNfUFRMX0JJVCArIDk2OyAvLyBQVEwgaXMgOTYgYml0cyBmb3Igb3VyIHByb2ZpbGUgY29uZmlnXG4gIHJldHVybiByZXdyaXRlT25lVWUoc3BzLCBTUFNfU0VRX0lEX0JJVCwgMSk7XG59XG5cbi8qKiBBbHBoYSBQUFM6IHBwc19waWNfcGFyYW1ldGVyX3NldF9pZCAwIOKGkiAxLCBwcHNfc2VxX3BhcmFtZXRlcl9zZXRfaWQgMCDihpIgMS4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXdyaXRlQWxwaGFQcHMocHBzOiBCdWZmZXIpOiBCdWZmZXIge1xuICByZXR1cm4gcmV3cml0ZVR3b1VlKHBwcywgMTYgLyogYWZ0ZXIgTkFMIGhlYWRlciAqLywgMSwgMSk7XG59XG5cbi8vIOKUgOKUgOKUgCBTbGljZSBoZWFkZXIgcmV3cml0ZSAobXVzdCBwcmVzZXJ2ZSBDQUJBQyBieXRlIGFsaWdubWVudCkg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmZ1bmN0aW9uIHJlYWRTZShicjogQml0UmVhZGVyKTogbnVtYmVyIHtcbiAgY29uc3QgdWUgPSBici5yZWFkVWUoKTtcbiAgcmV0dXJuIHVlICYgMSA/ICh1ZSArIDEpID4+IDEgOiAtKHVlID4+IDEpO1xufVxuXG4vLyBJbmxpbmUgc3RfcmVmX3BpY19zZXQgd2hlbiBzbGljZSBoYXMgc2hvcnRfdGVybV9yZWZfcGljX3NldF9zcHNfZmxhZz0wLlxuLy8gc3RScHNJZHggPSBudW1fc2hvcnRfdGVybV9yZWZfcGljX3NldHMgc28gaW50ZXJfcmVmX3BpY19zZXRfcHJlZGljdGlvbiBtYXkgdXNlIHByZXYgc2V0LlxuZnVuY3Rpb24gcGFyc2VJbmxpbmVTdFJlZlBpY1NldChicjogQml0UmVhZGVyLCBudW1EZWx0YVBvY3NTZXQwOiBudW1iZXIpOiB2b2lkIHtcbiAgY29uc3QgaW50ZXJGbGFnID0gYnIucmVhZCgxKTsgLy8gaW50ZXJfcmVmX3BpY19zZXRfcHJlZGljdGlvbl9mbGFnXG4gIGlmIChpbnRlckZsYWcpIHtcbiAgICBjb25zdCBkZWx0YUlkeE1pbnVzMSA9IGJyLnJlYWRVZSgpOyAvLyBzdFJwc0lkeCA9PSBudW1fc2hvcnRfdGVybV9yZWZfcGljX3NldHMg4oaSIHByZXNlbnRcbiAgICBpZiAoZGVsdGFJZHhNaW51czEgIT09IDApIHRocm93IG5ldyBFcnJvcihgYXBwbGVfYWxwaGE6IHVuZXhwZWN0ZWQgZGVsdGFfaWR4X21pbnVzMT0ke2RlbHRhSWR4TWludXMxfWApO1xuICAgIGJyLnJlYWQoMSk7IC8vIGRlbHRhX3Jwc19zaWduXG4gICAgYnIucmVhZFVlKCk7IC8vIGFic19kZWx0YV9ycHNfbWludXMxXG4gICAgZm9yIChsZXQgaiA9IDA7IGogPD0gbnVtRGVsdGFQb2NzU2V0MDsgaisrKSB7XG4gICAgICBjb25zdCB1c2VkID0gYnIucmVhZCgxKTtcbiAgICAgIGlmICghdXNlZCkgYnIucmVhZCgxKTsgLy8gdXNlX2RlbHRhX2ZsYWdcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgbnVtTmVnID0gYnIucmVhZFVlKCk7XG4gICAgY29uc3QgbnVtUG9zID0gYnIucmVhZFVlKCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1OZWc7IGkrKykgeyBici5yZWFkVWUoKTsgYnIucmVhZCgxKTsgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtUG9zOyBpKyspIHsgYnIucmVhZFVlKCk7IGJyLnJlYWQoMSk7IH1cbiAgfVxufVxuXG4vKiogUGFyc2Ugc2xpY2Vfc2VnbWVudF9oZWFkZXIgdXAgdG8gYnl0ZV9hbGlnbm1lbnQuIFJldHVybnMgYml0IHBvc2l0aW9uIEIgKGVuZCBvZiBoZWFkZXIgY29udGVudCkuICovXG5mdW5jdGlvbiBwYXJzZUhlYWRlclRvQWxpZ25tZW50KGJyOiBCaXRSZWFkZXIsIG5hbFR5cGU6IG51bWJlciwgY2ZnOiBOdmVuY0hldmNDb25maWcpOiBudW1iZXIge1xuICBici5yZWFkKDE2KTsgLy8gc2tpcCBOQUwgaGVhZGVyXG4gIGlmIChici5yZWFkKDEpICE9PSAxKSB0aHJvdyBuZXcgRXJyb3IoXCJhcHBsZV9hbHBoYTogZXhwZWN0ZWQgZmlyc3Rfc2xpY2Vfc2VnbWVudF9pbl9waWNfZmxhZz0xXCIpO1xuICBjb25zdCBpc0lyYXAgPSBuYWxUeXBlID49IE5BTF9CTEFfV19MUCAmJiBuYWxUeXBlIDw9IE5BTF9SU1ZfSVJBUF9WQ0wyMztcbiAgaWYgKGlzSXJhcCkgYnIucmVhZCgxKTsgLy8gbm9fb3V0cHV0X29mX3ByaW9yX3BpY3NfZmxhZ1xuICBici5yZWFkVWUoKTsgLy8gc2xpY2VfcGljX3BhcmFtZXRlcl9zZXRfaWRcbiAgY29uc3Qgc2xpY2VUeXBlID0gYnIucmVhZFVlKCk7XG4gIGlmICghaXNJcmFwKSB7XG4gICAgYnIucmVhZChjZmcubG9nMk1heFBvY0xzYik7IC8vIHNsaWNlX3BpY19vcmRlcl9jbnRfbHNiXG4gICAgY29uc3Qgc3RSZWZQaWNTZXRTcHNGbGFnID0gYnIucmVhZCgxKTtcbiAgICBpZiAoIXN0UmVmUGljU2V0U3BzRmxhZykgcGFyc2VJbmxpbmVTdFJlZlBpY1NldChiciwgY2ZnLm51bURlbHRhUG9jc1NldDApO1xuICAgIGVsc2UgaWYgKGNmZy5udW1TaG9ydFRlcm1SZWZQaWNTZXRzID4gMSkgYnIucmVhZChNYXRoLmNlaWwoTWF0aC5sb2cyKGNmZy5udW1TaG9ydFRlcm1SZWZQaWNTZXRzKSkpO1xuICAgIGlmIChjZmcubG9uZ1Rlcm1SZWZQaWNzUHJlc2VudCkgdGhyb3cgbmV3IEVycm9yKFwiYXBwbGVfYWxwaGE6IGxvbmdfdGVybV9yZWZfcGljcyBwYXRoIHVuaW1wbGVtZW50ZWRcIik7XG4gICAgaWYgKGNmZy5zcHNUZW1wb3JhbE12cEVuYWJsZWQpIGJyLnJlYWQoMSk7IC8vIHNsaWNlX3RlbXBvcmFsX212cF9lbmFibGVkX2ZsYWdcbiAgfVxuICBpZiAoY2ZnLnNhb0VuYWJsZWQpIHtcbiAgICBici5yZWFkKDEpOyAvLyBzbGljZV9zYW9fbHVtYV9mbGFnXG4gICAgYnIucmVhZCgxKTsgLy8gc2xpY2Vfc2FvX2Nocm9tYV9mbGFnXG4gIH1cbiAgaWYgKHNsaWNlVHlwZSA9PT0gU0xJQ0VfVFlQRV9QIHx8IHNsaWNlVHlwZSA9PT0gU0xJQ0VfVFlQRV9CKSB7XG4gICAgY29uc3Qgb3ZlcnJpZGVGbGFnID0gYnIucmVhZCgxKTtcbiAgICBpZiAob3ZlcnJpZGVGbGFnKSB7XG4gICAgICBici5yZWFkVWUoKTtcbiAgICAgIGlmIChzbGljZVR5cGUgPT09IFNMSUNFX1RZUEVfQikgYnIucmVhZFVlKCk7XG4gICAgfVxuICAgIGlmIChzbGljZVR5cGUgPT09IFNMSUNFX1RZUEVfQikgYnIucmVhZCgxKTsgLy8gbXZkX2wxX3plcm9fZmxhZ1xuICAgIGlmIChjZmcuY2FiYWNJbml0UHJlc2VudCkgYnIucmVhZCgxKTsgLy8gY2FiYWNfaW5pdF9mbGFnXG4gICAgYnIucmVhZFVlKCk7IC8vIGZpdmVfbWludXNfbWF4X251bV9tZXJnZV9jYW5kXG4gIH1cbiAgcmVhZFNlKGJyKTsgLy8gc2xpY2VfcXBfZGVsdGFcbiAgaWYgKGNmZy5wcHNIYXNMb29wRmlsdGVyQWNyb3NzU2xpY2VzRmxhZykgYnIucmVhZCgxKTsgLy8gc2xpY2VfbG9vcF9maWx0ZXJfYWNyb3NzX3NsaWNlc19lbmFibGVkX2ZsYWdcbiAgcmV0dXJuIGJyLnBvcztcbn1cblxuLyoqXG4gKiBSZXdyaXRlIGFscGhhIHNsaWNlIGhlYWRlcjogc2xpY2VfcGljX3BhcmFtZXRlcl9zZXRfaWQgMCDihpIgMS5cbiAqIFRoZSArMi1iaXQgc2hpZnQgaXMgYWJzb3JiZWQgYnkgZW1pdHRpbmcgYSBmcmVzaCBieXRlX2FsaWdubWVudCB0aGVuIGFwcGVuZGluZyB0aGVcbiAqIG9yaWdpbmFsIENBQkFDIHNsaWNlX3NlZ21lbnRfZGF0YSBieXRlcyB2ZXJiYXRpbS4gQ0FCQUMgYnl0ZSBib3VuZGFyeSBpcyBwcmVzZXJ2ZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXdyaXRlQWxwaGFTbGljZUhlYWRlcihzbGljZTogQnVmZmVyLCBuYWxUeXBlOiBudW1iZXIsIGNmZzogTnZlbmNIZXZjQ29uZmlnKTogQnVmZmVyIHtcbiAgY29uc3QgcmJzcCA9IHJlbW92ZUVtdWxhdGlvblByZXZlbnRpb24oc2xpY2UpO1xuICBjb25zdCBiciA9IG5ldyBCaXRSZWFkZXIocmJzcCk7XG5cbiAgY29uc3QgcHJvYmUgPSBuZXcgQml0UmVhZGVyKHJic3ApO1xuICBjb25zdCBCID0gcGFyc2VIZWFkZXJUb0FsaWdubWVudChwcm9iZSwgbmFsVHlwZSwgY2ZnKTtcbiAgY29uc3Qgb2xkQWxpZ25CaXRzID0gQiAlIDggPT09IDAgPyA4IDogOCAtIChCICUgOCk7XG4gIGNvbnN0IHNsaWNlRGF0YUJ5dGVPZmZzZXQgPSAoQiArIG9sZEFsaWduQml0cykgLyA4O1xuXG4gIGNvbnN0IGJ3ID0gbmV3IEJpdFdyaXRlcigpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IDE2OyBpKyspIGJ3LmJpdHMucHVzaChici5yZWFkKDEpKTsgLy8gTkFMIGhlYWRlclxuICBidy5iaXRzLnB1c2goYnIucmVhZCgxKSk7IC8vIGZpcnN0X3NsaWNlX3NlZ21lbnRfaW5fcGljX2ZsYWdcbiAgY29uc3QgaXNJcmFwID0gbmFsVHlwZSA+PSBOQUxfQkxBX1dfTFAgJiYgbmFsVHlwZSA8PSBOQUxfUlNWX0lSQVBfVkNMMjM7XG4gIGlmIChpc0lyYXApIGJ3LmJpdHMucHVzaChici5yZWFkKDEpKTsgLy8gbm9fb3V0cHV0X29mX3ByaW9yX3BpY3NfZmxhZ1xuXG4gIGJyLnJlYWRVZSgpOyAvLyBkaXNjYXJkIG9sZCBzbGljZV9waWNfcGFyYW1ldGVyX3NldF9pZFxuICBidy51ZSgxKTsgLy8gbmV3IHNsaWNlX3BpY19wYXJhbWV0ZXJfc2V0X2lkXG5cbiAgd2hpbGUgKGJyLnBvcyA8IEIpIGJ3LmJpdHMucHVzaChici5yZWFkKDEpKTsgLy8gY29weSByZXN0IG9mIGhlYWRlciBiaXRzXG5cbiAgYncuYml0cy5wdXNoKDEpOyAvLyBieXRlX2FsaWdubWVudDogcmJzcF9hbGlnbm1lbnRfYml0X29uZVxuICB3aGlsZSAoYncuYml0cy5sZW5ndGggJSA4ICE9PSAwKSBidy5iaXRzLnB1c2goMCk7XG5cbiAgcmV0dXJuIGFkZEVtdWxhdGlvblByZXZlbnRpb24oQnVmZmVyLmNvbmNhdChbcGFja0JpdHMoYncuYml0cyksIHJic3Auc3ViYXJyYXkoc2xpY2VEYXRhQnl0ZU9mZnNldCldKSk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzEzLlxuXG5pbXBvcnQgeyBCaXRSZWFkZXIsIEJpdFdyaXRlciwgcGFja0JpdHMgfSBmcm9tIFwiLi9iaXRcIjtcbmltcG9ydCB7IGFkZEVtdWxhdGlvblByZXZlbnRpb24sIHJlbW92ZUVtdWxhdGlvblByZXZlbnRpb24gfSBmcm9tIFwiLi9uYWxcIjtcblxuaW50ZXJmYWNlIFBhcnNlZFBUTCB7XG4gIHB0bFN0YXJ0OiBudW1iZXI7XG4gIHB0bEVuZDogbnVtYmVyO1xuICBwdGxCaXRzOiBudW1iZXJbXTtcbiAgbWF4U3ViTGF5ZXJzTWludXMxOiBudW1iZXI7XG59XG5cbmZ1bmN0aW9uIGV4dHJhY3RQVEwodnBzRGF0YTogQnVmZmVyKTogUGFyc2VkUFRMIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgYnIgPSBuZXcgQml0UmVhZGVyKHJlbW92ZUVtdWxhdGlvblByZXZlbnRpb24odnBzRGF0YSkpO1xuICBici5yZWFkKDE2KTsgLy8gTkFMIGhlYWRlclxuICBici5yZWFkKDQpOyAvLyB2cHNfaWRcbiAgYnIucmVhZCgyKTsgLy8gYmFzZV9sYXllcl9pbnRlcm5hbCArIGF2YWlsYWJsZVxuICBpZiAoYnIucmVhZCg2KSA+IDApIHJldHVybiB1bmRlZmluZWQ7IC8vIGFscmVhZHkgbXVsdGktbGF5ZXJcbiAgY29uc3QgbWF4U3ViTGF5ZXJzTWludXMxID0gYnIucmVhZCgzKTtcbiAgYnIucmVhZCgxICsgMTYpOyAvLyB0ZW1wb3JhbF9uZXN0aW5nICsgcmVzZXJ2ZWRcblxuICBjb25zdCBwdGxTdGFydCA9IGJyLnBvcztcbiAgYnIucmVhZCg5Nik7IC8vIGdlbmVyYWwgUFRMIChwcm9maWxlX3NwYWNlICsgdGllciArIGlkYyArIGNvbXBhdCArIGNvbnN0cmFpbnRzICsgbGV2ZWwpXG4gIGlmIChtYXhTdWJMYXllcnNNaW51czEgPiAwKSBici5yZWFkKG1heFN1YkxheWVyc01pbnVzMSAqIDIgKyAoOCAtIG1heFN1YkxheWVyc01pbnVzMSkgKiAyKTtcbiAgcmV0dXJuIHsgcHRsU3RhcnQsIHB0bEVuZDogYnIucG9zLCBwdGxCaXRzOiBici5iaXRzLCBtYXhTdWJMYXllcnNNaW51czEgfTtcbn1cblxuLyoqIFdyaXRlIGJhc2UgVlBTIGZpZWxkcyBmb3IgMi1sYXllciBhbHBoYS4gKi9cbmZ1bmN0aW9uIHdyaXRlQmFzZVZQUyhidzogQml0V3JpdGVyLCBwdGw6IFBhcnNlZFBUTCkge1xuICBidy53KDB4NDAwMSwgMTYpOyAvLyBOQUwgaGVhZGVyXG4gIGJ3LncoMCwgNCk7IC8vIHZwc19pZFxuICBidy5mbGFnKDEpOyAvLyBiYXNlX2xheWVyX2ludGVybmFsXG4gIGJ3LmZsYWcoMSk7IC8vIGJhc2VfbGF5ZXJfYXZhaWxhYmxlXG4gIGJ3LncoMSwgNik7IC8vIG1heF9sYXllcnNfbWludXMxID0gMVxuICBidy53KHB0bC5tYXhTdWJMYXllcnNNaW51czEsIDMpO1xuICAvLyB0ZW1wb3JhbF9uZXN0aW5nOiB0cnVlIHdoZW4gc2luZ2xlIHN1Yi1sYXllciAoYWxsIHJlZnMgbGF5ZXIgMClcbiAgYncuZmxhZyhwdGwubWF4U3ViTGF5ZXJzTWludXMxID09PSAwKTtcbiAgYncudygweGZmZmYsIDE2KTsgLy8gcmVzZXJ2ZWRcbiAgYncuY29weShwdGwucHRsQml0cywgcHRsLnB0bFN0YXJ0LCBwdGwucHRsRW5kIC0gcHRsLnB0bFN0YXJ0KTtcblxuICBidy5mbGFnKDEpOyAvLyBzdWJfbGF5ZXJfb3JkZXJpbmdfaW5mb19wcmVzZW50XG4gIGZvciAobGV0IGkgPSAwOyBpIDw9IHB0bC5tYXhTdWJMYXllcnNNaW51czE7IGkrKykge1xuICAgIGJ3LnVlKDQpOyAvLyBtYXhEZWNQaWNCdWZmZXJpbmcgLSAxXG4gICAgYncudWUoMik7IC8vIG51bVJlb3JkZXJQaWNzXG4gICAgYncudWUoNCk7IC8vIG1heExhdGVuY3lJbmNyZWFzZSArIDFcbiAgfVxuXG4gIGJ3LncoMSwgNik7IC8vIG1heF9udWhfbGF5ZXJfaWQgPSAxXG4gIGJ3LnVlKDEpOyAvLyBudW1fbGF5ZXJfc2V0c19taW51czEgPSAxXG4gIGJ3LmZsYWcoMSk7IC8vIGxheWVyX2lkX2luY2x1ZGVkWzFdWzBdXG4gIGJ3LmZsYWcoMSk7IC8vIGxheWVyX2lkX2luY2x1ZGVkWzFdWzFdXG4gIGJ3LmZsYWcoMCk7IC8vIHRpbWluZ19pbmZvX3ByZXNlbnRcbiAgYncuZmxhZygxKTsgLy8gdnBzX2V4dGVuc2lvbl9mbGFnXG4gIGJ3LmFsaWduKDEpOyAvLyBleHRlbnNpb24gYWxpZ25tZW50IGJpdHMgPSAxXG59XG5cbi8qKiBXcml0ZSBWUFMgZXh0ZW5zaW9uIG1hdGNoaW5nIHgyNjUgNC4xIEVOQUJMRV9BTFBIQS4gKi9cbmZ1bmN0aW9uIHdyaXRlVlBTRXh0ZW5zaW9uKGJ3OiBCaXRXcml0ZXIsIHB0bDogUGFyc2VkUFRMLCB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcikge1xuICAvLyBFeHRlbnNpb24gUFRMOiBsZXZlbF9pZGMgb25seSAocHJvZmlsZVByZXNlbnRGbGFnPTApXG4gIGJ3LmNvcHkocHRsLnB0bEJpdHMsIHB0bC5wdGxFbmQgLSA4LCA4KTtcbiAgaWYgKHB0bC5tYXhTdWJMYXllcnNNaW51czEgPiAwKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwdGwubWF4U3ViTGF5ZXJzTWludXMxOyBpKyspIGJ3LncoMCwgMik7XG4gICAgZm9yIChsZXQgaSA9IHB0bC5tYXhTdWJMYXllcnNNaW51czE7IGkgPCA4OyBpKyspIGJ3LncoMCwgMik7XG4gIH1cblxuICBidy5mbGFnKDApOyAvLyBzcGxpdHRpbmdfZmxhZ1xuICBmb3IgKGxldCBpID0gMDsgaSA8IDE2OyBpKyspIGJ3LmZsYWcoaSA9PT0gMiB8fCBpID09PSAzKTsgLy8gc2NhbGFiaWxpdHk6IHNwYXRpYWwgKyBhdXhcbiAgYncudygwLCAzKTsgLy8gZGltZW5zaW9uX2lkX2xlblswXSA9IDFcbiAgYncudygwLCAzKTsgLy8gZGltZW5zaW9uX2lkX2xlblsxXSA9IDFcbiAgYncuZmxhZygxKTsgLy8gbnVoX2xheWVyX2lkX3ByZXNlbnRcbiAgYncudygxLCA2KTsgLy8gbGF5ZXJfaWRfaW5fbnVoWzFdID0gMVxuICBidy53KDEsIDEpOyAvLyBkaW1lbnNpb25faWRbMV1bMF0gPSAxXG4gIGJ3LncoMSwgMSk7IC8vIGRpbWVuc2lvbl9pZFsxXVsxXSA9IEFVWF9BTFBIQVxuICBidy53KDAsIDQpOyAvLyB2aWV3X2lkX2xlbiA9IDBcblxuICBidy5mbGFnKDApOyAvLyBkaXJlY3RfZGVwZW5kZW5jeV9mbGFnWzFdWzBdXG4gIGJ3LnVlKDApOyAvLyBudW1fYWRkX2xheWVyX3NldHNcbiAgYncuZmxhZygwKTsgLy8gc3ViX2xheWVyc19tYXhfbWludXMxX3ByZXNlbnRcbiAgYncuZmxhZygwKTsgLy8gbWF4X3RpZF9yZWZfcHJlc2VudFxuICBidy5mbGFnKDApOyAvLyBkZWZhdWx0X3JlZl9sYXllcnNfYWN0aXZlXG5cbiAgLy8gRkZtcGVnIGxvb3BzIGZyb20gaW5kZXggMiB0byBuYl9wdGwtMSwgc28gbnB0bF9tMT0yIOKGkiAxIGVudHJ5IGF0IGluZGV4IDJcbiAgYncudWUoMik7IC8vIHZwc19udW1fcHJvZmlsZV90aWVyX2xldmVsX21pbnVzMVxuICBidy5mbGFnKDEpOyAvLyBwcm9maWxlX3ByZXNlbnRfZmxhZ1syXVxuICBidy5jb3B5KHB0bC5wdGxCaXRzLCBwdGwucHRsU3RhcnQsIHB0bC5wdGxFbmQgLSBwdGwucHRsU3RhcnQpO1xuXG4gIGJ3LnVlKDApOyAvLyBudW1fYWRkX29sc3NcbiAgYncudygwLCAyKTsgLy8gZGVmYXVsdF9vdXRwdXRfbGF5ZXJfaWRjXG4gIGJ3LncoMSwgMik7IC8vIHB0bF9pZHhbMV1bMF0gPSAxIChjZWlsX2xvZzIoMykgPSAyIGJpdHMpXG4gIGJ3LncoMiwgMik7IC8vIHB0bF9pZHhbMV1bMV0gPSAyXG5cbiAgYncudWUoMCk7IC8vIHZwc19udW1fcmVwX2Zvcm1hdHNfbWludXMxXG4gIGJ3Lncod2lkdGgsIDE2KTtcbiAgYncudyhoZWlnaHQsIDE2KTtcbiAgYncuZmxhZygxKTsgLy8gY2hyb21hX2FuZF9iaXRfZGVwdGhfdnBzX3ByZXNlbnRcbiAgYncudygxLCAyKTsgLy8gY2hyb21hX2Zvcm1hdF9pZGMgPSA0OjI6MFxuICBidy53KDAsIDQpOyAvLyBiaXRfZGVwdGhfbHVtYV9taW51czhcbiAgYncudygwLCA0KTsgLy8gYml0X2RlcHRoX2Nocm9tYV9taW51czhcbiAgYncuZmxhZygwKTsgLy8gY29uZm9ybWFuY2Vfd2luZG93X3Zwc19mbGFnXG5cbiAgYncuZmxhZygxKTsgLy8gbWF4X29uZV9hY3RpdmVfcmVmX2xheWVyXG4gIGJ3LmZsYWcoMCk7IC8vIHBvY19sc2JfYWxpZ25lZFxuICBidy5mbGFnKDEpOyAvLyBwb2NfbHNiX25vdF9wcmVzZW50XG5cbiAgLy8gRFBCIGZvciBPTFMgMSAoMiBsYXllcnMsIDEgc3ViLWxheWVyKVxuICBidy5mbGFnKDApOyAvLyBzdWJfbGF5ZXJfZmxhZ19pbmZvX3ByZXNlbnRcbiAgYncudWUoMCk7IC8vIG1heF9kZWNfcGljX2J1ZmZlcmluZyAobGF5ZXIgMClcbiAgYncudWUoMCk7IC8vIG1heF9kZWNfcGljX2J1ZmZlcmluZyAobGF5ZXIgMSlcbiAgYncudWUoMCk7IC8vIG1heF9udW1fcmVvcmRlcl9waWNzXG4gIGJ3LnVlKDApOyAvLyBtYXhfbGF0ZW5jeV9pbmNyZWFzZVxuXG4gIGJ3LnVlKDApOyAvLyBkaXJlY3RfZGVwX3R5cGVfbGVuX21pbnVzMlxuICBidy5mbGFnKDApOyAvLyBkZWZhdWx0X2RpcmVjdF9kZXBlbmRlbmN5X2ZsYWdcbiAgYncudWUoMCk7IC8vIG5vbl92dWlfZXh0ZW5zaW9uX2xlbmd0aFxuICBidy5mbGFnKDApOyAvLyB2cHNfdnVpX3ByZXNlbnRcbiAgYncuZmxhZygwKTsgLy8gdnBzX2V4dGVuc2lvbjJfZmxhZ1xufVxuXG4vKipcbiAqIEJ1aWxkIGEgY29tcGxldGUgYWxwaGEgVlBTIGZyb20gc2NyYXRjaCwgdXNpbmcgdGhlIG9yaWdpbmFsIE5WRU5DIFZQU1xuICogb25seSBhcyBhIHNvdXJjZSBmb3IgdGhlIFBUTCAocHJvZmlsZS90aWVyL2xldmVsKSBieXRlcy5cbiAqIE1hdGNoZXMgeDI2NSA0LjEgRU5BQkxFX0FMUEhBIFZQUyBzdHJ1Y3R1cmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZEFscGhhVlBTKHZwc0RhdGE6IEJ1ZmZlciwgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpOiBCdWZmZXIge1xuICBjb25zdCBwdGwgPSBleHRyYWN0UFRMKHZwc0RhdGEpO1xuICBpZiAoIXB0bCkgcmV0dXJuIHZwc0RhdGE7XG5cbiAgY29uc3QgYncgPSBuZXcgQml0V3JpdGVyKCk7XG4gIHdyaXRlQmFzZVZQUyhidywgcHRsKTtcbiAgd3JpdGVWUFNFeHRlbnNpb24oYncsIHB0bCwgd2lkdGgsIGhlaWdodCk7XG5cbiAgYncuYml0cy5wdXNoKDEpOyAvLyBSQlNQIHN0b3AgYml0XG4gIGJ3LmFsaWduKDApO1xuICByZXR1cm4gYWRkRW11bGF0aW9uUHJldmVudGlvbihwYWNrQml0cyhidy5iaXRzKSk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzEyLlxuXG5pbXBvcnQgdHlwZSB7IEZyYW1lIH0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB7IHJld3JpdGVBbHBoYVBwcywgcmV3cml0ZUFscGhhU2xpY2VIZWFkZXIsIHJld3JpdGVBbHBoYVNwcyB9IGZyb20gXCIuL2FscGhhX2RhcndpblwiO1xuaW1wb3J0IHsgcGFja0JpdHMgfSBmcm9tIFwiLi9iaXRcIjtcbmltcG9ydCB7XG4gIEFOTkVYX0JfU1RBUlRfQ09ERSxcbiAgZW5jb2RlTmFsSGVhZGVyLFxuICBOQUxfU0VJX1BSRUZJWCxcbiAgTkFMX1NQUyxcbiAgTkFMX1BQUyxcbiAgTkFMX1ZQUyxcbiAgdHlwZSBOYWxVbml0LFxuICByZXdyaXRlTmFsTGF5ZXJJZCxcbiAgc3BsaXROYWxVbml0cyxcbn0gZnJvbSBcIi4vbmFsXCI7XG5pbXBvcnQgdHlwZSB7IE52ZW5jSGV2Y0NvbmZpZyB9IGZyb20gXCIuL3BhcnNlclwiO1xuaW1wb3J0IHsgYnVpbGRBbHBoYVZQUyB9IGZyb20gXCIuL3Zwc1wiO1xuXG4vLyBCR1JBIGFscGhhIOKGkiBZIHBsYW5lIG9mIHBhY2tlZCBZVVY0MjBQLiBDYWxsZXIgcHJlLWZpbGxzIFVWPTEyOC5cbi8vIFVpbnQzMiBwYXRoOiBCR1JBIExFIHUzMiA+Pj4gMjQgPSBBIGJ5dGUuXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdEFscGhhVG9ZdXY0MjBwQnVmZmVyKGJncmFGcmFtZTogRnJhbWUsIGJ1ZjogQnVmZmVyKTogdm9pZCB7XG4gIGNvbnN0IHNyYyA9IGJncmFGcmFtZS5kYXRhPy5bMF07XG4gIGNvbnN0IHNyY0xzID0gYmdyYUZyYW1lLmxpbmVzaXplPy5bMF07XG4gIGlmICghc3JjIHx8ICFzcmNMcykgdGhyb3cgbmV3IEVycm9yKFwiZXh0cmFjdEFscGhhOiBtaXNzaW5nIEJHUkEgZGF0YVwiKTtcbiAgY29uc3QgdyA9IGJncmFGcmFtZS53aWR0aDtcbiAgY29uc3QgaCA9IGJncmFGcmFtZS5oZWlnaHQ7XG4gIGNvbnN0IHlTaXplID0gdyAqIGg7XG4gIGlmIChzcmMuYnl0ZU9mZnNldCAlIDQgPT09IDAgJiYgc3JjTHMgPT09IHcgKiA0KSB7XG4gICAgY29uc3Qgc3JjMzIgPSBuZXcgVWludDMyQXJyYXkoc3JjLmJ1ZmZlciwgc3JjLmJ5dGVPZmZzZXQsIHlTaXplKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHlTaXplOyBpKyspIGJ1ZltpXSA9IHNyYzMyW2ldISA+Pj4gMjQ7XG4gIH0gZWxzZSB7XG4gICAgZm9yIChsZXQgeSA9IDA7IHkgPCBoOyB5KyspIHtcbiAgICAgIGNvbnN0IHJvd0Jhc2UgPSB5ICogc3JjTHMgKyAzO1xuICAgICAgY29uc3QgZHN0QmFzZSA9IHkgKiB3O1xuICAgICAgZm9yIChsZXQgeCA9IDA7IHggPCB3OyB4KyspIGJ1Zltkc3RCYXNlICsgeF0gPSBzcmNbcm93QmFzZSArIHggKiA0XSE7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVW5pZmllZEV4dHJhZGF0YU9wdGlvbnMge1xuICBiYXNlRXh0cmFkYXRhOiBCdWZmZXI7XG4gIGFscGhhRXh0cmFkYXRhOiBCdWZmZXI7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xufVxuXG4vLyBBcHBsZSBIRVZDIEFscGhhIFByb2ZpbGU6IGFscGhhIFNQUyBzcHNfc2VxX3BhcmFtZXRlcl9zZXRfaWQ9MSwgYWxwaGEgUFBTIHBpYytzZXEgaWQ9MS5cbmZ1bmN0aW9uIHJld3JpdGVBbHBoYVBhcmFtU2V0KHR5cGU6IG51bWJlciwgZGF0YTogQnVmZmVyKTogQnVmZmVyIHtcbiAgaWYgKHR5cGUgPT09IE5BTF9TUFMpIHJldHVybiByZXdyaXRlQWxwaGFTcHMoZGF0YSk7XG4gIGlmICh0eXBlID09PSBOQUxfUFBTKSByZXR1cm4gcmV3cml0ZUFscGhhUHBzKGRhdGEpO1xuICByZXR1cm4gZGF0YTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkVW5pZmllZEV4dHJhZGF0YShvcHRzOiBVbmlmaWVkRXh0cmFkYXRhT3B0aW9ucyk6IEJ1ZmZlciB7XG4gIGNvbnN0IHsgYmFzZUV4dHJhZGF0YSwgYWxwaGFFeHRyYWRhdGEgfSA9IG9wdHM7XG4gIGNvbnN0IGJhc2VOYWxzID0gc3BsaXROYWxVbml0cyhiYXNlRXh0cmFkYXRhKTtcbiAgY29uc3QgYWxwaGFOYWxzID0gc3BsaXROYWxVbml0cyhhbHBoYUV4dHJhZGF0YSk7XG5cbiAgY29uc3QgYWxwaGFCeVR5cGUgPSBuZXcgTWFwPG51bWJlciwgTmFsVW5pdFtdPigpO1xuICBmb3IgKGNvbnN0IG5hbCBvZiBhbHBoYU5hbHMpIHtcbiAgICBpZiAobmFsLnR5cGUgPT09IE5BTF9WUFMpIGNvbnRpbnVlO1xuICAgIGNvbnN0IGFyciA9IGFscGhhQnlUeXBlLmdldChuYWwudHlwZSkgPz8gW107XG4gICAgYXJyLnB1c2gobmFsKTtcbiAgICBhbHBoYUJ5VHlwZS5zZXQobmFsLnR5cGUsIGFycik7XG4gIH1cblxuICBjb25zdCBjaHVua3M6IEJ1ZmZlcltdID0gW107XG4gIGNvbnN0IGVtaXR0ZWQgPSBuZXcgU2V0PG51bWJlcj4oKTtcbiAgZm9yIChjb25zdCBuYWwgb2YgYmFzZU5hbHMpIHtcbiAgICBjb25zdCBkYXRhID0gbmFsLnR5cGUgPT09IE5BTF9WUFMgPyBidWlsZEFscGhhVlBTKG5hbC5kYXRhLCBvcHRzLndpZHRoLCBvcHRzLmhlaWdodCkgOiBuYWwuZGF0YTtcbiAgICBjaHVua3MucHVzaChBTk5FWF9CX1NUQVJUX0NPREUsIGRhdGEpO1xuICAgIGlmICghZW1pdHRlZC5oYXMobmFsLnR5cGUpKSB7XG4gICAgICBlbWl0dGVkLmFkZChuYWwudHlwZSk7XG4gICAgICBmb3IgKGNvbnN0IGFscGhhTmFsIG9mIGFscGhhQnlUeXBlLmdldChuYWwudHlwZSkgPz8gW10pIHtcbiAgICAgICAgY29uc3QgYURhdGEgPSByZXdyaXRlQWxwaGFQYXJhbVNldChuYWwudHlwZSwgYWxwaGFOYWwuZGF0YSk7XG4gICAgICAgIGNodW5rcy5wdXNoKEFOTkVYX0JfU1RBUlRfQ09ERSwgcmV3cml0ZU5hbExheWVySWQoYURhdGEsIDEpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjaHVua3MucHVzaChidWlsZEFscGhhQ2hhbm5lbEluZm9TRUkoKSk7XG4gIHJldHVybiBCdWZmZXIuY29uY2F0KGNodW5rcyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBidWlsZEFscGhhQ2hhbm5lbEluZm9TRUkoKTogQnVmZmVyIHtcbiAgY29uc3QgcGF5bG9hZFR5cGUgPSAxNjU7XG4gIGNvbnN0IHBheWxvYWRTaXplID0gNDtcbiAgY29uc3QgW2gwLCBoMV0gPSBlbmNvZGVOYWxIZWFkZXIoTkFMX1NFSV9QUkVGSVgsIDAsIDEpO1xuXG4gIGNvbnN0IGJpdHM6IG51bWJlcltdID0gW107XG4gIGNvbnN0IHdyaXRlQml0cyA9ICh2YWw6IG51bWJlciwgbjogbnVtYmVyKSA9PiB7XG4gICAgZm9yIChsZXQgaSA9IG4gLSAxOyBpID49IDA7IGktLSkgYml0cy5wdXNoKCh2YWwgPj4gaSkgJiAxKTtcbiAgfTtcblxuICB3cml0ZUJpdHMoMCwgMSk7IC8vIGFscGhhX2NoYW5uZWxfY2FuY2VsX2ZsYWdcbiAgd3JpdGVCaXRzKDAsIDMpOyAvLyBhbHBoYV9jaGFubmVsX3VzZV9pZGMgKDAgPSB1bnNwZWNpZmllZC9wcmVtdWx0aXBsaWVkOyBtYXRjaGVzIHgyNjUgRU5BQkxFX0FMUEhBKVxuICB3cml0ZUJpdHMoMCwgMyk7IC8vIGFscGhhX2NoYW5uZWxfYml0X2RlcHRoX21pbnVzOFxuICB3cml0ZUJpdHMoMCwgOSk7IC8vIGFscGhhX3RyYW5zcGFyZW50X3ZhbHVlXG4gIHdyaXRlQml0cygyNTUsIDkpOyAvLyBhbHBoYV9vcGFxdWVfdmFsdWVcbiAgd3JpdGVCaXRzKDAsIDEpOyAvLyBhbHBoYV9jaGFubmVsX2luY3JfZmxhZ1xuICB3cml0ZUJpdHMoMCwgMSk7IC8vIGFscGhhX2NoYW5uZWxfY2xpcF9mbGFnXG4gIHdyaXRlQml0cygxLCAxKTsgLy8gYnl0ZSBhbGlnbm1lbnRcbiAgd2hpbGUgKGJpdHMubGVuZ3RoICUgOCAhPT0gMCkgd3JpdGVCaXRzKDAsIDEpO1xuXG4gIHJldHVybiBCdWZmZXIuY29uY2F0KFtcbiAgICBBTk5FWF9CX1NUQVJUX0NPREUsXG4gICAgQnVmZmVyLmZyb20oW2gwLCBoMV0pLFxuICAgIEJ1ZmZlci5mcm9tKFtwYXlsb2FkVHlwZSwgcGF5bG9hZFNpemVdKSxcbiAgICBwYWNrQml0cyhiaXRzKSxcbiAgICBCdWZmZXIuZnJvbShbMHg4MF0pLFxuICBdKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGludGVybGVhdmVBY2Nlc3NVbml0cyhiYXNlTmFsczogTmFsVW5pdFtdLCBhbHBoYU5hbHM6IE5hbFVuaXRbXSwgY2ZnOiBOdmVuY0hldmNDb25maWcpOiBCdWZmZXIge1xuICBjb25zdCBjaHVua3M6IEJ1ZmZlcltdID0gW107XG4gIGZvciAoY29uc3QgbmFsIG9mIGJhc2VOYWxzKSB7XG4gICAgY2h1bmtzLnB1c2goQU5ORVhfQl9TVEFSVF9DT0RFLCBuYWwuZGF0YSk7XG4gIH1cbiAgZm9yIChjb25zdCBuYWwgb2YgYWxwaGFOYWxzKSB7XG4gICAgaWYgKG5hbC50eXBlIDwgTkFMX1ZQUykge1xuICAgICAgY29uc3QgZGF0YSA9IHJld3JpdGVBbHBoYVNsaWNlSGVhZGVyKG5hbC5kYXRhLCBuYWwudHlwZSwgY2ZnKTtcbiAgICAgIGNodW5rcy5wdXNoKEFOTkVYX0JfU1RBUlRfQ09ERSwgcmV3cml0ZU5hbExheWVySWQoZGF0YSwgMSkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gQnVmZmVyLmNvbmNhdChjaHVua3MpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBMdSBBbyAobHVhb0BiaWxpYmlsaS5jb20pIG9uIDIwMjYvMDUvMTguXG5cbmltcG9ydCB7IHR5cGUgQ29kZWNDb250ZXh0LCBGRm1wZWdFcnJvciwgdHlwZSBQYWNrZXQsIHR5cGUgU3RyZWFtIH0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB7IEFWRVJST1JfRUFHQUlOLCBBVkVSUk9SX0VPRiwgdHlwZSBBVlBhY2tldEZsYWcgfSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcbmltcG9ydCB0eXBlIHsgRm9ybWF0TXV4ZXIgfSBmcm9tIFwiLi4vbXV4ZXJcIjtcbmltcG9ydCB7IGludGVybGVhdmVBY2Nlc3NVbml0cyB9IGZyb20gXCIuL2FscGhhXCI7XG5pbXBvcnQgeyBwYXRjaEhldmNBbHBoYVB0bCB9IGZyb20gXCIuL2FscGhhX2RhcndpblwiO1xuaW1wb3J0IHsgc3BsaXROYWxVbml0cyB9IGZyb20gXCIuL25hbFwiO1xuaW1wb3J0IHR5cGUgeyBOdmVuY0hldmNDb25maWcgfSBmcm9tIFwiLi9wYXJzZXJcIjtcblxuaW50ZXJmYWNlIFBlbmRpbmdQYWNrZXQge1xuICBkYXRhOiBCdWZmZXI7XG4gIHB0czogYmlnaW50O1xuICBkdHM6IGJpZ2ludDtcbiAgZHVyYXRpb246IGJpZ2ludDtcbiAgZmxhZ3M6IEFWUGFja2V0RmxhZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEdWFsTGF5ZXJNdXhPcHRpb25zIHtcbiAgYmFzZUN0eDogQ29kZWNDb250ZXh0O1xuICBhbHBoYUN0eDogQ29kZWNDb250ZXh0O1xuICBiYXNlUGt0OiBQYWNrZXQ7XG4gIGFscGhhUGt0OiBQYWNrZXQ7XG4gIHN0cmVhbTogU3RyZWFtO1xuICBoZXZjQ2ZnOiBOdmVuY0hldmNDb25maWc7XG59XG5cbi8vIERyYWlucyB0aGUgYmFzZSArIGFscGhhIE5WRU5DIHNlc3Npb25zIGFuZCB3cml0ZXMgaW50ZXJsZWF2ZWQgSEVWQy1hbHBoYSBhY2Nlc3MgdW5pdHMuXG5leHBvcnQgY2xhc3MgRHVhbExheWVyTXV4IHtcbiAgcHJpdmF0ZSBfczogRHVhbExheWVyTXV4T3B0aW9ucztcbiAgcHJpdmF0ZSBfYmFzZVF1ZXVlOiBQZW5kaW5nUGFja2V0W10gPSBbXTtcbiAgcHJpdmF0ZSBfYWxwaGFRdWV1ZTogUGVuZGluZ1BhY2tldFtdID0gW107XG5cbiAgY29uc3RydWN0b3IoczogRHVhbExheWVyTXV4T3B0aW9ucykge1xuICAgIHRoaXMuX3MgPSBzO1xuICB9XG5cbiAgYXN5bmMgZHJhaW4obXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyBiYXNlQ3R4LCBhbHBoYUN0eCwgYmFzZVBrdCwgYWxwaGFQa3QgfSA9IHRoaXMuX3M7XG4gICAgLy8gRHJhaW4gZWFjaCBzZXNzaW9uIGZ1bGx5IOKAlCBpbmRlcGVuZGVudCBOVkVOQyBzZXNzaW9ucyBydW4gYSBmcmFtZSBhcGFydCB0cmFuc2llbnRseS5cbiAgICB0aGlzLl9iYXNlUXVldWUucHVzaCguLi4oYXdhaXQgdGhpcy5yZWNlaXZlQWxsKGJhc2VDdHgsIGJhc2VQa3QsIFwiYmFzZVwiKSkpO1xuICAgIHRoaXMuX2FscGhhUXVldWUucHVzaCguLi4oYXdhaXQgdGhpcy5yZWNlaXZlQWxsKGFscGhhQ3R4LCBhbHBoYVBrdCwgXCJhbHBoYVwiKSkpO1xuICAgIC8vIGJmPTAg4oaSIG5vIHJlb3JkZXI7IHF1ZXVlIGluZGV4IE4gaXMgdGhlIHNhbWUgZnJhbWUgZm9yIGJvdGguIExlZnRvdmVyIHdhaXRzIGZvciBuZXh0IGRyYWluLlxuICAgIHdoaWxlICh0aGlzLl9iYXNlUXVldWUubGVuZ3RoICYmIHRoaXMuX2FscGhhUXVldWUubGVuZ3RoKSB7XG4gICAgICBhd2FpdCB0aGlzLndyaXRlUGFpcih0aGlzLl9iYXNlUXVldWUuc2hpZnQoKSEsIHRoaXMuX2FscGhhUXVldWUuc2hpZnQoKSEsIG11eGVyKTtcbiAgICB9XG4gIH1cblxuICAvLyBVbnBhaXJlZCBsZWZ0b3ZlcnMgYWZ0ZXIgRU9GID0gdHJ1ZSBiYXNlL2FscGhhIGRlc3luYzsgcmV0dXJucyBhIGRlc2NyaXB0aW9uLCBlbHNlIHVuZGVmaW5lZC5cbiAgZGVzeW5jQWZ0ZXJFb2YoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoIXRoaXMuX2Jhc2VRdWV1ZS5sZW5ndGggJiYgIXRoaXMuX2FscGhhUXVldWUubGVuZ3RoKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHJldHVybiBgYmFzZT0ke3RoaXMuX2Jhc2VRdWV1ZS5sZW5ndGh9LCBhbHBoYT0ke3RoaXMuX2FscGhhUXVldWUubGVuZ3RofSB1bnBhaXJlZGA7XG4gIH1cblxuICAvLyBFQUdBSU4vRU9GID0gbm9ybWFsIHN0b3A7IGFueSBvdGhlciBuZWdhdGl2ZSBpcyBhIHJlYWwgZmF1bHQsIG5vdCBcImRyYWluZWRcIi5cbiAgcHJpdmF0ZSBhc3luYyByZWNlaXZlQWxsKGN0eDogQ29kZWNDb250ZXh0LCBwa3Q6IFBhY2tldCwgdGFnOiBzdHJpbmcpOiBQcm9taXNlPFBlbmRpbmdQYWNrZXRbXT4ge1xuICAgIGNvbnN0IG91dDogUGVuZGluZ1BhY2tldFtdID0gW107XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGNvbnN0IHJldCA9IGF3YWl0IGN0eC5yZWNlaXZlUGFja2V0KHBrdCk7XG4gICAgICBpZiAocmV0ID49IDApIHtcbiAgICAgICAgb3V0LnB1c2godGhpcy5zbmFwc2hvdChwa3QpKTtcbiAgICAgICAgcGt0LnVucmVmKCk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKHJldCA9PT0gQVZFUlJPUl9FQUdBSU4gfHwgcmV0ID09PSBBVkVSUk9SX0VPRikgcmV0dXJuIG91dDtcbiAgICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihyZXQsIGBudmVuYy4ke3RhZ30ucmVjZWl2ZVBhY2tldGApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc25hcHNob3QocGt0OiBQYWNrZXQpOiBQZW5kaW5nUGFja2V0IHtcbiAgICAvLyBwa3QuZGF0YSBpcyBuYXRpdmUgbWVtb3J5IGZyZWVkIG9uIHVucmVmIOKAlCBjb3B5IGJlZm9yZSBxdWV1ZWluZy5cbiAgICByZXR1cm4geyBkYXRhOiBCdWZmZXIuZnJvbShwa3QuZGF0YSEpLCBwdHM6IHBrdC5wdHMsIGR0czogcGt0LmR0cywgZHVyYXRpb246IHBrdC5kdXJhdGlvbiwgZmxhZ3M6IHBrdC5mbGFncyB9O1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB3cml0ZVBhaXIoYmFzZTogUGVuZGluZ1BhY2tldCwgYWxwaGE6IFBlbmRpbmdQYWNrZXQsIG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgYmFzZVBrdCwgYmFzZUN0eCwgc3RyZWFtLCBoZXZjQ2ZnIH0gPSB0aGlzLl9zO1xuICAgIC8vIFBhdGNoIGluLWJhbmQgVlBTL1NQUyBQVEwgYml0cyBmb3IgQXBwbGUtVlRCIGNvbXBhdCAoZW5jb2RlciByZXBlYXRzIGhlYWRlcnMgcGVyIElEUikuXG4gICAgY29uc3QgaW50ZXJsZWF2ZWQgPSBpbnRlcmxlYXZlQWNjZXNzVW5pdHMoc3BsaXROYWxVbml0cyhiYXNlLmRhdGEpLCBzcGxpdE5hbFVuaXRzKGFscGhhLmRhdGEpLCBoZXZjQ2ZnKTtcbiAgICAvLyBkYXRhIHNldHRlciB3aXBlcyBwdHMvZHRzL2R1cmF0aW9uL2ZsYWdzIOKAlCByZXN0b3JlOyBmbGFncycgS0VZIGJpdCBkcml2ZXMgbW92IHN0c3MuXG4gICAgYmFzZVBrdC5kYXRhID0gcGF0Y2hIZXZjQWxwaGFQdGwoaW50ZXJsZWF2ZWQpO1xuICAgIGJhc2VQa3QucHRzID0gYmFzZS5wdHM7XG4gICAgYmFzZVBrdC5kdHMgPSBiYXNlLmR0cztcbiAgICBiYXNlUGt0LmR1cmF0aW9uID0gYmFzZS5kdXJhdGlvbiA9PT0gMG4gPyAxbiA6IGJhc2UuZHVyYXRpb247XG4gICAgYmFzZVBrdC5mbGFncyA9IGJhc2UuZmxhZ3M7XG4gICAgYmFzZVBrdC5zdHJlYW1JbmRleCA9IHN0cmVhbS5pbmRleDtcbiAgICBiYXNlUGt0LnJlc2NhbGVUcyhiYXNlQ3R4LnRpbWVCYXNlLCBzdHJlYW0udGltZUJhc2UpO1xuICAgIGF3YWl0IG11eGVyLndyaXRlUGFja2V0KGJhc2VQa3QpO1xuICAgIGJhc2VQa3QudW5yZWYoKTtcbiAgfVxufVxuIiwiLy8gUGFyc2UgTlZFTkMgU1BTL1BQUyBleHRyYWRhdGEgYXQgZW5jb2RlciBpbml0IHRvIGRlcml2ZSBmbGFncyB0aGUgc2xpY2UgaGVhZGVyIHBhcnNlciBkZXBlbmRzIG9uLlxuLy8gRGVmdXNlcyBmcmFnaWxlIGhhcmRjb2RlZCBhc3N1bXB0aW9uczogaWYgTlZFTkMgZGVmYXVsdHMgc2hpZnQsIHRocm93cyB3aXRoIGFjdGlvbmFibGUgZXJyb3IuXG5cbmltcG9ydCB7IEJpdFJlYWRlciB9IGZyb20gXCIuL2JpdFwiO1xuaW1wb3J0IHsgTkFMX1BQUywgTkFMX1NQUywgcmVtb3ZlRW11bGF0aW9uUHJldmVudGlvbiwgc3BsaXROYWxVbml0cyB9IGZyb20gXCIuL25hbFwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIE52ZW5jSGV2Y0NvbmZpZyB7XG4gIGxvZzJNYXhQb2NMc2I6IG51bWJlcjtcbiAgbnVtU2hvcnRUZXJtUmVmUGljU2V0czogbnVtYmVyO1xuICBudW1EZWx0YVBvY3NTZXQwOiBudW1iZXI7XG4gIGxvbmdUZXJtUmVmUGljc1ByZXNlbnQ6IGJvb2xlYW47XG4gIHNwc1RlbXBvcmFsTXZwRW5hYmxlZDogYm9vbGVhbjtcbiAgc2FvRW5hYmxlZDogYm9vbGVhbjtcbiAgY2FiYWNJbml0UHJlc2VudDogYm9vbGVhbjtcbiAgcHBzSGFzTG9vcEZpbHRlckFjcm9zc1NsaWNlc0ZsYWc6IGJvb2xlYW47XG59XG5cbmZ1bmN0aW9uIGZhaWwoZmllbGQ6IHN0cmluZywgZ290OiB1bmtub3duLCBleHBlY3RlZDogc3RyaW5nKTogbmV2ZXIge1xuICB0aHJvdyBuZXcgRXJyb3IoYGhldmNfYWxwaGE6IE5WRU5DIFNQUy9QUFMgdW5zdXBwb3J0ZWQ6ICR7ZmllbGR9PSR7Z290fSwgZXhwZWN0ZWQgJHtleHBlY3RlZH1gKTtcbn1cblxuZnVuY3Rpb24gc2tpcFB0bChicjogQml0UmVhZGVyLCBtYXhTdWJMYXllcnM6IG51bWJlcik6IHZvaWQge1xuICBici5yZWFkKDIgKyAxICsgNSk7IC8vIHByb2ZpbGVfc3BhY2UsIHRpZXIsIHByb2ZpbGVfaWRjXG4gIGJyLnJlYWQoMzIpOyAvLyBwcm9maWxlX2NvbXBhdGliaWxpdHlfZmxhZ1swLi4zMV1cbiAgYnIucmVhZCg0OCk7IC8vIDQgc291cmNlL3BhY2tlZCBmbGFncyArIDQzIGNvbnN0cmFpbnQvcmVzZXJ2ZWQgKyAxIGluYmxkXG4gIGJyLnJlYWQoOCk7IC8vIGxldmVsX2lkY1xuICBjb25zdCBzdWJQcm9maWxlUHJlc2VudDogbnVtYmVyW10gPSBbXTtcbiAgY29uc3Qgc3ViTGV2ZWxQcmVzZW50OiBudW1iZXJbXSA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IG1heFN1YkxheWVyczsgaSsrKSB7XG4gICAgc3ViUHJvZmlsZVByZXNlbnQucHVzaChici5yZWFkKDEpKTtcbiAgICBzdWJMZXZlbFByZXNlbnQucHVzaChici5yZWFkKDEpKTtcbiAgfVxuICBpZiAobWF4U3ViTGF5ZXJzID4gMCkgZm9yIChsZXQgaSA9IG1heFN1YkxheWVyczsgaSA8IDg7IGkrKykgYnIucmVhZCgyKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXhTdWJMYXllcnM7IGkrKykge1xuICAgIGlmIChzdWJQcm9maWxlUHJlc2VudFtpXSkgYnIucmVhZCg4ICsgMzIgKyA0OCk7XG4gICAgaWYgKHN1YkxldmVsUHJlc2VudFtpXSkgYnIucmVhZCg4KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwYXJzZVNwcyhzcHNSYnNwOiBCdWZmZXIpOiB7XG4gIGxvZzJNYXhQb2NMc2I6IG51bWJlcjtcbiAgc2FvRW5hYmxlZDogYm9vbGVhbjtcbiAgbnVtU2hvcnRUZXJtUmVmUGljU2V0czogbnVtYmVyO1xuICBudW1EZWx0YVBvY3NTZXQwOiBudW1iZXI7XG4gIGxvbmdUZXJtUmVmUGljc1ByZXNlbnQ6IGJvb2xlYW47XG4gIHNwc1RlbXBvcmFsTXZwRW5hYmxlZDogYm9vbGVhbjtcbn0ge1xuICBjb25zdCBiciA9IG5ldyBCaXRSZWFkZXIoc3BzUmJzcCk7XG4gIGJyLnJlYWQoMTYpOyAvLyBOQUwgaGVhZGVyXG4gIGJyLnJlYWQoNCk7IC8vIHNwc192aWRlb19wYXJhbWV0ZXJfc2V0X2lkXG4gIGNvbnN0IG1heFN1YkxheWVycyA9IGJyLnJlYWQoMyk7XG4gIC8vIGFscGhhX2Rhcndpbi5yZXdyaXRlQWxwaGFTcHMgKyB2cHMuZXh0cmFjdFBUTCBoYXJkY29kZSA5Ni1iaXQgUFRMIOKAlCBvbmx5IHZhbGlkIHdoZW4gc3ViX2xheWVycz0wLlxuICBpZiAobWF4U3ViTGF5ZXJzICE9PSAwKSBmYWlsKFwic3BzX21heF9zdWJfbGF5ZXJzX21pbnVzMVwiLCBtYXhTdWJMYXllcnMsIFwiMFwiKTtcbiAgYnIucmVhZCgxKTsgLy8gc3BzX3RlbXBvcmFsX2lkX25lc3RpbmdfZmxhZ1xuICBza2lwUHRsKGJyLCBtYXhTdWJMYXllcnMpO1xuICBici5yZWFkVWUoKTsgLy8gc3BzX3NlcV9wYXJhbWV0ZXJfc2V0X2lkXG4gIGNvbnN0IGNocm9tYUZvcm1hdCA9IGJyLnJlYWRVZSgpO1xuICBpZiAoY2hyb21hRm9ybWF0ID09PSAzKSBmYWlsKFwiY2hyb21hX2Zvcm1hdF9pZGNcIiwgY2hyb21hRm9ybWF0LCBcIuKJoDNcIik7XG4gIGJyLnJlYWRVZSgpOyAvLyBwaWNfd2lkdGhfaW5fbHVtYV9zYW1wbGVzXG4gIGJyLnJlYWRVZSgpOyAvLyBwaWNfaGVpZ2h0X2luX2x1bWFfc2FtcGxlc1xuICBpZiAoYnIucmVhZCgxKSkge1xuICAgIGJyLnJlYWRVZSgpOyBici5yZWFkVWUoKTsgYnIucmVhZFVlKCk7IGJyLnJlYWRVZSgpO1xuICB9XG4gIGJyLnJlYWRVZSgpOyAvLyBiaXRfZGVwdGhfbHVtYV9taW51czhcbiAgYnIucmVhZFVlKCk7IC8vIGJpdF9kZXB0aF9jaHJvbWFfbWludXM4XG4gIGNvbnN0IGxvZzJNYXhQb2NMc2IgPSBici5yZWFkVWUoKSArIDQ7XG4gIGNvbnN0IHN1Yk9yZGVySW5mbyA9IGJyLnJlYWQoMSk7XG4gIGNvbnN0IG9yZGVyQ291bnQgPSBzdWJPcmRlckluZm8gPyBtYXhTdWJMYXllcnMgKyAxIDogMTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcmRlckNvdW50OyBpKyspIHtcbiAgICBici5yZWFkVWUoKTsgYnIucmVhZFVlKCk7IGJyLnJlYWRVZSgpO1xuICB9XG4gIGJyLnJlYWRVZSgpOyBici5yZWFkVWUoKTsgYnIucmVhZFVlKCk7IGJyLnJlYWRVZSgpO1xuICBici5yZWFkVWUoKTsgYnIucmVhZFVlKCk7XG4gIGlmIChici5yZWFkKDEpKSBmYWlsKFwic2NhbGluZ19saXN0X2VuYWJsZWRfZmxhZ1wiLCAxLCBcIjBcIik7XG4gIGJyLnJlYWQoMSk7IC8vIGFtcF9lbmFibGVkX2ZsYWdcbiAgY29uc3Qgc2FvRW5hYmxlZCA9IGJyLnJlYWQoMSkgPT09IDE7XG4gIGlmIChici5yZWFkKDEpKSBmYWlsKFwicGNtX2VuYWJsZWRfZmxhZ1wiLCAxLCBcIjBcIik7XG4gIGNvbnN0IG51bVN0UnBzID0gYnIucmVhZFVlKCk7XG4gIGlmIChudW1TdFJwcyA+IDEpIGZhaWwoXCJudW1fc2hvcnRfdGVybV9yZWZfcGljX3NldHNcIiwgbnVtU3RScHMsIFwi4omkMVwiKTtcbiAgbGV0IG51bURlbHRhUG9jc1NldDAgPSAwO1xuICBpZiAobnVtU3RScHMgPT09IDEpIHtcbiAgICBjb25zdCBudW1OZWcgPSBici5yZWFkVWUoKTtcbiAgICBjb25zdCBudW1Qb3MgPSBici5yZWFkVWUoKTtcbiAgICBudW1EZWx0YVBvY3NTZXQwID0gbnVtTmVnICsgbnVtUG9zO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtTmVnOyBpKyspIHsgYnIucmVhZFVlKCk7IGJyLnJlYWQoMSk7IH1cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bVBvczsgaSsrKSB7IGJyLnJlYWRVZSgpOyBici5yZWFkKDEpOyB9XG4gIH1cbiAgY29uc3QgbG9uZ1Rlcm1SZWZQaWNzUHJlc2VudCA9IGJyLnJlYWQoMSkgPT09IDE7XG4gIGlmIChsb25nVGVybVJlZlBpY3NQcmVzZW50KSBmYWlsKFwibG9uZ190ZXJtX3JlZl9waWNzX3ByZXNlbnRfZmxhZ1wiLCAxLCBcIjBcIik7XG4gIGNvbnN0IHNwc1RlbXBvcmFsTXZwRW5hYmxlZCA9IGJyLnJlYWQoMSkgPT09IDE7XG4gIHJldHVybiB7IGxvZzJNYXhQb2NMc2IsIHNhb0VuYWJsZWQsIG51bVNob3J0VGVybVJlZlBpY1NldHM6IG51bVN0UnBzLCBudW1EZWx0YVBvY3NTZXQwLCBsb25nVGVybVJlZlBpY3NQcmVzZW50LCBzcHNUZW1wb3JhbE12cEVuYWJsZWQgfTtcbn1cblxuZnVuY3Rpb24gcGFyc2VQcHMocHBzUmJzcDogQnVmZmVyKTogeyBjYWJhY0luaXRQcmVzZW50OiBib29sZWFuOyBwcHNIYXNMb29wRmlsdGVyQWNyb3NzU2xpY2VzRmxhZzogYm9vbGVhbiB9IHtcbiAgY29uc3QgYnIgPSBuZXcgQml0UmVhZGVyKHBwc1Jic3ApO1xuICBici5yZWFkKDE2KTsgLy8gTkFMIGhlYWRlclxuICBici5yZWFkVWUoKTsgLy8gcHBzX3BpY19wYXJhbWV0ZXJfc2V0X2lkXG4gIGJyLnJlYWRVZSgpOyAvLyBwcHNfc2VxX3BhcmFtZXRlcl9zZXRfaWRcbiAgYnIucmVhZCgxKTsgLy8gZGVwZW5kZW50X3NsaWNlX3NlZ21lbnRzX2VuYWJsZWRfZmxhZ1xuICBici5yZWFkKDEpOyAvLyBvdXRwdXRfZmxhZ19wcmVzZW50X2ZsYWdcbiAgY29uc3QgbnVtRXh0cmFTbGljZUhlYWRlckJpdHMgPSBici5yZWFkKDMpO1xuICBpZiAobnVtRXh0cmFTbGljZUhlYWRlckJpdHMgIT09IDApIGZhaWwoXCJudW1fZXh0cmFfc2xpY2VfaGVhZGVyX2JpdHNcIiwgbnVtRXh0cmFTbGljZUhlYWRlckJpdHMsIFwiMFwiKTtcbiAgYnIucmVhZCgxKTsgLy8gc2lnbl9kYXRhX2hpZGluZ19lbmFibGVkX2ZsYWdcbiAgY29uc3QgY2FiYWNJbml0UHJlc2VudCA9IGJyLnJlYWQoMSkgPT09IDE7XG4gIGJyLnJlYWRVZSgpOyAvLyBudW1fcmVmX2lkeF9sMF9kZWZhdWx0X2FjdGl2ZV9taW51czFcbiAgYnIucmVhZFVlKCk7IC8vIG51bV9yZWZfaWR4X2wxX2RlZmF1bHRfYWN0aXZlX21pbnVzMVxuICBici5yZWFkVWUoKTsgLy8gaW5pdF9xcF9taW51czI2IChzZSwgYnV0IHVlIHBhcnNlciBmaW5lIHRvIGFkdmFuY2UpXG4gIGJyLnJlYWQoMSk7IC8vIGNvbnN0cmFpbmVkX2ludHJhX3ByZWRfZmxhZ1xuICBici5yZWFkKDEpOyAvLyB0cmFuc2Zvcm1fc2tpcF9lbmFibGVkX2ZsYWdcbiAgaWYgKGJyLnJlYWQoMSkpIGJyLnJlYWRVZSgpOyAvLyBjdV9xcF9kZWx0YV9lbmFibGVkIOKGkiBkaWZmX2N1X3FwX2RlbHRhX2RlcHRoXG4gIGJyLnJlYWRVZSgpOyAvLyBwcHNfY2JfcXBfb2Zmc2V0XG4gIGJyLnJlYWRVZSgpOyAvLyBwcHNfY3JfcXBfb2Zmc2V0XG4gIGJyLnJlYWQoMSk7IC8vIHBwc19zbGljZV9jaHJvbWFfcXBfb2Zmc2V0c19wcmVzZW50X2ZsYWdcbiAgYnIucmVhZCgxKTsgLy8gd2VpZ2h0ZWRfcHJlZF9mbGFnXG4gIGJyLnJlYWQoMSk7IC8vIHdlaWdodGVkX2JpcHJlZF9mbGFnXG4gIGJyLnJlYWQoMSk7IC8vIHRyYW5zcXVhbnRfYnlwYXNzX2VuYWJsZWRfZmxhZ1xuICBpZiAoYnIucmVhZCgxKSkgZmFpbChcInRpbGVzX2VuYWJsZWRfZmxhZ1wiLCAxLCBcIjBcIik7XG4gIGJyLnJlYWQoMSk7IC8vIGVudHJvcHlfY29kaW5nX3N5bmNfZW5hYmxlZF9mbGFnXG4gIGNvbnN0IHBwc0xvb3BGaWx0ZXJBY3Jvc3NTbGljZXNFbmFibGVkID0gYnIucmVhZCgxKSA9PT0gMTtcbiAgY29uc3QgZGVibG9ja2luZ0NvbnRyb2xQcmVzZW50ID0gYnIucmVhZCgxKTtcbiAgbGV0IHNsaWNlRGVibG9ja2luZ0Rpc2FibGVkT3ZlcnJpZGUgPSBmYWxzZTtcbiAgaWYgKGRlYmxvY2tpbmdDb250cm9sUHJlc2VudCkge1xuICAgIGJyLnJlYWQoMSk7IC8vIGRlYmxvY2tpbmdfZmlsdGVyX292ZXJyaWRlX2VuYWJsZWRfZmxhZ1xuICAgIHNsaWNlRGVibG9ja2luZ0Rpc2FibGVkT3ZlcnJpZGUgPSBici5yZWFkKDEpID09PSAxOyAvLyBwcHNfZGVibG9ja2luZ19maWx0ZXJfZGlzYWJsZWRfZmxhZ1xuICAgIGlmICghc2xpY2VEZWJsb2NraW5nRGlzYWJsZWRPdmVycmlkZSkge1xuICAgICAgYnIucmVhZFVlKCk7IGJyLnJlYWRVZSgpOyAvLyBiZXRhL3RjIG9mZnNldHMgKHNlIHZpYSB1ZSBhZHZhbmNlKVxuICAgIH1cbiAgfVxuICAvLyBzbGljZV9sb29wX2ZpbHRlcl9hY3Jvc3Nfc2xpY2VzX2VuYWJsZWRfZmxhZyBpbiBzbGljZSBoZWFkZXIgaXMgcHJlc2VudCBpZmZcbiAgLy8gcHBzX2xvb3BfZmlsdGVyX2Fjcm9zc19zbGljZXNfZW5hYmxlZF9mbGFnICYmICFzbGljZV9kZWJsb2NraW5nX2Rpc2FibGVkLlxuICBjb25zdCBwcHNIYXNMb29wRmlsdGVyQWNyb3NzU2xpY2VzRmxhZyA9IHBwc0xvb3BGaWx0ZXJBY3Jvc3NTbGljZXNFbmFibGVkICYmICFzbGljZURlYmxvY2tpbmdEaXNhYmxlZE92ZXJyaWRlO1xuICByZXR1cm4geyBjYWJhY0luaXRQcmVzZW50LCBwcHNIYXNMb29wRmlsdGVyQWNyb3NzU2xpY2VzRmxhZyB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VOdmVuY0hldmNDb25maWcoZXh0cmFkYXRhOiBCdWZmZXIpOiBOdmVuY0hldmNDb25maWcge1xuICBjb25zdCBuYWxzID0gc3BsaXROYWxVbml0cyhleHRyYWRhdGEpO1xuICBjb25zdCBzcHMgPSBuYWxzLmZpbmQoKG4pID0+IG4udHlwZSA9PT0gTkFMX1NQUyk7XG4gIGNvbnN0IHBwcyA9IG5hbHMuZmluZCgobikgPT4gbi50eXBlID09PSBOQUxfUFBTKTtcbiAgaWYgKCFzcHMpIHRocm93IG5ldyBFcnJvcihcImhldmNfYWxwaGE6IFNQUyBtaXNzaW5nIGluIE5WRU5DIGV4dHJhZGF0YVwiKTtcbiAgaWYgKCFwcHMpIHRocm93IG5ldyBFcnJvcihcImhldmNfYWxwaGE6IFBQUyBtaXNzaW5nIGluIE5WRU5DIGV4dHJhZGF0YVwiKTtcbiAgY29uc3QgcyA9IHBhcnNlU3BzKHJlbW92ZUVtdWxhdGlvblByZXZlbnRpb24oc3BzLmRhdGEpKTtcbiAgY29uc3QgcCA9IHBhcnNlUHBzKHJlbW92ZUVtdWxhdGlvblByZXZlbnRpb24ocHBzLmRhdGEpKTtcbiAgcmV0dXJuIHsgLi4ucywgLi4ucCB9O1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8xMi5cblxuaW1wb3J0IHsgQ29kZWMsIHR5cGUgQ29kZWNDb250ZXh0LCBGRm1wZWdFcnJvciwgRnJhbWUsIHR5cGUgUGFja2V0LCB0eXBlIFN0cmVhbSB9IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQge1xuICBBVl9QSVhfRk1UX0JHUkEsXG4gIEFWX1BJWF9GTVRfWVVWNDIwUCxcbiAgQVZFUlJPUl9FQUdBSU4sXG4gIEFWRVJST1JfRU9GLFxuICBGRl9FTkNPREVSX0hFVkNfTlZFTkMsXG59IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgbWFrZUZyYW1lLCBtYWtlUGFja2V0LCBvcGVuVmlkZW9DdHggfSBmcm9tIFwiLi4vbWlzY1wiO1xuaW1wb3J0IHR5cGUgeyBGb3JtYXRNdXhlciB9IGZyb20gXCIuLi9tdXhlclwiO1xuaW1wb3J0IHR5cGUgeyBId1ZpZGVvRW5jb2Rlck9wdGlvbnMgfSBmcm9tIFwiLi4vdmlkZW90b29sYm94XCI7XG5pbXBvcnQgeyBidWlsZFVuaWZpZWRFeHRyYWRhdGEsIGV4dHJhY3RBbHBoYVRvWXV2NDIwcEJ1ZmZlciB9IGZyb20gXCIuL2FscGhhXCI7XG5pbXBvcnQgeyBwYXRjaEhldmNBbHBoYVB0bCB9IGZyb20gXCIuL2FscGhhX2RhcndpblwiO1xuaW1wb3J0IHsgRHVhbExheWVyTXV4IH0gZnJvbSBcIi4vZHVhbF9sYXllcl9tdXhcIjtcbmltcG9ydCB7IHR5cGUgTnZlbmNIZXZjQ29uZmlnLCBwYXJzZU52ZW5jSGV2Y0NvbmZpZyB9IGZyb20gXCIuL3BhcnNlclwiO1xuXG5pbnRlcmZhY2UgTnZlbmNTdGF0ZSB7XG4gIGJhc2VDdHg6IENvZGVjQ29udGV4dDtcbiAgYWxwaGFDdHg6IENvZGVjQ29udGV4dDtcbiAgYmFzZVBrdDogUGFja2V0O1xuICBhbHBoYVBrdDogUGFja2V0O1xuICBzdHJlYW06IFN0cmVhbTtcbiAgYWxwaGFTd0ZyYW1lOiBGcmFtZTtcbiAgYWxwaGFCdWY6IEJ1ZmZlcjtcbiAgaGV2Y0NmZzogTnZlbmNIZXZjQ29uZmlnO1xufVxuXG5leHBvcnQgY2xhc3MgTnZlbmNEdWFsTGF5ZXJFbmNvZGVyIGltcGxlbWVudHMgRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgX3M6IE52ZW5jU3RhdGU7XG4gIHByaXZhdGUgX211eDogRHVhbExheWVyTXV4O1xuICBwcml2YXRlIF9wdHMgPSAwbjtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHM6IE52ZW5jU3RhdGUpIHtcbiAgICB0aGlzLl9zID0gcztcbiAgICB0aGlzLl9tdXggPSBuZXcgRHVhbExheWVyTXV4KHtcbiAgICAgIGJhc2VDdHg6IHMuYmFzZUN0eCxcbiAgICAgIGFscGhhQ3R4OiBzLmFscGhhQ3R4LFxuICAgICAgYmFzZVBrdDogcy5iYXNlUGt0LFxuICAgICAgYWxwaGFQa3Q6IHMuYWxwaGFQa3QsXG4gICAgICBzdHJlYW06IHMuc3RyZWFtLFxuICAgICAgaGV2Y0NmZzogcy5oZXZjQ2ZnLFxuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIGNyZWF0ZShvcHRzOiBId1ZpZGVvRW5jb2Rlck9wdGlvbnMpOiBQcm9taXNlPE52ZW5jRHVhbExheWVyRW5jb2Rlcj4ge1xuICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgZnBzLCBiaXRyYXRlLCBtdXhlciB9ID0gb3B0cztcblxuICAgIGNvbnN0IGNvZGVjID0gQ29kZWMuZmluZEVuY29kZXJCeU5hbWUoRkZfRU5DT0RFUl9IRVZDX05WRU5DKTtcbiAgICBpZiAoIWNvZGVjKSB0aHJvdyBuZXcgRXJyb3IoXCJoZXZjX252ZW5jIGVuY29kZXIgbm90IGZvdW5kXCIpO1xuXG4gICAgLy8gdGllcj1tYWluIG1hdGNoZXMgQXBwbGUgVmlkZW9Ub29sYm94OyBtYWNPUyBDaHJvbWUgcmVxdWlyZXMgTWFpbiB0aWVyIGZvciBIRVZDIGFscGhhIGRlY29kZS5cbiAgICBjb25zdCBudmVuY09wdHMgPSB7IHByZXNldDogXCJwNFwiLCBiZjogXCIwXCIsIHRpZXI6IFwibWFpblwiIH07XG4gICAgY29uc3QgY29tbW9uID0geyBjb2RlYywgd2lkdGgsIGhlaWdodCwgZnBzLCBiaXRyYXRlLCBvcHRpb25zOiBudmVuY09wdHMgfTtcbiAgICAvLyBCR1JBIGRpcmVjdCDigJQgTlZFTkMgY29udmVydHMgaW50ZXJuYWxseSwgbm8gQ1BVIFNXUywgbm8gaHdGcmFtZXNDdHggbmVlZGVkLlxuICAgIGNvbnN0IGJhc2VDdHggPSBhd2FpdCBvcGVuVmlkZW9DdHgoeyAuLi5jb21tb24sIHBpeGVsRm9ybWF0OiBBVl9QSVhfRk1UX0JHUkEgfSwgXCJudmVuYy5iYXNlLm9wZW4yXCIpO1xuXG4gICAgbGV0IGFscGhhQ3R4OiBDb2RlY0NvbnRleHQgfCB1bmRlZmluZWQ7XG4gICAgbGV0IGJhc2VQa3Q6IFBhY2tldCB8IHVuZGVmaW5lZDtcbiAgICBsZXQgYWxwaGFQa3Q6IFBhY2tldCB8IHVuZGVmaW5lZDtcbiAgICBsZXQgYWxwaGFTd0ZyYW1lOiBGcmFtZSB8IHVuZGVmaW5lZDtcbiAgICB0cnkge1xuICAgICAgYWxwaGFDdHggPSBhd2FpdCBvcGVuVmlkZW9DdHgoeyAuLi5jb21tb24sIHBpeGVsRm9ybWF0OiBBVl9QSVhfRk1UX1lVVjQyMFAgfSwgXCJudmVuYy5hbHBoYS5vcGVuMlwiKTtcblxuICAgICAgaWYgKCFiYXNlQ3R4LmV4dHJhRGF0YSB8fCAhYWxwaGFDdHguZXh0cmFEYXRhKSB0aHJvdyBuZXcgRXJyb3IoXCJudmVuYzogY29kZWMgZXh0cmFkYXRhIG1pc3NpbmdcIik7XG4gICAgICBjb25zdCBoZXZjQ2ZnID0gcGFyc2VOdmVuY0hldmNDb25maWcoYmFzZUN0eC5leHRyYURhdGEpO1xuXG4gICAgICBjb25zdCBzdHJlYW0gPSBtdXhlci5hZGRTdHJlYW0oYmFzZUN0eCwgXCJodmMxXCIpO1xuICAgICAgY29uc3QgdW5pZmllZCA9IGJ1aWxkVW5pZmllZEV4dHJhZGF0YSh7XG4gICAgICAgIGJhc2VFeHRyYWRhdGE6IGJhc2VDdHguZXh0cmFEYXRhLFxuICAgICAgICBhbHBoYUV4dHJhZGF0YTogYWxwaGFDdHguZXh0cmFEYXRhLFxuICAgICAgICB3aWR0aCxcbiAgICAgICAgaGVpZ2h0LFxuICAgICAgfSk7XG4gICAgICAvLyBBcHBsZS1WVEIgY29tcGF0OiByZXdyaXRlIFZQUytTUFMgUFRMIGJpdHMgdG8gbWF0Y2ggeDI2NS9WVEIgb3V0cHV0ICh0aWVyPU1haW4sIGNvbXBhdFsyXT0xKS5cbiAgICAgIHN0cmVhbS5jb2RlY3Bhci5leHRyYWRhdGEgPSBwYXRjaEhldmNBbHBoYVB0bCh1bmlmaWVkKTtcblxuICAgICAgY29uc3QgeVNpemUgPSB3aWR0aCAqIGhlaWdodDtcbiAgICAgIC8vIFlVVjQyMFAgY2hyb21hIHBsYW5lcyBhcmUgY2VpbCh3LzIpw5djZWlsKGgvMik7IGZsb29yIHVuZGVyZmxvd3Mgb24gb2RkIGRpbWVuc2lvbnMuXG4gICAgICBjb25zdCBjaHJvbWFTaXplID0gKCh3aWR0aCArIDEpID4+IDEpICogKChoZWlnaHQgKyAxKSA+PiAxKTtcbiAgICAgIGNvbnN0IGFscGhhQnVmID0gQnVmZmVyLmFsbG9jKHlTaXplICsgY2hyb21hU2l6ZSAqIDIpO1xuICAgICAgYWxwaGFCdWYuZmlsbCgxMjgsIHlTaXplKTtcblxuICAgICAgYmFzZVBrdCA9IG1ha2VQYWNrZXQoKTtcbiAgICAgIGFscGhhUGt0ID0gbWFrZVBhY2tldCgpO1xuICAgICAgYWxwaGFTd0ZyYW1lID0gbWFrZUZyYW1lKHdpZHRoLCBoZWlnaHQsIEFWX1BJWF9GTVRfWVVWNDIwUCk7XG5cbiAgICAgIHJldHVybiBuZXcgTnZlbmNEdWFsTGF5ZXJFbmNvZGVyKHtcbiAgICAgICAgYmFzZUN0eCxcbiAgICAgICAgYWxwaGFDdHgsXG4gICAgICAgIGJhc2VQa3QsXG4gICAgICAgIGFscGhhUGt0LFxuICAgICAgICBzdHJlYW0sXG4gICAgICAgIGFscGhhU3dGcmFtZSxcbiAgICAgICAgYWxwaGFCdWYsXG4gICAgICAgIGhldmNDZmcsXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBQYXJ0aWFsIGNvbnN0cnVjdGlvbjogZW5jb2RlciBuZXZlciByZXR1cm5lZCwgc28gW1N5bWJvbC5kaXNwb3NlXSBpcyB1bnJlYWNoYWJsZS5cbiAgICAgIGJhc2VQa3Q/LmZyZWUoKTtcbiAgICAgIGFscGhhUGt0Py5mcmVlKCk7XG4gICAgICBhbHBoYVN3RnJhbWU/LmZyZWUoKTtcbiAgICAgIGFscGhhQ3R4Py5mcmVlQ29udGV4dCgpO1xuICAgICAgYmFzZUN0eC5mcmVlQ29udGV4dCgpO1xuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBlbmNvZGUoYmdyYUZyYW1lOiBGcmFtZSwgbXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyBiYXNlQ3R4LCBhbHBoYUN0eCwgYWxwaGFTd0ZyYW1lLCBhbHBoYUJ1ZiB9ID0gdGhpcy5fcztcbiAgICBjb25zdCBwdHMgPSB0aGlzLl9wdHMrKztcblxuICAgIC8vIEV4dHJhY3QgdGhlIGFscGhhIHBsYW5lIGJlZm9yZSBiYXNlLnNlbmRGcmFtZSDigJQgdGhlIGVuY29kZXIgdW5yZWZzIHRoZSBpbnB1dCBmcmFtZS5cbiAgICBleHRyYWN0QWxwaGFUb1l1djQyMHBCdWZmZXIoYmdyYUZyYW1lLCBhbHBoYUJ1Zik7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGFscGhhU3dGcmFtZS5tYWtlV3JpdGFibGUoKSwgXCJhbHBoYVN3Lm1ha2VXcml0YWJsZVwiKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYWxwaGFTd0ZyYW1lLmZyb21CdWZmZXIoYWxwaGFCdWYpLCBcImFscGhhU3cuZnJvbUJ1ZmZlclwiKTtcbiAgICBhbHBoYVN3RnJhbWUucHRzID0gcHRzO1xuICAgIGFscGhhU3dGcmFtZS5kdXJhdGlvbiA9IDFuO1xuXG4gICAgYmdyYUZyYW1lLnB0cyA9IHB0cztcbiAgICBiZ3JhRnJhbWUuZHVyYXRpb24gPSAxbjtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgYmFzZUN0eC5zZW5kRnJhbWUoYmdyYUZyYW1lKSwgXCJiYXNlLnNlbmRGcmFtZVwiKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgYWxwaGFDdHguc2VuZEZyYW1lKGFscGhhU3dGcmFtZSksIFwiYWxwaGEuc2VuZEZyYW1lXCIpO1xuXG4gICAgYXdhaXQgdGhpcy5fbXV4LmRyYWluKG11eGVyKTtcbiAgfVxuXG4gIGFzeW5jIGZsdXNoKG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuc2VuZEVvZih0aGlzLl9zLmJhc2VDdHgsIFwiYmFzZVwiKTtcbiAgICBhd2FpdCB0aGlzLnNlbmRFb2YodGhpcy5fcy5hbHBoYUN0eCwgXCJhbHBoYVwiKTtcbiAgICBhd2FpdCB0aGlzLl9tdXguZHJhaW4obXV4ZXIpO1xuICAgIGNvbnN0IGRlc3luYyA9IHRoaXMuX211eC5kZXN5bmNBZnRlckVvZigpO1xuICAgIGlmIChkZXN5bmMpIHRocm93IG5ldyBFcnJvcihgTlZFTkMgZGVzeW5jOiAke2Rlc3luY31gKTtcbiAgfVxuXG4gIFtTeW1ib2wuZGlzcG9zZV0oKTogdm9pZCB7XG4gICAgY29uc3QgeyBiYXNlUGt0LCBhbHBoYVBrdCwgYmFzZUN0eCwgYWxwaGFDdHgsIGFscGhhU3dGcmFtZSB9ID0gdGhpcy5fcztcbiAgICBiYXNlUGt0LmZyZWUoKTtcbiAgICBhbHBoYVBrdC5mcmVlKCk7XG4gICAgYWxwaGFTd0ZyYW1lLmZyZWUoKTtcbiAgICAvLyBOVklESUEgZHJpdmVyIDUyMC41Ni4wNisgVUFGIGluIGxpYm52Y3V2aWQgd2hlbiBOVkVOQyBzZXNzaW9ucyBmcmVlZCBpbiBjcmVhdGlvbiBvcmRlci5cbiAgICAvLyBMSUZPIGRlc3Ryb3kgYXZvaWRzIHRoZSBzZWdmYXVsdC4gUGVyIE5WSURJQSBmb3J1bSAvdC8yNjk5NzQuXG4gICAgYWxwaGFDdHguZnJlZUNvbnRleHQoKTtcbiAgICBiYXNlQ3R4LmZyZWVDb250ZXh0KCk7XG4gIH1cblxuICAvLyBFT0YgZmx1c2g7IEVBR0FJTi9FT0YgcmV0dXJucyBhcmUgYmVuaWduIChhbHJlYWR5LWRyYWluaW5nIGVuY29kZXIpLlxuICBwcml2YXRlIGFzeW5jIHNlbmRFb2YoY3R4OiBDb2RlY0NvbnRleHQsIHRhZzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcmV0ID0gYXdhaXQgY3R4LnNlbmRGcmFtZShudWxsKTtcbiAgICBpZiAocmV0IDwgMCAmJiByZXQgIT09IEFWRVJST1JfRUFHQUlOICYmIHJldCAhPT0gQVZFUlJPUl9FT0YpIHtcbiAgICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihyZXQsIGBudmVuYy4ke3RhZ30uc2VuZEZyYW1lKG51bGwpYCk7XG4gICAgfVxuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAzLzIxLlxuXG5pbXBvcnQgeyBDb2RlYywgdHlwZSBDb2RlY0NvbnRleHQsIEZGbXBlZ0Vycm9yLCBGcmFtZSwgdHlwZSBQYWNrZXQsIHR5cGUgU3RyZWFtIH0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB7IHR5cGUgQVZQaXhlbEZvcm1hdCwgdHlwZSBGRlZpZGVvRW5jb2RlciB9IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgZHJhaW5QYWNrZXRzLCBtYWtlUGFja2V0LCBvcGVuVmlkZW9DdHggfSBmcm9tIFwiLi9taXNjXCI7XG5pbXBvcnQgdHlwZSB7IEZvcm1hdE11eGVyIH0gZnJvbSBcIi4vbXV4ZXJcIjtcblxuZXhwb3J0IGludGVyZmFjZSBWaWRlb0VuY29kZXJPcHRpb25zIHtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIGZwczogbnVtYmVyO1xuICBjb2RlY05hbWU6IEZGVmlkZW9FbmNvZGVyO1xuICBjb2RlY1RhZz86IHN0cmluZztcbiAgY29kZWNPcHRzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICBiaXRyYXRlOiBudW1iZXI7XG4gIHBpeGVsRm9ybWF0OiBBVlBpeGVsRm9ybWF0O1xuICBtdXhlcjogRm9ybWF0TXV4ZXI7XG59XG5cbmV4cG9ydCBjbGFzcyBWaWRlb0VuY29kZXIgaW1wbGVtZW50cyBEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfY3R4OiBDb2RlY0NvbnRleHQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3BrdDogUGFja2V0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdHJlYW06IFN0cmVhbTtcbiAgcHJpdmF0ZSBfcHRzID0gMG47XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihjdHg6IENvZGVjQ29udGV4dCwgcGt0OiBQYWNrZXQsIHN0cmVhbTogU3RyZWFtKSB7XG4gICAgdGhpcy5fY3R4ID0gY3R4O1xuICAgIHRoaXMuX3BrdCA9IHBrdDtcbiAgICB0aGlzLl9zdHJlYW0gPSBzdHJlYW07XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgY3JlYXRlKG9wdHM6IFZpZGVvRW5jb2Rlck9wdGlvbnMpOiBQcm9taXNlPFZpZGVvRW5jb2Rlcj4ge1xuICAgIGNvbnN0IHsgY29kZWNOYW1lLCBjb2RlY1RhZywgY29kZWNPcHRzLCBtdXhlciwgLi4ucmVzdCB9ID0gb3B0cztcblxuICAgIGNvbnN0IGNvZGVjID0gQ29kZWMuZmluZEVuY29kZXJCeU5hbWUoY29kZWNOYW1lKTtcbiAgICBpZiAoIWNvZGVjKSB0aHJvdyBuZXcgRXJyb3IoYFZpZGVvIGVuY29kZXIgbm90IGZvdW5kOiAke2NvZGVjTmFtZX1gKTtcblxuICAgIGNvbnN0IGN0eCA9IGF3YWl0IG9wZW5WaWRlb0N0eCh7IGNvZGVjLCAuLi5yZXN0LCBjb2RlY1RhZywgb3B0aW9uczogY29kZWNPcHRzIH0sIFwidmlkZW9DdHgub3BlbjJcIik7XG4gICAgY29uc3Qgc3RyZWFtID0gbXV4ZXIuYWRkU3RyZWFtKGN0eCwgY29kZWNUYWcpO1xuICAgIHJldHVybiBuZXcgVmlkZW9FbmNvZGVyKGN0eCwgbWFrZVBhY2tldCgpLCBzdHJlYW0pO1xuICB9XG5cbiAgYXN5bmMgZW5jb2RlKGZyYW1lOiBGcmFtZSwgbXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgZnJhbWUucHRzID0gdGhpcy5fcHRzKys7XG4gICAgZnJhbWUuZHVyYXRpb24gPSAxbjtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgdGhpcy5fY3R4LnNlbmRGcmFtZShmcmFtZSksIFwidmlkZW9DdHguc2VuZEZyYW1lXCIpO1xuICAgIGF3YWl0IHRoaXMuZHJhaW4obXV4ZXIpO1xuICB9XG5cbiAgYXN5bmMgZmx1c2gobXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5fY3R4LnNlbmRGcmFtZShudWxsKTtcbiAgICBhd2FpdCB0aGlzLmRyYWluKG11eGVyKTtcbiAgfVxuXG4gIFtTeW1ib2wuZGlzcG9zZV0oKTogdm9pZCB7XG4gICAgdGhpcy5fcGt0LmZyZWUoKTtcbiAgICB0aGlzLl9jdHguZnJlZUNvbnRleHQoKTtcbiAgfVxuXG4gIHByaXZhdGUgZHJhaW4obXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIGRyYWluUGFja2V0cyh0aGlzLl9jdHgsIHRoaXMuX3BrdCwgdGhpcy5fc3RyZWFtLCBtdXhlcik7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMTIuXG5cbmltcG9ydCB7IHR5cGUgQ29kZWNDb250ZXh0LCBGRm1wZWdFcnJvciwgRnJhbWUsIHR5cGUgUGFja2V0LCB0eXBlIFN0cmVhbSB9IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQgdHlwZSB7IEhhcmR3YXJlQ29udGV4dCB9IGZyb20gXCJub2RlLWF2L2FwaVwiO1xuaW1wb3J0IHsgQVZfUElYX0ZNVF9CR1JBLCBBVkNPTF9SQU5HRV9KUEVHIH0gZnJvbSBcIm5vZGUtYXYvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBkcmFpblBhY2tldHMsIG1ha2VQYWNrZXQsIG9wZW5WaWRlb0N0eCB9IGZyb20gXCIuL21pc2NcIjtcbmltcG9ydCB0eXBlIHsgRm9ybWF0TXV4ZXIgfSBmcm9tIFwiLi9tdXhlclwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEh3VmlkZW9FbmNvZGVyT3B0aW9ucyB7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICBmcHM6IG51bWJlcjtcbiAgaHc6IEhhcmR3YXJlQ29udGV4dDtcbiAgYml0cmF0ZTogbnVtYmVyO1xuICBtdXhlcjogRm9ybWF0TXV4ZXI7XG59XG5cbmV4cG9ydCBjbGFzcyBWaWRlb1Rvb2xib3hFbmNvZGVyIGltcGxlbWVudHMgRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgX2N0eDogQ29kZWNDb250ZXh0O1xuICBwcml2YXRlIF9wa3Q6IFBhY2tldDtcbiAgcHJpdmF0ZSBfc3RyZWFtOiBTdHJlYW07XG4gIHByaXZhdGUgX3B0cyA9IDBuO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoY3R4OiBDb2RlY0NvbnRleHQsIHBrdDogUGFja2V0LCBzdHJlYW06IFN0cmVhbSkge1xuICAgIHRoaXMuX2N0eCA9IGN0eDtcbiAgICB0aGlzLl9wa3QgPSBwa3Q7XG4gICAgdGhpcy5fc3RyZWFtID0gc3RyZWFtO1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIGNyZWF0ZShvcHRzOiBId1ZpZGVvRW5jb2Rlck9wdGlvbnMpOiBQcm9taXNlPFZpZGVvVG9vbGJveEVuY29kZXI+IHtcbiAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQsIGZwcywgaHcsIGJpdHJhdGUsIG11eGVyIH0gPSBvcHRzO1xuXG4gICAgY29uc3QgY29kZWMgPSBody5nZXRFbmNvZGVyQ29kZWMoXCJoZXZjXCIpO1xuICAgIGlmICghY29kZWMpIHRocm93IG5ldyBFcnJvcihcImhldmNfdmlkZW90b29sYm94IGVuY29kZXIgbm90IGZvdW5kXCIpO1xuXG4gICAgY29uc3QgY3R4ID0gYXdhaXQgb3BlblZpZGVvQ3R4KFxuICAgICAge1xuICAgICAgICBjb2RlYyxcbiAgICAgICAgd2lkdGgsXG4gICAgICAgIGhlaWdodCxcbiAgICAgICAgZnBzLFxuICAgICAgICBiaXRyYXRlLFxuICAgICAgICBwaXhlbEZvcm1hdDogQVZfUElYX0ZNVF9CR1JBLFxuICAgICAgICBjb2xvclJhbmdlOiBBVkNPTF9SQU5HRV9KUEVHLFxuICAgICAgICBjb2RlY1RhZzogXCJodmMxXCIsXG4gICAgICAgIG9wdGlvbnM6IHsgYWxwaGFfcXVhbGl0eTogXCIxXCIgfSxcbiAgICAgIH0sXG4gICAgICBcInZ0RW5jLm9wZW4yXCIsXG4gICAgKTtcbiAgICBsZXQgcGt0OiBQYWNrZXQgfCB1bmRlZmluZWQ7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHN0cmVhbSA9IG11eGVyLmFkZFN0cmVhbShjdHgsIFwiaHZjMVwiKTtcbiAgICAgIHBrdCA9IG1ha2VQYWNrZXQoKTtcbiAgICAgIHJldHVybiBuZXcgVmlkZW9Ub29sYm94RW5jb2RlcihjdHgsIHBrdCwgc3RyZWFtKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBQYXJ0aWFsIGNvbnN0cnVjdGlvbjogZW5jb2RlciBuZXZlciByZXR1cm5lZCwgc28gW1N5bWJvbC5kaXNwb3NlXSBpcyB1bnJlYWNoYWJsZS5cbiAgICAgIHBrdD8uZnJlZSgpO1xuICAgICAgY3R4LmZyZWVDb250ZXh0KCk7XG4gICAgICB0aHJvdyBlO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGVuY29kZShiZ3JhRnJhbWU6IEZyYW1lLCBtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBiZ3JhRnJhbWUucHRzID0gdGhpcy5fcHRzKys7XG4gICAgYmdyYUZyYW1lLmR1cmF0aW9uID0gMW47XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IHRoaXMuX2N0eC5zZW5kRnJhbWUoYmdyYUZyYW1lKSwgXCJ2dEVuYy5zZW5kRnJhbWVcIik7XG4gICAgYXdhaXQgdGhpcy5kcmFpbihtdXhlcik7XG4gIH1cblxuICBhc3luYyBmbHVzaChtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLl9jdHguc2VuZEZyYW1lKG51bGwpO1xuICAgIGF3YWl0IHRoaXMuZHJhaW4obXV4ZXIpO1xuICB9XG5cbiAgW1N5bWJvbC5kaXNwb3NlXSgpOiB2b2lkIHtcbiAgICB0aGlzLl9wa3QuZnJlZSgpO1xuICAgIHRoaXMuX2N0eC5mcmVlQ29udGV4dCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBkcmFpbihtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gZHJhaW5QYWNrZXRzKHRoaXMuX2N0eCwgdGhpcy5fcGt0LCB0aGlzLl9zdHJlYW0sIG11eGVyKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8xMy5cblxuaW1wb3J0IHsgSGFyZHdhcmVDb250ZXh0IH0gZnJvbSBcIm5vZGUtYXYvYXBpXCI7XG5pbXBvcnQge1xuICBBVl9QSVhfRk1UX1lVVkE0MjBQLFxuICBGRl9FTkNPREVSX0xJQlgyNjUsXG4gIEZGX0hXREVWSUNFX1RZUEVfQ1VEQSxcbiAgRkZfSFdERVZJQ0VfVFlQRV9WSURFT1RPT0xCT1gsXG59IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuXG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi4vbG9nZ2luZ1wiO1xuaW1wb3J0IHsgQ29kZWNTdGF0ZSB9IGZyb20gXCIuL2NvZGVjXCI7XG5pbXBvcnQgdHlwZSB7IEZvcm1hdE11eGVyIH0gZnJvbSBcIi4vbXV4ZXJcIjtcbmltcG9ydCB7IE52ZW5jRHVhbExheWVyRW5jb2RlciB9IGZyb20gXCIuL2hldmNfYWxwaGEvbnZlbmNcIjtcbmltcG9ydCB7IFZpZGVvRW5jb2RlciB9IGZyb20gXCIuL3ZpZGVvXCI7XG5pbXBvcnQgeyBWaWRlb1Rvb2xib3hFbmNvZGVyIH0gZnJvbSBcIi4vdmlkZW90b29sYm94XCI7XG5cbmNvbnN0IFRBRyA9IFwiW0VuY29kZXJdXCI7XG5cbmV4cG9ydCB0eXBlIEh3RW5jb2RlciA9IFZpZGVvVG9vbGJveEVuY29kZXIgfCBOdmVuY0R1YWxMYXllckVuY29kZXI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmlkZW9TZXR1cCB7XG4gIHZpZGVvPzogVmlkZW9FbmNvZGVyO1xuICBod1ZpZGVvPzogSHdFbmNvZGVyO1xuICBjb2RlYz86IENvZGVjU3RhdGU7XG4gIGh3PzogSGFyZHdhcmVDb250ZXh0O1xuICBvd25zSHc6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSHdWaWRlb0ZhY3RvcnlPcHRpb25zIHtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIGZwczogbnVtYmVyO1xuICBiaXRyYXRlPzogbnVtYmVyO1xuICBkaXNhYmxlSHdDb2RlYz86IGJvb2xlYW47XG4gIHNoYXJlZEh3PzogSGFyZHdhcmVDb250ZXh0O1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlSHdWaWRlb0VuY29kZXIob3B0czogSHdWaWRlb0ZhY3RvcnlPcHRpb25zLCBtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPFZpZGVvU2V0dXA+IHtcbiAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0LCBmcHMsIGJpdHJhdGUgPSA4XzAwMF8wMDAsIGRpc2FibGVId0NvZGVjID0gZmFsc2UsIHNoYXJlZEh3IH0gPSBvcHRzO1xuICBjb25zdCBodyA9IHNoYXJlZEh3ID8/IChkaXNhYmxlSHdDb2RlYyA/IHVuZGVmaW5lZCA6IChIYXJkd2FyZUNvbnRleHQuYXV0bygpID8/IHVuZGVmaW5lZCkpO1xuICBjb25zdCBvd25zSHcgPSAhc2hhcmVkSHcgJiYgISFodztcblxuICB0cnkge1xuICAgIGlmIChodz8uZGV2aWNlVHlwZU5hbWUgPT09IEZGX0hXREVWSUNFX1RZUEVfVklERU9UT09MQk9YICYmIGh3LmdldEVuY29kZXJDb2RlYyhcImhldmNcIikpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhUQUcsIFwidXNpbmcgVmlkZW9Ub29sYm94IEhFVkMgYWxwaGEgZW5jb2RlclwiKTtcbiAgICAgIGNvbnN0IGh3VmlkZW8gPSBhd2FpdCBWaWRlb1Rvb2xib3hFbmNvZGVyLmNyZWF0ZSh7IHdpZHRoLCBoZWlnaHQsIGZwcywgaHcsIGJpdHJhdGUsIG11eGVyIH0pO1xuICAgICAgcmV0dXJuIHsgaHdWaWRlbywgaHcsIG93bnNIdyB9O1xuICAgIH1cbiAgICBpZiAoaHc/LmRldmljZVR5cGVOYW1lID09PSBGRl9IV0RFVklDRV9UWVBFX0NVREEgJiYgaHcuZ2V0RW5jb2RlckNvZGVjKFwiaGV2Y1wiKSkge1xuICAgICAgbG9nZ2VyLmRlYnVnKFRBRywgXCJ1c2luZyBOVkVOQyBkdWFsLWxheWVyIEhFVkMgYWxwaGEgZW5jb2RlclwiKTtcbiAgICAgIGNvbnN0IGh3VmlkZW8gPSBhd2FpdCBOdmVuY0R1YWxMYXllckVuY29kZXIuY3JlYXRlKHsgd2lkdGgsIGhlaWdodCwgZnBzLCBodywgYml0cmF0ZSwgbXV4ZXIgfSk7XG4gICAgICByZXR1cm4geyBod1ZpZGVvLCBodywgb3duc0h3IH07XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgbG9nZ2VyLndhcm4oVEFHLCBcIkhhcmR3YXJlIGNvZGVjIHNlc3Npb24gbGltaXRzIHJlYWNoZWQsIHVzZSBzb2Z0d2FyZSBlbmNvZGVyXCIsIGUpO1xuICAgIGlmIChvd25zSHcpIGh3Py5kaXNwb3NlKCk7XG4gIH1cblxuICBsb2dnZXIuZGVidWcoVEFHLCBcInVzaW5nIHNvZnR3YXJlIGxpYngyNjUgSEVWQyBhbHBoYSBlbmNvZGVyXCIpO1xuICBjb25zdCB2aWRlbyA9IGF3YWl0IFZpZGVvRW5jb2Rlci5jcmVhdGUoe1xuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICBmcHMsXG4gICAgY29kZWNOYW1lOiBGRl9FTkNPREVSX0xJQlgyNjUsXG4gICAgY29kZWNUYWc6IFwiaHZjMVwiLFxuICAgIGNvZGVjT3B0czogeyBwcmVzZXQ6IFwibWVkaXVtXCIsIFwieDI2NS1wYXJhbXNcIjogXCJsb2ctbGV2ZWw9MTpiZnJhbWVzPTM6cG9vbHM9KzpmcmFtZS10aHJlYWRzPTBcIiB9LFxuICAgIGJpdHJhdGUsXG4gICAgcGl4ZWxGb3JtYXQ6IEFWX1BJWF9GTVRfWVVWQTQyMFAsXG4gICAgbXV4ZXIsXG4gIH0pO1xuICByZXR1cm4geyB2aWRlbywgY29kZWM6IGF3YWl0IENvZGVjU3RhdGUuY3JlYXRlKHdpZHRoLCBoZWlnaHQpLCBvd25zSHc6IGZhbHNlIH07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAzLzIxLlxuXG5pbXBvcnQgeyBDb2RlY0NvbnRleHQsIEZGbXBlZ0Vycm9yLCBGb3JtYXRDb250ZXh0LCBQYWNrZXQgfSBmcm9tIFwibm9kZS1hdlwiO1xuXG5leHBvcnQgY2xhc3MgRm9ybWF0TXV4ZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF9jdHg6IEZvcm1hdENvbnRleHQ7XG4gIHByaXZhdGUgX29wZW5lZCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKG91dFBhdGg6IHN0cmluZywgZm9ybWF0TmFtZT86IHN0cmluZykge1xuICAgIHRoaXMuX2N0eCA9IG5ldyBGb3JtYXRDb250ZXh0KCk7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKHRoaXMuX2N0eC5hbGxvY091dHB1dENvbnRleHQyKG51bGwsIGZvcm1hdE5hbWUgPz8gbnVsbCwgb3V0UGF0aCksIFwiYWxsb2NPdXRwdXRDb250ZXh0MlwiKTtcbiAgfVxuXG4gIGFkZFN0cmVhbShjb2RlY0N0eDogQ29kZWNDb250ZXh0LCBjb2RlY1RhZz86IHN0cmluZyk6IFJldHVyblR5cGU8Rm9ybWF0Q29udGV4dFtcIm5ld1N0cmVhbVwiXT4ge1xuICAgIGNvbnN0IHN0cmVhbSA9IHRoaXMuX2N0eC5uZXdTdHJlYW0obnVsbCk7XG4gICAgc3RyZWFtLnRpbWVCYXNlID0gY29kZWNDdHgudGltZUJhc2U7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKHN0cmVhbS5jb2RlY3Bhci5mcm9tQ29udGV4dChjb2RlY0N0eCksIFwiY29kZWNwYXIuZnJvbUNvbnRleHRcIik7XG4gICAgaWYgKGNvZGVjVGFnKSBzdHJlYW0uY29kZWNwYXIuY29kZWNUYWcgPSBjb2RlY1RhZztcbiAgICByZXR1cm4gc3RyZWFtO1xuICB9XG5cbiAgYXN5bmMgb3BlbigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fb3BlbmVkKSByZXR1cm47XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IHRoaXMuX2N0eC5vcGVuT3V0cHV0KCksIFwib3Blbk91dHB1dFwiKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgdGhpcy5fY3R4LndyaXRlSGVhZGVyKG51bGwpLCBcIndyaXRlSGVhZGVyXCIpO1xuICAgIHRoaXMuX29wZW5lZCA9IHRydWU7XG4gIH1cblxuICBhc3luYyB3cml0ZVBhY2tldChwa3Q6IFBhY2tldCk6IFByb21pc2U8dm9pZD4ge1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCB0aGlzLl9jdHguaW50ZXJsZWF2ZWRXcml0ZUZyYW1lKHBrdCksIFwiaW50ZXJsZWF2ZWRXcml0ZUZyYW1lXCIpO1xuICB9XG5cbiAgYXN5bmMgW1N5bWJvbC5hc3luY0Rpc3Bvc2VdKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5fb3BlbmVkKSByZXR1cm47XG4gICAgdGhpcy5fb3BlbmVkID0gZmFsc2U7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuX2N0eC53cml0ZVRyYWlsZXIoKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgLy8gQSBmYWlsZWQvdHJ1bmNhdGVkIHRyYWlsZXIgd3JpdGUgbXVzdCBub3QgbGVhayB0aGUgRkQgKyBuYXRpdmUgY29udGV4dC5cbiAgICAgIGF3YWl0IHRoaXMuX2N0eC5jbG9zZU91dHB1dCgpO1xuICAgICAgYXdhaXQgdGhpcy5fY3R4W1N5bWJvbC5hc3luY0Rpc3Bvc2VdKCk7XG4gICAgfVxuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzI0LlxuXG5pbXBvcnQgeyBvayB9IGZyb20gXCJhc3NlcnRcIjtcbmltcG9ydCB7IEZGbXBlZ0Vycm9yLCB0eXBlIEZyYW1lIH0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB0eXBlIHsgSGFyZHdhcmVDb250ZXh0IH0gZnJvbSBcIm5vZGUtYXYvYXBpXCI7XG5pbXBvcnQge1xuICBBVl9QSVhfRk1UX1lVVkE0MjBQLFxuICBBVl9TQU1QTEVfRk1UX0ZMVCxcbiAgQVZfU0FNUExFX0ZNVF9GTFRQLFxuICBGRl9FTkNPREVSX0FBQyxcbiAgRkZfRU5DT0RFUl9MSUJPUFVTLFxuICB0eXBlIEZGVmlkZW9FbmNvZGVyLFxufSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcbmltcG9ydCB7IEF1ZGlvRW5jb2RlciB9IGZyb20gXCIuL2F1ZGlvXCI7XG5pbXBvcnQgeyBDb2RlY1N0YXRlIH0gZnJvbSBcIi4vY29kZWNcIjtcbmltcG9ydCB7IGNyZWF0ZUh3VmlkZW9FbmNvZGVyLCB0eXBlIEh3RW5jb2RlciwgdHlwZSBWaWRlb1NldHVwIH0gZnJvbSBcIi4vZmFjdG9yeVwiO1xuaW1wb3J0IHsgRm9ybWF0TXV4ZXIgfSBmcm9tIFwiLi9tdXhlclwiO1xuaW1wb3J0IHsgVmlkZW9FbmNvZGVyIH0gZnJvbSBcIi4vdmlkZW9cIjtcblxuLy8gbm9kZS1hdiA1LjIuMyBjb25zdGFudCBpcyB3cm9uZzsgZmZtcGVnIHJlZ2lzdGVycyB3aXRoIGRhc2guXG5jb25zdCBGRl9FTkNPREVSX0xJQlZQWF9WUDkgPSBcImxpYnZweC12cDlcIiBhcyBGRlZpZGVvRW5jb2RlcjtcblxuZXhwb3J0IHR5cGUgU2lua0tpbmQgPSBcIm1wNFwiIHwgXCJ3ZWJtXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2lua09wdGlvbnMge1xuICBvdXRGaWxlOiBzdHJpbmc7XG4gIGtpbmQ6IFNpbmtLaW5kO1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgZnBzOiBudW1iZXI7XG4gIHdpdGhBdWRpbzogYm9vbGVhbjtcbiAgZGlzYWJsZUh3Q29kZWM6IGJvb2xlYW47XG4gIHNoYXJlZEh3PzogSGFyZHdhcmVDb250ZXh0O1xufVxuXG5pbnRlcmZhY2UgU2lua1N0YXRlIHtcbiAgbXV4ZXI6IEZvcm1hdE11eGVyO1xuICB2aWRlbz86IFZpZGVvRW5jb2RlcjtcbiAgaHdWaWRlbz86IEh3RW5jb2RlcjtcbiAgYXVkaW8/OiBBdWRpb0VuY29kZXI7XG4gIGNvZGVjPzogQ29kZWNTdGF0ZTtcbiAgb3duc0h3OiBib29sZWFuO1xuICBodz86IEhhcmR3YXJlQ29udGV4dDtcbiAgb3B0czogU2lua09wdGlvbnM7XG59XG5cbmV4cG9ydCBjbGFzcyBPdXRwdXRTaW5rIGltcGxlbWVudHMgQXN5bmNEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSBfczogU2lua1N0YXRlO1xuICBwcml2YXRlIF9kaXNwb3NlZCA9IGZhbHNlO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoczogU2lua1N0YXRlKSB7XG4gICAgdGhpcy5fcyA9IHM7XG4gIH1cblxuICBzdGF0aWMga2luZEZyb21QYXRoKHBhdGg6IHN0cmluZyk6IFNpbmtLaW5kIHtcbiAgICBjb25zdCBsb3dlciA9IHBhdGgudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAobG93ZXIuZW5kc1dpdGgoXCIud2VibVwiKSkgcmV0dXJuIFwid2VibVwiO1xuICAgIGlmIChsb3dlci5lbmRzV2l0aChcIi5tcDRcIikgfHwgbG93ZXIuZW5kc1dpdGgoXCIubW92XCIpKSByZXR1cm4gXCJtcDRcIjtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIG91dHB1dCBleHRlbnNpb246ICR7cGF0aH1gKTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBjcmVhdGUob3B0czogU2lua09wdGlvbnMpOiBQcm9taXNlPE91dHB1dFNpbms+IHtcbiAgICBjb25zdCBtdXhlciA9IG5ldyBGb3JtYXRNdXhlcihvcHRzLm91dEZpbGUpO1xuICAgIGNvbnN0IHZpZGVvID0gb3B0cy5raW5kID09PSBcIm1wNFwiID8gYXdhaXQgdGhpcy5tcDRWaWRlbyhvcHRzLCBtdXhlcikgOiBhd2FpdCB0aGlzLndlYm1WaWRlbyhvcHRzLCBtdXhlcik7XG4gICAgY29uc3QgYXVkaW8gPSBvcHRzLndpdGhBdWRpbyA/IGF3YWl0IHRoaXMuYXVkaW9Gb3Iob3B0cywgbXV4ZXIpIDogdW5kZWZpbmVkO1xuICAgIGF3YWl0IG11eGVyLm9wZW4oKTtcbiAgICByZXR1cm4gbmV3IE91dHB1dFNpbmsoeyBtdXhlciwgLi4udmlkZW8sIGF1ZGlvLCBvcHRzIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgbXA0VmlkZW8ob3B0czogU2lua09wdGlvbnMsIG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8VmlkZW9TZXR1cD4ge1xuICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgZnBzLCBkaXNhYmxlSHdDb2RlYywgc2hhcmVkSHcgfSA9IG9wdHM7XG4gICAgcmV0dXJuIGNyZWF0ZUh3VmlkZW9FbmNvZGVyKHsgd2lkdGgsIGhlaWdodCwgZnBzLCBkaXNhYmxlSHdDb2RlYywgc2hhcmVkSHcgfSwgbXV4ZXIpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgYXN5bmMgd2VibVZpZGVvKG9wdHM6IFNpbmtPcHRpb25zLCBtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPFZpZGVvU2V0dXA+IHtcbiAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQsIGZwcyB9ID0gb3B0cztcbiAgICBjb25zdCB2aWRlbyA9IGF3YWl0IFZpZGVvRW5jb2Rlci5jcmVhdGUoe1xuICAgICAgd2lkdGgsXG4gICAgICBoZWlnaHQsXG4gICAgICBmcHMsXG4gICAgICBjb2RlY05hbWU6IEZGX0VOQ09ERVJfTElCVlBYX1ZQOSxcbiAgICAgIGNvZGVjT3B0czogeyBkZWFkbGluZTogXCJyZWFsdGltZVwiLCBcImNwdS11c2VkXCI6IFwiOFwiLCBcInJvdy1tdFwiOiBcIjFcIiwgdGhyZWFkczogXCIyXCIgfSxcbiAgICAgIGJpdHJhdGU6IDRfMDAwXzAwMCxcbiAgICAgIHBpeGVsRm9ybWF0OiBBVl9QSVhfRk1UX1lVVkE0MjBQLFxuICAgICAgbXV4ZXIsXG4gICAgfSk7XG4gICAgcmV0dXJuIHsgdmlkZW8sIGNvZGVjOiBhd2FpdCBDb2RlY1N0YXRlLmNyZWF0ZSh3aWR0aCwgaGVpZ2h0KSwgb3duc0h3OiBmYWxzZSB9O1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgYXVkaW9Gb3Iob3B0czogU2lua09wdGlvbnMsIG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8QXVkaW9FbmNvZGVyPiB7XG4gICAgLy8gT3B1cyByZWplY3RzIDQ0LjFrLlxuICAgIGNvbnN0IGNmZyA9XG4gICAgICBvcHRzLmtpbmQgPT09IFwibXA0XCJcbiAgICAgICAgPyB7IG91dFNhbXBsZVJhdGU6IDQ0XzEwMCwgb3V0U2FtcGxlRm10OiBBVl9TQU1QTEVfRk1UX0ZMVFAsIGNvZGVjTmFtZTogRkZfRU5DT0RFUl9BQUMgfVxuICAgICAgICA6IHsgb3V0U2FtcGxlUmF0ZTogNDhfMDAwLCBvdXRTYW1wbGVGbXQ6IEFWX1NBTVBMRV9GTVRfRkxULCBjb2RlY05hbWU6IEZGX0VOQ09ERVJfTElCT1BVUyB9O1xuICAgIHJldHVybiBBdWRpb0VuY29kZXIuY3JlYXRlKHsgLi4uY2ZnLCBnbG9iYWxIZWFkZXI6IHRydWUsIGJpdHJhdGU6IDEyOF8wMDAsIG11eGVyIH0pO1xuICB9XG5cbiAgc2V0SW5wdXRSYXRlKHNhbXBsZVJhdGU6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuX3MuYXVkaW8/LnNldElucHV0UmF0ZShzYW1wbGVSYXRlKTtcbiAgfVxuXG4gIGFzeW5jIGVuY29kZUJHUkEoYmdyYUZyYW1lOiBGcmFtZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgaHdWaWRlbywgbXV4ZXIgfSA9IHRoaXMuX3M7XG4gICAgaWYgKGh3VmlkZW8pIHJldHVybiBod1ZpZGVvLmVuY29kZShiZ3JhRnJhbWUsIG11eGVyKTtcbiAgICByZXR1cm4gdGhpcy5zd0VuY29kZShiZ3JhRnJhbWUpO1xuICB9XG5cbiAgYXN5bmMgZW5jb2RlRGVjb2RlZEZyYW1lKHNyYzogRnJhbWUpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IGh3VmlkZW8sIG11eGVyIH0gPSB0aGlzLl9zO1xuICAgIGlmIChod1ZpZGVvKSByZXR1cm4gaHdWaWRlby5lbmNvZGUoc3JjLCBtdXhlcik7XG4gICAgcmV0dXJuIHRoaXMuc3dFbmNvZGUoc3JjKTtcbiAgfVxuXG4gIGFzeW5jIGVuY29kZUF1ZGlvKHBjbTogQnVmZmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5fcy5hdWRpbz8uZW5jb2RlKHBjbSwgdGhpcy5fcy5tdXhlcik7XG4gIH1cblxuICBhc3luYyBmbHVzaCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IGh3VmlkZW8sIHZpZGVvLCBhdWRpbywgbXV4ZXIgfSA9IHRoaXMuX3M7XG4gICAgYXdhaXQgYXVkaW8/LmZsdXNoKG11eGVyKTtcbiAgICBpZiAoaHdWaWRlbykgYXdhaXQgaHdWaWRlby5mbHVzaChtdXhlcik7XG4gICAgZWxzZSBhd2FpdCB2aWRlbyEuZmx1c2gobXV4ZXIpO1xuICB9XG5cbiAgYXN5bmMgW1N5bWJvbC5hc3luY0Rpc3Bvc2VdKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9kaXNwb3NlZCkgcmV0dXJuO1xuICAgIHRoaXMuX2Rpc3Bvc2VkID0gdHJ1ZTtcbiAgICBjb25zdCB7IG11eGVyLCB2aWRlbywgaHdWaWRlbywgYXVkaW8sIGNvZGVjLCBodywgb3duc0h3IH0gPSB0aGlzLl9zO1xuICAgIHZpZGVvPy5bU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgaHdWaWRlbz8uW1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgIGF1ZGlvPy5bU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgY29kZWM/LltTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICBhd2FpdCBtdXhlcltTeW1ib2wuYXN5bmNEaXNwb3NlXSgpO1xuICAgIGlmIChvd25zSHcpIGh3Py5kaXNwb3NlKCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHN3RW5jb2RlKHNyYzogRnJhbWUpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IHZpZGVvLCBjb2RlYywgbXV4ZXIgfSA9IHRoaXMuX3M7XG4gICAgb2soY29kZWM/LnN3cywgXCJzd3Mgbm90IGluaXRpYWxpemVkXCIpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihjb2RlYy5kc3QubWFrZVdyaXRhYmxlKCksIFwic2lua0RzdC5tYWtlV3JpdGFibGVcIik7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IGNvZGVjLnN3cy5zY2FsZUZyYW1lKGNvZGVjLmRzdCwgc3JjKSwgXCJzaW5rU3dzLnNjYWxlRnJhbWVcIik7XG4gICAgYXdhaXQgdmlkZW8hLmVuY29kZShjb2RlYy5kc3QsIG11eGVyKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8wMS5cblxuaW1wb3J0IHsgRkZtcGVnRXJyb3IsIEZyYW1lIH0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB7IEhhcmR3YXJlQ29udGV4dCB9IGZyb20gXCJub2RlLWF2L2FwaVwiO1xuaW1wb3J0IHsgQVZfUElYX0ZNVF9CR1JBLCBGRl9IV0RFVklDRV9UWVBFX0NVREEsIEZGX0hXREVWSUNFX1RZUEVfVklERU9UT09MQk9YIH0gZnJvbSBcIm5vZGUtYXYvY29uc3RhbnRzXCI7XG5cbmltcG9ydCB7IENvbmN1cnJlbmN5TGltaXRlciB9IGZyb20gXCIuLi9saW1pdGVyXCI7XG5pbXBvcnQgeyBDb2RlY1N0YXRlIH0gZnJvbSBcIi4vY29kZWNcIjtcbmltcG9ydCB7IG1ha2VGcmFtZSB9IGZyb20gXCIuL21pc2NcIjtcbmltcG9ydCB7IE91dHB1dFNpbmsgfSBmcm9tIFwiLi9zaW5rXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRW5jb2RlclBpcGVsaW5lT3B0aW9ucyB7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICBmcHM6IG51bWJlcjtcbiAgb3V0RmlsZTogc3RyaW5nO1xuICB3aXRoQXVkaW8/OiBib29sZWFuO1xuICBkaXNhYmxlSHdDb2RlYz86IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBQaXBlbGluZVN0YXRlIHtcbiAgc2lua3M6IE91dHB1dFNpbmtbXTtcbiAgc2hhcmVkSHc/OiBIYXJkd2FyZUNvbnRleHQ7XG4gIGxpbWl0ZXI6IENvbmN1cnJlbmN5TGltaXRlcjtcbiAgcG5nQ29kZWM/OiBDb2RlY1N0YXRlO1xuICBvdXRGaWxlczogc3RyaW5nW107XG4gIG9wdHM6IEVuY29kZXJQaXBlbGluZU9wdGlvbnM7XG59XG5cbmV4cG9ydCBjbGFzcyBFbmNvZGVyUGlwZWxpbmUge1xuICBwcml2YXRlIF9zOiBQaXBlbGluZVN0YXRlO1xuICBwcml2YXRlIF9kaXNwb3NlZCA9IGZhbHNlO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoczogUGlwZWxpbmVTdGF0ZSkge1xuICAgIHRoaXMuX3MgPSBzO1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIGNyZWF0ZShvcHRzOiBFbmNvZGVyUGlwZWxpbmVPcHRpb25zKTogUHJvbWlzZTxFbmNvZGVyUGlwZWxpbmU+IHtcbiAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQsIGZwcywgb3V0RmlsZSwgd2l0aEF1ZGlvID0gZmFsc2UsIGRpc2FibGVId0NvZGVjID0gZmFsc2UgfSA9IG9wdHM7XG4gICAgY29uc3Qgb3V0RmlsZXMgPSBvdXRGaWxlXG4gICAgICAuc3BsaXQoXCIsXCIpXG4gICAgICAubWFwKChwKSA9PiBwLnRyaW0oKSlcbiAgICAgIC5maWx0ZXIoQm9vbGVhbik7XG4gICAgaWYgKG91dEZpbGVzLmxlbmd0aCA9PT0gMCkgdGhyb3cgbmV3IEVycm9yKFwib3V0RmlsZSBtdXN0IGNvbnRhaW4gYXQgbGVhc3Qgb25lIHBhdGhcIik7XG5cbiAgICBjb25zdCBraW5kcyA9IG91dEZpbGVzLm1hcCgocCkgPT4gT3V0cHV0U2luay5raW5kRnJvbVBhdGgocCkpO1xuICAgIGNvbnN0IG5lZWRzTXA0SHcgPSAhZGlzYWJsZUh3Q29kZWMgJiYga2luZHMuaW5jbHVkZXMoXCJtcDRcIik7XG4gICAgY29uc3Qgc2hhcmVkSHcgPSBuZWVkc01wNEh3ID8gKEhhcmR3YXJlQ29udGV4dC5hdXRvKCkgPz8gdW5kZWZpbmVkKSA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBpc0h3QWxwaGFDYXBhYmxlID1cbiAgICAgIHNoYXJlZEh3Py5kZXZpY2VUeXBlTmFtZSA9PT0gRkZfSFdERVZJQ0VfVFlQRV9WSURFT1RPT0xCT1ggfHwgc2hhcmVkSHc/LmRldmljZVR5cGVOYW1lID09PSBGRl9IV0RFVklDRV9UWVBFX0NVREE7XG5cbiAgICBjb25zdCBzaW5rczogT3V0cHV0U2lua1tdID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvdXRGaWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3Qgc2luayA9IGF3YWl0IE91dHB1dFNpbmsuY3JlYXRlKHtcbiAgICAgICAgb3V0RmlsZTogb3V0RmlsZXNbaV0hLFxuICAgICAgICBraW5kOiBraW5kc1tpXSEsXG4gICAgICAgIHdpZHRoLFxuICAgICAgICBoZWlnaHQsXG4gICAgICAgIGZwcyxcbiAgICAgICAgd2l0aEF1ZGlvLFxuICAgICAgICBkaXNhYmxlSHdDb2RlYyxcbiAgICAgICAgc2hhcmVkSHc6IGtpbmRzW2ldID09PSBcIm1wNFwiICYmIGlzSHdBbHBoYUNhcGFibGUgPyBzaGFyZWRIdyA6IHVuZGVmaW5lZCxcbiAgICAgIH0pO1xuICAgICAgc2lua3MucHVzaChzaW5rKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEVuY29kZXJQaXBlbGluZSh7IHNpbmtzLCBzaGFyZWRIdywgbGltaXRlcjogbmV3IENvbmN1cnJlbmN5TGltaXRlcigxKSwgb3V0RmlsZXMsIG9wdHMgfSk7XG4gIH1cblxuICBzZXR1cEF1ZGlvKHNhbXBsZVJhdGU6IG51bWJlcik6IHZvaWQge1xuICAgIGZvciAoY29uc3Qgc2luayBvZiB0aGlzLl9zLnNpbmtzKSBzaW5rLnNldElucHV0UmF0ZShzYW1wbGVSYXRlKTtcbiAgfVxuXG4gIGFzeW5jIGVuY29kZUJHUkEoaW5wdXQ6IEJ1ZmZlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuX3MubGltaXRlci5zY2hlZHVsZShhc3luYyAoKSA9PiB7XG4gICAgICB1c2luZyBmcmFtZSA9IHRoaXMuYmdyYUZyYW1lKGlucHV0KTtcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKHRoaXMuX3Muc2lua3MubWFwKChzaW5rKSA9PiBzaW5rLmVuY29kZUJHUkEoZnJhbWUpKSk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBlbmNvZGVQTkcocG5nRGF0YTogQnVmZmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5fcy5saW1pdGVyLnNjaGVkdWxlKGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gdGhpcy5fcy5vcHRzO1xuICAgICAgdGhpcy5fcy5wbmdDb2RlYyA/Pz0gYXdhaXQgQ29kZWNTdGF0ZS5jcmVhdGUod2lkdGgsIGhlaWdodCk7XG4gICAgICBjb25zdCBzcmMgPSBhd2FpdCB0aGlzLl9zLnBuZ0NvZGVjLmRlY29kZVBORyhwbmdEYXRhKTtcbiAgICAgIGZvciAoY29uc3Qgc2luayBvZiB0aGlzLl9zLnNpbmtzKSBhd2FpdCBzaW5rLmVuY29kZURlY29kZWRGcmFtZShzcmMpO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZW5jb2RlQXVkaW8ocGNtOiBCdWZmZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLl9zLmxpbWl0ZXIuc2NoZWR1bGUoYXN5bmMgKCkgPT4ge1xuICAgICAgZm9yIChjb25zdCBzaW5rIG9mIHRoaXMuX3Muc2lua3MpIGF3YWl0IHNpbmsuZW5jb2RlQXVkaW8ocGNtKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGZpbmlzaCgpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuX3MubGltaXRlci5kcmFpbigpO1xuICAgICAgZm9yIChjb25zdCBzaW5rIG9mIHRoaXMuX3Muc2lua3MpIGF3YWl0IHNpbmsuZmx1c2goKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgYXdhaXQgdGhpcy5mcmVlKCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9zLm91dEZpbGVzO1xuICB9XG5cbiAgYXN5bmMgW1N5bWJvbC5hc3luY0Rpc3Bvc2VdKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9kaXNwb3NlZCkgcmV0dXJuO1xuICAgIGF3YWl0IHRoaXMuX3MubGltaXRlci5kcmFpbigpO1xuICAgIGF3YWl0IHRoaXMuZnJlZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBmcmVlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9kaXNwb3NlZCkgcmV0dXJuO1xuICAgIHRoaXMuX2Rpc3Bvc2VkID0gdHJ1ZTtcbiAgICBmb3IgKGNvbnN0IHNpbmsgb2YgdGhpcy5fcy5zaW5rcykgYXdhaXQgc2lua1tTeW1ib2wuYXN5bmNEaXNwb3NlXSgpO1xuICAgIHRoaXMuX3MucG5nQ29kZWM/LltTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICB0aGlzLl9zLnNoYXJlZEh3Py5kaXNwb3NlKCk7XG4gIH1cblxuICBwcml2YXRlIGJncmFGcmFtZShpbnB1dDogQnVmZmVyKTogRnJhbWUge1xuICAgIGNvbnN0IGZyYW1lID0gbWFrZUZyYW1lKHRoaXMuX3Mub3B0cy53aWR0aCwgdGhpcy5fcy5vcHRzLmhlaWdodCwgQVZfUElYX0ZNVF9CR1JBKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoZnJhbWUuZnJvbUJ1ZmZlcihpbnB1dCksIFwiYmdyYUZyYW1lLmZyb21CdWZmZXJcIik7XG4gICAgcmV0dXJuIGZyYW1lO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAzLzIzLlxuXG4vKipcbiAqIEZyYW1lIGRyb3AgcXVhbGl0eSBzY29yZSAoMCA9IHBlcmZlY3QsIDEgPSB3b3JzdCkuXG4gKlxuICogQ29tYmluZXMgdHdvIGRpbWVuc2lvbnM6XG4gKiAtIEdsb2JhbDogb3ZlcmFsbCBkcm9wIHJhdGUgYWNyb3NzIHRoZSB0aW1lbGluZVxuICogLSBMb2NhbDogcGVyY2VwdHVhbCBzZXZlcml0eSBvZiBjb25zZWN1dGl2ZSBkcm9wcyAoYnVyc3RzKVxuICpcbiAqIFVzZXMgY29tcGxlbWVudGFyeSBtdWx0aXBsaWNhdGlvbjogc2NvcmUgPSAxIC0gKDEtZykoMS1sKVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZyYW1lRHJvcFNjb3JlIHtcbiAgZ2xvYmFsOiBudW1iZXI7XG4gIGxvY2FsOiBudW1iZXI7XG4gIGphbms6IG51bWJlcjtcbiAgZXhwZWN0ZWQ6IG51bWJlcjtcbiAgYWN0dWFsOiBudW1iZXI7XG4gIG1heEJ1cnN0OiBudW1iZXI7XG59XG5cbmV4cG9ydCBjbGFzcyBGcmFtZURyb3BTdGF0cyB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2ZwczogbnVtYmVyO1xuICBwcml2YXRlIF9hY3R1YWwgPSAwO1xuICBwcml2YXRlIF9jdXJyZW50QnVyc3QgPSAwO1xuICBwcml2YXRlIF9idXJzdHM6IG51bWJlcltdID0gW107XG5cbiAgY29uc3RydWN0b3IoZnBzOiBudW1iZXIpIHtcbiAgICB0aGlzLl9mcHMgPSBmcHM7XG4gIH1cblxuICAvKiogQ2FsbCB3aGVuIGEgZnJhbWUgaXMgYWN0dWFsbHkgd3JpdHRlbiB0byB0aGUgZW5jb2Rlci4gKi9cbiAgd3JvdGUoY291bnQgPSAxKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2N1cnJlbnRCdXJzdCA+IDApIHtcbiAgICAgIHRoaXMuX2J1cnN0cy5wdXNoKHRoaXMuX2N1cnJlbnRCdXJzdCk7XG4gICAgICB0aGlzLl9jdXJyZW50QnVyc3QgPSAwO1xuICAgIH1cbiAgICB0aGlzLl9hY3R1YWwgKz0gY291bnQ7XG4gIH1cblxuICAvKiogQ2FsbCB3aGVuIGEgZnJhbWUgaXMgZHJvcHBlZC4gKi9cbiAgZHJvcHBlZChjb3VudCA9IDEpOiB2b2lkIHtcbiAgICB0aGlzLl9jdXJyZW50QnVyc3QgKz0gY291bnQ7XG4gIH1cblxuICAvKiogRmluYWxpemUgYW5kIHJldHVybiB0aGUgc2NvcmUuICovXG4gIGZpbmFsaXplKCk6IEZyYW1lRHJvcFNjb3JlIHtcbiAgICBpZiAodGhpcy5fY3VycmVudEJ1cnN0ID4gMCkge1xuICAgICAgdGhpcy5fYnVyc3RzLnB1c2godGhpcy5fY3VycmVudEJ1cnN0KTtcbiAgICAgIHRoaXMuX2N1cnJlbnRCdXJzdCA9IDA7XG4gICAgfVxuXG4gICAgbGV0IHRvdGFsRHJvcHBlZCA9IDA7XG4gICAgbGV0IGxvY2FsU3VtID0gMDtcbiAgICBsZXQgbWF4QnVyc3QgPSAwO1xuICAgIGZvciAoY29uc3QgYnVyc3Qgb2YgdGhpcy5fYnVyc3RzKSB7XG4gICAgICB0b3RhbERyb3BwZWQgKz0gYnVyc3Q7XG4gICAgICBtYXhCdXJzdCA9IE1hdGgubWF4KG1heEJ1cnN0LCBidXJzdCk7XG4gICAgICBjb25zdCBwZXJjZXB0aWJsZSA9IE1hdGgubWF4KDAsIGJ1cnN0IC0gMSk7XG4gICAgICBsb2NhbFN1bSArPSAocGVyY2VwdGlibGUgLyB0aGlzLl9mcHMpICoqIDI7XG4gICAgfVxuXG4gICAgY29uc3QgZXhwZWN0ZWQgPSB0aGlzLl9hY3R1YWwgKyB0b3RhbERyb3BwZWQ7XG4gICAgY29uc3QgZyA9IGV4cGVjdGVkID4gMCA/IHRvdGFsRHJvcHBlZCAvIGV4cGVjdGVkIDogMDtcbiAgICBjb25zdCBsID0gTWF0aC5taW4oMSwgbG9jYWxTdW0pO1xuICAgIGNvbnN0IHNjb3JlID0gMSAtICgxIC0gZykgKiAoMSAtIGwpO1xuXG4gICAgcmV0dXJuIHsgZ2xvYmFsOiBnLCBsb2NhbDogbCwgamFuazogc2NvcmUsIGV4cGVjdGVkLCBhY3R1YWw6IHRoaXMuX2FjdHVhbCwgbWF4QnVyc3QgfTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wNi5cblxuaW1wb3J0IHR5cGUgeyBOYXRpdmVJbWFnZSwgU2l6ZSB9IGZyb20gXCJlbGVjdHJvblwiO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNFbXB0eShpbWFnZTogTmF0aXZlSW1hZ2UpIHtcbiAgY29uc3Qgc2l6ZSA9IGltYWdlLmdldFNpemUoKTtcbiAgaWYgKHNpemUud2lkdGggPT09IDAgfHwgc2l6ZS5oZWlnaHQgPT09IDApIHJldHVybiB0cnVlO1xuICByZXR1cm4gaW1hZ2UuaXNFbXB0eSgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2l6ZUVxdWFscyhhOiBTaXplLCBiOiBTaXplKSB7XG4gIHJldHVybiBhLndpZHRoID09PSBiLndpZHRoICYmIGEuaGVpZ2h0ID09PSBiLmhlaWdodDtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDMvMDIuXG5cbmltcG9ydCB7IHR5cGUgV2ViQ29udGVudHMgfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB0eXBlIHsgRW5jb2RlclBpcGVsaW5lIH0gZnJvbSBcIi4uL2Jhc2UvZW5jb2Rlci9waXBlbGluZVwiO1xuXG5leHBvcnQgY29uc3QgQVVESU9fTUVUQV9DSEFOTkVMID0gXCJhdWRpby1tZXRhXCI7XG5leHBvcnQgY29uc3QgQVVESU9fQ0hVTktfQ0hBTk5FTCA9IFwiYXVkaW8tY2h1bmtcIjtcblxuZXhwb3J0IGludGVyZmFjZSBBdWRpb0xpc3RlbmVyT3B0aW9ucyB7XG4gIHdjOiBXZWJDb250ZW50cztcbiAgZW5jb2RlcjogRW5jb2RlclBpcGVsaW5lO1xuICBnZXRWaWRlb1RpbWVNczogKCkgPT4gbnVtYmVyO1xuICBvbkVycm9yOiAoZXJyb3I6IEVycm9yKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgdHlwZSBBdWRpb0Rpc3Bvc2FsID0gKCkgPT4gdm9pZDtcblxuZXhwb3J0IGZ1bmN0aW9uIGF0dGFjaEF1ZGlvTGlzdGVuZXJzKHsgd2MsIGVuY29kZXIsIGdldFZpZGVvVGltZU1zLCBvbkVycm9yIH06IEF1ZGlvTGlzdGVuZXJPcHRpb25zKTogQXVkaW9EaXNwb3NhbCB7XG4gIGNvbnN0IG9uTWV0YSA9IGFzeW5jIChfZTogdW5rbm93biwgZGF0YTogeyBzYW1wbGVSYXRlOiBudW1iZXIgfSkgPT4ge1xuICAgIGNvbnN0IHNhbXBsZVJhdGUgPSBkYXRhLnNhbXBsZVJhdGU7XG4gICAgY29uc3Qgc3RhcnRNcyA9IGdldFZpZGVvVGltZU1zKCk7XG4gICAgZW5jb2Rlci5zZXR1cEF1ZGlvKHNhbXBsZVJhdGUpO1xuICAgIGNvbnN0IHNpbGVuY2VTYW1wbGVzID0gTWF0aC5jZWlsKChzdGFydE1zICogc2FtcGxlUmF0ZSkgLyAxMDAwKTtcbiAgICBpZiAoc2lsZW5jZVNhbXBsZXMgPD0gMCkgcmV0dXJuO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBlbmNvZGVyLmVuY29kZUF1ZGlvKEJ1ZmZlci5hbGxvYyhzaWxlbmNlU2FtcGxlcyAqIDIgKiA0KSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIG9uRXJyb3IoZXJyb3IgYXMgRXJyb3IpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBvbkNodW5rID0gYXN5bmMgKF9lOiB1bmtub3duLCBidWZmZXI6IEJ1ZmZlcikgPT4ge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBlbmNvZGVyLmVuY29kZUF1ZGlvKGJ1ZmZlcik7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIG9uRXJyb3IoZXJyb3IgYXMgRXJyb3IpO1xuICAgIH1cbiAgfTtcblxuICB3Yy5pcGMub24oQVVESU9fTUVUQV9DSEFOTkVMLCBvbk1ldGEpO1xuICB3Yy5pcGMub24oQVVESU9fQ0hVTktfQ0hBTk5FTCwgb25DaHVuayk7XG5cbiAgcmV0dXJuICgpID0+IHtcbiAgICB3Yy5pcGMucmVtb3ZlTGlzdGVuZXIoQVVESU9fTUVUQV9DSEFOTkVMLCBvbk1ldGEpO1xuICAgIHdjLmlwYy5yZW1vdmVMaXN0ZW5lcihBVURJT19DSFVOS19DSEFOTkVMLCBvbkNodW5rKTtcbiAgfTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDUuXG5cbmltcG9ydCB7IHNldFRpbWVvdXQgfSBmcm9tIFwidGltZXJzL3Byb21pc2VzXCI7XG5pbXBvcnQgeyBzbGVlcCB9IGZyb20gXCIuL3RpbWluZ1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJldHJ5T3B0aW9uczxBcmdzIGV4dGVuZHMgYW55W10sIFJldD4ge1xuICBmbjogKC4uLmFyZ3M6IEFyZ3MpID0+IFByb21pc2U8UmV0PjtcbiAgbWF4QXR0ZW1wdHM/OiBudW1iZXI7XG4gIHRpbWVvdXQ/OiBudW1iZXI7XG4gIC8vIFdoZW4gcHJvdmlkZWQsIHVzZVJldHJ5IGJhaWxzIG91dCBpbW1lZGlhdGVseSBvbiBhYm9ydCBpbnN0ZWFkIG9mIHJldHJ5aW5nLiBUaGUgc2lnbmFsXG4gIC8vIGlzIG5vdCBhdXRvLXRocmVhZGVkIGludG8gZm4g4oCUIGNhbGxlciBtdXN0IHdpcmUgaXQgd2hlcmUgaXQgbWF0dGVycyAoZS5nLiBmZXRjaCwgUzMgc2VuZCkuXG4gIHNpZ25hbD86IEFib3J0U2lnbmFsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXNlUmV0cnk8QXJncyBleHRlbmRzIGFueVtdLCBSZXQ+KHsgZm4sIG1heEF0dGVtcHRzID0gMywgdGltZW91dCwgc2lnbmFsIH06IFJldHJ5T3B0aW9uczxBcmdzLCBSZXQ+KSB7XG4gIGNvbnN0IHRpbWVvdXRFcnJvciA9IG5ldyBFcnJvcihgdGltZW91dCBvdmVyICR7dGltZW91dH1tc2ApO1xuICByZXR1cm4gYXN5bmMgZnVuY3Rpb24gKC4uLmFyZ3M6IEFyZ3MpIHtcbiAgICBsZXQgYXR0ZW1wdCA9IDA7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIHNpZ25hbD8udGhyb3dJZkFib3J0ZWQoKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHByb21pc2VzID0gW2ZuKC4uLmFyZ3MpXTtcbiAgICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAgICBwcm9taXNlcy5wdXNoKFxuICAgICAgICAgICAgc2V0VGltZW91dCh0aW1lb3V0KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgdGhyb3cgdGltZW91dEVycm9yO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXdhaXQgUHJvbWlzZS5yYWNlKHByb21pc2VzKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgc2lnbmFsPy50aHJvd0lmQWJvcnRlZCgpO1xuICAgICAgICBhdHRlbXB0Kys7XG4gICAgICAgIGlmIChhdHRlbXB0ID49IG1heEF0dGVtcHRzKSB7XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCBzbGVlcChNYXRoLnBvdygyLCBhdHRlbXB0KSAqIDEwMCArIE1hdGgucmFuZG9tKCkgKiAxMDApO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDkuXG5cbmNvbnN0IFNVUFBPUlRFRF9QUk9UT0NPTFMgPSBbXCJmaWxlOlwiLCBcImh0dHA6XCIsIFwiaHR0cHM6XCIsIFwiZGF0YTpcIl07XG5jb25zdCBTT1VSQ0VfUEFUVEVSTiA9IC9eKGZpbGU6fGh0dHBzPzp8ZGF0YTopLztcblxuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrSFRNTChzb3VyY2U6IHN0cmluZyk6IHZvaWQge1xuICBpZiAoU09VUkNFX1BBVFRFUk4udGVzdChzb3VyY2UpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgcHJvdG9jb2wgPSBzb3VyY2Uuc3BsaXQoXCI6XCIpWzBdICsgXCI6XCI7XG4gIGNvbnN0IG1lc3NhZ2UgPSBTVVBQT1JURURfUFJPVE9DT0xTLmluY2x1ZGVzKHByb3RvY29sKVxuICAgID8gYHVuc3VwcG9ydGVkIHByb3RvY29sOiAke3Byb3RvY29sfSwgZXhwZWN0ZWQgJHtTVVBQT1JURURfUFJPVE9DT0xTLmpvaW4oXCIsIFwiKX1gXG4gICAgOiBgaW52YWxpZCBzb3VyY2UgZm9ybWF0LCBleHBlY3RlZCAke1NVUFBPUlRFRF9QUk9UT0NPTFMuam9pbihcIiwgXCIpfWA7XG5cbiAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMy8xMC5cblxuZXhwb3J0IGludGVyZmFjZSBXYWl0T3B0aW9ucyB7XG4gIHRpbWVvdXQ6IG51bWJlcjtcbiAgb25UaW1lb3V0PzogKCkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGNsYXNzIFdhaXRhYmxlRXZlbnQge1xuICBwcml2YXRlIF9wcm9taXNlPzogUHJvbWlzZTx2b2lkPjtcbiAgcHJpdmF0ZSBfcmVzb2x2ZT86ICgpID0+IHZvaWQ7XG4gIHByaXZhdGUgX3RpbWVvdXRUb2tlbj86IE5vZGVKUy5UaW1lb3V0O1xuXG4gIHdhaXQob3B0aW9ucz86IFdhaXRPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX3Byb21pc2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcImFscmVhZHkgd2FpdGluZ1wiKTtcbiAgICB9XG4gICAgdGhpcy5fcHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICB0aGlzLl9yZXNvbHZlID0gcmVzb2x2ZTtcbiAgICAgIGlmIChvcHRpb25zPy50aW1lb3V0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5fdGltZW91dFRva2VuID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgb3B0aW9ucy5vblRpbWVvdXQ/LigpO1xuICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfSwgb3B0aW9ucy50aW1lb3V0KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5fcHJvbWlzZTtcbiAgfVxuXG4gIHNpZ25hbCgpIHtcbiAgICBjbGVhclRpbWVvdXQodGhpcy5fdGltZW91dFRva2VuKTtcbiAgICB0aGlzLl9wcm9taXNlID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuX3Jlc29sdmU/LigpO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA5LlxuXG5pbXBvcnQgeyBCcm93c2VyV2luZG93IH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBVUkwgfSBmcm9tIFwidXJsXCI7XG5pbXBvcnQgeyBDb25jdXJyZW5jeUxpbWl0ZXIgfSBmcm9tIFwiLi4vYmFzZS9saW1pdGVyXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi4vYmFzZS9sb2dnaW5nXCI7XG5pbXBvcnQgeyBXYWl0YWJsZUV2ZW50IH0gZnJvbSBcIi4uL2Jhc2Uvd2FpdGFibGVfZXZlbnRcIjtcblxuY29uc3QgVEFHID0gXCJbTmV0d29ya11cIjtcblxuY29uc3QgbWFwID0gbmV3IE1hcChbXG4gIFtganNzei1ib3NzLmhkc2xiLmNvbWAsIGBqc3N6LWJvc3MuYmlsaWJpbGkuY29gXSwgLy9cbiAgW2Bib3NzLmhkc2xiLmNvbWAsIGBzaGpkLWJvc3MuYmlsaWJpbGkuY29gXSxcbl0pO1xuXG5leHBvcnQgZnVuY3Rpb24gcHJveGllZFVybCh1cmw6IHN0cmluZykge1xuICBpZiAoIXVybC5zdGFydHNXaXRoKFwiaHR0cFwiKSkge1xuICAgIHJldHVybiB1cmw7XG4gIH1cbiAgY29uc3QgcGFyc2VkID0gbmV3IFVSTCh1cmwpO1xuICBjb25zdCB0YXJnZXQgPSBtYXAuZ2V0KHBhcnNlZC5ob3N0bmFtZSk7XG4gIGlmICghdGFyZ2V0KSB7XG4gICAgcmV0dXJuIHVybDtcbiAgfVxuICBwYXJzZWQuaG9zdG5hbWUgPSB0YXJnZXQ7XG4gIHBhcnNlZC5wcm90b2NvbCA9IFwiaHR0cDpcIjtcbiAgcmV0dXJuIHBhcnNlZC50b1N0cmluZygpO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5ldHdvcmtPcHRpb25zIHtcbiAgc291cmNlOiBzdHJpbmc7XG4gIHdpbmRvdzogQnJvd3NlcldpbmRvdztcbiAgdXNlSW5uZXJQcm94eT86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRJbnRlcmNlcHRvcih7IHNvdXJjZSwgd2luZG93LCB1c2VJbm5lclByb3h5IH06IE5ldHdvcmtPcHRpb25zKSB7XG4gIGNvbnN0IHJlcSA9IHdpbmRvdy53ZWJDb250ZW50cy5zZXNzaW9uLndlYlJlcXVlc3Q7XG4gIGNvbnN0IGxpbWl0ZXIgPSBuZXcgQ29uY3VycmVuY3lMaW1pdGVyKDI1Nik7XG4gIGNvbnN0IGV2ZW50cyA9IG5ldyBNYXA8c3RyaW5nLCBXYWl0YWJsZUV2ZW50PigpO1xuXG4gIGFzeW5jIGZ1bmN0aW9uIHdhaXQoa2V5OiBzdHJpbmcsIG9uVGltZW91dD86ICgpID0+IHZvaWQpIHtcbiAgICBjb25zdCBldmVudCA9IG5ldyBXYWl0YWJsZUV2ZW50KCk7XG4gICAgZXZlbnRzLnNldChrZXksIGV2ZW50KTtcbiAgICBhd2FpdCBldmVudC53YWl0KHsgdGltZW91dDogNV8wMDAsIG9uVGltZW91dCB9KS5maW5hbGx5KCgpID0+IGV2ZW50cy5kZWxldGUoa2V5KSk7XG4gIH1cblxuICBmdW5jdGlvbiBzaWduYWwoa2V5OiBzdHJpbmcpIHtcbiAgICBldmVudHMuZ2V0KGtleSk/LnNpZ25hbCgpO1xuICB9XG5cbiAgcmVxLm9uQmVmb3JlUmVxdWVzdCgoZGV0YWlscywgY2FsbGJhY2spID0+IHtcbiAgICBjb25zdCB1cmwgPSBkZXRhaWxzLnVybDtcbiAgICBjb25zdCBwcm94aWVkID0gdXNlSW5uZXJQcm94eSA/IHByb3hpZWRVcmwodXJsKSA6IHVybDtcbiAgICBsaW1pdGVyLnNjaGVkdWxlKCgpID0+IHtcbiAgICAgIGNvbnN0IGtleSA9IGAke3dpbmRvdy5pZH1fJHtkZXRhaWxzLmlkfWA7XG4gICAgICBsb2dnZXIuZGVidWcoVEFHLCBgc3RhcnQ6YCwge1xuICAgICAgICBrZXksXG4gICAgICAgIHVybCxcbiAgICAgICAgcHJveGllZCxcbiAgICAgICAgbWV0aG9kOiBkZXRhaWxzLm1ldGhvZCxcbiAgICAgICAgc291cmNlLFxuICAgICAgICBzdGF0czogbGltaXRlci5zdGF0cyxcbiAgICAgIH0pO1xuICAgICAgaWYgKHByb3hpZWQgPT09IHVybCkge1xuICAgICAgICBjYWxsYmFjayh7IGNhbmNlbDogZmFsc2UgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjYWxsYmFjayh7IGNhbmNlbDogZmFsc2UsIHJlZGlyZWN0VVJMOiBwcm94aWVkIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHdhaXQoa2V5LCAoKSA9PiB7XG4gICAgICAgIGxvZ2dlci53YXJuKFRBRywgYG1heWJlIHRpbWVvdXQ6YCwge1xuICAgICAgICAgIGtleSxcbiAgICAgICAgICB1cmwsXG4gICAgICAgICAgcHJveGllZCxcbiAgICAgICAgICBtZXRob2Q6IGRldGFpbHMubWV0aG9kLFxuICAgICAgICAgIHNvdXJjZSxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgcmVxLm9uSGVhZGVyc1JlY2VpdmVkKCh7IHJlc3BvbnNlSGVhZGVycyB9LCBjYWxsYmFjaykgPT4ge1xuICAgIGRlbGV0ZSByZXNwb25zZUhlYWRlcnM/LltcIngtZnJhbWUtb3B0aW9uc1wiXTtcbiAgICBkZWxldGUgcmVzcG9uc2VIZWFkZXJzPy5bXCJYLUZyYW1lLU9wdGlvbnNcIl07XG4gICAgZGVsZXRlIHJlc3BvbnNlSGVhZGVycz8uW1wiY29udGVudC1zZWN1cml0eS1wb2xpY3lcIl07XG4gICAgZGVsZXRlIHJlc3BvbnNlSGVhZGVycz8uW1wiQ29udGVudC1TZWN1cml0eS1Qb2xpY3lcIl07XG4gICAgY2FsbGJhY2soeyBjYW5jZWw6IGZhbHNlLCByZXNwb25zZUhlYWRlcnMgfSk7XG4gIH0pO1xuXG4gIHJlcS5vbkNvbXBsZXRlZCgoZGV0YWlscykgPT4ge1xuICAgIGNvbnN0IGtleSA9IGAke3dpbmRvdy5pZH1fJHtkZXRhaWxzLmlkfWA7XG4gICAgc2lnbmFsKGtleSk7XG4gICAgbG9nZ2VyLmRlYnVnKFRBRywgYGNvbXBsZXRlZDpgLCB7XG4gICAgICBrZXksXG4gICAgICB1cmw6IGRldGFpbHMudXJsLFxuICAgICAgbWV0aG9kOiBkZXRhaWxzLm1ldGhvZCxcbiAgICAgIHN0YXR1c0NvZGU6IGRldGFpbHMuc3RhdHVzQ29kZSxcbiAgICAgIHNvdXJjZSxcbiAgICB9KTtcbiAgfSk7XG5cbiAgcmVxLm9uRXJyb3JPY2N1cnJlZCgoZGV0YWlscykgPT4ge1xuICAgIGNvbnN0IGtleSA9IGAke3dpbmRvdy5pZH1fJHtkZXRhaWxzLmlkfWA7XG4gICAgc2lnbmFsKGtleSk7XG4gICAgbG9nZ2VyLmVycm9yKFRBRywgYGVycm9yOmAsIHtcbiAgICAgIGtleSxcbiAgICAgIHVybDogZGV0YWlscy51cmwsXG4gICAgICBtZXRob2Q6IGRldGFpbHMubWV0aG9kLFxuICAgICAgZXJyb3I6IGRldGFpbHMuZXJyb3IsXG4gICAgICBzb3VyY2UsXG4gICAgfSk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdW5zZXRJbnRlcmNlcHRvcih3aW5kb3c6IEJyb3dzZXJXaW5kb3cpIHtcbiAgY29uc3QgcmVxID0gd2luZG93LndlYkNvbnRlbnRzLnNlc3Npb24ud2ViUmVxdWVzdDtcbiAgcmVxLm9uQmVmb3JlUmVxdWVzdChudWxsKTtcbiAgcmVxLm9uSGVhZGVyc1JlY2VpdmVkKG51bGwpO1xuICByZXEub25Db21wbGV0ZWQobnVsbCk7XG4gIHJlcS5vbkVycm9yT2NjdXJyZWQobnVsbCk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzI3LlxuXG5pbXBvcnQgeyBCcm93c2VyV2luZG93IH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi4vYmFzZS9sb2dnaW5nXCI7XG5pbXBvcnQgeyB1c2VSZXRyeSB9IGZyb20gXCIuLi9iYXNlL3JldHJ5XCI7XG5pbXBvcnQgeyBzbGVlcCB9IGZyb20gXCIuLi9iYXNlL3RpbWluZ1wiO1xuaW1wb3J0IHsgY2hlY2tIVE1MIH0gZnJvbSBcIi4vaHRtbF9jaGVja1wiO1xuaW1wb3J0IHsgcHJveGllZFVybCwgc2V0SW50ZXJjZXB0b3IsIHVuc2V0SW50ZXJjZXB0b3IgfSBmcm9tIFwiLi9uZXR3b3JrXCI7XG5pbXBvcnQgeyBjcmVhdGVTdGVnb1VSTCB9IGZyb20gXCIuL3Byb3RvY29sXCI7XG5pbXBvcnQgdHlwZSB7IElQQ1JlbmRlck9wdGlvbnMgfSBmcm9tIFwiLi9zY2hlbWFcIjtcblxuY29uc3QgVEFHID0gXCJbV2luZG93XVwiO1xuY29uc3QgVElNRU9VVF9FUlJPUiA9IG5ldyBFcnJvcihcIndpbmRvdyB0aW1lb3V0XCIpO1xuXG5pbnRlcmZhY2UgRmluaXNoT3B0aW9ucyB7XG4gIHNvdXJjZTogc3RyaW5nO1xuICB3aW46IEJyb3dzZXJXaW5kb3c7XG4gIGFjdGlvbjogKCkgPT4gdm9pZDtcbiAgdG9sZXJhbnQ/OiBib29sZWFuO1xuICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbn1cblxuZnVuY3Rpb24gd2FpdEZvckZpbmlzaCh7IHNvdXJjZSwgd2luLCBhY3Rpb24sIHRvbGVyYW50LCBzaWduYWwgfTogRmluaXNoT3B0aW9ucykge1xuICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IGRvbmUoVElNRU9VVF9FUlJPUiksIDEwXzAwMCk7XG4gICAgY29uc3QgZG9uZSA9IChlcnI/OiB1bmtub3duKSA9PiB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICBpZiAoZXJyKSByZWplY3QoZXJyKTtcbiAgICAgIGVsc2UgcmVzb2x2ZSgpO1xuICAgIH07XG4gICAgc2lnbmFsPy50aHJvd0lmQWJvcnRlZCgpO1xuICAgIHNpZ25hbD8uYWRkRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsICgpID0+IGRvbmUoc2lnbmFsLnJlYXNvbiksIHsgb25jZTogdHJ1ZSB9KTtcbiAgICB3aW4ud2ViQ29udGVudHMub25jZShcImRvbS1yZWFkeVwiLCAoKSA9PiB7XG4gICAgICBsb2dnZXIuZGVidWcoVEFHLCBcImRvbS1yZWFkeTpcIiwgeyBzb3VyY2UgfSk7XG4gICAgICBpZiAodG9sZXJhbnQpIGRvbmUoKTtcbiAgICB9KTtcbiAgICB3aW4ud2ViQ29udGVudHMub25jZShcImRpZC1zdG9wLWxvYWRpbmdcIiwgKCkgPT4ge1xuICAgICAgbG9nZ2VyLmRlYnVnKFRBRywgXCJkaWQtc3RvcC1sb2FkaW5nOlwiLCB7IHNvdXJjZSB9KTtcbiAgICAgIGRvbmUoKTtcbiAgICB9KTtcbiAgICB3aW4ud2ViQ29udGVudHMub25jZShcImRpZC1mYWlsLWxvYWRcIiwgKF9lLCBjb2RlLCBkZXNjLCB1cmwpID0+IHtcbiAgICAgIGNvbnN0IG1zZyA9IGBkaWQtZmFpbC1sb2FkOiAke0pTT04uc3RyaW5naWZ5KHsgdXJsLCBzb3VyY2UsIGNvZGUsIGRlc2MgfSl9YDtcbiAgICAgIGxvZ2dlci5lcnJvcihUQUcsIG1zZyk7XG4gICAgICBkb25lKG5ldyBFcnJvcihtc2cpKTtcbiAgICB9KTtcbiAgICB3aW4ud2ViQ29udGVudHMub25jZShcInJlbmRlci1wcm9jZXNzLWdvbmVcIiwgKF9lLCB7IGV4aXRDb2RlLCByZWFzb24gfSkgPT4ge1xuICAgICAgY29uc3QgbXNnID0gYHJlbmRlci1wcm9jZXNzLWdvbmU6ICR7SlNPTi5zdHJpbmdpZnkoeyBzb3VyY2UsIGV4aXRDb2RlLCByZWFzb24gfSl9YDtcbiAgICAgIGxvZ2dlci5lcnJvcihUQUcsIG1zZyk7XG4gICAgICBkb25lKG5ldyBFcnJvcihtc2cpKTtcbiAgICB9KTtcbiAgICBhY3Rpb24oKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkaXNwb3NlV2luZG93KHdpbjogQnJvd3NlcldpbmRvdykge1xuICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcbiAgICB1bnNldEludGVyY2VwdG9yKHdpbik7XG4gICAgY29uc3QgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGxvZ2dlci53YXJuKFRBRywgXCJmb3JjZSBjbG9zZVwiKTtcbiAgICAgICAgd2luLmRlc3Ryb3koKTtcbiAgICAgIH0gY2F0Y2gge31cbiAgICAgIGRvbmUoKTtcbiAgICB9LCAxMDAwKTtcbiAgICBjb25zdCBkb25lID0gKCkgPT4gKGNsZWFyVGltZW91dCh0aW1lciksIHJlc29sdmUoKSk7XG4gICAgd2luLndlYkNvbnRlbnRzLnN0b3BQYWludGluZygpO1xuICAgIHdpbi53ZWJDb250ZW50cy5kZWJ1Z2dlci5kZXRhY2goKTtcbiAgICB3aW4ub25jZShcImNsb3NlZFwiLCBkb25lKTtcbiAgICB3aW4uY2xvc2UoKTtcbiAgfSk7XG59XG5cbmV4cG9ydCB0eXBlIFdpbmRvd0NyZWF0ZWRDYWxsYmFjayA9ICh3aW5kb3c6IEJyb3dzZXJXaW5kb3cpID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+O1xuXG5leHBvcnQgaW50ZXJmYWNlIFdpbmRvd09wdGlvbnMge1xuICBzb3VyY2U6IHN0cmluZztcbiAgcmVuZGVyZXI6IElQQ1JlbmRlck9wdGlvbnM7XG4gIHRvbGVyYW50PzogYm9vbGVhbjtcbiAgcHJlbG9hZD86IHN0cmluZztcbiAgb25DcmVhdGVkPzogV2luZG93Q3JlYXRlZENhbGxiYWNrO1xuICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gb3BlbldpbmRvdyh7XG4gIHNvdXJjZSxcbiAgcmVuZGVyZXIsXG4gIHRvbGVyYW50LFxuICBwcmVsb2FkLFxuICBzaWduYWwsXG4gIG9uQ3JlYXRlZCxcbn06IFdpbmRvd09wdGlvbnMpOiBQcm9taXNlPEJyb3dzZXJXaW5kb3c+IHtcbiAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0LCB1c2VJbm5lclByb3h5IH0gPSByZW5kZXJlcjtcbiAgY29uc3Qgc3JjID0gdXNlSW5uZXJQcm94eSA/IHByb3hpZWRVcmwoc291cmNlKSA6IHNvdXJjZTtcblxuICBjb25zdCB3aW4gPSBuZXcgQnJvd3NlcldpbmRvdyh7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0OiBoZWlnaHQgKyAxLFxuICAgIG1pbldpZHRoOiB3aWR0aCxcbiAgICBtaW5IZWlnaHQ6IGhlaWdodCArIDEsXG4gICAgbWF4V2lkdGg6IHdpZHRoLFxuICAgIG1heEhlaWdodDogaGVpZ2h0ICsgMSxcbiAgICByZXNpemFibGU6IGZhbHNlLFxuICAgIG1pbmltaXphYmxlOiBmYWxzZSxcbiAgICBtb3ZhYmxlOiBmYWxzZSxcbiAgICBzaG93OiBmYWxzZSxcbiAgICB0cmFuc3BhcmVudDogdHJ1ZSxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IHVuZGVmaW5lZCxcbiAgICBmcmFtZTogZmFsc2UsXG4gICAgd2ViUHJlZmVyZW5jZXM6IHtcbiAgICAgIG9mZnNjcmVlbjogdHJ1ZSxcbiAgICAgIGJhY2tncm91bmRUaHJvdHRsaW5nOiBmYWxzZSxcbiAgICAgIG5vZGVJbnRlZ3JhdGlvbjogdHJ1ZSxcbiAgICAgIG5vZGVJbnRlZ3JhdGlvbkluU3ViRnJhbWVzOiB0cnVlLFxuICAgICAgbm9kZUludGVncmF0aW9uSW5Xb3JrZXI6IHRydWUsXG4gICAgICBjb250ZXh0SXNvbGF0aW9uOiBmYWxzZSxcbiAgICAgIHdlYlNlY3VyaXR5OiBmYWxzZSxcbiAgICAgIGFsbG93UnVubmluZ0luc2VjdXJlQ29udGVudDogdHJ1ZSxcbiAgICAgIGV4cGVyaW1lbnRhbEZlYXR1cmVzOiB0cnVlLFxuICAgICAgcHJlbG9hZCxcbiAgICB9LFxuICB9KTtcbiAgc2V0SW50ZXJjZXB0b3IoeyBzb3VyY2UsIHdpbmRvdzogd2luLCB1c2VJbm5lclByb3h5IH0pO1xuICB3aW4ud2ViQ29udGVudHMuZGVidWdnZXIuYXR0YWNoKFwiMS4zXCIpO1xuICBhd2FpdCBvbkNyZWF0ZWQ/Lih3aW4pO1xuXG4gIHdpbi53ZWJDb250ZW50cy5vbihcImNvbnNvbGUtbWVzc2FnZVwiLCAoeyBsZXZlbCwgbWVzc2FnZSwgbGluZU51bWJlciwgc291cmNlSWQgfSkgPT4ge1xuICAgIGNvbnN0IG1zZ3MgPSBbVEFHLCBcImNvbnNvbGU6XCIsIHsgbWVzc2FnZSwgbGluZU51bWJlciwgc291cmNlSWQsIHNvdXJjZSB9XTtcbiAgICBsZXZlbCA9PT0gXCJlcnJvclwiID8gbG9nZ2VyLmVycm9yKC4uLm1zZ3MpIDogbG9nZ2VyLmRlYnVnKC4uLm1zZ3MpO1xuICAgIGlmIChsZXZlbCA9PT0gXCJ3YXJuaW5nXCIgJiYgbWVzc2FnZS5zdGFydHNXaXRoKGAlY0VsZWN0cm9uIFNlY3VyaXR5IFdhcm5pbmdgKSkgcmV0dXJuO1xuICAgIHJlbmRlcmVyLm9uQ29uc29sZShsZXZlbCwgbWVzc2FnZSk7XG4gIH0pO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgdXJsID0gY3JlYXRlU3RlZ29VUkwoc3JjLCB7IHdpZHRoLCBoZWlnaHQgfSk7XG4gICAgYXdhaXQgd2FpdEZvckZpbmlzaCh7IHNvdXJjZSwgd2luLCBhY3Rpb246ICgpID0+IHdpbi5sb2FkVVJMKHVybCksIHRvbGVyYW50LCBzaWduYWwgfSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBhd2FpdCBkaXNwb3NlV2luZG93KHdpbik7XG4gICAgdGhyb3cgZTtcbiAgfVxuXG4gIHJldHVybiB3aW47XG59XG5cbmNvbnN0IG9wZW5XaW5kb3dXaXRoUmV0cnkgPSB1c2VSZXRyeSh7IGZuOiBvcGVuV2luZG93LCBtYXhBdHRlbXB0czogMiB9KTtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxvYWRXaW5kb3coe1xuICBzb3VyY2UsXG4gIHJlbmRlcmVyLFxuICBwcmVsb2FkLFxuICBvbkNyZWF0ZWQsXG4gIHNpZ25hbCxcbn06IFdpbmRvd09wdGlvbnMpOiBQcm9taXNlPEJyb3dzZXJXaW5kb3c+IHtcbiAgY2hlY2tIVE1MKHNvdXJjZSk7XG5cbiAgc2lnbmFsPy50aHJvd0lmQWJvcnRlZCgpO1xuICBsZXQgd2FybXVwOiBCcm93c2VyV2luZG93IHwgdW5kZWZpbmVkO1xuICBsZXQgZXJyb3I6IHVua25vd247XG4gIHRyeSB7XG4gICAgd2FybXVwID0gYXdhaXQgb3BlbldpbmRvd1dpdGhSZXRyeSh7IHNvdXJjZSwgcmVuZGVyZXIsIHNpZ25hbCB9KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGVycm9yID0gZTtcbiAgfVxuXG4gIGNvbnN0IG9wZW4gPSAoKSA9PiBvcGVuV2luZG93KHsgc291cmNlLCByZW5kZXJlciwgcHJlbG9hZCwgb25DcmVhdGVkLCBzaWduYWwsIHRvbGVyYW50OiByZW5kZXJlci53aW5kb3dUb2xlcmFudCB9KTtcblxuICBpZiAocmVuZGVyZXIud2luZG93VG9sZXJhbnQgJiYgZXJyb3IgPT09IFRJTUVPVVRfRVJST1IpIHtcbiAgICBsb2dnZXIud2FybihUQUcsIGB3YXJtdXAgdGltZW91dDogJHtzb3VyY2V9LCBmYWxsaW5nIGJhY2sgdG8gZG9tLXJlYWR5YCk7XG4gICAgcmV0dXJuIGF3YWl0IG9wZW4oKTtcbiAgfVxuXG4gIGlmIChlcnJvcikge1xuICAgIGNvbnN0IHsgbWVzc2FnZSwgc3RhY2sgfSA9IGVycm9yIGFzIEVycm9yO1xuICAgIHRocm93IG5ldyBFcnJvcihgZmFpbGVkIHRvIHdhcm11cCB3aW5kb3c6ICR7SlNPTi5zdHJpbmdpZnkoeyBzb3VyY2UsIG1lc3NhZ2UsIHN0YWNrIH0pfWApO1xuICB9XG5cbiAgaWYgKHdhcm11cCkge1xuICAgIHdhcm11cC53ZWJDb250ZW50cy5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcbiAgICB1bnNldEludGVyY2VwdG9yKHdhcm11cCk7XG4gICAgYXdhaXQgc2xlZXAoMjAwMCk7XG4gICAgYXdhaXQgZGlzcG9zZVdpbmRvdyh3YXJtdXApO1xuICB9XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgb3BlbigpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgY29uc3QgeyBtZXNzYWdlLCBzdGFjayB9ID0gZSBhcyBFcnJvcjtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGZhaWxlZCB0byBsb2FkIHdpbmRvdzogJHtKU09OLnN0cmluZ2lmeSh7IHNvdXJjZSwgbWVzc2FnZSwgc3RhY2sgfSl9YCk7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDkuXG5cbmltcG9ydCB7IHR5cGUgTmF0aXZlSW1hZ2UsIHR5cGUgU2l6ZSB9IGZyb20gXCJlbGVjdHJvblwiO1xuaW1wb3J0IHsgcmVzaXplRHJhd2FibGUgfSBmcm9tIFwiLi4vYmFzZS9jZHBcIjtcbmltcG9ydCB7IHB1cEF1ZGlvUHJlbG9hZCB9IGZyb20gXCIuLi9iYXNlL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgRW5jb2RlclBpcGVsaW5lIH0gZnJvbSBcIi4uL2Jhc2UvZW5jb2Rlci9waXBlbGluZVwiO1xuaW1wb3J0IHsgRnJhbWVEcm9wU3RhdHMgfSBmcm9tIFwiLi4vYmFzZS9mcmFtZV9kcm9wXCI7XG5pbXBvcnQgeyBzaXplRXF1YWxzIH0gZnJvbSBcIi4uL2Jhc2UvaW1hZ2VcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuLi9iYXNlL2xvZ2dpbmdcIjtcbmltcG9ydCB7IGF0dGFjaEF1ZGlvTGlzdGVuZXJzLCB0eXBlIEF1ZGlvRGlzcG9zYWwgfSBmcm9tIFwiLi9hdWRpb1wiO1xuaW1wb3J0IHR5cGUgeyBJcGNEb25lUGF5bG9hZCB9IGZyb20gXCIuL2lwY1wiO1xuaW1wb3J0IHR5cGUgeyBJUENSZW5kZXJPcHRpb25zIH0gZnJvbSBcIi4vc2NoZW1hXCI7XG5pbXBvcnQgeyBkZWNvZGVTdGVnbywgc3RhcnRTdGVnbyB9IGZyb20gXCIuL3N0ZWdvXCI7XG5pbXBvcnQgeyBkaXNwb3NlV2luZG93LCBsb2FkV2luZG93IH0gZnJvbSBcIi4vd2luZG93XCI7XG5cbmNvbnN0IFRBRyA9IFwiW1JlbmRlcl1cIjtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlbmRlcihvcHRpb25zOiBJUENSZW5kZXJPcHRpb25zKTogUHJvbWlzZTxJcGNEb25lUGF5bG9hZD4ge1xuICBjb25zdCB7IHNvdXJjZSwgZnBzLCB3aWR0aCwgaGVpZ2h0LCBkdXJhdGlvbiwgd2l0aEF1ZGlvLCBvdXRGaWxlLCBkaXNhYmxlSHdDb2RlYywgc2lnbmFsLCBvblByb2dyZXNzIH0gPSBvcHRpb25zO1xuXG4gIGF3YWl0IHVzaW5nIGVuY29kZXIgPSBhd2FpdCBFbmNvZGVyUGlwZWxpbmUuY3JlYXRlKHsgd2lkdGgsIGhlaWdodCwgZnBzLCBvdXRGaWxlLCB3aXRoQXVkaW8sIGRpc2FibGVId0NvZGVjIH0pO1xuXG4gIGNvbnN0IHRvdGFsID0gTWF0aC5jZWlsKGZwcyAqIGR1cmF0aW9uKTtcbiAgY29uc3QgZnJhbWVJbnRlcnZhbCA9IDEwMDAgLyBmcHM7XG4gIGNvbnN0IGZyYW1lU2l6ZTogU2l6ZSA9IHsgd2lkdGgsIGhlaWdodDogaGVpZ2h0ICsgMSB9O1xuXG4gIGxldCB3cml0dGVuID0gMDtcbiAgbGV0IGxhc3RXcml0dGVuVGltZTogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICBsZXQgcHJvZ3Jlc3MgPSAwO1xuICBsZXQgZW5jb2RlRXJyb3I6IEVycm9yIHwgdW5kZWZpbmVkO1xuICBsZXQgcmVzb2x2ZXI6ICgoKSA9PiB2b2lkKSB8IHVuZGVmaW5lZDtcbiAgbGV0IHJlamVjdGVyOiAoKHJlYXNvbj86IHVua25vd24pID0+IHZvaWQpIHwgdW5kZWZpbmVkO1xuICBsZXQgaW50ZXJ2YWw6IE5vZGVKUy5UaW1lb3V0IHwgdW5kZWZpbmVkO1xuICBjb25zdCBkcm9wU3RhdHMgPSBuZXcgRnJhbWVEcm9wU3RhdHMoZnBzKTtcblxuICBsZXQgZGlzcG9zZUF1ZGlvOiBBdWRpb0Rpc3Bvc2FsIHwgdW5kZWZpbmVkO1xuICBjb25zdCBzY2hlZHVsZUZyYW1lID0gKGZyYW1lOiBCdWZmZXIpID0+IHtcbiAgICB3cml0dGVuKys7XG4gICAgZW5jb2Rlci5lbmNvZGVCR1JBKGZyYW1lKS5jYXRjaCgoZSkgPT4gKGVuY29kZUVycm9yID8/PSBlKSk7XG4gIH07XG5cbiAgY29uc3QgcGFpbnQgPSAoX2U6IHVua25vd24sIF9yOiB1bmtub3duLCBpbWFnZTogTmF0aXZlSW1hZ2UpID0+IHtcbiAgICBlbmNvZGVFcnJvciA/Pz0gc2lnbmFsPy5yZWFzb247XG4gICAgaWYgKGVuY29kZUVycm9yKSB7XG4gICAgICByZWplY3Rlcj8uKGVuY29kZUVycm9yKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBpbWFnZVNpemUgPSBpbWFnZS5nZXRTaXplKCk7XG4gICAgaWYgKCFzaXplRXF1YWxzKGltYWdlU2l6ZSwgZnJhbWVTaXplKSkge1xuICAgICAgLy8gTk9URShBdXRva2FrYSk6IFdlIG11c3QgZW5zdXJlIGZyYW1lIGlzIHJlYWR5IG9uIGVsZWN0cm9uIHY0MStcbiAgICAgIHJlc2l6ZURyYXdhYmxlKGNkcCwgZnJhbWVTaXplKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBEZWNvZGUgc3RlZ28gdGltZXN0YW1wIGZyb20gdGhlIGJvdHRvbSBwaXhlbCByb3cgd2l0aG91dCBmdWxsIGJpdG1hcCBjb3B5XG4gICAgY29uc3QgYml0bWFwID0gaW1hZ2UudG9CaXRtYXAoKTtcbiAgICBjb25zdCBjdXJyZW50VGltZSA9IGRlY29kZVN0ZWdvKGJpdG1hcCwgaW1hZ2VTaXplKTtcbiAgICBpZiAoY3VycmVudFRpbWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgZW5jb2RlRXJyb3IgPz89IG5ldyBFcnJvcihgbm8gdGltZXN0YW1wIEAgJHt3cml0dGVufWApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFNraXAgZnJhbWVzIHRoYXQgYXJyaXZlIHRvbyBzb29uICg8IDgwJSBvZiBmcmFtZSBpbnRlcnZhbClcbiAgICBpZiAobGFzdFdyaXR0ZW5UaW1lICE9PSB1bmRlZmluZWQgJiYgY3VycmVudFRpbWUgLSBsYXN0V3JpdHRlblRpbWUgPCBmcmFtZUludGVydmFsICogMC44KSByZXR1cm47XG5cbiAgICBjb25zdCBjcm9wcGVkID0gQnVmZmVyLmZyb20oYml0bWFwLmJ1ZmZlciwgYml0bWFwLmJ5dGVPZmZzZXQsIGhlaWdodCAqIHdpZHRoICogNCk7XG5cbiAgICBpZiAobGFzdFdyaXR0ZW5UaW1lID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHNjaGVkdWxlRnJhbWUoY3JvcHBlZCk7XG4gICAgICBkcm9wU3RhdHMud3JvdGUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgdGltZURlbHRhID0gY3VycmVudFRpbWUgLSBsYXN0V3JpdHRlblRpbWU7XG4gICAgICBpZiAodGltZURlbHRhIDw9IGZyYW1lSW50ZXJ2YWwgKiAxLjIpIHtcbiAgICAgICAgc2NoZWR1bGVGcmFtZShjcm9wcGVkKTtcbiAgICAgICAgZHJvcFN0YXRzLndyb3RlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBmcmFtZXNUb0luc2VydCA9IE1hdGgucm91bmQodGltZURlbHRhIC8gZnJhbWVJbnRlcnZhbCk7XG4gICAgICAgIGRyb3BTdGF0cy5kcm9wcGVkKGZyYW1lc1RvSW5zZXJ0IC0gMSk7XG4gICAgICAgIGRyb3BTdGF0cy53cm90ZSgpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZyYW1lc1RvSW5zZXJ0ICYmIHdyaXR0ZW4gPCB0b3RhbDsgaSsrKSB7XG4gICAgICAgICAgc2NoZWR1bGVGcmFtZShjcm9wcGVkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBsYXN0V3JpdHRlblRpbWUgPSBjdXJyZW50VGltZTtcblxuICAgIGNvbnN0IG5ld1Byb2dyZXNzID0gTWF0aC5mbG9vcigod3JpdHRlbiAvIHRvdGFsKSAqIDEwMCk7XG4gICAgaWYgKE1hdGguYWJzKG5ld1Byb2dyZXNzIC0gcHJvZ3Jlc3MpID4gMTApIHtcbiAgICAgIHByb2dyZXNzID0gbmV3UHJvZ3Jlc3M7XG4gICAgICBvblByb2dyZXNzKHByb2dyZXNzKTtcbiAgICB9XG5cbiAgICBjb25zdCBkdXJhdGlvbk1zID0gZHVyYXRpb24gKiAxMDAwO1xuICAgIGlmIChjdXJyZW50VGltZSA+PSBkdXJhdGlvbk1zIC0gZnJhbWVJbnRlcnZhbCAqIDAuNSB8fCB3cml0dGVuID49IHRvdGFsKSB7XG4gICAgICByZXNvbHZlcj8uKCk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IHdpbiA9IGF3YWl0IGxvYWRXaW5kb3coe1xuICAgIHNvdXJjZSxcbiAgICByZW5kZXJlcjogb3B0aW9ucyxcbiAgICBzaWduYWwsXG4gICAgcHJlbG9hZDogd2l0aEF1ZGlvID8gcHVwQXVkaW9QcmVsb2FkIDogdW5kZWZpbmVkLFxuICAgIG9uQ3JlYXRlZDogKHdpbikgPT4ge1xuICAgICAgaWYgKHdpdGhBdWRpbykge1xuICAgICAgICBkaXNwb3NlQXVkaW8gPSBhdHRhY2hBdWRpb0xpc3RlbmVycyh7XG4gICAgICAgICAgd2M6IHdpbi53ZWJDb250ZW50cyxcbiAgICAgICAgICBlbmNvZGVyLFxuICAgICAgICAgIGdldFZpZGVvVGltZU1zOiAoKSA9PiBsYXN0V3JpdHRlblRpbWUgPz8gMCxcbiAgICAgICAgICBvbkVycm9yOiAoZTogRXJyb3IpID0+IChlbmNvZGVFcnJvciA/Pz0gZSksXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sXG4gIH0pO1xuICBjb25zdCBjZHAgPSB3aW4ud2ViQ29udGVudHMuZGVidWdnZXI7XG5cbiAgdHJ5IHtcbiAgICB3aW4ud2ViQ29udGVudHMuc3RvcFBhaW50aW5nKCk7XG4gICAgd2luLndlYkNvbnRlbnRzLnNldEZyYW1lUmF0ZShmcHMpO1xuICAgIHdpbi53ZWJDb250ZW50cy5vbihcInBhaW50XCIsIHBhaW50KTtcbiAgICB3aW4ud2ViQ29udGVudHMuc3RhcnRQYWludGluZygpO1xuICAgIHNpZ25hbD8udGhyb3dJZkFib3J0ZWQoKTtcbiAgICBzaWduYWw/LmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCAoKSA9PiByZWplY3Rlcj8uKHNpZ25hbC5yZWFzb24pLCB7IG9uY2U6IHRydWUgfSk7XG4gICAgYXdhaXQgc3RhcnRTdGVnbyhjZHApO1xuICAgIGF3YWl0IG5ldyBQcm9taXNlPHZvaWQ+KChyLCBqKSA9PiB7XG4gICAgICBbcmVzb2x2ZXIsIHJlamVjdGVyXSA9IFtyLCBqXTtcbiAgICAgIGxldCBsYXN0V3JpdHRlbiA9IDA7XG4gICAgICBsZXQgc3R1Y2sgPSAwO1xuICAgICAgaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICAgIGlmICh3cml0dGVuICE9PSBsYXN0V3JpdHRlbikge1xuICAgICAgICAgIGxhc3RXcml0dGVuID0gd3JpdHRlbjtcbiAgICAgICAgICBzdHVjayA9IDA7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdHVjayA+PSAzKSB7XG4gICAgICAgICAgcmVqZWN0ZXI/LihuZXcgRXJyb3IoXCJkcmF3YWJsZSB0aW1lb3V0XCIpKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgbG9nZ2VyLndhcm4oVEFHLCBgJHtzb3VyY2V9IHJlbmRlciBpcyBleHRyZW1lbHkgc2xvdywgd3JpdHRlbj0ke3dyaXR0ZW59IHN0dWNrPSR7c3R1Y2t9YCk7XG4gICAgICAgIHN0dWNrKys7XG4gICAgICAgIHdpbi53ZWJDb250ZW50cy5pbnZhbGlkYXRlKCk7XG4gICAgICB9LCAxMDAwKTtcbiAgICB9KTtcbiAgfSBmaW5hbGx5IHtcbiAgICBjbGVhckludGVydmFsKGludGVydmFsKTtcbiAgICB3aW4ud2ViQ29udGVudHMub2ZmKFwicGFpbnRcIiwgcGFpbnQpO1xuICAgIGF3YWl0IGRpc3Bvc2VXaW5kb3cod2luKTtcbiAgICBkaXNwb3NlQXVkaW8/LigpO1xuICAgIGF3YWl0IGVuY29kZXIuZmluaXNoKCk7XG4gIH1cblxuICBpZiAoZW5jb2RlRXJyb3IgfHwgd3JpdHRlbiA9PT0gMCkge1xuICAgIHRocm93IGVuY29kZUVycm9yID8/IG5ldyBFcnJvcihcIm5vIGZyYW1lcyBjYXB0dXJlZFwiKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBkcm9wU2NvcmUgPSBkcm9wU3RhdHMuZmluYWxpemUoKTtcbiAgICByZXR1cm4geyB3cml0dGVuLCBqYW5rOiBkcm9wU2NvcmUuamFuaywgb3V0RmlsZSB9O1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAzLzAyLlxuXG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi4vYmFzZS9sb2dnaW5nXCI7XG5cbmNvbnN0IFRBRyA9IFwiW1JlcmVuZGVyXVwiO1xuXG5leHBvcnQgY29uc3QgTUFYX1JFTkRFUl9BVFRFTVBUUyA9IDM7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3aXRoUmVyZW5kZXI8VD4oYWN0aW9uOiAoKSA9PiBQcm9taXNlPFQ+KTogUHJvbWlzZTxUPiB7XG4gIGxldCBsYXN0RXJyOiB1bmtub3duO1xuICBmb3IgKGxldCBhdHRlbXB0ID0gMDsgYXR0ZW1wdCA8IE1BWF9SRU5ERVJfQVRURU1QVFM7IGF0dGVtcHQrKykge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgYWN0aW9uKCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbGFzdEVyciA9IGU7XG4gICAgICBsb2dnZXIud2FybihUQUcsIGByZXRyeSAke2F0dGVtcHQgKyAxfS8ke01BWF9SRU5ERVJfQVRURU1QVFN9OiAkeyhlIGFzIEVycm9yKS5tZXNzYWdlfWApO1xuICAgIH1cbiAgfVxuICB0aHJvdyBsYXN0RXJyO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8wMS5cblxuaW1wb3J0IHR5cGUgeyBXZWJGcmFtZU1haW4gfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IHdpdGhUaW1lb3V0IH0gZnJvbSBcIi4uL2Jhc2UvdGltaW5nXCI7XG5cbmV4cG9ydCBjb25zdCBUSUNLX1NZTUJPTCA9IFwiX19wdXBfdGlja19fXCI7XG5cbmNvbnN0IEhPT0sgPSBgKGZ1bmN0aW9uKCkge1xuICBpZiAod2luZG93LnNlbGYgPT09IHdpbmRvdy50b3ApIHJldHVybjtcbiAgaWYgKHR5cGVvZiAke1RJQ0tfU1lNQk9MfSAhPT0gJ3VuZGVmaW5lZCcpIHJldHVybjtcblxuICBjb25zdCBvcmlnID0ge1xuICAgIERhdGU6IERhdGUsXG4gICAgZGF0ZU5vdzogRGF0ZS5ub3cuYmluZChEYXRlKSxcbiAgICBwZXJmb3JtYW5jZU5vdzogcGVyZm9ybWFuY2Uubm93LmJpbmQocGVyZm9ybWFuY2UpLFxuICAgIHJhZjogcmVxdWVzdEFuaW1hdGlvbkZyYW1lLmJpbmQod2luZG93KSxcbiAgICBjYWY6IGNhbmNlbEFuaW1hdGlvbkZyYW1lLmJpbmQod2luZG93KSxcbiAgICBzZXRUaW1lb3V0OiBzZXRUaW1lb3V0LmJpbmQod2luZG93KSxcbiAgICBjbGVhclRpbWVvdXQ6IGNsZWFyVGltZW91dC5iaW5kKHdpbmRvdyksXG4gICAgc2V0SW50ZXJ2YWw6IHNldEludGVydmFsLmJpbmQod2luZG93KSxcbiAgICBjbGVhckludGVydmFsOiBjbGVhckludGVydmFsLmJpbmQod2luZG93KSxcbiAgfTtcblxuICBsZXQgY3Vyck1zID0gMDtcbiAgbGV0IHJhZlF1ZXVlID0gW107XG4gIGNvbnN0IHRpbWVycyA9IHt9O1xuICBsZXQgbmV4dElkID0gMTtcbiAgY29uc3QgZGF0ZU9yaWdpbiA9IG5ldyBvcmlnLkRhdGUoKTtcbiAgY29uc3QgcGVyZk9yaWdpbiA9IG9yaWcucGVyZm9ybWFuY2VOb3coKTtcblxuICBwZXJmb3JtYW5jZS5ub3cgPSBmdW5jdGlvbigpIHsgcmV0dXJuIHBlcmZPcmlnaW4gKyBjdXJyTXM7IH07XG4gIERhdGUubm93ID0gZnVuY3Rpb24oKSB7IHJldHVybiBkYXRlT3JpZ2luLmdldFRpbWUoKSArIGN1cnJNczsgfTtcbiAgRGF0ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBPID0gb3JpZy5EYXRlO1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSByZXR1cm4gbmV3IE8oZGF0ZU9yaWdpbi5nZXRUaW1lKCkgKyBjdXJyTXMpO1xuICAgIHJldHVybiBuZXcgKEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLmFwcGx5KE8sIFtudWxsXS5jb25jYXQoQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKSkpKSgpO1xuICB9O1xuICBEYXRlLm5vdyA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gZGF0ZU9yaWdpbi5nZXRUaW1lKCkgKyBjdXJyTXM7IH07XG4gIERhdGUucGFyc2UgPSBvcmlnLkRhdGUucGFyc2U7XG4gIERhdGUuVVRDID0gb3JpZy5EYXRlLlVUQztcbiAgRGF0ZS5wcm90b3R5cGUgPSBvcmlnLkRhdGUucHJvdG90eXBlO1xuXG4gIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPSBmdW5jdGlvbihjYikge1xuICAgIGNvbnN0IGlkID0gbmV4dElkKys7XG4gICAgcmFmUXVldWUucHVzaCh7IGlkLCBjYiB9KTtcbiAgICByZXR1cm4gaWQ7XG4gIH07XG4gIHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSA9IGZ1bmN0aW9uKGlkKSB7XG4gICAgcmFmUXVldWUgPSByYWZRdWV1ZS5maWx0ZXIoKHIpID0+IHIuaWQgIT09IGlkKTtcbiAgfTtcblxuICB3aW5kb3cuc2V0VGltZW91dCA9IGZ1bmN0aW9uKGNiLCBkZWxheSwgLi4uYXJncykge1xuICAgIGNvbnN0IGlkID0gbmV4dElkKys7XG4gICAgdGltZXJzW2lkXSA9IHsgdHlwZTogJ3RpbWVvdXQnLCBjYiwgZGVsYXk6IGRlbGF5IHx8IDAsIG5leHQ6IGN1cnJNcyArIChkZWxheSB8fCAwKSwgYXJncyB9O1xuICAgIHJldHVybiBpZDtcbiAgfTtcbiAgd2luZG93LmNsZWFyVGltZW91dCA9IGZ1bmN0aW9uKGlkKSB7IGRlbGV0ZSB0aW1lcnNbaWRdOyB9O1xuXG4gIHdpbmRvdy5zZXRJbnRlcnZhbCA9IGZ1bmN0aW9uKGNiLCBkZWxheSwgLi4uYXJncykge1xuICAgIGNvbnN0IGlkID0gbmV4dElkKys7XG4gICAgY29uc3QgZCA9IE1hdGgubWF4KGRlbGF5IHx8IDAsIDEpO1xuICAgIHRpbWVyc1tpZF0gPSB7IHR5cGU6ICdpbnRlcnZhbCcsIGNiLCBkZWxheTogZCwgbmV4dDogY3Vyck1zICsgZCwgYXJncyB9O1xuICAgIHJldHVybiBpZDtcbiAgfTtcbiAgd2luZG93LmNsZWFySW50ZXJ2YWwgPSBmdW5jdGlvbihpZCkgeyBkZWxldGUgdGltZXJzW2lkXTsgfTtcblxuICBmdW5jdGlvbiBzYWZlSW52b2tlKGZuLCBhcmdzKSB7XG4gICAgdHJ5IHtcbiAgICAgIGlmICh0eXBlb2YgZm4gPT09ICdzdHJpbmcnKSBldmFsKGZuKTtcbiAgICAgIGVsc2UgZm4uYXBwbHkodW5kZWZpbmVkLCBhcmdzIHx8IFtdKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdbVGlja10gZXJyb3I6JywgZSAmJiBlLnN0YWNrIHx8IGUpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHByb2Nlc3ModGltZXN0YW1wTXMpIHtcbiAgICBjdXJyTXMgPSB0aW1lc3RhbXBNcztcbiAgICBkb2N1bWVudC5nZXRBbmltYXRpb25zKCkuZm9yRWFjaChhID0+IHtcbiAgICAgIGEucGF1c2UoKTtcbiAgICAgIGEuY3VycmVudFRpbWUgPSBjdXJyTXM7XG4gICAgfSk7XG4gICAgY29uc3QgaWRzID0gT2JqZWN0LmtleXModGltZXJzKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlkcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgdCA9IHRpbWVyc1tpZHNbaV1dO1xuICAgICAgaWYgKCF0KSBjb250aW51ZTtcbiAgICAgIHdoaWxlICh0Lm5leHQgPD0gY3Vyck1zKSB7XG4gICAgICAgIHNhZmVJbnZva2UodC5jYiwgdC5hcmdzKTtcbiAgICAgICAgaWYgKHQudHlwZSA9PT0gJ3RpbWVvdXQnKSB7IGRlbGV0ZSB0aW1lcnNbaWRzW2ldXTsgYnJlYWs7IH1cbiAgICAgICAgdC5uZXh0ICs9IHQuZGVsYXk7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHJhZnMgPSByYWZRdWV1ZS5zcGxpY2UoMCk7XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCByYWZzLmxlbmd0aDsgaisrKSB7XG4gICAgICBzYWZlSW52b2tlKHJhZnNbal0uY2IsIFtjdXJyTXNdKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBlamVjdCgpIHtcbiAgICBEYXRlID0gb3JpZy5EYXRlO1xuICAgIHBlcmZvcm1hbmNlLm5vdyA9IG9yaWcucGVyZm9ybWFuY2VOb3c7XG4gICAgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSA9IG9yaWcucmFmO1xuICAgIHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSA9IG9yaWcuY2FmO1xuICAgIHdpbmRvdy5zZXRUaW1lb3V0ID0gb3JpZy5zZXRUaW1lb3V0O1xuICAgIHdpbmRvdy5jbGVhclRpbWVvdXQgPSBvcmlnLmNsZWFyVGltZW91dDtcbiAgICB3aW5kb3cuc2V0SW50ZXJ2YWwgPSBvcmlnLnNldEludGVydmFsO1xuICAgIHdpbmRvdy5jbGVhckludGVydmFsID0gb3JpZy5jbGVhckludGVydmFsO1xuICAgIGRlbGV0ZSB3aW5kb3cuJHtUSUNLX1NZTUJPTH07XG4gIH1cblxuICB3aW5kb3cuJHtUSUNLX1NZTUJPTH0gPSB7IHByb2Nlc3M6IHByb2Nlc3MsIGVqZWN0OiBlamVjdCB9O1xufSkoKTtgO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdGljayhmcmFtZTogV2ViRnJhbWVNYWluIHwgdW5kZWZpbmVkLCB0aW1lc3RhbXBNczogbnVtYmVyKSB7XG4gIGlmICghZnJhbWUpIHJldHVybjtcbiAgLy8gUGVyLWNhbGxiYWNrIGVycm9ycyBhcmUgc3dhbGxvd2VkIGluc2lkZSBIT09LIChzZWUgc2FmZUludm9rZSkuIE9ubHkgQ0RQL3RpbWVvdXQgZmFpbHVyZXNcbiAgLy8gc3VyZmFjZSBoZXJlIOKAlCB0aGV5IHNpZ25hbCBhIHJlYWwgZmF1bHQgKHJlbmRlcmVyIGhhbmcsIElQQyBicm9rZW4pIGFuZCBtdXN0IHByb3BhZ2F0ZS5cbiAgY29uc3QgZXYgPSBmcmFtZS5leGVjdXRlSmF2YVNjcmlwdChgJHtIT09LfSAke1RJQ0tfU1lNQk9MfS5wcm9jZXNzKCR7dGltZXN0YW1wTXN9KWApO1xuICBhd2FpdCB3aXRoVGltZW91dChldiwgNV8wMDAsIFwidGljay5leGVjdXRlSmF2YVNjcmlwdFwiKTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgTHUgQW8gKGx1YW9AYmlsaWJpbGkuY29tKSBvbiAyMDI2LzA1LzE4LlxuXG5pbXBvcnQgdHlwZSB7IFdlYkZyYW1lTWFpbiB9IGZyb20gXCJlbGVjdHJvblwiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4uLy4uL2Jhc2UvbG9nZ2luZ1wiO1xuaW1wb3J0IHsgd2l0aFRpbWVvdXQgfSBmcm9tIFwiLi4vLi4vYmFzZS90aW1pbmdcIjtcblxuY29uc3QgVEFHID0gXCJbVmlkZW9dXCI7XG5leHBvcnQgY29uc3QgVklERU9fU1lNQk9MID0gXCJfX3B1cF92aWRlb19fXCI7XG5cbi8vIFNpZGVjYXIgc2hpbTogb2JzZXJ2ZXMgcGFnZS1kcml2ZW4gPHZpZGVvPiBzdGF0ZSwgcGFpbnRzIG1hdGNoaW5nIGRlY29kZWQgZnJhbWVzIHRvIGEgc3R5bGUtbWlycm9yZWQgb3ZlcmxheSBjYW52YXMuXG5jb25zdCBIT09LID0gYChmdW5jdGlvbigpIHtcbiAgaWYgKHdpbmRvdy5zZWxmID09PSB3aW5kb3cudG9wKSByZXR1cm47XG4gIGlmICh0eXBlb2YgJHtWSURFT19TWU1CT0x9ICE9PSAndW5kZWZpbmVkJykgcmV0dXJuO1xuXG4gIGNvbnN0IFNDSEVNRSA9ICdwdXAtZnJhbWU6Ly8nO1xuICBjb25zdCBIVkUgPSBIVE1MVmlkZW9FbGVtZW50LnByb3RvdHlwZTtcbiAgY29uc3QgTUVESUEgPSBIVE1MTWVkaWFFbGVtZW50LnByb3RvdHlwZTtcbiAgY29uc3Qgb3JpZ1BhdXNlID0gSFZFLnBhdXNlO1xuICBjb25zdCBjdERlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEhWRSwgJ2N1cnJlbnRUaW1lJykgfHwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihNRURJQSwgJ2N1cnJlbnRUaW1lJyk7XG4gIGNvbnN0IHBhdXNlZERlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEhWRSwgJ3BhdXNlZCcpIHx8IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTUVESUEsICdwYXVzZWQnKTtcbiAgY29uc3QgZW5kZWREZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihIVkUsICdlbmRlZCcpIHx8IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTUVESUEsICdlbmRlZCcpO1xuICBjb25zdCBzcmNEZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihIVkUsICdzcmMnKSB8fCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE1FRElBLCAnc3JjJyk7XG5cbiAgY29uc3Qgc2Vzc2lvbnMgPSBuZXcgV2Vha01hcCgpO1xuICBjb25zdCBhdHRhY2hpbmcgPSBuZXcgV2Vha01hcCgpO1xuICBsZXQgY3Vyck1zID0gMDtcbiAgbGV0IGxhc3RNcyA9IDA7XG5cbiAgLy8gUHJvcGVydGllcyBtaXJyb3JlZCBmcm9tIDx2aWRlbz4gdG8gY2FudmFzIG92ZXJsYXkgc28gcGFnZSBDU1Mgc3RpbGwgYXBwbGllcyB2aXN1YWxseS5cbiAgY29uc3QgTUlSUk9SX1BST1BTID0gW1xuICAgICdib3JkZXJSYWRpdXMnLCAnYm9yZGVyVG9wTGVmdFJhZGl1cycsICdib3JkZXJUb3BSaWdodFJhZGl1cycsICdib3JkZXJCb3R0b21MZWZ0UmFkaXVzJywgJ2JvcmRlckJvdHRvbVJpZ2h0UmFkaXVzJyxcbiAgICAndHJhbnNmb3JtJywgJ3RyYW5zZm9ybU9yaWdpbicsICdmaWx0ZXInLCAnY2xpcFBhdGgnLCAnYm94U2hhZG93JywgJ29wYWNpdHknLCAnbWl4QmxlbmRNb2RlJywgJ21hc2snLFxuICAgICd6SW5kZXgnLCAncG9zaXRpb24nLCAnbGVmdCcsICd0b3AnLCAncmlnaHQnLCAnYm90dG9tJyxcbiAgXTtcblxuICBmdW5jdGlvbiBzZXR1cENhbnZhcyh2aWRlbykge1xuICAgIGNvbnN0IGN2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG4gICAgY3YuZGF0YXNldC5wdXBWaWRlb092ZXJsYXkgPSAnMSc7XG4gICAgY3Yuc3R5bGUucG9pbnRlckV2ZW50cyA9ICdub25lJztcbiAgICAvLyB2aXNpYmlsaXR5OmhpZGRlbiBzbyB0aGUgbmF0aXZlIHBpcGVsaW5lIGRvZXNuJ3QgcGFpbnQ7IG9wYWNpdHkgbGVmdCB0byBwYWdlIENTUy5cbiAgICB2aWRlby5zdHlsZS52aXNpYmlsaXR5ID0gJ2hpZGRlbic7XG4gICAgdmlkZW8ubXV0ZWQgPSB0cnVlO1xuICAgIGNvbnN0IHBhcmVudCA9IHZpZGVvLnBhcmVudE5vZGUgfHwgZG9jdW1lbnQuYm9keTtcbiAgICBwYXJlbnQuaW5zZXJ0QmVmb3JlKGN2LCB2aWRlby5uZXh0U2libGluZyk7XG4gICAgc3luY092ZXJsYXkodmlkZW8sIGN2KTtcbiAgICByZXR1cm4gY3Y7XG4gIH1cblxuICBmdW5jdGlvbiBzeW5jT3ZlcmxheSh2aWRlbywgY3YpIHtcbiAgICBjb25zdCBjcyA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHZpZGVvKTtcbiAgICBjb25zdCBvZmZzZXRQYXJlbnQgPSB2aWRlby5vZmZzZXRQYXJlbnQgfHwgZG9jdW1lbnQuYm9keTtcbiAgICBjb25zdCB2ciA9IHZpZGVvLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGNvbnN0IHByID0gb2Zmc2V0UGFyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGN2LnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcbiAgICBjdi5zdHlsZS5sZWZ0ID0gKHZyLmxlZnQgLSBwci5sZWZ0KSArICdweCc7XG4gICAgY3Yuc3R5bGUudG9wID0gKHZyLnRvcCAtIHByLnRvcCkgKyAncHgnO1xuICAgIGN2LnN0eWxlLndpZHRoID0gdnIud2lkdGggKyAncHgnO1xuICAgIGN2LnN0eWxlLmhlaWdodCA9IHZyLmhlaWdodCArICdweCc7XG4gICAgZm9yIChjb25zdCBwIG9mIE1JUlJPUl9QUk9QUykge1xuICAgICAgaWYgKHAgPT09ICdwb3NpdGlvbicgfHwgcCA9PT0gJ2xlZnQnIHx8IHAgPT09ICd0b3AnIHx8IHAgPT09ICdyaWdodCcgfHwgcCA9PT0gJ2JvdHRvbScpIGNvbnRpbnVlO1xuICAgICAgY3Yuc3R5bGVbcF0gPSBjc1twXTtcbiAgICB9XG4gICAgY29uc3QgZHByID0gd2luZG93LmRldmljZVBpeGVsUmF0aW8gfHwgMTtcbiAgICBjb25zdCB3ID0gTWF0aC5tYXgoMSwgTWF0aC5yb3VuZCh2ci53aWR0aCAqIGRwcikpO1xuICAgIGNvbnN0IGggPSBNYXRoLm1heCgxLCBNYXRoLnJvdW5kKHZyLmhlaWdodCAqIGRwcikpO1xuICAgIGlmIChjdi53aWR0aCAhPT0gdykgY3Yud2lkdGggPSB3O1xuICAgIGlmIChjdi5oZWlnaHQgIT09IGgpIGN2LmhlaWdodCA9IGg7XG4gIH1cblxuICAvLyBDb21wdXRlZCBvYmplY3QtZml0IOKGkiBkcmF3SW1hZ2UgZ2VvbWV0cnk7IGRlZmF1bHRzIHRvICdmaWxsJy5cbiAgZnVuY3Rpb24gZml0UmVjdChhcmdzKSB7XG4gICAgY29uc3Qgc3JjVyA9IGFyZ3Muc3JjVywgc3JjSCA9IGFyZ3Muc3JjSCwgZHN0VyA9IGFyZ3MuZHN0VywgZHN0SCA9IGFyZ3MuZHN0SCwgZml0ID0gYXJncy5maXQ7XG4gICAgaWYgKGZpdCA9PT0gJ25vbmUnKSB7XG4gICAgICByZXR1cm4gWyhkc3RXIC0gc3JjVykgLyAyLCAoZHN0SCAtIHNyY0gpIC8gMiwgc3JjVywgc3JjSF07XG4gICAgfVxuICAgIGlmIChmaXQgPT09ICdjb250YWluJyB8fCBmaXQgPT09ICdzY2FsZS1kb3duJykge1xuICAgICAgY29uc3Qgc2MgPSBNYXRoLm1pbihkc3RXIC8gc3JjVywgZHN0SCAvIHNyY0gpO1xuICAgICAgY29uc3QgayA9IGZpdCA9PT0gJ3NjYWxlLWRvd24nID8gTWF0aC5taW4oMSwgc2MpIDogc2M7XG4gICAgICBjb25zdCB3cyA9IGsgKiBzcmNXLCBocyA9IGsgKiBzcmNIO1xuICAgICAgcmV0dXJuIFsoZHN0VyAtIHdzKSAvIDIsIChkc3RIIC0gaHMpIC8gMiwgd3MsIGhzXTtcbiAgICB9XG4gICAgaWYgKGZpdCA9PT0gJ2NvdmVyJykge1xuICAgICAgY29uc3Qgc2MgPSBNYXRoLm1heChkc3RXIC8gc3JjVywgZHN0SCAvIHNyY0gpO1xuICAgICAgY29uc3Qgd3MgPSBzYyAqIHNyY1csIGhzID0gc2MgKiBzcmNIO1xuICAgICAgcmV0dXJuIFsoZHN0VyAtIHdzKSAvIDIsIChkc3RIIC0gaHMpIC8gMiwgd3MsIGhzXTtcbiAgICB9XG4gICAgcmV0dXJuIFswLCAwLCBkc3RXLCBkc3RIXTsgLy8gJ2ZpbGwnXG4gIH1cblxuICBmdW5jdGlvbiBhdHRhY2godmlkZW8pIHtcbiAgICBpZiAoc2Vzc2lvbnMuaGFzKHZpZGVvKSkgcmV0dXJuIFByb21pc2UucmVzb2x2ZShzZXNzaW9ucy5nZXQodmlkZW8pKTtcbiAgICBjb25zdCBwZW5kaW5nID0gYXR0YWNoaW5nLmdldCh2aWRlbyk7XG4gICAgaWYgKHBlbmRpbmcpIHJldHVybiBwZW5kaW5nO1xuICAgIC8vIENhcHR1cmVkIGF0IGNhbGwgc2l0ZSB0byBjYXRjaCB1cCB0aGUgYXN5bmMgb3BlbigpIHByb2JlIGxhdGVuY3kgb24gYXR0YWNoLlxuICAgIGNvbnN0IGJpcnRoTXMgPSBjdXJyTXM7XG4gICAgY29uc3QgcCA9IGRvQXR0YWNoKHZpZGVvLCBiaXJ0aE1zKS5maW5hbGx5KCgpID0+IGF0dGFjaGluZy5kZWxldGUodmlkZW8pKTtcbiAgICBhdHRhY2hpbmcuc2V0KHZpZGVvLCBwKTtcbiAgICByZXR1cm4gcDtcbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIGRvQXR0YWNoKHZpZGVvLCBiaXJ0aE1zKSB7XG4gICAgLy8gdmlkZW8uc3JjIHJlZmxlY3RzIHNldHRlciBhc3NpZ25tZW50IHN5bmNocm9ub3VzbHk7IGN1cnJlbnRTcmMgbGFncyB1bnRpbCBsb2FkIHJ1bnMuXG4gICAgY29uc3Qgc3JjID0gdmlkZW8uc3JjIHx8IHZpZGVvLmN1cnJlbnRTcmM7XG4gICAgaWYgKCFzcmMpIHJldHVybiBudWxsO1xuICAgIC8vIGZyYW1lX3NlcnZlciBkZWNvZGVzIHZpYSBmZm1wZWcsIHdoaWNoIGNhbm5vdCByZWFkIGJyb3dzZXItaW50ZXJuYWwgVVJMcyDigJQgbGVhdmUgbmF0aXZlLlxuICAgIGlmICgvXihibG9iOnxkYXRhOnxtZWRpYXN0cmVhbTopL2kudGVzdChzcmMpKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCBmcHMgPSBwYXJzZUludCh2aWRlby5kYXRhc2V0LnB1cEZwcyB8fCAnMzAnLCAxMCk7XG4gICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2goU0NIRU1FICsgJ29wZW4/c3JjPScgKyBlbmNvZGVVUklDb21wb25lbnQoc3JjKSArICcmZnBzPScgKyBmcHMpO1xuICAgIGlmICghcmVzLm9rKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCBtZXRhID0gYXdhaXQgcmVzLmpzb24oKTtcbiAgICBjb25zdCBjdiA9IHNldHVwQ2FudmFzKHZpZGVvKTtcbiAgICBjb25zdCBwbGF5aW5nID0gdmlkZW8uYXV0b3BsYXkgfHwgIXZpZGVvLnBhdXNlZDtcbiAgICBjb25zdCBzdGF0ZSA9IHtcbiAgICAgIG1ldGE6IG1ldGEsXG4gICAgICBjdjogY3YsXG4gICAgICBjdHg6IGN2LmdldENvbnRleHQoJzJkJyksXG4gICAgICBwYXVzZWQ6ICFwbGF5aW5nLFxuICAgICAgY3VycmVudFRpbWU6IHBsYXlpbmcgPyBNYXRoLm1heCgwLCAoY3Vyck1zIC0gYmlydGhNcykgLyAxMDAwKSA6IDAsXG4gICAgICBlbmRlZDogZmFsc2UsXG4gICAgICBsYXN0RHJhd25JZHg6IC0xLFxuICAgICAgZmFpbHVyZXM6IDAsXG4gICAgICBkZWFkOiBmYWxzZSxcbiAgICB9O1xuICAgIHNlc3Npb25zLnNldCh2aWRlbywgc3RhdGUpO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh2aWRlbywgJ3ZpZGVvV2lkdGgnLCB7IHZhbHVlOiBtZXRhLndpZHRoLCBjb25maWd1cmFibGU6IHRydWUgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHZpZGVvLCAndmlkZW9IZWlnaHQnLCB7IHZhbHVlOiBtZXRhLmhlaWdodCwgY29uZmlndXJhYmxlOiB0cnVlIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh2aWRlbywgJ2R1cmF0aW9uJywgeyB2YWx1ZTogbWV0YS5kdXJhdGlvbiwgY29uZmlndXJhYmxlOiB0cnVlIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh2aWRlbywgJ3JlYWR5U3RhdGUnLCB7IHZhbHVlOiA0LCBjb25maWd1cmFibGU6IHRydWUgfSk7XG4gICAgLy8gU3RhbmRhcmQgSFRNTE1lZGlhRWxlbWVudCBsb2FkIGxpZmVjeWNsZSBzbyBwYWdlcyBhd2FpdGluZyB0aGVzZSBjYW4gcHJvY2VlZC5cbiAgICB2aWRlby5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgnbG9hZHN0YXJ0JykpO1xuICAgIHZpZGVvLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdkdXJhdGlvbmNoYW5nZScpKTtcbiAgICB2aWRlby5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgnbG9hZGVkbWV0YWRhdGEnKSk7XG4gICAgdmlkZW8uZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ2xvYWRlZGRhdGEnKSk7XG4gICAgdmlkZW8uZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ2NhbnBsYXknKSk7XG4gICAgdmlkZW8uZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ2NhbnBsYXl0aHJvdWdoJykpO1xuICAgIGlmIChwbGF5aW5nKSB7XG4gICAgICB2aWRlby5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgncGxheScpKTtcbiAgICAgIHZpZGVvLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdwbGF5aW5nJykpO1xuICAgIH1cbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBmdW5jdGlvbiBkZXRhY2godmlkZW8pIHtcbiAgICBjb25zdCBzdGF0ZSA9IHNlc3Npb25zLmdldCh2aWRlbyk7XG4gICAgaWYgKCFzdGF0ZSkgcmV0dXJuO1xuICAgIGZldGNoKFNDSEVNRSArICdjbG9zZT9pZD0nICsgc3RhdGUubWV0YS5pZCwgeyBrZWVwYWxpdmU6IHRydWUgfSk7XG4gICAgc3RhdGUuY3YucmVtb3ZlKCk7XG4gICAgc2Vzc2lvbnMuZGVsZXRlKHZpZGVvKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlc3VtZSh2aWRlbywgc3RhdGUpIHtcbiAgICBpZiAoIXN0YXRlLnBhdXNlZCAmJiAhc3RhdGUuZW5kZWQpIHJldHVybjtcbiAgICBzdGF0ZS5wYXVzZWQgPSBmYWxzZTtcbiAgICBzdGF0ZS5lbmRlZCA9IGZhbHNlO1xuICAgIHZpZGVvLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdwbGF5JykpO1xuICAgIHZpZGVvLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdwbGF5aW5nJykpO1xuICB9XG5cbiAgSFZFLnBsYXkgPSBmdW5jdGlvbigpIHtcbiAgICBjb25zdCB2aWRlbyA9IHRoaXM7XG4gICAgY29uc3Qgc3RhdGUgPSBzZXNzaW9ucy5nZXQodmlkZW8pO1xuICAgIGlmICghc3RhdGUpIHJldHVybiBhdHRhY2godmlkZW8pLnRoZW4oKHMpID0+IHsgaWYgKHMpIHJlc3VtZSh2aWRlbywgcyk7IH0pO1xuICAgIHJlc3VtZSh2aWRlbywgc3RhdGUpO1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgfTtcbiAgSFZFLnBhdXNlID0gZnVuY3Rpb24oKSB7XG4gICAgY29uc3Qgc3RhdGUgPSBzZXNzaW9ucy5nZXQodGhpcyk7XG4gICAgaWYgKCFzdGF0ZSkgeyBvcmlnUGF1c2UuY2FsbCh0aGlzKTsgcmV0dXJuOyB9XG4gICAgaWYgKCFzdGF0ZS5wYXVzZWQpIHtcbiAgICAgIHN0YXRlLnBhdXNlZCA9IHRydWU7XG4gICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdwYXVzZScpKTtcbiAgICB9XG4gIH07XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVkUsICdwYXVzZWQnLCB7XG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24oKSB7IGNvbnN0IHMgPSBzZXNzaW9ucy5nZXQodGhpcyk7IHJldHVybiBzID8gcy5wYXVzZWQgOiBwYXVzZWREZXNjLmdldC5jYWxsKHRoaXMpOyB9LFxuICB9KTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEhWRSwgJ2VuZGVkJywge1xuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkgeyBjb25zdCBzID0gc2Vzc2lvbnMuZ2V0KHRoaXMpOyByZXR1cm4gcyA/IHMuZW5kZWQgOiBlbmRlZERlc2MuZ2V0LmNhbGwodGhpcyk7IH0sXG4gIH0pO1xuICBpZiAoY3REZXNjKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEhWRSwgJ2N1cnJlbnRUaW1lJywge1xuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgY29uc3QgcyA9IHNlc3Npb25zLmdldCh0aGlzKTtcbiAgICAgICAgcmV0dXJuIHMgPyBzLmN1cnJlbnRUaW1lIDogY3REZXNjLmdldC5jYWxsKHRoaXMpO1xuICAgICAgfSxcbiAgICAgIHNldDogZnVuY3Rpb24odCkge1xuICAgICAgICBjb25zdCBzID0gc2Vzc2lvbnMuZ2V0KHRoaXMpO1xuICAgICAgICBpZiAoIXMpIHsgY3REZXNjLnNldC5jYWxsKHRoaXMsIHQpOyByZXR1cm47IH1cbiAgICAgICAgcy5jdXJyZW50VGltZSA9IE1hdGgubWF4KDAsIE1hdGgubWluKHQsIHMubWV0YS5kdXJhdGlvbikpO1xuICAgICAgICBpZiAocy5jdXJyZW50VGltZSA8IHMubWV0YS5kdXJhdGlvbikgcy5lbmRlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdzZWVraW5nJykpO1xuICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdzZWVrZWQnKSk7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ3RpbWV1cGRhdGUnKSk7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gb25TcmNDaGFuZ2UodmlkZW8pIHtcbiAgICBpZiAoc2Vzc2lvbnMuaGFzKHZpZGVvKSkgZGV0YWNoKHZpZGVvKTtcbiAgICBhdHRhY2godmlkZW8pO1xuICB9XG5cbiAgZnVuY3Rpb24gc2Nhbihyb290KSB7XG4gICAgaWYgKHJvb3QudGFnTmFtZSA9PT0gJ1ZJREVPJykgYXR0YWNoKHJvb3QpO1xuICAgIGlmIChyb290LnF1ZXJ5U2VsZWN0b3JBbGwpIHJvb3QucXVlcnlTZWxlY3RvckFsbCgndmlkZW8nKS5mb3JFYWNoKCh2KSA9PiBhdHRhY2godikpO1xuICB9XG4gIHNjYW4oZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KTtcbiAgbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKG11dHMpID0+IHtcbiAgICBmb3IgKGNvbnN0IG0gb2YgbXV0cykge1xuICAgICAgaWYgKG0udHlwZSA9PT0gJ2F0dHJpYnV0ZXMnICYmIG0udGFyZ2V0IGluc3RhbmNlb2YgSFRNTFZpZGVvRWxlbWVudCAmJiBtLmF0dHJpYnV0ZU5hbWUgPT09ICdzcmMnKSB7XG4gICAgICAgIG9uU3JjQ2hhbmdlKG0udGFyZ2V0KTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBmb3IgKGNvbnN0IG4gb2YgbS5hZGRlZE5vZGVzKSBpZiAobiBpbnN0YW5jZW9mIEVsZW1lbnQpIHNjYW4obik7XG4gICAgICBmb3IgKGNvbnN0IG4gb2YgbS5yZW1vdmVkTm9kZXMpIGlmIChuIGluc3RhbmNlb2YgSFRNTFZpZGVvRWxlbWVudCkgZGV0YWNoKG4pO1xuICAgIH1cbiAgfSkub2JzZXJ2ZShkb2N1bWVudCwgeyBzdWJ0cmVlOiB0cnVlLCBjaGlsZExpc3Q6IHRydWUsIGF0dHJpYnV0ZXM6IHRydWUsIGF0dHJpYnV0ZUZpbHRlcjogWydzcmMnXSB9KTtcblxuICBpZiAoc3JjRGVzYyAmJiBzcmNEZXNjLnNldCkge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVkUsICdzcmMnLCB7XG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQ6IHNyY0Rlc2MuZ2V0LFxuICAgICAgc2V0OiBmdW5jdGlvbih2KSB7XG4gICAgICAgIHNyY0Rlc2Muc2V0LmNhbGwodGhpcywgdik7XG4gICAgICAgIG9uU3JjQ2hhbmdlKHRoaXMpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIFJldHVybnMgdW5kZWZpbmVkIChzeW5jKSB3aGVuIG5vIHdvcmsg4oCUIGF2b2lkcyBhIG1pY3JvdGFzay1vbmx5IFByb21pc2UgQ0RQIG1heSBub3QgcmVwb3J0LlxuICBmdW5jdGlvbiBhZHZhbmNlKHRpbWVzdGFtcE1zKSB7XG4gICAgbGFzdE1zID0gY3Vyck1zO1xuICAgIGN1cnJNcyA9IHRpbWVzdGFtcE1zO1xuICAgIGNvbnN0IGR0ID0gTWF0aC5tYXgoMCwgY3Vyck1zIC0gbGFzdE1zKSAvIDEwMDA7XG4gICAgY29uc3Qgd29yayA9IFtdO1xuICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ3ZpZGVvJykuZm9yRWFjaCgodikgPT4ge1xuICAgICAgY29uc3Qgc3RhdGUgPSBzZXNzaW9ucy5nZXQodik7XG4gICAgICBpZiAoIXN0YXRlIHx8IHN0YXRlLmRlYWQpIHJldHVybjtcbiAgICAgIGlmICghc3RhdGUucGF1c2VkICYmICFzdGF0ZS5lbmRlZCkge1xuICAgICAgICBzdGF0ZS5jdXJyZW50VGltZSArPSBkdCAqICh2LnBsYXliYWNrUmF0ZSB8fCAxKTtcbiAgICAgICAgaWYgKHN0YXRlLmN1cnJlbnRUaW1lID49IHN0YXRlLm1ldGEuZHVyYXRpb24pIHtcbiAgICAgICAgICBpZiAodi5sb29wKSB7XG4gICAgICAgICAgICBzdGF0ZS5jdXJyZW50VGltZSA9IHN0YXRlLmN1cnJlbnRUaW1lICUgc3RhdGUubWV0YS5kdXJhdGlvbjtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3RhdGUuY3VycmVudFRpbWUgPSBzdGF0ZS5tZXRhLmR1cmF0aW9uO1xuICAgICAgICAgICAgc3RhdGUucGF1c2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIHN0YXRlLmVuZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHYuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ2VuZGVkJykpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCd0aW1ldXBkYXRlJykpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBObyBSZXNpemVPYnNlcnZlciB1bmRlciBwYXVzZWQgdnRpbWU7IHJlLXBpbiBnZW9tZXRyeSBldmVyeSB0aWNrLlxuICAgICAgc3luY092ZXJsYXkodiwgc3RhdGUuY3YpO1xuICAgICAgY29uc3QgaWR4ID0gTWF0aC5yb3VuZChzdGF0ZS5jdXJyZW50VGltZSAqIHN0YXRlLm1ldGEuZnBzKTtcbiAgICAgIGlmIChpZHggPT09IHN0YXRlLmxhc3REcmF3bklkeCkgcmV0dXJuO1xuICAgICAgd29yay5wdXNoKHBhaW50KHYsIHN0YXRlLCBpZHgpKTtcbiAgICB9KTtcbiAgICByZXR1cm4gd29yay5sZW5ndGggPyBQcm9taXNlLmFsbCh3b3JrKSA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIHBhaW50KHZpZGVvLCBzdGF0ZSwgaWR4KSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKFNDSEVNRSArICdmcmFtZT9pZD0nICsgc3RhdGUubWV0YS5pZCArICcmaWR4PScgKyBpZHgpO1xuICAgICAgLy8gNDEwIEdvbmUgPSBwYXN0IGxhc3QgZGVjb2RlZCBmcmFtZTsga2VlcCBsYXN0IGZyYW1lIG9uIGNhbnZhcy5cbiAgICAgIGlmIChyZXMuc3RhdHVzID09PSA0MTApIHJldHVybjtcbiAgICAgIGlmICghcmVzLm9rKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1twdXAtdmlkZW9dIGZyYW1lICcgKyBpZHggKyAnIGh0dHAgJyArIHJlcy5zdGF0dXMpO1xuICAgICAgICBpZiAoKytzdGF0ZS5mYWlsdXJlcyA+PSAzKSBzdGF0ZS5kZWFkID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgc3RhdGUuZmFpbHVyZXMgPSAwO1xuICAgICAgY29uc3QgYmxvYiA9IGF3YWl0IHJlcy5ibG9iKCk7XG4gICAgICBjb25zdCBibSA9IGF3YWl0IGNyZWF0ZUltYWdlQml0bWFwKGJsb2IpO1xuICAgICAgY29uc3QgY3YgPSBzdGF0ZS5jdjtcbiAgICAgIGNvbnN0IGZpdCA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHZpZGVvKS5vYmplY3RGaXQgfHwgJ2ZpbGwnO1xuICAgICAgY29uc3QgciA9IGZpdFJlY3QoeyBzcmNXOiBibS53aWR0aCwgc3JjSDogYm0uaGVpZ2h0LCBkc3RXOiBjdi53aWR0aCwgZHN0SDogY3YuaGVpZ2h0LCBmaXQgfSk7XG4gICAgICBzdGF0ZS5jdHguY2xlYXJSZWN0KDAsIDAsIGN2LndpZHRoLCBjdi5oZWlnaHQpO1xuICAgICAgc3RhdGUuY3R4LmRyYXdJbWFnZShibSwgclswXSwgclsxXSwgclsyXSwgclszXSk7XG4gICAgICBibS5jbG9zZSgpO1xuICAgICAgc3RhdGUubGFzdERyYXduSWR4ID0gaWR4O1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1twdXAtdmlkZW9dIHBhaW50IGZyYW1lICcgKyBpZHggKyAnIGZhaWxlZDogJyArIChlICYmIGUubWVzc2FnZSB8fCBlKSk7XG4gICAgICBpZiAoKytzdGF0ZS5mYWlsdXJlcyA+PSAzKSBzdGF0ZS5kZWFkID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICB3aW5kb3cuJHtWSURFT19TWU1CT0x9ID0geyBhZHZhbmNlOiBhZHZhbmNlIH07XG59KSgpO2A7XG5cbi8vIEJhY2tzdG9wIGFib3ZlIGZyYW1lX3NlcnZlcidzIDVzIHBlci1mcmFtZSB3YWl0LlxuY29uc3QgQURWQU5DRV9USU1FT1VUX01TID0gMTBfMDAwO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYWR2YW5jZVZpZGVvcyhmcmFtZTogV2ViRnJhbWVNYWluIHwgdW5kZWZpbmVkLCB0aW1lc3RhbXBNczogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gIC8vIEJsYW5rL25hdmlnYXRpbmcgZnJhbWUgb3JwaGFucyB0aGUgQ0RQIHByb21pc2U7IHNraXAuIFNoaW0gZmFpbHVyZSBtdXN0IG5vdCBhYm9ydCByZW5kZXIuXG4gIGlmICghZnJhbWUgfHwgIWZyYW1lLnVybCkgcmV0dXJuO1xuICB0cnkge1xuICAgIGNvbnN0IGV2ID0gZnJhbWUuZXhlY3V0ZUphdmFTY3JpcHQoYCR7SE9PS30gJHtWSURFT19TWU1CT0x9LmFkdmFuY2UoJHt0aW1lc3RhbXBNc30pYCk7XG4gICAgYXdhaXQgd2l0aFRpbWVvdXQoZXYsIEFEVkFOQ0VfVElNRU9VVF9NUywgXCJ2aWRlby5hZHZhbmNlXCIpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgbG9nZ2VyLndhcm4oVEFHLCBgYWR2YW5jZSBza2lwcGVkOiAke2UgaW5zdGFuY2VvZiBFcnJvciA/IGUubWVzc2FnZSA6IFN0cmluZyhlKX1gKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMy8xMy5cblxuaW1wb3J0IHtcbiAgdHlwZSBCcm93c2VyV2luZG93LFxuICB0eXBlIEV2ZW50LFxuICB0eXBlIE5hdGl2ZUltYWdlLFxuICB0eXBlIFJlY3RhbmdsZSxcbiAgdHlwZSBTaXplLFxuICB0eXBlIFdlYkNvbnRlbnRzUGFpbnRFdmVudFBhcmFtcyxcbn0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBwYXVzZVZpcnR1YWxUaW1lLCByZXNpemVEcmF3YWJsZSB9IGZyb20gXCIuLi9iYXNlL2NkcFwiO1xuaW1wb3J0IHsgRW5jb2RlclBpcGVsaW5lIH0gZnJvbSBcIi4uL2Jhc2UvZW5jb2Rlci9waXBlbGluZVwiO1xuaW1wb3J0IHsgc2l6ZUVxdWFscyB9IGZyb20gXCIuLi9iYXNlL2ltYWdlXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi4vYmFzZS9sb2dnaW5nXCI7XG5pbXBvcnQgeyB0eXBlIElwY0RvbmVQYXlsb2FkIH0gZnJvbSBcIi4vaXBjXCI7XG5pbXBvcnQgdHlwZSB7IElQQ1JlbmRlck9wdGlvbnMgfSBmcm9tIFwiLi9zY2hlbWFcIjtcbmltcG9ydCB7IGZyYW1lU2VydmVyIH0gZnJvbSBcIi4vdmlkZW8vZnJhbWVfc2VydmVyXCI7XG5pbXBvcnQgeyBkZWNvZGVTdGVnbywgc3dhcEJ1ZmZlciB9IGZyb20gXCIuL3N0ZWdvXCI7XG5pbXBvcnQgeyB0aWNrIH0gZnJvbSBcIi4vdGlja1wiO1xuaW1wb3J0IHsgYWR2YW5jZVZpZGVvcyB9IGZyb20gXCIuL3ZpZGVvL3NoaW1cIjtcbmltcG9ydCB7IGRpc3Bvc2VXaW5kb3csIGxvYWRXaW5kb3cgfSBmcm9tIFwiLi93aW5kb3dcIjtcblxuY29uc3QgVEFHID0gXCJbU2hvb3RdXCI7XG5cbmludGVyZmFjZSBQYWludE9wdGlvbnMge1xuICBzb3VyY2U6IHN0cmluZztcbiAgd2luOiBCcm93c2VyV2luZG93O1xuICBzaXplOiBTaXplO1xuICBtczogbnVtYmVyO1xufVxuXG5hc3luYyBmdW5jdGlvbiBwYWludCh7IHNvdXJjZSwgd2luLCBzaXplLCBtcyB9OiBQYWludE9wdGlvbnMpOiBQcm9taXNlPEJ1ZmZlcj4ge1xuICBsZXQgbGFzdFRzOiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gIGxldCBsYWdneSA9IDA7XG4gIGxldCBzdHVjayA9IDA7XG4gIGxldCBpbnRlcnZhbDogTm9kZUpTLlRpbWVvdXQgfCB1bmRlZmluZWQ7XG4gIGNvbnN0IGNkcCA9IHdpbi53ZWJDb250ZW50cy5kZWJ1Z2dlcjtcbiAgY29uc3QgZnJhbWVTaXplOiBTaXplID0geyB3aWR0aDogc2l6ZS53aWR0aCwgaGVpZ2h0OiBzaXplLmhlaWdodCArIDEgfTtcbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgbmV3IFByb21pc2U8QnVmZmVyPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBpbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgaWYgKHN0dWNrID49IDMpIHtcbiAgICAgICAgICByZWplY3QobmV3IEVycm9yKFwiZHJhd2FibGUgdGltZW91dFwiKSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHN0dWNrKys7XG4gICAgICAgIGxvZ2dlci53YXJuKFRBRywgYCR7c291cmNlfSByZW5kZXIgaXMgZXh0cmVtZWx5IHNsb3cgQCAke21zfSwgY3VycmVudDogJHtsYXN0VHN9IHdpdGggJHtzdHVja30gcmVwZWF0c2ApO1xuICAgICAgICB3aW4ud2ViQ29udGVudHMuaW52YWxpZGF0ZSgpO1xuICAgICAgfSwgMTAwMCk7XG4gICAgICBjb25zdCBoYW5kbGVyID0gKF9lOiBFdmVudDxXZWJDb250ZW50c1BhaW50RXZlbnRQYXJhbXM+LCBfZDogUmVjdGFuZ2xlLCBpbWFnZTogTmF0aXZlSW1hZ2UpID0+IHtcbiAgICAgICAgY29uc3QgaW1hZ2VTaXplID0gaW1hZ2UuZ2V0U2l6ZSgpO1xuICAgICAgICBpZiAoIXNpemVFcXVhbHMoaW1hZ2VTaXplLCBmcmFtZVNpemUpKSB7XG4gICAgICAgICAgLy8gTk9URShBdXRva2FrYSk6IFdlIG11c3QgZW5zdXJlIGZyYW1lIGlzIHJlYWR5IG9uIGVsZWN0cm9uIHY0MStcbiAgICAgICAgICByZXNpemVEcmF3YWJsZShjZHAsIGZyYW1lU2l6ZSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGJpdG1hcCA9IGltYWdlLnRvQml0bWFwKCk7XG4gICAgICAgIGNvbnN0IHRzID0gZGVjb2RlU3RlZ28oYml0bWFwLCBpbWFnZVNpemUpO1xuICAgICAgICBpZiAodHMgPT09IHVuZGVmaW5lZCB8fCBNYXRoLmFicyh0cyAtIG1zKSA+IDEpIHtcbiAgICAgICAgICBsYXN0VHMgPSB0cztcbiAgICAgICAgICBsYWdneSsrO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB3aW4ud2ViQ29udGVudHMub2ZmKFwicGFpbnRcIiwgaGFuZGxlcik7XG4gICAgICAgIHJlc29sdmUoQnVmZmVyLmZyb20oYml0bWFwLmJ1ZmZlciwgYml0bWFwLmJ5dGVPZmZzZXQsIHNpemUuaGVpZ2h0ICogc2l6ZS53aWR0aCAqIDQpKTtcbiAgICAgICAgd2luLndlYkNvbnRlbnRzLnN0b3BQYWludGluZygpO1xuICAgICAgfTtcbiAgICAgIHdpbi53ZWJDb250ZW50cy5vbihcInBhaW50XCIsIGhhbmRsZXIpO1xuICAgICAgd2luLndlYkNvbnRlbnRzLnN0YXJ0UGFpbnRpbmcoKTtcbiAgICB9KTtcbiAgfSBmaW5hbGx5IHtcbiAgICBjbGVhckludGVydmFsKGludGVydmFsKTtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2hvb3Qob3B0aW9uczogSVBDUmVuZGVyT3B0aW9ucyk6IFByb21pc2U8SXBjRG9uZVBheWxvYWQ+IHtcbiAgY29uc3QgeyBzb3VyY2UsIGZwcywgd2lkdGgsIGhlaWdodCwgZHVyYXRpb24sIHdpdGhBdWRpbywgb3V0RmlsZSwgZGlzYWJsZUh3Q29kZWMsIHNpZ25hbCwgb25Qcm9ncmVzcyB9ID0gb3B0aW9ucztcbiAgaWYgKHdpdGhBdWRpbykgbG9nZ2VyLndhcm4oVEFHLCBcImF1ZGlvIHdpbGwgYmUgaWdub3JlZCBvbiB0aGlzIG1vZGVcIik7XG5cbiAgY29uc3QgdEluaXQgPSBwZXJmb3JtYW5jZS5ub3coKTtcbiAgY29uc3Qgd2luUCA9IGxvYWRXaW5kb3coeyBzb3VyY2UsIHJlbmRlcmVyOiBvcHRpb25zLCBzaWduYWwgfSk7XG4gIGF3YWl0IHVzaW5nIHBpcGVsaW5lID0gYXdhaXQgRW5jb2RlclBpcGVsaW5lLmNyZWF0ZSh7IHdpZHRoLCBoZWlnaHQsIGZwcywgb3V0RmlsZSwgd2l0aEF1ZGlvLCBkaXNhYmxlSHdDb2RlYyB9KTtcbiAgY29uc3Qgd2luID0gYXdhaXQgd2luUDtcbiAgbG9nZ2VyLmRlYnVnKFRBRywgXCJpbml0IGRvbmU6XCIsIHsgc291cmNlLCBjb3N0OiBwZXJmb3JtYW5jZS5ub3coKSAtIHRJbml0IH0pO1xuXG4gIGNvbnN0IHRvdGFsID0gTWF0aC5jZWlsKGZwcyAqIGR1cmF0aW9uKTtcbiAgY29uc3QgZnJhbWVJbnRlcnZhbCA9IDEwMDAgLyBmcHM7XG5cbiAgbGV0IHdyaXR0ZW4gPSAwO1xuICBsZXQgcHJvZ3Jlc3MgPSAwO1xuICBsZXQgZW5jb2RlRXJyb3I6IEVycm9yIHwgdW5kZWZpbmVkO1xuICBjb25zdCBjZHAgPSB3aW4ud2ViQ29udGVudHMuZGVidWdnZXI7XG4gIGNvbnN0IG1haW4gPSB3aW4ud2ViQ29udGVudHMubWFpbkZyYW1lO1xuICBjb25zdCBpZnJhbWUgPSBtYWluLmZyYW1lc1swXTtcbiAgdHJ5IHtcbiAgICB3aW4ud2ViQ29udGVudHMuc2V0RnJhbWVSYXRlKGZwcyk7XG4gICAgd2luLndlYkNvbnRlbnRzLnN0b3BQYWludGluZygpO1xuICAgIGF3YWl0IHBhdXNlVmlydHVhbFRpbWUoY2RwKTtcblxuICAgIGZvciAobGV0IGZyYW1lID0gMDsgZnJhbWUgPCB0b3RhbDsgZnJhbWUrKykge1xuICAgICAgc2lnbmFsPy50aHJvd0lmQWJvcnRlZCgpO1xuICAgICAgY29uc3QgZnJhbWVNcyA9IChmcmFtZSArIDEpICogZnJhbWVJbnRlcnZhbDtcblxuICAgICAgYXdhaXQgdGljayhpZnJhbWUsIGZyYW1lTXMpO1xuICAgICAgYXdhaXQgYWR2YW5jZVZpZGVvcyhpZnJhbWUsIGZyYW1lTXMpO1xuICAgICAgYXdhaXQgc3dhcEJ1ZmZlcih3aW4ud2ViQ29udGVudHMsIGZyYW1lTXMsIGZyYW1lSW50ZXJ2YWwpO1xuICAgICAgY29uc3QgYml0bWFwID0gYXdhaXQgcGFpbnQoeyBzb3VyY2UsIHdpbiwgc2l6ZTogeyB3aWR0aCwgaGVpZ2h0IH0sIG1zOiBmcmFtZU1zIH0pO1xuICAgICAgLy8gS2ljayBvZmYgZW5jb2RlIHdpdGhvdXQgYXdhaXRpbmc7IHBpcGVsaW5lIGxpbWl0ZXIgc2VyaWFsaXplcyBpbnRlcm5hbGx5LlxuICAgICAgLy8gRW5jb2RlIHJ1bnMgY29uY3VycmVudCB3aXRoIG5leHQgZnJhbWUncyBDRFAvcGFpbnQgc2V0dXAuXG4gICAgICBwaXBlbGluZS5lbmNvZGVCR1JBKGJpdG1hcCkuY2F0Y2goKGUpID0+IChlbmNvZGVFcnJvciA/Pz0gZSkpO1xuICAgICAgd3JpdHRlbisrO1xuICAgICAgaWYgKGVuY29kZUVycm9yKSB0aHJvdyBlbmNvZGVFcnJvcjtcblxuICAgICAgY29uc3QgbmV3UHJvZ3Jlc3MgPSBNYXRoLmZsb29yKCh3cml0dGVuIC8gdG90YWwpICogMTAwKTtcbiAgICAgIGlmIChNYXRoLmFicyhuZXdQcm9ncmVzcyAtIHByb2dyZXNzKSA+IDEwKSB7XG4gICAgICAgIHByb2dyZXNzID0gbmV3UHJvZ3Jlc3M7XG4gICAgICAgIG9uUHJvZ3Jlc3MocHJvZ3Jlc3MpO1xuICAgICAgfVxuICAgIH1cbiAgfSBmaW5hbGx5IHtcbiAgICBmcmFtZVNlcnZlci5jbG9zZUFsbCgpO1xuICAgIGF3YWl0IGRpc3Bvc2VXaW5kb3cod2luKTtcbiAgICBhd2FpdCBwaXBlbGluZS5maW5pc2goKTtcbiAgfVxuXG4gIGlmIChlbmNvZGVFcnJvcikgdGhyb3cgZW5jb2RlRXJyb3I7XG4gIGlmICh3cml0dGVuID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwibm8gZnJhbWVzIGNhcHR1cmVkXCIpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB7IHdyaXR0ZW4sIGphbms6IDAsIG91dEZpbGUgfTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMS8zMC5cblxuaW1wb3J0IHsgb2sgfSBmcm9tIFwiYXNzZXJ0XCI7XG5pbXBvcnQgeyBhcHAsIE1lbnUgfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IG1rZGlyIH0gZnJvbSBcImZzL3Byb21pc2VzXCI7XG5pbXBvcnQgeyBkaXJuYW1lIH0gZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IHN0YXJ0RWxlY3Ryb25DcmFzaFJlcG9ydGVyIH0gZnJvbSBcIi4vYmFzZS9jcmFzaFwiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4vYmFzZS9sb2dnaW5nXCI7XG5pbXBvcnQgeyBtYWtlQ0xJIH0gZnJvbSBcIi4vY29tbW9uXCI7XG5pbXBvcnQgeyBJcGNNc2dUeXBlLCBJcGNXcml0ZXIsIHR5cGUgSXBjTXNnIH0gZnJvbSBcIi4vcmVuZGVyZXIvaXBjXCI7XG5pbXBvcnQgeyBzZXR1cEZyYW1lUHJvdG9jb2wgfSBmcm9tIFwiLi9yZW5kZXJlci92aWRlby9wcm90b2NvbFwiO1xuaW1wb3J0IHsgc2V0dXBQdXBQcm90b2NvbCB9IGZyb20gXCIuL3JlbmRlcmVyL3Byb3RvY29sXCI7XG5pbXBvcnQgeyByZW5kZXIgfSBmcm9tIFwiLi9yZW5kZXJlci9yZW5kZXJcIjtcbmltcG9ydCB7IHdpdGhSZXJlbmRlciB9IGZyb20gXCIuL3JlbmRlcmVyL3JlcmVuZGVyXCI7XG5pbXBvcnQgeyBzaG9vdCB9IGZyb20gXCIuL3JlbmRlcmVyL3Nob290XCI7XG5cbmNvbnN0IFRBRyA9IFwiW0FwcF1cIjtcblxuZnVuY3Rpb24gcHJpbnRGZWF0dXJlcygpIHtcbiAgbG9nZ2VyLmRlYnVnKFRBRywgXCJncHUgZmVhdHVyZXM6XCIsIGFwcC5nZXRHUFVGZWF0dXJlU3RhdHVzKCkpO1xufVxuXG5jb25zdCBjdHJsID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xubGV0IGV4aXRpbmcgPSBmYWxzZTtcblxuc3RhcnRFbGVjdHJvbkNyYXNoUmVwb3J0ZXIoKTtcbk1lbnUuc2V0QXBwbGljYXRpb25NZW51KG51bGwpO1xuYXBwLmRvY2s/LmhpZGUoKTtcbmFwcC5vbihcIndpbmRvdy1hbGwtY2xvc2VkXCIsICgpID0+IHt9KTtcbmFwcC5vbihcImdwdS1pbmZvLXVwZGF0ZVwiLCBwcmludEZlYXR1cmVzKTtcbmFwcC5vbihcImJlZm9yZS1xdWl0XCIsIChlKSA9PiAhZXhpdGluZyAmJiBlLnByZXZlbnREZWZhdWx0KCkpO1xuYXBwLm9uKFwid2lsbC1xdWl0XCIsIChlKSA9PiAhZXhpdGluZyAmJiBlLnByZXZlbnREZWZhdWx0KCkpO1xuXG5vayhwcm9jZXNzLnNlbmQsIFwiaXBjIGNoYW5uZWwgbWlzc2luZyDigJQgc3Bhd24gd2l0aCBzdGRpb1szXT0naXBjJ1wiKTtcbnByb2Nlc3Mub25jZShcImRpc2Nvbm5lY3RcIiwgKCkgPT4gY3RybC5hYm9ydChcImRpc2Nvbm5lY3RcIikpO1xucHJvY2Vzcy5vbihcIm1lc3NhZ2VcIiwgKHJhdykgPT4ge1xuICBjb25zdCBtc2cgPSByYXcgYXMgSXBjTXNnO1xuICBpZiAobXNnLnR5cGUgPT09IElwY01zZ1R5cGUuQ0FOQ0VMKSBjdHJsLmFib3J0KG1zZy5yZWFzb24pO1xufSk7XG5cbm1ha2VDTEkoe1xuICBuYW1lOiBcImFwcFwiLFxuICBydW46IGFzeW5jIChzb3VyY2UsIG9wdGlvbnMpID0+IHtcbiAgICBjb25zdCBpcGMgPSBuZXcgSXBjV3JpdGVyKCk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGFwcC53aGVuUmVhZHkoKTtcbiAgICAgIHNldHVwUHVwUHJvdG9jb2woKTtcbiAgICAgIHNldHVwRnJhbWVQcm90b2NvbCgpO1xuICAgICAgcHJpbnRGZWF0dXJlcygpO1xuICAgICAgZm9yIChjb25zdCBvdXQgb2Ygb3B0aW9ucy5vdXRGaWxlLnNwbGl0KFwiLFwiKSkge1xuICAgICAgICBhd2FpdCBta2RpcihkaXJuYW1lKG91dCksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgfVxuICAgICAgY29uc3QgYWN0aW9uID0gb3B0aW9ucy5kZXRlcm1pbmlzdGljID8gc2hvb3QgOiByZW5kZXI7XG4gICAgICBjdHJsLnNpZ25hbC50aHJvd0lmQWJvcnRlZCgpO1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgd2l0aFJlcmVuZGVyKCgpID0+XG4gICAgICAgIGFjdGlvbih7XG4gICAgICAgICAgc291cmNlLFxuICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgc2lnbmFsOiBjdHJsLnNpZ25hbCxcbiAgICAgICAgICBvblByb2dyZXNzOiAocCkgPT4gaXBjLndyaXRlUHJvZ3Jlc3MocCksXG4gICAgICAgICAgb25Db25zb2xlOiAobCwgbSkgPT4gaXBjLndyaXRlQ29uc29sZShsLCBtKSxcbiAgICAgICAgfSksXG4gICAgICApO1xuICAgICAgYXdhaXQgaXBjLndyaXRlRG9uZShyZXN1bHQpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnN0IGVycm9yID0gZSBhcyBFcnJvcjtcbiAgICAgIGNvbnN0IG0gPSBlcnJvci5zdGFjayA/PyBlcnJvci5tZXNzYWdlID8/IFN0cmluZyhlID8/IFwidW5rbm93biBlcnJvclwiKTtcbiAgICAgIGF3YWl0IGlwYy53cml0ZUVycm9yKG0pO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBleGl0aW5nID0gdHJ1ZTtcbiAgICAgIGFwcC5leGl0KCk7XG4gICAgfVxuICB9LFxufSk7XG4iXX0=
|
|
398
|
+
})();`,mi=1e4;async function Xr(r,e){if(!(!r||!r.url))try{let t=r.executeJavaScript(`${pi} ${xt}.advance(${e})`);await R(t,mi,"video.advance");}catch(t){l.warn(ui,`advance skipped: ${t instanceof Error?t.message:String(t)}`);}}var qe="__pup_tick__",li=`(function() {
|
|
399
|
+
if (window.self === window.top) return;
|
|
400
|
+
if (typeof ${qe} !== 'undefined') return;
|
|
401
|
+
|
|
402
|
+
const orig = {
|
|
403
|
+
Date: Date,
|
|
404
|
+
dateNow: Date.now.bind(Date),
|
|
405
|
+
performanceNow: performance.now.bind(performance),
|
|
406
|
+
raf: requestAnimationFrame.bind(window),
|
|
407
|
+
caf: cancelAnimationFrame.bind(window),
|
|
408
|
+
setTimeout: setTimeout.bind(window),
|
|
409
|
+
clearTimeout: clearTimeout.bind(window),
|
|
410
|
+
setInterval: setInterval.bind(window),
|
|
411
|
+
clearInterval: clearInterval.bind(window),
|
|
412
|
+
};
|
|
413
|
+
|
|
414
|
+
let currMs = 0;
|
|
415
|
+
let rafQueue = [];
|
|
416
|
+
const timers = {};
|
|
417
|
+
let nextId = 1;
|
|
418
|
+
const dateOrigin = new orig.Date();
|
|
419
|
+
const perfOrigin = orig.performanceNow();
|
|
420
|
+
|
|
421
|
+
performance.now = function() { return perfOrigin + currMs; };
|
|
422
|
+
Date.now = function() { return dateOrigin.getTime() + currMs; };
|
|
423
|
+
Date = function() {
|
|
424
|
+
var O = orig.Date;
|
|
425
|
+
if (arguments.length === 0) return new O(dateOrigin.getTime() + currMs);
|
|
426
|
+
return new (Function.prototype.bind.apply(O, [null].concat(Array.prototype.slice.call(arguments))))();
|
|
427
|
+
};
|
|
428
|
+
Date.now = function() { return dateOrigin.getTime() + currMs; };
|
|
429
|
+
Date.parse = orig.Date.parse;
|
|
430
|
+
Date.UTC = orig.Date.UTC;
|
|
431
|
+
Date.prototype = orig.Date.prototype;
|
|
432
|
+
|
|
433
|
+
window.requestAnimationFrame = function(cb) {
|
|
434
|
+
const id = nextId++;
|
|
435
|
+
rafQueue.push({ id, cb });
|
|
436
|
+
return id;
|
|
437
|
+
};
|
|
438
|
+
window.cancelAnimationFrame = function(id) {
|
|
439
|
+
rafQueue = rafQueue.filter((r) => r.id !== id);
|
|
440
|
+
};
|
|
441
|
+
|
|
442
|
+
window.setTimeout = function(cb, delay, ...args) {
|
|
443
|
+
const id = nextId++;
|
|
444
|
+
timers[id] = { type: 'timeout', cb, delay: delay || 0, next: currMs + (delay || 0), args };
|
|
445
|
+
return id;
|
|
446
|
+
};
|
|
447
|
+
window.clearTimeout = function(id) { delete timers[id]; };
|
|
448
|
+
|
|
449
|
+
window.setInterval = function(cb, delay, ...args) {
|
|
450
|
+
const id = nextId++;
|
|
451
|
+
const d = Math.max(delay || 0, 1);
|
|
452
|
+
timers[id] = { type: 'interval', cb, delay: d, next: currMs + d, args };
|
|
453
|
+
return id;
|
|
454
|
+
};
|
|
455
|
+
window.clearInterval = function(id) { delete timers[id]; };
|
|
456
|
+
|
|
457
|
+
function safeInvoke(fn, args) {
|
|
458
|
+
try {
|
|
459
|
+
if (typeof fn === 'string') eval(fn);
|
|
460
|
+
else fn.apply(undefined, args || []);
|
|
461
|
+
} catch (e) {
|
|
462
|
+
console.error('[Tick] error:', e && e.stack || e);
|
|
463
|
+
}
|
|
464
|
+
}
|
|
465
|
+
|
|
466
|
+
function process(timestampMs) {
|
|
467
|
+
currMs = timestampMs;
|
|
468
|
+
document.getAnimations().forEach(a => {
|
|
469
|
+
a.pause();
|
|
470
|
+
a.currentTime = currMs;
|
|
471
|
+
});
|
|
472
|
+
const ids = Object.keys(timers);
|
|
473
|
+
for (let i = 0; i < ids.length; i++) {
|
|
474
|
+
const t = timers[ids[i]];
|
|
475
|
+
if (!t) continue;
|
|
476
|
+
while (t.next <= currMs) {
|
|
477
|
+
safeInvoke(t.cb, t.args);
|
|
478
|
+
if (t.type === 'timeout') { delete timers[ids[i]]; break; }
|
|
479
|
+
t.next += t.delay;
|
|
480
|
+
}
|
|
481
|
+
}
|
|
482
|
+
const rafs = rafQueue.splice(0);
|
|
483
|
+
for (let j = 0; j < rafs.length; j++) {
|
|
484
|
+
safeInvoke(rafs[j].cb, [currMs]);
|
|
485
|
+
}
|
|
486
|
+
}
|
|
487
|
+
|
|
488
|
+
function eject() {
|
|
489
|
+
Date = orig.Date;
|
|
490
|
+
performance.now = orig.performanceNow;
|
|
491
|
+
window.requestAnimationFrame = orig.raf;
|
|
492
|
+
window.cancelAnimationFrame = orig.caf;
|
|
493
|
+
window.setTimeout = orig.setTimeout;
|
|
494
|
+
window.clearTimeout = orig.clearTimeout;
|
|
495
|
+
window.setInterval = orig.setInterval;
|
|
496
|
+
window.clearInterval = orig.clearInterval;
|
|
497
|
+
delete window.${qe};
|
|
498
|
+
}
|
|
499
|
+
|
|
500
|
+
window.${qe} = { process: process, eject: eject };
|
|
501
|
+
})();`;async function Qr(r,e){if(!r)return;let t=r.executeJavaScript(`${li} ${qe}.process(${e})`);await Promise.all([R(t,5e3,"tick.executeJavaScript"),Xr(r,e)]);}var yt="[Shoot]";async function fi({source:r,win:e,size:t,ms:o}){let n,i=0,s=0,c,a=e.webContents.debugger,d={width:t.width,height:t.height+1};try{return await new Promise((p,u)=>{c=setInterval(()=>{if(s>=3){u(new Error("drawable timeout"));return}s++,l.warn(yt,`${r} render is extremely slow @ ${o}, current: ${n} with ${s} repeats`),e.webContents.invalidate();},1e3);let f=(w,h,b)=>{let _=b.getSize();if(!$e(_,d)){Re(a,d);return}let x=b.toBitmap(),g=Me(x,_);if(g===void 0||Math.abs(g-o)>1){n=g,i++;return}e.webContents.off("paint",f),p(Buffer.from(x.buffer,x.byteOffset,t.height*t.width*4)),e.webContents.stopPainting(),e.webContents.setFrameRate(240);};e.webContents.on("paint",f),e.webContents.startPainting();})}finally{clearInterval(c);}}async function Yr(r){var de=[];try{let{source:e,fps:t,width:o,height:n,duration:i,withAudio:s,outFile:c,disableHwCodec:a,signal:d,onProgress:p}=r;s&&l.warn(yt,"audio will be ignored on this mode");let u=performance.now();let f=ze({source:e,renderer:r,signal:d});let w=F(de,await ae.create({width:o,height:n,fps:t,outFile:c,withAudio:s,disableHwCodec:a}),!0);let h=await f;l.debug(yt,"init done:",{source:e,cost:performance.now()-u});let b=Math.ceil(t*i);let _=1e3/t;let x=0;let g=0;let y;let v=h.webContents.debugger;let M=h.webContents.mainFrame;let U=M.frames[0];try{h.webContents.setFrameRate(t),h.webContents.stopPainting(),await sr(v);for(let Y=0;Y<b;Y++){d?.throwIfAborted();let me=(Y+1)*_;await Qr(U,me),await ur(h.webContents,me,_);let Xe=await fi({source:e,win:h,size:{width:o,height:n},ms:me});if(w.encodeBGRA(Xe).catch(Ee=>y??=Ee),x++,y)throw y;let Pe=Math.floor(x/b*100);Math.abs(Pe-g)>10&&(g=Pe,p(g));}}finally{ee.closeAll(),await ce(h),await w.finish();}if(y)throw y;if(x===0)throw new Error("no frames captured");else return {written:x,jank:0,outFile:c}}catch(ue){var ye=ue,C=true;}finally{var pe=A(de,ye,C);pe&&await pe;}}var vi="[App]";function Jr(){l.debug(vi,"gpu features:",electron.app.getGPUFeatureStatus());}var Ke=new AbortController,Pt=false;qt();electron.Menu.setApplicationMenu(null);electron.app.dock?.hide();electron.app.on("window-all-closed",()=>{});electron.app.on("gpu-info-update",Jr);electron.app.on("before-quit",r=>!Pt&&r.preventDefault());electron.app.on("will-quit",r=>!Pt&&r.preventDefault());assert.ok(process.send,"ipc channel missing \u2014 spawn with stdio[3]='ipc'");process.once("disconnect",()=>Ke.abort("disconnect"));process.on("message",r=>{let e=r;e.type==="cancel"&&Ke.abort(e.reason);});Jt({name:"app",run:async(r,e)=>{let t=new Ce;try{await electron.app.whenReady(),lr(),nr(),Jr();for(let i of e.outFile.split(","))await promises.mkdir(path.dirname(i),{recursive:!0});let o=e.deterministic?Yr:zr;Ke.signal.throwIfAborted();let n=await Kr(()=>o({source:r,...e,signal:Ke.signal,onProgress:i=>t.writeProgress(i),onConsole:(i,s)=>t.writeConsole(i,s)}));await t.writeDone(n);}catch(o){let n=o,i=n.stack??n.message??String(o??"unknown error");await t.writeError(i);}finally{Pt=true,electron.app.exit();}}});//# sourceMappingURL=app.cjs.map
|
|
502
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL3RzdXBAOC41LjErOWRlMjgzOGRkMWU1ZjdmNS9ub2RlX21vZHVsZXMvdHN1cC9hc3NldHMvY2pzX3NoaW1zLmpzIiwiLi4vc3JjL2Jhc2UvZW52LnRzIiwiLi4vc3JjL2Jhc2UvcGFyc2VyLnRzIiwiLi4vc3JjL2Jhc2UvY29uc3RhbnRzLnRzIiwiLi4vc3JjL2Jhc2UvbG9nZ2luZy50cyIsIi4uL3NyYy9iYXNlL2NyYXNoLnRzIiwiLi4vc3JjL2Jhc2Uvbm9lcnIudHMiLCIuLi9zcmMvYmFzZS9wcm9jZXNzLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3NjaGVtYS50cyIsIi4uL3NyYy9jb21tb24udHMiLCIuLi9zcmMvcmVuZGVyZXIvaXBjLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3ZpZGVvL3BuZ19zdHJlYW0udHMiLCIuLi9zcmMvcmVuZGVyZXIvdmlkZW8vZGVjb2RlX3Nlc3Npb24udHMiLCIuLi9zcmMvcmVuZGVyZXIvdmlkZW8vZmZwcm9iZS50cyIsIi4uL3NyYy9yZW5kZXJlci92aWRlby9mcmFtZV9zZXJ2ZXIudHMiLCIuLi9zcmMvcmVuZGVyZXIvdmlkZW8vcHJvdG9jb2wudHMiLCIuLi9zcmMvYmFzZS90aW1pbmcudHMiLCIuLi9zcmMvYmFzZS9jZHAudHMiLCIuLi9zcmMvcmVuZGVyZXIvc3RlZ28udHMiLCIuLi9zcmMvcmVuZGVyZXIvcHJvdG9jb2wudHMiLCIuLi9zcmMvYmFzZS9saW1pdGVyLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9taXNjLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9jb2RlYy50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvYXVkaW8udHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL2hldmNfYWxwaGEvYml0LnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9oZXZjX2FscGhhL25hbC50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvaGV2Y19hbHBoYS9hbHBoYV9kYXJ3aW4udHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL2hldmNfYWxwaGEvdnBzLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9oZXZjX2FscGhhL2FscGhhLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9oZXZjX2FscGhhL2R1YWxfbGF5ZXJfbXV4LnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9oZXZjX2FscGhhL3BhcnNlci50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvaGV2Y19hbHBoYS9udmVuYy50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvdmlkZW8udHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL3ZpZGVvdG9vbGJveC50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvZmFjdG9yeS50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvbXV4ZXIudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL3NpbmsudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL3BpcGVsaW5lLnRzIiwiLi4vc3JjL2Jhc2UvZnJhbWVfZHJvcC50cyIsIi4uL3NyYy9iYXNlL2ltYWdlLnRzIiwiLi4vc3JjL3JlbmRlcmVyL2F1ZGlvLnRzIiwiLi4vc3JjL2Jhc2UvcmV0cnkudHMiLCIuLi9zcmMvcmVuZGVyZXIvaHRtbF9jaGVjay50cyIsIi4uL3NyYy9iYXNlL3dhaXRhYmxlX2V2ZW50LnRzIiwiLi4vc3JjL3JlbmRlcmVyL25ldHdvcmsudHMiLCIuLi9zcmMvcmVuZGVyZXIvd2luZG93LnRzIiwiLi4vc3JjL3JlbmRlcmVyL3JlbmRlci50cyIsIi4uL3NyYy9yZW5kZXJlci9yZXJlbmRlci50cyIsIi4uL3NyYy9yZW5kZXJlci92aWRlby9zaGltLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3RpY2sudHMiLCIuLi9zcmMvcmVuZGVyZXIvc2hvb3QudHMiLCIuLi9zcmMvYXBwLnRzIl0sIm5hbWVzIjpbImdldEltcG9ydE1ldGFVcmwiLCJpbXBvcnRNZXRhVXJsIiwicGVudiIsIm5hbWUiLCJwYXJzZXIiLCJkZWZhdWx0VmFsdWUiLCJwYXJzZU51bWJlciIsIngiLCJudW0iLCJyZXF1aXJlIiwiY3JlYXRlUmVxdWlyZSIsInB1cExvZ0xldmVsIiwicHVwUGtnUm9vdCIsImRpcm5hbWUiLCJqb2luIiwicHVwQXVkaW9QcmVsb2FkIiwiREVCVUciLCJJTkZPIiwiV0FSTiIsIkVSUk9SIiwiRkFUQUwiLCJzdGFja0hvb2siLCJ0YXJnZXQiLCJfY29udGV4dCIsIm1lc3NhZ2VzIiwicHJvY2Vzc2VkIiwibXNnIiwiX2ZhdGFsX2RlYyIsIl9lcnJvcl9kZWMiLCJfd2Fybl9kZWMiLCJfaW5mb19kZWMiLCJfZGVidWdfZGVjIiwiX2luaXQiLCJMb2dnZXIiLCJfbGV2ZWwiLCJfX3J1bkluaXRpYWxpemVycyIsIl9fcHVibGljRmllbGQiLCJ2YWx1ZSIsImRlYnVnIiwiaW5mbyIsIndhcm4iLCJlcnJvciIsImx2IiwibWVzc2FnZSIsInByb2MiLCJyZXNvbHZlIiwicmVqZWN0IiwiZmF0YWwiLCJkaXNwYXRjaCIsImRhdGEiLCJlcnIiLCJjb2RlIiwic2lnbmFsIiwicmVhc29uIiwiX19kZWNvcmF0b3JTdGFydCIsIl9fZGVjb3JhdGVFbGVtZW50IiwiX19kZWNvcmF0b3JNZXRhZGF0YSIsImxvZ2dlciIsIkxvZyIsImxldmVsIiwiQVZfTE9HX0VSUk9SIiwiQVZfTE9HX1dBUk5JTkciLCJUQUciLCJzdGFydEVsZWN0cm9uQ3Jhc2hSZXBvcnRlciIsImR1bXBEaXIiLCJhcHAiLCJta2RpclN5bmMiLCJjcmFzaFJlcG9ydGVyIiwibm9lcnIiLCJmbiIsImFyZ3MiLCJyZXQiLCJQVVBfQVJHU19LRVkiLCJwYXJncyIsImFyZ3YiLCJwcml2IiwiYXJnIiwiREVGQVVMVF9XSURUSCIsIkRFRkFVTFRfSEVJR0hUIiwiREVGQVVMVF9GUFMiLCJERUZBVUxUX0RVUkFUSU9OIiwiREVGQVVMVF9PVVRfRklMRSIsIlJlbmRlclNjaGVtYSIsInoiLCJkZWZhdWx0UmVuZGVyT3B0aW9ucyIsIm1ha2VDTEkiLCJvcHRpb25zIiwic2hhcGUiLCJkIiwicHJvZ3JhbSIsInNvdXJjZSIsIm9wdHMiLCJlIiwiSXBjV3JpdGVyIiwicGF5bG9hZCIsIlBOR19UQUlMIiwiUG5nU3RyZWFtUGFyc2VyIiwiY2h1bmsiLCJmcmFtZXMiLCJpZHgiLCJlbmQiLCJGRk1QRUciLCJmZm1wZWdQYXRoIiwiUklOR19NQVgiLCJSSU5HX0VWSUNUX0xPT0tCQUNLIiwiRk9SV0FSRF9XQUlUX01BWCIsIkZSQU1FX1dBSVRfVElNRU9VVF9NUyIsIkRlY29kZVNlc3Npb24iLCJtZXRhIiwic3JjIiwiZnJhbWVDb3VudCIsImlkeFJhdyIsImhpdCIsInRpbWVyIiwibG8iLCJoaSIsImsiLCJvdXQiLCJmcm9tSWR4Iiwic3NTZWMiLCJzcGF3biIsInciLCJmIiwid2FpdGVyIiwiUFJPQkVfVElNRU9VVF9NUyIsInByb2JlIiwic3RkZXJyIiwiYiIsImRpbSIsImR1ciIsIkZyYW1lU2VydmVyIiwiaWQiLCJyYW5kb21VVUlEIiwicyIsImZyYW1lU2VydmVyIiwiU0NIRU1FIiwiQ09SU19IRUFERVJTIiwic2V0dXBGcmFtZVByb3RvY29sIiwicHJvdG9jb2wiLCJyZXEiLCJ1cmwiLCJqc29uT2siLCJpbnQiLCJwbmdPayIsImJ5dGVzIiwiY29weSIsImJsb2IiLCJrZXkiLCJmYWxsYmFjayIsInYiLCJzbGVlcCIsIm1zIiwid2l0aFRpbWVvdXQiLCJwIiwibGFiZWwiLCJDRFBfVElNRU9VVF9NUyIsInNlbmQiLCJjZHAiLCJtZXRob2QiLCJwYXJhbXMiLCJldmFsSW4iLCJleHByZXNzaW9uIiwiYWR2YW5jZVZpcnR1YWxUaW1lIiwiYnVkZ2V0IiwidGltZW91dCIsImhhbmRsZXIiLCJfIiwicGF1c2VWaXJ0dWFsVGltZSIsInJlc2l6ZURyYXdhYmxlIiwic2l6ZSIsIkZSQU1FX1NZTkNfTUFSS0VSX1dJRFRIIiwiU1RFR09fVElDS19DSEFOTkVMIiwiYnVpbGRTdGVnb0hUTUwiLCJ0YXJnZXRVUkwiLCJ3aWR0aCIsImhlaWdodCIsImRlY29kZVN0ZWdvIiwiYml0bWFwIiwibWFya2VyUm93IiwidGltZXN0YW1wIiwiaSIsInBpeGVsSWR4IiwiYml0Iiwic3RhcnRTdGVnbyIsInN3YXBCdWZmZXIiLCJ3YyIsImV4cGVjdGVkIiwiaW50ZXJ2YWwiLCJzd2FwcGVkIiwiciIsIlBVUF9TQ0hFTUUiLCJGUkFNRV9TQ0hFTUUiLCJQUklWSUxFR0VEX1BSSVZJTEVHRVMiLCJzZXR1cFB1cFByb3RvY29sIiwiaHRtbCIsImNyZWF0ZVN0ZWdvVVJMIiwiQ29uY3VycmVuY3lMaW1pdGVyIiwibWF4Q29uY3VycmVuY3kiLCJrZWVwIiwiZW50cnkiLCJvcGVuVmlkZW9DdHgiLCJjdHgiLCJDb2RlY0NvbnRleHQiLCJSYXRpb25hbCIsIkFWX0NPREVDX0ZMQUdfR0xPQkFMX0hFQURFUiIsIkZGbXBlZ0Vycm9yIiwibWFrZUZyYW1lIiwicGl4Rm10IiwiZnJhbWUiLCJGcmFtZSIsIm1ha2VQYWNrZXQiLCJwa3QiLCJQYWNrZXQiLCJkcmFpblBhY2tldHMiLCJzdHJlYW0iLCJtdXhlciIsIkFWRVJST1JfRUFHQUlOIiwiQVZFUlJPUl9FT0YiLCJDb2RlY1N0YXRlIiwiX0NvZGVjU3RhdGUiLCJjb2RlYyIsIkNvZGVjIiwiRkZfREVDT0RFUl9QTkciLCJvayIsInBuZyIsIkFWX1BJWF9GTVRfQkdSQSIsIkFWX1BJWF9GTVRfWVVWQTQyMFAiLCJwbmdEYXRhIiwiX3N0YWNrIiwiX191c2luZyIsIl9lcnJvciIsIl9oYXNFcnJvciIsIl9fY2FsbERpc3Bvc2UiLCJzd3MiLCJTb2Z0d2FyZVNjYWxlQ29udGV4dCIsImZtdCIsIlNXU19CSUxJTkVBUiIsIlNBTVBMRV9GTVRfTkFNRSIsIkFWX1NBTVBMRV9GTVRfRkxUIiwiQVZfU0FNUExFX0ZNVF9GTFRQIiwiQXVkaW9FbmNvZGVyIiwiX0F1ZGlvRW5jb2RlciIsIm91dEZtdCIsIkFWX0NIQU5ORUxfTEFZT1VUX1NURVJFTyIsImluU2FtcGxlUmF0ZSIsImdyYXBoIiwiRmlsdGVyR3JhcGgiLCJhYnVmZmVyIiwiRmlsdGVyIiwiYnVmU3JjIiwiYWJ1ZmZlcnNpbmsiLCJidWZTaW5rIiwiZmlsdGVyRGVzYyIsIm91dHB1dHMiLCJGaWx0ZXJJbk91dCIsImlucHV0cyIsInBjbSIsIm5TYW1wbGVzIiwicGFja0JpdHMiLCJiaXRzIiwiYnVmIiwiYnl0ZSIsIkJpdFdyaXRlciIsInZhbCIsIm4iLCJsZW4iLCJwYWQiLCJzdGFydCIsIkJpdFJlYWRlciIsInplcm9zIiwiQU5ORVhfQl9TVEFSVF9DT0RFIiwiTkFMX0JMQV9XX0xQIiwiTkFMX1JTVl9JUkFQX1ZDTDIzIiwiTkFMX1ZQUyIsIk5BTF9TUFMiLCJOQUxfUFBTIiwiTkFMX1NFSV9QUkVGSVgiLCJwYXJzZU5hbFR5cGUiLCJoZWFkZXIwIiwiaGVhZGVyMSIsInR5cGUiLCJsYXllcklkIiwidGVtcG9yYWxJZCIsImVuY29kZU5hbEhlYWRlciIsImJ5dGUwIiwiYnl0ZTEiLCJzcGxpdE5hbFVuaXRzIiwiYml0c3RyZWFtIiwibmFscyIsInNjTGVuIiwibmFsU3RhcnQiLCJuYWxFbmQiLCJqIiwicmV3cml0ZU5hbExheWVySWQiLCJuYWwiLCJiMCIsImIxIiwicmVtb3ZlRW11bGF0aW9uUHJldmVudGlvbiIsImFkZEVtdWxhdGlvblByZXZlbnRpb24iLCJWUFNfUFRMX0JJVCIsIlNQU19QVExfQklUIiwiUFRMX1RJRVJfQklUIiwiUFRMX0NPTVBBVDJfQklUIiwiU0xJQ0VfVFlQRV9CIiwiU0xJQ0VfVFlQRV9QIiwic2V0Qml0IiwiYml0T2Zmc2V0IiwibWFzayIsImN1ciIsInBhdGNoUHRsIiwibmFsRGF0YSIsInB0bFN0YXJ0Qml0IiwicmJzcCIsInBhdGNoSGV2Y0FscGhhUHRsIiwiY2h1bmtzIiwicmV3cml0ZU9uZVVlIiwibmFsSW4iLCJuZXdWYWwiLCJiciIsImJ3IiwicmV3cml0ZVR3b1VlIiwibmV3VmFsMSIsIm5ld1ZhbDIiLCJyZXdyaXRlQWxwaGFTcHMiLCJzcHMiLCJTUFNfU0VRX0lEX0JJVCIsInJld3JpdGVBbHBoYVBwcyIsInBwcyIsInJlYWRTZSIsInVlIiwicGFyc2VJbmxpbmVTdFJlZlBpY1NldCIsIm51bURlbHRhUG9jc1NldDAiLCJkZWx0YUlkeE1pbnVzMSIsIm51bU5lZyIsIm51bVBvcyIsInBhcnNlSGVhZGVyVG9BbGlnbm1lbnQiLCJuYWxUeXBlIiwiY2ZnIiwiaXNJcmFwIiwic2xpY2VUeXBlIiwicmV3cml0ZUFscGhhU2xpY2VIZWFkZXIiLCJzbGljZSIsIkIiLCJvbGRBbGlnbkJpdHMiLCJzbGljZURhdGFCeXRlT2Zmc2V0IiwiZXh0cmFjdFBUTCIsInZwc0RhdGEiLCJtYXhTdWJMYXllcnNNaW51czEiLCJwdGxTdGFydCIsIndyaXRlQmFzZVZQUyIsInB0bCIsIndyaXRlVlBTRXh0ZW5zaW9uIiwiYnVpbGRBbHBoYVZQUyIsImV4dHJhY3RBbHBoYVRvWXV2NDIwcEJ1ZmZlciIsImJncmFGcmFtZSIsInNyY0xzIiwiaCIsInlTaXplIiwic3JjMzIiLCJ5Iiwicm93QmFzZSIsImRzdEJhc2UiLCJyZXdyaXRlQWxwaGFQYXJhbVNldCIsImJ1aWxkVW5pZmllZEV4dHJhZGF0YSIsImJhc2VFeHRyYWRhdGEiLCJhbHBoYUV4dHJhZGF0YSIsImJhc2VOYWxzIiwiYWxwaGFOYWxzIiwiYWxwaGFCeVR5cGUiLCJhcnIiLCJlbWl0dGVkIiwiYWxwaGFOYWwiLCJhRGF0YSIsImJ1aWxkQWxwaGFDaGFubmVsSW5mb1NFSSIsImgwIiwiaDEiLCJ3cml0ZUJpdHMiLCJpbnRlcmxlYXZlQWNjZXNzVW5pdHMiLCJEdWFsTGF5ZXJNdXgiLCJiYXNlQ3R4IiwiYWxwaGFDdHgiLCJiYXNlUGt0IiwiYWxwaGFQa3QiLCJ0YWciLCJiYXNlIiwiYWxwaGEiLCJoZXZjQ2ZnIiwiaW50ZXJsZWF2ZWQiLCJmYWlsIiwiZmllbGQiLCJnb3QiLCJza2lwUHRsIiwibWF4U3ViTGF5ZXJzIiwic3ViUHJvZmlsZVByZXNlbnQiLCJzdWJMZXZlbFByZXNlbnQiLCJwYXJzZVNwcyIsInNwc1Jic3AiLCJjaHJvbWFGb3JtYXQiLCJsb2cyTWF4UG9jTHNiIiwib3JkZXJDb3VudCIsInNhb0VuYWJsZWQiLCJudW1TdFJwcyIsImxvbmdUZXJtUmVmUGljc1ByZXNlbnQiLCJzcHNUZW1wb3JhbE12cEVuYWJsZWQiLCJwYXJzZVBwcyIsInBwc1Jic3AiLCJudW1FeHRyYVNsaWNlSGVhZGVyQml0cyIsImNhYmFjSW5pdFByZXNlbnQiLCJwcHNMb29wRmlsdGVyQWNyb3NzU2xpY2VzRW5hYmxlZCIsImRlYmxvY2tpbmdDb250cm9sUHJlc2VudCIsInNsaWNlRGVibG9ja2luZ0Rpc2FibGVkT3ZlcnJpZGUiLCJwYXJzZU52ZW5jSGV2Y0NvbmZpZyIsImV4dHJhZGF0YSIsIk52ZW5jRHVhbExheWVyRW5jb2RlciIsIl9OdmVuY0R1YWxMYXllckVuY29kZXIiLCJmcHMiLCJiaXRyYXRlIiwiRkZfRU5DT0RFUl9IRVZDX05WRU5DIiwiY29tbW9uIiwiYWxwaGFTd0ZyYW1lIiwiQVZfUElYX0ZNVF9ZVVY0MjBQIiwidW5pZmllZCIsImNocm9tYVNpemUiLCJhbHBoYUJ1ZiIsInB0cyIsImRlc3luYyIsIlZpZGVvRW5jb2RlciIsIl9WaWRlb0VuY29kZXIiLCJjb2RlY05hbWUiLCJjb2RlY1RhZyIsImNvZGVjT3B0cyIsInJlc3QiLCJWaWRlb1Rvb2xib3hFbmNvZGVyIiwiX1ZpZGVvVG9vbGJveEVuY29kZXIiLCJodyIsIkFWQ09MX1JBTkdFX0pQRUciLCJjcmVhdGVId1ZpZGVvRW5jb2RlciIsImRpc2FibGVId0NvZGVjIiwic2hhcmVkSHciLCJIYXJkd2FyZUNvbnRleHQiLCJvd25zSHciLCJGRl9IV0RFVklDRV9UWVBFX1ZJREVPVE9PTEJPWCIsIkZGX0hXREVWSUNFX1RZUEVfQ1VEQSIsIkZGX0VOQ09ERVJfTElCWDI2NSIsIkZvcm1hdE11eGVyIiwib3V0UGF0aCIsImZvcm1hdE5hbWUiLCJGb3JtYXRDb250ZXh0IiwiY29kZWNDdHgiLCJGRl9FTkNPREVSX0xJQlZQWF9WUDkiLCJPdXRwdXRTaW5rIiwiX091dHB1dFNpbmsiLCJwYXRoIiwibG93ZXIiLCJ2aWRlbyIsImF1ZGlvIiwiRkZfRU5DT0RFUl9BQUMiLCJGRl9FTkNPREVSX0xJQk9QVVMiLCJzYW1wbGVSYXRlIiwiaHdWaWRlbyIsIkVuY29kZXJQaXBlbGluZSIsIl9FbmNvZGVyUGlwZWxpbmUiLCJvdXRGaWxlIiwid2l0aEF1ZGlvIiwib3V0RmlsZXMiLCJraW5kcyIsImlzSHdBbHBoYUNhcGFibGUiLCJzaW5rcyIsInNpbmsiLCJpbnB1dCIsIkZyYW1lRHJvcFN0YXRzIiwiY291bnQiLCJ0b3RhbERyb3BwZWQiLCJsb2NhbFN1bSIsIm1heEJ1cnN0IiwiYnVyc3QiLCJwZXJjZXB0aWJsZSIsImciLCJsIiwic2NvcmUiLCJzaXplRXF1YWxzIiwiYSIsIkFVRElPX01FVEFfQ0hBTk5FTCIsIkFVRElPX0NIVU5LX0NIQU5ORUwiLCJhdHRhY2hBdWRpb0xpc3RlbmVycyIsImVuY29kZXIiLCJnZXRWaWRlb1RpbWVNcyIsIm9uRXJyb3IiLCJvbk1ldGEiLCJfZSIsInN0YXJ0TXMiLCJzaWxlbmNlU2FtcGxlcyIsIm9uQ2h1bmsiLCJidWZmZXIiLCJ1c2VSZXRyeSIsIm1heEF0dGVtcHRzIiwidGltZW91dEVycm9yIiwiYXR0ZW1wdCIsInByb21pc2VzIiwic2V0VGltZW91dCIsIlNVUFBPUlRFRF9QUk9UT0NPTFMiLCJTT1VSQ0VfUEFUVEVSTiIsImNoZWNrSFRNTCIsIldhaXRhYmxlRXZlbnQiLCJtYXAiLCJwcm94aWVkVXJsIiwicGFyc2VkIiwiVVJMIiwic2V0SW50ZXJjZXB0b3IiLCJ3aW5kb3ciLCJ1c2VJbm5lclByb3h5IiwibGltaXRlciIsImV2ZW50cyIsIndhaXQiLCJvblRpbWVvdXQiLCJldmVudCIsImRldGFpbHMiLCJjYWxsYmFjayIsInByb3hpZWQiLCJyZXNwb25zZUhlYWRlcnMiLCJ1bnNldEludGVyY2VwdG9yIiwiVElNRU9VVF9FUlJPUiIsIndhaXRGb3JGaW5pc2giLCJ3aW4iLCJhY3Rpb24iLCJ0b2xlcmFudCIsImRvbmUiLCJkZXNjIiwiZXhpdENvZGUiLCJkaXNwb3NlV2luZG93Iiwib3BlbldpbmRvdyIsInJlbmRlcmVyIiwicHJlbG9hZCIsIm9uQ3JlYXRlZCIsIkJyb3dzZXJXaW5kb3ciLCJsaW5lTnVtYmVyIiwic291cmNlSWQiLCJtc2dzIiwib3BlbldpbmRvd1dpdGhSZXRyeSIsImxvYWRXaW5kb3ciLCJ3YXJtdXAiLCJvcGVuIiwic3RhY2siLCJyZW5kZXIiLCJkdXJhdGlvbiIsIm9uUHJvZ3Jlc3MiLCJ0b3RhbCIsImZyYW1lSW50ZXJ2YWwiLCJmcmFtZVNpemUiLCJ3cml0dGVuIiwibGFzdFdyaXR0ZW5UaW1lIiwicHJvZ3Jlc3MiLCJlbmNvZGVFcnJvciIsInJlc29sdmVyIiwicmVqZWN0ZXIiLCJkcm9wU3RhdHMiLCJkaXNwb3NlQXVkaW8iLCJzY2hlZHVsZUZyYW1lIiwicGFpbnQiLCJfciIsImltYWdlIiwiaW1hZ2VTaXplIiwiY3VycmVudFRpbWUiLCJjcm9wcGVkIiwidGltZURlbHRhIiwiZnJhbWVzVG9JbnNlcnQiLCJuZXdQcm9ncmVzcyIsImR1cmF0aW9uTXMiLCJsYXN0V3JpdHRlbiIsInN0dWNrIiwiZHJvcFNjb3JlIiwiX3Byb21pc2UiLCJNQVhfUkVOREVSX0FUVEVNUFRTIiwid2l0aFJlcmVuZGVyIiwibGFzdEVyciIsIlZJREVPX1NZTUJPTCIsIkhPT0siLCJBRFZBTkNFX1RJTUVPVVRfTVMiLCJhZHZhbmNlVmlkZW9zIiwidGltZXN0YW1wTXMiLCJldiIsIlRJQ0tfU1lNQk9MIiwidGljayIsInRpY2tFdiIsImxhc3RUcyIsImxhZ2d5IiwiX2QiLCJ0cyIsInNob290IiwidEluaXQiLCJ3aW5QIiwicGlwZWxpbmUiLCJtYWluIiwiaWZyYW1lIiwiZnJhbWVNcyIsInByaW50RmVhdHVyZXMiLCJjdHJsIiwiZXhpdGluZyIsIk1lbnUiLCJyYXciLCJpcGMiLCJta2RpciIsInJlc3VsdCIsIm0iXSwibWFwcGluZ3MiOiJpb0JBS0EsSUFBQSxFQUFBLENBQUEsTUFBQSxDQUFBLE1BQUEsQ0FBQSxJQUFBLEVBQUEsQ0FBQSxNQUFBLENBQUEsY0FBQSxDQUFBLElBQUEsRUFBQSxDQUFBLE1BQUEsQ0FBQSx3QkFBQSxDQUFBLElBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsR0FBQSxDQUFBLENBQUEsQ0FBQSxNQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLE1BQUEsQ0FBQSxHQUFBLENBQUEsU0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxNQUFBLFNBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLElBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEdBQUEsQ0FBQSxJQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLFVBQUEsQ0FBQSxJQUFBLENBQUEsWUFBQSxDQUFBLElBQUEsQ0FBQSxRQUFBLENBQUEsSUFBQSxDQUFBLEtBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsSUFBQSxFQUFBLENBQUEsQ0FBQSxFQUFBLElBQUEsRUFBQSxDQUFBLElBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsT0FBQSxDQUFBLFFBQUEsQ0FBQSxRQUFBLENBQUEsUUFBQSxDQUFBLFVBQUEsQ0FBQSxPQUFBLENBQUEsT0FBQSxDQUFBLEtBQUEsQ0FBQSxLQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsR0FBQSxNQUFBLEVBQUEsT0FBQSxDQUFBLEVBQUEsVUFBQSxDQUFBLENBQUEsQ0FBQSxtQkFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLElBQUEsQ0FBQSxJQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLElBQUEsQ0FBQSxDQUFBLENBQUEsUUFBQSxDQUFBLENBQUEsQ0FBQSxjQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLHFCQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsSUFBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLEVBQUEsSUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsR0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxVQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEdBQUEsQ0FBQSxJQUFBLElBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxNQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsSUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLE9BQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEdBQUEsQ0FBQSxJQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsS0FBQSxDQUFBLENBQUEsQ0FBQSxLQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxHQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsU0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxJQUFBLElBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxNQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLE1BQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLE9BQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxNQUFBLENBQUEsQ0FBQSxHQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsSUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxHQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsSUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsR0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsT0FBQSxDQUFBLEVBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEdBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLElBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEdBQUEsQ0FBQSxHQUFBLENBQUEsRUFBQSxJQUFBLENBQUEsQ0FBQSxPQUFBLENBQUEsRUFBQSxRQUFBLEVBQUEsT0FBQSxDQUFBLEVBQUEsVUFBQSxFQUFBLENBQUEsQ0FBQSxpQkFBQSxDQUFBLENBQUEsSUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsR0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxjQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxHQUFBLE1BQUEsR0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxTQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsR0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxPQUFBLENBQUEsRUFBQSxVQUFBLEVBQUEsQ0FBQSxDQUFBLHVCQUFBLENBQUEsQ0FBQSxDQUFBLEdBQUEsQ0FBQSxDQUFBLFVBQUEsQ0FBQSxHQUFBLENBQUEsQ0FBQSxDQUFBLElBQUEsQ0FBQSxJQUFBLEVBQUEsQ0FBQSxNQUFBLENBQUEsQ0FBQSxDQUFBLE9BQUEsT0FBQSxDQUFBLE1BQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsSUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLEtBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxJQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLE9BQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEdBQUEsQ0FBQSxJQUFBLENBQUEsQ0FBQSxPQUFBLGVBQUEsRUFBQSxVQUFBLENBQUEsZUFBQSxDQUFBLFNBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsT0FBQSxDQUFBLENBQUEsS0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxJQUFBLENBQUEsaUJBQUEsQ0FBQSxDQUFBLENBQUEsS0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsVUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsSUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSx5Q0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLElBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsS0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEdBQUEsRUFBQSxFQUFBLEdBQUEsQ0FBQSxJQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLElBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxHQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxPQUFBLE9BQUEsQ0FBQSxPQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsSUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEdBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxNQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxHQUFBLENBQUEsQ0FBQSxNQUFBLENBQUEsQ0FBQSxDQUFBLE9BQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxJQUFNQSxFQUFBQSxDQUFtQixJQUN2QixPQUFPLFFBQUEsQ0FBYSxHQUFBLENBQ2hCLElBQUksR0FBQSxDQUFJLENBQUEsS0FBQSxFQUFRLFVBQVUsQ0FBQSxDQUFFLENBQUEsQ0FBRSxJQUFBLENBQzdCLFFBQUEsQ0FBUyxhQUFBLEVBQWlCLFFBQUEsQ0FBUyxhQUFBLENBQWMsT0FBQSxDQUFRLFdBQUEsRUFBWSxHQUFNLFFBQUEsQ0FDMUUsUUFBQSxDQUFTLGFBQUEsQ0FBYyxHQUFBLENBQ3ZCLElBQUksR0FBQSxDQUFJLFNBQUEsQ0FBVyxRQUFBLENBQVMsT0FBTyxDQUFBLENBQUUsSUFBQSxDQUVoQ0MsQ0FBQUEsQ0FBZ0NELEVBQUFBLEVBQWlCLENDTnZELFNBQVNFLEVBQUFBLENBQVFDLENBQUFBLENBQWNDLENBQUFBLENBQXNCQyxDQUFBQSxDQUFpQyxDQUMzRixHQUFJLENBQ0YsT0FBT0QsQ0FBQUEsQ0FBTyxPQUFBLENBQVEsR0FBQSxDQUFJRCxDQUFJLENBQUMsQ0FDakMsQ0FBQSxLQUFRLENBQ04sT0FBT0UsQ0FDVCxDQUNGLENDVk8sU0FBU0MsQ0FBQUEsQ0FBWUMsQ0FBQUEsQ0FBb0IsQ0FDOUMsR0FBSSxPQUFPQSxDQUFBQSxFQUFNLFFBQUEsQ0FDZixPQUFPQSxDQUFBQSxDQUVULElBQU1DLENBQUFBLENBQU0sTUFBQSxDQUFPRCxDQUFDLENBQUEsQ0FDcEIsR0FBSSxNQUFBLENBQU8sS0FBQSxDQUFNQyxDQUFHLENBQUEsQ0FDbEIsTUFBTSxJQUFJLEtBQUEsQ0FBTSxDQUFBLE1BQUEsRUFBU0QsQ0FBQyxDQUFBLHNCQUFBLENBQXdCLENBQUEsQ0FFcEQsT0FBT0MsQ0FDVCxDQ0pBLElBQU1DLEVBQUFBLENBQVVDLHNCQUFBQSxDQUFjVCxDQUFlLENBQUEsQ0FFaENVLEVBQUFBLENBQWNULEVBQUFBLENBQUssZUFBQSxDQUFpQkksQ0FBQUEsQ0FBYSxDQUFDLENBQUEsQ0FFbERNLEVBQUFBLENBQWFDLFlBQUFBLENBQVFKLEVBQUFBLENBQVEsT0FBQSxDQUFRLDJCQUEyQixDQUFDLENBQUEsQ0FDeERLLFNBQUFBLENBQUtGLEVBQUFBLENBQVksTUFBQSxDQUFRLFNBQVMsQ0FBQSxLQUMzQ0csRUFBQUEsQ0FBa0JELFNBQUFBLENBQUtGLEVBQUFBLENBQVksTUFBQSxDQUFRLG1CQUFtQixFQ0kzRSxJQUFNSSxFQUFBQSxDQUFRLGFBQUEsQ0FDUkMsRUFBQUEsQ0FBTyxZQUFBLENBQ1BDLEVBQUFBLENBQU8sWUFBQSxDQUNQQyxFQUFBQSxDQUFRLGFBQUEsQ0FDUkMsRUFBQUEsQ0FBUSxhQUFBLENBRWQsU0FBU0MsRUFBQUEsQ0FBVUMsQ0FBQUEsQ0FBa0JDLENBQUFBLENBQXVDLENBQzFFLE9BQU8sU0FBQSxHQUEyQkMsQ0FBQUEsQ0FBcUIsQ0FDckQsSUFBTUMsQ0FBQUEsQ0FBWUQsQ0FBQUEsQ0FBUyxHQUFBLENBQUtFLENBQUFBLEVBQ3ZCQSxDQUFBQSxZQUFlLEtBQUEsQ0FBU0EsQ0FBQUEsQ0FBSSxLQUFBLEVBQVMsTUFBQSxDQUFPQSxDQUFHLENBQUEsQ0FBS0EsQ0FDNUQsQ0FBQSxDQUNELE9BQU9KLENBQUFBLENBQU8sSUFBQSxDQUFLLElBQUEsQ0FBTSxHQUFHRyxDQUFTLENBQ3ZDLENBQ0YsQ0E5QkEsSUFBQUUsRUFBQUEsQ0FBQUMsRUFBQUEsQ0FBQUMsRUFBQUEsQ0FBQUMsRUFBQUEsQ0FBQUMsRUFBQUEsQ0FBQUMsQ0FBQUEsQ0FrRUVELEVBQUFBLENBQUEsQ0FBQ1YsRUFBQUEsQ0FBQUEsQ0FLRFMsRUFBQUEsQ0FBQSxDQUFDVCxFQUFBQSxDQUFBQSxDQUtEUSxFQUFBQSxDQUFBLENBQUNSLEVBQUFBLENBQUFBLENBS0RPLEVBQUFBLENBQUEsQ0FBQ1AsRUFBQUEsQ0FBQUEsQ0FLRE0sRUFBQUEsQ0FBQSxDQUFDTixFQUFBQSxDQUFBQSxDQXRESSxJQUFNWSxDQUFBQSxDQUFOLEtBQW1DLENBOEJ4QyxXQUFBLENBQW9CQyxDQUFBQSxDQUFpQnZCLEVBQUFBLENBQWEsQ0FBOUIsSUFBQSxDQUFBLE1BQUEsQ0FBQXVCLENBQUFBLENBOUJmQyxFQUFBQSxDQUFBSCxDQUFBQSxDQUFBLENBQUEsQ0FBQSxJQUFBLENBQUEsQ0FDTEksRUFBQUEsQ0FBQSxJQUFBLENBQVEsT0FBQSxDQUFBLENBOEJOLElBQUEsQ0FBSyxJQUFBLENBQU8sUUFDZCxDQUZvQixNQUFBLENBM0JwQixJQUFJLEtBQUEsRUFBZ0IsQ0FDbEIsT0FBTyxJQUFBLENBQUssTUFDZCxDQUVBLElBQUksS0FBQSxDQUFNQyxDQUFBQSxDQUFlLENBQ3ZCLElBQUEsQ0FBSyxNQUFBLENBQVNBLENBQUFBLENBQ2QsSUFBQSxDQUFLLElBQUEsQ0FBTyxJQUFBLENBQUssS0FBQSxFQUFTLFFBQzVCLENBRUEsSUFBSSxJQUFBLEVBQStCLENBQ2pDLE9BQU8sSUFBQSxDQUFLLEtBQ2QsQ0FFQSxJQUFJLElBQUEsQ0FBS0EsQ0FBQUEsQ0FBbUIsQ0FDMUIsSUFBTUMsQ0FBQUEsQ0FBUUQsQ0FBQUEsQ0FBTSxLQUFBLEVBQVMsT0FBQSxDQUFRLEtBQUEsQ0FDL0JFLENBQUFBLENBQU9GLENBQUFBLENBQU0sSUFBQSxFQUFRLE9BQUEsQ0FBUSxJQUFBLENBQzdCRyxDQUFBQSxDQUFPSCxDQUFBQSxDQUFNLElBQUEsRUFBUSxPQUFBLENBQVEsSUFBQSxDQUM3QkksQ0FBQUEsQ0FBUUosQ0FBQUEsQ0FBTSxLQUFBLEVBQVMsT0FBQSxDQUFRLEtBQUEsQ0FDL0JLLENBQUFBLENBQUssSUFBQSxDQUFLLE1BQUEsQ0FDaEIsSUFBQSxDQUFLLEtBQUEsQ0FBUSxDQUNYLEtBQUEsQ0FBT0EsQ0FBQUEsRUFBTSxDQUFBLENBQUlKLENBQUFBLENBQVEsTUFBQSxDQUN6QixJQUFBLENBQU1JLENBQUFBLEVBQU0sQ0FBQSxDQUFJSCxDQUFBQSxDQUFPLE1BQUEsQ0FDdkIsSUFBQSxDQUFNRyxDQUFBQSxFQUFNLENBQUEsQ0FBSUYsQ0FBQUEsQ0FBTyxNQUFBLENBQ3ZCLEtBQUEsQ0FBT0UsQ0FBQUEsRUFBTSxDQUFBLENBQUlELENBQUFBLENBQVEsTUFDM0IsRUFDRixDQU9BLEtBQUEsQ0FBQSxHQUFTakIsQ0FBQUEsQ0FBMkIsQ0FDbEMsSUFBQSxDQUFLLElBQUEsRUFBTSxLQUFBLEdBQVFSLEVBQUFBLENBQU8sR0FBR1EsQ0FBUSxFQUN2QyxDQUdBLElBQUEsQ0FBQSxHQUFRQSxDQUFBQSxDQUEyQixDQUNqQyxJQUFBLENBQUssSUFBQSxFQUFNLElBQUEsR0FBT1AsRUFBQUEsQ0FBTSxHQUFHTyxDQUFRLEVBQ3JDLENBR0EsSUFBQSxDQUFBLEdBQVFBLENBQUFBLENBQTJCLENBQ2pDLElBQUEsQ0FBSyxJQUFBLEVBQU0sSUFBQSxHQUFPTixFQUFBQSxDQUFNLEdBQUdNLENBQVEsRUFDckMsQ0FHQSxLQUFBLENBQUEsR0FBU0EsQ0FBQUEsQ0FBMkIsQ0FDbEMsSUFBQSxDQUFLLElBQUEsRUFBTSxLQUFBLEdBQVFMLEVBQUFBLENBQU8sR0FBR0ssQ0FBUSxFQUN2QyxDQUdBLEtBQUEsQ0FBQSxHQUFTQSxDQUFBQSxDQUEyQixDQUNsQyxJQUFBLENBQUssSUFBQSxFQUFNLEtBQUEsR0FBUUosRUFBQUEsQ0FBTyxHQUFHSSxDQUFRLENBQUEsQ0FDckMsT0FBQSxDQUFRLElBQUEsQ0FBSyxDQUFDLEVBQ2hCLENBRVEsUUFBQSxDQUFTbUIsQ0FBQUEsQ0FBaUIsQ0FDaEMsSUFBTWpCLENBQUFBLENBQU1pQixDQUFBQSxDQUFRLE9BQUEsRUFBUSxDQUN4QmpCLENBQUFBLENBQUksVUFBQSxDQUFXVixFQUFLLENBQUEsQ0FDdEIsSUFBQSxDQUFLLEtBQUEsQ0FBTVUsQ0FBQUEsQ0FBSSxLQUFBLENBQU1WLEVBQUFBLENBQU0sTUFBQSxDQUFTLENBQUMsQ0FBQyxDQUFBLENBQzdCVSxDQUFBQSxDQUFJLFVBQUEsQ0FBV1QsRUFBSSxDQUFBLENBQzVCLElBQUEsQ0FBSyxJQUFBLENBQUtTLENBQUFBLENBQUksS0FBQSxDQUFNVCxFQUFBQSxDQUFLLE1BQUEsQ0FBUyxDQUFDLENBQUMsQ0FBQSxDQUMzQlMsQ0FBQUEsQ0FBSSxVQUFBLENBQVdSLEVBQUksQ0FBQSxDQUM1QixJQUFBLENBQUssSUFBQSxDQUFLUSxDQUFBQSxDQUFJLEtBQUEsQ0FBTVIsRUFBQUEsQ0FBSyxNQUFBLENBQVMsQ0FBQyxDQUFDLENBQUEsQ0FDM0JRLENBQUFBLENBQUksVUFBQSxDQUFXUCxFQUFLLENBQUEsQ0FDN0IsSUFBQSxDQUFLLEtBQUEsQ0FBTU8sQ0FBQUEsQ0FBSSxLQUFBLENBQU1QLEVBQUFBLENBQU0sTUFBQSxDQUFTLENBQUMsQ0FBQyxDQUFBLENBRXRDLElBQUEsQ0FBSyxJQUFBLENBQUtPLENBQUcsRUFFakIsQ0FFQSxNQUFBLENBQU9rQixDQUFBQSxDQUFvQnpDLENBQUFBLENBQWMsQ0FDdkMsT0FBTyxJQUFJLE9BQUEsQ0FBYyxDQUFDMEMsQ0FBQUEsQ0FBU0MsQ0FBQUEsR0FBVyxDQUM1QyxJQUFBLENBQUssS0FBQSxDQUFNLENBQUEsRUFBRzNDLENBQUksQ0FBQSxPQUFBLENBQVMsQ0FBQSxDQUMzQixJQUFJNEMsQ0FBQUEsQ0FBZ0IsRUFBQSxDQUNkQyxDQUFBQSxDQUFZQyxDQUFBQSxFQUFpQixDQUNqQyxJQUFNTixDQUFBQSxDQUFVTSxDQUFBQSxDQUFLLFFBQUEsRUFBUyxDQUMxQk4sQ0FBQUEsQ0FBUSxVQUFBLENBQVd2QixFQUFLLENBQUEsQ0FDMUIyQixDQUFBQSxFQUFTSixDQUFBQSxDQUFRLEtBQUEsQ0FBTXZCLEVBQUFBLENBQU0sTUFBQSxDQUFTLENBQUMsQ0FBQSxDQUV2QyxJQUFBLENBQUssUUFBQSxDQUFTdUIsQ0FBTyxFQUV6QixDQUFBLENBQ0FDLENBQUFBLENBQUssTUFBQSxFQUFRLEVBQUEsQ0FBRyxNQUFBLENBQVFJLENBQVEsQ0FBQSxDQUNoQ0osQ0FBQUEsQ0FBSyxNQUFBLEVBQVEsRUFBQSxDQUFHLE9BQVFJLENBQVEsQ0FBQSxDQUNoQ0osQ0FBQUEsQ0FDRyxFQUFBLENBQUcsT0FBQSxDQUFVTSxDQUFBQSxFQUFRLENBQ3BCSCxDQUFBQSxFQUFTRyxDQUFBQSxDQUFJLE9BQUEsQ0FDYk4sQ0FBQUEsQ0FBSyxJQUFBLEdBQ1AsQ0FBQyxDQUFBLENBQ0EsSUFBQSxDQUFLLE9BQUEsQ0FBUyxDQUFDTyxDQUFBQSxDQUFNQyxDQUFBQSxHQUFXLENBQzNCRCxDQUFBQSxFQUFRQyxDQUFBQSxFQUFVTCxDQUFBQSxFQUNwQkEsQ0FBQUEsR0FBVSxDQUFBLGdCQUFBLEVBQW1CSCxDQUFBQSxDQUFLLFNBQUEsQ0FBVSxJQUFBLENBQUssR0FBRyxDQUFDLENBQUEsQ0FBQSxDQUNyRCxJQUFBLENBQUssS0FBQSxDQUFNLENBQUEsRUFBR3pDLENBQUksQ0FBQSxNQUFBLENBQUEsQ0FBVSxDQUFFLElBQUEsQ0FBQWdELENBQUFBLENBQU0sTUFBQSxDQUFBQyxDQUFBQSxDQUFRLEtBQUEsQ0FBQUwsQ0FBTSxDQUFDLENBQUEsQ0FDbkRELENBQUFBLENBQU8sSUFBSSxLQUFBLENBQU1DLENBQUssQ0FBQyxDQUFBLEdBRXZCLElBQUEsQ0FBSyxLQUFBLENBQU0sQ0FBQSxFQUFHNUMsQ0FBSSxDQUFBLE1BQUEsQ0FBUSxDQUFBLENBQzFCMEMsQ0FBQUEsRUFBUSxFQUVaLENBQUMsQ0FBQSxDQUNBLEVBQUEsQ0FBRyxvQkFBQSxDQUF1QlEsQ0FBQUEsRUFBVyxDQUNwQyxJQUFBLENBQUssS0FBQSxDQUFNLENBQUEsRUFBR2xELENBQUksQ0FBQSxVQUFBLENBQUEsQ0FBY2tELENBQU0sRUFDeEMsQ0FBQyxDQUFBLENBQ0EsRUFBQSxDQUFHLDBCQUFBLENBQTZCSCxDQUFBQSxFQUFRLENBQ3ZDLElBQUEsQ0FBSyxLQUFBLENBQU0sQ0FBQSxFQUFHL0MsQ0FBSSxDQUFBLFVBQUEsQ0FBQSxDQUFjK0MsQ0FBRyxFQUNyQyxDQUFDLEVBQ0wsQ0FBQyxDQUNILENBQ0YsQ0FBQSxDQWhIT2xCLENBQUFBLENBQUFzQixFQUFBQSxDQUFBLENBQUEsQ0FtQ0xDLENBQUFBLENBQUF2QixDQUFBQSxDQUFBLENBQUEsQ0FBQSxPQUFBLENBREFELEVBQUFBLENBbENXRSxDQUFBQSxDQUFBQSxDQXdDWHNCLENBQUFBLENBQUF2QixDQUFBQSxDQUFBLENBQUEsQ0FBQSxNQUFBLENBREFGLEVBQUFBLENBdkNXRyxDQUFBQSxDQUFBQSxDQTZDWHNCLENBQUFBLENBQUF2QixDQUFBQSxDQUFBLENBQUEsQ0FBQSxNQUFBLENBREFILEVBQUFBLENBNUNXSSxDQUFBQSxDQUFBQSxDQWtEWHNCLENBQUFBLENBQUF2QixDQUFBQSxDQUFBLENBQUEsQ0FBQSxPQUFBLENBREFKLEVBQUFBLENBakRXSyxDQUFBQSxDQUFBQSxDQXVEWHNCLENBQUFBLENBQUF2QixDQUFBQSxDQUFBLENBQUEsQ0FBQSxPQUFBLENBREFMLEVBQUFBLENBdERXTSxDQUFBQSxDQUFBQSxDQUFOdUIsRUFBQUEsQ0FBQXhCLENBQUFBLENBQU1DLENBQUFBLENBQUFBLENBa0hiLElBQU13QixDQUFBQSxDQUFTLElBQUl4QixDQUFBQSxDQUduQnlCLFVBQUFBLENBQUksV0FBQSxDQUFZLENBQUNDLENBQUFBLENBQU9oQixDQUFBQSxHQUFZLENBQ2xDLElBQU1qQixDQUFBQSxDQUFNaUIsQ0FBQUEsQ0FBUSxPQUFBLEVBQVEsQ0FDdkJqQixDQUFBQSxHQUNEaUMsQ0FBQUEsRUFBU0Msc0JBQUFBLENBQWNILENBQUFBLENBQU8sS0FBQSxDQUFNL0IsQ0FBRyxDQUFBLENBQ2xDaUMsQ0FBQUEsRUFBU0Usd0JBQUFBLEVBQWdCSixDQUFBQSxDQUFPLElBQUEsQ0FBSy9CLENBQUcsQ0FBQSxFQUNuRCxDQUFDLENBQUEsQ0NuSkQsSUFBTW9DLEVBQUFBLENBQU0sU0FBQSxDQUVMLFNBQVNDLEVBQUFBLEVBQTZCLENBQzNDLElBQU1DLENBQUFBLENBQVVsRCxTQUFBQSxDQUFLbUQsWUFBQUEsQ0FBSSxPQUFBLENBQVEsVUFBVSxDQUFBLENBQUcsU0FBUyxDQUFBLENBQ3ZEQyxZQUFBQSxDQUFVRixDQUFBQSxDQUFTLENBQUUsU0FBQSxDQUFXLElBQUssQ0FBQyxDQUFBLENBQ3RDQyxZQUFBQSxDQUFJLE9BQUEsQ0FBUSxZQUFBLENBQWNELENBQU8sQ0FBQSxDQUNqQ0csc0JBQUFBLENBQWMsS0FBQSxDQUFNLENBQ2xCLFdBQUEsQ0FBYSxjQUFBLENBQ2IsY0FBQSxDQUFnQixLQUFBLENBQ2hCLFFBQUEsQ0FBVSxLQUFBLENBQ1Ysd0JBQUEsQ0FBMEIsSUFDNUIsQ0FBQyxDQUFBLENBQ0RWLENBQUFBLENBQU8sS0FBQSxDQUFNSyxFQUFBQSxDQUFLLGFBQUEsQ0FBZUUsQ0FBTyxFQUMxQyxDQ2xCTyxTQUFTSSxFQUFBQSxDQUNkQyxDQUFBQSxDQUNBaEUsQ0FBQUEsQ0FDaUQsQ0FDakQsT0FBTyxDQUFBLEdBQUlpRSxDQUFBQSxHQUFTLENBQ2xCLEdBQUksQ0FDRixJQUFNQyxDQUFBQSxDQUFNRixDQUFBQSxDQUFHLEdBQUdDLENBQUksQ0FBQSxDQUN0QixPQUFJQyxDQUFBQSxZQUFlLE9BQUEsQ0FDVkEsQ0FBQUEsQ0FBSSxLQUFBLENBQU0sSUFBTWxFLENBQVksQ0FBQSxDQUU5QmtFLENBQ1QsQ0FBQSxLQUFRLENBQ04sT0FBT2xFLENBQ1QsQ0FDRixDQUNGLENDWE8sSUFBTW1FLEVBQUFBLENBQWUsaUJBQUEsQ0FFckIsU0FBU0MsRUFBQUEsRUFBUSxDQUN0QixJQUFNQyxDQUFBQSxDQUFPLE9BQUEsQ0FBUSxJQUFBLENBQ2pCQyxDQUFBQSxDQUFPRCxDQUFBQSxDQUFLLElBQUEsQ0FBTUUsQ0FBQUEsRUFBUUEsQ0FBQUEsQ0FBSSxVQUFBLENBQVdKLEVBQVksQ0FBQyxDQUFBLENBQzFELEdBQUksQ0FBQ0csQ0FBQUEsQ0FDSCxPQUFBbEIsQ0FBQUEsQ0FBTyxLQUFBLENBQU0sVUFBQSxDQUFZaUIsQ0FBSSxDQUFBLENBQ3RCLE9BQUEsQ0FBUSxJQUFBLENBRWpCLElBQU1KLENBQUFBLENBQU8sQ0FBQyxNQUFBLENBQVEsR0FBR0ksQ0FBQUEsQ0FBSyxLQUFBLENBQU0sRUFBRSxDQUFDLENBQUEsQ0FDdkMsT0FBQUMsQ0FBQUEsQ0FBTyxNQUFBLENBQU8sSUFBQSxDQUFLQSxDQUFBQSxDQUFLLEtBQUEsQ0FBTSxHQUFHLENBQUEsQ0FBRSxDQUFDLENBQUEsQ0FBSSxRQUFRLENBQUEsQ0FBRSxRQUFBLEVBQVMsQ0FDM0RMLENBQUFBLENBQUssSUFBQSxDQUFLLEdBQUcsSUFBQSxDQUFLLEtBQUEsQ0FBTUssQ0FBSSxDQUFDLENBQUEsQ0FDN0JsQixDQUFBQSxDQUFPLEtBQUEsQ0FBTSxTQUFBLENBQVdhLENBQUksQ0FBQSxDQUNyQkEsQ0FDVCxDQ2hCTyxJQUFNTyxFQUFBQSxDQUFnQixJQUFBLENBQ2hCQyxFQUFBQSxDQUFpQixJQUFBLENBQ2pCQyxFQUFBQSxDQUFjLEVBQUEsQ0FDZEMsRUFBQUEsQ0FBbUIsQ0FBQSxDQUNuQkMsRUFBQUEsQ0FBbUIsNEJBQUEsQ0FFbkJDLEVBQUFBLENBQWVDLGtCQUFBQSxDQUFFLE1BQUEsQ0FBTyxDQUNuQyxRQUFBLENBQVVBLGtCQUFBQSxDQUFFLE1BQUEsRUFBTyxDQUFFLFFBQUEsQ0FBUyxxQkFBcUIsQ0FBQSxDQUNuRCxLQUFBLENBQU9BLGtCQUFBQSxDQUFFLE1BQUEsRUFBTyxDQUFFLFFBQUEsQ0FBUyxhQUFhLENBQUEsQ0FDeEMsTUFBQSxDQUFRQSxrQkFBQUEsQ0FBRSxNQUFBLEVBQU8sQ0FBRSxRQUFBLENBQVMsY0FBYyxDQUFBLENBQzFDLEdBQUEsQ0FBS0Esa0JBQUFBLENBQUUsTUFBQSxFQUFPLENBQUUsUUFBQSxDQUFTLG1CQUFtQixDQUFBLENBQzVDLFNBQUEsQ0FBV0Esa0JBQUFBLENBQUUsT0FBQSxFQUFRLENBQUUsUUFBQSxDQUFTLDBCQUEwQixDQUFBLENBQzFELE9BQUEsQ0FBU0Esa0JBQUFBLENBQUUsTUFBQSxFQUFPLENBQUUsUUFBQSxDQUFTLHNFQUFzRSxDQUFBLENBQ25HLGFBQUEsQ0FBZUEsa0JBQUFBLENBQUUsT0FBQSxFQUFRLENBQUUsUUFBQSxDQUFTLDhDQUE4QyxDQUFBLENBQ2xGLGFBQUEsQ0FBZUEsa0JBQUFBLENBQUUsT0FBQSxFQUFRLENBQUUsUUFBQSxDQUFTLHVDQUF1QyxDQUFBLENBQzNFLFVBQUEsQ0FBWUEsa0JBQUFBLENBQUUsT0FBQSxFQUFRLENBQUUsUUFBQSxDQUFTLHNFQUFzRSxDQUFBLENBQ3ZHLGNBQUEsQ0FBZ0JBLGtCQUFBQSxDQUFFLE9BQUEsRUFBUSxDQUFFLFFBQUEsQ0FBUyx3RUFBd0UsQ0FBQSxDQUM3RyxjQUFBLENBQWdCQSxrQkFBQUEsQ0FBRSxPQUFBLEVBQVEsQ0FBRSxRQUFBLENBQVMsaURBQWlELENBQ3hGLENBQUMsQ0FBQSxDQXNCWUMsRUFBQUEsQ0FBc0MsQ0FDakQsS0FBQSxDQUFPUCxFQUFBQSxDQUNQLE1BQUEsQ0FBUUMsRUFBQUEsQ0FDUixHQUFBLENBQUtDLEVBQUFBLENBQ0wsUUFBQSxDQUFVQyxFQUFBQSxDQUNWLE9BQUEsQ0FBU0MsRUFBQUEsQ0FDVCxTQUFBLENBQVcsS0FBQSxDQUNYLGFBQUEsQ0FBZSxLQUFBLENBQ2YsYUFBQSxDQUFlLEtBQUEsQ0FDZixVQUFBLENBQVksS0FBQSxDQUNaLGNBQUEsQ0FBZ0IsS0FBQSxDQUNoQixjQUFBLENBQWdCLEtBQ2xCLENBQUEsQ0MxQ0EsZUFBc0JJLEVBQUFBLENBQVFDLENBQUFBLENBQXFCLENBQ2pELElBQU1DLENBQUFBLENBQVFMLEVBQUFBLENBQWEsS0FBQSxDQUNyQk0sQ0FBQUEsQ0FBSUosRUFBQUEsQ0FDVkssaUJBQUFBLENBQ0csSUFBQSxDQUFLSCxDQUFBQSxDQUFRLElBQUksQ0FBQSxDQUNqQixRQUFBLENBQVMsVUFBQSxDQUFZLG1DQUFtQyxDQUFBLENBQ3hELE1BQUEsQ0FBTyxzQkFBQSxDQUF3QkMsQ0FBQUEsQ0FBTSxLQUFBLENBQU0sV0FBQSxDQUFhLENBQUEsRUFBR0MsQ0FBQUEsQ0FBRSxLQUFLLENBQUEsQ0FBRSxDQUFBLENBQ3BFLE1BQUEsQ0FBTyx1QkFBQSxDQUF5QkQsQ0FBQUEsQ0FBTSxNQUFBLENBQU8sV0FBQSxDQUFhLENBQUEsRUFBR0MsQ0FBQUEsQ0FBRSxNQUFNLENBQUEsQ0FBRSxDQUFBLENBQ3ZFLE1BQUEsQ0FBTyxvQkFBQSxDQUFzQkQsQ0FBQUEsQ0FBTSxHQUFBLENBQUksV0FBQSxDQUFhLENBQUEsRUFBR0MsQ0FBQUEsQ0FBRSxHQUFHLENBQUEsQ0FBRSxDQUFBLENBQzlELE1BQUEsQ0FBTyx5QkFBQSxDQUEyQkQsQ0FBQUEsQ0FBTSxRQUFBLENBQVMsV0FBQSxDQUFhLENBQUEsRUFBR0MsQ0FBQUEsQ0FBRSxRQUFRLENBQUEsQ0FBRSxDQUFBLENBQzdFLE1BQUEsQ0FBTyx1QkFBQSxDQUF5QkQsQ0FBQUEsQ0FBTSxPQUFBLENBQVEsV0FBQSxDQUFhQyxDQUFBQSxDQUFFLE9BQU8sQ0FBQSxDQUNwRSxNQUFBLENBQU8sa0JBQUEsQ0FBb0JELENBQUFBLENBQU0sU0FBQSxDQUFVLFdBQUEsQ0FBYUMsQ0FBQUEsQ0FBRSxTQUFTLENBQUEsQ0FDbkUsTUFBQSxDQUFPLHFCQUFBLENBQXVCRCxDQUFBQSxDQUFNLGFBQUEsQ0FBYyxXQUFBLENBQWFDLENBQUFBLENBQUUsYUFBYSxFQUM5RSxNQUFBLENBQU8sbUJBQUEsQ0FBcUJELENBQUFBLENBQU0sYUFBQSxDQUFjLFdBQUEsQ0FBYUMsQ0FBQUEsQ0FBRSxhQUFhLENBQUEsQ0FDNUUsTUFBQSxDQUFPLGVBQUEsQ0FBaUJELENBQUFBLENBQU0sVUFBQSxDQUFXLFdBQUEsQ0FBYUMsQ0FBQUEsQ0FBRSxVQUFVLENBQUEsQ0FDbEUsTUFBQSxDQUFPLG9CQUFBLENBQXNCRCxDQUFBQSxDQUFNLGNBQUEsQ0FBZSxXQUFBLENBQWFDLENBQUFBLENBQUUsY0FBYyxDQUFBLENBQy9FLE1BQUEsQ0FBTyxtQkFBQSxDQUFxQkQsQ0FBQUEsQ0FBTSxjQUFBLENBQWUsV0FBQSxDQUFhQyxDQUFBQSxDQUFFLGNBQWMsQ0FBQSxDQUM5RSxNQUFBLENBQU8sTUFBT0UsQ0FBQUEsQ0FBZ0JDLENBQUFBLEdBQVMsQ0FDdEMsR0FBSSxDQUNGLE1BQU1MLENBQUFBLENBQVEsR0FBQSxDQUFJSSxDQUFBQSxDQUFRLENBQ3hCLEtBQUEsQ0FBT3RCLEVBQUFBLENBQU05RCxDQUFBQSxDQUFha0YsQ0FBQUEsQ0FBRSxLQUFLLENBQUEsQ0FBRUcsQ0FBQUEsQ0FBSyxLQUFLLENBQUEsQ0FDN0MsTUFBQSxDQUFRdkIsRUFBQUEsQ0FBTTlELENBQUFBLENBQWFrRixDQUFBQSxDQUFFLE1BQU0sQ0FBQSxDQUFFRyxDQUFBQSxDQUFLLE1BQU0sQ0FBQSxDQUNoRCxHQUFBLENBQUt2QixFQUFBQSxDQUFNOUQsQ0FBQUEsQ0FBYWtGLENBQUFBLENBQUUsR0FBRyxDQUFBLENBQUVHLENBQUFBLENBQUssR0FBRyxDQUFBLENBQ3ZDLFFBQUEsQ0FBVXZCLEVBQUFBLENBQU05RCxDQUFBQSxDQUFha0YsQ0FBQUEsQ0FBRSxRQUFRLENBQUEsQ0FBRUcsQ0FBQUEsQ0FBSyxRQUFRLENBQUEsQ0FDdEQsT0FBQSxDQUFTQSxDQUFBQSxDQUFLLE9BQUEsRUFBV0gsQ0FBQUEsQ0FBRSxPQUFBLENBQzNCLFNBQUEsQ0FBV0csQ0FBQUEsQ0FBSyxTQUFBLEVBQWFILENBQUFBLENBQUUsU0FBQSxDQUMvQixhQUFBLENBQWVHLENBQUFBLENBQUssYUFBQSxFQUFpQkgsQ0FBQUEsQ0FBRSxhQUFBLENBQ3ZDLGFBQUEsQ0FBZUcsQ0FBQUEsQ0FBSyxhQUFBLEVBQWlCSCxDQUFBQSxDQUFFLGFBQUEsQ0FDdkMsVUFBQSxDQUFZRyxDQUFBQSxDQUFLLFVBQUEsRUFBY0gsQ0FBQUEsQ0FBRSxVQUFBLENBQ2pDLGNBQUEsQ0FBZ0JHLENBQUFBLENBQUssY0FBQSxFQUFrQkgsQ0FBQUEsQ0FBRSxjQUFBLENBQ3pDLGNBQUEsQ0FBZ0JHLENBQUFBLENBQUssY0FBQSxFQUFrQkgsQ0FBQUEsQ0FBRSxjQUMzQyxDQUFDLEVBQ0gsQ0FBQSxNQUFTSSxDQUFBQSxDQUFHLENBQ1ZuQyxDQUFBQSxDQUFPLEtBQUEsQ0FBTW1DLENBQUMsRUFDaEIsQ0FDRixDQUFDLENBQUEsQ0FDSCxNQUFNSCxpQkFBQUEsQ0FBUSxVQUFBLENBQVdoQixFQUFBQSxFQUFPLEVBQ2xDLENDTU8sSUFBTW9CLEVBQUFBLENBQU4sS0FBZ0IsQ0FDckIsWUFBQSxDQUFhbEMsQ0FBQUEsQ0FBZWhCLENBQUFBLENBQWlCLENBQzNDLElBQUEsQ0FBSyxJQUFBLENBQUssQ0FBRSxJQUFBLENBQU0sU0FBQSxDQUFvQixLQUFBLENBQUFnQixDQUFBQSxDQUFPLE9BQUEsQ0FBQWhCLENBQVEsQ0FBQyxFQUN4RCxDQUVBLGFBQUEsQ0FBY04sQ0FBQUEsQ0FBcUIsQ0FDakMsSUFBQSxDQUFLLElBQUEsQ0FBSyxDQUFFLElBQUEsQ0FBTSxVQUFBLENBQXFCLEtBQUEsQ0FBQUEsQ0FBTSxDQUFDLEVBQ2hELENBRUEsVUFBQSxDQUFXSSxDQUFBQSxDQUE4QixDQUN2QyxPQUFPLElBQUEsQ0FBSyxJQUFBLENBQUssQ0FBRSxJQUFBLENBQU0sT0FBQSxDQUFrQixLQUFBLENBQUFBLENBQU0sQ0FBQyxDQUNwRCxDQUVBLFNBQUEsQ0FBVXFELENBQUFBLENBQXdDLENBQ2hELE9BQU8sSUFBQSxDQUFLLElBQUEsQ0FBSyxDQUFFLElBQUEsQ0FBTSxNQUFBLENBQWlCLE9BQUEsQ0FBQUEsQ0FBUSxDQUFDLENBQ3JELENBRVEsSUFBQSxDQUFLcEUsQ0FBQUEsQ0FBNEIsQ0FDdkMsT0FBTyxJQUFJLE9BQUEsQ0FBU21CLENBQUFBLEVBQVksQ0FDOUIsR0FBSSxDQUFDLE9BQUEsQ0FBUSxJQUFBLENBQU0sT0FBT0EsQ0FBQUEsRUFBUSxDQUNsQyxPQUFBLENBQVEsSUFBQSxDQUFLbkIsQ0FBQUEsQ0FBSyxJQUFNbUIsQ0FBQUEsRUFBUyxFQUNuQyxDQUFDLENBQ0gsQ0FDRixDQUFBLENDOUVBLElBQU1rRCxFQUFBQSxDQUFXLE1BQUEsQ0FBTyxJQUFBLENBQUssQ0FBQyxFQUFBLENBQU0sRUFBQSxDQUFNLEVBQUEsQ0FBTSxFQUFBLENBQU0sR0FBQSxDQUFNLEVBQUEsQ0FBTSxFQUFBLENBQU0sR0FBSSxDQUFDLENBQUEsQ0FHaEVDLEVBQUFBLENBQU4sS0FBc0IsQ0FDbkIsR0FBQSxDQUFNLE9BQU8sS0FBQSxDQUFNLENBQUMsQ0FBQSxDQUU1QixJQUFBLENBQUtDLENBQUFBLENBQXlCLENBQzVCLElBQUEsQ0FBSyxHQUFBLENBQU0sTUFBQSxDQUFPLE1BQUEsQ0FBTyxDQUFDLElBQUEsQ0FBSyxHQUFBLENBQUtBLENBQUssQ0FBQyxDQUFBLENBQzFDLElBQU1DLENBQUFBLENBQW1CLEVBQUMsQ0FDMUIsT0FBYSxDQUNYLElBQU1DLENBQUFBLENBQU0sSUFBQSxDQUFLLEdBQUEsQ0FBSSxPQUFBLENBQVFKLEVBQVEsQ0FBQSxDQUNyQyxHQUFJSSxDQUFBQSxDQUFNLENBQUEsQ0FBRyxNQUNiLElBQU1DLENBQUFBLENBQU1ELENBQUFBLENBQU1KLEVBQUFBLENBQVMsTUFBQSxDQUMzQkcsQ0FBQUEsQ0FBTyxJQUFBLENBQUssTUFBQSxDQUFPLElBQUEsQ0FBSyxJQUFBLENBQUssR0FBQSxDQUFJLFFBQUEsQ0FBUyxDQUFBLENBQUdFLENBQUcsQ0FBQyxDQUFDLENBQUEsQ0FDbEQsSUFBQSxDQUFLLEdBQUEsQ0FBTSxJQUFBLENBQUssR0FBQSxDQUFJLFFBQUEsQ0FBU0EsQ0FBRyxFQUNsQyxDQUNBLE9BQU9GLENBQ1QsQ0FDRixDQUFBLENDWkEsSUFBTXBDLEVBQUFBLENBQU0saUJBQUEsQ0FDTnVDLEVBQUFBLENBQVNDLGlCQUFBQSxFQUFXLENBRXBCQyxFQUFBQSxDQUFXLEdBQUEsQ0FDWEMsRUFBQUEsQ0FBc0IsRUFBQSxDQUV0QkMsRUFBQUEsQ0FBbUIsRUFBQSxDQUNuQkMsRUFBQUEsQ0FBd0IsR0FBQSxDQVNqQkMsRUFBQUEsQ0FBTixLQUFvQixDQVN6QixXQUFBLENBQ1dDLENBQUFBLENBQ1FDLENBQUFBLENBQ0FDLENBQUFBLENBQ2pCLENBSFMsSUFBQSxDQUFBLElBQUEsQ0FBQUYsQ0FBQUEsQ0FDUSxJQUFBLENBQUEsR0FBQSxDQUFBQyxDQUFBQSxDQUNBLElBQUEsQ0FBQSxVQUFBLENBQUFDLENBQUFBLENBRWpCLElBQUEsQ0FBSyxLQUFBLENBQU0sQ0FBQyxFQUNkLENBTFcsSUFBQSxDQUNRLEdBQUEsQ0FDQSxVQUFBLENBWFgsTUFBQSxDQUNBLE1BQUEsQ0FBUyxJQUFJZCxFQUFBQSxDQUNiLElBQUEsQ0FBTyxJQUFJLEdBQUEsQ0FDWCxVQUFBLENBQWEsQ0FBQSxDQUNiLFlBQUEsQ0FBZSxDQUFBLENBQ2YsT0FBQSxDQUFVLElBQUksR0FBQSxDQUNkLFNBQUEsQ0FBWSxLQUFBLENBV3BCLE1BQU0sUUFBQSxDQUFTZSxDQUFBQSxDQUFpQyxDQUM5QyxJQUFNWixDQUFBQSxDQUFNLElBQUEsQ0FBSyxHQUFBLENBQUksQ0FBQSxDQUFHWSxDQUFNLENBQUEsQ0FDOUIsR0FBSVosQ0FBQUEsRUFBTyxJQUFBLENBQUssVUFBQSxDQUFZLE9BQU8sTUFBQSxDQUFPLEtBQUEsQ0FBTSxDQUFDLENBQUEsQ0FDakQsSUFBTWEsQ0FBQUEsQ0FBTSxJQUFBLENBQUssSUFBQSxDQUFLLEdBQUEsQ0FBSWIsQ0FBRyxDQUFBLENBQzdCLEdBQUlhLENBQUFBLENBQ0YsT0FBQSxJQUFBLENBQUssT0FBQSxDQUFRYixDQUFHLENBQUEsQ0FDVGEsQ0FBQUEsQ0FFVCxHQUFJLElBQUEsQ0FBSyxXQUFBLENBQVliLENBQUcsQ0FBQSxDQUFHLElBQUEsQ0FBSyxNQUFBLENBQU9BLENBQUcsQ0FBQSxDQUFBLEtBQUEsR0FDakMsSUFBQSxDQUFLLFNBQUEsRUFBYUEsQ0FBQUEsRUFBTyxJQUFBLENBQUssWUFBQSxDQUFjLE9BQU8sTUFBQSxDQUFPLEtBQUEsQ0FBTSxDQUFDLENBQUEsQ0FDMUUsT0FBTyxJQUFBLENBQUssU0FBQSxDQUFVQSxDQUFHLENBQzNCLENBRUEsS0FBQSxFQUFjLENBQ1osSUFBQSxDQUFLLFVBQUEsRUFBVyxDQUNoQixJQUFBLENBQUssZ0JBQUEsQ0FBaUIsSUFBSSxLQUFBLENBQU0sQ0FBQSxzQkFBQSxFQUF5QixJQUFBLENBQUssSUFBQSxDQUFLLEVBQUUsQ0FBQSxPQUFBLENBQVMsQ0FBQyxDQUFBLENBQy9FLElBQUEsQ0FBSyxJQUFBLENBQUssS0FBQSxHQUNaLENBRVEsV0FBQSxDQUFZQSxDQUFBQSxDQUFzQixDQUV4QyxPQURJQSxDQUFBQSxDQUFNLElBQUEsQ0FBSyxVQUFBLEVBQ1hBLENBQUFBLENBQU0sSUFBQSxDQUFLLFlBQUEsQ0FBcUIsSUFBQSxDQUM3QkEsQ0FBQUEsQ0FBTSxJQUFBLENBQUssWUFBQSxDQUFlTSxFQUNuQyxDQUVRLE1BQUEsQ0FBT04sQ0FBQUEsQ0FBbUIsQ0FDaEMsSUFBQSxDQUFLLFVBQUEsRUFBVyxDQUNoQixJQUFBLENBQUssZ0JBQUEsQ0FBaUIsSUFBSSxLQUFBLENBQU0sQ0FBQSw2Q0FBQSxFQUFnREEsQ0FBRyxDQUFBLENBQUUsQ0FBQyxDQUFBLENBQ3RGLElBQUEsQ0FBSyxLQUFBLENBQU1BLENBQUcsRUFDaEIsQ0FFUSxTQUFBLENBQVVBLENBQUFBLENBQThCLENBQzlDLE9BQU8sSUFBSSxPQUFBLENBQWdCLENBQUN0RCxDQUFBQSxDQUFTQyxDQUFBQSxHQUFXLENBQzlDLElBQU1tRSxDQUFBQSxDQUFRLFVBQUEsQ0FBVyxJQUFNLENBQzdCLElBQUEsQ0FBSyxPQUFBLENBQVEsTUFBQSxDQUFPZCxDQUFHLENBQUEsQ0FDdkJyRCxDQUFBQSxDQUFPLElBQUksS0FBQSxDQUFNLENBQUEsb0JBQUEsRUFBdUJxRCxDQUFHLENBQUEsb0JBQUEsRUFBdUJPLEVBQXFCLENBQUEsRUFBQSxDQUFJLENBQUMsRUFDOUYsQ0FBQSxDQUFHQSxFQUFxQixDQUFBLENBQ3hCLElBQUEsQ0FBSyxPQUFBLENBQVEsR0FBQSxDQUFJUCxDQUFBQSxDQUFLLENBQUUsT0FBQSxDQUFBdEQsQ0FBQUEsQ0FBUyxNQUFBLENBQUFDLENBQUFBLENBQVEsS0FBQSxDQUFBbUUsQ0FBTSxDQUFDLENBQUEsQ0FDaEQsSUFBQSxDQUFLLGNBQUEsR0FDUCxDQUFDLENBQ0gsQ0FFUSxPQUFBLENBQVFkLENBQUFBLENBQW1CLENBQ2pDLElBQU1lLENBQUFBLENBQUtmLENBQUFBLENBQU1LLEVBQUFBLENBQ1hXLENBQUFBLENBQUtoQixDQUFBQSxDQUFNSSxFQUFBQSxDQUNqQixJQUFBLElBQVdhLENBQUFBLElBQUssSUFBQSxDQUFLLElBQUEsQ0FBSyxJQUFBLEVBQUssQ0FBQSxDQUN6QkEsQ0FBQUEsQ0FBSUYsQ0FBQUEsRUFBTUUsQ0FBQUEsQ0FBSUQsQ0FBQUEsR0FBSSxJQUFBLENBQUssSUFBQSxDQUFLLE1BQUEsQ0FBT0MsQ0FBQyxDQUFBLENBRTFDLElBQUEsQ0FBSyxjQUFBLEdBQ1AsQ0FFUSxjQUFBLEVBQXVCLENBQzdCLElBQU1DLENBQUFBLENBQU0sSUFBQSxDQUFLLE1BQUEsRUFBUSxNQUFBLENBQ3JCQSxDQUFBQSxFQUFPLElBQUEsQ0FBSyxJQUFBLENBQUssSUFBQSxDQUFPZCxFQUFBQSxFQUFZYyxDQUFBQSxDQUFJLFFBQUEsRUFBUyxFQUFHQSxDQUFBQSxDQUFJLE1BQUEsR0FDOUQsQ0FHUSxLQUFBLENBQU1DLENBQUFBLENBQXVCLENBQ25DLElBQUEsQ0FBSyxNQUFBLENBQVMsSUFBSXRCLEVBQUFBLENBQ2xCLElBQUEsQ0FBSyxVQUFBLENBQWFzQixDQUFBQSxDQUNsQixJQUFBLENBQUssWUFBQSxDQUFlQSxDQUFBQSxDQUNwQixJQUFBLENBQUssU0FBQSxDQUFZLEtBQUEsQ0FDakIsSUFBTUMsQ0FBQUEsQ0FBUUQsQ0FBQUEsQ0FBVSxJQUFBLENBQUssSUFBQSxDQUFLLEdBQUEsQ0FDNUJoRCxDQUFBQSxDQUFPLENBQ1gsY0FBQSxDQUNBLFdBQUEsQ0FDQSxPQUFBLENBQ0EsR0FBSWlELENBQUFBLENBQVEsQ0FBQSxDQUFJLENBQUMsS0FBQSxDQUFPLE1BQUEsQ0FBT0EsQ0FBSyxDQUFDLENBQUEsQ0FBSSxFQUFDLENBQzFDLElBQUEsQ0FDQSxJQUFBLENBQUssR0FBQSxDQUNMLEtBQUEsQ0FDQSxDQUFBLElBQUEsRUFBTyxJQUFBLENBQUssSUFBQSxDQUFLLEdBQUcsQ0FBQSxDQUFBLENBQ3BCLGNBQUEsQ0FDQSxJQUFBLENBQ0EsYUFBQSxDQUNBLE9BQUEsQ0FDQSxrQkFBQSxDQUNBLE9BQUEsQ0FDQSxZQUFBLENBQ0EsT0FBQSxDQUNBLElBQUEsQ0FDQSxZQUFBLENBQ0EsTUFBQSxDQUNBLEtBQUEsQ0FDQSxVQUFBLENBQ0EsTUFBQSxDQUNBLEdBQ0YsQ0FBQSxDQUNBOUQsQ0FBQUEsQ0FBTyxLQUFBLENBQU1LLEVBQUFBLENBQUssQ0FBQSxTQUFBLEVBQVksSUFBQSxDQUFLLElBQUEsQ0FBSyxFQUFBLENBQUcsS0FBQSxDQUFNLENBQUEsQ0FBRyxDQUFDLENBQUMsQ0FBQSxNQUFBLEVBQVN3RCxDQUFPLENBQUEsQ0FBQSxFQUFJLElBQUEsQ0FBSyxJQUFBLENBQUssS0FBSyxDQUFBLENBQUEsRUFBSSxJQUFBLENBQUssSUFBQSxDQUFLLE1BQU0sQ0FBQSxDQUFFLENBQUEsQ0FDL0csSUFBTTFFLENBQUFBLENBQU80RSxtQkFBQUEsQ0FBTW5CLEVBQUFBLENBQVEvQixDQUFBQSxDQUFNLENBQUUsS0FBQSxDQUFPLENBQUMsUUFBQSxDQUFVLE1BQUEsQ0FBUSxNQUFNLENBQUUsQ0FBQyxDQUFBLENBQ3RFLElBQUEsQ0FBSyxNQUFBLENBQVMxQixDQUFBQSxDQUNkQSxDQUFBQSxDQUFLLE1BQUEsQ0FBUSxFQUFBLENBQUcsTUFBQSxDQUFTcUQsQ0FBQUEsRUFBa0IsSUFBQSxDQUFLLFFBQUEsQ0FBU0EsQ0FBSyxDQUFDLENBQUEsQ0FDL0RyRCxDQUFBQSxDQUFLLE1BQUEsQ0FBUSxFQUFBLENBQUcsTUFBQSxDQUFTcUQsQ0FBQUEsRUFDdkJ4QyxDQUFBQSxDQUFPLElBQUEsQ0FBS0ssRUFBQUEsQ0FBSyxDQUFBLENBQUEsRUFBSSxJQUFBLENBQUssSUFBQSxDQUFLLEVBQUUsQ0FBQSxnQkFBQSxDQUFBLENBQW9CbUMsQ0FBQUEsQ0FBTSxRQUFBLEVBQVMsQ0FBRSxJQUFBLEVBQU0sQ0FDOUUsQ0FBQSxDQUNBckQsQ0FBQUEsQ0FBSyxFQUFBLENBQUcsT0FBQSxDQUFVZ0QsQ0FBQUEsRUFBTW5DLENBQUFBLENBQU8sSUFBQSxDQUFLSyxFQUFBQSxDQUFLLENBQUEsQ0FBQSxFQUFJLElBQUEsQ0FBSyxJQUFBLENBQUssRUFBRSxDQUFBLHFCQUFBLENBQUEsQ0FBeUI4QixDQUFBQSxDQUFFLE9BQU8sQ0FBQyxDQUFBLENBQzVGaEQsQ0FBQUEsQ0FBSyxFQUFBLENBQUcsTUFBQSxDQUFTTyxDQUFBQSxFQUFTLENBQ3hCLEdBQUlQLENBQUFBLEdBQVMsSUFBQSxDQUFLLE1BQUEsQ0FFbEIsR0FEQWEsQ0FBQUEsQ0FBTyxLQUFBLENBQU1LLEVBQUFBLENBQUssQ0FBQSxRQUFBLEVBQVcsSUFBQSxDQUFLLElBQUEsQ0FBSyxFQUFBLENBQUcsS0FBQSxDQUFNLENBQUEsQ0FBRyxDQUFDLENBQUMsQ0FBQSxNQUFBLEVBQVNYLENBQUksQ0FBQSxNQUFBLEVBQVMsSUFBQSxDQUFLLFlBQVksQ0FBQSxDQUFFLENBQUEsQ0FDMUZBLENBQUFBLEdBQVMsQ0FBQSxFQUFLQSxDQUFBQSxHQUFTLElBQUEsQ0FBTSxDQUMvQixJQUFBLENBQUssVUFBWSxJQUFBLENBQ2pCLElBQUEsR0FBVyxDQUFDZ0QsQ0FBQUEsQ0FBS3NCLENBQUMsQ0FBQSxHQUFLLElBQUEsQ0FBSyxPQUFBLENBQ3RCdEIsQ0FBQUEsRUFBTyxJQUFBLENBQUssWUFBQSxHQUNkLFlBQUEsQ0FBYXNCLENBQUFBLENBQUUsS0FBSyxDQUFBLENBQ3BCLElBQUEsQ0FBSyxPQUFBLENBQVEsTUFBQSxDQUFPdEIsQ0FBRyxDQUFBLENBQ3ZCc0IsQ0FBQUEsQ0FBRSxPQUFBLENBQVEsTUFBQSxDQUFPLEtBQUEsQ0FBTSxDQUFDLENBQUMsQ0FBQSxFQUcvQixDQUFBLEtBQVd0RSxDQUFBQSxHQUFTLEdBQUEsRUFDbEIsSUFBQSxDQUFLLGdCQUFBLENBQWlCLElBQUksS0FBQSxDQUFNLENBQUEsY0FBQSxFQUFpQkEsQ0FBSSxDQUFBLEtBQUEsRUFBUSxJQUFBLENBQUssR0FBRyxDQUFBLENBQUUsQ0FBQyxFQUU1RSxDQUFDLEVBQ0gsQ0FFUSxRQUFBLENBQVM4QyxDQUFBQSxDQUFxQixDQUNwQyxJQUFBLElBQVd5QixDQUFBQSxJQUFLLElBQUEsQ0FBSyxNQUFBLENBQU8sSUFBQSxDQUFLekIsQ0FBSyxDQUFBLENBQUcsQ0FDdkMsSUFBTUUsQ0FBQUEsQ0FBTSxJQUFBLENBQUssWUFBQSxFQUFBLENBQ2pCLElBQUEsQ0FBSyxJQUFBLENBQUssR0FBQSxDQUFJQSxDQUFBQSxDQUFLdUIsQ0FBQyxDQUFBLENBQ3BCLElBQU1DLENBQUFBLENBQVMsSUFBQSxDQUFLLE9BQUEsQ0FBUSxHQUFBLENBQUl4QixDQUFHLENBQUEsQ0FDL0J3QixDQUFBQSxHQUNGLElBQUEsQ0FBSyxPQUFBLENBQVEsTUFBQSxDQUFPeEIsQ0FBRyxDQUFBLENBQ3ZCLFlBQUEsQ0FBYXdCLENBQUFBLENBQU8sS0FBSyxDQUFBLENBQ3pCQSxDQUFBQSxDQUFPLE9BQUEsQ0FBUUQsQ0FBQyxDQUFBLEVBRXBCLENBQ0ksSUFBQSxDQUFLLElBQUEsQ0FBSyxJQUFBLEVBQVFuQixFQUFBQSxFQUFVLElBQUEsQ0FBSyxNQUFBLEVBQVEsTUFBQSxFQUFRLEtBQUEsR0FDdkQsQ0FFUSxVQUFBLEVBQW1CLENBQ3BCLElBQUEsQ0FBSyxNQUFBLEdBQ1YsSUFBQSxDQUFLLE1BQUEsQ0FBTyxJQUFBLENBQUssU0FBUyxDQUFBLENBQzFCLElBQUEsQ0FBSyxNQUFBLENBQVMsTUFBQSxFQUNoQixDQUVRLGdCQUFBLENBQWlCckQsQ0FBQUEsQ0FBa0IsQ0FDekMsSUFBQSxJQUFXdUUsQ0FBQUEsSUFBSyxJQUFBLENBQUssT0FBQSxDQUFRLE1BQUEsRUFBTyxDQUNsQyxZQUFBLENBQWFBLENBQUFBLENBQUUsS0FBSyxDQUFBLENBQ3BCQSxDQUFBQSxDQUFFLE1BQUEsQ0FBT3ZFLENBQUcsQ0FBQSxDQUVkLElBQUEsQ0FBSyxPQUFBLENBQVEsS0FBQSxHQUNmLENBQ0YsQ0FBQSxDQ2xMQSxJQUFNbUQsRUFBQUEsQ0FBU0MsaUJBQUFBLEVBQVcsQ0FDcEJzQixFQUFBQSxDQUFtQixHQUFBLENBUWxCLFNBQVNDLEVBQUFBLENBQU1oQixDQUFBQSxDQUFtQyxDQUN2RCxPQUFPLElBQUksT0FBQSxDQUFRLENBQUNoRSxDQUFBQSxDQUFTQyxDQUFBQSxHQUFXLENBQ3RDLElBQU1GLENBQUFBLENBQU80RSxtQkFBQUEsQ0FBTW5CLEVBQUFBLENBQVEsQ0FBQyxjQUFBLENBQWdCLElBQUEsQ0FBTVEsQ0FBQUEsQ0FBSyxVQUFBLENBQVksR0FBQSxDQUFLLElBQUEsQ0FBTSxZQUFBLENBQWMsR0FBRyxDQUFBLENBQUcsQ0FDaEcsS0FBQSxDQUFPLENBQUMsUUFBQSxDQUFVLE1BQUEsQ0FBUSxNQUFNLENBQ2xDLENBQUMsQ0FBQSxDQUNHaUIsQ0FBQUEsQ0FBUyxFQUFBLENBQ1BiLENBQUFBLENBQVEsVUFBQSxDQUFXLElBQU0sQ0FDN0JyRSxDQUFBQSxDQUFLLElBQUEsQ0FBSyxTQUFTLENBQUEsQ0FDbkJFLENBQUFBLENBQU8sSUFBSSxLQUFBLENBQU0sQ0FBQSxzQkFBQSxFQUF5QjhFLEVBQWdCLENBQUEsSUFBQSxFQUFPZixDQUFHLENBQUEsQ0FBRSxDQUFDLEVBQ3pFLENBQUEsQ0FBR2UsRUFBZ0IsQ0FBQSxDQUNuQmhGLENBQUFBLENBQUssTUFBQSxDQUFRLEVBQUEsQ0FBRyxNQUFBLENBQVNtRixDQUFBQSxFQUFlRCxDQUFBQSxFQUFVQyxDQUFBQSxDQUFFLFFBQUEsRUFBVyxDQUFBLENBQy9EbkYsQ0FBQUEsQ0FBSyxFQUFBLENBQUcsT0FBQSxDQUFVZ0QsQ0FBQUEsRUFBTSxDQUN0QixZQUFBLENBQWFxQixDQUFLLENBQUEsQ0FDbEJuRSxDQUFBQSxDQUFPOEMsQ0FBQyxFQUNWLENBQUMsQ0FBQSxDQUNEaEQsQ0FBQUEsQ0FBSyxFQUFBLENBQUcsTUFBQSxDQUFRLElBQU0sQ0FDcEIsWUFBQSxDQUFhcUUsQ0FBSyxDQUFBLENBQ2xCLElBQU1lLENBQUFBLENBQU1GLENBQUFBLENBQU8sS0FBQSxDQUFNLG1CQUFtQixDQUFBLENBQ3RDRyxDQUFBQSxDQUFNSCxDQUFBQSxDQUFPLEtBQUEsQ0FBTSxrQ0FBa0MsQ0FBQSxDQUMzRCxHQUFJLENBQUNFLENBQUFBLEVBQU8sQ0FBQ0MsQ0FBQUEsQ0FBSyxPQUFPbkYsQ0FBQUEsQ0FBTyxJQUFJLEtBQUEsQ0FBTSxpQkFBaUIrRCxDQUFHO0FBQUEsRUFBS2lCLENBQU0sQ0FBQSxDQUFFLENBQUMsRUFDNUVqRixDQUFBQSxDQUFRLENBQ04sTUFBTyxRQUFBLENBQVNtRixDQUFBQSxDQUFJLENBQUMsQ0FBQSxDQUFJLEVBQUUsQ0FBQSxDQUMzQixNQUFBLENBQVEsU0FBU0EsQ0FBQUEsQ0FBSSxDQUFDLEVBQUksRUFBRSxDQUFBLENBQzVCLFFBQUEsQ0FBVSxRQUFBLENBQVNDLEVBQUksQ0FBQyxDQUFBLENBQUksRUFBRSxDQUFBLENBQUksSUFBQSxDQUFPLFNBQVNBLENBQUFBLENBQUksQ0FBQyxDQUFBLENBQUksRUFBRSxFQUFJLEVBQUEsQ0FBSyxVQUFBLENBQVdBLEVBQUksQ0FBQyxDQUFFLENBQzFGLENBQUMsRUFDSCxDQUFDLEVBQ0gsQ0FBQyxDQUNILENDckJPLElBQU1DLEVBQUFBLENBQU4sS0FBa0IsQ0FDZixRQUFBLENBQVcsSUFBSSxHQUFBLENBRXZCLE1BQU0sS0FBS3ZDLENBQUFBLENBQXVDLENBQ2hELElBQU1wRCxDQUFBQSxDQUFPLE1BQU1zRixHQUFNbEMsQ0FBQUEsQ0FBSyxHQUFHLENBQUEsQ0FDM0J3QyxDQUFBQSxDQUFLQyxtQkFBVyxDQUNoQnhCLENBQUFBLENBQWtCLENBQUUsRUFBQSxDQUFBdUIsQ0FBQUEsQ0FBSSxNQUFPNUYsQ0FBQUEsQ0FBSyxLQUFBLENBQU8sT0FBUUEsQ0FBQUEsQ0FBSyxNQUFBLENBQVEsSUFBS29ELENBQUFBLENBQUssR0FBQSxDQUFLLFNBQVVwRCxDQUFBQSxDQUFLLFFBQVMsRUFDdkd1RSxDQUFBQSxDQUFhLElBQUEsQ0FBSyxHQUFBLENBQUksQ0FBQSxDQUFHLEtBQUssS0FBQSxDQUFNdkUsQ0FBQUEsQ0FBSyxTQUFXb0QsQ0FBQUEsQ0FBSyxHQUFHLENBQUMsQ0FBQSxDQUNuRSxPQUFBLElBQUEsQ0FBSyxRQUFBLENBQVMsR0FBQSxDQUFJd0MsRUFBSSxJQUFJeEIsRUFBQUEsQ0FBY0MsRUFBTWpCLENBQUFBLENBQUssR0FBQSxDQUFLbUIsQ0FBVSxDQUFDLENBQUEsQ0FDNURGLENBQ1QsQ0FFQSxTQUFTdUIsQ0FBQUEsQ0FBWWhDLENBQUFBLENBQThCLENBQ2pELE9BQU8sSUFBQSxDQUFLLEtBQUtnQyxDQUFFLENBQUEsQ0FBRSxTQUFTaEMsQ0FBRyxDQUNuQyxDQUVBLEtBQUEsQ0FBTWdDLENBQUFBLENBQWtCLENBQ3RCLElBQU1FLENBQUFBLENBQUksS0FBSyxRQUFBLENBQVMsR0FBQSxDQUFJRixDQUFFLENBQUEsQ0FDekJFLElBQ0xBLENBQUFBLENBQUUsS0FBQSxHQUNGLElBQUEsQ0FBSyxRQUFBLENBQVMsT0FBT0YsQ0FBRSxDQUFBLEVBQ3pCLENBR0EsUUFBQSxFQUFpQixDQUNmLElBQUEsSUFBV0EsQ0FBQUEsSUFBTSxDQUFDLEdBQUcsSUFBQSxDQUFLLFNBQVMsSUFBQSxFQUFNLENBQUEsQ0FBRyxJQUFBLENBQUssTUFBTUEsQ0FBRSxFQUMzRCxDQUVRLElBQUEsQ0FBS0EsQ0FBQUEsQ0FBMkIsQ0FDdEMsSUFBTUUsQ0FBQUEsQ0FBSSxLQUFLLFFBQUEsQ0FBUyxHQUFBLENBQUlGLENBQUUsQ0FBQSxDQUM5QixHQUFJLENBQUNFLENBQUFBLENBQUcsTUFBTSxJQUFJLEtBQUEsQ0FBTSxDQUFBLGlDQUFBLEVBQW9DRixDQUFFLENBQUEsQ0FBRSxFQUNoRSxPQUFPRSxDQUNULENBQ0YsQ0FBQSxDQUVhQyxFQUFBQSxDQUFjLElBQUlKLEVBQUFBLENDakQvQixJQUFNcEUsRUFBQUEsQ0FBTSxpQkFBQSxDQUdOeUUsR0FBUyxXQUFBLENBRVRDLENBQUFBLENBQXVDLENBQzNDLDZCQUFBLENBQStCLEdBQUEsQ0FDL0IsK0JBQWdDLGNBQUEsQ0FDaEMsOEJBQUEsQ0FBZ0MsR0FDbEMsQ0FBQSxDQUdPLFNBQVNDLEVBQUFBLEVBQTJCLENBQ3pDQyxrQkFBUyxNQUFBLENBQU9ILEVBQUFBLENBQVEsTUFBT0ksQ0FBQUEsRUFBUSxDQUNyQyxHQUFJQSxDQUFBQSxDQUFJLFNBQVcsU0FBQSxDQUFXLE9BQU8sSUFBSSxRQUFBLENBQVMsSUFBQSxDQUFNLENBQUUsTUFBQSxDQUFRLEdBQUEsQ0FBSyxPQUFBLENBQVNILENBQWEsQ0FBQyxDQUFBLENBQzlGLElBQU1JLEVBQU0sSUFBSSxHQUFBLENBQUlELEVBQUksR0FBRyxDQUFBLENBQzNCbEYsQ0FBQUEsQ0FBTyxLQUFBLENBQU1LLEdBQUssQ0FBQSxFQUFHNkUsQ0FBQUEsQ0FBSSxNQUFNLENBQUEsQ0FBQSxFQUFJQyxDQUFBQSxDQUFJLFFBQVEsQ0FBQSxFQUFHQSxDQUFBQSxDQUFJLE1BQU0sQ0FBQSxDQUFFLEVBQzlELEdBQUksQ0FDRixPQUFRQSxDQUFBQSxDQUFJLFFBQUEsRUFDVixLQUFLLE1BQUEsQ0FDSCxPQUFPQyxFQUFBQSxDQUFPLE1BQU1QLEdBQVksSUFBQSxDQUFLLENBQUUsSUFBS00sQ0FBQUEsQ0FBSSxZQUFBLENBQWEsSUFBSSxLQUFLLENBQUEsRUFBSyxFQUFBLENBQUksR0FBQSxDQUFLRSxHQUFJRixDQUFBQSxDQUFLLEtBQUEsQ0FBTyxFQUFFLENBQUUsQ0FBQyxDQUFDLENBQUEsQ0FDNUcsS0FBSyxPQUFBLENBQ0gsT0FBT0csR0FBTSxNQUFNVCxFQUFBQSxDQUFZLFNBQVNNLENBQUFBLENBQUksWUFBQSxDQUFhLElBQUksSUFBSSxDQUFBLEVBQUssRUFBQSxDQUFJRSxFQUFBQSxDQUFJRixFQUFLLEtBQUEsQ0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFBLENBQy9GLEtBQUssT0FBQSxDQUNILE9BQUFOLEdBQVksS0FBQSxDQUFNTSxDQUFBQSxDQUFJLGFBQWEsR0FBQSxDQUFJLElBQUksR0FBSyxFQUFFLENBQUEsQ0FDM0MsSUFBSSxRQUFBLENBQVMsSUFBQSxDQUFNLENBQUUsTUFBQSxDQUFRLElBQUssT0FBQSxDQUFTSixDQUFhLENBQUMsQ0FBQSxDQUNsRSxRQUNFLE9BQU8sSUFBSSxRQUFBLENBQVMsQ0FBQSxnQkFBQSxFQUFtQkksQ0FBQUEsQ0FBSSxRQUFRLENBQUEsQ0FBQSxDQUFJLENBQUUsT0FBUSxHQUFBLENBQUssT0FBQSxDQUFTSixDQUFhLENBQUMsQ0FDakcsQ0FDRixDQUFBLE1BQVM1QyxFQUFHLENBQ1YsSUFBTWxFLEVBQU1rRSxDQUFBQSxZQUFhLEtBQUEsQ0FBUUEsRUFBRSxPQUFBLENBQVUsTUFBQSxDQUFPQSxDQUFDLENBQUEsQ0FDckQsT0FBTyxJQUFJLFFBQUEsQ0FBU2xFLENBQUFBLENBQUssQ0FBRSxNQUFBLENBQVEsR0FBQSxDQUFLLFFBQVM4RyxDQUFhLENBQUMsQ0FDakUsQ0FDRixDQUFDLEVBQ0gsQ0FFQSxTQUFTSyxFQUFBQSxDQUFPakMsQ0FBQUEsQ0FBMkIsQ0FDekMsT0FBTyxJQUFJLFFBQUEsQ0FBUyxJQUFBLENBQUssVUFBVUEsQ0FBSSxDQUFBLENBQUcsQ0FDeEMsT0FBQSxDQUFTLENBQUUsR0FBRzRCLENBQUFBLENBQWMsY0FBQSxDQUFnQixrQkFBbUIsQ0FDakUsQ0FBQyxDQUNILENBRUEsU0FBU08sRUFBQUEsQ0FBTUMsQ0FBQUEsQ0FBeUIsQ0FFdEMsR0FBSUEsQ0FBQUEsQ0FBTSxVQUFBLEdBQWUsQ0FBQSxDQUFHLE9BQU8sSUFBSSxRQUFBLENBQVMsS0FBTSxDQUFFLE1BQUEsQ0FBUSxJQUFLLE9BQUEsQ0FBU1IsQ0FBYSxDQUFDLENBQUEsQ0FHNUYsSUFBTVMsQ0FBQUEsQ0FBTyxJQUFJLFdBQVdELENBQUFBLENBQU0sVUFBVSxFQUM1Q0MsQ0FBQUEsQ0FBSyxHQUFBLENBQUlELENBQUssQ0FBQSxDQUNkLElBQU1FLENBQUFBLENBQU8sSUFBSSxLQUFLLENBQUNELENBQUFBLENBQUssTUFBcUIsQ0FBQSxDQUFHLENBQUUsSUFBQSxDQUFNLFdBQVksQ0FBQyxDQUFBLENBQ3pFLE9BQU8sSUFBSSxRQUFBLENBQVNDLENBQUFBLENBQU0sQ0FDeEIsT0FBQSxDQUFTLENBQUUsR0FBR1YsQ0FBQUEsQ0FBYyxlQUFBLENBQWlCLFVBQVcsQ0FDMUQsQ0FBQyxDQUNILENBRUEsU0FBU00sR0FBSUYsQ0FBQUEsQ0FBVU8sQ0FBQUEsQ0FBYUMsQ0FBQUEsQ0FBMEIsQ0FDNUQsSUFBTUMsQ0FBQUEsQ0FBSVQsQ0FBQUEsQ0FBSSxhQUFhLEdBQUEsQ0FBSU8sQ0FBRyxFQUM1QixDQUFBLENBQUlFLENBQUFBLENBQUksUUFBQSxDQUFTQSxDQUFBQSxDQUFHLEVBQUUsQ0FBQSxDQUFJLEdBQUEsQ0FDaEMsT0FBTyxNQUFBLENBQU8sUUFBQSxDQUFTLENBQUMsQ0FBQSxDQUFJLENBQUEsQ0FBSUQsQ0FDbEMsQ0MvRE8sU0FBU0UsRUFBQUEsQ0FBTUMsQ0FBQUEsQ0FBWSxDQUNoQyxPQUFPLElBQUksUUFBZTFHLENBQUFBLEVBQVksVUFBQSxDQUFXQSxFQUFTMEcsQ0FBRSxDQUFDLENBQy9ELENBRU8sU0FBU0MsQ0FBQUEsQ0FBZUMsQ0FBQUEsQ0FBZUYsRUFBWUcsQ0FBQUEsQ0FBMkIsQ0FDbkYsT0FBTyxJQUFJLE9BQUEsQ0FBUSxDQUFDN0csQ0FBQUEsQ0FBU0MsQ0FBQUEsR0FBVyxDQUN0QyxJQUFNbUUsRUFBUSxVQUFBLENBQVcsSUFBTW5FLEVBQU8sSUFBSSxLQUFBLENBQU0sR0FBRzRHLENBQUssQ0FBQSxpQkFBQSxFQUFvQkgsQ0FBRSxDQUFBLEVBQUEsQ0FBSSxDQUFDLENBQUEsQ0FBR0EsQ0FBRSxFQUN4RkUsQ0FBQUEsQ0FBRSxJQUFBLENBQUs1RyxFQUFTQyxDQUFNLENBQUEsQ0FBRSxRQUFRLElBQU0sWUFBQSxDQUFhbUUsQ0FBSyxDQUFDLEVBQzNELENBQUMsQ0FDSCxDQ05BLElBQU0wQyxFQUFBQSxDQUFpQixHQUFBLENBRWhCLFNBQVNDLEVBQUFBLENBQUtDLEVBQWVDLENBQUFBLENBQWdCQyxDQUFBQSxDQUFtQyxDQUNyRixPQUFPUCxDQUFBQSxDQUFZSyxFQUFJLFdBQUEsQ0FBWUMsQ0FBQUEsQ0FBUUMsQ0FBTSxDQUFBLENBQUdKLEdBQWdCLENBQUEsSUFBQSxFQUFPRyxDQUFNLEVBQUUsQ0FDckYsQ0FFTyxTQUFTRSxFQUFBQSxDQUFPSCxDQUFBQSxDQUFlSSxDQUFBQSxDQUFzQyxDQUMxRSxPQUFPVCxDQUFBQSxDQUFZSSxFQUFBQSxDQUFLQyxFQUFLLGtCQUFBLENBQW9CLENBQUUsV0FBQUksQ0FBVyxDQUFDLENBQUEsQ0FBR04sRUFBQUEsQ0FBZ0IsUUFBUSxDQUM1RixDQUVPLFNBQVNPLEVBQUFBLENBQW1CTCxDQUFBQSxDQUFlTSxFQUErQixDQUMvRSxPQUFPLElBQUksT0FBQSxDQUFRLENBQUN0SCxDQUFBQSxDQUFTQyxDQUFBQSxHQUFXLENBQ3RDLElBQU1zSCxDQUFBQSxDQUFVLFdBQVcsSUFBTSxDQUMvQlAsQ0FBQUEsQ0FBSSxHQUFBLENBQUksVUFBV1EsQ0FBTyxDQUFBLENBQzFCdkgsRUFBTyxJQUFJLEtBQUEsQ0FBTSxzQ0FBc0M2RyxFQUFjLENBQUEsRUFBQSxDQUFJLENBQUMsRUFDNUUsRUFBR0EsRUFBYyxDQUFBLENBRVhVLEVBQVUsQ0FBQ0MsQ0FBQUEsQ0FBbUJSLElBQW1CLENBQ2pEQSxDQUFBQSxHQUFXLHVDQUNiLFlBQUEsQ0FBYU0sQ0FBTyxFQUNwQlAsQ0FBQUEsQ0FBSSxHQUFBLENBQUksVUFBV1EsQ0FBTyxDQUFBLENBQzFCeEgsR0FBUSxFQUVaLENBQUEsQ0FDQWdILENBQUFBLENBQUksRUFBQSxDQUFHLFVBQVdRLENBQU8sQ0FBQSxDQUV6QlQsR0FBS0MsQ0FBQUEsQ0FBSyxnQ0FBQSxDQUFrQyxDQUMxQyxNQUFBLENBQVEsU0FBQSxDQUNSLE1BQUEsQ0FBQU0sQ0FBQUEsQ0FDQSxrQ0FBbUMsQ0FDckMsQ0FBQyxFQUFFLEtBQUEsQ0FBT3ZFLENBQUFBLEVBQU0sQ0FDZCxZQUFBLENBQWF3RSxDQUFPLENBQUEsQ0FDcEJQLENBQUFBLENBQUksSUFBSSxTQUFBLENBQVdRLENBQU8sRUFDMUJ2SCxDQUFBQSxDQUFPOEMsQ0FBQyxFQUNWLENBQUMsRUFDSCxDQUFDLENBQ0gsQ0FFQSxlQUFzQjJFLEVBQUFBLENBQWlCVixDQUFBQSxDQUE4QixDQUNuRSxNQUFNRCxFQUFBQSxDQUFLQyxFQUFLLGdDQUFBLENBQWtDLENBQUUsTUFBQSxDQUFRLE9BQVEsQ0FBQyxFQUN2RSxDQUVBLGVBQXNCVyxFQUFBQSxDQUFlWCxDQUFBQSxDQUFlWSxFQUFZLENBQzlELE1BQU1iLEVBQUFBLENBQUtDLENBQUFBLENBQUsscUNBQXNDLENBQ3BELEdBQUdZLEVBQ0gsaUJBQUEsQ0FBbUIsQ0FBQSxDQUNuQixPQUFRLEtBQ1YsQ0FBQyxFQUNILENDL0NPLElBQU1DLEVBQUFBLENBQTBCLEVBQUEsQ0FFaEMsSUFBTUMsRUFBQUEsQ0FBcUIsWUFBQSxDQUUzQixTQUFTQyxFQUFBQSxDQUFlQyxDQUFBQSxDQUFtQkosRUFBb0IsQ0FDcEUsR0FBTSxDQUFFLEtBQUEsQ0FBQUssQ0FBQUEsQ0FBTyxPQUFBQyxDQUFPLENBQUEsQ0FBSU4sRUFDMUIsT0FBTyxDQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLHdCQUFBLEVBTWlCSyxDQUFLLENBQUEsWUFBQSxFQUFlQyxDQUFBQSxDQUFTLENBQUMsQ0FBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsYUFBQSxFQUt6Q0QsQ0FBSyxDQUFBO0FBQUEsY0FBQSxFQUNKQyxDQUFNLENBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsV0FBQSxFQU1UQSxDQUFNLENBQUE7QUFBQTtBQUFBLGFBQUEsRUFFSkQsQ0FBSyxDQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLDJCQUFBLEVBMkJTRCxDQUFTLENBQUE7QUFBQSw0QkFBQSxFQUNSQyxDQUFLLENBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLG9CQUFBLEVBS2JBLENBQUssQ0FBQTtBQUFBLDJCQUFBLEVBQ0VKLEVBQXVCLENBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBO0FBQUE7O0FBQUE7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsMEJBQUEsRUErQnhCQyxFQUFrQixDQUFBO0FBQUE7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLE9BQUEsQ0E4QjlDLENBRU8sU0FBU0ssRUFBQUEsQ0FBWUMsQ0FBQUEsQ0FBZ0JSLENBQUFBLENBQWdDLENBQzFFLEdBQU0sQ0FBRSxLQUFBLENBQUFLLENBQUFBLENBQU8sTUFBQSxDQUFBQyxDQUFPLENBQUEsQ0FBSU4sQ0FBQUEsQ0FDMUIsR0FBSUssQ0FBQUEsQ0FBUUosRUFBQUEsRUFBMkJLLENBQUFBLENBQVMsQ0FBQSxDQUM5QyxPQUdGLElBQU1HLENBQUFBLENBQVlILENBQUFBLENBQVMsQ0FBQSxDQUV2QkksQ0FBQUEsQ0FBWSxDQUFBLENBQ2hCLElBQUEsSUFBU0MsQ0FBQUEsQ0FBSSxFQUFHQSxDQUFBQSxDQUFJVixFQUFBQSxDQUF5QlUsQ0FBQUEsRUFBQUEsQ0FBSyxDQUNoRCxJQUFNQyxDQUFBQSxDQUFBQSxDQUFZSCxDQUFBQSxDQUFZSixDQUFBQSxDQUFRTSxDQUFBQSxFQUFLLENBQUEsQ0FFckNFLENBQUFBLENBQUFBLENBRElMLENBQUFBLENBQU9JLENBQVEsQ0FBQSxFQUFLLENBQUEsRUFDZCxHQUFBLENBQU0sRUFBSSxDQUFBLENBQzFCRixDQUFBQSxDQUFhQSxDQUFBQSxFQUFhLENBQUEsQ0FBS0csRUFDakMsQ0FJQSxHQUZBSCxDQUFBQSxDQUFZQSxDQUFBQSxHQUFjLENBQUEsQ0FFdEIsRUFBQSxDQUFDLE1BQUEsQ0FBTyxRQUFBLENBQVNBLENBQVMsQ0FBQSxFQUFLQSxDQUFBQSxDQUFZLEdBQUtBLENBQUFBLENBQVksR0FBQSxDQUFBLENBSWhFLE9BQU9BLENBQ1QsQ0FFTyxTQUFTSSxFQUFBQSxDQUFXMUIsQ0FBQUEsQ0FBZSxDQUN4QyxPQUFPRyxFQUFBQSxDQUFPSCxDQUFBQSxDQUFLLHVCQUF1QixDQUM1QyxDQU1BLGVBQXNCMkIsR0FBV0MsQ0FBQUEsQ0FBaUJDLENBQUFBLENBQWtCQyxDQUFBQSxDQUFpQyxDQUNuRyxJQUFNQyxDQUFBQSxDQUFVLElBQUksT0FBQSxDQUFTQyxDQUFBQSxFQUFNSixDQUFBQSxDQUFHLEdBQUEsQ0FBSSxJQUFBLENBQUtkLEVBQUFBLENBQW9Ca0IsQ0FBQyxDQUFDLENBQUEsQ0FDckUsTUFBTTdCLEVBQUFBLENBQU95QixDQUFBQSxDQUFHLFFBQUEsQ0FBVSxDQUFBLG1CQUFBLEVBQXNCQyxDQUFRLENBQUEsQ0FBQSxDQUFHLENBQUEsQ0FDM0QsTUFBTXhCLEVBQUFBLENBQW1CdUIsQ0FBQUEsQ0FBRyxRQUFBLENBQVVFLENBQVEsQ0FBQSxDQUM5QyxNQUFNbkMsQ0FBQUEsQ0FBWW9DLENBQUFBLENBQVMsSUFBTyxZQUFZLEVBQ2hELENDaktBLElBQU1FLEVBQUFBLENBQWEsS0FBQSxDQUNiQyxFQUFBQSxDQUFlLFdBQUEsQ0FJZkMsRUFBQUEsQ0FBd0IsQ0FDNUIsUUFBQSxDQUFVLElBQUEsQ0FDVixNQUFBLENBQVEsSUFBQSxDQUNSLFNBQUEsQ0FBVyxJQUFBLENBQ1gsb0JBQXFCLElBQUEsQ0FDckIsZUFBQSxDQUFpQixJQUFBLENBQ2pCLFdBQUEsQ0FBYSxJQUFBLENBQ2IsTUFBQSxDQUFRLElBQUEsQ0FDUixTQUFBLENBQVcsSUFDYixDQUFBLENBR0F0RCxpQkFBQUEsQ0FBUywyQkFBQSxDQUE0QixDQUNuQyxDQUFFLE1BQUEsQ0FBUW9ELEVBQUFBLENBQVksV0FBWUUsRUFBc0IsQ0FBQSxDQUN4RCxDQUFFLE1BQUEsQ0FBUUQsRUFBQUEsQ0FBYyxVQUFBLENBQVlDLEVBQXNCLENBQzVELENBQUMsQ0FBQSxDQUdNLFNBQVNDLEVBQUFBLEVBQXlCLENBQ3ZDdkQsaUJBQUFBLENBQVMsTUFBQSxDQUFPb0QsRUFBQUEsQ0FBYW5ELEdBQVEsQ0FDbkMsSUFBTUMsQ0FBQUEsQ0FBTSxJQUFJLEdBQUEsQ0FBSUQsQ0FBQUEsQ0FBSSxHQUFHLENBQUEsQ0FDckI5QixDQUFBQSxDQUFNK0IsQ0FBQUEsQ0FBSSxZQUFBLENBQWEsR0FBQSxDQUFJLEtBQUssQ0FBQSxFQUFLLEVBQUEsQ0FDckNrQyxDQUFBQSxDQUFRLFNBQVNsQyxDQUFBQSxDQUFJLFlBQUEsQ0FBYSxHQUFBLENBQUksR0FBRyxDQUFBLEVBQUssR0FBQSxDQUFLLEVBQUUsQ0FBQSxDQUNyRG1DLENBQUFBLENBQVMsUUFBQSxDQUFTbkMsQ0FBQUEsQ0FBSSxZQUFBLENBQWEsR0FBQSxDQUFJLEdBQUcsQ0FBQSxFQUFLLEdBQUEsQ0FBSyxFQUFFLENBQUEsQ0FDdERzRCxDQUFBQSxDQUFPdEIsRUFBQUEsQ0FBZS9ELENBQUFBLENBQUssQ0FBRSxLQUFBLENBQUFpRSxDQUFBQSxDQUFPLE1BQUEsQ0FBQUMsQ0FBTyxDQUFDLENBQUEsQ0FDbEQsT0FBTyxJQUFJLFFBQUEsQ0FBU21CLENBQUFBLENBQU0sQ0FBRSxRQUFTLENBQUUsY0FBQSxDQUFnQixXQUFZLENBQUUsQ0FBQyxDQUN4RSxDQUFDLEVBQ0gsQ0FFTyxTQUFTQyxFQUFBQSxDQUFldEYsQ0FBQUEsQ0FBYTRELENBQUFBLENBQW9CLENBQzlELElBQU03QixDQUFBQSxDQUFNLElBQUksR0FBQSxDQUFJLENBQUEsRUFBR2tELEVBQVUsQ0FBQSxRQUFBLENBQVUsQ0FBQSxDQUMzQyxPQUFBbEQsQ0FBQUEsQ0FBSSxZQUFBLENBQWEsR0FBQSxDQUFJLEtBQUEsQ0FBTy9CLENBQUFBLENBQUksT0FBQSxDQUFRLFNBQUEsQ0FBVyxVQUFVLENBQUMsQ0FBQSxDQUM5RCtCLEVBQUksWUFBQSxDQUFhLEdBQUEsQ0FBSSxHQUFBLENBQUssTUFBQSxDQUFPNkIsQ0FBQUEsQ0FBSyxLQUFLLENBQUMsQ0FBQSxDQUM1QzdCLENBQUFBLENBQUksWUFBQSxDQUFhLEdBQUEsQ0FBSSxHQUFBLENBQUssTUFBQSxDQUFPNkIsQ0FBQUEsQ0FBSyxNQUFNLENBQUMsRUFDdEM3QixDQUFBQSxDQUFJLFFBQUEsRUFDYixDQ3RDTyxJQUFNd0QsRUFBQUEsQ0FBTixLQUF5QixDQU05QixXQUFBLENBQXFCQyxDQUFBQSxDQUF3QixDQUF4QixJQUFBLENBQUEsY0FBQSxDQUFBQSxFQUF5QixDQUF6QixjQUFBLENBTGIsUUFBVSxDQUFBLENBQ1YsTUFBQSxDQUF1QixFQUFDLENBQ3hCLFFBQUEsQ0FBVyxJQUFJLE9BQUEsQ0FDZixRQUFBLENBSVIsSUFBSSxNQUFBLEVBQWlCLENBQ25CLE9BQU8sSUFBQSxDQUFLLE9BQ2QsQ0FFQSxJQUFJLFNBQWtCLENBQ3BCLE9BQU8sSUFBQSxDQUFLLE1BQUEsQ0FBTyxNQUNyQixDQUVBLElBQUksS0FBQSxFQUFnQixDQUNsQixPQUFPLENBQUEsUUFBQSxFQUFXLElBQUEsQ0FBSyxNQUFNLENBQUEsV0FBQSxFQUFjLElBQUEsQ0FBSyxPQUFPLEVBQ3pELENBRUEsTUFBTSxRQUFBLENBQVloSSxDQUFBQSxDQUFzQmpCLENBQUFBLENBQWtDLENBQ3hFLE9BQUFBLENBQUFBLEVBQVEsY0FBQSxFQUFlLENBRW5CQSxDQUFBQSxFQUFVLENBQUMsSUFBQSxDQUFLLFFBQUEsQ0FBUyxHQUFBLENBQUlBLENBQU0sSUFDckMsSUFBQSxDQUFLLFFBQUEsQ0FBUyxHQUFBLENBQUlBLENBQU0sQ0FBQSxDQUN4QkEsQ0FBQUEsQ0FBTyxnQkFBQSxDQUFpQixPQUFBLENBQVMsSUFBTSxJQUFBLENBQUssS0FBQSxDQUFNQSxDQUFNLENBQUEsQ0FBRyxDQUFFLElBQUEsQ0FBTSxJQUFLLENBQUMsQ0FBQSxDQUFBLENBR3BFLElBQUksT0FBQSxDQUFXLENBQUNQLENBQUFBLENBQVNDLENBQUFBLEdBQVcsQ0FDekMsSUFBQSxDQUFLLE1BQUEsQ0FBTyxJQUFBLENBQUssQ0FDZixHQUFBLENBQUssSUFBTSxDQUNULEdBQUlNLENBQUFBLEVBQVEsUUFBUyxDQUNuQk4sQ0FBQUEsQ0FBT00sQ0FBQUEsQ0FBTyxNQUFNLENBQUEsQ0FDcEIsSUFBQSxDQUFLLElBQUEsRUFBSyxDQUNWLE1BQ0YsQ0FDQSxJQUFBLENBQUssT0FBQSxFQUFBLENBQ0xpQixDQUFBQSxFQUFHLENBQ0EsSUFBQSxDQUFNZ0YsQ0FBQUEsRUFBTSxDQUNYLElBQUEsQ0FBSyxPQUFBLEVBQUEsQ0FDTHhHLENBQUFBLENBQVF3RyxDQUFDLENBQUEsQ0FDVCxJQUFBLENBQUssSUFBQSxHQUNQLENBQUMsQ0FBQSxDQUNBLEtBQUEsQ0FBT3pELENBQUFBLEVBQU0sQ0FDWixJQUFBLENBQUssT0FBQSxFQUFBLENBQ0w5QyxDQUFBQSxDQUFPOEMsQ0FBQyxDQUFBLENBQ1IsSUFBQSxDQUFLLElBQUEsR0FDUCxDQUFDLEVBQ0wsQ0FBQSxDQUNBLE1BQUEsQ0FBQTlDLENBQUFBLENBQ0EsTUFBQSxDQUFBTSxDQUNGLENBQUMsQ0FBQSxDQUNELElBQUEsQ0FBSyxJQUFBLEdBQ1AsQ0FBQyxDQUNILENBRUEsTUFBTSxLQUFBLEVBQXVCLENBQzNCLEdBQUksRUFBQSxJQUFBLENBQUssT0FBQSxHQUFZLENBQUEsRUFBSyxJQUFBLENBQUssT0FBQSxHQUFZLENBQUEsQ0FBQSxDQUMzQyxPQUFPLElBQUksT0FBQSxDQUFTeUksQ0FBQUEsRUFBTyxLQUFLLFFBQUEsQ0FBV0EsQ0FBRSxDQUMvQyxDQUVRLEtBQUEsQ0FBTXpJLENBQUFBLENBQXFCLENBQ2pDLElBQU1rSixDQUFBQSxDQUFxQixFQUFDLENBQzVCLElBQUEsSUFBV0MsQ0FBQUEsSUFBUyxJQUFBLENBQUssTUFBQSxDQUNuQkEsQ0FBQUEsQ0FBTSxTQUFXbkosQ0FBQUEsQ0FDbkJtSixDQUFBQSxDQUFNLE1BQUEsQ0FBT25KLENBQUFBLENBQU8sTUFBTSxDQUFBLENBRTFCa0osQ0FBQUEsQ0FBSyxJQUFBLENBQUtDLENBQUssQ0FBQSxDQUduQixJQUFBLENBQUssTUFBQSxDQUFTRCxDQUFBQSxDQUNkLElBQUEsQ0FBSyxJQUFBLEdBQ1AsQ0FFUSxJQUFBLEVBQU8sQ0FDYixHQUFJLElBQUEsQ0FBSyxPQUFBLEdBQVksQ0FBQSxFQUFLLElBQUEsQ0FBSyxPQUFBLEdBQVksQ0FBQSxDQUFHLENBQzVDLElBQUEsQ0FBSyxRQUFBLElBQVcsQ0FDaEIsSUFBQSxDQUFLLFFBQUEsQ0FBVyxNQUFBLENBQ2hCLE1BQ0YsQ0FDSSxJQUFBLENBQUssT0FBQSxDQUFVLElBQUEsQ0FBSyxjQUFBLEVBQ3RCLElBQUEsQ0FBSyxNQUFBLENBQU8sS0FBQSxFQUFNLEVBQUcsR0FBQSxHQUV6QixDQUNGLENBQUEsQ0NuRUEsZUFBc0JFLENBQUFBLENBQWE3RyxDQUFBQSxDQUF1QitELENBQUFBLENBQXNDLENBQzlGLElBQU0rQyxDQUFBQSxDQUFNLElBQUlDLG1CQUFBQSxDQUNoQkQsQ0FBQUEsQ0FBSSxhQUFBLENBQWM5RyxDQUFBQSxDQUFLLEtBQUssQ0FBQSxDQUM1QjhHLENBQUFBLENBQUksT0FBQSxDQUFVOUcsQ0FBQUEsQ0FBSyxLQUFBLENBQU0sRUFBQSxDQUN6QjhHLENBQUFBLENBQUksS0FBQSxDQUFROUcsQ0FBQUEsQ0FBSyxLQUFBLENBQ2pCOEcsQ0FBQUEsQ0FBSSxNQUFBLENBQVM5RyxDQUFBQSxDQUFLLE1BQUEsQ0FDbEI4RyxDQUFBQSxDQUFJLFdBQUEsQ0FBYzlHLEVBQUssV0FBQSxDQUN2QjhHLENBQUFBLENBQUksUUFBQSxDQUFXLElBQUlFLGVBQUFBLENBQVMsQ0FBQSxDQUFHaEgsQ0FBQUEsQ0FBSyxHQUFHLENBQUEsQ0FDdkM4RyxDQUFBQSxDQUFJLFNBQUEsQ0FBWSxJQUFJRSxlQUFBQSxDQUFTaEgsQ0FBQUEsQ0FBSyxHQUFBLENBQUssQ0FBQyxFQUN4QzhHLENBQUFBLENBQUksT0FBQSxDQUFVOUcsQ0FBQUEsQ0FBSyxHQUFBLENBQU0sQ0FBQSxDQUN6QjhHLENBQUFBLENBQUksT0FBQSxDQUFVLE1BQUEsQ0FBTzlHLENBQUFBLENBQUssT0FBTyxDQUFBLENBQ2pDOEcsQ0FBQUEsQ0FBSSxRQUFBLENBQVNHLHFDQUEyQixDQUFBLENBQ3BDakgsQ0FBQUEsQ0FBSyxXQUFVOEcsQ0FBQUEsQ0FBSSxRQUFBLENBQVc5RyxDQUFBQSxDQUFLLFFBQUEsQ0FBQSxDQUNuQ0EsQ0FBQUEsQ0FBSyxVQUFBLEdBQWUsTUFBQSxHQUFXOEcsQ0FBQUEsQ0FBSSxVQUFBLENBQWE5RyxDQUFBQSxDQUFLLFVBQUEsQ0FBQSxDQUNyREEsQ0FBQUEsQ0FBSyxXQUFBLEdBQWE4RyxDQUFBQSxDQUFJLFdBQUEsQ0FBYzlHLENBQUFBLENBQUssYUFDN0MsSUFBQSxHQUFXLENBQUN5QixDQUFBQSxDQUFHaUMsQ0FBQyxDQUFBLEdBQUssTUFBQSxDQUFPLE9BQUEsQ0FBUTFELENBQUFBLENBQUssT0FBQSxFQUFXLEVBQUUsQ0FBQSxDQUFHOEcsQ0FBQUEsQ0FBSSxTQUFBLENBQVVyRixDQUFBQSxDQUFHaUMsQ0FBQyxFQUMzRSxPQUFBd0Qsa0JBQUFBLENBQVksWUFBQSxDQUFhLE1BQU1KLENBQUFBLENBQUksS0FBQSxDQUFNOUcsQ0FBQUEsQ0FBSyxLQUFBLENBQU8sSUFBSSxDQUFBLENBQUcrRCxDQUFLLENBQUEsQ0FDMUQrQyxDQUNULENBRU8sU0FBU0ssQ0FBQUEsQ0FBVWhDLEVBQWVDLENBQUFBLENBQWdCZ0MsQ0FBQUEsQ0FBOEIsQ0FDckYsSUFBTUMsQ0FBQUEsQ0FBUSxJQUFJQyxZQUFBQSxDQUNsQixPQUFBRCxDQUFBQSxDQUFNLEtBQUEsRUFBTSxDQUNaQSxDQUFBQSxDQUFNLE1BQUEsQ0FBU0QsQ0FBQUEsQ0FDZkMsQ0FBQUEsQ0FBTSxLQUFBLENBQVFsQyxFQUNka0MsQ0FBQUEsQ0FBTSxNQUFBLENBQVNqQyxDQUFBQSxDQUNmOEIsa0JBQUFBLENBQVksWUFBQSxDQUFhRyxDQUFBQSxDQUFNLFNBQUEsQ0FBVSxDQUFDLENBQUEsQ0FBRyxpQkFBaUIsQ0FBQSxDQUN2REEsQ0FDVCxDQUVPLFNBQVNFLENBQUFBLEVBQXFCLENBQ25DLElBQU1DLENBQUFBLENBQU0sSUFBSUMsYUFBQUEsQ0FDaEIsT0FBQUQsQ0FBQUEsQ0FBSSxLQUFBLEVBQU0sQ0FDSEEsQ0FDVCxDQUVBLGVBQXNCRSxFQUFBQSxDQUFhWixDQUFBQSxDQUFtQlUsQ0FBQUEsQ0FBYUcsQ0FBQUEsQ0FBZ0JDLENBQUFBLENBQW1DLENBQ3BILE9BQWEsQ0FDWCxJQUFNMUIsQ0FBQUEsQ0FBSSxNQUFNWSxDQUFBQSxDQUFJLGFBQUEsQ0FBY1UsQ0FBRyxDQUFBLENBQ3JDLEdBQUl0QixDQUFBQSxHQUFNMkIsd0JBQUFBLEVBQWtCM0IsQ0FBQUEsR0FBTTRCLHFCQUFBQSxDQUFhLE1BQy9DWixrQkFBQUEsQ0FBWSxZQUFBLENBQWFoQixFQUFHLGVBQWUsQ0FBQSxDQUMzQ3NCLENBQUFBLENBQUksV0FBQSxDQUFjRyxDQUFBQSxDQUFPLEtBQUEsQ0FDckJILENBQUFBLENBQUksUUFBQSxHQUFhLEVBQUEsR0FBSUEsQ0FBQUEsQ0FBSSxRQUFBLENBQVcsRUFBQSxDQUFBLENBQ3hDQSxDQUFBQSxDQUFJLFNBQUEsQ0FBVVYsQ0FBQUEsQ0FBSSxRQUFBLENBQVVhLEVBQU8sUUFBUSxDQUFBLENBQzNDLE1BQU1DLENBQUFBLENBQU0sV0FBQSxDQUFZSixDQUFHLENBQUEsQ0FDM0JBLENBQUFBLENBQUksS0FBQSxHQUNOLENBQ0YsQ0N0RE8sSUFBTU8sQ0FBQUEsQ0FBTixNQUFNQyxDQUFpQyxDQUNuQyxHQUFBLENBQ0EsR0FBQSxDQUNBLEdBQUEsQ0FDRCxJQUFBLENBQ0EsSUFBQSxDQUVSLGFBQWEsTUFBQSxDQUFPN0MsQ0FBQUEsQ0FBZUMsQ0FBQUEsQ0FBZ0IsQ0FDakQsSUFBTTZDLENBQUFBLENBQVFDLFlBQUFBLENBQU0saUJBQUEsQ0FBa0JDLHFCQUFjLENBQUEsQ0FDcEQsT0FBQUMsU0FBQUEsQ0FBR0gsQ0FBQUEsQ0FBTyx5QkFBeUIsQ0FBQSxDQUM1QixJQUFJRCxDQUFBQSxDQUFXN0MsQ0FBQUEsQ0FBT0MsQ0FBQUEsQ0FBUTZDLENBQUssQ0FDNUMsQ0FFUSxXQUFBLENBQVk5QyxDQUFBQSxDQUFlQyxDQUFBQSxDQUFnQmlELENBQUFBLENBQVksQ0FDN0QsS0FBSyxJQUFBLENBQU9BLENBQUFBLENBQ1osSUFBQSxDQUFLLEdBQUEsQ0FBTWxCLENBQUFBLENBQVVoQyxDQUFBQSxDQUFPQyxDQUFBQSxDQUFRa0Qsc0JBQWUsQ0FBQSxDQUNuRCxJQUFBLENBQUssR0FBQSxDQUFNbkIsQ0FBQUEsQ0FBVWhDLENBQUFBLENBQU9DLENBQUFBLENBQVFtRCwwQkFBbUIsQ0FBQSxDQUN2RCxLQUFLLEdBQUEsQ0FBTWhCLENBQUFBLEdBQ2IsQ0FPQSxNQUFNLEdBQUEsRUFBNkIsQ0FDakMsSUFBTWMsQ0FBQUEsQ0FBTSxJQUFJdEIsbUJBQUFBLENBQ2hCLE9BQUFzQixDQUFBQSxDQUFJLGFBQUEsQ0FBYyxJQUFBLENBQUssSUFBSSxFQUMzQm5CLGtCQUFBQSxDQUFZLFlBQUEsQ0FBYSxNQUFNbUIsQ0FBQUEsQ0FBSSxLQUFBLENBQU0sSUFBQSxDQUFLLElBQUksQ0FBQSxDQUFHLGtCQUFrQixDQUFBLENBQ2hFQSxDQUNULENBRUEsTUFBTSxTQUFBLENBQVVHLENBQUFBLENBQWlDLENBQy9DLElBQUFDLENBQUFBLENBQUEsRUFBQSxDQUFBLEdBQUEsQ0FBQSxJQUFNSixDQUFBQSxDQUFNSyxDQUFBQSxDQUFBRCxDQUFBQSxDQUFBLE1BQU0sSUFBQSxDQUFLLEdBQUEsRUFBSSxDQUFBLENBQzNCLElBQUEsQ0FBSyxHQUFBLENBQUksSUFBQSxDQUFPRCxDQUFBQSxDQUNoQnRCLGtCQUFBQSxDQUFZLFlBQUEsQ0FBYSxNQUFNbUIsRUFBSSxVQUFBLENBQVcsSUFBQSxDQUFLLEdBQUcsQ0FBQSxDQUFHLHVCQUF1QixDQUFBLENBQ2hGLElBQUEsQ0FBSyxHQUFBLENBQUksS0FBQSxFQUFNLENBQ2ZuQixrQkFBQUEsQ0FBWSxZQUFBLENBQWEsTUFBTW1CLENBQUFBLENBQUksWUFBQSxDQUFhLElBQUEsQ0FBSyxHQUFHLENBQUEsQ0FBRyx5QkFBeUIsQ0FBQSxDQUNwRixPQUFPLElBQUEsQ0FBSyxHQUFBLENBQUEsTUFMWjFELENBQUFBLENBQUEsQ0FBQSxJQUFBZ0UsQ0FBQUEsQ0FBQWhFLENBQUFBLENBQUFpRSxDQUFBQSxDQUFBLEtBQUEsQ0FBQSxPQUFBLENBQUFDLENBQUFBLENBQUFKLENBQUFBLENBQUFFLENBQUFBLENBQUFDLENBQUFBLEVBQUFBLENBTUYsQ0FFQSxJQUFJLEdBQUEsRUFBTSxDQUNSLEdBQUksQ0FBQyxJQUFBLENBQUssSUFBQSxDQUFNLENBQ2QsSUFBTUUsQ0FBQUEsQ0FBTSxJQUFJQywyQkFBQUEsQ0FDVkMsQ0FBQUEsQ0FBTSxJQUFBLENBQUssR0FBQSxDQUFJLE1BQUEsQ0FDckJGLEVBQUksVUFBQSxDQUNGLElBQUEsQ0FBSyxHQUFBLENBQUksS0FBQSxDQUNULElBQUEsQ0FBSyxHQUFBLENBQUksTUFBQSxDQUNURSxDQUFBQSxDQUNBLElBQUEsQ0FBSyxHQUFBLENBQUksS0FBQSxDQUNULElBQUEsQ0FBSyxHQUFBLENBQUksTUFBQSxDQUNUVCwwQkFBQUEsQ0FDQVUsbUJBQ0YsRUFDQSxJQUFBLENBQUssSUFBQSxDQUFPSCxFQUNkLENBQ0EsT0FBTyxJQUFBLENBQUssSUFDZCxDQUVBLENBQUMsTUFBQSxDQUFPLE9BQU8sQ0FBQSxFQUFVLENBQ3ZCLElBQUEsQ0FBSyxHQUFBLENBQUksTUFBQSxDQUFPLE9BQU8sQ0FBQSxFQUFFLENBQ3pCLElBQUEsQ0FBSyxHQUFBLENBQUksTUFBQSxDQUFPLE9BQU8sQ0FBQSxFQUFFLENBQ3pCLElBQUEsQ0FBSyxHQUFBLENBQUksTUFBQSxDQUFPLE9BQU8sQ0FBQSxFQUFFLENBQ3pCLElBQUEsQ0FBSyxJQUFBLEdBQU8sT0FBTyxPQUFPLENBQUEsR0FDNUIsQ0FDRixDQUFBLENDeERBLElBQU1JLEVBQUFBLENBQW1ELENBQUUsQ0FBQ0MsMkJBQWlCLEVBQUcsS0FBQSxDQUFPLENBQUNDLDRCQUFrQixFQUFHLE1BQU8sQ0FBQSxDQVd2R0MsRUFBQUEsQ0FBTixNQUFNQyxDQUFtQyxDQUN0QyxJQUFBLENBQ0EsT0FBQSxDQUNBLElBQUEsQ0FDQSxRQUFBLENBQ0EsT0FBQSxDQUNBLFVBQUEsQ0FDQSxZQUFBLENBQ0EsTUFBQSxDQUNBLE9BQUEsQ0FDQSxRQUFBLENBQ0EsT0FBQSxDQUNBLEtBQU8sRUFBQSxDQUVQLFdBQUEsQ0FBWXhDLENBQUFBLENBQW1CYSxDQUFBQSxDQUFnQjRCLENBQUFBLENBQThELENBQ25ILElBQUEsQ0FBSyxJQUFBLENBQU96QyxDQUFBQSxDQUNaLElBQUEsQ0FBSyxPQUFBLENBQVVhLENBQUFBLENBQ2YsSUFBQSxDQUFLLFFBQUEsQ0FBV2IsQ0FBQUEsQ0FBSSxVQUFBLENBQ3BCLEtBQUssT0FBQSxDQUFVeUMsQ0FBQUEsQ0FDZixJQUFBLENBQUssVUFBQSxDQUFhekMsQ0FBQUEsQ0FBSSxTQUFBLENBQ3RCLElBQUEsQ0FBSyxJQUFBLENBQU9TLENBQUFBLEVBQVcsQ0FDdkIsSUFBQSxDQUFLLFlBQUEsQ0FBZSxJQUFJRCxZQUFBQSxDQUN4QixJQUFBLENBQUssWUFBQSxDQUFhLEtBQUEsR0FDcEIsQ0FFQSxhQUFhLE1BQUEsQ0FBT3RILENBQUFBLENBQWtELENBQ3BFLElBQU1pSSxDQUFBQSxDQUFRQyxZQUFBQSxDQUFNLGlCQUFBLENBQWtCbEksQ0FBQUEsQ0FBSyxTQUFTLENBQUEsQ0FDcEQsR0FBSSxDQUFDaUksRUFBTyxNQUFNLElBQUksS0FBQSxDQUFNLENBQUEseUJBQUEsRUFBNEJqSSxDQUFBQSxDQUFLLFNBQVMsQ0FBQSxDQUFFLENBQUEsQ0FDeEUsSUFBTThHLENBQUFBLENBQU0sSUFBSUMsbUJBQUFBLENBQ2hCRCxDQUFBQSxDQUFJLGFBQUEsQ0FBY21CLENBQUssQ0FBQSxDQUN2Qm5CLEVBQUksT0FBQSxDQUFVbUIsQ0FBQUEsQ0FBTSxFQUFBLENBQ3BCbkIsQ0FBQUEsQ0FBSSxZQUFBLENBQWU5RyxDQUFBQSxDQUFLLFlBQUEsQ0FDeEI4RyxDQUFBQSxDQUFJLFVBQUEsQ0FBYTlHLENBQUFBLENBQUssYUFBQSxDQUN0QjhHLENBQUFBLENBQUksYUFBQSxDQUFnQjBDLGtDQUFBQSxDQUNwQjFDLENBQUFBLENBQUksUUFBQSxDQUFXLElBQUlFLGVBQUFBLENBQVMsQ0FBQSxDQUFHaEgsQ0FBQUEsQ0FBSyxhQUFhLENBQUEsQ0FDakQ4RyxDQUFBQSxDQUFJLE9BQUEsQ0FBVSxNQUFBLENBQU85RyxDQUFBQSxDQUFLLE9BQU8sQ0FBQSxDQUM3QkEsQ0FBQUEsQ0FBSyxZQUFBLEVBQWM4RyxDQUFBQSxDQUFJLFFBQUEsQ0FBU0cscUNBQTJCLEVBQy9EQyxrQkFBQUEsQ0FBWSxZQUFBLENBQWEsTUFBTUosQ0FBQUEsQ0FBSSxLQUFBLENBQU1tQixDQUFBQSxDQUFPLElBQUksQ0FBQSxDQUFHLGdCQUFnQixDQUFBLENBQ3ZFLElBQU1OLENBQUFBLENBQVMzSCxDQUFBQSxDQUFLLEtBQUEsQ0FBTSxTQUFBLENBQVU4RyxDQUFHLEVBQ3ZDLE9BQU8sSUFBSXdDLENBQUFBLENBQWF4QyxDQUFBQSxDQUFLYSxDQUFBQSxDQUFRM0gsQ0FBQUEsQ0FBSyxZQUFZLENBQ3hELENBRUEsWUFBQSxDQUFheUosQ0FBQUEsQ0FBNEIsQ0FDdkMsSUFBQSxDQUFLLE1BQUEsR0FBUyxNQUFBLENBQU8sT0FBTyxHQUFFLENBQzlCLElBQUEsQ0FBSyxPQUFBLENBQVVBLENBQUFBLENBQ2YsSUFBTUMsQ0FBQUEsQ0FBUSxJQUFJQyxrQkFBQUEsQ0FDbEJELENBQUFBLENBQU0sS0FBQSxFQUFNLENBQ1osSUFBTUUsQ0FBQUEsQ0FBVUMsYUFBQUEsQ0FBTyxTQUFBLENBQVUsU0FBUyxFQUNwQ0MsQ0FBQUEsQ0FBU0osQ0FBQUEsQ0FBTSxZQUFBLENBQ25CRSxDQUFBQSxDQUNBLEtBQUEsQ0FDQSxDQUFBLFlBQUEsRUFBZUgsQ0FBWSxDQUFBLGtEQUFBLEVBQXFEQSxDQUFZLENBQUEsQ0FDOUYsQ0FBQSxDQUNBLEdBQUksQ0FBQ0ssQ0FBQUEsQ0FBUSxNQUFNLElBQUksTUFBTSwwQkFBMEIsQ0FBQSxDQUN2RCxJQUFNQyxDQUFBQSxDQUFjRixhQUFBQSxDQUFPLFNBQUEsQ0FBVSxhQUFhLENBQUEsQ0FDNUNHLENBQUFBLENBQVVOLENBQUFBLENBQU0sWUFBQSxDQUFhSyxDQUFBQSxDQUFhLE1BQU0sQ0FBQSxDQUN0RCxHQUFJLENBQUNDLEVBQVMsTUFBTSxJQUFJLEtBQUEsQ0FBTSw4QkFBOEIsQ0FBQSxDQUU1RCxJQUFNQyxDQUFBQSxDQUFhLENBQUEsb0JBQUEsRUFESGYsRUFBQUEsQ0FBZ0IsSUFBQSxDQUFLLE9BQU8sQ0FBQSxFQUFLLEtBQ0EsQ0FBQSxjQUFBLEVBQWlCLElBQUEsQ0FBSyxRQUFRLDBDQUEwQyxJQUFBLENBQUssVUFBVSxDQUFBLElBQUEsQ0FBQSxDQUNsSWdCLENBQUFBLENBQVVDLGtCQUFBQSxDQUFZLFVBQUEsQ0FBVyxDQUFDLENBQUUsSUFBQSxDQUFNLElBQUEsQ0FBTSxTQUFBLENBQVdMLENBQUFBLENBQVEsTUFBQSxDQUFRLENBQUUsQ0FBQyxDQUFDLEVBQy9FTSxDQUFBQSxDQUFTRCxrQkFBQUEsQ0FBWSxVQUFBLENBQVcsQ0FBQyxDQUFFLElBQUEsQ0FBTSxLQUFBLENBQU8sU0FBQSxDQUFXSCxDQUFBQSxDQUFTLE1BQUEsQ0FBUSxDQUFFLENBQUMsQ0FBQyxDQUFBLENBQ3RGOUMsa0JBQUFBLENBQVksWUFBQSxDQUFhd0MsRUFBTSxRQUFBLENBQVNPLENBQUFBLENBQVlHLENBQUFBLENBQVFGLENBQU8sQ0FBQSxDQUFHLGdCQUFnQixDQUFBLENBQ3RGaEQsa0JBQUFBLENBQVksWUFBQSxDQUFhd0MsQ0FBQUEsQ0FBTSxVQUFBLEVBQVcsQ0FBRyxjQUFjLENBQUEsQ0FDM0QsSUFBQSxDQUFLLE1BQUEsQ0FBU0EsRUFDZCxJQUFBLENBQUssT0FBQSxDQUFVSSxDQUFBQSxDQUNmLElBQUEsQ0FBSyxRQUFBLENBQVdFLEVBQ2xCLENBRUEsTUFBTSxNQUFBLENBQU9LLENBQUFBLENBQWF6QyxDQUFBQSxDQUFtQyxDQUszRCxJQUFBYSxDQUFBQSxDQUFBLEVBQUEsQ0FBQSxHQUFBLENBSkEsR0FBSSxDQUFDLElBQUEsQ0FBSyxPQUFBLEVBQVcsQ0FBQyxJQUFBLENBQUssT0FBQSxDQUFTLE9BQ3BDLElBQU12SCxDQUFBQSxDQUFNLElBQUksWUFBQSxDQUFhbUosQ0FBQUEsQ0FBSSxNQUFBLENBQVFBLENBQUFBLENBQUksVUFBQSxDQUFZQSxDQUFBQSxDQUFJLFVBQUEsQ0FBYSxDQUFDLENBQUEsQ0FDM0UsSUFBQSxJQUFTNUUsQ0FBQUEsQ0FBSSxDQUFBLENBQUdBLENBQUFBLENBQUl2RSxDQUFBQSxDQUFJLE1BQUEsQ0FBUXVFLENBQUFBLEVBQUFBLENBQVUsUUFBQSxDQUFTdkUsQ0FBQUEsQ0FBSXVFLENBQUMsQ0FBRSxDQUFBLEdBQUd2RSxDQUFBQSxDQUFJdUUsQ0FBQyxDQUFBLENBQUksR0FDdEUsSUFBTTZFLENBQUFBLENBQVdwSixDQUFBQSxDQUFJLE1BQUEsRUFBVSxDQUFBLENBQy9CLElBQU1tRyxDQUFBQSxDQUFRcUIsQ0FBQUEsQ0FBQUQsQ0FBQUEsQ0FBQW5CLFlBQUFBLENBQU0sZUFBQSxDQUFnQixNQUFBLENBQU8sSUFBQSxDQUFLcEcsQ0FBQUEsQ0FBSSxNQUFBLENBQVFBLENBQUFBLENBQUksV0FBWUEsQ0FBQUEsQ0FBSSxVQUFVLENBQUEsQ0FBRyxDQUMzRixTQUFBLENBQVdvSixDQUFBQSxDQUNYLE1BQUEsQ0FBUW5CLDJCQUFBQSxDQUNSLFVBQUEsQ0FBWSxJQUFBLENBQUssT0FBQSxDQUNqQixhQUFBLENBQWVLLGtDQUFBQSxDQUNmLEdBQUEsQ0FBSyxJQUFBLENBQUssSUFBQSxDQUNWLFNBQVUsQ0FBRSxHQUFBLENBQUssQ0FBQSxDQUFHLEdBQUEsQ0FBSyxJQUFBLENBQUssT0FBUSxDQUN4QyxDQUFDLENBQUEsQ0FBQSxDQUNELElBQUEsQ0FBSyxJQUFBLEVBQVEsTUFBQSxDQUFPYyxDQUFRLENBQUEsQ0FDNUJwRCxrQkFBQUEsQ0FBWSxZQUFBLENBQWEsTUFBTSxJQUFBLENBQUssT0FBQSxDQUFRLGlCQUFBLENBQWtCRyxDQUFLLENBQUEsQ0FBRyxtQkFBbUIsQ0FBQSxDQUN6RixNQUFNLElBQUEsQ0FBSyxLQUFBLENBQU1PLENBQUssRUFBQSxDQUFBLE1BVnRCakQsQ0FBQUEsQ0FBQSxDQUFBLElBQUFnRSxDQUFBQSxDQUFBaEUsQ0FBQUEsQ0FBQWlFLEVBQUEsS0FBQSxDQUFBLE9BQUEsQ0FBQUMsQ0FBQUEsQ0FBQUosQ0FBQUEsQ0FBQUUsQ0FBQUEsQ0FBQUMsQ0FBQUEsRUFBQUEsQ0FXRixDQUVBLE1BQU0sS0FBQSxDQUFNaEIsQ0FBQUEsQ0FBbUMsQ0FDekMsSUFBQSxDQUFLLE9BQUEsR0FDUCxNQUFNLElBQUEsQ0FBSyxPQUFBLENBQVEsaUJBQUEsQ0FBa0IsSUFBSSxDQUFBLENBQ3pDLE1BQU0sSUFBQSxDQUFLLEtBQUEsQ0FBTUEsQ0FBSyxDQUFBLENBQUEsQ0FFeEIsTUFBTSxJQUFBLENBQUssSUFBQSxDQUFLLFNBQUEsQ0FBVSxJQUFJLENBQUEsQ0FDOUIsTUFBTSxJQUFBLENBQUssVUFBQSxDQUFXQSxDQUFLLEVBQzdCLENBRUEsQ0FBQyxNQUFBLENBQU8sT0FBTyxDQUFBLEVBQVUsQ0FDdkIsSUFBQSxDQUFLLElBQUEsQ0FBSyxJQUFBLEVBQUssQ0FDZixJQUFBLENBQUssWUFBQSxDQUFhLElBQUEsRUFBSyxDQUN2QixJQUFBLENBQUssTUFBQSxHQUFTLE9BQU8sT0FBTyxDQUFBLEVBQUUsQ0FDOUIsSUFBQSxDQUFLLElBQUEsQ0FBSyxXQUFBLEdBQ1osQ0FFQSxNQUFjLEtBQUEsQ0FBTUEsQ0FBQUEsQ0FBbUMsQ0FDckQsT0FBYSxDQUNYLElBQU0xQixDQUFBQSxDQUFJLE1BQU0sSUFBQSxDQUFLLFFBQUEsQ0FBVSxrQkFBQSxDQUFtQixJQUFBLENBQUssWUFBWSxDQUFBLENBQ25FLEdBQUlBLENBQUFBLEdBQU0yQix3QkFBQUEsRUFBa0IzQixDQUFBQSxHQUFNNEIscUJBQUFBLENBQWEsTUFDL0NaLGtCQUFBQSxDQUFZLFlBQUEsQ0FBYWhCLENBQUFBLENBQUcsb0JBQW9CLEVBQ2hEZ0Isa0JBQUFBLENBQVksWUFBQSxDQUFhLE1BQU0sSUFBQSxDQUFLLElBQUEsQ0FBSyxTQUFBLENBQVUsSUFBQSxDQUFLLFlBQVksQ0FBQSxDQUFHLG9CQUFvQixDQUFBLENBQzNGLElBQUEsQ0FBSyxZQUFBLENBQWEsS0FBQSxFQUFNLENBQ3hCLE1BQU0sS0FBSyxVQUFBLENBQVdVLENBQUssRUFDN0IsQ0FDRixDQUVRLFVBQUEsQ0FBV0EsQ0FBQUEsQ0FBbUMsQ0FDcEQsT0FBT0YsRUFBQUEsQ0FBYSxJQUFBLENBQUssSUFBQSxDQUFNLElBQUEsQ0FBSyxJQUFBLENBQU0sSUFBQSxDQUFLLE9BQUEsQ0FBU0UsQ0FBSyxDQUMvRCxDQUNGLENBQUEsQ0N4Sk8sU0FBUzJDLENBQUFBLENBQVNDLENBQUFBLENBQXdCLENBQy9DLElBQU1DLENBQUFBLENBQU0sTUFBQSxDQUFPLEtBQUEsQ0FBTUQsQ0FBQUEsQ0FBSyxNQUFBLEVBQVUsQ0FBQyxDQUFBLENBQ3pDLElBQUEsSUFBUy9FLENBQUFBLENBQUksQ0FBQSxDQUFHQSxFQUFJZ0YsQ0FBQUEsQ0FBSSxNQUFBLENBQVFoRixDQUFBQSxFQUFBQSxDQUFLLENBQ25DLElBQUlpRixDQUFBQSxDQUFPLENBQUEsQ0FDWCxJQUFBLElBQVN0SSxDQUFBQSxDQUFJLENBQUEsQ0FBR0EsQ0FBQUEsQ0FBSSxDQUFBLENBQUdBLENBQUFBLEVBQUFBLENBQUtzSSxDQUFBQSxDQUFRQSxDQUFBQSxFQUFRLENBQUEsQ0FBS0YsRUFBSy9FLENBQUFBLENBQUksQ0FBQSxDQUFJckQsQ0FBQyxDQUFBLENBQy9EcUksQ0FBQUEsQ0FBSWhGLENBQUMsQ0FBQSxDQUFJaUYsRUFDWCxDQUNBLE9BQU9ELENBQ1QsQ0FFTyxJQUFNRSxDQUFBQSxDQUFOLEtBQWdCLENBQ3JCLEtBQWlCLEVBQUMsQ0FDbEIsQ0FBQSxDQUFFQyxDQUFBQSxDQUFhQyxDQUFBQSxDQUFXLENBQ3hCLElBQUEsSUFBU3BGLENBQUFBLENBQUlvRixDQUFBQSxDQUFJLENBQUEsQ0FBR3BGLENBQUFBLEVBQUssQ0FBQSxDQUFHQSxDQUFBQSxFQUFBQSxDQUFLLElBQUEsQ0FBSyxJQUFBLENBQUssSUFBQSxDQUFNbUYsR0FBT25GLENBQUFBLENBQUssQ0FBQyxFQUNoRSxDQUNBLElBQUEsQ0FBS21GLENBQUFBLENBQXVCLENBQzFCLElBQUEsQ0FBSyxJQUFBLENBQUssSUFBQSxDQUFLQSxDQUFBQSxDQUFNLENBQUEsQ0FBSSxDQUFDLEVBQzVCLENBQ0EsRUFBQSxDQUFHQSxFQUFhLENBQ2QsSUFBTWxILENBQUFBLENBQUlrSCxDQUFBQSxDQUFNLENBQUEsQ0FDVkUsQ0FBQUEsQ0FBTSxFQUFBLENBQUssSUFBQSxDQUFLLEtBQUEsQ0FBTXBILENBQUMsQ0FBQSxDQUM3QixJQUFBLElBQVMrQixDQUFBQSxDQUFJLENBQUEsQ0FBR0EsQ0FBQUEsQ0FBSXFGLENBQUFBLENBQU0sRUFBR3JGLENBQUFBLEVBQUFBLENBQUssSUFBQSxDQUFLLElBQUEsQ0FBSyxJQUFBLENBQUssQ0FBQyxDQUFBLENBQ2xELElBQUEsSUFBU0EsQ0FBQUEsQ0FBSXFGLENBQUFBLENBQU0sQ0FBQSxDQUFHckYsQ0FBQUEsRUFBSyxDQUFBLENBQUdBLENBQUFBLEVBQUFBLENBQUssSUFBQSxDQUFLLElBQUEsQ0FBSyxJQUFBLENBQU0vQixHQUFLK0IsQ0FBQUEsQ0FBSyxDQUFDLEVBQ2hFLENBQ0EsS0FBQSxDQUFNc0YsQ0FBQUEsQ0FBYSxDQUNqQixLQUFPLElBQUEsQ0FBSyxJQUFBLENBQUssTUFBQSxDQUFTLENBQUEsR0FBTSxDQUFBLEVBQUcsSUFBQSxDQUFLLElBQUEsQ0FBSyxJQUFBLENBQUtBLENBQUcsRUFDdkQsQ0FDQSxJQUFBLENBQUs3SixDQUFBQSxDQUFlOEosQ0FBQUEsQ0FBZUYsQ0FBQUEsQ0FBYSxDQUM5QyxJQUFBLElBQVNyRixDQUFBQSxDQUFJLENBQUEsQ0FBR0EsQ0FBQUEsQ0FBSXFGLENBQUFBLENBQUtyRixDQUFBQSxFQUFBQSxDQUFLLElBQUEsQ0FBSyxJQUFBLENBQUssSUFBQSxDQUFLdkUsRUFBSThKLENBQUFBLENBQVF2RixDQUFDLENBQUUsRUFDOUQsQ0FDRixDQUFBLENBRWF3RixDQUFBQSxDQUFOLEtBQWdCLENBQ2IsS0FBQSxDQUNSLEdBQUEsQ0FBTSxDQUFBLENBQ04sV0FBQSxDQUFZM04sQ0FBQUEsQ0FBYyxDQUN4QixJQUFBLENBQUssTUFBUSxFQUFDLENBQ2QsSUFBQSxJQUFTbUksQ0FBQUEsQ0FBSSxDQUFBLENBQUdBLENBQUFBLENBQUluSSxDQUFBQSxDQUFLLE1BQUEsQ0FBUW1JLENBQUFBLEVBQUFBLENBQy9CLElBQUEsSUFBU3JELENBQUFBLENBQUksQ0FBQSxDQUFHQSxDQUFBQSxFQUFLLENBQUEsQ0FBR0EsQ0FBQUEsRUFBQUEsQ0FBSyxJQUFBLENBQUssTUFBTSxJQUFBLENBQU05RSxDQUFBQSxDQUFLbUksQ0FBQyxDQUFBLEVBQU1yRCxDQUFBQSxDQUFLLENBQUMsRUFFcEUsQ0FDQSxJQUFJLElBQUEsRUFBTyxDQUNULE9BQU8sSUFBQSxDQUFLLEtBQ2QsQ0FDQSxJQUFBLENBQUt5SSxFQUFtQixDQUN0QixJQUFJRCxDQUFBQSxDQUFNLENBQUEsQ0FDVixJQUFBLElBQVNuRixDQUFBQSxDQUFJLENBQUEsQ0FBR0EsQ0FBQUEsQ0FBSW9GLENBQUFBLENBQUdwRixDQUFBQSxFQUFBQSxDQUFLbUYsQ0FBQUEsQ0FBT0EsQ0FBQUEsRUFBTyxDQUFBLENBQUssSUFBQSxDQUFLLEtBQUEsQ0FBTSxJQUFBLENBQUssS0FBSyxDQUFBLENBQ3BFLE9BQU9BLENBQ1QsQ0FDQSxNQUFBLEVBQWlCLENBQ2YsSUFBSU0sQ0FBQUEsQ0FBUSxDQUFBLENBQ1osS0FBTyxJQUFBLENBQUssS0FBQSxDQUFNLElBQUEsQ0FBSyxHQUFHLENBQUEsR0FBTSxDQUFBLEVBQzlCQSxJQUNBLElBQUEsQ0FBSyxHQUFBLEVBQUEsQ0FFUCxJQUFBLENBQUssR0FBQSxFQUFBLENBQ0wsSUFBSU4sQ0FBQUEsQ0FBTSxDQUFBLENBQ1YsSUFBQSxJQUFTbkYsQ0FBQUEsQ0FBSSxDQUFBLENBQUdBLENBQUFBLENBQUl5RixDQUFBQSxDQUFPekYsQ0FBQUEsRUFBQUEsQ0FBS21GLENBQUFBLENBQU9BLENBQUFBLEVBQU8sQ0FBQSxDQUFLLEtBQUssS0FBQSxDQUFNLElBQUEsQ0FBSyxHQUFBLEVBQUssQ0FBQSxDQUN4RSxPQUFPQSxDQUFBQSxDQUFNLENBQ2YsQ0FDRixDQUFBLENDM0RBLElBQU1PLENBQUFBLENBQXFCLE1BQUEsQ0FBTyxJQUFBLENBQUssQ0FBQyxDQUFBLENBQU0sQ0FBQSxDQUFNLEVBQU0sQ0FBSSxDQUFDLENBQUEsQ0FLeEQsSUFBTUMsRUFBQUEsQ0FBZSxFQUFBLENBR3JCLElBQU1DLEVBQUFBLENBQXFCLEVBQUEsQ0FDckJDLEVBQUFBLENBQVUsRUFBQSxDQUNWQyxFQUFBQSxDQUFVLEVBQUEsQ0FDVkMsRUFBQUEsQ0FBVSxFQUFBLENBQ1ZDLEVBQUFBLENBQWlCLEdBUzlCLFNBQVNDLEVBQUFBLENBQWFDLENBQUFBLENBQWlCQyxDQUFBQSxDQUF3RSxDQUM3RyxJQUFNQyxDQUFBQSxDQUFRRixDQUFBQSxFQUFXLENBQUEsQ0FBSyxFQUFBLENBQ3hCRyxDQUFBQSxDQUFBQSxDQUFZSCxDQUFBQSxDQUFVLENBQUEsR0FBTSxDQUFBLENBQU9DLENBQUFBLEVBQVcsQ0FBQSxDQUFLLEdBQ25ERyxDQUFBQSxDQUFhSCxDQUFBQSxDQUFVLENBQUEsQ0FDN0IsT0FBTyxDQUFFLElBQUEsQ0FBQUMsQ0FBQUEsQ0FBTSxPQUFBLENBQUFDLENBQUFBLENBQVMsVUFBQSxDQUFBQyxDQUFXLENBQ3JDLENBRU8sU0FBU0MsRUFBQUEsQ0FBZ0JILENBQUFBLENBQWNDLEVBQWlCQyxDQUFBQSxDQUFzQyxDQUNuRyxJQUFNRSxDQUFBQSxDQUFBQSxDQUFVSixDQUFBQSxDQUFPLEVBQUEsR0FBUyxDQUFBLENBQU9DLENBQUFBLEVBQVcsQ0FBQSxDQUFLLENBQUEsQ0FDakRJLENBQUFBLENBQUFBLENBQVVKLENBQUFBLENBQVUsRUFBQSxHQUFTLENBQUEsQ0FBTUMsQ0FBQUEsQ0FBYSxDQUFBLENBQ3RELE9BQU8sQ0FBQ0UsQ0FBQUEsQ0FBT0MsQ0FBSyxDQUN0QixDQUdPLFNBQVNDLENBQUFBLENBQWNDLENBQUFBLENBQThCLENBQzFELElBQU1DLENBQUFBLENBQWtCLEVBQUMsQ0FDckI1RyxDQUFBQSxDQUFJLENBQUEsQ0FFUixLQUFPQSxFQUFJMkcsQ0FBQUEsQ0FBVSxNQUFBLEVBQVEsQ0FDM0IsSUFBSUUsQ0FBQUEsQ0FBUSxDQUFBLENBQ1osR0FBSTdHLENBQUFBLENBQUksQ0FBQSxDQUFJMkcsQ0FBQUEsQ0FBVSxNQUFBLEVBQVVBLENBQUFBLENBQVUzRyxDQUFDLENBQUEsR0FBTSxDQUFBLEVBQUsyRyxDQUFBQSxDQUFVM0csRUFBSSxDQUFDLENBQUEsR0FBTSxDQUFBLEVBQUsyRyxDQUFBQSxDQUFVM0csQ0FBQUEsQ0FBSSxDQUFDLENBQUEsR0FBTSxDQUFBLENBQ25HNkcsQ0FBQUEsQ0FBUSxDQUFBLENBQUEsS0FBQSxHQUVSN0csQ0FBQUEsQ0FBSSxDQUFBLENBQUkyRyxDQUFBQSxDQUFVLE1BQUEsRUFDbEJBLENBQUFBLENBQVUzRyxDQUFDLElBQU0sQ0FBQSxFQUNqQjJHLENBQUFBLENBQVUzRyxDQUFBQSxDQUFJLENBQUMsQ0FBQSxHQUFNLENBQUEsRUFDckIyRyxDQUFBQSxDQUFVM0csQ0FBQUEsQ0FBSSxDQUFDLENBQUEsR0FBTSxDQUFBLEVBQ3JCMkcsQ0FBQUEsQ0FBVTNHLENBQUFBLENBQUksQ0FBQyxDQUFBLEdBQU0sQ0FBQSxDQUVyQjZHLEVBQVEsQ0FBQSxDQUFBLEtBQ0gsQ0FDTDdHLENBQUFBLEVBQUFBLENBQ0EsUUFDRixDQUVBLElBQU04RyxDQUFBQSxDQUFXOUcsQ0FBQUEsQ0FBSTZHLENBQUFBLENBQ3JCLEdBQUlDLENBQUFBLENBQVcsQ0FBQSxDQUFrQkgsQ0FBQUEsQ0FBVSxNQUFBLENBQVEsTUFFbkQsSUFBSUksRUFBU0osQ0FBQUEsQ0FBVSxNQUFBLENBQ3ZCLElBQUEsSUFBU0ssQ0FBQUEsQ0FBSUYsQ0FBQUEsQ0FBVyxDQUFBLENBQWlCRSxDQUFBQSxDQUFJTCxDQUFBQSxDQUFVLE1BQUEsQ0FBUyxDQUFBLENBQUdLLENBQUFBLEVBQUFBLENBQ2pFLEdBQ0VMLENBQUFBLENBQVVLLENBQUMsQ0FBQSxHQUFNLENBQUEsRUFDakJMLEVBQVVLLENBQUFBLENBQUksQ0FBQyxDQUFBLEdBQU0sQ0FBQSxHQUNwQkwsQ0FBQUEsQ0FBVUssQ0FBQUEsQ0FBSSxDQUFDLENBQUEsR0FBTSxDQUFBLEVBQU1BLENBQUFBLENBQUksQ0FBQSxDQUFJTCxDQUFBQSxDQUFVLE1BQUEsRUFBVUEsQ0FBQUEsQ0FBVUssQ0FBQUEsQ0FBSSxDQUFDLElBQU0sQ0FBQSxFQUFLTCxDQUFBQSxDQUFVSyxDQUFBQSxDQUFJLENBQUMsQ0FBQSxHQUFNLENBQUEsQ0FBQSxDQUN2RyxDQUNBRCxDQUFBQSxDQUFTQyxDQUFBQSxDQUNULEtBQ0YsQ0FHRixHQUFNLENBQUUsSUFBQSxDQUFBWixDQUFBQSxDQUFNLE9BQUEsQ0FBQUMsQ0FBUSxDQUFBLENBQUlKLEVBQUFBLENBQWFVLENBQUFBLENBQVVHLENBQVEsQ0FBQSxDQUFJSCxDQUFBQSxDQUFVRyxDQUFBQSxDQUFXLENBQUMsQ0FBRSxDQUFBLENBQ3JGRixDQUFBQSxDQUFLLElBQUEsQ0FBSyxDQUFFLElBQUEsQ0FBQVIsQ0FBQUEsQ0FBTSxPQUFBLENBQUFDLEVBQVMsSUFBQSxDQUFNTSxDQUFBQSxDQUFVLFFBQUEsQ0FBU0csQ0FBQUEsQ0FBVUMsQ0FBTSxDQUFFLENBQUMsQ0FBQSxDQUN2RS9HLENBQUFBLENBQUkrRyxFQUNOLENBRUEsT0FBT0gsQ0FDVCxDQUdPLFNBQVNLLEVBQUFBLENBQWtCQyxFQUFhYixDQUFBQSxDQUF5QixDQUN0RSxJQUFNcEssQ0FBQUEsQ0FBTSxNQUFBLENBQU8sSUFBQSxDQUFLaUwsQ0FBRyxDQUFBLENBQ3JCLENBQUUsSUFBQSxDQUFBZCxDQUFBQSxDQUFNLFVBQUEsQ0FBQUUsQ0FBVyxDQUFBLENBQUlMLEVBQUFBLENBQWFoSyxDQUFBQSxDQUFJLENBQUMsQ0FBQSxDQUFJQSxDQUFBQSxDQUFJLENBQUMsQ0FBRSxDQUFBLENBQ3BELENBQUNrTCxDQUFBQSxDQUFJQyxDQUFFLENBQUEsQ0FBSWIsRUFBQUEsQ0FBZ0JILENBQUFBLENBQU1DLENBQUFBLENBQVNDLENBQVUsQ0FBQSxDQUMxRCxPQUFBckssQ0FBQUEsQ0FBSSxDQUFDLENBQUEsQ0FBSWtMLENBQUFBLENBQ1RsTCxDQUFBQSxDQUFJLENBQUMsQ0FBQSxDQUFJbUwsQ0FBQUEsQ0FDRm5MLENBQ1QsQ0FhTyxTQUFTb0wsQ0FBQUEsQ0FBMEJ4UCxDQUFBQSxDQUFzQixDQUM5RCxJQUFNb0UsQ0FBQUEsQ0FBZ0IsRUFBQyxDQUN2QixRQUFTK0QsQ0FBQUEsQ0FBSSxDQUFBLENBQUdBLENBQUFBLENBQUluSSxDQUFBQSxDQUFLLE1BQUEsQ0FBUW1JLENBQUFBLEVBQUFBLENBQzNCQSxDQUFBQSxDQUFJLENBQUEsQ0FBSW5JLENBQUFBLENBQUssTUFBQSxFQUFVQSxDQUFBQSxDQUFLbUksQ0FBQyxDQUFBLEdBQU0sQ0FBQSxFQUFLbkksQ0FBQUEsQ0FBS21JLENBQUFBLENBQUksQ0FBQyxDQUFBLEdBQU0sQ0FBQSxFQUFLbkksQ0FBQUEsQ0FBS21JLENBQUFBLENBQUksQ0FBQyxDQUFBLEdBQU0sQ0FBQSxFQUMvRS9ELENBQUFBLENBQUksSUFBQSxDQUFLLENBQUEsQ0FBRyxDQUFDLENBQUEsQ0FDYitELENBQUFBLEVBQUssQ0FBQSxFQUVML0QsQ0FBQUEsQ0FBSSxJQUFBLENBQUtwRSxDQUFBQSxDQUFLbUksQ0FBQyxDQUFFLENBQUEsQ0FHckIsT0FBTyxNQUFBLENBQU8sSUFBQSxDQUFLL0QsQ0FBRyxDQUN4QixDQUdPLFNBQVNxTCxDQUFBQSxDQUF1QkosQ0FBQUEsQ0FBcUIsQ0FDMUQsSUFBTWpMLENBQUFBLENBQWdCLEVBQUMsQ0FDdkJBLENBQUFBLENBQUksSUFBQSxDQUFLaUwsQ0FBQUEsQ0FBSSxDQUFDLENBQUEsQ0FBSUEsQ0FBQUEsQ0FBSSxDQUFDLENBQUUsQ0FBQSxDQUN6QixJQUFJekIsQ0FBQUEsQ0FBUSxDQUFBLENBQ1osSUFBQSxJQUFTekYsQ0FBQUEsQ0FBSSxDQUFBLENBQUdBLEVBQUlrSCxDQUFBQSxDQUFJLE1BQUEsQ0FBUWxILENBQUFBLEVBQUFBLENBQzFCeUYsQ0FBQUEsR0FBVSxDQUFBLEVBQUt5QixDQUFBQSxDQUFJbEgsQ0FBQyxDQUFBLEVBQU0sQ0FBQSxHQUM1Qi9ELENBQUFBLENBQUksSUFBQSxDQUFLLENBQUMsQ0FBQSxDQUNWd0osQ0FBQUEsQ0FBUSxDQUFBLENBQUEsQ0FFTnlCLENBQUFBLENBQUlsSCxDQUFDLENBQUEsR0FBTSxDQUFBLENBQUd5RixDQUFBQSxFQUFBQSxDQUNiQSxDQUFBQSxDQUFRLENBQUEsQ0FDYnhKLENBQUFBLENBQUksSUFBQSxDQUFLaUwsQ0FBQUEsQ0FBSWxILENBQUMsQ0FBRSxDQUFBLENBRWxCLE9BQU8sTUFBQSxDQUFPLElBQUEsQ0FBSy9ELENBQUcsQ0FDeEIsQ0NqSEEsSUFBTXNMLEVBQUFBLENBQWMsRUFBQSxDQUNkQyxFQUFBQSxDQUFjLEVBQUEsQ0FDZEMsRUFBQUEsQ0FBZSxDQUFBLENBQ2ZDLEVBQUFBLENBQWtCLEVBQUEsQ0FDbEJDLEVBQUFBLENBQWUsQ0FBQSxDQUNmQyxFQUFBQSxDQUFlLENBQUEsQ0FFckIsU0FBU0MsRUFBQUEsQ0FBTzdDLENBQUFBLENBQWE4QyxFQUFtQjdRLENBQUFBLENBQW9CLENBQ2xFLElBQU1nTyxDQUFBQSxDQUFPNkMsQ0FBQUEsRUFBYSxDQUFBLENBQ3BCQyxDQUFBQSxDQUFPLENBQUEsRUFBTSxDQUFBLEVBQUtELENBQUFBLENBQVksQ0FBQSxDQUFBLENBQzlCRSxDQUFBQSxDQUFNaEQsQ0FBQUEsQ0FBSUMsQ0FBSSxDQUFBLEVBQUssQ0FBQSxDQUN6QkQsRUFBSUMsQ0FBSSxDQUFBLENBQUloTyxDQUFBQSxDQUFRK1EsQ0FBQUEsQ0FBTUQsQ0FBQUEsQ0FBT0MsQ0FBQUEsQ0FBTSxDQUFDRCxFQUMxQyxDQUVBLFNBQVNFLEVBQUFBLENBQVNDLENBQUFBLENBQWlCQyxDQUFBQSxDQUE2QixDQUM5RCxJQUFNQyxDQUFBQSxDQUFPZixFQUEwQmEsQ0FBTyxDQUFBLENBQzlDLE9BQUFMLEVBQUFBLENBQU9PLENBQUFBLENBQU1ELENBQUFBLENBQWNWLEVBQUFBLENBQWMsQ0FBQyxDQUFBLENBQzFDSSxFQUFBQSxDQUFPTyxDQUFBQSxDQUFNRCxDQUFBQSxDQUFjVCxFQUFBQSxDQUFpQixDQUFDLENBQUEsQ0FDdENKLENBQUFBLENBQXVCYyxDQUFJLENBQ3BDLENBR08sU0FBU0MsRUFBQUEsQ0FBa0IxQixDQUFBQSxDQUEyQixDQUMzRCxJQUFNQyxDQUFBQSxDQUFPRixDQUFBQSxDQUFjQyxDQUFTLENBQUEsQ0FDcEMsR0FBSUMsQ0FBQUEsQ0FBSyxNQUFBLEdBQVcsQ0FBQSxDQUFHLE9BQU9ELEVBQzlCLElBQU0yQixDQUFBQSxDQUFtQixFQUFDLENBQzFCLElBQUEsSUFBV3BCLENBQUFBLElBQU9OLENBQUFBLENBQU0sQ0FDdEIsSUFBSS9PLENBQUFBLENBQU9xUCxDQUFBQSxDQUFJLElBQUEsQ0FDWEEsQ0FBQUEsQ0FBSSxJQUFBLEdBQVNyQixFQUFBQSxDQUFTaE8sQ0FBQUEsQ0FBT29RLEdBQVNmLENBQUFBLENBQUksSUFBQSxDQUFNSyxFQUFXLENBQUEsQ0FDdERMLENBQUFBLENBQUksSUFBQSxHQUFTcEIsRUFBQUEsR0FBU2pPLENBQUFBLENBQU9vUSxFQUFBQSxDQUFTZixDQUFBQSxDQUFJLElBQUEsQ0FBTU0sRUFBVyxDQUFBLENBQUEsQ0FDcEVjLENBQUFBLENBQU8sSUFBQSxDQUFLNUMsQ0FBQUEsQ0FBb0I3TixDQUFJLEVBQ3RDLENBQ0EsT0FBTyxNQUFBLENBQU8sTUFBQSxDQUFPeVEsQ0FBTSxDQUM3QixDQUlBLFNBQVNDLEVBQUFBLENBQWFDLENBQUFBLENBQWVWLENBQUFBLENBQW1CVyxDQUFBQSxDQUF3QixDQUM5RSxJQUFNTCxDQUFBQSxDQUFPZixFQUEwQm1CLENBQUssQ0FBQSxDQUN0Q0UsQ0FBQUEsQ0FBSyxJQUFJbEQsQ0FBQUEsQ0FBVTRDLENBQUksQ0FBQSxDQUN2Qk8sQ0FBQUEsQ0FBSyxJQUFJekQsQ0FBQUEsQ0FDZixJQUFBLElBQVNsRixDQUFBQSxDQUFJLENBQUEsQ0FBR0EsQ0FBQUEsQ0FBSThILENBQUFBLENBQVc5SCxDQUFBQSxFQUFBQSxDQUFLMkksRUFBRyxJQUFBLENBQUssSUFBQSxDQUFLRCxDQUFBQSxDQUFHLElBQUEsQ0FBSyxDQUFDLENBQUMsQ0FBQSxDQUczRCxJQUZBQSxDQUFBQSxDQUFHLE1BQUEsRUFBTyxDQUNWQyxDQUFBQSxDQUFHLEVBQUEsQ0FBR0YsQ0FBTSxDQUFBLENBQ0xDLENBQUFBLENBQUcsSUFBTUEsQ0FBQUEsQ0FBRyxJQUFBLENBQUssTUFBQSxFQUFRQyxDQUFBQSxDQUFHLElBQUEsQ0FBSyxJQUFBLENBQUtELENBQUFBLENBQUcsSUFBQSxDQUFLLENBQUMsQ0FBQyxDQUFBLENBQ3ZELEtBQU9DLENBQUFBLENBQUcsSUFBQSxDQUFLLE1BQUEsQ0FBUyxDQUFBLEdBQU0sR0FBR0EsQ0FBQUEsQ0FBRyxJQUFBLENBQUssSUFBQSxDQUFLLENBQUMsQ0FBQSxDQUMvQyxPQUFPckIsQ0FBQUEsQ0FBdUJ4QyxDQUFBQSxDQUFTNkQsQ0FBQUEsQ0FBRyxJQUFJLENBQUMsQ0FDakQsQ0FFQSxTQUFTQyxFQUFBQSxDQUFhSixDQUFBQSxDQUFlVixFQUFtQmUsQ0FBQUEsQ0FBaUJDLENBQUFBLENBQXlCLENBQ2hHLElBQU1WLENBQUFBLENBQU9mLENBQUFBLENBQTBCbUIsQ0FBSyxDQUFBLENBQ3RDRSxDQUFBQSxDQUFLLElBQUlsRCxDQUFBQSxDQUFVNEMsQ0FBSSxDQUFBLENBQ3ZCTyxDQUFBQSxDQUFLLElBQUl6RCxDQUFBQSxDQUNmLFFBQVNsRixDQUFBQSxDQUFJLENBQUEsQ0FBR0EsQ0FBQUEsQ0FBSThILENBQUFBLENBQVc5SCxDQUFBQSxFQUFBQSxDQUFLMkksQ0FBQUEsQ0FBRyxJQUFBLENBQUssSUFBQSxDQUFLRCxDQUFBQSxDQUFHLElBQUEsQ0FBSyxDQUFDLENBQUMsQ0FBQSxDQUszRCxJQUpBQSxDQUFBQSxDQUFHLE1BQUEsR0FDSEEsQ0FBQUEsQ0FBRyxNQUFBLEVBQU8sQ0FDVkMsQ0FBQUEsQ0FBRyxFQUFBLENBQUdFLENBQU8sQ0FBQSxDQUNiRixDQUFBQSxDQUFHLEVBQUEsQ0FBR0csQ0FBTyxDQUFBLENBQ05KLENBQUFBLENBQUcsR0FBQSxDQUFNQSxDQUFBQSxDQUFHLElBQUEsQ0FBSyxNQUFBLEVBQVFDLEVBQUcsSUFBQSxDQUFLLElBQUEsQ0FBS0QsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxDQUFDLENBQUEsQ0FDdkQsS0FBT0MsQ0FBQUEsQ0FBRyxJQUFBLENBQUssTUFBQSxDQUFTLENBQUEsR0FBTSxDQUFBLEVBQUdBLENBQUFBLENBQUcsSUFBQSxDQUFLLElBQUEsQ0FBSyxDQUFDLENBQUEsQ0FDL0MsT0FBT3JCLENBQUFBLENBQXVCeEMsQ0FBQUEsQ0FBUzZELENBQUFBLENBQUcsSUFBSSxDQUFDLENBQ2pELENBR08sU0FBU0ksRUFBQUEsQ0FBZ0JDLENBQUFBLENBQXFCLENBQ25ELElBQU1DLENBQUFBLENBQWlCekIsRUFBQUEsQ0FBYyxHQUNyQyxPQUFPZSxFQUFBQSxDQUFhUyxDQUFBQSxDQUFLQyxDQUFBQSxDQUFnQixDQUFDLENBQzVDLENBR08sU0FBU0MsRUFBQUEsQ0FBZ0JDLENBQUFBLENBQXFCLENBQ25ELE9BQU9QLEVBQUFBLENBQWFPLENBQUFBLENBQUssRUFBQSxDQUEyQixDQUFBLENBQUcsQ0FBQyxDQUMxRCxDQUlBLFNBQVNDLEVBQUFBLENBQU9WLENBQUFBLENBQXVCLENBQ3JDLElBQU1XLENBQUFBLENBQUtYLENBQUFBLENBQUcsTUFBQSxFQUFPLENBQ3JCLE9BQU9XLENBQUFBLENBQUssQ0FBQSxDQUFLQSxDQUFBQSxDQUFLLENBQUEsRUFBTSxFQUFJLEVBQUVBLENBQUFBLEVBQU0sQ0FBQSxDQUMxQyxDQUlBLFNBQVNDLEVBQUFBLENBQXVCWixDQUFBQSxDQUFlYSxDQUFBQSxDQUFnQyxDQUU3RSxHQURrQmIsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxDQUFBLENBQ1osQ0FDYixJQUFNYyxFQUFpQmQsQ0FBQUEsQ0FBRyxNQUFBLEVBQU8sQ0FDakMsR0FBSWMsQ0FBQUEsR0FBbUIsQ0FBQSxDQUFHLE1BQU0sSUFBSSxLQUFBLENBQU0sQ0FBQSx5Q0FBQSxFQUE0Q0EsQ0FBYyxDQUFBLENBQUUsQ0FBQSxDQUN0R2QsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxFQUNUQSxDQUFBQSxDQUFHLE1BQUEsRUFBTyxDQUNWLElBQUEsSUFBUzFCLENBQUFBLENBQUksQ0FBQSxDQUFHQSxDQUFBQSxFQUFLdUMsQ0FBQUEsQ0FBa0J2QyxDQUFBQSxFQUFBQSxDQUN4QjBCLENBQUFBLENBQUcsSUFBQSxDQUFLLENBQUMsQ0FBQSxFQUNYQSxDQUFBQSxDQUFHLElBQUEsQ0FBSyxDQUFDLEVBRXhCLENBQUEsS0FBTyxDQUNMLElBQU1lLENBQUFBLENBQVNmLENBQUFBLENBQUcsTUFBQSxFQUFPLENBQ25CZ0IsQ0FBQUEsQ0FBU2hCLENBQUFBLENBQUcsTUFBQSxFQUFPLENBQ3pCLElBQUEsSUFBUyxDQUFBLENBQUksQ0FBQSxDQUFHLENBQUEsQ0FBSWUsQ0FBQUEsQ0FBUSxJQUFPZixDQUFBQSxDQUFHLE1BQUEsRUFBTyxDQUFHQSxDQUFBQSxDQUFHLElBQUEsQ0FBSyxDQUFDLENBQUEsQ0FDekQsSUFBQSxJQUFTLENBQUEsQ0FBSSxDQUFBLENBQUcsQ0FBQSxDQUFJZ0IsQ0FBQUEsQ0FBUSxDQUFBLEVBQUEsQ0FBT2hCLENBQUFBLENBQUcsTUFBQSxFQUFPLENBQUdBLEVBQUcsSUFBQSxDQUFLLENBQUMsRUFDM0QsQ0FDRixDQUdBLFNBQVNpQixFQUFBQSxDQUF1QmpCLENBQUFBLENBQWVrQixDQUFBQSxDQUFpQkMsQ0FBQUEsQ0FBOEIsQ0FFNUYsR0FEQW5CLENBQUFBLENBQUcsSUFBQSxDQUFLLEVBQUUsQ0FBQSxDQUNOQSxFQUFHLElBQUEsQ0FBSyxDQUFDLENBQUEsR0FBTSxDQUFBLENBQUcsTUFBTSxJQUFJLEtBQUEsQ0FBTSx5REFBeUQsQ0FBQSxDQUMvRixJQUFNb0IsQ0FBQUEsQ0FBU0YsQ0FBQUEsRUFBV2pFLEVBQUFBLEVBQWdCaUUsQ0FBQUEsRUFBV2hFLEVBQUFBLENBQ2pEa0UsQ0FBQUEsRUFBUXBCLEVBQUcsSUFBQSxDQUFLLENBQUMsQ0FBQSxDQUNyQkEsQ0FBQUEsQ0FBRyxNQUFBLEVBQU8sQ0FDVixJQUFNcUIsQ0FBQUEsQ0FBWXJCLENBQUFBLENBQUcsTUFBQSxFQUFPLENBQzVCLEdBQUksQ0FBQ29CLENBQUFBLENBQVEsQ0FLWCxHQUpBcEIsRUFBRyxJQUFBLENBQUttQixDQUFBQSxDQUFJLGFBQWEsQ0FBQSxDQUNFbkIsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxDQUFBLENBRTNCbUIsQ0FBQUEsQ0FBSSxzQkFBQSxDQUF5QixDQUFBLEVBQUduQixDQUFBQSxDQUFHLElBQUEsQ0FBSyxJQUFBLENBQUssSUFBQSxDQUFLLElBQUEsQ0FBSyxLQUFLbUIsQ0FBQUEsQ0FBSSxzQkFBc0IsQ0FBQyxDQUFDLENBQUEsQ0FEeEVQLEVBQUFBLENBQXVCWixDQUFBQSxDQUFJbUIsQ0FBQUEsQ0FBSSxnQkFBZ0IsQ0FBQSxDQUVwRUEsQ0FBQUEsQ0FBSSxzQkFBQSxDQUF3QixNQUFNLElBQUksS0FBQSxDQUFNLG9EQUFvRCxFQUNoR0EsQ0FBQUEsQ0FBSSxxQkFBQSxFQUF1Qm5CLENBQUFBLENBQUcsSUFBQSxDQUFLLENBQUMsRUFDMUMsQ0FDQSxPQUFJbUIsQ0FBQUEsQ0FBSSxVQUFBLEdBQ05uQixDQUFBQSxDQUFHLElBQUEsQ0FBSyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxDQUFBLENBQUEsQ0FBQSxDQUVQcUIsQ0FBQUEsR0FBY25DLEVBQUFBLEVBQWdCbUMsQ0FBQUEsR0FBY3BDLEVBQUFBLElBQ3pCZSxDQUFBQSxDQUFHLElBQUEsQ0FBSyxDQUFDLENBQUEsR0FFNUJBLENBQUFBLENBQUcsTUFBQSxFQUFPLENBQ05xQixDQUFBQSxHQUFjcEMsRUFBQUEsRUFBY2UsQ0FBQUEsQ0FBRyxNQUFBLElBRWpDcUIsQ0FBQUEsR0FBY3BDLEVBQUFBLEVBQWNlLENBQUFBLENBQUcsSUFBQSxDQUFLLENBQUMsQ0FBQSxDQUNyQ21CLENBQUFBLENBQUksZ0JBQUEsRUFBa0JuQixDQUFBQSxDQUFHLElBQUEsQ0FBSyxDQUFDLENBQUEsQ0FDbkNBLENBQUFBLENBQUcsTUFBQSxFQUFPLENBQUEsQ0FFWlUsRUFBQUEsQ0FBT1YsQ0FBRSxDQUFBLENBQ0xtQixDQUFBQSxDQUFJLGdDQUFBLEVBQWtDbkIsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxDQUFBLENBQzVDQSxDQUFBQSxDQUFHLEdBQ1osQ0FPTyxTQUFTc0IsRUFBQUEsQ0FBd0JDLENBQUFBLENBQWVMLENBQUFBLENBQWlCQyxDQUFBQSxDQUE4QixDQUNwRyxJQUFNekIsQ0FBQUEsQ0FBT2YsQ0FBQUEsQ0FBMEI0QyxDQUFLLENBQUEsQ0FDdEN2QixDQUFBQSxDQUFLLElBQUlsRCxDQUFBQSxDQUFVNEMsQ0FBSSxDQUFBLENBRXZCM0wsQ0FBQUEsQ0FBUSxJQUFJK0ksQ0FBQUEsQ0FBVTRDLENBQUksQ0FBQSxDQUMxQjhCLENBQUFBLENBQUlQLEVBQUFBLENBQXVCbE4sRUFBT21OLENBQUFBLENBQVNDLENBQUcsQ0FBQSxDQUM5Q00sQ0FBQUEsQ0FBZUQsQ0FBQUEsQ0FBSSxDQUFBLEdBQU0sQ0FBQSxDQUFJLENBQUEsQ0FBSSxDQUFBLENBQUtBLENBQUFBLENBQUksQ0FBQSxDQUMxQ0UsQ0FBQUEsQ0FBQUEsQ0FBdUJGLENBQUFBLENBQUlDLENBQUFBLEVBQWdCLENBQUEsQ0FFM0N4QixDQUFBQSxDQUFLLElBQUl6RCxDQUFBQSxDQUNmLElBQUEsSUFBU2xGLENBQUFBLENBQUksQ0FBQSxDQUFHQSxDQUFBQSxDQUFJLEVBQUEsQ0FBSUEsQ0FBQUEsRUFBQUEsQ0FBSzJJLENBQUFBLENBQUcsSUFBQSxDQUFLLElBQUEsQ0FBS0QsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxDQUFDLENBQUEsQ0FRcEQsSUFQQUMsRUFBRyxJQUFBLENBQUssSUFBQSxDQUFLRCxDQUFBQSxDQUFHLElBQUEsQ0FBSyxDQUFDLENBQUMsQ0FBQSxDQUNSa0IsQ0FBQUEsRUFBV2pFLEVBQUFBLEVBQWdCaUUsQ0FBQUEsRUFBV2hFLEVBQUFBLEVBQ3pDK0MsQ0FBQUEsQ0FBRyxJQUFBLENBQUssSUFBQSxDQUFLRCxDQUFBQSxDQUFHLElBQUEsQ0FBSyxDQUFDLENBQUMsQ0FBQSxDQUVuQ0EsQ0FBQUEsQ0FBRyxNQUFBLEVBQU8sQ0FDVkMsQ0FBQUEsQ0FBRyxFQUFBLENBQUcsQ0FBQyxDQUFBLENBRUFELENBQUFBLENBQUcsR0FBQSxDQUFNd0IsQ0FBQUEsRUFBR3ZCLENBQUFBLENBQUcsSUFBQSxDQUFLLElBQUEsQ0FBS0QsQ0FBQUEsQ0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFBLENBRzFDLElBREFDLENBQUFBLENBQUcsSUFBQSxDQUFLLElBQUEsQ0FBSyxDQUFDLENBQUEsQ0FDUEEsQ0FBQUEsQ0FBRyxJQUFBLENBQUssTUFBQSxDQUFTLENBQUEsR0FBTSxDQUFBLEVBQUdBLENBQUFBLENBQUcsSUFBQSxDQUFLLEtBQUssQ0FBQyxDQUFBLENBRS9DLE9BQU9yQixDQUFBQSxDQUF1QixNQUFBLENBQU8sTUFBQSxDQUFPLENBQUN4QyxDQUFBQSxDQUFTNkQsQ0FBQUEsQ0FBRyxJQUFJLENBQUEsQ0FBR1AsQ0FBQUEsQ0FBSyxRQUFBLENBQVNnQyxDQUFtQixDQUFDLENBQUMsQ0FBQyxDQUN0RyxDQzVLQSxTQUFTQyxFQUFBQSxDQUFXQyxDQUFBQSxDQUF3QyxDQUMxRCxJQUFNNUIsQ0FBQUEsQ0FBSyxJQUFJbEQsQ0FBQUEsQ0FBVTZCLENBQUFBLENBQTBCaUQsQ0FBTyxDQUFDLENBQUEsQ0FJM0QsR0FIQTVCLENBQUFBLENBQUcsS0FBSyxFQUFFLENBQUEsQ0FDVkEsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsSUFBQSxDQUFLLENBQUMsQ0FBQSxDQUNMQSxDQUFBQSxDQUFHLElBQUEsQ0FBSyxDQUFDLENBQUEsQ0FBSSxDQUFBLENBQUcsT0FDcEIsSUFBTTZCLENBQUFBLENBQXFCN0IsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxDQUFBLENBQ3BDQSxDQUFBQSxDQUFHLElBQUEsQ0FBSyxFQUFNLENBQUEsQ0FFZCxJQUFNOEIsQ0FBQUEsQ0FBVzlCLENBQUFBLENBQUcsR0FBQSxDQUNwQixPQUFBQSxDQUFBQSxDQUFHLElBQUEsQ0FBSyxFQUFFLENBQUEsQ0FDTjZCLENBQUFBLENBQXFCLENBQUEsRUFBRzdCLENBQUFBLENBQUcsSUFBQSxDQUFLNkIsQ0FBQUEsQ0FBcUIsQ0FBQSxDQUFBLENBQUssQ0FBQSxDQUFJQSxDQUFBQSxFQUFzQixDQUFDLENBQUEsQ0FDbEYsQ0FBRSxRQUFBLENBQUFDLENBQUFBLENBQVUsTUFBQSxDQUFROUIsQ0FBQUEsQ0FBRyxJQUFLLE9BQUEsQ0FBU0EsQ0FBQUEsQ0FBRyxJQUFBLENBQU0sa0JBQUEsQ0FBQTZCLENBQW1CLENBQzFFLENBR0EsU0FBU0UsRUFBQUEsQ0FBYTlCLENBQUFBLENBQWUrQixDQUFBQSxDQUFnQixDQUNuRC9CLENBQUFBLENBQUcsQ0FBQSxDQUFFLEtBQUEsQ0FBUSxFQUFFLEVBQ2ZBLENBQUFBLENBQUcsQ0FBQSxDQUFFLENBQUEsQ0FBRyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsSUFBQSxDQUFLLENBQUMsQ0FBQSxDQUNUQSxDQUFBQSxDQUFHLENBQUEsQ0FBRSxDQUFBLENBQUcsQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsQ0FBQSxDQUFFK0IsQ0FBQUEsQ0FBSSxrQkFBQSxDQUFvQixDQUFDLENBQUEsQ0FFOUIvQixDQUFBQSxDQUFHLElBQUEsQ0FBSytCLENBQUFBLENBQUksa0JBQUEsR0FBdUIsQ0FBQyxDQUFBLENBQ3BDL0IsQ0FBQUEsQ0FBRyxDQUFBLENBQUUsS0FBQSxDQUFRLEVBQUUsQ0FBQSxDQUNmQSxDQUFBQSxDQUFHLElBQUEsQ0FBSytCLENBQUFBLENBQUksT0FBQSxDQUFTQSxDQUFBQSxDQUFJLFFBQUEsQ0FBVUEsQ0FBQUEsQ0FBSSxNQUFBLENBQVNBLENBQUFBLENBQUksUUFBUSxDQUFBLENBRTVEL0IsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxDQUFBLENBQ1QsUUFBUzNJLENBQUFBLENBQUksQ0FBQSxDQUFHQSxDQUFBQSxFQUFLMEssQ0FBQUEsQ0FBSSxrQkFBQSxDQUFvQjFLLENBQUFBLEVBQUFBLENBQzNDMkksQ0FBQUEsQ0FBRyxFQUFBLENBQUcsQ0FBQyxDQUFBLENBQ1BBLENBQUFBLENBQUcsRUFBQSxDQUFHLENBQUMsQ0FBQSxDQUNQQSxDQUFBQSxDQUFHLEVBQUEsQ0FBRyxDQUFDLENBQUEsQ0FHVEEsQ0FBQUEsQ0FBRyxDQUFBLENBQUUsQ0FBQSxDQUFHLENBQUMsQ0FBQSxDQUNUQSxDQUFBQSxDQUFHLEVBQUEsQ0FBRyxDQUFDLENBQUEsQ0FDUEEsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsSUFBQSxDQUFLLENBQUMsQ0FBQSxDQUNUQSxDQUFBQSxDQUFHLElBQUEsQ0FBSyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsS0FBQSxDQUFNLENBQUMsRUFDWixDQUdBLFNBQVNnQyxFQUFBQSxDQUFrQmhDLEVBQWUrQixDQUFBQSxDQUFnQmhMLENBQUFBLENBQWVDLENBQUFBLENBQWdCLENBR3ZGLEdBREFnSixDQUFBQSxDQUFHLElBQUEsQ0FBSytCLENBQUFBLENBQUksT0FBQSxDQUFTQSxDQUFBQSxDQUFJLE1BQUEsQ0FBUyxDQUFBLENBQUcsQ0FBQyxDQUFBLENBQ2xDQSxDQUFBQSxDQUFJLGtCQUFBLENBQXFCLEVBQUcsQ0FDOUIsSUFBQSxJQUFTMUssQ0FBQUEsQ0FBSSxDQUFBLENBQUdBLENBQUFBLENBQUkwSyxDQUFBQSxDQUFJLGtCQUFBLENBQW9CMUssQ0FBQUEsRUFBQUEsQ0FBSzJJLENBQUFBLENBQUcsQ0FBQSxDQUFFLENBQUEsQ0FBRyxDQUFDLENBQUEsQ0FDMUQsSUFBQSxJQUFTM0ksQ0FBQUEsQ0FBSTBLLENBQUFBLENBQUksbUJBQW9CMUssQ0FBQUEsQ0FBSSxDQUFBLENBQUdBLENBQUFBLEVBQUFBLENBQUsySSxDQUFBQSxDQUFHLENBQUEsQ0FBRSxDQUFBLENBQUcsQ0FBQyxFQUM1RCxDQUVBQSxDQUFBQSxDQUFHLElBQUEsQ0FBSyxDQUFDLENBQUEsQ0FDVCxJQUFBLElBQVMzSSxDQUFBQSxDQUFJLENBQUEsQ0FBR0EsRUFBSSxFQUFBLENBQUlBLENBQUFBLEVBQUFBLENBQUsySSxDQUFBQSxDQUFHLElBQUEsQ0FBSzNJLENBQUFBLEdBQU0sQ0FBQSxFQUFLQSxDQUFBQSxHQUFNLENBQUMsQ0FBQSxDQUN2RDJJLENBQUFBLENBQUcsQ0FBQSxDQUFFLENBQUEsQ0FBRyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxDQUFBLENBQUUsRUFBRyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsQ0FBQSxDQUFFLENBQUEsQ0FBRyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxDQUFBLENBQUUsQ0FBQSxDQUFHLENBQUMsQ0FBQSxDQUNUQSxFQUFHLENBQUEsQ0FBRSxDQUFBLENBQUcsQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsQ0FBQSxDQUFFLENBQUEsQ0FBRyxDQUFDLENBQUEsQ0FFVEEsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsRUFBQSxDQUFHLENBQUMsRUFDUEEsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsSUFBQSxDQUFLLENBQUMsQ0FBQSxDQUNUQSxDQUFBQSxDQUFHLElBQUEsQ0FBSyxDQUFDLENBQUEsQ0FHVEEsQ0FBQUEsQ0FBRyxFQUFBLENBQUcsQ0FBQyxDQUFBLENBQ1BBLEVBQUcsSUFBQSxDQUFLLENBQUMsQ0FBQSxDQUNUQSxDQUFBQSxDQUFHLElBQUEsQ0FBSytCLENBQUFBLENBQUksT0FBQSxDQUFTQSxDQUFBQSxDQUFJLFFBQUEsQ0FBVUEsQ0FBQUEsQ0FBSSxNQUFBLENBQVNBLENBQUFBLENBQUksUUFBUSxDQUFBLENBRTVEL0IsQ0FBQUEsQ0FBRyxFQUFBLENBQUcsQ0FBQyxDQUFBLENBQ1BBLENBQUFBLENBQUcsQ0FBQSxDQUFFLENBQUEsQ0FBRyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxDQUFBLENBQUUsQ0FBQSxDQUFHLENBQUMsQ0FBQSxDQUNUQSxDQUFBQSxDQUFHLENBQUEsQ0FBRSxDQUFBLENBQUcsQ0FBQyxDQUFBLENBRVRBLENBQUFBLENBQUcsRUFBQSxDQUFHLENBQUMsQ0FBQSxDQUNQQSxDQUFBQSxDQUFHLENBQUEsQ0FBRWpKLENBQUFBLENBQU8sRUFBRSxDQUFBLENBQ2RpSixDQUFBQSxDQUFHLENBQUEsQ0FBRWhKLENBQUFBLENBQVEsRUFBRSxDQUFBLENBQ2ZnSixDQUFBQSxDQUFHLElBQUEsQ0FBSyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxDQUFBLENBQUUsQ0FBQSxDQUFHLENBQUMsQ0FBQSxDQUNUQSxDQUFBQSxDQUFHLENBQUEsQ0FBRSxDQUFBLENBQUcsQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsQ0FBQSxDQUFFLENBQUEsQ0FBRyxDQUFDLENBQUEsQ0FDVEEsRUFBRyxJQUFBLENBQUssQ0FBQyxDQUFBLENBRVRBLENBQUFBLENBQUcsSUFBQSxDQUFLLENBQUMsQ0FBQSxDQUNUQSxDQUFBQSxDQUFHLElBQUEsQ0FBSyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxDQUFBLENBR1RBLENBQUFBLENBQUcsS0FBSyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxFQUFBLENBQUcsQ0FBQyxDQUFBLENBQ1BBLENBQUFBLENBQUcsRUFBQSxDQUFHLENBQUMsQ0FBQSxDQUNQQSxDQUFBQSxDQUFHLEVBQUEsQ0FBRyxDQUFDLENBQUEsQ0FDUEEsQ0FBQUEsQ0FBRyxFQUFBLENBQUcsQ0FBQyxDQUFBLENBRVBBLENBQUFBLENBQUcsRUFBQSxDQUFHLENBQUMsQ0FBQSxDQUNQ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QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUEsU0FBQSxFQXVSaEJBLEVBQVksQ0FBQTtBQUFBLEtBQUEsQ0FBQSxDQUlqQkUsRUFBQUEsQ0FBcUIsR0FBQSxDQUUzQixlQUFzQkMsRUFBQUEsQ0FBY2xYLENBQUFBLENBQWlDbVgsRUFBb0MsQ0FF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OWQsQ0FBQUEsSUFBTy9CLEVBQVEsT0FBQSxDQUFRLEtBQUEsQ0FBTSxHQUFHLENBQUEsQ0FDekMsTUFBTW1nQixjQUFBQSxDQUFNNWtCLFlBQUFBLENBQVF3RyxDQUFHLENBQUEsQ0FBRyxDQUFFLFVBQVcsQ0FBQSxDQUFLLENBQUMsQ0FBQSxDQUUvQyxJQUFNdVosRUFBU3RiLENBQUFBLENBQVEsYUFBQSxDQUFnQnNmLEdBQVE3QyxFQUFBQSxDQUMvQ3FELEVBQUFBLENBQUssT0FBTyxjQUFBLEVBQWUsQ0FDM0IsSUFBTU0sQ0FBQUEsQ0FBUyxNQUFNN0IsRUFBQUEsQ0FBYSxJQUNoQ2pELEVBQU8sQ0FDTCxNQUFBLENBQUFsYixFQUNBLEdBQUdKLENBQUFBLENBQ0gsT0FBUThmLEVBQUFBLENBQUssTUFBQSxDQUNiLFdBQWEzYixDQUFBQSxFQUFNK2IsQ0FBQUEsQ0FBSSxjQUFjL2IsQ0FBQyxDQUFBLENBQ3RDLFVBQVcsQ0FBQ3FVLENBQUFBLENBQUc2SCxDQUFBQSxHQUFNSCxDQUFBQSxDQUFJLGFBQWExSCxDQUFBQSxDQUFHNkgsQ0FBQyxDQUM1QyxDQUFDLENBQ0gsRUFDQSxNQUFNSCxDQUFBQSxDQUFJLFNBQUEsQ0FBVUUsQ0FBTSxFQUM1QixDQUFBLE1BQVM5ZixDQUFBQSxDQUFHLENBQ1YsSUFBTW5ELENBQUFBLENBQVFtRCxFQUNSK2YsQ0FBQUEsQ0FBSWxqQixDQUFBQSxDQUFNLEtBQUEsRUFBU0EsQ0FBQUEsQ0FBTSxTQUFXLE1BQUEsQ0FBT21ELENBQUFBLEVBQUssZUFBZSxDQUFBLENBQ3JFLE1BQU00ZixFQUFJLFVBQUEsQ0FBV0csQ0FBQyxFQUN4QixDQUFBLE9BQUUsQ0FDQU4sR0FBVSxJQUFBLENBQ1ZwaEIsWUFBQUEsQ0FBSSxPQUNOLENBQ0YsQ0FDRixDQUFDLENBQUEiLCJmaWxlIjoiYXBwLmNqcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIFNoaW0gZ2xvYmFscyBpbiBjanMgYnVuZGxlXG4vLyBUaGVyZSdzIGEgd2VpcmQgYnVnIHRoYXQgZXNidWlsZCB3aWxsIGFsd2F5cyBpbmplY3QgaW1wb3J0TWV0YVVybFxuLy8gaWYgd2UgZXhwb3J0IGl0IGFzIGBjb25zdCBpbXBvcnRNZXRhVXJsID0gLi4uIF9fZmlsZW5hbWUgLi4uYFxuLy8gQnV0IHVzaW5nIGEgZnVuY3Rpb24gd2lsbCBub3QgY2F1c2UgdGhpcyBpc3N1ZVxuXG5jb25zdCBnZXRJbXBvcnRNZXRhVXJsID0gKCkgPT4gXG4gIHR5cGVvZiBkb2N1bWVudCA9PT0gXCJ1bmRlZmluZWRcIiBcbiAgICA/IG5ldyBVUkwoYGZpbGU6JHtfX2ZpbGVuYW1lfWApLmhyZWYgXG4gICAgOiAoZG9jdW1lbnQuY3VycmVudFNjcmlwdCAmJiBkb2N1bWVudC5jdXJyZW50U2NyaXB0LnRhZ05hbWUudG9VcHBlckNhc2UoKSA9PT0gJ1NDUklQVCcpIFxuICAgICAgPyBkb2N1bWVudC5jdXJyZW50U2NyaXB0LnNyYyBcbiAgICAgIDogbmV3IFVSTChcIm1haW4uanNcIiwgZG9jdW1lbnQuYmFzZVVSSSkuaHJlZjtcblxuZXhwb3J0IGNvbnN0IGltcG9ydE1ldGFVcmwgPSAvKiBAX19QVVJFX18gKi8gZ2V0SW1wb3J0TWV0YVVybCgpXG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzI1LlxuXG5leHBvcnQgdHlwZSBFbnZQYXJzZXI8VD4gPSAodmFsdWU6IHVua25vd24pID0+IFQ7XG5cbmV4cG9ydCBmdW5jdGlvbiBwZW52PFQ+KG5hbWU6IHN0cmluZywgcGFyc2VyOiBFbnZQYXJzZXI8VD4sIGRlZmF1bHRWYWx1ZTogVCk6IFQ7XG5leHBvcnQgZnVuY3Rpb24gcGVudjxUPihuYW1lOiBzdHJpbmcsIHBhcnNlcjogRW52UGFyc2VyPFQ+LCBkZWZhdWx0VmFsdWU/OiBUKTogVCB8IHVuZGVmaW5lZDtcbmV4cG9ydCBmdW5jdGlvbiBwZW52PFQ+KG5hbWU6IHN0cmluZywgcGFyc2VyOiBFbnZQYXJzZXI8VD4sIGRlZmF1bHRWYWx1ZT86IFQpOiBUIHwgdW5kZWZpbmVkIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gcGFyc2VyKHByb2Nlc3MuZW52W25hbWVdKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMS8zMC5cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlTnVtYmVyKHg6IHVua25vd24pOiBudW1iZXIge1xuICBpZiAodHlwZW9mIHggPT09IFwibnVtYmVyXCIpIHtcbiAgICByZXR1cm4geDtcbiAgfVxuICBjb25zdCBudW0gPSBOdW1iZXIoeCk7XG4gIGlmIChOdW1iZXIuaXNOYU4obnVtKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgVmFsdWUgJHt4fSBpcyBub3QgYSB2YWxpZCBudW1iZXJgKTtcbiAgfVxuICByZXR1cm4gbnVtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VTdHJpbmcoeDogdW5rbm93bik6IHN0cmluZyB7XG4gIGlmICh0eXBlb2YgeCA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIHg7XG4gIHJldHVybiBTdHJpbmcoeCk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA5LlxuXG5pbXBvcnQgeyBjcmVhdGVSZXF1aXJlIH0gZnJvbSBcIm1vZHVsZVwiO1xuaW1wb3J0IHsgZGlybmFtZSwgam9pbiB9IGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyBwZW52IH0gZnJvbSBcIi4vZW52XCI7XG5pbXBvcnQgeyBwYXJzZU51bWJlciB9IGZyb20gXCIuL3BhcnNlclwiO1xuXG5jb25zdCByZXF1aXJlID0gY3JlYXRlUmVxdWlyZShpbXBvcnQubWV0YS51cmwpO1xuXG5leHBvcnQgY29uc3QgcHVwTG9nTGV2ZWwgPSBwZW52KFwiUFVQX0xPR19MRVZFTFwiLCBwYXJzZU51bWJlciwgMik7XG5cbmV4cG9ydCBjb25zdCBwdXBQa2dSb290ID0gZGlybmFtZShyZXF1aXJlLnJlc29sdmUoXCJwdXAtcmVjb3JkZXIvcGFja2FnZS5qc29uXCIpKTtcbmV4cG9ydCBjb25zdCBwdXBBcHAgPSBqb2luKHB1cFBrZ1Jvb3QsIFwiZGlzdFwiLCBcImFwcC5janNcIik7XG5leHBvcnQgY29uc3QgcHVwQXVkaW9QcmVsb2FkID0gam9pbihwdXBQa2dSb290LCBcImRpc3RcIiwgXCJhdWRpb19wcmVsb2FkLmNqc1wiKTtcbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDYuXG5cbmltcG9ydCB0eXBlIHsgQ2hpbGRQcm9jZXNzIH0gZnJvbSBcImNoaWxkX3Byb2Nlc3NcIjtcbmltcG9ydCB7IExvZyB9IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQgeyBBVl9MT0dfRVJST1IsIEFWX0xPR19XQVJOSU5HIH0gZnJvbSBcIm5vZGUtYXYvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBwdXBMb2dMZXZlbCB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIExvZ2dlckxpa2Uge1xuICBkZWJ1Zz8odGhpczogdm9pZCwgLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQ7XG5cbiAgaW5mbz8odGhpczogdm9pZCwgLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQ7XG5cbiAgd2Fybj8odGhpczogdm9pZCwgLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQ7XG5cbiAgZXJyb3I/KHRoaXM6IHZvaWQsIC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkO1xufVxuXG5jb25zdCBERUJVRyA9IFwiPHB1cEBkZWJ1Zz5cIjtcbmNvbnN0IElORk8gPSBcIjxwdXBAaW5mbz5cIjtcbmNvbnN0IFdBUk4gPSBcIjxwdXBAd2Fybj5cIjtcbmNvbnN0IEVSUk9SID0gXCI8cHVwQGVycm9yPlwiO1xuY29uc3QgRkFUQUwgPSBcIjxwdXBAZmF0YWw+XCI7XG5cbmZ1bmN0aW9uIHN0YWNrSG9vayh0YXJnZXQ6IEZ1bmN0aW9uLCBfY29udGV4dDogQ2xhc3NNZXRob2REZWNvcmF0b3JDb250ZXh0KSB7XG4gIHJldHVybiBmdW5jdGlvbiAodGhpczogTG9nZ2VyLCAuLi5tZXNzYWdlczogdW5rbm93bltdKSB7XG4gICAgY29uc3QgcHJvY2Vzc2VkID0gbWVzc2FnZXMubWFwKChtc2cpID0+IHtcbiAgICAgIHJldHVybiBtc2cgaW5zdGFuY2VvZiBFcnJvciA/IChtc2cuc3RhY2sgPz8gU3RyaW5nKG1zZykpIDogbXNnO1xuICAgIH0pO1xuICAgIHJldHVybiB0YXJnZXQuY2FsbCh0aGlzLCAuLi5wcm9jZXNzZWQpO1xuICB9O1xufVxuXG5leHBvcnQgY2xhc3MgTG9nZ2VyIGltcGxlbWVudHMgTG9nZ2VyTGlrZSB7XG4gIHByaXZhdGUgX2ltcGw/OiBMb2dnZXJMaWtlO1xuXG4gIGdldCBsZXZlbCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9sZXZlbDtcbiAgfVxuXG4gIHNldCBsZXZlbCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fbGV2ZWwgPSB2YWx1ZTtcbiAgICB0aGlzLmltcGwgPSB0aGlzLl9pbXBsID8/IGNvbnNvbGU7XG4gIH1cblxuICBnZXQgaW1wbCgpOiBMb2dnZXJMaWtlIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5faW1wbDtcbiAgfVxuXG4gIHNldCBpbXBsKHZhbHVlOiBMb2dnZXJMaWtlKSB7XG4gICAgY29uc3QgZGVidWcgPSB2YWx1ZS5kZWJ1ZyA/PyBjb25zb2xlLmRlYnVnO1xuICAgIGNvbnN0IGluZm8gPSB2YWx1ZS5pbmZvID8/IGNvbnNvbGUuaW5mbztcbiAgICBjb25zdCB3YXJuID0gdmFsdWUud2FybiA/PyBjb25zb2xlLndhcm47XG4gICAgY29uc3QgZXJyb3IgPSB2YWx1ZS5lcnJvciA/PyBjb25zb2xlLmVycm9yO1xuICAgIGNvbnN0IGx2ID0gdGhpcy5fbGV2ZWw7XG4gICAgdGhpcy5faW1wbCA9IHtcbiAgICAgIGRlYnVnOiBsdiA+PSAzID8gZGVidWcgOiB1bmRlZmluZWQsXG4gICAgICBpbmZvOiBsdiA+PSAyID8gaW5mbyA6IHVuZGVmaW5lZCxcbiAgICAgIHdhcm46IGx2ID49IDEgPyB3YXJuIDogdW5kZWZpbmVkLFxuICAgICAgZXJyb3I6IGx2ID49IDAgPyBlcnJvciA6IHVuZGVmaW5lZCxcbiAgICB9O1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfbGV2ZWw6IG51bWJlciA9IHB1cExvZ0xldmVsKSB7XG4gICAgdGhpcy5pbXBsID0gY29uc29sZTtcbiAgfVxuXG4gIEBzdGFja0hvb2tcbiAgZGVidWcoLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQge1xuICAgIHRoaXMuaW1wbD8uZGVidWc/LihERUJVRywgLi4ubWVzc2FnZXMpO1xuICB9XG5cbiAgQHN0YWNrSG9va1xuICBpbmZvKC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkIHtcbiAgICB0aGlzLmltcGw/LmluZm8/LihJTkZPLCAuLi5tZXNzYWdlcyk7XG4gIH1cblxuICBAc3RhY2tIb29rXG4gIHdhcm4oLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQge1xuICAgIHRoaXMuaW1wbD8ud2Fybj8uKFdBUk4sIC4uLm1lc3NhZ2VzKTtcbiAgfVxuXG4gIEBzdGFja0hvb2tcbiAgZXJyb3IoLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQge1xuICAgIHRoaXMuaW1wbD8uZXJyb3I/LihFUlJPUiwgLi4ubWVzc2FnZXMpO1xuICB9XG5cbiAgQHN0YWNrSG9va1xuICBmYXRhbCguLi5tZXNzYWdlczogdW5rbm93bltdKTogdm9pZCB7XG4gICAgdGhpcy5pbXBsPy5lcnJvcj8uKEZBVEFMLCAuLi5tZXNzYWdlcyk7XG4gICAgcHJvY2Vzcy5leGl0KDEpO1xuICB9XG5cbiAgcHJpdmF0ZSBkaXNwYXRjaChtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICBjb25zdCBtc2cgPSBtZXNzYWdlLnRyaW1FbmQoKTtcbiAgICBpZiAobXNnLnN0YXJ0c1dpdGgoREVCVUcpKSB7XG4gICAgICB0aGlzLmRlYnVnKG1zZy5zbGljZShERUJVRy5sZW5ndGggKyAxKSk7XG4gICAgfSBlbHNlIGlmIChtc2cuc3RhcnRzV2l0aChJTkZPKSkge1xuICAgICAgdGhpcy5pbmZvKG1zZy5zbGljZShJTkZPLmxlbmd0aCArIDEpKTtcbiAgICB9IGVsc2UgaWYgKG1zZy5zdGFydHNXaXRoKFdBUk4pKSB7XG4gICAgICB0aGlzLndhcm4obXNnLnNsaWNlKFdBUk4ubGVuZ3RoICsgMSkpO1xuICAgIH0gZWxzZSBpZiAobXNnLnN0YXJ0c1dpdGgoRVJST1IpKSB7XG4gICAgICB0aGlzLmVycm9yKG1zZy5zbGljZShFUlJPUi5sZW5ndGggKyAxKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaW5mbyhtc2cpO1xuICAgIH1cbiAgfVxuXG4gIGF0dGFjaChwcm9jOiBDaGlsZFByb2Nlc3MsIG5hbWU6IHN0cmluZykge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLmRlYnVnKGAke25hbWV9LmF0dGFjaGApO1xuICAgICAgbGV0IGZhdGFsOiBzdHJpbmcgPSBcIlwiO1xuICAgICAgY29uc3QgZGlzcGF0Y2ggPSAoZGF0YTogQnVmZmVyKSA9PiB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBkYXRhLnRvU3RyaW5nKCk7XG4gICAgICAgIGlmIChtZXNzYWdlLnN0YXJ0c1dpdGgoRkFUQUwpKSB7XG4gICAgICAgICAgZmF0YWwgKz0gbWVzc2FnZS5zbGljZShGQVRBTC5sZW5ndGggKyAxKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmRpc3BhdGNoKG1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgcHJvYy5zdGRlcnI/Lm9uKFwiZGF0YVwiLCBkaXNwYXRjaCk7XG4gICAgICBwcm9jLnN0ZG91dD8ub24oXCJkYXRhXCIsIGRpc3BhdGNoKTtcbiAgICAgIHByb2NcbiAgICAgICAgLm9uKFwiZXJyb3JcIiwgKGVycikgPT4ge1xuICAgICAgICAgIGZhdGFsICs9IGVyci5tZXNzYWdlO1xuICAgICAgICAgIHByb2Mua2lsbCgpO1xuICAgICAgICB9KVxuICAgICAgICAub25jZShcImNsb3NlXCIsIChjb2RlLCBzaWduYWwpID0+IHtcbiAgICAgICAgICBpZiAoY29kZSB8fCBzaWduYWwgfHwgZmF0YWwpIHtcbiAgICAgICAgICAgIGZhdGFsIHx8PSBgY29tbWFuZCBmYWlsZWQ6ICR7cHJvYy5zcGF3bmFyZ3Muam9pbihcIiBcIil9YDtcbiAgICAgICAgICAgIHRoaXMuZGVidWcoYCR7bmFtZX0uY2xvc2VgLCB7IGNvZGUsIHNpZ25hbCwgZmF0YWwgfSk7XG4gICAgICAgICAgICByZWplY3QobmV3IEVycm9yKGZhdGFsKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZGVidWcoYCR7bmFtZX0uY2xvc2VgKTtcbiAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC5vbihcInVuaGFuZGxlZFJlamVjdGlvblwiLCAocmVhc29uKSA9PiB7XG4gICAgICAgICAgdGhpcy5lcnJvcihgJHtuYW1lfS51bmhhbmRsZWRgLCByZWFzb24pO1xuICAgICAgICB9KVxuICAgICAgICAub24oXCJ1bmNhdWdodEV4Y2VwdGlvbk1vbml0b3JcIiwgKGVycikgPT4ge1xuICAgICAgICAgIHRoaXMuZXJyb3IoYCR7bmFtZX0udW5oYW5kbGVkYCwgZXJyKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn1cblxuY29uc3QgbG9nZ2VyID0gbmV3IExvZ2dlcigpO1xuXG4vLyBSb3V0ZSBmZm1wZWcgbmF0aXZlIGxvZ3MgdGhyb3VnaCBwdXAncyBsb2dnZXIuXG5Mb2cuc2V0Q2FsbGJhY2soKGxldmVsLCBtZXNzYWdlKSA9PiB7XG4gIGNvbnN0IG1zZyA9IG1lc3NhZ2UudHJpbUVuZCgpO1xuICBpZiAoIW1zZykgcmV0dXJuO1xuICBpZiAobGV2ZWwgPD0gQVZfTE9HX0VSUk9SKSBsb2dnZXIuZXJyb3IobXNnKTtcbiAgZWxzZSBpZiAobGV2ZWwgPD0gQVZfTE9HX1dBUk5JTkcpIGxvZ2dlci53YXJuKG1zZyk7XG59KTtcblxuZXhwb3J0IHsgbG9nZ2VyIH07XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzIxLlxuXG5pbXBvcnQgeyBhcHAsIGNyYXNoUmVwb3J0ZXIgfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IG1rZGlyU3luYyB9IGZyb20gXCJmc1wiO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi9sb2dnaW5nXCI7XG5cbmNvbnN0IFRBRyA9IFwiW0NyYXNoXVwiO1xuXG5leHBvcnQgZnVuY3Rpb24gc3RhcnRFbGVjdHJvbkNyYXNoUmVwb3J0ZXIoKSB7XG4gIGNvbnN0IGR1bXBEaXIgPSBqb2luKGFwcC5nZXRQYXRoKFwidXNlckRhdGFcIiksIFwiY3Jhc2hlc1wiKTtcbiAgbWtkaXJTeW5jKGR1bXBEaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICBhcHAuc2V0UGF0aChcImNyYXNoRHVtcHNcIiwgZHVtcERpcik7XG4gIGNyYXNoUmVwb3J0ZXIuc3RhcnQoe1xuICAgIHByb2R1Y3ROYW1lOiBcInB1cC1yZWNvcmRlclwiLFxuICAgIHVwbG9hZFRvU2VydmVyOiBmYWxzZSxcbiAgICBjb21wcmVzczogZmFsc2UsXG4gICAgaWdub3JlU3lzdGVtQ3Jhc2hIYW5kbGVyOiB0cnVlLFxuICB9KTtcbiAgbG9nZ2VyLmRlYnVnKFRBRywgXCJzZXQgZHVtcCB0b1wiLCBkdW1wRGlyKTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMjQuXG5cbmV4cG9ydCBmdW5jdGlvbiBub2VycjxGbiBleHRlbmRzICguLi5hcmdzOiBhbnlbXSkgPT4gYW55LCBEPihcbiAgZm46IEZuLFxuICBkZWZhdWx0VmFsdWU6IEQsXG4pOiAoLi4uYXJnczogUGFyYW1ldGVyczxGbj4pID0+IFJldHVyblR5cGU8Rm4+IHwgRCB7XG4gIHJldHVybiAoLi4uYXJncykgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXQgPSBmbiguLi5hcmdzKTtcbiAgICAgIGlmIChyZXQgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgIHJldHVybiByZXQuY2F0Y2goKCkgPT4gZGVmYXVsdFZhbHVlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXQ7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gZGVmYXVsdFZhbHVlO1xuICAgIH1cbiAgfTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDEvMzAuXG5cbmltcG9ydCB7IHNwYXduLCB0eXBlIENoaWxkUHJvY2VzcywgdHlwZSBTcGF3bk9wdGlvbnMgfSBmcm9tIFwiY2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0IHRyZWVLaWxsIGZyb20gXCJ0cmVlLWtpbGxcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuL2xvZ2dpbmdcIjtcblxuZXhwb3J0IGNvbnN0IFBVUF9BUkdTX0tFWSA9IFwiLS1wdXAtcHJpdi1hcmdzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJncygpIHtcbiAgY29uc3QgYXJndiA9IHByb2Nlc3MuYXJndjtcbiAgbGV0IHByaXYgPSBhcmd2LmZpbmQoKGFyZykgPT4gYXJnLnN0YXJ0c1dpdGgoUFVQX0FSR1NfS0VZKSk7XG4gIGlmICghcHJpdikge1xuICAgIGxvZ2dlci5kZWJ1ZyhcInByb2Nhcmd2XCIsIGFyZ3YpO1xuICAgIHJldHVybiBwcm9jZXNzLmFyZ3Y7XG4gIH1cbiAgY29uc3QgYXJncyA9IFtcImV4ZWNcIiwgLi4uYXJndi5zbGljZSgtMSldO1xuICBwcml2ID0gQnVmZmVyLmZyb20ocHJpdi5zcGxpdChcIj1cIilbMV0hLCBcImJhc2U2NFwiKS50b1N0cmluZygpO1xuICBhcmdzLnB1c2goLi4uSlNPTi5wYXJzZShwcml2KSk7XG4gIGxvZ2dlci5kZWJ1ZyhcInB1cGFyZ3NcIiwgYXJncyk7XG4gIHJldHVybiBhcmdzO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFByb2Nlc3NIYW5kbGUge1xuICBwcm9jZXNzOiBDaGlsZFByb2Nlc3M7XG4gIHdhaXQ6IFByb21pc2U8dm9pZD47XG4gIGdldCBraWxsZWQoKTogYm9vbGVhbjtcbiAga2lsbCgpOiB2b2lkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXhlYyhjbWQ6IHN0cmluZywgb3B0aW9ucz86IFNwYXduT3B0aW9ucyk6IFByb2Nlc3NIYW5kbGUge1xuICBjb25zdCBwYXJ0cyA9IGNtZC5zcGxpdChcIiBcIikuZmlsdGVyKChzKSA9PiBzLmxlbmd0aCk7XG4gIGNvbnN0IFtjb21tYW5kLCAuLi5hcmdzXSA9IHBhcnRzO1xuICBpZiAoIWNvbW1hbmQpIHRocm93IG5ldyBFcnJvcihcImVtcHR5IGNvbW1hbmRcIik7XG4gIGNvbnN0IHByb2MgPSBzcGF3bihjb21tYW5kLCBhcmdzLCB7XG4gICAgc3RkaW86IFwiaW5oZXJpdFwiLFxuICAgIC4uLm9wdGlvbnMsXG4gIH0pO1xuICBsZXQga2lsbGVkID0gZmFsc2U7XG4gIHJldHVybiB7XG4gICAgcHJvY2VzczogcHJvYyxcbiAgICB3YWl0OiBsb2dnZXIuYXR0YWNoKHByb2MsIGNvbW1hbmQpLFxuICAgIGdldCBraWxsZWQoKSB7XG4gICAgICByZXR1cm4ga2lsbGVkO1xuICAgIH0sXG4gICAga2lsbCgpIHtcbiAgICAgIGlmIChraWxsZWQpIHJldHVybjtcbiAgICAgIGtpbGxlZCA9IHRydWU7XG4gICAgICBjb25zdCBwaWQgPSBwcm9jLnBpZDtcbiAgICAgIGlmIChwaWQpIHRyZWVLaWxsKHBpZCwgXCJTSUdLSUxMXCIpO1xuICAgICAgZWxzZSBwcm9jLmtpbGwoXCJTSUdLSUxMXCIpO1xuICAgIH0sXG4gIH07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA2LlxuXG5pbXBvcnQgeiBmcm9tIFwiem9kXCI7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX1dJRFRIID0gMTkyMDtcbmV4cG9ydCBjb25zdCBERUZBVUxUX0hFSUdIVCA9IDEwODA7XG5leHBvcnQgY29uc3QgREVGQVVMVF9GUFMgPSAzMDtcbmV4cG9ydCBjb25zdCBERUZBVUxUX0RVUkFUSU9OID0gNTtcbmV4cG9ydCBjb25zdCBERUZBVUxUX09VVF9GSUxFID0gXCJvdXQvaHRtbC5tcDQsb3V0L2h0bWwud2VibVwiO1xuXG5leHBvcnQgY29uc3QgUmVuZGVyU2NoZW1hID0gei5vYmplY3Qoe1xuICBkdXJhdGlvbjogei5udW1iZXIoKS5kZXNjcmliZShcIkR1cmF0aW9uIGluIHNlY29uZHNcIiksXG4gIHdpZHRoOiB6Lm51bWJlcigpLmRlc2NyaWJlKFwiVmlkZW8gd2lkdGhcIiksXG4gIGhlaWdodDogei5udW1iZXIoKS5kZXNjcmliZShcIlZpZGVvIGhlaWdodFwiKSxcbiAgZnBzOiB6Lm51bWJlcigpLmRlc2NyaWJlKFwiRnJhbWVzIHBlciBzZWNvbmRcIiksXG4gIHdpdGhBdWRpbzogei5ib29sZWFuKCkuZGVzY3JpYmUoXCJDYXB0dXJlIGFuZCBlbmNvZGUgYXVkaW9cIiksXG4gIG91dEZpbGU6IHouc3RyaW5nKCkuZGVzY3JpYmUoXCJDb21tYS1zZXBhcmF0ZWQgb3V0cHV0IHBhdGhzOyBleHRlbnNpb24gKC5tcDQvLndlYm0pIHNlbGVjdHMgZW5jb2RlclwiKSxcbiAgdXNlSW5uZXJQcm94eTogei5ib29sZWFuKCkuZGVzY3JpYmUoXCJVc2UgYmlsaWJpbGkgaW5uZXIgcHJveHkgZm9yIHJlc291cmNlIGFjY2Vzc1wiKSxcbiAgZGV0ZXJtaW5pc3RpYzogei5ib29sZWFuKCkuZGVzY3JpYmUoXCJSZW5kZXIgYnkgZnJhbWUgcmF0aGVyIHRoYW4gcmVjb3JkaW5nXCIpLFxuICBkaXNhYmxlR3B1OiB6LmJvb2xlYW4oKS5kZXNjcmliZShcIkRpc2FibGUgR1BVIHJlbmRlcmluZywgbWF5IHJlZHVjZSBwZXJmb3JtYW5jZSBidXQgaW5jcmVhc2Ugc3RhYmlsaXR5XCIpLFxuICBkaXNhYmxlSHdDb2RlYzogei5ib29sZWFuKCkuZGVzY3JpYmUoXCJEaXNhYmxlIGhhcmR3YXJlIHZpZGVvIGVuY29kZXIgKE5WRU5DL1ZpZGVvVG9vbGJveCksIHVzZSBzb2Z0d2FyZSB4MjY1XCIpLFxuICB3aW5kb3dUb2xlcmFudDogei5ib29sZWFuKCkuZGVzY3JpYmUoXCJGYWxsIGJhY2sgdG8gZG9tLXJlYWR5IGlmIHdhcm11cCBsb2FkIHRpbWVzIG91dFwiKSxcbn0pO1xuXG5leHBvcnQgdHlwZSBSZW5kZXJPcHRpb25zID0gei5pbmZlcjx0eXBlb2YgUmVuZGVyU2NoZW1hPjtcblxuZXhwb3J0IHR5cGUgQ29uc29sZUNhbGxiYWNrID0gKGxldmVsOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZykgPT4gdm9pZDtcblxuZXhwb3J0IHR5cGUgUHJvZ3Jlc3NDYWxsYmFjayA9IChwcm9ncmVzczogbnVtYmVyKSA9PiB2b2lkO1xuXG5leHBvcnQgaW50ZXJmYWNlIElQQ1JlbmRlck9wdGlvbnMgZXh0ZW5kcyBSZW5kZXJPcHRpb25zIHtcbiAgc291cmNlOiBzdHJpbmc7XG4gIHNpZ25hbDogQWJvcnRTaWduYWw7XG4gIG9uUHJvZ3Jlc3M6IFByb2dyZXNzQ2FsbGJhY2s7XG4gIG9uQ29uc29sZTogQ29uc29sZUNhbGxiYWNrO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlbmRlclJlc3VsdCB7XG4gIG9wdGlvbnM6IFJlbmRlck9wdGlvbnM7XG4gIHdyaXR0ZW46IG51bWJlcjtcbiAgamFuazogbnVtYmVyO1xuICBvdXRGaWxlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0UmVuZGVyT3B0aW9uczogUmVuZGVyT3B0aW9ucyA9IHtcbiAgd2lkdGg6IERFRkFVTFRfV0lEVEgsXG4gIGhlaWdodDogREVGQVVMVF9IRUlHSFQsXG4gIGZwczogREVGQVVMVF9GUFMsXG4gIGR1cmF0aW9uOiBERUZBVUxUX0RVUkFUSU9OLFxuICBvdXRGaWxlOiBERUZBVUxUX09VVF9GSUxFLFxuICB3aXRoQXVkaW86IGZhbHNlLFxuICB1c2VJbm5lclByb3h5OiBmYWxzZSxcbiAgZGV0ZXJtaW5pc3RpYzogZmFsc2UsXG4gIGRpc2FibGVHcHU6IGZhbHNlLFxuICBkaXNhYmxlSHdDb2RlYzogZmFsc2UsXG4gIHdpbmRvd1RvbGVyYW50OiBmYWxzZSxcbn07XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA5LlxuXG5pbXBvcnQgeyBwcm9ncmFtIH0gZnJvbSBcImNvbW1hbmRlclwiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4vYmFzZS9sb2dnaW5nXCI7XG5pbXBvcnQgeyBub2VyciB9IGZyb20gXCIuL2Jhc2Uvbm9lcnJcIjtcbmltcG9ydCB7IHBhcnNlTnVtYmVyIH0gZnJvbSBcIi4vYmFzZS9wYXJzZXJcIjtcbmltcG9ydCB7IHBhcmdzIH0gZnJvbSBcIi4vYmFzZS9wcm9jZXNzXCI7XG5pbXBvcnQgeyBkZWZhdWx0UmVuZGVyT3B0aW9ucywgUmVuZGVyU2NoZW1hLCB0eXBlIFJlbmRlck9wdGlvbnMgfSBmcm9tIFwiLi9yZW5kZXJlci9zY2hlbWFcIjtcblxuZXhwb3J0IGludGVyZmFjZSBDTElPcHRpb25zIHtcbiAgbmFtZTogc3RyaW5nO1xuICBydW46IChzb3VyY2U6IHN0cmluZywgb3B0aW9uczogUmVuZGVyT3B0aW9ucykgPT4gUHJvbWlzZTx1bmtub3duPjtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG1ha2VDTEkob3B0aW9uczogQ0xJT3B0aW9ucykge1xuICBjb25zdCBzaGFwZSA9IFJlbmRlclNjaGVtYS5zaGFwZTtcbiAgY29uc3QgZCA9IGRlZmF1bHRSZW5kZXJPcHRpb25zO1xuICBwcm9ncmFtXG4gICAgLm5hbWUob3B0aW9ucy5uYW1lKVxuICAgIC5hcmd1bWVudChcIjxzb3VyY2U+XCIsIFwiZmlsZTovLywgaHR0cChzKTovLywgb3IgZGF0YTogVVJJXCIpXG4gICAgLm9wdGlvbihcIi1XLCAtLXdpZHRoIDxudW1iZXI+XCIsIHNoYXBlLndpZHRoLmRlc2NyaXB0aW9uLCBgJHtkLndpZHRofWApXG4gICAgLm9wdGlvbihcIi1ILCAtLWhlaWdodCA8bnVtYmVyPlwiLCBzaGFwZS5oZWlnaHQuZGVzY3JpcHRpb24sIGAke2QuaGVpZ2h0fWApXG4gICAgLm9wdGlvbihcIi1mLCAtLWZwcyA8bnVtYmVyPlwiLCBzaGFwZS5mcHMuZGVzY3JpcHRpb24sIGAke2QuZnBzfWApXG4gICAgLm9wdGlvbihcIi10LCAtLWR1cmF0aW9uIDxudW1iZXI+XCIsIHNoYXBlLmR1cmF0aW9uLmRlc2NyaXB0aW9uLCBgJHtkLmR1cmF0aW9ufWApXG4gICAgLm9wdGlvbihcIi1vLCAtLW91dC1maWxlIDxwYXRoPlwiLCBzaGFwZS5vdXRGaWxlLmRlc2NyaXB0aW9uLCBkLm91dEZpbGUpXG4gICAgLm9wdGlvbihcIi1hLCAtLXdpdGgtYXVkaW9cIiwgc2hhcGUud2l0aEF1ZGlvLmRlc2NyaXB0aW9uLCBkLndpdGhBdWRpbylcbiAgICAub3B0aW9uKFwiLWQsIC0tZGV0ZXJtaW5pc3RpY1wiLCBzaGFwZS5kZXRlcm1pbmlzdGljLmRlc2NyaXB0aW9uLCBkLmRldGVybWluaXN0aWMpXG4gICAgLm9wdGlvbihcIi0tdXNlLWlubmVyLXByb3h5XCIsIHNoYXBlLnVzZUlubmVyUHJveHkuZGVzY3JpcHRpb24sIGQudXNlSW5uZXJQcm94eSlcbiAgICAub3B0aW9uKFwiLS1kaXNhYmxlLWdwdVwiLCBzaGFwZS5kaXNhYmxlR3B1LmRlc2NyaXB0aW9uLCBkLmRpc2FibGVHcHUpXG4gICAgLm9wdGlvbihcIi0tZGlzYWJsZS1ody1jb2RlY1wiLCBzaGFwZS5kaXNhYmxlSHdDb2RlYy5kZXNjcmlwdGlvbiwgZC5kaXNhYmxlSHdDb2RlYylcbiAgICAub3B0aW9uKFwiLS13aW5kb3ctdG9sZXJhbnRcIiwgc2hhcGUud2luZG93VG9sZXJhbnQuZGVzY3JpcHRpb24sIGQud2luZG93VG9sZXJhbnQpXG4gICAgLmFjdGlvbihhc3luYyAoc291cmNlOiBzdHJpbmcsIG9wdHMpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IG9wdGlvbnMucnVuKHNvdXJjZSwge1xuICAgICAgICAgIHdpZHRoOiBub2VycihwYXJzZU51bWJlciwgZC53aWR0aCkob3B0cy53aWR0aCksXG4gICAgICAgICAgaGVpZ2h0OiBub2VycihwYXJzZU51bWJlciwgZC5oZWlnaHQpKG9wdHMuaGVpZ2h0KSxcbiAgICAgICAgICBmcHM6IG5vZXJyKHBhcnNlTnVtYmVyLCBkLmZwcykob3B0cy5mcHMpLFxuICAgICAgICAgIGR1cmF0aW9uOiBub2VycihwYXJzZU51bWJlciwgZC5kdXJhdGlvbikob3B0cy5kdXJhdGlvbiksXG4gICAgICAgICAgb3V0RmlsZTogb3B0cy5vdXRGaWxlID8/IGQub3V0RmlsZSxcbiAgICAgICAgICB3aXRoQXVkaW86IG9wdHMud2l0aEF1ZGlvID8/IGQud2l0aEF1ZGlvLFxuICAgICAgICAgIHVzZUlubmVyUHJveHk6IG9wdHMudXNlSW5uZXJQcm94eSA/PyBkLnVzZUlubmVyUHJveHksXG4gICAgICAgICAgZGV0ZXJtaW5pc3RpYzogb3B0cy5kZXRlcm1pbmlzdGljID8/IGQuZGV0ZXJtaW5pc3RpYyxcbiAgICAgICAgICBkaXNhYmxlR3B1OiBvcHRzLmRpc2FibGVHcHUgPz8gZC5kaXNhYmxlR3B1LFxuICAgICAgICAgIGRpc2FibGVId0NvZGVjOiBvcHRzLmRpc2FibGVId0NvZGVjID8/IGQuZGlzYWJsZUh3Q29kZWMsXG4gICAgICAgICAgd2luZG93VG9sZXJhbnQ6IG9wdHMud2luZG93VG9sZXJhbnQgPz8gZC53aW5kb3dUb2xlcmFudCxcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGxvZ2dlci5mYXRhbChlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgYXdhaXQgcHJvZ3JhbS5wYXJzZUFzeW5jKHBhcmdzKCkpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8wMS5cblxuaW1wb3J0IHR5cGUgeyBDaGlsZFByb2Nlc3MgfSBmcm9tIFwiY2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSBcImV2ZW50c1wiO1xuXG5leHBvcnQgY29uc3QgZW51bSBJcGNNc2dUeXBlIHtcbiAgLy8gY2hpbGQg4oaSIHBhcmVudFxuICBDT05TT0xFID0gXCJjb25zb2xlXCIsXG4gIFBST0dSRVNTID0gXCJwcm9ncmVzc1wiLFxuICBET05FID0gXCJkb25lXCIsXG4gIEVSUk9SID0gXCJlcnJvclwiLFxuICAvLyBwYXJlbnQg4oaSIGNoaWxkXG4gIENBTkNFTCA9IFwiY2FuY2VsXCIsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29uc29sZU1zZyB7XG4gIHR5cGU6IElwY01zZ1R5cGUuQ09OU09MRTtcbiAgbGV2ZWw6IHN0cmluZztcbiAgbWVzc2FnZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENhbmNlbE1zZyB7XG4gIHR5cGU6IElwY01zZ1R5cGUuQ0FOQ0VMO1xuICByZWFzb24/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSXBjRG9uZVBheWxvYWQge1xuICB3cml0dGVuOiBudW1iZXI7XG4gIGphbms6IG51bWJlcjtcbiAgb3V0RmlsZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFByb2dyZXNzTXNnIHtcbiAgdHlwZTogSXBjTXNnVHlwZS5QUk9HUkVTUztcbiAgdmFsdWU6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEb25lTXNnIHtcbiAgdHlwZTogSXBjTXNnVHlwZS5ET05FO1xuICBwYXlsb2FkOiBJcGNEb25lUGF5bG9hZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFcnJvck1zZyB7XG4gIHR5cGU6IElwY01zZ1R5cGUuRVJST1I7XG4gIGVycm9yOiBzdHJpbmc7XG59XG5cbmV4cG9ydCB0eXBlIElwY01zZyA9IENvbnNvbGVNc2cgfCBQcm9ncmVzc01zZyB8IERvbmVNc2cgfCBFcnJvck1zZyB8IENhbmNlbE1zZztcblxuZXhwb3J0IGludGVyZmFjZSBJcGNFdmVudHMge1xuICBwcm9ncmVzczogW3ZhbHVlOiBudW1iZXJdO1xuICBjb25zb2xlOiBbbGV2ZWw6IHN0cmluZywgbXNnOiBzdHJpbmddO1xuICBkb25lOiBbcGF5bG9hZDogSXBjRG9uZVBheWxvYWRdO1xuICBlcnJvcjogW2Vycm9yOiBFcnJvcl07XG4gIGNsb3NlOiBbY29kZTogbnVtYmVyIHwgbnVsbF07XG59XG5cbmV4cG9ydCBjbGFzcyBJcGNXcml0ZXIge1xuICB3cml0ZUNvbnNvbGUobGV2ZWw6IHN0cmluZywgbWVzc2FnZTogc3RyaW5nKSB7XG4gICAgdGhpcy5zZW5kKHsgdHlwZTogSXBjTXNnVHlwZS5DT05TT0xFLCBsZXZlbCwgbWVzc2FnZSB9KTtcbiAgfVxuXG4gIHdyaXRlUHJvZ3Jlc3ModmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuc2VuZCh7IHR5cGU6IElwY01zZ1R5cGUuUFJPR1JFU1MsIHZhbHVlIH0pO1xuICB9XG5cbiAgd3JpdGVFcnJvcihlcnJvcjogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuc2VuZCh7IHR5cGU6IElwY01zZ1R5cGUuRVJST1IsIGVycm9yIH0pO1xuICB9XG5cbiAgd3JpdGVEb25lKHBheWxvYWQ6IElwY0RvbmVQYXlsb2FkKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuc2VuZCh7IHR5cGU6IElwY01zZ1R5cGUuRE9ORSwgcGF5bG9hZCB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2VuZChtc2c6IElwY01zZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgaWYgKCFwcm9jZXNzLnNlbmQpIHJldHVybiByZXNvbHZlKCk7XG4gICAgICBwcm9jZXNzLnNlbmQobXNnLCAoKSA9PiByZXNvbHZlKCkpO1xuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBJcGNSZWFkZXIgZXh0ZW5kcyBFdmVudEVtaXR0ZXI8SXBjRXZlbnRzPiB7XG4gIGNvbnN0cnVjdG9yKGNoaWxkOiBDaGlsZFByb2Nlc3MpIHtcbiAgICBzdXBlcigpO1xuICAgIGNoaWxkLm9uKFwibWVzc2FnZVwiLCAocmF3KSA9PiB7XG4gICAgICBjb25zdCBtc2cgPSByYXcgYXMgSXBjTXNnO1xuICAgICAgc3dpdGNoIChtc2cudHlwZSkge1xuICAgICAgICBjYXNlIElwY01zZ1R5cGUuQ09OU09MRToge1xuICAgICAgICAgIHRoaXMuZW1pdChcImNvbnNvbGVcIiwgbXNnLmxldmVsLCBtc2cubWVzc2FnZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBJcGNNc2dUeXBlLlBST0dSRVNTOiB7XG4gICAgICAgICAgdGhpcy5lbWl0KFwicHJvZ3Jlc3NcIiwgbXNnLnZhbHVlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIElwY01zZ1R5cGUuRE9ORToge1xuICAgICAgICAgIHRoaXMuZW1pdChcImRvbmVcIiwgbXNnLnBheWxvYWQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgSXBjTXNnVHlwZS5FUlJPUjoge1xuICAgICAgICAgIHRoaXMuZW1pdChcImVycm9yXCIsIG5ldyBFcnJvcihtc2cuZXJyb3IpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIGNoaWxkLm9uY2UoXCJleGl0XCIsIChjKSA9PiB0aGlzLmVtaXQoXCJjbG9zZVwiLCBjKSk7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgTHUgQW8gKGx1YW9AYmlsaWJpbGkuY29tKSBvbiAyMDI2LzA1LzE4LlxuXG5jb25zdCBQTkdfVEFJTCA9IEJ1ZmZlci5mcm9tKFsweDQ5LCAweDQ1LCAweDRlLCAweDQ0LCAweGFlLCAweDQyLCAweDYwLCAweDgyXSk7XG5cbi8vIFNwbGl0cyBhIGNvbmNhdGVuYXRlZCBQTkcgYnl0ZSBzdHJlYW0gKGZmbXBlZyBpbWFnZTJwaXBlKSBpbnRvIGluZGl2aWR1YWwgUE5HIGJ1ZmZlcnMuXG5leHBvcnQgY2xhc3MgUG5nU3RyZWFtUGFyc2VyIHtcbiAgcHJpdmF0ZSBidWYgPSBCdWZmZXIuYWxsb2MoMCk7XG5cbiAgZmVlZChjaHVuazogQnVmZmVyKTogQnVmZmVyW10ge1xuICAgIHRoaXMuYnVmID0gQnVmZmVyLmNvbmNhdChbdGhpcy5idWYsIGNodW5rXSk7XG4gICAgY29uc3QgZnJhbWVzOiBCdWZmZXJbXSA9IFtdO1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBjb25zdCBpZHggPSB0aGlzLmJ1Zi5pbmRleE9mKFBOR19UQUlMKTtcbiAgICAgIGlmIChpZHggPCAwKSBicmVhaztcbiAgICAgIGNvbnN0IGVuZCA9IGlkeCArIFBOR19UQUlMLmxlbmd0aDtcbiAgICAgIGZyYW1lcy5wdXNoKEJ1ZmZlci5mcm9tKHRoaXMuYnVmLnN1YmFycmF5KDAsIGVuZCkpKTtcbiAgICAgIHRoaXMuYnVmID0gdGhpcy5idWYuc3ViYXJyYXkoZW5kKTtcbiAgICB9XG4gICAgcmV0dXJuIGZyYW1lcztcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBMdSBBbyAobHVhb0BiaWxpYmlsaS5jb20pIG9uIDIwMjYvMDUvMTguXG5cbmltcG9ydCB7IHNwYXduLCB0eXBlIENoaWxkUHJvY2VzcyB9IGZyb20gXCJjaGlsZF9wcm9jZXNzXCI7XG5pbXBvcnQgeyBmZm1wZWdQYXRoIH0gZnJvbSBcIm5vZGUtYXYvZmZtcGVnXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi4vLi4vYmFzZS9sb2dnaW5nXCI7XG5pbXBvcnQgdHlwZSB7IFZpZGVvTWV0YSB9IGZyb20gXCIuL2ZyYW1lX3NlcnZlclwiO1xuaW1wb3J0IHsgUG5nU3RyZWFtUGFyc2VyIH0gZnJvbSBcIi4vcG5nX3N0cmVhbVwiO1xuXG5jb25zdCBUQUcgPSBcIltEZWNvZGVTZXNzaW9uXVwiO1xuY29uc3QgRkZNUEVHID0gZmZtcGVnUGF0aCgpO1xuLy8gQ2FjaGVkIGZyYW1lcyBhcm91bmQgdGhlIGNvbnN1bWVyOyBmb3J3YXJkIHBsYXkgKyBzaG9ydCBiYWNrd2FyZCBzY3J1YiBib3RoIGhpdC5cbmNvbnN0IFJJTkdfTUFYID0gMjQwO1xuY29uc3QgUklOR19FVklDVF9MT09LQkFDSyA9IDkwO1xuLy8gR2FwIGxhcmdlciB0aGFuIHRoaXMgcmUtc2Vla3MgaW5zdGVhZCBvZiBkZWNvZGluZyB0aHJvdWdoLlxuY29uc3QgRk9SV0FSRF9XQUlUX01BWCA9IDkwO1xuY29uc3QgRlJBTUVfV0FJVF9USU1FT1VUX01TID0gNV8wMDA7XG5cbmludGVyZmFjZSBXYWl0ZXIge1xuICByZXNvbHZlOiAoYjogQnVmZmVyKSA9PiB2b2lkO1xuICByZWplY3Q6IChlOiBFcnJvcikgPT4gdm9pZDtcbiAgdGltZXI6IE5vZGVKUy5UaW1lb3V0O1xufVxuXG4vLyBPbmUgdmlkZW8ncyBkZWNvZGUgcGlwZWxpbmU6IGFuIGZmbXBlZyBjaGlsZCwgYW4gYWJzb2x1dGUtaW5kZXhlZCBmcmFtZSByaW5nLCBhbmQgcmUtc2VlayBjb250cm9sLlxuZXhwb3J0IGNsYXNzIERlY29kZVNlc3Npb24ge1xuICBwcml2YXRlIGZmbXBlZzogQ2hpbGRQcm9jZXNzIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIHBhcnNlciA9IG5ldyBQbmdTdHJlYW1QYXJzZXIoKTtcbiAgcHJpdmF0ZSByaW5nID0gbmV3IE1hcDxudW1iZXIsIEJ1ZmZlcj4oKTtcbiAgcHJpdmF0ZSBydW5CYXNlSWR4ID0gMDtcbiAgcHJpdmF0ZSBuZXh0RnJhbWVJZHggPSAwO1xuICBwcml2YXRlIHdhaXRlcnMgPSBuZXcgTWFwPG51bWJlciwgV2FpdGVyPigpO1xuICBwcml2YXRlIGV4aGF1c3RlZCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHJlYWRvbmx5IG1ldGE6IFZpZGVvTWV0YSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHNyYzogc3RyaW5nLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZnJhbWVDb3VudDogbnVtYmVyLFxuICApIHtcbiAgICB0aGlzLnNwYXduKDApO1xuICB9XG5cbiAgLy8gQWJzb2x1dGUtaW5kZXhlZDsgZW1wdHkgYnVmZmVyID0gcGFzdCBlbmQuIEJhY2t3YXJkL2ZhciBqdW1wcyByZS1zZWVrLlxuICBhc3luYyBnZXRGcmFtZShpZHhSYXc6IG51bWJlcik6IFByb21pc2U8QnVmZmVyPiB7XG4gICAgY29uc3QgaWR4ID0gTWF0aC5tYXgoMCwgaWR4UmF3KTtcbiAgICBpZiAoaWR4ID49IHRoaXMuZnJhbWVDb3VudCkgcmV0dXJuIEJ1ZmZlci5hbGxvYygwKTtcbiAgICBjb25zdCBoaXQgPSB0aGlzLnJpbmcuZ2V0KGlkeCk7XG4gICAgaWYgKGhpdCkge1xuICAgICAgdGhpcy5vblNlcnZlKGlkeCk7XG4gICAgICByZXR1cm4gaGl0O1xuICAgIH1cbiAgICBpZiAodGhpcy5uZWVkc1Jlc2VlayhpZHgpKSB0aGlzLnJlc2VlayhpZHgpO1xuICAgIGVsc2UgaWYgKHRoaXMuZXhoYXVzdGVkICYmIGlkeCA+PSB0aGlzLm5leHRGcmFtZUlkeCkgcmV0dXJuIEJ1ZmZlci5hbGxvYygwKTtcbiAgICByZXR1cm4gdGhpcy53YWl0RnJhbWUoaWR4KTtcbiAgfVxuXG4gIGNsb3NlKCk6IHZvaWQge1xuICAgIHRoaXMua2lsbEZmbXBlZygpO1xuICAgIHRoaXMucmVqZWN0QWxsV2FpdGVycyhuZXcgRXJyb3IoYGZyYW1lLXNlcnZlcjogc2Vzc2lvbiAke3RoaXMubWV0YS5pZH0gY2xvc2VkYCkpO1xuICAgIHRoaXMucmluZy5jbGVhcigpO1xuICB9XG5cbiAgcHJpdmF0ZSBuZWVkc1Jlc2VlayhpZHg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIGlmIChpZHggPCB0aGlzLnJ1bkJhc2VJZHgpIHJldHVybiB0cnVlOyAvLyBiZWZvcmUgdGhpcyBydW4ncyBmaXJzdCBmcmFtZVxuICAgIGlmIChpZHggPCB0aGlzLm5leHRGcmFtZUlkeCkgcmV0dXJuIHRydWU7IC8vIHByb2R1Y2VkIGFscmVhZHkgYnV0IGV2aWN0ZWQgZnJvbSByaW5nXG4gICAgcmV0dXJuIGlkeCA+IHRoaXMubmV4dEZyYW1lSWR4ICsgRk9SV0FSRF9XQUlUX01BWDsgLy8gdG9vIGZhciBhaGVhZCB0byB3YWl0IG91dFxuICB9XG5cbiAgcHJpdmF0ZSByZXNlZWsoaWR4OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLmtpbGxGZm1wZWcoKTtcbiAgICB0aGlzLnJlamVjdEFsbFdhaXRlcnMobmV3IEVycm9yKGBmcmFtZS1zZXJ2ZXI6IHN1cGVyc2VkZWQgYnkgcmUtc2VlayB0byBmcmFtZSAke2lkeH1gKSk7XG4gICAgdGhpcy5zcGF3bihpZHgpO1xuICB9XG5cbiAgcHJpdmF0ZSB3YWl0RnJhbWUoaWR4OiBudW1iZXIpOiBQcm9taXNlPEJ1ZmZlcj4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTxCdWZmZXI+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMud2FpdGVycy5kZWxldGUoaWR4KTtcbiAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihgZnJhbWUtc2VydmVyOiBmcmFtZSAke2lkeH0gbm90IGRlY29kZWQgd2l0aGluICR7RlJBTUVfV0FJVF9USU1FT1VUX01TfW1zYCkpO1xuICAgICAgfSwgRlJBTUVfV0FJVF9USU1FT1VUX01TKTtcbiAgICAgIHRoaXMud2FpdGVycy5zZXQoaWR4LCB7IHJlc29sdmUsIHJlamVjdCwgdGltZXIgfSk7XG4gICAgICB0aGlzLnJlZmlsbElmTmVlZGVkKCk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIG9uU2VydmUoaWR4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBsbyA9IGlkeCAtIFJJTkdfRVZJQ1RfTE9PS0JBQ0s7XG4gICAgY29uc3QgaGkgPSBpZHggKyBSSU5HX01BWDtcbiAgICBmb3IgKGNvbnN0IGsgb2YgdGhpcy5yaW5nLmtleXMoKSkge1xuICAgICAgaWYgKGsgPCBsbyB8fCBrID4gaGkpIHRoaXMucmluZy5kZWxldGUoayk7XG4gICAgfVxuICAgIHRoaXMucmVmaWxsSWZOZWVkZWQoKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVmaWxsSWZOZWVkZWQoKTogdm9pZCB7XG4gICAgY29uc3Qgb3V0ID0gdGhpcy5mZm1wZWc/LnN0ZG91dDtcbiAgICBpZiAob3V0ICYmIHRoaXMucmluZy5zaXplIDwgUklOR19NQVggJiYgb3V0LmlzUGF1c2VkKCkpIG91dC5yZXN1bWUoKTtcbiAgfVxuXG4gIC8vIGAtc3NgIGJlZm9yZSBgLWlgIGlzIGZyYW1lLWFjY3VyYXRlIGluIG1vZGVybiBmZm1wZWcuXG4gIHByaXZhdGUgc3Bhd24oZnJvbUlkeDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5wYXJzZXIgPSBuZXcgUG5nU3RyZWFtUGFyc2VyKCk7XG4gICAgdGhpcy5ydW5CYXNlSWR4ID0gZnJvbUlkeDtcbiAgICB0aGlzLm5leHRGcmFtZUlkeCA9IGZyb21JZHg7XG4gICAgdGhpcy5leGhhdXN0ZWQgPSBmYWxzZTtcbiAgICBjb25zdCBzc1NlYyA9IGZyb21JZHggLyB0aGlzLm1ldGEuZnBzO1xuICAgIGNvbnN0IGFyZ3MgPSBbXG4gICAgICBcIi1oaWRlX2Jhbm5lclwiLFxuICAgICAgXCItbG9nbGV2ZWxcIixcbiAgICAgIFwiZXJyb3JcIixcbiAgICAgIC4uLihzc1NlYyA+IDAgPyBbXCItc3NcIiwgU3RyaW5nKHNzU2VjKV0gOiBbXSksXG4gICAgICBcIi1pXCIsXG4gICAgICB0aGlzLnNyYyxcbiAgICAgIFwiLXZmXCIsXG4gICAgICBgZnBzPSR7dGhpcy5tZXRhLmZwc31gLFxuICAgICAgXCItY29sb3JfcmFuZ2VcIixcbiAgICAgIFwicGNcIixcbiAgICAgIFwiLWNvbG9yc3BhY2VcIixcbiAgICAgIFwiYnQ3MDlcIixcbiAgICAgIFwiLWNvbG9yX3ByaW1hcmllc1wiLFxuICAgICAgXCJidDcwOVwiLFxuICAgICAgXCItY29sb3JfdHJjXCIsXG4gICAgICBcImJ0NzA5XCIsXG4gICAgICBcIi1mXCIsXG4gICAgICBcImltYWdlMnBpcGVcIixcbiAgICAgIFwiLWM6dlwiLFxuICAgICAgXCJwbmdcIixcbiAgICAgIFwiLXBpeF9mbXRcIixcbiAgICAgIFwicmdiYVwiLFxuICAgICAgXCItXCIsXG4gICAgXTtcbiAgICBsb2dnZXIuZGVidWcoVEFHLCBgc3Bhd24gaWQ9JHt0aGlzLm1ldGEuaWQuc2xpY2UoMCwgOCl9IGZyb209JHtmcm9tSWR4fSAke3RoaXMubWV0YS53aWR0aH14JHt0aGlzLm1ldGEuaGVpZ2h0fWApO1xuICAgIGNvbnN0IHByb2MgPSBzcGF3bihGRk1QRUcsIGFyZ3MsIHsgc3RkaW86IFtcImlnbm9yZVwiLCBcInBpcGVcIiwgXCJwaXBlXCJdIH0pO1xuICAgIHRoaXMuZmZtcGVnID0gcHJvYztcbiAgICBwcm9jLnN0ZG91dCEub24oXCJkYXRhXCIsIChjaHVuazogQnVmZmVyKSA9PiB0aGlzLm9uU3Rkb3V0KGNodW5rKSk7XG4gICAgcHJvYy5zdGRlcnIhLm9uKFwiZGF0YVwiLCAoY2h1bms6IEJ1ZmZlcikgPT5cbiAgICAgIGxvZ2dlci53YXJuKFRBRywgYFske3RoaXMubWV0YS5pZH1dIGZmbXBlZyBzdGRlcnI6YCwgY2h1bmsudG9TdHJpbmcoKS50cmltKCkpLFxuICAgICk7XG4gICAgcHJvYy5vbihcImVycm9yXCIsIChlKSA9PiBsb2dnZXIud2FybihUQUcsIGBbJHt0aGlzLm1ldGEuaWR9XSBmZm1wZWcgc3Bhd24gZXJyb3I6YCwgZS5tZXNzYWdlKSk7XG4gICAgcHJvYy5vbihcImV4aXRcIiwgKGNvZGUpID0+IHtcbiAgICAgIGlmIChwcm9jICE9PSB0aGlzLmZmbXBlZykgcmV0dXJuOyAvLyBzdXBlcnNlZGVkIGJ5IGEgcmUtc2Vla1xuICAgICAgbG9nZ2VyLmRlYnVnKFRBRywgYGV4aXQgaWQ9JHt0aGlzLm1ldGEuaWQuc2xpY2UoMCwgOCl9IGNvZGU9JHtjb2RlfSBoZWFkPSR7dGhpcy5uZXh0RnJhbWVJZHh9YCk7XG4gICAgICBpZiAoY29kZSA9PT0gMCB8fCBjb2RlID09PSBudWxsKSB7XG4gICAgICAgIHRoaXMuZXhoYXVzdGVkID0gdHJ1ZTtcbiAgICAgICAgZm9yIChjb25zdCBbaWR4LCB3XSBvZiB0aGlzLndhaXRlcnMpIHtcbiAgICAgICAgICBpZiAoaWR4ID49IHRoaXMubmV4dEZyYW1lSWR4KSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQody50aW1lcik7XG4gICAgICAgICAgICB0aGlzLndhaXRlcnMuZGVsZXRlKGlkeCk7XG4gICAgICAgICAgICB3LnJlc29sdmUoQnVmZmVyLmFsbG9jKDApKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoY29kZSAhPT0gMjU1KSB7XG4gICAgICAgIHRoaXMucmVqZWN0QWxsV2FpdGVycyhuZXcgRXJyb3IoYGZmbXBlZyBleGl0ZWQgJHtjb2RlfSBmb3IgJHt0aGlzLnNyY31gKSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIG9uU3Rkb3V0KGNodW5rOiBCdWZmZXIpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGYgb2YgdGhpcy5wYXJzZXIuZmVlZChjaHVuaykpIHtcbiAgICAgIGNvbnN0IGlkeCA9IHRoaXMubmV4dEZyYW1lSWR4Kys7XG4gICAgICB0aGlzLnJpbmcuc2V0KGlkeCwgZik7XG4gICAgICBjb25zdCB3YWl0ZXIgPSB0aGlzLndhaXRlcnMuZ2V0KGlkeCk7XG4gICAgICBpZiAod2FpdGVyKSB7XG4gICAgICAgIHRoaXMud2FpdGVycy5kZWxldGUoaWR4KTtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHdhaXRlci50aW1lcik7XG4gICAgICAgIHdhaXRlci5yZXNvbHZlKGYpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy5yaW5nLnNpemUgPj0gUklOR19NQVgpIHRoaXMuZmZtcGVnPy5zdGRvdXQ/LnBhdXNlKCk7XG4gIH1cblxuICBwcml2YXRlIGtpbGxGZm1wZWcoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmZmbXBlZykgcmV0dXJuO1xuICAgIHRoaXMuZmZtcGVnLmtpbGwoXCJTSUdLSUxMXCIpO1xuICAgIHRoaXMuZmZtcGVnID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgcHJpdmF0ZSByZWplY3RBbGxXYWl0ZXJzKGVycjogRXJyb3IpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IHcgb2YgdGhpcy53YWl0ZXJzLnZhbHVlcygpKSB7XG4gICAgICBjbGVhclRpbWVvdXQody50aW1lcik7XG4gICAgICB3LnJlamVjdChlcnIpO1xuICAgIH1cbiAgICB0aGlzLndhaXRlcnMuY2xlYXIoKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBMdSBBbyAobHVhb0BiaWxpYmlsaS5jb20pIG9uIDIwMjYvMDUvMTguXG5cbmltcG9ydCB7IHNwYXduIH0gZnJvbSBcImNoaWxkX3Byb2Nlc3NcIjtcbmltcG9ydCB7IGZmbXBlZ1BhdGggfSBmcm9tIFwibm9kZS1hdi9mZm1wZWdcIjtcblxuY29uc3QgRkZNUEVHID0gZmZtcGVnUGF0aCgpO1xuY29uc3QgUFJPQkVfVElNRU9VVF9NUyA9IDVfMDAwO1xuXG5leHBvcnQgaW50ZXJmYWNlIFByb2JlUmVzdWx0IHtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIGR1cmF0aW9uOiBudW1iZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9iZShzcmM6IHN0cmluZyk6IFByb21pc2U8UHJvYmVSZXN1bHQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCBwcm9jID0gc3Bhd24oRkZNUEVHLCBbXCItaGlkZV9iYW5uZXJcIiwgXCItaVwiLCBzcmMsIFwiLXZmcmFtZXNcIiwgXCIwXCIsIFwiLWZcIiwgXCJmZm1ldGFkYXRhXCIsIFwiLVwiXSwge1xuICAgICAgc3RkaW86IFtcImlnbm9yZVwiLCBcInBpcGVcIiwgXCJwaXBlXCJdLFxuICAgIH0pO1xuICAgIGxldCBzdGRlcnIgPSBcIlwiO1xuICAgIGNvbnN0IHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBwcm9jLmtpbGwoXCJTSUdLSUxMXCIpO1xuICAgICAgcmVqZWN0KG5ldyBFcnJvcihgcHJvYmUgdGltZWQgb3V0IGFmdGVyICR7UFJPQkVfVElNRU9VVF9NU31tczogJHtzcmN9YCkpO1xuICAgIH0sIFBST0JFX1RJTUVPVVRfTVMpO1xuICAgIHByb2Muc3RkZXJyIS5vbihcImRhdGFcIiwgKGI6IEJ1ZmZlcikgPT4gKHN0ZGVyciArPSBiLnRvU3RyaW5nKCkpKTtcbiAgICBwcm9jLm9uKFwiZXJyb3JcIiwgKGUpID0+IHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICByZWplY3QoZSk7XG4gICAgfSk7XG4gICAgcHJvYy5vbihcImV4aXRcIiwgKCkgPT4ge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICAgIGNvbnN0IGRpbSA9IHN0ZGVyci5tYXRjaCgvLCAoXFxkKyl4KFxcZCspWywgXS8pO1xuICAgICAgY29uc3QgZHVyID0gc3RkZXJyLm1hdGNoKC9EdXJhdGlvbjogKFxcZCspOihcXGQrKTooXFxkK1xcLlxcZCspLyk7XG4gICAgICBpZiAoIWRpbSB8fCAhZHVyKSByZXR1cm4gcmVqZWN0KG5ldyBFcnJvcihgcHJvYmUgZmFpbGVkOiAke3NyY31cXG4ke3N0ZGVycn1gKSk7XG4gICAgICByZXNvbHZlKHtcbiAgICAgICAgd2lkdGg6IHBhcnNlSW50KGRpbVsxXSEsIDEwKSxcbiAgICAgICAgaGVpZ2h0OiBwYXJzZUludChkaW1bMl0hLCAxMCksXG4gICAgICAgIGR1cmF0aW9uOiBwYXJzZUludChkdXJbMV0hLCAxMCkgKiAzNjAwICsgcGFyc2VJbnQoZHVyWzJdISwgMTApICogNjAgKyBwYXJzZUZsb2F0KGR1clszXSEpLFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBMdSBBbyAobHVhb0BiaWxpYmlsaS5jb20pIG9uIDIwMjYvMDUvMTguXG5cbmltcG9ydCB7IHJhbmRvbVVVSUQgfSBmcm9tIFwiY3J5cHRvXCI7XG5pbXBvcnQgeyBEZWNvZGVTZXNzaW9uIH0gZnJvbSBcIi4vZGVjb2RlX3Nlc3Npb25cIjtcbmltcG9ydCB7IHByb2JlIH0gZnJvbSBcIi4vZmZwcm9iZVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFZpZGVvTWV0YSB7XG4gIGlkOiBzdHJpbmc7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICBmcHM6IG51bWJlcjtcbiAgZHVyYXRpb246IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPcGVuT3B0aW9ucyB7XG4gIHNyYzogc3RyaW5nO1xuICBmcHM6IG51bWJlcjtcbn1cblxuLy8gUmVnaXN0cnkgb2YgZGVjb2RlIHNlc3Npb25zIGtleWVkIGJ5IG9wYXF1ZSBpZDsgdGhlIHB1cC1mcmFtZSBwcm90b2NvbCBsYXllciBpcyB0aGUgb25seSBjYWxsZXIuXG5leHBvcnQgY2xhc3MgRnJhbWVTZXJ2ZXIge1xuICBwcml2YXRlIHNlc3Npb25zID0gbmV3IE1hcDxzdHJpbmcsIERlY29kZVNlc3Npb24+KCk7XG5cbiAgYXN5bmMgb3BlbihvcHRzOiBPcGVuT3B0aW9ucyk6IFByb21pc2U8VmlkZW9NZXRhPiB7XG4gICAgY29uc3QgaW5mbyA9IGF3YWl0IHByb2JlKG9wdHMuc3JjKTtcbiAgICBjb25zdCBpZCA9IHJhbmRvbVVVSUQoKTtcbiAgICBjb25zdCBtZXRhOiBWaWRlb01ldGEgPSB7IGlkLCB3aWR0aDogaW5mby53aWR0aCwgaGVpZ2h0OiBpbmZvLmhlaWdodCwgZnBzOiBvcHRzLmZwcywgZHVyYXRpb246IGluZm8uZHVyYXRpb24gfTtcbiAgICBjb25zdCBmcmFtZUNvdW50ID0gTWF0aC5tYXgoMSwgTWF0aC5yb3VuZChpbmZvLmR1cmF0aW9uICogb3B0cy5mcHMpKTtcbiAgICB0aGlzLnNlc3Npb25zLnNldChpZCwgbmV3IERlY29kZVNlc3Npb24obWV0YSwgb3B0cy5zcmMsIGZyYW1lQ291bnQpKTtcbiAgICByZXR1cm4gbWV0YTtcbiAgfVxuXG4gIGdldEZyYW1lKGlkOiBzdHJpbmcsIGlkeDogbnVtYmVyKTogUHJvbWlzZTxCdWZmZXI+IHtcbiAgICByZXR1cm4gdGhpcy5tdXN0KGlkKS5nZXRGcmFtZShpZHgpO1xuICB9XG5cbiAgY2xvc2UoaWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IHMgPSB0aGlzLnNlc3Npb25zLmdldChpZCk7XG4gICAgaWYgKCFzKSByZXR1cm47XG4gICAgcy5jbG9zZSgpO1xuICAgIHRoaXMuc2Vzc2lvbnMuZGVsZXRlKGlkKTtcbiAgfVxuXG4gIC8vIFJlbmRlci1lbmQgLyBhYm9ydCBzYWZldHkgbmV0OiB0aGUgc2hpbSBvbmx5IGNsb3NlcyBzZXNzaW9ucyBvbiBET00gcmVtb3ZhbC5cbiAgY2xvc2VBbGwoKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBpZCBvZiBbLi4udGhpcy5zZXNzaW9ucy5rZXlzKCldKSB0aGlzLmNsb3NlKGlkKTtcbiAgfVxuXG4gIHByaXZhdGUgbXVzdChpZDogc3RyaW5nKTogRGVjb2RlU2Vzc2lvbiB7XG4gICAgY29uc3QgcyA9IHRoaXMuc2Vzc2lvbnMuZ2V0KGlkKTtcbiAgICBpZiAoIXMpIHRocm93IG5ldyBFcnJvcihgZnJhbWUtc2VydmVyOiB1bmtub3duIHNlc3Npb24gaWQ9JHtpZH1gKTtcbiAgICByZXR1cm4gcztcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgZnJhbWVTZXJ2ZXIgPSBuZXcgRnJhbWVTZXJ2ZXIoKTtcbiIsIi8vIENyZWF0ZWQgYnkgTHUgQW8gKGx1YW9AYmlsaWJpbGkuY29tKSBvbiAyMDI2LzA1LzE4LlxuXG5pbXBvcnQgeyBwcm90b2NvbCB9IGZyb20gXCJlbGVjdHJvblwiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4uLy4uL2Jhc2UvbG9nZ2luZ1wiO1xuaW1wb3J0IHsgZnJhbWVTZXJ2ZXIsIHR5cGUgVmlkZW9NZXRhIH0gZnJvbSBcIi4vZnJhbWVfc2VydmVyXCI7XG5cbmNvbnN0IFRBRyA9IFwiW0ZyYW1lUHJvdG9jb2xdXCI7XG5cbi8vIFNjaGVtZSBpcyByZWdpc3RlcmVkIGFsb25nc2lkZSBgcHVwYCBpbiByZW5kZXJlci9wcm90b2NvbC50cyAoc2luZ2xlIGNhbGwgb25seSkuXG5jb25zdCBTQ0hFTUUgPSBcInB1cC1mcmFtZVwiO1xuXG5jb25zdCBDT1JTX0hFQURFUlM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gIFwiYWNjZXNzLWNvbnRyb2wtYWxsb3ctb3JpZ2luXCI6IFwiKlwiLFxuICBcImFjY2Vzcy1jb250cm9sLWFsbG93LW1ldGhvZHNcIjogXCJHRVQsIE9QVElPTlNcIixcbiAgXCJhY2Nlc3MtY29udHJvbC1hbGxvdy1oZWFkZXJzXCI6IFwiKlwiLFxufTtcblxuLy8gTXVzdCBiZSBjYWxsZWQgYWZ0ZXIgYXBwIGlzIHJlYWR5LlxuZXhwb3J0IGZ1bmN0aW9uIHNldHVwRnJhbWVQcm90b2NvbCgpOiB2b2lkIHtcbiAgcHJvdG9jb2wuaGFuZGxlKFNDSEVNRSwgYXN5bmMgKHJlcSkgPT4ge1xuICAgIGlmIChyZXEubWV0aG9kID09PSBcIk9QVElPTlNcIikgcmV0dXJuIG5ldyBSZXNwb25zZShudWxsLCB7IHN0YXR1czogMjA0LCBoZWFkZXJzOiBDT1JTX0hFQURFUlMgfSk7XG4gICAgY29uc3QgdXJsID0gbmV3IFVSTChyZXEudXJsKTtcbiAgICBsb2dnZXIuZGVidWcoVEFHLCBgJHtyZXEubWV0aG9kfSAke3VybC5ob3N0bmFtZX0ke3VybC5zZWFyY2h9YCk7XG4gICAgdHJ5IHtcbiAgICAgIHN3aXRjaCAodXJsLmhvc3RuYW1lKSB7XG4gICAgICAgIGNhc2UgXCJvcGVuXCI6XG4gICAgICAgICAgcmV0dXJuIGpzb25Payhhd2FpdCBmcmFtZVNlcnZlci5vcGVuKHsgc3JjOiB1cmwuc2VhcmNoUGFyYW1zLmdldChcInNyY1wiKSA/PyBcIlwiLCBmcHM6IGludCh1cmwsIFwiZnBzXCIsIDMwKSB9KSk7XG4gICAgICAgIGNhc2UgXCJmcmFtZVwiOlxuICAgICAgICAgIHJldHVybiBwbmdPayhhd2FpdCBmcmFtZVNlcnZlci5nZXRGcmFtZSh1cmwuc2VhcmNoUGFyYW1zLmdldChcImlkXCIpID8/IFwiXCIsIGludCh1cmwsIFwiaWR4XCIsIDApKSk7XG4gICAgICAgIGNhc2UgXCJjbG9zZVwiOlxuICAgICAgICAgIGZyYW1lU2VydmVyLmNsb3NlKHVybC5zZWFyY2hQYXJhbXMuZ2V0KFwiaWRcIikgPz8gXCJcIik7XG4gICAgICAgICAgcmV0dXJuIG5ldyBSZXNwb25zZShudWxsLCB7IHN0YXR1czogMjA0LCBoZWFkZXJzOiBDT1JTX0hFQURFUlMgfSk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIG5ldyBSZXNwb25zZShgdW5rbm93biBhY3Rpb246ICR7dXJsLmhvc3RuYW1lfWAsIHsgc3RhdHVzOiA0MDQsIGhlYWRlcnM6IENPUlNfSEVBREVSUyB9KTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zdCBtc2cgPSBlIGluc3RhbmNlb2YgRXJyb3IgPyBlLm1lc3NhZ2UgOiBTdHJpbmcoZSk7XG4gICAgICByZXR1cm4gbmV3IFJlc3BvbnNlKG1zZywgeyBzdGF0dXM6IDUwMCwgaGVhZGVyczogQ09SU19IRUFERVJTIH0pO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGpzb25PayhtZXRhOiBWaWRlb01ldGEpOiBSZXNwb25zZSB7XG4gIHJldHVybiBuZXcgUmVzcG9uc2UoSlNPTi5zdHJpbmdpZnkobWV0YSksIHtcbiAgICBoZWFkZXJzOiB7IC4uLkNPUlNfSEVBREVSUywgXCJjb250ZW50LXR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIgfSxcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHBuZ09rKGJ5dGVzOiBCdWZmZXIpOiBSZXNwb25zZSB7XG4gIC8vIEVtcHR5IGJ1ZmZlciBpcyB0aGUgZnJhbWVfc2VydmVyIFwidmlkZW8gZXhoYXVzdGVkXCIgc2lnbmFsIOKGkiA0MTAgR29uZSB0ZWxscyB0aGUgc2hpbSB0byBmaXJlIGBlbmRlZGAuXG4gIGlmIChieXRlcy5ieXRlTGVuZ3RoID09PSAwKSByZXR1cm4gbmV3IFJlc3BvbnNlKG51bGwsIHsgc3RhdHVzOiA0MTAsIGhlYWRlcnM6IENPUlNfSEVBREVSUyB9KTtcbiAgLy8gQ29weSBpbnRvIGEgZnJlc2ggQXJyYXlCdWZmZXIgc28gQmxvYiBvd25zIGEgY29udGlndW91cywgbm9uLXNoYXJlZCByZWdpb247IHRoaXMgZ2l2ZXNcbiAgLy8gQ2hyb21pdW0gYSBmaW5pdGUtbGVuZ3RoIGJvZHkgaXQgY2FuIGRyYWluIGFuZCByZXBvcnQgYXMgY29tcGxldGVkIHByb21wdGx5LlxuICBjb25zdCBjb3B5ID0gbmV3IFVpbnQ4QXJyYXkoYnl0ZXMuYnl0ZUxlbmd0aCk7XG4gIGNvcHkuc2V0KGJ5dGVzKTtcbiAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFtjb3B5LmJ1ZmZlciBhcyBBcnJheUJ1ZmZlcl0sIHsgdHlwZTogXCJpbWFnZS9wbmdcIiB9KTtcbiAgcmV0dXJuIG5ldyBSZXNwb25zZShibG9iLCB7XG4gICAgaGVhZGVyczogeyAuLi5DT1JTX0hFQURFUlMsIFwiY2FjaGUtY29udHJvbFwiOiBcIm5vLXN0b3JlXCIgfSxcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGludCh1cmw6IFVSTCwga2V5OiBzdHJpbmcsIGZhbGxiYWNrOiBudW1iZXIpOiBudW1iZXIge1xuICBjb25zdCB2ID0gdXJsLnNlYXJjaFBhcmFtcy5nZXQoa2V5KTtcbiAgY29uc3QgbiA9IHYgPyBwYXJzZUludCh2LCAxMCkgOiBOYU47XG4gIHJldHVybiBOdW1iZXIuaXNGaW5pdGUobikgPyBuIDogZmFsbGJhY2s7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA5LlxuXG5leHBvcnQgZnVuY3Rpb24gc2xlZXAobXM6IG51bWJlcikge1xuICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgbXMpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdpdGhUaW1lb3V0PFQ+KHA6IFByb21pc2U8VD4sIG1zOiBudW1iZXIsIGxhYmVsOiBzdHJpbmcpOiBQcm9taXNlPFQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4gcmVqZWN0KG5ldyBFcnJvcihgJHtsYWJlbH0gdGltZWQgb3V0IGFmdGVyICR7bXN9bXNgKSksIG1zKTtcbiAgICBwLnRoZW4ocmVzb2x2ZSwgcmVqZWN0KS5maW5hbGx5KCgpID0+IGNsZWFyVGltZW91dCh0aW1lcikpO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBlcmlvZGljYWwoY2FsbGJhY2s6IChjb3VudDogbnVtYmVyKSA9PiBQcm9taXNlPHZvaWQ+IHwgdm9pZCwgbXM6IG51bWJlcikge1xuICBsZXQgdG9rZW46IE5vZGVKUy5UaW1lb3V0O1xuICBsZXQgY2xvc2VkID0gZmFsc2U7XG4gIGFzeW5jIGZ1bmN0aW9uIHRpY2soY291bnQ6IG51bWJlcikge1xuICAgIGF3YWl0IGNhbGxiYWNrKGNvdW50KTtcbiAgICBpZiAoY2xvc2VkKSByZXR1cm47XG4gICAgdG9rZW4gPSBzZXRUaW1lb3V0KCgpID0+IHRpY2soY291bnQgKyAxKSwgbXMpO1xuICB9XG4gIHRva2VuID0gc2V0VGltZW91dCgoKSA9PiB0aWNrKDApLCBtcyk7XG4gIHJldHVybiAoKSA9PiB7XG4gICAgY2xvc2VkID0gdHJ1ZTtcbiAgICBjbGVhclRpbWVvdXQodG9rZW4pO1xuICB9O1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMy8xMy5cblxuaW1wb3J0IHR5cGUgeyBEZWJ1Z2dlciwgU2l6ZSB9IGZyb20gXCJlbGVjdHJvblwiO1xuaW1wb3J0IHsgd2l0aFRpbWVvdXQgfSBmcm9tIFwiLi90aW1pbmdcIjtcblxuY29uc3QgQ0RQX1RJTUVPVVRfTVMgPSA1XzAwMDtcblxuZXhwb3J0IGZ1bmN0aW9uIHNlbmQoY2RwOiBEZWJ1Z2dlciwgbWV0aG9kOiBzdHJpbmcsIHBhcmFtcz86IG9iamVjdCk6IFByb21pc2U8dW5rbm93bj4ge1xuICByZXR1cm4gd2l0aFRpbWVvdXQoY2RwLnNlbmRDb21tYW5kKG1ldGhvZCwgcGFyYW1zKSwgQ0RQX1RJTUVPVVRfTVMsIGBjZHAuJHttZXRob2R9YCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBldmFsSW4oY2RwOiBEZWJ1Z2dlciwgZXhwcmVzc2lvbjogc3RyaW5nKTogUHJvbWlzZTx1bmtub3duPiB7XG4gIHJldHVybiB3aXRoVGltZW91dChzZW5kKGNkcCwgXCJSdW50aW1lLmV2YWx1YXRlXCIsIHsgZXhwcmVzc2lvbiB9KSwgQ0RQX1RJTUVPVVRfTVMsIFwiZXZhbEluXCIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYWR2YW5jZVZpcnR1YWxUaW1lKGNkcDogRGVidWdnZXIsIGJ1ZGdldDogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY2RwLm9mZihcIm1lc3NhZ2VcIiwgaGFuZGxlcik7XG4gICAgICByZWplY3QobmV3IEVycm9yKGBhZHZhbmNlVmlydHVhbFRpbWUgdGltZWQgb3V0IGFmdGVyICR7Q0RQX1RJTUVPVVRfTVN9bXNgKSk7XG4gICAgfSwgQ0RQX1RJTUVPVVRfTVMpO1xuXG4gICAgY29uc3QgaGFuZGxlciA9IChfOiBFbGVjdHJvbi5FdmVudCwgbWV0aG9kOiBzdHJpbmcpID0+IHtcbiAgICAgIGlmIChtZXRob2QgPT09IFwiRW11bGF0aW9uLnZpcnR1YWxUaW1lQnVkZ2V0RXhwaXJlZFwiKSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgY2RwLm9mZihcIm1lc3NhZ2VcIiwgaGFuZGxlcik7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNkcC5vbihcIm1lc3NhZ2VcIiwgaGFuZGxlcik7XG4gICAgLy8gU3RhcnZhdGlvbj0xIGZvcmNlcyBidWRnZXQgdG8gZXhwaXJlIGV2ZW4gaWYgYSBzbG93IGZldGNoIHRhc2sgaXMgcGVuZGluZzsgZGVmYXVsdCB1bmJvdW5kZWQgZGVhZGxvY2tzLlxuICAgIHNlbmQoY2RwLCBcIkVtdWxhdGlvbi5zZXRWaXJ0dWFsVGltZVBvbGljeVwiLCB7XG4gICAgICBwb2xpY3k6IFwiYWR2YW5jZVwiLFxuICAgICAgYnVkZ2V0LFxuICAgICAgbWF4VmlydHVhbFRpbWVUYXNrU3RhcnZhdGlvbkNvdW50OiAxLFxuICAgIH0pLmNhdGNoKChlKSA9PiB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICBjZHAub2ZmKFwibWVzc2FnZVwiLCBoYW5kbGVyKTtcbiAgICAgIHJlamVjdChlKTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwYXVzZVZpcnR1YWxUaW1lKGNkcDogRGVidWdnZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgc2VuZChjZHAsIFwiRW11bGF0aW9uLnNldFZpcnR1YWxUaW1lUG9saWN5XCIsIHsgcG9saWN5OiBcInBhdXNlXCIgfSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXNpemVEcmF3YWJsZShjZHA6IERlYnVnZ2VyLCBzaXplOiBTaXplKSB7XG4gIGF3YWl0IHNlbmQoY2RwLCBcIkVtdWxhdGlvbi5zZXREZXZpY2VNZXRyaWNzT3ZlcnJpZGVcIiwge1xuICAgIC4uLnNpemUsXG4gICAgZGV2aWNlU2NhbGVGYWN0b3I6IDEsXG4gICAgbW9iaWxlOiBmYWxzZSxcbiAgfSk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA5LlxuXG5pbXBvcnQgeyB0eXBlIERlYnVnZ2VyLCB0eXBlIFNpemUsIHR5cGUgV2ViQ29udGVudHMgfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IGFkdmFuY2VWaXJ0dWFsVGltZSwgZXZhbEluIH0gZnJvbSBcIi4uL2Jhc2UvY2RwXCI7XG5pbXBvcnQgeyB3aXRoVGltZW91dCB9IGZyb20gXCIuLi9iYXNlL3RpbWluZ1wiO1xuXG5leHBvcnQgY29uc3QgRlJBTUVfU1lOQ19NQVJLRVJfV0lEVEggPSAzMjtcbmV4cG9ydCBjb25zdCBGUkFNRV9TWU5DX01BUktFUl9IRUlHSFQgPSAxO1xuZXhwb3J0IGNvbnN0IFNURUdPX1RJQ0tfQ0hBTk5FTCA9IFwic3RlZ28tdGlja1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRTdGVnb0hUTUwodGFyZ2V0VVJMOiBzdHJpbmcsIHNpemU6IFNpemUpOiBzdHJpbmcge1xuICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IHNpemU7XG4gIHJldHVybiBgPCFET0NUWVBFIGh0bWw+XG48aHRtbD5cbjxoZWFkPlxuICA8bWV0YSBjaGFyc2V0PVwiVVRGLThcIj5cbiAgPHN0eWxlPlxuICAgICogeyBtYXJnaW46IDA7IHBhZGRpbmc6IDA7IGJveC1zaXppbmc6IGJvcmRlci1ib3g7IH1cbiAgICBodG1sLCBib2R5IHsgd2lkdGg6ICR7d2lkdGh9cHg7IGhlaWdodDogJHtoZWlnaHQgKyAxfXB4OyBvdmVyZmxvdzogaGlkZGVuOyB9XG4gICAgI3RhcmdldCB7IFxuICAgICAgcG9zaXRpb246IGFic29sdXRlOyBcbiAgICAgIHRvcDogMDsgXG4gICAgICBsZWZ0OiAwOyBcbiAgICAgIHdpZHRoOiAke3dpZHRofXB4OyBcbiAgICAgIGhlaWdodDogJHtoZWlnaHR9cHg7IFxuICAgICAgYm9yZGVyOiBub25lOyBcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIH1cbiAgICAjc3RlZ28ge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgdG9wOiAke2hlaWdodH1weDtcbiAgICAgIGxlZnQ6IDA7XG4gICAgICB3aWR0aDogJHt3aWR0aH1weDtcbiAgICAgIGhlaWdodDogMXB4O1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICBpbWFnZS1yZW5kZXJpbmc6IHBpeGVsYXRlZDtcbiAgICB9XG4gICAgLyogSGVhcnRiZWF0OiBpbnZpc2libGUgYWx3YXlzLW9uIHRpY2suIEZvcmNlcyBDaHJvbWl1bSBjb21wb3NpdG9yIHRvIGlzc3VlIEJlZ2luRnJhbWUgZWFjaFxuICAgICAgIHZpcnR1YWwgdGljayBvbiBvdGhlcndpc2Utc3RhdGljIHBhZ2VzIHNvIGNhbnZhcyNzdGVnbyBwdXRJbWFnZURhdGEgdXBkYXRlcyBsYW5kIGluIHRoZVxuICAgICAgIGNhcHR1cmVkIHBhaW50IGV2ZW50LiBXaXRob3V0IHRoaXMsIGEgc3RhdGljIGlmcmFtZSArIHBhdXNlZCB2aXJ0dWFsIHRpbWUgbGVhdmVzIHRoZVxuICAgICAgIGNvbXBvc2l0b3IncyBsYXN0IGZyYW1lIGNhY2hlZCBldmVuIGFmdGVyIGNhbnZhcyBkaXJ0aWVzOyBpbnZhbGlkYXRlKCkgb25seSByZS1lbWl0cyB0aGVcbiAgICAgICBjYWNoZWQgZnJhbWUuICovXG4gICAgQGtleWZyYW1lcyBwdXBfaGVhcnRiZWF0IHtcbiAgICAgIDAlIHsgb3BhY2l0eTogMC41OyB9XG4gICAgICAxMDAlIHsgb3BhY2l0eTogMTsgfVxuICAgIH1cbiAgICAjaGVhcnRiZWF0IHtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIGJvdHRvbTogMDtcbiAgICAgIHJpZ2h0OiAwO1xuICAgICAgd2lkdGg6IDFweDtcbiAgICAgIGhlaWdodDogMXB4O1xuICAgICAgYmFja2dyb3VuZDogIzAwMDtcbiAgICAgIGFuaW1hdGlvbjogcHVwX2hlYXJ0YmVhdCAxcyBsaW5lYXIgaW5maW5pdGU7XG4gICAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICB9XG4gIDwvc3R5bGU+XG48L2hlYWQ+XG48Ym9keT5cbiAgPGlmcmFtZSBpZD1cInRhcmdldFwiIHNyYz1cIiR7dGFyZ2V0VVJMfVwiPjwvaWZyYW1lPlxuICA8Y2FudmFzIGlkPVwic3RlZ29cIiB3aWR0aD1cIiR7d2lkdGh9XCIgaGVpZ2h0PVwiMVwiPjwvY2FudmFzPlxuICA8ZGl2IGlkPVwiaGVhcnRiZWF0XCI+PC9kaXY+XG4gIDxzY3JpcHQ+XG4gICAgKGZ1bmN0aW9uKCkge1xuICAgICAgY29uc3QgeyBpcGNSZW5kZXJlciB9ID0gcmVxdWlyZSgnZWxlY3Ryb24nKTtcbiAgICAgIGNvbnN0IFdJRFRIID0gJHt3aWR0aH07XG4gICAgICBjb25zdCBNQVJLRVJfV0lEVEggPSAke0ZSQU1FX1NZTkNfTUFSS0VSX1dJRFRIfTtcbiAgICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdGVnbycpO1xuICAgICAgY29uc3QgY3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJywgeyB3aWxsUmVhZEZyZXF1ZW50bHk6IHRydWUgfSk7XG4gICAgICBsZXQgc3RhcnRUaW1lID0gbnVsbDtcbiAgICAgIGxldCByYWZJZCA9IG51bGw7XG5cbiAgICAgIGZ1bmN0aW9uIGVuY29kZVRpbWVzdGFtcCh0aW1lc3RhbXBNcykge1xuICAgICAgICBjb25zdCBpbWFnZURhdGEgPSBjdHguY3JlYXRlSW1hZ2VEYXRhKFdJRFRILCAxKTtcbiAgICAgICAgY29uc3QgZGF0YSA9IGltYWdlRGF0YS5kYXRhO1xuXG4gICAgICAgIGNvbnN0IHRpbWVzdGFtcEludCA9IE1hdGguZmxvb3IodGltZXN0YW1wTXMpID4+PiAwO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgTUFSS0VSX1dJRFRIOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBiaXQgPSAodGltZXN0YW1wSW50ID4+PiAoTUFSS0VSX1dJRFRIIC0gMSAtIGkpKSAmIDE7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSBiaXQgPyAyNTUgOiAwO1xuICAgICAgICAgIGNvbnN0IGlkeCA9IGkgKiA0O1xuICAgICAgICAgIGRhdGFbaWR4XSA9IHZhbHVlO1xuICAgICAgICAgIGRhdGFbaWR4ICsgMV0gPSB2YWx1ZTtcbiAgICAgICAgICBkYXRhW2lkeCArIDJdID0gdmFsdWU7XG4gICAgICAgICAgZGF0YVtpZHggKyAzXSA9IDI1NTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAobGV0IGkgPSBNQVJLRVJfV0lEVEg7IGkgPCBXSURUSDsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgaWR4ID0gaSAqIDQ7XG4gICAgICAgICAgZGF0YVtpZHhdID0gMDtcbiAgICAgICAgICBkYXRhW2lkeCArIDFdID0gMDtcbiAgICAgICAgICBkYXRhW2lkeCArIDJdID0gMDtcbiAgICAgICAgICBkYXRhW2lkeCArIDNdID0gMjU1O1xuICAgICAgICB9XG5cbiAgICAgICAgY3R4LnB1dEltYWdlRGF0YShpbWFnZURhdGEsIDAsIDApO1xuICAgICAgICBpcGNSZW5kZXJlci5zZW5kKCcke1NURUdPX1RJQ0tfQ0hBTk5FTH0nKTtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gdXBkYXRlTG9vcCgpIHtcbiAgICAgICAgaWYgKHN0YXJ0VGltZSA9PT0gbnVsbCkgcmV0dXJuO1xuICAgICAgICBjb25zdCBlbGFwc2VkID0gcGVyZm9ybWFuY2Uubm93KCkgLSBzdGFydFRpbWU7XG4gICAgICAgIGVuY29kZVRpbWVzdGFtcChlbGFwc2VkKTtcbiAgICAgICAgcmFmSWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodXBkYXRlTG9vcCk7XG4gICAgICB9XG5cbiAgICAgIHdpbmRvdy5fX3B1cF9zdGFydF9zdGVnb19fID0gKCkgPT4ge1xuICAgICAgICBzdGFydFRpbWUgPSBwZXJmb3JtYW5jZS5ub3coKTtcbiAgICAgICAgZW5jb2RlVGltZXN0YW1wKDApO1xuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodXBkYXRlTG9vcCk7XG4gICAgICB9O1xuXG4gICAgICB3aW5kb3cuX19wdXBfZHJhd19zdGVnb19fID0gKG1zKSA9PiB7XG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiBlbmNvZGVUaW1lc3RhbXAobXMpKTtcbiAgICAgIH07XG5cbiAgICAgIHdpbmRvdy5fX3B1cF9zdG9wX3N0ZWdvX18gPSAoKSA9PiB7XG4gICAgICAgIGlmIChyYWZJZCAhPT0gbnVsbCkge1xuICAgICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHJhZklkKTtcbiAgICAgICAgICByYWZJZCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSkoKTtcbiAgPC9zY3JpcHQ+XG48L2JvZHk+XG48L2h0bWw+YDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlY29kZVN0ZWdvKGJpdG1hcDogQnVmZmVyLCBzaXplOiBTaXplKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSBzaXplO1xuICBpZiAod2lkdGggPCBGUkFNRV9TWU5DX01BUktFUl9XSURUSCB8fCBoZWlnaHQgPCAyKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IG1hcmtlclJvdyA9IGhlaWdodCAtIDE7XG5cbiAgbGV0IHRpbWVzdGFtcCA9IDA7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgRlJBTUVfU1lOQ19NQVJLRVJfV0lEVEg7IGkrKykge1xuICAgIGNvbnN0IHBpeGVsSWR4ID0gKG1hcmtlclJvdyAqIHdpZHRoICsgaSkgKiA0O1xuICAgIGNvbnN0IHIgPSBiaXRtYXBbcGl4ZWxJZHhdID8/IDA7XG4gICAgY29uc3QgYml0ID0gciA+IDEyNyA/IDEgOiAwO1xuICAgIHRpbWVzdGFtcCA9ICh0aW1lc3RhbXAgPDwgMSkgfCBiaXQ7XG4gIH1cblxuICB0aW1lc3RhbXAgPSB0aW1lc3RhbXAgPj4+IDA7XG5cbiAgaWYgKCFOdW1iZXIuaXNGaW5pdGUodGltZXN0YW1wKSB8fCB0aW1lc3RhbXAgPCAwIHx8IHRpbWVzdGFtcCA+IDFlNykge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICByZXR1cm4gdGltZXN0YW1wO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhcnRTdGVnbyhjZHA6IERlYnVnZ2VyKSB7XG4gIHJldHVybiBldmFsSW4oY2RwLCBgX19wdXBfc3RhcnRfc3RlZ29fXygpYCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdG9wU3RlZ28oY2RwOiBEZWJ1Z2dlcikge1xuICByZXR1cm4gZXZhbEluKGNkcCwgYF9fcHVwX3N0b3Bfc3RlZ29fXygpYCk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzd2FwQnVmZmVyKHdjOiBXZWJDb250ZW50cywgZXhwZWN0ZWQ6IG51bWJlciwgaW50ZXJ2YWw6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBzd2FwcGVkID0gbmV3IFByb21pc2UoKHIpID0+IHdjLmlwYy5vbmNlKFNURUdPX1RJQ0tfQ0hBTk5FTCwgcikpO1xuICBhd2FpdCBldmFsSW4od2MuZGVidWdnZXIsIGBfX3B1cF9kcmF3X3N0ZWdvX18oJHtleHBlY3RlZH0pYCk7XG4gIGF3YWl0IGFkdmFuY2VWaXJ0dWFsVGltZSh3Yy5kZWJ1Z2dlciwgaW50ZXJ2YWwpO1xuICBhd2FpdCB3aXRoVGltZW91dChzd2FwcGVkLCA1XzAwMCwgXCJzd2FwQnVmZmVyXCIpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8wMS5cblxuaW1wb3J0IHR5cGUgeyBTaXplIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBwcm90b2NvbCB9IGZyb20gXCJlbGVjdHJvblwiO1xuaW1wb3J0IHsgYnVpbGRTdGVnb0hUTUwgfSBmcm9tIFwiLi9zdGVnb1wiO1xuXG5jb25zdCBQVVBfU0NIRU1FID0gXCJwdXBcIjtcbmNvbnN0IEZSQU1FX1NDSEVNRSA9IFwicHVwLWZyYW1lXCI7XG5cbi8vIGBwcm90b2NvbC5yZWdpc3RlclNjaGVtZXNBc1ByaXZpbGVnZWRgIGhvbm9ycyBvbmx5IHRoZSBMQVNUIGNhbGwg4oCUIHJlZ2lzdGVyIGV2ZXJ5XG4vLyBjdXN0b20gc2NoZW1lIGluIHRoaXMgb25lIHBsYWNlLiBOZXcgc2NoZW1lcyBtdXN0IGJlIGFkZGVkIHRvIFBSSVZJTEVHRURfU0NIRU1FUyBiZWxvdy5cbmNvbnN0IFBSSVZJTEVHRURfUFJJVklMRUdFUyA9IHtcbiAgc3RhbmRhcmQ6IHRydWUsXG4gIHNlY3VyZTogdHJ1ZSxcbiAgYnlwYXNzQ1NQOiB0cnVlLFxuICBhbGxvd1NlcnZpY2VXb3JrZXJzOiB0cnVlLFxuICBzdXBwb3J0RmV0Y2hBUEk6IHRydWUsXG4gIGNvcnNFbmFibGVkOiB0cnVlLFxuICBzdHJlYW06IHRydWUsXG4gIGNvZGVDYWNoZTogdHJ1ZSxcbn0gYXMgY29uc3Q7XG5cbi8vIE11c3QgYmUgY2FsbGVkIHN5bmNocm9ub3VzbHkgYmVmb3JlIGFwcCBpcyByZWFkeS5cbnByb3RvY29sLnJlZ2lzdGVyU2NoZW1lc0FzUHJpdmlsZWdlZChbXG4gIHsgc2NoZW1lOiBQVVBfU0NIRU1FLCBwcml2aWxlZ2VzOiBQUklWSUxFR0VEX1BSSVZJTEVHRVMgfSxcbiAgeyBzY2hlbWU6IEZSQU1FX1NDSEVNRSwgcHJpdmlsZWdlczogUFJJVklMRUdFRF9QUklWSUxFR0VTIH0sXG5dKTtcblxuLy8gTXVzdCBiZSBjYWxsZWQgYWZ0ZXIgYXBwIGlzIHJlYWR5LlxuZXhwb3J0IGZ1bmN0aW9uIHNldHVwUHVwUHJvdG9jb2woKTogdm9pZCB7XG4gIHByb3RvY29sLmhhbmRsZShQVVBfU0NIRU1FLCAocmVxKSA9PiB7XG4gICAgY29uc3QgdXJsID0gbmV3IFVSTChyZXEudXJsKTtcbiAgICBjb25zdCBzcmMgPSB1cmwuc2VhcmNoUGFyYW1zLmdldChcInNyY1wiKSA/PyBcIlwiO1xuICAgIGNvbnN0IHdpZHRoID0gcGFyc2VJbnQodXJsLnNlYXJjaFBhcmFtcy5nZXQoXCJ3XCIpID8/IFwiMFwiLCAxMCk7XG4gICAgY29uc3QgaGVpZ2h0ID0gcGFyc2VJbnQodXJsLnNlYXJjaFBhcmFtcy5nZXQoXCJoXCIpID8/IFwiMFwiLCAxMCk7XG4gICAgY29uc3QgaHRtbCA9IGJ1aWxkU3RlZ29IVE1MKHNyYywgeyB3aWR0aCwgaGVpZ2h0IH0pO1xuICAgIHJldHVybiBuZXcgUmVzcG9uc2UoaHRtbCwgeyBoZWFkZXJzOiB7IFwiY29udGVudC10eXBlXCI6IFwidGV4dC9odG1sXCIgfSB9KTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTdGVnb1VSTChzcmM6IHN0cmluZywgc2l6ZTogU2l6ZSk6IHN0cmluZyB7XG4gIGNvbnN0IHVybCA9IG5ldyBVUkwoYCR7UFVQX1NDSEVNRX06Ly9zdGVnb2ApO1xuICB1cmwuc2VhcmNoUGFyYW1zLnNldChcInNyY1wiLCBzcmMucmVwbGFjZShcImh0dHA6Ly9cIiwgXCJodHRwczovL1wiKSk7XG4gIHVybC5zZWFyY2hQYXJhbXMuc2V0KFwid1wiLCBTdHJpbmcoc2l6ZS53aWR0aCkpO1xuICB1cmwuc2VhcmNoUGFyYW1zLnNldChcImhcIiwgU3RyaW5nKHNpemUuaGVpZ2h0KSk7XG4gIHJldHVybiB1cmwudG9TdHJpbmcoKTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDEvMzAuXG5cbmludGVyZmFjZSBRdWV1ZUVudHJ5IHtcbiAgcnVuOiBWb2lkRnVuY3Rpb247XG4gIHJlamVjdDogKHJlYXNvbjogdW5rbm93bikgPT4gdm9pZDtcbiAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG59XG5cbmV4cG9ydCBjbGFzcyBDb25jdXJyZW5jeUxpbWl0ZXIge1xuICBwcml2YXRlIF9hY3RpdmUgPSAwO1xuICBwcml2YXRlIF9xdWV1ZTogUXVldWVFbnRyeVtdID0gW107XG4gIHByaXZhdGUgX3NpZ25hbHMgPSBuZXcgV2Vha1NldDxBYm9ydFNpZ25hbD4oKTtcbiAgcHJpdmF0ZSBfcmVzb2x2ZT86IFZvaWRGdW5jdGlvbjtcblxuICBjb25zdHJ1Y3RvcihyZWFkb25seSBtYXhDb25jdXJyZW5jeTogbnVtYmVyKSB7fVxuXG4gIGdldCBhY3RpdmUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fYWN0aXZlO1xuICB9XG5cbiAgZ2V0IHBlbmRpbmcoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fcXVldWUubGVuZ3RoO1xuICB9XG5cbiAgZ2V0IHN0YXRzKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBhY3RpdmU6ICR7dGhpcy5hY3RpdmV9LCBwZW5kaW5nOiAke3RoaXMucGVuZGluZ31gO1xuICB9XG5cbiAgYXN5bmMgc2NoZWR1bGU8VD4oZm46ICgpID0+IFByb21pc2U8VD4sIHNpZ25hbD86IEFib3J0U2lnbmFsKTogUHJvbWlzZTxUPiB7XG4gICAgc2lnbmFsPy50aHJvd0lmQWJvcnRlZCgpO1xuXG4gICAgaWYgKHNpZ25hbCAmJiAhdGhpcy5fc2lnbmFscy5oYXMoc2lnbmFsKSkge1xuICAgICAgdGhpcy5fc2lnbmFscy5hZGQoc2lnbmFsKTtcbiAgICAgIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgKCkgPT4gdGhpcy5mbHVzaChzaWduYWwpLCB7IG9uY2U6IHRydWUgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPFQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMuX3F1ZXVlLnB1c2goe1xuICAgICAgICBydW46ICgpID0+IHtcbiAgICAgICAgICBpZiAoc2lnbmFsPy5hYm9ydGVkKSB7XG4gICAgICAgICAgICByZWplY3Qoc2lnbmFsLnJlYXNvbik7XG4gICAgICAgICAgICB0aGlzLm5leHQoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5fYWN0aXZlKys7XG4gICAgICAgICAgZm4oKVxuICAgICAgICAgICAgLnRoZW4oKHYpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5fYWN0aXZlLS07XG4gICAgICAgICAgICAgIHJlc29sdmUodik7XG4gICAgICAgICAgICAgIHRoaXMubmV4dCgpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLl9hY3RpdmUtLTtcbiAgICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgICAgICB0aGlzLm5leHQoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICByZWplY3QsXG4gICAgICAgIHNpZ25hbCxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5uZXh0KCk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBkcmFpbigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fYWN0aXZlID09PSAwICYmIHRoaXMucGVuZGluZyA9PT0gMCkgcmV0dXJuO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocikgPT4gKHRoaXMuX3Jlc29sdmUgPSByKSk7XG4gIH1cblxuICBwcml2YXRlIGZsdXNoKHNpZ25hbDogQWJvcnRTaWduYWwpIHtcbiAgICBjb25zdCBrZWVwOiBRdWV1ZUVudHJ5W10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIHRoaXMuX3F1ZXVlKSB7XG4gICAgICBpZiAoZW50cnkuc2lnbmFsID09PSBzaWduYWwpIHtcbiAgICAgICAgZW50cnkucmVqZWN0KHNpZ25hbC5yZWFzb24pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAga2VlcC5wdXNoKGVudHJ5KTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5fcXVldWUgPSBrZWVwO1xuICAgIHRoaXMubmV4dCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBuZXh0KCkge1xuICAgIGlmICh0aGlzLl9hY3RpdmUgPT09IDAgJiYgdGhpcy5wZW5kaW5nID09PSAwKSB7XG4gICAgICB0aGlzLl9yZXNvbHZlPy4oKTtcbiAgICAgIHRoaXMuX3Jlc29sdmUgPSB1bmRlZmluZWQ7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLl9hY3RpdmUgPCB0aGlzLm1heENvbmN1cnJlbmN5KSB7XG4gICAgICB0aGlzLl9xdWV1ZS5zaGlmdCgpPy5ydW4oKTtcbiAgICB9XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMTIuXG5cbmltcG9ydCB7IENvZGVjLCBDb2RlY0NvbnRleHQsIEZGbXBlZ0Vycm9yLCBGcmFtZSwgSGFyZHdhcmVGcmFtZXNDb250ZXh0LCBQYWNrZXQsIFJhdGlvbmFsLCB0eXBlIFN0cmVhbSB9IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQge1xuICBBVl9DT0RFQ19GTEFHX0dMT0JBTF9IRUFERVIsXG4gIEFWRVJST1JfRUFHQUlOLFxuICBBVkVSUk9SX0VPRixcbiAgdHlwZSBBVkNvbG9yUmFuZ2UsXG4gIHR5cGUgQVZQaXhlbEZvcm1hdCxcbn0gZnJvbSBcIm5vZGUtYXYvY29uc3RhbnRzXCI7XG5pbXBvcnQgdHlwZSB7IEZvcm1hdE11eGVyIH0gZnJvbSBcIi4vbXV4ZXJcIjtcblxuZXhwb3J0IGludGVyZmFjZSBWaWRlb0N0eE9wdGlvbnMge1xuICBjb2RlYzogQ29kZWM7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICBmcHM6IG51bWJlcjtcbiAgYml0cmF0ZTogbnVtYmVyO1xuICBwaXhlbEZvcm1hdDogQVZQaXhlbEZvcm1hdDtcbiAgY29kZWNUYWc/OiBzdHJpbmc7XG4gIGNvbG9yUmFuZ2U/OiBBVkNvbG9yUmFuZ2U7XG4gIG9wdGlvbnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICBod0ZyYW1lc0N0eD86IEhhcmR3YXJlRnJhbWVzQ29udGV4dDtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG9wZW5WaWRlb0N0eChvcHRzOiBWaWRlb0N0eE9wdGlvbnMsIGxhYmVsOiBzdHJpbmcpOiBQcm9taXNlPENvZGVjQ29udGV4dD4ge1xuICBjb25zdCBjdHggPSBuZXcgQ29kZWNDb250ZXh0KCk7XG4gIGN0eC5hbGxvY0NvbnRleHQzKG9wdHMuY29kZWMpO1xuICBjdHguY29kZWNJZCA9IG9wdHMuY29kZWMuaWQ7XG4gIGN0eC53aWR0aCA9IG9wdHMud2lkdGg7XG4gIGN0eC5oZWlnaHQgPSBvcHRzLmhlaWdodDtcbiAgY3R4LnBpeGVsRm9ybWF0ID0gb3B0cy5waXhlbEZvcm1hdDtcbiAgY3R4LnRpbWVCYXNlID0gbmV3IFJhdGlvbmFsKDEsIG9wdHMuZnBzKTtcbiAgY3R4LmZyYW1lcmF0ZSA9IG5ldyBSYXRpb25hbChvcHRzLmZwcywgMSk7XG4gIGN0eC5nb3BTaXplID0gb3B0cy5mcHMgKiAyO1xuICBjdHguYml0UmF0ZSA9IEJpZ0ludChvcHRzLmJpdHJhdGUpO1xuICBjdHguc2V0RmxhZ3MoQVZfQ09ERUNfRkxBR19HTE9CQUxfSEVBREVSKTtcbiAgaWYgKG9wdHMuY29kZWNUYWcpIGN0eC5jb2RlY1RhZyA9IG9wdHMuY29kZWNUYWc7XG4gIGlmIChvcHRzLmNvbG9yUmFuZ2UgIT09IHVuZGVmaW5lZCkgY3R4LmNvbG9yUmFuZ2UgPSBvcHRzLmNvbG9yUmFuZ2U7XG4gIGlmIChvcHRzLmh3RnJhbWVzQ3R4KSBjdHguaHdGcmFtZXNDdHggPSBvcHRzLmh3RnJhbWVzQ3R4O1xuICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyhvcHRzLm9wdGlvbnMgPz8ge30pKSBjdHguc2V0T3B0aW9uKGssIHYpO1xuICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgY3R4Lm9wZW4yKG9wdHMuY29kZWMsIG51bGwpLCBsYWJlbCk7XG4gIHJldHVybiBjdHg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYWtlRnJhbWUod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIsIHBpeEZtdDogQVZQaXhlbEZvcm1hdCk6IEZyYW1lIHtcbiAgY29uc3QgZnJhbWUgPSBuZXcgRnJhbWUoKTtcbiAgZnJhbWUuYWxsb2MoKTtcbiAgZnJhbWUuZm9ybWF0ID0gcGl4Rm10O1xuICBmcmFtZS53aWR0aCA9IHdpZHRoO1xuICBmcmFtZS5oZWlnaHQgPSBoZWlnaHQ7XG4gIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihmcmFtZS5nZXRCdWZmZXIoMCksIFwiZnJhbWUuZ2V0QnVmZmVyXCIpO1xuICByZXR1cm4gZnJhbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYWtlUGFja2V0KCk6IFBhY2tldCB7XG4gIGNvbnN0IHBrdCA9IG5ldyBQYWNrZXQoKTtcbiAgcGt0LmFsbG9jKCk7XG4gIHJldHVybiBwa3Q7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkcmFpblBhY2tldHMoY3R4OiBDb2RlY0NvbnRleHQsIHBrdDogUGFja2V0LCBzdHJlYW06IFN0cmVhbSwgbXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gIHdoaWxlICh0cnVlKSB7XG4gICAgY29uc3QgciA9IGF3YWl0IGN0eC5yZWNlaXZlUGFja2V0KHBrdCk7XG4gICAgaWYgKHIgPT09IEFWRVJST1JfRUFHQUlOIHx8IHIgPT09IEFWRVJST1JfRU9GKSBicmVhaztcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IociwgXCJyZWNlaXZlUGFja2V0XCIpO1xuICAgIHBrdC5zdHJlYW1JbmRleCA9IHN0cmVhbS5pbmRleDtcbiAgICBpZiAocGt0LmR1cmF0aW9uID09PSAwbikgcGt0LmR1cmF0aW9uID0gMW47XG4gICAgcGt0LnJlc2NhbGVUcyhjdHgudGltZUJhc2UsIHN0cmVhbS50aW1lQmFzZSk7XG4gICAgYXdhaXQgbXV4ZXIud3JpdGVQYWNrZXQocGt0KTtcbiAgICBwa3QudW5yZWYoKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8wMy5cblxuaW1wb3J0IHsgb2sgfSBmcm9tIFwiYXNzZXJ0XCI7XG5pbXBvcnQge1xuICBBVl9QSVhfRk1UX0JHUkEsXG4gIEFWX1BJWF9GTVRfWVVWQTQyMFAsXG4gIENvZGVjLFxuICBDb2RlY0NvbnRleHQsXG4gIEZGX0RFQ09ERVJfUE5HLFxuICBGRm1wZWdFcnJvcixcbiAgdHlwZSBGcmFtZSxcbiAgUGFja2V0LFxuICBTb2Z0d2FyZVNjYWxlQ29udGV4dCxcbiAgU1dTX0JJTElORUFSLFxuICB0eXBlIEFWUGl4ZWxGb3JtYXQsXG59IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQgeyBtYWtlRnJhbWUsIG1ha2VQYWNrZXQgfSBmcm9tIFwiLi9taXNjXCI7XG5cbmV4cG9ydCBjbGFzcyBDb2RlY1N0YXRlIGltcGxlbWVudHMgRGlzcG9zYWJsZSB7XG4gIHJlYWRvbmx5IHNyYzogRnJhbWU7XG4gIHJlYWRvbmx5IGRzdDogRnJhbWU7XG4gIHJlYWRvbmx5IHBrdDogUGFja2V0O1xuICBwcml2YXRlIF9zd3M/OiBTb2Z0d2FyZVNjYWxlQ29udGV4dDtcbiAgcHJpdmF0ZSBfcG5nPzogQ29kZWM7XG5cbiAgc3RhdGljIGFzeW5jIGNyZWF0ZSh3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcikge1xuICAgIGNvbnN0IGNvZGVjID0gQ29kZWMuZmluZERlY29kZXJCeU5hbWUoRkZfREVDT0RFUl9QTkcpO1xuICAgIG9rKGNvZGVjLCBcInBuZyBkZWNvZGVyIHVuYXZhaWxhYmxlXCIpO1xuICAgIHJldHVybiBuZXcgQ29kZWNTdGF0ZSh3aWR0aCwgaGVpZ2h0LCBjb2RlYyk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyLCBwbmc6IENvZGVjKSB7XG4gICAgdGhpcy5fcG5nID0gcG5nO1xuICAgIHRoaXMuc3JjID0gbWFrZUZyYW1lKHdpZHRoLCBoZWlnaHQsIEFWX1BJWF9GTVRfQkdSQSk7XG4gICAgdGhpcy5kc3QgPSBtYWtlRnJhbWUod2lkdGgsIGhlaWdodCwgQVZfUElYX0ZNVF9ZVVZBNDIwUCk7XG4gICAgdGhpcy5wa3QgPSBtYWtlUGFja2V0KCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgZnJlc2ggUE5HIGRlY29kZXIgY29udGV4dC5cbiAgICogVGhlIEZGbXBlZyBQTkcgZGVjb2RlciBhY2N1bXVsYXRlcyBBUE5HIGJsZW5kaW5nIHN0YXRlXG4gICAqIGFjcm9zcyBmcmFtZXMsIHNvIGEgc2hhcmVkIGluc3RhbmNlIGNvcnJ1cHRzIG91dHB1dCB3aGVuIGRlY29kaW5nIHN0YW5kYWxvbmUgUE5Hcy5cbiAgICovXG4gIGFzeW5jIHBuZygpOiBQcm9taXNlPENvZGVjQ29udGV4dD4ge1xuICAgIGNvbnN0IHBuZyA9IG5ldyBDb2RlY0NvbnRleHQoKTtcbiAgICBwbmcuYWxsb2NDb250ZXh0Myh0aGlzLl9wbmcpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCBwbmcub3BlbjIodGhpcy5fcG5nKSwgXCJwbmdEZWNvZGVyLm9wZW4yXCIpO1xuICAgIHJldHVybiBwbmc7XG4gIH1cblxuICBhc3luYyBkZWNvZGVQTkcocG5nRGF0YTogQnVmZmVyKTogUHJvbWlzZTxGcmFtZT4ge1xuICAgIHVzaW5nIHBuZyA9IGF3YWl0IHRoaXMucG5nKCk7XG4gICAgdGhpcy5wa3QuZGF0YSA9IHBuZ0RhdGE7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IHBuZy5zZW5kUGFja2V0KHRoaXMucGt0KSwgXCJwbmdEZWNvZGVyLnNlbmRQYWNrZXRcIik7XG4gICAgdGhpcy5wa3QudW5yZWYoKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgcG5nLnJlY2VpdmVGcmFtZSh0aGlzLnNyYyksIFwicG5nRGVjb2Rlci5yZWNlaXZlRnJhbWVcIik7XG4gICAgcmV0dXJuIHRoaXMuc3JjO1xuICB9XG5cbiAgZ2V0IHN3cygpIHtcbiAgICBpZiAoIXRoaXMuX3N3cykge1xuICAgICAgY29uc3Qgc3dzID0gbmV3IFNvZnR3YXJlU2NhbGVDb250ZXh0KCk7XG4gICAgICBjb25zdCBmbXQgPSB0aGlzLnNyYy5mb3JtYXQgYXMgQVZQaXhlbEZvcm1hdDtcbiAgICAgIHN3cy5nZXRDb250ZXh0KFxuICAgICAgICB0aGlzLnNyYy53aWR0aCxcbiAgICAgICAgdGhpcy5zcmMuaGVpZ2h0LFxuICAgICAgICBmbXQsXG4gICAgICAgIHRoaXMuc3JjLndpZHRoLFxuICAgICAgICB0aGlzLnNyYy5oZWlnaHQsXG4gICAgICAgIEFWX1BJWF9GTVRfWVVWQTQyMFAsXG4gICAgICAgIFNXU19CSUxJTkVBUixcbiAgICAgICk7XG4gICAgICB0aGlzLl9zd3MgPSBzd3M7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9zd3M7XG4gIH1cblxuICBbU3ltYm9sLmRpc3Bvc2VdKCk6IHZvaWQge1xuICAgIHRoaXMuc3JjW1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgIHRoaXMuZHN0W1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgIHRoaXMucGt0W1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgIHRoaXMuX3N3cz8uW1N5bWJvbC5kaXNwb3NlXSgpO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzAxLlxuXG5pbXBvcnQge1xuICBDb2RlYyxcbiAgQ29kZWNDb250ZXh0LFxuICBGRm1wZWdFcnJvcixcbiAgRmlsdGVyLFxuICBGaWx0ZXJDb250ZXh0LFxuICBGaWx0ZXJHcmFwaCxcbiAgRmlsdGVySW5PdXQsXG4gIEZyYW1lLFxuICB0eXBlIFBhY2tldCxcbiAgUmF0aW9uYWwsXG4gIHR5cGUgU3RyZWFtLFxufSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHtcbiAgQVZfQ0hBTk5FTF9MQVlPVVRfU1RFUkVPLFxuICBBVl9DT0RFQ19GTEFHX0dMT0JBTF9IRUFERVIsXG4gIEFWX1NBTVBMRV9GTVRfRkxULFxuICBBVl9TQU1QTEVfRk1UX0ZMVFAsXG4gIEFWRVJST1JfRUFHQUlOLFxuICBBVkVSUk9SX0VPRixcbiAgdHlwZSBGRkF1ZGlvRW5jb2Rlcixcbn0gZnJvbSBcIm5vZGUtYXYvY29uc3RhbnRzXCI7XG5pbXBvcnQgdHlwZSB7IEZvcm1hdE11eGVyIH0gZnJvbSBcIi4vbXV4ZXJcIjtcbmltcG9ydCB7IGRyYWluUGFja2V0cywgbWFrZVBhY2tldCB9IGZyb20gXCIuL21pc2NcIjtcblxuY29uc3QgU0FNUExFX0ZNVF9OQU1FOiBQYXJ0aWFsPFJlY29yZDxudW1iZXIsIHN0cmluZz4+ID0geyBbQVZfU0FNUExFX0ZNVF9GTFRdOiBcImZsdFwiLCBbQVZfU0FNUExFX0ZNVF9GTFRQXTogXCJmbHRwXCIgfTtcblxuZXhwb3J0IGludGVyZmFjZSBBdWRpb0VuY29kZXJPcHRpb25zIHtcbiAgb3V0U2FtcGxlUmF0ZTogbnVtYmVyO1xuICBvdXRTYW1wbGVGbXQ6IHR5cGVvZiBBVl9TQU1QTEVfRk1UX0ZMVCB8IHR5cGVvZiBBVl9TQU1QTEVfRk1UX0ZMVFA7XG4gIGNvZGVjTmFtZTogRkZBdWRpb0VuY29kZXI7XG4gIGdsb2JhbEhlYWRlcjogYm9vbGVhbjtcbiAgYml0cmF0ZTogbnVtYmVyO1xuICBtdXhlcjogRm9ybWF0TXV4ZXI7XG59XG5cbmV4cG9ydCBjbGFzcyBBdWRpb0VuY29kZXIgaW1wbGVtZW50cyBEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSBfY3R4OiBDb2RlY0NvbnRleHQ7XG4gIHByaXZhdGUgX3N0cmVhbTogU3RyZWFtO1xuICBwcml2YXRlIF9wa3Q6IFBhY2tldDtcbiAgcHJpdmF0ZSBfb3V0UmF0ZTogbnVtYmVyO1xuICBwcml2YXRlIF9vdXRGbXQ6IHR5cGVvZiBBVl9TQU1QTEVfRk1UX0ZMVCB8IHR5cGVvZiBBVl9TQU1QTEVfRk1UX0ZMVFA7XG4gIHByaXZhdGUgX2ZyYW1lU2l6ZTogbnVtYmVyO1xuICBwcml2YXRlIF9maWx0ZXJGcmFtZTogRnJhbWU7XG4gIHByaXZhdGUgX2dyYXBoPzogRmlsdGVyR3JhcGg7XG4gIHByaXZhdGUgX2J1ZlNyYz86IEZpbHRlckNvbnRleHQ7XG4gIHByaXZhdGUgX2J1ZlNpbms/OiBGaWx0ZXJDb250ZXh0O1xuICBwcml2YXRlIF9pblJhdGU/OiBudW1iZXI7XG4gIHByaXZhdGUgX3B0cyA9IDBuO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoY3R4OiBDb2RlY0NvbnRleHQsIHN0cmVhbTogU3RyZWFtLCBvdXRGbXQ6IHR5cGVvZiBBVl9TQU1QTEVfRk1UX0ZMVCB8IHR5cGVvZiBBVl9TQU1QTEVfRk1UX0ZMVFApIHtcbiAgICB0aGlzLl9jdHggPSBjdHg7XG4gICAgdGhpcy5fc3RyZWFtID0gc3RyZWFtO1xuICAgIHRoaXMuX291dFJhdGUgPSBjdHguc2FtcGxlUmF0ZTtcbiAgICB0aGlzLl9vdXRGbXQgPSBvdXRGbXQ7XG4gICAgdGhpcy5fZnJhbWVTaXplID0gY3R4LmZyYW1lU2l6ZTtcbiAgICB0aGlzLl9wa3QgPSBtYWtlUGFja2V0KCk7XG4gICAgdGhpcy5fZmlsdGVyRnJhbWUgPSBuZXcgRnJhbWUoKTtcbiAgICB0aGlzLl9maWx0ZXJGcmFtZS5hbGxvYygpO1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIGNyZWF0ZShvcHRzOiBBdWRpb0VuY29kZXJPcHRpb25zKTogUHJvbWlzZTxBdWRpb0VuY29kZXI+IHtcbiAgICBjb25zdCBjb2RlYyA9IENvZGVjLmZpbmRFbmNvZGVyQnlOYW1lKG9wdHMuY29kZWNOYW1lKTtcbiAgICBpZiAoIWNvZGVjKSB0aHJvdyBuZXcgRXJyb3IoYEF1ZGlvIGVuY29kZXIgbm90IGZvdW5kOiAke29wdHMuY29kZWNOYW1lfWApO1xuICAgIGNvbnN0IGN0eCA9IG5ldyBDb2RlY0NvbnRleHQoKTtcbiAgICBjdHguYWxsb2NDb250ZXh0Myhjb2RlYyk7XG4gICAgY3R4LmNvZGVjSWQgPSBjb2RlYy5pZDtcbiAgICBjdHguc2FtcGxlRm9ybWF0ID0gb3B0cy5vdXRTYW1wbGVGbXQ7XG4gICAgY3R4LnNhbXBsZVJhdGUgPSBvcHRzLm91dFNhbXBsZVJhdGU7XG4gICAgY3R4LmNoYW5uZWxMYXlvdXQgPSBBVl9DSEFOTkVMX0xBWU9VVF9TVEVSRU87XG4gICAgY3R4LnRpbWVCYXNlID0gbmV3IFJhdGlvbmFsKDEsIG9wdHMub3V0U2FtcGxlUmF0ZSk7XG4gICAgY3R4LmJpdFJhdGUgPSBCaWdJbnQob3B0cy5iaXRyYXRlKTtcbiAgICBpZiAob3B0cy5nbG9iYWxIZWFkZXIpIGN0eC5zZXRGbGFncyhBVl9DT0RFQ19GTEFHX0dMT0JBTF9IRUFERVIpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCBjdHgub3BlbjIoY29kZWMsIG51bGwpLCBcImF1ZGlvQ3R4Lm9wZW4yXCIpO1xuICAgIGNvbnN0IHN0cmVhbSA9IG9wdHMubXV4ZXIuYWRkU3RyZWFtKGN0eCk7XG4gICAgcmV0dXJuIG5ldyBBdWRpb0VuY29kZXIoY3R4LCBzdHJlYW0sIG9wdHMub3V0U2FtcGxlRm10KTtcbiAgfVxuXG4gIHNldElucHV0UmF0ZShpblNhbXBsZVJhdGU6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuX2dyYXBoPy5bU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgdGhpcy5faW5SYXRlID0gaW5TYW1wbGVSYXRlO1xuICAgIGNvbnN0IGdyYXBoID0gbmV3IEZpbHRlckdyYXBoKCk7XG4gICAgZ3JhcGguYWxsb2MoKTtcbiAgICBjb25zdCBhYnVmZmVyID0gRmlsdGVyLmdldEJ5TmFtZShcImFidWZmZXJcIikhO1xuICAgIGNvbnN0IGJ1ZlNyYyA9IGdyYXBoLmNyZWF0ZUZpbHRlcihcbiAgICAgIGFidWZmZXIsXG4gICAgICBcInNyY1wiLFxuICAgICAgYHNhbXBsZV9yYXRlPSR7aW5TYW1wbGVSYXRlfTpzYW1wbGVfZm10PWZsdDpjaGFubmVsX2xheW91dD1zdGVyZW86dGltZV9iYXNlPTEvJHtpblNhbXBsZVJhdGV9YCxcbiAgICApO1xuICAgIGlmICghYnVmU3JjKSB0aHJvdyBuZXcgRXJyb3IoXCJGYWlsZWQgdG8gY3JlYXRlIGFidWZmZXJcIik7XG4gICAgY29uc3QgYWJ1ZmZlcnNpbmsgPSBGaWx0ZXIuZ2V0QnlOYW1lKFwiYWJ1ZmZlcnNpbmtcIikhO1xuICAgIGNvbnN0IGJ1ZlNpbmsgPSBncmFwaC5jcmVhdGVGaWx0ZXIoYWJ1ZmZlcnNpbmssIFwic2lua1wiKTtcbiAgICBpZiAoIWJ1ZlNpbmspIHRocm93IG5ldyBFcnJvcihcIkZhaWxlZCB0byBjcmVhdGUgYWJ1ZmZlcnNpbmtcIik7XG4gICAgY29uc3QgZm10TmFtZSA9IFNBTVBMRV9GTVRfTkFNRVt0aGlzLl9vdXRGbXRdID8/IFwiZmx0XCI7XG4gICAgY29uc3QgZmlsdGVyRGVzYyA9IGBhZm9ybWF0PXNhbXBsZV9mbXRzPSR7Zm10TmFtZX06c2FtcGxlX3JhdGVzPSR7dGhpcy5fb3V0UmF0ZX06Y2hhbm5lbF9sYXlvdXRzPXN0ZXJlbyxhc2V0bnNhbXBsZXM9bj0ke3RoaXMuX2ZyYW1lU2l6ZX06cD0xYDtcbiAgICBjb25zdCBvdXRwdXRzID0gRmlsdGVySW5PdXQuY3JlYXRlTGlzdChbeyBuYW1lOiBcImluXCIsIGZpbHRlckN0eDogYnVmU3JjLCBwYWRJZHg6IDAgfV0pO1xuICAgIGNvbnN0IGlucHV0cyA9IEZpbHRlckluT3V0LmNyZWF0ZUxpc3QoW3sgbmFtZTogXCJvdXRcIiwgZmlsdGVyQ3R4OiBidWZTaW5rLCBwYWRJZHg6IDAgfV0pO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihncmFwaC5wYXJzZVB0cihmaWx0ZXJEZXNjLCBpbnB1dHMsIG91dHB1dHMpLCBcImdyYXBoLnBhcnNlUHRyXCIpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihncmFwaC5jb25maWdTeW5jKCksIFwiZ3JhcGguY29uZmlnXCIpO1xuICAgIHRoaXMuX2dyYXBoID0gZ3JhcGg7XG4gICAgdGhpcy5fYnVmU3JjID0gYnVmU3JjO1xuICAgIHRoaXMuX2J1ZlNpbmsgPSBidWZTaW5rO1xuICB9XG5cbiAgYXN5bmMgZW5jb2RlKHBjbTogQnVmZmVyLCBtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuX2J1ZlNyYyB8fCAhdGhpcy5faW5SYXRlKSByZXR1cm47XG4gICAgY29uc3Qgc3JjID0gbmV3IEZsb2F0MzJBcnJheShwY20uYnVmZmVyLCBwY20uYnl0ZU9mZnNldCwgcGNtLmJ5dGVMZW5ndGggLyA0KTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNyYy5sZW5ndGg7IGkrKykgaWYgKCFpc0Zpbml0ZShzcmNbaV0hKSkgc3JjW2ldID0gMDtcbiAgICBjb25zdCBuU2FtcGxlcyA9IHNyYy5sZW5ndGggPj4gMTtcbiAgICB1c2luZyBmcmFtZSA9IEZyYW1lLmZyb21BdWRpb0J1ZmZlcihCdWZmZXIuZnJvbShzcmMuYnVmZmVyLCBzcmMuYnl0ZU9mZnNldCwgc3JjLmJ5dGVMZW5ndGgpLCB7XG4gICAgICBuYlNhbXBsZXM6IG5TYW1wbGVzLFxuICAgICAgZm9ybWF0OiBBVl9TQU1QTEVfRk1UX0ZMVCxcbiAgICAgIHNhbXBsZVJhdGU6IHRoaXMuX2luUmF0ZSxcbiAgICAgIGNoYW5uZWxMYXlvdXQ6IEFWX0NIQU5ORUxfTEFZT1VUX1NURVJFTyxcbiAgICAgIHB0czogdGhpcy5fcHRzLFxuICAgICAgdGltZUJhc2U6IHsgbnVtOiAxLCBkZW46IHRoaXMuX2luUmF0ZSB9LFxuICAgIH0pO1xuICAgIHRoaXMuX3B0cyArPSBCaWdJbnQoblNhbXBsZXMpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCB0aGlzLl9idWZTcmMuYnVmZmVyc3JjQWRkRnJhbWUoZnJhbWUpLCBcImJ1ZmZlcnNyY0FkZEZyYW1lXCIpO1xuICAgIGF3YWl0IHRoaXMuZHJhaW4obXV4ZXIpO1xuICB9XG5cbiAgYXN5bmMgZmx1c2gobXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX2J1ZlNyYykge1xuICAgICAgYXdhaXQgdGhpcy5fYnVmU3JjLmJ1ZmZlcnNyY0FkZEZyYW1lKG51bGwpO1xuICAgICAgYXdhaXQgdGhpcy5kcmFpbihtdXhlcik7XG4gICAgfVxuICAgIGF3YWl0IHRoaXMuX2N0eC5zZW5kRnJhbWUobnVsbCk7XG4gICAgYXdhaXQgdGhpcy5kcmFpbkNvZGVjKG11eGVyKTtcbiAgfVxuXG4gIFtTeW1ib2wuZGlzcG9zZV0oKTogdm9pZCB7XG4gICAgdGhpcy5fcGt0LmZyZWUoKTtcbiAgICB0aGlzLl9maWx0ZXJGcmFtZS5mcmVlKCk7XG4gICAgdGhpcy5fZ3JhcGg/LltTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICB0aGlzLl9jdHguZnJlZUNvbnRleHQoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZHJhaW4obXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGNvbnN0IHIgPSBhd2FpdCB0aGlzLl9idWZTaW5rIS5idWZmZXJzaW5rR2V0RnJhbWUodGhpcy5fZmlsdGVyRnJhbWUpO1xuICAgICAgaWYgKHIgPT09IEFWRVJST1JfRUFHQUlOIHx8IHIgPT09IEFWRVJST1JfRU9GKSBicmVhaztcbiAgICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihyLCBcImJ1ZmZlcnNpbmtHZXRGcmFtZVwiKTtcbiAgICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCB0aGlzLl9jdHguc2VuZEZyYW1lKHRoaXMuX2ZpbHRlckZyYW1lKSwgXCJhdWRpb0N0eC5zZW5kRnJhbWVcIik7XG4gICAgICB0aGlzLl9maWx0ZXJGcmFtZS51bnJlZigpO1xuICAgICAgYXdhaXQgdGhpcy5kcmFpbkNvZGVjKG11eGVyKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGRyYWluQ29kZWMobXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIGRyYWluUGFja2V0cyh0aGlzLl9jdHgsIHRoaXMuX3BrdCwgdGhpcy5fc3RyZWFtLCBtdXhlcik7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMTMuXG5cbmV4cG9ydCBmdW5jdGlvbiBwYWNrQml0cyhiaXRzOiBudW1iZXJbXSk6IEJ1ZmZlciB7XG4gIGNvbnN0IGJ1ZiA9IEJ1ZmZlci5hbGxvYyhiaXRzLmxlbmd0aCA+PiAzKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBidWYubGVuZ3RoOyBpKyspIHtcbiAgICBsZXQgYnl0ZSA9IDA7XG4gICAgZm9yIChsZXQgYiA9IDA7IGIgPCA4OyBiKyspIGJ5dGUgPSAoYnl0ZSA8PCAxKSB8IGJpdHNbaSAqIDggKyBiXSE7XG4gICAgYnVmW2ldID0gYnl0ZTtcbiAgfVxuICByZXR1cm4gYnVmO1xufVxuXG5leHBvcnQgY2xhc3MgQml0V3JpdGVyIHtcbiAgYml0czogbnVtYmVyW10gPSBbXTtcbiAgdyh2YWw6IG51bWJlciwgbjogbnVtYmVyKSB7XG4gICAgZm9yIChsZXQgaSA9IG4gLSAxOyBpID49IDA7IGktLSkgdGhpcy5iaXRzLnB1c2goKHZhbCA+PiBpKSAmIDEpO1xuICB9XG4gIGZsYWcodmFsOiBib29sZWFuIHwgbnVtYmVyKSB7XG4gICAgdGhpcy5iaXRzLnB1c2godmFsID8gMSA6IDApO1xuICB9XG4gIHVlKHZhbDogbnVtYmVyKSB7XG4gICAgY29uc3QgdiA9IHZhbCArIDE7XG4gICAgY29uc3QgbGVuID0gMzIgLSBNYXRoLmNsejMyKHYpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuIC0gMTsgaSsrKSB0aGlzLmJpdHMucHVzaCgwKTtcbiAgICBmb3IgKGxldCBpID0gbGVuIC0gMTsgaSA+PSAwOyBpLS0pIHRoaXMuYml0cy5wdXNoKCh2ID4+IGkpICYgMSk7XG4gIH1cbiAgYWxpZ24ocGFkOiBudW1iZXIpIHtcbiAgICB3aGlsZSAodGhpcy5iaXRzLmxlbmd0aCAlIDggIT09IDApIHRoaXMuYml0cy5wdXNoKHBhZCk7XG4gIH1cbiAgY29weShzcmM6IG51bWJlcltdLCBzdGFydDogbnVtYmVyLCBsZW46IG51bWJlcikge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHRoaXMuYml0cy5wdXNoKHNyY1tzdGFydCArIGldISk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEJpdFJlYWRlciB7XG4gIHByaXZhdGUgX2JpdHM6IG51bWJlcltdO1xuICBwb3MgPSAwO1xuICBjb25zdHJ1Y3RvcihkYXRhOiBCdWZmZXIpIHtcbiAgICB0aGlzLl9iaXRzID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBiID0gNzsgYiA+PSAwOyBiLS0pIHRoaXMuX2JpdHMucHVzaCgoZGF0YVtpXSEgPj4gYikgJiAxKTtcbiAgICB9XG4gIH1cbiAgZ2V0IGJpdHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2JpdHM7XG4gIH1cbiAgcmVhZChuOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGxldCB2YWwgPSAwO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbjsgaSsrKSB2YWwgPSAodmFsIDw8IDEpIHwgdGhpcy5fYml0c1t0aGlzLnBvcysrXSE7XG4gICAgcmV0dXJuIHZhbDtcbiAgfVxuICByZWFkVWUoKTogbnVtYmVyIHtcbiAgICBsZXQgemVyb3MgPSAwO1xuICAgIHdoaWxlICh0aGlzLl9iaXRzW3RoaXMucG9zXSA9PT0gMCkge1xuICAgICAgemVyb3MrKztcbiAgICAgIHRoaXMucG9zKys7XG4gICAgfVxuICAgIHRoaXMucG9zKys7XG4gICAgbGV0IHZhbCA9IDE7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB6ZXJvczsgaSsrKSB2YWwgPSAodmFsIDw8IDEpIHwgdGhpcy5fYml0c1t0aGlzLnBvcysrXSE7XG4gICAgcmV0dXJuIHZhbCAtIDE7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMTIuXG5cbmNvbnN0IE5BTF9IRUFERVJfU0laRSA9IDI7XG5jb25zdCBBTk5FWF9CX1NUQVJUX0NPREUgPSBCdWZmZXIuZnJvbShbMHgwMCwgMHgwMCwgMHgwMCwgMHgwMV0pO1xuXG5leHBvcnQgeyBBTk5FWF9CX1NUQVJUX0NPREUsIE5BTF9IRUFERVJfU0laRSB9O1xuXG4vLyBIRVZDIE5BTCB1bml0IHR5cGVzIChULVJFQy1ILjI2NSBUYWJsZSA3LTEpXG5leHBvcnQgY29uc3QgTkFMX0JMQV9XX0xQID0gMTY7XG5leHBvcnQgY29uc3QgTkFMX0lEUl9XX1JBREwgPSAxOTtcbmV4cG9ydCBjb25zdCBOQUxfSURSX05fTFAgPSAyMDtcbmV4cG9ydCBjb25zdCBOQUxfUlNWX0lSQVBfVkNMMjMgPSAyMztcbmV4cG9ydCBjb25zdCBOQUxfVlBTID0gMzI7XG5leHBvcnQgY29uc3QgTkFMX1NQUyA9IDMzO1xuZXhwb3J0IGNvbnN0IE5BTF9QUFMgPSAzNDtcbmV4cG9ydCBjb25zdCBOQUxfU0VJX1BSRUZJWCA9IDM5O1xuZXhwb3J0IGNvbnN0IE5BTF9TRUlfU1VGRklYID0gNDA7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmFsVW5pdCB7XG4gIHR5cGU6IG51bWJlcjtcbiAgbGF5ZXJJZDogbnVtYmVyO1xuICBkYXRhOiBCdWZmZXI7XG59XG5cbmZ1bmN0aW9uIHBhcnNlTmFsVHlwZShoZWFkZXIwOiBudW1iZXIsIGhlYWRlcjE6IG51bWJlcik6IHsgdHlwZTogbnVtYmVyOyBsYXllcklkOiBudW1iZXI7IHRlbXBvcmFsSWQ6IG51bWJlciB9IHtcbiAgY29uc3QgdHlwZSA9IChoZWFkZXIwID4+IDEpICYgMHgzZjtcbiAgY29uc3QgbGF5ZXJJZCA9ICgoaGVhZGVyMCAmIDEpIDw8IDUpIHwgKChoZWFkZXIxID4+IDMpICYgMHgxZik7XG4gIGNvbnN0IHRlbXBvcmFsSWQgPSBoZWFkZXIxICYgMHgwNztcbiAgcmV0dXJuIHsgdHlwZSwgbGF5ZXJJZCwgdGVtcG9yYWxJZCB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5jb2RlTmFsSGVhZGVyKHR5cGU6IG51bWJlciwgbGF5ZXJJZDogbnVtYmVyLCB0ZW1wb3JhbElkOiBudW1iZXIpOiBbbnVtYmVyLCBudW1iZXJdIHtcbiAgY29uc3QgYnl0ZTAgPSAoKHR5cGUgJiAweDNmKSA8PCAxKSB8ICgobGF5ZXJJZCA+PiA1KSAmIDEpO1xuICBjb25zdCBieXRlMSA9ICgobGF5ZXJJZCAmIDB4MWYpIDw8IDMpIHwgKHRlbXBvcmFsSWQgJiAweDA3KTtcbiAgcmV0dXJuIFtieXRlMCwgYnl0ZTFdO1xufVxuXG4vKiogU3BsaXQgQW5uZXggQiBiaXRzdHJlYW0gaW50byBOQUwgdW5pdHMuICovXG5leHBvcnQgZnVuY3Rpb24gc3BsaXROYWxVbml0cyhiaXRzdHJlYW06IEJ1ZmZlcik6IE5hbFVuaXRbXSB7XG4gIGNvbnN0IG5hbHM6IE5hbFVuaXRbXSA9IFtdO1xuICBsZXQgaSA9IDA7XG5cbiAgd2hpbGUgKGkgPCBiaXRzdHJlYW0ubGVuZ3RoKSB7XG4gICAgbGV0IHNjTGVuID0gMDtcbiAgICBpZiAoaSArIDMgPCBiaXRzdHJlYW0ubGVuZ3RoICYmIGJpdHN0cmVhbVtpXSA9PT0gMCAmJiBiaXRzdHJlYW1baSArIDFdID09PSAwICYmIGJpdHN0cmVhbVtpICsgMl0gPT09IDEpIHtcbiAgICAgIHNjTGVuID0gMztcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgaSArIDQgPCBiaXRzdHJlYW0ubGVuZ3RoICYmXG4gICAgICBiaXRzdHJlYW1baV0gPT09IDAgJiZcbiAgICAgIGJpdHN0cmVhbVtpICsgMV0gPT09IDAgJiZcbiAgICAgIGJpdHN0cmVhbVtpICsgMl0gPT09IDAgJiZcbiAgICAgIGJpdHN0cmVhbVtpICsgM10gPT09IDFcbiAgICApIHtcbiAgICAgIHNjTGVuID0gNDtcbiAgICB9IGVsc2Uge1xuICAgICAgaSsrO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgbmFsU3RhcnQgPSBpICsgc2NMZW47XG4gICAgaWYgKG5hbFN0YXJ0ICsgTkFMX0hFQURFUl9TSVpFID4gYml0c3RyZWFtLmxlbmd0aCkgYnJlYWs7XG5cbiAgICBsZXQgbmFsRW5kID0gYml0c3RyZWFtLmxlbmd0aDtcbiAgICBmb3IgKGxldCBqID0gbmFsU3RhcnQgKyBOQUxfSEVBREVSX1NJWkU7IGogPCBiaXRzdHJlYW0ubGVuZ3RoIC0gMjsgaisrKSB7XG4gICAgICBpZiAoXG4gICAgICAgIGJpdHN0cmVhbVtqXSA9PT0gMCAmJlxuICAgICAgICBiaXRzdHJlYW1baiArIDFdID09PSAwICYmXG4gICAgICAgIChiaXRzdHJlYW1baiArIDJdID09PSAxIHx8IChqICsgMyA8IGJpdHN0cmVhbS5sZW5ndGggJiYgYml0c3RyZWFtW2ogKyAyXSA9PT0gMCAmJiBiaXRzdHJlYW1baiArIDNdID09PSAxKSlcbiAgICAgICkge1xuICAgICAgICBuYWxFbmQgPSBqO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCB7IHR5cGUsIGxheWVySWQgfSA9IHBhcnNlTmFsVHlwZShiaXRzdHJlYW1bbmFsU3RhcnRdISwgYml0c3RyZWFtW25hbFN0YXJ0ICsgMV0hKTtcbiAgICBuYWxzLnB1c2goeyB0eXBlLCBsYXllcklkLCBkYXRhOiBiaXRzdHJlYW0uc3ViYXJyYXkobmFsU3RhcnQsIG5hbEVuZCkgfSk7XG4gICAgaSA9IG5hbEVuZDtcbiAgfVxuXG4gIHJldHVybiBuYWxzO1xufVxuXG4vKiogUmV3cml0ZSBudWhfbGF5ZXJfaWQgaW4gYSBOQUwgdW5pdCAocmV0dXJucyBjb3B5KS4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXdyaXRlTmFsTGF5ZXJJZChuYWw6IEJ1ZmZlciwgbGF5ZXJJZDogbnVtYmVyKTogQnVmZmVyIHtcbiAgY29uc3Qgb3V0ID0gQnVmZmVyLmZyb20obmFsKTtcbiAgY29uc3QgeyB0eXBlLCB0ZW1wb3JhbElkIH0gPSBwYXJzZU5hbFR5cGUob3V0WzBdISwgb3V0WzFdISk7XG4gIGNvbnN0IFtiMCwgYjFdID0gZW5jb2RlTmFsSGVhZGVyKHR5cGUsIGxheWVySWQsIHRlbXBvcmFsSWQpO1xuICBvdXRbMF0gPSBiMDtcbiAgb3V0WzFdID0gYjE7XG4gIHJldHVybiBvdXQ7XG59XG5cbi8qKiBSZXdyaXRlIG5hbF91bml0X3R5cGUgaW4gYSBOQUwgdW5pdCAocmV0dXJucyBjb3B5KS4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXdyaXRlTmFsVHlwZShuYWw6IEJ1ZmZlciwgbmV3VHlwZTogbnVtYmVyKTogQnVmZmVyIHtcbiAgY29uc3Qgb3V0ID0gQnVmZmVyLmZyb20obmFsKTtcbiAgY29uc3QgeyBsYXllcklkLCB0ZW1wb3JhbElkIH0gPSBwYXJzZU5hbFR5cGUob3V0WzBdISwgb3V0WzFdISk7XG4gIGNvbnN0IFtiMCwgYjFdID0gZW5jb2RlTmFsSGVhZGVyKG5ld1R5cGUsIGxheWVySWQsIHRlbXBvcmFsSWQpO1xuICBvdXRbMF0gPSBiMDtcbiAgb3V0WzFdID0gYjE7XG4gIHJldHVybiBvdXQ7XG59XG5cbi8qKiBSZW1vdmUgZW11bGF0aW9uIHByZXZlbnRpb24gYnl0ZXMgKDAwIDAwIDAzIOKGkiAwMCAwMCkgZnJvbSBSQlNQLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUVtdWxhdGlvblByZXZlbnRpb24oZGF0YTogQnVmZmVyKTogQnVmZmVyIHtcbiAgY29uc3Qgb3V0OiBudW1iZXJbXSA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoaSArIDIgPCBkYXRhLmxlbmd0aCAmJiBkYXRhW2ldID09PSAwICYmIGRhdGFbaSArIDFdID09PSAwICYmIGRhdGFbaSArIDJdID09PSAzKSB7XG4gICAgICBvdXQucHVzaCgwLCAwKTtcbiAgICAgIGkgKz0gMjtcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0LnB1c2goZGF0YVtpXSEpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gQnVmZmVyLmZyb20ob3V0KTtcbn1cblxuLyoqIEluc2VydCBlbXVsYXRpb24gcHJldmVudGlvbiBieXRlcyAoMDAgMDAgMDMpIGZvciBBbm5leCBCIGNvbXBsaWFuY2UuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkRW11bGF0aW9uUHJldmVudGlvbihuYWw6IEJ1ZmZlcik6IEJ1ZmZlciB7XG4gIGNvbnN0IG91dDogbnVtYmVyW10gPSBbXTtcbiAgb3V0LnB1c2gobmFsWzBdISwgbmFsWzFdISk7XG4gIGxldCB6ZXJvcyA9IDA7XG4gIGZvciAobGV0IGkgPSAyOyBpIDwgbmFsLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKHplcm9zID09PSAyICYmIG5hbFtpXSEgPD0gMykge1xuICAgICAgb3V0LnB1c2goMyk7XG4gICAgICB6ZXJvcyA9IDA7XG4gICAgfVxuICAgIGlmIChuYWxbaV0gPT09IDApIHplcm9zKys7XG4gICAgZWxzZSB6ZXJvcyA9IDA7XG4gICAgb3V0LnB1c2gobmFsW2ldISk7XG4gIH1cbiAgcmV0dXJuIEJ1ZmZlci5mcm9tKG91dCk7XG59XG4iLCIvLyBQYXRjaCBOVkVOQyBvdXRwdXQgdG8gY29uZm9ybSB0byBBcHBsZSBIRVZDIFZpZGVvIHdpdGggQWxwaGEgSW50ZXJvcGVyYWJpbGl0eSBQcm9maWxlLlxuLy8gU3BlYzogaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2F2LWZvdW5kYXRpb24vSEVWQy1WaWRlby13aXRoLUFscGhhLUludGVyb3BlcmFiaWxpdHktUHJvZmlsZS5wZGZcbi8vIFNsaWNlIHBhcnNlciBpcyBjb25maWctZHJpdmVuOiBOdmVuY0hldmNDb25maWcgZnJvbSBwYXJzZS50cyBkZXJpdmVzIGZsYWdzIGF0IGVuY29kZXIgaW5pdC5cblxuaW1wb3J0IHsgQml0UmVhZGVyLCBCaXRXcml0ZXIsIHBhY2tCaXRzIH0gZnJvbSBcIi4vYml0XCI7XG5pbXBvcnQge1xuICBBTk5FWF9CX1NUQVJUX0NPREUsXG4gIGFkZEVtdWxhdGlvblByZXZlbnRpb24sXG4gIE5BTF9CTEFfV19MUCxcbiAgTkFMX1JTVl9JUkFQX1ZDTDIzLFxuICBOQUxfU1BTLFxuICBOQUxfVlBTLFxuICByZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uLFxuICBzcGxpdE5hbFVuaXRzLFxufSBmcm9tIFwiLi9uYWxcIjtcbmltcG9ydCB0eXBlIHsgTnZlbmNIZXZjQ29uZmlnIH0gZnJvbSBcIi4vcGFyc2VyXCI7XG5cbi8vIFBUTCBiaXQgb2Zmc2V0cyB3aXRoaW4gZW11bGF0aW9uLXByZXZlbnRpb24tc3RyaXBwZWQgTkFMIChOQUwgaGVhZGVyIGluY2x1ZGVkKS5cbmNvbnN0IFZQU19QVExfQklUID0gNDg7IC8vIDE2IChOQUwgaGRyKSArIDMyIChWUFMgcHJlZml4KVxuY29uc3QgU1BTX1BUTF9CSVQgPSAyNDsgLy8gMTYgKE5BTCBoZHIpICsgOCAoU1BTIHByZWZpeClcbmNvbnN0IFBUTF9USUVSX0JJVCA9IDI7XG5jb25zdCBQVExfQ09NUEFUMl9CSVQgPSAxMDsgLy8gcHJvZmlsZV9zcGFjZSgyKSArIHRpZXIoMSkgKyBpZGMoNSkgKyBjb21wYXRbMCwxXSgyKVxuY29uc3QgU0xJQ0VfVFlQRV9CID0gMDtcbmNvbnN0IFNMSUNFX1RZUEVfUCA9IDE7XG5cbmZ1bmN0aW9uIHNldEJpdChidWY6IEJ1ZmZlciwgYml0T2Zmc2V0OiBudW1iZXIsIHZhbHVlOiAwIHwgMSk6IHZvaWQge1xuICBjb25zdCBieXRlID0gYml0T2Zmc2V0ID4+IDM7XG4gIGNvbnN0IG1hc2sgPSAxIDw8ICg3IC0gKGJpdE9mZnNldCAmIDcpKTtcbiAgY29uc3QgY3VyID0gYnVmW2J5dGVdID8/IDA7XG4gIGJ1ZltieXRlXSA9IHZhbHVlID8gY3VyIHwgbWFzayA6IGN1ciAmIH5tYXNrO1xufVxuXG5mdW5jdGlvbiBwYXRjaFB0bChuYWxEYXRhOiBCdWZmZXIsIHB0bFN0YXJ0Qml0OiBudW1iZXIpOiBCdWZmZXIge1xuICBjb25zdCByYnNwID0gcmVtb3ZlRW11bGF0aW9uUHJldmVudGlvbihuYWxEYXRhKTtcbiAgc2V0Qml0KHJic3AsIHB0bFN0YXJ0Qml0ICsgUFRMX1RJRVJfQklULCAwKTtcbiAgc2V0Qml0KHJic3AsIHB0bFN0YXJ0Qml0ICsgUFRMX0NPTVBBVDJfQklULCAxKTtcbiAgcmV0dXJuIGFkZEVtdWxhdGlvblByZXZlbnRpb24ocmJzcCk7XG59XG5cbi8qKiBQYXRjaCBldmVyeSBWUFMvU1BTIE5BTCBpbiBhbiBBbm5leCBCIGJpdHN0cmVhbSBzbyBQVEwgbWF0Y2hlcyBBcHBsZS94MjY1LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhdGNoSGV2Y0FscGhhUHRsKGJpdHN0cmVhbTogQnVmZmVyKTogQnVmZmVyIHtcbiAgY29uc3QgbmFscyA9IHNwbGl0TmFsVW5pdHMoYml0c3RyZWFtKTtcbiAgaWYgKG5hbHMubGVuZ3RoID09PSAwKSByZXR1cm4gYml0c3RyZWFtO1xuICBjb25zdCBjaHVua3M6IEJ1ZmZlcltdID0gW107XG4gIGZvciAoY29uc3QgbmFsIG9mIG5hbHMpIHtcbiAgICBsZXQgZGF0YSA9IG5hbC5kYXRhO1xuICAgIGlmIChuYWwudHlwZSA9PT0gTkFMX1ZQUykgZGF0YSA9IHBhdGNoUHRsKG5hbC5kYXRhLCBWUFNfUFRMX0JJVCk7XG4gICAgZWxzZSBpZiAobmFsLnR5cGUgPT09IE5BTF9TUFMpIGRhdGEgPSBwYXRjaFB0bChuYWwuZGF0YSwgU1BTX1BUTF9CSVQpO1xuICAgIGNodW5rcy5wdXNoKEFOTkVYX0JfU1RBUlRfQ09ERSwgZGF0YSk7XG4gIH1cbiAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoY2h1bmtzKTtcbn1cblxuLy8g4pSA4pSA4pSAIHVlKHYpIHJld3JpdGUgaGVscGVycyAoU1BTL1BQUyDigJQgUkJTUCBjYW4gZ3JvdyBmcmVlbHksIG5vIENBQkFDIHRyYWlsaW5nKSDilIDilIBcblxuZnVuY3Rpb24gcmV3cml0ZU9uZVVlKG5hbEluOiBCdWZmZXIsIGJpdE9mZnNldDogbnVtYmVyLCBuZXdWYWw6IG51bWJlcik6IEJ1ZmZlciB7XG4gIGNvbnN0IHJic3AgPSByZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uKG5hbEluKTtcbiAgY29uc3QgYnIgPSBuZXcgQml0UmVhZGVyKHJic3ApO1xuICBjb25zdCBidyA9IG5ldyBCaXRXcml0ZXIoKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBiaXRPZmZzZXQ7IGkrKykgYncuYml0cy5wdXNoKGJyLnJlYWQoMSkpO1xuICBici5yZWFkVWUoKTtcbiAgYncudWUobmV3VmFsKTtcbiAgd2hpbGUgKGJyLnBvcyA8IGJyLmJpdHMubGVuZ3RoKSBidy5iaXRzLnB1c2goYnIucmVhZCgxKSk7XG4gIHdoaWxlIChidy5iaXRzLmxlbmd0aCAlIDggIT09IDApIGJ3LmJpdHMucHVzaCgwKTtcbiAgcmV0dXJuIGFkZEVtdWxhdGlvblByZXZlbnRpb24ocGFja0JpdHMoYncuYml0cykpO1xufVxuXG5mdW5jdGlvbiByZXdyaXRlVHdvVWUobmFsSW46IEJ1ZmZlciwgYml0T2Zmc2V0OiBudW1iZXIsIG5ld1ZhbDE6IG51bWJlciwgbmV3VmFsMjogbnVtYmVyKTogQnVmZmVyIHtcbiAgY29uc3QgcmJzcCA9IHJlbW92ZUVtdWxhdGlvblByZXZlbnRpb24obmFsSW4pO1xuICBjb25zdCBiciA9IG5ldyBCaXRSZWFkZXIocmJzcCk7XG4gIGNvbnN0IGJ3ID0gbmV3IEJpdFdyaXRlcigpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGJpdE9mZnNldDsgaSsrKSBidy5iaXRzLnB1c2goYnIucmVhZCgxKSk7XG4gIGJyLnJlYWRVZSgpO1xuICBici5yZWFkVWUoKTtcbiAgYncudWUobmV3VmFsMSk7XG4gIGJ3LnVlKG5ld1ZhbDIpO1xuICB3aGlsZSAoYnIucG9zIDwgYnIuYml0cy5sZW5ndGgpIGJ3LmJpdHMucHVzaChici5yZWFkKDEpKTtcbiAgd2hpbGUgKGJ3LmJpdHMubGVuZ3RoICUgOCAhPT0gMCkgYncuYml0cy5wdXNoKDApO1xuICByZXR1cm4gYWRkRW11bGF0aW9uUHJldmVudGlvbihwYWNrQml0cyhidy5iaXRzKSk7XG59XG5cbi8qKiBBbHBoYSBTUFM6IHNwc19zZXFfcGFyYW1ldGVyX3NldF9pZCAwIOKGkiAxLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJld3JpdGVBbHBoYVNwcyhzcHM6IEJ1ZmZlcik6IEJ1ZmZlciB7XG4gIGNvbnN0IFNQU19TRVFfSURfQklUID0gU1BTX1BUTF9CSVQgKyA5NjsgLy8gUFRMIGlzIDk2IGJpdHMgZm9yIG91ciBwcm9maWxlIGNvbmZpZ1xuICByZXR1cm4gcmV3cml0ZU9uZVVlKHNwcywgU1BTX1NFUV9JRF9CSVQsIDEpO1xufVxuXG4vKiogQWxwaGEgUFBTOiBwcHNfcGljX3BhcmFtZXRlcl9zZXRfaWQgMCDihpIgMSwgcHBzX3NlcV9wYXJhbWV0ZXJfc2V0X2lkIDAg4oaSIDEuICovXG5leHBvcnQgZnVuY3Rpb24gcmV3cml0ZUFscGhhUHBzKHBwczogQnVmZmVyKTogQnVmZmVyIHtcbiAgcmV0dXJuIHJld3JpdGVUd29VZShwcHMsIDE2IC8qIGFmdGVyIE5BTCBoZWFkZXIgKi8sIDEsIDEpO1xufVxuXG4vLyDilIDilIDilIAgU2xpY2UgaGVhZGVyIHJld3JpdGUgKG11c3QgcHJlc2VydmUgQ0FCQUMgYnl0ZSBhbGlnbm1lbnQpIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5mdW5jdGlvbiByZWFkU2UoYnI6IEJpdFJlYWRlcik6IG51bWJlciB7XG4gIGNvbnN0IHVlID0gYnIucmVhZFVlKCk7XG4gIHJldHVybiB1ZSAmIDEgPyAodWUgKyAxKSA+PiAxIDogLSh1ZSA+PiAxKTtcbn1cblxuLy8gSW5saW5lIHN0X3JlZl9waWNfc2V0IHdoZW4gc2xpY2UgaGFzIHNob3J0X3Rlcm1fcmVmX3BpY19zZXRfc3BzX2ZsYWc9MC5cbi8vIHN0UnBzSWR4ID0gbnVtX3Nob3J0X3Rlcm1fcmVmX3BpY19zZXRzIHNvIGludGVyX3JlZl9waWNfc2V0X3ByZWRpY3Rpb24gbWF5IHVzZSBwcmV2IHNldC5cbmZ1bmN0aW9uIHBhcnNlSW5saW5lU3RSZWZQaWNTZXQoYnI6IEJpdFJlYWRlciwgbnVtRGVsdGFQb2NzU2V0MDogbnVtYmVyKTogdm9pZCB7XG4gIGNvbnN0IGludGVyRmxhZyA9IGJyLnJlYWQoMSk7IC8vIGludGVyX3JlZl9waWNfc2V0X3ByZWRpY3Rpb25fZmxhZ1xuICBpZiAoaW50ZXJGbGFnKSB7XG4gICAgY29uc3QgZGVsdGFJZHhNaW51czEgPSBici5yZWFkVWUoKTsgLy8gc3RScHNJZHggPT0gbnVtX3Nob3J0X3Rlcm1fcmVmX3BpY19zZXRzIOKGkiBwcmVzZW50XG4gICAgaWYgKGRlbHRhSWR4TWludXMxICE9PSAwKSB0aHJvdyBuZXcgRXJyb3IoYGFwcGxlX2FscGhhOiB1bmV4cGVjdGVkIGRlbHRhX2lkeF9taW51czE9JHtkZWx0YUlkeE1pbnVzMX1gKTtcbiAgICBici5yZWFkKDEpOyAvLyBkZWx0YV9ycHNfc2lnblxuICAgIGJyLnJlYWRVZSgpOyAvLyBhYnNfZGVsdGFfcnBzX21pbnVzMVxuICAgIGZvciAobGV0IGogPSAwOyBqIDw9IG51bURlbHRhUG9jc1NldDA7IGorKykge1xuICAgICAgY29uc3QgdXNlZCA9IGJyLnJlYWQoMSk7XG4gICAgICBpZiAoIXVzZWQpIGJyLnJlYWQoMSk7IC8vIHVzZV9kZWx0YV9mbGFnXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGNvbnN0IG51bU5lZyA9IGJyLnJlYWRVZSgpO1xuICAgIGNvbnN0IG51bVBvcyA9IGJyLnJlYWRVZSgpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtTmVnOyBpKyspIHsgYnIucmVhZFVlKCk7IGJyLnJlYWQoMSk7IH1cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bVBvczsgaSsrKSB7IGJyLnJlYWRVZSgpOyBici5yZWFkKDEpOyB9XG4gIH1cbn1cblxuLyoqIFBhcnNlIHNsaWNlX3NlZ21lbnRfaGVhZGVyIHVwIHRvIGJ5dGVfYWxpZ25tZW50LiBSZXR1cm5zIGJpdCBwb3NpdGlvbiBCIChlbmQgb2YgaGVhZGVyIGNvbnRlbnQpLiAqL1xuZnVuY3Rpb24gcGFyc2VIZWFkZXJUb0FsaWdubWVudChicjogQml0UmVhZGVyLCBuYWxUeXBlOiBudW1iZXIsIGNmZzogTnZlbmNIZXZjQ29uZmlnKTogbnVtYmVyIHtcbiAgYnIucmVhZCgxNik7IC8vIHNraXAgTkFMIGhlYWRlclxuICBpZiAoYnIucmVhZCgxKSAhPT0gMSkgdGhyb3cgbmV3IEVycm9yKFwiYXBwbGVfYWxwaGE6IGV4cGVjdGVkIGZpcnN0X3NsaWNlX3NlZ21lbnRfaW5fcGljX2ZsYWc9MVwiKTtcbiAgY29uc3QgaXNJcmFwID0gbmFsVHlwZSA+PSBOQUxfQkxBX1dfTFAgJiYgbmFsVHlwZSA8PSBOQUxfUlNWX0lSQVBfVkNMMjM7XG4gIGlmIChpc0lyYXApIGJyLnJlYWQoMSk7IC8vIG5vX291dHB1dF9vZl9wcmlvcl9waWNzX2ZsYWdcbiAgYnIucmVhZFVlKCk7IC8vIHNsaWNlX3BpY19wYXJhbWV0ZXJfc2V0X2lkXG4gIGNvbnN0IHNsaWNlVHlwZSA9IGJyLnJlYWRVZSgpO1xuICBpZiAoIWlzSXJhcCkge1xuICAgIGJyLnJlYWQoY2ZnLmxvZzJNYXhQb2NMc2IpOyAvLyBzbGljZV9waWNfb3JkZXJfY250X2xzYlxuICAgIGNvbnN0IHN0UmVmUGljU2V0U3BzRmxhZyA9IGJyLnJlYWQoMSk7XG4gICAgaWYgKCFzdFJlZlBpY1NldFNwc0ZsYWcpIHBhcnNlSW5saW5lU3RSZWZQaWNTZXQoYnIsIGNmZy5udW1EZWx0YVBvY3NTZXQwKTtcbiAgICBlbHNlIGlmIChjZmcubnVtU2hvcnRUZXJtUmVmUGljU2V0cyA+IDEpIGJyLnJlYWQoTWF0aC5jZWlsKE1hdGgubG9nMihjZmcubnVtU2hvcnRUZXJtUmVmUGljU2V0cykpKTtcbiAgICBpZiAoY2ZnLmxvbmdUZXJtUmVmUGljc1ByZXNlbnQpIHRocm93IG5ldyBFcnJvcihcImFwcGxlX2FscGhhOiBsb25nX3Rlcm1fcmVmX3BpY3MgcGF0aCB1bmltcGxlbWVudGVkXCIpO1xuICAgIGlmIChjZmcuc3BzVGVtcG9yYWxNdnBFbmFibGVkKSBici5yZWFkKDEpOyAvLyBzbGljZV90ZW1wb3JhbF9tdnBfZW5hYmxlZF9mbGFnXG4gIH1cbiAgaWYgKGNmZy5zYW9FbmFibGVkKSB7XG4gICAgYnIucmVhZCgxKTsgLy8gc2xpY2Vfc2FvX2x1bWFfZmxhZ1xuICAgIGJyLnJlYWQoMSk7IC8vIHNsaWNlX3Nhb19jaHJvbWFfZmxhZ1xuICB9XG4gIGlmIChzbGljZVR5cGUgPT09IFNMSUNFX1RZUEVfUCB8fCBzbGljZVR5cGUgPT09IFNMSUNFX1RZUEVfQikge1xuICAgIGNvbnN0IG92ZXJyaWRlRmxhZyA9IGJyLnJlYWQoMSk7XG4gICAgaWYgKG92ZXJyaWRlRmxhZykge1xuICAgICAgYnIucmVhZFVlKCk7XG4gICAgICBpZiAoc2xpY2VUeXBlID09PSBTTElDRV9UWVBFX0IpIGJyLnJlYWRVZSgpO1xuICAgIH1cbiAgICBpZiAoc2xpY2VUeXBlID09PSBTTElDRV9UWVBFX0IpIGJyLnJlYWQoMSk7IC8vIG12ZF9sMV96ZXJvX2ZsYWdcbiAgICBpZiAoY2ZnLmNhYmFjSW5pdFByZXNlbnQpIGJyLnJlYWQoMSk7IC8vIGNhYmFjX2luaXRfZmxhZ1xuICAgIGJyLnJlYWRVZSgpOyAvLyBmaXZlX21pbnVzX21heF9udW1fbWVyZ2VfY2FuZFxuICB9XG4gIHJlYWRTZShicik7IC8vIHNsaWNlX3FwX2RlbHRhXG4gIGlmIChjZmcucHBzSGFzTG9vcEZpbHRlckFjcm9zc1NsaWNlc0ZsYWcpIGJyLnJlYWQoMSk7IC8vIHNsaWNlX2xvb3BfZmlsdGVyX2Fjcm9zc19zbGljZXNfZW5hYmxlZF9mbGFnXG4gIHJldHVybiBici5wb3M7XG59XG5cbi8qKlxuICogUmV3cml0ZSBhbHBoYSBzbGljZSBoZWFkZXI6IHNsaWNlX3BpY19wYXJhbWV0ZXJfc2V0X2lkIDAg4oaSIDEuXG4gKiBUaGUgKzItYml0IHNoaWZ0IGlzIGFic29yYmVkIGJ5IGVtaXR0aW5nIGEgZnJlc2ggYnl0ZV9hbGlnbm1lbnQgdGhlbiBhcHBlbmRpbmcgdGhlXG4gKiBvcmlnaW5hbCBDQUJBQyBzbGljZV9zZWdtZW50X2RhdGEgYnl0ZXMgdmVyYmF0aW0uIENBQkFDIGJ5dGUgYm91bmRhcnkgaXMgcHJlc2VydmVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmV3cml0ZUFscGhhU2xpY2VIZWFkZXIoc2xpY2U6IEJ1ZmZlciwgbmFsVHlwZTogbnVtYmVyLCBjZmc6IE52ZW5jSGV2Y0NvbmZpZyk6IEJ1ZmZlciB7XG4gIGNvbnN0IHJic3AgPSByZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uKHNsaWNlKTtcbiAgY29uc3QgYnIgPSBuZXcgQml0UmVhZGVyKHJic3ApO1xuXG4gIGNvbnN0IHByb2JlID0gbmV3IEJpdFJlYWRlcihyYnNwKTtcbiAgY29uc3QgQiA9IHBhcnNlSGVhZGVyVG9BbGlnbm1lbnQocHJvYmUsIG5hbFR5cGUsIGNmZyk7XG4gIGNvbnN0IG9sZEFsaWduQml0cyA9IEIgJSA4ID09PSAwID8gOCA6IDggLSAoQiAlIDgpO1xuICBjb25zdCBzbGljZURhdGFCeXRlT2Zmc2V0ID0gKEIgKyBvbGRBbGlnbkJpdHMpIC8gODtcblxuICBjb25zdCBidyA9IG5ldyBCaXRXcml0ZXIoKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCAxNjsgaSsrKSBidy5iaXRzLnB1c2goYnIucmVhZCgxKSk7IC8vIE5BTCBoZWFkZXJcbiAgYncuYml0cy5wdXNoKGJyLnJlYWQoMSkpOyAvLyBmaXJzdF9zbGljZV9zZWdtZW50X2luX3BpY19mbGFnXG4gIGNvbnN0IGlzSXJhcCA9IG5hbFR5cGUgPj0gTkFMX0JMQV9XX0xQICYmIG5hbFR5cGUgPD0gTkFMX1JTVl9JUkFQX1ZDTDIzO1xuICBpZiAoaXNJcmFwKSBidy5iaXRzLnB1c2goYnIucmVhZCgxKSk7IC8vIG5vX291dHB1dF9vZl9wcmlvcl9waWNzX2ZsYWdcblxuICBici5yZWFkVWUoKTsgLy8gZGlzY2FyZCBvbGQgc2xpY2VfcGljX3BhcmFtZXRlcl9zZXRfaWRcbiAgYncudWUoMSk7IC8vIG5ldyBzbGljZV9waWNfcGFyYW1ldGVyX3NldF9pZFxuXG4gIHdoaWxlIChici5wb3MgPCBCKSBidy5iaXRzLnB1c2goYnIucmVhZCgxKSk7IC8vIGNvcHkgcmVzdCBvZiBoZWFkZXIgYml0c1xuXG4gIGJ3LmJpdHMucHVzaCgxKTsgLy8gYnl0ZV9hbGlnbm1lbnQ6IHJic3BfYWxpZ25tZW50X2JpdF9vbmVcbiAgd2hpbGUgKGJ3LmJpdHMubGVuZ3RoICUgOCAhPT0gMCkgYncuYml0cy5wdXNoKDApO1xuXG4gIHJldHVybiBhZGRFbXVsYXRpb25QcmV2ZW50aW9uKEJ1ZmZlci5jb25jYXQoW3BhY2tCaXRzKGJ3LmJpdHMpLCByYnNwLnN1YmFycmF5KHNsaWNlRGF0YUJ5dGVPZmZzZXQpXSkpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8xMy5cblxuaW1wb3J0IHsgQml0UmVhZGVyLCBCaXRXcml0ZXIsIHBhY2tCaXRzIH0gZnJvbSBcIi4vYml0XCI7XG5pbXBvcnQgeyBhZGRFbXVsYXRpb25QcmV2ZW50aW9uLCByZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uIH0gZnJvbSBcIi4vbmFsXCI7XG5cbmludGVyZmFjZSBQYXJzZWRQVEwge1xuICBwdGxTdGFydDogbnVtYmVyO1xuICBwdGxFbmQ6IG51bWJlcjtcbiAgcHRsQml0czogbnVtYmVyW107XG4gIG1heFN1YkxheWVyc01pbnVzMTogbnVtYmVyO1xufVxuXG5mdW5jdGlvbiBleHRyYWN0UFRMKHZwc0RhdGE6IEJ1ZmZlcik6IFBhcnNlZFBUTCB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGJyID0gbmV3IEJpdFJlYWRlcihyZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uKHZwc0RhdGEpKTtcbiAgYnIucmVhZCgxNik7IC8vIE5BTCBoZWFkZXJcbiAgYnIucmVhZCg0KTsgLy8gdnBzX2lkXG4gIGJyLnJlYWQoMik7IC8vIGJhc2VfbGF5ZXJfaW50ZXJuYWwgKyBhdmFpbGFibGVcbiAgaWYgKGJyLnJlYWQoNikgPiAwKSByZXR1cm4gdW5kZWZpbmVkOyAvLyBhbHJlYWR5IG11bHRpLWxheWVyXG4gIGNvbnN0IG1heFN1YkxheWVyc01pbnVzMSA9IGJyLnJlYWQoMyk7XG4gIGJyLnJlYWQoMSArIDE2KTsgLy8gdGVtcG9yYWxfbmVzdGluZyArIHJlc2VydmVkXG5cbiAgY29uc3QgcHRsU3RhcnQgPSBici5wb3M7XG4gIGJyLnJlYWQoOTYpOyAvLyBnZW5lcmFsIFBUTCAocHJvZmlsZV9zcGFjZSArIHRpZXIgKyBpZGMgKyBjb21wYXQgKyBjb25zdHJhaW50cyArIGxldmVsKVxuICBpZiAobWF4U3ViTGF5ZXJzTWludXMxID4gMCkgYnIucmVhZChtYXhTdWJMYXllcnNNaW51czEgKiAyICsgKDggLSBtYXhTdWJMYXllcnNNaW51czEpICogMik7XG4gIHJldHVybiB7IHB0bFN0YXJ0LCBwdGxFbmQ6IGJyLnBvcywgcHRsQml0czogYnIuYml0cywgbWF4U3ViTGF5ZXJzTWludXMxIH07XG59XG5cbi8qKiBXcml0ZSBiYXNlIFZQUyBmaWVsZHMgZm9yIDItbGF5ZXIgYWxwaGEuICovXG5mdW5jdGlvbiB3cml0ZUJhc2VWUFMoYnc6IEJpdFdyaXRlciwgcHRsOiBQYXJzZWRQVEwpIHtcbiAgYncudygweDQwMDEsIDE2KTsgLy8gTkFMIGhlYWRlclxuICBidy53KDAsIDQpOyAvLyB2cHNfaWRcbiAgYncuZmxhZygxKTsgLy8gYmFzZV9sYXllcl9pbnRlcm5hbFxuICBidy5mbGFnKDEpOyAvLyBiYXNlX2xheWVyX2F2YWlsYWJsZVxuICBidy53KDEsIDYpOyAvLyBtYXhfbGF5ZXJzX21pbnVzMSA9IDFcbiAgYncudyhwdGwubWF4U3ViTGF5ZXJzTWludXMxLCAzKTtcbiAgLy8gdGVtcG9yYWxfbmVzdGluZzogdHJ1ZSB3aGVuIHNpbmdsZSBzdWItbGF5ZXIgKGFsbCByZWZzIGxheWVyIDApXG4gIGJ3LmZsYWcocHRsLm1heFN1YkxheWVyc01pbnVzMSA9PT0gMCk7XG4gIGJ3LncoMHhmZmZmLCAxNik7IC8vIHJlc2VydmVkXG4gIGJ3LmNvcHkocHRsLnB0bEJpdHMsIHB0bC5wdGxTdGFydCwgcHRsLnB0bEVuZCAtIHB0bC5wdGxTdGFydCk7XG5cbiAgYncuZmxhZygxKTsgLy8gc3ViX2xheWVyX29yZGVyaW5nX2luZm9fcHJlc2VudFxuICBmb3IgKGxldCBpID0gMDsgaSA8PSBwdGwubWF4U3ViTGF5ZXJzTWludXMxOyBpKyspIHtcbiAgICBidy51ZSg0KTsgLy8gbWF4RGVjUGljQnVmZmVyaW5nIC0gMVxuICAgIGJ3LnVlKDIpOyAvLyBudW1SZW9yZGVyUGljc1xuICAgIGJ3LnVlKDQpOyAvLyBtYXhMYXRlbmN5SW5jcmVhc2UgKyAxXG4gIH1cblxuICBidy53KDEsIDYpOyAvLyBtYXhfbnVoX2xheWVyX2lkID0gMVxuICBidy51ZSgxKTsgLy8gbnVtX2xheWVyX3NldHNfbWludXMxID0gMVxuICBidy5mbGFnKDEpOyAvLyBsYXllcl9pZF9pbmNsdWRlZFsxXVswXVxuICBidy5mbGFnKDEpOyAvLyBsYXllcl9pZF9pbmNsdWRlZFsxXVsxXVxuICBidy5mbGFnKDApOyAvLyB0aW1pbmdfaW5mb19wcmVzZW50XG4gIGJ3LmZsYWcoMSk7IC8vIHZwc19leHRlbnNpb25fZmxhZ1xuICBidy5hbGlnbigxKTsgLy8gZXh0ZW5zaW9uIGFsaWdubWVudCBiaXRzID0gMVxufVxuXG4vKiogV3JpdGUgVlBTIGV4dGVuc2lvbiBtYXRjaGluZyB4MjY1IDQuMSBFTkFCTEVfQUxQSEEuICovXG5mdW5jdGlvbiB3cml0ZVZQU0V4dGVuc2lvbihidzogQml0V3JpdGVyLCBwdGw6IFBhcnNlZFBUTCwgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpIHtcbiAgLy8gRXh0ZW5zaW9uIFBUTDogbGV2ZWxfaWRjIG9ubHkgKHByb2ZpbGVQcmVzZW50RmxhZz0wKVxuICBidy5jb3B5KHB0bC5wdGxCaXRzLCBwdGwucHRsRW5kIC0gOCwgOCk7XG4gIGlmIChwdGwubWF4U3ViTGF5ZXJzTWludXMxID4gMCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcHRsLm1heFN1YkxheWVyc01pbnVzMTsgaSsrKSBidy53KDAsIDIpO1xuICAgIGZvciAobGV0IGkgPSBwdGwubWF4U3ViTGF5ZXJzTWludXMxOyBpIDwgODsgaSsrKSBidy53KDAsIDIpO1xuICB9XG5cbiAgYncuZmxhZygwKTsgLy8gc3BsaXR0aW5nX2ZsYWdcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCAxNjsgaSsrKSBidy5mbGFnKGkgPT09IDIgfHwgaSA9PT0gMyk7IC8vIHNjYWxhYmlsaXR5OiBzcGF0aWFsICsgYXV4XG4gIGJ3LncoMCwgMyk7IC8vIGRpbWVuc2lvbl9pZF9sZW5bMF0gPSAxXG4gIGJ3LncoMCwgMyk7IC8vIGRpbWVuc2lvbl9pZF9sZW5bMV0gPSAxXG4gIGJ3LmZsYWcoMSk7IC8vIG51aF9sYXllcl9pZF9wcmVzZW50XG4gIGJ3LncoMSwgNik7IC8vIGxheWVyX2lkX2luX251aFsxXSA9IDFcbiAgYncudygxLCAxKTsgLy8gZGltZW5zaW9uX2lkWzFdWzBdID0gMVxuICBidy53KDEsIDEpOyAvLyBkaW1lbnNpb25faWRbMV1bMV0gPSBBVVhfQUxQSEFcbiAgYncudygwLCA0KTsgLy8gdmlld19pZF9sZW4gPSAwXG5cbiAgYncuZmxhZygwKTsgLy8gZGlyZWN0X2RlcGVuZGVuY3lfZmxhZ1sxXVswXVxuICBidy51ZSgwKTsgLy8gbnVtX2FkZF9sYXllcl9zZXRzXG4gIGJ3LmZsYWcoMCk7IC8vIHN1Yl9sYXllcnNfbWF4X21pbnVzMV9wcmVzZW50XG4gIGJ3LmZsYWcoMCk7IC8vIG1heF90aWRfcmVmX3ByZXNlbnRcbiAgYncuZmxhZygwKTsgLy8gZGVmYXVsdF9yZWZfbGF5ZXJzX2FjdGl2ZVxuXG4gIC8vIEZGbXBlZyBsb29wcyBmcm9tIGluZGV4IDIgdG8gbmJfcHRsLTEsIHNvIG5wdGxfbTE9MiDihpIgMSBlbnRyeSBhdCBpbmRleCAyXG4gIGJ3LnVlKDIpOyAvLyB2cHNfbnVtX3Byb2ZpbGVfdGllcl9sZXZlbF9taW51czFcbiAgYncuZmxhZygxKTsgLy8gcHJvZmlsZV9wcmVzZW50X2ZsYWdbMl1cbiAgYncuY29weShwdGwucHRsQml0cywgcHRsLnB0bFN0YXJ0LCBwdGwucHRsRW5kIC0gcHRsLnB0bFN0YXJ0KTtcblxuICBidy51ZSgwKTsgLy8gbnVtX2FkZF9vbHNzXG4gIGJ3LncoMCwgMik7IC8vIGRlZmF1bHRfb3V0cHV0X2xheWVyX2lkY1xuICBidy53KDEsIDIpOyAvLyBwdGxfaWR4WzFdWzBdID0gMSAoY2VpbF9sb2cyKDMpID0gMiBiaXRzKVxuICBidy53KDIsIDIpOyAvLyBwdGxfaWR4WzFdWzFdID0gMlxuXG4gIGJ3LnVlKDApOyAvLyB2cHNfbnVtX3JlcF9mb3JtYXRzX21pbnVzMVxuICBidy53KHdpZHRoLCAxNik7XG4gIGJ3LncoaGVpZ2h0LCAxNik7XG4gIGJ3LmZsYWcoMSk7IC8vIGNocm9tYV9hbmRfYml0X2RlcHRoX3Zwc19wcmVzZW50XG4gIGJ3LncoMSwgMik7IC8vIGNocm9tYV9mb3JtYXRfaWRjID0gNDoyOjBcbiAgYncudygwLCA0KTsgLy8gYml0X2RlcHRoX2x1bWFfbWludXM4XG4gIGJ3LncoMCwgNCk7IC8vIGJpdF9kZXB0aF9jaHJvbWFfbWludXM4XG4gIGJ3LmZsYWcoMCk7IC8vIGNvbmZvcm1hbmNlX3dpbmRvd192cHNfZmxhZ1xuXG4gIGJ3LmZsYWcoMSk7IC8vIG1heF9vbmVfYWN0aXZlX3JlZl9sYXllclxuICBidy5mbGFnKDApOyAvLyBwb2NfbHNiX2FsaWduZWRcbiAgYncuZmxhZygxKTsgLy8gcG9jX2xzYl9ub3RfcHJlc2VudFxuXG4gIC8vIERQQiBmb3IgT0xTIDEgKDIgbGF5ZXJzLCAxIHN1Yi1sYXllcilcbiAgYncuZmxhZygwKTsgLy8gc3ViX2xheWVyX2ZsYWdfaW5mb19wcmVzZW50XG4gIGJ3LnVlKDApOyAvLyBtYXhfZGVjX3BpY19idWZmZXJpbmcgKGxheWVyIDApXG4gIGJ3LnVlKDApOyAvLyBtYXhfZGVjX3BpY19idWZmZXJpbmcgKGxheWVyIDEpXG4gIGJ3LnVlKDApOyAvLyBtYXhfbnVtX3Jlb3JkZXJfcGljc1xuICBidy51ZSgwKTsgLy8gbWF4X2xhdGVuY3lfaW5jcmVhc2VcblxuICBidy51ZSgwKTsgLy8gZGlyZWN0X2RlcF90eXBlX2xlbl9taW51czJcbiAgYncuZmxhZygwKTsgLy8gZGVmYXVsdF9kaXJlY3RfZGVwZW5kZW5jeV9mbGFnXG4gIGJ3LnVlKDApOyAvLyBub25fdnVpX2V4dGVuc2lvbl9sZW5ndGhcbiAgYncuZmxhZygwKTsgLy8gdnBzX3Z1aV9wcmVzZW50XG4gIGJ3LmZsYWcoMCk7IC8vIHZwc19leHRlbnNpb24yX2ZsYWdcbn1cblxuLyoqXG4gKiBCdWlsZCBhIGNvbXBsZXRlIGFscGhhIFZQUyBmcm9tIHNjcmF0Y2gsIHVzaW5nIHRoZSBvcmlnaW5hbCBOVkVOQyBWUFNcbiAqIG9ubHkgYXMgYSBzb3VyY2UgZm9yIHRoZSBQVEwgKHByb2ZpbGUvdGllci9sZXZlbCkgYnl0ZXMuXG4gKiBNYXRjaGVzIHgyNjUgNC4xIEVOQUJMRV9BTFBIQSBWUFMgc3RydWN0dXJlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRBbHBoYVZQUyh2cHNEYXRhOiBCdWZmZXIsIHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKTogQnVmZmVyIHtcbiAgY29uc3QgcHRsID0gZXh0cmFjdFBUTCh2cHNEYXRhKTtcbiAgaWYgKCFwdGwpIHJldHVybiB2cHNEYXRhO1xuXG4gIGNvbnN0IGJ3ID0gbmV3IEJpdFdyaXRlcigpO1xuICB3cml0ZUJhc2VWUFMoYncsIHB0bCk7XG4gIHdyaXRlVlBTRXh0ZW5zaW9uKGJ3LCBwdGwsIHdpZHRoLCBoZWlnaHQpO1xuXG4gIGJ3LmJpdHMucHVzaCgxKTsgLy8gUkJTUCBzdG9wIGJpdFxuICBidy5hbGlnbigwKTtcbiAgcmV0dXJuIGFkZEVtdWxhdGlvblByZXZlbnRpb24ocGFja0JpdHMoYncuYml0cykpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8xMi5cblxuaW1wb3J0IHR5cGUgeyBGcmFtZSB9IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQgeyByZXdyaXRlQWxwaGFQcHMsIHJld3JpdGVBbHBoYVNsaWNlSGVhZGVyLCByZXdyaXRlQWxwaGFTcHMgfSBmcm9tIFwiLi9hbHBoYV9kYXJ3aW5cIjtcbmltcG9ydCB7IHBhY2tCaXRzIH0gZnJvbSBcIi4vYml0XCI7XG5pbXBvcnQge1xuICBBTk5FWF9CX1NUQVJUX0NPREUsXG4gIGVuY29kZU5hbEhlYWRlcixcbiAgTkFMX1NFSV9QUkVGSVgsXG4gIE5BTF9TUFMsXG4gIE5BTF9QUFMsXG4gIE5BTF9WUFMsXG4gIHR5cGUgTmFsVW5pdCxcbiAgcmV3cml0ZU5hbExheWVySWQsXG4gIHNwbGl0TmFsVW5pdHMsXG59IGZyb20gXCIuL25hbFwiO1xuaW1wb3J0IHR5cGUgeyBOdmVuY0hldmNDb25maWcgfSBmcm9tIFwiLi9wYXJzZXJcIjtcbmltcG9ydCB7IGJ1aWxkQWxwaGFWUFMgfSBmcm9tIFwiLi92cHNcIjtcblxuLy8gQkdSQSBhbHBoYSDihpIgWSBwbGFuZSBvZiBwYWNrZWQgWVVWNDIwUC4gQ2FsbGVyIHByZS1maWxscyBVVj0xMjguXG4vLyBVaW50MzIgcGF0aDogQkdSQSBMRSB1MzIgPj4+IDI0ID0gQSBieXRlLlxuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RBbHBoYVRvWXV2NDIwcEJ1ZmZlcihiZ3JhRnJhbWU6IEZyYW1lLCBidWY6IEJ1ZmZlcik6IHZvaWQge1xuICBjb25zdCBzcmMgPSBiZ3JhRnJhbWUuZGF0YT8uWzBdO1xuICBjb25zdCBzcmNMcyA9IGJncmFGcmFtZS5saW5lc2l6ZT8uWzBdO1xuICBpZiAoIXNyYyB8fCAhc3JjTHMpIHRocm93IG5ldyBFcnJvcihcImV4dHJhY3RBbHBoYTogbWlzc2luZyBCR1JBIGRhdGFcIik7XG4gIGNvbnN0IHcgPSBiZ3JhRnJhbWUud2lkdGg7XG4gIGNvbnN0IGggPSBiZ3JhRnJhbWUuaGVpZ2h0O1xuICBjb25zdCB5U2l6ZSA9IHcgKiBoO1xuICBpZiAoc3JjLmJ5dGVPZmZzZXQgJSA0ID09PSAwICYmIHNyY0xzID09PSB3ICogNCkge1xuICAgIGNvbnN0IHNyYzMyID0gbmV3IFVpbnQzMkFycmF5KHNyYy5idWZmZXIsIHNyYy5ieXRlT2Zmc2V0LCB5U2l6ZSk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB5U2l6ZTsgaSsrKSBidWZbaV0gPSBzcmMzMltpXSEgPj4+IDI0O1xuICB9IGVsc2Uge1xuICAgIGZvciAobGV0IHkgPSAwOyB5IDwgaDsgeSsrKSB7XG4gICAgICBjb25zdCByb3dCYXNlID0geSAqIHNyY0xzICsgMztcbiAgICAgIGNvbnN0IGRzdEJhc2UgPSB5ICogdztcbiAgICAgIGZvciAobGV0IHggPSAwOyB4IDwgdzsgeCsrKSBidWZbZHN0QmFzZSArIHhdID0gc3JjW3Jvd0Jhc2UgKyB4ICogNF0hO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVuaWZpZWRFeHRyYWRhdGFPcHRpb25zIHtcbiAgYmFzZUV4dHJhZGF0YTogQnVmZmVyO1xuICBhbHBoYUV4dHJhZGF0YTogQnVmZmVyO1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbn1cblxuLy8gQXBwbGUgSEVWQyBBbHBoYSBQcm9maWxlOiBhbHBoYSBTUFMgc3BzX3NlcV9wYXJhbWV0ZXJfc2V0X2lkPTEsIGFscGhhIFBQUyBwaWMrc2VxIGlkPTEuXG5mdW5jdGlvbiByZXdyaXRlQWxwaGFQYXJhbVNldCh0eXBlOiBudW1iZXIsIGRhdGE6IEJ1ZmZlcik6IEJ1ZmZlciB7XG4gIGlmICh0eXBlID09PSBOQUxfU1BTKSByZXR1cm4gcmV3cml0ZUFscGhhU3BzKGRhdGEpO1xuICBpZiAodHlwZSA9PT0gTkFMX1BQUykgcmV0dXJuIHJld3JpdGVBbHBoYVBwcyhkYXRhKTtcbiAgcmV0dXJuIGRhdGE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFVuaWZpZWRFeHRyYWRhdGEob3B0czogVW5pZmllZEV4dHJhZGF0YU9wdGlvbnMpOiBCdWZmZXIge1xuICBjb25zdCB7IGJhc2VFeHRyYWRhdGEsIGFscGhhRXh0cmFkYXRhIH0gPSBvcHRzO1xuICBjb25zdCBiYXNlTmFscyA9IHNwbGl0TmFsVW5pdHMoYmFzZUV4dHJhZGF0YSk7XG4gIGNvbnN0IGFscGhhTmFscyA9IHNwbGl0TmFsVW5pdHMoYWxwaGFFeHRyYWRhdGEpO1xuXG4gIGNvbnN0IGFscGhhQnlUeXBlID0gbmV3IE1hcDxudW1iZXIsIE5hbFVuaXRbXT4oKTtcbiAgZm9yIChjb25zdCBuYWwgb2YgYWxwaGFOYWxzKSB7XG4gICAgaWYgKG5hbC50eXBlID09PSBOQUxfVlBTKSBjb250aW51ZTtcbiAgICBjb25zdCBhcnIgPSBhbHBoYUJ5VHlwZS5nZXQobmFsLnR5cGUpID8/IFtdO1xuICAgIGFyci5wdXNoKG5hbCk7XG4gICAgYWxwaGFCeVR5cGUuc2V0KG5hbC50eXBlLCBhcnIpO1xuICB9XG5cbiAgY29uc3QgY2h1bmtzOiBCdWZmZXJbXSA9IFtdO1xuICBjb25zdCBlbWl0dGVkID0gbmV3IFNldDxudW1iZXI+KCk7XG4gIGZvciAoY29uc3QgbmFsIG9mIGJhc2VOYWxzKSB7XG4gICAgY29uc3QgZGF0YSA9IG5hbC50eXBlID09PSBOQUxfVlBTID8gYnVpbGRBbHBoYVZQUyhuYWwuZGF0YSwgb3B0cy53aWR0aCwgb3B0cy5oZWlnaHQpIDogbmFsLmRhdGE7XG4gICAgY2h1bmtzLnB1c2goQU5ORVhfQl9TVEFSVF9DT0RFLCBkYXRhKTtcbiAgICBpZiAoIWVtaXR0ZWQuaGFzKG5hbC50eXBlKSkge1xuICAgICAgZW1pdHRlZC5hZGQobmFsLnR5cGUpO1xuICAgICAgZm9yIChjb25zdCBhbHBoYU5hbCBvZiBhbHBoYUJ5VHlwZS5nZXQobmFsLnR5cGUpID8/IFtdKSB7XG4gICAgICAgIGNvbnN0IGFEYXRhID0gcmV3cml0ZUFscGhhUGFyYW1TZXQobmFsLnR5cGUsIGFscGhhTmFsLmRhdGEpO1xuICAgICAgICBjaHVua3MucHVzaChBTk5FWF9CX1NUQVJUX0NPREUsIHJld3JpdGVOYWxMYXllcklkKGFEYXRhLCAxKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY2h1bmtzLnB1c2goYnVpbGRBbHBoYUNoYW5uZWxJbmZvU0VJKCkpO1xuICByZXR1cm4gQnVmZmVyLmNvbmNhdChjaHVua3MpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRBbHBoYUNoYW5uZWxJbmZvU0VJKCk6IEJ1ZmZlciB7XG4gIGNvbnN0IHBheWxvYWRUeXBlID0gMTY1O1xuICBjb25zdCBwYXlsb2FkU2l6ZSA9IDQ7XG4gIGNvbnN0IFtoMCwgaDFdID0gZW5jb2RlTmFsSGVhZGVyKE5BTF9TRUlfUFJFRklYLCAwLCAxKTtcblxuICBjb25zdCBiaXRzOiBudW1iZXJbXSA9IFtdO1xuICBjb25zdCB3cml0ZUJpdHMgPSAodmFsOiBudW1iZXIsIG46IG51bWJlcikgPT4ge1xuICAgIGZvciAobGV0IGkgPSBuIC0gMTsgaSA+PSAwOyBpLS0pIGJpdHMucHVzaCgodmFsID4+IGkpICYgMSk7XG4gIH07XG5cbiAgd3JpdGVCaXRzKDAsIDEpOyAvLyBhbHBoYV9jaGFubmVsX2NhbmNlbF9mbGFnXG4gIHdyaXRlQml0cygwLCAzKTsgLy8gYWxwaGFfY2hhbm5lbF91c2VfaWRjICgwID0gdW5zcGVjaWZpZWQvcHJlbXVsdGlwbGllZDsgbWF0Y2hlcyB4MjY1IEVOQUJMRV9BTFBIQSlcbiAgd3JpdGVCaXRzKDAsIDMpOyAvLyBhbHBoYV9jaGFubmVsX2JpdF9kZXB0aF9taW51czhcbiAgd3JpdGVCaXRzKDAsIDkpOyAvLyBhbHBoYV90cmFuc3BhcmVudF92YWx1ZVxuICB3cml0ZUJpdHMoMjU1LCA5KTsgLy8gYWxwaGFfb3BhcXVlX3ZhbHVlXG4gIHdyaXRlQml0cygwLCAxKTsgLy8gYWxwaGFfY2hhbm5lbF9pbmNyX2ZsYWdcbiAgd3JpdGVCaXRzKDAsIDEpOyAvLyBhbHBoYV9jaGFubmVsX2NsaXBfZmxhZ1xuICB3cml0ZUJpdHMoMSwgMSk7IC8vIGJ5dGUgYWxpZ25tZW50XG4gIHdoaWxlIChiaXRzLmxlbmd0aCAlIDggIT09IDApIHdyaXRlQml0cygwLCAxKTtcblxuICByZXR1cm4gQnVmZmVyLmNvbmNhdChbXG4gICAgQU5ORVhfQl9TVEFSVF9DT0RFLFxuICAgIEJ1ZmZlci5mcm9tKFtoMCwgaDFdKSxcbiAgICBCdWZmZXIuZnJvbShbcGF5bG9hZFR5cGUsIHBheWxvYWRTaXplXSksXG4gICAgcGFja0JpdHMoYml0cyksXG4gICAgQnVmZmVyLmZyb20oWzB4ODBdKSxcbiAgXSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnRlcmxlYXZlQWNjZXNzVW5pdHMoYmFzZU5hbHM6IE5hbFVuaXRbXSwgYWxwaGFOYWxzOiBOYWxVbml0W10sIGNmZzogTnZlbmNIZXZjQ29uZmlnKTogQnVmZmVyIHtcbiAgY29uc3QgY2h1bmtzOiBCdWZmZXJbXSA9IFtdO1xuICBmb3IgKGNvbnN0IG5hbCBvZiBiYXNlTmFscykge1xuICAgIGNodW5rcy5wdXNoKEFOTkVYX0JfU1RBUlRfQ09ERSwgbmFsLmRhdGEpO1xuICB9XG4gIGZvciAoY29uc3QgbmFsIG9mIGFscGhhTmFscykge1xuICAgIGlmIChuYWwudHlwZSA8IE5BTF9WUFMpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSByZXdyaXRlQWxwaGFTbGljZUhlYWRlcihuYWwuZGF0YSwgbmFsLnR5cGUsIGNmZyk7XG4gICAgICBjaHVua3MucHVzaChBTk5FWF9CX1NUQVJUX0NPREUsIHJld3JpdGVOYWxMYXllcklkKGRhdGEsIDEpKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoY2h1bmtzKTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgTHUgQW8gKGx1YW9AYmlsaWJpbGkuY29tKSBvbiAyMDI2LzA1LzE4LlxuXG5pbXBvcnQgeyB0eXBlIENvZGVjQ29udGV4dCwgRkZtcGVnRXJyb3IsIHR5cGUgUGFja2V0LCB0eXBlIFN0cmVhbSB9IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQgeyBBVkVSUk9SX0VBR0FJTiwgQVZFUlJPUl9FT0YsIHR5cGUgQVZQYWNrZXRGbGFnIH0gZnJvbSBcIm5vZGUtYXYvY29uc3RhbnRzXCI7XG5pbXBvcnQgdHlwZSB7IEZvcm1hdE11eGVyIH0gZnJvbSBcIi4uL211eGVyXCI7XG5pbXBvcnQgeyBpbnRlcmxlYXZlQWNjZXNzVW5pdHMgfSBmcm9tIFwiLi9hbHBoYVwiO1xuaW1wb3J0IHsgcGF0Y2hIZXZjQWxwaGFQdGwgfSBmcm9tIFwiLi9hbHBoYV9kYXJ3aW5cIjtcbmltcG9ydCB7IHNwbGl0TmFsVW5pdHMgfSBmcm9tIFwiLi9uYWxcIjtcbmltcG9ydCB0eXBlIHsgTnZlbmNIZXZjQ29uZmlnIH0gZnJvbSBcIi4vcGFyc2VyXCI7XG5cbmludGVyZmFjZSBQZW5kaW5nUGFja2V0IHtcbiAgZGF0YTogQnVmZmVyO1xuICBwdHM6IGJpZ2ludDtcbiAgZHRzOiBiaWdpbnQ7XG4gIGR1cmF0aW9uOiBiaWdpbnQ7XG4gIGZsYWdzOiBBVlBhY2tldEZsYWc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRHVhbExheWVyTXV4T3B0aW9ucyB7XG4gIGJhc2VDdHg6IENvZGVjQ29udGV4dDtcbiAgYWxwaGFDdHg6IENvZGVjQ29udGV4dDtcbiAgYmFzZVBrdDogUGFja2V0O1xuICBhbHBoYVBrdDogUGFja2V0O1xuICBzdHJlYW06IFN0cmVhbTtcbiAgaGV2Y0NmZzogTnZlbmNIZXZjQ29uZmlnO1xufVxuXG4vLyBEcmFpbnMgdGhlIGJhc2UgKyBhbHBoYSBOVkVOQyBzZXNzaW9ucyBhbmQgd3JpdGVzIGludGVybGVhdmVkIEhFVkMtYWxwaGEgYWNjZXNzIHVuaXRzLlxuZXhwb3J0IGNsYXNzIER1YWxMYXllck11eCB7XG4gIHByaXZhdGUgX3M6IER1YWxMYXllck11eE9wdGlvbnM7XG4gIHByaXZhdGUgX2Jhc2VRdWV1ZTogUGVuZGluZ1BhY2tldFtdID0gW107XG4gIHByaXZhdGUgX2FscGhhUXVldWU6IFBlbmRpbmdQYWNrZXRbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKHM6IER1YWxMYXllck11eE9wdGlvbnMpIHtcbiAgICB0aGlzLl9zID0gcztcbiAgfVxuXG4gIGFzeW5jIGRyYWluKG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgYmFzZUN0eCwgYWxwaGFDdHgsIGJhc2VQa3QsIGFscGhhUGt0IH0gPSB0aGlzLl9zO1xuICAgIC8vIERyYWluIGVhY2ggc2Vzc2lvbiBmdWxseSDigJQgaW5kZXBlbmRlbnQgTlZFTkMgc2Vzc2lvbnMgcnVuIGEgZnJhbWUgYXBhcnQgdHJhbnNpZW50bHkuXG4gICAgdGhpcy5fYmFzZVF1ZXVlLnB1c2goLi4uKGF3YWl0IHRoaXMucmVjZWl2ZUFsbChiYXNlQ3R4LCBiYXNlUGt0LCBcImJhc2VcIikpKTtcbiAgICB0aGlzLl9hbHBoYVF1ZXVlLnB1c2goLi4uKGF3YWl0IHRoaXMucmVjZWl2ZUFsbChhbHBoYUN0eCwgYWxwaGFQa3QsIFwiYWxwaGFcIikpKTtcbiAgICAvLyBiZj0wIOKGkiBubyByZW9yZGVyOyBxdWV1ZSBpbmRleCBOIGlzIHRoZSBzYW1lIGZyYW1lIGZvciBib3RoLiBMZWZ0b3ZlciB3YWl0cyBmb3IgbmV4dCBkcmFpbi5cbiAgICB3aGlsZSAodGhpcy5fYmFzZVF1ZXVlLmxlbmd0aCAmJiB0aGlzLl9hbHBoYVF1ZXVlLmxlbmd0aCkge1xuICAgICAgYXdhaXQgdGhpcy53cml0ZVBhaXIodGhpcy5fYmFzZVF1ZXVlLnNoaWZ0KCkhLCB0aGlzLl9hbHBoYVF1ZXVlLnNoaWZ0KCkhLCBtdXhlcik7XG4gICAgfVxuICB9XG5cbiAgLy8gVW5wYWlyZWQgbGVmdG92ZXJzIGFmdGVyIEVPRiA9IHRydWUgYmFzZS9hbHBoYSBkZXN5bmM7IHJldHVybnMgYSBkZXNjcmlwdGlvbiwgZWxzZSB1bmRlZmluZWQuXG4gIGRlc3luY0FmdGVyRW9mKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCF0aGlzLl9iYXNlUXVldWUubGVuZ3RoICYmICF0aGlzLl9hbHBoYVF1ZXVlLmxlbmd0aCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICByZXR1cm4gYGJhc2U9JHt0aGlzLl9iYXNlUXVldWUubGVuZ3RofSwgYWxwaGE9JHt0aGlzLl9hbHBoYVF1ZXVlLmxlbmd0aH0gdW5wYWlyZWRgO1xuICB9XG5cbiAgLy8gRUFHQUlOL0VPRiA9IG5vcm1hbCBzdG9wOyBhbnkgb3RoZXIgbmVnYXRpdmUgaXMgYSByZWFsIGZhdWx0LCBub3QgXCJkcmFpbmVkXCIuXG4gIHByaXZhdGUgYXN5bmMgcmVjZWl2ZUFsbChjdHg6IENvZGVjQ29udGV4dCwgcGt0OiBQYWNrZXQsIHRhZzogc3RyaW5nKTogUHJvbWlzZTxQZW5kaW5nUGFja2V0W10+IHtcbiAgICBjb25zdCBvdXQ6IFBlbmRpbmdQYWNrZXRbXSA9IFtdO1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBjb25zdCByZXQgPSBhd2FpdCBjdHgucmVjZWl2ZVBhY2tldChwa3QpO1xuICAgICAgaWYgKHJldCA+PSAwKSB7XG4gICAgICAgIG91dC5wdXNoKHRoaXMuc25hcHNob3QocGt0KSk7XG4gICAgICAgIHBrdC51bnJlZigpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChyZXQgPT09IEFWRVJST1JfRUFHQUlOIHx8IHJldCA9PT0gQVZFUlJPUl9FT0YpIHJldHVybiBvdXQ7XG4gICAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IocmV0LCBgbnZlbmMuJHt0YWd9LnJlY2VpdmVQYWNrZXRgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNuYXBzaG90KHBrdDogUGFja2V0KTogUGVuZGluZ1BhY2tldCB7XG4gICAgLy8gcGt0LmRhdGEgaXMgbmF0aXZlIG1lbW9yeSBmcmVlZCBvbiB1bnJlZiDigJQgY29weSBiZWZvcmUgcXVldWVpbmcuXG4gICAgcmV0dXJuIHsgZGF0YTogQnVmZmVyLmZyb20ocGt0LmRhdGEhKSwgcHRzOiBwa3QucHRzLCBkdHM6IHBrdC5kdHMsIGR1cmF0aW9uOiBwa3QuZHVyYXRpb24sIGZsYWdzOiBwa3QuZmxhZ3MgfTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgd3JpdGVQYWlyKGJhc2U6IFBlbmRpbmdQYWNrZXQsIGFscGhhOiBQZW5kaW5nUGFja2V0LCBtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IGJhc2VQa3QsIGJhc2VDdHgsIHN0cmVhbSwgaGV2Y0NmZyB9ID0gdGhpcy5fcztcbiAgICAvLyBQYXRjaCBpbi1iYW5kIFZQUy9TUFMgUFRMIGJpdHMgZm9yIEFwcGxlLVZUQiBjb21wYXQgKGVuY29kZXIgcmVwZWF0cyBoZWFkZXJzIHBlciBJRFIpLlxuICAgIGNvbnN0IGludGVybGVhdmVkID0gaW50ZXJsZWF2ZUFjY2Vzc1VuaXRzKHNwbGl0TmFsVW5pdHMoYmFzZS5kYXRhKSwgc3BsaXROYWxVbml0cyhhbHBoYS5kYXRhKSwgaGV2Y0NmZyk7XG4gICAgLy8gZGF0YSBzZXR0ZXIgd2lwZXMgcHRzL2R0cy9kdXJhdGlvbi9mbGFncyDigJQgcmVzdG9yZTsgZmxhZ3MnIEtFWSBiaXQgZHJpdmVzIG1vdiBzdHNzLlxuICAgIGJhc2VQa3QuZGF0YSA9IHBhdGNoSGV2Y0FscGhhUHRsKGludGVybGVhdmVkKTtcbiAgICBiYXNlUGt0LnB0cyA9IGJhc2UucHRzO1xuICAgIGJhc2VQa3QuZHRzID0gYmFzZS5kdHM7XG4gICAgYmFzZVBrdC5kdXJhdGlvbiA9IGJhc2UuZHVyYXRpb24gPT09IDBuID8gMW4gOiBiYXNlLmR1cmF0aW9uO1xuICAgIGJhc2VQa3QuZmxhZ3MgPSBiYXNlLmZsYWdzO1xuICAgIGJhc2VQa3Quc3RyZWFtSW5kZXggPSBzdHJlYW0uaW5kZXg7XG4gICAgYmFzZVBrdC5yZXNjYWxlVHMoYmFzZUN0eC50aW1lQmFzZSwgc3RyZWFtLnRpbWVCYXNlKTtcbiAgICBhd2FpdCBtdXhlci53cml0ZVBhY2tldChiYXNlUGt0KTtcbiAgICBiYXNlUGt0LnVucmVmKCk7XG4gIH1cbn1cbiIsIi8vIFBhcnNlIE5WRU5DIFNQUy9QUFMgZXh0cmFkYXRhIGF0IGVuY29kZXIgaW5pdCB0byBkZXJpdmUgZmxhZ3MgdGhlIHNsaWNlIGhlYWRlciBwYXJzZXIgZGVwZW5kcyBvbi5cbi8vIERlZnVzZXMgZnJhZ2lsZSBoYXJkY29kZWQgYXNzdW1wdGlvbnM6IGlmIE5WRU5DIGRlZmF1bHRzIHNoaWZ0LCB0aHJvd3Mgd2l0aCBhY3Rpb25hYmxlIGVycm9yLlxuXG5pbXBvcnQgeyBCaXRSZWFkZXIgfSBmcm9tIFwiLi9iaXRcIjtcbmltcG9ydCB7IE5BTF9QUFMsIE5BTF9TUFMsIHJlbW92ZUVtdWxhdGlvblByZXZlbnRpb24sIHNwbGl0TmFsVW5pdHMgfSBmcm9tIFwiLi9uYWxcIjtcblxuZXhwb3J0IGludGVyZmFjZSBOdmVuY0hldmNDb25maWcge1xuICBsb2cyTWF4UG9jTHNiOiBudW1iZXI7XG4gIG51bVNob3J0VGVybVJlZlBpY1NldHM6IG51bWJlcjtcbiAgbnVtRGVsdGFQb2NzU2V0MDogbnVtYmVyO1xuICBsb25nVGVybVJlZlBpY3NQcmVzZW50OiBib29sZWFuO1xuICBzcHNUZW1wb3JhbE12cEVuYWJsZWQ6IGJvb2xlYW47XG4gIHNhb0VuYWJsZWQ6IGJvb2xlYW47XG4gIGNhYmFjSW5pdFByZXNlbnQ6IGJvb2xlYW47XG4gIHBwc0hhc0xvb3BGaWx0ZXJBY3Jvc3NTbGljZXNGbGFnOiBib29sZWFuO1xufVxuXG5mdW5jdGlvbiBmYWlsKGZpZWxkOiBzdHJpbmcsIGdvdDogdW5rbm93biwgZXhwZWN0ZWQ6IHN0cmluZyk6IG5ldmVyIHtcbiAgdGhyb3cgbmV3IEVycm9yKGBoZXZjX2FscGhhOiBOVkVOQyBTUFMvUFBTIHVuc3VwcG9ydGVkOiAke2ZpZWxkfT0ke2dvdH0sIGV4cGVjdGVkICR7ZXhwZWN0ZWR9YCk7XG59XG5cbmZ1bmN0aW9uIHNraXBQdGwoYnI6IEJpdFJlYWRlciwgbWF4U3ViTGF5ZXJzOiBudW1iZXIpOiB2b2lkIHtcbiAgYnIucmVhZCgyICsgMSArIDUpOyAvLyBwcm9maWxlX3NwYWNlLCB0aWVyLCBwcm9maWxlX2lkY1xuICBici5yZWFkKDMyKTsgLy8gcHJvZmlsZV9jb21wYXRpYmlsaXR5X2ZsYWdbMC4uMzFdXG4gIGJyLnJlYWQoNDgpOyAvLyA0IHNvdXJjZS9wYWNrZWQgZmxhZ3MgKyA0MyBjb25zdHJhaW50L3Jlc2VydmVkICsgMSBpbmJsZFxuICBici5yZWFkKDgpOyAvLyBsZXZlbF9pZGNcbiAgY29uc3Qgc3ViUHJvZmlsZVByZXNlbnQ6IG51bWJlcltdID0gW107XG4gIGNvbnN0IHN1YkxldmVsUHJlc2VudDogbnVtYmVyW10gPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXhTdWJMYXllcnM7IGkrKykge1xuICAgIHN1YlByb2ZpbGVQcmVzZW50LnB1c2goYnIucmVhZCgxKSk7XG4gICAgc3ViTGV2ZWxQcmVzZW50LnB1c2goYnIucmVhZCgxKSk7XG4gIH1cbiAgaWYgKG1heFN1YkxheWVycyA+IDApIGZvciAobGV0IGkgPSBtYXhTdWJMYXllcnM7IGkgPCA4OyBpKyspIGJyLnJlYWQoMik7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbWF4U3ViTGF5ZXJzOyBpKyspIHtcbiAgICBpZiAoc3ViUHJvZmlsZVByZXNlbnRbaV0pIGJyLnJlYWQoOCArIDMyICsgNDgpO1xuICAgIGlmIChzdWJMZXZlbFByZXNlbnRbaV0pIGJyLnJlYWQoOCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcGFyc2VTcHMoc3BzUmJzcDogQnVmZmVyKToge1xuICBsb2cyTWF4UG9jTHNiOiBudW1iZXI7XG4gIHNhb0VuYWJsZWQ6IGJvb2xlYW47XG4gIG51bVNob3J0VGVybVJlZlBpY1NldHM6IG51bWJlcjtcbiAgbnVtRGVsdGFQb2NzU2V0MDogbnVtYmVyO1xuICBsb25nVGVybVJlZlBpY3NQcmVzZW50OiBib29sZWFuO1xuICBzcHNUZW1wb3JhbE12cEVuYWJsZWQ6IGJvb2xlYW47XG59IHtcbiAgY29uc3QgYnIgPSBuZXcgQml0UmVhZGVyKHNwc1Jic3ApO1xuICBici5yZWFkKDE2KTsgLy8gTkFMIGhlYWRlclxuICBici5yZWFkKDQpOyAvLyBzcHNfdmlkZW9fcGFyYW1ldGVyX3NldF9pZFxuICBjb25zdCBtYXhTdWJMYXllcnMgPSBici5yZWFkKDMpO1xuICAvLyBhbHBoYV9kYXJ3aW4ucmV3cml0ZUFscGhhU3BzICsgdnBzLmV4dHJhY3RQVEwgaGFyZGNvZGUgOTYtYml0IFBUTCDigJQgb25seSB2YWxpZCB3aGVuIHN1Yl9sYXllcnM9MC5cbiAgaWYgKG1heFN1YkxheWVycyAhPT0gMCkgZmFpbChcInNwc19tYXhfc3ViX2xheWVyc19taW51czFcIiwgbWF4U3ViTGF5ZXJzLCBcIjBcIik7XG4gIGJyLnJlYWQoMSk7IC8vIHNwc190ZW1wb3JhbF9pZF9uZXN0aW5nX2ZsYWdcbiAgc2tpcFB0bChiciwgbWF4U3ViTGF5ZXJzKTtcbiAgYnIucmVhZFVlKCk7IC8vIHNwc19zZXFfcGFyYW1ldGVyX3NldF9pZFxuICBjb25zdCBjaHJvbWFGb3JtYXQgPSBici5yZWFkVWUoKTtcbiAgaWYgKGNocm9tYUZvcm1hdCA9PT0gMykgZmFpbChcImNocm9tYV9mb3JtYXRfaWRjXCIsIGNocm9tYUZvcm1hdCwgXCLiiaAzXCIpO1xuICBici5yZWFkVWUoKTsgLy8gcGljX3dpZHRoX2luX2x1bWFfc2FtcGxlc1xuICBici5yZWFkVWUoKTsgLy8gcGljX2hlaWdodF9pbl9sdW1hX3NhbXBsZXNcbiAgaWYgKGJyLnJlYWQoMSkpIHtcbiAgICBici5yZWFkVWUoKTsgYnIucmVhZFVlKCk7IGJyLnJlYWRVZSgpOyBici5yZWFkVWUoKTtcbiAgfVxuICBici5yZWFkVWUoKTsgLy8gYml0X2RlcHRoX2x1bWFfbWludXM4XG4gIGJyLnJlYWRVZSgpOyAvLyBiaXRfZGVwdGhfY2hyb21hX21pbnVzOFxuICBjb25zdCBsb2cyTWF4UG9jTHNiID0gYnIucmVhZFVlKCkgKyA0O1xuICBjb25zdCBzdWJPcmRlckluZm8gPSBici5yZWFkKDEpO1xuICBjb25zdCBvcmRlckNvdW50ID0gc3ViT3JkZXJJbmZvID8gbWF4U3ViTGF5ZXJzICsgMSA6IDE7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgb3JkZXJDb3VudDsgaSsrKSB7XG4gICAgYnIucmVhZFVlKCk7IGJyLnJlYWRVZSgpOyBici5yZWFkVWUoKTtcbiAgfVxuICBici5yZWFkVWUoKTsgYnIucmVhZFVlKCk7IGJyLnJlYWRVZSgpOyBici5yZWFkVWUoKTtcbiAgYnIucmVhZFVlKCk7IGJyLnJlYWRVZSgpO1xuICBpZiAoYnIucmVhZCgxKSkgZmFpbChcInNjYWxpbmdfbGlzdF9lbmFibGVkX2ZsYWdcIiwgMSwgXCIwXCIpO1xuICBici5yZWFkKDEpOyAvLyBhbXBfZW5hYmxlZF9mbGFnXG4gIGNvbnN0IHNhb0VuYWJsZWQgPSBici5yZWFkKDEpID09PSAxO1xuICBpZiAoYnIucmVhZCgxKSkgZmFpbChcInBjbV9lbmFibGVkX2ZsYWdcIiwgMSwgXCIwXCIpO1xuICBjb25zdCBudW1TdFJwcyA9IGJyLnJlYWRVZSgpO1xuICBpZiAobnVtU3RScHMgPiAxKSBmYWlsKFwibnVtX3Nob3J0X3Rlcm1fcmVmX3BpY19zZXRzXCIsIG51bVN0UnBzLCBcIuKJpDFcIik7XG4gIGxldCBudW1EZWx0YVBvY3NTZXQwID0gMDtcbiAgaWYgKG51bVN0UnBzID09PSAxKSB7XG4gICAgY29uc3QgbnVtTmVnID0gYnIucmVhZFVlKCk7XG4gICAgY29uc3QgbnVtUG9zID0gYnIucmVhZFVlKCk7XG4gICAgbnVtRGVsdGFQb2NzU2V0MCA9IG51bU5lZyArIG51bVBvcztcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bU5lZzsgaSsrKSB7IGJyLnJlYWRVZSgpOyBici5yZWFkKDEpOyB9XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1Qb3M7IGkrKykgeyBici5yZWFkVWUoKTsgYnIucmVhZCgxKTsgfVxuICB9XG4gIGNvbnN0IGxvbmdUZXJtUmVmUGljc1ByZXNlbnQgPSBici5yZWFkKDEpID09PSAxO1xuICBpZiAobG9uZ1Rlcm1SZWZQaWNzUHJlc2VudCkgZmFpbChcImxvbmdfdGVybV9yZWZfcGljc19wcmVzZW50X2ZsYWdcIiwgMSwgXCIwXCIpO1xuICBjb25zdCBzcHNUZW1wb3JhbE12cEVuYWJsZWQgPSBici5yZWFkKDEpID09PSAxO1xuICByZXR1cm4geyBsb2cyTWF4UG9jTHNiLCBzYW9FbmFibGVkLCBudW1TaG9ydFRlcm1SZWZQaWNTZXRzOiBudW1TdFJwcywgbnVtRGVsdGFQb2NzU2V0MCwgbG9uZ1Rlcm1SZWZQaWNzUHJlc2VudCwgc3BzVGVtcG9yYWxNdnBFbmFibGVkIH07XG59XG5cbmZ1bmN0aW9uIHBhcnNlUHBzKHBwc1Jic3A6IEJ1ZmZlcik6IHsgY2FiYWNJbml0UHJlc2VudDogYm9vbGVhbjsgcHBzSGFzTG9vcEZpbHRlckFjcm9zc1NsaWNlc0ZsYWc6IGJvb2xlYW4gfSB7XG4gIGNvbnN0IGJyID0gbmV3IEJpdFJlYWRlcihwcHNSYnNwKTtcbiAgYnIucmVhZCgxNik7IC8vIE5BTCBoZWFkZXJcbiAgYnIucmVhZFVlKCk7IC8vIHBwc19waWNfcGFyYW1ldGVyX3NldF9pZFxuICBici5yZWFkVWUoKTsgLy8gcHBzX3NlcV9wYXJhbWV0ZXJfc2V0X2lkXG4gIGJyLnJlYWQoMSk7IC8vIGRlcGVuZGVudF9zbGljZV9zZWdtZW50c19lbmFibGVkX2ZsYWdcbiAgYnIucmVhZCgxKTsgLy8gb3V0cHV0X2ZsYWdfcHJlc2VudF9mbGFnXG4gIGNvbnN0IG51bUV4dHJhU2xpY2VIZWFkZXJCaXRzID0gYnIucmVhZCgzKTtcbiAgaWYgKG51bUV4dHJhU2xpY2VIZWFkZXJCaXRzICE9PSAwKSBmYWlsKFwibnVtX2V4dHJhX3NsaWNlX2hlYWRlcl9iaXRzXCIsIG51bUV4dHJhU2xpY2VIZWFkZXJCaXRzLCBcIjBcIik7XG4gIGJyLnJlYWQoMSk7IC8vIHNpZ25fZGF0YV9oaWRpbmdfZW5hYmxlZF9mbGFnXG4gIGNvbnN0IGNhYmFjSW5pdFByZXNlbnQgPSBici5yZWFkKDEpID09PSAxO1xuICBici5yZWFkVWUoKTsgLy8gbnVtX3JlZl9pZHhfbDBfZGVmYXVsdF9hY3RpdmVfbWludXMxXG4gIGJyLnJlYWRVZSgpOyAvLyBudW1fcmVmX2lkeF9sMV9kZWZhdWx0X2FjdGl2ZV9taW51czFcbiAgYnIucmVhZFVlKCk7IC8vIGluaXRfcXBfbWludXMyNiAoc2UsIGJ1dCB1ZSBwYXJzZXIgZmluZSB0byBhZHZhbmNlKVxuICBici5yZWFkKDEpOyAvLyBjb25zdHJhaW5lZF9pbnRyYV9wcmVkX2ZsYWdcbiAgYnIucmVhZCgxKTsgLy8gdHJhbnNmb3JtX3NraXBfZW5hYmxlZF9mbGFnXG4gIGlmIChici5yZWFkKDEpKSBici5yZWFkVWUoKTsgLy8gY3VfcXBfZGVsdGFfZW5hYmxlZCDihpIgZGlmZl9jdV9xcF9kZWx0YV9kZXB0aFxuICBici5yZWFkVWUoKTsgLy8gcHBzX2NiX3FwX29mZnNldFxuICBici5yZWFkVWUoKTsgLy8gcHBzX2NyX3FwX29mZnNldFxuICBici5yZWFkKDEpOyAvLyBwcHNfc2xpY2VfY2hyb21hX3FwX29mZnNldHNfcHJlc2VudF9mbGFnXG4gIGJyLnJlYWQoMSk7IC8vIHdlaWdodGVkX3ByZWRfZmxhZ1xuICBici5yZWFkKDEpOyAvLyB3ZWlnaHRlZF9iaXByZWRfZmxhZ1xuICBici5yZWFkKDEpOyAvLyB0cmFuc3F1YW50X2J5cGFzc19lbmFibGVkX2ZsYWdcbiAgaWYgKGJyLnJlYWQoMSkpIGZhaWwoXCJ0aWxlc19lbmFibGVkX2ZsYWdcIiwgMSwgXCIwXCIpO1xuICBici5yZWFkKDEpOyAvLyBlbnRyb3B5X2NvZGluZ19zeW5jX2VuYWJsZWRfZmxhZ1xuICBjb25zdCBwcHNMb29wRmlsdGVyQWNyb3NzU2xpY2VzRW5hYmxlZCA9IGJyLnJlYWQoMSkgPT09IDE7XG4gIGNvbnN0IGRlYmxvY2tpbmdDb250cm9sUHJlc2VudCA9IGJyLnJlYWQoMSk7XG4gIGxldCBzbGljZURlYmxvY2tpbmdEaXNhYmxlZE92ZXJyaWRlID0gZmFsc2U7XG4gIGlmIChkZWJsb2NraW5nQ29udHJvbFByZXNlbnQpIHtcbiAgICBici5yZWFkKDEpOyAvLyBkZWJsb2NraW5nX2ZpbHRlcl9vdmVycmlkZV9lbmFibGVkX2ZsYWdcbiAgICBzbGljZURlYmxvY2tpbmdEaXNhYmxlZE92ZXJyaWRlID0gYnIucmVhZCgxKSA9PT0gMTsgLy8gcHBzX2RlYmxvY2tpbmdfZmlsdGVyX2Rpc2FibGVkX2ZsYWdcbiAgICBpZiAoIXNsaWNlRGVibG9ja2luZ0Rpc2FibGVkT3ZlcnJpZGUpIHtcbiAgICAgIGJyLnJlYWRVZSgpOyBici5yZWFkVWUoKTsgLy8gYmV0YS90YyBvZmZzZXRzIChzZSB2aWEgdWUgYWR2YW5jZSlcbiAgICB9XG4gIH1cbiAgLy8gc2xpY2VfbG9vcF9maWx0ZXJfYWNyb3NzX3NsaWNlc19lbmFibGVkX2ZsYWcgaW4gc2xpY2UgaGVhZGVyIGlzIHByZXNlbnQgaWZmXG4gIC8vIHBwc19sb29wX2ZpbHRlcl9hY3Jvc3Nfc2xpY2VzX2VuYWJsZWRfZmxhZyAmJiAhc2xpY2VfZGVibG9ja2luZ19kaXNhYmxlZC5cbiAgY29uc3QgcHBzSGFzTG9vcEZpbHRlckFjcm9zc1NsaWNlc0ZsYWcgPSBwcHNMb29wRmlsdGVyQWNyb3NzU2xpY2VzRW5hYmxlZCAmJiAhc2xpY2VEZWJsb2NraW5nRGlzYWJsZWRPdmVycmlkZTtcbiAgcmV0dXJuIHsgY2FiYWNJbml0UHJlc2VudCwgcHBzSGFzTG9vcEZpbHRlckFjcm9zc1NsaWNlc0ZsYWcgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlTnZlbmNIZXZjQ29uZmlnKGV4dHJhZGF0YTogQnVmZmVyKTogTnZlbmNIZXZjQ29uZmlnIHtcbiAgY29uc3QgbmFscyA9IHNwbGl0TmFsVW5pdHMoZXh0cmFkYXRhKTtcbiAgY29uc3Qgc3BzID0gbmFscy5maW5kKChuKSA9PiBuLnR5cGUgPT09IE5BTF9TUFMpO1xuICBjb25zdCBwcHMgPSBuYWxzLmZpbmQoKG4pID0+IG4udHlwZSA9PT0gTkFMX1BQUyk7XG4gIGlmICghc3BzKSB0aHJvdyBuZXcgRXJyb3IoXCJoZXZjX2FscGhhOiBTUFMgbWlzc2luZyBpbiBOVkVOQyBleHRyYWRhdGFcIik7XG4gIGlmICghcHBzKSB0aHJvdyBuZXcgRXJyb3IoXCJoZXZjX2FscGhhOiBQUFMgbWlzc2luZyBpbiBOVkVOQyBleHRyYWRhdGFcIik7XG4gIGNvbnN0IHMgPSBwYXJzZVNwcyhyZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uKHNwcy5kYXRhKSk7XG4gIGNvbnN0IHAgPSBwYXJzZVBwcyhyZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uKHBwcy5kYXRhKSk7XG4gIHJldHVybiB7IC4uLnMsIC4uLnAgfTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMTIuXG5cbmltcG9ydCB7IENvZGVjLCB0eXBlIENvZGVjQ29udGV4dCwgRkZtcGVnRXJyb3IsIEZyYW1lLCB0eXBlIFBhY2tldCwgdHlwZSBTdHJlYW0gfSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHtcbiAgQVZfUElYX0ZNVF9CR1JBLFxuICBBVl9QSVhfRk1UX1lVVjQyMFAsXG4gIEFWRVJST1JfRUFHQUlOLFxuICBBVkVSUk9SX0VPRixcbiAgRkZfRU5DT0RFUl9IRVZDX05WRU5DLFxufSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcbmltcG9ydCB7IG1ha2VGcmFtZSwgbWFrZVBhY2tldCwgb3BlblZpZGVvQ3R4IH0gZnJvbSBcIi4uL21pc2NcIjtcbmltcG9ydCB0eXBlIHsgRm9ybWF0TXV4ZXIgfSBmcm9tIFwiLi4vbXV4ZXJcIjtcbmltcG9ydCB0eXBlIHsgSHdWaWRlb0VuY29kZXJPcHRpb25zIH0gZnJvbSBcIi4uL3ZpZGVvdG9vbGJveFwiO1xuaW1wb3J0IHsgYnVpbGRVbmlmaWVkRXh0cmFkYXRhLCBleHRyYWN0QWxwaGFUb1l1djQyMHBCdWZmZXIgfSBmcm9tIFwiLi9hbHBoYVwiO1xuaW1wb3J0IHsgcGF0Y2hIZXZjQWxwaGFQdGwgfSBmcm9tIFwiLi9hbHBoYV9kYXJ3aW5cIjtcbmltcG9ydCB7IER1YWxMYXllck11eCB9IGZyb20gXCIuL2R1YWxfbGF5ZXJfbXV4XCI7XG5pbXBvcnQgeyB0eXBlIE52ZW5jSGV2Y0NvbmZpZywgcGFyc2VOdmVuY0hldmNDb25maWcgfSBmcm9tIFwiLi9wYXJzZXJcIjtcblxuaW50ZXJmYWNlIE52ZW5jU3RhdGUge1xuICBiYXNlQ3R4OiBDb2RlY0NvbnRleHQ7XG4gIGFscGhhQ3R4OiBDb2RlY0NvbnRleHQ7XG4gIGJhc2VQa3Q6IFBhY2tldDtcbiAgYWxwaGFQa3Q6IFBhY2tldDtcbiAgc3RyZWFtOiBTdHJlYW07XG4gIGFscGhhU3dGcmFtZTogRnJhbWU7XG4gIGFscGhhQnVmOiBCdWZmZXI7XG4gIGhldmNDZmc6IE52ZW5jSGV2Y0NvbmZpZztcbn1cblxuZXhwb3J0IGNsYXNzIE52ZW5jRHVhbExheWVyRW5jb2RlciBpbXBsZW1lbnRzIERpc3Bvc2FibGUge1xuICBwcml2YXRlIF9zOiBOdmVuY1N0YXRlO1xuICBwcml2YXRlIF9tdXg6IER1YWxMYXllck11eDtcbiAgcHJpdmF0ZSBfcHRzID0gMG47XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihzOiBOdmVuY1N0YXRlKSB7XG4gICAgdGhpcy5fcyA9IHM7XG4gICAgdGhpcy5fbXV4ID0gbmV3IER1YWxMYXllck11eCh7XG4gICAgICBiYXNlQ3R4OiBzLmJhc2VDdHgsXG4gICAgICBhbHBoYUN0eDogcy5hbHBoYUN0eCxcbiAgICAgIGJhc2VQa3Q6IHMuYmFzZVBrdCxcbiAgICAgIGFscGhhUGt0OiBzLmFscGhhUGt0LFxuICAgICAgc3RyZWFtOiBzLnN0cmVhbSxcbiAgICAgIGhldmNDZmc6IHMuaGV2Y0NmZyxcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBjcmVhdGUob3B0czogSHdWaWRlb0VuY29kZXJPcHRpb25zKTogUHJvbWlzZTxOdmVuY0R1YWxMYXllckVuY29kZXI+IHtcbiAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQsIGZwcywgYml0cmF0ZSwgbXV4ZXIgfSA9IG9wdHM7XG5cbiAgICBjb25zdCBjb2RlYyA9IENvZGVjLmZpbmRFbmNvZGVyQnlOYW1lKEZGX0VOQ09ERVJfSEVWQ19OVkVOQyk7XG4gICAgaWYgKCFjb2RlYykgdGhyb3cgbmV3IEVycm9yKFwiaGV2Y19udmVuYyBlbmNvZGVyIG5vdCBmb3VuZFwiKTtcblxuICAgIC8vIHRpZXI9bWFpbiBtYXRjaGVzIEFwcGxlIFZpZGVvVG9vbGJveDsgbWFjT1MgQ2hyb21lIHJlcXVpcmVzIE1haW4gdGllciBmb3IgSEVWQyBhbHBoYSBkZWNvZGUuXG4gICAgY29uc3QgbnZlbmNPcHRzID0geyBwcmVzZXQ6IFwicDRcIiwgYmY6IFwiMFwiLCB0aWVyOiBcIm1haW5cIiB9O1xuICAgIGNvbnN0IGNvbW1vbiA9IHsgY29kZWMsIHdpZHRoLCBoZWlnaHQsIGZwcywgYml0cmF0ZSwgb3B0aW9uczogbnZlbmNPcHRzIH07XG4gICAgLy8gQkdSQSBkaXJlY3Qg4oCUIE5WRU5DIGNvbnZlcnRzIGludGVybmFsbHksIG5vIENQVSBTV1MsIG5vIGh3RnJhbWVzQ3R4IG5lZWRlZC5cbiAgICBjb25zdCBiYXNlQ3R4ID0gYXdhaXQgb3BlblZpZGVvQ3R4KHsgLi4uY29tbW9uLCBwaXhlbEZvcm1hdDogQVZfUElYX0ZNVF9CR1JBIH0sIFwibnZlbmMuYmFzZS5vcGVuMlwiKTtcblxuICAgIGxldCBhbHBoYUN0eDogQ29kZWNDb250ZXh0IHwgdW5kZWZpbmVkO1xuICAgIGxldCBiYXNlUGt0OiBQYWNrZXQgfCB1bmRlZmluZWQ7XG4gICAgbGV0IGFscGhhUGt0OiBQYWNrZXQgfCB1bmRlZmluZWQ7XG4gICAgbGV0IGFscGhhU3dGcmFtZTogRnJhbWUgfCB1bmRlZmluZWQ7XG4gICAgdHJ5IHtcbiAgICAgIGFscGhhQ3R4ID0gYXdhaXQgb3BlblZpZGVvQ3R4KHsgLi4uY29tbW9uLCBwaXhlbEZvcm1hdDogQVZfUElYX0ZNVF9ZVVY0MjBQIH0sIFwibnZlbmMuYWxwaGEub3BlbjJcIik7XG5cbiAgICAgIGlmICghYmFzZUN0eC5leHRyYURhdGEgfHwgIWFscGhhQ3R4LmV4dHJhRGF0YSkgdGhyb3cgbmV3IEVycm9yKFwibnZlbmM6IGNvZGVjIGV4dHJhZGF0YSBtaXNzaW5nXCIpO1xuICAgICAgY29uc3QgaGV2Y0NmZyA9IHBhcnNlTnZlbmNIZXZjQ29uZmlnKGJhc2VDdHguZXh0cmFEYXRhKTtcblxuICAgICAgY29uc3Qgc3RyZWFtID0gbXV4ZXIuYWRkU3RyZWFtKGJhc2VDdHgsIFwiaHZjMVwiKTtcbiAgICAgIGNvbnN0IHVuaWZpZWQgPSBidWlsZFVuaWZpZWRFeHRyYWRhdGEoe1xuICAgICAgICBiYXNlRXh0cmFkYXRhOiBiYXNlQ3R4LmV4dHJhRGF0YSxcbiAgICAgICAgYWxwaGFFeHRyYWRhdGE6IGFscGhhQ3R4LmV4dHJhRGF0YSxcbiAgICAgICAgd2lkdGgsXG4gICAgICAgIGhlaWdodCxcbiAgICAgIH0pO1xuICAgICAgLy8gQXBwbGUtVlRCIGNvbXBhdDogcmV3cml0ZSBWUFMrU1BTIFBUTCBiaXRzIHRvIG1hdGNoIHgyNjUvVlRCIG91dHB1dCAodGllcj1NYWluLCBjb21wYXRbMl09MSkuXG4gICAgICBzdHJlYW0uY29kZWNwYXIuZXh0cmFkYXRhID0gcGF0Y2hIZXZjQWxwaGFQdGwodW5pZmllZCk7XG5cbiAgICAgIGNvbnN0IHlTaXplID0gd2lkdGggKiBoZWlnaHQ7XG4gICAgICAvLyBZVVY0MjBQIGNocm9tYSBwbGFuZXMgYXJlIGNlaWwody8yKcOXY2VpbChoLzIpOyBmbG9vciB1bmRlcmZsb3dzIG9uIG9kZCBkaW1lbnNpb25zLlxuICAgICAgY29uc3QgY2hyb21hU2l6ZSA9ICgod2lkdGggKyAxKSA+PiAxKSAqICgoaGVpZ2h0ICsgMSkgPj4gMSk7XG4gICAgICBjb25zdCBhbHBoYUJ1ZiA9IEJ1ZmZlci5hbGxvYyh5U2l6ZSArIGNocm9tYVNpemUgKiAyKTtcbiAgICAgIGFscGhhQnVmLmZpbGwoMTI4LCB5U2l6ZSk7XG5cbiAgICAgIGJhc2VQa3QgPSBtYWtlUGFja2V0KCk7XG4gICAgICBhbHBoYVBrdCA9IG1ha2VQYWNrZXQoKTtcbiAgICAgIGFscGhhU3dGcmFtZSA9IG1ha2VGcmFtZSh3aWR0aCwgaGVpZ2h0LCBBVl9QSVhfRk1UX1lVVjQyMFApO1xuXG4gICAgICByZXR1cm4gbmV3IE52ZW5jRHVhbExheWVyRW5jb2Rlcih7XG4gICAgICAgIGJhc2VDdHgsXG4gICAgICAgIGFscGhhQ3R4LFxuICAgICAgICBiYXNlUGt0LFxuICAgICAgICBhbHBoYVBrdCxcbiAgICAgICAgc3RyZWFtLFxuICAgICAgICBhbHBoYVN3RnJhbWUsXG4gICAgICAgIGFscGhhQnVmLFxuICAgICAgICBoZXZjQ2ZnLFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gUGFydGlhbCBjb25zdHJ1Y3Rpb246IGVuY29kZXIgbmV2ZXIgcmV0dXJuZWQsIHNvIFtTeW1ib2wuZGlzcG9zZV0gaXMgdW5yZWFjaGFibGUuXG4gICAgICBiYXNlUGt0Py5mcmVlKCk7XG4gICAgICBhbHBoYVBrdD8uZnJlZSgpO1xuICAgICAgYWxwaGFTd0ZyYW1lPy5mcmVlKCk7XG4gICAgICBhbHBoYUN0eD8uZnJlZUNvbnRleHQoKTtcbiAgICAgIGJhc2VDdHguZnJlZUNvbnRleHQoKTtcbiAgICAgIHRocm93IGU7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZW5jb2RlKGJncmFGcmFtZTogRnJhbWUsIG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgYmFzZUN0eCwgYWxwaGFDdHgsIGFscGhhU3dGcmFtZSwgYWxwaGFCdWYgfSA9IHRoaXMuX3M7XG4gICAgY29uc3QgcHRzID0gdGhpcy5fcHRzKys7XG5cbiAgICAvLyBFeHRyYWN0IHRoZSBhbHBoYSBwbGFuZSBiZWZvcmUgYmFzZS5zZW5kRnJhbWUg4oCUIHRoZSBlbmNvZGVyIHVucmVmcyB0aGUgaW5wdXQgZnJhbWUuXG4gICAgZXh0cmFjdEFscGhhVG9ZdXY0MjBwQnVmZmVyKGJncmFGcmFtZSwgYWxwaGFCdWYpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhbHBoYVN3RnJhbWUubWFrZVdyaXRhYmxlKCksIFwiYWxwaGFTdy5tYWtlV3JpdGFibGVcIik7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGFscGhhU3dGcmFtZS5mcm9tQnVmZmVyKGFscGhhQnVmKSwgXCJhbHBoYVN3LmZyb21CdWZmZXJcIik7XG4gICAgYWxwaGFTd0ZyYW1lLnB0cyA9IHB0cztcbiAgICBhbHBoYVN3RnJhbWUuZHVyYXRpb24gPSAxbjtcblxuICAgIGJncmFGcmFtZS5wdHMgPSBwdHM7XG4gICAgYmdyYUZyYW1lLmR1cmF0aW9uID0gMW47XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IGJhc2VDdHguc2VuZEZyYW1lKGJncmFGcmFtZSksIFwiYmFzZS5zZW5kRnJhbWVcIik7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IGFscGhhQ3R4LnNlbmRGcmFtZShhbHBoYVN3RnJhbWUpLCBcImFscGhhLnNlbmRGcmFtZVwiKTtcblxuICAgIGF3YWl0IHRoaXMuX211eC5kcmFpbihtdXhlcik7XG4gIH1cblxuICBhc3luYyBmbHVzaChtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLnNlbmRFb2YodGhpcy5fcy5iYXNlQ3R4LCBcImJhc2VcIik7XG4gICAgYXdhaXQgdGhpcy5zZW5kRW9mKHRoaXMuX3MuYWxwaGFDdHgsIFwiYWxwaGFcIik7XG4gICAgYXdhaXQgdGhpcy5fbXV4LmRyYWluKG11eGVyKTtcbiAgICBjb25zdCBkZXN5bmMgPSB0aGlzLl9tdXguZGVzeW5jQWZ0ZXJFb2YoKTtcbiAgICBpZiAoZGVzeW5jKSB0aHJvdyBuZXcgRXJyb3IoYE5WRU5DIGRlc3luYzogJHtkZXN5bmN9YCk7XG4gIH1cblxuICBbU3ltYm9sLmRpc3Bvc2VdKCk6IHZvaWQge1xuICAgIGNvbnN0IHsgYmFzZVBrdCwgYWxwaGFQa3QsIGJhc2VDdHgsIGFscGhhQ3R4LCBhbHBoYVN3RnJhbWUgfSA9IHRoaXMuX3M7XG4gICAgYmFzZVBrdC5mcmVlKCk7XG4gICAgYWxwaGFQa3QuZnJlZSgpO1xuICAgIGFscGhhU3dGcmFtZS5mcmVlKCk7XG4gICAgLy8gTlZJRElBIGRyaXZlciA1MjAuNTYuMDYrIFVBRiBpbiBsaWJudmN1dmlkIHdoZW4gTlZFTkMgc2Vzc2lvbnMgZnJlZWQgaW4gY3JlYXRpb24gb3JkZXIuXG4gICAgLy8gTElGTyBkZXN0cm95IGF2b2lkcyB0aGUgc2VnZmF1bHQuIFBlciBOVklESUEgZm9ydW0gL3QvMjY5OTc0LlxuICAgIGFscGhhQ3R4LmZyZWVDb250ZXh0KCk7XG4gICAgYmFzZUN0eC5mcmVlQ29udGV4dCgpO1xuICB9XG5cbiAgLy8gRU9GIGZsdXNoOyBFQUdBSU4vRU9GIHJldHVybnMgYXJlIGJlbmlnbiAoYWxyZWFkeS1kcmFpbmluZyBlbmNvZGVyKS5cbiAgcHJpdmF0ZSBhc3luYyBzZW5kRW9mKGN0eDogQ29kZWNDb250ZXh0LCB0YWc6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHJldCA9IGF3YWl0IGN0eC5zZW5kRnJhbWUobnVsbCk7XG4gICAgaWYgKHJldCA8IDAgJiYgcmV0ICE9PSBBVkVSUk9SX0VBR0FJTiAmJiByZXQgIT09IEFWRVJST1JfRU9GKSB7XG4gICAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IocmV0LCBgbnZlbmMuJHt0YWd9LnNlbmRGcmFtZShudWxsKWApO1xuICAgIH1cbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMy8yMS5cblxuaW1wb3J0IHsgQ29kZWMsIHR5cGUgQ29kZWNDb250ZXh0LCBGRm1wZWdFcnJvciwgRnJhbWUsIHR5cGUgUGFja2V0LCB0eXBlIFN0cmVhbSB9IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQgeyB0eXBlIEFWUGl4ZWxGb3JtYXQsIHR5cGUgRkZWaWRlb0VuY29kZXIgfSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcbmltcG9ydCB7IGRyYWluUGFja2V0cywgbWFrZVBhY2tldCwgb3BlblZpZGVvQ3R4IH0gZnJvbSBcIi4vbWlzY1wiO1xuaW1wb3J0IHR5cGUgeyBGb3JtYXRNdXhlciB9IGZyb20gXCIuL211eGVyXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmlkZW9FbmNvZGVyT3B0aW9ucyB7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICBmcHM6IG51bWJlcjtcbiAgY29kZWNOYW1lOiBGRlZpZGVvRW5jb2RlcjtcbiAgY29kZWNUYWc/OiBzdHJpbmc7XG4gIGNvZGVjT3B0czogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgYml0cmF0ZTogbnVtYmVyO1xuICBwaXhlbEZvcm1hdDogQVZQaXhlbEZvcm1hdDtcbiAgbXV4ZXI6IEZvcm1hdE11eGVyO1xufVxuXG5leHBvcnQgY2xhc3MgVmlkZW9FbmNvZGVyIGltcGxlbWVudHMgRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2N0eDogQ29kZWNDb250ZXh0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9wa3Q6IFBhY2tldDtcbiAgcHJpdmF0ZSByZWFkb25seSBfc3RyZWFtOiBTdHJlYW07XG4gIHByaXZhdGUgX3B0cyA9IDBuO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoY3R4OiBDb2RlY0NvbnRleHQsIHBrdDogUGFja2V0LCBzdHJlYW06IFN0cmVhbSkge1xuICAgIHRoaXMuX2N0eCA9IGN0eDtcbiAgICB0aGlzLl9wa3QgPSBwa3Q7XG4gICAgdGhpcy5fc3RyZWFtID0gc3RyZWFtO1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIGNyZWF0ZShvcHRzOiBWaWRlb0VuY29kZXJPcHRpb25zKTogUHJvbWlzZTxWaWRlb0VuY29kZXI+IHtcbiAgICBjb25zdCB7IGNvZGVjTmFtZSwgY29kZWNUYWcsIGNvZGVjT3B0cywgbXV4ZXIsIC4uLnJlc3QgfSA9IG9wdHM7XG5cbiAgICBjb25zdCBjb2RlYyA9IENvZGVjLmZpbmRFbmNvZGVyQnlOYW1lKGNvZGVjTmFtZSk7XG4gICAgaWYgKCFjb2RlYykgdGhyb3cgbmV3IEVycm9yKGBWaWRlbyBlbmNvZGVyIG5vdCBmb3VuZDogJHtjb2RlY05hbWV9YCk7XG5cbiAgICBjb25zdCBjdHggPSBhd2FpdCBvcGVuVmlkZW9DdHgoeyBjb2RlYywgLi4ucmVzdCwgY29kZWNUYWcsIG9wdGlvbnM6IGNvZGVjT3B0cyB9LCBcInZpZGVvQ3R4Lm9wZW4yXCIpO1xuICAgIGNvbnN0IHN0cmVhbSA9IG11eGVyLmFkZFN0cmVhbShjdHgsIGNvZGVjVGFnKTtcbiAgICByZXR1cm4gbmV3IFZpZGVvRW5jb2RlcihjdHgsIG1ha2VQYWNrZXQoKSwgc3RyZWFtKTtcbiAgfVxuXG4gIGFzeW5jIGVuY29kZShmcmFtZTogRnJhbWUsIG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGZyYW1lLnB0cyA9IHRoaXMuX3B0cysrO1xuICAgIGZyYW1lLmR1cmF0aW9uID0gMW47XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IHRoaXMuX2N0eC5zZW5kRnJhbWUoZnJhbWUpLCBcInZpZGVvQ3R4LnNlbmRGcmFtZVwiKTtcbiAgICBhd2FpdCB0aGlzLmRyYWluKG11eGVyKTtcbiAgfVxuXG4gIGFzeW5jIGZsdXNoKG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuX2N0eC5zZW5kRnJhbWUobnVsbCk7XG4gICAgYXdhaXQgdGhpcy5kcmFpbihtdXhlcik7XG4gIH1cblxuICBbU3ltYm9sLmRpc3Bvc2VdKCk6IHZvaWQge1xuICAgIHRoaXMuX3BrdC5mcmVlKCk7XG4gICAgdGhpcy5fY3R4LmZyZWVDb250ZXh0KCk7XG4gIH1cblxuICBwcml2YXRlIGRyYWluKG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBkcmFpblBhY2tldHModGhpcy5fY3R4LCB0aGlzLl9wa3QsIHRoaXMuX3N0cmVhbSwgbXV4ZXIpO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzEyLlxuXG5pbXBvcnQgeyB0eXBlIENvZGVjQ29udGV4dCwgRkZtcGVnRXJyb3IsIEZyYW1lLCB0eXBlIFBhY2tldCwgdHlwZSBTdHJlYW0gfSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHR5cGUgeyBIYXJkd2FyZUNvbnRleHQgfSBmcm9tIFwibm9kZS1hdi9hcGlcIjtcbmltcG9ydCB7IEFWX1BJWF9GTVRfQkdSQSwgQVZDT0xfUkFOR0VfSlBFRyB9IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgZHJhaW5QYWNrZXRzLCBtYWtlUGFja2V0LCBvcGVuVmlkZW9DdHggfSBmcm9tIFwiLi9taXNjXCI7XG5pbXBvcnQgdHlwZSB7IEZvcm1hdE11eGVyIH0gZnJvbSBcIi4vbXV4ZXJcIjtcblxuZXhwb3J0IGludGVyZmFjZSBId1ZpZGVvRW5jb2Rlck9wdGlvbnMge1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgZnBzOiBudW1iZXI7XG4gIGh3OiBIYXJkd2FyZUNvbnRleHQ7XG4gIGJpdHJhdGU6IG51bWJlcjtcbiAgbXV4ZXI6IEZvcm1hdE11eGVyO1xufVxuXG5leHBvcnQgY2xhc3MgVmlkZW9Ub29sYm94RW5jb2RlciBpbXBsZW1lbnRzIERpc3Bvc2FibGUge1xuICBwcml2YXRlIF9jdHg6IENvZGVjQ29udGV4dDtcbiAgcHJpdmF0ZSBfcGt0OiBQYWNrZXQ7XG4gIHByaXZhdGUgX3N0cmVhbTogU3RyZWFtO1xuICBwcml2YXRlIF9wdHMgPSAwbjtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKGN0eDogQ29kZWNDb250ZXh0LCBwa3Q6IFBhY2tldCwgc3RyZWFtOiBTdHJlYW0pIHtcbiAgICB0aGlzLl9jdHggPSBjdHg7XG4gICAgdGhpcy5fcGt0ID0gcGt0O1xuICAgIHRoaXMuX3N0cmVhbSA9IHN0cmVhbTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBjcmVhdGUob3B0czogSHdWaWRlb0VuY29kZXJPcHRpb25zKTogUHJvbWlzZTxWaWRlb1Rvb2xib3hFbmNvZGVyPiB7XG4gICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0LCBmcHMsIGh3LCBiaXRyYXRlLCBtdXhlciB9ID0gb3B0cztcblxuICAgIGNvbnN0IGNvZGVjID0gaHcuZ2V0RW5jb2RlckNvZGVjKFwiaGV2Y1wiKTtcbiAgICBpZiAoIWNvZGVjKSB0aHJvdyBuZXcgRXJyb3IoXCJoZXZjX3ZpZGVvdG9vbGJveCBlbmNvZGVyIG5vdCBmb3VuZFwiKTtcblxuICAgIGNvbnN0IGN0eCA9IGF3YWl0IG9wZW5WaWRlb0N0eChcbiAgICAgIHtcbiAgICAgICAgY29kZWMsXG4gICAgICAgIHdpZHRoLFxuICAgICAgICBoZWlnaHQsXG4gICAgICAgIGZwcyxcbiAgICAgICAgYml0cmF0ZSxcbiAgICAgICAgcGl4ZWxGb3JtYXQ6IEFWX1BJWF9GTVRfQkdSQSxcbiAgICAgICAgY29sb3JSYW5nZTogQVZDT0xfUkFOR0VfSlBFRyxcbiAgICAgICAgY29kZWNUYWc6IFwiaHZjMVwiLFxuICAgICAgICBvcHRpb25zOiB7IGFscGhhX3F1YWxpdHk6IFwiMVwiIH0sXG4gICAgICB9LFxuICAgICAgXCJ2dEVuYy5vcGVuMlwiLFxuICAgICk7XG4gICAgbGV0IHBrdDogUGFja2V0IHwgdW5kZWZpbmVkO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzdHJlYW0gPSBtdXhlci5hZGRTdHJlYW0oY3R4LCBcImh2YzFcIik7XG4gICAgICBwa3QgPSBtYWtlUGFja2V0KCk7XG4gICAgICByZXR1cm4gbmV3IFZpZGVvVG9vbGJveEVuY29kZXIoY3R4LCBwa3QsIHN0cmVhbSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gUGFydGlhbCBjb25zdHJ1Y3Rpb246IGVuY29kZXIgbmV2ZXIgcmV0dXJuZWQsIHNvIFtTeW1ib2wuZGlzcG9zZV0gaXMgdW5yZWFjaGFibGUuXG4gICAgICBwa3Q/LmZyZWUoKTtcbiAgICAgIGN0eC5mcmVlQ29udGV4dCgpO1xuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBlbmNvZGUoYmdyYUZyYW1lOiBGcmFtZSwgbXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYmdyYUZyYW1lLnB0cyA9IHRoaXMuX3B0cysrO1xuICAgIGJncmFGcmFtZS5kdXJhdGlvbiA9IDFuO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCB0aGlzLl9jdHguc2VuZEZyYW1lKGJncmFGcmFtZSksIFwidnRFbmMuc2VuZEZyYW1lXCIpO1xuICAgIGF3YWl0IHRoaXMuZHJhaW4obXV4ZXIpO1xuICB9XG5cbiAgYXN5bmMgZmx1c2gobXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5fY3R4LnNlbmRGcmFtZShudWxsKTtcbiAgICBhd2FpdCB0aGlzLmRyYWluKG11eGVyKTtcbiAgfVxuXG4gIFtTeW1ib2wuZGlzcG9zZV0oKTogdm9pZCB7XG4gICAgdGhpcy5fcGt0LmZyZWUoKTtcbiAgICB0aGlzLl9jdHguZnJlZUNvbnRleHQoKTtcbiAgfVxuXG4gIHByaXZhdGUgZHJhaW4obXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIGRyYWluUGFja2V0cyh0aGlzLl9jdHgsIHRoaXMuX3BrdCwgdGhpcy5fc3RyZWFtLCBtdXhlcik7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMTMuXG5cbmltcG9ydCB7IEhhcmR3YXJlQ29udGV4dCB9IGZyb20gXCJub2RlLWF2L2FwaVwiO1xuaW1wb3J0IHtcbiAgQVZfUElYX0ZNVF9ZVVZBNDIwUCxcbiAgRkZfRU5DT0RFUl9MSUJYMjY1LFxuICBGRl9IV0RFVklDRV9UWVBFX0NVREEsXG4gIEZGX0hXREVWSUNFX1RZUEVfVklERU9UT09MQk9YLFxufSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcblxuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4uL2xvZ2dpbmdcIjtcbmltcG9ydCB7IENvZGVjU3RhdGUgfSBmcm9tIFwiLi9jb2RlY1wiO1xuaW1wb3J0IHR5cGUgeyBGb3JtYXRNdXhlciB9IGZyb20gXCIuL211eGVyXCI7XG5pbXBvcnQgeyBOdmVuY0R1YWxMYXllckVuY29kZXIgfSBmcm9tIFwiLi9oZXZjX2FscGhhL252ZW5jXCI7XG5pbXBvcnQgeyBWaWRlb0VuY29kZXIgfSBmcm9tIFwiLi92aWRlb1wiO1xuaW1wb3J0IHsgVmlkZW9Ub29sYm94RW5jb2RlciB9IGZyb20gXCIuL3ZpZGVvdG9vbGJveFwiO1xuXG5jb25zdCBUQUcgPSBcIltFbmNvZGVyXVwiO1xuXG5leHBvcnQgdHlwZSBId0VuY29kZXIgPSBWaWRlb1Rvb2xib3hFbmNvZGVyIHwgTnZlbmNEdWFsTGF5ZXJFbmNvZGVyO1xuXG5leHBvcnQgaW50ZXJmYWNlIFZpZGVvU2V0dXAge1xuICB2aWRlbz86IFZpZGVvRW5jb2RlcjtcbiAgaHdWaWRlbz86IEh3RW5jb2RlcjtcbiAgY29kZWM/OiBDb2RlY1N0YXRlO1xuICBodz86IEhhcmR3YXJlQ29udGV4dDtcbiAgb3duc0h3OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEh3VmlkZW9GYWN0b3J5T3B0aW9ucyB7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICBmcHM6IG51bWJlcjtcbiAgYml0cmF0ZT86IG51bWJlcjtcbiAgZGlzYWJsZUh3Q29kZWM/OiBib29sZWFuO1xuICBzaGFyZWRIdz86IEhhcmR3YXJlQ29udGV4dDtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUh3VmlkZW9FbmNvZGVyKG9wdHM6IEh3VmlkZW9GYWN0b3J5T3B0aW9ucywgbXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTxWaWRlb1NldHVwPiB7XG4gIGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgZnBzLCBiaXRyYXRlID0gOF8wMDBfMDAwLCBkaXNhYmxlSHdDb2RlYyA9IGZhbHNlLCBzaGFyZWRIdyB9ID0gb3B0cztcbiAgY29uc3QgaHcgPSBzaGFyZWRIdyA/PyAoZGlzYWJsZUh3Q29kZWMgPyB1bmRlZmluZWQgOiAoSGFyZHdhcmVDb250ZXh0LmF1dG8oKSA/PyB1bmRlZmluZWQpKTtcbiAgY29uc3Qgb3duc0h3ID0gIXNoYXJlZEh3ICYmICEhaHc7XG5cbiAgdHJ5IHtcbiAgICBpZiAoaHc/LmRldmljZVR5cGVOYW1lID09PSBGRl9IV0RFVklDRV9UWVBFX1ZJREVPVE9PTEJPWCAmJiBody5nZXRFbmNvZGVyQ29kZWMoXCJoZXZjXCIpKSB7XG4gICAgICBsb2dnZXIuZGVidWcoVEFHLCBcInVzaW5nIFZpZGVvVG9vbGJveCBIRVZDIGFscGhhIGVuY29kZXJcIik7XG4gICAgICBjb25zdCBod1ZpZGVvID0gYXdhaXQgVmlkZW9Ub29sYm94RW5jb2Rlci5jcmVhdGUoeyB3aWR0aCwgaGVpZ2h0LCBmcHMsIGh3LCBiaXRyYXRlLCBtdXhlciB9KTtcbiAgICAgIHJldHVybiB7IGh3VmlkZW8sIGh3LCBvd25zSHcgfTtcbiAgICB9XG4gICAgaWYgKGh3Py5kZXZpY2VUeXBlTmFtZSA9PT0gRkZfSFdERVZJQ0VfVFlQRV9DVURBICYmIGh3LmdldEVuY29kZXJDb2RlYyhcImhldmNcIikpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhUQUcsIFwidXNpbmcgTlZFTkMgZHVhbC1sYXllciBIRVZDIGFscGhhIGVuY29kZXJcIik7XG4gICAgICBjb25zdCBod1ZpZGVvID0gYXdhaXQgTnZlbmNEdWFsTGF5ZXJFbmNvZGVyLmNyZWF0ZSh7IHdpZHRoLCBoZWlnaHQsIGZwcywgaHcsIGJpdHJhdGUsIG11eGVyIH0pO1xuICAgICAgcmV0dXJuIHsgaHdWaWRlbywgaHcsIG93bnNIdyB9O1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIGxvZ2dlci53YXJuKFRBRywgXCJIYXJkd2FyZSBjb2RlYyBzZXNzaW9uIGxpbWl0cyByZWFjaGVkLCB1c2Ugc29mdHdhcmUgZW5jb2RlclwiLCBlKTtcbiAgICBpZiAob3duc0h3KSBodz8uZGlzcG9zZSgpO1xuICB9XG5cbiAgbG9nZ2VyLmRlYnVnKFRBRywgXCJ1c2luZyBzb2Z0d2FyZSBsaWJ4MjY1IEhFVkMgYWxwaGEgZW5jb2RlclwiKTtcbiAgY29uc3QgdmlkZW8gPSBhd2FpdCBWaWRlb0VuY29kZXIuY3JlYXRlKHtcbiAgICB3aWR0aCxcbiAgICBoZWlnaHQsXG4gICAgZnBzLFxuICAgIGNvZGVjTmFtZTogRkZfRU5DT0RFUl9MSUJYMjY1LFxuICAgIGNvZGVjVGFnOiBcImh2YzFcIixcbiAgICBjb2RlY09wdHM6IHsgcHJlc2V0OiBcIm1lZGl1bVwiLCBcIngyNjUtcGFyYW1zXCI6IFwibG9nLWxldmVsPTE6YmZyYW1lcz0zOnBvb2xzPSs6ZnJhbWUtdGhyZWFkcz0wXCIgfSxcbiAgICBiaXRyYXRlLFxuICAgIHBpeGVsRm9ybWF0OiBBVl9QSVhfRk1UX1lVVkE0MjBQLFxuICAgIG11eGVyLFxuICB9KTtcbiAgcmV0dXJuIHsgdmlkZW8sIGNvZGVjOiBhd2FpdCBDb2RlY1N0YXRlLmNyZWF0ZSh3aWR0aCwgaGVpZ2h0KSwgb3duc0h3OiBmYWxzZSB9O1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMy8yMS5cblxuaW1wb3J0IHsgQ29kZWNDb250ZXh0LCBGRm1wZWdFcnJvciwgRm9ybWF0Q29udGV4dCwgUGFja2V0IH0gZnJvbSBcIm5vZGUtYXZcIjtcblxuZXhwb3J0IGNsYXNzIEZvcm1hdE11eGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfY3R4OiBGb3JtYXRDb250ZXh0O1xuICBwcml2YXRlIF9vcGVuZWQgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihvdXRQYXRoOiBzdHJpbmcsIGZvcm1hdE5hbWU/OiBzdHJpbmcpIHtcbiAgICB0aGlzLl9jdHggPSBuZXcgRm9ybWF0Q29udGV4dCgpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcih0aGlzLl9jdHguYWxsb2NPdXRwdXRDb250ZXh0MihudWxsLCBmb3JtYXROYW1lID8/IG51bGwsIG91dFBhdGgpLCBcImFsbG9jT3V0cHV0Q29udGV4dDJcIik7XG4gIH1cblxuICBhZGRTdHJlYW0oY29kZWNDdHg6IENvZGVjQ29udGV4dCwgY29kZWNUYWc/OiBzdHJpbmcpOiBSZXR1cm5UeXBlPEZvcm1hdENvbnRleHRbXCJuZXdTdHJlYW1cIl0+IHtcbiAgICBjb25zdCBzdHJlYW0gPSB0aGlzLl9jdHgubmV3U3RyZWFtKG51bGwpO1xuICAgIHN0cmVhbS50aW1lQmFzZSA9IGNvZGVjQ3R4LnRpbWVCYXNlO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihzdHJlYW0uY29kZWNwYXIuZnJvbUNvbnRleHQoY29kZWNDdHgpLCBcImNvZGVjcGFyLmZyb21Db250ZXh0XCIpO1xuICAgIGlmIChjb2RlY1RhZykgc3RyZWFtLmNvZGVjcGFyLmNvZGVjVGFnID0gY29kZWNUYWc7XG4gICAgcmV0dXJuIHN0cmVhbTtcbiAgfVxuXG4gIGFzeW5jIG9wZW4oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX29wZW5lZCkgcmV0dXJuO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCB0aGlzLl9jdHgub3Blbk91dHB1dCgpLCBcIm9wZW5PdXRwdXRcIik7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IHRoaXMuX2N0eC53cml0ZUhlYWRlcihudWxsKSwgXCJ3cml0ZUhlYWRlclwiKTtcbiAgICB0aGlzLl9vcGVuZWQgPSB0cnVlO1xuICB9XG5cbiAgYXN5bmMgd3JpdGVQYWNrZXQocGt0OiBQYWNrZXQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgdGhpcy5fY3R4LmludGVybGVhdmVkV3JpdGVGcmFtZShwa3QpLCBcImludGVybGVhdmVkV3JpdGVGcmFtZVwiKTtcbiAgfVxuXG4gIGFzeW5jIFtTeW1ib2wuYXN5bmNEaXNwb3NlXSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuX29wZW5lZCkgcmV0dXJuO1xuICAgIHRoaXMuX29wZW5lZCA9IGZhbHNlO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLl9jdHgud3JpdGVUcmFpbGVyKCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIC8vIEEgZmFpbGVkL3RydW5jYXRlZCB0cmFpbGVyIHdyaXRlIG11c3Qgbm90IGxlYWsgdGhlIEZEICsgbmF0aXZlIGNvbnRleHQuXG4gICAgICBhd2FpdCB0aGlzLl9jdHguY2xvc2VPdXRwdXQoKTtcbiAgICAgIGF3YWl0IHRoaXMuX2N0eFtTeW1ib2wuYXN5bmNEaXNwb3NlXSgpO1xuICAgIH1cbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8yNC5cblxuaW1wb3J0IHsgb2sgfSBmcm9tIFwiYXNzZXJ0XCI7XG5pbXBvcnQgeyBGRm1wZWdFcnJvciwgdHlwZSBGcmFtZSB9IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQgdHlwZSB7IEhhcmR3YXJlQ29udGV4dCB9IGZyb20gXCJub2RlLWF2L2FwaVwiO1xuaW1wb3J0IHtcbiAgQVZfUElYX0ZNVF9ZVVZBNDIwUCxcbiAgQVZfU0FNUExFX0ZNVF9GTFQsXG4gIEFWX1NBTVBMRV9GTVRfRkxUUCxcbiAgRkZfRU5DT0RFUl9BQUMsXG4gIEZGX0VOQ09ERVJfTElCT1BVUyxcbiAgdHlwZSBGRlZpZGVvRW5jb2Rlcixcbn0gZnJvbSBcIm5vZGUtYXYvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBBdWRpb0VuY29kZXIgfSBmcm9tIFwiLi9hdWRpb1wiO1xuaW1wb3J0IHsgQ29kZWNTdGF0ZSB9IGZyb20gXCIuL2NvZGVjXCI7XG5pbXBvcnQgeyBjcmVhdGVId1ZpZGVvRW5jb2RlciwgdHlwZSBId0VuY29kZXIsIHR5cGUgVmlkZW9TZXR1cCB9IGZyb20gXCIuL2ZhY3RvcnlcIjtcbmltcG9ydCB7IEZvcm1hdE11eGVyIH0gZnJvbSBcIi4vbXV4ZXJcIjtcbmltcG9ydCB7IFZpZGVvRW5jb2RlciB9IGZyb20gXCIuL3ZpZGVvXCI7XG5cbi8vIG5vZGUtYXYgNS4yLjMgY29uc3RhbnQgaXMgd3Jvbmc7IGZmbXBlZyByZWdpc3RlcnMgd2l0aCBkYXNoLlxuY29uc3QgRkZfRU5DT0RFUl9MSUJWUFhfVlA5ID0gXCJsaWJ2cHgtdnA5XCIgYXMgRkZWaWRlb0VuY29kZXI7XG5cbmV4cG9ydCB0eXBlIFNpbmtLaW5kID0gXCJtcDRcIiB8IFwid2VibVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNpbmtPcHRpb25zIHtcbiAgb3V0RmlsZTogc3RyaW5nO1xuICBraW5kOiBTaW5rS2luZDtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIGZwczogbnVtYmVyO1xuICB3aXRoQXVkaW86IGJvb2xlYW47XG4gIGRpc2FibGVId0NvZGVjOiBib29sZWFuO1xuICBzaGFyZWRIdz86IEhhcmR3YXJlQ29udGV4dDtcbn1cblxuaW50ZXJmYWNlIFNpbmtTdGF0ZSB7XG4gIG11eGVyOiBGb3JtYXRNdXhlcjtcbiAgdmlkZW8/OiBWaWRlb0VuY29kZXI7XG4gIGh3VmlkZW8/OiBId0VuY29kZXI7XG4gIGF1ZGlvPzogQXVkaW9FbmNvZGVyO1xuICBjb2RlYz86IENvZGVjU3RhdGU7XG4gIG93bnNIdzogYm9vbGVhbjtcbiAgaHc/OiBIYXJkd2FyZUNvbnRleHQ7XG4gIG9wdHM6IFNpbmtPcHRpb25zO1xufVxuXG5leHBvcnQgY2xhc3MgT3V0cHV0U2luayBpbXBsZW1lbnRzIEFzeW5jRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgX3M6IFNpbmtTdGF0ZTtcbiAgcHJpdmF0ZSBfZGlzcG9zZWQgPSBmYWxzZTtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHM6IFNpbmtTdGF0ZSkge1xuICAgIHRoaXMuX3MgPSBzO1xuICB9XG5cbiAgc3RhdGljIGtpbmRGcm9tUGF0aChwYXRoOiBzdHJpbmcpOiBTaW5rS2luZCB7XG4gICAgY29uc3QgbG93ZXIgPSBwYXRoLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKGxvd2VyLmVuZHNXaXRoKFwiLndlYm1cIikpIHJldHVybiBcIndlYm1cIjtcbiAgICBpZiAobG93ZXIuZW5kc1dpdGgoXCIubXA0XCIpIHx8IGxvd2VyLmVuZHNXaXRoKFwiLm1vdlwiKSkgcmV0dXJuIFwibXA0XCI7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBvdXRwdXQgZXh0ZW5zaW9uOiAke3BhdGh9YCk7XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgY3JlYXRlKG9wdHM6IFNpbmtPcHRpb25zKTogUHJvbWlzZTxPdXRwdXRTaW5rPiB7XG4gICAgY29uc3QgbXV4ZXIgPSBuZXcgRm9ybWF0TXV4ZXIob3B0cy5vdXRGaWxlKTtcbiAgICBjb25zdCB2aWRlbyA9IG9wdHMua2luZCA9PT0gXCJtcDRcIiA/IGF3YWl0IHRoaXMubXA0VmlkZW8ob3B0cywgbXV4ZXIpIDogYXdhaXQgdGhpcy53ZWJtVmlkZW8ob3B0cywgbXV4ZXIpO1xuICAgIGNvbnN0IGF1ZGlvID0gb3B0cy53aXRoQXVkaW8gPyBhd2FpdCB0aGlzLmF1ZGlvRm9yKG9wdHMsIG11eGVyKSA6IHVuZGVmaW5lZDtcbiAgICBhd2FpdCBtdXhlci5vcGVuKCk7XG4gICAgcmV0dXJuIG5ldyBPdXRwdXRTaW5rKHsgbXV4ZXIsIC4uLnZpZGVvLCBhdWRpbywgb3B0cyB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIG1wNFZpZGVvKG9wdHM6IFNpbmtPcHRpb25zLCBtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPFZpZGVvU2V0dXA+IHtcbiAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQsIGZwcywgZGlzYWJsZUh3Q29kZWMsIHNoYXJlZEh3IH0gPSBvcHRzO1xuICAgIHJldHVybiBjcmVhdGVId1ZpZGVvRW5jb2Rlcih7IHdpZHRoLCBoZWlnaHQsIGZwcywgZGlzYWJsZUh3Q29kZWMsIHNoYXJlZEh3IH0sIG11eGVyKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGFzeW5jIHdlYm1WaWRlbyhvcHRzOiBTaW5rT3B0aW9ucywgbXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTxWaWRlb1NldHVwPiB7XG4gICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0LCBmcHMgfSA9IG9wdHM7XG4gICAgY29uc3QgdmlkZW8gPSBhd2FpdCBWaWRlb0VuY29kZXIuY3JlYXRlKHtcbiAgICAgIHdpZHRoLFxuICAgICAgaGVpZ2h0LFxuICAgICAgZnBzLFxuICAgICAgY29kZWNOYW1lOiBGRl9FTkNPREVSX0xJQlZQWF9WUDksXG4gICAgICBjb2RlY09wdHM6IHsgZGVhZGxpbmU6IFwicmVhbHRpbWVcIiwgXCJjcHUtdXNlZFwiOiBcIjhcIiwgXCJyb3ctbXRcIjogXCIxXCIsIHRocmVhZHM6IFwiMlwiIH0sXG4gICAgICBiaXRyYXRlOiA0XzAwMF8wMDAsXG4gICAgICBwaXhlbEZvcm1hdDogQVZfUElYX0ZNVF9ZVVZBNDIwUCxcbiAgICAgIG11eGVyLFxuICAgIH0pO1xuICAgIHJldHVybiB7IHZpZGVvLCBjb2RlYzogYXdhaXQgQ29kZWNTdGF0ZS5jcmVhdGUod2lkdGgsIGhlaWdodCksIG93bnNIdzogZmFsc2UgfTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGF1ZGlvRm9yKG9wdHM6IFNpbmtPcHRpb25zLCBtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPEF1ZGlvRW5jb2Rlcj4ge1xuICAgIC8vIE9wdXMgcmVqZWN0cyA0NC4xay5cbiAgICBjb25zdCBjZmcgPVxuICAgICAgb3B0cy5raW5kID09PSBcIm1wNFwiXG4gICAgICAgID8geyBvdXRTYW1wbGVSYXRlOiA0NF8xMDAsIG91dFNhbXBsZUZtdDogQVZfU0FNUExFX0ZNVF9GTFRQLCBjb2RlY05hbWU6IEZGX0VOQ09ERVJfQUFDIH1cbiAgICAgICAgOiB7IG91dFNhbXBsZVJhdGU6IDQ4XzAwMCwgb3V0U2FtcGxlRm10OiBBVl9TQU1QTEVfRk1UX0ZMVCwgY29kZWNOYW1lOiBGRl9FTkNPREVSX0xJQk9QVVMgfTtcbiAgICByZXR1cm4gQXVkaW9FbmNvZGVyLmNyZWF0ZSh7IC4uLmNmZywgZ2xvYmFsSGVhZGVyOiB0cnVlLCBiaXRyYXRlOiAxMjhfMDAwLCBtdXhlciB9KTtcbiAgfVxuXG4gIHNldElucHV0UmF0ZShzYW1wbGVSYXRlOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9zLmF1ZGlvPy5zZXRJbnB1dFJhdGUoc2FtcGxlUmF0ZSk7XG4gIH1cblxuICBhc3luYyBlbmNvZGVCR1JBKGJncmFGcmFtZTogRnJhbWUpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IGh3VmlkZW8sIG11eGVyIH0gPSB0aGlzLl9zO1xuICAgIGlmIChod1ZpZGVvKSByZXR1cm4gaHdWaWRlby5lbmNvZGUoYmdyYUZyYW1lLCBtdXhlcik7XG4gICAgcmV0dXJuIHRoaXMuc3dFbmNvZGUoYmdyYUZyYW1lKTtcbiAgfVxuXG4gIGFzeW5jIGVuY29kZURlY29kZWRGcmFtZShzcmM6IEZyYW1lKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyBod1ZpZGVvLCBtdXhlciB9ID0gdGhpcy5fcztcbiAgICBpZiAoaHdWaWRlbykgcmV0dXJuIGh3VmlkZW8uZW5jb2RlKHNyYywgbXV4ZXIpO1xuICAgIHJldHVybiB0aGlzLnN3RW5jb2RlKHNyYyk7XG4gIH1cblxuICBhc3luYyBlbmNvZGVBdWRpbyhwY206IEJ1ZmZlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuX3MuYXVkaW8/LmVuY29kZShwY20sIHRoaXMuX3MubXV4ZXIpO1xuICB9XG5cbiAgYXN5bmMgZmx1c2goKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyBod1ZpZGVvLCB2aWRlbywgYXVkaW8sIG11eGVyIH0gPSB0aGlzLl9zO1xuICAgIGF3YWl0IGF1ZGlvPy5mbHVzaChtdXhlcik7XG4gICAgaWYgKGh3VmlkZW8pIGF3YWl0IGh3VmlkZW8uZmx1c2gobXV4ZXIpO1xuICAgIGVsc2UgYXdhaXQgdmlkZW8hLmZsdXNoKG11eGVyKTtcbiAgfVxuXG4gIGFzeW5jIFtTeW1ib2wuYXN5bmNEaXNwb3NlXSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fZGlzcG9zZWQpIHJldHVybjtcbiAgICB0aGlzLl9kaXNwb3NlZCA9IHRydWU7XG4gICAgY29uc3QgeyBtdXhlciwgdmlkZW8sIGh3VmlkZW8sIGF1ZGlvLCBjb2RlYywgaHcsIG93bnNIdyB9ID0gdGhpcy5fcztcbiAgICB2aWRlbz8uW1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgIGh3VmlkZW8/LltTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICBhdWRpbz8uW1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgIGNvZGVjPy5bU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgYXdhaXQgbXV4ZXJbU3ltYm9sLmFzeW5jRGlzcG9zZV0oKTtcbiAgICBpZiAob3duc0h3KSBodz8uZGlzcG9zZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzd0VuY29kZShzcmM6IEZyYW1lKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyB2aWRlbywgY29kZWMsIG11eGVyIH0gPSB0aGlzLl9zO1xuICAgIG9rKGNvZGVjPy5zd3MsIFwic3dzIG5vdCBpbml0aWFsaXplZFwiKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoY29kZWMuZHN0Lm1ha2VXcml0YWJsZSgpLCBcInNpbmtEc3QubWFrZVdyaXRhYmxlXCIpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCBjb2RlYy5zd3Muc2NhbGVGcmFtZShjb2RlYy5kc3QsIHNyYyksIFwic2lua1N3cy5zY2FsZUZyYW1lXCIpO1xuICAgIGF3YWl0IHZpZGVvIS5lbmNvZGUoY29kZWMuZHN0LCBtdXhlcik7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMDEuXG5cbmltcG9ydCB7IEZGbXBlZ0Vycm9yLCBGcmFtZSB9IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQgeyBIYXJkd2FyZUNvbnRleHQgfSBmcm9tIFwibm9kZS1hdi9hcGlcIjtcbmltcG9ydCB7IEFWX1BJWF9GTVRfQkdSQSwgRkZfSFdERVZJQ0VfVFlQRV9DVURBLCBGRl9IV0RFVklDRV9UWVBFX1ZJREVPVE9PTEJPWCB9IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuXG5pbXBvcnQgeyBDb25jdXJyZW5jeUxpbWl0ZXIgfSBmcm9tIFwiLi4vbGltaXRlclwiO1xuaW1wb3J0IHsgQ29kZWNTdGF0ZSB9IGZyb20gXCIuL2NvZGVjXCI7XG5pbXBvcnQgeyBtYWtlRnJhbWUgfSBmcm9tIFwiLi9taXNjXCI7XG5pbXBvcnQgeyBPdXRwdXRTaW5rIH0gZnJvbSBcIi4vc2lua1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEVuY29kZXJQaXBlbGluZU9wdGlvbnMge1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgZnBzOiBudW1iZXI7XG4gIG91dEZpbGU6IHN0cmluZztcbiAgd2l0aEF1ZGlvPzogYm9vbGVhbjtcbiAgZGlzYWJsZUh3Q29kZWM/OiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgUGlwZWxpbmVTdGF0ZSB7XG4gIHNpbmtzOiBPdXRwdXRTaW5rW107XG4gIHNoYXJlZEh3PzogSGFyZHdhcmVDb250ZXh0O1xuICBsaW1pdGVyOiBDb25jdXJyZW5jeUxpbWl0ZXI7XG4gIHBuZ0NvZGVjPzogQ29kZWNTdGF0ZTtcbiAgb3V0RmlsZXM6IHN0cmluZ1tdO1xuICBvcHRzOiBFbmNvZGVyUGlwZWxpbmVPcHRpb25zO1xufVxuXG5leHBvcnQgY2xhc3MgRW5jb2RlclBpcGVsaW5lIHtcbiAgcHJpdmF0ZSBfczogUGlwZWxpbmVTdGF0ZTtcbiAgcHJpdmF0ZSBfZGlzcG9zZWQgPSBmYWxzZTtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHM6IFBpcGVsaW5lU3RhdGUpIHtcbiAgICB0aGlzLl9zID0gcztcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBjcmVhdGUob3B0czogRW5jb2RlclBpcGVsaW5lT3B0aW9ucyk6IFByb21pc2U8RW5jb2RlclBpcGVsaW5lPiB7XG4gICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0LCBmcHMsIG91dEZpbGUsIHdpdGhBdWRpbyA9IGZhbHNlLCBkaXNhYmxlSHdDb2RlYyA9IGZhbHNlIH0gPSBvcHRzO1xuICAgIGNvbnN0IG91dEZpbGVzID0gb3V0RmlsZVxuICAgICAgLnNwbGl0KFwiLFwiKVxuICAgICAgLm1hcCgocCkgPT4gcC50cmltKCkpXG4gICAgICAuZmlsdGVyKEJvb2xlYW4pO1xuICAgIGlmIChvdXRGaWxlcy5sZW5ndGggPT09IDApIHRocm93IG5ldyBFcnJvcihcIm91dEZpbGUgbXVzdCBjb250YWluIGF0IGxlYXN0IG9uZSBwYXRoXCIpO1xuXG4gICAgY29uc3Qga2luZHMgPSBvdXRGaWxlcy5tYXAoKHApID0+IE91dHB1dFNpbmsua2luZEZyb21QYXRoKHApKTtcbiAgICBjb25zdCBuZWVkc01wNEh3ID0gIWRpc2FibGVId0NvZGVjICYmIGtpbmRzLmluY2x1ZGVzKFwibXA0XCIpO1xuICAgIGNvbnN0IHNoYXJlZEh3ID0gbmVlZHNNcDRIdyA/IChIYXJkd2FyZUNvbnRleHQuYXV0bygpID8/IHVuZGVmaW5lZCkgOiB1bmRlZmluZWQ7XG4gICAgY29uc3QgaXNId0FscGhhQ2FwYWJsZSA9XG4gICAgICBzaGFyZWRIdz8uZGV2aWNlVHlwZU5hbWUgPT09IEZGX0hXREVWSUNFX1RZUEVfVklERU9UT09MQk9YIHx8IHNoYXJlZEh3Py5kZXZpY2VUeXBlTmFtZSA9PT0gRkZfSFdERVZJQ0VfVFlQRV9DVURBO1xuXG4gICAgY29uc3Qgc2lua3M6IE91dHB1dFNpbmtbXSA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3V0RmlsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHNpbmsgPSBhd2FpdCBPdXRwdXRTaW5rLmNyZWF0ZSh7XG4gICAgICAgIG91dEZpbGU6IG91dEZpbGVzW2ldISxcbiAgICAgICAga2luZDoga2luZHNbaV0hLFxuICAgICAgICB3aWR0aCxcbiAgICAgICAgaGVpZ2h0LFxuICAgICAgICBmcHMsXG4gICAgICAgIHdpdGhBdWRpbyxcbiAgICAgICAgZGlzYWJsZUh3Q29kZWMsXG4gICAgICAgIHNoYXJlZEh3OiBraW5kc1tpXSA9PT0gXCJtcDRcIiAmJiBpc0h3QWxwaGFDYXBhYmxlID8gc2hhcmVkSHcgOiB1bmRlZmluZWQsXG4gICAgICB9KTtcbiAgICAgIHNpbmtzLnB1c2goc2luayk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBFbmNvZGVyUGlwZWxpbmUoeyBzaW5rcywgc2hhcmVkSHcsIGxpbWl0ZXI6IG5ldyBDb25jdXJyZW5jeUxpbWl0ZXIoMSksIG91dEZpbGVzLCBvcHRzIH0pO1xuICB9XG5cbiAgc2V0dXBBdWRpbyhzYW1wbGVSYXRlOiBudW1iZXIpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IHNpbmsgb2YgdGhpcy5fcy5zaW5rcykgc2luay5zZXRJbnB1dFJhdGUoc2FtcGxlUmF0ZSk7XG4gIH1cblxuICBhc3luYyBlbmNvZGVCR1JBKGlucHV0OiBCdWZmZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLl9zLmxpbWl0ZXIuc2NoZWR1bGUoYXN5bmMgKCkgPT4ge1xuICAgICAgdXNpbmcgZnJhbWUgPSB0aGlzLmJncmFGcmFtZShpbnB1dCk7XG4gICAgICBhd2FpdCBQcm9taXNlLmFsbCh0aGlzLl9zLnNpbmtzLm1hcCgoc2luaykgPT4gc2luay5lbmNvZGVCR1JBKGZyYW1lKSkpO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZW5jb2RlUE5HKHBuZ0RhdGE6IEJ1ZmZlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuX3MubGltaXRlci5zY2hlZHVsZShhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IHRoaXMuX3Mub3B0cztcbiAgICAgIHRoaXMuX3MucG5nQ29kZWMgPz89IGF3YWl0IENvZGVjU3RhdGUuY3JlYXRlKHdpZHRoLCBoZWlnaHQpO1xuICAgICAgY29uc3Qgc3JjID0gYXdhaXQgdGhpcy5fcy5wbmdDb2RlYy5kZWNvZGVQTkcocG5nRGF0YSk7XG4gICAgICBmb3IgKGNvbnN0IHNpbmsgb2YgdGhpcy5fcy5zaW5rcykgYXdhaXQgc2luay5lbmNvZGVEZWNvZGVkRnJhbWUoc3JjKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGVuY29kZUF1ZGlvKHBjbTogQnVmZmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5fcy5saW1pdGVyLnNjaGVkdWxlKGFzeW5jICgpID0+IHtcbiAgICAgIGZvciAoY29uc3Qgc2luayBvZiB0aGlzLl9zLnNpbmtzKSBhd2FpdCBzaW5rLmVuY29kZUF1ZGlvKHBjbSk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBmaW5pc2goKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLl9zLmxpbWl0ZXIuZHJhaW4oKTtcbiAgICAgIGZvciAoY29uc3Qgc2luayBvZiB0aGlzLl9zLnNpbmtzKSBhd2FpdCBzaW5rLmZsdXNoKCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGF3YWl0IHRoaXMuZnJlZSgpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fcy5vdXRGaWxlcztcbiAgfVxuXG4gIGFzeW5jIFtTeW1ib2wuYXN5bmNEaXNwb3NlXSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fZGlzcG9zZWQpIHJldHVybjtcbiAgICBhd2FpdCB0aGlzLl9zLmxpbWl0ZXIuZHJhaW4oKTtcbiAgICBhd2FpdCB0aGlzLmZyZWUoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZnJlZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fZGlzcG9zZWQpIHJldHVybjtcbiAgICB0aGlzLl9kaXNwb3NlZCA9IHRydWU7XG4gICAgZm9yIChjb25zdCBzaW5rIG9mIHRoaXMuX3Muc2lua3MpIGF3YWl0IHNpbmtbU3ltYm9sLmFzeW5jRGlzcG9zZV0oKTtcbiAgICB0aGlzLl9zLnBuZ0NvZGVjPy5bU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgdGhpcy5fcy5zaGFyZWRIdz8uZGlzcG9zZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBiZ3JhRnJhbWUoaW5wdXQ6IEJ1ZmZlcik6IEZyYW1lIHtcbiAgICBjb25zdCBmcmFtZSA9IG1ha2VGcmFtZSh0aGlzLl9zLm9wdHMud2lkdGgsIHRoaXMuX3Mub3B0cy5oZWlnaHQsIEFWX1BJWF9GTVRfQkdSQSk7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGZyYW1lLmZyb21CdWZmZXIoaW5wdXQpLCBcImJncmFGcmFtZS5mcm9tQnVmZmVyXCIpO1xuICAgIHJldHVybiBmcmFtZTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMy8yMy5cblxuLyoqXG4gKiBGcmFtZSBkcm9wIHF1YWxpdHkgc2NvcmUgKDAgPSBwZXJmZWN0LCAxID0gd29yc3QpLlxuICpcbiAqIENvbWJpbmVzIHR3byBkaW1lbnNpb25zOlxuICogLSBHbG9iYWw6IG92ZXJhbGwgZHJvcCByYXRlIGFjcm9zcyB0aGUgdGltZWxpbmVcbiAqIC0gTG9jYWw6IHBlcmNlcHR1YWwgc2V2ZXJpdHkgb2YgY29uc2VjdXRpdmUgZHJvcHMgKGJ1cnN0cylcbiAqXG4gKiBVc2VzIGNvbXBsZW1lbnRhcnkgbXVsdGlwbGljYXRpb246IHNjb3JlID0gMSAtICgxLWcpKDEtbClcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGcmFtZURyb3BTY29yZSB7XG4gIGdsb2JhbDogbnVtYmVyO1xuICBsb2NhbDogbnVtYmVyO1xuICBqYW5rOiBudW1iZXI7XG4gIGV4cGVjdGVkOiBudW1iZXI7XG4gIGFjdHVhbDogbnVtYmVyO1xuICBtYXhCdXJzdDogbnVtYmVyO1xufVxuXG5leHBvcnQgY2xhc3MgRnJhbWVEcm9wU3RhdHMge1xuICBwcml2YXRlIHJlYWRvbmx5IF9mcHM6IG51bWJlcjtcbiAgcHJpdmF0ZSBfYWN0dWFsID0gMDtcbiAgcHJpdmF0ZSBfY3VycmVudEJ1cnN0ID0gMDtcbiAgcHJpdmF0ZSBfYnVyc3RzOiBudW1iZXJbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKGZwczogbnVtYmVyKSB7XG4gICAgdGhpcy5fZnBzID0gZnBzO1xuICB9XG5cbiAgLyoqIENhbGwgd2hlbiBhIGZyYW1lIGlzIGFjdHVhbGx5IHdyaXR0ZW4gdG8gdGhlIGVuY29kZXIuICovXG4gIHdyb3RlKGNvdW50ID0gMSk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9jdXJyZW50QnVyc3QgPiAwKSB7XG4gICAgICB0aGlzLl9idXJzdHMucHVzaCh0aGlzLl9jdXJyZW50QnVyc3QpO1xuICAgICAgdGhpcy5fY3VycmVudEJ1cnN0ID0gMDtcbiAgICB9XG4gICAgdGhpcy5fYWN0dWFsICs9IGNvdW50O1xuICB9XG5cbiAgLyoqIENhbGwgd2hlbiBhIGZyYW1lIGlzIGRyb3BwZWQuICovXG4gIGRyb3BwZWQoY291bnQgPSAxKTogdm9pZCB7XG4gICAgdGhpcy5fY3VycmVudEJ1cnN0ICs9IGNvdW50O1xuICB9XG5cbiAgLyoqIEZpbmFsaXplIGFuZCByZXR1cm4gdGhlIHNjb3JlLiAqL1xuICBmaW5hbGl6ZSgpOiBGcmFtZURyb3BTY29yZSB7XG4gICAgaWYgKHRoaXMuX2N1cnJlbnRCdXJzdCA+IDApIHtcbiAgICAgIHRoaXMuX2J1cnN0cy5wdXNoKHRoaXMuX2N1cnJlbnRCdXJzdCk7XG4gICAgICB0aGlzLl9jdXJyZW50QnVyc3QgPSAwO1xuICAgIH1cblxuICAgIGxldCB0b3RhbERyb3BwZWQgPSAwO1xuICAgIGxldCBsb2NhbFN1bSA9IDA7XG4gICAgbGV0IG1heEJ1cnN0ID0gMDtcbiAgICBmb3IgKGNvbnN0IGJ1cnN0IG9mIHRoaXMuX2J1cnN0cykge1xuICAgICAgdG90YWxEcm9wcGVkICs9IGJ1cnN0O1xuICAgICAgbWF4QnVyc3QgPSBNYXRoLm1heChtYXhCdXJzdCwgYnVyc3QpO1xuICAgICAgY29uc3QgcGVyY2VwdGlibGUgPSBNYXRoLm1heCgwLCBidXJzdCAtIDEpO1xuICAgICAgbG9jYWxTdW0gKz0gKHBlcmNlcHRpYmxlIC8gdGhpcy5fZnBzKSAqKiAyO1xuICAgIH1cblxuICAgIGNvbnN0IGV4cGVjdGVkID0gdGhpcy5fYWN0dWFsICsgdG90YWxEcm9wcGVkO1xuICAgIGNvbnN0IGcgPSBleHBlY3RlZCA+IDAgPyB0b3RhbERyb3BwZWQgLyBleHBlY3RlZCA6IDA7XG4gICAgY29uc3QgbCA9IE1hdGgubWluKDEsIGxvY2FsU3VtKTtcbiAgICBjb25zdCBzY29yZSA9IDEgLSAoMSAtIGcpICogKDEgLSBsKTtcblxuICAgIHJldHVybiB7IGdsb2JhbDogZywgbG9jYWw6IGwsIGphbms6IHNjb3JlLCBleHBlY3RlZCwgYWN0dWFsOiB0aGlzLl9hY3R1YWwsIG1heEJ1cnN0IH07XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDYuXG5cbmltcG9ydCB0eXBlIHsgTmF0aXZlSW1hZ2UsIFNpemUgfSBmcm9tIFwiZWxlY3Ryb25cIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzRW1wdHkoaW1hZ2U6IE5hdGl2ZUltYWdlKSB7XG4gIGNvbnN0IHNpemUgPSBpbWFnZS5nZXRTaXplKCk7XG4gIGlmIChzaXplLndpZHRoID09PSAwIHx8IHNpemUuaGVpZ2h0ID09PSAwKSByZXR1cm4gdHJ1ZTtcbiAgcmV0dXJuIGltYWdlLmlzRW1wdHkoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNpemVFcXVhbHMoYTogU2l6ZSwgYjogU2l6ZSkge1xuICByZXR1cm4gYS53aWR0aCA9PT0gYi53aWR0aCAmJiBhLmhlaWdodCA9PT0gYi5oZWlnaHQ7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAzLzAyLlxuXG5pbXBvcnQgeyB0eXBlIFdlYkNvbnRlbnRzIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgdHlwZSB7IEVuY29kZXJQaXBlbGluZSB9IGZyb20gXCIuLi9iYXNlL2VuY29kZXIvcGlwZWxpbmVcIjtcblxuZXhwb3J0IGNvbnN0IEFVRElPX01FVEFfQ0hBTk5FTCA9IFwiYXVkaW8tbWV0YVwiO1xuZXhwb3J0IGNvbnN0IEFVRElPX0NIVU5LX0NIQU5ORUwgPSBcImF1ZGlvLWNodW5rXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXVkaW9MaXN0ZW5lck9wdGlvbnMge1xuICB3YzogV2ViQ29udGVudHM7XG4gIGVuY29kZXI6IEVuY29kZXJQaXBlbGluZTtcbiAgZ2V0VmlkZW9UaW1lTXM6ICgpID0+IG51bWJlcjtcbiAgb25FcnJvcjogKGVycm9yOiBFcnJvcikgPT4gdm9pZDtcbn1cblxuZXhwb3J0IHR5cGUgQXVkaW9EaXNwb3NhbCA9ICgpID0+IHZvaWQ7XG5cbmV4cG9ydCBmdW5jdGlvbiBhdHRhY2hBdWRpb0xpc3RlbmVycyh7IHdjLCBlbmNvZGVyLCBnZXRWaWRlb1RpbWVNcywgb25FcnJvciB9OiBBdWRpb0xpc3RlbmVyT3B0aW9ucyk6IEF1ZGlvRGlzcG9zYWwge1xuICBjb25zdCBvbk1ldGEgPSBhc3luYyAoX2U6IHVua25vd24sIGRhdGE6IHsgc2FtcGxlUmF0ZTogbnVtYmVyIH0pID0+IHtcbiAgICBjb25zdCBzYW1wbGVSYXRlID0gZGF0YS5zYW1wbGVSYXRlO1xuICAgIGNvbnN0IHN0YXJ0TXMgPSBnZXRWaWRlb1RpbWVNcygpO1xuICAgIGVuY29kZXIuc2V0dXBBdWRpbyhzYW1wbGVSYXRlKTtcbiAgICBjb25zdCBzaWxlbmNlU2FtcGxlcyA9IE1hdGguY2VpbCgoc3RhcnRNcyAqIHNhbXBsZVJhdGUpIC8gMTAwMCk7XG4gICAgaWYgKHNpbGVuY2VTYW1wbGVzIDw9IDApIHJldHVybjtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgZW5jb2Rlci5lbmNvZGVBdWRpbyhCdWZmZXIuYWxsb2Moc2lsZW5jZVNhbXBsZXMgKiAyICogNCkpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBvbkVycm9yKGVycm9yIGFzIEVycm9yKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3Qgb25DaHVuayA9IGFzeW5jIChfZTogdW5rbm93biwgYnVmZmVyOiBCdWZmZXIpID0+IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgZW5jb2Rlci5lbmNvZGVBdWRpbyhidWZmZXIpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBvbkVycm9yKGVycm9yIGFzIEVycm9yKTtcbiAgICB9XG4gIH07XG5cbiAgd2MuaXBjLm9uKEFVRElPX01FVEFfQ0hBTk5FTCwgb25NZXRhKTtcbiAgd2MuaXBjLm9uKEFVRElPX0NIVU5LX0NIQU5ORUwsIG9uQ2h1bmspO1xuXG4gIHJldHVybiAoKSA9PiB7XG4gICAgd2MuaXBjLnJlbW92ZUxpc3RlbmVyKEFVRElPX01FVEFfQ0hBTk5FTCwgb25NZXRhKTtcbiAgICB3Yy5pcGMucmVtb3ZlTGlzdGVuZXIoQVVESU9fQ0hVTktfQ0hBTk5FTCwgb25DaHVuayk7XG4gIH07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA1LlxuXG5pbXBvcnQgeyBzZXRUaW1lb3V0IH0gZnJvbSBcInRpbWVycy9wcm9taXNlc1wiO1xuaW1wb3J0IHsgc2xlZXAgfSBmcm9tIFwiLi90aW1pbmdcIjtcblxuZXhwb3J0IGludGVyZmFjZSBSZXRyeU9wdGlvbnM8QXJncyBleHRlbmRzIGFueVtdLCBSZXQ+IHtcbiAgZm46ICguLi5hcmdzOiBBcmdzKSA9PiBQcm9taXNlPFJldD47XG4gIG1heEF0dGVtcHRzPzogbnVtYmVyO1xuICB0aW1lb3V0PzogbnVtYmVyO1xuICAvLyBXaGVuIHByb3ZpZGVkLCB1c2VSZXRyeSBiYWlscyBvdXQgaW1tZWRpYXRlbHkgb24gYWJvcnQgaW5zdGVhZCBvZiByZXRyeWluZy4gVGhlIHNpZ25hbFxuICAvLyBpcyBub3QgYXV0by10aHJlYWRlZCBpbnRvIGZuIOKAlCBjYWxsZXIgbXVzdCB3aXJlIGl0IHdoZXJlIGl0IG1hdHRlcnMgKGUuZy4gZmV0Y2gsIFMzIHNlbmQpLlxuICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVzZVJldHJ5PEFyZ3MgZXh0ZW5kcyBhbnlbXSwgUmV0Pih7IGZuLCBtYXhBdHRlbXB0cyA9IDMsIHRpbWVvdXQsIHNpZ25hbCB9OiBSZXRyeU9wdGlvbnM8QXJncywgUmV0Pikge1xuICBjb25zdCB0aW1lb3V0RXJyb3IgPSBuZXcgRXJyb3IoYHRpbWVvdXQgb3ZlciAke3RpbWVvdXR9bXNgKTtcbiAgcmV0dXJuIGFzeW5jIGZ1bmN0aW9uICguLi5hcmdzOiBBcmdzKSB7XG4gICAgbGV0IGF0dGVtcHQgPSAwO1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBzaWduYWw/LnRocm93SWZBYm9ydGVkKCk7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBwcm9taXNlcyA9IFtmbiguLi5hcmdzKV07XG4gICAgICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICAgICAgcHJvbWlzZXMucHVzaChcbiAgICAgICAgICAgIHNldFRpbWVvdXQodGltZW91dCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgIHRocm93IHRpbWVvdXRFcnJvcjtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGF3YWl0IFByb21pc2UucmFjZShwcm9taXNlcyk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHNpZ25hbD8udGhyb3dJZkFib3J0ZWQoKTtcbiAgICAgICAgYXR0ZW1wdCsrO1xuICAgICAgICBpZiAoYXR0ZW1wdCA+PSBtYXhBdHRlbXB0cykge1xuICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgc2xlZXAoTWF0aC5wb3coMiwgYXR0ZW1wdCkgKiAxMDAgKyBNYXRoLnJhbmRvbSgpICogMTAwKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA5LlxuXG5jb25zdCBTVVBQT1JURURfUFJPVE9DT0xTID0gW1wiZmlsZTpcIiwgXCJodHRwOlwiLCBcImh0dHBzOlwiLCBcImRhdGE6XCJdO1xuY29uc3QgU09VUkNFX1BBVFRFUk4gPSAvXihmaWxlOnxodHRwcz86fGRhdGE6KS87XG5cbmV4cG9ydCBmdW5jdGlvbiBjaGVja0hUTUwoc291cmNlOiBzdHJpbmcpOiB2b2lkIHtcbiAgaWYgKFNPVVJDRV9QQVRURVJOLnRlc3Qoc291cmNlKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHByb3RvY29sID0gc291cmNlLnNwbGl0KFwiOlwiKVswXSArIFwiOlwiO1xuICBjb25zdCBtZXNzYWdlID0gU1VQUE9SVEVEX1BST1RPQ09MUy5pbmNsdWRlcyhwcm90b2NvbClcbiAgICA/IGB1bnN1cHBvcnRlZCBwcm90b2NvbDogJHtwcm90b2NvbH0sIGV4cGVjdGVkICR7U1VQUE9SVEVEX1BST1RPQ09MUy5qb2luKFwiLCBcIil9YFxuICAgIDogYGludmFsaWQgc291cmNlIGZvcm1hdCwgZXhwZWN0ZWQgJHtTVVBQT1JURURfUFJPVE9DT0xTLmpvaW4oXCIsIFwiKX1gO1xuXG4gIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDMvMTAuXG5cbmV4cG9ydCBpbnRlcmZhY2UgV2FpdE9wdGlvbnMge1xuICB0aW1lb3V0OiBudW1iZXI7XG4gIG9uVGltZW91dD86ICgpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBjbGFzcyBXYWl0YWJsZUV2ZW50IHtcbiAgcHJpdmF0ZSBfcHJvbWlzZT86IFByb21pc2U8dm9pZD47XG4gIHByaXZhdGUgX3Jlc29sdmU/OiAoKSA9PiB2b2lkO1xuICBwcml2YXRlIF90aW1lb3V0VG9rZW4/OiBOb2RlSlMuVGltZW91dDtcblxuICB3YWl0KG9wdGlvbnM/OiBXYWl0T3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9wcm9taXNlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJhbHJlYWR5IHdhaXRpbmdcIik7XG4gICAgfVxuICAgIHRoaXMuX3Byb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgdGhpcy5fcmVzb2x2ZSA9IHJlc29sdmU7XG4gICAgICBpZiAob3B0aW9ucz8udGltZW91dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuX3RpbWVvdXRUb2tlbiA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIG9wdGlvbnMub25UaW1lb3V0Py4oKTtcbiAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH0sIG9wdGlvbnMudGltZW91dCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuX3Byb21pc2U7XG4gIH1cblxuICBzaWduYWwoKSB7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVvdXRUb2tlbik7XG4gICAgdGhpcy5fcHJvbWlzZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLl9yZXNvbHZlPy4oKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wOS5cblxuaW1wb3J0IHsgQnJvd3NlcldpbmRvdyB9IGZyb20gXCJlbGVjdHJvblwiO1xuaW1wb3J0IHsgVVJMIH0gZnJvbSBcInVybFwiO1xuaW1wb3J0IHsgQ29uY3VycmVuY3lMaW1pdGVyIH0gZnJvbSBcIi4uL2Jhc2UvbGltaXRlclwiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4uL2Jhc2UvbG9nZ2luZ1wiO1xuaW1wb3J0IHsgV2FpdGFibGVFdmVudCB9IGZyb20gXCIuLi9iYXNlL3dhaXRhYmxlX2V2ZW50XCI7XG5cbmNvbnN0IFRBRyA9IFwiW05ldHdvcmtdXCI7XG5cbmNvbnN0IG1hcCA9IG5ldyBNYXAoW1xuICBbYGpzc3otYm9zcy5oZHNsYi5jb21gLCBganNzei1ib3NzLmJpbGliaWxpLmNvYF0sIC8vXG4gIFtgYm9zcy5oZHNsYi5jb21gLCBgc2hqZC1ib3NzLmJpbGliaWxpLmNvYF0sXG5dKTtcblxuZXhwb3J0IGZ1bmN0aW9uIHByb3hpZWRVcmwodXJsOiBzdHJpbmcpIHtcbiAgaWYgKCF1cmwuc3RhcnRzV2l0aChcImh0dHBcIikpIHtcbiAgICByZXR1cm4gdXJsO1xuICB9XG4gIGNvbnN0IHBhcnNlZCA9IG5ldyBVUkwodXJsKTtcbiAgY29uc3QgdGFyZ2V0ID0gbWFwLmdldChwYXJzZWQuaG9zdG5hbWUpO1xuICBpZiAoIXRhcmdldCkge1xuICAgIHJldHVybiB1cmw7XG4gIH1cbiAgcGFyc2VkLmhvc3RuYW1lID0gdGFyZ2V0O1xuICBwYXJzZWQucHJvdG9jb2wgPSBcImh0dHA6XCI7XG4gIHJldHVybiBwYXJzZWQudG9TdHJpbmcoKTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBOZXR3b3JrT3B0aW9ucyB7XG4gIHNvdXJjZTogc3RyaW5nO1xuICB3aW5kb3c6IEJyb3dzZXJXaW5kb3c7XG4gIHVzZUlubmVyUHJveHk/OiBib29sZWFuO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0SW50ZXJjZXB0b3IoeyBzb3VyY2UsIHdpbmRvdywgdXNlSW5uZXJQcm94eSB9OiBOZXR3b3JrT3B0aW9ucykge1xuICBjb25zdCByZXEgPSB3aW5kb3cud2ViQ29udGVudHMuc2Vzc2lvbi53ZWJSZXF1ZXN0O1xuICBjb25zdCBsaW1pdGVyID0gbmV3IENvbmN1cnJlbmN5TGltaXRlcigyNTYpO1xuICBjb25zdCBldmVudHMgPSBuZXcgTWFwPHN0cmluZywgV2FpdGFibGVFdmVudD4oKTtcblxuICBhc3luYyBmdW5jdGlvbiB3YWl0KGtleTogc3RyaW5nLCBvblRpbWVvdXQ/OiAoKSA9PiB2b2lkKSB7XG4gICAgY29uc3QgZXZlbnQgPSBuZXcgV2FpdGFibGVFdmVudCgpO1xuICAgIGV2ZW50cy5zZXQoa2V5LCBldmVudCk7XG4gICAgYXdhaXQgZXZlbnQud2FpdCh7IHRpbWVvdXQ6IDVfMDAwLCBvblRpbWVvdXQgfSkuZmluYWxseSgoKSA9PiBldmVudHMuZGVsZXRlKGtleSkpO1xuICB9XG5cbiAgZnVuY3Rpb24gc2lnbmFsKGtleTogc3RyaW5nKSB7XG4gICAgZXZlbnRzLmdldChrZXkpPy5zaWduYWwoKTtcbiAgfVxuXG4gIHJlcS5vbkJlZm9yZVJlcXVlc3QoKGRldGFpbHMsIGNhbGxiYWNrKSA9PiB7XG4gICAgY29uc3QgdXJsID0gZGV0YWlscy51cmw7XG4gICAgY29uc3QgcHJveGllZCA9IHVzZUlubmVyUHJveHkgPyBwcm94aWVkVXJsKHVybCkgOiB1cmw7XG4gICAgbGltaXRlci5zY2hlZHVsZSgoKSA9PiB7XG4gICAgICBjb25zdCBrZXkgPSBgJHt3aW5kb3cuaWR9XyR7ZGV0YWlscy5pZH1gO1xuICAgICAgbG9nZ2VyLmRlYnVnKFRBRywgYHN0YXJ0OmAsIHtcbiAgICAgICAga2V5LFxuICAgICAgICB1cmwsXG4gICAgICAgIHByb3hpZWQsXG4gICAgICAgIG1ldGhvZDogZGV0YWlscy5tZXRob2QsXG4gICAgICAgIHNvdXJjZSxcbiAgICAgICAgc3RhdHM6IGxpbWl0ZXIuc3RhdHMsXG4gICAgICB9KTtcbiAgICAgIGlmIChwcm94aWVkID09PSB1cmwpIHtcbiAgICAgICAgY2FsbGJhY2soeyBjYW5jZWw6IGZhbHNlIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2FsbGJhY2soeyBjYW5jZWw6IGZhbHNlLCByZWRpcmVjdFVSTDogcHJveGllZCB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB3YWl0KGtleSwgKCkgPT4ge1xuICAgICAgICBsb2dnZXIud2FybihUQUcsIGBtYXliZSB0aW1lb3V0OmAsIHtcbiAgICAgICAgICBrZXksXG4gICAgICAgICAgdXJsLFxuICAgICAgICAgIHByb3hpZWQsXG4gICAgICAgICAgbWV0aG9kOiBkZXRhaWxzLm1ldGhvZCxcbiAgICAgICAgICBzb3VyY2UsXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIHJlcS5vbkhlYWRlcnNSZWNlaXZlZCgoeyByZXNwb25zZUhlYWRlcnMgfSwgY2FsbGJhY2spID0+IHtcbiAgICBkZWxldGUgcmVzcG9uc2VIZWFkZXJzPy5bXCJ4LWZyYW1lLW9wdGlvbnNcIl07XG4gICAgZGVsZXRlIHJlc3BvbnNlSGVhZGVycz8uW1wiWC1GcmFtZS1PcHRpb25zXCJdO1xuICAgIGRlbGV0ZSByZXNwb25zZUhlYWRlcnM/LltcImNvbnRlbnQtc2VjdXJpdHktcG9saWN5XCJdO1xuICAgIGRlbGV0ZSByZXNwb25zZUhlYWRlcnM/LltcIkNvbnRlbnQtU2VjdXJpdHktUG9saWN5XCJdO1xuICAgIGNhbGxiYWNrKHsgY2FuY2VsOiBmYWxzZSwgcmVzcG9uc2VIZWFkZXJzIH0pO1xuICB9KTtcblxuICByZXEub25Db21wbGV0ZWQoKGRldGFpbHMpID0+IHtcbiAgICBjb25zdCBrZXkgPSBgJHt3aW5kb3cuaWR9XyR7ZGV0YWlscy5pZH1gO1xuICAgIHNpZ25hbChrZXkpO1xuICAgIGxvZ2dlci5kZWJ1ZyhUQUcsIGBjb21wbGV0ZWQ6YCwge1xuICAgICAga2V5LFxuICAgICAgdXJsOiBkZXRhaWxzLnVybCxcbiAgICAgIG1ldGhvZDogZGV0YWlscy5tZXRob2QsXG4gICAgICBzdGF0dXNDb2RlOiBkZXRhaWxzLnN0YXR1c0NvZGUsXG4gICAgICBzb3VyY2UsXG4gICAgfSk7XG4gIH0pO1xuXG4gIHJlcS5vbkVycm9yT2NjdXJyZWQoKGRldGFpbHMpID0+IHtcbiAgICBjb25zdCBrZXkgPSBgJHt3aW5kb3cuaWR9XyR7ZGV0YWlscy5pZH1gO1xuICAgIHNpZ25hbChrZXkpO1xuICAgIGxvZ2dlci5lcnJvcihUQUcsIGBlcnJvcjpgLCB7XG4gICAgICBrZXksXG4gICAgICB1cmw6IGRldGFpbHMudXJsLFxuICAgICAgbWV0aG9kOiBkZXRhaWxzLm1ldGhvZCxcbiAgICAgIGVycm9yOiBkZXRhaWxzLmVycm9yLFxuICAgICAgc291cmNlLFxuICAgIH0pO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVuc2V0SW50ZXJjZXB0b3Iod2luZG93OiBCcm93c2VyV2luZG93KSB7XG4gIGNvbnN0IHJlcSA9IHdpbmRvdy53ZWJDb250ZW50cy5zZXNzaW9uLndlYlJlcXVlc3Q7XG4gIHJlcS5vbkJlZm9yZVJlcXVlc3QobnVsbCk7XG4gIHJlcS5vbkhlYWRlcnNSZWNlaXZlZChudWxsKTtcbiAgcmVxLm9uQ29tcGxldGVkKG51bGwpO1xuICByZXEub25FcnJvck9jY3VycmVkKG51bGwpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8yNy5cblxuaW1wb3J0IHsgQnJvd3NlcldpbmRvdyB9IGZyb20gXCJlbGVjdHJvblwiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4uL2Jhc2UvbG9nZ2luZ1wiO1xuaW1wb3J0IHsgdXNlUmV0cnkgfSBmcm9tIFwiLi4vYmFzZS9yZXRyeVwiO1xuaW1wb3J0IHsgc2xlZXAgfSBmcm9tIFwiLi4vYmFzZS90aW1pbmdcIjtcbmltcG9ydCB7IGNoZWNrSFRNTCB9IGZyb20gXCIuL2h0bWxfY2hlY2tcIjtcbmltcG9ydCB7IHByb3hpZWRVcmwsIHNldEludGVyY2VwdG9yLCB1bnNldEludGVyY2VwdG9yIH0gZnJvbSBcIi4vbmV0d29ya1wiO1xuaW1wb3J0IHsgY3JlYXRlU3RlZ29VUkwgfSBmcm9tIFwiLi9wcm90b2NvbFwiO1xuaW1wb3J0IHR5cGUgeyBJUENSZW5kZXJPcHRpb25zIH0gZnJvbSBcIi4vc2NoZW1hXCI7XG5cbmNvbnN0IFRBRyA9IFwiW1dpbmRvd11cIjtcbmNvbnN0IFRJTUVPVVRfRVJST1IgPSBuZXcgRXJyb3IoXCJ3aW5kb3cgdGltZW91dFwiKTtcblxuaW50ZXJmYWNlIEZpbmlzaE9wdGlvbnMge1xuICBzb3VyY2U6IHN0cmluZztcbiAgd2luOiBCcm93c2VyV2luZG93O1xuICBhY3Rpb246ICgpID0+IHZvaWQ7XG4gIHRvbGVyYW50PzogYm9vbGVhbjtcbiAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG59XG5cbmZ1bmN0aW9uIHdhaXRGb3JGaW5pc2goeyBzb3VyY2UsIHdpbiwgYWN0aW9uLCB0b2xlcmFudCwgc2lnbmFsIH06IEZpbmlzaE9wdGlvbnMpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiBkb25lKFRJTUVPVVRfRVJST1IpLCAxMF8wMDApO1xuICAgIGNvbnN0IGRvbmUgPSAoZXJyPzogdW5rbm93bikgPT4ge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgaWYgKGVycikgcmVqZWN0KGVycik7XG4gICAgICBlbHNlIHJlc29sdmUoKTtcbiAgICB9O1xuICAgIHNpZ25hbD8udGhyb3dJZkFib3J0ZWQoKTtcbiAgICBzaWduYWw/LmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCAoKSA9PiBkb25lKHNpZ25hbC5yZWFzb24pLCB7IG9uY2U6IHRydWUgfSk7XG4gICAgd2luLndlYkNvbnRlbnRzLm9uY2UoXCJkb20tcmVhZHlcIiwgKCkgPT4ge1xuICAgICAgbG9nZ2VyLmRlYnVnKFRBRywgXCJkb20tcmVhZHk6XCIsIHsgc291cmNlIH0pO1xuICAgICAgaWYgKHRvbGVyYW50KSBkb25lKCk7XG4gICAgfSk7XG4gICAgd2luLndlYkNvbnRlbnRzLm9uY2UoXCJkaWQtc3RvcC1sb2FkaW5nXCIsICgpID0+IHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhUQUcsIFwiZGlkLXN0b3AtbG9hZGluZzpcIiwgeyBzb3VyY2UgfSk7XG4gICAgICBkb25lKCk7XG4gICAgfSk7XG4gICAgd2luLndlYkNvbnRlbnRzLm9uY2UoXCJkaWQtZmFpbC1sb2FkXCIsIChfZSwgY29kZSwgZGVzYywgdXJsKSA9PiB7XG4gICAgICBjb25zdCBtc2cgPSBgZGlkLWZhaWwtbG9hZDogJHtKU09OLnN0cmluZ2lmeSh7IHVybCwgc291cmNlLCBjb2RlLCBkZXNjIH0pfWA7XG4gICAgICBsb2dnZXIuZXJyb3IoVEFHLCBtc2cpO1xuICAgICAgZG9uZShuZXcgRXJyb3IobXNnKSk7XG4gICAgfSk7XG4gICAgd2luLndlYkNvbnRlbnRzLm9uY2UoXCJyZW5kZXItcHJvY2Vzcy1nb25lXCIsIChfZSwgeyBleGl0Q29kZSwgcmVhc29uIH0pID0+IHtcbiAgICAgIGNvbnN0IG1zZyA9IGByZW5kZXItcHJvY2Vzcy1nb25lOiAke0pTT04uc3RyaW5naWZ5KHsgc291cmNlLCBleGl0Q29kZSwgcmVhc29uIH0pfWA7XG4gICAgICBsb2dnZXIuZXJyb3IoVEFHLCBtc2cpO1xuICAgICAgZG9uZShuZXcgRXJyb3IobXNnKSk7XG4gICAgfSk7XG4gICAgYWN0aW9uKCk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGlzcG9zZVdpbmRvdyh3aW46IEJyb3dzZXJXaW5kb3cpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiB7XG4gICAgdW5zZXRJbnRlcmNlcHRvcih3aW4pO1xuICAgIGNvbnN0IHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBsb2dnZXIud2FybihUQUcsIFwiZm9yY2UgY2xvc2VcIik7XG4gICAgICAgIHdpbi5kZXN0cm95KCk7XG4gICAgICB9IGNhdGNoIHt9XG4gICAgICBkb25lKCk7XG4gICAgfSwgMTAwMCk7XG4gICAgY29uc3QgZG9uZSA9ICgpID0+IChjbGVhclRpbWVvdXQodGltZXIpLCByZXNvbHZlKCkpO1xuICAgIHdpbi53ZWJDb250ZW50cy5zdG9wUGFpbnRpbmcoKTtcbiAgICB3aW4ud2ViQ29udGVudHMuZGVidWdnZXIuZGV0YWNoKCk7XG4gICAgd2luLm9uY2UoXCJjbG9zZWRcIiwgZG9uZSk7XG4gICAgd2luLmNsb3NlKCk7XG4gIH0pO1xufVxuXG5leHBvcnQgdHlwZSBXaW5kb3dDcmVhdGVkQ2FsbGJhY2sgPSAod2luZG93OiBCcm93c2VyV2luZG93KSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPjtcblxuZXhwb3J0IGludGVyZmFjZSBXaW5kb3dPcHRpb25zIHtcbiAgc291cmNlOiBzdHJpbmc7XG4gIHJlbmRlcmVyOiBJUENSZW5kZXJPcHRpb25zO1xuICB0b2xlcmFudD86IGJvb2xlYW47XG4gIHByZWxvYWQ/OiBzdHJpbmc7XG4gIG9uQ3JlYXRlZD86IFdpbmRvd0NyZWF0ZWRDYWxsYmFjaztcbiAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIG9wZW5XaW5kb3coe1xuICBzb3VyY2UsXG4gIHJlbmRlcmVyLFxuICB0b2xlcmFudCxcbiAgcHJlbG9hZCxcbiAgc2lnbmFsLFxuICBvbkNyZWF0ZWQsXG59OiBXaW5kb3dPcHRpb25zKTogUHJvbWlzZTxCcm93c2VyV2luZG93PiB7XG4gIGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgdXNlSW5uZXJQcm94eSB9ID0gcmVuZGVyZXI7XG4gIGNvbnN0IHNyYyA9IHVzZUlubmVyUHJveHkgPyBwcm94aWVkVXJsKHNvdXJjZSkgOiBzb3VyY2U7XG5cbiAgY29uc3Qgd2luID0gbmV3IEJyb3dzZXJXaW5kb3coe1xuICAgIHdpZHRoLFxuICAgIGhlaWdodDogaGVpZ2h0ICsgMSxcbiAgICBtaW5XaWR0aDogd2lkdGgsXG4gICAgbWluSGVpZ2h0OiBoZWlnaHQgKyAxLFxuICAgIG1heFdpZHRoOiB3aWR0aCxcbiAgICBtYXhIZWlnaHQ6IGhlaWdodCArIDEsXG4gICAgcmVzaXphYmxlOiBmYWxzZSxcbiAgICBtaW5pbWl6YWJsZTogZmFsc2UsXG4gICAgbW92YWJsZTogZmFsc2UsXG4gICAgc2hvdzogZmFsc2UsXG4gICAgdHJhbnNwYXJlbnQ6IHRydWUsXG4gICAgYmFja2dyb3VuZENvbG9yOiB1bmRlZmluZWQsXG4gICAgZnJhbWU6IGZhbHNlLFxuICAgIHdlYlByZWZlcmVuY2VzOiB7XG4gICAgICBvZmZzY3JlZW46IHRydWUsXG4gICAgICBiYWNrZ3JvdW5kVGhyb3R0bGluZzogZmFsc2UsXG4gICAgICBub2RlSW50ZWdyYXRpb246IHRydWUsXG4gICAgICBub2RlSW50ZWdyYXRpb25JblN1YkZyYW1lczogdHJ1ZSxcbiAgICAgIG5vZGVJbnRlZ3JhdGlvbkluV29ya2VyOiB0cnVlLFxuICAgICAgY29udGV4dElzb2xhdGlvbjogZmFsc2UsXG4gICAgICB3ZWJTZWN1cml0eTogZmFsc2UsXG4gICAgICBhbGxvd1J1bm5pbmdJbnNlY3VyZUNvbnRlbnQ6IHRydWUsXG4gICAgICBleHBlcmltZW50YWxGZWF0dXJlczogdHJ1ZSxcbiAgICAgIHByZWxvYWQsXG4gICAgfSxcbiAgfSk7XG4gIHNldEludGVyY2VwdG9yKHsgc291cmNlLCB3aW5kb3c6IHdpbiwgdXNlSW5uZXJQcm94eSB9KTtcbiAgd2luLndlYkNvbnRlbnRzLmRlYnVnZ2VyLmF0dGFjaChcIjEuM1wiKTtcbiAgYXdhaXQgb25DcmVhdGVkPy4od2luKTtcblxuICB3aW4ud2ViQ29udGVudHMub24oXCJjb25zb2xlLW1lc3NhZ2VcIiwgKHsgbGV2ZWwsIG1lc3NhZ2UsIGxpbmVOdW1iZXIsIHNvdXJjZUlkIH0pID0+IHtcbiAgICBjb25zdCBtc2dzID0gW1RBRywgXCJjb25zb2xlOlwiLCB7IG1lc3NhZ2UsIGxpbmVOdW1iZXIsIHNvdXJjZUlkLCBzb3VyY2UgfV07XG4gICAgbGV2ZWwgPT09IFwiZXJyb3JcIiA/IGxvZ2dlci5lcnJvciguLi5tc2dzKSA6IGxvZ2dlci5kZWJ1ZyguLi5tc2dzKTtcbiAgICBpZiAobGV2ZWwgPT09IFwid2FybmluZ1wiICYmIG1lc3NhZ2Uuc3RhcnRzV2l0aChgJWNFbGVjdHJvbiBTZWN1cml0eSBXYXJuaW5nYCkpIHJldHVybjtcbiAgICByZW5kZXJlci5vbkNvbnNvbGUobGV2ZWwsIG1lc3NhZ2UpO1xuICB9KTtcblxuICB0cnkge1xuICAgIGNvbnN0IHVybCA9IGNyZWF0ZVN0ZWdvVVJMKHNyYywgeyB3aWR0aCwgaGVpZ2h0IH0pO1xuICAgIGF3YWl0IHdhaXRGb3JGaW5pc2goeyBzb3VyY2UsIHdpbiwgYWN0aW9uOiAoKSA9PiB3aW4ubG9hZFVSTCh1cmwpLCB0b2xlcmFudCwgc2lnbmFsIH0pO1xuICB9IGNhdGNoIChlKSB7XG4gICAgYXdhaXQgZGlzcG9zZVdpbmRvdyh3aW4pO1xuICAgIHRocm93IGU7XG4gIH1cblxuICByZXR1cm4gd2luO1xufVxuXG5jb25zdCBvcGVuV2luZG93V2l0aFJldHJ5ID0gdXNlUmV0cnkoeyBmbjogb3BlbldpbmRvdywgbWF4QXR0ZW1wdHM6IDIgfSk7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsb2FkV2luZG93KHtcbiAgc291cmNlLFxuICByZW5kZXJlcixcbiAgcHJlbG9hZCxcbiAgb25DcmVhdGVkLFxuICBzaWduYWwsXG59OiBXaW5kb3dPcHRpb25zKTogUHJvbWlzZTxCcm93c2VyV2luZG93PiB7XG4gIGNoZWNrSFRNTChzb3VyY2UpO1xuXG4gIHNpZ25hbD8udGhyb3dJZkFib3J0ZWQoKTtcbiAgbGV0IHdhcm11cDogQnJvd3NlcldpbmRvdyB8IHVuZGVmaW5lZDtcbiAgbGV0IGVycm9yOiB1bmtub3duO1xuICB0cnkge1xuICAgIHdhcm11cCA9IGF3YWl0IG9wZW5XaW5kb3dXaXRoUmV0cnkoeyBzb3VyY2UsIHJlbmRlcmVyLCBzaWduYWwgfSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBlcnJvciA9IGU7XG4gIH1cblxuICBjb25zdCBvcGVuID0gKCkgPT4gb3BlbldpbmRvdyh7IHNvdXJjZSwgcmVuZGVyZXIsIHByZWxvYWQsIG9uQ3JlYXRlZCwgc2lnbmFsLCB0b2xlcmFudDogcmVuZGVyZXIud2luZG93VG9sZXJhbnQgfSk7XG5cbiAgaWYgKHJlbmRlcmVyLndpbmRvd1RvbGVyYW50ICYmIGVycm9yID09PSBUSU1FT1VUX0VSUk9SKSB7XG4gICAgbG9nZ2VyLndhcm4oVEFHLCBgd2FybXVwIHRpbWVvdXQ6ICR7c291cmNlfSwgZmFsbGluZyBiYWNrIHRvIGRvbS1yZWFkeWApO1xuICAgIHJldHVybiBhd2FpdCBvcGVuKCk7XG4gIH1cblxuICBpZiAoZXJyb3IpIHtcbiAgICBjb25zdCB7IG1lc3NhZ2UsIHN0YWNrIH0gPSBlcnJvciBhcyBFcnJvcjtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGZhaWxlZCB0byB3YXJtdXAgd2luZG93OiAke0pTT04uc3RyaW5naWZ5KHsgc291cmNlLCBtZXNzYWdlLCBzdGFjayB9KX1gKTtcbiAgfVxuXG4gIGlmICh3YXJtdXApIHtcbiAgICB3YXJtdXAud2ViQ29udGVudHMucmVtb3ZlQWxsTGlzdGVuZXJzKCk7XG4gICAgdW5zZXRJbnRlcmNlcHRvcih3YXJtdXApO1xuICAgIGF3YWl0IHNsZWVwKDIwMDApO1xuICAgIGF3YWl0IGRpc3Bvc2VXaW5kb3cod2FybXVwKTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IG9wZW4oKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGNvbnN0IHsgbWVzc2FnZSwgc3RhY2sgfSA9IGUgYXMgRXJyb3I7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBmYWlsZWQgdG8gbG9hZCB3aW5kb3c6ICR7SlNPTi5zdHJpbmdpZnkoeyBzb3VyY2UsIG1lc3NhZ2UsIHN0YWNrIH0pfWApO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA5LlxuXG5pbXBvcnQgeyB0eXBlIE5hdGl2ZUltYWdlLCB0eXBlIFNpemUgfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IHJlc2l6ZURyYXdhYmxlIH0gZnJvbSBcIi4uL2Jhc2UvY2RwXCI7XG5pbXBvcnQgeyBwdXBBdWRpb1ByZWxvYWQgfSBmcm9tIFwiLi4vYmFzZS9jb25zdGFudHNcIjtcbmltcG9ydCB7IEVuY29kZXJQaXBlbGluZSB9IGZyb20gXCIuLi9iYXNlL2VuY29kZXIvcGlwZWxpbmVcIjtcbmltcG9ydCB7IEZyYW1lRHJvcFN0YXRzIH0gZnJvbSBcIi4uL2Jhc2UvZnJhbWVfZHJvcFwiO1xuaW1wb3J0IHsgc2l6ZUVxdWFscyB9IGZyb20gXCIuLi9iYXNlL2ltYWdlXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi4vYmFzZS9sb2dnaW5nXCI7XG5pbXBvcnQgeyBhdHRhY2hBdWRpb0xpc3RlbmVycywgdHlwZSBBdWRpb0Rpc3Bvc2FsIH0gZnJvbSBcIi4vYXVkaW9cIjtcbmltcG9ydCB0eXBlIHsgSXBjRG9uZVBheWxvYWQgfSBmcm9tIFwiLi9pcGNcIjtcbmltcG9ydCB0eXBlIHsgSVBDUmVuZGVyT3B0aW9ucyB9IGZyb20gXCIuL3NjaGVtYVwiO1xuaW1wb3J0IHsgZGVjb2RlU3RlZ28sIHN0YXJ0U3RlZ28gfSBmcm9tIFwiLi9zdGVnb1wiO1xuaW1wb3J0IHsgZGlzcG9zZVdpbmRvdywgbG9hZFdpbmRvdyB9IGZyb20gXCIuL3dpbmRvd1wiO1xuXG5jb25zdCBUQUcgPSBcIltSZW5kZXJdXCI7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZW5kZXIob3B0aW9uczogSVBDUmVuZGVyT3B0aW9ucyk6IFByb21pc2U8SXBjRG9uZVBheWxvYWQ+IHtcbiAgY29uc3QgeyBzb3VyY2UsIGZwcywgd2lkdGgsIGhlaWdodCwgZHVyYXRpb24sIHdpdGhBdWRpbywgb3V0RmlsZSwgZGlzYWJsZUh3Q29kZWMsIHNpZ25hbCwgb25Qcm9ncmVzcyB9ID0gb3B0aW9ucztcblxuICBhd2FpdCB1c2luZyBlbmNvZGVyID0gYXdhaXQgRW5jb2RlclBpcGVsaW5lLmNyZWF0ZSh7IHdpZHRoLCBoZWlnaHQsIGZwcywgb3V0RmlsZSwgd2l0aEF1ZGlvLCBkaXNhYmxlSHdDb2RlYyB9KTtcblxuICBjb25zdCB0b3RhbCA9IE1hdGguY2VpbChmcHMgKiBkdXJhdGlvbik7XG4gIGNvbnN0IGZyYW1lSW50ZXJ2YWwgPSAxMDAwIC8gZnBzO1xuICBjb25zdCBmcmFtZVNpemU6IFNpemUgPSB7IHdpZHRoLCBoZWlnaHQ6IGhlaWdodCArIDEgfTtcblxuICBsZXQgd3JpdHRlbiA9IDA7XG4gIGxldCBsYXN0V3JpdHRlblRpbWU6IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgbGV0IHByb2dyZXNzID0gMDtcbiAgbGV0IGVuY29kZUVycm9yOiBFcnJvciB8IHVuZGVmaW5lZDtcbiAgbGV0IHJlc29sdmVyOiAoKCkgPT4gdm9pZCkgfCB1bmRlZmluZWQ7XG4gIGxldCByZWplY3RlcjogKChyZWFzb24/OiB1bmtub3duKSA9PiB2b2lkKSB8IHVuZGVmaW5lZDtcbiAgbGV0IGludGVydmFsOiBOb2RlSlMuVGltZW91dCB8IHVuZGVmaW5lZDtcbiAgY29uc3QgZHJvcFN0YXRzID0gbmV3IEZyYW1lRHJvcFN0YXRzKGZwcyk7XG5cbiAgbGV0IGRpc3Bvc2VBdWRpbzogQXVkaW9EaXNwb3NhbCB8IHVuZGVmaW5lZDtcbiAgY29uc3Qgc2NoZWR1bGVGcmFtZSA9IChmcmFtZTogQnVmZmVyKSA9PiB7XG4gICAgd3JpdHRlbisrO1xuICAgIGVuY29kZXIuZW5jb2RlQkdSQShmcmFtZSkuY2F0Y2goKGUpID0+IChlbmNvZGVFcnJvciA/Pz0gZSkpO1xuICB9O1xuXG4gIGNvbnN0IHBhaW50ID0gKF9lOiB1bmtub3duLCBfcjogdW5rbm93biwgaW1hZ2U6IE5hdGl2ZUltYWdlKSA9PiB7XG4gICAgZW5jb2RlRXJyb3IgPz89IHNpZ25hbD8ucmVhc29uO1xuICAgIGlmIChlbmNvZGVFcnJvcikge1xuICAgICAgcmVqZWN0ZXI/LihlbmNvZGVFcnJvcik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgaW1hZ2VTaXplID0gaW1hZ2UuZ2V0U2l6ZSgpO1xuICAgIGlmICghc2l6ZUVxdWFscyhpbWFnZVNpemUsIGZyYW1lU2l6ZSkpIHtcbiAgICAgIC8vIE5PVEUoQXV0b2tha2EpOiBXZSBtdXN0IGVuc3VyZSBmcmFtZSBpcyByZWFkeSBvbiBlbGVjdHJvbiB2NDErXG4gICAgICByZXNpemVEcmF3YWJsZShjZHAsIGZyYW1lU2l6ZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gRGVjb2RlIHN0ZWdvIHRpbWVzdGFtcCBmcm9tIHRoZSBib3R0b20gcGl4ZWwgcm93IHdpdGhvdXQgZnVsbCBiaXRtYXAgY29weVxuICAgIGNvbnN0IGJpdG1hcCA9IGltYWdlLnRvQml0bWFwKCk7XG4gICAgY29uc3QgY3VycmVudFRpbWUgPSBkZWNvZGVTdGVnbyhiaXRtYXAsIGltYWdlU2l6ZSk7XG4gICAgaWYgKGN1cnJlbnRUaW1lID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGVuY29kZUVycm9yID8/PSBuZXcgRXJyb3IoYG5vIHRpbWVzdGFtcCBAICR7d3JpdHRlbn1gKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBTa2lwIGZyYW1lcyB0aGF0IGFycml2ZSB0b28gc29vbiAoPCA4MCUgb2YgZnJhbWUgaW50ZXJ2YWwpXG4gICAgaWYgKGxhc3RXcml0dGVuVGltZSAhPT0gdW5kZWZpbmVkICYmIGN1cnJlbnRUaW1lIC0gbGFzdFdyaXR0ZW5UaW1lIDwgZnJhbWVJbnRlcnZhbCAqIDAuOCkgcmV0dXJuO1xuXG4gICAgY29uc3QgY3JvcHBlZCA9IEJ1ZmZlci5mcm9tKGJpdG1hcC5idWZmZXIsIGJpdG1hcC5ieXRlT2Zmc2V0LCBoZWlnaHQgKiB3aWR0aCAqIDQpO1xuXG4gICAgaWYgKGxhc3RXcml0dGVuVGltZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBzY2hlZHVsZUZyYW1lKGNyb3BwZWQpO1xuICAgICAgZHJvcFN0YXRzLndyb3RlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHRpbWVEZWx0YSA9IGN1cnJlbnRUaW1lIC0gbGFzdFdyaXR0ZW5UaW1lO1xuICAgICAgaWYgKHRpbWVEZWx0YSA8PSBmcmFtZUludGVydmFsICogMS4yKSB7XG4gICAgICAgIHNjaGVkdWxlRnJhbWUoY3JvcHBlZCk7XG4gICAgICAgIGRyb3BTdGF0cy53cm90ZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgZnJhbWVzVG9JbnNlcnQgPSBNYXRoLnJvdW5kKHRpbWVEZWx0YSAvIGZyYW1lSW50ZXJ2YWwpO1xuICAgICAgICBkcm9wU3RhdHMuZHJvcHBlZChmcmFtZXNUb0luc2VydCAtIDEpO1xuICAgICAgICBkcm9wU3RhdHMud3JvdGUoKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmcmFtZXNUb0luc2VydCAmJiB3cml0dGVuIDwgdG90YWw7IGkrKykge1xuICAgICAgICAgIHNjaGVkdWxlRnJhbWUoY3JvcHBlZCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgbGFzdFdyaXR0ZW5UaW1lID0gY3VycmVudFRpbWU7XG5cbiAgICBjb25zdCBuZXdQcm9ncmVzcyA9IE1hdGguZmxvb3IoKHdyaXR0ZW4gLyB0b3RhbCkgKiAxMDApO1xuICAgIGlmIChNYXRoLmFicyhuZXdQcm9ncmVzcyAtIHByb2dyZXNzKSA+IDEwKSB7XG4gICAgICBwcm9ncmVzcyA9IG5ld1Byb2dyZXNzO1xuICAgICAgb25Qcm9ncmVzcyhwcm9ncmVzcyk7XG4gICAgfVxuXG4gICAgY29uc3QgZHVyYXRpb25NcyA9IGR1cmF0aW9uICogMTAwMDtcbiAgICBpZiAoY3VycmVudFRpbWUgPj0gZHVyYXRpb25NcyAtIGZyYW1lSW50ZXJ2YWwgKiAwLjUgfHwgd3JpdHRlbiA+PSB0b3RhbCkge1xuICAgICAgcmVzb2x2ZXI/LigpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCB3aW4gPSBhd2FpdCBsb2FkV2luZG93KHtcbiAgICBzb3VyY2UsXG4gICAgcmVuZGVyZXI6IG9wdGlvbnMsXG4gICAgc2lnbmFsLFxuICAgIHByZWxvYWQ6IHdpdGhBdWRpbyA/IHB1cEF1ZGlvUHJlbG9hZCA6IHVuZGVmaW5lZCxcbiAgICBvbkNyZWF0ZWQ6ICh3aW4pID0+IHtcbiAgICAgIGlmICh3aXRoQXVkaW8pIHtcbiAgICAgICAgZGlzcG9zZUF1ZGlvID0gYXR0YWNoQXVkaW9MaXN0ZW5lcnMoe1xuICAgICAgICAgIHdjOiB3aW4ud2ViQ29udGVudHMsXG4gICAgICAgICAgZW5jb2RlcixcbiAgICAgICAgICBnZXRWaWRlb1RpbWVNczogKCkgPT4gbGFzdFdyaXR0ZW5UaW1lID8/IDAsXG4gICAgICAgICAgb25FcnJvcjogKGU6IEVycm9yKSA9PiAoZW5jb2RlRXJyb3IgPz89IGUpLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LFxuICB9KTtcbiAgY29uc3QgY2RwID0gd2luLndlYkNvbnRlbnRzLmRlYnVnZ2VyO1xuXG4gIHRyeSB7XG4gICAgd2luLndlYkNvbnRlbnRzLnN0b3BQYWludGluZygpO1xuICAgIHdpbi53ZWJDb250ZW50cy5zZXRGcmFtZVJhdGUoZnBzKTtcbiAgICB3aW4ud2ViQ29udGVudHMub24oXCJwYWludFwiLCBwYWludCk7XG4gICAgd2luLndlYkNvbnRlbnRzLnN0YXJ0UGFpbnRpbmcoKTtcbiAgICBzaWduYWw/LnRocm93SWZBYm9ydGVkKCk7XG4gICAgc2lnbmFsPy5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgKCkgPT4gcmVqZWN0ZXI/LihzaWduYWwucmVhc29uKSwgeyBvbmNlOiB0cnVlIH0pO1xuICAgIGF3YWl0IHN0YXJ0U3RlZ28oY2RwKTtcbiAgICBhd2FpdCBuZXcgUHJvbWlzZTx2b2lkPigociwgaikgPT4ge1xuICAgICAgW3Jlc29sdmVyLCByZWplY3Rlcl0gPSBbciwgal07XG4gICAgICBsZXQgbGFzdFdyaXR0ZW4gPSAwO1xuICAgICAgbGV0IHN0dWNrID0gMDtcbiAgICAgIGludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgICBpZiAod3JpdHRlbiAhPT0gbGFzdFdyaXR0ZW4pIHtcbiAgICAgICAgICBsYXN0V3JpdHRlbiA9IHdyaXR0ZW47XG4gICAgICAgICAgc3R1Y2sgPSAwO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3R1Y2sgPj0gMykge1xuICAgICAgICAgIHJlamVjdGVyPy4obmV3IEVycm9yKFwiZHJhd2FibGUgdGltZW91dFwiKSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGxvZ2dlci53YXJuKFRBRywgYCR7c291cmNlfSByZW5kZXIgaXMgZXh0cmVtZWx5IHNsb3csIHdyaXR0ZW49JHt3cml0dGVufSBzdHVjaz0ke3N0dWNrfWApO1xuICAgICAgICBzdHVjaysrO1xuICAgICAgICB3aW4ud2ViQ29udGVudHMuaW52YWxpZGF0ZSgpO1xuICAgICAgfSwgMTAwMCk7XG4gICAgfSk7XG4gIH0gZmluYWxseSB7XG4gICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbCk7XG4gICAgd2luLndlYkNvbnRlbnRzLm9mZihcInBhaW50XCIsIHBhaW50KTtcbiAgICBhd2FpdCBkaXNwb3NlV2luZG93KHdpbik7XG4gICAgZGlzcG9zZUF1ZGlvPy4oKTtcbiAgICBhd2FpdCBlbmNvZGVyLmZpbmlzaCgpO1xuICB9XG5cbiAgaWYgKGVuY29kZUVycm9yIHx8IHdyaXR0ZW4gPT09IDApIHtcbiAgICB0aHJvdyBlbmNvZGVFcnJvciA/PyBuZXcgRXJyb3IoXCJubyBmcmFtZXMgY2FwdHVyZWRcIik7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgZHJvcFNjb3JlID0gZHJvcFN0YXRzLmZpbmFsaXplKCk7XG4gICAgcmV0dXJuIHsgd3JpdHRlbiwgamFuazogZHJvcFNjb3JlLmphbmssIG91dEZpbGUgfTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMy8wMi5cblxuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4uL2Jhc2UvbG9nZ2luZ1wiO1xuXG5jb25zdCBUQUcgPSBcIltSZXJlbmRlcl1cIjtcblxuZXhwb3J0IGNvbnN0IE1BWF9SRU5ERVJfQVRURU1QVFMgPSAzO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd2l0aFJlcmVuZGVyPFQ+KGFjdGlvbjogKCkgPT4gUHJvbWlzZTxUPik6IFByb21pc2U8VD4ge1xuICBsZXQgbGFzdEVycjogdW5rbm93bjtcbiAgZm9yIChsZXQgYXR0ZW1wdCA9IDA7IGF0dGVtcHQgPCBNQVhfUkVOREVSX0FUVEVNUFRTOyBhdHRlbXB0KyspIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IGFjdGlvbigpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGxhc3RFcnIgPSBlO1xuICAgICAgbG9nZ2VyLndhcm4oVEFHLCBgcmV0cnkgJHthdHRlbXB0ICsgMX0vJHtNQVhfUkVOREVSX0FUVEVNUFRTfTogJHsoZSBhcyBFcnJvcikubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cbiAgdGhyb3cgbGFzdEVycjtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgTHUgQW8gKGx1YW9AYmlsaWJpbGkuY29tKSBvbiAyMDI2LzA1LzE4LlxuXG5pbXBvcnQgdHlwZSB7IFdlYkZyYW1lTWFpbiB9IGZyb20gXCJlbGVjdHJvblwiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4uLy4uL2Jhc2UvbG9nZ2luZ1wiO1xuaW1wb3J0IHsgd2l0aFRpbWVvdXQgfSBmcm9tIFwiLi4vLi4vYmFzZS90aW1pbmdcIjtcblxuY29uc3QgVEFHID0gXCJbVmlkZW9dXCI7XG5leHBvcnQgY29uc3QgVklERU9fU1lNQk9MID0gXCJfX3B1cF92aWRlb19fXCI7XG5cbi8vIFNpZGVjYXIgc2hpbTogb2JzZXJ2ZXMgcGFnZS1kcml2ZW4gPHZpZGVvPiBzdGF0ZSwgcGFpbnRzIG1hdGNoaW5nIGRlY29kZWQgZnJhbWVzIHRvIGEgc3R5bGUtbWlycm9yZWQgb3ZlcmxheSBjYW52YXMuXG5jb25zdCBIT09LID0gYChmdW5jdGlvbigpIHtcbiAgaWYgKHdpbmRvdy5zZWxmID09PSB3aW5kb3cudG9wKSByZXR1cm47XG4gIGlmICh0eXBlb2YgJHtWSURFT19TWU1CT0x9ICE9PSAndW5kZWZpbmVkJykgcmV0dXJuO1xuXG4gIGNvbnN0IFNDSEVNRSA9ICdwdXAtZnJhbWU6Ly8nO1xuICBjb25zdCBIVkUgPSBIVE1MVmlkZW9FbGVtZW50LnByb3RvdHlwZTtcbiAgY29uc3QgTUVESUEgPSBIVE1MTWVkaWFFbGVtZW50LnByb3RvdHlwZTtcbiAgY29uc3Qgb3JpZ1BhdXNlID0gSFZFLnBhdXNlO1xuICBjb25zdCBjdERlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEhWRSwgJ2N1cnJlbnRUaW1lJykgfHwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihNRURJQSwgJ2N1cnJlbnRUaW1lJyk7XG4gIGNvbnN0IHBhdXNlZERlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEhWRSwgJ3BhdXNlZCcpIHx8IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTUVESUEsICdwYXVzZWQnKTtcbiAgY29uc3QgZW5kZWREZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihIVkUsICdlbmRlZCcpIHx8IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTUVESUEsICdlbmRlZCcpO1xuICBjb25zdCBzcmNEZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihIVkUsICdzcmMnKSB8fCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE1FRElBLCAnc3JjJyk7XG5cbiAgY29uc3Qgc2Vzc2lvbnMgPSBuZXcgV2Vha01hcCgpO1xuICBjb25zdCBhdHRhY2hpbmcgPSBuZXcgV2Vha01hcCgpO1xuICBsZXQgY3Vyck1zID0gMDtcbiAgbGV0IGxhc3RNcyA9IDA7XG5cbiAgLy8gUHJvcGVydGllcyBtaXJyb3JlZCBmcm9tIDx2aWRlbz4gdG8gY2FudmFzIG92ZXJsYXkgc28gcGFnZSBDU1Mgc3RpbGwgYXBwbGllcyB2aXN1YWxseS5cbiAgY29uc3QgTUlSUk9SX1BST1BTID0gW1xuICAgICdib3JkZXJSYWRpdXMnLCAnYm9yZGVyVG9wTGVmdFJhZGl1cycsICdib3JkZXJUb3BSaWdodFJhZGl1cycsICdib3JkZXJCb3R0b21MZWZ0UmFkaXVzJywgJ2JvcmRlckJvdHRvbVJpZ2h0UmFkaXVzJyxcbiAgICAndHJhbnNmb3JtJywgJ3RyYW5zZm9ybU9yaWdpbicsICdmaWx0ZXInLCAnY2xpcFBhdGgnLCAnYm94U2hhZG93JywgJ29wYWNpdHknLCAnbWl4QmxlbmRNb2RlJywgJ21hc2snLFxuICAgICd6SW5kZXgnLCAncG9zaXRpb24nLCAnbGVmdCcsICd0b3AnLCAncmlnaHQnLCAnYm90dG9tJyxcbiAgXTtcblxuICBmdW5jdGlvbiBzZXR1cENhbnZhcyh2aWRlbykge1xuICAgIGNvbnN0IGN2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG4gICAgY3YuZGF0YXNldC5wdXBWaWRlb092ZXJsYXkgPSAnMSc7XG4gICAgY3Yuc3R5bGUucG9pbnRlckV2ZW50cyA9ICdub25lJztcbiAgICAvLyB2aXNpYmlsaXR5OmhpZGRlbiBzbyB0aGUgbmF0aXZlIHBpcGVsaW5lIGRvZXNuJ3QgcGFpbnQ7IG9wYWNpdHkgbGVmdCB0byBwYWdlIENTUy5cbiAgICB2aWRlby5zdHlsZS52aXNpYmlsaXR5ID0gJ2hpZGRlbic7XG4gICAgdmlkZW8ubXV0ZWQgPSB0cnVlO1xuICAgIGNvbnN0IHBhcmVudCA9IHZpZGVvLnBhcmVudE5vZGUgfHwgZG9jdW1lbnQuYm9keTtcbiAgICBwYXJlbnQuaW5zZXJ0QmVmb3JlKGN2LCB2aWRlby5uZXh0U2libGluZyk7XG4gICAgc3luY092ZXJsYXkodmlkZW8sIGN2KTtcbiAgICByZXR1cm4gY3Y7XG4gIH1cblxuICBmdW5jdGlvbiBzeW5jT3ZlcmxheSh2aWRlbywgY3YpIHtcbiAgICBjb25zdCBjcyA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHZpZGVvKTtcbiAgICBjb25zdCBvZmZzZXRQYXJlbnQgPSB2aWRlby5vZmZzZXRQYXJlbnQgfHwgZG9jdW1lbnQuYm9keTtcbiAgICBjb25zdCB2ciA9IHZpZGVvLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGNvbnN0IHByID0gb2Zmc2V0UGFyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGN2LnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcbiAgICBjdi5zdHlsZS5sZWZ0ID0gKHZyLmxlZnQgLSBwci5sZWZ0KSArICdweCc7XG4gICAgY3Yuc3R5bGUudG9wID0gKHZyLnRvcCAtIHByLnRvcCkgKyAncHgnO1xuICAgIGN2LnN0eWxlLndpZHRoID0gdnIud2lkdGggKyAncHgnO1xuICAgIGN2LnN0eWxlLmhlaWdodCA9IHZyLmhlaWdodCArICdweCc7XG4gICAgZm9yIChjb25zdCBwIG9mIE1JUlJPUl9QUk9QUykge1xuICAgICAgaWYgKHAgPT09ICdwb3NpdGlvbicgfHwgcCA9PT0gJ2xlZnQnIHx8IHAgPT09ICd0b3AnIHx8IHAgPT09ICdyaWdodCcgfHwgcCA9PT0gJ2JvdHRvbScpIGNvbnRpbnVlO1xuICAgICAgY3Yuc3R5bGVbcF0gPSBjc1twXTtcbiAgICB9XG4gICAgY29uc3QgZHByID0gd2luZG93LmRldmljZVBpeGVsUmF0aW8gfHwgMTtcbiAgICBjb25zdCB3ID0gTWF0aC5tYXgoMSwgTWF0aC5yb3VuZCh2ci53aWR0aCAqIGRwcikpO1xuICAgIGNvbnN0IGggPSBNYXRoLm1heCgxLCBNYXRoLnJvdW5kKHZyLmhlaWdodCAqIGRwcikpO1xuICAgIGlmIChjdi53aWR0aCAhPT0gdykgY3Yud2lkdGggPSB3O1xuICAgIGlmIChjdi5oZWlnaHQgIT09IGgpIGN2LmhlaWdodCA9IGg7XG4gIH1cblxuICAvLyBDb21wdXRlZCBvYmplY3QtZml0IOKGkiBkcmF3SW1hZ2UgZ2VvbWV0cnk7IGRlZmF1bHRzIHRvICdmaWxsJy5cbiAgZnVuY3Rpb24gZml0UmVjdChhcmdzKSB7XG4gICAgY29uc3Qgc3JjVyA9IGFyZ3Muc3JjVywgc3JjSCA9IGFyZ3Muc3JjSCwgZHN0VyA9IGFyZ3MuZHN0VywgZHN0SCA9IGFyZ3MuZHN0SCwgZml0ID0gYXJncy5maXQ7XG4gICAgaWYgKGZpdCA9PT0gJ25vbmUnKSB7XG4gICAgICByZXR1cm4gWyhkc3RXIC0gc3JjVykgLyAyLCAoZHN0SCAtIHNyY0gpIC8gMiwgc3JjVywgc3JjSF07XG4gICAgfVxuICAgIGlmIChmaXQgPT09ICdjb250YWluJyB8fCBmaXQgPT09ICdzY2FsZS1kb3duJykge1xuICAgICAgY29uc3Qgc2MgPSBNYXRoLm1pbihkc3RXIC8gc3JjVywgZHN0SCAvIHNyY0gpO1xuICAgICAgY29uc3QgayA9IGZpdCA9PT0gJ3NjYWxlLWRvd24nID8gTWF0aC5taW4oMSwgc2MpIDogc2M7XG4gICAgICBjb25zdCB3cyA9IGsgKiBzcmNXLCBocyA9IGsgKiBzcmNIO1xuICAgICAgcmV0dXJuIFsoZHN0VyAtIHdzKSAvIDIsIChkc3RIIC0gaHMpIC8gMiwgd3MsIGhzXTtcbiAgICB9XG4gICAgaWYgKGZpdCA9PT0gJ2NvdmVyJykge1xuICAgICAgY29uc3Qgc2MgPSBNYXRoLm1heChkc3RXIC8gc3JjVywgZHN0SCAvIHNyY0gpO1xuICAgICAgY29uc3Qgd3MgPSBzYyAqIHNyY1csIGhzID0gc2MgKiBzcmNIO1xuICAgICAgcmV0dXJuIFsoZHN0VyAtIHdzKSAvIDIsIChkc3RIIC0gaHMpIC8gMiwgd3MsIGhzXTtcbiAgICB9XG4gICAgcmV0dXJuIFswLCAwLCBkc3RXLCBkc3RIXTsgLy8gJ2ZpbGwnXG4gIH1cblxuICBmdW5jdGlvbiBhdHRhY2godmlkZW8pIHtcbiAgICBpZiAoc2Vzc2lvbnMuaGFzKHZpZGVvKSkgcmV0dXJuIFByb21pc2UucmVzb2x2ZShzZXNzaW9ucy5nZXQodmlkZW8pKTtcbiAgICBjb25zdCBwZW5kaW5nID0gYXR0YWNoaW5nLmdldCh2aWRlbyk7XG4gICAgaWYgKHBlbmRpbmcpIHJldHVybiBwZW5kaW5nO1xuICAgIC8vIENhcHR1cmVkIGF0IGNhbGwgc2l0ZSB0byBjYXRjaCB1cCB0aGUgYXN5bmMgb3BlbigpIHByb2JlIGxhdGVuY3kgb24gYXR0YWNoLlxuICAgIGNvbnN0IGJpcnRoTXMgPSBjdXJyTXM7XG4gICAgY29uc3QgcCA9IGRvQXR0YWNoKHZpZGVvLCBiaXJ0aE1zKS5maW5hbGx5KCgpID0+IGF0dGFjaGluZy5kZWxldGUodmlkZW8pKTtcbiAgICBhdHRhY2hpbmcuc2V0KHZpZGVvLCBwKTtcbiAgICByZXR1cm4gcDtcbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIGRvQXR0YWNoKHZpZGVvLCBiaXJ0aE1zKSB7XG4gICAgLy8gdmlkZW8uc3JjIHJlZmxlY3RzIHNldHRlciBhc3NpZ25tZW50IHN5bmNocm9ub3VzbHk7IGN1cnJlbnRTcmMgbGFncyB1bnRpbCBsb2FkIHJ1bnMuXG4gICAgY29uc3Qgc3JjID0gdmlkZW8uc3JjIHx8IHZpZGVvLmN1cnJlbnRTcmM7XG4gICAgaWYgKCFzcmMpIHJldHVybiBudWxsO1xuICAgIC8vIGZyYW1lX3NlcnZlciBkZWNvZGVzIHZpYSBmZm1wZWcsIHdoaWNoIGNhbm5vdCByZWFkIGJyb3dzZXItaW50ZXJuYWwgVVJMcyDigJQgbGVhdmUgbmF0aXZlLlxuICAgIGlmICgvXihibG9iOnxkYXRhOnxtZWRpYXN0cmVhbTopL2kudGVzdChzcmMpKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCBmcHMgPSBwYXJzZUludCh2aWRlby5kYXRhc2V0LnB1cEZwcyB8fCAnMzAnLCAxMCk7XG4gICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2goU0NIRU1FICsgJ29wZW4/c3JjPScgKyBlbmNvZGVVUklDb21wb25lbnQoc3JjKSArICcmZnBzPScgKyBmcHMpO1xuICAgIGlmICghcmVzLm9rKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCBtZXRhID0gYXdhaXQgcmVzLmpzb24oKTtcbiAgICBjb25zdCBjdiA9IHNldHVwQ2FudmFzKHZpZGVvKTtcbiAgICBjb25zdCBwbGF5aW5nID0gdmlkZW8uYXV0b3BsYXkgfHwgIXZpZGVvLnBhdXNlZDtcbiAgICBjb25zdCBzdGF0ZSA9IHtcbiAgICAgIG1ldGE6IG1ldGEsXG4gICAgICBjdjogY3YsXG4gICAgICBjdHg6IGN2LmdldENvbnRleHQoJzJkJyksXG4gICAgICBwYXVzZWQ6ICFwbGF5aW5nLFxuICAgICAgY3VycmVudFRpbWU6IHBsYXlpbmcgPyBNYXRoLm1heCgwLCAoY3Vyck1zIC0gYmlydGhNcykgLyAxMDAwKSA6IDAsXG4gICAgICBlbmRlZDogZmFsc2UsXG4gICAgICBsYXN0RHJhd25JZHg6IC0xLFxuICAgICAgZmFpbHVyZXM6IDAsXG4gICAgICBkZWFkOiBmYWxzZSxcbiAgICB9O1xuICAgIHNlc3Npb25zLnNldCh2aWRlbywgc3RhdGUpO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh2aWRlbywgJ3ZpZGVvV2lkdGgnLCB7IHZhbHVlOiBtZXRhLndpZHRoLCBjb25maWd1cmFibGU6IHRydWUgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHZpZGVvLCAndmlkZW9IZWlnaHQnLCB7IHZhbHVlOiBtZXRhLmhlaWdodCwgY29uZmlndXJhYmxlOiB0cnVlIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh2aWRlbywgJ2R1cmF0aW9uJywgeyB2YWx1ZTogbWV0YS5kdXJhdGlvbiwgY29uZmlndXJhYmxlOiB0cnVlIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh2aWRlbywgJ3JlYWR5U3RhdGUnLCB7IHZhbHVlOiA0LCBjb25maWd1cmFibGU6IHRydWUgfSk7XG4gICAgLy8gU3RhbmRhcmQgSFRNTE1lZGlhRWxlbWVudCBsb2FkIGxpZmVjeWNsZSBzbyBwYWdlcyBhd2FpdGluZyB0aGVzZSBjYW4gcHJvY2VlZC5cbiAgICB2aWRlby5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgnbG9hZHN0YXJ0JykpO1xuICAgIHZpZGVvLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdkdXJhdGlvbmNoYW5nZScpKTtcbiAgICB2aWRlby5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgnbG9hZGVkbWV0YWRhdGEnKSk7XG4gICAgdmlkZW8uZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ2xvYWRlZGRhdGEnKSk7XG4gICAgdmlkZW8uZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ2NhbnBsYXknKSk7XG4gICAgdmlkZW8uZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ2NhbnBsYXl0aHJvdWdoJykpO1xuICAgIGlmIChwbGF5aW5nKSB7XG4gICAgICB2aWRlby5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgncGxheScpKTtcbiAgICAgIHZpZGVvLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdwbGF5aW5nJykpO1xuICAgIH1cbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBmdW5jdGlvbiBkZXRhY2godmlkZW8pIHtcbiAgICBjb25zdCBzdGF0ZSA9IHNlc3Npb25zLmdldCh2aWRlbyk7XG4gICAgaWYgKCFzdGF0ZSkgcmV0dXJuO1xuICAgIGZldGNoKFNDSEVNRSArICdjbG9zZT9pZD0nICsgc3RhdGUubWV0YS5pZCwgeyBrZWVwYWxpdmU6IHRydWUgfSk7XG4gICAgc3RhdGUuY3YucmVtb3ZlKCk7XG4gICAgc2Vzc2lvbnMuZGVsZXRlKHZpZGVvKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlc3VtZSh2aWRlbywgc3RhdGUpIHtcbiAgICBpZiAoIXN0YXRlLnBhdXNlZCAmJiAhc3RhdGUuZW5kZWQpIHJldHVybjtcbiAgICBzdGF0ZS5wYXVzZWQgPSBmYWxzZTtcbiAgICBzdGF0ZS5lbmRlZCA9IGZhbHNlO1xuICAgIHZpZGVvLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdwbGF5JykpO1xuICAgIHZpZGVvLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdwbGF5aW5nJykpO1xuICB9XG5cbiAgSFZFLnBsYXkgPSBmdW5jdGlvbigpIHtcbiAgICBjb25zdCB2aWRlbyA9IHRoaXM7XG4gICAgY29uc3Qgc3RhdGUgPSBzZXNzaW9ucy5nZXQodmlkZW8pO1xuICAgIGlmICghc3RhdGUpIHJldHVybiBhdHRhY2godmlkZW8pLnRoZW4oKHMpID0+IHsgaWYgKHMpIHJlc3VtZSh2aWRlbywgcyk7IH0pO1xuICAgIHJlc3VtZSh2aWRlbywgc3RhdGUpO1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgfTtcbiAgSFZFLnBhdXNlID0gZnVuY3Rpb24oKSB7XG4gICAgY29uc3Qgc3RhdGUgPSBzZXNzaW9ucy5nZXQodGhpcyk7XG4gICAgaWYgKCFzdGF0ZSkgeyBvcmlnUGF1c2UuY2FsbCh0aGlzKTsgcmV0dXJuOyB9XG4gICAgaWYgKCFzdGF0ZS5wYXVzZWQpIHtcbiAgICAgIHN0YXRlLnBhdXNlZCA9IHRydWU7XG4gICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdwYXVzZScpKTtcbiAgICB9XG4gIH07XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVkUsICdwYXVzZWQnLCB7XG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24oKSB7IGNvbnN0IHMgPSBzZXNzaW9ucy5nZXQodGhpcyk7IHJldHVybiBzID8gcy5wYXVzZWQgOiBwYXVzZWREZXNjLmdldC5jYWxsKHRoaXMpOyB9LFxuICB9KTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEhWRSwgJ2VuZGVkJywge1xuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkgeyBjb25zdCBzID0gc2Vzc2lvbnMuZ2V0KHRoaXMpOyByZXR1cm4gcyA/IHMuZW5kZWQgOiBlbmRlZERlc2MuZ2V0LmNhbGwodGhpcyk7IH0sXG4gIH0pO1xuICBpZiAoY3REZXNjKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEhWRSwgJ2N1cnJlbnRUaW1lJywge1xuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgY29uc3QgcyA9IHNlc3Npb25zLmdldCh0aGlzKTtcbiAgICAgICAgcmV0dXJuIHMgPyBzLmN1cnJlbnRUaW1lIDogY3REZXNjLmdldC5jYWxsKHRoaXMpO1xuICAgICAgfSxcbiAgICAgIHNldDogZnVuY3Rpb24odCkge1xuICAgICAgICBjb25zdCBzID0gc2Vzc2lvbnMuZ2V0KHRoaXMpO1xuICAgICAgICBpZiAoIXMpIHsgY3REZXNjLnNldC5jYWxsKHRoaXMsIHQpOyByZXR1cm47IH1cbiAgICAgICAgcy5jdXJyZW50VGltZSA9IE1hdGgubWF4KDAsIE1hdGgubWluKHQsIHMubWV0YS5kdXJhdGlvbikpO1xuICAgICAgICBpZiAocy5jdXJyZW50VGltZSA8IHMubWV0YS5kdXJhdGlvbikgcy5lbmRlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdzZWVraW5nJykpO1xuICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdzZWVrZWQnKSk7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ3RpbWV1cGRhdGUnKSk7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gb25TcmNDaGFuZ2UodmlkZW8pIHtcbiAgICBpZiAoc2Vzc2lvbnMuaGFzKHZpZGVvKSkgZGV0YWNoKHZpZGVvKTtcbiAgICBhdHRhY2godmlkZW8pO1xuICB9XG5cbiAgZnVuY3Rpb24gc2Nhbihyb290KSB7XG4gICAgaWYgKHJvb3QudGFnTmFtZSA9PT0gJ1ZJREVPJykgYXR0YWNoKHJvb3QpO1xuICAgIGlmIChyb290LnF1ZXJ5U2VsZWN0b3JBbGwpIHJvb3QucXVlcnlTZWxlY3RvckFsbCgndmlkZW8nKS5mb3JFYWNoKCh2KSA9PiBhdHRhY2godikpO1xuICB9XG4gIHNjYW4oZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KTtcbiAgbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKG11dHMpID0+IHtcbiAgICBmb3IgKGNvbnN0IG0gb2YgbXV0cykge1xuICAgICAgaWYgKG0udHlwZSA9PT0gJ2F0dHJpYnV0ZXMnICYmIG0udGFyZ2V0IGluc3RhbmNlb2YgSFRNTFZpZGVvRWxlbWVudCAmJiBtLmF0dHJpYnV0ZU5hbWUgPT09ICdzcmMnKSB7XG4gICAgICAgIG9uU3JjQ2hhbmdlKG0udGFyZ2V0KTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBmb3IgKGNvbnN0IG4gb2YgbS5hZGRlZE5vZGVzKSBpZiAobiBpbnN0YW5jZW9mIEVsZW1lbnQpIHNjYW4obik7XG4gICAgICBmb3IgKGNvbnN0IG4gb2YgbS5yZW1vdmVkTm9kZXMpIGlmIChuIGluc3RhbmNlb2YgSFRNTFZpZGVvRWxlbWVudCkgZGV0YWNoKG4pO1xuICAgIH1cbiAgfSkub2JzZXJ2ZShkb2N1bWVudCwgeyBzdWJ0cmVlOiB0cnVlLCBjaGlsZExpc3Q6IHRydWUsIGF0dHJpYnV0ZXM6IHRydWUsIGF0dHJpYnV0ZUZpbHRlcjogWydzcmMnXSB9KTtcblxuICBpZiAoc3JjRGVzYyAmJiBzcmNEZXNjLnNldCkge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVkUsICdzcmMnLCB7XG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQ6IHNyY0Rlc2MuZ2V0LFxuICAgICAgc2V0OiBmdW5jdGlvbih2KSB7XG4gICAgICAgIHNyY0Rlc2Muc2V0LmNhbGwodGhpcywgdik7XG4gICAgICAgIG9uU3JjQ2hhbmdlKHRoaXMpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIFJldHVybnMgdW5kZWZpbmVkIChzeW5jKSB3aGVuIG5vIHdvcmsg4oCUIGF2b2lkcyBhIG1pY3JvdGFzay1vbmx5IFByb21pc2UgQ0RQIG1heSBub3QgcmVwb3J0LlxuICBmdW5jdGlvbiBhZHZhbmNlKHRpbWVzdGFtcE1zKSB7XG4gICAgbGFzdE1zID0gY3Vyck1zO1xuICAgIGN1cnJNcyA9IHRpbWVzdGFtcE1zO1xuICAgIGNvbnN0IGR0ID0gTWF0aC5tYXgoMCwgY3Vyck1zIC0gbGFzdE1zKSAvIDEwMDA7XG4gICAgY29uc3Qgd29yayA9IFtdO1xuICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ3ZpZGVvJykuZm9yRWFjaCgodikgPT4ge1xuICAgICAgY29uc3Qgc3RhdGUgPSBzZXNzaW9ucy5nZXQodik7XG4gICAgICBpZiAoIXN0YXRlIHx8IHN0YXRlLmRlYWQpIHJldHVybjtcbiAgICAgIGlmICghc3RhdGUucGF1c2VkICYmICFzdGF0ZS5lbmRlZCkge1xuICAgICAgICBzdGF0ZS5jdXJyZW50VGltZSArPSBkdCAqICh2LnBsYXliYWNrUmF0ZSB8fCAxKTtcbiAgICAgICAgaWYgKHN0YXRlLmN1cnJlbnRUaW1lID49IHN0YXRlLm1ldGEuZHVyYXRpb24pIHtcbiAgICAgICAgICBpZiAodi5sb29wKSB7XG4gICAgICAgICAgICBzdGF0ZS5jdXJyZW50VGltZSA9IHN0YXRlLmN1cnJlbnRUaW1lICUgc3RhdGUubWV0YS5kdXJhdGlvbjtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3RhdGUuY3VycmVudFRpbWUgPSBzdGF0ZS5tZXRhLmR1cmF0aW9uO1xuICAgICAgICAgICAgc3RhdGUucGF1c2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIHN0YXRlLmVuZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHYuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ2VuZGVkJykpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCd0aW1ldXBkYXRlJykpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBObyBSZXNpemVPYnNlcnZlciB1bmRlciBwYXVzZWQgdnRpbWU7IHJlLXBpbiBnZW9tZXRyeSBldmVyeSB0aWNrLlxuICAgICAgc3luY092ZXJsYXkodiwgc3RhdGUuY3YpO1xuICAgICAgY29uc3QgaWR4ID0gTWF0aC5yb3VuZChzdGF0ZS5jdXJyZW50VGltZSAqIHN0YXRlLm1ldGEuZnBzKTtcbiAgICAgIGlmIChpZHggPT09IHN0YXRlLmxhc3REcmF3bklkeCkgcmV0dXJuO1xuICAgICAgd29yay5wdXNoKHBhaW50KHYsIHN0YXRlLCBpZHgpKTtcbiAgICB9KTtcbiAgICByZXR1cm4gd29yay5sZW5ndGggPyBQcm9taXNlLmFsbCh3b3JrKSA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIHBhaW50KHZpZGVvLCBzdGF0ZSwgaWR4KSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKFNDSEVNRSArICdmcmFtZT9pZD0nICsgc3RhdGUubWV0YS5pZCArICcmaWR4PScgKyBpZHgpO1xuICAgICAgLy8gNDEwIEdvbmUgPSBwYXN0IGxhc3QgZGVjb2RlZCBmcmFtZTsga2VlcCBsYXN0IGZyYW1lIG9uIGNhbnZhcy5cbiAgICAgIGlmIChyZXMuc3RhdHVzID09PSA0MTApIHJldHVybjtcbiAgICAgIGlmICghcmVzLm9rKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1twdXAtdmlkZW9dIGZyYW1lICcgKyBpZHggKyAnIGh0dHAgJyArIHJlcy5zdGF0dXMpO1xuICAgICAgICBpZiAoKytzdGF0ZS5mYWlsdXJlcyA+PSAzKSBzdGF0ZS5kZWFkID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgc3RhdGUuZmFpbHVyZXMgPSAwO1xuICAgICAgY29uc3QgYmxvYiA9IGF3YWl0IHJlcy5ibG9iKCk7XG4gICAgICBjb25zdCBibSA9IGF3YWl0IGNyZWF0ZUltYWdlQml0bWFwKGJsb2IpO1xuICAgICAgY29uc3QgY3YgPSBzdGF0ZS5jdjtcbiAgICAgIGNvbnN0IGZpdCA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHZpZGVvKS5vYmplY3RGaXQgfHwgJ2ZpbGwnO1xuICAgICAgY29uc3QgciA9IGZpdFJlY3QoeyBzcmNXOiBibS53aWR0aCwgc3JjSDogYm0uaGVpZ2h0LCBkc3RXOiBjdi53aWR0aCwgZHN0SDogY3YuaGVpZ2h0LCBmaXQgfSk7XG4gICAgICBzdGF0ZS5jdHguY2xlYXJSZWN0KDAsIDAsIGN2LndpZHRoLCBjdi5oZWlnaHQpO1xuICAgICAgc3RhdGUuY3R4LmRyYXdJbWFnZShibSwgclswXSwgclsxXSwgclsyXSwgclszXSk7XG4gICAgICBibS5jbG9zZSgpO1xuICAgICAgc3RhdGUubGFzdERyYXduSWR4ID0gaWR4O1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1twdXAtdmlkZW9dIHBhaW50IGZyYW1lICcgKyBpZHggKyAnIGZhaWxlZDogJyArIChlICYmIGUubWVzc2FnZSB8fCBlKSk7XG4gICAgICBpZiAoKytzdGF0ZS5mYWlsdXJlcyA+PSAzKSBzdGF0ZS5kZWFkID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICB3aW5kb3cuJHtWSURFT19TWU1CT0x9ID0geyBhZHZhbmNlOiBhZHZhbmNlIH07XG59KSgpO2A7XG5cbi8vIEJhY2tzdG9wIGFib3ZlIGZyYW1lX3NlcnZlcidzIDVzIHBlci1mcmFtZSB3YWl0LlxuY29uc3QgQURWQU5DRV9USU1FT1VUX01TID0gMTBfMDAwO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYWR2YW5jZVZpZGVvcyhmcmFtZTogV2ViRnJhbWVNYWluIHwgdW5kZWZpbmVkLCB0aW1lc3RhbXBNczogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gIC8vIEJsYW5rL25hdmlnYXRpbmcgZnJhbWUgb3JwaGFucyB0aGUgQ0RQIHByb21pc2U7IHNraXAuIFNoaW0gZmFpbHVyZSBtdXN0IG5vdCBhYm9ydCByZW5kZXIuXG4gIGlmICghZnJhbWUgfHwgIWZyYW1lLnVybCkgcmV0dXJuO1xuICB0cnkge1xuICAgIGNvbnN0IGV2ID0gZnJhbWUuZXhlY3V0ZUphdmFTY3JpcHQoYCR7SE9PS30gJHtWSURFT19TWU1CT0x9LmFkdmFuY2UoJHt0aW1lc3RhbXBNc30pYCk7XG4gICAgYXdhaXQgd2l0aFRpbWVvdXQoZXYsIEFEVkFOQ0VfVElNRU9VVF9NUywgXCJ2aWRlby5hZHZhbmNlXCIpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgbG9nZ2VyLndhcm4oVEFHLCBgYWR2YW5jZSBza2lwcGVkOiAke2UgaW5zdGFuY2VvZiBFcnJvciA/IGUubWVzc2FnZSA6IFN0cmluZyhlKX1gKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8wMS5cblxuaW1wb3J0IHR5cGUgeyBXZWJGcmFtZU1haW4gfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IHdpdGhUaW1lb3V0IH0gZnJvbSBcIi4uL2Jhc2UvdGltaW5nXCI7XG5pbXBvcnQgeyBhZHZhbmNlVmlkZW9zIH0gZnJvbSBcIi4vdmlkZW8vc2hpbVwiO1xuXG5leHBvcnQgY29uc3QgVElDS19TWU1CT0wgPSBcIl9fcHVwX3RpY2tfX1wiO1xuXG5jb25zdCBIT09LID0gYChmdW5jdGlvbigpIHtcbiAgaWYgKHdpbmRvdy5zZWxmID09PSB3aW5kb3cudG9wKSByZXR1cm47XG4gIGlmICh0eXBlb2YgJHtUSUNLX1NZTUJPTH0gIT09ICd1bmRlZmluZWQnKSByZXR1cm47XG5cbiAgY29uc3Qgb3JpZyA9IHtcbiAgICBEYXRlOiBEYXRlLFxuICAgIGRhdGVOb3c6IERhdGUubm93LmJpbmQoRGF0ZSksXG4gICAgcGVyZm9ybWFuY2VOb3c6IHBlcmZvcm1hbmNlLm5vdy5iaW5kKHBlcmZvcm1hbmNlKSxcbiAgICByYWY6IHJlcXVlc3RBbmltYXRpb25GcmFtZS5iaW5kKHdpbmRvdyksXG4gICAgY2FmOiBjYW5jZWxBbmltYXRpb25GcmFtZS5iaW5kKHdpbmRvdyksXG4gICAgc2V0VGltZW91dDogc2V0VGltZW91dC5iaW5kKHdpbmRvdyksXG4gICAgY2xlYXJUaW1lb3V0OiBjbGVhclRpbWVvdXQuYmluZCh3aW5kb3cpLFxuICAgIHNldEludGVydmFsOiBzZXRJbnRlcnZhbC5iaW5kKHdpbmRvdyksXG4gICAgY2xlYXJJbnRlcnZhbDogY2xlYXJJbnRlcnZhbC5iaW5kKHdpbmRvdyksXG4gIH07XG5cbiAgbGV0IGN1cnJNcyA9IDA7XG4gIGxldCByYWZRdWV1ZSA9IFtdO1xuICBjb25zdCB0aW1lcnMgPSB7fTtcbiAgbGV0IG5leHRJZCA9IDE7XG4gIGNvbnN0IGRhdGVPcmlnaW4gPSBuZXcgb3JpZy5EYXRlKCk7XG4gIGNvbnN0IHBlcmZPcmlnaW4gPSBvcmlnLnBlcmZvcm1hbmNlTm93KCk7XG5cbiAgcGVyZm9ybWFuY2Uubm93ID0gZnVuY3Rpb24oKSB7IHJldHVybiBwZXJmT3JpZ2luICsgY3Vyck1zOyB9O1xuICBEYXRlLm5vdyA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gZGF0ZU9yaWdpbi5nZXRUaW1lKCkgKyBjdXJyTXM7IH07XG4gIERhdGUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgTyA9IG9yaWcuRGF0ZTtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIG5ldyBPKGRhdGVPcmlnaW4uZ2V0VGltZSgpICsgY3Vyck1zKTtcbiAgICByZXR1cm4gbmV3IChGdW5jdGlvbi5wcm90b3R5cGUuYmluZC5hcHBseShPLCBbbnVsbF0uY29uY2F0KEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cykpKSkoKTtcbiAgfTtcbiAgRGF0ZS5ub3cgPSBmdW5jdGlvbigpIHsgcmV0dXJuIGRhdGVPcmlnaW4uZ2V0VGltZSgpICsgY3Vyck1zOyB9O1xuICBEYXRlLnBhcnNlID0gb3JpZy5EYXRlLnBhcnNlO1xuICBEYXRlLlVUQyA9IG9yaWcuRGF0ZS5VVEM7XG4gIERhdGUucHJvdG90eXBlID0gb3JpZy5EYXRlLnByb3RvdHlwZTtcblxuICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gZnVuY3Rpb24oY2IpIHtcbiAgICBjb25zdCBpZCA9IG5leHRJZCsrO1xuICAgIHJhZlF1ZXVlLnB1c2goeyBpZCwgY2IgfSk7XG4gICAgcmV0dXJuIGlkO1xuICB9O1xuICB3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUgPSBmdW5jdGlvbihpZCkge1xuICAgIHJhZlF1ZXVlID0gcmFmUXVldWUuZmlsdGVyKChyKSA9PiByLmlkICE9PSBpZCk7XG4gIH07XG5cbiAgd2luZG93LnNldFRpbWVvdXQgPSBmdW5jdGlvbihjYiwgZGVsYXksIC4uLmFyZ3MpIHtcbiAgICBjb25zdCBpZCA9IG5leHRJZCsrO1xuICAgIHRpbWVyc1tpZF0gPSB7IHR5cGU6ICd0aW1lb3V0JywgY2IsIGRlbGF5OiBkZWxheSB8fCAwLCBuZXh0OiBjdXJyTXMgKyAoZGVsYXkgfHwgMCksIGFyZ3MgfTtcbiAgICByZXR1cm4gaWQ7XG4gIH07XG4gIHdpbmRvdy5jbGVhclRpbWVvdXQgPSBmdW5jdGlvbihpZCkgeyBkZWxldGUgdGltZXJzW2lkXTsgfTtcblxuICB3aW5kb3cuc2V0SW50ZXJ2YWwgPSBmdW5jdGlvbihjYiwgZGVsYXksIC4uLmFyZ3MpIHtcbiAgICBjb25zdCBpZCA9IG5leHRJZCsrO1xuICAgIGNvbnN0IGQgPSBNYXRoLm1heChkZWxheSB8fCAwLCAxKTtcbiAgICB0aW1lcnNbaWRdID0geyB0eXBlOiAnaW50ZXJ2YWwnLCBjYiwgZGVsYXk6IGQsIG5leHQ6IGN1cnJNcyArIGQsIGFyZ3MgfTtcbiAgICByZXR1cm4gaWQ7XG4gIH07XG4gIHdpbmRvdy5jbGVhckludGVydmFsID0gZnVuY3Rpb24oaWQpIHsgZGVsZXRlIHRpbWVyc1tpZF07IH07XG5cbiAgZnVuY3Rpb24gc2FmZUludm9rZShmbiwgYXJncykge1xuICAgIHRyeSB7XG4gICAgICBpZiAodHlwZW9mIGZuID09PSAnc3RyaW5nJykgZXZhbChmbik7XG4gICAgICBlbHNlIGZuLmFwcGx5KHVuZGVmaW5lZCwgYXJncyB8fCBbXSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS5lcnJvcignW1RpY2tdIGVycm9yOicsIGUgJiYgZS5zdGFjayB8fCBlKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBwcm9jZXNzKHRpbWVzdGFtcE1zKSB7XG4gICAgY3Vyck1zID0gdGltZXN0YW1wTXM7XG4gICAgZG9jdW1lbnQuZ2V0QW5pbWF0aW9ucygpLmZvckVhY2goYSA9PiB7XG4gICAgICBhLnBhdXNlKCk7XG4gICAgICBhLmN1cnJlbnRUaW1lID0gY3Vyck1zO1xuICAgIH0pO1xuICAgIGNvbnN0IGlkcyA9IE9iamVjdC5rZXlzKHRpbWVycyk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHQgPSB0aW1lcnNbaWRzW2ldXTtcbiAgICAgIGlmICghdCkgY29udGludWU7XG4gICAgICB3aGlsZSAodC5uZXh0IDw9IGN1cnJNcykge1xuICAgICAgICBzYWZlSW52b2tlKHQuY2IsIHQuYXJncyk7XG4gICAgICAgIGlmICh0LnR5cGUgPT09ICd0aW1lb3V0JykgeyBkZWxldGUgdGltZXJzW2lkc1tpXV07IGJyZWFrOyB9XG4gICAgICAgIHQubmV4dCArPSB0LmRlbGF5O1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCByYWZzID0gcmFmUXVldWUuc3BsaWNlKDApO1xuICAgIGZvciAobGV0IGogPSAwOyBqIDwgcmFmcy5sZW5ndGg7IGorKykge1xuICAgICAgc2FmZUludm9rZShyYWZzW2pdLmNiLCBbY3Vyck1zXSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZWplY3QoKSB7XG4gICAgRGF0ZSA9IG9yaWcuRGF0ZTtcbiAgICBwZXJmb3JtYW5jZS5ub3cgPSBvcmlnLnBlcmZvcm1hbmNlTm93O1xuICAgIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPSBvcmlnLnJhZjtcbiAgICB3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUgPSBvcmlnLmNhZjtcbiAgICB3aW5kb3cuc2V0VGltZW91dCA9IG9yaWcuc2V0VGltZW91dDtcbiAgICB3aW5kb3cuY2xlYXJUaW1lb3V0ID0gb3JpZy5jbGVhclRpbWVvdXQ7XG4gICAgd2luZG93LnNldEludGVydmFsID0gb3JpZy5zZXRJbnRlcnZhbDtcbiAgICB3aW5kb3cuY2xlYXJJbnRlcnZhbCA9IG9yaWcuY2xlYXJJbnRlcnZhbDtcbiAgICBkZWxldGUgd2luZG93LiR7VElDS19TWU1CT0x9O1xuICB9XG5cbiAgd2luZG93LiR7VElDS19TWU1CT0x9ID0geyBwcm9jZXNzOiBwcm9jZXNzLCBlamVjdDogZWplY3QgfTtcbn0pKCk7YDtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRpY2soZnJhbWU6IFdlYkZyYW1lTWFpbiB8IHVuZGVmaW5lZCwgdGltZXN0YW1wTXM6IG51bWJlcikge1xuICBpZiAoIWZyYW1lKSByZXR1cm47XG4gIC8vIFBlci1jYWxsYmFjayBlcnJvcnMgYXJlIHN3YWxsb3dlZCBpbnNpZGUgSE9PSyAoc2VlIHNhZmVJbnZva2UpLiBPbmx5IENEUC90aW1lb3V0IGZhaWx1cmVzXG4gIC8vIHN1cmZhY2UgaGVyZSDigJQgdGhleSBzaWduYWwgYSByZWFsIGZhdWx0IChyZW5kZXJlciBoYW5nLCBJUEMgYnJva2VuKSBhbmQgbXVzdCBwcm9wYWdhdGUuXG4gIGNvbnN0IHRpY2tFdiA9IGZyYW1lLmV4ZWN1dGVKYXZhU2NyaXB0KGAke0hPT0t9ICR7VElDS19TWU1CT0x9LnByb2Nlc3MoJHt0aW1lc3RhbXBNc30pYCk7XG4gIGF3YWl0IFByb21pc2UuYWxsKFt3aXRoVGltZW91dCh0aWNrRXYsIDVfMDAwLCBcInRpY2suZXhlY3V0ZUphdmFTY3JpcHRcIiksIGFkdmFuY2VWaWRlb3MoZnJhbWUsIHRpbWVzdGFtcE1zKV0pO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMy8xMy5cblxuaW1wb3J0IHtcbiAgdHlwZSBCcm93c2VyV2luZG93LFxuICB0eXBlIEV2ZW50LFxuICB0eXBlIE5hdGl2ZUltYWdlLFxuICB0eXBlIFJlY3RhbmdsZSxcbiAgdHlwZSBTaXplLFxuICB0eXBlIFdlYkNvbnRlbnRzUGFpbnRFdmVudFBhcmFtcyxcbn0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBwYXVzZVZpcnR1YWxUaW1lLCByZXNpemVEcmF3YWJsZSB9IGZyb20gXCIuLi9iYXNlL2NkcFwiO1xuaW1wb3J0IHsgRW5jb2RlclBpcGVsaW5lIH0gZnJvbSBcIi4uL2Jhc2UvZW5jb2Rlci9waXBlbGluZVwiO1xuaW1wb3J0IHsgc2l6ZUVxdWFscyB9IGZyb20gXCIuLi9iYXNlL2ltYWdlXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi4vYmFzZS9sb2dnaW5nXCI7XG5pbXBvcnQgeyB0eXBlIElwY0RvbmVQYXlsb2FkIH0gZnJvbSBcIi4vaXBjXCI7XG5pbXBvcnQgdHlwZSB7IElQQ1JlbmRlck9wdGlvbnMgfSBmcm9tIFwiLi9zY2hlbWFcIjtcbmltcG9ydCB7IGRlY29kZVN0ZWdvLCBzd2FwQnVmZmVyIH0gZnJvbSBcIi4vc3RlZ29cIjtcbmltcG9ydCB7IHRpY2sgfSBmcm9tIFwiLi90aWNrXCI7XG5pbXBvcnQgeyBmcmFtZVNlcnZlciB9IGZyb20gXCIuL3ZpZGVvL2ZyYW1lX3NlcnZlclwiO1xuaW1wb3J0IHsgZGlzcG9zZVdpbmRvdywgbG9hZFdpbmRvdyB9IGZyb20gXCIuL3dpbmRvd1wiO1xuXG5jb25zdCBUQUcgPSBcIltTaG9vdF1cIjtcblxuaW50ZXJmYWNlIFBhaW50T3B0aW9ucyB7XG4gIHNvdXJjZTogc3RyaW5nO1xuICB3aW46IEJyb3dzZXJXaW5kb3c7XG4gIHNpemU6IFNpemU7XG4gIG1zOiBudW1iZXI7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHBhaW50KHsgc291cmNlLCB3aW4sIHNpemUsIG1zIH06IFBhaW50T3B0aW9ucyk6IFByb21pc2U8QnVmZmVyPiB7XG4gIGxldCBsYXN0VHM6IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgbGV0IGxhZ2d5ID0gMDtcbiAgbGV0IHN0dWNrID0gMDtcbiAgbGV0IGludGVydmFsOiBOb2RlSlMuVGltZW91dCB8IHVuZGVmaW5lZDtcbiAgY29uc3QgY2RwID0gd2luLndlYkNvbnRlbnRzLmRlYnVnZ2VyO1xuICBjb25zdCBmcmFtZVNpemU6IFNpemUgPSB7IHdpZHRoOiBzaXplLndpZHRoLCBoZWlnaHQ6IHNpemUuaGVpZ2h0ICsgMSB9O1xuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBuZXcgUHJvbWlzZTxCdWZmZXI+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgICBpZiAoc3R1Y2sgPj0gMykge1xuICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoXCJkcmF3YWJsZSB0aW1lb3V0XCIpKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgc3R1Y2srKztcbiAgICAgICAgbG9nZ2VyLndhcm4oVEFHLCBgJHtzb3VyY2V9IHJlbmRlciBpcyBleHRyZW1lbHkgc2xvdyBAICR7bXN9LCBjdXJyZW50OiAke2xhc3RUc30gd2l0aCAke3N0dWNrfSByZXBlYXRzYCk7XG4gICAgICAgIHdpbi53ZWJDb250ZW50cy5pbnZhbGlkYXRlKCk7XG4gICAgICB9LCAxMDAwKTtcbiAgICAgIGNvbnN0IGhhbmRsZXIgPSAoX2U6IEV2ZW50PFdlYkNvbnRlbnRzUGFpbnRFdmVudFBhcmFtcz4sIF9kOiBSZWN0YW5nbGUsIGltYWdlOiBOYXRpdmVJbWFnZSkgPT4ge1xuICAgICAgICBjb25zdCBpbWFnZVNpemUgPSBpbWFnZS5nZXRTaXplKCk7XG4gICAgICAgIGlmICghc2l6ZUVxdWFscyhpbWFnZVNpemUsIGZyYW1lU2l6ZSkpIHtcbiAgICAgICAgICAvLyBOT1RFKEF1dG9rYWthKTogV2UgbXVzdCBlbnN1cmUgZnJhbWUgaXMgcmVhZHkgb24gZWxlY3Ryb24gdjQxK1xuICAgICAgICAgIHJlc2l6ZURyYXdhYmxlKGNkcCwgZnJhbWVTaXplKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYml0bWFwID0gaW1hZ2UudG9CaXRtYXAoKTtcbiAgICAgICAgY29uc3QgdHMgPSBkZWNvZGVTdGVnbyhiaXRtYXAsIGltYWdlU2l6ZSk7XG4gICAgICAgIGlmICh0cyA9PT0gdW5kZWZpbmVkIHx8IE1hdGguYWJzKHRzIC0gbXMpID4gMSkge1xuICAgICAgICAgIGxhc3RUcyA9IHRzO1xuICAgICAgICAgIGxhZ2d5Kys7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHdpbi53ZWJDb250ZW50cy5vZmYoXCJwYWludFwiLCBoYW5kbGVyKTtcbiAgICAgICAgcmVzb2x2ZShCdWZmZXIuZnJvbShiaXRtYXAuYnVmZmVyLCBiaXRtYXAuYnl0ZU9mZnNldCwgc2l6ZS5oZWlnaHQgKiBzaXplLndpZHRoICogNCkpO1xuICAgICAgICB3aW4ud2ViQ29udGVudHMuc3RvcFBhaW50aW5nKCk7XG4gICAgICAgIC8vIENvbXBvc2l0b3IgY2FwLCBOT1Qgb3V0cHV0IGZwcy4gTWF4IGl0IHNvIHBhaW50IGV2ZW50cyBhcnJpdmUgd2l0aG91dCBpbnRlci1mcmFtZSB3YWxsIGRlbGF5LlxuICAgICAgICB3aW4ud2ViQ29udGVudHMuc2V0RnJhbWVSYXRlKDI0MCk7XG4gICAgICB9O1xuICAgICAgd2luLndlYkNvbnRlbnRzLm9uKFwicGFpbnRcIiwgaGFuZGxlcik7XG4gICAgICB3aW4ud2ViQ29udGVudHMuc3RhcnRQYWludGluZygpO1xuICAgIH0pO1xuICB9IGZpbmFsbHkge1xuICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWwpO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzaG9vdChvcHRpb25zOiBJUENSZW5kZXJPcHRpb25zKTogUHJvbWlzZTxJcGNEb25lUGF5bG9hZD4ge1xuICBjb25zdCB7IHNvdXJjZSwgZnBzLCB3aWR0aCwgaGVpZ2h0LCBkdXJhdGlvbiwgd2l0aEF1ZGlvLCBvdXRGaWxlLCBkaXNhYmxlSHdDb2RlYywgc2lnbmFsLCBvblByb2dyZXNzIH0gPSBvcHRpb25zO1xuICBpZiAod2l0aEF1ZGlvKSBsb2dnZXIud2FybihUQUcsIFwiYXVkaW8gd2lsbCBiZSBpZ25vcmVkIG9uIHRoaXMgbW9kZVwiKTtcblxuICBjb25zdCB0SW5pdCA9IHBlcmZvcm1hbmNlLm5vdygpO1xuICBjb25zdCB3aW5QID0gbG9hZFdpbmRvdyh7IHNvdXJjZSwgcmVuZGVyZXI6IG9wdGlvbnMsIHNpZ25hbCB9KTtcbiAgYXdhaXQgdXNpbmcgcGlwZWxpbmUgPSBhd2FpdCBFbmNvZGVyUGlwZWxpbmUuY3JlYXRlKHsgd2lkdGgsIGhlaWdodCwgZnBzLCBvdXRGaWxlLCB3aXRoQXVkaW8sIGRpc2FibGVId0NvZGVjIH0pO1xuICBjb25zdCB3aW4gPSBhd2FpdCB3aW5QO1xuICBsb2dnZXIuZGVidWcoVEFHLCBcImluaXQgZG9uZTpcIiwgeyBzb3VyY2UsIGNvc3Q6IHBlcmZvcm1hbmNlLm5vdygpIC0gdEluaXQgfSk7XG5cbiAgY29uc3QgdG90YWwgPSBNYXRoLmNlaWwoZnBzICogZHVyYXRpb24pO1xuICBjb25zdCBmcmFtZUludGVydmFsID0gMTAwMCAvIGZwcztcblxuICBsZXQgd3JpdHRlbiA9IDA7XG4gIGxldCBwcm9ncmVzcyA9IDA7XG4gIGxldCBlbmNvZGVFcnJvcjogRXJyb3IgfCB1bmRlZmluZWQ7XG4gIGNvbnN0IGNkcCA9IHdpbi53ZWJDb250ZW50cy5kZWJ1Z2dlcjtcbiAgY29uc3QgbWFpbiA9IHdpbi53ZWJDb250ZW50cy5tYWluRnJhbWU7XG4gIGNvbnN0IGlmcmFtZSA9IG1haW4uZnJhbWVzWzBdO1xuICB0cnkge1xuICAgIHdpbi53ZWJDb250ZW50cy5zZXRGcmFtZVJhdGUoZnBzKTtcbiAgICB3aW4ud2ViQ29udGVudHMuc3RvcFBhaW50aW5nKCk7XG4gICAgYXdhaXQgcGF1c2VWaXJ0dWFsVGltZShjZHApO1xuXG4gICAgZm9yIChsZXQgZnJhbWUgPSAwOyBmcmFtZSA8IHRvdGFsOyBmcmFtZSsrKSB7XG4gICAgICBzaWduYWw/LnRocm93SWZBYm9ydGVkKCk7XG4gICAgICBjb25zdCBmcmFtZU1zID0gKGZyYW1lICsgMSkgKiBmcmFtZUludGVydmFsO1xuXG4gICAgICBhd2FpdCB0aWNrKGlmcmFtZSwgZnJhbWVNcyk7XG4gICAgICBhd2FpdCBzd2FwQnVmZmVyKHdpbi53ZWJDb250ZW50cywgZnJhbWVNcywgZnJhbWVJbnRlcnZhbCk7XG4gICAgICBjb25zdCBiaXRtYXAgPSBhd2FpdCBwYWludCh7IHNvdXJjZSwgd2luLCBzaXplOiB7IHdpZHRoLCBoZWlnaHQgfSwgbXM6IGZyYW1lTXMgfSk7XG4gICAgICAvLyBLaWNrIG9mZiBlbmNvZGUgd2l0aG91dCBhd2FpdGluZzsgcGlwZWxpbmUgbGltaXRlciBzZXJpYWxpemVzIGludGVybmFsbHkuXG4gICAgICAvLyBFbmNvZGUgcnVucyBjb25jdXJyZW50IHdpdGggbmV4dCBmcmFtZSdzIENEUC9wYWludCBzZXR1cC5cbiAgICAgIHBpcGVsaW5lLmVuY29kZUJHUkEoYml0bWFwKS5jYXRjaCgoZSkgPT4gKGVuY29kZUVycm9yID8/PSBlKSk7XG4gICAgICB3cml0dGVuKys7XG4gICAgICBpZiAoZW5jb2RlRXJyb3IpIHRocm93IGVuY29kZUVycm9yO1xuXG4gICAgICBjb25zdCBuZXdQcm9ncmVzcyA9IE1hdGguZmxvb3IoKHdyaXR0ZW4gLyB0b3RhbCkgKiAxMDApO1xuICAgICAgaWYgKE1hdGguYWJzKG5ld1Byb2dyZXNzIC0gcHJvZ3Jlc3MpID4gMTApIHtcbiAgICAgICAgcHJvZ3Jlc3MgPSBuZXdQcm9ncmVzcztcbiAgICAgICAgb25Qcm9ncmVzcyhwcm9ncmVzcyk7XG4gICAgICB9XG4gICAgfVxuICB9IGZpbmFsbHkge1xuICAgIGZyYW1lU2VydmVyLmNsb3NlQWxsKCk7XG4gICAgYXdhaXQgZGlzcG9zZVdpbmRvdyh3aW4pO1xuICAgIGF3YWl0IHBpcGVsaW5lLmZpbmlzaCgpO1xuICB9XG5cbiAgaWYgKGVuY29kZUVycm9yKSB0aHJvdyBlbmNvZGVFcnJvcjtcbiAgaWYgKHdyaXR0ZW4gPT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJubyBmcmFtZXMgY2FwdHVyZWRcIik7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHsgd3JpdHRlbiwgamFuazogMCwgb3V0RmlsZSB9O1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAxLzMwLlxuXG5pbXBvcnQgeyBvayB9IGZyb20gXCJhc3NlcnRcIjtcbmltcG9ydCB7IGFwcCwgTWVudSB9IGZyb20gXCJlbGVjdHJvblwiO1xuaW1wb3J0IHsgbWtkaXIgfSBmcm9tIFwiZnMvcHJvbWlzZXNcIjtcbmltcG9ydCB7IGRpcm5hbWUgfSBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHsgc3RhcnRFbGVjdHJvbkNyYXNoUmVwb3J0ZXIgfSBmcm9tIFwiLi9iYXNlL2NyYXNoXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi9iYXNlL2xvZ2dpbmdcIjtcbmltcG9ydCB7IG1ha2VDTEkgfSBmcm9tIFwiLi9jb21tb25cIjtcbmltcG9ydCB7IElwY01zZ1R5cGUsIElwY1dyaXRlciwgdHlwZSBJcGNNc2cgfSBmcm9tIFwiLi9yZW5kZXJlci9pcGNcIjtcbmltcG9ydCB7IHNldHVwRnJhbWVQcm90b2NvbCB9IGZyb20gXCIuL3JlbmRlcmVyL3ZpZGVvL3Byb3RvY29sXCI7XG5pbXBvcnQgeyBzZXR1cFB1cFByb3RvY29sIH0gZnJvbSBcIi4vcmVuZGVyZXIvcHJvdG9jb2xcIjtcbmltcG9ydCB7IHJlbmRlciB9IGZyb20gXCIuL3JlbmRlcmVyL3JlbmRlclwiO1xuaW1wb3J0IHsgd2l0aFJlcmVuZGVyIH0gZnJvbSBcIi4vcmVuZGVyZXIvcmVyZW5kZXJcIjtcbmltcG9ydCB7IHNob290IH0gZnJvbSBcIi4vcmVuZGVyZXIvc2hvb3RcIjtcblxuY29uc3QgVEFHID0gXCJbQXBwXVwiO1xuXG5mdW5jdGlvbiBwcmludEZlYXR1cmVzKCkge1xuICBsb2dnZXIuZGVidWcoVEFHLCBcImdwdSBmZWF0dXJlczpcIiwgYXBwLmdldEdQVUZlYXR1cmVTdGF0dXMoKSk7XG59XG5cbmNvbnN0IGN0cmwgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG5sZXQgZXhpdGluZyA9IGZhbHNlO1xuXG5zdGFydEVsZWN0cm9uQ3Jhc2hSZXBvcnRlcigpO1xuTWVudS5zZXRBcHBsaWNhdGlvbk1lbnUobnVsbCk7XG5hcHAuZG9jaz8uaGlkZSgpO1xuYXBwLm9uKFwid2luZG93LWFsbC1jbG9zZWRcIiwgKCkgPT4ge30pO1xuYXBwLm9uKFwiZ3B1LWluZm8tdXBkYXRlXCIsIHByaW50RmVhdHVyZXMpO1xuYXBwLm9uKFwiYmVmb3JlLXF1aXRcIiwgKGUpID0+ICFleGl0aW5nICYmIGUucHJldmVudERlZmF1bHQoKSk7XG5hcHAub24oXCJ3aWxsLXF1aXRcIiwgKGUpID0+ICFleGl0aW5nICYmIGUucHJldmVudERlZmF1bHQoKSk7XG5cbm9rKHByb2Nlc3Muc2VuZCwgXCJpcGMgY2hhbm5lbCBtaXNzaW5nIOKAlCBzcGF3biB3aXRoIHN0ZGlvWzNdPSdpcGMnXCIpO1xucHJvY2Vzcy5vbmNlKFwiZGlzY29ubmVjdFwiLCAoKSA9PiBjdHJsLmFib3J0KFwiZGlzY29ubmVjdFwiKSk7XG5wcm9jZXNzLm9uKFwibWVzc2FnZVwiLCAocmF3KSA9PiB7XG4gIGNvbnN0IG1zZyA9IHJhdyBhcyBJcGNNc2c7XG4gIGlmIChtc2cudHlwZSA9PT0gSXBjTXNnVHlwZS5DQU5DRUwpIGN0cmwuYWJvcnQobXNnLnJlYXNvbik7XG59KTtcblxubWFrZUNMSSh7XG4gIG5hbWU6IFwiYXBwXCIsXG4gIHJ1bjogYXN5bmMgKHNvdXJjZSwgb3B0aW9ucykgPT4ge1xuICAgIGNvbnN0IGlwYyA9IG5ldyBJcGNXcml0ZXIoKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgYXBwLndoZW5SZWFkeSgpO1xuICAgICAgc2V0dXBQdXBQcm90b2NvbCgpO1xuICAgICAgc2V0dXBGcmFtZVByb3RvY29sKCk7XG4gICAgICBwcmludEZlYXR1cmVzKCk7XG4gICAgICBmb3IgKGNvbnN0IG91dCBvZiBvcHRpb25zLm91dEZpbGUuc3BsaXQoXCIsXCIpKSB7XG4gICAgICAgIGF3YWl0IG1rZGlyKGRpcm5hbWUob3V0KSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICB9XG4gICAgICBjb25zdCBhY3Rpb24gPSBvcHRpb25zLmRldGVybWluaXN0aWMgPyBzaG9vdCA6IHJlbmRlcjtcbiAgICAgIGN0cmwuc2lnbmFsLnRocm93SWZBYm9ydGVkKCk7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB3aXRoUmVyZW5kZXIoKCkgPT5cbiAgICAgICAgYWN0aW9uKHtcbiAgICAgICAgICBzb3VyY2UsXG4gICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICBzaWduYWw6IGN0cmwuc2lnbmFsLFxuICAgICAgICAgIG9uUHJvZ3Jlc3M6IChwKSA9PiBpcGMud3JpdGVQcm9ncmVzcyhwKSxcbiAgICAgICAgICBvbkNvbnNvbGU6IChsLCBtKSA9PiBpcGMud3JpdGVDb25zb2xlKGwsIG0pLFxuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgICBhd2FpdCBpcGMud3JpdGVEb25lKHJlc3VsdCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc3QgZXJyb3IgPSBlIGFzIEVycm9yO1xuICAgICAgY29uc3QgbSA9IGVycm9yLnN0YWNrID8/IGVycm9yLm1lc3NhZ2UgPz8gU3RyaW5nKGUgPz8gXCJ1bmtub3duIGVycm9yXCIpO1xuICAgICAgYXdhaXQgaXBjLndyaXRlRXJyb3IobSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGV4aXRpbmcgPSB0cnVlO1xuICAgICAgYXBwLmV4aXQoKTtcbiAgICB9XG4gIH0sXG59KTtcbiJdfQ==
|