pup-recorder 0.3.3 → 0.3.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/_tsup-dts-rollup.d.ts +103 -53
- package/dist/app.cjs +16 -16
- package/dist/chunk-VBQTMHHL.js +2 -0
- package/dist/cli.js +2 -2
- package/dist/index.d.ts +1 -1
- package/dist/index.js +2 -2
- package/package.json +2 -2
- package/dist/chunk-QZHVDBDU.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'),
|
|
1
|
+
'use strict';require('source-map-support/register.js');var assert=require('assert'),electron=require('electron'),promises=require('fs/promises'),path=require('path'),fs=require('fs'),nodeAv=require('node-av'),constants=require('node-av/constants'),module$1=require('module'),commander=require('commander');require('tree-kill');var E=require('zod'),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 E__default=/*#__PURE__*/_interopDefault(E);var Er=Object.create;var Le=Object.defineProperty;var Pr=Object.getOwnPropertyDescriptor;var me=(r,e)=>(e=Symbol[r])?e:Symbol.for("Symbol."+r),R=r=>{throw TypeError(r)};var wt=(r,e,t)=>e in r?Le(r,e,{enumerable:true,configurable:true,writable:true,value:t}):r[e]=t;var gt=r=>[,,,Er(null)],_t=["class","method","getter","setter","accessor","field","value","get","set"],ie=r=>r!==void 0&&typeof r!="function"?R("Function expected"):r,Fr=(r,e,t,o,i)=>({kind:_t[r],name:e,metadata:o,addInitializer:n=>t._?R("Already initialized"):i.push(ie(n||null))}),Ve=(r,e)=>wt(e,me("metadata"),r[3]),xt=(r,e,t,o)=>{for(var i=0,n=r[e>>1],a=n&&n.length;i<a;i++)n[i].call(t);return o},G=(r,e,t,o,i,n)=>{var c,s,d,p,u=e&7,w=false,f=false,h=2,g=_t[u+5],v=r[h]||(r[h]=[]),x=((i=i.prototype),Pr(i,t));for(var y=o.length-1;y>=0;y--)d=Fr(u,t,s={},r[3],v),(d.static=w,d.private=f,p=d.access={has:_=>t in _},(p.get=_=>_[t]),u>2),c=(0, o[y])(x[g],d),s._=1,ie(c)&&(x[g]=c);return x&&Le(i,t,x),i},bt=(r,e,t)=>wt(r,e+"",t);var C=(r,e,t)=>{if(e!=null){typeof e!="object"&&typeof e!="function"&&R("Object expected");var o,i;t&&(o=e[me("asyncDispose")]),o===void 0&&(o=e[me("dispose")],t&&(i=o)),typeof o!="function"&&R("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},S=(r,e,t)=>{var o=typeof SuppressedError=="function"?SuppressedError:function(a,c,s,d){return d=Error(s),d.name="SuppressedError",d.error=a,d.suppressed=c,d},i=a=>e=t?new o(a,e,"An error was suppressed during disposal"):(t=true,a),n=a=>{for(;a=r.pop();)try{var c=a[1]&&a[1].call(a[2]);if(a[0])return Promise.resolve(c).then(n,s=>(i(s),n()))}catch(s){i(s);}if(t)throw e};return n()};var Ar=()=>typeof document>"u"?new URL(`file:${__filename}`).href:document.currentScript&&document.currentScript.tagName.toUpperCase()==="SCRIPT"?document.currentScript.src:new URL("main.js",document.baseURI).href,m=Ar();function yt(r,e,t){try{return e(process.env[r])}catch{return t}}function O(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 Rr=module$1.createRequire(m),ne=process.env,vt=yt("PUP_LOG_LEVEL",O,2),Et=ne.PUP_USE_INNER_PROXY==="1",Pt=ne.PUP_DISABLE_GPU==="1",Ft=ne.PUP_DISABLE_HW_CODEC==="1",Ct=ne.PUP_DETERMINISTIC==="1",Or=path.dirname(Rr.resolve("pup-recorder/package.json"));path.join(Or,"dist","app.cjs");var St=ne.PUP_WINDOW_TOLERANT==="1";var We="<pup@debug>",Ue="<pup@info>",$e="<pup@warn>",Ge="<pup@error>",ze="<pup@fatal>";function se(r,e){return function(...t){let o=t.map(i=>i instanceof Error?i.stack??String(i):i);return r.call(this,...o)}}var At,Tt,kt,It,Rt,B;Rt=[se],It=[se],kt=[se],Tt=[se],At=[se];var k=class{constructor(e=vt){this._level=e;xt(B,5,this);bt(this,"_impl");this.impl=console;}_level;get level(){return this._level}set level(e){this._level=e,this.impl=this._impl??console;}get impl(){return this._impl}set impl(e){let t=e.debug??console.debug,o=e.info??console.info,i=e.warn??console.warn,n=e.error??console.error,a=this._level;this._impl={debug:a>=3?t:void 0,info:a>=2?o:void 0,warn:a>=1?i:void 0,error:a>=0?n:void 0};}debug(...e){this.impl?.debug?.(We,...e);}info(...e){this.impl?.info?.(Ue,...e);}warn(...e){this.impl?.warn?.($e,...e);}error(...e){this.impl?.error?.(Ge,...e);}fatal(...e){this.impl?.error?.(ze,...e),process.exit(1);}dispatch(e){let t=e.trimEnd();t.startsWith(We)?this.debug(t.slice(We.length+1)):t.startsWith(Ue)?this.info(t.slice(Ue.length+1)):t.startsWith($e)?this.warn(t.slice($e.length+1)):t.startsWith(Ge)?this.error(t.slice(Ge.length+1)):this.info(t);}attach(e,t){return new Promise((o,i)=>{this.debug(`${t}.attach`);let n="",a=c=>{let s=c.toString();s.startsWith(ze)?n+=s.slice(ze.length+1):this.dispatch(s);};e.stderr?.on("data",a),e.stdout?.on("data",a),e.on("error",c=>{n+=c.message,e.kill();}).once("close",(c,s)=>{c||s||n?(n||=`command failed: ${e.spawnargs.join(" ")}`,this.debug(`${t}.close`,{code:c,signal:s,fatal:n}),i(new Error(n))):(this.debug(`${t}.close`),o());}).on("unhandledRejection",c=>{this.error(`${t}.unhandled`,c);}).on("uncaughtExceptionMonitor",c=>{this.error(`${t}.unhandled`,c);});})}};B=gt(),G(B,1,"debug",Rt,k),G(B,1,"info",It,k),G(B,1,"warn",kt,k),G(B,1,"error",Tt,k),G(B,1,"fatal",At,k),Ve(B,k);var l=new k;nodeAv.Log.setCallback((r,e)=>{let t=e.trimEnd();t&&(r<=constants.AV_LOG_ERROR?l.error(t):r<=constants.AV_LOG_WARNING&&l.warn(t));});var Hr="[Crash]";function Bt(){let r=path.join(electron.app.getPath("userData"),"crashes");fs.mkdirSync(r,{recursive:true}),electron.app.setPath("crashDumps",r),electron.crashReporter.start({productName:"pup-recorder",uploadToServer:false,compress:false,ignoreSystemCrashHandler:true}),l.debug(Hr,"set dump to",r);}function ae(r,e){return (...t)=>{try{let o=r(...t);return o instanceof Promise?o.catch(()=>e):o}catch{return e}}}var Wr="--pup-priv-args";function Mt(){let r=process.argv,e=r.find(o=>o.startsWith(Wr));if(!e)return l.debug("procargv",r),process.argv;let t=["exec",...r.slice(-1)];return e=Buffer.from(e.split("=")[1],"base64").toString(),t.push(...JSON.parse(e)),l.debug("pupargs",t),t}var Ur=1920,$r=1080,Gr=30,zr=5,jr="output.mp4",Dt=E__default.default.object({duration:E__default.default.number().describe("Duration in seconds"),width:E__default.default.number().describe("Video width"),height:E__default.default.number().describe("Video height"),fps:E__default.default.number().describe("Frames per second"),withAudio:E__default.default.boolean().describe("Capture and encode audio"),outFile:E__default.default.string().describe("Comma-separated output paths; extension (.mp4/.webm) selects encoder"),useInnerProxy:E__default.default.boolean().describe("Use bilibili inner proxy for resource access"),deterministic:E__default.default.boolean().describe("Render by frame rather than recording"),disableGpu:E__default.default.boolean().describe("Disable GPU rendering, may reduce performance but increase stability"),disableHwCodec:E__default.default.boolean().describe("Disable hardware video encoder (NVENC/VideoToolbox), use software x265"),windowTolerant:E__default.default.boolean().describe("Fall back to dom-ready if warmup load times out")}),Nt={width:Ur,height:$r,fps:Gr,duration:zr,outFile:jr,withAudio:false,useInnerProxy:Et,deterministic:Ct,disableGpu:Pt,disableHwCodec:Ft,windowTolerant:St};async function Vt(r){let e=Dt.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).option("--disable-hw-codec",e.disableHwCodec.description,t.disableHwCodec).option("--window-tolerant",e.windowTolerant.description,t.windowTolerant).action(async(o,i)=>{try{await r.run(o,{width:ae(O,t.width)(i.width),height:ae(O,t.height)(i.height),fps:ae(O,t.fps)(i.fps),duration:ae(O,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,disableHwCodec:i.disableHwCodec??t.disableHwCodec,windowTolerant:i.windowTolerant??t.windowTolerant});}catch(n){l.fatal(n);}}),await commander.program.parseAsync(Mt());}var le=class{writeProgress(e){this.send({type:"progress",value:e});}writeError(e){return this.send({type:"error",error:e})}writeDone(e){return this.send({type:"done",payload:e})}send(e){return new Promise(t=>{if(!process.send)return t();process.send(e,()=>t());})}};function fe(r){return new Promise(e=>setTimeout(e,r))}function z(r,e,t){return new Promise((o,i)=>{let n=setTimeout(()=>i(new Error(`${t} timed out after ${e}ms`)),e);r.then(o,i).finally(()=>clearTimeout(n));})}var je=5e3;function M(r,e,t){return z(r.sendCommand(e,t),je,`cdp.${e}`)}function qe(r,e){return new Promise((t,o)=>{let i=setTimeout(()=>{r.off("message",n),o(new Error(`advanceVirtualTime timed out after ${je}ms`));},je),n=(a,c)=>{c==="Emulation.virtualTimeBudgetExpired"&&(clearTimeout(i),r.off("message",n),t());};r.on("message",n),M(r,"Emulation.setVirtualTimePolicy",{policy:"advance",budget:e}).catch(a=>{clearTimeout(i),r.off("message",n),o(a);});})}async function Ht(r){await M(r,"Emulation.setVirtualTimePolicy",{policy:"pause"});}async function he(r,e){await M(r,"Emulation.setDeviceMetricsOverride",{...e,deviceScaleFactor:1,mobile:false});}var Ke=32;var Xe="stego-tick";function Ut(r,e){let{width:t,height:o}=e;return `<!DOCTYPE html>
|
|
2
2
|
<html>
|
|
3
3
|
<head>
|
|
4
4
|
<meta charset="UTF-8">
|
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
(function() {
|
|
33
33
|
const { ipcRenderer } = require('electron');
|
|
34
34
|
const WIDTH = ${t};
|
|
35
|
-
const MARKER_WIDTH = ${
|
|
35
|
+
const MARKER_WIDTH = ${Ke};
|
|
36
36
|
const canvas = document.getElementById('stego');
|
|
37
37
|
const ctx = canvas.getContext('2d', { willReadFrequently: true });
|
|
38
38
|
let startTime = null;
|
|
@@ -41,9 +41,9 @@
|
|
|
41
41
|
function encodeTimestamp(timestampMs) {
|
|
42
42
|
const imageData = ctx.createImageData(WIDTH, 1);
|
|
43
43
|
const data = imageData.data;
|
|
44
|
-
|
|
44
|
+
|
|
45
45
|
const timestampInt = Math.floor(timestampMs) >>> 0;
|
|
46
|
-
|
|
46
|
+
|
|
47
47
|
for (let i = 0; i < MARKER_WIDTH; i++) {
|
|
48
48
|
const bit = (timestampInt >>> (MARKER_WIDTH - 1 - i)) & 1;
|
|
49
49
|
const value = bit ? 255 : 0;
|
|
@@ -53,7 +53,7 @@
|
|
|
53
53
|
data[idx + 2] = value;
|
|
54
54
|
data[idx + 3] = 255;
|
|
55
55
|
}
|
|
56
|
-
|
|
56
|
+
|
|
57
57
|
for (let i = MARKER_WIDTH; i < WIDTH; i++) {
|
|
58
58
|
const idx = i * 4;
|
|
59
59
|
data[idx] = 0;
|
|
@@ -61,9 +61,9 @@
|
|
|
61
61
|
data[idx + 2] = 0;
|
|
62
62
|
data[idx + 3] = 255;
|
|
63
63
|
}
|
|
64
|
-
|
|
64
|
+
|
|
65
65
|
ctx.putImageData(imageData, 0, 0);
|
|
66
|
-
ipcRenderer.send(
|
|
66
|
+
ipcRenderer.send('${Xe}');
|
|
67
67
|
}
|
|
68
68
|
|
|
69
69
|
function updateLoop() {
|
|
@@ -92,7 +92,7 @@
|
|
|
92
92
|
})();
|
|
93
93
|
</script>
|
|
94
94
|
</body>
|
|
95
|
-
</html>`}function se(r,e){let{width:t,height:o}=e;if(t<He||o<2)return;let i=o-1,n=0;for(let s=0;s<He;s++){let c=(i*t+s)*4,d=(r[c]??0)>127?1:0;n=n<<1|d;}if(n=n>>>0,!(!Number.isFinite(n)||n<0||n>1e7))return n}async function Tt(r){await r.executeJavaScript("__pup_start_stego__()");}async function Rt(r,e){let t=new Promise(o=>{let i=(n,s)=>{Math.abs(s-e)<=1&&(r.ipc.off(We,i),o(s));};r.ipc.on(We,i);});await r.executeJavaScript(`__pup_draw_stego__(${e})`),await t;}async function Bt(r){await r.executeJavaScript("__pup_stop_stego__()");}var $e="pup";electron.protocol.registerSchemesAsPrivileged([{scheme:$e,privileges:{standard:true,secure:true,bypassCSP:true,allowServiceWorkers:true,supportFetchAPI:true,corsEnabled:true,stream:true,codeCache:true}}]);function Mt(){electron.protocol.handle($e,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=kt(t,{width:o,height:i});return new Response(n,{headers:{"content-type":"text/html"}})});}function Nt(r,e){let t=new URL(`${$e}://stego`);return t.searchParams.set("src",r),t.searchParams.set("w",String(e.width)),t.searchParams.set("h",String(e.height)),t.toString()}var U=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();}};async function O(r,e){let t=new nodeAv.CodecContext;t.allocContext3(r.codec),t.codecId=r.codec.id,t.width=r.width,t.height=r.height,t.pixelFormat=r.pixelFormat,t.timeBase=new nodeAv.Rational(1,r.fps),t.framerate=new nodeAv.Rational(r.fps,1),t.gopSize=r.fps*2,t.bitRate=BigInt(r.bitrate),t.setFlags(constants.AV_CODEC_FLAG_GLOBAL_HEADER),r.codecTag&&(t.codecTag=r.codecTag),r.colorRange!==void 0&&(t.colorRange=r.colorRange);for(let[o,i]of Object.entries(r.options??{}))t.setOption(o,i);return nodeAv.FFmpegError.throwIfError(await t.open2(r.codec,null),e),t}function te(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 Yr={[constants.AV_SAMPLE_FMT_FLT]:"flt",[constants.AV_SAMPLE_FMT_FLTP]:"fltp"},ce=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"),s=t.createFilter(n,"sink");if(!s)throw new Error("Failed to create abuffersink");let a=`aformat=sample_fmts=${Yr[this._outFmt]??"flt"}:sample_rates=${this._outRate}:channel_layouts=stereo,asetnsamples=n=${this._frameSize}:p=1`,d=nodeAv.FilterInOut.createList([{name:"in",filterCtx:i,padIdx:0}]),u=nodeAv.FilterInOut.createList([{name:"out",filterCtx:s,padIdx:0}]);nodeAv.FFmpegError.throwIfError(t.parsePtr(a,u,d),"graph.parsePtr"),nodeAv.FFmpegError.throwIfError(t.configSync(),"graph.config"),this._graph=t,this._bufSrc=i,this._bufSink=s;}async encode(e,t){var s=[];try{if(!this._bufSrc||!this._inRate)return;let o=new Float32Array(e.buffer,e.byteOffset,e.byteLength/4);for(let u=0;u<o.length;u++)isFinite(o[u])||(o[u]=0);let i=o.length>>1;let n=y(s,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 a=c,d=true;}finally{E(s,a,d);}}async flush(e){this._bufSrc&&(await this._bufSrc.buffersrcAddFrame(null),await this.drain(e)),await this._ctx.sendFrame(null),await this.drainCodec(e);}[Symbol.dispose](){this._pkt.free(),this._filterFrame.free(),this._graph?.[Symbol.dispose](),this._ctx.freeContext();}async drain(e){for(;;){let t=await this._bufSink.buffersinkGetFrame(this._filterFrame);if(t===constants.AVERROR_EAGAIN||t===constants.AVERROR_EOF)break;nodeAv.FFmpegError.throwIfError(t,"buffersinkGetFrame"),nodeAv.FFmpegError.throwIfError(await this._ctx.sendFrame(this._filterFrame),"audioCtx.sendFrame"),this._filterFrame.unref(),await this.drainCodec(e);}}drainCodec(e){return 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=te(e,t,nodeAv.AV_PIX_FMT_BGRA),this.dst=te(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=y(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,s=true;}finally{E(o,n,s);}}get sws(){if(!this._sws){let e=new nodeAv.SoftwareScaleContext,t=this.src.format;e.getContext(this.src.width,this.src.height,t,this.src.width,this.src.height,nodeAv.AV_PIX_FMT_YUVA420P,nodeAv.SWS_BILINEAR),this._sws=e;}return this._sws}[Symbol.dispose](){this.src[Symbol.dispose](),this.dst[Symbol.dispose](),this.pkt[Symbol.dispose](),this._sws?.[Symbol.dispose]();}};function pe(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}var de=class{bits=[];w(e,t){for(let o=t-1;o>=0;o--)this.bits.push(e>>o&1);}flag(e){this.bits.push(e?1:0);}ue(e){let t=e+1,o=32-Math.clz32(t);for(let i=0;i<o-1;i++)this.bits.push(0);for(let i=o-1;i>=0;i--)this.bits.push(t>>i&1);}align(e){for(;this.bits.length%8!==0;)this.bits.push(e);}copy(e,t,o){for(let i=0;i<o;i++)this.bits.push(e[t+i]);}},ue=class{_bits;pos=0;constructor(e){this._bits=[];for(let t=0;t<e.length;t++)for(let o=7;o>=0;o--)this._bits.push(e[t]>>o&1);}get bits(){return this._bits}read(e){let t=0;for(let o=0;o<e;o++)t=t<<1|this._bits[this.pos++];return t}readUe(){let e=0;for(;this._bits[this.pos]===0;)e++,this.pos++;this.pos++;let t=1;for(let o=0;o<e;o++)t=t<<1|this._bits[this.pos++];return t-1}};var G=Buffer.from([0,0,0,1]);function Gt(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 ze(r,e,t){let o=(r&63)<<1|e>>5&1,i=(e&31)<<3|t&7;return [o,i]}function j(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:s,layerId:c}=Gt(r[i],r[i+1]);e.push({type:s,layerId:c,data:r.subarray(i,n)}),t=n;}return e}function qe(r,e){let t=Buffer.from(r),{type:o,temporalId:i}=Gt(t[0],t[1]),[n,s]=ze(o,e,i);return t[0]=n,t[1]=s,t}function jt(r){let e=[];for(let t=0;t<r.length;t++)t+2<r.length&&r[t]===0&&r[t+1]===0&&r[t+2]===3?(e.push(0,0),t+=2):e.push(r[t]);return Buffer.from(e)}function zt(r){let e=[];e.push(r[0],r[1]);let t=0;for(let o=2;o<r.length;o++)t===2&&r[o]<=3&&(e.push(3),t=0),r[o]===0?t++:t=0,e.push(r[o]);return Buffer.from(e)}function no(r){let e=new ue(jt(r));if(e.read(16),e.read(4),e.read(2),e.read(6)>0)return;let t=e.read(3);e.read(17);let o=e.pos;return e.read(96),t>0&&e.read(t*2+(8-t)*2),{ptlStart:o,ptlEnd:e.pos,ptlBits:e.bits,maxSubLayersMinus1:t}}function ao(r,e){r.w(16385,16),r.w(0,4),r.flag(1),r.flag(1),r.w(1,6),r.w(e.maxSubLayersMinus1,3),r.flag(e.maxSubLayersMinus1===0),r.w(65535,16),r.copy(e.ptlBits,e.ptlStart,e.ptlEnd-e.ptlStart),r.flag(1);for(let t=0;t<=e.maxSubLayersMinus1;t++)r.ue(4),r.ue(2),r.ue(4);r.w(1,6),r.ue(1),r.flag(1),r.flag(1),r.flag(0),r.flag(1),r.align(1);}function so(r,e,t,o){if(r.copy(e.ptlBits,e.ptlEnd-8,8),e.maxSubLayersMinus1>0){for(let i=0;i<e.maxSubLayersMinus1;i++)r.w(0,2);for(let i=e.maxSubLayersMinus1;i<8;i++)r.w(0,2);}r.flag(0);for(let i=0;i<16;i++)r.flag(i===2||i===3);r.w(0,3),r.w(0,3),r.flag(1),r.w(1,6),r.w(1,1),r.w(1,1),r.w(0,4),r.flag(0),r.ue(0),r.flag(0),r.flag(0),r.flag(0),r.ue(2),r.flag(1),r.copy(e.ptlBits,e.ptlStart,e.ptlEnd-e.ptlStart),r.ue(0),r.w(0,2),r.w(1,2),r.w(2,2),r.ue(0),r.w(t,16),r.w(o,16),r.flag(1),r.w(1,2),r.w(0,4),r.w(0,4),r.flag(0),r.flag(1),r.flag(0),r.flag(1),r.flag(0),r.ue(0),r.ue(0),r.ue(0),r.ue(0),r.ue(0),r.flag(0),r.ue(0),r.flag(0),r.flag(0);}function qt(r,e,t){let o=no(r);if(!o)return r;let i=new de;return ao(i,o),so(i,o,e,t),i.bits.push(1),i.align(0),zt(pe(i.bits))}var co=39;function Jt(r){let{baseExtradata:e,alphaExtradata:t}=r,o=j(e),i=j(t),n=new Map;for(let a of i){if(a.type===32)continue;let d=n.get(a.type)??[];d.push(a),n.set(a.type,d);}let s=[],c=new Set;for(let a of o){let d=a.type===32?qt(a.data,r.width,r.height):a.data;if(s.push(G,d),!c.has(a.type)){c.add(a.type);for(let u of n.get(a.type)??[])s.push(G,qe(u.data,1));}}return s.push(Je()),Buffer.concat(s)}function Je(){let[t,o]=ze(co,0,1),i=[],n=(s,c)=>{for(let a=c-1;a>=0;a--)i.push(s>>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([G,Buffer.from([t,o]),Buffer.from([165,4]),pe(i),Buffer.from([128])])}function Xt(r,e){let t=[];for(let o of r)t.push(G,o.data);for(let o of e)o.type<32&&t.push(G,qe(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=Je();}static async create(e){let{width:t,height:o,fps:i,bitrate:n,muxer:s}=e,c=nodeAv.Codec.findEncoderByName(constants.FF_ENCODER_HEVC_NVENC);if(!c)throw new Error("hevc_nvenc encoder not found");let d={codec:c,width:t,height:o,fps:i,bitrate:n,options:{preset:"p4",bf:"0"}},u=await O({...d,pixelFormat:constants.AV_PIX_FMT_BGRA},"nvenc.base.open2"),p=await O({...d,pixelFormat:constants.AV_PIX_FMT_YUV420P},"nvenc.alpha.open2"),f=S(),m=S(),w=s.addStream(u,"hvc1"),x=u.extraData,_=p.extraData;return x&&_&&(w.codecpar.extradata=Jt({baseExtradata:x,alphaExtradata:_,width:t,height:o})),new r({baseCtx:u,alphaCtx:p,basePkt:f,alphaPkt:m,stream:w})}async encode(e,t){let{baseCtx:o,alphaCtx:i}=this._s,n=this._pts++;e.pts=n,e.duration=1n,nodeAv.FFmpegError.throwIfError(await o.sendFrame(e),"base.sendFrame");let s=e.data?.[0],c=e.linesize?.[0];if(!s||!c)throw new Error("encode: missing BGRA data");let a=e.width,d=e.height,u=a*d,p=(a>>1)*(d>>1);this._alphaBuf||(this._alphaBuf=Buffer.alloc(u+p*2));let f=this._alphaBuf;for(let m=0;m<d;m++)for(let w=0;w<a;w++)f[m*a+w]=s[m*c+w*4+3];f.fill(128,u,u+p*2),this._alphaFrame?.free(),this._alphaFrame=nodeAv.Frame.fromVideoBuffer(f,{format:constants.AV_PIX_FMT_YUV420P,width:a,height:d}),this._alphaFrame.pts=n,this._alphaFrame.duration=1n,nodeAv.FFmpegError.throwIfError(await i.sendFrame(this._alphaFrame),"alpha.sendFrame"),await this.drainInterleaved(t);}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,baseCtx:o,alphaCtx:i}=this._s;e.free(),t.free(),this._alphaFrame?.free(),o.freeContext(),i.freeContext();}async drainInterleaved(e){let{baseCtx:t,alphaCtx:o,basePkt:i,alphaPkt:n,stream:s}=this._s;for(;;){let c=await t.receivePacket(i),a=await o.receivePacket(n),d=c>=0,u=a>=0;if(!d&&!u)break;if(d!==u)throw new Error(`NVENC desync: base=${d}, alpha=${u}`);let p=j(i.data),f=j(n.data),m=[];this._seiInjected||(m.push(this._seiBuffer),this._seiInjected=true),m.push(Xt(p,f));let w=i.pts,x=i.dts,_=i.duration;i.data=Buffer.concat(m),i.pts=w,i.dts=x,i.duration=_===0n?1n:_,i.streamIndex=s.index,i.rescaleTs(t.timeBase,s.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{codecName:t,codecTag:o,codecOpts:i,muxer:n,...s}=e,c=nodeAv.Codec.findEncoderByName(t);if(!c)throw new Error(`Video encoder not found: ${t}`);let a=await O({codec:c,...s,codecTag:o,options:i},"videoCtx.open2"),d=n.addStream(a,o);return new r(a,S(),d)}async encode(e,t){e.pts=this._pts++,e.duration=1n,nodeAv.FFmpegError.throwIfError(await this._ctx.sendFrame(e),"videoCtx.sendFrame"),await this.drain(t);}async flush(e){await this._ctx.sendFrame(null),await this.drain(e);}[Symbol.dispose](){this._pkt.free(),this._ctx.freeContext();}drain(e){return 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:s,muxer:c}=e,a=n.getEncoderCodec("hevc");if(!a)throw new Error("hevc_videotoolbox encoder not found");let d=await O({codec:a,width:t,height:o,fps:i,bitrate:s,pixelFormat:constants.AV_PIX_FMT_BGRA,colorRange:constants.AVCOL_RANGE_JPEG,codecTag:"hvc1",options:{alpha_quality:"1"}},"vtEnc.open2"),u=c.addStream(d,"hvc1");return new r(d,S(),u)}async encode(e,t){e.pts=this._pts++,e.duration=1n,nodeAv.FFmpegError.throwIfError(await this._ctx.sendFrame(e),"vtEnc.sendFrame"),await this.drain(t);}async flush(e){await this._ctx.sendFrame(null),await this.drain(e);}[Symbol.dispose](){this._pkt.free(),this._ctx.freeContext();}drain(e){return H(this._ctx,this._pkt,this._stream,e)}};var he="[Encoder]";async function Qt(r,e){let{width:t,height:o,fps:i,bitrate:n=8e6,disableHwCodec:s=false}=r,c=s?void 0:api.HardwareContext.auto()??void 0;try{if(c?.deviceTypeName===constants.FF_HWDEVICE_TYPE_VIDEOTOOLBOX&&c.getEncoderCodec("hevc"))return h.debug(he,"using VideoToolbox HEVC alpha encoder"),{hwVideo:await fe.create({width:t,height:o,fps:i,hw:c,bitrate:n,muxer:e}),hw:c};if(c?.deviceTypeName===constants.FF_HWDEVICE_TYPE_CUDA&&c.getEncoderCodec("hevc"))return h.debug(he,"using NVENC dual-layer HEVC alpha encoder"),{hwVideo:await me.create({width:t,height:o,fps:i,hw:c,bitrate:n,muxer:e}),hw:c}}catch(d){h.warn(he,"Hardware codec session limits reached, use software encoder",d);}finally{c?.dispose();}return h.debug(he,"using software libx265 HEVC alpha encoder"),{video:await le.create({width:t,height:o,fps:i,codecName:constants.FF_ENCODER_LIBX265,codecTag:"hvc1",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 we=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 z=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,s=new we(i),{video:c,hwVideo:a,codec:d,hw:u}=await Qt(e,s),p;return n&&(p=await ce.create({outSampleRate:44100,outSampleFmt:constants.AV_SAMPLE_FMT_FLTP,codecName:constants.FF_ENCODER_AAC,globalHeader:true,bitrate:128e3,muxer:s})),await s.open(),new r({video:c,hwVideo:a,audio:p,muxer:s,limiter:new U(1),outFile:i,codec:d,hw:u,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 d=[];try{let m=y(d,this.bgraFrame(e));await t.encode(m,n);return}catch(u){var p=u,f=true;}finally{E(d,p,f);}}let{src:s,dst:c,sws:a}=i;return assert.ok(a,"sws not initialized"),nodeAv.FFmpegError.throwIfError(s.makeWritable(),"bgraSrc.makeWritable"),nodeAv.FFmpegError.throwIfError(s.fromBuffer(e),"bgraSrc.fromBuffer"),nodeAv.FFmpegError.throwIfError(c.makeWritable(),"bgraDst.makeWritable"),nodeAv.FFmpegError.throwIfError(await a.scaleFrame(c,s),"bgraSws.scaleFrame"),o.encode(c,n)});}async encodePNG(e){await this._s.limiter.schedule(async()=>{let{hwVideo:t,video:o,codec:i,muxer:n,width:s,height:c}=this._s,a=i??await $.create(s,c);try{let d=await a.decodePNG(e);t?await t.encode(d,n):(nodeAv.FFmpegError.throwIfError(a.dst.makeWritable(),"pngDst.makeWritable"),nodeAv.FFmpegError.throwIfError(await a.sws.scaleFrame(a.dst,d),"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 s=[];try{let p=y(s,i,!0);let f=y(s,e);let m=y(s,t);let w=y(s,o);await n.drain();await o?.flush(i);t?await t.flush(i):await e.flush(i);}catch(c){var a=c,d=!0;}finally{var u=E(s,a,d);u&&await u;}}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=y(t,this._s.codec);this._s.hw?.dispose();}catch(o){var i=o,n=true;}finally{E(t,i,n);}}bgraFrame(e){let t=te(this._s.width,this._s.height,constants.AV_PIX_FMT_BGRA);return nodeAv.FFmpegError.throwIfError(t.fromBuffer(e),"bgraFrame.fromBuffer"),t}};var ge=class{_fps;_actual=0;_currentBurst=0;_bursts=[];constructor(e){this._fps=e;}wrote(e=1){this._currentBurst>0&&(this._bursts.push(this._currentBurst),this._currentBurst=0),this._actual+=e;}dropped(e=1){this._currentBurst+=e;}finalize(){this._currentBurst>0&&(this._bursts.push(this._currentBurst),this._currentBurst=0);let e=0,t=0,o=0;for(let a of this._bursts){e+=a,o=Math.max(o,a);let d=Math.max(0,a-1);t+=(d/this._fps)**2;}let i=this._actual+e,n=i>0?e/i:0,s=Math.min(1,t),c=1-(1-n)*(1-s);return {global:n,local:s,jank:c,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 Xe="audio-meta",Ke="audio-chunk",Oo=`
|
|
95
|
+
</html>`}function we(r,e){let{width:t,height:o}=e;if(t<Ke||o<2)return;let i=o-1,n=0;for(let a=0;a<Ke;a++){let c=(i*t+a)*4,d=(r[c]??0)>127?1:0;n=n<<1|d;}if(n=n>>>0,!(!Number.isFinite(n)||n<0||n>1e7))return n}async function $t(r){await M(r,"Runtime.evaluate",{expression:"__pup_start_stego__()"});}async function Ye(r,e){let t=()=>{},o=new Promise(i=>electron.ipcMain.once(Xe,()=>i()));await M(r,"Runtime.evaluate",{expression:`__pup_draw_stego__(${e})`});try{await z(o,5e3,"swapBuffer stego ipc");}finally{electron.ipcMain.removeListener(Xe,t);}}async function Gt(r){await M(r,"Runtime.evaluate",{expression:"__pup_stop_stego__()"});}var Je="pup";electron.protocol.registerSchemesAsPrivileged([{scheme:Je,privileges:{standard:true,secure:true,bypassCSP:true,allowServiceWorkers:true,supportFetchAPI:true,corsEnabled:true,stream:true,codeCache:true}}]);function jt(){electron.protocol.handle(Je,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=Ut(t,{width:o,height:i});return new Response(n,{headers:{"content-type":"text/html"}})});}function qt(r,e){let t=new URL(`${Je}://stego`);return t.searchParams.set("src",r),t.searchParams.set("w",String(e.width)),t.searchParams.set("h",String(e.height)),t.toString()}var j=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();}};async function D(r,e){let t=new nodeAv.CodecContext;t.allocContext3(r.codec),t.codecId=r.codec.id,t.width=r.width,t.height=r.height,t.pixelFormat=r.pixelFormat,t.timeBase=new nodeAv.Rational(1,r.fps),t.framerate=new nodeAv.Rational(r.fps,1),t.gopSize=r.fps*2,t.bitRate=BigInt(r.bitrate),t.setFlags(constants.AV_CODEC_FLAG_GLOBAL_HEADER),r.codecTag&&(t.codecTag=r.codecTag),r.colorRange!==void 0&&(t.colorRange=r.colorRange),r.hwFramesCtx&&(t.hwFramesCtx=r.hwFramesCtx);for(let[o,i]of Object.entries(r.options??{}))t.setOption(o,i);return nodeAv.FFmpegError.throwIfError(await t.open2(r.codec,null),e),t}function N(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 P(){let r=new nodeAv.Packet;return r.alloc(),r}async function q(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 I=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=N(e,t,nodeAv.AV_PIX_FMT_BGRA),this.dst=N(e,t,nodeAv.AV_PIX_FMT_YUVA420P),this.pkt=P();}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=C(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,a=true;}finally{S(o,n,a);}}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 ho={[constants.AV_SAMPLE_FMT_FLT]:"flt",[constants.AV_SAMPLE_FMT_FLTP]:"fltp"},ge=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=P(),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=${ho[this._outFmt]??"flt"}:sample_rates=${this._outRate}:channel_layouts=stereo,asetnsamples=n=${this._frameSize}:p=1`,d=nodeAv.FilterInOut.createList([{name:"in",filterCtx:i,padIdx:0}]),p=nodeAv.FilterInOut.createList([{name:"out",filterCtx:a,padIdx:0}]);nodeAv.FFmpegError.throwIfError(t.parsePtr(s,p,d),"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 p=0;p<o.length;p++)isFinite(o[p])||(o[p]=0);let i=o.length>>1;let n=C(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,d=true;}finally{S(a,s,d);}}async flush(e){this._bufSrc&&(await this._bufSrc.buffersrcAddFrame(null),await this.drain(e)),await this._ctx.sendFrame(null),await this.drainCodec(e);}[Symbol.dispose](){this._pkt.free(),this._filterFrame.free(),this._graph?.[Symbol.dispose](),this._ctx.freeContext();}async drain(e){for(;;){let t=await this._bufSink.buffersinkGetFrame(this._filterFrame);if(t===constants.AVERROR_EAGAIN||t===constants.AVERROR_EOF)break;nodeAv.FFmpegError.throwIfError(t,"buffersinkGetFrame"),nodeAv.FFmpegError.throwIfError(await this._ctx.sendFrame(this._filterFrame),"audioCtx.sendFrame"),this._filterFrame.unref(),await this.drainCodec(e);}}drainCodec(e){return q(this._ctx,this._pkt,this._stream,e)}};function be(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}var _e=class{bits=[];w(e,t){for(let o=t-1;o>=0;o--)this.bits.push(e>>o&1);}flag(e){this.bits.push(e?1:0);}ue(e){let t=e+1,o=32-Math.clz32(t);for(let i=0;i<o-1;i++)this.bits.push(0);for(let i=o-1;i>=0;i--)this.bits.push(t>>i&1);}align(e){for(;this.bits.length%8!==0;)this.bits.push(e);}copy(e,t,o){for(let i=0;i<o;i++)this.bits.push(e[t+i]);}},xe=class{_bits;pos=0;constructor(e){this._bits=[];for(let t=0;t<e.length;t++)for(let o=7;o>=0;o--)this._bits.push(e[t]>>o&1);}get bits(){return this._bits}read(e){let t=0;for(let o=0;o<e;o++)t=t<<1|this._bits[this.pos++];return t}readUe(){let e=0;for(;this._bits[this.pos]===0;)e++,this.pos++;this.pos++;let t=1;for(let o=0;o<e;o++)t=t<<1|this._bits[this.pos++];return t-1}};var X=Buffer.from([0,0,0,1]);function tr(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 et(r,e,t){let o=(r&63)<<1|e>>5&1,i=(e&31)<<3|t&7;return [o,i]}function Y(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 s=i+2;s<r.length-2;s++)if(r[s]===0&&r[s+1]===0&&(r[s+2]===1||s+3<r.length&&r[s+2]===0&&r[s+3]===1)){n=s;break}let{type:a,layerId:c}=tr(r[i],r[i+1]);e.push({type:a,layerId:c,data:r.subarray(i,n)}),t=n;}return e}function tt(r,e){let t=Buffer.from(r),{type:o,temporalId:i}=tr(t[0],t[1]),[n,a]=et(o,e,i);return t[0]=n,t[1]=a,t}function rr(r){let e=[];for(let t=0;t<r.length;t++)t+2<r.length&&r[t]===0&&r[t+1]===0&&r[t+2]===3?(e.push(0,0),t+=2):e.push(r[t]);return Buffer.from(e)}function or(r){let e=[];e.push(r[0],r[1]);let t=0;for(let o=2;o<r.length;o++)t===2&&r[o]<=3&&(e.push(3),t=0),r[o]===0?t++:t=0,e.push(r[o]);return Buffer.from(e)}function wo(r){let e=new xe(rr(r));if(e.read(16),e.read(4),e.read(2),e.read(6)>0)return;let t=e.read(3);e.read(17);let o=e.pos;return e.read(96),t>0&&e.read(t*2+(8-t)*2),{ptlStart:o,ptlEnd:e.pos,ptlBits:e.bits,maxSubLayersMinus1:t}}function go(r,e){r.w(16385,16),r.w(0,4),r.flag(1),r.flag(1),r.w(1,6),r.w(e.maxSubLayersMinus1,3),r.flag(e.maxSubLayersMinus1===0),r.w(65535,16),r.copy(e.ptlBits,e.ptlStart,e.ptlEnd-e.ptlStart),r.flag(1);for(let t=0;t<=e.maxSubLayersMinus1;t++)r.ue(4),r.ue(2),r.ue(4);r.w(1,6),r.ue(1),r.flag(1),r.flag(1),r.flag(0),r.flag(1),r.align(1);}function _o(r,e,t,o){if(r.copy(e.ptlBits,e.ptlEnd-8,8),e.maxSubLayersMinus1>0){for(let i=0;i<e.maxSubLayersMinus1;i++)r.w(0,2);for(let i=e.maxSubLayersMinus1;i<8;i++)r.w(0,2);}r.flag(0);for(let i=0;i<16;i++)r.flag(i===2||i===3);r.w(0,3),r.w(0,3),r.flag(1),r.w(1,6),r.w(1,1),r.w(1,1),r.w(0,4),r.flag(0),r.ue(0),r.flag(0),r.flag(0),r.flag(0),r.ue(2),r.flag(1),r.copy(e.ptlBits,e.ptlStart,e.ptlEnd-e.ptlStart),r.ue(0),r.w(0,2),r.w(1,2),r.w(2,2),r.ue(0),r.w(t,16),r.w(o,16),r.flag(1),r.w(1,2),r.w(0,4),r.w(0,4),r.flag(0),r.flag(1),r.flag(0),r.flag(1),r.flag(0),r.ue(0),r.ue(0),r.ue(0),r.ue(0),r.ue(0),r.flag(0),r.ue(0),r.flag(0),r.flag(0);}function ir(r,e,t){let o=wo(r);if(!o)return r;let i=new _e;return go(i,o),_o(i,o,e,t),i.bits.push(1),i.align(0),or(be(i.bits))}function nr(r,e){let t=r.data?.[0],o=r.linesize?.[0];if(!t||!o)throw new Error("extractAlpha: missing BGRA data");let i=r.width,n=r.height,a=i*n;if(t.byteOffset%4===0&&o===i*4){let c=new Uint32Array(t.buffer,t.byteOffset,a);for(let s=0;s<a;s++)e[s]=c[s]>>>24;}else for(let c=0;c<n;c++){let s=c*o+3,d=c*i;for(let p=0;p<i;p++)e[d+p]=t[s+p*4];}}var xo=39;function sr(r){let{baseExtradata:e,alphaExtradata:t}=r,o=Y(e),i=Y(t),n=new Map;for(let s of i){if(s.type===32)continue;let d=n.get(s.type)??[];d.push(s),n.set(s.type,d);}let a=[],c=new Set;for(let s of o){let d=s.type===32?ir(s.data,r.width,r.height):s.data;if(a.push(X,d),!c.has(s.type)){c.add(s.type);for(let p of n.get(s.type)??[])a.push(X,tt(p.data,1));}}return a.push(rt()),Buffer.concat(a)}function rt(){let[t,o]=et(xo,0,1),i=[],n=(a,c)=>{for(let s=c-1;s>=0;s--)i.push(a>>s&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([X,Buffer.from([t,o]),Buffer.from([165,4]),be(i),Buffer.from([128])])}function ar(r,e){let t=[];for(let o of r)t.push(X,o.data);for(let o of e)o.type<32&&t.push(X,tt(o.data,1));return Buffer.concat(t)}var ve=class r{_s;_seiBuffer;_pts=0n;_seiInjected=false;constructor(e){this._s=e,this._seiBuffer=rt();}static async create(e){let{width:t,height:o,fps:i,bitrate:n,muxer:a}=e,c=nodeAv.Codec.findEncoderByName(constants.FF_ENCODER_HEVC_NVENC);if(!c)throw new Error("hevc_nvenc encoder not found");let d={codec:c,width:t,height:o,fps:i,bitrate:n,options:{preset:"p4",bf:"0"}},p=await D({...d,pixelFormat:constants.AV_PIX_FMT_BGRA},"nvenc.base.open2"),u=await D({...d,pixelFormat:constants.AV_PIX_FMT_YUV420P},"nvenc.alpha.open2"),w=a.addStream(p,"hvc1");p.extraData&&u.extraData&&(w.codecpar.extradata=sr({baseExtradata:p.extraData,alphaExtradata:u.extraData,width:t,height:o}));let f=t*o,h=(t>>1)*(o>>1),g=Buffer.alloc(f+h*2);return g.fill(128,f),new r({baseCtx:p,alphaCtx:u,basePkt:P(),alphaPkt:P(),stream:w,alphaSwFrame:N(t,o,constants.AV_PIX_FMT_YUV420P),alphaBuf:g})}async encode(e,t){let{baseCtx:o,alphaCtx:i,alphaSwFrame:n,alphaBuf:a}=this._s,c=this._pts++;e.pts=c,e.duration=1n,nodeAv.FFmpegError.throwIfError(await o.sendFrame(e),"base.sendFrame"),nr(e,a),nodeAv.FFmpegError.throwIfError(n.makeWritable(),"alphaSw.makeWritable"),nodeAv.FFmpegError.throwIfError(n.fromBuffer(a),"alphaSw.fromBuffer"),n.pts=c,n.duration=1n,nodeAv.FFmpegError.throwIfError(await i.sendFrame(n),"alpha.sendFrame"),await this.drainInterleaved(t);}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,baseCtx:o,alphaCtx:i,alphaSwFrame:n}=this._s;e.free(),t.free(),n.free(),i.freeContext(),o.freeContext();}async drainInterleaved(e){let{baseCtx:t,alphaCtx:o,basePkt:i,alphaPkt:n,stream:a}=this._s;for(;;){let c=await t.receivePacket(i),s=await o.receivePacket(n),d=c>=0,p=s>=0;if(!d&&!p)break;if(d!==p)throw new Error(`NVENC desync: base=${d}, alpha=${p}`);let u=[];this._seiInjected||(u.push(this._seiBuffer),this._seiInjected=true),u.push(ar(Y(i.data),Y(n.data)));let w=i.pts,f=i.dts,h=i.duration;i.data=Buffer.concat(u),i.pts=w,i.dts=f,i.duration=h===0n?1n:h,i.streamIndex=a.index,i.rescaleTs(t.timeBase,a.timeBase),await e.writePacket(i),i.unref(),n.unref();}}};var J=class r{_ctx;_pkt;_stream;_pts=0n;constructor(e,t,o){this._ctx=e,this._pkt=t,this._stream=o;}static async create(e){let{codecName:t,codecTag:o,codecOpts:i,muxer:n,...a}=e,c=nodeAv.Codec.findEncoderByName(t);if(!c)throw new Error(`Video encoder not found: ${t}`);let s=await D({codec:c,...a,codecTag:o,options:i},"videoCtx.open2"),d=n.addStream(s,o);return new r(s,P(),d)}async encode(e,t){e.pts=this._pts++,e.duration=1n,nodeAv.FFmpegError.throwIfError(await this._ctx.sendFrame(e),"videoCtx.sendFrame"),await this.drain(t);}async flush(e){await this._ctx.sendFrame(null),await this.drain(e);}[Symbol.dispose](){this._pkt.free(),this._ctx.freeContext();}drain(e){return q(this._ctx,this._pkt,this._stream,e)}};var Ee=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:a,muxer:c}=e,s=n.getEncoderCodec("hevc");if(!s)throw new Error("hevc_videotoolbox encoder not found");let d=await D({codec:s,width:t,height:o,fps:i,bitrate:a,pixelFormat:constants.AV_PIX_FMT_BGRA,colorRange:constants.AVCOL_RANGE_JPEG,codecTag:"hvc1",options:{alpha_quality:"1"}},"vtEnc.open2"),p=c.addStream(d,"hvc1");return new r(d,P(),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 q(this._ctx,this._pkt,this._stream,e)}};var Pe="[Encoder]";async function dr(r,e){let{width:t,height:o,fps:i,bitrate:n=8e6,disableHwCodec:a=false,sharedHw:c}=r,s=c??(a?void 0:api.HardwareContext.auto()??void 0),d=!c&&!!s;try{if(s?.deviceTypeName===constants.FF_HWDEVICE_TYPE_VIDEOTOOLBOX&&s.getEncoderCodec("hevc"))return l.debug(Pe,"using VideoToolbox HEVC alpha encoder"),{hwVideo:await Ee.create({width:t,height:o,fps:i,hw:s,bitrate:n,muxer:e}),hw:s,ownsHw:d};if(s?.deviceTypeName===constants.FF_HWDEVICE_TYPE_CUDA&&s.getEncoderCodec("hevc"))return l.debug(Pe,"using NVENC dual-layer HEVC alpha encoder"),{hwVideo:await ve.create({width:t,height:o,fps:i,hw:s,bitrate:n,muxer:e}),hw:s,ownsHw:d}}catch(u){l.warn(Pe,"Hardware codec session limits reached, use software encoder",u),d&&s?.dispose();}return l.debug(Pe,"using software libx265 HEVC alpha encoder"),{video:await J.create({width:t,height:o,fps:i,codecName:constants.FF_ENCODER_LIBX265,codecTag:"hvc1",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 I.create(t,o),ownsHw:false}}var Fe=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 Ho="libvpx-vp9",de=class r{_s;_disposed=false;constructor(e){this._s=e;}static kindFromPath(e){let t=e.toLowerCase();if(t.endsWith(".webm"))return "webm";if(t.endsWith(".mp4")||t.endsWith(".mov"))return "mp4";throw new Error(`Unsupported output extension: ${e}`)}static async create(e){let t=new Fe(e.outFile),o=e.kind==="mp4"?await this.mp4Video(e,t):await this.webmVideo(e,t),i=e.withAudio?await this.audioFor(e,t):void 0;return await t.open(),new r({muxer:t,...o,audio:i,opts:e})}static mp4Video(e,t){let{width:o,height:i,fps:n,disableHwCodec:a,sharedHw:c}=e;return dr({width:o,height:i,fps:n,disableHwCodec:a,sharedHw:c},t)}static async webmVideo(e,t){let{width:o,height:i,fps:n}=e;return {video:await J.create({width:o,height:i,fps:n,codecName:Ho,codecOpts:{deadline:"realtime","cpu-used":"8","row-mt":"1",threads:"2"},bitrate:4e6,pixelFormat:constants.AV_PIX_FMT_YUVA420P,muxer:t}),codec:await I.create(o,i),ownsHw:false}}static audioFor(e,t){let o=e.kind==="mp4"?{outSampleRate:44100,outSampleFmt:constants.AV_SAMPLE_FMT_FLTP,codecName:constants.FF_ENCODER_AAC}:{outSampleRate:48e3,outSampleFmt:constants.AV_SAMPLE_FMT_FLT,codecName:constants.FF_ENCODER_LIBOPUS};return ge.create({...o,globalHeader:true,bitrate:128e3,muxer:t})}setInputRate(e){this._s.audio?.setInputRate(e);}async encodeBGRA(e){let{hwVideo:t,muxer:o}=this._s;return t?t.encode(e,o):this.swEncode(e)}async encodeDecodedFrame(e){let{hwVideo:t,muxer:o}=this._s;return t?t.encode(e,o):this.swEncode(e)}async encodeAudio(e){await this._s.audio?.encode(e,this._s.muxer);}async flush(){let{hwVideo:e,video:t,audio:o,muxer:i}=this._s;await o?.flush(i),e?await e.flush(i):await t.flush(i);}async[Symbol.asyncDispose](){if(this._disposed)return;this._disposed=true;let{muxer:e,video:t,hwVideo:o,audio:i,codec:n,hw:a,ownsHw:c}=this._s;t?.[Symbol.dispose](),o?.[Symbol.dispose](),i?.[Symbol.dispose](),n?.[Symbol.dispose](),await e[Symbol.asyncDispose](),c&&a?.dispose();}async swEncode(e){let{video:t,codec:o,muxer:i}=this._s;assert.ok(o?.sws,"sws not initialized"),nodeAv.FFmpegError.throwIfError(o.dst.makeWritable(),"sinkDst.makeWritable"),nodeAv.FFmpegError.throwIfError(await o.sws.scaleFrame(o.dst,e),"sinkSws.scaleFrame"),await t.encode(o.dst,i);}};var Q=class r{_s;_disposed=false;constructor(e){this._s=e;}static async create(e){let{width:t,height:o,fps:i,outFile:n,withAudio:a=false,disableHwCodec:c=false}=e,s=n.split(",").map(h=>h.trim()).filter(Boolean);if(s.length===0)throw new Error("outFile must contain at least one path");let d=s.map(h=>de.kindFromPath(h)),u=!c&&d.includes("mp4")?api.HardwareContext.auto()??void 0:void 0,w=u?.deviceTypeName===constants.FF_HWDEVICE_TYPE_VIDEOTOOLBOX||u?.deviceTypeName===constants.FF_HWDEVICE_TYPE_CUDA,f=[];for(let h=0;h<s.length;h++){let g=await de.create({outFile:s[h],kind:d[h],width:t,height:o,fps:i,withAudio:a,disableHwCodec:c,sharedHw:d[h]==="mp4"&&w?u:void 0});f.push(g);}return new r({sinks:f,sharedHw:u,limiter:new j(1),width:t,height:o,outFiles:s})}setupAudio(e){for(let t of this._s.sinks)t.setInputRate(e);}async encodeBGRA(e){await this._s.limiter.schedule(async()=>{var o=[];try{let t=C(o,this.bgraFrame(e));await Promise.all(this._s.sinks.map(c=>c.encodeBGRA(t)));}catch(i){var n=i,a=true;}finally{S(o,n,a);}});}async encodePNG(e){await this._s.limiter.schedule(async()=>{let{width:t,height:o}=this._s;this._s.pngCodec??=await I.create(t,o);let i=await this._s.pngCodec.decodePNG(e);for(let n of this._s.sinks)await n.encodeDecodedFrame(i);});}async encodeAudio(e){await this._s.limiter.schedule(async()=>{for(let t of this._s.sinks)await t.encodeAudio(e);});}async finish(){try{await this._s.limiter.drain();for(let e of this._s.sinks)await e.flush();}finally{await this.free();}return this._s.outFiles}async[Symbol.asyncDispose](){this._disposed||(await this._s.limiter.drain(),await this.free());}async free(){if(!this._disposed){this._disposed=true;for(let e of this._s.sinks)await e[Symbol.asyncDispose]();this._s.pngCodec?.[Symbol.dispose](),this._s.sharedHw?.dispose();}}bgraFrame(e){let t=N(this._s.width,this._s.height,constants.AV_PIX_FMT_BGRA);return nodeAv.FFmpegError.throwIfError(t.fromBuffer(e),"bgraFrame.fromBuffer"),t}};var Ce=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 d=Math.max(0,s-1);t+=(d/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,e){return r.width===e.width&&r.height===e.height}var ot="audio-meta",it="audio-chunk",Jo=`
|
|
96
96
|
(function() {
|
|
97
97
|
if (window.__pup_audio_capturing__) return;
|
|
98
98
|
window.__pup_audio_capturing__ = true;
|
|
@@ -126,7 +126,7 @@
|
|
|
126
126
|
capturedContexts.add(ctx);
|
|
127
127
|
if (!metaSent) {
|
|
128
128
|
metaSent = true;
|
|
129
|
-
ipcRenderer.send('${
|
|
129
|
+
ipcRenderer.send('${ot}', { sampleRate: ctx.sampleRate });
|
|
130
130
|
}
|
|
131
131
|
const node = ctx.createScriptProcessor(4096, 2, 2);
|
|
132
132
|
node.onaudioprocess = (e) => {
|
|
@@ -137,7 +137,7 @@
|
|
|
137
137
|
out[i * 2] = L[i];
|
|
138
138
|
out[i * 2 + 1] = R[i];
|
|
139
139
|
}
|
|
140
|
-
ipcRenderer.send('${
|
|
140
|
+
ipcRenderer.send('${it}', Buffer.from(out.buffer));
|
|
141
141
|
};
|
|
142
142
|
node.connect(ctx.destination);
|
|
143
143
|
ctx.__pup_captureNode__ = node;
|
|
@@ -164,9 +164,9 @@
|
|
|
164
164
|
return origPlay.call(this);
|
|
165
165
|
};
|
|
166
166
|
})();
|
|
167
|
-
`;async function
|
|
167
|
+
`;async function mr({encoder:r,getVideoTimeMs:e,onError:t}){let o=path.join(os.tmpdir(),`pup_audio_${crypto.randomUUID()}.js`);return await promises.writeFile(o,Jo),electron.session.defaultSession.registerPreloadScript({type:"frame",id:"pup-audio",filePath:o}),electron.ipcMain.on(ot,async(i,n)=>{let a=n.sampleRate,c=e();r.setupAudio(a);let s=Math.ceil(c*a/1e3);if(!(s<=0))try{await r.encodeAudio(Buffer.alloc(s*2*4));}catch(d){t(d);}}),electron.ipcMain.on(it,async(i,n)=>{try{await r.encodeAudio(n);}catch(a){t(a);}}),{async teardown(){electron.ipcMain.removeAllListeners(ot),electron.ipcMain.removeAllListeners(it),electron.session.defaultSession.unregisterPreloadScript("pup-audio"),await promises.rm(o,{force:true});}}}function lr({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 a=[r(...i)];return t&&a.push(promises$1.setTimeout(t).then(()=>{throw o})),await Promise.race(a)}catch(a){if(n++,n>=e)throw a;await fe(Math.pow(2,n)*100+Math.random()*100);}}}var nt=["file:","http:","https:","data:"],Zo=/^(file:|https?:|data:)/;function fr(r){if(Zo.test(r))return;let e=r.split(":")[0]+":",t=nt.includes(e)?`unsupported protocol: ${e}, expected ${nt.join(", ")}`:`invalid source format, expected ${nt.join(", ")}`;throw new Error(t)}var Te=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 ke="[Network]",ti=new Map([["jssz-boss.hdslb.com","jssz-boss.bilibili.co"],["boss.hdslb.com","shjd-boss.bilibili.co"]]);function st(r){if(!r.startsWith("http"))return r;let e=new url.URL(r),t=ti.get(e.hostname);return t?(e.hostname=t,e.protocol="http:",e.toString()):r}function hr({source:r,window:e,useInnerProxy:t}){let o=e.webContents.session.webRequest,i=new j(64),n=new Map;async function a(s,d){let p=new Te;n.set(s,p),await p.wait({timeout:5e3,onTimeout:d}).finally(()=>n.delete(s));}function c(s){n.get(s)?.signal();}o.onBeforeRequest((s,d)=>{let p=s.url,u=t?st(p):p;i.schedule(()=>{let w=`${e.id}_${s.id}`;return l.debug(ke,"start:",{key:w,url:p,proxied:u,method:s.method,source:r,stats:i.stats}),d(u===p?{cancel:false}:{cancel:false,redirectURL:u}),a(w,()=>{l.warn(ke,"maybe timeout:",{key:w,url:p,proxied:u,method:s.method,source:r});})});}),o.onHeadersReceived(({responseHeaders:s},d)=>{delete s?.["x-frame-options"],delete s?.["X-Frame-Options"],delete s?.["content-security-policy"],delete s?.["Content-Security-Policy"],d({cancel:false,responseHeaders:s});}),o.onCompleted(s=>{let d=`${e.id}_${s.id}`;c(d),l.debug(ke,"completed:",{key:d,url:s.url,method:s.method,statusCode:s.statusCode,source:r});}),o.onErrorOccurred(s=>{let d=`${e.id}_${s.id}`;c(d),l.error(ke,"error:",{key:d,url:s.url,method:s.method,error:s.error,source:r});});}function at(r){let e=r.webContents.session.webRequest;e.onBeforeRequest(null),e.onHeadersReceived(null),e.onCompleted(null),e.onErrorOccurred(null);}var L="[Window]",wr=new Error("window timeout");function oi({source:r,win:e,action:t,tolerant:o}){return new Promise((i,n)=>{let a=setTimeout(()=>c(wr),1e4),c=s=>{clearTimeout(a),s?n(s):i();};e.webContents.once("dom-ready",()=>{l.debug(L,"dom-ready:",{source:r}),o&&c();}),e.webContents.once("did-stop-loading",()=>{l.debug(L,"did-stop-loading:",{source:r}),c();}),e.webContents.once("did-fail-load",(s,d,p,u)=>{let w=`did-fail-load: ${JSON.stringify({url:u,source:r,code:d,desc:p})}`;l.error(L,w),c(new Error(w));}),e.webContents.once("render-process-gone",(s,{exitCode:d,reason:p})=>{let u=`render-process-gone: ${JSON.stringify({source:r,exitCode:d,reason:p})}`;l.error(L,u),c(new Error(u));}),t();})}function Z(r){return new Promise(e=>{at(r);let t=false,o=()=>{t||(t=true,e());};r.once("closed",o),r.close(),setTimeout(()=>{if(!t){try{l.warn(L,"force close"),r.destroy();}catch{}o();}},1e3);})}async function gr({source:r,onCreated:e,renderer:t,warmup:o,tolerant:i}){fr(r);let{width:n,height:a,useInnerProxy:c}=t,s=c?st(r):r,d=new electron.BrowserWindow({width:n,height:a+1,minWidth:n,minHeight:a+1,maxWidth:n,maxHeight:a+1,resizable:false,minimizable:false,movable:false,show:false,transparent:true,backgroundColor:void 0,frame:false,webPreferences:{offscreen:true,backgroundThrottling:false,nodeIntegration:true,nodeIntegrationInSubFrames:true,nodeIntegrationInWorker:true,contextIsolation:false,webSecurity:false,allowRunningInsecureContent:true,experimentalFeatures:true}});hr({source:r,window:d,useInnerProxy:c}),o||await e?.(d),d.webContents.on("console-message",({level:p,message:u,lineNumber:w,sourceId:f})=>{let h=[L,"console:",{message:u,lineNumber:w,sourceId:f,source:r}];p==="error"?l.error(...h):l.debug(...h);});try{let p=qt(s,{width:n,height:a});await oi({source:r,win:d,action:()=>d.loadURL(p),tolerant:i});}catch(p){throw await Z(d),p}return d}var ii=lr({fn:gr,maxAttempts:2});async function Ie({source:r,onCreated:e,renderer:t}){let o,i;try{o=await ii({source:r,renderer:t,warmup:!0});}catch(a){i=a;}let n=()=>gr({source:r,renderer:t,onCreated:e,tolerant:t.windowTolerant});if(t.windowTolerant&&i===wr)return l.warn(L,`warmup timeout: ${r}, falling back to dom-ready`),await n();if(i){let{message:a,stack:c}=i;throw new Error(`failed to warmup window: ${JSON.stringify({source:r,message:a,stack:c})}`)}o&&(o.webContents.removeAllListeners(),at(o),await fe(2e3),await Z(o));try{return await n()}catch(a){let{message:c,stack:s}=a;throw new Error(`failed to load window: ${JSON.stringify({source:r,message:c,stack:s})}`)}}async function _r(r,e,t){var ee=[];try{let{fps:o,width:i,height:n,duration:a,withAudio:c,outFile:s,disableHwCodec:d}=t;let p=C(ee,await Q.create({width:i,height:n,fps:o,outFile:s,withAudio:c,disableHwCodec:d}),!0);let u=Math.ceil(o*a);let w=1e3/o;let f={width:i,height:n+1};let h=0;let g;let b=0;let v;let x;let y;let _=new Ce(o);let A;let H=F=>{h++,p.encodeBGRA(F).catch($=>v??=$);};let ue=(F,$,re)=>{if(v){y?.(v);return}let pe=re.getSize();if(!Se(pe,f)){he(W,f);return}let De=re.toBitmap(),oe=we(De,pe);if(oe===void 0){v??=new Error(`no timestamp @ ${h}`);return}if(g!==void 0&&oe-g<w*.8)return;let Ne=Buffer.from(De.buffer,De.byteOffset,n*i*4);if(g===void 0)H(Ne),_.wrote();else {let ut=oe-g;if(ut<=w*1.2)H(Ne),_.wrote();else {let pt=Math.round(ut/w);_.dropped(pt-1),_.wrote();for(let mt=0;mt<pt&&h<u;mt++)H(Ne);}}g=oe;let dt=Math.floor(h/u*100);Math.abs(dt-b)>10&&(b=dt,r.writeProgress(b));let vr=a*1e3;(oe>=vr-w*.5||h>=u)&&x?.();};let T=await Ie({source:e,renderer:t,onCreated:async()=>{c&&(A=await mr({encoder:p,getVideoTimeMs:()=>g??0,onError:F=>v??=F}));}});let W=T.webContents.debugger;W.attach("1.3");T.webContents.stopPainting();T.webContents.setFrameRate(o);T.webContents.on("paint",ue);T.webContents.startPainting();try{await $t(W),await new Promise((F,$)=>[x,y]=[F,$]);}finally{await Gt(W),T.webContents.off("paint",ue),await Z(T),await A?.teardown(),await p.finish();}if(v||h===0)throw v??new Error("no frames captured");else {let F=_.finalize();return {written:h,jank:F.jank,outFile:s}}}catch(Be){var Me=Be,te=true;}finally{var U=S(ee,Me,te);U&&await U;}}var Re="__pup_tick__",ni="[Tick]",si=`(function() {
|
|
168
168
|
if (window.self === window.top) return;
|
|
169
|
-
if (typeof ${
|
|
169
|
+
if (typeof ${Re} !== 'undefined') return;
|
|
170
170
|
|
|
171
171
|
const orig = {
|
|
172
172
|
Date: Date,
|
|
@@ -254,9 +254,9 @@
|
|
|
254
254
|
window.clearTimeout = orig.clearTimeout;
|
|
255
255
|
window.setInterval = orig.setInterval;
|
|
256
256
|
window.clearInterval = orig.clearInterval;
|
|
257
|
-
delete window.${
|
|
257
|
+
delete window.${Re};
|
|
258
258
|
}
|
|
259
259
|
|
|
260
|
-
window.${
|
|
261
|
-
})();`;async function
|
|
262
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL3RzdXBAOC41LjErZWMyNjk5NDgyYjVjZGE2NC9ub2RlX21vZHVsZXMvdHN1cC9hc3NldHMvY2pzX3NoaW1zLmpzIiwiLi4vc3JjL2Jhc2UvZW52LnRzIiwiLi4vc3JjL2Jhc2UvcGFyc2VyLnRzIiwiLi4vc3JjL2Jhc2UvY29uc3RhbnRzLnRzIiwiLi4vc3JjL2Jhc2UvbG9nZ2luZy50cyIsIi4uL3NyYy9iYXNlL25vZXJyLnRzIiwiLi4vc3JjL2Jhc2UvcHJvY2Vzcy50cyIsIi4uL3NyYy9yZW5kZXJlci9zY2hlbWEudHMiLCIuLi9zcmMvY29tbW9uLnRzIiwiLi4vc3JjL3JlbmRlcmVyL2lwYy50cyIsIi4uL3NyYy9yZW5kZXJlci9zdGVnby50cyIsIi4uL3NyYy9yZW5kZXJlci9wcm90b2NvbC50cyIsIi4uL3NyYy9iYXNlL2xpbWl0ZXIudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL21pc2MudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL2F1ZGlvLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9jb2RlYy50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvYml0LnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9uYWwudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL3Zwcy50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvYWxwaGEudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL252ZW5jLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci92aWRlby50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvdmlkZW90b29sYm94LnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9mYWN0b3J5LnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9tdXhlci50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvcGlwZWxpbmUudHMiLCIuLi9zcmMvYmFzZS9mcmFtZV9kcm9wLnRzIiwiLi4vc3JjL2Jhc2UvaW1hZ2UudHMiLCIuLi9zcmMvcmVuZGVyZXIvYXVkaW8udHMiLCIuLi9zcmMvYmFzZS90aW1pbmcudHMiLCIuLi9zcmMvYmFzZS9yZXRyeS50cyIsIi4uL3NyYy9yZW5kZXJlci9odG1sX2NoZWNrLnRzIiwiLi4vc3JjL2Jhc2Uvd2FpdGFibGVfZXZlbnQudHMiLCIuLi9zcmMvcmVuZGVyZXIvbmV0d29yay50cyIsIi4uL3NyYy9yZW5kZXJlci93aW5kb3cudHMiLCIuLi9zcmMvcmVuZGVyZXIvcmVuZGVyLnRzIiwiLi4vc3JjL2Jhc2UvY2RwLnRzIiwiLi4vc3JjL2Jhc2UvaHdhY2NlbC50cyIsIi4uL3NyYy9yZW5kZXJlci90aWNrLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3Nob290LnRzIiwiLi4vc3JjL2FwcC50cyJdLCJuYW1lcyI6WyJnZXRJbXBvcnRNZXRhVXJsIiwiaW1wb3J0TWV0YVVybCIsInBlbnYiLCJuYW1lIiwicGFyc2VyIiwiZGVmYXVsdFZhbHVlIiwicGFyc2VOdW1iZXIiLCJ4IiwibnVtIiwicmVxdWlyZSIsImNyZWF0ZVJlcXVpcmUiLCJlbnYiLCJwdXBMb2dMZXZlbCIsInB1cFVzZUlubmVyUHJveHkiLCJwdXBEaXNhYmxlR1BVIiwicHVwRGlzYWJsZUh3Q29kZWMiLCJwdXBEZXRlcm1pbmlzdGljIiwicHVwUGtnUm9vdCIsImRpcm5hbWUiLCJqb2luIiwicHVwSXBjU29ja2V0IiwicHVwV2luZG93VG9sZXJhbnQiLCJERUJVRyIsIklORk8iLCJXQVJOIiwiRVJST1IiLCJGQVRBTCIsInN0YWNrSG9vayIsInRhcmdldCIsIl9jb250ZXh0IiwibWVzc2FnZXMiLCJwcm9jZXNzZWQiLCJtc2ciLCJfZmF0YWxfZGVjIiwiX2Vycm9yX2RlYyIsIl93YXJuX2RlYyIsIl9pbmZvX2RlYyIsIl9kZWJ1Z19kZWMiLCJfaW5pdCIsIkxvZ2dlciIsIl9sZXZlbCIsIl9fcnVuSW5pdGlhbGl6ZXJzIiwiX19wdWJsaWNGaWVsZCIsInZhbHVlIiwiZGVidWciLCJpbmZvIiwid2FybiIsImVycm9yIiwibHYiLCJtZXNzYWdlIiwicHJvYyIsInJlc29sdmUiLCJyZWplY3QiLCJmYXRhbCIsImRpc3BhdGNoIiwiZGF0YSIsImVyciIsImNvZGUiLCJzaWduYWwiLCJyZWFzb24iLCJfX2RlY29yYXRvclN0YXJ0IiwiX19kZWNvcmF0ZUVsZW1lbnQiLCJfX2RlY29yYXRvck1ldGFkYXRhIiwibG9nZ2VyIiwiTG9nIiwibGV2ZWwiLCJBVl9MT0dfRVJST1IiLCJBVl9MT0dfV0FSTklORyIsIm5vZXJyIiwiZm4iLCJhcmdzIiwicmV0IiwiUFVQX0FSR1NfS0VZIiwicGFyZ3MiLCJhcmd2IiwicHJpdiIsImFyZyIsIkRFRkFVTFRfV0lEVEgiLCJERUZBVUxUX0hFSUdIVCIsIkRFRkFVTFRfRlBTIiwiREVGQVVMVF9EVVJBVElPTiIsIkRFRkFVTFRfT1VUX0ZJTEUiLCJSZW5kZXJTY2hlbWEiLCJ6IiwiZGVmYXVsdFJlbmRlck9wdGlvbnMiLCJtYWtlQ0xJIiwib3B0aW9ucyIsInNoYXBlIiwiZCIsInByb2dyYW0iLCJzb3VyY2UiLCJvcHRzIiwiZSIsIkhFQURFUl9TSVpFIiwiSXBjV3JpdGVyIiwiX3NvY2tldCIsInBheWxvYWQiLCJ0eXBlIiwiaGVhZGVyIiwiY29ubmVjdElwYyIsInNvY2tldFBhdGgiLCJzb2NrZXQiLCJjcmVhdGVDb25uZWN0aW9uIiwiRlJBTUVfU1lOQ19NQVJLRVJfV0lEVEgiLCJTVEVHT19USUNLX0NIQU5ORUwiLCJidWlsZFN0ZWdvSFRNTCIsInRhcmdldFVSTCIsInNpemUiLCJ3aWR0aCIsImhlaWdodCIsImRlY29kZVN0ZWdvIiwiYml0bWFwIiwibWFya2VyUm93IiwidGltZXN0YW1wIiwiaSIsInBpeGVsSWR4IiwiYml0Iiwic3RhcnRTdGVnbyIsImZyYW1lIiwic3dhcEJ1ZmZlciIsImV4cGVjdGVkIiwic3dhcHBlZCIsImhhbmRsZXIiLCJfZSIsIm1zIiwic3RvcFN0ZWdvIiwiUFVQX1NDSEVNRSIsInByb3RvY29sIiwic2V0dXBQdXBQcm90b2NvbCIsInJlcSIsInVybCIsInNyYyIsImh0bWwiLCJjcmVhdGVTdGVnb1VSTCIsIkNvbmN1cnJlbmN5TGltaXRlciIsIm1heENvbmN1cnJlbmN5IiwidiIsInIiLCJrZWVwIiwiZW50cnkiLCJvcGVuVmlkZW9DdHgiLCJsYWJlbCIsImN0eCIsIkNvZGVjQ29udGV4dCIsIlJhdGlvbmFsIiwiQVZfQ09ERUNfRkxBR19HTE9CQUxfSEVBREVSIiwiayIsIkZGbXBlZ0Vycm9yIiwibWFrZUZyYW1lIiwicGl4Rm10IiwiRnJhbWUiLCJtYWtlUGFja2V0IiwicGt0IiwiUGFja2V0IiwiZHJhaW5QYWNrZXRzIiwic3RyZWFtIiwibXV4ZXIiLCJBVkVSUk9SX0VBR0FJTiIsIkFWRVJST1JfRU9GIiwiU0FNUExFX0ZNVF9OQU1FIiwiQVZfU0FNUExFX0ZNVF9GTFQiLCJBVl9TQU1QTEVfRk1UX0ZMVFAiLCJBdWRpb0VuY29kZXIiLCJfQXVkaW9FbmNvZGVyIiwib3V0Rm10IiwiY29kZWMiLCJDb2RlYyIsIkFWX0NIQU5ORUxfTEFZT1VUX1NURVJFTyIsImluU2FtcGxlUmF0ZSIsImdyYXBoIiwiRmlsdGVyR3JhcGgiLCJhYnVmZmVyIiwiRmlsdGVyIiwiYnVmU3JjIiwiYWJ1ZmZlcnNpbmsiLCJidWZTaW5rIiwiZmlsdGVyRGVzYyIsIm91dHB1dHMiLCJGaWx0ZXJJbk91dCIsImlucHV0cyIsInBjbSIsIl9zdGFjayIsIm5TYW1wbGVzIiwiX191c2luZyIsIl8iLCJfZXJyb3IiLCJfaGFzRXJyb3IiLCJfX2NhbGxEaXNwb3NlIiwiQ29kZWNTdGF0ZSIsIl9Db2RlY1N0YXRlIiwiRkZfREVDT0RFUl9QTkciLCJvayIsInBuZyIsIkFWX1BJWF9GTVRfQkdSQSIsIkFWX1BJWF9GTVRfWVVWQTQyMFAiLCJwbmdEYXRhIiwic3dzIiwiU29mdHdhcmVTY2FsZUNvbnRleHQiLCJmbXQiLCJTV1NfQklMSU5FQVIiLCJwYWNrQml0cyIsImJpdHMiLCJidWYiLCJieXRlIiwiYiIsIkJpdFdyaXRlciIsInZhbCIsIm4iLCJsZW4iLCJwYWQiLCJzdGFydCIsIkJpdFJlYWRlciIsInplcm9zIiwiQU5ORVhfQl9TVEFSVF9DT0RFIiwicGFyc2VOYWxUeXBlIiwiaGVhZGVyMCIsImhlYWRlcjEiLCJsYXllcklkIiwidGVtcG9yYWxJZCIsImVuY29kZU5hbEhlYWRlciIsImJ5dGUwIiwiYnl0ZTEiLCJzcGxpdE5hbFVuaXRzIiwiYml0c3RyZWFtIiwibmFscyIsInNjTGVuIiwibmFsU3RhcnQiLCJuYWxFbmQiLCJqIiwicmV3cml0ZU5hbExheWVySWQiLCJuYWwiLCJvdXQiLCJiMCIsImIxIiwicmVtb3ZlRW11bGF0aW9uUHJldmVudGlvbiIsImFkZEVtdWxhdGlvblByZXZlbnRpb24iLCJleHRyYWN0UFRMIiwidnBzRGF0YSIsImJyIiwibWF4U3ViTGF5ZXJzTWludXMxIiwicHRsU3RhcnQiLCJ3cml0ZUJhc2VWUFMiLCJidyIsInB0bCIsIndyaXRlVlBTRXh0ZW5zaW9uIiwiYnVpbGRBbHBoYVZQUyIsIk5BTF9VTklUX1BSRUZJWF9TRUkiLCJidWlsZFVuaWZpZWRFeHRyYWRhdGEiLCJiYXNlRXh0cmFkYXRhIiwiYWxwaGFFeHRyYWRhdGEiLCJiYXNlTmFscyIsImFscGhhTmFscyIsImFscGhhQnlUeXBlIiwiYXJyIiwiY2h1bmtzIiwiZW1pdHRlZCIsImFscGhhTmFsIiwiYnVpbGRBbHBoYUNoYW5uZWxJbmZvU0VJIiwiaDAiLCJoMSIsIndyaXRlQml0cyIsImludGVybGVhdmVBY2Nlc3NVbml0cyIsIk52ZW5jRHVhbExheWVyRW5jb2RlciIsIl9OdmVuY0R1YWxMYXllckVuY29kZXIiLCJzIiwiZnBzIiwiYml0cmF0ZSIsIkZGX0VOQ09ERVJfSEVWQ19OVkVOQyIsImNvbW1vbiIsImJhc2VDdHgiLCJhbHBoYUN0eCIsIkFWX1BJWF9GTVRfWVVWNDIwUCIsImJhc2VQa3QiLCJhbHBoYVBrdCIsImJhc2VFeHRyYSIsImFscGhhRXh0cmEiLCJiZ3JhRnJhbWUiLCJwdHMiLCJzcmNMcyIsInciLCJoIiwieVNpemUiLCJ1dlNpemUiLCJ5IiwiYmFzZVIiLCJhbHBoYVIiLCJiYXNlUmVhZHkiLCJhbHBoYVJlYWR5IiwiZHRzIiwiZHVyYXRpb24iLCJWaWRlb0VuY29kZXIiLCJfVmlkZW9FbmNvZGVyIiwiY29kZWNOYW1lIiwiY29kZWNUYWciLCJjb2RlY09wdHMiLCJyZXN0IiwiVmlkZW9Ub29sYm94RW5jb2RlciIsIl9WaWRlb1Rvb2xib3hFbmNvZGVyIiwiaHciLCJBVkNPTF9SQU5HRV9KUEVHIiwiVEFHIiwiY3JlYXRlVmlkZW9FbmNvZGVyIiwiZGlzYWJsZUh3Q29kZWMiLCJIYXJkd2FyZUNvbnRleHQiLCJGRl9IV0RFVklDRV9UWVBFX1ZJREVPVE9PTEJPWCIsIkZGX0hXREVWSUNFX1RZUEVfQ1VEQSIsIkZGX0VOQ09ERVJfTElCWDI2NSIsIkZvcm1hdE11eGVyIiwib3V0UGF0aCIsImZvcm1hdE5hbWUiLCJGb3JtYXRDb250ZXh0IiwiY29kZWNDdHgiLCJFbmNvZGVyUGlwZWxpbmUiLCJfRW5jb2RlclBpcGVsaW5lIiwib3V0RmlsZSIsIndpdGhBdWRpbyIsInZpZGVvIiwiaHdWaWRlbyIsImF1ZGlvIiwiRkZfRU5DT0RFUl9BQUMiLCJzYW1wbGVSYXRlIiwiaW5wdXQiLCJkc3QiLCJjcyIsImxpbWl0ZXIiLCJfbSIsIl92IiwiX2h2IiwiX2EiLCJfcHJvbWlzZSIsIl9jb2RlYyIsIkZyYW1lRHJvcFN0YXRzIiwiY291bnQiLCJ0b3RhbERyb3BwZWQiLCJsb2NhbFN1bSIsIm1heEJ1cnN0IiwiYnVyc3QiLCJwZXJjZXB0aWJsZSIsImciLCJsIiwic2NvcmUiLCJpc0VtcHR5IiwiaW1hZ2UiLCJBVURJT19NRVRBX0NIQU5ORUwiLCJBVURJT19DSFVOS19DSEFOTkVMIiwiQVVESU9fQ0FQVFVSRV9TQ1JJUFQiLCJzZXR1cEF1ZGlvQ2FwdHVyZSIsImVuY29kZXIiLCJnZXRWaWRlb1RpbWVNcyIsIm9uRXJyb3IiLCJwcmVsb2FkUGF0aCIsInRtcGRpciIsInJhbmRvbVVVSUQiLCJ3cml0ZUZpbGUiLCJzZXNzaW9uIiwiaXBjTWFpbiIsInN0YXJ0TXMiLCJzaWxlbmNlU2FtcGxlcyIsImJ1ZmZlciIsInJtIiwic2xlZXAiLCJ1c2VSZXRyeSIsIm1heEF0dGVtcHRzIiwidGltZW91dCIsInRpbWVvdXRFcnJvciIsImF0dGVtcHQiLCJwcm9taXNlcyIsInNldFRpbWVvdXQiLCJTVVBQT1JURURfUFJPVE9DT0xTIiwiU09VUkNFX1BBVFRFUk4iLCJjaGVja0hUTUwiLCJXYWl0YWJsZUV2ZW50IiwibWFwIiwicHJveGllZFVybCIsInBhcnNlZCIsIlVSTCIsInNldEludGVyY2VwdG9yIiwid2luZG93IiwidXNlSW5uZXJQcm94eSIsImV2ZW50cyIsIndhaXQiLCJrZXkiLCJvblRpbWVvdXQiLCJldmVudCIsImRldGFpbHMiLCJjYWxsYmFjayIsInByb3hpZWQiLCJyZXNwb25zZUhlYWRlcnMiLCJ1bnNldEludGVyY2VwdG9yIiwiVElNRU9VVF9FUlJPUiIsIndhaXRGb3JGaW5pc2giLCJ3aW4iLCJhY3Rpb24iLCJ0b2xlcmFudCIsImludGVydmFsIiwiZG9uZSIsInN0ZWdvRnJhbWUiLCJhdHRhY2hlZCIsImlzTWFpbkZyYW1lIiwiZnJhbWVQcm9jZXNzSWQiLCJmcmFtZVJvdXRpbmdJZCIsImRlc2MiLCJleGl0Q29kZSIsIndhaXRGb3JEZXN0cm95Iiwib3BlbldpbmRvdyIsIm9uQ3JlYXRlZCIsInJlbmRlcmVyIiwid2FybXVwIiwiQnJvd3NlcldpbmRvdyIsImxpbmVOdW1iZXIiLCJzb3VyY2VJZCIsIm1zZ3MiLCJvcGVuV2luZG93V2l0aFJldHJ5IiwibG9hZFdpbmRvdyIsIm9wZW4iLCJzdGFjayIsInJlbmRlciIsIndyaXRlciIsInRvdGFsIiwiZnJhbWVJbnRlcnZhbCIsIndyaXR0ZW4iLCJsYXN0V3JpdHRlblRpbWUiLCJwcm9ncmVzcyIsImVuY29kZUVycm9yIiwicmVzb2x2ZXIiLCJyZWplY3RlciIsImRyb3BTdGF0cyIsInNjaGVkdWxlRnJhbWUiLCJwYWludCIsIl9yIiwiY3VycmVudFRpbWUiLCJjcm9wcGVkIiwidGltZURlbHRhIiwiZnJhbWVzVG9JbnNlcnQiLCJuZXdQcm9ncmVzcyIsImR1cmF0aW9uTXMiLCJjZHAiLCJtYWluIiwiZHJvcFNjb3JlIiwiYWR2YW5jZVZpcnR1YWxUaW1lIiwiYnVkZ2V0IiwibWV0aG9kIiwicGF1c2VWaXJ0dWFsVGltZSIsImRldGVjdEdQVURyaXZlciIsInJlc3VsdCIsImNhbklVc2VHUFUiLCJUSUNLX1NZTUJPTCIsIkhPT0siLCJ0aWNrIiwidGltZXN0YW1wTXMiLCJfZCIsInRzIiwic2hvb3QiLCJkaXNhYmxlR3B1IiwicGlwZWxpbmUiLCJncHUiLCJpZnJhbWUiLCJyZW5kZXJGcHMiLCJyZW5kZXJJbnRlcnZhbCIsImZyYW1lTXMiLCJwcmludEZlYXR1cmVzIiwiYXBwIiwiZXhpdCIsImMiLCJpcGMiLCJta2RpciIsIm0iXSwibWFwcGluZ3MiOiI0a0JBS0EsSUFBQSxFQUFBLENBQUEsTUFBQSxDQUFBLE1BQUEsQ0FBQSxJQUFBLEVBQUEsQ0FBQSxNQUFBLENBQUEsY0FBQSxDQUFBLElBQUEsRUFBQSxDQUFBLE1BQUEsQ0FBQSx3QkFBQSxDQUFBLElBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsR0FBQSxDQUFBLENBQUEsQ0FBQSxNQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLE1BQUEsQ0FBQSxHQUFBLENBQUEsU0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxNQUFBLFNBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLElBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEdBQUEsQ0FBQSxJQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLFVBQUEsQ0FBQSxJQUFBLENBQUEsWUFBQSxDQUFBLElBQUEsQ0FBQSxRQUFBLENBQUEsSUFBQSxDQUFBLEtBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsSUFBQSxFQUFBLENBQUEsQ0FBQSxFQUFBLElBQUEsRUFBQSxDQUFBLElBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsT0FBQSxDQUFBLFFBQUEsQ0FBQSxRQUFBLENBQUEsUUFBQSxDQUFBLFVBQUEsQ0FBQSxPQUFBLENBQUEsT0FBQSxDQUFBLEtBQUEsQ0FBQSxLQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsR0FBQSxNQUFBLEVBQUEsT0FBQSxDQUFBLEVBQUEsVUFBQSxDQUFBLENBQUEsQ0FBQSxtQkFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLElBQUEsQ0FBQSxJQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLElBQUEsQ0FBQSxDQUFBLENBQUEsUUFBQSxDQUFBLENBQUEsQ0FBQSxjQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLHFCQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsSUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsSUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsR0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxVQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEdBQUEsQ0FBQSxJQUFBLElBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxNQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsSUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLE9BQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEdBQUEsQ0FBQSxJQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsS0FBQSxDQUFBLENBQUEsQ0FBQSxLQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxHQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsU0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxJQUFBLElBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxNQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLE1BQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLE9BQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxNQUFBLENBQUEsQ0FBQSxHQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsSUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxHQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsSUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsR0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsT0FBQSxDQUFBLEVBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEdBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLElBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEdBQUEsQ0FBQSxHQUFBLENBQUEsRUFBQSxJQUFBLENBQUEsQ0FBQSxPQUFBLENBQUEsRUFBQSxRQUFBLEVBQUEsT0FBQSxDQUFBLEVBQUEsVUFBQSxFQUFBLENBQUEsQ0FBQSxpQkFBQSxDQUFBLENBQUEsSUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsR0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxjQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxHQUFBLE1BQUEsR0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxTQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsR0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxPQUFBLENBQUEsRUFBQSxVQUFBLEVBQUEsQ0FBQSxDQUFBLHVCQUFBLENBQUEsQ0FBQSxDQUFBLEdBQUEsQ0FBQSxDQUFBLFVBQUEsQ0FBQSxHQUFBLENBQUEsQ0FBQSxDQUFBLElBQUEsQ0FBQSxJQUFBLEVBQUEsQ0FBQSxNQUFBLENBQUEsQ0FBQSxDQUFBLE9BQUEsT0FBQSxDQUFBLE1BQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsSUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLEtBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxJQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLE9BQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEdBQUEsQ0FBQSxJQUFBLENBQUEsQ0FBQSxPQUFBLGVBQUEsRUFBQSxVQUFBLENBQUEsZUFBQSxDQUFBLFNBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsT0FBQSxDQUFBLENBQUEsS0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxJQUFBLENBQUEsaUJBQUEsQ0FBQSxDQUFBLENBQUEsS0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsVUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsSUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSx5Q0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLElBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsS0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEdBQUEsRUFBQSxFQUFBLEdBQUEsQ0FBQSxJQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLElBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxHQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxPQUFBLE9BQUEsQ0FBQSxPQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsSUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEdBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxNQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEs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LENBQUssSUFBTSxDQUFBLEVBQUssQ0FBQSxHQUFNLENBQUMsQ0FBQSxDQUN2REEsRUFBRyxDQUFBLENBQUUsQ0FBQSxDQUFHLENBQUMsQ0FBQSxDQUNUQSxFQUFHLENBQUEsQ0FBRSxDQUFBLENBQUcsQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsSUFBQSxDQUFLLENBQUMsQ0FBQSxDQUNUQSxFQUFHLENBQUEsQ0FBRSxDQUFBLENBQUcsQ0FBQyxDQUFBLENBQ1RBLEVBQUcsQ0FBQSxDQUFFLENBQUEsQ0FBRyxDQUFDLENBQUEsQ0FDVEEsRUFBRyxDQUFBLENBQUUsQ0FBQSxDQUFHLENBQUMsQ0FBQSxDQUNUQSxDQUFBQSxDQUFHLENBQUEsQ0FBRSxDQUFBLENBQUcsQ0FBQyxFQUVUQSxDQUFBQSxDQUFHLElBQUEsQ0FBSyxDQUFDLENBQUEsQ0FDVEEsRUFBRyxFQUFBLENBQUcsQ0FBQyxDQUFBLENBQ1BBLENBQUFBLENBQUcsS0FBSyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsSUFBQSxDQUFLLENBQUMsQ0FBQSxDQUdUQSxDQUFBQSxDQUFHLEVBQUEsQ0FBRyxDQUFDLEVBQ1BBLENBQUFBLENBQUcsSUFBQSxDQUFLLENBQUMsQ0FBQSxDQUNUQSxFQUFHLElBQUEsQ0FBS0MsQ0FBQUEsQ0FBSSxPQUFBLENBQVNBLENBQUFBLENBQUksUUFBQSxDQUFVQSxDQUFBQSxDQUFJLE1BQUEsQ0FBU0EsQ0FBQUEsQ0FBSSxRQUFRLENBQUEsQ0FFNURELENBQUFBLENBQUcsRUFBQSxDQUFHLENBQUMsRUFDUEEsQ0FBQUEsQ0FBRyxDQUFBLENBQUUsQ0FBQSxDQUFHLENBQUMsRUFDVEEsQ0FBQUEsQ0FBRyxDQUFBLENBQUUsQ0FBQSxDQUFHLENBQUMsQ0FBQSxDQUNUQSxDQUFBQSxDQUFHLENBQUEsQ0FBRSxDQUFBLENBQUcsQ0FBQyxDQUFBLENBRVRBLENBQUFBLENBQUcsRUFBQSxDQUFHLENBQUMsRUFDUEEsQ0FBQUEsQ0FBRyxDQUFB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QSxDQUNyRW9YLEVBQUksVUFBQSxDQUFXRSxDQUFDLEVBQ2xCLENBQUEsT0FBRSxDQUNBTCxZQUFBQSxDQUFJLElBQUEsR0FDTixDQUNGLENBQ0YsQ0FBQyxDQUFBIiwiZmlsZSI6ImFwcC5janMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTaGltIGdsb2JhbHMgaW4gY2pzIGJ1bmRsZVxuLy8gVGhlcmUncyBhIHdlaXJkIGJ1ZyB0aGF0IGVzYnVpbGQgd2lsbCBhbHdheXMgaW5qZWN0IGltcG9ydE1ldGFVcmxcbi8vIGlmIHdlIGV4cG9ydCBpdCBhcyBgY29uc3QgaW1wb3J0TWV0YVVybCA9IC4uLiBfX2ZpbGVuYW1lIC4uLmBcbi8vIEJ1dCB1c2luZyBhIGZ1bmN0aW9uIHdpbGwgbm90IGNhdXNlIHRoaXMgaXNzdWVcblxuY29uc3QgZ2V0SW1wb3J0TWV0YVVybCA9ICgpID0+IFxuICB0eXBlb2YgZG9jdW1lbnQgPT09IFwidW5kZWZpbmVkXCIgXG4gICAgPyBuZXcgVVJMKGBmaWxlOiR7X19maWxlbmFtZX1gKS5ocmVmIFxuICAgIDogKGRvY3VtZW50LmN1cnJlbnRTY3JpcHQgJiYgZG9jdW1lbnQuY3VycmVudFNjcmlwdC50YWdOYW1lLnRvVXBwZXJDYXNlKCkgPT09ICdTQ1JJUFQnKSBcbiAgICAgID8gZG9jdW1lbnQuY3VycmVudFNjcmlwdC5zcmMgXG4gICAgICA6IG5ldyBVUkwoXCJtYWluLmpzXCIsIGRvY3VtZW50LmJhc2VVUkkpLmhyZWY7XG5cbmV4cG9ydCBjb25zdCBpbXBvcnRNZXRhVXJsID0gLyogQF9fUFVSRV9fICovIGdldEltcG9ydE1ldGFVcmwoKVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8yNS5cblxuZXhwb3J0IHR5cGUgRW52UGFyc2VyPFQ+ID0gKHZhbHVlOiB1bmtub3duKSA9PiBUO1xuXG5leHBvcnQgZnVuY3Rpb24gcGVudjxUPihuYW1lOiBzdHJpbmcsIHBhcnNlcjogRW52UGFyc2VyPFQ+LCBkZWZhdWx0VmFsdWU6IFQpOiBUO1xuZXhwb3J0IGZ1bmN0aW9uIHBlbnY8VD4obmFtZTogc3RyaW5nLCBwYXJzZXI6IEVudlBhcnNlcjxUPiwgZGVmYXVsdFZhbHVlPzogVCk6IFQgfCB1bmRlZmluZWQ7XG5leHBvcnQgZnVuY3Rpb24gcGVudjxUPihuYW1lOiBzdHJpbmcsIHBhcnNlcjogRW52UGFyc2VyPFQ+LCBkZWZhdWx0VmFsdWU/OiBUKTogVCB8IHVuZGVmaW5lZCB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHBhcnNlcihwcm9jZXNzLmVudltuYW1lXSk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDEvMzAuXG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZU51bWJlcih4OiB1bmtub3duKTogbnVtYmVyIHtcbiAgaWYgKHR5cGVvZiB4ID09PSBcIm51bWJlclwiKSB7XG4gICAgcmV0dXJuIHg7XG4gIH1cbiAgY29uc3QgbnVtID0gTnVtYmVyKHgpO1xuICBpZiAoTnVtYmVyLmlzTmFOKG51bSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFZhbHVlICR7eH0gaXMgbm90IGEgdmFsaWQgbnVtYmVyYCk7XG4gIH1cbiAgcmV0dXJuIG51bTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlU3RyaW5nKHg6IHVua25vd24pOiBzdHJpbmcge1xuICBpZiAodHlwZW9mIHggPT09IFwic3RyaW5nXCIpIHJldHVybiB4O1xuICByZXR1cm4gU3RyaW5nKHgpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wOS5cblxuaW1wb3J0IHsgY3JlYXRlUmVxdWlyZSB9IGZyb20gXCJtb2R1bGVcIjtcbmltcG9ydCB7IGRpcm5hbWUsIGpvaW4gfSBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHsgcGVudiB9IGZyb20gXCIuL2VudlwiO1xuaW1wb3J0IHsgcGFyc2VOdW1iZXIgfSBmcm9tIFwiLi9wYXJzZXJcIjtcblxuY29uc3QgcmVxdWlyZSA9IGNyZWF0ZVJlcXVpcmUoaW1wb3J0Lm1ldGEudXJsKTtcbmNvbnN0IGVudiA9IHByb2Nlc3MuZW52O1xuXG5leHBvcnQgY29uc3QgcHVwTG9nTGV2ZWwgPSBwZW52KFwiUFVQX0xPR19MRVZFTFwiLCBwYXJzZU51bWJlciwgMik7XG5leHBvcnQgY29uc3QgcHVwVXNlSW5uZXJQcm94eSA9IGVudltcIlBVUF9VU0VfSU5ORVJfUFJPWFlcIl0gPT09IFwiMVwiO1xuZXhwb3J0IGNvbnN0IHB1cERpc2FibGVHUFUgPSBlbnZbXCJQVVBfRElTQUJMRV9HUFVcIl0gPT09IFwiMVwiO1xuZXhwb3J0IGNvbnN0IHB1cERpc2FibGVId0NvZGVjID0gZW52W1wiUFVQX0RJU0FCTEVfSFdfQ09ERUNcIl0gPT09IFwiMVwiO1xuZXhwb3J0IGNvbnN0IHB1cERldGVybWluaXN0aWMgPSBlbnZbXCJQVVBfREVURVJNSU5JU1RJQ1wiXSA9PT0gXCIxXCI7XG5cbmV4cG9ydCBjb25zdCBwdXBQa2dSb290ID0gZGlybmFtZShyZXF1aXJlLnJlc29sdmUoXCJwdXAtcmVjb3JkZXIvcGFja2FnZS5qc29uXCIpKTtcbmV4cG9ydCBjb25zdCBwdXBBcHAgPSBqb2luKHB1cFBrZ1Jvb3QsIFwiZGlzdFwiLCBcImFwcC5janNcIik7XG5leHBvcnQgY29uc3QgcHVwSXBjU29ja2V0ID0gZW52W1wiUFVQX0lQQ19TT0NLRVRcIl07XG5cbmV4cG9ydCBjb25zdCBwdXBXaW5kb3dUb2xlcmFudCA9IGVudltcIlBVUF9XSU5ET1dfVE9MRVJBTlRcIl0gPT09IFwiMVwiO1xuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wNi5cblxuaW1wb3J0IHsgQ2hpbGRQcm9jZXNzLCB0eXBlIFNlcmlhbGl6YWJsZSB9IGZyb20gXCJjaGlsZF9wcm9jZXNzXCI7XG5pbXBvcnQgeyBMb2cgfSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHsgQVZfTE9HX0VSUk9SLCBBVl9MT0dfV0FSTklORyB9IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgcHVwTG9nTGV2ZWwgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBMb2dnZXJMaWtlIHtcbiAgZGVidWc/KHRoaXM6IHZvaWQsIC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkO1xuXG4gIGluZm8/KHRoaXM6IHZvaWQsIC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkO1xuXG4gIHdhcm4/KHRoaXM6IHZvaWQsIC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkO1xuXG4gIGVycm9yPyh0aGlzOiB2b2lkLCAuLi5tZXNzYWdlczogdW5rbm93bltdKTogdm9pZDtcbn1cblxuY29uc3QgREVCVUcgPSBcIjxwdXBAZGVidWc+XCI7XG5jb25zdCBJTkZPID0gXCI8cHVwQGluZm8+XCI7XG5jb25zdCBXQVJOID0gXCI8cHVwQHdhcm4+XCI7XG5jb25zdCBFUlJPUiA9IFwiPHB1cEBlcnJvcj5cIjtcbmNvbnN0IEZBVEFMID0gXCI8cHVwQGZhdGFsPlwiO1xuXG5mdW5jdGlvbiBzdGFja0hvb2sodGFyZ2V0OiBGdW5jdGlvbiwgX2NvbnRleHQ6IENsYXNzTWV0aG9kRGVjb3JhdG9yQ29udGV4dCkge1xuICByZXR1cm4gZnVuY3Rpb24gKHRoaXM6IExvZ2dlciwgLi4ubWVzc2FnZXM6IHVua25vd25bXSkge1xuICAgIGNvbnN0IHByb2Nlc3NlZCA9IG1lc3NhZ2VzLm1hcCgobXNnKSA9PiB7XG4gICAgICByZXR1cm4gbXNnIGluc3RhbmNlb2YgRXJyb3IgPyAobXNnLnN0YWNrID8/IFN0cmluZyhtc2cpKSA6IG1zZztcbiAgICB9KTtcbiAgICByZXR1cm4gdGFyZ2V0LmNhbGwodGhpcywgLi4ucHJvY2Vzc2VkKTtcbiAgfTtcbn1cblxuZXhwb3J0IGNsYXNzIExvZ2dlciBpbXBsZW1lbnRzIExvZ2dlckxpa2Uge1xuICBwcml2YXRlIF9pbXBsPzogTG9nZ2VyTGlrZTtcblxuICBnZXQgbGV2ZWwoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fbGV2ZWw7XG4gIH1cblxuICBzZXQgbGV2ZWwodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX2xldmVsID0gdmFsdWU7XG4gICAgdGhpcy5pbXBsID0gdGhpcy5faW1wbCA/PyBjb25zb2xlO1xuICB9XG5cbiAgZ2V0IGltcGwoKTogTG9nZ2VyTGlrZSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2ltcGw7XG4gIH1cblxuICBzZXQgaW1wbCh2YWx1ZTogTG9nZ2VyTGlrZSkge1xuICAgIGNvbnN0IGRlYnVnID0gdmFsdWUuZGVidWcgPz8gY29uc29sZS5kZWJ1ZztcbiAgICBjb25zdCBpbmZvID0gdmFsdWUuaW5mbyA/PyBjb25zb2xlLmluZm87XG4gICAgY29uc3Qgd2FybiA9IHZhbHVlLndhcm4gPz8gY29uc29sZS53YXJuO1xuICAgIGNvbnN0IGVycm9yID0gdmFsdWUuZXJyb3IgPz8gY29uc29sZS5lcnJvcjtcbiAgICBjb25zdCBsdiA9IHRoaXMuX2xldmVsO1xuICAgIHRoaXMuX2ltcGwgPSB7XG4gICAgICBkZWJ1ZzogbHYgPj0gMyA/IGRlYnVnIDogdW5kZWZpbmVkLFxuICAgICAgaW5mbzogbHYgPj0gMiA/IGluZm8gOiB1bmRlZmluZWQsXG4gICAgICB3YXJuOiBsdiA+PSAxID8gd2FybiA6IHVuZGVmaW5lZCxcbiAgICAgIGVycm9yOiBsdiA+PSAwID8gZXJyb3IgOiB1bmRlZmluZWQsXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX2xldmVsOiBudW1iZXIgPSBwdXBMb2dMZXZlbCkge1xuICAgIHRoaXMuaW1wbCA9IGNvbnNvbGU7XG4gIH1cblxuICBAc3RhY2tIb29rXG4gIGRlYnVnKC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkIHtcbiAgICB0aGlzLmltcGw/LmRlYnVnPy4oREVCVUcsIC4uLm1lc3NhZ2VzKTtcbiAgfVxuXG4gIEBzdGFja0hvb2tcbiAgaW5mbyguLi5tZXNzYWdlczogdW5rbm93bltdKTogdm9pZCB7XG4gICAgdGhpcy5pbXBsPy5pbmZvPy4oSU5GTywgLi4ubWVzc2FnZXMpO1xuICB9XG5cbiAgQHN0YWNrSG9va1xuICB3YXJuKC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkIHtcbiAgICB0aGlzLmltcGw/Lndhcm4/LihXQVJOLCAuLi5tZXNzYWdlcyk7XG4gIH1cblxuICBAc3RhY2tIb29rXG4gIGVycm9yKC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkIHtcbiAgICB0aGlzLmltcGw/LmVycm9yPy4oRVJST1IsIC4uLm1lc3NhZ2VzKTtcbiAgfVxuXG4gIEBzdGFja0hvb2tcbiAgZmF0YWwoLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQge1xuICAgIHRoaXMuaW1wbD8uZXJyb3I/LihGQVRBTCwgLi4ubWVzc2FnZXMpO1xuICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgfVxuXG4gIHByaXZhdGUgZGlzcGF0Y2gobWVzc2FnZTogc3RyaW5nKSB7XG4gICAgY29uc3QgbXNnID0gbWVzc2FnZS50cmltRW5kKCk7XG4gICAgaWYgKG1zZy5zdGFydHNXaXRoKERFQlVHKSkge1xuICAgICAgdGhpcy5kZWJ1Zyhtc2cuc2xpY2UoREVCVUcubGVuZ3RoICsgMSkpO1xuICAgIH0gZWxzZSBpZiAobXNnLnN0YXJ0c1dpdGgoSU5GTykpIHtcbiAgICAgIHRoaXMuaW5mbyhtc2cuc2xpY2UoSU5GTy5sZW5ndGggKyAxKSk7XG4gICAgfSBlbHNlIGlmIChtc2cuc3RhcnRzV2l0aChXQVJOKSkge1xuICAgICAgdGhpcy53YXJuKG1zZy5zbGljZShXQVJOLmxlbmd0aCArIDEpKTtcbiAgICB9IGVsc2UgaWYgKG1zZy5zdGFydHNXaXRoKEVSUk9SKSkge1xuICAgICAgdGhpcy5lcnJvcihtc2cuc2xpY2UoRVJST1IubGVuZ3RoICsgMSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmluZm8obXNnKTtcbiAgICB9XG4gIH1cblxuICBhdHRhY2gocHJvYzogQ2hpbGRQcm9jZXNzLCBuYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpcy5kZWJ1ZyhgJHtuYW1lfS5hdHRhY2hgKTtcbiAgICAgIGxldCBmYXRhbDogc3RyaW5nID0gXCJcIjtcbiAgICAgIGNvbnN0IGRpc3BhdGNoID0gKGRhdGE6IEJ1ZmZlciB8IFNlcmlhbGl6YWJsZSkgPT4ge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0gZGF0YS50b1N0cmluZygpO1xuICAgICAgICBpZiAobWVzc2FnZS5zdGFydHNXaXRoKEZBVEFMKSkge1xuICAgICAgICAgIGZhdGFsICs9IG1lc3NhZ2Uuc2xpY2UoRkFUQUwubGVuZ3RoICsgMSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5kaXNwYXRjaChtZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHByb2Muc3RkZXJyPy5vbihcImRhdGFcIiwgZGlzcGF0Y2gpO1xuICAgICAgcHJvYy5zdGRvdXQ/Lm9uKFwiZGF0YVwiLCBkaXNwYXRjaCk7XG4gICAgICBwcm9jXG4gICAgICAgIC5vbihcIm1lc3NhZ2VcIiwgZGlzcGF0Y2gpXG4gICAgICAgIC5vbihcImVycm9yXCIsIChlcnIpID0+IHtcbiAgICAgICAgICBmYXRhbCArPSBlcnIubWVzc2FnZTtcbiAgICAgICAgICBwcm9jLmtpbGwoKTtcbiAgICAgICAgfSlcbiAgICAgICAgLm9uY2UoXCJjbG9zZVwiLCAoY29kZSwgc2lnbmFsKSA9PiB7XG4gICAgICAgICAgaWYgKGNvZGUgfHwgc2lnbmFsIHx8IGZhdGFsKSB7XG4gICAgICAgICAgICBmYXRhbCB8fD0gYGNvbW1hbmQgZmFpbGVkOiAke3Byb2Muc3Bhd25hcmdzLmpvaW4oXCIgXCIpfWA7XG4gICAgICAgICAgICB0aGlzLmRlYnVnKGAke25hbWV9LmNsb3NlYCwgeyBjb2RlLCBzaWduYWwsIGZhdGFsIH0pO1xuICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihmYXRhbCkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRlYnVnKGAke25hbWV9LmNsb3NlYCk7XG4gICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAub24oXCJ1bmhhbmRsZWRSZWplY3Rpb25cIiwgKHJlYXNvbikgPT4ge1xuICAgICAgICAgIHRoaXMuZXJyb3IoYCR7bmFtZX0udW5oYW5kbGVkYCwgcmVhc29uKTtcbiAgICAgICAgfSlcbiAgICAgICAgLm9uKFwidW5jYXVnaHRFeGNlcHRpb25Nb25pdG9yXCIsIChlcnIpID0+IHtcbiAgICAgICAgICB0aGlzLmVycm9yKGAke25hbWV9LnVuaGFuZGxlZGAsIGVycik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9XG59XG5cbmNvbnN0IGxvZ2dlciA9IG5ldyBMb2dnZXIoKTtcblxuLy8gUm91dGUgZmZtcGVnIG5hdGl2ZSBsb2dzIHRocm91Z2ggcHVwJ3MgbG9nZ2VyLlxuTG9nLnNldENhbGxiYWNrKChsZXZlbCwgbWVzc2FnZSkgPT4ge1xuICBjb25zdCBtc2cgPSBtZXNzYWdlLnRyaW1FbmQoKTtcbiAgaWYgKCFtc2cpIHJldHVybjtcbiAgaWYgKGxldmVsIDw9IEFWX0xPR19FUlJPUikgbG9nZ2VyLmVycm9yKG1zZyk7XG4gIGVsc2UgaWYgKGxldmVsIDw9IEFWX0xPR19XQVJOSU5HKSBsb2dnZXIud2Fybihtc2cpO1xufSk7XG5cbmV4cG9ydCB7IGxvZ2dlciB9O1xuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8yNC5cblxuZXhwb3J0IGZ1bmN0aW9uIG5vZXJyPEZuIGV4dGVuZHMgKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnksIEQ+KFxuICBmbjogRm4sXG4gIGRlZmF1bHRWYWx1ZTogRCxcbik6ICguLi5hcmdzOiBQYXJhbWV0ZXJzPEZuPikgPT4gUmV0dXJuVHlwZTxGbj4gfCBEIHtcbiAgcmV0dXJuICguLi5hcmdzKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJldCA9IGZuKC4uLmFyZ3MpO1xuICAgICAgaWYgKHJldCBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgcmV0dXJuIHJldC5jYXRjaCgoKSA9PiBkZWZhdWx0VmFsdWUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJldDtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gICAgfVxuICB9O1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMS8zMC5cblxuaW1wb3J0IHsgc3Bhd24sIHR5cGUgQ2hpbGRQcm9jZXNzLCB0eXBlIFNwYXduT3B0aW9ucyB9IGZyb20gXCJjaGlsZF9wcm9jZXNzXCI7XG5pbXBvcnQgdHJlZUtpbGwgZnJvbSBcInRyZWUta2lsbFwiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4vbG9nZ2luZ1wiO1xuXG5leHBvcnQgY29uc3QgUFVQX0FSR1NfS0VZID0gXCItLXB1cC1wcml2LWFyZ3NcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHBhcmdzKCkge1xuICBjb25zdCBhcmd2ID0gcHJvY2Vzcy5hcmd2O1xuICBsZXQgcHJpdiA9IGFyZ3YuZmluZCgoYXJnKSA9PiBhcmcuc3RhcnRzV2l0aChQVVBfQVJHU19LRVkpKTtcbiAgaWYgKCFwcml2KSB7XG4gICAgbG9nZ2VyLmRlYnVnKFwicHJvY2FyZ3ZcIiwgYXJndik7XG4gICAgcmV0dXJuIHByb2Nlc3MuYXJndjtcbiAgfVxuICBjb25zdCBhcmdzID0gW1wiZXhlY1wiLCAuLi5hcmd2LnNsaWNlKC0xKV07XG4gIHByaXYgPSBCdWZmZXIuZnJvbShwcml2LnNwbGl0KFwiPVwiKVsxXSEsIFwiYmFzZTY0XCIpLnRvU3RyaW5nKCk7XG4gIGFyZ3MucHVzaCguLi5KU09OLnBhcnNlKHByaXYpKTtcbiAgbG9nZ2VyLmRlYnVnKFwicHVwYXJnc1wiLCBhcmdzKTtcbiAgcmV0dXJuIGFyZ3M7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJvY2Vzc0hhbmRsZSB7XG4gIHByb2Nlc3M6IENoaWxkUHJvY2VzcztcbiAgd2FpdDogUHJvbWlzZTx2b2lkPjtcbiAga2lsbCgpOiB2b2lkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXhlYyhjbWQ6IHN0cmluZywgb3B0aW9ucz86IFNwYXduT3B0aW9ucyk6IFByb2Nlc3NIYW5kbGUge1xuICBjb25zdCBwYXJ0cyA9IGNtZC5zcGxpdChcIiBcIikuZmlsdGVyKChzKSA9PiBzLmxlbmd0aCk7XG4gIGNvbnN0IFtjb21tYW5kLCAuLi5hcmdzXSA9IHBhcnRzO1xuICBpZiAoIWNvbW1hbmQpIHRocm93IG5ldyBFcnJvcihcImVtcHR5IGNvbW1hbmRcIik7XG4gIGNvbnN0IHByb2MgPSBzcGF3bihjb21tYW5kLCBhcmdzLCB7XG4gICAgc3RkaW86IFwiaW5oZXJpdFwiLFxuICAgIC4uLm9wdGlvbnMsXG4gIH0pO1xuICByZXR1cm4ge1xuICAgIHByb2Nlc3M6IHByb2MsXG4gICAgd2FpdDogbG9nZ2VyLmF0dGFjaChwcm9jLCBjb21tYW5kKSxcbiAgICBraWxsKCkge1xuICAgICAgY29uc3QgcGlkID0gcHJvYy5waWQ7XG4gICAgICBpZiAocGlkKSB0cmVlS2lsbChwaWQpO1xuICAgICAgZWxzZSBwcm9jLmtpbGwoKTtcbiAgICB9LFxuICB9O1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wNi5cblxuaW1wb3J0IHogZnJvbSBcInpvZFwiO1xuaW1wb3J0IHtcbiAgcHVwRGV0ZXJtaW5pc3RpYyxcbiAgcHVwRGlzYWJsZUdQVSxcbiAgcHVwRGlzYWJsZUh3Q29kZWMsXG4gIHB1cFVzZUlubmVyUHJveHksXG4gIHB1cFdpbmRvd1RvbGVyYW50LFxufSBmcm9tIFwiLi4vYmFzZS9jb25zdGFudHNcIjtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfV0lEVEggPSAxOTIwO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfSEVJR0hUID0gMTA4MDtcbmV4cG9ydCBjb25zdCBERUZBVUxUX0ZQUyA9IDMwO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfRFVSQVRJT04gPSA1O1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfT1VUX0ZJTEUgPSBcIm91dHB1dC5tcDRcIjtcblxuZXhwb3J0IGNvbnN0IFJlbmRlclNjaGVtYSA9IHoub2JqZWN0KHtcbiAgZHVyYXRpb246IHoubnVtYmVyKCkuZGVzY3JpYmUoXCJEdXJhdGlvbiBpbiBzZWNvbmRzXCIpLFxuICB3aWR0aDogei5udW1iZXIoKS5kZXNjcmliZShcIlZpZGVvIHdpZHRoXCIpLFxuICBoZWlnaHQ6IHoubnVtYmVyKCkuZGVzY3JpYmUoXCJWaWRlbyBoZWlnaHRcIiksXG4gIGZwczogei5udW1iZXIoKS5kZXNjcmliZShcIkZyYW1lcyBwZXIgc2Vjb25kXCIpLFxuICB3aXRoQXVkaW86IHouYm9vbGVhbigpLmRlc2NyaWJlKFwiQ2FwdHVyZSBhbmQgZW5jb2RlIGF1ZGlvXCIpLFxuICBvdXRGaWxlOiB6LnN0cmluZygpLmRlc2NyaWJlKFwiT3V0cHV0IG1wNCBmaWxlIHBhdGhcIiksXG4gIHVzZUlubmVyUHJveHk6IHouYm9vbGVhbigpLmRlc2NyaWJlKFwiVXNlIGJpbGliaWxpIGlubmVyIHByb3h5IGZvciByZXNvdXJjZSBhY2Nlc3NcIiksXG4gIGRldGVybWluaXN0aWM6IHouYm9vbGVhbigpLmRlc2NyaWJlKFwiUmVuZGVyIGJ5IGZyYW1lIHJhdGhlciB0aGFuIHJlY29yZGluZ1wiKSxcbiAgZGlzYWJsZUdwdTogei5ib29sZWFuKCkuZGVzY3JpYmUoXCJEaXNhYmxlIEdQVSByZW5kZXJpbmcsIG1heSByZWR1Y2UgcGVyZm9ybWFuY2UgYnV0IGluY3JlYXNlIHN0YWJpbGl0eVwiKSxcbiAgZGlzYWJsZUh3Q29kZWM6IHouYm9vbGVhbigpLmRlc2NyaWJlKFwiRGlzYWJsZSBoYXJkd2FyZSB2aWRlbyBlbmNvZGVyIChOVkVOQy9WaWRlb1Rvb2xib3gpLCB1c2Ugc29mdHdhcmUgeDI2NVwiKSxcbiAgd2luZG93VG9sZXJhbnQ6IHouYm9vbGVhbigpLmRlc2NyaWJlKFwiRmFsbCBiYWNrIHRvIGRvbS1yZWFkeSBpZiB3YXJtdXAgbG9hZCB0aW1lcyBvdXRcIiksXG59KTtcblxuZXhwb3J0IHR5cGUgUmVuZGVyT3B0aW9ucyA9IHouaW5mZXI8dHlwZW9mIFJlbmRlclNjaGVtYT47XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVuZGVyUmVzdWx0IHtcbiAgb3B0aW9uczogUmVuZGVyT3B0aW9ucztcbiAgd3JpdHRlbjogbnVtYmVyO1xuICBqYW5rOiBudW1iZXI7XG4gIG91dEZpbGU6IHN0cmluZztcbn1cblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRSZW5kZXJPcHRpb25zOiBSZW5kZXJPcHRpb25zID0ge1xuICB3aWR0aDogREVGQVVMVF9XSURUSCxcbiAgaGVpZ2h0OiBERUZBVUxUX0hFSUdIVCxcbiAgZnBzOiBERUZBVUxUX0ZQUyxcbiAgZHVyYXRpb246IERFRkFVTFRfRFVSQVRJT04sXG4gIG91dEZpbGU6IERFRkFVTFRfT1VUX0ZJTEUsXG4gIHdpdGhBdWRpbzogZmFsc2UsXG4gIHVzZUlubmVyUHJveHk6IHB1cFVzZUlubmVyUHJveHksXG4gIGRldGVybWluaXN0aWM6IHB1cERldGVybWluaXN0aWMsXG4gIGRpc2FibGVHcHU6IHB1cERpc2FibGVHUFUsXG4gIGRpc2FibGVId0NvZGVjOiBwdXBEaXNhYmxlSHdDb2RlYyxcbiAgd2luZG93VG9sZXJhbnQ6IHB1cFdpbmRvd1RvbGVyYW50LFxufTtcbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDkuXG5cbmltcG9ydCB7IHByb2dyYW0gfSBmcm9tIFwiY29tbWFuZGVyXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi9iYXNlL2xvZ2dpbmdcIjtcbmltcG9ydCB7IG5vZXJyIH0gZnJvbSBcIi4vYmFzZS9ub2VyclwiO1xuaW1wb3J0IHsgcGFyc2VOdW1iZXIgfSBmcm9tIFwiLi9iYXNlL3BhcnNlclwiO1xuaW1wb3J0IHsgcGFyZ3MgfSBmcm9tIFwiLi9iYXNlL3Byb2Nlc3NcIjtcbmltcG9ydCB7IFJlbmRlclNjaGVtYSwgdHlwZSBSZW5kZXJPcHRpb25zIH0gZnJvbSBcIi4vcmVuZGVyZXIvc2NoZW1hXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ0xJT3B0aW9ucyB7XG4gIG5hbWU6IHN0cmluZztcbiAgZGVmYXVsdHM6IFJlbmRlck9wdGlvbnM7XG4gIHJ1bjogKHNvdXJjZTogc3RyaW5nLCBvcHRpb25zOiBSZW5kZXJPcHRpb25zKSA9PiBQcm9taXNlPHVua25vd24+O1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbWFrZUNMSShvcHRpb25zOiBDTElPcHRpb25zKSB7XG4gIGNvbnN0IHNoYXBlID0gUmVuZGVyU2NoZW1hLnNoYXBlO1xuICBjb25zdCBkID0gb3B0aW9ucy5kZWZhdWx0cztcbiAgcHJvZ3JhbVxuICAgIC5uYW1lKG9wdGlvbnMubmFtZSlcbiAgICAuYXJndW1lbnQoXCI8c291cmNlPlwiLCBcImZpbGU6Ly8sIGh0dHAocyk6Ly8sIG9yIGRhdGE6IFVSSVwiKVxuICAgIC5vcHRpb24oXCItVywgLS13aWR0aCA8bnVtYmVyPlwiLCBzaGFwZS53aWR0aC5kZXNjcmlwdGlvbiwgYCR7ZC53aWR0aH1gKVxuICAgIC5vcHRpb24oXCItSCwgLS1oZWlnaHQgPG51bWJlcj5cIiwgc2hhcGUuaGVpZ2h0LmRlc2NyaXB0aW9uLCBgJHtkLmhlaWdodH1gKVxuICAgIC5vcHRpb24oXCItZiwgLS1mcHMgPG51bWJlcj5cIiwgc2hhcGUuZnBzLmRlc2NyaXB0aW9uLCBgJHtkLmZwc31gKVxuICAgIC5vcHRpb24oXCItdCwgLS1kdXJhdGlvbiA8bnVtYmVyPlwiLCBzaGFwZS5kdXJhdGlvbi5kZXNjcmlwdGlvbiwgYCR7ZC5kdXJhdGlvbn1gKVxuICAgIC5vcHRpb24oXCItbywgLS1vdXQtZmlsZSA8cGF0aD5cIiwgc2hhcGUub3V0RmlsZS5kZXNjcmlwdGlvbiwgZC5vdXRGaWxlKVxuICAgIC5vcHRpb24oXCItYSwgLS13aXRoLWF1ZGlvXCIsIHNoYXBlLndpdGhBdWRpby5kZXNjcmlwdGlvbiwgZC53aXRoQXVkaW8pXG4gICAgLm9wdGlvbihcIi1kLCAtLWRldGVybWluaXN0aWNcIiwgc2hhcGUuZGV0ZXJtaW5pc3RpYy5kZXNjcmlwdGlvbiwgZC5kZXRlcm1pbmlzdGljKVxuICAgIC5vcHRpb24oXCItLXVzZS1pbm5lci1wcm94eVwiLCBzaGFwZS51c2VJbm5lclByb3h5LmRlc2NyaXB0aW9uLCBkLnVzZUlubmVyUHJveHkpXG4gICAgLm9wdGlvbihcIi0tZGlzYWJsZS1ncHVcIiwgc2hhcGUuZGlzYWJsZUdwdS5kZXNjcmlwdGlvbiwgZC5kaXNhYmxlR3B1KVxuICAgIC5vcHRpb24oXCItLWRpc2FibGUtaHctY29kZWNcIiwgc2hhcGUuZGlzYWJsZUh3Q29kZWMuZGVzY3JpcHRpb24sIGQuZGlzYWJsZUh3Q29kZWMpXG4gICAgLm9wdGlvbihcIi0td2luZG93LXRvbGVyYW50XCIsIHNoYXBlLndpbmRvd1RvbGVyYW50LmRlc2NyaXB0aW9uLCBkLndpbmRvd1RvbGVyYW50KVxuICAgIC5hY3Rpb24oYXN5bmMgKHNvdXJjZTogc3RyaW5nLCBvcHRzKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBvcHRpb25zLnJ1bihzb3VyY2UsIHtcbiAgICAgICAgICB3aWR0aDogbm9lcnIocGFyc2VOdW1iZXIsIGQud2lkdGgpKG9wdHMud2lkdGgpLFxuICAgICAgICAgIGhlaWdodDogbm9lcnIocGFyc2VOdW1iZXIsIGQuaGVpZ2h0KShvcHRzLmhlaWdodCksXG4gICAgICAgICAgZnBzOiBub2VycihwYXJzZU51bWJlciwgZC5mcHMpKG9wdHMuZnBzKSxcbiAgICAgICAgICBkdXJhdGlvbjogbm9lcnIocGFyc2VOdW1iZXIsIGQuZHVyYXRpb24pKG9wdHMuZHVyYXRpb24pLFxuICAgICAgICAgIG91dEZpbGU6IG9wdHMub3V0RmlsZSA/PyBkLm91dEZpbGUsXG4gICAgICAgICAgd2l0aEF1ZGlvOiBvcHRzLndpdGhBdWRpbyA/PyBkLndpdGhBdWRpbyxcbiAgICAgICAgICB1c2VJbm5lclByb3h5OiBvcHRzLnVzZUlubmVyUHJveHkgPz8gZC51c2VJbm5lclByb3h5LFxuICAgICAgICAgIGRldGVybWluaXN0aWM6IG9wdHMuZGV0ZXJtaW5pc3RpYyA/PyBkLmRldGVybWluaXN0aWMsXG4gICAgICAgICAgZGlzYWJsZUdwdTogb3B0cy5kaXNhYmxlR3B1ID8/IGQuZGlzYWJsZUdwdSxcbiAgICAgICAgICBkaXNhYmxlSHdDb2RlYzogb3B0cy5kaXNhYmxlSHdDb2RlYyA/PyBkLmRpc2FibGVId0NvZGVjLFxuICAgICAgICAgIHdpbmRvd1RvbGVyYW50OiBvcHRzLndpbmRvd1RvbGVyYW50ID8/IGQud2luZG93VG9sZXJhbnQsXG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBsb2dnZXIuZmF0YWwoZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIGF3YWl0IHByb2dyYW0ucGFyc2VBc3luYyhwYXJncygpKTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMDEuXG5cbmltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gXCJldmVudHNcIjtcbmltcG9ydCB7IGNyZWF0ZUNvbm5lY3Rpb24sIGNyZWF0ZVNlcnZlciwgdHlwZSBTb2NrZXQgfSBmcm9tIFwibmV0XCI7XG5cbmNvbnN0IEhFQURFUl9TSVpFID0gODtcblxuZXhwb3J0IGNvbnN0IGVudW0gSXBjTXNnVHlwZSB7XG4gIFBST0dSRVNTID0gMSxcbiAgRE9ORSA9IDIsXG4gIEVSUk9SID0gMyxcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJcGNEb25lUGF5bG9hZCB7XG4gIHdyaXR0ZW46IG51bWJlcjtcbiAgamFuazogbnVtYmVyO1xuICBvdXRGaWxlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBJcGNXcml0ZXIge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IF9zb2NrZXQ6IFNvY2tldCkge31cblxuICB3cml0ZVByb2dyZXNzKHZhbHVlOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLndyaXRlKElwY01zZ1R5cGUuUFJPR1JFU1MsIEJ1ZmZlci5mcm9tKGAke3ZhbHVlfWApKTtcbiAgfVxuXG4gIHdyaXRlRXJyb3IoZXJyb3I6IHN0cmluZykge1xuICAgIHRoaXMud3JpdGUoSXBjTXNnVHlwZS5FUlJPUiwgQnVmZmVyLmZyb20oZXJyb3IpKTtcbiAgICB0aGlzLl9zb2NrZXQuZW5kKCk7XG4gIH1cblxuICB3cml0ZURvbmUocGF5bG9hZDogSXBjRG9uZVBheWxvYWQpOiB2b2lkIHtcbiAgICB0aGlzLndyaXRlKElwY01zZ1R5cGUuRE9ORSwgQnVmZmVyLmZyb20oSlNPTi5zdHJpbmdpZnkocGF5bG9hZCkpKTtcbiAgICB0aGlzLl9zb2NrZXQuZW5kKCk7XG4gIH1cblxuICBwcml2YXRlIHdyaXRlKHR5cGU6IElwY01zZ1R5cGUsIHBheWxvYWQ6IEJ1ZmZlcik6IHZvaWQge1xuICAgIGNvbnN0IGhlYWRlciA9IEJ1ZmZlci5hbGxvYyhIRUFERVJfU0laRSk7XG4gICAgaGVhZGVyLndyaXRlVUludDMyTEUodHlwZSwgMCk7XG4gICAgaGVhZGVyLndyaXRlVUludDMyTEUocGF5bG9hZC5ieXRlTGVuZ3RoLCA0KTtcbiAgICB0aGlzLl9zb2NrZXQud3JpdGUoaGVhZGVyKTtcbiAgICB0aGlzLl9zb2NrZXQud3JpdGUocGF5bG9hZCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbm5lY3RJcGMoc29ja2V0UGF0aDogc3RyaW5nKTogUHJvbWlzZTxJcGNXcml0ZXI+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCBzb2NrZXQgPSBjcmVhdGVDb25uZWN0aW9uKHNvY2tldFBhdGgpO1xuICAgIHNvY2tldC5vbmNlKFwiY29ubmVjdFwiLCAoKSA9PiByZXNvbHZlKG5ldyBJcGNXcml0ZXIoc29ja2V0KSkpO1xuICAgIHNvY2tldC5vbmNlKFwiZXJyb3JcIiwgcmVqZWN0KTtcbiAgfSk7XG59XG5cbmV4cG9ydCBjbGFzcyBJcGNSZWFkZXIgZXh0ZW5kcyBFdmVudEVtaXR0ZXI8e1xuICBwcm9ncmVzczogW3ZhbHVlOiBudW1iZXJdO1xuICBtZXNzYWdlOiBbdHlwZTogSXBjTXNnVHlwZSwgYnVmZmVyOiBCdWZmZXJdO1xuICBkb25lOiBbcGF5bG9hZDogSXBjRG9uZVBheWxvYWRdO1xuICBlcnJvcjogW2Vycm9yOiBFcnJvcl07XG4gIGNsb3NlOiBbXTtcbn0+IHtcbiAgcHJpdmF0ZSBfY2h1bmtzOiBCdWZmZXJbXSA9IFtdO1xuICBwcml2YXRlIF9idWZmZXJlZCA9IDA7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBfc29ja2V0OiBTb2NrZXQpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuX3NvY2tldC5vbihcImRhdGFcIiwgKGRhdGEpID0+IHRoaXMub25EYXRhKGRhdGEpKTtcbiAgICB0aGlzLl9zb2NrZXQub24oXCJlcnJvclwiLCAoZXJyKSA9PiB0aGlzLmVtaXQoXCJlcnJvclwiLCBlcnIpKTtcbiAgICB0aGlzLl9zb2NrZXQub24oXCJjbG9zZVwiLCAoKSA9PiB0aGlzLmVtaXQoXCJjbG9zZVwiKSk7XG4gIH1cblxuICBwcml2YXRlIG9uRGF0YShkYXRhOiBCdWZmZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9jaHVua3MucHVzaChkYXRhKTtcbiAgICB0aGlzLl9idWZmZXJlZCArPSBkYXRhLmJ5dGVMZW5ndGg7XG4gICAgdGhpcy5mbHVzaCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBmbHVzaCgpOiB2b2lkIHtcbiAgICBmb3IgKDs7KSB7XG4gICAgICBpZiAodGhpcy5fYnVmZmVyZWQgPCBIRUFERVJfU0laRSkgcmV0dXJuO1xuICAgICAgY29uc3QgaGVhZGVyID0gdGhpcy5wZWVrKEhFQURFUl9TSVpFKTtcbiAgICAgIGNvbnN0IHR5cGUgPSBoZWFkZXIucmVhZFVJbnQzMkxFKDApIGFzIElwY01zZ1R5cGU7XG4gICAgICBjb25zdCBsZW4gPSBoZWFkZXIucmVhZFVJbnQzMkxFKDQpO1xuICAgICAgaWYgKHRoaXMuX2J1ZmZlcmVkIDwgSEVBREVSX1NJWkUgKyBsZW4pIHJldHVybjtcbiAgICAgIHRoaXMuY29uc3VtZShIRUFERVJfU0laRSk7XG4gICAgICBjb25zdCBwYXlsb2FkID0gdGhpcy5jb25zdW1lKGxlbik7XG4gICAgICB0aGlzLmVtaXQoXCJtZXNzYWdlXCIsIHR5cGUsIHBheWxvYWQpO1xuICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgSXBjTXNnVHlwZS5QUk9HUkVTUzoge1xuICAgICAgICAgIHRoaXMuZW1pdChcInByb2dyZXNzXCIsIE51bWJlcihwYXlsb2FkLnRvU3RyaW5nKCkpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIElwY01zZ1R5cGUuRE9ORToge1xuICAgICAgICAgIHRoaXMuZW1pdChcImRvbmVcIiwgSlNPTi5wYXJzZShwYXlsb2FkLnRvU3RyaW5nKCkpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIElwY01zZ1R5cGUuRVJST1I6IHtcbiAgICAgICAgICB0aGlzLmVtaXQoXCJlcnJvclwiLCBuZXcgRXJyb3IocGF5bG9hZC50b1N0cmluZygpKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHBlZWsobjogbnVtYmVyKTogQnVmZmVyIHtcbiAgICBpZiAodGhpcy5fY2h1bmtzWzBdICYmIHRoaXMuX2NodW5rc1swXS5ieXRlTGVuZ3RoID49IG4pIHJldHVybiB0aGlzLl9jaHVua3NbMF07XG4gICAgcmV0dXJuIEJ1ZmZlci5jb25jYXQodGhpcy5fY2h1bmtzKS5zdWJhcnJheSgwLCBuKTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3VtZShuOiBudW1iZXIpOiBCdWZmZXIge1xuICAgIGNvbnN0IG91dCA9IEJ1ZmZlci5hbGxvY1Vuc2FmZShuKTtcbiAgICBsZXQgb2Zmc2V0ID0gMDtcbiAgICB3aGlsZSAob2Zmc2V0IDwgbikge1xuICAgICAgY29uc3QgY2h1bmsgPSB0aGlzLl9jaHVua3NbMF0hO1xuICAgICAgY29uc3QgdGFrZSA9IE1hdGgubWluKGNodW5rLmJ5dGVMZW5ndGgsIG4gLSBvZmZzZXQpO1xuICAgICAgY2h1bmsuY29weShvdXQsIG9mZnNldCwgMCwgdGFrZSk7XG4gICAgICBpZiAodGFrZSA9PT0gY2h1bmsuYnl0ZUxlbmd0aCkge1xuICAgICAgICB0aGlzLl9jaHVua3Muc2hpZnQoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX2NodW5rc1swXSA9IGNodW5rLnN1YmFycmF5KHRha2UpO1xuICAgICAgfVxuICAgICAgb2Zmc2V0ICs9IHRha2U7XG4gICAgfVxuICAgIHRoaXMuX2J1ZmZlcmVkIC09IG47XG4gICAgcmV0dXJuIG91dDtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElwY1NlcnZlciB7XG4gIHdhaXRGb3JDb25uZWN0aW9uKCk6IFByb21pc2U8SXBjUmVhZGVyPjtcbiAgY2xvc2UoKTogdm9pZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUlwY1NlcnZlcihzb2NrZXRQYXRoOiBzdHJpbmcpOiBQcm9taXNlPElwY1NlcnZlcj4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHNlcnZlciA9IGNyZWF0ZVNlcnZlcigpO1xuICAgIHNlcnZlci5vbmNlKFwiZXJyb3JcIiwgcmVqZWN0KTtcbiAgICBzZXJ2ZXIubGlzdGVuKHNvY2tldFBhdGgsICgpID0+IHtcbiAgICAgIHJlc29sdmUoe1xuICAgICAgICB3YWl0Rm9yQ29ubmVjdGlvbigpIHtcbiAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8SXBjUmVhZGVyPigob2ssIG5vKSA9PiB7XG4gICAgICAgICAgICBzZXJ2ZXIub25jZShcImNvbm5lY3Rpb25cIiwgKHNvY2tldCkgPT4gb2sobmV3IElwY1JlYWRlcihzb2NrZXQpKSk7XG4gICAgICAgICAgICBzZXJ2ZXIub25jZShcImVycm9yXCIsIG5vKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgY2xvc2UoKSB7XG4gICAgICAgICAgc2VydmVyLmNsb3NlKCk7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA5LlxuXG5pbXBvcnQgeyB0eXBlIFNpemUsIHR5cGUgV2ViRnJhbWVNYWluIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5cbmV4cG9ydCBjb25zdCBGUkFNRV9TWU5DX01BUktFUl9XSURUSCA9IDMyO1xuZXhwb3J0IGNvbnN0IEZSQU1FX1NZTkNfTUFSS0VSX0hFSUdIVCA9IDE7XG5leHBvcnQgY29uc3QgU1RFR09fVElDS19DSEFOTkVMID0gXCJzdGVnby10aWNrXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFN0ZWdvSFRNTCh0YXJnZXRVUkw6IHN0cmluZywgc2l6ZTogU2l6ZSk6IHN0cmluZyB7XG4gIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gc2l6ZTtcbiAgcmV0dXJuIGA8IURPQ1RZUEUgaHRtbD5cbjxodG1sPlxuPGhlYWQ+XG4gIDxtZXRhIGNoYXJzZXQ9XCJVVEYtOFwiPlxuICA8c3R5bGU+XG4gICAgKiB7IG1hcmdpbjogMDsgcGFkZGluZzogMDsgYm94LXNpemluZzogYm9yZGVyLWJveDsgfVxuICAgIGh0bWwsIGJvZHkgeyB3aWR0aDogJHt3aWR0aH1weDsgaGVpZ2h0OiAke2hlaWdodCArIDF9cHg7IG92ZXJmbG93OiBoaWRkZW47IH1cbiAgICAjdGFyZ2V0IHsgXG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7IFxuICAgICAgdG9wOiAwOyBcbiAgICAgIGxlZnQ6IDA7IFxuICAgICAgd2lkdGg6ICR7d2lkdGh9cHg7IFxuICAgICAgaGVpZ2h0OiAke2hlaWdodH1weDsgXG4gICAgICBib3JkZXI6IG5vbmU7IFxuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgfVxuICAgICNzdGVnbyB7IFxuICAgICAgcG9zaXRpb246IGFic29sdXRlOyBcbiAgICAgIHRvcDogJHtoZWlnaHR9cHg7IFxuICAgICAgbGVmdDogMDsgXG4gICAgICB3aWR0aDogJHt3aWR0aH1weDsgXG4gICAgICBoZWlnaHQ6IDFweDsgXG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIGltYWdlLXJlbmRlcmluZzogcGl4ZWxhdGVkO1xuICAgIH1cbiAgPC9zdHlsZT5cbjwvaGVhZD5cbjxib2R5PlxuICA8aWZyYW1lIGlkPVwidGFyZ2V0XCIgc3JjPVwiJHt0YXJnZXRVUkx9XCI+PC9pZnJhbWU+XG4gIDxjYW52YXMgaWQ9XCJzdGVnb1wiIHdpZHRoPVwiJHt3aWR0aH1cIiBoZWlnaHQ9XCIxXCI+PC9jYW52YXM+XG4gIDxzY3JpcHQ+XG4gICAgKGZ1bmN0aW9uKCkge1xuICAgICAgY29uc3QgeyBpcGNSZW5kZXJlciB9ID0gcmVxdWlyZSgnZWxlY3Ryb24nKTtcbiAgICAgIGNvbnN0IFdJRFRIID0gJHt3aWR0aH07XG4gICAgICBjb25zdCBNQVJLRVJfV0lEVEggPSAke0ZSQU1FX1NZTkNfTUFSS0VSX1dJRFRIfTtcbiAgICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdGVnbycpO1xuICAgICAgY29uc3QgY3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJywgeyB3aWxsUmVhZEZyZXF1ZW50bHk6IHRydWUgfSk7XG4gICAgICBsZXQgc3RhcnRUaW1lID0gbnVsbDtcbiAgICAgIGxldCByYWZJZCA9IG51bGw7XG5cbiAgICAgIGZ1bmN0aW9uIGVuY29kZVRpbWVzdGFtcCh0aW1lc3RhbXBNcykge1xuICAgICAgICBjb25zdCBpbWFnZURhdGEgPSBjdHguY3JlYXRlSW1hZ2VEYXRhKFdJRFRILCAxKTtcbiAgICAgICAgY29uc3QgZGF0YSA9IGltYWdlRGF0YS5kYXRhO1xuICAgICAgICBcbiAgICAgICAgY29uc3QgdGltZXN0YW1wSW50ID0gTWF0aC5mbG9vcih0aW1lc3RhbXBNcykgPj4+IDA7XG4gICAgICAgIFxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IE1BUktFUl9XSURUSDsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgYml0ID0gKHRpbWVzdGFtcEludCA+Pj4gKE1BUktFUl9XSURUSCAtIDEgLSBpKSkgJiAxO1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gYml0ID8gMjU1IDogMDtcbiAgICAgICAgICBjb25zdCBpZHggPSBpICogNDtcbiAgICAgICAgICBkYXRhW2lkeF0gPSB2YWx1ZTtcbiAgICAgICAgICBkYXRhW2lkeCArIDFdID0gdmFsdWU7XG4gICAgICAgICAgZGF0YVtpZHggKyAyXSA9IHZhbHVlO1xuICAgICAgICAgIGRhdGFbaWR4ICsgM10gPSAyNTU7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGZvciAobGV0IGkgPSBNQVJLRVJfV0lEVEg7IGkgPCBXSURUSDsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgaWR4ID0gaSAqIDQ7XG4gICAgICAgICAgZGF0YVtpZHhdID0gMDtcbiAgICAgICAgICBkYXRhW2lkeCArIDFdID0gMDtcbiAgICAgICAgICBkYXRhW2lkeCArIDJdID0gMDtcbiAgICAgICAgICBkYXRhW2lkeCArIDNdID0gMjU1O1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBjdHgucHV0SW1hZ2VEYXRhKGltYWdlRGF0YSwgMCwgMCk7XG4gICAgICAgIGlwY1JlbmRlcmVyLnNlbmQoXCIke1NURUdPX1RJQ0tfQ0hBTk5FTH1cIiwgdGltZXN0YW1wTXMpO1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiB1cGRhdGVMb29wKCkge1xuICAgICAgICBpZiAoc3RhcnRUaW1lID09PSBudWxsKSByZXR1cm47XG4gICAgICAgIGNvbnN0IGVsYXBzZWQgPSBwZXJmb3JtYW5jZS5ub3coKSAtIHN0YXJ0VGltZTtcbiAgICAgICAgZW5jb2RlVGltZXN0YW1wKGVsYXBzZWQpO1xuICAgICAgICByYWZJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSh1cGRhdGVMb29wKTtcbiAgICAgIH1cblxuICAgICAgd2luZG93Ll9fcHVwX3N0YXJ0X3N0ZWdvX18gPSAoKSA9PiB7XG4gICAgICAgIHN0YXJ0VGltZSA9IHBlcmZvcm1hbmNlLm5vdygpO1xuICAgICAgICBlbmNvZGVUaW1lc3RhbXAoMCk7XG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSh1cGRhdGVMb29wKTtcbiAgICAgIH07XG5cbiAgICAgIHdpbmRvdy5fX3B1cF9kcmF3X3N0ZWdvX18gPSAobXMpID0+IHtcbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IGVuY29kZVRpbWVzdGFtcChtcykpO1xuICAgICAgfTtcblxuICAgICAgd2luZG93Ll9fcHVwX3N0b3Bfc3RlZ29fXyA9ICgpID0+IHtcbiAgICAgICAgaWYgKHJhZklkICE9PSBudWxsKSB7XG4gICAgICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUocmFmSWQpO1xuICAgICAgICAgIHJhZklkID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9KSgpO1xuICA8L3NjcmlwdD5cbjwvYm9keT5cbjwvaHRtbD5gO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVjb2RlU3RlZ28oYml0bWFwOiBCdWZmZXIsIHNpemU6IFNpemUpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IHNpemU7XG4gIGlmICh3aWR0aCA8IEZSQU1FX1NZTkNfTUFSS0VSX1dJRFRIIHx8IGhlaWdodCA8IDIpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgbWFya2VyUm93ID0gaGVpZ2h0IC0gMTtcblxuICBsZXQgdGltZXN0YW1wID0gMDtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBGUkFNRV9TWU5DX01BUktFUl9XSURUSDsgaSsrKSB7XG4gICAgY29uc3QgcGl4ZWxJZHggPSAobWFya2VyUm93ICogd2lkdGggKyBpKSAqIDQ7XG4gICAgY29uc3QgciA9IGJpdG1hcFtwaXhlbElkeF0gPz8gMDtcbiAgICBjb25zdCBiaXQgPSByID4gMTI3ID8gMSA6IDA7XG4gICAgdGltZXN0YW1wID0gKHRpbWVzdGFtcCA8PCAxKSB8IGJpdDtcbiAgfVxuXG4gIHRpbWVzdGFtcCA9IHRpbWVzdGFtcCA+Pj4gMDtcblxuICBpZiAoIU51bWJlci5pc0Zpbml0ZSh0aW1lc3RhbXApIHx8IHRpbWVzdGFtcCA8IDAgfHwgdGltZXN0YW1wID4gMWU3KSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHJldHVybiB0aW1lc3RhbXA7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzdGFydFN0ZWdvKGZyYW1lOiBXZWJGcmFtZU1haW4pIHtcbiAgYXdhaXQgZnJhbWUuZXhlY3V0ZUphdmFTY3JpcHQoYF9fcHVwX3N0YXJ0X3N0ZWdvX18oKWApO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc3dhcEJ1ZmZlcihmcmFtZTogV2ViRnJhbWVNYWluLCBleHBlY3RlZDogbnVtYmVyKSB7XG4gIGNvbnN0IHN3YXBwZWQgPSBuZXcgUHJvbWlzZTxudW1iZXI+KChyZXNvbHZlKSA9PiB7XG4gICAgY29uc3QgaGFuZGxlciA9IChfZTogdW5rbm93biwgbXM6IG51bWJlcikgPT4ge1xuICAgICAgaWYgKE1hdGguYWJzKG1zIC0gZXhwZWN0ZWQpIDw9IDEpIHtcbiAgICAgICAgZnJhbWUuaXBjLm9mZihTVEVHT19USUNLX0NIQU5ORUwsIGhhbmRsZXIpO1xuICAgICAgICByZXNvbHZlKG1zKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGZyYW1lLmlwYy5vbihTVEVHT19USUNLX0NIQU5ORUwsIGhhbmRsZXIpO1xuICB9KTtcbiAgYXdhaXQgZnJhbWUuZXhlY3V0ZUphdmFTY3JpcHQoYF9fcHVwX2RyYXdfc3RlZ29fXygke2V4cGVjdGVkfSlgKTtcbiAgYXdhaXQgc3dhcHBlZDtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHN0b3BTdGVnbyhmcmFtZTogV2ViRnJhbWVNYWluKSB7XG4gIGF3YWl0IGZyYW1lLmV4ZWN1dGVKYXZhU2NyaXB0KGBfX3B1cF9zdG9wX3N0ZWdvX18oKWApO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8wMS5cblxuaW1wb3J0IHR5cGUgeyBTaXplIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBwcm90b2NvbCB9IGZyb20gXCJlbGVjdHJvblwiO1xuaW1wb3J0IHsgYnVpbGRTdGVnb0hUTUwgfSBmcm9tIFwiLi9zdGVnb1wiO1xuXG5jb25zdCBQVVBfU0NIRU1FID0gXCJwdXBcIjtcblxuLy8gTXVzdCBiZSBjYWxsZWQgc3luY2hyb25vdXNseSBiZWZvcmUgYXBwIGlzIHJlYWR5LlxucHJvdG9jb2wucmVnaXN0ZXJTY2hlbWVzQXNQcml2aWxlZ2VkKFtcbiAge1xuICAgIHNjaGVtZTogUFVQX1NDSEVNRSxcbiAgICBwcml2aWxlZ2VzOiB7XG4gICAgICBzdGFuZGFyZDogdHJ1ZSxcbiAgICAgIHNlY3VyZTogdHJ1ZSxcbiAgICAgIGJ5cGFzc0NTUDogdHJ1ZSxcbiAgICAgIGFsbG93U2VydmljZVdvcmtlcnM6IHRydWUsXG4gICAgICBzdXBwb3J0RmV0Y2hBUEk6IHRydWUsXG4gICAgICBjb3JzRW5hYmxlZDogdHJ1ZSxcbiAgICAgIHN0cmVhbTogdHJ1ZSxcbiAgICAgIGNvZGVDYWNoZTogdHJ1ZSxcbiAgICB9LFxuICB9LFxuXSk7XG5cbi8vIE11c3QgYmUgY2FsbGVkIGFmdGVyIGFwcCBpcyByZWFkeS5cbmV4cG9ydCBmdW5jdGlvbiBzZXR1cFB1cFByb3RvY29sKCk6IHZvaWQge1xuICBwcm90b2NvbC5oYW5kbGUoUFVQX1NDSEVNRSwgKHJlcSkgPT4ge1xuICAgIGNvbnN0IHVybCA9IG5ldyBVUkwocmVxLnVybCk7XG4gICAgY29uc3Qgc3JjID0gdXJsLnNlYXJjaFBhcmFtcy5nZXQoXCJzcmNcIikgPz8gXCJcIjtcbiAgICBjb25zdCB3aWR0aCA9IHBhcnNlSW50KHVybC5zZWFyY2hQYXJhbXMuZ2V0KFwid1wiKSA/PyBcIjBcIiwgMTApO1xuICAgIGNvbnN0IGhlaWdodCA9IHBhcnNlSW50KHVybC5zZWFyY2hQYXJhbXMuZ2V0KFwiaFwiKSA/PyBcIjBcIiwgMTApO1xuICAgIGNvbnN0IGh0bWwgPSBidWlsZFN0ZWdvSFRNTChzcmMsIHsgd2lkdGgsIGhlaWdodCB9KTtcbiAgICByZXR1cm4gbmV3IFJlc3BvbnNlKGh0bWwsIHsgaGVhZGVyczogeyBcImNvbnRlbnQtdHlwZVwiOiBcInRleHQvaHRtbFwiIH0gfSk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU3RlZ29VUkwoc3JjOiBzdHJpbmcsIHNpemU6IFNpemUpOiBzdHJpbmcge1xuICBjb25zdCB1cmwgPSBuZXcgVVJMKGAke1BVUF9TQ0hFTUV9Oi8vc3RlZ29gKTtcbiAgdXJsLnNlYXJjaFBhcmFtcy5zZXQoXCJzcmNcIiwgc3JjKTtcbiAgdXJsLnNlYXJjaFBhcmFtcy5zZXQoXCJ3XCIsIFN0cmluZyhzaXplLndpZHRoKSk7XG4gIHVybC5zZWFyY2hQYXJhbXMuc2V0KFwiaFwiLCBTdHJpbmcoc2l6ZS5oZWlnaHQpKTtcbiAgcmV0dXJuIHVybC50b1N0cmluZygpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMS8zMC5cblxuaW50ZXJmYWNlIFF1ZXVlRW50cnkge1xuICBydW46IFZvaWRGdW5jdGlvbjtcbiAgcmVqZWN0OiAocmVhc29uOiB1bmtub3duKSA9PiB2b2lkO1xuICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbn1cblxuZXhwb3J0IGNsYXNzIENvbmN1cnJlbmN5TGltaXRlciB7XG4gIHByaXZhdGUgX2FjdGl2ZSA9IDA7XG4gIHByaXZhdGUgX3F1ZXVlOiBRdWV1ZUVudHJ5W10gPSBbXTtcbiAgcHJpdmF0ZSBfc2lnbmFscyA9IG5ldyBXZWFrU2V0PEFib3J0U2lnbmFsPigpO1xuICBwcml2YXRlIF9yZXNvbHZlPzogVm9pZEZ1bmN0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKHJlYWRvbmx5IG1heENvbmN1cnJlbmN5OiBudW1iZXIpIHt9XG5cbiAgZ2V0IGFjdGl2ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9hY3RpdmU7XG4gIH1cblxuICBnZXQgcGVuZGluZygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9xdWV1ZS5sZW5ndGg7XG4gIH1cblxuICBnZXQgc3RhdHMoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYGFjdGl2ZTogJHt0aGlzLmFjdGl2ZX0sIHBlbmRpbmc6ICR7dGhpcy5wZW5kaW5nfWA7XG4gIH1cblxuICBhc3luYyBzY2hlZHVsZTxUPihmbjogKCkgPT4gUHJvbWlzZTxUPiwgc2lnbmFsPzogQWJvcnRTaWduYWwpOiBQcm9taXNlPFQ+IHtcbiAgICBzaWduYWw/LnRocm93SWZBYm9ydGVkKCk7XG5cbiAgICBpZiAoc2lnbmFsICYmICF0aGlzLl9zaWduYWxzLmhhcyhzaWduYWwpKSB7XG4gICAgICB0aGlzLl9zaWduYWxzLmFkZChzaWduYWwpO1xuICAgICAgc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCAoKSA9PiB0aGlzLmZsdXNoKHNpZ25hbCksIHsgb25jZTogdHJ1ZSB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2U8VD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpcy5fcXVldWUucHVzaCh7XG4gICAgICAgIHJ1bjogKCkgPT4ge1xuICAgICAgICAgIGlmIChzaWduYWw/LmFib3J0ZWQpIHtcbiAgICAgICAgICAgIHJlamVjdChzaWduYWwucmVhc29uKTtcbiAgICAgICAgICAgIHRoaXMubmV4dCgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLl9hY3RpdmUrKztcbiAgICAgICAgICBmbigpXG4gICAgICAgICAgICAudGhlbigodikgPT4ge1xuICAgICAgICAgICAgICB0aGlzLl9hY3RpdmUtLTtcbiAgICAgICAgICAgICAgcmVzb2x2ZSh2KTtcbiAgICAgICAgICAgICAgdGhpcy5uZXh0KCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuX2FjdGl2ZS0tO1xuICAgICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgICAgIHRoaXMubmV4dCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIHJlamVjdCxcbiAgICAgICAgc2lnbmFsLFxuICAgICAgfSk7XG4gICAgICB0aGlzLm5leHQoKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGRyYWluKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9hY3RpdmUgPT09IDAgJiYgdGhpcy5wZW5kaW5nID09PSAwKSByZXR1cm47XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyKSA9PiAodGhpcy5fcmVzb2x2ZSA9IHIpKTtcbiAgfVxuXG4gIHByaXZhdGUgZmx1c2goc2lnbmFsOiBBYm9ydFNpZ25hbCkge1xuICAgIGNvbnN0IGtlZXA6IFF1ZXVlRW50cnlbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgZW50cnkgb2YgdGhpcy5fcXVldWUpIHtcbiAgICAgIGlmIChlbnRyeS5zaWduYWwgPT09IHNpZ25hbCkge1xuICAgICAgICBlbnRyeS5yZWplY3Qoc2lnbmFsLnJlYXNvbik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBrZWVwLnB1c2goZW50cnkpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLl9xdWV1ZSA9IGtlZXA7XG4gICAgdGhpcy5uZXh0KCk7XG4gIH1cblxuICBwcml2YXRlIG5leHQoKSB7XG4gICAgaWYgKHRoaXMuX2FjdGl2ZSA9PT0gMCAmJiB0aGlzLnBlbmRpbmcgPT09IDApIHtcbiAgICAgIHRoaXMuX3Jlc29sdmU/LigpO1xuICAgICAgdGhpcy5fcmVzb2x2ZSA9IHVuZGVmaW5lZDtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuX2FjdGl2ZSA8IHRoaXMubWF4Q29uY3VycmVuY3kpIHtcbiAgICAgIHRoaXMuX3F1ZXVlLnNoaWZ0KCk/LnJ1bigpO1xuICAgIH1cbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8xMi5cblxuaW1wb3J0IHsgQ29kZWMsIENvZGVjQ29udGV4dCwgRkZtcGVnRXJyb3IsIEZyYW1lLCBQYWNrZXQsIFJhdGlvbmFsLCB0eXBlIFN0cmVhbSB9IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQge1xuICBBVl9DT0RFQ19GTEFHX0dMT0JBTF9IRUFERVIsXG4gIEFWRVJST1JfRUFHQUlOLFxuICBBVkVSUk9SX0VPRixcbiAgdHlwZSBBVkNvbG9yUmFuZ2UsXG4gIHR5cGUgQVZQaXhlbEZvcm1hdCxcbn0gZnJvbSBcIm5vZGUtYXYvY29uc3RhbnRzXCI7XG5pbXBvcnQgdHlwZSB7IEZvcm1hdE11eGVyIH0gZnJvbSBcIi4vbXV4ZXJcIjtcblxuZXhwb3J0IGludGVyZmFjZSBWaWRlb0N0eE9wdGlvbnMge1xuICBjb2RlYzogQ29kZWM7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICBmcHM6IG51bWJlcjtcbiAgYml0cmF0ZTogbnVtYmVyO1xuICBwaXhlbEZvcm1hdDogQVZQaXhlbEZvcm1hdDtcbiAgY29kZWNUYWc/OiBzdHJpbmc7XG4gIGNvbG9yUmFuZ2U/OiBBVkNvbG9yUmFuZ2U7XG4gIG9wdGlvbnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gb3BlblZpZGVvQ3R4KG9wdHM6IFZpZGVvQ3R4T3B0aW9ucywgbGFiZWw6IHN0cmluZyk6IFByb21pc2U8Q29kZWNDb250ZXh0PiB7XG4gIGNvbnN0IGN0eCA9IG5ldyBDb2RlY0NvbnRleHQoKTtcbiAgY3R4LmFsbG9jQ29udGV4dDMob3B0cy5jb2RlYyk7XG4gIGN0eC5jb2RlY0lkID0gb3B0cy5jb2RlYy5pZDtcbiAgY3R4LndpZHRoID0gb3B0cy53aWR0aDtcbiAgY3R4LmhlaWdodCA9IG9wdHMuaGVpZ2h0O1xuICBjdHgucGl4ZWxGb3JtYXQgPSBvcHRzLnBpeGVsRm9ybWF0O1xuICBjdHgudGltZUJhc2UgPSBuZXcgUmF0aW9uYWwoMSwgb3B0cy5mcHMpO1xuICBjdHguZnJhbWVyYXRlID0gbmV3IFJhdGlvbmFsKG9wdHMuZnBzLCAxKTtcbiAgY3R4LmdvcFNpemUgPSBvcHRzLmZwcyAqIDI7XG4gIGN0eC5iaXRSYXRlID0gQmlnSW50KG9wdHMuYml0cmF0ZSk7XG4gIGN0eC5zZXRGbGFncyhBVl9DT0RFQ19GTEFHX0dMT0JBTF9IRUFERVIpO1xuICBpZiAob3B0cy5jb2RlY1RhZykgY3R4LmNvZGVjVGFnID0gb3B0cy5jb2RlY1RhZztcbiAgaWYgKG9wdHMuY29sb3JSYW5nZSAhPT0gdW5kZWZpbmVkKSBjdHguY29sb3JSYW5nZSA9IG9wdHMuY29sb3JSYW5nZTtcbiAgZm9yIChjb25zdCBbaywgdl0gb2YgT2JqZWN0LmVudHJpZXMob3B0cy5vcHRpb25zID8/IHt9KSkgY3R4LnNldE9wdGlvbihrLCB2KTtcbiAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IGN0eC5vcGVuMihvcHRzLmNvZGVjLCBudWxsKSwgbGFiZWwpO1xuICByZXR1cm4gY3R4O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWFrZUZyYW1lKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyLCBwaXhGbXQ6IEFWUGl4ZWxGb3JtYXQpOiBGcmFtZSB7XG4gIGNvbnN0IGZyYW1lID0gbmV3IEZyYW1lKCk7XG4gIGZyYW1lLmFsbG9jKCk7XG4gIGZyYW1lLmZvcm1hdCA9IHBpeEZtdDtcbiAgZnJhbWUud2lkdGggPSB3aWR0aDtcbiAgZnJhbWUuaGVpZ2h0ID0gaGVpZ2h0O1xuICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoZnJhbWUuZ2V0QnVmZmVyKDApLCBcImZyYW1lLmdldEJ1ZmZlclwiKTtcbiAgcmV0dXJuIGZyYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWFrZVBhY2tldCgpOiBQYWNrZXQge1xuICBjb25zdCBwa3QgPSBuZXcgUGFja2V0KCk7XG4gIHBrdC5hbGxvYygpO1xuICByZXR1cm4gcGt0O1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZHJhaW5QYWNrZXRzKGN0eDogQ29kZWNDb250ZXh0LCBwa3Q6IFBhY2tldCwgc3RyZWFtOiBTdHJlYW0sIG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICB3aGlsZSAodHJ1ZSkge1xuICAgIGNvbnN0IHIgPSBhd2FpdCBjdHgucmVjZWl2ZVBhY2tldChwa3QpO1xuICAgIGlmIChyID09PSBBVkVSUk9SX0VBR0FJTiB8fCByID09PSBBVkVSUk9SX0VPRikgYnJlYWs7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKHIsIFwicmVjZWl2ZVBhY2tldFwiKTtcbiAgICBwa3Quc3RyZWFtSW5kZXggPSBzdHJlYW0uaW5kZXg7XG4gICAgaWYgKHBrdC5kdXJhdGlvbiA9PT0gMG4pIHBrdC5kdXJhdGlvbiA9IDFuO1xuICAgIHBrdC5yZXNjYWxlVHMoY3R4LnRpbWVCYXNlLCBzdHJlYW0udGltZUJhc2UpO1xuICAgIGF3YWl0IG11eGVyLndyaXRlUGFja2V0KHBrdCk7XG4gICAgcGt0LnVucmVmKCk7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMDEuXG5cbmltcG9ydCB7XG4gIENvZGVjLFxuICBDb2RlY0NvbnRleHQsXG4gIEZGbXBlZ0Vycm9yLFxuICBGaWx0ZXIsXG4gIEZpbHRlckNvbnRleHQsXG4gIEZpbHRlckdyYXBoLFxuICBGaWx0ZXJJbk91dCxcbiAgRnJhbWUsXG4gIHR5cGUgUGFja2V0LFxuICBSYXRpb25hbCxcbiAgdHlwZSBTdHJlYW0sXG59IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQge1xuICBBVl9DSEFOTkVMX0xBWU9VVF9TVEVSRU8sXG4gIEFWX0NPREVDX0ZMQUdfR0xPQkFMX0hFQURFUixcbiAgQVZfU0FNUExFX0ZNVF9GTFQsXG4gIEFWX1NBTVBMRV9GTVRfRkxUUCxcbiAgQVZFUlJPUl9FQUdBSU4sXG4gIEFWRVJST1JfRU9GLFxuICB0eXBlIEZGQXVkaW9FbmNvZGVyLFxufSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcbmltcG9ydCB0eXBlIHsgRm9ybWF0TXV4ZXIgfSBmcm9tIFwiLi9tdXhlclwiO1xuaW1wb3J0IHsgZHJhaW5QYWNrZXRzLCBtYWtlUGFja2V0IH0gZnJvbSBcIi4vbWlzY1wiO1xuXG5jb25zdCBTQU1QTEVfRk1UX05BTUU6IFBhcnRpYWw8UmVjb3JkPG51bWJlciwgc3RyaW5nPj4gPSB7IFtBVl9TQU1QTEVfRk1UX0ZMVF06IFwiZmx0XCIsIFtBVl9TQU1QTEVfRk1UX0ZMVFBdOiBcImZsdHBcIiB9O1xuXG5leHBvcnQgaW50ZXJmYWNlIEF1ZGlvRW5jb2Rlck9wdGlvbnMge1xuICBvdXRTYW1wbGVSYXRlOiBudW1iZXI7XG4gIG91dFNhbXBsZUZtdDogdHlwZW9mIEFWX1NBTVBMRV9GTVRfRkxUIHwgdHlwZW9mIEFWX1NBTVBMRV9GTVRfRkxUUDtcbiAgY29kZWNOYW1lOiBGRkF1ZGlvRW5jb2RlcjtcbiAgZ2xvYmFsSGVhZGVyOiBib29sZWFuO1xuICBiaXRyYXRlOiBudW1iZXI7XG4gIG11eGVyOiBGb3JtYXRNdXhlcjtcbn1cblxuZXhwb3J0IGNsYXNzIEF1ZGlvRW5jb2RlciBpbXBsZW1lbnRzIERpc3Bvc2FibGUge1xuICBwcml2YXRlIF9jdHg6IENvZGVjQ29udGV4dDtcbiAgcHJpdmF0ZSBfc3RyZWFtOiBTdHJlYW07XG4gIHByaXZhdGUgX3BrdDogUGFja2V0O1xuICBwcml2YXRlIF9vdXRSYXRlOiBudW1iZXI7XG4gIHByaXZhdGUgX291dEZtdDogdHlwZW9mIEFWX1NBTVBMRV9GTVRfRkxUIHwgdHlwZW9mIEFWX1NBTVBMRV9GTVRfRkxUUDtcbiAgcHJpdmF0ZSBfZnJhbWVTaXplOiBudW1iZXI7XG4gIHByaXZhdGUgX2ZpbHRlckZyYW1lOiBGcmFtZTtcbiAgcHJpdmF0ZSBfZ3JhcGg/OiBGaWx0ZXJHcmFwaDtcbiAgcHJpdmF0ZSBfYnVmU3JjPzogRmlsdGVyQ29udGV4dDtcbiAgcHJpdmF0ZSBfYnVmU2luaz86IEZpbHRlckNvbnRleHQ7XG4gIHByaXZhdGUgX2luUmF0ZT86IG51bWJlcjtcbiAgcHJpdmF0ZSBfcHRzID0gMG47XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihjdHg6IENvZGVjQ29udGV4dCwgc3RyZWFtOiBTdHJlYW0sIG91dEZtdDogdHlwZW9mIEFWX1NBTVBMRV9GTVRfRkxUIHwgdHlwZW9mIEFWX1NBTVBMRV9GTVRfRkxUUCkge1xuICAgIHRoaXMuX2N0eCA9IGN0eDtcbiAgICB0aGlzLl9zdHJlYW0gPSBzdHJlYW07XG4gICAgdGhpcy5fb3V0UmF0ZSA9IGN0eC5zYW1wbGVSYXRlO1xuICAgIHRoaXMuX291dEZtdCA9IG91dEZtdDtcbiAgICB0aGlzLl9mcmFtZVNpemUgPSBjdHguZnJhbWVTaXplO1xuICAgIHRoaXMuX3BrdCA9IG1ha2VQYWNrZXQoKTtcbiAgICB0aGlzLl9maWx0ZXJGcmFtZSA9IG5ldyBGcmFtZSgpO1xuICAgIHRoaXMuX2ZpbHRlckZyYW1lLmFsbG9jKCk7XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgY3JlYXRlKG9wdHM6IEF1ZGlvRW5jb2Rlck9wdGlvbnMpOiBQcm9taXNlPEF1ZGlvRW5jb2Rlcj4ge1xuICAgIGNvbnN0IGNvZGVjID0gQ29kZWMuZmluZEVuY29kZXJCeU5hbWUob3B0cy5jb2RlY05hbWUpO1xuICAgIGlmICghY29kZWMpIHRocm93IG5ldyBFcnJvcihgQXVkaW8gZW5jb2RlciBub3QgZm91bmQ6ICR7b3B0cy5jb2RlY05hbWV9YCk7XG4gICAgY29uc3QgY3R4ID0gbmV3IENvZGVjQ29udGV4dCgpO1xuICAgIGN0eC5hbGxvY0NvbnRleHQzKGNvZGVjKTtcbiAgICBjdHguY29kZWNJZCA9IGNvZGVjLmlkO1xuICAgIGN0eC5zYW1wbGVGb3JtYXQgPSBvcHRzLm91dFNhbXBsZUZtdDtcbiAgICBjdHguc2FtcGxlUmF0ZSA9IG9wdHMub3V0U2FtcGxlUmF0ZTtcbiAgICBjdHguY2hhbm5lbExheW91dCA9IEFWX0NIQU5ORUxfTEFZT1VUX1NURVJFTztcbiAgICBjdHgudGltZUJhc2UgPSBuZXcgUmF0aW9uYWwoMSwgb3B0cy5vdXRTYW1wbGVSYXRlKTtcbiAgICBjdHguYml0UmF0ZSA9IEJpZ0ludChvcHRzLmJpdHJhdGUpO1xuICAgIGlmIChvcHRzLmdsb2JhbEhlYWRlcikgY3R4LnNldEZsYWdzKEFWX0NPREVDX0ZMQUdfR0xPQkFMX0hFQURFUik7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IGN0eC5vcGVuMihjb2RlYywgbnVsbCksIFwiYXVkaW9DdHgub3BlbjJcIik7XG4gICAgY29uc3Qgc3RyZWFtID0gb3B0cy5tdXhlci5hZGRTdHJlYW0oY3R4KTtcbiAgICByZXR1cm4gbmV3IEF1ZGlvRW5jb2RlcihjdHgsIHN0cmVhbSwgb3B0cy5vdXRTYW1wbGVGbXQpO1xuICB9XG5cbiAgc2V0SW5wdXRSYXRlKGluU2FtcGxlUmF0ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5fZ3JhcGg/LltTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICB0aGlzLl9pblJhdGUgPSBpblNhbXBsZVJhdGU7XG4gICAgY29uc3QgZ3JhcGggPSBuZXcgRmlsdGVyR3JhcGgoKTtcbiAgICBncmFwaC5hbGxvYygpO1xuICAgIGNvbnN0IGFidWZmZXIgPSBGaWx0ZXIuZ2V0QnlOYW1lKFwiYWJ1ZmZlclwiKSE7XG4gICAgY29uc3QgYnVmU3JjID0gZ3JhcGguY3JlYXRlRmlsdGVyKFxuICAgICAgYWJ1ZmZlcixcbiAgICAgIFwic3JjXCIsXG4gICAgICBgc2FtcGxlX3JhdGU9JHtpblNhbXBsZVJhdGV9OnNhbXBsZV9mbXQ9Zmx0OmNoYW5uZWxfbGF5b3V0PXN0ZXJlbzp0aW1lX2Jhc2U9MS8ke2luU2FtcGxlUmF0ZX1gLFxuICAgICk7XG4gICAgaWYgKCFidWZTcmMpIHRocm93IG5ldyBFcnJvcihcIkZhaWxlZCB0byBjcmVhdGUgYWJ1ZmZlclwiKTtcbiAgICBjb25zdCBhYnVmZmVyc2luayA9IEZpbHRlci5nZXRCeU5hbWUoXCJhYnVmZmVyc2lua1wiKSE7XG4gICAgY29uc3QgYnVmU2luayA9IGdyYXBoLmNyZWF0ZUZpbHRlcihhYnVmZmVyc2luaywgXCJzaW5rXCIpO1xuICAgIGlmICghYnVmU2luaykgdGhyb3cgbmV3IEVycm9yKFwiRmFpbGVkIHRvIGNyZWF0ZSBhYnVmZmVyc2lua1wiKTtcbiAgICBjb25zdCBmbXROYW1lID0gU0FNUExFX0ZNVF9OQU1FW3RoaXMuX291dEZtdF0gPz8gXCJmbHRcIjtcbiAgICBjb25zdCBmaWx0ZXJEZXNjID0gYGFmb3JtYXQ9c2FtcGxlX2ZtdHM9JHtmbXROYW1lfTpzYW1wbGVfcmF0ZXM9JHt0aGlzLl9vdXRSYXRlfTpjaGFubmVsX2xheW91dHM9c3RlcmVvLGFzZXRuc2FtcGxlcz1uPSR7dGhpcy5fZnJhbWVTaXplfTpwPTFgO1xuICAgIGNvbnN0IG91dHB1dHMgPSBGaWx0ZXJJbk91dC5jcmVhdGVMaXN0KFt7IG5hbWU6IFwiaW5cIiwgZmlsdGVyQ3R4OiBidWZTcmMsIHBhZElkeDogMCB9XSk7XG4gICAgY29uc3QgaW5wdXRzID0gRmlsdGVySW5PdXQuY3JlYXRlTGlzdChbeyBuYW1lOiBcIm91dFwiLCBmaWx0ZXJDdHg6IGJ1ZlNpbmssIHBhZElkeDogMCB9XSk7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGdyYXBoLnBhcnNlUHRyKGZpbHRlckRlc2MsIGlucHV0cywgb3V0cHV0cyksIFwiZ3JhcGgucGFyc2VQdHJcIik7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGdyYXBoLmNvbmZpZ1N5bmMoKSwgXCJncmFwaC5jb25maWdcIik7XG4gICAgdGhpcy5fZ3JhcGggPSBncmFwaDtcbiAgICB0aGlzLl9idWZTcmMgPSBidWZTcmM7XG4gICAgdGhpcy5fYnVmU2luayA9IGJ1ZlNpbms7XG4gIH1cblxuICBhc3luYyBlbmNvZGUocGNtOiBCdWZmZXIsIG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5fYnVmU3JjIHx8ICF0aGlzLl9pblJhdGUpIHJldHVybjtcbiAgICBjb25zdCBzcmMgPSBuZXcgRmxvYXQzMkFycmF5KHBjbS5idWZmZXIsIHBjbS5ieXRlT2Zmc2V0LCBwY20uYnl0ZUxlbmd0aCAvIDQpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3JjLmxlbmd0aDsgaSsrKSBpZiAoIWlzRmluaXRlKHNyY1tpXSEpKSBzcmNbaV0gPSAwO1xuICAgIGNvbnN0IG5TYW1wbGVzID0gc3JjLmxlbmd0aCA+PiAxO1xuICAgIHVzaW5nIGZyYW1lID0gRnJhbWUuZnJvbUF1ZGlvQnVmZmVyKEJ1ZmZlci5mcm9tKHNyYy5idWZmZXIsIHNyYy5ieXRlT2Zmc2V0LCBzcmMuYnl0ZUxlbmd0aCksIHtcbiAgICAgIG5iU2FtcGxlczogblNhbXBsZXMsXG4gICAgICBmb3JtYXQ6IEFWX1NBTVBMRV9GTVRfRkxULFxuICAgICAgc2FtcGxlUmF0ZTogdGhpcy5faW5SYXRlLFxuICAgICAgY2hhbm5lbExheW91dDogQVZfQ0hBTk5FTF9MQVlPVVRfU1RFUkVPLFxuICAgICAgcHRzOiB0aGlzLl9wdHMsXG4gICAgICB0aW1lQmFzZTogeyBudW06IDEsIGRlbjogdGhpcy5faW5SYXRlIH0sXG4gICAgfSk7XG4gICAgdGhpcy5fcHRzICs9IEJpZ0ludChuU2FtcGxlcyk7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IHRoaXMuX2J1ZlNyYy5idWZmZXJzcmNBZGRGcmFtZShmcmFtZSksIFwiYnVmZmVyc3JjQWRkRnJhbWVcIik7XG4gICAgYXdhaXQgdGhpcy5kcmFpbihtdXhlcik7XG4gIH1cblxuICBhc3luYyBmbHVzaChtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fYnVmU3JjKSB7XG4gICAgICBhd2FpdCB0aGlzLl9idWZTcmMuYnVmZmVyc3JjQWRkRnJhbWUobnVsbCk7XG4gICAgICBhd2FpdCB0aGlzLmRyYWluKG11eGVyKTtcbiAgICB9XG4gICAgYXdhaXQgdGhpcy5fY3R4LnNlbmRGcmFtZShudWxsKTtcbiAgICBhd2FpdCB0aGlzLmRyYWluQ29kZWMobXV4ZXIpO1xuICB9XG5cbiAgW1N5bWJvbC5kaXNwb3NlXSgpOiB2b2lkIHtcbiAgICB0aGlzLl9wa3QuZnJlZSgpO1xuICAgIHRoaXMuX2ZpbHRlckZyYW1lLmZyZWUoKTtcbiAgICB0aGlzLl9ncmFwaD8uW1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgIHRoaXMuX2N0eC5mcmVlQ29udGV4dCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBkcmFpbihtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgY29uc3QgciA9IGF3YWl0IHRoaXMuX2J1ZlNpbmshLmJ1ZmZlcnNpbmtHZXRGcmFtZSh0aGlzLl9maWx0ZXJGcmFtZSk7XG4gICAgICBpZiAociA9PT0gQVZFUlJPUl9FQUdBSU4gfHwgciA9PT0gQVZFUlJPUl9FT0YpIGJyZWFrO1xuICAgICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKHIsIFwiYnVmZmVyc2lua0dldEZyYW1lXCIpO1xuICAgICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IHRoaXMuX2N0eC5zZW5kRnJhbWUodGhpcy5fZmlsdGVyRnJhbWUpLCBcImF1ZGlvQ3R4LnNlbmRGcmFtZVwiKTtcbiAgICAgIHRoaXMuX2ZpbHRlckZyYW1lLnVucmVmKCk7XG4gICAgICBhd2FpdCB0aGlzLmRyYWluQ29kZWMobXV4ZXIpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZHJhaW5Db2RlYyhtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gZHJhaW5QYWNrZXRzKHRoaXMuX2N0eCwgdGhpcy5fcGt0LCB0aGlzLl9zdHJlYW0sIG11eGVyKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8wMy5cblxuaW1wb3J0IHsgb2sgfSBmcm9tIFwiYXNzZXJ0XCI7XG5pbXBvcnQge1xuICBBVl9QSVhfRk1UX0JHUkEsXG4gIEFWX1BJWF9GTVRfWVVWQTQyMFAsXG4gIENvZGVjLFxuICBDb2RlY0NvbnRleHQsXG4gIEZGX0RFQ09ERVJfUE5HLFxuICBGRm1wZWdFcnJvcixcbiAgdHlwZSBGcmFtZSxcbiAgUGFja2V0LFxuICBTb2Z0d2FyZVNjYWxlQ29udGV4dCxcbiAgU1dTX0JJTElORUFSLFxuICB0eXBlIEFWUGl4ZWxGb3JtYXQsXG59IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQgeyBtYWtlRnJhbWUsIG1ha2VQYWNrZXQgfSBmcm9tIFwiLi9taXNjXCI7XG5cbmV4cG9ydCBjbGFzcyBDb2RlY1N0YXRlIGltcGxlbWVudHMgRGlzcG9zYWJsZSB7XG4gIHJlYWRvbmx5IHNyYzogRnJhbWU7XG4gIHJlYWRvbmx5IGRzdDogRnJhbWU7XG4gIHJlYWRvbmx5IHBrdDogUGFja2V0O1xuICBwcml2YXRlIF9zd3M/OiBTb2Z0d2FyZVNjYWxlQ29udGV4dDtcbiAgcHJpdmF0ZSBfcG5nPzogQ29kZWM7XG5cbiAgc3RhdGljIGFzeW5jIGNyZWF0ZSh3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcikge1xuICAgIGNvbnN0IGNvZGVjID0gQ29kZWMuZmluZERlY29kZXJCeU5hbWUoRkZfREVDT0RFUl9QTkcpO1xuICAgIG9rKGNvZGVjLCBcInBuZyBkZWNvZGVyIHVuYXZhaWxhYmxlXCIpO1xuICAgIHJldHVybiBuZXcgQ29kZWNTdGF0ZSh3aWR0aCwgaGVpZ2h0LCBjb2RlYyk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyLCBwbmc6IENvZGVjKSB7XG4gICAgdGhpcy5fcG5nID0gcG5nO1xuICAgIHRoaXMuc3JjID0gbWFrZUZyYW1lKHdpZHRoLCBoZWlnaHQsIEFWX1BJWF9GTVRfQkdSQSk7XG4gICAgdGhpcy5kc3QgPSBtYWtlRnJhbWUod2lkdGgsIGhlaWdodCwgQVZfUElYX0ZNVF9ZVVZBNDIwUCk7XG4gICAgdGhpcy5wa3QgPSBtYWtlUGFja2V0KCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgZnJlc2ggUE5HIGRlY29kZXIgY29udGV4dC5cbiAgICogVGhlIEZGbXBlZyBQTkcgZGVjb2RlciBhY2N1bXVsYXRlcyBBUE5HIGJsZW5kaW5nIHN0YXRlXG4gICAqIGFjcm9zcyBmcmFtZXMsIHNvIGEgc2hhcmVkIGluc3RhbmNlIGNvcnJ1cHRzIG91dHB1dCB3aGVuIGRlY29kaW5nIHN0YW5kYWxvbmUgUE5Hcy5cbiAgICovXG4gIGFzeW5jIHBuZygpOiBQcm9taXNlPENvZGVjQ29udGV4dD4ge1xuICAgIGNvbnN0IHBuZyA9IG5ldyBDb2RlY0NvbnRleHQoKTtcbiAgICBwbmcuYWxsb2NDb250ZXh0Myh0aGlzLl9wbmcpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCBwbmcub3BlbjIodGhpcy5fcG5nKSwgXCJwbmdEZWNvZGVyLm9wZW4yXCIpO1xuICAgIHJldHVybiBwbmc7XG4gIH1cblxuICBhc3luYyBkZWNvZGVQTkcocG5nRGF0YTogQnVmZmVyKTogUHJvbWlzZTxGcmFtZT4ge1xuICAgIHVzaW5nIHBuZyA9IGF3YWl0IHRoaXMucG5nKCk7XG4gICAgdGhpcy5wa3QuZGF0YSA9IHBuZ0RhdGE7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IHBuZy5zZW5kUGFja2V0KHRoaXMucGt0KSwgXCJwbmdEZWNvZGVyLnNlbmRQYWNrZXRcIik7XG4gICAgdGhpcy5wa3QudW5yZWYoKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgcG5nLnJlY2VpdmVGcmFtZSh0aGlzLnNyYyksIFwicG5nRGVjb2Rlci5yZWNlaXZlRnJhbWVcIik7XG4gICAgcmV0dXJuIHRoaXMuc3JjO1xuICB9XG5cbiAgZ2V0IHN3cygpIHtcbiAgICBpZiAoIXRoaXMuX3N3cykge1xuICAgICAgY29uc3Qgc3dzID0gbmV3IFNvZnR3YXJlU2NhbGVDb250ZXh0KCk7XG4gICAgICBjb25zdCBmbXQgPSB0aGlzLnNyYy5mb3JtYXQgYXMgQVZQaXhlbEZvcm1hdDtcbiAgICAgIHN3cy5nZXRDb250ZXh0KFxuICAgICAgICB0aGlzLnNyYy53aWR0aCxcbiAgICAgICAgdGhpcy5zcmMuaGVpZ2h0LFxuICAgICAgICBmbXQsXG4gICAgICAgIHRoaXMuc3JjLndpZHRoLFxuICAgICAgICB0aGlzLnNyYy5oZWlnaHQsXG4gICAgICAgIEFWX1BJWF9GTVRfWVVWQTQyMFAsXG4gICAgICAgIFNXU19CSUxJTkVBUixcbiAgICAgICk7XG4gICAgICB0aGlzLl9zd3MgPSBzd3M7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9zd3M7XG4gIH1cblxuICBbU3ltYm9sLmRpc3Bvc2VdKCk6IHZvaWQge1xuICAgIHRoaXMuc3JjW1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgIHRoaXMuZHN0W1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgIHRoaXMucGt0W1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgIHRoaXMuX3N3cz8uW1N5bWJvbC5kaXNwb3NlXSgpO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzEzLlxuXG5leHBvcnQgZnVuY3Rpb24gcGFja0JpdHMoYml0czogbnVtYmVyW10pOiBCdWZmZXIge1xuICBjb25zdCBidWYgPSBCdWZmZXIuYWxsb2MoYml0cy5sZW5ndGggPj4gMyk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYnVmLmxlbmd0aDsgaSsrKSB7XG4gICAgbGV0IGJ5dGUgPSAwO1xuICAgIGZvciAobGV0IGIgPSAwOyBiIDwgODsgYisrKSBieXRlID0gKGJ5dGUgPDwgMSkgfCBiaXRzW2kgKiA4ICsgYl0hO1xuICAgIGJ1ZltpXSA9IGJ5dGU7XG4gIH1cbiAgcmV0dXJuIGJ1Zjtcbn1cblxuZXhwb3J0IGNsYXNzIEJpdFdyaXRlciB7XG4gIGJpdHM6IG51bWJlcltdID0gW107XG4gIHcodmFsOiBudW1iZXIsIG46IG51bWJlcikge1xuICAgIGZvciAobGV0IGkgPSBuIC0gMTsgaSA+PSAwOyBpLS0pIHRoaXMuYml0cy5wdXNoKCh2YWwgPj4gaSkgJiAxKTtcbiAgfVxuICBmbGFnKHZhbDogYm9vbGVhbiB8IG51bWJlcikge1xuICAgIHRoaXMuYml0cy5wdXNoKHZhbCA/IDEgOiAwKTtcbiAgfVxuICB1ZSh2YWw6IG51bWJlcikge1xuICAgIGNvbnN0IHYgPSB2YWwgKyAxO1xuICAgIGNvbnN0IGxlbiA9IDMyIC0gTWF0aC5jbHozMih2KTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbiAtIDE7IGkrKykgdGhpcy5iaXRzLnB1c2goMCk7XG4gICAgZm9yIChsZXQgaSA9IGxlbiAtIDE7IGkgPj0gMDsgaS0tKSB0aGlzLmJpdHMucHVzaCgodiA+PiBpKSAmIDEpO1xuICB9XG4gIGFsaWduKHBhZDogbnVtYmVyKSB7XG4gICAgd2hpbGUgKHRoaXMuYml0cy5sZW5ndGggJSA4ICE9PSAwKSB0aGlzLmJpdHMucHVzaChwYWQpO1xuICB9XG4gIGNvcHkoc3JjOiBudW1iZXJbXSwgc3RhcnQ6IG51bWJlciwgbGVuOiBudW1iZXIpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB0aGlzLmJpdHMucHVzaChzcmNbc3RhcnQgKyBpXSEpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBCaXRSZWFkZXIge1xuICBwcml2YXRlIF9iaXRzOiBudW1iZXJbXTtcbiAgcG9zID0gMDtcbiAgY29uc3RydWN0b3IoZGF0YTogQnVmZmVyKSB7XG4gICAgdGhpcy5fYml0cyA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgZm9yIChsZXQgYiA9IDc7IGIgPj0gMDsgYi0tKSB0aGlzLl9iaXRzLnB1c2goKGRhdGFbaV0hID4+IGIpICYgMSk7XG4gICAgfVxuICB9XG4gIGdldCBiaXRzKCkge1xuICAgIHJldHVybiB0aGlzLl9iaXRzO1xuICB9XG4gIHJlYWQobjogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBsZXQgdmFsID0gMDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG47IGkrKykgdmFsID0gKHZhbCA8PCAxKSB8IHRoaXMuX2JpdHNbdGhpcy5wb3MrK10hO1xuICAgIHJldHVybiB2YWw7XG4gIH1cbiAgcmVhZFVlKCk6IG51bWJlciB7XG4gICAgbGV0IHplcm9zID0gMDtcbiAgICB3aGlsZSAodGhpcy5fYml0c1t0aGlzLnBvc10gPT09IDApIHtcbiAgICAgIHplcm9zKys7XG4gICAgICB0aGlzLnBvcysrO1xuICAgIH1cbiAgICB0aGlzLnBvcysrO1xuICAgIGxldCB2YWwgPSAxO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgemVyb3M7IGkrKykgdmFsID0gKHZhbCA8PCAxKSB8IHRoaXMuX2JpdHNbdGhpcy5wb3MrK10hO1xuICAgIHJldHVybiB2YWwgLSAxO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzEyLlxuXG5jb25zdCBOQUxfSEVBREVSX1NJWkUgPSAyO1xuY29uc3QgQU5ORVhfQl9TVEFSVF9DT0RFID0gQnVmZmVyLmZyb20oWzB4MDAsIDB4MDAsIDB4MDAsIDB4MDFdKTtcblxuZXhwb3J0IHsgQU5ORVhfQl9TVEFSVF9DT0RFLCBOQUxfSEVBREVSX1NJWkUgfTtcblxuZXhwb3J0IGludGVyZmFjZSBOYWxVbml0IHtcbiAgdHlwZTogbnVtYmVyO1xuICBsYXllcklkOiBudW1iZXI7XG4gIGRhdGE6IEJ1ZmZlcjtcbn1cblxuZnVuY3Rpb24gcGFyc2VOYWxUeXBlKGhlYWRlcjA6IG51bWJlciwgaGVhZGVyMTogbnVtYmVyKTogeyB0eXBlOiBudW1iZXI7IGxheWVySWQ6IG51bWJlcjsgdGVtcG9yYWxJZDogbnVtYmVyIH0ge1xuICBjb25zdCB0eXBlID0gKGhlYWRlcjAgPj4gMSkgJiAweDNmO1xuICBjb25zdCBsYXllcklkID0gKChoZWFkZXIwICYgMSkgPDwgNSkgfCAoKGhlYWRlcjEgPj4gMykgJiAweDFmKTtcbiAgY29uc3QgdGVtcG9yYWxJZCA9IGhlYWRlcjEgJiAweDA3O1xuICByZXR1cm4geyB0eXBlLCBsYXllcklkLCB0ZW1wb3JhbElkIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbmNvZGVOYWxIZWFkZXIodHlwZTogbnVtYmVyLCBsYXllcklkOiBudW1iZXIsIHRlbXBvcmFsSWQ6IG51bWJlcik6IFtudW1iZXIsIG51bWJlcl0ge1xuICBjb25zdCBieXRlMCA9ICgodHlwZSAmIDB4M2YpIDw8IDEpIHwgKChsYXllcklkID4+IDUpICYgMSk7XG4gIGNvbnN0IGJ5dGUxID0gKChsYXllcklkICYgMHgxZikgPDwgMykgfCAodGVtcG9yYWxJZCAmIDB4MDcpO1xuICByZXR1cm4gW2J5dGUwLCBieXRlMV07XG59XG5cbi8qKiBTcGxpdCBBbm5leCBCIGJpdHN0cmVhbSBpbnRvIE5BTCB1bml0cy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzcGxpdE5hbFVuaXRzKGJpdHN0cmVhbTogQnVmZmVyKTogTmFsVW5pdFtdIHtcbiAgY29uc3QgbmFsczogTmFsVW5pdFtdID0gW107XG4gIGxldCBpID0gMDtcblxuICB3aGlsZSAoaSA8IGJpdHN0cmVhbS5sZW5ndGgpIHtcbiAgICBsZXQgc2NMZW4gPSAwO1xuICAgIGlmIChpICsgMyA8IGJpdHN0cmVhbS5sZW5ndGggJiYgYml0c3RyZWFtW2ldID09PSAwICYmIGJpdHN0cmVhbVtpICsgMV0gPT09IDAgJiYgYml0c3RyZWFtW2kgKyAyXSA9PT0gMSkge1xuICAgICAgc2NMZW4gPSAzO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICBpICsgNCA8IGJpdHN0cmVhbS5sZW5ndGggJiZcbiAgICAgIGJpdHN0cmVhbVtpXSA9PT0gMCAmJlxuICAgICAgYml0c3RyZWFtW2kgKyAxXSA9PT0gMCAmJlxuICAgICAgYml0c3RyZWFtW2kgKyAyXSA9PT0gMCAmJlxuICAgICAgYml0c3RyZWFtW2kgKyAzXSA9PT0gMVxuICAgICkge1xuICAgICAgc2NMZW4gPSA0O1xuICAgIH0gZWxzZSB7XG4gICAgICBpKys7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCBuYWxTdGFydCA9IGkgKyBzY0xlbjtcbiAgICBpZiAobmFsU3RhcnQgKyBOQUxfSEVBREVSX1NJWkUgPiBiaXRzdHJlYW0ubGVuZ3RoKSBicmVhaztcblxuICAgIGxldCBuYWxFbmQgPSBiaXRzdHJlYW0ubGVuZ3RoO1xuICAgIGZvciAobGV0IGogPSBuYWxTdGFydCArIE5BTF9IRUFERVJfU0laRTsgaiA8IGJpdHN0cmVhbS5sZW5ndGggLSAyOyBqKyspIHtcbiAgICAgIGlmIChcbiAgICAgICAgYml0c3RyZWFtW2pdID09PSAwICYmXG4gICAgICAgIGJpdHN0cmVhbVtqICsgMV0gPT09IDAgJiZcbiAgICAgICAgKGJpdHN0cmVhbVtqICsgMl0gPT09IDEgfHwgKGogKyAzIDwgYml0c3RyZWFtLmxlbmd0aCAmJiBiaXRzdHJlYW1baiArIDJdID09PSAwICYmIGJpdHN0cmVhbVtqICsgM10gPT09IDEpKVxuICAgICAgKSB7XG4gICAgICAgIG5hbEVuZCA9IGo7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHsgdHlwZSwgbGF5ZXJJZCB9ID0gcGFyc2VOYWxUeXBlKGJpdHN0cmVhbVtuYWxTdGFydF0hLCBiaXRzdHJlYW1bbmFsU3RhcnQgKyAxXSEpO1xuICAgIG5hbHMucHVzaCh7IHR5cGUsIGxheWVySWQsIGRhdGE6IGJpdHN0cmVhbS5zdWJhcnJheShuYWxTdGFydCwgbmFsRW5kKSB9KTtcbiAgICBpID0gbmFsRW5kO1xuICB9XG5cbiAgcmV0dXJuIG5hbHM7XG59XG5cbi8qKiBSZXdyaXRlIG51aF9sYXllcl9pZCBpbiBhIE5BTCB1bml0IChyZXR1cm5zIGNvcHkpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJld3JpdGVOYWxMYXllcklkKG5hbDogQnVmZmVyLCBsYXllcklkOiBudW1iZXIpOiBCdWZmZXIge1xuICBjb25zdCBvdXQgPSBCdWZmZXIuZnJvbShuYWwpO1xuICBjb25zdCB7IHR5cGUsIHRlbXBvcmFsSWQgfSA9IHBhcnNlTmFsVHlwZShvdXRbMF0hLCBvdXRbMV0hKTtcbiAgY29uc3QgW2IwLCBiMV0gPSBlbmNvZGVOYWxIZWFkZXIodHlwZSwgbGF5ZXJJZCwgdGVtcG9yYWxJZCk7XG4gIG91dFswXSA9IGIwO1xuICBvdXRbMV0gPSBiMTtcbiAgcmV0dXJuIG91dDtcbn1cblxuLyoqIFJlbW92ZSBlbXVsYXRpb24gcHJldmVudGlvbiBieXRlcyAoMDAgMDAgMDMg4oaSIDAwIDAwKSBmcm9tIFJCU1AuICovXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlRW11bGF0aW9uUHJldmVudGlvbihkYXRhOiBCdWZmZXIpOiBCdWZmZXIge1xuICBjb25zdCBvdXQ6IG51bWJlcltdID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkrKykge1xuICAgIGlmIChpICsgMiA8IGRhdGEubGVuZ3RoICYmIGRhdGFbaV0gPT09IDAgJiYgZGF0YVtpICsgMV0gPT09IDAgJiYgZGF0YVtpICsgMl0gPT09IDMpIHtcbiAgICAgIG91dC5wdXNoKDAsIDApO1xuICAgICAgaSArPSAyO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXQucHVzaChkYXRhW2ldISk7XG4gICAgfVxuICB9XG4gIHJldHVybiBCdWZmZXIuZnJvbShvdXQpO1xufVxuXG4vKiogSW5zZXJ0IGVtdWxhdGlvbiBwcmV2ZW50aW9uIGJ5dGVzICgwMCAwMCAwMykgZm9yIEFubmV4IEIgY29tcGxpYW5jZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGRFbXVsYXRpb25QcmV2ZW50aW9uKG5hbDogQnVmZmVyKTogQnVmZmVyIHtcbiAgY29uc3Qgb3V0OiBudW1iZXJbXSA9IFtdO1xuICBvdXQucHVzaChuYWxbMF0hLCBuYWxbMV0hKTtcbiAgbGV0IHplcm9zID0gMDtcbiAgZm9yIChsZXQgaSA9IDI7IGkgPCBuYWwubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoemVyb3MgPT09IDIgJiYgbmFsW2ldISA8PSAzKSB7XG4gICAgICBvdXQucHVzaCgzKTtcbiAgICAgIHplcm9zID0gMDtcbiAgICB9XG4gICAgaWYgKG5hbFtpXSA9PT0gMCkgemVyb3MrKztcbiAgICBlbHNlIHplcm9zID0gMDtcbiAgICBvdXQucHVzaChuYWxbaV0hKTtcbiAgfVxuICByZXR1cm4gQnVmZmVyLmZyb20ob3V0KTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMTMuXG5cbmltcG9ydCB7IEJpdFJlYWRlciwgQml0V3JpdGVyLCBwYWNrQml0cyB9IGZyb20gXCIuL2JpdFwiO1xuaW1wb3J0IHsgYWRkRW11bGF0aW9uUHJldmVudGlvbiwgcmVtb3ZlRW11bGF0aW9uUHJldmVudGlvbiB9IGZyb20gXCIuL25hbFwiO1xuXG5pbnRlcmZhY2UgUGFyc2VkUFRMIHtcbiAgcHRsU3RhcnQ6IG51bWJlcjtcbiAgcHRsRW5kOiBudW1iZXI7XG4gIHB0bEJpdHM6IG51bWJlcltdO1xuICBtYXhTdWJMYXllcnNNaW51czE6IG51bWJlcjtcbn1cblxuZnVuY3Rpb24gZXh0cmFjdFBUTCh2cHNEYXRhOiBCdWZmZXIpOiBQYXJzZWRQVEwgfCB1bmRlZmluZWQge1xuICBjb25zdCBiciA9IG5ldyBCaXRSZWFkZXIocmVtb3ZlRW11bGF0aW9uUHJldmVudGlvbih2cHNEYXRhKSk7XG4gIGJyLnJlYWQoMTYpOyAvLyBOQUwgaGVhZGVyXG4gIGJyLnJlYWQoNCk7IC8vIHZwc19pZFxuICBici5yZWFkKDIpOyAvLyBiYXNlX2xheWVyX2ludGVybmFsICsgYXZhaWxhYmxlXG4gIGlmIChici5yZWFkKDYpID4gMCkgcmV0dXJuIHVuZGVmaW5lZDsgLy8gYWxyZWFkeSBtdWx0aS1sYXllclxuICBjb25zdCBtYXhTdWJMYXllcnNNaW51czEgPSBici5yZWFkKDMpO1xuICBici5yZWFkKDEgKyAxNik7IC8vIHRlbXBvcmFsX25lc3RpbmcgKyByZXNlcnZlZFxuXG4gIGNvbnN0IHB0bFN0YXJ0ID0gYnIucG9zO1xuICBici5yZWFkKDk2KTsgLy8gZ2VuZXJhbCBQVEwgKHByb2ZpbGVfc3BhY2UgKyB0aWVyICsgaWRjICsgY29tcGF0ICsgY29uc3RyYWludHMgKyBsZXZlbClcbiAgaWYgKG1heFN1YkxheWVyc01pbnVzMSA+IDApIGJyLnJlYWQobWF4U3ViTGF5ZXJzTWludXMxICogMiArICg4IC0gbWF4U3ViTGF5ZXJzTWludXMxKSAqIDIpO1xuICByZXR1cm4geyBwdGxTdGFydCwgcHRsRW5kOiBici5wb3MsIHB0bEJpdHM6IGJyLmJpdHMsIG1heFN1YkxheWVyc01pbnVzMSB9O1xufVxuXG4vKiogV3JpdGUgYmFzZSBWUFMgZmllbGRzIGZvciAyLWxheWVyIGFscGhhLiAqL1xuZnVuY3Rpb24gd3JpdGVCYXNlVlBTKGJ3OiBCaXRXcml0ZXIsIHB0bDogUGFyc2VkUFRMKSB7XG4gIGJ3LncoMHg0MDAxLCAxNik7IC8vIE5BTCBoZWFkZXJcbiAgYncudygwLCA0KTsgLy8gdnBzX2lkXG4gIGJ3LmZsYWcoMSk7IC8vIGJhc2VfbGF5ZXJfaW50ZXJuYWxcbiAgYncuZmxhZygxKTsgLy8gYmFzZV9sYXllcl9hdmFpbGFibGVcbiAgYncudygxLCA2KTsgLy8gbWF4X2xheWVyc19taW51czEgPSAxXG4gIGJ3LncocHRsLm1heFN1YkxheWVyc01pbnVzMSwgMyk7XG4gIC8vIHRlbXBvcmFsX25lc3Rpbmc6IHRydWUgd2hlbiBzaW5nbGUgc3ViLWxheWVyIChhbGwgcmVmcyBsYXllciAwKVxuICBidy5mbGFnKHB0bC5tYXhTdWJMYXllcnNNaW51czEgPT09IDApO1xuICBidy53KDB4ZmZmZiwgMTYpOyAvLyByZXNlcnZlZFxuICBidy5jb3B5KHB0bC5wdGxCaXRzLCBwdGwucHRsU3RhcnQsIHB0bC5wdGxFbmQgLSBwdGwucHRsU3RhcnQpO1xuXG4gIGJ3LmZsYWcoMSk7IC8vIHN1Yl9sYXllcl9vcmRlcmluZ19pbmZvX3ByZXNlbnRcbiAgZm9yIChsZXQgaSA9IDA7IGkgPD0gcHRsLm1heFN1YkxheWVyc01pbnVzMTsgaSsrKSB7XG4gICAgYncudWUoNCk7IC8vIG1heERlY1BpY0J1ZmZlcmluZyAtIDFcbiAgICBidy51ZSgyKTsgLy8gbnVtUmVvcmRlclBpY3NcbiAgICBidy51ZSg0KTsgLy8gbWF4TGF0ZW5jeUluY3JlYXNlICsgMVxuICB9XG5cbiAgYncudygxLCA2KTsgLy8gbWF4X251aF9sYXllcl9pZCA9IDFcbiAgYncudWUoMSk7IC8vIG51bV9sYXllcl9zZXRzX21pbnVzMSA9IDFcbiAgYncuZmxhZygxKTsgLy8gbGF5ZXJfaWRfaW5jbHVkZWRbMV1bMF1cbiAgYncuZmxhZygxKTsgLy8gbGF5ZXJfaWRfaW5jbHVkZWRbMV1bMV1cbiAgYncuZmxhZygwKTsgLy8gdGltaW5nX2luZm9fcHJlc2VudFxuICBidy5mbGFnKDEpOyAvLyB2cHNfZXh0ZW5zaW9uX2ZsYWdcbiAgYncuYWxpZ24oMSk7IC8vIGV4dGVuc2lvbiBhbGlnbm1lbnQgYml0cyA9IDFcbn1cblxuLyoqIFdyaXRlIFZQUyBleHRlbnNpb24gbWF0Y2hpbmcgeDI2NSA0LjEgRU5BQkxFX0FMUEhBLiAqL1xuZnVuY3Rpb24gd3JpdGVWUFNFeHRlbnNpb24oYnc6IEJpdFdyaXRlciwgcHRsOiBQYXJzZWRQVEwsIHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKSB7XG4gIC8vIEV4dGVuc2lvbiBQVEw6IGxldmVsX2lkYyBvbmx5IChwcm9maWxlUHJlc2VudEZsYWc9MClcbiAgYncuY29weShwdGwucHRsQml0cywgcHRsLnB0bEVuZCAtIDgsIDgpO1xuICBpZiAocHRsLm1heFN1YkxheWVyc01pbnVzMSA+IDApIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHB0bC5tYXhTdWJMYXllcnNNaW51czE7IGkrKykgYncudygwLCAyKTtcbiAgICBmb3IgKGxldCBpID0gcHRsLm1heFN1YkxheWVyc01pbnVzMTsgaSA8IDg7IGkrKykgYncudygwLCAyKTtcbiAgfVxuXG4gIGJ3LmZsYWcoMCk7IC8vIHNwbGl0dGluZ19mbGFnXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgMTY7IGkrKykgYncuZmxhZyhpID09PSAyIHx8IGkgPT09IDMpOyAvLyBzY2FsYWJpbGl0eTogc3BhdGlhbCArIGF1eFxuICBidy53KDAsIDMpOyAvLyBkaW1lbnNpb25faWRfbGVuWzBdID0gMVxuICBidy53KDAsIDMpOyAvLyBkaW1lbnNpb25faWRfbGVuWzFdID0gMVxuICBidy5mbGFnKDEpOyAvLyBudWhfbGF5ZXJfaWRfcHJlc2VudFxuICBidy53KDEsIDYpOyAvLyBsYXllcl9pZF9pbl9udWhbMV0gPSAxXG4gIGJ3LncoMSwgMSk7IC8vIGRpbWVuc2lvbl9pZFsxXVswXSA9IDFcbiAgYncudygxLCAxKTsgLy8gZGltZW5zaW9uX2lkWzFdWzFdID0gQVVYX0FMUEhBXG4gIGJ3LncoMCwgNCk7IC8vIHZpZXdfaWRfbGVuID0gMFxuXG4gIGJ3LmZsYWcoMCk7IC8vIGRpcmVjdF9kZXBlbmRlbmN5X2ZsYWdbMV1bMF1cbiAgYncudWUoMCk7IC8vIG51bV9hZGRfbGF5ZXJfc2V0c1xuICBidy5mbGFnKDApOyAvLyBzdWJfbGF5ZXJzX21heF9taW51czFfcHJlc2VudFxuICBidy5mbGFnKDApOyAvLyBtYXhfdGlkX3JlZl9wcmVzZW50XG4gIGJ3LmZsYWcoMCk7IC8vIGRlZmF1bHRfcmVmX2xheWVyc19hY3RpdmVcblxuICAvLyBGRm1wZWcgbG9vcHMgZnJvbSBpbmRleCAyIHRvIG5iX3B0bC0xLCBzbyBucHRsX20xPTIg4oaSIDEgZW50cnkgYXQgaW5kZXggMlxuICBidy51ZSgyKTsgLy8gdnBzX251bV9wcm9maWxlX3RpZXJfbGV2ZWxfbWludXMxXG4gIGJ3LmZsYWcoMSk7IC8vIHByb2ZpbGVfcHJlc2VudF9mbGFnWzJdXG4gIGJ3LmNvcHkocHRsLnB0bEJpdHMsIHB0bC5wdGxTdGFydCwgcHRsLnB0bEVuZCAtIHB0bC5wdGxTdGFydCk7XG5cbiAgYncudWUoMCk7IC8vIG51bV9hZGRfb2xzc1xuICBidy53KDAsIDIpOyAvLyBkZWZhdWx0X291dHB1dF9sYXllcl9pZGNcbiAgYncudygxLCAyKTsgLy8gcHRsX2lkeFsxXVswXSA9IDEgKGNlaWxfbG9nMigzKSA9IDIgYml0cylcbiAgYncudygyLCAyKTsgLy8gcHRsX2lkeFsxXVsxXSA9IDJcblxuICBidy51ZSgwKTsgLy8gdnBzX251bV9yZXBfZm9ybWF0c19taW51czFcbiAgYncudyh3aWR0aCwgMTYpO1xuICBidy53KGhlaWdodCwgMTYpO1xuICBidy5mbGFnKDEpOyAvLyBjaHJvbWFfYW5kX2JpdF9kZXB0aF92cHNfcHJlc2VudFxuICBidy53KDEsIDIpOyAvLyBjaHJvbWFfZm9ybWF0X2lkYyA9IDQ6MjowXG4gIGJ3LncoMCwgNCk7IC8vIGJpdF9kZXB0aF9sdW1hX21pbnVzOFxuICBidy53KDAsIDQpOyAvLyBiaXRfZGVwdGhfY2hyb21hX21pbnVzOFxuICBidy5mbGFnKDApOyAvLyBjb25mb3JtYW5jZV93aW5kb3dfdnBzX2ZsYWdcblxuICBidy5mbGFnKDEpOyAvLyBtYXhfb25lX2FjdGl2ZV9yZWZfbGF5ZXJcbiAgYncuZmxhZygwKTsgLy8gcG9jX2xzYl9hbGlnbmVkXG4gIGJ3LmZsYWcoMSk7IC8vIHBvY19sc2Jfbm90X3ByZXNlbnRcblxuICAvLyBEUEIgZm9yIE9MUyAxICgyIGxheWVycywgMSBzdWItbGF5ZXIpXG4gIGJ3LmZsYWcoMCk7IC8vIHN1Yl9sYXllcl9mbGFnX2luZm9fcHJlc2VudFxuICBidy51ZSgwKTsgLy8gbWF4X2RlY19waWNfYnVmZmVyaW5nIChsYXllciAwKVxuICBidy51ZSgwKTsgLy8gbWF4X2RlY19waWNfYnVmZmVyaW5nIChsYXllciAxKVxuICBidy51ZSgwKTsgLy8gbWF4X251bV9yZW9yZGVyX3BpY3NcbiAgYncudWUoMCk7IC8vIG1heF9sYXRlbmN5X2luY3JlYXNlXG5cbiAgYncudWUoMCk7IC8vIGRpcmVjdF9kZXBfdHlwZV9sZW5fbWludXMyXG4gIGJ3LmZsYWcoMCk7IC8vIGRlZmF1bHRfZGlyZWN0X2RlcGVuZGVuY3lfZmxhZ1xuICBidy51ZSgwKTsgLy8gbm9uX3Z1aV9leHRlbnNpb25fbGVuZ3RoXG4gIGJ3LmZsYWcoMCk7IC8vIHZwc192dWlfcHJlc2VudFxuICBidy5mbGFnKDApOyAvLyB2cHNfZXh0ZW5zaW9uMl9mbGFnXG59XG5cbi8qKlxuICogQnVpbGQgYSBjb21wbGV0ZSBhbHBoYSBWUFMgZnJvbSBzY3JhdGNoLCB1c2luZyB0aGUgb3JpZ2luYWwgTlZFTkMgVlBTXG4gKiBvbmx5IGFzIGEgc291cmNlIGZvciB0aGUgUFRMIChwcm9maWxlL3RpZXIvbGV2ZWwpIGJ5dGVzLlxuICogTWF0Y2hlcyB4MjY1IDQuMSBFTkFCTEVfQUxQSEEgVlBTIHN0cnVjdHVyZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkQWxwaGFWUFModnBzRGF0YTogQnVmZmVyLCB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcik6IEJ1ZmZlciB7XG4gIGNvbnN0IHB0bCA9IGV4dHJhY3RQVEwodnBzRGF0YSk7XG4gIGlmICghcHRsKSByZXR1cm4gdnBzRGF0YTtcblxuICBjb25zdCBidyA9IG5ldyBCaXRXcml0ZXIoKTtcbiAgd3JpdGVCYXNlVlBTKGJ3LCBwdGwpO1xuICB3cml0ZVZQU0V4dGVuc2lvbihidywgcHRsLCB3aWR0aCwgaGVpZ2h0KTtcblxuICBidy5iaXRzLnB1c2goMSk7IC8vIFJCU1Agc3RvcCBiaXRcbiAgYncuYWxpZ24oMCk7XG4gIHJldHVybiBhZGRFbXVsYXRpb25QcmV2ZW50aW9uKHBhY2tCaXRzKGJ3LmJpdHMpKTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMTIuXG5cbmltcG9ydCB7IHBhY2tCaXRzIH0gZnJvbSBcIi4vYml0XCI7XG5pbXBvcnQgeyBBTk5FWF9CX1NUQVJUX0NPREUsIGVuY29kZU5hbEhlYWRlciwgdHlwZSBOYWxVbml0LCByZXdyaXRlTmFsTGF5ZXJJZCwgc3BsaXROYWxVbml0cyB9IGZyb20gXCIuL25hbFwiO1xuaW1wb3J0IHsgYnVpbGRBbHBoYVZQUyB9IGZyb20gXCIuL3Zwc1wiO1xuXG5jb25zdCBOQUxfVU5JVF9QUkVGSVhfU0VJID0gMzk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVW5pZmllZEV4dHJhZGF0YU9wdGlvbnMge1xuICBiYXNlRXh0cmFkYXRhOiBCdWZmZXI7XG4gIGFscGhhRXh0cmFkYXRhOiBCdWZmZXI7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRVbmlmaWVkRXh0cmFkYXRhKG9wdHM6IFVuaWZpZWRFeHRyYWRhdGFPcHRpb25zKTogQnVmZmVyIHtcbiAgY29uc3QgeyBiYXNlRXh0cmFkYXRhLCBhbHBoYUV4dHJhZGF0YSB9ID0gb3B0cztcbiAgY29uc3QgYmFzZU5hbHMgPSBzcGxpdE5hbFVuaXRzKGJhc2VFeHRyYWRhdGEpO1xuICBjb25zdCBhbHBoYU5hbHMgPSBzcGxpdE5hbFVuaXRzKGFscGhhRXh0cmFkYXRhKTtcblxuICBjb25zdCBhbHBoYUJ5VHlwZSA9IG5ldyBNYXA8bnVtYmVyLCBOYWxVbml0W10+KCk7XG4gIGZvciAoY29uc3QgbmFsIG9mIGFscGhhTmFscykge1xuICAgIGlmIChuYWwudHlwZSA9PT0gMzIpIGNvbnRpbnVlO1xuICAgIGNvbnN0IGFyciA9IGFscGhhQnlUeXBlLmdldChuYWwudHlwZSkgPz8gW107XG4gICAgYXJyLnB1c2gobmFsKTtcbiAgICBhbHBoYUJ5VHlwZS5zZXQobmFsLnR5cGUsIGFycik7XG4gIH1cblxuICBjb25zdCBjaHVua3M6IEJ1ZmZlcltdID0gW107XG4gIGNvbnN0IGVtaXR0ZWQgPSBuZXcgU2V0PG51bWJlcj4oKTtcbiAgZm9yIChjb25zdCBuYWwgb2YgYmFzZU5hbHMpIHtcbiAgICBjb25zdCBkYXRhID0gbmFsLnR5cGUgPT09IDMyID8gYnVpbGRBbHBoYVZQUyhuYWwuZGF0YSwgb3B0cy53aWR0aCwgb3B0cy5oZWlnaHQpIDogbmFsLmRhdGE7XG4gICAgY2h1bmtzLnB1c2goQU5ORVhfQl9TVEFSVF9DT0RFLCBkYXRhKTtcbiAgICBpZiAoIWVtaXR0ZWQuaGFzKG5hbC50eXBlKSkge1xuICAgICAgZW1pdHRlZC5hZGQobmFsLnR5cGUpO1xuICAgICAgZm9yIChjb25zdCBhbHBoYU5hbCBvZiBhbHBoYUJ5VHlwZS5nZXQobmFsLnR5cGUpID8/IFtdKSB7XG4gICAgICAgIGNodW5rcy5wdXNoKEFOTkVYX0JfU1RBUlRfQ09ERSwgcmV3cml0ZU5hbExheWVySWQoYWxwaGFOYWwuZGF0YSwgMSkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNodW5rcy5wdXNoKGJ1aWxkQWxwaGFDaGFubmVsSW5mb1NFSSgpKTtcbiAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoY2h1bmtzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkQWxwaGFDaGFubmVsSW5mb1NFSSgpOiBCdWZmZXIge1xuICBjb25zdCBwYXlsb2FkVHlwZSA9IDE2NTtcbiAgY29uc3QgcGF5bG9hZFNpemUgPSA0O1xuICBjb25zdCBbaDAsIGgxXSA9IGVuY29kZU5hbEhlYWRlcihOQUxfVU5JVF9QUkVGSVhfU0VJLCAwLCAxKTtcblxuICBjb25zdCBiaXRzOiBudW1iZXJbXSA9IFtdO1xuICBjb25zdCB3cml0ZUJpdHMgPSAodmFsOiBudW1iZXIsIG46IG51bWJlcikgPT4ge1xuICAgIGZvciAobGV0IGkgPSBuIC0gMTsgaSA+PSAwOyBpLS0pIGJpdHMucHVzaCgodmFsID4+IGkpICYgMSk7XG4gIH07XG5cbiAgd3JpdGVCaXRzKDAsIDEpOyAvLyBhbHBoYV9jaGFubmVsX2NhbmNlbF9mbGFnXG4gIHdyaXRlQml0cygwLCAzKTsgLy8gYWxwaGFfY2hhbm5lbF91c2VfaWRjXG4gIHdyaXRlQml0cygwLCAzKTsgLy8gYWxwaGFfY2hhbm5lbF9iaXRfZGVwdGhfbWludXM4XG4gIHdyaXRlQml0cygwLCA5KTsgLy8gYWxwaGFfdHJhbnNwYXJlbnRfdmFsdWVcbiAgd3JpdGVCaXRzKDI1NSwgOSk7IC8vIGFscGhhX29wYXF1ZV92YWx1ZVxuICB3cml0ZUJpdHMoMCwgMSk7IC8vIGFscGhhX2NoYW5uZWxfaW5jcl9mbGFnXG4gIHdyaXRlQml0cygwLCAxKTsgLy8gYWxwaGFfY2hhbm5lbF9jbGlwX2ZsYWdcbiAgd3JpdGVCaXRzKDEsIDEpOyAvLyBieXRlIGFsaWdubWVudFxuICB3aGlsZSAoYml0cy5sZW5ndGggJSA4ICE9PSAwKSB3cml0ZUJpdHMoMCwgMSk7XG5cbiAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoW1xuICAgIEFOTkVYX0JfU1RBUlRfQ09ERSxcbiAgICBCdWZmZXIuZnJvbShbaDAsIGgxXSksXG4gICAgQnVmZmVyLmZyb20oW3BheWxvYWRUeXBlLCBwYXlsb2FkU2l6ZV0pLFxuICAgIHBhY2tCaXRzKGJpdHMpLFxuICAgIEJ1ZmZlci5mcm9tKFsweDgwXSksXG4gIF0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW50ZXJsZWF2ZUFjY2Vzc1VuaXRzKGJhc2VOYWxzOiBOYWxVbml0W10sIGFscGhhTmFsczogTmFsVW5pdFtdKTogQnVmZmVyIHtcbiAgY29uc3QgY2h1bmtzOiBCdWZmZXJbXSA9IFtdO1xuICBmb3IgKGNvbnN0IG5hbCBvZiBiYXNlTmFscykge1xuICAgIGNodW5rcy5wdXNoKEFOTkVYX0JfU1RBUlRfQ09ERSwgbmFsLmRhdGEpO1xuICB9XG4gIGZvciAoY29uc3QgbmFsIG9mIGFscGhhTmFscykge1xuICAgIGlmIChuYWwudHlwZSA8IDMyKSB7XG4gICAgICBjaHVua3MucHVzaChBTk5FWF9CX1NUQVJUX0NPREUsIHJld3JpdGVOYWxMYXllcklkKG5hbC5kYXRhLCAxKSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBCdWZmZXIuY29uY2F0KGNodW5rcyk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzEyLlxuXG5pbXBvcnQgeyBDb2RlYywgdHlwZSBDb2RlY0NvbnRleHQsIEZGbXBlZ0Vycm9yLCBGcmFtZSwgdHlwZSBQYWNrZXQsIHR5cGUgU3RyZWFtIH0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB7IEFWX1BJWF9GTVRfQkdSQSwgQVZfUElYX0ZNVF9ZVVY0MjBQLCBGRl9FTkNPREVSX0hFVkNfTlZFTkMgfSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcbmltcG9ydCB7IGJ1aWxkQWxwaGFDaGFubmVsSW5mb1NFSSwgYnVpbGRVbmlmaWVkRXh0cmFkYXRhLCBpbnRlcmxlYXZlQWNjZXNzVW5pdHMgfSBmcm9tIFwiLi9hbHBoYVwiO1xuaW1wb3J0IHR5cGUgeyBGb3JtYXRNdXhlciB9IGZyb20gXCIuL211eGVyXCI7XG5pbXBvcnQgeyBzcGxpdE5hbFVuaXRzIH0gZnJvbSBcIi4vbmFsXCI7XG5pbXBvcnQgeyBtYWtlUGFja2V0LCBvcGVuVmlkZW9DdHggfSBmcm9tIFwiLi9taXNjXCI7XG5pbXBvcnQgdHlwZSB7IEh3VmlkZW9FbmNvZGVyT3B0aW9ucyB9IGZyb20gXCIuL3ZpZGVvdG9vbGJveFwiO1xuXG5pbnRlcmZhY2UgTnZlbmNTdGF0ZSB7XG4gIGJhc2VDdHg6IENvZGVjQ29udGV4dDtcbiAgYWxwaGFDdHg6IENvZGVjQ29udGV4dDtcbiAgYmFzZVBrdDogUGFja2V0O1xuICBhbHBoYVBrdDogUGFja2V0O1xuICBzdHJlYW06IFN0cmVhbTtcbn1cblxuZXhwb3J0IGNsYXNzIE52ZW5jRHVhbExheWVyRW5jb2RlciBpbXBsZW1lbnRzIERpc3Bvc2FibGUge1xuICBwcml2YXRlIF9zOiBOdmVuY1N0YXRlO1xuICBwcml2YXRlIF9zZWlCdWZmZXI6IEJ1ZmZlcjtcbiAgcHJpdmF0ZSBfcHRzID0gMG47XG4gIHByaXZhdGUgX3NlaUluamVjdGVkID0gZmFsc2U7XG4gIHByaXZhdGUgX2FscGhhQnVmPzogQnVmZmVyO1xuICBwcml2YXRlIF9hbHBoYUZyYW1lPzogRnJhbWU7XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihzOiBOdmVuY1N0YXRlKSB7XG4gICAgdGhpcy5fcyA9IHM7XG4gICAgdGhpcy5fc2VpQnVmZmVyID0gYnVpbGRBbHBoYUNoYW5uZWxJbmZvU0VJKCk7XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgY3JlYXRlKG9wdHM6IEh3VmlkZW9FbmNvZGVyT3B0aW9ucyk6IFByb21pc2U8TnZlbmNEdWFsTGF5ZXJFbmNvZGVyPiB7XG4gICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0LCBmcHMsIGJpdHJhdGUsIG11eGVyIH0gPSBvcHRzO1xuXG4gICAgY29uc3QgY29kZWMgPSBDb2RlYy5maW5kRW5jb2RlckJ5TmFtZShGRl9FTkNPREVSX0hFVkNfTlZFTkMpO1xuICAgIGlmICghY29kZWMpIHRocm93IG5ldyBFcnJvcihcImhldmNfbnZlbmMgZW5jb2RlciBub3QgZm91bmRcIik7XG5cbiAgICBjb25zdCBudmVuY09wdHMgPSB7IHByZXNldDogXCJwNFwiLCBiZjogXCIwXCIgfTtcbiAgICBjb25zdCBjb21tb24gPSB7IGNvZGVjLCB3aWR0aCwgaGVpZ2h0LCBmcHMsIGJpdHJhdGUsIG9wdGlvbnM6IG52ZW5jT3B0cyB9O1xuICAgIC8vIEJHUkEgZGlyZWN0IOKAlCBOVkVOQyBjb252ZXJ0cyBpbnRlcm5hbGx5LCBubyBTV1MgbmVlZGVkXG4gICAgY29uc3QgYmFzZUN0eCA9IGF3YWl0IG9wZW5WaWRlb0N0eCh7IC4uLmNvbW1vbiwgcGl4ZWxGb3JtYXQ6IEFWX1BJWF9GTVRfQkdSQSB9LCBcIm52ZW5jLmJhc2Uub3BlbjJcIik7XG4gICAgLy8gQWxwaGEgYXMgWVVWNDIwUCDigJQgbWF0Y2hpbmcgYml0cmF0ZS9HT1AgZm9yIGNvbXBhdGlibGUgU1BTIGFjcm9zcyBsYXllcnNcbiAgICBjb25zdCBhbHBoYUN0eCA9IGF3YWl0IG9wZW5WaWRlb0N0eCh7IC4uLmNvbW1vbiwgcGl4ZWxGb3JtYXQ6IEFWX1BJWF9GTVRfWVVWNDIwUCB9LCBcIm52ZW5jLmFscGhhLm9wZW4yXCIpO1xuXG4gICAgY29uc3QgYmFzZVBrdCA9IG1ha2VQYWNrZXQoKTtcbiAgICBjb25zdCBhbHBoYVBrdCA9IG1ha2VQYWNrZXQoKTtcblxuICAgIGNvbnN0IHN0cmVhbSA9IG11eGVyLmFkZFN0cmVhbShiYXNlQ3R4LCBcImh2YzFcIik7XG5cbiAgICBjb25zdCBiYXNlRXh0cmEgPSBiYXNlQ3R4LmV4dHJhRGF0YTtcbiAgICBjb25zdCBhbHBoYUV4dHJhID0gYWxwaGFDdHguZXh0cmFEYXRhO1xuICAgIGlmIChiYXNlRXh0cmEgJiYgYWxwaGFFeHRyYSkge1xuICAgICAgc3RyZWFtLmNvZGVjcGFyLmV4dHJhZGF0YSA9IGJ1aWxkVW5pZmllZEV4dHJhZGF0YSh7XG4gICAgICAgIGJhc2VFeHRyYWRhdGE6IGJhc2VFeHRyYSxcbiAgICAgICAgYWxwaGFFeHRyYWRhdGE6IGFscGhhRXh0cmEsXG4gICAgICAgIHdpZHRoLFxuICAgICAgICBoZWlnaHQsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IE52ZW5jRHVhbExheWVyRW5jb2Rlcih7IGJhc2VDdHgsIGFscGhhQ3R4LCBiYXNlUGt0LCBhbHBoYVBrdCwgc3RyZWFtIH0pO1xuICB9XG5cbiAgYXN5bmMgZW5jb2RlKGJncmFGcmFtZTogRnJhbWUsIG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgYmFzZUN0eCwgYWxwaGFDdHggfSA9IHRoaXMuX3M7XG4gICAgY29uc3QgcHRzID0gdGhpcy5fcHRzKys7XG5cbiAgICBiZ3JhRnJhbWUucHRzID0gcHRzO1xuICAgIGJncmFGcmFtZS5kdXJhdGlvbiA9IDFuO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCBiYXNlQ3R4LnNlbmRGcmFtZShiZ3JhRnJhbWUpLCBcImJhc2Uuc2VuZEZyYW1lXCIpO1xuXG4gICAgLy8gQWxwaGE6IGV4dHJhY3QgYWxwaGEgY2hhbm5lbCDihpIgWVVWNDIwUFxuICAgIGNvbnN0IHNyYyA9IGJncmFGcmFtZS5kYXRhPy5bMF07XG4gICAgY29uc3Qgc3JjTHMgPSBiZ3JhRnJhbWUubGluZXNpemU/LlswXTtcbiAgICBpZiAoIXNyYyB8fCAhc3JjTHMpIHRocm93IG5ldyBFcnJvcihcImVuY29kZTogbWlzc2luZyBCR1JBIGRhdGFcIik7XG4gICAgY29uc3QgdyA9IGJncmFGcmFtZS53aWR0aDtcbiAgICBjb25zdCBoID0gYmdyYUZyYW1lLmhlaWdodDtcbiAgICBjb25zdCB5U2l6ZSA9IHcgKiBoO1xuICAgIGNvbnN0IHV2U2l6ZSA9ICh3ID4+IDEpICogKGggPj4gMSk7XG4gICAgaWYgKCF0aGlzLl9hbHBoYUJ1ZikgdGhpcy5fYWxwaGFCdWYgPSBCdWZmZXIuYWxsb2MoeVNpemUgKyB1dlNpemUgKiAyKTtcbiAgICBjb25zdCBidWYgPSB0aGlzLl9hbHBoYUJ1ZjtcbiAgICBmb3IgKGxldCB5ID0gMDsgeSA8IGg7IHkrKykge1xuICAgICAgZm9yIChsZXQgeCA9IDA7IHggPCB3OyB4KyspIHtcbiAgICAgICAgYnVmW3kgKiB3ICsgeF0gPSBzcmNbeSAqIHNyY0xzICsgeCAqIDQgKyAzXSE7XG4gICAgICB9XG4gICAgfVxuICAgIGJ1Zi5maWxsKDEyOCwgeVNpemUsIHlTaXplICsgdXZTaXplICogMik7XG5cbiAgICB0aGlzLl9hbHBoYUZyYW1lPy5mcmVlKCk7XG4gICAgdGhpcy5fYWxwaGFGcmFtZSA9IEZyYW1lLmZyb21WaWRlb0J1ZmZlcihidWYsIHsgZm9ybWF0OiBBVl9QSVhfRk1UX1lVVjQyMFAsIHdpZHRoOiB3LCBoZWlnaHQ6IGggfSk7XG4gICAgdGhpcy5fYWxwaGFGcmFtZS5wdHMgPSBwdHM7XG4gICAgdGhpcy5fYWxwaGFGcmFtZS5kdXJhdGlvbiA9IDFuO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCBhbHBoYUN0eC5zZW5kRnJhbWUodGhpcy5fYWxwaGFGcmFtZSksIFwiYWxwaGEuc2VuZEZyYW1lXCIpO1xuXG4gICAgYXdhaXQgdGhpcy5kcmFpbkludGVybGVhdmVkKG11eGVyKTtcbiAgfVxuXG4gIGFzeW5jIGZsdXNoKG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuX3MuYmFzZUN0eC5zZW5kRnJhbWUobnVsbCk7XG4gICAgYXdhaXQgdGhpcy5fcy5hbHBoYUN0eC5zZW5kRnJhbWUobnVsbCk7XG4gICAgYXdhaXQgdGhpcy5kcmFpbkludGVybGVhdmVkKG11eGVyKTtcbiAgfVxuXG4gIFtTeW1ib2wuZGlzcG9zZV0oKTogdm9pZCB7XG4gICAgY29uc3QgeyBiYXNlUGt0LCBhbHBoYVBrdCwgYmFzZUN0eCwgYWxwaGFDdHggfSA9IHRoaXMuX3M7XG4gICAgYmFzZVBrdC5mcmVlKCk7XG4gICAgYWxwaGFQa3QuZnJlZSgpO1xuICAgIHRoaXMuX2FscGhhRnJhbWU/LmZyZWUoKTtcbiAgICBiYXNlQ3R4LmZyZWVDb250ZXh0KCk7XG4gICAgYWxwaGFDdHguZnJlZUNvbnRleHQoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZHJhaW5JbnRlcmxlYXZlZChtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IGJhc2VDdHgsIGFscGhhQ3R4LCBiYXNlUGt0LCBhbHBoYVBrdCwgc3RyZWFtIH0gPSB0aGlzLl9zO1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBjb25zdCBiYXNlUiA9IGF3YWl0IGJhc2VDdHgucmVjZWl2ZVBhY2tldChiYXNlUGt0KTtcbiAgICAgIGNvbnN0IGFscGhhUiA9IGF3YWl0IGFscGhhQ3R4LnJlY2VpdmVQYWNrZXQoYWxwaGFQa3QpO1xuXG4gICAgICBjb25zdCBiYXNlUmVhZHkgPSBiYXNlUiA+PSAwO1xuICAgICAgY29uc3QgYWxwaGFSZWFkeSA9IGFscGhhUiA+PSAwO1xuICAgICAgaWYgKCFiYXNlUmVhZHkgJiYgIWFscGhhUmVhZHkpIGJyZWFrO1xuXG4gICAgICAvLyBCb3RoIG11c3QgcHJvZHVjZSBwYWNrZXRzIHRvZ2V0aGVyIChiZj0wIGVuc3VyZXMgdGhpcylcbiAgICAgIGlmIChiYXNlUmVhZHkgIT09IGFscGhhUmVhZHkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBOVkVOQyBkZXN5bmM6IGJhc2U9JHtiYXNlUmVhZHl9LCBhbHBoYT0ke2FscGhhUmVhZHl9YCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGJhc2VOYWxzID0gc3BsaXROYWxVbml0cyhiYXNlUGt0LmRhdGEhKTtcbiAgICAgIGNvbnN0IGFscGhhTmFscyA9IHNwbGl0TmFsVW5pdHMoYWxwaGFQa3QuZGF0YSEpO1xuXG4gICAgICBjb25zdCBjaHVua3M6IEJ1ZmZlcltdID0gW107XG4gICAgICBpZiAoIXRoaXMuX3NlaUluamVjdGVkKSB7XG4gICAgICAgIGNodW5rcy5wdXNoKHRoaXMuX3NlaUJ1ZmZlcik7XG4gICAgICAgIHRoaXMuX3NlaUluamVjdGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGNodW5rcy5wdXNoKGludGVybGVhdmVBY2Nlc3NVbml0cyhiYXNlTmFscywgYWxwaGFOYWxzKSk7XG5cbiAgICAgIC8vIFNhdmUgdGltZXN0YW1wcyBiZWZvcmUgZGF0YSByZXBsYWNlbWVudCAoc2V0dGVyIG1heSByZXNldCB0aGVtKVxuICAgICAgY29uc3QgcHRzID0gYmFzZVBrdC5wdHM7XG4gICAgICBjb25zdCBkdHMgPSBiYXNlUGt0LmR0cztcbiAgICAgIGNvbnN0IGR1cmF0aW9uID0gYmFzZVBrdC5kdXJhdGlvbjtcbiAgICAgIGJhc2VQa3QuZGF0YSA9IEJ1ZmZlci5jb25jYXQoY2h1bmtzKTtcbiAgICAgIGJhc2VQa3QucHRzID0gcHRzO1xuICAgICAgYmFzZVBrdC5kdHMgPSBkdHM7XG4gICAgICBiYXNlUGt0LmR1cmF0aW9uID0gZHVyYXRpb24gPT09IDBuID8gMW4gOiBkdXJhdGlvbjtcbiAgICAgIGJhc2VQa3Quc3RyZWFtSW5kZXggPSBzdHJlYW0uaW5kZXg7XG4gICAgICBiYXNlUGt0LnJlc2NhbGVUcyhiYXNlQ3R4LnRpbWVCYXNlLCBzdHJlYW0udGltZUJhc2UpO1xuICAgICAgYXdhaXQgbXV4ZXIud3JpdGVQYWNrZXQoYmFzZVBrdCk7XG5cbiAgICAgIGJhc2VQa3QudW5yZWYoKTtcbiAgICAgIGFscGhhUGt0LnVucmVmKCk7XG4gICAgfVxuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAzLzIxLlxuXG5pbXBvcnQgeyBDb2RlYywgdHlwZSBDb2RlY0NvbnRleHQsIEZGbXBlZ0Vycm9yLCBGcmFtZSwgdHlwZSBQYWNrZXQsIHR5cGUgU3RyZWFtIH0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB7IHR5cGUgQVZQaXhlbEZvcm1hdCwgdHlwZSBGRlZpZGVvRW5jb2RlciB9IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgZHJhaW5QYWNrZXRzLCBtYWtlUGFja2V0LCBvcGVuVmlkZW9DdHggfSBmcm9tIFwiLi9taXNjXCI7XG5pbXBvcnQgdHlwZSB7IEZvcm1hdE11eGVyIH0gZnJvbSBcIi4vbXV4ZXJcIjtcblxuZXhwb3J0IGludGVyZmFjZSBWaWRlb0VuY29kZXJPcHRpb25zIHtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIGZwczogbnVtYmVyO1xuICBjb2RlY05hbWU6IEZGVmlkZW9FbmNvZGVyO1xuICBjb2RlY1RhZz86IHN0cmluZztcbiAgY29kZWNPcHRzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICBiaXRyYXRlOiBudW1iZXI7XG4gIHBpeGVsRm9ybWF0OiBBVlBpeGVsRm9ybWF0O1xuICBtdXhlcjogRm9ybWF0TXV4ZXI7XG59XG5cbmV4cG9ydCBjbGFzcyBWaWRlb0VuY29kZXIgaW1wbGVtZW50cyBEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfY3R4OiBDb2RlY0NvbnRleHQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3BrdDogUGFja2V0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdHJlYW06IFN0cmVhbTtcbiAgcHJpdmF0ZSBfcHRzID0gMG47XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihjdHg6IENvZGVjQ29udGV4dCwgcGt0OiBQYWNrZXQsIHN0cmVhbTogU3RyZWFtKSB7XG4gICAgdGhpcy5fY3R4ID0gY3R4O1xuICAgIHRoaXMuX3BrdCA9IHBrdDtcbiAgICB0aGlzLl9zdHJlYW0gPSBzdHJlYW07XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgY3JlYXRlKG9wdHM6IFZpZGVvRW5jb2Rlck9wdGlvbnMpOiBQcm9taXNlPFZpZGVvRW5jb2Rlcj4ge1xuICAgIGNvbnN0IHsgY29kZWNOYW1lLCBjb2RlY1RhZywgY29kZWNPcHRzLCBtdXhlciwgLi4ucmVzdCB9ID0gb3B0cztcblxuICAgIGNvbnN0IGNvZGVjID0gQ29kZWMuZmluZEVuY29kZXJCeU5hbWUoY29kZWNOYW1lKTtcbiAgICBpZiAoIWNvZGVjKSB0aHJvdyBuZXcgRXJyb3IoYFZpZGVvIGVuY29kZXIgbm90IGZvdW5kOiAke2NvZGVjTmFtZX1gKTtcblxuICAgIGNvbnN0IGN0eCA9IGF3YWl0IG9wZW5WaWRlb0N0eCh7IGNvZGVjLCAuLi5yZXN0LCBjb2RlY1RhZywgb3B0aW9uczogY29kZWNPcHRzIH0sIFwidmlkZW9DdHgub3BlbjJcIik7XG4gICAgY29uc3Qgc3RyZWFtID0gbXV4ZXIuYWRkU3RyZWFtKGN0eCwgY29kZWNUYWcpO1xuICAgIHJldHVybiBuZXcgVmlkZW9FbmNvZGVyKGN0eCwgbWFrZVBhY2tldCgpLCBzdHJlYW0pO1xuICB9XG5cbiAgYXN5bmMgZW5jb2RlKGZyYW1lOiBGcmFtZSwgbXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgZnJhbWUucHRzID0gdGhpcy5fcHRzKys7XG4gICAgZnJhbWUuZHVyYXRpb24gPSAxbjtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgdGhpcy5fY3R4LnNlbmRGcmFtZShmcmFtZSksIFwidmlkZW9DdHguc2VuZEZyYW1lXCIpO1xuICAgIGF3YWl0IHRoaXMuZHJhaW4obXV4ZXIpO1xuICB9XG5cbiAgYXN5bmMgZmx1c2gobXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5fY3R4LnNlbmRGcmFtZShudWxsKTtcbiAgICBhd2FpdCB0aGlzLmRyYWluKG11eGVyKTtcbiAgfVxuXG4gIFtTeW1ib2wuZGlzcG9zZV0oKTogdm9pZCB7XG4gICAgdGhpcy5fcGt0LmZyZWUoKTtcbiAgICB0aGlzLl9jdHguZnJlZUNvbnRleHQoKTtcbiAgfVxuXG4gIHByaXZhdGUgZHJhaW4obXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIGRyYWluUGFja2V0cyh0aGlzLl9jdHgsIHRoaXMuX3BrdCwgdGhpcy5fc3RyZWFtLCBtdXhlcik7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMTIuXG5cbmltcG9ydCB7IHR5cGUgQ29kZWNDb250ZXh0LCBGRm1wZWdFcnJvciwgRnJhbWUsIHR5cGUgUGFja2V0LCB0eXBlIFN0cmVhbSB9IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQgdHlwZSB7IEhhcmR3YXJlQ29udGV4dCB9IGZyb20gXCJub2RlLWF2L2FwaVwiO1xuaW1wb3J0IHsgQVZfUElYX0ZNVF9CR1JBLCBBVkNPTF9SQU5HRV9KUEVHIH0gZnJvbSBcIm5vZGUtYXYvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBkcmFpblBhY2tldHMsIG1ha2VQYWNrZXQsIG9wZW5WaWRlb0N0eCB9IGZyb20gXCIuL21pc2NcIjtcbmltcG9ydCB0eXBlIHsgRm9ybWF0TXV4ZXIgfSBmcm9tIFwiLi9tdXhlclwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEh3VmlkZW9FbmNvZGVyT3B0aW9ucyB7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICBmcHM6IG51bWJlcjtcbiAgaHc6IEhhcmR3YXJlQ29udGV4dDtcbiAgYml0cmF0ZTogbnVtYmVyO1xuICBtdXhlcjogRm9ybWF0TXV4ZXI7XG59XG5cbmV4cG9ydCBjbGFzcyBWaWRlb1Rvb2xib3hFbmNvZGVyIGltcGxlbWVudHMgRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgX2N0eDogQ29kZWNDb250ZXh0O1xuICBwcml2YXRlIF9wa3Q6IFBhY2tldDtcbiAgcHJpdmF0ZSBfc3RyZWFtOiBTdHJlYW07XG4gIHByaXZhdGUgX3B0cyA9IDBuO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoY3R4OiBDb2RlY0NvbnRleHQsIHBrdDogUGFja2V0LCBzdHJlYW06IFN0cmVhbSkge1xuICAgIHRoaXMuX2N0eCA9IGN0eDtcbiAgICB0aGlzLl9wa3QgPSBwa3Q7XG4gICAgdGhpcy5fc3RyZWFtID0gc3RyZWFtO1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIGNyZWF0ZShvcHRzOiBId1ZpZGVvRW5jb2Rlck9wdGlvbnMpOiBQcm9taXNlPFZpZGVvVG9vbGJveEVuY29kZXI+IHtcbiAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQsIGZwcywgaHcsIGJpdHJhdGUsIG11eGVyIH0gPSBvcHRzO1xuXG4gICAgY29uc3QgY29kZWMgPSBody5nZXRFbmNvZGVyQ29kZWMoXCJoZXZjXCIpO1xuICAgIGlmICghY29kZWMpIHRocm93IG5ldyBFcnJvcihcImhldmNfdmlkZW90b29sYm94IGVuY29kZXIgbm90IGZvdW5kXCIpO1xuXG4gICAgY29uc3QgY3R4ID0gYXdhaXQgb3BlblZpZGVvQ3R4KFxuICAgICAge1xuICAgICAgICBjb2RlYyxcbiAgICAgICAgd2lkdGgsXG4gICAgICAgIGhlaWdodCxcbiAgICAgICAgZnBzLFxuICAgICAgICBiaXRyYXRlLFxuICAgICAgICBwaXhlbEZvcm1hdDogQVZfUElYX0ZNVF9CR1JBLFxuICAgICAgICBjb2xvclJhbmdlOiBBVkNPTF9SQU5HRV9KUEVHLFxuICAgICAgICBjb2RlY1RhZzogXCJodmMxXCIsXG4gICAgICAgIG9wdGlvbnM6IHsgYWxwaGFfcXVhbGl0eTogXCIxXCIgfSxcbiAgICAgIH0sXG4gICAgICBcInZ0RW5jLm9wZW4yXCIsXG4gICAgKTtcbiAgICBjb25zdCBzdHJlYW0gPSBtdXhlci5hZGRTdHJlYW0oY3R4LCBcImh2YzFcIik7XG4gICAgcmV0dXJuIG5ldyBWaWRlb1Rvb2xib3hFbmNvZGVyKGN0eCwgbWFrZVBhY2tldCgpLCBzdHJlYW0pO1xuICB9XG5cbiAgYXN5bmMgZW5jb2RlKGJncmFGcmFtZTogRnJhbWUsIG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGJncmFGcmFtZS5wdHMgPSB0aGlzLl9wdHMrKztcbiAgICBiZ3JhRnJhbWUuZHVyYXRpb24gPSAxbjtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgdGhpcy5fY3R4LnNlbmRGcmFtZShiZ3JhRnJhbWUpLCBcInZ0RW5jLnNlbmRGcmFtZVwiKTtcbiAgICBhd2FpdCB0aGlzLmRyYWluKG11eGVyKTtcbiAgfVxuXG4gIGFzeW5jIGZsdXNoKG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuX2N0eC5zZW5kRnJhbWUobnVsbCk7XG4gICAgYXdhaXQgdGhpcy5kcmFpbihtdXhlcik7XG4gIH1cblxuICBbU3ltYm9sLmRpc3Bvc2VdKCk6IHZvaWQge1xuICAgIHRoaXMuX3BrdC5mcmVlKCk7XG4gICAgdGhpcy5fY3R4LmZyZWVDb250ZXh0KCk7XG4gIH1cblxuICBwcml2YXRlIGRyYWluKG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBkcmFpblBhY2tldHModGhpcy5fY3R4LCB0aGlzLl9wa3QsIHRoaXMuX3N0cmVhbSwgbXV4ZXIpO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzEzLlxuXG5pbXBvcnQgeyBIYXJkd2FyZUNvbnRleHQgfSBmcm9tIFwibm9kZS1hdi9hcGlcIjtcbmltcG9ydCB7XG4gIEFWX1BJWF9GTVRfWVVWQTQyMFAsXG4gIEZGX0VOQ09ERVJfTElCWDI2NSxcbiAgRkZfSFdERVZJQ0VfVFlQRV9DVURBLFxuICBGRl9IV0RFVklDRV9UWVBFX1ZJREVPVE9PTEJPWCxcbn0gZnJvbSBcIm5vZGUtYXYvY29uc3RhbnRzXCI7XG5cbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuLi9sb2dnaW5nXCI7XG5pbXBvcnQgeyBDb2RlY1N0YXRlIH0gZnJvbSBcIi4vY29kZWNcIjtcbmltcG9ydCB0eXBlIHsgRm9ybWF0TXV4ZXIgfSBmcm9tIFwiLi9tdXhlclwiO1xuaW1wb3J0IHsgTnZlbmNEdWFsTGF5ZXJFbmNvZGVyIH0gZnJvbSBcIi4vbnZlbmNcIjtcbmltcG9ydCB7IFZpZGVvRW5jb2RlciB9IGZyb20gXCIuL3ZpZGVvXCI7XG5pbXBvcnQgeyBWaWRlb1Rvb2xib3hFbmNvZGVyIH0gZnJvbSBcIi4vdmlkZW90b29sYm94XCI7XG5cbmNvbnN0IFRBRyA9IFwiW0VuY29kZXJdXCI7XG5cbmV4cG9ydCB0eXBlIEh3RW5jb2RlciA9IFZpZGVvVG9vbGJveEVuY29kZXIgfCBOdmVuY0R1YWxMYXllckVuY29kZXI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmlkZW9TZXR1cCB7XG4gIHZpZGVvPzogVmlkZW9FbmNvZGVyO1xuICBod1ZpZGVvPzogSHdFbmNvZGVyO1xuICBjb2RlYz86IENvZGVjU3RhdGU7XG4gIGh3PzogSGFyZHdhcmVDb250ZXh0O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFZpZGVvRmFjdG9yeU9wdGlvbnMge1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgZnBzOiBudW1iZXI7XG4gIGJpdHJhdGU/OiBudW1iZXI7XG4gIGRpc2FibGVId0NvZGVjPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVZpZGVvRW5jb2RlcihvcHRzOiBWaWRlb0ZhY3RvcnlPcHRpb25zLCBtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPFZpZGVvU2V0dXA+IHtcbiAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0LCBmcHMsIGJpdHJhdGUgPSA4XzAwMF8wMDAsIGRpc2FibGVId0NvZGVjID0gZmFsc2UgfSA9IG9wdHM7XG4gIGNvbnN0IGh3ID0gZGlzYWJsZUh3Q29kZWMgPyB1bmRlZmluZWQgOiAoSGFyZHdhcmVDb250ZXh0LmF1dG8oKSA/PyB1bmRlZmluZWQpO1xuXG4gIHRyeSB7XG4gICAgaWYgKGh3Py5kZXZpY2VUeXBlTmFtZSA9PT0gRkZfSFdERVZJQ0VfVFlQRV9WSURFT1RPT0xCT1ggJiYgaHcuZ2V0RW5jb2RlckNvZGVjKFwiaGV2Y1wiKSkge1xuICAgICAgbG9nZ2VyLmRlYnVnKFRBRywgXCJ1c2luZyBWaWRlb1Rvb2xib3ggSEVWQyBhbHBoYSBlbmNvZGVyXCIpO1xuICAgICAgY29uc3QgaHdWaWRlbyA9IGF3YWl0IFZpZGVvVG9vbGJveEVuY29kZXIuY3JlYXRlKHsgd2lkdGgsIGhlaWdodCwgZnBzLCBodywgYml0cmF0ZSwgbXV4ZXIgfSk7XG4gICAgICByZXR1cm4geyBod1ZpZGVvLCBodyB9O1xuICAgIH1cbiAgICBpZiAoaHc/LmRldmljZVR5cGVOYW1lID09PSBGRl9IV0RFVklDRV9UWVBFX0NVREEgJiYgaHcuZ2V0RW5jb2RlckNvZGVjKFwiaGV2Y1wiKSkge1xuICAgICAgbG9nZ2VyLmRlYnVnKFRBRywgXCJ1c2luZyBOVkVOQyBkdWFsLWxheWVyIEhFVkMgYWxwaGEgZW5jb2RlclwiKTtcbiAgICAgIGNvbnN0IGh3VmlkZW8gPSBhd2FpdCBOdmVuY0R1YWxMYXllckVuY29kZXIuY3JlYXRlKHsgd2lkdGgsIGhlaWdodCwgZnBzLCBodywgYml0cmF0ZSwgbXV4ZXIgfSk7XG4gICAgICByZXR1cm4geyBod1ZpZGVvLCBodyB9O1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIGxvZ2dlci53YXJuKFRBRywgXCJIYXJkd2FyZSBjb2RlYyBzZXNzaW9uIGxpbWl0cyByZWFjaGVkLCB1c2Ugc29mdHdhcmUgZW5jb2RlclwiLCBlKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBodz8uZGlzcG9zZSgpO1xuICB9XG5cbiAgbG9nZ2VyLmRlYnVnKFRBRywgXCJ1c2luZyBzb2Z0d2FyZSBsaWJ4MjY1IEhFVkMgYWxwaGEgZW5jb2RlclwiKTtcbiAgY29uc3QgdmlkZW8gPSBhd2FpdCBWaWRlb0VuY29kZXIuY3JlYXRlKHtcbiAgICB3aWR0aCxcbiAgICBoZWlnaHQsXG4gICAgZnBzLFxuICAgIGNvZGVjTmFtZTogRkZfRU5DT0RFUl9MSUJYMjY1LFxuICAgIGNvZGVjVGFnOiBcImh2YzFcIixcbiAgICBjb2RlY09wdHM6IHsgcHJlc2V0OiBcIm1lZGl1bVwiLCBcIngyNjUtcGFyYW1zXCI6IFwibG9nLWxldmVsPTE6YmZyYW1lcz0zOnBvb2xzPSs6ZnJhbWUtdGhyZWFkcz0wXCIgfSxcbiAgICBiaXRyYXRlLFxuICAgIHBpeGVsRm9ybWF0OiBBVl9QSVhfRk1UX1lVVkE0MjBQLFxuICAgIG11eGVyLFxuICB9KTtcbiAgcmV0dXJuIHsgdmlkZW8sIGNvZGVjOiBhd2FpdCBDb2RlY1N0YXRlLmNyZWF0ZSh3aWR0aCwgaGVpZ2h0KSB9O1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMy8yMS5cblxuaW1wb3J0IHsgQ29kZWNDb250ZXh0LCBGRm1wZWdFcnJvciwgRm9ybWF0Q29udGV4dCwgUGFja2V0IH0gZnJvbSBcIm5vZGUtYXZcIjtcblxuZXhwb3J0IGNsYXNzIEZvcm1hdE11eGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfY3R4OiBGb3JtYXRDb250ZXh0O1xuICBwcml2YXRlIF9vcGVuZWQgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihvdXRQYXRoOiBzdHJpbmcsIGZvcm1hdE5hbWU/OiBzdHJpbmcpIHtcbiAgICB0aGlzLl9jdHggPSBuZXcgRm9ybWF0Q29udGV4dCgpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcih0aGlzLl9jdHguYWxsb2NPdXRwdXRDb250ZXh0MihudWxsLCBmb3JtYXROYW1lID8/IG51bGwsIG91dFBhdGgpLCBcImFsbG9jT3V0cHV0Q29udGV4dDJcIik7XG4gIH1cblxuICBhZGRTdHJlYW0oY29kZWNDdHg6IENvZGVjQ29udGV4dCwgY29kZWNUYWc/OiBzdHJpbmcpOiBSZXR1cm5UeXBlPEZvcm1hdENvbnRleHRbXCJuZXdTdHJlYW1cIl0+IHtcbiAgICBjb25zdCBzdHJlYW0gPSB0aGlzLl9jdHgubmV3U3RyZWFtKG51bGwpO1xuICAgIHN0cmVhbS50aW1lQmFzZSA9IGNvZGVjQ3R4LnRpbWVCYXNlO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihzdHJlYW0uY29kZWNwYXIuZnJvbUNvbnRleHQoY29kZWNDdHgpLCBcImNvZGVjcGFyLmZyb21Db250ZXh0XCIpO1xuICAgIGlmIChjb2RlY1RhZykgc3RyZWFtLmNvZGVjcGFyLmNvZGVjVGFnID0gY29kZWNUYWc7XG4gICAgcmV0dXJuIHN0cmVhbTtcbiAgfVxuXG4gIGFzeW5jIG9wZW4oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX29wZW5lZCkgcmV0dXJuO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCB0aGlzLl9jdHgub3Blbk91dHB1dCgpLCBcIm9wZW5PdXRwdXRcIik7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IHRoaXMuX2N0eC53cml0ZUhlYWRlcihudWxsKSwgXCJ3cml0ZUhlYWRlclwiKTtcbiAgICB0aGlzLl9vcGVuZWQgPSB0cnVlO1xuICB9XG5cbiAgYXN5bmMgd3JpdGVQYWNrZXQocGt0OiBQYWNrZXQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgdGhpcy5fY3R4LmludGVybGVhdmVkV3JpdGVGcmFtZShwa3QpLCBcImludGVybGVhdmVkV3JpdGVGcmFtZVwiKTtcbiAgfVxuXG4gIGFzeW5jIFtTeW1ib2wuYXN5bmNEaXNwb3NlXSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuX29wZW5lZCkgcmV0dXJuO1xuICAgIGF3YWl0IHRoaXMuX2N0eC53cml0ZVRyYWlsZXIoKTtcbiAgICBhd2FpdCB0aGlzLl9jdHguY2xvc2VPdXRwdXQoKTtcbiAgICBhd2FpdCB0aGlzLl9jdHhbU3ltYm9sLmFzeW5jRGlzcG9zZV0oKTtcbiAgICB0aGlzLl9vcGVuZWQgPSBmYWxzZTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8wMS5cblxuaW1wb3J0IHsgRkZtcGVnRXJyb3IsIEZyYW1lIH0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB0eXBlIHsgSGFyZHdhcmVDb250ZXh0IH0gZnJvbSBcIm5vZGUtYXYvYXBpXCI7XG5pbXBvcnQgeyBBVl9QSVhfRk1UX0JHUkEsIEFWX1NBTVBMRV9GTVRfRkxUUCwgRkZfRU5DT0RFUl9BQUMgfSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcblxuaW1wb3J0IHsgb2sgfSBmcm9tIFwiYXNzZXJ0XCI7XG5pbXBvcnQgeyBDb25jdXJyZW5jeUxpbWl0ZXIgfSBmcm9tIFwiLi4vbGltaXRlclwiO1xuaW1wb3J0IHsgQXVkaW9FbmNvZGVyIH0gZnJvbSBcIi4vYXVkaW9cIjtcbmltcG9ydCB7IENvZGVjU3RhdGUgfSBmcm9tIFwiLi9jb2RlY1wiO1xuaW1wb3J0IHsgY3JlYXRlVmlkZW9FbmNvZGVyLCB0eXBlIEh3RW5jb2RlciB9IGZyb20gXCIuL2ZhY3RvcnlcIjtcbmltcG9ydCB7IEZvcm1hdE11eGVyIH0gZnJvbSBcIi4vbXV4ZXJcIjtcbmltcG9ydCB7IG1ha2VGcmFtZSB9IGZyb20gXCIuL21pc2NcIjtcbmltcG9ydCB7IFZpZGVvRW5jb2RlciB9IGZyb20gXCIuL3ZpZGVvXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRW5jb2RlclBpcGVsaW5lT3B0aW9ucyB7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICBmcHM6IG51bWJlcjtcbiAgb3V0RmlsZTogc3RyaW5nO1xuICB3aXRoQXVkaW8/OiBib29sZWFuO1xuICBkaXNhYmxlSHdDb2RlYz86IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBQaXBlbGluZVN0YXRlIHtcbiAgdmlkZW8/OiBWaWRlb0VuY29kZXI7XG4gIGh3VmlkZW8/OiBId0VuY29kZXI7XG4gIGF1ZGlvPzogQXVkaW9FbmNvZGVyO1xuICBtdXhlcjogRm9ybWF0TXV4ZXI7XG4gIGxpbWl0ZXI6IENvbmN1cnJlbmN5TGltaXRlcjtcbiAgb3V0RmlsZTogc3RyaW5nO1xuICBjb2RlYz86IENvZGVjU3RhdGU7XG4gIGh3PzogSGFyZHdhcmVDb250ZXh0O1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbn1cblxuZXhwb3J0IGNsYXNzIEVuY29kZXJQaXBlbGluZSB7XG4gIHByaXZhdGUgX3M6IFBpcGVsaW5lU3RhdGU7XG4gIHByaXZhdGUgX2Rpc3Bvc2VkID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihzOiBQaXBlbGluZVN0YXRlKSB7XG4gICAgdGhpcy5fcyA9IHM7XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgY3JlYXRlKG9wdHM6IEVuY29kZXJQaXBlbGluZU9wdGlvbnMpOiBQcm9taXNlPEVuY29kZXJQaXBlbGluZT4ge1xuICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgb3V0RmlsZSwgd2l0aEF1ZGlvID0gZmFsc2UgfSA9IG9wdHM7XG4gICAgY29uc3QgbXV4ZXIgPSBuZXcgRm9ybWF0TXV4ZXIob3V0RmlsZSk7XG4gICAgY29uc3QgeyB2aWRlbywgaHdWaWRlbywgY29kZWMsIGh3IH0gPSBhd2FpdCBjcmVhdGVWaWRlb0VuY29kZXIob3B0cywgbXV4ZXIpO1xuXG4gICAgbGV0IGF1ZGlvOiBBdWRpb0VuY29kZXIgfCB1bmRlZmluZWQ7XG4gICAgaWYgKHdpdGhBdWRpbykge1xuICAgICAgYXVkaW8gPSBhd2FpdCBBdWRpb0VuY29kZXIuY3JlYXRlKHtcbiAgICAgICAgb3V0U2FtcGxlUmF0ZTogNDRfMTAwLFxuICAgICAgICBvdXRTYW1wbGVGbXQ6IEFWX1NBTVBMRV9GTVRfRkxUUCxcbiAgICAgICAgY29kZWNOYW1lOiBGRl9FTkNPREVSX0FBQyxcbiAgICAgICAgZ2xvYmFsSGVhZGVyOiB0cnVlLFxuICAgICAgICBiaXRyYXRlOiAxMjhfMDAwLFxuICAgICAgICBtdXhlcixcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGF3YWl0IG11eGVyLm9wZW4oKTtcbiAgICByZXR1cm4gbmV3IEVuY29kZXJQaXBlbGluZSh7XG4gICAgICB2aWRlbyxcbiAgICAgIGh3VmlkZW8sXG4gICAgICBhdWRpbyxcbiAgICAgIG11eGVyLFxuICAgICAgbGltaXRlcjogbmV3IENvbmN1cnJlbmN5TGltaXRlcigxKSxcbiAgICAgIG91dEZpbGUsXG4gICAgICBjb2RlYyxcbiAgICAgIGh3LFxuICAgICAgd2lkdGgsXG4gICAgICBoZWlnaHQsXG4gICAgfSk7XG4gIH1cblxuICBzZXR1cEF1ZGlvKHNhbXBsZVJhdGU6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuX3MuYXVkaW8/LnNldElucHV0UmF0ZShzYW1wbGVSYXRlKTtcbiAgfVxuXG4gIGFzeW5jIGVuY29kZUJHUkEoaW5wdXQ6IEJ1ZmZlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuX3MubGltaXRlci5zY2hlZHVsZShhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB7IGh3VmlkZW8sIHZpZGVvLCBjb2RlYywgbXV4ZXIgfSA9IHRoaXMuX3M7XG4gICAgICBpZiAoaHdWaWRlbykge1xuICAgICAgICB1c2luZyBmcmFtZSA9IHRoaXMuYmdyYUZyYW1lKGlucHV0KTtcbiAgICAgICAgYXdhaXQgaHdWaWRlby5lbmNvZGUoZnJhbWUsIG11eGVyKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgeyBzcmMsIGRzdCwgc3dzIH0gPSBjb2RlYyE7XG4gICAgICBvayhzd3MsIFwic3dzIG5vdCBpbml0aWFsaXplZFwiKTtcbiAgICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihzcmMubWFrZVdyaXRhYmxlKCksIFwiYmdyYVNyYy5tYWtlV3JpdGFibGVcIik7XG4gICAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3Ioc3JjLmZyb21CdWZmZXIoaW5wdXQpLCBcImJncmFTcmMuZnJvbUJ1ZmZlclwiKTtcbiAgICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihkc3QubWFrZVdyaXRhYmxlKCksIFwiYmdyYURzdC5tYWtlV3JpdGFibGVcIik7XG4gICAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgc3dzLnNjYWxlRnJhbWUoZHN0LCBzcmMpLCBcImJncmFTd3Muc2NhbGVGcmFtZVwiKTtcbiAgICAgIHJldHVybiB2aWRlbyEuZW5jb2RlKGRzdCwgbXV4ZXIpO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZW5jb2RlUE5HKHBuZ0RhdGE6IEJ1ZmZlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuX3MubGltaXRlci5zY2hlZHVsZShhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB7IGh3VmlkZW8sIHZpZGVvLCBjb2RlYywgbXV4ZXIsIHdpZHRoLCBoZWlnaHQgfSA9IHRoaXMuX3M7XG4gICAgICBjb25zdCBjcyA9IGNvZGVjID8/IChhd2FpdCBDb2RlY1N0YXRlLmNyZWF0ZSh3aWR0aCwgaGVpZ2h0KSk7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBzcmMgPSBhd2FpdCBjcy5kZWNvZGVQTkcocG5nRGF0YSk7XG4gICAgICAgIGlmIChod1ZpZGVvKSB7XG4gICAgICAgICAgYXdhaXQgaHdWaWRlby5lbmNvZGUoc3JjLCBtdXhlcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGNzLmRzdC5tYWtlV3JpdGFibGUoKSwgXCJwbmdEc3QubWFrZVdyaXRhYmxlXCIpO1xuICAgICAgICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCBjcy5zd3Muc2NhbGVGcmFtZShjcy5kc3QsIHNyYyksIFwicG5nU3dzLnNjYWxlRnJhbWVcIik7XG4gICAgICAgICAgYXdhaXQgdmlkZW8hLmVuY29kZShjcy5kc3QsIG11eGVyKTtcbiAgICAgICAgfVxuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgaWYgKCFjb2RlYykgY3NbU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBlbmNvZGVBdWRpbyhwY206IEJ1ZmZlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgYXVkaW8sIGxpbWl0ZXIsIG11eGVyIH0gPSB0aGlzLl9zO1xuICAgIGlmIChhdWRpbykgYXdhaXQgbGltaXRlci5zY2hlZHVsZSgoKSA9PiBhdWRpby5lbmNvZGUocGNtLCBtdXhlcikpO1xuICB9XG5cbiAgYXN5bmMgZmluaXNoKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgeyB2aWRlbywgaHdWaWRlbywgYXVkaW8sIG11eGVyLCBsaW1pdGVyIH0gPSB0aGlzLl9zO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB1c2luZyBfbSA9IG11eGVyO1xuICAgICAgdXNpbmcgX3YgPSB2aWRlbztcbiAgICAgIHVzaW5nIF9odiA9IGh3VmlkZW87XG4gICAgICB1c2luZyBfYSA9IGF1ZGlvO1xuICAgICAgYXdhaXQgbGltaXRlci5kcmFpbigpO1xuICAgICAgYXdhaXQgYXVkaW8/LmZsdXNoKG11eGVyKTtcbiAgICAgIGlmIChod1ZpZGVvKSB7XG4gICAgICAgIGF3YWl0IGh3VmlkZW8uZmx1c2gobXV4ZXIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXdhaXQgdmlkZW8hLmZsdXNoKG11eGVyKTtcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5mcmVlKCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9zLm91dEZpbGU7XG4gIH1cblxuICBhc3luYyBbU3ltYm9sLmFzeW5jRGlzcG9zZV0oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX2Rpc3Bvc2VkKSByZXR1cm47XG4gICAgY29uc3QgeyB2aWRlbywgaHdWaWRlbywgYXVkaW8sIG11eGVyLCBsaW1pdGVyIH0gPSB0aGlzLl9zO1xuICAgIGF3YWl0IGxpbWl0ZXIuZHJhaW4oKTtcbiAgICB2aWRlbz8uW1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgIGh3VmlkZW8/LltTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICBhdWRpbz8uW1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgIGF3YWl0IG11eGVyW1N5bWJvbC5hc3luY0Rpc3Bvc2VdKCk7XG4gICAgdGhpcy5mcmVlKCk7XG4gIH1cblxuICBwcml2YXRlIGZyZWUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2Rpc3Bvc2VkKSByZXR1cm47XG4gICAgdGhpcy5fZGlzcG9zZWQgPSB0cnVlO1xuICAgIHVzaW5nIF9jb2RlYyA9IHRoaXMuX3MuY29kZWM7XG4gICAgdGhpcy5fcy5odz8uZGlzcG9zZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBiZ3JhRnJhbWUoaW5wdXQ6IEJ1ZmZlcik6IEZyYW1lIHtcbiAgICBjb25zdCBmcmFtZSA9IG1ha2VGcmFtZSh0aGlzLl9zLndpZHRoLCB0aGlzLl9zLmhlaWdodCwgQVZfUElYX0ZNVF9CR1JBKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoZnJhbWUuZnJvbUJ1ZmZlcihpbnB1dCksIFwiYmdyYUZyYW1lLmZyb21CdWZmZXJcIik7XG4gICAgcmV0dXJuIGZyYW1lO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAzLzIzLlxuXG4vKipcbiAqIEZyYW1lIGRyb3AgcXVhbGl0eSBzY29yZSAoMCA9IHBlcmZlY3QsIDEgPSB3b3JzdCkuXG4gKlxuICogQ29tYmluZXMgdHdvIGRpbWVuc2lvbnM6XG4gKiAtIEdsb2JhbDogb3ZlcmFsbCBkcm9wIHJhdGUgYWNyb3NzIHRoZSB0aW1lbGluZVxuICogLSBMb2NhbDogcGVyY2VwdHVhbCBzZXZlcml0eSBvZiBjb25zZWN1dGl2ZSBkcm9wcyAoYnVyc3RzKVxuICpcbiAqIFVzZXMgY29tcGxlbWVudGFyeSBtdWx0aXBsaWNhdGlvbjogc2NvcmUgPSAxIC0gKDEtZykoMS1sKVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZyYW1lRHJvcFNjb3JlIHtcbiAgZ2xvYmFsOiBudW1iZXI7XG4gIGxvY2FsOiBudW1iZXI7XG4gIGphbms6IG51bWJlcjtcbiAgZXhwZWN0ZWQ6IG51bWJlcjtcbiAgYWN0dWFsOiBudW1iZXI7XG4gIG1heEJ1cnN0OiBudW1iZXI7XG59XG5cbmV4cG9ydCBjbGFzcyBGcmFtZURyb3BTdGF0cyB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2ZwczogbnVtYmVyO1xuICBwcml2YXRlIF9hY3R1YWwgPSAwO1xuICBwcml2YXRlIF9jdXJyZW50QnVyc3QgPSAwO1xuICBwcml2YXRlIF9idXJzdHM6IG51bWJlcltdID0gW107XG5cbiAgY29uc3RydWN0b3IoZnBzOiBudW1iZXIpIHtcbiAgICB0aGlzLl9mcHMgPSBmcHM7XG4gIH1cblxuICAvKiogQ2FsbCB3aGVuIGEgZnJhbWUgaXMgYWN0dWFsbHkgd3JpdHRlbiB0byB0aGUgZW5jb2Rlci4gKi9cbiAgd3JvdGUoY291bnQgPSAxKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2N1cnJlbnRCdXJzdCA+IDApIHtcbiAgICAgIHRoaXMuX2J1cnN0cy5wdXNoKHRoaXMuX2N1cnJlbnRCdXJzdCk7XG4gICAgICB0aGlzLl9jdXJyZW50QnVyc3QgPSAwO1xuICAgIH1cbiAgICB0aGlzLl9hY3R1YWwgKz0gY291bnQ7XG4gIH1cblxuICAvKiogQ2FsbCB3aGVuIGEgZnJhbWUgaXMgZHJvcHBlZC4gKi9cbiAgZHJvcHBlZChjb3VudCA9IDEpOiB2b2lkIHtcbiAgICB0aGlzLl9jdXJyZW50QnVyc3QgKz0gY291bnQ7XG4gIH1cblxuICAvKiogRmluYWxpemUgYW5kIHJldHVybiB0aGUgc2NvcmUuICovXG4gIGZpbmFsaXplKCk6IEZyYW1lRHJvcFNjb3JlIHtcbiAgICBpZiAodGhpcy5fY3VycmVudEJ1cnN0ID4gMCkge1xuICAgICAgdGhpcy5fYnVyc3RzLnB1c2godGhpcy5fY3VycmVudEJ1cnN0KTtcbiAgICAgIHRoaXMuX2N1cnJlbnRCdXJzdCA9IDA7XG4gICAgfVxuXG4gICAgbGV0IHRvdGFsRHJvcHBlZCA9IDA7XG4gICAgbGV0IGxvY2FsU3VtID0gMDtcbiAgICBsZXQgbWF4QnVyc3QgPSAwO1xuICAgIGZvciAoY29uc3QgYnVyc3Qgb2YgdGhpcy5fYnVyc3RzKSB7XG4gICAgICB0b3RhbERyb3BwZWQgKz0gYnVyc3Q7XG4gICAgICBtYXhCdXJzdCA9IE1hdGgubWF4KG1heEJ1cnN0LCBidXJzdCk7XG4gICAgICBjb25zdCBwZXJjZXB0aWJsZSA9IE1hdGgubWF4KDAsIGJ1cnN0IC0gMSk7XG4gICAgICBsb2NhbFN1bSArPSAocGVyY2VwdGlibGUgLyB0aGlzLl9mcHMpICoqIDI7XG4gICAgfVxuXG4gICAgY29uc3QgZXhwZWN0ZWQgPSB0aGlzLl9hY3R1YWwgKyB0b3RhbERyb3BwZWQ7XG4gICAgY29uc3QgZyA9IGV4cGVjdGVkID4gMCA/IHRvdGFsRHJvcHBlZCAvIGV4cGVjdGVkIDogMDtcbiAgICBjb25zdCBsID0gTWF0aC5taW4oMSwgbG9jYWxTdW0pO1xuICAgIGNvbnN0IHNjb3JlID0gMSAtICgxIC0gZykgKiAoMSAtIGwpO1xuXG4gICAgcmV0dXJuIHsgZ2xvYmFsOiBnLCBsb2NhbDogbCwgamFuazogc2NvcmUsIGV4cGVjdGVkLCBhY3R1YWw6IHRoaXMuX2FjdHVhbCwgbWF4QnVyc3QgfTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wNi5cblxuaW1wb3J0IHR5cGUgeyBOYXRpdmVJbWFnZSB9IGZyb20gXCJlbGVjdHJvblwiO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNFbXB0eShpbWFnZTogTmF0aXZlSW1hZ2UpIHtcbiAgY29uc3Qgc2l6ZSA9IGltYWdlLmdldFNpemUoKTtcbiAgaWYgKHNpemUud2lkdGggPT09IDAgfHwgc2l6ZS5oZWlnaHQgPT09IDApIHJldHVybiB0cnVlO1xuICByZXR1cm4gaW1hZ2UuaXNFbXB0eSgpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMy8wMi5cblxuaW1wb3J0IHsgcmFuZG9tVVVJRCB9IGZyb20gXCJjcnlwdG9cIjtcbmltcG9ydCB7IGlwY01haW4sIHNlc3Npb24gfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IHJtLCB3cml0ZUZpbGUgfSBmcm9tIFwiZnMvcHJvbWlzZXNcIjtcbmltcG9ydCB7IHRtcGRpciB9IGZyb20gXCJvc1wiO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgdHlwZSB7IEVuY29kZXJQaXBlbGluZSB9IGZyb20gXCIuLi9iYXNlL2VuY29kZXIvcGlwZWxpbmVcIjtcblxuY29uc3QgQVVESU9fTUVUQV9DSEFOTkVMID0gXCJhdWRpby1tZXRhXCI7XG5jb25zdCBBVURJT19DSFVOS19DSEFOTkVMID0gXCJhdWRpby1jaHVua1wiO1xuXG5jb25zdCBBVURJT19DQVBUVVJFX1NDUklQVCA9IGBcbihmdW5jdGlvbigpIHtcbiAgaWYgKHdpbmRvdy5fX3B1cF9hdWRpb19jYXB0dXJpbmdfXykgcmV0dXJuO1xuICB3aW5kb3cuX19wdXBfYXVkaW9fY2FwdHVyaW5nX18gPSB0cnVlO1xuXG4gIGNvbnN0IHsgaXBjUmVuZGVyZXIgfSA9IHJlcXVpcmUoJ2VsZWN0cm9uJyk7XG4gIGNvbnN0IGNhcHR1cmVkQ29udGV4dHMgPSBuZXcgV2Vha1NldCgpO1xuICBjb25zdCBzb3VyY2VkRWxlbWVudHMgPSBuZXcgV2Vha1NldCgpO1xuICBsZXQgbWV0YVNlbnQgPSBmYWxzZTtcblxuICBjb25zdCBvcmlnQ3JlYXRlTUVTID0gQXVkaW9Db250ZXh0LnByb3RvdHlwZS5jcmVhdGVNZWRpYUVsZW1lbnRTb3VyY2U7XG4gIEF1ZGlvQ29udGV4dC5wcm90b3R5cGUuY3JlYXRlTWVkaWFFbGVtZW50U291cmNlID0gZnVuY3Rpb24oZWwpIHtcbiAgICBzb3VyY2VkRWxlbWVudHMuYWRkKGVsKTtcbiAgICByZXR1cm4gb3JpZ0NyZWF0ZU1FUy5jYWxsKHRoaXMsIGVsKTtcbiAgfTtcblxuICBjb25zdCBvcmlnQ29ubmVjdCA9IEF1ZGlvTm9kZS5wcm90b3R5cGUuY29ubmVjdDtcbiAgQXVkaW9Ob2RlLnByb3RvdHlwZS5jb25uZWN0ID0gZnVuY3Rpb24oZGVzdCwgb3V0SWR4LCBpbklkeCkge1xuICAgIGNvbnN0IGNhcHR1cmVOb2RlID0gZGVzdD8uY29udGV4dD8uX19wdXBfY2FwdHVyZU5vZGVfXztcbiAgICBpZiAoY2FwdHVyZU5vZGUgJiYgZGVzdCA9PT0gZGVzdC5jb250ZXh0LmRlc3RpbmF0aW9uICYmIHRoaXMgIT09IGNhcHR1cmVOb2RlKSB7XG4gICAgICBvcmlnQ29ubmVjdC5jYWxsKHRoaXMsIGNhcHR1cmVOb2RlLCBvdXRJZHgsIGluSWR4KTtcbiAgICB9XG4gICAgcmV0dXJuIG9yaWdDb25uZWN0LmNhbGwodGhpcywgZGVzdCwgb3V0SWR4LCBpbklkeCk7XG4gIH07XG5cbiAgY29uc3QgT3JpZ0FDID0gd2luZG93LkF1ZGlvQ29udGV4dCB8fCB3aW5kb3cud2Via2l0QXVkaW9Db250ZXh0O1xuICBpZiAoIU9yaWdBQykgcmV0dXJuO1xuXG4gIGZ1bmN0aW9uIFBhdGNoZWRBQygpIHtcbiAgICBjb25zdCBjdHggPSBuZXcgT3JpZ0FDKC4uLmFyZ3VtZW50cyk7XG4gICAgaWYgKCFjYXB0dXJlZENvbnRleHRzLmhhcyhjdHgpKSB7XG4gICAgICBjYXB0dXJlZENvbnRleHRzLmFkZChjdHgpO1xuICAgICAgaWYgKCFtZXRhU2VudCkge1xuICAgICAgICBtZXRhU2VudCA9IHRydWU7XG4gICAgICAgIGlwY1JlbmRlcmVyLnNlbmQoJyR7QVVESU9fTUVUQV9DSEFOTkVMfScsIHsgc2FtcGxlUmF0ZTogY3R4LnNhbXBsZVJhdGUgfSk7XG4gICAgICB9XG4gICAgICBjb25zdCBub2RlID0gY3R4LmNyZWF0ZVNjcmlwdFByb2Nlc3Nvcig0MDk2LCAyLCAyKTtcbiAgICAgIG5vZGUub25hdWRpb3Byb2Nlc3MgPSAoZSkgPT4ge1xuICAgICAgICBjb25zdCBMID0gZS5pbnB1dEJ1ZmZlci5nZXRDaGFubmVsRGF0YSgwKTtcbiAgICAgICAgY29uc3QgUiA9IGUuaW5wdXRCdWZmZXIuZ2V0Q2hhbm5lbERhdGEoMSk7XG4gICAgICAgIGNvbnN0IG91dCA9IG5ldyBGbG9hdDMyQXJyYXkoTC5sZW5ndGggKiAyKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBMLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgb3V0W2kgKiAyXSA9IExbaV07XG4gICAgICAgICAgb3V0W2kgKiAyICsgMV0gPSBSW2ldO1xuICAgICAgICB9XG4gICAgICAgIGlwY1JlbmRlcmVyLnNlbmQoJyR7QVVESU9fQ0hVTktfQ0hBTk5FTH0nLCBCdWZmZXIuZnJvbShvdXQuYnVmZmVyKSk7XG4gICAgICB9O1xuICAgICAgbm9kZS5jb25uZWN0KGN0eC5kZXN0aW5hdGlvbik7XG4gICAgICBjdHguX19wdXBfY2FwdHVyZU5vZGVfXyA9IG5vZGU7XG4gICAgfVxuICAgIHJldHVybiBjdHg7XG4gIH1cbiAgUGF0Y2hlZEFDLnByb3RvdHlwZSA9IE9yaWdBQy5wcm90b3R5cGU7XG4gIE9iamVjdC5zZXRQcm90b3R5cGVPZihQYXRjaGVkQUMsIE9yaWdBQyk7XG4gIHdpbmRvdy5BdWRpb0NvbnRleHQgPSBQYXRjaGVkQUM7XG4gIGlmICgnd2Via2l0QXVkaW9Db250ZXh0JyBpbiB3aW5kb3cpIHdpbmRvdy53ZWJraXRBdWRpb0NvbnRleHQgPSBQYXRjaGVkQUM7XG5cbiAgY29uc3Qgb3JpZ1BsYXkgPSBIVE1MTWVkaWFFbGVtZW50LnByb3RvdHlwZS5wbGF5O1xuICBIVE1MTWVkaWFFbGVtZW50LnByb3RvdHlwZS5wbGF5ID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKCF0aGlzLl9fcHVwX2NhcHR1cmVkX18pIHtcbiAgICAgIHRoaXMuX19wdXBfY2FwdHVyZWRfXyA9IHRydWU7XG4gICAgICBjb25zdCBlbCA9IHRoaXM7XG4gICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHtcbiAgICAgICAgaWYgKCFzb3VyY2VkRWxlbWVudHMuaGFzKGVsKSkge1xuICAgICAgICAgIGNvbnN0IGN0eCA9IG5ldyBQYXRjaGVkQUMoKTtcbiAgICAgICAgICBjdHguY3JlYXRlTWVkaWFFbGVtZW50U291cmNlKGVsKS5jb25uZWN0KGN0eC5kZXN0aW5hdGlvbik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gb3JpZ1BsYXkuY2FsbCh0aGlzKTtcbiAgfTtcbn0pKCk7XG5gO1xuXG5leHBvcnQgaW50ZXJmYWNlIEF1ZGlvQ2FwdHVyZSB7XG4gIHRlYXJkb3duKCk6IFByb21pc2U8dm9pZD47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXVkaW9DYXB0dXJlT3B0aW9ucyB7XG4gIGVuY29kZXI6IEVuY29kZXJQaXBlbGluZTtcbiAgZ2V0VmlkZW9UaW1lTXM6ICgpID0+IG51bWJlcjtcbiAgb25FcnJvcjogKGVycm9yOiBFcnJvcikgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNldHVwQXVkaW9DYXB0dXJlKHtcbiAgZW5jb2RlcixcbiAgZ2V0VmlkZW9UaW1lTXMsXG4gIG9uRXJyb3IsXG59OiBBdWRpb0NhcHR1cmVPcHRpb25zKTogUHJvbWlzZTxBdWRpb0NhcHR1cmU+IHtcbiAgY29uc3QgcHJlbG9hZFBhdGggPSBqb2luKHRtcGRpcigpLCBgcHVwX2F1ZGlvXyR7cmFuZG9tVVVJRCgpfS5qc2ApO1xuICBhd2FpdCB3cml0ZUZpbGUocHJlbG9hZFBhdGgsIEFVRElPX0NBUFRVUkVfU0NSSVBUKTtcbiAgc2Vzc2lvbi5kZWZhdWx0U2Vzc2lvbi5yZWdpc3RlclByZWxvYWRTY3JpcHQoe1xuICAgIHR5cGU6IFwiZnJhbWVcIixcbiAgICBpZDogXCJwdXAtYXVkaW9cIixcbiAgICBmaWxlUGF0aDogcHJlbG9hZFBhdGgsXG4gIH0pO1xuXG4gIGlwY01haW4ub24oQVVESU9fTUVUQV9DSEFOTkVMLCBhc3luYyAoX2UsIGRhdGE6IHsgc2FtcGxlUmF0ZTogbnVtYmVyIH0pID0+IHtcbiAgICBjb25zdCBzYW1wbGVSYXRlID0gZGF0YS5zYW1wbGVSYXRlO1xuICAgIGNvbnN0IHN0YXJ0TXMgPSBnZXRWaWRlb1RpbWVNcygpO1xuICAgIGVuY29kZXIuc2V0dXBBdWRpbyhzYW1wbGVSYXRlKTtcbiAgICBjb25zdCBzaWxlbmNlU2FtcGxlcyA9IE1hdGguY2VpbCgoc3RhcnRNcyAqIHNhbXBsZVJhdGUpIC8gMTAwMCk7XG4gICAgaWYgKHNpbGVuY2VTYW1wbGVzIDw9IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGVuY29kZXIuZW5jb2RlQXVkaW8oQnVmZmVyLmFsbG9jKHNpbGVuY2VTYW1wbGVzICogMiAqIDQpKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgb25FcnJvcihlcnJvciBhcyBFcnJvcik7XG4gICAgfVxuICB9KTtcblxuICBpcGNNYWluLm9uKEFVRElPX0NIVU5LX0NIQU5ORUwsIGFzeW5jIChfZSwgYnVmZmVyOiBCdWZmZXIpID0+IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgZW5jb2Rlci5lbmNvZGVBdWRpbyhidWZmZXIpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBvbkVycm9yKGVycm9yIGFzIEVycm9yKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiB7XG4gICAgYXN5bmMgdGVhcmRvd24oKSB7XG4gICAgICBpcGNNYWluLnJlbW92ZUFsbExpc3RlbmVycyhBVURJT19NRVRBX0NIQU5ORUwpO1xuICAgICAgaXBjTWFpbi5yZW1vdmVBbGxMaXN0ZW5lcnMoQVVESU9fQ0hVTktfQ0hBTk5FTCk7XG4gICAgICBzZXNzaW9uLmRlZmF1bHRTZXNzaW9uLnVucmVnaXN0ZXJQcmVsb2FkU2NyaXB0KFwicHVwLWF1ZGlvXCIpO1xuICAgICAgYXdhaXQgcm0ocHJlbG9hZFBhdGgsIHsgZm9yY2U6IHRydWUgfSk7XG4gICAgfSxcbiAgfTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDkuXG5cbmV4cG9ydCBmdW5jdGlvbiBzbGVlcChtczogbnVtYmVyKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCBtcykpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGVyaW9kaWNhbChjYWxsYmFjazogKGNvdW50OiBudW1iZXIpID0+IFByb21pc2U8dm9pZD4gfCB2b2lkLCBtczogbnVtYmVyKSB7XG4gIGxldCB0b2tlbjogTm9kZUpTLlRpbWVvdXQ7XG4gIGxldCBjbG9zZWQgPSBmYWxzZTtcbiAgYXN5bmMgZnVuY3Rpb24gdGljayhjb3VudDogbnVtYmVyKSB7XG4gICAgYXdhaXQgY2FsbGJhY2soY291bnQpO1xuICAgIGlmIChjbG9zZWQpIHJldHVybjtcbiAgICB0b2tlbiA9IHNldFRpbWVvdXQoKCkgPT4gdGljayhjb3VudCArIDEpLCBtcyk7XG4gIH1cbiAgdG9rZW4gPSBzZXRUaW1lb3V0KCgpID0+IHRpY2soMCksIG1zKTtcbiAgcmV0dXJuICgpID0+IHtcbiAgICBjbG9zZWQgPSB0cnVlO1xuICAgIGNsZWFyVGltZW91dCh0b2tlbik7XG4gIH07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA1LlxuXG5pbXBvcnQgeyBzZXRUaW1lb3V0IH0gZnJvbSBcInRpbWVycy9wcm9taXNlc1wiO1xuaW1wb3J0IHsgc2xlZXAgfSBmcm9tIFwiLi90aW1pbmdcIjtcblxuZXhwb3J0IGludGVyZmFjZSBSZXRyeU9wdGlvbnM8QXJncyBleHRlbmRzIGFueVtdLCBSZXQ+IHtcbiAgZm46ICguLi5hcmdzOiBBcmdzKSA9PiBQcm9taXNlPFJldD47XG4gIG1heEF0dGVtcHRzPzogbnVtYmVyO1xuICB0aW1lb3V0PzogbnVtYmVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXNlUmV0cnk8QXJncyBleHRlbmRzIGFueVtdLCBSZXQ+KHsgZm4sIG1heEF0dGVtcHRzID0gMywgdGltZW91dCB9OiBSZXRyeU9wdGlvbnM8QXJncywgUmV0Pikge1xuICBjb25zdCB0aW1lb3V0RXJyb3IgPSBuZXcgRXJyb3IoYHRpbWVvdXQgb3ZlciAke3RpbWVvdXR9bXNgKTtcbiAgcmV0dXJuIGFzeW5jIGZ1bmN0aW9uICguLi5hcmdzOiBBcmdzKSB7XG4gICAgbGV0IGF0dGVtcHQgPSAwO1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBwcm9taXNlcyA9IFtmbiguLi5hcmdzKV07XG4gICAgICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICAgICAgcHJvbWlzZXMucHVzaChcbiAgICAgICAgICAgIHNldFRpbWVvdXQodGltZW91dCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgIHRocm93IHRpbWVvdXRFcnJvcjtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGF3YWl0IFByb21pc2UucmFjZShwcm9taXNlcyk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGF0dGVtcHQrKztcbiAgICAgICAgaWYgKGF0dGVtcHQgPj0gbWF4QXR0ZW1wdHMpIHtcbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IHNsZWVwKE1hdGgucG93KDIsIGF0dGVtcHQpICogMTAwICsgTWF0aC5yYW5kb20oKSAqIDEwMCk7XG4gICAgICB9XG4gICAgfVxuICB9O1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wOS5cblxuY29uc3QgU1VQUE9SVEVEX1BST1RPQ09MUyA9IFtcImZpbGU6XCIsIFwiaHR0cDpcIiwgXCJodHRwczpcIiwgXCJkYXRhOlwiXTtcbmNvbnN0IFNPVVJDRV9QQVRURVJOID0gL14oZmlsZTp8aHR0cHM/OnxkYXRhOikvO1xuXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tIVE1MKHNvdXJjZTogc3RyaW5nKTogdm9pZCB7XG4gIGlmIChTT1VSQ0VfUEFUVEVSTi50ZXN0KHNvdXJjZSkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBwcm90b2NvbCA9IHNvdXJjZS5zcGxpdChcIjpcIilbMF0gKyBcIjpcIjtcbiAgY29uc3QgbWVzc2FnZSA9IFNVUFBPUlRFRF9QUk9UT0NPTFMuaW5jbHVkZXMocHJvdG9jb2wpXG4gICAgPyBgdW5zdXBwb3J0ZWQgcHJvdG9jb2w6ICR7cHJvdG9jb2x9LCBleHBlY3RlZCAke1NVUFBPUlRFRF9QUk9UT0NPTFMuam9pbihcIiwgXCIpfWBcbiAgICA6IGBpbnZhbGlkIHNvdXJjZSBmb3JtYXQsIGV4cGVjdGVkICR7U1VQUE9SVEVEX1BST1RPQ09MUy5qb2luKFwiLCBcIil9YDtcblxuICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAzLzEwLlxuXG5leHBvcnQgaW50ZXJmYWNlIFdhaXRPcHRpb25zIHtcbiAgdGltZW91dDogbnVtYmVyO1xuICBvblRpbWVvdXQ/OiAoKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgY2xhc3MgV2FpdGFibGVFdmVudCB7XG4gIHByaXZhdGUgX3Byb21pc2U/OiBQcm9taXNlPHZvaWQ+O1xuICBwcml2YXRlIF9yZXNvbHZlPzogKCkgPT4gdm9pZDtcbiAgcHJpdmF0ZSBfdGltZW91dFRva2VuPzogTm9kZUpTLlRpbWVvdXQ7XG5cbiAgd2FpdChvcHRpb25zPzogV2FpdE9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fcHJvbWlzZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYWxyZWFkeSB3YWl0aW5nXCIpO1xuICAgIH1cbiAgICB0aGlzLl9wcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIHRoaXMuX3Jlc29sdmUgPSByZXNvbHZlO1xuICAgICAgaWYgKG9wdGlvbnM/LnRpbWVvdXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLl90aW1lb3V0VG9rZW4gPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBvcHRpb25zLm9uVGltZW91dD8uKCk7XG4gICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9LCBvcHRpb25zLnRpbWVvdXQpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLl9wcm9taXNlO1xuICB9XG5cbiAgc2lnbmFsKCkge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLl90aW1lb3V0VG9rZW4pO1xuICAgIHRoaXMuX3Byb21pc2UgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5fcmVzb2x2ZT8uKCk7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDkuXG5cbmltcG9ydCB7IEJyb3dzZXJXaW5kb3cgfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IFVSTCB9IGZyb20gXCJ1cmxcIjtcbmltcG9ydCB7IENvbmN1cnJlbmN5TGltaXRlciB9IGZyb20gXCIuLi9iYXNlL2xpbWl0ZXJcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuLi9iYXNlL2xvZ2dpbmdcIjtcbmltcG9ydCB7IFdhaXRhYmxlRXZlbnQgfSBmcm9tIFwiLi4vYmFzZS93YWl0YWJsZV9ldmVudFwiO1xuXG5jb25zdCBUQUcgPSBcIltOZXR3b3JrXVwiO1xuXG5jb25zdCBtYXAgPSBuZXcgTWFwKFtcbiAgW2Bqc3N6LWJvc3MuaGRzbGIuY29tYCwgYGpzc3otYm9zcy5iaWxpYmlsaS5jb2BdLCAvL1xuICBbYGJvc3MuaGRzbGIuY29tYCwgYHNoamQtYm9zcy5iaWxpYmlsaS5jb2BdLFxuXSk7XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm94aWVkVXJsKHVybDogc3RyaW5nKSB7XG4gIGlmICghdXJsLnN0YXJ0c1dpdGgoXCJodHRwXCIpKSB7XG4gICAgcmV0dXJuIHVybDtcbiAgfVxuICBjb25zdCBwYXJzZWQgPSBuZXcgVVJMKHVybCk7XG4gIGNvbnN0IHRhcmdldCA9IG1hcC5nZXQocGFyc2VkLmhvc3RuYW1lKTtcbiAgaWYgKCF0YXJnZXQpIHtcbiAgICByZXR1cm4gdXJsO1xuICB9XG4gIHBhcnNlZC5ob3N0bmFtZSA9IHRhcmdldDtcbiAgcGFyc2VkLnByb3RvY29sID0gXCJodHRwOlwiO1xuICByZXR1cm4gcGFyc2VkLnRvU3RyaW5nKCk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmV0d29ya09wdGlvbnMge1xuICBzb3VyY2U6IHN0cmluZztcbiAgd2luZG93OiBCcm93c2VyV2luZG93O1xuICB1c2VJbm5lclByb3h5PzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEludGVyY2VwdG9yKHsgc291cmNlLCB3aW5kb3csIHVzZUlubmVyUHJveHkgfTogTmV0d29ya09wdGlvbnMpIHtcbiAgY29uc3QgcmVxID0gd2luZG93LndlYkNvbnRlbnRzLnNlc3Npb24ud2ViUmVxdWVzdDtcbiAgY29uc3QgbGltaXRlciA9IG5ldyBDb25jdXJyZW5jeUxpbWl0ZXIoNjQpO1xuICBjb25zdCBldmVudHMgPSBuZXcgTWFwPHN0cmluZywgV2FpdGFibGVFdmVudD4oKTtcblxuICBhc3luYyBmdW5jdGlvbiB3YWl0KGtleTogc3RyaW5nLCBvblRpbWVvdXQ/OiAoKSA9PiB2b2lkKSB7XG4gICAgY29uc3QgZXZlbnQgPSBuZXcgV2FpdGFibGVFdmVudCgpO1xuICAgIGV2ZW50cy5zZXQoa2V5LCBldmVudCk7XG4gICAgYXdhaXQgZXZlbnQud2FpdCh7IHRpbWVvdXQ6IDVfMDAwLCBvblRpbWVvdXQgfSkuZmluYWxseSgoKSA9PiBldmVudHMuZGVsZXRlKGtleSkpO1xuICB9XG5cbiAgZnVuY3Rpb24gc2lnbmFsKGtleTogc3RyaW5nKSB7XG4gICAgZXZlbnRzLmdldChrZXkpPy5zaWduYWwoKTtcbiAgfVxuXG4gIHJlcS5vbkJlZm9yZVJlcXVlc3QoKGRldGFpbHMsIGNhbGxiYWNrKSA9PiB7XG4gICAgY29uc3QgdXJsID0gZGV0YWlscy51cmw7XG4gICAgY29uc3QgcHJveGllZCA9IHVzZUlubmVyUHJveHkgPyBwcm94aWVkVXJsKHVybCkgOiB1cmw7XG4gICAgbGltaXRlci5zY2hlZHVsZSgoKSA9PiB7XG4gICAgICBjb25zdCBrZXkgPSBgJHt3aW5kb3cuaWR9XyR7ZGV0YWlscy5pZH1gO1xuICAgICAgbG9nZ2VyLmRlYnVnKFRBRywgYHN0YXJ0OmAsIHtcbiAgICAgICAga2V5LFxuICAgICAgICB1cmwsXG4gICAgICAgIHByb3hpZWQsXG4gICAgICAgIG1ldGhvZDogZGV0YWlscy5tZXRob2QsXG4gICAgICAgIHNvdXJjZSxcbiAgICAgICAgc3RhdHM6IGxpbWl0ZXIuc3RhdHMsXG4gICAgICB9KTtcbiAgICAgIGlmIChwcm94aWVkID09PSB1cmwpIHtcbiAgICAgICAgY2FsbGJhY2soeyBjYW5jZWw6IGZhbHNlIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2FsbGJhY2soeyBjYW5jZWw6IGZhbHNlLCByZWRpcmVjdFVSTDogcHJveGllZCB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB3YWl0KGtleSwgKCkgPT4ge1xuICAgICAgICBsb2dnZXIud2FybihUQUcsIGBtYXliZSB0aW1lb3V0OmAsIHtcbiAgICAgICAgICBrZXksXG4gICAgICAgICAgdXJsLFxuICAgICAgICAgIHByb3hpZWQsXG4gICAgICAgICAgbWV0aG9kOiBkZXRhaWxzLm1ldGhvZCxcbiAgICAgICAgICBzb3VyY2UsXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIHJlcS5vbkhlYWRlcnNSZWNlaXZlZCgoeyByZXNwb25zZUhlYWRlcnMgfSwgY2FsbGJhY2spID0+IHtcbiAgICBkZWxldGUgcmVzcG9uc2VIZWFkZXJzPy5bXCJ4LWZyYW1lLW9wdGlvbnNcIl07XG4gICAgZGVsZXRlIHJlc3BvbnNlSGVhZGVycz8uW1wiWC1GcmFtZS1PcHRpb25zXCJdO1xuICAgIGRlbGV0ZSByZXNwb25zZUhlYWRlcnM/LltcImNvbnRlbnQtc2VjdXJpdHktcG9saWN5XCJdO1xuICAgIGRlbGV0ZSByZXNwb25zZUhlYWRlcnM/LltcIkNvbnRlbnQtU2VjdXJpdHktUG9saWN5XCJdO1xuICAgIGNhbGxiYWNrKHsgY2FuY2VsOiBmYWxzZSwgcmVzcG9uc2VIZWFkZXJzIH0pO1xuICB9KTtcblxuICByZXEub25Db21wbGV0ZWQoKGRldGFpbHMpID0+IHtcbiAgICBjb25zdCBrZXkgPSBgJHt3aW5kb3cuaWR9XyR7ZGV0YWlscy5pZH1gO1xuICAgIHNpZ25hbChrZXkpO1xuICAgIGxvZ2dlci5kZWJ1ZyhUQUcsIGBjb21wbGV0ZWQ6YCwge1xuICAgICAga2V5LFxuICAgICAgdXJsOiBkZXRhaWxzLnVybCxcbiAgICAgIG1ldGhvZDogZGV0YWlscy5tZXRob2QsXG4gICAgICBzdGF0dXNDb2RlOiBkZXRhaWxzLnN0YXR1c0NvZGUsXG4gICAgICBzb3VyY2UsXG4gICAgfSk7XG4gIH0pO1xuXG4gIHJlcS5vbkVycm9yT2NjdXJyZWQoKGRldGFpbHMpID0+IHtcbiAgICBjb25zdCBrZXkgPSBgJHt3aW5kb3cuaWR9XyR7ZGV0YWlscy5pZH1gO1xuICAgIHNpZ25hbChrZXkpO1xuICAgIGxvZ2dlci5lcnJvcihUQUcsIGBlcnJvcjpgLCB7XG4gICAgICBrZXksXG4gICAgICB1cmw6IGRldGFpbHMudXJsLFxuICAgICAgbWV0aG9kOiBkZXRhaWxzLm1ldGhvZCxcbiAgICAgIGVycm9yOiBkZXRhaWxzLmVycm9yLFxuICAgICAgc291cmNlLFxuICAgIH0pO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVuc2V0SW50ZXJjZXB0b3Iod2luZG93OiBCcm93c2VyV2luZG93KSB7XG4gIGNvbnN0IHJlcSA9IHdpbmRvdy53ZWJDb250ZW50cy5zZXNzaW9uLndlYlJlcXVlc3Q7XG4gIHJlcS5vbkJlZm9yZVJlcXVlc3QobnVsbCk7XG4gIHJlcS5vbkhlYWRlcnNSZWNlaXZlZChudWxsKTtcbiAgcmVxLm9uQ29tcGxldGVkKG51bGwpO1xuICByZXEub25FcnJvck9jY3VycmVkKG51bGwpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8yNy5cblxuaW1wb3J0IHsgQnJvd3NlcldpbmRvdyB9IGZyb20gXCJlbGVjdHJvblwiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4uL2Jhc2UvbG9nZ2luZ1wiO1xuaW1wb3J0IHsgdXNlUmV0cnkgfSBmcm9tIFwiLi4vYmFzZS9yZXRyeVwiO1xuaW1wb3J0IHsgc2xlZXAgfSBmcm9tIFwiLi4vYmFzZS90aW1pbmdcIjtcbmltcG9ydCB7IGNoZWNrSFRNTCB9IGZyb20gXCIuL2h0bWxfY2hlY2tcIjtcbmltcG9ydCB7IHByb3hpZWRVcmwsIHNldEludGVyY2VwdG9yLCB1bnNldEludGVyY2VwdG9yIH0gZnJvbSBcIi4vbmV0d29ya1wiO1xuaW1wb3J0IHsgY3JlYXRlU3RlZ29VUkwgfSBmcm9tIFwiLi9wcm90b2NvbFwiO1xuaW1wb3J0IHR5cGUgeyBSZW5kZXJPcHRpb25zIH0gZnJvbSBcIi4vc2NoZW1hXCI7XG5cbmNvbnN0IFRBRyA9IFwiW1dpbmRvd11cIjtcbmNvbnN0IFRJTUVPVVRfRVJST1IgPSBuZXcgRXJyb3IoXCJ3aW5kb3cgdGltZW91dFwiKTtcblxuaW50ZXJmYWNlIEZpbmlzaE9wdGlvbnMge1xuICBzb3VyY2U6IHN0cmluZztcbiAgd2luOiBCcm93c2VyV2luZG93O1xuICBhY3Rpb246ICgpID0+IHZvaWQ7XG4gIHRvbGVyYW50PzogYm9vbGVhbjtcbn1cblxuZnVuY3Rpb24gd2FpdEZvckZpbmlzaCh7IHNvdXJjZSwgd2luLCBhY3Rpb24sIHRvbGVyYW50IH06IEZpbmlzaE9wdGlvbnMpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBsZXQgaW50ZXJ2YWw6IE5vZGVKUy5UaW1lb3V0O1xuICAgIGxldCB0aW1lb3V0OiBOb2RlSlMuVGltZW91dDtcblxuICAgIGNvbnN0IGRvbmUgPSAoZXJyPzogdW5rbm93bikgPT4ge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbCk7XG4gICAgICBpZiAoZXJyKSByZWplY3QoZXJyKTtcbiAgICAgIGVsc2UgcmVzb2x2ZSgpO1xuICAgIH07XG5cbiAgICB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiBkb25lKFRJTUVPVVRfRVJST1IpLCAzMF8wMDApO1xuICAgIGNvbnN0IHN0ZWdvRnJhbWUgPSBuZXcgUHJvbWlzZTx2b2lkPigoYXR0YWNoZWQpID0+IHtcbiAgICAgIGludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgICBpZiAod2luLndlYkNvbnRlbnRzLm1haW5GcmFtZS5mcmFtZXNbMF0pIHtcbiAgICAgICAgICBsb2dnZXIuZGVidWcoVEFHLCBcInN0ZWdvLWZyYW1lLWF0dGFjaGVkOlwiLCB7IHNvdXJjZSB9KTtcbiAgICAgICAgICBjbGVhckludGVydmFsKGludGVydmFsKTtcbiAgICAgICAgICBhdHRhY2hlZCgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICB3aW4ud2ViQ29udGVudHMub25jZShcImRvbS1yZWFkeVwiLCBhc3luYyAoKSA9PiB7XG4gICAgICBsb2dnZXIuZGVidWcoVEFHLCBcImRvbS1yZWFkeTpcIiwgeyBzb3VyY2UgfSk7XG4gICAgICBpZiAodG9sZXJhbnQpIHtcbiAgICAgICAgYXdhaXQgc3RlZ29GcmFtZTtcbiAgICAgICAgZG9uZSgpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHdpbi53ZWJDb250ZW50cy5vbmNlKFwiZGlkLXN0b3AtbG9hZGluZ1wiLCBhc3luYyAoKSA9PiB7XG4gICAgICBsb2dnZXIuZGVidWcoVEFHLCBcImRpZC1zdG9wLWxvYWRpbmc6XCIsIHsgc291cmNlIH0pO1xuICAgICAgYXdhaXQgc3RlZ29GcmFtZTtcbiAgICAgIGRvbmUoKTtcbiAgICB9KTtcbiAgICB3aW4ud2ViQ29udGVudHMub25jZShcImRpZC1mcmFtZS1maW5pc2gtbG9hZFwiLCAoXywgaXNNYWluRnJhbWUsIGZyYW1lUHJvY2Vzc0lkLCBmcmFtZVJvdXRpbmdJZCkgPT4ge1xuICAgICAgbG9nZ2VyLmRlYnVnKFRBRywgc291cmNlLCBcImRpZC1mcmFtZS1maW5pc2gtbG9hZDpcIiwgeyBpc01haW5GcmFtZSwgZnJhbWVQcm9jZXNzSWQsIGZyYW1lUm91dGluZ0lkIH0pO1xuICAgIH0pO1xuICAgIHdpbi53ZWJDb250ZW50cy5vbmNlKFwiZGlkLWZhaWwtbG9hZFwiLCAoX2UsIGNvZGUsIGRlc2MsIHVybCkgPT5cbiAgICAgIGRvbmUobmV3IEVycm9yKGBkaWQtZmFpbC1sb2FkICR7eyB1cmwsIHNvdXJjZSwgY29kZSwgZGVzYyB9fWApKSxcbiAgICApO1xuICAgIHdpbi53ZWJDb250ZW50cy5vbmNlKFwicmVuZGVyLXByb2Nlc3MtZ29uZVwiLCAoX2UsIHsgZXhpdENvZGUsIHJlYXNvbiB9KSA9PlxuICAgICAgZG9uZShuZXcgRXJyb3IoYHJlbmRlci1wcm9jZXNzLWdvbmU6ICR7eyBzb3VyY2UsIGV4aXRDb2RlLCByZWFzb24gfX1gKSksXG4gICAgKTtcbiAgICBhY3Rpb24oKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHdhaXRGb3JEZXN0cm95KHdpbjogQnJvd3NlcldpbmRvdykge1xuICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcbiAgICB1bnNldEludGVyY2VwdG9yKHdpbik7XG4gICAgd2luLm9uY2UoXCJjbG9zZWRcIiwgcmVzb2x2ZSk7XG4gICAgd2luLmRlc3Ryb3koKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgV2luZG93T3B0aW9ucyB7XG4gIHNvdXJjZTogc3RyaW5nO1xuICBvbkNyZWF0ZWQ/OiAod2luZG93OiBCcm93c2VyV2luZG93KSA9PiBQcm9taXNlPHZvaWQ+O1xuICByZW5kZXJlcjogUmVuZGVyT3B0aW9ucztcbiAgd2FybXVwPzogYm9vbGVhbjtcbiAgdG9sZXJhbnQ/OiBib29sZWFuO1xufVxuXG5hc3luYyBmdW5jdGlvbiBvcGVuV2luZG93KHsgc291cmNlLCBvbkNyZWF0ZWQsIHJlbmRlcmVyLCB3YXJtdXAsIHRvbGVyYW50IH06IFdpbmRvd09wdGlvbnMpOiBQcm9taXNlPEJyb3dzZXJXaW5kb3c+IHtcbiAgY2hlY2tIVE1MKHNvdXJjZSk7XG5cbiAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0LCB1c2VJbm5lclByb3h5IH0gPSByZW5kZXJlcjtcbiAgY29uc3Qgc3JjID0gdXNlSW5uZXJQcm94eSA/IHByb3hpZWRVcmwoc291cmNlKSA6IHNvdXJjZTtcblxuICBjb25zdCB3aW4gPSBuZXcgQnJvd3NlcldpbmRvdyh7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0OiBoZWlnaHQgKyAxLFxuICAgIHNob3c6IGZhbHNlLFxuICAgIHRyYW5zcGFyZW50OiB0cnVlLFxuICAgIGJhY2tncm91bmRDb2xvcjogdW5kZWZpbmVkLFxuICAgIGZyYW1lOiBmYWxzZSxcbiAgICB3ZWJQcmVmZXJlbmNlczoge1xuICAgICAgb2Zmc2NyZWVuOiB0cnVlLFxuICAgICAgYmFja2dyb3VuZFRocm90dGxpbmc6IGZhbHNlLFxuICAgICAgbm9kZUludGVncmF0aW9uOiB0cnVlLFxuICAgICAgbm9kZUludGVncmF0aW9uSW5TdWJGcmFtZXM6IHRydWUsXG4gICAgICBub2RlSW50ZWdyYXRpb25JbldvcmtlcjogdHJ1ZSxcbiAgICAgIGNvbnRleHRJc29sYXRpb246IGZhbHNlLFxuICAgICAgd2ViU2VjdXJpdHk6IGZhbHNlLFxuICAgICAgYWxsb3dSdW5uaW5nSW5zZWN1cmVDb250ZW50OiB0cnVlLFxuICAgICAgZXhwZXJpbWVudGFsRmVhdHVyZXM6IHRydWUsXG4gICAgfSxcbiAgfSk7XG4gIHNldEludGVyY2VwdG9yKHsgc291cmNlLCB3aW5kb3c6IHdpbiwgdXNlSW5uZXJQcm94eSB9KTtcbiAgaWYgKCF3YXJtdXApIHtcbiAgICBhd2FpdCBvbkNyZWF0ZWQ/Lih3aW4pO1xuICB9XG5cbiAgd2luLndlYkNvbnRlbnRzLm9uKFwiY29uc29sZS1tZXNzYWdlXCIsICh7IGxldmVsLCBtZXNzYWdlLCBsaW5lTnVtYmVyLCBzb3VyY2VJZCB9KSA9PiB7XG4gICAgY29uc3QgbXNncyA9IFtUQUcsIFwiY29uc29sZTpcIiwgeyBtZXNzYWdlLCBsaW5lTnVtYmVyLCBzb3VyY2VJZCwgc291cmNlIH1dO1xuICAgIGxldmVsID09PSBcImVycm9yXCIgPyBsb2dnZXIuZXJyb3IoLi4ubXNncykgOiBsb2dnZXIuZGVidWcoLi4ubXNncyk7XG4gIH0pO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgdXJsID0gY3JlYXRlU3RlZ29VUkwoc3JjLCB7IHdpZHRoLCBoZWlnaHQgfSk7XG4gICAgYXdhaXQgd2FpdEZvckZpbmlzaCh7IHNvdXJjZSwgd2luLCBhY3Rpb246ICgpID0+IHdpbi5sb2FkVVJMKHVybCksIHRvbGVyYW50IH0pO1xuICB9IGNhdGNoIChlKSB7XG4gICAgYXdhaXQgd2FpdEZvckRlc3Ryb3kod2luKTtcbiAgICB0aHJvdyBlO1xuICB9XG5cbiAgcmV0dXJuIHdpbjtcbn1cblxuY29uc3Qgb3BlbldpbmRvd1dpdGhSZXRyeSA9IHVzZVJldHJ5KHsgZm46IG9wZW5XaW5kb3csIG1heEF0dGVtcHRzOiAyIH0pO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9hZFdpbmRvdyh7IHNvdXJjZSwgb25DcmVhdGVkLCByZW5kZXJlciB9OiBXaW5kb3dPcHRpb25zKTogUHJvbWlzZTxCcm93c2VyV2luZG93PiB7XG4gIGxldCB3YXJtdXA6IEJyb3dzZXJXaW5kb3cgfCB1bmRlZmluZWQ7XG4gIGxldCBlcnJvcjogdW5rbm93bjtcbiAgdHJ5IHtcbiAgICB3YXJtdXAgPSBhd2FpdCBvcGVuV2luZG93V2l0aFJldHJ5KHsgc291cmNlLCByZW5kZXJlciwgd2FybXVwOiB0cnVlIH0pO1xuICB9IGNhdGNoIChlKSB7XG4gICAgZXJyb3IgPSBlO1xuICB9XG5cbiAgY29uc3Qgb3BlbiA9ICgpID0+IHtcbiAgICByZXR1cm4gb3BlbldpbmRvdyh7XG4gICAgICBzb3VyY2UsXG4gICAgICByZW5kZXJlcixcbiAgICAgIG9uQ3JlYXRlZCxcbiAgICAgIHRvbGVyYW50OiByZW5kZXJlci53aW5kb3dUb2xlcmFudCxcbiAgICB9KTtcbiAgfTtcblxuICBpZiAocmVuZGVyZXIud2luZG93VG9sZXJhbnQgJiYgZXJyb3IgPT09IFRJTUVPVVRfRVJST1IpIHtcbiAgICBsb2dnZXIud2FybihUQUcsIGB3YXJtdXAgdGltZW91dDogJHtzb3VyY2V9LCBmYWxsaW5nIGJhY2sgdG8gZG9tLXJlYWR5YCk7XG4gICAgcmV0dXJuIGF3YWl0IG9wZW4oKTtcbiAgfVxuXG4gIGlmIChlcnJvcikge1xuICAgIGNvbnN0IHsgbWVzc2FnZSwgc3RhY2sgfSA9IGVycm9yIGFzIEVycm9yO1xuICAgIHRocm93IG5ldyBFcnJvcihgZmFpbGVkIHRvIHdhcm11cCB3aW5kb3c6ICR7SlNPTi5zdHJpbmdpZnkoeyBzb3VyY2UsIG1lc3NhZ2UsIHN0YWNrIH0pfWApO1xuICB9XG5cbiAgaWYgKHdhcm11cCkge1xuICAgIHdhcm11cC53ZWJDb250ZW50cy5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcbiAgICB1bnNldEludGVyY2VwdG9yKHdhcm11cCk7XG4gICAgYXdhaXQgc2xlZXAoMjAwMCk7XG4gICAgYXdhaXQgd2FpdEZvckRlc3Ryb3kod2FybXVwKTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IG9wZW4oKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGNvbnN0IHsgbWVzc2FnZSwgc3RhY2sgfSA9IGUgYXMgRXJyb3I7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBmYWlsZWQgdG8gbG9hZCB3aW5kb3c6ICR7SlNPTi5zdHJpbmdpZnkoeyBzb3VyY2UsIG1lc3NhZ2UsIHN0YWNrIH0pfWApO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA5LlxuXG5pbXBvcnQgeyB0eXBlIE5hdGl2ZUltYWdlIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBFbmNvZGVyUGlwZWxpbmUgfSBmcm9tIFwiLi4vYmFzZS9lbmNvZGVyL3BpcGVsaW5lXCI7XG5pbXBvcnQgeyBGcmFtZURyb3BTdGF0cyB9IGZyb20gXCIuLi9iYXNlL2ZyYW1lX2Ryb3BcIjtcbmltcG9ydCB7IGlzRW1wdHkgfSBmcm9tIFwiLi4vYmFzZS9pbWFnZVwiO1xuaW1wb3J0IHsgc2V0dXBBdWRpb0NhcHR1cmUsIHR5cGUgQXVkaW9DYXB0dXJlIH0gZnJvbSBcIi4vYXVkaW9cIjtcbmltcG9ydCB0eXBlIHsgSXBjRG9uZVBheWxvYWQsIElwY1dyaXRlciB9IGZyb20gXCIuL2lwY1wiO1xuaW1wb3J0IHR5cGUgeyBSZW5kZXJPcHRpb25zIH0gZnJvbSBcIi4vc2NoZW1hXCI7XG5pbXBvcnQgeyBkZWNvZGVTdGVnbywgc3RhcnRTdGVnbywgc3RvcFN0ZWdvIH0gZnJvbSBcIi4vc3RlZ29cIjtcbmltcG9ydCB7IGxvYWRXaW5kb3cgfSBmcm9tIFwiLi93aW5kb3dcIjtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlbmRlcih3cml0ZXI6IElwY1dyaXRlciwgc291cmNlOiBzdHJpbmcsIG9wdGlvbnM6IFJlbmRlck9wdGlvbnMpOiBQcm9taXNlPElwY0RvbmVQYXlsb2FkPiB7XG4gIGNvbnN0IHsgZnBzLCB3aWR0aCwgaGVpZ2h0LCBkdXJhdGlvbiwgd2l0aEF1ZGlvLCBvdXRGaWxlLCBkaXNhYmxlSHdDb2RlYyB9ID0gb3B0aW9ucztcblxuICBhd2FpdCB1c2luZyBlbmNvZGVyID0gYXdhaXQgRW5jb2RlclBpcGVsaW5lLmNyZWF0ZSh7IHdpZHRoLCBoZWlnaHQsIGZwcywgb3V0RmlsZSwgd2l0aEF1ZGlvLCBkaXNhYmxlSHdDb2RlYyB9KTtcblxuICBjb25zdCB0b3RhbCA9IE1hdGguY2VpbChmcHMgKiBkdXJhdGlvbik7XG4gIGNvbnN0IGZyYW1lSW50ZXJ2YWwgPSAxMDAwIC8gZnBzO1xuXG4gIGxldCB3cml0dGVuID0gMDtcbiAgbGV0IGxhc3RXcml0dGVuVGltZTogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICBsZXQgcHJvZ3Jlc3MgPSAwO1xuICBsZXQgZW5jb2RlRXJyb3I6IEVycm9yIHwgdW5kZWZpbmVkO1xuICBsZXQgcmVzb2x2ZXI6ICgoKSA9PiB2b2lkKSB8IHVuZGVmaW5lZDtcbiAgbGV0IHJlamVjdGVyOiAoKHJlYXNvbj86IHVua25vd24pID0+IHZvaWQpIHwgdW5kZWZpbmVkO1xuICBjb25zdCBkcm9wU3RhdHMgPSBuZXcgRnJhbWVEcm9wU3RhdHMoZnBzKTtcblxuICBsZXQgYXVkaW86IEF1ZGlvQ2FwdHVyZSB8IHVuZGVmaW5lZDtcbiAgY29uc3Qgc2NoZWR1bGVGcmFtZSA9IChmcmFtZTogQnVmZmVyKSA9PiB7XG4gICAgd3JpdHRlbisrO1xuICAgIGVuY29kZXIuZW5jb2RlQkdSQShmcmFtZSkuY2F0Y2goKGUpID0+IChlbmNvZGVFcnJvciA/Pz0gZSkpO1xuICB9O1xuXG4gIGNvbnN0IHBhaW50ID0gKF9lOiB1bmtub3duLCBfcjogdW5rbm93biwgaW1hZ2U6IE5hdGl2ZUltYWdlKSA9PiB7XG4gICAgaWYgKGVuY29kZUVycm9yKSB7XG4gICAgICByZWplY3Rlcj8uKGVuY29kZUVycm9yKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoaXNFbXB0eShpbWFnZSkpIHJldHVybjtcblxuICAgIC8vIERlY29kZSBzdGVnbyB0aW1lc3RhbXAgZnJvbSB0aGUgYm90dG9tIHBpeGVsIHJvdyB3aXRob3V0IGZ1bGwgYml0bWFwIGNvcHlcbiAgICBjb25zdCBiaXRtYXAgPSBpbWFnZS50b0JpdG1hcCgpO1xuICAgIGNvbnN0IGN1cnJlbnRUaW1lID0gZGVjb2RlU3RlZ28oYml0bWFwLCBpbWFnZS5nZXRTaXplKCkpO1xuICAgIGlmIChjdXJyZW50VGltZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBlbmNvZGVFcnJvciA/Pz0gbmV3IEVycm9yKGBubyB0aW1lc3RhbXAgQCAke3dyaXR0ZW59YCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gU2tpcCBmcmFtZXMgdGhhdCBhcnJpdmUgdG9vIHNvb24gKDwgODAlIG9mIGZyYW1lIGludGVydmFsKVxuICAgIGlmIChsYXN0V3JpdHRlblRpbWUgIT09IHVuZGVmaW5lZCAmJiBjdXJyZW50VGltZSAtIGxhc3RXcml0dGVuVGltZSA8IGZyYW1lSW50ZXJ2YWwgKiAwLjgpIHJldHVybjtcblxuICAgIGNvbnN0IGNyb3BwZWQgPSBCdWZmZXIuZnJvbShiaXRtYXAuYnVmZmVyLCBiaXRtYXAuYnl0ZU9mZnNldCwgaGVpZ2h0ICogd2lkdGggKiA0KTtcblxuICAgIGlmIChsYXN0V3JpdHRlblRpbWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgc2NoZWR1bGVGcmFtZShjcm9wcGVkKTtcbiAgICAgIGRyb3BTdGF0cy53cm90ZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB0aW1lRGVsdGEgPSBjdXJyZW50VGltZSAtIGxhc3RXcml0dGVuVGltZTtcbiAgICAgIGlmICh0aW1lRGVsdGEgPD0gZnJhbWVJbnRlcnZhbCAqIDEuMikge1xuICAgICAgICBzY2hlZHVsZUZyYW1lKGNyb3BwZWQpO1xuICAgICAgICBkcm9wU3RhdHMud3JvdGUoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGZyYW1lc1RvSW5zZXJ0ID0gTWF0aC5yb3VuZCh0aW1lRGVsdGEgLyBmcmFtZUludGVydmFsKTtcbiAgICAgICAgZHJvcFN0YXRzLmRyb3BwZWQoZnJhbWVzVG9JbnNlcnQgLSAxKTtcbiAgICAgICAgZHJvcFN0YXRzLndyb3RlKCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZnJhbWVzVG9JbnNlcnQgJiYgd3JpdHRlbiA8IHRvdGFsOyBpKyspIHtcbiAgICAgICAgICBzY2hlZHVsZUZyYW1lKGNyb3BwZWQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGxhc3RXcml0dGVuVGltZSA9IGN1cnJlbnRUaW1lO1xuXG4gICAgY29uc3QgbmV3UHJvZ3Jlc3MgPSBNYXRoLmZsb29yKCh3cml0dGVuIC8gdG90YWwpICogMTAwKTtcbiAgICBpZiAoTWF0aC5hYnMobmV3UHJvZ3Jlc3MgLSBwcm9ncmVzcykgPiAxMCkge1xuICAgICAgcHJvZ3Jlc3MgPSBuZXdQcm9ncmVzcztcbiAgICAgIHdyaXRlci53cml0ZVByb2dyZXNzKHByb2dyZXNzKTtcbiAgICB9XG5cbiAgICBjb25zdCBkdXJhdGlvbk1zID0gZHVyYXRpb24gKiAxMDAwO1xuICAgIGlmIChjdXJyZW50VGltZSA+PSBkdXJhdGlvbk1zIC0gZnJhbWVJbnRlcnZhbCAqIDAuNSB8fCB3cml0dGVuID49IHRvdGFsKSB7XG4gICAgICByZXNvbHZlcj8uKCk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IHdpbiA9IGF3YWl0IGxvYWRXaW5kb3coe1xuICAgIHNvdXJjZSxcbiAgICByZW5kZXJlcjogb3B0aW9ucyxcbiAgICBvbkNyZWF0ZWQ6IGFzeW5jICgpID0+IHtcbiAgICAgIGlmICh3aXRoQXVkaW8pIHtcbiAgICAgICAgYXVkaW8gPSBhd2FpdCBzZXR1cEF1ZGlvQ2FwdHVyZSh7XG4gICAgICAgICAgZW5jb2RlcixcbiAgICAgICAgICBnZXRWaWRlb1RpbWVNczogKCkgPT4gbGFzdFdyaXR0ZW5UaW1lID8/IDAsXG4gICAgICAgICAgb25FcnJvcjogKGUpID0+IChlbmNvZGVFcnJvciA/Pz0gZSksXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sXG4gIH0pO1xuICBjb25zdCBjZHAgPSB3aW4ud2ViQ29udGVudHMuZGVidWdnZXI7XG4gIGNkcC5hdHRhY2goXCIxLjNcIik7XG5cbiAgY29uc3QgbWFpbiA9IHdpbi53ZWJDb250ZW50cy5tYWluRnJhbWU7XG4gIHdpbi53ZWJDb250ZW50cy5zdG9wUGFpbnRpbmcoKTtcbiAgd2luLndlYkNvbnRlbnRzLnNldEZyYW1lUmF0ZShmcHMpO1xuICB3aW4ud2ViQ29udGVudHMub24oXCJwYWludFwiLCBwYWludCk7XG4gIHdpbi53ZWJDb250ZW50cy5zdGFydFBhaW50aW5nKCk7XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCBzdGFydFN0ZWdvKG1haW4pO1xuICAgIGF3YWl0IG5ldyBQcm9taXNlPHZvaWQ+KChyLCBqKSA9PiAoW3Jlc29sdmVyLCByZWplY3Rlcl0gPSBbciwgal0pKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCBzdG9wU3RlZ28obWFpbik7XG4gICAgd2luLndlYkNvbnRlbnRzLm9mZihcInBhaW50XCIsIHBhaW50KTtcbiAgICB3aW4uY2xvc2UoKTtcbiAgICBhd2FpdCBhdWRpbz8udGVhcmRvd24oKTtcbiAgICBhd2FpdCBlbmNvZGVyLmZpbmlzaCgpO1xuICB9XG5cbiAgaWYgKGVuY29kZUVycm9yIHx8IHdyaXR0ZW4gPT09IDApIHtcbiAgICB0aHJvdyBlbmNvZGVFcnJvciA/PyBuZXcgRXJyb3IoXCJubyBmcmFtZXMgY2FwdHVyZWRcIik7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgZHJvcFNjb3JlID0gZHJvcFN0YXRzLmZpbmFsaXplKCk7XG4gICAgcmV0dXJuIHsgd3JpdHRlbiwgamFuazogZHJvcFNjb3JlLmphbmssIG91dEZpbGUgfTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMy8xMy5cblxuaW1wb3J0IHR5cGUgeyBEZWJ1Z2dlciB9IGZyb20gXCJlbGVjdHJvblwiO1xuXG5jb25zdCBBRFZBTkNFX1RJTUVPVVRfTVMgPSAzMF8wMDA7XG5cbmV4cG9ydCBmdW5jdGlvbiBhZHZhbmNlVmlydHVhbFRpbWUoY2RwOiBEZWJ1Z2dlciwgYnVkZ2V0OiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjZHAub2ZmKFwibWVzc2FnZVwiLCBoYW5kbGVyKTtcbiAgICAgIHJlamVjdChuZXcgRXJyb3IoYGFkdmFuY2VWaXJ0dWFsVGltZSB0aW1lZCBvdXQgYWZ0ZXIgJHtBRFZBTkNFX1RJTUVPVVRfTVN9bXNgKSk7XG4gICAgfSwgQURWQU5DRV9USU1FT1VUX01TKTtcblxuICAgIGNvbnN0IGhhbmRsZXIgPSAoXzogRWxlY3Ryb24uRXZlbnQsIG1ldGhvZDogc3RyaW5nKSA9PiB7XG4gICAgICBpZiAobWV0aG9kID09PSBcIkVtdWxhdGlvbi52aXJ0dWFsVGltZUJ1ZGdldEV4cGlyZWRcIikge1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgIGNkcC5vZmYoXCJtZXNzYWdlXCIsIGhhbmRsZXIpO1xuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjZHAub24oXCJtZXNzYWdlXCIsIGhhbmRsZXIpO1xuICAgIGNkcC5zZW5kQ29tbWFuZChcIkVtdWxhdGlvbi5zZXRWaXJ0dWFsVGltZVBvbGljeVwiLCB7XG4gICAgICBwb2xpY3k6IFwiYWR2YW5jZVwiLFxuICAgICAgYnVkZ2V0LFxuICAgIH0pO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhdXNlVmlydHVhbFRpbWUoY2RwOiBEZWJ1Z2dlcik6IFByb21pc2U8dm9pZD4ge1xuICByZXR1cm4gY2RwLnNlbmRDb21tYW5kKFwiRW11bGF0aW9uLnNldFZpcnR1YWxUaW1lUG9saWN5XCIsIHsgcG9saWN5OiBcInBhdXNlXCIgfSk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzI3LlxuXG5pbXBvcnQgeyBIYXJkd2FyZUNvbnRleHQgfSBmcm9tIFwibm9kZS1hdi9hcGlcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuL2xvZ2dpbmdcIjtcblxuY29uc3QgVEFHID0gXCJbSFdBY2NlbF1cIjtcblxuYXN5bmMgZnVuY3Rpb24gZGV0ZWN0R1BVRHJpdmVyKCkge1xuICBjb25zdCBodyA9IEhhcmR3YXJlQ29udGV4dC5hdXRvKCk7XG4gIGNvbnN0IHJlc3VsdCA9IGh3ICE9PSBudWxsO1xuICBodz8uZGlzcG9zZSgpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgY29uc3QgY2FuSVVzZUdQVSA9IGRldGVjdEdQVURyaXZlcigpLnRoZW4oKHJlc3VsdCkgPT4ge1xuICBsb2dnZXIuZGVidWcoVEFHLCBcImdwdTpcIiwgcmVzdWx0KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn0pO1xuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8wMS5cblxuaW1wb3J0IHR5cGUgeyBXZWJGcmFtZU1haW4gfSBmcm9tIFwiZWxlY3Ryb25cIjtcblxuZXhwb3J0IGNvbnN0IFRJQ0tfU1lNQk9MID0gXCJfX3B1cF90aWNrX19cIjtcblxuY29uc3QgSE9PSyA9IGAoZnVuY3Rpb24oKSB7XG4gIGlmICh3aW5kb3cuc2VsZiA9PT0gd2luZG93LnRvcCkgcmV0dXJuO1xuICBpZiAodHlwZW9mICR7VElDS19TWU1CT0x9ICE9PSAndW5kZWZpbmVkJykgcmV0dXJuO1xuXG4gIGNvbnN0IG9yaWcgPSB7XG4gICAgRGF0ZTogRGF0ZSxcbiAgICBkYXRlTm93OiBEYXRlLm5vdy5iaW5kKERhdGUpLFxuICAgIHBlcmZvcm1hbmNlTm93OiBwZXJmb3JtYW5jZS5ub3cuYmluZChwZXJmb3JtYW5jZSksXG4gICAgcmFmOiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUuYmluZCh3aW5kb3cpLFxuICAgIGNhZjogY2FuY2VsQW5pbWF0aW9uRnJhbWUuYmluZCh3aW5kb3cpLFxuICAgIHNldFRpbWVvdXQ6IHNldFRpbWVvdXQuYmluZCh3aW5kb3cpLFxuICAgIGNsZWFyVGltZW91dDogY2xlYXJUaW1lb3V0LmJpbmQod2luZG93KSxcbiAgICBzZXRJbnRlcnZhbDogc2V0SW50ZXJ2YWwuYmluZCh3aW5kb3cpLFxuICAgIGNsZWFySW50ZXJ2YWw6IGNsZWFySW50ZXJ2YWwuYmluZCh3aW5kb3cpLFxuICB9O1xuXG4gIGxldCBjdXJyTXMgPSAwO1xuICBsZXQgcmFmUXVldWUgPSBbXTtcbiAgY29uc3QgdGltZXJzID0ge307XG4gIGxldCBuZXh0SWQgPSAxO1xuICBjb25zdCBkYXRlT3JpZ2luID0gbmV3IG9yaWcuRGF0ZSgpO1xuICBjb25zdCBwZXJmT3JpZ2luID0gb3JpZy5wZXJmb3JtYW5jZU5vdygpO1xuXG4gIHBlcmZvcm1hbmNlLm5vdyA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gcGVyZk9yaWdpbiArIGN1cnJNczsgfTtcbiAgRGF0ZS5ub3cgPSBmdW5jdGlvbigpIHsgcmV0dXJuIGRhdGVPcmlnaW4uZ2V0VGltZSgpICsgY3Vyck1zOyB9O1xuICBEYXRlID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIE8gPSBvcmlnLkRhdGU7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHJldHVybiBuZXcgTyhkYXRlT3JpZ2luLmdldFRpbWUoKSArIGN1cnJNcyk7XG4gICAgcmV0dXJuIG5ldyAoRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQuYXBwbHkoTywgW251bGxdLmNvbmNhdChBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpKSkpKCk7XG4gIH07XG4gIERhdGUubm93ID0gZnVuY3Rpb24oKSB7IHJldHVybiBkYXRlT3JpZ2luLmdldFRpbWUoKSArIGN1cnJNczsgfTtcbiAgRGF0ZS5wYXJzZSA9IG9yaWcuRGF0ZS5wYXJzZTtcbiAgRGF0ZS5VVEMgPSBvcmlnLkRhdGUuVVRDO1xuICBEYXRlLnByb3RvdHlwZSA9IG9yaWcuRGF0ZS5wcm90b3R5cGU7XG5cbiAgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSA9IGZ1bmN0aW9uKGNiKSB7XG4gICAgY29uc3QgaWQgPSBuZXh0SWQrKztcbiAgICByYWZRdWV1ZS5wdXNoKHsgaWQsIGNiIH0pO1xuICAgIHJldHVybiBpZDtcbiAgfTtcbiAgd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lID0gZnVuY3Rpb24oaWQpIHtcbiAgICByYWZRdWV1ZSA9IHJhZlF1ZXVlLmZpbHRlcigocikgPT4gci5pZCAhPT0gaWQpO1xuICB9O1xuXG4gIHdpbmRvdy5zZXRUaW1lb3V0ID0gZnVuY3Rpb24oY2IsIGRlbGF5LCAuLi5hcmdzKSB7XG4gICAgY29uc3QgaWQgPSBuZXh0SWQrKztcbiAgICB0aW1lcnNbaWRdID0geyB0eXBlOiAndGltZW91dCcsIGNiLCBkZWxheTogZGVsYXkgfHwgMCwgbmV4dDogY3Vyck1zICsgKGRlbGF5IHx8IDApLCBhcmdzIH07XG4gICAgcmV0dXJuIGlkO1xuICB9O1xuICB3aW5kb3cuY2xlYXJUaW1lb3V0ID0gZnVuY3Rpb24oaWQpIHsgZGVsZXRlIHRpbWVyc1tpZF07IH07XG5cbiAgd2luZG93LnNldEludGVydmFsID0gZnVuY3Rpb24oY2IsIGRlbGF5LCAuLi5hcmdzKSB7XG4gICAgY29uc3QgaWQgPSBuZXh0SWQrKztcbiAgICBjb25zdCBkID0gTWF0aC5tYXgoZGVsYXkgfHwgMCwgMSk7XG4gICAgdGltZXJzW2lkXSA9IHsgdHlwZTogJ2ludGVydmFsJywgY2IsIGRlbGF5OiBkLCBuZXh0OiBjdXJyTXMgKyBkLCBhcmdzIH07XG4gICAgcmV0dXJuIGlkO1xuICB9O1xuICB3aW5kb3cuY2xlYXJJbnRlcnZhbCA9IGZ1bmN0aW9uKGlkKSB7IGRlbGV0ZSB0aW1lcnNbaWRdOyB9O1xuXG4gIGZ1bmN0aW9uIHByb2Nlc3ModGltZXN0YW1wTXMpIHtcbiAgICBjdXJyTXMgPSB0aW1lc3RhbXBNcztcbiAgICBkb2N1bWVudC5nZXRBbmltYXRpb25zKCkuZm9yRWFjaChhID0+IHtcbiAgICAgIGEucGF1c2UoKTtcbiAgICAgIGEuY3VycmVudFRpbWUgPSBjdXJyTXM7XG4gICAgfSk7XG4gICAgY29uc3QgaWRzID0gT2JqZWN0LmtleXModGltZXJzKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlkcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgdCA9IHRpbWVyc1tpZHNbaV1dO1xuICAgICAgaWYgKCF0KSBjb250aW51ZTtcbiAgICAgIHdoaWxlICh0Lm5leHQgPD0gY3Vyck1zKSB7XG4gICAgICAgIGlmICh0eXBlb2YgdC5jYiA9PT0gJ3N0cmluZycpIGV2YWwodC5jYik7IGVsc2UgdC5jYi5hcHBseSh1bmRlZmluZWQsIHQuYXJncyk7XG4gICAgICAgIGlmICh0LnR5cGUgPT09ICd0aW1lb3V0JykgeyBkZWxldGUgdGltZXJzW2lkc1tpXV07IGJyZWFrOyB9XG4gICAgICAgIHQubmV4dCArPSB0LmRlbGF5O1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCByYWZzID0gcmFmUXVldWUuc3BsaWNlKDApO1xuICAgIGZvciAobGV0IGogPSAwOyBqIDwgcmFmcy5sZW5ndGg7IGorKykge1xuICAgICAgcmFmc1tqXS5jYihjdXJyTXMpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGVqZWN0KCkge1xuICAgIERhdGUgPSBvcmlnLkRhdGU7XG4gICAgcGVyZm9ybWFuY2Uubm93ID0gb3JpZy5wZXJmb3JtYW5jZU5vdztcbiAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gb3JpZy5yYWY7XG4gICAgd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lID0gb3JpZy5jYWY7XG4gICAgd2luZG93LnNldFRpbWVvdXQgPSBvcmlnLnNldFRpbWVvdXQ7XG4gICAgd2luZG93LmNsZWFyVGltZW91dCA9IG9yaWcuY2xlYXJUaW1lb3V0O1xuICAgIHdpbmRvdy5zZXRJbnRlcnZhbCA9IG9yaWcuc2V0SW50ZXJ2YWw7XG4gICAgd2luZG93LmNsZWFySW50ZXJ2YWwgPSBvcmlnLmNsZWFySW50ZXJ2YWw7XG4gICAgZGVsZXRlIHdpbmRvdy4ke1RJQ0tfU1lNQk9MfTtcbiAgfVxuXG4gIHdpbmRvdy4ke1RJQ0tfU1lNQk9MfSA9IHsgcHJvY2VzczogcHJvY2VzcywgZWplY3Q6IGVqZWN0IH07XG59KSgpO2A7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB0aWNrKGZyYW1lOiBXZWJGcmFtZU1haW4gfCB1bmRlZmluZWQsIHRpbWVzdGFtcE1zOiBudW1iZXIpIHtcbiAgdHJ5IHtcbiAgICBhd2FpdCBmcmFtZT8uZXhlY3V0ZUphdmFTY3JpcHQoYCR7SE9PS30gJHtUSUNLX1NZTUJPTH0ucHJvY2Vzcygke3RpbWVzdGFtcE1zfSlgKTtcbiAgfSBjYXRjaCB7XG4gICAgLy8gTk9URShBdXRva2FrYSk6XG4gICAgLy8gU2lkZS1lZmZlY3RzIG1heSB0aHJvdyAoZS5nLiB1bmNhdWdodCBlcnJvciBvbiBhbmltYXRpb24gY2FsbGJhY2spLCBpZ25vcmUgdG8gbGV0IHJlY29yZGVyIGNvbnRpbnVlXG4gICAgLy8gVGhlIGVycm9ycyB3aWxsIGJlIGRpc3BhdGNoZWQgdG8gd2luZG93IGNvbnNvbGUsIGp1c3QgbGlrZSBob3cgcmVuZGVyLnRzIHdvcmtzXG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDMvMTMuXG5cbmltcG9ydCB7IHR5cGUgQnJvd3NlcldpbmRvdywgdHlwZSBOYXRpdmVJbWFnZSwgdHlwZSBTaXplIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBhZHZhbmNlVmlydHVhbFRpbWUsIHBhdXNlVmlydHVhbFRpbWUgfSBmcm9tIFwiLi4vYmFzZS9jZHBcIjtcbmltcG9ydCB7IEVuY29kZXJQaXBlbGluZSB9IGZyb20gXCIuLi9iYXNlL2VuY29kZXIvcGlwZWxpbmVcIjtcbmltcG9ydCB7IGNhbklVc2VHUFUgfSBmcm9tIFwiLi4vYmFzZS9od2FjY2VsXCI7XG5pbXBvcnQgeyBpc0VtcHR5IH0gZnJvbSBcIi4uL2Jhc2UvaW1hZ2VcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuLi9iYXNlL2xvZ2dpbmdcIjtcbmltcG9ydCB7IElwY1dyaXRlciwgdHlwZSBJcGNEb25lUGF5bG9hZCB9IGZyb20gXCIuL2lwY1wiO1xuaW1wb3J0IHR5cGUgeyBSZW5kZXJPcHRpb25zIH0gZnJvbSBcIi4vc2NoZW1hXCI7XG5pbXBvcnQgeyBkZWNvZGVTdGVnbywgc3dhcEJ1ZmZlciB9IGZyb20gXCIuL3N0ZWdvXCI7XG5pbXBvcnQgeyB0aWNrIH0gZnJvbSBcIi4vdGlja1wiO1xuaW1wb3J0IHsgbG9hZFdpbmRvdyB9IGZyb20gXCIuL3dpbmRvd1wiO1xuXG5jb25zdCBUQUcgPSBcIltTaG9vdF1cIjtcblxuYXN5bmMgZnVuY3Rpb24gcGFpbnQod2luOiBCcm93c2VyV2luZG93LCBzaXplOiBTaXplLCBtczogbnVtYmVyKTogUHJvbWlzZTxCdWZmZXI+IHtcbiAgY29uc3QgaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgbG9nZ2VyLndhcm4oVEFHLCBgcmVuZGVyZXIgaXMgZXh0cmVtZWx5IHNsb3cgQCAke21zfWApO1xuICB9LCAxMDAwKTtcbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgbmV3IFByb21pc2U8QnVmZmVyPigocmVzb2x2ZSkgPT4ge1xuICAgICAgY29uc3QgaGFuZGxlciA9IChfZTogdW5rbm93biwgX2Q6IHVua25vd24sIGltYWdlOiBOYXRpdmVJbWFnZSkgPT4ge1xuICAgICAgICBpZiAoaXNFbXB0eShpbWFnZSkpIHJldHVybjtcbiAgICAgICAgY29uc3QgYml0bWFwID0gaW1hZ2UudG9CaXRtYXAoKTtcbiAgICAgICAgY29uc3QgdHMgPSBkZWNvZGVTdGVnbyhiaXRtYXAsIGltYWdlLmdldFNpemUoKSk7XG4gICAgICAgIGlmICh0cyA9PT0gdW5kZWZpbmVkIHx8IE1hdGguYWJzKHRzIC0gbXMpID4gMSkge1xuICAgICAgICAgIGxvZ2dlci53YXJuKFRBRywgYHNraXAgZnJhbWU6ICR7dHN9LCBleHBlY3RlZDogJHttc30sIHRoZSByZW5kZXIgaXMgc2xvd2ApO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB3aW4ud2ViQ29udGVudHMuc3RvcFBhaW50aW5nKCk7XG4gICAgICAgIHdpbi53ZWJDb250ZW50cy5vZmYoXCJwYWludFwiLCBoYW5kbGVyKTtcbiAgICAgICAgcmVzb2x2ZShCdWZmZXIuZnJvbShiaXRtYXAuYnVmZmVyLCBiaXRtYXAuYnl0ZU9mZnNldCwgc2l6ZS5oZWlnaHQgKiBzaXplLndpZHRoICogNCkpO1xuICAgICAgfTtcbiAgICAgIHdpbi53ZWJDb250ZW50cy5zdG9wUGFpbnRpbmcoKTtcbiAgICAgIHdpbi53ZWJDb250ZW50cy5vbihcInBhaW50XCIsIGhhbmRsZXIpO1xuICAgICAgd2luLndlYkNvbnRlbnRzLnN0YXJ0UGFpbnRpbmcoKTtcbiAgICB9KTtcbiAgfSBmaW5hbGx5IHtcbiAgICBjbGVhckludGVydmFsKGludGVydmFsKTtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2hvb3Qod3JpdGVyOiBJcGNXcml0ZXIsIHNvdXJjZTogc3RyaW5nLCBvcHRpb25zOiBSZW5kZXJPcHRpb25zKTogUHJvbWlzZTxJcGNEb25lUGF5bG9hZD4ge1xuICBjb25zdCB7IGZwcywgd2lkdGgsIGhlaWdodCwgZHVyYXRpb24sIHdpdGhBdWRpbywgb3V0RmlsZSwgZGlzYWJsZUdwdSwgZGlzYWJsZUh3Q29kZWMgfSA9IG9wdGlvbnM7XG4gIGlmICh3aXRoQXVkaW8pIGxvZ2dlci53YXJuKFRBRywgXCJhdWRpbyB3aWxsIGJlIGlnbm9yZWQgb24gdGhpcyBtb2RlXCIpO1xuXG4gIGF3YWl0IHVzaW5nIHBpcGVsaW5lID0gYXdhaXQgRW5jb2RlclBpcGVsaW5lLmNyZWF0ZSh7IHdpZHRoLCBoZWlnaHQsIGZwcywgb3V0RmlsZSwgd2l0aEF1ZGlvLCBkaXNhYmxlSHdDb2RlYyB9KTtcblxuICBjb25zdCB0b3RhbCA9IE1hdGguY2VpbChmcHMgKiBkdXJhdGlvbik7XG4gIGNvbnN0IGZyYW1lSW50ZXJ2YWwgPSAxMDAwIC8gZnBzO1xuICBsZXQgd3JpdHRlbiA9IDA7XG4gIGxldCBwcm9ncmVzcyA9IDA7XG5cbiAgY29uc3QgZ3B1ID0gKGF3YWl0IGNhbklVc2VHUFUpICYmICFkaXNhYmxlR3B1O1xuICBjb25zdCB3aW4gPSBhd2FpdCBsb2FkV2luZG93KHsgc291cmNlLCByZW5kZXJlcjogb3B0aW9ucyB9KTtcbiAgY29uc3QgY2RwID0gd2luLndlYkNvbnRlbnRzLmRlYnVnZ2VyO1xuICBjb25zdCBtYWluID0gd2luLndlYkNvbnRlbnRzLm1haW5GcmFtZTtcbiAgY29uc3QgaWZyYW1lID0gbWFpbi5mcmFtZXNbMF07XG4gIHRyeSB7XG4gICAgY2RwLmF0dGFjaChcIjEuM1wiKTtcblxuICAgIGNvbnN0IHJlbmRlckZwcyA9IGdwdSA/IDI0MCA6IGZwcztcbiAgICBjb25zdCByZW5kZXJJbnRlcnZhbCA9IDEwMDAgLyByZW5kZXJGcHM7XG4gICAgbG9nZ2VyLmRlYnVnKFRBRywgeyBmcHMsIGZyYW1lSW50ZXJ2YWwsIHJlbmRlckZwcywgcmVuZGVySW50ZXJ2YWwgfSk7XG5cbiAgICAvLyBOT1RFKEF1dG9rYWthKTpcbiAgICAvLyAxLiB3aXRoIGdwdSwgdGhlIHBhaW50IGV2ZW50IGNhbGxiYWNrIGF0IHRoZSBleGFjdCBwb2ludCB3aXRob3V0IGV4dHJhIHJlbmRlcmluZ3NcbiAgICAvLyAyLiB3aXRob3V0IGdwdSwgcGFpbnQgd2lsbCBjYWxsYmFjayBlYWNoIGZyYW1lLCBzbyB3ZSBzZXQgcmVxdWlyZWQgZnBzIHRvIHByZXZlbnQgdG9vIGhpZ2ggQ1BVIHVzYWdlXG4gICAgd2luLndlYkNvbnRlbnRzLnN0b3BQYWludGluZygpO1xuICAgIHdpbi53ZWJDb250ZW50cy5zZXRGcmFtZVJhdGUocmVuZGVyRnBzKTtcblxuICAgIGF3YWl0IHBhdXNlVmlydHVhbFRpbWUoY2RwKTtcbiAgICBmb3IgKGxldCBmcmFtZSA9IDA7IGZyYW1lIDwgdG90YWw7IGZyYW1lKyspIHtcbiAgICAgIGNvbnN0IGZyYW1lTXMgPSAoZnJhbWUgKyAxKSAqIGZyYW1lSW50ZXJ2YWw7XG5cbiAgICAgIGF3YWl0IHRpY2soaWZyYW1lLCBmcmFtZU1zKTtcbiAgICAgIGF3YWl0IHN3YXBCdWZmZXIobWFpbiwgZnJhbWVNcyk7XG4gICAgICBhd2FpdCBhZHZhbmNlVmlydHVhbFRpbWUoY2RwLCBmcmFtZUludGVydmFsKTtcblxuICAgICAgY29uc3QgYml0bWFwID0gYXdhaXQgcGFpbnQod2luLCB7IHdpZHRoLCBoZWlnaHQgfSwgZnJhbWVNcyk7XG4gICAgICBhd2FpdCBwaXBlbGluZS5lbmNvZGVCR1JBKGJpdG1hcCk7XG4gICAgICB3cml0dGVuKys7XG5cbiAgICAgIGNvbnN0IG5ld1Byb2dyZXNzID0gTWF0aC5mbG9vcigod3JpdHRlbiAvIHRvdGFsKSAqIDEwMCk7XG4gICAgICBpZiAoTWF0aC5hYnMobmV3UHJvZ3Jlc3MgLSBwcm9ncmVzcykgPiAxMCkge1xuICAgICAgICBwcm9ncmVzcyA9IG5ld1Byb2dyZXNzO1xuICAgICAgICB3cml0ZXIud3JpdGVQcm9ncmVzcyhwcm9ncmVzcyk7XG4gICAgICB9XG4gICAgfVxuICB9IGZpbmFsbHkge1xuICAgIGNkcC5kZXRhY2goKTtcbiAgICB3aW4uY2xvc2UoKTtcbiAgICBhd2FpdCBwaXBlbGluZS5maW5pc2goKTtcbiAgfVxuXG4gIGlmICh3cml0dGVuID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwibm8gZnJhbWVzIGNhcHR1cmVkXCIpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB7IHdyaXR0ZW4sIGphbms6IDAsIG91dEZpbGUgfTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMS8zMC5cblxuaW1wb3J0IHsgb2sgfSBmcm9tIFwiYXNzZXJ0XCI7XG5pbXBvcnQgeyBhcHAgfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IG1rZGlyIH0gZnJvbSBcImZzL3Byb21pc2VzXCI7XG5pbXBvcnQgeyBkaXJuYW1lIH0gZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IHB1cElwY1NvY2tldCB9IGZyb20gXCIuL2Jhc2UvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi9iYXNlL2xvZ2dpbmdcIjtcbmltcG9ydCB7IG1ha2VDTEkgfSBmcm9tIFwiLi9jb21tb25cIjtcbmltcG9ydCB7IGNvbm5lY3RJcGMgfSBmcm9tIFwiLi9yZW5kZXJlci9pcGNcIjtcbmltcG9ydCB7IHNldHVwUHVwUHJvdG9jb2wgfSBmcm9tIFwiLi9yZW5kZXJlci9wcm90b2NvbFwiO1xuaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSBcIi4vcmVuZGVyZXIvcmVuZGVyXCI7XG5pbXBvcnQgeyBkZWZhdWx0UmVuZGVyT3B0aW9ucyB9IGZyb20gXCIuL3JlbmRlcmVyL3NjaGVtYVwiO1xuaW1wb3J0IHsgc2hvb3QgfSBmcm9tIFwiLi9yZW5kZXJlci9zaG9vdFwiO1xuXG5jb25zdCBUQUcgPSBcIltBcHBdXCI7XG5cbmZ1bmN0aW9uIHByaW50RmVhdHVyZXMoKSB7XG4gIGxvZ2dlci5kZWJ1ZyhUQUcsIFwiZ3B1IGZlYXR1cmVzOlwiLCBhcHAuZ2V0R1BVRmVhdHVyZVN0YXR1cygpKTtcbn1cblxuYXBwLmRvY2s/LmhpZGUoKTtcbmFwcC5vbihcIndpbmRvdy1hbGwtY2xvc2VkXCIsICgpID0+IHt9KTtcblxubWFrZUNMSSh7XG4gIG5hbWU6IFwiYXBwXCIsXG4gIGRlZmF1bHRzOiB7XG4gICAgLi4uZGVmYXVsdFJlbmRlck9wdGlvbnMsXG4gICAgd2l0aEF1ZGlvOiBmYWxzZSxcbiAgICBkZXRlcm1pbmlzdGljOiBmYWxzZSxcbiAgICB1c2VJbm5lclByb3h5OiBmYWxzZSxcbiAgICBkaXNhYmxlR3B1OiBmYWxzZSxcbiAgICBkaXNhYmxlSHdDb2RlYzogZmFsc2UsXG4gICAgd2luZG93VG9sZXJhbnQ6IGZhbHNlLFxuICB9LFxuICBydW46IGFzeW5jIChzb3VyY2UsIG9wdGlvbnMpID0+IHtcbiAgICBjb25zdCBleGl0ID0gKGNvZGU6IG51bWJlcikgPT4ge1xuICAgICAgYXBwLnF1aXQoKTtcbiAgICAgIHByb2Nlc3MuZXhpdChjb2RlKTtcbiAgICB9O1xuICAgIHByb2Nlc3Mub25jZShcIlNJR1RFUk1cIiwgKCkgPT4gZXhpdCgxNDMpKTtcbiAgICBwcm9jZXNzLm9uY2UoXCJTSUdJTlRcIiwgKCkgPT4gZXhpdCgxMzApKTtcbiAgICBwcm9jZXNzLm9uY2UoXCJleGl0XCIsIChjKSA9PiBleGl0KGMpKTtcbiAgICBvayhwdXBJcGNTb2NrZXQsIFwicHVwSXBjU29ja2V0IG5vdCBzZXRcIik7XG4gICAgY29uc3QgaXBjID0gYXdhaXQgY29ubmVjdElwYyhwdXBJcGNTb2NrZXQpO1xuICAgIHRyeSB7XG4gICAgICBhcHAub24oXCJncHUtaW5mby11cGRhdGVcIiwgcHJpbnRGZWF0dXJlcyk7XG4gICAgICBhd2FpdCBhcHAud2hlblJlYWR5KCk7XG4gICAgICBzZXR1cFB1cFByb3RvY29sKCk7XG4gICAgICBwcmludEZlYXR1cmVzKCk7XG4gICAgICBhd2FpdCBta2RpcihkaXJuYW1lKG9wdGlvbnMub3V0RmlsZSksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgY29uc3QgYWN0aW9uID0gb3B0aW9ucy5kZXRlcm1pbmlzdGljID8gc2hvb3QgOiByZW5kZXI7XG4gICAgICBpcGMud3JpdGVEb25lKGF3YWl0IGFjdGlvbihpcGMsIHNvdXJjZSwgb3B0aW9ucykpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnN0IGVycm9yID0gZSBhcyBFcnJvcjtcbiAgICAgIGNvbnN0IG0gPSBlcnJvci5zdGFjayA/PyBlcnJvci5tZXNzYWdlID8/IFN0cmluZyhlID8/IFwidW5rbm93biBlcnJvclwiKTtcbiAgICAgIGlwYy53cml0ZUVycm9yKG0pO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBhcHAucXVpdCgpO1xuICAgIH1cbiAgfSxcbn0pO1xuIl19
|
|
260
|
+
window.${Re} = { process: process, eject: eject };
|
|
261
|
+
})();`;async function ct(r,e){if(r)try{await z(r.executeJavaScript(`${si} ${Re}.process(${e})`),5e3,"tick.executeJavaScript");}catch(t){l.error(ni,"tick failed:",t);}}var Oe="[Shoot]";async function xr({source:r,win:e,size:t,ms:o}){let i,n=0,a=e.webContents.debugger,c={width:t.width,height:t.height+1},s=setInterval(()=>{l.warn(Oe,`${r} render is extremely slow @ ${o}, current: ${i} with ${n} repeats`),e.webContents.invalidate();},1e3);try{return await new Promise(d=>{let p=(u,w,f)=>{let h=f.getSize();if(!Se(h,c)){he(a,c);return}let g=f.toBitmap(),b=we(g,h);if(b===void 0||Math.abs(b-o)>1){i=b,n++;return}e.webContents.off("paint",p),d(Buffer.from(g.buffer,g.byteOffset,t.height*t.width*4)),e.webContents.stopPainting();};e.webContents.on("paint",p),e.webContents.startPainting();})}finally{clearInterval(s);}}async function br(r,e,t){var H=[];try{let{fps:o,width:i,height:n,duration:a,withAudio:c,outFile:s,disableHwCodec:d}=t;c&&l.warn(Oe,"audio will be ignored on this mode");let p=performance.now();let u=Ie({source:e,renderer:t});let w=C(H,await Q.create({width:i,height:n,fps:o,outFile:s,withAudio:c,disableHwCodec:d}),!0);let f=await u;l.debug(Oe,"init done:",{source:e,cost:performance.now()-p});let h=Math.ceil(o*a);let g=1e3/o;let b=0;let v=0;let x;let y=f.webContents.debugger;let _=f.webContents.mainFrame;let A=_.frames[0];try{y.attach("1.3"),f.webContents.setFrameRate(o),f.webContents.stopPainting(),await Ht(y);let Be=performance.now(),Me=Promise.all([ct(A,0),Ye(y,0)]);await qe(y,g),await Me,await xr({source:e,win:f,size:{width:i,height:n},ms:0}),l.debug(Oe,"first frame:",{source:e,cost:performance.now()-Be});for(let te=0;te<h;te++){let U=(te+1)*g,F=Promise.all([ct(A,U),Ye(y,U)]);await qe(y,g),await F;let $=await xr({source:e,win:f,size:{width:i,height:n},ms:U});if(w.encodeBGRA($).catch(pe=>x??=pe),b++,x)throw x;let re=Math.floor(b/h*100);Math.abs(re-v)>10&&(v=re,r.writeProgress(v));}}finally{f.webContents.stopPainting(),y.detach(),await Z(f),await w.finish();}if(x)throw x;if(b===0)throw new Error("no frames captured");else return {written:b,jank:0,outFile:s}}catch(ue){var T=ue,W=true;}finally{var ee=S(H,T,W);ee&&await ee;}}var ui="[App]";Bt();function yr(){l.debug(ui,"gpu features:",electron.app.getGPUFeatureStatus());}electron.app.dock?.hide();electron.app.on("window-all-closed",()=>{});Vt({name:"app",defaults:{...Nt,withAudio:false,deterministic:false,useInnerProxy:false,disableGpu:false,disableHwCodec:false,windowTolerant: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(process.send,"ipc channel missing \u2014 spawn with stdio[3]='ipc'");let o=new le;try{electron.app.on("gpu-info-update",yr),await electron.app.whenReady(),jt(),yr();for(let n of e.outFile.split(","))await promises.mkdir(path.dirname(n),{recursive:!0});let i=e.deterministic?br:_r;await o.writeDone(await i(o,r,e));}catch(i){let n=i,a=n.stack??n.message??String(i??"unknown error");await o.writeError(a);}finally{electron.app.exit();}}});//# sourceMappingURL=app.cjs.map
|
|
262
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL3RzdXBAOC41LjErMDNlNWY1ZWVlOTFmODQ1OS9ub2RlX21vZHVsZXMvdHN1cC9hc3NldHMvY2pzX3NoaW1zLmpzIiwiLi4vc3JjL2Jhc2UvZW52LnRzIiwiLi4vc3JjL2Jhc2UvcGFyc2VyLnRzIiwiLi4vc3JjL2Jhc2UvY29uc3RhbnRzLnRzIiwiLi4vc3JjL2Jhc2UvbG9nZ2luZy50cyIsIi4uL3NyYy9iYXNlL2NyYXNoLnRzIiwiLi4vc3JjL2Jhc2Uvbm9lcnIudHMiLCIuLi9zcmMvYmFzZS9wcm9jZXNzLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3NjaGVtYS50cyIsIi4uL3NyYy9jb21tb24udHMiLCIuLi9zcmMvcmVuZGVyZXIvaXBjLnRzIiwiLi4vc3JjL2Jhc2UvdGltaW5nLnRzIiwiLi4vc3JjL2Jhc2UvY2RwLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3N0ZWdvLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3Byb3RvY29sLnRzIiwiLi4vc3JjL2Jhc2UvbGltaXRlci50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvbWlzYy50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvY29kZWMudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL2F1ZGlvLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9iaXQudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL25hbC50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvdnBzLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9hbHBoYS50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvbnZlbmMudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL3ZpZGVvLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci92aWRlb3Rvb2xib3gudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL2ZhY3RvcnkudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL211eGVyLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9zaW5rLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9waXBlbGluZS50cyIsIi4uL3NyYy9iYXNlL2ZyYW1lX2Ryb3AudHMiLCIuLi9zcmMvYmFzZS9pbWFnZS50cyIsIi4uL3NyYy9yZW5kZXJlci9hdWRpby50cyIsIi4uL3NyYy9iYXNlL3JldHJ5LnRzIiwiLi4vc3JjL3JlbmRlcmVyL2h0bWxfY2hlY2sudHMiLCIuLi9zcmMvYmFzZS93YWl0YWJsZV9ldmVudC50cyIsIi4uL3NyYy9yZW5kZXJlci9uZXR3b3JrLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3dpbmRvdy50cyIsIi4uL3NyYy9yZW5kZXJlci9yZW5kZXIudHMiLCIuLi9zcmMvcmVuZGVyZXIvdGljay50cyIsIi4uL3NyYy9yZW5kZXJlci9zaG9vdC50cyIsIi4uL3NyYy9hcHAudHMiXSwibmFtZXMiOlsiZ2V0SW1wb3J0TWV0YVVybCIsImltcG9ydE1ldGFVcmwiLCJwZW52IiwibmFtZSIsInBhcnNlciIsImRlZmF1bHRWYWx1ZSIsInBhcnNlTnVtYmVyIiwieCIsIm51bSIsInJlcXVpcmUiLCJjcmVhdGVSZXF1aXJlIiwiZW52IiwicHVwTG9nTGV2ZWwiLCJwdXBVc2VJbm5lclByb3h5IiwicHVwRGlzYWJsZUdQVSIsInB1cERpc2FibGVId0NvZGVjIiwicHVwRGV0ZXJtaW5pc3RpYyIsInB1cFBrZ1Jvb3QiLCJkaXJuYW1lIiwiam9pbiIsInB1cFdpbmRvd1RvbGVyYW50IiwiREVCVUciLCJJTkZPIiwiV0FSTiIsIkVSUk9SIiwiRkFUQUwiLCJzdGFja0hvb2siLCJ0YXJnZXQiLCJfY29udGV4dCIsIm1lc3NhZ2VzIiwicHJvY2Vzc2VkIiwibXNnIiwiX2ZhdGFsX2RlYyIsIl9lcnJvcl9kZWMiLCJfd2Fybl9kZWMiLCJfaW5mb19kZWMiLCJfZGVidWdfZGVjIiwiX2luaXQiLCJMb2dnZXIiLCJfbGV2ZWwiLCJfX3J1bkluaXRpYWxpemVycyIsIl9fcHVibGljRmllbGQiLCJ2YWx1ZSIsImRlYnVnIiwiaW5mbyIsIndhcm4iLCJlcnJvciIsImx2IiwibWVzc2FnZSIsInByb2MiLCJyZXNvbHZlIiwicmVqZWN0IiwiZmF0YWwiLCJkaXNwYXRjaCIsImRhdGEiLCJlcnIiLCJjb2RlIiwic2lnbmFsIiwicmVhc29uIiwiX19kZWNvcmF0b3JTdGFydCIsIl9fZGVjb3JhdGVFbGVtZW50IiwiX19kZWNvcmF0b3JNZXRhZGF0YSIsImxvZ2dlciIsIkxvZyIsImxldmVsIiwiQVZfTE9HX0VSUk9SIiwiQVZfTE9HX1dBUk5JTkciLCJUQUciLCJzdGFydEVsZWN0cm9uQ3Jhc2hSZXBvcnRlciIsImR1bXBEaXIiLCJhcHAiLCJta2RpclN5bmMiLCJjcmFzaFJlcG9ydGVyIiwibm9lcnIiLCJmbiIsImFyZ3MiLCJyZXQiLCJQVVBfQVJHU19LRVkiLCJwYXJncyIsImFyZ3YiLCJwcml2IiwiYXJnIiwiREVGQVVMVF9XSURUSCIsIkRFRkFVTFRfSEVJR0hUIiwiREVGQVVMVF9GUFMiLCJERUZBVUxUX0RVUkFUSU9OIiwiREVGQVVMVF9PVVRfRklMRSIsIlJlbmRlclNjaGVtYSIsInoiLCJkZWZhdWx0UmVuZGVyT3B0aW9ucyIsIm1ha2VDTEkiLCJvcHRpb25zIiwic2hhcGUiLCJkIiwicHJvZ3JhbSIsInNvdXJjZSIsIm9wdHMiLCJlIiwiSXBjV3JpdGVyIiwicGF5bG9hZCIsInNsZWVwIiwibXMiLCJ3aXRoVGltZW91dCIsInAiLCJsYWJlbCIsInRpbWVyIiwiQ0RQX1RJTUVPVVRfTVMiLCJzZW5kIiwiY2RwIiwibWV0aG9kIiwicGFyYW1zIiwiYWR2YW5jZVZpcnR1YWxUaW1lIiwiYnVkZ2V0IiwidGltZW91dCIsImhhbmRsZXIiLCJfIiwicGF1c2VWaXJ0dWFsVGltZSIsInJlc2l6ZURyYXdhYmxlIiwic2l6ZSIsIkZSQU1FX1NZTkNfTUFSS0VSX1dJRFRIIiwiU1RFR09fVElDS19DSEFOTkVMIiwiYnVpbGRTdGVnb0hUTUwiLCJ0YXJnZXRVUkwiLCJ3aWR0aCIsImhlaWdodCIsImRlY29kZVN0ZWdvIiwiYml0bWFwIiwibWFya2VyUm93IiwidGltZXN0YW1wIiwiaSIsInBpeGVsSWR4IiwiYml0Iiwic3RhcnRTdGVnbyIsInN3YXBCdWZmZXIiLCJleHBlY3RlZCIsInN3YXBwZWQiLCJyIiwiaXBjTWFpbiIsInN0b3BTdGVnbyIsIlBVUF9TQ0hFTUUiLCJwcm90b2NvbCIsInNldHVwUHVwUHJvdG9jb2wiLCJyZXEiLCJ1cmwiLCJzcmMiLCJodG1sIiwiY3JlYXRlU3RlZ29VUkwiLCJDb25jdXJyZW5jeUxpbWl0ZXIiLCJtYXhDb25jdXJyZW5jeSIsInYiLCJrZWVwIiwiZW50cnkiLCJvcGVuVmlkZW9DdHgiLCJjdHgiLCJDb2RlY0NvbnRleHQiLCJSYXRpb25hbCIsIkFWX0NPREVDX0ZMQUdfR0xPQkFMX0hFQURFUiIsImsiLCJGRm1wZWdFcnJvciIsIm1ha2VGcmFtZSIsInBpeEZtdCIsImZyYW1lIiwiRnJhbWUiLCJtYWtlUGFja2V0IiwicGt0IiwiUGFja2V0IiwiZHJhaW5QYWNrZXRzIiwic3RyZWFtIiwibXV4ZXIiLCJBVkVSUk9SX0VBR0FJTiIsIkFWRVJST1JfRU9GIiwiQ29kZWNTdGF0ZSIsIl9Db2RlY1N0YXRlIiwiY29kZWMiLCJDb2RlYyIsIkZGX0RFQ09ERVJfUE5HIiwib2siLCJwbmciLCJBVl9QSVhfRk1UX0JHUkEiLCJBVl9QSVhfRk1UX1lVVkE0MjBQIiwicG5nRGF0YSIsIl9zdGFjayIsIl9fdXNpbmciLCJfZXJyb3IiLCJfaGFzRXJyb3IiLCJfX2NhbGxEaXNwb3NlIiwic3dzIiwiU29mdHdhcmVTY2FsZUNvbnRleHQiLCJmbXQiLCJTV1NfQklMSU5FQVIiLCJTQU1QTEVfRk1UX05BTUUiLCJBVl9TQU1QTEVfRk1UX0ZMVCIsIkFWX1NBTVBMRV9GTVRfRkxUUCIsIkF1ZGlvRW5jb2RlciIsIl9BdWRpb0VuY29kZXIiLCJvdXRGbXQiLCJBVl9DSEFOTkVMX0xBWU9VVF9TVEVSRU8iLCJpblNhbXBsZVJhdGUiLCJncmFwaCIsIkZpbHRlckdyYXBoIiwiYWJ1ZmZlciIsIkZpbHRlciIsImJ1ZlNyYyIsImFidWZmZXJzaW5rIiwiYnVmU2luayIsImZpbHRlckRlc2MiLCJvdXRwdXRzIiwiRmlsdGVySW5PdXQiLCJpbnB1dHMiLCJwY20iLCJuU2FtcGxlcyIsInBhY2tCaXRzIiwiYml0cyIsImJ1ZiIsImJ5dGUiLCJiIiwiQml0V3JpdGVyIiwidmFsIiwibiIsImxlbiIsInBhZCIsInN0YXJ0IiwiQml0UmVhZGVyIiwiemVyb3MiLCJBTk5FWF9CX1NUQVJUX0NPREUiLCJwYXJzZU5hbFR5cGUiLCJoZWFkZXIwIiwiaGVhZGVyMSIsInR5cGUiLCJsYXllcklkIiwidGVtcG9yYWxJZCIsImVuY29kZU5hbEhlYWRlciIsImJ5dGUwIiwiYnl0ZTEiLCJzcGxpdE5hbFVuaXRzIiwiYml0c3RyZWFtIiwibmFscyIsInNjTGVuIiwibmFsU3RhcnQiLCJuYWxFbmQiLCJqIiwicmV3cml0ZU5hbExheWVySWQiLCJuYWwiLCJvdXQiLCJiMCIsImIxIiwicmVtb3ZlRW11bGF0aW9uUHJldmVudGlvbiIsImFkZEVtdWxhdGlvblByZXZlbnRpb24iLCJleHRyYWN0UFRMIiwidnBzRGF0YSIsImJyIiwibWF4U3ViTGF5ZXJzTWludXMxIiwicHRsU3RhcnQiLCJ3cml0ZUJhc2VWUFMiLCJidyIsInB0bCIsIndyaXRlVlBTRXh0ZW5zaW9uIiwiYnVpbGRBbHBoYVZQUyIsImV4dHJhY3RBbHBoYVRvWXV2NDIwcEJ1ZmZlciIsImJncmFGcmFtZSIsInNyY0xzIiwidyIsImgiLCJ5U2l6ZSIsInNyYzMyIiwieSIsInJvd0Jhc2UiLCJkc3RCYXNlIiwiTkFMX1VOSVRfUFJFRklYX1NFSSIsImJ1aWxkVW5pZmllZEV4dHJhZGF0YSIsImJhc2VFeHRyYWRhdGEiLCJhbHBoYUV4dHJhZGF0YSIsImJhc2VOYWxzIiwiYWxwaGFOYWxzIiwiYWxwaGFCeVR5cGUiLCJhcnIiLCJjaHVua3MiLCJlbWl0dGVkIiwiYWxwaGFOYWwiLCJidWlsZEFscGhhQ2hhbm5lbEluZm9TRUkiLCJoMCIsImgxIiwid3JpdGVCaXRzIiwiaW50ZXJsZWF2ZUFjY2Vzc1VuaXRzIiwiTnZlbmNEdWFsTGF5ZXJFbmNvZGVyIiwiX052ZW5jRHVhbExheWVyRW5jb2RlciIsInMiLCJmcHMiLCJiaXRyYXRlIiwiRkZfRU5DT0RFUl9IRVZDX05WRU5DIiwiY29tbW9uIiwiYmFzZUN0eCIsImFscGhhQ3R4IiwiQVZfUElYX0ZNVF9ZVVY0MjBQIiwidXZTaXplIiwiYWxwaGFCdWYiLCJhbHBoYVN3RnJhbWUiLCJwdHMiLCJiYXNlUGt0IiwiYWxwaGFQa3QiLCJiYXNlUiIsImFscGhhUiIsImJhc2VSZWFkeSIsImFscGhhUmVhZHkiLCJkdHMiLCJkdXJhdGlvbiIsIlZpZGVvRW5jb2RlciIsIl9WaWRlb0VuY29kZXIiLCJjb2RlY05hbWUiLCJjb2RlY1RhZyIsImNvZGVjT3B0cyIsInJlc3QiLCJWaWRlb1Rvb2xib3hFbmNvZGVyIiwiX1ZpZGVvVG9vbGJveEVuY29kZXIiLCJodyIsIkFWQ09MX1JBTkdFX0pQRUciLCJjcmVhdGVId1ZpZGVvRW5jb2RlciIsImRpc2FibGVId0NvZGVjIiwic2hhcmVkSHciLCJIYXJkd2FyZUNvbnRleHQiLCJvd25zSHciLCJGRl9IV0RFVklDRV9UWVBFX1ZJREVPVE9PTEJPWCIsIkZGX0hXREVWSUNFX1RZUEVfQ1VEQSIsIkZGX0VOQ09ERVJfTElCWDI2NSIsIkZvcm1hdE11eGVyIiwib3V0UGF0aCIsImZvcm1hdE5hbWUiLCJGb3JtYXRDb250ZXh0IiwiY29kZWNDdHgiLCJGRl9FTkNPREVSX0xJQlZQWF9WUDkiLCJPdXRwdXRTaW5rIiwiX091dHB1dFNpbmsiLCJwYXRoIiwibG93ZXIiLCJ2aWRlbyIsImF1ZGlvIiwiY2ZnIiwiRkZfRU5DT0RFUl9BQUMiLCJGRl9FTkNPREVSX0xJQk9QVVMiLCJzYW1wbGVSYXRlIiwiaHdWaWRlbyIsIkVuY29kZXJQaXBlbGluZSIsIl9FbmNvZGVyUGlwZWxpbmUiLCJvdXRGaWxlIiwid2l0aEF1ZGlvIiwib3V0RmlsZXMiLCJraW5kcyIsImlzSHdBbHBoYUNhcGFibGUiLCJzaW5rcyIsInNpbmsiLCJpbnB1dCIsIkZyYW1lRHJvcFN0YXRzIiwiY291bnQiLCJ0b3RhbERyb3BwZWQiLCJsb2NhbFN1bSIsIm1heEJ1cnN0IiwiYnVyc3QiLCJwZXJjZXB0aWJsZSIsImciLCJsIiwic2NvcmUiLCJzaXplRXF1YWxzIiwiYSIsIkFVRElPX01FVEFfQ0hBTk5FTCIsIkFVRElPX0NIVU5LX0NIQU5ORUwiLCJBVURJT19DQVBUVVJFX1NDUklQVCIsInNldHVwQXVkaW9DYXB0dXJlIiwiZW5jb2RlciIsImdldFZpZGVvVGltZU1zIiwib25FcnJvciIsInByZWxvYWRQYXRoIiwidG1wZGlyIiwicmFuZG9tVVVJRCIsIndyaXRlRmlsZSIsInNlc3Npb24iLCJfZSIsInN0YXJ0TXMiLCJzaWxlbmNlU2FtcGxlcyIsImJ1ZmZlciIsInJtIiwidXNlUmV0cnkiLCJtYXhBdHRlbXB0cyIsInRpbWVvdXRFcnJvciIsImF0dGVtcHQiLCJwcm9taXNlcyIsInNldFRpbWVvdXQiLCJTVVBQT1JURURfUFJPVE9DT0xTIiwiU09VUkNFX1BBVFRFUk4iLCJjaGVja0hUTUwiLCJXYWl0YWJsZUV2ZW50IiwibWFwIiwicHJveGllZFVybCIsInBhcnNlZCIsIlVSTCIsInNldEludGVyY2VwdG9yIiwid2luZG93IiwidXNlSW5uZXJQcm94eSIsImxpbWl0ZXIiLCJldmVudHMiLCJ3YWl0Iiwia2V5Iiwib25UaW1lb3V0IiwiZXZlbnQiLCJkZXRhaWxzIiwiY2FsbGJhY2siLCJwcm94aWVkIiwicmVzcG9uc2VIZWFkZXJzIiwidW5zZXRJbnRlcmNlcHRvciIsIlRJTUVPVVRfRVJST1IiLCJ3YWl0Rm9yRmluaXNoIiwid2luIiwiYWN0aW9uIiwidG9sZXJhbnQiLCJkb25lIiwiZGVzYyIsImV4aXRDb2RlIiwiZGlzcG9zZVdpbmRvdyIsInNldHRsZWQiLCJvcGVuV2luZG93Iiwib25DcmVhdGVkIiwicmVuZGVyZXIiLCJ3YXJtdXAiLCJCcm93c2VyV2luZG93IiwibGluZU51bWJlciIsInNvdXJjZUlkIiwibXNncyIsIm9wZW5XaW5kb3dXaXRoUmV0cnkiLCJsb2FkV2luZG93Iiwib3BlbiIsInN0YWNrIiwicmVuZGVyIiwid3JpdGVyIiwidG90YWwiLCJmcmFtZUludGVydmFsIiwiZnJhbWVTaXplIiwid3JpdHRlbiIsImxhc3RXcml0dGVuVGltZSIsInByb2dyZXNzIiwiZW5jb2RlRXJyb3IiLCJyZXNvbHZlciIsInJlamVjdGVyIiwiZHJvcFN0YXRzIiwic2NoZWR1bGVGcmFtZSIsInBhaW50IiwiX3IiLCJpbWFnZSIsImltYWdlU2l6ZSIsImN1cnJlbnRUaW1lIiwiY3JvcHBlZCIsInRpbWVEZWx0YSIsImZyYW1lc1RvSW5zZXJ0IiwibmV3UHJvZ3Jlc3MiLCJkdXJhdGlvbk1zIiwiZHJvcFNjb3JlIiwiX3Byb21pc2UiLCJUSUNLX1NZTUJPTCIsIkhPT0siLCJ0aWNrIiwidGltZXN0YW1wTXMiLCJsYXN0VHMiLCJsYWdneSIsImludGVydmFsIiwiX2QiLCJ0cyIsInNob290IiwidEluaXQiLCJ3aW5QIiwicGlwZWxpbmUiLCJtYWluIiwiaWZyYW1lIiwidDIiLCJ1cGRhdGVkIiwiZnJhbWVNcyIsInByaW50RmVhdHVyZXMiLCJleGl0IiwiYyIsImlwYyIsIm1rZGlyIiwibSJdLCJtYXBwaW5ncyI6IjBrQkFLQSxJQUFBLEVBQUEsQ0FBQSxNQUFBLENBQUEsTUFBQSxDQUFBLElBQUEsRUFBQSxDQUFBLE1BQUEsQ0FBQSxjQUFBLENBQUEsSUFBQSxFQUFBLENBQUEsTUFBQSxDQUFBLHdCQUFBLENBQUEsSUFBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxHQUFBLENBQUEsQ0FBQSxDQUFBLE1BQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsTUFBQSxDQUFBLEdBQUEsQ0FBQSxTQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLE1BQUEsU0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsSUFBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsR0FBQSxDQUFBLElBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsVUFBQSxDQUFBLElBQUEsQ0FBQSxZQUFBLENBQUEsSUFBQSxDQUFBLFFBQUEsQ0FBQSxJQUFBLENBQUEsS0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxJQUFBLEVBQUEsQ0FBQSxDQUFBLEVBQUEsSUFBQSxFQUFBLENBQUEsSUFBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxPQUFBLENBQUEsUUFBQSxDQUFBLFFBQUEsQ0FBQSxRQUFBLENBQUEsVUFBQSxDQUFBLE9BQUEsQ0FBQSxPQUFBLENBQUEsS0FBQSxDQUFBLEtBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxHQUFBLE1BQUEsRUFBQSxPQUFBLENBQUEsRUFBQSxVQUFBLENBQUEsQ0FBQSxDQUFBLG1CQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsSUFBQSxDQUFBLElBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsSUFBQSxDQUFBLENBQUEsQ0FBQSxRQUFBLENBQUEsQ0FBQSxDQUFBLGNBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEscUJBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxJQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsRUFBQSxJQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxHQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLFVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsR0FBQSxDQUFBLElBQUEsSUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLE1BQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxJQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsT0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsR0FBQSxDQUFBLElBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxLQUFBLENBQUEsQ0FBQSxDQUFBLEtBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEdBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxTQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLElBQUEsSUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLE1BQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsTUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsT0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLE1BQUEsQ0FBQSxDQUFBLEdBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxJQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEdBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxJQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxHQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxPQUFBLENBQUEsRUFBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsR0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsSUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsR0FBQSxDQUFBLEdBQUEsQ0FBQSxFQUFBLElBQUEsQ0FBQSxDQUFBLE9BQUEsQ0FBQSxFQUFBLFFBQUEsRUFBQSxPQUFBLENBQUEsRUFBQSxVQUFBLEVBQUEsQ0FBQSxDQUFBLGlCQUFBLENBQUEsQ0FBQSxJQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxHQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLGNBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEdBQUEsTUFBQSxHQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLFNBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxHQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLE9BQUEsQ0FBQSxFQUFBLFVBQUEsRUFBQSxDQUFBLENBQUEsdUJBQUEsQ0FBQSxDQUFBLENBQUEsR0FBQSxDQUFBLENBQUEsVUFBQSxDQUFBLEdBQUEsQ0FBQSxDQUFBLENBQUEsSUFBQSxDQUFBLElBQUEsRUFBQSxDQUFBLE1BQUEsQ0FBQSxDQUFBLENBQUEsT0FBQSxPQUFBLENBQUEsTUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxJQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsS0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLElBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsT0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsR0FBQSxDQUFBLElBQUEsQ0FBQSxDQUFBLE9BQUEsZUFBQSxFQUFBLFVBQUEsQ0FBQSxlQUFBLENBQUEsU0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxPQUFBLENBQUEsQ0FBQSxLQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLElBQUEsQ0FBQSxpQkFBQSxDQUFBLENBQUEsQ0FBQSxLQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxVQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxJQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLHlDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsSUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxLQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsR0FBQSxFQUFBLEVBQUEsR0FBQSxDQUFBLElBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsSUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEdBQUEsQ0FB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cEksQ0FBQUEsQ0FBZUMsQ0FBQUEsQ0FBZ0IsQ0FHdkYsR0FEQWtJLENBQUFBLENBQUcsSUFBQSxDQUFLQyxFQUFJLE9BQUEsQ0FBU0EsQ0FBQUEsQ0FBSSxPQUFTLENBQUEsQ0FBRyxDQUFDLENBQUEsQ0FDbENBLENBQUFBLENBQUksbUJBQXFCLENBQUEsQ0FBRyxDQUM5QixJQUFBLElBQVMsQ0FBQSxDQUFJLEVBQUcsQ0FBQSxDQUFJQSxDQUFBQSxDQUFJLGtCQUFBLENBQW9CLENBQUEsRUFBQSxDQUFLRCxFQUFHLENBQUEsQ0FBRSxDQUFBLENBQUcsQ0FBQyxDQUFBLENBQzFELElBQUEsSUFBUyxFQUFJQyxDQUFBQSxDQUFJLGtCQUFBLENBQW9CLENBQUEsQ0FBSSxDQUFBLENBQUcsSUFBS0QsQ0FBQUEsQ0FBRyxDQUFBLENBQUUsQ0FBQSxDQUFHLENBQUMsRUFDNUQsQ0FFQUEsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxFQUNULElBQUEsSUFBUyxDQUFBLENBQUksQ0FBQSxDQUFHLENBQUEsQ0FBSSxHQUFJLENBQUEsRUFBQSxDQUFLQSxDQUFBQSxDQUFHLElBQUEsQ0FBSyxDQUFBLEdBQU0sR0FBSyxDQUFBLEdBQU0sQ0FBQyxDQUFBLENBQ3ZEQSxDQUFBQSxDQUFHLEVBQUUsQ0FBQSxDQUFHLENBQUMsQ0FBQSxDQUNUQSxDQUFBQSxDQUFHLEVBQUUsQ0FBQSxDQUFHLENBQUMsRUFDVEEsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsQ0FBQSxDQUFFLENBQUEsQ0FBRyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxDQUFBLENBQUUsQ0FBQSxDQUFHLENBQUMsQ0FBQSxDQUNUQSxDQUFBQSxDQUFHLENBQUEsQ0FBRSxDQUFBLENBQUcsQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsQ0FBQSxDQUFFLENBQUEsQ0FBRyxDQUFDLENBQUEsQ0FFVEEsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxFQUNUQSxDQUFBQSxDQUFHLEVBQUEsQ0FBRyxDQUFDLENBQUEsQ0FDUEEsRUFBRyxJQUFBLENBQUssQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsS0FBSyxDQUFDLENBQUEsQ0FDVEEsRUFBRyxJQUFBLENBQUssQ0FBQyxFQUdUQSxDQUFBQSxDQUFHLEVBQUEsQ0FBRyxDQUFDLENBQUEsQ0FDUEEsRUFBRyxJQUFBLENBQUssQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsS0FBS0MsQ0FBQUEsQ0FBSSxPQUFBLENBQVNBLENBQUFBLENBQUksUUFBQSxDQUFVQSxFQUFJLE1BQUEsQ0FBU0EsQ0FBQUEsQ0FBSSxRQUFRLENBQUEsQ0FFNURELEVBQUcsRUFBQSxDQUFHLENBQUMsQ0FBQSxDQUNQQSxDQUFBQSxDQUFHLEVBQUUsQ0FBQSxDQUFHLENBQUMsQ0FBQSxDQUNUQSxDQUFBQSxDQUFHLEVBQUUsQ0FBQSxDQUFHLENBQUMsQ0FBQSxDQUNUQSxDQUFBQSxDQUFHLEVBQUUsQ0FBQSxDQUFHLENBQUMsRUFFVEEsQ0FBQUEsQ0FBRyxFQUFBLENBQUcsQ0FBQyxDQUFBLENBQ1BBLENBQUFBLENBQUcsQ0FBQSxDQUFFbkksQ0FBQUEsQ0FBTyxFQUFFLENBQUEsQ0FDZG1JLENBQUFBLENBQUcsQ0FBQSxDQUFFbEksQ0FBQUEsQ0FBUSxFQUFFLENBQUEsQ0FDZmtJLENBQUFBLENBQUcsSUFBQSxDQUFLLENBQUMsRUFDVEEsQ0FBQUEsQ0FBRyxDQUFBLENBQUUsRUFBRyxDQUFDLENBQUEsQ0FDVEEsRUFBRyxDQUFBLENBQUUsQ0FBQSxDQUFHLENBQUMsQ0FBQSxDQUNUQSxFQUFHLENBQUEsQ0FBRSxDQUFBLENBQUcsQ0FBQyxDQUFBLENBQ1RBLEVBQUcsSUFBQSxDQUFLLENBQUMsQ0FBQSxDQUVUQSxDQUFBQSxDQUFHLEtBQUssQ0FBQyxDQUFBLENBQ1RBLEVBQUcsSUFBQSxDQUFLLENBQUMsRUFDVEEsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxDQUFBLENBR1RBLEVBQUcsSUFBQSxDQUFLLENBQUMsQ0FBQSxDQUNUQSxDQUFBQSxDQUFHLEdBQUcsQ0FBQyxD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LE1BQU1uWixZQUFBQSxDQUFJLFNBQUEsRUFBVSxDQUNwQnVFLElBQWlCLENBQ2pCNFUsRUFBQUEsR0FDQSxJQUFBLElBQVd0TyxDQUFBQSxJQUFPeEosRUFBUSxPQUFBLENBQVEsS0FBQSxDQUFNLEdBQUcsQ0FBQSxDQUN6QyxNQUFNa1ksZUFBTTNjLFlBQUFBLENBQVFpTyxDQUFHLEVBQUcsQ0FBRSxTQUFBLENBQVcsRUFBSyxDQUFDLENBQUEsQ0FFL0MsSUFBTXdLLENBQUFBLENBQVNoVSxFQUFRLGFBQUEsQ0FBZ0JxWCxFQUFBQSxDQUFRbEMsR0FDL0MsTUFBTThDLENBQUFBLENBQUksVUFBVSxNQUFNakUsQ0FBQUEsQ0FBT2lFLENBQUFBLENBQUs3WCxDQUFBQSxDQUFRSixDQUFPLENBQUMsRUFDeEQsT0FBU00sQ0FBQUEsQ0FBRyxDQUNWLElBQU1uRCxDQUFBQSxDQUFRbUQsQ0FBQUEsQ0FDUjZYLENBQUFBLENBQUloYixDQUFBQSxDQUFNLE9BQVNBLENBQUFBLENBQU0sT0FBQSxFQUFXLE9BQU9tRCxDQUFBQSxFQUFLLGVBQWUsRUFDckUsTUFBTTJYLENBQUFBLENBQUksV0FBV0UsQ0FBQyxFQUN4QixRQUFFLENBQ0F4WixZQUFBQSxDQUFJLE9BQ04sQ0FDRixDQUNGLENBQUMsQ0FBQSIsImZpbGUiOiJhcHAuY2pzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gU2hpbSBnbG9iYWxzIGluIGNqcyBidW5kbGVcbi8vIFRoZXJlJ3MgYSB3ZWlyZCBidWcgdGhhdCBlc2J1aWxkIHdpbGwgYWx3YXlzIGluamVjdCBpbXBvcnRNZXRhVXJsXG4vLyBpZiB3ZSBleHBvcnQgaXQgYXMgYGNvbnN0IGltcG9ydE1ldGFVcmwgPSAuLi4gX19maWxlbmFtZSAuLi5gXG4vLyBCdXQgdXNpbmcgYSBmdW5jdGlvbiB3aWxsIG5vdCBjYXVzZSB0aGlzIGlzc3VlXG5cbmNvbnN0IGdldEltcG9ydE1ldGFVcmwgPSAoKSA9PiBcbiAgdHlwZW9mIGRvY3VtZW50ID09PSBcInVuZGVmaW5lZFwiIFxuICAgID8gbmV3IFVSTChgZmlsZToke19fZmlsZW5hbWV9YCkuaHJlZiBcbiAgICA6IChkb2N1bWVudC5jdXJyZW50U2NyaXB0ICYmIGRvY3VtZW50LmN1cnJlbnRTY3JpcHQudGFnTmFtZS50b1VwcGVyQ2FzZSgpID09PSAnU0NSSVBUJykgXG4gICAgICA/IGRvY3VtZW50LmN1cnJlbnRTY3JpcHQuc3JjIFxuICAgICAgOiBuZXcgVVJMKFwibWFpbi5qc1wiLCBkb2N1bWVudC5iYXNlVVJJKS5ocmVmO1xuXG5leHBvcnQgY29uc3QgaW1wb3J0TWV0YVVybCA9IC8qIEBfX1BVUkVfXyAqLyBnZXRJbXBvcnRNZXRhVXJsKClcbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMjUuXG5cbmV4cG9ydCB0eXBlIEVudlBhcnNlcjxUPiA9ICh2YWx1ZTogdW5rbm93bikgPT4gVDtcblxuZXhwb3J0IGZ1bmN0aW9uIHBlbnY8VD4obmFtZTogc3RyaW5nLCBwYXJzZXI6IEVudlBhcnNlcjxUPiwgZGVmYXVsdFZhbHVlOiBUKTogVDtcbmV4cG9ydCBmdW5jdGlvbiBwZW52PFQ+KG5hbWU6IHN0cmluZywgcGFyc2VyOiBFbnZQYXJzZXI8VD4sIGRlZmF1bHRWYWx1ZT86IFQpOiBUIHwgdW5kZWZpbmVkO1xuZXhwb3J0IGZ1bmN0aW9uIHBlbnY8VD4obmFtZTogc3RyaW5nLCBwYXJzZXI6IEVudlBhcnNlcjxUPiwgZGVmYXVsdFZhbHVlPzogVCk6IFQgfCB1bmRlZmluZWQge1xuICB0cnkge1xuICAgIHJldHVybiBwYXJzZXIocHJvY2Vzcy5lbnZbbmFtZV0pO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZGVmYXVsdFZhbHVlO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAxLzMwLlxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VOdW1iZXIoeDogdW5rbm93bik6IG51bWJlciB7XG4gIGlmICh0eXBlb2YgeCA9PT0gXCJudW1iZXJcIikge1xuICAgIHJldHVybiB4O1xuICB9XG4gIGNvbnN0IG51bSA9IE51bWJlcih4KTtcbiAgaWYgKE51bWJlci5pc05hTihudW0pKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBWYWx1ZSAke3h9IGlzIG5vdCBhIHZhbGlkIG51bWJlcmApO1xuICB9XG4gIHJldHVybiBudW07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVN0cmluZyh4OiB1bmtub3duKTogc3RyaW5nIHtcbiAgaWYgKHR5cGVvZiB4ID09PSBcInN0cmluZ1wiKSByZXR1cm4geDtcbiAgcmV0dXJuIFN0cmluZyh4KTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDkuXG5cbmltcG9ydCB7IGNyZWF0ZVJlcXVpcmUgfSBmcm9tIFwibW9kdWxlXCI7XG5pbXBvcnQgeyBkaXJuYW1lLCBqb2luIH0gZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IHBlbnYgfSBmcm9tIFwiLi9lbnZcIjtcbmltcG9ydCB7IHBhcnNlTnVtYmVyIH0gZnJvbSBcIi4vcGFyc2VyXCI7XG5cbmNvbnN0IHJlcXVpcmUgPSBjcmVhdGVSZXF1aXJlKGltcG9ydC5tZXRhLnVybCk7XG5jb25zdCBlbnYgPSBwcm9jZXNzLmVudjtcblxuZXhwb3J0IGNvbnN0IHB1cExvZ0xldmVsID0gcGVudihcIlBVUF9MT0dfTEVWRUxcIiwgcGFyc2VOdW1iZXIsIDIpO1xuZXhwb3J0IGNvbnN0IHB1cFVzZUlubmVyUHJveHkgPSBlbnZbXCJQVVBfVVNFX0lOTkVSX1BST1hZXCJdID09PSBcIjFcIjtcbmV4cG9ydCBjb25zdCBwdXBEaXNhYmxlR1BVID0gZW52W1wiUFVQX0RJU0FCTEVfR1BVXCJdID09PSBcIjFcIjtcbmV4cG9ydCBjb25zdCBwdXBEaXNhYmxlSHdDb2RlYyA9IGVudltcIlBVUF9ESVNBQkxFX0hXX0NPREVDXCJdID09PSBcIjFcIjtcbmV4cG9ydCBjb25zdCBwdXBEZXRlcm1pbmlzdGljID0gZW52W1wiUFVQX0RFVEVSTUlOSVNUSUNcIl0gPT09IFwiMVwiO1xuXG5leHBvcnQgY29uc3QgcHVwUGtnUm9vdCA9IGRpcm5hbWUocmVxdWlyZS5yZXNvbHZlKFwicHVwLXJlY29yZGVyL3BhY2thZ2UuanNvblwiKSk7XG5leHBvcnQgY29uc3QgcHVwQXBwID0gam9pbihwdXBQa2dSb290LCBcImRpc3RcIiwgXCJhcHAuY2pzXCIpO1xuXG5leHBvcnQgY29uc3QgcHVwV2luZG93VG9sZXJhbnQgPSBlbnZbXCJQVVBfV0lORE9XX1RPTEVSQU5UXCJdID09PSBcIjFcIjtcbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDYuXG5cbmltcG9ydCB0eXBlIHsgQ2hpbGRQcm9jZXNzIH0gZnJvbSBcImNoaWxkX3Byb2Nlc3NcIjtcbmltcG9ydCB7IExvZyB9IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQgeyBBVl9MT0dfRVJST1IsIEFWX0xPR19XQVJOSU5HIH0gZnJvbSBcIm5vZGUtYXYvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBwdXBMb2dMZXZlbCB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIExvZ2dlckxpa2Uge1xuICBkZWJ1Zz8odGhpczogdm9pZCwgLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQ7XG5cbiAgaW5mbz8odGhpczogdm9pZCwgLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQ7XG5cbiAgd2Fybj8odGhpczogdm9pZCwgLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQ7XG5cbiAgZXJyb3I/KHRoaXM6IHZvaWQsIC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkO1xufVxuXG5jb25zdCBERUJVRyA9IFwiPHB1cEBkZWJ1Zz5cIjtcbmNvbnN0IElORk8gPSBcIjxwdXBAaW5mbz5cIjtcbmNvbnN0IFdBUk4gPSBcIjxwdXBAd2Fybj5cIjtcbmNvbnN0IEVSUk9SID0gXCI8cHVwQGVycm9yPlwiO1xuY29uc3QgRkFUQUwgPSBcIjxwdXBAZmF0YWw+XCI7XG5cbmZ1bmN0aW9uIHN0YWNrSG9vayh0YXJnZXQ6IEZ1bmN0aW9uLCBfY29udGV4dDogQ2xhc3NNZXRob2REZWNvcmF0b3JDb250ZXh0KSB7XG4gIHJldHVybiBmdW5jdGlvbiAodGhpczogTG9nZ2VyLCAuLi5tZXNzYWdlczogdW5rbm93bltdKSB7XG4gICAgY29uc3QgcHJvY2Vzc2VkID0gbWVzc2FnZXMubWFwKChtc2cpID0+IHtcbiAgICAgIHJldHVybiBtc2cgaW5zdGFuY2VvZiBFcnJvciA/IChtc2cuc3RhY2sgPz8gU3RyaW5nKG1zZykpIDogbXNnO1xuICAgIH0pO1xuICAgIHJldHVybiB0YXJnZXQuY2FsbCh0aGlzLCAuLi5wcm9jZXNzZWQpO1xuICB9O1xufVxuXG5leHBvcnQgY2xhc3MgTG9nZ2VyIGltcGxlbWVudHMgTG9nZ2VyTGlrZSB7XG4gIHByaXZhdGUgX2ltcGw/OiBMb2dnZXJMaWtlO1xuXG4gIGdldCBsZXZlbCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9sZXZlbDtcbiAgfVxuXG4gIHNldCBsZXZlbCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fbGV2ZWwgPSB2YWx1ZTtcbiAgICB0aGlzLmltcGwgPSB0aGlzLl9pbXBsID8/IGNvbnNvbGU7XG4gIH1cblxuICBnZXQgaW1wbCgpOiBMb2dnZXJMaWtlIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5faW1wbDtcbiAgfVxuXG4gIHNldCBpbXBsKHZhbHVlOiBMb2dnZXJMaWtlKSB7XG4gICAgY29uc3QgZGVidWcgPSB2YWx1ZS5kZWJ1ZyA/PyBjb25zb2xlLmRlYnVnO1xuICAgIGNvbnN0IGluZm8gPSB2YWx1ZS5pbmZvID8/IGNvbnNvbGUuaW5mbztcbiAgICBjb25zdCB3YXJuID0gdmFsdWUud2FybiA/PyBjb25zb2xlLndhcm47XG4gICAgY29uc3QgZXJyb3IgPSB2YWx1ZS5lcnJvciA/PyBjb25zb2xlLmVycm9yO1xuICAgIGNvbnN0IGx2ID0gdGhpcy5fbGV2ZWw7XG4gICAgdGhpcy5faW1wbCA9IHtcbiAgICAgIGRlYnVnOiBsdiA+PSAzID8gZGVidWcgOiB1bmRlZmluZWQsXG4gICAgICBpbmZvOiBsdiA+PSAyID8gaW5mbyA6IHVuZGVmaW5lZCxcbiAgICAgIHdhcm46IGx2ID49IDEgPyB3YXJuIDogdW5kZWZpbmVkLFxuICAgICAgZXJyb3I6IGx2ID49IDAgPyBlcnJvciA6IHVuZGVmaW5lZCxcbiAgICB9O1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfbGV2ZWw6IG51bWJlciA9IHB1cExvZ0xldmVsKSB7XG4gICAgdGhpcy5pbXBsID0gY29uc29sZTtcbiAgfVxuXG4gIEBzdGFja0hvb2tcbiAgZGVidWcoLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQge1xuICAgIHRoaXMuaW1wbD8uZGVidWc/LihERUJVRywgLi4ubWVzc2FnZXMpO1xuICB9XG5cbiAgQHN0YWNrSG9va1xuICBpbmZvKC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkIHtcbiAgICB0aGlzLmltcGw/LmluZm8/LihJTkZPLCAuLi5tZXNzYWdlcyk7XG4gIH1cblxuICBAc3RhY2tIb29rXG4gIHdhcm4oLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQge1xuICAgIHRoaXMuaW1wbD8ud2Fybj8uKFdBUk4sIC4uLm1lc3NhZ2VzKTtcbiAgfVxuXG4gIEBzdGFja0hvb2tcbiAgZXJyb3IoLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQge1xuICAgIHRoaXMuaW1wbD8uZXJyb3I/LihFUlJPUiwgLi4ubWVzc2FnZXMpO1xuICB9XG5cbiAgQHN0YWNrSG9va1xuICBmYXRhbCguLi5tZXNzYWdlczogdW5rbm93bltdKTogdm9pZCB7XG4gICAgdGhpcy5pbXBsPy5lcnJvcj8uKEZBVEFMLCAuLi5tZXNzYWdlcyk7XG4gICAgcHJvY2Vzcy5leGl0KDEpO1xuICB9XG5cbiAgcHJpdmF0ZSBkaXNwYXRjaChtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICBjb25zdCBtc2cgPSBtZXNzYWdlLnRyaW1FbmQoKTtcbiAgICBpZiAobXNnLnN0YXJ0c1dpdGgoREVCVUcpKSB7XG4gICAgICB0aGlzLmRlYnVnKG1zZy5zbGljZShERUJVRy5sZW5ndGggKyAxKSk7XG4gICAgfSBlbHNlIGlmIChtc2cuc3RhcnRzV2l0aChJTkZPKSkge1xuICAgICAgdGhpcy5pbmZvKG1zZy5zbGljZShJTkZPLmxlbmd0aCArIDEpKTtcbiAgICB9IGVsc2UgaWYgKG1zZy5zdGFydHNXaXRoKFdBUk4pKSB7XG4gICAgICB0aGlzLndhcm4obXNnLnNsaWNlKFdBUk4ubGVuZ3RoICsgMSkpO1xuICAgIH0gZWxzZSBpZiAobXNnLnN0YXJ0c1dpdGgoRVJST1IpKSB7XG4gICAgICB0aGlzLmVycm9yKG1zZy5zbGljZShFUlJPUi5sZW5ndGggKyAxKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaW5mbyhtc2cpO1xuICAgIH1cbiAgfVxuXG4gIGF0dGFjaChwcm9jOiBDaGlsZFByb2Nlc3MsIG5hbWU6IHN0cmluZykge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLmRlYnVnKGAke25hbWV9LmF0dGFjaGApO1xuICAgICAgbGV0IGZhdGFsOiBzdHJpbmcgPSBcIlwiO1xuICAgICAgY29uc3QgZGlzcGF0Y2ggPSAoZGF0YTogQnVmZmVyKSA9PiB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBkYXRhLnRvU3RyaW5nKCk7XG4gICAgICAgIGlmIChtZXNzYWdlLnN0YXJ0c1dpdGgoRkFUQUwpKSB7XG4gICAgICAgICAgZmF0YWwgKz0gbWVzc2FnZS5zbGljZShGQVRBTC5sZW5ndGggKyAxKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmRpc3BhdGNoKG1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgcHJvYy5zdGRlcnI/Lm9uKFwiZGF0YVwiLCBkaXNwYXRjaCk7XG4gICAgICBwcm9jLnN0ZG91dD8ub24oXCJkYXRhXCIsIGRpc3BhdGNoKTtcbiAgICAgIHByb2NcbiAgICAgICAgLm9uKFwiZXJyb3JcIiwgKGVycikgPT4ge1xuICAgICAgICAgIGZhdGFsICs9IGVyci5tZXNzYWdlO1xuICAgICAgICAgIHByb2Mua2lsbCgpO1xuICAgICAgICB9KVxuICAgICAgICAub25jZShcImNsb3NlXCIsIChjb2RlLCBzaWduYWwpID0+IHtcbiAgICAgICAgICBpZiAoY29kZSB8fCBzaWduYWwgfHwgZmF0YWwpIHtcbiAgICAgICAgICAgIGZhdGFsIHx8PSBgY29tbWFuZCBmYWlsZWQ6ICR7cHJvYy5zcGF3bmFyZ3Muam9pbihcIiBcIil9YDtcbiAgICAgICAgICAgIHRoaXMuZGVidWcoYCR7bmFtZX0uY2xvc2VgLCB7IGNvZGUsIHNpZ25hbCwgZmF0YWwgfSk7XG4gICAgICAgICAgICByZWplY3QobmV3IEVycm9yKGZhdGFsKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZGVidWcoYCR7bmFtZX0uY2xvc2VgKTtcbiAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC5vbihcInVuaGFuZGxlZFJlamVjdGlvblwiLCAocmVhc29uKSA9PiB7XG4gICAgICAgICAgdGhpcy5lcnJvcihgJHtuYW1lfS51bmhhbmRsZWRgLCByZWFzb24pO1xuICAgICAgICB9KVxuICAgICAgICAub24oXCJ1bmNhdWdodEV4Y2VwdGlvbk1vbml0b3JcIiwgKGVycikgPT4ge1xuICAgICAgICAgIHRoaXMuZXJyb3IoYCR7bmFtZX0udW5oYW5kbGVkYCwgZXJyKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn1cblxuY29uc3QgbG9nZ2VyID0gbmV3IExvZ2dlcigpO1xuXG4vLyBSb3V0ZSBmZm1wZWcgbmF0aXZlIGxvZ3MgdGhyb3VnaCBwdXAncyBsb2dnZXIuXG5Mb2cuc2V0Q2FsbGJhY2soKGxldmVsLCBtZXNzYWdlKSA9PiB7XG4gIGNvbnN0IG1zZyA9IG1lc3NhZ2UudHJpbUVuZCgpO1xuICBpZiAoIW1zZykgcmV0dXJuO1xuICBpZiAobGV2ZWwgPD0gQVZfTE9HX0VSUk9SKSBsb2dnZXIuZXJyb3IobXNnKTtcbiAgZWxzZSBpZiAobGV2ZWwgPD0gQVZfTE9HX1dBUk5JTkcpIGxvZ2dlci53YXJuKG1zZyk7XG59KTtcblxuZXhwb3J0IHsgbG9nZ2VyIH07XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzIxLlxuXG5pbXBvcnQgeyBhcHAsIGNyYXNoUmVwb3J0ZXIgfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IG1rZGlyU3luYyB9IGZyb20gXCJmc1wiO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi9sb2dnaW5nXCI7XG5cbmNvbnN0IFRBRyA9IFwiW0NyYXNoXVwiO1xuXG5leHBvcnQgZnVuY3Rpb24gc3RhcnRFbGVjdHJvbkNyYXNoUmVwb3J0ZXIoKSB7XG4gIGNvbnN0IGR1bXBEaXIgPSBqb2luKGFwcC5nZXRQYXRoKFwidXNlckRhdGFcIiksIFwiY3Jhc2hlc1wiKTtcbiAgbWtkaXJTeW5jKGR1bXBEaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICBhcHAuc2V0UGF0aChcImNyYXNoRHVtcHNcIiwgZHVtcERpcik7XG4gIGNyYXNoUmVwb3J0ZXIuc3RhcnQoe1xuICAgIHByb2R1Y3ROYW1lOiBcInB1cC1yZWNvcmRlclwiLFxuICAgIHVwbG9hZFRvU2VydmVyOiBmYWxzZSxcbiAgICBjb21wcmVzczogZmFsc2UsXG4gICAgaWdub3JlU3lzdGVtQ3Jhc2hIYW5kbGVyOiB0cnVlLFxuICB9KTtcbiAgbG9nZ2VyLmRlYnVnKFRBRywgXCJzZXQgZHVtcCB0b1wiLCBkdW1wRGlyKTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMjQuXG5cbmV4cG9ydCBmdW5jdGlvbiBub2VycjxGbiBleHRlbmRzICguLi5hcmdzOiBhbnlbXSkgPT4gYW55LCBEPihcbiAgZm46IEZuLFxuICBkZWZhdWx0VmFsdWU6IEQsXG4pOiAoLi4uYXJnczogUGFyYW1ldGVyczxGbj4pID0+IFJldHVyblR5cGU8Rm4+IHwgRCB7XG4gIHJldHVybiAoLi4uYXJncykgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXQgPSBmbiguLi5hcmdzKTtcbiAgICAgIGlmIChyZXQgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgIHJldHVybiByZXQuY2F0Y2goKCkgPT4gZGVmYXVsdFZhbHVlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXQ7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gZGVmYXVsdFZhbHVlO1xuICAgIH1cbiAgfTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDEvMzAuXG5cbmltcG9ydCB7IHNwYXduLCB0eXBlIENoaWxkUHJvY2VzcywgdHlwZSBTcGF3bk9wdGlvbnMgfSBmcm9tIFwiY2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0IHRyZWVLaWxsIGZyb20gXCJ0cmVlLWtpbGxcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuL2xvZ2dpbmdcIjtcblxuZXhwb3J0IGNvbnN0IFBVUF9BUkdTX0tFWSA9IFwiLS1wdXAtcHJpdi1hcmdzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJncygpIHtcbiAgY29uc3QgYXJndiA9IHByb2Nlc3MuYXJndjtcbiAgbGV0IHByaXYgPSBhcmd2LmZpbmQoKGFyZykgPT4gYXJnLnN0YXJ0c1dpdGgoUFVQX0FSR1NfS0VZKSk7XG4gIGlmICghcHJpdikge1xuICAgIGxvZ2dlci5kZWJ1ZyhcInByb2Nhcmd2XCIsIGFyZ3YpO1xuICAgIHJldHVybiBwcm9jZXNzLmFyZ3Y7XG4gIH1cbiAgY29uc3QgYXJncyA9IFtcImV4ZWNcIiwgLi4uYXJndi5zbGljZSgtMSldO1xuICBwcml2ID0gQnVmZmVyLmZyb20ocHJpdi5zcGxpdChcIj1cIilbMV0hLCBcImJhc2U2NFwiKS50b1N0cmluZygpO1xuICBhcmdzLnB1c2goLi4uSlNPTi5wYXJzZShwcml2KSk7XG4gIGxvZ2dlci5kZWJ1ZyhcInB1cGFyZ3NcIiwgYXJncyk7XG4gIHJldHVybiBhcmdzO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFByb2Nlc3NIYW5kbGUge1xuICBwcm9jZXNzOiBDaGlsZFByb2Nlc3M7XG4gIHdhaXQ6IFByb21pc2U8dm9pZD47XG4gIGdldCBraWxsZWQoKTogYm9vbGVhbjtcbiAga2lsbCgpOiB2b2lkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXhlYyhjbWQ6IHN0cmluZywgb3B0aW9ucz86IFNwYXduT3B0aW9ucyk6IFByb2Nlc3NIYW5kbGUge1xuICBjb25zdCBwYXJ0cyA9IGNtZC5zcGxpdChcIiBcIikuZmlsdGVyKChzKSA9PiBzLmxlbmd0aCk7XG4gIGNvbnN0IFtjb21tYW5kLCAuLi5hcmdzXSA9IHBhcnRzO1xuICBpZiAoIWNvbW1hbmQpIHRocm93IG5ldyBFcnJvcihcImVtcHR5IGNvbW1hbmRcIik7XG4gIGNvbnN0IHByb2MgPSBzcGF3bihjb21tYW5kLCBhcmdzLCB7XG4gICAgc3RkaW86IFwiaW5oZXJpdFwiLFxuICAgIC4uLm9wdGlvbnMsXG4gIH0pO1xuICBsZXQga2lsbGVkID0gZmFsc2U7XG4gIHJldHVybiB7XG4gICAgcHJvY2VzczogcHJvYyxcbiAgICB3YWl0OiBsb2dnZXIuYXR0YWNoKHByb2MsIGNvbW1hbmQpLFxuICAgIGdldCBraWxsZWQoKSB7XG4gICAgICByZXR1cm4ga2lsbGVkO1xuICAgIH0sXG4gICAga2lsbCgpIHtcbiAgICAgIGlmIChraWxsZWQpIHJldHVybjtcbiAgICAgIGtpbGxlZCA9IHRydWU7XG4gICAgICBjb25zdCBwaWQgPSBwcm9jLnBpZDtcbiAgICAgIGlmIChwaWQpIHRyZWVLaWxsKHBpZCwgXCJTSUdLSUxMXCIpO1xuICAgICAgZWxzZSBwcm9jLmtpbGwoXCJTSUdLSUxMXCIpO1xuICAgIH0sXG4gIH07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA2LlxuXG5pbXBvcnQgeiBmcm9tIFwiem9kXCI7XG5pbXBvcnQge1xuICBwdXBEZXRlcm1pbmlzdGljLFxuICBwdXBEaXNhYmxlR1BVLFxuICBwdXBEaXNhYmxlSHdDb2RlYyxcbiAgcHVwVXNlSW5uZXJQcm94eSxcbiAgcHVwV2luZG93VG9sZXJhbnQsXG59IGZyb20gXCIuLi9iYXNlL2NvbnN0YW50c1wiO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9XSURUSCA9IDE5MjA7XG5leHBvcnQgY29uc3QgREVGQVVMVF9IRUlHSFQgPSAxMDgwO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfRlBTID0gMzA7XG5leHBvcnQgY29uc3QgREVGQVVMVF9EVVJBVElPTiA9IDU7XG5leHBvcnQgY29uc3QgREVGQVVMVF9PVVRfRklMRSA9IFwib3V0cHV0Lm1wNFwiO1xuXG5leHBvcnQgY29uc3QgUmVuZGVyU2NoZW1hID0gei5vYmplY3Qoe1xuICBkdXJhdGlvbjogei5udW1iZXIoKS5kZXNjcmliZShcIkR1cmF0aW9uIGluIHNlY29uZHNcIiksXG4gIHdpZHRoOiB6Lm51bWJlcigpLmRlc2NyaWJlKFwiVmlkZW8gd2lkdGhcIiksXG4gIGhlaWdodDogei5udW1iZXIoKS5kZXNjcmliZShcIlZpZGVvIGhlaWdodFwiKSxcbiAgZnBzOiB6Lm51bWJlcigpLmRlc2NyaWJlKFwiRnJhbWVzIHBlciBzZWNvbmRcIiksXG4gIHdpdGhBdWRpbzogei5ib29sZWFuKCkuZGVzY3JpYmUoXCJDYXB0dXJlIGFuZCBlbmNvZGUgYXVkaW9cIiksXG4gIG91dEZpbGU6IHouc3RyaW5nKCkuZGVzY3JpYmUoXCJDb21tYS1zZXBhcmF0ZWQgb3V0cHV0IHBhdGhzOyBleHRlbnNpb24gKC5tcDQvLndlYm0pIHNlbGVjdHMgZW5jb2RlclwiKSxcbiAgdXNlSW5uZXJQcm94eTogei5ib29sZWFuKCkuZGVzY3JpYmUoXCJVc2UgYmlsaWJpbGkgaW5uZXIgcHJveHkgZm9yIHJlc291cmNlIGFjY2Vzc1wiKSxcbiAgZGV0ZXJtaW5pc3RpYzogei5ib29sZWFuKCkuZGVzY3JpYmUoXCJSZW5kZXIgYnkgZnJhbWUgcmF0aGVyIHRoYW4gcmVjb3JkaW5nXCIpLFxuICBkaXNhYmxlR3B1OiB6LmJvb2xlYW4oKS5kZXNjcmliZShcIkRpc2FibGUgR1BVIHJlbmRlcmluZywgbWF5IHJlZHVjZSBwZXJmb3JtYW5jZSBidXQgaW5jcmVhc2Ugc3RhYmlsaXR5XCIpLFxuICBkaXNhYmxlSHdDb2RlYzogei5ib29sZWFuKCkuZGVzY3JpYmUoXCJEaXNhYmxlIGhhcmR3YXJlIHZpZGVvIGVuY29kZXIgKE5WRU5DL1ZpZGVvVG9vbGJveCksIHVzZSBzb2Z0d2FyZSB4MjY1XCIpLFxuICB3aW5kb3dUb2xlcmFudDogei5ib29sZWFuKCkuZGVzY3JpYmUoXCJGYWxsIGJhY2sgdG8gZG9tLXJlYWR5IGlmIHdhcm11cCBsb2FkIHRpbWVzIG91dFwiKSxcbn0pO1xuXG5leHBvcnQgdHlwZSBSZW5kZXJPcHRpb25zID0gei5pbmZlcjx0eXBlb2YgUmVuZGVyU2NoZW1hPjtcblxuZXhwb3J0IGludGVyZmFjZSBSZW5kZXJSZXN1bHQge1xuICBvcHRpb25zOiBSZW5kZXJPcHRpb25zO1xuICB3cml0dGVuOiBudW1iZXI7XG4gIGphbms6IG51bWJlcjtcbiAgb3V0RmlsZTogc3RyaW5nO1xufVxuXG5leHBvcnQgY29uc3QgZGVmYXVsdFJlbmRlck9wdGlvbnM6IFJlbmRlck9wdGlvbnMgPSB7XG4gIHdpZHRoOiBERUZBVUxUX1dJRFRILFxuICBoZWlnaHQ6IERFRkFVTFRfSEVJR0hULFxuICBmcHM6IERFRkFVTFRfRlBTLFxuICBkdXJhdGlvbjogREVGQVVMVF9EVVJBVElPTixcbiAgb3V0RmlsZTogREVGQVVMVF9PVVRfRklMRSxcbiAgd2l0aEF1ZGlvOiBmYWxzZSxcbiAgdXNlSW5uZXJQcm94eTogcHVwVXNlSW5uZXJQcm94eSxcbiAgZGV0ZXJtaW5pc3RpYzogcHVwRGV0ZXJtaW5pc3RpYyxcbiAgZGlzYWJsZUdwdTogcHVwRGlzYWJsZUdQVSxcbiAgZGlzYWJsZUh3Q29kZWM6IHB1cERpc2FibGVId0NvZGVjLFxuICB3aW5kb3dUb2xlcmFudDogcHVwV2luZG93VG9sZXJhbnQsXG59O1xuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wOS5cblxuaW1wb3J0IHsgcHJvZ3JhbSB9IGZyb20gXCJjb21tYW5kZXJcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuL2Jhc2UvbG9nZ2luZ1wiO1xuaW1wb3J0IHsgbm9lcnIgfSBmcm9tIFwiLi9iYXNlL25vZXJyXCI7XG5pbXBvcnQgeyBwYXJzZU51bWJlciB9IGZyb20gXCIuL2Jhc2UvcGFyc2VyXCI7XG5pbXBvcnQgeyBwYXJncyB9IGZyb20gXCIuL2Jhc2UvcHJvY2Vzc1wiO1xuaW1wb3J0IHsgUmVuZGVyU2NoZW1hLCB0eXBlIFJlbmRlck9wdGlvbnMgfSBmcm9tIFwiLi9yZW5kZXJlci9zY2hlbWFcIjtcblxuZXhwb3J0IGludGVyZmFjZSBDTElPcHRpb25zIHtcbiAgbmFtZTogc3RyaW5nO1xuICBkZWZhdWx0czogUmVuZGVyT3B0aW9ucztcbiAgcnVuOiAoc291cmNlOiBzdHJpbmcsIG9wdGlvbnM6IFJlbmRlck9wdGlvbnMpID0+IFByb21pc2U8dW5rbm93bj47XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBtYWtlQ0xJKG9wdGlvbnM6IENMSU9wdGlvbnMpIHtcbiAgY29uc3Qgc2hhcGUgPSBSZW5kZXJTY2hlbWEuc2hhcGU7XG4gIGNvbnN0IGQgPSBvcHRpb25zLmRlZmF1bHRzO1xuICBwcm9ncmFtXG4gICAgLm5hbWUob3B0aW9ucy5uYW1lKVxuICAgIC5hcmd1bWVudChcIjxzb3VyY2U+XCIsIFwiZmlsZTovLywgaHR0cChzKTovLywgb3IgZGF0YTogVVJJXCIpXG4gICAgLm9wdGlvbihcIi1XLCAtLXdpZHRoIDxudW1iZXI+XCIsIHNoYXBlLndpZHRoLmRlc2NyaXB0aW9uLCBgJHtkLndpZHRofWApXG4gICAgLm9wdGlvbihcIi1ILCAtLWhlaWdodCA8bnVtYmVyPlwiLCBzaGFwZS5oZWlnaHQuZGVzY3JpcHRpb24sIGAke2QuaGVpZ2h0fWApXG4gICAgLm9wdGlvbihcIi1mLCAtLWZwcyA8bnVtYmVyPlwiLCBzaGFwZS5mcHMuZGVzY3JpcHRpb24sIGAke2QuZnBzfWApXG4gICAgLm9wdGlvbihcIi10LCAtLWR1cmF0aW9uIDxudW1iZXI+XCIsIHNoYXBlLmR1cmF0aW9uLmRlc2NyaXB0aW9uLCBgJHtkLmR1cmF0aW9ufWApXG4gICAgLm9wdGlvbihcIi1vLCAtLW91dC1maWxlIDxwYXRoPlwiLCBzaGFwZS5vdXRGaWxlLmRlc2NyaXB0aW9uLCBkLm91dEZpbGUpXG4gICAgLm9wdGlvbihcIi1hLCAtLXdpdGgtYXVkaW9cIiwgc2hhcGUud2l0aEF1ZGlvLmRlc2NyaXB0aW9uLCBkLndpdGhBdWRpbylcbiAgICAub3B0aW9uKFwiLWQsIC0tZGV0ZXJtaW5pc3RpY1wiLCBzaGFwZS5kZXRlcm1pbmlzdGljLmRlc2NyaXB0aW9uLCBkLmRldGVybWluaXN0aWMpXG4gICAgLm9wdGlvbihcIi0tdXNlLWlubmVyLXByb3h5XCIsIHNoYXBlLnVzZUlubmVyUHJveHkuZGVzY3JpcHRpb24sIGQudXNlSW5uZXJQcm94eSlcbiAgICAub3B0aW9uKFwiLS1kaXNhYmxlLWdwdVwiLCBzaGFwZS5kaXNhYmxlR3B1LmRlc2NyaXB0aW9uLCBkLmRpc2FibGVHcHUpXG4gICAgLm9wdGlvbihcIi0tZGlzYWJsZS1ody1jb2RlY1wiLCBzaGFwZS5kaXNhYmxlSHdDb2RlYy5kZXNjcmlwdGlvbiwgZC5kaXNhYmxlSHdDb2RlYylcbiAgICAub3B0aW9uKFwiLS13aW5kb3ctdG9sZXJhbnRcIiwgc2hhcGUud2luZG93VG9sZXJhbnQuZGVzY3JpcHRpb24sIGQud2luZG93VG9sZXJhbnQpXG4gICAgLmFjdGlvbihhc3luYyAoc291cmNlOiBzdHJpbmcsIG9wdHMpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IG9wdGlvbnMucnVuKHNvdXJjZSwge1xuICAgICAgICAgIHdpZHRoOiBub2VycihwYXJzZU51bWJlciwgZC53aWR0aCkob3B0cy53aWR0aCksXG4gICAgICAgICAgaGVpZ2h0OiBub2VycihwYXJzZU51bWJlciwgZC5oZWlnaHQpKG9wdHMuaGVpZ2h0KSxcbiAgICAgICAgICBmcHM6IG5vZXJyKHBhcnNlTnVtYmVyLCBkLmZwcykob3B0cy5mcHMpLFxuICAgICAgICAgIGR1cmF0aW9uOiBub2VycihwYXJzZU51bWJlciwgZC5kdXJhdGlvbikob3B0cy5kdXJhdGlvbiksXG4gICAgICAgICAgb3V0RmlsZTogb3B0cy5vdXRGaWxlID8/IGQub3V0RmlsZSxcbiAgICAgICAgICB3aXRoQXVkaW86IG9wdHMud2l0aEF1ZGlvID8/IGQud2l0aEF1ZGlvLFxuICAgICAgICAgIHVzZUlubmVyUHJveHk6IG9wdHMudXNlSW5uZXJQcm94eSA/PyBkLnVzZUlubmVyUHJveHksXG4gICAgICAgICAgZGV0ZXJtaW5pc3RpYzogb3B0cy5kZXRlcm1pbmlzdGljID8/IGQuZGV0ZXJtaW5pc3RpYyxcbiAgICAgICAgICBkaXNhYmxlR3B1OiBvcHRzLmRpc2FibGVHcHUgPz8gZC5kaXNhYmxlR3B1LFxuICAgICAgICAgIGRpc2FibGVId0NvZGVjOiBvcHRzLmRpc2FibGVId0NvZGVjID8/IGQuZGlzYWJsZUh3Q29kZWMsXG4gICAgICAgICAgd2luZG93VG9sZXJhbnQ6IG9wdHMud2luZG93VG9sZXJhbnQgPz8gZC53aW5kb3dUb2xlcmFudCxcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGxvZ2dlci5mYXRhbChlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgYXdhaXQgcHJvZ3JhbS5wYXJzZUFzeW5jKHBhcmdzKCkpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8wMS5cblxuaW1wb3J0IHR5cGUgeyBDaGlsZFByb2Nlc3MgfSBmcm9tIFwiY2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSBcImV2ZW50c1wiO1xuXG5leHBvcnQgY29uc3QgZW51bSBJcGNNc2dUeXBlIHtcbiAgUFJPR1JFU1MgPSBcInByb2dyZXNzXCIsXG4gIERPTkUgPSBcImRvbmVcIixcbiAgRVJST1IgPSBcImVycm9yXCIsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSXBjRG9uZVBheWxvYWQge1xuICB3cml0dGVuOiBudW1iZXI7XG4gIGphbms6IG51bWJlcjtcbiAgb3V0RmlsZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFByb2dyZXNzTXNnIHtcbiAgdHlwZTogSXBjTXNnVHlwZS5QUk9HUkVTUztcbiAgdmFsdWU6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEb25lTXNnIHtcbiAgdHlwZTogSXBjTXNnVHlwZS5ET05FO1xuICBwYXlsb2FkOiBJcGNEb25lUGF5bG9hZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFcnJvck1zZyB7XG4gIHR5cGU6IElwY01zZ1R5cGUuRVJST1I7XG4gIGVycm9yOiBzdHJpbmc7XG59XG5cbmV4cG9ydCB0eXBlIElwY01zZyA9IFByb2dyZXNzTXNnIHwgRG9uZU1zZyB8IEVycm9yTXNnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElwY0V2ZW50cyB7XG4gIHByb2dyZXNzOiBbdmFsdWU6IG51bWJlcl07XG4gIG1lc3NhZ2U6IFttc2c6IElwY01zZ107XG4gIGRvbmU6IFtwYXlsb2FkOiBJcGNEb25lUGF5bG9hZF07XG4gIGVycm9yOiBbZXJyb3I6IEVycm9yXTtcbiAgY2xvc2U6IFtjb2RlOiBudW1iZXIgfCBudWxsXTtcbn1cblxuZXhwb3J0IGNsYXNzIElwY1dyaXRlciB7XG4gIHdyaXRlUHJvZ3Jlc3ModmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuc2VuZCh7IHR5cGU6IElwY01zZ1R5cGUuUFJPR1JFU1MsIHZhbHVlIH0pO1xuICB9XG5cbiAgd3JpdGVFcnJvcihlcnJvcjogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuc2VuZCh7IHR5cGU6IElwY01zZ1R5cGUuRVJST1IsIGVycm9yIH0pO1xuICB9XG5cbiAgd3JpdGVEb25lKHBheWxvYWQ6IElwY0RvbmVQYXlsb2FkKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuc2VuZCh7IHR5cGU6IElwY01zZ1R5cGUuRE9ORSwgcGF5bG9hZCB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2VuZChtc2c6IElwY01zZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgaWYgKCFwcm9jZXNzLnNlbmQpIHJldHVybiByZXNvbHZlKCk7XG4gICAgICBwcm9jZXNzLnNlbmQobXNnLCAoKSA9PiByZXNvbHZlKCkpO1xuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBJcGNSZWFkZXIgZXh0ZW5kcyBFdmVudEVtaXR0ZXI8SXBjRXZlbnRzPiB7XG4gIGNvbnN0cnVjdG9yKGNoaWxkOiBDaGlsZFByb2Nlc3MpIHtcbiAgICBzdXBlcigpO1xuICAgIGNoaWxkLm9uKFwibWVzc2FnZVwiLCAocmF3KSA9PiB7XG4gICAgICBjb25zdCBtc2cgPSByYXcgYXMgSXBjTXNnO1xuICAgICAgdGhpcy5lbWl0KFwibWVzc2FnZVwiLCBtc2cpO1xuICAgICAgc3dpdGNoIChtc2cudHlwZSkge1xuICAgICAgICBjYXNlIElwY01zZ1R5cGUuUFJPR1JFU1M6XG4gICAgICAgICAgdGhpcy5lbWl0KFwicHJvZ3Jlc3NcIiwgbXNnLnZhbHVlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBJcGNNc2dUeXBlLkRPTkU6XG4gICAgICAgICAgdGhpcy5lbWl0KFwiZG9uZVwiLCBtc2cucGF5bG9hZCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgSXBjTXNnVHlwZS5FUlJPUjpcbiAgICAgICAgICB0aGlzLmVtaXQoXCJlcnJvclwiLCBuZXcgRXJyb3IobXNnLmVycm9yKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSk7XG4gICAgY2hpbGQub25jZShcImV4aXRcIiwgKGMpID0+IHRoaXMuZW1pdChcImNsb3NlXCIsIGMpKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wOS5cblxuZXhwb3J0IGZ1bmN0aW9uIHNsZWVwKG1zOiBudW1iZXIpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIG1zKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3aXRoVGltZW91dDxUPihwOiBQcm9taXNlPFQ+LCBtczogbnVtYmVyLCBsYWJlbDogc3RyaW5nKTogUHJvbWlzZTxUPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHJlamVjdChuZXcgRXJyb3IoYCR7bGFiZWx9IHRpbWVkIG91dCBhZnRlciAke21zfW1zYCkpLCBtcyk7XG4gICAgcC50aGVuKHJlc29sdmUsIHJlamVjdCkuZmluYWxseSgoKSA9PiBjbGVhclRpbWVvdXQodGltZXIpKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwZXJpb2RpY2FsKGNhbGxiYWNrOiAoY291bnQ6IG51bWJlcikgPT4gUHJvbWlzZTx2b2lkPiB8IHZvaWQsIG1zOiBudW1iZXIpIHtcbiAgbGV0IHRva2VuOiBOb2RlSlMuVGltZW91dDtcbiAgbGV0IGNsb3NlZCA9IGZhbHNlO1xuICBhc3luYyBmdW5jdGlvbiB0aWNrKGNvdW50OiBudW1iZXIpIHtcbiAgICBhd2FpdCBjYWxsYmFjayhjb3VudCk7XG4gICAgaWYgKGNsb3NlZCkgcmV0dXJuO1xuICAgIHRva2VuID0gc2V0VGltZW91dCgoKSA9PiB0aWNrKGNvdW50ICsgMSksIG1zKTtcbiAgfVxuICB0b2tlbiA9IHNldFRpbWVvdXQoKCkgPT4gdGljaygwKSwgbXMpO1xuICByZXR1cm4gKCkgPT4ge1xuICAgIGNsb3NlZCA9IHRydWU7XG4gICAgY2xlYXJUaW1lb3V0KHRva2VuKTtcbiAgfTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDMvMTMuXG5cbmltcG9ydCB0eXBlIHsgRGVidWdnZXIsIFNpemUgfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IHdpdGhUaW1lb3V0IH0gZnJvbSBcIi4vdGltaW5nXCI7XG5cbmNvbnN0IENEUF9USU1FT1VUX01TID0gNV8wMDA7XG5cbmV4cG9ydCBmdW5jdGlvbiBzZW5kKGNkcDogRGVidWdnZXIsIG1ldGhvZDogc3RyaW5nLCBwYXJhbXM/OiBvYmplY3QpOiBQcm9taXNlPHVua25vd24+IHtcbiAgcmV0dXJuIHdpdGhUaW1lb3V0KGNkcC5zZW5kQ29tbWFuZChtZXRob2QsIHBhcmFtcyksIENEUF9USU1FT1VUX01TLCBgY2RwLiR7bWV0aG9kfWApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYWR2YW5jZVZpcnR1YWxUaW1lKGNkcDogRGVidWdnZXIsIGJ1ZGdldDogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY2RwLm9mZihcIm1lc3NhZ2VcIiwgaGFuZGxlcik7XG4gICAgICByZWplY3QobmV3IEVycm9yKGBhZHZhbmNlVmlydHVhbFRpbWUgdGltZWQgb3V0IGFmdGVyICR7Q0RQX1RJTUVPVVRfTVN9bXNgKSk7XG4gICAgfSwgQ0RQX1RJTUVPVVRfTVMpO1xuXG4gICAgY29uc3QgaGFuZGxlciA9IChfOiBFbGVjdHJvbi5FdmVudCwgbWV0aG9kOiBzdHJpbmcpID0+IHtcbiAgICAgIGlmIChtZXRob2QgPT09IFwiRW11bGF0aW9uLnZpcnR1YWxUaW1lQnVkZ2V0RXhwaXJlZFwiKSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgY2RwLm9mZihcIm1lc3NhZ2VcIiwgaGFuZGxlcik7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNkcC5vbihcIm1lc3NhZ2VcIiwgaGFuZGxlcik7XG4gICAgc2VuZChjZHAsIFwiRW11bGF0aW9uLnNldFZpcnR1YWxUaW1lUG9saWN5XCIsIHsgcG9saWN5OiBcImFkdmFuY2VcIiwgYnVkZ2V0IH0pLmNhdGNoKChlKSA9PiB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICBjZHAub2ZmKFwibWVzc2FnZVwiLCBoYW5kbGVyKTtcbiAgICAgIHJlamVjdChlKTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwYXVzZVZpcnR1YWxUaW1lKGNkcDogRGVidWdnZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgc2VuZChjZHAsIFwiRW11bGF0aW9uLnNldFZpcnR1YWxUaW1lUG9saWN5XCIsIHsgcG9saWN5OiBcInBhdXNlXCIgfSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXNpemVEcmF3YWJsZShjZHA6IERlYnVnZ2VyLCBzaXplOiBTaXplKSB7XG4gIGF3YWl0IHNlbmQoY2RwLCBcIkVtdWxhdGlvbi5zZXREZXZpY2VNZXRyaWNzT3ZlcnJpZGVcIiwge1xuICAgIC4uLnNpemUsXG4gICAgZGV2aWNlU2NhbGVGYWN0b3I6IDEsXG4gICAgbW9iaWxlOiBmYWxzZSxcbiAgfSk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA5LlxuXG5pbXBvcnQgeyBpcGNNYWluLCB0eXBlIERlYnVnZ2VyLCB0eXBlIFNpemUgfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IHNlbmQgfSBmcm9tIFwiLi4vYmFzZS9jZHBcIjtcbmltcG9ydCB7IHdpdGhUaW1lb3V0IH0gZnJvbSBcIi4uL2Jhc2UvdGltaW5nXCI7XG5cbmV4cG9ydCBjb25zdCBGUkFNRV9TWU5DX01BUktFUl9XSURUSCA9IDMyO1xuZXhwb3J0IGNvbnN0IEZSQU1FX1NZTkNfTUFSS0VSX0hFSUdIVCA9IDE7XG5leHBvcnQgY29uc3QgU1RFR09fVElDS19DSEFOTkVMID0gXCJzdGVnby10aWNrXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFN0ZWdvSFRNTCh0YXJnZXRVUkw6IHN0cmluZywgc2l6ZTogU2l6ZSk6IHN0cmluZyB7XG4gIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gc2l6ZTtcbiAgcmV0dXJuIGA8IURPQ1RZUEUgaHRtbD5cbjxodG1sPlxuPGhlYWQ+XG4gIDxtZXRhIGNoYXJzZXQ9XCJVVEYtOFwiPlxuICA8c3R5bGU+XG4gICAgKiB7IG1hcmdpbjogMDsgcGFkZGluZzogMDsgYm94LXNpemluZzogYm9yZGVyLWJveDsgfVxuICAgIGh0bWwsIGJvZHkgeyB3aWR0aDogJHt3aWR0aH1weDsgaGVpZ2h0OiAke2hlaWdodCArIDF9cHg7IG92ZXJmbG93OiBoaWRkZW47IH1cbiAgICAjdGFyZ2V0IHsgXG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7IFxuICAgICAgdG9wOiAwOyBcbiAgICAgIGxlZnQ6IDA7IFxuICAgICAgd2lkdGg6ICR7d2lkdGh9cHg7IFxuICAgICAgaGVpZ2h0OiAke2hlaWdodH1weDsgXG4gICAgICBib3JkZXI6IG5vbmU7IFxuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgfVxuICAgICNzdGVnbyB7IFxuICAgICAgcG9zaXRpb246IGFic29sdXRlOyBcbiAgICAgIHRvcDogJHtoZWlnaHR9cHg7IFxuICAgICAgbGVmdDogMDsgXG4gICAgICB3aWR0aDogJHt3aWR0aH1weDsgXG4gICAgICBoZWlnaHQ6IDFweDsgXG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIGltYWdlLXJlbmRlcmluZzogcGl4ZWxhdGVkO1xuICAgIH1cbiAgPC9zdHlsZT5cbjwvaGVhZD5cbjxib2R5PlxuICA8aWZyYW1lIGlkPVwidGFyZ2V0XCIgc3JjPVwiJHt0YXJnZXRVUkx9XCI+PC9pZnJhbWU+XG4gIDxjYW52YXMgaWQ9XCJzdGVnb1wiIHdpZHRoPVwiJHt3aWR0aH1cIiBoZWlnaHQ9XCIxXCI+PC9jYW52YXM+XG4gIDxzY3JpcHQ+XG4gICAgKGZ1bmN0aW9uKCkge1xuICAgICAgY29uc3QgeyBpcGNSZW5kZXJlciB9ID0gcmVxdWlyZSgnZWxlY3Ryb24nKTtcbiAgICAgIGNvbnN0IFdJRFRIID0gJHt3aWR0aH07XG4gICAgICBjb25zdCBNQVJLRVJfV0lEVEggPSAke0ZSQU1FX1NZTkNfTUFSS0VSX1dJRFRIfTtcbiAgICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdGVnbycpO1xuICAgICAgY29uc3QgY3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJywgeyB3aWxsUmVhZEZyZXF1ZW50bHk6IHRydWUgfSk7XG4gICAgICBsZXQgc3RhcnRUaW1lID0gbnVsbDtcbiAgICAgIGxldCByYWZJZCA9IG51bGw7XG5cbiAgICAgIGZ1bmN0aW9uIGVuY29kZVRpbWVzdGFtcCh0aW1lc3RhbXBNcykge1xuICAgICAgICBjb25zdCBpbWFnZURhdGEgPSBjdHguY3JlYXRlSW1hZ2VEYXRhKFdJRFRILCAxKTtcbiAgICAgICAgY29uc3QgZGF0YSA9IGltYWdlRGF0YS5kYXRhO1xuXG4gICAgICAgIGNvbnN0IHRpbWVzdGFtcEludCA9IE1hdGguZmxvb3IodGltZXN0YW1wTXMpID4+PiAwO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgTUFSS0VSX1dJRFRIOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBiaXQgPSAodGltZXN0YW1wSW50ID4+PiAoTUFSS0VSX1dJRFRIIC0gMSAtIGkpKSAmIDE7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSBiaXQgPyAyNTUgOiAwO1xuICAgICAgICAgIGNvbnN0IGlkeCA9IGkgKiA0O1xuICAgICAgICAgIGRhdGFbaWR4XSA9IHZhbHVlO1xuICAgICAgICAgIGRhdGFbaWR4ICsgMV0gPSB2YWx1ZTtcbiAgICAgICAgICBkYXRhW2lkeCArIDJdID0gdmFsdWU7XG4gICAgICAgICAgZGF0YVtpZHggKyAzXSA9IDI1NTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAobGV0IGkgPSBNQVJLRVJfV0lEVEg7IGkgPCBXSURUSDsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgaWR4ID0gaSAqIDQ7XG4gICAgICAgICAgZGF0YVtpZHhdID0gMDtcbiAgICAgICAgICBkYXRhW2lkeCArIDFdID0gMDtcbiAgICAgICAgICBkYXRhW2lkeCArIDJdID0gMDtcbiAgICAgICAgICBkYXRhW2lkeCArIDNdID0gMjU1O1xuICAgICAgICB9XG5cbiAgICAgICAgY3R4LnB1dEltYWdlRGF0YShpbWFnZURhdGEsIDAsIDApO1xuICAgICAgICBpcGNSZW5kZXJlci5zZW5kKCcke1NURUdPX1RJQ0tfQ0hBTk5FTH0nKTtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gdXBkYXRlTG9vcCgpIHtcbiAgICAgICAgaWYgKHN0YXJ0VGltZSA9PT0gbnVsbCkgcmV0dXJuO1xuICAgICAgICBjb25zdCBlbGFwc2VkID0gcGVyZm9ybWFuY2Uubm93KCkgLSBzdGFydFRpbWU7XG4gICAgICAgIGVuY29kZVRpbWVzdGFtcChlbGFwc2VkKTtcbiAgICAgICAgcmFmSWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodXBkYXRlTG9vcCk7XG4gICAgICB9XG5cbiAgICAgIHdpbmRvdy5fX3B1cF9zdGFydF9zdGVnb19fID0gKCkgPT4ge1xuICAgICAgICBzdGFydFRpbWUgPSBwZXJmb3JtYW5jZS5ub3coKTtcbiAgICAgICAgZW5jb2RlVGltZXN0YW1wKDApO1xuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodXBkYXRlTG9vcCk7XG4gICAgICB9O1xuXG4gICAgICB3aW5kb3cuX19wdXBfZHJhd19zdGVnb19fID0gKG1zKSA9PiB7XG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiBlbmNvZGVUaW1lc3RhbXAobXMpKTtcbiAgICAgIH07XG5cbiAgICAgIHdpbmRvdy5fX3B1cF9zdG9wX3N0ZWdvX18gPSAoKSA9PiB7XG4gICAgICAgIGlmIChyYWZJZCAhPT0gbnVsbCkge1xuICAgICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHJhZklkKTtcbiAgICAgICAgICByYWZJZCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSkoKTtcbiAgPC9zY3JpcHQ+XG48L2JvZHk+XG48L2h0bWw+YDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlY29kZVN0ZWdvKGJpdG1hcDogQnVmZmVyLCBzaXplOiBTaXplKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSBzaXplO1xuICBpZiAod2lkdGggPCBGUkFNRV9TWU5DX01BUktFUl9XSURUSCB8fCBoZWlnaHQgPCAyKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IG1hcmtlclJvdyA9IGhlaWdodCAtIDE7XG5cbiAgbGV0IHRpbWVzdGFtcCA9IDA7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgRlJBTUVfU1lOQ19NQVJLRVJfV0lEVEg7IGkrKykge1xuICAgIGNvbnN0IHBpeGVsSWR4ID0gKG1hcmtlclJvdyAqIHdpZHRoICsgaSkgKiA0O1xuICAgIGNvbnN0IHIgPSBiaXRtYXBbcGl4ZWxJZHhdID8/IDA7XG4gICAgY29uc3QgYml0ID0gciA+IDEyNyA/IDEgOiAwO1xuICAgIHRpbWVzdGFtcCA9ICh0aW1lc3RhbXAgPDwgMSkgfCBiaXQ7XG4gIH1cblxuICB0aW1lc3RhbXAgPSB0aW1lc3RhbXAgPj4+IDA7XG5cbiAgaWYgKCFOdW1iZXIuaXNGaW5pdGUodGltZXN0YW1wKSB8fCB0aW1lc3RhbXAgPCAwIHx8IHRpbWVzdGFtcCA+IDFlNykge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICByZXR1cm4gdGltZXN0YW1wO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc3RhcnRTdGVnbyhjZHA6IERlYnVnZ2VyKSB7XG4gIGF3YWl0IHNlbmQoY2RwLCBcIlJ1bnRpbWUuZXZhbHVhdGVcIiwgeyBleHByZXNzaW9uOiBgX19wdXBfc3RhcnRfc3RlZ29fXygpYCB9KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHN3YXBCdWZmZXIoY2RwOiBEZWJ1Z2dlciwgZXhwZWN0ZWQ6IG51bWJlcikge1xuICBjb25zdCBoYW5kbGVyID0gKCkgPT4ge307XG4gIGNvbnN0IHN3YXBwZWQgPSBuZXcgUHJvbWlzZTx2b2lkPigocikgPT4gaXBjTWFpbi5vbmNlKFNURUdPX1RJQ0tfQ0hBTk5FTCwgKCkgPT4gcigpKSk7XG4gIGF3YWl0IHNlbmQoY2RwLCBcIlJ1bnRpbWUuZXZhbHVhdGVcIiwgeyBleHByZXNzaW9uOiBgX19wdXBfZHJhd19zdGVnb19fKCR7ZXhwZWN0ZWR9KWAgfSk7XG4gIHRyeSB7XG4gICAgYXdhaXQgd2l0aFRpbWVvdXQoc3dhcHBlZCwgNV8wMDAsIFwic3dhcEJ1ZmZlciBzdGVnbyBpcGNcIik7XG4gIH0gZmluYWxseSB7XG4gICAgaXBjTWFpbi5yZW1vdmVMaXN0ZW5lcihTVEVHT19USUNLX0NIQU5ORUwsIGhhbmRsZXIpO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzdG9wU3RlZ28oY2RwOiBEZWJ1Z2dlcikge1xuICBhd2FpdCBzZW5kKGNkcCwgXCJSdW50aW1lLmV2YWx1YXRlXCIsIHsgZXhwcmVzc2lvbjogYF9fcHVwX3N0b3Bfc3RlZ29fXygpYCB9KTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMDEuXG5cbmltcG9ydCB0eXBlIHsgU2l6ZSB9IGZyb20gXCJlbGVjdHJvblwiO1xuaW1wb3J0IHsgcHJvdG9jb2wgfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IGJ1aWxkU3RlZ29IVE1MIH0gZnJvbSBcIi4vc3RlZ29cIjtcblxuY29uc3QgUFVQX1NDSEVNRSA9IFwicHVwXCI7XG5cbi8vIE11c3QgYmUgY2FsbGVkIHN5bmNocm9ub3VzbHkgYmVmb3JlIGFwcCBpcyByZWFkeS5cbnByb3RvY29sLnJlZ2lzdGVyU2NoZW1lc0FzUHJpdmlsZWdlZChbXG4gIHtcbiAgICBzY2hlbWU6IFBVUF9TQ0hFTUUsXG4gICAgcHJpdmlsZWdlczoge1xuICAgICAgc3RhbmRhcmQ6IHRydWUsXG4gICAgICBzZWN1cmU6IHRydWUsXG4gICAgICBieXBhc3NDU1A6IHRydWUsXG4gICAgICBhbGxvd1NlcnZpY2VXb3JrZXJzOiB0cnVlLFxuICAgICAgc3VwcG9ydEZldGNoQVBJOiB0cnVlLFxuICAgICAgY29yc0VuYWJsZWQ6IHRydWUsXG4gICAgICBzdHJlYW06IHRydWUsXG4gICAgICBjb2RlQ2FjaGU6IHRydWUsXG4gICAgfSxcbiAgfSxcbl0pO1xuXG4vLyBNdXN0IGJlIGNhbGxlZCBhZnRlciBhcHAgaXMgcmVhZHkuXG5leHBvcnQgZnVuY3Rpb24gc2V0dXBQdXBQcm90b2NvbCgpOiB2b2lkIHtcbiAgcHJvdG9jb2wuaGFuZGxlKFBVUF9TQ0hFTUUsIChyZXEpID0+IHtcbiAgICBjb25zdCB1cmwgPSBuZXcgVVJMKHJlcS51cmwpO1xuICAgIGNvbnN0IHNyYyA9IHVybC5zZWFyY2hQYXJhbXMuZ2V0KFwic3JjXCIpID8/IFwiXCI7XG4gICAgY29uc3Qgd2lkdGggPSBwYXJzZUludCh1cmwuc2VhcmNoUGFyYW1zLmdldChcIndcIikgPz8gXCIwXCIsIDEwKTtcbiAgICBjb25zdCBoZWlnaHQgPSBwYXJzZUludCh1cmwuc2VhcmNoUGFyYW1zLmdldChcImhcIikgPz8gXCIwXCIsIDEwKTtcbiAgICBjb25zdCBodG1sID0gYnVpbGRTdGVnb0hUTUwoc3JjLCB7IHdpZHRoLCBoZWlnaHQgfSk7XG4gICAgcmV0dXJuIG5ldyBSZXNwb25zZShodG1sLCB7IGhlYWRlcnM6IHsgXCJjb250ZW50LXR5cGVcIjogXCJ0ZXh0L2h0bWxcIiB9IH0pO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVN0ZWdvVVJMKHNyYzogc3RyaW5nLCBzaXplOiBTaXplKTogc3RyaW5nIHtcbiAgY29uc3QgdXJsID0gbmV3IFVSTChgJHtQVVBfU0NIRU1FfTovL3N0ZWdvYCk7XG4gIHVybC5zZWFyY2hQYXJhbXMuc2V0KFwic3JjXCIsIHNyYyk7XG4gIHVybC5zZWFyY2hQYXJhbXMuc2V0KFwid1wiLCBTdHJpbmcoc2l6ZS53aWR0aCkpO1xuICB1cmwuc2VhcmNoUGFyYW1zLnNldChcImhcIiwgU3RyaW5nKHNpemUuaGVpZ2h0KSk7XG4gIHJldHVybiB1cmwudG9TdHJpbmcoKTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDEvMzAuXG5cbmludGVyZmFjZSBRdWV1ZUVudHJ5IHtcbiAgcnVuOiBWb2lkRnVuY3Rpb247XG4gIHJlamVjdDogKHJlYXNvbjogdW5rbm93bikgPT4gdm9pZDtcbiAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG59XG5cbmV4cG9ydCBjbGFzcyBDb25jdXJyZW5jeUxpbWl0ZXIge1xuICBwcml2YXRlIF9hY3RpdmUgPSAwO1xuICBwcml2YXRlIF9xdWV1ZTogUXVldWVFbnRyeVtdID0gW107XG4gIHByaXZhdGUgX3NpZ25hbHMgPSBuZXcgV2Vha1NldDxBYm9ydFNpZ25hbD4oKTtcbiAgcHJpdmF0ZSBfcmVzb2x2ZT86IFZvaWRGdW5jdGlvbjtcblxuICBjb25zdHJ1Y3RvcihyZWFkb25seSBtYXhDb25jdXJyZW5jeTogbnVtYmVyKSB7fVxuXG4gIGdldCBhY3RpdmUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fYWN0aXZlO1xuICB9XG5cbiAgZ2V0IHBlbmRpbmcoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fcXVldWUubGVuZ3RoO1xuICB9XG5cbiAgZ2V0IHN0YXRzKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBhY3RpdmU6ICR7dGhpcy5hY3RpdmV9LCBwZW5kaW5nOiAke3RoaXMucGVuZGluZ31gO1xuICB9XG5cbiAgYXN5bmMgc2NoZWR1bGU8VD4oZm46ICgpID0+IFByb21pc2U8VD4sIHNpZ25hbD86IEFib3J0U2lnbmFsKTogUHJvbWlzZTxUPiB7XG4gICAgc2lnbmFsPy50aHJvd0lmQWJvcnRlZCgpO1xuXG4gICAgaWYgKHNpZ25hbCAmJiAhdGhpcy5fc2lnbmFscy5oYXMoc2lnbmFsKSkge1xuICAgICAgdGhpcy5fc2lnbmFscy5hZGQoc2lnbmFsKTtcbiAgICAgIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgKCkgPT4gdGhpcy5mbHVzaChzaWduYWwpLCB7IG9uY2U6IHRydWUgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPFQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMuX3F1ZXVlLnB1c2goe1xuICAgICAgICBydW46ICgpID0+IHtcbiAgICAgICAgICBpZiAoc2lnbmFsPy5hYm9ydGVkKSB7XG4gICAgICAgICAgICByZWplY3Qoc2lnbmFsLnJlYXNvbik7XG4gICAgICAgICAgICB0aGlzLm5leHQoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5fYWN0aXZlKys7XG4gICAgICAgICAgZm4oKVxuICAgICAgICAgICAgLnRoZW4oKHYpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5fYWN0aXZlLS07XG4gICAgICAgICAgICAgIHJlc29sdmUodik7XG4gICAgICAgICAgICAgIHRoaXMubmV4dCgpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLl9hY3RpdmUtLTtcbiAgICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgICAgICB0aGlzLm5leHQoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICByZWplY3QsXG4gICAgICAgIHNpZ25hbCxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5uZXh0KCk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBkcmFpbigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fYWN0aXZlID09PSAwICYmIHRoaXMucGVuZGluZyA9PT0gMCkgcmV0dXJuO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocikgPT4gKHRoaXMuX3Jlc29sdmUgPSByKSk7XG4gIH1cblxuICBwcml2YXRlIGZsdXNoKHNpZ25hbDogQWJvcnRTaWduYWwpIHtcbiAgICBjb25zdCBrZWVwOiBRdWV1ZUVudHJ5W10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIHRoaXMuX3F1ZXVlKSB7XG4gICAgICBpZiAoZW50cnkuc2lnbmFsID09PSBzaWduYWwpIHtcbiAgICAgICAgZW50cnkucmVqZWN0KHNpZ25hbC5yZWFzb24pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAga2VlcC5wdXNoKGVudHJ5KTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5fcXVldWUgPSBrZWVwO1xuICAgIHRoaXMubmV4dCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBuZXh0KCkge1xuICAgIGlmICh0aGlzLl9hY3RpdmUgPT09IDAgJiYgdGhpcy5wZW5kaW5nID09PSAwKSB7XG4gICAgICB0aGlzLl9yZXNvbHZlPy4oKTtcbiAgICAgIHRoaXMuX3Jlc29sdmUgPSB1bmRlZmluZWQ7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLl9hY3RpdmUgPCB0aGlzLm1heENvbmN1cnJlbmN5KSB7XG4gICAgICB0aGlzLl9xdWV1ZS5zaGlmdCgpPy5ydW4oKTtcbiAgICB9XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMTIuXG5cbmltcG9ydCB7IENvZGVjLCBDb2RlY0NvbnRleHQsIEZGbXBlZ0Vycm9yLCBGcmFtZSwgSGFyZHdhcmVGcmFtZXNDb250ZXh0LCBQYWNrZXQsIFJhdGlvbmFsLCB0eXBlIFN0cmVhbSB9IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQge1xuICBBVl9DT0RFQ19GTEFHX0dMT0JBTF9IRUFERVIsXG4gIEFWRVJST1JfRUFHQUlOLFxuICBBVkVSUk9SX0VPRixcbiAgdHlwZSBBVkNvbG9yUmFuZ2UsXG4gIHR5cGUgQVZQaXhlbEZvcm1hdCxcbn0gZnJvbSBcIm5vZGUtYXYvY29uc3RhbnRzXCI7XG5pbXBvcnQgdHlwZSB7IEZvcm1hdE11eGVyIH0gZnJvbSBcIi4vbXV4ZXJcIjtcblxuZXhwb3J0IGludGVyZmFjZSBWaWRlb0N0eE9wdGlvbnMge1xuICBjb2RlYzogQ29kZWM7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICBmcHM6IG51bWJlcjtcbiAgYml0cmF0ZTogbnVtYmVyO1xuICBwaXhlbEZvcm1hdDogQVZQaXhlbEZvcm1hdDtcbiAgY29kZWNUYWc/OiBzdHJpbmc7XG4gIGNvbG9yUmFuZ2U/OiBBVkNvbG9yUmFuZ2U7XG4gIG9wdGlvbnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICBod0ZyYW1lc0N0eD86IEhhcmR3YXJlRnJhbWVzQ29udGV4dDtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG9wZW5WaWRlb0N0eChvcHRzOiBWaWRlb0N0eE9wdGlvbnMsIGxhYmVsOiBzdHJpbmcpOiBQcm9taXNlPENvZGVjQ29udGV4dD4ge1xuICBjb25zdCBjdHggPSBuZXcgQ29kZWNDb250ZXh0KCk7XG4gIGN0eC5hbGxvY0NvbnRleHQzKG9wdHMuY29kZWMpO1xuICBjdHguY29kZWNJZCA9IG9wdHMuY29kZWMuaWQ7XG4gIGN0eC53aWR0aCA9IG9wdHMud2lkdGg7XG4gIGN0eC5oZWlnaHQgPSBvcHRzLmhlaWdodDtcbiAgY3R4LnBpeGVsRm9ybWF0ID0gb3B0cy5waXhlbEZvcm1hdDtcbiAgY3R4LnRpbWVCYXNlID0gbmV3IFJhdGlvbmFsKDEsIG9wdHMuZnBzKTtcbiAgY3R4LmZyYW1lcmF0ZSA9IG5ldyBSYXRpb25hbChvcHRzLmZwcywgMSk7XG4gIGN0eC5nb3BTaXplID0gb3B0cy5mcHMgKiAyO1xuICBjdHguYml0UmF0ZSA9IEJpZ0ludChvcHRzLmJpdHJhdGUpO1xuICBjdHguc2V0RmxhZ3MoQVZfQ09ERUNfRkxBR19HTE9CQUxfSEVBREVSKTtcbiAgaWYgKG9wdHMuY29kZWNUYWcpIGN0eC5jb2RlY1RhZyA9IG9wdHMuY29kZWNUYWc7XG4gIGlmIChvcHRzLmNvbG9yUmFuZ2UgIT09IHVuZGVmaW5lZCkgY3R4LmNvbG9yUmFuZ2UgPSBvcHRzLmNvbG9yUmFuZ2U7XG4gIGlmIChvcHRzLmh3RnJhbWVzQ3R4KSBjdHguaHdGcmFtZXNDdHggPSBvcHRzLmh3RnJhbWVzQ3R4O1xuICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyhvcHRzLm9wdGlvbnMgPz8ge30pKSBjdHguc2V0T3B0aW9uKGssIHYpO1xuICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgY3R4Lm9wZW4yKG9wdHMuY29kZWMsIG51bGwpLCBsYWJlbCk7XG4gIHJldHVybiBjdHg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYWtlRnJhbWUod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIsIHBpeEZtdDogQVZQaXhlbEZvcm1hdCk6IEZyYW1lIHtcbiAgY29uc3QgZnJhbWUgPSBuZXcgRnJhbWUoKTtcbiAgZnJhbWUuYWxsb2MoKTtcbiAgZnJhbWUuZm9ybWF0ID0gcGl4Rm10O1xuICBmcmFtZS53aWR0aCA9IHdpZHRoO1xuICBmcmFtZS5oZWlnaHQgPSBoZWlnaHQ7XG4gIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihmcmFtZS5nZXRCdWZmZXIoMCksIFwiZnJhbWUuZ2V0QnVmZmVyXCIpO1xuICByZXR1cm4gZnJhbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYWtlUGFja2V0KCk6IFBhY2tldCB7XG4gIGNvbnN0IHBrdCA9IG5ldyBQYWNrZXQoKTtcbiAgcGt0LmFsbG9jKCk7XG4gIHJldHVybiBwa3Q7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkcmFpblBhY2tldHMoY3R4OiBDb2RlY0NvbnRleHQsIHBrdDogUGFja2V0LCBzdHJlYW06IFN0cmVhbSwgbXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gIHdoaWxlICh0cnVlKSB7XG4gICAgY29uc3QgciA9IGF3YWl0IGN0eC5yZWNlaXZlUGFja2V0KHBrdCk7XG4gICAgaWYgKHIgPT09IEFWRVJST1JfRUFHQUlOIHx8IHIgPT09IEFWRVJST1JfRU9GKSBicmVhaztcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IociwgXCJyZWNlaXZlUGFja2V0XCIpO1xuICAgIHBrdC5zdHJlYW1JbmRleCA9IHN0cmVhbS5pbmRleDtcbiAgICBpZiAocGt0LmR1cmF0aW9uID09PSAwbikgcGt0LmR1cmF0aW9uID0gMW47XG4gICAgcGt0LnJlc2NhbGVUcyhjdHgudGltZUJhc2UsIHN0cmVhbS50aW1lQmFzZSk7XG4gICAgYXdhaXQgbXV4ZXIud3JpdGVQYWNrZXQocGt0KTtcbiAgICBwa3QudW5yZWYoKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8wMy5cblxuaW1wb3J0IHsgb2sgfSBmcm9tIFwiYXNzZXJ0XCI7XG5pbXBvcnQge1xuICBBVl9QSVhfRk1UX0JHUkEsXG4gIEFWX1BJWF9GTVRfWVVWQTQyMFAsXG4gIENvZGVjLFxuICBDb2RlY0NvbnRleHQsXG4gIEZGX0RFQ09ERVJfUE5HLFxuICBGRm1wZWdFcnJvcixcbiAgdHlwZSBGcmFtZSxcbiAgUGFja2V0LFxuICBTb2Z0d2FyZVNjYWxlQ29udGV4dCxcbiAgU1dTX0JJTElORUFSLFxuICB0eXBlIEFWUGl4ZWxGb3JtYXQsXG59IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQgeyBtYWtlRnJhbWUsIG1ha2VQYWNrZXQgfSBmcm9tIFwiLi9taXNjXCI7XG5cbmV4cG9ydCBjbGFzcyBDb2RlY1N0YXRlIGltcGxlbWVudHMgRGlzcG9zYWJsZSB7XG4gIHJlYWRvbmx5IHNyYzogRnJhbWU7XG4gIHJlYWRvbmx5IGRzdDogRnJhbWU7XG4gIHJlYWRvbmx5IHBrdDogUGFja2V0O1xuICBwcml2YXRlIF9zd3M/OiBTb2Z0d2FyZVNjYWxlQ29udGV4dDtcbiAgcHJpdmF0ZSBfcG5nPzogQ29kZWM7XG5cbiAgc3RhdGljIGFzeW5jIGNyZWF0ZSh3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcikge1xuICAgIGNvbnN0IGNvZGVjID0gQ29kZWMuZmluZERlY29kZXJCeU5hbWUoRkZfREVDT0RFUl9QTkcpO1xuICAgIG9rKGNvZGVjLCBcInBuZyBkZWNvZGVyIHVuYXZhaWxhYmxlXCIpO1xuICAgIHJldHVybiBuZXcgQ29kZWNTdGF0ZSh3aWR0aCwgaGVpZ2h0LCBjb2RlYyk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyLCBwbmc6IENvZGVjKSB7XG4gICAgdGhpcy5fcG5nID0gcG5nO1xuICAgIHRoaXMuc3JjID0gbWFrZUZyYW1lKHdpZHRoLCBoZWlnaHQsIEFWX1BJWF9GTVRfQkdSQSk7XG4gICAgdGhpcy5kc3QgPSBtYWtlRnJhbWUod2lkdGgsIGhlaWdodCwgQVZfUElYX0ZNVF9ZVVZBNDIwUCk7XG4gICAgdGhpcy5wa3QgPSBtYWtlUGFja2V0KCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgZnJlc2ggUE5HIGRlY29kZXIgY29udGV4dC5cbiAgICogVGhlIEZGbXBlZyBQTkcgZGVjb2RlciBhY2N1bXVsYXRlcyBBUE5HIGJsZW5kaW5nIHN0YXRlXG4gICAqIGFjcm9zcyBmcmFtZXMsIHNvIGEgc2hhcmVkIGluc3RhbmNlIGNvcnJ1cHRzIG91dHB1dCB3aGVuIGRlY29kaW5nIHN0YW5kYWxvbmUgUE5Hcy5cbiAgICovXG4gIGFzeW5jIHBuZygpOiBQcm9taXNlPENvZGVjQ29udGV4dD4ge1xuICAgIGNvbnN0IHBuZyA9IG5ldyBDb2RlY0NvbnRleHQoKTtcbiAgICBwbmcuYWxsb2NDb250ZXh0Myh0aGlzLl9wbmcpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCBwbmcub3BlbjIodGhpcy5fcG5nKSwgXCJwbmdEZWNvZGVyLm9wZW4yXCIpO1xuICAgIHJldHVybiBwbmc7XG4gIH1cblxuICBhc3luYyBkZWNvZGVQTkcocG5nRGF0YTogQnVmZmVyKTogUHJvbWlzZTxGcmFtZT4ge1xuICAgIHVzaW5nIHBuZyA9IGF3YWl0IHRoaXMucG5nKCk7XG4gICAgdGhpcy5wa3QuZGF0YSA9IHBuZ0RhdGE7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IHBuZy5zZW5kUGFja2V0KHRoaXMucGt0KSwgXCJwbmdEZWNvZGVyLnNlbmRQYWNrZXRcIik7XG4gICAgdGhpcy5wa3QudW5yZWYoKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgcG5nLnJlY2VpdmVGcmFtZSh0aGlzLnNyYyksIFwicG5nRGVjb2Rlci5yZWNlaXZlRnJhbWVcIik7XG4gICAgcmV0dXJuIHRoaXMuc3JjO1xuICB9XG5cbiAgZ2V0IHN3cygpIHtcbiAgICBpZiAoIXRoaXMuX3N3cykge1xuICAgICAgY29uc3Qgc3dzID0gbmV3IFNvZnR3YXJlU2NhbGVDb250ZXh0KCk7XG4gICAgICBjb25zdCBmbXQgPSB0aGlzLnNyYy5mb3JtYXQgYXMgQVZQaXhlbEZvcm1hdDtcbiAgICAgIHN3cy5nZXRDb250ZXh0KFxuICAgICAgICB0aGlzLnNyYy53aWR0aCxcbiAgICAgICAgdGhpcy5zcmMuaGVpZ2h0LFxuICAgICAgICBmbXQsXG4gICAgICAgIHRoaXMuc3JjLndpZHRoLFxuICAgICAgICB0aGlzLnNyYy5oZWlnaHQsXG4gICAgICAgIEFWX1BJWF9GTVRfWVVWQTQyMFAsXG4gICAgICAgIFNXU19CSUxJTkVBUixcbiAgICAgICk7XG4gICAgICB0aGlzLl9zd3MgPSBzd3M7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9zd3M7XG4gIH1cblxuICBbU3ltYm9sLmRpc3Bvc2VdKCk6IHZvaWQge1xuICAgIHRoaXMuc3JjW1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgIHRoaXMuZHN0W1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgIHRoaXMucGt0W1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgIHRoaXMuX3N3cz8uW1N5bWJvbC5kaXNwb3NlXSgpO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzAxLlxuXG5pbXBvcnQge1xuICBDb2RlYyxcbiAgQ29kZWNDb250ZXh0LFxuICBGRm1wZWdFcnJvcixcbiAgRmlsdGVyLFxuICBGaWx0ZXJDb250ZXh0LFxuICBGaWx0ZXJHcmFwaCxcbiAgRmlsdGVySW5PdXQsXG4gIEZyYW1lLFxuICB0eXBlIFBhY2tldCxcbiAgUmF0aW9uYWwsXG4gIHR5cGUgU3RyZWFtLFxufSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHtcbiAgQVZfQ0hBTk5FTF9MQVlPVVRfU1RFUkVPLFxuICBBVl9DT0RFQ19GTEFHX0dMT0JBTF9IRUFERVIsXG4gIEFWX1NBTVBMRV9GTVRfRkxULFxuICBBVl9TQU1QTEVfRk1UX0ZMVFAsXG4gIEFWRVJST1JfRUFHQUlOLFxuICBBVkVSUk9SX0VPRixcbiAgdHlwZSBGRkF1ZGlvRW5jb2Rlcixcbn0gZnJvbSBcIm5vZGUtYXYvY29uc3RhbnRzXCI7XG5pbXBvcnQgdHlwZSB7IEZvcm1hdE11eGVyIH0gZnJvbSBcIi4vbXV4ZXJcIjtcbmltcG9ydCB7IGRyYWluUGFja2V0cywgbWFrZVBhY2tldCB9IGZyb20gXCIuL21pc2NcIjtcblxuY29uc3QgU0FNUExFX0ZNVF9OQU1FOiBQYXJ0aWFsPFJlY29yZDxudW1iZXIsIHN0cmluZz4+ID0geyBbQVZfU0FNUExFX0ZNVF9GTFRdOiBcImZsdFwiLCBbQVZfU0FNUExFX0ZNVF9GTFRQXTogXCJmbHRwXCIgfTtcblxuZXhwb3J0IGludGVyZmFjZSBBdWRpb0VuY29kZXJPcHRpb25zIHtcbiAgb3V0U2FtcGxlUmF0ZTogbnVtYmVyO1xuICBvdXRTYW1wbGVGbXQ6IHR5cGVvZiBBVl9TQU1QTEVfRk1UX0ZMVCB8IHR5cGVvZiBBVl9TQU1QTEVfRk1UX0ZMVFA7XG4gIGNvZGVjTmFtZTogRkZBdWRpb0VuY29kZXI7XG4gIGdsb2JhbEhlYWRlcjogYm9vbGVhbjtcbiAgYml0cmF0ZTogbnVtYmVyO1xuICBtdXhlcjogRm9ybWF0TXV4ZXI7XG59XG5cbmV4cG9ydCBjbGFzcyBBdWRpb0VuY29kZXIgaW1wbGVtZW50cyBEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSBfY3R4OiBDb2RlY0NvbnRleHQ7XG4gIHByaXZhdGUgX3N0cmVhbTogU3RyZWFtO1xuICBwcml2YXRlIF9wa3Q6IFBhY2tldDtcbiAgcHJpdmF0ZSBfb3V0UmF0ZTogbnVtYmVyO1xuICBwcml2YXRlIF9vdXRGbXQ6IHR5cGVvZiBBVl9TQU1QTEVfRk1UX0ZMVCB8IHR5cGVvZiBBVl9TQU1QTEVfRk1UX0ZMVFA7XG4gIHByaXZhdGUgX2ZyYW1lU2l6ZTogbnVtYmVyO1xuICBwcml2YXRlIF9maWx0ZXJGcmFtZTogRnJhbWU7XG4gIHByaXZhdGUgX2dyYXBoPzogRmlsdGVyR3JhcGg7XG4gIHByaXZhdGUgX2J1ZlNyYz86IEZpbHRlckNvbnRleHQ7XG4gIHByaXZhdGUgX2J1ZlNpbms/OiBGaWx0ZXJDb250ZXh0O1xuICBwcml2YXRlIF9pblJhdGU/OiBudW1iZXI7XG4gIHByaXZhdGUgX3B0cyA9IDBuO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoY3R4OiBDb2RlY0NvbnRleHQsIHN0cmVhbTogU3RyZWFtLCBvdXRGbXQ6IHR5cGVvZiBBVl9TQU1QTEVfRk1UX0ZMVCB8IHR5cGVvZiBBVl9TQU1QTEVfRk1UX0ZMVFApIHtcbiAgICB0aGlzLl9jdHggPSBjdHg7XG4gICAgdGhpcy5fc3RyZWFtID0gc3RyZWFtO1xuICAgIHRoaXMuX291dFJhdGUgPSBjdHguc2FtcGxlUmF0ZTtcbiAgICB0aGlzLl9vdXRGbXQgPSBvdXRGbXQ7XG4gICAgdGhpcy5fZnJhbWVTaXplID0gY3R4LmZyYW1lU2l6ZTtcbiAgICB0aGlzLl9wa3QgPSBtYWtlUGFja2V0KCk7XG4gICAgdGhpcy5fZmlsdGVyRnJhbWUgPSBuZXcgRnJhbWUoKTtcbiAgICB0aGlzLl9maWx0ZXJGcmFtZS5hbGxvYygpO1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIGNyZWF0ZShvcHRzOiBBdWRpb0VuY29kZXJPcHRpb25zKTogUHJvbWlzZTxBdWRpb0VuY29kZXI+IHtcbiAgICBjb25zdCBjb2RlYyA9IENvZGVjLmZpbmRFbmNvZGVyQnlOYW1lKG9wdHMuY29kZWNOYW1lKTtcbiAgICBpZiAoIWNvZGVjKSB0aHJvdyBuZXcgRXJyb3IoYEF1ZGlvIGVuY29kZXIgbm90IGZvdW5kOiAke29wdHMuY29kZWNOYW1lfWApO1xuICAgIGNvbnN0IGN0eCA9IG5ldyBDb2RlY0NvbnRleHQoKTtcbiAgICBjdHguYWxsb2NDb250ZXh0Myhjb2RlYyk7XG4gICAgY3R4LmNvZGVjSWQgPSBjb2RlYy5pZDtcbiAgICBjdHguc2FtcGxlRm9ybWF0ID0gb3B0cy5vdXRTYW1wbGVGbXQ7XG4gICAgY3R4LnNhbXBsZVJhdGUgPSBvcHRzLm91dFNhbXBsZVJhdGU7XG4gICAgY3R4LmNoYW5uZWxMYXlvdXQgPSBBVl9DSEFOTkVMX0xBWU9VVF9TVEVSRU87XG4gICAgY3R4LnRpbWVCYXNlID0gbmV3IFJhdGlvbmFsKDEsIG9wdHMub3V0U2FtcGxlUmF0ZSk7XG4gICAgY3R4LmJpdFJhdGUgPSBCaWdJbnQob3B0cy5iaXRyYXRlKTtcbiAgICBpZiAob3B0cy5nbG9iYWxIZWFkZXIpIGN0eC5zZXRGbGFncyhBVl9DT0RFQ19GTEFHX0dMT0JBTF9IRUFERVIpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCBjdHgub3BlbjIoY29kZWMsIG51bGwpLCBcImF1ZGlvQ3R4Lm9wZW4yXCIpO1xuICAgIGNvbnN0IHN0cmVhbSA9IG9wdHMubXV4ZXIuYWRkU3RyZWFtKGN0eCk7XG4gICAgcmV0dXJuIG5ldyBBdWRpb0VuY29kZXIoY3R4LCBzdHJlYW0sIG9wdHMub3V0U2FtcGxlRm10KTtcbiAgfVxuXG4gIHNldElucHV0UmF0ZShpblNhbXBsZVJhdGU6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuX2dyYXBoPy5bU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgdGhpcy5faW5SYXRlID0gaW5TYW1wbGVSYXRlO1xuICAgIGNvbnN0IGdyYXBoID0gbmV3IEZpbHRlckdyYXBoKCk7XG4gICAgZ3JhcGguYWxsb2MoKTtcbiAgICBjb25zdCBhYnVmZmVyID0gRmlsdGVyLmdldEJ5TmFtZShcImFidWZmZXJcIikhO1xuICAgIGNvbnN0IGJ1ZlNyYyA9IGdyYXBoLmNyZWF0ZUZpbHRlcihcbiAgICAgIGFidWZmZXIsXG4gICAgICBcInNyY1wiLFxuICAgICAgYHNhbXBsZV9yYXRlPSR7aW5TYW1wbGVSYXRlfTpzYW1wbGVfZm10PWZsdDpjaGFubmVsX2xheW91dD1zdGVyZW86dGltZV9iYXNlPTEvJHtpblNhbXBsZVJhdGV9YCxcbiAgICApO1xuICAgIGlmICghYnVmU3JjKSB0aHJvdyBuZXcgRXJyb3IoXCJGYWlsZWQgdG8gY3JlYXRlIGFidWZmZXJcIik7XG4gICAgY29uc3QgYWJ1ZmZlcnNpbmsgPSBGaWx0ZXIuZ2V0QnlOYW1lKFwiYWJ1ZmZlcnNpbmtcIikhO1xuICAgIGNvbnN0IGJ1ZlNpbmsgPSBncmFwaC5jcmVhdGVGaWx0ZXIoYWJ1ZmZlcnNpbmssIFwic2lua1wiKTtcbiAgICBpZiAoIWJ1ZlNpbmspIHRocm93IG5ldyBFcnJvcihcIkZhaWxlZCB0byBjcmVhdGUgYWJ1ZmZlcnNpbmtcIik7XG4gICAgY29uc3QgZm10TmFtZSA9IFNBTVBMRV9GTVRfTkFNRVt0aGlzLl9vdXRGbXRdID8/IFwiZmx0XCI7XG4gICAgY29uc3QgZmlsdGVyRGVzYyA9IGBhZm9ybWF0PXNhbXBsZV9mbXRzPSR7Zm10TmFtZX06c2FtcGxlX3JhdGVzPSR7dGhpcy5fb3V0UmF0ZX06Y2hhbm5lbF9sYXlvdXRzPXN0ZXJlbyxhc2V0bnNhbXBsZXM9bj0ke3RoaXMuX2ZyYW1lU2l6ZX06cD0xYDtcbiAgICBjb25zdCBvdXRwdXRzID0gRmlsdGVySW5PdXQuY3JlYXRlTGlzdChbeyBuYW1lOiBcImluXCIsIGZpbHRlckN0eDogYnVmU3JjLCBwYWRJZHg6IDAgfV0pO1xuICAgIGNvbnN0IGlucHV0cyA9IEZpbHRlckluT3V0LmNyZWF0ZUxpc3QoW3sgbmFtZTogXCJvdXRcIiwgZmlsdGVyQ3R4OiBidWZTaW5rLCBwYWRJZHg6IDAgfV0pO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihncmFwaC5wYXJzZVB0cihmaWx0ZXJEZXNjLCBpbnB1dHMsIG91dHB1dHMpLCBcImdyYXBoLnBhcnNlUHRyXCIpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihncmFwaC5jb25maWdTeW5jKCksIFwiZ3JhcGguY29uZmlnXCIpO1xuICAgIHRoaXMuX2dyYXBoID0gZ3JhcGg7XG4gICAgdGhpcy5fYnVmU3JjID0gYnVmU3JjO1xuICAgIHRoaXMuX2J1ZlNpbmsgPSBidWZTaW5rO1xuICB9XG5cbiAgYXN5bmMgZW5jb2RlKHBjbTogQnVmZmVyLCBtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuX2J1ZlNyYyB8fCAhdGhpcy5faW5SYXRlKSByZXR1cm47XG4gICAgY29uc3Qgc3JjID0gbmV3IEZsb2F0MzJBcnJheShwY20uYnVmZmVyLCBwY20uYnl0ZU9mZnNldCwgcGNtLmJ5dGVMZW5ndGggLyA0KTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNyYy5sZW5ndGg7IGkrKykgaWYgKCFpc0Zpbml0ZShzcmNbaV0hKSkgc3JjW2ldID0gMDtcbiAgICBjb25zdCBuU2FtcGxlcyA9IHNyYy5sZW5ndGggPj4gMTtcbiAgICB1c2luZyBmcmFtZSA9IEZyYW1lLmZyb21BdWRpb0J1ZmZlcihCdWZmZXIuZnJvbShzcmMuYnVmZmVyLCBzcmMuYnl0ZU9mZnNldCwgc3JjLmJ5dGVMZW5ndGgpLCB7XG4gICAgICBuYlNhbXBsZXM6IG5TYW1wbGVzLFxuICAgICAgZm9ybWF0OiBBVl9TQU1QTEVfRk1UX0ZMVCxcbiAgICAgIHNhbXBsZVJhdGU6IHRoaXMuX2luUmF0ZSxcbiAgICAgIGNoYW5uZWxMYXlvdXQ6IEFWX0NIQU5ORUxfTEFZT1VUX1NURVJFTyxcbiAgICAgIHB0czogdGhpcy5fcHRzLFxuICAgICAgdGltZUJhc2U6IHsgbnVtOiAxLCBkZW46IHRoaXMuX2luUmF0ZSB9LFxuICAgIH0pO1xuICAgIHRoaXMuX3B0cyArPSBCaWdJbnQoblNhbXBsZXMpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCB0aGlzLl9idWZTcmMuYnVmZmVyc3JjQWRkRnJhbWUoZnJhbWUpLCBcImJ1ZmZlcnNyY0FkZEZyYW1lXCIpO1xuICAgIGF3YWl0IHRoaXMuZHJhaW4obXV4ZXIpO1xuICB9XG5cbiAgYXN5bmMgZmx1c2gobXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX2J1ZlNyYykge1xuICAgICAgYXdhaXQgdGhpcy5fYnVmU3JjLmJ1ZmZlcnNyY0FkZEZyYW1lKG51bGwpO1xuICAgICAgYXdhaXQgdGhpcy5kcmFpbihtdXhlcik7XG4gICAgfVxuICAgIGF3YWl0IHRoaXMuX2N0eC5zZW5kRnJhbWUobnVsbCk7XG4gICAgYXdhaXQgdGhpcy5kcmFpbkNvZGVjKG11eGVyKTtcbiAgfVxuXG4gIFtTeW1ib2wuZGlzcG9zZV0oKTogdm9pZCB7XG4gICAgdGhpcy5fcGt0LmZyZWUoKTtcbiAgICB0aGlzLl9maWx0ZXJGcmFtZS5mcmVlKCk7XG4gICAgdGhpcy5fZ3JhcGg/LltTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICB0aGlzLl9jdHguZnJlZUNvbnRleHQoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZHJhaW4obXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGNvbnN0IHIgPSBhd2FpdCB0aGlzLl9idWZTaW5rIS5idWZmZXJzaW5rR2V0RnJhbWUodGhpcy5fZmlsdGVyRnJhbWUpO1xuICAgICAgaWYgKHIgPT09IEFWRVJST1JfRUFHQUlOIHx8IHIgPT09IEFWRVJST1JfRU9GKSBicmVhaztcbiAgICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihyLCBcImJ1ZmZlcnNpbmtHZXRGcmFtZVwiKTtcbiAgICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCB0aGlzLl9jdHguc2VuZEZyYW1lKHRoaXMuX2ZpbHRlckZyYW1lKSwgXCJhdWRpb0N0eC5zZW5kRnJhbWVcIik7XG4gICAgICB0aGlzLl9maWx0ZXJGcmFtZS51bnJlZigpO1xuICAgICAgYXdhaXQgdGhpcy5kcmFpbkNvZGVjKG11eGVyKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGRyYWluQ29kZWMobXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIGRyYWluUGFja2V0cyh0aGlzLl9jdHgsIHRoaXMuX3BrdCwgdGhpcy5fc3RyZWFtLCBtdXhlcik7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMTMuXG5cbmV4cG9ydCBmdW5jdGlvbiBwYWNrQml0cyhiaXRzOiBudW1iZXJbXSk6IEJ1ZmZlciB7XG4gIGNvbnN0IGJ1ZiA9IEJ1ZmZlci5hbGxvYyhiaXRzLmxlbmd0aCA+PiAzKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBidWYubGVuZ3RoOyBpKyspIHtcbiAgICBsZXQgYnl0ZSA9IDA7XG4gICAgZm9yIChsZXQgYiA9IDA7IGIgPCA4OyBiKyspIGJ5dGUgPSAoYnl0ZSA8PCAxKSB8IGJpdHNbaSAqIDggKyBiXSE7XG4gICAgYnVmW2ldID0gYnl0ZTtcbiAgfVxuICByZXR1cm4gYnVmO1xufVxuXG5leHBvcnQgY2xhc3MgQml0V3JpdGVyIHtcbiAgYml0czogbnVtYmVyW10gPSBbXTtcbiAgdyh2YWw6IG51bWJlciwgbjogbnVtYmVyKSB7XG4gICAgZm9yIChsZXQgaSA9IG4gLSAxOyBpID49IDA7IGktLSkgdGhpcy5iaXRzLnB1c2goKHZhbCA+PiBpKSAmIDEpO1xuICB9XG4gIGZsYWcodmFsOiBib29sZWFuIHwgbnVtYmVyKSB7XG4gICAgdGhpcy5iaXRzLnB1c2godmFsID8gMSA6IDApO1xuICB9XG4gIHVlKHZhbDogbnVtYmVyKSB7XG4gICAgY29uc3QgdiA9IHZhbCArIDE7XG4gICAgY29uc3QgbGVuID0gMzIgLSBNYXRoLmNsejMyKHYpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuIC0gMTsgaSsrKSB0aGlzLmJpdHMucHVzaCgwKTtcbiAgICBmb3IgKGxldCBpID0gbGVuIC0gMTsgaSA+PSAwOyBpLS0pIHRoaXMuYml0cy5wdXNoKCh2ID4+IGkpICYgMSk7XG4gIH1cbiAgYWxpZ24ocGFkOiBudW1iZXIpIHtcbiAgICB3aGlsZSAodGhpcy5iaXRzLmxlbmd0aCAlIDggIT09IDApIHRoaXMuYml0cy5wdXNoKHBhZCk7XG4gIH1cbiAgY29weShzcmM6IG51bWJlcltdLCBzdGFydDogbnVtYmVyLCBsZW46IG51bWJlcikge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHRoaXMuYml0cy5wdXNoKHNyY1tzdGFydCArIGldISk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEJpdFJlYWRlciB7XG4gIHByaXZhdGUgX2JpdHM6IG51bWJlcltdO1xuICBwb3MgPSAwO1xuICBjb25zdHJ1Y3RvcihkYXRhOiBCdWZmZXIpIHtcbiAgICB0aGlzLl9iaXRzID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBiID0gNzsgYiA+PSAwOyBiLS0pIHRoaXMuX2JpdHMucHVzaCgoZGF0YVtpXSEgPj4gYikgJiAxKTtcbiAgICB9XG4gIH1cbiAgZ2V0IGJpdHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2JpdHM7XG4gIH1cbiAgcmVhZChuOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGxldCB2YWwgPSAwO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbjsgaSsrKSB2YWwgPSAodmFsIDw8IDEpIHwgdGhpcy5fYml0c1t0aGlzLnBvcysrXSE7XG4gICAgcmV0dXJuIHZhbDtcbiAgfVxuICByZWFkVWUoKTogbnVtYmVyIHtcbiAgICBsZXQgemVyb3MgPSAwO1xuICAgIHdoaWxlICh0aGlzLl9iaXRzW3RoaXMucG9zXSA9PT0gMCkge1xuICAgICAgemVyb3MrKztcbiAgICAgIHRoaXMucG9zKys7XG4gICAgfVxuICAgIHRoaXMucG9zKys7XG4gICAgbGV0IHZhbCA9IDE7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB6ZXJvczsgaSsrKSB2YWwgPSAodmFsIDw8IDEpIHwgdGhpcy5fYml0c1t0aGlzLnBvcysrXSE7XG4gICAgcmV0dXJuIHZhbCAtIDE7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMTIuXG5cbmNvbnN0IE5BTF9IRUFERVJfU0laRSA9IDI7XG5jb25zdCBBTk5FWF9CX1NUQVJUX0NPREUgPSBCdWZmZXIuZnJvbShbMHgwMCwgMHgwMCwgMHgwMCwgMHgwMV0pO1xuXG5leHBvcnQgeyBBTk5FWF9CX1NUQVJUX0NPREUsIE5BTF9IRUFERVJfU0laRSB9O1xuXG5leHBvcnQgaW50ZXJmYWNlIE5hbFVuaXQge1xuICB0eXBlOiBudW1iZXI7XG4gIGxheWVySWQ6IG51bWJlcjtcbiAgZGF0YTogQnVmZmVyO1xufVxuXG5mdW5jdGlvbiBwYXJzZU5hbFR5cGUoaGVhZGVyMDogbnVtYmVyLCBoZWFkZXIxOiBudW1iZXIpOiB7IHR5cGU6IG51bWJlcjsgbGF5ZXJJZDogbnVtYmVyOyB0ZW1wb3JhbElkOiBudW1iZXIgfSB7XG4gIGNvbnN0IHR5cGUgPSAoaGVhZGVyMCA+PiAxKSAmIDB4M2Y7XG4gIGNvbnN0IGxheWVySWQgPSAoKGhlYWRlcjAgJiAxKSA8PCA1KSB8ICgoaGVhZGVyMSA+PiAzKSAmIDB4MWYpO1xuICBjb25zdCB0ZW1wb3JhbElkID0gaGVhZGVyMSAmIDB4MDc7XG4gIHJldHVybiB7IHR5cGUsIGxheWVySWQsIHRlbXBvcmFsSWQgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuY29kZU5hbEhlYWRlcih0eXBlOiBudW1iZXIsIGxheWVySWQ6IG51bWJlciwgdGVtcG9yYWxJZDogbnVtYmVyKTogW251bWJlciwgbnVtYmVyXSB7XG4gIGNvbnN0IGJ5dGUwID0gKCh0eXBlICYgMHgzZikgPDwgMSkgfCAoKGxheWVySWQgPj4gNSkgJiAxKTtcbiAgY29uc3QgYnl0ZTEgPSAoKGxheWVySWQgJiAweDFmKSA8PCAzKSB8ICh0ZW1wb3JhbElkICYgMHgwNyk7XG4gIHJldHVybiBbYnl0ZTAsIGJ5dGUxXTtcbn1cblxuLyoqIFNwbGl0IEFubmV4IEIgYml0c3RyZWFtIGludG8gTkFMIHVuaXRzLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNwbGl0TmFsVW5pdHMoYml0c3RyZWFtOiBCdWZmZXIpOiBOYWxVbml0W10ge1xuICBjb25zdCBuYWxzOiBOYWxVbml0W10gPSBbXTtcbiAgbGV0IGkgPSAwO1xuXG4gIHdoaWxlIChpIDwgYml0c3RyZWFtLmxlbmd0aCkge1xuICAgIGxldCBzY0xlbiA9IDA7XG4gICAgaWYgKGkgKyAzIDwgYml0c3RyZWFtLmxlbmd0aCAmJiBiaXRzdHJlYW1baV0gPT09IDAgJiYgYml0c3RyZWFtW2kgKyAxXSA9PT0gMCAmJiBiaXRzdHJlYW1baSArIDJdID09PSAxKSB7XG4gICAgICBzY0xlbiA9IDM7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIGkgKyA0IDwgYml0c3RyZWFtLmxlbmd0aCAmJlxuICAgICAgYml0c3RyZWFtW2ldID09PSAwICYmXG4gICAgICBiaXRzdHJlYW1baSArIDFdID09PSAwICYmXG4gICAgICBiaXRzdHJlYW1baSArIDJdID09PSAwICYmXG4gICAgICBiaXRzdHJlYW1baSArIDNdID09PSAxXG4gICAgKSB7XG4gICAgICBzY0xlbiA9IDQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGkrKztcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IG5hbFN0YXJ0ID0gaSArIHNjTGVuO1xuICAgIGlmIChuYWxTdGFydCArIE5BTF9IRUFERVJfU0laRSA+IGJpdHN0cmVhbS5sZW5ndGgpIGJyZWFrO1xuXG4gICAgbGV0IG5hbEVuZCA9IGJpdHN0cmVhbS5sZW5ndGg7XG4gICAgZm9yIChsZXQgaiA9IG5hbFN0YXJ0ICsgTkFMX0hFQURFUl9TSVpFOyBqIDwgYml0c3RyZWFtLmxlbmd0aCAtIDI7IGorKykge1xuICAgICAgaWYgKFxuICAgICAgICBiaXRzdHJlYW1bal0gPT09IDAgJiZcbiAgICAgICAgYml0c3RyZWFtW2ogKyAxXSA9PT0gMCAmJlxuICAgICAgICAoYml0c3RyZWFtW2ogKyAyXSA9PT0gMSB8fCAoaiArIDMgPCBiaXRzdHJlYW0ubGVuZ3RoICYmIGJpdHN0cmVhbVtqICsgMl0gPT09IDAgJiYgYml0c3RyZWFtW2ogKyAzXSA9PT0gMSkpXG4gICAgICApIHtcbiAgICAgICAgbmFsRW5kID0gajtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgeyB0eXBlLCBsYXllcklkIH0gPSBwYXJzZU5hbFR5cGUoYml0c3RyZWFtW25hbFN0YXJ0XSEsIGJpdHN0cmVhbVtuYWxTdGFydCArIDFdISk7XG4gICAgbmFscy5wdXNoKHsgdHlwZSwgbGF5ZXJJZCwgZGF0YTogYml0c3RyZWFtLnN1YmFycmF5KG5hbFN0YXJ0LCBuYWxFbmQpIH0pO1xuICAgIGkgPSBuYWxFbmQ7XG4gIH1cblxuICByZXR1cm4gbmFscztcbn1cblxuLyoqIFJld3JpdGUgbnVoX2xheWVyX2lkIGluIGEgTkFMIHVuaXQgKHJldHVybnMgY29weSkuICovXG5leHBvcnQgZnVuY3Rpb24gcmV3cml0ZU5hbExheWVySWQobmFsOiBCdWZmZXIsIGxheWVySWQ6IG51bWJlcik6IEJ1ZmZlciB7XG4gIGNvbnN0IG91dCA9IEJ1ZmZlci5mcm9tKG5hbCk7XG4gIGNvbnN0IHsgdHlwZSwgdGVtcG9yYWxJZCB9ID0gcGFyc2VOYWxUeXBlKG91dFswXSEsIG91dFsxXSEpO1xuICBjb25zdCBbYjAsIGIxXSA9IGVuY29kZU5hbEhlYWRlcih0eXBlLCBsYXllcklkLCB0ZW1wb3JhbElkKTtcbiAgb3V0WzBdID0gYjA7XG4gIG91dFsxXSA9IGIxO1xuICByZXR1cm4gb3V0O1xufVxuXG4vKiogUmVtb3ZlIGVtdWxhdGlvbiBwcmV2ZW50aW9uIGJ5dGVzICgwMCAwMCAwMyDihpIgMDAgMDApIGZyb20gUkJTUC4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uKGRhdGE6IEJ1ZmZlcik6IEJ1ZmZlciB7XG4gIGNvbnN0IG91dDogbnVtYmVyW10gPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGkgKyAyIDwgZGF0YS5sZW5ndGggJiYgZGF0YVtpXSA9PT0gMCAmJiBkYXRhW2kgKyAxXSA9PT0gMCAmJiBkYXRhW2kgKyAyXSA9PT0gMykge1xuICAgICAgb3V0LnB1c2goMCwgMCk7XG4gICAgICBpICs9IDI7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dC5wdXNoKGRhdGFbaV0hKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIEJ1ZmZlci5mcm9tKG91dCk7XG59XG5cbi8qKiBJbnNlcnQgZW11bGF0aW9uIHByZXZlbnRpb24gYnl0ZXMgKDAwIDAwIDAzKSBmb3IgQW5uZXggQiBjb21wbGlhbmNlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZEVtdWxhdGlvblByZXZlbnRpb24obmFsOiBCdWZmZXIpOiBCdWZmZXIge1xuICBjb25zdCBvdXQ6IG51bWJlcltdID0gW107XG4gIG91dC5wdXNoKG5hbFswXSEsIG5hbFsxXSEpO1xuICBsZXQgemVyb3MgPSAwO1xuICBmb3IgKGxldCBpID0gMjsgaSA8IG5hbC5sZW5ndGg7IGkrKykge1xuICAgIGlmICh6ZXJvcyA9PT0gMiAmJiBuYWxbaV0hIDw9IDMpIHtcbiAgICAgIG91dC5wdXNoKDMpO1xuICAgICAgemVyb3MgPSAwO1xuICAgIH1cbiAgICBpZiAobmFsW2ldID09PSAwKSB6ZXJvcysrO1xuICAgIGVsc2UgemVyb3MgPSAwO1xuICAgIG91dC5wdXNoKG5hbFtpXSEpO1xuICB9XG4gIHJldHVybiBCdWZmZXIuZnJvbShvdXQpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8xMy5cblxuaW1wb3J0IHsgQml0UmVhZGVyLCBCaXRXcml0ZXIsIHBhY2tCaXRzIH0gZnJvbSBcIi4vYml0XCI7XG5pbXBvcnQgeyBhZGRFbXVsYXRpb25QcmV2ZW50aW9uLCByZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uIH0gZnJvbSBcIi4vbmFsXCI7XG5cbmludGVyZmFjZSBQYXJzZWRQVEwge1xuICBwdGxTdGFydDogbnVtYmVyO1xuICBwdGxFbmQ6IG51bWJlcjtcbiAgcHRsQml0czogbnVtYmVyW107XG4gIG1heFN1YkxheWVyc01pbnVzMTogbnVtYmVyO1xufVxuXG5mdW5jdGlvbiBleHRyYWN0UFRMKHZwc0RhdGE6IEJ1ZmZlcik6IFBhcnNlZFBUTCB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGJyID0gbmV3IEJpdFJlYWRlcihyZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uKHZwc0RhdGEpKTtcbiAgYnIucmVhZCgxNik7IC8vIE5BTCBoZWFkZXJcbiAgYnIucmVhZCg0KTsgLy8gdnBzX2lkXG4gIGJyLnJlYWQoMik7IC8vIGJhc2VfbGF5ZXJfaW50ZXJuYWwgKyBhdmFpbGFibGVcbiAgaWYgKGJyLnJlYWQoNikgPiAwKSByZXR1cm4gdW5kZWZpbmVkOyAvLyBhbHJlYWR5IG11bHRpLWxheWVyXG4gIGNvbnN0IG1heFN1YkxheWVyc01pbnVzMSA9IGJyLnJlYWQoMyk7XG4gIGJyLnJlYWQoMSArIDE2KTsgLy8gdGVtcG9yYWxfbmVzdGluZyArIHJlc2VydmVkXG5cbiAgY29uc3QgcHRsU3RhcnQgPSBici5wb3M7XG4gIGJyLnJlYWQoOTYpOyAvLyBnZW5lcmFsIFBUTCAocHJvZmlsZV9zcGFjZSArIHRpZXIgKyBpZGMgKyBjb21wYXQgKyBjb25zdHJhaW50cyArIGxldmVsKVxuICBpZiAobWF4U3ViTGF5ZXJzTWludXMxID4gMCkgYnIucmVhZChtYXhTdWJMYXllcnNNaW51czEgKiAyICsgKDggLSBtYXhTdWJMYXllcnNNaW51czEpICogMik7XG4gIHJldHVybiB7IHB0bFN0YXJ0LCBwdGxFbmQ6IGJyLnBvcywgcHRsQml0czogYnIuYml0cywgbWF4U3ViTGF5ZXJzTWludXMxIH07XG59XG5cbi8qKiBXcml0ZSBiYXNlIFZQUyBmaWVsZHMgZm9yIDItbGF5ZXIgYWxwaGEuICovXG5mdW5jdGlvbiB3cml0ZUJhc2VWUFMoYnc6IEJpdFdyaXRlciwgcHRsOiBQYXJzZWRQVEwpIHtcbiAgYncudygweDQwMDEsIDE2KTsgLy8gTkFMIGhlYWRlclxuICBidy53KDAsIDQpOyAvLyB2cHNfaWRcbiAgYncuZmxhZygxKTsgLy8gYmFzZV9sYXllcl9pbnRlcm5hbFxuICBidy5mbGFnKDEpOyAvLyBiYXNlX2xheWVyX2F2YWlsYWJsZVxuICBidy53KDEsIDYpOyAvLyBtYXhfbGF5ZXJzX21pbnVzMSA9IDFcbiAgYncudyhwdGwubWF4U3ViTGF5ZXJzTWludXMxLCAzKTtcbiAgLy8gdGVtcG9yYWxfbmVzdGluZzogdHJ1ZSB3aGVuIHNpbmdsZSBzdWItbGF5ZXIgKGFsbCByZWZzIGxheWVyIDApXG4gIGJ3LmZsYWcocHRsLm1heFN1YkxheWVyc01pbnVzMSA9PT0gMCk7XG4gIGJ3LncoMHhmZmZmLCAxNik7IC8vIHJlc2VydmVkXG4gIGJ3LmNvcHkocHRsLnB0bEJpdHMsIHB0bC5wdGxTdGFydCwgcHRsLnB0bEVuZCAtIHB0bC5wdGxTdGFydCk7XG5cbiAgYncuZmxhZygxKTsgLy8gc3ViX2xheWVyX29yZGVyaW5nX2luZm9fcHJlc2VudFxuICBmb3IgKGxldCBpID0gMDsgaSA8PSBwdGwubWF4U3ViTGF5ZXJzTWludXMxOyBpKyspIHtcbiAgICBidy51ZSg0KTsgLy8gbWF4RGVjUGljQnVmZmVyaW5nIC0gMVxuICAgIGJ3LnVlKDIpOyAvLyBudW1SZW9yZGVyUGljc1xuICAgIGJ3LnVlKDQpOyAvLyBtYXhMYXRlbmN5SW5jcmVhc2UgKyAxXG4gIH1cblxuICBidy53KDEsIDYpOyAvLyBtYXhfbnVoX2xheWVyX2lkID0gMVxuICBidy51ZSgxKTsgLy8gbnVtX2xheWVyX3NldHNfbWludXMxID0gMVxuICBidy5mbGFnKDEpOyAvLyBsYXllcl9pZF9pbmNsdWRlZFsxXVswXVxuICBidy5mbGFnKDEpOyAvLyBsYXllcl9pZF9pbmNsdWRlZFsxXVsxXVxuICBidy5mbGFnKDApOyAvLyB0aW1pbmdfaW5mb19wcmVzZW50XG4gIGJ3LmZsYWcoMSk7IC8vIHZwc19leHRlbnNpb25fZmxhZ1xuICBidy5hbGlnbigxKTsgLy8gZXh0ZW5zaW9uIGFsaWdubWVudCBiaXRzID0gMVxufVxuXG4vKiogV3JpdGUgVlBTIGV4dGVuc2lvbiBtYXRjaGluZyB4MjY1IDQuMSBFTkFCTEVfQUxQSEEuICovXG5mdW5jdGlvbiB3cml0ZVZQU0V4dGVuc2lvbihidzogQml0V3JpdGVyLCBwdGw6IFBhcnNlZFBUTCwgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpIHtcbiAgLy8gRXh0ZW5zaW9uIFBUTDogbGV2ZWxfaWRjIG9ubHkgKHByb2ZpbGVQcmVzZW50RmxhZz0wKVxuICBidy5jb3B5KHB0bC5wdGxCaXRzLCBwdGwucHRsRW5kIC0gOCwgOCk7XG4gIGlmIChwdGwubWF4U3ViTGF5ZXJzTWludXMxID4gMCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcHRsLm1heFN1YkxheWVyc01pbnVzMTsgaSsrKSBidy53KDAsIDIpO1xuICAgIGZvciAobGV0IGkgPSBwdGwubWF4U3ViTGF5ZXJzTWludXMxOyBpIDwgODsgaSsrKSBidy53KDAsIDIpO1xuICB9XG5cbiAgYncuZmxhZygwKTsgLy8gc3BsaXR0aW5nX2ZsYWdcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCAxNjsgaSsrKSBidy5mbGFnKGkgPT09IDIgfHwgaSA9PT0gMyk7IC8vIHNjYWxhYmlsaXR5OiBzcGF0aWFsICsgYXV4XG4gIGJ3LncoMCwgMyk7IC8vIGRpbWVuc2lvbl9pZF9sZW5bMF0gPSAxXG4gIGJ3LncoMCwgMyk7IC8vIGRpbWVuc2lvbl9pZF9sZW5bMV0gPSAxXG4gIGJ3LmZsYWcoMSk7IC8vIG51aF9sYXllcl9pZF9wcmVzZW50XG4gIGJ3LncoMSwgNik7IC8vIGxheWVyX2lkX2luX251aFsxXSA9IDFcbiAgYncudygxLCAxKTsgLy8gZGltZW5zaW9uX2lkWzFdWzBdID0gMVxuICBidy53KDEsIDEpOyAvLyBkaW1lbnNpb25faWRbMV1bMV0gPSBBVVhfQUxQSEFcbiAgYncudygwLCA0KTsgLy8gdmlld19pZF9sZW4gPSAwXG5cbiAgYncuZmxhZygwKTsgLy8gZGlyZWN0X2RlcGVuZGVuY3lfZmxhZ1sxXVswXVxuICBidy51ZSgwKTsgLy8gbnVtX2FkZF9sYXllcl9zZXRzXG4gIGJ3LmZsYWcoMCk7IC8vIHN1Yl9sYXllcnNfbWF4X21pbnVzMV9wcmVzZW50XG4gIGJ3LmZsYWcoMCk7IC8vIG1heF90aWRfcmVmX3ByZXNlbnRcbiAgYncuZmxhZygwKTsgLy8gZGVmYXVsdF9yZWZfbGF5ZXJzX2FjdGl2ZVxuXG4gIC8vIEZGbXBlZyBsb29wcyBmcm9tIGluZGV4IDIgdG8gbmJfcHRsLTEsIHNvIG5wdGxfbTE9MiDihpIgMSBlbnRyeSBhdCBpbmRleCAyXG4gIGJ3LnVlKDIpOyAvLyB2cHNfbnVtX3Byb2ZpbGVfdGllcl9sZXZlbF9taW51czFcbiAgYncuZmxhZygxKTsgLy8gcHJvZmlsZV9wcmVzZW50X2ZsYWdbMl1cbiAgYncuY29weShwdGwucHRsQml0cywgcHRsLnB0bFN0YXJ0LCBwdGwucHRsRW5kIC0gcHRsLnB0bFN0YXJ0KTtcblxuICBidy51ZSgwKTsgLy8gbnVtX2FkZF9vbHNzXG4gIGJ3LncoMCwgMik7IC8vIGRlZmF1bHRfb3V0cHV0X2xheWVyX2lkY1xuICBidy53KDEsIDIpOyAvLyBwdGxfaWR4WzFdWzBdID0gMSAoY2VpbF9sb2cyKDMpID0gMiBiaXRzKVxuICBidy53KDIsIDIpOyAvLyBwdGxfaWR4WzFdWzFdID0gMlxuXG4gIGJ3LnVlKDApOyAvLyB2cHNfbnVtX3JlcF9mb3JtYXRzX21pbnVzMVxuICBidy53KHdpZHRoLCAxNik7XG4gIGJ3LncoaGVpZ2h0LCAxNik7XG4gIGJ3LmZsYWcoMSk7IC8vIGNocm9tYV9hbmRfYml0X2RlcHRoX3Zwc19wcmVzZW50XG4gIGJ3LncoMSwgMik7IC8vIGNocm9tYV9mb3JtYXRfaWRjID0gNDoyOjBcbiAgYncudygwLCA0KTsgLy8gYml0X2RlcHRoX2x1bWFfbWludXM4XG4gIGJ3LncoMCwgNCk7IC8vIGJpdF9kZXB0aF9jaHJvbWFfbWludXM4XG4gIGJ3LmZsYWcoMCk7IC8vIGNvbmZvcm1hbmNlX3dpbmRvd192cHNfZmxhZ1xuXG4gIGJ3LmZsYWcoMSk7IC8vIG1heF9vbmVfYWN0aXZlX3JlZl9sYXllclxuICBidy5mbGFnKDApOyAvLyBwb2NfbHNiX2FsaWduZWRcbiAgYncuZmxhZygxKTsgLy8gcG9jX2xzYl9ub3RfcHJlc2VudFxuXG4gIC8vIERQQiBmb3IgT0xTIDEgKDIgbGF5ZXJzLCAxIHN1Yi1sYXllcilcbiAgYncuZmxhZygwKTsgLy8gc3ViX2xheWVyX2ZsYWdfaW5mb19wcmVzZW50XG4gIGJ3LnVlKDApOyAvLyBtYXhfZGVjX3BpY19idWZmZXJpbmcgKGxheWVyIDApXG4gIGJ3LnVlKDApOyAvLyBtYXhfZGVjX3BpY19idWZmZXJpbmcgKGxheWVyIDEpXG4gIGJ3LnVlKDApOyAvLyBtYXhfbnVtX3Jlb3JkZXJfcGljc1xuICBidy51ZSgwKTsgLy8gbWF4X2xhdGVuY3lfaW5jcmVhc2VcblxuICBidy51ZSgwKTsgLy8gZGlyZWN0X2RlcF90eXBlX2xlbl9taW51czJcbiAgYncuZmxhZygwKTsgLy8gZGVmYXVsdF9kaXJlY3RfZGVwZW5kZW5jeV9mbGFnXG4gIGJ3LnVlKDApOyAvLyBub25fdnVpX2V4dGVuc2lvbl9sZW5ndGhcbiAgYncuZmxhZygwKTsgLy8gdnBzX3Z1aV9wcmVzZW50XG4gIGJ3LmZsYWcoMCk7IC8vIHZwc19leHRlbnNpb24yX2ZsYWdcbn1cblxuLyoqXG4gKiBCdWlsZCBhIGNvbXBsZXRlIGFscGhhIFZQUyBmcm9tIHNjcmF0Y2gsIHVzaW5nIHRoZSBvcmlnaW5hbCBOVkVOQyBWUFNcbiAqIG9ubHkgYXMgYSBzb3VyY2UgZm9yIHRoZSBQVEwgKHByb2ZpbGUvdGllci9sZXZlbCkgYnl0ZXMuXG4gKiBNYXRjaGVzIHgyNjUgNC4xIEVOQUJMRV9BTFBIQSBWUFMgc3RydWN0dXJlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRBbHBoYVZQUyh2cHNEYXRhOiBCdWZmZXIsIHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKTogQnVmZmVyIHtcbiAgY29uc3QgcHRsID0gZXh0cmFjdFBUTCh2cHNEYXRhKTtcbiAgaWYgKCFwdGwpIHJldHVybiB2cHNEYXRhO1xuXG4gIGNvbnN0IGJ3ID0gbmV3IEJpdFdyaXRlcigpO1xuICB3cml0ZUJhc2VWUFMoYncsIHB0bCk7XG4gIHdyaXRlVlBTRXh0ZW5zaW9uKGJ3LCBwdGwsIHdpZHRoLCBoZWlnaHQpO1xuXG4gIGJ3LmJpdHMucHVzaCgxKTsgLy8gUkJTUCBzdG9wIGJpdFxuICBidy5hbGlnbigwKTtcbiAgcmV0dXJuIGFkZEVtdWxhdGlvblByZXZlbnRpb24ocGFja0JpdHMoYncuYml0cykpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8xMi5cblxuaW1wb3J0IHR5cGUgeyBGcmFtZSB9IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQgeyBwYWNrQml0cyB9IGZyb20gXCIuL2JpdFwiO1xuaW1wb3J0IHsgQU5ORVhfQl9TVEFSVF9DT0RFLCBlbmNvZGVOYWxIZWFkZXIsIHR5cGUgTmFsVW5pdCwgcmV3cml0ZU5hbExheWVySWQsIHNwbGl0TmFsVW5pdHMgfSBmcm9tIFwiLi9uYWxcIjtcbmltcG9ydCB7IGJ1aWxkQWxwaGFWUFMgfSBmcm9tIFwiLi92cHNcIjtcblxuLy8gQkdSQSBhbHBoYSDihpIgWSBwbGFuZSBvZiBwYWNrZWQgWVVWNDIwUC4gQ2FsbGVyIHByZS1maWxscyBVVj0xMjguXG4vLyBVaW50MzIgcGF0aDogQkdSQSBMRSB1MzIgPj4+IDI0ID0gQSBieXRlLlxuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RBbHBoYVRvWXV2NDIwcEJ1ZmZlcihiZ3JhRnJhbWU6IEZyYW1lLCBidWY6IEJ1ZmZlcik6IHZvaWQge1xuICBjb25zdCBzcmMgPSBiZ3JhRnJhbWUuZGF0YT8uWzBdO1xuICBjb25zdCBzcmNMcyA9IGJncmFGcmFtZS5saW5lc2l6ZT8uWzBdO1xuICBpZiAoIXNyYyB8fCAhc3JjTHMpIHRocm93IG5ldyBFcnJvcihcImV4dHJhY3RBbHBoYTogbWlzc2luZyBCR1JBIGRhdGFcIik7XG4gIGNvbnN0IHcgPSBiZ3JhRnJhbWUud2lkdGg7XG4gIGNvbnN0IGggPSBiZ3JhRnJhbWUuaGVpZ2h0O1xuICBjb25zdCB5U2l6ZSA9IHcgKiBoO1xuICBpZiAoc3JjLmJ5dGVPZmZzZXQgJSA0ID09PSAwICYmIHNyY0xzID09PSB3ICogNCkge1xuICAgIGNvbnN0IHNyYzMyID0gbmV3IFVpbnQzMkFycmF5KHNyYy5idWZmZXIsIHNyYy5ieXRlT2Zmc2V0LCB5U2l6ZSk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB5U2l6ZTsgaSsrKSBidWZbaV0gPSBzcmMzMltpXSEgPj4+IDI0O1xuICB9IGVsc2Uge1xuICAgIGZvciAobGV0IHkgPSAwOyB5IDwgaDsgeSsrKSB7XG4gICAgICBjb25zdCByb3dCYXNlID0geSAqIHNyY0xzICsgMztcbiAgICAgIGNvbnN0IGRzdEJhc2UgPSB5ICogdztcbiAgICAgIGZvciAobGV0IHggPSAwOyB4IDwgdzsgeCsrKSBidWZbZHN0QmFzZSArIHhdID0gc3JjW3Jvd0Jhc2UgKyB4ICogNF0hO1xuICAgIH1cbiAgfVxufVxuXG5jb25zdCBOQUxfVU5JVF9QUkVGSVhfU0VJID0gMzk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVW5pZmllZEV4dHJhZGF0YU9wdGlvbnMge1xuICBiYXNlRXh0cmFkYXRhOiBCdWZmZXI7XG4gIGFscGhhRXh0cmFkYXRhOiBCdWZmZXI7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRVbmlmaWVkRXh0cmFkYXRhKG9wdHM6IFVuaWZpZWRFeHRyYWRhdGFPcHRpb25zKTogQnVmZmVyIHtcbiAgY29uc3QgeyBiYXNlRXh0cmFkYXRhLCBhbHBoYUV4dHJhZGF0YSB9ID0gb3B0cztcbiAgY29uc3QgYmFzZU5hbHMgPSBzcGxpdE5hbFVuaXRzKGJhc2VFeHRyYWRhdGEpO1xuICBjb25zdCBhbHBoYU5hbHMgPSBzcGxpdE5hbFVuaXRzKGFscGhhRXh0cmFkYXRhKTtcblxuICBjb25zdCBhbHBoYUJ5VHlwZSA9IG5ldyBNYXA8bnVtYmVyLCBOYWxVbml0W10+KCk7XG4gIGZvciAoY29uc3QgbmFsIG9mIGFscGhhTmFscykge1xuICAgIGlmIChuYWwudHlwZSA9PT0gMzIpIGNvbnRpbnVlO1xuICAgIGNvbnN0IGFyciA9IGFscGhhQnlUeXBlLmdldChuYWwudHlwZSkgPz8gW107XG4gICAgYXJyLnB1c2gobmFsKTtcbiAgICBhbHBoYUJ5VHlwZS5zZXQobmFsLnR5cGUsIGFycik7XG4gIH1cblxuICBjb25zdCBjaHVua3M6IEJ1ZmZlcltdID0gW107XG4gIGNvbnN0IGVtaXR0ZWQgPSBuZXcgU2V0PG51bWJlcj4oKTtcbiAgZm9yIChjb25zdCBuYWwgb2YgYmFzZU5hbHMpIHtcbiAgICBjb25zdCBkYXRhID0gbmFsLnR5cGUgPT09IDMyID8gYnVpbGRBbHBoYVZQUyhuYWwuZGF0YSwgb3B0cy53aWR0aCwgb3B0cy5oZWlnaHQpIDogbmFsLmRhdGE7XG4gICAgY2h1bmtzLnB1c2goQU5ORVhfQl9TVEFSVF9DT0RFLCBkYXRhKTtcbiAgICBpZiAoIWVtaXR0ZWQuaGFzKG5hbC50eXBlKSkge1xuICAgICAgZW1pdHRlZC5hZGQobmFsLnR5cGUpO1xuICAgICAgZm9yIChjb25zdCBhbHBoYU5hbCBvZiBhbHBoYUJ5VHlwZS5nZXQobmFsLnR5cGUpID8/IFtdKSB7XG4gICAgICAgIGNodW5rcy5wdXNoKEFOTkVYX0JfU1RBUlRfQ09ERSwgcmV3cml0ZU5hbExheWVySWQoYWxwaGFOYWwuZGF0YSwgMSkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNodW5rcy5wdXNoKGJ1aWxkQWxwaGFDaGFubmVsSW5mb1NFSSgpKTtcbiAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoY2h1bmtzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkQWxwaGFDaGFubmVsSW5mb1NFSSgpOiBCdWZmZXIge1xuICBjb25zdCBwYXlsb2FkVHlwZSA9IDE2NTtcbiAgY29uc3QgcGF5bG9hZFNpemUgPSA0O1xuICBjb25zdCBbaDAsIGgxXSA9IGVuY29kZU5hbEhlYWRlcihOQUxfVU5JVF9QUkVGSVhfU0VJLCAwLCAxKTtcblxuICBjb25zdCBiaXRzOiBudW1iZXJbXSA9IFtdO1xuICBjb25zdCB3cml0ZUJpdHMgPSAodmFsOiBudW1iZXIsIG46IG51bWJlcikgPT4ge1xuICAgIGZvciAobGV0IGkgPSBuIC0gMTsgaSA+PSAwOyBpLS0pIGJpdHMucHVzaCgodmFsID4+IGkpICYgMSk7XG4gIH07XG5cbiAgd3JpdGVCaXRzKDAsIDEpOyAvLyBhbHBoYV9jaGFubmVsX2NhbmNlbF9mbGFnXG4gIHdyaXRlQml0cygwLCAzKTsgLy8gYWxwaGFfY2hhbm5lbF91c2VfaWRjXG4gIHdyaXRlQml0cygwLCAzKTsgLy8gYWxwaGFfY2hhbm5lbF9iaXRfZGVwdGhfbWludXM4XG4gIHdyaXRlQml0cygwLCA5KTsgLy8gYWxwaGFfdHJhbnNwYXJlbnRfdmFsdWVcbiAgd3JpdGVCaXRzKDI1NSwgOSk7IC8vIGFscGhhX29wYXF1ZV92YWx1ZVxuICB3cml0ZUJpdHMoMCwgMSk7IC8vIGFscGhhX2NoYW5uZWxfaW5jcl9mbGFnXG4gIHdyaXRlQml0cygwLCAxKTsgLy8gYWxwaGFfY2hhbm5lbF9jbGlwX2ZsYWdcbiAgd3JpdGVCaXRzKDEsIDEpOyAvLyBieXRlIGFsaWdubWVudFxuICB3aGlsZSAoYml0cy5sZW5ndGggJSA4ICE9PSAwKSB3cml0ZUJpdHMoMCwgMSk7XG5cbiAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoW1xuICAgIEFOTkVYX0JfU1RBUlRfQ09ERSxcbiAgICBCdWZmZXIuZnJvbShbaDAsIGgxXSksXG4gICAgQnVmZmVyLmZyb20oW3BheWxvYWRUeXBlLCBwYXlsb2FkU2l6ZV0pLFxuICAgIHBhY2tCaXRzKGJpdHMpLFxuICAgIEJ1ZmZlci5mcm9tKFsweDgwXSksXG4gIF0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW50ZXJsZWF2ZUFjY2Vzc1VuaXRzKGJhc2VOYWxzOiBOYWxVbml0W10sIGFscGhhTmFsczogTmFsVW5pdFtdKTogQnVmZmVyIHtcbiAgY29uc3QgY2h1bmtzOiBCdWZmZXJbXSA9IFtdO1xuICBmb3IgKGNvbnN0IG5hbCBvZiBiYXNlTmFscykge1xuICAgIGNodW5rcy5wdXNoKEFOTkVYX0JfU1RBUlRfQ09ERSwgbmFsLmRhdGEpO1xuICB9XG4gIGZvciAoY29uc3QgbmFsIG9mIGFscGhhTmFscykge1xuICAgIGlmIChuYWwudHlwZSA8IDMyKSB7XG4gICAgICBjaHVua3MucHVzaChBTk5FWF9CX1NUQVJUX0NPREUsIHJld3JpdGVOYWxMYXllcklkKG5hbC5kYXRhLCAxKSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBCdWZmZXIuY29uY2F0KGNodW5rcyk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzEyLlxuXG5pbXBvcnQgeyBDb2RlYywgdHlwZSBDb2RlY0NvbnRleHQsIEZGbXBlZ0Vycm9yLCBGcmFtZSwgdHlwZSBQYWNrZXQsIHR5cGUgU3RyZWFtIH0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB7IEFWX1BJWF9GTVRfQkdSQSwgQVZfUElYX0ZNVF9ZVVY0MjBQLCBGRl9FTkNPREVSX0hFVkNfTlZFTkMgfSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcbmltcG9ydCB7XG4gIGJ1aWxkQWxwaGFDaGFubmVsSW5mb1NFSSxcbiAgYnVpbGRVbmlmaWVkRXh0cmFkYXRhLFxuICBleHRyYWN0QWxwaGFUb1l1djQyMHBCdWZmZXIsXG4gIGludGVybGVhdmVBY2Nlc3NVbml0cyxcbn0gZnJvbSBcIi4vYWxwaGFcIjtcbmltcG9ydCB0eXBlIHsgRm9ybWF0TXV4ZXIgfSBmcm9tIFwiLi9tdXhlclwiO1xuaW1wb3J0IHsgc3BsaXROYWxVbml0cyB9IGZyb20gXCIuL25hbFwiO1xuaW1wb3J0IHsgbWFrZUZyYW1lLCBtYWtlUGFja2V0LCBvcGVuVmlkZW9DdHggfSBmcm9tIFwiLi9taXNjXCI7XG5pbXBvcnQgdHlwZSB7IEh3VmlkZW9FbmNvZGVyT3B0aW9ucyB9IGZyb20gXCIuL3ZpZGVvdG9vbGJveFwiO1xuXG5pbnRlcmZhY2UgTnZlbmNTdGF0ZSB7XG4gIGJhc2VDdHg6IENvZGVjQ29udGV4dDtcbiAgYWxwaGFDdHg6IENvZGVjQ29udGV4dDtcbiAgYmFzZVBrdDogUGFja2V0O1xuICBhbHBoYVBrdDogUGFja2V0O1xuICBzdHJlYW06IFN0cmVhbTtcbiAgYWxwaGFTd0ZyYW1lOiBGcmFtZTtcbiAgYWxwaGFCdWY6IEJ1ZmZlcjtcbn1cblxuZXhwb3J0IGNsYXNzIE52ZW5jRHVhbExheWVyRW5jb2RlciBpbXBsZW1lbnRzIERpc3Bvc2FibGUge1xuICBwcml2YXRlIF9zOiBOdmVuY1N0YXRlO1xuICBwcml2YXRlIF9zZWlCdWZmZXI6IEJ1ZmZlcjtcbiAgcHJpdmF0ZSBfcHRzID0gMG47XG4gIHByaXZhdGUgX3NlaUluamVjdGVkID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihzOiBOdmVuY1N0YXRlKSB7XG4gICAgdGhpcy5fcyA9IHM7XG4gICAgdGhpcy5fc2VpQnVmZmVyID0gYnVpbGRBbHBoYUNoYW5uZWxJbmZvU0VJKCk7XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgY3JlYXRlKG9wdHM6IEh3VmlkZW9FbmNvZGVyT3B0aW9ucyk6IFByb21pc2U8TnZlbmNEdWFsTGF5ZXJFbmNvZGVyPiB7XG4gICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0LCBmcHMsIGJpdHJhdGUsIG11eGVyIH0gPSBvcHRzO1xuXG4gICAgY29uc3QgY29kZWMgPSBDb2RlYy5maW5kRW5jb2RlckJ5TmFtZShGRl9FTkNPREVSX0hFVkNfTlZFTkMpO1xuICAgIGlmICghY29kZWMpIHRocm93IG5ldyBFcnJvcihcImhldmNfbnZlbmMgZW5jb2RlciBub3QgZm91bmRcIik7XG5cbiAgICBjb25zdCBudmVuY09wdHMgPSB7IHByZXNldDogXCJwNFwiLCBiZjogXCIwXCIgfTtcbiAgICBjb25zdCBjb21tb24gPSB7IGNvZGVjLCB3aWR0aCwgaGVpZ2h0LCBmcHMsIGJpdHJhdGUsIG9wdGlvbnM6IG52ZW5jT3B0cyB9O1xuICAgIC8vIEJHUkEgZGlyZWN0IOKAlCBOVkVOQyBjb252ZXJ0cyBpbnRlcm5hbGx5LCBubyBDUFUgU1dTLCBubyBod0ZyYW1lc0N0eCBuZWVkZWQuXG4gICAgY29uc3QgYmFzZUN0eCA9IGF3YWl0IG9wZW5WaWRlb0N0eCh7IC4uLmNvbW1vbiwgcGl4ZWxGb3JtYXQ6IEFWX1BJWF9GTVRfQkdSQSB9LCBcIm52ZW5jLmJhc2Uub3BlbjJcIik7XG4gICAgY29uc3QgYWxwaGFDdHggPSBhd2FpdCBvcGVuVmlkZW9DdHgoeyAuLi5jb21tb24sIHBpeGVsRm9ybWF0OiBBVl9QSVhfRk1UX1lVVjQyMFAgfSwgXCJudmVuYy5hbHBoYS5vcGVuMlwiKTtcblxuICAgIGNvbnN0IHN0cmVhbSA9IG11eGVyLmFkZFN0cmVhbShiYXNlQ3R4LCBcImh2YzFcIik7XG4gICAgaWYgKGJhc2VDdHguZXh0cmFEYXRhICYmIGFscGhhQ3R4LmV4dHJhRGF0YSkge1xuICAgICAgc3RyZWFtLmNvZGVjcGFyLmV4dHJhZGF0YSA9IGJ1aWxkVW5pZmllZEV4dHJhZGF0YSh7XG4gICAgICAgIGJhc2VFeHRyYWRhdGE6IGJhc2VDdHguZXh0cmFEYXRhLFxuICAgICAgICBhbHBoYUV4dHJhZGF0YTogYWxwaGFDdHguZXh0cmFEYXRhLFxuICAgICAgICB3aWR0aCxcbiAgICAgICAgaGVpZ2h0LFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgeVNpemUgPSB3aWR0aCAqIGhlaWdodDtcbiAgICBjb25zdCB1dlNpemUgPSAod2lkdGggPj4gMSkgKiAoaGVpZ2h0ID4+IDEpO1xuICAgIGNvbnN0IGFscGhhQnVmID0gQnVmZmVyLmFsbG9jKHlTaXplICsgdXZTaXplICogMik7XG4gICAgYWxwaGFCdWYuZmlsbCgxMjgsIHlTaXplKTtcblxuICAgIHJldHVybiBuZXcgTnZlbmNEdWFsTGF5ZXJFbmNvZGVyKHtcbiAgICAgIGJhc2VDdHgsXG4gICAgICBhbHBoYUN0eCxcbiAgICAgIGJhc2VQa3Q6IG1ha2VQYWNrZXQoKSxcbiAgICAgIGFscGhhUGt0OiBtYWtlUGFja2V0KCksXG4gICAgICBzdHJlYW0sXG4gICAgICBhbHBoYVN3RnJhbWU6IG1ha2VGcmFtZSh3aWR0aCwgaGVpZ2h0LCBBVl9QSVhfRk1UX1lVVjQyMFApLFxuICAgICAgYWxwaGFCdWYsXG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBlbmNvZGUoYmdyYUZyYW1lOiBGcmFtZSwgbXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyBiYXNlQ3R4LCBhbHBoYUN0eCwgYWxwaGFTd0ZyYW1lLCBhbHBoYUJ1ZiB9ID0gdGhpcy5fcztcbiAgICBjb25zdCBwdHMgPSB0aGlzLl9wdHMrKztcblxuICAgIGJncmFGcmFtZS5wdHMgPSBwdHM7XG4gICAgYmdyYUZyYW1lLmR1cmF0aW9uID0gMW47XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IGJhc2VDdHguc2VuZEZyYW1lKGJncmFGcmFtZSksIFwiYmFzZS5zZW5kRnJhbWVcIik7XG5cbiAgICAvLyBFbGVjdHJvbjogZnJhbWUuZGF0YVtdIGlzIGEgY29weSwgd3JpdGVzIGRpc2NhcmRlZC4gZnJvbUJ1ZmZlciBnb2VzIG5hdGl2ZS5cbiAgICBleHRyYWN0QWxwaGFUb1l1djQyMHBCdWZmZXIoYmdyYUZyYW1lLCBhbHBoYUJ1Zik7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGFscGhhU3dGcmFtZS5tYWtlV3JpdGFibGUoKSwgXCJhbHBoYVN3Lm1ha2VXcml0YWJsZVwiKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYWxwaGFTd0ZyYW1lLmZyb21CdWZmZXIoYWxwaGFCdWYpLCBcImFscGhhU3cuZnJvbUJ1ZmZlclwiKTtcbiAgICBhbHBoYVN3RnJhbWUucHRzID0gcHRzO1xuICAgIGFscGhhU3dGcmFtZS5kdXJhdGlvbiA9IDFuO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCBhbHBoYUN0eC5zZW5kRnJhbWUoYWxwaGFTd0ZyYW1lKSwgXCJhbHBoYS5zZW5kRnJhbWVcIik7XG5cbiAgICBhd2FpdCB0aGlzLmRyYWluSW50ZXJsZWF2ZWQobXV4ZXIpO1xuICB9XG5cbiAgYXN5bmMgZmx1c2gobXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5fcy5iYXNlQ3R4LnNlbmRGcmFtZShudWxsKTtcbiAgICBhd2FpdCB0aGlzLl9zLmFscGhhQ3R4LnNlbmRGcmFtZShudWxsKTtcbiAgICBhd2FpdCB0aGlzLmRyYWluSW50ZXJsZWF2ZWQobXV4ZXIpO1xuICB9XG5cbiAgW1N5bWJvbC5kaXNwb3NlXSgpOiB2b2lkIHtcbiAgICBjb25zdCB7IGJhc2VQa3QsIGFscGhhUGt0LCBiYXNlQ3R4LCBhbHBoYUN0eCwgYWxwaGFTd0ZyYW1lIH0gPSB0aGlzLl9zO1xuICAgIGJhc2VQa3QuZnJlZSgpO1xuICAgIGFscGhhUGt0LmZyZWUoKTtcbiAgICBhbHBoYVN3RnJhbWUuZnJlZSgpO1xuICAgIC8vIE5WSURJQSBkcml2ZXIgNTIwLjU2LjA2KyBVQUYgaW4gbGlibnZjdXZpZCB3aGVuIE5WRU5DIHNlc3Npb25zIGZyZWVkIGluIGNyZWF0aW9uIG9yZGVyLlxuICAgIC8vIExJRk8gZGVzdHJveSBhdm9pZHMgdGhlIHNlZ2ZhdWx0LiBQZXIgTlZJRElBIGZvcnVtIC90LzI2OTk3NC5cbiAgICBhbHBoYUN0eC5mcmVlQ29udGV4dCgpO1xuICAgIGJhc2VDdHguZnJlZUNvbnRleHQoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZHJhaW5JbnRlcmxlYXZlZChtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IGJhc2VDdHgsIGFscGhhQ3R4LCBiYXNlUGt0LCBhbHBoYVBrdCwgc3RyZWFtIH0gPSB0aGlzLl9zO1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBjb25zdCBiYXNlUiA9IGF3YWl0IGJhc2VDdHgucmVjZWl2ZVBhY2tldChiYXNlUGt0KTtcbiAgICAgIGNvbnN0IGFscGhhUiA9IGF3YWl0IGFscGhhQ3R4LnJlY2VpdmVQYWNrZXQoYWxwaGFQa3QpO1xuICAgICAgY29uc3QgYmFzZVJlYWR5ID0gYmFzZVIgPj0gMDtcbiAgICAgIGNvbnN0IGFscGhhUmVhZHkgPSBhbHBoYVIgPj0gMDtcbiAgICAgIGlmICghYmFzZVJlYWR5ICYmICFhbHBoYVJlYWR5KSBicmVhaztcbiAgICAgIC8vIGJmPTAg4oaSIGJvdGggc3RyZWFtcyBlbWl0IGluIGxvY2tzdGVwLlxuICAgICAgaWYgKGJhc2VSZWFkeSAhPT0gYWxwaGFSZWFkeSkgdGhyb3cgbmV3IEVycm9yKGBOVkVOQyBkZXN5bmM6IGJhc2U9JHtiYXNlUmVhZHl9LCBhbHBoYT0ke2FscGhhUmVhZHl9YCk7XG5cbiAgICAgIGNvbnN0IGNodW5rczogQnVmZmVyW10gPSBbXTtcbiAgICAgIGlmICghdGhpcy5fc2VpSW5qZWN0ZWQpIHtcbiAgICAgICAgY2h1bmtzLnB1c2godGhpcy5fc2VpQnVmZmVyKTtcbiAgICAgICAgdGhpcy5fc2VpSW5qZWN0ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgICAgY2h1bmtzLnB1c2goaW50ZXJsZWF2ZUFjY2Vzc1VuaXRzKHNwbGl0TmFsVW5pdHMoYmFzZVBrdC5kYXRhISksIHNwbGl0TmFsVW5pdHMoYWxwaGFQa3QuZGF0YSEpKSk7XG5cbiAgICAgIC8vIGJhc2VQa3QuZGF0YSBzZXR0ZXIgY2xlYXJzIHB0cy9kdHMvZHVyYXRpb24uXG4gICAgICBjb25zdCBwdHMgPSBiYXNlUGt0LnB0cztcbiAgICAgIGNvbnN0IGR0cyA9IGJhc2VQa3QuZHRzO1xuICAgICAgY29uc3QgZHVyYXRpb24gPSBiYXNlUGt0LmR1cmF0aW9uO1xuICAgICAgYmFzZVBrdC5kYXRhID0gQnVmZmVyLmNvbmNhdChjaHVua3MpO1xuICAgICAgYmFzZVBrdC5wdHMgPSBwdHM7XG4gICAgICBiYXNlUGt0LmR0cyA9IGR0cztcbiAgICAgIGJhc2VQa3QuZHVyYXRpb24gPSBkdXJhdGlvbiA9PT0gMG4gPyAxbiA6IGR1cmF0aW9uO1xuICAgICAgYmFzZVBrdC5zdHJlYW1JbmRleCA9IHN0cmVhbS5pbmRleDtcbiAgICAgIGJhc2VQa3QucmVzY2FsZVRzKGJhc2VDdHgudGltZUJhc2UsIHN0cmVhbS50aW1lQmFzZSk7XG4gICAgICBhd2FpdCBtdXhlci53cml0ZVBhY2tldChiYXNlUGt0KTtcblxuICAgICAgYmFzZVBrdC51bnJlZigpO1xuICAgICAgYWxwaGFQa3QudW5yZWYoKTtcbiAgICB9XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDMvMjEuXG5cbmltcG9ydCB7IENvZGVjLCB0eXBlIENvZGVjQ29udGV4dCwgRkZtcGVnRXJyb3IsIEZyYW1lLCB0eXBlIFBhY2tldCwgdHlwZSBTdHJlYW0gfSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHsgdHlwZSBBVlBpeGVsRm9ybWF0LCB0eXBlIEZGVmlkZW9FbmNvZGVyIH0gZnJvbSBcIm5vZGUtYXYvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBkcmFpblBhY2tldHMsIG1ha2VQYWNrZXQsIG9wZW5WaWRlb0N0eCB9IGZyb20gXCIuL21pc2NcIjtcbmltcG9ydCB0eXBlIHsgRm9ybWF0TXV4ZXIgfSBmcm9tIFwiLi9tdXhlclwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFZpZGVvRW5jb2Rlck9wdGlvbnMge1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgZnBzOiBudW1iZXI7XG4gIGNvZGVjTmFtZTogRkZWaWRlb0VuY29kZXI7XG4gIGNvZGVjVGFnPzogc3RyaW5nO1xuICBjb2RlY09wdHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIGJpdHJhdGU6IG51bWJlcjtcbiAgcGl4ZWxGb3JtYXQ6IEFWUGl4ZWxGb3JtYXQ7XG4gIG11eGVyOiBGb3JtYXRNdXhlcjtcbn1cblxuZXhwb3J0IGNsYXNzIFZpZGVvRW5jb2RlciBpbXBsZW1lbnRzIERpc3Bvc2FibGUge1xuICBwcml2YXRlIHJlYWRvbmx5IF9jdHg6IENvZGVjQ29udGV4dDtcbiAgcHJpdmF0ZSByZWFkb25seSBfcGt0OiBQYWNrZXQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N0cmVhbTogU3RyZWFtO1xuICBwcml2YXRlIF9wdHMgPSAwbjtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKGN0eDogQ29kZWNDb250ZXh0LCBwa3Q6IFBhY2tldCwgc3RyZWFtOiBTdHJlYW0pIHtcbiAgICB0aGlzLl9jdHggPSBjdHg7XG4gICAgdGhpcy5fcGt0ID0gcGt0O1xuICAgIHRoaXMuX3N0cmVhbSA9IHN0cmVhbTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBjcmVhdGUob3B0czogVmlkZW9FbmNvZGVyT3B0aW9ucyk6IFByb21pc2U8VmlkZW9FbmNvZGVyPiB7XG4gICAgY29uc3QgeyBjb2RlY05hbWUsIGNvZGVjVGFnLCBjb2RlY09wdHMsIG11eGVyLCAuLi5yZXN0IH0gPSBvcHRzO1xuXG4gICAgY29uc3QgY29kZWMgPSBDb2RlYy5maW5kRW5jb2RlckJ5TmFtZShjb2RlY05hbWUpO1xuICAgIGlmICghY29kZWMpIHRocm93IG5ldyBFcnJvcihgVmlkZW8gZW5jb2RlciBub3QgZm91bmQ6ICR7Y29kZWNOYW1lfWApO1xuXG4gICAgY29uc3QgY3R4ID0gYXdhaXQgb3BlblZpZGVvQ3R4KHsgY29kZWMsIC4uLnJlc3QsIGNvZGVjVGFnLCBvcHRpb25zOiBjb2RlY09wdHMgfSwgXCJ2aWRlb0N0eC5vcGVuMlwiKTtcbiAgICBjb25zdCBzdHJlYW0gPSBtdXhlci5hZGRTdHJlYW0oY3R4LCBjb2RlY1RhZyk7XG4gICAgcmV0dXJuIG5ldyBWaWRlb0VuY29kZXIoY3R4LCBtYWtlUGFja2V0KCksIHN0cmVhbSk7XG4gIH1cblxuICBhc3luYyBlbmNvZGUoZnJhbWU6IEZyYW1lLCBtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBmcmFtZS5wdHMgPSB0aGlzLl9wdHMrKztcbiAgICBmcmFtZS5kdXJhdGlvbiA9IDFuO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCB0aGlzLl9jdHguc2VuZEZyYW1lKGZyYW1lKSwgXCJ2aWRlb0N0eC5zZW5kRnJhbWVcIik7XG4gICAgYXdhaXQgdGhpcy5kcmFpbihtdXhlcik7XG4gIH1cblxuICBhc3luYyBmbHVzaChtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLl9jdHguc2VuZEZyYW1lKG51bGwpO1xuICAgIGF3YWl0IHRoaXMuZHJhaW4obXV4ZXIpO1xuICB9XG5cbiAgW1N5bWJvbC5kaXNwb3NlXSgpOiB2b2lkIHtcbiAgICB0aGlzLl9wa3QuZnJlZSgpO1xuICAgIHRoaXMuX2N0eC5mcmVlQ29udGV4dCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBkcmFpbihtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gZHJhaW5QYWNrZXRzKHRoaXMuX2N0eCwgdGhpcy5fcGt0LCB0aGlzLl9zdHJlYW0sIG11eGVyKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8xMi5cblxuaW1wb3J0IHsgdHlwZSBDb2RlY0NvbnRleHQsIEZGbXBlZ0Vycm9yLCBGcmFtZSwgdHlwZSBQYWNrZXQsIHR5cGUgU3RyZWFtIH0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB0eXBlIHsgSGFyZHdhcmVDb250ZXh0IH0gZnJvbSBcIm5vZGUtYXYvYXBpXCI7XG5pbXBvcnQgeyBBVl9QSVhfRk1UX0JHUkEsIEFWQ09MX1JBTkdFX0pQRUcgfSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcbmltcG9ydCB7IGRyYWluUGFja2V0cywgbWFrZVBhY2tldCwgb3BlblZpZGVvQ3R4IH0gZnJvbSBcIi4vbWlzY1wiO1xuaW1wb3J0IHR5cGUgeyBGb3JtYXRNdXhlciB9IGZyb20gXCIuL211eGVyXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSHdWaWRlb0VuY29kZXJPcHRpb25zIHtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIGZwczogbnVtYmVyO1xuICBodzogSGFyZHdhcmVDb250ZXh0O1xuICBiaXRyYXRlOiBudW1iZXI7XG4gIG11eGVyOiBGb3JtYXRNdXhlcjtcbn1cblxuZXhwb3J0IGNsYXNzIFZpZGVvVG9vbGJveEVuY29kZXIgaW1wbGVtZW50cyBEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSBfY3R4OiBDb2RlY0NvbnRleHQ7XG4gIHByaXZhdGUgX3BrdDogUGFja2V0O1xuICBwcml2YXRlIF9zdHJlYW06IFN0cmVhbTtcbiAgcHJpdmF0ZSBfcHRzID0gMG47XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihjdHg6IENvZGVjQ29udGV4dCwgcGt0OiBQYWNrZXQsIHN0cmVhbTogU3RyZWFtKSB7XG4gICAgdGhpcy5fY3R4ID0gY3R4O1xuICAgIHRoaXMuX3BrdCA9IHBrdDtcbiAgICB0aGlzLl9zdHJlYW0gPSBzdHJlYW07XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgY3JlYXRlKG9wdHM6IEh3VmlkZW9FbmNvZGVyT3B0aW9ucyk6IFByb21pc2U8VmlkZW9Ub29sYm94RW5jb2Rlcj4ge1xuICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgZnBzLCBodywgYml0cmF0ZSwgbXV4ZXIgfSA9IG9wdHM7XG5cbiAgICBjb25zdCBjb2RlYyA9IGh3LmdldEVuY29kZXJDb2RlYyhcImhldmNcIik7XG4gICAgaWYgKCFjb2RlYykgdGhyb3cgbmV3IEVycm9yKFwiaGV2Y192aWRlb3Rvb2xib3ggZW5jb2RlciBub3QgZm91bmRcIik7XG5cbiAgICBjb25zdCBjdHggPSBhd2FpdCBvcGVuVmlkZW9DdHgoXG4gICAgICB7XG4gICAgICAgIGNvZGVjLFxuICAgICAgICB3aWR0aCxcbiAgICAgICAgaGVpZ2h0LFxuICAgICAgICBmcHMsXG4gICAgICAgIGJpdHJhdGUsXG4gICAgICAgIHBpeGVsRm9ybWF0OiBBVl9QSVhfRk1UX0JHUkEsXG4gICAgICAgIGNvbG9yUmFuZ2U6IEFWQ09MX1JBTkdFX0pQRUcsXG4gICAgICAgIGNvZGVjVGFnOiBcImh2YzFcIixcbiAgICAgICAgb3B0aW9uczogeyBhbHBoYV9xdWFsaXR5OiBcIjFcIiB9LFxuICAgICAgfSxcbiAgICAgIFwidnRFbmMub3BlbjJcIixcbiAgICApO1xuICAgIGNvbnN0IHN0cmVhbSA9IG11eGVyLmFkZFN0cmVhbShjdHgsIFwiaHZjMVwiKTtcbiAgICByZXR1cm4gbmV3IFZpZGVvVG9vbGJveEVuY29kZXIoY3R4LCBtYWtlUGFja2V0KCksIHN0cmVhbSk7XG4gIH1cblxuICBhc3luYyBlbmNvZGUoYmdyYUZyYW1lOiBGcmFtZSwgbXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYmdyYUZyYW1lLnB0cyA9IHRoaXMuX3B0cysrO1xuICAgIGJncmFGcmFtZS5kdXJhdGlvbiA9IDFuO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCB0aGlzLl9jdHguc2VuZEZyYW1lKGJncmFGcmFtZSksIFwidnRFbmMuc2VuZEZyYW1lXCIpO1xuICAgIGF3YWl0IHRoaXMuZHJhaW4obXV4ZXIpO1xuICB9XG5cbiAgYXN5bmMgZmx1c2gobXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5fY3R4LnNlbmRGcmFtZShudWxsKTtcbiAgICBhd2FpdCB0aGlzLmRyYWluKG11eGVyKTtcbiAgfVxuXG4gIFtTeW1ib2wuZGlzcG9zZV0oKTogdm9pZCB7XG4gICAgdGhpcy5fcGt0LmZyZWUoKTtcbiAgICB0aGlzLl9jdHguZnJlZUNvbnRleHQoKTtcbiAgfVxuXG4gIHByaXZhdGUgZHJhaW4obXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIGRyYWluUGFja2V0cyh0aGlzLl9jdHgsIHRoaXMuX3BrdCwgdGhpcy5fc3RyZWFtLCBtdXhlcik7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMTMuXG5cbmltcG9ydCB7IEhhcmR3YXJlQ29udGV4dCB9IGZyb20gXCJub2RlLWF2L2FwaVwiO1xuaW1wb3J0IHtcbiAgQVZfUElYX0ZNVF9ZVVZBNDIwUCxcbiAgRkZfRU5DT0RFUl9MSUJYMjY1LFxuICBGRl9IV0RFVklDRV9UWVBFX0NVREEsXG4gIEZGX0hXREVWSUNFX1RZUEVfVklERU9UT09MQk9YLFxufSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcblxuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4uL2xvZ2dpbmdcIjtcbmltcG9ydCB7IENvZGVjU3RhdGUgfSBmcm9tIFwiLi9jb2RlY1wiO1xuaW1wb3J0IHR5cGUgeyBGb3JtYXRNdXhlciB9IGZyb20gXCIuL211eGVyXCI7XG5pbXBvcnQgeyBOdmVuY0R1YWxMYXllckVuY29kZXIgfSBmcm9tIFwiLi9udmVuY1wiO1xuaW1wb3J0IHsgVmlkZW9FbmNvZGVyIH0gZnJvbSBcIi4vdmlkZW9cIjtcbmltcG9ydCB7IFZpZGVvVG9vbGJveEVuY29kZXIgfSBmcm9tIFwiLi92aWRlb3Rvb2xib3hcIjtcblxuY29uc3QgVEFHID0gXCJbRW5jb2Rlcl1cIjtcblxuZXhwb3J0IHR5cGUgSHdFbmNvZGVyID0gVmlkZW9Ub29sYm94RW5jb2RlciB8IE52ZW5jRHVhbExheWVyRW5jb2RlcjtcblxuZXhwb3J0IGludGVyZmFjZSBWaWRlb1NldHVwIHtcbiAgdmlkZW8/OiBWaWRlb0VuY29kZXI7XG4gIGh3VmlkZW8/OiBId0VuY29kZXI7XG4gIGNvZGVjPzogQ29kZWNTdGF0ZTtcbiAgaHc/OiBIYXJkd2FyZUNvbnRleHQ7XG4gIG93bnNIdzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBId1ZpZGVvRmFjdG9yeU9wdGlvbnMge1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgZnBzOiBudW1iZXI7XG4gIGJpdHJhdGU/OiBudW1iZXI7XG4gIGRpc2FibGVId0NvZGVjPzogYm9vbGVhbjtcbiAgc2hhcmVkSHc/OiBIYXJkd2FyZUNvbnRleHQ7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVId1ZpZGVvRW5jb2RlcihvcHRzOiBId1ZpZGVvRmFjdG9yeU9wdGlvbnMsIG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8VmlkZW9TZXR1cD4ge1xuICBjb25zdCB7IHdpZHRoLCBoZWlnaHQsIGZwcywgYml0cmF0ZSA9IDhfMDAwXzAwMCwgZGlzYWJsZUh3Q29kZWMgPSBmYWxzZSwgc2hhcmVkSHcgfSA9IG9wdHM7XG4gIGNvbnN0IGh3ID0gc2hhcmVkSHcgPz8gKGRpc2FibGVId0NvZGVjID8gdW5kZWZpbmVkIDogKEhhcmR3YXJlQ29udGV4dC5hdXRvKCkgPz8gdW5kZWZpbmVkKSk7XG4gIGNvbnN0IG93bnNIdyA9ICFzaGFyZWRIdyAmJiAhIWh3O1xuXG4gIHRyeSB7XG4gICAgaWYgKGh3Py5kZXZpY2VUeXBlTmFtZSA9PT0gRkZfSFdERVZJQ0VfVFlQRV9WSURFT1RPT0xCT1ggJiYgaHcuZ2V0RW5jb2RlckNvZGVjKFwiaGV2Y1wiKSkge1xuICAgICAgbG9nZ2VyLmRlYnVnKFRBRywgXCJ1c2luZyBWaWRlb1Rvb2xib3ggSEVWQyBhbHBoYSBlbmNvZGVyXCIpO1xuICAgICAgY29uc3QgaHdWaWRlbyA9IGF3YWl0IFZpZGVvVG9vbGJveEVuY29kZXIuY3JlYXRlKHsgd2lkdGgsIGhlaWdodCwgZnBzLCBodywgYml0cmF0ZSwgbXV4ZXIgfSk7XG4gICAgICByZXR1cm4geyBod1ZpZGVvLCBodywgb3duc0h3IH07XG4gICAgfVxuICAgIGlmIChodz8uZGV2aWNlVHlwZU5hbWUgPT09IEZGX0hXREVWSUNFX1RZUEVfQ1VEQSAmJiBody5nZXRFbmNvZGVyQ29kZWMoXCJoZXZjXCIpKSB7XG4gICAgICBsb2dnZXIuZGVidWcoVEFHLCBcInVzaW5nIE5WRU5DIGR1YWwtbGF5ZXIgSEVWQyBhbHBoYSBlbmNvZGVyXCIpO1xuICAgICAgY29uc3QgaHdWaWRlbyA9IGF3YWl0IE52ZW5jRHVhbExheWVyRW5jb2Rlci5jcmVhdGUoeyB3aWR0aCwgaGVpZ2h0LCBmcHMsIGh3LCBiaXRyYXRlLCBtdXhlciB9KTtcbiAgICAgIHJldHVybiB7IGh3VmlkZW8sIGh3LCBvd25zSHcgfTtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsb2dnZXIud2FybihUQUcsIFwiSGFyZHdhcmUgY29kZWMgc2Vzc2lvbiBsaW1pdHMgcmVhY2hlZCwgdXNlIHNvZnR3YXJlIGVuY29kZXJcIiwgZSk7XG4gICAgaWYgKG93bnNIdykgaHc/LmRpc3Bvc2UoKTtcbiAgfVxuXG4gIGxvZ2dlci5kZWJ1ZyhUQUcsIFwidXNpbmcgc29mdHdhcmUgbGlieDI2NSBIRVZDIGFscGhhIGVuY29kZXJcIik7XG4gIGNvbnN0IHZpZGVvID0gYXdhaXQgVmlkZW9FbmNvZGVyLmNyZWF0ZSh7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0LFxuICAgIGZwcyxcbiAgICBjb2RlY05hbWU6IEZGX0VOQ09ERVJfTElCWDI2NSxcbiAgICBjb2RlY1RhZzogXCJodmMxXCIsXG4gICAgY29kZWNPcHRzOiB7IHByZXNldDogXCJtZWRpdW1cIiwgXCJ4MjY1LXBhcmFtc1wiOiBcImxvZy1sZXZlbD0xOmJmcmFtZXM9Mzpwb29scz0rOmZyYW1lLXRocmVhZHM9MFwiIH0sXG4gICAgYml0cmF0ZSxcbiAgICBwaXhlbEZvcm1hdDogQVZfUElYX0ZNVF9ZVVZBNDIwUCxcbiAgICBtdXhlcixcbiAgfSk7XG4gIHJldHVybiB7IHZpZGVvLCBjb2RlYzogYXdhaXQgQ29kZWNTdGF0ZS5jcmVhdGUod2lkdGgsIGhlaWdodCksIG93bnNIdzogZmFsc2UgfTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDMvMjEuXG5cbmltcG9ydCB7IENvZGVjQ29udGV4dCwgRkZtcGVnRXJyb3IsIEZvcm1hdENvbnRleHQsIFBhY2tldCB9IGZyb20gXCJub2RlLWF2XCI7XG5cbmV4cG9ydCBjbGFzcyBGb3JtYXRNdXhlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2N0eDogRm9ybWF0Q29udGV4dDtcbiAgcHJpdmF0ZSBfb3BlbmVkID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3Iob3V0UGF0aDogc3RyaW5nLCBmb3JtYXROYW1lPzogc3RyaW5nKSB7XG4gICAgdGhpcy5fY3R4ID0gbmV3IEZvcm1hdENvbnRleHQoKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IodGhpcy5fY3R4LmFsbG9jT3V0cHV0Q29udGV4dDIobnVsbCwgZm9ybWF0TmFtZSA/PyBudWxsLCBvdXRQYXRoKSwgXCJhbGxvY091dHB1dENvbnRleHQyXCIpO1xuICB9XG5cbiAgYWRkU3RyZWFtKGNvZGVjQ3R4OiBDb2RlY0NvbnRleHQsIGNvZGVjVGFnPzogc3RyaW5nKTogUmV0dXJuVHlwZTxGb3JtYXRDb250ZXh0W1wibmV3U3RyZWFtXCJdPiB7XG4gICAgY29uc3Qgc3RyZWFtID0gdGhpcy5fY3R4Lm5ld1N0cmVhbShudWxsKTtcbiAgICBzdHJlYW0udGltZUJhc2UgPSBjb2RlY0N0eC50aW1lQmFzZTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3Ioc3RyZWFtLmNvZGVjcGFyLmZyb21Db250ZXh0KGNvZGVjQ3R4KSwgXCJjb2RlY3Bhci5mcm9tQ29udGV4dFwiKTtcbiAgICBpZiAoY29kZWNUYWcpIHN0cmVhbS5jb2RlY3Bhci5jb2RlY1RhZyA9IGNvZGVjVGFnO1xuICAgIHJldHVybiBzdHJlYW07XG4gIH1cblxuICBhc3luYyBvcGVuKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9vcGVuZWQpIHJldHVybjtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgdGhpcy5fY3R4Lm9wZW5PdXRwdXQoKSwgXCJvcGVuT3V0cHV0XCIpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCB0aGlzLl9jdHgud3JpdGVIZWFkZXIobnVsbCksIFwid3JpdGVIZWFkZXJcIik7XG4gICAgdGhpcy5fb3BlbmVkID0gdHJ1ZTtcbiAgfVxuXG4gIGFzeW5jIHdyaXRlUGFja2V0KHBrdDogUGFja2V0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IHRoaXMuX2N0eC5pbnRlcmxlYXZlZFdyaXRlRnJhbWUocGt0KSwgXCJpbnRlcmxlYXZlZFdyaXRlRnJhbWVcIik7XG4gIH1cblxuICBhc3luYyBbU3ltYm9sLmFzeW5jRGlzcG9zZV0oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLl9vcGVuZWQpIHJldHVybjtcbiAgICBhd2FpdCB0aGlzLl9jdHgud3JpdGVUcmFpbGVyKCk7XG4gICAgYXdhaXQgdGhpcy5fY3R4LmNsb3NlT3V0cHV0KCk7XG4gICAgYXdhaXQgdGhpcy5fY3R4W1N5bWJvbC5hc3luY0Rpc3Bvc2VdKCk7XG4gICAgdGhpcy5fb3BlbmVkID0gZmFsc2U7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMjQuXG5cbmltcG9ydCB7IG9rIH0gZnJvbSBcImFzc2VydFwiO1xuaW1wb3J0IHsgRkZtcGVnRXJyb3IsIHR5cGUgRnJhbWUgfSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHR5cGUgeyBIYXJkd2FyZUNvbnRleHQgfSBmcm9tIFwibm9kZS1hdi9hcGlcIjtcbmltcG9ydCB7XG4gIEFWX1BJWF9GTVRfWVVWQTQyMFAsXG4gIEFWX1NBTVBMRV9GTVRfRkxULFxuICBBVl9TQU1QTEVfRk1UX0ZMVFAsXG4gIEZGX0VOQ09ERVJfQUFDLFxuICBGRl9FTkNPREVSX0xJQk9QVVMsXG4gIHR5cGUgRkZWaWRlb0VuY29kZXIsXG59IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgQXVkaW9FbmNvZGVyIH0gZnJvbSBcIi4vYXVkaW9cIjtcbmltcG9ydCB7IENvZGVjU3RhdGUgfSBmcm9tIFwiLi9jb2RlY1wiO1xuaW1wb3J0IHsgY3JlYXRlSHdWaWRlb0VuY29kZXIsIHR5cGUgSHdFbmNvZGVyLCB0eXBlIFZpZGVvU2V0dXAgfSBmcm9tIFwiLi9mYWN0b3J5XCI7XG5pbXBvcnQgeyBGb3JtYXRNdXhlciB9IGZyb20gXCIuL211eGVyXCI7XG5pbXBvcnQgeyBWaWRlb0VuY29kZXIgfSBmcm9tIFwiLi92aWRlb1wiO1xuXG4vLyBub2RlLWF2IDUuMi4zIGNvbnN0YW50IGlzIHdyb25nOyBmZm1wZWcgcmVnaXN0ZXJzIHdpdGggZGFzaC5cbmNvbnN0IEZGX0VOQ09ERVJfTElCVlBYX1ZQOSA9IFwibGlidnB4LXZwOVwiIGFzIEZGVmlkZW9FbmNvZGVyO1xuXG5leHBvcnQgdHlwZSBTaW5rS2luZCA9IFwibXA0XCIgfCBcIndlYm1cIjtcblxuZXhwb3J0IGludGVyZmFjZSBTaW5rT3B0aW9ucyB7XG4gIG91dEZpbGU6IHN0cmluZztcbiAga2luZDogU2lua0tpbmQ7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICBmcHM6IG51bWJlcjtcbiAgd2l0aEF1ZGlvOiBib29sZWFuO1xuICBkaXNhYmxlSHdDb2RlYzogYm9vbGVhbjtcbiAgc2hhcmVkSHc/OiBIYXJkd2FyZUNvbnRleHQ7XG59XG5cbmludGVyZmFjZSBTaW5rU3RhdGUge1xuICBtdXhlcjogRm9ybWF0TXV4ZXI7XG4gIHZpZGVvPzogVmlkZW9FbmNvZGVyO1xuICBod1ZpZGVvPzogSHdFbmNvZGVyO1xuICBhdWRpbz86IEF1ZGlvRW5jb2RlcjtcbiAgY29kZWM/OiBDb2RlY1N0YXRlO1xuICBvd25zSHc6IGJvb2xlYW47XG4gIGh3PzogSGFyZHdhcmVDb250ZXh0O1xuICBvcHRzOiBTaW5rT3B0aW9ucztcbn1cblxuZXhwb3J0IGNsYXNzIE91dHB1dFNpbmsgaW1wbGVtZW50cyBBc3luY0Rpc3Bvc2FibGUge1xuICBwcml2YXRlIF9zOiBTaW5rU3RhdGU7XG4gIHByaXZhdGUgX2Rpc3Bvc2VkID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihzOiBTaW5rU3RhdGUpIHtcbiAgICB0aGlzLl9zID0gcztcbiAgfVxuXG4gIHN0YXRpYyBraW5kRnJvbVBhdGgocGF0aDogc3RyaW5nKTogU2lua0tpbmQge1xuICAgIGNvbnN0IGxvd2VyID0gcGF0aC50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChsb3dlci5lbmRzV2l0aChcIi53ZWJtXCIpKSByZXR1cm4gXCJ3ZWJtXCI7XG4gICAgaWYgKGxvd2VyLmVuZHNXaXRoKFwiLm1wNFwiKSB8fCBsb3dlci5lbmRzV2l0aChcIi5tb3ZcIikpIHJldHVybiBcIm1wNFwiO1xuICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgb3V0cHV0IGV4dGVuc2lvbjogJHtwYXRofWApO1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIGNyZWF0ZShvcHRzOiBTaW5rT3B0aW9ucyk6IFByb21pc2U8T3V0cHV0U2luaz4ge1xuICAgIGNvbnN0IG11eGVyID0gbmV3IEZvcm1hdE11eGVyKG9wdHMub3V0RmlsZSk7XG4gICAgY29uc3QgdmlkZW8gPSBvcHRzLmtpbmQgPT09IFwibXA0XCIgPyBhd2FpdCB0aGlzLm1wNFZpZGVvKG9wdHMsIG11eGVyKSA6IGF3YWl0IHRoaXMud2VibVZpZGVvKG9wdHMsIG11eGVyKTtcbiAgICBjb25zdCBhdWRpbyA9IG9wdHMud2l0aEF1ZGlvID8gYXdhaXQgdGhpcy5hdWRpb0ZvcihvcHRzLCBtdXhlcikgOiB1bmRlZmluZWQ7XG4gICAgYXdhaXQgbXV4ZXIub3BlbigpO1xuICAgIHJldHVybiBuZXcgT3V0cHV0U2luayh7IG11eGVyLCAuLi52aWRlbywgYXVkaW8sIG9wdHMgfSk7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBtcDRWaWRlbyhvcHRzOiBTaW5rT3B0aW9ucywgbXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTxWaWRlb1NldHVwPiB7XG4gICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0LCBmcHMsIGRpc2FibGVId0NvZGVjLCBzaGFyZWRIdyB9ID0gb3B0cztcbiAgICByZXR1cm4gY3JlYXRlSHdWaWRlb0VuY29kZXIoeyB3aWR0aCwgaGVpZ2h0LCBmcHMsIGRpc2FibGVId0NvZGVjLCBzaGFyZWRIdyB9LCBtdXhlcik7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBhc3luYyB3ZWJtVmlkZW8ob3B0czogU2lua09wdGlvbnMsIG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8VmlkZW9TZXR1cD4ge1xuICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgZnBzIH0gPSBvcHRzO1xuICAgIGNvbnN0IHZpZGVvID0gYXdhaXQgVmlkZW9FbmNvZGVyLmNyZWF0ZSh7XG4gICAgICB3aWR0aCxcbiAgICAgIGhlaWdodCxcbiAgICAgIGZwcyxcbiAgICAgIGNvZGVjTmFtZTogRkZfRU5DT0RFUl9MSUJWUFhfVlA5LFxuICAgICAgY29kZWNPcHRzOiB7IGRlYWRsaW5lOiBcInJlYWx0aW1lXCIsIFwiY3B1LXVzZWRcIjogXCI4XCIsIFwicm93LW10XCI6IFwiMVwiLCB0aHJlYWRzOiBcIjJcIiB9LFxuICAgICAgYml0cmF0ZTogNF8wMDBfMDAwLFxuICAgICAgcGl4ZWxGb3JtYXQ6IEFWX1BJWF9GTVRfWVVWQTQyMFAsXG4gICAgICBtdXhlcixcbiAgICB9KTtcbiAgICByZXR1cm4geyB2aWRlbywgY29kZWM6IGF3YWl0IENvZGVjU3RhdGUuY3JlYXRlKHdpZHRoLCBoZWlnaHQpLCBvd25zSHc6IGZhbHNlIH07XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBhdWRpb0ZvcihvcHRzOiBTaW5rT3B0aW9ucywgbXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTxBdWRpb0VuY29kZXI+IHtcbiAgICAvLyBPcHVzIHJlamVjdHMgNDQuMWsuXG4gICAgY29uc3QgY2ZnID1cbiAgICAgIG9wdHMua2luZCA9PT0gXCJtcDRcIlxuICAgICAgICA/IHsgb3V0U2FtcGxlUmF0ZTogNDRfMTAwLCBvdXRTYW1wbGVGbXQ6IEFWX1NBTVBMRV9GTVRfRkxUUCwgY29kZWNOYW1lOiBGRl9FTkNPREVSX0FBQyB9XG4gICAgICAgIDogeyBvdXRTYW1wbGVSYXRlOiA0OF8wMDAsIG91dFNhbXBsZUZtdDogQVZfU0FNUExFX0ZNVF9GTFQsIGNvZGVjTmFtZTogRkZfRU5DT0RFUl9MSUJPUFVTIH07XG4gICAgcmV0dXJuIEF1ZGlvRW5jb2Rlci5jcmVhdGUoeyAuLi5jZmcsIGdsb2JhbEhlYWRlcjogdHJ1ZSwgYml0cmF0ZTogMTI4XzAwMCwgbXV4ZXIgfSk7XG4gIH1cblxuICBzZXRJbnB1dFJhdGUoc2FtcGxlUmF0ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5fcy5hdWRpbz8uc2V0SW5wdXRSYXRlKHNhbXBsZVJhdGUpO1xuICB9XG5cbiAgYXN5bmMgZW5jb2RlQkdSQShiZ3JhRnJhbWU6IEZyYW1lKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyBod1ZpZGVvLCBtdXhlciB9ID0gdGhpcy5fcztcbiAgICBpZiAoaHdWaWRlbykgcmV0dXJuIGh3VmlkZW8uZW5jb2RlKGJncmFGcmFtZSwgbXV4ZXIpO1xuICAgIHJldHVybiB0aGlzLnN3RW5jb2RlKGJncmFGcmFtZSk7XG4gIH1cblxuICBhc3luYyBlbmNvZGVEZWNvZGVkRnJhbWUoc3JjOiBGcmFtZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgaHdWaWRlbywgbXV4ZXIgfSA9IHRoaXMuX3M7XG4gICAgaWYgKGh3VmlkZW8pIHJldHVybiBod1ZpZGVvLmVuY29kZShzcmMsIG11eGVyKTtcbiAgICByZXR1cm4gdGhpcy5zd0VuY29kZShzcmMpO1xuICB9XG5cbiAgYXN5bmMgZW5jb2RlQXVkaW8ocGNtOiBCdWZmZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLl9zLmF1ZGlvPy5lbmNvZGUocGNtLCB0aGlzLl9zLm11eGVyKTtcbiAgfVxuXG4gIGFzeW5jIGZsdXNoKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgaHdWaWRlbywgdmlkZW8sIGF1ZGlvLCBtdXhlciB9ID0gdGhpcy5fcztcbiAgICBhd2FpdCBhdWRpbz8uZmx1c2gobXV4ZXIpO1xuICAgIGlmIChod1ZpZGVvKSBhd2FpdCBod1ZpZGVvLmZsdXNoKG11eGVyKTtcbiAgICBlbHNlIGF3YWl0IHZpZGVvIS5mbHVzaChtdXhlcik7XG4gIH1cblxuICBhc3luYyBbU3ltYm9sLmFzeW5jRGlzcG9zZV0oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX2Rpc3Bvc2VkKSByZXR1cm47XG4gICAgdGhpcy5fZGlzcG9zZWQgPSB0cnVlO1xuICAgIGNvbnN0IHsgbXV4ZXIsIHZpZGVvLCBod1ZpZGVvLCBhdWRpbywgY29kZWMsIGh3LCBvd25zSHcgfSA9IHRoaXMuX3M7XG4gICAgdmlkZW8/LltTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICBod1ZpZGVvPy5bU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgYXVkaW8/LltTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICBjb2RlYz8uW1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgIGF3YWl0IG11eGVyW1N5bWJvbC5hc3luY0Rpc3Bvc2VdKCk7XG4gICAgaWYgKG93bnNIdykgaHc/LmRpc3Bvc2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc3dFbmNvZGUoc3JjOiBGcmFtZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgdmlkZW8sIGNvZGVjLCBtdXhlciB9ID0gdGhpcy5fcztcbiAgICBvayhjb2RlYz8uc3dzLCBcInN3cyBub3QgaW5pdGlhbGl6ZWRcIik7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGNvZGVjLmRzdC5tYWtlV3JpdGFibGUoKSwgXCJzaW5rRHN0Lm1ha2VXcml0YWJsZVwiKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgY29kZWMuc3dzLnNjYWxlRnJhbWUoY29kZWMuZHN0LCBzcmMpLCBcInNpbmtTd3Muc2NhbGVGcmFtZVwiKTtcbiAgICBhd2FpdCB2aWRlbyEuZW5jb2RlKGNvZGVjLmRzdCwgbXV4ZXIpO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzAxLlxuXG5pbXBvcnQgeyBGRm1wZWdFcnJvciwgRnJhbWUgfSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHsgSGFyZHdhcmVDb250ZXh0IH0gZnJvbSBcIm5vZGUtYXYvYXBpXCI7XG5pbXBvcnQgeyBBVl9QSVhfRk1UX0JHUkEsIEZGX0hXREVWSUNFX1RZUEVfQ1VEQSwgRkZfSFdERVZJQ0VfVFlQRV9WSURFT1RPT0xCT1ggfSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcblxuaW1wb3J0IHsgQ29uY3VycmVuY3lMaW1pdGVyIH0gZnJvbSBcIi4uL2xpbWl0ZXJcIjtcbmltcG9ydCB7IENvZGVjU3RhdGUgfSBmcm9tIFwiLi9jb2RlY1wiO1xuaW1wb3J0IHsgbWFrZUZyYW1lIH0gZnJvbSBcIi4vbWlzY1wiO1xuaW1wb3J0IHsgT3V0cHV0U2luayB9IGZyb20gXCIuL3NpbmtcIjtcblxuZXhwb3J0IGludGVyZmFjZSBFbmNvZGVyUGlwZWxpbmVPcHRpb25zIHtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIGZwczogbnVtYmVyO1xuICBvdXRGaWxlOiBzdHJpbmc7XG4gIHdpdGhBdWRpbz86IGJvb2xlYW47XG4gIGRpc2FibGVId0NvZGVjPzogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIFBpcGVsaW5lU3RhdGUge1xuICBzaW5rczogT3V0cHV0U2lua1tdO1xuICBzaGFyZWRIdz86IEhhcmR3YXJlQ29udGV4dDtcbiAgbGltaXRlcjogQ29uY3VycmVuY3lMaW1pdGVyO1xuICBwbmdDb2RlYz86IENvZGVjU3RhdGU7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICBvdXRGaWxlczogc3RyaW5nW107XG59XG5cbmV4cG9ydCBjbGFzcyBFbmNvZGVyUGlwZWxpbmUge1xuICBwcml2YXRlIF9zOiBQaXBlbGluZVN0YXRlO1xuICBwcml2YXRlIF9kaXNwb3NlZCA9IGZhbHNlO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoczogUGlwZWxpbmVTdGF0ZSkge1xuICAgIHRoaXMuX3MgPSBzO1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIGNyZWF0ZShvcHRzOiBFbmNvZGVyUGlwZWxpbmVPcHRpb25zKTogUHJvbWlzZTxFbmNvZGVyUGlwZWxpbmU+IHtcbiAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQsIGZwcywgb3V0RmlsZSwgd2l0aEF1ZGlvID0gZmFsc2UsIGRpc2FibGVId0NvZGVjID0gZmFsc2UgfSA9IG9wdHM7XG4gICAgY29uc3Qgb3V0RmlsZXMgPSBvdXRGaWxlXG4gICAgICAuc3BsaXQoXCIsXCIpXG4gICAgICAubWFwKChwKSA9PiBwLnRyaW0oKSlcbiAgICAgIC5maWx0ZXIoQm9vbGVhbik7XG4gICAgaWYgKG91dEZpbGVzLmxlbmd0aCA9PT0gMCkgdGhyb3cgbmV3IEVycm9yKFwib3V0RmlsZSBtdXN0IGNvbnRhaW4gYXQgbGVhc3Qgb25lIHBhdGhcIik7XG5cbiAgICBjb25zdCBraW5kcyA9IG91dEZpbGVzLm1hcCgocCkgPT4gT3V0cHV0U2luay5raW5kRnJvbVBhdGgocCkpO1xuICAgIGNvbnN0IG5lZWRzTXA0SHcgPSAhZGlzYWJsZUh3Q29kZWMgJiYga2luZHMuaW5jbHVkZXMoXCJtcDRcIik7XG4gICAgY29uc3Qgc2hhcmVkSHcgPSBuZWVkc01wNEh3ID8gKEhhcmR3YXJlQ29udGV4dC5hdXRvKCkgPz8gdW5kZWZpbmVkKSA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBpc0h3QWxwaGFDYXBhYmxlID1cbiAgICAgIHNoYXJlZEh3Py5kZXZpY2VUeXBlTmFtZSA9PT0gRkZfSFdERVZJQ0VfVFlQRV9WSURFT1RPT0xCT1ggfHwgc2hhcmVkSHc/LmRldmljZVR5cGVOYW1lID09PSBGRl9IV0RFVklDRV9UWVBFX0NVREE7XG5cbiAgICBjb25zdCBzaW5rczogT3V0cHV0U2lua1tdID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvdXRGaWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3Qgc2luayA9IGF3YWl0IE91dHB1dFNpbmsuY3JlYXRlKHtcbiAgICAgICAgb3V0RmlsZTogb3V0RmlsZXNbaV0hLFxuICAgICAgICBraW5kOiBraW5kc1tpXSEsXG4gICAgICAgIHdpZHRoLFxuICAgICAgICBoZWlnaHQsXG4gICAgICAgIGZwcyxcbiAgICAgICAgd2l0aEF1ZGlvLFxuICAgICAgICBkaXNhYmxlSHdDb2RlYyxcbiAgICAgICAgc2hhcmVkSHc6IGtpbmRzW2ldID09PSBcIm1wNFwiICYmIGlzSHdBbHBoYUNhcGFibGUgPyBzaGFyZWRIdyA6IHVuZGVmaW5lZCxcbiAgICAgIH0pO1xuICAgICAgc2lua3MucHVzaChzaW5rKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEVuY29kZXJQaXBlbGluZSh7XG4gICAgICBzaW5rcyxcbiAgICAgIHNoYXJlZEh3LFxuICAgICAgbGltaXRlcjogbmV3IENvbmN1cnJlbmN5TGltaXRlcigxKSxcbiAgICAgIHdpZHRoLFxuICAgICAgaGVpZ2h0LFxuICAgICAgb3V0RmlsZXMsXG4gICAgfSk7XG4gIH1cblxuICBzZXR1cEF1ZGlvKHNhbXBsZVJhdGU6IG51bWJlcik6IHZvaWQge1xuICAgIGZvciAoY29uc3Qgc2luayBvZiB0aGlzLl9zLnNpbmtzKSBzaW5rLnNldElucHV0UmF0ZShzYW1wbGVSYXRlKTtcbiAgfVxuXG4gIGFzeW5jIGVuY29kZUJHUkEoaW5wdXQ6IEJ1ZmZlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuX3MubGltaXRlci5zY2hlZHVsZShhc3luYyAoKSA9PiB7XG4gICAgICB1c2luZyBmcmFtZSA9IHRoaXMuYmdyYUZyYW1lKGlucHV0KTtcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKHRoaXMuX3Muc2lua3MubWFwKChzaW5rKSA9PiBzaW5rLmVuY29kZUJHUkEoZnJhbWUpKSk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBlbmNvZGVQTkcocG5nRGF0YTogQnVmZmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5fcy5saW1pdGVyLnNjaGVkdWxlKGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gdGhpcy5fcztcbiAgICAgIHRoaXMuX3MucG5nQ29kZWMgPz89IGF3YWl0IENvZGVjU3RhdGUuY3JlYXRlKHdpZHRoLCBoZWlnaHQpO1xuICAgICAgY29uc3Qgc3JjID0gYXdhaXQgdGhpcy5fcy5wbmdDb2RlYy5kZWNvZGVQTkcocG5nRGF0YSk7XG4gICAgICBmb3IgKGNvbnN0IHNpbmsgb2YgdGhpcy5fcy5zaW5rcykgYXdhaXQgc2luay5lbmNvZGVEZWNvZGVkRnJhbWUoc3JjKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGVuY29kZUF1ZGlvKHBjbTogQnVmZmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5fcy5saW1pdGVyLnNjaGVkdWxlKGFzeW5jICgpID0+IHtcbiAgICAgIGZvciAoY29uc3Qgc2luayBvZiB0aGlzLl9zLnNpbmtzKSBhd2FpdCBzaW5rLmVuY29kZUF1ZGlvKHBjbSk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBmaW5pc2goKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLl9zLmxpbWl0ZXIuZHJhaW4oKTtcbiAgICAgIGZvciAoY29uc3Qgc2luayBvZiB0aGlzLl9zLnNpbmtzKSBhd2FpdCBzaW5rLmZsdXNoKCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGF3YWl0IHRoaXMuZnJlZSgpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fcy5vdXRGaWxlcztcbiAgfVxuXG4gIGFzeW5jIFtTeW1ib2wuYXN5bmNEaXNwb3NlXSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fZGlzcG9zZWQpIHJldHVybjtcbiAgICBhd2FpdCB0aGlzLl9zLmxpbWl0ZXIuZHJhaW4oKTtcbiAgICBhd2FpdCB0aGlzLmZyZWUoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZnJlZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fZGlzcG9zZWQpIHJldHVybjtcbiAgICB0aGlzLl9kaXNwb3NlZCA9IHRydWU7XG4gICAgZm9yIChjb25zdCBzaW5rIG9mIHRoaXMuX3Muc2lua3MpIGF3YWl0IHNpbmtbU3ltYm9sLmFzeW5jRGlzcG9zZV0oKTtcbiAgICB0aGlzLl9zLnBuZ0NvZGVjPy5bU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgdGhpcy5fcy5zaGFyZWRIdz8uZGlzcG9zZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBiZ3JhRnJhbWUoaW5wdXQ6IEJ1ZmZlcik6IEZyYW1lIHtcbiAgICBjb25zdCBmcmFtZSA9IG1ha2VGcmFtZSh0aGlzLl9zLndpZHRoLCB0aGlzLl9zLmhlaWdodCwgQVZfUElYX0ZNVF9CR1JBKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoZnJhbWUuZnJvbUJ1ZmZlcihpbnB1dCksIFwiYmdyYUZyYW1lLmZyb21CdWZmZXJcIik7XG4gICAgcmV0dXJuIGZyYW1lO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAzLzIzLlxuXG4vKipcbiAqIEZyYW1lIGRyb3AgcXVhbGl0eSBzY29yZSAoMCA9IHBlcmZlY3QsIDEgPSB3b3JzdCkuXG4gKlxuICogQ29tYmluZXMgdHdvIGRpbWVuc2lvbnM6XG4gKiAtIEdsb2JhbDogb3ZlcmFsbCBkcm9wIHJhdGUgYWNyb3NzIHRoZSB0aW1lbGluZVxuICogLSBMb2NhbDogcGVyY2VwdHVhbCBzZXZlcml0eSBvZiBjb25zZWN1dGl2ZSBkcm9wcyAoYnVyc3RzKVxuICpcbiAqIFVzZXMgY29tcGxlbWVudGFyeSBtdWx0aXBsaWNhdGlvbjogc2NvcmUgPSAxIC0gKDEtZykoMS1sKVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZyYW1lRHJvcFNjb3JlIHtcbiAgZ2xvYmFsOiBudW1iZXI7XG4gIGxvY2FsOiBudW1iZXI7XG4gIGphbms6IG51bWJlcjtcbiAgZXhwZWN0ZWQ6IG51bWJlcjtcbiAgYWN0dWFsOiBudW1iZXI7XG4gIG1heEJ1cnN0OiBudW1iZXI7XG59XG5cbmV4cG9ydCBjbGFzcyBGcmFtZURyb3BTdGF0cyB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2ZwczogbnVtYmVyO1xuICBwcml2YXRlIF9hY3R1YWwgPSAwO1xuICBwcml2YXRlIF9jdXJyZW50QnVyc3QgPSAwO1xuICBwcml2YXRlIF9idXJzdHM6IG51bWJlcltdID0gW107XG5cbiAgY29uc3RydWN0b3IoZnBzOiBudW1iZXIpIHtcbiAgICB0aGlzLl9mcHMgPSBmcHM7XG4gIH1cblxuICAvKiogQ2FsbCB3aGVuIGEgZnJhbWUgaXMgYWN0dWFsbHkgd3JpdHRlbiB0byB0aGUgZW5jb2Rlci4gKi9cbiAgd3JvdGUoY291bnQgPSAxKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2N1cnJlbnRCdXJzdCA+IDApIHtcbiAgICAgIHRoaXMuX2J1cnN0cy5wdXNoKHRoaXMuX2N1cnJlbnRCdXJzdCk7XG4gICAgICB0aGlzLl9jdXJyZW50QnVyc3QgPSAwO1xuICAgIH1cbiAgICB0aGlzLl9hY3R1YWwgKz0gY291bnQ7XG4gIH1cblxuICAvKiogQ2FsbCB3aGVuIGEgZnJhbWUgaXMgZHJvcHBlZC4gKi9cbiAgZHJvcHBlZChjb3VudCA9IDEpOiB2b2lkIHtcbiAgICB0aGlzLl9jdXJyZW50QnVyc3QgKz0gY291bnQ7XG4gIH1cblxuICAvKiogRmluYWxpemUgYW5kIHJldHVybiB0aGUgc2NvcmUuICovXG4gIGZpbmFsaXplKCk6IEZyYW1lRHJvcFNjb3JlIHtcbiAgICBpZiAodGhpcy5fY3VycmVudEJ1cnN0ID4gMCkge1xuICAgICAgdGhpcy5fYnVyc3RzLnB1c2godGhpcy5fY3VycmVudEJ1cnN0KTtcbiAgICAgIHRoaXMuX2N1cnJlbnRCdXJzdCA9IDA7XG4gICAgfVxuXG4gICAgbGV0IHRvdGFsRHJvcHBlZCA9IDA7XG4gICAgbGV0IGxvY2FsU3VtID0gMDtcbiAgICBsZXQgbWF4QnVyc3QgPSAwO1xuICAgIGZvciAoY29uc3QgYnVyc3Qgb2YgdGhpcy5fYnVyc3RzKSB7XG4gICAgICB0b3RhbERyb3BwZWQgKz0gYnVyc3Q7XG4gICAgICBtYXhCdXJzdCA9IE1hdGgubWF4KG1heEJ1cnN0LCBidXJzdCk7XG4gICAgICBjb25zdCBwZXJjZXB0aWJsZSA9IE1hdGgubWF4KDAsIGJ1cnN0IC0gMSk7XG4gICAgICBsb2NhbFN1bSArPSAocGVyY2VwdGlibGUgLyB0aGlzLl9mcHMpICoqIDI7XG4gICAgfVxuXG4gICAgY29uc3QgZXhwZWN0ZWQgPSB0aGlzLl9hY3R1YWwgKyB0b3RhbERyb3BwZWQ7XG4gICAgY29uc3QgZyA9IGV4cGVjdGVkID4gMCA/IHRvdGFsRHJvcHBlZCAvIGV4cGVjdGVkIDogMDtcbiAgICBjb25zdCBsID0gTWF0aC5taW4oMSwgbG9jYWxTdW0pO1xuICAgIGNvbnN0IHNjb3JlID0gMSAtICgxIC0gZykgKiAoMSAtIGwpO1xuXG4gICAgcmV0dXJuIHsgZ2xvYmFsOiBnLCBsb2NhbDogbCwgamFuazogc2NvcmUsIGV4cGVjdGVkLCBhY3R1YWw6IHRoaXMuX2FjdHVhbCwgbWF4QnVyc3QgfTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wNi5cblxuaW1wb3J0IHR5cGUgeyBOYXRpdmVJbWFnZSwgU2l6ZSB9IGZyb20gXCJlbGVjdHJvblwiO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNFbXB0eShpbWFnZTogTmF0aXZlSW1hZ2UpIHtcbiAgY29uc3Qgc2l6ZSA9IGltYWdlLmdldFNpemUoKTtcbiAgaWYgKHNpemUud2lkdGggPT09IDAgfHwgc2l6ZS5oZWlnaHQgPT09IDApIHJldHVybiB0cnVlO1xuICByZXR1cm4gaW1hZ2UuaXNFbXB0eSgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2l6ZUVxdWFscyhhOiBTaXplLCBiOiBTaXplKSB7XG4gIHJldHVybiBhLndpZHRoID09PSBiLndpZHRoICYmIGEuaGVpZ2h0ID09PSBiLmhlaWdodDtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDMvMDIuXG5cbmltcG9ydCB7IHJhbmRvbVVVSUQgfSBmcm9tIFwiY3J5cHRvXCI7XG5pbXBvcnQgeyBpcGNNYWluLCBzZXNzaW9uIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBybSwgd3JpdGVGaWxlIH0gZnJvbSBcImZzL3Byb21pc2VzXCI7XG5pbXBvcnQgeyB0bXBkaXIgfSBmcm9tIFwib3NcIjtcbmltcG9ydCB7IGpvaW4gfSBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHR5cGUgeyBFbmNvZGVyUGlwZWxpbmUgfSBmcm9tIFwiLi4vYmFzZS9lbmNvZGVyL3BpcGVsaW5lXCI7XG5cbmNvbnN0IEFVRElPX01FVEFfQ0hBTk5FTCA9IFwiYXVkaW8tbWV0YVwiO1xuY29uc3QgQVVESU9fQ0hVTktfQ0hBTk5FTCA9IFwiYXVkaW8tY2h1bmtcIjtcblxuY29uc3QgQVVESU9fQ0FQVFVSRV9TQ1JJUFQgPSBgXG4oZnVuY3Rpb24oKSB7XG4gIGlmICh3aW5kb3cuX19wdXBfYXVkaW9fY2FwdHVyaW5nX18pIHJldHVybjtcbiAgd2luZG93Ll9fcHVwX2F1ZGlvX2NhcHR1cmluZ19fID0gdHJ1ZTtcblxuICBjb25zdCB7IGlwY1JlbmRlcmVyIH0gPSByZXF1aXJlKCdlbGVjdHJvbicpO1xuICBjb25zdCBjYXB0dXJlZENvbnRleHRzID0gbmV3IFdlYWtTZXQoKTtcbiAgY29uc3Qgc291cmNlZEVsZW1lbnRzID0gbmV3IFdlYWtTZXQoKTtcbiAgbGV0IG1ldGFTZW50ID0gZmFsc2U7XG5cbiAgY29uc3Qgb3JpZ0NyZWF0ZU1FUyA9IEF1ZGlvQ29udGV4dC5wcm90b3R5cGUuY3JlYXRlTWVkaWFFbGVtZW50U291cmNlO1xuICBBdWRpb0NvbnRleHQucHJvdG90eXBlLmNyZWF0ZU1lZGlhRWxlbWVudFNvdXJjZSA9IGZ1bmN0aW9uKGVsKSB7XG4gICAgc291cmNlZEVsZW1lbnRzLmFkZChlbCk7XG4gICAgcmV0dXJuIG9yaWdDcmVhdGVNRVMuY2FsbCh0aGlzLCBlbCk7XG4gIH07XG5cbiAgY29uc3Qgb3JpZ0Nvbm5lY3QgPSBBdWRpb05vZGUucHJvdG90eXBlLmNvbm5lY3Q7XG4gIEF1ZGlvTm9kZS5wcm90b3R5cGUuY29ubmVjdCA9IGZ1bmN0aW9uKGRlc3QsIG91dElkeCwgaW5JZHgpIHtcbiAgICBjb25zdCBjYXB0dXJlTm9kZSA9IGRlc3Q/LmNvbnRleHQ/Ll9fcHVwX2NhcHR1cmVOb2RlX187XG4gICAgaWYgKGNhcHR1cmVOb2RlICYmIGRlc3QgPT09IGRlc3QuY29udGV4dC5kZXN0aW5hdGlvbiAmJiB0aGlzICE9PSBjYXB0dXJlTm9kZSkge1xuICAgICAgb3JpZ0Nvbm5lY3QuY2FsbCh0aGlzLCBjYXB0dXJlTm9kZSwgb3V0SWR4LCBpbklkeCk7XG4gICAgfVxuICAgIHJldHVybiBvcmlnQ29ubmVjdC5jYWxsKHRoaXMsIGRlc3QsIG91dElkeCwgaW5JZHgpO1xuICB9O1xuXG4gIGNvbnN0IE9yaWdBQyA9IHdpbmRvdy5BdWRpb0NvbnRleHQgfHwgd2luZG93LndlYmtpdEF1ZGlvQ29udGV4dDtcbiAgaWYgKCFPcmlnQUMpIHJldHVybjtcblxuICBmdW5jdGlvbiBQYXRjaGVkQUMoKSB7XG4gICAgY29uc3QgY3R4ID0gbmV3IE9yaWdBQyguLi5hcmd1bWVudHMpO1xuICAgIGlmICghY2FwdHVyZWRDb250ZXh0cy5oYXMoY3R4KSkge1xuICAgICAgY2FwdHVyZWRDb250ZXh0cy5hZGQoY3R4KTtcbiAgICAgIGlmICghbWV0YVNlbnQpIHtcbiAgICAgICAgbWV0YVNlbnQgPSB0cnVlO1xuICAgICAgICBpcGNSZW5kZXJlci5zZW5kKCcke0FVRElPX01FVEFfQ0hBTk5FTH0nLCB7IHNhbXBsZVJhdGU6IGN0eC5zYW1wbGVSYXRlIH0pO1xuICAgICAgfVxuICAgICAgY29uc3Qgbm9kZSA9IGN0eC5jcmVhdGVTY3JpcHRQcm9jZXNzb3IoNDA5NiwgMiwgMik7XG4gICAgICBub2RlLm9uYXVkaW9wcm9jZXNzID0gKGUpID0+IHtcbiAgICAgICAgY29uc3QgTCA9IGUuaW5wdXRCdWZmZXIuZ2V0Q2hhbm5lbERhdGEoMCk7XG4gICAgICAgIGNvbnN0IFIgPSBlLmlucHV0QnVmZmVyLmdldENoYW5uZWxEYXRhKDEpO1xuICAgICAgICBjb25zdCBvdXQgPSBuZXcgRmxvYXQzMkFycmF5KEwubGVuZ3RoICogMik7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgTC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIG91dFtpICogMl0gPSBMW2ldO1xuICAgICAgICAgIG91dFtpICogMiArIDFdID0gUltpXTtcbiAgICAgICAgfVxuICAgICAgICBpcGNSZW5kZXJlci5zZW5kKCcke0FVRElPX0NIVU5LX0NIQU5ORUx9JywgQnVmZmVyLmZyb20ob3V0LmJ1ZmZlcikpO1xuICAgICAgfTtcbiAgICAgIG5vZGUuY29ubmVjdChjdHguZGVzdGluYXRpb24pO1xuICAgICAgY3R4Ll9fcHVwX2NhcHR1cmVOb2RlX18gPSBub2RlO1xuICAgIH1cbiAgICByZXR1cm4gY3R4O1xuICB9XG4gIFBhdGNoZWRBQy5wcm90b3R5cGUgPSBPcmlnQUMucHJvdG90eXBlO1xuICBPYmplY3Quc2V0UHJvdG90eXBlT2YoUGF0Y2hlZEFDLCBPcmlnQUMpO1xuICB3aW5kb3cuQXVkaW9Db250ZXh0ID0gUGF0Y2hlZEFDO1xuICBpZiAoJ3dlYmtpdEF1ZGlvQ29udGV4dCcgaW4gd2luZG93KSB3aW5kb3cud2Via2l0QXVkaW9Db250ZXh0ID0gUGF0Y2hlZEFDO1xuXG4gIGNvbnN0IG9yaWdQbGF5ID0gSFRNTE1lZGlhRWxlbWVudC5wcm90b3R5cGUucGxheTtcbiAgSFRNTE1lZGlhRWxlbWVudC5wcm90b3R5cGUucGxheSA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICghdGhpcy5fX3B1cF9jYXB0dXJlZF9fKSB7XG4gICAgICB0aGlzLl9fcHVwX2NhcHR1cmVkX18gPSB0cnVlO1xuICAgICAgY29uc3QgZWwgPSB0aGlzO1xuICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB7XG4gICAgICAgIGlmICghc291cmNlZEVsZW1lbnRzLmhhcyhlbCkpIHtcbiAgICAgICAgICBjb25zdCBjdHggPSBuZXcgUGF0Y2hlZEFDKCk7XG4gICAgICAgICAgY3R4LmNyZWF0ZU1lZGlhRWxlbWVudFNvdXJjZShlbCkuY29ubmVjdChjdHguZGVzdGluYXRpb24pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIG9yaWdQbGF5LmNhbGwodGhpcyk7XG4gIH07XG59KSgpO1xuYDtcblxuZXhwb3J0IGludGVyZmFjZSBBdWRpb0NhcHR1cmUge1xuICB0ZWFyZG93bigpOiBQcm9taXNlPHZvaWQ+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEF1ZGlvQ2FwdHVyZU9wdGlvbnMge1xuICBlbmNvZGVyOiBFbmNvZGVyUGlwZWxpbmU7XG4gIGdldFZpZGVvVGltZU1zOiAoKSA9PiBudW1iZXI7XG4gIG9uRXJyb3I6IChlcnJvcjogRXJyb3IpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZXR1cEF1ZGlvQ2FwdHVyZSh7XG4gIGVuY29kZXIsXG4gIGdldFZpZGVvVGltZU1zLFxuICBvbkVycm9yLFxufTogQXVkaW9DYXB0dXJlT3B0aW9ucyk6IFByb21pc2U8QXVkaW9DYXB0dXJlPiB7XG4gIGNvbnN0IHByZWxvYWRQYXRoID0gam9pbih0bXBkaXIoKSwgYHB1cF9hdWRpb18ke3JhbmRvbVVVSUQoKX0uanNgKTtcbiAgYXdhaXQgd3JpdGVGaWxlKHByZWxvYWRQYXRoLCBBVURJT19DQVBUVVJFX1NDUklQVCk7XG4gIHNlc3Npb24uZGVmYXVsdFNlc3Npb24ucmVnaXN0ZXJQcmVsb2FkU2NyaXB0KHtcbiAgICB0eXBlOiBcImZyYW1lXCIsXG4gICAgaWQ6IFwicHVwLWF1ZGlvXCIsXG4gICAgZmlsZVBhdGg6IHByZWxvYWRQYXRoLFxuICB9KTtcblxuICBpcGNNYWluLm9uKEFVRElPX01FVEFfQ0hBTk5FTCwgYXN5bmMgKF9lLCBkYXRhOiB7IHNhbXBsZVJhdGU6IG51bWJlciB9KSA9PiB7XG4gICAgY29uc3Qgc2FtcGxlUmF0ZSA9IGRhdGEuc2FtcGxlUmF0ZTtcbiAgICBjb25zdCBzdGFydE1zID0gZ2V0VmlkZW9UaW1lTXMoKTtcbiAgICBlbmNvZGVyLnNldHVwQXVkaW8oc2FtcGxlUmF0ZSk7XG4gICAgY29uc3Qgc2lsZW5jZVNhbXBsZXMgPSBNYXRoLmNlaWwoKHN0YXJ0TXMgKiBzYW1wbGVSYXRlKSAvIDEwMDApO1xuICAgIGlmIChzaWxlbmNlU2FtcGxlcyA8PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBlbmNvZGVyLmVuY29kZUF1ZGlvKEJ1ZmZlci5hbGxvYyhzaWxlbmNlU2FtcGxlcyAqIDIgKiA0KSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIG9uRXJyb3IoZXJyb3IgYXMgRXJyb3IpO1xuICAgIH1cbiAgfSk7XG5cbiAgaXBjTWFpbi5vbihBVURJT19DSFVOS19DSEFOTkVMLCBhc3luYyAoX2UsIGJ1ZmZlcjogQnVmZmVyKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGVuY29kZXIuZW5jb2RlQXVkaW8oYnVmZmVyKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgb25FcnJvcihlcnJvciBhcyBFcnJvcik7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4ge1xuICAgIGFzeW5jIHRlYXJkb3duKCkge1xuICAgICAgaXBjTWFpbi5yZW1vdmVBbGxMaXN0ZW5lcnMoQVVESU9fTUVUQV9DSEFOTkVMKTtcbiAgICAgIGlwY01haW4ucmVtb3ZlQWxsTGlzdGVuZXJzKEFVRElPX0NIVU5LX0NIQU5ORUwpO1xuICAgICAgc2Vzc2lvbi5kZWZhdWx0U2Vzc2lvbi51bnJlZ2lzdGVyUHJlbG9hZFNjcmlwdChcInB1cC1hdWRpb1wiKTtcbiAgICAgIGF3YWl0IHJtKHByZWxvYWRQYXRoLCB7IGZvcmNlOiB0cnVlIH0pO1xuICAgIH0sXG4gIH07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA1LlxuXG5pbXBvcnQgeyBzZXRUaW1lb3V0IH0gZnJvbSBcInRpbWVycy9wcm9taXNlc1wiO1xuaW1wb3J0IHsgc2xlZXAgfSBmcm9tIFwiLi90aW1pbmdcIjtcblxuZXhwb3J0IGludGVyZmFjZSBSZXRyeU9wdGlvbnM8QXJncyBleHRlbmRzIGFueVtdLCBSZXQ+IHtcbiAgZm46ICguLi5hcmdzOiBBcmdzKSA9PiBQcm9taXNlPFJldD47XG4gIG1heEF0dGVtcHRzPzogbnVtYmVyO1xuICB0aW1lb3V0PzogbnVtYmVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXNlUmV0cnk8QXJncyBleHRlbmRzIGFueVtdLCBSZXQ+KHsgZm4sIG1heEF0dGVtcHRzID0gMywgdGltZW91dCB9OiBSZXRyeU9wdGlvbnM8QXJncywgUmV0Pikge1xuICBjb25zdCB0aW1lb3V0RXJyb3IgPSBuZXcgRXJyb3IoYHRpbWVvdXQgb3ZlciAke3RpbWVvdXR9bXNgKTtcbiAgcmV0dXJuIGFzeW5jIGZ1bmN0aW9uICguLi5hcmdzOiBBcmdzKSB7XG4gICAgbGV0IGF0dGVtcHQgPSAwO1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBwcm9taXNlcyA9IFtmbiguLi5hcmdzKV07XG4gICAgICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICAgICAgcHJvbWlzZXMucHVzaChcbiAgICAgICAgICAgIHNldFRpbWVvdXQodGltZW91dCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgIHRocm93IHRpbWVvdXRFcnJvcjtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGF3YWl0IFByb21pc2UucmFjZShwcm9taXNlcyk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGF0dGVtcHQrKztcbiAgICAgICAgaWYgKGF0dGVtcHQgPj0gbWF4QXR0ZW1wdHMpIHtcbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IHNsZWVwKE1hdGgucG93KDIsIGF0dGVtcHQpICogMTAwICsgTWF0aC5yYW5kb20oKSAqIDEwMCk7XG4gICAgICB9XG4gICAgfVxuICB9O1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wOS5cblxuY29uc3QgU1VQUE9SVEVEX1BST1RPQ09MUyA9IFtcImZpbGU6XCIsIFwiaHR0cDpcIiwgXCJodHRwczpcIiwgXCJkYXRhOlwiXTtcbmNvbnN0IFNPVVJDRV9QQVRURVJOID0gL14oZmlsZTp8aHR0cHM/OnxkYXRhOikvO1xuXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tIVE1MKHNvdXJjZTogc3RyaW5nKTogdm9pZCB7XG4gIGlmIChTT1VSQ0VfUEFUVEVSTi50ZXN0KHNvdXJjZSkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBwcm90b2NvbCA9IHNvdXJjZS5zcGxpdChcIjpcIilbMF0gKyBcIjpcIjtcbiAgY29uc3QgbWVzc2FnZSA9IFNVUFBPUlRFRF9QUk9UT0NPTFMuaW5jbHVkZXMocHJvdG9jb2wpXG4gICAgPyBgdW5zdXBwb3J0ZWQgcHJvdG9jb2w6ICR7cHJvdG9jb2x9LCBleHBlY3RlZCAke1NVUFBPUlRFRF9QUk9UT0NPTFMuam9pbihcIiwgXCIpfWBcbiAgICA6IGBpbnZhbGlkIHNvdXJjZSBmb3JtYXQsIGV4cGVjdGVkICR7U1VQUE9SVEVEX1BST1RPQ09MUy5qb2luKFwiLCBcIil9YDtcblxuICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAzLzEwLlxuXG5leHBvcnQgaW50ZXJmYWNlIFdhaXRPcHRpb25zIHtcbiAgdGltZW91dDogbnVtYmVyO1xuICBvblRpbWVvdXQ/OiAoKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgY2xhc3MgV2FpdGFibGVFdmVudCB7XG4gIHByaXZhdGUgX3Byb21pc2U/OiBQcm9taXNlPHZvaWQ+O1xuICBwcml2YXRlIF9yZXNvbHZlPzogKCkgPT4gdm9pZDtcbiAgcHJpdmF0ZSBfdGltZW91dFRva2VuPzogTm9kZUpTLlRpbWVvdXQ7XG5cbiAgd2FpdChvcHRpb25zPzogV2FpdE9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fcHJvbWlzZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYWxyZWFkeSB3YWl0aW5nXCIpO1xuICAgIH1cbiAgICB0aGlzLl9wcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIHRoaXMuX3Jlc29sdmUgPSByZXNvbHZlO1xuICAgICAgaWYgKG9wdGlvbnM/LnRpbWVvdXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLl90aW1lb3V0VG9rZW4gPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBvcHRpb25zLm9uVGltZW91dD8uKCk7XG4gICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9LCBvcHRpb25zLnRpbWVvdXQpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLl9wcm9taXNlO1xuICB9XG5cbiAgc2lnbmFsKCkge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLl90aW1lb3V0VG9rZW4pO1xuICAgIHRoaXMuX3Byb21pc2UgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5fcmVzb2x2ZT8uKCk7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDkuXG5cbmltcG9ydCB7IEJyb3dzZXJXaW5kb3cgfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IFVSTCB9IGZyb20gXCJ1cmxcIjtcbmltcG9ydCB7IENvbmN1cnJlbmN5TGltaXRlciB9IGZyb20gXCIuLi9iYXNlL2xpbWl0ZXJcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuLi9iYXNlL2xvZ2dpbmdcIjtcbmltcG9ydCB7IFdhaXRhYmxlRXZlbnQgfSBmcm9tIFwiLi4vYmFzZS93YWl0YWJsZV9ldmVudFwiO1xuXG5jb25zdCBUQUcgPSBcIltOZXR3b3JrXVwiO1xuXG5jb25zdCBtYXAgPSBuZXcgTWFwKFtcbiAgW2Bqc3N6LWJvc3MuaGRzbGIuY29tYCwgYGpzc3otYm9zcy5iaWxpYmlsaS5jb2BdLCAvL1xuICBbYGJvc3MuaGRzbGIuY29tYCwgYHNoamQtYm9zcy5iaWxpYmlsaS5jb2BdLFxuXSk7XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm94aWVkVXJsKHVybDogc3RyaW5nKSB7XG4gIGlmICghdXJsLnN0YXJ0c1dpdGgoXCJodHRwXCIpKSB7XG4gICAgcmV0dXJuIHVybDtcbiAgfVxuICBjb25zdCBwYXJzZWQgPSBuZXcgVVJMKHVybCk7XG4gIGNvbnN0IHRhcmdldCA9IG1hcC5nZXQocGFyc2VkLmhvc3RuYW1lKTtcbiAgaWYgKCF0YXJnZXQpIHtcbiAgICByZXR1cm4gdXJsO1xuICB9XG4gIHBhcnNlZC5ob3N0bmFtZSA9IHRhcmdldDtcbiAgcGFyc2VkLnByb3RvY29sID0gXCJodHRwOlwiO1xuICByZXR1cm4gcGFyc2VkLnRvU3RyaW5nKCk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmV0d29ya09wdGlvbnMge1xuICBzb3VyY2U6IHN0cmluZztcbiAgd2luZG93OiBCcm93c2VyV2luZG93O1xuICB1c2VJbm5lclByb3h5PzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEludGVyY2VwdG9yKHsgc291cmNlLCB3aW5kb3csIHVzZUlubmVyUHJveHkgfTogTmV0d29ya09wdGlvbnMpIHtcbiAgY29uc3QgcmVxID0gd2luZG93LndlYkNvbnRlbnRzLnNlc3Npb24ud2ViUmVxdWVzdDtcbiAgY29uc3QgbGltaXRlciA9IG5ldyBDb25jdXJyZW5jeUxpbWl0ZXIoNjQpO1xuICBjb25zdCBldmVudHMgPSBuZXcgTWFwPHN0cmluZywgV2FpdGFibGVFdmVudD4oKTtcblxuICBhc3luYyBmdW5jdGlvbiB3YWl0KGtleTogc3RyaW5nLCBvblRpbWVvdXQ/OiAoKSA9PiB2b2lkKSB7XG4gICAgY29uc3QgZXZlbnQgPSBuZXcgV2FpdGFibGVFdmVudCgpO1xuICAgIGV2ZW50cy5zZXQoa2V5LCBldmVudCk7XG4gICAgYXdhaXQgZXZlbnQud2FpdCh7IHRpbWVvdXQ6IDVfMDAwLCBvblRpbWVvdXQgfSkuZmluYWxseSgoKSA9PiBldmVudHMuZGVsZXRlKGtleSkpO1xuICB9XG5cbiAgZnVuY3Rpb24gc2lnbmFsKGtleTogc3RyaW5nKSB7XG4gICAgZXZlbnRzLmdldChrZXkpPy5zaWduYWwoKTtcbiAgfVxuXG4gIHJlcS5vbkJlZm9yZVJlcXVlc3QoKGRldGFpbHMsIGNhbGxiYWNrKSA9PiB7XG4gICAgY29uc3QgdXJsID0gZGV0YWlscy51cmw7XG4gICAgY29uc3QgcHJveGllZCA9IHVzZUlubmVyUHJveHkgPyBwcm94aWVkVXJsKHVybCkgOiB1cmw7XG4gICAgbGltaXRlci5zY2hlZHVsZSgoKSA9PiB7XG4gICAgICBjb25zdCBrZXkgPSBgJHt3aW5kb3cuaWR9XyR7ZGV0YWlscy5pZH1gO1xuICAgICAgbG9nZ2VyLmRlYnVnKFRBRywgYHN0YXJ0OmAsIHtcbiAgICAgICAga2V5LFxuICAgICAgICB1cmwsXG4gICAgICAgIHByb3hpZWQsXG4gICAgICAgIG1ldGhvZDogZGV0YWlscy5tZXRob2QsXG4gICAgICAgIHNvdXJjZSxcbiAgICAgICAgc3RhdHM6IGxpbWl0ZXIuc3RhdHMsXG4gICAgICB9KTtcbiAgICAgIGlmIChwcm94aWVkID09PSB1cmwpIHtcbiAgICAgICAgY2FsbGJhY2soeyBjYW5jZWw6IGZhbHNlIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2FsbGJhY2soeyBjYW5jZWw6IGZhbHNlLCByZWRpcmVjdFVSTDogcHJveGllZCB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB3YWl0KGtleSwgKCkgPT4ge1xuICAgICAgICBsb2dnZXIud2FybihUQUcsIGBtYXliZSB0aW1lb3V0OmAsIHtcbiAgICAgICAgICBrZXksXG4gICAgICAgICAgdXJsLFxuICAgICAgICAgIHByb3hpZWQsXG4gICAgICAgICAgbWV0aG9kOiBkZXRhaWxzLm1ldGhvZCxcbiAgICAgICAgICBzb3VyY2UsXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIHJlcS5vbkhlYWRlcnNSZWNlaXZlZCgoeyByZXNwb25zZUhlYWRlcnMgfSwgY2FsbGJhY2spID0+IHtcbiAgICBkZWxldGUgcmVzcG9uc2VIZWFkZXJzPy5bXCJ4LWZyYW1lLW9wdGlvbnNcIl07XG4gICAgZGVsZXRlIHJlc3BvbnNlSGVhZGVycz8uW1wiWC1GcmFtZS1PcHRpb25zXCJdO1xuICAgIGRlbGV0ZSByZXNwb25zZUhlYWRlcnM/LltcImNvbnRlbnQtc2VjdXJpdHktcG9saWN5XCJdO1xuICAgIGRlbGV0ZSByZXNwb25zZUhlYWRlcnM/LltcIkNvbnRlbnQtU2VjdXJpdHktUG9saWN5XCJdO1xuICAgIGNhbGxiYWNrKHsgY2FuY2VsOiBmYWxzZSwgcmVzcG9uc2VIZWFkZXJzIH0pO1xuICB9KTtcblxuICByZXEub25Db21wbGV0ZWQoKGRldGFpbHMpID0+IHtcbiAgICBjb25zdCBrZXkgPSBgJHt3aW5kb3cuaWR9XyR7ZGV0YWlscy5pZH1gO1xuICAgIHNpZ25hbChrZXkpO1xuICAgIGxvZ2dlci5kZWJ1ZyhUQUcsIGBjb21wbGV0ZWQ6YCwge1xuICAgICAga2V5LFxuICAgICAgdXJsOiBkZXRhaWxzLnVybCxcbiAgICAgIG1ldGhvZDogZGV0YWlscy5tZXRob2QsXG4gICAgICBzdGF0dXNDb2RlOiBkZXRhaWxzLnN0YXR1c0NvZGUsXG4gICAgICBzb3VyY2UsXG4gICAgfSk7XG4gIH0pO1xuXG4gIHJlcS5vbkVycm9yT2NjdXJyZWQoKGRldGFpbHMpID0+IHtcbiAgICBjb25zdCBrZXkgPSBgJHt3aW5kb3cuaWR9XyR7ZGV0YWlscy5pZH1gO1xuICAgIHNpZ25hbChrZXkpO1xuICAgIGxvZ2dlci5lcnJvcihUQUcsIGBlcnJvcjpgLCB7XG4gICAgICBrZXksXG4gICAgICB1cmw6IGRldGFpbHMudXJsLFxuICAgICAgbWV0aG9kOiBkZXRhaWxzLm1ldGhvZCxcbiAgICAgIGVycm9yOiBkZXRhaWxzLmVycm9yLFxuICAgICAgc291cmNlLFxuICAgIH0pO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVuc2V0SW50ZXJjZXB0b3Iod2luZG93OiBCcm93c2VyV2luZG93KSB7XG4gIGNvbnN0IHJlcSA9IHdpbmRvdy53ZWJDb250ZW50cy5zZXNzaW9uLndlYlJlcXVlc3Q7XG4gIHJlcS5vbkJlZm9yZVJlcXVlc3QobnVsbCk7XG4gIHJlcS5vbkhlYWRlcnNSZWNlaXZlZChudWxsKTtcbiAgcmVxLm9uQ29tcGxldGVkKG51bGwpO1xuICByZXEub25FcnJvck9jY3VycmVkKG51bGwpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8yNy5cblxuaW1wb3J0IHsgQnJvd3NlcldpbmRvdyB9IGZyb20gXCJlbGVjdHJvblwiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4uL2Jhc2UvbG9nZ2luZ1wiO1xuaW1wb3J0IHsgdXNlUmV0cnkgfSBmcm9tIFwiLi4vYmFzZS9yZXRyeVwiO1xuaW1wb3J0IHsgc2xlZXAgfSBmcm9tIFwiLi4vYmFzZS90aW1pbmdcIjtcbmltcG9ydCB7IGNoZWNrSFRNTCB9IGZyb20gXCIuL2h0bWxfY2hlY2tcIjtcbmltcG9ydCB7IHByb3hpZWRVcmwsIHNldEludGVyY2VwdG9yLCB1bnNldEludGVyY2VwdG9yIH0gZnJvbSBcIi4vbmV0d29ya1wiO1xuaW1wb3J0IHsgY3JlYXRlU3RlZ29VUkwgfSBmcm9tIFwiLi9wcm90b2NvbFwiO1xuaW1wb3J0IHR5cGUgeyBSZW5kZXJPcHRpb25zIH0gZnJvbSBcIi4vc2NoZW1hXCI7XG5cbmNvbnN0IFRBRyA9IFwiW1dpbmRvd11cIjtcbmNvbnN0IFRJTUVPVVRfRVJST1IgPSBuZXcgRXJyb3IoXCJ3aW5kb3cgdGltZW91dFwiKTtcblxuaW50ZXJmYWNlIEZpbmlzaE9wdGlvbnMge1xuICBzb3VyY2U6IHN0cmluZztcbiAgd2luOiBCcm93c2VyV2luZG93O1xuICBhY3Rpb246ICgpID0+IHZvaWQ7XG4gIHRvbGVyYW50PzogYm9vbGVhbjtcbn1cblxuZnVuY3Rpb24gd2FpdEZvckZpbmlzaCh7IHNvdXJjZSwgd2luLCBhY3Rpb24sIHRvbGVyYW50IH06IEZpbmlzaE9wdGlvbnMpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiBkb25lKFRJTUVPVVRfRVJST1IpLCAxMF8wMDApO1xuICAgIGNvbnN0IGRvbmUgPSAoZXJyPzogdW5rbm93bikgPT4ge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgaWYgKGVycikgcmVqZWN0KGVycik7XG4gICAgICBlbHNlIHJlc29sdmUoKTtcbiAgICB9O1xuICAgIHdpbi53ZWJDb250ZW50cy5vbmNlKFwiZG9tLXJlYWR5XCIsICgpID0+IHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhUQUcsIFwiZG9tLXJlYWR5OlwiLCB7IHNvdXJjZSB9KTtcbiAgICAgIGlmICh0b2xlcmFudCkgZG9uZSgpO1xuICAgIH0pO1xuICAgIHdpbi53ZWJDb250ZW50cy5vbmNlKFwiZGlkLXN0b3AtbG9hZGluZ1wiLCAoKSA9PiB7XG4gICAgICBsb2dnZXIuZGVidWcoVEFHLCBcImRpZC1zdG9wLWxvYWRpbmc6XCIsIHsgc291cmNlIH0pO1xuICAgICAgZG9uZSgpO1xuICAgIH0pO1xuICAgIHdpbi53ZWJDb250ZW50cy5vbmNlKFwiZGlkLWZhaWwtbG9hZFwiLCAoX2UsIGNvZGUsIGRlc2MsIHVybCkgPT4ge1xuICAgICAgY29uc3QgbXNnID0gYGRpZC1mYWlsLWxvYWQ6ICR7SlNPTi5zdHJpbmdpZnkoeyB1cmwsIHNvdXJjZSwgY29kZSwgZGVzYyB9KX1gO1xuICAgICAgbG9nZ2VyLmVycm9yKFRBRywgbXNnKTtcbiAgICAgIGRvbmUobmV3IEVycm9yKG1zZykpO1xuICAgIH0pO1xuICAgIHdpbi53ZWJDb250ZW50cy5vbmNlKFwicmVuZGVyLXByb2Nlc3MtZ29uZVwiLCAoX2UsIHsgZXhpdENvZGUsIHJlYXNvbiB9KSA9PiB7XG4gICAgICBjb25zdCBtc2cgPSBgcmVuZGVyLXByb2Nlc3MtZ29uZTogJHtKU09OLnN0cmluZ2lmeSh7IHNvdXJjZSwgZXhpdENvZGUsIHJlYXNvbiB9KX1gO1xuICAgICAgbG9nZ2VyLmVycm9yKFRBRywgbXNnKTtcbiAgICAgIGRvbmUobmV3IEVycm9yKG1zZykpO1xuICAgIH0pO1xuICAgIGFjdGlvbigpO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRpc3Bvc2VXaW5kb3cod2luOiBCcm93c2VyV2luZG93KSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4ge1xuICAgIHVuc2V0SW50ZXJjZXB0b3Iod2luKTtcbiAgICBsZXQgc2V0dGxlZCA9IGZhbHNlO1xuICAgIGNvbnN0IGRvbmUgPSAoKSA9PiB7XG4gICAgICBpZiAoc2V0dGxlZCkgcmV0dXJuO1xuICAgICAgc2V0dGxlZCA9IHRydWU7XG4gICAgICByZXNvbHZlKCk7XG4gICAgfTtcbiAgICB3aW4ub25jZShcImNsb3NlZFwiLCBkb25lKTtcbiAgICB3aW4uY2xvc2UoKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmIChzZXR0bGVkKSByZXR1cm47XG4gICAgICB0cnkge1xuICAgICAgICBsb2dnZXIud2FybihUQUcsIFwiZm9yY2UgY2xvc2VcIik7XG4gICAgICAgIHdpbi5kZXN0cm95KCk7XG4gICAgICB9IGNhdGNoIHt9XG4gICAgICBkb25lKCk7XG4gICAgfSwgMTAwMCk7XG4gIH0pO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFdpbmRvd09wdGlvbnMge1xuICBzb3VyY2U6IHN0cmluZztcbiAgb25DcmVhdGVkPzogKHdpbmRvdzogQnJvd3NlcldpbmRvdykgPT4gUHJvbWlzZTx2b2lkPjtcbiAgcmVuZGVyZXI6IFJlbmRlck9wdGlvbnM7XG4gIHdhcm11cD86IGJvb2xlYW47XG4gIHRvbGVyYW50PzogYm9vbGVhbjtcbn1cblxuYXN5bmMgZnVuY3Rpb24gb3BlbldpbmRvdyh7IHNvdXJjZSwgb25DcmVhdGVkLCByZW5kZXJlciwgd2FybXVwLCB0b2xlcmFudCB9OiBXaW5kb3dPcHRpb25zKTogUHJvbWlzZTxCcm93c2VyV2luZG93PiB7XG4gIGNoZWNrSFRNTChzb3VyY2UpO1xuXG4gIGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgdXNlSW5uZXJQcm94eSB9ID0gcmVuZGVyZXI7XG4gIGNvbnN0IHNyYyA9IHVzZUlubmVyUHJveHkgPyBwcm94aWVkVXJsKHNvdXJjZSkgOiBzb3VyY2U7XG5cbiAgY29uc3Qgd2luID0gbmV3IEJyb3dzZXJXaW5kb3coe1xuICAgIHdpZHRoLFxuICAgIGhlaWdodDogaGVpZ2h0ICsgMSxcbiAgICBtaW5XaWR0aDogd2lkdGgsXG4gICAgbWluSGVpZ2h0OiBoZWlnaHQgKyAxLFxuICAgIG1heFdpZHRoOiB3aWR0aCxcbiAgICBtYXhIZWlnaHQ6IGhlaWdodCArIDEsXG4gICAgcmVzaXphYmxlOiBmYWxzZSxcbiAgICBtaW5pbWl6YWJsZTogZmFsc2UsXG4gICAgbW92YWJsZTogZmFsc2UsXG4gICAgc2hvdzogZmFsc2UsXG4gICAgdHJhbnNwYXJlbnQ6IHRydWUsXG4gICAgYmFja2dyb3VuZENvbG9yOiB1bmRlZmluZWQsXG4gICAgZnJhbWU6IGZhbHNlLFxuICAgIHdlYlByZWZlcmVuY2VzOiB7XG4gICAgICBvZmZzY3JlZW46IHRydWUsXG4gICAgICBiYWNrZ3JvdW5kVGhyb3R0bGluZzogZmFsc2UsXG4gICAgICBub2RlSW50ZWdyYXRpb246IHRydWUsXG4gICAgICBub2RlSW50ZWdyYXRpb25JblN1YkZyYW1lczogdHJ1ZSxcbiAgICAgIG5vZGVJbnRlZ3JhdGlvbkluV29ya2VyOiB0cnVlLFxuICAgICAgY29udGV4dElzb2xhdGlvbjogZmFsc2UsXG4gICAgICB3ZWJTZWN1cml0eTogZmFsc2UsXG4gICAgICBhbGxvd1J1bm5pbmdJbnNlY3VyZUNvbnRlbnQ6IHRydWUsXG4gICAgICBleHBlcmltZW50YWxGZWF0dXJlczogdHJ1ZSxcbiAgICB9LFxuICB9KTtcbiAgc2V0SW50ZXJjZXB0b3IoeyBzb3VyY2UsIHdpbmRvdzogd2luLCB1c2VJbm5lclByb3h5IH0pO1xuICBpZiAoIXdhcm11cCkge1xuICAgIGF3YWl0IG9uQ3JlYXRlZD8uKHdpbik7XG4gIH1cblxuICB3aW4ud2ViQ29udGVudHMub24oXCJjb25zb2xlLW1lc3NhZ2VcIiwgKHsgbGV2ZWwsIG1lc3NhZ2UsIGxpbmVOdW1iZXIsIHNvdXJjZUlkIH0pID0+IHtcbiAgICBjb25zdCBtc2dzID0gW1RBRywgXCJjb25zb2xlOlwiLCB7IG1lc3NhZ2UsIGxpbmVOdW1iZXIsIHNvdXJjZUlkLCBzb3VyY2UgfV07XG4gICAgbGV2ZWwgPT09IFwiZXJyb3JcIiA/IGxvZ2dlci5lcnJvciguLi5tc2dzKSA6IGxvZ2dlci5kZWJ1ZyguLi5tc2dzKTtcbiAgfSk7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCB1cmwgPSBjcmVhdGVTdGVnb1VSTChzcmMsIHsgd2lkdGgsIGhlaWdodCB9KTtcbiAgICBhd2FpdCB3YWl0Rm9yRmluaXNoKHsgc291cmNlLCB3aW4sIGFjdGlvbjogKCkgPT4gd2luLmxvYWRVUkwodXJsKSwgdG9sZXJhbnQgfSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBhd2FpdCBkaXNwb3NlV2luZG93KHdpbik7XG4gICAgdGhyb3cgZTtcbiAgfVxuXG4gIHJldHVybiB3aW47XG59XG5cbmNvbnN0IG9wZW5XaW5kb3dXaXRoUmV0cnkgPSB1c2VSZXRyeSh7IGZuOiBvcGVuV2luZG93LCBtYXhBdHRlbXB0czogMiB9KTtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxvYWRXaW5kb3coeyBzb3VyY2UsIG9uQ3JlYXRlZCwgcmVuZGVyZXIgfTogV2luZG93T3B0aW9ucyk6IFByb21pc2U8QnJvd3NlcldpbmRvdz4ge1xuICBsZXQgd2FybXVwOiBCcm93c2VyV2luZG93IHwgdW5kZWZpbmVkO1xuICBsZXQgZXJyb3I6IHVua25vd247XG4gIHRyeSB7XG4gICAgd2FybXVwID0gYXdhaXQgb3BlbldpbmRvd1dpdGhSZXRyeSh7IHNvdXJjZSwgcmVuZGVyZXIsIHdhcm11cDogdHJ1ZSB9KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGVycm9yID0gZTtcbiAgfVxuXG4gIGNvbnN0IG9wZW4gPSAoKSA9PiB7XG4gICAgcmV0dXJuIG9wZW5XaW5kb3coe1xuICAgICAgc291cmNlLFxuICAgICAgcmVuZGVyZXIsXG4gICAgICBvbkNyZWF0ZWQsXG4gICAgICB0b2xlcmFudDogcmVuZGVyZXIud2luZG93VG9sZXJhbnQsXG4gICAgfSk7XG4gIH07XG5cbiAgaWYgKHJlbmRlcmVyLndpbmRvd1RvbGVyYW50ICYmIGVycm9yID09PSBUSU1FT1VUX0VSUk9SKSB7XG4gICAgbG9nZ2VyLndhcm4oVEFHLCBgd2FybXVwIHRpbWVvdXQ6ICR7c291cmNlfSwgZmFsbGluZyBiYWNrIHRvIGRvbS1yZWFkeWApO1xuICAgIHJldHVybiBhd2FpdCBvcGVuKCk7XG4gIH1cblxuICBpZiAoZXJyb3IpIHtcbiAgICBjb25zdCB7IG1lc3NhZ2UsIHN0YWNrIH0gPSBlcnJvciBhcyBFcnJvcjtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGZhaWxlZCB0byB3YXJtdXAgd2luZG93OiAke0pTT04uc3RyaW5naWZ5KHsgc291cmNlLCBtZXNzYWdlLCBzdGFjayB9KX1gKTtcbiAgfVxuXG4gIGlmICh3YXJtdXApIHtcbiAgICB3YXJtdXAud2ViQ29udGVudHMucmVtb3ZlQWxsTGlzdGVuZXJzKCk7XG4gICAgdW5zZXRJbnRlcmNlcHRvcih3YXJtdXApO1xuICAgIGF3YWl0IHNsZWVwKDIwMDApO1xuICAgIGF3YWl0IGRpc3Bvc2VXaW5kb3cod2FybXVwKTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IG9wZW4oKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGNvbnN0IHsgbWVzc2FnZSwgc3RhY2sgfSA9IGUgYXMgRXJyb3I7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBmYWlsZWQgdG8gbG9hZCB3aW5kb3c6ICR7SlNPTi5zdHJpbmdpZnkoeyBzb3VyY2UsIG1lc3NhZ2UsIHN0YWNrIH0pfWApO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA5LlxuXG5pbXBvcnQgeyB0eXBlIE5hdGl2ZUltYWdlLCB0eXBlIFNpemUgfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IHJlc2l6ZURyYXdhYmxlIH0gZnJvbSBcIi4uL2Jhc2UvY2RwXCI7XG5pbXBvcnQgeyBFbmNvZGVyUGlwZWxpbmUgfSBmcm9tIFwiLi4vYmFzZS9lbmNvZGVyL3BpcGVsaW5lXCI7XG5pbXBvcnQgeyBGcmFtZURyb3BTdGF0cyB9IGZyb20gXCIuLi9iYXNlL2ZyYW1lX2Ryb3BcIjtcbmltcG9ydCB7IHNpemVFcXVhbHMgfSBmcm9tIFwiLi4vYmFzZS9pbWFnZVwiO1xuaW1wb3J0IHsgc2V0dXBBdWRpb0NhcHR1cmUsIHR5cGUgQXVkaW9DYXB0dXJlIH0gZnJvbSBcIi4vYXVkaW9cIjtcbmltcG9ydCB0eXBlIHsgSXBjRG9uZVBheWxvYWQsIElwY1dyaXRlciB9IGZyb20gXCIuL2lwY1wiO1xuaW1wb3J0IHR5cGUgeyBSZW5kZXJPcHRpb25zIH0gZnJvbSBcIi4vc2NoZW1hXCI7XG5pbXBvcnQgeyBkZWNvZGVTdGVnbywgc3RhcnRTdGVnbywgc3RvcFN0ZWdvIH0gZnJvbSBcIi4vc3RlZ29cIjtcbmltcG9ydCB7IGRpc3Bvc2VXaW5kb3csIGxvYWRXaW5kb3cgfSBmcm9tIFwiLi93aW5kb3dcIjtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlbmRlcih3cml0ZXI6IElwY1dyaXRlciwgc291cmNlOiBzdHJpbmcsIG9wdGlvbnM6IFJlbmRlck9wdGlvbnMpOiBQcm9taXNlPElwY0RvbmVQYXlsb2FkPiB7XG4gIGNvbnN0IHsgZnBzLCB3aWR0aCwgaGVpZ2h0LCBkdXJhdGlvbiwgd2l0aEF1ZGlvLCBvdXRGaWxlLCBkaXNhYmxlSHdDb2RlYyB9ID0gb3B0aW9ucztcblxuICBhd2FpdCB1c2luZyBlbmNvZGVyID0gYXdhaXQgRW5jb2RlclBpcGVsaW5lLmNyZWF0ZSh7IHdpZHRoLCBoZWlnaHQsIGZwcywgb3V0RmlsZSwgd2l0aEF1ZGlvLCBkaXNhYmxlSHdDb2RlYyB9KTtcblxuICBjb25zdCB0b3RhbCA9IE1hdGguY2VpbChmcHMgKiBkdXJhdGlvbik7XG4gIGNvbnN0IGZyYW1lSW50ZXJ2YWwgPSAxMDAwIC8gZnBzO1xuICBjb25zdCBmcmFtZVNpemU6IFNpemUgPSB7IHdpZHRoLCBoZWlnaHQ6IGhlaWdodCArIDEgfTtcblxuICBsZXQgd3JpdHRlbiA9IDA7XG4gIGxldCBsYXN0V3JpdHRlblRpbWU6IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgbGV0IHByb2dyZXNzID0gMDtcbiAgbGV0IGVuY29kZUVycm9yOiBFcnJvciB8IHVuZGVmaW5lZDtcbiAgbGV0IHJlc29sdmVyOiAoKCkgPT4gdm9pZCkgfCB1bmRlZmluZWQ7XG4gIGxldCByZWplY3RlcjogKChyZWFzb24/OiB1bmtub3duKSA9PiB2b2lkKSB8IHVuZGVmaW5lZDtcbiAgY29uc3QgZHJvcFN0YXRzID0gbmV3IEZyYW1lRHJvcFN0YXRzKGZwcyk7XG5cbiAgbGV0IGF1ZGlvOiBBdWRpb0NhcHR1cmUgfCB1bmRlZmluZWQ7XG4gIGNvbnN0IHNjaGVkdWxlRnJhbWUgPSAoZnJhbWU6IEJ1ZmZlcikgPT4ge1xuICAgIHdyaXR0ZW4rKztcbiAgICBlbmNvZGVyLmVuY29kZUJHUkEoZnJhbWUpLmNhdGNoKChlKSA9PiAoZW5jb2RlRXJyb3IgPz89IGUpKTtcbiAgfTtcblxuICBjb25zdCBwYWludCA9IChfZTogdW5rbm93biwgX3I6IHVua25vd24sIGltYWdlOiBOYXRpdmVJbWFnZSkgPT4ge1xuICAgIGlmIChlbmNvZGVFcnJvcikge1xuICAgICAgcmVqZWN0ZXI/LihlbmNvZGVFcnJvcik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgaW1hZ2VTaXplID0gaW1hZ2UuZ2V0U2l6ZSgpO1xuICAgIGlmICghc2l6ZUVxdWFscyhpbWFnZVNpemUsIGZyYW1lU2l6ZSkpIHtcbiAgICAgIC8vIE5PVEUoQXV0b2tha2EpOiBXZSBtdXN0IGVuc3VyZSBmcmFtZSBpcyByZWFkeSBvbiBlbGVjdHJvbiB2NDErXG4gICAgICByZXNpemVEcmF3YWJsZShjZHAsIGZyYW1lU2l6ZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gRGVjb2RlIHN0ZWdvIHRpbWVzdGFtcCBmcm9tIHRoZSBib3R0b20gcGl4ZWwgcm93IHdpdGhvdXQgZnVsbCBiaXRtYXAgY29weVxuICAgIGNvbnN0IGJpdG1hcCA9IGltYWdlLnRvQml0bWFwKCk7XG4gICAgY29uc3QgY3VycmVudFRpbWUgPSBkZWNvZGVTdGVnbyhiaXRtYXAsIGltYWdlU2l6ZSk7XG4gICAgaWYgKGN1cnJlbnRUaW1lID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGVuY29kZUVycm9yID8/PSBuZXcgRXJyb3IoYG5vIHRpbWVzdGFtcCBAICR7d3JpdHRlbn1gKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBTa2lwIGZyYW1lcyB0aGF0IGFycml2ZSB0b28gc29vbiAoPCA4MCUgb2YgZnJhbWUgaW50ZXJ2YWwpXG4gICAgaWYgKGxhc3RXcml0dGVuVGltZSAhPT0gdW5kZWZpbmVkICYmIGN1cnJlbnRUaW1lIC0gbGFzdFdyaXR0ZW5UaW1lIDwgZnJhbWVJbnRlcnZhbCAqIDAuOCkgcmV0dXJuO1xuXG4gICAgY29uc3QgY3JvcHBlZCA9IEJ1ZmZlci5mcm9tKGJpdG1hcC5idWZmZXIsIGJpdG1hcC5ieXRlT2Zmc2V0LCBoZWlnaHQgKiB3aWR0aCAqIDQpO1xuXG4gICAgaWYgKGxhc3RXcml0dGVuVGltZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBzY2hlZHVsZUZyYW1lKGNyb3BwZWQpO1xuICAgICAgZHJvcFN0YXRzLndyb3RlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHRpbWVEZWx0YSA9IGN1cnJlbnRUaW1lIC0gbGFzdFdyaXR0ZW5UaW1lO1xuICAgICAgaWYgKHRpbWVEZWx0YSA8PSBmcmFtZUludGVydmFsICogMS4yKSB7XG4gICAgICAgIHNjaGVkdWxlRnJhbWUoY3JvcHBlZCk7XG4gICAgICAgIGRyb3BTdGF0cy53cm90ZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgZnJhbWVzVG9JbnNlcnQgPSBNYXRoLnJvdW5kKHRpbWVEZWx0YSAvIGZyYW1lSW50ZXJ2YWwpO1xuICAgICAgICBkcm9wU3RhdHMuZHJvcHBlZChmcmFtZXNUb0luc2VydCAtIDEpO1xuICAgICAgICBkcm9wU3RhdHMud3JvdGUoKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmcmFtZXNUb0luc2VydCAmJiB3cml0dGVuIDwgdG90YWw7IGkrKykge1xuICAgICAgICAgIHNjaGVkdWxlRnJhbWUoY3JvcHBlZCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgbGFzdFdyaXR0ZW5UaW1lID0gY3VycmVudFRpbWU7XG5cbiAgICBjb25zdCBuZXdQcm9ncmVzcyA9IE1hdGguZmxvb3IoKHdyaXR0ZW4gLyB0b3RhbCkgKiAxMDApO1xuICAgIGlmIChNYXRoLmFicyhuZXdQcm9ncmVzcyAtIHByb2dyZXNzKSA+IDEwKSB7XG4gICAgICBwcm9ncmVzcyA9IG5ld1Byb2dyZXNzO1xuICAgICAgd3JpdGVyLndyaXRlUHJvZ3Jlc3MocHJvZ3Jlc3MpO1xuICAgIH1cblxuICAgIGNvbnN0IGR1cmF0aW9uTXMgPSBkdXJhdGlvbiAqIDEwMDA7XG4gICAgaWYgKGN1cnJlbnRUaW1lID49IGR1cmF0aW9uTXMgLSBmcmFtZUludGVydmFsICogMC41IHx8IHdyaXR0ZW4gPj0gdG90YWwpIHtcbiAgICAgIHJlc29sdmVyPy4oKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3Qgd2luID0gYXdhaXQgbG9hZFdpbmRvdyh7XG4gICAgc291cmNlLFxuICAgIHJlbmRlcmVyOiBvcHRpb25zLFxuICAgIG9uQ3JlYXRlZDogYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKHdpdGhBdWRpbykge1xuICAgICAgICBhdWRpbyA9IGF3YWl0IHNldHVwQXVkaW9DYXB0dXJlKHtcbiAgICAgICAgICBlbmNvZGVyLFxuICAgICAgICAgIGdldFZpZGVvVGltZU1zOiAoKSA9PiBsYXN0V3JpdHRlblRpbWUgPz8gMCxcbiAgICAgICAgICBvbkVycm9yOiAoZSkgPT4gKGVuY29kZUVycm9yID8/PSBlKSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSxcbiAgfSk7XG4gIGNvbnN0IGNkcCA9IHdpbi53ZWJDb250ZW50cy5kZWJ1Z2dlcjtcbiAgY2RwLmF0dGFjaChcIjEuM1wiKTtcblxuICB3aW4ud2ViQ29udGVudHMuc3RvcFBhaW50aW5nKCk7XG4gIHdpbi53ZWJDb250ZW50cy5zZXRGcmFtZVJhdGUoZnBzKTtcbiAgd2luLndlYkNvbnRlbnRzLm9uKFwicGFpbnRcIiwgcGFpbnQpO1xuICB3aW4ud2ViQ29udGVudHMuc3RhcnRQYWludGluZygpO1xuXG4gIHRyeSB7XG4gICAgYXdhaXQgc3RhcnRTdGVnbyhjZHApO1xuICAgIGF3YWl0IG5ldyBQcm9taXNlPHZvaWQ+KChyLCBqKSA9PiAoW3Jlc29sdmVyLCByZWplY3Rlcl0gPSBbciwgal0pKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCBzdG9wU3RlZ28oY2RwKTtcbiAgICB3aW4ud2ViQ29udGVudHMub2ZmKFwicGFpbnRcIiwgcGFpbnQpO1xuICAgIGF3YWl0IGRpc3Bvc2VXaW5kb3cod2luKTtcbiAgICBhd2FpdCBhdWRpbz8udGVhcmRvd24oKTtcbiAgICBhd2FpdCBlbmNvZGVyLmZpbmlzaCgpO1xuICB9XG5cbiAgaWYgKGVuY29kZUVycm9yIHx8IHdyaXR0ZW4gPT09IDApIHtcbiAgICB0aHJvdyBlbmNvZGVFcnJvciA/PyBuZXcgRXJyb3IoXCJubyBmcmFtZXMgY2FwdHVyZWRcIik7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgZHJvcFNjb3JlID0gZHJvcFN0YXRzLmZpbmFsaXplKCk7XG4gICAgcmV0dXJuIHsgd3JpdHRlbiwgamFuazogZHJvcFNjb3JlLmphbmssIG91dEZpbGUgfTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8wMS5cblxuaW1wb3J0IHR5cGUgeyBXZWJGcmFtZU1haW4gfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuLi9iYXNlL2xvZ2dpbmdcIjtcbmltcG9ydCB7IHdpdGhUaW1lb3V0IH0gZnJvbSBcIi4uL2Jhc2UvdGltaW5nXCI7XG5cbmV4cG9ydCBjb25zdCBUSUNLX1NZTUJPTCA9IFwiX19wdXBfdGlja19fXCI7XG5jb25zdCBUQUcgPSBgW1RpY2tdYDtcblxuY29uc3QgSE9PSyA9IGAoZnVuY3Rpb24oKSB7XG4gIGlmICh3aW5kb3cuc2VsZiA9PT0gd2luZG93LnRvcCkgcmV0dXJuO1xuICBpZiAodHlwZW9mICR7VElDS19TWU1CT0x9ICE9PSAndW5kZWZpbmVkJykgcmV0dXJuO1xuXG4gIGNvbnN0IG9yaWcgPSB7XG4gICAgRGF0ZTogRGF0ZSxcbiAgICBkYXRlTm93OiBEYXRlLm5vdy5iaW5kKERhdGUpLFxuICAgIHBlcmZvcm1hbmNlTm93OiBwZXJmb3JtYW5jZS5ub3cuYmluZChwZXJmb3JtYW5jZSksXG4gICAgcmFmOiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUuYmluZCh3aW5kb3cpLFxuICAgIGNhZjogY2FuY2VsQW5pbWF0aW9uRnJhbWUuYmluZCh3aW5kb3cpLFxuICAgIHNldFRpbWVvdXQ6IHNldFRpbWVvdXQuYmluZCh3aW5kb3cpLFxuICAgIGNsZWFyVGltZW91dDogY2xlYXJUaW1lb3V0LmJpbmQod2luZG93KSxcbiAgICBzZXRJbnRlcnZhbDogc2V0SW50ZXJ2YWwuYmluZCh3aW5kb3cpLFxuICAgIGNsZWFySW50ZXJ2YWw6IGNsZWFySW50ZXJ2YWwuYmluZCh3aW5kb3cpLFxuICB9O1xuXG4gIGxldCBjdXJyTXMgPSAwO1xuICBsZXQgcmFmUXVldWUgPSBbXTtcbiAgY29uc3QgdGltZXJzID0ge307XG4gIGxldCBuZXh0SWQgPSAxO1xuICBjb25zdCBkYXRlT3JpZ2luID0gbmV3IG9yaWcuRGF0ZSgpO1xuICBjb25zdCBwZXJmT3JpZ2luID0gb3JpZy5wZXJmb3JtYW5jZU5vdygpO1xuXG4gIHBlcmZvcm1hbmNlLm5vdyA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gcGVyZk9yaWdpbiArIGN1cnJNczsgfTtcbiAgRGF0ZS5ub3cgPSBmdW5jdGlvbigpIHsgcmV0dXJuIGRhdGVPcmlnaW4uZ2V0VGltZSgpICsgY3Vyck1zOyB9O1xuICBEYXRlID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIE8gPSBvcmlnLkRhdGU7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHJldHVybiBuZXcgTyhkYXRlT3JpZ2luLmdldFRpbWUoKSArIGN1cnJNcyk7XG4gICAgcmV0dXJuIG5ldyAoRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQuYXBwbHkoTywgW251bGxdLmNvbmNhdChBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpKSkpKCk7XG4gIH07XG4gIERhdGUubm93ID0gZnVuY3Rpb24oKSB7IHJldHVybiBkYXRlT3JpZ2luLmdldFRpbWUoKSArIGN1cnJNczsgfTtcbiAgRGF0ZS5wYXJzZSA9IG9yaWcuRGF0ZS5wYXJzZTtcbiAgRGF0ZS5VVEMgPSBvcmlnLkRhdGUuVVRDO1xuICBEYXRlLnByb3RvdHlwZSA9IG9yaWcuRGF0ZS5wcm90b3R5cGU7XG5cbiAgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSA9IGZ1bmN0aW9uKGNiKSB7XG4gICAgY29uc3QgaWQgPSBuZXh0SWQrKztcbiAgICByYWZRdWV1ZS5wdXNoKHsgaWQsIGNiIH0pO1xuICAgIHJldHVybiBpZDtcbiAgfTtcbiAgd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lID0gZnVuY3Rpb24oaWQpIHtcbiAgICByYWZRdWV1ZSA9IHJhZlF1ZXVlLmZpbHRlcigocikgPT4gci5pZCAhPT0gaWQpO1xuICB9O1xuXG4gIHdpbmRvdy5zZXRUaW1lb3V0ID0gZnVuY3Rpb24oY2IsIGRlbGF5LCAuLi5hcmdzKSB7XG4gICAgY29uc3QgaWQgPSBuZXh0SWQrKztcbiAgICB0aW1lcnNbaWRdID0geyB0eXBlOiAndGltZW91dCcsIGNiLCBkZWxheTogZGVsYXkgfHwgMCwgbmV4dDogY3Vyck1zICsgKGRlbGF5IHx8IDApLCBhcmdzIH07XG4gICAgcmV0dXJuIGlkO1xuICB9O1xuICB3aW5kb3cuY2xlYXJUaW1lb3V0ID0gZnVuY3Rpb24oaWQpIHsgZGVsZXRlIHRpbWVyc1tpZF07IH07XG5cbiAgd2luZG93LnNldEludGVydmFsID0gZnVuY3Rpb24oY2IsIGRlbGF5LCAuLi5hcmdzKSB7XG4gICAgY29uc3QgaWQgPSBuZXh0SWQrKztcbiAgICBjb25zdCBkID0gTWF0aC5tYXgoZGVsYXkgfHwgMCwgMSk7XG4gICAgdGltZXJzW2lkXSA9IHsgdHlwZTogJ2ludGVydmFsJywgY2IsIGRlbGF5OiBkLCBuZXh0OiBjdXJyTXMgKyBkLCBhcmdzIH07XG4gICAgcmV0dXJuIGlkO1xuICB9O1xuICB3aW5kb3cuY2xlYXJJbnRlcnZhbCA9IGZ1bmN0aW9uKGlkKSB7IGRlbGV0ZSB0aW1lcnNbaWRdOyB9O1xuXG4gIGZ1bmN0aW9uIHByb2Nlc3ModGltZXN0YW1wTXMpIHtcbiAgICBjdXJyTXMgPSB0aW1lc3RhbXBNcztcbiAgICBkb2N1bWVudC5nZXRBbmltYXRpb25zKCkuZm9yRWFjaChhID0+IHtcbiAgICAgIGEucGF1c2UoKTtcbiAgICAgIGEuY3VycmVudFRpbWUgPSBjdXJyTXM7XG4gICAgfSk7XG4gICAgY29uc3QgaWRzID0gT2JqZWN0LmtleXModGltZXJzKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlkcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgdCA9IHRpbWVyc1tpZHNbaV1dO1xuICAgICAgaWYgKCF0KSBjb250aW51ZTtcbiAgICAgIHdoaWxlICh0Lm5leHQgPD0gY3Vyck1zKSB7XG4gICAgICAgIGlmICh0eXBlb2YgdC5jYiA9PT0gJ3N0cmluZycpIGV2YWwodC5jYik7IGVsc2UgdC5jYi5hcHBseSh1bmRlZmluZWQsIHQuYXJncyk7XG4gICAgICAgIGlmICh0LnR5cGUgPT09ICd0aW1lb3V0JykgeyBkZWxldGUgdGltZXJzW2lkc1tpXV07IGJyZWFrOyB9XG4gICAgICAgIHQubmV4dCArPSB0LmRlbGF5O1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCByYWZzID0gcmFmUXVldWUuc3BsaWNlKDApO1xuICAgIGZvciAobGV0IGogPSAwOyBqIDwgcmFmcy5sZW5ndGg7IGorKykge1xuICAgICAgcmFmc1tqXS5jYihjdXJyTXMpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGVqZWN0KCkge1xuICAgIERhdGUgPSBvcmlnLkRhdGU7XG4gICAgcGVyZm9ybWFuY2Uubm93ID0gb3JpZy5wZXJmb3JtYW5jZU5vdztcbiAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gb3JpZy5yYWY7XG4gICAgd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lID0gb3JpZy5jYWY7XG4gICAgd2luZG93LnNldFRpbWVvdXQgPSBvcmlnLnNldFRpbWVvdXQ7XG4gICAgd2luZG93LmNsZWFyVGltZW91dCA9IG9yaWcuY2xlYXJUaW1lb3V0O1xuICAgIHdpbmRvdy5zZXRJbnRlcnZhbCA9IG9yaWcuc2V0SW50ZXJ2YWw7XG4gICAgd2luZG93LmNsZWFySW50ZXJ2YWwgPSBvcmlnLmNsZWFySW50ZXJ2YWw7XG4gICAgZGVsZXRlIHdpbmRvdy4ke1RJQ0tfU1lNQk9MfTtcbiAgfVxuXG4gIHdpbmRvdy4ke1RJQ0tfU1lNQk9MfSA9IHsgcHJvY2VzczogcHJvY2VzcywgZWplY3Q6IGVqZWN0IH07XG59KSgpO2A7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB0aWNrKGZyYW1lOiBXZWJGcmFtZU1haW4gfCB1bmRlZmluZWQsIHRpbWVzdGFtcE1zOiBudW1iZXIpIHtcbiAgaWYgKCFmcmFtZSkgcmV0dXJuO1xuICB0cnkge1xuICAgIGF3YWl0IHdpdGhUaW1lb3V0KFxuICAgICAgZnJhbWUuZXhlY3V0ZUphdmFTY3JpcHQoYCR7SE9PS30gJHtUSUNLX1NZTUJPTH0ucHJvY2Vzcygke3RpbWVzdGFtcE1zfSlgKSxcbiAgICAgIDVfMDAwLFxuICAgICAgXCJ0aWNrLmV4ZWN1dGVKYXZhU2NyaXB0XCIsXG4gICAgKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIC8vIE5PVEUoQXV0b2tha2EpOlxuICAgIC8vIFNpZGUtZWZmZWN0cyBtYXkgdGhyb3cgKGUuZy4gdW5jYXVnaHQgZXJyb3Igb24gYW5pbWF0aW9uIGNhbGxiYWNrKSwgaWdub3JlIHRvIGxldCByZWNvcmRlciBjb250aW51ZVxuICAgIC8vIFRoZSBlcnJvcnMgd2lsbCBiZSBkaXNwYXRjaGVkIHRvIHdpbmRvdyBjb25zb2xlLCBqdXN0IGxpa2UgaG93IHJlbmRlci50cyB3b3Jrc1xuICAgIGxvZ2dlci5lcnJvcihUQUcsIFwidGljayBmYWlsZWQ6XCIsIGUpO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAzLzEzLlxuXG5pbXBvcnQge1xuICB0eXBlIEJyb3dzZXJXaW5kb3csXG4gIHR5cGUgRXZlbnQsXG4gIHR5cGUgTmF0aXZlSW1hZ2UsXG4gIHR5cGUgUmVjdGFuZ2xlLFxuICB0eXBlIFNpemUsXG4gIHR5cGUgV2ViQ29udGVudHNQYWludEV2ZW50UGFyYW1zLFxufSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IGFkdmFuY2VWaXJ0dWFsVGltZSwgcGF1c2VWaXJ0dWFsVGltZSwgcmVzaXplRHJhd2FibGUgfSBmcm9tIFwiLi4vYmFzZS9jZHBcIjtcbmltcG9ydCB7IEVuY29kZXJQaXBlbGluZSB9IGZyb20gXCIuLi9iYXNlL2VuY29kZXIvcGlwZWxpbmVcIjtcbmltcG9ydCB7IHNpemVFcXVhbHMgfSBmcm9tIFwiLi4vYmFzZS9pbWFnZVwiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4uL2Jhc2UvbG9nZ2luZ1wiO1xuaW1wb3J0IHsgSXBjV3JpdGVyLCB0eXBlIElwY0RvbmVQYXlsb2FkIH0gZnJvbSBcIi4vaXBjXCI7XG5pbXBvcnQgdHlwZSB7IFJlbmRlck9wdGlvbnMgfSBmcm9tIFwiLi9zY2hlbWFcIjtcbmltcG9ydCB7IGRlY29kZVN0ZWdvLCBzd2FwQnVmZmVyIH0gZnJvbSBcIi4vc3RlZ29cIjtcbmltcG9ydCB7IHRpY2sgfSBmcm9tIFwiLi90aWNrXCI7XG5pbXBvcnQgeyBkaXNwb3NlV2luZG93LCBsb2FkV2luZG93IH0gZnJvbSBcIi4vd2luZG93XCI7XG5cbmNvbnN0IFRBRyA9IFwiW1Nob290XVwiO1xuXG5pbnRlcmZhY2UgUGFpbnRPcHRpb25zIHtcbiAgc291cmNlOiBzdHJpbmc7XG4gIHdpbjogQnJvd3NlcldpbmRvdztcbiAgc2l6ZTogU2l6ZTtcbiAgbXM6IG51bWJlcjtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcGFpbnQoeyBzb3VyY2UsIHdpbiwgc2l6ZSwgbXMgfTogUGFpbnRPcHRpb25zKTogUHJvbWlzZTxCdWZmZXI+IHtcbiAgbGV0IGxhc3RUczogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICBsZXQgbGFnZ3kgPSAwO1xuICBjb25zdCBjZHAgPSB3aW4ud2ViQ29udGVudHMuZGVidWdnZXI7XG4gIGNvbnN0IGZyYW1lU2l6ZTogU2l6ZSA9IHsgd2lkdGg6IHNpemUud2lkdGgsIGhlaWdodDogc2l6ZS5oZWlnaHQgKyAxIH07XG4gIGNvbnN0IGludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgIGxvZ2dlci53YXJuKFRBRywgYCR7c291cmNlfSByZW5kZXIgaXMgZXh0cmVtZWx5IHNsb3cgQCAke21zfSwgY3VycmVudDogJHtsYXN0VHN9IHdpdGggJHtsYWdneX0gcmVwZWF0c2ApO1xuICAgIHdpbi53ZWJDb250ZW50cy5pbnZhbGlkYXRlKCk7XG4gIH0sIDEwMDApO1xuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBuZXcgUHJvbWlzZTxCdWZmZXI+KChyZXNvbHZlKSA9PiB7XG4gICAgICBjb25zdCBoYW5kbGVyID0gKF9lOiBFdmVudDxXZWJDb250ZW50c1BhaW50RXZlbnRQYXJhbXM+LCBfZDogUmVjdGFuZ2xlLCBpbWFnZTogTmF0aXZlSW1hZ2UpID0+IHtcbiAgICAgICAgY29uc3QgaW1hZ2VTaXplID0gaW1hZ2UuZ2V0U2l6ZSgpO1xuICAgICAgICBpZiAoIXNpemVFcXVhbHMoaW1hZ2VTaXplLCBmcmFtZVNpemUpKSB7XG4gICAgICAgICAgLy8gTk9URShBdXRva2FrYSk6IFdlIG11c3QgZW5zdXJlIGZyYW1lIGlzIHJlYWR5IG9uIGVsZWN0cm9uIHY0MStcbiAgICAgICAgICByZXNpemVEcmF3YWJsZShjZHAsIGZyYW1lU2l6ZSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGJpdG1hcCA9IGltYWdlLnRvQml0bWFwKCk7XG4gICAgICAgIGNvbnN0IHRzID0gZGVjb2RlU3RlZ28oYml0bWFwLCBpbWFnZVNpemUpO1xuICAgICAgICBpZiAodHMgPT09IHVuZGVmaW5lZCB8fCBNYXRoLmFicyh0cyAtIG1zKSA+IDEpIHtcbiAgICAgICAgICBsYXN0VHMgPSB0cztcbiAgICAgICAgICBsYWdneSsrO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB3aW4ud2ViQ29udGVudHMub2ZmKFwicGFpbnRcIiwgaGFuZGxlcik7XG4gICAgICAgIHJlc29sdmUoQnVmZmVyLmZyb20oYml0bWFwLmJ1ZmZlciwgYml0bWFwLmJ5dGVPZmZzZXQsIHNpemUuaGVpZ2h0ICogc2l6ZS53aWR0aCAqIDQpKTtcbiAgICAgICAgd2luLndlYkNvbnRlbnRzLnN0b3BQYWludGluZygpO1xuICAgICAgfTtcbiAgICAgIHdpbi53ZWJDb250ZW50cy5vbihcInBhaW50XCIsIGhhbmRsZXIpO1xuICAgICAgd2luLndlYkNvbnRlbnRzLnN0YXJ0UGFpbnRpbmcoKTtcbiAgICB9KTtcbiAgfSBmaW5hbGx5IHtcbiAgICBjbGVhckludGVydmFsKGludGVydmFsKTtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2hvb3Qod3JpdGVyOiBJcGNXcml0ZXIsIHNvdXJjZTogc3RyaW5nLCBvcHRpb25zOiBSZW5kZXJPcHRpb25zKTogUHJvbWlzZTxJcGNEb25lUGF5bG9hZD4ge1xuICBjb25zdCB7IGZwcywgd2lkdGgsIGhlaWdodCwgZHVyYXRpb24sIHdpdGhBdWRpbywgb3V0RmlsZSwgZGlzYWJsZUh3Q29kZWMgfSA9IG9wdGlvbnM7XG4gIGlmICh3aXRoQXVkaW8pIGxvZ2dlci53YXJuKFRBRywgXCJhdWRpbyB3aWxsIGJlIGlnbm9yZWQgb24gdGhpcyBtb2RlXCIpO1xuXG4gIGNvbnN0IHRJbml0ID0gcGVyZm9ybWFuY2Uubm93KCk7XG4gIGNvbnN0IHdpblAgPSBsb2FkV2luZG93KHsgc291cmNlLCByZW5kZXJlcjogb3B0aW9ucyB9KTtcbiAgYXdhaXQgdXNpbmcgcGlwZWxpbmUgPSBhd2FpdCBFbmNvZGVyUGlwZWxpbmUuY3JlYXRlKHsgd2lkdGgsIGhlaWdodCwgZnBzLCBvdXRGaWxlLCB3aXRoQXVkaW8sIGRpc2FibGVId0NvZGVjIH0pO1xuICBjb25zdCB3aW4gPSBhd2FpdCB3aW5QO1xuICBsb2dnZXIuZGVidWcoVEFHLCBcImluaXQgZG9uZTpcIiwgeyBzb3VyY2UsIGNvc3Q6IHBlcmZvcm1hbmNlLm5vdygpIC0gdEluaXQgfSk7XG5cbiAgY29uc3QgdG90YWwgPSBNYXRoLmNlaWwoZnBzICogZHVyYXRpb24pO1xuICBjb25zdCBmcmFtZUludGVydmFsID0gMTAwMCAvIGZwcztcblxuICBsZXQgd3JpdHRlbiA9IDA7XG4gIGxldCBwcm9ncmVzcyA9IDA7XG4gIGxldCBlbmNvZGVFcnJvcjogRXJyb3IgfCB1bmRlZmluZWQ7XG4gIGNvbnN0IGNkcCA9IHdpbi53ZWJDb250ZW50cy5kZWJ1Z2dlcjtcbiAgY29uc3QgbWFpbiA9IHdpbi53ZWJDb250ZW50cy5tYWluRnJhbWU7XG4gIGNvbnN0IGlmcmFtZSA9IG1haW4uZnJhbWVzWzBdO1xuICB0cnkge1xuICAgIGNkcC5hdHRhY2goXCIxLjNcIik7XG5cbiAgICB3aW4ud2ViQ29udGVudHMuc2V0RnJhbWVSYXRlKGZwcyk7XG4gICAgd2luLndlYkNvbnRlbnRzLnN0b3BQYWludGluZygpO1xuICAgIGF3YWl0IHBhdXNlVmlydHVhbFRpbWUoY2RwKTtcblxuICAgIGNvbnN0IHQyID0gcGVyZm9ybWFuY2Uubm93KCk7XG4gICAgY29uc3QgdXBkYXRlZCA9IFByb21pc2UuYWxsKFt0aWNrKGlmcmFtZSwgMCksIHN3YXBCdWZmZXIoY2RwLCAwKV0pO1xuICAgIGF3YWl0IGFkdmFuY2VWaXJ0dWFsVGltZShjZHAsIGZyYW1lSW50ZXJ2YWwpO1xuICAgIGF3YWl0IHVwZGF0ZWQ7XG4gICAgYXdhaXQgcGFpbnQoeyBzb3VyY2UsIHdpbiwgc2l6ZTogeyB3aWR0aCwgaGVpZ2h0IH0sIG1zOiAwIH0pO1xuICAgIGxvZ2dlci5kZWJ1ZyhUQUcsIFwiZmlyc3QgZnJhbWU6XCIsIHsgc291cmNlLCBjb3N0OiBwZXJmb3JtYW5jZS5ub3coKSAtIHQyIH0pO1xuXG4gICAgZm9yIChsZXQgZnJhbWUgPSAwOyBmcmFtZSA8IHRvdGFsOyBmcmFtZSsrKSB7XG4gICAgICBjb25zdCBmcmFtZU1zID0gKGZyYW1lICsgMSkgKiBmcmFtZUludGVydmFsO1xuXG4gICAgICBjb25zdCB1cGRhdGVkID0gUHJvbWlzZS5hbGwoW3RpY2soaWZyYW1lLCBmcmFtZU1zKSwgc3dhcEJ1ZmZlcihjZHAsIGZyYW1lTXMpXSk7XG4gICAgICBhd2FpdCBhZHZhbmNlVmlydHVhbFRpbWUoY2RwLCBmcmFtZUludGVydmFsKTtcbiAgICAgIGF3YWl0IHVwZGF0ZWQ7XG4gICAgICBjb25zdCBiaXRtYXAgPSBhd2FpdCBwYWludCh7IHNvdXJjZSwgd2luLCBzaXplOiB7IHdpZHRoLCBoZWlnaHQgfSwgbXM6IGZyYW1lTXMgfSk7XG4gICAgICAvLyBLaWNrIG9mZiBlbmNvZGUgd2l0aG91dCBhd2FpdGluZzsgcGlwZWxpbmUgbGltaXRlciBzZXJpYWxpemVzIGludGVybmFsbHkuXG4gICAgICAvLyBFbmNvZGUgcnVucyBjb25jdXJyZW50IHdpdGggbmV4dCBmcmFtZSdzIENEUC9wYWludCBzZXR1cC5cbiAgICAgIHBpcGVsaW5lLmVuY29kZUJHUkEoYml0bWFwKS5jYXRjaCgoZSkgPT4gKGVuY29kZUVycm9yID8/PSBlKSk7XG4gICAgICB3cml0dGVuKys7XG4gICAgICBpZiAoZW5jb2RlRXJyb3IpIHRocm93IGVuY29kZUVycm9yO1xuXG4gICAgICBjb25zdCBuZXdQcm9ncmVzcyA9IE1hdGguZmxvb3IoKHdyaXR0ZW4gLyB0b3RhbCkgKiAxMDApO1xuICAgICAgaWYgKE1hdGguYWJzKG5ld1Byb2dyZXNzIC0gcHJvZ3Jlc3MpID4gMTApIHtcbiAgICAgICAgcHJvZ3Jlc3MgPSBuZXdQcm9ncmVzcztcbiAgICAgICAgd3JpdGVyLndyaXRlUHJvZ3Jlc3MocHJvZ3Jlc3MpO1xuICAgICAgfVxuICAgIH1cbiAgfSBmaW5hbGx5IHtcbiAgICB3aW4ud2ViQ29udGVudHMuc3RvcFBhaW50aW5nKCk7XG4gICAgY2RwLmRldGFjaCgpO1xuICAgIGF3YWl0IGRpc3Bvc2VXaW5kb3cod2luKTtcbiAgICBhd2FpdCBwaXBlbGluZS5maW5pc2goKTtcbiAgfVxuXG4gIGlmIChlbmNvZGVFcnJvcikgdGhyb3cgZW5jb2RlRXJyb3I7XG4gIGlmICh3cml0dGVuID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwibm8gZnJhbWVzIGNhcHR1cmVkXCIpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB7IHdyaXR0ZW4sIGphbms6IDAsIG91dEZpbGUgfTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMS8zMC5cblxuaW1wb3J0IHsgb2sgfSBmcm9tIFwiYXNzZXJ0XCI7XG5pbXBvcnQgeyBhcHAgfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IG1rZGlyIH0gZnJvbSBcImZzL3Byb21pc2VzXCI7XG5pbXBvcnQgeyBkaXJuYW1lIH0gZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IHN0YXJ0RWxlY3Ryb25DcmFzaFJlcG9ydGVyIH0gZnJvbSBcIi4vYmFzZS9jcmFzaFwiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4vYmFzZS9sb2dnaW5nXCI7XG5pbXBvcnQgeyBtYWtlQ0xJIH0gZnJvbSBcIi4vY29tbW9uXCI7XG5pbXBvcnQgeyBJcGNXcml0ZXIgfSBmcm9tIFwiLi9yZW5kZXJlci9pcGNcIjtcbmltcG9ydCB7IHNldHVwUHVwUHJvdG9jb2wgfSBmcm9tIFwiLi9yZW5kZXJlci9wcm90b2NvbFwiO1xuaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSBcIi4vcmVuZGVyZXIvcmVuZGVyXCI7XG5pbXBvcnQgeyBkZWZhdWx0UmVuZGVyT3B0aW9ucyB9IGZyb20gXCIuL3JlbmRlcmVyL3NjaGVtYVwiO1xuaW1wb3J0IHsgc2hvb3QgfSBmcm9tIFwiLi9yZW5kZXJlci9zaG9vdFwiO1xuXG5jb25zdCBUQUcgPSBcIltBcHBdXCI7XG5cbnN0YXJ0RWxlY3Ryb25DcmFzaFJlcG9ydGVyKCk7XG5cbmZ1bmN0aW9uIHByaW50RmVhdHVyZXMoKSB7XG4gIGxvZ2dlci5kZWJ1ZyhUQUcsIFwiZ3B1IGZlYXR1cmVzOlwiLCBhcHAuZ2V0R1BVRmVhdHVyZVN0YXR1cygpKTtcbn1cblxuYXBwLmRvY2s/LmhpZGUoKTtcbmFwcC5vbihcIndpbmRvdy1hbGwtY2xvc2VkXCIsICgpID0+IHt9KTtcblxubWFrZUNMSSh7XG4gIG5hbWU6IFwiYXBwXCIsXG4gIGRlZmF1bHRzOiB7XG4gICAgLi4uZGVmYXVsdFJlbmRlck9wdGlvbnMsXG4gICAgd2l0aEF1ZGlvOiBmYWxzZSxcbiAgICBkZXRlcm1pbmlzdGljOiBmYWxzZSxcbiAgICB1c2VJbm5lclByb3h5OiBmYWxzZSxcbiAgICBkaXNhYmxlR3B1OiBmYWxzZSxcbiAgICBkaXNhYmxlSHdDb2RlYzogZmFsc2UsXG4gICAgd2luZG93VG9sZXJhbnQ6IGZhbHNlLFxuICB9LFxuICBydW46IGFzeW5jIChzb3VyY2UsIG9wdGlvbnMpID0+IHtcbiAgICBjb25zdCBleGl0ID0gKGNvZGU6IG51bWJlcikgPT4ge1xuICAgICAgYXBwLnF1aXQoKTtcbiAgICAgIHByb2Nlc3MuZXhpdChjb2RlKTtcbiAgICB9O1xuICAgIHByb2Nlc3Mub25jZShcIlNJR1RFUk1cIiwgKCkgPT4gZXhpdCgxNDMpKTtcbiAgICBwcm9jZXNzLm9uY2UoXCJTSUdJTlRcIiwgKCkgPT4gZXhpdCgxMzApKTtcbiAgICBwcm9jZXNzLm9uY2UoXCJleGl0XCIsIChjKSA9PiBleGl0KGMpKTtcbiAgICBvayhwcm9jZXNzLnNlbmQsIFwiaXBjIGNoYW5uZWwgbWlzc2luZyDigJQgc3Bhd24gd2l0aCBzdGRpb1szXT0naXBjJ1wiKTtcbiAgICBjb25zdCBpcGMgPSBuZXcgSXBjV3JpdGVyKCk7XG4gICAgdHJ5IHtcbiAgICAgIGFwcC5vbihcImdwdS1pbmZvLXVwZGF0ZVwiLCBwcmludEZlYXR1cmVzKTtcbiAgICAgIGF3YWl0IGFwcC53aGVuUmVhZHkoKTtcbiAgICAgIHNldHVwUHVwUHJvdG9jb2woKTtcbiAgICAgIHByaW50RmVhdHVyZXMoKTtcbiAgICAgIGZvciAoY29uc3Qgb3V0IG9mIG9wdGlvbnMub3V0RmlsZS5zcGxpdChcIixcIikpIHtcbiAgICAgICAgYXdhaXQgbWtkaXIoZGlybmFtZShvdXQpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGFjdGlvbiA9IG9wdGlvbnMuZGV0ZXJtaW5pc3RpYyA/IHNob290IDogcmVuZGVyO1xuICAgICAgYXdhaXQgaXBjLndyaXRlRG9uZShhd2FpdCBhY3Rpb24oaXBjLCBzb3VyY2UsIG9wdGlvbnMpKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zdCBlcnJvciA9IGUgYXMgRXJyb3I7XG4gICAgICBjb25zdCBtID0gZXJyb3Iuc3RhY2sgPz8gZXJyb3IubWVzc2FnZSA/PyBTdHJpbmcoZSA/PyBcInVua25vd24gZXJyb3JcIik7XG4gICAgICBhd2FpdCBpcGMud3JpdGVFcnJvcihtKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgYXBwLmV4aXQoKTtcbiAgICB9XG4gIH0sXG59KTtcbiJdfQ==
|