pup-recorder 0.2.7 → 0.2.8

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.
@@ -0,0 +1,92 @@
1
+ import'source-map-support/register.js';import {createRequire}from'module';import {dirname,join}from'path';import {Log,FormatContext,FFmpegError,Codec,CodecContext,Rational,Packet,Frame,FilterGraph,Filter,FilterInOut,FF_DECODER_PNG,SoftwareScaleContext,AV_PIX_FMT_YUVA420P as AV_PIX_FMT_YUVA420P$1,SWS_BILINEAR,AV_PIX_FMT_BGRA}from'node-av';import {AV_LOG_ERROR,AV_LOG_WARNING,AV_PIX_FMT_YUVA420P,FF_ENCODER_LIBX265,FF_ENCODER_AAC,AV_SAMPLE_FMT_FLTP,AV_CODEC_FLAG_GLOBAL_HEADER,AVERROR_EAGAIN,AVERROR_EOF,AV_CHANNEL_LAYOUT_STEREO,AV_SAMPLE_FMT_FLT}from'node-av/constants';import {spawn}from'child_process';import k from'zod';import {ok}from'assert';import {randomUUID}from'crypto';import {rmSync}from'fs';import {mkdir}from'fs/promises';import {tmpdir,platform}from'os';import br from'tree-kill';import nr from'electron';import {HardwareContext}from'node-av/api';import {EventEmitter}from'events';import {createServer}from'net';import lr from'puppeteer';var st=Object.create;var re=Object.defineProperty;var at=Object.getOwnPropertyDescriptor;var j=(i,e)=>(e=Symbol[i])?e:Symbol.for("Symbol."+i),R=i=>{throw TypeError(i)};var xe=(i,e,t)=>e in i?re(i,e,{enumerable:true,configurable:true,writable:true,value:t}):i[e]=t;var ve=i=>[,,,st(null)],ye=["class","method","getter","setter","accessor","field","value","get","set"],U=i=>i!==void 0&&typeof i!="function"?R("Function expected"):i,ct=(i,e,t,r,o)=>({kind:ye[i],name:e,metadata:r,addInitializer:n=>t._?R("Already initialized"):o.push(U(n||null))}),ie=(i,e)=>xe(e,j("metadata"),i[3]),Pe=(i,e,t,r)=>{for(var o=0,n=i[e>>1],s=n&&n.length;o<s;o++)n[o].call(t);return r},L=(i,e,t,r,o,n)=>{var a,c,d,h,u=e&7,p=false,w=false,P=2,x=ye[u+5],v=i[P]||(i[P]=[]),_=((o=o.prototype),at(o,t));for(var b=r.length-1;b>=0;b--)d=ct(u,t,c={},i[3],v),(d.static=p,d.private=w,h=d.access={has:g=>t in g},(h.get=g=>g[t]),u>2),a=(0, r[b])(_[x],d),c._=1,U(a)&&(_[x]=a);return _&&re(o,t,_),o},Fe=(i,e,t)=>xe(i,e+"",t);var y=(i,e,t)=>{if(e!=null){typeof e!="object"&&typeof e!="function"&&R("Object expected");var r,o;t&&(r=e[j("asyncDispose")]),r===void 0&&(r=e[j("dispose")],t&&(o=r)),typeof r!="function"&&R("Object not disposable"),o&&(r=function(){try{o.call(this);}catch(n){return Promise.reject(n)}}),i.push([t,r,e]);}else t&&i.push([t]);return e},S=(i,e,t)=>{var r=typeof SuppressedError=="function"?SuppressedError:function(s,a,c,d){return d=Error(c),d.name="SuppressedError",d.error=s,d.suppressed=a,d},o=s=>e=t?new r(s,e,"An error was suppressed during disposal"):(t=true,s),n=s=>{for(;s=i.pop();)try{var a=s[1]&&s[1].call(s[2]);if(s[0])return Promise.resolve(a).then(n,c=>(o(c),n()))}catch(c){o(c);}if(t)throw e};return n()};function Ee(i,e,t){try{return e(process.env[i])}catch{return t}}function ke(i){if(typeof i=="number")return i;let e=Number(i);if(Number.isNaN(e))throw new Error(`Value ${i} is not a valid number`);return e}function Fr(i){return typeof i=="string"?i:String(i)}var ft=createRequire(import.meta.url),V=process.env,H=Ee("PUP_LOG_LEVEL",ke,2),Se=V.PUP_USE_INNER_PROXY==="1",Ae=V.PUP_DISABLE_GPU==="1",Ie=V.PUP_DETERMINISTIC==="1",ht=dirname(ft.resolve("pup-recorder/package.json")),Te=join(ht,"dist","app.cjs"),Rr=V.PUP_IPC_SOCKET,Re=V.PUP_EXPERIMENTAL_PUPPETEER==="1";var ne="<pup@debug>",se="<pup@info>",ae="<pup@warn>",ce="<pup@error>",ue="<pup@fatal>";function G(i,e){return function(...t){let r=t.map(o=>o instanceof Error?o.stack??String(o):o);return i.call(this,...r)}}var Oe,Ce,De,Le,Me,O;Me=[G],Le=[G],De=[G],Ce=[G],Oe=[G];var E=class{constructor(e=H){this._level=e;Pe(O,5,this);Fe(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,r=e.info??console.info,o=e.warn??console.warn,n=e.error??console.error,s=this._level;this._impl={debug:s>=3?t:void 0,info:s>=2?r:void 0,warn:s>=1?o:void 0,error:s>=0?n:void 0};}debug(...e){this.impl?.debug?.(ne,...e);}info(...e){this.impl?.info?.(se,...e);}warn(...e){this.impl?.warn?.(ae,...e);}error(...e){this.impl?.error?.(ce,...e);}fatal(...e){this.impl?.error?.(ue,...e),process.exit(1);}dispatch(e){let t=e.trimEnd();t.startsWith(ne)?this.debug(t.slice(ne.length+1)):t.startsWith(se)?this.info(t.slice(se.length+1)):t.startsWith(ae)?this.warn(t.slice(ae.length+1)):t.startsWith(ce)?this.error(t.slice(ce.length+1)):this.info(t);}attach(e,t){return new Promise((r,o)=>{this.debug(`${t}.attach`);let n="",s=a=>{let c=a.toString();c.startsWith(ue)?n+=c.slice(ue.length+1):this.dispatch(c);};e.stderr?.on("data",s),e.stdout?.on("data",s),e.on("message",s).on("error",a=>{n+=a.message,e.kill();}).once("close",(a,c)=>{a||c||n?(n||=`command failed: ${e.spawnargs.join(" ")}`,this.debug(`${t}.close`,{code:a,signal:c,fatal:n}),o(new Error(n))):(this.debug(`${t}.close`),r());}).on("unhandledRejection",a=>{this.error(`${t}.unhandled`,a);}).on("uncaughtExceptionMonitor",a=>{this.error(`${t}.unhandled`,a);});})}};O=ve(),L(O,1,"debug",Me,E),L(O,1,"info",Le,E),L(O,1,"warn",De,E),L(O,1,"error",Ce,E),L(O,1,"fatal",Oe,E),ie(O,E);var m=new E;Log.setCallback((i,e)=>{let t=e.trimEnd();t&&(i<=AV_LOG_ERROR?m.error(t):i<=AV_LOG_WARNING&&m.warn(t));});function Vr(i,e){return (...t)=>{try{let r=i(...t);return r instanceof Promise?r.catch(()=>e):r}catch{return e}}}var pe="--pup-priv-args";function Wr(){let i=process.argv,e=i.find(r=>r.startsWith(pe));if(!e)return m.debug("procargv",i),process.argv;let t=["exec",...i.slice(-1)];return e=Buffer.from(e.split("=")[1],"base64").toString(),t.push(...JSON.parse(e)),m.debug("pupargs",t),t}function Ne(i,e){let t=i.split(" ").filter(s=>s.length),[r,...o]=t;if(!r)throw new Error("empty command");let n=spawn(r,o,{stdio:"inherit",...e});return {process:n,wait:m.attach(n,r)}}var xt=1920,vt=1080,yt=30,Pt=5,Ft="output.mp4",Xr=k.object({duration:k.number().describe("Duration in seconds"),width:k.number().describe("Video width"),height:k.number().describe("Video height"),fps:k.number().describe("Frames per second"),withAudio:k.boolean().describe("Capture and encode audio"),outFile:k.string().describe("Output mp4 file path"),useInnerProxy:k.boolean().describe("Use bilibili inner proxy for resource access"),deterministic:k.boolean().describe("Render by frame rather than recording")}),Be={width:xt,height:vt,fps:yt,duration:Pt,outFile:Ft,withAudio:false,useInnerProxy:Se,deterministic:Ie};var W=class{constructor(e){this.maxConcurrency=e;}maxConcurrency;_active=0;_queue=[];_ended=false;get active(){return this._active}get pending(){return this._queue.length}get stats(){return `active: ${this.active}, pending: ${this.pending}`}async schedule(e){if(this._ended)throw new Error("ended");return new Promise((t,r)=>{let o=()=>{this._active++,e().then(n=>{this._active--,t(n),this.next();}).catch(n=>{this._active--,r(n),this.next();});};this._queue.push(o),this.next();})}async end(){if(!this._ended)for(this._ended=true;this._active>0||this.pending>0;)await new Promise(e=>setTimeout(e,50));}next(){this._active<this.maxConcurrency&&this._queue.shift()?.();}};var z=class{_ctx;_opened=false;constructor(e,t){this._ctx=new FormatContext,FFmpegError.throwIfError(this._ctx.allocOutputContext2(null,t??null,e),"allocOutputContext2");}addStream(e,t){let r=this._ctx.newStream(null);return r.timeBase=e.timeBase,FFmpegError.throwIfError(r.codecpar.fromContext(e),"codecpar.fromContext"),t&&(r.codecpar.codecTag=t),r}async open(){this._opened||(FFmpegError.throwIfError(await this._ctx.openOutput(),"openOutput"),FFmpegError.throwIfError(await this._ctx.writeHeader(null),"writeHeader"),this._opened=true);}async writePacket(e){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 Ct={[AV_SAMPLE_FMT_FLT]:"flt",[AV_SAMPLE_FMT_FLTP]:"fltp"},q=class i{_ctx;_stream;_pkt;_outRate;_outFmt;_frameSize;_filterFrame;_graph;_bufSrc;_bufSink;_inRate;_pts=0n;constructor(e,t,r){this._ctx=e,this._stream=t,this._outRate=e.sampleRate,this._outFmt=r,this._frameSize=e.frameSize,this._pkt=new Packet,this._pkt.alloc(),this._filterFrame=new Frame,this._filterFrame.alloc();}static async create(e){let t=Codec.findEncoderByName(e.codecName);if(!t)throw new Error(`Audio encoder not found: ${e.codecName}`);let r=new CodecContext;r.allocContext3(t),r.codecId=t.id,r.sampleFormat=e.outSampleFmt,r.sampleRate=e.outSampleRate,r.channelLayout=AV_CHANNEL_LAYOUT_STEREO,r.timeBase=new Rational(1,e.outSampleRate),r.bitRate=BigInt(e.bitrate),e.globalHeader&&r.setFlags(AV_CODEC_FLAG_GLOBAL_HEADER),FFmpegError.throwIfError(await r.open2(t,null),"audioCtx.open2");let o=e.muxer.addStream(r);return new i(r,o,e.outSampleFmt)}setInputRate(e){this._graph?.[Symbol.dispose](),this._inRate=e;let t=new FilterGraph;t.alloc();let r=Filter.getByName("abuffer"),o=t.createFilter(r,"src",`sample_rate=${e}:sample_fmt=flt:channel_layout=stereo:time_base=1/${e}`);if(!o)throw new Error("Failed to create abuffer");let n=Filter.getByName("abuffersink"),s=t.createFilter(n,"sink");if(!s)throw new Error("Failed to create abuffersink");let c=`aformat=sample_fmts=${Ct[this._outFmt]??"flt"}:sample_rates=${this._outRate}:channel_layouts=stereo,asetnsamples=n=${this._frameSize}:p=1`,d=FilterInOut.createList([{name:"in",filterCtx:o,padIdx:0}]),h=FilterInOut.createList([{name:"out",filterCtx:s,padIdx:0}]);FFmpegError.throwIfError(t.parsePtr(c,h,d),"graph.parsePtr"),FFmpegError.throwIfError(t.configSync(),"graph.config"),this._graph=t,this._bufSrc=o,this._bufSink=s;}async encode(e,t){var s=[];try{if(!this._bufSrc||!this._inRate)return;let r=new Float32Array(e.buffer,e.byteOffset,e.byteLength/4);for(let h=0;h<r.length;h++)isFinite(r[h])||(r[h]=0);let o=r.length>>1;let n=y(s,Frame.fromAudioBuffer(Buffer.from(r.buffer,r.byteOffset,r.byteLength),{nbSamples:o,format:AV_SAMPLE_FMT_FLT,sampleRate:this._inRate,channelLayout:AV_CHANNEL_LAYOUT_STEREO,pts:this._pts,timeBase:{num:1,den:this._inRate}}));this._pts+=BigInt(o);FFmpegError.throwIfError(await this._bufSrc.buffersrcAddFrame(n),"buffersrcAddFrame");await this.drain(t);}catch(a){var c=a,d=true;}finally{S(s,c,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===AVERROR_EAGAIN||t===AVERROR_EOF)break;FFmpegError.throwIfError(t,"buffersinkGetFrame"),FFmpegError.throwIfError(await this._ctx.sendFrame(this._filterFrame),"audioCtx.sendFrame"),this._filterFrame.unref(),await this.drainCodec(e);}}async drainCodec(e){for(;;){let t=await this._ctx.receivePacket(this._pkt);if(t===AVERROR_EAGAIN||t===AVERROR_EOF)break;FFmpegError.throwIfError(t,"audio.receivePacket"),this._pkt.streamIndex=this._stream.index,this._pkt.rescaleTs(this._ctx.timeBase,this._stream.timeBase),await e.writePacket(this._pkt),this._pkt.unref();}}};function ze(i,e,t){let r=new Frame;return r.alloc(),r.format=t,r.width=i,r.height=e,FFmpegError.throwIfError(r.getBuffer(0),"frame.getBuffer"),r}function jt(i,e,t){let r=new SoftwareScaleContext;return r.getContext(i,e,t,i,e,AV_PIX_FMT_YUVA420P$1,SWS_BILINEAR),r}var K=class i{src;dst;pkt;_sws;_png;static async create(e,t){let r=Codec.findDecoderByName(FF_DECODER_PNG);return ok(r,"png decoder unavailable"),new i(e,t,r)}constructor(e,t,r){this._png=r,this.src=ze(e,t,AV_PIX_FMT_BGRA),this.dst=ze(e,t,AV_PIX_FMT_YUVA420P$1),this.pkt=new Packet,this.pkt.alloc();}async png(){let e=new CodecContext;return e.allocContext3(this._png),FFmpegError.throwIfError(await e.open2(this._png),"pngDecoder.open2"),e}get sws(){return this._sws||(this._sws=jt(this.src.width,this.src.height,this.src.format)),this._sws}[Symbol.dispose](){this.src[Symbol.dispose](),this.dst[Symbol.dispose](),this.pkt[Symbol.dispose](),this._sws?.[Symbol.dispose]();}};var Y=class i{_ctx;_pkt;_stream;_pts=0n;constructor(e,t,r){this._ctx=e,this._pkt=t,this._stream=r;}static async create(e){let{width:t,height:r,fps:o,codecName:n,codecTag:s,globalHeader:a,codecOpts:c,bitrate:d,muxer:h}=e,u=Codec.findEncoderByName(n);if(!u)throw new Error(`Video encoder not found: ${n}`);let p=new CodecContext;p.allocContext3(u),p.codecId=u.id,p.width=t,p.height=r,p.pixelFormat=e.pixelFormat,p.timeBase=new Rational(1,o),p.framerate=new Rational(o,1),p.gopSize=o*2,p.bitRate=BigInt(d),a&&p.setFlags(AV_CODEC_FLAG_GLOBAL_HEADER);for(let[x,T]of Object.entries(c))p.setOption(x,T);s&&(p.codecTag=s),FFmpegError.throwIfError(await p.open2(u,null),"videoCtx.open2");let w=new Packet;w.alloc();let P=h.addStream(p,s);return new i(p,w,P)}async encode(e,t){e.pts=this._pts++,e.duration=1n,FFmpegError.throwIfError(await this._ctx.sendFrame(e),"videoCtx.sendFrame"),await this.drain(t);}async flush(e){await this._ctx.sendFrame(null),await this.drain(e);}[Symbol.dispose](){this._pkt.free(),this._ctx.freeContext();}async drain(e){let t=this._pkt;for(;;){let r=await this._ctx.receivePacket(t);if(r===AVERROR_EAGAIN||r===AVERROR_EOF)break;FFmpegError.throwIfError(r,"video.receivePacket"),t.streamIndex=this._stream.index,t.duration===0n&&(t.duration=1n),t.rescaleTs(this._ctx.timeBase,this._stream.timeBase),await e.writePacket(t),t.unref();}}};var X=class i{constructor(e,t,r,o,n,s){this._video=e;this._audio=t;this._muxer=r;this._limiter=o;this._outFile=n;this._codec=s;}_video;_audio;_muxer;_limiter;_outFile;_codec;_disposed=false;static async create(e){let{width:t,height:r,fps:o,outFile:n,withAudio:s=false}=e,a=new z(n),c=await Y.create({width:t,height:r,fps:o,codecName:FF_ENCODER_LIBX265,codecTag:"hvc1",globalHeader:true,codecOpts:{preset:"ultrafast","x265-params":"log-level=1:bframes=0"},bitrate:8e6,pixelFormat:AV_PIX_FMT_YUVA420P,muxer:a}),d;return s&&(d=await q.create({outSampleRate:44100,outSampleFmt:AV_SAMPLE_FMT_FLTP,codecName:FF_ENCODER_AAC,globalHeader:true,bitrate:128e3,muxer:a})),await a.open(),new i(c,d,a,new W(1),n,await K.create(t,r))}setupAudio(e){this._audio?.setInputRate(e);}async encodeBGRA(e){await this._limiter.schedule(async()=>{let{src:t,dst:r,sws:o}=this._codec;return ok(o,"sws not initialized"),FFmpegError.throwIfError(t.makeWritable(),"bgraSrc.makeWritable"),FFmpegError.throwIfError(t.fromBuffer(e),"bgraSrc.fromBuffer"),FFmpegError.throwIfError(r.makeWritable(),"bgraDst.makeWritable"),FFmpegError.throwIfError(await o.scaleFrame(r,t),"bgraSws.scaleFrame"),this._video.encode(r,this._muxer)});}async encodePNG(e){await this._limiter.schedule(async()=>{var s=[];try{let{pkt:t,src:r,dst:o}=this._codec;let n=y(s,await this._codec.png());t.data=e;FFmpegError.throwIfError(await n.sendPacket(t),"pngDecoder.sendPacket");t.unref();FFmpegError.throwIfError(await n.receiveFrame(r),"pngDecoder.receiveFrame");FFmpegError.throwIfError(o.makeWritable(),"pngDst.makeWritable");FFmpegError.throwIfError(await this._codec.sws.scaleFrame(o,r),"pngSws.scaleFrame");return this._video.encode(o,this._muxer)}catch(a){var c=a,d=true;}finally{S(s,c,d);}});}async encodeAudio(e){this._audio&&await this._limiter.schedule(()=>this._audio.encode(e,this._muxer));}async finish(){try{var e=[];try{let s=y(e,this._muxer,!0);let a=y(e,this._video);let c=y(e,this._audio);await this._limiter.end();await this._audio?.flush(this._muxer);await this._video.flush(this._muxer);}catch(t){var r=t,o=!0;}finally{var n=S(e,r,o);n&&await n;}}finally{this.free();}return this._outFile}async[Symbol.asyncDispose](){this._disposed||(await this._limiter.end(),this._video[Symbol.dispose](),this._audio?.[Symbol.dispose](),await this._muxer[Symbol.asyncDispose](),this.free());}free(){var t=[];try{if(this._disposed)return;this._disposed=!0;let e=y(t,this._codec);}catch(r){var o=r,n=true;}finally{S(t,o,n);}}};var rr="[HWAccel]";async function ir(){let i=HardwareContext.auto(),e=i!==null;return i?.dispose(),e}var Xe=ir().then(i=>(m.debug(rr,"gpu:",i),i));async function Q(){let i=["no-sandbox","disable-dev-shm-usage","disable-web-security","disable-site-isolation-trials","ignore-certificate-errors","disable-blink-features=AutomationControlled","mute-audio","autoplay-policy=no-user-gesture-required","disable-extensions","force-device-scale-factor=1","force-color-profile=srgb","ignore-gpu-blocklist","use-gl=angle","deterministic-mode","enable-begin-frame-control","disable-new-content-rendering-timeout","run-all-compositor-stages-before-draw","disable-threaded-animation","disable-threaded-scrolling","disable-checker-imaging","disable-image-animation-resync","enable-surface-synchronization","disable-background-networking"];if(H<3&&i.push("log-level=3"),!(await Xe&&!Ae))return i.push("use-angle=swiftshader","enable-unsafe-swiftshader"),i;i.push("disable-gpu-sandbox","enable-unsafe-webgpu");let t=platform();return t==="darwin"?i.push("use-angle=metal"):t==="win32"?i.push("use-angle=d3d11"):i.push("use-angle=vulkan","enable-features=Vulkan","disable-vulkan-surface"),i}async function ar(){return [...await Q(),"headless=new"]}var cr="[Electron]";async function Qe(i,e,t){let r=[],o=platform();o==="linux"&&r.push("xvfb-run","--auto-servernum",`--server-args="-screen 0 ${i.width}x${i.height}x24"`);let s=(await ar()).map(d=>`--${d}`),a=Buffer.from(JSON.stringify(e)).toString("base64");s.push(`${pe}=${a}`),r.push(nr,...s,Te);let c=r.join(" ");return m.debug(cr,c),Ne(c,{stdio:["ignore","pipe","pipe"],shell:o==="linux",env:{...process.env,RUST_BACKTRACE:"full",PUP_IPC_SOCKET:t}})}var J=8;var me=class extends EventEmitter{constructor(t){super();this._socket=t;this._socket.on("data",r=>this.onData(r)),this._socket.on("error",r=>this.emit("error",r)),this._socket.on("close",()=>this.emit("close"));}_socket;_chunks=[];_buffered=0;onData(t){this._chunks.push(t),this._buffered+=t.byteLength,this.flush();}flush(){for(;;){if(this._buffered<J)return;let t=this.peek(J),r=t.readUInt32LE(0),o=t.readUInt32LE(4);if(this._buffered<J+o)return;this.consume(J);let n=this.consume(o);switch(this.emit("message",r,n),r){case 1:{this.emit("progress",Number(n.toString()));break}case 2:{this.emit("done",JSON.parse(n.toString()));break}case 3:{this.emit("error",new Error(n.toString()));break}}}}peek(t){return this._chunks[0]&&this._chunks[0].byteLength>=t?this._chunks[0]:Buffer.concat(this._chunks).subarray(0,t)}consume(t){let r=Buffer.allocUnsafe(t),o=0;for(;o<t;){let n=this._chunks[0],s=Math.min(n.byteLength,t-o);n.copy(r,o,0,s),s===n.byteLength?this._chunks.shift():this._chunks[0]=n.subarray(s),o+=s;}return this._buffered-=t,r}};function Je(i){return new Promise((e,t)=>{let r=createServer();r.once("error",t),r.listen(i,()=>{e({waitForConnection(){return new Promise((o,n)=>{r.once("connection",s=>o(new me(s))),r.once("error",n);})},close(){r.close();}});});})}var M="__pup_tick__";function Ze(i){return `(function() {
2
+ ${""}
3
+ if (typeof ${M} !== 'undefined') return;
4
+
5
+ const orig = {
6
+ Date: Date,
7
+ dateNow: Date.now.bind(Date),
8
+ performanceNow: performance.now.bind(performance),
9
+ raf: requestAnimationFrame.bind(window),
10
+ caf: cancelAnimationFrame.bind(window),
11
+ setTimeout: setTimeout.bind(window),
12
+ clearTimeout: clearTimeout.bind(window),
13
+ setInterval: setInterval.bind(window),
14
+ clearInterval: clearInterval.bind(window),
15
+ };
16
+
17
+ let currMs = 0;
18
+ let rafQueue = [];
19
+ const timers = {};
20
+ let nextId = 1;
21
+ const dateOrigin = new orig.Date();
22
+ const perfOrigin = orig.performanceNow();
23
+
24
+ performance.now = function() { return perfOrigin + currMs; };
25
+ Date.now = function() { return dateOrigin.getTime() + currMs; };
26
+ Date = function() {
27
+ var O = orig.Date;
28
+ if (arguments.length === 0) return new O(dateOrigin.getTime() + currMs);
29
+ return new (Function.prototype.bind.apply(O, [null].concat(Array.prototype.slice.call(arguments))))();
30
+ };
31
+ Date.now = function() { return dateOrigin.getTime() + currMs; };
32
+ Date.parse = orig.Date.parse;
33
+ Date.UTC = orig.Date.UTC;
34
+ Date.prototype = orig.Date.prototype;
35
+
36
+ window.requestAnimationFrame = function(cb) {
37
+ const id = nextId++;
38
+ rafQueue.push({ id, cb });
39
+ return id;
40
+ };
41
+ window.cancelAnimationFrame = function(id) {
42
+ rafQueue = rafQueue.filter((r) => r.id !== id);
43
+ };
44
+
45
+ window.setTimeout = function(cb, delay, ...args) {
46
+ const id = nextId++;
47
+ timers[id] = { type: 'timeout', cb, delay: delay || 0, next: currMs + (delay || 0), args };
48
+ return id;
49
+ };
50
+ window.clearTimeout = function(id) { delete timers[id]; };
51
+
52
+ window.setInterval = function(cb, delay, ...args) {
53
+ const id = nextId++;
54
+ const d = Math.max(delay || 0, 1);
55
+ timers[id] = { type: 'interval', cb, delay: d, next: currMs + d, args };
56
+ return id;
57
+ };
58
+ window.clearInterval = function(id) { delete timers[id]; };
59
+
60
+ function process(timestampMs) {
61
+ currMs = timestampMs;
62
+ const ids = Object.keys(timers);
63
+ for (let i = 0; i < ids.length; i++) {
64
+ const t = timers[ids[i]];
65
+ if (!t) continue;
66
+ while (t.next <= currMs) {
67
+ if (typeof t.cb === 'string') eval(t.cb); else t.cb.apply(undefined, t.args);
68
+ if (t.type === 'timeout') { delete timers[ids[i]]; break; }
69
+ t.next += t.delay;
70
+ }
71
+ }
72
+ const rafs = rafQueue.splice(0);
73
+ for (let j = 0; j < rafs.length; j++) {
74
+ rafs[j].cb(currMs);
75
+ }
76
+ }
77
+
78
+ function eject() {
79
+ Date = orig.Date;
80
+ performance.now = orig.performanceNow;
81
+ window.requestAnimationFrame = orig.raf;
82
+ window.cancelAnimationFrame = orig.caf;
83
+ window.setTimeout = orig.setTimeout;
84
+ window.clearTimeout = orig.clearTimeout;
85
+ window.setInterval = orig.setInterval;
86
+ window.clearInterval = orig.clearInterval;
87
+ delete window.${M};
88
+ }
89
+
90
+ window.${M} = { process: process, eject: eject };
91
+ })();`}function le(i){return `${M}.process(${i})`}function et(){return `if (typeof ${M} !== 'undefined') ${M}.eject()`}var tt="[Puppeteer]";async function rt(i,e,t){var p=[];try{let{fps:r,width:o,height:n,duration:s,outFile:a}=e;e.withAudio&&m.warn(tt,"audio capture is not supported in Puppeteer mode");let c=Math.ceil(r*s);let d=1e3/r;await mkdir(dirname(a),{recursive:!0});let h=y(p,await X.create({width:o,height:n,fps:r,outFile:a}),!0);let u=await lr.launch({headless:"shell",defaultViewport:{width:o,height:n},args:(await Q()).map(v=>`--${v}`)});try{let v=(await u.pages())[0],_=v._client(),b=await v.createCDPSession(),g=Ze({skipFrameGuard:!0}),{identifier:B}=await _.send("Page.addScriptToEvaluateOnNewDocument",{source:g}),Z=[];b.on("Animation.animationStarted",D=>{Z.push(D.animation.id);}),await b.send("Animation.enable");try{await v.goto(i,{waitUntil:"networkidle0",timeout:3e4});for(let F of v.frames())await F.evaluate(g),await F.evaluate(le(0));await b.send("HeadlessExperimental.enable"),await b.send("HeadlessExperimental.beginFrame",{frameTimeTicks:0,interval:d,noDisplayUpdates:!1});let D=0,ee=0,te=0,fe=d;for(let F=0;F<c;F++){te+=d,await Promise.all(v.frames().map(nt=>nt.evaluate(le(te)))),Z.length>0&&await b.send("Animation.seekAnimations",{animations:Z,currentTime:te});let he=await b.send("HeadlessExperimental.beginFrame",{frameTimeTicks:fe,interval:d,noDisplayUpdates:!1,screenshot:{format:"png"}});if(fe+=d,!he.screenshotData){m.warn(tt,`frame ${F} produced no screenshot`);continue}await h.encodePNG(Buffer.from(he.screenshotData,"base64")),D++;let we=Math.floor(D/c*100);Math.abs(we-ee)>10&&(ee=we,t?.(ee));}for(let F of v.frames())F.detached||await F.evaluate(et());if(D===0)throw new Error("no frames captured");return {written:D,jank:0,outFile:a}}finally{await b.send("HeadlessExperimental.disable"),await b.send("Animation.disable"),await _.send("Page.removeScriptToEvaluateOnNewDocument",{identifier:B}),await b.detach();}}finally{await u.close();}}catch(w){var P=w,x=true;}finally{var T=S(p,P,x);T&&await T;}}var N="[pup]";async function xr(i,e,t){m.debug(N,"runPupApp",i,e);let r=[i,"--width",`${e.width}`,"--height",`${e.height}`,"--fps",`${e.fps}`,"--duration",`${e.duration}`,"--out-file",`${e.outFile}`];return e.withAudio&&r.push("--with-audio"),e.useInnerProxy&&r.push("--use-inner-proxy"),e.deterministic&&r.push("--deterministic"),Qe(e,r,t)}var I=Be;async function So(i,e){m.debug(N,"pup",i,e);let{signal:t}=e;if(t?.aborted)throw t.reason;let r=e.outFile??I.outFile,o={width:e.width??I.width,height:e.height??I.height,fps:e.fps??I.fps,duration:e.duration??I.duration,withAudio:e.withAudio??I.withAudio,useInnerProxy:e.useInnerProxy??I.useInnerProxy,deterministic:e.deterministic??I.deterministic,outFile:r},n=join(tmpdir(),"pup",randomUUID());await mkdir(n,{recursive:true});let s=join(n,"pup.sock"),a=performance.now(),c=p=>(m.info(N,`${i} progress: ${p}%`),e.onProgress?.(p));if(platform()==="linux"&&o.deterministic&&Re){c(0);let p=await rt(i,o,c);return c(100),m.info(N,`done ${r} in ${Math.round(performance.now()-a)}ms`),{...p,options:o}}let d=await Je(s),h=await xr(i,{...o,signal:t},s),u=()=>{m.debug(N,"aborted");let p=h.process.pid;p?br(p):h.process.kill(),rmSync(n,{recursive:true,force:true});};t?.addEventListener("abort",u,{once:true});try{let p=new Promise(async(P,x)=>{(await d.waitForConnection()).on("close",()=>x(new Error("IPC closed without result"))).on("message",()=>t?.aborted&&x(t.reason)).on("progress",c).on("done",P).on("error",x);}).finally(()=>d.close());c(0);let w=await Promise.race([p,h.wait]);return ok(w,"no summary received"),c(100),m.info(N,`done ${r} in ${Math.round(performance.now()-a)}ms`),{...w,options:o}}catch(p){throw t?.aborted?t.reason:p}finally{rmSync(n,{recursive:true,force:true});}}export{X as A,So as B,Ee as a,ke as b,Fr as c,H as d,Se as e,Ae as f,Ie as g,ht as h,Te as i,Rr as j,Re as k,E as l,m,Vr as n,pe as o,Wr as p,Ne as q,xt as r,vt as s,yt as t,Pt as u,Ft as v,Xr as w,Be as x,W as y,z};//# sourceMappingURL=chunk-BG7244QU.js.map
92
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9iYXNlL2Vudi50cyIsIi4uL3NyYy9iYXNlL3BhcnNlci50cyIsIi4uL3NyYy9iYXNlL2NvbnN0YW50cy50cyIsIi4uL3NyYy9iYXNlL2xvZ2dpbmcudHMiLCIuLi9zcmMvYmFzZS9ub2Vyci50cyIsIi4uL3NyYy9iYXNlL3Byb2Nlc3MudHMiLCIuLi9zcmMvcmVuZGVyZXIvc2NoZW1hLnRzIiwiLi4vc3JjL2Jhc2UvbGltaXRlci50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvbXV4ZXIudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL2F1ZGlvLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9jb2RlYy50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvdmlkZW8udHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL2VuY29kZXIudHMiLCIuLi9zcmMvYmFzZS9od2FjY2VsLnRzIiwiLi4vc3JjL2Jhc2UvY2hyb21pdW0udHMiLCIuLi9zcmMvcmVuZGVyZXIvZWxlY3Ryb24udHMiLCIuLi9zcmMvcmVuZGVyZXIvaXBjLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3RpY2sudHMiLCIuLi9zcmMvcmVuZGVyZXIvcHVwcGV0ZWVyLnRzIiwiLi4vc3JjL3B1cC50cyJdLCJuYW1lcyI6WyJwZW52IiwibmFtZSIsInBhcnNlciIsImRlZmF1bHRWYWx1ZSIsInBhcnNlTnVtYmVyIiwieCIsIm51bSIsInBhcnNlU3RyaW5nIiwicmVxdWlyZSIsImNyZWF0ZVJlcXVpcmUiLCJlbnYiLCJwdXBMb2dMZXZlbCIsInB1cFVzZUlubmVyUHJveHkiLCJwdXBEaXNhYmxlR1BVIiwicHVwRGV0ZXJtaW5pc3RpYyIsInB1cFBrZ1Jvb3QiLCJkaXJuYW1lIiwicHVwQXBwIiwiam9pbiIsInB1cElwY1NvY2tldCIsInB1cEV4cGVyaW1lbnRhbFB1cHBldGVlciIsIkRFQlVHIiwiSU5GTyIsIldBUk4iLCJFUlJPUiIsIkZBVEFMIiwic3RhY2tIb29rIiwidGFyZ2V0IiwiX2NvbnRleHQiLCJtZXNzYWdlcyIsInByb2Nlc3NlZCIsIm1zZyIsIl9mYXRhbF9kZWMiLCJfZXJyb3JfZGVjIiwiX3dhcm5fZGVjIiwiX2luZm9fZGVjIiwiX2RlYnVnX2RlYyIsIl9pbml0IiwiTG9nZ2VyIiwiX2xldmVsIiwiX19ydW5Jbml0aWFsaXplcnMiLCJfX3B1YmxpY0ZpZWxkIiwidmFsdWUiLCJkZWJ1ZyIsImluZm8iLCJ3YXJuIiwiZXJyb3IiLCJsdiIsIm1lc3NhZ2UiLCJwcm9jIiwicmVzb2x2ZSIsInJlamVjdCIsImZhdGFsIiwiZGlzcGF0Y2giLCJkYXRhIiwiZXJyIiwiY29kZSIsInNpZ25hbCIsInJlYXNvbiIsIl9fZGVjb3JhdG9yU3RhcnQiLCJfX2RlY29yYXRlRWxlbWVudCIsIl9fZGVjb3JhdG9yTWV0YWRhdGEiLCJsb2dnZXIiLCJMb2ciLCJsZXZlbCIsIkFWX0xPR19FUlJPUiIsIkFWX0xPR19XQVJOSU5HIiwibm9lcnIiLCJmbiIsImFyZ3MiLCJyZXQiLCJQVVBfQVJHU19LRVkiLCJwYXJncyIsImFyZ3YiLCJwcml2IiwiYXJnIiwiZXhlYyIsImNtZCIsIm9wdGlvbnMiLCJwYXJ0cyIsImNvbW1hbmQiLCJzcGF3biIsIkRFRkFVTFRfV0lEVEgiLCJERUZBVUxUX0hFSUdIVCIsIkRFRkFVTFRfRlBTIiwiREVGQVVMVF9EVVJBVElPTiIsIkRFRkFVTFRfT1VUX0ZJTEUiLCJSZW5kZXJTY2hlbWEiLCJ6IiwiZGVmYXVsdFJlbmRlck9wdGlvbnMiLCJDb25jdXJyZW5jeUxpbWl0ZXIiLCJtYXhDb25jdXJyZW5jeSIsInJ1biIsInYiLCJlIiwiciIsIkZvcm1hdE11eGVyIiwib3V0UGF0aCIsImZvcm1hdE5hbWUiLCJGb3JtYXRDb250ZXh0IiwiRkZtcGVnRXJyb3IiLCJjb2RlY0N0eCIsImNvZGVjVGFnIiwic3RyZWFtIiwicGt0IiwiU0FNUExFX0ZNVF9OQU1FIiwiQVZfU0FNUExFX0ZNVF9GTFQiLCJBVl9TQU1QTEVfRk1UX0ZMVFAiLCJBdWRpb0VuY29kZXIiLCJfQXVkaW9FbmNvZGVyIiwiY3R4Iiwib3V0Rm10IiwiUGFja2V0IiwiRnJhbWUiLCJvcHRzIiwiY29kZWMiLCJDb2RlYyIsIkNvZGVjQ29udGV4dCIsIkFWX0NIQU5ORUxfTEFZT1VUX1NURVJFTyIsIlJhdGlvbmFsIiwiQVZfQ09ERUNfRkxBR19HTE9CQUxfSEVBREVSIiwiaW5TYW1wbGVSYXRlIiwiZ3JhcGgiLCJGaWx0ZXJHcmFwaCIsImFidWZmZXIiLCJGaWx0ZXIiLCJidWZTcmMiLCJhYnVmZmVyc2luayIsImJ1ZlNpbmsiLCJmaWx0ZXJEZXNjIiwib3V0cHV0cyIsIkZpbHRlckluT3V0IiwiaW5wdXRzIiwicGNtIiwibXV4ZXIiLCJfc3RhY2siLCJzcmMiLCJpIiwiblNhbXBsZXMiLCJmcmFtZSIsIl9fdXNpbmciLCJfIiwiX2Vycm9yIiwiX2hhc0Vycm9yIiwiX19jYWxsRGlzcG9zZSIsIkFWRVJST1JfRUFHQUlOIiwiQVZFUlJPUl9FT0YiLCJtYWtlRnJhbWUiLCJ3aWR0aCIsImhlaWdodCIsInBpeEZtdCIsIm1ha2VTV1NDb250ZXh0Iiwic3dzIiwiU29mdHdhcmVTY2FsZUNvbnRleHQiLCJBVl9QSVhfRk1UX1lVVkE0MjBQIiwiU1dTX0JJTElORUFSIiwiQ29kZWNTdGF0ZSIsIl9Db2RlY1N0YXRlIiwiRkZfREVDT0RFUl9QTkciLCJvayIsInBuZyIsIkFWX1BJWF9GTVRfQkdSQSIsIlZpZGVvRW5jb2RlciIsIl9WaWRlb0VuY29kZXIiLCJmcHMiLCJjb2RlY05hbWUiLCJnbG9iYWxIZWFkZXIiLCJjb2RlY09wdHMiLCJiaXRyYXRlIiwiayIsIkVuY29kZXJQaXBlbGluZSIsIl9FbmNvZGVyUGlwZWxpbmUiLCJfdmlkZW8iLCJfYXVkaW8iLCJfbXV4ZXIiLCJfbGltaXRlciIsIl9vdXRGaWxlIiwiX2NvZGVjIiwib3V0RmlsZSIsIndpdGhBdWRpbyIsInZpZGVvIiwiRkZfRU5DT0RFUl9MSUJYMjY1IiwiYXVkaW8iLCJGRl9FTkNPREVSX0FBQyIsInNhbXBsZVJhdGUiLCJpbnB1dCIsImRzdCIsInBuZ0RhdGEiLCJfbSIsIl92IiwiX2EiLCJfcHJvbWlzZSIsIlRBRyIsImRldGVjdEdQVURyaXZlciIsImh3IiwiSGFyZHdhcmVDb250ZXh0IiwicmVzdWx0IiwiY2FuSVVzZUdQVSIsImNocm9taXVtT3B0aW9ucyIsInBsYXQiLCJwbGF0Zm9ybSIsImVsZWN0cm9uT3B0cyIsInJ1bkVsZWN0cm9uQXBwIiwic2l6ZSIsImlwY1NvY2tldFBhdGgiLCJjbWRQYXJ0cyIsImVsZWN0cm9uQXJncyIsImEiLCJiYXNlNjRBcmdzIiwiZWxlY3Ryb24iLCJIRUFERVJfU0laRSIsIklwY1JlYWRlciIsIkV2ZW50RW1pdHRlciIsIl9zb2NrZXQiLCJoZWFkZXIiLCJ0eXBlIiwibGVuIiwicGF5bG9hZCIsIm4iLCJvdXQiLCJvZmZzZXQiLCJjaHVuayIsInRha2UiLCJjcmVhdGVJcGNTZXJ2ZXIiLCJzb2NrZXRQYXRoIiwic2VydmVyIiwiY3JlYXRlU2VydmVyIiwibm8iLCJzb2NrZXQiLCJUSUNLX1NZTUJPTCIsImJ1aWxkVGlja0luamVjdG9yIiwiZG9Qcm9jZXNzIiwidGltZXN0YW1wTXMiLCJkb0VqZWN0IiwiZG9QdXBwZXRlZXIiLCJzb3VyY2UiLCJvblByb2dyZXNzIiwiZHVyYXRpb24iLCJ0b3RhbCIsImZyYW1lSW50ZXJ2YWwiLCJta2RpciIsInBpcGVsaW5lIiwiYnJvd3NlciIsInB1cHBldGVlciIsInBhZ2UiLCJwYWdlQ2xpZW50Iiwic2Vzc2lvbiIsInRpY2tTY3JpcHQiLCJpZGVudGlmaWVyIiwiYW5pbWF0aW9uSWRzIiwiZXZlbnQiLCJ3cml0dGVuIiwicHJvZ3Jlc3MiLCJjYXB0dXJlVGltZXN0YW1wIiwiZnJhbWVUaW1lVGlja3MiLCJuZXdQcm9ncmVzcyIsInJ1blB1cEFwcCIsImQiLCJwdXAiLCJyZW5kZXJPcHRzIiwidG1wRGlyIiwidG1wZGlyIiwicmFuZG9tVVVJRCIsInQwIiwidGljayIsInN1bW1hcnkiLCJoYW5kbGUiLCJvbkFib3J0IiwicGlkIiwidHJlZUtpbGwiLCJybVN5bmMiXSwibWFwcGluZ3MiOiJr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QUFBLENBQUssSUFBQSxDQUFLLE1BQUEsQ0FBUSxJQUFBLENBQUssS0FBQSxDQUFNQSxFQUFRLFFBQUEsRUFBVSxDQUFDLENBQUEsQ0FDaEQsS0FDRixDQUNBLEtBQUssQ0FBQSxDQUFrQixDQUNyQixJQUFBLENBQUssSUFBQSxDQUFLLE9BQUEsQ0FBUyxJQUFJLEtBQUEsQ0FBTUEsQ0FBQUEsQ0FBUSxVQUFVLENBQUMsRUFDaEQsS0FDRixDQUNGLENBQ0YsQ0FDRixDQUVRLElBQUEsQ0FBS0MsRUFBbUIsQ0FDOUIsT0FBSSxJQUFBLENBQUssT0FBQSxDQUFRLENBQUMsQ0FBQSxFQUFLLEtBQUssT0FBQSxDQUFRLENBQUMsQ0FBQSxDQUFFLFVBQUEsRUFBY0EsQ0FBQUEsQ0FBVSxJQUFBLENBQUssUUFBUSxDQUFDLENBQUEsQ0FDdEUsT0FBTyxNQUFBLENBQU8sSUFBQSxDQUFLLE9BQU8sQ0FBQSxDQUFFLFFBQUEsQ0FBUyxDQUFBLENBQUdBLENBQUMsQ0FDbEQsQ0FFUSxRQUFRQSxDQUFBQSxDQUFtQixDQUNqQyxJQUFNQyxDQUFBQSxDQUFNLE1BQUEsQ0FBTyxXQUFBLENBQVlELENBQUMsQ0FBQSxDQUM1QkUsQ0FBQUEsQ0FBUyxDQUFBLENBQ2IsS0FBT0EsQ0FBQUEsQ0FBU0YsQ0FBQUEsRUFBRyxDQUNqQixJQUFNRyxDQUFBQSxDQUFRLEtBQUssT0FBQSxDQUFRLENBQUMsRUFDdEJDLENBQUFBLENBQU8sSUFBQSxDQUFLLEdBQUEsQ0FBSUQsQ0FBQUEsQ0FBTSxVQUFBLENBQVlILENBQUFBLENBQUlFLENBQU0sQ0FBQSxDQUNsREMsQ0FBQUEsQ0FBTSxJQUFBLENBQUtGLENBQUFBLENBQUtDLENBQUFBLENBQVEsQ0FBQSxDQUFHRSxDQUFJLENBQUEsQ0FDM0JBLENBQUFBLEdBQVNELENBQUFBLENBQU0sVUFBQSxDQUNqQixJQUFBLENBQUssT0FBQSxDQUFRLE9BQU0sQ0FFbkIsSUFBQSxDQUFLLFFBQVEsQ0FBQyxDQUFBLENBQUlBLEVBQU0sUUFBQSxDQUFTQyxDQUFJLENBQUEsQ0FFdkNGLENB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QSxFQUFPLElBQUEsQ0FBSyxNQUFNLFdBQUEsQ0FBWSxHQUFBLEdBQVFxRixDQUFFLENBQUMsQ0FBQSxFQUFBLENBQUksQ0FBQSxDQUN0RSxDQUFFLEdBQUdFLEVBQVMsT0FBQSxDQUFTTixDQUFXLENBQzNDLENBQUEsTUFBU3JLLENBQUFBLENBQUcsQ0FDVixNQUFJckMsQ0FBQUEsRUFBUSxPQUFBLENBQWVBLENBQUFBLENBQU8sTUFBQSxDQUM1QnFDLENBQ1IsUUFBRSxDQUNBZ0wsTUFBQUEsQ0FBT1YsRUFBUSxDQUFFLFNBQUEsQ0FBVyxLQUFNLEtBQUEsQ0FBTyxJQUFLLENBQUMsRUFDakQsQ0FDRiIsImZpbGUiOiJjaHVuay1CRzcyNDRRVS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMjUuXG5cbmV4cG9ydCB0eXBlIEVudlBhcnNlcjxUPiA9ICh2YWx1ZTogdW5rbm93bikgPT4gVDtcblxuZXhwb3J0IGZ1bmN0aW9uIHBlbnY8VD4obmFtZTogc3RyaW5nLCBwYXJzZXI6IEVudlBhcnNlcjxUPiwgZGVmYXVsdFZhbHVlOiBUKTogVDtcbmV4cG9ydCBmdW5jdGlvbiBwZW52PFQ+KG5hbWU6IHN0cmluZywgcGFyc2VyOiBFbnZQYXJzZXI8VD4sIGRlZmF1bHRWYWx1ZT86IFQpOiBUIHwgdW5kZWZpbmVkO1xuZXhwb3J0IGZ1bmN0aW9uIHBlbnY8VD4obmFtZTogc3RyaW5nLCBwYXJzZXI6IEVudlBhcnNlcjxUPiwgZGVmYXVsdFZhbHVlPzogVCk6IFQgfCB1bmRlZmluZWQge1xuICB0cnkge1xuICAgIHJldHVybiBwYXJzZXIocHJvY2Vzcy5lbnZbbmFtZV0pO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZGVmYXVsdFZhbHVlO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAxLzMwLlxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VOdW1iZXIoeDogdW5rbm93bik6IG51bWJlciB7XG4gIGlmICh0eXBlb2YgeCA9PT0gXCJudW1iZXJcIikge1xuICAgIHJldHVybiB4O1xuICB9XG4gIGNvbnN0IG51bSA9IE51bWJlcih4KTtcbiAgaWYgKE51bWJlci5pc05hTihudW0pKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBWYWx1ZSAke3h9IGlzIG5vdCBhIHZhbGlkIG51bWJlcmApO1xuICB9XG4gIHJldHVybiBudW07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVN0cmluZyh4OiB1bmtub3duKTogc3RyaW5nIHtcbiAgaWYgKHR5cGVvZiB4ID09PSBcInN0cmluZ1wiKSByZXR1cm4geDtcbiAgcmV0dXJuIFN0cmluZyh4KTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDkuXG5cbmltcG9ydCB7IGNyZWF0ZVJlcXVpcmUgfSBmcm9tIFwibW9kdWxlXCI7XG5pbXBvcnQgeyBkaXJuYW1lLCBqb2luIH0gZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IHBlbnYgfSBmcm9tIFwiLi9lbnZcIjtcbmltcG9ydCB7IHBhcnNlTnVtYmVyIH0gZnJvbSBcIi4vcGFyc2VyXCI7XG5cbmNvbnN0IHJlcXVpcmUgPSBjcmVhdGVSZXF1aXJlKGltcG9ydC5tZXRhLnVybCk7XG5jb25zdCBlbnYgPSBwcm9jZXNzLmVudjtcblxuZXhwb3J0IGNvbnN0IHB1cExvZ0xldmVsID0gcGVudihcIlBVUF9MT0dfTEVWRUxcIiwgcGFyc2VOdW1iZXIsIDIpO1xuZXhwb3J0IGNvbnN0IHB1cFVzZUlubmVyUHJveHkgPSBlbnZbXCJQVVBfVVNFX0lOTkVSX1BST1hZXCJdID09PSBcIjFcIjtcbmV4cG9ydCBjb25zdCBwdXBEaXNhYmxlR1BVID0gZW52W1wiUFVQX0RJU0FCTEVfR1BVXCJdID09PSBcIjFcIjtcbmV4cG9ydCBjb25zdCBwdXBEZXRlcm1pbmlzdGljID0gZW52W1wiUFVQX0RFVEVSTUlOSVNUSUNcIl0gPT09IFwiMVwiO1xuXG5leHBvcnQgY29uc3QgcHVwUGtnUm9vdCA9IGRpcm5hbWUocmVxdWlyZS5yZXNvbHZlKFwicHVwLXJlY29yZGVyL3BhY2thZ2UuanNvblwiKSk7XG5leHBvcnQgY29uc3QgcHVwQXBwID0gam9pbihwdXBQa2dSb290LCBcImRpc3RcIiwgXCJhcHAuY2pzXCIpO1xuZXhwb3J0IGNvbnN0IHB1cElwY1NvY2tldCA9IGVudltcIlBVUF9JUENfU09DS0VUXCJdO1xuXG5leHBvcnQgY29uc3QgcHVwRXhwZXJpbWVudGFsUHVwcGV0ZWVyID0gZW52W1wiUFVQX0VYUEVSSU1FTlRBTF9QVVBQRVRFRVJcIl0gPT09IFwiMVwiO1xuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wNi5cblxuaW1wb3J0IHsgQ2hpbGRQcm9jZXNzLCB0eXBlIFNlcmlhbGl6YWJsZSB9IGZyb20gXCJjaGlsZF9wcm9jZXNzXCI7XG5pbXBvcnQgeyBMb2cgfSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHsgQVZfTE9HX0VSUk9SLCBBVl9MT0dfV0FSTklORyB9IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgcHVwTG9nTGV2ZWwgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBMb2dnZXJMaWtlIHtcbiAgZGVidWc/KHRoaXM6IHZvaWQsIC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkO1xuXG4gIGluZm8/KHRoaXM6IHZvaWQsIC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkO1xuXG4gIHdhcm4/KHRoaXM6IHZvaWQsIC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkO1xuXG4gIGVycm9yPyh0aGlzOiB2b2lkLCAuLi5tZXNzYWdlczogdW5rbm93bltdKTogdm9pZDtcbn1cblxuY29uc3QgREVCVUcgPSBcIjxwdXBAZGVidWc+XCI7XG5jb25zdCBJTkZPID0gXCI8cHVwQGluZm8+XCI7XG5jb25zdCBXQVJOID0gXCI8cHVwQHdhcm4+XCI7XG5jb25zdCBFUlJPUiA9IFwiPHB1cEBlcnJvcj5cIjtcbmNvbnN0IEZBVEFMID0gXCI8cHVwQGZhdGFsPlwiO1xuXG5mdW5jdGlvbiBzdGFja0hvb2sodGFyZ2V0OiBGdW5jdGlvbiwgX2NvbnRleHQ6IENsYXNzTWV0aG9kRGVjb3JhdG9yQ29udGV4dCkge1xuICByZXR1cm4gZnVuY3Rpb24gKHRoaXM6IExvZ2dlciwgLi4ubWVzc2FnZXM6IHVua25vd25bXSkge1xuICAgIGNvbnN0IHByb2Nlc3NlZCA9IG1lc3NhZ2VzLm1hcCgobXNnKSA9PiB7XG4gICAgICByZXR1cm4gbXNnIGluc3RhbmNlb2YgRXJyb3IgPyAobXNnLnN0YWNrID8/IFN0cmluZyhtc2cpKSA6IG1zZztcbiAgICB9KTtcbiAgICByZXR1cm4gdGFyZ2V0LmNhbGwodGhpcywgLi4ucHJvY2Vzc2VkKTtcbiAgfTtcbn1cblxuZXhwb3J0IGNsYXNzIExvZ2dlciBpbXBsZW1lbnRzIExvZ2dlckxpa2Uge1xuICBwcml2YXRlIF9pbXBsPzogTG9nZ2VyTGlrZTtcblxuICBnZXQgbGV2ZWwoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fbGV2ZWw7XG4gIH1cblxuICBzZXQgbGV2ZWwodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX2xldmVsID0gdmFsdWU7XG4gICAgdGhpcy5pbXBsID0gdGhpcy5faW1wbCA/PyBjb25zb2xlO1xuICB9XG5cbiAgZ2V0IGltcGwoKTogTG9nZ2VyTGlrZSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2ltcGw7XG4gIH1cblxuICBzZXQgaW1wbCh2YWx1ZTogTG9nZ2VyTGlrZSkge1xuICAgIGNvbnN0IGRlYnVnID0gdmFsdWUuZGVidWcgPz8gY29uc29sZS5kZWJ1ZztcbiAgICBjb25zdCBpbmZvID0gdmFsdWUuaW5mbyA/PyBjb25zb2xlLmluZm87XG4gICAgY29uc3Qgd2FybiA9IHZhbHVlLndhcm4gPz8gY29uc29sZS53YXJuO1xuICAgIGNvbnN0IGVycm9yID0gdmFsdWUuZXJyb3IgPz8gY29uc29sZS5lcnJvcjtcbiAgICBjb25zdCBsdiA9IHRoaXMuX2xldmVsO1xuICAgIHRoaXMuX2ltcGwgPSB7XG4gICAgICBkZWJ1ZzogbHYgPj0gMyA/IGRlYnVnIDogdW5kZWZpbmVkLFxuICAgICAgaW5mbzogbHYgPj0gMiA/IGluZm8gOiB1bmRlZmluZWQsXG4gICAgICB3YXJuOiBsdiA+PSAxID8gd2FybiA6IHVuZGVmaW5lZCxcbiAgICAgIGVycm9yOiBsdiA+PSAwID8gZXJyb3IgOiB1bmRlZmluZWQsXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX2xldmVsOiBudW1iZXIgPSBwdXBMb2dMZXZlbCkge1xuICAgIHRoaXMuaW1wbCA9IGNvbnNvbGU7XG4gIH1cblxuICBAc3RhY2tIb29rXG4gIGRlYnVnKC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkIHtcbiAgICB0aGlzLmltcGw/LmRlYnVnPy4oREVCVUcsIC4uLm1lc3NhZ2VzKTtcbiAgfVxuXG4gIEBzdGFja0hvb2tcbiAgaW5mbyguLi5tZXNzYWdlczogdW5rbm93bltdKTogdm9pZCB7XG4gICAgdGhpcy5pbXBsPy5pbmZvPy4oSU5GTywgLi4ubWVzc2FnZXMpO1xuICB9XG5cbiAgQHN0YWNrSG9va1xuICB3YXJuKC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkIHtcbiAgICB0aGlzLmltcGw/Lndhcm4/LihXQVJOLCAuLi5tZXNzYWdlcyk7XG4gIH1cblxuICBAc3RhY2tIb29rXG4gIGVycm9yKC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkIHtcbiAgICB0aGlzLmltcGw/LmVycm9yPy4oRVJST1IsIC4uLm1lc3NhZ2VzKTtcbiAgfVxuXG4gIEBzdGFja0hvb2tcbiAgZmF0YWwoLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQge1xuICAgIHRoaXMuaW1wbD8uZXJyb3I/LihGQVRBTCwgLi4ubWVzc2FnZXMpO1xuICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgfVxuXG4gIHByaXZhdGUgZGlzcGF0Y2gobWVzc2FnZTogc3RyaW5nKSB7XG4gICAgY29uc3QgbXNnID0gbWVzc2FnZS50cmltRW5kKCk7XG4gICAgaWYgKG1zZy5zdGFydHNXaXRoKERFQlVHKSkge1xuICAgICAgdGhpcy5kZWJ1Zyhtc2cuc2xpY2UoREVCVUcubGVuZ3RoICsgMSkpO1xuICAgIH0gZWxzZSBpZiAobXNnLnN0YXJ0c1dpdGgoSU5GTykpIHtcbiAgICAgIHRoaXMuaW5mbyhtc2cuc2xpY2UoSU5GTy5sZW5ndGggKyAxKSk7XG4gICAgfSBlbHNlIGlmIChtc2cuc3RhcnRzV2l0aChXQVJOKSkge1xuICAgICAgdGhpcy53YXJuKG1zZy5zbGljZShXQVJOLmxlbmd0aCArIDEpKTtcbiAgICB9IGVsc2UgaWYgKG1zZy5zdGFydHNXaXRoKEVSUk9SKSkge1xuICAgICAgdGhpcy5lcnJvcihtc2cuc2xpY2UoRVJST1IubGVuZ3RoICsgMSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmluZm8obXNnKTtcbiAgICB9XG4gIH1cblxuICBhdHRhY2gocHJvYzogQ2hpbGRQcm9jZXNzLCBuYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpcy5kZWJ1ZyhgJHtuYW1lfS5hdHRhY2hgKTtcbiAgICAgIGxldCBmYXRhbDogc3RyaW5nID0gXCJcIjtcbiAgICAgIGNvbnN0IGRpc3BhdGNoID0gKGRhdGE6IEJ1ZmZlciB8IFNlcmlhbGl6YWJsZSkgPT4ge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0gZGF0YS50b1N0cmluZygpO1xuICAgICAgICBpZiAobWVzc2FnZS5zdGFydHNXaXRoKEZBVEFMKSkge1xuICAgICAgICAgIGZhdGFsICs9IG1lc3NhZ2Uuc2xpY2UoRkFUQUwubGVuZ3RoICsgMSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5kaXNwYXRjaChtZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHByb2Muc3RkZXJyPy5vbihcImRhdGFcIiwgZGlzcGF0Y2gpO1xuICAgICAgcHJvYy5zdGRvdXQ/Lm9uKFwiZGF0YVwiLCBkaXNwYXRjaCk7XG4gICAgICBwcm9jXG4gICAgICAgIC5vbihcIm1lc3NhZ2VcIiwgZGlzcGF0Y2gpXG4gICAgICAgIC5vbihcImVycm9yXCIsIChlcnIpID0+IHtcbiAgICAgICAgICBmYXRhbCArPSBlcnIubWVzc2FnZTtcbiAgICAgICAgICBwcm9jLmtpbGwoKTtcbiAgICAgICAgfSlcbiAgICAgICAgLm9uY2UoXCJjbG9zZVwiLCAoY29kZSwgc2lnbmFsKSA9PiB7XG4gICAgICAgICAgaWYgKGNvZGUgfHwgc2lnbmFsIHx8IGZhdGFsKSB7XG4gICAgICAgICAgICBmYXRhbCB8fD0gYGNvbW1hbmQgZmFpbGVkOiAke3Byb2Muc3Bhd25hcmdzLmpvaW4oXCIgXCIpfWA7XG4gICAgICAgICAgICB0aGlzLmRlYnVnKGAke25hbWV9LmNsb3NlYCwgeyBjb2RlLCBzaWduYWwsIGZhdGFsIH0pO1xuICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihmYXRhbCkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRlYnVnKGAke25hbWV9LmNsb3NlYCk7XG4gICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAub24oXCJ1bmhhbmRsZWRSZWplY3Rpb25cIiwgKHJlYXNvbikgPT4ge1xuICAgICAgICAgIHRoaXMuZXJyb3IoYCR7bmFtZX0udW5oYW5kbGVkYCwgcmVhc29uKTtcbiAgICAgICAgfSlcbiAgICAgICAgLm9uKFwidW5jYXVnaHRFeGNlcHRpb25Nb25pdG9yXCIsIChlcnIpID0+IHtcbiAgICAgICAgICB0aGlzLmVycm9yKGAke25hbWV9LnVuaGFuZGxlZGAsIGVycik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9XG59XG5cbmNvbnN0IGxvZ2dlciA9IG5ldyBMb2dnZXIoKTtcblxuLy8gUm91dGUgZmZtcGVnIG5hdGl2ZSBsb2dzIHRocm91Z2ggcHVwJ3MgbG9nZ2VyLlxuTG9nLnNldENhbGxiYWNrKChsZXZlbCwgbWVzc2FnZSkgPT4ge1xuICBjb25zdCBtc2cgPSBtZXNzYWdlLnRyaW1FbmQoKTtcbiAgaWYgKCFtc2cpIHJldHVybjtcbiAgaWYgKGxldmVsIDw9IEFWX0xPR19FUlJPUikgbG9nZ2VyLmVycm9yKG1zZyk7XG4gIGVsc2UgaWYgKGxldmVsIDw9IEFWX0xPR19XQVJOSU5HKSBsb2dnZXIud2Fybihtc2cpO1xufSk7XG5cbmV4cG9ydCB7IGxvZ2dlciB9O1xuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8yNC5cblxuZXhwb3J0IGZ1bmN0aW9uIG5vZXJyPEZuIGV4dGVuZHMgKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnksIEQ+KFxuICBmbjogRm4sXG4gIGRlZmF1bHRWYWx1ZTogRCxcbik6ICguLi5hcmdzOiBQYXJhbWV0ZXJzPEZuPikgPT4gUmV0dXJuVHlwZTxGbj4gfCBEIHtcbiAgcmV0dXJuICguLi5hcmdzKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJldCA9IGZuKC4uLmFyZ3MpO1xuICAgICAgaWYgKHJldCBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgcmV0dXJuIHJldC5jYXRjaCgoKSA9PiBkZWZhdWx0VmFsdWUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJldDtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gICAgfVxuICB9O1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMS8zMC5cblxuaW1wb3J0IHsgc3Bhd24sIHR5cGUgQ2hpbGRQcm9jZXNzLCB0eXBlIFNwYXduT3B0aW9ucyB9IGZyb20gXCJjaGlsZF9wcm9jZXNzXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi9sb2dnaW5nXCI7XG5cbmV4cG9ydCBjb25zdCBQVVBfQVJHU19LRVkgPSBcIi0tcHVwLXByaXYtYXJnc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gcGFyZ3MoKSB7XG4gIGNvbnN0IGFyZ3YgPSBwcm9jZXNzLmFyZ3Y7XG4gIGxldCBwcml2ID0gYXJndi5maW5kKChhcmcpID0+IGFyZy5zdGFydHNXaXRoKFBVUF9BUkdTX0tFWSkpO1xuICBpZiAoIXByaXYpIHtcbiAgICBsb2dnZXIuZGVidWcoXCJwcm9jYXJndlwiLCBhcmd2KTtcbiAgICByZXR1cm4gcHJvY2Vzcy5hcmd2O1xuICB9XG4gIGNvbnN0IGFyZ3MgPSBbXCJleGVjXCIsIC4uLmFyZ3Yuc2xpY2UoLTEpXTtcbiAgcHJpdiA9IEJ1ZmZlci5mcm9tKHByaXYuc3BsaXQoXCI9XCIpWzFdISwgXCJiYXNlNjRcIikudG9TdHJpbmcoKTtcbiAgYXJncy5wdXNoKC4uLkpTT04ucGFyc2UocHJpdikpO1xuICBsb2dnZXIuZGVidWcoXCJwdXBhcmdzXCIsIGFyZ3MpO1xuICByZXR1cm4gYXJncztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQcm9jZXNzSGFuZGxlIHtcbiAgcHJvY2VzczogQ2hpbGRQcm9jZXNzO1xuICB3YWl0OiBQcm9taXNlPHZvaWQ+O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXhlYyhjbWQ6IHN0cmluZywgb3B0aW9ucz86IFNwYXduT3B0aW9ucyk6IFByb2Nlc3NIYW5kbGUge1xuICBjb25zdCBwYXJ0cyA9IGNtZC5zcGxpdChcIiBcIikuZmlsdGVyKChzKSA9PiBzLmxlbmd0aCk7XG4gIGNvbnN0IFtjb21tYW5kLCAuLi5hcmdzXSA9IHBhcnRzO1xuICBpZiAoIWNvbW1hbmQpIHRocm93IG5ldyBFcnJvcihcImVtcHR5IGNvbW1hbmRcIik7XG4gIGNvbnN0IHByb2MgPSBzcGF3bihjb21tYW5kLCBhcmdzLCB7XG4gICAgc3RkaW86IFwiaW5oZXJpdFwiLFxuICAgIC4uLm9wdGlvbnMsXG4gIH0pO1xuICByZXR1cm4geyBwcm9jZXNzOiBwcm9jLCB3YWl0OiBsb2dnZXIuYXR0YWNoKHByb2MsIGNvbW1hbmQpIH07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA2LlxuXG5pbXBvcnQgeiBmcm9tIFwiem9kXCI7XG5pbXBvcnQgeyBwdXBEZXRlcm1pbmlzdGljLCBwdXBVc2VJbm5lclByb3h5IH0gZnJvbSBcIi4uL2Jhc2UvY29uc3RhbnRzXCI7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX1dJRFRIID0gMTkyMDtcbmV4cG9ydCBjb25zdCBERUZBVUxUX0hFSUdIVCA9IDEwODA7XG5leHBvcnQgY29uc3QgREVGQVVMVF9GUFMgPSAzMDtcbmV4cG9ydCBjb25zdCBERUZBVUxUX0RVUkFUSU9OID0gNTtcbmV4cG9ydCBjb25zdCBERUZBVUxUX09VVF9GSUxFID0gXCJvdXRwdXQubXA0XCI7XG5cbmV4cG9ydCBjb25zdCBSZW5kZXJTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIGR1cmF0aW9uOiB6Lm51bWJlcigpLmRlc2NyaWJlKFwiRHVyYXRpb24gaW4gc2Vjb25kc1wiKSxcbiAgd2lkdGg6IHoubnVtYmVyKCkuZGVzY3JpYmUoXCJWaWRlbyB3aWR0aFwiKSxcbiAgaGVpZ2h0OiB6Lm51bWJlcigpLmRlc2NyaWJlKFwiVmlkZW8gaGVpZ2h0XCIpLFxuICBmcHM6IHoubnVtYmVyKCkuZGVzY3JpYmUoXCJGcmFtZXMgcGVyIHNlY29uZFwiKSxcbiAgd2l0aEF1ZGlvOiB6LmJvb2xlYW4oKS5kZXNjcmliZShcIkNhcHR1cmUgYW5kIGVuY29kZSBhdWRpb1wiKSxcbiAgb3V0RmlsZTogei5zdHJpbmcoKS5kZXNjcmliZShcIk91dHB1dCBtcDQgZmlsZSBwYXRoXCIpLFxuICB1c2VJbm5lclByb3h5OiB6LmJvb2xlYW4oKS5kZXNjcmliZShcIlVzZSBiaWxpYmlsaSBpbm5lciBwcm94eSBmb3IgcmVzb3VyY2UgYWNjZXNzXCIpLFxuICBkZXRlcm1pbmlzdGljOiB6LmJvb2xlYW4oKS5kZXNjcmliZShcIlJlbmRlciBieSBmcmFtZSByYXRoZXIgdGhhbiByZWNvcmRpbmdcIiksXG59KTtcblxuZXhwb3J0IHR5cGUgUmVuZGVyT3B0aW9ucyA9IHouaW5mZXI8dHlwZW9mIFJlbmRlclNjaGVtYT47XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVuZGVyUmVzdWx0IHtcbiAgb3B0aW9uczogUmVuZGVyT3B0aW9ucztcbiAgd3JpdHRlbjogbnVtYmVyO1xuICBqYW5rOiBudW1iZXI7XG4gIG91dEZpbGU6IHN0cmluZztcbn1cblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRSZW5kZXJPcHRpb25zOiBSZW5kZXJPcHRpb25zID0ge1xuICB3aWR0aDogREVGQVVMVF9XSURUSCxcbiAgaGVpZ2h0OiBERUZBVUxUX0hFSUdIVCxcbiAgZnBzOiBERUZBVUxUX0ZQUyxcbiAgZHVyYXRpb246IERFRkFVTFRfRFVSQVRJT04sXG4gIG91dEZpbGU6IERFRkFVTFRfT1VUX0ZJTEUsXG4gIHdpdGhBdWRpbzogZmFsc2UsXG4gIHVzZUlubmVyUHJveHk6IHB1cFVzZUlubmVyUHJveHksXG4gIGRldGVybWluaXN0aWM6IHB1cERldGVybWluaXN0aWMsXG59O1xuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMS8zMC5cblxuZXhwb3J0IGNsYXNzIENvbmN1cnJlbmN5TGltaXRlciB7XG4gIHByaXZhdGUgX2FjdGl2ZSA9IDA7XG4gIHByaXZhdGUgX3F1ZXVlOiBWb2lkRnVuY3Rpb25bXSA9IFtdO1xuICBwcml2YXRlIF9lbmRlZCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKHJlYWRvbmx5IG1heENvbmN1cnJlbmN5OiBudW1iZXIpIHt9XG5cbiAgZ2V0IGFjdGl2ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9hY3RpdmU7XG4gIH1cblxuICBnZXQgcGVuZGluZygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9xdWV1ZS5sZW5ndGg7XG4gIH1cblxuICBnZXQgc3RhdHMoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYGFjdGl2ZTogJHt0aGlzLmFjdGl2ZX0sIHBlbmRpbmc6ICR7dGhpcy5wZW5kaW5nfWA7XG4gIH1cblxuICBhc3luYyBzY2hlZHVsZTxUPihmbjogKCkgPT4gUHJvbWlzZTxUPik6IFByb21pc2U8VD4ge1xuICAgIGlmICh0aGlzLl9lbmRlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZW5kZWRcIik7XG4gICAgfVxuICAgIHJldHVybiBuZXcgUHJvbWlzZTxUPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBydW4gPSAoKSA9PiB7XG4gICAgICAgIHRoaXMuX2FjdGl2ZSsrO1xuICAgICAgICBmbigpXG4gICAgICAgICAgLnRoZW4oKHYpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2FjdGl2ZS0tO1xuICAgICAgICAgICAgcmVzb2x2ZSh2KTtcbiAgICAgICAgICAgIHRoaXMubmV4dCgpO1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9hY3RpdmUtLTtcbiAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICAgIHRoaXMubmV4dCgpO1xuICAgICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIHRoaXMuX3F1ZXVlLnB1c2gocnVuKTtcbiAgICAgIHRoaXMubmV4dCgpO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZW5kKCkge1xuICAgIGlmICh0aGlzLl9lbmRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9lbmRlZCA9IHRydWU7XG4gICAgd2hpbGUgKHRoaXMuX2FjdGl2ZSA+IDAgfHwgdGhpcy5wZW5kaW5nID4gMCkge1xuICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHIpID0+IHNldFRpbWVvdXQociwgNTApKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG5leHQoKSB7XG4gICAgaWYgKHRoaXMuX2FjdGl2ZSA8IHRoaXMubWF4Q29uY3VycmVuY3kpIHtcbiAgICAgIHRoaXMuX3F1ZXVlLnNoaWZ0KCk/LigpO1xuICAgIH1cbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMy8yMS5cblxuaW1wb3J0IHsgQ29kZWNDb250ZXh0LCBGRm1wZWdFcnJvciwgRm9ybWF0Q29udGV4dCwgUGFja2V0IH0gZnJvbSBcIm5vZGUtYXZcIjtcblxuZXhwb3J0IGNsYXNzIEZvcm1hdE11eGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfY3R4OiBGb3JtYXRDb250ZXh0O1xuICBwcml2YXRlIF9vcGVuZWQgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihvdXRQYXRoOiBzdHJpbmcsIGZvcm1hdE5hbWU/OiBzdHJpbmcpIHtcbiAgICB0aGlzLl9jdHggPSBuZXcgRm9ybWF0Q29udGV4dCgpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcih0aGlzLl9jdHguYWxsb2NPdXRwdXRDb250ZXh0MihudWxsLCBmb3JtYXROYW1lID8/IG51bGwsIG91dFBhdGgpLCBcImFsbG9jT3V0cHV0Q29udGV4dDJcIik7XG4gIH1cblxuICBhZGRTdHJlYW0oY29kZWNDdHg6IENvZGVjQ29udGV4dCwgY29kZWNUYWc/OiBzdHJpbmcpOiBSZXR1cm5UeXBlPEZvcm1hdENvbnRleHRbXCJuZXdTdHJlYW1cIl0+IHtcbiAgICBjb25zdCBzdHJlYW0gPSB0aGlzLl9jdHgubmV3U3RyZWFtKG51bGwpO1xuICAgIHN0cmVhbS50aW1lQmFzZSA9IGNvZGVjQ3R4LnRpbWVCYXNlO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihzdHJlYW0uY29kZWNwYXIuZnJvbUNvbnRleHQoY29kZWNDdHgpLCBcImNvZGVjcGFyLmZyb21Db250ZXh0XCIpO1xuICAgIGlmIChjb2RlY1RhZykgc3RyZWFtLmNvZGVjcGFyLmNvZGVjVGFnID0gY29kZWNUYWc7XG4gICAgcmV0dXJuIHN0cmVhbTtcbiAgfVxuXG4gIGFzeW5jIG9wZW4oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX29wZW5lZCkgcmV0dXJuO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCB0aGlzLl9jdHgub3Blbk91dHB1dCgpLCBcIm9wZW5PdXRwdXRcIik7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IHRoaXMuX2N0eC53cml0ZUhlYWRlcihudWxsKSwgXCJ3cml0ZUhlYWRlclwiKTtcbiAgICB0aGlzLl9vcGVuZWQgPSB0cnVlO1xuICB9XG5cbiAgYXN5bmMgd3JpdGVQYWNrZXQocGt0OiBQYWNrZXQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgdGhpcy5fY3R4LmludGVybGVhdmVkV3JpdGVGcmFtZShwa3QpLCBcImludGVybGVhdmVkV3JpdGVGcmFtZVwiKTtcbiAgfVxuXG4gIGFzeW5jIFtTeW1ib2wuYXN5bmNEaXNwb3NlXSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuX29wZW5lZCkgcmV0dXJuO1xuICAgIGF3YWl0IHRoaXMuX2N0eC53cml0ZVRyYWlsZXIoKTtcbiAgICBhd2FpdCB0aGlzLl9jdHguY2xvc2VPdXRwdXQoKTtcbiAgICBhd2FpdCB0aGlzLl9jdHhbU3ltYm9sLmFzeW5jRGlzcG9zZV0oKTtcbiAgICB0aGlzLl9vcGVuZWQgPSBmYWxzZTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8wMS5cblxuaW1wb3J0IHsgQ29kZWMsIENvZGVjQ29udGV4dCwgRkZtcGVnRXJyb3IsIEZpbHRlciwgRmlsdGVyR3JhcGgsIEZpbHRlckluT3V0LCBGcmFtZSwgUGFja2V0LCBSYXRpb25hbCB9IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQge1xuICBBVl9DSEFOTkVMX0xBWU9VVF9TVEVSRU8sXG4gIEFWX0NPREVDX0ZMQUdfR0xPQkFMX0hFQURFUixcbiAgQVZfU0FNUExFX0ZNVF9GTFQsXG4gIEFWX1NBTVBMRV9GTVRfRkxUUCxcbiAgQVZFUlJPUl9FQUdBSU4sXG4gIEFWRVJST1JfRU9GLFxuICB0eXBlIEZGQXVkaW9FbmNvZGVyLFxufSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcbmltcG9ydCB0eXBlIHsgRm9ybWF0TXV4ZXIgfSBmcm9tIFwiLi9tdXhlclwiO1xuXG5jb25zdCBTQU1QTEVfRk1UX05BTUU6IFBhcnRpYWw8UmVjb3JkPG51bWJlciwgc3RyaW5nPj4gPSB7IFtBVl9TQU1QTEVfRk1UX0ZMVF06IFwiZmx0XCIsIFtBVl9TQU1QTEVfRk1UX0ZMVFBdOiBcImZsdHBcIiB9O1xudHlwZSBTdHJlYW0gPSBSZXR1cm5UeXBlPGltcG9ydChcIm5vZGUtYXZcIikuRm9ybWF0Q29udGV4dFtcIm5ld1N0cmVhbVwiXT47XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXVkaW9FbmNvZGVyT3B0aW9ucyB7XG4gIG91dFNhbXBsZVJhdGU6IG51bWJlcjtcbiAgb3V0U2FtcGxlRm10OiB0eXBlb2YgQVZfU0FNUExFX0ZNVF9GTFQgfCB0eXBlb2YgQVZfU0FNUExFX0ZNVF9GTFRQO1xuICBjb2RlY05hbWU6IEZGQXVkaW9FbmNvZGVyO1xuICBnbG9iYWxIZWFkZXI6IGJvb2xlYW47XG4gIGJpdHJhdGU6IG51bWJlcjtcbiAgbXV4ZXI6IEZvcm1hdE11eGVyO1xufVxuXG5leHBvcnQgY2xhc3MgQXVkaW9FbmNvZGVyIGltcGxlbWVudHMgRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgX2N0eDogQ29kZWNDb250ZXh0O1xuICBwcml2YXRlIF9zdHJlYW06IFN0cmVhbTtcbiAgcHJpdmF0ZSBfcGt0OiBQYWNrZXQ7XG4gIHByaXZhdGUgX291dFJhdGU6IG51bWJlcjtcbiAgcHJpdmF0ZSBfb3V0Rm10OiB0eXBlb2YgQVZfU0FNUExFX0ZNVF9GTFQgfCB0eXBlb2YgQVZfU0FNUExFX0ZNVF9GTFRQO1xuICBwcml2YXRlIF9mcmFtZVNpemU6IG51bWJlcjtcbiAgcHJpdmF0ZSBfZmlsdGVyRnJhbWU6IEZyYW1lO1xuICBwcml2YXRlIF9ncmFwaD86IEZpbHRlckdyYXBoO1xuICBwcml2YXRlIF9idWZTcmM/OiBhbnk7XG4gIHByaXZhdGUgX2J1ZlNpbms/OiBhbnk7XG4gIHByaXZhdGUgX2luUmF0ZT86IG51bWJlcjtcbiAgcHJpdmF0ZSBfcHRzID0gMG47XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihjdHg6IENvZGVjQ29udGV4dCwgc3RyZWFtOiBTdHJlYW0sIG91dEZtdDogdHlwZW9mIEFWX1NBTVBMRV9GTVRfRkxUIHwgdHlwZW9mIEFWX1NBTVBMRV9GTVRfRkxUUCkge1xuICAgIHRoaXMuX2N0eCA9IGN0eDtcbiAgICB0aGlzLl9zdHJlYW0gPSBzdHJlYW07XG4gICAgdGhpcy5fb3V0UmF0ZSA9IGN0eC5zYW1wbGVSYXRlO1xuICAgIHRoaXMuX291dEZtdCA9IG91dEZtdDtcbiAgICB0aGlzLl9mcmFtZVNpemUgPSBjdHguZnJhbWVTaXplO1xuICAgIHRoaXMuX3BrdCA9IG5ldyBQYWNrZXQoKTtcbiAgICB0aGlzLl9wa3QuYWxsb2MoKTtcbiAgICB0aGlzLl9maWx0ZXJGcmFtZSA9IG5ldyBGcmFtZSgpO1xuICAgIHRoaXMuX2ZpbHRlckZyYW1lLmFsbG9jKCk7XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgY3JlYXRlKG9wdHM6IEF1ZGlvRW5jb2Rlck9wdGlvbnMpOiBQcm9taXNlPEF1ZGlvRW5jb2Rlcj4ge1xuICAgIGNvbnN0IGNvZGVjID0gQ29kZWMuZmluZEVuY29kZXJCeU5hbWUob3B0cy5jb2RlY05hbWUpO1xuICAgIGlmICghY29kZWMpIHRocm93IG5ldyBFcnJvcihgQXVkaW8gZW5jb2RlciBub3QgZm91bmQ6ICR7b3B0cy5jb2RlY05hbWV9YCk7XG4gICAgY29uc3QgY3R4ID0gbmV3IENvZGVjQ29udGV4dCgpO1xuICAgIGN0eC5hbGxvY0NvbnRleHQzKGNvZGVjKTtcbiAgICBjdHguY29kZWNJZCA9IGNvZGVjLmlkO1xuICAgIGN0eC5zYW1wbGVGb3JtYXQgPSBvcHRzLm91dFNhbXBsZUZtdDtcbiAgICBjdHguc2FtcGxlUmF0ZSA9IG9wdHMub3V0U2FtcGxlUmF0ZTtcbiAgICBjdHguY2hhbm5lbExheW91dCA9IEFWX0NIQU5ORUxfTEFZT1VUX1NURVJFTztcbiAgICBjdHgudGltZUJhc2UgPSBuZXcgUmF0aW9uYWwoMSwgb3B0cy5vdXRTYW1wbGVSYXRlKTtcbiAgICBjdHguYml0UmF0ZSA9IEJpZ0ludChvcHRzLmJpdHJhdGUpO1xuICAgIGlmIChvcHRzLmdsb2JhbEhlYWRlcikgY3R4LnNldEZsYWdzKEFWX0NPREVDX0ZMQUdfR0xPQkFMX0hFQURFUik7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IGN0eC5vcGVuMihjb2RlYywgbnVsbCksIFwiYXVkaW9DdHgub3BlbjJcIik7XG4gICAgY29uc3Qgc3RyZWFtID0gb3B0cy5tdXhlci5hZGRTdHJlYW0oY3R4KTtcbiAgICByZXR1cm4gbmV3IEF1ZGlvRW5jb2RlcihjdHgsIHN0cmVhbSwgb3B0cy5vdXRTYW1wbGVGbXQpO1xuICB9XG5cbiAgc2V0SW5wdXRSYXRlKGluU2FtcGxlUmF0ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5fZ3JhcGg/LltTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICB0aGlzLl9pblJhdGUgPSBpblNhbXBsZVJhdGU7XG4gICAgY29uc3QgZ3JhcGggPSBuZXcgRmlsdGVyR3JhcGgoKTtcbiAgICBncmFwaC5hbGxvYygpO1xuICAgIGNvbnN0IGFidWZmZXIgPSBGaWx0ZXIuZ2V0QnlOYW1lKFwiYWJ1ZmZlclwiKSE7XG4gICAgY29uc3QgYnVmU3JjID0gZ3JhcGguY3JlYXRlRmlsdGVyKFxuICAgICAgYWJ1ZmZlcixcbiAgICAgIFwic3JjXCIsXG4gICAgICBgc2FtcGxlX3JhdGU9JHtpblNhbXBsZVJhdGV9OnNhbXBsZV9mbXQ9Zmx0OmNoYW5uZWxfbGF5b3V0PXN0ZXJlbzp0aW1lX2Jhc2U9MS8ke2luU2FtcGxlUmF0ZX1gLFxuICAgICk7XG4gICAgaWYgKCFidWZTcmMpIHRocm93IG5ldyBFcnJvcihcIkZhaWxlZCB0byBjcmVhdGUgYWJ1ZmZlclwiKTtcbiAgICBjb25zdCBhYnVmZmVyc2luayA9IEZpbHRlci5nZXRCeU5hbWUoXCJhYnVmZmVyc2lua1wiKSE7XG4gICAgY29uc3QgYnVmU2luayA9IGdyYXBoLmNyZWF0ZUZpbHRlcihhYnVmZmVyc2luaywgXCJzaW5rXCIpO1xuICAgIGlmICghYnVmU2luaykgdGhyb3cgbmV3IEVycm9yKFwiRmFpbGVkIHRvIGNyZWF0ZSBhYnVmZmVyc2lua1wiKTtcbiAgICBjb25zdCBmbXROYW1lID0gU0FNUExFX0ZNVF9OQU1FW3RoaXMuX291dEZtdF0gPz8gXCJmbHRcIjtcbiAgICBjb25zdCBmaWx0ZXJEZXNjID0gYGFmb3JtYXQ9c2FtcGxlX2ZtdHM9JHtmbXROYW1lfTpzYW1wbGVfcmF0ZXM9JHt0aGlzLl9vdXRSYXRlfTpjaGFubmVsX2xheW91dHM9c3RlcmVvLGFzZXRuc2FtcGxlcz1uPSR7dGhpcy5fZnJhbWVTaXplfTpwPTFgO1xuICAgIGNvbnN0IG91dHB1dHMgPSBGaWx0ZXJJbk91dC5jcmVhdGVMaXN0KFt7IG5hbWU6IFwiaW5cIiwgZmlsdGVyQ3R4OiBidWZTcmMsIHBhZElkeDogMCB9XSk7XG4gICAgY29uc3QgaW5wdXRzID0gRmlsdGVySW5PdXQuY3JlYXRlTGlzdChbeyBuYW1lOiBcIm91dFwiLCBmaWx0ZXJDdHg6IGJ1ZlNpbmssIHBhZElkeDogMCB9XSk7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGdyYXBoLnBhcnNlUHRyKGZpbHRlckRlc2MsIGlucHV0cywgb3V0cHV0cyksIFwiZ3JhcGgucGFyc2VQdHJcIik7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGdyYXBoLmNvbmZpZ1N5bmMoKSwgXCJncmFwaC5jb25maWdcIik7XG4gICAgdGhpcy5fZ3JhcGggPSBncmFwaDtcbiAgICB0aGlzLl9idWZTcmMgPSBidWZTcmM7XG4gICAgdGhpcy5fYnVmU2luayA9IGJ1ZlNpbms7XG4gIH1cblxuICBhc3luYyBlbmNvZGUocGNtOiBCdWZmZXIsIG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5fYnVmU3JjIHx8ICF0aGlzLl9pblJhdGUpIHJldHVybjtcbiAgICBjb25zdCBzcmMgPSBuZXcgRmxvYXQzMkFycmF5KHBjbS5idWZmZXIsIHBjbS5ieXRlT2Zmc2V0LCBwY20uYnl0ZUxlbmd0aCAvIDQpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3JjLmxlbmd0aDsgaSsrKSBpZiAoIWlzRmluaXRlKHNyY1tpXSEpKSBzcmNbaV0gPSAwO1xuICAgIGNvbnN0IG5TYW1wbGVzID0gc3JjLmxlbmd0aCA+PiAxO1xuICAgIHVzaW5nIGZyYW1lID0gRnJhbWUuZnJvbUF1ZGlvQnVmZmVyKEJ1ZmZlci5mcm9tKHNyYy5idWZmZXIsIHNyYy5ieXRlT2Zmc2V0LCBzcmMuYnl0ZUxlbmd0aCksIHtcbiAgICAgIG5iU2FtcGxlczogblNhbXBsZXMsXG4gICAgICBmb3JtYXQ6IEFWX1NBTVBMRV9GTVRfRkxULFxuICAgICAgc2FtcGxlUmF0ZTogdGhpcy5faW5SYXRlLFxuICAgICAgY2hhbm5lbExheW91dDogQVZfQ0hBTk5FTF9MQVlPVVRfU1RFUkVPLFxuICAgICAgcHRzOiB0aGlzLl9wdHMsXG4gICAgICB0aW1lQmFzZTogeyBudW06IDEsIGRlbjogdGhpcy5faW5SYXRlIH0sXG4gICAgfSk7XG4gICAgdGhpcy5fcHRzICs9IEJpZ0ludChuU2FtcGxlcyk7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IHRoaXMuX2J1ZlNyYy5idWZmZXJzcmNBZGRGcmFtZShmcmFtZSksIFwiYnVmZmVyc3JjQWRkRnJhbWVcIik7XG4gICAgYXdhaXQgdGhpcy5kcmFpbihtdXhlcik7XG4gIH1cblxuICBhc3luYyBmbHVzaChtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fYnVmU3JjKSB7XG4gICAgICBhd2FpdCB0aGlzLl9idWZTcmMuYnVmZmVyc3JjQWRkRnJhbWUobnVsbCk7XG4gICAgICBhd2FpdCB0aGlzLmRyYWluKG11eGVyKTtcbiAgICB9XG4gICAgYXdhaXQgdGhpcy5fY3R4LnNlbmRGcmFtZShudWxsKTtcbiAgICBhd2FpdCB0aGlzLmRyYWluQ29kZWMobXV4ZXIpO1xuICB9XG5cbiAgW1N5bWJvbC5kaXNwb3NlXSgpOiB2b2lkIHtcbiAgICB0aGlzLl9wa3QuZnJlZSgpO1xuICAgIHRoaXMuX2ZpbHRlckZyYW1lLmZyZWUoKTtcbiAgICB0aGlzLl9ncmFwaD8uW1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgIHRoaXMuX2N0eC5mcmVlQ29udGV4dCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBkcmFpbihtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgY29uc3QgciA9IGF3YWl0IHRoaXMuX2J1ZlNpbmshLmJ1ZmZlcnNpbmtHZXRGcmFtZSh0aGlzLl9maWx0ZXJGcmFtZSk7XG4gICAgICBpZiAociA9PT0gQVZFUlJPUl9FQUdBSU4gfHwgciA9PT0gQVZFUlJPUl9FT0YpIGJyZWFrO1xuICAgICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKHIsIFwiYnVmZmVyc2lua0dldEZyYW1lXCIpO1xuICAgICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IHRoaXMuX2N0eC5zZW5kRnJhbWUodGhpcy5fZmlsdGVyRnJhbWUpLCBcImF1ZGlvQ3R4LnNlbmRGcmFtZVwiKTtcbiAgICAgIHRoaXMuX2ZpbHRlckZyYW1lLnVucmVmKCk7XG4gICAgICBhd2FpdCB0aGlzLmRyYWluQ29kZWMobXV4ZXIpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZHJhaW5Db2RlYyhtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgY29uc3QgciA9IGF3YWl0IHRoaXMuX2N0eC5yZWNlaXZlUGFja2V0KHRoaXMuX3BrdCk7XG4gICAgICBpZiAociA9PT0gQVZFUlJPUl9FQUdBSU4gfHwgciA9PT0gQVZFUlJPUl9FT0YpIGJyZWFrO1xuICAgICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKHIsIFwiYXVkaW8ucmVjZWl2ZVBhY2tldFwiKTtcbiAgICAgIHRoaXMuX3BrdC5zdHJlYW1JbmRleCA9IHRoaXMuX3N0cmVhbS5pbmRleDtcbiAgICAgIHRoaXMuX3BrdC5yZXNjYWxlVHModGhpcy5fY3R4LnRpbWVCYXNlLCB0aGlzLl9zdHJlYW0udGltZUJhc2UpO1xuICAgICAgYXdhaXQgbXV4ZXIud3JpdGVQYWNrZXQodGhpcy5fcGt0KTtcbiAgICAgIHRoaXMuX3BrdC51bnJlZigpO1xuICAgIH1cbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8wMy5cblxuaW1wb3J0IHsgb2sgfSBmcm9tIFwiYXNzZXJ0XCI7XG5pbXBvcnQge1xuICBBVl9QSVhfRk1UX0JHUkEsXG4gIEFWX1BJWF9GTVRfWVVWQTQyMFAsXG4gIENvZGVjLFxuICBDb2RlY0NvbnRleHQsXG4gIEZGX0RFQ09ERVJfUE5HLFxuICBGRm1wZWdFcnJvcixcbiAgRnJhbWUsXG4gIFBhY2tldCxcbiAgU29mdHdhcmVTY2FsZUNvbnRleHQsXG4gIFNXU19CSUxJTkVBUixcbiAgdHlwZSBBVlBpeGVsRm9ybWF0LFxufSBmcm9tIFwibm9kZS1hdlwiO1xuXG5mdW5jdGlvbiBtYWtlRnJhbWUod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIsIHBpeEZtdDogQVZQaXhlbEZvcm1hdCk6IEZyYW1lIHtcbiAgY29uc3QgZnJhbWUgPSBuZXcgRnJhbWUoKTtcbiAgZnJhbWUuYWxsb2MoKTtcbiAgZnJhbWUuZm9ybWF0ID0gcGl4Rm10O1xuICBmcmFtZS53aWR0aCA9IHdpZHRoO1xuICBmcmFtZS5oZWlnaHQgPSBoZWlnaHQ7XG4gIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihmcmFtZS5nZXRCdWZmZXIoMCksIFwiZnJhbWUuZ2V0QnVmZmVyXCIpO1xuICByZXR1cm4gZnJhbWU7XG59XG5cbmZ1bmN0aW9uIG1ha2VTV1NDb250ZXh0KHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyLCBwaXhGbXQ6IEFWUGl4ZWxGb3JtYXQpIHtcbiAgY29uc3Qgc3dzID0gbmV3IFNvZnR3YXJlU2NhbGVDb250ZXh0KCk7XG4gIHN3cy5nZXRDb250ZXh0KHdpZHRoLCBoZWlnaHQsIHBpeEZtdCwgd2lkdGgsIGhlaWdodCwgQVZfUElYX0ZNVF9ZVVZBNDIwUCwgU1dTX0JJTElORUFSKTtcbiAgcmV0dXJuIHN3cztcbn1cblxuZXhwb3J0IGNsYXNzIENvZGVjU3RhdGUgaW1wbGVtZW50cyBEaXNwb3NhYmxlIHtcbiAgcmVhZG9ubHkgc3JjOiBGcmFtZTtcbiAgcmVhZG9ubHkgZHN0OiBGcmFtZTtcbiAgcmVhZG9ubHkgcGt0OiBQYWNrZXQ7XG4gIHByaXZhdGUgX3N3cz86IFNvZnR3YXJlU2NhbGVDb250ZXh0O1xuICBwcml2YXRlIF9wbmc/OiBDb2RlYztcblxuICBzdGF0aWMgYXN5bmMgY3JlYXRlKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKSB7XG4gICAgY29uc3QgY29kZWMgPSBDb2RlYy5maW5kRGVjb2RlckJ5TmFtZShGRl9ERUNPREVSX1BORyk7XG4gICAgb2soY29kZWMsIFwicG5nIGRlY29kZXIgdW5hdmFpbGFibGVcIik7XG4gICAgcmV0dXJuIG5ldyBDb2RlY1N0YXRlKHdpZHRoLCBoZWlnaHQsIGNvZGVjKTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3Iod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIsIHBuZzogQ29kZWMpIHtcbiAgICB0aGlzLl9wbmcgPSBwbmc7XG4gICAgdGhpcy5zcmMgPSBtYWtlRnJhbWUod2lkdGgsIGhlaWdodCwgQVZfUElYX0ZNVF9CR1JBKTtcbiAgICB0aGlzLmRzdCA9IG1ha2VGcmFtZSh3aWR0aCwgaGVpZ2h0LCBBVl9QSVhfRk1UX1lVVkE0MjBQKTtcbiAgICB0aGlzLnBrdCA9IG5ldyBQYWNrZXQoKTtcbiAgICB0aGlzLnBrdC5hbGxvYygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIGZyZXNoIFBORyBkZWNvZGVyIGNvbnRleHQuXG4gICAqIFRoZSBGRm1wZWcgUE5HIGRlY29kZXIgYWNjdW11bGF0ZXMgQVBORyBibGVuZGluZyBzdGF0ZVxuICAgKiBhY3Jvc3MgZnJhbWVzLCBzbyBhIHNoYXJlZCBpbnN0YW5jZSBjb3JydXB0cyBvdXRwdXQgd2hlbiBkZWNvZGluZyBzdGFuZGFsb25lIFBOR3MuXG4gICAqL1xuICBhc3luYyBwbmcoKTogUHJvbWlzZTxDb2RlY0NvbnRleHQ+IHtcbiAgICBjb25zdCBwbmcgPSBuZXcgQ29kZWNDb250ZXh0KCk7XG4gICAgcG5nLmFsbG9jQ29udGV4dDModGhpcy5fcG5nKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgcG5nLm9wZW4yKHRoaXMuX3BuZyksIFwicG5nRGVjb2Rlci5vcGVuMlwiKTtcbiAgICByZXR1cm4gcG5nO1xuICB9XG5cbiAgZ2V0IHN3cygpIHtcbiAgICBpZiAoIXRoaXMuX3N3cykge1xuICAgICAgdGhpcy5fc3dzID0gbWFrZVNXU0NvbnRleHQodGhpcy5zcmMud2lkdGgsIHRoaXMuc3JjLmhlaWdodCwgdGhpcy5zcmMuZm9ybWF0IGFzIEFWUGl4ZWxGb3JtYXQpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fc3dzO1xuICB9XG5cbiAgW1N5bWJvbC5kaXNwb3NlXSgpOiB2b2lkIHtcbiAgICB0aGlzLnNyY1tTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICB0aGlzLmRzdFtTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICB0aGlzLnBrdFtTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICB0aGlzLl9zd3M/LltTeW1ib2wuZGlzcG9zZV0oKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMy8yMS5cblxuaW1wb3J0IHsgQ29kZWMsIENvZGVjQ29udGV4dCwgRkZtcGVnRXJyb3IsIEZyYW1lLCBQYWNrZXQsIFJhdGlvbmFsIH0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB7XG4gIEFWX0NPREVDX0ZMQUdfR0xPQkFMX0hFQURFUixcbiAgQVZFUlJPUl9FQUdBSU4sXG4gIEFWRVJST1JfRU9GLFxuICB0eXBlIEFWUGl4ZWxGb3JtYXQsXG4gIHR5cGUgRkZWaWRlb0VuY29kZXIsXG59IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuaW1wb3J0IHR5cGUgeyBGb3JtYXRNdXhlciB9IGZyb20gXCIuL211eGVyXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmlkZW9FbmNvZGVyT3B0aW9ucyB7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICBmcHM6IG51bWJlcjtcbiAgY29kZWNOYW1lOiBGRlZpZGVvRW5jb2RlcjtcbiAgY29kZWNUYWc/OiBzdHJpbmc7XG4gIGdsb2JhbEhlYWRlcjogYm9vbGVhbjtcbiAgY29kZWNPcHRzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICBiaXRyYXRlOiBudW1iZXI7XG4gIHBpeGVsRm9ybWF0OiBBVlBpeGVsRm9ybWF0O1xuICBtdXhlcjogRm9ybWF0TXV4ZXI7XG59XG5cbnR5cGUgU3RyZWFtID0gUmV0dXJuVHlwZTxpbXBvcnQoXCJub2RlLWF2XCIpLkZvcm1hdENvbnRleHRbXCJuZXdTdHJlYW1cIl0+O1xuXG5leHBvcnQgY2xhc3MgVmlkZW9FbmNvZGVyIGltcGxlbWVudHMgRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2N0eDogQ29kZWNDb250ZXh0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9wa3Q6IFBhY2tldDtcbiAgcHJpdmF0ZSByZWFkb25seSBfc3RyZWFtOiBTdHJlYW07XG4gIHByaXZhdGUgX3B0cyA9IDBuO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoY3R4OiBDb2RlY0NvbnRleHQsIHBrdDogUGFja2V0LCBzdHJlYW06IFN0cmVhbSkge1xuICAgIHRoaXMuX2N0eCA9IGN0eDtcbiAgICB0aGlzLl9wa3QgPSBwa3Q7XG4gICAgdGhpcy5fc3RyZWFtID0gc3RyZWFtO1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIGNyZWF0ZShvcHRzOiBWaWRlb0VuY29kZXJPcHRpb25zKTogUHJvbWlzZTxWaWRlb0VuY29kZXI+IHtcbiAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQsIGZwcywgY29kZWNOYW1lLCBjb2RlY1RhZywgZ2xvYmFsSGVhZGVyLCBjb2RlY09wdHMsIGJpdHJhdGUsIG11eGVyIH0gPSBvcHRzO1xuXG4gICAgY29uc3QgY29kZWMgPSBDb2RlYy5maW5kRW5jb2RlckJ5TmFtZShjb2RlY05hbWUpO1xuICAgIGlmICghY29kZWMpIHRocm93IG5ldyBFcnJvcihgVmlkZW8gZW5jb2RlciBub3QgZm91bmQ6ICR7Y29kZWNOYW1lfWApO1xuXG4gICAgY29uc3QgY3R4ID0gbmV3IENvZGVjQ29udGV4dCgpO1xuICAgIGN0eC5hbGxvY0NvbnRleHQzKGNvZGVjKTtcbiAgICBjdHguY29kZWNJZCA9IGNvZGVjLmlkO1xuICAgIGN0eC53aWR0aCA9IHdpZHRoO1xuICAgIGN0eC5oZWlnaHQgPSBoZWlnaHQ7XG4gICAgY3R4LnBpeGVsRm9ybWF0ID0gb3B0cy5waXhlbEZvcm1hdDtcbiAgICBjdHgudGltZUJhc2UgPSBuZXcgUmF0aW9uYWwoMSwgZnBzKTtcbiAgICBjdHguZnJhbWVyYXRlID0gbmV3IFJhdGlvbmFsKGZwcywgMSk7XG4gICAgY3R4LmdvcFNpemUgPSBmcHMgKiAyO1xuICAgIGN0eC5iaXRSYXRlID0gQmlnSW50KGJpdHJhdGUpO1xuICAgIGlmIChnbG9iYWxIZWFkZXIpIGN0eC5zZXRGbGFncyhBVl9DT0RFQ19GTEFHX0dMT0JBTF9IRUFERVIpO1xuICAgIGZvciAoY29uc3QgW2ssIHZdIG9mIE9iamVjdC5lbnRyaWVzKGNvZGVjT3B0cykpIGN0eC5zZXRPcHRpb24oaywgdik7XG4gICAgaWYgKGNvZGVjVGFnKSBjdHguY29kZWNUYWcgPSBjb2RlY1RhZztcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgY3R4Lm9wZW4yKGNvZGVjLCBudWxsKSwgXCJ2aWRlb0N0eC5vcGVuMlwiKTtcblxuICAgIGNvbnN0IHBrdCA9IG5ldyBQYWNrZXQoKTtcbiAgICBwa3QuYWxsb2MoKTtcblxuICAgIGNvbnN0IHN0cmVhbSA9IG11eGVyLmFkZFN0cmVhbShjdHgsIGNvZGVjVGFnKTtcbiAgICByZXR1cm4gbmV3IFZpZGVvRW5jb2RlcihjdHgsIHBrdCwgc3RyZWFtKTtcbiAgfVxuXG4gIGFzeW5jIGVuY29kZShmcmFtZTogRnJhbWUsIG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGZyYW1lLnB0cyA9IHRoaXMuX3B0cysrO1xuICAgIGZyYW1lLmR1cmF0aW9uID0gMW47XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IHRoaXMuX2N0eC5zZW5kRnJhbWUoZnJhbWUpLCBcInZpZGVvQ3R4LnNlbmRGcmFtZVwiKTtcbiAgICBhd2FpdCB0aGlzLmRyYWluKG11eGVyKTtcbiAgfVxuXG4gIGFzeW5jIGZsdXNoKG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuX2N0eC5zZW5kRnJhbWUobnVsbCk7XG4gICAgYXdhaXQgdGhpcy5kcmFpbihtdXhlcik7XG4gIH1cblxuICBbU3ltYm9sLmRpc3Bvc2VdKCk6IHZvaWQge1xuICAgIHRoaXMuX3BrdC5mcmVlKCk7XG4gICAgdGhpcy5fY3R4LmZyZWVDb250ZXh0KCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGRyYWluKG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHBrdCA9IHRoaXMuX3BrdDtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgY29uc3QgciA9IGF3YWl0IHRoaXMuX2N0eC5yZWNlaXZlUGFja2V0KHBrdCk7XG4gICAgICBpZiAociA9PT0gQVZFUlJPUl9FQUdBSU4gfHwgciA9PT0gQVZFUlJPUl9FT0YpIGJyZWFrO1xuICAgICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKHIsIFwidmlkZW8ucmVjZWl2ZVBhY2tldFwiKTtcbiAgICAgIHBrdC5zdHJlYW1JbmRleCA9IHRoaXMuX3N0cmVhbS5pbmRleDtcbiAgICAgIGlmIChwa3QuZHVyYXRpb24gPT09IDBuKSBwa3QuZHVyYXRpb24gPSAxbjtcbiAgICAgIHBrdC5yZXNjYWxlVHModGhpcy5fY3R4LnRpbWVCYXNlLCB0aGlzLl9zdHJlYW0udGltZUJhc2UpO1xuICAgICAgYXdhaXQgbXV4ZXIud3JpdGVQYWNrZXQocGt0KTtcbiAgICAgIHBrdC51bnJlZigpO1xuICAgIH1cbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8wMS5cblxuaW1wb3J0IHsgRkZtcGVnRXJyb3IgfSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHsgQVZfUElYX0ZNVF9ZVVZBNDIwUCwgQVZfU0FNUExFX0ZNVF9GTFRQLCBGRl9FTkNPREVSX0FBQywgRkZfRU5DT0RFUl9MSUJYMjY1IH0gZnJvbSBcIm5vZGUtYXYvY29uc3RhbnRzXCI7XG5cbmltcG9ydCB7IG9rIH0gZnJvbSBcImFzc2VydFwiO1xuaW1wb3J0IHsgQ29uY3VycmVuY3lMaW1pdGVyIH0gZnJvbSBcIi4uL2xpbWl0ZXIuanNcIjtcbmltcG9ydCB7IEF1ZGlvRW5jb2RlciB9IGZyb20gXCIuL2F1ZGlvXCI7XG5pbXBvcnQgeyBDb2RlY1N0YXRlIH0gZnJvbSBcIi4vY29kZWMuanNcIjtcbmltcG9ydCB7IEZvcm1hdE11eGVyIH0gZnJvbSBcIi4vbXV4ZXJcIjtcbmltcG9ydCB7IFZpZGVvRW5jb2RlciB9IGZyb20gXCIuL3ZpZGVvXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRW5jb2RlclBpcGVsaW5lT3B0aW9ucyB7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICBmcHM6IG51bWJlcjtcbiAgb3V0RmlsZTogc3RyaW5nO1xuICB3aXRoQXVkaW8/OiBib29sZWFuO1xufVxuXG5leHBvcnQgY2xhc3MgRW5jb2RlclBpcGVsaW5lIHtcbiAgcHJpdmF0ZSBfZGlzcG9zZWQgPSBmYWxzZTtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgX3ZpZGVvOiBWaWRlb0VuY29kZXIsXG4gICAgcHJpdmF0ZSBfYXVkaW86IEF1ZGlvRW5jb2RlciB8IHVuZGVmaW5lZCxcbiAgICBwcml2YXRlIF9tdXhlcjogRm9ybWF0TXV4ZXIsXG4gICAgcHJpdmF0ZSBfbGltaXRlcjogQ29uY3VycmVuY3lMaW1pdGVyLFxuICAgIHByaXZhdGUgX291dEZpbGU6IHN0cmluZyxcbiAgICBwcml2YXRlIF9jb2RlYzogQ29kZWNTdGF0ZSxcbiAgKSB7fVxuXG4gIHN0YXRpYyBhc3luYyBjcmVhdGUob3B0czogRW5jb2RlclBpcGVsaW5lT3B0aW9ucyk6IFByb21pc2U8RW5jb2RlclBpcGVsaW5lPiB7XG4gICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0LCBmcHMsIG91dEZpbGUsIHdpdGhBdWRpbyA9IGZhbHNlIH0gPSBvcHRzO1xuICAgIGNvbnN0IG11eGVyID0gbmV3IEZvcm1hdE11eGVyKG91dEZpbGUpO1xuXG4gICAgY29uc3QgdmlkZW8gPSBhd2FpdCBWaWRlb0VuY29kZXIuY3JlYXRlKHtcbiAgICAgIHdpZHRoLFxuICAgICAgaGVpZ2h0LFxuICAgICAgZnBzLFxuICAgICAgY29kZWNOYW1lOiBGRl9FTkNPREVSX0xJQlgyNjUsXG4gICAgICBjb2RlY1RhZzogXCJodmMxXCIsXG4gICAgICBnbG9iYWxIZWFkZXI6IHRydWUsXG4gICAgICBjb2RlY09wdHM6IHsgcHJlc2V0OiBcInVsdHJhZmFzdFwiLCBcIngyNjUtcGFyYW1zXCI6IFwibG9nLWxldmVsPTE6YmZyYW1lcz0wXCIgfSxcbiAgICAgIGJpdHJhdGU6IDhfMDAwXzAwMCxcbiAgICAgIHBpeGVsRm9ybWF0OiBBVl9QSVhfRk1UX1lVVkE0MjBQLFxuICAgICAgbXV4ZXIsXG4gICAgfSk7XG5cbiAgICBsZXQgYXVkaW86IEF1ZGlvRW5jb2RlciB8IHVuZGVmaW5lZDtcbiAgICBpZiAod2l0aEF1ZGlvKSB7XG4gICAgICBhdWRpbyA9IGF3YWl0IEF1ZGlvRW5jb2Rlci5jcmVhdGUoe1xuICAgICAgICBvdXRTYW1wbGVSYXRlOiA0NF8xMDAsXG4gICAgICAgIG91dFNhbXBsZUZtdDogQVZfU0FNUExFX0ZNVF9GTFRQLFxuICAgICAgICBjb2RlY05hbWU6IEZGX0VOQ09ERVJfQUFDLFxuICAgICAgICBnbG9iYWxIZWFkZXI6IHRydWUsXG4gICAgICAgIGJpdHJhdGU6IDEyOF8wMDAsXG4gICAgICAgIG11eGVyLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXdhaXQgbXV4ZXIub3BlbigpO1xuXG4gICAgcmV0dXJuIG5ldyBFbmNvZGVyUGlwZWxpbmUoXG4gICAgICB2aWRlbyxcbiAgICAgIGF1ZGlvLFxuICAgICAgbXV4ZXIsXG4gICAgICBuZXcgQ29uY3VycmVuY3lMaW1pdGVyKDEpLFxuICAgICAgb3V0RmlsZSxcbiAgICAgIGF3YWl0IENvZGVjU3RhdGUuY3JlYXRlKHdpZHRoLCBoZWlnaHQpLFxuICAgICk7XG4gIH1cblxuICBzZXR1cEF1ZGlvKHNhbXBsZVJhdGU6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuX2F1ZGlvPy5zZXRJbnB1dFJhdGUoc2FtcGxlUmF0ZSk7XG4gIH1cblxuICBhc3luYyBlbmNvZGVCR1JBKGlucHV0OiBCdWZmZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLl9saW1pdGVyLnNjaGVkdWxlKGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHsgc3JjLCBkc3QsIHN3cyB9ID0gdGhpcy5fY29kZWM7XG4gICAgICBvayhzd3MsIFwic3dzIG5vdCBpbml0aWFsaXplZFwiKTtcbiAgICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihzcmMubWFrZVdyaXRhYmxlKCksIFwiYmdyYVNyYy5tYWtlV3JpdGFibGVcIik7XG4gICAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3Ioc3JjLmZyb21CdWZmZXIoaW5wdXQpLCBcImJncmFTcmMuZnJvbUJ1ZmZlclwiKTtcbiAgICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihkc3QubWFrZVdyaXRhYmxlKCksIFwiYmdyYURzdC5tYWtlV3JpdGFibGVcIik7XG4gICAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgc3dzLnNjYWxlRnJhbWUoZHN0LCBzcmMpLCBcImJncmFTd3Muc2NhbGVGcmFtZVwiKTtcbiAgICAgIHJldHVybiB0aGlzLl92aWRlby5lbmNvZGUoZHN0LCB0aGlzLl9tdXhlcik7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBlbmNvZGVQTkcocG5nRGF0YTogQnVmZmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5fbGltaXRlci5zY2hlZHVsZShhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB7IHBrdCwgc3JjLCBkc3QgfSA9IHRoaXMuX2NvZGVjO1xuICAgICAgdXNpbmcgcG5nID0gYXdhaXQgdGhpcy5fY29kZWMucG5nKCk7XG4gICAgICBwa3QuZGF0YSA9IHBuZ0RhdGE7XG4gICAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgcG5nLnNlbmRQYWNrZXQocGt0KSwgXCJwbmdEZWNvZGVyLnNlbmRQYWNrZXRcIik7XG4gICAgICBwa3QudW5yZWYoKTtcbiAgICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCBwbmcucmVjZWl2ZUZyYW1lKHNyYyksIFwicG5nRGVjb2Rlci5yZWNlaXZlRnJhbWVcIik7XG4gICAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoZHN0Lm1ha2VXcml0YWJsZSgpLCBcInBuZ0RzdC5tYWtlV3JpdGFibGVcIik7XG4gICAgICAvLyBOT1RFKEF1dG9rYWthKTogTXVzdCBhY2Nlc3Mgc3dzIGhlcmUgc2luY2UgaXQgZGVwZW5kcyBvbiBzcmMgZm9ybWF0XG4gICAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgdGhpcy5fY29kZWMuc3dzLnNjYWxlRnJhbWUoZHN0LCBzcmMpLCBcInBuZ1N3cy5zY2FsZUZyYW1lXCIpO1xuICAgICAgcmV0dXJuIHRoaXMuX3ZpZGVvLmVuY29kZShkc3QsIHRoaXMuX211eGVyKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGVuY29kZUF1ZGlvKHBjbTogQnVmZmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX2F1ZGlvKSBhd2FpdCB0aGlzLl9saW1pdGVyLnNjaGVkdWxlKCgpID0+IHRoaXMuX2F1ZGlvIS5lbmNvZGUocGNtLCB0aGlzLl9tdXhlcikpO1xuICB9XG5cbiAgYXN5bmMgZmluaXNoKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHVzaW5nIF9tID0gdGhpcy5fbXV4ZXI7XG4gICAgICB1c2luZyBfdiA9IHRoaXMuX3ZpZGVvO1xuICAgICAgdXNpbmcgX2EgPSB0aGlzLl9hdWRpbztcbiAgICAgIGF3YWl0IHRoaXMuX2xpbWl0ZXIuZW5kKCk7XG4gICAgICBhd2FpdCB0aGlzLl9hdWRpbz8uZmx1c2godGhpcy5fbXV4ZXIpO1xuICAgICAgYXdhaXQgdGhpcy5fdmlkZW8uZmx1c2godGhpcy5fbXV4ZXIpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLmZyZWUoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX291dEZpbGU7XG4gIH1cblxuICBhc3luYyBbU3ltYm9sLmFzeW5jRGlzcG9zZV0oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX2Rpc3Bvc2VkKSByZXR1cm47XG4gICAgYXdhaXQgdGhpcy5fbGltaXRlci5lbmQoKTtcbiAgICB0aGlzLl92aWRlb1tTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICB0aGlzLl9hdWRpbz8uW1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgIGF3YWl0IHRoaXMuX211eGVyW1N5bWJvbC5hc3luY0Rpc3Bvc2VdKCk7XG4gICAgdGhpcy5mcmVlKCk7XG4gIH1cblxuICBwcml2YXRlIGZyZWUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2Rpc3Bvc2VkKSByZXR1cm47XG4gICAgdGhpcy5fZGlzcG9zZWQgPSB0cnVlO1xuICAgIHVzaW5nIF9jb2RlYyA9IHRoaXMuX2NvZGVjO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzI3LlxuXG5pbXBvcnQgeyBIYXJkd2FyZUNvbnRleHQgfSBmcm9tIFwibm9kZS1hdi9hcGlcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuL2xvZ2dpbmdcIjtcblxuY29uc3QgVEFHID0gXCJbSFdBY2NlbF1cIjtcblxuYXN5bmMgZnVuY3Rpb24gZGV0ZWN0R1BVRHJpdmVyKCkge1xuICBjb25zdCBodyA9IEhhcmR3YXJlQ29udGV4dC5hdXRvKCk7XG4gIGNvbnN0IHJlc3VsdCA9IGh3ICE9PSBudWxsO1xuICBodz8uZGlzcG9zZSgpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgY29uc3QgY2FuSVVzZUdQVSA9IGRldGVjdEdQVURyaXZlcigpLnRoZW4oKHJlc3VsdCkgPT4ge1xuICBsb2dnZXIuZGVidWcoVEFHLCBcImdwdTpcIiwgcmVzdWx0KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn0pO1xuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8wMy5cblxuaW1wb3J0IHsgcGxhdGZvcm0gfSBmcm9tIFwib3NcIjtcbmltcG9ydCB7IHB1cERpc2FibGVHUFUsIHB1cExvZ0xldmVsIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBjYW5JVXNlR1BVIH0gZnJvbSBcIi4vaHdhY2NlbFwiO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY2hyb21pdW1PcHRpb25zKCkge1xuICBjb25zdCBvcHRzID0gW1xuICAgIC8vIOWuueWZqOaymeeusVxuICAgIFwibm8tc2FuZGJveFwiLFxuICAgIFwiZGlzYWJsZS1kZXYtc2htLXVzYWdlXCIsXG4gICAgLy8g6Leo5Z+fL+WuieWFqFxuICAgIFwiZGlzYWJsZS13ZWItc2VjdXJpdHlcIixcbiAgICBcImRpc2FibGUtc2l0ZS1pc29sYXRpb24tdHJpYWxzXCIsXG4gICAgXCJpZ25vcmUtY2VydGlmaWNhdGUtZXJyb3JzXCIsXG4gICAgLy8g5b2V5Yi26KGM5Li6XG4gICAgXCJkaXNhYmxlLWJsaW5rLWZlYXR1cmVzPUF1dG9tYXRpb25Db250cm9sbGVkXCIsXG4gICAgXCJtdXRlLWF1ZGlvXCIsXG4gICAgXCJhdXRvcGxheS1wb2xpY3k9bm8tdXNlci1nZXN0dXJlLXJlcXVpcmVkXCIsXG4gICAgXCJkaXNhYmxlLWV4dGVuc2lvbnNcIixcbiAgICAvLyDmuLLmn5NcbiAgICBcImZvcmNlLWRldmljZS1zY2FsZS1mYWN0b3I9MVwiLFxuICAgIFwiZm9yY2UtY29sb3ItcHJvZmlsZT1zcmdiXCIsXG4gICAgXCJpZ25vcmUtZ3B1LWJsb2NrbGlzdFwiLFxuICAgIFwidXNlLWdsPWFuZ2xlXCIsXG4gICAgXCJkZXRlcm1pbmlzdGljLW1vZGVcIixcbiAgICBcImVuYWJsZS1iZWdpbi1mcmFtZS1jb250cm9sXCIsXG4gICAgXCJkaXNhYmxlLW5ldy1jb250ZW50LXJlbmRlcmluZy10aW1lb3V0XCIsXG4gICAgXCJydW4tYWxsLWNvbXBvc2l0b3Itc3RhZ2VzLWJlZm9yZS1kcmF3XCIsXG4gICAgXCJkaXNhYmxlLXRocmVhZGVkLWFuaW1hdGlvblwiLFxuICAgIFwiZGlzYWJsZS10aHJlYWRlZC1zY3JvbGxpbmdcIixcbiAgICBcImRpc2FibGUtY2hlY2tlci1pbWFnaW5nXCIsXG4gICAgXCJkaXNhYmxlLWltYWdlLWFuaW1hdGlvbi1yZXN5bmNcIixcbiAgICBcImVuYWJsZS1zdXJmYWNlLXN5bmNocm9uaXphdGlvblwiLFxuICAgIC8vIOi1hOa6kOaOp+WItlxuICAgIFwiZGlzYWJsZS1iYWNrZ3JvdW5kLW5ldHdvcmtpbmdcIixcbiAgXTtcblxuICBpZiAocHVwTG9nTGV2ZWwgPCAzKSB7XG4gICAgb3B0cy5wdXNoKFwibG9nLWxldmVsPTNcIik7XG4gIH1cblxuICBjb25zdCBlbmFibGVHcHUgPSAoYXdhaXQgY2FuSVVzZUdQVSkgJiYgIXB1cERpc2FibGVHUFU7XG4gIGlmICghZW5hYmxlR3B1KSB7XG4gICAgb3B0cy5wdXNoKFwidXNlLWFuZ2xlPXN3aWZ0c2hhZGVyXCIsIFwiZW5hYmxlLXVuc2FmZS1zd2lmdHNoYWRlclwiKTtcbiAgICByZXR1cm4gb3B0cztcbiAgfVxuXG4gIG9wdHMucHVzaChcImRpc2FibGUtZ3B1LXNhbmRib3hcIiwgXCJlbmFibGUtdW5zYWZlLXdlYmdwdVwiKTtcbiAgY29uc3QgcGxhdCA9IHBsYXRmb3JtKCk7XG4gIGlmIChwbGF0ID09PSBcImRhcndpblwiKSB7XG4gICAgb3B0cy5wdXNoKFwidXNlLWFuZ2xlPW1ldGFsXCIpO1xuICB9IGVsc2UgaWYgKHBsYXQgPT09IFwid2luMzJcIikge1xuICAgIG9wdHMucHVzaChcInVzZS1hbmdsZT1kM2QxMVwiKTtcbiAgfSBlbHNlIHtcbiAgICBvcHRzLnB1c2goXCJ1c2UtYW5nbGU9dnVsa2FuXCIsIFwiZW5hYmxlLWZlYXR1cmVzPVZ1bGthblwiLCBcImRpc2FibGUtdnVsa2FuLXN1cmZhY2VcIik7XG4gIH1cbiAgcmV0dXJuIG9wdHM7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzI1LlxuXG5pbXBvcnQgZWxlY3Ryb24sIHsgdHlwZSBTaXplIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBwbGF0Zm9ybSB9IGZyb20gXCJvc1wiO1xuaW1wb3J0IHsgY2hyb21pdW1PcHRpb25zIH0gZnJvbSBcIi4uL2Jhc2UvY2hyb21pdW1cIjtcbmltcG9ydCB7IHB1cEFwcCB9IGZyb20gXCIuLi9iYXNlL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4uL2Jhc2UvbG9nZ2luZ1wiO1xuaW1wb3J0IHsgZXhlYywgUFVQX0FSR1NfS0VZIH0gZnJvbSBcIi4uL2Jhc2UvcHJvY2Vzc1wiO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZWxlY3Ryb25PcHRzKCkge1xuICByZXR1cm4gWy4uLihhd2FpdCBjaHJvbWl1bU9wdGlvbnMoKSksIFwiaGVhZGxlc3M9bmV3XCJdO1xufVxuXG5jb25zdCBUQUcgPSBcIltFbGVjdHJvbl1cIjtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1bkVsZWN0cm9uQXBwKHNpemU6IFNpemUsIGFyZ3M6IHVua25vd25bXSwgaXBjU29ja2V0UGF0aDogc3RyaW5nKSB7XG4gIGNvbnN0IGNtZFBhcnRzOiB1bmtub3duW10gPSBbXTtcbiAgY29uc3QgcGxhdCA9IHBsYXRmb3JtKCk7XG4gIGlmIChwbGF0ID09PSBcImxpbnV4XCIpIHtcbiAgICBjbWRQYXJ0cy5wdXNoKGB4dmZiLXJ1bmAsIGAtLWF1dG8tc2VydmVybnVtYCwgYC0tc2VydmVyLWFyZ3M9XCItc2NyZWVuIDAgJHtzaXplLndpZHRofXgke3NpemUuaGVpZ2h0fXgyNFwiYCk7XG4gIH1cbiAgY29uc3Qgb3B0cyA9IGF3YWl0IGVsZWN0cm9uT3B0cygpO1xuICBjb25zdCBlbGVjdHJvbkFyZ3MgPSBvcHRzLm1hcCgoYSkgPT4gYC0tJHthfWApO1xuICBjb25zdCBiYXNlNjRBcmdzID0gQnVmZmVyLmZyb20oSlNPTi5zdHJpbmdpZnkoYXJncykpLnRvU3RyaW5nKFwiYmFzZTY0XCIpO1xuICBlbGVjdHJvbkFyZ3MucHVzaChgJHtQVVBfQVJHU19LRVl9PSR7YmFzZTY0QXJnc31gKTtcbiAgY21kUGFydHMucHVzaChlbGVjdHJvbiwgLi4uZWxlY3Ryb25BcmdzLCBwdXBBcHApO1xuICBjb25zdCBjbWQgPSBjbWRQYXJ0cy5qb2luKFwiIFwiKTtcbiAgbG9nZ2VyLmRlYnVnKFRBRywgY21kKTtcbiAgcmV0dXJuIGV4ZWMoY21kLCB7XG4gICAgc3RkaW86IFtcImlnbm9yZVwiLCBcInBpcGVcIiwgXCJwaXBlXCJdLFxuICAgIHNoZWxsOiBwbGF0ID09PSBcImxpbnV4XCIsXG4gICAgZW52OiB7IC4uLnByb2Nlc3MuZW52LCBSVVNUX0JBQ0tUUkFDRTogXCJmdWxsXCIsIFBVUF9JUENfU09DS0VUOiBpcGNTb2NrZXRQYXRoIH0sXG4gIH0pO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8wMS5cblxuaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSBcImV2ZW50c1wiO1xuaW1wb3J0IHsgY3JlYXRlQ29ubmVjdGlvbiwgY3JlYXRlU2VydmVyLCB0eXBlIFNvY2tldCB9IGZyb20gXCJuZXRcIjtcblxuY29uc3QgSEVBREVSX1NJWkUgPSA4O1xuXG5leHBvcnQgY29uc3QgZW51bSBJcGNNc2dUeXBlIHtcbiAgUFJPR1JFU1MgPSAxLFxuICBET05FID0gMixcbiAgRVJST1IgPSAzLFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElwY0RvbmVQYXlsb2FkIHtcbiAgd3JpdHRlbjogbnVtYmVyO1xuICBqYW5rOiBudW1iZXI7XG4gIG91dEZpbGU6IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIElwY1dyaXRlciB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgX3NvY2tldDogU29ja2V0KSB7fVxuXG4gIHdyaXRlUHJvZ3Jlc3ModmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMud3JpdGUoSXBjTXNnVHlwZS5QUk9HUkVTUywgQnVmZmVyLmZyb20oYCR7dmFsdWV9YCkpO1xuICB9XG5cbiAgd3JpdGVFcnJvcihlcnJvcjogc3RyaW5nKSB7XG4gICAgdGhpcy53cml0ZShJcGNNc2dUeXBlLkVSUk9SLCBCdWZmZXIuZnJvbShlcnJvcikpO1xuICAgIHRoaXMuX3NvY2tldC5lbmQoKTtcbiAgfVxuXG4gIHdyaXRlRG9uZShwYXlsb2FkOiBJcGNEb25lUGF5bG9hZCk6IHZvaWQge1xuICAgIHRoaXMud3JpdGUoSXBjTXNnVHlwZS5ET05FLCBCdWZmZXIuZnJvbShKU09OLnN0cmluZ2lmeShwYXlsb2FkKSkpO1xuICAgIHRoaXMuX3NvY2tldC5lbmQoKTtcbiAgfVxuXG4gIHByaXZhdGUgd3JpdGUodHlwZTogSXBjTXNnVHlwZSwgcGF5bG9hZDogQnVmZmVyKTogdm9pZCB7XG4gICAgY29uc3QgaGVhZGVyID0gQnVmZmVyLmFsbG9jKEhFQURFUl9TSVpFKTtcbiAgICBoZWFkZXIud3JpdGVVSW50MzJMRSh0eXBlLCAwKTtcbiAgICBoZWFkZXIud3JpdGVVSW50MzJMRShwYXlsb2FkLmJ5dGVMZW5ndGgsIDQpO1xuICAgIHRoaXMuX3NvY2tldC53cml0ZShoZWFkZXIpO1xuICAgIHRoaXMuX3NvY2tldC53cml0ZShwYXlsb2FkKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY29ubmVjdElwYyhzb2NrZXRQYXRoOiBzdHJpbmcpOiBQcm9taXNlPElwY1dyaXRlcj4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHNvY2tldCA9IGNyZWF0ZUNvbm5lY3Rpb24oc29ja2V0UGF0aCk7XG4gICAgc29ja2V0Lm9uY2UoXCJjb25uZWN0XCIsICgpID0+IHJlc29sdmUobmV3IElwY1dyaXRlcihzb2NrZXQpKSk7XG4gICAgc29ja2V0Lm9uY2UoXCJlcnJvclwiLCByZWplY3QpO1xuICB9KTtcbn1cblxuZXhwb3J0IGNsYXNzIElwY1JlYWRlciBleHRlbmRzIEV2ZW50RW1pdHRlcjx7XG4gIHByb2dyZXNzOiBbdmFsdWU6IG51bWJlcl07XG4gIG1lc3NhZ2U6IFt0eXBlOiBJcGNNc2dUeXBlLCBidWZmZXI6IEJ1ZmZlcl07XG4gIGRvbmU6IFtwYXlsb2FkOiBJcGNEb25lUGF5bG9hZF07XG4gIGVycm9yOiBbZXJyb3I6IEVycm9yXTtcbiAgY2xvc2U6IFtdO1xufT4ge1xuICBwcml2YXRlIF9jaHVua3M6IEJ1ZmZlcltdID0gW107XG4gIHByaXZhdGUgX2J1ZmZlcmVkID0gMDtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IF9zb2NrZXQ6IFNvY2tldCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5fc29ja2V0Lm9uKFwiZGF0YVwiLCAoZGF0YSkgPT4gdGhpcy5vbkRhdGEoZGF0YSkpO1xuICAgIHRoaXMuX3NvY2tldC5vbihcImVycm9yXCIsIChlcnIpID0+IHRoaXMuZW1pdChcImVycm9yXCIsIGVycikpO1xuICAgIHRoaXMuX3NvY2tldC5vbihcImNsb3NlXCIsICgpID0+IHRoaXMuZW1pdChcImNsb3NlXCIpKTtcbiAgfVxuXG4gIHByaXZhdGUgb25EYXRhKGRhdGE6IEJ1ZmZlcik6IHZvaWQge1xuICAgIHRoaXMuX2NodW5rcy5wdXNoKGRhdGEpO1xuICAgIHRoaXMuX2J1ZmZlcmVkICs9IGRhdGEuYnl0ZUxlbmd0aDtcbiAgICB0aGlzLmZsdXNoKCk7XG4gIH1cblxuICBwcml2YXRlIGZsdXNoKCk6IHZvaWQge1xuICAgIGZvciAoOzspIHtcbiAgICAgIGlmICh0aGlzLl9idWZmZXJlZCA8IEhFQURFUl9TSVpFKSByZXR1cm47XG4gICAgICBjb25zdCBoZWFkZXIgPSB0aGlzLnBlZWsoSEVBREVSX1NJWkUpO1xuICAgICAgY29uc3QgdHlwZSA9IGhlYWRlci5yZWFkVUludDMyTEUoMCkgYXMgSXBjTXNnVHlwZTtcbiAgICAgIGNvbnN0IGxlbiA9IGhlYWRlci5yZWFkVUludDMyTEUoNCk7XG4gICAgICBpZiAodGhpcy5fYnVmZmVyZWQgPCBIRUFERVJfU0laRSArIGxlbikgcmV0dXJuO1xuICAgICAgdGhpcy5jb25zdW1lKEhFQURFUl9TSVpFKTtcbiAgICAgIGNvbnN0IHBheWxvYWQgPSB0aGlzLmNvbnN1bWUobGVuKTtcbiAgICAgIHRoaXMuZW1pdChcIm1lc3NhZ2VcIiwgdHlwZSwgcGF5bG9hZCk7XG4gICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgY2FzZSBJcGNNc2dUeXBlLlBST0dSRVNTOiB7XG4gICAgICAgICAgdGhpcy5lbWl0KFwicHJvZ3Jlc3NcIiwgTnVtYmVyKHBheWxvYWQudG9TdHJpbmcoKSkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgSXBjTXNnVHlwZS5ET05FOiB7XG4gICAgICAgICAgdGhpcy5lbWl0KFwiZG9uZVwiLCBKU09OLnBhcnNlKHBheWxvYWQudG9TdHJpbmcoKSkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgSXBjTXNnVHlwZS5FUlJPUjoge1xuICAgICAgICAgIHRoaXMuZW1pdChcImVycm9yXCIsIG5ldyBFcnJvcihwYXlsb2FkLnRvU3RyaW5nKCkpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcGVlayhuOiBudW1iZXIpOiBCdWZmZXIge1xuICAgIGlmICh0aGlzLl9jaHVua3NbMF0gJiYgdGhpcy5fY2h1bmtzWzBdLmJ5dGVMZW5ndGggPj0gbikgcmV0dXJuIHRoaXMuX2NodW5rc1swXTtcbiAgICByZXR1cm4gQnVmZmVyLmNvbmNhdCh0aGlzLl9jaHVua3MpLnN1YmFycmF5KDAsIG4pO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdW1lKG46IG51bWJlcik6IEJ1ZmZlciB7XG4gICAgY29uc3Qgb3V0ID0gQnVmZmVyLmFsbG9jVW5zYWZlKG4pO1xuICAgIGxldCBvZmZzZXQgPSAwO1xuICAgIHdoaWxlIChvZmZzZXQgPCBuKSB7XG4gICAgICBjb25zdCBjaHVuayA9IHRoaXMuX2NodW5rc1swXSE7XG4gICAgICBjb25zdCB0YWtlID0gTWF0aC5taW4oY2h1bmsuYnl0ZUxlbmd0aCwgbiAtIG9mZnNldCk7XG4gICAgICBjaHVuay5jb3B5KG91dCwgb2Zmc2V0LCAwLCB0YWtlKTtcbiAgICAgIGlmICh0YWtlID09PSBjaHVuay5ieXRlTGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuX2NodW5rcy5zaGlmdCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fY2h1bmtzWzBdID0gY2h1bmsuc3ViYXJyYXkodGFrZSk7XG4gICAgICB9XG4gICAgICBvZmZzZXQgKz0gdGFrZTtcbiAgICB9XG4gICAgdGhpcy5fYnVmZmVyZWQgLT0gbjtcbiAgICByZXR1cm4gb3V0O1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSXBjU2VydmVyIHtcbiAgd2FpdEZvckNvbm5lY3Rpb24oKTogUHJvbWlzZTxJcGNSZWFkZXI+O1xuICBjbG9zZSgpOiB2b2lkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlSXBjU2VydmVyKHNvY2tldFBhdGg6IHN0cmluZyk6IFByb21pc2U8SXBjU2VydmVyPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3Qgc2VydmVyID0gY3JlYXRlU2VydmVyKCk7XG4gICAgc2VydmVyLm9uY2UoXCJlcnJvclwiLCByZWplY3QpO1xuICAgIHNlcnZlci5saXN0ZW4oc29ja2V0UGF0aCwgKCkgPT4ge1xuICAgICAgcmVzb2x2ZSh7XG4gICAgICAgIHdhaXRGb3JDb25uZWN0aW9uKCkge1xuICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTxJcGNSZWFkZXI+KChvaywgbm8pID0+IHtcbiAgICAgICAgICAgIHNlcnZlci5vbmNlKFwiY29ubmVjdGlvblwiLCAoc29ja2V0KSA9PiBvayhuZXcgSXBjUmVhZGVyKHNvY2tldCkpKTtcbiAgICAgICAgICAgIHNlcnZlci5vbmNlKFwiZXJyb3JcIiwgbm8pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBjbG9zZSgpIHtcbiAgICAgICAgICBzZXJ2ZXIuY2xvc2UoKTtcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMDEuXG5cbmV4cG9ydCBjb25zdCBUSUNLX1NZTUJPTCA9IFwiX19wdXBfdGlja19fXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGlja0luamVjdG9yT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBXaGVuIHRydWUsIHNraXBzIHRoZSB0b3AtZnJhbWUgZ3VhcmQgc28gdGhlIGluamVjdG9yIHJ1bnMgaW4gdGhlIG1haW4gZG9jdW1lbnQuXG4gICAqIFJlcXVpcmVkIGZvciBQdXBwZXRlZXIgbW9kZSB3aGVyZSB0aGUgcGFnZSBpcyBsb2FkZWQgZGlyZWN0bHkgKG5vIHN0ZWdvIGlmcmFtZSB3cmFwcGVyKS5cbiAgICogRGVmYXVsdDogZmFsc2UgKEVsZWN0cm9uL3N0ZWdvIG1vZGUg4oCUIG9ubHkgaW5qZWN0IGluIGlmcmFtZXMpLlxuICAgKi9cbiAgc2tpcEZyYW1lR3VhcmQ/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEJ1aWxkcyB0aGUgSlMgaW5qZWN0b3IgdGhhdCBob29rcyBhbGwgdGltZS1yZWxhdGVkIGdsb2JhbHMgaW4gdGhlIHRhcmdldCBmcmFtZS5cbiAqIEluIEVsZWN0cm9uL3N0ZWdvIG1vZGUgKGRlZmF1bHQpLCBndWFyZHMgYWdhaW5zdCBydW5uaW5nIGluIHRoZSB0b3AtbGV2ZWwgZnJhbWUuXG4gKiBJbiBQdXBwZXRlZXIgbW9kZSAoc2tpcEZyYW1lR3VhcmQ6IHRydWUpLCBpbmplY3RzIGRpcmVjdGx5IGludG8gdGhlIG1haW4gZG9jdW1lbnQuXG4gKiBNdXN0IGJlIGluamVjdGVkIHZpYSBQYWdlLmFkZFNjcmlwdFRvRXZhbHVhdGVPbk5ld0RvY3VtZW50IEFORCBkaXJlY3RseSBpbnRvXG4gKiBhbHJlYWR5LWxvYWRlZCBmcmFtZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFRpY2tJbmplY3RvcihvcHRzPzogVGlja0luamVjdG9yT3B0aW9ucyk6IHN0cmluZyB7XG4gIGNvbnN0IGZyYW1lR3VhcmQgPSBvcHRzPy5za2lwRnJhbWVHdWFyZCA/IFwiXCIgOiBcImlmICh3aW5kb3cuc2VsZiA9PT0gd2luZG93LnRvcCkgcmV0dXJuO1wiO1xuICByZXR1cm4gYChmdW5jdGlvbigpIHtcbiAgJHtmcmFtZUd1YXJkfVxuICBpZiAodHlwZW9mICR7VElDS19TWU1CT0x9ICE9PSAndW5kZWZpbmVkJykgcmV0dXJuO1xuXG4gIGNvbnN0IG9yaWcgPSB7XG4gICAgRGF0ZTogRGF0ZSxcbiAgICBkYXRlTm93OiBEYXRlLm5vdy5iaW5kKERhdGUpLFxuICAgIHBlcmZvcm1hbmNlTm93OiBwZXJmb3JtYW5jZS5ub3cuYmluZChwZXJmb3JtYW5jZSksXG4gICAgcmFmOiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUuYmluZCh3aW5kb3cpLFxuICAgIGNhZjogY2FuY2VsQW5pbWF0aW9uRnJhbWUuYmluZCh3aW5kb3cpLFxuICAgIHNldFRpbWVvdXQ6IHNldFRpbWVvdXQuYmluZCh3aW5kb3cpLFxuICAgIGNsZWFyVGltZW91dDogY2xlYXJUaW1lb3V0LmJpbmQod2luZG93KSxcbiAgICBzZXRJbnRlcnZhbDogc2V0SW50ZXJ2YWwuYmluZCh3aW5kb3cpLFxuICAgIGNsZWFySW50ZXJ2YWw6IGNsZWFySW50ZXJ2YWwuYmluZCh3aW5kb3cpLFxuICB9O1xuXG4gIGxldCBjdXJyTXMgPSAwO1xuICBsZXQgcmFmUXVldWUgPSBbXTtcbiAgY29uc3QgdGltZXJzID0ge307XG4gIGxldCBuZXh0SWQgPSAxO1xuICBjb25zdCBkYXRlT3JpZ2luID0gbmV3IG9yaWcuRGF0ZSgpO1xuICBjb25zdCBwZXJmT3JpZ2luID0gb3JpZy5wZXJmb3JtYW5jZU5vdygpO1xuXG4gIHBlcmZvcm1hbmNlLm5vdyA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gcGVyZk9yaWdpbiArIGN1cnJNczsgfTtcbiAgRGF0ZS5ub3cgPSBmdW5jdGlvbigpIHsgcmV0dXJuIGRhdGVPcmlnaW4uZ2V0VGltZSgpICsgY3Vyck1zOyB9O1xuICBEYXRlID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIE8gPSBvcmlnLkRhdGU7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHJldHVybiBuZXcgTyhkYXRlT3JpZ2luLmdldFRpbWUoKSArIGN1cnJNcyk7XG4gICAgcmV0dXJuIG5ldyAoRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQuYXBwbHkoTywgW251bGxdLmNvbmNhdChBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpKSkpKCk7XG4gIH07XG4gIERhdGUubm93ID0gZnVuY3Rpb24oKSB7IHJldHVybiBkYXRlT3JpZ2luLmdldFRpbWUoKSArIGN1cnJNczsgfTtcbiAgRGF0ZS5wYXJzZSA9IG9yaWcuRGF0ZS5wYXJzZTtcbiAgRGF0ZS5VVEMgPSBvcmlnLkRhdGUuVVRDO1xuICBEYXRlLnByb3RvdHlwZSA9IG9yaWcuRGF0ZS5wcm90b3R5cGU7XG5cbiAgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSA9IGZ1bmN0aW9uKGNiKSB7XG4gICAgY29uc3QgaWQgPSBuZXh0SWQrKztcbiAgICByYWZRdWV1ZS5wdXNoKHsgaWQsIGNiIH0pO1xuICAgIHJldHVybiBpZDtcbiAgfTtcbiAgd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lID0gZnVuY3Rpb24oaWQpIHtcbiAgICByYWZRdWV1ZSA9IHJhZlF1ZXVlLmZpbHRlcigocikgPT4gci5pZCAhPT0gaWQpO1xuICB9O1xuXG4gIHdpbmRvdy5zZXRUaW1lb3V0ID0gZnVuY3Rpb24oY2IsIGRlbGF5LCAuLi5hcmdzKSB7XG4gICAgY29uc3QgaWQgPSBuZXh0SWQrKztcbiAgICB0aW1lcnNbaWRdID0geyB0eXBlOiAndGltZW91dCcsIGNiLCBkZWxheTogZGVsYXkgfHwgMCwgbmV4dDogY3Vyck1zICsgKGRlbGF5IHx8IDApLCBhcmdzIH07XG4gICAgcmV0dXJuIGlkO1xuICB9O1xuICB3aW5kb3cuY2xlYXJUaW1lb3V0ID0gZnVuY3Rpb24oaWQpIHsgZGVsZXRlIHRpbWVyc1tpZF07IH07XG5cbiAgd2luZG93LnNldEludGVydmFsID0gZnVuY3Rpb24oY2IsIGRlbGF5LCAuLi5hcmdzKSB7XG4gICAgY29uc3QgaWQgPSBuZXh0SWQrKztcbiAgICBjb25zdCBkID0gTWF0aC5tYXgoZGVsYXkgfHwgMCwgMSk7XG4gICAgdGltZXJzW2lkXSA9IHsgdHlwZTogJ2ludGVydmFsJywgY2IsIGRlbGF5OiBkLCBuZXh0OiBjdXJyTXMgKyBkLCBhcmdzIH07XG4gICAgcmV0dXJuIGlkO1xuICB9O1xuICB3aW5kb3cuY2xlYXJJbnRlcnZhbCA9IGZ1bmN0aW9uKGlkKSB7IGRlbGV0ZSB0aW1lcnNbaWRdOyB9O1xuXG4gIGZ1bmN0aW9uIHByb2Nlc3ModGltZXN0YW1wTXMpIHtcbiAgICBjdXJyTXMgPSB0aW1lc3RhbXBNcztcbiAgICBjb25zdCBpZHMgPSBPYmplY3Qua2V5cyh0aW1lcnMpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaWRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCB0ID0gdGltZXJzW2lkc1tpXV07XG4gICAgICBpZiAoIXQpIGNvbnRpbnVlO1xuICAgICAgd2hpbGUgKHQubmV4dCA8PSBjdXJyTXMpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB0LmNiID09PSAnc3RyaW5nJykgZXZhbCh0LmNiKTsgZWxzZSB0LmNiLmFwcGx5KHVuZGVmaW5lZCwgdC5hcmdzKTtcbiAgICAgICAgaWYgKHQudHlwZSA9PT0gJ3RpbWVvdXQnKSB7IGRlbGV0ZSB0aW1lcnNbaWRzW2ldXTsgYnJlYWs7IH1cbiAgICAgICAgdC5uZXh0ICs9IHQuZGVsYXk7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHJhZnMgPSByYWZRdWV1ZS5zcGxpY2UoMCk7XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCByYWZzLmxlbmd0aDsgaisrKSB7XG4gICAgICByYWZzW2pdLmNiKGN1cnJNcyk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZWplY3QoKSB7XG4gICAgRGF0ZSA9IG9yaWcuRGF0ZTtcbiAgICBwZXJmb3JtYW5jZS5ub3cgPSBvcmlnLnBlcmZvcm1hbmNlTm93O1xuICAgIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPSBvcmlnLnJhZjtcbiAgICB3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUgPSBvcmlnLmNhZjtcbiAgICB3aW5kb3cuc2V0VGltZW91dCA9IG9yaWcuc2V0VGltZW91dDtcbiAgICB3aW5kb3cuY2xlYXJUaW1lb3V0ID0gb3JpZy5jbGVhclRpbWVvdXQ7XG4gICAgd2luZG93LnNldEludGVydmFsID0gb3JpZy5zZXRJbnRlcnZhbDtcbiAgICB3aW5kb3cuY2xlYXJJbnRlcnZhbCA9IG9yaWcuY2xlYXJJbnRlcnZhbDtcbiAgICBkZWxldGUgd2luZG93LiR7VElDS19TWU1CT0x9O1xuICB9XG5cbiAgd2luZG93LiR7VElDS19TWU1CT0x9ID0geyBwcm9jZXNzOiBwcm9jZXNzLCBlamVjdDogZWplY3QgfTtcbn0pKCk7YDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRvUHJvY2Vzcyh0aW1lc3RhbXBNczogbnVtYmVyKTogc3RyaW5nIHtcbiAgcmV0dXJuIGAke1RJQ0tfU1lNQk9MfS5wcm9jZXNzKCR7dGltZXN0YW1wTXN9KWA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkb0VqZWN0KCk6IHN0cmluZyB7XG4gIHJldHVybiBgaWYgKHR5cGVvZiAke1RJQ0tfU1lNQk9MfSAhPT0gJ3VuZGVmaW5lZCcpICR7VElDS19TWU1CT0x9LmVqZWN0KClgO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8wMy5cblxuaW1wb3J0IHsgbWtkaXIgfSBmcm9tIFwiZnMvcHJvbWlzZXNcIjtcbmltcG9ydCB7IGRpcm5hbWUgfSBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHB1cHBldGVlciwgeyBDRFBTZXNzaW9uIH0gZnJvbSBcInB1cHBldGVlclwiO1xuaW1wb3J0IHsgY2hyb21pdW1PcHRpb25zIH0gZnJvbSBcIi4uL2Jhc2UvY2hyb21pdW1cIjtcbmltcG9ydCB7IEVuY29kZXJQaXBlbGluZSB9IGZyb20gXCIuLi9iYXNlL2VuY29kZXIvZW5jb2RlclwiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4uL2Jhc2UvbG9nZ2luZ1wiO1xuaW1wb3J0IHR5cGUgeyBJcGNEb25lUGF5bG9hZCB9IGZyb20gXCIuL2lwY1wiO1xuaW1wb3J0IHsgdHlwZSBSZW5kZXJPcHRpb25zIH0gZnJvbSBcIi4vc2NoZW1hXCI7XG5pbXBvcnQgeyBidWlsZFRpY2tJbmplY3RvciwgZG9FamVjdCwgZG9Qcm9jZXNzIH0gZnJvbSBcIi4vdGlja1wiO1xuXG5jb25zdCBUQUcgPSBcIltQdXBwZXRlZXJdXCI7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkb1B1cHBldGVlcihcbiAgc291cmNlOiBzdHJpbmcsXG4gIG9wdGlvbnM6IFJlbmRlck9wdGlvbnMsXG4gIG9uUHJvZ3Jlc3M/OiAocDogbnVtYmVyKSA9PiB2b2lkLFxuKTogUHJvbWlzZTxJcGNEb25lUGF5bG9hZD4ge1xuICBjb25zdCB7IGZwcywgd2lkdGgsIGhlaWdodCwgZHVyYXRpb24sIG91dEZpbGUgfSA9IG9wdGlvbnM7XG4gIGlmIChvcHRpb25zLndpdGhBdWRpbykgbG9nZ2VyLndhcm4oVEFHLCBcImF1ZGlvIGNhcHR1cmUgaXMgbm90IHN1cHBvcnRlZCBpbiBQdXBwZXRlZXIgbW9kZVwiKTtcblxuICBjb25zdCB0b3RhbCA9IE1hdGguY2VpbChmcHMgKiBkdXJhdGlvbik7XG4gIGNvbnN0IGZyYW1lSW50ZXJ2YWwgPSAxMDAwIC8gZnBzO1xuXG4gIGF3YWl0IG1rZGlyKGRpcm5hbWUob3V0RmlsZSksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICBhd2FpdCB1c2luZyBwaXBlbGluZSA9IGF3YWl0IEVuY29kZXJQaXBlbGluZS5jcmVhdGUoeyB3aWR0aCwgaGVpZ2h0LCBmcHMsIG91dEZpbGUgfSk7XG5cbiAgY29uc3QgYnJvd3NlciA9IGF3YWl0IHB1cHBldGVlci5sYXVuY2goe1xuICAgIGhlYWRsZXNzOiBcInNoZWxsXCIsXG4gICAgZGVmYXVsdFZpZXdwb3J0OiB7IHdpZHRoLCBoZWlnaHQgfSxcbiAgICBhcmdzOiAoYXdhaXQgY2hyb21pdW1PcHRpb25zKCkpLm1hcCgoYSkgPT4gYC0tJHthfWApLFxuICB9KTtcblxuICB0cnkge1xuICAgIGNvbnN0IHBhZ2UgPSAoYXdhaXQgYnJvd3Nlci5wYWdlcygpKVswXSE7XG5cbiAgICAvLyBQYWdlLmFkZFNjcmlwdFRvRXZhbHVhdGVPbk5ld0RvY3VtZW50IG11c3QgdXNlIHRoZSBwYWdlJ3Mgb3duIENEUCBjbGllbnQuXG4gICAgLy8gSGVhZGxlc3NFeHBlcmltZW50YWwgdXNlcyBhIHNlcGFyYXRlIHNlc3Npb24gKHNlZSBwdXBwZXRlZXItY2FwdHVyZSkuXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciDigJQgX2NsaWVudCgpIGlzIGEgcHJpdmF0ZSBQdXBwZXRlZXIgQVBJIG5vdCBleHBvc2VkIGluIHR5cGUgZGVjbGFyYXRpb25zXG4gICAgY29uc3QgcGFnZUNsaWVudCA9IHBhZ2UuX2NsaWVudCgpIGFzIENEUFNlc3Npb247XG4gICAgY29uc3Qgc2Vzc2lvbiA9IGF3YWl0IHBhZ2UuY3JlYXRlQ0RQU2Vzc2lvbigpO1xuXG4gICAgY29uc3QgdGlja1NjcmlwdCA9IGJ1aWxkVGlja0luamVjdG9yKHsgc2tpcEZyYW1lR3VhcmQ6IHRydWUgfSk7XG4gICAgY29uc3QgeyBpZGVudGlmaWVyIH0gPSBhd2FpdCBwYWdlQ2xpZW50LnNlbmQoXCJQYWdlLmFkZFNjcmlwdFRvRXZhbHVhdGVPbk5ld0RvY3VtZW50XCIsIHsgc291cmNlOiB0aWNrU2NyaXB0IH0pO1xuXG4gICAgLy8gQ29sbGVjdCBDU1MvV2ViIGFuaW1hdGlvbiBJRHMgc28gd2UgY2FuIHNlZWsgdGhlbSBwZXItZnJhbWUuXG4gICAgLy8gT24gQ2hyb21lIDE0NissIGJlZ2luRnJhbWUncyBmcmFtZVRpbWVUaWNrcyBubyBsb25nZXIgZHJpdmVzIHRoZSBjb21wb3NpdG9yXG4gICAgLy8gYW5pbWF0aW9uIGNsb2NrLCBzbyBBbmltYXRpb24uc2Vla0FuaW1hdGlvbnMgaXMgbmVlZGVkIGZvciBzbW9vdGggb3V0cHV0LlxuICAgIGNvbnN0IGFuaW1hdGlvbklkczogc3RyaW5nW10gPSBbXTtcbiAgICBzZXNzaW9uLm9uKFwiQW5pbWF0aW9uLmFuaW1hdGlvblN0YXJ0ZWRcIiwgKGV2ZW50OiB7IGFuaW1hdGlvbjogeyBpZDogc3RyaW5nIH0gfSkgPT4ge1xuICAgICAgYW5pbWF0aW9uSWRzLnB1c2goZXZlbnQuYW5pbWF0aW9uLmlkKTtcbiAgICB9KTtcbiAgICBhd2FpdCBzZXNzaW9uLnNlbmQoXCJBbmltYXRpb24uZW5hYmxlXCIpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHBhZ2UuZ290byhzb3VyY2UsIHsgd2FpdFVudGlsOiBcIm5ldHdvcmtpZGxlMFwiLCB0aW1lb3V0OiAzMF8wMDAgfSk7XG5cbiAgICAgIGZvciAoY29uc3QgZnJhbWUgb2YgcGFnZS5mcmFtZXMoKSkge1xuICAgICAgICBhd2FpdCBmcmFtZS5ldmFsdWF0ZSh0aWNrU2NyaXB0KTtcbiAgICAgICAgYXdhaXQgZnJhbWUuZXZhbHVhdGUoZG9Qcm9jZXNzKDApKTtcbiAgICAgIH1cblxuICAgICAgYXdhaXQgc2Vzc2lvbi5zZW5kKFwiSGVhZGxlc3NFeHBlcmltZW50YWwuZW5hYmxlXCIpO1xuXG4gICAgICAvLyBUcmlnZ2VyIGFuIGluaXRpYWwgcmVuZGVyIHNvIGFueSBDU1MgYW5pbWF0aW9ucyBzdGFydCBhbmQgZmlyZSBhbmltYXRpb25TdGFydGVkIGV2ZW50cy5cbiAgICAgIGF3YWl0IHNlc3Npb24uc2VuZChcIkhlYWRsZXNzRXhwZXJpbWVudGFsLmJlZ2luRnJhbWVcIiwge1xuICAgICAgICBmcmFtZVRpbWVUaWNrczogMCxcbiAgICAgICAgaW50ZXJ2YWw6IGZyYW1lSW50ZXJ2YWwsXG4gICAgICAgIG5vRGlzcGxheVVwZGF0ZXM6IGZhbHNlLFxuICAgICAgfSk7XG5cbiAgICAgIGxldCB3cml0dGVuID0gMDtcbiAgICAgIGxldCBwcm9ncmVzcyA9IDA7XG4gICAgICBsZXQgY2FwdHVyZVRpbWVzdGFtcCA9IDA7XG4gICAgICBsZXQgZnJhbWVUaW1lVGlja3MgPSBmcmFtZUludGVydmFsO1xuXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRvdGFsOyBpKyspIHtcbiAgICAgICAgY2FwdHVyZVRpbWVzdGFtcCArPSBmcmFtZUludGVydmFsO1xuXG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgIHBhZ2UuZnJhbWVzKCkubWFwKChmcmFtZSkgPT4gZnJhbWUuZXZhbHVhdGUoZG9Qcm9jZXNzKGNhcHR1cmVUaW1lc3RhbXApKSksXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKGFuaW1hdGlvbklkcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgYXdhaXQgc2Vzc2lvbi5zZW5kKFwiQW5pbWF0aW9uLnNlZWtBbmltYXRpb25zXCIsIHtcbiAgICAgICAgICAgIGFuaW1hdGlvbnM6IGFuaW1hdGlvbklkcyxcbiAgICAgICAgICAgIGN1cnJlbnRUaW1lOiBjYXB0dXJlVGltZXN0YW1wLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc2Vzc2lvbi5zZW5kKFwiSGVhZGxlc3NFeHBlcmltZW50YWwuYmVnaW5GcmFtZVwiLCB7XG4gICAgICAgICAgZnJhbWVUaW1lVGlja3MsXG4gICAgICAgICAgaW50ZXJ2YWw6IGZyYW1lSW50ZXJ2YWwsXG4gICAgICAgICAgbm9EaXNwbGF5VXBkYXRlczogZmFsc2UsXG4gICAgICAgICAgc2NyZWVuc2hvdDogeyBmb3JtYXQ6IFwicG5nXCIgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIGZyYW1lVGltZVRpY2tzICs9IGZyYW1lSW50ZXJ2YWw7XG5cbiAgICAgICAgaWYgKCFyZXN1bHQuc2NyZWVuc2hvdERhdGEpIHtcbiAgICAgICAgICBsb2dnZXIud2FybihUQUcsIGBmcmFtZSAke2l9IHByb2R1Y2VkIG5vIHNjcmVlbnNob3RgKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IHBpcGVsaW5lLmVuY29kZVBORyhCdWZmZXIuZnJvbShyZXN1bHQuc2NyZWVuc2hvdERhdGEsIFwiYmFzZTY0XCIpKTtcbiAgICAgICAgd3JpdHRlbisrO1xuXG4gICAgICAgIGNvbnN0IG5ld1Byb2dyZXNzID0gTWF0aC5mbG9vcigod3JpdHRlbiAvIHRvdGFsKSAqIDEwMCk7XG4gICAgICAgIGlmIChNYXRoLmFicyhuZXdQcm9ncmVzcyAtIHByb2dyZXNzKSA+IDEwKSB7XG4gICAgICAgICAgcHJvZ3Jlc3MgPSBuZXdQcm9ncmVzcztcbiAgICAgICAgICBvblByb2dyZXNzPy4ocHJvZ3Jlc3MpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3QgZnJhbWUgb2YgcGFnZS5mcmFtZXMoKSkge1xuICAgICAgICBpZiAoIWZyYW1lLmRldGFjaGVkKSBhd2FpdCBmcmFtZS5ldmFsdWF0ZShkb0VqZWN0KCkpO1xuICAgICAgfVxuXG4gICAgICBpZiAod3JpdHRlbiA9PT0gMCkgdGhyb3cgbmV3IEVycm9yKFwibm8gZnJhbWVzIGNhcHR1cmVkXCIpO1xuICAgICAgcmV0dXJuIHsgd3JpdHRlbiwgamFuazogMCwgb3V0RmlsZSB9O1xuICAgIH0gZmluYWxseSB7XG4gICAgICBhd2FpdCBzZXNzaW9uLnNlbmQoXCJIZWFkbGVzc0V4cGVyaW1lbnRhbC5kaXNhYmxlXCIpO1xuICAgICAgYXdhaXQgc2Vzc2lvbi5zZW5kKFwiQW5pbWF0aW9uLmRpc2FibGVcIik7XG4gICAgICBhd2FpdCBwYWdlQ2xpZW50LnNlbmQoXCJQYWdlLnJlbW92ZVNjcmlwdFRvRXZhbHVhdGVPbk5ld0RvY3VtZW50XCIsIHsgaWRlbnRpZmllciB9KTtcbiAgICAgIGF3YWl0IHNlc3Npb24uZGV0YWNoKCk7XG4gICAgfVxuICB9IGZpbmFsbHkge1xuICAgIGF3YWl0IGJyb3dzZXIuY2xvc2UoKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wOS5cblxuaW1wb3J0IHsgb2sgfSBmcm9tIFwiYXNzZXJ0XCI7XG5pbXBvcnQgeyByYW5kb21VVUlEIH0gZnJvbSBcImNyeXB0b1wiO1xuaW1wb3J0IHsgcm1TeW5jIH0gZnJvbSBcImZzXCI7XG5pbXBvcnQgeyBta2RpciB9IGZyb20gXCJmcy9wcm9taXNlc1wiO1xuaW1wb3J0IHsgcGxhdGZvcm0sIHRtcGRpciB9IGZyb20gXCJvc1wiO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgdHJlZUtpbGwgZnJvbSBcInRyZWUta2lsbFwiO1xuaW1wb3J0IHsgcHVwRXhwZXJpbWVudGFsUHVwcGV0ZWVyIH0gZnJvbSBcIi4vYmFzZS9jb25zdGFudHNcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuL2Jhc2UvbG9nZ2luZ1wiO1xuaW1wb3J0IHsgcnVuRWxlY3Ryb25BcHAgfSBmcm9tIFwiLi9yZW5kZXJlci9lbGVjdHJvblwiO1xuaW1wb3J0IHsgY3JlYXRlSXBjU2VydmVyLCB0eXBlIElwY0RvbmVQYXlsb2FkIH0gZnJvbSBcIi4vcmVuZGVyZXIvaXBjXCI7XG5pbXBvcnQgeyBkb1B1cHBldGVlciB9IGZyb20gXCIuL3JlbmRlcmVyL3B1cHBldGVlclwiO1xuaW1wb3J0IHsgZGVmYXVsdFJlbmRlck9wdGlvbnMsIHR5cGUgUmVuZGVyT3B0aW9ucywgdHlwZSBSZW5kZXJSZXN1bHQgfSBmcm9tIFwiLi9yZW5kZXJlci9zY2hlbWFcIjtcblxuY29uc3QgVEFHID0gXCJbcHVwXVwiO1xuXG5leHBvcnQgdHlwZSBQdXBQcm9ncmVzc0NhbGxiYWNrID0gKHByb2dyZXNzOiBudW1iZXIpID0+IFByb21pc2U8dm9pZD4gfCB2b2lkO1xuXG5leHBvcnQgaW50ZXJmYWNlIFB1cE9wdGlvbnMgZXh0ZW5kcyBQYXJ0aWFsPFJlbmRlck9wdGlvbnM+IHtcbiAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG4gIG9uUHJvZ3Jlc3M/OiBQdXBQcm9ncmVzc0NhbGxiYWNrO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFB1cFJlc3VsdCBleHRlbmRzIFJlbmRlclJlc3VsdCB7fVxuXG5pbnRlcmZhY2UgQXBwT3B0aW9ucyBleHRlbmRzIFJlbmRlck9wdGlvbnMge1xuICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcnVuUHVwQXBwKHNvdXJjZTogc3RyaW5nLCBvcHRpb25zOiBBcHBPcHRpb25zLCBzb2NrZXRQYXRoOiBzdHJpbmcpIHtcbiAgbG9nZ2VyLmRlYnVnKFRBRywgYHJ1blB1cEFwcGAsIHNvdXJjZSwgb3B0aW9ucyk7XG5cbiAgY29uc3QgYXJnczogc3RyaW5nW10gPSBbXG4gICAgc291cmNlLFxuICAgIGAtLXdpZHRoYCxcbiAgICBgJHtvcHRpb25zLndpZHRofWAsXG4gICAgYC0taGVpZ2h0YCxcbiAgICBgJHtvcHRpb25zLmhlaWdodH1gLFxuICAgIGAtLWZwc2AsXG4gICAgYCR7b3B0aW9ucy5mcHN9YCxcbiAgICBgLS1kdXJhdGlvbmAsXG4gICAgYCR7b3B0aW9ucy5kdXJhdGlvbn1gLFxuICAgIGAtLW91dC1maWxlYCxcbiAgICBgJHtvcHRpb25zLm91dEZpbGV9YCxcbiAgXTtcbiAgaWYgKG9wdGlvbnMud2l0aEF1ZGlvKSBhcmdzLnB1c2goYC0td2l0aC1hdWRpb2ApO1xuICBpZiAob3B0aW9ucy51c2VJbm5lclByb3h5KSBhcmdzLnB1c2goYC0tdXNlLWlubmVyLXByb3h5YCk7XG4gIGlmIChvcHRpb25zLmRldGVybWluaXN0aWMpIGFyZ3MucHVzaChgLS1kZXRlcm1pbmlzdGljYCk7XG5cbiAgcmV0dXJuIHJ1bkVsZWN0cm9uQXBwKG9wdGlvbnMsIGFyZ3MsIHNvY2tldFBhdGgpO1xufVxuXG5jb25zdCBkID0gZGVmYXVsdFJlbmRlck9wdGlvbnM7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwdXAoc291cmNlOiBzdHJpbmcsIG9wdGlvbnM6IFBhcnRpYWw8UHVwT3B0aW9ucz4pOiBQcm9taXNlPFB1cFJlc3VsdD4ge1xuICBsb2dnZXIuZGVidWcoVEFHLCBgcHVwYCwgc291cmNlLCBvcHRpb25zKTtcblxuICBjb25zdCB7IHNpZ25hbCB9ID0gb3B0aW9ucztcbiAgaWYgKHNpZ25hbD8uYWJvcnRlZCkgdGhyb3cgc2lnbmFsLnJlYXNvbjtcblxuICBjb25zdCBvdXRGaWxlID0gb3B0aW9ucy5vdXRGaWxlID8/IGQub3V0RmlsZTtcbiAgY29uc3QgcmVuZGVyT3B0czogUmVuZGVyT3B0aW9ucyA9IHtcbiAgICB3aWR0aDogb3B0aW9ucy53aWR0aCA/PyBkLndpZHRoLFxuICAgIGhlaWdodDogb3B0aW9ucy5oZWlnaHQgPz8gZC5oZWlnaHQsXG4gICAgZnBzOiBvcHRpb25zLmZwcyA/PyBkLmZwcyxcbiAgICBkdXJhdGlvbjogb3B0aW9ucy5kdXJhdGlvbiA/PyBkLmR1cmF0aW9uLFxuICAgIHdpdGhBdWRpbzogb3B0aW9ucy53aXRoQXVkaW8gPz8gZC53aXRoQXVkaW8sXG4gICAgdXNlSW5uZXJQcm94eTogb3B0aW9ucy51c2VJbm5lclByb3h5ID8/IGQudXNlSW5uZXJQcm94eSxcbiAgICBkZXRlcm1pbmlzdGljOiBvcHRpb25zLmRldGVybWluaXN0aWMgPz8gZC5kZXRlcm1pbmlzdGljLFxuICAgIG91dEZpbGUsXG4gIH07XG5cbiAgY29uc3QgdG1wRGlyID0gam9pbih0bXBkaXIoKSwgXCJwdXBcIiwgcmFuZG9tVVVJRCgpKTtcbiAgYXdhaXQgbWtkaXIodG1wRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgY29uc3Qgc29ja2V0UGF0aCA9IGpvaW4odG1wRGlyLCBcInB1cC5zb2NrXCIpO1xuXG4gIGNvbnN0IHQwID0gcGVyZm9ybWFuY2Uubm93KCk7XG4gIGNvbnN0IHRpY2sgPSAocDogbnVtYmVyKSA9PiAobG9nZ2VyLmluZm8oVEFHLCBgJHtzb3VyY2V9IHByb2dyZXNzOiAke3B9JWApLCBvcHRpb25zLm9uUHJvZ3Jlc3M/LihwKSk7XG5cbiAgLy8gT24gTGludXggKyBkZXRlcm1pbmlzdGljIG1vZGUsIHVzZSBQdXBwZXRlZXIgaW5saW5lIChubyBFbGVjdHJvbiBzdWJwcm9jZXNzIG5lZWRlZCkuXG4gIGlmIChwbGF0Zm9ybSgpID09PSBcImxpbnV4XCIgJiYgcmVuZGVyT3B0cy5kZXRlcm1pbmlzdGljICYmIHB1cEV4cGVyaW1lbnRhbFB1cHBldGVlcikge1xuICAgIHRpY2soMCk7XG4gICAgY29uc3Qgc3VtbWFyeSA9IGF3YWl0IGRvUHVwcGV0ZWVyKHNvdXJjZSwgcmVuZGVyT3B0cywgdGljayk7XG4gICAgdGljaygxMDApO1xuICAgIGxvZ2dlci5pbmZvKFRBRywgYGRvbmUgJHtvdXRGaWxlfSBpbiAke01hdGgucm91bmQocGVyZm9ybWFuY2Uubm93KCkgLSB0MCl9bXNgKTtcbiAgICByZXR1cm4geyAuLi5zdW1tYXJ5LCBvcHRpb25zOiByZW5kZXJPcHRzIH07XG4gIH1cblxuICBjb25zdCBzZXJ2ZXIgPSBhd2FpdCBjcmVhdGVJcGNTZXJ2ZXIoc29ja2V0UGF0aCk7XG4gIGNvbnN0IGhhbmRsZSA9IGF3YWl0IHJ1blB1cEFwcChzb3VyY2UsIHsgLi4ucmVuZGVyT3B0cywgc2lnbmFsIH0sIHNvY2tldFBhdGgpO1xuXG4gIGNvbnN0IG9uQWJvcnQgPSAoKSA9PiB7XG4gICAgbG9nZ2VyLmRlYnVnKFRBRywgYGFib3J0ZWRgKTtcbiAgICBjb25zdCBwaWQgPSBoYW5kbGUucHJvY2Vzcy5waWQ7XG4gICAgaWYgKHBpZCkgdHJlZUtpbGwocGlkKTtcbiAgICBlbHNlIGhhbmRsZS5wcm9jZXNzLmtpbGwoKTtcbiAgICBybVN5bmModG1wRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSk7XG4gIH07XG4gIHNpZ25hbD8uYWRkRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsIG9uQWJvcnQsIHsgb25jZTogdHJ1ZSB9KTtcblxuICB0cnkge1xuICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBQcm9taXNlPElwY0RvbmVQYXlsb2FkPihhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAoYXdhaXQgc2VydmVyLndhaXRGb3JDb25uZWN0aW9uKCkpXG4gICAgICAgIC5vbihcImNsb3NlXCIsICgpID0+IHJlamVjdChuZXcgRXJyb3IoXCJJUEMgY2xvc2VkIHdpdGhvdXQgcmVzdWx0XCIpKSlcbiAgICAgICAgLm9uKFwibWVzc2FnZVwiLCAoKSA9PiBzaWduYWw/LmFib3J0ZWQgJiYgcmVqZWN0KHNpZ25hbC5yZWFzb24pKVxuICAgICAgICAub24oXCJwcm9ncmVzc1wiLCB0aWNrKVxuICAgICAgICAub24oXCJkb25lXCIsIHJlc29sdmUpXG4gICAgICAgIC5vbihcImVycm9yXCIsIHJlamVjdCk7XG4gICAgfSkuZmluYWxseSgoKSA9PiBzZXJ2ZXIuY2xvc2UoKSk7XG4gICAgdGljaygwKTtcbiAgICBjb25zdCBzdW1tYXJ5ID0gYXdhaXQgUHJvbWlzZS5yYWNlKFtyZXN1bHQsIGhhbmRsZS53YWl0XSk7XG4gICAgb2soc3VtbWFyeSwgXCJubyBzdW1tYXJ5IHJlY2VpdmVkXCIpO1xuICAgIHRpY2soMTAwKTtcbiAgICBsb2dnZXIuaW5mbyhUQUcsIGBkb25lICR7b3V0RmlsZX0gaW4gJHtNYXRoLnJvdW5kKHBlcmZvcm1hbmNlLm5vdygpIC0gdDApfW1zYCk7XG4gICAgcmV0dXJuIHsgLi4uc3VtbWFyeSwgb3B0aW9uczogcmVuZGVyT3B0cyB9O1xuICB9IGNhdGNoIChlKSB7XG4gICAgaWYgKHNpZ25hbD8uYWJvcnRlZCkgdGhyb3cgc2lnbmFsLnJlYXNvbjtcbiAgICB0aHJvdyBlO1xuICB9IGZpbmFsbHkge1xuICAgIHJtU3luYyh0bXBEaXIsIHsgcmVjdXJzaXZlOiB0cnVlLCBmb3JjZTogdHJ1ZSB9KTtcbiAgfVxufVxuIl19
package/dist/cli.js CHANGED
@@ -1,2 +1,2 @@
1
- import'source-map-support/register.js';import {x,o,d,n,q,y,z}from'./chunk-3POZKRKH.js';import {program}from'commander';async function h(o$1){let t=x.shape,i=o$1.defaults;program.name(o$1.name).argument("<source>","file://, http(s)://, \u6216 data: URI").option("-W, --width <number>",t.width.description,`${i.width}`).option("-H, --height <number>",t.height.description,`${i.height}`).option("-f, --fps <number>",t.fps.description,`${i.fps}`).option("-t, --duration <number>",t.duration.description,`${i.duration}`).option("-o, --out-file <path>",t.outFile.description,i.outFile).option("-a, --with-audio",t.withAudio.description,i.withAudio).option("--use-inner-proxy",t.useInnerProxy.description,i.useInnerProxy).option("-d, --deterministic",t.deterministic.description,i.deterministic).action(async(r,e)=>{try{await o$1.run(r,{width:o(d,i.width)(e.width),height:o(d,i.height)(e.height),fps:o(d,i.fps)(e.fps),duration:o(d,i.duration)(e.duration),outFile:e.outFile??i.outFile,withAudio:e.withAudio??i.withAudio,useInnerProxy:e.useInnerProxy??i.useInnerProxy,deterministic:e.deterministic??i.deterministic});}catch(f){n.fatal(f);}}),await program.parseAsync(q());}h({name:"pup",defaults:y,run:async(o,t)=>{let i=new AbortController,r=0;process.once("SIGTERM",()=>(r=143,i.abort())),process.once("SIGINT",()=>(r=130,i.abort())),process.once("exit",e=>(r=e,i.abort()));try{await z(o,{...t,signal:i.signal});}finally{r&&process.exit(r);}}});//# sourceMappingURL=cli.js.map
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9jb21tb24udHMiLCIuLi9zcmMvY2xpLnRzIl0sIm5hbWVzIjpbIm1ha2VDTEkiLCJvcHRpb25zIiwic2hhcGUiLCJSZW5kZXJTY2hlbWEiLCJkIiwicHJvZ3JhbSIsInNvdXJjZSIsIm9wdHMiLCJub2VyciIsInBhcnNlTnVtYmVyIiwiZSIsImxvZ2dlciIsInBhcmdzIiwiZGVmYXVsdFJlbmRlck9wdGlvbnMiLCJjdHJsIiwiZXhpdENvZGUiLCJjIiwicHVwIl0sIm1hcHBpbmdzIjoidUhBZUEsZUFBc0JBLENBQUFBLENBQVFDLEdBQUFBLENBQXFCLENBQ2pELElBQU1DLENBQUFBLENBQVFDLENBQUFBLENBQWEsS0FBQSxDQUNyQkMsQ0FBQUEsQ0FBSUgsR0FBQUEsQ0FBUSxRQUFBLENBQ2xCSSxPQUFBQSxDQUNHLElBQUEsQ0FBS0osR0FBQUEsQ0FBUSxJQUFJLENBQUEsQ0FDakIsUUFBQSxDQUFTLFVBQUEsQ0FBWSx1Q0FBa0MsQ0FBQSxDQUN2RCxNQUFBLENBQU8sc0JBQUEsQ0FBd0JDLENBQUFBLENBQU0sS0FBQSxDQUFNLFdBQUEsQ0FBYSxDQUFBLEVBQUdFLENBQUFBLENBQUUsS0FBSyxDQUFBLENBQUUsQ0FBQSxDQUNwRSxNQUFBLENBQU8sdUJBQUEsQ0FBeUJGLENBQUFBLENBQU0sTUFBQSxDQUFPLFdBQUEsQ0FBYSxDQUFBLEVBQUdFLENBQUFBLENBQUUsTUFBTSxDQUFBLENBQUUsQ0FBQSxDQUN2RSxNQUFBLENBQU8sb0JBQUEsQ0FBc0JGLENBQUFBLENBQU0sR0FBQSxDQUFJLFdBQUEsQ0FBYSxDQUFBLEVBQUdFLENBQUFBLENBQUUsR0FBRyxDQUFBLENBQUUsQ0FBQSxDQUM5RCxNQUFBLENBQU8seUJBQUEsQ0FBMkJGLENBQUFBLENBQU0sUUFBQSxDQUFTLFdBQUEsQ0FBYSxDQUFBLEVBQUdFLENBQUFBLENBQUUsUUFBUSxDQUFBLENBQUUsQ0FBQSxDQUM3RSxNQUFBLENBQU8sdUJBQUEsQ0FBeUJGLENBQUFBLENBQU0sT0FB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OTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wOS5cblxuaW1wb3J0IHsgcHJvZ3JhbSB9IGZyb20gXCJjb21tYW5kZXJcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuL2Jhc2UvbG9nZ2luZ1wiO1xuaW1wb3J0IHsgbm9lcnIgfSBmcm9tIFwiLi9iYXNlL25vZXJyXCI7XG5pbXBvcnQgeyBwYXJzZU51bWJlciB9IGZyb20gXCIuL2Jhc2UvcGFyc2VyXCI7XG5pbXBvcnQgeyBwYXJncyB9IGZyb20gXCIuL2Jhc2UvcHJvY2Vzc1wiO1xuaW1wb3J0IHsgUmVuZGVyU2NoZW1hLCB0eXBlIFJlbmRlck9wdGlvbnMgfSBmcm9tIFwiLi9yZW5kZXJlci9zY2hlbWFcIjtcblxuZXhwb3J0IGludGVyZmFjZSBDTElPcHRpb25zIHtcbiAgbmFtZTogc3RyaW5nO1xuICBkZWZhdWx0czogUmVuZGVyT3B0aW9ucztcbiAgcnVuOiAoc291cmNlOiBzdHJpbmcsIG9wdGlvbnM6IFJlbmRlck9wdGlvbnMpID0+IFByb21pc2U8dW5rbm93bj47XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBtYWtlQ0xJKG9wdGlvbnM6IENMSU9wdGlvbnMpIHtcbiAgY29uc3Qgc2hhcGUgPSBSZW5kZXJTY2hlbWEuc2hhcGU7XG4gIGNvbnN0IGQgPSBvcHRpb25zLmRlZmF1bHRzO1xuICBwcm9ncmFtXG4gICAgLm5hbWUob3B0aW9ucy5uYW1lKVxuICAgIC5hcmd1bWVudChcIjxzb3VyY2U+XCIsIFwiZmlsZTovLywgaHR0cChzKTovLywg5oiWIGRhdGE6IFVSSVwiKVxuICAgIC5vcHRpb24oXCItVywgLS13aWR0aCA8bnVtYmVyPlwiLCBzaGFwZS53aWR0aC5kZXNjcmlwdGlvbiwgYCR7ZC53aWR0aH1gKVxuICAgIC5vcHRpb24oXCItSCwgLS1oZWlnaHQgPG51bWJlcj5cIiwgc2hhcGUuaGVpZ2h0LmRlc2NyaXB0aW9uLCBgJHtkLmhlaWdodH1gKVxuICAgIC5vcHRpb24oXCItZiwgLS1mcHMgPG51bWJlcj5cIiwgc2hhcGUuZnBzLmRlc2NyaXB0aW9uLCBgJHtkLmZwc31gKVxuICAgIC5vcHRpb24oXCItdCwgLS1kdXJhdGlvbiA8bnVtYmVyPlwiLCBzaGFwZS5kdXJhdGlvbi5kZXNjcmlwdGlvbiwgYCR7ZC5kdXJhdGlvbn1gKVxuICAgIC5vcHRpb24oXCItbywgLS1vdXQtZmlsZSA8cGF0aD5cIiwgc2hhcGUub3V0RmlsZS5kZXNjcmlwdGlvbiwgZC5vdXRGaWxlKVxuICAgIC5vcHRpb24oXCItYSwgLS13aXRoLWF1ZGlvXCIsIHNoYXBlLndpdGhBdWRpby5kZXNjcmlwdGlvbiwgZC53aXRoQXVkaW8pXG4gICAgLm9wdGlvbihcIi0tdXNlLWlubmVyLXByb3h5XCIsIHNoYXBlLnVzZUlubmVyUHJveHkuZGVzY3JpcHRpb24sIGQudXNlSW5uZXJQcm94eSlcbiAgICAub3B0aW9uKFwiLWQsIC0tZGV0ZXJtaW5pc3RpY1wiLCBzaGFwZS5kZXRlcm1pbmlzdGljLmRlc2NyaXB0aW9uLCBkLmRldGVybWluaXN0aWMpXG4gICAgLmFjdGlvbihhc3luYyAoc291cmNlOiBzdHJpbmcsIG9wdHMpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IG9wdGlvbnMucnVuKHNvdXJjZSwge1xuICAgICAgICAgIHdpZHRoOiBub2VycihwYXJzZU51bWJlciwgZC53aWR0aCkob3B0cy53aWR0aCksXG4gICAgICAgICAgaGVpZ2h0OiBub2VycihwYXJzZU51bWJlciwgZC5oZWlnaHQpKG9wdHMuaGVpZ2h0KSxcbiAgICAgICAgICBmcHM6IG5vZXJyKHBhcnNlTnVtYmVyLCBkLmZwcykob3B0cy5mcHMpLFxuICAgICAgICAgIGR1cmF0aW9uOiBub2VycihwYXJzZU51bWJlciwgZC5kdXJhdGlvbikob3B0cy5kdXJhdGlvbiksXG4gICAgICAgICAgb3V0RmlsZTogb3B0cy5vdXRGaWxlID8/IGQub3V0RmlsZSxcbiAgICAgICAgICB3aXRoQXVkaW86IG9wdHMud2l0aEF1ZGlvID8/IGQud2l0aEF1ZGlvLFxuICAgICAgICAgIHVzZUlubmVyUHJveHk6IG9wdHMudXNlSW5uZXJQcm94eSA/PyBkLnVzZUlubmVyUHJveHksXG4gICAgICAgICAgZGV0ZXJtaW5pc3RpYzogb3B0cy5kZXRlcm1pbmlzdGljID8/IGQuZGV0ZXJtaW5pc3RpYyxcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGxvZ2dlci5mYXRhbChlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgYXdhaXQgcHJvZ3JhbS5wYXJzZUFzeW5jKHBhcmdzKCkpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8yNS5cblxuaW1wb3J0IHsgbWFrZUNMSSB9IGZyb20gXCIuL2NvbW1vblwiO1xuaW1wb3J0IHsgcHVwIH0gZnJvbSBcIi4vcHVwXCI7XG5pbXBvcnQgeyBkZWZhdWx0UmVuZGVyT3B0aW9ucyB9IGZyb20gXCIuL3JlbmRlcmVyL3NjaGVtYVwiO1xuXG5tYWtlQ0xJKHtcbiAgbmFtZTogXCJwdXBcIixcbiAgZGVmYXVsdHM6IGRlZmF1bHRSZW5kZXJPcHRpb25zLFxuICBydW46IGFzeW5jIChzb3VyY2UsIG9wdGlvbnMpID0+IHtcbiAgICBjb25zdCBjdHJsID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICAgIGxldCBleGl0Q29kZSA9IDA7XG4gICAgcHJvY2Vzcy5vbmNlKFwiU0lHVEVSTVwiLCAoKSA9PiAoKGV4aXRDb2RlID0gMTQzKSwgY3RybC5hYm9ydCgpKSk7XG4gICAgcHJvY2Vzcy5vbmNlKFwiU0lHSU5UXCIsICgpID0+ICgoZXhpdENvZGUgPSAxMzApLCBjdHJsLmFib3J0KCkpKTtcbiAgICBwcm9jZXNzLm9uY2UoXCJleGl0XCIsIChjKSA9PiAoKGV4aXRDb2RlID0gYyksIGN0cmwuYWJvcnQoKSkpO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBwdXAoc291cmNlLCB7IC4uLm9wdGlvbnMsIHNpZ25hbDogY3RybC5zaWduYWwgfSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGV4aXRDb2RlICYmIHByb2Nlc3MuZXhpdChleGl0Q29kZSk7XG4gICAgfVxuICB9LFxufSk7XG4iXX0=
1
+ import'source-map-support/register.js';import {w,n,b,m,p,x,B}from'./chunk-BG7244QU.js';import {program}from'commander';async function h(o){let t=w.shape,i=o.defaults;program.name(o.name).argument("<source>","file://, http(s)://, \u6216 data: URI").option("-W, --width <number>",t.width.description,`${i.width}`).option("-H, --height <number>",t.height.description,`${i.height}`).option("-f, --fps <number>",t.fps.description,`${i.fps}`).option("-t, --duration <number>",t.duration.description,`${i.duration}`).option("-o, --out-file <path>",t.outFile.description,i.outFile).option("-a, --with-audio",t.withAudio.description,i.withAudio).option("--use-inner-proxy",t.useInnerProxy.description,i.useInnerProxy).option("-d, --deterministic",t.deterministic.description,i.deterministic).action(async(r,e)=>{try{await o.run(r,{width:n(b,i.width)(e.width),height:n(b,i.height)(e.height),fps:n(b,i.fps)(e.fps),duration:n(b,i.duration)(e.duration),outFile:e.outFile??i.outFile,withAudio:e.withAudio??i.withAudio,useInnerProxy:e.useInnerProxy??i.useInnerProxy,deterministic:e.deterministic??i.deterministic});}catch(f){m.fatal(f);}}),await program.parseAsync(p());}h({name:"pup",defaults:x,run:async(o,t)=>{let i=new AbortController,r=0;process.once("SIGTERM",()=>(r=143,i.abort())),process.once("SIGINT",()=>(r=130,i.abort())),process.once("exit",e=>(r=e,i.abort()));try{await B(o,{...t,signal:i.signal});}finally{r&&process.exit(r);}}});//# sourceMappingURL=cli.js.map
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9jb21tb24udHMiLCIuLi9zcmMvY2xpLnRzIl0sIm5hbWVzIjpbIm1ha2VDTEkiLCJvcHRpb25zIiwic2hhcGUiLCJSZW5kZXJTY2hlbWEiLCJkIiwicHJvZ3JhbSIsInNvdXJjZSIsIm9wdHMiLCJub2VyciIsInBhcnNlTnVtYmVyIiwiZSIsImxvZ2dlciIsInBhcmdzIiwiZGVmYXVsdFJlbmRlck9wdGlvbnMiLCJjdHJsIiwiZXhpdENvZGUiLCJjIiwicHVwIl0sIm1hcHBpbmdzIjoidUhBZUEsZUFBc0JBLENBQUFBLENBQVFDLENBQUFBLENBQXFCLENBQ2pELElBQU1DLENBQUFBLENBQVFDLENBQUFBLENBQWEsS0FBQSxDQUNyQkMsQ0FBQUEsQ0FBSUgsQ0FBQUEsQ0FBUSxRQUFBLENBQ2xCSSxPQUFBQSxDQUNHLElBQUEsQ0FBS0osQ0FBQUEsQ0FBUSxJQUFJLENBQUEsQ0FDakIsUUFBQSxDQUFTLFVBQUEsQ0FBWSx1Q0FBa0MsQ0FBQSxDQUN2RCxNQUFBLENBQU8sc0JBQUEsQ0FBd0JDLENBQUFBLENBQU0sS0FBQSxDQUFNLFdBQUEsQ0FBYSxDQUFBLEVBQUdFLENBQUFBLENBQUUsS0FBSyxDQUFBLENBQUUsQ0FBQSxDQUNwRSxNQUFBLENBQU8sdUJBQUEsQ0FBeUJGLENBQUFBLENBQU0sTUFBQSxDQUFPLFdBQUEsQ0FBYSxDQUFBLEVBQUdFLENBQUFBLENBQUUsTUFBTSxDQUFBLENBQUUsQ0FBQSxDQUN2RSxNQUFBLENBQU8sb0JBQUEsQ0FBc0JGLENBQUFBLENBQU0sR0FBQSxDQUFJLFdBQUEsQ0FBYSxDQUFBLEVBQUdFLENBQUFBLENBQUUsR0FBRyxDQUFBLENBQUUsQ0FBQSxDQUM5RCxNQUFBLENBQU8seUJBQUEsQ0FBMkJGLENBQUFBLENBQU0sUUFBQSxDQUFTLFdBQUEsQ0FBYSxDQUFBLEVBQUdFLENBQUFBLENBQUUsUUFBUSxDQUFBLENBQUUsQ0FBQSxDQUM3RSxNQUFBLENBQU8sdUJBQUEsQ0FBeUJGLENBQUFBLENBQU0sT0FBQSxDQUFRLFdBQUEsQ0FBYUUsQ0FBQUEsQ0FBRSxPQUFPLENBQUEsQ0FDcEUsTUFBQSxDQUFPLGtCQUFBLENBQW9CRixDQUFBQSxDQUFNLFNBQUEsQ0FBVSxXQUFBLENBQWFFLENBQUFBLENBQUUsU0FBUyxDQUFBLENBQ25FLE1BQUEsQ0FBTyxtQkFBQSxDQUFxQkYsQ0FBQUEsQ0FBTSxhQUFBLENBQWMsV0FBQSxDQUFhRSxDQUFBQSxDQUFFLGFBQWEsQ0FBQSxDQUM1RSxNQUFBLENBQU8scUJBQUEsQ0FBdUJGLENBQUFBLENBQU0sYUFBQSxDQUFjLFdBQUEsQ0FBYUUsQ0FBQUEsQ0FBRSxhQUFhLENBQUEsQ0FDOUUsTUFBQSxDQUFPLE1BQU9FLENBQUFBLENBQWdCQyxDQUFBQSxHQUFTLENBQ3RDLEdBQUksQ0FDRixNQUFNTixDQUFBQSxDQUFRLEdBQUEsQ0FBSUssQ0FBQUEsQ0FBUSxDQUN4QixLQUFBLENBQU9FLENBQUFBLENBQU1DLENBQUFBLENBQWFMLENBQUFBLENBQUUsS0FBSyxDQUFBLENBQUVHLENBQUFBLENBQUssS0FBSyxDQUFBLENBQzdDLE1BQUEsQ0FBUUMsQ0FBQUEsQ0FBTUMsQ0FBQUEsQ0FBYUwsQ0FBQUEsQ0FBRSxNQUFNLENBQUEsQ0FBRUcsQ0FBQUEsQ0FBSyxNQUFNLENBQUEsQ0FDaEQsR0FBQSxDQUFLQyxDQUFBQSxDQUFNQyxDQUFBQSxDQUFhTCxDQUFBQSxDQUFFLEdBQUcsQ0FBQSxDQUFFRyxDQUFBQSxDQUFLLEdBQUcsQ0FBQSxDQUN2QyxRQUFBLENBQVVDLENBQUFBLENBQU1DLENBQUFBLENBQWFMLENBQUFBLENBQUUsUUFBUSxDQUFBLENBQUVHLENBQUFBLENBQUssUUFBUSxDQUFBLENBQ3RELE9BQUEsQ0FBU0EsQ0FBQUEsQ0FBSyxPQUFBLEVBQVdILENBQUFBLENBQUUsT0FBQSxDQUMzQixTQUFBLENBQVdHLENBQUFBLENBQUssU0FBQSxFQUFhSCxDQUFBQSxDQUFFLFNBQUEsQ0FDL0IsYUFBQSxDQUFlRyxDQUFBQSxDQUFLLGFBQUEsRUFBaUJILENBQUFBLENBQUUsYUFBQSxDQUN2QyxhQUFBLENBQWVHLENBQUFBLENBQUssYUFBQSxFQUFpQkgsQ0FBQUEsQ0FBRSxhQUN6QyxDQUFDLEVBQ0gsQ0FBQSxNQUFTTSxDQUFBQSxDQUFHLENBQ1ZDLENBQUFBLENBQU8sS0FBQSxDQUFNRCxDQUFDLEVBQ2hCLENBQ0YsQ0FBQyxDQUFBLENBQ0gsTUFBTUwsT0FBQUEsQ0FBUSxVQUFBLENBQVdPLENBQUFBLEVBQU8sRUFDbEMsQ0N4Q0FaLENBQUFBLENBQVEsQ0FDTixJQUFBLENBQU0sS0FBQSxDQUNOLFFBQUEsQ0FBVWEsQ0FBQUEsQ0FDVixHQUFBLENBQUssTUFBT1AsQ0FBQUEsQ0FBUUwsQ0FBQUEsR0FBWSxDQUM5QixJQUFNYSxDQUFBQSxDQUFPLElBQUksZUFBQSxDQUNiQyxDQUFBQSxDQUFXLENBQUEsQ0FDZixPQUFBLENBQVEsSUFBQSxDQUFLLFNBQUEsQ0FBVyxLQUFRQSxDQUFBQSxDQUFXLEdBQUEsQ0FBTUQsQ0FBQUEsQ0FBSyxLQUFBLEVBQU0sQ0FBRSxDQUFBLENBQzlELE9BQUEsQ0FBUSxJQUFBLENBQUssUUFBQSxDQUFVLEtBQVFDLENBQUFBLENBQVcsR0FBQSxDQUFNRCxDQUFBQSxDQUFLLEtBQUEsRUFBTSxDQUFFLENBQUEsQ0FDN0QsT0FBQSxDQUFRLElBQUEsQ0FBSyxNQUFBLENBQVNFLENBQUFBLEdBQVFELENBQUFBLENBQVdDLENBQUFBLENBQUlGLENBQUFBLENBQUssS0FBQSxFQUFNLENBQUUsQ0FBQSxDQUMxRCxHQUFJLENBQ0YsTUFBTUcsQ0FBQUEsQ0FBSVgsQ0FBQUEsQ0FBUSxDQUFFLEdBQUdMLENBQUFBLENBQVMsTUFBQSxDQUFRYSxDQUFBQSxDQUFLLE1BQU8sQ0FBQyxFQUN2RCxDQUFBLE9BQUUsQ0FDQUMsQ0FBQUEsRUFBWSxPQUFBLENBQVEsSUFBQSxDQUFLQSxDQUFRLEVBQ25DLENBQ0YsQ0FDRixDQUFDLENBQUEiLCJmaWxlIjoiY2xpLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wOS5cblxuaW1wb3J0IHsgcHJvZ3JhbSB9IGZyb20gXCJjb21tYW5kZXJcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuL2Jhc2UvbG9nZ2luZ1wiO1xuaW1wb3J0IHsgbm9lcnIgfSBmcm9tIFwiLi9iYXNlL25vZXJyXCI7XG5pbXBvcnQgeyBwYXJzZU51bWJlciB9IGZyb20gXCIuL2Jhc2UvcGFyc2VyXCI7XG5pbXBvcnQgeyBwYXJncyB9IGZyb20gXCIuL2Jhc2UvcHJvY2Vzc1wiO1xuaW1wb3J0IHsgUmVuZGVyU2NoZW1hLCB0eXBlIFJlbmRlck9wdGlvbnMgfSBmcm9tIFwiLi9yZW5kZXJlci9zY2hlbWFcIjtcblxuZXhwb3J0IGludGVyZmFjZSBDTElPcHRpb25zIHtcbiAgbmFtZTogc3RyaW5nO1xuICBkZWZhdWx0czogUmVuZGVyT3B0aW9ucztcbiAgcnVuOiAoc291cmNlOiBzdHJpbmcsIG9wdGlvbnM6IFJlbmRlck9wdGlvbnMpID0+IFByb21pc2U8dW5rbm93bj47XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBtYWtlQ0xJKG9wdGlvbnM6IENMSU9wdGlvbnMpIHtcbiAgY29uc3Qgc2hhcGUgPSBSZW5kZXJTY2hlbWEuc2hhcGU7XG4gIGNvbnN0IGQgPSBvcHRpb25zLmRlZmF1bHRzO1xuICBwcm9ncmFtXG4gICAgLm5hbWUob3B0aW9ucy5uYW1lKVxuICAgIC5hcmd1bWVudChcIjxzb3VyY2U+XCIsIFwiZmlsZTovLywgaHR0cChzKTovLywg5oiWIGRhdGE6IFVSSVwiKVxuICAgIC5vcHRpb24oXCItVywgLS13aWR0aCA8bnVtYmVyPlwiLCBzaGFwZS53aWR0aC5kZXNjcmlwdGlvbiwgYCR7ZC53aWR0aH1gKVxuICAgIC5vcHRpb24oXCItSCwgLS1oZWlnaHQgPG51bWJlcj5cIiwgc2hhcGUuaGVpZ2h0LmRlc2NyaXB0aW9uLCBgJHtkLmhlaWdodH1gKVxuICAgIC5vcHRpb24oXCItZiwgLS1mcHMgPG51bWJlcj5cIiwgc2hhcGUuZnBzLmRlc2NyaXB0aW9uLCBgJHtkLmZwc31gKVxuICAgIC5vcHRpb24oXCItdCwgLS1kdXJhdGlvbiA8bnVtYmVyPlwiLCBzaGFwZS5kdXJhdGlvbi5kZXNjcmlwdGlvbiwgYCR7ZC5kdXJhdGlvbn1gKVxuICAgIC5vcHRpb24oXCItbywgLS1vdXQtZmlsZSA8cGF0aD5cIiwgc2hhcGUub3V0RmlsZS5kZXNjcmlwdGlvbiwgZC5vdXRGaWxlKVxuICAgIC5vcHRpb24oXCItYSwgLS13aXRoLWF1ZGlvXCIsIHNoYXBlLndpdGhBdWRpby5kZXNjcmlwdGlvbiwgZC53aXRoQXVkaW8pXG4gICAgLm9wdGlvbihcIi0tdXNlLWlubmVyLXByb3h5XCIsIHNoYXBlLnVzZUlubmVyUHJveHkuZGVzY3JpcHRpb24sIGQudXNlSW5uZXJQcm94eSlcbiAgICAub3B0aW9uKFwiLWQsIC0tZGV0ZXJtaW5pc3RpY1wiLCBzaGFwZS5kZXRlcm1pbmlzdGljLmRlc2NyaXB0aW9uLCBkLmRldGVybWluaXN0aWMpXG4gICAgLmFjdGlvbihhc3luYyAoc291cmNlOiBzdHJpbmcsIG9wdHMpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IG9wdGlvbnMucnVuKHNvdXJjZSwge1xuICAgICAgICAgIHdpZHRoOiBub2VycihwYXJzZU51bWJlciwgZC53aWR0aCkob3B0cy53aWR0aCksXG4gICAgICAgICAgaGVpZ2h0OiBub2VycihwYXJzZU51bWJlciwgZC5oZWlnaHQpKG9wdHMuaGVpZ2h0KSxcbiAgICAgICAgICBmcHM6IG5vZXJyKHBhcnNlTnVtYmVyLCBkLmZwcykob3B0cy5mcHMpLFxuICAgICAgICAgIGR1cmF0aW9uOiBub2VycihwYXJzZU51bWJlciwgZC5kdXJhdGlvbikob3B0cy5kdXJhdGlvbiksXG4gICAgICAgICAgb3V0RmlsZTogb3B0cy5vdXRGaWxlID8/IGQub3V0RmlsZSxcbiAgICAgICAgICB3aXRoQXVkaW86IG9wdHMud2l0aEF1ZGlvID8/IGQud2l0aEF1ZGlvLFxuICAgICAgICAgIHVzZUlubmVyUHJveHk6IG9wdHMudXNlSW5uZXJQcm94eSA/PyBkLnVzZUlubmVyUHJveHksXG4gICAgICAgICAgZGV0ZXJtaW5pc3RpYzogb3B0cy5kZXRlcm1pbmlzdGljID8/IGQuZGV0ZXJtaW5pc3RpYyxcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGxvZ2dlci5mYXRhbChlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgYXdhaXQgcHJvZ3JhbS5wYXJzZUFzeW5jKHBhcmdzKCkpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8yNS5cblxuaW1wb3J0IHsgbWFrZUNMSSB9IGZyb20gXCIuL2NvbW1vblwiO1xuaW1wb3J0IHsgcHVwIH0gZnJvbSBcIi4vcHVwXCI7XG5pbXBvcnQgeyBkZWZhdWx0UmVuZGVyT3B0aW9ucyB9IGZyb20gXCIuL3JlbmRlcmVyL3NjaGVtYVwiO1xuXG5tYWtlQ0xJKHtcbiAgbmFtZTogXCJwdXBcIixcbiAgZGVmYXVsdHM6IGRlZmF1bHRSZW5kZXJPcHRpb25zLFxuICBydW46IGFzeW5jIChzb3VyY2UsIG9wdGlvbnMpID0+IHtcbiAgICBjb25zdCBjdHJsID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICAgIGxldCBleGl0Q29kZSA9IDA7XG4gICAgcHJvY2Vzcy5vbmNlKFwiU0lHVEVSTVwiLCAoKSA9PiAoKGV4aXRDb2RlID0gMTQzKSwgY3RybC5hYm9ydCgpKSk7XG4gICAgcHJvY2Vzcy5vbmNlKFwiU0lHSU5UXCIsICgpID0+ICgoZXhpdENvZGUgPSAxMzApLCBjdHJsLmFib3J0KCkpKTtcbiAgICBwcm9jZXNzLm9uY2UoXCJleGl0XCIsIChjKSA9PiAoKGV4aXRDb2RlID0gYyksIGN0cmwuYWJvcnQoKSkpO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBwdXAoc291cmNlLCB7IC4uLm9wdGlvbnMsIHNpZ25hbDogY3RybC5zaWduYWwgfSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGV4aXRDb2RlICYmIHByb2Nlc3MuZXhpdChleGl0Q29kZSk7XG4gICAgfVxuICB9LFxufSk7XG4iXX0=
package/dist/index.d.ts CHANGED
@@ -5,6 +5,7 @@ export { pupDeterministic } from './_tsup-dts-rollup.js';
5
5
  export { pupPkgRoot } from './_tsup-dts-rollup.js';
6
6
  export { pupApp } from './_tsup-dts-rollup.js';
7
7
  export { pupIpcSocket } from './_tsup-dts-rollup.js';
8
+ export { pupExperimentalPuppeteer } from './_tsup-dts-rollup.js';
8
9
  export { penv } from './_tsup-dts-rollup.js';
9
10
  export { EnvParser } from './_tsup-dts-rollup.js';
10
11
  export { Lazy } from './_tsup-dts-rollup.js';