pup-recorder 0.2.7 → 0.3.0
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/README.md +22 -55
- package/build.ts +0 -3
- package/dist/_tsup-dts-rollup.d.ts +158 -19
- package/dist/app.cjs +29 -13
- package/dist/chunk-G3FZJBQC.js +96 -0
- package/dist/cli.js +2 -2
- package/dist/index.d.ts +2 -1
- package/dist/index.js +2 -2
- package/package.json +14 -2
- package/dist/chunk-3POZKRKH.js +0 -2
package/dist/app.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
'use strict';require('source-map-support/register.js');var assert=require('assert'),electron=require('electron'),promises=require('fs/promises'),path=require('path'),module$1=require('module'),nodeAv=require('node-av'),constants=require('node-av/constants'),commander=require('commander'),
|
|
1
|
+
'use strict';require('source-map-support/register.js');var assert=require('assert'),electron=require('electron'),promises=require('fs/promises'),path=require('path'),module$1=require('module'),nodeAv=require('node-av'),constants=require('node-av/constants'),commander=require('commander'),C=require('zod'),net=require('net'),api=require('node-av/api'),crypto=require('crypto'),os=require('os'),promises$1=require('timers/promises'),url=require('url');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var C__default=/*#__PURE__*/_interopDefault(C);var pr=Object.create;var Ae=Object.defineProperty;var mr=Object.getOwnPropertyDescriptor;var ae=(r,e)=>(e=Symbol[r])?e:Symbol.for("Symbol."+r),T=r=>{throw TypeError(r)};var nt=(r,e,t)=>e in r?Ae(r,e,{enumerable:true,configurable:true,writable:true,value:t}):r[e]=t;var at=r=>[,,,pr(null)],st=["class","method","getter","setter","accessor","field","value","get","set"],Z=r=>r!==void 0&&typeof r!="function"?T("Function expected"):r,lr=(r,e,t,o,i)=>({kind:st[r],name:e,metadata:o,addInitializer:n=>t._?T("Already initialized"):i.push(Z(n||null))}),ke=(r,e)=>nt(e,ae("metadata"),r[3]),ct=(r,e,t,o)=>{for(var i=0,n=r[e>>1],c=n&&n.length;i<c;i++)n[i].call(t);return o},U=(r,e,t,o,i,n)=>{var s,a,u,p,d=e&7,m=false,l=false,g=2,b=st[d+5],E=r[g]||(r[g]=[]),x=((i=i.prototype),mr(i,t));for(var y=o.length-1;y>=0;y--)u=lr(d,t,a={},r[3],E),(u.static=m,u.private=l,p=u.access={has:h=>t in h},(p.get=h=>h[t]),d>2),s=(0, o[y])(x[b],u),a._=1,Z(s)&&(x[b]=s);return x&&Ae(i,t,x),i},ut=(r,e,t)=>nt(r,e+"",t);var v=(r,e,t)=>{if(e!=null){typeof e!="object"&&typeof e!="function"&&T("Object expected");var o,i;t&&(o=e[ae("asyncDispose")]),o===void 0&&(o=e[ae("dispose")],t&&(i=o)),typeof o!="function"&&T("Object not disposable"),i&&(o=function(){try{i.call(this);}catch(n){return Promise.reject(n)}}),r.push([t,o,e]);}else t&&r.push([t]);return e},F=(r,e,t)=>{var o=typeof SuppressedError=="function"?SuppressedError:function(c,s,a,u){return u=Error(a),u.name="SuppressedError",u.error=c,u.suppressed=s,u},i=c=>e=t?new o(c,e,"An error was suppressed during disposal"):(t=true,c),n=c=>{for(;c=r.pop();)try{var s=c[1]&&c[1].call(c[2]);if(c[0])return Promise.resolve(s).then(n,a=>(i(a),n()))}catch(a){i(a);}if(t)throw e};return n()};var wr=()=>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,f=wr();function dt(r,e,t){try{return e(process.env[r])}catch{return t}}function B(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 xr=module$1.createRequire(f),ee=process.env,pt=dt("PUP_LOG_LEVEL",B,2),mt=ee.PUP_USE_INNER_PROXY==="1",lt=ee.PUP_DISABLE_GPU==="1",ft=ee.PUP_DETERMINISTIC==="1",yr=path.dirname(xr.resolve("pup-recorder/package.json"));path.join(yr,"dist","app.cjs");var Te=ee.PUP_IPC_SOCKET;ee.PUP_EXPERIMENTAL_PUPPETEER==="1";var Be="<pup@debug>",Oe="<pup@info>",Me="<pup@warn>",Ne="<pup@error>",De="<pup@fatal>";function te(r,e){return function(...t){let o=t.map(i=>i instanceof Error?i.stack??String(i):i);return r.call(this,...o)}}var ht,wt,_t,gt,bt,O;bt=[te],gt=[te],_t=[te],wt=[te],ht=[te];var k=class{constructor(e=pt){this._level=e;ct(O,5,this);ut(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,i=e.warn??console.warn,n=e.error??console.error,c=this._level;this._impl={debug:c>=3?t:void 0,info:c>=2?o:void 0,warn:c>=1?i:void 0,error:c>=0?n:void 0};}debug(...e){this.impl?.debug?.(Be,...e);}info(...e){this.impl?.info?.(Oe,...e);}warn(...e){this.impl?.warn?.(Me,...e);}error(...e){this.impl?.error?.(Ne,...e);}fatal(...e){this.impl?.error?.(De,...e),process.exit(1);}dispatch(e){let t=e.trimEnd();t.startsWith(Be)?this.debug(t.slice(Be.length+1)):t.startsWith(Oe)?this.info(t.slice(Oe.length+1)):t.startsWith(Me)?this.warn(t.slice(Me.length+1)):t.startsWith(Ne)?this.error(t.slice(Ne.length+1)):this.info(t);}attach(e,t){return new Promise((o,i)=>{this.debug(`${t}.attach`);let n="",c=s=>{let a=s.toString();a.startsWith(De)?n+=a.slice(De.length+1):this.dispatch(a);};e.stderr?.on("data",c),e.stdout?.on("data",c),e.on("message",c).on("error",s=>{n+=s.message,e.kill();}).once("close",(s,a)=>{s||a||n?(n||=`command failed: ${e.spawnargs.join(" ")}`,this.debug(`${t}.close`,{code:s,signal:a,fatal:n}),i(new Error(n))):(this.debug(`${t}.close`),o());}).on("unhandledRejection",s=>{this.error(`${t}.unhandled`,s);}).on("uncaughtExceptionMonitor",s=>{this.error(`${t}.unhandled`,s);});})}};O=at(),U(O,1,"debug",bt,k),U(O,1,"info",gt,k),U(O,1,"warn",_t,k),U(O,1,"error",wt,k),U(O,1,"fatal",ht,k),ke(O,k);var _=new k;nodeAv.Log.setCallback((r,e)=>{let t=e.trimEnd();t&&(r<=constants.AV_LOG_ERROR?_.error(t):r<=constants.AV_LOG_WARNING&&_.warn(t));});function re(r,e){return (...t)=>{try{let o=r(...t);return o instanceof Promise?o.catch(()=>e):o}catch{return e}}}var Pr="--pup-priv-args";function xt(){let r=process.argv,e=r.find(o=>o.startsWith(Pr));if(!e)return _.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)),_.debug("pupargs",t),t}var Sr=1920,Cr=1080,Ir=30,Ar=5,kr="output.mp4",yt=C__default.default.object({duration:C__default.default.number().describe("Duration in seconds"),width:C__default.default.number().describe("Video width"),height:C__default.default.number().describe("Video height"),fps:C__default.default.number().describe("Frames per second"),withAudio:C__default.default.boolean().describe("Capture and encode audio"),outFile:C__default.default.string().describe("Output mp4 file path"),useInnerProxy:C__default.default.boolean().describe("Use bilibili inner proxy for resource access"),deterministic:C__default.default.boolean().describe("Render by frame rather than recording"),disableGpu:C__default.default.boolean().describe("Disable GPU rendering, may reduce performance but increase stability")}),Et={width:Sr,height:Cr,fps:Ir,duration:Ar,outFile:kr,withAudio:false,useInnerProxy:mt,deterministic:ft,disableGpu:lt};async function Ft(r){let e=yt.shape,t=r.defaults;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).action(async(o,i)=>{try{await r.run(o,{width:re(B,t.width)(i.width),height:re(B,t.height)(i.height),fps:re(B,t.fps)(i.fps),duration:re(B,t.duration)(i.duration),outFile:i.outFile??t.outFile,withAudio:i.withAudio??t.withAudio,useInnerProxy:i.useInnerProxy??t.useInnerProxy,deterministic:i.deterministic??t.deterministic,disableGpu:i.disableGpu??t.disableGpu});}catch(n){_.fatal(n);}}),await commander.program.parseAsync(xt());}var Tr=8;var Le=class{constructor(e){this._socket=e;}_socket;writeProgress(e){this.write(1,Buffer.from(`${e}`));}writeError(e){this.write(3,Buffer.from(e)),this._socket.end();}writeDone(e){this.write(2,Buffer.from(JSON.stringify(e))),this._socket.end();}write(e,t){let o=Buffer.alloc(Tr);o.writeUInt32LE(e,0),o.writeUInt32LE(t.byteLength,4),this._socket.write(o),this._socket.write(t);}};function Pt(r){return new Promise((e,t)=>{let o=net.createConnection(r);o.once("connect",()=>e(new Le(o))),o.once("error",t);})}function St(r,e){let{width:t,height:o}=e;return `<!DOCTYPE html>
|
|
2
2
|
<html>
|
|
3
3
|
<head>
|
|
4
4
|
<meta charset="UTF-8">
|
|
@@ -86,7 +86,7 @@
|
|
|
86
86
|
})();
|
|
87
87
|
</script>
|
|
88
88
|
</body>
|
|
89
|
-
</html>`}function Z(r,e){let{width:t,height:o}=e;if(t<32||o<2)return;let i=o-1,n=0;for(let a=0;a<32;a++){let c=(i*t+a)*4,u=(r[c]??0)>127?1:0;n=n<<1|u;}if(n=n>>>0,!(!Number.isFinite(n)||n<0||n>1e7))return n}function ee(r){return r.sendCommand("Runtime.evaluate",{expression:"window.__pup_start_stego__()"})}function te(r){return r.sendCommand("Runtime.evaluate",{expression:"window.__pup_stop_stego__()"})}var Re="pup";electron.protocol.registerSchemesAsPrivileged([{scheme:Re,privileges:{standard:true,secure:true,bypassCSP:true,allowServiceWorkers:true,supportFetchAPI:true,corsEnabled:true,stream:true,codeCache:true}}]);function dt(){electron.protocol.handle(Re,r=>{let e=new URL(r.url),t=e.searchParams.get("src")??"",o=parseInt(e.searchParams.get("w")??"0",10),i=parseInt(e.searchParams.get("h")??"0",10),n=ct(t,{width:o,height:i});return new Response(n,{headers:{"content-type":"text/html"}})});}function pt(r,e){let t=new URL(`${Re}://stego`);return t.searchParams.set("src",r),t.searchParams.set("w",String(e.width)),t.searchParams.set("h",String(e.height)),t.toString()}var N=class{constructor(e){this.maxConcurrency=e;}_active=0;_queue=[];_ended=false;get active(){return this._active}get pending(){return this._queue.length}get stats(){return `active: ${this.active}, pending: ${this.pending}`}async schedule(e){if(this._ended)throw new Error("ended");return new Promise((t,o)=>{let i=()=>{this._active++,e().then(n=>{this._active--,t(n),this.next();}).catch(n=>{this._active--,o(n),this.next();});};this._queue.push(i),this.next();})}async end(){if(!this._ended)for(this._ended=true;this._active>0||this.pending>0;)await new Promise(e=>setTimeout(e,50));}next(){this._active<this.maxConcurrency&&this._queue.shift()?.();}};var fr={[constants.AV_SAMPLE_FMT_FLT]:"flt",[constants.AV_SAMPLE_FMT_FLTP]:"fltp"},re=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=new nodeAv.Packet,this._pkt.alloc(),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 i=e.muxer.addStream(o);return new r(o,i,e.outSampleFmt)}setInputRate(e){this._graph?.[Symbol.dispose](),this._inRate=e;let t=new nodeAv.FilterGraph;t.alloc();let o=nodeAv.Filter.getByName("abuffer"),i=t.createFilter(o,"src",`sample_rate=${e}:sample_fmt=flt:channel_layout=stereo:time_base=1/${e}`);if(!i)throw new Error("Failed to create abuffer");let n=nodeAv.Filter.getByName("abuffersink"),a=t.createFilter(n,"sink");if(!a)throw new Error("Failed to create abuffersink");let s=`aformat=sample_fmts=${fr[this._outFmt]??"flt"}:sample_rates=${this._outRate}:channel_layouts=stereo,asetnsamples=n=${this._frameSize}:p=1`,u=nodeAv.FilterInOut.createList([{name:"in",filterCtx:i,padIdx:0}]),m=nodeAv.FilterInOut.createList([{name:"out",filterCtx:a,padIdx:0}]);nodeAv.FFmpegError.throwIfError(t.parsePtr(s,m,u),"graph.parsePtr"),nodeAv.FFmpegError.throwIfError(t.configSync(),"graph.config"),this._graph=t,this._bufSrc=i,this._bufSink=a;}async encode(e,t){var a=[];try{if(!this._bufSrc||!this._inRate)return;let o=new Float32Array(e.buffer,e.byteOffset,e.byteLength/4);for(let m=0;m<o.length;m++)isFinite(o[m])||(o[m]=0);let i=o.length>>1;let n=v(a,nodeAv.Frame.fromAudioBuffer(Buffer.from(o.buffer,o.byteOffset,o.byteLength),{nbSamples:i,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(i);nodeAv.FFmpegError.throwIfError(await this._bufSrc.buffersrcAddFrame(n),"buffersrcAddFrame");await this.drain(t);}catch(c){var s=c,u=true;}finally{A(a,s,u);}}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);}}async drainCodec(e){for(;;){let t=await this._ctx.receivePacket(this._pkt);if(t===constants.AVERROR_EAGAIN||t===constants.AVERROR_EOF)break;nodeAv.FFmpegError.throwIfError(t,"audio.receivePacket"),this._pkt.streamIndex=this._stream.index,this._pkt.rescaleTs(this._ctx.timeBase,this._stream.timeBase),await e.writePacket(this._pkt),this._pkt.unref();}}};var oe=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](){this._opened&&(await this._ctx.writeTrailer(),await this._ctx.closeOutput(),await this._ctx[Symbol.asyncDispose](),this._opened=false);}};var ie=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:i,codecName:n,codecTag:a,globalHeader:c,codecOpts:s,bitrate:u,threadCount:m,muxer:d}=e,f=nodeAv.Codec.findEncoderByName(n);if(!f)throw new Error(`Video encoder not found: ${n}`);let p=new nodeAv.CodecContext;p.allocContext3(f),p.codecId=f.id,p.width=t,p.height=o,p.pixelFormat=e.pixelFormat,p.timeBase=new nodeAv.Rational(1,i),p.framerate=new nodeAv.Rational(i,1),p.gopSize=i*2,p.bitRate=BigInt(u),m&&(p.threadCount=m,p.threadType=constants.FF_THREAD_SLICE),c&&p.setFlags(constants.AV_CODEC_FLAG_GLOBAL_HEADER);for(let[x,E]of Object.entries(s))p.setOption(x,E);a&&(p.codecTag=a),nodeAv.FFmpegError.throwIfError(await p.open2(f,null),"videoCtx.open2");let b=new nodeAv.Packet;b.alloc();let w=d.addStream(p,a);return new r(p,b,w)}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();}async drain(e){let t=this._pkt;for(;;){let o=await this._ctx.receivePacket(t);if(o===constants.AVERROR_EAGAIN||o===constants.AVERROR_EOF)break;nodeAv.FFmpegError.throwIfError(o,"video.receivePacket"),t.streamIndex=this._stream.index,t.duration===0n&&(t.duration=1n),t.rescaleTs(this._ctx.timeBase,this._stream.timeBase),await e.writePacket(t),t.unref();}}};var $=class r{constructor(e,t,o,i,n,a,c,s){this._video=e;this._audio=t;this._muxer=o;this._limiter=i;this._outFile=n;this._sws=a;this._srcFrame=c;this._dstFrame=s;}_disposed=false;static async create(e){let{width:t,height:o,fps:i,outFile:n,withAudio:a=false}=e,c=new oe(n),s=await ie.create({width:t,height:o,fps:i,codecName:constants.FF_ENCODER_LIBX265,codecTag:"hvc1",globalHeader:true,codecOpts:{preset:"ultrafast","x265-params":"log-level=1:bframes=0"},bitrate:8e6,pixelFormat:constants.AV_PIX_FMT_YUVA420P,threadCount:os.cpus().length,muxer:c}),u;a&&(u=await re.create({outSampleRate:44100,outSampleFmt:constants.AV_SAMPLE_FMT_FLTP,codecName:constants.FF_ENCODER_AAC,globalHeader:true,bitrate:128e3,muxer:c})),await c.open();let m=new N(1),d=new nodeAv.Frame;d.alloc(),d.format=constants.AV_PIX_FMT_BGRA,d.width=t,d.height=o,nodeAv.FFmpegError.throwIfError(d.getBuffer(0),"srcFrame.getBuffer");let f=new nodeAv.SoftwareScaleContext;f.getContext(t,o,constants.AV_PIX_FMT_BGRA,t,o,constants.AV_PIX_FMT_YUVA420P,constants.SWS_BILINEAR);let p=new nodeAv.Frame;return p.alloc(),p.format=constants.AV_PIX_FMT_YUVA420P,p.width=t,p.height=o,nodeAv.FFmpegError.throwIfError(p.getBuffer(0),"dstFrame.getBuffer"),new r(s,u,c,m,n,f,d,p)}setupAudio(e){this._audio?.setInputRate(e);}async encodeFrame(e){await this._limiter.schedule(async()=>(nodeAv.FFmpegError.throwIfError(this._srcFrame.makeWritable(),"srcFrame.makeWritable"),nodeAv.FFmpegError.throwIfError(this._srcFrame.fromBuffer(e),"srcFrame.fromBuffer"),nodeAv.FFmpegError.throwIfError(await this._sws.scaleFrame(this._dstFrame,this._srcFrame),"sws.scaleFrame"),nodeAv.FFmpegError.throwIfError(this._dstFrame.makeWritable(),"dstFrame.makeWritable"),this._video.encode(this._dstFrame,this._muxer)));}async encodeAudio(e){this._audio&&await this._limiter.schedule(()=>this._audio.encode(e,this._muxer));}async finish(){try{var e=[];try{let a=v(e,this._muxer,!0);let c=v(e,this._video);let s=v(e,this._audio);await this._limiter.end();await this._audio?.flush(this._muxer);await this._video.flush(this._muxer);}catch(t){var o=t,i=!0;}finally{var n=A(e,o,i);n&&await n;}}finally{this.free();}return this._outFile}async[Symbol.asyncDispose](){this._disposed||(await this._limiter.end(),this._video[Symbol.dispose](),this._audio?.[Symbol.dispose](),await this._muxer[Symbol.asyncDispose](),this.free());}free(){this._disposed||(this._disposed=true,this._srcFrame.free(),this._dstFrame.free(),this._sws[Symbol.dispose]());}};var ne=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 s of this._bursts){e+=s,o=Math.max(o,s);let u=Math.max(0,s-1);t+=(u/this._fps)**2;}let i=this._actual+e,n=i>0?e/i:0,a=Math.min(1,t),c=1-(1-n)*(1-a);return {global:n,local:a,jank:c,expected:i,actual:this._actual,maxBurst:o}}};function se(r){let e=r.getSize();return e.width===0||e.height===0?true:r.isEmpty()}var Or=`
|
|
89
|
+
</html>`}function se(r,e){let{width:t,height:o}=e;if(t<32||o<2)return;let i=o-1,n=0;for(let c=0;c<32;c++){let s=(i*t+c)*4,u=(r[s]??0)>127?1:0;n=n<<1|u;}if(n=n>>>0,!(!Number.isFinite(n)||n<0||n>1e7))return n}function ce(r){return r.sendCommand("Runtime.evaluate",{expression:"window.__pup_start_stego__()"})}function ue(r){return r.sendCommand("Runtime.evaluate",{expression:"window.__pup_stop_stego__()"})}var Ve="pup";electron.protocol.registerSchemesAsPrivileged([{scheme:Ve,privileges:{standard:true,secure:true,bypassCSP:true,allowServiceWorkers:true,supportFetchAPI:true,corsEnabled:true,stream:true,codeCache:true}}]);function It(){electron.protocol.handle(Ve,r=>{let e=new URL(r.url),t=e.searchParams.get("src")??"",o=parseInt(e.searchParams.get("w")??"0",10),i=parseInt(e.searchParams.get("h")??"0",10),n=St(t,{width:o,height:i});return new Response(n,{headers:{"content-type":"text/html"}})});}function At(r,e){let t=new URL(`${Ve}://stego`);return t.searchParams.set("src",r),t.searchParams.set("w",String(e.width)),t.searchParams.set("h",String(e.height)),t.toString()}var G=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,i)=>{this._queue.push({run:()=>{if(t?.aborted){i(t.reason),this.next();return}this._active++,e().then(n=>{this._active--,o(n),this.next();}).catch(n=>{this._active--,i(n),this.next();});},reject:i,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();}};function M(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 H(r,e,t,o){for(;;){let i=await r.receivePacket(e);if(i===constants.AVERROR_EAGAIN||i===constants.AVERROR_EOF)break;nodeAv.FFmpegError.throwIfError(i,"receivePacket"),e.streamIndex=t.index,e.duration===0n&&(e.duration=1n),e.rescaleTs(r.timeBase,t.timeBase),await o.writePacket(e),e.unref();}}var jr={[constants.AV_SAMPLE_FMT_FLT]:"flt",[constants.AV_SAMPLE_FMT_FLTP]:"fltp"},de=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 i=e.muxer.addStream(o);return new r(o,i,e.outSampleFmt)}setInputRate(e){this._graph?.[Symbol.dispose](),this._inRate=e;let t=new nodeAv.FilterGraph;t.alloc();let o=nodeAv.Filter.getByName("abuffer"),i=t.createFilter(o,"src",`sample_rate=${e}:sample_fmt=flt:channel_layout=stereo:time_base=1/${e}`);if(!i)throw new Error("Failed to create abuffer");let n=nodeAv.Filter.getByName("abuffersink"),c=t.createFilter(n,"sink");if(!c)throw new Error("Failed to create abuffersink");let a=`aformat=sample_fmts=${jr[this._outFmt]??"flt"}:sample_rates=${this._outRate}:channel_layouts=stereo,asetnsamples=n=${this._frameSize}:p=1`,u=nodeAv.FilterInOut.createList([{name:"in",filterCtx:i,padIdx:0}]),p=nodeAv.FilterInOut.createList([{name:"out",filterCtx:c,padIdx:0}]);nodeAv.FFmpegError.throwIfError(t.parsePtr(a,p,u),"graph.parsePtr"),nodeAv.FFmpegError.throwIfError(t.configSync(),"graph.config"),this._graph=t,this._bufSrc=i,this._bufSink=c;}async encode(e,t){var c=[];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 i=o.length>>1;let n=v(c,nodeAv.Frame.fromAudioBuffer(Buffer.from(o.buffer,o.byteOffset,o.byteLength),{nbSamples:i,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(i);nodeAv.FFmpegError.throwIfError(await this._bufSrc.buffersrcAddFrame(n),"buffersrcAddFrame");await this.drain(t);}catch(s){var a=s,u=true;}finally{F(c,a,u);}}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 H(this._ctx,this._pkt,this._stream,e)}};var $=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=M(e,t,nodeAv.AV_PIX_FMT_BGRA),this.dst=M(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=v(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(i){var n=i,c=true;}finally{F(o,n,c);}}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 j=Buffer.from([0,0,0,1]);function Dt(r,e){let t=r>>1&63,o=(r&1)<<5|e>>3&31,i=e&7;return {type:t,layerId:o,temporalId:i}}function Ge(r,e,t){let o=(r&63)<<1|e>>5&1,i=(e&31)<<3|t&7;return [o,i]}function He(r){let e=Buffer.alloc(r.length>>3);for(let t=0;t<e.length;t++){let o=0;for(let i=0;i<8;i++)o=o<<1|r[t*8+i];e[t]=o;}return e}function z(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 i=t+o;if(i+2>r.length)break;let n=r.length;for(let a=i+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)){n=a;break}let{type:c,layerId:s}=Dt(r[i],r[i+1]);e.push({type:c,layerId:s,data:r.subarray(i,n)}),t=n;}return e}function We(r,e){let t=Buffer.from(r),{type:o,temporalId:i}=Dt(t[0],t[1]),[n,c]=Ge(o,e,i);return t[0]=n,t[1]=c,t}var Zr=39;function Vt(r,e){let t=z(r),o=z(e),i=new Map;for(let s of o){if(s.type===32)continue;let a=i.get(s.type)??[];a.push(s),i.set(s.type,a);}let n=[],c=new Set;for(let s of t){let a=s.type===32?eo(s.data):s.data;if(n.push(j,a),!c.has(s.type)){c.add(s.type);for(let u of i.get(s.type)??[])n.push(j,We(u.data,1));}}return n.push($e()),Buffer.concat(n)}function eo(r){let e=r.subarray(2),t=0,o=p=>{let d=0;for(let m=0;m<p;m++){let l=t+m>>3,g=7-(t+m&7);d=d<<1|e[l]>>g&1;}return t+=p,d};o(4);let i=o(1);o(1);let n=t;if(o(6)>0)return r;let s=[];for(let p=0;p<r.length;p++)for(let d=7;d>=0;d--)s.push(r[p]>>d&1);let a=n+16;for(let p=0;p<6;p++)s[a+p]=0;s[a+5]=1;let u=s.length-1;for(;u>0&&s[u]===0;)u--;if(u<=1)throw new Error("Invalid VPS: no RBSP stop bit");for(s[u-1]=1,s.length=u;s.length%8!==0;)s.push(1);if(i)for(let p=0;p<8;p++)s.push(0);s.push(0);for(let p=0;p<16;p++)s.push(p===3?1:0);for(s.push(0,0,0),s.push(0),s.push(1),s.push(1);s.length%8!==0;)s.push(0);return He(s)}function $e(){let[t,o]=Ge(Zr,0,1),i=[],n=(c,s)=>{for(let a=s-1;a>=0;a--)i.push(c>>a&1);};for(n(0,1),n(0,3),n(0,3),n(0,9),n(255,9),n(0,1),n(0,1),n(1,1);i.length%8!==0;)n(0,1);return Buffer.concat([j,Buffer.from([t,o]),Buffer.from([165,4]),He(i),Buffer.from([128])])}function Ut(r,e){let t=[];for(let o of r)t.push(j,o.data);for(let o of e)o.type<32&&t.push(j,We(o.data,1));return Buffer.concat(t)}var me=class r{_s;_seiBuffer;_pts=0n;_seiInjected=false;_alphaBuf;_alphaFrame;constructor(e){this._s=e,this._seiBuffer=$e();}static async create(e){let{width:t,height:o,fps:i,bitrate:n,hw:c,muxer:s}=e,a=nodeAv.Codec.findEncoderByName(constants.FF_ENCODER_HEVC_NVENC);if(!a)throw new Error("hevc_nvenc encoder not found");let u=new nodeAv.HardwareFramesContext;u.alloc(c.deviceContext),u.format=constants.AV_PIX_FMT_CUDA,u.swFormat=constants.AV_PIX_FMT_YUV420P,u.width=t,u.height=o,u.initialPoolSize=20,nodeAv.FFmpegError.throwIfError(u.init(),"hwFramesCtx.init");let p=async y=>{let h=new nodeAv.CodecContext;return h.allocContext3(a),h.codecId=a.id,h.width=t,h.height=o,h.pixelFormat=constants.AV_PIX_FMT_CUDA,y.fullRange&&(h.colorRange=constants.AVCOL_RANGE_JPEG),h.timeBase=new nodeAv.Rational(1,i),h.framerate=new nodeAv.Rational(i,1),h.gopSize=i*2,h.setFlags(constants.AV_CODEC_FLAG_GLOBAL_HEADER),h.setOption("preset","p4"),h.setOption("bf","0"),y.cqp!==void 0?(h.setOption("rc","constqp"),h.setOption("qp",String(y.cqp))):h.bitRate=BigInt(y.br),h.hwFramesCtx=u,nodeAv.FFmpegError.throwIfError(await h.open2(a,null),"nvenc.open2"),h},d=await p({br:n}),m=await p({br:n,fullRange:true,cqp:1}),l=S(),g=S(),b=s.addStream(d,"hvc1"),w=d.extraData,E=m.extraData;w&&E&&(b.codecpar.extradata=Vt(w,E));let x=new nodeAv.SoftwareScaleContext;return x.getContext(t,o,constants.AV_PIX_FMT_BGRA,t,o,constants.AV_PIX_FMT_YUV420P,nodeAv.SWS_BILINEAR),new r({baseCtx:d,alphaCtx:m,basePkt:l,alphaPkt:g,stream:b,baseSws:x,yuvFrame:M(t,o,constants.AV_PIX_FMT_YUV420P),hwFramesCtx:u})}async encode(e,t){let{baseCtx:o,alphaCtx:i,baseSws:n,yuvFrame:c,hwFramesCtx:s}=this._s,a=this._pts++;nodeAv.FFmpegError.throwIfError(c.makeWritable(),"yuv.makeWritable"),nodeAv.FFmpegError.throwIfError(await n.scaleFrame(c,e),"sws.base");let u=e.data?.[0],p=e.linesize?.[0];if(!u||!p)throw new Error("encode: missing BGRA data");let d=e.width,m=e.height,l=d*m,g=(d>>1)*(m>>1);this._alphaBuf||(this._alphaBuf=Buffer.alloc(l+g*2));let b=this._alphaBuf;for(let x=0;x<m;x++)for(let y=0;y<d;y++)b[x*d+y]=u[x*p+y*4+3];b.fill(128,l,l+g*2),this._alphaFrame?.free(),this._alphaFrame=nodeAv.Frame.fromVideoBuffer(b,{format:constants.AV_PIX_FMT_YUV420P,width:d,height:m});let w=new nodeAv.Frame;w.alloc(),nodeAv.FFmpegError.throwIfError(s.getBuffer(w,0),"base.getBuffer"),nodeAv.FFmpegError.throwIfError(await s.transferData(w,c,0),"base.transfer"),w.pts=a,w.duration=1n;let E=new nodeAv.Frame;E.alloc(),nodeAv.FFmpegError.throwIfError(s.getBuffer(E,0),"alpha.getBuffer"),nodeAv.FFmpegError.throwIfError(await s.transferData(E,this._alphaFrame,0),"alpha.transfer"),E.pts=a,E.duration=1n,nodeAv.FFmpegError.throwIfError(await o.sendFrame(w),"base.sendFrame"),nodeAv.FFmpegError.throwIfError(await i.sendFrame(E),"alpha.sendFrame"),await this.drainInterleaved(t),w.free(),E.free();}async flush(e){await this._s.baseCtx.sendFrame(null),await this._s.alphaCtx.sendFrame(null),await this.drainInterleaved(e);}[Symbol.dispose](){let{basePkt:e,alphaPkt:t,yuvFrame:o,baseSws:i,hwFramesCtx:n,baseCtx:c,alphaCtx:s}=this._s;e.free(),t.free(),o[Symbol.dispose](),this._alphaFrame?.free(),i[Symbol.dispose](),n.free(),c.freeContext(),s.freeContext();}async drainInterleaved(e){let{baseCtx:t,alphaCtx:o,basePkt:i,alphaPkt:n,stream:c}=this._s;for(;;){let s=await t.receivePacket(i),a=await o.receivePacket(n),u=s>=0,p=a>=0;if(!u&&!p)break;if(u!==p)throw new Error(`NVENC desync: base=${u}, alpha=${p}`);let d=z(i.data),m=z(n.data),l=[];this._seiInjected||(l.push(this._seiBuffer),this._seiInjected=true),l.push(Ut(d,m));let g=i.pts,b=i.dts,w=i.duration;i.data=Buffer.concat(l),i.pts=g,i.dts=b,i.duration=w===0n?1n:w,i.streamIndex=c.index,i.rescaleTs(t.timeBase,c.timeBase),await e.writePacket(i),i.unref(),n.unref();}}};var le=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:i,codecName:n,codecTag:c,globalHeader:s,codecOpts:a,bitrate:u,muxer:p}=e,d=nodeAv.Codec.findEncoderByName(n);if(!d)throw new Error(`Video encoder not found: ${n}`);let m=new nodeAv.CodecContext;m.allocContext3(d),m.codecId=d.id,m.width=t,m.height=o,m.pixelFormat=e.pixelFormat,m.timeBase=new nodeAv.Rational(1,i),m.framerate=new nodeAv.Rational(i,1),m.gopSize=i*2,m.bitRate=BigInt(u),s&&m.setFlags(constants.AV_CODEC_FLAG_GLOBAL_HEADER);for(let[g,b]of Object.entries(a))m.setOption(g,b);c&&(m.codecTag=c),nodeAv.FFmpegError.throwIfError(await m.open2(d,null),"videoCtx.open2");let l=p.addStream(m,c);return new r(m,S(),l)}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 H(this._ctx,this._pkt,this._stream,e)}};var fe=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:i,hw:n,bitrate:c,muxer:s}=e,a=n.getEncoderCodec("hevc");if(!a)throw new Error("hevc_videotoolbox encoder not found");let u=new nodeAv.CodecContext;u.allocContext3(a),u.codecId=a.id,u.width=t,u.height=o,u.pixelFormat=constants.AV_PIX_FMT_BGRA,u.colorRange=constants.AVCOL_RANGE_JPEG,u.timeBase=new nodeAv.Rational(1,i),u.framerate=new nodeAv.Rational(i,1),u.gopSize=i*2,u.bitRate=BigInt(c),u.setFlags(constants.AV_CODEC_FLAG_GLOBAL_HEADER),u.setOption("alpha_quality","1"),u.codecTag="hvc1",nodeAv.FFmpegError.throwIfError(await u.open2(a,null),"vtEnc.open2");let p=s.addStream(u,"hvc1");return new r(u,S(),p)}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 H(this._ctx,this._pkt,this._stream,e)}};var ze="[Encoder]";async function qt(r,e){let{width:t,height:o,fps:i,bitrate:n=8e6,disableGpu:c=false}=r,s=c?void 0:api.HardwareContext.auto()??void 0;return s?.deviceTypeName===constants.FF_HWDEVICE_TYPE_VIDEOTOOLBOX&&s.getEncoderCodec("hevc")?(_.debug(ze,"using VideoToolbox HEVC alpha encoder"),{hwVideo:await fe.create({width:t,height:o,fps:i,hw:s,bitrate:n,muxer:e}),hw:s}):s?.deviceTypeName===constants.FF_HWDEVICE_TYPE_CUDA&&s.getEncoderCodec("hevc")?(_.debug(ze,"using NVENC dual-layer HEVC alpha encoder"),{hwVideo:await me.create({width:t,height:o,fps:i,hw:s,bitrate:n,muxer:e}),hw:s}):(_.debug(ze,"using software libx265 HEVC alpha encoder"),s?.dispose(),{video:await le.create({width:t,height:o,fps:i,codecName:constants.FF_ENCODER_LIBX265,codecTag:"hvc1",globalHeader:true,codecOpts:{preset:"medium","x265-params":"log-level=1:bframes=3:pools=+:frame-threads=0"},bitrate:n,pixelFormat:constants.AV_PIX_FMT_YUVA420P,muxer:e}),codec:await $.create(t,o)})}var he=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](){this._opened&&(await this._ctx.writeTrailer(),await this._ctx.closeOutput(),await this._ctx[Symbol.asyncDispose](),this._opened=false);}};var q=class r{_s;_disposed=false;constructor(e){this._s=e;}static async create(e){let{width:t,height:o,outFile:i,withAudio:n=false}=e,c=new he(i),{video:s,hwVideo:a,codec:u,hw:p}=await qt(e,c),d;return n&&(d=await de.create({outSampleRate:44100,outSampleFmt:constants.AV_SAMPLE_FMT_FLTP,codecName:constants.FF_ENCODER_AAC,globalHeader:true,bitrate:128e3,muxer:c})),await c.open(),new r({video:s,hwVideo:a,audio:d,muxer:c,limiter:new G(1),outFile:i,codec:u,hw:p,width:t,height:o})}setupAudio(e){this._s.audio?.setInputRate(e);}async encodeBGRA(e){await this._s.limiter.schedule(async()=>{let{hwVideo:t,video:o,codec:i,muxer:n}=this._s;if(t){var u=[];try{let l=v(u,this.bgraFrame(e));await t.encode(l,n);return}catch(p){var d=p,m=true;}finally{F(u,d,m);}}let{src:c,dst:s,sws:a}=i;return assert.ok(a,"sws not initialized"),nodeAv.FFmpegError.throwIfError(c.makeWritable(),"bgraSrc.makeWritable"),nodeAv.FFmpegError.throwIfError(c.fromBuffer(e),"bgraSrc.fromBuffer"),nodeAv.FFmpegError.throwIfError(s.makeWritable(),"bgraDst.makeWritable"),nodeAv.FFmpegError.throwIfError(await a.scaleFrame(s,c),"bgraSws.scaleFrame"),o.encode(s,n)});}async encodePNG(e){await this._s.limiter.schedule(async()=>{let{hwVideo:t,video:o,codec:i,muxer:n,width:c,height:s}=this._s,a=i??await $.create(c,s);try{let u=await a.decodePNG(e);t?await t.encode(u,n):(nodeAv.FFmpegError.throwIfError(a.dst.makeWritable(),"pngDst.makeWritable"),nodeAv.FFmpegError.throwIfError(await a.sws.scaleFrame(a.dst,u),"pngSws.scaleFrame"),await o.encode(a.dst,n));}finally{i||a[Symbol.dispose]();}});}async encodeAudio(e){let{audio:t,limiter:o,muxer:i}=this._s;t&&await o.schedule(()=>t.encode(e,i));}async finish(){let{video:e,hwVideo:t,audio:o,muxer:i,limiter:n}=this._s;try{var c=[];try{let d=v(c,i,!0);let m=v(c,e);let l=v(c,t);let g=v(c,o);await n.drain();await o?.flush(i);t?await t.flush(i):await e.flush(i);}catch(s){var a=s,u=!0;}finally{var p=F(c,a,u);p&&await p;}}finally{this.free();}return this._s.outFile}async[Symbol.asyncDispose](){if(this._disposed)return;let{video:e,hwVideo:t,audio:o,muxer:i,limiter:n}=this._s;await n.drain(),e?.[Symbol.dispose](),t?.[Symbol.dispose](),o?.[Symbol.dispose](),await i[Symbol.asyncDispose](),this.free();}free(){var t=[];try{if(this._disposed)return;this._disposed=!0;let e=v(t,this._s.codec);this._s.hw?.dispose();}catch(o){var i=o,n=true;}finally{F(t,i,n);}}bgraFrame(e){let t=M(this._s.width,this._s.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 u=Math.max(0,a-1);t+=(u/this._fps)**2;}let i=this._actual+e,n=i>0?e/i:0,c=Math.min(1,t),s=1-(1-n)*(1-c);return {global:n,local:c,jank:s,expected:i,actual:this._actual,maxBurst:o}}};function _e(r){let e=r.getSize();return e.width===0||e.height===0?true:r.isEmpty()}var Bo=`
|
|
90
90
|
(function() {
|
|
91
91
|
if (window.__pup_audio_capturing__) return;
|
|
92
92
|
window.__pup_audio_capturing__ = true;
|
|
@@ -158,13 +158,14 @@
|
|
|
158
158
|
return origPlay.call(this);
|
|
159
159
|
};
|
|
160
160
|
})();
|
|
161
|
-
`;async function
|
|
162
|
-
if (window.self === window.top) return;
|
|
163
|
-
if (typeof ${
|
|
161
|
+
`;async function Yt({encoder:r,getVideoTimeMs:e,onError:t}){let o=path.join(os.tmpdir(),`pup_audio_preload_${crypto.randomUUID()}.js`);return await promises.writeFile(o,Bo),electron.session.defaultSession.registerPreloadScript({type:"frame",id:"pup-audio",filePath:o}),electron.ipcMain.on("audio-meta",async(i,n)=>{let c=n.sampleRate,s=e();r.setupAudio(c);let a=Math.ceil(s*c/1e3);if(!(a<=0))try{await r.encodeAudio(Buffer.alloc(a*2*4));}catch(u){t(u);}}),electron.ipcMain.on("audio-chunk",async(i,n)=>{try{await r.encodeAudio(n);}catch(c){t(c);}}),{async teardown(){electron.ipcMain.removeAllListeners("audio-meta"),electron.ipcMain.removeAllListeners("audio-chunk"),electron.session.defaultSession.unregisterPreloadScript("pup-audio"),await promises.rm(o,{force:true});}}}function be(r){return new Promise(e=>setTimeout(e,r))}function Jt({fn:r,maxAttempts:e=3,timeout:t}){let o=new Error(`timeout over ${t}ms`);return async function(...i){let n=0;for(;;)try{let c=[r(...i)];return t&&c.push(promises$1.setTimeout(t).then(()=>{throw o})),await Promise.race(c)}catch(c){if(n++,n>=e)throw c;await be(Math.pow(2,n)*100+Math.random()*100);}}}var qe=["file:","http:","https:","data:"],Mo=/^(file:|https?:|data:)/;function Kt(r){if(Mo.test(r))return;let e=r.split(":")[0]+":",t=qe.includes(e)?`unsupported protocol: ${e}, expected ${qe.join(", ")}`:`invalid source format, expected ${qe.join(", ")}`;throw new Error(t)}var xe=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 ye="[Network]",Do=new Map([["jssz-boss.hdslb.com","jssz-boss.bilibili.co"],["boss.hdslb.com","shjd-boss.bilibili.co"]]);function Xe(r){if(!r.startsWith("http"))return r;let e=new url.URL(r),t=Do.get(e.hostname);return t?(e.hostname=t,e.protocol="http:",e.toString()):r}function Qt({source:r,window:e,useInnerProxy:t}){let o=e.webContents.session.webRequest,i=new G(64),n=new Map;async function c(a,u){let p=new xe;n.set(a,p),await p.wait({timeout:5e3,onTimeout:u}).finally(()=>n.delete(a));}function s(a){n.get(a)?.signal();}o.onBeforeRequest((a,u)=>{let p=a.url,d=t?Xe(p):p;i.schedule(()=>{let m=`${e.id}_${a.id}`;return _.debug(ye,"start:",{key:m,url:p,proxied:d,method:a.method,source:r,stats:i.stats}),u(d===p?{cancel:false}:{cancel:false,redirectURL:d}),c(m,()=>{_.warn(ye,"maybe timeout:",{key:m,url:p,proxied:d,method:a.method,source:r});})});}),o.onHeadersReceived(({responseHeaders:a},u)=>{delete a?.["x-frame-options"],delete a?.["X-Frame-Options"],delete a?.["content-security-policy"],delete a?.["Content-Security-Policy"],u({cancel:false,responseHeaders:a});}),o.onCompleted(a=>{let u=`${e.id}_${a.id}`;s(u),_.debug(ye,"completed:",{key:u,url:a.url,method:a.method,statusCode:a.statusCode,source:r});}),o.onErrorOccurred(a=>{let u=`${e.id}_${a.id}`;s(u),_.error(ye,"error:",{key:u,url:a.url,method:a.method,error:a.error,source:r});});}function Ye(r){let e=r.webContents.session.webRequest;e.onBeforeRequest(null),e.onHeadersReceived(null),e.onCompleted(null),e.onErrorOccurred(null);}var Je="[Window]";function Vo(r,e){return new Promise((t,o)=>{let i=setTimeout(()=>o(new Error("load window timeout")),3e4),n=c=>{clearTimeout(i),c?o(c):t();};r.webContents.once("did-stop-loading",()=>n()),r.webContents.once("did-frame-finish-load",(c,s,a,u)=>{_.debug(Je,"did-frame-finish-load:",{isMainFrame:s,frameProcessId:a,frameRoutingId:u});}),r.webContents.once("dom-ready",()=>{_.debug(Je,"dom-ready");}),r.webContents.once("did-fail-load",(c,s,a,u)=>n(new Error(`failed to load ${u}: [${s}] ${a}`))),r.webContents.once("render-process-gone",(c,{exitCode:s,reason:a})=>n(new Error(`renderer crashed: ${s}, ${a}`))),e();})}function er(r){return new Promise(e=>{Ye(r),r.once("closed",e),r.destroy();})}async function Zt({source:r,onCreated:e,renderer:t,warmup:o}){Kt(r);let{width:i,height:n,useInnerProxy:c}=t,s=c?Xe(r):r,a=new electron.BrowserWindow({width:i,height:n+1,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}});Qt({source:r,window:a,useInnerProxy:c}),o||await e?.(a),a.webContents.on("console-message",({level:u,message:p,lineNumber:d,sourceId:m})=>{let l=[Je,"console:",{message:p,lineNumber:d,sourceId:m,source:r}];u==="error"?_.error(...l):_.debug(...l);});try{let u=At(s,{width:i,height:n});await Vo(a,()=>a.loadURL(u));}catch(u){throw await er(a),u}return a}async function Ee({source:r,onCreated:e,renderer:t}){let o;try{o=await Jt({fn:Zt,maxAttempts:2})({source:r,renderer:t,warmup:!0});}catch(i){let{message:n,stack:c}=i;throw new Error(`failed to load window: ${JSON.stringify({source:r,message:n,stack:c})}`)}o.webContents.removeAllListeners(),Ye(o),await be(2e3),await er(o);try{return await Zt({source:r,renderer:t,onCreated:e})}catch(i){let{message:n,stack:c}=i;throw new Error(`failed to load window: ${JSON.stringify({source:r,message:n,stack:c})}`)}}async function tr(r,e,t){var V=[];try{let{fps:o,width:i,height:n,duration:c,withAudio:s,outFile:a,disableGpu:u}=t;let p=v(V,await q.create({width:i,height:n,fps:o,outFile:a,withAudio:s,disableGpu:u}),!0);let d=Math.ceil(o*c);let m=1e3/o;let l=0;let g;let b=0;let w;let E;let x;let y=new we(o);let h;let A=R=>{l++,p.encodeBGRA(R).catch(ne=>w??=ne);};let Y=(R,ne,Pe)=>{if(w){x?.(w);return}if(_e(Pe))return;let Se=Pe.toBitmap(),Q=se(Se,Pe.getSize());if(Q===void 0){w??=new Error(`no timestamp @ ${l}`);return}let ur=i*4,Ce=Buffer.from(Se.buffer,Se.byteOffset,n*ur);if(g===void 0)A(Ce),y.wrote(),g=Q;else {let Ie=Q-g;if(Ie>=m*.8){if(Ie<=m*1.2)A(Ce),y.wrote();else {let et=Math.round(Ie/m);y.dropped(et-1),y.wrote();for(let tt=0;tt<et&&l<d;tt++)A(Ce);}g=Q;}}let Ze=Math.floor(l/d*100);Math.abs(Ze-b)>10&&(b=Ze,r.writeProgress(b));let dr=c*1e3;(Q>=dr-m*.5||l>=d)&&E?.();};let P=await Ee({source:e,renderer:t,onCreated:async()=>{s&&(h=await Yt({encoder:p,getVideoTimeMs:()=>g??0,onError:R=>w??=R}));}});let L=P.webContents.debugger;P.webContents.setFrameRate(o);P.webContents.isPainting()||P.webContents.startPainting();L.attach("1.3");P.webContents.on("paint",Y);try{await ce(L),await new Promise((R,ne)=>[E,x]=[R,ne]);}finally{await ue(L),P.webContents.off("paint",Y),P.close(),await h?.teardown(),await p.finish();}if(w||l===0)throw w??new Error("no frames captured");else {let R=y.finalize();return {written:l,jank:R.jank,outFile:a}}}catch(J){var ie=J,Fe=true;}finally{var K=F(V,ie,Fe);K&&await K;}}function rr(r,e){return new Promise((t,o)=>{let i=setTimeout(()=>{r.off("message",n),o(new Error("advanceVirtualTime timed out after 30000ms"));},3e4),n=(c,s)=>{s==="Emulation.virtualTimeBudgetExpired"&&(clearTimeout(i),r.off("message",n),t());};r.on("message",n),r.sendCommand("Emulation.setVirtualTimePolicy",{policy:"advance",budget:e});})}function or(r){return r.sendCommand("Emulation.setVirtualTimePolicy",{policy:"pause"})}function ir(r,e=100){let t;return function(...o){clearTimeout(t),t=setTimeout(()=>{r.apply(this,o),t=void 0;},e);}}var ve=class{constructor(e){this.makeValue=e;}makeValue;get value(){return this._initialized||(this._value=this.makeValue(),this._initialized=true),this._value}get initialized(){return this._initialized}_initialized=false;_value};var X="__pup_tick__";function nr(r){return `(function() {
|
|
162
|
+
${"if (window.self === window.top) return;"}
|
|
163
|
+
if (typeof ${X} !== 'undefined') return;
|
|
164
164
|
|
|
165
165
|
const orig = {
|
|
166
|
-
|
|
166
|
+
Date: Date,
|
|
167
167
|
dateNow: Date.now.bind(Date),
|
|
168
|
+
performanceNow: performance.now.bind(performance),
|
|
168
169
|
raf: requestAnimationFrame.bind(window),
|
|
169
170
|
caf: cancelAnimationFrame.bind(window),
|
|
170
171
|
setTimeout: setTimeout.bind(window),
|
|
@@ -177,9 +178,20 @@
|
|
|
177
178
|
let rafQueue = [];
|
|
178
179
|
const timers = {};
|
|
179
180
|
let nextId = 1;
|
|
181
|
+
const dateOrigin = new orig.Date();
|
|
182
|
+
const perfOrigin = orig.performanceNow();
|
|
180
183
|
|
|
181
|
-
performance.now = function() { return currMs; };
|
|
182
|
-
Date.now = function() { return currMs; };
|
|
184
|
+
performance.now = function() { return perfOrigin + currMs; };
|
|
185
|
+
Date.now = function() { return dateOrigin.getTime() + currMs; };
|
|
186
|
+
Date = function() {
|
|
187
|
+
var O = orig.Date;
|
|
188
|
+
if (arguments.length === 0) return new O(dateOrigin.getTime() + currMs);
|
|
189
|
+
return new (Function.prototype.bind.apply(O, [null].concat(Array.prototype.slice.call(arguments))))();
|
|
190
|
+
};
|
|
191
|
+
Date.now = function() { return dateOrigin.getTime() + currMs; };
|
|
192
|
+
Date.parse = orig.Date.parse;
|
|
193
|
+
Date.UTC = orig.Date.UTC;
|
|
194
|
+
Date.prototype = orig.Date.prototype;
|
|
183
195
|
|
|
184
196
|
window.requestAnimationFrame = function(cb) {
|
|
185
197
|
const id = nextId++;
|
|
@@ -207,6 +219,10 @@
|
|
|
207
219
|
|
|
208
220
|
function process(timestampMs) {
|
|
209
221
|
currMs = timestampMs;
|
|
222
|
+
document.getAnimations().forEach(a => {
|
|
223
|
+
a.pause();
|
|
224
|
+
a.currentTime = currMs;
|
|
225
|
+
});
|
|
210
226
|
const ids = Object.keys(timers);
|
|
211
227
|
for (let i = 0; i < ids.length; i++) {
|
|
212
228
|
const t = timers[ids[i]];
|
|
@@ -224,17 +240,17 @@
|
|
|
224
240
|
}
|
|
225
241
|
|
|
226
242
|
function eject() {
|
|
243
|
+
Date = orig.Date;
|
|
227
244
|
performance.now = orig.performanceNow;
|
|
228
|
-
Date.now = orig.dateNow;
|
|
229
245
|
window.requestAnimationFrame = orig.raf;
|
|
230
246
|
window.cancelAnimationFrame = orig.caf;
|
|
231
247
|
window.setTimeout = orig.setTimeout;
|
|
232
248
|
window.clearTimeout = orig.clearTimeout;
|
|
233
249
|
window.setInterval = orig.setInterval;
|
|
234
250
|
window.clearInterval = orig.clearInterval;
|
|
235
|
-
delete window.${
|
|
251
|
+
delete window.${X};
|
|
236
252
|
}
|
|
237
253
|
|
|
238
|
-
window.${
|
|
239
|
-
})();`}function
|
|
240
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL3RzdXBAOC41LjErMjFkYzg4MTQ0ZWJjNjMyNC9ub2RlX21vZHVsZXMvdHN1cC9hc3NldHMvY2pzX3NoaW1zLmpzIiwiLi4vc3JjL2Jhc2UvZW52LnRzIiwiLi4vc3JjL2Jhc2UvcGFyc2VyLnRzIiwiLi4vc3JjL2Jhc2UvY29uc3RhbnRzLnRzIiwiLi4vc3JjL2Jhc2UvbG9nZ2luZy50cyIsIi4uL3NyYy9iYXNlL25vZXJyLnRzIiwiLi4vc3JjL2Jhc2UvcHJvY2Vzcy50cyIsIi4uL3NyYy9yZW5kZXJlci9zY2hlbWEudHMiLCIuLi9zcmMvY29tbW9uLnRzIiwiLi4vc3JjL3JlbmRlcmVyL2lwYy50cyIsIi4uL3NyYy9yZW5kZXJlci9zdGVnby50cyIsIi4uL3NyYy9yZW5kZXJlci9wcm90b2NvbC50cyIsIi4uL3NyYy9iYXNlL2xpbWl0ZXIudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL2F1ZGlvLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9tdXhlci50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvdmlkZW8udHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL2VuY29kZXIudHMiLCIuLi9zcmMvYmFzZS9mcmFtZV9kcm9wLnRzIiwiLi4vc3JjL2Jhc2UvaW1hZ2UudHMiLCIuLi9zcmMvcmVuZGVyZXIvYXVkaW8udHMiLCIuLi9zcmMvYmFzZS90aW1pbmcudHMiLCIuLi9zcmMvYmFzZS9yZXRyeS50cyIsIi4uL3NyYy9yZW5kZXJlci9odG1sX2NoZWNrLnRzIiwiLi4vc3JjL2Jhc2Uvd2FpdGFibGVfZXZlbnQudHMiLCIuLi9zcmMvcmVuZGVyZXIvbmV0d29yay50cyIsIi4uL3NyYy9yZW5kZXJlci93aW5kb3cudHMiLCIuLi9zcmMvcmVuZGVyZXIvcmVuZGVyLnRzIiwiLi4vc3JjL2Jhc2UvY2RwLnRzIiwiLi4vc3JjL2Jhc2UvbGF6eS50cyIsIi4uL3NyYy9yZW5kZXJlci90aWNrLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3Nob290LnRzIiwiLi4vc3JjL2FwcC50cyJdLCJuYW1lcyI6WyJnZXRJbXBvcnRNZXRhVXJsIiwiaW1wb3J0TWV0YVVybCIsInBlbnYiLCJuYW1lIiwicGFyc2VyIiwiZGVmYXVsdFZhbHVlIiwicGFyc2VOdW1iZXIiLCJ4IiwibnVtIiwicmVxdWlyZSIsImNyZWF0ZVJlcXVpcmUiLCJlbnYiLCJwdXBMb2dMZXZlbCIsInB1cFVzZUlubmVyUHJveHkiLCJwdXBEZXRlcm1pbmlzdGljIiwicHVwUGtnUm9vdCIsImRpcm5hbWUiLCJqb2luIiwicHVwSXBjU29ja2V0IiwiREVCVUciLCJJTkZPIiwiV0FSTiIsIkVSUk9SIiwiRkFUQUwiLCJzdGFja0hvb2siLCJ0YXJnZXQiLCJfY29udGV4dCIsIm1lc3NhZ2VzIiwicHJvY2Vzc2VkIiwibXNnIiwiX2ZhdGFsX2RlYyIsIl9lcnJvcl9kZWMiLCJfd2Fybl9kZWMiLCJfaW5mb19kZWMiLCJfZGVidWdfZGVjIiwiX2luaXQiLCJMb2dnZXIiLCJfbGV2ZWwiLCJfX3J1bkluaXRpYWxpemVycyIsIl9fcHVibGljRmllbGQiLCJ2YWx1ZSIsImRlYnVnIiwiaW5mbyIsIndhcm4iLCJlcnJvciIsImx2IiwibWVzc2FnZSIsInByb2MiLCJyZXNvbHZlIiwicmVqZWN0IiwiZmF0YWwiLCJkaXNwYXRjaCIsImRhdGEiLCJlcnIiLCJjb2RlIiwic2lnbmFsIiwicmVhc29uIiwiX19kZWNvcmF0b3JTdGFydCIsIl9fZGVjb3JhdGVFbGVtZW50IiwiX19kZWNvcmF0b3JNZXRhZGF0YSIsImxvZ2dlciIsIkxvZyIsImxldmVsIiwiQVZfTE9HX0VSUk9SIiwiQVZfTE9HX1dBUk5JTkciLCJub2VyciIsImZuIiwiYXJncyIsInJldCIsIlBVUF9BUkdTX0tFWSIsInBhcmdzIiwiYXJndiIsInByaXYiLCJhcmciLCJERUZBVUxUX1dJRFRIIiwiREVGQVVMVF9IRUlHSFQiLCJERUZBVUxUX0ZQUyIsIkRFRkFVTFRfRFVSQVRJT04iLCJERUZBVUxUX09VVF9GSUxFIiwiUmVuZGVyU2NoZW1hIiwieiIsImRlZmF1bHRSZW5kZXJPcHRpb25zIiwibWFrZUNMSSIsIm9wdGlvbnMiLCJzaGFwZSIsImQiLCJwcm9ncmFtIiwic291cmNlIiwib3B0cyIsImUiLCJIRUFERVJfU0laRSIsIklwY1dyaXRlciIsIl9zb2NrZXQiLCJwYXlsb2FkIiwidHlwZSIsImhlYWRlciIsImNvbm5lY3RJcGMiLCJzb2NrZXRQYXRoIiwic29ja2V0IiwiY3JlYXRlQ29ubmVjdGlvbiIsImJ1aWxkU3RlZ29IVE1MIiwidGFyZ2V0VVJMIiwic2l6ZSIsIndpZHRoIiwiaGVpZ2h0IiwiZGVjb2RlU3RlZ28iLCJiaXRtYXAiLCJtYXJrZXJSb3ciLCJ0aW1lc3RhbXAiLCJpIiwicGl4ZWxJZHgiLCJiaXQiLCJzdGFydFN0ZWdvIiwiY2RwIiwic3RvcFN0ZWdvIiwiUFVQX1NDSEVNRSIsInByb3RvY29sIiwic2V0dXBQdXBQcm90b2NvbCIsInJlcSIsInVybCIsInNyYyIsImh0bWwiLCJjcmVhdGVTdGVnb1VSTCIsIkNvbmN1cnJlbmN5TGltaXRlciIsIm1heENvbmN1cnJlbmN5IiwicnVuIiwidiIsInIiLCJTQU1QTEVfRk1UX05BTUUiLCJBVl9TQU1QTEVfRk1UX0ZMVCIsIkFWX1NBTVBMRV9GTVRfRkxUUCIsIkF1ZGlvRW5jb2RlciIsIl9BdWRpb0VuY29kZXIiLCJjdHgiLCJzdHJlYW0iLCJvdXRGbXQiLCJQYWNrZXQiLCJGcmFtZSIsImNvZGVjIiwiQ29kZWMiLCJDb2RlY0NvbnRleHQiLCJBVl9DSEFOTkVMX0xBWU9VVF9TVEVSRU8iLCJSYXRpb25hbCIsIkFWX0NPREVDX0ZMQUdfR0xPQkFMX0hFQURFUiIsIkZGbXBlZ0Vycm9yIiwiaW5TYW1wbGVSYXRlIiwiZ3JhcGgiLCJGaWx0ZXJHcmFwaCIsImFidWZmZXIiLCJGaWx0ZXIiLCJidWZTcmMiLCJhYnVmZmVyc2luayIsImJ1ZlNpbmsiLCJmaWx0ZXJEZXNjIiwib3V0cHV0cyIsIkZpbHRlckluT3V0IiwiaW5wdXRzIiwicGNtIiwibXV4ZXIiLCJfc3RhY2siLCJuU2FtcGxlcyIsImZyYW1lIiwiX191c2luZyIsIl8iLCJfZXJyb3IiLCJfaGFzRXJyb3IiLCJfX2NhbGxEaXNwb3NlIiwiQVZFUlJPUl9FQUdBSU4iLCJBVkVSUk9SX0VPRiIsIkZvcm1hdE11eGVyIiwib3V0UGF0aCIsImZvcm1hdE5hbWUiLCJGb3JtYXRDb250ZXh0IiwiY29kZWNDdHgiLCJjb2RlY1RhZyIsInBrdCIsIlZpZGVvRW5jb2RlciIsIl9WaWRlb0VuY29kZXIiLCJmcHMiLCJjb2RlY05hbWUiLCJnbG9iYWxIZWFkZXIiLCJjb2RlY09wdHMiLCJiaXRyYXRlIiwidGhyZWFkQ291bnQiLCJGRl9USFJFQURfU0xJQ0UiLCJrIiwiRW5jb2RlclBpcGVsaW5lIiwiX0VuY29kZXJQaXBlbGluZSIsIl92aWRlbyIsIl9hdWRpbyIsIl9tdXhlciIsIl9saW1pdGVyIiwiX291dEZpbGUiLCJfc3dzIiwiX3NyY0ZyYW1lIiwiX2RzdEZyYW1lIiwib3V0RmlsZSIsIndpdGhBdWRpbyIsInZpZGVvIiwiRkZfRU5DT0RFUl9MSUJYMjY1IiwiQVZfUElYX0ZNVF9ZVVZBNDIwUCIsImNwdXMiLCJhdWRpbyIsIkZGX0VOQ09ERVJfQUFDIiwibGltaXRlciIsInNyY0ZyYW1lIiwiQVZfUElYX0ZNVF9CR1JBIiwic3dzIiwiU29mdHdhcmVTY2FsZUNvbnRleHQiLCJTV1NfQklMSU5FQVIiLCJkc3RGcmFtZSIsInNhbXBsZVJhdGUiLCJpbnB1dCIsIl9tIiwiX3YiLCJfYSIsIl9wcm9taXNlIiwiRnJhbWVEcm9wU3RhdHMiLCJjb3VudCIsInRvdGFsRHJvcHBlZCIsImxvY2FsU3VtIiwibWF4QnVyc3QiLCJidXJzdCIsInBlcmNlcHRpYmxlIiwiZXhwZWN0ZWQiLCJnIiwibCIsInNjb3JlIiwiaXNFbXB0eSIsImltYWdlIiwiQVVESU9fQ0FQVFVSRV9TQ1JJUFQiLCJzZXR1cEF1ZGlvQ2FwdHVyZSIsImVuY29kZXIiLCJnZXRWaWRlb1RpbWVNcyIsIm9uRXJyb3IiLCJwcmVsb2FkUGF0aCIsInRtcGRpciIsInJhbmRvbVVVSUQiLCJ3cml0ZUZpbGUiLCJzZXNzaW9uIiwiaXBjTWFpbiIsIl9lIiwic3RhcnRNcyIsInNpbGVuY2VTYW1wbGVzIiwiYnVmZmVyIiwicm0iLCJzbGVlcCIsIm1zIiwidXNlUmV0cnkiLCJtYXhBdHRlbXB0cyIsInRpbWVvdXQiLCJ0aW1lb3V0RXJyb3IiLCJhdHRlbXB0IiwicHJvbWlzZXMiLCJzZXRUaW1lb3V0IiwiU1VQUE9SVEVEX1BST1RPQ09MUyIsIlNPVVJDRV9QQVRURVJOIiwiY2hlY2tIVE1MIiwiV2FpdGFibGVFdmVudCIsIlRBRyIsIm1hcCIsInByb3hpZWRVcmwiLCJwYXJzZWQiLCJVUkwiLCJzZXRJbnRlcmNlcHRvciIsIndpbmRvdyIsInVzZUlubmVyUHJveHkiLCJldmVudHMiLCJ3YWl0Iiwia2V5Iiwib25UaW1lb3V0IiwiZXZlbnQiLCJkZXRhaWxzIiwiY2FsbGJhY2siLCJwcm94aWVkIiwicmVzcG9uc2VIZWFkZXJzIiwidW5zZXRJbnRlcmNlcHRvciIsIndhaXRGb3JGaW5pc2giLCJ3aW4iLCJhY3Rpb24iLCJkb25lIiwiaXNNYWluRnJhbWUiLCJmcmFtZVByb2Nlc3NJZCIsImZyYW1lUm91dGluZ0lkIiwiZGVzYyIsImV4aXRDb2RlIiwid2FpdEZvckRlc3Ryb3kiLCJvcGVuV2luZG93Iiwib25DcmVhdGVkIiwicmVuZGVyZXIiLCJ3YXJtdXAiLCJCcm93c2VyV2luZG93IiwibGluZU51bWJlciIsInNvdXJjZUlkIiwibXNncyIsImxvYWRXaW5kb3ciLCJzdGFjayIsInJlbmRlciIsIndyaXRlciIsImR1cmF0aW9uIiwidG90YWwiLCJmcmFtZUludGVydmFsIiwid3JpdHRlbiIsImxhc3RXcml0dGVuVGltZSIsInByb2dyZXNzIiwiZW5jb2RlRXJyb3IiLCJyZXNvbHZlciIsInJlamVjdGVyIiwiZHJvcFN0YXRzIiwic2NoZWR1bGVGcmFtZSIsInBhaW50IiwiX3IiLCJjdXJyZW50VGltZSIsImJ5dGVzUGVyUm93IiwiY3JvcHBlZCIsInRpbWVEZWx0YSIsImZyYW1lc1RvSW5zZXJ0IiwibmV3UHJvZ3Jlc3MiLCJkdXJhdGlvbk1zIiwiaiIsImRyb3BTY29yZSIsImFkdmFuY2VWaXJ0dWFsVGltZSIsImJ1ZGdldCIsImhhbmRsZXIiLCJtZXRob2QiLCJwYXVzZVZpcnR1YWxUaW1lIiwiTGF6eSIsIm1ha2VWYWx1ZSIsIlRJQ0tfU1lNQk9MIiwiYnVpbGRUaWNrSW5qZWN0b3IiLCJkb1Byb2Nlc3MiLCJ0aW1lc3RhbXBNcyIsImRvRWplY3QiLCJhd2FpdFN0ZWdvRnJhbWUiLCJhZnRlclRzIiwiX2QiLCJ0cyIsInNob290IiwicGlwZWxpbmUiLCJmcmFtZUVycm9yIiwicm9vdEZyYW1lIiwiaWZyYW1lIiwiZnJhbWVNcyIsInByaW50RmVhdHVyZXMiLCJhcHAiLCJleGl0IiwiYyIsIm9rIiwiaXBjIiwibWtkaXIiXSwibWFwcGluZ3MiOiJ3aEJBS0EsSUFBQSxFQUFBLENBQUEsTUFBQSxDQUFBLE1BQUEsQ0FBQSxJQUFBLEVBQUEsQ0FBQSxNQUFBLENBQUEsY0FBQSxDQUFBLElBQUEsRUFBQSxDQUFBLE1BQUEsQ0FBQSx3QkFBQSxDQUFBLElBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsR0FBQSxDQUFBLENBQUEsQ0FBQSxNQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLE1BQUEsQ0FBQSxHQUFBLENBQUEsU0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxNQUFBLFNBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLElBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEdBQUEsQ0FBQSxJQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLFVBQUEsQ0FBQSxJQUFBLENBQUEsWUFBQSxDQUFBLElBQUEsQ0FBQSxRQUFBLENBQUEsSUFBQSxDQUFBLEtBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsSUFBQSxFQUFBLENBQUEsQ0FBQSxFQUFBLElBQUEsRUFBQSxDQUFBLElBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsT0FBQSxDQUFBLFFBQUEsQ0FBQSxRQUFBLENBQUEsUUFBQSxDQUFBLFVBQUEsQ0FBQSxPQUFBLENBQUEsT0FBQSxDQUFBLEtBQUEsQ0FBQSxLQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsR0FBQSxNQUFBLEVBQUEsT0FBQSxDQUFBLEVBQUEsVUFBQSxDQUFBLENBQUEsQ0FBQSxtQkFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLElBQUEsQ0FBQSxJQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLElBQUEsQ0FBQSxDQUFBLENBQUEsUUFBQSxDQUFBLENBQUEsQ0FBQSxjQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLHFCQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsSUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsSUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsR0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxVQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEdBQUEsQ0FBQSxJQUFBLElBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxNQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsSUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLE9BQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEdBQUEsQ0FBQSxJQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsS0FBQSxDQUFBLENBQUEsQ0FBQSxLQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxHQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsU0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxJQUFBLElBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxNQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLE1BQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLE9BQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxNQUFBLENBQUEsQ0FBQSxHQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsSUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxHQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsSUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsR0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsT0FBQSxDQUFBLEVBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEdBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLElBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEdBQUEsQ0FBQSxHQUFBLENBQUEsRUFBQSxJQUFBLENBQUEsQ0FBQSxPQUFBLENBQUEsRUFBQSxRQUFBLEVBQUEsT0FBQSxDQUFBLEVBQUEsVUFBQSxFQUFBLENBQUEsQ0FBQSxpQkFBQSxDQUFBLENBQUEsSUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsR0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxjQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxHQUFBLE1BQUEsR0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxTQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsR0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxPQUFBLENBQUEsRUFBQSxVQUFBLEVBQUEsQ0FBQSxDQUFBLHVCQUFBLENBQUEsQ0FBQSxDQUFBLEdBQUEsQ0FBQSxDQUFBLFVBQUEsQ0FBQSxHQUFBLENBQUEsQ0FBQSxDQUFBLElBQUEsQ0FBQSxJQUFBLEVBQUEsQ0FBQSxNQUFBLENBQUEsQ0FBQSxDQUFBLE9BQUEsT0FBQSxDQUFBLE1BQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsSUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLEtBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxJQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLE9BQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEdBQUEsQ0FBQSxJQUFBLENBQUEsQ0FBQSxPQUFBLGVBQUEsRUFBQSxVQUFBLENBQUEsZUFBQSxDQUFBLFNBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsT0FBQSxDQUFBLENBQUEsS0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxJQUFBLENBQUEsaUJBQUEsQ0FBQSxDQUFBLENBQUEsS0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsVUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsSUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSx5Q0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLElBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsS0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEdBQUEsRUFBQSxFQUFBLEdBQUEsQ0FBQSxJQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLElBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxHQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxPQUFBLE9BQUEsQ0FBQSxPQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsSUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEdBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENB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c0IsQ0FBQSxDQUN2QyxJQUFNMFUsQ0FBQUEsQ0FBTSxNQUFNNVAsRUFBQUEsQ0FBVzlFLEVBQVksQ0FBQSxDQUN6QyxHQUFJLENBQ0ZzVSxZQUFBQSxDQUFJLEVBQUEsQ0FBRyxpQkFBQSxDQUFtQkQsRUFBYSxDQUFBLENBQ3ZDLE1BQU1DLFlBQUFBLENBQUksU0FBQSxFQUFVLENBQ3BCbk8sRUFBQUEsRUFBaUIsQ0FDakJrTyxFQUFBQSxFQUFjLENBQ2QsTUFBTU0sY0FBQUEsQ0FBTTdVLFlBQUFBLENBQVFtRSxDQUFBQSxDQUFRLE9BQU8sQ0FBQSxDQUFHLENBQUUsU0FBQSxDQUFXLENBQUEsQ0FBSyxDQUFDLEVBQ3pELElBQU1vTSxDQUFBQSxDQUFTcE0sQ0FBQUEsQ0FBUSxhQUFBLENBQWdCOFAsRUFBQUEsQ0FBUXhDLEVBQUFBLENBQy9DbUQsQ0FBQUEsQ0FBSSxTQUFBLENBQVUsTUFBTXJFLENBQUFBLENBQU9xRSxDQUFBQSxDQUFLclEsQ0FBQUEsQ0FBUUosQ0FBTyxDQUFDLEVBQ2xELENBQUEsTUFBU00sRUFBRyxDQUNWLElBQU03QyxDQUFBQSxDQUFRNkMsQ0FBQUEsQ0FDZG1RLENBQUFBLENBQUksVUFBQSxDQUFXaFQsQ0FBQUEsQ0FBTSxLQUFBLEVBQVMsZUFBZSxFQUMvQyxDQUFBLE9BQUUsQ0FDQTRTLFlBQUFBLENBQUksSUFBQSxHQUNOLENBQ0YsQ0FDRixDQUFDLENBQUEiLCJmaWxlIjoiYXBwLmNqcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIFNoaW0gZ2xvYmFscyBpbiBjanMgYnVuZGxlXG4vLyBUaGVyZSdzIGEgd2VpcmQgYnVnIHRoYXQgZXNidWlsZCB3aWxsIGFsd2F5cyBpbmplY3QgaW1wb3J0TWV0YVVybFxuLy8gaWYgd2UgZXhwb3J0IGl0IGFzIGBjb25zdCBpbXBvcnRNZXRhVXJsID0gLi4uIF9fZmlsZW5hbWUgLi4uYFxuLy8gQnV0IHVzaW5nIGEgZnVuY3Rpb24gd2lsbCBub3QgY2F1c2UgdGhpcyBpc3N1ZVxuXG5jb25zdCBnZXRJbXBvcnRNZXRhVXJsID0gKCkgPT4gXG4gIHR5cGVvZiBkb2N1bWVudCA9PT0gXCJ1bmRlZmluZWRcIiBcbiAgICA/IG5ldyBVUkwoYGZpbGU6JHtfX2ZpbGVuYW1lfWApLmhyZWYgXG4gICAgOiAoZG9jdW1lbnQuY3VycmVudFNjcmlwdCAmJiBkb2N1bWVudC5jdXJyZW50U2NyaXB0LnRhZ05hbWUudG9VcHBlckNhc2UoKSA9PT0gJ1NDUklQVCcpIFxuICAgICAgPyBkb2N1bWVudC5jdXJyZW50U2NyaXB0LnNyYyBcbiAgICAgIDogbmV3IFVSTChcIm1haW4uanNcIiwgZG9jdW1lbnQuYmFzZVVSSSkuaHJlZjtcblxuZXhwb3J0IGNvbnN0IGltcG9ydE1ldGFVcmwgPSAvKiBAX19QVVJFX18gKi8gZ2V0SW1wb3J0TWV0YVVybCgpXG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzI1LlxuXG5leHBvcnQgdHlwZSBFbnZQYXJzZXI8VD4gPSAodmFsdWU6IHVua25vd24pID0+IFQ7XG5cbmV4cG9ydCBmdW5jdGlvbiBwZW52PFQ+KG5hbWU6IHN0cmluZywgcGFyc2VyOiBFbnZQYXJzZXI8VD4sIGRlZmF1bHRWYWx1ZTogVCk6IFQ7XG5leHBvcnQgZnVuY3Rpb24gcGVudjxUPihuYW1lOiBzdHJpbmcsIHBhcnNlcjogRW52UGFyc2VyPFQ+LCBkZWZhdWx0VmFsdWU/OiBUKTogVCB8IHVuZGVmaW5lZDtcbmV4cG9ydCBmdW5jdGlvbiBwZW52PFQ+KG5hbWU6IHN0cmluZywgcGFyc2VyOiBFbnZQYXJzZXI8VD4sIGRlZmF1bHRWYWx1ZT86IFQpOiBUIHwgdW5kZWZpbmVkIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gcGFyc2VyKHByb2Nlc3MuZW52W25hbWVdKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMS8zMC5cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlTnVtYmVyKHg6IHVua25vd24pOiBudW1iZXIge1xuICBpZiAodHlwZW9mIHggPT09IFwibnVtYmVyXCIpIHtcbiAgICByZXR1cm4geDtcbiAgfVxuICBjb25zdCBudW0gPSBOdW1iZXIoeCk7XG4gIGlmIChOdW1iZXIuaXNOYU4obnVtKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgVmFsdWUgJHt4fSBpcyBub3QgYSB2YWxpZCBudW1iZXJgKTtcbiAgfVxuICByZXR1cm4gbnVtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VTdHJpbmcoeDogdW5rbm93bik6IHN0cmluZyB7XG4gIGlmICh0eXBlb2YgeCA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIHg7XG4gIHJldHVybiBTdHJpbmcoeCk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA5LlxuXG5pbXBvcnQgeyBjcmVhdGVSZXF1aXJlIH0gZnJvbSBcIm1vZHVsZVwiO1xuaW1wb3J0IHsgZGlybmFtZSwgam9pbiB9IGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyBwZW52IH0gZnJvbSBcIi4vZW52XCI7XG5pbXBvcnQgeyBwYXJzZU51bWJlciB9IGZyb20gXCIuL3BhcnNlclwiO1xuXG5jb25zdCByZXF1aXJlID0gY3JlYXRlUmVxdWlyZShpbXBvcnQubWV0YS51cmwpO1xuY29uc3QgZW52ID0gcHJvY2Vzcy5lbnY7XG5cbmV4cG9ydCBjb25zdCBwdXBMb2dMZXZlbCA9IHBlbnYoXCJQVVBfTE9HX0xFVkVMXCIsIHBhcnNlTnVtYmVyLCAyKTtcbmV4cG9ydCBjb25zdCBwdXBVc2VJbm5lclByb3h5ID0gZW52W1wiUFVQX1VTRV9JTk5FUl9QUk9YWVwiXSA9PT0gXCIxXCI7XG5leHBvcnQgY29uc3QgcHVwRGlzYWJsZUdQVSA9IGVudltcIlBVUF9ESVNBQkxFX0dQVVwiXSA9PT0gXCIxXCI7XG5leHBvcnQgY29uc3QgcHVwRGV0ZXJtaW5pc3RpYyA9IGVudltcIlBVUF9ERVRFUk1JTklTVElDXCJdID09PSBcIjFcIjtcblxuZXhwb3J0IGNvbnN0IHB1cFBrZ1Jvb3QgPSBkaXJuYW1lKHJlcXVpcmUucmVzb2x2ZShcInB1cC1yZWNvcmRlci9wYWNrYWdlLmpzb25cIikpO1xuZXhwb3J0IGNvbnN0IHB1cEFwcCA9IGpvaW4ocHVwUGtnUm9vdCwgXCJkaXN0XCIsIFwiYXBwLmNqc1wiKTtcbmV4cG9ydCBjb25zdCBwdXBJcGNTb2NrZXQgPSBlbnZbXCJQVVBfSVBDX1NPQ0tFVFwiXTtcbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDYuXG5cbmltcG9ydCB7IENoaWxkUHJvY2VzcywgdHlwZSBTZXJpYWxpemFibGUgfSBmcm9tIFwiY2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0IHsgTG9nIH0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB7IEFWX0xPR19FUlJPUiwgQVZfTE9HX1dBUk5JTkcgfSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcbmltcG9ydCB7IHB1cExvZ0xldmVsIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTG9nZ2VyTGlrZSB7XG4gIGRlYnVnPyh0aGlzOiB2b2lkLCAuLi5tZXNzYWdlczogdW5rbm93bltdKTogdm9pZDtcblxuICBpbmZvPyh0aGlzOiB2b2lkLCAuLi5tZXNzYWdlczogdW5rbm93bltdKTogdm9pZDtcblxuICB3YXJuPyh0aGlzOiB2b2lkLCAuLi5tZXNzYWdlczogdW5rbm93bltdKTogdm9pZDtcblxuICBlcnJvcj8odGhpczogdm9pZCwgLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQ7XG59XG5cbmNvbnN0IERFQlVHID0gXCI8cHVwQGRlYnVnPlwiO1xuY29uc3QgSU5GTyA9IFwiPHB1cEBpbmZvPlwiO1xuY29uc3QgV0FSTiA9IFwiPHB1cEB3YXJuPlwiO1xuY29uc3QgRVJST1IgPSBcIjxwdXBAZXJyb3I+XCI7XG5jb25zdCBGQVRBTCA9IFwiPHB1cEBmYXRhbD5cIjtcblxuZnVuY3Rpb24gc3RhY2tIb29rKHRhcmdldDogRnVuY3Rpb24sIF9jb250ZXh0OiBDbGFzc01ldGhvZERlY29yYXRvckNvbnRleHQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh0aGlzOiBMb2dnZXIsIC4uLm1lc3NhZ2VzOiB1bmtub3duW10pIHtcbiAgICBjb25zdCBwcm9jZXNzZWQgPSBtZXNzYWdlcy5tYXAoKG1zZykgPT4ge1xuICAgICAgcmV0dXJuIG1zZyBpbnN0YW5jZW9mIEVycm9yID8gKG1zZy5zdGFjayA/PyBTdHJpbmcobXNnKSkgOiBtc2c7XG4gICAgfSk7XG4gICAgcmV0dXJuIHRhcmdldC5jYWxsKHRoaXMsIC4uLnByb2Nlc3NlZCk7XG4gIH07XG59XG5cbmV4cG9ydCBjbGFzcyBMb2dnZXIgaW1wbGVtZW50cyBMb2dnZXJMaWtlIHtcbiAgcHJpdmF0ZSBfaW1wbD86IExvZ2dlckxpa2U7XG5cbiAgZ2V0IGxldmVsKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2xldmVsO1xuICB9XG5cbiAgc2V0IGxldmVsKHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLl9sZXZlbCA9IHZhbHVlO1xuICAgIHRoaXMuaW1wbCA9IHRoaXMuX2ltcGwgPz8gY29uc29sZTtcbiAgfVxuXG4gIGdldCBpbXBsKCk6IExvZ2dlckxpa2UgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9pbXBsO1xuICB9XG5cbiAgc2V0IGltcGwodmFsdWU6IExvZ2dlckxpa2UpIHtcbiAgICBjb25zdCBkZWJ1ZyA9IHZhbHVlLmRlYnVnID8/IGNvbnNvbGUuZGVidWc7XG4gICAgY29uc3QgaW5mbyA9IHZhbHVlLmluZm8gPz8gY29uc29sZS5pbmZvO1xuICAgIGNvbnN0IHdhcm4gPSB2YWx1ZS53YXJuID8/IGNvbnNvbGUud2FybjtcbiAgICBjb25zdCBlcnJvciA9IHZhbHVlLmVycm9yID8/IGNvbnNvbGUuZXJyb3I7XG4gICAgY29uc3QgbHYgPSB0aGlzLl9sZXZlbDtcbiAgICB0aGlzLl9pbXBsID0ge1xuICAgICAgZGVidWc6IGx2ID49IDMgPyBkZWJ1ZyA6IHVuZGVmaW5lZCxcbiAgICAgIGluZm86IGx2ID49IDIgPyBpbmZvIDogdW5kZWZpbmVkLFxuICAgICAgd2FybjogbHYgPj0gMSA/IHdhcm4gOiB1bmRlZmluZWQsXG4gICAgICBlcnJvcjogbHYgPj0gMCA/IGVycm9yIDogdW5kZWZpbmVkLFxuICAgIH07XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9sZXZlbDogbnVtYmVyID0gcHVwTG9nTGV2ZWwpIHtcbiAgICB0aGlzLmltcGwgPSBjb25zb2xlO1xuICB9XG5cbiAgQHN0YWNrSG9va1xuICBkZWJ1ZyguLi5tZXNzYWdlczogdW5rbm93bltdKTogdm9pZCB7XG4gICAgdGhpcy5pbXBsPy5kZWJ1Zz8uKERFQlVHLCAuLi5tZXNzYWdlcyk7XG4gIH1cblxuICBAc3RhY2tIb29rXG4gIGluZm8oLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQge1xuICAgIHRoaXMuaW1wbD8uaW5mbz8uKElORk8sIC4uLm1lc3NhZ2VzKTtcbiAgfVxuXG4gIEBzdGFja0hvb2tcbiAgd2FybiguLi5tZXNzYWdlczogdW5rbm93bltdKTogdm9pZCB7XG4gICAgdGhpcy5pbXBsPy53YXJuPy4oV0FSTiwgLi4ubWVzc2FnZXMpO1xuICB9XG5cbiAgQHN0YWNrSG9va1xuICBlcnJvciguLi5tZXNzYWdlczogdW5rbm93bltdKTogdm9pZCB7XG4gICAgdGhpcy5pbXBsPy5lcnJvcj8uKEVSUk9SLCAuLi5tZXNzYWdlcyk7XG4gIH1cblxuICBAc3RhY2tIb29rXG4gIGZhdGFsKC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkIHtcbiAgICB0aGlzLmltcGw/LmVycm9yPy4oRkFUQUwsIC4uLm1lc3NhZ2VzKTtcbiAgICBwcm9jZXNzLmV4aXQoMSk7XG4gIH1cblxuICBwcml2YXRlIGRpc3BhdGNoKG1lc3NhZ2U6IHN0cmluZykge1xuICAgIGNvbnN0IG1zZyA9IG1lc3NhZ2UudHJpbUVuZCgpO1xuICAgIGlmIChtc2cuc3RhcnRzV2l0aChERUJVRykpIHtcbiAgICAgIHRoaXMuZGVidWcobXNnLnNsaWNlKERFQlVHLmxlbmd0aCArIDEpKTtcbiAgICB9IGVsc2UgaWYgKG1zZy5zdGFydHNXaXRoKElORk8pKSB7XG4gICAgICB0aGlzLmluZm8obXNnLnNsaWNlKElORk8ubGVuZ3RoICsgMSkpO1xuICAgIH0gZWxzZSBpZiAobXNnLnN0YXJ0c1dpdGgoV0FSTikpIHtcbiAgICAgIHRoaXMud2Fybihtc2cuc2xpY2UoV0FSTi5sZW5ndGggKyAxKSk7XG4gICAgfSBlbHNlIGlmIChtc2cuc3RhcnRzV2l0aChFUlJPUikpIHtcbiAgICAgIHRoaXMuZXJyb3IobXNnLnNsaWNlKEVSUk9SLmxlbmd0aCArIDEpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pbmZvKG1zZyk7XG4gICAgfVxuICB9XG5cbiAgYXR0YWNoKHByb2M6IENoaWxkUHJvY2VzcywgbmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMuZGVidWcoYCR7bmFtZX0uYXR0YWNoYCk7XG4gICAgICBsZXQgZmF0YWw6IHN0cmluZyA9IFwiXCI7XG4gICAgICBjb25zdCBkaXNwYXRjaCA9IChkYXRhOiBCdWZmZXIgfCBTZXJpYWxpemFibGUpID0+IHtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IGRhdGEudG9TdHJpbmcoKTtcbiAgICAgICAgaWYgKG1lc3NhZ2Uuc3RhcnRzV2l0aChGQVRBTCkpIHtcbiAgICAgICAgICBmYXRhbCArPSBtZXNzYWdlLnNsaWNlKEZBVEFMLmxlbmd0aCArIDEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZGlzcGF0Y2gobWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBwcm9jLnN0ZGVycj8ub24oXCJkYXRhXCIsIGRpc3BhdGNoKTtcbiAgICAgIHByb2Muc3Rkb3V0Py5vbihcImRhdGFcIiwgZGlzcGF0Y2gpO1xuICAgICAgcHJvY1xuICAgICAgICAub24oXCJtZXNzYWdlXCIsIGRpc3BhdGNoKVxuICAgICAgICAub24oXCJlcnJvclwiLCAoZXJyKSA9PiB7XG4gICAgICAgICAgZmF0YWwgKz0gZXJyLm1lc3NhZ2U7XG4gICAgICAgICAgcHJvYy5raWxsKCk7XG4gICAgICAgIH0pXG4gICAgICAgIC5vbmNlKFwiY2xvc2VcIiwgKGNvZGUsIHNpZ25hbCkgPT4ge1xuICAgICAgICAgIGlmIChjb2RlIHx8IHNpZ25hbCB8fCBmYXRhbCkge1xuICAgICAgICAgICAgZmF0YWwgfHw9IGBjb21tYW5kIGZhaWxlZDogJHtwcm9jLnNwYXduYXJncy5qb2luKFwiIFwiKX1gO1xuICAgICAgICAgICAgdGhpcy5kZWJ1ZyhgJHtuYW1lfS5jbG9zZWAsIHsgY29kZSwgc2lnbmFsLCBmYXRhbCB9KTtcbiAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoZmF0YWwpKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5kZWJ1ZyhgJHtuYW1lfS5jbG9zZWApO1xuICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgLm9uKFwidW5oYW5kbGVkUmVqZWN0aW9uXCIsIChyZWFzb24pID0+IHtcbiAgICAgICAgICB0aGlzLmVycm9yKGAke25hbWV9LnVuaGFuZGxlZGAsIHJlYXNvbik7XG4gICAgICAgIH0pXG4gICAgICAgIC5vbihcInVuY2F1Z2h0RXhjZXB0aW9uTW9uaXRvclwiLCAoZXJyKSA9PiB7XG4gICAgICAgICAgdGhpcy5lcnJvcihgJHtuYW1lfS51bmhhbmRsZWRgLCBlcnIpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfVxufVxuXG5jb25zdCBsb2dnZXIgPSBuZXcgTG9nZ2VyKCk7XG5cbi8vIFJvdXRlIGZmbXBlZyBuYXRpdmUgbG9ncyB0aHJvdWdoIHB1cCdzIGxvZ2dlci5cbkxvZy5zZXRDYWxsYmFjaygobGV2ZWwsIG1lc3NhZ2UpID0+IHtcbiAgY29uc3QgbXNnID0gbWVzc2FnZS50cmltRW5kKCk7XG4gIGlmICghbXNnKSByZXR1cm47XG4gIGlmIChsZXZlbCA8PSBBVl9MT0dfRVJST1IpIGxvZ2dlci5lcnJvcihtc2cpO1xuICBlbHNlIGlmIChsZXZlbCA8PSBBVl9MT0dfV0FSTklORykgbG9nZ2VyLndhcm4obXNnKTtcbn0pO1xuXG5leHBvcnQgeyBsb2dnZXIgfTtcbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMjQuXG5cbmV4cG9ydCBmdW5jdGlvbiBub2VycjxGbiBleHRlbmRzICguLi5hcmdzOiBhbnlbXSkgPT4gYW55LCBEPihcbiAgZm46IEZuLFxuICBkZWZhdWx0VmFsdWU6IEQsXG4pOiAoLi4uYXJnczogUGFyYW1ldGVyczxGbj4pID0+IFJldHVyblR5cGU8Rm4+IHwgRCB7XG4gIHJldHVybiAoLi4uYXJncykgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXQgPSBmbiguLi5hcmdzKTtcbiAgICAgIGlmIChyZXQgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgIHJldHVybiByZXQuY2F0Y2goKCkgPT4gZGVmYXVsdFZhbHVlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXQ7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gZGVmYXVsdFZhbHVlO1xuICAgIH1cbiAgfTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDEvMzAuXG5cbmltcG9ydCB7IHNwYXduLCB0eXBlIENoaWxkUHJvY2VzcywgdHlwZSBTcGF3bk9wdGlvbnMgfSBmcm9tIFwiY2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4vbG9nZ2luZ1wiO1xuXG5leHBvcnQgY29uc3QgUFVQX0FSR1NfS0VZID0gXCItLXB1cC1wcml2LWFyZ3NcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHBhcmdzKCkge1xuICBjb25zdCBhcmd2ID0gcHJvY2Vzcy5hcmd2O1xuICBsZXQgcHJpdiA9IGFyZ3YuZmluZCgoYXJnKSA9PiBhcmcuc3RhcnRzV2l0aChQVVBfQVJHU19LRVkpKTtcbiAgaWYgKCFwcml2KSB7XG4gICAgbG9nZ2VyLmRlYnVnKFwicHJvY2FyZ3ZcIiwgYXJndik7XG4gICAgcmV0dXJuIHByb2Nlc3MuYXJndjtcbiAgfVxuICBjb25zdCBhcmdzID0gW1wiZXhlY1wiLCAuLi5hcmd2LnNsaWNlKC0xKV07XG4gIHByaXYgPSBCdWZmZXIuZnJvbShwcml2LnNwbGl0KFwiPVwiKVsxXSEsIFwiYmFzZTY0XCIpLnRvU3RyaW5nKCk7XG4gIGFyZ3MucHVzaCguLi5KU09OLnBhcnNlKHByaXYpKTtcbiAgbG9nZ2VyLmRlYnVnKFwicHVwYXJnc1wiLCBhcmdzKTtcbiAgcmV0dXJuIGFyZ3M7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJvY2Vzc0hhbmRsZSB7XG4gIHByb2Nlc3M6IENoaWxkUHJvY2VzcztcbiAgd2FpdDogUHJvbWlzZTx2b2lkPjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4ZWMoY21kOiBzdHJpbmcsIG9wdGlvbnM/OiBTcGF3bk9wdGlvbnMpOiBQcm9jZXNzSGFuZGxlIHtcbiAgY29uc3QgcGFydHMgPSBjbWQuc3BsaXQoXCIgXCIpLmZpbHRlcigocykgPT4gcy5sZW5ndGgpO1xuICBjb25zdCBbY29tbWFuZCwgLi4uYXJnc10gPSBwYXJ0cztcbiAgaWYgKCFjb21tYW5kKSB0aHJvdyBuZXcgRXJyb3IoXCJlbXB0eSBjb21tYW5kXCIpO1xuICBjb25zdCBwcm9jID0gc3Bhd24oY29tbWFuZCwgYXJncywge1xuICAgIHN0ZGlvOiBcImluaGVyaXRcIixcbiAgICAuLi5vcHRpb25zLFxuICB9KTtcbiAgcmV0dXJuIHsgcHJvY2VzczogcHJvYywgd2FpdDogbG9nZ2VyLmF0dGFjaChwcm9jLCBjb21tYW5kKSB9O1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wNi5cblxuaW1wb3J0IHogZnJvbSBcInpvZFwiO1xuaW1wb3J0IHsgcHVwRGV0ZXJtaW5pc3RpYywgcHVwVXNlSW5uZXJQcm94eSB9IGZyb20gXCIuLi9iYXNlL2NvbnN0YW50c1wiO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9XSURUSCA9IDE5MjA7XG5leHBvcnQgY29uc3QgREVGQVVMVF9IRUlHSFQgPSAxMDgwO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfRlBTID0gMzA7XG5leHBvcnQgY29uc3QgREVGQVVMVF9EVVJBVElPTiA9IDU7XG5leHBvcnQgY29uc3QgREVGQVVMVF9PVVRfRklMRSA9IFwib3V0cHV0Lm1vdlwiO1xuXG5leHBvcnQgY29uc3QgUmVuZGVyU2NoZW1hID0gei5vYmplY3Qoe1xuICBkdXJhdGlvbjogei5udW1iZXIoKS5kZXNjcmliZShcIkR1cmF0aW9uIGluIHNlY29uZHNcIiksXG4gIHdpZHRoOiB6Lm51bWJlcigpLmRlc2NyaWJlKFwiVmlkZW8gd2lkdGhcIiksXG4gIGhlaWdodDogei5udW1iZXIoKS5kZXNjcmliZShcIlZpZGVvIGhlaWdodFwiKSxcbiAgZnBzOiB6Lm51bWJlcigpLmRlc2NyaWJlKFwiRnJhbWVzIHBlciBzZWNvbmRcIiksXG4gIHdpdGhBdWRpbzogei5ib29sZWFuKCkuZGVzY3JpYmUoXCJDYXB0dXJlIGFuZCBlbmNvZGUgYXVkaW9cIiksXG4gIG91dEZpbGU6IHouc3RyaW5nKCkuZGVzY3JpYmUoXCJPdXRwdXQgbXA0IGZpbGUgcGF0aFwiKSxcbiAgdXNlSW5uZXJQcm94eTogei5ib29sZWFuKCkuZGVzY3JpYmUoXCJVc2UgYmlsaWJpbGkgaW5uZXIgcHJveHkgZm9yIHJlc291cmNlIGFjY2Vzc1wiKSxcbiAgZGV0ZXJtaW5pc3RpYzogei5ib29sZWFuKCkuZGVzY3JpYmUoXCJSZW5kZXIgYnkgZnJhbWUgcmF0aGVyIHRoYW4gcmVjb3JkaW5nXCIpLFxufSk7XG5cbmV4cG9ydCB0eXBlIFJlbmRlck9wdGlvbnMgPSB6LmluZmVyPHR5cGVvZiBSZW5kZXJTY2hlbWE+O1xuXG5leHBvcnQgaW50ZXJmYWNlIFJlbmRlclJlc3VsdCB7XG4gIG9wdGlvbnM6IFJlbmRlck9wdGlvbnM7XG4gIHdyaXR0ZW46IG51bWJlcjtcbiAgamFuazogbnVtYmVyO1xuICBvdXRGaWxlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0UmVuZGVyT3B0aW9uczogUmVuZGVyT3B0aW9ucyA9IHtcbiAgd2lkdGg6IERFRkFVTFRfV0lEVEgsXG4gIGhlaWdodDogREVGQVVMVF9IRUlHSFQsXG4gIGZwczogREVGQVVMVF9GUFMsXG4gIGR1cmF0aW9uOiBERUZBVUxUX0RVUkFUSU9OLFxuICBvdXRGaWxlOiBERUZBVUxUX09VVF9GSUxFLFxuICB3aXRoQXVkaW86IGZhbHNlLFxuICB1c2VJbm5lclByb3h5OiBwdXBVc2VJbm5lclByb3h5LFxuICBkZXRlcm1pbmlzdGljOiBwdXBEZXRlcm1pbmlzdGljLFxufTtcbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDkuXG5cbmltcG9ydCB7IHByb2dyYW0gfSBmcm9tIFwiY29tbWFuZGVyXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi9iYXNlL2xvZ2dpbmdcIjtcbmltcG9ydCB7IG5vZXJyIH0gZnJvbSBcIi4vYmFzZS9ub2VyclwiO1xuaW1wb3J0IHsgcGFyc2VOdW1iZXIgfSBmcm9tIFwiLi9iYXNlL3BhcnNlclwiO1xuaW1wb3J0IHsgcGFyZ3MgfSBmcm9tIFwiLi9iYXNlL3Byb2Nlc3NcIjtcbmltcG9ydCB7IFJlbmRlclNjaGVtYSwgdHlwZSBSZW5kZXJPcHRpb25zIH0gZnJvbSBcIi4vcmVuZGVyZXIvc2NoZW1hXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ0xJT3B0aW9ucyB7XG4gIG5hbWU6IHN0cmluZztcbiAgZGVmYXVsdHM6IFJlbmRlck9wdGlvbnM7XG4gIHJ1bjogKHNvdXJjZTogc3RyaW5nLCBvcHRpb25zOiBSZW5kZXJPcHRpb25zKSA9PiBQcm9taXNlPHVua25vd24+O1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbWFrZUNMSShvcHRpb25zOiBDTElPcHRpb25zKSB7XG4gIGNvbnN0IHNoYXBlID0gUmVuZGVyU2NoZW1hLnNoYXBlO1xuICBjb25zdCBkID0gb3B0aW9ucy5kZWZhdWx0cztcbiAgcHJvZ3JhbVxuICAgIC5uYW1lKG9wdGlvbnMubmFtZSlcbiAgICAuYXJndW1lbnQoXCI8c291cmNlPlwiLCBcImZpbGU6Ly8sIGh0dHAocyk6Ly8sIOaIliBkYXRhOiBVUklcIilcbiAgICAub3B0aW9uKFwiLVcsIC0td2lkdGggPG51bWJlcj5cIiwgc2hhcGUud2lkdGguZGVzY3JpcHRpb24sIGAke2Qud2lkdGh9YClcbiAgICAub3B0aW9uKFwiLUgsIC0taGVpZ2h0IDxudW1iZXI+XCIsIHNoYXBlLmhlaWdodC5kZXNjcmlwdGlvbiwgYCR7ZC5oZWlnaHR9YClcbiAgICAub3B0aW9uKFwiLWYsIC0tZnBzIDxudW1iZXI+XCIsIHNoYXBlLmZwcy5kZXNjcmlwdGlvbiwgYCR7ZC5mcHN9YClcbiAgICAub3B0aW9uKFwiLXQsIC0tZHVyYXRpb24gPG51bWJlcj5cIiwgc2hhcGUuZHVyYXRpb24uZGVzY3JpcHRpb24sIGAke2QuZHVyYXRpb259YClcbiAgICAub3B0aW9uKFwiLW8sIC0tb3V0LWZpbGUgPHBhdGg+XCIsIHNoYXBlLm91dEZpbGUuZGVzY3JpcHRpb24sIGQub3V0RmlsZSlcbiAgICAub3B0aW9uKFwiLWEsIC0td2l0aC1hdWRpb1wiLCBzaGFwZS53aXRoQXVkaW8uZGVzY3JpcHRpb24sIGQud2l0aEF1ZGlvKVxuICAgIC5vcHRpb24oXCItLXVzZS1pbm5lci1wcm94eVwiLCBzaGFwZS51c2VJbm5lclByb3h5LmRlc2NyaXB0aW9uLCBkLnVzZUlubmVyUHJveHkpXG4gICAgLm9wdGlvbihcIi1kLCAtLWRldGVybWluaXN0aWNcIiwgc2hhcGUuZGV0ZXJtaW5pc3RpYy5kZXNjcmlwdGlvbiwgZC5kZXRlcm1pbmlzdGljKVxuICAgIC5hY3Rpb24oYXN5bmMgKHNvdXJjZTogc3RyaW5nLCBvcHRzKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBvcHRpb25zLnJ1bihzb3VyY2UsIHtcbiAgICAgICAgICB3aWR0aDogbm9lcnIocGFyc2VOdW1iZXIsIGQud2lkdGgpKG9wdHMud2lkdGgpLFxuICAgICAgICAgIGhlaWdodDogbm9lcnIocGFyc2VOdW1iZXIsIGQuaGVpZ2h0KShvcHRzLmhlaWdodCksXG4gICAgICAgICAgZnBzOiBub2VycihwYXJzZU51bWJlciwgZC5mcHMpKG9wdHMuZnBzKSxcbiAgICAgICAgICBkdXJhdGlvbjogbm9lcnIocGFyc2VOdW1iZXIsIGQuZHVyYXRpb24pKG9wdHMuZHVyYXRpb24pLFxuICAgICAgICAgIG91dEZpbGU6IG9wdHMub3V0RmlsZSA/PyBkLm91dEZpbGUsXG4gICAgICAgICAgd2l0aEF1ZGlvOiBvcHRzLndpdGhBdWRpbyA/PyBkLndpdGhBdWRpbyxcbiAgICAgICAgICB1c2VJbm5lclByb3h5OiBvcHRzLnVzZUlubmVyUHJveHkgPz8gZC51c2VJbm5lclByb3h5LFxuICAgICAgICAgIGRldGVybWluaXN0aWM6IG9wdHMuZGV0ZXJtaW5pc3RpYyA/PyBkLmRldGVybWluaXN0aWMsXG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBsb2dnZXIuZmF0YWwoZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIGF3YWl0IHByb2dyYW0ucGFyc2VBc3luYyhwYXJncygpKTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMDEuXG5cbmltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gXCJldmVudHNcIjtcbmltcG9ydCB7IGNyZWF0ZUNvbm5lY3Rpb24sIGNyZWF0ZVNlcnZlciwgdHlwZSBTb2NrZXQgfSBmcm9tIFwibmV0XCI7XG5cbmNvbnN0IEhFQURFUl9TSVpFID0gODtcblxuZXhwb3J0IGNvbnN0IGVudW0gSXBjTXNnVHlwZSB7XG4gIFBST0dSRVNTID0gMSxcbiAgRE9ORSA9IDIsXG4gIEVSUk9SID0gMyxcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJcGNEb25lUGF5bG9hZCB7XG4gIHdyaXR0ZW46IG51bWJlcjtcbiAgamFuazogbnVtYmVyO1xuICBvdXRGaWxlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBJcGNXcml0ZXIge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IF9zb2NrZXQ6IFNvY2tldCkge31cblxuICB3cml0ZVByb2dyZXNzKHZhbHVlOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLndyaXRlKElwY01zZ1R5cGUuUFJPR1JFU1MsIEJ1ZmZlci5mcm9tKGAke3ZhbHVlfWApKTtcbiAgfVxuXG4gIHdyaXRlRXJyb3IoZXJyb3I6IHN0cmluZykge1xuICAgIHRoaXMud3JpdGUoSXBjTXNnVHlwZS5FUlJPUiwgQnVmZmVyLmZyb20oZXJyb3IpKTtcbiAgICB0aGlzLl9zb2NrZXQuZW5kKCk7XG4gIH1cblxuICB3cml0ZURvbmUocGF5bG9hZDogSXBjRG9uZVBheWxvYWQpOiB2b2lkIHtcbiAgICB0aGlzLndyaXRlKElwY01zZ1R5cGUuRE9ORSwgQnVmZmVyLmZyb20oSlNPTi5zdHJpbmdpZnkocGF5bG9hZCkpKTtcbiAgICB0aGlzLl9zb2NrZXQuZW5kKCk7XG4gIH1cblxuICBwcml2YXRlIHdyaXRlKHR5cGU6IElwY01zZ1R5cGUsIHBheWxvYWQ6IEJ1ZmZlcik6IHZvaWQge1xuICAgIGNvbnN0IGhlYWRlciA9IEJ1ZmZlci5hbGxvYyhIRUFERVJfU0laRSk7XG4gICAgaGVhZGVyLndyaXRlVUludDMyTEUodHlwZSwgMCk7XG4gICAgaGVhZGVyLndyaXRlVUludDMyTEUocGF5bG9hZC5ieXRlTGVuZ3RoLCA0KTtcbiAgICB0aGlzLl9zb2NrZXQud3JpdGUoaGVhZGVyKTtcbiAgICB0aGlzLl9zb2NrZXQud3JpdGUocGF5bG9hZCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbm5lY3RJcGMoc29ja2V0UGF0aDogc3RyaW5nKTogUHJvbWlzZTxJcGNXcml0ZXI+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCBzb2NrZXQgPSBjcmVhdGVDb25uZWN0aW9uKHNvY2tldFBhdGgpO1xuICAgIHNvY2tldC5vbmNlKFwiY29ubmVjdFwiLCAoKSA9PiByZXNvbHZlKG5ldyBJcGNXcml0ZXIoc29ja2V0KSkpO1xuICAgIHNvY2tldC5vbmNlKFwiZXJyb3JcIiwgcmVqZWN0KTtcbiAgfSk7XG59XG5cbmV4cG9ydCBjbGFzcyBJcGNSZWFkZXIgZXh0ZW5kcyBFdmVudEVtaXR0ZXI8e1xuICBwcm9ncmVzczogW3ZhbHVlOiBudW1iZXJdO1xuICBtZXNzYWdlOiBbdHlwZTogSXBjTXNnVHlwZSwgYnVmZmVyOiBCdWZmZXJdO1xuICBkb25lOiBbcGF5bG9hZDogSXBjRG9uZVBheWxvYWRdO1xuICBlcnJvcjogW2Vycm9yOiBFcnJvcl07XG4gIGNsb3NlOiBbXTtcbn0+IHtcbiAgcHJpdmF0ZSBfY2h1bmtzOiBCdWZmZXJbXSA9IFtdO1xuICBwcml2YXRlIF9idWZmZXJlZCA9IDA7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBfc29ja2V0OiBTb2NrZXQpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuX3NvY2tldC5vbihcImRhdGFcIiwgKGRhdGEpID0+IHRoaXMub25EYXRhKGRhdGEpKTtcbiAgICB0aGlzLl9zb2NrZXQub24oXCJlcnJvclwiLCAoZXJyKSA9PiB0aGlzLmVtaXQoXCJlcnJvclwiLCBlcnIpKTtcbiAgICB0aGlzLl9zb2NrZXQub24oXCJjbG9zZVwiLCAoKSA9PiB0aGlzLmVtaXQoXCJjbG9zZVwiKSk7XG4gIH1cblxuICBwcml2YXRlIG9uRGF0YShkYXRhOiBCdWZmZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9jaHVua3MucHVzaChkYXRhKTtcbiAgICB0aGlzLl9idWZmZXJlZCArPSBkYXRhLmJ5dGVMZW5ndGg7XG4gICAgdGhpcy5mbHVzaCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBmbHVzaCgpOiB2b2lkIHtcbiAgICBmb3IgKDs7KSB7XG4gICAgICBpZiAodGhpcy5fYnVmZmVyZWQgPCBIRUFERVJfU0laRSkgcmV0dXJuO1xuICAgICAgY29uc3QgaGVhZGVyID0gdGhpcy5wZWVrKEhFQURFUl9TSVpFKTtcbiAgICAgIGNvbnN0IHR5cGUgPSBoZWFkZXIucmVhZFVJbnQzMkxFKDApIGFzIElwY01zZ1R5cGU7XG4gICAgICBjb25zdCBsZW4gPSBoZWFkZXIucmVhZFVJbnQzMkxFKDQpO1xuICAgICAgaWYgKHRoaXMuX2J1ZmZlcmVkIDwgSEVBREVSX1NJWkUgKyBsZW4pIHJldHVybjtcbiAgICAgIHRoaXMuY29uc3VtZShIRUFERVJfU0laRSk7XG4gICAgICBjb25zdCBwYXlsb2FkID0gdGhpcy5jb25zdW1lKGxlbik7XG4gICAgICB0aGlzLmVtaXQoXCJtZXNzYWdlXCIsIHR5cGUsIHBheWxvYWQpO1xuICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgSXBjTXNnVHlwZS5QUk9HUkVTUzoge1xuICAgICAgICAgIHRoaXMuZW1pdChcInByb2dyZXNzXCIsIE51bWJlcihwYXlsb2FkLnRvU3RyaW5nKCkpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIElwY01zZ1R5cGUuRE9ORToge1xuICAgICAgICAgIHRoaXMuZW1pdChcImRvbmVcIiwgSlNPTi5wYXJzZShwYXlsb2FkLnRvU3RyaW5nKCkpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIElwY01zZ1R5cGUuRVJST1I6IHtcbiAgICAgICAgICB0aGlzLmVtaXQoXCJlcnJvclwiLCBuZXcgRXJyb3IocGF5bG9hZC50b1N0cmluZygpKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHBlZWsobjogbnVtYmVyKTogQnVmZmVyIHtcbiAgICBpZiAodGhpcy5fY2h1bmtzWzBdICYmIHRoaXMuX2NodW5rc1swXS5ieXRlTGVuZ3RoID49IG4pIHJldHVybiB0aGlzLl9jaHVua3NbMF07XG4gICAgcmV0dXJuIEJ1ZmZlci5jb25jYXQodGhpcy5fY2h1bmtzKS5zdWJhcnJheSgwLCBuKTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3VtZShuOiBudW1iZXIpOiBCdWZmZXIge1xuICAgIGNvbnN0IG91dCA9IEJ1ZmZlci5hbGxvY1Vuc2FmZShuKTtcbiAgICBsZXQgb2Zmc2V0ID0gMDtcbiAgICB3aGlsZSAob2Zmc2V0IDwgbikge1xuICAgICAgY29uc3QgY2h1bmsgPSB0aGlzLl9jaHVua3NbMF0hO1xuICAgICAgY29uc3QgdGFrZSA9IE1hdGgubWluKGNodW5rLmJ5dGVMZW5ndGgsIG4gLSBvZmZzZXQpO1xuICAgICAgY2h1bmsuY29weShvdXQsIG9mZnNldCwgMCwgdGFrZSk7XG4gICAgICBpZiAodGFrZSA9PT0gY2h1bmsuYnl0ZUxlbmd0aCkge1xuICAgICAgICB0aGlzLl9jaHVua3Muc2hpZnQoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX2NodW5rc1swXSA9IGNodW5rLnN1YmFycmF5KHRha2UpO1xuICAgICAgfVxuICAgICAgb2Zmc2V0ICs9IHRha2U7XG4gICAgfVxuICAgIHRoaXMuX2J1ZmZlcmVkIC09IG47XG4gICAgcmV0dXJuIG91dDtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElwY1NlcnZlciB7XG4gIHdhaXRGb3JDb25uZWN0aW9uKCk6IFByb21pc2U8SXBjUmVhZGVyPjtcbiAgY2xvc2UoKTogdm9pZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUlwY1NlcnZlcihzb2NrZXRQYXRoOiBzdHJpbmcpOiBQcm9taXNlPElwY1NlcnZlcj4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHNlcnZlciA9IGNyZWF0ZVNlcnZlcigpO1xuICAgIHNlcnZlci5vbmNlKFwiZXJyb3JcIiwgcmVqZWN0KTtcbiAgICBzZXJ2ZXIubGlzdGVuKHNvY2tldFBhdGgsICgpID0+IHtcbiAgICAgIHJlc29sdmUoe1xuICAgICAgICB3YWl0Rm9yQ29ubmVjdGlvbigpIHtcbiAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8SXBjUmVhZGVyPigob2ssIG5vKSA9PiB7XG4gICAgICAgICAgICBzZXJ2ZXIub25jZShcImNvbm5lY3Rpb25cIiwgKHNvY2tldCkgPT4gb2sobmV3IElwY1JlYWRlcihzb2NrZXQpKSk7XG4gICAgICAgICAgICBzZXJ2ZXIub25jZShcImVycm9yXCIsIG5vKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgY2xvc2UoKSB7XG4gICAgICAgICAgc2VydmVyLmNsb3NlKCk7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA5LlxuXG5pbXBvcnQgdHlwZSB7IERlYnVnZ2VyLCBTaXplIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5cbmV4cG9ydCBjb25zdCBGUkFNRV9TWU5DX01BUktFUl9XSURUSCA9IDMyO1xuZXhwb3J0IGNvbnN0IEZSQU1FX1NZTkNfTUFSS0VSX0hFSUdIVCA9IDE7XG5cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFN0ZWdvSFRNTCh0YXJnZXRVUkw6IHN0cmluZywgc2l6ZTogU2l6ZSk6IHN0cmluZyB7XG4gIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gc2l6ZTtcbiAgcmV0dXJuIGA8IURPQ1RZUEUgaHRtbD5cbjxodG1sPlxuPGhlYWQ+XG4gIDxtZXRhIGNoYXJzZXQ9XCJVVEYtOFwiPlxuICA8c3R5bGU+XG4gICAgKiB7IG1hcmdpbjogMDsgcGFkZGluZzogMDsgYm94LXNpemluZzogYm9yZGVyLWJveDsgfVxuICAgIGh0bWwsIGJvZHkgeyB3aWR0aDogJHt3aWR0aH1weDsgaGVpZ2h0OiAke2hlaWdodCArIDF9cHg7IG92ZXJmbG93OiBoaWRkZW47IH1cbiAgICAjdGFyZ2V0IHsgXG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7IFxuICAgICAgdG9wOiAwOyBcbiAgICAgIGxlZnQ6IDA7IFxuICAgICAgd2lkdGg6ICR7d2lkdGh9cHg7IFxuICAgICAgaGVpZ2h0OiAke2hlaWdodH1weDsgXG4gICAgICBib3JkZXI6IG5vbmU7IFxuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgfVxuICAgICNzdGVnbyB7IFxuICAgICAgcG9zaXRpb246IGFic29sdXRlOyBcbiAgICAgIHRvcDogJHtoZWlnaHR9cHg7IFxuICAgICAgbGVmdDogMDsgXG4gICAgICB3aWR0aDogJHt3aWR0aH1weDsgXG4gICAgICBoZWlnaHQ6IDFweDsgXG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIGltYWdlLXJlbmRlcmluZzogcGl4ZWxhdGVkO1xuICAgIH1cbiAgPC9zdHlsZT5cbjwvaGVhZD5cbjxib2R5PlxuICA8aWZyYW1lIGlkPVwidGFyZ2V0XCIgc3JjPVwiJHt0YXJnZXRVUkx9XCI+PC9pZnJhbWU+XG4gIDxjYW52YXMgaWQ9XCJzdGVnb1wiIHdpZHRoPVwiJHt3aWR0aH1cIiBoZWlnaHQ9XCIxXCI+PC9jYW52YXM+XG4gIDxzY3JpcHQ+XG4gICAgKGZ1bmN0aW9uKCkge1xuICAgICAgY29uc3QgV0lEVEggPSAke3dpZHRofTtcbiAgICAgIGNvbnN0IE1BUktFUl9XSURUSCA9ICR7RlJBTUVfU1lOQ19NQVJLRVJfV0lEVEh9O1xuICAgICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N0ZWdvJyk7XG4gICAgICBjb25zdCBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnLCB7IHdpbGxSZWFkRnJlcXVlbnRseTogdHJ1ZSB9KTtcbiAgICAgIGxldCBzdGFydFRpbWUgPSBudWxsO1xuICAgICAgbGV0IHJhZklkID0gbnVsbDtcblxuICAgICAgZnVuY3Rpb24gZW5jb2RlVGltZXN0YW1wKHRpbWVzdGFtcE1zKSB7XG4gICAgICAgIGNvbnN0IGltYWdlRGF0YSA9IGN0eC5jcmVhdGVJbWFnZURhdGEoV0lEVEgsIDEpO1xuICAgICAgICBjb25zdCBkYXRhID0gaW1hZ2VEYXRhLmRhdGE7XG4gICAgICAgIFxuICAgICAgICBjb25zdCB0aW1lc3RhbXBJbnQgPSBNYXRoLmZsb29yKHRpbWVzdGFtcE1zKSA+Pj4gMDtcbiAgICAgICAgXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgTUFSS0VSX1dJRFRIOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBiaXQgPSAodGltZXN0YW1wSW50ID4+PiAoTUFSS0VSX1dJRFRIIC0gMSAtIGkpKSAmIDE7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSBiaXQgPyAyNTUgOiAwO1xuICAgICAgICAgIGNvbnN0IGlkeCA9IGkgKiA0O1xuICAgICAgICAgIGRhdGFbaWR4XSA9IHZhbHVlO1xuICAgICAgICAgIGRhdGFbaWR4ICsgMV0gPSB2YWx1ZTtcbiAgICAgICAgICBkYXRhW2lkeCArIDJdID0gdmFsdWU7XG4gICAgICAgICAgZGF0YVtpZHggKyAzXSA9IDI1NTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgZm9yIChsZXQgaSA9IE1BUktFUl9XSURUSDsgaSA8IFdJRFRIOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBpZHggPSBpICogNDtcbiAgICAgICAgICBkYXRhW2lkeF0gPSAwO1xuICAgICAgICAgIGRhdGFbaWR4ICsgMV0gPSAwO1xuICAgICAgICAgIGRhdGFbaWR4ICsgMl0gPSAwO1xuICAgICAgICAgIGRhdGFbaWR4ICsgM10gPSAyNTU7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGN0eC5wdXRJbWFnZURhdGEoaW1hZ2VEYXRhLCAwLCAwKTtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gdXBkYXRlTG9vcCgpIHtcbiAgICAgICAgaWYgKHN0YXJ0VGltZSA9PT0gbnVsbCkgcmV0dXJuO1xuICAgICAgICBjb25zdCBlbGFwc2VkID0gcGVyZm9ybWFuY2Uubm93KCkgLSBzdGFydFRpbWU7XG4gICAgICAgIGVuY29kZVRpbWVzdGFtcChlbGFwc2VkKTtcbiAgICAgICAgcmFmSWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodXBkYXRlTG9vcCk7XG4gICAgICB9XG5cbiAgICAgIHdpbmRvdy5fX3B1cF9zdGFydF9zdGVnb19fID0gKCkgPT4ge1xuICAgICAgICBzdGFydFRpbWUgPSBwZXJmb3JtYW5jZS5ub3coKTtcbiAgICAgICAgZW5jb2RlVGltZXN0YW1wKDApO1xuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodXBkYXRlTG9vcCk7XG4gICAgICB9O1xuXG4gICAgICB3aW5kb3cuX19wdXBfc3RvcF9zdGVnb19fID0gKCkgPT4ge1xuICAgICAgICBpZiAocmFmSWQgIT09IG51bGwpIHtcbiAgICAgICAgICBjYW5jZWxBbmltYXRpb25GcmFtZShyYWZJZCk7XG4gICAgICAgICAgcmFmSWQgPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH0pKCk7XG4gIDwvc2NyaXB0PlxuPC9ib2R5PlxuPC9odG1sPmA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWNvZGVTdGVnbyhiaXRtYXA6IEJ1ZmZlciwgc2l6ZTogU2l6ZSk6IG51bWJlciB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gc2l6ZTtcbiAgaWYgKHdpZHRoIDwgRlJBTUVfU1lOQ19NQVJLRVJfV0lEVEggfHwgaGVpZ2h0IDwgMikge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBtYXJrZXJSb3cgPSBoZWlnaHQgLSAxO1xuXG4gIGxldCB0aW1lc3RhbXAgPSAwO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IEZSQU1FX1NZTkNfTUFSS0VSX1dJRFRIOyBpKyspIHtcbiAgICBjb25zdCBwaXhlbElkeCA9IChtYXJrZXJSb3cgKiB3aWR0aCArIGkpICogNDtcbiAgICBjb25zdCByID0gYml0bWFwW3BpeGVsSWR4XSA/PyAwO1xuICAgIGNvbnN0IGJpdCA9IHIgPiAxMjcgPyAxIDogMDtcbiAgICB0aW1lc3RhbXAgPSAodGltZXN0YW1wIDw8IDEpIHwgYml0O1xuICB9XG5cbiAgdGltZXN0YW1wID0gdGltZXN0YW1wID4+PiAwO1xuXG4gIGlmICghTnVtYmVyLmlzRmluaXRlKHRpbWVzdGFtcCkgfHwgdGltZXN0YW1wIDwgMCB8fCB0aW1lc3RhbXAgPiAxZTcpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcmV0dXJuIHRpbWVzdGFtcDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXJ0U3RlZ28oY2RwOiBEZWJ1Z2dlcikge1xuICByZXR1cm4gY2RwLnNlbmRDb21tYW5kKFwiUnVudGltZS5ldmFsdWF0ZVwiLCB7XG4gICAgZXhwcmVzc2lvbjogYHdpbmRvdy5fX3B1cF9zdGFydF9zdGVnb19fKClgLFxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0b3BTdGVnbyhjZHA6IERlYnVnZ2VyKSB7XG4gIHJldHVybiBjZHAuc2VuZENvbW1hbmQoXCJSdW50aW1lLmV2YWx1YXRlXCIsIHtcbiAgICBleHByZXNzaW9uOiBgd2luZG93Ll9fcHVwX3N0b3Bfc3RlZ29fXygpYCxcbiAgfSk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzAxLlxuXG5pbXBvcnQgdHlwZSB7IFNpemUgfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IHByb3RvY29sIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBidWlsZFN0ZWdvSFRNTCB9IGZyb20gXCIuL3N0ZWdvXCI7XG5cbmNvbnN0IFBVUF9TQ0hFTUUgPSBcInB1cFwiO1xuXG4vLyBNdXN0IGJlIGNhbGxlZCBzeW5jaHJvbm91c2x5IGJlZm9yZSBhcHAgaXMgcmVhZHkuXG5wcm90b2NvbC5yZWdpc3RlclNjaGVtZXNBc1ByaXZpbGVnZWQoW1xuICB7XG4gICAgc2NoZW1lOiBQVVBfU0NIRU1FLFxuICAgIHByaXZpbGVnZXM6IHtcbiAgICAgIHN0YW5kYXJkOiB0cnVlLFxuICAgICAgc2VjdXJlOiB0cnVlLFxuICAgICAgYnlwYXNzQ1NQOiB0cnVlLFxuICAgICAgYWxsb3dTZXJ2aWNlV29ya2VyczogdHJ1ZSxcbiAgICAgIHN1cHBvcnRGZXRjaEFQSTogdHJ1ZSxcbiAgICAgIGNvcnNFbmFibGVkOiB0cnVlLFxuICAgICAgc3RyZWFtOiB0cnVlLFxuICAgICAgY29kZUNhY2hlOiB0cnVlLFxuICAgIH0sXG4gIH0sXG5dKTtcblxuLy8gTXVzdCBiZSBjYWxsZWQgYWZ0ZXIgYXBwIGlzIHJlYWR5LlxuZXhwb3J0IGZ1bmN0aW9uIHNldHVwUHVwUHJvdG9jb2woKTogdm9pZCB7XG4gIHByb3RvY29sLmhhbmRsZShQVVBfU0NIRU1FLCAocmVxKSA9PiB7XG4gICAgY29uc3QgdXJsID0gbmV3IFVSTChyZXEudXJsKTtcbiAgICBjb25zdCBzcmMgPSB1cmwuc2VhcmNoUGFyYW1zLmdldChcInNyY1wiKSA/PyBcIlwiO1xuICAgIGNvbnN0IHdpZHRoID0gcGFyc2VJbnQodXJsLnNlYXJjaFBhcmFtcy5nZXQoXCJ3XCIpID8/IFwiMFwiLCAxMCk7XG4gICAgY29uc3QgaGVpZ2h0ID0gcGFyc2VJbnQodXJsLnNlYXJjaFBhcmFtcy5nZXQoXCJoXCIpID8/IFwiMFwiLCAxMCk7XG4gICAgY29uc3QgaHRtbCA9IGJ1aWxkU3RlZ29IVE1MKHNyYywgeyB3aWR0aCwgaGVpZ2h0IH0pO1xuICAgIHJldHVybiBuZXcgUmVzcG9uc2UoaHRtbCwgeyBoZWFkZXJzOiB7IFwiY29udGVudC10eXBlXCI6IFwidGV4dC9odG1sXCIgfSB9KTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTdGVnb1VSTChzcmM6IHN0cmluZywgc2l6ZTogU2l6ZSk6IHN0cmluZyB7XG4gIGNvbnN0IHVybCA9IG5ldyBVUkwoYCR7UFVQX1NDSEVNRX06Ly9zdGVnb2ApO1xuICB1cmwuc2VhcmNoUGFyYW1zLnNldChcInNyY1wiLCBzcmMpO1xuICB1cmwuc2VhcmNoUGFyYW1zLnNldChcIndcIiwgU3RyaW5nKHNpemUud2lkdGgpKTtcbiAgdXJsLnNlYXJjaFBhcmFtcy5zZXQoXCJoXCIsIFN0cmluZyhzaXplLmhlaWdodCkpO1xuICByZXR1cm4gdXJsLnRvU3RyaW5nKCk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAxLzMwLlxuXG5leHBvcnQgY2xhc3MgQ29uY3VycmVuY3lMaW1pdGVyIHtcbiAgcHJpdmF0ZSBfYWN0aXZlID0gMDtcbiAgcHJpdmF0ZSBfcXVldWU6IFZvaWRGdW5jdGlvbltdID0gW107XG4gIHByaXZhdGUgX2VuZGVkID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IocmVhZG9ubHkgbWF4Q29uY3VycmVuY3k6IG51bWJlcikge31cblxuICBnZXQgYWN0aXZlKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2FjdGl2ZTtcbiAgfVxuXG4gIGdldCBwZW5kaW5nKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3F1ZXVlLmxlbmd0aDtcbiAgfVxuXG4gIGdldCBzdGF0cygpOiBzdHJpbmcge1xuICAgIHJldHVybiBgYWN0aXZlOiAke3RoaXMuYWN0aXZlfSwgcGVuZGluZzogJHt0aGlzLnBlbmRpbmd9YDtcbiAgfVxuXG4gIGFzeW5jIHNjaGVkdWxlPFQ+KGZuOiAoKSA9PiBQcm9taXNlPFQ+KTogUHJvbWlzZTxUPiB7XG4gICAgaWYgKHRoaXMuX2VuZGVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJlbmRlZFwiKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPFQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IHJ1biA9ICgpID0+IHtcbiAgICAgICAgdGhpcy5fYWN0aXZlKys7XG4gICAgICAgIGZuKClcbiAgICAgICAgICAudGhlbigodikgPT4ge1xuICAgICAgICAgICAgdGhpcy5fYWN0aXZlLS07XG4gICAgICAgICAgICByZXNvbHZlKHYpO1xuICAgICAgICAgICAgdGhpcy5uZXh0KCk7XG4gICAgICAgICAgfSlcbiAgICAgICAgICAuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2FjdGl2ZS0tO1xuICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgICAgdGhpcy5uZXh0KCk7XG4gICAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgdGhpcy5fcXVldWUucHVzaChydW4pO1xuICAgICAgdGhpcy5uZXh0KCk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBlbmQoKSB7XG4gICAgaWYgKHRoaXMuX2VuZGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX2VuZGVkID0gdHJ1ZTtcbiAgICB3aGlsZSAodGhpcy5fYWN0aXZlID4gMCB8fCB0aGlzLnBlbmRpbmcgPiAwKSB7XG4gICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocikgPT4gc2V0VGltZW91dChyLCA1MCkpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbmV4dCgpIHtcbiAgICBpZiAodGhpcy5fYWN0aXZlIDwgdGhpcy5tYXhDb25jdXJyZW5jeSkge1xuICAgICAgdGhpcy5fcXVldWUuc2hpZnQoKT8uKCk7XG4gICAgfVxuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzAxLlxuXG5pbXBvcnQgeyBDb2RlYywgQ29kZWNDb250ZXh0LCBGRm1wZWdFcnJvciwgRmlsdGVyLCBGaWx0ZXJHcmFwaCwgRmlsdGVySW5PdXQsIEZyYW1lLCBQYWNrZXQsIFJhdGlvbmFsIH0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB7XG4gIEFWX0NIQU5ORUxfTEFZT1VUX1NURVJFTyxcbiAgQVZfQ09ERUNfRkxBR19HTE9CQUxfSEVBREVSLFxuICBBVl9TQU1QTEVfRk1UX0ZMVCxcbiAgQVZfU0FNUExFX0ZNVF9GTFRQLFxuICBBVkVSUk9SX0VBR0FJTixcbiAgQVZFUlJPUl9FT0YsXG4gIHR5cGUgRkZBdWRpb0VuY29kZXIsXG59IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuaW1wb3J0IHR5cGUgeyBGb3JtYXRNdXhlciB9IGZyb20gXCIuL211eGVyXCI7XG5cbmNvbnN0IFNBTVBMRV9GTVRfTkFNRTogUGFydGlhbDxSZWNvcmQ8bnVtYmVyLCBzdHJpbmc+PiA9IHsgW0FWX1NBTVBMRV9GTVRfRkxUXTogXCJmbHRcIiwgW0FWX1NBTVBMRV9GTVRfRkxUUF06IFwiZmx0cFwiIH07XG50eXBlIFN0cmVhbSA9IFJldHVyblR5cGU8aW1wb3J0KFwibm9kZS1hdlwiKS5Gb3JtYXRDb250ZXh0W1wibmV3U3RyZWFtXCJdPjtcblxuZXhwb3J0IGludGVyZmFjZSBBdWRpb0VuY29kZXJPcHRpb25zIHtcbiAgb3V0U2FtcGxlUmF0ZTogbnVtYmVyO1xuICBvdXRTYW1wbGVGbXQ6IHR5cGVvZiBBVl9TQU1QTEVfRk1UX0ZMVCB8IHR5cGVvZiBBVl9TQU1QTEVfRk1UX0ZMVFA7XG4gIGNvZGVjTmFtZTogRkZBdWRpb0VuY29kZXI7XG4gIGdsb2JhbEhlYWRlcjogYm9vbGVhbjtcbiAgYml0cmF0ZTogbnVtYmVyO1xuICBtdXhlcjogRm9ybWF0TXV4ZXI7XG59XG5cbmV4cG9ydCBjbGFzcyBBdWRpb0VuY29kZXIgaW1wbGVtZW50cyBEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSBfY3R4OiBDb2RlY0NvbnRleHQ7XG4gIHByaXZhdGUgX3N0cmVhbTogU3RyZWFtO1xuICBwcml2YXRlIF9wa3Q6IFBhY2tldDtcbiAgcHJpdmF0ZSBfb3V0UmF0ZTogbnVtYmVyO1xuICBwcml2YXRlIF9vdXRGbXQ6IHR5cGVvZiBBVl9TQU1QTEVfRk1UX0ZMVCB8IHR5cGVvZiBBVl9TQU1QTEVfRk1UX0ZMVFA7XG4gIHByaXZhdGUgX2ZyYW1lU2l6ZTogbnVtYmVyO1xuICBwcml2YXRlIF9maWx0ZXJGcmFtZTogRnJhbWU7XG4gIHByaXZhdGUgX2dyYXBoPzogRmlsdGVyR3JhcGg7XG4gIHByaXZhdGUgX2J1ZlNyYz86IGFueTtcbiAgcHJpdmF0ZSBfYnVmU2luaz86IGFueTtcbiAgcHJpdmF0ZSBfaW5SYXRlPzogbnVtYmVyO1xuICBwcml2YXRlIF9wdHMgPSAwbjtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKGN0eDogQ29kZWNDb250ZXh0LCBzdHJlYW06IFN0cmVhbSwgb3V0Rm10OiB0eXBlb2YgQVZfU0FNUExFX0ZNVF9GTFQgfCB0eXBlb2YgQVZfU0FNUExFX0ZNVF9GTFRQKSB7XG4gICAgdGhpcy5fY3R4ID0gY3R4O1xuICAgIHRoaXMuX3N0cmVhbSA9IHN0cmVhbTtcbiAgICB0aGlzLl9vdXRSYXRlID0gY3R4LnNhbXBsZVJhdGU7XG4gICAgdGhpcy5fb3V0Rm10ID0gb3V0Rm10O1xuICAgIHRoaXMuX2ZyYW1lU2l6ZSA9IGN0eC5mcmFtZVNpemU7XG4gICAgdGhpcy5fcGt0ID0gbmV3IFBhY2tldCgpO1xuICAgIHRoaXMuX3BrdC5hbGxvYygpO1xuICAgIHRoaXMuX2ZpbHRlckZyYW1lID0gbmV3IEZyYW1lKCk7XG4gICAgdGhpcy5fZmlsdGVyRnJhbWUuYWxsb2MoKTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBjcmVhdGUob3B0czogQXVkaW9FbmNvZGVyT3B0aW9ucyk6IFByb21pc2U8QXVkaW9FbmNvZGVyPiB7XG4gICAgY29uc3QgY29kZWMgPSBDb2RlYy5maW5kRW5jb2RlckJ5TmFtZShvcHRzLmNvZGVjTmFtZSk7XG4gICAgaWYgKCFjb2RlYykgdGhyb3cgbmV3IEVycm9yKGBBdWRpbyBlbmNvZGVyIG5vdCBmb3VuZDogJHtvcHRzLmNvZGVjTmFtZX1gKTtcbiAgICBjb25zdCBjdHggPSBuZXcgQ29kZWNDb250ZXh0KCk7XG4gICAgY3R4LmFsbG9jQ29udGV4dDMoY29kZWMpO1xuICAgIGN0eC5jb2RlY0lkID0gY29kZWMuaWQ7XG4gICAgY3R4LnNhbXBsZUZvcm1hdCA9IG9wdHMub3V0U2FtcGxlRm10O1xuICAgIGN0eC5zYW1wbGVSYXRlID0gb3B0cy5vdXRTYW1wbGVSYXRlO1xuICAgIGN0eC5jaGFubmVsTGF5b3V0ID0gQVZfQ0hBTk5FTF9MQVlPVVRfU1RFUkVPO1xuICAgIGN0eC50aW1lQmFzZSA9IG5ldyBSYXRpb25hbCgxLCBvcHRzLm91dFNhbXBsZVJhdGUpO1xuICAgIGN0eC5iaXRSYXRlID0gQmlnSW50KG9wdHMuYml0cmF0ZSk7XG4gICAgaWYgKG9wdHMuZ2xvYmFsSGVhZGVyKSBjdHguc2V0RmxhZ3MoQVZfQ09ERUNfRkxBR19HTE9CQUxfSEVBREVSKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgY3R4Lm9wZW4yKGNvZGVjLCBudWxsKSwgXCJhdWRpb0N0eC5vcGVuMlwiKTtcbiAgICBjb25zdCBzdHJlYW0gPSBvcHRzLm11eGVyLmFkZFN0cmVhbShjdHgpO1xuICAgIHJldHVybiBuZXcgQXVkaW9FbmNvZGVyKGN0eCwgc3RyZWFtLCBvcHRzLm91dFNhbXBsZUZtdCk7XG4gIH1cblxuICBzZXRJbnB1dFJhdGUoaW5TYW1wbGVSYXRlOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9ncmFwaD8uW1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgIHRoaXMuX2luUmF0ZSA9IGluU2FtcGxlUmF0ZTtcbiAgICBjb25zdCBncmFwaCA9IG5ldyBGaWx0ZXJHcmFwaCgpO1xuICAgIGdyYXBoLmFsbG9jKCk7XG4gICAgY29uc3QgYWJ1ZmZlciA9IEZpbHRlci5nZXRCeU5hbWUoXCJhYnVmZmVyXCIpITtcbiAgICBjb25zdCBidWZTcmMgPSBncmFwaC5jcmVhdGVGaWx0ZXIoXG4gICAgICBhYnVmZmVyLFxuICAgICAgXCJzcmNcIixcbiAgICAgIGBzYW1wbGVfcmF0ZT0ke2luU2FtcGxlUmF0ZX06c2FtcGxlX2ZtdD1mbHQ6Y2hhbm5lbF9sYXlvdXQ9c3RlcmVvOnRpbWVfYmFzZT0xLyR7aW5TYW1wbGVSYXRlfWAsXG4gICAgKTtcbiAgICBpZiAoIWJ1ZlNyYykgdGhyb3cgbmV3IEVycm9yKFwiRmFpbGVkIHRvIGNyZWF0ZSBhYnVmZmVyXCIpO1xuICAgIGNvbnN0IGFidWZmZXJzaW5rID0gRmlsdGVyLmdldEJ5TmFtZShcImFidWZmZXJzaW5rXCIpITtcbiAgICBjb25zdCBidWZTaW5rID0gZ3JhcGguY3JlYXRlRmlsdGVyKGFidWZmZXJzaW5rLCBcInNpbmtcIik7XG4gICAgaWYgKCFidWZTaW5rKSB0aHJvdyBuZXcgRXJyb3IoXCJGYWlsZWQgdG8gY3JlYXRlIGFidWZmZXJzaW5rXCIpO1xuICAgIGNvbnN0IGZtdE5hbWUgPSBTQU1QTEVfRk1UX05BTUVbdGhpcy5fb3V0Rm10XSA/PyBcImZsdFwiO1xuICAgIGNvbnN0IGZpbHRlckRlc2MgPSBgYWZvcm1hdD1zYW1wbGVfZm10cz0ke2ZtdE5hbWV9OnNhbXBsZV9yYXRlcz0ke3RoaXMuX291dFJhdGV9OmNoYW5uZWxfbGF5b3V0cz1zdGVyZW8sYXNldG5zYW1wbGVzPW49JHt0aGlzLl9mcmFtZVNpemV9OnA9MWA7XG4gICAgY29uc3Qgb3V0cHV0cyA9IEZpbHRlckluT3V0LmNyZWF0ZUxpc3QoW3sgbmFtZTogXCJpblwiLCBmaWx0ZXJDdHg6IGJ1ZlNyYywgcGFkSWR4OiAwIH1dKTtcbiAgICBjb25zdCBpbnB1dHMgPSBGaWx0ZXJJbk91dC5jcmVhdGVMaXN0KFt7IG5hbWU6IFwib3V0XCIsIGZpbHRlckN0eDogYnVmU2luaywgcGFkSWR4OiAwIH1dKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoZ3JhcGgucGFyc2VQdHIoZmlsdGVyRGVzYywgaW5wdXRzLCBvdXRwdXRzKSwgXCJncmFwaC5wYXJzZVB0clwiKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoZ3JhcGguY29uZmlnU3luYygpLCBcImdyYXBoLmNvbmZpZ1wiKTtcbiAgICB0aGlzLl9ncmFwaCA9IGdyYXBoO1xuICAgIHRoaXMuX2J1ZlNyYyA9IGJ1ZlNyYztcbiAgICB0aGlzLl9idWZTaW5rID0gYnVmU2luaztcbiAgfVxuXG4gIGFzeW5jIGVuY29kZShwY206IEJ1ZmZlciwgbXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLl9idWZTcmMgfHwgIXRoaXMuX2luUmF0ZSkgcmV0dXJuO1xuICAgIGNvbnN0IHNyYyA9IG5ldyBGbG9hdDMyQXJyYXkocGNtLmJ1ZmZlciwgcGNtLmJ5dGVPZmZzZXQsIHBjbS5ieXRlTGVuZ3RoIC8gNCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzcmMubGVuZ3RoOyBpKyspIGlmICghaXNGaW5pdGUoc3JjW2ldISkpIHNyY1tpXSA9IDA7XG4gICAgY29uc3QgblNhbXBsZXMgPSBzcmMubGVuZ3RoID4+IDE7XG4gICAgdXNpbmcgZnJhbWUgPSBGcmFtZS5mcm9tQXVkaW9CdWZmZXIoQnVmZmVyLmZyb20oc3JjLmJ1ZmZlciwgc3JjLmJ5dGVPZmZzZXQsIHNyYy5ieXRlTGVuZ3RoKSwge1xuICAgICAgbmJTYW1wbGVzOiBuU2FtcGxlcyxcbiAgICAgIGZvcm1hdDogQVZfU0FNUExFX0ZNVF9GTFQsXG4gICAgICBzYW1wbGVSYXRlOiB0aGlzLl9pblJhdGUsXG4gICAgICBjaGFubmVsTGF5b3V0OiBBVl9DSEFOTkVMX0xBWU9VVF9TVEVSRU8sXG4gICAgICBwdHM6IHRoaXMuX3B0cyxcbiAgICAgIHRpbWVCYXNlOiB7IG51bTogMSwgZGVuOiB0aGlzLl9pblJhdGUgfSxcbiAgICB9KTtcbiAgICB0aGlzLl9wdHMgKz0gQmlnSW50KG5TYW1wbGVzKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgdGhpcy5fYnVmU3JjLmJ1ZmZlcnNyY0FkZEZyYW1lKGZyYW1lKSwgXCJidWZmZXJzcmNBZGRGcmFtZVwiKTtcbiAgICBhd2FpdCB0aGlzLmRyYWluKG11eGVyKTtcbiAgfVxuXG4gIGFzeW5jIGZsdXNoKG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9idWZTcmMpIHtcbiAgICAgIGF3YWl0IHRoaXMuX2J1ZlNyYy5idWZmZXJzcmNBZGRGcmFtZShudWxsKTtcbiAgICAgIGF3YWl0IHRoaXMuZHJhaW4obXV4ZXIpO1xuICAgIH1cbiAgICBhd2FpdCB0aGlzLl9jdHguc2VuZEZyYW1lKG51bGwpO1xuICAgIGF3YWl0IHRoaXMuZHJhaW5Db2RlYyhtdXhlcik7XG4gIH1cblxuICBbU3ltYm9sLmRpc3Bvc2VdKCk6IHZvaWQge1xuICAgIHRoaXMuX3BrdC5mcmVlKCk7XG4gICAgdGhpcy5fZmlsdGVyRnJhbWUuZnJlZSgpO1xuICAgIHRoaXMuX2dyYXBoPy5bU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgdGhpcy5fY3R4LmZyZWVDb250ZXh0KCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGRyYWluKG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBjb25zdCByID0gYXdhaXQgdGhpcy5fYnVmU2luayEuYnVmZmVyc2lua0dldEZyYW1lKHRoaXMuX2ZpbHRlckZyYW1lKTtcbiAgICAgIGlmIChyID09PSBBVkVSUk9SX0VBR0FJTiB8fCByID09PSBBVkVSUk9SX0VPRikgYnJlYWs7XG4gICAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IociwgXCJidWZmZXJzaW5rR2V0RnJhbWVcIik7XG4gICAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgdGhpcy5fY3R4LnNlbmRGcmFtZSh0aGlzLl9maWx0ZXJGcmFtZSksIFwiYXVkaW9DdHguc2VuZEZyYW1lXCIpO1xuICAgICAgdGhpcy5fZmlsdGVyRnJhbWUudW5yZWYoKTtcbiAgICAgIGF3YWl0IHRoaXMuZHJhaW5Db2RlYyhtdXhlcik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBkcmFpbkNvZGVjKG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBjb25zdCByID0gYXdhaXQgdGhpcy5fY3R4LnJlY2VpdmVQYWNrZXQodGhpcy5fcGt0KTtcbiAgICAgIGlmIChyID09PSBBVkVSUk9SX0VBR0FJTiB8fCByID09PSBBVkVSUk9SX0VPRikgYnJlYWs7XG4gICAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IociwgXCJhdWRpby5yZWNlaXZlUGFja2V0XCIpO1xuICAgICAgdGhpcy5fcGt0LnN0cmVhbUluZGV4ID0gdGhpcy5fc3RyZWFtLmluZGV4O1xuICAgICAgdGhpcy5fcGt0LnJlc2NhbGVUcyh0aGlzLl9jdHgudGltZUJhc2UsIHRoaXMuX3N0cmVhbS50aW1lQmFzZSk7XG4gICAgICBhd2FpdCBtdXhlci53cml0ZVBhY2tldCh0aGlzLl9wa3QpO1xuICAgICAgdGhpcy5fcGt0LnVucmVmKCk7XG4gICAgfVxuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAzLzIxLlxuXG5pbXBvcnQgeyBDb2RlY0NvbnRleHQsIEZGbXBlZ0Vycm9yLCBGb3JtYXRDb250ZXh0LCBQYWNrZXQgfSBmcm9tIFwibm9kZS1hdlwiO1xuXG5leHBvcnQgY2xhc3MgRm9ybWF0TXV4ZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF9jdHg6IEZvcm1hdENvbnRleHQ7XG4gIHByaXZhdGUgX29wZW5lZCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKG91dFBhdGg6IHN0cmluZywgZm9ybWF0TmFtZT86IHN0cmluZykge1xuICAgIHRoaXMuX2N0eCA9IG5ldyBGb3JtYXRDb250ZXh0KCk7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKHRoaXMuX2N0eC5hbGxvY091dHB1dENvbnRleHQyKG51bGwsIGZvcm1hdE5hbWUgPz8gbnVsbCwgb3V0UGF0aCksIFwiYWxsb2NPdXRwdXRDb250ZXh0MlwiKTtcbiAgfVxuXG4gIGFkZFN0cmVhbShjb2RlY0N0eDogQ29kZWNDb250ZXh0LCBjb2RlY1RhZz86IHN0cmluZyk6IFJldHVyblR5cGU8Rm9ybWF0Q29udGV4dFtcIm5ld1N0cmVhbVwiXT4ge1xuICAgIGNvbnN0IHN0cmVhbSA9IHRoaXMuX2N0eC5uZXdTdHJlYW0obnVsbCk7XG4gICAgc3RyZWFtLnRpbWVCYXNlID0gY29kZWNDdHgudGltZUJhc2U7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKHN0cmVhbS5jb2RlY3Bhci5mcm9tQ29udGV4dChjb2RlY0N0eCksIFwiY29kZWNwYXIuZnJvbUNvbnRleHRcIik7XG4gICAgaWYgKGNvZGVjVGFnKSBzdHJlYW0uY29kZWNwYXIuY29kZWNUYWcgPSBjb2RlY1RhZztcbiAgICByZXR1cm4gc3RyZWFtO1xuICB9XG5cbiAgYXN5bmMgb3BlbigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fb3BlbmVkKSByZXR1cm47XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IHRoaXMuX2N0eC5vcGVuT3V0cHV0KCksIFwib3Blbk91dHB1dFwiKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgdGhpcy5fY3R4LndyaXRlSGVhZGVyKG51bGwpLCBcIndyaXRlSGVhZGVyXCIpO1xuICAgIHRoaXMuX29wZW5lZCA9IHRydWU7XG4gIH1cblxuICBhc3luYyB3cml0ZVBhY2tldChwa3Q6IFBhY2tldCk6IFByb21pc2U8dm9pZD4ge1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCB0aGlzLl9jdHguaW50ZXJsZWF2ZWRXcml0ZUZyYW1lKHBrdCksIFwiaW50ZXJsZWF2ZWRXcml0ZUZyYW1lXCIpO1xuICB9XG5cbiAgYXN5bmMgW1N5bWJvbC5hc3luY0Rpc3Bvc2VdKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5fb3BlbmVkKSByZXR1cm47XG4gICAgYXdhaXQgdGhpcy5fY3R4LndyaXRlVHJhaWxlcigpO1xuICAgIGF3YWl0IHRoaXMuX2N0eC5jbG9zZU91dHB1dCgpO1xuICAgIGF3YWl0IHRoaXMuX2N0eFtTeW1ib2wuYXN5bmNEaXNwb3NlXSgpO1xuICAgIHRoaXMuX29wZW5lZCA9IGZhbHNlO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAzLzIxLlxuXG5pbXBvcnQgeyBDb2RlYywgQ29kZWNDb250ZXh0LCBGRm1wZWdFcnJvciwgRnJhbWUsIFBhY2tldCwgUmF0aW9uYWwgfSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHtcbiAgQVZfQ09ERUNfRkxBR19HTE9CQUxfSEVBREVSLFxuICBBVkVSUk9SX0VBR0FJTixcbiAgQVZFUlJPUl9FT0YsXG4gIEZGX1RIUkVBRF9TTElDRSxcbiAgdHlwZSBBVlBpeGVsRm9ybWF0LFxuICB0eXBlIEZGVmlkZW9FbmNvZGVyLFxufSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcbmltcG9ydCB0eXBlIHsgRm9ybWF0TXV4ZXIgfSBmcm9tIFwiLi9tdXhlclwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFZpZGVvRW5jb2Rlck9wdGlvbnMge1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgZnBzOiBudW1iZXI7XG4gIGNvZGVjTmFtZTogRkZWaWRlb0VuY29kZXI7XG4gIGNvZGVjVGFnPzogc3RyaW5nO1xuICBnbG9iYWxIZWFkZXI6IGJvb2xlYW47XG4gIGNvZGVjT3B0czogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgYml0cmF0ZTogbnVtYmVyO1xuICBwaXhlbEZvcm1hdDogQVZQaXhlbEZvcm1hdDtcbiAgdGhyZWFkQ291bnQ/OiBudW1iZXI7XG4gIG11eGVyOiBGb3JtYXRNdXhlcjtcbn1cblxudHlwZSBTdHJlYW0gPSBSZXR1cm5UeXBlPGltcG9ydChcIm5vZGUtYXZcIikuRm9ybWF0Q29udGV4dFtcIm5ld1N0cmVhbVwiXT47XG5cbmV4cG9ydCBjbGFzcyBWaWRlb0VuY29kZXIgaW1wbGVtZW50cyBEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfY3R4OiBDb2RlY0NvbnRleHQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3BrdDogUGFja2V0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdHJlYW06IFN0cmVhbTtcbiAgcHJpdmF0ZSBfcHRzID0gMG47XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihjdHg6IENvZGVjQ29udGV4dCwgcGt0OiBQYWNrZXQsIHN0cmVhbTogU3RyZWFtKSB7XG4gICAgdGhpcy5fY3R4ID0gY3R4O1xuICAgIHRoaXMuX3BrdCA9IHBrdDtcbiAgICB0aGlzLl9zdHJlYW0gPSBzdHJlYW07XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgY3JlYXRlKG9wdHM6IFZpZGVvRW5jb2Rlck9wdGlvbnMpOiBQcm9taXNlPFZpZGVvRW5jb2Rlcj4ge1xuICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgZnBzLCBjb2RlY05hbWUsIGNvZGVjVGFnLCBnbG9iYWxIZWFkZXIsIGNvZGVjT3B0cywgYml0cmF0ZSwgdGhyZWFkQ291bnQsIG11eGVyIH0gPSBvcHRzO1xuXG4gICAgY29uc3QgY29kZWMgPSBDb2RlYy5maW5kRW5jb2RlckJ5TmFtZShjb2RlY05hbWUpO1xuICAgIGlmICghY29kZWMpIHRocm93IG5ldyBFcnJvcihgVmlkZW8gZW5jb2RlciBub3QgZm91bmQ6ICR7Y29kZWNOYW1lfWApO1xuXG4gICAgY29uc3QgY3R4ID0gbmV3IENvZGVjQ29udGV4dCgpO1xuICAgIGN0eC5hbGxvY0NvbnRleHQzKGNvZGVjKTtcbiAgICBjdHguY29kZWNJZCA9IGNvZGVjLmlkO1xuICAgIGN0eC53aWR0aCA9IHdpZHRoO1xuICAgIGN0eC5oZWlnaHQgPSBoZWlnaHQ7XG4gICAgY3R4LnBpeGVsRm9ybWF0ID0gb3B0cy5waXhlbEZvcm1hdDtcbiAgICBjdHgudGltZUJhc2UgPSBuZXcgUmF0aW9uYWwoMSwgZnBzKTtcbiAgICBjdHguZnJhbWVyYXRlID0gbmV3IFJhdGlvbmFsKGZwcywgMSk7XG4gICAgY3R4LmdvcFNpemUgPSBmcHMgKiAyO1xuICAgIGN0eC5iaXRSYXRlID0gQmlnSW50KGJpdHJhdGUpO1xuICAgIGlmICh0aHJlYWRDb3VudCkge1xuICAgICAgY3R4LnRocmVhZENvdW50ID0gdGhyZWFkQ291bnQ7XG4gICAgICBjdHgudGhyZWFkVHlwZSA9IEZGX1RIUkVBRF9TTElDRTtcbiAgICB9XG4gICAgaWYgKGdsb2JhbEhlYWRlcikgY3R4LnNldEZsYWdzKEFWX0NPREVDX0ZMQUdfR0xPQkFMX0hFQURFUik7XG4gICAgZm9yIChjb25zdCBbaywgdl0gb2YgT2JqZWN0LmVudHJpZXMoY29kZWNPcHRzKSkgY3R4LnNldE9wdGlvbihrLCB2KTtcbiAgICBpZiAoY29kZWNUYWcpIGN0eC5jb2RlY1RhZyA9IGNvZGVjVGFnO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCBjdHgub3BlbjIoY29kZWMsIG51bGwpLCBcInZpZGVvQ3R4Lm9wZW4yXCIpO1xuXG4gICAgY29uc3QgcGt0ID0gbmV3IFBhY2tldCgpO1xuICAgIHBrdC5hbGxvYygpO1xuXG4gICAgY29uc3Qgc3RyZWFtID0gbXV4ZXIuYWRkU3RyZWFtKGN0eCwgY29kZWNUYWcpO1xuICAgIHJldHVybiBuZXcgVmlkZW9FbmNvZGVyKGN0eCwgcGt0LCBzdHJlYW0pO1xuICB9XG5cbiAgYXN5bmMgZW5jb2RlKGZyYW1lOiBGcmFtZSwgbXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgZnJhbWUucHRzID0gdGhpcy5fcHRzKys7XG4gICAgZnJhbWUuZHVyYXRpb24gPSAxbjtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgdGhpcy5fY3R4LnNlbmRGcmFtZShmcmFtZSksIFwidmlkZW9DdHguc2VuZEZyYW1lXCIpO1xuICAgIGF3YWl0IHRoaXMuZHJhaW4obXV4ZXIpO1xuICB9XG5cbiAgYXN5bmMgZmx1c2gobXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5fY3R4LnNlbmRGcmFtZShudWxsKTtcbiAgICBhd2FpdCB0aGlzLmRyYWluKG11eGVyKTtcbiAgfVxuXG4gIFtTeW1ib2wuZGlzcG9zZV0oKTogdm9pZCB7XG4gICAgdGhpcy5fcGt0LmZyZWUoKTtcbiAgICB0aGlzLl9jdHguZnJlZUNvbnRleHQoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZHJhaW4obXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcGt0ID0gdGhpcy5fcGt0O1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBjb25zdCByID0gYXdhaXQgdGhpcy5fY3R4LnJlY2VpdmVQYWNrZXQocGt0KTtcbiAgICAgIGlmIChyID09PSBBVkVSUk9SX0VBR0FJTiB8fCByID09PSBBVkVSUk9SX0VPRikgYnJlYWs7XG4gICAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IociwgXCJ2aWRlby5yZWNlaXZlUGFja2V0XCIpO1xuICAgICAgcGt0LnN0cmVhbUluZGV4ID0gdGhpcy5fc3RyZWFtLmluZGV4O1xuICAgICAgaWYgKHBrdC5kdXJhdGlvbiA9PT0gMG4pIHBrdC5kdXJhdGlvbiA9IDFuO1xuICAgICAgcGt0LnJlc2NhbGVUcyh0aGlzLl9jdHgudGltZUJhc2UsIHRoaXMuX3N0cmVhbS50aW1lQmFzZSk7XG4gICAgICBhd2FpdCBtdXhlci53cml0ZVBhY2tldChwa3QpO1xuICAgICAgcGt0LnVucmVmKCk7XG4gICAgfVxuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzAxLlxuXG5pbXBvcnQgeyBjcHVzIH0gZnJvbSBcIm9zXCI7XG5pbXBvcnQgeyBGRm1wZWdFcnJvciwgRnJhbWUsIFNvZnR3YXJlU2NhbGVDb250ZXh0IH0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB7XG4gIEFWX1BJWF9GTVRfQkdSQSxcbiAgQVZfUElYX0ZNVF9ZVVZBNDIwUCxcbiAgQVZfU0FNUExFX0ZNVF9GTFRQLFxuICBGRl9FTkNPREVSX0FBQyxcbiAgRkZfRU5DT0RFUl9MSUJYMjY1LFxuICBTV1NfQklMSU5FQVIsXG59IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuXG5pbXBvcnQgeyBDb25jdXJyZW5jeUxpbWl0ZXIgfSBmcm9tIFwiLi4vbGltaXRlclwiO1xuaW1wb3J0IHsgQXVkaW9FbmNvZGVyIH0gZnJvbSBcIi4vYXVkaW9cIjtcbmltcG9ydCB7IEZvcm1hdE11eGVyIH0gZnJvbSBcIi4vbXV4ZXJcIjtcbmltcG9ydCB7IFZpZGVvRW5jb2RlciB9IGZyb20gXCIuL3ZpZGVvXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRW5jb2RlclBpcGVsaW5lT3B0aW9ucyB7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICBmcHM6IG51bWJlcjtcbiAgb3V0RmlsZTogc3RyaW5nO1xuICB3aXRoQXVkaW8/OiBib29sZWFuO1xufVxuXG5leHBvcnQgY2xhc3MgRW5jb2RlclBpcGVsaW5lIHtcbiAgcHJpdmF0ZSBfZGlzcG9zZWQgPSBmYWxzZTtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgX3ZpZGVvOiBWaWRlb0VuY29kZXIsXG4gICAgcHJpdmF0ZSBfYXVkaW86IEF1ZGlvRW5jb2RlciB8IHVuZGVmaW5lZCxcbiAgICBwcml2YXRlIF9tdXhlcjogRm9ybWF0TXV4ZXIsXG4gICAgcHJpdmF0ZSBfbGltaXRlcjogQ29uY3VycmVuY3lMaW1pdGVyLFxuICAgIHByaXZhdGUgX291dEZpbGU6IHN0cmluZyxcbiAgICBwcml2YXRlIF9zd3M6IFNvZnR3YXJlU2NhbGVDb250ZXh0LFxuICAgIHByaXZhdGUgX3NyY0ZyYW1lOiBGcmFtZSxcbiAgICBwcml2YXRlIF9kc3RGcmFtZTogRnJhbWUsXG4gICkge31cblxuICBzdGF0aWMgYXN5bmMgY3JlYXRlKG9wdHM6IEVuY29kZXJQaXBlbGluZU9wdGlvbnMpOiBQcm9taXNlPEVuY29kZXJQaXBlbGluZT4ge1xuICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgZnBzLCBvdXRGaWxlLCB3aXRoQXVkaW8gPSBmYWxzZSB9ID0gb3B0cztcbiAgICBjb25zdCBtdXhlciA9IG5ldyBGb3JtYXRNdXhlcihvdXRGaWxlKTtcblxuICAgIGNvbnN0IHZpZGVvID0gYXdhaXQgVmlkZW9FbmNvZGVyLmNyZWF0ZSh7XG4gICAgICB3aWR0aCxcbiAgICAgIGhlaWdodCxcbiAgICAgIGZwcyxcbiAgICAgIGNvZGVjTmFtZTogRkZfRU5DT0RFUl9MSUJYMjY1LFxuICAgICAgY29kZWNUYWc6IFwiaHZjMVwiLFxuICAgICAgZ2xvYmFsSGVhZGVyOiB0cnVlLFxuICAgICAgY29kZWNPcHRzOiB7IHByZXNldDogXCJ1bHRyYWZhc3RcIiwgXCJ4MjY1LXBhcmFtc1wiOiBcImxvZy1sZXZlbD0xOmJmcmFtZXM9MFwiIH0sXG4gICAgICBiaXRyYXRlOiA4XzAwMF8wMDAsXG4gICAgICBwaXhlbEZvcm1hdDogQVZfUElYX0ZNVF9ZVVZBNDIwUCxcbiAgICAgIHRocmVhZENvdW50OiBjcHVzKCkubGVuZ3RoLFxuICAgICAgbXV4ZXIsXG4gICAgfSk7XG5cbiAgICBsZXQgYXVkaW86IEF1ZGlvRW5jb2RlciB8IHVuZGVmaW5lZDtcbiAgICBpZiAod2l0aEF1ZGlvKSB7XG4gICAgICBhdWRpbyA9IGF3YWl0IEF1ZGlvRW5jb2Rlci5jcmVhdGUoe1xuICAgICAgICBvdXRTYW1wbGVSYXRlOiA0NF8xMDAsXG4gICAgICAgIG91dFNhbXBsZUZtdDogQVZfU0FNUExFX0ZNVF9GTFRQLFxuICAgICAgICBjb2RlY05hbWU6IEZGX0VOQ09ERVJfQUFDLFxuICAgICAgICBnbG9iYWxIZWFkZXI6IHRydWUsXG4gICAgICAgIGJpdHJhdGU6IDEyOF8wMDAsXG4gICAgICAgIG11eGVyLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXdhaXQgbXV4ZXIub3BlbigpO1xuICAgIGNvbnN0IGxpbWl0ZXIgPSBuZXcgQ29uY3VycmVuY3lMaW1pdGVyKDEpO1xuXG4gICAgY29uc3Qgc3JjRnJhbWUgPSBuZXcgRnJhbWUoKTtcbiAgICBzcmNGcmFtZS5hbGxvYygpO1xuICAgIHNyY0ZyYW1lLmZvcm1hdCA9IEFWX1BJWF9GTVRfQkdSQTtcbiAgICBzcmNGcmFtZS53aWR0aCA9IHdpZHRoO1xuICAgIHNyY0ZyYW1lLmhlaWdodCA9IGhlaWdodDtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3Ioc3JjRnJhbWUuZ2V0QnVmZmVyKDApLCBcInNyY0ZyYW1lLmdldEJ1ZmZlclwiKTtcblxuICAgIGNvbnN0IHN3cyA9IG5ldyBTb2Z0d2FyZVNjYWxlQ29udGV4dCgpO1xuICAgIHN3cy5nZXRDb250ZXh0KHdpZHRoLCBoZWlnaHQsIEFWX1BJWF9GTVRfQkdSQSwgd2lkdGgsIGhlaWdodCwgQVZfUElYX0ZNVF9ZVVZBNDIwUCwgU1dTX0JJTElORUFSKTtcbiAgICBjb25zdCBkc3RGcmFtZSA9IG5ldyBGcmFtZSgpO1xuICAgIGRzdEZyYW1lLmFsbG9jKCk7XG4gICAgZHN0RnJhbWUuZm9ybWF0ID0gQVZfUElYX0ZNVF9ZVVZBNDIwUDtcbiAgICBkc3RGcmFtZS53aWR0aCA9IHdpZHRoO1xuICAgIGRzdEZyYW1lLmhlaWdodCA9IGhlaWdodDtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoZHN0RnJhbWUuZ2V0QnVmZmVyKDApLCBcImRzdEZyYW1lLmdldEJ1ZmZlclwiKTtcblxuICAgIHJldHVybiBuZXcgRW5jb2RlclBpcGVsaW5lKHZpZGVvLCBhdWRpbywgbXV4ZXIsIGxpbWl0ZXIsIG91dEZpbGUsIHN3cywgc3JjRnJhbWUsIGRzdEZyYW1lKTtcbiAgfVxuXG4gIHNldHVwQXVkaW8oc2FtcGxlUmF0ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5fYXVkaW8/LnNldElucHV0UmF0ZShzYW1wbGVSYXRlKTtcbiAgfVxuXG4gIGFzeW5jIGVuY29kZUZyYW1lKGlucHV0OiBCdWZmZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLl9saW1pdGVyLnNjaGVkdWxlKGFzeW5jICgpID0+IHtcbiAgICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcih0aGlzLl9zcmNGcmFtZS5tYWtlV3JpdGFibGUoKSwgXCJzcmNGcmFtZS5tYWtlV3JpdGFibGVcIik7XG4gICAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IodGhpcy5fc3JjRnJhbWUuZnJvbUJ1ZmZlcihpbnB1dCksIFwic3JjRnJhbWUuZnJvbUJ1ZmZlclwiKTtcbiAgICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCB0aGlzLl9zd3Muc2NhbGVGcmFtZSh0aGlzLl9kc3RGcmFtZSwgdGhpcy5fc3JjRnJhbWUpLCBcInN3cy5zY2FsZUZyYW1lXCIpO1xuICAgICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKHRoaXMuX2RzdEZyYW1lLm1ha2VXcml0YWJsZSgpLCBcImRzdEZyYW1lLm1ha2VXcml0YWJsZVwiKTtcbiAgICAgIHJldHVybiB0aGlzLl92aWRlby5lbmNvZGUodGhpcy5fZHN0RnJhbWUsIHRoaXMuX211eGVyKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGVuY29kZUF1ZGlvKHBjbTogQnVmZmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX2F1ZGlvKSBhd2FpdCB0aGlzLl9saW1pdGVyLnNjaGVkdWxlKCgpID0+IHRoaXMuX2F1ZGlvIS5lbmNvZGUocGNtLCB0aGlzLl9tdXhlcikpO1xuICB9XG5cbiAgYXN5bmMgZmluaXNoKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHVzaW5nIF9tID0gdGhpcy5fbXV4ZXI7XG4gICAgICB1c2luZyBfdiA9IHRoaXMuX3ZpZGVvO1xuICAgICAgdXNpbmcgX2EgPSB0aGlzLl9hdWRpbztcbiAgICAgIGF3YWl0IHRoaXMuX2xpbWl0ZXIuZW5kKCk7XG4gICAgICBhd2FpdCB0aGlzLl9hdWRpbz8uZmx1c2godGhpcy5fbXV4ZXIpO1xuICAgICAgYXdhaXQgdGhpcy5fdmlkZW8uZmx1c2godGhpcy5fbXV4ZXIpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLmZyZWUoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX291dEZpbGU7XG4gIH1cblxuICBhc3luYyBbU3ltYm9sLmFzeW5jRGlzcG9zZV0oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX2Rpc3Bvc2VkKSByZXR1cm47XG4gICAgYXdhaXQgdGhpcy5fbGltaXRlci5lbmQoKTtcbiAgICB0aGlzLl92aWRlb1tTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICB0aGlzLl9hdWRpbz8uW1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgIGF3YWl0IHRoaXMuX211eGVyW1N5bWJvbC5hc3luY0Rpc3Bvc2VdKCk7XG4gICAgdGhpcy5mcmVlKCk7XG4gIH1cblxuICBwcml2YXRlIGZyZWUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2Rpc3Bvc2VkKSByZXR1cm47XG4gICAgdGhpcy5fZGlzcG9zZWQgPSB0cnVlO1xuICAgIHRoaXMuX3NyY0ZyYW1lLmZyZWUoKTtcbiAgICB0aGlzLl9kc3RGcmFtZS5mcmVlKCk7XG4gICAgdGhpcy5fc3dzW1N5bWJvbC5kaXNwb3NlXSgpO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAzLzIzLlxuXG4vKipcbiAqIEZyYW1lIGRyb3AgcXVhbGl0eSBzY29yZSAoMCA9IHBlcmZlY3QsIDEgPSB3b3JzdCkuXG4gKlxuICogQ29tYmluZXMgdHdvIGRpbWVuc2lvbnM6XG4gKiAtIEdsb2JhbDogb3ZlcmFsbCBkcm9wIHJhdGUgYWNyb3NzIHRoZSB0aW1lbGluZVxuICogLSBMb2NhbDogcGVyY2VwdHVhbCBzZXZlcml0eSBvZiBjb25zZWN1dGl2ZSBkcm9wcyAoYnVyc3RzKVxuICpcbiAqIFVzZXMgY29tcGxlbWVudGFyeSBtdWx0aXBsaWNhdGlvbjogc2NvcmUgPSAxIC0gKDEtZykoMS1sKVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZyYW1lRHJvcFNjb3JlIHtcbiAgZ2xvYmFsOiBudW1iZXI7XG4gIGxvY2FsOiBudW1iZXI7XG4gIGphbms6IG51bWJlcjtcbiAgZXhwZWN0ZWQ6IG51bWJlcjtcbiAgYWN0dWFsOiBudW1iZXI7XG4gIG1heEJ1cnN0OiBudW1iZXI7XG59XG5cbmV4cG9ydCBjbGFzcyBGcmFtZURyb3BTdGF0cyB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2ZwczogbnVtYmVyO1xuICBwcml2YXRlIF9hY3R1YWwgPSAwO1xuICBwcml2YXRlIF9jdXJyZW50QnVyc3QgPSAwO1xuICBwcml2YXRlIF9idXJzdHM6IG51bWJlcltdID0gW107XG5cbiAgY29uc3RydWN0b3IoZnBzOiBudW1iZXIpIHtcbiAgICB0aGlzLl9mcHMgPSBmcHM7XG4gIH1cblxuICAvKiogQ2FsbCB3aGVuIGEgZnJhbWUgaXMgYWN0dWFsbHkgd3JpdHRlbiB0byB0aGUgZW5jb2Rlci4gKi9cbiAgd3JvdGUoY291bnQgPSAxKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2N1cnJlbnRCdXJzdCA+IDApIHtcbiAgICAgIHRoaXMuX2J1cnN0cy5wdXNoKHRoaXMuX2N1cnJlbnRCdXJzdCk7XG4gICAgICB0aGlzLl9jdXJyZW50QnVyc3QgPSAwO1xuICAgIH1cbiAgICB0aGlzLl9hY3R1YWwgKz0gY291bnQ7XG4gIH1cblxuICAvKiogQ2FsbCB3aGVuIGEgZnJhbWUgaXMgZHJvcHBlZC4gKi9cbiAgZHJvcHBlZChjb3VudCA9IDEpOiB2b2lkIHtcbiAgICB0aGlzLl9jdXJyZW50QnVyc3QgKz0gY291bnQ7XG4gIH1cblxuICAvKiogRmluYWxpemUgYW5kIHJldHVybiB0aGUgc2NvcmUuICovXG4gIGZpbmFsaXplKCk6IEZyYW1lRHJvcFNjb3JlIHtcbiAgICBpZiAodGhpcy5fY3VycmVudEJ1cnN0ID4gMCkge1xuICAgICAgdGhpcy5fYnVyc3RzLnB1c2godGhpcy5fY3VycmVudEJ1cnN0KTtcbiAgICAgIHRoaXMuX2N1cnJlbnRCdXJzdCA9IDA7XG4gICAgfVxuXG4gICAgbGV0IHRvdGFsRHJvcHBlZCA9IDA7XG4gICAgbGV0IGxvY2FsU3VtID0gMDtcbiAgICBsZXQgbWF4QnVyc3QgPSAwO1xuICAgIGZvciAoY29uc3QgYnVyc3Qgb2YgdGhpcy5fYnVyc3RzKSB7XG4gICAgICB0b3RhbERyb3BwZWQgKz0gYnVyc3Q7XG4gICAgICBtYXhCdXJzdCA9IE1hdGgubWF4KG1heEJ1cnN0LCBidXJzdCk7XG4gICAgICBjb25zdCBwZXJjZXB0aWJsZSA9IE1hdGgubWF4KDAsIGJ1cnN0IC0gMSk7XG4gICAgICBsb2NhbFN1bSArPSAocGVyY2VwdGlibGUgLyB0aGlzLl9mcHMpICoqIDI7XG4gICAgfVxuXG4gICAgY29uc3QgZXhwZWN0ZWQgPSB0aGlzLl9hY3R1YWwgKyB0b3RhbERyb3BwZWQ7XG4gICAgY29uc3QgZyA9IGV4cGVjdGVkID4gMCA/IHRvdGFsRHJvcHBlZCAvIGV4cGVjdGVkIDogMDtcbiAgICBjb25zdCBsID0gTWF0aC5taW4oMSwgbG9jYWxTdW0pO1xuICAgIGNvbnN0IHNjb3JlID0gMSAtICgxIC0gZykgKiAoMSAtIGwpO1xuXG4gICAgcmV0dXJuIHsgZ2xvYmFsOiBnLCBsb2NhbDogbCwgamFuazogc2NvcmUsIGV4cGVjdGVkLCBhY3R1YWw6IHRoaXMuX2FjdHVhbCwgbWF4QnVyc3QgfTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wNi5cblxuaW1wb3J0IHR5cGUgeyBOYXRpdmVJbWFnZSB9IGZyb20gXCJlbGVjdHJvblwiO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNFbXB0eShpbWFnZTogTmF0aXZlSW1hZ2UpIHtcbiAgY29uc3Qgc2l6ZSA9IGltYWdlLmdldFNpemUoKTtcbiAgaWYgKHNpemUud2lkdGggPT09IDAgfHwgc2l6ZS5oZWlnaHQgPT09IDApIHJldHVybiB0cnVlO1xuICByZXR1cm4gaW1hZ2UuaXNFbXB0eSgpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMy8wMi5cblxuaW1wb3J0IHsgcmFuZG9tVVVJRCB9IGZyb20gXCJjcnlwdG9cIjtcbmltcG9ydCB7IGlwY01haW4sIHNlc3Npb24gfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IHJtLCB3cml0ZUZpbGUgfSBmcm9tIFwiZnMvcHJvbWlzZXNcIjtcbmltcG9ydCB7IHRtcGRpciB9IGZyb20gXCJvc1wiO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgdHlwZSB7IEVuY29kZXJQaXBlbGluZSB9IGZyb20gXCIuLi9iYXNlL2VuY29kZXIvZW5jb2RlclwiO1xuXG5jb25zdCBBVURJT19DQVBUVVJFX1NDUklQVCA9IGBcbihmdW5jdGlvbigpIHtcbiAgaWYgKHdpbmRvdy5fX3B1cF9hdWRpb19jYXB0dXJpbmdfXykgcmV0dXJuO1xuICB3aW5kb3cuX19wdXBfYXVkaW9fY2FwdHVyaW5nX18gPSB0cnVlO1xuXG4gIGNvbnN0IHsgaXBjUmVuZGVyZXIgfSA9IHJlcXVpcmUoJ2VsZWN0cm9uJyk7XG4gIGNvbnN0IGNhcHR1cmVkQ29udGV4dHMgPSBuZXcgV2Vha1NldCgpO1xuICBjb25zdCBzb3VyY2VkRWxlbWVudHMgPSBuZXcgV2Vha1NldCgpO1xuICBsZXQgbWV0YVNlbnQgPSBmYWxzZTtcblxuICBjb25zdCBvcmlnQ3JlYXRlTUVTID0gQXVkaW9Db250ZXh0LnByb3RvdHlwZS5jcmVhdGVNZWRpYUVsZW1lbnRTb3VyY2U7XG4gIEF1ZGlvQ29udGV4dC5wcm90b3R5cGUuY3JlYXRlTWVkaWFFbGVtZW50U291cmNlID0gZnVuY3Rpb24oZWwpIHtcbiAgICBzb3VyY2VkRWxlbWVudHMuYWRkKGVsKTtcbiAgICByZXR1cm4gb3JpZ0NyZWF0ZU1FUy5jYWxsKHRoaXMsIGVsKTtcbiAgfTtcblxuICBjb25zdCBvcmlnQ29ubmVjdCA9IEF1ZGlvTm9kZS5wcm90b3R5cGUuY29ubmVjdDtcbiAgQXVkaW9Ob2RlLnByb3RvdHlwZS5jb25uZWN0ID0gZnVuY3Rpb24oZGVzdCwgb3V0SWR4LCBpbklkeCkge1xuICAgIGNvbnN0IGNhcHR1cmVOb2RlID0gZGVzdD8uY29udGV4dD8uX19wdXBfY2FwdHVyZU5vZGVfXztcbiAgICBpZiAoY2FwdHVyZU5vZGUgJiYgZGVzdCA9PT0gZGVzdC5jb250ZXh0LmRlc3RpbmF0aW9uICYmIHRoaXMgIT09IGNhcHR1cmVOb2RlKSB7XG4gICAgICBvcmlnQ29ubmVjdC5jYWxsKHRoaXMsIGNhcHR1cmVOb2RlLCBvdXRJZHgsIGluSWR4KTtcbiAgICB9XG4gICAgcmV0dXJuIG9yaWdDb25uZWN0LmNhbGwodGhpcywgZGVzdCwgb3V0SWR4LCBpbklkeCk7XG4gIH07XG5cbiAgY29uc3QgT3JpZ0FDID0gd2luZG93LkF1ZGlvQ29udGV4dCB8fCB3aW5kb3cud2Via2l0QXVkaW9Db250ZXh0O1xuICBpZiAoIU9yaWdBQykgcmV0dXJuO1xuXG4gIGZ1bmN0aW9uIFBhdGNoZWRBQygpIHtcbiAgICBjb25zdCBjdHggPSBuZXcgT3JpZ0FDKC4uLmFyZ3VtZW50cyk7XG4gICAgaWYgKCFjYXB0dXJlZENvbnRleHRzLmhhcyhjdHgpKSB7XG4gICAgICBjYXB0dXJlZENvbnRleHRzLmFkZChjdHgpO1xuICAgICAgaWYgKCFtZXRhU2VudCkge1xuICAgICAgICBtZXRhU2VudCA9IHRydWU7XG4gICAgICAgIGlwY1JlbmRlcmVyLnNlbmQoJ2F1ZGlvLW1ldGEnLCB7IHNhbXBsZVJhdGU6IGN0eC5zYW1wbGVSYXRlIH0pO1xuICAgICAgfVxuICAgICAgY29uc3Qgbm9kZSA9IGN0eC5jcmVhdGVTY3JpcHRQcm9jZXNzb3IoNDA5NiwgMiwgMik7XG4gICAgICBub2RlLm9uYXVkaW9wcm9jZXNzID0gKGUpID0+IHtcbiAgICAgICAgY29uc3QgTCA9IGUuaW5wdXRCdWZmZXIuZ2V0Q2hhbm5lbERhdGEoMCk7XG4gICAgICAgIGNvbnN0IFIgPSBlLmlucHV0QnVmZmVyLmdldENoYW5uZWxEYXRhKDEpO1xuICAgICAgICBjb25zdCBvdXQgPSBuZXcgRmxvYXQzMkFycmF5KEwubGVuZ3RoICogMik7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgTC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIG91dFtpICogMl0gPSBMW2ldO1xuICAgICAgICAgIG91dFtpICogMiArIDFdID0gUltpXTtcbiAgICAgICAgfVxuICAgICAgICBpcGNSZW5kZXJlci5zZW5kKCdhdWRpby1jaHVuaycsIEJ1ZmZlci5mcm9tKG91dC5idWZmZXIpKTtcbiAgICAgIH07XG4gICAgICBub2RlLmNvbm5lY3QoY3R4LmRlc3RpbmF0aW9uKTtcbiAgICAgIGN0eC5fX3B1cF9jYXB0dXJlTm9kZV9fID0gbm9kZTtcbiAgICB9XG4gICAgcmV0dXJuIGN0eDtcbiAgfVxuICBQYXRjaGVkQUMucHJvdG90eXBlID0gT3JpZ0FDLnByb3RvdHlwZTtcbiAgT2JqZWN0LnNldFByb3RvdHlwZU9mKFBhdGNoZWRBQywgT3JpZ0FDKTtcbiAgd2luZG93LkF1ZGlvQ29udGV4dCA9IFBhdGNoZWRBQztcbiAgaWYgKCd3ZWJraXRBdWRpb0NvbnRleHQnIGluIHdpbmRvdykgd2luZG93LndlYmtpdEF1ZGlvQ29udGV4dCA9IFBhdGNoZWRBQztcblxuICBjb25zdCBvcmlnUGxheSA9IEhUTUxNZWRpYUVsZW1lbnQucHJvdG90eXBlLnBsYXk7XG4gIEhUTUxNZWRpYUVsZW1lbnQucHJvdG90eXBlLnBsYXkgPSBmdW5jdGlvbigpIHtcbiAgICBpZiAoIXRoaXMuX19wdXBfY2FwdHVyZWRfXykge1xuICAgICAgdGhpcy5fX3B1cF9jYXB0dXJlZF9fID0gdHJ1ZTtcbiAgICAgIGNvbnN0IGVsID0gdGhpcztcbiAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICBpZiAoIXNvdXJjZWRFbGVtZW50cy5oYXMoZWwpKSB7XG4gICAgICAgICAgY29uc3QgY3R4ID0gbmV3IFBhdGNoZWRBQygpO1xuICAgICAgICAgIGN0eC5jcmVhdGVNZWRpYUVsZW1lbnRTb3VyY2UoZWwpLmNvbm5lY3QoY3R4LmRlc3RpbmF0aW9uKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBvcmlnUGxheS5jYWxsKHRoaXMpO1xuICB9O1xufSkoKTtcbmA7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXVkaW9DYXB0dXJlIHtcbiAgdGVhcmRvd24oKTogUHJvbWlzZTx2b2lkPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBdWRpb0NhcHR1cmVPcHRpb25zIHtcbiAgZW5jb2RlcjogRW5jb2RlclBpcGVsaW5lO1xuICBnZXRWaWRlb1RpbWVNczogKCkgPT4gbnVtYmVyO1xuICBvbkVycm9yOiAoZXJyb3I6IEVycm9yKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2V0dXBBdWRpb0NhcHR1cmUoe1xuICBlbmNvZGVyLFxuICBnZXRWaWRlb1RpbWVNcyxcbiAgb25FcnJvcixcbn06IEF1ZGlvQ2FwdHVyZU9wdGlvbnMpOiBQcm9taXNlPEF1ZGlvQ2FwdHVyZT4ge1xuICBjb25zdCBwcmVsb2FkUGF0aCA9IGpvaW4odG1wZGlyKCksIGBwdXBfYXVkaW9fcHJlbG9hZF8ke3JhbmRvbVVVSUQoKX0uanNgKTtcbiAgYXdhaXQgd3JpdGVGaWxlKHByZWxvYWRQYXRoLCBBVURJT19DQVBUVVJFX1NDUklQVCk7XG4gIHNlc3Npb24uZGVmYXVsdFNlc3Npb24ucmVnaXN0ZXJQcmVsb2FkU2NyaXB0KHtcbiAgICB0eXBlOiBcImZyYW1lXCIsXG4gICAgaWQ6IFwicHVwLWF1ZGlvXCIsXG4gICAgZmlsZVBhdGg6IHByZWxvYWRQYXRoLFxuICB9KTtcblxuICBpcGNNYWluLm9uKFwiYXVkaW8tbWV0YVwiLCBhc3luYyAoX2UsIGRhdGE6IHsgc2FtcGxlUmF0ZTogbnVtYmVyIH0pID0+IHtcbiAgICBjb25zdCBzYW1wbGVSYXRlID0gZGF0YS5zYW1wbGVSYXRlO1xuICAgIGNvbnN0IHN0YXJ0TXMgPSBnZXRWaWRlb1RpbWVNcygpO1xuICAgIGVuY29kZXIuc2V0dXBBdWRpbyhzYW1wbGVSYXRlKTtcbiAgICBjb25zdCBzaWxlbmNlU2FtcGxlcyA9IE1hdGguY2VpbCgoc3RhcnRNcyAqIHNhbXBsZVJhdGUpIC8gMTAwMCk7XG4gICAgaWYgKHNpbGVuY2VTYW1wbGVzIDw9IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGVuY29kZXIuZW5jb2RlQXVkaW8oQnVmZmVyLmFsbG9jKHNpbGVuY2VTYW1wbGVzICogMiAqIDQpKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgb25FcnJvcihlcnJvciBhcyBFcnJvcik7XG4gICAgfVxuICB9KTtcblxuICBpcGNNYWluLm9uKFwiYXVkaW8tY2h1bmtcIiwgYXN5bmMgKF9lLCBidWZmZXI6IEJ1ZmZlcikgPT4ge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBlbmNvZGVyLmVuY29kZUF1ZGlvKGJ1ZmZlcik7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIG9uRXJyb3IoZXJyb3IgYXMgRXJyb3IpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHtcbiAgICBhc3luYyB0ZWFyZG93bigpIHtcbiAgICAgIGlwY01haW4ucmVtb3ZlQWxsTGlzdGVuZXJzKFwiYXVkaW8tbWV0YVwiKTtcbiAgICAgIGlwY01haW4ucmVtb3ZlQWxsTGlzdGVuZXJzKFwiYXVkaW8tY2h1bmtcIik7XG4gICAgICBzZXNzaW9uLmRlZmF1bHRTZXNzaW9uLnVucmVnaXN0ZXJQcmVsb2FkU2NyaXB0KFwicHVwLWF1ZGlvXCIpO1xuICAgICAgYXdhaXQgcm0ocHJlbG9hZFBhdGgsIHsgZm9yY2U6IHRydWUgfSk7XG4gICAgfSxcbiAgfTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDkuXG5cbmV4cG9ydCBmdW5jdGlvbiBzbGVlcChtczogbnVtYmVyKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCBtcykpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGVyaW9kaWNhbChjYWxsYmFjazogKGNvdW50OiBudW1iZXIpID0+IFByb21pc2U8dm9pZD4gfCB2b2lkLCBtczogbnVtYmVyKSB7XG4gIGxldCB0b2tlbjogTm9kZUpTLlRpbWVvdXQ7XG4gIGxldCBjbG9zZWQgPSBmYWxzZTtcbiAgYXN5bmMgZnVuY3Rpb24gdGljayhjb3VudDogbnVtYmVyKSB7XG4gICAgYXdhaXQgY2FsbGJhY2soY291bnQpO1xuICAgIGlmIChjbG9zZWQpIHJldHVybjtcbiAgICB0b2tlbiA9IHNldFRpbWVvdXQoKCkgPT4gdGljayhjb3VudCArIDEpLCBtcyk7XG4gIH1cbiAgdG9rZW4gPSBzZXRUaW1lb3V0KCgpID0+IHRpY2soMCksIG1zKTtcbiAgcmV0dXJuICgpID0+IHtcbiAgICBjbG9zZWQgPSB0cnVlO1xuICAgIGNsZWFyVGltZW91dCh0b2tlbik7XG4gIH07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA1LlxuXG5pbXBvcnQgeyBzZXRUaW1lb3V0IH0gZnJvbSBcInRpbWVycy9wcm9taXNlc1wiO1xuaW1wb3J0IHsgc2xlZXAgfSBmcm9tIFwiLi90aW1pbmdcIjtcblxuZXhwb3J0IGludGVyZmFjZSBSZXRyeU9wdGlvbnM8QXJncyBleHRlbmRzIGFueVtdLCBSZXQ+IHtcbiAgZm46ICguLi5hcmdzOiBBcmdzKSA9PiBQcm9taXNlPFJldD47XG4gIG1heEF0dGVtcHRzPzogbnVtYmVyO1xuICB0aW1lb3V0PzogbnVtYmVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXNlUmV0cnk8QXJncyBleHRlbmRzIGFueVtdLCBSZXQ+KHsgZm4sIG1heEF0dGVtcHRzID0gMywgdGltZW91dCB9OiBSZXRyeU9wdGlvbnM8QXJncywgUmV0Pikge1xuICBjb25zdCB0aW1lb3V0RXJyb3IgPSBuZXcgRXJyb3IoYHRpbWVvdXQgb3ZlciAke3RpbWVvdXR9bXNgKTtcbiAgcmV0dXJuIGFzeW5jIGZ1bmN0aW9uICguLi5hcmdzOiBBcmdzKSB7XG4gICAgbGV0IGF0dGVtcHQgPSAwO1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBwcm9taXNlcyA9IFtmbiguLi5hcmdzKV07XG4gICAgICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICAgICAgcHJvbWlzZXMucHVzaChcbiAgICAgICAgICAgIHNldFRpbWVvdXQodGltZW91dCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgIHRocm93IHRpbWVvdXRFcnJvcjtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGF3YWl0IFByb21pc2UucmFjZShwcm9taXNlcyk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGF0dGVtcHQrKztcbiAgICAgICAgaWYgKGF0dGVtcHQgPj0gbWF4QXR0ZW1wdHMpIHtcbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IHNsZWVwKE1hdGgucG93KDIsIGF0dGVtcHQpICogMTAwICsgTWF0aC5yYW5kb20oKSAqIDEwMCk7XG4gICAgICB9XG4gICAgfVxuICB9O1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wOS5cblxuY29uc3QgU1VQUE9SVEVEX1BST1RPQ09MUyA9IFtcImZpbGU6XCIsIFwiaHR0cDpcIiwgXCJodHRwczpcIiwgXCJkYXRhOlwiXTtcbmNvbnN0IFNPVVJDRV9QQVRURVJOID0gL14oZmlsZTp8aHR0cHM/OnxkYXRhOikvO1xuXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tIVE1MKHNvdXJjZTogc3RyaW5nKTogdm9pZCB7XG4gIGlmIChTT1VSQ0VfUEFUVEVSTi50ZXN0KHNvdXJjZSkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBwcm90b2NvbCA9IHNvdXJjZS5zcGxpdChcIjpcIilbMF0gKyBcIjpcIjtcbiAgY29uc3QgbWVzc2FnZSA9IFNVUFBPUlRFRF9QUk9UT0NPTFMuaW5jbHVkZXMocHJvdG9jb2wpXG4gICAgPyBgdW5zdXBwb3J0ZWQgcHJvdG9jb2w6ICR7cHJvdG9jb2x9LCBleHBlY3RlZCAke1NVUFBPUlRFRF9QUk9UT0NPTFMuam9pbihcIiwgXCIpfWBcbiAgICA6IGBpbnZhbGlkIHNvdXJjZSBmb3JtYXQsIGV4cGVjdGVkICR7U1VQUE9SVEVEX1BST1RPQ09MUy5qb2luKFwiLCBcIil9YDtcblxuICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAzLzEwLlxuXG5leHBvcnQgaW50ZXJmYWNlIFdhaXRPcHRpb25zIHtcbiAgdGltZW91dDogbnVtYmVyO1xuICBvblRpbWVvdXQ/OiAoKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgY2xhc3MgV2FpdGFibGVFdmVudCB7XG4gIHByaXZhdGUgX3Byb21pc2U/OiBQcm9taXNlPHZvaWQ+O1xuICBwcml2YXRlIF9yZXNvbHZlPzogKCkgPT4gdm9pZDtcbiAgcHJpdmF0ZSBfdGltZW91dFRva2VuPzogTm9kZUpTLlRpbWVvdXQ7XG5cbiAgd2FpdChvcHRpb25zPzogV2FpdE9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fcHJvbWlzZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYWxyZWFkeSB3YWl0aW5nXCIpO1xuICAgIH1cbiAgICB0aGlzLl9wcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIHRoaXMuX3Jlc29sdmUgPSByZXNvbHZlO1xuICAgICAgaWYgKG9wdGlvbnM/LnRpbWVvdXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLl90aW1lb3V0VG9rZW4gPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBvcHRpb25zLm9uVGltZW91dD8uKCk7XG4gICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9LCBvcHRpb25zLnRpbWVvdXQpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLl9wcm9taXNlO1xuICB9XG5cbiAgc2lnbmFsKCkge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLl90aW1lb3V0VG9rZW4pO1xuICAgIHRoaXMuX3Byb21pc2UgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5fcmVzb2x2ZT8uKCk7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDkuXG5cbmltcG9ydCB7IEJyb3dzZXJXaW5kb3cgfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IFVSTCB9IGZyb20gXCJ1cmxcIjtcbmltcG9ydCB7IENvbmN1cnJlbmN5TGltaXRlciB9IGZyb20gXCIuLi9iYXNlL2xpbWl0ZXJcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuLi9iYXNlL2xvZ2dpbmdcIjtcbmltcG9ydCB7IFdhaXRhYmxlRXZlbnQgfSBmcm9tIFwiLi4vYmFzZS93YWl0YWJsZV9ldmVudFwiO1xuXG5jb25zdCBUQUcgPSBcIltOZXR3b3JrXVwiO1xuXG5jb25zdCBtYXAgPSBuZXcgTWFwKFtcbiAgW2Bqc3N6LWJvc3MuaGRzbGIuY29tYCwgYGpzc3otYm9zcy5iaWxpYmlsaS5jb2BdLCAvL1xuICBbYGJvc3MuaGRzbGIuY29tYCwgYHNoamQtYm9zcy5iaWxpYmlsaS5jb2BdLFxuXSk7XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm94aWVkVXJsKHVybDogc3RyaW5nKSB7XG4gIGlmICghdXJsLnN0YXJ0c1dpdGgoXCJodHRwXCIpKSB7XG4gICAgcmV0dXJuIHVybDtcbiAgfVxuICBjb25zdCBwYXJzZWQgPSBuZXcgVVJMKHVybCk7XG4gIGNvbnN0IHRhcmdldCA9IG1hcC5nZXQocGFyc2VkLmhvc3RuYW1lKTtcbiAgaWYgKCF0YXJnZXQpIHtcbiAgICByZXR1cm4gdXJsO1xuICB9XG4gIHBhcnNlZC5ob3N0bmFtZSA9IHRhcmdldDtcbiAgcGFyc2VkLnByb3RvY29sID0gXCJodHRwOlwiO1xuICByZXR1cm4gcGFyc2VkLnRvU3RyaW5nKCk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmV0d29ya09wdGlvbnMge1xuICBzb3VyY2U6IHN0cmluZztcbiAgd2luZG93OiBCcm93c2VyV2luZG93O1xuICB1c2VJbm5lclByb3h5PzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEludGVyY2VwdG9yKHsgc291cmNlLCB3aW5kb3csIHVzZUlubmVyUHJveHkgfTogTmV0d29ya09wdGlvbnMpIHtcbiAgY29uc3QgcmVxID0gd2luZG93LndlYkNvbnRlbnRzLnNlc3Npb24ud2ViUmVxdWVzdDtcbiAgY29uc3QgbGltaXRlciA9IG5ldyBDb25jdXJyZW5jeUxpbWl0ZXIoNjQpO1xuICBjb25zdCBldmVudHMgPSBuZXcgTWFwPHN0cmluZywgV2FpdGFibGVFdmVudD4oKTtcblxuICBhc3luYyBmdW5jdGlvbiB3YWl0KGtleTogc3RyaW5nLCBvblRpbWVvdXQ/OiAoKSA9PiB2b2lkKSB7XG4gICAgY29uc3QgZXZlbnQgPSBuZXcgV2FpdGFibGVFdmVudCgpO1xuICAgIGV2ZW50cy5zZXQoa2V5LCBldmVudCk7XG4gICAgYXdhaXQgZXZlbnQud2FpdCh7IHRpbWVvdXQ6IDVfMDAwLCBvblRpbWVvdXQgfSkuZmluYWxseSgoKSA9PiBldmVudHMuZGVsZXRlKGtleSkpO1xuICB9XG5cbiAgZnVuY3Rpb24gc2lnbmFsKGtleTogc3RyaW5nKSB7XG4gICAgZXZlbnRzLmdldChrZXkpPy5zaWduYWwoKTtcbiAgfVxuXG4gIHJlcS5vbkJlZm9yZVJlcXVlc3QoKGRldGFpbHMsIGNhbGxiYWNrKSA9PiB7XG4gICAgY29uc3QgdXJsID0gZGV0YWlscy51cmw7XG4gICAgY29uc3QgcHJveGllZCA9IHVzZUlubmVyUHJveHkgPyBwcm94aWVkVXJsKHVybCkgOiB1cmw7XG4gICAgbGltaXRlci5zY2hlZHVsZSgoKSA9PiB7XG4gICAgICBjb25zdCBrZXkgPSBgJHt3aW5kb3cuaWR9XyR7ZGV0YWlscy5pZH1gO1xuICAgICAgbG9nZ2VyLmRlYnVnKFRBRywgYHN0YXJ0OmAsIHtcbiAgICAgICAga2V5LFxuICAgICAgICB1cmwsXG4gICAgICAgIHByb3hpZWQsXG4gICAgICAgIG1ldGhvZDogZGV0YWlscy5tZXRob2QsXG4gICAgICAgIHNvdXJjZSxcbiAgICAgICAgc3RhdHM6IGxpbWl0ZXIuc3RhdHMsXG4gICAgICB9KTtcbiAgICAgIGlmIChwcm94aWVkID09PSB1cmwpIHtcbiAgICAgICAgY2FsbGJhY2soeyBjYW5jZWw6IGZhbHNlIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2FsbGJhY2soeyBjYW5jZWw6IGZhbHNlLCByZWRpcmVjdFVSTDogcHJveGllZCB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB3YWl0KGtleSwgKCkgPT4ge1xuICAgICAgICBsb2dnZXIud2FybihUQUcsIGBtYXliZSB0aW1lb3V0OmAsIHtcbiAgICAgICAgICBrZXksXG4gICAgICAgICAgdXJsLFxuICAgICAgICAgIHByb3hpZWQsXG4gICAgICAgICAgbWV0aG9kOiBkZXRhaWxzLm1ldGhvZCxcbiAgICAgICAgICBzb3VyY2UsXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIHJlcS5vbkhlYWRlcnNSZWNlaXZlZCgoeyByZXNwb25zZUhlYWRlcnMgfSwgY2FsbGJhY2spID0+IHtcbiAgICBkZWxldGUgcmVzcG9uc2VIZWFkZXJzPy5bXCJ4LWZyYW1lLW9wdGlvbnNcIl07XG4gICAgZGVsZXRlIHJlc3BvbnNlSGVhZGVycz8uW1wiWC1GcmFtZS1PcHRpb25zXCJdO1xuICAgIGRlbGV0ZSByZXNwb25zZUhlYWRlcnM/LltcImNvbnRlbnQtc2VjdXJpdHktcG9saWN5XCJdO1xuICAgIGRlbGV0ZSByZXNwb25zZUhlYWRlcnM/LltcIkNvbnRlbnQtU2VjdXJpdHktUG9saWN5XCJdO1xuICAgIGNhbGxiYWNrKHsgY2FuY2VsOiBmYWxzZSwgcmVzcG9uc2VIZWFkZXJzIH0pO1xuICB9KTtcblxuICByZXEub25Db21wbGV0ZWQoKGRldGFpbHMpID0+IHtcbiAgICBjb25zdCBrZXkgPSBgJHt3aW5kb3cuaWR9XyR7ZGV0YWlscy5pZH1gO1xuICAgIHNpZ25hbChrZXkpO1xuICAgIGxvZ2dlci5kZWJ1ZyhUQUcsIGBjb21wbGV0ZWQ6YCwge1xuICAgICAga2V5LFxuICAgICAgdXJsOiBkZXRhaWxzLnVybCxcbiAgICAgIG1ldGhvZDogZGV0YWlscy5tZXRob2QsXG4gICAgICBzdGF0dXNDb2RlOiBkZXRhaWxzLnN0YXR1c0NvZGUsXG4gICAgICBzb3VyY2UsXG4gICAgfSk7XG4gIH0pO1xuXG4gIHJlcS5vbkVycm9yT2NjdXJyZWQoKGRldGFpbHMpID0+IHtcbiAgICBjb25zdCBrZXkgPSBgJHt3aW5kb3cuaWR9XyR7ZGV0YWlscy5pZH1gO1xuICAgIHNpZ25hbChrZXkpO1xuICAgIGxvZ2dlci5lcnJvcihUQUcsIGBlcnJvcjpgLCB7XG4gICAgICBrZXksXG4gICAgICB1cmw6IGRldGFpbHMudXJsLFxuICAgICAgbWV0aG9kOiBkZXRhaWxzLm1ldGhvZCxcbiAgICAgIGVycm9yOiBkZXRhaWxzLmVycm9yLFxuICAgICAgc291cmNlLFxuICAgIH0pO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVuc2V0SW50ZXJjZXB0b3Iod2luZG93OiBCcm93c2VyV2luZG93KSB7XG4gIGNvbnN0IHJlcSA9IHdpbmRvdy53ZWJDb250ZW50cy5zZXNzaW9uLndlYlJlcXVlc3Q7XG4gIHJlcS5vbkJlZm9yZVJlcXVlc3QobnVsbCk7XG4gIHJlcS5vbkhlYWRlcnNSZWNlaXZlZChudWxsKTtcbiAgcmVxLm9uQ29tcGxldGVkKG51bGwpO1xuICByZXEub25FcnJvck9jY3VycmVkKG51bGwpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8yNy5cblxuaW1wb3J0IHsgQnJvd3NlcldpbmRvdyB9IGZyb20gXCJlbGVjdHJvblwiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4uL2Jhc2UvbG9nZ2luZ1wiO1xuaW1wb3J0IHsgdXNlUmV0cnkgfSBmcm9tIFwiLi4vYmFzZS9yZXRyeVwiO1xuaW1wb3J0IHsgc2xlZXAgfSBmcm9tIFwiLi4vYmFzZS90aW1pbmdcIjtcbmltcG9ydCB7IGNoZWNrSFRNTCB9IGZyb20gXCIuL2h0bWxfY2hlY2tcIjtcbmltcG9ydCB7IHByb3hpZWRVcmwsIHNldEludGVyY2VwdG9yLCB1bnNldEludGVyY2VwdG9yIH0gZnJvbSBcIi4vbmV0d29ya1wiO1xuaW1wb3J0IHsgY3JlYXRlU3RlZ29VUkwgfSBmcm9tIFwiLi9wcm90b2NvbFwiO1xuaW1wb3J0IHR5cGUgeyBSZW5kZXJPcHRpb25zIH0gZnJvbSBcIi4vc2NoZW1hXCI7XG5cbmNvbnN0IFRBRyA9IFwiW1dpbmRvd11cIjtcblxuZnVuY3Rpb24gd2FpdEZvckZpbmlzaCh3aW46IEJyb3dzZXJXaW5kb3csIGFjdGlvbjogKCkgPT4gdm9pZCkge1xuICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHJlamVjdChuZXcgRXJyb3IoXCJsb2FkIHdpbmRvdyB0aW1lb3V0XCIpKSwgMzBfMDAwKTtcbiAgICBjb25zdCBkb25lID0gKGVycj86IEVycm9yKSA9PiB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICBlcnIgPyByZWplY3QoZXJyKSA6IHJlc29sdmUoKTtcbiAgICB9O1xuICAgIHdpbi53ZWJDb250ZW50cy5vbmNlKFwiZGlkLXN0b3AtbG9hZGluZ1wiLCAoKSA9PiBkb25lKCkpO1xuICAgIHdpbi53ZWJDb250ZW50cy5vbmNlKFwiZGlkLWZyYW1lLWZpbmlzaC1sb2FkXCIsIChfLCBpc01haW5GcmFtZSwgZnJhbWVQcm9jZXNzSWQsIGZyYW1lUm91dGluZ0lkKSA9PiB7XG4gICAgICBsb2dnZXIuZGVidWcoVEFHLCBcImRpZC1mcmFtZS1maW5pc2gtbG9hZDpcIiwgeyBpc01haW5GcmFtZSwgZnJhbWVQcm9jZXNzSWQsIGZyYW1lUm91dGluZ0lkIH0pO1xuICAgIH0pO1xuICAgIHdpbi53ZWJDb250ZW50cy5vbmNlKFwiZG9tLXJlYWR5XCIsICgpID0+IHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhUQUcsIFwiZG9tLXJlYWR5XCIpO1xuICAgIH0pO1xuICAgIHdpbi53ZWJDb250ZW50cy5vbmNlKFwiZGlkLWZhaWwtbG9hZFwiLCAoX2UsIGNvZGUsIGRlc2MsIHVybCkgPT5cbiAgICAgIGRvbmUobmV3IEVycm9yKGBmYWlsZWQgdG8gbG9hZCAke3VybH06IFske2NvZGV9XSAke2Rlc2N9YCkpLFxuICAgICk7XG4gICAgd2luLndlYkNvbnRlbnRzLm9uY2UoXCJyZW5kZXItcHJvY2Vzcy1nb25lXCIsIChfZSwgeyBleGl0Q29kZSwgcmVhc29uIH0pID0+XG4gICAgICBkb25lKG5ldyBFcnJvcihgcmVuZGVyZXIgY3Jhc2hlZDogJHtleGl0Q29kZX0sICR7cmVhc29ufWApKSxcbiAgICApO1xuICAgIGFjdGlvbigpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gd2FpdEZvckRlc3Ryb3kod2luOiBCcm93c2VyV2luZG93KSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4ge1xuICAgIHVuc2V0SW50ZXJjZXB0b3Iod2luKTtcbiAgICB3aW4ub25jZShcImNsb3NlZFwiLCByZXNvbHZlKTtcbiAgICB3aW4uZGVzdHJveSgpO1xuICB9KTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBXaW5kb3dPcHRpb25zIHtcbiAgc291cmNlOiBzdHJpbmc7XG4gIG9uQ3JlYXRlZD86ICh3aW5kb3c6IEJyb3dzZXJXaW5kb3cpID0+IFByb21pc2U8dm9pZD47XG4gIHJlbmRlcmVyOiBSZW5kZXJPcHRpb25zO1xuICB3YXJtdXA/OiBib29sZWFuO1xufVxuXG5hc3luYyBmdW5jdGlvbiBvcGVuV2luZG93KHsgc291cmNlLCBvbkNyZWF0ZWQsIHJlbmRlcmVyLCB3YXJtdXAgfTogV2luZG93T3B0aW9ucyk6IFByb21pc2U8QnJvd3NlcldpbmRvdz4ge1xuICBjaGVja0hUTUwoc291cmNlKTtcblxuICBjb25zdCB7IHdpZHRoLCBoZWlnaHQsIHVzZUlubmVyUHJveHkgfSA9IHJlbmRlcmVyO1xuICBjb25zdCBzcmMgPSB1c2VJbm5lclByb3h5ID8gcHJveGllZFVybChzb3VyY2UpIDogc291cmNlO1xuXG4gIGNvbnN0IHdpbiA9IG5ldyBCcm93c2VyV2luZG93KHtcbiAgICB3aWR0aCxcbiAgICBoZWlnaHQ6IGhlaWdodCArIDEsXG4gICAgc2hvdzogZmFsc2UsXG4gICAgdHJhbnNwYXJlbnQ6IHRydWUsXG4gICAgYmFja2dyb3VuZENvbG9yOiB1bmRlZmluZWQsXG4gICAgZnJhbWU6IGZhbHNlLFxuICAgIHdlYlByZWZlcmVuY2VzOiB7XG4gICAgICBvZmZzY3JlZW46IHRydWUsXG4gICAgICBiYWNrZ3JvdW5kVGhyb3R0bGluZzogZmFsc2UsXG4gICAgICBub2RlSW50ZWdyYXRpb246IHRydWUsXG4gICAgICBub2RlSW50ZWdyYXRpb25JblN1YkZyYW1lczogdHJ1ZSxcbiAgICAgIG5vZGVJbnRlZ3JhdGlvbkluV29ya2VyOiB0cnVlLFxuICAgICAgY29udGV4dElzb2xhdGlvbjogZmFsc2UsXG4gICAgICB3ZWJTZWN1cml0eTogZmFsc2UsXG4gICAgICBhbGxvd1J1bm5pbmdJbnNlY3VyZUNvbnRlbnQ6IHRydWUsXG4gICAgICBleHBlcmltZW50YWxGZWF0dXJlczogdHJ1ZSxcbiAgICB9LFxuICB9KTtcbiAgc2V0SW50ZXJjZXB0b3IoeyBzb3VyY2UsIHdpbmRvdzogd2luLCB1c2VJbm5lclByb3h5IH0pO1xuICBpZiAoIXdhcm11cCkge1xuICAgIGF3YWl0IG9uQ3JlYXRlZD8uKHdpbik7XG4gIH1cblxuICB3aW4ud2ViQ29udGVudHMub24oXCJjb25zb2xlLW1lc3NhZ2VcIiwgKHsgbGV2ZWwsIG1lc3NhZ2UsIGxpbmVOdW1iZXIsIHNvdXJjZUlkIH0pID0+IHtcbiAgICBjb25zdCBtc2dzID0gW1RBRywgXCJjb25zb2xlOlwiLCB7IG1lc3NhZ2UsIGxpbmVOdW1iZXIsIHNvdXJjZUlkLCBzb3VyY2UgfV07XG4gICAgbGV2ZWwgPT09IFwiZXJyb3JcIiA/IGxvZ2dlci5lcnJvciguLi5tc2dzKSA6IGxvZ2dlci5kZWJ1ZyguLi5tc2dzKTtcbiAgfSk7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCB1cmwgPSBjcmVhdGVTdGVnb1VSTChzcmMsIHsgd2lkdGgsIGhlaWdodCB9KTtcbiAgICBhd2FpdCB3YWl0Rm9yRmluaXNoKHdpbiwgKCkgPT4gd2luLmxvYWRVUkwodXJsKSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBhd2FpdCB3YWl0Rm9yRGVzdHJveSh3aW4pO1xuICAgIHRocm93IGU7XG4gIH1cblxuICByZXR1cm4gd2luO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9hZFdpbmRvdyh7IHNvdXJjZSwgb25DcmVhdGVkLCByZW5kZXJlciB9OiBXaW5kb3dPcHRpb25zKTogUHJvbWlzZTxCcm93c2VyV2luZG93PiB7XG4gIGxldCB3YXJtdXA6IEJyb3dzZXJXaW5kb3cgfCB1bmRlZmluZWQ7XG4gIHRyeSB7XG4gICAgd2FybXVwID0gYXdhaXQgdXNlUmV0cnkoeyBmbjogb3BlbldpbmRvdywgbWF4QXR0ZW1wdHM6IDIgfSkoeyBzb3VyY2UsIHJlbmRlcmVyLCB3YXJtdXA6IHRydWUgfSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBjb25zdCB7IG1lc3NhZ2UsIHN0YWNrIH0gPSBlIGFzIEVycm9yO1xuICAgIHRocm93IG5ldyBFcnJvcihgZmFpbGVkIHRvIGxvYWQgd2luZG93OiAke0pTT04uc3RyaW5naWZ5KHsgc291cmNlLCBtZXNzYWdlLCBzdGFjayB9KX1gKTtcbiAgfVxuXG4gIHdhcm11cC53ZWJDb250ZW50cy5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcbiAgdW5zZXRJbnRlcmNlcHRvcih3YXJtdXApO1xuXG4gIC8vIHdhcm11cCBmb3Igc2hhZGVyc1xuICBhd2FpdCBzbGVlcCgyMDAwKTtcbiAgYXdhaXQgd2FpdEZvckRlc3Ryb3kod2FybXVwKTtcblxuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBvcGVuV2luZG93KHsgc291cmNlLCByZW5kZXJlciwgb25DcmVhdGVkIH0pO1xuICB9IGNhdGNoIChlKSB7XG4gICAgY29uc3QgeyBtZXNzYWdlLCBzdGFjayB9ID0gZSBhcyBFcnJvcjtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGZhaWxlZCB0byBsb2FkIHdpbmRvdzogJHtKU09OLnN0cmluZ2lmeSh7IHNvdXJjZSwgbWVzc2FnZSwgc3RhY2sgfSl9YCk7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDkuXG5cbmltcG9ydCB7IHR5cGUgTmF0aXZlSW1hZ2UgfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IEVuY29kZXJQaXBlbGluZSB9IGZyb20gXCIuLi9iYXNlL2VuY29kZXIvZW5jb2RlclwiO1xuaW1wb3J0IHsgRnJhbWVEcm9wU3RhdHMgfSBmcm9tIFwiLi4vYmFzZS9mcmFtZV9kcm9wXCI7XG5pbXBvcnQgeyBpc0VtcHR5IH0gZnJvbSBcIi4uL2Jhc2UvaW1hZ2VcIjtcbmltcG9ydCB7IHNldHVwQXVkaW9DYXB0dXJlLCB0eXBlIEF1ZGlvQ2FwdHVyZSB9IGZyb20gXCIuL2F1ZGlvXCI7XG5pbXBvcnQgdHlwZSB7IElwY0RvbmVQYXlsb2FkLCBJcGNXcml0ZXIgfSBmcm9tIFwiLi9pcGNcIjtcbmltcG9ydCB0eXBlIHsgUmVuZGVyT3B0aW9ucyB9IGZyb20gXCIuL3NjaGVtYVwiO1xuaW1wb3J0IHsgZGVjb2RlU3RlZ28sIHN0YXJ0U3RlZ28sIHN0b3BTdGVnbyB9IGZyb20gXCIuL3N0ZWdvXCI7XG5pbXBvcnQgeyBsb2FkV2luZG93IH0gZnJvbSBcIi4vd2luZG93XCI7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZW5kZXIod3JpdGVyOiBJcGNXcml0ZXIsIHNvdXJjZTogc3RyaW5nLCBvcHRpb25zOiBSZW5kZXJPcHRpb25zKTogUHJvbWlzZTxJcGNEb25lUGF5bG9hZD4ge1xuICBjb25zdCB7IGZwcywgd2lkdGgsIGhlaWdodCwgZHVyYXRpb24sIHdpdGhBdWRpbywgb3V0RmlsZSB9ID0gb3B0aW9ucztcblxuICBhd2FpdCB1c2luZyBlbmNvZGVyID0gYXdhaXQgRW5jb2RlclBpcGVsaW5lLmNyZWF0ZSh7IHdpZHRoLCBoZWlnaHQsIGZwcywgb3V0RmlsZSwgd2l0aEF1ZGlvIH0pO1xuXG4gIGNvbnN0IHRvdGFsID0gTWF0aC5jZWlsKGZwcyAqIGR1cmF0aW9uKTtcbiAgY29uc3QgZnJhbWVJbnRlcnZhbCA9IDEwMDAgLyBmcHM7XG5cbiAgbGV0IHdyaXR0ZW4gPSAwO1xuICBsZXQgbGFzdFdyaXR0ZW5UaW1lOiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gIGxldCBwcm9ncmVzcyA9IDA7XG4gIGxldCBlbmNvZGVFcnJvcjogRXJyb3IgfCB1bmRlZmluZWQ7XG4gIGxldCByZXNvbHZlcjogKCgpID0+IHZvaWQpIHwgdW5kZWZpbmVkO1xuICBsZXQgcmVqZWN0ZXI6ICgocmVhc29uPzogdW5rbm93bikgPT4gdm9pZCkgfCB1bmRlZmluZWQ7XG4gIGNvbnN0IGRyb3BTdGF0cyA9IG5ldyBGcmFtZURyb3BTdGF0cyhmcHMpO1xuXG4gIGxldCBhdWRpbzogQXVkaW9DYXB0dXJlIHwgdW5kZWZpbmVkO1xuICBjb25zdCBzY2hlZHVsZUZyYW1lID0gKGZyYW1lOiBCdWZmZXIpID0+IHtcbiAgICB3cml0dGVuKys7XG4gICAgZW5jb2Rlci5lbmNvZGVGcmFtZShmcmFtZSkuY2F0Y2goKGUpID0+IChlbmNvZGVFcnJvciA/Pz0gZSkpO1xuICB9O1xuXG4gIGNvbnN0IHBhaW50ID0gKF9lOiB1bmtub3duLCBfcjogdW5rbm93biwgaW1hZ2U6IE5hdGl2ZUltYWdlKSA9PiB7XG4gICAgaWYgKGVuY29kZUVycm9yKSB7XG4gICAgICByZWplY3Rlcj8uKGVuY29kZUVycm9yKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoaXNFbXB0eShpbWFnZSkpIHJldHVybjtcblxuICAgIGNvbnN0IGJpdG1hcCA9IGltYWdlLnRvQml0bWFwKCk7XG4gICAgY29uc3QgY3VycmVudFRpbWUgPSBkZWNvZGVTdGVnbyhiaXRtYXAsIGltYWdlLmdldFNpemUoKSk7XG4gICAgaWYgKGN1cnJlbnRUaW1lID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGVuY29kZUVycm9yID8/PSBuZXcgRXJyb3IoYG5vIHRpbWVzdGFtcCBAICR7d3JpdHRlbn1gKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBieXRlc1BlclJvdyA9IHdpZHRoICogNDtcbiAgICBjb25zdCBjcm9wcGVkID0gQnVmZmVyLmZyb20oYml0bWFwLmJ1ZmZlciwgYml0bWFwLmJ5dGVPZmZzZXQsIGhlaWdodCAqIGJ5dGVzUGVyUm93KTtcblxuICAgIGlmIChsYXN0V3JpdHRlblRpbWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgc2NoZWR1bGVGcmFtZShjcm9wcGVkKTtcbiAgICAgIGRyb3BTdGF0cy53cm90ZSgpO1xuICAgICAgbGFzdFdyaXR0ZW5UaW1lID0gY3VycmVudFRpbWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHRpbWVEZWx0YSA9IGN1cnJlbnRUaW1lIC0gbGFzdFdyaXR0ZW5UaW1lO1xuICAgICAgaWYgKHRpbWVEZWx0YSA+PSBmcmFtZUludGVydmFsICogMC44KSB7XG4gICAgICAgIGlmICh0aW1lRGVsdGEgPD0gZnJhbWVJbnRlcnZhbCAqIDEuMikge1xuICAgICAgICAgIHNjaGVkdWxlRnJhbWUoY3JvcHBlZCk7XG4gICAgICAgICAgZHJvcFN0YXRzLndyb3RlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgZnJhbWVzVG9JbnNlcnQgPSBNYXRoLnJvdW5kKHRpbWVEZWx0YSAvIGZyYW1lSW50ZXJ2YWwpO1xuICAgICAgICAgIGRyb3BTdGF0cy5kcm9wcGVkKGZyYW1lc1RvSW5zZXJ0IC0gMSk7XG4gICAgICAgICAgZHJvcFN0YXRzLndyb3RlKCk7XG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmcmFtZXNUb0luc2VydCAmJiB3cml0dGVuIDwgdG90YWw7IGkrKykge1xuICAgICAgICAgICAgc2NoZWR1bGVGcmFtZShjcm9wcGVkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbGFzdFdyaXR0ZW5UaW1lID0gY3VycmVudFRpbWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgbmV3UHJvZ3Jlc3MgPSBNYXRoLmZsb29yKCh3cml0dGVuIC8gdG90YWwpICogMTAwKTtcbiAgICBpZiAoTWF0aC5hYnMobmV3UHJvZ3Jlc3MgLSBwcm9ncmVzcykgPiAxMCkge1xuICAgICAgcHJvZ3Jlc3MgPSBuZXdQcm9ncmVzcztcbiAgICAgIHdyaXRlci53cml0ZVByb2dyZXNzKHByb2dyZXNzKTtcbiAgICB9XG5cbiAgICBjb25zdCBkdXJhdGlvbk1zID0gZHVyYXRpb24gKiAxMDAwO1xuICAgIGlmIChjdXJyZW50VGltZSA+PSBkdXJhdGlvbk1zIC0gZnJhbWVJbnRlcnZhbCAqIDAuNSB8fCB3cml0dGVuID49IHRvdGFsKSB7XG4gICAgICByZXNvbHZlcj8uKCk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IHdpbiA9IGF3YWl0IGxvYWRXaW5kb3coe1xuICAgIHNvdXJjZSxcbiAgICByZW5kZXJlcjogb3B0aW9ucyxcbiAgICBvbkNyZWF0ZWQ6IGFzeW5jICgpID0+IHtcbiAgICAgIGlmICh3aXRoQXVkaW8pIHtcbiAgICAgICAgYXVkaW8gPSBhd2FpdCBzZXR1cEF1ZGlvQ2FwdHVyZSh7XG4gICAgICAgICAgZW5jb2RlcixcbiAgICAgICAgICBnZXRWaWRlb1RpbWVNczogKCkgPT4gbGFzdFdyaXR0ZW5UaW1lID8/IDAsXG4gICAgICAgICAgb25FcnJvcjogKGUpID0+IChlbmNvZGVFcnJvciA/Pz0gZSksXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sXG4gIH0pO1xuICBjb25zdCBjZHAgPSB3aW4ud2ViQ29udGVudHMuZGVidWdnZXI7XG4gIHdpbi53ZWJDb250ZW50cy5zZXRGcmFtZVJhdGUoZnBzKTtcbiAgaWYgKCF3aW4ud2ViQ29udGVudHMuaXNQYWludGluZygpKSB3aW4ud2ViQ29udGVudHMuc3RhcnRQYWludGluZygpO1xuICBjZHAuYXR0YWNoKFwiMS4zXCIpO1xuICB3aW4ud2ViQ29udGVudHMub24oXCJwYWludFwiLCBwYWludCk7XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCBzdGFydFN0ZWdvKGNkcCk7XG4gICAgYXdhaXQgbmV3IFByb21pc2U8dm9pZD4oKHIsIGopID0+IChbcmVzb2x2ZXIsIHJlamVjdGVyXSA9IFtyLCBqXSkpO1xuICB9IGZpbmFsbHkge1xuICAgIGF3YWl0IHN0b3BTdGVnbyhjZHApO1xuICAgIHdpbi53ZWJDb250ZW50cy5vZmYoXCJwYWludFwiLCBwYWludCk7XG4gICAgd2luLmNsb3NlKCk7XG4gICAgYXdhaXQgYXVkaW8/LnRlYXJkb3duKCk7XG4gICAgYXdhaXQgZW5jb2Rlci5maW5pc2goKTtcbiAgfVxuXG4gIGlmIChlbmNvZGVFcnJvciB8fCB3cml0dGVuID09PSAwKSB7XG4gICAgdGhyb3cgZW5jb2RlRXJyb3IgPz8gbmV3IEVycm9yKFwibm8gZnJhbWVzIGNhcHR1cmVkXCIpO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGRyb3BTY29yZSA9IGRyb3BTdGF0cy5maW5hbGl6ZSgpO1xuICAgIHJldHVybiB7IHdyaXR0ZW4sIGphbms6IGRyb3BTY29yZS5qYW5rLCBvdXRGaWxlIH07XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDMvMTMuXG5cbmltcG9ydCB0eXBlIHsgRGVidWdnZXIgfSBmcm9tIFwiZWxlY3Ryb25cIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGFkdmFuY2VWaXJ0dWFsVGltZShjZHA6IERlYnVnZ2VyLCBidWRnZXQ6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICBjb25zdCBoYW5kbGVyID0gKF86IEVsZWN0cm9uLkV2ZW50LCBtZXRob2Q6IHN0cmluZykgPT4ge1xuICAgICAgaWYgKG1ldGhvZCA9PT0gXCJFbXVsYXRpb24udmlydHVhbFRpbWVCdWRnZXRFeHBpcmVkXCIpIHtcbiAgICAgICAgY2RwLm9mZihcIm1lc3NhZ2VcIiwgaGFuZGxlcik7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNkcC5vbihcIm1lc3NhZ2VcIiwgaGFuZGxlcik7XG4gICAgY2RwLnNlbmRDb21tYW5kKFwiRW11bGF0aW9uLnNldFZpcnR1YWxUaW1lUG9saWN5XCIsIHtcbiAgICAgIHBvbGljeTogXCJhZHZhbmNlXCIsXG4gICAgICBidWRnZXQsXG4gICAgfSk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGF1c2VWaXJ0dWFsVGltZShjZHA6IERlYnVnZ2VyKTogUHJvbWlzZTx2b2lkPiB7XG4gIHJldHVybiBjZHAuc2VuZENvbW1hbmQoXCJFbXVsYXRpb24uc2V0VmlydHVhbFRpbWVQb2xpY3lcIiwgeyBwb2xpY3k6IFwicGF1c2VcIiB9KTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDEvMzAuXG5cbmV4cG9ydCBjbGFzcyBMYXp5PFQ+IHtcbiAgY29uc3RydWN0b3IocmVhZG9ubHkgbWFrZVZhbHVlOiAoKSA9PiBUKSB7fVxuXG4gIGdldCB2YWx1ZSgpOiBUIHtcbiAgICBpZiAoIXRoaXMuX2luaXRpYWxpemVkKSB7XG4gICAgICB0aGlzLl92YWx1ZSA9IHRoaXMubWFrZVZhbHVlKCk7XG4gICAgICB0aGlzLl9pbml0aWFsaXplZCA9IHRydWU7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl92YWx1ZSE7XG4gIH1cblxuICBnZXQgaW5pdGlhbGl6ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2luaXRpYWxpemVkO1xuICB9XG5cbiAgcHJpdmF0ZSBfaW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfdmFsdWU6IFQgfCB1bmRlZmluZWQ7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzAxLlxuXG5leHBvcnQgY29uc3QgVElDS19TWU1CT0wgPSBcIl9fcHVwX3RpY2tfX1wiO1xuXG4vKipcbiAqIEJ1aWxkcyB0aGUgSlMgaW5qZWN0b3IgdGhhdCBob29rcyBhbGwgdGltZS1yZWxhdGVkIGdsb2JhbHMgaW4gdGhlIHRhcmdldCBpZnJhbWUuXG4gKiBHdWFyZHMgYWdhaW5zdCBydW5uaW5nIGluIHRoZSB3cmFwcGVyICh0b3AtbGV2ZWwpIGZyYW1lIHNvIHRoZSBzdGVnbyBjYW52YXMgaXMgdW5hZmZlY3RlZC5cbiAqIE11c3QgYmUgaW5qZWN0ZWQgdmlhIFBhZ2UuYWRkU2NyaXB0VG9FdmFsdWF0ZU9uTmV3RG9jdW1lbnQgQU5EIGRpcmVjdGx5IGludG9cbiAqIGFscmVhZHktbG9hZGVkIHN1Yi1mcmFtZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFRpY2tJbmplY3RvcigpOiBzdHJpbmcge1xuICByZXR1cm4gYChmdW5jdGlvbigpIHtcbiAgaWYgKHdpbmRvdy5zZWxmID09PSB3aW5kb3cudG9wKSByZXR1cm47XG4gIGlmICh0eXBlb2YgJHtUSUNLX1NZTUJPTH0gIT09ICd1bmRlZmluZWQnKSByZXR1cm47XG5cbiAgY29uc3Qgb3JpZyA9IHtcbiAgICBwZXJmb3JtYW5jZU5vdzogcGVyZm9ybWFuY2Uubm93LmJpbmQocGVyZm9ybWFuY2UpLFxuICAgIGRhdGVOb3c6IERhdGUubm93LmJpbmQoRGF0ZSksXG4gICAgcmFmOiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUuYmluZCh3aW5kb3cpLFxuICAgIGNhZjogY2FuY2VsQW5pbWF0aW9uRnJhbWUuYmluZCh3aW5kb3cpLFxuICAgIHNldFRpbWVvdXQ6IHNldFRpbWVvdXQuYmluZCh3aW5kb3cpLFxuICAgIGNsZWFyVGltZW91dDogY2xlYXJUaW1lb3V0LmJpbmQod2luZG93KSxcbiAgICBzZXRJbnRlcnZhbDogc2V0SW50ZXJ2YWwuYmluZCh3aW5kb3cpLFxuICAgIGNsZWFySW50ZXJ2YWw6IGNsZWFySW50ZXJ2YWwuYmluZCh3aW5kb3cpLFxuICB9O1xuXG4gIGxldCBjdXJyTXMgPSAwO1xuICBsZXQgcmFmUXVldWUgPSBbXTtcbiAgY29uc3QgdGltZXJzID0ge307XG4gIGxldCBuZXh0SWQgPSAxO1xuXG4gIHBlcmZvcm1hbmNlLm5vdyA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gY3Vyck1zOyB9O1xuICBEYXRlLm5vdyA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gY3Vyck1zOyB9O1xuXG4gIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPSBmdW5jdGlvbihjYikge1xuICAgIGNvbnN0IGlkID0gbmV4dElkKys7XG4gICAgcmFmUXVldWUucHVzaCh7IGlkLCBjYiB9KTtcbiAgICByZXR1cm4gaWQ7XG4gIH07XG4gIHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSA9IGZ1bmN0aW9uKGlkKSB7XG4gICAgcmFmUXVldWUgPSByYWZRdWV1ZS5maWx0ZXIoKHIpID0+IHIuaWQgIT09IGlkKTtcbiAgfTtcblxuICB3aW5kb3cuc2V0VGltZW91dCA9IGZ1bmN0aW9uKGNiLCBkZWxheSwgLi4uYXJncykge1xuICAgIGNvbnN0IGlkID0gbmV4dElkKys7XG4gICAgdGltZXJzW2lkXSA9IHsgdHlwZTogJ3RpbWVvdXQnLCBjYiwgZGVsYXk6IGRlbGF5IHx8IDAsIG5leHQ6IGN1cnJNcyArIChkZWxheSB8fCAwKSwgYXJncyB9O1xuICAgIHJldHVybiBpZDtcbiAgfTtcbiAgd2luZG93LmNsZWFyVGltZW91dCA9IGZ1bmN0aW9uKGlkKSB7IGRlbGV0ZSB0aW1lcnNbaWRdOyB9O1xuXG4gIHdpbmRvdy5zZXRJbnRlcnZhbCA9IGZ1bmN0aW9uKGNiLCBkZWxheSwgLi4uYXJncykge1xuICAgIGNvbnN0IGlkID0gbmV4dElkKys7XG4gICAgY29uc3QgZCA9IE1hdGgubWF4KGRlbGF5IHx8IDAsIDEpO1xuICAgIHRpbWVyc1tpZF0gPSB7IHR5cGU6ICdpbnRlcnZhbCcsIGNiLCBkZWxheTogZCwgbmV4dDogY3Vyck1zICsgZCwgYXJncyB9O1xuICAgIHJldHVybiBpZDtcbiAgfTtcbiAgd2luZG93LmNsZWFySW50ZXJ2YWwgPSBmdW5jdGlvbihpZCkgeyBkZWxldGUgdGltZXJzW2lkXTsgfTtcblxuICBmdW5jdGlvbiBwcm9jZXNzKHRpbWVzdGFtcE1zKSB7XG4gICAgY3Vyck1zID0gdGltZXN0YW1wTXM7XG4gICAgY29uc3QgaWRzID0gT2JqZWN0LmtleXModGltZXJzKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlkcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgdCA9IHRpbWVyc1tpZHNbaV1dO1xuICAgICAgaWYgKCF0KSBjb250aW51ZTtcbiAgICAgIHdoaWxlICh0Lm5leHQgPD0gY3Vyck1zKSB7XG4gICAgICAgIGlmICh0eXBlb2YgdC5jYiA9PT0gJ3N0cmluZycpIGV2YWwodC5jYik7IGVsc2UgdC5jYi5hcHBseSh1bmRlZmluZWQsIHQuYXJncyk7XG4gICAgICAgIGlmICh0LnR5cGUgPT09ICd0aW1lb3V0JykgeyBkZWxldGUgdGltZXJzW2lkc1tpXV07IGJyZWFrOyB9XG4gICAgICAgIHQubmV4dCArPSB0LmRlbGF5O1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCByYWZzID0gcmFmUXVldWUuc3BsaWNlKDApO1xuICAgIGZvciAobGV0IGogPSAwOyBqIDwgcmFmcy5sZW5ndGg7IGorKykge1xuICAgICAgcmFmc1tqXS5jYihjdXJyTXMpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGVqZWN0KCkge1xuICAgIHBlcmZvcm1hbmNlLm5vdyA9IG9yaWcucGVyZm9ybWFuY2VOb3c7XG4gICAgRGF0ZS5ub3cgPSBvcmlnLmRhdGVOb3c7XG4gICAgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSA9IG9yaWcucmFmO1xuICAgIHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSA9IG9yaWcuY2FmO1xuICAgIHdpbmRvdy5zZXRUaW1lb3V0ID0gb3JpZy5zZXRUaW1lb3V0O1xuICAgIHdpbmRvdy5jbGVhclRpbWVvdXQgPSBvcmlnLmNsZWFyVGltZW91dDtcbiAgICB3aW5kb3cuc2V0SW50ZXJ2YWwgPSBvcmlnLnNldEludGVydmFsO1xuICAgIHdpbmRvdy5jbGVhckludGVydmFsID0gb3JpZy5jbGVhckludGVydmFsO1xuICAgIGRlbGV0ZSB3aW5kb3cuJHtUSUNLX1NZTUJPTH07XG4gIH1cblxuICB3aW5kb3cuJHtUSUNLX1NZTUJPTH0gPSB7IHByb2Nlc3M6IHByb2Nlc3MsIGVqZWN0OiBlamVjdCB9O1xufSkoKTtgO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZG9Qcm9jZXNzKHRpbWVzdGFtcE1zOiBudW1iZXIpOiBzdHJpbmcge1xuICByZXR1cm4gYCR7VElDS19TWU1CT0x9LnByb2Nlc3MoJHt0aW1lc3RhbXBNc30pYDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRvRWplY3QoKTogc3RyaW5nIHtcbiAgcmV0dXJuIGBpZiAodHlwZW9mICR7VElDS19TWU1CT0x9ICE9PSAndW5kZWZpbmVkJykgJHtUSUNLX1NZTUJPTH0uZWplY3QoKWA7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAzLzEzLlxuXG5pbXBvcnQgeyB0eXBlIEJyb3dzZXJXaW5kb3csIHR5cGUgTmF0aXZlSW1hZ2UgfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IGFkdmFuY2VWaXJ0dWFsVGltZSwgcGF1c2VWaXJ0dWFsVGltZSB9IGZyb20gXCIuLi9iYXNlL2NkcFwiO1xuaW1wb3J0IHsgRW5jb2RlclBpcGVsaW5lIH0gZnJvbSBcIi4uL2Jhc2UvZW5jb2Rlci9lbmNvZGVyXCI7XG5pbXBvcnQgeyBpc0VtcHR5IH0gZnJvbSBcIi4uL2Jhc2UvaW1hZ2VcIjtcbmltcG9ydCB7IExhenkgfSBmcm9tIFwiLi4vYmFzZS9sYXp5XCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi4vYmFzZS9sb2dnaW5nXCI7XG5pbXBvcnQgeyBJcGNXcml0ZXIsIHR5cGUgSXBjRG9uZVBheWxvYWQgfSBmcm9tIFwiLi9pcGNcIjtcbmltcG9ydCB0eXBlIHsgUmVuZGVyT3B0aW9ucyB9IGZyb20gXCIuL3NjaGVtYVwiO1xuaW1wb3J0IHsgZGVjb2RlU3RlZ28sIHN0YXJ0U3RlZ28sIHN0b3BTdGVnbyB9IGZyb20gXCIuL3N0ZWdvXCI7XG5pbXBvcnQgeyBidWlsZFRpY2tJbmplY3RvciwgZG9FamVjdCwgZG9Qcm9jZXNzIH0gZnJvbSBcIi4vdGlja1wiO1xuaW1wb3J0IHsgbG9hZFdpbmRvdyB9IGZyb20gXCIuL3dpbmRvd1wiO1xuXG5jb25zdCBUQUcgPSBcIltTaG9vdF1cIjtcblxuZnVuY3Rpb24gYXdhaXRTdGVnb0ZyYW1lKHdpbjogQnJvd3NlcldpbmRvdywgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIsIGFmdGVyVHM6IG51bWJlcik6IFByb21pc2U8QnVmZmVyPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgIGNvbnN0IGhhbmRsZXIgPSAoX2U6IHVua25vd24sIF9kOiB1bmtub3duLCBpbWFnZTogTmF0aXZlSW1hZ2UpID0+IHtcbiAgICAgIGlmIChpc0VtcHR5KGltYWdlKSkgcmV0dXJuO1xuICAgICAgY29uc3QgYml0bWFwID0gaW1hZ2UudG9CaXRtYXAoKTtcbiAgICAgIGNvbnN0IHRzID0gZGVjb2RlU3RlZ28oYml0bWFwLCBpbWFnZS5nZXRTaXplKCkpO1xuICAgICAgaWYgKHRzID09PSB1bmRlZmluZWQgfHwgdHMgPCBhZnRlclRzKSB7XG4gICAgICAgIGxvZ2dlci53YXJuKFRBRywgYHNraXBwaW5nIGZyYW1lICR7dHN9LCBleHBlY3RlZCA+ICR7YWZ0ZXJUc31gKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgd2luLndlYkNvbnRlbnRzLnN0b3BQYWludGluZygpO1xuICAgICAgd2luLndlYkNvbnRlbnRzLm9mZihcInBhaW50XCIsIGhhbmRsZXIpO1xuICAgICAgcmVzb2x2ZShCdWZmZXIuZnJvbShiaXRtYXAuYnVmZmVyLCBiaXRtYXAuYnl0ZU9mZnNldCwgaGVpZ2h0ICogd2lkdGggKiA0KSk7XG4gICAgfTtcbiAgICB3aW4ud2ViQ29udGVudHMub24oXCJwYWludFwiLCBoYW5kbGVyKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzaG9vdCh3cml0ZXI6IElwY1dyaXRlciwgc291cmNlOiBzdHJpbmcsIG9wdGlvbnM6IFJlbmRlck9wdGlvbnMpOiBQcm9taXNlPElwY0RvbmVQYXlsb2FkPiB7XG4gIGNvbnN0IHsgZnBzLCB3aWR0aCwgaGVpZ2h0LCBkdXJhdGlvbiwgd2l0aEF1ZGlvLCBvdXRGaWxlIH0gPSBvcHRpb25zO1xuICBpZiAod2l0aEF1ZGlvKSBsb2dnZXIud2FybihUQUcsIFwiYXVkaW8gd2lsbCBiZSBpZ25vcmVkIG9uIHRoaXMgbW9kZVwiKTtcblxuICBhd2FpdCB1c2luZyBwaXBlbGluZSA9IGF3YWl0IEVuY29kZXJQaXBlbGluZS5jcmVhdGUoeyB3aWR0aCwgaGVpZ2h0LCBmcHMsIG91dEZpbGUsIHdpdGhBdWRpbzogZmFsc2UgfSk7XG5cbiAgY29uc3QgdG90YWwgPSBNYXRoLmNlaWwoZnBzICogZHVyYXRpb24pO1xuICBjb25zdCBmcmFtZUludGVydmFsID0gMTAwMCAvIGZwcztcbiAgbGV0IHdyaXR0ZW4gPSAwO1xuICBsZXQgcHJvZ3Jlc3MgPSAwO1xuICBsZXQgZnJhbWVFcnJvcjogRXJyb3IgfCB1bmRlZmluZWQ7XG5cbiAgY29uc3Qgd2luID0gYXdhaXQgbG9hZFdpbmRvdyh7IHNvdXJjZSwgcmVuZGVyZXI6IG9wdGlvbnMgfSk7XG4gIGNvbnN0IGNkcCA9IHdpbi53ZWJDb250ZW50cy5kZWJ1Z2dlcjtcbiAgY29uc3Qgcm9vdEZyYW1lID0gbmV3IExhenkoKCkgPT4gd2luLndlYkNvbnRlbnRzLm1haW5GcmFtZS5mcmFtZXNbMF0pO1xuICB0cnkge1xuICAgIGNkcC5hdHRhY2goXCIxLjNcIik7XG5cbiAgICB3aW4ud2ViQ29udGVudHMuc3RvcFBhaW50aW5nKCk7XG4gICAgd2luLndlYkNvbnRlbnRzLnNldEZyYW1lUmF0ZShmcHMpO1xuICAgIGF3YWl0IHBhdXNlVmlydHVhbFRpbWUoY2RwKTtcblxuICAgIGNvbnN0IGlmcmFtZSA9IHJvb3RGcmFtZS52YWx1ZTtcbiAgICBhd2FpdCBpZnJhbWU/LmV4ZWN1dGVKYXZhU2NyaXB0KGJ1aWxkVGlja0luamVjdG9yKCkpO1xuICAgIGF3YWl0IGlmcmFtZT8uZXhlY3V0ZUphdmFTY3JpcHQoZG9Qcm9jZXNzKDApKTtcbiAgICBhd2FpdCBzdGFydFN0ZWdvKGNkcCk7XG5cbiAgICBmb3IgKGxldCBmcmFtZSA9IDA7IGZyYW1lIDwgdG90YWw7IGZyYW1lKyspIHtcbiAgICAgIGlmIChmcmFtZUVycm9yKSB0aHJvdyBmcmFtZUVycm9yO1xuXG4gICAgICBjb25zdCBmcmFtZU1zID0gKGZyYW1lICsgMSkgKiBmcmFtZUludGVydmFsO1xuICAgICAgY29uc3QgYml0bWFwID0gYXdhaXRTdGVnb0ZyYW1lKHdpbiwgd2lkdGgsIGhlaWdodCwgZnJhbWVNcyAtIGZyYW1lSW50ZXJ2YWwgLyAyKTtcblxuICAgICAgYXdhaXQgYWR2YW5jZVZpcnR1YWxUaW1lKGNkcCwgZnJhbWVJbnRlcnZhbCk7XG4gICAgICBhd2FpdCBpZnJhbWU/LmV4ZWN1dGVKYXZhU2NyaXB0KGRvUHJvY2VzcyhmcmFtZU1zKSk7XG5cbiAgICAgIHdpbi53ZWJDb250ZW50cy5zdGFydFBhaW50aW5nKCk7XG4gICAgICBwaXBlbGluZS5lbmNvZGVGcmFtZShhd2FpdCBiaXRtYXApLmNhdGNoKChlKSA9PiAoZnJhbWVFcnJvciA/Pz0gZSkpO1xuICAgICAgd3JpdHRlbisrO1xuXG4gICAgICBjb25zdCBuZXdQcm9ncmVzcyA9IE1hdGguZmxvb3IoKHdyaXR0ZW4gLyB0b3RhbCkgKiAxMDApO1xuICAgICAgaWYgKE1hdGguYWJzKG5ld1Byb2dyZXNzIC0gcHJvZ3Jlc3MpID4gMTApIHtcbiAgICAgICAgcHJvZ3Jlc3MgPSBuZXdQcm9ncmVzcztcbiAgICAgICAgd3JpdGVyLndyaXRlUHJvZ3Jlc3MocHJvZ3Jlc3MpO1xuICAgICAgfVxuICAgIH1cbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCByb290RnJhbWUudmFsdWU/LmV4ZWN1dGVKYXZhU2NyaXB0KGRvRWplY3QoKSk7XG4gICAgYXdhaXQgc3RvcFN0ZWdvKGNkcCk7XG4gICAgY2RwLmRldGFjaCgpO1xuICAgIHdpbi5jbG9zZSgpO1xuICAgIGF3YWl0IHBpcGVsaW5lLmZpbmlzaCgpO1xuICB9XG5cbiAgaWYgKGZyYW1lRXJyb3IgfHwgd3JpdHRlbiA9PT0gMCkge1xuICAgIHRocm93IGZyYW1lRXJyb3IgPz8gbmV3IEVycm9yKFwibm8gZnJhbWVzIGNhcHR1cmVkXCIpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB7IHdyaXR0ZW4sIGphbms6IDAsIG91dEZpbGUgfTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMS8zMC5cblxuaW1wb3J0IHsgb2sgfSBmcm9tIFwiYXNzZXJ0XCI7XG5pbXBvcnQgeyBhcHAgfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IG1rZGlyIH0gZnJvbSBcImZzL3Byb21pc2VzXCI7XG5pbXBvcnQgeyBkaXJuYW1lIH0gZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IHB1cElwY1NvY2tldCB9IGZyb20gXCIuL2Jhc2UvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi9iYXNlL2xvZ2dpbmdcIjtcbmltcG9ydCB7IG1ha2VDTEkgfSBmcm9tIFwiLi9jb21tb25cIjtcbmltcG9ydCB7IGNvbm5lY3RJcGMgfSBmcm9tIFwiLi9yZW5kZXJlci9pcGNcIjtcbmltcG9ydCB7IHNldHVwUHVwUHJvdG9jb2wgfSBmcm9tIFwiLi9yZW5kZXJlci9wcm90b2NvbFwiO1xuaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSBcIi4vcmVuZGVyZXIvcmVuZGVyXCI7XG5pbXBvcnQgeyBkZWZhdWx0UmVuZGVyT3B0aW9ucyB9IGZyb20gXCIuL3JlbmRlcmVyL3NjaGVtYVwiO1xuaW1wb3J0IHsgc2hvb3QgfSBmcm9tIFwiLi9yZW5kZXJlci9zaG9vdFwiO1xuXG5jb25zdCBUQUcgPSBcIltBcHBdXCI7XG5cbmZ1bmN0aW9uIHByaW50RmVhdHVyZXMoKSB7XG4gIGxvZ2dlci5kZWJ1ZyhUQUcsIFwiZ3B1IGZlYXR1cmVzOlwiLCBhcHAuZ2V0R1BVRmVhdHVyZVN0YXR1cygpKTtcbn1cblxuYXBwLmRvY2s/LmhpZGUoKTtcbmFwcC5vbihcIndpbmRvdy1hbGwtY2xvc2VkXCIsICgpID0+IHt9KTtcblxubWFrZUNMSSh7XG4gIG5hbWU6IFwiYXBwXCIsXG4gIGRlZmF1bHRzOiB7XG4gICAgLi4uZGVmYXVsdFJlbmRlck9wdGlvbnMsXG4gICAgd2l0aEF1ZGlvOiBmYWxzZSxcbiAgICBkZXRlcm1pbmlzdGljOiBmYWxzZSxcbiAgICB1c2VJbm5lclByb3h5OiBmYWxzZSxcbiAgfSxcbiAgcnVuOiBhc3luYyAoc291cmNlLCBvcHRpb25zKSA9PiB7XG4gICAgY29uc3QgZXhpdCA9IChjb2RlOiBudW1iZXIpID0+IHtcbiAgICAgIGFwcC5xdWl0KCk7XG4gICAgICBwcm9jZXNzLmV4aXQoY29kZSk7XG4gICAgfTtcbiAgICBwcm9jZXNzLm9uY2UoXCJTSUdURVJNXCIsICgpID0+IGV4aXQoMTQzKSk7XG4gICAgcHJvY2Vzcy5vbmNlKFwiU0lHSU5UXCIsICgpID0+IGV4aXQoMTMwKSk7XG4gICAgcHJvY2Vzcy5vbmNlKFwiZXhpdFwiLCAoYykgPT4gZXhpdChjKSk7XG4gICAgb2socHVwSXBjU29ja2V0LCBcInB1cElwY1NvY2tldCBub3Qgc2V0XCIpO1xuICAgIGNvbnN0IGlwYyA9IGF3YWl0IGNvbm5lY3RJcGMocHVwSXBjU29ja2V0KTtcbiAgICB0cnkge1xuICAgICAgYXBwLm9uKFwiZ3B1LWluZm8tdXBkYXRlXCIsIHByaW50RmVhdHVyZXMpO1xuICAgICAgYXdhaXQgYXBwLndoZW5SZWFkeSgpO1xuICAgICAgc2V0dXBQdXBQcm90b2NvbCgpO1xuICAgICAgcHJpbnRGZWF0dXJlcygpO1xuICAgICAgYXdhaXQgbWtkaXIoZGlybmFtZShvcHRpb25zLm91dEZpbGUpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgIGNvbnN0IGFjdGlvbiA9IG9wdGlvbnMuZGV0ZXJtaW5pc3RpYyA/IHNob290IDogcmVuZGVyO1xuICAgICAgaXBjLndyaXRlRG9uZShhd2FpdCBhY3Rpb24oaXBjLCBzb3VyY2UsIG9wdGlvbnMpKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zdCBlcnJvciA9IGUgYXMgRXJyb3I7XG4gICAgICBpcGMud3JpdGVFcnJvcihlcnJvci5zdGFjayA/PyBcInVua25vd24gZXJyb3JcIik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGFwcC5xdWl0KCk7XG4gICAgfVxuICB9LFxufSk7XG4iXX0=
|
|
254
|
+
window.${X} = { process: process, eject: eject };
|
|
255
|
+
})();`}function Ke(r){return `${X}.process(${r})`}function ar(){return `if (typeof ${X} !== 'undefined') ${X}.eject()`}var Qe="[Shoot]";function Uo({win:r,size:e,afterTs:t}){let o=new Set,i=ir(()=>{let n=Array.from(o);o.clear(),_.debug(Qe,`skipped frames ${n.join(", ")}, expected > ${t}`);},1e3);return new Promise(n=>{let c=(s,a,u)=>{if(_e(u))return;let p=u.toBitmap(),d=se(p,u.getSize());if(d===void 0||d<t){o.add(d??-1),i();return}r.webContents.stopPainting(),r.webContents.off("paint",c),n(Buffer.from(p.buffer,p.byteOffset,e.height*e.width*4));};r.webContents.on("paint",c);})}async function sr(r,e,t){var x=[];try{let{fps:o,width:i,height:n,duration:c,withAudio:s,outFile:a,disableGpu:u}=t;s&&_.warn(Qe,"audio will be ignored on this mode");let p=v(x,await q.create({width:i,height:n,fps:o,outFile:a,withAudio:s,disableGpu:u}),!0);let d=Math.ceil(o*c);let m=1e3/o;let l=0;let g=0;let b=await Ee({source:e,renderer:t});let w=b.webContents.debugger;let E=new ve(()=>b.webContents.mainFrame.frames[0]);try{w.attach("1.3");let P=u?o:240,L=1e3/P;_.debug(Qe,{fps:o,frameInterval:m,renderFps:P,renderInterval:L}),b.webContents.stopPainting(),b.webContents.setFrameRate(P),await or(w);let V=E.value;await V?.executeJavaScript(nr()),await V?.executeJavaScript(Ke(0)),await ce(w);for(let J=0;J<d;J++){let ie=(J+1)*m,Fe=Uo({win:b,size:{width:i,height:n},afterTs:ie-L/2});await rr(w,m),await V?.executeJavaScript(Ke(ie)),b.webContents.startPainting(),await p.encodeBGRA(await Fe),l++;let K=Math.floor(l/d*100);Math.abs(K-g)>10&&(g=K,r.writeProgress(g));}}finally{await E.value?.executeJavaScript(ar()),await ue(w),w.detach(),b.close(),await p.finish();}if(l===0)throw new Error("no frames captured");else return {written:l,jank:0,outFile:a}}catch(y){var h=y,A=true;}finally{var Y=F(x,h,A);Y&&await Y;}}var $o="[App]";function cr(){_.debug($o,"gpu features:",electron.app.getGPUFeatureStatus());}electron.app.dock?.hide();electron.app.on("window-all-closed",()=>{});Ft({name:"app",defaults:{...Et,withAudio:false,deterministic:false,useInnerProxy:false,disableGpu:false},run:async(r,e)=>{let t=i=>{electron.app.quit(),process.exit(i);};process.once("SIGTERM",()=>t(143)),process.once("SIGINT",()=>t(130)),process.once("exit",i=>t(i)),assert.ok(Te,"pupIpcSocket not set");let o=await Pt(Te);try{electron.app.on("gpu-info-update",cr),await electron.app.whenReady(),It(),cr(),await promises.mkdir(path.dirname(e.outFile),{recursive:!0});let i=e.deterministic?sr:tr;o.writeDone(await i(o,r,e));}catch(i){let n=i;o.writeError(n.stack??"unknown error");}finally{electron.app.quit();}}});//# sourceMappingURL=app.cjs.map
|
|
256
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL3RzdXBAOC41LjErZTIzNWI4MzMxMzg5YjQwNC9ub2RlX21vZHVsZXMvdHN1cC9hc3NldHMvY2pzX3NoaW1zLmpzIiwiLi4vc3JjL2Jhc2UvZW52LnRzIiwiLi4vc3JjL2Jhc2UvcGFyc2VyLnRzIiwiLi4vc3JjL2Jhc2UvY29uc3RhbnRzLnRzIiwiLi4vc3JjL2Jhc2UvbG9nZ2luZy50cyIsIi4uL3NyYy9iYXNlL25vZXJyLnRzIiwiLi4vc3JjL2Jhc2UvcHJvY2Vzcy50cyIsIi4uL3NyYy9yZW5kZXJlci9zY2hlbWEudHMiLCIuLi9zcmMvY29tbW9uLnRzIiwiLi4vc3JjL3JlbmRlcmVyL2lwYy50cyIsIi4uL3NyYy9yZW5kZXJlci9zdGVnby50cyIsIi4uL3NyYy9yZW5kZXJlci9wcm90b2NvbC50cyIsIi4uL3NyYy9iYXNlL2xpbWl0ZXIudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL3NoYXJlZC50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvYXVkaW8udHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL2NvZGVjLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9uYWwudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL2FscGhhLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9udmVuYy50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvdmlkZW8udHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL3ZpZGVvdG9vbGJveC50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvZmFjdG9yeS50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvbXV4ZXIudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL3BpcGVsaW5lLnRzIiwiLi4vc3JjL2Jhc2UvZnJhbWVfZHJvcC50cyIsIi4uL3NyYy9iYXNlL2ltYWdlLnRzIiwiLi4vc3JjL3JlbmRlcmVyL2F1ZGlvLnRzIiwiLi4vc3JjL2Jhc2UvdGltaW5nLnRzIiwiLi4vc3JjL2Jhc2UvcmV0cnkudHMiLCIuLi9zcmMvcmVuZGVyZXIvaHRtbF9jaGVjay50cyIsIi4uL3NyYy9iYXNlL3dhaXRhYmxlX2V2ZW50LnRzIiwiLi4vc3JjL3JlbmRlcmVyL25ldHdvcmsudHMiLCIuLi9zcmMvcmVuZGVyZXIvd2luZG93LnRzIiwiLi4vc3JjL3JlbmRlcmVyL3JlbmRlci50cyIsIi4uL3NyYy9iYXNlL2NkcC50cyIsIi4uL3NyYy9iYXNlL2RlYm91bmNlLnRzIiwiLi4vc3JjL2Jhc2UvbGF6eS50cyIsIi4uL3NyYy9yZW5kZXJlci90aWNrLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3Nob290LnRzIiwiLi4vc3JjL2FwcC50cyJdLCJuYW1lcyI6WyJnZXRJbXBvcnRNZXRhVXJsIiwiaW1wb3J0TWV0YVVybCIsInBlbnYiLCJuYW1lIiwicGFyc2VyIiwiZGVmYXVsdFZhbHVlIiwicGFyc2VOdW1iZXIiLCJ4IiwibnVtIiwicmVxdWlyZSIsImNyZWF0ZVJlcXVpcmUiLCJlbnYiLCJwdXBMb2dMZXZlbCIsInB1cFVzZUlubmVyUHJveHkiLCJwdXBEaXNhYmxlR1BVIiwicHVwRGV0ZXJtaW5pc3RpYyIsInB1cFBrZ1Jvb3QiLCJkaXJuYW1lIiwiam9pbiIsInB1cElwY1NvY2tldCIsIkRFQlVHIiwiSU5GTyIsIldBUk4iLCJFUlJPUiIsIkZBVEFMIiwic3RhY2tIb29rIiwidGFyZ2V0IiwiX2NvbnRleHQiLCJtZXNzYWdlcyIsInByb2Nlc3NlZCIsIm1zZyIsIl9mYXRhbF9kZWMiLCJfZXJyb3JfZGVjIiwiX3dhcm5fZGVjIiwiX2luZm9fZGVjIiwiX2RlYnVnX2RlYyIsIl9pbml0IiwiTG9nZ2VyIiwiX2xldmVsIiwiX19ydW5Jbml0aWFsaXplcnMiLCJfX3B1YmxpY0ZpZWxkIiwidmFsdWUiLCJkZWJ1ZyIsImluZm8iLCJ3YXJuIiwiZXJyb3IiLCJsdiIsIm1lc3NhZ2UiLCJwcm9jIiwicmVzb2x2ZSIsInJlamVjdCIsImZhdGFsIiwiZGlzcGF0Y2giLCJkYXRhIiwiZXJyIiwiY29kZSIsInNpZ25hbCIsInJlYXNvbiIsIl9fZGVjb3JhdG9yU3RhcnQiLCJfX2RlY29yYXRlRWxlbWVudCIsIl9fZGVjb3JhdG9yTWV0YWRhdGEiLCJsb2dnZXIiLCJMb2ciLCJsZXZlbCIsIkFWX0xPR19FUlJPUiIsIkFWX0xPR19XQVJOSU5HIiwibm9lcnIiLCJmbiIsImFyZ3MiLCJyZXQiLCJQVVBfQVJHU19LRVkiLCJwYXJncyIsImFyZ3YiLCJwcml2IiwiYXJnIiwiREVGQVVMVF9XSURUSCIsIkRFRkFVTFRfSEVJR0hUIiwiREVGQVVMVF9GUFMiLCJERUZBVUxUX0RVUkFUSU9OIiwiREVGQVVMVF9PVVRfRklMRSIsIlJlbmRlclNjaGVtYSIsInoiLCJkZWZhdWx0UmVuZGVyT3B0aW9ucyIsIm1ha2VDTEkiLCJvcHRpb25zIiwic2hhcGUiLCJkIiwicHJvZ3JhbSIsInNvdXJjZSIsIm9wdHMiLCJlIiwiSEVBREVSX1NJWkUiLCJJcGNXcml0ZXIiLCJfc29ja2V0IiwicGF5bG9hZCIsInR5cGUiLCJoZWFkZXIiLCJjb25uZWN0SXBjIiwic29ja2V0UGF0aCIsInNvY2tldCIsImNyZWF0ZUNvbm5lY3Rpb24iLCJidWlsZFN0ZWdvSFRNTCIsInRhcmdldFVSTCIsInNpemUiLCJ3aWR0aCIsImhlaWdodCIsImRlY29kZVN0ZWdvIiwiYml0bWFwIiwibWFya2VyUm93IiwidGltZXN0YW1wIiwiaSIsInBpeGVsSWR4IiwiYml0Iiwic3RhcnRTdGVnbyIsImNkcCIsInN0b3BTdGVnbyIsIlBVUF9TQ0hFTUUiLCJwcm90b2NvbCIsInNldHVwUHVwUHJvdG9jb2wiLCJyZXEiLCJ1cmwiLCJzcmMiLCJodG1sIiwiY3JlYXRlU3RlZ29VUkwiLCJDb25jdXJyZW5jeUxpbWl0ZXIiLCJtYXhDb25jdXJyZW5jeSIsInYiLCJyIiwia2VlcCIsImVudHJ5IiwibWFrZUZyYW1lIiwicGl4Rm10IiwiZnJhbWUiLCJGcmFtZSIsIkZGbXBlZ0Vycm9yIiwibWFrZVBhY2tldCIsInBrdCIsIlBhY2tldCIsImRyYWluUGFja2V0cyIsImN0eCIsInN0cmVhbSIsIm11eGVyIiwiQVZFUlJPUl9FQUdBSU4iLCJBVkVSUk9SX0VPRiIsIlNBTVBMRV9GTVRfTkFNRSIsIkFWX1NBTVBMRV9GTVRfRkxUIiwiQVZfU0FNUExFX0ZNVF9GTFRQIiwiQXVkaW9FbmNvZGVyIiwiX0F1ZGlvRW5jb2RlciIsIm91dEZtdCIsImNvZGVjIiwiQ29kZWMiLCJDb2RlY0NvbnRleHQiLCJBVl9DSEFOTkVMX0xBWU9VVF9TVEVSRU8iLCJSYXRpb25hbCIsIkFWX0NPREVDX0ZMQUdfR0xPQkFMX0hFQURFUiIsImluU2FtcGxlUmF0ZSIsImdyYXBoIiwiRmlsdGVyR3JhcGgiLCJhYnVmZmVyIiwiRmlsdGVyIiwiYnVmU3JjIiwiYWJ1ZmZlcnNpbmsiLCJidWZTaW5rIiwiZmlsdGVyRGVzYyIsIm91dHB1dHMiLCJGaWx0ZXJJbk91dCIsImlucHV0cyIsInBjbSIsIl9zdGFjayIsIm5TYW1wbGVzIiwiX191c2luZyIsIl8iLCJfZXJyb3IiLCJfaGFzRXJyb3IiLCJfX2NhbGxEaXNwb3NlIiwiQ29kZWNTdGF0ZSIsIl9Db2RlY1N0YXRlIiwiRkZfREVDT0RFUl9QTkciLCJvayIsInBuZyIsIkFWX1BJWF9GTVRfQkdSQSIsIkFWX1BJWF9GTVRfWVVWQTQyMFAiLCJwbmdEYXRhIiwic3dzIiwiU29mdHdhcmVTY2FsZUNvbnRleHQiLCJmbXQiLCJTV1NfQklMSU5FQVIiLCJBTk5FWF9CX1NUQVJUX0NPREUiLCJwYXJzZU5hbFR5cGUiLCJoZWFkZXIwIiwiaGVhZGVyMSIsImxheWVySWQiLCJ0ZW1wb3JhbElkIiwiZW5jb2RlTmFsSGVhZGVyIiwiYnl0ZTAiLCJieXRlMSIsInBhY2tCaXRzIiwiYml0cyIsImJ1ZiIsImJ5dGUiLCJiIiwic3BsaXROYWxVbml0cyIsImJpdHN0cmVhbSIsIm5hbHMiLCJzY0xlbiIsIm5hbFN0YXJ0IiwibmFsRW5kIiwiaiIsInJld3JpdGVOYWxMYXllcklkIiwibmFsIiwib3V0IiwiYjAiLCJiMSIsIk5BTF9VTklUX1BSRUZJWF9TRUkiLCJidWlsZFVuaWZpZWRFeHRyYWRhdGEiLCJiYXNlRXh0cmFkYXRhIiwiYWxwaGFFeHRyYWRhdGEiLCJiYXNlTmFscyIsImFscGhhTmFscyIsImFscGhhQnlUeXBlIiwiYXJyIiwiY2h1bmtzIiwiZW1pdHRlZCIsInBhdGNoVlBTRm9yQWxwaGEiLCJhbHBoYU5hbCIsImJ1aWxkQWxwaGFDaGFubmVsSW5mb1NFSSIsInZwc0RhdGEiLCJyYnNwIiwiYml0UG9zIiwicmVhZEJpdHMiLCJuIiwidmFsIiwiYnl0ZUlkeCIsImJpdElkeCIsInZwc0Jhc2VMYXllckludGVybmFsRmxhZyIsIm1heExheWVyc1BvcyIsIm1sT2Zmc2V0IiwibGFzdEJpdCIsImgwIiwiaDEiLCJ3cml0ZUJpdHMiLCJpbnRlcmxlYXZlQWNjZXNzVW5pdHMiLCJOdmVuY0R1YWxMYXllckVuY29kZXIiLCJfTnZlbmNEdWFsTGF5ZXJFbmNvZGVyIiwicyIsImZwcyIsImJpdHJhdGUiLCJodyIsIkZGX0VOQ09ERVJfSEVWQ19OVkVOQyIsImh3RnJhbWVzQ3R4IiwiSGFyZHdhcmVGcmFtZXNDb250ZXh0IiwiQVZfUElYX0ZNVF9DVURBIiwiQVZfUElYX0ZNVF9ZVVY0MjBQIiwibWFrZUN0eCIsImN0eE9wdHMiLCJBVkNPTF9SQU5HRV9KUEVHIiwiYmFzZUN0eCIsImFscGhhQ3R4IiwiYmFzZVBrdCIsImFscGhhUGt0IiwiYmFzZUV4dHJhIiwiYWxwaGFFeHRyYSIsImJhc2VTd3MiLCJiZ3JhRnJhbWUiLCJ5dXZGcmFtZSIsInB0cyIsInNyY0xzIiwidyIsImgiLCJ5U2l6ZSIsInV2U2l6ZSIsInkiLCJiYXNlSHdGcmFtZSIsImFscGhhSHdGcmFtZSIsImJhc2VSIiwiYWxwaGFSIiwiYmFzZVJlYWR5IiwiYWxwaGFSZWFkeSIsImR0cyIsImR1cmF0aW9uIiwiVmlkZW9FbmNvZGVyIiwiX1ZpZGVvRW5jb2RlciIsImNvZGVjTmFtZSIsImNvZGVjVGFnIiwiZ2xvYmFsSGVhZGVyIiwiY29kZWNPcHRzIiwiayIsIlZpZGVvVG9vbGJveEVuY29kZXIiLCJfVmlkZW9Ub29sYm94RW5jb2RlciIsIlRBRyIsImNyZWF0ZVZpZGVvRW5jb2RlciIsImRpc2FibGVHcHUiLCJIYXJkd2FyZUNvbnRleHQiLCJGRl9IV0RFVklDRV9UWVBFX1ZJREVPVE9PTEJPWCIsIkZGX0hXREVWSUNFX1RZUEVfQ1VEQSIsIkZGX0VOQ09ERVJfTElCWDI2NSIsIkZvcm1hdE11eGVyIiwib3V0UGF0aCIsImZvcm1hdE5hbWUiLCJGb3JtYXRDb250ZXh0IiwiY29kZWNDdHgiLCJFbmNvZGVyUGlwZWxpbmUiLCJfRW5jb2RlclBpcGVsaW5lIiwib3V0RmlsZSIsIndpdGhBdWRpbyIsInZpZGVvIiwiaHdWaWRlbyIsImF1ZGlvIiwiRkZfRU5DT0RFUl9BQUMiLCJzYW1wbGVSYXRlIiwiaW5wdXQiLCJkc3QiLCJjcyIsImxpbWl0ZXIiLCJfbSIsIl92IiwiX2h2IiwiX2EiLCJfcHJvbWlzZSIsIl9jb2RlYyIsIkZyYW1lRHJvcFN0YXRzIiwiY291bnQiLCJ0b3RhbERyb3BwZWQiLCJsb2NhbFN1bSIsIm1heEJ1cnN0IiwiYnVyc3QiLCJwZXJjZXB0aWJsZSIsImV4cGVjdGVkIiwiZyIsImwiLCJzY29yZSIsImlzRW1wdHkiLCJpbWFnZSIsIkFVRElPX0NBUFRVUkVfU0NSSVBUIiwic2V0dXBBdWRpb0NhcHR1cmUiLCJlbmNvZGVyIiwiZ2V0VmlkZW9UaW1lTXMiLCJvbkVycm9yIiwicHJlbG9hZFBhdGgiLCJ0bXBkaXIiLCJyYW5kb21VVUlEIiwid3JpdGVGaWxlIiwic2Vzc2lvbiIsImlwY01haW4iLCJfZSIsInN0YXJ0TXMiLCJzaWxlbmNlU2FtcGxlcyIsImJ1ZmZlciIsInJtIiwic2xlZXAiLCJtcyIsInVzZVJldHJ5IiwibWF4QXR0ZW1wdHMiLCJ0aW1lb3V0IiwidGltZW91dEVycm9yIiwiYXR0ZW1wdCIsInByb21pc2VzIiwic2V0VGltZW91dCIsIlNVUFBPUlRFRF9QUk9UT0NPTFMiLCJTT1VSQ0VfUEFUVEVSTiIsImNoZWNrSFRNTCIsIldhaXRhYmxlRXZlbnQiLCJtYXAiLCJwcm94aWVkVXJsIiwicGFyc2VkIiwiVVJMIiwic2V0SW50ZXJjZXB0b3IiLCJ3aW5kb3ciLCJ1c2VJbm5lclByb3h5IiwiZXZlbnRzIiwid2FpdCIsImtleSIsIm9uVGltZW91dCIsImV2ZW50IiwiZGV0YWlscyIsImNhbGxiYWNrIiwicHJveGllZCIsInJlc3BvbnNlSGVhZGVycyIsInVuc2V0SW50ZXJjZXB0b3IiLCJ3YWl0Rm9yRmluaXNoIiwid2luIiwiYWN0aW9uIiwiZG9uZSIsImlzTWFpbkZyYW1lIiwiZnJhbWVQcm9jZXNzSWQiLCJmcmFtZVJvdXRpbmdJZCIsImRlc2MiLCJleGl0Q29kZSIsIndhaXRGb3JEZXN0cm95Iiwib3BlbldpbmRvdyIsIm9uQ3JlYXRlZCIsInJlbmRlcmVyIiwid2FybXVwIiwiQnJvd3NlcldpbmRvdyIsImxpbmVOdW1iZXIiLCJzb3VyY2VJZCIsIm1zZ3MiLCJsb2FkV2luZG93Iiwic3RhY2siLCJyZW5kZXIiLCJ3cml0ZXIiLCJ0b3RhbCIsImZyYW1lSW50ZXJ2YWwiLCJ3cml0dGVuIiwibGFzdFdyaXR0ZW5UaW1lIiwicHJvZ3Jlc3MiLCJlbmNvZGVFcnJvciIsInJlc29sdmVyIiwicmVqZWN0ZXIiLCJkcm9wU3RhdHMiLCJzY2hlZHVsZUZyYW1lIiwicGFpbnQiLCJfciIsImN1cnJlbnRUaW1lIiwiYnl0ZXNQZXJSb3ciLCJjcm9wcGVkIiwidGltZURlbHRhIiwiZnJhbWVzVG9JbnNlcnQiLCJuZXdQcm9ncmVzcyIsImR1cmF0aW9uTXMiLCJkcm9wU2NvcmUiLCJhZHZhbmNlVmlydHVhbFRpbWUiLCJidWRnZXQiLCJoYW5kbGVyIiwibWV0aG9kIiwicGF1c2VWaXJ0dWFsVGltZSIsImRlYm91bmNlIiwiZGVsYXkiLCJ0aW1lciIsIkxhenkiLCJtYWtlVmFsdWUiLCJUSUNLX1NZTUJPTCIsImJ1aWxkVGlja0luamVjdG9yIiwiZG9Qcm9jZXNzIiwidGltZXN0YW1wTXMiLCJkb0VqZWN0IiwiYXdhaXRTdGVnb0ZyYW1lIiwiYWZ0ZXJUcyIsInNraXBwZWQiLCJyZXBvcnQiLCJfZCIsInRzIiwic2hvb3QiLCJwaXBlbGluZSIsInJvb3RGcmFtZSIsInJlbmRlckZwcyIsInJlbmRlckludGVydmFsIiwiaWZyYW1lIiwiZnJhbWVNcyIsInByaW50RmVhdHVyZXMiLCJhcHAiLCJleGl0IiwiYyIsImlwYyIsIm1rZGlyIl0sIm1hcHBpbmdzIjoibWpCQUtBLElBQUEsRUFBQSxDQUFBLE1BQUEsQ0FBQSxNQUFBLENBQUEsSUFBQSxFQUFBLENBQUEsTUFBQSxDQUFBLGNBQUEsQ0FBQSxJQUFBLEVBQUEsQ0FBQSxNQUFBLENBQUEsd0JBQUEsQ0FBQSxJQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEdBQUEsQ0FBQSxDQUFBLENBQUEsTUFBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxNQUFBLENBQUEsR0FBQSxDQUFBLFNBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsTUFBQSxTQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxJQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxHQUFBLENBQUEsSUFBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxVQUFBLENBQUEsSUFBQSxDQUFBLFlBQUEsQ0FBQSxJQUFBLENBQUEsUUFBQSxDQUFBLElBQUEsQ0FBQSxLQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLElBQUEsRUFBQSxDQUFBLENBQUEsRUFBQSxJQUFBLEVBQUEsQ0FBQSxJQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLE9BQUEsQ0FBQSxRQUFBLENBQUEsUUFBQSxDQUFBLFFBQUEsQ0FBQSxVQUFBLENBQUEsT0FBQSxDQUFBLE9BQUEsQ0FBQSxLQUFBLENBQUEsS0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLEdBQUEsTUFBQSxFQUFBLE9BQUEsQ0FBQSxFQUFBLFVBQUEsQ0FBQSxDQUFBLENBQUEsbUJBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxJQUFBLENBQUEsSUFBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxJQUFBLENBQUEsQ0FBQSxDQUFBLFFBQUEsQ0FBQSxDQUFBLENBQUEsY0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxxQkFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLElBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLElBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEdBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsVUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxHQUFBLENBQUEsSUFBQSxJQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsTUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLElBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxPQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxHQUFBLENBQUEsSUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEtBQUEsQ0FBQSxDQUFBLENBQUEsS0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsR0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLFNBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsSUFBQSxJQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsTUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxNQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxPQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsTUFBQSxDQUFBLENBQUEsR0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLElBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsR0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLElBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEdBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLE9BQUEsQ0FBQSxFQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxHQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxJQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxHQUFBLENBQUEsR0FBQSxDQUFBLEVBQUEsSUFBQSxDQUFBLENBQUEsT0FBQSxDQUFBLEVBQUEsUUFBQSxFQUFBLE9BQUEsQ0FBQSxFQUFBLFVBQUEsRUFBQSxDQUFBLENBQUEsaUJBQUEsQ0FBQSxDQUFBLElBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEdBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsY0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsR0FBQSxNQUFBLEdBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsU0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEdBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsT0FBQSxDQUFBLEVBQUEsVUFBQSxFQUFBLENBQUEsQ0FBQSx1QkFBQSxDQUFBLENBQUEsQ0FBQSxHQUFBLENBQUEsQ0FBQSxVQUFBLENBQUEsR0FBQSxDQUFBLENBQUEsQ0FBQSxJQUFBLENBQUEsSUFBQSxFQUFBLENBQUEsTUFBQSxDQUFBLENBQUEsQ0FBQSxPQUFBLE9BQUEsQ0FBQSxNQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLElBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxLQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsSUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxPQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxHQUFBLENBQUEsSUFBQSxDQUFBLENBQUEsT0FBQSxlQUFBLEVBQUEsVUFBQSxDQUFBLGVBQUEsQ0FBQSxTQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLE9BQUEsQ0FBQSxDQUFBLEtBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsSUFBQSxDQUFBLGlCQUFBLENBQUEsQ0FBQSxDQUFBLEtBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLFVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLElBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEseUNBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxJQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLEtBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxHQUFBLEVBQUEsRUFBQSxHQUFBLENBQUEsSUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxJQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsR0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsT0FBQSxPQUFBLENBQUEsT0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLElBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxHQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsTUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsR0FBQSxDQUFBLENBQUEsTUFBQSxDQUFBLENBQUEsQ0FBQSxPQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsSUFBTUEsRUFBQUEsQ0FBbUIsSUFDdkIsT0FBTyxRQUFBLENBQWEsSUFDaEIsSUFBSSxHQUFBLENBQUksQ0FBQSxLQUFBLEVBQVEsVUFBVSxFQUFFLENBQUEsQ0FBRSxJQUFBLENBQzdCLFFBQUEsQ0FBUyxhQUFBLEVBQWlC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QSxFQUFVLENBQ3BCN1UsSUFBaUIsQ0FDakI0VSxFQUFBQSxFQUFjLENBQ2QsTUFBTUssZUFBTXRiLFlBQUFBLENBQVFtRSxDQUFBQSxDQUFRLE9BQU8sQ0FBQSxDQUFHLENBQUUsU0FBQSxDQUFXLENBQUEsQ0FBSyxDQUFDLENBQUEsQ0FDekQsSUFBTTBTLENBQUFBLENBQVMxUyxDQUFBQSxDQUFRLGFBQUEsQ0FBZ0J1VyxHQUFRM0MsRUFBQUEsQ0FDL0NzRCxDQUFBQSxDQUFJLFNBQUEsQ0FBVSxNQUFNeEUsRUFBT3dFLENBQUFBLENBQUs5VyxDQUFBQSxDQUFRSixDQUFPLENBQUMsRUFDbEQsQ0FBQSxNQUFTTSxDQUFBQSxDQUFHLENBQ1YsSUFBTTdDLENBQUFBLENBQVE2QyxDQUFBQSxDQUNkNFcsQ0FBQUEsQ0FBSSxVQUFBLENBQVd6WixFQUFNLEtBQUEsRUFBUyxlQUFlLEVBQy9DLENBQUEsT0FBRSxDQUNBc1osWUFBQUEsQ0FBSSxJQUFBLEdBQ04sQ0FDRixDQUNGLENBQUMsQ0FBQSIsImZpbGUiOiJhcHAuY2pzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gU2hpbSBnbG9iYWxzIGluIGNqcyBidW5kbGVcbi8vIFRoZXJlJ3MgYSB3ZWlyZCBidWcgdGhhdCBlc2J1aWxkIHdpbGwgYWx3YXlzIGluamVjdCBpbXBvcnRNZXRhVXJsXG4vLyBpZiB3ZSBleHBvcnQgaXQgYXMgYGNvbnN0IGltcG9ydE1ldGFVcmwgPSAuLi4gX19maWxlbmFtZSAuLi5gXG4vLyBCdXQgdXNpbmcgYSBmdW5jdGlvbiB3aWxsIG5vdCBjYXVzZSB0aGlzIGlzc3VlXG5cbmNvbnN0IGdldEltcG9ydE1ldGFVcmwgPSAoKSA9PiBcbiAgdHlwZW9mIGRvY3VtZW50ID09PSBcInVuZGVmaW5lZFwiIFxuICAgID8gbmV3IFVSTChgZmlsZToke19fZmlsZW5hbWV9YCkuaHJlZiBcbiAgICA6IChkb2N1bWVudC5jdXJyZW50U2NyaXB0ICYmIGRvY3VtZW50LmN1cnJlbnRTY3JpcHQudGFnTmFtZS50b1VwcGVyQ2FzZSgpID09PSAnU0NSSVBUJykgXG4gICAgICA/IGRvY3VtZW50LmN1cnJlbnRTY3JpcHQuc3JjIFxuICAgICAgOiBuZXcgVVJMKFwibWFpbi5qc1wiLCBkb2N1bWVudC5iYXNlVVJJKS5ocmVmO1xuXG5leHBvcnQgY29uc3QgaW1wb3J0TWV0YVVybCA9IC8qIEBfX1BVUkVfXyAqLyBnZXRJbXBvcnRNZXRhVXJsKClcbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMjUuXG5cbmV4cG9ydCB0eXBlIEVudlBhcnNlcjxUPiA9ICh2YWx1ZTogdW5rbm93bikgPT4gVDtcblxuZXhwb3J0IGZ1bmN0aW9uIHBlbnY8VD4obmFtZTogc3RyaW5nLCBwYXJzZXI6IEVudlBhcnNlcjxUPiwgZGVmYXVsdFZhbHVlOiBUKTogVDtcbmV4cG9ydCBmdW5jdGlvbiBwZW52PFQ+KG5hbWU6IHN0cmluZywgcGFyc2VyOiBFbnZQYXJzZXI8VD4sIGRlZmF1bHRWYWx1ZT86IFQpOiBUIHwgdW5kZWZpbmVkO1xuZXhwb3J0IGZ1bmN0aW9uIHBlbnY8VD4obmFtZTogc3RyaW5nLCBwYXJzZXI6IEVudlBhcnNlcjxUPiwgZGVmYXVsdFZhbHVlPzogVCk6IFQgfCB1bmRlZmluZWQge1xuICB0cnkge1xuICAgIHJldHVybiBwYXJzZXIocHJvY2Vzcy5lbnZbbmFtZV0pO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZGVmYXVsdFZhbHVlO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAxLzMwLlxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VOdW1iZXIoeDogdW5rbm93bik6IG51bWJlciB7XG4gIGlmICh0eXBlb2YgeCA9PT0gXCJudW1iZXJcIikge1xuICAgIHJldHVybiB4O1xuICB9XG4gIGNvbnN0IG51bSA9IE51bWJlcih4KTtcbiAgaWYgKE51bWJlci5pc05hTihudW0pKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBWYWx1ZSAke3h9IGlzIG5vdCBhIHZhbGlkIG51bWJlcmApO1xuICB9XG4gIHJldHVybiBudW07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVN0cmluZyh4OiB1bmtub3duKTogc3RyaW5nIHtcbiAgaWYgKHR5cGVvZiB4ID09PSBcInN0cmluZ1wiKSByZXR1cm4geDtcbiAgcmV0dXJuIFN0cmluZyh4KTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDkuXG5cbmltcG9ydCB7IGNyZWF0ZVJlcXVpcmUgfSBmcm9tIFwibW9kdWxlXCI7XG5pbXBvcnQgeyBkaXJuYW1lLCBqb2luIH0gZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IHBlbnYgfSBmcm9tIFwiLi9lbnZcIjtcbmltcG9ydCB7IHBhcnNlTnVtYmVyIH0gZnJvbSBcIi4vcGFyc2VyXCI7XG5cbmNvbnN0IHJlcXVpcmUgPSBjcmVhdGVSZXF1aXJlKGltcG9ydC5tZXRhLnVybCk7XG5jb25zdCBlbnYgPSBwcm9jZXNzLmVudjtcblxuZXhwb3J0IGNvbnN0IHB1cExvZ0xldmVsID0gcGVudihcIlBVUF9MT0dfTEVWRUxcIiwgcGFyc2VOdW1iZXIsIDIpO1xuZXhwb3J0IGNvbnN0IHB1cFVzZUlubmVyUHJveHkgPSBlbnZbXCJQVVBfVVNFX0lOTkVSX1BST1hZXCJdID09PSBcIjFcIjtcbmV4cG9ydCBjb25zdCBwdXBEaXNhYmxlR1BVID0gZW52W1wiUFVQX0RJU0FCTEVfR1BVXCJdID09PSBcIjFcIjtcbmV4cG9ydCBjb25zdCBwdXBEZXRlcm1pbmlzdGljID0gZW52W1wiUFVQX0RFVEVSTUlOSVNUSUNcIl0gPT09IFwiMVwiO1xuXG5leHBvcnQgY29uc3QgcHVwUGtnUm9vdCA9IGRpcm5hbWUocmVxdWlyZS5yZXNvbHZlKFwicHVwLXJlY29yZGVyL3BhY2thZ2UuanNvblwiKSk7XG5leHBvcnQgY29uc3QgcHVwQXBwID0gam9pbihwdXBQa2dSb290LCBcImRpc3RcIiwgXCJhcHAuY2pzXCIpO1xuZXhwb3J0IGNvbnN0IHB1cElwY1NvY2tldCA9IGVudltcIlBVUF9JUENfU09DS0VUXCJdO1xuXG5leHBvcnQgY29uc3QgcHVwRXhwZXJpbWVudGFsUHVwcGV0ZWVyID0gZW52W1wiUFVQX0VYUEVSSU1FTlRBTF9QVVBQRVRFRVJcIl0gPT09IFwiMVwiO1xuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wNi5cblxuaW1wb3J0IHsgQ2hpbGRQcm9jZXNzLCB0eXBlIFNlcmlhbGl6YWJsZSB9IGZyb20gXCJjaGlsZF9wcm9jZXNzXCI7XG5pbXBvcnQgeyBMb2cgfSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHsgQVZfTE9HX0VSUk9SLCBBVl9MT0dfV0FSTklORyB9IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgcHVwTG9nTGV2ZWwgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBMb2dnZXJMaWtlIHtcbiAgZGVidWc/KHRoaXM6IHZvaWQsIC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkO1xuXG4gIGluZm8/KHRoaXM6IHZvaWQsIC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkO1xuXG4gIHdhcm4/KHRoaXM6IHZvaWQsIC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkO1xuXG4gIGVycm9yPyh0aGlzOiB2b2lkLCAuLi5tZXNzYWdlczogdW5rbm93bltdKTogdm9pZDtcbn1cblxuY29uc3QgREVCVUcgPSBcIjxwdXBAZGVidWc+XCI7XG5jb25zdCBJTkZPID0gXCI8cHVwQGluZm8+XCI7XG5jb25zdCBXQVJOID0gXCI8cHVwQHdhcm4+XCI7XG5jb25zdCBFUlJPUiA9IFwiPHB1cEBlcnJvcj5cIjtcbmNvbnN0IEZBVEFMID0gXCI8cHVwQGZhdGFsPlwiO1xuXG5mdW5jdGlvbiBzdGFja0hvb2sodGFyZ2V0OiBGdW5jdGlvbiwgX2NvbnRleHQ6IENsYXNzTWV0aG9kRGVjb3JhdG9yQ29udGV4dCkge1xuICByZXR1cm4gZnVuY3Rpb24gKHRoaXM6IExvZ2dlciwgLi4ubWVzc2FnZXM6IHVua25vd25bXSkge1xuICAgIGNvbnN0IHByb2Nlc3NlZCA9IG1lc3NhZ2VzLm1hcCgobXNnKSA9PiB7XG4gICAgICByZXR1cm4gbXNnIGluc3RhbmNlb2YgRXJyb3IgPyAobXNnLnN0YWNrID8/IFN0cmluZyhtc2cpKSA6IG1zZztcbiAgICB9KTtcbiAgICByZXR1cm4gdGFyZ2V0LmNhbGwodGhpcywgLi4ucHJvY2Vzc2VkKTtcbiAgfTtcbn1cblxuZXhwb3J0IGNsYXNzIExvZ2dlciBpbXBsZW1lbnRzIExvZ2dlckxpa2Uge1xuICBwcml2YXRlIF9pbXBsPzogTG9nZ2VyTGlrZTtcblxuICBnZXQgbGV2ZWwoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fbGV2ZWw7XG4gIH1cblxuICBzZXQgbGV2ZWwodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX2xldmVsID0gdmFsdWU7XG4gICAgdGhpcy5pbXBsID0gdGhpcy5faW1wbCA/PyBjb25zb2xlO1xuICB9XG5cbiAgZ2V0IGltcGwoKTogTG9nZ2VyTGlrZSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2ltcGw7XG4gIH1cblxuICBzZXQgaW1wbCh2YWx1ZTogTG9nZ2VyTGlrZSkge1xuICAgIGNvbnN0IGRlYnVnID0gdmFsdWUuZGVidWcgPz8gY29uc29sZS5kZWJ1ZztcbiAgICBjb25zdCBpbmZvID0gdmFsdWUuaW5mbyA/PyBjb25zb2xlLmluZm87XG4gICAgY29uc3Qgd2FybiA9IHZhbHVlLndhcm4gPz8gY29uc29sZS53YXJuO1xuICAgIGNvbnN0IGVycm9yID0gdmFsdWUuZXJyb3IgPz8gY29uc29sZS5lcnJvcjtcbiAgICBjb25zdCBsdiA9IHRoaXMuX2xldmVsO1xuICAgIHRoaXMuX2ltcGwgPSB7XG4gICAgICBkZWJ1ZzogbHYgPj0gMyA/IGRlYnVnIDogdW5kZWZpbmVkLFxuICAgICAgaW5mbzogbHYgPj0gMiA/IGluZm8gOiB1bmRlZmluZWQsXG4gICAgICB3YXJuOiBsdiA+PSAxID8gd2FybiA6IHVuZGVmaW5lZCxcbiAgICAgIGVycm9yOiBsdiA+PSAwID8gZXJyb3IgOiB1bmRlZmluZWQsXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX2xldmVsOiBudW1iZXIgPSBwdXBMb2dMZXZlbCkge1xuICAgIHRoaXMuaW1wbCA9IGNvbnNvbGU7XG4gIH1cblxuICBAc3RhY2tIb29rXG4gIGRlYnVnKC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkIHtcbiAgICB0aGlzLmltcGw/LmRlYnVnPy4oREVCVUcsIC4uLm1lc3NhZ2VzKTtcbiAgfVxuXG4gIEBzdGFja0hvb2tcbiAgaW5mbyguLi5tZXNzYWdlczogdW5rbm93bltdKTogdm9pZCB7XG4gICAgdGhpcy5pbXBsPy5pbmZvPy4oSU5GTywgLi4ubWVzc2FnZXMpO1xuICB9XG5cbiAgQHN0YWNrSG9va1xuICB3YXJuKC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkIHtcbiAgICB0aGlzLmltcGw/Lndhcm4/LihXQVJOLCAuLi5tZXNzYWdlcyk7XG4gIH1cblxuICBAc3RhY2tIb29rXG4gIGVycm9yKC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkIHtcbiAgICB0aGlzLmltcGw/LmVycm9yPy4oRVJST1IsIC4uLm1lc3NhZ2VzKTtcbiAgfVxuXG4gIEBzdGFja0hvb2tcbiAgZmF0YWwoLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQge1xuICAgIHRoaXMuaW1wbD8uZXJyb3I/LihGQVRBTCwgLi4ubWVzc2FnZXMpO1xuICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgfVxuXG4gIHByaXZhdGUgZGlzcGF0Y2gobWVzc2FnZTogc3RyaW5nKSB7XG4gICAgY29uc3QgbXNnID0gbWVzc2FnZS50cmltRW5kKCk7XG4gICAgaWYgKG1zZy5zdGFydHNXaXRoKERFQlVHKSkge1xuICAgICAgdGhpcy5kZWJ1Zyhtc2cuc2xpY2UoREVCVUcubGVuZ3RoICsgMSkpO1xuICAgIH0gZWxzZSBpZiAobXNnLnN0YXJ0c1dpdGgoSU5GTykpIHtcbiAgICAgIHRoaXMuaW5mbyhtc2cuc2xpY2UoSU5GTy5sZW5ndGggKyAxKSk7XG4gICAgfSBlbHNlIGlmIChtc2cuc3RhcnRzV2l0aChXQVJOKSkge1xuICAgICAgdGhpcy53YXJuKG1zZy5zbGljZShXQVJOLmxlbmd0aCArIDEpKTtcbiAgICB9IGVsc2UgaWYgKG1zZy5zdGFydHNXaXRoKEVSUk9SKSkge1xuICAgICAgdGhpcy5lcnJvcihtc2cuc2xpY2UoRVJST1IubGVuZ3RoICsgMSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmluZm8obXNnKTtcbiAgICB9XG4gIH1cblxuICBhdHRhY2gocHJvYzogQ2hpbGRQcm9jZXNzLCBuYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpcy5kZWJ1ZyhgJHtuYW1lfS5hdHRhY2hgKTtcbiAgICAgIGxldCBmYXRhbDogc3RyaW5nID0gXCJcIjtcbiAgICAgIGNvbnN0IGRpc3BhdGNoID0gKGRhdGE6IEJ1ZmZlciB8IFNlcmlhbGl6YWJsZSkgPT4ge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0gZGF0YS50b1N0cmluZygpO1xuICAgICAgICBpZiAobWVzc2FnZS5zdGFydHNXaXRoKEZBVEFMKSkge1xuICAgICAgICAgIGZhdGFsICs9IG1lc3NhZ2Uuc2xpY2UoRkFUQUwubGVuZ3RoICsgMSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5kaXNwYXRjaChtZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHByb2Muc3RkZXJyPy5vbihcImRhdGFcIiwgZGlzcGF0Y2gpO1xuICAgICAgcHJvYy5zdGRvdXQ/Lm9uKFwiZGF0YVwiLCBkaXNwYXRjaCk7XG4gICAgICBwcm9jXG4gICAgICAgIC5vbihcIm1lc3NhZ2VcIiwgZGlzcGF0Y2gpXG4gICAgICAgIC5vbihcImVycm9yXCIsIChlcnIpID0+IHtcbiAgICAgICAgICBmYXRhbCArPSBlcnIubWVzc2FnZTtcbiAgICAgICAgICBwcm9jLmtpbGwoKTtcbiAgICAgICAgfSlcbiAgICAgICAgLm9uY2UoXCJjbG9zZVwiLCAoY29kZSwgc2lnbmFsKSA9PiB7XG4gICAgICAgICAgaWYgKGNvZGUgfHwgc2lnbmFsIHx8IGZhdGFsKSB7XG4gICAgICAgICAgICBmYXRhbCB8fD0gYGNvbW1hbmQgZmFpbGVkOiAke3Byb2Muc3Bhd25hcmdzLmpvaW4oXCIgXCIpfWA7XG4gICAgICAgICAgICB0aGlzLmRlYnVnKGAke25hbWV9LmNsb3NlYCwgeyBjb2RlLCBzaWduYWwsIGZhdGFsIH0pO1xuICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihmYXRhbCkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRlYnVnKGAke25hbWV9LmNsb3NlYCk7XG4gICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAub24oXCJ1bmhhbmRsZWRSZWplY3Rpb25cIiwgKHJlYXNvbikgPT4ge1xuICAgICAgICAgIHRoaXMuZXJyb3IoYCR7bmFtZX0udW5oYW5kbGVkYCwgcmVhc29uKTtcbiAgICAgICAgfSlcbiAgICAgICAgLm9uKFwidW5jYXVnaHRFeGNlcHRpb25Nb25pdG9yXCIsIChlcnIpID0+IHtcbiAgICAgICAgICB0aGlzLmVycm9yKGAke25hbWV9LnVuaGFuZGxlZGAsIGVycik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9XG59XG5cbmNvbnN0IGxvZ2dlciA9IG5ldyBMb2dnZXIoKTtcblxuLy8gUm91dGUgZmZtcGVnIG5hdGl2ZSBsb2dzIHRocm91Z2ggcHVwJ3MgbG9nZ2VyLlxuTG9nLnNldENhbGxiYWNrKChsZXZlbCwgbWVzc2FnZSkgPT4ge1xuICBjb25zdCBtc2cgPSBtZXNzYWdlLnRyaW1FbmQoKTtcbiAgaWYgKCFtc2cpIHJldHVybjtcbiAgaWYgKGxldmVsIDw9IEFWX0xPR19FUlJPUikgbG9nZ2VyLmVycm9yKG1zZyk7XG4gIGVsc2UgaWYgKGxldmVsIDw9IEFWX0xPR19XQVJOSU5HKSBsb2dnZXIud2Fybihtc2cpO1xufSk7XG5cbmV4cG9ydCB7IGxvZ2dlciB9O1xuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8yNC5cblxuZXhwb3J0IGZ1bmN0aW9uIG5vZXJyPEZuIGV4dGVuZHMgKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnksIEQ+KFxuICBmbjogRm4sXG4gIGRlZmF1bHRWYWx1ZTogRCxcbik6ICguLi5hcmdzOiBQYXJhbWV0ZXJzPEZuPikgPT4gUmV0dXJuVHlwZTxGbj4gfCBEIHtcbiAgcmV0dXJuICguLi5hcmdzKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJldCA9IGZuKC4uLmFyZ3MpO1xuICAgICAgaWYgKHJldCBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgcmV0dXJuIHJldC5jYXRjaCgoKSA9PiBkZWZhdWx0VmFsdWUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJldDtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gICAgfVxuICB9O1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMS8zMC5cblxuaW1wb3J0IHsgc3Bhd24sIHR5cGUgQ2hpbGRQcm9jZXNzLCB0eXBlIFNwYXduT3B0aW9ucyB9IGZyb20gXCJjaGlsZF9wcm9jZXNzXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi9sb2dnaW5nXCI7XG5cbmV4cG9ydCBjb25zdCBQVVBfQVJHU19LRVkgPSBcIi0tcHVwLXByaXYtYXJnc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gcGFyZ3MoKSB7XG4gIGNvbnN0IGFyZ3YgPSBwcm9jZXNzLmFyZ3Y7XG4gIGxldCBwcml2ID0gYXJndi5maW5kKChhcmcpID0+IGFyZy5zdGFydHNXaXRoKFBVUF9BUkdTX0tFWSkpO1xuICBpZiAoIXByaXYpIHtcbiAgICBsb2dnZXIuZGVidWcoXCJwcm9jYXJndlwiLCBhcmd2KTtcbiAgICByZXR1cm4gcHJvY2Vzcy5hcmd2O1xuICB9XG4gIGNvbnN0IGFyZ3MgPSBbXCJleGVjXCIsIC4uLmFyZ3Yuc2xpY2UoLTEpXTtcbiAgcHJpdiA9IEJ1ZmZlci5mcm9tKHByaXYuc3BsaXQoXCI9XCIpWzFdISwgXCJiYXNlNjRcIikudG9TdHJpbmcoKTtcbiAgYXJncy5wdXNoKC4uLkpTT04ucGFyc2UocHJpdikpO1xuICBsb2dnZXIuZGVidWcoXCJwdXBhcmdzXCIsIGFyZ3MpO1xuICByZXR1cm4gYXJncztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQcm9jZXNzSGFuZGxlIHtcbiAgcHJvY2VzczogQ2hpbGRQcm9jZXNzO1xuICB3YWl0OiBQcm9taXNlPHZvaWQ+O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXhlYyhjbWQ6IHN0cmluZywgb3B0aW9ucz86IFNwYXduT3B0aW9ucyk6IFByb2Nlc3NIYW5kbGUge1xuICBjb25zdCBwYXJ0cyA9IGNtZC5zcGxpdChcIiBcIikuZmlsdGVyKChzKSA9PiBzLmxlbmd0aCk7XG4gIGNvbnN0IFtjb21tYW5kLCAuLi5hcmdzXSA9IHBhcnRzO1xuICBpZiAoIWNvbW1hbmQpIHRocm93IG5ldyBFcnJvcihcImVtcHR5IGNvbW1hbmRcIik7XG4gIGNvbnN0IHByb2MgPSBzcGF3bihjb21tYW5kLCBhcmdzLCB7XG4gICAgc3RkaW86IFwiaW5oZXJpdFwiLFxuICAgIC4uLm9wdGlvbnMsXG4gIH0pO1xuICByZXR1cm4geyBwcm9jZXNzOiBwcm9jLCB3YWl0OiBsb2dnZXIuYXR0YWNoKHByb2MsIGNvbW1hbmQpIH07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA2LlxuXG5pbXBvcnQgeiBmcm9tIFwiem9kXCI7XG5pbXBvcnQgeyBwdXBEZXRlcm1pbmlzdGljLCBwdXBEaXNhYmxlR1BVLCBwdXBVc2VJbm5lclByb3h5IH0gZnJvbSBcIi4uL2Jhc2UvY29uc3RhbnRzXCI7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX1dJRFRIID0gMTkyMDtcbmV4cG9ydCBjb25zdCBERUZBVUxUX0hFSUdIVCA9IDEwODA7XG5leHBvcnQgY29uc3QgREVGQVVMVF9GUFMgPSAzMDtcbmV4cG9ydCBjb25zdCBERUZBVUxUX0RVUkFUSU9OID0gNTtcbmV4cG9ydCBjb25zdCBERUZBVUxUX09VVF9GSUxFID0gXCJvdXRwdXQubXA0XCI7XG5cbmV4cG9ydCBjb25zdCBSZW5kZXJTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIGR1cmF0aW9uOiB6Lm51bWJlcigpLmRlc2NyaWJlKFwiRHVyYXRpb24gaW4gc2Vjb25kc1wiKSxcbiAgd2lkdGg6IHoubnVtYmVyKCkuZGVzY3JpYmUoXCJWaWRlbyB3aWR0aFwiKSxcbiAgaGVpZ2h0OiB6Lm51bWJlcigpLmRlc2NyaWJlKFwiVmlkZW8gaGVpZ2h0XCIpLFxuICBmcHM6IHoubnVtYmVyKCkuZGVzY3JpYmUoXCJGcmFtZXMgcGVyIHNlY29uZFwiKSxcbiAgd2l0aEF1ZGlvOiB6LmJvb2xlYW4oKS5kZXNjcmliZShcIkNhcHR1cmUgYW5kIGVuY29kZSBhdWRpb1wiKSxcbiAgb3V0RmlsZTogei5zdHJpbmcoKS5kZXNjcmliZShcIk91dHB1dCBtcDQgZmlsZSBwYXRoXCIpLFxuICB1c2VJbm5lclByb3h5OiB6LmJvb2xlYW4oKS5kZXNjcmliZShcIlVzZSBiaWxpYmlsaSBpbm5lciBwcm94eSBmb3IgcmVzb3VyY2UgYWNjZXNzXCIpLFxuICBkZXRlcm1pbmlzdGljOiB6LmJvb2xlYW4oKS5kZXNjcmliZShcIlJlbmRlciBieSBmcmFtZSByYXRoZXIgdGhhbiByZWNvcmRpbmdcIiksXG4gIGRpc2FibGVHcHU6IHouYm9vbGVhbigpLmRlc2NyaWJlKFwiRGlzYWJsZSBHUFUgcmVuZGVyaW5nLCBtYXkgcmVkdWNlIHBlcmZvcm1hbmNlIGJ1dCBpbmNyZWFzZSBzdGFiaWxpdHlcIiksXG59KTtcblxuZXhwb3J0IHR5cGUgUmVuZGVyT3B0aW9ucyA9IHouaW5mZXI8dHlwZW9mIFJlbmRlclNjaGVtYT47XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVuZGVyUmVzdWx0IHtcbiAgb3B0aW9uczogUmVuZGVyT3B0aW9ucztcbiAgd3JpdHRlbjogbnVtYmVyO1xuICBqYW5rOiBudW1iZXI7XG4gIG91dEZpbGU6IHN0cmluZztcbn1cblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRSZW5kZXJPcHRpb25zOiBSZW5kZXJPcHRpb25zID0ge1xuICB3aWR0aDogREVGQVVMVF9XSURUSCxcbiAgaGVpZ2h0OiBERUZBVUxUX0hFSUdIVCxcbiAgZnBzOiBERUZBVUxUX0ZQUyxcbiAgZHVyYXRpb246IERFRkFVTFRfRFVSQVRJT04sXG4gIG91dEZpbGU6IERFRkFVTFRfT1VUX0ZJTEUsXG4gIHdpdGhBdWRpbzogZmFsc2UsXG4gIHVzZUlubmVyUHJveHk6IHB1cFVzZUlubmVyUHJveHksXG4gIGRldGVybWluaXN0aWM6IHB1cERldGVybWluaXN0aWMsXG4gIGRpc2FibGVHcHU6IHB1cERpc2FibGVHUFUsXG59O1xuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wOS5cblxuaW1wb3J0IHsgcHJvZ3JhbSB9IGZyb20gXCJjb21tYW5kZXJcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuL2Jhc2UvbG9nZ2luZ1wiO1xuaW1wb3J0IHsgbm9lcnIgfSBmcm9tIFwiLi9iYXNlL25vZXJyXCI7XG5pbXBvcnQgeyBwYXJzZU51bWJlciB9IGZyb20gXCIuL2Jhc2UvcGFyc2VyXCI7XG5pbXBvcnQgeyBwYXJncyB9IGZyb20gXCIuL2Jhc2UvcHJvY2Vzc1wiO1xuaW1wb3J0IHsgUmVuZGVyU2NoZW1hLCB0eXBlIFJlbmRlck9wdGlvbnMgfSBmcm9tIFwiLi9yZW5kZXJlci9zY2hlbWFcIjtcblxuZXhwb3J0IGludGVyZmFjZSBDTElPcHRpb25zIHtcbiAgbmFtZTogc3RyaW5nO1xuICBkZWZhdWx0czogUmVuZGVyT3B0aW9ucztcbiAgcnVuOiAoc291cmNlOiBzdHJpbmcsIG9wdGlvbnM6IFJlbmRlck9wdGlvbnMpID0+IFByb21pc2U8dW5rbm93bj47XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBtYWtlQ0xJKG9wdGlvbnM6IENMSU9wdGlvbnMpIHtcbiAgY29uc3Qgc2hhcGUgPSBSZW5kZXJTY2hlbWEuc2hhcGU7XG4gIGNvbnN0IGQgPSBvcHRpb25zLmRlZmF1bHRzO1xuICBwcm9ncmFtXG4gICAgLm5hbWUob3B0aW9ucy5uYW1lKVxuICAgIC5hcmd1bWVudChcIjxzb3VyY2U+XCIsIFwiZmlsZTovLywgaHR0cChzKTovLywgb3IgZGF0YTogVVJJXCIpXG4gICAgLm9wdGlvbihcIi1XLCAtLXdpZHRoIDxudW1iZXI+XCIsIHNoYXBlLndpZHRoLmRlc2NyaXB0aW9uLCBgJHtkLndpZHRofWApXG4gICAgLm9wdGlvbihcIi1ILCAtLWhlaWdodCA8bnVtYmVyPlwiLCBzaGFwZS5oZWlnaHQuZGVzY3JpcHRpb24sIGAke2QuaGVpZ2h0fWApXG4gICAgLm9wdGlvbihcIi1mLCAtLWZwcyA8bnVtYmVyPlwiLCBzaGFwZS5mcHMuZGVzY3JpcHRpb24sIGAke2QuZnBzfWApXG4gICAgLm9wdGlvbihcIi10LCAtLWR1cmF0aW9uIDxudW1iZXI+XCIsIHNoYXBlLmR1cmF0aW9uLmRlc2NyaXB0aW9uLCBgJHtkLmR1cmF0aW9ufWApXG4gICAgLm9wdGlvbihcIi1vLCAtLW91dC1maWxlIDxwYXRoPlwiLCBzaGFwZS5vdXRGaWxlLmRlc2NyaXB0aW9uLCBkLm91dEZpbGUpXG4gICAgLm9wdGlvbihcIi1hLCAtLXdpdGgtYXVkaW9cIiwgc2hhcGUud2l0aEF1ZGlvLmRlc2NyaXB0aW9uLCBkLndpdGhBdWRpbylcbiAgICAub3B0aW9uKFwiLWQsIC0tZGV0ZXJtaW5pc3RpY1wiLCBzaGFwZS5kZXRlcm1pbmlzdGljLmRlc2NyaXB0aW9uLCBkLmRldGVybWluaXN0aWMpXG4gICAgLm9wdGlvbihcIi0tdXNlLWlubmVyLXByb3h5XCIsIHNoYXBlLnVzZUlubmVyUHJveHkuZGVzY3JpcHRpb24sIGQudXNlSW5uZXJQcm94eSlcbiAgICAub3B0aW9uKFwiLS1kaXNhYmxlLWdwdVwiLCBzaGFwZS5kaXNhYmxlR3B1LmRlc2NyaXB0aW9uLCBkLmRpc2FibGVHcHUpXG4gICAgLmFjdGlvbihhc3luYyAoc291cmNlOiBzdHJpbmcsIG9wdHMpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IG9wdGlvbnMucnVuKHNvdXJjZSwge1xuICAgICAgICAgIHdpZHRoOiBub2VycihwYXJzZU51bWJlciwgZC53aWR0aCkob3B0cy53aWR0aCksXG4gICAgICAgICAgaGVpZ2h0OiBub2VycihwYXJzZU51bWJlciwgZC5oZWlnaHQpKG9wdHMuaGVpZ2h0KSxcbiAgICAgICAgICBmcHM6IG5vZXJyKHBhcnNlTnVtYmVyLCBkLmZwcykob3B0cy5mcHMpLFxuICAgICAgICAgIGR1cmF0aW9uOiBub2VycihwYXJzZU51bWJlciwgZC5kdXJhdGlvbikob3B0cy5kdXJhdGlvbiksXG4gICAgICAgICAgb3V0RmlsZTogb3B0cy5vdXRGaWxlID8/IGQub3V0RmlsZSxcbiAgICAgICAgICB3aXRoQXVkaW86IG9wdHMud2l0aEF1ZGlvID8/IGQud2l0aEF1ZGlvLFxuICAgICAgICAgIHVzZUlubmVyUHJveHk6IG9wdHMudXNlSW5uZXJQcm94eSA/PyBkLnVzZUlubmVyUHJveHksXG4gICAgICAgICAgZGV0ZXJtaW5pc3RpYzogb3B0cy5kZXRlcm1pbmlzdGljID8/IGQuZGV0ZXJtaW5pc3RpYyxcbiAgICAgICAgICBkaXNhYmxlR3B1OiBvcHRzLmRpc2FibGVHcHUgPz8gZC5kaXNhYmxlR3B1LFxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgbG9nZ2VyLmZhdGFsKGUpO1xuICAgICAgfVxuICAgIH0pO1xuICBhd2FpdCBwcm9ncmFtLnBhcnNlQXN5bmMocGFyZ3MoKSk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzAxLlxuXG5pbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tIFwiZXZlbnRzXCI7XG5pbXBvcnQgeyBjcmVhdGVDb25uZWN0aW9uLCBjcmVhdGVTZXJ2ZXIsIHR5cGUgU29ja2V0IH0gZnJvbSBcIm5ldFwiO1xuXG5jb25zdCBIRUFERVJfU0laRSA9IDg7XG5cbmV4cG9ydCBjb25zdCBlbnVtIElwY01zZ1R5cGUge1xuICBQUk9HUkVTUyA9IDEsXG4gIERPTkUgPSAyLFxuICBFUlJPUiA9IDMsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSXBjRG9uZVBheWxvYWQge1xuICB3cml0dGVuOiBudW1iZXI7XG4gIGphbms6IG51bWJlcjtcbiAgb3V0RmlsZTogc3RyaW5nO1xufVxuXG5leHBvcnQgY2xhc3MgSXBjV3JpdGVyIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBfc29ja2V0OiBTb2NrZXQpIHt9XG5cbiAgd3JpdGVQcm9ncmVzcyh2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy53cml0ZShJcGNNc2dUeXBlLlBST0dSRVNTLCBCdWZmZXIuZnJvbShgJHt2YWx1ZX1gKSk7XG4gIH1cblxuICB3cml0ZUVycm9yKGVycm9yOiBzdHJpbmcpIHtcbiAgICB0aGlzLndyaXRlKElwY01zZ1R5cGUuRVJST1IsIEJ1ZmZlci5mcm9tKGVycm9yKSk7XG4gICAgdGhpcy5fc29ja2V0LmVuZCgpO1xuICB9XG5cbiAgd3JpdGVEb25lKHBheWxvYWQ6IElwY0RvbmVQYXlsb2FkKTogdm9pZCB7XG4gICAgdGhpcy53cml0ZShJcGNNc2dUeXBlLkRPTkUsIEJ1ZmZlci5mcm9tKEpTT04uc3RyaW5naWZ5KHBheWxvYWQpKSk7XG4gICAgdGhpcy5fc29ja2V0LmVuZCgpO1xuICB9XG5cbiAgcHJpdmF0ZSB3cml0ZSh0eXBlOiBJcGNNc2dUeXBlLCBwYXlsb2FkOiBCdWZmZXIpOiB2b2lkIHtcbiAgICBjb25zdCBoZWFkZXIgPSBCdWZmZXIuYWxsb2MoSEVBREVSX1NJWkUpO1xuICAgIGhlYWRlci53cml0ZVVJbnQzMkxFKHR5cGUsIDApO1xuICAgIGhlYWRlci53cml0ZVVJbnQzMkxFKHBheWxvYWQuYnl0ZUxlbmd0aCwgNCk7XG4gICAgdGhpcy5fc29ja2V0LndyaXRlKGhlYWRlcik7XG4gICAgdGhpcy5fc29ja2V0LndyaXRlKHBheWxvYWQpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25uZWN0SXBjKHNvY2tldFBhdGg6IHN0cmluZyk6IFByb21pc2U8SXBjV3JpdGVyPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3Qgc29ja2V0ID0gY3JlYXRlQ29ubmVjdGlvbihzb2NrZXRQYXRoKTtcbiAgICBzb2NrZXQub25jZShcImNvbm5lY3RcIiwgKCkgPT4gcmVzb2x2ZShuZXcgSXBjV3JpdGVyKHNvY2tldCkpKTtcbiAgICBzb2NrZXQub25jZShcImVycm9yXCIsIHJlamVjdCk7XG4gIH0pO1xufVxuXG5leHBvcnQgY2xhc3MgSXBjUmVhZGVyIGV4dGVuZHMgRXZlbnRFbWl0dGVyPHtcbiAgcHJvZ3Jlc3M6IFt2YWx1ZTogbnVtYmVyXTtcbiAgbWVzc2FnZTogW3R5cGU6IElwY01zZ1R5cGUsIGJ1ZmZlcjogQnVmZmVyXTtcbiAgZG9uZTogW3BheWxvYWQ6IElwY0RvbmVQYXlsb2FkXTtcbiAgZXJyb3I6IFtlcnJvcjogRXJyb3JdO1xuICBjbG9zZTogW107XG59PiB7XG4gIHByaXZhdGUgX2NodW5rczogQnVmZmVyW10gPSBbXTtcbiAgcHJpdmF0ZSBfYnVmZmVyZWQgPSAwO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgX3NvY2tldDogU29ja2V0KSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLl9zb2NrZXQub24oXCJkYXRhXCIsIChkYXRhKSA9PiB0aGlzLm9uRGF0YShkYXRhKSk7XG4gICAgdGhpcy5fc29ja2V0Lm9uKFwiZXJyb3JcIiwgKGVycikgPT4gdGhpcy5lbWl0KFwiZXJyb3JcIiwgZXJyKSk7XG4gICAgdGhpcy5fc29ja2V0Lm9uKFwiY2xvc2VcIiwgKCkgPT4gdGhpcy5lbWl0KFwiY2xvc2VcIikpO1xuICB9XG5cbiAgcHJpdmF0ZSBvbkRhdGEoZGF0YTogQnVmZmVyKTogdm9pZCB7XG4gICAgdGhpcy5fY2h1bmtzLnB1c2goZGF0YSk7XG4gICAgdGhpcy5fYnVmZmVyZWQgKz0gZGF0YS5ieXRlTGVuZ3RoO1xuICAgIHRoaXMuZmx1c2goKTtcbiAgfVxuXG4gIHByaXZhdGUgZmx1c2goKTogdm9pZCB7XG4gICAgZm9yICg7Oykge1xuICAgICAgaWYgKHRoaXMuX2J1ZmZlcmVkIDwgSEVBREVSX1NJWkUpIHJldHVybjtcbiAgICAgIGNvbnN0IGhlYWRlciA9IHRoaXMucGVlayhIRUFERVJfU0laRSk7XG4gICAgICBjb25zdCB0eXBlID0gaGVhZGVyLnJlYWRVSW50MzJMRSgwKSBhcyBJcGNNc2dUeXBlO1xuICAgICAgY29uc3QgbGVuID0gaGVhZGVyLnJlYWRVSW50MzJMRSg0KTtcbiAgICAgIGlmICh0aGlzLl9idWZmZXJlZCA8IEhFQURFUl9TSVpFICsgbGVuKSByZXR1cm47XG4gICAgICB0aGlzLmNvbnN1bWUoSEVBREVSX1NJWkUpO1xuICAgICAgY29uc3QgcGF5bG9hZCA9IHRoaXMuY29uc3VtZShsZW4pO1xuICAgICAgdGhpcy5lbWl0KFwibWVzc2FnZVwiLCB0eXBlLCBwYXlsb2FkKTtcbiAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICBjYXNlIElwY01zZ1R5cGUuUFJPR1JFU1M6IHtcbiAgICAgICAgICB0aGlzLmVtaXQoXCJwcm9ncmVzc1wiLCBOdW1iZXIocGF5bG9hZC50b1N0cmluZygpKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBJcGNNc2dUeXBlLkRPTkU6IHtcbiAgICAgICAgICB0aGlzLmVtaXQoXCJkb25lXCIsIEpTT04ucGFyc2UocGF5bG9hZC50b1N0cmluZygpKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBJcGNNc2dUeXBlLkVSUk9SOiB7XG4gICAgICAgICAgdGhpcy5lbWl0KFwiZXJyb3JcIiwgbmV3IEVycm9yKHBheWxvYWQudG9TdHJpbmcoKSkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBwZWVrKG46IG51bWJlcik6IEJ1ZmZlciB7XG4gICAgaWYgKHRoaXMuX2NodW5rc1swXSAmJiB0aGlzLl9jaHVua3NbMF0uYnl0ZUxlbmd0aCA+PSBuKSByZXR1cm4gdGhpcy5fY2h1bmtzWzBdO1xuICAgIHJldHVybiBCdWZmZXIuY29uY2F0KHRoaXMuX2NodW5rcykuc3ViYXJyYXkoMCwgbik7XG4gIH1cblxuICBwcml2YXRlIGNvbnN1bWUobjogbnVtYmVyKTogQnVmZmVyIHtcbiAgICBjb25zdCBvdXQgPSBCdWZmZXIuYWxsb2NVbnNhZmUobik7XG4gICAgbGV0IG9mZnNldCA9IDA7XG4gICAgd2hpbGUgKG9mZnNldCA8IG4pIHtcbiAgICAgIGNvbnN0IGNodW5rID0gdGhpcy5fY2h1bmtzWzBdITtcbiAgICAgIGNvbnN0IHRha2UgPSBNYXRoLm1pbihjaHVuay5ieXRlTGVuZ3RoLCBuIC0gb2Zmc2V0KTtcbiAgICAgIGNodW5rLmNvcHkob3V0LCBvZmZzZXQsIDAsIHRha2UpO1xuICAgICAgaWYgKHRha2UgPT09IGNodW5rLmJ5dGVMZW5ndGgpIHtcbiAgICAgICAgdGhpcy5fY2h1bmtzLnNoaWZ0KCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9jaHVua3NbMF0gPSBjaHVuay5zdWJhcnJheSh0YWtlKTtcbiAgICAgIH1cbiAgICAgIG9mZnNldCArPSB0YWtlO1xuICAgIH1cbiAgICB0aGlzLl9idWZmZXJlZCAtPSBuO1xuICAgIHJldHVybiBvdXQ7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJcGNTZXJ2ZXIge1xuICB3YWl0Rm9yQ29ubmVjdGlvbigpOiBQcm9taXNlPElwY1JlYWRlcj47XG4gIGNsb3NlKCk6IHZvaWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVJcGNTZXJ2ZXIoc29ja2V0UGF0aDogc3RyaW5nKTogUHJvbWlzZTxJcGNTZXJ2ZXI+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCBzZXJ2ZXIgPSBjcmVhdGVTZXJ2ZXIoKTtcbiAgICBzZXJ2ZXIub25jZShcImVycm9yXCIsIHJlamVjdCk7XG4gICAgc2VydmVyLmxpc3Rlbihzb2NrZXRQYXRoLCAoKSA9PiB7XG4gICAgICByZXNvbHZlKHtcbiAgICAgICAgd2FpdEZvckNvbm5lY3Rpb24oKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPElwY1JlYWRlcj4oKG9rLCBubykgPT4ge1xuICAgICAgICAgICAgc2VydmVyLm9uY2UoXCJjb25uZWN0aW9uXCIsIChzb2NrZXQpID0+IG9rKG5ldyBJcGNSZWFkZXIoc29ja2V0KSkpO1xuICAgICAgICAgICAgc2VydmVyLm9uY2UoXCJlcnJvclwiLCBubyk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIGNsb3NlKCkge1xuICAgICAgICAgIHNlcnZlci5jbG9zZSgpO1xuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wOS5cblxuaW1wb3J0IHR5cGUgeyBEZWJ1Z2dlciwgU2l6ZSB9IGZyb20gXCJlbGVjdHJvblwiO1xuXG5leHBvcnQgY29uc3QgRlJBTUVfU1lOQ19NQVJLRVJfV0lEVEggPSAzMjtcbmV4cG9ydCBjb25zdCBGUkFNRV9TWU5DX01BUktFUl9IRUlHSFQgPSAxO1xuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRTdGVnb0hUTUwodGFyZ2V0VVJMOiBzdHJpbmcsIHNpemU6IFNpemUpOiBzdHJpbmcge1xuICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IHNpemU7XG4gIHJldHVybiBgPCFET0NUWVBFIGh0bWw+XG48aHRtbD5cbjxoZWFkPlxuICA8bWV0YSBjaGFyc2V0PVwiVVRGLThcIj5cbiAgPHN0eWxlPlxuICAgICogeyBtYXJnaW46IDA7IHBhZGRpbmc6IDA7IGJveC1zaXppbmc6IGJvcmRlci1ib3g7IH1cbiAgICBodG1sLCBib2R5IHsgd2lkdGg6ICR7d2lkdGh9cHg7IGhlaWdodDogJHtoZWlnaHQgKyAxfXB4OyBvdmVyZmxvdzogaGlkZGVuOyB9XG4gICAgI3RhcmdldCB7IFxuICAgICAgcG9zaXRpb246IGFic29sdXRlOyBcbiAgICAgIHRvcDogMDsgXG4gICAgICBsZWZ0OiAwOyBcbiAgICAgIHdpZHRoOiAke3dpZHRofXB4OyBcbiAgICAgIGhlaWdodDogJHtoZWlnaHR9cHg7IFxuICAgICAgYm9yZGVyOiBub25lOyBcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIH1cbiAgICAjc3RlZ28geyBcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsgXG4gICAgICB0b3A6ICR7aGVpZ2h0fXB4OyBcbiAgICAgIGxlZnQ6IDA7IFxuICAgICAgd2lkdGg6ICR7d2lkdGh9cHg7IFxuICAgICAgaGVpZ2h0OiAxcHg7IFxuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICBpbWFnZS1yZW5kZXJpbmc6IHBpeGVsYXRlZDtcbiAgICB9XG4gIDwvc3R5bGU+XG48L2hlYWQ+XG48Ym9keT5cbiAgPGlmcmFtZSBpZD1cInRhcmdldFwiIHNyYz1cIiR7dGFyZ2V0VVJMfVwiPjwvaWZyYW1lPlxuICA8Y2FudmFzIGlkPVwic3RlZ29cIiB3aWR0aD1cIiR7d2lkdGh9XCIgaGVpZ2h0PVwiMVwiPjwvY2FudmFzPlxuICA8c2NyaXB0PlxuICAgIChmdW5jdGlvbigpIHtcbiAgICAgIGNvbnN0IFdJRFRIID0gJHt3aWR0aH07XG4gICAgICBjb25zdCBNQVJLRVJfV0lEVEggPSAke0ZSQU1FX1NZTkNfTUFSS0VSX1dJRFRIfTtcbiAgICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdGVnbycpO1xuICAgICAgY29uc3QgY3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJywgeyB3aWxsUmVhZEZyZXF1ZW50bHk6IHRydWUgfSk7XG4gICAgICBsZXQgc3RhcnRUaW1lID0gbnVsbDtcbiAgICAgIGxldCByYWZJZCA9IG51bGw7XG5cbiAgICAgIGZ1bmN0aW9uIGVuY29kZVRpbWVzdGFtcCh0aW1lc3RhbXBNcykge1xuICAgICAgICBjb25zdCBpbWFnZURhdGEgPSBjdHguY3JlYXRlSW1hZ2VEYXRhKFdJRFRILCAxKTtcbiAgICAgICAgY29uc3QgZGF0YSA9IGltYWdlRGF0YS5kYXRhO1xuICAgICAgICBcbiAgICAgICAgY29uc3QgdGltZXN0YW1wSW50ID0gTWF0aC5mbG9vcih0aW1lc3RhbXBNcykgPj4+IDA7XG4gICAgICAgIFxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IE1BUktFUl9XSURUSDsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgYml0ID0gKHRpbWVzdGFtcEludCA+Pj4gKE1BUktFUl9XSURUSCAtIDEgLSBpKSkgJiAxO1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gYml0ID8gMjU1IDogMDtcbiAgICAgICAgICBjb25zdCBpZHggPSBpICogNDtcbiAgICAgICAgICBkYXRhW2lkeF0gPSB2YWx1ZTtcbiAgICAgICAgICBkYXRhW2lkeCArIDFdID0gdmFsdWU7XG4gICAgICAgICAgZGF0YVtpZHggKyAyXSA9IHZhbHVlO1xuICAgICAgICAgIGRhdGFbaWR4ICsgM10gPSAyNTU7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGZvciAobGV0IGkgPSBNQVJLRVJfV0lEVEg7IGkgPCBXSURUSDsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgaWR4ID0gaSAqIDQ7XG4gICAgICAgICAgZGF0YVtpZHhdID0gMDtcbiAgICAgICAgICBkYXRhW2lkeCArIDFdID0gMDtcbiAgICAgICAgICBkYXRhW2lkeCArIDJdID0gMDtcbiAgICAgICAgICBkYXRhW2lkeCArIDNdID0gMjU1O1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBjdHgucHV0SW1hZ2VEYXRhKGltYWdlRGF0YSwgMCwgMCk7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIHVwZGF0ZUxvb3AoKSB7XG4gICAgICAgIGlmIChzdGFydFRpbWUgPT09IG51bGwpIHJldHVybjtcbiAgICAgICAgY29uc3QgZWxhcHNlZCA9IHBlcmZvcm1hbmNlLm5vdygpIC0gc3RhcnRUaW1lO1xuICAgICAgICBlbmNvZGVUaW1lc3RhbXAoZWxhcHNlZCk7XG4gICAgICAgIHJhZklkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHVwZGF0ZUxvb3ApO1xuICAgICAgfVxuXG4gICAgICB3aW5kb3cuX19wdXBfc3RhcnRfc3RlZ29fXyA9ICgpID0+IHtcbiAgICAgICAgc3RhcnRUaW1lID0gcGVyZm9ybWFuY2Uubm93KCk7XG4gICAgICAgIGVuY29kZVRpbWVzdGFtcCgwKTtcbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHVwZGF0ZUxvb3ApO1xuICAgICAgfTtcblxuICAgICAgd2luZG93Ll9fcHVwX3N0b3Bfc3RlZ29fXyA9ICgpID0+IHtcbiAgICAgICAgaWYgKHJhZklkICE9PSBudWxsKSB7XG4gICAgICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUocmFmSWQpO1xuICAgICAgICAgIHJhZklkID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9KSgpO1xuICA8L3NjcmlwdD5cbjwvYm9keT5cbjwvaHRtbD5gO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVjb2RlU3RlZ28oYml0bWFwOiBCdWZmZXIsIHNpemU6IFNpemUpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IHNpemU7XG4gIGlmICh3aWR0aCA8IEZSQU1FX1NZTkNfTUFSS0VSX1dJRFRIIHx8IGhlaWdodCA8IDIpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgbWFya2VyUm93ID0gaGVpZ2h0IC0gMTtcblxuICBsZXQgdGltZXN0YW1wID0gMDtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBGUkFNRV9TWU5DX01BUktFUl9XSURUSDsgaSsrKSB7XG4gICAgY29uc3QgcGl4ZWxJZHggPSAobWFya2VyUm93ICogd2lkdGggKyBpKSAqIDQ7XG4gICAgY29uc3QgciA9IGJpdG1hcFtwaXhlbElkeF0gPz8gMDtcbiAgICBjb25zdCBiaXQgPSByID4gMTI3ID8gMSA6IDA7XG4gICAgdGltZXN0YW1wID0gKHRpbWVzdGFtcCA8PCAxKSB8IGJpdDtcbiAgfVxuXG4gIHRpbWVzdGFtcCA9IHRpbWVzdGFtcCA+Pj4gMDtcblxuICBpZiAoIU51bWJlci5pc0Zpbml0ZSh0aW1lc3RhbXApIHx8IHRpbWVzdGFtcCA8IDAgfHwgdGltZXN0YW1wID4gMWU3KSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHJldHVybiB0aW1lc3RhbXA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGFydFN0ZWdvKGNkcDogRGVidWdnZXIpIHtcbiAgcmV0dXJuIGNkcC5zZW5kQ29tbWFuZChcIlJ1bnRpbWUuZXZhbHVhdGVcIiwge1xuICAgIGV4cHJlc3Npb246IGB3aW5kb3cuX19wdXBfc3RhcnRfc3RlZ29fXygpYCxcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdG9wU3RlZ28oY2RwOiBEZWJ1Z2dlcikge1xuICByZXR1cm4gY2RwLnNlbmRDb21tYW5kKFwiUnVudGltZS5ldmFsdWF0ZVwiLCB7XG4gICAgZXhwcmVzc2lvbjogYHdpbmRvdy5fX3B1cF9zdG9wX3N0ZWdvX18oKWAsXG4gIH0pO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8wMS5cblxuaW1wb3J0IHR5cGUgeyBTaXplIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBwcm90b2NvbCB9IGZyb20gXCJlbGVjdHJvblwiO1xuaW1wb3J0IHsgYnVpbGRTdGVnb0hUTUwgfSBmcm9tIFwiLi9zdGVnb1wiO1xuXG5jb25zdCBQVVBfU0NIRU1FID0gXCJwdXBcIjtcblxuLy8gTXVzdCBiZSBjYWxsZWQgc3luY2hyb25vdXNseSBiZWZvcmUgYXBwIGlzIHJlYWR5LlxucHJvdG9jb2wucmVnaXN0ZXJTY2hlbWVzQXNQcml2aWxlZ2VkKFtcbiAge1xuICAgIHNjaGVtZTogUFVQX1NDSEVNRSxcbiAgICBwcml2aWxlZ2VzOiB7XG4gICAgICBzdGFuZGFyZDogdHJ1ZSxcbiAgICAgIHNlY3VyZTogdHJ1ZSxcbiAgICAgIGJ5cGFzc0NTUDogdHJ1ZSxcbiAgICAgIGFsbG93U2VydmljZVdvcmtlcnM6IHRydWUsXG4gICAgICBzdXBwb3J0RmV0Y2hBUEk6IHRydWUsXG4gICAgICBjb3JzRW5hYmxlZDogdHJ1ZSxcbiAgICAgIHN0cmVhbTogdHJ1ZSxcbiAgICAgIGNvZGVDYWNoZTogdHJ1ZSxcbiAgICB9LFxuICB9LFxuXSk7XG5cbi8vIE11c3QgYmUgY2FsbGVkIGFmdGVyIGFwcCBpcyByZWFkeS5cbmV4cG9ydCBmdW5jdGlvbiBzZXR1cFB1cFByb3RvY29sKCk6IHZvaWQge1xuICBwcm90b2NvbC5oYW5kbGUoUFVQX1NDSEVNRSwgKHJlcSkgPT4ge1xuICAgIGNvbnN0IHVybCA9IG5ldyBVUkwocmVxLnVybCk7XG4gICAgY29uc3Qgc3JjID0gdXJsLnNlYXJjaFBhcmFtcy5nZXQoXCJzcmNcIikgPz8gXCJcIjtcbiAgICBjb25zdCB3aWR0aCA9IHBhcnNlSW50KHVybC5zZWFyY2hQYXJhbXMuZ2V0KFwid1wiKSA/PyBcIjBcIiwgMTApO1xuICAgIGNvbnN0IGhlaWdodCA9IHBhcnNlSW50KHVybC5zZWFyY2hQYXJhbXMuZ2V0KFwiaFwiKSA/PyBcIjBcIiwgMTApO1xuICAgIGNvbnN0IGh0bWwgPSBidWlsZFN0ZWdvSFRNTChzcmMsIHsgd2lkdGgsIGhlaWdodCB9KTtcbiAgICByZXR1cm4gbmV3IFJlc3BvbnNlKGh0bWwsIHsgaGVhZGVyczogeyBcImNvbnRlbnQtdHlwZVwiOiBcInRleHQvaHRtbFwiIH0gfSk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU3RlZ29VUkwoc3JjOiBzdHJpbmcsIHNpemU6IFNpemUpOiBzdHJpbmcge1xuICBjb25zdCB1cmwgPSBuZXcgVVJMKGAke1BVUF9TQ0hFTUV9Oi8vc3RlZ29gKTtcbiAgdXJsLnNlYXJjaFBhcmFtcy5zZXQoXCJzcmNcIiwgc3JjKTtcbiAgdXJsLnNlYXJjaFBhcmFtcy5zZXQoXCJ3XCIsIFN0cmluZyhzaXplLndpZHRoKSk7XG4gIHVybC5zZWFyY2hQYXJhbXMuc2V0KFwiaFwiLCBTdHJpbmcoc2l6ZS5oZWlnaHQpKTtcbiAgcmV0dXJuIHVybC50b1N0cmluZygpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMS8zMC5cblxuaW50ZXJmYWNlIFF1ZXVlRW50cnkge1xuICBydW46IFZvaWRGdW5jdGlvbjtcbiAgcmVqZWN0OiAocmVhc29uOiB1bmtub3duKSA9PiB2b2lkO1xuICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbn1cblxuZXhwb3J0IGNsYXNzIENvbmN1cnJlbmN5TGltaXRlciB7XG4gIHByaXZhdGUgX2FjdGl2ZSA9IDA7XG4gIHByaXZhdGUgX3F1ZXVlOiBRdWV1ZUVudHJ5W10gPSBbXTtcbiAgcHJpdmF0ZSBfc2lnbmFscyA9IG5ldyBXZWFrU2V0PEFib3J0U2lnbmFsPigpO1xuICBwcml2YXRlIF9yZXNvbHZlPzogVm9pZEZ1bmN0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKHJlYWRvbmx5IG1heENvbmN1cnJlbmN5OiBudW1iZXIpIHt9XG5cbiAgZ2V0IGFjdGl2ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9hY3RpdmU7XG4gIH1cblxuICBnZXQgcGVuZGluZygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9xdWV1ZS5sZW5ndGg7XG4gIH1cblxuICBnZXQgc3RhdHMoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYGFjdGl2ZTogJHt0aGlzLmFjdGl2ZX0sIHBlbmRpbmc6ICR7dGhpcy5wZW5kaW5nfWA7XG4gIH1cblxuICBhc3luYyBzY2hlZHVsZTxUPihmbjogKCkgPT4gUHJvbWlzZTxUPiwgc2lnbmFsPzogQWJvcnRTaWduYWwpOiBQcm9taXNlPFQ+IHtcbiAgICBzaWduYWw/LnRocm93SWZBYm9ydGVkKCk7XG5cbiAgICBpZiAoc2lnbmFsICYmICF0aGlzLl9zaWduYWxzLmhhcyhzaWduYWwpKSB7XG4gICAgICB0aGlzLl9zaWduYWxzLmFkZChzaWduYWwpO1xuICAgICAgc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCAoKSA9PiB0aGlzLmZsdXNoKHNpZ25hbCksIHsgb25jZTogdHJ1ZSB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2U8VD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpcy5fcXVldWUucHVzaCh7XG4gICAgICAgIHJ1bjogKCkgPT4ge1xuICAgICAgICAgIGlmIChzaWduYWw/LmFib3J0ZWQpIHtcbiAgICAgICAgICAgIHJlamVjdChzaWduYWwucmVhc29uKTtcbiAgICAgICAgICAgIHRoaXMubmV4dCgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLl9hY3RpdmUrKztcbiAgICAgICAgICBmbigpXG4gICAgICAgICAgICAudGhlbigodikgPT4ge1xuICAgICAgICAgICAgICB0aGlzLl9hY3RpdmUtLTtcbiAgICAgICAgICAgICAgcmVzb2x2ZSh2KTtcbiAgICAgICAgICAgICAgdGhpcy5uZXh0KCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuX2FjdGl2ZS0tO1xuICAgICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgICAgIHRoaXMubmV4dCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIHJlamVjdCxcbiAgICAgICAgc2lnbmFsLFxuICAgICAgfSk7XG4gICAgICB0aGlzLm5leHQoKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGRyYWluKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9hY3RpdmUgPT09IDAgJiYgdGhpcy5wZW5kaW5nID09PSAwKSByZXR1cm47XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyKSA9PiAodGhpcy5fcmVzb2x2ZSA9IHIpKTtcbiAgfVxuXG4gIHByaXZhdGUgZmx1c2goc2lnbmFsOiBBYm9ydFNpZ25hbCkge1xuICAgIGNvbnN0IGtlZXA6IFF1ZXVlRW50cnlbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgZW50cnkgb2YgdGhpcy5fcXVldWUpIHtcbiAgICAgIGlmIChlbnRyeS5zaWduYWwgPT09IHNpZ25hbCkge1xuICAgICAgICBlbnRyeS5yZWplY3Qoc2lnbmFsLnJlYXNvbik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBrZWVwLnB1c2goZW50cnkpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLl9xdWV1ZSA9IGtlZXA7XG4gICAgdGhpcy5uZXh0KCk7XG4gIH1cblxuICBwcml2YXRlIG5leHQoKSB7XG4gICAgaWYgKHRoaXMuX2FjdGl2ZSA9PT0gMCAmJiB0aGlzLnBlbmRpbmcgPT09IDApIHtcbiAgICAgIHRoaXMuX3Jlc29sdmU/LigpO1xuICAgICAgdGhpcy5fcmVzb2x2ZSA9IHVuZGVmaW5lZDtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuX2FjdGl2ZSA8IHRoaXMubWF4Q29uY3VycmVuY3kpIHtcbiAgICAgIHRoaXMuX3F1ZXVlLnNoaWZ0KCk/LnJ1bigpO1xuICAgIH1cbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8xMi5cblxuaW1wb3J0IHsgQ29kZWNDb250ZXh0LCBGRm1wZWdFcnJvciwgRnJhbWUsIFBhY2tldCwgdHlwZSBTdHJlYW0gfSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHsgQVZFUlJPUl9FQUdBSU4sIEFWRVJST1JfRU9GLCB0eXBlIEFWUGl4ZWxGb3JtYXQgfSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcbmltcG9ydCB0eXBlIHsgRm9ybWF0TXV4ZXIgfSBmcm9tIFwiLi9tdXhlclwiO1xuXG5leHBvcnQgZnVuY3Rpb24gbWFrZUZyYW1lKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyLCBwaXhGbXQ6IEFWUGl4ZWxGb3JtYXQpOiBGcmFtZSB7XG4gIGNvbnN0IGZyYW1lID0gbmV3IEZyYW1lKCk7XG4gIGZyYW1lLmFsbG9jKCk7XG4gIGZyYW1lLmZvcm1hdCA9IHBpeEZtdDtcbiAgZnJhbWUud2lkdGggPSB3aWR0aDtcbiAgZnJhbWUuaGVpZ2h0ID0gaGVpZ2h0O1xuICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoZnJhbWUuZ2V0QnVmZmVyKDApLCBcImZyYW1lLmdldEJ1ZmZlclwiKTtcbiAgcmV0dXJuIGZyYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWFrZVBhY2tldCgpOiBQYWNrZXQge1xuICBjb25zdCBwa3QgPSBuZXcgUGFja2V0KCk7XG4gIHBrdC5hbGxvYygpO1xuICByZXR1cm4gcGt0O1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZHJhaW5QYWNrZXRzKGN0eDogQ29kZWNDb250ZXh0LCBwa3Q6IFBhY2tldCwgc3RyZWFtOiBTdHJlYW0sIG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICB3aGlsZSAodHJ1ZSkge1xuICAgIGNvbnN0IHIgPSBhd2FpdCBjdHgucmVjZWl2ZVBhY2tldChwa3QpO1xuICAgIGlmIChyID09PSBBVkVSUk9SX0VBR0FJTiB8fCByID09PSBBVkVSUk9SX0VPRikgYnJlYWs7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKHIsIFwicmVjZWl2ZVBhY2tldFwiKTtcbiAgICBwa3Quc3RyZWFtSW5kZXggPSBzdHJlYW0uaW5kZXg7XG4gICAgaWYgKHBrdC5kdXJhdGlvbiA9PT0gMG4pIHBrdC5kdXJhdGlvbiA9IDFuO1xuICAgIHBrdC5yZXNjYWxlVHMoY3R4LnRpbWVCYXNlLCBzdHJlYW0udGltZUJhc2UpO1xuICAgIGF3YWl0IG11eGVyLndyaXRlUGFja2V0KHBrdCk7XG4gICAgcGt0LnVucmVmKCk7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMDEuXG5cbmltcG9ydCB7XG4gIENvZGVjLFxuICBDb2RlY0NvbnRleHQsXG4gIEZGbXBlZ0Vycm9yLFxuICBGaWx0ZXIsXG4gIEZpbHRlckNvbnRleHQsXG4gIEZpbHRlckdyYXBoLFxuICBGaWx0ZXJJbk91dCxcbiAgRnJhbWUsXG4gIHR5cGUgUGFja2V0LFxuICBSYXRpb25hbCxcbiAgdHlwZSBTdHJlYW0sXG59IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQge1xuICBBVl9DSEFOTkVMX0xBWU9VVF9TVEVSRU8sXG4gIEFWX0NPREVDX0ZMQUdfR0xPQkFMX0hFQURFUixcbiAgQVZfU0FNUExFX0ZNVF9GTFQsXG4gIEFWX1NBTVBMRV9GTVRfRkxUUCxcbiAgQVZFUlJPUl9FQUdBSU4sXG4gIEFWRVJST1JfRU9GLFxuICB0eXBlIEZGQXVkaW9FbmNvZGVyLFxufSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcbmltcG9ydCB0eXBlIHsgRm9ybWF0TXV4ZXIgfSBmcm9tIFwiLi9tdXhlclwiO1xuaW1wb3J0IHsgZHJhaW5QYWNrZXRzLCBtYWtlUGFja2V0IH0gZnJvbSBcIi4vc2hhcmVkXCI7XG5cbmNvbnN0IFNBTVBMRV9GTVRfTkFNRTogUGFydGlhbDxSZWNvcmQ8bnVtYmVyLCBzdHJpbmc+PiA9IHsgW0FWX1NBTVBMRV9GTVRfRkxUXTogXCJmbHRcIiwgW0FWX1NBTVBMRV9GTVRfRkxUUF06IFwiZmx0cFwiIH07XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXVkaW9FbmNvZGVyT3B0aW9ucyB7XG4gIG91dFNhbXBsZVJhdGU6IG51bWJlcjtcbiAgb3V0U2FtcGxlRm10OiB0eXBlb2YgQVZfU0FNUExFX0ZNVF9GTFQgfCB0eXBlb2YgQVZfU0FNUExFX0ZNVF9GTFRQO1xuICBjb2RlY05hbWU6IEZGQXVkaW9FbmNvZGVyO1xuICBnbG9iYWxIZWFkZXI6IGJvb2xlYW47XG4gIGJpdHJhdGU6IG51bWJlcjtcbiAgbXV4ZXI6IEZvcm1hdE11eGVyO1xufVxuXG5leHBvcnQgY2xhc3MgQXVkaW9FbmNvZGVyIGltcGxlbWVudHMgRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgX2N0eDogQ29kZWNDb250ZXh0O1xuICBwcml2YXRlIF9zdHJlYW06IFN0cmVhbTtcbiAgcHJpdmF0ZSBfcGt0OiBQYWNrZXQ7XG4gIHByaXZhdGUgX291dFJhdGU6IG51bWJlcjtcbiAgcHJpdmF0ZSBfb3V0Rm10OiB0eXBlb2YgQVZfU0FNUExFX0ZNVF9GTFQgfCB0eXBlb2YgQVZfU0FNUExFX0ZNVF9GTFRQO1xuICBwcml2YXRlIF9mcmFtZVNpemU6IG51bWJlcjtcbiAgcHJpdmF0ZSBfZmlsdGVyRnJhbWU6IEZyYW1lO1xuICBwcml2YXRlIF9ncmFwaD86IEZpbHRlckdyYXBoO1xuICBwcml2YXRlIF9idWZTcmM/OiBGaWx0ZXJDb250ZXh0O1xuICBwcml2YXRlIF9idWZTaW5rPzogRmlsdGVyQ29udGV4dDtcbiAgcHJpdmF0ZSBfaW5SYXRlPzogbnVtYmVyO1xuICBwcml2YXRlIF9wdHMgPSAwbjtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKGN0eDogQ29kZWNDb250ZXh0LCBzdHJlYW06IFN0cmVhbSwgb3V0Rm10OiB0eXBlb2YgQVZfU0FNUExFX0ZNVF9GTFQgfCB0eXBlb2YgQVZfU0FNUExFX0ZNVF9GTFRQKSB7XG4gICAgdGhpcy5fY3R4ID0gY3R4O1xuICAgIHRoaXMuX3N0cmVhbSA9IHN0cmVhbTtcbiAgICB0aGlzLl9vdXRSYXRlID0gY3R4LnNhbXBsZVJhdGU7XG4gICAgdGhpcy5fb3V0Rm10ID0gb3V0Rm10O1xuICAgIHRoaXMuX2ZyYW1lU2l6ZSA9IGN0eC5mcmFtZVNpemU7XG4gICAgdGhpcy5fcGt0ID0gbWFrZVBhY2tldCgpO1xuICAgIHRoaXMuX2ZpbHRlckZyYW1lID0gbmV3IEZyYW1lKCk7XG4gICAgdGhpcy5fZmlsdGVyRnJhbWUuYWxsb2MoKTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBjcmVhdGUob3B0czogQXVkaW9FbmNvZGVyT3B0aW9ucyk6IFByb21pc2U8QXVkaW9FbmNvZGVyPiB7XG4gICAgY29uc3QgY29kZWMgPSBDb2RlYy5maW5kRW5jb2RlckJ5TmFtZShvcHRzLmNvZGVjTmFtZSk7XG4gICAgaWYgKCFjb2RlYykgdGhyb3cgbmV3IEVycm9yKGBBdWRpbyBlbmNvZGVyIG5vdCBmb3VuZDogJHtvcHRzLmNvZGVjTmFtZX1gKTtcbiAgICBjb25zdCBjdHggPSBuZXcgQ29kZWNDb250ZXh0KCk7XG4gICAgY3R4LmFsbG9jQ29udGV4dDMoY29kZWMpO1xuICAgIGN0eC5jb2RlY0lkID0gY29kZWMuaWQ7XG4gICAgY3R4LnNhbXBsZUZvcm1hdCA9IG9wdHMub3V0U2FtcGxlRm10O1xuICAgIGN0eC5zYW1wbGVSYXRlID0gb3B0cy5vdXRTYW1wbGVSYXRlO1xuICAgIGN0eC5jaGFubmVsTGF5b3V0ID0gQVZfQ0hBTk5FTF9MQVlPVVRfU1RFUkVPO1xuICAgIGN0eC50aW1lQmFzZSA9IG5ldyBSYXRpb25hbCgxLCBvcHRzLm91dFNhbXBsZVJhdGUpO1xuICAgIGN0eC5iaXRSYXRlID0gQmlnSW50KG9wdHMuYml0cmF0ZSk7XG4gICAgaWYgKG9wdHMuZ2xvYmFsSGVhZGVyKSBjdHguc2V0RmxhZ3MoQVZfQ09ERUNfRkxBR19HTE9CQUxfSEVBREVSKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgY3R4Lm9wZW4yKGNvZGVjLCBudWxsKSwgXCJhdWRpb0N0eC5vcGVuMlwiKTtcbiAgICBjb25zdCBzdHJlYW0gPSBvcHRzLm11eGVyLmFkZFN0cmVhbShjdHgpO1xuICAgIHJldHVybiBuZXcgQXVkaW9FbmNvZGVyKGN0eCwgc3RyZWFtLCBvcHRzLm91dFNhbXBsZUZtdCk7XG4gIH1cblxuICBzZXRJbnB1dFJhdGUoaW5TYW1wbGVSYXRlOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9ncmFwaD8uW1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgIHRoaXMuX2luUmF0ZSA9IGluU2FtcGxlUmF0ZTtcbiAgICBjb25zdCBncmFwaCA9IG5ldyBGaWx0ZXJHcmFwaCgpO1xuICAgIGdyYXBoLmFsbG9jKCk7XG4gICAgY29uc3QgYWJ1ZmZlciA9IEZpbHRlci5nZXRCeU5hbWUoXCJhYnVmZmVyXCIpITtcbiAgICBjb25zdCBidWZTcmMgPSBncmFwaC5jcmVhdGVGaWx0ZXIoXG4gICAgICBhYnVmZmVyLFxuICAgICAgXCJzcmNcIixcbiAgICAgIGBzYW1wbGVfcmF0ZT0ke2luU2FtcGxlUmF0ZX06c2FtcGxlX2ZtdD1mbHQ6Y2hhbm5lbF9sYXlvdXQ9c3RlcmVvOnRpbWVfYmFzZT0xLyR7aW5TYW1wbGVSYXRlfWAsXG4gICAgKTtcbiAgICBpZiAoIWJ1ZlNyYykgdGhyb3cgbmV3IEVycm9yKFwiRmFpbGVkIHRvIGNyZWF0ZSBhYnVmZmVyXCIpO1xuICAgIGNvbnN0IGFidWZmZXJzaW5rID0gRmlsdGVyLmdldEJ5TmFtZShcImFidWZmZXJzaW5rXCIpITtcbiAgICBjb25zdCBidWZTaW5rID0gZ3JhcGguY3JlYXRlRmlsdGVyKGFidWZmZXJzaW5rLCBcInNpbmtcIik7XG4gICAgaWYgKCFidWZTaW5rKSB0aHJvdyBuZXcgRXJyb3IoXCJGYWlsZWQgdG8gY3JlYXRlIGFidWZmZXJzaW5rXCIpO1xuICAgIGNvbnN0IGZtdE5hbWUgPSBTQU1QTEVfRk1UX05BTUVbdGhpcy5fb3V0Rm10XSA/PyBcImZsdFwiO1xuICAgIGNvbnN0IGZpbHRlckRlc2MgPSBgYWZvcm1hdD1zYW1wbGVfZm10cz0ke2ZtdE5hbWV9OnNhbXBsZV9yYXRlcz0ke3RoaXMuX291dFJhdGV9OmNoYW5uZWxfbGF5b3V0cz1zdGVyZW8sYXNldG5zYW1wbGVzPW49JHt0aGlzLl9mcmFtZVNpemV9OnA9MWA7XG4gICAgY29uc3Qgb3V0cHV0cyA9IEZpbHRlckluT3V0LmNyZWF0ZUxpc3QoW3sgbmFtZTogXCJpblwiLCBmaWx0ZXJDdHg6IGJ1ZlNyYywgcGFkSWR4OiAwIH1dKTtcbiAgICBjb25zdCBpbnB1dHMgPSBGaWx0ZXJJbk91dC5jcmVhdGVMaXN0KFt7IG5hbWU6IFwib3V0XCIsIGZpbHRlckN0eDogYnVmU2luaywgcGFkSWR4OiAwIH1dKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoZ3JhcGgucGFyc2VQdHIoZmlsdGVyRGVzYywgaW5wdXRzLCBvdXRwdXRzKSwgXCJncmFwaC5wYXJzZVB0clwiKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoZ3JhcGguY29uZmlnU3luYygpLCBcImdyYXBoLmNvbmZpZ1wiKTtcbiAgICB0aGlzLl9ncmFwaCA9IGdyYXBoO1xuICAgIHRoaXMuX2J1ZlNyYyA9IGJ1ZlNyYztcbiAgICB0aGlzLl9idWZTaW5rID0gYnVmU2luaztcbiAgfVxuXG4gIGFzeW5jIGVuY29kZShwY206IEJ1ZmZlciwgbXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLl9idWZTcmMgfHwgIXRoaXMuX2luUmF0ZSkgcmV0dXJuO1xuICAgIGNvbnN0IHNyYyA9IG5ldyBGbG9hdDMyQXJyYXkocGNtLmJ1ZmZlciwgcGNtLmJ5dGVPZmZzZXQsIHBjbS5ieXRlTGVuZ3RoIC8gNCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzcmMubGVuZ3RoOyBpKyspIGlmICghaXNGaW5pdGUoc3JjW2ldISkpIHNyY1tpXSA9IDA7XG4gICAgY29uc3QgblNhbXBsZXMgPSBzcmMubGVuZ3RoID4+IDE7XG4gICAgdXNpbmcgZnJhbWUgPSBGcmFtZS5mcm9tQXVkaW9CdWZmZXIoQnVmZmVyLmZyb20oc3JjLmJ1ZmZlciwgc3JjLmJ5dGVPZmZzZXQsIHNyYy5ieXRlTGVuZ3RoKSwge1xuICAgICAgbmJTYW1wbGVzOiBuU2FtcGxlcyxcbiAgICAgIGZvcm1hdDogQVZfU0FNUExFX0ZNVF9GTFQsXG4gICAgICBzYW1wbGVSYXRlOiB0aGlzLl9pblJhdGUsXG4gICAgICBjaGFubmVsTGF5b3V0OiBBVl9DSEFOTkVMX0xBWU9VVF9TVEVSRU8sXG4gICAgICBwdHM6IHRoaXMuX3B0cyxcbiAgICAgIHRpbWVCYXNlOiB7IG51bTogMSwgZGVuOiB0aGlzLl9pblJhdGUgfSxcbiAgICB9KTtcbiAgICB0aGlzLl9wdHMgKz0gQmlnSW50KG5TYW1wbGVzKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgdGhpcy5fYnVmU3JjLmJ1ZmZlcnNyY0FkZEZyYW1lKGZyYW1lKSwgXCJidWZmZXJzcmNBZGRGcmFtZVwiKTtcbiAgICBhd2FpdCB0aGlzLmRyYWluKG11eGVyKTtcbiAgfVxuXG4gIGFzeW5jIGZsdXNoKG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9idWZTcmMpIHtcbiAgICAgIGF3YWl0IHRoaXMuX2J1ZlNyYy5idWZmZXJzcmNBZGRGcmFtZShudWxsKTtcbiAgICAgIGF3YWl0IHRoaXMuZHJhaW4obXV4ZXIpO1xuICAgIH1cbiAgICBhd2FpdCB0aGlzLl9jdHguc2VuZEZyYW1lKG51bGwpO1xuICAgIGF3YWl0IHRoaXMuZHJhaW5Db2RlYyhtdXhlcik7XG4gIH1cblxuICBbU3ltYm9sLmRpc3Bvc2VdKCk6IHZvaWQge1xuICAgIHRoaXMuX3BrdC5mcmVlKCk7XG4gICAgdGhpcy5fZmlsdGVyRnJhbWUuZnJlZSgpO1xuICAgIHRoaXMuX2dyYXBoPy5bU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgdGhpcy5fY3R4LmZyZWVDb250ZXh0KCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGRyYWluKG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBjb25zdCByID0gYXdhaXQgdGhpcy5fYnVmU2luayEuYnVmZmVyc2lua0dldEZyYW1lKHRoaXMuX2ZpbHRlckZyYW1lKTtcbiAgICAgIGlmIChyID09PSBBVkVSUk9SX0VBR0FJTiB8fCByID09PSBBVkVSUk9SX0VPRikgYnJlYWs7XG4gICAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IociwgXCJidWZmZXJzaW5rR2V0RnJhbWVcIik7XG4gICAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgdGhpcy5fY3R4LnNlbmRGcmFtZSh0aGlzLl9maWx0ZXJGcmFtZSksIFwiYXVkaW9DdHguc2VuZEZyYW1lXCIpO1xuICAgICAgdGhpcy5fZmlsdGVyRnJhbWUudW5yZWYoKTtcbiAgICAgIGF3YWl0IHRoaXMuZHJhaW5Db2RlYyhtdXhlcik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBkcmFpbkNvZGVjKG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBkcmFpblBhY2tldHModGhpcy5fY3R4LCB0aGlzLl9wa3QsIHRoaXMuX3N0cmVhbSwgbXV4ZXIpO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzAzLlxuXG5pbXBvcnQgeyBvayB9IGZyb20gXCJhc3NlcnRcIjtcbmltcG9ydCB7XG4gIEFWX1BJWF9GTVRfQkdSQSxcbiAgQVZfUElYX0ZNVF9ZVVZBNDIwUCxcbiAgQ29kZWMsXG4gIENvZGVjQ29udGV4dCxcbiAgRkZfREVDT0RFUl9QTkcsXG4gIEZGbXBlZ0Vycm9yLFxuICB0eXBlIEZyYW1lLFxuICBQYWNrZXQsXG4gIFNvZnR3YXJlU2NhbGVDb250ZXh0LFxuICBTV1NfQklMSU5FQVIsXG4gIHR5cGUgQVZQaXhlbEZvcm1hdCxcbn0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB7IG1ha2VGcmFtZSwgbWFrZVBhY2tldCB9IGZyb20gXCIuL3NoYXJlZFwiO1xuXG5leHBvcnQgY2xhc3MgQ29kZWNTdGF0ZSBpbXBsZW1lbnRzIERpc3Bvc2FibGUge1xuICByZWFkb25seSBzcmM6IEZyYW1lO1xuICByZWFkb25seSBkc3Q6IEZyYW1lO1xuICByZWFkb25seSBwa3Q6IFBhY2tldDtcbiAgcHJpdmF0ZSBfc3dzPzogU29mdHdhcmVTY2FsZUNvbnRleHQ7XG4gIHByaXZhdGUgX3BuZz86IENvZGVjO1xuXG4gIHN0YXRpYyBhc3luYyBjcmVhdGUod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpIHtcbiAgICBjb25zdCBjb2RlYyA9IENvZGVjLmZpbmREZWNvZGVyQnlOYW1lKEZGX0RFQ09ERVJfUE5HKTtcbiAgICBvayhjb2RlYywgXCJwbmcgZGVjb2RlciB1bmF2YWlsYWJsZVwiKTtcbiAgICByZXR1cm4gbmV3IENvZGVjU3RhdGUod2lkdGgsIGhlaWdodCwgY29kZWMpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcih3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlciwgcG5nOiBDb2RlYykge1xuICAgIHRoaXMuX3BuZyA9IHBuZztcbiAgICB0aGlzLnNyYyA9IG1ha2VGcmFtZSh3aWR0aCwgaGVpZ2h0LCBBVl9QSVhfRk1UX0JHUkEpO1xuICAgIHRoaXMuZHN0ID0gbWFrZUZyYW1lKHdpZHRoLCBoZWlnaHQsIEFWX1BJWF9GTVRfWVVWQTQyMFApO1xuICAgIHRoaXMucGt0ID0gbWFrZVBhY2tldCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIGZyZXNoIFBORyBkZWNvZGVyIGNvbnRleHQuXG4gICAqIFRoZSBGRm1wZWcgUE5HIGRlY29kZXIgYWNjdW11bGF0ZXMgQVBORyBibGVuZGluZyBzdGF0ZVxuICAgKiBhY3Jvc3MgZnJhbWVzLCBzbyBhIHNoYXJlZCBpbnN0YW5jZSBjb3JydXB0cyBvdXRwdXQgd2hlbiBkZWNvZGluZyBzdGFuZGFsb25lIFBOR3MuXG4gICAqL1xuICBhc3luYyBwbmcoKTogUHJvbWlzZTxDb2RlY0NvbnRleHQ+IHtcbiAgICBjb25zdCBwbmcgPSBuZXcgQ29kZWNDb250ZXh0KCk7XG4gICAgcG5nLmFsbG9jQ29udGV4dDModGhpcy5fcG5nKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgcG5nLm9wZW4yKHRoaXMuX3BuZyksIFwicG5nRGVjb2Rlci5vcGVuMlwiKTtcbiAgICByZXR1cm4gcG5nO1xuICB9XG5cbiAgYXN5bmMgZGVjb2RlUE5HKHBuZ0RhdGE6IEJ1ZmZlcik6IFByb21pc2U8RnJhbWU+IHtcbiAgICB1c2luZyBwbmcgPSBhd2FpdCB0aGlzLnBuZygpO1xuICAgIHRoaXMucGt0LmRhdGEgPSBwbmdEYXRhO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCBwbmcuc2VuZFBhY2tldCh0aGlzLnBrdCksIFwicG5nRGVjb2Rlci5zZW5kUGFja2V0XCIpO1xuICAgIHRoaXMucGt0LnVucmVmKCk7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IHBuZy5yZWNlaXZlRnJhbWUodGhpcy5zcmMpLCBcInBuZ0RlY29kZXIucmVjZWl2ZUZyYW1lXCIpO1xuICAgIHJldHVybiB0aGlzLnNyYztcbiAgfVxuXG4gIGdldCBzd3MoKSB7XG4gICAgaWYgKCF0aGlzLl9zd3MpIHtcbiAgICAgIGNvbnN0IHN3cyA9IG5ldyBTb2Z0d2FyZVNjYWxlQ29udGV4dCgpO1xuICAgICAgY29uc3QgZm10ID0gdGhpcy5zcmMuZm9ybWF0IGFzIEFWUGl4ZWxGb3JtYXQ7XG4gICAgICBzd3MuZ2V0Q29udGV4dChcbiAgICAgICAgdGhpcy5zcmMud2lkdGgsXG4gICAgICAgIHRoaXMuc3JjLmhlaWdodCxcbiAgICAgICAgZm10LFxuICAgICAgICB0aGlzLnNyYy53aWR0aCxcbiAgICAgICAgdGhpcy5zcmMuaGVpZ2h0LFxuICAgICAgICBBVl9QSVhfRk1UX1lVVkE0MjBQLFxuICAgICAgICBTV1NfQklMSU5FQVIsXG4gICAgICApO1xuICAgICAgdGhpcy5fc3dzID0gc3dzO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fc3dzO1xuICB9XG5cbiAgW1N5bWJvbC5kaXNwb3NlXSgpOiB2b2lkIHtcbiAgICB0aGlzLnNyY1tTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICB0aGlzLmRzdFtTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICB0aGlzLnBrdFtTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICB0aGlzLl9zd3M/LltTeW1ib2wuZGlzcG9zZV0oKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8xMi5cblxuY29uc3QgTkFMX0hFQURFUl9TSVpFID0gMjtcbmNvbnN0IEFOTkVYX0JfU1RBUlRfQ09ERSA9IEJ1ZmZlci5mcm9tKFsweDAwLCAweDAwLCAweDAwLCAweDAxXSk7XG5cbmV4cG9ydCB7IEFOTkVYX0JfU1RBUlRfQ09ERSwgTkFMX0hFQURFUl9TSVpFIH07XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmFsVW5pdCB7XG4gIHR5cGU6IG51bWJlcjtcbiAgbGF5ZXJJZDogbnVtYmVyO1xuICBkYXRhOiBCdWZmZXI7XG59XG5cbmZ1bmN0aW9uIHBhcnNlTmFsVHlwZShoZWFkZXIwOiBudW1iZXIsIGhlYWRlcjE6IG51bWJlcik6IHsgdHlwZTogbnVtYmVyOyBsYXllcklkOiBudW1iZXI7IHRlbXBvcmFsSWQ6IG51bWJlciB9IHtcbiAgY29uc3QgdHlwZSA9IChoZWFkZXIwID4+IDEpICYgMHgzZjtcbiAgY29uc3QgbGF5ZXJJZCA9ICgoaGVhZGVyMCAmIDEpIDw8IDUpIHwgKChoZWFkZXIxID4+IDMpICYgMHgxZik7XG4gIGNvbnN0IHRlbXBvcmFsSWQgPSBoZWFkZXIxICYgMHgwNztcbiAgcmV0dXJuIHsgdHlwZSwgbGF5ZXJJZCwgdGVtcG9yYWxJZCB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5jb2RlTmFsSGVhZGVyKHR5cGU6IG51bWJlciwgbGF5ZXJJZDogbnVtYmVyLCB0ZW1wb3JhbElkOiBudW1iZXIpOiBbbnVtYmVyLCBudW1iZXJdIHtcbiAgY29uc3QgYnl0ZTAgPSAoKHR5cGUgJiAweDNmKSA8PCAxKSB8ICgobGF5ZXJJZCA+PiA1KSAmIDEpO1xuICBjb25zdCBieXRlMSA9ICgobGF5ZXJJZCAmIDB4MWYpIDw8IDMpIHwgKHRlbXBvcmFsSWQgJiAweDA3KTtcbiAgcmV0dXJuIFtieXRlMCwgYnl0ZTFdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFja0JpdHMoYml0czogbnVtYmVyW10pOiBCdWZmZXIge1xuICBjb25zdCBidWYgPSBCdWZmZXIuYWxsb2MoYml0cy5sZW5ndGggPj4gMyk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYnVmLmxlbmd0aDsgaSsrKSB7XG4gICAgbGV0IGJ5dGUgPSAwO1xuICAgIGZvciAobGV0IGIgPSAwOyBiIDwgODsgYisrKSBieXRlID0gKGJ5dGUgPDwgMSkgfCBiaXRzW2kgKiA4ICsgYl0hO1xuICAgIGJ1ZltpXSA9IGJ5dGU7XG4gIH1cbiAgcmV0dXJuIGJ1Zjtcbn1cblxuLyoqIFNwbGl0IEFubmV4IEIgYml0c3RyZWFtIGludG8gTkFMIHVuaXRzLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNwbGl0TmFsVW5pdHMoYml0c3RyZWFtOiBCdWZmZXIpOiBOYWxVbml0W10ge1xuICBjb25zdCBuYWxzOiBOYWxVbml0W10gPSBbXTtcbiAgbGV0IGkgPSAwO1xuXG4gIHdoaWxlIChpIDwgYml0c3RyZWFtLmxlbmd0aCkge1xuICAgIGxldCBzY0xlbiA9IDA7XG4gICAgaWYgKGkgKyAzIDwgYml0c3RyZWFtLmxlbmd0aCAmJiBiaXRzdHJlYW1baV0gPT09IDAgJiYgYml0c3RyZWFtW2kgKyAxXSA9PT0gMCAmJiBiaXRzdHJlYW1baSArIDJdID09PSAxKSB7XG4gICAgICBzY0xlbiA9IDM7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIGkgKyA0IDwgYml0c3RyZWFtLmxlbmd0aCAmJlxuICAgICAgYml0c3RyZWFtW2ldID09PSAwICYmXG4gICAgICBiaXRzdHJlYW1baSArIDFdID09PSAwICYmXG4gICAgICBiaXRzdHJlYW1baSArIDJdID09PSAwICYmXG4gICAgICBiaXRzdHJlYW1baSArIDNdID09PSAxXG4gICAgKSB7XG4gICAgICBzY0xlbiA9IDQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGkrKztcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IG5hbFN0YXJ0ID0gaSArIHNjTGVuO1xuICAgIGlmIChuYWxTdGFydCArIE5BTF9IRUFERVJfU0laRSA+IGJpdHN0cmVhbS5sZW5ndGgpIGJyZWFrO1xuXG4gICAgbGV0IG5hbEVuZCA9IGJpdHN0cmVhbS5sZW5ndGg7XG4gICAgZm9yIChsZXQgaiA9IG5hbFN0YXJ0ICsgTkFMX0hFQURFUl9TSVpFOyBqIDwgYml0c3RyZWFtLmxlbmd0aCAtIDI7IGorKykge1xuICAgICAgaWYgKFxuICAgICAgICBiaXRzdHJlYW1bal0gPT09IDAgJiZcbiAgICAgICAgYml0c3RyZWFtW2ogKyAxXSA9PT0gMCAmJlxuICAgICAgICAoYml0c3RyZWFtW2ogKyAyXSA9PT0gMSB8fCAoaiArIDMgPCBiaXRzdHJlYW0ubGVuZ3RoICYmIGJpdHN0cmVhbVtqICsgMl0gPT09IDAgJiYgYml0c3RyZWFtW2ogKyAzXSA9PT0gMSkpXG4gICAgICApIHtcbiAgICAgICAgbmFsRW5kID0gajtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgeyB0eXBlLCBsYXllcklkIH0gPSBwYXJzZU5hbFR5cGUoYml0c3RyZWFtW25hbFN0YXJ0XSEsIGJpdHN0cmVhbVtuYWxTdGFydCArIDFdISk7XG4gICAgbmFscy5wdXNoKHsgdHlwZSwgbGF5ZXJJZCwgZGF0YTogYml0c3RyZWFtLnN1YmFycmF5KG5hbFN0YXJ0LCBuYWxFbmQpIH0pO1xuICAgIGkgPSBuYWxFbmQ7XG4gIH1cblxuICByZXR1cm4gbmFscztcbn1cblxuLyoqIFJld3JpdGUgbnVoX2xheWVyX2lkIGluIGEgTkFMIHVuaXQgKHJldHVybnMgY29weSkuICovXG5leHBvcnQgZnVuY3Rpb24gcmV3cml0ZU5hbExheWVySWQobmFsOiBCdWZmZXIsIGxheWVySWQ6IG51bWJlcik6IEJ1ZmZlciB7XG4gIGNvbnN0IG91dCA9IEJ1ZmZlci5mcm9tKG5hbCk7XG4gIGNvbnN0IHsgdHlwZSwgdGVtcG9yYWxJZCB9ID0gcGFyc2VOYWxUeXBlKG91dFswXSEsIG91dFsxXSEpO1xuICBjb25zdCBbYjAsIGIxXSA9IGVuY29kZU5hbEhlYWRlcih0eXBlLCBsYXllcklkLCB0ZW1wb3JhbElkKTtcbiAgb3V0WzBdID0gYjA7XG4gIG91dFsxXSA9IGIxO1xuICByZXR1cm4gb3V0O1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8xMi5cblxuaW1wb3J0IHtcbiAgQU5ORVhfQl9TVEFSVF9DT0RFLFxuICBlbmNvZGVOYWxIZWFkZXIsXG4gIE5BTF9IRUFERVJfU0laRSxcbiAgdHlwZSBOYWxVbml0LFxuICBwYWNrQml0cyxcbiAgcmV3cml0ZU5hbExheWVySWQsXG4gIHNwbGl0TmFsVW5pdHMsXG59IGZyb20gXCIuL25hbFwiO1xuXG5jb25zdCBOQUxfVU5JVF9QUkVGSVhfU0VJID0gMzk7XG5cbi8qKlxuICogQnVpbGQgdW5pZmllZCBleHRyYWRhdGE6IGJhc2UgVlBTIChwYXRjaGVkIGZvciBhbHBoYSkgKyBpbnRlcmxlYXZlZCBTUFMvUFBTLlxuICogQWxwaGEgU1BTL1BQUyBmb2xsb3cgdGhlaXIgYmFzZSBjb3VudGVycGFydHMgc28gdGhlIEhWQ0Mgc2VyaWFsaXplclxuICogZ3JvdXBzIHRoZW0gaW50byB0aGUgc2FtZSBOQUwgYXJyYXkgKHJlcXVpcmVkIGZvciBtdWx0aS1sYXllcikuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFVuaWZpZWRFeHRyYWRhdGEoYmFzZUV4dHJhZGF0YTogQnVmZmVyLCBhbHBoYUV4dHJhZGF0YTogQnVmZmVyKTogQnVmZmVyIHtcbiAgY29uc3QgYmFzZU5hbHMgPSBzcGxpdE5hbFVuaXRzKGJhc2VFeHRyYWRhdGEpO1xuICBjb25zdCBhbHBoYU5hbHMgPSBzcGxpdE5hbFVuaXRzKGFscGhhRXh0cmFkYXRhKTtcblxuICBjb25zdCBhbHBoYUJ5VHlwZSA9IG5ldyBNYXA8bnVtYmVyLCBOYWxVbml0W10+KCk7XG4gIGZvciAoY29uc3QgbmFsIG9mIGFscGhhTmFscykge1xuICAgIGlmIChuYWwudHlwZSA9PT0gMzIpIGNvbnRpbnVlOyAvLyBWUFMgaXMgcGVyLWJpdHN0cmVhbSwgbm90IHBlci1sYXllclxuICAgIGNvbnN0IGFyciA9IGFscGhhQnlUeXBlLmdldChuYWwudHlwZSkgPz8gW107XG4gICAgYXJyLnB1c2gobmFsKTtcbiAgICBhbHBoYUJ5VHlwZS5zZXQobmFsLnR5cGUsIGFycik7XG4gIH1cblxuICBjb25zdCBjaHVua3M6IEJ1ZmZlcltdID0gW107XG4gIGNvbnN0IGVtaXR0ZWQgPSBuZXcgU2V0PG51bWJlcj4oKTtcbiAgZm9yIChjb25zdCBuYWwgb2YgYmFzZU5hbHMpIHtcbiAgICAvLyBWUFMgbmVlZHMgYWxwaGEgbGF5ZXIgZGVjbGFyYXRpb24gZm9yIEZGbXBlZydzIEhWQ0Mgc2VyaWFsaXplclxuICAgIGNvbnN0IGRhdGEgPSBuYWwudHlwZSA9PT0gMzIgPyBwYXRjaFZQU0ZvckFscGhhKG5hbC5kYXRhKSA6IG5hbC5kYXRhO1xuICAgIGNodW5rcy5wdXNoKEFOTkVYX0JfU1RBUlRfQ09ERSwgZGF0YSk7XG4gICAgaWYgKCFlbWl0dGVkLmhhcyhuYWwudHlwZSkpIHtcbiAgICAgIGVtaXR0ZWQuYWRkKG5hbC50eXBlKTtcbiAgICAgIGZvciAoY29uc3QgYWxwaGFOYWwgb2YgYWxwaGFCeVR5cGUuZ2V0KG5hbC50eXBlKSA/PyBbXSkge1xuICAgICAgICBjaHVua3MucHVzaChBTk5FWF9CX1NUQVJUX0NPREUsIHJld3JpdGVOYWxMYXllcklkKGFscGhhTmFsLmRhdGEsIDEpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBTRUkgbXVzdCBiZSBpbiBleHRyYWRhdGEgZm9yIEFwcGxlJ3MgZGVjb2RlciB0byBkaXNjb3ZlciBhbHBoYSBjaGFubmVsXG4gIGNodW5rcy5wdXNoKGJ1aWxkQWxwaGFDaGFubmVsSW5mb1NFSSgpKTtcblxuICByZXR1cm4gQnVmZmVyLmNvbmNhdChjaHVua3MpO1xufVxuXG4vKipcbiAqIFBhdGNoIGEgc2luZ2xlLWxheWVyIFZQUyB0byBkZWNsYXJlIDIgbGF5ZXJzIHdpdGggbGF5ZXIgMSA9IEFVWF9BTFBIQS5cbiAqIEZGbXBlZyA4LjAncyBodmNjX3BhcnNlX3Zwc19leHRlbnNpb24gcmVhZHMgdGhpcyB0byBzZXQgYWxwaGFfbGF5ZXJfbnVoX2lkLFxuICogd2hpY2ggYWxsb3dzIGxheWVyX2lkPTEgTkFMcyB0byBzdXJ2aXZlIEFubmV4IEIg4oaSIEhWQ0MgY29udmVyc2lvbi5cbiAqL1xuZnVuY3Rpb24gcGF0Y2hWUFNGb3JBbHBoYSh2cHNEYXRhOiBCdWZmZXIpOiBCdWZmZXIge1xuICBjb25zdCByYnNwID0gdnBzRGF0YS5zdWJhcnJheShOQUxfSEVBREVSX1NJWkUpO1xuXG4gIGxldCBiaXRQb3MgPSAwO1xuICBjb25zdCByZWFkQml0cyA9IChuOiBudW1iZXIpOiBudW1iZXIgPT4ge1xuICAgIGxldCB2YWwgPSAwO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbjsgaSsrKSB7XG4gICAgICBjb25zdCBieXRlSWR4ID0gKGJpdFBvcyArIGkpID4+IDM7XG4gICAgICBjb25zdCBiaXRJZHggPSA3IC0gKChiaXRQb3MgKyBpKSAmIDcpO1xuICAgICAgdmFsID0gKHZhbCA8PCAxKSB8ICgocmJzcFtieXRlSWR4XSEgPj4gYml0SWR4KSAmIDEpO1xuICAgIH1cbiAgICBiaXRQb3MgKz0gbjtcbiAgICByZXR1cm4gdmFsO1xuICB9O1xuXG4gIHJlYWRCaXRzKDQpOyAvLyB2cHNfdmlkZW9fcGFyYW1ldGVyX3NldF9pZFxuICBjb25zdCB2cHNCYXNlTGF5ZXJJbnRlcm5hbEZsYWcgPSByZWFkQml0cygxKTtcbiAgcmVhZEJpdHMoMSk7IC8vIHZwc19iYXNlX2xheWVyX2F2YWlsYWJsZV9mbGFnXG4gIGNvbnN0IG1heExheWVyc1BvcyA9IGJpdFBvcztcbiAgY29uc3QgbWF4TGF5ZXJzTWludXMxID0gcmVhZEJpdHMoNik7XG5cbiAgaWYgKG1heExheWVyc01pbnVzMSA+IDApIHJldHVybiB2cHNEYXRhO1xuXG4gIGNvbnN0IGJpdHM6IG51bWJlcltdID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdnBzRGF0YS5sZW5ndGg7IGkrKykge1xuICAgIGZvciAobGV0IGIgPSA3OyBiID49IDA7IGItLSkgYml0cy5wdXNoKCh2cHNEYXRhW2ldISA+PiBiKSAmIDEpO1xuICB9XG5cbiAgY29uc3QgbWxPZmZzZXQgPSBtYXhMYXllcnNQb3MgKyBOQUxfSEVBREVSX1NJWkUgKiA4O1xuICBmb3IgKGxldCBpID0gMDsgaSA8IDY7IGkrKykgYml0c1ttbE9mZnNldCArIGldID0gMDtcbiAgYml0c1ttbE9mZnNldCArIDVdID0gMTsgLy8gdnBzX21heF9sYXllcnNfbWludXMxID0gMVxuXG4gIGxldCBsYXN0Qml0ID0gYml0cy5sZW5ndGggLSAxO1xuICB3aGlsZSAobGFzdEJpdCA+IDAgJiYgYml0c1tsYXN0Qml0XSA9PT0gMCkgbGFzdEJpdC0tO1xuICBpZiAobGFzdEJpdCA8PSAxKSB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIFZQUzogbm8gUkJTUCBzdG9wIGJpdFwiKTtcbiAgYml0c1tsYXN0Qml0IC0gMV0gPSAxOyAvLyB2cHNfZXh0ZW5zaW9uX2ZsYWcgPSAxXG4gIGJpdHMubGVuZ3RoID0gbGFzdEJpdDtcblxuICB3aGlsZSAoYml0cy5sZW5ndGggJSA4ICE9PSAwKSBiaXRzLnB1c2goMSk7IC8vIGJ5dGUtYWxpZ25cblxuICAvLyBNaW5pbWFsIFZQUyBleHRlbnNpb24gZm9yIEZGbXBlZydzIGh2Y2NfcGFyc2VfdnBzX2V4dGVuc2lvblxuICBpZiAodnBzQmFzZUxheWVySW50ZXJuYWxGbGFnKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCA4OyBpKyspIGJpdHMucHVzaCgwKTsgLy8gZ2VuZXJhbF9sZXZlbF9pZGNcbiAgfVxuICBiaXRzLnB1c2goMCk7IC8vIHNwbGl0dGluZ19mbGFnXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgMTY7IGkrKykgYml0cy5wdXNoKGkgPT09IDMgPyAxIDogMCk7IC8vIHNjYWxhYmlsaXR5X21hc2s6IEF1eElkXG4gIGJpdHMucHVzaCgwLCAwLCAwKTsgLy8gZGltZW5zaW9uX2lkX2xlbl9taW51czEgPSAwXG4gIGJpdHMucHVzaCgwKTsgLy8gdnBzX251aF9sYXllcl9pZF9wcmVzZW50X2ZsYWdcbiAgYml0cy5wdXNoKDEpOyAvLyBkaW1lbnNpb25faWRbMV1bMF0gPSBBVVhfQUxQSEFcblxuICBiaXRzLnB1c2goMSk7XG4gIHdoaWxlIChiaXRzLmxlbmd0aCAlIDggIT09IDApIGJpdHMucHVzaCgwKTtcblxuICByZXR1cm4gcGFja0JpdHMoYml0cyk7XG59XG5cbi8qKlxuICogQnVpbGQgYWxwaGFfY2hhbm5lbF9pbmZvIFNFSSBtZXNzYWdlIChwYXlsb2FkVHlwZT0xNjUpLlxuICogTGF5b3V0IGZyb20geDI2NSBTRUlBbHBoYUNoYW5uZWxJbmZvOjp3cml0ZVNFSS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkQWxwaGFDaGFubmVsSW5mb1NFSSgpOiBCdWZmZXIge1xuICBjb25zdCBwYXlsb2FkVHlwZSA9IDE2NTtcbiAgY29uc3QgcGF5bG9hZFNpemUgPSA0O1xuICBjb25zdCBbaDAsIGgxXSA9IGVuY29kZU5hbEhlYWRlcihOQUxfVU5JVF9QUkVGSVhfU0VJLCAwLCAxKTtcblxuICBjb25zdCBiaXRzOiBudW1iZXJbXSA9IFtdO1xuICBjb25zdCB3cml0ZUJpdHMgPSAodmFsOiBudW1iZXIsIG46IG51bWJlcikgPT4ge1xuICAgIGZvciAobGV0IGkgPSBuIC0gMTsgaSA+PSAwOyBpLS0pIGJpdHMucHVzaCgodmFsID4+IGkpICYgMSk7XG4gIH07XG5cbiAgd3JpdGVCaXRzKDAsIDEpOyAvLyBhbHBoYV9jaGFubmVsX2NhbmNlbF9mbGFnXG4gIHdyaXRlQml0cygwLCAzKTsgLy8gYWxwaGFfY2hhbm5lbF91c2VfaWRjIChzdHJhaWdodCBhbHBoYSlcbiAgd3JpdGVCaXRzKDAsIDMpOyAvLyBhbHBoYV9jaGFubmVsX2JpdF9kZXB0aF9taW51czhcbiAgd3JpdGVCaXRzKDAsIDkpOyAvLyBhbHBoYV90cmFuc3BhcmVudF92YWx1ZVxuICB3cml0ZUJpdHMoMjU1LCA5KTsgLy8gYWxwaGFfb3BhcXVlX3ZhbHVlXG4gIHdyaXRlQml0cygwLCAxKTsgLy8gYWxwaGFfY2hhbm5lbF9pbmNyX2ZsYWdcbiAgd3JpdGVCaXRzKDAsIDEpOyAvLyBhbHBoYV9jaGFubmVsX2NsaXBfZmxhZ1xuICB3cml0ZUJpdHMoMSwgMSk7IC8vIGJ5dGUgYWxpZ25tZW50XG4gIHdoaWxlIChiaXRzLmxlbmd0aCAlIDggIT09IDApIHdyaXRlQml0cygwLCAxKTtcblxuICByZXR1cm4gQnVmZmVyLmNvbmNhdChbXG4gICAgQU5ORVhfQl9TVEFSVF9DT0RFLFxuICAgIEJ1ZmZlci5mcm9tKFtoMCwgaDFdKSxcbiAgICBCdWZmZXIuZnJvbShbcGF5bG9hZFR5cGUsIHBheWxvYWRTaXplXSksXG4gICAgcGFja0JpdHMoYml0cyksXG4gICAgQnVmZmVyLmZyb20oWzB4ODBdKSxcbiAgXSk7XG59XG5cbi8qKiBJbnRlcmxlYXZlIGJhc2UgYW5kIGFscGhhIE5BTHMgZm9yIGEgc2luZ2xlIGZyYW1lLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGludGVybGVhdmVBY2Nlc3NVbml0cyhiYXNlTmFsczogTmFsVW5pdFtdLCBhbHBoYU5hbHM6IE5hbFVuaXRbXSk6IEJ1ZmZlciB7XG4gIGNvbnN0IGNodW5rczogQnVmZmVyW10gPSBbXTtcbiAgZm9yIChjb25zdCBuYWwgb2YgYmFzZU5hbHMpIHtcbiAgICBjaHVua3MucHVzaChBTk5FWF9CX1NUQVJUX0NPREUsIG5hbC5kYXRhKTtcbiAgfVxuICBmb3IgKGNvbnN0IG5hbCBvZiBhbHBoYU5hbHMpIHtcbiAgICBpZiAobmFsLnR5cGUgPCAzMikge1xuICAgICAgY2h1bmtzLnB1c2goQU5ORVhfQl9TVEFSVF9DT0RFLCByZXdyaXRlTmFsTGF5ZXJJZChuYWwuZGF0YSwgMSkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gQnVmZmVyLmNvbmNhdChjaHVua3MpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8xMi5cblxuaW1wb3J0IHtcbiAgQ29kZWMsXG4gIENvZGVjQ29udGV4dCxcbiAgRkZtcGVnRXJyb3IsXG4gIEZyYW1lLFxuICBIYXJkd2FyZUZyYW1lc0NvbnRleHQsXG4gIFJhdGlvbmFsLFxuICBTb2Z0d2FyZVNjYWxlQ29udGV4dCxcbiAgU1dTX0JJTElORUFSLFxuICB0eXBlIFBhY2tldCxcbiAgdHlwZSBTdHJlYW0sXG59IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQge1xuICBBVl9DT0RFQ19GTEFHX0dMT0JBTF9IRUFERVIsXG4gIEFWX1BJWF9GTVRfQkdSQSxcbiAgQVZfUElYX0ZNVF9DVURBLFxuICBBVl9QSVhfRk1UX1lVVjQyMFAsXG4gIEFWQ09MX1JBTkdFX0pQRUcsXG4gIEZGX0VOQ09ERVJfSEVWQ19OVkVOQyxcbn0gZnJvbSBcIm5vZGUtYXYvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBidWlsZEFscGhhQ2hhbm5lbEluZm9TRUksIGJ1aWxkVW5pZmllZEV4dHJhZGF0YSwgaW50ZXJsZWF2ZUFjY2Vzc1VuaXRzIH0gZnJvbSBcIi4vYWxwaGFcIjtcbmltcG9ydCB0eXBlIHsgRm9ybWF0TXV4ZXIgfSBmcm9tIFwiLi9tdXhlclwiO1xuaW1wb3J0IHsgc3BsaXROYWxVbml0cyB9IGZyb20gXCIuL25hbFwiO1xuaW1wb3J0IHsgbWFrZUZyYW1lLCBtYWtlUGFja2V0IH0gZnJvbSBcIi4vc2hhcmVkXCI7XG5pbXBvcnQgdHlwZSB7IEh3VmlkZW9FbmNvZGVyT3B0aW9ucyB9IGZyb20gXCIuL3ZpZGVvdG9vbGJveFwiO1xuXG5pbnRlcmZhY2UgTnZlbmNTdGF0ZSB7XG4gIGJhc2VDdHg6IENvZGVjQ29udGV4dDtcbiAgYWxwaGFDdHg6IENvZGVjQ29udGV4dDtcbiAgYmFzZVBrdDogUGFja2V0O1xuICBhbHBoYVBrdDogUGFja2V0O1xuICBzdHJlYW06IFN0cmVhbTtcbiAgYmFzZVN3czogU29mdHdhcmVTY2FsZUNvbnRleHQ7XG4gIHl1dkZyYW1lOiBGcmFtZTtcbiAgaHdGcmFtZXNDdHg6IEhhcmR3YXJlRnJhbWVzQ29udGV4dDtcbn1cblxuZXhwb3J0IGNsYXNzIE52ZW5jRHVhbExheWVyRW5jb2RlciBpbXBsZW1lbnRzIERpc3Bvc2FibGUge1xuICBwcml2YXRlIF9zOiBOdmVuY1N0YXRlO1xuICBwcml2YXRlIF9zZWlCdWZmZXI6IEJ1ZmZlcjtcbiAgcHJpdmF0ZSBfcHRzID0gMG47XG4gIHByaXZhdGUgX3NlaUluamVjdGVkID0gZmFsc2U7XG4gIHByaXZhdGUgX2FscGhhQnVmPzogQnVmZmVyO1xuICBwcml2YXRlIF9hbHBoYUZyYW1lPzogRnJhbWU7XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihzOiBOdmVuY1N0YXRlKSB7XG4gICAgdGhpcy5fcyA9IHM7XG4gICAgdGhpcy5fc2VpQnVmZmVyID0gYnVpbGRBbHBoYUNoYW5uZWxJbmZvU0VJKCk7XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgY3JlYXRlKG9wdHM6IEh3VmlkZW9FbmNvZGVyT3B0aW9ucyk6IFByb21pc2U8TnZlbmNEdWFsTGF5ZXJFbmNvZGVyPiB7XG4gICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0LCBmcHMsIGJpdHJhdGUsIGh3LCBtdXhlciB9ID0gb3B0cztcblxuICAgIGNvbnN0IGNvZGVjID0gQ29kZWMuZmluZEVuY29kZXJCeU5hbWUoRkZfRU5DT0RFUl9IRVZDX05WRU5DKTtcbiAgICBpZiAoIWNvZGVjKSB0aHJvdyBuZXcgRXJyb3IoXCJoZXZjX252ZW5jIGVuY29kZXIgbm90IGZvdW5kXCIpO1xuXG4gICAgY29uc3QgaHdGcmFtZXNDdHggPSBuZXcgSGFyZHdhcmVGcmFtZXNDb250ZXh0KCk7XG4gICAgaHdGcmFtZXNDdHguYWxsb2MoaHcuZGV2aWNlQ29udGV4dCk7XG4gICAgaHdGcmFtZXNDdHguZm9ybWF0ID0gQVZfUElYX0ZNVF9DVURBO1xuICAgIGh3RnJhbWVzQ3R4LnN3Rm9ybWF0ID0gQVZfUElYX0ZNVF9ZVVY0MjBQOyAvLyBOVkVOQyBvbmx5IGFjY2VwdHMgWVVWNDIwUC9OVjEyLCBub3QgQkdSQVxuICAgIGh3RnJhbWVzQ3R4LndpZHRoID0gd2lkdGg7XG4gICAgaHdGcmFtZXNDdHguaGVpZ2h0ID0gaGVpZ2h0O1xuICAgIGh3RnJhbWVzQ3R4LmluaXRpYWxQb29sU2l6ZSA9IDIwO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihod0ZyYW1lc0N0eC5pbml0KCksIFwiaHdGcmFtZXNDdHguaW5pdFwiKTtcblxuICAgIGNvbnN0IG1ha2VDdHggPSBhc3luYyAoY3R4T3B0czogeyBicjogbnVtYmVyOyBmdWxsUmFuZ2U/OiBib29sZWFuOyBjcXA/OiBudW1iZXIgfSkgPT4ge1xuICAgICAgY29uc3QgY3R4ID0gbmV3IENvZGVjQ29udGV4dCgpO1xuICAgICAgY3R4LmFsbG9jQ29udGV4dDMoY29kZWMpO1xuICAgICAgY3R4LmNvZGVjSWQgPSBjb2RlYy5pZDtcbiAgICAgIGN0eC53aWR0aCA9IHdpZHRoO1xuICAgICAgY3R4LmhlaWdodCA9IGhlaWdodDtcbiAgICAgIGN0eC5waXhlbEZvcm1hdCA9IEFWX1BJWF9GTVRfQ1VEQTtcbiAgICAgIGlmIChjdHhPcHRzLmZ1bGxSYW5nZSkgY3R4LmNvbG9yUmFuZ2UgPSBBVkNPTF9SQU5HRV9KUEVHO1xuICAgICAgY3R4LnRpbWVCYXNlID0gbmV3IFJhdGlvbmFsKDEsIGZwcyk7XG4gICAgICBjdHguZnJhbWVyYXRlID0gbmV3IFJhdGlvbmFsKGZwcywgMSk7XG4gICAgICBjdHguZ29wU2l6ZSA9IGZwcyAqIDI7XG4gICAgICBjdHguc2V0RmxhZ3MoQVZfQ09ERUNfRkxBR19HTE9CQUxfSEVBREVSKTtcbiAgICAgIGN0eC5zZXRPcHRpb24oXCJwcmVzZXRcIiwgXCJwNFwiKTtcbiAgICAgIGN0eC5zZXRPcHRpb24oXCJiZlwiLCBcIjBcIik7IC8vIG5vIEItZnJhbWVzIOKAlCBrZWVwIGJhc2UrYWxwaGEgcGFja2V0IG91dHB1dCBpbiBzeW5jXG4gICAgICBpZiAoY3R4T3B0cy5jcXAgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjdHguc2V0T3B0aW9uKFwicmNcIiwgXCJjb25zdHFwXCIpO1xuICAgICAgICBjdHguc2V0T3B0aW9uKFwicXBcIiwgU3RyaW5nKGN0eE9wdHMuY3FwKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjdHguYml0UmF0ZSA9IEJpZ0ludChjdHhPcHRzLmJyKTtcbiAgICAgIH1cbiAgICAgIGN0eC5od0ZyYW1lc0N0eCA9IGh3RnJhbWVzQ3R4O1xuICAgICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IGN0eC5vcGVuMihjb2RlYywgbnVsbCksIFwibnZlbmMub3BlbjJcIik7XG4gICAgICByZXR1cm4gY3R4O1xuICAgIH07XG5cbiAgICBjb25zdCBiYXNlQ3R4ID0gYXdhaXQgbWFrZUN0eCh7IGJyOiBiaXRyYXRlIH0pO1xuICAgIGNvbnN0IGFscGhhQ3R4ID0gYXdhaXQgbWFrZUN0eCh7IGJyOiBiaXRyYXRlLCBmdWxsUmFuZ2U6IHRydWUsIGNxcDogMSB9KTtcblxuICAgIGNvbnN0IGJhc2VQa3QgPSBtYWtlUGFja2V0KCk7XG4gICAgY29uc3QgYWxwaGFQa3QgPSBtYWtlUGFja2V0KCk7XG5cbiAgICBjb25zdCBzdHJlYW0gPSBtdXhlci5hZGRTdHJlYW0oYmFzZUN0eCwgXCJodmMxXCIpO1xuXG4gICAgY29uc3QgYmFzZUV4dHJhID0gYmFzZUN0eC5leHRyYURhdGE7XG4gICAgY29uc3QgYWxwaGFFeHRyYSA9IGFscGhhQ3R4LmV4dHJhRGF0YTtcbiAgICBpZiAoYmFzZUV4dHJhICYmIGFscGhhRXh0cmEpIHtcbiAgICAgIHN0cmVhbS5jb2RlY3Bhci5leHRyYWRhdGEgPSBidWlsZFVuaWZpZWRFeHRyYWRhdGEoYmFzZUV4dHJhLCBhbHBoYUV4dHJhKTtcbiAgICB9XG5cbiAgICBjb25zdCBiYXNlU3dzID0gbmV3IFNvZnR3YXJlU2NhbGVDb250ZXh0KCk7XG4gICAgYmFzZVN3cy5nZXRDb250ZXh0KHdpZHRoLCBoZWlnaHQsIEFWX1BJWF9GTVRfQkdSQSwgd2lkdGgsIGhlaWdodCwgQVZfUElYX0ZNVF9ZVVY0MjBQLCBTV1NfQklMSU5FQVIpO1xuICAgIHJldHVybiBuZXcgTnZlbmNEdWFsTGF5ZXJFbmNvZGVyKHtcbiAgICAgIGJhc2VDdHgsXG4gICAgICBhbHBoYUN0eCxcbiAgICAgIGJhc2VQa3QsXG4gICAgICBhbHBoYVBrdCxcbiAgICAgIHN0cmVhbSxcbiAgICAgIGJhc2VTd3MsXG4gICAgICB5dXZGcmFtZTogbWFrZUZyYW1lKHdpZHRoLCBoZWlnaHQsIEFWX1BJWF9GTVRfWVVWNDIwUCksXG4gICAgICBod0ZyYW1lc0N0eCxcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGVuY29kZShiZ3JhRnJhbWU6IEZyYW1lLCBtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IGJhc2VDdHgsIGFscGhhQ3R4LCBiYXNlU3dzLCB5dXZGcmFtZSwgaHdGcmFtZXNDdHggfSA9IHRoaXMuX3M7XG4gICAgY29uc3QgcHRzID0gdGhpcy5fcHRzKys7XG5cbiAgICAvLyBCYXNlOiBCR1JBIOKGkiBTV1Mg4oaSIFlVVjQyMFAgc3cgZnJhbWVcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoeXV2RnJhbWUubWFrZVdyaXRhYmxlKCksIFwieXV2Lm1ha2VXcml0YWJsZVwiKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgYmFzZVN3cy5zY2FsZUZyYW1lKHl1dkZyYW1lLCBiZ3JhRnJhbWUpLCBcInN3cy5iYXNlXCIpO1xuXG4gICAgLy8gQWxwaGE6IGV4dHJhY3QgYWxwaGEgY2hhbm5lbCDihpIgWVVWNDIwUCBzdyBmcmFtZSAoQnVmZmVyLmNvcHkgcGF0dGVybiBmcm9tIGh3LWVuY29kZS50cylcbiAgICBjb25zdCBzcmMgPSBiZ3JhRnJhbWUuZGF0YT8uWzBdO1xuICAgIGNvbnN0IHNyY0xzID0gYmdyYUZyYW1lLmxpbmVzaXplPy5bMF07XG4gICAgaWYgKCFzcmMgfHwgIXNyY0xzKSB0aHJvdyBuZXcgRXJyb3IoXCJlbmNvZGU6IG1pc3NpbmcgQkdSQSBkYXRhXCIpO1xuICAgIGNvbnN0IHcgPSBiZ3JhRnJhbWUud2lkdGg7XG4gICAgY29uc3QgaCA9IGJncmFGcmFtZS5oZWlnaHQ7XG4gICAgY29uc3QgeVNpemUgPSB3ICogaDtcbiAgICBjb25zdCB1dlNpemUgPSAodyA+PiAxKSAqIChoID4+IDEpO1xuICAgIGlmICghdGhpcy5fYWxwaGFCdWYpIHRoaXMuX2FscGhhQnVmID0gQnVmZmVyLmFsbG9jKHlTaXplICsgdXZTaXplICogMik7XG4gICAgY29uc3QgYnVmID0gdGhpcy5fYWxwaGFCdWY7XG4gICAgZm9yIChsZXQgeSA9IDA7IHkgPCBoOyB5KyspIHtcbiAgICAgIGZvciAobGV0IHggPSAwOyB4IDwgdzsgeCsrKSB7XG4gICAgICAgIGJ1Zlt5ICogdyArIHhdID0gc3JjW3kgKiBzcmNMcyArIHggKiA0ICsgM10hO1xuICAgICAgfVxuICAgIH1cbiAgICBidWYuZmlsbCgxMjgsIHlTaXplLCB5U2l6ZSArIHV2U2l6ZSAqIDIpO1xuXG4gICAgLy8gZnJvbVZpZGVvQnVmZmVyIGlzIHRoZSBvbmx5IHdheSB0byBzZXQgbmF0aXZlIGZyYW1lIGRhdGEgb24gTGludXhcbiAgICB0aGlzLl9hbHBoYUZyYW1lPy5mcmVlKCk7XG4gICAgdGhpcy5fYWxwaGFGcmFtZSA9IEZyYW1lLmZyb21WaWRlb0J1ZmZlcihidWYsIHsgZm9ybWF0OiBBVl9QSVhfRk1UX1lVVjQyMFAsIHdpZHRoOiB3LCBoZWlnaHQ6IGggfSk7XG5cbiAgICAvLyBVcGxvYWQgYm90aCB0byBHUFUgKyBlbmNvZGVcbiAgICBjb25zdCBiYXNlSHdGcmFtZSA9IG5ldyBGcmFtZSgpO1xuICAgIGJhc2VId0ZyYW1lLmFsbG9jKCk7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGh3RnJhbWVzQ3R4LmdldEJ1ZmZlcihiYXNlSHdGcmFtZSwgMCksIFwiYmFzZS5nZXRCdWZmZXJcIik7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IGh3RnJhbWVzQ3R4LnRyYW5zZmVyRGF0YShiYXNlSHdGcmFtZSwgeXV2RnJhbWUsIDApLCBcImJhc2UudHJhbnNmZXJcIik7XG4gICAgYmFzZUh3RnJhbWUucHRzID0gcHRzO1xuICAgIGJhc2VId0ZyYW1lLmR1cmF0aW9uID0gMW47XG5cbiAgICBjb25zdCBhbHBoYUh3RnJhbWUgPSBuZXcgRnJhbWUoKTtcbiAgICBhbHBoYUh3RnJhbWUuYWxsb2MoKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoaHdGcmFtZXNDdHguZ2V0QnVmZmVyKGFscGhhSHdGcmFtZSwgMCksIFwiYWxwaGEuZ2V0QnVmZmVyXCIpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCBod0ZyYW1lc0N0eC50cmFuc2ZlckRhdGEoYWxwaGFId0ZyYW1lLCB0aGlzLl9hbHBoYUZyYW1lLCAwKSwgXCJhbHBoYS50cmFuc2ZlclwiKTtcbiAgICBhbHBoYUh3RnJhbWUucHRzID0gcHRzO1xuICAgIGFscGhhSHdGcmFtZS5kdXJhdGlvbiA9IDFuO1xuXG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IGJhc2VDdHguc2VuZEZyYW1lKGJhc2VId0ZyYW1lKSwgXCJiYXNlLnNlbmRGcmFtZVwiKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgYWxwaGFDdHguc2VuZEZyYW1lKGFscGhhSHdGcmFtZSksIFwiYWxwaGEuc2VuZEZyYW1lXCIpO1xuICAgIGF3YWl0IHRoaXMuZHJhaW5JbnRlcmxlYXZlZChtdXhlcik7XG4gICAgYmFzZUh3RnJhbWUuZnJlZSgpO1xuICAgIGFscGhhSHdGcmFtZS5mcmVlKCk7XG4gIH1cblxuICBhc3luYyBmbHVzaChtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLl9zLmJhc2VDdHguc2VuZEZyYW1lKG51bGwpO1xuICAgIGF3YWl0IHRoaXMuX3MuYWxwaGFDdHguc2VuZEZyYW1lKG51bGwpO1xuICAgIGF3YWl0IHRoaXMuZHJhaW5JbnRlcmxlYXZlZChtdXhlcik7XG4gIH1cblxuICBbU3ltYm9sLmRpc3Bvc2VdKCk6IHZvaWQge1xuICAgIGNvbnN0IHsgYmFzZVBrdCwgYWxwaGFQa3QsIHl1dkZyYW1lLCBiYXNlU3dzLCBod0ZyYW1lc0N0eCwgYmFzZUN0eCwgYWxwaGFDdHggfSA9IHRoaXMuX3M7XG4gICAgYmFzZVBrdC5mcmVlKCk7XG4gICAgYWxwaGFQa3QuZnJlZSgpO1xuICAgIHl1dkZyYW1lW1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgIHRoaXMuX2FscGhhRnJhbWU/LmZyZWUoKTtcbiAgICBiYXNlU3dzW1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgIGh3RnJhbWVzQ3R4LmZyZWUoKTtcbiAgICBiYXNlQ3R4LmZyZWVDb250ZXh0KCk7XG4gICAgYWxwaGFDdHguZnJlZUNvbnRleHQoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZHJhaW5JbnRlcmxlYXZlZChtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IGJhc2VDdHgsIGFscGhhQ3R4LCBiYXNlUGt0LCBhbHBoYVBrdCwgc3RyZWFtIH0gPSB0aGlzLl9zO1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBjb25zdCBiYXNlUiA9IGF3YWl0IGJhc2VDdHgucmVjZWl2ZVBhY2tldChiYXNlUGt0KTtcbiAgICAgIGNvbnN0IGFscGhhUiA9IGF3YWl0IGFscGhhQ3R4LnJlY2VpdmVQYWNrZXQoYWxwaGFQa3QpO1xuXG4gICAgICBjb25zdCBiYXNlUmVhZHkgPSBiYXNlUiA+PSAwO1xuICAgICAgY29uc3QgYWxwaGFSZWFkeSA9IGFscGhhUiA+PSAwO1xuICAgICAgaWYgKCFiYXNlUmVhZHkgJiYgIWFscGhhUmVhZHkpIGJyZWFrO1xuXG4gICAgICAvLyBCb3RoIG11c3QgcHJvZHVjZSBwYWNrZXRzIHRvZ2V0aGVyIChiZj0wIGVuc3VyZXMgdGhpcylcbiAgICAgIGlmIChiYXNlUmVhZHkgIT09IGFscGhhUmVhZHkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBOVkVOQyBkZXN5bmM6IGJhc2U9JHtiYXNlUmVhZHl9LCBhbHBoYT0ke2FscGhhUmVhZHl9YCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGJhc2VOYWxzID0gc3BsaXROYWxVbml0cyhiYXNlUGt0LmRhdGEhKTtcbiAgICAgIGNvbnN0IGFscGhhTmFscyA9IHNwbGl0TmFsVW5pdHMoYWxwaGFQa3QuZGF0YSEpO1xuXG4gICAgICBjb25zdCBjaHVua3M6IEJ1ZmZlcltdID0gW107XG4gICAgICBpZiAoIXRoaXMuX3NlaUluamVjdGVkKSB7XG4gICAgICAgIGNodW5rcy5wdXNoKHRoaXMuX3NlaUJ1ZmZlcik7XG4gICAgICAgIHRoaXMuX3NlaUluamVjdGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGNodW5rcy5wdXNoKGludGVybGVhdmVBY2Nlc3NVbml0cyhiYXNlTmFscywgYWxwaGFOYWxzKSk7XG5cbiAgICAgIC8vIFNhdmUgdGltZXN0YW1wcyBiZWZvcmUgZGF0YSByZXBsYWNlbWVudCAoc2V0dGVyIG1heSByZXNldCB0aGVtKVxuICAgICAgY29uc3QgcHRzID0gYmFzZVBrdC5wdHM7XG4gICAgICBjb25zdCBkdHMgPSBiYXNlUGt0LmR0cztcbiAgICAgIGNvbnN0IGR1cmF0aW9uID0gYmFzZVBrdC5kdXJhdGlvbjtcbiAgICAgIGJhc2VQa3QuZGF0YSA9IEJ1ZmZlci5jb25jYXQoY2h1bmtzKTtcbiAgICAgIGJhc2VQa3QucHRzID0gcHRzO1xuICAgICAgYmFzZVBrdC5kdHMgPSBkdHM7XG4gICAgICBiYXNlUGt0LmR1cmF0aW9uID0gZHVyYXRpb24gPT09IDBuID8gMW4gOiBkdXJhdGlvbjtcbiAgICAgIGJhc2VQa3Quc3RyZWFtSW5kZXggPSBzdHJlYW0uaW5kZXg7XG4gICAgICBiYXNlUGt0LnJlc2NhbGVUcyhiYXNlQ3R4LnRpbWVCYXNlLCBzdHJlYW0udGltZUJhc2UpO1xuICAgICAgYXdhaXQgbXV4ZXIud3JpdGVQYWNrZXQoYmFzZVBrdCk7XG5cbiAgICAgIGJhc2VQa3QudW5yZWYoKTtcbiAgICAgIGFscGhhUGt0LnVucmVmKCk7XG4gICAgfVxuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAzLzIxLlxuXG5pbXBvcnQgeyBDb2RlYywgQ29kZWNDb250ZXh0LCBGRm1wZWdFcnJvciwgRnJhbWUsIHR5cGUgUGFja2V0LCBSYXRpb25hbCwgdHlwZSBTdHJlYW0gfSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHsgQVZfQ09ERUNfRkxBR19HTE9CQUxfSEVBREVSLCB0eXBlIEFWUGl4ZWxGb3JtYXQsIHR5cGUgRkZWaWRlb0VuY29kZXIgfSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcbmltcG9ydCB7IGRyYWluUGFja2V0cywgbWFrZVBhY2tldCB9IGZyb20gXCIuL3NoYXJlZFwiO1xuaW1wb3J0IHR5cGUgeyBGb3JtYXRNdXhlciB9IGZyb20gXCIuL211eGVyXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmlkZW9FbmNvZGVyT3B0aW9ucyB7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICBmcHM6IG51bWJlcjtcbiAgY29kZWNOYW1lOiBGRlZpZGVvRW5jb2RlcjtcbiAgY29kZWNUYWc/OiBzdHJpbmc7XG4gIGdsb2JhbEhlYWRlcjogYm9vbGVhbjtcbiAgY29kZWNPcHRzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICBiaXRyYXRlOiBudW1iZXI7XG4gIHBpeGVsRm9ybWF0OiBBVlBpeGVsRm9ybWF0O1xuICBtdXhlcjogRm9ybWF0TXV4ZXI7XG59XG5cbmV4cG9ydCBjbGFzcyBWaWRlb0VuY29kZXIgaW1wbGVtZW50cyBEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfY3R4OiBDb2RlY0NvbnRleHQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3BrdDogUGFja2V0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdHJlYW06IFN0cmVhbTtcbiAgcHJpdmF0ZSBfcHRzID0gMG47XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihjdHg6IENvZGVjQ29udGV4dCwgcGt0OiBQYWNrZXQsIHN0cmVhbTogU3RyZWFtKSB7XG4gICAgdGhpcy5fY3R4ID0gY3R4O1xuICAgIHRoaXMuX3BrdCA9IHBrdDtcbiAgICB0aGlzLl9zdHJlYW0gPSBzdHJlYW07XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgY3JlYXRlKG9wdHM6IFZpZGVvRW5jb2Rlck9wdGlvbnMpOiBQcm9taXNlPFZpZGVvRW5jb2Rlcj4ge1xuICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgZnBzLCBjb2RlY05hbWUsIGNvZGVjVGFnLCBnbG9iYWxIZWFkZXIsIGNvZGVjT3B0cywgYml0cmF0ZSwgbXV4ZXIgfSA9IG9wdHM7XG5cbiAgICBjb25zdCBjb2RlYyA9IENvZGVjLmZpbmRFbmNvZGVyQnlOYW1lKGNvZGVjTmFtZSk7XG4gICAgaWYgKCFjb2RlYykgdGhyb3cgbmV3IEVycm9yKGBWaWRlbyBlbmNvZGVyIG5vdCBmb3VuZDogJHtjb2RlY05hbWV9YCk7XG5cbiAgICBjb25zdCBjdHggPSBuZXcgQ29kZWNDb250ZXh0KCk7XG4gICAgY3R4LmFsbG9jQ29udGV4dDMoY29kZWMpO1xuICAgIGN0eC5jb2RlY0lkID0gY29kZWMuaWQ7XG4gICAgY3R4LndpZHRoID0gd2lkdGg7XG4gICAgY3R4LmhlaWdodCA9IGhlaWdodDtcbiAgICBjdHgucGl4ZWxGb3JtYXQgPSBvcHRzLnBpeGVsRm9ybWF0O1xuICAgIGN0eC50aW1lQmFzZSA9IG5ldyBSYXRpb25hbCgxLCBmcHMpO1xuICAgIGN0eC5mcmFtZXJhdGUgPSBuZXcgUmF0aW9uYWwoZnBzLCAxKTtcbiAgICBjdHguZ29wU2l6ZSA9IGZwcyAqIDI7XG4gICAgY3R4LmJpdFJhdGUgPSBCaWdJbnQoYml0cmF0ZSk7XG4gICAgaWYgKGdsb2JhbEhlYWRlcikgY3R4LnNldEZsYWdzKEFWX0NPREVDX0ZMQUdfR0xPQkFMX0hFQURFUik7XG4gICAgZm9yIChjb25zdCBbaywgdl0gb2YgT2JqZWN0LmVudHJpZXMoY29kZWNPcHRzKSkgY3R4LnNldE9wdGlvbihrLCB2KTtcbiAgICBpZiAoY29kZWNUYWcpIGN0eC5jb2RlY1RhZyA9IGNvZGVjVGFnO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCBjdHgub3BlbjIoY29kZWMsIG51bGwpLCBcInZpZGVvQ3R4Lm9wZW4yXCIpO1xuXG4gICAgY29uc3Qgc3RyZWFtID0gbXV4ZXIuYWRkU3RyZWFtKGN0eCwgY29kZWNUYWcpO1xuICAgIHJldHVybiBuZXcgVmlkZW9FbmNvZGVyKGN0eCwgbWFrZVBhY2tldCgpLCBzdHJlYW0pO1xuICB9XG5cbiAgYXN5bmMgZW5jb2RlKGZyYW1lOiBGcmFtZSwgbXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgZnJhbWUucHRzID0gdGhpcy5fcHRzKys7XG4gICAgZnJhbWUuZHVyYXRpb24gPSAxbjtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgdGhpcy5fY3R4LnNlbmRGcmFtZShmcmFtZSksIFwidmlkZW9DdHguc2VuZEZyYW1lXCIpO1xuICAgIGF3YWl0IHRoaXMuZHJhaW4obXV4ZXIpO1xuICB9XG5cbiAgYXN5bmMgZmx1c2gobXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5fY3R4LnNlbmRGcmFtZShudWxsKTtcbiAgICBhd2FpdCB0aGlzLmRyYWluKG11eGVyKTtcbiAgfVxuXG4gIFtTeW1ib2wuZGlzcG9zZV0oKTogdm9pZCB7XG4gICAgdGhpcy5fcGt0LmZyZWUoKTtcbiAgICB0aGlzLl9jdHguZnJlZUNvbnRleHQoKTtcbiAgfVxuXG4gIHByaXZhdGUgZHJhaW4obXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIGRyYWluUGFja2V0cyh0aGlzLl9jdHgsIHRoaXMuX3BrdCwgdGhpcy5fc3RyZWFtLCBtdXhlcik7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMTIuXG5cbmltcG9ydCB7IENvZGVjQ29udGV4dCwgRkZtcGVnRXJyb3IsIEZyYW1lLCB0eXBlIFBhY2tldCwgUmF0aW9uYWwsIHR5cGUgU3RyZWFtIH0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB0eXBlIHsgSGFyZHdhcmVDb250ZXh0IH0gZnJvbSBcIm5vZGUtYXYvYXBpXCI7XG5pbXBvcnQgeyBBVl9DT0RFQ19GTEFHX0dMT0JBTF9IRUFERVIsIEFWX1BJWF9GTVRfQkdSQSwgQVZDT0xfUkFOR0VfSlBFRyB9IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgZHJhaW5QYWNrZXRzLCBtYWtlUGFja2V0IH0gZnJvbSBcIi4vc2hhcmVkXCI7XG5pbXBvcnQgdHlwZSB7IEZvcm1hdE11eGVyIH0gZnJvbSBcIi4vbXV4ZXJcIjtcblxuZXhwb3J0IGludGVyZmFjZSBId1ZpZGVvRW5jb2Rlck9wdGlvbnMge1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgZnBzOiBudW1iZXI7XG4gIGh3OiBIYXJkd2FyZUNvbnRleHQ7XG4gIGJpdHJhdGU6IG51bWJlcjtcbiAgbXV4ZXI6IEZvcm1hdE11eGVyO1xufVxuXG5leHBvcnQgY2xhc3MgVmlkZW9Ub29sYm94RW5jb2RlciBpbXBsZW1lbnRzIERpc3Bvc2FibGUge1xuICBwcml2YXRlIF9jdHg6IENvZGVjQ29udGV4dDtcbiAgcHJpdmF0ZSBfcGt0OiBQYWNrZXQ7XG4gIHByaXZhdGUgX3N0cmVhbTogU3RyZWFtO1xuICBwcml2YXRlIF9wdHMgPSAwbjtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKGN0eDogQ29kZWNDb250ZXh0LCBwa3Q6IFBhY2tldCwgc3RyZWFtOiBTdHJlYW0pIHtcbiAgICB0aGlzLl9jdHggPSBjdHg7XG4gICAgdGhpcy5fcGt0ID0gcGt0O1xuICAgIHRoaXMuX3N0cmVhbSA9IHN0cmVhbTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBjcmVhdGUob3B0czogSHdWaWRlb0VuY29kZXJPcHRpb25zKTogUHJvbWlzZTxWaWRlb1Rvb2xib3hFbmNvZGVyPiB7XG4gICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0LCBmcHMsIGh3LCBiaXRyYXRlLCBtdXhlciB9ID0gb3B0cztcblxuICAgIGNvbnN0IGNvZGVjID0gaHcuZ2V0RW5jb2RlckNvZGVjKFwiaGV2Y1wiKTtcbiAgICBpZiAoIWNvZGVjKSB0aHJvdyBuZXcgRXJyb3IoXCJoZXZjX3ZpZGVvdG9vbGJveCBlbmNvZGVyIG5vdCBmb3VuZFwiKTtcblxuICAgIGNvbnN0IGN0eCA9IG5ldyBDb2RlY0NvbnRleHQoKTtcbiAgICBjdHguYWxsb2NDb250ZXh0Myhjb2RlYyk7XG4gICAgY3R4LmNvZGVjSWQgPSBjb2RlYy5pZDtcbiAgICBjdHgud2lkdGggPSB3aWR0aDtcbiAgICBjdHguaGVpZ2h0ID0gaGVpZ2h0O1xuICAgIGN0eC5waXhlbEZvcm1hdCA9IEFWX1BJWF9GTVRfQkdSQTtcbiAgICBjdHguY29sb3JSYW5nZSA9IEFWQ09MX1JBTkdFX0pQRUc7XG4gICAgY3R4LnRpbWVCYXNlID0gbmV3IFJhdGlvbmFsKDEsIGZwcyk7XG4gICAgY3R4LmZyYW1lcmF0ZSA9IG5ldyBSYXRpb25hbChmcHMsIDEpO1xuICAgIGN0eC5nb3BTaXplID0gZnBzICogMjtcbiAgICBjdHguYml0UmF0ZSA9IEJpZ0ludChiaXRyYXRlKTtcbiAgICBjdHguc2V0RmxhZ3MoQVZfQ09ERUNfRkxBR19HTE9CQUxfSEVBREVSKTtcbiAgICBjdHguc2V0T3B0aW9uKFwiYWxwaGFfcXVhbGl0eVwiLCBcIjFcIik7XG4gICAgY3R4LmNvZGVjVGFnID0gXCJodmMxXCI7XG5cbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgY3R4Lm9wZW4yKGNvZGVjLCBudWxsKSwgXCJ2dEVuYy5vcGVuMlwiKTtcblxuICAgIGNvbnN0IHN0cmVhbSA9IG11eGVyLmFkZFN0cmVhbShjdHgsIFwiaHZjMVwiKTtcbiAgICByZXR1cm4gbmV3IFZpZGVvVG9vbGJveEVuY29kZXIoY3R4LCBtYWtlUGFja2V0KCksIHN0cmVhbSk7XG4gIH1cblxuICBhc3luYyBlbmNvZGUoYmdyYUZyYW1lOiBGcmFtZSwgbXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYmdyYUZyYW1lLnB0cyA9IHRoaXMuX3B0cysrO1xuICAgIGJncmFGcmFtZS5kdXJhdGlvbiA9IDFuO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCB0aGlzLl9jdHguc2VuZEZyYW1lKGJncmFGcmFtZSksIFwidnRFbmMuc2VuZEZyYW1lXCIpO1xuICAgIGF3YWl0IHRoaXMuZHJhaW4obXV4ZXIpO1xuICB9XG5cbiAgYXN5bmMgZmx1c2gobXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5fY3R4LnNlbmRGcmFtZShudWxsKTtcbiAgICBhd2FpdCB0aGlzLmRyYWluKG11eGVyKTtcbiAgfVxuXG4gIFtTeW1ib2wuZGlzcG9zZV0oKTogdm9pZCB7XG4gICAgdGhpcy5fcGt0LmZyZWUoKTtcbiAgICB0aGlzLl9jdHguZnJlZUNvbnRleHQoKTtcbiAgfVxuXG4gIHByaXZhdGUgZHJhaW4obXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIGRyYWluUGFja2V0cyh0aGlzLl9jdHgsIHRoaXMuX3BrdCwgdGhpcy5fc3RyZWFtLCBtdXhlcik7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMTMuXG5cbmltcG9ydCB7IEhhcmR3YXJlQ29udGV4dCB9IGZyb20gXCJub2RlLWF2L2FwaVwiO1xuaW1wb3J0IHtcbiAgQVZfUElYX0ZNVF9ZVVZBNDIwUCxcbiAgRkZfRU5DT0RFUl9MSUJYMjY1LFxuICBGRl9IV0RFVklDRV9UWVBFX0NVREEsXG4gIEZGX0hXREVWSUNFX1RZUEVfVklERU9UT09MQk9YLFxufSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcblxuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4uL2xvZ2dpbmdcIjtcbmltcG9ydCB7IENvZGVjU3RhdGUgfSBmcm9tIFwiLi9jb2RlY1wiO1xuaW1wb3J0IHR5cGUgeyBGb3JtYXRNdXhlciB9IGZyb20gXCIuL211eGVyXCI7XG5pbXBvcnQgeyBOdmVuY0R1YWxMYXllckVuY29kZXIgfSBmcm9tIFwiLi9udmVuY1wiO1xuaW1wb3J0IHsgVmlkZW9FbmNvZGVyIH0gZnJvbSBcIi4vdmlkZW9cIjtcbmltcG9ydCB7IFZpZGVvVG9vbGJveEVuY29kZXIgfSBmcm9tIFwiLi92aWRlb3Rvb2xib3hcIjtcblxuY29uc3QgVEFHID0gXCJbRW5jb2Rlcl1cIjtcblxuZXhwb3J0IHR5cGUgSHdFbmNvZGVyID0gVmlkZW9Ub29sYm94RW5jb2RlciB8IE52ZW5jRHVhbExheWVyRW5jb2RlcjtcblxuZXhwb3J0IGludGVyZmFjZSBWaWRlb1NldHVwIHtcbiAgdmlkZW8/OiBWaWRlb0VuY29kZXI7XG4gIGh3VmlkZW8/OiBId0VuY29kZXI7XG4gIGNvZGVjPzogQ29kZWNTdGF0ZTtcbiAgaHc/OiBIYXJkd2FyZUNvbnRleHQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmlkZW9GYWN0b3J5T3B0aW9ucyB7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICBmcHM6IG51bWJlcjtcbiAgYml0cmF0ZT86IG51bWJlcjtcbiAgZGlzYWJsZUdwdT86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVWaWRlb0VuY29kZXIob3B0czogVmlkZW9GYWN0b3J5T3B0aW9ucywgbXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTxWaWRlb1NldHVwPiB7XG4gIGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgZnBzLCBiaXRyYXRlID0gOF8wMDBfMDAwLCBkaXNhYmxlR3B1ID0gZmFsc2UgfSA9IG9wdHM7XG4gIGNvbnN0IGh3ID0gZGlzYWJsZUdwdSA/IHVuZGVmaW5lZCA6IChIYXJkd2FyZUNvbnRleHQuYXV0bygpID8/IHVuZGVmaW5lZCk7XG5cbiAgaWYgKGh3Py5kZXZpY2VUeXBlTmFtZSA9PT0gRkZfSFdERVZJQ0VfVFlQRV9WSURFT1RPT0xCT1ggJiYgaHcuZ2V0RW5jb2RlckNvZGVjKFwiaGV2Y1wiKSkge1xuICAgIGxvZ2dlci5kZWJ1ZyhUQUcsIFwidXNpbmcgVmlkZW9Ub29sYm94IEhFVkMgYWxwaGEgZW5jb2RlclwiKTtcbiAgICBjb25zdCBod1ZpZGVvID0gYXdhaXQgVmlkZW9Ub29sYm94RW5jb2Rlci5jcmVhdGUoeyB3aWR0aCwgaGVpZ2h0LCBmcHMsIGh3LCBiaXRyYXRlLCBtdXhlciB9KTtcbiAgICByZXR1cm4geyBod1ZpZGVvLCBodyB9O1xuICB9XG5cbiAgaWYgKGh3Py5kZXZpY2VUeXBlTmFtZSA9PT0gRkZfSFdERVZJQ0VfVFlQRV9DVURBICYmIGh3LmdldEVuY29kZXJDb2RlYyhcImhldmNcIikpIHtcbiAgICBsb2dnZXIuZGVidWcoVEFHLCBcInVzaW5nIE5WRU5DIGR1YWwtbGF5ZXIgSEVWQyBhbHBoYSBlbmNvZGVyXCIpO1xuICAgIGNvbnN0IGh3VmlkZW8gPSBhd2FpdCBOdmVuY0R1YWxMYXllckVuY29kZXIuY3JlYXRlKHsgd2lkdGgsIGhlaWdodCwgZnBzLCBodywgYml0cmF0ZSwgbXV4ZXIgfSk7XG4gICAgcmV0dXJuIHsgaHdWaWRlbywgaHcgfTtcbiAgfVxuXG4gIGxvZ2dlci5kZWJ1ZyhUQUcsIFwidXNpbmcgc29mdHdhcmUgbGlieDI2NSBIRVZDIGFscGhhIGVuY29kZXJcIik7XG4gIGh3Py5kaXNwb3NlKCk7XG4gIGNvbnN0IHZpZGVvID0gYXdhaXQgVmlkZW9FbmNvZGVyLmNyZWF0ZSh7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0LFxuICAgIGZwcyxcbiAgICBjb2RlY05hbWU6IEZGX0VOQ09ERVJfTElCWDI2NSxcbiAgICBjb2RlY1RhZzogXCJodmMxXCIsXG4gICAgZ2xvYmFsSGVhZGVyOiB0cnVlLFxuICAgIGNvZGVjT3B0czogeyBwcmVzZXQ6IFwibWVkaXVtXCIsIFwieDI2NS1wYXJhbXNcIjogXCJsb2ctbGV2ZWw9MTpiZnJhbWVzPTM6cG9vbHM9KzpmcmFtZS10aHJlYWRzPTBcIiB9LFxuICAgIGJpdHJhdGUsXG4gICAgcGl4ZWxGb3JtYXQ6IEFWX1BJWF9GTVRfWVVWQTQyMFAsXG4gICAgbXV4ZXIsXG4gIH0pO1xuICByZXR1cm4geyB2aWRlbywgY29kZWM6IGF3YWl0IENvZGVjU3RhdGUuY3JlYXRlKHdpZHRoLCBoZWlnaHQpIH07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAzLzIxLlxuXG5pbXBvcnQgeyBDb2RlY0NvbnRleHQsIEZGbXBlZ0Vycm9yLCBGb3JtYXRDb250ZXh0LCBQYWNrZXQgfSBmcm9tIFwibm9kZS1hdlwiO1xuXG5leHBvcnQgY2xhc3MgRm9ybWF0TXV4ZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF9jdHg6IEZvcm1hdENvbnRleHQ7XG4gIHByaXZhdGUgX29wZW5lZCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKG91dFBhdGg6IHN0cmluZywgZm9ybWF0TmFtZT86IHN0cmluZykge1xuICAgIHRoaXMuX2N0eCA9IG5ldyBGb3JtYXRDb250ZXh0KCk7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKHRoaXMuX2N0eC5hbGxvY091dHB1dENvbnRleHQyKG51bGwsIGZvcm1hdE5hbWUgPz8gbnVsbCwgb3V0UGF0aCksIFwiYWxsb2NPdXRwdXRDb250ZXh0MlwiKTtcbiAgfVxuXG4gIGFkZFN0cmVhbShjb2RlY0N0eDogQ29kZWNDb250ZXh0LCBjb2RlY1RhZz86IHN0cmluZyk6IFJldHVyblR5cGU8Rm9ybWF0Q29udGV4dFtcIm5ld1N0cmVhbVwiXT4ge1xuICAgIGNvbnN0IHN0cmVhbSA9IHRoaXMuX2N0eC5uZXdTdHJlYW0obnVsbCk7XG4gICAgc3RyZWFtLnRpbWVCYXNlID0gY29kZWNDdHgudGltZUJhc2U7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKHN0cmVhbS5jb2RlY3Bhci5mcm9tQ29udGV4dChjb2RlY0N0eCksIFwiY29kZWNwYXIuZnJvbUNvbnRleHRcIik7XG4gICAgaWYgKGNvZGVjVGFnKSBzdHJlYW0uY29kZWNwYXIuY29kZWNUYWcgPSBjb2RlY1RhZztcbiAgICByZXR1cm4gc3RyZWFtO1xuICB9XG5cbiAgYXN5bmMgb3BlbigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fb3BlbmVkKSByZXR1cm47XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IHRoaXMuX2N0eC5vcGVuT3V0cHV0KCksIFwib3Blbk91dHB1dFwiKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgdGhpcy5fY3R4LndyaXRlSGVhZGVyKG51bGwpLCBcIndyaXRlSGVhZGVyXCIpO1xuICAgIHRoaXMuX29wZW5lZCA9IHRydWU7XG4gIH1cblxuICBhc3luYyB3cml0ZVBhY2tldChwa3Q6IFBhY2tldCk6IFByb21pc2U8dm9pZD4ge1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCB0aGlzLl9jdHguaW50ZXJsZWF2ZWRXcml0ZUZyYW1lKHBrdCksIFwiaW50ZXJsZWF2ZWRXcml0ZUZyYW1lXCIpO1xuICB9XG5cbiAgYXN5bmMgW1N5bWJvbC5hc3luY0Rpc3Bvc2VdKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5fb3BlbmVkKSByZXR1cm47XG4gICAgYXdhaXQgdGhpcy5fY3R4LndyaXRlVHJhaWxlcigpO1xuICAgIGF3YWl0IHRoaXMuX2N0eC5jbG9zZU91dHB1dCgpO1xuICAgIGF3YWl0IHRoaXMuX2N0eFtTeW1ib2wuYXN5bmNEaXNwb3NlXSgpO1xuICAgIHRoaXMuX29wZW5lZCA9IGZhbHNlO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzAxLlxuXG5pbXBvcnQgeyBGRm1wZWdFcnJvciwgRnJhbWUgfSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHR5cGUgeyBIYXJkd2FyZUNvbnRleHQgfSBmcm9tIFwibm9kZS1hdi9hcGlcIjtcbmltcG9ydCB7IEFWX1BJWF9GTVRfQkdSQSwgQVZfU0FNUExFX0ZNVF9GTFRQLCBGRl9FTkNPREVSX0FBQyB9IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuXG5pbXBvcnQgeyBvayB9IGZyb20gXCJhc3NlcnRcIjtcbmltcG9ydCB7IENvbmN1cnJlbmN5TGltaXRlciB9IGZyb20gXCIuLi9saW1pdGVyXCI7XG5pbXBvcnQgeyBBdWRpb0VuY29kZXIgfSBmcm9tIFwiLi9hdWRpb1wiO1xuaW1wb3J0IHsgQ29kZWNTdGF0ZSB9IGZyb20gXCIuL2NvZGVjXCI7XG5pbXBvcnQgeyBjcmVhdGVWaWRlb0VuY29kZXIsIHR5cGUgSHdFbmNvZGVyIH0gZnJvbSBcIi4vZmFjdG9yeVwiO1xuaW1wb3J0IHsgRm9ybWF0TXV4ZXIgfSBmcm9tIFwiLi9tdXhlclwiO1xuaW1wb3J0IHsgbWFrZUZyYW1lIH0gZnJvbSBcIi4vc2hhcmVkXCI7XG5pbXBvcnQgeyBWaWRlb0VuY29kZXIgfSBmcm9tIFwiLi92aWRlb1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEVuY29kZXJQaXBlbGluZU9wdGlvbnMge1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgZnBzOiBudW1iZXI7XG4gIG91dEZpbGU6IHN0cmluZztcbiAgd2l0aEF1ZGlvPzogYm9vbGVhbjtcbiAgZGlzYWJsZUdwdT86IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBQaXBlbGluZVN0YXRlIHtcbiAgdmlkZW8/OiBWaWRlb0VuY29kZXI7XG4gIGh3VmlkZW8/OiBId0VuY29kZXI7XG4gIGF1ZGlvPzogQXVkaW9FbmNvZGVyO1xuICBtdXhlcjogRm9ybWF0TXV4ZXI7XG4gIGxpbWl0ZXI6IENvbmN1cnJlbmN5TGltaXRlcjtcbiAgb3V0RmlsZTogc3RyaW5nO1xuICBjb2RlYz86IENvZGVjU3RhdGU7XG4gIGh3PzogSGFyZHdhcmVDb250ZXh0O1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbn1cblxuZXhwb3J0IGNsYXNzIEVuY29kZXJQaXBlbGluZSB7XG4gIHByaXZhdGUgX3M6IFBpcGVsaW5lU3RhdGU7XG4gIHByaXZhdGUgX2Rpc3Bvc2VkID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihzOiBQaXBlbGluZVN0YXRlKSB7XG4gICAgdGhpcy5fcyA9IHM7XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgY3JlYXRlKG9wdHM6IEVuY29kZXJQaXBlbGluZU9wdGlvbnMpOiBQcm9taXNlPEVuY29kZXJQaXBlbGluZT4ge1xuICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgb3V0RmlsZSwgd2l0aEF1ZGlvID0gZmFsc2UgfSA9IG9wdHM7XG4gICAgY29uc3QgbXV4ZXIgPSBuZXcgRm9ybWF0TXV4ZXIob3V0RmlsZSk7XG4gICAgY29uc3QgeyB2aWRlbywgaHdWaWRlbywgY29kZWMsIGh3IH0gPSBhd2FpdCBjcmVhdGVWaWRlb0VuY29kZXIob3B0cywgbXV4ZXIpO1xuXG4gICAgbGV0IGF1ZGlvOiBBdWRpb0VuY29kZXIgfCB1bmRlZmluZWQ7XG4gICAgaWYgKHdpdGhBdWRpbykge1xuICAgICAgYXVkaW8gPSBhd2FpdCBBdWRpb0VuY29kZXIuY3JlYXRlKHtcbiAgICAgICAgb3V0U2FtcGxlUmF0ZTogNDRfMTAwLFxuICAgICAgICBvdXRTYW1wbGVGbXQ6IEFWX1NBTVBMRV9GTVRfRkxUUCxcbiAgICAgICAgY29kZWNOYW1lOiBGRl9FTkNPREVSX0FBQyxcbiAgICAgICAgZ2xvYmFsSGVhZGVyOiB0cnVlLFxuICAgICAgICBiaXRyYXRlOiAxMjhfMDAwLFxuICAgICAgICBtdXhlcixcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGF3YWl0IG11eGVyLm9wZW4oKTtcbiAgICByZXR1cm4gbmV3IEVuY29kZXJQaXBlbGluZSh7XG4gICAgICB2aWRlbyxcbiAgICAgIGh3VmlkZW8sXG4gICAgICBhdWRpbyxcbiAgICAgIG11eGVyLFxuICAgICAgbGltaXRlcjogbmV3IENvbmN1cnJlbmN5TGltaXRlcigxKSxcbiAgICAgIG91dEZpbGUsXG4gICAgICBjb2RlYyxcbiAgICAgIGh3LFxuICAgICAgd2lkdGgsXG4gICAgICBoZWlnaHQsXG4gICAgfSk7XG4gIH1cblxuICBzZXR1cEF1ZGlvKHNhbXBsZVJhdGU6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuX3MuYXVkaW8/LnNldElucHV0UmF0ZShzYW1wbGVSYXRlKTtcbiAgfVxuXG4gIGFzeW5jIGVuY29kZUJHUkEoaW5wdXQ6IEJ1ZmZlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuX3MubGltaXRlci5zY2hlZHVsZShhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB7IGh3VmlkZW8sIHZpZGVvLCBjb2RlYywgbXV4ZXIgfSA9IHRoaXMuX3M7XG4gICAgICBpZiAoaHdWaWRlbykge1xuICAgICAgICB1c2luZyBmcmFtZSA9IHRoaXMuYmdyYUZyYW1lKGlucHV0KTtcbiAgICAgICAgYXdhaXQgaHdWaWRlby5lbmNvZGUoZnJhbWUsIG11eGVyKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgeyBzcmMsIGRzdCwgc3dzIH0gPSBjb2RlYyE7XG4gICAgICBvayhzd3MsIFwic3dzIG5vdCBpbml0aWFsaXplZFwiKTtcbiAgICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihzcmMubWFrZVdyaXRhYmxlKCksIFwiYmdyYVNyYy5tYWtlV3JpdGFibGVcIik7XG4gICAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3Ioc3JjLmZyb21CdWZmZXIoaW5wdXQpLCBcImJncmFTcmMuZnJvbUJ1ZmZlclwiKTtcbiAgICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihkc3QubWFrZVdyaXRhYmxlKCksIFwiYmdyYURzdC5tYWtlV3JpdGFibGVcIik7XG4gICAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgc3dzLnNjYWxlRnJhbWUoZHN0LCBzcmMpLCBcImJncmFTd3Muc2NhbGVGcmFtZVwiKTtcbiAgICAgIHJldHVybiB2aWRlbyEuZW5jb2RlKGRzdCwgbXV4ZXIpO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZW5jb2RlUE5HKHBuZ0RhdGE6IEJ1ZmZlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuX3MubGltaXRlci5zY2hlZHVsZShhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB7IGh3VmlkZW8sIHZpZGVvLCBjb2RlYywgbXV4ZXIsIHdpZHRoLCBoZWlnaHQgfSA9IHRoaXMuX3M7XG4gICAgICBjb25zdCBjcyA9IGNvZGVjID8/IChhd2FpdCBDb2RlY1N0YXRlLmNyZWF0ZSh3aWR0aCwgaGVpZ2h0KSk7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBzcmMgPSBhd2FpdCBjcy5kZWNvZGVQTkcocG5nRGF0YSk7XG4gICAgICAgIGlmIChod1ZpZGVvKSB7XG4gICAgICAgICAgYXdhaXQgaHdWaWRlby5lbmNvZGUoc3JjLCBtdXhlcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGNzLmRzdC5tYWtlV3JpdGFibGUoKSwgXCJwbmdEc3QubWFrZVdyaXRhYmxlXCIpO1xuICAgICAgICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCBjcy5zd3Muc2NhbGVGcmFtZShjcy5kc3QsIHNyYyksIFwicG5nU3dzLnNjYWxlRnJhbWVcIik7XG4gICAgICAgICAgYXdhaXQgdmlkZW8hLmVuY29kZShjcy5kc3QsIG11eGVyKTtcbiAgICAgICAgfVxuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgaWYgKCFjb2RlYykgY3NbU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBlbmNvZGVBdWRpbyhwY206IEJ1ZmZlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgYXVkaW8sIGxpbWl0ZXIsIG11eGVyIH0gPSB0aGlzLl9zO1xuICAgIGlmIChhdWRpbykgYXdhaXQgbGltaXRlci5zY2hlZHVsZSgoKSA9PiBhdWRpby5lbmNvZGUocGNtLCBtdXhlcikpO1xuICB9XG5cbiAgYXN5bmMgZmluaXNoKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgeyB2aWRlbywgaHdWaWRlbywgYXVkaW8sIG11eGVyLCBsaW1pdGVyIH0gPSB0aGlzLl9zO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB1c2luZyBfbSA9IG11eGVyO1xuICAgICAgdXNpbmcgX3YgPSB2aWRlbztcbiAgICAgIHVzaW5nIF9odiA9IGh3VmlkZW87XG4gICAgICB1c2luZyBfYSA9IGF1ZGlvO1xuICAgICAgYXdhaXQgbGltaXRlci5kcmFpbigpO1xuICAgICAgYXdhaXQgYXVkaW8/LmZsdXNoKG11eGVyKTtcbiAgICAgIGlmIChod1ZpZGVvKSB7XG4gICAgICAgIGF3YWl0IGh3VmlkZW8uZmx1c2gobXV4ZXIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXdhaXQgdmlkZW8hLmZsdXNoKG11eGVyKTtcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5mcmVlKCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9zLm91dEZpbGU7XG4gIH1cblxuICBhc3luYyBbU3ltYm9sLmFzeW5jRGlzcG9zZV0oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX2Rpc3Bvc2VkKSByZXR1cm47XG4gICAgY29uc3QgeyB2aWRlbywgaHdWaWRlbywgYXVkaW8sIG11eGVyLCBsaW1pdGVyIH0gPSB0aGlzLl9zO1xuICAgIGF3YWl0IGxpbWl0ZXIuZHJhaW4oKTtcbiAgICB2aWRlbz8uW1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgIGh3VmlkZW8/LltTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICBhdWRpbz8uW1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgIGF3YWl0IG11eGVyW1N5bWJvbC5hc3luY0Rpc3Bvc2VdKCk7XG4gICAgdGhpcy5mcmVlKCk7XG4gIH1cblxuICBwcml2YXRlIGZyZWUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2Rpc3Bvc2VkKSByZXR1cm47XG4gICAgdGhpcy5fZGlzcG9zZWQgPSB0cnVlO1xuICAgIHVzaW5nIF9jb2RlYyA9IHRoaXMuX3MuY29kZWM7XG4gICAgdGhpcy5fcy5odz8uZGlzcG9zZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBiZ3JhRnJhbWUoaW5wdXQ6IEJ1ZmZlcik6IEZyYW1lIHtcbiAgICBjb25zdCBmcmFtZSA9IG1ha2VGcmFtZSh0aGlzLl9zLndpZHRoLCB0aGlzLl9zLmhlaWdodCwgQVZfUElYX0ZNVF9CR1JBKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoZnJhbWUuZnJvbUJ1ZmZlcihpbnB1dCksIFwiYmdyYUZyYW1lLmZyb21CdWZmZXJcIik7XG4gICAgcmV0dXJuIGZyYW1lO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAzLzIzLlxuXG4vKipcbiAqIEZyYW1lIGRyb3AgcXVhbGl0eSBzY29yZSAoMCA9IHBlcmZlY3QsIDEgPSB3b3JzdCkuXG4gKlxuICogQ29tYmluZXMgdHdvIGRpbWVuc2lvbnM6XG4gKiAtIEdsb2JhbDogb3ZlcmFsbCBkcm9wIHJhdGUgYWNyb3NzIHRoZSB0aW1lbGluZVxuICogLSBMb2NhbDogcGVyY2VwdHVhbCBzZXZlcml0eSBvZiBjb25zZWN1dGl2ZSBkcm9wcyAoYnVyc3RzKVxuICpcbiAqIFVzZXMgY29tcGxlbWVudGFyeSBtdWx0aXBsaWNhdGlvbjogc2NvcmUgPSAxIC0gKDEtZykoMS1sKVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZyYW1lRHJvcFNjb3JlIHtcbiAgZ2xvYmFsOiBudW1iZXI7XG4gIGxvY2FsOiBudW1iZXI7XG4gIGphbms6IG51bWJlcjtcbiAgZXhwZWN0ZWQ6IG51bWJlcjtcbiAgYWN0dWFsOiBudW1iZXI7XG4gIG1heEJ1cnN0OiBudW1iZXI7XG59XG5cbmV4cG9ydCBjbGFzcyBGcmFtZURyb3BTdGF0cyB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2ZwczogbnVtYmVyO1xuICBwcml2YXRlIF9hY3R1YWwgPSAwO1xuICBwcml2YXRlIF9jdXJyZW50QnVyc3QgPSAwO1xuICBwcml2YXRlIF9idXJzdHM6IG51bWJlcltdID0gW107XG5cbiAgY29uc3RydWN0b3IoZnBzOiBudW1iZXIpIHtcbiAgICB0aGlzLl9mcHMgPSBmcHM7XG4gIH1cblxuICAvKiogQ2FsbCB3aGVuIGEgZnJhbWUgaXMgYWN0dWFsbHkgd3JpdHRlbiB0byB0aGUgZW5jb2Rlci4gKi9cbiAgd3JvdGUoY291bnQgPSAxKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2N1cnJlbnRCdXJzdCA+IDApIHtcbiAgICAgIHRoaXMuX2J1cnN0cy5wdXNoKHRoaXMuX2N1cnJlbnRCdXJzdCk7XG4gICAgICB0aGlzLl9jdXJyZW50QnVyc3QgPSAwO1xuICAgIH1cbiAgICB0aGlzLl9hY3R1YWwgKz0gY291bnQ7XG4gIH1cblxuICAvKiogQ2FsbCB3aGVuIGEgZnJhbWUgaXMgZHJvcHBlZC4gKi9cbiAgZHJvcHBlZChjb3VudCA9IDEpOiB2b2lkIHtcbiAgICB0aGlzLl9jdXJyZW50QnVyc3QgKz0gY291bnQ7XG4gIH1cblxuICAvKiogRmluYWxpemUgYW5kIHJldHVybiB0aGUgc2NvcmUuICovXG4gIGZpbmFsaXplKCk6IEZyYW1lRHJvcFNjb3JlIHtcbiAgICBpZiAodGhpcy5fY3VycmVudEJ1cnN0ID4gMCkge1xuICAgICAgdGhpcy5fYnVyc3RzLnB1c2godGhpcy5fY3VycmVudEJ1cnN0KTtcbiAgICAgIHRoaXMuX2N1cnJlbnRCdXJzdCA9IDA7XG4gICAgfVxuXG4gICAgbGV0IHRvdGFsRHJvcHBlZCA9IDA7XG4gICAgbGV0IGxvY2FsU3VtID0gMDtcbiAgICBsZXQgbWF4QnVyc3QgPSAwO1xuICAgIGZvciAoY29uc3QgYnVyc3Qgb2YgdGhpcy5fYnVyc3RzKSB7XG4gICAgICB0b3RhbERyb3BwZWQgKz0gYnVyc3Q7XG4gICAgICBtYXhCdXJzdCA9IE1hdGgubWF4KG1heEJ1cnN0LCBidXJzdCk7XG4gICAgICBjb25zdCBwZXJjZXB0aWJsZSA9IE1hdGgubWF4KDAsIGJ1cnN0IC0gMSk7XG4gICAgICBsb2NhbFN1bSArPSAocGVyY2VwdGlibGUgLyB0aGlzLl9mcHMpICoqIDI7XG4gICAgfVxuXG4gICAgY29uc3QgZXhwZWN0ZWQgPSB0aGlzLl9hY3R1YWwgKyB0b3RhbERyb3BwZWQ7XG4gICAgY29uc3QgZyA9IGV4cGVjdGVkID4gMCA/IHRvdGFsRHJvcHBlZCAvIGV4cGVjdGVkIDogMDtcbiAgICBjb25zdCBsID0gTWF0aC5taW4oMSwgbG9jYWxTdW0pO1xuICAgIGNvbnN0IHNjb3JlID0gMSAtICgxIC0gZykgKiAoMSAtIGwpO1xuXG4gICAgcmV0dXJuIHsgZ2xvYmFsOiBnLCBsb2NhbDogbCwgamFuazogc2NvcmUsIGV4cGVjdGVkLCBhY3R1YWw6IHRoaXMuX2FjdHVhbCwgbWF4QnVyc3QgfTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wNi5cblxuaW1wb3J0IHR5cGUgeyBOYXRpdmVJbWFnZSB9IGZyb20gXCJlbGVjdHJvblwiO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNFbXB0eShpbWFnZTogTmF0aXZlSW1hZ2UpIHtcbiAgY29uc3Qgc2l6ZSA9IGltYWdlLmdldFNpemUoKTtcbiAgaWYgKHNpemUud2lkdGggPT09IDAgfHwgc2l6ZS5oZWlnaHQgPT09IDApIHJldHVybiB0cnVlO1xuICByZXR1cm4gaW1hZ2UuaXNFbXB0eSgpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMy8wMi5cblxuaW1wb3J0IHsgcmFuZG9tVVVJRCB9IGZyb20gXCJjcnlwdG9cIjtcbmltcG9ydCB7IGlwY01haW4sIHNlc3Npb24gfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IHJtLCB3cml0ZUZpbGUgfSBmcm9tIFwiZnMvcHJvbWlzZXNcIjtcbmltcG9ydCB7IHRtcGRpciB9IGZyb20gXCJvc1wiO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgdHlwZSB7IEVuY29kZXJQaXBlbGluZSB9IGZyb20gXCIuLi9iYXNlL2VuY29kZXIvcGlwZWxpbmVcIjtcblxuY29uc3QgQVVESU9fQ0FQVFVSRV9TQ1JJUFQgPSBgXG4oZnVuY3Rpb24oKSB7XG4gIGlmICh3aW5kb3cuX19wdXBfYXVkaW9fY2FwdHVyaW5nX18pIHJldHVybjtcbiAgd2luZG93Ll9fcHVwX2F1ZGlvX2NhcHR1cmluZ19fID0gdHJ1ZTtcblxuICBjb25zdCB7IGlwY1JlbmRlcmVyIH0gPSByZXF1aXJlKCdlbGVjdHJvbicpO1xuICBjb25zdCBjYXB0dXJlZENvbnRleHRzID0gbmV3IFdlYWtTZXQoKTtcbiAgY29uc3Qgc291cmNlZEVsZW1lbnRzID0gbmV3IFdlYWtTZXQoKTtcbiAgbGV0IG1ldGFTZW50ID0gZmFsc2U7XG5cbiAgY29uc3Qgb3JpZ0NyZWF0ZU1FUyA9IEF1ZGlvQ29udGV4dC5wcm90b3R5cGUuY3JlYXRlTWVkaWFFbGVtZW50U291cmNlO1xuICBBdWRpb0NvbnRleHQucHJvdG90eXBlLmNyZWF0ZU1lZGlhRWxlbWVudFNvdXJjZSA9IGZ1bmN0aW9uKGVsKSB7XG4gICAgc291cmNlZEVsZW1lbnRzLmFkZChlbCk7XG4gICAgcmV0dXJuIG9yaWdDcmVhdGVNRVMuY2FsbCh0aGlzLCBlbCk7XG4gIH07XG5cbiAgY29uc3Qgb3JpZ0Nvbm5lY3QgPSBBdWRpb05vZGUucHJvdG90eXBlLmNvbm5lY3Q7XG4gIEF1ZGlvTm9kZS5wcm90b3R5cGUuY29ubmVjdCA9IGZ1bmN0aW9uKGRlc3QsIG91dElkeCwgaW5JZHgpIHtcbiAgICBjb25zdCBjYXB0dXJlTm9kZSA9IGRlc3Q/LmNvbnRleHQ/Ll9fcHVwX2NhcHR1cmVOb2RlX187XG4gICAgaWYgKGNhcHR1cmVOb2RlICYmIGRlc3QgPT09IGRlc3QuY29udGV4dC5kZXN0aW5hdGlvbiAmJiB0aGlzICE9PSBjYXB0dXJlTm9kZSkge1xuICAgICAgb3JpZ0Nvbm5lY3QuY2FsbCh0aGlzLCBjYXB0dXJlTm9kZSwgb3V0SWR4LCBpbklkeCk7XG4gICAgfVxuICAgIHJldHVybiBvcmlnQ29ubmVjdC5jYWxsKHRoaXMsIGRlc3QsIG91dElkeCwgaW5JZHgpO1xuICB9O1xuXG4gIGNvbnN0IE9yaWdBQyA9IHdpbmRvdy5BdWRpb0NvbnRleHQgfHwgd2luZG93LndlYmtpdEF1ZGlvQ29udGV4dDtcbiAgaWYgKCFPcmlnQUMpIHJldHVybjtcblxuICBmdW5jdGlvbiBQYXRjaGVkQUMoKSB7XG4gICAgY29uc3QgY3R4ID0gbmV3IE9yaWdBQyguLi5hcmd1bWVudHMpO1xuICAgIGlmICghY2FwdHVyZWRDb250ZXh0cy5oYXMoY3R4KSkge1xuICAgICAgY2FwdHVyZWRDb250ZXh0cy5hZGQoY3R4KTtcbiAgICAgIGlmICghbWV0YVNlbnQpIHtcbiAgICAgICAgbWV0YVNlbnQgPSB0cnVlO1xuICAgICAgICBpcGNSZW5kZXJlci5zZW5kKCdhdWRpby1tZXRhJywgeyBzYW1wbGVSYXRlOiBjdHguc2FtcGxlUmF0ZSB9KTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG5vZGUgPSBjdHguY3JlYXRlU2NyaXB0UHJvY2Vzc29yKDQwOTYsIDIsIDIpO1xuICAgICAgbm9kZS5vbmF1ZGlvcHJvY2VzcyA9IChlKSA9PiB7XG4gICAgICAgIGNvbnN0IEwgPSBlLmlucHV0QnVmZmVyLmdldENoYW5uZWxEYXRhKDApO1xuICAgICAgICBjb25zdCBSID0gZS5pbnB1dEJ1ZmZlci5nZXRDaGFubmVsRGF0YSgxKTtcbiAgICAgICAgY29uc3Qgb3V0ID0gbmV3IEZsb2F0MzJBcnJheShMLmxlbmd0aCAqIDIpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IEwubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBvdXRbaSAqIDJdID0gTFtpXTtcbiAgICAgICAgICBvdXRbaSAqIDIgKyAxXSA9IFJbaV07XG4gICAgICAgIH1cbiAgICAgICAgaXBjUmVuZGVyZXIuc2VuZCgnYXVkaW8tY2h1bmsnLCBCdWZmZXIuZnJvbShvdXQuYnVmZmVyKSk7XG4gICAgICB9O1xuICAgICAgbm9kZS5jb25uZWN0KGN0eC5kZXN0aW5hdGlvbik7XG4gICAgICBjdHguX19wdXBfY2FwdHVyZU5vZGVfXyA9IG5vZGU7XG4gICAgfVxuICAgIHJldHVybiBjdHg7XG4gIH1cbiAgUGF0Y2hlZEFDLnByb3RvdHlwZSA9IE9yaWdBQy5wcm90b3R5cGU7XG4gIE9iamVjdC5zZXRQcm90b3R5cGVPZihQYXRjaGVkQUMsIE9yaWdBQyk7XG4gIHdpbmRvdy5BdWRpb0NvbnRleHQgPSBQYXRjaGVkQUM7XG4gIGlmICgnd2Via2l0QXVkaW9Db250ZXh0JyBpbiB3aW5kb3cpIHdpbmRvdy53ZWJraXRBdWRpb0NvbnRleHQgPSBQYXRjaGVkQUM7XG5cbiAgY29uc3Qgb3JpZ1BsYXkgPSBIVE1MTWVkaWFFbGVtZW50LnByb3RvdHlwZS5wbGF5O1xuICBIVE1MTWVkaWFFbGVtZW50LnByb3RvdHlwZS5wbGF5ID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKCF0aGlzLl9fcHVwX2NhcHR1cmVkX18pIHtcbiAgICAgIHRoaXMuX19wdXBfY2FwdHVyZWRfXyA9IHRydWU7XG4gICAgICBjb25zdCBlbCA9IHRoaXM7XG4gICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHtcbiAgICAgICAgaWYgKCFzb3VyY2VkRWxlbWVudHMuaGFzKGVsKSkge1xuICAgICAgICAgIGNvbnN0IGN0eCA9IG5ldyBQYXRjaGVkQUMoKTtcbiAgICAgICAgICBjdHguY3JlYXRlTWVkaWFFbGVtZW50U291cmNlKGVsKS5jb25uZWN0KGN0eC5kZXN0aW5hdGlvbik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gb3JpZ1BsYXkuY2FsbCh0aGlzKTtcbiAgfTtcbn0pKCk7XG5gO1xuXG5leHBvcnQgaW50ZXJmYWNlIEF1ZGlvQ2FwdHVyZSB7XG4gIHRlYXJkb3duKCk6IFByb21pc2U8dm9pZD47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXVkaW9DYXB0dXJlT3B0aW9ucyB7XG4gIGVuY29kZXI6IEVuY29kZXJQaXBlbGluZTtcbiAgZ2V0VmlkZW9UaW1lTXM6ICgpID0+IG51bWJlcjtcbiAgb25FcnJvcjogKGVycm9yOiBFcnJvcikgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNldHVwQXVkaW9DYXB0dXJlKHtcbiAgZW5jb2RlcixcbiAgZ2V0VmlkZW9UaW1lTXMsXG4gIG9uRXJyb3IsXG59OiBBdWRpb0NhcHR1cmVPcHRpb25zKTogUHJvbWlzZTxBdWRpb0NhcHR1cmU+IHtcbiAgY29uc3QgcHJlbG9hZFBhdGggPSBqb2luKHRtcGRpcigpLCBgcHVwX2F1ZGlvX3ByZWxvYWRfJHtyYW5kb21VVUlEKCl9LmpzYCk7XG4gIGF3YWl0IHdyaXRlRmlsZShwcmVsb2FkUGF0aCwgQVVESU9fQ0FQVFVSRV9TQ1JJUFQpO1xuICBzZXNzaW9uLmRlZmF1bHRTZXNzaW9uLnJlZ2lzdGVyUHJlbG9hZFNjcmlwdCh7XG4gICAgdHlwZTogXCJmcmFtZVwiLFxuICAgIGlkOiBcInB1cC1hdWRpb1wiLFxuICAgIGZpbGVQYXRoOiBwcmVsb2FkUGF0aCxcbiAgfSk7XG5cbiAgaXBjTWFpbi5vbihcImF1ZGlvLW1ldGFcIiwgYXN5bmMgKF9lLCBkYXRhOiB7IHNhbXBsZVJhdGU6IG51bWJlciB9KSA9PiB7XG4gICAgY29uc3Qgc2FtcGxlUmF0ZSA9IGRhdGEuc2FtcGxlUmF0ZTtcbiAgICBjb25zdCBzdGFydE1zID0gZ2V0VmlkZW9UaW1lTXMoKTtcbiAgICBlbmNvZGVyLnNldHVwQXVkaW8oc2FtcGxlUmF0ZSk7XG4gICAgY29uc3Qgc2lsZW5jZVNhbXBsZXMgPSBNYXRoLmNlaWwoKHN0YXJ0TXMgKiBzYW1wbGVSYXRlKSAvIDEwMDApO1xuICAgIGlmIChzaWxlbmNlU2FtcGxlcyA8PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBlbmNvZGVyLmVuY29kZUF1ZGlvKEJ1ZmZlci5hbGxvYyhzaWxlbmNlU2FtcGxlcyAqIDIgKiA0KSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIG9uRXJyb3IoZXJyb3IgYXMgRXJyb3IpO1xuICAgIH1cbiAgfSk7XG5cbiAgaXBjTWFpbi5vbihcImF1ZGlvLWNodW5rXCIsIGFzeW5jIChfZSwgYnVmZmVyOiBCdWZmZXIpID0+IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgZW5jb2Rlci5lbmNvZGVBdWRpbyhidWZmZXIpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBvbkVycm9yKGVycm9yIGFzIEVycm9yKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiB7XG4gICAgYXN5bmMgdGVhcmRvd24oKSB7XG4gICAgICBpcGNNYWluLnJlbW92ZUFsbExpc3RlbmVycyhcImF1ZGlvLW1ldGFcIik7XG4gICAgICBpcGNNYWluLnJlbW92ZUFsbExpc3RlbmVycyhcImF1ZGlvLWNodW5rXCIpO1xuICAgICAgc2Vzc2lvbi5kZWZhdWx0U2Vzc2lvbi51bnJlZ2lzdGVyUHJlbG9hZFNjcmlwdChcInB1cC1hdWRpb1wiKTtcbiAgICAgIGF3YWl0IHJtKHByZWxvYWRQYXRoLCB7IGZvcmNlOiB0cnVlIH0pO1xuICAgIH0sXG4gIH07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA5LlxuXG5leHBvcnQgZnVuY3Rpb24gc2xlZXAobXM6IG51bWJlcikge1xuICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgbXMpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBlcmlvZGljYWwoY2FsbGJhY2s6IChjb3VudDogbnVtYmVyKSA9PiBQcm9taXNlPHZvaWQ+IHwgdm9pZCwgbXM6IG51bWJlcikge1xuICBsZXQgdG9rZW46IE5vZGVKUy5UaW1lb3V0O1xuICBsZXQgY2xvc2VkID0gZmFsc2U7XG4gIGFzeW5jIGZ1bmN0aW9uIHRpY2soY291bnQ6IG51bWJlcikge1xuICAgIGF3YWl0IGNhbGxiYWNrKGNvdW50KTtcbiAgICBpZiAoY2xvc2VkKSByZXR1cm47XG4gICAgdG9rZW4gPSBzZXRUaW1lb3V0KCgpID0+IHRpY2soY291bnQgKyAxKSwgbXMpO1xuICB9XG4gIHRva2VuID0gc2V0VGltZW91dCgoKSA9PiB0aWNrKDApLCBtcyk7XG4gIHJldHVybiAoKSA9PiB7XG4gICAgY2xvc2VkID0gdHJ1ZTtcbiAgICBjbGVhclRpbWVvdXQodG9rZW4pO1xuICB9O1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wNS5cblxuaW1wb3J0IHsgc2V0VGltZW91dCB9IGZyb20gXCJ0aW1lcnMvcHJvbWlzZXNcIjtcbmltcG9ydCB7IHNsZWVwIH0gZnJvbSBcIi4vdGltaW5nXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmV0cnlPcHRpb25zPEFyZ3MgZXh0ZW5kcyBhbnlbXSwgUmV0PiB7XG4gIGZuOiAoLi4uYXJnczogQXJncykgPT4gUHJvbWlzZTxSZXQ+O1xuICBtYXhBdHRlbXB0cz86IG51bWJlcjtcbiAgdGltZW91dD86IG51bWJlcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVzZVJldHJ5PEFyZ3MgZXh0ZW5kcyBhbnlbXSwgUmV0Pih7IGZuLCBtYXhBdHRlbXB0cyA9IDMsIHRpbWVvdXQgfTogUmV0cnlPcHRpb25zPEFyZ3MsIFJldD4pIHtcbiAgY29uc3QgdGltZW91dEVycm9yID0gbmV3IEVycm9yKGB0aW1lb3V0IG92ZXIgJHt0aW1lb3V0fW1zYCk7XG4gIHJldHVybiBhc3luYyBmdW5jdGlvbiAoLi4uYXJnczogQXJncykge1xuICAgIGxldCBhdHRlbXB0ID0gMDtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcHJvbWlzZXMgPSBbZm4oLi4uYXJncyldO1xuICAgICAgICBpZiAodGltZW91dCkge1xuICAgICAgICAgIHByb21pc2VzLnB1c2goXG4gICAgICAgICAgICBzZXRUaW1lb3V0KHRpbWVvdXQpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICB0aHJvdyB0aW1lb3V0RXJyb3I7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhd2FpdCBQcm9taXNlLnJhY2UocHJvbWlzZXMpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBhdHRlbXB0Kys7XG4gICAgICAgIGlmIChhdHRlbXB0ID49IG1heEF0dGVtcHRzKSB7XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCBzbGVlcChNYXRoLnBvdygyLCBhdHRlbXB0KSAqIDEwMCArIE1hdGgucmFuZG9tKCkgKiAxMDApO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDkuXG5cbmNvbnN0IFNVUFBPUlRFRF9QUk9UT0NPTFMgPSBbXCJmaWxlOlwiLCBcImh0dHA6XCIsIFwiaHR0cHM6XCIsIFwiZGF0YTpcIl07XG5jb25zdCBTT1VSQ0VfUEFUVEVSTiA9IC9eKGZpbGU6fGh0dHBzPzp8ZGF0YTopLztcblxuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrSFRNTChzb3VyY2U6IHN0cmluZyk6IHZvaWQge1xuICBpZiAoU09VUkNFX1BBVFRFUk4udGVzdChzb3VyY2UpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgcHJvdG9jb2wgPSBzb3VyY2Uuc3BsaXQoXCI6XCIpWzBdICsgXCI6XCI7XG4gIGNvbnN0IG1lc3NhZ2UgPSBTVVBQT1JURURfUFJPVE9DT0xTLmluY2x1ZGVzKHByb3RvY29sKVxuICAgID8gYHVuc3VwcG9ydGVkIHByb3RvY29sOiAke3Byb3RvY29sfSwgZXhwZWN0ZWQgJHtTVVBQT1JURURfUFJPVE9DT0xTLmpvaW4oXCIsIFwiKX1gXG4gICAgOiBgaW52YWxpZCBzb3VyY2UgZm9ybWF0LCBleHBlY3RlZCAke1NVUFBPUlRFRF9QUk9UT0NPTFMuam9pbihcIiwgXCIpfWA7XG5cbiAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMy8xMC5cblxuZXhwb3J0IGludGVyZmFjZSBXYWl0T3B0aW9ucyB7XG4gIHRpbWVvdXQ6IG51bWJlcjtcbiAgb25UaW1lb3V0PzogKCkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGNsYXNzIFdhaXRhYmxlRXZlbnQge1xuICBwcml2YXRlIF9wcm9taXNlPzogUHJvbWlzZTx2b2lkPjtcbiAgcHJpdmF0ZSBfcmVzb2x2ZT86ICgpID0+IHZvaWQ7XG4gIHByaXZhdGUgX3RpbWVvdXRUb2tlbj86IE5vZGVKUy5UaW1lb3V0O1xuXG4gIHdhaXQob3B0aW9ucz86IFdhaXRPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX3Byb21pc2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcImFscmVhZHkgd2FpdGluZ1wiKTtcbiAgICB9XG4gICAgdGhpcy5fcHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICB0aGlzLl9yZXNvbHZlID0gcmVzb2x2ZTtcbiAgICAgIGlmIChvcHRpb25zPy50aW1lb3V0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5fdGltZW91dFRva2VuID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgb3B0aW9ucy5vblRpbWVvdXQ/LigpO1xuICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfSwgb3B0aW9ucy50aW1lb3V0KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5fcHJvbWlzZTtcbiAgfVxuXG4gIHNpZ25hbCgpIHtcbiAgICBjbGVhclRpbWVvdXQodGhpcy5fdGltZW91dFRva2VuKTtcbiAgICB0aGlzLl9wcm9taXNlID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuX3Jlc29sdmU/LigpO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA5LlxuXG5pbXBvcnQgeyBCcm93c2VyV2luZG93IH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBVUkwgfSBmcm9tIFwidXJsXCI7XG5pbXBvcnQgeyBDb25jdXJyZW5jeUxpbWl0ZXIgfSBmcm9tIFwiLi4vYmFzZS9saW1pdGVyXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi4vYmFzZS9sb2dnaW5nXCI7XG5pbXBvcnQgeyBXYWl0YWJsZUV2ZW50IH0gZnJvbSBcIi4uL2Jhc2Uvd2FpdGFibGVfZXZlbnRcIjtcblxuY29uc3QgVEFHID0gXCJbTmV0d29ya11cIjtcblxuY29uc3QgbWFwID0gbmV3IE1hcChbXG4gIFtganNzei1ib3NzLmhkc2xiLmNvbWAsIGBqc3N6LWJvc3MuYmlsaWJpbGkuY29gXSwgLy9cbiAgW2Bib3NzLmhkc2xiLmNvbWAsIGBzaGpkLWJvc3MuYmlsaWJpbGkuY29gXSxcbl0pO1xuXG5leHBvcnQgZnVuY3Rpb24gcHJveGllZFVybCh1cmw6IHN0cmluZykge1xuICBpZiAoIXVybC5zdGFydHNXaXRoKFwiaHR0cFwiKSkge1xuICAgIHJldHVybiB1cmw7XG4gIH1cbiAgY29uc3QgcGFyc2VkID0gbmV3IFVSTCh1cmwpO1xuICBjb25zdCB0YXJnZXQgPSBtYXAuZ2V0KHBhcnNlZC5ob3N0bmFtZSk7XG4gIGlmICghdGFyZ2V0KSB7XG4gICAgcmV0dXJuIHVybDtcbiAgfVxuICBwYXJzZWQuaG9zdG5hbWUgPSB0YXJnZXQ7XG4gIHBhcnNlZC5wcm90b2NvbCA9IFwiaHR0cDpcIjtcbiAgcmV0dXJuIHBhcnNlZC50b1N0cmluZygpO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5ldHdvcmtPcHRpb25zIHtcbiAgc291cmNlOiBzdHJpbmc7XG4gIHdpbmRvdzogQnJvd3NlcldpbmRvdztcbiAgdXNlSW5uZXJQcm94eT86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRJbnRlcmNlcHRvcih7IHNvdXJjZSwgd2luZG93LCB1c2VJbm5lclByb3h5IH06IE5ldHdvcmtPcHRpb25zKSB7XG4gIGNvbnN0IHJlcSA9IHdpbmRvdy53ZWJDb250ZW50cy5zZXNzaW9uLndlYlJlcXVlc3Q7XG4gIGNvbnN0IGxpbWl0ZXIgPSBuZXcgQ29uY3VycmVuY3lMaW1pdGVyKDY0KTtcbiAgY29uc3QgZXZlbnRzID0gbmV3IE1hcDxzdHJpbmcsIFdhaXRhYmxlRXZlbnQ+KCk7XG5cbiAgYXN5bmMgZnVuY3Rpb24gd2FpdChrZXk6IHN0cmluZywgb25UaW1lb3V0PzogKCkgPT4gdm9pZCkge1xuICAgIGNvbnN0IGV2ZW50ID0gbmV3IFdhaXRhYmxlRXZlbnQoKTtcbiAgICBldmVudHMuc2V0KGtleSwgZXZlbnQpO1xuICAgIGF3YWl0IGV2ZW50LndhaXQoeyB0aW1lb3V0OiA1XzAwMCwgb25UaW1lb3V0IH0pLmZpbmFsbHkoKCkgPT4gZXZlbnRzLmRlbGV0ZShrZXkpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNpZ25hbChrZXk6IHN0cmluZykge1xuICAgIGV2ZW50cy5nZXQoa2V5KT8uc2lnbmFsKCk7XG4gIH1cblxuICByZXEub25CZWZvcmVSZXF1ZXN0KChkZXRhaWxzLCBjYWxsYmFjaykgPT4ge1xuICAgIGNvbnN0IHVybCA9IGRldGFpbHMudXJsO1xuICAgIGNvbnN0IHByb3hpZWQgPSB1c2VJbm5lclByb3h5ID8gcHJveGllZFVybCh1cmwpIDogdXJsO1xuICAgIGxpbWl0ZXIuc2NoZWR1bGUoKCkgPT4ge1xuICAgICAgY29uc3Qga2V5ID0gYCR7d2luZG93LmlkfV8ke2RldGFpbHMuaWR9YDtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhUQUcsIGBzdGFydDpgLCB7XG4gICAgICAgIGtleSxcbiAgICAgICAgdXJsLFxuICAgICAgICBwcm94aWVkLFxuICAgICAgICBtZXRob2Q6IGRldGFpbHMubWV0aG9kLFxuICAgICAgICBzb3VyY2UsXG4gICAgICAgIHN0YXRzOiBsaW1pdGVyLnN0YXRzLFxuICAgICAgfSk7XG4gICAgICBpZiAocHJveGllZCA9PT0gdXJsKSB7XG4gICAgICAgIGNhbGxiYWNrKHsgY2FuY2VsOiBmYWxzZSB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNhbGxiYWNrKHsgY2FuY2VsOiBmYWxzZSwgcmVkaXJlY3RVUkw6IHByb3hpZWQgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gd2FpdChrZXksICgpID0+IHtcbiAgICAgICAgbG9nZ2VyLndhcm4oVEFHLCBgbWF5YmUgdGltZW91dDpgLCB7XG4gICAgICAgICAga2V5LFxuICAgICAgICAgIHVybCxcbiAgICAgICAgICBwcm94aWVkLFxuICAgICAgICAgIG1ldGhvZDogZGV0YWlscy5tZXRob2QsXG4gICAgICAgICAgc291cmNlLFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICByZXEub25IZWFkZXJzUmVjZWl2ZWQoKHsgcmVzcG9uc2VIZWFkZXJzIH0sIGNhbGxiYWNrKSA9PiB7XG4gICAgZGVsZXRlIHJlc3BvbnNlSGVhZGVycz8uW1wieC1mcmFtZS1vcHRpb25zXCJdO1xuICAgIGRlbGV0ZSByZXNwb25zZUhlYWRlcnM/LltcIlgtRnJhbWUtT3B0aW9uc1wiXTtcbiAgICBkZWxldGUgcmVzcG9uc2VIZWFkZXJzPy5bXCJjb250ZW50LXNlY3VyaXR5LXBvbGljeVwiXTtcbiAgICBkZWxldGUgcmVzcG9uc2VIZWFkZXJzPy5bXCJDb250ZW50LVNlY3VyaXR5LVBvbGljeVwiXTtcbiAgICBjYWxsYmFjayh7IGNhbmNlbDogZmFsc2UsIHJlc3BvbnNlSGVhZGVycyB9KTtcbiAgfSk7XG5cbiAgcmVxLm9uQ29tcGxldGVkKChkZXRhaWxzKSA9PiB7XG4gICAgY29uc3Qga2V5ID0gYCR7d2luZG93LmlkfV8ke2RldGFpbHMuaWR9YDtcbiAgICBzaWduYWwoa2V5KTtcbiAgICBsb2dnZXIuZGVidWcoVEFHLCBgY29tcGxldGVkOmAsIHtcbiAgICAgIGtleSxcbiAgICAgIHVybDogZGV0YWlscy51cmwsXG4gICAgICBtZXRob2Q6IGRldGFpbHMubWV0aG9kLFxuICAgICAgc3RhdHVzQ29kZTogZGV0YWlscy5zdGF0dXNDb2RlLFxuICAgICAgc291cmNlLFxuICAgIH0pO1xuICB9KTtcblxuICByZXEub25FcnJvck9jY3VycmVkKChkZXRhaWxzKSA9PiB7XG4gICAgY29uc3Qga2V5ID0gYCR7d2luZG93LmlkfV8ke2RldGFpbHMuaWR9YDtcbiAgICBzaWduYWwoa2V5KTtcbiAgICBsb2dnZXIuZXJyb3IoVEFHLCBgZXJyb3I6YCwge1xuICAgICAga2V5LFxuICAgICAgdXJsOiBkZXRhaWxzLnVybCxcbiAgICAgIG1ldGhvZDogZGV0YWlscy5tZXRob2QsXG4gICAgICBlcnJvcjogZGV0YWlscy5lcnJvcixcbiAgICAgIHNvdXJjZSxcbiAgICB9KTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1bnNldEludGVyY2VwdG9yKHdpbmRvdzogQnJvd3NlcldpbmRvdykge1xuICBjb25zdCByZXEgPSB3aW5kb3cud2ViQ29udGVudHMuc2Vzc2lvbi53ZWJSZXF1ZXN0O1xuICByZXEub25CZWZvcmVSZXF1ZXN0KG51bGwpO1xuICByZXEub25IZWFkZXJzUmVjZWl2ZWQobnVsbCk7XG4gIHJlcS5vbkNvbXBsZXRlZChudWxsKTtcbiAgcmVxLm9uRXJyb3JPY2N1cnJlZChudWxsKTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMjcuXG5cbmltcG9ydCB7IEJyb3dzZXJXaW5kb3cgfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuLi9iYXNlL2xvZ2dpbmdcIjtcbmltcG9ydCB7IHVzZVJldHJ5IH0gZnJvbSBcIi4uL2Jhc2UvcmV0cnlcIjtcbmltcG9ydCB7IHNsZWVwIH0gZnJvbSBcIi4uL2Jhc2UvdGltaW5nXCI7XG5pbXBvcnQgeyBjaGVja0hUTUwgfSBmcm9tIFwiLi9odG1sX2NoZWNrXCI7XG5pbXBvcnQgeyBwcm94aWVkVXJsLCBzZXRJbnRlcmNlcHRvciwgdW5zZXRJbnRlcmNlcHRvciB9IGZyb20gXCIuL25ldHdvcmtcIjtcbmltcG9ydCB7IGNyZWF0ZVN0ZWdvVVJMIH0gZnJvbSBcIi4vcHJvdG9jb2xcIjtcbmltcG9ydCB0eXBlIHsgUmVuZGVyT3B0aW9ucyB9IGZyb20gXCIuL3NjaGVtYVwiO1xuXG5jb25zdCBUQUcgPSBcIltXaW5kb3ddXCI7XG5cbmZ1bmN0aW9uIHdhaXRGb3JGaW5pc2god2luOiBCcm93c2VyV2luZG93LCBhY3Rpb246ICgpID0+IHZvaWQpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiByZWplY3QobmV3IEVycm9yKFwibG9hZCB3aW5kb3cgdGltZW91dFwiKSksIDMwXzAwMCk7XG4gICAgY29uc3QgZG9uZSA9IChlcnI/OiBFcnJvcikgPT4ge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgZXJyID8gcmVqZWN0KGVycikgOiByZXNvbHZlKCk7XG4gICAgfTtcbiAgICB3aW4ud2ViQ29udGVudHMub25jZShcImRpZC1zdG9wLWxvYWRpbmdcIiwgKCkgPT4gZG9uZSgpKTtcbiAgICB3aW4ud2ViQ29udGVudHMub25jZShcImRpZC1mcmFtZS1maW5pc2gtbG9hZFwiLCAoXywgaXNNYWluRnJhbWUsIGZyYW1lUHJvY2Vzc0lkLCBmcmFtZVJvdXRpbmdJZCkgPT4ge1xuICAgICAgbG9nZ2VyLmRlYnVnKFRBRywgXCJkaWQtZnJhbWUtZmluaXNoLWxvYWQ6XCIsIHsgaXNNYWluRnJhbWUsIGZyYW1lUHJvY2Vzc0lkLCBmcmFtZVJvdXRpbmdJZCB9KTtcbiAgICB9KTtcbiAgICB3aW4ud2ViQ29udGVudHMub25jZShcImRvbS1yZWFkeVwiLCAoKSA9PiB7XG4gICAgICBsb2dnZXIuZGVidWcoVEFHLCBcImRvbS1yZWFkeVwiKTtcbiAgICB9KTtcbiAgICB3aW4ud2ViQ29udGVudHMub25jZShcImRpZC1mYWlsLWxvYWRcIiwgKF9lLCBjb2RlLCBkZXNjLCB1cmwpID0+XG4gICAgICBkb25lKG5ldyBFcnJvcihgZmFpbGVkIHRvIGxvYWQgJHt1cmx9OiBbJHtjb2RlfV0gJHtkZXNjfWApKSxcbiAgICApO1xuICAgIHdpbi53ZWJDb250ZW50cy5vbmNlKFwicmVuZGVyLXByb2Nlc3MtZ29uZVwiLCAoX2UsIHsgZXhpdENvZGUsIHJlYXNvbiB9KSA9PlxuICAgICAgZG9uZShuZXcgRXJyb3IoYHJlbmRlcmVyIGNyYXNoZWQ6ICR7ZXhpdENvZGV9LCAke3JlYXNvbn1gKSksXG4gICAgKTtcbiAgICBhY3Rpb24oKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHdhaXRGb3JEZXN0cm95KHdpbjogQnJvd3NlcldpbmRvdykge1xuICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcbiAgICB1bnNldEludGVyY2VwdG9yKHdpbik7XG4gICAgd2luLm9uY2UoXCJjbG9zZWRcIiwgcmVzb2x2ZSk7XG4gICAgd2luLmRlc3Ryb3koKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgV2luZG93T3B0aW9ucyB7XG4gIHNvdXJjZTogc3RyaW5nO1xuICBvbkNyZWF0ZWQ/OiAod2luZG93OiBCcm93c2VyV2luZG93KSA9PiBQcm9taXNlPHZvaWQ+O1xuICByZW5kZXJlcjogUmVuZGVyT3B0aW9ucztcbiAgd2FybXVwPzogYm9vbGVhbjtcbn1cblxuYXN5bmMgZnVuY3Rpb24gb3BlbldpbmRvdyh7IHNvdXJjZSwgb25DcmVhdGVkLCByZW5kZXJlciwgd2FybXVwIH06IFdpbmRvd09wdGlvbnMpOiBQcm9taXNlPEJyb3dzZXJXaW5kb3c+IHtcbiAgY2hlY2tIVE1MKHNvdXJjZSk7XG5cbiAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0LCB1c2VJbm5lclByb3h5IH0gPSByZW5kZXJlcjtcbiAgY29uc3Qgc3JjID0gdXNlSW5uZXJQcm94eSA/IHByb3hpZWRVcmwoc291cmNlKSA6IHNvdXJjZTtcblxuICBjb25zdCB3aW4gPSBuZXcgQnJvd3NlcldpbmRvdyh7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0OiBoZWlnaHQgKyAxLFxuICAgIHNob3c6IGZhbHNlLFxuICAgIHRyYW5zcGFyZW50OiB0cnVlLFxuICAgIGJhY2tncm91bmRDb2xvcjogdW5kZWZpbmVkLFxuICAgIGZyYW1lOiBmYWxzZSxcbiAgICB3ZWJQcmVmZXJlbmNlczoge1xuICAgICAgb2Zmc2NyZWVuOiB0cnVlLFxuICAgICAgYmFja2dyb3VuZFRocm90dGxpbmc6IGZhbHNlLFxuICAgICAgbm9kZUludGVncmF0aW9uOiB0cnVlLFxuICAgICAgbm9kZUludGVncmF0aW9uSW5TdWJGcmFtZXM6IHRydWUsXG4gICAgICBub2RlSW50ZWdyYXRpb25JbldvcmtlcjogdHJ1ZSxcbiAgICAgIGNvbnRleHRJc29sYXRpb246IGZhbHNlLFxuICAgICAgd2ViU2VjdXJpdHk6IGZhbHNlLFxuICAgICAgYWxsb3dSdW5uaW5nSW5zZWN1cmVDb250ZW50OiB0cnVlLFxuICAgICAgZXhwZXJpbWVudGFsRmVhdHVyZXM6IHRydWUsXG4gICAgfSxcbiAgfSk7XG4gIHNldEludGVyY2VwdG9yKHsgc291cmNlLCB3aW5kb3c6IHdpbiwgdXNlSW5uZXJQcm94eSB9KTtcbiAgaWYgKCF3YXJtdXApIHtcbiAgICBhd2FpdCBvbkNyZWF0ZWQ/Lih3aW4pO1xuICB9XG5cbiAgd2luLndlYkNvbnRlbnRzLm9uKFwiY29uc29sZS1tZXNzYWdlXCIsICh7IGxldmVsLCBtZXNzYWdlLCBsaW5lTnVtYmVyLCBzb3VyY2VJZCB9KSA9PiB7XG4gICAgY29uc3QgbXNncyA9IFtUQUcsIFwiY29uc29sZTpcIiwgeyBtZXNzYWdlLCBsaW5lTnVtYmVyLCBzb3VyY2VJZCwgc291cmNlIH1dO1xuICAgIGxldmVsID09PSBcImVycm9yXCIgPyBsb2dnZXIuZXJyb3IoLi4ubXNncykgOiBsb2dnZXIuZGVidWcoLi4ubXNncyk7XG4gIH0pO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgdXJsID0gY3JlYXRlU3RlZ29VUkwoc3JjLCB7IHdpZHRoLCBoZWlnaHQgfSk7XG4gICAgYXdhaXQgd2FpdEZvckZpbmlzaCh3aW4sICgpID0+IHdpbi5sb2FkVVJMKHVybCkpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgYXdhaXQgd2FpdEZvckRlc3Ryb3kod2luKTtcbiAgICB0aHJvdyBlO1xuICB9XG5cbiAgcmV0dXJuIHdpbjtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxvYWRXaW5kb3coeyBzb3VyY2UsIG9uQ3JlYXRlZCwgcmVuZGVyZXIgfTogV2luZG93T3B0aW9ucyk6IFByb21pc2U8QnJvd3NlcldpbmRvdz4ge1xuICBsZXQgd2FybXVwOiBCcm93c2VyV2luZG93IHwgdW5kZWZpbmVkO1xuICB0cnkge1xuICAgIHdhcm11cCA9IGF3YWl0IHVzZVJldHJ5KHsgZm46IG9wZW5XaW5kb3csIG1heEF0dGVtcHRzOiAyIH0pKHsgc291cmNlLCByZW5kZXJlciwgd2FybXVwOiB0cnVlIH0pO1xuICB9IGNhdGNoIChlKSB7XG4gICAgY29uc3QgeyBtZXNzYWdlLCBzdGFjayB9ID0gZSBhcyBFcnJvcjtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGZhaWxlZCB0byBsb2FkIHdpbmRvdzogJHtKU09OLnN0cmluZ2lmeSh7IHNvdXJjZSwgbWVzc2FnZSwgc3RhY2sgfSl9YCk7XG4gIH1cblxuICB3YXJtdXAud2ViQ29udGVudHMucmVtb3ZlQWxsTGlzdGVuZXJzKCk7XG4gIHVuc2V0SW50ZXJjZXB0b3Iod2FybXVwKTtcblxuICAvLyB3YXJtdXAgZm9yIHNoYWRlcnNcbiAgYXdhaXQgc2xlZXAoMjAwMCk7XG4gIGF3YWl0IHdhaXRGb3JEZXN0cm95KHdhcm11cCk7XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgb3BlbldpbmRvdyh7IHNvdXJjZSwgcmVuZGVyZXIsIG9uQ3JlYXRlZCB9KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGNvbnN0IHsgbWVzc2FnZSwgc3RhY2sgfSA9IGUgYXMgRXJyb3I7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBmYWlsZWQgdG8gbG9hZCB3aW5kb3c6ICR7SlNPTi5zdHJpbmdpZnkoeyBzb3VyY2UsIG1lc3NhZ2UsIHN0YWNrIH0pfWApO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA5LlxuXG5pbXBvcnQgeyB0eXBlIE5hdGl2ZUltYWdlIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBFbmNvZGVyUGlwZWxpbmUgfSBmcm9tIFwiLi4vYmFzZS9lbmNvZGVyL3BpcGVsaW5lXCI7XG5pbXBvcnQgeyBGcmFtZURyb3BTdGF0cyB9IGZyb20gXCIuLi9iYXNlL2ZyYW1lX2Ryb3BcIjtcbmltcG9ydCB7IGlzRW1wdHkgfSBmcm9tIFwiLi4vYmFzZS9pbWFnZVwiO1xuaW1wb3J0IHsgc2V0dXBBdWRpb0NhcHR1cmUsIHR5cGUgQXVkaW9DYXB0dXJlIH0gZnJvbSBcIi4vYXVkaW9cIjtcbmltcG9ydCB0eXBlIHsgSXBjRG9uZVBheWxvYWQsIElwY1dyaXRlciB9IGZyb20gXCIuL2lwY1wiO1xuaW1wb3J0IHR5cGUgeyBSZW5kZXJPcHRpb25zIH0gZnJvbSBcIi4vc2NoZW1hXCI7XG5pbXBvcnQgeyBkZWNvZGVTdGVnbywgc3RhcnRTdGVnbywgc3RvcFN0ZWdvIH0gZnJvbSBcIi4vc3RlZ29cIjtcbmltcG9ydCB7IGxvYWRXaW5kb3cgfSBmcm9tIFwiLi93aW5kb3dcIjtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlbmRlcih3cml0ZXI6IElwY1dyaXRlciwgc291cmNlOiBzdHJpbmcsIG9wdGlvbnM6IFJlbmRlck9wdGlvbnMpOiBQcm9taXNlPElwY0RvbmVQYXlsb2FkPiB7XG4gIGNvbnN0IHsgZnBzLCB3aWR0aCwgaGVpZ2h0LCBkdXJhdGlvbiwgd2l0aEF1ZGlvLCBvdXRGaWxlLCBkaXNhYmxlR3B1IH0gPSBvcHRpb25zO1xuXG4gIGF3YWl0IHVzaW5nIGVuY29kZXIgPSBhd2FpdCBFbmNvZGVyUGlwZWxpbmUuY3JlYXRlKHsgd2lkdGgsIGhlaWdodCwgZnBzLCBvdXRGaWxlLCB3aXRoQXVkaW8sIGRpc2FibGVHcHUgfSk7XG5cbiAgY29uc3QgdG90YWwgPSBNYXRoLmNlaWwoZnBzICogZHVyYXRpb24pO1xuICBjb25zdCBmcmFtZUludGVydmFsID0gMTAwMCAvIGZwcztcblxuICBsZXQgd3JpdHRlbiA9IDA7XG4gIGxldCBsYXN0V3JpdHRlblRpbWU6IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgbGV0IHByb2dyZXNzID0gMDtcbiAgbGV0IGVuY29kZUVycm9yOiBFcnJvciB8IHVuZGVmaW5lZDtcbiAgbGV0IHJlc29sdmVyOiAoKCkgPT4gdm9pZCkgfCB1bmRlZmluZWQ7XG4gIGxldCByZWplY3RlcjogKChyZWFzb24/OiB1bmtub3duKSA9PiB2b2lkKSB8IHVuZGVmaW5lZDtcbiAgY29uc3QgZHJvcFN0YXRzID0gbmV3IEZyYW1lRHJvcFN0YXRzKGZwcyk7XG5cbiAgbGV0IGF1ZGlvOiBBdWRpb0NhcHR1cmUgfCB1bmRlZmluZWQ7XG4gIGNvbnN0IHNjaGVkdWxlRnJhbWUgPSAoZnJhbWU6IEJ1ZmZlcikgPT4ge1xuICAgIHdyaXR0ZW4rKztcbiAgICBlbmNvZGVyLmVuY29kZUJHUkEoZnJhbWUpLmNhdGNoKChlKSA9PiAoZW5jb2RlRXJyb3IgPz89IGUpKTtcbiAgfTtcblxuICBjb25zdCBwYWludCA9IChfZTogdW5rbm93biwgX3I6IHVua25vd24sIGltYWdlOiBOYXRpdmVJbWFnZSkgPT4ge1xuICAgIGlmIChlbmNvZGVFcnJvcikge1xuICAgICAgcmVqZWN0ZXI/LihlbmNvZGVFcnJvcik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGlzRW1wdHkoaW1hZ2UpKSByZXR1cm47XG5cbiAgICBjb25zdCBiaXRtYXAgPSBpbWFnZS50b0JpdG1hcCgpO1xuICAgIGNvbnN0IGN1cnJlbnRUaW1lID0gZGVjb2RlU3RlZ28oYml0bWFwLCBpbWFnZS5nZXRTaXplKCkpO1xuICAgIGlmIChjdXJyZW50VGltZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBlbmNvZGVFcnJvciA/Pz0gbmV3IEVycm9yKGBubyB0aW1lc3RhbXAgQCAke3dyaXR0ZW59YCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYnl0ZXNQZXJSb3cgPSB3aWR0aCAqIDQ7XG4gICAgY29uc3QgY3JvcHBlZCA9IEJ1ZmZlci5mcm9tKGJpdG1hcC5idWZmZXIsIGJpdG1hcC5ieXRlT2Zmc2V0LCBoZWlnaHQgKiBieXRlc1BlclJvdyk7XG5cbiAgICBpZiAobGFzdFdyaXR0ZW5UaW1lID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHNjaGVkdWxlRnJhbWUoY3JvcHBlZCk7XG4gICAgICBkcm9wU3RhdHMud3JvdGUoKTtcbiAgICAgIGxhc3RXcml0dGVuVGltZSA9IGN1cnJlbnRUaW1lO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB0aW1lRGVsdGEgPSBjdXJyZW50VGltZSAtIGxhc3RXcml0dGVuVGltZTtcbiAgICAgIGlmICh0aW1lRGVsdGEgPj0gZnJhbWVJbnRlcnZhbCAqIDAuOCkge1xuICAgICAgICBpZiAodGltZURlbHRhIDw9IGZyYW1lSW50ZXJ2YWwgKiAxLjIpIHtcbiAgICAgICAgICBzY2hlZHVsZUZyYW1lKGNyb3BwZWQpO1xuICAgICAgICAgIGRyb3BTdGF0cy53cm90ZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGZyYW1lc1RvSW5zZXJ0ID0gTWF0aC5yb3VuZCh0aW1lRGVsdGEgLyBmcmFtZUludGVydmFsKTtcbiAgICAgICAgICBkcm9wU3RhdHMuZHJvcHBlZChmcmFtZXNUb0luc2VydCAtIDEpO1xuICAgICAgICAgIGRyb3BTdGF0cy53cm90ZSgpO1xuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZnJhbWVzVG9JbnNlcnQgJiYgd3JpdHRlbiA8IHRvdGFsOyBpKyspIHtcbiAgICAgICAgICAgIHNjaGVkdWxlRnJhbWUoY3JvcHBlZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxhc3RXcml0dGVuVGltZSA9IGN1cnJlbnRUaW1lO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IG5ld1Byb2dyZXNzID0gTWF0aC5mbG9vcigod3JpdHRlbiAvIHRvdGFsKSAqIDEwMCk7XG4gICAgaWYgKE1hdGguYWJzKG5ld1Byb2dyZXNzIC0gcHJvZ3Jlc3MpID4gMTApIHtcbiAgICAgIHByb2dyZXNzID0gbmV3UHJvZ3Jlc3M7XG4gICAgICB3cml0ZXIud3JpdGVQcm9ncmVzcyhwcm9ncmVzcyk7XG4gICAgfVxuXG4gICAgY29uc3QgZHVyYXRpb25NcyA9IGR1cmF0aW9uICogMTAwMDtcbiAgICBpZiAoY3VycmVudFRpbWUgPj0gZHVyYXRpb25NcyAtIGZyYW1lSW50ZXJ2YWwgKiAwLjUgfHwgd3JpdHRlbiA+PSB0b3RhbCkge1xuICAgICAgcmVzb2x2ZXI/LigpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCB3aW4gPSBhd2FpdCBsb2FkV2luZG93KHtcbiAgICBzb3VyY2UsXG4gICAgcmVuZGVyZXI6IG9wdGlvbnMsXG4gICAgb25DcmVhdGVkOiBhc3luYyAoKSA9PiB7XG4gICAgICBpZiAod2l0aEF1ZGlvKSB7XG4gICAgICAgIGF1ZGlvID0gYXdhaXQgc2V0dXBBdWRpb0NhcHR1cmUoe1xuICAgICAgICAgIGVuY29kZXIsXG4gICAgICAgICAgZ2V0VmlkZW9UaW1lTXM6ICgpID0+IGxhc3RXcml0dGVuVGltZSA/PyAwLFxuICAgICAgICAgIG9uRXJyb3I6IChlKSA9PiAoZW5jb2RlRXJyb3IgPz89IGUpLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LFxuICB9KTtcbiAgY29uc3QgY2RwID0gd2luLndlYkNvbnRlbnRzLmRlYnVnZ2VyO1xuICB3aW4ud2ViQ29udGVudHMuc2V0RnJhbWVSYXRlKGZwcyk7XG4gIGlmICghd2luLndlYkNvbnRlbnRzLmlzUGFpbnRpbmcoKSkgd2luLndlYkNvbnRlbnRzLnN0YXJ0UGFpbnRpbmcoKTtcbiAgY2RwLmF0dGFjaChcIjEuM1wiKTtcbiAgd2luLndlYkNvbnRlbnRzLm9uKFwicGFpbnRcIiwgcGFpbnQpO1xuXG4gIHRyeSB7XG4gICAgYXdhaXQgc3RhcnRTdGVnbyhjZHApO1xuICAgIGF3YWl0IG5ldyBQcm9taXNlPHZvaWQ+KChyLCBqKSA9PiAoW3Jlc29sdmVyLCByZWplY3Rlcl0gPSBbciwgal0pKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCBzdG9wU3RlZ28oY2RwKTtcbiAgICB3aW4ud2ViQ29udGVudHMub2ZmKFwicGFpbnRcIiwgcGFpbnQpO1xuICAgIHdpbi5jbG9zZSgpO1xuICAgIGF3YWl0IGF1ZGlvPy50ZWFyZG93bigpO1xuICAgIGF3YWl0IGVuY29kZXIuZmluaXNoKCk7XG4gIH1cblxuICBpZiAoZW5jb2RlRXJyb3IgfHwgd3JpdHRlbiA9PT0gMCkge1xuICAgIHRocm93IGVuY29kZUVycm9yID8/IG5ldyBFcnJvcihcIm5vIGZyYW1lcyBjYXB0dXJlZFwiKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBkcm9wU2NvcmUgPSBkcm9wU3RhdHMuZmluYWxpemUoKTtcbiAgICByZXR1cm4geyB3cml0dGVuLCBqYW5rOiBkcm9wU2NvcmUuamFuaywgb3V0RmlsZSB9O1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAzLzEzLlxuXG5pbXBvcnQgdHlwZSB7IERlYnVnZ2VyIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5cbmNvbnN0IEFEVkFOQ0VfVElNRU9VVF9NUyA9IDMwXzAwMDtcblxuZXhwb3J0IGZ1bmN0aW9uIGFkdmFuY2VWaXJ0dWFsVGltZShjZHA6IERlYnVnZ2VyLCBidWRnZXQ6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNkcC5vZmYoXCJtZXNzYWdlXCIsIGhhbmRsZXIpO1xuICAgICAgcmVqZWN0KG5ldyBFcnJvcihgYWR2YW5jZVZpcnR1YWxUaW1lIHRpbWVkIG91dCBhZnRlciAke0FEVkFOQ0VfVElNRU9VVF9NU31tc2ApKTtcbiAgICB9LCBBRFZBTkNFX1RJTUVPVVRfTVMpO1xuXG4gICAgY29uc3QgaGFuZGxlciA9IChfOiBFbGVjdHJvbi5FdmVudCwgbWV0aG9kOiBzdHJpbmcpID0+IHtcbiAgICAgIGlmIChtZXRob2QgPT09IFwiRW11bGF0aW9uLnZpcnR1YWxUaW1lQnVkZ2V0RXhwaXJlZFwiKSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgY2RwLm9mZihcIm1lc3NhZ2VcIiwgaGFuZGxlcik7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNkcC5vbihcIm1lc3NhZ2VcIiwgaGFuZGxlcik7XG4gICAgY2RwLnNlbmRDb21tYW5kKFwiRW11bGF0aW9uLnNldFZpcnR1YWxUaW1lUG9saWN5XCIsIHtcbiAgICAgIHBvbGljeTogXCJhZHZhbmNlXCIsXG4gICAgICBidWRnZXQsXG4gICAgfSk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGF1c2VWaXJ0dWFsVGltZShjZHA6IERlYnVnZ2VyKTogUHJvbWlzZTx2b2lkPiB7XG4gIHJldHVybiBjZHAuc2VuZENvbW1hbmQoXCJFbXVsYXRpb24uc2V0VmlydHVhbFRpbWVQb2xpY3lcIiwgeyBwb2xpY3k6IFwicGF1c2VcIiB9KTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMTAuXG5cbmV4cG9ydCBmdW5jdGlvbiBkZWJvdW5jZTxUIGV4dGVuZHMgKC4uLmFyZ3M6IHVua25vd25bXSkgPT4gdm9pZD4oZm46IFQsIGRlbGF5ID0gMTAwKTogVCB7XG4gIGxldCB0aW1lcjogTm9kZUpTLlRpbWVvdXQgfCB1bmRlZmluZWQ7XG4gIHJldHVybiBmdW5jdGlvbiAodGhpczogdW5rbm93biwgLi4uYXJnczogUGFyYW1ldGVyczxUPikge1xuICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGZuLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgdGltZXIgPSB1bmRlZmluZWQ7XG4gICAgfSwgZGVsYXkpO1xuICB9IGFzIFQ7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAxLzMwLlxuXG5leHBvcnQgY2xhc3MgTGF6eTxUPiB7XG4gIGNvbnN0cnVjdG9yKHJlYWRvbmx5IG1ha2VWYWx1ZTogKCkgPT4gVCkge31cblxuICBnZXQgdmFsdWUoKTogVCB7XG4gICAgaWYgKCF0aGlzLl9pbml0aWFsaXplZCkge1xuICAgICAgdGhpcy5fdmFsdWUgPSB0aGlzLm1ha2VWYWx1ZSgpO1xuICAgICAgdGhpcy5faW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fdmFsdWUhO1xuICB9XG5cbiAgZ2V0IGluaXRpYWxpemVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9pbml0aWFsaXplZDtcbiAgfVxuXG4gIHByaXZhdGUgX2luaXRpYWxpemVkID0gZmFsc2U7XG4gIHByaXZhdGUgX3ZhbHVlOiBUIHwgdW5kZWZpbmVkO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8wMS5cblxuZXhwb3J0IGNvbnN0IFRJQ0tfU1lNQk9MID0gXCJfX3B1cF90aWNrX19cIjtcblxuZXhwb3J0IGludGVyZmFjZSBUaWNrSW5qZWN0b3JPcHRpb25zIHtcbiAgLyoqXG4gICAqIFdoZW4gdHJ1ZSwgc2tpcHMgdGhlIHRvcC1mcmFtZSBndWFyZCBzbyB0aGUgaW5qZWN0b3IgcnVucyBpbiB0aGUgbWFpbiBkb2N1bWVudC5cbiAgICogUmVxdWlyZWQgZm9yIFB1cHBldGVlciBtb2RlIHdoZXJlIHRoZSBwYWdlIGlzIGxvYWRlZCBkaXJlY3RseSAobm8gc3RlZ28gaWZyYW1lIHdyYXBwZXIpLlxuICAgKiBEZWZhdWx0OiBmYWxzZSAoRWxlY3Ryb24vc3RlZ28gbW9kZSDigJQgb25seSBpbmplY3QgaW4gaWZyYW1lcykuXG4gICAqL1xuICBza2lwRnJhbWVHdWFyZD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQnVpbGRzIHRoZSBKUyBpbmplY3RvciB0aGF0IGhvb2tzIGFsbCB0aW1lLXJlbGF0ZWQgZ2xvYmFscyBpbiB0aGUgdGFyZ2V0IGZyYW1lLlxuICogSW4gRWxlY3Ryb24vc3RlZ28gbW9kZSAoZGVmYXVsdCksIGd1YXJkcyBhZ2FpbnN0IHJ1bm5pbmcgaW4gdGhlIHRvcC1sZXZlbCBmcmFtZS5cbiAqIEluIFB1cHBldGVlciBtb2RlIChza2lwRnJhbWVHdWFyZDogdHJ1ZSksIGluamVjdHMgZGlyZWN0bHkgaW50byB0aGUgbWFpbiBkb2N1bWVudC5cbiAqIE11c3QgYmUgaW5qZWN0ZWQgdmlhIFBhZ2UuYWRkU2NyaXB0VG9FdmFsdWF0ZU9uTmV3RG9jdW1lbnQgQU5EIGRpcmVjdGx5IGludG9cbiAqIGFscmVhZHktbG9hZGVkIGZyYW1lcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkVGlja0luamVjdG9yKG9wdHM/OiBUaWNrSW5qZWN0b3JPcHRpb25zKTogc3RyaW5nIHtcbiAgY29uc3QgZnJhbWVHdWFyZCA9IG9wdHM/LnNraXBGcmFtZUd1YXJkID8gXCJcIiA6IFwiaWYgKHdpbmRvdy5zZWxmID09PSB3aW5kb3cudG9wKSByZXR1cm47XCI7XG4gIHJldHVybiBgKGZ1bmN0aW9uKCkge1xuICAke2ZyYW1lR3VhcmR9XG4gIGlmICh0eXBlb2YgJHtUSUNLX1NZTUJPTH0gIT09ICd1bmRlZmluZWQnKSByZXR1cm47XG5cbiAgY29uc3Qgb3JpZyA9IHtcbiAgICBEYXRlOiBEYXRlLFxuICAgIGRhdGVOb3c6IERhdGUubm93LmJpbmQoRGF0ZSksXG4gICAgcGVyZm9ybWFuY2VOb3c6IHBlcmZvcm1hbmNlLm5vdy5iaW5kKHBlcmZvcm1hbmNlKSxcbiAgICByYWY6IHJlcXVlc3RBbmltYXRpb25GcmFtZS5iaW5kKHdpbmRvdyksXG4gICAgY2FmOiBjYW5jZWxBbmltYXRpb25GcmFtZS5iaW5kKHdpbmRvdyksXG4gICAgc2V0VGltZW91dDogc2V0VGltZW91dC5iaW5kKHdpbmRvdyksXG4gICAgY2xlYXJUaW1lb3V0OiBjbGVhclRpbWVvdXQuYmluZCh3aW5kb3cpLFxuICAgIHNldEludGVydmFsOiBzZXRJbnRlcnZhbC5iaW5kKHdpbmRvdyksXG4gICAgY2xlYXJJbnRlcnZhbDogY2xlYXJJbnRlcnZhbC5iaW5kKHdpbmRvdyksXG4gIH07XG5cbiAgbGV0IGN1cnJNcyA9IDA7XG4gIGxldCByYWZRdWV1ZSA9IFtdO1xuICBjb25zdCB0aW1lcnMgPSB7fTtcbiAgbGV0IG5leHRJZCA9IDE7XG4gIGNvbnN0IGRhdGVPcmlnaW4gPSBuZXcgb3JpZy5EYXRlKCk7XG4gIGNvbnN0IHBlcmZPcmlnaW4gPSBvcmlnLnBlcmZvcm1hbmNlTm93KCk7XG5cbiAgcGVyZm9ybWFuY2Uubm93ID0gZnVuY3Rpb24oKSB7IHJldHVybiBwZXJmT3JpZ2luICsgY3Vyck1zOyB9O1xuICBEYXRlLm5vdyA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gZGF0ZU9yaWdpbi5nZXRUaW1lKCkgKyBjdXJyTXM7IH07XG4gIERhdGUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgTyA9IG9yaWcuRGF0ZTtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIG5ldyBPKGRhdGVPcmlnaW4uZ2V0VGltZSgpICsgY3Vyck1zKTtcbiAgICByZXR1cm4gbmV3IChGdW5jdGlvbi5wcm90b3R5cGUuYmluZC5hcHBseShPLCBbbnVsbF0uY29uY2F0KEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cykpKSkoKTtcbiAgfTtcbiAgRGF0ZS5ub3cgPSBmdW5jdGlvbigpIHsgcmV0dXJuIGRhdGVPcmlnaW4uZ2V0VGltZSgpICsgY3Vyck1zOyB9O1xuICBEYXRlLnBhcnNlID0gb3JpZy5EYXRlLnBhcnNlO1xuICBEYXRlLlVUQyA9IG9yaWcuRGF0ZS5VVEM7XG4gIERhdGUucHJvdG90eXBlID0gb3JpZy5EYXRlLnByb3RvdHlwZTtcblxuICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gZnVuY3Rpb24oY2IpIHtcbiAgICBjb25zdCBpZCA9IG5leHRJZCsrO1xuICAgIHJhZlF1ZXVlLnB1c2goeyBpZCwgY2IgfSk7XG4gICAgcmV0dXJuIGlkO1xuICB9O1xuICB3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUgPSBmdW5jdGlvbihpZCkge1xuICAgIHJhZlF1ZXVlID0gcmFmUXVldWUuZmlsdGVyKChyKSA9PiByLmlkICE9PSBpZCk7XG4gIH07XG5cbiAgd2luZG93LnNldFRpbWVvdXQgPSBmdW5jdGlvbihjYiwgZGVsYXksIC4uLmFyZ3MpIHtcbiAgICBjb25zdCBpZCA9IG5leHRJZCsrO1xuICAgIHRpbWVyc1tpZF0gPSB7IHR5cGU6ICd0aW1lb3V0JywgY2IsIGRlbGF5OiBkZWxheSB8fCAwLCBuZXh0OiBjdXJyTXMgKyAoZGVsYXkgfHwgMCksIGFyZ3MgfTtcbiAgICByZXR1cm4gaWQ7XG4gIH07XG4gIHdpbmRvdy5jbGVhclRpbWVvdXQgPSBmdW5jdGlvbihpZCkgeyBkZWxldGUgdGltZXJzW2lkXTsgfTtcblxuICB3aW5kb3cuc2V0SW50ZXJ2YWwgPSBmdW5jdGlvbihjYiwgZGVsYXksIC4uLmFyZ3MpIHtcbiAgICBjb25zdCBpZCA9IG5leHRJZCsrO1xuICAgIGNvbnN0IGQgPSBNYXRoLm1heChkZWxheSB8fCAwLCAxKTtcbiAgICB0aW1lcnNbaWRdID0geyB0eXBlOiAnaW50ZXJ2YWwnLCBjYiwgZGVsYXk6IGQsIG5leHQ6IGN1cnJNcyArIGQsIGFyZ3MgfTtcbiAgICByZXR1cm4gaWQ7XG4gIH07XG4gIHdpbmRvdy5jbGVhckludGVydmFsID0gZnVuY3Rpb24oaWQpIHsgZGVsZXRlIHRpbWVyc1tpZF07IH07XG5cbiAgZnVuY3Rpb24gcHJvY2Vzcyh0aW1lc3RhbXBNcykge1xuICAgIGN1cnJNcyA9IHRpbWVzdGFtcE1zO1xuICAgIGRvY3VtZW50LmdldEFuaW1hdGlvbnMoKS5mb3JFYWNoKGEgPT4ge1xuICAgICAgYS5wYXVzZSgpO1xuICAgICAgYS5jdXJyZW50VGltZSA9IGN1cnJNcztcbiAgICB9KTtcbiAgICBjb25zdCBpZHMgPSBPYmplY3Qua2V5cyh0aW1lcnMpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaWRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCB0ID0gdGltZXJzW2lkc1tpXV07XG4gICAgICBpZiAoIXQpIGNvbnRpbnVlO1xuICAgICAgd2hpbGUgKHQubmV4dCA8PSBjdXJyTXMpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB0LmNiID09PSAnc3RyaW5nJykgZXZhbCh0LmNiKTsgZWxzZSB0LmNiLmFwcGx5KHVuZGVmaW5lZCwgdC5hcmdzKTtcbiAgICAgICAgaWYgKHQudHlwZSA9PT0gJ3RpbWVvdXQnKSB7IGRlbGV0ZSB0aW1lcnNbaWRzW2ldXTsgYnJlYWs7IH1cbiAgICAgICAgdC5uZXh0ICs9IHQuZGVsYXk7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHJhZnMgPSByYWZRdWV1ZS5zcGxpY2UoMCk7XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCByYWZzLmxlbmd0aDsgaisrKSB7XG4gICAgICByYWZzW2pdLmNiKGN1cnJNcyk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZWplY3QoKSB7XG4gICAgRGF0ZSA9IG9yaWcuRGF0ZTtcbiAgICBwZXJmb3JtYW5jZS5ub3cgPSBvcmlnLnBlcmZvcm1hbmNlTm93O1xuICAgIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPSBvcmlnLnJhZjtcbiAgICB3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUgPSBvcmlnLmNhZjtcbiAgICB3aW5kb3cuc2V0VGltZW91dCA9IG9yaWcuc2V0VGltZW91dDtcbiAgICB3aW5kb3cuY2xlYXJUaW1lb3V0ID0gb3JpZy5jbGVhclRpbWVvdXQ7XG4gICAgd2luZG93LnNldEludGVydmFsID0gb3JpZy5zZXRJbnRlcnZhbDtcbiAgICB3aW5kb3cuY2xlYXJJbnRlcnZhbCA9IG9yaWcuY2xlYXJJbnRlcnZhbDtcbiAgICBkZWxldGUgd2luZG93LiR7VElDS19TWU1CT0x9O1xuICB9XG5cbiAgd2luZG93LiR7VElDS19TWU1CT0x9ID0geyBwcm9jZXNzOiBwcm9jZXNzLCBlamVjdDogZWplY3QgfTtcbn0pKCk7YDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRvUHJvY2Vzcyh0aW1lc3RhbXBNczogbnVtYmVyKTogc3RyaW5nIHtcbiAgcmV0dXJuIGAke1RJQ0tfU1lNQk9MfS5wcm9jZXNzKCR7dGltZXN0YW1wTXN9KWA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkb0VqZWN0KCk6IHN0cmluZyB7XG4gIHJldHVybiBgaWYgKHR5cGVvZiAke1RJQ0tfU1lNQk9MfSAhPT0gJ3VuZGVmaW5lZCcpICR7VElDS19TWU1CT0x9LmVqZWN0KClgO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMy8xMy5cblxuaW1wb3J0IHsgdHlwZSBCcm93c2VyV2luZG93LCB0eXBlIE5hdGl2ZUltYWdlLCB0eXBlIFNpemUgfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IGFkdmFuY2VWaXJ0dWFsVGltZSwgcGF1c2VWaXJ0dWFsVGltZSB9IGZyb20gXCIuLi9iYXNlL2NkcFwiO1xuaW1wb3J0IHsgZGVib3VuY2UgfSBmcm9tIFwiLi4vYmFzZS9kZWJvdW5jZVwiO1xuaW1wb3J0IHsgRW5jb2RlclBpcGVsaW5lIH0gZnJvbSBcIi4uL2Jhc2UvZW5jb2Rlci9waXBlbGluZVwiO1xuaW1wb3J0IHsgaXNFbXB0eSB9IGZyb20gXCIuLi9iYXNlL2ltYWdlXCI7XG5pbXBvcnQgeyBMYXp5IH0gZnJvbSBcIi4uL2Jhc2UvbGF6eVwiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4uL2Jhc2UvbG9nZ2luZ1wiO1xuaW1wb3J0IHsgSXBjV3JpdGVyLCB0eXBlIElwY0RvbmVQYXlsb2FkIH0gZnJvbSBcIi4vaXBjXCI7XG5pbXBvcnQgdHlwZSB7IFJlbmRlck9wdGlvbnMgfSBmcm9tIFwiLi9zY2hlbWFcIjtcbmltcG9ydCB7IGRlY29kZVN0ZWdvLCBzdGFydFN0ZWdvLCBzdG9wU3RlZ28gfSBmcm9tIFwiLi9zdGVnb1wiO1xuaW1wb3J0IHsgYnVpbGRUaWNrSW5qZWN0b3IsIGRvRWplY3QsIGRvUHJvY2VzcyB9IGZyb20gXCIuL3RpY2tcIjtcbmltcG9ydCB7IGxvYWRXaW5kb3cgfSBmcm9tIFwiLi93aW5kb3dcIjtcblxuY29uc3QgVEFHID0gXCJbU2hvb3RdXCI7XG5cbmludGVyZmFjZSBTdGVnb09wdGlvbnMge1xuICB3aW46IEJyb3dzZXJXaW5kb3c7XG4gIHNpemU6IFNpemU7XG4gIGFmdGVyVHM6IG51bWJlcjtcbn1cblxuZnVuY3Rpb24gYXdhaXRTdGVnb0ZyYW1lKHsgd2luLCBzaXplLCBhZnRlclRzIH06IFN0ZWdvT3B0aW9ucyk6IFByb21pc2U8QnVmZmVyPiB7XG4gIGNvbnN0IHNraXBwZWQgPSBuZXcgU2V0PG51bWJlcj4oKTtcbiAgY29uc3QgcmVwb3J0ID0gZGVib3VuY2UoKCkgPT4ge1xuICAgIGNvbnN0IHMgPSBBcnJheS5mcm9tKHNraXBwZWQpO1xuICAgIHNraXBwZWQuY2xlYXIoKTtcbiAgICBsb2dnZXIuZGVidWcoVEFHLCBgc2tpcHBlZCBmcmFtZXMgJHtzLmpvaW4oXCIsIFwiKX0sIGV4cGVjdGVkID4gJHthZnRlclRzfWApO1xuICB9LCAxMDAwKTtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgY29uc3QgaGFuZGxlciA9IChfZTogdW5rbm93biwgX2Q6IHVua25vd24sIGltYWdlOiBOYXRpdmVJbWFnZSkgPT4ge1xuICAgICAgaWYgKGlzRW1wdHkoaW1hZ2UpKSByZXR1cm47XG4gICAgICBjb25zdCBiaXRtYXAgPSBpbWFnZS50b0JpdG1hcCgpO1xuICAgICAgY29uc3QgdHMgPSBkZWNvZGVTdGVnbyhiaXRtYXAsIGltYWdlLmdldFNpemUoKSk7XG4gICAgICBpZiAodHMgPT09IHVuZGVmaW5lZCB8fCB0cyA8IGFmdGVyVHMpIHtcbiAgICAgICAgc2tpcHBlZC5hZGQodHMgPz8gLTEpO1xuICAgICAgICByZXBvcnQoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgd2luLndlYkNvbnRlbnRzLnN0b3BQYWludGluZygpO1xuICAgICAgd2luLndlYkNvbnRlbnRzLm9mZihcInBhaW50XCIsIGhhbmRsZXIpO1xuICAgICAgcmVzb2x2ZShCdWZmZXIuZnJvbShiaXRtYXAuYnVmZmVyLCBiaXRtYXAuYnl0ZU9mZnNldCwgc2l6ZS5oZWlnaHQgKiBzaXplLndpZHRoICogNCkpO1xuICAgIH07XG4gICAgd2luLndlYkNvbnRlbnRzLm9uKFwicGFpbnRcIiwgaGFuZGxlcik7XG4gIH0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2hvb3Qod3JpdGVyOiBJcGNXcml0ZXIsIHNvdXJjZTogc3RyaW5nLCBvcHRpb25zOiBSZW5kZXJPcHRpb25zKTogUHJvbWlzZTxJcGNEb25lUGF5bG9hZD4ge1xuICBjb25zdCB7IGZwcywgd2lkdGgsIGhlaWdodCwgZHVyYXRpb24sIHdpdGhBdWRpbywgb3V0RmlsZSwgZGlzYWJsZUdwdSB9ID0gb3B0aW9ucztcbiAgaWYgKHdpdGhBdWRpbykgbG9nZ2VyLndhcm4oVEFHLCBcImF1ZGlvIHdpbGwgYmUgaWdub3JlZCBvbiB0aGlzIG1vZGVcIik7XG5cbiAgYXdhaXQgdXNpbmcgcGlwZWxpbmUgPSBhd2FpdCBFbmNvZGVyUGlwZWxpbmUuY3JlYXRlKHsgd2lkdGgsIGhlaWdodCwgZnBzLCBvdXRGaWxlLCB3aXRoQXVkaW8sIGRpc2FibGVHcHUgfSk7XG5cbiAgY29uc3QgdG90YWwgPSBNYXRoLmNlaWwoZnBzICogZHVyYXRpb24pO1xuICBjb25zdCBmcmFtZUludGVydmFsID0gMTAwMCAvIGZwcztcbiAgbGV0IHdyaXR0ZW4gPSAwO1xuICBsZXQgcHJvZ3Jlc3MgPSAwO1xuXG4gIGNvbnN0IHdpbiA9IGF3YWl0IGxvYWRXaW5kb3coeyBzb3VyY2UsIHJlbmRlcmVyOiBvcHRpb25zIH0pO1xuICBjb25zdCBjZHAgPSB3aW4ud2ViQ29udGVudHMuZGVidWdnZXI7XG4gIGNvbnN0IHJvb3RGcmFtZSA9IG5ldyBMYXp5KCgpID0+IHdpbi53ZWJDb250ZW50cy5tYWluRnJhbWUuZnJhbWVzWzBdKTtcbiAgdHJ5IHtcbiAgICBjZHAuYXR0YWNoKFwiMS4zXCIpO1xuXG4gICAgY29uc3QgcmVuZGVyRnBzID0gZGlzYWJsZUdwdSA/IGZwcyA6IDI0MDtcbiAgICBjb25zdCByZW5kZXJJbnRlcnZhbCA9IDEwMDAgLyByZW5kZXJGcHM7XG4gICAgbG9nZ2VyLmRlYnVnKFRBRywgeyBmcHMsIGZyYW1lSW50ZXJ2YWwsIHJlbmRlckZwcywgcmVuZGVySW50ZXJ2YWwgfSk7XG5cbiAgICAvLyBOT1RFKEF1dG9rYWthKTpcbiAgICAvLyAxLiB3aXRoIGdwdSwgdGhlIHBhaW50IGV2ZW50IGNhbGxiYWNrIGF0IHRoZSBleGFjdCBwb2ludCB3aXRob3V0IGV4dHJhIHJlbmRlcmluZ3NcbiAgICAvLyAyLiB3aXRob3V0IGdwdSwgcGFpbnQgd2lsbCBjYWxsYmFjayBlYWNoIGZyYW1lLCBzbyB3ZSBzZXQgcmVxdWlyZWQgZnBzIHRvIHByZXZlbnQgdG9vIGhpZ2ggQ1BVIHVzYWdlXG4gICAgd2luLndlYkNvbnRlbnRzLnN0b3BQYWludGluZygpO1xuICAgIHdpbi53ZWJDb250ZW50cy5zZXRGcmFtZVJhdGUocmVuZGVyRnBzKTtcblxuICAgIGF3YWl0IHBhdXNlVmlydHVhbFRpbWUoY2RwKTtcbiAgICBjb25zdCBpZnJhbWUgPSByb290RnJhbWUudmFsdWU7XG4gICAgYXdhaXQgaWZyYW1lPy5leGVjdXRlSmF2YVNjcmlwdChidWlsZFRpY2tJbmplY3RvcigpKTtcbiAgICBhd2FpdCBpZnJhbWU/LmV4ZWN1dGVKYXZhU2NyaXB0KGRvUHJvY2VzcygwKSk7XG4gICAgYXdhaXQgc3RhcnRTdGVnbyhjZHApO1xuXG4gICAgZm9yIChsZXQgZnJhbWUgPSAwOyBmcmFtZSA8IHRvdGFsOyBmcmFtZSsrKSB7XG4gICAgICBjb25zdCBmcmFtZU1zID0gKGZyYW1lICsgMSkgKiBmcmFtZUludGVydmFsO1xuICAgICAgY29uc3QgYml0bWFwID0gYXdhaXRTdGVnb0ZyYW1lKHtcbiAgICAgICAgd2luLFxuICAgICAgICBzaXplOiB7IHdpZHRoLCBoZWlnaHQgfSxcbiAgICAgICAgYWZ0ZXJUczogZnJhbWVNcyAtIHJlbmRlckludGVydmFsIC8gMixcbiAgICAgIH0pO1xuXG4gICAgICBhd2FpdCBhZHZhbmNlVmlydHVhbFRpbWUoY2RwLCBmcmFtZUludGVydmFsKTtcbiAgICAgIGF3YWl0IGlmcmFtZT8uZXhlY3V0ZUphdmFTY3JpcHQoZG9Qcm9jZXNzKGZyYW1lTXMpKTtcblxuICAgICAgd2luLndlYkNvbnRlbnRzLnN0YXJ0UGFpbnRpbmcoKTtcbiAgICAgIGF3YWl0IHBpcGVsaW5lLmVuY29kZUJHUkEoYXdhaXQgYml0bWFwKTtcbiAgICAgIHdyaXR0ZW4rKztcblxuICAgICAgY29uc3QgbmV3UHJvZ3Jlc3MgPSBNYXRoLmZsb29yKCh3cml0dGVuIC8gdG90YWwpICogMTAwKTtcbiAgICAgIGlmIChNYXRoLmFicyhuZXdQcm9ncmVzcyAtIHByb2dyZXNzKSA+IDEwKSB7XG4gICAgICAgIHByb2dyZXNzID0gbmV3UHJvZ3Jlc3M7XG4gICAgICAgIHdyaXRlci53cml0ZVByb2dyZXNzKHByb2dyZXNzKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZmluYWxseSB7XG4gICAgYXdhaXQgcm9vdEZyYW1lLnZhbHVlPy5leGVjdXRlSmF2YVNjcmlwdChkb0VqZWN0KCkpO1xuICAgIGF3YWl0IHN0b3BTdGVnbyhjZHApO1xuICAgIGNkcC5kZXRhY2goKTtcbiAgICB3aW4uY2xvc2UoKTtcbiAgICBhd2FpdCBwaXBlbGluZS5maW5pc2goKTtcbiAgfVxuXG4gIGlmICh3cml0dGVuID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwibm8gZnJhbWVzIGNhcHR1cmVkXCIpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB7IHdyaXR0ZW4sIGphbms6IDAsIG91dEZpbGUgfTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMS8zMC5cblxuaW1wb3J0IHsgb2sgfSBmcm9tIFwiYXNzZXJ0XCI7XG5pbXBvcnQgeyBhcHAgfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IG1rZGlyIH0gZnJvbSBcImZzL3Byb21pc2VzXCI7XG5pbXBvcnQgeyBkaXJuYW1lIH0gZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IHB1cElwY1NvY2tldCB9IGZyb20gXCIuL2Jhc2UvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi9iYXNlL2xvZ2dpbmdcIjtcbmltcG9ydCB7IG1ha2VDTEkgfSBmcm9tIFwiLi9jb21tb25cIjtcbmltcG9ydCB7IGNvbm5lY3RJcGMgfSBmcm9tIFwiLi9yZW5kZXJlci9pcGNcIjtcbmltcG9ydCB7IHNldHVwUHVwUHJvdG9jb2wgfSBmcm9tIFwiLi9yZW5kZXJlci9wcm90b2NvbFwiO1xuaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSBcIi4vcmVuZGVyZXIvcmVuZGVyXCI7XG5pbXBvcnQgeyBkZWZhdWx0UmVuZGVyT3B0aW9ucyB9IGZyb20gXCIuL3JlbmRlcmVyL3NjaGVtYVwiO1xuaW1wb3J0IHsgc2hvb3QgfSBmcm9tIFwiLi9yZW5kZXJlci9zaG9vdFwiO1xuXG5jb25zdCBUQUcgPSBcIltBcHBdXCI7XG5cbmZ1bmN0aW9uIHByaW50RmVhdHVyZXMoKSB7XG4gIGxvZ2dlci5kZWJ1ZyhUQUcsIFwiZ3B1IGZlYXR1cmVzOlwiLCBhcHAuZ2V0R1BVRmVhdHVyZVN0YXR1cygpKTtcbn1cblxuYXBwLmRvY2s/LmhpZGUoKTtcbmFwcC5vbihcIndpbmRvdy1hbGwtY2xvc2VkXCIsICgpID0+IHt9KTtcblxubWFrZUNMSSh7XG4gIG5hbWU6IFwiYXBwXCIsXG4gIGRlZmF1bHRzOiB7XG4gICAgLi4uZGVmYXVsdFJlbmRlck9wdGlvbnMsXG4gICAgd2l0aEF1ZGlvOiBmYWxzZSxcbiAgICBkZXRlcm1pbmlzdGljOiBmYWxzZSxcbiAgICB1c2VJbm5lclByb3h5OiBmYWxzZSxcbiAgICBkaXNhYmxlR3B1OiBmYWxzZSxcbiAgfSxcbiAgcnVuOiBhc3luYyAoc291cmNlLCBvcHRpb25zKSA9PiB7XG4gICAgY29uc3QgZXhpdCA9IChjb2RlOiBudW1iZXIpID0+IHtcbiAgICAgIGFwcC5xdWl0KCk7XG4gICAgICBwcm9jZXNzLmV4aXQoY29kZSk7XG4gICAgfTtcbiAgICBwcm9jZXNzLm9uY2UoXCJTSUdURVJNXCIsICgpID0+IGV4aXQoMTQzKSk7XG4gICAgcHJvY2Vzcy5vbmNlKFwiU0lHSU5UXCIsICgpID0+IGV4aXQoMTMwKSk7XG4gICAgcHJvY2Vzcy5vbmNlKFwiZXhpdFwiLCAoYykgPT4gZXhpdChjKSk7XG4gICAgb2socHVwSXBjU29ja2V0LCBcInB1cElwY1NvY2tldCBub3Qgc2V0XCIpO1xuICAgIGNvbnN0IGlwYyA9IGF3YWl0IGNvbm5lY3RJcGMocHVwSXBjU29ja2V0KTtcbiAgICB0cnkge1xuICAgICAgYXBwLm9uKFwiZ3B1LWluZm8tdXBkYXRlXCIsIHByaW50RmVhdHVyZXMpO1xuICAgICAgYXdhaXQgYXBwLndoZW5SZWFkeSgpO1xuICAgICAgc2V0dXBQdXBQcm90b2NvbCgpO1xuICAgICAgcHJpbnRGZWF0dXJlcygpO1xuICAgICAgYXdhaXQgbWtkaXIoZGlybmFtZShvcHRpb25zLm91dEZpbGUpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgIGNvbnN0IGFjdGlvbiA9IG9wdGlvbnMuZGV0ZXJtaW5pc3RpYyA/IHNob290IDogcmVuZGVyO1xuICAgICAgaXBjLndyaXRlRG9uZShhd2FpdCBhY3Rpb24oaXBjLCBzb3VyY2UsIG9wdGlvbnMpKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zdCBlcnJvciA9IGUgYXMgRXJyb3I7XG4gICAgICBpcGMud3JpdGVFcnJvcihlcnJvci5zdGFjayA/PyBcInVua25vd24gZXJyb3JcIik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGFwcC5xdWl0KCk7XG4gICAgfVxuICB9LFxufSk7XG4iXX0=
|