pup-recorder 0.3.4 → 0.3.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/app.cjs CHANGED
@@ -1,4 +1,4 @@
1
- 'use strict';require('source-map-support/register.js');var assert=require('assert'),electron=require('electron'),promises=require('fs/promises'),path=require('path'),fs=require('fs'),nodeAv=require('node-av'),constants=require('node-av/constants'),module$1=require('module'),commander=require('commander');require('tree-kill');var C=require('zod'),api=require('node-av/api'),crypto=require('crypto'),os=require('os'),promises$1=require('timers/promises'),url=require('url');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var C__default=/*#__PURE__*/_interopDefault(C);var gr=Object.create;var ke=Object.defineProperty;var _r=Object.getOwnPropertyDescriptor;var ce=(r,e)=>(e=Symbol[r])?e:Symbol.for("Symbol."+r),R=r=>{throw TypeError(r)};var ct=(r,e,t)=>e in r?ke(r,e,{enumerable:true,configurable:true,writable:true,value:t}):r[e]=t;var dt=r=>[,,,gr(null)],ut=["class","method","getter","setter","accessor","field","value","get","set"],Z=r=>r!==void 0&&typeof r!="function"?R("Function expected"):r,xr=(r,e,t,o,i)=>({kind:ut[r],name:e,metadata:o,addInitializer:n=>t._?R("Already initialized"):i.push(Z(n||null))}),Oe=(r,e)=>ct(e,ce("metadata"),r[3]),pt=(r,e,t,o)=>{for(var i=0,n=r[e>>1],s=n&&n.length;i<s;i++)n[i].call(t);return o},U=(r,e,t,o,i,n)=>{var c,a,d,u,p=e&7,h=false,l=false,w=2,g=ut[p+5],v=r[w]||(r[w]=[]),_=((i=i.prototype),_r(i,t));for(var E=o.length-1;E>=0;E--)d=xr(p,t,a={},r[3],v),(d.static=h,d.private=l,u=d.access={has:x=>t in x},(u.get=x=>x[t]),p>2),c=(0, o[E])(_[g],d),a._=1,Z(c)&&(_[g]=c);return _&&ke(i,t,_),i},mt=(r,e,t)=>ct(r,e+"",t);var y=(r,e,t)=>{if(e!=null){typeof e!="object"&&typeof e!="function"&&R("Object expected");var o,i;t&&(o=e[ce("asyncDispose")]),o===void 0&&(o=e[ce("dispose")],t&&(i=o)),typeof o!="function"&&R("Object not disposable"),i&&(o=function(){try{i.call(this);}catch(n){return Promise.reject(n)}}),r.push([t,o,e]);}else t&&r.push([t]);return e},P=(r,e,t)=>{var o=typeof SuppressedError=="function"?SuppressedError:function(s,c,a,d){return d=Error(a),d.name="SuppressedError",d.error=s,d.suppressed=c,d},i=s=>e=t?new o(s,e,"An error was suppressed during disposal"):(t=true,s),n=s=>{for(;s=r.pop();)try{var c=s[1]&&s[1].call(s[2]);if(s[0])return Promise.resolve(c).then(n,a=>(i(a),n()))}catch(a){i(a);}if(t)throw e};return n()};var vr=()=>typeof document>"u"?new URL(`file:${__filename}`).href:document.currentScript&&document.currentScript.tagName.toUpperCase()==="SCRIPT"?document.currentScript.src:new URL("main.js",document.baseURI).href,m=vr();function lt(r,e,t){try{return e(process.env[r])}catch{return t}}function k(r){if(typeof r=="number")return r;let e=Number(r);if(Number.isNaN(e))throw new Error(`Value ${r} is not a valid number`);return e}var Fr=module$1.createRequire(m),ee=process.env,ft=lt("PUP_LOG_LEVEL",k,2),ht=ee.PUP_USE_INNER_PROXY==="1",wt=ee.PUP_DISABLE_GPU==="1",gt=ee.PUP_DISABLE_HW_CODEC==="1",_t=ee.PUP_DETERMINISTIC==="1",Sr=path.dirname(Fr.resolve("pup-recorder/package.json"));path.join(Sr,"dist","app.cjs");var xt=ee.PUP_WINDOW_TOLERANT==="1";var Be="<pup@debug>",Ne="<pup@info>",De="<pup@warn>",Le="<pup@error>",Ve="<pup@fatal>";function te(r,e){return function(...t){let o=t.map(i=>i instanceof Error?i.stack??String(i):i);return r.call(this,...o)}}var bt,yt,vt,Et,Pt,O;Pt=[te],Et=[te],vt=[te],yt=[te],bt=[te];var T=class{constructor(e=ft){this._level=e;pt(O,5,this);mt(this,"_impl");this.impl=console;}_level;get level(){return this._level}set level(e){this._level=e,this.impl=this._impl??console;}get impl(){return this._impl}set impl(e){let t=e.debug??console.debug,o=e.info??console.info,i=e.warn??console.warn,n=e.error??console.error,s=this._level;this._impl={debug:s>=3?t:void 0,info:s>=2?o:void 0,warn:s>=1?i:void 0,error:s>=0?n:void 0};}debug(...e){this.impl?.debug?.(Be,...e);}info(...e){this.impl?.info?.(Ne,...e);}warn(...e){this.impl?.warn?.(De,...e);}error(...e){this.impl?.error?.(Le,...e);}fatal(...e){this.impl?.error?.(Ve,...e),process.exit(1);}dispatch(e){let t=e.trimEnd();t.startsWith(Be)?this.debug(t.slice(Be.length+1)):t.startsWith(Ne)?this.info(t.slice(Ne.length+1)):t.startsWith(De)?this.warn(t.slice(De.length+1)):t.startsWith(Le)?this.error(t.slice(Le.length+1)):this.info(t);}attach(e,t){return new Promise((o,i)=>{this.debug(`${t}.attach`);let n="",s=c=>{let a=c.toString();a.startsWith(Ve)?n+=a.slice(Ve.length+1):this.dispatch(a);};e.stderr?.on("data",s),e.stdout?.on("data",s),e.on("error",c=>{n+=c.message,e.kill();}).once("close",(c,a)=>{c||a||n?(n||=`command failed: ${e.spawnargs.join(" ")}`,this.debug(`${t}.close`,{code:c,signal:a,fatal:n}),i(new Error(n))):(this.debug(`${t}.close`),o());}).on("unhandledRejection",c=>{this.error(`${t}.unhandled`,c);}).on("uncaughtExceptionMonitor",c=>{this.error(`${t}.unhandled`,c);});})}};O=dt(),U(O,1,"debug",Pt,T),U(O,1,"info",Et,T),U(O,1,"warn",vt,T),U(O,1,"error",yt,T),U(O,1,"fatal",bt,T),Oe(O,T);var f=new T;nodeAv.Log.setCallback((r,e)=>{let t=e.trimEnd();t&&(r<=constants.AV_LOG_ERROR?f.error(t):r<=constants.AV_LOG_WARNING&&f.warn(t));});var Mr="[Crash]";function Ft(){let r=path.join(electron.app.getPath("userData"),"crashes");fs.mkdirSync(r,{recursive:true}),electron.app.setPath("crashDumps",r),electron.crashReporter.start({productName:"pup-recorder",uploadToServer:false,compress:false,ignoreSystemCrashHandler:true}),f.debug(Mr,"set dump to",r);}function re(r,e){return (...t)=>{try{let o=r(...t);return o instanceof Promise?o.catch(()=>e):o}catch{return e}}}var Br="--pup-priv-args";function St(){let r=process.argv,e=r.find(o=>o.startsWith(Br));if(!e)return f.debug("procargv",r),process.argv;let t=["exec",...r.slice(-1)];return e=Buffer.from(e.split("=")[1],"base64").toString(),t.push(...JSON.parse(e)),f.debug("pupargs",t),t}var Nr=1920,Dr=1080,Lr=30,Vr=5,Ur="output.mp4",At=C__default.default.object({duration:C__default.default.number().describe("Duration in seconds"),width:C__default.default.number().describe("Video width"),height:C__default.default.number().describe("Video height"),fps:C__default.default.number().describe("Frames per second"),withAudio:C__default.default.boolean().describe("Capture and encode audio"),outFile:C__default.default.string().describe("Output mp4 file path"),useInnerProxy:C__default.default.boolean().describe("Use bilibili inner proxy for resource access"),deterministic:C__default.default.boolean().describe("Render by frame rather than recording"),disableGpu:C__default.default.boolean().describe("Disable GPU rendering, may reduce performance but increase stability"),disableHwCodec:C__default.default.boolean().describe("Disable hardware video encoder (NVENC/VideoToolbox), use software x265"),windowTolerant:C__default.default.boolean().describe("Fall back to dom-ready if warmup load times out")}),Tt={width:Nr,height:Dr,fps:Lr,duration:Vr,outFile:Ur,withAudio:false,useInnerProxy:ht,deterministic:_t,disableGpu:wt,disableHwCodec:gt,windowTolerant:xt};async function Rt(r){let e=At.shape,t=r.defaults;commander.program.name(r.name).argument("<source>","file://, http(s)://, or data: URI").option("-W, --width <number>",e.width.description,`${t.width}`).option("-H, --height <number>",e.height.description,`${t.height}`).option("-f, --fps <number>",e.fps.description,`${t.fps}`).option("-t, --duration <number>",e.duration.description,`${t.duration}`).option("-o, --out-file <path>",e.outFile.description,t.outFile).option("-a, --with-audio",e.withAudio.description,t.withAudio).option("-d, --deterministic",e.deterministic.description,t.deterministic).option("--use-inner-proxy",e.useInnerProxy.description,t.useInnerProxy).option("--disable-gpu",e.disableGpu.description,t.disableGpu).option("--disable-hw-codec",e.disableHwCodec.description,t.disableHwCodec).option("--window-tolerant",e.windowTolerant.description,t.windowTolerant).action(async(o,i)=>{try{await r.run(o,{width:re(k,t.width)(i.width),height:re(k,t.height)(i.height),fps:re(k,t.fps)(i.fps),duration:re(k,t.duration)(i.duration),outFile:i.outFile??t.outFile,withAudio:i.withAudio??t.withAudio,useInnerProxy:i.useInnerProxy??t.useInnerProxy,deterministic:i.deterministic??t.deterministic,disableGpu:i.disableGpu??t.disableGpu,disableHwCodec:i.disableHwCodec??t.disableHwCodec,windowTolerant:i.windowTolerant??t.windowTolerant});}catch(n){f.fatal(n);}}),await commander.program.parseAsync(St());}var de=class{writeProgress(e){this.send({type:"progress",value:e});}writeError(e){return this.send({type:"error",error:e})}writeDone(e){return this.send({type:"done",payload:e})}send(e){return new Promise(t=>{if(!process.send)return t();process.send(e,()=>t());})}};var Ue=32;var kt="stego-tick";function Ot(r,e){let{width:t,height:o}=e;return `<!DOCTYPE html>
1
+ 'use strict';require('source-map-support/register.js');var assert=require('assert'),electron=require('electron'),promises=require('fs/promises'),path=require('path'),fs=require('fs'),nodeAv=require('node-av'),constants=require('node-av/constants'),module$1=require('module'),commander=require('commander');require('tree-kill');var P=require('zod'),api=require('node-av/api'),promises$1=require('timers/promises'),url=require('url');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var P__default=/*#__PURE__*/_interopDefault(P);var Or=Object.create;var We=Object.defineProperty;var Lr=Object.getOwnPropertyDescriptor;var _e=(r,e)=>(e=Symbol[r])?e:Symbol.for("Symbol."+r),H=r=>{throw TypeError(r)};var yt=(r,e,t)=>e in r?We(r,e,{enumerable:true,configurable:true,writable:true,value:t}):r[e]=t;var vt=r=>[,,,Or(null)],Pt=["class","method","getter","setter","accessor","field","value","get","set"],pe=r=>r!==void 0&&typeof r!="function"?H("Function expected"):r,Nr=(r,e,t,o,n)=>({kind:Pt[r],name:e,metadata:o,addInitializer:i=>t._?H("Already initialized"):n.push(pe(i||null))}),$e=(r,e)=>yt(e,_e("metadata"),r[3]),Et=(r,e,t,o)=>{for(var n=0,i=r[e>>1],a=i&&i.length;n<a;n++)i[n].call(t);return o},K=(r,e,t,o,n,i)=>{var c,s,d,u,p=e&7,w=false,f=false,l=2,g=Pt[p+5],y=r[l]||(r[l]=[]),_=((n=n.prototype),Lr(n,t));for(var v=o.length-1;v>=0;v--)d=Nr(p,t,s={},r[3],y),(d.static=w,d.private=f,u=d.access={has:x=>t in x},(u.get=x=>x[t]),p>2),c=(0, o[v])(_[g],d),s._=1,pe(c)&&(_[g]=c);return _&&We(n,t,_),n},St=(r,e,t)=>yt(r,e+"",t);var A=(r,e,t)=>{if(e!=null){typeof e!="object"&&typeof e!="function"&&H("Object expected");var o,n;t&&(o=e[_e("asyncDispose")]),o===void 0&&(o=e[_e("dispose")],t&&(n=o)),typeof o!="function"&&H("Object not disposable"),n&&(o=function(){try{n.call(this);}catch(i){return Promise.reject(i)}}),r.push([t,o,e]);}else t&&r.push([t]);return e},T=(r,e,t)=>{var o=typeof SuppressedError=="function"?SuppressedError:function(a,c,s,d){return d=Error(s),d.name="SuppressedError",d.error=a,d.suppressed=c,d},n=a=>e=t?new o(a,e,"An error was suppressed during disposal"):(t=true,a),i=a=>{for(;a=r.pop();)try{var c=a[1]&&a[1].call(a[2]);if(a[0])return Promise.resolve(c).then(i,s=>(n(s),i()))}catch(s){n(s);}if(t)throw e};return i()};var Vr=()=>typeof document>"u"?new URL(`file:${__filename}`).href:document.currentScript&&document.currentScript.tagName.toUpperCase()==="SCRIPT"?document.currentScript.src:new URL("main.js",document.baseURI).href,m=Vr();function Ft(r,e,t){try{return e(process.env[r])}catch{return t}}function U(r){if(typeof r=="number")return r;let e=Number(r);if(Number.isNaN(e))throw new Error(`Value ${r} is not a valid number`);return e}var Wr=module$1.createRequire(m),At=Ft("PUP_LOG_LEVEL",U,2),Tt=path.dirname(Wr.resolve("pup-recorder/package.json"));path.join(Tt,"dist","app.cjs");var kt=path.join(Tt,"dist","audio_preload.cjs");var ze="<pup@debug>",je="<pup@info>",qe="<pup@warn>",Xe="<pup@error>",Ye="<pup@fatal>";function ue(r,e){return function(...t){let o=t.map(n=>n instanceof Error?n.stack??String(n):n);return r.call(this,...o)}}var It,Rt,Bt,Ot,Lt,W;Lt=[ue],Ot=[ue],Bt=[ue],Rt=[ue],It=[ue];var B=class{constructor(e=At){this._level=e;Et(W,5,this);St(this,"_impl");this.impl=console;}_level;get level(){return this._level}set level(e){this._level=e,this.impl=this._impl??console;}get impl(){return this._impl}set impl(e){let t=e.debug??console.debug,o=e.info??console.info,n=e.warn??console.warn,i=e.error??console.error,a=this._level;this._impl={debug:a>=3?t:void 0,info:a>=2?o:void 0,warn:a>=1?n:void 0,error:a>=0?i:void 0};}debug(...e){this.impl?.debug?.(ze,...e);}info(...e){this.impl?.info?.(je,...e);}warn(...e){this.impl?.warn?.(qe,...e);}error(...e){this.impl?.error?.(Xe,...e);}fatal(...e){this.impl?.error?.(Ye,...e),process.exit(1);}dispatch(e){let t=e.trimEnd();t.startsWith(ze)?this.debug(t.slice(ze.length+1)):t.startsWith(je)?this.info(t.slice(je.length+1)):t.startsWith(qe)?this.warn(t.slice(qe.length+1)):t.startsWith(Xe)?this.error(t.slice(Xe.length+1)):this.info(t);}attach(e,t){return new Promise((o,n)=>{this.debug(`${t}.attach`);let i="",a=c=>{let s=c.toString();s.startsWith(Ye)?i+=s.slice(Ye.length+1):this.dispatch(s);};e.stderr?.on("data",a),e.stdout?.on("data",a),e.on("error",c=>{i+=c.message,e.kill();}).once("close",(c,s)=>{c||s||i?(i||=`command failed: ${e.spawnargs.join(" ")}`,this.debug(`${t}.close`,{code:c,signal:s,fatal:i}),n(new Error(i))):(this.debug(`${t}.close`),o());}).on("unhandledRejection",c=>{this.error(`${t}.unhandled`,c);}).on("uncaughtExceptionMonitor",c=>{this.error(`${t}.unhandled`,c);});})}};W=vt(),K(W,1,"debug",Lt,B),K(W,1,"info",Ot,B),K(W,1,"warn",Bt,B),K(W,1,"error",Rt,B),K(W,1,"fatal",It,B),$e(W,B);var h=new B;nodeAv.Log.setCallback((r,e)=>{let t=e.trimEnd();t&&(r<=constants.AV_LOG_ERROR?h.error(t):r<=constants.AV_LOG_WARNING&&h.warn(t));});var Yr="[Crash]";function Mt(){let r=path.join(electron.app.getPath("userData"),"crashes");fs.mkdirSync(r,{recursive:true}),electron.app.setPath("crashDumps",r),electron.crashReporter.start({productName:"pup-recorder",uploadToServer:false,compress:false,ignoreSystemCrashHandler:true}),h.debug(Yr,"set dump to",r);}function me(r,e){return (...t)=>{try{let o=r(...t);return o instanceof Promise?o.catch(()=>e):o}catch{return e}}}var Kr="--pup-priv-args";function Dt(){let r=process.argv,e=r.find(o=>o.startsWith(Kr));if(!e)return h.debug("procargv",r),process.argv;let t=["exec",...r.slice(-1)];return e=Buffer.from(e.split("=")[1],"base64").toString(),t.push(...JSON.parse(e)),h.debug("pupargs",t),t}var Jr=1920,Qr=1080,Zr=30,eo=5,to="out/html.mp4,out/html.webm",Vt=P__default.default.object({duration:P__default.default.number().describe("Duration in seconds"),width:P__default.default.number().describe("Video width"),height:P__default.default.number().describe("Video height"),fps:P__default.default.number().describe("Frames per second"),withAudio:P__default.default.boolean().describe("Capture and encode audio"),outFile:P__default.default.string().describe("Comma-separated output paths; extension (.mp4/.webm) selects encoder"),useInnerProxy:P__default.default.boolean().describe("Use bilibili inner proxy for resource access"),deterministic:P__default.default.boolean().describe("Render by frame rather than recording"),disableGpu:P__default.default.boolean().describe("Disable GPU rendering, may reduce performance but increase stability"),disableHwCodec:P__default.default.boolean().describe("Disable hardware video encoder (NVENC/VideoToolbox), use software x265"),windowTolerant:P__default.default.boolean().describe("Fall back to dom-ready if warmup load times out")}),Ht={width:Jr,height:Qr,fps:Zr,duration:eo,outFile:to,withAudio:false,useInnerProxy:false,deterministic:false,disableGpu:false,disableHwCodec:false,windowTolerant:false};async function Wt(r){let e=Vt.shape,t=Ht;commander.program.name(r.name).argument("<source>","file://, http(s)://, or data: URI").option("-W, --width <number>",e.width.description,`${t.width}`).option("-H, --height <number>",e.height.description,`${t.height}`).option("-f, --fps <number>",e.fps.description,`${t.fps}`).option("-t, --duration <number>",e.duration.description,`${t.duration}`).option("-o, --out-file <path>",e.outFile.description,t.outFile).option("-a, --with-audio",e.withAudio.description,t.withAudio).option("-d, --deterministic",e.deterministic.description,t.deterministic).option("--use-inner-proxy",e.useInnerProxy.description,t.useInnerProxy).option("--disable-gpu",e.disableGpu.description,t.disableGpu).option("--disable-hw-codec",e.disableHwCodec.description,t.disableHwCodec).option("--window-tolerant",e.windowTolerant.description,t.windowTolerant).action(async(o,n)=>{try{await r.run(o,{width:me(U,t.width)(n.width),height:me(U,t.height)(n.height),fps:me(U,t.fps)(n.fps),duration:me(U,t.duration)(n.duration),outFile:n.outFile??t.outFile,withAudio:n.withAudio??t.withAudio,useInnerProxy:n.useInnerProxy??t.useInnerProxy,deterministic:n.deterministic??t.deterministic,disableGpu:n.disableGpu??t.disableGpu,disableHwCodec:n.disableHwCodec??t.disableHwCodec,windowTolerant:n.windowTolerant??t.windowTolerant});}catch(i){h.fatal(i);}}),await commander.program.parseAsync(Dt());}var be=class{writeConsole(e,t){this.send({type:"console",level:e,message:t});}writeProgress(e){this.send({type:"progress",value:e});}writeError(e){return this.send({type:"error",error:e})}writeDone(e){return this.send({type:"done",payload:e})}send(e){return new Promise(t=>{if(!process.send)return t();process.send(e,()=>t());})}};function xe(r){return new Promise(e=>setTimeout(e,r))}function $(r,e,t){return new Promise((o,n)=>{let i=setTimeout(()=>n(new Error(`${t} timed out after ${e}ms`)),e);r.then(o,n).finally(()=>clearTimeout(i));})}var ye=5e3;function ve(r,e,t){return $(r.sendCommand(e,t),ye,`cdp.${e}`)}function Ke(r,e){return $(ve(r,"Runtime.evaluate",{expression:e}),ye,"evalIn")}function $t(r,e){return new Promise((t,o)=>{let n=setTimeout(()=>{r.off("message",i),o(new Error(`advanceVirtualTime timed out after ${ye}ms`));},ye),i=(a,c)=>{c==="Emulation.virtualTimeBudgetExpired"&&(clearTimeout(n),r.off("message",i),t());};r.on("message",i),ve(r,"Emulation.setVirtualTimePolicy",{policy:"advance",budget:e}).catch(a=>{clearTimeout(n),r.off("message",i),o(a);});})}async function Gt(r){await ve(r,"Emulation.setVirtualTimePolicy",{policy:"pause"});}async function Pe(r,e){await ve(r,"Emulation.setDeviceMetricsOverride",{...e,deviceScaleFactor:1,mobile:false});}var Je=32;var zt="stego-tick";function jt(r,e){let{width:t,height:o}=e;return `<!DOCTYPE html>
2
2
  <html>
3
3
  <head>
4
4
  <meta charset="UTF-8">
@@ -32,7 +32,7 @@
32
32
  (function() {
33
33
  const { ipcRenderer } = require('electron');
34
34
  const WIDTH = ${t};
35
- const MARKER_WIDTH = ${Ue};
35
+ const MARKER_WIDTH = ${Je};
36
36
  const canvas = document.getElementById('stego');
37
37
  const ctx = canvas.getContext('2d', { willReadFrequently: true });
38
38
  let startTime = null;
@@ -63,7 +63,7 @@
63
63
  }
64
64
 
65
65
  ctx.putImageData(imageData, 0, 0);
66
- ipcRenderer.send('${kt}');
66
+ ipcRenderer.send('${zt}');
67
67
  }
68
68
 
69
69
  function updateLoop() {
@@ -92,81 +92,9 @@
92
92
  })();
93
93
  </script>
94
94
  </body>
95
- </html>`}function ue(r,e){let{width:t,height:o}=e;if(t<Ue||o<2)return;let i=o-1,n=0;for(let s=0;s<Ue;s++){let c=(i*t+s)*4,d=(r[c]??0)>127?1:0;n=n<<1|d;}if(n=n>>>0,!(!Number.isFinite(n)||n<0||n>1e7))return n}async function Mt(r){await r.sendCommand("Runtime.evaluate",{expression:"__pup_start_stego__()"});}async function Bt(r,e){let t=new Promise(o=>electron.ipcMain.once(kt,()=>o()));await r.sendCommand("Runtime.evaluate",{expression:`__pup_draw_stego__(${e})`}),await t;}async function Nt(r){await r.sendCommand("Runtime.evaluate",{expression:"__pup_stop_stego__()"});}var He="pup";electron.protocol.registerSchemesAsPrivileged([{scheme:He,privileges:{standard:true,secure:true,bypassCSP:true,allowServiceWorkers:true,supportFetchAPI:true,corsEnabled:true,stream:true,codeCache:true}}]);function Lt(){electron.protocol.handle(He,r=>{let e=new URL(r.url),t=e.searchParams.get("src")??"",o=parseInt(e.searchParams.get("w")??"0",10),i=parseInt(e.searchParams.get("h")??"0",10),n=Ot(t,{width:o,height:i});return new Response(n,{headers:{"content-type":"text/html"}})});}function Vt(r,e){let t=new URL(`${He}://stego`);return t.searchParams.set("src",r),t.searchParams.set("w",String(e.width)),t.searchParams.set("h",String(e.height)),t.toString()}function Ut(r,e){return new Promise((t,o)=>{let i=setTimeout(()=>{r.off("message",n),o(new Error("advanceVirtualTime timed out after 30000ms"));},3e4),n=(s,c)=>{c==="Emulation.virtualTimeBudgetExpired"&&(clearTimeout(i),r.off("message",n),t());};r.on("message",n),r.sendCommand("Emulation.setVirtualTimePolicy",{policy:"advance",budget:e});})}function Ht(r){return r.sendCommand("Emulation.setVirtualTimePolicy",{policy:"pause"})}async function pe(r,e){await r.sendCommand("Emulation.setDeviceMetricsOverride",{...e,deviceScaleFactor:1,mobile:false});}var H=class{constructor(e){this.maxConcurrency=e;}maxConcurrency;_active=0;_queue=[];_signals=new WeakSet;_resolve;get active(){return this._active}get pending(){return this._queue.length}get stats(){return `active: ${this.active}, pending: ${this.pending}`}async schedule(e,t){return t?.throwIfAborted(),t&&!this._signals.has(t)&&(this._signals.add(t),t.addEventListener("abort",()=>this.flush(t),{once:true})),new Promise((o,i)=>{this._queue.push({run:()=>{if(t?.aborted){i(t.reason),this.next();return}this._active++,e().then(n=>{this._active--,o(n),this.next();}).catch(n=>{this._active--,i(n),this.next();});},reject:i,signal:t}),this.next();})}async drain(){if(!(this._active===0&&this.pending===0))return new Promise(e=>this._resolve=e)}flush(e){let t=[];for(let o of this._queue)o.signal===e?o.reject(e.reason):t.push(o);this._queue=t,this.next();}next(){if(this._active===0&&this.pending===0){this._resolve?.(),this._resolve=void 0;return}this._active<this.maxConcurrency&&this._queue.shift()?.run();}};async function M(r,e){let t=new nodeAv.CodecContext;t.allocContext3(r.codec),t.codecId=r.codec.id,t.width=r.width,t.height=r.height,t.pixelFormat=r.pixelFormat,t.timeBase=new nodeAv.Rational(1,r.fps),t.framerate=new nodeAv.Rational(r.fps,1),t.gopSize=r.fps*2,t.bitRate=BigInt(r.bitrate),t.setFlags(constants.AV_CODEC_FLAG_GLOBAL_HEADER),r.codecTag&&(t.codecTag=r.codecTag),r.colorRange!==void 0&&(t.colorRange=r.colorRange);for(let[o,i]of Object.entries(r.options??{}))t.setOption(o,i);return nodeAv.FFmpegError.throwIfError(await t.open2(r.codec,null),e),t}function oe(r,e,t){let o=new nodeAv.Frame;return o.alloc(),o.format=t,o.width=r,o.height=e,nodeAv.FFmpegError.throwIfError(o.getBuffer(0),"frame.getBuffer"),o}function S(){let r=new nodeAv.Packet;return r.alloc(),r}async function W(r,e,t,o){for(;;){let i=await r.receivePacket(e);if(i===constants.AVERROR_EAGAIN||i===constants.AVERROR_EOF)break;nodeAv.FFmpegError.throwIfError(i,"receivePacket"),e.streamIndex=t.index,e.duration===0n&&(e.duration=1n),e.rescaleTs(r.timeBase,t.timeBase),await o.writePacket(e),e.unref();}}var ro={[constants.AV_SAMPLE_FMT_FLT]:"flt",[constants.AV_SAMPLE_FMT_FLTP]:"fltp"},me=class r{_ctx;_stream;_pkt;_outRate;_outFmt;_frameSize;_filterFrame;_graph;_bufSrc;_bufSink;_inRate;_pts=0n;constructor(e,t,o){this._ctx=e,this._stream=t,this._outRate=e.sampleRate,this._outFmt=o,this._frameSize=e.frameSize,this._pkt=S(),this._filterFrame=new nodeAv.Frame,this._filterFrame.alloc();}static async create(e){let t=nodeAv.Codec.findEncoderByName(e.codecName);if(!t)throw new Error(`Audio encoder not found: ${e.codecName}`);let o=new nodeAv.CodecContext;o.allocContext3(t),o.codecId=t.id,o.sampleFormat=e.outSampleFmt,o.sampleRate=e.outSampleRate,o.channelLayout=constants.AV_CHANNEL_LAYOUT_STEREO,o.timeBase=new nodeAv.Rational(1,e.outSampleRate),o.bitRate=BigInt(e.bitrate),e.globalHeader&&o.setFlags(constants.AV_CODEC_FLAG_GLOBAL_HEADER),nodeAv.FFmpegError.throwIfError(await o.open2(t,null),"audioCtx.open2");let i=e.muxer.addStream(o);return new r(o,i,e.outSampleFmt)}setInputRate(e){this._graph?.[Symbol.dispose](),this._inRate=e;let t=new nodeAv.FilterGraph;t.alloc();let o=nodeAv.Filter.getByName("abuffer"),i=t.createFilter(o,"src",`sample_rate=${e}:sample_fmt=flt:channel_layout=stereo:time_base=1/${e}`);if(!i)throw new Error("Failed to create abuffer");let n=nodeAv.Filter.getByName("abuffersink"),s=t.createFilter(n,"sink");if(!s)throw new Error("Failed to create abuffersink");let a=`aformat=sample_fmts=${ro[this._outFmt]??"flt"}:sample_rates=${this._outRate}:channel_layouts=stereo,asetnsamples=n=${this._frameSize}:p=1`,d=nodeAv.FilterInOut.createList([{name:"in",filterCtx:i,padIdx:0}]),u=nodeAv.FilterInOut.createList([{name:"out",filterCtx:s,padIdx:0}]);nodeAv.FFmpegError.throwIfError(t.parsePtr(a,u,d),"graph.parsePtr"),nodeAv.FFmpegError.throwIfError(t.configSync(),"graph.config"),this._graph=t,this._bufSrc=i,this._bufSink=s;}async encode(e,t){var s=[];try{if(!this._bufSrc||!this._inRate)return;let o=new Float32Array(e.buffer,e.byteOffset,e.byteLength/4);for(let u=0;u<o.length;u++)isFinite(o[u])||(o[u]=0);let i=o.length>>1;let n=y(s,nodeAv.Frame.fromAudioBuffer(Buffer.from(o.buffer,o.byteOffset,o.byteLength),{nbSamples:i,format:constants.AV_SAMPLE_FMT_FLT,sampleRate:this._inRate,channelLayout:constants.AV_CHANNEL_LAYOUT_STEREO,pts:this._pts,timeBase:{num:1,den:this._inRate}}));this._pts+=BigInt(i);nodeAv.FFmpegError.throwIfError(await this._bufSrc.buffersrcAddFrame(n),"buffersrcAddFrame");await this.drain(t);}catch(c){var a=c,d=true;}finally{P(s,a,d);}}async flush(e){this._bufSrc&&(await this._bufSrc.buffersrcAddFrame(null),await this.drain(e)),await this._ctx.sendFrame(null),await this.drainCodec(e);}[Symbol.dispose](){this._pkt.free(),this._filterFrame.free(),this._graph?.[Symbol.dispose](),this._ctx.freeContext();}async drain(e){for(;;){let t=await this._bufSink.buffersinkGetFrame(this._filterFrame);if(t===constants.AVERROR_EAGAIN||t===constants.AVERROR_EOF)break;nodeAv.FFmpegError.throwIfError(t,"buffersinkGetFrame"),nodeAv.FFmpegError.throwIfError(await this._ctx.sendFrame(this._filterFrame),"audioCtx.sendFrame"),this._filterFrame.unref(),await this.drainCodec(e);}}drainCodec(e){return W(this._ctx,this._pkt,this._stream,e)}};var $=class r{src;dst;pkt;_sws;_png;static async create(e,t){let o=nodeAv.Codec.findDecoderByName(nodeAv.FF_DECODER_PNG);return assert.ok(o,"png decoder unavailable"),new r(e,t,o)}constructor(e,t,o){this._png=o,this.src=oe(e,t,nodeAv.AV_PIX_FMT_BGRA),this.dst=oe(e,t,nodeAv.AV_PIX_FMT_YUVA420P),this.pkt=S();}async png(){let e=new nodeAv.CodecContext;return e.allocContext3(this._png),nodeAv.FFmpegError.throwIfError(await e.open2(this._png),"pngDecoder.open2"),e}async decodePNG(e){var o=[];try{let t=y(o,await this.png());this.pkt.data=e;nodeAv.FFmpegError.throwIfError(await t.sendPacket(this.pkt),"pngDecoder.sendPacket");this.pkt.unref();nodeAv.FFmpegError.throwIfError(await t.receiveFrame(this.src),"pngDecoder.receiveFrame");return this.src}catch(i){var n=i,s=true;}finally{P(o,n,s);}}get sws(){if(!this._sws){let e=new nodeAv.SoftwareScaleContext,t=this.src.format;e.getContext(this.src.width,this.src.height,t,this.src.width,this.src.height,nodeAv.AV_PIX_FMT_YUVA420P,nodeAv.SWS_BILINEAR),this._sws=e;}return this._sws}[Symbol.dispose](){this.src[Symbol.dispose](),this.dst[Symbol.dispose](),this.pkt[Symbol.dispose](),this._sws?.[Symbol.dispose]();}};function he(r){let e=Buffer.alloc(r.length>>3);for(let t=0;t<e.length;t++){let o=0;for(let i=0;i<8;i++)o=o<<1|r[t*8+i];e[t]=o;}return e}var le=class{bits=[];w(e,t){for(let o=t-1;o>=0;o--)this.bits.push(e>>o&1);}flag(e){this.bits.push(e?1:0);}ue(e){let t=e+1,o=32-Math.clz32(t);for(let i=0;i<o-1;i++)this.bits.push(0);for(let i=o-1;i>=0;i--)this.bits.push(t>>i&1);}align(e){for(;this.bits.length%8!==0;)this.bits.push(e);}copy(e,t,o){for(let i=0;i<o;i++)this.bits.push(e[t+i]);}},fe=class{_bits;pos=0;constructor(e){this._bits=[];for(let t=0;t<e.length;t++)for(let o=7;o>=0;o--)this._bits.push(e[t]>>o&1);}get bits(){return this._bits}read(e){let t=0;for(let o=0;o<e;o++)t=t<<1|this._bits[this.pos++];return t}readUe(){let e=0;for(;this._bits[this.pos]===0;)e++,this.pos++;this.pos++;let t=1;for(let o=0;o<e;o++)t=t<<1|this._bits[this.pos++];return t-1}};var z=Buffer.from([0,0,0,1]);function Xt(r,e){let t=r>>1&63,o=(r&1)<<5|e>>3&31,i=e&7;return {type:t,layerId:o,temporalId:i}}function $e(r,e,t){let o=(r&63)<<1|e>>5&1,i=(e&31)<<3|t&7;return [o,i]}function j(r){let e=[],t=0;for(;t<r.length;){let o=0;if(t+3<r.length&&r[t]===0&&r[t+1]===0&&r[t+2]===1)o=3;else if(t+4<r.length&&r[t]===0&&r[t+1]===0&&r[t+2]===0&&r[t+3]===1)o=4;else {t++;continue}let i=t+o;if(i+2>r.length)break;let n=r.length;for(let a=i+2;a<r.length-2;a++)if(r[a]===0&&r[a+1]===0&&(r[a+2]===1||a+3<r.length&&r[a+2]===0&&r[a+3]===1)){n=a;break}let{type:s,layerId:c}=Xt(r[i],r[i+1]);e.push({type:s,layerId:c,data:r.subarray(i,n)}),t=n;}return e}function ze(r,e){let t=Buffer.from(r),{type:o,temporalId:i}=Xt(t[0],t[1]),[n,s]=$e(o,e,i);return t[0]=n,t[1]=s,t}function Yt(r){let e=[];for(let t=0;t<r.length;t++)t+2<r.length&&r[t]===0&&r[t+1]===0&&r[t+2]===3?(e.push(0,0),t+=2):e.push(r[t]);return Buffer.from(e)}function Jt(r){let e=[];e.push(r[0],r[1]);let t=0;for(let o=2;o<r.length;o++)t===2&&r[o]<=3&&(e.push(3),t=0),r[o]===0?t++:t=0,e.push(r[o]);return Buffer.from(e)}function po(r){let e=new fe(Yt(r));if(e.read(16),e.read(4),e.read(2),e.read(6)>0)return;let t=e.read(3);e.read(17);let o=e.pos;return e.read(96),t>0&&e.read(t*2+(8-t)*2),{ptlStart:o,ptlEnd:e.pos,ptlBits:e.bits,maxSubLayersMinus1:t}}function mo(r,e){r.w(16385,16),r.w(0,4),r.flag(1),r.flag(1),r.w(1,6),r.w(e.maxSubLayersMinus1,3),r.flag(e.maxSubLayersMinus1===0),r.w(65535,16),r.copy(e.ptlBits,e.ptlStart,e.ptlEnd-e.ptlStart),r.flag(1);for(let t=0;t<=e.maxSubLayersMinus1;t++)r.ue(4),r.ue(2),r.ue(4);r.w(1,6),r.ue(1),r.flag(1),r.flag(1),r.flag(0),r.flag(1),r.align(1);}function lo(r,e,t,o){if(r.copy(e.ptlBits,e.ptlEnd-8,8),e.maxSubLayersMinus1>0){for(let i=0;i<e.maxSubLayersMinus1;i++)r.w(0,2);for(let i=e.maxSubLayersMinus1;i<8;i++)r.w(0,2);}r.flag(0);for(let i=0;i<16;i++)r.flag(i===2||i===3);r.w(0,3),r.w(0,3),r.flag(1),r.w(1,6),r.w(1,1),r.w(1,1),r.w(0,4),r.flag(0),r.ue(0),r.flag(0),r.flag(0),r.flag(0),r.ue(2),r.flag(1),r.copy(e.ptlBits,e.ptlStart,e.ptlEnd-e.ptlStart),r.ue(0),r.w(0,2),r.w(1,2),r.w(2,2),r.ue(0),r.w(t,16),r.w(o,16),r.flag(1),r.w(1,2),r.w(0,4),r.w(0,4),r.flag(0),r.flag(1),r.flag(0),r.flag(1),r.flag(0),r.ue(0),r.ue(0),r.ue(0),r.ue(0),r.ue(0),r.flag(0),r.ue(0),r.flag(0),r.flag(0);}function Qt(r,e,t){let o=po(r);if(!o)return r;let i=new le;return mo(i,o),lo(i,o,e,t),i.bits.push(1),i.align(0),Jt(he(i.bits))}var fo=39;function Zt(r){let{baseExtradata:e,alphaExtradata:t}=r,o=j(e),i=j(t),n=new Map;for(let a of i){if(a.type===32)continue;let d=n.get(a.type)??[];d.push(a),n.set(a.type,d);}let s=[],c=new Set;for(let a of o){let d=a.type===32?Qt(a.data,r.width,r.height):a.data;if(s.push(z,d),!c.has(a.type)){c.add(a.type);for(let u of n.get(a.type)??[])s.push(z,ze(u.data,1));}}return s.push(je()),Buffer.concat(s)}function je(){let[t,o]=$e(fo,0,1),i=[],n=(s,c)=>{for(let a=c-1;a>=0;a--)i.push(s>>a&1);};for(n(0,1),n(0,3),n(0,3),n(0,9),n(255,9),n(0,1),n(0,1),n(1,1);i.length%8!==0;)n(0,1);return Buffer.concat([z,Buffer.from([t,o]),Buffer.from([165,4]),he(i),Buffer.from([128])])}function er(r,e){let t=[];for(let o of r)t.push(z,o.data);for(let o of e)o.type<32&&t.push(z,ze(o.data,1));return Buffer.concat(t)}var we=class r{_s;_seiBuffer;_pts=0n;_seiInjected=false;_alphaBuf;_alphaFrame;constructor(e){this._s=e,this._seiBuffer=je();}static async create(e){let{width:t,height:o,fps:i,bitrate:n,muxer:s}=e,c=nodeAv.Codec.findEncoderByName(constants.FF_ENCODER_HEVC_NVENC);if(!c)throw new Error("hevc_nvenc encoder not found");let d={codec:c,width:t,height:o,fps:i,bitrate:n,options:{preset:"p4",bf:"0"}},u=await M({...d,pixelFormat:constants.AV_PIX_FMT_BGRA},"nvenc.base.open2"),p=await M({...d,pixelFormat:constants.AV_PIX_FMT_YUV420P},"nvenc.alpha.open2"),h=S(),l=S(),w=s.addStream(u,"hvc1"),g=u.extraData,b=p.extraData;return g&&b&&(w.codecpar.extradata=Zt({baseExtradata:g,alphaExtradata:b,width:t,height:o})),new r({baseCtx:u,alphaCtx:p,basePkt:h,alphaPkt:l,stream:w})}async encode(e,t){let{baseCtx:o,alphaCtx:i}=this._s,n=this._pts++;e.pts=n,e.duration=1n,nodeAv.FFmpegError.throwIfError(await o.sendFrame(e),"base.sendFrame");let s=e.data?.[0],c=e.linesize?.[0];if(!s||!c)throw new Error("encode: missing BGRA data");let a=e.width,d=e.height,u=a*d,p=(a>>1)*(d>>1);this._alphaBuf||(this._alphaBuf=Buffer.alloc(u+p*2));let h=this._alphaBuf;for(let l=0;l<d;l++)for(let w=0;w<a;w++)h[l*a+w]=s[l*c+w*4+3];h.fill(128,u,u+p*2),this._alphaFrame?.free(),this._alphaFrame=nodeAv.Frame.fromVideoBuffer(h,{format:constants.AV_PIX_FMT_YUV420P,width:a,height:d}),this._alphaFrame.pts=n,this._alphaFrame.duration=1n,nodeAv.FFmpegError.throwIfError(await i.sendFrame(this._alphaFrame),"alpha.sendFrame"),await this.drainInterleaved(t);}async flush(e){await this._s.baseCtx.sendFrame(null),await this._s.alphaCtx.sendFrame(null),await this.drainInterleaved(e);}[Symbol.dispose](){let{basePkt:e,alphaPkt:t,baseCtx:o,alphaCtx:i}=this._s;e.free(),t.free(),this._alphaFrame?.free(),o.freeContext(),i.freeContext();}async drainInterleaved(e){let{baseCtx:t,alphaCtx:o,basePkt:i,alphaPkt:n,stream:s}=this._s;for(;;){let c=await t.receivePacket(i),a=await o.receivePacket(n),d=c>=0,u=a>=0;if(!d&&!u)break;if(d!==u)throw new Error(`NVENC desync: base=${d}, alpha=${u}`);let p=j(i.data),h=j(n.data),l=[];this._seiInjected||(l.push(this._seiBuffer),this._seiInjected=true),l.push(er(p,h));let w=i.pts,g=i.dts,b=i.duration;i.data=Buffer.concat(l),i.pts=w,i.dts=g,i.duration=b===0n?1n:b,i.streamIndex=s.index,i.rescaleTs(t.timeBase,s.timeBase),await e.writePacket(i),i.unref(),n.unref();}}};var ge=class r{_ctx;_pkt;_stream;_pts=0n;constructor(e,t,o){this._ctx=e,this._pkt=t,this._stream=o;}static async create(e){let{codecName:t,codecTag:o,codecOpts:i,muxer:n,...s}=e,c=nodeAv.Codec.findEncoderByName(t);if(!c)throw new Error(`Video encoder not found: ${t}`);let a=await M({codec:c,...s,codecTag:o,options:i},"videoCtx.open2"),d=n.addStream(a,o);return new r(a,S(),d)}async encode(e,t){e.pts=this._pts++,e.duration=1n,nodeAv.FFmpegError.throwIfError(await this._ctx.sendFrame(e),"videoCtx.sendFrame"),await this.drain(t);}async flush(e){await this._ctx.sendFrame(null),await this.drain(e);}[Symbol.dispose](){this._pkt.free(),this._ctx.freeContext();}drain(e){return W(this._ctx,this._pkt,this._stream,e)}};var _e=class r{_ctx;_pkt;_stream;_pts=0n;constructor(e,t,o){this._ctx=e,this._pkt=t,this._stream=o;}static async create(e){let{width:t,height:o,fps:i,hw:n,bitrate:s,muxer:c}=e,a=n.getEncoderCodec("hevc");if(!a)throw new Error("hevc_videotoolbox encoder not found");let d=await M({codec:a,width:t,height:o,fps:i,bitrate:s,pixelFormat:constants.AV_PIX_FMT_BGRA,colorRange:constants.AVCOL_RANGE_JPEG,codecTag:"hvc1",options:{alpha_quality:"1"}},"vtEnc.open2"),u=c.addStream(d,"hvc1");return new r(d,S(),u)}async encode(e,t){e.pts=this._pts++,e.duration=1n,nodeAv.FFmpegError.throwIfError(await this._ctx.sendFrame(e),"vtEnc.sendFrame"),await this.drain(t);}async flush(e){await this._ctx.sendFrame(null),await this.drain(e);}[Symbol.dispose](){this._pkt.free(),this._ctx.freeContext();}drain(e){return W(this._ctx,this._pkt,this._stream,e)}};var xe="[Encoder]";async function or(r,e){let{width:t,height:o,fps:i,bitrate:n=8e6,disableHwCodec:s=false}=r,c=s?void 0:api.HardwareContext.auto()??void 0;try{if(c?.deviceTypeName===constants.FF_HWDEVICE_TYPE_VIDEOTOOLBOX&&c.getEncoderCodec("hevc"))return f.debug(xe,"using VideoToolbox HEVC alpha encoder"),{hwVideo:await _e.create({width:t,height:o,fps:i,hw:c,bitrate:n,muxer:e}),hw:c};if(c?.deviceTypeName===constants.FF_HWDEVICE_TYPE_CUDA&&c.getEncoderCodec("hevc"))return f.debug(xe,"using NVENC dual-layer HEVC alpha encoder"),{hwVideo:await we.create({width:t,height:o,fps:i,hw:c,bitrate:n,muxer:e}),hw:c}}catch(d){f.warn(xe,"Hardware codec session limits reached, use software encoder",d);}finally{c?.dispose();}return f.debug(xe,"using software libx265 HEVC alpha encoder"),{video:await ge.create({width:t,height:o,fps:i,codecName:constants.FF_ENCODER_LIBX265,codecTag:"hvc1",codecOpts:{preset:"medium","x265-params":"log-level=1:bframes=3:pools=+:frame-threads=0"},bitrate:n,pixelFormat:constants.AV_PIX_FMT_YUVA420P,muxer:e}),codec:await $.create(t,o)}}var be=class{_ctx;_opened=false;constructor(e,t){this._ctx=new nodeAv.FormatContext,nodeAv.FFmpegError.throwIfError(this._ctx.allocOutputContext2(null,t??null,e),"allocOutputContext2");}addStream(e,t){let o=this._ctx.newStream(null);return o.timeBase=e.timeBase,nodeAv.FFmpegError.throwIfError(o.codecpar.fromContext(e),"codecpar.fromContext"),t&&(o.codecpar.codecTag=t),o}async open(){this._opened||(nodeAv.FFmpegError.throwIfError(await this._ctx.openOutput(),"openOutput"),nodeAv.FFmpegError.throwIfError(await this._ctx.writeHeader(null),"writeHeader"),this._opened=true);}async writePacket(e){nodeAv.FFmpegError.throwIfError(await this._ctx.interleavedWriteFrame(e),"interleavedWriteFrame");}async[Symbol.asyncDispose](){this._opened&&(await this._ctx.writeTrailer(),await this._ctx.closeOutput(),await this._ctx[Symbol.asyncDispose](),this._opened=false);}};var q=class r{_s;_disposed=false;constructor(e){this._s=e;}static async create(e){let{width:t,height:o,outFile:i,withAudio:n=false}=e,s=new be(i),{video:c,hwVideo:a,codec:d,hw:u}=await or(e,s),p;return n&&(p=await me.create({outSampleRate:44100,outSampleFmt:constants.AV_SAMPLE_FMT_FLTP,codecName:constants.FF_ENCODER_AAC,globalHeader:true,bitrate:128e3,muxer:s})),await s.open(),new r({video:c,hwVideo:a,audio:p,muxer:s,limiter:new H(1),outFile:i,codec:d,hw:u,width:t,height:o})}setupAudio(e){this._s.audio?.setInputRate(e);}async encodeBGRA(e){await this._s.limiter.schedule(async()=>{let{hwVideo:t,video:o,codec:i,muxer:n}=this._s;if(t){var d=[];try{let l=y(d,this.bgraFrame(e));await t.encode(l,n);return}catch(u){var p=u,h=true;}finally{P(d,p,h);}}let{src:s,dst:c,sws:a}=i;return assert.ok(a,"sws not initialized"),nodeAv.FFmpegError.throwIfError(s.makeWritable(),"bgraSrc.makeWritable"),nodeAv.FFmpegError.throwIfError(s.fromBuffer(e),"bgraSrc.fromBuffer"),nodeAv.FFmpegError.throwIfError(c.makeWritable(),"bgraDst.makeWritable"),nodeAv.FFmpegError.throwIfError(await a.scaleFrame(c,s),"bgraSws.scaleFrame"),o.encode(c,n)});}async encodePNG(e){await this._s.limiter.schedule(async()=>{let{hwVideo:t,video:o,codec:i,muxer:n,width:s,height:c}=this._s,a=i??await $.create(s,c);try{let d=await a.decodePNG(e);t?await t.encode(d,n):(nodeAv.FFmpegError.throwIfError(a.dst.makeWritable(),"pngDst.makeWritable"),nodeAv.FFmpegError.throwIfError(await a.sws.scaleFrame(a.dst,d),"pngSws.scaleFrame"),await o.encode(a.dst,n));}finally{i||a[Symbol.dispose]();}});}async encodeAudio(e){let{audio:t,limiter:o,muxer:i}=this._s;t&&await o.schedule(()=>t.encode(e,i));}async finish(){let{video:e,hwVideo:t,audio:o,muxer:i,limiter:n}=this._s;try{var s=[];try{let p=y(s,i,!0);let h=y(s,e);let l=y(s,t);let w=y(s,o);await n.drain();await o?.flush(i);t?await t.flush(i):await e.flush(i);}catch(c){var a=c,d=!0;}finally{var u=P(s,a,d);u&&await u;}}finally{this.free();}return this._s.outFile}async[Symbol.asyncDispose](){if(this._disposed)return;let{video:e,hwVideo:t,audio:o,muxer:i,limiter:n}=this._s;await n.drain(),e?.[Symbol.dispose](),t?.[Symbol.dispose](),o?.[Symbol.dispose](),await i[Symbol.asyncDispose](),this.free();}free(){var t=[];try{if(this._disposed)return;this._disposed=!0;let e=y(t,this._s.codec);this._s.hw?.dispose();}catch(o){var i=o,n=true;}finally{P(t,i,n);}}bgraFrame(e){let t=oe(this._s.width,this._s.height,constants.AV_PIX_FMT_BGRA);return nodeAv.FFmpegError.throwIfError(t.fromBuffer(e),"bgraFrame.fromBuffer"),t}};var ye=class{_fps;_actual=0;_currentBurst=0;_bursts=[];constructor(e){this._fps=e;}wrote(e=1){this._currentBurst>0&&(this._bursts.push(this._currentBurst),this._currentBurst=0),this._actual+=e;}dropped(e=1){this._currentBurst+=e;}finalize(){this._currentBurst>0&&(this._bursts.push(this._currentBurst),this._currentBurst=0);let e=0,t=0,o=0;for(let a of this._bursts){e+=a,o=Math.max(o,a);let d=Math.max(0,a-1);t+=(d/this._fps)**2;}let i=this._actual+e,n=i>0?e/i:0,s=Math.min(1,t),c=1-(1-n)*(1-s);return {global:n,local:s,jank:c,expected:i,actual:this._actual,maxBurst:o}}};function ve(r,e){return r.width===e.width&&r.height===e.height}var qe="audio-meta",Ke="audio-chunk",Vo=`
96
- (function() {
97
- if (window.__pup_audio_capturing__) return;
98
- window.__pup_audio_capturing__ = true;
99
-
100
- const { ipcRenderer } = require('electron');
101
- const capturedContexts = new WeakSet();
102
- const sourcedElements = new WeakSet();
103
- let metaSent = false;
104
-
105
- const origCreateMES = AudioContext.prototype.createMediaElementSource;
106
- AudioContext.prototype.createMediaElementSource = function(el) {
107
- sourcedElements.add(el);
108
- return origCreateMES.call(this, el);
109
- };
110
-
111
- const origConnect = AudioNode.prototype.connect;
112
- AudioNode.prototype.connect = function(dest, outIdx, inIdx) {
113
- const captureNode = dest?.context?.__pup_captureNode__;
114
- if (captureNode && dest === dest.context.destination && this !== captureNode) {
115
- origConnect.call(this, captureNode, outIdx, inIdx);
116
- }
117
- return origConnect.call(this, dest, outIdx, inIdx);
118
- };
119
-
120
- const OrigAC = window.AudioContext || window.webkitAudioContext;
121
- if (!OrigAC) return;
122
-
123
- function PatchedAC() {
124
- const ctx = new OrigAC(...arguments);
125
- if (!capturedContexts.has(ctx)) {
126
- capturedContexts.add(ctx);
127
- if (!metaSent) {
128
- metaSent = true;
129
- ipcRenderer.send('${qe}', { sampleRate: ctx.sampleRate });
130
- }
131
- const node = ctx.createScriptProcessor(4096, 2, 2);
132
- node.onaudioprocess = (e) => {
133
- const L = e.inputBuffer.getChannelData(0);
134
- const R = e.inputBuffer.getChannelData(1);
135
- const out = new Float32Array(L.length * 2);
136
- for (let i = 0; i < L.length; i++) {
137
- out[i * 2] = L[i];
138
- out[i * 2 + 1] = R[i];
139
- }
140
- ipcRenderer.send('${Ke}', Buffer.from(out.buffer));
141
- };
142
- node.connect(ctx.destination);
143
- ctx.__pup_captureNode__ = node;
144
- }
145
- return ctx;
146
- }
147
- PatchedAC.prototype = OrigAC.prototype;
148
- Object.setPrototypeOf(PatchedAC, OrigAC);
149
- window.AudioContext = PatchedAC;
150
- if ('webkitAudioContext' in window) window.webkitAudioContext = PatchedAC;
151
-
152
- const origPlay = HTMLMediaElement.prototype.play;
153
- HTMLMediaElement.prototype.play = function() {
154
- if (!this.__pup_captured__) {
155
- this.__pup_captured__ = true;
156
- const el = this;
157
- Promise.resolve().then(() => {
158
- if (!sourcedElements.has(el)) {
159
- const ctx = new PatchedAC();
160
- ctx.createMediaElementSource(el).connect(ctx.destination);
161
- }
162
- });
163
- }
164
- return origPlay.call(this);
165
- };
166
- })();
167
- `;async function nr({encoder:r,getVideoTimeMs:e,onError:t}){let o=path.join(os.tmpdir(),`pup_audio_${crypto.randomUUID()}.js`);return await promises.writeFile(o,Vo),electron.session.defaultSession.registerPreloadScript({type:"frame",id:"pup-audio",filePath:o}),electron.ipcMain.on(qe,async(i,n)=>{let s=n.sampleRate,c=e();r.setupAudio(s);let a=Math.ceil(c*s/1e3);if(!(a<=0))try{await r.encodeAudio(Buffer.alloc(a*2*4));}catch(d){t(d);}}),electron.ipcMain.on(Ke,async(i,n)=>{try{await r.encodeAudio(n);}catch(s){t(s);}}),{async teardown(){electron.ipcMain.removeAllListeners(qe),electron.ipcMain.removeAllListeners(Ke),electron.session.defaultSession.unregisterPreloadScript("pup-audio"),await promises.rm(o,{force:true});}}}function Pe(r){return new Promise(e=>setTimeout(e,r))}function ar({fn:r,maxAttempts:e=3,timeout:t}){let o=new Error(`timeout over ${t}ms`);return async function(...i){let n=0;for(;;)try{let s=[r(...i)];return t&&s.push(promises$1.setTimeout(t).then(()=>{throw o})),await Promise.race(s)}catch(s){if(n++,n>=e)throw s;await Pe(Math.pow(2,n)*100+Math.random()*100);}}}var Xe=["file:","http:","https:","data:"],Ho=/^(file:|https?:|data:)/;function sr(r){if(Ho.test(r))return;let e=r.split(":")[0]+":",t=Xe.includes(e)?`unsupported protocol: ${e}, expected ${Xe.join(", ")}`:`invalid source format, expected ${Xe.join(", ")}`;throw new Error(t)}var Ce=class{_promise;_resolve;_timeoutToken;wait(e){if(this._promise)throw new Error("already waiting");return this._promise=new Promise(t=>{this._resolve=t,e?.timeout!==void 0&&(this._timeoutToken=setTimeout(()=>{e.onTimeout?.(),t();},e.timeout));}),this._promise}signal(){clearTimeout(this._timeoutToken),this._promise=void 0,this._resolve?.();}};var Fe="[Network]",Go=new Map([["jssz-boss.hdslb.com","jssz-boss.bilibili.co"],["boss.hdslb.com","shjd-boss.bilibili.co"]]);function Ye(r){if(!r.startsWith("http"))return r;let e=new url.URL(r),t=Go.get(e.hostname);return t?(e.hostname=t,e.protocol="http:",e.toString()):r}function cr({source:r,window:e,useInnerProxy:t}){let o=e.webContents.session.webRequest,i=new H(64),n=new Map;async function s(a,d){let u=new Ce;n.set(a,u),await u.wait({timeout:5e3,onTimeout:d}).finally(()=>n.delete(a));}function c(a){n.get(a)?.signal();}o.onBeforeRequest((a,d)=>{let u=a.url,p=t?Ye(u):u;i.schedule(()=>{let h=`${e.id}_${a.id}`;return f.debug(Fe,"start:",{key:h,url:u,proxied:p,method:a.method,source:r,stats:i.stats}),d(p===u?{cancel:false}:{cancel:false,redirectURL:p}),s(h,()=>{f.warn(Fe,"maybe timeout:",{key:h,url:u,proxied:p,method:a.method,source:r});})});}),o.onHeadersReceived(({responseHeaders:a},d)=>{delete a?.["x-frame-options"],delete a?.["X-Frame-Options"],delete a?.["content-security-policy"],delete a?.["Content-Security-Policy"],d({cancel:false,responseHeaders:a});}),o.onCompleted(a=>{let d=`${e.id}_${a.id}`;c(d),f.debug(Fe,"completed:",{key:d,url:a.url,method:a.method,statusCode:a.statusCode,source:r});}),o.onErrorOccurred(a=>{let d=`${e.id}_${a.id}`;c(d),f.error(Fe,"error:",{key:d,url:a.url,method:a.method,error:a.error,source:r});});}function Je(r){let e=r.webContents.session.webRequest;e.onBeforeRequest(null),e.onHeadersReceived(null),e.onCompleted(null),e.onErrorOccurred(null);}var N="[Window]",dr=new Error("window timeout");function zo({source:r,win:e,action:t,tolerant:o}){return new Promise((i,n)=>{let s,c,a=u=>{clearTimeout(c),clearInterval(s),u?n(u):i();};c=setTimeout(()=>a(dr),3e4);let d=new Promise(u=>{s=setInterval(()=>{e.webContents.mainFrame.frames[0]&&(f.debug(N,"stego-frame-attached:",{source:r}),clearInterval(s),u());});});e.webContents.once("dom-ready",async()=>{f.debug(N,"dom-ready:",{source:r}),o&&(await d,a());}),e.webContents.once("did-stop-loading",async()=>{f.debug(N,"did-stop-loading:",{source:r}),await d,a();}),e.webContents.once("did-frame-finish-load",(u,p,h,l)=>{f.debug(N,r,"did-frame-finish-load:",{isMainFrame:p,frameProcessId:h,frameRoutingId:l});}),e.webContents.once("did-fail-load",(u,p,h,l)=>a(new Error(`did-fail-load ${{url:l,source:r,code:p,desc:h}}`))),e.webContents.once("render-process-gone",(u,{exitCode:p,reason:h})=>a(new Error(`render-process-gone: ${{source:r,exitCode:p,reason:h}}`))),t();})}function K(r){return new Promise(e=>{Je(r);let t=false,o=()=>{t||(t=true,e());};r.once("closed",o),r.close(),setTimeout(()=>{if(!t){try{f.warn(N,"force close"),r.destroy();}catch{}o();}},1e3);})}async function ur({source:r,onCreated:e,renderer:t,warmup:o,tolerant:i}){sr(r);let{width:n,height:s,useInnerProxy:c}=t,a=c?Ye(r):r,d=new electron.BrowserWindow({width:n,height:s+1,minWidth:n,minHeight:s+1,maxWidth:n,maxHeight:s+1,resizable:false,minimizable:false,movable:false,show:false,transparent:true,backgroundColor:void 0,frame:false,webPreferences:{offscreen:true,backgroundThrottling:false,nodeIntegration:true,nodeIntegrationInSubFrames:true,nodeIntegrationInWorker:true,contextIsolation:false,webSecurity:false,allowRunningInsecureContent:true,experimentalFeatures:true}});cr({source:r,window:d,useInnerProxy:c}),o||await e?.(d),d.webContents.on("console-message",({level:u,message:p,lineNumber:h,sourceId:l})=>{let w=[N,"console:",{message:p,lineNumber:h,sourceId:l,source:r}];u==="error"?f.error(...w):f.debug(...w);});try{let u=Vt(a,{width:n,height:s});await zo({source:r,win:d,action:()=>d.loadURL(u),tolerant:i});}catch(u){throw await K(d),u}return d}var jo=ar({fn:ur,maxAttempts:2});async function Se({source:r,onCreated:e,renderer:t}){let o,i;try{o=await jo({source:r,renderer:t,warmup:!0});}catch(s){i=s;}let n=()=>ur({source:r,renderer:t,onCreated:e,tolerant:t.windowTolerant});if(t.windowTolerant&&i===dr)return f.warn(N,`warmup timeout: ${r}, falling back to dom-ready`),await n();if(i){let{message:s,stack:c}=i;throw new Error(`failed to warmup window: ${JSON.stringify({source:r,message:s,stack:c})}`)}o&&(o.webContents.removeAllListeners(),Je(o),await Pe(2e3),await K(o));try{return await n()}catch(s){let{message:c,stack:a}=s;throw new Error(`failed to load window: ${JSON.stringify({source:r,message:c,stack:a})}`)}}async function pr(r,e,t){var X=[];try{let{fps:o,width:i,height:n,duration:s,withAudio:c,outFile:a,disableHwCodec:d}=t;let u=y(X,await q.create({width:i,height:n,fps:o,outFile:a,withAudio:c,disableHwCodec:d}),!0);let p=Math.ceil(o*s);let h=1e3/o;let l={width:i,height:n+1};let w=0;let g;let b=0;let v;let _;let E;let x=new ye(o);let I;let L=F=>{w++,u.encodeBGRA(F).catch(se=>v??=se);};let ne=(F,se,Ze)=>{if(v){E?.(v);return}let et=Ze.getSize();if(!ve(et,l)){pe(V,l);return}let Ie=Ze.toBitmap(),Q=ue(Ie,et);if(Q===void 0){v??=new Error(`no timestamp @ ${w}`);return}if(g!==void 0&&Q-g<h*.8)return;let Re=Buffer.from(Ie.buffer,Ie.byteOffset,n*i*4);if(g===void 0)L(Re),x.wrote();else {let rt=Q-g;if(rt<=h*1.2)L(Re),x.wrote();else {let ot=Math.round(rt/h);x.dropped(ot-1),x.wrote();for(let it=0;it<ot&&w<p;it++)L(Re);}}g=Q;let tt=Math.floor(w/p*100);Math.abs(tt-b)>10&&(b=tt,r.writeProgress(b));let wr=s*1e3;(Q>=wr-h*.5||w>=p)&&_?.();};let A=await Se({source:e,renderer:t,onCreated:async()=>{c&&(I=await nr({encoder:u,getVideoTimeMs:()=>g??0,onError:F=>v??=F}));}});let V=A.webContents.debugger;V.attach("1.3");A.webContents.stopPainting();A.webContents.setFrameRate(o);A.webContents.on("paint",ne);A.webContents.startPainting();try{await Mt(V),await new Promise((F,se)=>[_,E]=[F,se]);}finally{await Nt(V),A.webContents.off("paint",ne),await K(A),await I?.teardown(),await u.finish();}if(v||w===0)throw v??new Error("no frames captured");else {let F=x.finalize();return {written:w,jank:F.jank,outFile:a}}}catch(Y){var J=Y,Te=true;}finally{var ae=P(X,J,Te);ae&&await ae;}}var Ko="[HWAccel]";async function Xo(){let r=api.HardwareContext.auto(),e=r!==null;return r?.dispose(),e}var mr=Xo().then(r=>(f.debug(Ko,"gpu:",r),r));var Ae="__pup_tick__",Yo="[Tick]",Jo=`(function() {
95
+ </html>`}function Ee(r,e){let{width:t,height:o}=e;if(t<Je||o<2)return;let n=o-1,i=0;for(let a=0;a<Je;a++){let c=(n*t+a)*4,d=(r[c]??0)>127?1:0;i=i<<1|d;}if(i=i>>>0,!(!Number.isFinite(i)||i<0||i>1e7))return i}function qt(r){return Ke(r,"__pup_start_stego__()")}async function Xt(r,e,t){let o=new Promise(n=>r.ipc.once(zt,n));await Ke(r.debugger,`__pup_draw_stego__(${e})`),await $t(r.debugger,t),await $(o,5e3,"swapBuffer");}var Qe="pup";electron.protocol.registerSchemesAsPrivileged([{scheme:Qe,privileges:{standard:true,secure:true,bypassCSP:true,allowServiceWorkers:true,supportFetchAPI:true,corsEnabled:true,stream:true,codeCache:true}}]);function Kt(){electron.protocol.handle(Qe,r=>{let e=new URL(r.url),t=e.searchParams.get("src")??"",o=parseInt(e.searchParams.get("w")??"0",10),n=parseInt(e.searchParams.get("h")??"0",10),i=jt(t,{width:o,height:n});return new Response(i,{headers:{"content-type":"text/html"}})});}function Jt(r,e){let t=new URL(`${Qe}://stego`);return t.searchParams.set("src",r.replace("http://","https://")),t.searchParams.set("w",String(e.width)),t.searchParams.set("h",String(e.height)),t.toString()}var J=class{constructor(e){this.maxConcurrency=e;}maxConcurrency;_active=0;_queue=[];_signals=new WeakSet;_resolve;get active(){return this._active}get pending(){return this._queue.length}get stats(){return `active: ${this.active}, pending: ${this.pending}`}async schedule(e,t){return t?.throwIfAborted(),t&&!this._signals.has(t)&&(this._signals.add(t),t.addEventListener("abort",()=>this.flush(t),{once:true})),new Promise((o,n)=>{this._queue.push({run:()=>{if(t?.aborted){n(t.reason),this.next();return}this._active++,e().then(i=>{this._active--,o(i),this.next();}).catch(i=>{this._active--,n(i),this.next();});},reject:n,signal:t}),this.next();})}async drain(){if(!(this._active===0&&this.pending===0))return new Promise(e=>this._resolve=e)}flush(e){let t=[];for(let o of this._queue)o.signal===e?o.reject(e.reason):t.push(o);this._queue=t,this.next();}next(){if(this._active===0&&this.pending===0){this._resolve?.(),this._resolve=void 0;return}this._active<this.maxConcurrency&&this._queue.shift()?.run();}};async function G(r,e){let t=new nodeAv.CodecContext;t.allocContext3(r.codec),t.codecId=r.codec.id,t.width=r.width,t.height=r.height,t.pixelFormat=r.pixelFormat,t.timeBase=new nodeAv.Rational(1,r.fps),t.framerate=new nodeAv.Rational(r.fps,1),t.gopSize=r.fps*2,t.bitRate=BigInt(r.bitrate),t.setFlags(constants.AV_CODEC_FLAG_GLOBAL_HEADER),r.codecTag&&(t.codecTag=r.codecTag),r.colorRange!==void 0&&(t.colorRange=r.colorRange),r.hwFramesCtx&&(t.hwFramesCtx=r.hwFramesCtx);for(let[o,n]of Object.entries(r.options??{}))t.setOption(o,n);return nodeAv.FFmpegError.throwIfError(await t.open2(r.codec,null),e),t}function z(r,e,t){let o=new nodeAv.Frame;return o.alloc(),o.format=t,o.width=r,o.height=e,nodeAv.FFmpegError.throwIfError(o.getBuffer(0),"frame.getBuffer"),o}function F(){let r=new nodeAv.Packet;return r.alloc(),r}async function Q(r,e,t,o){for(;;){let n=await r.receivePacket(e);if(n===constants.AVERROR_EAGAIN||n===constants.AVERROR_EOF)break;nodeAv.FFmpegError.throwIfError(n,"receivePacket"),e.streamIndex=t.index,e.duration===0n&&(e.duration=1n),e.rescaleTs(r.timeBase,t.timeBase),await o.writePacket(e),e.unref();}}var O=class r{src;dst;pkt;_sws;_png;static async create(e,t){let o=nodeAv.Codec.findDecoderByName(nodeAv.FF_DECODER_PNG);return assert.ok(o,"png decoder unavailable"),new r(e,t,o)}constructor(e,t,o){this._png=o,this.src=z(e,t,nodeAv.AV_PIX_FMT_BGRA),this.dst=z(e,t,nodeAv.AV_PIX_FMT_YUVA420P),this.pkt=F();}async png(){let e=new nodeAv.CodecContext;return e.allocContext3(this._png),nodeAv.FFmpegError.throwIfError(await e.open2(this._png),"pngDecoder.open2"),e}async decodePNG(e){var o=[];try{let t=A(o,await this.png());this.pkt.data=e;nodeAv.FFmpegError.throwIfError(await t.sendPacket(this.pkt),"pngDecoder.sendPacket");this.pkt.unref();nodeAv.FFmpegError.throwIfError(await t.receiveFrame(this.src),"pngDecoder.receiveFrame");return this.src}catch(n){var i=n,a=true;}finally{T(o,i,a);}}get sws(){if(!this._sws){let e=new nodeAv.SoftwareScaleContext,t=this.src.format;e.getContext(this.src.width,this.src.height,t,this.src.width,this.src.height,nodeAv.AV_PIX_FMT_YUVA420P,nodeAv.SWS_BILINEAR),this._sws=e;}return this._sws}[Symbol.dispose](){this.src[Symbol.dispose](),this.dst[Symbol.dispose](),this.pkt[Symbol.dispose](),this._sws?.[Symbol.dispose]();}};var Eo={[constants.AV_SAMPLE_FMT_FLT]:"flt",[constants.AV_SAMPLE_FMT_FLTP]:"fltp"},Se=class r{_ctx;_stream;_pkt;_outRate;_outFmt;_frameSize;_filterFrame;_graph;_bufSrc;_bufSink;_inRate;_pts=0n;constructor(e,t,o){this._ctx=e,this._stream=t,this._outRate=e.sampleRate,this._outFmt=o,this._frameSize=e.frameSize,this._pkt=F(),this._filterFrame=new nodeAv.Frame,this._filterFrame.alloc();}static async create(e){let t=nodeAv.Codec.findEncoderByName(e.codecName);if(!t)throw new Error(`Audio encoder not found: ${e.codecName}`);let o=new nodeAv.CodecContext;o.allocContext3(t),o.codecId=t.id,o.sampleFormat=e.outSampleFmt,o.sampleRate=e.outSampleRate,o.channelLayout=constants.AV_CHANNEL_LAYOUT_STEREO,o.timeBase=new nodeAv.Rational(1,e.outSampleRate),o.bitRate=BigInt(e.bitrate),e.globalHeader&&o.setFlags(constants.AV_CODEC_FLAG_GLOBAL_HEADER),nodeAv.FFmpegError.throwIfError(await o.open2(t,null),"audioCtx.open2");let n=e.muxer.addStream(o);return new r(o,n,e.outSampleFmt)}setInputRate(e){this._graph?.[Symbol.dispose](),this._inRate=e;let t=new nodeAv.FilterGraph;t.alloc();let o=nodeAv.Filter.getByName("abuffer"),n=t.createFilter(o,"src",`sample_rate=${e}:sample_fmt=flt:channel_layout=stereo:time_base=1/${e}`);if(!n)throw new Error("Failed to create abuffer");let i=nodeAv.Filter.getByName("abuffersink"),a=t.createFilter(i,"sink");if(!a)throw new Error("Failed to create abuffersink");let s=`aformat=sample_fmts=${Eo[this._outFmt]??"flt"}:sample_rates=${this._outRate}:channel_layouts=stereo,asetnsamples=n=${this._frameSize}:p=1`,d=nodeAv.FilterInOut.createList([{name:"in",filterCtx:n,padIdx:0}]),u=nodeAv.FilterInOut.createList([{name:"out",filterCtx:a,padIdx:0}]);nodeAv.FFmpegError.throwIfError(t.parsePtr(s,u,d),"graph.parsePtr"),nodeAv.FFmpegError.throwIfError(t.configSync(),"graph.config"),this._graph=t,this._bufSrc=n,this._bufSink=a;}async encode(e,t){var a=[];try{if(!this._bufSrc||!this._inRate)return;let o=new Float32Array(e.buffer,e.byteOffset,e.byteLength/4);for(let u=0;u<o.length;u++)isFinite(o[u])||(o[u]=0);let n=o.length>>1;let i=A(a,nodeAv.Frame.fromAudioBuffer(Buffer.from(o.buffer,o.byteOffset,o.byteLength),{nbSamples:n,format:constants.AV_SAMPLE_FMT_FLT,sampleRate:this._inRate,channelLayout:constants.AV_CHANNEL_LAYOUT_STEREO,pts:this._pts,timeBase:{num:1,den:this._inRate}}));this._pts+=BigInt(n);nodeAv.FFmpegError.throwIfError(await this._bufSrc.buffersrcAddFrame(i),"buffersrcAddFrame");await this.drain(t);}catch(c){var s=c,d=true;}finally{T(a,s,d);}}async flush(e){this._bufSrc&&(await this._bufSrc.buffersrcAddFrame(null),await this.drain(e)),await this._ctx.sendFrame(null),await this.drainCodec(e);}[Symbol.dispose](){this._pkt.free(),this._filterFrame.free(),this._graph?.[Symbol.dispose](),this._ctx.freeContext();}async drain(e){for(;;){let t=await this._bufSink.buffersinkGetFrame(this._filterFrame);if(t===constants.AVERROR_EAGAIN||t===constants.AVERROR_EOF)break;nodeAv.FFmpegError.throwIfError(t,"buffersinkGetFrame"),nodeAv.FFmpegError.throwIfError(await this._ctx.sendFrame(this._filterFrame),"audioCtx.sendFrame"),this._filterFrame.unref(),await this.drainCodec(e);}}drainCodec(e){return Q(this._ctx,this._pkt,this._stream,e)}};function N(r){let e=Buffer.alloc(r.length>>3);for(let t=0;t<e.length;t++){let o=0;for(let n=0;n<8;n++)o=o<<1|r[t*8+n];e[t]=o;}return e}var L=class{bits=[];w(e,t){for(let o=t-1;o>=0;o--)this.bits.push(e>>o&1);}flag(e){this.bits.push(e?1:0);}ue(e){let t=e+1,o=32-Math.clz32(t);for(let n=0;n<o-1;n++)this.bits.push(0);for(let n=o-1;n>=0;n--)this.bits.push(t>>n&1);}align(e){for(;this.bits.length%8!==0;)this.bits.push(e);}copy(e,t,o){for(let n=0;n<o;n++)this.bits.push(e[t+n]);}},E=class{_bits;pos=0;constructor(e){this._bits=[];for(let t=0;t<e.length;t++)for(let o=7;o>=0;o--)this._bits.push(e[t]>>o&1);}get bits(){return this._bits}read(e){let t=0;for(let o=0;o<e;o++)t=t<<1|this._bits[this.pos++];return t}readUe(){let e=0;for(;this._bits[this.pos]===0;)e++,this.pos++;this.pos++;let t=1;for(let o=0;o<e;o++)t=t<<1|this._bits[this.pos++];return t-1}};var M=Buffer.from([0,0,0,1]);var tt=16;var rt=23,ee=32,te=33,Fe=34,ir=39;function sr(r,e){let t=r>>1&63,o=(r&1)<<5|e>>3&31,n=e&7;return {type:t,layerId:o,temporalId:n}}function ot(r,e,t){let o=(r&63)<<1|e>>5&1,n=(e&31)<<3|t&7;return [o,n]}function k(r){let e=[],t=0;for(;t<r.length;){let o=0;if(t+3<r.length&&r[t]===0&&r[t+1]===0&&r[t+2]===1)o=3;else if(t+4<r.length&&r[t]===0&&r[t+1]===0&&r[t+2]===0&&r[t+3]===1)o=4;else {t++;continue}let n=t+o;if(n+2>r.length)break;let i=r.length;for(let s=n+2;s<r.length-2;s++)if(r[s]===0&&r[s+1]===0&&(r[s+2]===1||s+3<r.length&&r[s+2]===0&&r[s+3]===1)){i=s;break}let{type:a,layerId:c}=sr(r[n],r[n+1]);e.push({type:a,layerId:c,data:r.subarray(n,i)}),t=i;}return e}function nt(r,e){let t=Buffer.from(r),{type:o,temporalId:n}=sr(t[0],t[1]),[i,a]=ot(o,e,n);return t[0]=i,t[1]=a,t}function I(r){let e=[];for(let t=0;t<r.length;t++)t+2<r.length&&r[t]===0&&r[t+1]===0&&r[t+2]===3?(e.push(0,0),t+=2):e.push(r[t]);return Buffer.from(e)}function j(r){let e=[];e.push(r[0],r[1]);let t=0;for(let o=2;o<r.length;o++)t===2&&r[o]<=3&&(e.push(3),t=0),r[o]===0?t++:t=0,e.push(r[o]);return Buffer.from(e)}var So=48,dr=24,Fo=2,Co=10,it=0,Ao=1;function ar(r,e,t){let o=e>>3,n=1<<7-(e&7),i=r[o]??0;r[o]=t?i|n:i&~n;}function cr(r,e){let t=I(r);return ar(t,e+Fo,0),ar(t,e+Co,1),j(t)}function st(r){let e=k(r);if(e.length===0)return r;let t=[];for(let o of e){let n=o.data;o.type===ee?n=cr(o.data,So):o.type===te&&(n=cr(o.data,dr)),t.push(M,n);}return Buffer.concat(t)}function To(r,e,t){let o=I(r),n=new E(o),i=new L;for(let a=0;a<e;a++)i.bits.push(n.read(1));for(n.readUe(),i.ue(t);n.pos<n.bits.length;)i.bits.push(n.read(1));for(;i.bits.length%8!==0;)i.bits.push(0);return j(N(i.bits))}function ko(r,e,t,o){let n=I(r),i=new E(n),a=new L;for(let c=0;c<e;c++)a.bits.push(i.read(1));for(i.readUe(),i.readUe(),a.ue(t),a.ue(o);i.pos<i.bits.length;)a.bits.push(i.read(1));for(;a.bits.length%8!==0;)a.bits.push(0);return j(N(a.bits))}function pr(r){let e=dr+96;return To(r,e,1)}function ur(r){return ko(r,16,1,1)}function Io(r){let e=r.readUe();return e&1?e+1>>1:-(e>>1)}function Ro(r,e){if(r.read(1)){let o=r.readUe();if(o!==0)throw new Error(`apple_alpha: unexpected delta_idx_minus1=${o}`);r.read(1),r.readUe();for(let n=0;n<=e;n++)r.read(1)||r.read(1);}else {let o=r.readUe(),n=r.readUe();for(let i=0;i<o;i++)r.readUe(),r.read(1);for(let i=0;i<n;i++)r.readUe(),r.read(1);}}function Bo(r,e,t){if(r.read(16),r.read(1)!==1)throw new Error("apple_alpha: expected first_slice_segment_in_pic_flag=1");let o=e>=tt&&e<=rt;o&&r.read(1),r.readUe();let n=r.readUe();if(!o){if(r.read(t.log2MaxPocLsb),r.read(1)?t.numShortTermRefPicSets>1&&r.read(Math.ceil(Math.log2(t.numShortTermRefPicSets))):Ro(r,t.numDeltaPocsSet0),t.longTermRefPicsPresent)throw new Error("apple_alpha: long_term_ref_pics path unimplemented");t.spsTemporalMvpEnabled&&r.read(1);}return t.saoEnabled&&(r.read(1),r.read(1)),(n===Ao||n===it)&&(r.read(1)&&(r.readUe(),n===it&&r.readUe()),n===it&&r.read(1),t.cabacInitPresent&&r.read(1),r.readUe()),Io(r),t.ppsHasLoopFilterAcrossSlicesFlag&&r.read(1),r.pos}function mr(r,e,t){let o=I(r),n=new E(o),i=new E(o),a=Bo(i,e,t),c=a%8===0?8:8-a%8,s=(a+c)/8,d=new L;for(let p=0;p<16;p++)d.bits.push(n.read(1));for(d.bits.push(n.read(1)),e>=tt&&e<=rt&&d.bits.push(n.read(1)),n.readUe(),d.ue(1);n.pos<a;)d.bits.push(n.read(1));for(d.bits.push(1);d.bits.length%8!==0;)d.bits.push(0);return j(Buffer.concat([N(d.bits),o.subarray(s)]))}function Oo(r){let e=new E(I(r));if(e.read(16),e.read(4),e.read(2),e.read(6)>0)return;let t=e.read(3);e.read(17);let o=e.pos;return e.read(96),t>0&&e.read(t*2+(8-t)*2),{ptlStart:o,ptlEnd:e.pos,ptlBits:e.bits,maxSubLayersMinus1:t}}function Lo(r,e){r.w(16385,16),r.w(0,4),r.flag(1),r.flag(1),r.w(1,6),r.w(e.maxSubLayersMinus1,3),r.flag(e.maxSubLayersMinus1===0),r.w(65535,16),r.copy(e.ptlBits,e.ptlStart,e.ptlEnd-e.ptlStart),r.flag(1);for(let t=0;t<=e.maxSubLayersMinus1;t++)r.ue(4),r.ue(2),r.ue(4);r.w(1,6),r.ue(1),r.flag(1),r.flag(1),r.flag(0),r.flag(1),r.align(1);}function No(r,e,t,o){if(r.copy(e.ptlBits,e.ptlEnd-8,8),e.maxSubLayersMinus1>0){for(let n=0;n<e.maxSubLayersMinus1;n++)r.w(0,2);for(let n=e.maxSubLayersMinus1;n<8;n++)r.w(0,2);}r.flag(0);for(let n=0;n<16;n++)r.flag(n===2||n===3);r.w(0,3),r.w(0,3),r.flag(1),r.w(1,6),r.w(1,1),r.w(1,1),r.w(0,4),r.flag(0),r.ue(0),r.flag(0),r.flag(0),r.flag(0),r.ue(2),r.flag(1),r.copy(e.ptlBits,e.ptlStart,e.ptlEnd-e.ptlStart),r.ue(0),r.w(0,2),r.w(1,2),r.w(2,2),r.ue(0),r.w(t,16),r.w(o,16),r.flag(1),r.w(1,2),r.w(0,4),r.w(0,4),r.flag(0),r.flag(1),r.flag(0),r.flag(1),r.flag(0),r.ue(0),r.ue(0),r.ue(0),r.ue(0),r.ue(0),r.flag(0),r.ue(0),r.flag(0),r.flag(0);}function lr(r,e,t){let o=Oo(r);if(!o)return r;let n=new L;return Lo(n,o),No(n,o,e,t),n.bits.push(1),n.align(0),j(N(n.bits))}function fr(r,e){let t=r.data?.[0],o=r.linesize?.[0];if(!t||!o)throw new Error("extractAlpha: missing BGRA data");let n=r.width,i=r.height,a=n*i;if(t.byteOffset%4===0&&o===n*4){let c=new Uint32Array(t.buffer,t.byteOffset,a);for(let s=0;s<a;s++)e[s]=c[s]>>>24;}else for(let c=0;c<i;c++){let s=c*o+3,d=c*n;for(let u=0;u<n;u++)e[d+u]=t[s+u*4];}}function Mo(r,e){return r===te?pr(e):r===Fe?ur(e):e}function hr(r){let{baseExtradata:e,alphaExtradata:t}=r,o=k(e),n=k(t),i=new Map;for(let s of n){if(s.type===ee)continue;let d=i.get(s.type)??[];d.push(s),i.set(s.type,d);}let a=[],c=new Set;for(let s of o){let d=s.type===ee?lr(s.data,r.width,r.height):s.data;if(a.push(M,d),!c.has(s.type)){c.add(s.type);for(let u of i.get(s.type)??[]){let p=Mo(s.type,u.data);a.push(M,nt(p,1));}}}return a.push(Do()),Buffer.concat(a)}function Do(){let[t,o]=ot(ir,0,1),n=[],i=(a,c)=>{for(let s=c-1;s>=0;s--)n.push(a>>s&1);};for(i(0,1),i(0,3),i(0,3),i(0,9),i(255,9),i(0,1),i(0,1),i(1,1);n.length%8!==0;)i(0,1);return Buffer.concat([M,Buffer.from([t,o]),Buffer.from([165,4]),N(n),Buffer.from([128])])}function wr(r,e,t){let o=[];for(let n of r)o.push(M,n.data);for(let n of e)if(n.type<ee){let i=mr(n.data,n.type,t);o.push(M,nt(i,1));}return Buffer.concat(o)}function D(r,e,t){throw new Error(`hevc_alpha: NVENC SPS/PPS unsupported: ${r}=${e}, expected ${t}`)}function Vo(r,e){r.read(8),r.read(32),r.read(48),r.read(8);let t=[],o=[];for(let n=0;n<e;n++)t.push(r.read(1)),o.push(r.read(1));if(e>0)for(let n=e;n<8;n++)r.read(2);for(let n=0;n<e;n++)t[n]&&r.read(88),o[n]&&r.read(8);}function Ho(r){let e=new E(r);e.read(16),e.read(4);let t=e.read(3);t!==0&&D("sps_max_sub_layers_minus1",t,"0"),e.read(1),Vo(e,t),e.readUe();let o=e.readUe();o===3&&D("chroma_format_idc",o,"\u22603"),e.readUe(),e.readUe(),e.read(1)&&(e.readUe(),e.readUe(),e.readUe(),e.readUe()),e.readUe(),e.readUe();let n=e.readUe()+4,a=e.read(1)?t+1:1;for(let w=0;w<a;w++)e.readUe(),e.readUe(),e.readUe();e.readUe(),e.readUe(),e.readUe(),e.readUe(),e.readUe(),e.readUe(),e.read(1)&&D("scaling_list_enabled_flag",1,"0"),e.read(1);let c=e.read(1)===1;e.read(1)&&D("pcm_enabled_flag",1,"0");let s=e.readUe();s>1&&D("num_short_term_ref_pic_sets",s,"\u22641");let d=0;if(s===1){let w=e.readUe(),f=e.readUe();d=w+f;for(let l=0;l<w;l++)e.readUe(),e.read(1);for(let l=0;l<f;l++)e.readUe(),e.read(1);}let u=e.read(1)===1;u&&D("long_term_ref_pics_present_flag",1,"0");let p=e.read(1)===1;return {log2MaxPocLsb:n,saoEnabled:c,numShortTermRefPicSets:s,numDeltaPocsSet0:d,longTermRefPicsPresent:u,spsTemporalMvpEnabled:p}}function Uo(r){let e=new E(r);e.read(16),e.readUe(),e.readUe(),e.read(1),e.read(1);let t=e.read(3);t!==0&&D("num_extra_slice_header_bits",t,"0"),e.read(1);let o=e.read(1)===1;e.readUe(),e.readUe(),e.readUe(),e.read(1),e.read(1),e.read(1)&&e.readUe(),e.readUe(),e.readUe(),e.read(1),e.read(1),e.read(1),e.read(1),e.read(1)&&D("tiles_enabled_flag",1,"0"),e.read(1);let n=e.read(1)===1,i=e.read(1),a=false;return i&&(e.read(1),a=e.read(1)===1,a||(e.readUe(),e.readUe())),{cabacInitPresent:o,ppsHasLoopFilterAcrossSlicesFlag:n&&!a}}function gr(r){let e=k(r),t=e.find(a=>a.type===te),o=e.find(a=>a.type===Fe);if(!t)throw new Error("hevc_alpha: SPS missing in NVENC extradata");if(!o)throw new Error("hevc_alpha: PPS missing in NVENC extradata");let n=Ho(I(t.data)),i=Uo(I(o.data));return {...n,...i}}var Ae=class r{_s;_pts=0n;constructor(e){this._s=e;}static async create(e){let{width:t,height:o,fps:n,bitrate:i,muxer:a}=e,c=nodeAv.Codec.findEncoderByName(constants.FF_ENCODER_HEVC_NVENC);if(!c)throw new Error("hevc_nvenc encoder not found");let d={codec:c,width:t,height:o,fps:n,bitrate:i,options:{preset:"p4",bf:"0",tier:"main"}},u=await G({...d,pixelFormat:constants.AV_PIX_FMT_BGRA},"nvenc.base.open2"),p=await G({...d,pixelFormat:constants.AV_PIX_FMT_YUV420P},"nvenc.alpha.open2");if(!u.extraData||!p.extraData)throw new Error("nvenc: codec extradata missing");let w=gr(u.extraData),f=a.addStream(u,"hvc1"),l=hr({baseExtradata:u.extraData,alphaExtradata:p.extraData,width:t,height:o});f.codecpar.extradata=st(l);let g=t*o,b=(t>>1)*(o>>1),y=Buffer.alloc(g+b*2);return y.fill(128,g),new r({baseCtx:u,alphaCtx:p,basePkt:F(),alphaPkt:F(),stream:f,alphaSwFrame:z(t,o,constants.AV_PIX_FMT_YUV420P),alphaBuf:y,hevcCfg:w})}async encode(e,t){let{baseCtx:o,alphaCtx:n,alphaSwFrame:i,alphaBuf:a}=this._s,c=this._pts++;e.pts=c,e.duration=1n,nodeAv.FFmpegError.throwIfError(await o.sendFrame(e),"base.sendFrame"),fr(e,a),nodeAv.FFmpegError.throwIfError(i.makeWritable(),"alphaSw.makeWritable"),nodeAv.FFmpegError.throwIfError(i.fromBuffer(a),"alphaSw.fromBuffer"),i.pts=c,i.duration=1n,nodeAv.FFmpegError.throwIfError(await n.sendFrame(i),"alpha.sendFrame"),await this.drainInterleaved(t);}async flush(e){await this._s.baseCtx.sendFrame(null),await this._s.alphaCtx.sendFrame(null),await this.drainInterleaved(e);}[Symbol.dispose](){let{basePkt:e,alphaPkt:t,baseCtx:o,alphaCtx:n,alphaSwFrame:i}=this._s;e.free(),t.free(),i.free(),n.freeContext(),o.freeContext();}async drainInterleaved(e){let{baseCtx:t,alphaCtx:o,basePkt:n,alphaPkt:i,stream:a}=this._s;for(;;){let c=await t.receivePacket(n),s=await o.receivePacket(i),d=c>=0,u=s>=0;if(!d&&!u)break;if(d!==u)throw new Error(`NVENC desync: base=${d}, alpha=${u}`);let p=wr(k(n.data),k(i.data),this._s.hevcCfg),w=[st(p)],f=n.pts,l=n.dts,g=n.duration,b=n.flags;n.data=Buffer.concat(w),n.pts=f,n.dts=l,n.duration=g===0n?1n:g,n.flags=b,n.streamIndex=a.index,n.rescaleTs(t.timeBase,a.timeBase),await e.writePacket(n),n.unref(),i.unref();}}};var re=class r{_ctx;_pkt;_stream;_pts=0n;constructor(e,t,o){this._ctx=e,this._pkt=t,this._stream=o;}static async create(e){let{codecName:t,codecTag:o,codecOpts:n,muxer:i,...a}=e,c=nodeAv.Codec.findEncoderByName(t);if(!c)throw new Error(`Video encoder not found: ${t}`);let s=await G({codec:c,...a,codecTag:o,options:n},"videoCtx.open2"),d=i.addStream(s,o);return new r(s,F(),d)}async encode(e,t){e.pts=this._pts++,e.duration=1n,nodeAv.FFmpegError.throwIfError(await this._ctx.sendFrame(e),"videoCtx.sendFrame"),await this.drain(t);}async flush(e){await this._ctx.sendFrame(null),await this.drain(e);}[Symbol.dispose](){this._pkt.free(),this._ctx.freeContext();}drain(e){return Q(this._ctx,this._pkt,this._stream,e)}};var Te=class r{_ctx;_pkt;_stream;_pts=0n;constructor(e,t,o){this._ctx=e,this._pkt=t,this._stream=o;}static async create(e){let{width:t,height:o,fps:n,hw:i,bitrate:a,muxer:c}=e,s=i.getEncoderCodec("hevc");if(!s)throw new Error("hevc_videotoolbox encoder not found");let d=await G({codec:s,width:t,height:o,fps:n,bitrate:a,pixelFormat:constants.AV_PIX_FMT_BGRA,colorRange:constants.AVCOL_RANGE_JPEG,codecTag:"hvc1",options:{alpha_quality:"1"}},"vtEnc.open2"),u=c.addStream(d,"hvc1");return new r(d,F(),u)}async encode(e,t){e.pts=this._pts++,e.duration=1n,nodeAv.FFmpegError.throwIfError(await this._ctx.sendFrame(e),"vtEnc.sendFrame"),await this.drain(t);}async flush(e){await this._ctx.sendFrame(null),await this.drain(e);}[Symbol.dispose](){this._pkt.free(),this._ctx.freeContext();}drain(e){return Q(this._ctx,this._pkt,this._stream,e)}};var ke="[Encoder]";async function br(r,e){let{width:t,height:o,fps:n,bitrate:i=8e6,disableHwCodec:a=false,sharedHw:c}=r,s=c??(a?void 0:api.HardwareContext.auto()??void 0),d=!c&&!!s;try{if(s?.deviceTypeName===constants.FF_HWDEVICE_TYPE_VIDEOTOOLBOX&&s.getEncoderCodec("hevc"))return h.debug(ke,"using VideoToolbox HEVC alpha encoder"),{hwVideo:await Te.create({width:t,height:o,fps:n,hw:s,bitrate:i,muxer:e}),hw:s,ownsHw:d};if(s?.deviceTypeName===constants.FF_HWDEVICE_TYPE_CUDA&&s.getEncoderCodec("hevc"))return h.debug(ke,"using NVENC dual-layer HEVC alpha encoder"),{hwVideo:await Ae.create({width:t,height:o,fps:n,hw:s,bitrate:i,muxer:e}),hw:s,ownsHw:d}}catch(p){h.warn(ke,"Hardware codec session limits reached, use software encoder",p),d&&s?.dispose();}return h.debug(ke,"using software libx265 HEVC alpha encoder"),{video:await re.create({width:t,height:o,fps:n,codecName:constants.FF_ENCODER_LIBX265,codecTag:"hvc1",codecOpts:{preset:"medium","x265-params":"log-level=1:bframes=3:pools=+:frame-threads=0"},bitrate:i,pixelFormat:constants.AV_PIX_FMT_YUVA420P,muxer:e}),codec:await O.create(t,o),ownsHw:false}}var Ie=class{_ctx;_opened=false;constructor(e,t){this._ctx=new nodeAv.FormatContext,nodeAv.FFmpegError.throwIfError(this._ctx.allocOutputContext2(null,t??null,e),"allocOutputContext2");}addStream(e,t){let o=this._ctx.newStream(null);return o.timeBase=e.timeBase,nodeAv.FFmpegError.throwIfError(o.codecpar.fromContext(e),"codecpar.fromContext"),t&&(o.codecpar.codecTag=t),o}async open(){this._opened||(nodeAv.FFmpegError.throwIfError(await this._ctx.openOutput(),"openOutput"),nodeAv.FFmpegError.throwIfError(await this._ctx.writeHeader(null),"writeHeader"),this._opened=true);}async writePacket(e){nodeAv.FFmpegError.throwIfError(await this._ctx.interleavedWriteFrame(e),"interleavedWriteFrame");}async[Symbol.asyncDispose](){this._opened&&(await this._ctx.writeTrailer(),await this._ctx.closeOutput(),await this._ctx[Symbol.asyncDispose](),this._opened=false);}};var dn="libvpx-vp9",fe=class r{_s;_disposed=false;constructor(e){this._s=e;}static kindFromPath(e){let t=e.toLowerCase();if(t.endsWith(".webm"))return "webm";if(t.endsWith(".mp4")||t.endsWith(".mov"))return "mp4";throw new Error(`Unsupported output extension: ${e}`)}static async create(e){let t=new Ie(e.outFile),o=e.kind==="mp4"?await this.mp4Video(e,t):await this.webmVideo(e,t),n=e.withAudio?await this.audioFor(e,t):void 0;return await t.open(),new r({muxer:t,...o,audio:n,opts:e})}static mp4Video(e,t){let{width:o,height:n,fps:i,disableHwCodec:a,sharedHw:c}=e;return br({width:o,height:n,fps:i,disableHwCodec:a,sharedHw:c},t)}static async webmVideo(e,t){let{width:o,height:n,fps:i}=e;return {video:await re.create({width:o,height:n,fps:i,codecName:dn,codecOpts:{deadline:"realtime","cpu-used":"8","row-mt":"1",threads:"2"},bitrate:4e6,pixelFormat:constants.AV_PIX_FMT_YUVA420P,muxer:t}),codec:await O.create(o,n),ownsHw:false}}static audioFor(e,t){let o=e.kind==="mp4"?{outSampleRate:44100,outSampleFmt:constants.AV_SAMPLE_FMT_FLTP,codecName:constants.FF_ENCODER_AAC}:{outSampleRate:48e3,outSampleFmt:constants.AV_SAMPLE_FMT_FLT,codecName:constants.FF_ENCODER_LIBOPUS};return Se.create({...o,globalHeader:true,bitrate:128e3,muxer:t})}setInputRate(e){this._s.audio?.setInputRate(e);}async encodeBGRA(e){let{hwVideo:t,muxer:o}=this._s;return t?t.encode(e,o):this.swEncode(e)}async encodeDecodedFrame(e){let{hwVideo:t,muxer:o}=this._s;return t?t.encode(e,o):this.swEncode(e)}async encodeAudio(e){await this._s.audio?.encode(e,this._s.muxer);}async flush(){let{hwVideo:e,video:t,audio:o,muxer:n}=this._s;await o?.flush(n),e?await e.flush(n):await t.flush(n);}async[Symbol.asyncDispose](){if(this._disposed)return;this._disposed=true;let{muxer:e,video:t,hwVideo:o,audio:n,codec:i,hw:a,ownsHw:c}=this._s;t?.[Symbol.dispose](),o?.[Symbol.dispose](),n?.[Symbol.dispose](),i?.[Symbol.dispose](),await e[Symbol.asyncDispose](),c&&a?.dispose();}async swEncode(e){let{video:t,codec:o,muxer:n}=this._s;assert.ok(o?.sws,"sws not initialized"),nodeAv.FFmpegError.throwIfError(o.dst.makeWritable(),"sinkDst.makeWritable"),nodeAv.FFmpegError.throwIfError(await o.sws.scaleFrame(o.dst,e),"sinkSws.scaleFrame"),await t.encode(o.dst,n);}};var oe=class r{_s;_disposed=false;constructor(e){this._s=e;}static async create(e){let{width:t,height:o,fps:n,outFile:i,withAudio:a=false,disableHwCodec:c=false}=e,s=i.split(",").map(l=>l.trim()).filter(Boolean);if(s.length===0)throw new Error("outFile must contain at least one path");let d=s.map(l=>fe.kindFromPath(l)),p=!c&&d.includes("mp4")?api.HardwareContext.auto()??void 0:void 0,w=p?.deviceTypeName===constants.FF_HWDEVICE_TYPE_VIDEOTOOLBOX||p?.deviceTypeName===constants.FF_HWDEVICE_TYPE_CUDA,f=[];for(let l=0;l<s.length;l++){let g=await fe.create({outFile:s[l],kind:d[l],width:t,height:o,fps:n,withAudio:a,disableHwCodec:c,sharedHw:d[l]==="mp4"&&w?p:void 0});f.push(g);}return new r({sinks:f,sharedHw:p,limiter:new J(1),outFiles:s,opts:e})}setupAudio(e){for(let t of this._s.sinks)t.setInputRate(e);}async encodeBGRA(e){await this._s.limiter.schedule(async()=>{var o=[];try{let t=A(o,this.bgraFrame(e));await Promise.all(this._s.sinks.map(c=>c.encodeBGRA(t)));}catch(n){var i=n,a=true;}finally{T(o,i,a);}});}async encodePNG(e){await this._s.limiter.schedule(async()=>{let{width:t,height:o}=this._s.opts;this._s.pngCodec??=await O.create(t,o);let n=await this._s.pngCodec.decodePNG(e);for(let i of this._s.sinks)await i.encodeDecodedFrame(n);});}async encodeAudio(e){await this._s.limiter.schedule(async()=>{for(let t of this._s.sinks)await t.encodeAudio(e);});}async finish(){try{await this._s.limiter.drain();for(let e of this._s.sinks)await e.flush();}finally{await this.free();}return this._s.outFiles}async[Symbol.asyncDispose](){this._disposed||(await this._s.limiter.drain(),await this.free());}async free(){if(!this._disposed){this._disposed=true;for(let e of this._s.sinks)await e[Symbol.asyncDispose]();this._s.pngCodec?.[Symbol.dispose](),this._s.sharedHw?.dispose();}}bgraFrame(e){let t=z(this._s.opts.width,this._s.opts.height,constants.AV_PIX_FMT_BGRA);return nodeAv.FFmpegError.throwIfError(t.fromBuffer(e),"bgraFrame.fromBuffer"),t}};var Re=class{_fps;_actual=0;_currentBurst=0;_bursts=[];constructor(e){this._fps=e;}wrote(e=1){this._currentBurst>0&&(this._bursts.push(this._currentBurst),this._currentBurst=0),this._actual+=e;}dropped(e=1){this._currentBurst+=e;}finalize(){this._currentBurst>0&&(this._bursts.push(this._currentBurst),this._currentBurst=0);let e=0,t=0,o=0;for(let s of this._bursts){e+=s,o=Math.max(o,s);let d=Math.max(0,s-1);t+=(d/this._fps)**2;}let n=this._actual+e,i=n>0?e/n:0,a=Math.min(1,t),c=1-(1-i)*(1-a);return {global:i,local:a,jank:c,expected:n,actual:this._actual,maxBurst:o}}};function Be(r,e){return r.width===e.width&&r.height===e.height}var yr="audio-meta",vr="audio-chunk";function Pr({wc:r,encoder:e,getVideoTimeMs:t,onError:o}){let n=async(a,c)=>{let s=c.sampleRate,d=t();e.setupAudio(s);let u=Math.ceil(d*s/1e3);if(!(u<=0))try{await e.encodeAudio(Buffer.alloc(u*2*4));}catch(p){o(p);}},i=async(a,c)=>{try{await e.encodeAudio(c);}catch(s){o(s);}};return r.ipc.on(yr,n),r.ipc.on(vr,i),()=>{r.ipc.removeListener(yr,n),r.ipc.removeListener(vr,i);}}function Er({fn:r,maxAttempts:e=3,timeout:t}){let o=new Error(`timeout over ${t}ms`);return async function(...n){let i=0;for(;;)try{let a=[r(...n)];return t&&a.push(promises$1.setTimeout(t).then(()=>{throw o})),await Promise.race(a)}catch(a){if(i++,i>=e)throw a;await xe(Math.pow(2,i)*100+Math.random()*100);}}}var at=["file:","http:","https:","data:"],wn=/^(file:|https?:|data:)/;function Sr(r){if(wn.test(r))return;let e=r.split(":")[0]+":",t=at.includes(e)?`unsupported protocol: ${e}, expected ${at.join(", ")}`:`invalid source format, expected ${at.join(", ")}`;throw new Error(t)}var Oe=class{_promise;_resolve;_timeoutToken;wait(e){if(this._promise)throw new Error("already waiting");return this._promise=new Promise(t=>{this._resolve=t,e?.timeout!==void 0&&(this._timeoutToken=setTimeout(()=>{e.onTimeout?.(),t();},e.timeout));}),this._promise}signal(){clearTimeout(this._timeoutToken),this._promise=void 0,this._resolve?.();}};var Le="[Network]",_n=new Map([["jssz-boss.hdslb.com","jssz-boss.bilibili.co"],["boss.hdslb.com","shjd-boss.bilibili.co"]]);function ct(r){if(!r.startsWith("http"))return r;let e=new url.URL(r),t=_n.get(e.hostname);return t?(e.hostname=t,e.protocol="http:",e.toString()):r}function Fr({source:r,window:e,useInnerProxy:t}){let o=e.webContents.session.webRequest,n=new J(256),i=new Map;async function a(s,d){let u=new Oe;i.set(s,u),await u.wait({timeout:5e3,onTimeout:d}).finally(()=>i.delete(s));}function c(s){i.get(s)?.signal();}o.onBeforeRequest((s,d)=>{let u=s.url,p=t?ct(u):u;n.schedule(()=>{let w=`${e.id}_${s.id}`;return h.debug(Le,"start:",{key:w,url:u,proxied:p,method:s.method,source:r,stats:n.stats}),d(p===u?{cancel:false}:{cancel:false,redirectURL:p}),a(w,()=>{h.warn(Le,"maybe timeout:",{key:w,url:u,proxied:p,method:s.method,source:r});})});}),o.onHeadersReceived(({responseHeaders:s},d)=>{delete s?.["x-frame-options"],delete s?.["X-Frame-Options"],delete s?.["content-security-policy"],delete s?.["Content-Security-Policy"],d({cancel:false,responseHeaders:s});}),o.onCompleted(s=>{let d=`${e.id}_${s.id}`;c(d),h.debug(Le,"completed:",{key:d,url:s.url,method:s.method,statusCode:s.statusCode,source:r});}),o.onErrorOccurred(s=>{let d=`${e.id}_${s.id}`;c(d),h.error(Le,"error:",{key:d,url:s.url,method:s.method,error:s.error,source:r});});}function dt(r){let e=r.webContents.session.webRequest;e.onBeforeRequest(null),e.onHeadersReceived(null),e.onCompleted(null),e.onErrorOccurred(null);}var q="[Window]",Cr=new Error("window timeout");function xn({source:r,win:e,action:t,tolerant:o,signal:n}){return new Promise((i,a)=>{let c=setTimeout(()=>s(Cr),1e4),s=d=>{clearTimeout(c),d?a(d):i();};n?.throwIfAborted(),n?.addEventListener("abort",()=>s(n.reason),{once:true}),e.webContents.once("dom-ready",()=>{h.debug(q,"dom-ready:",{source:r}),o&&s();}),e.webContents.once("did-stop-loading",()=>{h.debug(q,"did-stop-loading:",{source:r}),s();}),e.webContents.once("did-fail-load",(d,u,p,w)=>{let f=`did-fail-load: ${JSON.stringify({url:w,source:r,code:u,desc:p})}`;h.error(q,f),s(new Error(f));}),e.webContents.once("render-process-gone",(d,{exitCode:u,reason:p})=>{let w=`render-process-gone: ${JSON.stringify({source:r,exitCode:u,reason:p})}`;h.error(q,w),s(new Error(w));}),t();})}function ne(r){return new Promise(e=>{dt(r);let t=setTimeout(()=>{try{h.warn(q,"force close"),r.destroy();}catch{}o();},1e3),o=()=>(clearTimeout(t),e());r.webContents.stopPainting(),r.webContents.debugger.detach(),r.once("closed",o),r.close();})}async function Ar({source:r,renderer:e,tolerant:t,preload:o,signal:n,onCreated:i}){let{width:a,height:c,useInnerProxy:s}=e,d=s?ct(r):r,u=new electron.BrowserWindow({width:a,height:c+1,minWidth:a,minHeight:c+1,maxWidth:a,maxHeight:c+1,resizable:false,minimizable:false,movable:false,show:false,transparent:true,backgroundColor:void 0,frame:false,webPreferences:{offscreen:true,backgroundThrottling:false,nodeIntegration:true,nodeIntegrationInSubFrames:true,nodeIntegrationInWorker:true,contextIsolation:false,webSecurity:false,allowRunningInsecureContent:true,experimentalFeatures:true,preload:o}});Fr({source:r,window:u,useInnerProxy:s}),u.webContents.debugger.attach("1.3"),await i?.(u),u.webContents.on("console-message",({level:p,message:w,lineNumber:f,sourceId:l})=>{let g=[q,"console:",{message:w,lineNumber:f,sourceId:l,source:r}];p==="error"?h.error(...g):h.debug(...g),!(p==="warning"&&w.startsWith("%cElectron Security Warning"))&&e.onConsole(p,w);});try{let p=Jt(d,{width:a,height:c});await xn({source:r,win:u,action:()=>u.loadURL(p),tolerant:t,signal:n});}catch(p){throw await ne(u),p}return u}var yn=Er({fn:Ar,maxAttempts:2});async function Ne({source:r,renderer:e,preload:t,onCreated:o,signal:n}){Sr(r),n?.throwIfAborted();let i,a;try{i=await yn({source:r,renderer:e,signal:n});}catch(s){a=s;}let c=()=>Ar({source:r,renderer:e,preload:t,onCreated:o,signal:n,tolerant:e.windowTolerant});if(e.windowTolerant&&a===Cr)return h.warn(q,`warmup timeout: ${r}, falling back to dom-ready`),await c();if(a){let{message:s,stack:d}=a;throw new Error(`failed to warmup window: ${JSON.stringify({source:r,message:s,stack:d})}`)}i&&(i.webContents.removeAllListeners(),dt(i),await xe(2e3),await ne(i));try{return await c()}catch(s){let{message:d,stack:u}=s;throw new Error(`failed to load window: ${JSON.stringify({source:r,message:d,stack:u})}`)}}async function Tr(r){var ie=[];try{let{source:e,fps:t,width:o,height:n,duration:i,withAudio:a,outFile:c,disableHwCodec:s,signal:d,onProgress:u}=r;let p=A(ie,await oe.create({width:o,height:n,fps:t,outFile:c,withAudio:a,disableHwCodec:s}),!0);let w=Math.ceil(t*i);let f=1e3/t;let l={width:o,height:n+1};let g=0;let b;let y=0;let _;let v;let x;let S=new Re(t);let he;let X=C=>{g++,p.encodeBGRA(C).catch(Y=>_??=Y);};let we=(C,Y,mt)=>{if(_??=d?.reason,_){x?.(_);return}let lt=mt.getSize();if(!Be(lt,l)){Pe(ge,l);return}let He=mt.toBitmap(),de=Ee(He,lt);if(de===void 0){_??=new Error(`no timestamp @ ${g}`);return}if(b!==void 0&&de-b<f*.8)return;let Ue=Buffer.from(He.buffer,He.byteOffset,n*o*4);if(b===void 0)X(Ue),S.wrote();else {let ht=de-b;if(ht<=f*1.2)X(Ue),S.wrote();else {let wt=Math.round(ht/f);S.dropped(wt-1),S.wrote();for(let gt=0;gt<wt&&g<w;gt++)X(Ue);}}b=de;let ft=Math.floor(g/w*100);Math.abs(ft-y)>10&&(y=ft,u(y));let Br=i*1e3;(de>=Br-f*.5||g>=w)&&v?.();};let R=await Ne({source:e,renderer:r,signal:d,preload:a?kt:void 0,onCreated:C=>{a&&(he=Pr({wc:C.webContents,encoder:p,getVideoTimeMs:()=>b??0,onError:Y=>_??=Y}));}});let ge=R.webContents.debugger;try{R.webContents.stopPainting(),R.webContents.setFrameRate(t),R.webContents.on("paint",we),R.webContents.startPainting(),d?.throwIfAborted(),d?.addEventListener("abort",()=>x?.(d.reason),{once:!0}),await qt(ge),await new Promise((C,Y)=>[v,x]=[C,Y]);}finally{R.webContents.off("paint",we),await ne(R),he?.(),await p.finish();}if(_||g===0)throw _??new Error("no frames captured");else {let C=S.finalize();return {written:g,jank:C.jank,outFile:c}}}catch(se){var ae=se,Ve=true;}finally{var ce=T(ie,ae,Ve);ce&&await ce;}}var Me="__pup_tick__",vn="[Tick]",Pn=`(function() {
168
96
  if (window.self === window.top) return;
169
- if (typeof ${Ae} !== 'undefined') return;
97
+ if (typeof ${Me} !== 'undefined') return;
170
98
 
171
99
  const orig = {
172
100
  Date: Date,
@@ -254,9 +182,9 @@
254
182
  window.clearTimeout = orig.clearTimeout;
255
183
  window.setInterval = orig.setInterval;
256
184
  window.clearInterval = orig.clearInterval;
257
- delete window.${Ae};
185
+ delete window.${Me};
258
186
  }
259
187
 
260
- window.${Ae} = { process: process, eject: eject };
261
- })();`;async function lr(r,e){try{await r?.executeJavaScript(`${Jo} ${Ae}.process(${e})`);}catch(t){f.error(Yo,"tick failed:",t);}}var Qe="[Shoot]";async function Qo({source:r,win:e,size:t,ms:o}){let i,n=0,s=e.webContents.debugger,c={width:t.width,height:t.height+1},a=setInterval(()=>{f.warn(Qe,`${r} render is extremely slow @ ${o}, current: ${i} with ${n} repeats`),e.webContents.invalidate();},1e3);try{return await new Promise(d=>{let u=(p,h,l)=>{let w=l.getSize();if(!ve(w,c)){pe(s,c);return}let g=l.toBitmap(),b=ue(g,w);if(b===void 0||Math.abs(b-o)>1){i=b,n++;return}e.webContents.off("paint",u),e.webContents.stopPainting(),d(Buffer.from(g.buffer,g.byteOffset,t.height*t.width*4));};e.webContents.on("paint",u),e.webContents.startPainting();})}finally{clearInterval(a);}}async function fr(r,e,t){var L=[];try{let{fps:o,width:i,height:n,duration:s,withAudio:c,outFile:a,disableGpu:d,disableHwCodec:u}=t;c&&f.warn(Qe,"audio will be ignored on this mode");let p=y(L,await q.create({width:i,height:n,fps:o,outFile:a,withAudio:c,disableHwCodec:u}),!0);let h=await mr&&!d;let l=Math.ceil(o*s);let w=1e3/o;let g=0;let b=0;let v=h?240:o;f.debug(Qe,{renderFps:v,fps:o});let _=await Se({source:e,renderer:t});let E=_.webContents.debugger;let x=_.webContents.mainFrame;let I=x.frames[0];try{E.attach("1.3"),_.webContents.setFrameRate(v),_.webContents.stopPainting(),await Ht(E);for(let Y=0;Y<l;Y++){let J=(Y+1)*w,Te=Promise.all([lr(I,J),Bt(E,J)]);await Ut(E,w),await Te;let ae=await Qo({source:e,win:_,size:{width:i,height:n},ms:J});await p.encodeBGRA(ae),g++;let F=Math.floor(g/l*100);Math.abs(F-b)>10&&(b=F,r.writeProgress(b));}}finally{E.detach(),await K(_),await p.finish();}if(g===0)throw new Error("no frames captured");else return {written:g,jank:0,outFile:a}}catch(ne){var A=ne,V=true;}finally{var X=P(L,A,V);X&&await X;}}var ri="[App]";Ft();function hr(){f.debug(ri,"gpu features:",electron.app.getGPUFeatureStatus());}electron.app.dock?.hide();electron.app.on("window-all-closed",()=>{});Rt({name:"app",defaults:{...Tt,withAudio:false,deterministic:false,useInnerProxy:false,disableGpu:false,disableHwCodec:false,windowTolerant:false},run:async(r,e)=>{let t=i=>{electron.app.quit(),process.exit(i);};process.once("SIGTERM",()=>t(143)),process.once("SIGINT",()=>t(130)),process.once("exit",i=>t(i)),assert.ok(process.send,"ipc channel missing \u2014 spawn with stdio[3]='ipc'");let o=new de;try{electron.app.on("gpu-info-update",hr),await electron.app.whenReady(),Lt(),hr(),await promises.mkdir(path.dirname(e.outFile),{recursive:!0});let i=e.deterministic?fr:pr;await o.writeDone(await i(o,r,e));}catch(i){let n=i,s=n.stack??n.message??String(i??"unknown error");await o.writeError(s);}finally{electron.app.exit();}}});//# sourceMappingURL=app.cjs.map
262
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL3RzdXBAOC41LjErNGU0YmJhOWVjMWVkMGI4Ni9ub2RlX21vZHVsZXMvdHN1cC9hc3NldHMvY2pzX3NoaW1zLmpzIiwiLi4vc3JjL2Jhc2UvZW52LnRzIiwiLi4vc3JjL2Jhc2UvcGFyc2VyLnRzIiwiLi4vc3JjL2Jhc2UvY29uc3RhbnRzLnRzIiwiLi4vc3JjL2Jhc2UvbG9nZ2luZy50cyIsIi4uL3NyYy9iYXNlL2NyYXNoLnRzIiwiLi4vc3JjL2Jhc2Uvbm9lcnIudHMiLCIuLi9zcmMvYmFzZS9wcm9jZXNzLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3NjaGVtYS50cyIsIi4uL3NyYy9jb21tb24udHMiLCIuLi9zcmMvcmVuZGVyZXIvaXBjLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3N0ZWdvLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3Byb3RvY29sLnRzIiwiLi4vc3JjL2Jhc2UvY2RwLnRzIiwiLi4vc3JjL2Jhc2UvbGltaXRlci50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvbWlzYy50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvYXVkaW8udHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL2NvZGVjLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9iaXQudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL25hbC50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvdnBzLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9hbHBoYS50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvbnZlbmMudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL3ZpZGVvLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci92aWRlb3Rvb2xib3gudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL2ZhY3RvcnkudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL211eGVyLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9waXBlbGluZS50cyIsIi4uL3NyYy9iYXNlL2ZyYW1lX2Ryb3AudHMiLCIuLi9zcmMvYmFzZS9pbWFnZS50cyIsIi4uL3NyYy9yZW5kZXJlci9hdWRpby50cyIsIi4uL3NyYy9iYXNlL3RpbWluZy50cyIsIi4uL3NyYy9iYXNlL3JldHJ5LnRzIiwiLi4vc3JjL3JlbmRlcmVyL2h0bWxfY2hlY2sudHMiLCIuLi9zcmMvYmFzZS93YWl0YWJsZV9ldmVudC50cyIsIi4uL3NyYy9yZW5kZXJlci9uZXR3b3JrLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3dpbmRvdy50cyIsIi4uL3NyYy9yZW5kZXJlci9yZW5kZXIudHMiLCIuLi9zcmMvYmFzZS9od2FjY2VsLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3RpY2sudHMiLCIuLi9zcmMvcmVuZGVyZXIvc2hvb3QudHMiLCIuLi9zcmMvYXBwLnRzIl0sIm5hbWVzIjpbImdldEltcG9ydE1ldGFVcmwiLCJpbXBvcnRNZXRhVXJsIiwicGVudiIsIm5hbWUiLCJwYXJzZXIiLCJkZWZhdWx0VmFsdWUiLCJwYXJzZU51bWJlciIsIngiLCJudW0iLCJyZXF1aXJlIiwiY3JlYXRlUmVxdWlyZSIsImVudiIsInB1cExvZ0xldmVsIiwicHVwVXNlSW5uZXJQcm94eSIsInB1cERpc2FibGVHUFUiLCJwdXBEaXNhYmxlSHdDb2RlYyIsInB1cERldGVybWluaXN0aWMiLCJwdXBQa2dSb290IiwiZGlybmFtZSIsImpvaW4iLCJwdXBXaW5kb3dUb2xlcmFudCIsIkRFQlVHIiwiSU5GTyIsIldBUk4iLCJFUlJPUiIsIkZBVEFMIiwic3RhY2tIb29rIiwidGFyZ2V0IiwiX2NvbnRleHQiLCJtZXNzYWdlcyIsInByb2Nlc3NlZCIsIm1zZyIsIl9mYXRhbF9kZWMiLCJfZXJyb3JfZGVjIiwiX3dhcm5fZGVjIiwiX2luZm9fZGVjIiwiX2RlYnVnX2RlYyIsIl9pbml0IiwiTG9nZ2VyIiwiX2xldmVsIiwiX19ydW5Jbml0aWFsaXplcnMiLCJfX3B1YmxpY0ZpZWxkIiwidmFsdWUiLCJkZWJ1ZyIsImluZm8iLCJ3YXJuIiwiZXJyb3IiLCJsdiIsIm1lc3NhZ2UiLCJwcm9jIiwicmVzb2x2ZSIsInJlamVjdCIsImZhdGFsIiwiZGlzcGF0Y2giLCJkYXRhIiwiZXJyIiwiY29kZSIsInNpZ25hbCIsInJlYXNvbiIsIl9fZGVjb3JhdG9yU3RhcnQiLCJfX2RlY29yYXRlRWxlbWVudCIsIl9fZGVjb3JhdG9yTWV0YWRhdGEiLCJsb2dnZXIiLCJMb2ciLCJsZXZlbCIsIkFWX0xPR19FUlJPUiIsIkFWX0xPR19XQVJOSU5HIiwiVEFHIiwic3RhcnRFbGVjdHJvbkNyYXNoUmVwb3J0ZXIiLCJkdW1wRGlyIiwiYXBwIiwibWtkaXJTeW5jIiwiY3Jhc2hSZXBvcnRlciIsIm5vZXJyIiwiZm4iLCJhcmdzIiwicmV0IiwiUFVQX0FSR1NfS0VZIiwicGFyZ3MiLCJhcmd2IiwicHJpdiIsImFyZyIsIkRFRkFVTFRfV0lEVEgiLCJERUZBVUxUX0hFSUdIVCIsIkRFRkFVTFRfRlBTIiwiREVGQVVMVF9EVVJBVElPTiIsIkRFRkFVTFRfT1VUX0ZJTEUiLCJSZW5kZXJTY2hlbWEiLCJ6IiwiZGVmYXVsdFJlbmRlck9wdGlvbnMiLCJtYWtlQ0xJIiwib3B0aW9ucyIsInNoYXBlIiwiZCIsInByb2dyYW0iLCJzb3VyY2UiLCJvcHRzIiwiZSIsIklwY1dyaXRlciIsInBheWxvYWQiLCJGUkFNRV9TWU5DX01BUktFUl9XSURUSCIsIlNURUdPX1RJQ0tfQ0hBTk5FTCIsImJ1aWxkU3RlZ29IVE1MIiwidGFyZ2V0VVJMIiwic2l6ZSIsIndpZHRoIiwiaGVpZ2h0IiwiZGVjb2RlU3RlZ28iLCJiaXRtYXAiLCJtYXJrZXJSb3ciLCJ0aW1lc3RhbXAiLCJpIiwicGl4ZWxJZHgiLCJiaXQiLCJzdGFydFN0ZWdvIiwiY2RwIiwic3dhcEJ1ZmZlciIsImV4cGVjdGVkIiwic3dhcHBlZCIsInIiLCJpcGNNYWluIiwic3RvcFN0ZWdvIiwiUFVQX1NDSEVNRSIsInByb3RvY29sIiwic2V0dXBQdXBQcm90b2NvbCIsInJlcSIsInVybCIsInNyYyIsImh0bWwiLCJjcmVhdGVTdGVnb1VSTCIsImFkdmFuY2VWaXJ0dWFsVGltZSIsImJ1ZGdldCIsInRpbWVvdXQiLCJoYW5kbGVyIiwiXyIsIm1ldGhvZCIsInBhdXNlVmlydHVhbFRpbWUiLCJyZXNpemVEcmF3YWJsZSIsIkNvbmN1cnJlbmN5TGltaXRlciIsIm1heENvbmN1cnJlbmN5IiwidiIsImtlZXAiLCJlbnRyeSIsIm9wZW5WaWRlb0N0eCIsImxhYmVsIiwiY3R4IiwiQ29kZWNDb250ZXh0IiwiUmF0aW9uYWwiLCJBVl9DT0RFQ19GTEFHX0dMT0JBTF9IRUFERVIiLCJrIiwiRkZtcGVnRXJyb3IiLCJtYWtlRnJhbWUiLCJwaXhGbXQiLCJmcmFtZSIsIkZyYW1lIiwibWFrZVBhY2tldCIsInBrdCIsIlBhY2tldCIsImRyYWluUGFja2V0cyIsInN0cmVhbSIsIm11eGVyIiwiQVZFUlJPUl9FQUdBSU4iLCJBVkVSUk9SX0VPRiIsIlNBTVBMRV9GTVRfTkFNRSIsIkFWX1NBTVBMRV9GTVRfRkxUIiwiQVZfU0FNUExFX0ZNVF9GTFRQIiwiQXVkaW9FbmNvZGVyIiwiX0F1ZGlvRW5jb2RlciIsIm91dEZtdCIsImNvZGVjIiwiQ29kZWMiLCJBVl9DSEFOTkVMX0xBWU9VVF9TVEVSRU8iLCJpblNhbXBsZVJhdGUiLCJncmFwaCIsIkZpbHRlckdyYXBoIiwiYWJ1ZmZlciIsIkZpbHRlciIsImJ1ZlNyYyIsImFidWZmZXJzaW5rIiwiYnVmU2luayIsImZpbHRlckRlc2MiLCJvdXRwdXRzIiwiRmlsdGVySW5PdXQiLCJpbnB1dHMiLCJwY20iLCJfc3RhY2siLCJuU2FtcGxlcyIsIl9fdXNpbmciLCJfZXJyb3IiLCJfaGFzRXJyb3IiLCJfX2NhbGxEaXNwb3NlIiwiQ29kZWNTdGF0ZSIsIl9Db2RlY1N0YXRlIiwiRkZfREVDT0RFUl9QTkciLCJvayIsInBuZyIsIkFWX1BJWF9GTVRfQkdSQSIsIkFWX1BJWF9GTVRfWVVWQTQyMFAiLCJwbmdEYXRhIiwic3dzIiwiU29mdHdhcmVTY2FsZUNvbnRleHQiLCJmbXQiLCJTV1NfQklMSU5FQVIiLCJwYWNrQml0cyIsImJpdHMiLCJidWYiLCJieXRlIiwiYiIsIkJpdFdyaXRlciIsInZhbCIsIm4iLCJsZW4iLCJwYWQiLCJzdGFydCIsIkJpdFJlYWRlciIsInplcm9zIiwiQU5ORVhfQl9TVEFSVF9DT0RFIiwicGFyc2VOYWxUeXBlIiwiaGVhZGVyMCIsImhlYWRlcjEiLCJ0eXBlIiwibGF5ZXJJZCIsInRlbXBvcmFsSWQiLCJlbmNvZGVOYWxIZWFkZXIiLCJieXRlMCIsImJ5dGUxIiwic3BsaXROYWxVbml0cyIsImJpdHN0cmVhbSIsIm5hbHMiLCJzY0xlbiIsIm5hbFN0YXJ0IiwibmFsRW5kIiwiaiIsInJld3JpdGVOYWxMYXllcklkIiwibmFsIiwib3V0IiwiYjAiLCJiMSIsInJlbW92ZUVtdWxhdGlvblByZXZlbnRpb24iLCJhZGRFbXVsYXRpb25QcmV2ZW50aW9uIiwiZXh0cmFjdFBUTCIsInZwc0RhdGEiLCJiciIsIm1heFN1YkxheWVyc01pbnVzMSIsInB0bFN0YXJ0Iiwid3JpdGVCYXNlVlBTIiwiYnciLCJwdGwiLCJ3cml0ZVZQU0V4dGVuc2lvbiIsImJ1aWxkQWxwaGFWUFMiLCJOQUxfVU5JVF9QUkVGSVhfU0VJIiwiYnVpbGRVbmlmaWVkRXh0cmFkYXRhIiwiYmFzZUV4dHJhZGF0YSIsImFscGhhRXh0cmFkYXRhIiwiYmFzZU5hbHMiLCJhbHBoYU5hbHMiLCJhbHBoYUJ5VHlwZSIsImFyciIsImNodW5rcyIsImVtaXR0ZWQiLCJhbHBoYU5hbCIsImJ1aWxkQWxwaGFDaGFubmVsSW5mb1NFSSIsImgwIiwiaDEiLCJ3cml0ZUJpdHMiLCJpbnRlcmxlYXZlQWNjZXNzVW5pdHMiLCJOdmVuY0R1YWxMYXllckVuY29kZXIiLCJfTnZlbmNEdWFsTGF5ZXJFbmNvZGVyIiwicyIsImZwcyIsImJpdHJhdGUiLCJGRl9FTkNPREVSX0hFVkNfTlZFTkMiLCJjb21tb24iLCJiYXNlQ3R4IiwiYWxwaGFDdHgiLCJBVl9QSVhfRk1UX1lVVjQyMFAiLCJiYXNlUGt0IiwiYWxwaGFQa3QiLCJiYXNlRXh0cmEiLCJhbHBoYUV4dHJhIiwiYmdyYUZyYW1lIiwicHRzIiwic3JjTHMiLCJ3IiwiaCIsInlTaXplIiwidXZTaXplIiwieSIsImJhc2VSIiwiYWxwaGFSIiwiYmFzZVJlYWR5IiwiYWxwaGFSZWFkeSIsImR0cyIsImR1cmF0aW9uIiwiVmlkZW9FbmNvZGVyIiwiX1ZpZGVvRW5jb2RlciIsImNvZGVjTmFtZSIsImNvZGVjVGFnIiwiY29kZWNPcHRzIiwicmVzdCIsIlZpZGVvVG9vbGJveEVuY29kZXIiLCJfVmlkZW9Ub29sYm94RW5jb2RlciIsImh3IiwiQVZDT0xfUkFOR0VfSlBFRyIsImNyZWF0ZVZpZGVvRW5jb2RlciIsImRpc2FibGVId0NvZGVjIiwiSGFyZHdhcmVDb250ZXh0IiwiRkZfSFdERVZJQ0VfVFlQRV9WSURFT1RPT0xCT1giLCJGRl9IV0RFVklDRV9UWVBFX0NVREEiLCJGRl9FTkNPREVSX0xJQlgyNjUiLCJGb3JtYXRNdXhlciIsIm91dFBhdGgiLCJmb3JtYXROYW1lIiwiRm9ybWF0Q29udGV4dCIsImNvZGVjQ3R4IiwiRW5jb2RlclBpcGVsaW5lIiwiX0VuY29kZXJQaXBlbGluZSIsIm91dEZpbGUiLCJ3aXRoQXVkaW8iLCJ2aWRlbyIsImh3VmlkZW8iLCJhdWRpbyIsIkZGX0VOQ09ERVJfQUFDIiwic2FtcGxlUmF0ZSIsImlucHV0IiwiZHN0IiwiY3MiLCJsaW1pdGVyIiwiX20iLCJfdiIsIl9odiIsIl9hIiwiX3Byb21pc2UiLCJfY29kZWMiLCJGcmFtZURyb3BTdGF0cyIsImNvdW50IiwidG90YWxEcm9wcGVkIiwibG9jYWxTdW0iLCJtYXhCdXJzdCIsImJ1cnN0IiwicGVyY2VwdGlibGUiLCJnIiwibCIsInNjb3JlIiwic2l6ZUVxdWFscyIsImEiLCJBVURJT19NRVRBX0NIQU5ORUwiLCJBVURJT19DSFVOS19DSEFOTkVMIiwiQVVESU9fQ0FQVFVSRV9TQ1JJUFQiLCJzZXR1cEF1ZGlvQ2FwdHVyZSIsImVuY29kZXIiLCJnZXRWaWRlb1RpbWVNcyIsIm9uRXJyb3IiLCJwcmVsb2FkUGF0aCIsInRtcGRpciIsInJhbmRvbVVVSUQiLCJ3cml0ZUZpbGUiLCJzZXNzaW9uIiwiX2UiLCJzdGFydE1zIiwic2lsZW5jZVNhbXBsZXMiLCJidWZmZXIiLCJybSIsInNsZWVwIiwibXMiLCJ1c2VSZXRyeSIsIm1heEF0dGVtcHRzIiwidGltZW91dEVycm9yIiwiYXR0ZW1wdCIsInByb21pc2VzIiwic2V0VGltZW91dCIsIlNVUFBPUlRFRF9QUk9UT0NPTFMiLCJTT1VSQ0VfUEFUVEVSTiIsImNoZWNrSFRNTCIsIldhaXRhYmxlRXZlbnQiLCJtYXAiLCJwcm94aWVkVXJsIiwicGFyc2VkIiwiVVJMIiwic2V0SW50ZXJjZXB0b3IiLCJ3aW5kb3ciLCJ1c2VJbm5lclByb3h5IiwiZXZlbnRzIiwid2FpdCIsImtleSIsIm9uVGltZW91dCIsImV2ZW50IiwiZGV0YWlscyIsImNhbGxiYWNrIiwicHJveGllZCIsInJlc3BvbnNlSGVhZGVycyIsInVuc2V0SW50ZXJjZXB0b3IiLCJUSU1FT1VUX0VSUk9SIiwid2FpdEZvckZpbmlzaCIsIndpbiIsImFjdGlvbiIsInRvbGVyYW50IiwiaW50ZXJ2YWwiLCJkb25lIiwic3RlZ29GcmFtZSIsImF0dGFjaGVkIiwiaXNNYWluRnJhbWUiLCJmcmFtZVByb2Nlc3NJZCIsImZyYW1lUm91dGluZ0lkIiwiZGVzYyIsImV4aXRDb2RlIiwiZGlzcG9zZVdpbmRvdyIsInNldHRsZWQiLCJvcGVuV2luZG93Iiwib25DcmVhdGVkIiwicmVuZGVyZXIiLCJ3YXJtdXAiLCJCcm93c2VyV2luZG93IiwibGluZU51bWJlciIsInNvdXJjZUlkIiwibXNncyIsIm9wZW5XaW5kb3dXaXRoUmV0cnkiLCJsb2FkV2luZG93Iiwib3BlbiIsInN0YWNrIiwicmVuZGVyIiwid3JpdGVyIiwidG90YWwiLCJmcmFtZUludGVydmFsIiwiZnJhbWVTaXplIiwid3JpdHRlbiIsImxhc3RXcml0dGVuVGltZSIsInByb2dyZXNzIiwiZW5jb2RlRXJyb3IiLCJyZXNvbHZlciIsInJlamVjdGVyIiwiZHJvcFN0YXRzIiwic2NoZWR1bGVGcmFtZSIsInBhaW50IiwiX3IiLCJpbWFnZSIsImltYWdlU2l6ZSIsImN1cnJlbnRUaW1lIiwiY3JvcHBlZCIsInRpbWVEZWx0YSIsImZyYW1lc1RvSW5zZXJ0IiwibmV3UHJvZ3Jlc3MiLCJkdXJhdGlvbk1zIiwiZHJvcFNjb3JlIiwiZGV0ZWN0R1BVRHJpdmVyIiwicmVzdWx0IiwiY2FuSVVzZUdQVSIsIlRJQ0tfU1lNQk9MIiwiSE9PSyIsInRpY2siLCJ0aW1lc3RhbXBNcyIsImxhc3RUcyIsImxhZ2d5IiwiX2QiLCJ0cyIsInNob290IiwiZGlzYWJsZUdwdSIsInBpcGVsaW5lIiwiZ3B1IiwicmVuZGVyRnBzIiwibWFpbiIsImlmcmFtZSIsImZyYW1lTXMiLCJ1cGRhdGVkIiwicHJpbnRGZWF0dXJlcyIsImV4aXQiLCJjIiwiaXBjIiwibWtkaXIiLCJtIl0sIm1hcHBpbmdzIjoiMGtCQUtBLElBQUEsRUFBQSxDQUFBLE1BQUEsQ0FBQSxNQUFBLENBQUEsSUFBQSxFQUFBLENBQUEsTUFBQSxDQUFBLGNBQUEsQ0FBQSxJQUFBLEVBQUEsQ0FBQSxNQUFBLENBQUEsd0JBQUEsQ0FBQSxJQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEdBQUEsQ0FBQSxDQUFBLENBQUEsTUFBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxNQUFBLENBQUEsR0FBQSxDQUFBLFNBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsTUFBQSxTQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxJQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxHQUFBLENBQUEsSUFBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxVQUFBLENBQUEsSUFBQSxDQUFBLFlBQUEsQ0FBQSxJQUFBLENBQUEsUUFBQSxDQUFBLElBQUEsQ0FBQSxLQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLElBQUEsRUFBQSxDQUFBLENBQUEsRUFBQSxJQUFBLEVBQUEsQ0FBQSxJQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLE9BQUEsQ0FBQSxRQUFBLENBQUEsUUFBQSxDQUFBLFFBQUEsQ0FBQSxVQUFBLENBQUEsT0FBQSxDQUFBLE9BQUEsQ0FBQSxLQUFBLENBQUEsS0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLEdBQUEsTUFBQSxFQUFBLE9BQUEsQ0FBQSxFQUFBLFVBQUEsQ0FBQSxDQUFBLENBQUEsbUJBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxJQUFBLENBQUEsSUFBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxJQUFBLENBQUEsQ0FBQSxDQUFBLFFBQUEsQ0FBQSxDQUFBLENBQUEsY0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxxQkFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLElBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLElBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEdBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsVUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxHQUFBLENBQUEsSUFBQSxJQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsTUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLElBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxPQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxHQUFBLENBQUEsSUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEtBQUEsQ0FBQSxDQUFBLENBQUEsS0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsR0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLFNBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsSUFBQSxJQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsTUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxNQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxPQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsTUFBQSxDQUFBLENBQUEsR0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLElBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsR0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLElBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEdBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLE9BQUEsQ0FBQSxFQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxHQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxJQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxHQUFBLENBQUEsR0FBQSxDQUFBLEVBQUEsSUFBQSxDQUFBLENBQUEsT0FBQSxDQUFBLEVBQUEsUUFBQSxFQUFBLE9BQUEsQ0FBQSxFQUFBLFVBQUEsRUFBQSxDQUFBLENBQUEsaUJBQUEsQ0FBQSxDQUFBLElBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEdBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsY0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsR0FBQSxNQUFBLEdBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsU0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEdBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsT0FBQSxDQUFBLEVBQUEsVUFBQSxFQUFBLENBQUEsQ0FBQSx1QkFBQSxDQUFBLENBQUEsQ0FBQSxHQUFBLENBQUEsQ0FBQSxVQUFBLENBQUEsR0FBQSxDQUFBLENBQUEsQ0FBQSxJQUFBLENBQUEsSUFBQSxFQUFBLENBQUEsTUFBQSxDQUFBLENBQUEsQ0FBQSxPQUFBLE9BQUEsQ0FBQSxNQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLElBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxLQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsSUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxPQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxHQUFBLENBQUEsSUFBQSxDQUFBLENBQUEsT0FBQSxlQUFBLEVBQUEsVUFBQSxDQUFBLGVBQUEsQ0FBQSxTQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLE9BQUEsQ0FBQSxDQUFBLEtBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsSUFBQSxDQUFBLGlCQUFBLENBQUEsQ0FBQSxDQUFBLEtBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLFVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLElBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEseUNBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxJQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLEtBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxHQUFBLEVBQUEsRUFBQSxHQUFBLENBQUEsSUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxJQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsR0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsT0FBQSxPQUFBLENBQUEsT0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLElBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxHQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEs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QSxDQUFHLENBQUMsRUFDbENBLENBQUFBLENBQUksa0JBQUEsQ0FBcUIsQ0FBQSxDQUFHLENBQzlCLFFBQVMsQ0FBQSxDQUFJLENBQUEsQ0FBRyxDQUFBLENBQUlBLENBQUFBLENBQUksa0JBQUEsQ0FBb0IsQ0FBQSxFQUFBLENBQUtELENBQUFBLENBQUcsQ0FBQSxDQUFFLEVBQUcsQ0FBQyxDQUFBLENBQzFELElBQUEsSUFBUyxDQUFBLENBQUlDLEVBQUksa0JBQUEsQ0FBb0IsQ0FBQSxDQUFJLENBQUEsQ0FBRyxDQUFBLEVBQUEsQ0FBS0QsRUFBRyxDQUFBLENBQUUsQ0FBQSxDQUFHLENBQUMsRUFDNUQsQ0FFQUEsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxDQUFBLENBQ1QsUUFBUyxDQUFBLENBQUksQ0FBQSxDQUFHLENBQUEsQ0FBSSxFQUFBLENBQUksSUFBS0EsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQSxHQUFNLENBQUEsRUFBSyxJQUFNLENBQUMsQ0FBQSxDQUN2REEsQ0FBQUEsQ0FBRyxDQUFBLENBQUUsQ0FBQSxDQUFHLENBQUMsQ0FBQSxDQUNUQSxDQUFBQSxDQUFHLEVBQUUsQ0FBQSxDQUFHLENBQUMsQ0FBQSxDQUNUQSxDQUFBQSxDQUFHLEtBQUssQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsQ0FBQSxDQUFFLEVBQUcsQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsQ0FBQSxDQUFFLENBQUEsQ0FBRyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxFQUFFLENBQUEsQ0FBRyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxFQUFFLENBQUEsQ0FBRyxDQUFDLENBQUEsQ0FFVEEsQ0FBQUEsQ0FBRyxLQUFLLENBQUMsQ0FBQSxDQUNUQSxDQUFBQSxDQUFHLEVBQUEsQ0FBRyxDQUFDLENBQUEsQ0FDUEEsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsSUFBQSxDQUFLLENBQUMsRUFDVEEsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxDQUFBLENBR1RBLEVBQUcsRUFBQSxDQUFHLENBQUMsQ0FBQSxDQUNQQSxDQUFBQSxDQUFHLEtBQUssQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsSUFBQSxDQUFLQyxFQUFJLE9BQUEsQ0FBU0EsQ0FBQUEsQ0FBSSxRQUFBLENBQVVBLENBQUFBLENBQUksT0FBU0EsQ0FBQUEsQ0FBSSxRQUFRLENBQUEsQ0FFNURELENBQUFBLENBQUcsR0FBRyxDQUFDLENBQUEsQ0FDUEEsQ0FBQUEsQ0FBRyxDQUFBLENBQUUsQ0FBQSxDQUFHLENBQUMsQ0FBQSxDQUNUQSxDQUFBQSxDQUFHLEVBQUUsQ0FBQSxDQUFHLENBQUMsQ0FBQSxDQUNUQSxDQUFBQSxDQUFHLEVBQUUsQ0FBQSxDQUFHLENBQUMsQ0FBQSxDQUVUQSxDQUFBQSxDQUFHLEdBQUcsQ0FBQyxDQUFBLENBQ1BBLENBQUFBLENBQUcsQ0FBQSxDQUFFN0ksQ0FBQUEsQ0FBTyxFQUFFLENBQUEsQ0FDZDZJLENBQUFBLENBQUcsRUFBRTVJLENBQUFBLENBQVEsRUFBRSxDQUFBLENBQ2Y0SSxDQUFBQSxDQUFHLEtBQUssQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsQ0FBQSxDQUFFLEVBQUcsQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsQ0FBQSxDQUFFLENBQUEsQ0FBRyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxFQUFFLENBQUEsQ0FBRyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxLQUFLLENBQUMsQ0FBQSxDQUVUQSxDQUFBQSxDQUFHLElBQUEsQ0FBSyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxFQUNUQSxDQUFBQSxDQUFHLElBQUEsQ0FBSyxDQUFDLENBQUEsQ0FHVEEsRUFBRyxJQUFBLENBQUssQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsR0FBRyxDQUFDLENBQUEsQ0FDUEEsQ0FBQUEsQ0FBRyxFQUFBLENBQUcsQ0FBQyxDQUFBLENBQ1BBLENBQUFBLENBQUcsRUFBQSxDQUFHLENBQUMsQ0FB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QSxDQUFHLENBQUUsU0FBQSxDQUFXLEVBQUssQ0FBQyxDQUFBLENBQ3pELElBQU1nVCxDQUFBQSxDQUFTaFQsRUFBUSxhQUFBLENBQWdCNFcsRUFBQUEsQ0FBUW5DLEVBQUFBLENBQy9DLE1BQU0rQyxFQUFJLFNBQUEsQ0FBVSxNQUFNeEUsQ0FBQUEsQ0FBT3dFLENBQUFBLENBQUtwWCxFQUFRSixDQUFPLENBQUMsRUFDeEQsQ0FBQSxNQUFTTSxFQUFHLENBQ1YsSUFBTW5ELENBQUFBLENBQVFtRCxDQUFBQSxDQUNSb1gsRUFBSXZhLENBQUFBLENBQU0sS0FBQSxFQUFTQSxDQUFBQSxDQUFNLE9BQUEsRUFBVyxPQUFPbUQsQ0FBQUEsRUFBSyxlQUFlLENBQUEsQ0FDckUsTUFBTWtYLEVBQUksVUFBQSxDQUFXRSxDQUFDLEVBQ3hCLENBQUEsT0FBRSxDQUNBL1ksWUFBQUEsQ0FBSSxJQUFBLEdBQ04sQ0FDRixDQUNGLENBQUMsQ0FBQSIsImZpbGUiOiJhcHAuY2pzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gU2hpbSBnbG9iYWxzIGluIGNqcyBidW5kbGVcbi8vIFRoZXJlJ3MgYSB3ZWlyZCBidWcgdGhhdCBlc2J1aWxkIHdpbGwgYWx3YXlzIGluamVjdCBpbXBvcnRNZXRhVXJsXG4vLyBpZiB3ZSBleHBvcnQgaXQgYXMgYGNvbnN0IGltcG9ydE1ldGFVcmwgPSAuLi4gX19maWxlbmFtZSAuLi5gXG4vLyBCdXQgdXNpbmcgYSBmdW5jdGlvbiB3aWxsIG5vdCBjYXVzZSB0aGlzIGlzc3VlXG5cbmNvbnN0IGdldEltcG9ydE1ldGFVcmwgPSAoKSA9PiBcbiAgdHlwZW9mIGRvY3VtZW50ID09PSBcInVuZGVmaW5lZFwiIFxuICAgID8gbmV3IFVSTChgZmlsZToke19fZmlsZW5hbWV9YCkuaHJlZiBcbiAgICA6IChkb2N1bWVudC5jdXJyZW50U2NyaXB0ICYmIGRvY3VtZW50LmN1cnJlbnRTY3JpcHQudGFnTmFtZS50b1VwcGVyQ2FzZSgpID09PSAnU0NSSVBUJykgXG4gICAgICA/IGRvY3VtZW50LmN1cnJlbnRTY3JpcHQuc3JjIFxuICAgICAgOiBuZXcgVVJMKFwibWFpbi5qc1wiLCBkb2N1bWVudC5iYXNlVVJJKS5ocmVmO1xuXG5leHBvcnQgY29uc3QgaW1wb3J0TWV0YVVybCA9IC8qIEBfX1BVUkVfXyAqLyBnZXRJbXBvcnRNZXRhVXJsKClcbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMjUuXG5cbmV4cG9ydCB0eXBlIEVudlBhcnNlcjxUPiA9ICh2YWx1ZTogdW5rbm93bikgPT4gVDtcblxuZXhwb3J0IGZ1bmN0aW9uIHBlbnY8VD4obmFtZTogc3RyaW5nLCBwYXJzZXI6IEVudlBhcnNlcjxUPiwgZGVmYXVsdFZhbHVlOiBUKTogVDtcbmV4cG9ydCBmdW5jdGlvbiBwZW52PFQ+KG5hbWU6IHN0cmluZywgcGFyc2VyOiBFbnZQYXJzZXI8VD4sIGRlZmF1bHRWYWx1ZT86IFQpOiBUIHwgdW5kZWZpbmVkO1xuZXhwb3J0IGZ1bmN0aW9uIHBlbnY8VD4obmFtZTogc3RyaW5nLCBwYXJzZXI6IEVudlBhcnNlcjxUPiwgZGVmYXVsdFZhbHVlPzogVCk6IFQgfCB1bmRlZmluZWQge1xuICB0cnkge1xuICAgIHJldHVybiBwYXJzZXIocHJvY2Vzcy5lbnZbbmFtZV0pO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZGVmYXVsdFZhbHVlO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAxLzMwLlxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VOdW1iZXIoeDogdW5rbm93bik6IG51bWJlciB7XG4gIGlmICh0eXBlb2YgeCA9PT0gXCJudW1iZXJcIikge1xuICAgIHJldHVybiB4O1xuICB9XG4gIGNvbnN0IG51bSA9IE51bWJlcih4KTtcbiAgaWYgKE51bWJlci5pc05hTihudW0pKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBWYWx1ZSAke3h9IGlzIG5vdCBhIHZhbGlkIG51bWJlcmApO1xuICB9XG4gIHJldHVybiBudW07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVN0cmluZyh4OiB1bmtub3duKTogc3RyaW5nIHtcbiAgaWYgKHR5cGVvZiB4ID09PSBcInN0cmluZ1wiKSByZXR1cm4geDtcbiAgcmV0dXJuIFN0cmluZyh4KTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDkuXG5cbmltcG9ydCB7IGNyZWF0ZVJlcXVpcmUgfSBmcm9tIFwibW9kdWxlXCI7XG5pbXBvcnQgeyBkaXJuYW1lLCBqb2luIH0gZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IHBlbnYgfSBmcm9tIFwiLi9lbnZcIjtcbmltcG9ydCB7IHBhcnNlTnVtYmVyIH0gZnJvbSBcIi4vcGFyc2VyXCI7XG5cbmNvbnN0IHJlcXVpcmUgPSBjcmVhdGVSZXF1aXJlKGltcG9ydC5tZXRhLnVybCk7XG5jb25zdCBlbnYgPSBwcm9jZXNzLmVudjtcblxuZXhwb3J0IGNvbnN0IHB1cExvZ0xldmVsID0gcGVudihcIlBVUF9MT0dfTEVWRUxcIiwgcGFyc2VOdW1iZXIsIDIpO1xuZXhwb3J0IGNvbnN0IHB1cFVzZUlubmVyUHJveHkgPSBlbnZbXCJQVVBfVVNFX0lOTkVSX1BST1hZXCJdID09PSBcIjFcIjtcbmV4cG9ydCBjb25zdCBwdXBEaXNhYmxlR1BVID0gZW52W1wiUFVQX0RJU0FCTEVfR1BVXCJdID09PSBcIjFcIjtcbmV4cG9ydCBjb25zdCBwdXBEaXNhYmxlSHdDb2RlYyA9IGVudltcIlBVUF9ESVNBQkxFX0hXX0NPREVDXCJdID09PSBcIjFcIjtcbmV4cG9ydCBjb25zdCBwdXBEZXRlcm1pbmlzdGljID0gZW52W1wiUFVQX0RFVEVSTUlOSVNUSUNcIl0gPT09IFwiMVwiO1xuXG5leHBvcnQgY29uc3QgcHVwUGtnUm9vdCA9IGRpcm5hbWUocmVxdWlyZS5yZXNvbHZlKFwicHVwLXJlY29yZGVyL3BhY2thZ2UuanNvblwiKSk7XG5leHBvcnQgY29uc3QgcHVwQXBwID0gam9pbihwdXBQa2dSb290LCBcImRpc3RcIiwgXCJhcHAuY2pzXCIpO1xuXG5leHBvcnQgY29uc3QgcHVwV2luZG93VG9sZXJhbnQgPSBlbnZbXCJQVVBfV0lORE9XX1RPTEVSQU5UXCJdID09PSBcIjFcIjtcbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDYuXG5cbmltcG9ydCB0eXBlIHsgQ2hpbGRQcm9jZXNzIH0gZnJvbSBcImNoaWxkX3Byb2Nlc3NcIjtcbmltcG9ydCB7IExvZyB9IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQgeyBBVl9MT0dfRVJST1IsIEFWX0xPR19XQVJOSU5HIH0gZnJvbSBcIm5vZGUtYXYvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBwdXBMb2dMZXZlbCB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIExvZ2dlckxpa2Uge1xuICBkZWJ1Zz8odGhpczogdm9pZCwgLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQ7XG5cbiAgaW5mbz8odGhpczogdm9pZCwgLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQ7XG5cbiAgd2Fybj8odGhpczogdm9pZCwgLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQ7XG5cbiAgZXJyb3I/KHRoaXM6IHZvaWQsIC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkO1xufVxuXG5jb25zdCBERUJVRyA9IFwiPHB1cEBkZWJ1Zz5cIjtcbmNvbnN0IElORk8gPSBcIjxwdXBAaW5mbz5cIjtcbmNvbnN0IFdBUk4gPSBcIjxwdXBAd2Fybj5cIjtcbmNvbnN0IEVSUk9SID0gXCI8cHVwQGVycm9yPlwiO1xuY29uc3QgRkFUQUwgPSBcIjxwdXBAZmF0YWw+XCI7XG5cbmZ1bmN0aW9uIHN0YWNrSG9vayh0YXJnZXQ6IEZ1bmN0aW9uLCBfY29udGV4dDogQ2xhc3NNZXRob2REZWNvcmF0b3JDb250ZXh0KSB7XG4gIHJldHVybiBmdW5jdGlvbiAodGhpczogTG9nZ2VyLCAuLi5tZXNzYWdlczogdW5rbm93bltdKSB7XG4gICAgY29uc3QgcHJvY2Vzc2VkID0gbWVzc2FnZXMubWFwKChtc2cpID0+IHtcbiAgICAgIHJldHVybiBtc2cgaW5zdGFuY2VvZiBFcnJvciA/IChtc2cuc3RhY2sgPz8gU3RyaW5nKG1zZykpIDogbXNnO1xuICAgIH0pO1xuICAgIHJldHVybiB0YXJnZXQuY2FsbCh0aGlzLCAuLi5wcm9jZXNzZWQpO1xuICB9O1xufVxuXG5leHBvcnQgY2xhc3MgTG9nZ2VyIGltcGxlbWVudHMgTG9nZ2VyTGlrZSB7XG4gIHByaXZhdGUgX2ltcGw/OiBMb2dnZXJMaWtlO1xuXG4gIGdldCBsZXZlbCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9sZXZlbDtcbiAgfVxuXG4gIHNldCBsZXZlbCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fbGV2ZWwgPSB2YWx1ZTtcbiAgICB0aGlzLmltcGwgPSB0aGlzLl9pbXBsID8/IGNvbnNvbGU7XG4gIH1cblxuICBnZXQgaW1wbCgpOiBMb2dnZXJMaWtlIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5faW1wbDtcbiAgfVxuXG4gIHNldCBpbXBsKHZhbHVlOiBMb2dnZXJMaWtlKSB7XG4gICAgY29uc3QgZGVidWcgPSB2YWx1ZS5kZWJ1ZyA/PyBjb25zb2xlLmRlYnVnO1xuICAgIGNvbnN0IGluZm8gPSB2YWx1ZS5pbmZvID8/IGNvbnNvbGUuaW5mbztcbiAgICBjb25zdCB3YXJuID0gdmFsdWUud2FybiA/PyBjb25zb2xlLndhcm47XG4gICAgY29uc3QgZXJyb3IgPSB2YWx1ZS5lcnJvciA/PyBjb25zb2xlLmVycm9yO1xuICAgIGNvbnN0IGx2ID0gdGhpcy5fbGV2ZWw7XG4gICAgdGhpcy5faW1wbCA9IHtcbiAgICAgIGRlYnVnOiBsdiA+PSAzID8gZGVidWcgOiB1bmRlZmluZWQsXG4gICAgICBpbmZvOiBsdiA+PSAyID8gaW5mbyA6IHVuZGVmaW5lZCxcbiAgICAgIHdhcm46IGx2ID49IDEgPyB3YXJuIDogdW5kZWZpbmVkLFxuICAgICAgZXJyb3I6IGx2ID49IDAgPyBlcnJvciA6IHVuZGVmaW5lZCxcbiAgICB9O1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfbGV2ZWw6IG51bWJlciA9IHB1cExvZ0xldmVsKSB7XG4gICAgdGhpcy5pbXBsID0gY29uc29sZTtcbiAgfVxuXG4gIEBzdGFja0hvb2tcbiAgZGVidWcoLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQge1xuICAgIHRoaXMuaW1wbD8uZGVidWc/LihERUJVRywgLi4ubWVzc2FnZXMpO1xuICB9XG5cbiAgQHN0YWNrSG9va1xuICBpbmZvKC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkIHtcbiAgICB0aGlzLmltcGw/LmluZm8/LihJTkZPLCAuLi5tZXNzYWdlcyk7XG4gIH1cblxuICBAc3RhY2tIb29rXG4gIHdhcm4oLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQge1xuICAgIHRoaXMuaW1wbD8ud2Fybj8uKFdBUk4sIC4uLm1lc3NhZ2VzKTtcbiAgfVxuXG4gIEBzdGFja0hvb2tcbiAgZXJyb3IoLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQge1xuICAgIHRoaXMuaW1wbD8uZXJyb3I/LihFUlJPUiwgLi4ubWVzc2FnZXMpO1xuICB9XG5cbiAgQHN0YWNrSG9va1xuICBmYXRhbCguLi5tZXNzYWdlczogdW5rbm93bltdKTogdm9pZCB7XG4gICAgdGhpcy5pbXBsPy5lcnJvcj8uKEZBVEFMLCAuLi5tZXNzYWdlcyk7XG4gICAgcHJvY2Vzcy5leGl0KDEpO1xuICB9XG5cbiAgcHJpdmF0ZSBkaXNwYXRjaChtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICBjb25zdCBtc2cgPSBtZXNzYWdlLnRyaW1FbmQoKTtcbiAgICBpZiAobXNnLnN0YXJ0c1dpdGgoREVCVUcpKSB7XG4gICAgICB0aGlzLmRlYnVnKG1zZy5zbGljZShERUJVRy5sZW5ndGggKyAxKSk7XG4gICAgfSBlbHNlIGlmIChtc2cuc3RhcnRzV2l0aChJTkZPKSkge1xuICAgICAgdGhpcy5pbmZvKG1zZy5zbGljZShJTkZPLmxlbmd0aCArIDEpKTtcbiAgICB9IGVsc2UgaWYgKG1zZy5zdGFydHNXaXRoKFdBUk4pKSB7XG4gICAgICB0aGlzLndhcm4obXNnLnNsaWNlKFdBUk4ubGVuZ3RoICsgMSkpO1xuICAgIH0gZWxzZSBpZiAobXNnLnN0YXJ0c1dpdGgoRVJST1IpKSB7XG4gICAgICB0aGlzLmVycm9yKG1zZy5zbGljZShFUlJPUi5sZW5ndGggKyAxKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaW5mbyhtc2cpO1xuICAgIH1cbiAgfVxuXG4gIGF0dGFjaChwcm9jOiBDaGlsZFByb2Nlc3MsIG5hbWU6IHN0cmluZykge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLmRlYnVnKGAke25hbWV9LmF0dGFjaGApO1xuICAgICAgbGV0IGZhdGFsOiBzdHJpbmcgPSBcIlwiO1xuICAgICAgY29uc3QgZGlzcGF0Y2ggPSAoZGF0YTogQnVmZmVyKSA9PiB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBkYXRhLnRvU3RyaW5nKCk7XG4gICAgICAgIGlmIChtZXNzYWdlLnN0YXJ0c1dpdGgoRkFUQUwpKSB7XG4gICAgICAgICAgZmF0YWwgKz0gbWVzc2FnZS5zbGljZShGQVRBTC5sZW5ndGggKyAxKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmRpc3BhdGNoKG1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgcHJvYy5zdGRlcnI/Lm9uKFwiZGF0YVwiLCBkaXNwYXRjaCk7XG4gICAgICBwcm9jLnN0ZG91dD8ub24oXCJkYXRhXCIsIGRpc3BhdGNoKTtcbiAgICAgIHByb2NcbiAgICAgICAgLm9uKFwiZXJyb3JcIiwgKGVycikgPT4ge1xuICAgICAgICAgIGZhdGFsICs9IGVyci5tZXNzYWdlO1xuICAgICAgICAgIHByb2Mua2lsbCgpO1xuICAgICAgICB9KVxuICAgICAgICAub25jZShcImNsb3NlXCIsIChjb2RlLCBzaWduYWwpID0+IHtcbiAgICAgICAgICBpZiAoY29kZSB8fCBzaWduYWwgfHwgZmF0YWwpIHtcbiAgICAgICAgICAgIGZhdGFsIHx8PSBgY29tbWFuZCBmYWlsZWQ6ICR7cHJvYy5zcGF3bmFyZ3Muam9pbihcIiBcIil9YDtcbiAgICAgICAgICAgIHRoaXMuZGVidWcoYCR7bmFtZX0uY2xvc2VgLCB7IGNvZGUsIHNpZ25hbCwgZmF0YWwgfSk7XG4gICAgICAgICAgICByZWplY3QobmV3IEVycm9yKGZhdGFsKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZGVidWcoYCR7bmFtZX0uY2xvc2VgKTtcbiAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC5vbihcInVuaGFuZGxlZFJlamVjdGlvblwiLCAocmVhc29uKSA9PiB7XG4gICAgICAgICAgdGhpcy5lcnJvcihgJHtuYW1lfS51bmhhbmRsZWRgLCByZWFzb24pO1xuICAgICAgICB9KVxuICAgICAgICAub24oXCJ1bmNhdWdodEV4Y2VwdGlvbk1vbml0b3JcIiwgKGVycikgPT4ge1xuICAgICAgICAgIHRoaXMuZXJyb3IoYCR7bmFtZX0udW5oYW5kbGVkYCwgZXJyKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn1cblxuY29uc3QgbG9nZ2VyID0gbmV3IExvZ2dlcigpO1xuXG4vLyBSb3V0ZSBmZm1wZWcgbmF0aXZlIGxvZ3MgdGhyb3VnaCBwdXAncyBsb2dnZXIuXG5Mb2cuc2V0Q2FsbGJhY2soKGxldmVsLCBtZXNzYWdlKSA9PiB7XG4gIGNvbnN0IG1zZyA9IG1lc3NhZ2UudHJpbUVuZCgpO1xuICBpZiAoIW1zZykgcmV0dXJuO1xuICBpZiAobGV2ZWwgPD0gQVZfTE9HX0VSUk9SKSBsb2dnZXIuZXJyb3IobXNnKTtcbiAgZWxzZSBpZiAobGV2ZWwgPD0gQVZfTE9HX1dBUk5JTkcpIGxvZ2dlci53YXJuKG1zZyk7XG59KTtcblxuZXhwb3J0IHsgbG9nZ2VyIH07XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzIxLlxuXG5pbXBvcnQgeyBhcHAsIGNyYXNoUmVwb3J0ZXIgfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IG1rZGlyU3luYyB9IGZyb20gXCJmc1wiO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi9sb2dnaW5nXCI7XG5cbmNvbnN0IFRBRyA9IFwiW0NyYXNoXVwiO1xuXG5leHBvcnQgZnVuY3Rpb24gc3RhcnRFbGVjdHJvbkNyYXNoUmVwb3J0ZXIoKSB7XG4gIGNvbnN0IGR1bXBEaXIgPSBqb2luKGFwcC5nZXRQYXRoKFwidXNlckRhdGFcIiksIFwiY3Jhc2hlc1wiKTtcbiAgbWtkaXJTeW5jKGR1bXBEaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICBhcHAuc2V0UGF0aChcImNyYXNoRHVtcHNcIiwgZHVtcERpcik7XG4gIGNyYXNoUmVwb3J0ZXIuc3RhcnQoe1xuICAgIHByb2R1Y3ROYW1lOiBcInB1cC1yZWNvcmRlclwiLFxuICAgIHVwbG9hZFRvU2VydmVyOiBmYWxzZSxcbiAgICBjb21wcmVzczogZmFsc2UsXG4gICAgaWdub3JlU3lzdGVtQ3Jhc2hIYW5kbGVyOiB0cnVlLFxuICB9KTtcbiAgbG9nZ2VyLmRlYnVnKFRBRywgXCJzZXQgZHVtcCB0b1wiLCBkdW1wRGlyKTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMjQuXG5cbmV4cG9ydCBmdW5jdGlvbiBub2VycjxGbiBleHRlbmRzICguLi5hcmdzOiBhbnlbXSkgPT4gYW55LCBEPihcbiAgZm46IEZuLFxuICBkZWZhdWx0VmFsdWU6IEQsXG4pOiAoLi4uYXJnczogUGFyYW1ldGVyczxGbj4pID0+IFJldHVyblR5cGU8Rm4+IHwgRCB7XG4gIHJldHVybiAoLi4uYXJncykgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXQgPSBmbiguLi5hcmdzKTtcbiAgICAgIGlmIChyZXQgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgIHJldHVybiByZXQuY2F0Y2goKCkgPT4gZGVmYXVsdFZhbHVlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXQ7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gZGVmYXVsdFZhbHVlO1xuICAgIH1cbiAgfTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDEvMzAuXG5cbmltcG9ydCB7IHNwYXduLCB0eXBlIENoaWxkUHJvY2VzcywgdHlwZSBTcGF3bk9wdGlvbnMgfSBmcm9tIFwiY2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0IHRyZWVLaWxsIGZyb20gXCJ0cmVlLWtpbGxcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuL2xvZ2dpbmdcIjtcblxuZXhwb3J0IGNvbnN0IFBVUF9BUkdTX0tFWSA9IFwiLS1wdXAtcHJpdi1hcmdzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJncygpIHtcbiAgY29uc3QgYXJndiA9IHByb2Nlc3MuYXJndjtcbiAgbGV0IHByaXYgPSBhcmd2LmZpbmQoKGFyZykgPT4gYXJnLnN0YXJ0c1dpdGgoUFVQX0FSR1NfS0VZKSk7XG4gIGlmICghcHJpdikge1xuICAgIGxvZ2dlci5kZWJ1ZyhcInByb2Nhcmd2XCIsIGFyZ3YpO1xuICAgIHJldHVybiBwcm9jZXNzLmFyZ3Y7XG4gIH1cbiAgY29uc3QgYXJncyA9IFtcImV4ZWNcIiwgLi4uYXJndi5zbGljZSgtMSldO1xuICBwcml2ID0gQnVmZmVyLmZyb20ocHJpdi5zcGxpdChcIj1cIilbMV0hLCBcImJhc2U2NFwiKS50b1N0cmluZygpO1xuICBhcmdzLnB1c2goLi4uSlNPTi5wYXJzZShwcml2KSk7XG4gIGxvZ2dlci5kZWJ1ZyhcInB1cGFyZ3NcIiwgYXJncyk7XG4gIHJldHVybiBhcmdzO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFByb2Nlc3NIYW5kbGUge1xuICBwcm9jZXNzOiBDaGlsZFByb2Nlc3M7XG4gIHdhaXQ6IFByb21pc2U8dm9pZD47XG4gIGdldCBraWxsZWQoKTogYm9vbGVhbjtcbiAga2lsbCgpOiB2b2lkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXhlYyhjbWQ6IHN0cmluZywgb3B0aW9ucz86IFNwYXduT3B0aW9ucyk6IFByb2Nlc3NIYW5kbGUge1xuICBjb25zdCBwYXJ0cyA9IGNtZC5zcGxpdChcIiBcIikuZmlsdGVyKChzKSA9PiBzLmxlbmd0aCk7XG4gIGNvbnN0IFtjb21tYW5kLCAuLi5hcmdzXSA9IHBhcnRzO1xuICBpZiAoIWNvbW1hbmQpIHRocm93IG5ldyBFcnJvcihcImVtcHR5IGNvbW1hbmRcIik7XG4gIGNvbnN0IHByb2MgPSBzcGF3bihjb21tYW5kLCBhcmdzLCB7XG4gICAgc3RkaW86IFwiaW5oZXJpdFwiLFxuICAgIC4uLm9wdGlvbnMsXG4gIH0pO1xuICBsZXQga2lsbGVkID0gZmFsc2U7XG4gIHJldHVybiB7XG4gICAgcHJvY2VzczogcHJvYyxcbiAgICB3YWl0OiBsb2dnZXIuYXR0YWNoKHByb2MsIGNvbW1hbmQpLFxuICAgIGdldCBraWxsZWQoKSB7XG4gICAgICByZXR1cm4ga2lsbGVkO1xuICAgIH0sXG4gICAga2lsbCgpIHtcbiAgICAgIGlmIChraWxsZWQpIHJldHVybjtcbiAgICAgIGtpbGxlZCA9IHRydWU7XG4gICAgICBjb25zdCBwaWQgPSBwcm9jLnBpZDtcbiAgICAgIGlmIChwaWQpIHRyZWVLaWxsKHBpZCwgXCJTSUdLSUxMXCIpO1xuICAgICAgZWxzZSBwcm9jLmtpbGwoXCJTSUdLSUxMXCIpO1xuICAgIH0sXG4gIH07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA2LlxuXG5pbXBvcnQgeiBmcm9tIFwiem9kXCI7XG5pbXBvcnQge1xuICBwdXBEZXRlcm1pbmlzdGljLFxuICBwdXBEaXNhYmxlR1BVLFxuICBwdXBEaXNhYmxlSHdDb2RlYyxcbiAgcHVwVXNlSW5uZXJQcm94eSxcbiAgcHVwV2luZG93VG9sZXJhbnQsXG59IGZyb20gXCIuLi9iYXNlL2NvbnN0YW50c1wiO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9XSURUSCA9IDE5MjA7XG5leHBvcnQgY29uc3QgREVGQVVMVF9IRUlHSFQgPSAxMDgwO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfRlBTID0gMzA7XG5leHBvcnQgY29uc3QgREVGQVVMVF9EVVJBVElPTiA9IDU7XG5leHBvcnQgY29uc3QgREVGQVVMVF9PVVRfRklMRSA9IFwib3V0cHV0Lm1wNFwiO1xuXG5leHBvcnQgY29uc3QgUmVuZGVyU2NoZW1hID0gei5vYmplY3Qoe1xuICBkdXJhdGlvbjogei5udW1iZXIoKS5kZXNjcmliZShcIkR1cmF0aW9uIGluIHNlY29uZHNcIiksXG4gIHdpZHRoOiB6Lm51bWJlcigpLmRlc2NyaWJlKFwiVmlkZW8gd2lkdGhcIiksXG4gIGhlaWdodDogei5udW1iZXIoKS5kZXNjcmliZShcIlZpZGVvIGhlaWdodFwiKSxcbiAgZnBzOiB6Lm51bWJlcigpLmRlc2NyaWJlKFwiRnJhbWVzIHBlciBzZWNvbmRcIiksXG4gIHdpdGhBdWRpbzogei5ib29sZWFuKCkuZGVzY3JpYmUoXCJDYXB0dXJlIGFuZCBlbmNvZGUgYXVkaW9cIiksXG4gIG91dEZpbGU6IHouc3RyaW5nKCkuZGVzY3JpYmUoXCJPdXRwdXQgbXA0IGZpbGUgcGF0aFwiKSxcbiAgdXNlSW5uZXJQcm94eTogei5ib29sZWFuKCkuZGVzY3JpYmUoXCJVc2UgYmlsaWJpbGkgaW5uZXIgcHJveHkgZm9yIHJlc291cmNlIGFjY2Vzc1wiKSxcbiAgZGV0ZXJtaW5pc3RpYzogei5ib29sZWFuKCkuZGVzY3JpYmUoXCJSZW5kZXIgYnkgZnJhbWUgcmF0aGVyIHRoYW4gcmVjb3JkaW5nXCIpLFxuICBkaXNhYmxlR3B1OiB6LmJvb2xlYW4oKS5kZXNjcmliZShcIkRpc2FibGUgR1BVIHJlbmRlcmluZywgbWF5IHJlZHVjZSBwZXJmb3JtYW5jZSBidXQgaW5jcmVhc2Ugc3RhYmlsaXR5XCIpLFxuICBkaXNhYmxlSHdDb2RlYzogei5ib29sZWFuKCkuZGVzY3JpYmUoXCJEaXNhYmxlIGhhcmR3YXJlIHZpZGVvIGVuY29kZXIgKE5WRU5DL1ZpZGVvVG9vbGJveCksIHVzZSBzb2Z0d2FyZSB4MjY1XCIpLFxuICB3aW5kb3dUb2xlcmFudDogei5ib29sZWFuKCkuZGVzY3JpYmUoXCJGYWxsIGJhY2sgdG8gZG9tLXJlYWR5IGlmIHdhcm11cCBsb2FkIHRpbWVzIG91dFwiKSxcbn0pO1xuXG5leHBvcnQgdHlwZSBSZW5kZXJPcHRpb25zID0gei5pbmZlcjx0eXBlb2YgUmVuZGVyU2NoZW1hPjtcblxuZXhwb3J0IGludGVyZmFjZSBSZW5kZXJSZXN1bHQge1xuICBvcHRpb25zOiBSZW5kZXJPcHRpb25zO1xuICB3cml0dGVuOiBudW1iZXI7XG4gIGphbms6IG51bWJlcjtcbiAgb3V0RmlsZTogc3RyaW5nO1xufVxuXG5leHBvcnQgY29uc3QgZGVmYXVsdFJlbmRlck9wdGlvbnM6IFJlbmRlck9wdGlvbnMgPSB7XG4gIHdpZHRoOiBERUZBVUxUX1dJRFRILFxuICBoZWlnaHQ6IERFRkFVTFRfSEVJR0hULFxuICBmcHM6IERFRkFVTFRfRlBTLFxuICBkdXJhdGlvbjogREVGQVVMVF9EVVJBVElPTixcbiAgb3V0RmlsZTogREVGQVVMVF9PVVRfRklMRSxcbiAgd2l0aEF1ZGlvOiBmYWxzZSxcbiAgdXNlSW5uZXJQcm94eTogcHVwVXNlSW5uZXJQcm94eSxcbiAgZGV0ZXJtaW5pc3RpYzogcHVwRGV0ZXJtaW5pc3RpYyxcbiAgZGlzYWJsZUdwdTogcHVwRGlzYWJsZUdQVSxcbiAgZGlzYWJsZUh3Q29kZWM6IHB1cERpc2FibGVId0NvZGVjLFxuICB3aW5kb3dUb2xlcmFudDogcHVwV2luZG93VG9sZXJhbnQsXG59O1xuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wOS5cblxuaW1wb3J0IHsgcHJvZ3JhbSB9IGZyb20gXCJjb21tYW5kZXJcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuL2Jhc2UvbG9nZ2luZ1wiO1xuaW1wb3J0IHsgbm9lcnIgfSBmcm9tIFwiLi9iYXNlL25vZXJyXCI7XG5pbXBvcnQgeyBwYXJzZU51bWJlciB9IGZyb20gXCIuL2Jhc2UvcGFyc2VyXCI7XG5pbXBvcnQgeyBwYXJncyB9IGZyb20gXCIuL2Jhc2UvcHJvY2Vzc1wiO1xuaW1wb3J0IHsgUmVuZGVyU2NoZW1hLCB0eXBlIFJlbmRlck9wdGlvbnMgfSBmcm9tIFwiLi9yZW5kZXJlci9zY2hlbWFcIjtcblxuZXhwb3J0IGludGVyZmFjZSBDTElPcHRpb25zIHtcbiAgbmFtZTogc3RyaW5nO1xuICBkZWZhdWx0czogUmVuZGVyT3B0aW9ucztcbiAgcnVuOiAoc291cmNlOiBzdHJpbmcsIG9wdGlvbnM6IFJlbmRlck9wdGlvbnMpID0+IFByb21pc2U8dW5rbm93bj47XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBtYWtlQ0xJKG9wdGlvbnM6IENMSU9wdGlvbnMpIHtcbiAgY29uc3Qgc2hhcGUgPSBSZW5kZXJTY2hlbWEuc2hhcGU7XG4gIGNvbnN0IGQgPSBvcHRpb25zLmRlZmF1bHRzO1xuICBwcm9ncmFtXG4gICAgLm5hbWUob3B0aW9ucy5uYW1lKVxuICAgIC5hcmd1bWVudChcIjxzb3VyY2U+XCIsIFwiZmlsZTovLywgaHR0cChzKTovLywgb3IgZGF0YTogVVJJXCIpXG4gICAgLm9wdGlvbihcIi1XLCAtLXdpZHRoIDxudW1iZXI+XCIsIHNoYXBlLndpZHRoLmRlc2NyaXB0aW9uLCBgJHtkLndpZHRofWApXG4gICAgLm9wdGlvbihcIi1ILCAtLWhlaWdodCA8bnVtYmVyPlwiLCBzaGFwZS5oZWlnaHQuZGVzY3JpcHRpb24sIGAke2QuaGVpZ2h0fWApXG4gICAgLm9wdGlvbihcIi1mLCAtLWZwcyA8bnVtYmVyPlwiLCBzaGFwZS5mcHMuZGVzY3JpcHRpb24sIGAke2QuZnBzfWApXG4gICAgLm9wdGlvbihcIi10LCAtLWR1cmF0aW9uIDxudW1iZXI+XCIsIHNoYXBlLmR1cmF0aW9uLmRlc2NyaXB0aW9uLCBgJHtkLmR1cmF0aW9ufWApXG4gICAgLm9wdGlvbihcIi1vLCAtLW91dC1maWxlIDxwYXRoPlwiLCBzaGFwZS5vdXRGaWxlLmRlc2NyaXB0aW9uLCBkLm91dEZpbGUpXG4gICAgLm9wdGlvbihcIi1hLCAtLXdpdGgtYXVkaW9cIiwgc2hhcGUud2l0aEF1ZGlvLmRlc2NyaXB0aW9uLCBkLndpdGhBdWRpbylcbiAgICAub3B0aW9uKFwiLWQsIC0tZGV0ZXJtaW5pc3RpY1wiLCBzaGFwZS5kZXRlcm1pbmlzdGljLmRlc2NyaXB0aW9uLCBkLmRldGVybWluaXN0aWMpXG4gICAgLm9wdGlvbihcIi0tdXNlLWlubmVyLXByb3h5XCIsIHNoYXBlLnVzZUlubmVyUHJveHkuZGVzY3JpcHRpb24sIGQudXNlSW5uZXJQcm94eSlcbiAgICAub3B0aW9uKFwiLS1kaXNhYmxlLWdwdVwiLCBzaGFwZS5kaXNhYmxlR3B1LmRlc2NyaXB0aW9uLCBkLmRpc2FibGVHcHUpXG4gICAgLm9wdGlvbihcIi0tZGlzYWJsZS1ody1jb2RlY1wiLCBzaGFwZS5kaXNhYmxlSHdDb2RlYy5kZXNjcmlwdGlvbiwgZC5kaXNhYmxlSHdDb2RlYylcbiAgICAub3B0aW9uKFwiLS13aW5kb3ctdG9sZXJhbnRcIiwgc2hhcGUud2luZG93VG9sZXJhbnQuZGVzY3JpcHRpb24sIGQud2luZG93VG9sZXJhbnQpXG4gICAgLmFjdGlvbihhc3luYyAoc291cmNlOiBzdHJpbmcsIG9wdHMpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IG9wdGlvbnMucnVuKHNvdXJjZSwge1xuICAgICAgICAgIHdpZHRoOiBub2VycihwYXJzZU51bWJlciwgZC53aWR0aCkob3B0cy53aWR0aCksXG4gICAgICAgICAgaGVpZ2h0OiBub2VycihwYXJzZU51bWJlciwgZC5oZWlnaHQpKG9wdHMuaGVpZ2h0KSxcbiAgICAgICAgICBmcHM6IG5vZXJyKHBhcnNlTnVtYmVyLCBkLmZwcykob3B0cy5mcHMpLFxuICAgICAgICAgIGR1cmF0aW9uOiBub2VycihwYXJzZU51bWJlciwgZC5kdXJhdGlvbikob3B0cy5kdXJhdGlvbiksXG4gICAgICAgICAgb3V0RmlsZTogb3B0cy5vdXRGaWxlID8/IGQub3V0RmlsZSxcbiAgICAgICAgICB3aXRoQXVkaW86IG9wdHMud2l0aEF1ZGlvID8/IGQud2l0aEF1ZGlvLFxuICAgICAgICAgIHVzZUlubmVyUHJveHk6IG9wdHMudXNlSW5uZXJQcm94eSA/PyBkLnVzZUlubmVyUHJveHksXG4gICAgICAgICAgZGV0ZXJtaW5pc3RpYzogb3B0cy5kZXRlcm1pbmlzdGljID8/IGQuZGV0ZXJtaW5pc3RpYyxcbiAgICAgICAgICBkaXNhYmxlR3B1OiBvcHRzLmRpc2FibGVHcHUgPz8gZC5kaXNhYmxlR3B1LFxuICAgICAgICAgIGRpc2FibGVId0NvZGVjOiBvcHRzLmRpc2FibGVId0NvZGVjID8/IGQuZGlzYWJsZUh3Q29kZWMsXG4gICAgICAgICAgd2luZG93VG9sZXJhbnQ6IG9wdHMud2luZG93VG9sZXJhbnQgPz8gZC53aW5kb3dUb2xlcmFudCxcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGxvZ2dlci5mYXRhbChlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgYXdhaXQgcHJvZ3JhbS5wYXJzZUFzeW5jKHBhcmdzKCkpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8wMS5cblxuaW1wb3J0IHR5cGUgeyBDaGlsZFByb2Nlc3MgfSBmcm9tIFwiY2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSBcImV2ZW50c1wiO1xuXG5leHBvcnQgY29uc3QgZW51bSBJcGNNc2dUeXBlIHtcbiAgUFJPR1JFU1MgPSBcInByb2dyZXNzXCIsXG4gIERPTkUgPSBcImRvbmVcIixcbiAgRVJST1IgPSBcImVycm9yXCIsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSXBjRG9uZVBheWxvYWQge1xuICB3cml0dGVuOiBudW1iZXI7XG4gIGphbms6IG51bWJlcjtcbiAgb3V0RmlsZTogc3RyaW5nO1xufVxuXG50eXBlIE1zZyA9XG4gIHwgeyB0eXBlOiBJcGNNc2dUeXBlLlBST0dSRVNTOyB2YWx1ZTogbnVtYmVyIH1cbiAgfCB7IHR5cGU6IElwY01zZ1R5cGUuRE9ORTsgcGF5bG9hZDogSXBjRG9uZVBheWxvYWQgfVxuICB8IHsgdHlwZTogSXBjTXNnVHlwZS5FUlJPUjsgZXJyb3I6IHN0cmluZyB9O1xuXG5leHBvcnQgY2xhc3MgSXBjV3JpdGVyIHtcbiAgd3JpdGVQcm9ncmVzcyh2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5zZW5kKHsgdHlwZTogSXBjTXNnVHlwZS5QUk9HUkVTUywgdmFsdWUgfSk7XG4gIH1cblxuICB3cml0ZUVycm9yKGVycm9yOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5zZW5kKHsgdHlwZTogSXBjTXNnVHlwZS5FUlJPUiwgZXJyb3IgfSk7XG4gIH1cblxuICB3cml0ZURvbmUocGF5bG9hZDogSXBjRG9uZVBheWxvYWQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5zZW5kKHsgdHlwZTogSXBjTXNnVHlwZS5ET05FLCBwYXlsb2FkIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzZW5kKG1zZzogTXNnKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICBpZiAoIXByb2Nlc3Muc2VuZCkgcmV0dXJuIHJlc29sdmUoKTtcbiAgICAgIHByb2Nlc3Muc2VuZChtc2csICgpID0+IHJlc29sdmUoKSk7XG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIElwY1JlYWRlciBleHRlbmRzIEV2ZW50RW1pdHRlcjx7XG4gIHByb2dyZXNzOiBbdmFsdWU6IG51bWJlcl07XG4gIG1lc3NhZ2U6IFttc2c6IE1zZ107XG4gIGRvbmU6IFtwYXlsb2FkOiBJcGNEb25lUGF5bG9hZF07XG4gIGVycm9yOiBbZXJyb3I6IEVycm9yXTtcbiAgY2xvc2U6IFtdO1xufT4ge1xuICBjb25zdHJ1Y3RvcihjaGlsZDogQ2hpbGRQcm9jZXNzKSB7XG4gICAgc3VwZXIoKTtcbiAgICBjaGlsZC5vbihcIm1lc3NhZ2VcIiwgKHJhdykgPT4ge1xuICAgICAgY29uc3QgbXNnID0gcmF3IGFzIE1zZztcbiAgICAgIHRoaXMuZW1pdChcIm1lc3NhZ2VcIiwgbXNnKTtcbiAgICAgIHN3aXRjaCAobXNnLnR5cGUpIHtcbiAgICAgICAgY2FzZSBJcGNNc2dUeXBlLlBST0dSRVNTOlxuICAgICAgICAgIHRoaXMuZW1pdChcInByb2dyZXNzXCIsIG1zZy52YWx1ZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgSXBjTXNnVHlwZS5ET05FOlxuICAgICAgICAgIHRoaXMuZW1pdChcImRvbmVcIiwgbXNnLnBheWxvYWQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIElwY01zZ1R5cGUuRVJST1I6XG4gICAgICAgICAgdGhpcy5lbWl0KFwiZXJyb3JcIiwgbmV3IEVycm9yKG1zZy5lcnJvcikpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGNoaWxkLm9uY2UoXCJleGl0XCIsICgpID0+IHRoaXMuZW1pdChcImNsb3NlXCIpKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wOS5cblxuaW1wb3J0IHsgaXBjTWFpbiwgdHlwZSBEZWJ1Z2dlciwgdHlwZSBTaXplIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5cbmV4cG9ydCBjb25zdCBGUkFNRV9TWU5DX01BUktFUl9XSURUSCA9IDMyO1xuZXhwb3J0IGNvbnN0IEZSQU1FX1NZTkNfTUFSS0VSX0hFSUdIVCA9IDE7XG5leHBvcnQgY29uc3QgU1RFR09fVElDS19DSEFOTkVMID0gXCJzdGVnby10aWNrXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFN0ZWdvSFRNTCh0YXJnZXRVUkw6IHN0cmluZywgc2l6ZTogU2l6ZSk6IHN0cmluZyB7XG4gIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gc2l6ZTtcbiAgcmV0dXJuIGA8IURPQ1RZUEUgaHRtbD5cbjxodG1sPlxuPGhlYWQ+XG4gIDxtZXRhIGNoYXJzZXQ9XCJVVEYtOFwiPlxuICA8c3R5bGU+XG4gICAgKiB7IG1hcmdpbjogMDsgcGFkZGluZzogMDsgYm94LXNpemluZzogYm9yZGVyLWJveDsgfVxuICAgIGh0bWwsIGJvZHkgeyB3aWR0aDogJHt3aWR0aH1weDsgaGVpZ2h0OiAke2hlaWdodCArIDF9cHg7IG92ZXJmbG93OiBoaWRkZW47IH1cbiAgICAjdGFyZ2V0IHsgXG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7IFxuICAgICAgdG9wOiAwOyBcbiAgICAgIGxlZnQ6IDA7IFxuICAgICAgd2lkdGg6ICR7d2lkdGh9cHg7IFxuICAgICAgaGVpZ2h0OiAke2hlaWdodH1weDsgXG4gICAgICBib3JkZXI6IG5vbmU7IFxuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgfVxuICAgICNzdGVnbyB7IFxuICAgICAgcG9zaXRpb246IGFic29sdXRlOyBcbiAgICAgIHRvcDogJHtoZWlnaHR9cHg7IFxuICAgICAgbGVmdDogMDsgXG4gICAgICB3aWR0aDogJHt3aWR0aH1weDsgXG4gICAgICBoZWlnaHQ6IDFweDsgXG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIGltYWdlLXJlbmRlcmluZzogcGl4ZWxhdGVkO1xuICAgIH1cbiAgPC9zdHlsZT5cbjwvaGVhZD5cbjxib2R5PlxuICA8aWZyYW1lIGlkPVwidGFyZ2V0XCIgc3JjPVwiJHt0YXJnZXRVUkx9XCI+PC9pZnJhbWU+XG4gIDxjYW52YXMgaWQ9XCJzdGVnb1wiIHdpZHRoPVwiJHt3aWR0aH1cIiBoZWlnaHQ9XCIxXCI+PC9jYW52YXM+XG4gIDxzY3JpcHQ+XG4gICAgKGZ1bmN0aW9uKCkge1xuICAgICAgY29uc3QgeyBpcGNSZW5kZXJlciB9ID0gcmVxdWlyZSgnZWxlY3Ryb24nKTtcbiAgICAgIGNvbnN0IFdJRFRIID0gJHt3aWR0aH07XG4gICAgICBjb25zdCBNQVJLRVJfV0lEVEggPSAke0ZSQU1FX1NZTkNfTUFSS0VSX1dJRFRIfTtcbiAgICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdGVnbycpO1xuICAgICAgY29uc3QgY3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJywgeyB3aWxsUmVhZEZyZXF1ZW50bHk6IHRydWUgfSk7XG4gICAgICBsZXQgc3RhcnRUaW1lID0gbnVsbDtcbiAgICAgIGxldCByYWZJZCA9IG51bGw7XG5cbiAgICAgIGZ1bmN0aW9uIGVuY29kZVRpbWVzdGFtcCh0aW1lc3RhbXBNcykge1xuICAgICAgICBjb25zdCBpbWFnZURhdGEgPSBjdHguY3JlYXRlSW1hZ2VEYXRhKFdJRFRILCAxKTtcbiAgICAgICAgY29uc3QgZGF0YSA9IGltYWdlRGF0YS5kYXRhO1xuXG4gICAgICAgIGNvbnN0IHRpbWVzdGFtcEludCA9IE1hdGguZmxvb3IodGltZXN0YW1wTXMpID4+PiAwO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgTUFSS0VSX1dJRFRIOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBiaXQgPSAodGltZXN0YW1wSW50ID4+PiAoTUFSS0VSX1dJRFRIIC0gMSAtIGkpKSAmIDE7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSBiaXQgPyAyNTUgOiAwO1xuICAgICAgICAgIGNvbnN0IGlkeCA9IGkgKiA0O1xuICAgICAgICAgIGRhdGFbaWR4XSA9IHZhbHVlO1xuICAgICAgICAgIGRhdGFbaWR4ICsgMV0gPSB2YWx1ZTtcbiAgICAgICAgICBkYXRhW2lkeCArIDJdID0gdmFsdWU7XG4gICAgICAgICAgZGF0YVtpZHggKyAzXSA9IDI1NTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAobGV0IGkgPSBNQVJLRVJfV0lEVEg7IGkgPCBXSURUSDsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgaWR4ID0gaSAqIDQ7XG4gICAgICAgICAgZGF0YVtpZHhdID0gMDtcbiAgICAgICAgICBkYXRhW2lkeCArIDFdID0gMDtcbiAgICAgICAgICBkYXRhW2lkeCArIDJdID0gMDtcbiAgICAgICAgICBkYXRhW2lkeCArIDNdID0gMjU1O1xuICAgICAgICB9XG5cbiAgICAgICAgY3R4LnB1dEltYWdlRGF0YShpbWFnZURhdGEsIDAsIDApO1xuICAgICAgICBpcGNSZW5kZXJlci5zZW5kKCcke1NURUdPX1RJQ0tfQ0hBTk5FTH0nKTtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gdXBkYXRlTG9vcCgpIHtcbiAgICAgICAgaWYgKHN0YXJ0VGltZSA9PT0gbnVsbCkgcmV0dXJuO1xuICAgICAgICBjb25zdCBlbGFwc2VkID0gcGVyZm9ybWFuY2Uubm93KCkgLSBzdGFydFRpbWU7XG4gICAgICAgIGVuY29kZVRpbWVzdGFtcChlbGFwc2VkKTtcbiAgICAgICAgcmFmSWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodXBkYXRlTG9vcCk7XG4gICAgICB9XG5cbiAgICAgIHdpbmRvdy5fX3B1cF9zdGFydF9zdGVnb19fID0gKCkgPT4ge1xuICAgICAgICBzdGFydFRpbWUgPSBwZXJmb3JtYW5jZS5ub3coKTtcbiAgICAgICAgZW5jb2RlVGltZXN0YW1wKDApO1xuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodXBkYXRlTG9vcCk7XG4gICAgICB9O1xuXG4gICAgICB3aW5kb3cuX19wdXBfZHJhd19zdGVnb19fID0gKG1zKSA9PiB7XG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiBlbmNvZGVUaW1lc3RhbXAobXMpKTtcbiAgICAgIH07XG5cbiAgICAgIHdpbmRvdy5fX3B1cF9zdG9wX3N0ZWdvX18gPSAoKSA9PiB7XG4gICAgICAgIGlmIChyYWZJZCAhPT0gbnVsbCkge1xuICAgICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHJhZklkKTtcbiAgICAgICAgICByYWZJZCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSkoKTtcbiAgPC9zY3JpcHQ+XG48L2JvZHk+XG48L2h0bWw+YDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlY29kZVN0ZWdvKGJpdG1hcDogQnVmZmVyLCBzaXplOiBTaXplKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSBzaXplO1xuICBpZiAod2lkdGggPCBGUkFNRV9TWU5DX01BUktFUl9XSURUSCB8fCBoZWlnaHQgPCAyKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IG1hcmtlclJvdyA9IGhlaWdodCAtIDE7XG5cbiAgbGV0IHRpbWVzdGFtcCA9IDA7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgRlJBTUVfU1lOQ19NQVJLRVJfV0lEVEg7IGkrKykge1xuICAgIGNvbnN0IHBpeGVsSWR4ID0gKG1hcmtlclJvdyAqIHdpZHRoICsgaSkgKiA0O1xuICAgIGNvbnN0IHIgPSBiaXRtYXBbcGl4ZWxJZHhdID8/IDA7XG4gICAgY29uc3QgYml0ID0gciA+IDEyNyA/IDEgOiAwO1xuICAgIHRpbWVzdGFtcCA9ICh0aW1lc3RhbXAgPDwgMSkgfCBiaXQ7XG4gIH1cblxuICB0aW1lc3RhbXAgPSB0aW1lc3RhbXAgPj4+IDA7XG5cbiAgaWYgKCFOdW1iZXIuaXNGaW5pdGUodGltZXN0YW1wKSB8fCB0aW1lc3RhbXAgPCAwIHx8IHRpbWVzdGFtcCA+IDFlNykge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICByZXR1cm4gdGltZXN0YW1wO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc3RhcnRTdGVnbyhjZHA6IERlYnVnZ2VyKSB7XG4gIGF3YWl0IGNkcC5zZW5kQ29tbWFuZChcIlJ1bnRpbWUuZXZhbHVhdGVcIiwgeyBleHByZXNzaW9uOiBgX19wdXBfc3RhcnRfc3RlZ29fXygpYCB9KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHN3YXBCdWZmZXIoY2RwOiBEZWJ1Z2dlciwgZXhwZWN0ZWQ6IG51bWJlcikge1xuICBjb25zdCBzd2FwcGVkID0gbmV3IFByb21pc2U8dm9pZD4oKHIpID0+IGlwY01haW4ub25jZShTVEVHT19USUNLX0NIQU5ORUwsICgpID0+IHIoKSkpO1xuICBhd2FpdCBjZHAuc2VuZENvbW1hbmQoXCJSdW50aW1lLmV2YWx1YXRlXCIsIHsgZXhwcmVzc2lvbjogYF9fcHVwX2RyYXdfc3RlZ29fXygke2V4cGVjdGVkfSlgIH0pO1xuICBhd2FpdCBzd2FwcGVkO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc3RvcFN0ZWdvKGNkcDogRGVidWdnZXIpIHtcbiAgYXdhaXQgY2RwLnNlbmRDb21tYW5kKFwiUnVudGltZS5ldmFsdWF0ZVwiLCB7IGV4cHJlc3Npb246IGBfX3B1cF9zdG9wX3N0ZWdvX18oKWAgfSk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzAxLlxuXG5pbXBvcnQgdHlwZSB7IFNpemUgfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IHByb3RvY29sIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBidWlsZFN0ZWdvSFRNTCB9IGZyb20gXCIuL3N0ZWdvXCI7XG5cbmNvbnN0IFBVUF9TQ0hFTUUgPSBcInB1cFwiO1xuXG4vLyBNdXN0IGJlIGNhbGxlZCBzeW5jaHJvbm91c2x5IGJlZm9yZSBhcHAgaXMgcmVhZHkuXG5wcm90b2NvbC5yZWdpc3RlclNjaGVtZXNBc1ByaXZpbGVnZWQoW1xuICB7XG4gICAgc2NoZW1lOiBQVVBfU0NIRU1FLFxuICAgIHByaXZpbGVnZXM6IHtcbiAgICAgIHN0YW5kYXJkOiB0cnVlLFxuICAgICAgc2VjdXJlOiB0cnVlLFxuICAgICAgYnlwYXNzQ1NQOiB0cnVlLFxuICAgICAgYWxsb3dTZXJ2aWNlV29ya2VyczogdHJ1ZSxcbiAgICAgIHN1cHBvcnRGZXRjaEFQSTogdHJ1ZSxcbiAgICAgIGNvcnNFbmFibGVkOiB0cnVlLFxuICAgICAgc3RyZWFtOiB0cnVlLFxuICAgICAgY29kZUNhY2hlOiB0cnVlLFxuICAgIH0sXG4gIH0sXG5dKTtcblxuLy8gTXVzdCBiZSBjYWxsZWQgYWZ0ZXIgYXBwIGlzIHJlYWR5LlxuZXhwb3J0IGZ1bmN0aW9uIHNldHVwUHVwUHJvdG9jb2woKTogdm9pZCB7XG4gIHByb3RvY29sLmhhbmRsZShQVVBfU0NIRU1FLCAocmVxKSA9PiB7XG4gICAgY29uc3QgdXJsID0gbmV3IFVSTChyZXEudXJsKTtcbiAgICBjb25zdCBzcmMgPSB1cmwuc2VhcmNoUGFyYW1zLmdldChcInNyY1wiKSA/PyBcIlwiO1xuICAgIGNvbnN0IHdpZHRoID0gcGFyc2VJbnQodXJsLnNlYXJjaFBhcmFtcy5nZXQoXCJ3XCIpID8/IFwiMFwiLCAxMCk7XG4gICAgY29uc3QgaGVpZ2h0ID0gcGFyc2VJbnQodXJsLnNlYXJjaFBhcmFtcy5nZXQoXCJoXCIpID8/IFwiMFwiLCAxMCk7XG4gICAgY29uc3QgaHRtbCA9IGJ1aWxkU3RlZ29IVE1MKHNyYywgeyB3aWR0aCwgaGVpZ2h0IH0pO1xuICAgIHJldHVybiBuZXcgUmVzcG9uc2UoaHRtbCwgeyBoZWFkZXJzOiB7IFwiY29udGVudC10eXBlXCI6IFwidGV4dC9odG1sXCIgfSB9KTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTdGVnb1VSTChzcmM6IHN0cmluZywgc2l6ZTogU2l6ZSk6IHN0cmluZyB7XG4gIGNvbnN0IHVybCA9IG5ldyBVUkwoYCR7UFVQX1NDSEVNRX06Ly9zdGVnb2ApO1xuICB1cmwuc2VhcmNoUGFyYW1zLnNldChcInNyY1wiLCBzcmMpO1xuICB1cmwuc2VhcmNoUGFyYW1zLnNldChcIndcIiwgU3RyaW5nKHNpemUud2lkdGgpKTtcbiAgdXJsLnNlYXJjaFBhcmFtcy5zZXQoXCJoXCIsIFN0cmluZyhzaXplLmhlaWdodCkpO1xuICByZXR1cm4gdXJsLnRvU3RyaW5nKCk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAzLzEzLlxuXG5pbXBvcnQgdHlwZSB7IERlYnVnZ2VyLCBTaXplIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5cbmNvbnN0IEFEVkFOQ0VfVElNRU9VVF9NUyA9IDMwXzAwMDtcblxuZXhwb3J0IGZ1bmN0aW9uIGFkdmFuY2VWaXJ0dWFsVGltZShjZHA6IERlYnVnZ2VyLCBidWRnZXQ6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNkcC5vZmYoXCJtZXNzYWdlXCIsIGhhbmRsZXIpO1xuICAgICAgcmVqZWN0KG5ldyBFcnJvcihgYWR2YW5jZVZpcnR1YWxUaW1lIHRpbWVkIG91dCBhZnRlciAke0FEVkFOQ0VfVElNRU9VVF9NU31tc2ApKTtcbiAgICB9LCBBRFZBTkNFX1RJTUVPVVRfTVMpO1xuXG4gICAgY29uc3QgaGFuZGxlciA9IChfOiBFbGVjdHJvbi5FdmVudCwgbWV0aG9kOiBzdHJpbmcpID0+IHtcbiAgICAgIGlmIChtZXRob2QgPT09IFwiRW11bGF0aW9uLnZpcnR1YWxUaW1lQnVkZ2V0RXhwaXJlZFwiKSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgY2RwLm9mZihcIm1lc3NhZ2VcIiwgaGFuZGxlcik7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNkcC5vbihcIm1lc3NhZ2VcIiwgaGFuZGxlcik7XG4gICAgY2RwLnNlbmRDb21tYW5kKFwiRW11bGF0aW9uLnNldFZpcnR1YWxUaW1lUG9saWN5XCIsIHtcbiAgICAgIHBvbGljeTogXCJhZHZhbmNlXCIsXG4gICAgICBidWRnZXQsXG4gICAgfSk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGF1c2VWaXJ0dWFsVGltZShjZHA6IERlYnVnZ2VyKTogUHJvbWlzZTx2b2lkPiB7XG4gIHJldHVybiBjZHAuc2VuZENvbW1hbmQoXCJFbXVsYXRpb24uc2V0VmlydHVhbFRpbWVQb2xpY3lcIiwgeyBwb2xpY3k6IFwicGF1c2VcIiB9KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc2l6ZURyYXdhYmxlKGNkcDogRGVidWdnZXIsIHNpemU6IFNpemUpIHtcbiAgYXdhaXQgY2RwLnNlbmRDb21tYW5kKFwiRW11bGF0aW9uLnNldERldmljZU1ldHJpY3NPdmVycmlkZVwiLCB7XG4gICAgLi4uc2l6ZSxcbiAgICBkZXZpY2VTY2FsZUZhY3RvcjogMSxcbiAgICBtb2JpbGU6IGZhbHNlLFxuICB9KTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDEvMzAuXG5cbmludGVyZmFjZSBRdWV1ZUVudHJ5IHtcbiAgcnVuOiBWb2lkRnVuY3Rpb247XG4gIHJlamVjdDogKHJlYXNvbjogdW5rbm93bikgPT4gdm9pZDtcbiAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG59XG5cbmV4cG9ydCBjbGFzcyBDb25jdXJyZW5jeUxpbWl0ZXIge1xuICBwcml2YXRlIF9hY3RpdmUgPSAwO1xuICBwcml2YXRlIF9xdWV1ZTogUXVldWVFbnRyeVtdID0gW107XG4gIHByaXZhdGUgX3NpZ25hbHMgPSBuZXcgV2Vha1NldDxBYm9ydFNpZ25hbD4oKTtcbiAgcHJpdmF0ZSBfcmVzb2x2ZT86IFZvaWRGdW5jdGlvbjtcblxuICBjb25zdHJ1Y3RvcihyZWFkb25seSBtYXhDb25jdXJyZW5jeTogbnVtYmVyKSB7fVxuXG4gIGdldCBhY3RpdmUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fYWN0aXZlO1xuICB9XG5cbiAgZ2V0IHBlbmRpbmcoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fcXVldWUubGVuZ3RoO1xuICB9XG5cbiAgZ2V0IHN0YXRzKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBhY3RpdmU6ICR7dGhpcy5hY3RpdmV9LCBwZW5kaW5nOiAke3RoaXMucGVuZGluZ31gO1xuICB9XG5cbiAgYXN5bmMgc2NoZWR1bGU8VD4oZm46ICgpID0+IFByb21pc2U8VD4sIHNpZ25hbD86IEFib3J0U2lnbmFsKTogUHJvbWlzZTxUPiB7XG4gICAgc2lnbmFsPy50aHJvd0lmQWJvcnRlZCgpO1xuXG4gICAgaWYgKHNpZ25hbCAmJiAhdGhpcy5fc2lnbmFscy5oYXMoc2lnbmFsKSkge1xuICAgICAgdGhpcy5fc2lnbmFscy5hZGQoc2lnbmFsKTtcbiAgICAgIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgKCkgPT4gdGhpcy5mbHVzaChzaWduYWwpLCB7IG9uY2U6IHRydWUgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPFQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMuX3F1ZXVlLnB1c2goe1xuICAgICAgICBydW46ICgpID0+IHtcbiAgICAgICAgICBpZiAoc2lnbmFsPy5hYm9ydGVkKSB7XG4gICAgICAgICAgICByZWplY3Qoc2lnbmFsLnJlYXNvbik7XG4gICAgICAgICAgICB0aGlzLm5leHQoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5fYWN0aXZlKys7XG4gICAgICAgICAgZm4oKVxuICAgICAgICAgICAgLnRoZW4oKHYpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5fYWN0aXZlLS07XG4gICAgICAgICAgICAgIHJlc29sdmUodik7XG4gICAgICAgICAgICAgIHRoaXMubmV4dCgpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLl9hY3RpdmUtLTtcbiAgICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgICAgICB0aGlzLm5leHQoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICByZWplY3QsXG4gICAgICAgIHNpZ25hbCxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5uZXh0KCk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBkcmFpbigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fYWN0aXZlID09PSAwICYmIHRoaXMucGVuZGluZyA9PT0gMCkgcmV0dXJuO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocikgPT4gKHRoaXMuX3Jlc29sdmUgPSByKSk7XG4gIH1cblxuICBwcml2YXRlIGZsdXNoKHNpZ25hbDogQWJvcnRTaWduYWwpIHtcbiAgICBjb25zdCBrZWVwOiBRdWV1ZUVudHJ5W10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIHRoaXMuX3F1ZXVlKSB7XG4gICAgICBpZiAoZW50cnkuc2lnbmFsID09PSBzaWduYWwpIHtcbiAgICAgICAgZW50cnkucmVqZWN0KHNpZ25hbC5yZWFzb24pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAga2VlcC5wdXNoKGVudHJ5KTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5fcXVldWUgPSBrZWVwO1xuICAgIHRoaXMubmV4dCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBuZXh0KCkge1xuICAgIGlmICh0aGlzLl9hY3RpdmUgPT09IDAgJiYgdGhpcy5wZW5kaW5nID09PSAwKSB7XG4gICAgICB0aGlzLl9yZXNvbHZlPy4oKTtcbiAgICAgIHRoaXMuX3Jlc29sdmUgPSB1bmRlZmluZWQ7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLl9hY3RpdmUgPCB0aGlzLm1heENvbmN1cnJlbmN5KSB7XG4gICAgICB0aGlzLl9xdWV1ZS5zaGlmdCgpPy5ydW4oKTtcbiAgICB9XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMTIuXG5cbmltcG9ydCB7IENvZGVjLCBDb2RlY0NvbnRleHQsIEZGbXBlZ0Vycm9yLCBGcmFtZSwgUGFja2V0LCBSYXRpb25hbCwgdHlwZSBTdHJlYW0gfSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHtcbiAgQVZfQ09ERUNfRkxBR19HTE9CQUxfSEVBREVSLFxuICBBVkVSUk9SX0VBR0FJTixcbiAgQVZFUlJPUl9FT0YsXG4gIHR5cGUgQVZDb2xvclJhbmdlLFxuICB0eXBlIEFWUGl4ZWxGb3JtYXQsXG59IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuaW1wb3J0IHR5cGUgeyBGb3JtYXRNdXhlciB9IGZyb20gXCIuL211eGVyXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmlkZW9DdHhPcHRpb25zIHtcbiAgY29kZWM6IENvZGVjO1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgZnBzOiBudW1iZXI7XG4gIGJpdHJhdGU6IG51bWJlcjtcbiAgcGl4ZWxGb3JtYXQ6IEFWUGl4ZWxGb3JtYXQ7XG4gIGNvZGVjVGFnPzogc3RyaW5nO1xuICBjb2xvclJhbmdlPzogQVZDb2xvclJhbmdlO1xuICBvcHRpb25zPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG9wZW5WaWRlb0N0eChvcHRzOiBWaWRlb0N0eE9wdGlvbnMsIGxhYmVsOiBzdHJpbmcpOiBQcm9taXNlPENvZGVjQ29udGV4dD4ge1xuICBjb25zdCBjdHggPSBuZXcgQ29kZWNDb250ZXh0KCk7XG4gIGN0eC5hbGxvY0NvbnRleHQzKG9wdHMuY29kZWMpO1xuICBjdHguY29kZWNJZCA9IG9wdHMuY29kZWMuaWQ7XG4gIGN0eC53aWR0aCA9IG9wdHMud2lkdGg7XG4gIGN0eC5oZWlnaHQgPSBvcHRzLmhlaWdodDtcbiAgY3R4LnBpeGVsRm9ybWF0ID0gb3B0cy5waXhlbEZvcm1hdDtcbiAgY3R4LnRpbWVCYXNlID0gbmV3IFJhdGlvbmFsKDEsIG9wdHMuZnBzKTtcbiAgY3R4LmZyYW1lcmF0ZSA9IG5ldyBSYXRpb25hbChvcHRzLmZwcywgMSk7XG4gIGN0eC5nb3BTaXplID0gb3B0cy5mcHMgKiAyO1xuICBjdHguYml0UmF0ZSA9IEJpZ0ludChvcHRzLmJpdHJhdGUpO1xuICBjdHguc2V0RmxhZ3MoQVZfQ09ERUNfRkxBR19HTE9CQUxfSEVBREVSKTtcbiAgaWYgKG9wdHMuY29kZWNUYWcpIGN0eC5jb2RlY1RhZyA9IG9wdHMuY29kZWNUYWc7XG4gIGlmIChvcHRzLmNvbG9yUmFuZ2UgIT09IHVuZGVmaW5lZCkgY3R4LmNvbG9yUmFuZ2UgPSBvcHRzLmNvbG9yUmFuZ2U7XG4gIGZvciAoY29uc3QgW2ssIHZdIG9mIE9iamVjdC5lbnRyaWVzKG9wdHMub3B0aW9ucyA/PyB7fSkpIGN0eC5zZXRPcHRpb24oaywgdik7XG4gIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCBjdHgub3BlbjIob3B0cy5jb2RlYywgbnVsbCksIGxhYmVsKTtcbiAgcmV0dXJuIGN0eDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ha2VGcmFtZSh3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlciwgcGl4Rm10OiBBVlBpeGVsRm9ybWF0KTogRnJhbWUge1xuICBjb25zdCBmcmFtZSA9IG5ldyBGcmFtZSgpO1xuICBmcmFtZS5hbGxvYygpO1xuICBmcmFtZS5mb3JtYXQgPSBwaXhGbXQ7XG4gIGZyYW1lLndpZHRoID0gd2lkdGg7XG4gIGZyYW1lLmhlaWdodCA9IGhlaWdodDtcbiAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGZyYW1lLmdldEJ1ZmZlcigwKSwgXCJmcmFtZS5nZXRCdWZmZXJcIik7XG4gIHJldHVybiBmcmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ha2VQYWNrZXQoKTogUGFja2V0IHtcbiAgY29uc3QgcGt0ID0gbmV3IFBhY2tldCgpO1xuICBwa3QuYWxsb2MoKTtcbiAgcmV0dXJuIHBrdDtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRyYWluUGFja2V0cyhjdHg6IENvZGVjQ29udGV4dCwgcGt0OiBQYWNrZXQsIHN0cmVhbTogU3RyZWFtLCBtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgd2hpbGUgKHRydWUpIHtcbiAgICBjb25zdCByID0gYXdhaXQgY3R4LnJlY2VpdmVQYWNrZXQocGt0KTtcbiAgICBpZiAociA9PT0gQVZFUlJPUl9FQUdBSU4gfHwgciA9PT0gQVZFUlJPUl9FT0YpIGJyZWFrO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihyLCBcInJlY2VpdmVQYWNrZXRcIik7XG4gICAgcGt0LnN0cmVhbUluZGV4ID0gc3RyZWFtLmluZGV4O1xuICAgIGlmIChwa3QuZHVyYXRpb24gPT09IDBuKSBwa3QuZHVyYXRpb24gPSAxbjtcbiAgICBwa3QucmVzY2FsZVRzKGN0eC50aW1lQmFzZSwgc3RyZWFtLnRpbWVCYXNlKTtcbiAgICBhd2FpdCBtdXhlci53cml0ZVBhY2tldChwa3QpO1xuICAgIHBrdC51bnJlZigpO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzAxLlxuXG5pbXBvcnQge1xuICBDb2RlYyxcbiAgQ29kZWNDb250ZXh0LFxuICBGRm1wZWdFcnJvcixcbiAgRmlsdGVyLFxuICBGaWx0ZXJDb250ZXh0LFxuICBGaWx0ZXJHcmFwaCxcbiAgRmlsdGVySW5PdXQsXG4gIEZyYW1lLFxuICB0eXBlIFBhY2tldCxcbiAgUmF0aW9uYWwsXG4gIHR5cGUgU3RyZWFtLFxufSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHtcbiAgQVZfQ0hBTk5FTF9MQVlPVVRfU1RFUkVPLFxuICBBVl9DT0RFQ19GTEFHX0dMT0JBTF9IRUFERVIsXG4gIEFWX1NBTVBMRV9GTVRfRkxULFxuICBBVl9TQU1QTEVfRk1UX0ZMVFAsXG4gIEFWRVJST1JfRUFHQUlOLFxuICBBVkVSUk9SX0VPRixcbiAgdHlwZSBGRkF1ZGlvRW5jb2Rlcixcbn0gZnJvbSBcIm5vZGUtYXYvY29uc3RhbnRzXCI7XG5pbXBvcnQgdHlwZSB7IEZvcm1hdE11eGVyIH0gZnJvbSBcIi4vbXV4ZXJcIjtcbmltcG9ydCB7IGRyYWluUGFja2V0cywgbWFrZVBhY2tldCB9IGZyb20gXCIuL21pc2NcIjtcblxuY29uc3QgU0FNUExFX0ZNVF9OQU1FOiBQYXJ0aWFsPFJlY29yZDxudW1iZXIsIHN0cmluZz4+ID0geyBbQVZfU0FNUExFX0ZNVF9GTFRdOiBcImZsdFwiLCBbQVZfU0FNUExFX0ZNVF9GTFRQXTogXCJmbHRwXCIgfTtcblxuZXhwb3J0IGludGVyZmFjZSBBdWRpb0VuY29kZXJPcHRpb25zIHtcbiAgb3V0U2FtcGxlUmF0ZTogbnVtYmVyO1xuICBvdXRTYW1wbGVGbXQ6IHR5cGVvZiBBVl9TQU1QTEVfRk1UX0ZMVCB8IHR5cGVvZiBBVl9TQU1QTEVfRk1UX0ZMVFA7XG4gIGNvZGVjTmFtZTogRkZBdWRpb0VuY29kZXI7XG4gIGdsb2JhbEhlYWRlcjogYm9vbGVhbjtcbiAgYml0cmF0ZTogbnVtYmVyO1xuICBtdXhlcjogRm9ybWF0TXV4ZXI7XG59XG5cbmV4cG9ydCBjbGFzcyBBdWRpb0VuY29kZXIgaW1wbGVtZW50cyBEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSBfY3R4OiBDb2RlY0NvbnRleHQ7XG4gIHByaXZhdGUgX3N0cmVhbTogU3RyZWFtO1xuICBwcml2YXRlIF9wa3Q6IFBhY2tldDtcbiAgcHJpdmF0ZSBfb3V0UmF0ZTogbnVtYmVyO1xuICBwcml2YXRlIF9vdXRGbXQ6IHR5cGVvZiBBVl9TQU1QTEVfRk1UX0ZMVCB8IHR5cGVvZiBBVl9TQU1QTEVfRk1UX0ZMVFA7XG4gIHByaXZhdGUgX2ZyYW1lU2l6ZTogbnVtYmVyO1xuICBwcml2YXRlIF9maWx0ZXJGcmFtZTogRnJhbWU7XG4gIHByaXZhdGUgX2dyYXBoPzogRmlsdGVyR3JhcGg7XG4gIHByaXZhdGUgX2J1ZlNyYz86IEZpbHRlckNvbnRleHQ7XG4gIHByaXZhdGUgX2J1ZlNpbms/OiBGaWx0ZXJDb250ZXh0O1xuICBwcml2YXRlIF9pblJhdGU/OiBudW1iZXI7XG4gIHByaXZhdGUgX3B0cyA9IDBuO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoY3R4OiBDb2RlY0NvbnRleHQsIHN0cmVhbTogU3RyZWFtLCBvdXRGbXQ6IHR5cGVvZiBBVl9TQU1QTEVfRk1UX0ZMVCB8IHR5cGVvZiBBVl9TQU1QTEVfRk1UX0ZMVFApIHtcbiAgICB0aGlzLl9jdHggPSBjdHg7XG4gICAgdGhpcy5fc3RyZWFtID0gc3RyZWFtO1xuICAgIHRoaXMuX291dFJhdGUgPSBjdHguc2FtcGxlUmF0ZTtcbiAgICB0aGlzLl9vdXRGbXQgPSBvdXRGbXQ7XG4gICAgdGhpcy5fZnJhbWVTaXplID0gY3R4LmZyYW1lU2l6ZTtcbiAgICB0aGlzLl9wa3QgPSBtYWtlUGFja2V0KCk7XG4gICAgdGhpcy5fZmlsdGVyRnJhbWUgPSBuZXcgRnJhbWUoKTtcbiAgICB0aGlzLl9maWx0ZXJGcmFtZS5hbGxvYygpO1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIGNyZWF0ZShvcHRzOiBBdWRpb0VuY29kZXJPcHRpb25zKTogUHJvbWlzZTxBdWRpb0VuY29kZXI+IHtcbiAgICBjb25zdCBjb2RlYyA9IENvZGVjLmZpbmRFbmNvZGVyQnlOYW1lKG9wdHMuY29kZWNOYW1lKTtcbiAgICBpZiAoIWNvZGVjKSB0aHJvdyBuZXcgRXJyb3IoYEF1ZGlvIGVuY29kZXIgbm90IGZvdW5kOiAke29wdHMuY29kZWNOYW1lfWApO1xuICAgIGNvbnN0IGN0eCA9IG5ldyBDb2RlY0NvbnRleHQoKTtcbiAgICBjdHguYWxsb2NDb250ZXh0Myhjb2RlYyk7XG4gICAgY3R4LmNvZGVjSWQgPSBjb2RlYy5pZDtcbiAgICBjdHguc2FtcGxlRm9ybWF0ID0gb3B0cy5vdXRTYW1wbGVGbXQ7XG4gICAgY3R4LnNhbXBsZVJhdGUgPSBvcHRzLm91dFNhbXBsZVJhdGU7XG4gICAgY3R4LmNoYW5uZWxMYXlvdXQgPSBBVl9DSEFOTkVMX0xBWU9VVF9TVEVSRU87XG4gICAgY3R4LnRpbWVCYXNlID0gbmV3IFJhdGlvbmFsKDEsIG9wdHMub3V0U2FtcGxlUmF0ZSk7XG4gICAgY3R4LmJpdFJhdGUgPSBCaWdJbnQob3B0cy5iaXRyYXRlKTtcbiAgICBpZiAob3B0cy5nbG9iYWxIZWFkZXIpIGN0eC5zZXRGbGFncyhBVl9DT0RFQ19GTEFHX0dMT0JBTF9IRUFERVIpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCBjdHgub3BlbjIoY29kZWMsIG51bGwpLCBcImF1ZGlvQ3R4Lm9wZW4yXCIpO1xuICAgIGNvbnN0IHN0cmVhbSA9IG9wdHMubXV4ZXIuYWRkU3RyZWFtKGN0eCk7XG4gICAgcmV0dXJuIG5ldyBBdWRpb0VuY29kZXIoY3R4LCBzdHJlYW0sIG9wdHMub3V0U2FtcGxlRm10KTtcbiAgfVxuXG4gIHNldElucHV0UmF0ZShpblNhbXBsZVJhdGU6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuX2dyYXBoPy5bU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgdGhpcy5faW5SYXRlID0gaW5TYW1wbGVSYXRlO1xuICAgIGNvbnN0IGdyYXBoID0gbmV3IEZpbHRlckdyYXBoKCk7XG4gICAgZ3JhcGguYWxsb2MoKTtcbiAgICBjb25zdCBhYnVmZmVyID0gRmlsdGVyLmdldEJ5TmFtZShcImFidWZmZXJcIikhO1xuICAgIGNvbnN0IGJ1ZlNyYyA9IGdyYXBoLmNyZWF0ZUZpbHRlcihcbiAgICAgIGFidWZmZXIsXG4gICAgICBcInNyY1wiLFxuICAgICAgYHNhbXBsZV9yYXRlPSR7aW5TYW1wbGVSYXRlfTpzYW1wbGVfZm10PWZsdDpjaGFubmVsX2xheW91dD1zdGVyZW86dGltZV9iYXNlPTEvJHtpblNhbXBsZVJhdGV9YCxcbiAgICApO1xuICAgIGlmICghYnVmU3JjKSB0aHJvdyBuZXcgRXJyb3IoXCJGYWlsZWQgdG8gY3JlYXRlIGFidWZmZXJcIik7XG4gICAgY29uc3QgYWJ1ZmZlcnNpbmsgPSBGaWx0ZXIuZ2V0QnlOYW1lKFwiYWJ1ZmZlcnNpbmtcIikhO1xuICAgIGNvbnN0IGJ1ZlNpbmsgPSBncmFwaC5jcmVhdGVGaWx0ZXIoYWJ1ZmZlcnNpbmssIFwic2lua1wiKTtcbiAgICBpZiAoIWJ1ZlNpbmspIHRocm93IG5ldyBFcnJvcihcIkZhaWxlZCB0byBjcmVhdGUgYWJ1ZmZlcnNpbmtcIik7XG4gICAgY29uc3QgZm10TmFtZSA9IFNBTVBMRV9GTVRfTkFNRVt0aGlzLl9vdXRGbXRdID8/IFwiZmx0XCI7XG4gICAgY29uc3QgZmlsdGVyRGVzYyA9IGBhZm9ybWF0PXNhbXBsZV9mbXRzPSR7Zm10TmFtZX06c2FtcGxlX3JhdGVzPSR7dGhpcy5fb3V0UmF0ZX06Y2hhbm5lbF9sYXlvdXRzPXN0ZXJlbyxhc2V0bnNhbXBsZXM9bj0ke3RoaXMuX2ZyYW1lU2l6ZX06cD0xYDtcbiAgICBjb25zdCBvdXRwdXRzID0gRmlsdGVySW5PdXQuY3JlYXRlTGlzdChbeyBuYW1lOiBcImluXCIsIGZpbHRlckN0eDogYnVmU3JjLCBwYWRJZHg6IDAgfV0pO1xuICAgIGNvbnN0IGlucHV0cyA9IEZpbHRlckluT3V0LmNyZWF0ZUxpc3QoW3sgbmFtZTogXCJvdXRcIiwgZmlsdGVyQ3R4OiBidWZTaW5rLCBwYWRJZHg6IDAgfV0pO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihncmFwaC5wYXJzZVB0cihmaWx0ZXJEZXNjLCBpbnB1dHMsIG91dHB1dHMpLCBcImdyYXBoLnBhcnNlUHRyXCIpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihncmFwaC5jb25maWdTeW5jKCksIFwiZ3JhcGguY29uZmlnXCIpO1xuICAgIHRoaXMuX2dyYXBoID0gZ3JhcGg7XG4gICAgdGhpcy5fYnVmU3JjID0gYnVmU3JjO1xuICAgIHRoaXMuX2J1ZlNpbmsgPSBidWZTaW5rO1xuICB9XG5cbiAgYXN5bmMgZW5jb2RlKHBjbTogQnVmZmVyLCBtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuX2J1ZlNyYyB8fCAhdGhpcy5faW5SYXRlKSByZXR1cm47XG4gICAgY29uc3Qgc3JjID0gbmV3IEZsb2F0MzJBcnJheShwY20uYnVmZmVyLCBwY20uYnl0ZU9mZnNldCwgcGNtLmJ5dGVMZW5ndGggLyA0KTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNyYy5sZW5ndGg7IGkrKykgaWYgKCFpc0Zpbml0ZShzcmNbaV0hKSkgc3JjW2ldID0gMDtcbiAgICBjb25zdCBuU2FtcGxlcyA9IHNyYy5sZW5ndGggPj4gMTtcbiAgICB1c2luZyBmcmFtZSA9IEZyYW1lLmZyb21BdWRpb0J1ZmZlcihCdWZmZXIuZnJvbShzcmMuYnVmZmVyLCBzcmMuYnl0ZU9mZnNldCwgc3JjLmJ5dGVMZW5ndGgpLCB7XG4gICAgICBuYlNhbXBsZXM6IG5TYW1wbGVzLFxuICAgICAgZm9ybWF0OiBBVl9TQU1QTEVfRk1UX0ZMVCxcbiAgICAgIHNhbXBsZVJhdGU6IHRoaXMuX2luUmF0ZSxcbiAgICAgIGNoYW5uZWxMYXlvdXQ6IEFWX0NIQU5ORUxfTEFZT1VUX1NURVJFTyxcbiAgICAgIHB0czogdGhpcy5fcHRzLFxuICAgICAgdGltZUJhc2U6IHsgbnVtOiAxLCBkZW46IHRoaXMuX2luUmF0ZSB9LFxuICAgIH0pO1xuICAgIHRoaXMuX3B0cyArPSBCaWdJbnQoblNhbXBsZXMpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCB0aGlzLl9idWZTcmMuYnVmZmVyc3JjQWRkRnJhbWUoZnJhbWUpLCBcImJ1ZmZlcnNyY0FkZEZyYW1lXCIpO1xuICAgIGF3YWl0IHRoaXMuZHJhaW4obXV4ZXIpO1xuICB9XG5cbiAgYXN5bmMgZmx1c2gobXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX2J1ZlNyYykge1xuICAgICAgYXdhaXQgdGhpcy5fYnVmU3JjLmJ1ZmZlcnNyY0FkZEZyYW1lKG51bGwpO1xuICAgICAgYXdhaXQgdGhpcy5kcmFpbihtdXhlcik7XG4gICAgfVxuICAgIGF3YWl0IHRoaXMuX2N0eC5zZW5kRnJhbWUobnVsbCk7XG4gICAgYXdhaXQgdGhpcy5kcmFpbkNvZGVjKG11eGVyKTtcbiAgfVxuXG4gIFtTeW1ib2wuZGlzcG9zZV0oKTogdm9pZCB7XG4gICAgdGhpcy5fcGt0LmZyZWUoKTtcbiAgICB0aGlzLl9maWx0ZXJGcmFtZS5mcmVlKCk7XG4gICAgdGhpcy5fZ3JhcGg/LltTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICB0aGlzLl9jdHguZnJlZUNvbnRleHQoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZHJhaW4obXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGNvbnN0IHIgPSBhd2FpdCB0aGlzLl9idWZTaW5rIS5idWZmZXJzaW5rR2V0RnJhbWUodGhpcy5fZmlsdGVyRnJhbWUpO1xuICAgICAgaWYgKHIgPT09IEFWRVJST1JfRUFHQUlOIHx8IHIgPT09IEFWRVJST1JfRU9GKSBicmVhaztcbiAgICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihyLCBcImJ1ZmZlcnNpbmtHZXRGcmFtZVwiKTtcbiAgICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCB0aGlzLl9jdHguc2VuZEZyYW1lKHRoaXMuX2ZpbHRlckZyYW1lKSwgXCJhdWRpb0N0eC5zZW5kRnJhbWVcIik7XG4gICAgICB0aGlzLl9maWx0ZXJGcmFtZS51bnJlZigpO1xuICAgICAgYXdhaXQgdGhpcy5kcmFpbkNvZGVjKG11eGVyKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGRyYWluQ29kZWMobXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIGRyYWluUGFja2V0cyh0aGlzLl9jdHgsIHRoaXMuX3BrdCwgdGhpcy5fc3RyZWFtLCBtdXhlcik7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMDMuXG5cbmltcG9ydCB7IG9rIH0gZnJvbSBcImFzc2VydFwiO1xuaW1wb3J0IHtcbiAgQVZfUElYX0ZNVF9CR1JBLFxuICBBVl9QSVhfRk1UX1lVVkE0MjBQLFxuICBDb2RlYyxcbiAgQ29kZWNDb250ZXh0LFxuICBGRl9ERUNPREVSX1BORyxcbiAgRkZtcGVnRXJyb3IsXG4gIHR5cGUgRnJhbWUsXG4gIFBhY2tldCxcbiAgU29mdHdhcmVTY2FsZUNvbnRleHQsXG4gIFNXU19CSUxJTkVBUixcbiAgdHlwZSBBVlBpeGVsRm9ybWF0LFxufSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHsgbWFrZUZyYW1lLCBtYWtlUGFja2V0IH0gZnJvbSBcIi4vbWlzY1wiO1xuXG5leHBvcnQgY2xhc3MgQ29kZWNTdGF0ZSBpbXBsZW1lbnRzIERpc3Bvc2FibGUge1xuICByZWFkb25seSBzcmM6IEZyYW1lO1xuICByZWFkb25seSBkc3Q6IEZyYW1lO1xuICByZWFkb25seSBwa3Q6IFBhY2tldDtcbiAgcHJpdmF0ZSBfc3dzPzogU29mdHdhcmVTY2FsZUNvbnRleHQ7XG4gIHByaXZhdGUgX3BuZz86IENvZGVjO1xuXG4gIHN0YXRpYyBhc3luYyBjcmVhdGUod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpIHtcbiAgICBjb25zdCBjb2RlYyA9IENvZGVjLmZpbmREZWNvZGVyQnlOYW1lKEZGX0RFQ09ERVJfUE5HKTtcbiAgICBvayhjb2RlYywgXCJwbmcgZGVjb2RlciB1bmF2YWlsYWJsZVwiKTtcbiAgICByZXR1cm4gbmV3IENvZGVjU3RhdGUod2lkdGgsIGhlaWdodCwgY29kZWMpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcih3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlciwgcG5nOiBDb2RlYykge1xuICAgIHRoaXMuX3BuZyA9IHBuZztcbiAgICB0aGlzLnNyYyA9IG1ha2VGcmFtZSh3aWR0aCwgaGVpZ2h0LCBBVl9QSVhfRk1UX0JHUkEpO1xuICAgIHRoaXMuZHN0ID0gbWFrZUZyYW1lKHdpZHRoLCBoZWlnaHQsIEFWX1BJWF9GTVRfWVVWQTQyMFApO1xuICAgIHRoaXMucGt0ID0gbWFrZVBhY2tldCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIGZyZXNoIFBORyBkZWNvZGVyIGNvbnRleHQuXG4gICAqIFRoZSBGRm1wZWcgUE5HIGRlY29kZXIgYWNjdW11bGF0ZXMgQVBORyBibGVuZGluZyBzdGF0ZVxuICAgKiBhY3Jvc3MgZnJhbWVzLCBzbyBhIHNoYXJlZCBpbnN0YW5jZSBjb3JydXB0cyBvdXRwdXQgd2hlbiBkZWNvZGluZyBzdGFuZGFsb25lIFBOR3MuXG4gICAqL1xuICBhc3luYyBwbmcoKTogUHJvbWlzZTxDb2RlY0NvbnRleHQ+IHtcbiAgICBjb25zdCBwbmcgPSBuZXcgQ29kZWNDb250ZXh0KCk7XG4gICAgcG5nLmFsbG9jQ29udGV4dDModGhpcy5fcG5nKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgcG5nLm9wZW4yKHRoaXMuX3BuZyksIFwicG5nRGVjb2Rlci5vcGVuMlwiKTtcbiAgICByZXR1cm4gcG5nO1xuICB9XG5cbiAgYXN5bmMgZGVjb2RlUE5HKHBuZ0RhdGE6IEJ1ZmZlcik6IFByb21pc2U8RnJhbWU+IHtcbiAgICB1c2luZyBwbmcgPSBhd2FpdCB0aGlzLnBuZygpO1xuICAgIHRoaXMucGt0LmRhdGEgPSBwbmdEYXRhO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCBwbmcuc2VuZFBhY2tldCh0aGlzLnBrdCksIFwicG5nRGVjb2Rlci5zZW5kUGFja2V0XCIpO1xuICAgIHRoaXMucGt0LnVucmVmKCk7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IHBuZy5yZWNlaXZlRnJhbWUodGhpcy5zcmMpLCBcInBuZ0RlY29kZXIucmVjZWl2ZUZyYW1lXCIpO1xuICAgIHJldHVybiB0aGlzLnNyYztcbiAgfVxuXG4gIGdldCBzd3MoKSB7XG4gICAgaWYgKCF0aGlzLl9zd3MpIHtcbiAgICAgIGNvbnN0IHN3cyA9IG5ldyBTb2Z0d2FyZVNjYWxlQ29udGV4dCgpO1xuICAgICAgY29uc3QgZm10ID0gdGhpcy5zcmMuZm9ybWF0IGFzIEFWUGl4ZWxGb3JtYXQ7XG4gICAgICBzd3MuZ2V0Q29udGV4dChcbiAgICAgICAgdGhpcy5zcmMud2lkdGgsXG4gICAgICAgIHRoaXMuc3JjLmhlaWdodCxcbiAgICAgICAgZm10LFxuICAgICAgICB0aGlzLnNyYy53aWR0aCxcbiAgICAgICAgdGhpcy5zcmMuaGVpZ2h0LFxuICAgICAgICBBVl9QSVhfRk1UX1lVVkE0MjBQLFxuICAgICAgICBTV1NfQklMSU5FQVIsXG4gICAgICApO1xuICAgICAgdGhpcy5fc3dzID0gc3dzO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fc3dzO1xuICB9XG5cbiAgW1N5bWJvbC5kaXNwb3NlXSgpOiB2b2lkIHtcbiAgICB0aGlzLnNyY1tTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICB0aGlzLmRzdFtTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICB0aGlzLnBrdFtTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICB0aGlzLl9zd3M/LltTeW1ib2wuZGlzcG9zZV0oKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8xMy5cblxuZXhwb3J0IGZ1bmN0aW9uIHBhY2tCaXRzKGJpdHM6IG51bWJlcltdKTogQnVmZmVyIHtcbiAgY29uc3QgYnVmID0gQnVmZmVyLmFsbG9jKGJpdHMubGVuZ3RoID4+IDMpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGJ1Zi5sZW5ndGg7IGkrKykge1xuICAgIGxldCBieXRlID0gMDtcbiAgICBmb3IgKGxldCBiID0gMDsgYiA8IDg7IGIrKykgYnl0ZSA9IChieXRlIDw8IDEpIHwgYml0c1tpICogOCArIGJdITtcbiAgICBidWZbaV0gPSBieXRlO1xuICB9XG4gIHJldHVybiBidWY7XG59XG5cbmV4cG9ydCBjbGFzcyBCaXRXcml0ZXIge1xuICBiaXRzOiBudW1iZXJbXSA9IFtdO1xuICB3KHZhbDogbnVtYmVyLCBuOiBudW1iZXIpIHtcbiAgICBmb3IgKGxldCBpID0gbiAtIDE7IGkgPj0gMDsgaS0tKSB0aGlzLmJpdHMucHVzaCgodmFsID4+IGkpICYgMSk7XG4gIH1cbiAgZmxhZyh2YWw6IGJvb2xlYW4gfCBudW1iZXIpIHtcbiAgICB0aGlzLmJpdHMucHVzaCh2YWwgPyAxIDogMCk7XG4gIH1cbiAgdWUodmFsOiBudW1iZXIpIHtcbiAgICBjb25zdCB2ID0gdmFsICsgMTtcbiAgICBjb25zdCBsZW4gPSAzMiAtIE1hdGguY2x6MzIodik7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW4gLSAxOyBpKyspIHRoaXMuYml0cy5wdXNoKDApO1xuICAgIGZvciAobGV0IGkgPSBsZW4gLSAxOyBpID49IDA7IGktLSkgdGhpcy5iaXRzLnB1c2goKHYgPj4gaSkgJiAxKTtcbiAgfVxuICBhbGlnbihwYWQ6IG51bWJlcikge1xuICAgIHdoaWxlICh0aGlzLmJpdHMubGVuZ3RoICUgOCAhPT0gMCkgdGhpcy5iaXRzLnB1c2gocGFkKTtcbiAgfVxuICBjb3B5KHNyYzogbnVtYmVyW10sIHN0YXJ0OiBudW1iZXIsIGxlbjogbnVtYmVyKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykgdGhpcy5iaXRzLnB1c2goc3JjW3N0YXJ0ICsgaV0hKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQml0UmVhZGVyIHtcbiAgcHJpdmF0ZSBfYml0czogbnVtYmVyW107XG4gIHBvcyA9IDA7XG4gIGNvbnN0cnVjdG9yKGRhdGE6IEJ1ZmZlcikge1xuICAgIHRoaXMuX2JpdHMgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGIgPSA3OyBiID49IDA7IGItLSkgdGhpcy5fYml0cy5wdXNoKChkYXRhW2ldISA+PiBiKSAmIDEpO1xuICAgIH1cbiAgfVxuICBnZXQgYml0cygpIHtcbiAgICByZXR1cm4gdGhpcy5fYml0cztcbiAgfVxuICByZWFkKG46IG51bWJlcik6IG51bWJlciB7XG4gICAgbGV0IHZhbCA9IDA7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuOyBpKyspIHZhbCA9ICh2YWwgPDwgMSkgfCB0aGlzLl9iaXRzW3RoaXMucG9zKytdITtcbiAgICByZXR1cm4gdmFsO1xuICB9XG4gIHJlYWRVZSgpOiBudW1iZXIge1xuICAgIGxldCB6ZXJvcyA9IDA7XG4gICAgd2hpbGUgKHRoaXMuX2JpdHNbdGhpcy5wb3NdID09PSAwKSB7XG4gICAgICB6ZXJvcysrO1xuICAgICAgdGhpcy5wb3MrKztcbiAgICB9XG4gICAgdGhpcy5wb3MrKztcbiAgICBsZXQgdmFsID0gMTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHplcm9zOyBpKyspIHZhbCA9ICh2YWwgPDwgMSkgfCB0aGlzLl9iaXRzW3RoaXMucG9zKytdITtcbiAgICByZXR1cm4gdmFsIC0gMTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8xMi5cblxuY29uc3QgTkFMX0hFQURFUl9TSVpFID0gMjtcbmNvbnN0IEFOTkVYX0JfU1RBUlRfQ09ERSA9IEJ1ZmZlci5mcm9tKFsweDAwLCAweDAwLCAweDAwLCAweDAxXSk7XG5cbmV4cG9ydCB7IEFOTkVYX0JfU1RBUlRfQ09ERSwgTkFMX0hFQURFUl9TSVpFIH07XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmFsVW5pdCB7XG4gIHR5cGU6IG51bWJlcjtcbiAgbGF5ZXJJZDogbnVtYmVyO1xuICBkYXRhOiBCdWZmZXI7XG59XG5cbmZ1bmN0aW9uIHBhcnNlTmFsVHlwZShoZWFkZXIwOiBudW1iZXIsIGhlYWRlcjE6IG51bWJlcik6IHsgdHlwZTogbnVtYmVyOyBsYXllcklkOiBudW1iZXI7IHRlbXBvcmFsSWQ6IG51bWJlciB9IHtcbiAgY29uc3QgdHlwZSA9IChoZWFkZXIwID4+IDEpICYgMHgzZjtcbiAgY29uc3QgbGF5ZXJJZCA9ICgoaGVhZGVyMCAmIDEpIDw8IDUpIHwgKChoZWFkZXIxID4+IDMpICYgMHgxZik7XG4gIGNvbnN0IHRlbXBvcmFsSWQgPSBoZWFkZXIxICYgMHgwNztcbiAgcmV0dXJuIHsgdHlwZSwgbGF5ZXJJZCwgdGVtcG9yYWxJZCB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5jb2RlTmFsSGVhZGVyKHR5cGU6IG51bWJlciwgbGF5ZXJJZDogbnVtYmVyLCB0ZW1wb3JhbElkOiBudW1iZXIpOiBbbnVtYmVyLCBudW1iZXJdIHtcbiAgY29uc3QgYnl0ZTAgPSAoKHR5cGUgJiAweDNmKSA8PCAxKSB8ICgobGF5ZXJJZCA+PiA1KSAmIDEpO1xuICBjb25zdCBieXRlMSA9ICgobGF5ZXJJZCAmIDB4MWYpIDw8IDMpIHwgKHRlbXBvcmFsSWQgJiAweDA3KTtcbiAgcmV0dXJuIFtieXRlMCwgYnl0ZTFdO1xufVxuXG4vKiogU3BsaXQgQW5uZXggQiBiaXRzdHJlYW0gaW50byBOQUwgdW5pdHMuICovXG5leHBvcnQgZnVuY3Rpb24gc3BsaXROYWxVbml0cyhiaXRzdHJlYW06IEJ1ZmZlcik6IE5hbFVuaXRbXSB7XG4gIGNvbnN0IG5hbHM6IE5hbFVuaXRbXSA9IFtdO1xuICBsZXQgaSA9IDA7XG5cbiAgd2hpbGUgKGkgPCBiaXRzdHJlYW0ubGVuZ3RoKSB7XG4gICAgbGV0IHNjTGVuID0gMDtcbiAgICBpZiAoaSArIDMgPCBiaXRzdHJlYW0ubGVuZ3RoICYmIGJpdHN0cmVhbVtpXSA9PT0gMCAmJiBiaXRzdHJlYW1baSArIDFdID09PSAwICYmIGJpdHN0cmVhbVtpICsgMl0gPT09IDEpIHtcbiAgICAgIHNjTGVuID0gMztcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgaSArIDQgPCBiaXRzdHJlYW0ubGVuZ3RoICYmXG4gICAgICBiaXRzdHJlYW1baV0gPT09IDAgJiZcbiAgICAgIGJpdHN0cmVhbVtpICsgMV0gPT09IDAgJiZcbiAgICAgIGJpdHN0cmVhbVtpICsgMl0gPT09IDAgJiZcbiAgICAgIGJpdHN0cmVhbVtpICsgM10gPT09IDFcbiAgICApIHtcbiAgICAgIHNjTGVuID0gNDtcbiAgICB9IGVsc2Uge1xuICAgICAgaSsrO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgbmFsU3RhcnQgPSBpICsgc2NMZW47XG4gICAgaWYgKG5hbFN0YXJ0ICsgTkFMX0hFQURFUl9TSVpFID4gYml0c3RyZWFtLmxlbmd0aCkgYnJlYWs7XG5cbiAgICBsZXQgbmFsRW5kID0gYml0c3RyZWFtLmxlbmd0aDtcbiAgICBmb3IgKGxldCBqID0gbmFsU3RhcnQgKyBOQUxfSEVBREVSX1NJWkU7IGogPCBiaXRzdHJlYW0ubGVuZ3RoIC0gMjsgaisrKSB7XG4gICAgICBpZiAoXG4gICAgICAgIGJpdHN0cmVhbVtqXSA9PT0gMCAmJlxuICAgICAgICBiaXRzdHJlYW1baiArIDFdID09PSAwICYmXG4gICAgICAgIChiaXRzdHJlYW1baiArIDJdID09PSAxIHx8IChqICsgMyA8IGJpdHN0cmVhbS5sZW5ndGggJiYgYml0c3RyZWFtW2ogKyAyXSA9PT0gMCAmJiBiaXRzdHJlYW1baiArIDNdID09PSAxKSlcbiAgICAgICkge1xuICAgICAgICBuYWxFbmQgPSBqO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCB7IHR5cGUsIGxheWVySWQgfSA9IHBhcnNlTmFsVHlwZShiaXRzdHJlYW1bbmFsU3RhcnRdISwgYml0c3RyZWFtW25hbFN0YXJ0ICsgMV0hKTtcbiAgICBuYWxzLnB1c2goeyB0eXBlLCBsYXllcklkLCBkYXRhOiBiaXRzdHJlYW0uc3ViYXJyYXkobmFsU3RhcnQsIG5hbEVuZCkgfSk7XG4gICAgaSA9IG5hbEVuZDtcbiAgfVxuXG4gIHJldHVybiBuYWxzO1xufVxuXG4vKiogUmV3cml0ZSBudWhfbGF5ZXJfaWQgaW4gYSBOQUwgdW5pdCAocmV0dXJucyBjb3B5KS4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXdyaXRlTmFsTGF5ZXJJZChuYWw6IEJ1ZmZlciwgbGF5ZXJJZDogbnVtYmVyKTogQnVmZmVyIHtcbiAgY29uc3Qgb3V0ID0gQnVmZmVyLmZyb20obmFsKTtcbiAgY29uc3QgeyB0eXBlLCB0ZW1wb3JhbElkIH0gPSBwYXJzZU5hbFR5cGUob3V0WzBdISwgb3V0WzFdISk7XG4gIGNvbnN0IFtiMCwgYjFdID0gZW5jb2RlTmFsSGVhZGVyKHR5cGUsIGxheWVySWQsIHRlbXBvcmFsSWQpO1xuICBvdXRbMF0gPSBiMDtcbiAgb3V0WzFdID0gYjE7XG4gIHJldHVybiBvdXQ7XG59XG5cbi8qKiBSZW1vdmUgZW11bGF0aW9uIHByZXZlbnRpb24gYnl0ZXMgKDAwIDAwIDAzIOKGkiAwMCAwMCkgZnJvbSBSQlNQLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUVtdWxhdGlvblByZXZlbnRpb24oZGF0YTogQnVmZmVyKTogQnVmZmVyIHtcbiAgY29uc3Qgb3V0OiBudW1iZXJbXSA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoaSArIDIgPCBkYXRhLmxlbmd0aCAmJiBkYXRhW2ldID09PSAwICYmIGRhdGFbaSArIDFdID09PSAwICYmIGRhdGFbaSArIDJdID09PSAzKSB7XG4gICAgICBvdXQucHVzaCgwLCAwKTtcbiAgICAgIGkgKz0gMjtcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0LnB1c2goZGF0YVtpXSEpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gQnVmZmVyLmZyb20ob3V0KTtcbn1cblxuLyoqIEluc2VydCBlbXVsYXRpb24gcHJldmVudGlvbiBieXRlcyAoMDAgMDAgMDMpIGZvciBBbm5leCBCIGNvbXBsaWFuY2UuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkRW11bGF0aW9uUHJldmVudGlvbihuYWw6IEJ1ZmZlcik6IEJ1ZmZlciB7XG4gIGNvbnN0IG91dDogbnVtYmVyW10gPSBbXTtcbiAgb3V0LnB1c2gobmFsWzBdISwgbmFsWzFdISk7XG4gIGxldCB6ZXJvcyA9IDA7XG4gIGZvciAobGV0IGkgPSAyOyBpIDwgbmFsLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKHplcm9zID09PSAyICYmIG5hbFtpXSEgPD0gMykge1xuICAgICAgb3V0LnB1c2goMyk7XG4gICAgICB6ZXJvcyA9IDA7XG4gICAgfVxuICAgIGlmIChuYWxbaV0gPT09IDApIHplcm9zKys7XG4gICAgZWxzZSB6ZXJvcyA9IDA7XG4gICAgb3V0LnB1c2gobmFsW2ldISk7XG4gIH1cbiAgcmV0dXJuIEJ1ZmZlci5mcm9tKG91dCk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzEzLlxuXG5pbXBvcnQgeyBCaXRSZWFkZXIsIEJpdFdyaXRlciwgcGFja0JpdHMgfSBmcm9tIFwiLi9iaXRcIjtcbmltcG9ydCB7IGFkZEVtdWxhdGlvblByZXZlbnRpb24sIHJlbW92ZUVtdWxhdGlvblByZXZlbnRpb24gfSBmcm9tIFwiLi9uYWxcIjtcblxuaW50ZXJmYWNlIFBhcnNlZFBUTCB7XG4gIHB0bFN0YXJ0OiBudW1iZXI7XG4gIHB0bEVuZDogbnVtYmVyO1xuICBwdGxCaXRzOiBudW1iZXJbXTtcbiAgbWF4U3ViTGF5ZXJzTWludXMxOiBudW1iZXI7XG59XG5cbmZ1bmN0aW9uIGV4dHJhY3RQVEwodnBzRGF0YTogQnVmZmVyKTogUGFyc2VkUFRMIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgYnIgPSBuZXcgQml0UmVhZGVyKHJlbW92ZUVtdWxhdGlvblByZXZlbnRpb24odnBzRGF0YSkpO1xuICBici5yZWFkKDE2KTsgLy8gTkFMIGhlYWRlclxuICBici5yZWFkKDQpOyAvLyB2cHNfaWRcbiAgYnIucmVhZCgyKTsgLy8gYmFzZV9sYXllcl9pbnRlcm5hbCArIGF2YWlsYWJsZVxuICBpZiAoYnIucmVhZCg2KSA+IDApIHJldHVybiB1bmRlZmluZWQ7IC8vIGFscmVhZHkgbXVsdGktbGF5ZXJcbiAgY29uc3QgbWF4U3ViTGF5ZXJzTWludXMxID0gYnIucmVhZCgzKTtcbiAgYnIucmVhZCgxICsgMTYpOyAvLyB0ZW1wb3JhbF9uZXN0aW5nICsgcmVzZXJ2ZWRcblxuICBjb25zdCBwdGxTdGFydCA9IGJyLnBvcztcbiAgYnIucmVhZCg5Nik7IC8vIGdlbmVyYWwgUFRMIChwcm9maWxlX3NwYWNlICsgdGllciArIGlkYyArIGNvbXBhdCArIGNvbnN0cmFpbnRzICsgbGV2ZWwpXG4gIGlmIChtYXhTdWJMYXllcnNNaW51czEgPiAwKSBici5yZWFkKG1heFN1YkxheWVyc01pbnVzMSAqIDIgKyAoOCAtIG1heFN1YkxheWVyc01pbnVzMSkgKiAyKTtcbiAgcmV0dXJuIHsgcHRsU3RhcnQsIHB0bEVuZDogYnIucG9zLCBwdGxCaXRzOiBici5iaXRzLCBtYXhTdWJMYXllcnNNaW51czEgfTtcbn1cblxuLyoqIFdyaXRlIGJhc2UgVlBTIGZpZWxkcyBmb3IgMi1sYXllciBhbHBoYS4gKi9cbmZ1bmN0aW9uIHdyaXRlQmFzZVZQUyhidzogQml0V3JpdGVyLCBwdGw6IFBhcnNlZFBUTCkge1xuICBidy53KDB4NDAwMSwgMTYpOyAvLyBOQUwgaGVhZGVyXG4gIGJ3LncoMCwgNCk7IC8vIHZwc19pZFxuICBidy5mbGFnKDEpOyAvLyBiYXNlX2xheWVyX2ludGVybmFsXG4gIGJ3LmZsYWcoMSk7IC8vIGJhc2VfbGF5ZXJfYXZhaWxhYmxlXG4gIGJ3LncoMSwgNik7IC8vIG1heF9sYXllcnNfbWludXMxID0gMVxuICBidy53KHB0bC5tYXhTdWJMYXllcnNNaW51czEsIDMpO1xuICAvLyB0ZW1wb3JhbF9uZXN0aW5nOiB0cnVlIHdoZW4gc2luZ2xlIHN1Yi1sYXllciAoYWxsIHJlZnMgbGF5ZXIgMClcbiAgYncuZmxhZyhwdGwubWF4U3ViTGF5ZXJzTWludXMxID09PSAwKTtcbiAgYncudygweGZmZmYsIDE2KTsgLy8gcmVzZXJ2ZWRcbiAgYncuY29weShwdGwucHRsQml0cywgcHRsLnB0bFN0YXJ0LCBwdGwucHRsRW5kIC0gcHRsLnB0bFN0YXJ0KTtcblxuICBidy5mbGFnKDEpOyAvLyBzdWJfbGF5ZXJfb3JkZXJpbmdfaW5mb19wcmVzZW50XG4gIGZvciAobGV0IGkgPSAwOyBpIDw9IHB0bC5tYXhTdWJMYXllcnNNaW51czE7IGkrKykge1xuICAgIGJ3LnVlKDQpOyAvLyBtYXhEZWNQaWNCdWZmZXJpbmcgLSAxXG4gICAgYncudWUoMik7IC8vIG51bVJlb3JkZXJQaWNzXG4gICAgYncudWUoNCk7IC8vIG1heExhdGVuY3lJbmNyZWFzZSArIDFcbiAgfVxuXG4gIGJ3LncoMSwgNik7IC8vIG1heF9udWhfbGF5ZXJfaWQgPSAxXG4gIGJ3LnVlKDEpOyAvLyBudW1fbGF5ZXJfc2V0c19taW51czEgPSAxXG4gIGJ3LmZsYWcoMSk7IC8vIGxheWVyX2lkX2luY2x1ZGVkWzFdWzBdXG4gIGJ3LmZsYWcoMSk7IC8vIGxheWVyX2lkX2luY2x1ZGVkWzFdWzFdXG4gIGJ3LmZsYWcoMCk7IC8vIHRpbWluZ19pbmZvX3ByZXNlbnRcbiAgYncuZmxhZygxKTsgLy8gdnBzX2V4dGVuc2lvbl9mbGFnXG4gIGJ3LmFsaWduKDEpOyAvLyBleHRlbnNpb24gYWxpZ25tZW50IGJpdHMgPSAxXG59XG5cbi8qKiBXcml0ZSBWUFMgZXh0ZW5zaW9uIG1hdGNoaW5nIHgyNjUgNC4xIEVOQUJMRV9BTFBIQS4gKi9cbmZ1bmN0aW9uIHdyaXRlVlBTRXh0ZW5zaW9uKGJ3OiBCaXRXcml0ZXIsIHB0bDogUGFyc2VkUFRMLCB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcikge1xuICAvLyBFeHRlbnNpb24gUFRMOiBsZXZlbF9pZGMgb25seSAocHJvZmlsZVByZXNlbnRGbGFnPTApXG4gIGJ3LmNvcHkocHRsLnB0bEJpdHMsIHB0bC5wdGxFbmQgLSA4LCA4KTtcbiAgaWYgKHB0bC5tYXhTdWJMYXllcnNNaW51czEgPiAwKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwdGwubWF4U3ViTGF5ZXJzTWludXMxOyBpKyspIGJ3LncoMCwgMik7XG4gICAgZm9yIChsZXQgaSA9IHB0bC5tYXhTdWJMYXllcnNNaW51czE7IGkgPCA4OyBpKyspIGJ3LncoMCwgMik7XG4gIH1cblxuICBidy5mbGFnKDApOyAvLyBzcGxpdHRpbmdfZmxhZ1xuICBmb3IgKGxldCBpID0gMDsgaSA8IDE2OyBpKyspIGJ3LmZsYWcoaSA9PT0gMiB8fCBpID09PSAzKTsgLy8gc2NhbGFiaWxpdHk6IHNwYXRpYWwgKyBhdXhcbiAgYncudygwLCAzKTsgLy8gZGltZW5zaW9uX2lkX2xlblswXSA9IDFcbiAgYncudygwLCAzKTsgLy8gZGltZW5zaW9uX2lkX2xlblsxXSA9IDFcbiAgYncuZmxhZygxKTsgLy8gbnVoX2xheWVyX2lkX3ByZXNlbnRcbiAgYncudygxLCA2KTsgLy8gbGF5ZXJfaWRfaW5fbnVoWzFdID0gMVxuICBidy53KDEsIDEpOyAvLyBkaW1lbnNpb25faWRbMV1bMF0gPSAxXG4gIGJ3LncoMSwgMSk7IC8vIGRpbWVuc2lvbl9pZFsxXVsxXSA9IEFVWF9BTFBIQVxuICBidy53KDAsIDQpOyAvLyB2aWV3X2lkX2xlbiA9IDBcblxuICBidy5mbGFnKDApOyAvLyBkaXJlY3RfZGVwZW5kZW5jeV9mbGFnWzFdWzBdXG4gIGJ3LnVlKDApOyAvLyBudW1fYWRkX2xheWVyX3NldHNcbiAgYncuZmxhZygwKTsgLy8gc3ViX2xheWVyc19tYXhfbWludXMxX3ByZXNlbnRcbiAgYncuZmxhZygwKTsgLy8gbWF4X3RpZF9yZWZfcHJlc2VudFxuICBidy5mbGFnKDApOyAvLyBkZWZhdWx0X3JlZl9sYXllcnNfYWN0aXZlXG5cbiAgLy8gRkZtcGVnIGxvb3BzIGZyb20gaW5kZXggMiB0byBuYl9wdGwtMSwgc28gbnB0bF9tMT0yIOKGkiAxIGVudHJ5IGF0IGluZGV4IDJcbiAgYncudWUoMik7IC8vIHZwc19udW1fcHJvZmlsZV90aWVyX2xldmVsX21pbnVzMVxuICBidy5mbGFnKDEpOyAvLyBwcm9maWxlX3ByZXNlbnRfZmxhZ1syXVxuICBidy5jb3B5KHB0bC5wdGxCaXRzLCBwdGwucHRsU3RhcnQsIHB0bC5wdGxFbmQgLSBwdGwucHRsU3RhcnQpO1xuXG4gIGJ3LnVlKDApOyAvLyBudW1fYWRkX29sc3NcbiAgYncudygwLCAyKTsgLy8gZGVmYXVsdF9vdXRwdXRfbGF5ZXJfaWRjXG4gIGJ3LncoMSwgMik7IC8vIHB0bF9pZHhbMV1bMF0gPSAxIChjZWlsX2xvZzIoMykgPSAyIGJpdHMpXG4gIGJ3LncoMiwgMik7IC8vIHB0bF9pZHhbMV1bMV0gPSAyXG5cbiAgYncudWUoMCk7IC8vIHZwc19udW1fcmVwX2Zvcm1hdHNfbWludXMxXG4gIGJ3Lncod2lkdGgsIDE2KTtcbiAgYncudyhoZWlnaHQsIDE2KTtcbiAgYncuZmxhZygxKTsgLy8gY2hyb21hX2FuZF9iaXRfZGVwdGhfdnBzX3ByZXNlbnRcbiAgYncudygxLCAyKTsgLy8gY2hyb21hX2Zvcm1hdF9pZGMgPSA0OjI6MFxuICBidy53KDAsIDQpOyAvLyBiaXRfZGVwdGhfbHVtYV9taW51czhcbiAgYncudygwLCA0KTsgLy8gYml0X2RlcHRoX2Nocm9tYV9taW51czhcbiAgYncuZmxhZygwKTsgLy8gY29uZm9ybWFuY2Vfd2luZG93X3Zwc19mbGFnXG5cbiAgYncuZmxhZygxKTsgLy8gbWF4X29uZV9hY3RpdmVfcmVmX2xheWVyXG4gIGJ3LmZsYWcoMCk7IC8vIHBvY19sc2JfYWxpZ25lZFxuICBidy5mbGFnKDEpOyAvLyBwb2NfbHNiX25vdF9wcmVzZW50XG5cbiAgLy8gRFBCIGZvciBPTFMgMSAoMiBsYXllcnMsIDEgc3ViLWxheWVyKVxuICBidy5mbGFnKDApOyAvLyBzdWJfbGF5ZXJfZmxhZ19pbmZvX3ByZXNlbnRcbiAgYncudWUoMCk7IC8vIG1heF9kZWNfcGljX2J1ZmZlcmluZyAobGF5ZXIgMClcbiAgYncudWUoMCk7IC8vIG1heF9kZWNfcGljX2J1ZmZlcmluZyAobGF5ZXIgMSlcbiAgYncudWUoMCk7IC8vIG1heF9udW1fcmVvcmRlcl9waWNzXG4gIGJ3LnVlKDApOyAvLyBtYXhfbGF0ZW5jeV9pbmNyZWFzZVxuXG4gIGJ3LnVlKDApOyAvLyBkaXJlY3RfZGVwX3R5cGVfbGVuX21pbnVzMlxuICBidy5mbGFnKDApOyAvLyBkZWZhdWx0X2RpcmVjdF9kZXBlbmRlbmN5X2ZsYWdcbiAgYncudWUoMCk7IC8vIG5vbl92dWlfZXh0ZW5zaW9uX2xlbmd0aFxuICBidy5mbGFnKDApOyAvLyB2cHNfdnVpX3ByZXNlbnRcbiAgYncuZmxhZygwKTsgLy8gdnBzX2V4dGVuc2lvbjJfZmxhZ1xufVxuXG4vKipcbiAqIEJ1aWxkIGEgY29tcGxldGUgYWxwaGEgVlBTIGZyb20gc2NyYXRjaCwgdXNpbmcgdGhlIG9yaWdpbmFsIE5WRU5DIFZQU1xuICogb25seSBhcyBhIHNvdXJjZSBmb3IgdGhlIFBUTCAocHJvZmlsZS90aWVyL2xldmVsKSBieXRlcy5cbiAqIE1hdGNoZXMgeDI2NSA0LjEgRU5BQkxFX0FMUEhBIFZQUyBzdHJ1Y3R1cmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZEFscGhhVlBTKHZwc0RhdGE6IEJ1ZmZlciwgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpOiBCdWZmZXIge1xuICBjb25zdCBwdGwgPSBleHRyYWN0UFRMKHZwc0RhdGEpO1xuICBpZiAoIXB0bCkgcmV0dXJuIHZwc0RhdGE7XG5cbiAgY29uc3QgYncgPSBuZXcgQml0V3JpdGVyKCk7XG4gIHdyaXRlQmFzZVZQUyhidywgcHRsKTtcbiAgd3JpdGVWUFNFeHRlbnNpb24oYncsIHB0bCwgd2lkdGgsIGhlaWdodCk7XG5cbiAgYncuYml0cy5wdXNoKDEpOyAvLyBSQlNQIHN0b3AgYml0XG4gIGJ3LmFsaWduKDApO1xuICByZXR1cm4gYWRkRW11bGF0aW9uUHJldmVudGlvbihwYWNrQml0cyhidy5iaXRzKSk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzEyLlxuXG5pbXBvcnQgeyBwYWNrQml0cyB9IGZyb20gXCIuL2JpdFwiO1xuaW1wb3J0IHsgQU5ORVhfQl9TVEFSVF9DT0RFLCBlbmNvZGVOYWxIZWFkZXIsIHR5cGUgTmFsVW5pdCwgcmV3cml0ZU5hbExheWVySWQsIHNwbGl0TmFsVW5pdHMgfSBmcm9tIFwiLi9uYWxcIjtcbmltcG9ydCB7IGJ1aWxkQWxwaGFWUFMgfSBmcm9tIFwiLi92cHNcIjtcblxuY29uc3QgTkFMX1VOSVRfUFJFRklYX1NFSSA9IDM5O1xuXG5leHBvcnQgaW50ZXJmYWNlIFVuaWZpZWRFeHRyYWRhdGFPcHRpb25zIHtcbiAgYmFzZUV4dHJhZGF0YTogQnVmZmVyO1xuICBhbHBoYUV4dHJhZGF0YTogQnVmZmVyO1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkVW5pZmllZEV4dHJhZGF0YShvcHRzOiBVbmlmaWVkRXh0cmFkYXRhT3B0aW9ucyk6IEJ1ZmZlciB7XG4gIGNvbnN0IHsgYmFzZUV4dHJhZGF0YSwgYWxwaGFFeHRyYWRhdGEgfSA9IG9wdHM7XG4gIGNvbnN0IGJhc2VOYWxzID0gc3BsaXROYWxVbml0cyhiYXNlRXh0cmFkYXRhKTtcbiAgY29uc3QgYWxwaGFOYWxzID0gc3BsaXROYWxVbml0cyhhbHBoYUV4dHJhZGF0YSk7XG5cbiAgY29uc3QgYWxwaGFCeVR5cGUgPSBuZXcgTWFwPG51bWJlciwgTmFsVW5pdFtdPigpO1xuICBmb3IgKGNvbnN0IG5hbCBvZiBhbHBoYU5hbHMpIHtcbiAgICBpZiAobmFsLnR5cGUgPT09IDMyKSBjb250aW51ZTtcbiAgICBjb25zdCBhcnIgPSBhbHBoYUJ5VHlwZS5nZXQobmFsLnR5cGUpID8/IFtdO1xuICAgIGFyci5wdXNoKG5hbCk7XG4gICAgYWxwaGFCeVR5cGUuc2V0KG5hbC50eXBlLCBhcnIpO1xuICB9XG5cbiAgY29uc3QgY2h1bmtzOiBCdWZmZXJbXSA9IFtdO1xuICBjb25zdCBlbWl0dGVkID0gbmV3IFNldDxudW1iZXI+KCk7XG4gIGZvciAoY29uc3QgbmFsIG9mIGJhc2VOYWxzKSB7XG4gICAgY29uc3QgZGF0YSA9IG5hbC50eXBlID09PSAzMiA/IGJ1aWxkQWxwaGFWUFMobmFsLmRhdGEsIG9wdHMud2lkdGgsIG9wdHMuaGVpZ2h0KSA6IG5hbC5kYXRhO1xuICAgIGNodW5rcy5wdXNoKEFOTkVYX0JfU1RBUlRfQ09ERSwgZGF0YSk7XG4gICAgaWYgKCFlbWl0dGVkLmhhcyhuYWwudHlwZSkpIHtcbiAgICAgIGVtaXR0ZWQuYWRkKG5hbC50eXBlKTtcbiAgICAgIGZvciAoY29uc3QgYWxwaGFOYWwgb2YgYWxwaGFCeVR5cGUuZ2V0KG5hbC50eXBlKSA/PyBbXSkge1xuICAgICAgICBjaHVua3MucHVzaChBTk5FWF9CX1NUQVJUX0NPREUsIHJld3JpdGVOYWxMYXllcklkKGFscGhhTmFsLmRhdGEsIDEpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjaHVua3MucHVzaChidWlsZEFscGhhQ2hhbm5lbEluZm9TRUkoKSk7XG4gIHJldHVybiBCdWZmZXIuY29uY2F0KGNodW5rcyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBidWlsZEFscGhhQ2hhbm5lbEluZm9TRUkoKTogQnVmZmVyIHtcbiAgY29uc3QgcGF5bG9hZFR5cGUgPSAxNjU7XG4gIGNvbnN0IHBheWxvYWRTaXplID0gNDtcbiAgY29uc3QgW2gwLCBoMV0gPSBlbmNvZGVOYWxIZWFkZXIoTkFMX1VOSVRfUFJFRklYX1NFSSwgMCwgMSk7XG5cbiAgY29uc3QgYml0czogbnVtYmVyW10gPSBbXTtcbiAgY29uc3Qgd3JpdGVCaXRzID0gKHZhbDogbnVtYmVyLCBuOiBudW1iZXIpID0+IHtcbiAgICBmb3IgKGxldCBpID0gbiAtIDE7IGkgPj0gMDsgaS0tKSBiaXRzLnB1c2goKHZhbCA+PiBpKSAmIDEpO1xuICB9O1xuXG4gIHdyaXRlQml0cygwLCAxKTsgLy8gYWxwaGFfY2hhbm5lbF9jYW5jZWxfZmxhZ1xuICB3cml0ZUJpdHMoMCwgMyk7IC8vIGFscGhhX2NoYW5uZWxfdXNlX2lkY1xuICB3cml0ZUJpdHMoMCwgMyk7IC8vIGFscGhhX2NoYW5uZWxfYml0X2RlcHRoX21pbnVzOFxuICB3cml0ZUJpdHMoMCwgOSk7IC8vIGFscGhhX3RyYW5zcGFyZW50X3ZhbHVlXG4gIHdyaXRlQml0cygyNTUsIDkpOyAvLyBhbHBoYV9vcGFxdWVfdmFsdWVcbiAgd3JpdGVCaXRzKDAsIDEpOyAvLyBhbHBoYV9jaGFubmVsX2luY3JfZmxhZ1xuICB3cml0ZUJpdHMoMCwgMSk7IC8vIGFscGhhX2NoYW5uZWxfY2xpcF9mbGFnXG4gIHdyaXRlQml0cygxLCAxKTsgLy8gYnl0ZSBhbGlnbm1lbnRcbiAgd2hpbGUgKGJpdHMubGVuZ3RoICUgOCAhPT0gMCkgd3JpdGVCaXRzKDAsIDEpO1xuXG4gIHJldHVybiBCdWZmZXIuY29uY2F0KFtcbiAgICBBTk5FWF9CX1NUQVJUX0NPREUsXG4gICAgQnVmZmVyLmZyb20oW2gwLCBoMV0pLFxuICAgIEJ1ZmZlci5mcm9tKFtwYXlsb2FkVHlwZSwgcGF5bG9hZFNpemVdKSxcbiAgICBwYWNrQml0cyhiaXRzKSxcbiAgICBCdWZmZXIuZnJvbShbMHg4MF0pLFxuICBdKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGludGVybGVhdmVBY2Nlc3NVbml0cyhiYXNlTmFsczogTmFsVW5pdFtdLCBhbHBoYU5hbHM6IE5hbFVuaXRbXSk6IEJ1ZmZlciB7XG4gIGNvbnN0IGNodW5rczogQnVmZmVyW10gPSBbXTtcbiAgZm9yIChjb25zdCBuYWwgb2YgYmFzZU5hbHMpIHtcbiAgICBjaHVua3MucHVzaChBTk5FWF9CX1NUQVJUX0NPREUsIG5hbC5kYXRhKTtcbiAgfVxuICBmb3IgKGNvbnN0IG5hbCBvZiBhbHBoYU5hbHMpIHtcbiAgICBpZiAobmFsLnR5cGUgPCAzMikge1xuICAgICAgY2h1bmtzLnB1c2goQU5ORVhfQl9TVEFSVF9DT0RFLCByZXdyaXRlTmFsTGF5ZXJJZChuYWwuZGF0YSwgMSkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gQnVmZmVyLmNvbmNhdChjaHVua3MpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8xMi5cblxuaW1wb3J0IHsgQ29kZWMsIHR5cGUgQ29kZWNDb250ZXh0LCBGRm1wZWdFcnJvciwgRnJhbWUsIHR5cGUgUGFja2V0LCB0eXBlIFN0cmVhbSB9IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQgeyBBVl9QSVhfRk1UX0JHUkEsIEFWX1BJWF9GTVRfWVVWNDIwUCwgRkZfRU5DT0RFUl9IRVZDX05WRU5DIH0gZnJvbSBcIm5vZGUtYXYvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBidWlsZEFscGhhQ2hhbm5lbEluZm9TRUksIGJ1aWxkVW5pZmllZEV4dHJhZGF0YSwgaW50ZXJsZWF2ZUFjY2Vzc1VuaXRzIH0gZnJvbSBcIi4vYWxwaGFcIjtcbmltcG9ydCB0eXBlIHsgRm9ybWF0TXV4ZXIgfSBmcm9tIFwiLi9tdXhlclwiO1xuaW1wb3J0IHsgc3BsaXROYWxVbml0cyB9IGZyb20gXCIuL25hbFwiO1xuaW1wb3J0IHsgbWFrZVBhY2tldCwgb3BlblZpZGVvQ3R4IH0gZnJvbSBcIi4vbWlzY1wiO1xuaW1wb3J0IHR5cGUgeyBId1ZpZGVvRW5jb2Rlck9wdGlvbnMgfSBmcm9tIFwiLi92aWRlb3Rvb2xib3hcIjtcblxuaW50ZXJmYWNlIE52ZW5jU3RhdGUge1xuICBiYXNlQ3R4OiBDb2RlY0NvbnRleHQ7XG4gIGFscGhhQ3R4OiBDb2RlY0NvbnRleHQ7XG4gIGJhc2VQa3Q6IFBhY2tldDtcbiAgYWxwaGFQa3Q6IFBhY2tldDtcbiAgc3RyZWFtOiBTdHJlYW07XG59XG5cbmV4cG9ydCBjbGFzcyBOdmVuY0R1YWxMYXllckVuY29kZXIgaW1wbGVtZW50cyBEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSBfczogTnZlbmNTdGF0ZTtcbiAgcHJpdmF0ZSBfc2VpQnVmZmVyOiBCdWZmZXI7XG4gIHByaXZhdGUgX3B0cyA9IDBuO1xuICBwcml2YXRlIF9zZWlJbmplY3RlZCA9IGZhbHNlO1xuICBwcml2YXRlIF9hbHBoYUJ1Zj86IEJ1ZmZlcjtcbiAgcHJpdmF0ZSBfYWxwaGFGcmFtZT86IEZyYW1lO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoczogTnZlbmNTdGF0ZSkge1xuICAgIHRoaXMuX3MgPSBzO1xuICAgIHRoaXMuX3NlaUJ1ZmZlciA9IGJ1aWxkQWxwaGFDaGFubmVsSW5mb1NFSSgpO1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIGNyZWF0ZShvcHRzOiBId1ZpZGVvRW5jb2Rlck9wdGlvbnMpOiBQcm9taXNlPE52ZW5jRHVhbExheWVyRW5jb2Rlcj4ge1xuICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgZnBzLCBiaXRyYXRlLCBtdXhlciB9ID0gb3B0cztcblxuICAgIGNvbnN0IGNvZGVjID0gQ29kZWMuZmluZEVuY29kZXJCeU5hbWUoRkZfRU5DT0RFUl9IRVZDX05WRU5DKTtcbiAgICBpZiAoIWNvZGVjKSB0aHJvdyBuZXcgRXJyb3IoXCJoZXZjX252ZW5jIGVuY29kZXIgbm90IGZvdW5kXCIpO1xuXG4gICAgY29uc3QgbnZlbmNPcHRzID0geyBwcmVzZXQ6IFwicDRcIiwgYmY6IFwiMFwiIH07XG4gICAgY29uc3QgY29tbW9uID0geyBjb2RlYywgd2lkdGgsIGhlaWdodCwgZnBzLCBiaXRyYXRlLCBvcHRpb25zOiBudmVuY09wdHMgfTtcbiAgICAvLyBCR1JBIGRpcmVjdCDigJQgTlZFTkMgY29udmVydHMgaW50ZXJuYWxseSwgbm8gU1dTIG5lZWRlZFxuICAgIGNvbnN0IGJhc2VDdHggPSBhd2FpdCBvcGVuVmlkZW9DdHgoeyAuLi5jb21tb24sIHBpeGVsRm9ybWF0OiBBVl9QSVhfRk1UX0JHUkEgfSwgXCJudmVuYy5iYXNlLm9wZW4yXCIpO1xuICAgIC8vIEFscGhhIGFzIFlVVjQyMFAg4oCUIG1hdGNoaW5nIGJpdHJhdGUvR09QIGZvciBjb21wYXRpYmxlIFNQUyBhY3Jvc3MgbGF5ZXJzXG4gICAgY29uc3QgYWxwaGFDdHggPSBhd2FpdCBvcGVuVmlkZW9DdHgoeyAuLi5jb21tb24sIHBpeGVsRm9ybWF0OiBBVl9QSVhfRk1UX1lVVjQyMFAgfSwgXCJudmVuYy5hbHBoYS5vcGVuMlwiKTtcblxuICAgIGNvbnN0IGJhc2VQa3QgPSBtYWtlUGFja2V0KCk7XG4gICAgY29uc3QgYWxwaGFQa3QgPSBtYWtlUGFja2V0KCk7XG5cbiAgICBjb25zdCBzdHJlYW0gPSBtdXhlci5hZGRTdHJlYW0oYmFzZUN0eCwgXCJodmMxXCIpO1xuXG4gICAgY29uc3QgYmFzZUV4dHJhID0gYmFzZUN0eC5leHRyYURhdGE7XG4gICAgY29uc3QgYWxwaGFFeHRyYSA9IGFscGhhQ3R4LmV4dHJhRGF0YTtcbiAgICBpZiAoYmFzZUV4dHJhICYmIGFscGhhRXh0cmEpIHtcbiAgICAgIHN0cmVhbS5jb2RlY3Bhci5leHRyYWRhdGEgPSBidWlsZFVuaWZpZWRFeHRyYWRhdGEoe1xuICAgICAgICBiYXNlRXh0cmFkYXRhOiBiYXNlRXh0cmEsXG4gICAgICAgIGFscGhhRXh0cmFkYXRhOiBhbHBoYUV4dHJhLFxuICAgICAgICB3aWR0aCxcbiAgICAgICAgaGVpZ2h0LFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBOdmVuY0R1YWxMYXllckVuY29kZXIoeyBiYXNlQ3R4LCBhbHBoYUN0eCwgYmFzZVBrdCwgYWxwaGFQa3QsIHN0cmVhbSB9KTtcbiAgfVxuXG4gIGFzeW5jIGVuY29kZShiZ3JhRnJhbWU6IEZyYW1lLCBtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IGJhc2VDdHgsIGFscGhhQ3R4IH0gPSB0aGlzLl9zO1xuICAgIGNvbnN0IHB0cyA9IHRoaXMuX3B0cysrO1xuXG4gICAgYmdyYUZyYW1lLnB0cyA9IHB0cztcbiAgICBiZ3JhRnJhbWUuZHVyYXRpb24gPSAxbjtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgYmFzZUN0eC5zZW5kRnJhbWUoYmdyYUZyYW1lKSwgXCJiYXNlLnNlbmRGcmFtZVwiKTtcblxuICAgIC8vIEFscGhhOiBleHRyYWN0IGFscGhhIGNoYW5uZWwg4oaSIFlVVjQyMFBcbiAgICBjb25zdCBzcmMgPSBiZ3JhRnJhbWUuZGF0YT8uWzBdO1xuICAgIGNvbnN0IHNyY0xzID0gYmdyYUZyYW1lLmxpbmVzaXplPy5bMF07XG4gICAgaWYgKCFzcmMgfHwgIXNyY0xzKSB0aHJvdyBuZXcgRXJyb3IoXCJlbmNvZGU6IG1pc3NpbmcgQkdSQSBkYXRhXCIpO1xuICAgIGNvbnN0IHcgPSBiZ3JhRnJhbWUud2lkdGg7XG4gICAgY29uc3QgaCA9IGJncmFGcmFtZS5oZWlnaHQ7XG4gICAgY29uc3QgeVNpemUgPSB3ICogaDtcbiAgICBjb25zdCB1dlNpemUgPSAodyA+PiAxKSAqIChoID4+IDEpO1xuICAgIGlmICghdGhpcy5fYWxwaGFCdWYpIHRoaXMuX2FscGhhQnVmID0gQnVmZmVyLmFsbG9jKHlTaXplICsgdXZTaXplICogMik7XG4gICAgY29uc3QgYnVmID0gdGhpcy5fYWxwaGFCdWY7XG4gICAgZm9yIChsZXQgeSA9IDA7IHkgPCBoOyB5KyspIHtcbiAgICAgIGZvciAobGV0IHggPSAwOyB4IDwgdzsgeCsrKSB7XG4gICAgICAgIGJ1Zlt5ICogdyArIHhdID0gc3JjW3kgKiBzcmNMcyArIHggKiA0ICsgM10hO1xuICAgICAgfVxuICAgIH1cbiAgICBidWYuZmlsbCgxMjgsIHlTaXplLCB5U2l6ZSArIHV2U2l6ZSAqIDIpO1xuXG4gICAgdGhpcy5fYWxwaGFGcmFtZT8uZnJlZSgpO1xuICAgIHRoaXMuX2FscGhhRnJhbWUgPSBGcmFtZS5mcm9tVmlkZW9CdWZmZXIoYnVmLCB7IGZvcm1hdDogQVZfUElYX0ZNVF9ZVVY0MjBQLCB3aWR0aDogdywgaGVpZ2h0OiBoIH0pO1xuICAgIHRoaXMuX2FscGhhRnJhbWUucHRzID0gcHRzO1xuICAgIHRoaXMuX2FscGhhRnJhbWUuZHVyYXRpb24gPSAxbjtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgYWxwaGFDdHguc2VuZEZyYW1lKHRoaXMuX2FscGhhRnJhbWUpLCBcImFscGhhLnNlbmRGcmFtZVwiKTtcblxuICAgIGF3YWl0IHRoaXMuZHJhaW5JbnRlcmxlYXZlZChtdXhlcik7XG4gIH1cblxuICBhc3luYyBmbHVzaChtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLl9zLmJhc2VDdHguc2VuZEZyYW1lKG51bGwpO1xuICAgIGF3YWl0IHRoaXMuX3MuYWxwaGFDdHguc2VuZEZyYW1lKG51bGwpO1xuICAgIGF3YWl0IHRoaXMuZHJhaW5JbnRlcmxlYXZlZChtdXhlcik7XG4gIH1cblxuICBbU3ltYm9sLmRpc3Bvc2VdKCk6IHZvaWQge1xuICAgIGNvbnN0IHsgYmFzZVBrdCwgYWxwaGFQa3QsIGJhc2VDdHgsIGFscGhhQ3R4IH0gPSB0aGlzLl9zO1xuICAgIGJhc2VQa3QuZnJlZSgpO1xuICAgIGFscGhhUGt0LmZyZWUoKTtcbiAgICB0aGlzLl9hbHBoYUZyYW1lPy5mcmVlKCk7XG4gICAgYmFzZUN0eC5mcmVlQ29udGV4dCgpO1xuICAgIGFscGhhQ3R4LmZyZWVDb250ZXh0KCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGRyYWluSW50ZXJsZWF2ZWQobXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyBiYXNlQ3R4LCBhbHBoYUN0eCwgYmFzZVBrdCwgYWxwaGFQa3QsIHN0cmVhbSB9ID0gdGhpcy5fcztcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgY29uc3QgYmFzZVIgPSBhd2FpdCBiYXNlQ3R4LnJlY2VpdmVQYWNrZXQoYmFzZVBrdCk7XG4gICAgICBjb25zdCBhbHBoYVIgPSBhd2FpdCBhbHBoYUN0eC5yZWNlaXZlUGFja2V0KGFscGhhUGt0KTtcblxuICAgICAgY29uc3QgYmFzZVJlYWR5ID0gYmFzZVIgPj0gMDtcbiAgICAgIGNvbnN0IGFscGhhUmVhZHkgPSBhbHBoYVIgPj0gMDtcbiAgICAgIGlmICghYmFzZVJlYWR5ICYmICFhbHBoYVJlYWR5KSBicmVhaztcblxuICAgICAgLy8gQm90aCBtdXN0IHByb2R1Y2UgcGFja2V0cyB0b2dldGhlciAoYmY9MCBlbnN1cmVzIHRoaXMpXG4gICAgICBpZiAoYmFzZVJlYWR5ICE9PSBhbHBoYVJlYWR5KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgTlZFTkMgZGVzeW5jOiBiYXNlPSR7YmFzZVJlYWR5fSwgYWxwaGE9JHthbHBoYVJlYWR5fWApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBiYXNlTmFscyA9IHNwbGl0TmFsVW5pdHMoYmFzZVBrdC5kYXRhISk7XG4gICAgICBjb25zdCBhbHBoYU5hbHMgPSBzcGxpdE5hbFVuaXRzKGFscGhhUGt0LmRhdGEhKTtcblxuICAgICAgY29uc3QgY2h1bmtzOiBCdWZmZXJbXSA9IFtdO1xuICAgICAgaWYgKCF0aGlzLl9zZWlJbmplY3RlZCkge1xuICAgICAgICBjaHVua3MucHVzaCh0aGlzLl9zZWlCdWZmZXIpO1xuICAgICAgICB0aGlzLl9zZWlJbmplY3RlZCA9IHRydWU7XG4gICAgICB9XG4gICAgICBjaHVua3MucHVzaChpbnRlcmxlYXZlQWNjZXNzVW5pdHMoYmFzZU5hbHMsIGFscGhhTmFscykpO1xuXG4gICAgICAvLyBTYXZlIHRpbWVzdGFtcHMgYmVmb3JlIGRhdGEgcmVwbGFjZW1lbnQgKHNldHRlciBtYXkgcmVzZXQgdGhlbSlcbiAgICAgIGNvbnN0IHB0cyA9IGJhc2VQa3QucHRzO1xuICAgICAgY29uc3QgZHRzID0gYmFzZVBrdC5kdHM7XG4gICAgICBjb25zdCBkdXJhdGlvbiA9IGJhc2VQa3QuZHVyYXRpb247XG4gICAgICBiYXNlUGt0LmRhdGEgPSBCdWZmZXIuY29uY2F0KGNodW5rcyk7XG4gICAgICBiYXNlUGt0LnB0cyA9IHB0cztcbiAgICAgIGJhc2VQa3QuZHRzID0gZHRzO1xuICAgICAgYmFzZVBrdC5kdXJhdGlvbiA9IGR1cmF0aW9uID09PSAwbiA/IDFuIDogZHVyYXRpb247XG4gICAgICBiYXNlUGt0LnN0cmVhbUluZGV4ID0gc3RyZWFtLmluZGV4O1xuICAgICAgYmFzZVBrdC5yZXNjYWxlVHMoYmFzZUN0eC50aW1lQmFzZSwgc3RyZWFtLnRpbWVCYXNlKTtcbiAgICAgIGF3YWl0IG11eGVyLndyaXRlUGFja2V0KGJhc2VQa3QpO1xuXG4gICAgICBiYXNlUGt0LnVucmVmKCk7XG4gICAgICBhbHBoYVBrdC51bnJlZigpO1xuICAgIH1cbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMy8yMS5cblxuaW1wb3J0IHsgQ29kZWMsIHR5cGUgQ29kZWNDb250ZXh0LCBGRm1wZWdFcnJvciwgRnJhbWUsIHR5cGUgUGFja2V0LCB0eXBlIFN0cmVhbSB9IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQgeyB0eXBlIEFWUGl4ZWxGb3JtYXQsIHR5cGUgRkZWaWRlb0VuY29kZXIgfSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcbmltcG9ydCB7IGRyYWluUGFja2V0cywgbWFrZVBhY2tldCwgb3BlblZpZGVvQ3R4IH0gZnJvbSBcIi4vbWlzY1wiO1xuaW1wb3J0IHR5cGUgeyBGb3JtYXRNdXhlciB9IGZyb20gXCIuL211eGVyXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmlkZW9FbmNvZGVyT3B0aW9ucyB7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICBmcHM6IG51bWJlcjtcbiAgY29kZWNOYW1lOiBGRlZpZGVvRW5jb2RlcjtcbiAgY29kZWNUYWc/OiBzdHJpbmc7XG4gIGNvZGVjT3B0czogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgYml0cmF0ZTogbnVtYmVyO1xuICBwaXhlbEZvcm1hdDogQVZQaXhlbEZvcm1hdDtcbiAgbXV4ZXI6IEZvcm1hdE11eGVyO1xufVxuXG5leHBvcnQgY2xhc3MgVmlkZW9FbmNvZGVyIGltcGxlbWVudHMgRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2N0eDogQ29kZWNDb250ZXh0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9wa3Q6IFBhY2tldDtcbiAgcHJpdmF0ZSByZWFkb25seSBfc3RyZWFtOiBTdHJlYW07XG4gIHByaXZhdGUgX3B0cyA9IDBuO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoY3R4OiBDb2RlY0NvbnRleHQsIHBrdDogUGFja2V0LCBzdHJlYW06IFN0cmVhbSkge1xuICAgIHRoaXMuX2N0eCA9IGN0eDtcbiAgICB0aGlzLl9wa3QgPSBwa3Q7XG4gICAgdGhpcy5fc3RyZWFtID0gc3RyZWFtO1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIGNyZWF0ZShvcHRzOiBWaWRlb0VuY29kZXJPcHRpb25zKTogUHJvbWlzZTxWaWRlb0VuY29kZXI+IHtcbiAgICBjb25zdCB7IGNvZGVjTmFtZSwgY29kZWNUYWcsIGNvZGVjT3B0cywgbXV4ZXIsIC4uLnJlc3QgfSA9IG9wdHM7XG5cbiAgICBjb25zdCBjb2RlYyA9IENvZGVjLmZpbmRFbmNvZGVyQnlOYW1lKGNvZGVjTmFtZSk7XG4gICAgaWYgKCFjb2RlYykgdGhyb3cgbmV3IEVycm9yKGBWaWRlbyBlbmNvZGVyIG5vdCBmb3VuZDogJHtjb2RlY05hbWV9YCk7XG5cbiAgICBjb25zdCBjdHggPSBhd2FpdCBvcGVuVmlkZW9DdHgoeyBjb2RlYywgLi4ucmVzdCwgY29kZWNUYWcsIG9wdGlvbnM6IGNvZGVjT3B0cyB9LCBcInZpZGVvQ3R4Lm9wZW4yXCIpO1xuICAgIGNvbnN0IHN0cmVhbSA9IG11eGVyLmFkZFN0cmVhbShjdHgsIGNvZGVjVGFnKTtcbiAgICByZXR1cm4gbmV3IFZpZGVvRW5jb2RlcihjdHgsIG1ha2VQYWNrZXQoKSwgc3RyZWFtKTtcbiAgfVxuXG4gIGFzeW5jIGVuY29kZShmcmFtZTogRnJhbWUsIG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGZyYW1lLnB0cyA9IHRoaXMuX3B0cysrO1xuICAgIGZyYW1lLmR1cmF0aW9uID0gMW47XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IHRoaXMuX2N0eC5zZW5kRnJhbWUoZnJhbWUpLCBcInZpZGVvQ3R4LnNlbmRGcmFtZVwiKTtcbiAgICBhd2FpdCB0aGlzLmRyYWluKG11eGVyKTtcbiAgfVxuXG4gIGFzeW5jIGZsdXNoKG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuX2N0eC5zZW5kRnJhbWUobnVsbCk7XG4gICAgYXdhaXQgdGhpcy5kcmFpbihtdXhlcik7XG4gIH1cblxuICBbU3ltYm9sLmRpc3Bvc2VdKCk6IHZvaWQge1xuICAgIHRoaXMuX3BrdC5mcmVlKCk7XG4gICAgdGhpcy5fY3R4LmZyZWVDb250ZXh0KCk7XG4gIH1cblxuICBwcml2YXRlIGRyYWluKG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBkcmFpblBhY2tldHModGhpcy5fY3R4LCB0aGlzLl9wa3QsIHRoaXMuX3N0cmVhbSwgbXV4ZXIpO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzEyLlxuXG5pbXBvcnQgeyB0eXBlIENvZGVjQ29udGV4dCwgRkZtcGVnRXJyb3IsIEZyYW1lLCB0eXBlIFBhY2tldCwgdHlwZSBTdHJlYW0gfSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHR5cGUgeyBIYXJkd2FyZUNvbnRleHQgfSBmcm9tIFwibm9kZS1hdi9hcGlcIjtcbmltcG9ydCB7IEFWX1BJWF9GTVRfQkdSQSwgQVZDT0xfUkFOR0VfSlBFRyB9IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgZHJhaW5QYWNrZXRzLCBtYWtlUGFja2V0LCBvcGVuVmlkZW9DdHggfSBmcm9tIFwiLi9taXNjXCI7XG5pbXBvcnQgdHlwZSB7IEZvcm1hdE11eGVyIH0gZnJvbSBcIi4vbXV4ZXJcIjtcblxuZXhwb3J0IGludGVyZmFjZSBId1ZpZGVvRW5jb2Rlck9wdGlvbnMge1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgZnBzOiBudW1iZXI7XG4gIGh3OiBIYXJkd2FyZUNvbnRleHQ7XG4gIGJpdHJhdGU6IG51bWJlcjtcbiAgbXV4ZXI6IEZvcm1hdE11eGVyO1xufVxuXG5leHBvcnQgY2xhc3MgVmlkZW9Ub29sYm94RW5jb2RlciBpbXBsZW1lbnRzIERpc3Bvc2FibGUge1xuICBwcml2YXRlIF9jdHg6IENvZGVjQ29udGV4dDtcbiAgcHJpdmF0ZSBfcGt0OiBQYWNrZXQ7XG4gIHByaXZhdGUgX3N0cmVhbTogU3RyZWFtO1xuICBwcml2YXRlIF9wdHMgPSAwbjtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKGN0eDogQ29kZWNDb250ZXh0LCBwa3Q6IFBhY2tldCwgc3RyZWFtOiBTdHJlYW0pIHtcbiAgICB0aGlzLl9jdHggPSBjdHg7XG4gICAgdGhpcy5fcGt0ID0gcGt0O1xuICAgIHRoaXMuX3N0cmVhbSA9IHN0cmVhbTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBjcmVhdGUob3B0czogSHdWaWRlb0VuY29kZXJPcHRpb25zKTogUHJvbWlzZTxWaWRlb1Rvb2xib3hFbmNvZGVyPiB7XG4gICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0LCBmcHMsIGh3LCBiaXRyYXRlLCBtdXhlciB9ID0gb3B0cztcblxuICAgIGNvbnN0IGNvZGVjID0gaHcuZ2V0RW5jb2RlckNvZGVjKFwiaGV2Y1wiKTtcbiAgICBpZiAoIWNvZGVjKSB0aHJvdyBuZXcgRXJyb3IoXCJoZXZjX3ZpZGVvdG9vbGJveCBlbmNvZGVyIG5vdCBmb3VuZFwiKTtcblxuICAgIGNvbnN0IGN0eCA9IGF3YWl0IG9wZW5WaWRlb0N0eChcbiAgICAgIHtcbiAgICAgICAgY29kZWMsXG4gICAgICAgIHdpZHRoLFxuICAgICAgICBoZWlnaHQsXG4gICAgICAgIGZwcyxcbiAgICAgICAgYml0cmF0ZSxcbiAgICAgICAgcGl4ZWxGb3JtYXQ6IEFWX1BJWF9GTVRfQkdSQSxcbiAgICAgICAgY29sb3JSYW5nZTogQVZDT0xfUkFOR0VfSlBFRyxcbiAgICAgICAgY29kZWNUYWc6IFwiaHZjMVwiLFxuICAgICAgICBvcHRpb25zOiB7IGFscGhhX3F1YWxpdHk6IFwiMVwiIH0sXG4gICAgICB9LFxuICAgICAgXCJ2dEVuYy5vcGVuMlwiLFxuICAgICk7XG4gICAgY29uc3Qgc3RyZWFtID0gbXV4ZXIuYWRkU3RyZWFtKGN0eCwgXCJodmMxXCIpO1xuICAgIHJldHVybiBuZXcgVmlkZW9Ub29sYm94RW5jb2RlcihjdHgsIG1ha2VQYWNrZXQoKSwgc3RyZWFtKTtcbiAgfVxuXG4gIGFzeW5jIGVuY29kZShiZ3JhRnJhbWU6IEZyYW1lLCBtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBiZ3JhRnJhbWUucHRzID0gdGhpcy5fcHRzKys7XG4gICAgYmdyYUZyYW1lLmR1cmF0aW9uID0gMW47XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IHRoaXMuX2N0eC5zZW5kRnJhbWUoYmdyYUZyYW1lKSwgXCJ2dEVuYy5zZW5kRnJhbWVcIik7XG4gICAgYXdhaXQgdGhpcy5kcmFpbihtdXhlcik7XG4gIH1cblxuICBhc3luYyBmbHVzaChtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLl9jdHguc2VuZEZyYW1lKG51bGwpO1xuICAgIGF3YWl0IHRoaXMuZHJhaW4obXV4ZXIpO1xuICB9XG5cbiAgW1N5bWJvbC5kaXNwb3NlXSgpOiB2b2lkIHtcbiAgICB0aGlzLl9wa3QuZnJlZSgpO1xuICAgIHRoaXMuX2N0eC5mcmVlQ29udGV4dCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBkcmFpbihtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gZHJhaW5QYWNrZXRzKHRoaXMuX2N0eCwgdGhpcy5fcGt0LCB0aGlzLl9zdHJlYW0sIG11eGVyKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8xMy5cblxuaW1wb3J0IHsgSGFyZHdhcmVDb250ZXh0IH0gZnJvbSBcIm5vZGUtYXYvYXBpXCI7XG5pbXBvcnQge1xuICBBVl9QSVhfRk1UX1lVVkE0MjBQLFxuICBGRl9FTkNPREVSX0xJQlgyNjUsXG4gIEZGX0hXREVWSUNFX1RZUEVfQ1VEQSxcbiAgRkZfSFdERVZJQ0VfVFlQRV9WSURFT1RPT0xCT1gsXG59IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuXG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi4vbG9nZ2luZ1wiO1xuaW1wb3J0IHsgQ29kZWNTdGF0ZSB9IGZyb20gXCIuL2NvZGVjXCI7XG5pbXBvcnQgdHlwZSB7IEZvcm1hdE11eGVyIH0gZnJvbSBcIi4vbXV4ZXJcIjtcbmltcG9ydCB7IE52ZW5jRHVhbExheWVyRW5jb2RlciB9IGZyb20gXCIuL252ZW5jXCI7XG5pbXBvcnQgeyBWaWRlb0VuY29kZXIgfSBmcm9tIFwiLi92aWRlb1wiO1xuaW1wb3J0IHsgVmlkZW9Ub29sYm94RW5jb2RlciB9IGZyb20gXCIuL3ZpZGVvdG9vbGJveFwiO1xuXG5jb25zdCBUQUcgPSBcIltFbmNvZGVyXVwiO1xuXG5leHBvcnQgdHlwZSBId0VuY29kZXIgPSBWaWRlb1Rvb2xib3hFbmNvZGVyIHwgTnZlbmNEdWFsTGF5ZXJFbmNvZGVyO1xuXG5leHBvcnQgaW50ZXJmYWNlIFZpZGVvU2V0dXAge1xuICB2aWRlbz86IFZpZGVvRW5jb2RlcjtcbiAgaHdWaWRlbz86IEh3RW5jb2RlcjtcbiAgY29kZWM/OiBDb2RlY1N0YXRlO1xuICBodz86IEhhcmR3YXJlQ29udGV4dDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBWaWRlb0ZhY3RvcnlPcHRpb25zIHtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIGZwczogbnVtYmVyO1xuICBiaXRyYXRlPzogbnVtYmVyO1xuICBkaXNhYmxlSHdDb2RlYz86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVWaWRlb0VuY29kZXIob3B0czogVmlkZW9GYWN0b3J5T3B0aW9ucywgbXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTxWaWRlb1NldHVwPiB7XG4gIGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgZnBzLCBiaXRyYXRlID0gOF8wMDBfMDAwLCBkaXNhYmxlSHdDb2RlYyA9IGZhbHNlIH0gPSBvcHRzO1xuICBjb25zdCBodyA9IGRpc2FibGVId0NvZGVjID8gdW5kZWZpbmVkIDogKEhhcmR3YXJlQ29udGV4dC5hdXRvKCkgPz8gdW5kZWZpbmVkKTtcblxuICB0cnkge1xuICAgIGlmIChodz8uZGV2aWNlVHlwZU5hbWUgPT09IEZGX0hXREVWSUNFX1RZUEVfVklERU9UT09MQk9YICYmIGh3LmdldEVuY29kZXJDb2RlYyhcImhldmNcIikpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhUQUcsIFwidXNpbmcgVmlkZW9Ub29sYm94IEhFVkMgYWxwaGEgZW5jb2RlclwiKTtcbiAgICAgIGNvbnN0IGh3VmlkZW8gPSBhd2FpdCBWaWRlb1Rvb2xib3hFbmNvZGVyLmNyZWF0ZSh7IHdpZHRoLCBoZWlnaHQsIGZwcywgaHcsIGJpdHJhdGUsIG11eGVyIH0pO1xuICAgICAgcmV0dXJuIHsgaHdWaWRlbywgaHcgfTtcbiAgICB9XG4gICAgaWYgKGh3Py5kZXZpY2VUeXBlTmFtZSA9PT0gRkZfSFdERVZJQ0VfVFlQRV9DVURBICYmIGh3LmdldEVuY29kZXJDb2RlYyhcImhldmNcIikpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhUQUcsIFwidXNpbmcgTlZFTkMgZHVhbC1sYXllciBIRVZDIGFscGhhIGVuY29kZXJcIik7XG4gICAgICBjb25zdCBod1ZpZGVvID0gYXdhaXQgTnZlbmNEdWFsTGF5ZXJFbmNvZGVyLmNyZWF0ZSh7IHdpZHRoLCBoZWlnaHQsIGZwcywgaHcsIGJpdHJhdGUsIG11eGVyIH0pO1xuICAgICAgcmV0dXJuIHsgaHdWaWRlbywgaHcgfTtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsb2dnZXIud2FybihUQUcsIFwiSGFyZHdhcmUgY29kZWMgc2Vzc2lvbiBsaW1pdHMgcmVhY2hlZCwgdXNlIHNvZnR3YXJlIGVuY29kZXJcIiwgZSk7XG4gIH0gZmluYWxseSB7XG4gICAgaHc/LmRpc3Bvc2UoKTtcbiAgfVxuXG4gIGxvZ2dlci5kZWJ1ZyhUQUcsIFwidXNpbmcgc29mdHdhcmUgbGlieDI2NSBIRVZDIGFscGhhIGVuY29kZXJcIik7XG4gIGNvbnN0IHZpZGVvID0gYXdhaXQgVmlkZW9FbmNvZGVyLmNyZWF0ZSh7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0LFxuICAgIGZwcyxcbiAgICBjb2RlY05hbWU6IEZGX0VOQ09ERVJfTElCWDI2NSxcbiAgICBjb2RlY1RhZzogXCJodmMxXCIsXG4gICAgY29kZWNPcHRzOiB7IHByZXNldDogXCJtZWRpdW1cIiwgXCJ4MjY1LXBhcmFtc1wiOiBcImxvZy1sZXZlbD0xOmJmcmFtZXM9Mzpwb29scz0rOmZyYW1lLXRocmVhZHM9MFwiIH0sXG4gICAgYml0cmF0ZSxcbiAgICBwaXhlbEZvcm1hdDogQVZfUElYX0ZNVF9ZVVZBNDIwUCxcbiAgICBtdXhlcixcbiAgfSk7XG4gIHJldHVybiB7IHZpZGVvLCBjb2RlYzogYXdhaXQgQ29kZWNTdGF0ZS5jcmVhdGUod2lkdGgsIGhlaWdodCkgfTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDMvMjEuXG5cbmltcG9ydCB7IENvZGVjQ29udGV4dCwgRkZtcGVnRXJyb3IsIEZvcm1hdENvbnRleHQsIFBhY2tldCB9IGZyb20gXCJub2RlLWF2XCI7XG5cbmV4cG9ydCBjbGFzcyBGb3JtYXRNdXhlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2N0eDogRm9ybWF0Q29udGV4dDtcbiAgcHJpdmF0ZSBfb3BlbmVkID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3Iob3V0UGF0aDogc3RyaW5nLCBmb3JtYXROYW1lPzogc3RyaW5nKSB7XG4gICAgdGhpcy5fY3R4ID0gbmV3IEZvcm1hdENvbnRleHQoKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IodGhpcy5fY3R4LmFsbG9jT3V0cHV0Q29udGV4dDIobnVsbCwgZm9ybWF0TmFtZSA/PyBudWxsLCBvdXRQYXRoKSwgXCJhbGxvY091dHB1dENvbnRleHQyXCIpO1xuICB9XG5cbiAgYWRkU3RyZWFtKGNvZGVjQ3R4OiBDb2RlY0NvbnRleHQsIGNvZGVjVGFnPzogc3RyaW5nKTogUmV0dXJuVHlwZTxGb3JtYXRDb250ZXh0W1wibmV3U3RyZWFtXCJdPiB7XG4gICAgY29uc3Qgc3RyZWFtID0gdGhpcy5fY3R4Lm5ld1N0cmVhbShudWxsKTtcbiAgICBzdHJlYW0udGltZUJhc2UgPSBjb2RlY0N0eC50aW1lQmFzZTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3Ioc3RyZWFtLmNvZGVjcGFyLmZyb21Db250ZXh0KGNvZGVjQ3R4KSwgXCJjb2RlY3Bhci5mcm9tQ29udGV4dFwiKTtcbiAgICBpZiAoY29kZWNUYWcpIHN0cmVhbS5jb2RlY3Bhci5jb2RlY1RhZyA9IGNvZGVjVGFnO1xuICAgIHJldHVybiBzdHJlYW07XG4gIH1cblxuICBhc3luYyBvcGVuKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9vcGVuZWQpIHJldHVybjtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgdGhpcy5fY3R4Lm9wZW5PdXRwdXQoKSwgXCJvcGVuT3V0cHV0XCIpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCB0aGlzLl9jdHgud3JpdGVIZWFkZXIobnVsbCksIFwid3JpdGVIZWFkZXJcIik7XG4gICAgdGhpcy5fb3BlbmVkID0gdHJ1ZTtcbiAgfVxuXG4gIGFzeW5jIHdyaXRlUGFja2V0KHBrdDogUGFja2V0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IHRoaXMuX2N0eC5pbnRlcmxlYXZlZFdyaXRlRnJhbWUocGt0KSwgXCJpbnRlcmxlYXZlZFdyaXRlRnJhbWVcIik7XG4gIH1cblxuICBhc3luYyBbU3ltYm9sLmFzeW5jRGlzcG9zZV0oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLl9vcGVuZWQpIHJldHVybjtcbiAgICBhd2FpdCB0aGlzLl9jdHgud3JpdGVUcmFpbGVyKCk7XG4gICAgYXdhaXQgdGhpcy5fY3R4LmNsb3NlT3V0cHV0KCk7XG4gICAgYXdhaXQgdGhpcy5fY3R4W1N5bWJvbC5hc3luY0Rpc3Bvc2VdKCk7XG4gICAgdGhpcy5fb3BlbmVkID0gZmFsc2U7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMDEuXG5cbmltcG9ydCB7IEZGbXBlZ0Vycm9yLCBGcmFtZSB9IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQgdHlwZSB7IEhhcmR3YXJlQ29udGV4dCB9IGZyb20gXCJub2RlLWF2L2FwaVwiO1xuaW1wb3J0IHsgQVZfUElYX0ZNVF9CR1JBLCBBVl9TQU1QTEVfRk1UX0ZMVFAsIEZGX0VOQ09ERVJfQUFDIH0gZnJvbSBcIm5vZGUtYXYvY29uc3RhbnRzXCI7XG5cbmltcG9ydCB7IG9rIH0gZnJvbSBcImFzc2VydFwiO1xuaW1wb3J0IHsgQ29uY3VycmVuY3lMaW1pdGVyIH0gZnJvbSBcIi4uL2xpbWl0ZXJcIjtcbmltcG9ydCB7IEF1ZGlvRW5jb2RlciB9IGZyb20gXCIuL2F1ZGlvXCI7XG5pbXBvcnQgeyBDb2RlY1N0YXRlIH0gZnJvbSBcIi4vY29kZWNcIjtcbmltcG9ydCB7IGNyZWF0ZVZpZGVvRW5jb2RlciwgdHlwZSBId0VuY29kZXIgfSBmcm9tIFwiLi9mYWN0b3J5XCI7XG5pbXBvcnQgeyBGb3JtYXRNdXhlciB9IGZyb20gXCIuL211eGVyXCI7XG5pbXBvcnQgeyBtYWtlRnJhbWUgfSBmcm9tIFwiLi9taXNjXCI7XG5pbXBvcnQgeyBWaWRlb0VuY29kZXIgfSBmcm9tIFwiLi92aWRlb1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEVuY29kZXJQaXBlbGluZU9wdGlvbnMge1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgZnBzOiBudW1iZXI7XG4gIG91dEZpbGU6IHN0cmluZztcbiAgd2l0aEF1ZGlvPzogYm9vbGVhbjtcbiAgZGlzYWJsZUh3Q29kZWM/OiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgUGlwZWxpbmVTdGF0ZSB7XG4gIHZpZGVvPzogVmlkZW9FbmNvZGVyO1xuICBod1ZpZGVvPzogSHdFbmNvZGVyO1xuICBhdWRpbz86IEF1ZGlvRW5jb2RlcjtcbiAgbXV4ZXI6IEZvcm1hdE11eGVyO1xuICBsaW1pdGVyOiBDb25jdXJyZW5jeUxpbWl0ZXI7XG4gIG91dEZpbGU6IHN0cmluZztcbiAgY29kZWM/OiBDb2RlY1N0YXRlO1xuICBodz86IEhhcmR3YXJlQ29udGV4dDtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG59XG5cbmV4cG9ydCBjbGFzcyBFbmNvZGVyUGlwZWxpbmUge1xuICBwcml2YXRlIF9zOiBQaXBlbGluZVN0YXRlO1xuICBwcml2YXRlIF9kaXNwb3NlZCA9IGZhbHNlO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoczogUGlwZWxpbmVTdGF0ZSkge1xuICAgIHRoaXMuX3MgPSBzO1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIGNyZWF0ZShvcHRzOiBFbmNvZGVyUGlwZWxpbmVPcHRpb25zKTogUHJvbWlzZTxFbmNvZGVyUGlwZWxpbmU+IHtcbiAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQsIG91dEZpbGUsIHdpdGhBdWRpbyA9IGZhbHNlIH0gPSBvcHRzO1xuICAgIGNvbnN0IG11eGVyID0gbmV3IEZvcm1hdE11eGVyKG91dEZpbGUpO1xuICAgIGNvbnN0IHsgdmlkZW8sIGh3VmlkZW8sIGNvZGVjLCBodyB9ID0gYXdhaXQgY3JlYXRlVmlkZW9FbmNvZGVyKG9wdHMsIG11eGVyKTtcblxuICAgIGxldCBhdWRpbzogQXVkaW9FbmNvZGVyIHwgdW5kZWZpbmVkO1xuICAgIGlmICh3aXRoQXVkaW8pIHtcbiAgICAgIGF1ZGlvID0gYXdhaXQgQXVkaW9FbmNvZGVyLmNyZWF0ZSh7XG4gICAgICAgIG91dFNhbXBsZVJhdGU6IDQ0XzEwMCxcbiAgICAgICAgb3V0U2FtcGxlRm10OiBBVl9TQU1QTEVfRk1UX0ZMVFAsXG4gICAgICAgIGNvZGVjTmFtZTogRkZfRU5DT0RFUl9BQUMsXG4gICAgICAgIGdsb2JhbEhlYWRlcjogdHJ1ZSxcbiAgICAgICAgYml0cmF0ZTogMTI4XzAwMCxcbiAgICAgICAgbXV4ZXIsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBhd2FpdCBtdXhlci5vcGVuKCk7XG4gICAgcmV0dXJuIG5ldyBFbmNvZGVyUGlwZWxpbmUoe1xuICAgICAgdmlkZW8sXG4gICAgICBod1ZpZGVvLFxuICAgICAgYXVkaW8sXG4gICAgICBtdXhlcixcbiAgICAgIGxpbWl0ZXI6IG5ldyBDb25jdXJyZW5jeUxpbWl0ZXIoMSksXG4gICAgICBvdXRGaWxlLFxuICAgICAgY29kZWMsXG4gICAgICBodyxcbiAgICAgIHdpZHRoLFxuICAgICAgaGVpZ2h0LFxuICAgIH0pO1xuICB9XG5cbiAgc2V0dXBBdWRpbyhzYW1wbGVSYXRlOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9zLmF1ZGlvPy5zZXRJbnB1dFJhdGUoc2FtcGxlUmF0ZSk7XG4gIH1cblxuICBhc3luYyBlbmNvZGVCR1JBKGlucHV0OiBCdWZmZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLl9zLmxpbWl0ZXIuc2NoZWR1bGUoYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgeyBod1ZpZGVvLCB2aWRlbywgY29kZWMsIG11eGVyIH0gPSB0aGlzLl9zO1xuICAgICAgaWYgKGh3VmlkZW8pIHtcbiAgICAgICAgdXNpbmcgZnJhbWUgPSB0aGlzLmJncmFGcmFtZShpbnB1dCk7XG4gICAgICAgIGF3YWl0IGh3VmlkZW8uZW5jb2RlKGZyYW1lLCBtdXhlcik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHsgc3JjLCBkc3QsIHN3cyB9ID0gY29kZWMhO1xuICAgICAgb2soc3dzLCBcInN3cyBub3QgaW5pdGlhbGl6ZWRcIik7XG4gICAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3Ioc3JjLm1ha2VXcml0YWJsZSgpLCBcImJncmFTcmMubWFrZVdyaXRhYmxlXCIpO1xuICAgICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKHNyYy5mcm9tQnVmZmVyKGlucHV0KSwgXCJiZ3JhU3JjLmZyb21CdWZmZXJcIik7XG4gICAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoZHN0Lm1ha2VXcml0YWJsZSgpLCBcImJncmFEc3QubWFrZVdyaXRhYmxlXCIpO1xuICAgICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IHN3cy5zY2FsZUZyYW1lKGRzdCwgc3JjKSwgXCJiZ3JhU3dzLnNjYWxlRnJhbWVcIik7XG4gICAgICByZXR1cm4gdmlkZW8hLmVuY29kZShkc3QsIG11eGVyKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGVuY29kZVBORyhwbmdEYXRhOiBCdWZmZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLl9zLmxpbWl0ZXIuc2NoZWR1bGUoYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgeyBod1ZpZGVvLCB2aWRlbywgY29kZWMsIG11eGVyLCB3aWR0aCwgaGVpZ2h0IH0gPSB0aGlzLl9zO1xuICAgICAgY29uc3QgY3MgPSBjb2RlYyA/PyAoYXdhaXQgQ29kZWNTdGF0ZS5jcmVhdGUod2lkdGgsIGhlaWdodCkpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3Qgc3JjID0gYXdhaXQgY3MuZGVjb2RlUE5HKHBuZ0RhdGEpO1xuICAgICAgICBpZiAoaHdWaWRlbykge1xuICAgICAgICAgIGF3YWl0IGh3VmlkZW8uZW5jb2RlKHNyYywgbXV4ZXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihjcy5kc3QubWFrZVdyaXRhYmxlKCksIFwicG5nRHN0Lm1ha2VXcml0YWJsZVwiKTtcbiAgICAgICAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgY3Muc3dzLnNjYWxlRnJhbWUoY3MuZHN0LCBzcmMpLCBcInBuZ1N3cy5zY2FsZUZyYW1lXCIpO1xuICAgICAgICAgIGF3YWl0IHZpZGVvIS5lbmNvZGUoY3MuZHN0LCBtdXhlcik7XG4gICAgICAgIH1cbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGlmICghY29kZWMpIGNzW1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZW5jb2RlQXVkaW8ocGNtOiBCdWZmZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IGF1ZGlvLCBsaW1pdGVyLCBtdXhlciB9ID0gdGhpcy5fcztcbiAgICBpZiAoYXVkaW8pIGF3YWl0IGxpbWl0ZXIuc2NoZWR1bGUoKCkgPT4gYXVkaW8uZW5jb2RlKHBjbSwgbXV4ZXIpKTtcbiAgfVxuXG4gIGFzeW5jIGZpbmlzaCgpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IHsgdmlkZW8sIGh3VmlkZW8sIGF1ZGlvLCBtdXhlciwgbGltaXRlciB9ID0gdGhpcy5fcztcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdXNpbmcgX20gPSBtdXhlcjtcbiAgICAgIHVzaW5nIF92ID0gdmlkZW87XG4gICAgICB1c2luZyBfaHYgPSBod1ZpZGVvO1xuICAgICAgdXNpbmcgX2EgPSBhdWRpbztcbiAgICAgIGF3YWl0IGxpbWl0ZXIuZHJhaW4oKTtcbiAgICAgIGF3YWl0IGF1ZGlvPy5mbHVzaChtdXhlcik7XG4gICAgICBpZiAoaHdWaWRlbykge1xuICAgICAgICBhd2FpdCBod1ZpZGVvLmZsdXNoKG11eGVyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGF3YWl0IHZpZGVvIS5mbHVzaChtdXhlcik7XG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuZnJlZSgpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fcy5vdXRGaWxlO1xuICB9XG5cbiAgYXN5bmMgW1N5bWJvbC5hc3luY0Rpc3Bvc2VdKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9kaXNwb3NlZCkgcmV0dXJuO1xuICAgIGNvbnN0IHsgdmlkZW8sIGh3VmlkZW8sIGF1ZGlvLCBtdXhlciwgbGltaXRlciB9ID0gdGhpcy5fcztcbiAgICBhd2FpdCBsaW1pdGVyLmRyYWluKCk7XG4gICAgdmlkZW8/LltTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICBod1ZpZGVvPy5bU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgYXVkaW8/LltTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICBhd2FpdCBtdXhlcltTeW1ib2wuYXN5bmNEaXNwb3NlXSgpO1xuICAgIHRoaXMuZnJlZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBmcmVlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9kaXNwb3NlZCkgcmV0dXJuO1xuICAgIHRoaXMuX2Rpc3Bvc2VkID0gdHJ1ZTtcbiAgICB1c2luZyBfY29kZWMgPSB0aGlzLl9zLmNvZGVjO1xuICAgIHRoaXMuX3MuaHc/LmRpc3Bvc2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgYmdyYUZyYW1lKGlucHV0OiBCdWZmZXIpOiBGcmFtZSB7XG4gICAgY29uc3QgZnJhbWUgPSBtYWtlRnJhbWUodGhpcy5fcy53aWR0aCwgdGhpcy5fcy5oZWlnaHQsIEFWX1BJWF9GTVRfQkdSQSk7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGZyYW1lLmZyb21CdWZmZXIoaW5wdXQpLCBcImJncmFGcmFtZS5mcm9tQnVmZmVyXCIpO1xuICAgIHJldHVybiBmcmFtZTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMy8yMy5cblxuLyoqXG4gKiBGcmFtZSBkcm9wIHF1YWxpdHkgc2NvcmUgKDAgPSBwZXJmZWN0LCAxID0gd29yc3QpLlxuICpcbiAqIENvbWJpbmVzIHR3byBkaW1lbnNpb25zOlxuICogLSBHbG9iYWw6IG92ZXJhbGwgZHJvcCByYXRlIGFjcm9zcyB0aGUgdGltZWxpbmVcbiAqIC0gTG9jYWw6IHBlcmNlcHR1YWwgc2V2ZXJpdHkgb2YgY29uc2VjdXRpdmUgZHJvcHMgKGJ1cnN0cylcbiAqXG4gKiBVc2VzIGNvbXBsZW1lbnRhcnkgbXVsdGlwbGljYXRpb246IHNjb3JlID0gMSAtICgxLWcpKDEtbClcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGcmFtZURyb3BTY29yZSB7XG4gIGdsb2JhbDogbnVtYmVyO1xuICBsb2NhbDogbnVtYmVyO1xuICBqYW5rOiBudW1iZXI7XG4gIGV4cGVjdGVkOiBudW1iZXI7XG4gIGFjdHVhbDogbnVtYmVyO1xuICBtYXhCdXJzdDogbnVtYmVyO1xufVxuXG5leHBvcnQgY2xhc3MgRnJhbWVEcm9wU3RhdHMge1xuICBwcml2YXRlIHJlYWRvbmx5IF9mcHM6IG51bWJlcjtcbiAgcHJpdmF0ZSBfYWN0dWFsID0gMDtcbiAgcHJpdmF0ZSBfY3VycmVudEJ1cnN0ID0gMDtcbiAgcHJpdmF0ZSBfYnVyc3RzOiBudW1iZXJbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKGZwczogbnVtYmVyKSB7XG4gICAgdGhpcy5fZnBzID0gZnBzO1xuICB9XG5cbiAgLyoqIENhbGwgd2hlbiBhIGZyYW1lIGlzIGFjdHVhbGx5IHdyaXR0ZW4gdG8gdGhlIGVuY29kZXIuICovXG4gIHdyb3RlKGNvdW50ID0gMSk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9jdXJyZW50QnVyc3QgPiAwKSB7XG4gICAgICB0aGlzLl9idXJzdHMucHVzaCh0aGlzLl9jdXJyZW50QnVyc3QpO1xuICAgICAgdGhpcy5fY3VycmVudEJ1cnN0ID0gMDtcbiAgICB9XG4gICAgdGhpcy5fYWN0dWFsICs9IGNvdW50O1xuICB9XG5cbiAgLyoqIENhbGwgd2hlbiBhIGZyYW1lIGlzIGRyb3BwZWQuICovXG4gIGRyb3BwZWQoY291bnQgPSAxKTogdm9pZCB7XG4gICAgdGhpcy5fY3VycmVudEJ1cnN0ICs9IGNvdW50O1xuICB9XG5cbiAgLyoqIEZpbmFsaXplIGFuZCByZXR1cm4gdGhlIHNjb3JlLiAqL1xuICBmaW5hbGl6ZSgpOiBGcmFtZURyb3BTY29yZSB7XG4gICAgaWYgKHRoaXMuX2N1cnJlbnRCdXJzdCA+IDApIHtcbiAgICAgIHRoaXMuX2J1cnN0cy5wdXNoKHRoaXMuX2N1cnJlbnRCdXJzdCk7XG4gICAgICB0aGlzLl9jdXJyZW50QnVyc3QgPSAwO1xuICAgIH1cblxuICAgIGxldCB0b3RhbERyb3BwZWQgPSAwO1xuICAgIGxldCBsb2NhbFN1bSA9IDA7XG4gICAgbGV0IG1heEJ1cnN0ID0gMDtcbiAgICBmb3IgKGNvbnN0IGJ1cnN0IG9mIHRoaXMuX2J1cnN0cykge1xuICAgICAgdG90YWxEcm9wcGVkICs9IGJ1cnN0O1xuICAgICAgbWF4QnVyc3QgPSBNYXRoLm1heChtYXhCdXJzdCwgYnVyc3QpO1xuICAgICAgY29uc3QgcGVyY2VwdGlibGUgPSBNYXRoLm1heCgwLCBidXJzdCAtIDEpO1xuICAgICAgbG9jYWxTdW0gKz0gKHBlcmNlcHRpYmxlIC8gdGhpcy5fZnBzKSAqKiAyO1xuICAgIH1cblxuICAgIGNvbnN0IGV4cGVjdGVkID0gdGhpcy5fYWN0dWFsICsgdG90YWxEcm9wcGVkO1xuICAgIGNvbnN0IGcgPSBleHBlY3RlZCA+IDAgPyB0b3RhbERyb3BwZWQgLyBleHBlY3RlZCA6IDA7XG4gICAgY29uc3QgbCA9IE1hdGgubWluKDEsIGxvY2FsU3VtKTtcbiAgICBjb25zdCBzY29yZSA9IDEgLSAoMSAtIGcpICogKDEgLSBsKTtcblxuICAgIHJldHVybiB7IGdsb2JhbDogZywgbG9jYWw6IGwsIGphbms6IHNjb3JlLCBleHBlY3RlZCwgYWN0dWFsOiB0aGlzLl9hY3R1YWwsIG1heEJ1cnN0IH07XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDYuXG5cbmltcG9ydCB0eXBlIHsgTmF0aXZlSW1hZ2UsIFNpemUgfSBmcm9tIFwiZWxlY3Ryb25cIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzRW1wdHkoaW1hZ2U6IE5hdGl2ZUltYWdlKSB7XG4gIGNvbnN0IHNpemUgPSBpbWFnZS5nZXRTaXplKCk7XG4gIGlmIChzaXplLndpZHRoID09PSAwIHx8IHNpemUuaGVpZ2h0ID09PSAwKSByZXR1cm4gdHJ1ZTtcbiAgcmV0dXJuIGltYWdlLmlzRW1wdHkoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNpemVFcXVhbHMoYTogU2l6ZSwgYjogU2l6ZSkge1xuICByZXR1cm4gYS53aWR0aCA9PT0gYi53aWR0aCAmJiBhLmhlaWdodCA9PT0gYi5oZWlnaHQ7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAzLzAyLlxuXG5pbXBvcnQgeyByYW5kb21VVUlEIH0gZnJvbSBcImNyeXB0b1wiO1xuaW1wb3J0IHsgaXBjTWFpbiwgc2Vzc2lvbiB9IGZyb20gXCJlbGVjdHJvblwiO1xuaW1wb3J0IHsgcm0sIHdyaXRlRmlsZSB9IGZyb20gXCJmcy9wcm9taXNlc1wiO1xuaW1wb3J0IHsgdG1wZGlyIH0gZnJvbSBcIm9zXCI7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSBcInBhdGhcIjtcbmltcG9ydCB0eXBlIHsgRW5jb2RlclBpcGVsaW5lIH0gZnJvbSBcIi4uL2Jhc2UvZW5jb2Rlci9waXBlbGluZVwiO1xuXG5jb25zdCBBVURJT19NRVRBX0NIQU5ORUwgPSBcImF1ZGlvLW1ldGFcIjtcbmNvbnN0IEFVRElPX0NIVU5LX0NIQU5ORUwgPSBcImF1ZGlvLWNodW5rXCI7XG5cbmNvbnN0IEFVRElPX0NBUFRVUkVfU0NSSVBUID0gYFxuKGZ1bmN0aW9uKCkge1xuICBpZiAod2luZG93Ll9fcHVwX2F1ZGlvX2NhcHR1cmluZ19fKSByZXR1cm47XG4gIHdpbmRvdy5fX3B1cF9hdWRpb19jYXB0dXJpbmdfXyA9IHRydWU7XG5cbiAgY29uc3QgeyBpcGNSZW5kZXJlciB9ID0gcmVxdWlyZSgnZWxlY3Ryb24nKTtcbiAgY29uc3QgY2FwdHVyZWRDb250ZXh0cyA9IG5ldyBXZWFrU2V0KCk7XG4gIGNvbnN0IHNvdXJjZWRFbGVtZW50cyA9IG5ldyBXZWFrU2V0KCk7XG4gIGxldCBtZXRhU2VudCA9IGZhbHNlO1xuXG4gIGNvbnN0IG9yaWdDcmVhdGVNRVMgPSBBdWRpb0NvbnRleHQucHJvdG90eXBlLmNyZWF0ZU1lZGlhRWxlbWVudFNvdXJjZTtcbiAgQXVkaW9Db250ZXh0LnByb3RvdHlwZS5jcmVhdGVNZWRpYUVsZW1lbnRTb3VyY2UgPSBmdW5jdGlvbihlbCkge1xuICAgIHNvdXJjZWRFbGVtZW50cy5hZGQoZWwpO1xuICAgIHJldHVybiBvcmlnQ3JlYXRlTUVTLmNhbGwodGhpcywgZWwpO1xuICB9O1xuXG4gIGNvbnN0IG9yaWdDb25uZWN0ID0gQXVkaW9Ob2RlLnByb3RvdHlwZS5jb25uZWN0O1xuICBBdWRpb05vZGUucHJvdG90eXBlLmNvbm5lY3QgPSBmdW5jdGlvbihkZXN0LCBvdXRJZHgsIGluSWR4KSB7XG4gICAgY29uc3QgY2FwdHVyZU5vZGUgPSBkZXN0Py5jb250ZXh0Py5fX3B1cF9jYXB0dXJlTm9kZV9fO1xuICAgIGlmIChjYXB0dXJlTm9kZSAmJiBkZXN0ID09PSBkZXN0LmNvbnRleHQuZGVzdGluYXRpb24gJiYgdGhpcyAhPT0gY2FwdHVyZU5vZGUpIHtcbiAgICAgIG9yaWdDb25uZWN0LmNhbGwodGhpcywgY2FwdHVyZU5vZGUsIG91dElkeCwgaW5JZHgpO1xuICAgIH1cbiAgICByZXR1cm4gb3JpZ0Nvbm5lY3QuY2FsbCh0aGlzLCBkZXN0LCBvdXRJZHgsIGluSWR4KTtcbiAgfTtcblxuICBjb25zdCBPcmlnQUMgPSB3aW5kb3cuQXVkaW9Db250ZXh0IHx8IHdpbmRvdy53ZWJraXRBdWRpb0NvbnRleHQ7XG4gIGlmICghT3JpZ0FDKSByZXR1cm47XG5cbiAgZnVuY3Rpb24gUGF0Y2hlZEFDKCkge1xuICAgIGNvbnN0IGN0eCA9IG5ldyBPcmlnQUMoLi4uYXJndW1lbnRzKTtcbiAgICBpZiAoIWNhcHR1cmVkQ29udGV4dHMuaGFzKGN0eCkpIHtcbiAgICAgIGNhcHR1cmVkQ29udGV4dHMuYWRkKGN0eCk7XG4gICAgICBpZiAoIW1ldGFTZW50KSB7XG4gICAgICAgIG1ldGFTZW50ID0gdHJ1ZTtcbiAgICAgICAgaXBjUmVuZGVyZXIuc2VuZCgnJHtBVURJT19NRVRBX0NIQU5ORUx9JywgeyBzYW1wbGVSYXRlOiBjdHguc2FtcGxlUmF0ZSB9KTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG5vZGUgPSBjdHguY3JlYXRlU2NyaXB0UHJvY2Vzc29yKDQwOTYsIDIsIDIpO1xuICAgICAgbm9kZS5vbmF1ZGlvcHJvY2VzcyA9IChlKSA9PiB7XG4gICAgICAgIGNvbnN0IEwgPSBlLmlucHV0QnVmZmVyLmdldENoYW5uZWxEYXRhKDApO1xuICAgICAgICBjb25zdCBSID0gZS5pbnB1dEJ1ZmZlci5nZXRDaGFubmVsRGF0YSgxKTtcbiAgICAgICAgY29uc3Qgb3V0ID0gbmV3IEZsb2F0MzJBcnJheShMLmxlbmd0aCAqIDIpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IEwubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBvdXRbaSAqIDJdID0gTFtpXTtcbiAgICAgICAgICBvdXRbaSAqIDIgKyAxXSA9IFJbaV07XG4gICAgICAgIH1cbiAgICAgICAgaXBjUmVuZGVyZXIuc2VuZCgnJHtBVURJT19DSFVOS19DSEFOTkVMfScsIEJ1ZmZlci5mcm9tKG91dC5idWZmZXIpKTtcbiAgICAgIH07XG4gICAgICBub2RlLmNvbm5lY3QoY3R4LmRlc3RpbmF0aW9uKTtcbiAgICAgIGN0eC5fX3B1cF9jYXB0dXJlTm9kZV9fID0gbm9kZTtcbiAgICB9XG4gICAgcmV0dXJuIGN0eDtcbiAgfVxuICBQYXRjaGVkQUMucHJvdG90eXBlID0gT3JpZ0FDLnByb3RvdHlwZTtcbiAgT2JqZWN0LnNldFByb3RvdHlwZU9mKFBhdGNoZWRBQywgT3JpZ0FDKTtcbiAgd2luZG93LkF1ZGlvQ29udGV4dCA9IFBhdGNoZWRBQztcbiAgaWYgKCd3ZWJraXRBdWRpb0NvbnRleHQnIGluIHdpbmRvdykgd2luZG93LndlYmtpdEF1ZGlvQ29udGV4dCA9IFBhdGNoZWRBQztcblxuICBjb25zdCBvcmlnUGxheSA9IEhUTUxNZWRpYUVsZW1lbnQucHJvdG90eXBlLnBsYXk7XG4gIEhUTUxNZWRpYUVsZW1lbnQucHJvdG90eXBlLnBsYXkgPSBmdW5jdGlvbigpIHtcbiAgICBpZiAoIXRoaXMuX19wdXBfY2FwdHVyZWRfXykge1xuICAgICAgdGhpcy5fX3B1cF9jYXB0dXJlZF9fID0gdHJ1ZTtcbiAgICAgIGNvbnN0IGVsID0gdGhpcztcbiAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICBpZiAoIXNvdXJjZWRFbGVtZW50cy5oYXMoZWwpKSB7XG4gICAgICAgICAgY29uc3QgY3R4ID0gbmV3IFBhdGNoZWRBQygpO1xuICAgICAgICAgIGN0eC5jcmVhdGVNZWRpYUVsZW1lbnRTb3VyY2UoZWwpLmNvbm5lY3QoY3R4LmRlc3RpbmF0aW9uKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBvcmlnUGxheS5jYWxsKHRoaXMpO1xuICB9O1xufSkoKTtcbmA7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXVkaW9DYXB0dXJlIHtcbiAgdGVhcmRvd24oKTogUHJvbWlzZTx2b2lkPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBdWRpb0NhcHR1cmVPcHRpb25zIHtcbiAgZW5jb2RlcjogRW5jb2RlclBpcGVsaW5lO1xuICBnZXRWaWRlb1RpbWVNczogKCkgPT4gbnVtYmVyO1xuICBvbkVycm9yOiAoZXJyb3I6IEVycm9yKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2V0dXBBdWRpb0NhcHR1cmUoe1xuICBlbmNvZGVyLFxuICBnZXRWaWRlb1RpbWVNcyxcbiAgb25FcnJvcixcbn06IEF1ZGlvQ2FwdHVyZU9wdGlvbnMpOiBQcm9taXNlPEF1ZGlvQ2FwdHVyZT4ge1xuICBjb25zdCBwcmVsb2FkUGF0aCA9IGpvaW4odG1wZGlyKCksIGBwdXBfYXVkaW9fJHtyYW5kb21VVUlEKCl9LmpzYCk7XG4gIGF3YWl0IHdyaXRlRmlsZShwcmVsb2FkUGF0aCwgQVVESU9fQ0FQVFVSRV9TQ1JJUFQpO1xuICBzZXNzaW9uLmRlZmF1bHRTZXNzaW9uLnJlZ2lzdGVyUHJlbG9hZFNjcmlwdCh7XG4gICAgdHlwZTogXCJmcmFtZVwiLFxuICAgIGlkOiBcInB1cC1hdWRpb1wiLFxuICAgIGZpbGVQYXRoOiBwcmVsb2FkUGF0aCxcbiAgfSk7XG5cbiAgaXBjTWFpbi5vbihBVURJT19NRVRBX0NIQU5ORUwsIGFzeW5jIChfZSwgZGF0YTogeyBzYW1wbGVSYXRlOiBudW1iZXIgfSkgPT4ge1xuICAgIGNvbnN0IHNhbXBsZVJhdGUgPSBkYXRhLnNhbXBsZVJhdGU7XG4gICAgY29uc3Qgc3RhcnRNcyA9IGdldFZpZGVvVGltZU1zKCk7XG4gICAgZW5jb2Rlci5zZXR1cEF1ZGlvKHNhbXBsZVJhdGUpO1xuICAgIGNvbnN0IHNpbGVuY2VTYW1wbGVzID0gTWF0aC5jZWlsKChzdGFydE1zICogc2FtcGxlUmF0ZSkgLyAxMDAwKTtcbiAgICBpZiAoc2lsZW5jZVNhbXBsZXMgPD0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgYXdhaXQgZW5jb2Rlci5lbmNvZGVBdWRpbyhCdWZmZXIuYWxsb2Moc2lsZW5jZVNhbXBsZXMgKiAyICogNCkpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBvbkVycm9yKGVycm9yIGFzIEVycm9yKTtcbiAgICB9XG4gIH0pO1xuXG4gIGlwY01haW4ub24oQVVESU9fQ0hVTktfQ0hBTk5FTCwgYXN5bmMgKF9lLCBidWZmZXI6IEJ1ZmZlcikgPT4ge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBlbmNvZGVyLmVuY29kZUF1ZGlvKGJ1ZmZlcik7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIG9uRXJyb3IoZXJyb3IgYXMgRXJyb3IpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHtcbiAgICBhc3luYyB0ZWFyZG93bigpIHtcbiAgICAgIGlwY01haW4ucmVtb3ZlQWxsTGlzdGVuZXJzKEFVRElPX01FVEFfQ0hBTk5FTCk7XG4gICAgICBpcGNNYWluLnJlbW92ZUFsbExpc3RlbmVycyhBVURJT19DSFVOS19DSEFOTkVMKTtcbiAgICAgIHNlc3Npb24uZGVmYXVsdFNlc3Npb24udW5yZWdpc3RlclByZWxvYWRTY3JpcHQoXCJwdXAtYXVkaW9cIik7XG4gICAgICBhd2FpdCBybShwcmVsb2FkUGF0aCwgeyBmb3JjZTogdHJ1ZSB9KTtcbiAgICB9LFxuICB9O1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wOS5cblxuZXhwb3J0IGZ1bmN0aW9uIHNsZWVwKG1zOiBudW1iZXIpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIG1zKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwZXJpb2RpY2FsKGNhbGxiYWNrOiAoY291bnQ6IG51bWJlcikgPT4gUHJvbWlzZTx2b2lkPiB8IHZvaWQsIG1zOiBudW1iZXIpIHtcbiAgbGV0IHRva2VuOiBOb2RlSlMuVGltZW91dDtcbiAgbGV0IGNsb3NlZCA9IGZhbHNlO1xuICBhc3luYyBmdW5jdGlvbiB0aWNrKGNvdW50OiBudW1iZXIpIHtcbiAgICBhd2FpdCBjYWxsYmFjayhjb3VudCk7XG4gICAgaWYgKGNsb3NlZCkgcmV0dXJuO1xuICAgIHRva2VuID0gc2V0VGltZW91dCgoKSA9PiB0aWNrKGNvdW50ICsgMSksIG1zKTtcbiAgfVxuICB0b2tlbiA9IHNldFRpbWVvdXQoKCkgPT4gdGljaygwKSwgbXMpO1xuICByZXR1cm4gKCkgPT4ge1xuICAgIGNsb3NlZCA9IHRydWU7XG4gICAgY2xlYXJUaW1lb3V0KHRva2VuKTtcbiAgfTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDUuXG5cbmltcG9ydCB7IHNldFRpbWVvdXQgfSBmcm9tIFwidGltZXJzL3Byb21pc2VzXCI7XG5pbXBvcnQgeyBzbGVlcCB9IGZyb20gXCIuL3RpbWluZ1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJldHJ5T3B0aW9uczxBcmdzIGV4dGVuZHMgYW55W10sIFJldD4ge1xuICBmbjogKC4uLmFyZ3M6IEFyZ3MpID0+IFByb21pc2U8UmV0PjtcbiAgbWF4QXR0ZW1wdHM/OiBudW1iZXI7XG4gIHRpbWVvdXQ/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VSZXRyeTxBcmdzIGV4dGVuZHMgYW55W10sIFJldD4oeyBmbiwgbWF4QXR0ZW1wdHMgPSAzLCB0aW1lb3V0IH06IFJldHJ5T3B0aW9uczxBcmdzLCBSZXQ+KSB7XG4gIGNvbnN0IHRpbWVvdXRFcnJvciA9IG5ldyBFcnJvcihgdGltZW91dCBvdmVyICR7dGltZW91dH1tc2ApO1xuICByZXR1cm4gYXN5bmMgZnVuY3Rpb24gKC4uLmFyZ3M6IEFyZ3MpIHtcbiAgICBsZXQgYXR0ZW1wdCA9IDA7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHByb21pc2VzID0gW2ZuKC4uLmFyZ3MpXTtcbiAgICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAgICBwcm9taXNlcy5wdXNoKFxuICAgICAgICAgICAgc2V0VGltZW91dCh0aW1lb3V0KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgdGhyb3cgdGltZW91dEVycm9yO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXdhaXQgUHJvbWlzZS5yYWNlKHByb21pc2VzKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgYXR0ZW1wdCsrO1xuICAgICAgICBpZiAoYXR0ZW1wdCA+PSBtYXhBdHRlbXB0cykge1xuICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgc2xlZXAoTWF0aC5wb3coMiwgYXR0ZW1wdCkgKiAxMDAgKyBNYXRoLnJhbmRvbSgpICogMTAwKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA5LlxuXG5jb25zdCBTVVBQT1JURURfUFJPVE9DT0xTID0gW1wiZmlsZTpcIiwgXCJodHRwOlwiLCBcImh0dHBzOlwiLCBcImRhdGE6XCJdO1xuY29uc3QgU09VUkNFX1BBVFRFUk4gPSAvXihmaWxlOnxodHRwcz86fGRhdGE6KS87XG5cbmV4cG9ydCBmdW5jdGlvbiBjaGVja0hUTUwoc291cmNlOiBzdHJpbmcpOiB2b2lkIHtcbiAgaWYgKFNPVVJDRV9QQVRURVJOLnRlc3Qoc291cmNlKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHByb3RvY29sID0gc291cmNlLnNwbGl0KFwiOlwiKVswXSArIFwiOlwiO1xuICBjb25zdCBtZXNzYWdlID0gU1VQUE9SVEVEX1BST1RPQ09MUy5pbmNsdWRlcyhwcm90b2NvbClcbiAgICA/IGB1bnN1cHBvcnRlZCBwcm90b2NvbDogJHtwcm90b2NvbH0sIGV4cGVjdGVkICR7U1VQUE9SVEVEX1BST1RPQ09MUy5qb2luKFwiLCBcIil9YFxuICAgIDogYGludmFsaWQgc291cmNlIGZvcm1hdCwgZXhwZWN0ZWQgJHtTVVBQT1JURURfUFJPVE9DT0xTLmpvaW4oXCIsIFwiKX1gO1xuXG4gIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDMvMTAuXG5cbmV4cG9ydCBpbnRlcmZhY2UgV2FpdE9wdGlvbnMge1xuICB0aW1lb3V0OiBudW1iZXI7XG4gIG9uVGltZW91dD86ICgpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBjbGFzcyBXYWl0YWJsZUV2ZW50IHtcbiAgcHJpdmF0ZSBfcHJvbWlzZT86IFByb21pc2U8dm9pZD47XG4gIHByaXZhdGUgX3Jlc29sdmU/OiAoKSA9PiB2b2lkO1xuICBwcml2YXRlIF90aW1lb3V0VG9rZW4/OiBOb2RlSlMuVGltZW91dDtcblxuICB3YWl0KG9wdGlvbnM/OiBXYWl0T3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9wcm9taXNlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJhbHJlYWR5IHdhaXRpbmdcIik7XG4gICAgfVxuICAgIHRoaXMuX3Byb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgdGhpcy5fcmVzb2x2ZSA9IHJlc29sdmU7XG4gICAgICBpZiAob3B0aW9ucz8udGltZW91dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuX3RpbWVvdXRUb2tlbiA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIG9wdGlvbnMub25UaW1lb3V0Py4oKTtcbiAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH0sIG9wdGlvbnMudGltZW91dCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuX3Byb21pc2U7XG4gIH1cblxuICBzaWduYWwoKSB7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVvdXRUb2tlbik7XG4gICAgdGhpcy5fcHJvbWlzZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLl9yZXNvbHZlPy4oKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wOS5cblxuaW1wb3J0IHsgQnJvd3NlcldpbmRvdyB9IGZyb20gXCJlbGVjdHJvblwiO1xuaW1wb3J0IHsgVVJMIH0gZnJvbSBcInVybFwiO1xuaW1wb3J0IHsgQ29uY3VycmVuY3lMaW1pdGVyIH0gZnJvbSBcIi4uL2Jhc2UvbGltaXRlclwiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4uL2Jhc2UvbG9nZ2luZ1wiO1xuaW1wb3J0IHsgV2FpdGFibGVFdmVudCB9IGZyb20gXCIuLi9iYXNlL3dhaXRhYmxlX2V2ZW50XCI7XG5cbmNvbnN0IFRBRyA9IFwiW05ldHdvcmtdXCI7XG5cbmNvbnN0IG1hcCA9IG5ldyBNYXAoW1xuICBbYGpzc3otYm9zcy5oZHNsYi5jb21gLCBganNzei1ib3NzLmJpbGliaWxpLmNvYF0sIC8vXG4gIFtgYm9zcy5oZHNsYi5jb21gLCBgc2hqZC1ib3NzLmJpbGliaWxpLmNvYF0sXG5dKTtcblxuZXhwb3J0IGZ1bmN0aW9uIHByb3hpZWRVcmwodXJsOiBzdHJpbmcpIHtcbiAgaWYgKCF1cmwuc3RhcnRzV2l0aChcImh0dHBcIikpIHtcbiAgICByZXR1cm4gdXJsO1xuICB9XG4gIGNvbnN0IHBhcnNlZCA9IG5ldyBVUkwodXJsKTtcbiAgY29uc3QgdGFyZ2V0ID0gbWFwLmdldChwYXJzZWQuaG9zdG5hbWUpO1xuICBpZiAoIXRhcmdldCkge1xuICAgIHJldHVybiB1cmw7XG4gIH1cbiAgcGFyc2VkLmhvc3RuYW1lID0gdGFyZ2V0O1xuICBwYXJzZWQucHJvdG9jb2wgPSBcImh0dHA6XCI7XG4gIHJldHVybiBwYXJzZWQudG9TdHJpbmcoKTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBOZXR3b3JrT3B0aW9ucyB7XG4gIHNvdXJjZTogc3RyaW5nO1xuICB3aW5kb3c6IEJyb3dzZXJXaW5kb3c7XG4gIHVzZUlubmVyUHJveHk/OiBib29sZWFuO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0SW50ZXJjZXB0b3IoeyBzb3VyY2UsIHdpbmRvdywgdXNlSW5uZXJQcm94eSB9OiBOZXR3b3JrT3B0aW9ucykge1xuICBjb25zdCByZXEgPSB3aW5kb3cud2ViQ29udGVudHMuc2Vzc2lvbi53ZWJSZXF1ZXN0O1xuICBjb25zdCBsaW1pdGVyID0gbmV3IENvbmN1cnJlbmN5TGltaXRlcig2NCk7XG4gIGNvbnN0IGV2ZW50cyA9IG5ldyBNYXA8c3RyaW5nLCBXYWl0YWJsZUV2ZW50PigpO1xuXG4gIGFzeW5jIGZ1bmN0aW9uIHdhaXQoa2V5OiBzdHJpbmcsIG9uVGltZW91dD86ICgpID0+IHZvaWQpIHtcbiAgICBjb25zdCBldmVudCA9IG5ldyBXYWl0YWJsZUV2ZW50KCk7XG4gICAgZXZlbnRzLnNldChrZXksIGV2ZW50KTtcbiAgICBhd2FpdCBldmVudC53YWl0KHsgdGltZW91dDogNV8wMDAsIG9uVGltZW91dCB9KS5maW5hbGx5KCgpID0+IGV2ZW50cy5kZWxldGUoa2V5KSk7XG4gIH1cblxuICBmdW5jdGlvbiBzaWduYWwoa2V5OiBzdHJpbmcpIHtcbiAgICBldmVudHMuZ2V0KGtleSk/LnNpZ25hbCgpO1xuICB9XG5cbiAgcmVxLm9uQmVmb3JlUmVxdWVzdCgoZGV0YWlscywgY2FsbGJhY2spID0+IHtcbiAgICBjb25zdCB1cmwgPSBkZXRhaWxzLnVybDtcbiAgICBjb25zdCBwcm94aWVkID0gdXNlSW5uZXJQcm94eSA/IHByb3hpZWRVcmwodXJsKSA6IHVybDtcbiAgICBsaW1pdGVyLnNjaGVkdWxlKCgpID0+IHtcbiAgICAgIGNvbnN0IGtleSA9IGAke3dpbmRvdy5pZH1fJHtkZXRhaWxzLmlkfWA7XG4gICAgICBsb2dnZXIuZGVidWcoVEFHLCBgc3RhcnQ6YCwge1xuICAgICAgICBrZXksXG4gICAgICAgIHVybCxcbiAgICAgICAgcHJveGllZCxcbiAgICAgICAgbWV0aG9kOiBkZXRhaWxzLm1ldGhvZCxcbiAgICAgICAgc291cmNlLFxuICAgICAgICBzdGF0czogbGltaXRlci5zdGF0cyxcbiAgICAgIH0pO1xuICAgICAgaWYgKHByb3hpZWQgPT09IHVybCkge1xuICAgICAgICBjYWxsYmFjayh7IGNhbmNlbDogZmFsc2UgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjYWxsYmFjayh7IGNhbmNlbDogZmFsc2UsIHJlZGlyZWN0VVJMOiBwcm94aWVkIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHdhaXQoa2V5LCAoKSA9PiB7XG4gICAgICAgIGxvZ2dlci53YXJuKFRBRywgYG1heWJlIHRpbWVvdXQ6YCwge1xuICAgICAgICAgIGtleSxcbiAgICAgICAgICB1cmwsXG4gICAgICAgICAgcHJveGllZCxcbiAgICAgICAgICBtZXRob2Q6IGRldGFpbHMubWV0aG9kLFxuICAgICAgICAgIHNvdXJjZSxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgcmVxLm9uSGVhZGVyc1JlY2VpdmVkKCh7IHJlc3BvbnNlSGVhZGVycyB9LCBjYWxsYmFjaykgPT4ge1xuICAgIGRlbGV0ZSByZXNwb25zZUhlYWRlcnM/LltcIngtZnJhbWUtb3B0aW9uc1wiXTtcbiAgICBkZWxldGUgcmVzcG9uc2VIZWFkZXJzPy5bXCJYLUZyYW1lLU9wdGlvbnNcIl07XG4gICAgZGVsZXRlIHJlc3BvbnNlSGVhZGVycz8uW1wiY29udGVudC1zZWN1cml0eS1wb2xpY3lcIl07XG4gICAgZGVsZXRlIHJlc3BvbnNlSGVhZGVycz8uW1wiQ29udGVudC1TZWN1cml0eS1Qb2xpY3lcIl07XG4gICAgY2FsbGJhY2soeyBjYW5jZWw6IGZhbHNlLCByZXNwb25zZUhlYWRlcnMgfSk7XG4gIH0pO1xuXG4gIHJlcS5vbkNvbXBsZXRlZCgoZGV0YWlscykgPT4ge1xuICAgIGNvbnN0IGtleSA9IGAke3dpbmRvdy5pZH1fJHtkZXRhaWxzLmlkfWA7XG4gICAgc2lnbmFsKGtleSk7XG4gICAgbG9nZ2VyLmRlYnVnKFRBRywgYGNvbXBsZXRlZDpgLCB7XG4gICAgICBrZXksXG4gICAgICB1cmw6IGRldGFpbHMudXJsLFxuICAgICAgbWV0aG9kOiBkZXRhaWxzLm1ldGhvZCxcbiAgICAgIHN0YXR1c0NvZGU6IGRldGFpbHMuc3RhdHVzQ29kZSxcbiAgICAgIHNvdXJjZSxcbiAgICB9KTtcbiAgfSk7XG5cbiAgcmVxLm9uRXJyb3JPY2N1cnJlZCgoZGV0YWlscykgPT4ge1xuICAgIGNvbnN0IGtleSA9IGAke3dpbmRvdy5pZH1fJHtkZXRhaWxzLmlkfWA7XG4gICAgc2lnbmFsKGtleSk7XG4gICAgbG9nZ2VyLmVycm9yKFRBRywgYGVycm9yOmAsIHtcbiAgICAgIGtleSxcbiAgICAgIHVybDogZGV0YWlscy51cmwsXG4gICAgICBtZXRob2Q6IGRldGFpbHMubWV0aG9kLFxuICAgICAgZXJyb3I6IGRldGFpbHMuZXJyb3IsXG4gICAgICBzb3VyY2UsXG4gICAgfSk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdW5zZXRJbnRlcmNlcHRvcih3aW5kb3c6IEJyb3dzZXJXaW5kb3cpIHtcbiAgY29uc3QgcmVxID0gd2luZG93LndlYkNvbnRlbnRzLnNlc3Npb24ud2ViUmVxdWVzdDtcbiAgcmVxLm9uQmVmb3JlUmVxdWVzdChudWxsKTtcbiAgcmVxLm9uSGVhZGVyc1JlY2VpdmVkKG51bGwpO1xuICByZXEub25Db21wbGV0ZWQobnVsbCk7XG4gIHJlcS5vbkVycm9yT2NjdXJyZWQobnVsbCk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzI3LlxuXG5pbXBvcnQgeyBCcm93c2VyV2luZG93IH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi4vYmFzZS9sb2dnaW5nXCI7XG5pbXBvcnQgeyB1c2VSZXRyeSB9IGZyb20gXCIuLi9iYXNlL3JldHJ5XCI7XG5pbXBvcnQgeyBzbGVlcCB9IGZyb20gXCIuLi9iYXNlL3RpbWluZ1wiO1xuaW1wb3J0IHsgY2hlY2tIVE1MIH0gZnJvbSBcIi4vaHRtbF9jaGVja1wiO1xuaW1wb3J0IHsgcHJveGllZFVybCwgc2V0SW50ZXJjZXB0b3IsIHVuc2V0SW50ZXJjZXB0b3IgfSBmcm9tIFwiLi9uZXR3b3JrXCI7XG5pbXBvcnQgeyBjcmVhdGVTdGVnb1VSTCB9IGZyb20gXCIuL3Byb3RvY29sXCI7XG5pbXBvcnQgdHlwZSB7IFJlbmRlck9wdGlvbnMgfSBmcm9tIFwiLi9zY2hlbWFcIjtcblxuY29uc3QgVEFHID0gXCJbV2luZG93XVwiO1xuY29uc3QgVElNRU9VVF9FUlJPUiA9IG5ldyBFcnJvcihcIndpbmRvdyB0aW1lb3V0XCIpO1xuXG5pbnRlcmZhY2UgRmluaXNoT3B0aW9ucyB7XG4gIHNvdXJjZTogc3RyaW5nO1xuICB3aW46IEJyb3dzZXJXaW5kb3c7XG4gIGFjdGlvbjogKCkgPT4gdm9pZDtcbiAgdG9sZXJhbnQ/OiBib29sZWFuO1xufVxuXG5mdW5jdGlvbiB3YWl0Rm9yRmluaXNoKHsgc291cmNlLCB3aW4sIGFjdGlvbiwgdG9sZXJhbnQgfTogRmluaXNoT3B0aW9ucykge1xuICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGxldCBpbnRlcnZhbDogTm9kZUpTLlRpbWVvdXQ7XG4gICAgbGV0IHRpbWVvdXQ6IE5vZGVKUy5UaW1lb3V0O1xuXG4gICAgY29uc3QgZG9uZSA9IChlcnI/OiB1bmtub3duKSA9PiB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICBjbGVhckludGVydmFsKGludGVydmFsKTtcbiAgICAgIGlmIChlcnIpIHJlamVjdChlcnIpO1xuICAgICAgZWxzZSByZXNvbHZlKCk7XG4gICAgfTtcblxuICAgIHRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IGRvbmUoVElNRU9VVF9FUlJPUiksIDMwXzAwMCk7XG4gICAgY29uc3Qgc3RlZ29GcmFtZSA9IG5ldyBQcm9taXNlPHZvaWQ+KChhdHRhY2hlZCkgPT4ge1xuICAgICAgaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICAgIGlmICh3aW4ud2ViQ29udGVudHMubWFpbkZyYW1lLmZyYW1lc1swXSkge1xuICAgICAgICAgIGxvZ2dlci5kZWJ1ZyhUQUcsIFwic3RlZ28tZnJhbWUtYXR0YWNoZWQ6XCIsIHsgc291cmNlIH0pO1xuICAgICAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWwpO1xuICAgICAgICAgIGF0dGFjaGVkKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHdpbi53ZWJDb250ZW50cy5vbmNlKFwiZG9tLXJlYWR5XCIsIGFzeW5jICgpID0+IHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhUQUcsIFwiZG9tLXJlYWR5OlwiLCB7IHNvdXJjZSB9KTtcbiAgICAgIGlmICh0b2xlcmFudCkge1xuICAgICAgICBhd2FpdCBzdGVnb0ZyYW1lO1xuICAgICAgICBkb25lKCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgd2luLndlYkNvbnRlbnRzLm9uY2UoXCJkaWQtc3RvcC1sb2FkaW5nXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhUQUcsIFwiZGlkLXN0b3AtbG9hZGluZzpcIiwgeyBzb3VyY2UgfSk7XG4gICAgICBhd2FpdCBzdGVnb0ZyYW1lO1xuICAgICAgZG9uZSgpO1xuICAgIH0pO1xuICAgIHdpbi53ZWJDb250ZW50cy5vbmNlKFwiZGlkLWZyYW1lLWZpbmlzaC1sb2FkXCIsIChfLCBpc01haW5GcmFtZSwgZnJhbWVQcm9jZXNzSWQsIGZyYW1lUm91dGluZ0lkKSA9PiB7XG4gICAgICBsb2dnZXIuZGVidWcoVEFHLCBzb3VyY2UsIFwiZGlkLWZyYW1lLWZpbmlzaC1sb2FkOlwiLCB7IGlzTWFpbkZyYW1lLCBmcmFtZVByb2Nlc3NJZCwgZnJhbWVSb3V0aW5nSWQgfSk7XG4gICAgfSk7XG4gICAgd2luLndlYkNvbnRlbnRzLm9uY2UoXCJkaWQtZmFpbC1sb2FkXCIsIChfZSwgY29kZSwgZGVzYywgdXJsKSA9PlxuICAgICAgZG9uZShuZXcgRXJyb3IoYGRpZC1mYWlsLWxvYWQgJHt7IHVybCwgc291cmNlLCBjb2RlLCBkZXNjIH19YCkpLFxuICAgICk7XG4gICAgd2luLndlYkNvbnRlbnRzLm9uY2UoXCJyZW5kZXItcHJvY2Vzcy1nb25lXCIsIChfZSwgeyBleGl0Q29kZSwgcmVhc29uIH0pID0+XG4gICAgICBkb25lKG5ldyBFcnJvcihgcmVuZGVyLXByb2Nlc3MtZ29uZTogJHt7IHNvdXJjZSwgZXhpdENvZGUsIHJlYXNvbiB9fWApKSxcbiAgICApO1xuICAgIGFjdGlvbigpO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRpc3Bvc2VXaW5kb3cod2luOiBCcm93c2VyV2luZG93KSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4ge1xuICAgIHVuc2V0SW50ZXJjZXB0b3Iod2luKTtcbiAgICBsZXQgc2V0dGxlZCA9IGZhbHNlO1xuICAgIGNvbnN0IGRvbmUgPSAoKSA9PiB7XG4gICAgICBpZiAoc2V0dGxlZCkgcmV0dXJuO1xuICAgICAgc2V0dGxlZCA9IHRydWU7XG4gICAgICByZXNvbHZlKCk7XG4gICAgfTtcbiAgICB3aW4ub25jZShcImNsb3NlZFwiLCBkb25lKTtcbiAgICB3aW4uY2xvc2UoKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmIChzZXR0bGVkKSByZXR1cm47XG4gICAgICB0cnkge1xuICAgICAgICBsb2dnZXIud2FybihUQUcsIFwiZm9yY2UgY2xvc2VcIik7XG4gICAgICAgIHdpbi5kZXN0cm95KCk7XG4gICAgICB9IGNhdGNoIHt9XG4gICAgICBkb25lKCk7XG4gICAgfSwgMTAwMCk7XG4gIH0pO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFdpbmRvd09wdGlvbnMge1xuICBzb3VyY2U6IHN0cmluZztcbiAgb25DcmVhdGVkPzogKHdpbmRvdzogQnJvd3NlcldpbmRvdykgPT4gUHJvbWlzZTx2b2lkPjtcbiAgcmVuZGVyZXI6IFJlbmRlck9wdGlvbnM7XG4gIHdhcm11cD86IGJvb2xlYW47XG4gIHRvbGVyYW50PzogYm9vbGVhbjtcbn1cblxuYXN5bmMgZnVuY3Rpb24gb3BlbldpbmRvdyh7IHNvdXJjZSwgb25DcmVhdGVkLCByZW5kZXJlciwgd2FybXVwLCB0b2xlcmFudCB9OiBXaW5kb3dPcHRpb25zKTogUHJvbWlzZTxCcm93c2VyV2luZG93PiB7XG4gIGNoZWNrSFRNTChzb3VyY2UpO1xuXG4gIGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgdXNlSW5uZXJQcm94eSB9ID0gcmVuZGVyZXI7XG4gIGNvbnN0IHNyYyA9IHVzZUlubmVyUHJveHkgPyBwcm94aWVkVXJsKHNvdXJjZSkgOiBzb3VyY2U7XG5cbiAgY29uc3Qgd2luID0gbmV3IEJyb3dzZXJXaW5kb3coe1xuICAgIHdpZHRoLFxuICAgIGhlaWdodDogaGVpZ2h0ICsgMSxcbiAgICBtaW5XaWR0aDogd2lkdGgsXG4gICAgbWluSGVpZ2h0OiBoZWlnaHQgKyAxLFxuICAgIG1heFdpZHRoOiB3aWR0aCxcbiAgICBtYXhIZWlnaHQ6IGhlaWdodCArIDEsXG4gICAgcmVzaXphYmxlOiBmYWxzZSxcbiAgICBtaW5pbWl6YWJsZTogZmFsc2UsXG4gICAgbW92YWJsZTogZmFsc2UsXG4gICAgc2hvdzogZmFsc2UsXG4gICAgdHJhbnNwYXJlbnQ6IHRydWUsXG4gICAgYmFja2dyb3VuZENvbG9yOiB1bmRlZmluZWQsXG4gICAgZnJhbWU6IGZhbHNlLFxuICAgIHdlYlByZWZlcmVuY2VzOiB7XG4gICAgICBvZmZzY3JlZW46IHRydWUsXG4gICAgICBiYWNrZ3JvdW5kVGhyb3R0bGluZzogZmFsc2UsXG4gICAgICBub2RlSW50ZWdyYXRpb246IHRydWUsXG4gICAgICBub2RlSW50ZWdyYXRpb25JblN1YkZyYW1lczogdHJ1ZSxcbiAgICAgIG5vZGVJbnRlZ3JhdGlvbkluV29ya2VyOiB0cnVlLFxuICAgICAgY29udGV4dElzb2xhdGlvbjogZmFsc2UsXG4gICAgICB3ZWJTZWN1cml0eTogZmFsc2UsXG4gICAgICBhbGxvd1J1bm5pbmdJbnNlY3VyZUNvbnRlbnQ6IHRydWUsXG4gICAgICBleHBlcmltZW50YWxGZWF0dXJlczogdHJ1ZSxcbiAgICB9LFxuICB9KTtcbiAgc2V0SW50ZXJjZXB0b3IoeyBzb3VyY2UsIHdpbmRvdzogd2luLCB1c2VJbm5lclByb3h5IH0pO1xuICBpZiAoIXdhcm11cCkge1xuICAgIGF3YWl0IG9uQ3JlYXRlZD8uKHdpbik7XG4gIH1cblxuICB3aW4ud2ViQ29udGVudHMub24oXCJjb25zb2xlLW1lc3NhZ2VcIiwgKHsgbGV2ZWwsIG1lc3NhZ2UsIGxpbmVOdW1iZXIsIHNvdXJjZUlkIH0pID0+IHtcbiAgICBjb25zdCBtc2dzID0gW1RBRywgXCJjb25zb2xlOlwiLCB7IG1lc3NhZ2UsIGxpbmVOdW1iZXIsIHNvdXJjZUlkLCBzb3VyY2UgfV07XG4gICAgbGV2ZWwgPT09IFwiZXJyb3JcIiA/IGxvZ2dlci5lcnJvciguLi5tc2dzKSA6IGxvZ2dlci5kZWJ1ZyguLi5tc2dzKTtcbiAgfSk7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCB1cmwgPSBjcmVhdGVTdGVnb1VSTChzcmMsIHsgd2lkdGgsIGhlaWdodCB9KTtcbiAgICBhd2FpdCB3YWl0Rm9yRmluaXNoKHsgc291cmNlLCB3aW4sIGFjdGlvbjogKCkgPT4gd2luLmxvYWRVUkwodXJsKSwgdG9sZXJhbnQgfSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBhd2FpdCBkaXNwb3NlV2luZG93KHdpbik7XG4gICAgdGhyb3cgZTtcbiAgfVxuXG4gIHJldHVybiB3aW47XG59XG5cbmNvbnN0IG9wZW5XaW5kb3dXaXRoUmV0cnkgPSB1c2VSZXRyeSh7IGZuOiBvcGVuV2luZG93LCBtYXhBdHRlbXB0czogMiB9KTtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxvYWRXaW5kb3coeyBzb3VyY2UsIG9uQ3JlYXRlZCwgcmVuZGVyZXIgfTogV2luZG93T3B0aW9ucyk6IFByb21pc2U8QnJvd3NlcldpbmRvdz4ge1xuICBsZXQgd2FybXVwOiBCcm93c2VyV2luZG93IHwgdW5kZWZpbmVkO1xuICBsZXQgZXJyb3I6IHVua25vd247XG4gIHRyeSB7XG4gICAgd2FybXVwID0gYXdhaXQgb3BlbldpbmRvd1dpdGhSZXRyeSh7IHNvdXJjZSwgcmVuZGVyZXIsIHdhcm11cDogdHJ1ZSB9KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGVycm9yID0gZTtcbiAgfVxuXG4gIGNvbnN0IG9wZW4gPSAoKSA9PiB7XG4gICAgcmV0dXJuIG9wZW5XaW5kb3coe1xuICAgICAgc291cmNlLFxuICAgICAgcmVuZGVyZXIsXG4gICAgICBvbkNyZWF0ZWQsXG4gICAgICB0b2xlcmFudDogcmVuZGVyZXIud2luZG93VG9sZXJhbnQsXG4gICAgfSk7XG4gIH07XG5cbiAgaWYgKHJlbmRlcmVyLndpbmRvd1RvbGVyYW50ICYmIGVycm9yID09PSBUSU1FT1VUX0VSUk9SKSB7XG4gICAgbG9nZ2VyLndhcm4oVEFHLCBgd2FybXVwIHRpbWVvdXQ6ICR7c291cmNlfSwgZmFsbGluZyBiYWNrIHRvIGRvbS1yZWFkeWApO1xuICAgIHJldHVybiBhd2FpdCBvcGVuKCk7XG4gIH1cblxuICBpZiAoZXJyb3IpIHtcbiAgICBjb25zdCB7IG1lc3NhZ2UsIHN0YWNrIH0gPSBlcnJvciBhcyBFcnJvcjtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGZhaWxlZCB0byB3YXJtdXAgd2luZG93OiAke0pTT04uc3RyaW5naWZ5KHsgc291cmNlLCBtZXNzYWdlLCBzdGFjayB9KX1gKTtcbiAgfVxuXG4gIGlmICh3YXJtdXApIHtcbiAgICB3YXJtdXAud2ViQ29udGVudHMucmVtb3ZlQWxsTGlzdGVuZXJzKCk7XG4gICAgdW5zZXRJbnRlcmNlcHRvcih3YXJtdXApO1xuICAgIGF3YWl0IHNsZWVwKDIwMDApO1xuICAgIGF3YWl0IGRpc3Bvc2VXaW5kb3cod2FybXVwKTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IG9wZW4oKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGNvbnN0IHsgbWVzc2FnZSwgc3RhY2sgfSA9IGUgYXMgRXJyb3I7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBmYWlsZWQgdG8gbG9hZCB3aW5kb3c6ICR7SlNPTi5zdHJpbmdpZnkoeyBzb3VyY2UsIG1lc3NhZ2UsIHN0YWNrIH0pfWApO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA5LlxuXG5pbXBvcnQgeyB0eXBlIE5hdGl2ZUltYWdlLCB0eXBlIFNpemUgfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IHJlc2l6ZURyYXdhYmxlIH0gZnJvbSBcIi4uL2Jhc2UvY2RwXCI7XG5pbXBvcnQgeyBFbmNvZGVyUGlwZWxpbmUgfSBmcm9tIFwiLi4vYmFzZS9lbmNvZGVyL3BpcGVsaW5lXCI7XG5pbXBvcnQgeyBGcmFtZURyb3BTdGF0cyB9IGZyb20gXCIuLi9iYXNlL2ZyYW1lX2Ryb3BcIjtcbmltcG9ydCB7IHNpemVFcXVhbHMgfSBmcm9tIFwiLi4vYmFzZS9pbWFnZVwiO1xuaW1wb3J0IHsgc2V0dXBBdWRpb0NhcHR1cmUsIHR5cGUgQXVkaW9DYXB0dXJlIH0gZnJvbSBcIi4vYXVkaW9cIjtcbmltcG9ydCB0eXBlIHsgSXBjRG9uZVBheWxvYWQsIElwY1dyaXRlciB9IGZyb20gXCIuL2lwY1wiO1xuaW1wb3J0IHR5cGUgeyBSZW5kZXJPcHRpb25zIH0gZnJvbSBcIi4vc2NoZW1hXCI7XG5pbXBvcnQgeyBkZWNvZGVTdGVnbywgc3RhcnRTdGVnbywgc3RvcFN0ZWdvIH0gZnJvbSBcIi4vc3RlZ29cIjtcbmltcG9ydCB7IGRpc3Bvc2VXaW5kb3csIGxvYWRXaW5kb3cgfSBmcm9tIFwiLi93aW5kb3dcIjtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlbmRlcih3cml0ZXI6IElwY1dyaXRlciwgc291cmNlOiBzdHJpbmcsIG9wdGlvbnM6IFJlbmRlck9wdGlvbnMpOiBQcm9taXNlPElwY0RvbmVQYXlsb2FkPiB7XG4gIGNvbnN0IHsgZnBzLCB3aWR0aCwgaGVpZ2h0LCBkdXJhdGlvbiwgd2l0aEF1ZGlvLCBvdXRGaWxlLCBkaXNhYmxlSHdDb2RlYyB9ID0gb3B0aW9ucztcblxuICBhd2FpdCB1c2luZyBlbmNvZGVyID0gYXdhaXQgRW5jb2RlclBpcGVsaW5lLmNyZWF0ZSh7IHdpZHRoLCBoZWlnaHQsIGZwcywgb3V0RmlsZSwgd2l0aEF1ZGlvLCBkaXNhYmxlSHdDb2RlYyB9KTtcblxuICBjb25zdCB0b3RhbCA9IE1hdGguY2VpbChmcHMgKiBkdXJhdGlvbik7XG4gIGNvbnN0IGZyYW1lSW50ZXJ2YWwgPSAxMDAwIC8gZnBzO1xuICBjb25zdCBmcmFtZVNpemU6IFNpemUgPSB7IHdpZHRoLCBoZWlnaHQ6IGhlaWdodCArIDEgfTtcblxuICBsZXQgd3JpdHRlbiA9IDA7XG4gIGxldCBsYXN0V3JpdHRlblRpbWU6IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgbGV0IHByb2dyZXNzID0gMDtcbiAgbGV0IGVuY29kZUVycm9yOiBFcnJvciB8IHVuZGVmaW5lZDtcbiAgbGV0IHJlc29sdmVyOiAoKCkgPT4gdm9pZCkgfCB1bmRlZmluZWQ7XG4gIGxldCByZWplY3RlcjogKChyZWFzb24/OiB1bmtub3duKSA9PiB2b2lkKSB8IHVuZGVmaW5lZDtcbiAgY29uc3QgZHJvcFN0YXRzID0gbmV3IEZyYW1lRHJvcFN0YXRzKGZwcyk7XG5cbiAgbGV0IGF1ZGlvOiBBdWRpb0NhcHR1cmUgfCB1bmRlZmluZWQ7XG4gIGNvbnN0IHNjaGVkdWxlRnJhbWUgPSAoZnJhbWU6IEJ1ZmZlcikgPT4ge1xuICAgIHdyaXR0ZW4rKztcbiAgICBlbmNvZGVyLmVuY29kZUJHUkEoZnJhbWUpLmNhdGNoKChlKSA9PiAoZW5jb2RlRXJyb3IgPz89IGUpKTtcbiAgfTtcblxuICBjb25zdCBwYWludCA9IChfZTogdW5rbm93biwgX3I6IHVua25vd24sIGltYWdlOiBOYXRpdmVJbWFnZSkgPT4ge1xuICAgIGlmIChlbmNvZGVFcnJvcikge1xuICAgICAgcmVqZWN0ZXI/LihlbmNvZGVFcnJvcik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgaW1hZ2VTaXplID0gaW1hZ2UuZ2V0U2l6ZSgpO1xuICAgIGlmICghc2l6ZUVxdWFscyhpbWFnZVNpemUsIGZyYW1lU2l6ZSkpIHtcbiAgICAgIC8vIE5PVEUoQXV0b2tha2EpOiBXZSBtdXN0IGVuc3VyZSBmcmFtZSBpcyByZWFkeSBvbiBlbGVjdHJvbiB2NDErXG4gICAgICByZXNpemVEcmF3YWJsZShjZHAsIGZyYW1lU2l6ZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gRGVjb2RlIHN0ZWdvIHRpbWVzdGFtcCBmcm9tIHRoZSBib3R0b20gcGl4ZWwgcm93IHdpdGhvdXQgZnVsbCBiaXRtYXAgY29weVxuICAgIGNvbnN0IGJpdG1hcCA9IGltYWdlLnRvQml0bWFwKCk7XG4gICAgY29uc3QgY3VycmVudFRpbWUgPSBkZWNvZGVTdGVnbyhiaXRtYXAsIGltYWdlU2l6ZSk7XG4gICAgaWYgKGN1cnJlbnRUaW1lID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGVuY29kZUVycm9yID8/PSBuZXcgRXJyb3IoYG5vIHRpbWVzdGFtcCBAICR7d3JpdHRlbn1gKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBTa2lwIGZyYW1lcyB0aGF0IGFycml2ZSB0b28gc29vbiAoPCA4MCUgb2YgZnJhbWUgaW50ZXJ2YWwpXG4gICAgaWYgKGxhc3RXcml0dGVuVGltZSAhPT0gdW5kZWZpbmVkICYmIGN1cnJlbnRUaW1lIC0gbGFzdFdyaXR0ZW5UaW1lIDwgZnJhbWVJbnRlcnZhbCAqIDAuOCkgcmV0dXJuO1xuXG4gICAgY29uc3QgY3JvcHBlZCA9IEJ1ZmZlci5mcm9tKGJpdG1hcC5idWZmZXIsIGJpdG1hcC5ieXRlT2Zmc2V0LCBoZWlnaHQgKiB3aWR0aCAqIDQpO1xuXG4gICAgaWYgKGxhc3RXcml0dGVuVGltZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBzY2hlZHVsZUZyYW1lKGNyb3BwZWQpO1xuICAgICAgZHJvcFN0YXRzLndyb3RlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHRpbWVEZWx0YSA9IGN1cnJlbnRUaW1lIC0gbGFzdFdyaXR0ZW5UaW1lO1xuICAgICAgaWYgKHRpbWVEZWx0YSA8PSBmcmFtZUludGVydmFsICogMS4yKSB7XG4gICAgICAgIHNjaGVkdWxlRnJhbWUoY3JvcHBlZCk7XG4gICAgICAgIGRyb3BTdGF0cy53cm90ZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgZnJhbWVzVG9JbnNlcnQgPSBNYXRoLnJvdW5kKHRpbWVEZWx0YSAvIGZyYW1lSW50ZXJ2YWwpO1xuICAgICAgICBkcm9wU3RhdHMuZHJvcHBlZChmcmFtZXNUb0luc2VydCAtIDEpO1xuICAgICAgICBkcm9wU3RhdHMud3JvdGUoKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmcmFtZXNUb0luc2VydCAmJiB3cml0dGVuIDwgdG90YWw7IGkrKykge1xuICAgICAgICAgIHNjaGVkdWxlRnJhbWUoY3JvcHBlZCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgbGFzdFdyaXR0ZW5UaW1lID0gY3VycmVudFRpbWU7XG5cbiAgICBjb25zdCBuZXdQcm9ncmVzcyA9IE1hdGguZmxvb3IoKHdyaXR0ZW4gLyB0b3RhbCkgKiAxMDApO1xuICAgIGlmIChNYXRoLmFicyhuZXdQcm9ncmVzcyAtIHByb2dyZXNzKSA+IDEwKSB7XG4gICAgICBwcm9ncmVzcyA9IG5ld1Byb2dyZXNzO1xuICAgICAgd3JpdGVyLndyaXRlUHJvZ3Jlc3MocHJvZ3Jlc3MpO1xuICAgIH1cblxuICAgIGNvbnN0IGR1cmF0aW9uTXMgPSBkdXJhdGlvbiAqIDEwMDA7XG4gICAgaWYgKGN1cnJlbnRUaW1lID49IGR1cmF0aW9uTXMgLSBmcmFtZUludGVydmFsICogMC41IHx8IHdyaXR0ZW4gPj0gdG90YWwpIHtcbiAgICAgIHJlc29sdmVyPy4oKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3Qgd2luID0gYXdhaXQgbG9hZFdpbmRvdyh7XG4gICAgc291cmNlLFxuICAgIHJlbmRlcmVyOiBvcHRpb25zLFxuICAgIG9uQ3JlYXRlZDogYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKHdpdGhBdWRpbykge1xuICAgICAgICBhdWRpbyA9IGF3YWl0IHNldHVwQXVkaW9DYXB0dXJlKHtcbiAgICAgICAgICBlbmNvZGVyLFxuICAgICAgICAgIGdldFZpZGVvVGltZU1zOiAoKSA9PiBsYXN0V3JpdHRlblRpbWUgPz8gMCxcbiAgICAgICAgICBvbkVycm9yOiAoZSkgPT4gKGVuY29kZUVycm9yID8/PSBlKSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSxcbiAgfSk7XG4gIGNvbnN0IGNkcCA9IHdpbi53ZWJDb250ZW50cy5kZWJ1Z2dlcjtcbiAgY2RwLmF0dGFjaChcIjEuM1wiKTtcblxuICB3aW4ud2ViQ29udGVudHMuc3RvcFBhaW50aW5nKCk7XG4gIHdpbi53ZWJDb250ZW50cy5zZXRGcmFtZVJhdGUoZnBzKTtcbiAgd2luLndlYkNvbnRlbnRzLm9uKFwicGFpbnRcIiwgcGFpbnQpO1xuICB3aW4ud2ViQ29udGVudHMuc3RhcnRQYWludGluZygpO1xuXG4gIHRyeSB7XG4gICAgYXdhaXQgc3RhcnRTdGVnbyhjZHApO1xuICAgIGF3YWl0IG5ldyBQcm9taXNlPHZvaWQ+KChyLCBqKSA9PiAoW3Jlc29sdmVyLCByZWplY3Rlcl0gPSBbciwgal0pKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCBzdG9wU3RlZ28oY2RwKTtcbiAgICB3aW4ud2ViQ29udGVudHMub2ZmKFwicGFpbnRcIiwgcGFpbnQpO1xuICAgIGF3YWl0IGRpc3Bvc2VXaW5kb3cod2luKTtcbiAgICBhd2FpdCBhdWRpbz8udGVhcmRvd24oKTtcbiAgICBhd2FpdCBlbmNvZGVyLmZpbmlzaCgpO1xuICB9XG5cbiAgaWYgKGVuY29kZUVycm9yIHx8IHdyaXR0ZW4gPT09IDApIHtcbiAgICB0aHJvdyBlbmNvZGVFcnJvciA/PyBuZXcgRXJyb3IoXCJubyBmcmFtZXMgY2FwdHVyZWRcIik7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgZHJvcFNjb3JlID0gZHJvcFN0YXRzLmZpbmFsaXplKCk7XG4gICAgcmV0dXJuIHsgd3JpdHRlbiwgamFuazogZHJvcFNjb3JlLmphbmssIG91dEZpbGUgfTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8yNy5cblxuaW1wb3J0IHsgSGFyZHdhcmVDb250ZXh0IH0gZnJvbSBcIm5vZGUtYXYvYXBpXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi9sb2dnaW5nXCI7XG5cbmNvbnN0IFRBRyA9IFwiW0hXQWNjZWxdXCI7XG5cbmFzeW5jIGZ1bmN0aW9uIGRldGVjdEdQVURyaXZlcigpIHtcbiAgY29uc3QgaHcgPSBIYXJkd2FyZUNvbnRleHQuYXV0bygpO1xuICBjb25zdCByZXN1bHQgPSBodyAhPT0gbnVsbDtcbiAgaHc/LmRpc3Bvc2UoKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGNvbnN0IGNhbklVc2VHUFUgPSBkZXRlY3RHUFVEcml2ZXIoKS50aGVuKChyZXN1bHQpID0+IHtcbiAgbG9nZ2VyLmRlYnVnKFRBRywgXCJncHU6XCIsIHJlc3VsdCk7XG4gIHJldHVybiByZXN1bHQ7XG59KTtcbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMDEuXG5cbmltcG9ydCB0eXBlIHsgV2ViRnJhbWVNYWluIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi4vYmFzZS9sb2dnaW5nXCI7XG5cbmV4cG9ydCBjb25zdCBUSUNLX1NZTUJPTCA9IFwiX19wdXBfdGlja19fXCI7XG5jb25zdCBUQUcgPSBgW1RpY2tdYDtcblxuY29uc3QgSE9PSyA9IGAoZnVuY3Rpb24oKSB7XG4gIGlmICh3aW5kb3cuc2VsZiA9PT0gd2luZG93LnRvcCkgcmV0dXJuO1xuICBpZiAodHlwZW9mICR7VElDS19TWU1CT0x9ICE9PSAndW5kZWZpbmVkJykgcmV0dXJuO1xuXG4gIGNvbnN0IG9yaWcgPSB7XG4gICAgRGF0ZTogRGF0ZSxcbiAgICBkYXRlTm93OiBEYXRlLm5vdy5iaW5kKERhdGUpLFxuICAgIHBlcmZvcm1hbmNlTm93OiBwZXJmb3JtYW5jZS5ub3cuYmluZChwZXJmb3JtYW5jZSksXG4gICAgcmFmOiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUuYmluZCh3aW5kb3cpLFxuICAgIGNhZjogY2FuY2VsQW5pbWF0aW9uRnJhbWUuYmluZCh3aW5kb3cpLFxuICAgIHNldFRpbWVvdXQ6IHNldFRpbWVvdXQuYmluZCh3aW5kb3cpLFxuICAgIGNsZWFyVGltZW91dDogY2xlYXJUaW1lb3V0LmJpbmQod2luZG93KSxcbiAgICBzZXRJbnRlcnZhbDogc2V0SW50ZXJ2YWwuYmluZCh3aW5kb3cpLFxuICAgIGNsZWFySW50ZXJ2YWw6IGNsZWFySW50ZXJ2YWwuYmluZCh3aW5kb3cpLFxuICB9O1xuXG4gIGxldCBjdXJyTXMgPSAwO1xuICBsZXQgcmFmUXVldWUgPSBbXTtcbiAgY29uc3QgdGltZXJzID0ge307XG4gIGxldCBuZXh0SWQgPSAxO1xuICBjb25zdCBkYXRlT3JpZ2luID0gbmV3IG9yaWcuRGF0ZSgpO1xuICBjb25zdCBwZXJmT3JpZ2luID0gb3JpZy5wZXJmb3JtYW5jZU5vdygpO1xuXG4gIHBlcmZvcm1hbmNlLm5vdyA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gcGVyZk9yaWdpbiArIGN1cnJNczsgfTtcbiAgRGF0ZS5ub3cgPSBmdW5jdGlvbigpIHsgcmV0dXJuIGRhdGVPcmlnaW4uZ2V0VGltZSgpICsgY3Vyck1zOyB9O1xuICBEYXRlID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIE8gPSBvcmlnLkRhdGU7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHJldHVybiBuZXcgTyhkYXRlT3JpZ2luLmdldFRpbWUoKSArIGN1cnJNcyk7XG4gICAgcmV0dXJuIG5ldyAoRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQuYXBwbHkoTywgW251bGxdLmNvbmNhdChBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpKSkpKCk7XG4gIH07XG4gIERhdGUubm93ID0gZnVuY3Rpb24oKSB7IHJldHVybiBkYXRlT3JpZ2luLmdldFRpbWUoKSArIGN1cnJNczsgfTtcbiAgRGF0ZS5wYXJzZSA9IG9yaWcuRGF0ZS5wYXJzZTtcbiAgRGF0ZS5VVEMgPSBvcmlnLkRhdGUuVVRDO1xuICBEYXRlLnByb3RvdHlwZSA9IG9yaWcuRGF0ZS5wcm90b3R5cGU7XG5cbiAgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSA9IGZ1bmN0aW9uKGNiKSB7XG4gICAgY29uc3QgaWQgPSBuZXh0SWQrKztcbiAgICByYWZRdWV1ZS5wdXNoKHsgaWQsIGNiIH0pO1xuICAgIHJldHVybiBpZDtcbiAgfTtcbiAgd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lID0gZnVuY3Rpb24oaWQpIHtcbiAgICByYWZRdWV1ZSA9IHJhZlF1ZXVlLmZpbHRlcigocikgPT4gci5pZCAhPT0gaWQpO1xuICB9O1xuXG4gIHdpbmRvdy5zZXRUaW1lb3V0ID0gZnVuY3Rpb24oY2IsIGRlbGF5LCAuLi5hcmdzKSB7XG4gICAgY29uc3QgaWQgPSBuZXh0SWQrKztcbiAgICB0aW1lcnNbaWRdID0geyB0eXBlOiAndGltZW91dCcsIGNiLCBkZWxheTogZGVsYXkgfHwgMCwgbmV4dDogY3Vyck1zICsgKGRlbGF5IHx8IDApLCBhcmdzIH07XG4gICAgcmV0dXJuIGlkO1xuICB9O1xuICB3aW5kb3cuY2xlYXJUaW1lb3V0ID0gZnVuY3Rpb24oaWQpIHsgZGVsZXRlIHRpbWVyc1tpZF07IH07XG5cbiAgd2luZG93LnNldEludGVydmFsID0gZnVuY3Rpb24oY2IsIGRlbGF5LCAuLi5hcmdzKSB7XG4gICAgY29uc3QgaWQgPSBuZXh0SWQrKztcbiAgICBjb25zdCBkID0gTWF0aC5tYXgoZGVsYXkgfHwgMCwgMSk7XG4gICAgdGltZXJzW2lkXSA9IHsgdHlwZTogJ2ludGVydmFsJywgY2IsIGRlbGF5OiBkLCBuZXh0OiBjdXJyTXMgKyBkLCBhcmdzIH07XG4gICAgcmV0dXJuIGlkO1xuICB9O1xuICB3aW5kb3cuY2xlYXJJbnRlcnZhbCA9IGZ1bmN0aW9uKGlkKSB7IGRlbGV0ZSB0aW1lcnNbaWRdOyB9O1xuXG4gIGZ1bmN0aW9uIHByb2Nlc3ModGltZXN0YW1wTXMpIHtcbiAgICBjdXJyTXMgPSB0aW1lc3RhbXBNcztcbiAgICBkb2N1bWVudC5nZXRBbmltYXRpb25zKCkuZm9yRWFjaChhID0+IHtcbiAgICAgIGEucGF1c2UoKTtcbiAgICAgIGEuY3VycmVudFRpbWUgPSBjdXJyTXM7XG4gICAgfSk7XG4gICAgY29uc3QgaWRzID0gT2JqZWN0LmtleXModGltZXJzKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlkcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgdCA9IHRpbWVyc1tpZHNbaV1dO1xuICAgICAgaWYgKCF0KSBjb250aW51ZTtcbiAgICAgIHdoaWxlICh0Lm5leHQgPD0gY3Vyck1zKSB7XG4gICAgICAgIGlmICh0eXBlb2YgdC5jYiA9PT0gJ3N0cmluZycpIGV2YWwodC5jYik7IGVsc2UgdC5jYi5hcHBseSh1bmRlZmluZWQsIHQuYXJncyk7XG4gICAgICAgIGlmICh0LnR5cGUgPT09ICd0aW1lb3V0JykgeyBkZWxldGUgdGltZXJzW2lkc1tpXV07IGJyZWFrOyB9XG4gICAgICAgIHQubmV4dCArPSB0LmRlbGF5O1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCByYWZzID0gcmFmUXVldWUuc3BsaWNlKDApO1xuICAgIGZvciAobGV0IGogPSAwOyBqIDwgcmFmcy5sZW5ndGg7IGorKykge1xuICAgICAgcmFmc1tqXS5jYihjdXJyTXMpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGVqZWN0KCkge1xuICAgIERhdGUgPSBvcmlnLkRhdGU7XG4gICAgcGVyZm9ybWFuY2Uubm93ID0gb3JpZy5wZXJmb3JtYW5jZU5vdztcbiAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gb3JpZy5yYWY7XG4gICAgd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lID0gb3JpZy5jYWY7XG4gICAgd2luZG93LnNldFRpbWVvdXQgPSBvcmlnLnNldFRpbWVvdXQ7XG4gICAgd2luZG93LmNsZWFyVGltZW91dCA9IG9yaWcuY2xlYXJUaW1lb3V0O1xuICAgIHdpbmRvdy5zZXRJbnRlcnZhbCA9IG9yaWcuc2V0SW50ZXJ2YWw7XG4gICAgd2luZG93LmNsZWFySW50ZXJ2YWwgPSBvcmlnLmNsZWFySW50ZXJ2YWw7XG4gICAgZGVsZXRlIHdpbmRvdy4ke1RJQ0tfU1lNQk9MfTtcbiAgfVxuXG4gIHdpbmRvdy4ke1RJQ0tfU1lNQk9MfSA9IHsgcHJvY2VzczogcHJvY2VzcywgZWplY3Q6IGVqZWN0IH07XG59KSgpO2A7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB0aWNrKGZyYW1lOiBXZWJGcmFtZU1haW4gfCB1bmRlZmluZWQsIHRpbWVzdGFtcE1zOiBudW1iZXIpIHtcbiAgdHJ5IHtcbiAgICBhd2FpdCBmcmFtZT8uZXhlY3V0ZUphdmFTY3JpcHQoYCR7SE9PS30gJHtUSUNLX1NZTUJPTH0ucHJvY2Vzcygke3RpbWVzdGFtcE1zfSlgKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIC8vIE5PVEUoQXV0b2tha2EpOlxuICAgIC8vIFNpZGUtZWZmZWN0cyBtYXkgdGhyb3cgKGUuZy4gdW5jYXVnaHQgZXJyb3Igb24gYW5pbWF0aW9uIGNhbGxiYWNrKSwgaWdub3JlIHRvIGxldCByZWNvcmRlciBjb250aW51ZVxuICAgIC8vIFRoZSBlcnJvcnMgd2lsbCBiZSBkaXNwYXRjaGVkIHRvIHdpbmRvdyBjb25zb2xlLCBqdXN0IGxpa2UgaG93IHJlbmRlci50cyB3b3Jrc1xuICAgIGxvZ2dlci5lcnJvcihUQUcsIFwidGljayBmYWlsZWQ6XCIsIGUpO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAzLzEzLlxuXG5pbXBvcnQge1xuICB0eXBlIEJyb3dzZXJXaW5kb3csXG4gIHR5cGUgRXZlbnQsXG4gIHR5cGUgTmF0aXZlSW1hZ2UsXG4gIHR5cGUgUmVjdGFuZ2xlLFxuICB0eXBlIFNpemUsXG4gIHR5cGUgV2ViQ29udGVudHNQYWludEV2ZW50UGFyYW1zLFxufSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IGFkdmFuY2VWaXJ0dWFsVGltZSwgcGF1c2VWaXJ0dWFsVGltZSwgcmVzaXplRHJhd2FibGUgfSBmcm9tIFwiLi4vYmFzZS9jZHBcIjtcbmltcG9ydCB7IEVuY29kZXJQaXBlbGluZSB9IGZyb20gXCIuLi9iYXNlL2VuY29kZXIvcGlwZWxpbmVcIjtcbmltcG9ydCB7IGNhbklVc2VHUFUgfSBmcm9tIFwiLi4vYmFzZS9od2FjY2VsXCI7XG5pbXBvcnQgeyBzaXplRXF1YWxzIH0gZnJvbSBcIi4uL2Jhc2UvaW1hZ2VcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuLi9iYXNlL2xvZ2dpbmdcIjtcbmltcG9ydCB7IElwY1dyaXRlciwgdHlwZSBJcGNEb25lUGF5bG9hZCB9IGZyb20gXCIuL2lwY1wiO1xuaW1wb3J0IHR5cGUgeyBSZW5kZXJPcHRpb25zIH0gZnJvbSBcIi4vc2NoZW1hXCI7XG5pbXBvcnQgeyBkZWNvZGVTdGVnbywgc3dhcEJ1ZmZlciB9IGZyb20gXCIuL3N0ZWdvXCI7XG5pbXBvcnQgeyB0aWNrIH0gZnJvbSBcIi4vdGlja1wiO1xuaW1wb3J0IHsgZGlzcG9zZVdpbmRvdywgbG9hZFdpbmRvdyB9IGZyb20gXCIuL3dpbmRvd1wiO1xuXG5jb25zdCBUQUcgPSBcIltTaG9vdF1cIjtcblxuaW50ZXJmYWNlIFBhaW50T3B0aW9ucyB7XG4gIHNvdXJjZTogc3RyaW5nO1xuICB3aW46IEJyb3dzZXJXaW5kb3c7XG4gIHNpemU6IFNpemU7XG4gIG1zOiBudW1iZXI7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHBhaW50KHsgc291cmNlLCB3aW4sIHNpemUsIG1zIH06IFBhaW50T3B0aW9ucyk6IFByb21pc2U8QnVmZmVyPiB7XG4gIGxldCBsYXN0VHM6IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgbGV0IGxhZ2d5ID0gMDtcbiAgY29uc3QgY2RwID0gd2luLndlYkNvbnRlbnRzLmRlYnVnZ2VyO1xuICBjb25zdCBmcmFtZVNpemU6IFNpemUgPSB7IHdpZHRoOiBzaXplLndpZHRoLCBoZWlnaHQ6IHNpemUuaGVpZ2h0ICsgMSB9O1xuICBjb25zdCBpbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICBsb2dnZXIud2FybihUQUcsIGAke3NvdXJjZX0gcmVuZGVyIGlzIGV4dHJlbWVseSBzbG93IEAgJHttc30sIGN1cnJlbnQ6ICR7bGFzdFRzfSB3aXRoICR7bGFnZ3l9IHJlcGVhdHNgKTtcbiAgICB3aW4ud2ViQ29udGVudHMuaW52YWxpZGF0ZSgpO1xuICB9LCAxMDAwKTtcbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgbmV3IFByb21pc2U8QnVmZmVyPigocmVzb2x2ZSkgPT4ge1xuICAgICAgY29uc3QgaGFuZGxlciA9IChfZTogRXZlbnQ8V2ViQ29udGVudHNQYWludEV2ZW50UGFyYW1zPiwgX2Q6IFJlY3RhbmdsZSwgaW1hZ2U6IE5hdGl2ZUltYWdlKSA9PiB7XG4gICAgICAgIGNvbnN0IGltYWdlU2l6ZSA9IGltYWdlLmdldFNpemUoKTtcbiAgICAgICAgaWYgKCFzaXplRXF1YWxzKGltYWdlU2l6ZSwgZnJhbWVTaXplKSkge1xuICAgICAgICAgIC8vIE5PVEUoQXV0b2tha2EpOiBXZSBtdXN0IGVuc3VyZSBmcmFtZSBpcyByZWFkeSBvbiBlbGVjdHJvbiB2NDErXG4gICAgICAgICAgcmVzaXplRHJhd2FibGUoY2RwLCBmcmFtZVNpemUpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBiaXRtYXAgPSBpbWFnZS50b0JpdG1hcCgpO1xuICAgICAgICBjb25zdCB0cyA9IGRlY29kZVN0ZWdvKGJpdG1hcCwgaW1hZ2VTaXplKTtcbiAgICAgICAgaWYgKHRzID09PSB1bmRlZmluZWQgfHwgTWF0aC5hYnModHMgLSBtcykgPiAxKSB7XG4gICAgICAgICAgbGFzdFRzID0gdHM7XG4gICAgICAgICAgbGFnZ3krKztcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgd2luLndlYkNvbnRlbnRzLm9mZihcInBhaW50XCIsIGhhbmRsZXIpO1xuICAgICAgICB3aW4ud2ViQ29udGVudHMuc3RvcFBhaW50aW5nKCk7XG4gICAgICAgIHJlc29sdmUoQnVmZmVyLmZyb20oYml0bWFwLmJ1ZmZlciwgYml0bWFwLmJ5dGVPZmZzZXQsIHNpemUuaGVpZ2h0ICogc2l6ZS53aWR0aCAqIDQpKTtcbiAgICAgIH07XG4gICAgICB3aW4ud2ViQ29udGVudHMub24oXCJwYWludFwiLCBoYW5kbGVyKTtcbiAgICAgIHdpbi53ZWJDb250ZW50cy5zdGFydFBhaW50aW5nKCk7XG4gICAgfSk7XG4gIH0gZmluYWxseSB7XG4gICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbCk7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNob290KHdyaXRlcjogSXBjV3JpdGVyLCBzb3VyY2U6IHN0cmluZywgb3B0aW9uczogUmVuZGVyT3B0aW9ucyk6IFByb21pc2U8SXBjRG9uZVBheWxvYWQ+IHtcbiAgY29uc3QgeyBmcHMsIHdpZHRoLCBoZWlnaHQsIGR1cmF0aW9uLCB3aXRoQXVkaW8sIG91dEZpbGUsIGRpc2FibGVHcHUsIGRpc2FibGVId0NvZGVjIH0gPSBvcHRpb25zO1xuICBpZiAod2l0aEF1ZGlvKSBsb2dnZXIud2FybihUQUcsIFwiYXVkaW8gd2lsbCBiZSBpZ25vcmVkIG9uIHRoaXMgbW9kZVwiKTtcblxuICBhd2FpdCB1c2luZyBwaXBlbGluZSA9IGF3YWl0IEVuY29kZXJQaXBlbGluZS5jcmVhdGUoeyB3aWR0aCwgaGVpZ2h0LCBmcHMsIG91dEZpbGUsIHdpdGhBdWRpbywgZGlzYWJsZUh3Q29kZWMgfSk7XG5cbiAgY29uc3QgZ3B1ID0gKGF3YWl0IGNhbklVc2VHUFUpICYmICFkaXNhYmxlR3B1O1xuICBjb25zdCB0b3RhbCA9IE1hdGguY2VpbChmcHMgKiBkdXJhdGlvbik7XG4gIGNvbnN0IGZyYW1lSW50ZXJ2YWwgPSAxMDAwIC8gZnBzO1xuICBsZXQgd3JpdHRlbiA9IDA7XG4gIGxldCBwcm9ncmVzcyA9IDA7XG5cbiAgY29uc3QgcmVuZGVyRnBzID0gZ3B1ID8gMjQwIDogZnBzO1xuICBsb2dnZXIuZGVidWcoVEFHLCB7IHJlbmRlckZwcywgZnBzIH0pO1xuXG4gIGNvbnN0IHdpbiA9IGF3YWl0IGxvYWRXaW5kb3coeyBzb3VyY2UsIHJlbmRlcmVyOiBvcHRpb25zIH0pO1xuICBjb25zdCBjZHAgPSB3aW4ud2ViQ29udGVudHMuZGVidWdnZXI7XG4gIGNvbnN0IG1haW4gPSB3aW4ud2ViQ29udGVudHMubWFpbkZyYW1lO1xuICBjb25zdCBpZnJhbWUgPSBtYWluLmZyYW1lc1swXTtcbiAgdHJ5IHtcbiAgICBjZHAuYXR0YWNoKFwiMS4zXCIpO1xuXG4gICAgd2luLndlYkNvbnRlbnRzLnNldEZyYW1lUmF0ZShyZW5kZXJGcHMpO1xuICAgIHdpbi53ZWJDb250ZW50cy5zdG9wUGFpbnRpbmcoKTtcblxuICAgIGF3YWl0IHBhdXNlVmlydHVhbFRpbWUoY2RwKTtcbiAgICBmb3IgKGxldCBmcmFtZSA9IDA7IGZyYW1lIDwgdG90YWw7IGZyYW1lKyspIHtcbiAgICAgIGNvbnN0IGZyYW1lTXMgPSAoZnJhbWUgKyAxKSAqIGZyYW1lSW50ZXJ2YWw7XG5cbiAgICAgIGNvbnN0IHVwZGF0ZWQgPSBQcm9taXNlLmFsbChbdGljayhpZnJhbWUsIGZyYW1lTXMpLCBzd2FwQnVmZmVyKGNkcCwgZnJhbWVNcyldKTtcbiAgICAgIGF3YWl0IGFkdmFuY2VWaXJ0dWFsVGltZShjZHAsIGZyYW1lSW50ZXJ2YWwpO1xuICAgICAgYXdhaXQgdXBkYXRlZDtcbiAgICAgIGNvbnN0IGJpdG1hcCA9IGF3YWl0IHBhaW50KHtcbiAgICAgICAgc291cmNlLFxuICAgICAgICB3aW4sXG4gICAgICAgIHNpemU6IHsgd2lkdGgsIGhlaWdodCB9LFxuICAgICAgICBtczogZnJhbWVNcyxcbiAgICAgIH0pO1xuXG4gICAgICBhd2FpdCBwaXBlbGluZS5lbmNvZGVCR1JBKGJpdG1hcCk7XG4gICAgICB3cml0dGVuKys7XG5cbiAgICAgIGNvbnN0IG5ld1Byb2dyZXNzID0gTWF0aC5mbG9vcigod3JpdHRlbiAvIHRvdGFsKSAqIDEwMCk7XG4gICAgICBpZiAoTWF0aC5hYnMobmV3UHJvZ3Jlc3MgLSBwcm9ncmVzcykgPiAxMCkge1xuICAgICAgICBwcm9ncmVzcyA9IG5ld1Byb2dyZXNzO1xuICAgICAgICB3cml0ZXIud3JpdGVQcm9ncmVzcyhwcm9ncmVzcyk7XG4gICAgICB9XG4gICAgfVxuICB9IGZpbmFsbHkge1xuICAgIGNkcC5kZXRhY2goKTtcbiAgICBhd2FpdCBkaXNwb3NlV2luZG93KHdpbik7XG4gICAgYXdhaXQgcGlwZWxpbmUuZmluaXNoKCk7XG4gIH1cblxuICBpZiAod3JpdHRlbiA9PT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIm5vIGZyYW1lcyBjYXB0dXJlZFwiKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4geyB3cml0dGVuLCBqYW5rOiAwLCBvdXRGaWxlIH07XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDEvMzAuXG5cbmltcG9ydCB7IG9rIH0gZnJvbSBcImFzc2VydFwiO1xuaW1wb3J0IHsgYXBwIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBta2RpciB9IGZyb20gXCJmcy9wcm9taXNlc1wiO1xuaW1wb3J0IHsgZGlybmFtZSB9IGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyBzdGFydEVsZWN0cm9uQ3Jhc2hSZXBvcnRlciB9IGZyb20gXCIuL2Jhc2UvY3Jhc2hcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuL2Jhc2UvbG9nZ2luZ1wiO1xuaW1wb3J0IHsgbWFrZUNMSSB9IGZyb20gXCIuL2NvbW1vblwiO1xuaW1wb3J0IHsgSXBjV3JpdGVyIH0gZnJvbSBcIi4vcmVuZGVyZXIvaXBjXCI7XG5pbXBvcnQgeyBzZXR1cFB1cFByb3RvY29sIH0gZnJvbSBcIi4vcmVuZGVyZXIvcHJvdG9jb2xcIjtcbmltcG9ydCB7IHJlbmRlciB9IGZyb20gXCIuL3JlbmRlcmVyL3JlbmRlclwiO1xuaW1wb3J0IHsgZGVmYXVsdFJlbmRlck9wdGlvbnMgfSBmcm9tIFwiLi9yZW5kZXJlci9zY2hlbWFcIjtcbmltcG9ydCB7IHNob290IH0gZnJvbSBcIi4vcmVuZGVyZXIvc2hvb3RcIjtcblxuY29uc3QgVEFHID0gXCJbQXBwXVwiO1xuXG5zdGFydEVsZWN0cm9uQ3Jhc2hSZXBvcnRlcigpO1xuXG5mdW5jdGlvbiBwcmludEZlYXR1cmVzKCkge1xuICBsb2dnZXIuZGVidWcoVEFHLCBcImdwdSBmZWF0dXJlczpcIiwgYXBwLmdldEdQVUZlYXR1cmVTdGF0dXMoKSk7XG59XG5cbmFwcC5kb2NrPy5oaWRlKCk7XG5hcHAub24oXCJ3aW5kb3ctYWxsLWNsb3NlZFwiLCAoKSA9PiB7fSk7XG5cbm1ha2VDTEkoe1xuICBuYW1lOiBcImFwcFwiLFxuICBkZWZhdWx0czoge1xuICAgIC4uLmRlZmF1bHRSZW5kZXJPcHRpb25zLFxuICAgIHdpdGhBdWRpbzogZmFsc2UsXG4gICAgZGV0ZXJtaW5pc3RpYzogZmFsc2UsXG4gICAgdXNlSW5uZXJQcm94eTogZmFsc2UsXG4gICAgZGlzYWJsZUdwdTogZmFsc2UsXG4gICAgZGlzYWJsZUh3Q29kZWM6IGZhbHNlLFxuICAgIHdpbmRvd1RvbGVyYW50OiBmYWxzZSxcbiAgfSxcbiAgcnVuOiBhc3luYyAoc291cmNlLCBvcHRpb25zKSA9PiB7XG4gICAgY29uc3QgZXhpdCA9IChjb2RlOiBudW1iZXIpID0+IHtcbiAgICAgIGFwcC5xdWl0KCk7XG4gICAgICBwcm9jZXNzLmV4aXQoY29kZSk7XG4gICAgfTtcbiAgICBwcm9jZXNzLm9uY2UoXCJTSUdURVJNXCIsICgpID0+IGV4aXQoMTQzKSk7XG4gICAgcHJvY2Vzcy5vbmNlKFwiU0lHSU5UXCIsICgpID0+IGV4aXQoMTMwKSk7XG4gICAgcHJvY2Vzcy5vbmNlKFwiZXhpdFwiLCAoYykgPT4gZXhpdChjKSk7XG4gICAgb2socHJvY2Vzcy5zZW5kLCBcImlwYyBjaGFubmVsIG1pc3Npbmcg4oCUIHNwYXduIHdpdGggc3RkaW9bM109J2lwYydcIik7XG4gICAgY29uc3QgaXBjID0gbmV3IElwY1dyaXRlcigpO1xuICAgIHRyeSB7XG4gICAgICBhcHAub24oXCJncHUtaW5mby11cGRhdGVcIiwgcHJpbnRGZWF0dXJlcyk7XG4gICAgICBhd2FpdCBhcHAud2hlblJlYWR5KCk7XG4gICAgICBzZXR1cFB1cFByb3RvY29sKCk7XG4gICAgICBwcmludEZlYXR1cmVzKCk7XG4gICAgICBhd2FpdCBta2RpcihkaXJuYW1lKG9wdGlvbnMub3V0RmlsZSksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgY29uc3QgYWN0aW9uID0gb3B0aW9ucy5kZXRlcm1pbmlzdGljID8gc2hvb3QgOiByZW5kZXI7XG4gICAgICBhd2FpdCBpcGMud3JpdGVEb25lKGF3YWl0IGFjdGlvbihpcGMsIHNvdXJjZSwgb3B0aW9ucykpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnN0IGVycm9yID0gZSBhcyBFcnJvcjtcbiAgICAgIGNvbnN0IG0gPSBlcnJvci5zdGFjayA/PyBlcnJvci5tZXNzYWdlID8/IFN0cmluZyhlID8/IFwidW5rbm93biBlcnJvclwiKTtcbiAgICAgIGF3YWl0IGlwYy53cml0ZUVycm9yKG0pO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBhcHAuZXhpdCgpO1xuICAgIH1cbiAgfSxcbn0pO1xuIl19
188
+ window.${Me} = { process: process, eject: eject };
189
+ })();`;async function kr(r,e){if(r)try{await $(r.executeJavaScript(`${Pn} ${Me}.process(${e})`),5e3,"tick.executeJavaScript");}catch(t){h.error(vn,"tick failed:",t);}}var pt="[Shoot]";async function En({source:r,win:e,size:t,ms:o}){let n,i=0,a=e.webContents.debugger,c={width:t.width,height:t.height+1},s=setInterval(()=>{h.warn(pt,`${r} render is extremely slow @ ${o}, current: ${n} with ${i} repeats`),e.webContents.invalidate();},1e3);try{return await new Promise(d=>{let u=(p,w,f)=>{let l=f.getSize();if(!Be(l,c)){Pe(a,c);return}let g=f.toBitmap(),b=Ee(g,l);if(b===void 0||Math.abs(b-o)>1){n=b,i++;return}e.webContents.off("paint",u),d(Buffer.from(g.buffer,g.byteOffset,t.height*t.width*4)),e.webContents.stopPainting();};e.webContents.on("paint",u),e.webContents.startPainting();})}finally{clearInterval(s);}}async function Ir(r){var X=[];try{let{source:e,fps:t,width:o,height:n,duration:i,withAudio:a,outFile:c,disableHwCodec:s,signal:d,onProgress:u}=r;a&&h.warn(pt,"audio will be ignored on this mode");let p=performance.now();let w=Ne({source:e,renderer:r,signal:d});let f=A(X,await oe.create({width:o,height:n,fps:t,outFile:c,withAudio:a,disableHwCodec:s}),!0);let l=await w;h.debug(pt,"init done:",{source:e,cost:performance.now()-p});let g=Math.ceil(t*i);let b=1e3/t;let y=0;let _=0;let v;let x=l.webContents.debugger;let S=l.webContents.mainFrame;let he=S.frames[0];try{l.webContents.setFrameRate(t),l.webContents.stopPainting(),await Gt(x);for(let se=0;se<g;se++){d?.throwIfAborted();let ae=(se+1)*b;await kr(he,ae),await Xt(l.webContents,ae,b);let Ve=await En({source:e,win:l,size:{width:o,height:n},ms:ae});if(f.encodeBGRA(Ve).catch(C=>v??=C),y++,v)throw v;let ce=Math.floor(y/g*100);Math.abs(ce-_)>10&&(_=ce,u(_));}}finally{await ne(l),await f.finish();}if(v)throw v;if(y===0)throw new Error("no frames captured");else return {written:y,jank:0,outFile:c}}catch(we){var R=we,ge=true;}finally{var ie=T(X,R,ge);ie&&await ie;}}var Tn="[App]";function Rr(){h.debug(Tn,"gpu features:",electron.app.getGPUFeatureStatus());}var De=new AbortController,ut=false;Mt();electron.Menu.setApplicationMenu(null);electron.app.dock?.hide();electron.app.on("window-all-closed",()=>{});electron.app.on("gpu-info-update",Rr);electron.app.on("before-quit",r=>!ut&&r.preventDefault());electron.app.on("will-quit",r=>!ut&&r.preventDefault());assert.ok(process.send,"ipc channel missing \u2014 spawn with stdio[3]='ipc'");process.once("disconnect",()=>De.abort("disconnect"));process.on("message",r=>{let e=r;e.type==="cancel"&&De.abort(e.reason);});Wt({name:"app",run:async(r,e)=>{let t=new be;try{await electron.app.whenReady(),Kt(),Rr();for(let i of e.outFile.split(","))await promises.mkdir(path.dirname(i),{recursive:!0});let o=e.deterministic?Ir:Tr;De.signal.throwIfAborted();let n=await o({source:r,...e,signal:De.signal,onProgress:i=>t.writeProgress(i),onConsole:(i,a)=>t.writeConsole(i,a)});await t.writeDone(n);}catch(o){let n=o,i=n.stack??n.message??String(o??"unknown error");await t.writeError(i);}finally{ut=true,electron.app.exit();}}});//# sourceMappingURL=app.cjs.map
190
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL3RzdXBAOC41LjErMDNlNWY1ZWVlOTFmODQ1OS9ub2RlX21vZHVsZXMvdHN1cC9hc3NldHMvY2pzX3NoaW1zLmpzIiwiLi4vc3JjL2Jhc2UvZW52LnRzIiwiLi4vc3JjL2Jhc2UvcGFyc2VyLnRzIiwiLi4vc3JjL2Jhc2UvY29uc3RhbnRzLnRzIiwiLi4vc3JjL2Jhc2UvbG9nZ2luZy50cyIsIi4uL3NyYy9iYXNlL2NyYXNoLnRzIiwiLi4vc3JjL2Jhc2Uvbm9lcnIudHMiLCIuLi9zcmMvYmFzZS9wcm9jZXNzLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3NjaGVtYS50cyIsIi4uL3NyYy9jb21tb24udHMiLCIuLi9zcmMvcmVuZGVyZXIvaXBjLnRzIiwiLi4vc3JjL2Jhc2UvdGltaW5nLnRzIiwiLi4vc3JjL2Jhc2UvY2RwLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3N0ZWdvLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3Byb3RvY29sLnRzIiwiLi4vc3JjL2Jhc2UvbGltaXRlci50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvbWlzYy50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvY29kZWMudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL2F1ZGlvLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9oZXZjX2FscGhhL2JpdC50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvaGV2Y19hbHBoYS9uYWwudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL2hldmNfYWxwaGEvYWxwaGFfZGFyd2luLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9oZXZjX2FscGhhL3Zwcy50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvaGV2Y19hbHBoYS9hbHBoYS50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvaGV2Y19hbHBoYS9wYXJzZXIudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL2hldmNfYWxwaGEvbnZlbmMudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL3ZpZGVvLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci92aWRlb3Rvb2xib3gudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL2ZhY3RvcnkudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL211eGVyLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9zaW5rLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9waXBlbGluZS50cyIsIi4uL3NyYy9iYXNlL2ZyYW1lX2Ryb3AudHMiLCIuLi9zcmMvYmFzZS9pbWFnZS50cyIsIi4uL3NyYy9yZW5kZXJlci9hdWRpby50cyIsIi4uL3NyYy9iYXNlL3JldHJ5LnRzIiwiLi4vc3JjL3JlbmRlcmVyL2h0bWxfY2hlY2sudHMiLCIuLi9zcmMvYmFzZS93YWl0YWJsZV9ldmVudC50cyIsIi4uL3NyYy9yZW5kZXJlci9uZXR3b3JrLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3dpbmRvdy50cyIsIi4uL3NyYy9yZW5kZXJlci9yZW5kZXIudHMiLCIuLi9zcmMvcmVuZGVyZXIvdGljay50cyIsIi4uL3NyYy9yZW5kZXJlci9zaG9vdC50cyIsIi4uL3NyYy9hcHAudHMiXSwibmFtZXMiOlsiZ2V0SW1wb3J0TWV0YVVybCIsImltcG9ydE1ldGFVcmwiLCJwZW52IiwibmFtZSIsInBhcnNlciIsImRlZmF1bHRWYWx1ZSIsInBhcnNlTnVtYmVyIiwieCIsIm51bSIsInJlcXVpcmUiLCJjcmVhdGVSZXF1aXJlIiwicHVwTG9nTGV2ZWwiLCJwdXBQa2dSb290IiwiZGlybmFtZSIsImpvaW4iLCJwdXBBdWRpb1ByZWxvYWQiLCJERUJVRyIsIklORk8iLCJXQVJOIiwiRVJST1IiLCJGQVRBTCIsInN0YWNrSG9vayIsInRhcmdldCIsIl9jb250ZXh0IiwibWVzc2FnZXMiLCJwcm9jZXNzZWQiLCJtc2ciLCJfZmF0YWxfZGVjIiwiX2Vycm9yX2RlYyIsIl93YXJuX2RlYyIsIl9pbmZvX2RlYyIsIl9kZWJ1Z19kZWMiLCJfaW5pdCIsIkxvZ2dlciIsIl9sZXZlbCIsIl9fcnVuSW5pdGlhbGl6ZXJzIiwiX19wdWJsaWNGaWVsZCIsInZhbHVlIiwiZGVidWciLCJpbmZvIiwid2FybiIsImVycm9yIiwibHYiLCJtZXNzYWdlIiwicHJvYyIsInJlc29sdmUiLCJyZWplY3QiLCJmYXRhbCIsImRpc3BhdGNoIiwiZGF0YSIsImVyciIsImNvZGUiLCJzaWduYWwiLCJyZWFzb24iLCJfX2RlY29yYXRvclN0YXJ0IiwiX19kZWNvcmF0ZUVsZW1lbnQiLCJfX2RlY29yYXRvck1ldGFkYXRhIiwibG9nZ2VyIiwiTG9nIiwibGV2ZWwiLCJBVl9MT0dfRVJST1IiLCJBVl9MT0dfV0FSTklORyIsIlRBRyIsInN0YXJ0RWxlY3Ryb25DcmFzaFJlcG9ydGVyIiwiZHVtcERpciIsImFwcCIsIm1rZGlyU3luYyIsImNyYXNoUmVwb3J0ZXIiLCJub2VyciIsImZuIiwiYXJncyIsInJldCIsIlBVUF9BUkdTX0tFWSIsInBhcmdzIiwiYXJndiIsInByaXYiLCJhcmciLCJERUZBVUxUX1dJRFRIIiwiREVGQVVMVF9IRUlHSFQiLCJERUZBVUxUX0ZQUyIsIkRFRkFVTFRfRFVSQVRJT04iLCJERUZBVUxUX09VVF9GSUxFIiwiUmVuZGVyU2NoZW1hIiwieiIsImRlZmF1bHRSZW5kZXJPcHRpb25zIiwibWFrZUNMSSIsIm9wdGlvbnMiLCJzaGFwZSIsImQiLCJwcm9ncmFtIiwic291cmNlIiwib3B0cyIsImUiLCJJcGNXcml0ZXIiLCJwYXlsb2FkIiwic2xlZXAiLCJtcyIsIndpdGhUaW1lb3V0IiwicCIsImxhYmVsIiwidGltZXIiLCJDRFBfVElNRU9VVF9NUyIsInNlbmQiLCJjZHAiLCJtZXRob2QiLCJwYXJhbXMiLCJldmFsSW4iLCJleHByZXNzaW9uIiwiYWR2YW5jZVZpcnR1YWxUaW1lIiwiYnVkZ2V0IiwidGltZW91dCIsImhhbmRsZXIiLCJfIiwicGF1c2VWaXJ0dWFsVGltZSIsInJlc2l6ZURyYXdhYmxlIiwic2l6ZSIsIkZSQU1FX1NZTkNfTUFSS0VSX1dJRFRIIiwiU1RFR09fVElDS19DSEFOTkVMIiwiYnVpbGRTdGVnb0hUTUwiLCJ0YXJnZXRVUkwiLCJ3aWR0aCIsImhlaWdodCIsImRlY29kZVN0ZWdvIiwiYml0bWFwIiwibWFya2VyUm93IiwidGltZXN0YW1wIiwiaSIsInBpeGVsSWR4IiwiYml0Iiwic3RhcnRTdGVnbyIsInN3YXBCdWZmZXIiLCJ3YyIsImV4cGVjdGVkIiwiaW50ZXJ2YWwiLCJzd2FwcGVkIiwiciIsIlBVUF9TQ0hFTUUiLCJwcm90b2NvbCIsInNldHVwUHVwUHJvdG9jb2wiLCJyZXEiLCJ1cmwiLCJzcmMiLCJodG1sIiwiY3JlYXRlU3RlZ29VUkwiLCJDb25jdXJyZW5jeUxpbWl0ZXIiLCJtYXhDb25jdXJyZW5jeSIsInYiLCJrZWVwIiwiZW50cnkiLCJvcGVuVmlkZW9DdHgiLCJjdHgiLCJDb2RlY0NvbnRleHQiLCJSYXRpb25hbCIsIkFWX0NPREVDX0ZMQUdfR0xPQkFMX0hFQURFUiIsImsiLCJGRm1wZWdFcnJvciIsIm1ha2VGcmFtZSIsInBpeEZtdCIsImZyYW1lIiwiRnJhbWUiLCJtYWtlUGFja2V0IiwicGt0IiwiUGFja2V0IiwiZHJhaW5QYWNrZXRzIiwic3RyZWFtIiwibXV4ZXIiLCJBVkVSUk9SX0VBR0FJTiIsIkFWRVJST1JfRU9GIiwiQ29kZWNTdGF0ZSIsIl9Db2RlY1N0YXRlIiwiY29kZWMiLCJDb2RlYyIsIkZGX0RFQ09ERVJfUE5HIiwib2siLCJwbmciLCJBVl9QSVhfRk1UX0JHUkEiLCJBVl9QSVhfRk1UX1lVVkE0MjBQIiwicG5nRGF0YSIsIl9zdGFjayIsIl9fdXNpbmciLCJfZXJyb3IiLCJfaGFzRXJyb3IiLCJfX2NhbGxEaXNwb3NlIiwic3dzIiwiU29mdHdhcmVTY2FsZUNvbnRleHQiLCJmbXQiLCJTV1NfQklMSU5FQVIiLCJTQU1QTEVfRk1UX05BTUUiLCJBVl9TQU1QTEVfRk1UX0ZMVCIsIkFWX1NBTVBMRV9GTVRfRkxUUCIsIkF1ZGlvRW5jb2RlciIsIl9BdWRpb0VuY29kZXIiLCJvdXRGbXQiLCJBVl9DSEFOTkVMX0xBWU9VVF9TVEVSRU8iLCJpblNhbXBsZVJhdGUiLCJncmFwaCIsIkZpbHRlckdyYXBoIiwiYWJ1ZmZlciIsIkZpbHRlciIsImJ1ZlNyYyIsImFidWZmZXJzaW5rIiwiYnVmU2luayIsImZpbHRlckRlc2MiLCJvdXRwdXRzIiwiRmlsdGVySW5PdXQiLCJpbnB1dHMiLCJwY20iLCJuU2FtcGxlcyIsInBhY2tCaXRzIiwiYml0cyIsImJ1ZiIsImJ5dGUiLCJiIiwiQml0V3JpdGVyIiwidmFsIiwibiIsImxlbiIsInBhZCIsInN0YXJ0IiwiQml0UmVhZGVyIiwiemVyb3MiLCJBTk5FWF9CX1NUQVJUX0NPREUiLCJOQUxfQkxBX1dfTFAiLCJOQUxfUlNWX0lSQVBfVkNMMjMiLCJOQUxfVlBTIiwiTkFMX1NQUyIsIk5BTF9QUFMiLCJOQUxfU0VJX1BSRUZJWCIsInBhcnNlTmFsVHlwZSIsImhlYWRlcjAiLCJoZWFkZXIxIiwidHlwZSIsImxheWVySWQiLCJ0ZW1wb3JhbElkIiwiZW5jb2RlTmFsSGVhZGVyIiwiYnl0ZTAiLCJieXRlMSIsInNwbGl0TmFsVW5pdHMiLCJiaXRzdHJlYW0iLCJuYWxzIiwic2NMZW4iLCJuYWxTdGFydCIsIm5hbEVuZCIsImoiLCJyZXdyaXRlTmFsTGF5ZXJJZCIsIm5hbCIsIm91dCIsImIwIiwiYjEiLCJyZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uIiwiYWRkRW11bGF0aW9uUHJldmVudGlvbiIsIlZQU19QVExfQklUIiwiU1BTX1BUTF9CSVQiLCJQVExfVElFUl9CSVQiLCJQVExfQ09NUEFUMl9CSVQiLCJTTElDRV9UWVBFX0IiLCJTTElDRV9UWVBFX1AiLCJzZXRCaXQiLCJiaXRPZmZzZXQiLCJtYXNrIiwiY3VyIiwicGF0Y2hQdGwiLCJuYWxEYXRhIiwicHRsU3RhcnRCaXQiLCJyYnNwIiwicGF0Y2hIZXZjQWxwaGFQdGwiLCJjaHVua3MiLCJyZXdyaXRlT25lVWUiLCJuYWxJbiIsIm5ld1ZhbCIsImJyIiwiYnciLCJyZXdyaXRlVHdvVWUiLCJuZXdWYWwxIiwibmV3VmFsMiIsInJld3JpdGVBbHBoYVNwcyIsInNwcyIsIlNQU19TRVFfSURfQklUIiwicmV3cml0ZUFscGhhUHBzIiwicHBzIiwicmVhZFNlIiwidWUiLCJwYXJzZUlubGluZVN0UmVmUGljU2V0IiwibnVtRGVsdGFQb2NzU2V0MCIsImRlbHRhSWR4TWludXMxIiwibnVtTmVnIiwibnVtUG9zIiwicGFyc2VIZWFkZXJUb0FsaWdubWVudCIsIm5hbFR5cGUiLCJjZmciLCJpc0lyYXAiLCJzbGljZVR5cGUiLCJyZXdyaXRlQWxwaGFTbGljZUhlYWRlciIsInNsaWNlIiwicHJvYmUiLCJCIiwib2xkQWxpZ25CaXRzIiwic2xpY2VEYXRhQnl0ZU9mZnNldCIsImV4dHJhY3RQVEwiLCJ2cHNEYXRhIiwibWF4U3ViTGF5ZXJzTWludXMxIiwicHRsU3RhcnQiLCJ3cml0ZUJhc2VWUFMiLCJwdGwiLCJ3cml0ZVZQU0V4dGVuc2lvbiIsImJ1aWxkQWxwaGFWUFMiLCJleHRyYWN0QWxwaGFUb1l1djQyMHBCdWZmZXIiLCJiZ3JhRnJhbWUiLCJzcmNMcyIsInciLCJoIiwieVNpemUiLCJzcmMzMiIsInkiLCJyb3dCYXNlIiwiZHN0QmFzZSIsInJld3JpdGVBbHBoYVBhcmFtU2V0IiwiYnVpbGRVbmlmaWVkRXh0cmFkYXRhIiwiYmFzZUV4dHJhZGF0YSIsImFscGhhRXh0cmFkYXRhIiwiYmFzZU5hbHMiLCJhbHBoYU5hbHMiLCJhbHBoYUJ5VHlwZSIsImFyciIsImVtaXR0ZWQiLCJhbHBoYU5hbCIsImFEYXRhIiwiYnVpbGRBbHBoYUNoYW5uZWxJbmZvU0VJIiwiaDAiLCJoMSIsIndyaXRlQml0cyIsImludGVybGVhdmVBY2Nlc3NVbml0cyIsImZhaWwiLCJmaWVsZCIsImdvdCIsInNraXBQdGwiLCJtYXhTdWJMYXllcnMiLCJzdWJQcm9maWxlUHJlc2VudCIsInN1YkxldmVsUHJlc2VudCIsInBhcnNlU3BzIiwic3BzUmJzcCIsImNocm9tYUZvcm1hdCIsImxvZzJNYXhQb2NMc2IiLCJvcmRlckNvdW50Iiwic2FvRW5hYmxlZCIsIm51bVN0UnBzIiwibG9uZ1Rlcm1SZWZQaWNzUHJlc2VudCIsInNwc1RlbXBvcmFsTXZwRW5hYmxlZCIsInBhcnNlUHBzIiwicHBzUmJzcCIsIm51bUV4dHJhU2xpY2VIZWFkZXJCaXRzIiwiY2FiYWNJbml0UHJlc2VudCIsInBwc0xvb3BGaWx0ZXJBY3Jvc3NTbGljZXNFbmFibGVkIiwiZGVibG9ja2luZ0NvbnRyb2xQcmVzZW50Iiwic2xpY2VEZWJsb2NraW5nRGlzYWJsZWRPdmVycmlkZSIsInBhcnNlTnZlbmNIZXZjQ29uZmlnIiwiZXh0cmFkYXRhIiwicyIsIk52ZW5jRHVhbExheWVyRW5jb2RlciIsIl9OdmVuY0R1YWxMYXllckVuY29kZXIiLCJmcHMiLCJiaXRyYXRlIiwiRkZfRU5DT0RFUl9IRVZDX05WRU5DIiwiY29tbW9uIiwiYmFzZUN0eCIsImFscGhhQ3R4IiwiQVZfUElYX0ZNVF9ZVVY0MjBQIiwiaGV2Y0NmZyIsInVuaWZpZWQiLCJ1dlNpemUiLCJhbHBoYUJ1ZiIsImFscGhhU3dGcmFtZSIsInB0cyIsImJhc2VQa3QiLCJhbHBoYVBrdCIsImJhc2VSIiwiYWxwaGFSIiwiYmFzZVJlYWR5IiwiYWxwaGFSZWFkeSIsImludGVybGVhdmVkIiwiZHRzIiwiZHVyYXRpb24iLCJmbGFncyIsIlZpZGVvRW5jb2RlciIsIl9WaWRlb0VuY29kZXIiLCJjb2RlY05hbWUiLCJjb2RlY1RhZyIsImNvZGVjT3B0cyIsInJlc3QiLCJWaWRlb1Rvb2xib3hFbmNvZGVyIiwiX1ZpZGVvVG9vbGJveEVuY29kZXIiLCJodyIsIkFWQ09MX1JBTkdFX0pQRUciLCJjcmVhdGVId1ZpZGVvRW5jb2RlciIsImRpc2FibGVId0NvZGVjIiwic2hhcmVkSHciLCJIYXJkd2FyZUNvbnRleHQiLCJvd25zSHciLCJGRl9IV0RFVklDRV9UWVBFX1ZJREVPVE9PTEJPWCIsIkZGX0hXREVWSUNFX1RZUEVfQ1VEQSIsIkZGX0VOQ09ERVJfTElCWDI2NSIsIkZvcm1hdE11eGVyIiwib3V0UGF0aCIsImZvcm1hdE5hbWUiLCJGb3JtYXRDb250ZXh0IiwiY29kZWNDdHgiLCJGRl9FTkNPREVSX0xJQlZQWF9WUDkiLCJPdXRwdXRTaW5rIiwiX091dHB1dFNpbmsiLCJwYXRoIiwibG93ZXIiLCJ2aWRlbyIsImF1ZGlvIiwiRkZfRU5DT0RFUl9BQUMiLCJGRl9FTkNPREVSX0xJQk9QVVMiLCJzYW1wbGVSYXRlIiwiaHdWaWRlbyIsIkVuY29kZXJQaXBlbGluZSIsIl9FbmNvZGVyUGlwZWxpbmUiLCJvdXRGaWxlIiwid2l0aEF1ZGlvIiwib3V0RmlsZXMiLCJraW5kcyIsImlzSHdBbHBoYUNhcGFibGUiLCJzaW5rcyIsInNpbmsiLCJpbnB1dCIsIkZyYW1lRHJvcFN0YXRzIiwiY291bnQiLCJ0b3RhbERyb3BwZWQiLCJsb2NhbFN1bSIsIm1heEJ1cnN0IiwiYnVyc3QiLCJwZXJjZXB0aWJsZSIsImciLCJsIiwic2NvcmUiLCJzaXplRXF1YWxzIiwiYSIsIkFVRElPX01FVEFfQ0hBTk5FTCIsIkFVRElPX0NIVU5LX0NIQU5ORUwiLCJhdHRhY2hBdWRpb0xpc3RlbmVycyIsImVuY29kZXIiLCJnZXRWaWRlb1RpbWVNcyIsIm9uRXJyb3IiLCJvbk1ldGEiLCJfZSIsInN0YXJ0TXMiLCJzaWxlbmNlU2FtcGxlcyIsIm9uQ2h1bmsiLCJidWZmZXIiLCJ1c2VSZXRyeSIsIm1heEF0dGVtcHRzIiwidGltZW91dEVycm9yIiwiYXR0ZW1wdCIsInByb21pc2VzIiwic2V0VGltZW91dCIsIlNVUFBPUlRFRF9QUk9UT0NPTFMiLCJTT1VSQ0VfUEFUVEVSTiIsImNoZWNrSFRNTCIsIldhaXRhYmxlRXZlbnQiLCJtYXAiLCJwcm94aWVkVXJsIiwicGFyc2VkIiwiVVJMIiwic2V0SW50ZXJjZXB0b3IiLCJ3aW5kb3ciLCJ1c2VJbm5lclByb3h5IiwibGltaXRlciIsImV2ZW50cyIsIndhaXQiLCJrZXkiLCJvblRpbWVvdXQiLCJldmVudCIsImRldGFpbHMiLCJjYWxsYmFjayIsInByb3hpZWQiLCJyZXNwb25zZUhlYWRlcnMiLCJ1bnNldEludGVyY2VwdG9yIiwiVElNRU9VVF9FUlJPUiIsIndhaXRGb3JGaW5pc2giLCJ3aW4iLCJhY3Rpb24iLCJ0b2xlcmFudCIsImRvbmUiLCJkZXNjIiwiZXhpdENvZGUiLCJkaXNwb3NlV2luZG93Iiwib3BlbldpbmRvdyIsInJlbmRlcmVyIiwicHJlbG9hZCIsIm9uQ3JlYXRlZCIsIkJyb3dzZXJXaW5kb3ciLCJsaW5lTnVtYmVyIiwic291cmNlSWQiLCJtc2dzIiwib3BlbldpbmRvd1dpdGhSZXRyeSIsImxvYWRXaW5kb3ciLCJ3YXJtdXAiLCJvcGVuIiwic3RhY2siLCJyZW5kZXIiLCJvblByb2dyZXNzIiwidG90YWwiLCJmcmFtZUludGVydmFsIiwiZnJhbWVTaXplIiwid3JpdHRlbiIsImxhc3RXcml0dGVuVGltZSIsInByb2dyZXNzIiwiZW5jb2RlRXJyb3IiLCJyZXNvbHZlciIsInJlamVjdGVyIiwiZHJvcFN0YXRzIiwiZGlzcG9zZUF1ZGlvIiwic2NoZWR1bGVGcmFtZSIsInBhaW50IiwiX3IiLCJpbWFnZSIsImltYWdlU2l6ZSIsImN1cnJlbnRUaW1lIiwiY3JvcHBlZCIsInRpbWVEZWx0YSIsImZyYW1lc1RvSW5zZXJ0IiwibmV3UHJvZ3Jlc3MiLCJkdXJhdGlvbk1zIiwiZHJvcFNjb3JlIiwiX3Byb21pc2UiLCJUSUNLX1NZTUJPTCIsIkhPT0siLCJ0aWNrIiwidGltZXN0YW1wTXMiLCJsYXN0VHMiLCJsYWdneSIsIl9kIiwidHMiLCJzaG9vdCIsInRJbml0Iiwid2luUCIsInBpcGVsaW5lIiwibWFpbiIsImlmcmFtZSIsImZyYW1lTXMiLCJwcmludEZlYXR1cmVzIiwiY3RybCIsImV4aXRpbmciLCJNZW51IiwicmF3IiwiaXBjIiwibWtkaXIiLCJyZXN1bHQiLCJtIl0sIm1hcHBpbmdzIjoiZ2lCQUtBLElBQUEsRUFBQSxDQUFBLE1BQUEsQ0FBQSxNQUFBLENBQUEsSUFBQSxFQUFBLENBQUEsTUFBQSxDQUFBLGNBQUEsQ0FBQSxJQUFBLEVBQUEsQ0FBQSxNQUFBLENBQUEsd0JBQUEsQ0FBQSxJQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEdBQUEsQ0FBQSxDQUFBLENBQUEsTUFBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxNQUFBLENBQUEsR0FBQSxDQUFBLFNBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsTUFBQSxTQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxJQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxHQUFBLENBQUEsSUFBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxVQUFBLENBQUEsSUFBQSxDQUFBLFlBQUEsQ0FBQSxJQUFBLENBQUEsUUFBQSxDQUFBLElBQUEsQ0FBQSxLQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLElBQUEsRUFBQSxDQUFBLENBQUEsRUFBQSxJQUFBLEVBQUEsQ0FBQSxJQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLE9BQUEsQ0FBQSxRQUFBLENBQUEsUUFBQSxDQUFBLFFBQUEsQ0FBQSxVQUFBLENBQUEsT0FBQSxDQUFBLE9BQUEsQ0FBQSxLQUFBLENBQUEsS0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsRUFBQSxDQUFBLEdBQUEsTUFBQSxFQUFBLE9BQUEsQ0FBQSxFQUFBLFVBQUEsQ0FBQSxDQUFBLENBQUEsbUJBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxJQUFBLENBQUEsSUFBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxJQUFBLENBQUEsQ0FBQSxDQUFBLFFBQUEsQ0FBQSxDQUFBLENBQUEsY0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxxQkFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLElBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxFQUFBLElBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEdBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsVUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxHQUFBLENBQUEsSUFBQSxJQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsTUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLElBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxPQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxHQUFBLENBQUEsSUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEtBQUEsQ0FBQSxDQUFBLENBQUEsS0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsR0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLFNBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsSUFBQSxJQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsTUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxNQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxPQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsTUFBQSxDQUFBLENBQUEsR0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLElBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsR0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLElBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBLEdBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLE9BQUEsQ0FBQSxFQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxHQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxJQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxHQUFBLENBQUEsR0FBQSxDQUFBLEVBQUEsSUFBQSxDQUFBLENBQUEsT0FBQSxDQUFBLEVBQUEsUUFBQSxFQUFBLE9BQUEsQ0FBQSxFQUFBLFVBQUEsRUFBQSxDQUFBLENBQUEsaUJBQUEsQ0FBQSxDQUFBLElBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEdBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsY0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsR0FBQSxNQUFBLEdBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsU0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEdBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsT0FBQSxDQUFBLEVBQUEsVUFBQSxFQUFBLENBQUEsQ0FBQSx1QkFBQSxDQUFBLENBQUEsQ0FBQSxHQUFBLENBQUEsQ0FBQSxVQUFBLENBQUEsR0FBQSxDQUFBLENBQUEsQ0FBQSxJQUFBLENBQUEsSUFBQSxFQUFBLENBQUEsTUFBQSxDQUFBLENBQUEsQ0FBQSxPQUFBLE9BQUEsQ0FBQSxNQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLElBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxLQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsSUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxPQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxHQUFBLENBQUEsSUFBQSxDQUFBLENBQUEsT0FBQSxlQUFBLEVBQUEsVUFBQSxDQUFBLGVBQUEsQ0FBQSxTQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLE9BQUEsQ0FBQSxDQUFBLEtBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsSUFBQSxDQUFBLGlCQUFBLENBQUEsQ0FBQSxDQUFBLEtBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLFVBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLElBQUEsQ0FBQSxDQUFBLENBQUEsQ0FBQSxDQUFBLENB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QUFBQyxDQUFBQSxDQUFBSixDQUFBQSxDQUFBRSxDQUFBQSxDQUFBQyxDQUFBQSxFQUFBQSxDQU1GLENBRUEsSUFBSSxHQUFBLEVBQU0sQ0FDUixHQUFJLENBQUMsSUFBQSxDQUFLLElBQUEsQ0FBTSxDQUNkLElBQU1FLENBQUFBLENBQU0sSUFBSUMsMkJBQUFBLENBQ1ZDLENBQUFBLENBQU0sSUFBQSxDQUFLLEdBQUEsQ0FBSSxNQUFBLENBQ3JCRixDQUFBQSxDQUFJLFVBQUEsQ0FDRixJQUFBLENBQUssR0FBQSxDQUFJLEtBQUEsQ0FDVCxJQUFBLENBQUssR0FBQSxDQUFJLE1BQUEsQ0FDVEUsQ0FBQUEsQ0FDQSxJQUFBLENBQUssR0FBQSxDQUFJLEtBQUEsQ0FDVCxJQUFBLENBQUssR0FBQSxDQUFJLE1BQUEsQ0FDVFQsMEJBQUFBLENBQ0FVLG1CQUNGLENBQUEsQ0FDQSxJQUFBLENBQUssSUFBQSxDQUFPSCxFQUNkLENBQ0EsT0FBTyxJQUFBLENBQUssSUFDZCxDQUVBLENBQUMsTUFBQSxDQUFPLE9BQU8sQ0FBQSxFQUFVLENBQ3ZCLElBQUEsQ0FBSyxHQUFBLENBQUksTUFBQSxDQUFPLE9BQU8sQ0FBQSxFQUFFLENBQ3pCLElBQUEsQ0FBSyxHQUFBLENBQUksTUFBQSxDQUFPLE9BQU8sQ0FBQSxFQUFFLENBQ3pCLElBQUEsQ0FBSyxHQUFBLENBQUksTUFBQSxDQUFPLE9BQU8sQ0FBQSxFQUFFLENBQ3pCLEtBQUssSUFBQSxHQUFPLE1BQUEsQ0FBTyxPQUFPLENBQUEsR0FDNUIsQ0FDRixDQUFBLENDeERBLElBQU1JLEVBQUFBLENBQW1ELENBQUUsQ0FBQ0MsMkJBQWlCLEVBQUcsS0FBQSxDQUFPLENBQUNDLDRCQUFrQixFQUFHLE1BQU8sQ0FBQSxDQVd2R0MsRUFBQUEsQ0FBTixNQUFNQyxDQUFtQyxDQUN0QyxJQUFBLENBQ0EsT0FBQSxDQUNBLElBQUEsQ0FDQSxRQUFBLENBQ0EsT0FBQSxDQUNBLFVBQUEsQ0FDQSxZQUFBLENBQ0EsTUFBQSxDQUNBLE9BQUEsQ0FDQSxRQUFBLENBQ0EsT0FB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LENBQUcsSUFBQSxDQUFLLENBQUMsQ0FBQSxDQUNUQSxDQUFBQSxDQUFHLElBQUEsQ0FBSyxDQUFDLENBQUEsQ0FHVEEsQ0FBQUEsQ0FBRyxFQUFBLENBQUcsQ0FBQyxDQUFBLENBQ1BBLENBQUFBLENBQUcsSUFBQSxDQUFLLENBQUMsQ0FBQSxDQUNUQSxDQUFBQSxDQUFHLElBQUEsQ0FBS2dDLENBQUFBLENBQUksT0FBQSxDQUFTQSxDQUFBQSxDQUFJLFFBQUEsQ0FBVUEsQ0FBQUEsQ0FBSSxNQUFBLENBQVNBLENBQUFBLENBQUksUUFBUSxFQUU1RGhDLENBQUFBLENBQUcsRUFBQSxDQUFHLENBQUMsQ0FBQSxDQUNQQSxDQUFBQSxDQUFHLENBQUEsQ0FBRSxDQUFBLENBQUcsQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsQ0FBQSxDQUFFLENBQUEsQ0FBRyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxDQUFBLENBQUUsQ0FBQSxDQUFHLENBQUMsQ0FBQSxDQUVUQSxDQUFBQSxDQUFHLEVBQUEsQ0FBRyxDQUFDLENBQUEsQ0FDUEEsQ0FBQUEsQ0FBRyxDQUFBLENBQUV2SixDQUFBQSxDQUFPLEVBQUUsQ0FBQSxDQUNkdUosQ0FBQUEsQ0FBRyxDQUFBLENBQUV0SixDQUFBQSxDQUFRLEVBQUUsQ0FBQSxDQUNmc0osQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsQ0FBQSxDQUFFLENBQUEsQ0FBRyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxDQUFBLENBQUUsQ0FBQSxDQUFHLENBQUMsQ0FBQSxDQUNUQSxDQUFBQSxDQUFHLENBQUEsQ0FBRSxDQUFBLENBQUcsQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsSUFBQSxDQUFLLENBQUMsQ0FBQSxDQUVUQSxDQUFBQSxDQUFHLElBQUEsQ0FBSyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxDQUFBLENBQ1RBLEVBQUcsSUFBQSxDQUFLLENBQUMsQ0FBQSxDQUdUQSxDQUFBQSxD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QVF5TyxDQUFHLENBQUEsQ0FBRyxDQUFFLFNBQUEsQ0FBVyxFQUFLLENBQUMsQ0FBQSxDQUUvQyxJQUFNNE8sQ0FBQUEsQ0FBUzVZLEVBQVEsYUFBQSxDQUFnQmljLEVBQUFBLENBQVFsQyxHQUMvQzBDLEVBQUFBLENBQUssTUFBQSxDQUFPLGdCQUFlLENBQzNCLElBQU1NLENBQUFBLENBQVMsTUFBTW5FLEVBQU8sQ0FDMUIsTUFBQSxDQUFBeFksQ0FBQUEsQ0FDQSxHQUFHSixFQUNILE1BQUEsQ0FBUXljLEVBQUFBLENBQUssTUFBQSxDQUNiLFVBQUEsQ0FBYTdiLEdBQU1pYyxDQUFBQSxDQUFJLGFBQUEsQ0FBY2pjLENBQUMsQ0FBQSxDQUN0QyxTQUFBLENBQVcsQ0FBQ2lWLENBQUFBLENBQUdtSCxDQUFBQSxHQUFNSCxDQUFBQSxDQUFJLFlBQUEsQ0FBYWhILEVBQUdtSCxDQUFDLENBQzVDLENBQUMsQ0FBQSxDQUNELE1BQU1ILENBQUFBLENBQUksU0FBQSxDQUFVRSxDQUFNLEVBQzVCLE9BQVN6YyxDQUFBQSxDQUFHLENBQ1YsSUFBTW5ELENBQUFBLENBQVFtRCxDQUFBQSxDQUNSMGMsRUFBSTdmLENBQUFBLENBQU0sS0FBQSxFQUFTQSxDQUFBQSxDQUFNLE9BQUEsRUFBVyxPQUFPbUQsQ0FBQUEsRUFBSyxlQUFlLEVBQ3JFLE1BQU11YyxDQUFBQSxDQUFJLFdBQVdHLENBQUMsRUFDeEIsQ0FBQSxPQUFFLENBQ0FOLEdBQVUsSUFBQSxDQUNWL2QsWUFBQUEsQ0FBSSxPQUNOLENBQ0YsQ0FDRixDQUFDLENBQUEiLCJmaWxlIjoiYXBwLmNqcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIFNoaW0gZ2xvYmFscyBpbiBjanMgYnVuZGxlXG4vLyBUaGVyZSdzIGEgd2VpcmQgYnVnIHRoYXQgZXNidWlsZCB3aWxsIGFsd2F5cyBpbmplY3QgaW1wb3J0TWV0YVVybFxuLy8gaWYgd2UgZXhwb3J0IGl0IGFzIGBjb25zdCBpbXBvcnRNZXRhVXJsID0gLi4uIF9fZmlsZW5hbWUgLi4uYFxuLy8gQnV0IHVzaW5nIGEgZnVuY3Rpb24gd2lsbCBub3QgY2F1c2UgdGhpcyBpc3N1ZVxuXG5jb25zdCBnZXRJbXBvcnRNZXRhVXJsID0gKCkgPT4gXG4gIHR5cGVvZiBkb2N1bWVudCA9PT0gXCJ1bmRlZmluZWRcIiBcbiAgICA/IG5ldyBVUkwoYGZpbGU6JHtfX2ZpbGVuYW1lfWApLmhyZWYgXG4gICAgOiAoZG9jdW1lbnQuY3VycmVudFNjcmlwdCAmJiBkb2N1bWVudC5jdXJyZW50U2NyaXB0LnRhZ05hbWUudG9VcHBlckNhc2UoKSA9PT0gJ1NDUklQVCcpIFxuICAgICAgPyBkb2N1bWVudC5jdXJyZW50U2NyaXB0LnNyYyBcbiAgICAgIDogbmV3IFVSTChcIm1haW4uanNcIiwgZG9jdW1lbnQuYmFzZVVSSSkuaHJlZjtcblxuZXhwb3J0IGNvbnN0IGltcG9ydE1ldGFVcmwgPSAvKiBAX19QVVJFX18gKi8gZ2V0SW1wb3J0TWV0YVVybCgpXG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzI1LlxuXG5leHBvcnQgdHlwZSBFbnZQYXJzZXI8VD4gPSAodmFsdWU6IHVua25vd24pID0+IFQ7XG5cbmV4cG9ydCBmdW5jdGlvbiBwZW52PFQ+KG5hbWU6IHN0cmluZywgcGFyc2VyOiBFbnZQYXJzZXI8VD4sIGRlZmF1bHRWYWx1ZTogVCk6IFQ7XG5leHBvcnQgZnVuY3Rpb24gcGVudjxUPihuYW1lOiBzdHJpbmcsIHBhcnNlcjogRW52UGFyc2VyPFQ+LCBkZWZhdWx0VmFsdWU/OiBUKTogVCB8IHVuZGVmaW5lZDtcbmV4cG9ydCBmdW5jdGlvbiBwZW52PFQ+KG5hbWU6IHN0cmluZywgcGFyc2VyOiBFbnZQYXJzZXI8VD4sIGRlZmF1bHRWYWx1ZT86IFQpOiBUIHwgdW5kZWZpbmVkIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gcGFyc2VyKHByb2Nlc3MuZW52W25hbWVdKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMS8zMC5cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlTnVtYmVyKHg6IHVua25vd24pOiBudW1iZXIge1xuICBpZiAodHlwZW9mIHggPT09IFwibnVtYmVyXCIpIHtcbiAgICByZXR1cm4geDtcbiAgfVxuICBjb25zdCBudW0gPSBOdW1iZXIoeCk7XG4gIGlmIChOdW1iZXIuaXNOYU4obnVtKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgVmFsdWUgJHt4fSBpcyBub3QgYSB2YWxpZCBudW1iZXJgKTtcbiAgfVxuICByZXR1cm4gbnVtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VTdHJpbmcoeDogdW5rbm93bik6IHN0cmluZyB7XG4gIGlmICh0eXBlb2YgeCA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIHg7XG4gIHJldHVybiBTdHJpbmcoeCk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA5LlxuXG5pbXBvcnQgeyBjcmVhdGVSZXF1aXJlIH0gZnJvbSBcIm1vZHVsZVwiO1xuaW1wb3J0IHsgZGlybmFtZSwgam9pbiB9IGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyBwZW52IH0gZnJvbSBcIi4vZW52XCI7XG5pbXBvcnQgeyBwYXJzZU51bWJlciB9IGZyb20gXCIuL3BhcnNlclwiO1xuXG5jb25zdCByZXF1aXJlID0gY3JlYXRlUmVxdWlyZShpbXBvcnQubWV0YS51cmwpO1xuXG5leHBvcnQgY29uc3QgcHVwTG9nTGV2ZWwgPSBwZW52KFwiUFVQX0xPR19MRVZFTFwiLCBwYXJzZU51bWJlciwgMik7XG5cbmV4cG9ydCBjb25zdCBwdXBQa2dSb290ID0gZGlybmFtZShyZXF1aXJlLnJlc29sdmUoXCJwdXAtcmVjb3JkZXIvcGFja2FnZS5qc29uXCIpKTtcbmV4cG9ydCBjb25zdCBwdXBBcHAgPSBqb2luKHB1cFBrZ1Jvb3QsIFwiZGlzdFwiLCBcImFwcC5janNcIik7XG5leHBvcnQgY29uc3QgcHVwQXVkaW9QcmVsb2FkID0gam9pbihwdXBQa2dSb290LCBcImRpc3RcIiwgXCJhdWRpb19wcmVsb2FkLmNqc1wiKTtcbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDYuXG5cbmltcG9ydCB0eXBlIHsgQ2hpbGRQcm9jZXNzIH0gZnJvbSBcImNoaWxkX3Byb2Nlc3NcIjtcbmltcG9ydCB7IExvZyB9IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQgeyBBVl9MT0dfRVJST1IsIEFWX0xPR19XQVJOSU5HIH0gZnJvbSBcIm5vZGUtYXYvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBwdXBMb2dMZXZlbCB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIExvZ2dlckxpa2Uge1xuICBkZWJ1Zz8odGhpczogdm9pZCwgLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQ7XG5cbiAgaW5mbz8odGhpczogdm9pZCwgLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQ7XG5cbiAgd2Fybj8odGhpczogdm9pZCwgLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQ7XG5cbiAgZXJyb3I/KHRoaXM6IHZvaWQsIC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkO1xufVxuXG5jb25zdCBERUJVRyA9IFwiPHB1cEBkZWJ1Zz5cIjtcbmNvbnN0IElORk8gPSBcIjxwdXBAaW5mbz5cIjtcbmNvbnN0IFdBUk4gPSBcIjxwdXBAd2Fybj5cIjtcbmNvbnN0IEVSUk9SID0gXCI8cHVwQGVycm9yPlwiO1xuY29uc3QgRkFUQUwgPSBcIjxwdXBAZmF0YWw+XCI7XG5cbmZ1bmN0aW9uIHN0YWNrSG9vayh0YXJnZXQ6IEZ1bmN0aW9uLCBfY29udGV4dDogQ2xhc3NNZXRob2REZWNvcmF0b3JDb250ZXh0KSB7XG4gIHJldHVybiBmdW5jdGlvbiAodGhpczogTG9nZ2VyLCAuLi5tZXNzYWdlczogdW5rbm93bltdKSB7XG4gICAgY29uc3QgcHJvY2Vzc2VkID0gbWVzc2FnZXMubWFwKChtc2cpID0+IHtcbiAgICAgIHJldHVybiBtc2cgaW5zdGFuY2VvZiBFcnJvciA/IChtc2cuc3RhY2sgPz8gU3RyaW5nKG1zZykpIDogbXNnO1xuICAgIH0pO1xuICAgIHJldHVybiB0YXJnZXQuY2FsbCh0aGlzLCAuLi5wcm9jZXNzZWQpO1xuICB9O1xufVxuXG5leHBvcnQgY2xhc3MgTG9nZ2VyIGltcGxlbWVudHMgTG9nZ2VyTGlrZSB7XG4gIHByaXZhdGUgX2ltcGw/OiBMb2dnZXJMaWtlO1xuXG4gIGdldCBsZXZlbCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9sZXZlbDtcbiAgfVxuXG4gIHNldCBsZXZlbCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fbGV2ZWwgPSB2YWx1ZTtcbiAgICB0aGlzLmltcGwgPSB0aGlzLl9pbXBsID8/IGNvbnNvbGU7XG4gIH1cblxuICBnZXQgaW1wbCgpOiBMb2dnZXJMaWtlIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5faW1wbDtcbiAgfVxuXG4gIHNldCBpbXBsKHZhbHVlOiBMb2dnZXJMaWtlKSB7XG4gICAgY29uc3QgZGVidWcgPSB2YWx1ZS5kZWJ1ZyA/PyBjb25zb2xlLmRlYnVnO1xuICAgIGNvbnN0IGluZm8gPSB2YWx1ZS5pbmZvID8/IGNvbnNvbGUuaW5mbztcbiAgICBjb25zdCB3YXJuID0gdmFsdWUud2FybiA/PyBjb25zb2xlLndhcm47XG4gICAgY29uc3QgZXJyb3IgPSB2YWx1ZS5lcnJvciA/PyBjb25zb2xlLmVycm9yO1xuICAgIGNvbnN0IGx2ID0gdGhpcy5fbGV2ZWw7XG4gICAgdGhpcy5faW1wbCA9IHtcbiAgICAgIGRlYnVnOiBsdiA+PSAzID8gZGVidWcgOiB1bmRlZmluZWQsXG4gICAgICBpbmZvOiBsdiA+PSAyID8gaW5mbyA6IHVuZGVmaW5lZCxcbiAgICAgIHdhcm46IGx2ID49IDEgPyB3YXJuIDogdW5kZWZpbmVkLFxuICAgICAgZXJyb3I6IGx2ID49IDAgPyBlcnJvciA6IHVuZGVmaW5lZCxcbiAgICB9O1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfbGV2ZWw6IG51bWJlciA9IHB1cExvZ0xldmVsKSB7XG4gICAgdGhpcy5pbXBsID0gY29uc29sZTtcbiAgfVxuXG4gIEBzdGFja0hvb2tcbiAgZGVidWcoLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQge1xuICAgIHRoaXMuaW1wbD8uZGVidWc/LihERUJVRywgLi4ubWVzc2FnZXMpO1xuICB9XG5cbiAgQHN0YWNrSG9va1xuICBpbmZvKC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkIHtcbiAgICB0aGlzLmltcGw/LmluZm8/LihJTkZPLCAuLi5tZXNzYWdlcyk7XG4gIH1cblxuICBAc3RhY2tIb29rXG4gIHdhcm4oLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQge1xuICAgIHRoaXMuaW1wbD8ud2Fybj8uKFdBUk4sIC4uLm1lc3NhZ2VzKTtcbiAgfVxuXG4gIEBzdGFja0hvb2tcbiAgZXJyb3IoLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQge1xuICAgIHRoaXMuaW1wbD8uZXJyb3I/LihFUlJPUiwgLi4ubWVzc2FnZXMpO1xuICB9XG5cbiAgQHN0YWNrSG9va1xuICBmYXRhbCguLi5tZXNzYWdlczogdW5rbm93bltdKTogdm9pZCB7XG4gICAgdGhpcy5pbXBsPy5lcnJvcj8uKEZBVEFMLCAuLi5tZXNzYWdlcyk7XG4gICAgcHJvY2Vzcy5leGl0KDEpO1xuICB9XG5cbiAgcHJpdmF0ZSBkaXNwYXRjaChtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICBjb25zdCBtc2cgPSBtZXNzYWdlLnRyaW1FbmQoKTtcbiAgICBpZiAobXNnLnN0YXJ0c1dpdGgoREVCVUcpKSB7XG4gICAgICB0aGlzLmRlYnVnKG1zZy5zbGljZShERUJVRy5sZW5ndGggKyAxKSk7XG4gICAgfSBlbHNlIGlmIChtc2cuc3RhcnRzV2l0aChJTkZPKSkge1xuICAgICAgdGhpcy5pbmZvKG1zZy5zbGljZShJTkZPLmxlbmd0aCArIDEpKTtcbiAgICB9IGVsc2UgaWYgKG1zZy5zdGFydHNXaXRoKFdBUk4pKSB7XG4gICAgICB0aGlzLndhcm4obXNnLnNsaWNlKFdBUk4ubGVuZ3RoICsgMSkpO1xuICAgIH0gZWxzZSBpZiAobXNnLnN0YXJ0c1dpdGgoRVJST1IpKSB7XG4gICAgICB0aGlzLmVycm9yKG1zZy5zbGljZShFUlJPUi5sZW5ndGggKyAxKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaW5mbyhtc2cpO1xuICAgIH1cbiAgfVxuXG4gIGF0dGFjaChwcm9jOiBDaGlsZFByb2Nlc3MsIG5hbWU6IHN0cmluZykge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLmRlYnVnKGAke25hbWV9LmF0dGFjaGApO1xuICAgICAgbGV0IGZhdGFsOiBzdHJpbmcgPSBcIlwiO1xuICAgICAgY29uc3QgZGlzcGF0Y2ggPSAoZGF0YTogQnVmZmVyKSA9PiB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBkYXRhLnRvU3RyaW5nKCk7XG4gICAgICAgIGlmIChtZXNzYWdlLnN0YXJ0c1dpdGgoRkFUQUwpKSB7XG4gICAgICAgICAgZmF0YWwgKz0gbWVzc2FnZS5zbGljZShGQVRBTC5sZW5ndGggKyAxKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmRpc3BhdGNoKG1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgcHJvYy5zdGRlcnI/Lm9uKFwiZGF0YVwiLCBkaXNwYXRjaCk7XG4gICAgICBwcm9jLnN0ZG91dD8ub24oXCJkYXRhXCIsIGRpc3BhdGNoKTtcbiAgICAgIHByb2NcbiAgICAgICAgLm9uKFwiZXJyb3JcIiwgKGVycikgPT4ge1xuICAgICAgICAgIGZhdGFsICs9IGVyci5tZXNzYWdlO1xuICAgICAgICAgIHByb2Mua2lsbCgpO1xuICAgICAgICB9KVxuICAgICAgICAub25jZShcImNsb3NlXCIsIChjb2RlLCBzaWduYWwpID0+IHtcbiAgICAgICAgICBpZiAoY29kZSB8fCBzaWduYWwgfHwgZmF0YWwpIHtcbiAgICAgICAgICAgIGZhdGFsIHx8PSBgY29tbWFuZCBmYWlsZWQ6ICR7cHJvYy5zcGF3bmFyZ3Muam9pbihcIiBcIil9YDtcbiAgICAgICAgICAgIHRoaXMuZGVidWcoYCR7bmFtZX0uY2xvc2VgLCB7IGNvZGUsIHNpZ25hbCwgZmF0YWwgfSk7XG4gICAgICAgICAgICByZWplY3QobmV3IEVycm9yKGZhdGFsKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZGVidWcoYCR7bmFtZX0uY2xvc2VgKTtcbiAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC5vbihcInVuaGFuZGxlZFJlamVjdGlvblwiLCAocmVhc29uKSA9PiB7XG4gICAgICAgICAgdGhpcy5lcnJvcihgJHtuYW1lfS51bmhhbmRsZWRgLCByZWFzb24pO1xuICAgICAgICB9KVxuICAgICAgICAub24oXCJ1bmNhdWdodEV4Y2VwdGlvbk1vbml0b3JcIiwgKGVycikgPT4ge1xuICAgICAgICAgIHRoaXMuZXJyb3IoYCR7bmFtZX0udW5oYW5kbGVkYCwgZXJyKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn1cblxuY29uc3QgbG9nZ2VyID0gbmV3IExvZ2dlcigpO1xuXG4vLyBSb3V0ZSBmZm1wZWcgbmF0aXZlIGxvZ3MgdGhyb3VnaCBwdXAncyBsb2dnZXIuXG5Mb2cuc2V0Q2FsbGJhY2soKGxldmVsLCBtZXNzYWdlKSA9PiB7XG4gIGNvbnN0IG1zZyA9IG1lc3NhZ2UudHJpbUVuZCgpO1xuICBpZiAoIW1zZykgcmV0dXJuO1xuICBpZiAobGV2ZWwgPD0gQVZfTE9HX0VSUk9SKSBsb2dnZXIuZXJyb3IobXNnKTtcbiAgZWxzZSBpZiAobGV2ZWwgPD0gQVZfTE9HX1dBUk5JTkcpIGxvZ2dlci53YXJuKG1zZyk7XG59KTtcblxuZXhwb3J0IHsgbG9nZ2VyIH07XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzIxLlxuXG5pbXBvcnQgeyBhcHAsIGNyYXNoUmVwb3J0ZXIgfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IG1rZGlyU3luYyB9IGZyb20gXCJmc1wiO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi9sb2dnaW5nXCI7XG5cbmNvbnN0IFRBRyA9IFwiW0NyYXNoXVwiO1xuXG5leHBvcnQgZnVuY3Rpb24gc3RhcnRFbGVjdHJvbkNyYXNoUmVwb3J0ZXIoKSB7XG4gIGNvbnN0IGR1bXBEaXIgPSBqb2luKGFwcC5nZXRQYXRoKFwidXNlckRhdGFcIiksIFwiY3Jhc2hlc1wiKTtcbiAgbWtkaXJTeW5jKGR1bXBEaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICBhcHAuc2V0UGF0aChcImNyYXNoRHVtcHNcIiwgZHVtcERpcik7XG4gIGNyYXNoUmVwb3J0ZXIuc3RhcnQoe1xuICAgIHByb2R1Y3ROYW1lOiBcInB1cC1yZWNvcmRlclwiLFxuICAgIHVwbG9hZFRvU2VydmVyOiBmYWxzZSxcbiAgICBjb21wcmVzczogZmFsc2UsXG4gICAgaWdub3JlU3lzdGVtQ3Jhc2hIYW5kbGVyOiB0cnVlLFxuICB9KTtcbiAgbG9nZ2VyLmRlYnVnKFRBRywgXCJzZXQgZHVtcCB0b1wiLCBkdW1wRGlyKTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMjQuXG5cbmV4cG9ydCBmdW5jdGlvbiBub2VycjxGbiBleHRlbmRzICguLi5hcmdzOiBhbnlbXSkgPT4gYW55LCBEPihcbiAgZm46IEZuLFxuICBkZWZhdWx0VmFsdWU6IEQsXG4pOiAoLi4uYXJnczogUGFyYW1ldGVyczxGbj4pID0+IFJldHVyblR5cGU8Rm4+IHwgRCB7XG4gIHJldHVybiAoLi4uYXJncykgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXQgPSBmbiguLi5hcmdzKTtcbiAgICAgIGlmIChyZXQgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgIHJldHVybiByZXQuY2F0Y2goKCkgPT4gZGVmYXVsdFZhbHVlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXQ7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gZGVmYXVsdFZhbHVlO1xuICAgIH1cbiAgfTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDEvMzAuXG5cbmltcG9ydCB7IHNwYXduLCB0eXBlIENoaWxkUHJvY2VzcywgdHlwZSBTcGF3bk9wdGlvbnMgfSBmcm9tIFwiY2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0IHRyZWVLaWxsIGZyb20gXCJ0cmVlLWtpbGxcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuL2xvZ2dpbmdcIjtcblxuZXhwb3J0IGNvbnN0IFBVUF9BUkdTX0tFWSA9IFwiLS1wdXAtcHJpdi1hcmdzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJncygpIHtcbiAgY29uc3QgYXJndiA9IHByb2Nlc3MuYXJndjtcbiAgbGV0IHByaXYgPSBhcmd2LmZpbmQoKGFyZykgPT4gYXJnLnN0YXJ0c1dpdGgoUFVQX0FSR1NfS0VZKSk7XG4gIGlmICghcHJpdikge1xuICAgIGxvZ2dlci5kZWJ1ZyhcInByb2Nhcmd2XCIsIGFyZ3YpO1xuICAgIHJldHVybiBwcm9jZXNzLmFyZ3Y7XG4gIH1cbiAgY29uc3QgYXJncyA9IFtcImV4ZWNcIiwgLi4uYXJndi5zbGljZSgtMSldO1xuICBwcml2ID0gQnVmZmVyLmZyb20ocHJpdi5zcGxpdChcIj1cIilbMV0hLCBcImJhc2U2NFwiKS50b1N0cmluZygpO1xuICBhcmdzLnB1c2goLi4uSlNPTi5wYXJzZShwcml2KSk7XG4gIGxvZ2dlci5kZWJ1ZyhcInB1cGFyZ3NcIiwgYXJncyk7XG4gIHJldHVybiBhcmdzO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFByb2Nlc3NIYW5kbGUge1xuICBwcm9jZXNzOiBDaGlsZFByb2Nlc3M7XG4gIHdhaXQ6IFByb21pc2U8dm9pZD47XG4gIGdldCBraWxsZWQoKTogYm9vbGVhbjtcbiAga2lsbCgpOiB2b2lkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXhlYyhjbWQ6IHN0cmluZywgb3B0aW9ucz86IFNwYXduT3B0aW9ucyk6IFByb2Nlc3NIYW5kbGUge1xuICBjb25zdCBwYXJ0cyA9IGNtZC5zcGxpdChcIiBcIikuZmlsdGVyKChzKSA9PiBzLmxlbmd0aCk7XG4gIGNvbnN0IFtjb21tYW5kLCAuLi5hcmdzXSA9IHBhcnRzO1xuICBpZiAoIWNvbW1hbmQpIHRocm93IG5ldyBFcnJvcihcImVtcHR5IGNvbW1hbmRcIik7XG4gIGNvbnN0IHByb2MgPSBzcGF3bihjb21tYW5kLCBhcmdzLCB7XG4gICAgc3RkaW86IFwiaW5oZXJpdFwiLFxuICAgIC4uLm9wdGlvbnMsXG4gIH0pO1xuICBsZXQga2lsbGVkID0gZmFsc2U7XG4gIHJldHVybiB7XG4gICAgcHJvY2VzczogcHJvYyxcbiAgICB3YWl0OiBsb2dnZXIuYXR0YWNoKHByb2MsIGNvbW1hbmQpLFxuICAgIGdldCBraWxsZWQoKSB7XG4gICAgICByZXR1cm4ga2lsbGVkO1xuICAgIH0sXG4gICAga2lsbCgpIHtcbiAgICAgIGlmIChraWxsZWQpIHJldHVybjtcbiAgICAgIGtpbGxlZCA9IHRydWU7XG4gICAgICBjb25zdCBwaWQgPSBwcm9jLnBpZDtcbiAgICAgIGlmIChwaWQpIHRyZWVLaWxsKHBpZCwgXCJTSUdLSUxMXCIpO1xuICAgICAgZWxzZSBwcm9jLmtpbGwoXCJTSUdLSUxMXCIpO1xuICAgIH0sXG4gIH07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA2LlxuXG5pbXBvcnQgeiBmcm9tIFwiem9kXCI7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX1dJRFRIID0gMTkyMDtcbmV4cG9ydCBjb25zdCBERUZBVUxUX0hFSUdIVCA9IDEwODA7XG5leHBvcnQgY29uc3QgREVGQVVMVF9GUFMgPSAzMDtcbmV4cG9ydCBjb25zdCBERUZBVUxUX0RVUkFUSU9OID0gNTtcbmV4cG9ydCBjb25zdCBERUZBVUxUX09VVF9GSUxFID0gXCJvdXQvaHRtbC5tcDQsb3V0L2h0bWwud2VibVwiO1xuXG5leHBvcnQgY29uc3QgUmVuZGVyU2NoZW1hID0gei5vYmplY3Qoe1xuICBkdXJhdGlvbjogei5udW1iZXIoKS5kZXNjcmliZShcIkR1cmF0aW9uIGluIHNlY29uZHNcIiksXG4gIHdpZHRoOiB6Lm51bWJlcigpLmRlc2NyaWJlKFwiVmlkZW8gd2lkdGhcIiksXG4gIGhlaWdodDogei5udW1iZXIoKS5kZXNjcmliZShcIlZpZGVvIGhlaWdodFwiKSxcbiAgZnBzOiB6Lm51bWJlcigpLmRlc2NyaWJlKFwiRnJhbWVzIHBlciBzZWNvbmRcIiksXG4gIHdpdGhBdWRpbzogei5ib29sZWFuKCkuZGVzY3JpYmUoXCJDYXB0dXJlIGFuZCBlbmNvZGUgYXVkaW9cIiksXG4gIG91dEZpbGU6IHouc3RyaW5nKCkuZGVzY3JpYmUoXCJDb21tYS1zZXBhcmF0ZWQgb3V0cHV0IHBhdGhzOyBleHRlbnNpb24gKC5tcDQvLndlYm0pIHNlbGVjdHMgZW5jb2RlclwiKSxcbiAgdXNlSW5uZXJQcm94eTogei5ib29sZWFuKCkuZGVzY3JpYmUoXCJVc2UgYmlsaWJpbGkgaW5uZXIgcHJveHkgZm9yIHJlc291cmNlIGFjY2Vzc1wiKSxcbiAgZGV0ZXJtaW5pc3RpYzogei5ib29sZWFuKCkuZGVzY3JpYmUoXCJSZW5kZXIgYnkgZnJhbWUgcmF0aGVyIHRoYW4gcmVjb3JkaW5nXCIpLFxuICBkaXNhYmxlR3B1OiB6LmJvb2xlYW4oKS5kZXNjcmliZShcIkRpc2FibGUgR1BVIHJlbmRlcmluZywgbWF5IHJlZHVjZSBwZXJmb3JtYW5jZSBidXQgaW5jcmVhc2Ugc3RhYmlsaXR5XCIpLFxuICBkaXNhYmxlSHdDb2RlYzogei5ib29sZWFuKCkuZGVzY3JpYmUoXCJEaXNhYmxlIGhhcmR3YXJlIHZpZGVvIGVuY29kZXIgKE5WRU5DL1ZpZGVvVG9vbGJveCksIHVzZSBzb2Z0d2FyZSB4MjY1XCIpLFxuICB3aW5kb3dUb2xlcmFudDogei5ib29sZWFuKCkuZGVzY3JpYmUoXCJGYWxsIGJhY2sgdG8gZG9tLXJlYWR5IGlmIHdhcm11cCBsb2FkIHRpbWVzIG91dFwiKSxcbn0pO1xuXG5leHBvcnQgdHlwZSBSZW5kZXJPcHRpb25zID0gei5pbmZlcjx0eXBlb2YgUmVuZGVyU2NoZW1hPjtcblxuZXhwb3J0IHR5cGUgQ29uc29sZUNhbGxiYWNrID0gKGxldmVsOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZykgPT4gdm9pZDtcblxuZXhwb3J0IHR5cGUgUHJvZ3Jlc3NDYWxsYmFjayA9IChwcm9ncmVzczogbnVtYmVyKSA9PiB2b2lkO1xuXG5leHBvcnQgaW50ZXJmYWNlIElQQ1JlbmRlck9wdGlvbnMgZXh0ZW5kcyBSZW5kZXJPcHRpb25zIHtcbiAgc291cmNlOiBzdHJpbmc7XG4gIHNpZ25hbDogQWJvcnRTaWduYWw7XG4gIG9uUHJvZ3Jlc3M6IFByb2dyZXNzQ2FsbGJhY2s7XG4gIG9uQ29uc29sZTogQ29uc29sZUNhbGxiYWNrO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlbmRlclJlc3VsdCB7XG4gIG9wdGlvbnM6IFJlbmRlck9wdGlvbnM7XG4gIHdyaXR0ZW46IG51bWJlcjtcbiAgamFuazogbnVtYmVyO1xuICBvdXRGaWxlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0UmVuZGVyT3B0aW9uczogUmVuZGVyT3B0aW9ucyA9IHtcbiAgd2lkdGg6IERFRkFVTFRfV0lEVEgsXG4gIGhlaWdodDogREVGQVVMVF9IRUlHSFQsXG4gIGZwczogREVGQVVMVF9GUFMsXG4gIGR1cmF0aW9uOiBERUZBVUxUX0RVUkFUSU9OLFxuICBvdXRGaWxlOiBERUZBVUxUX09VVF9GSUxFLFxuICB3aXRoQXVkaW86IGZhbHNlLFxuICB1c2VJbm5lclByb3h5OiBmYWxzZSxcbiAgZGV0ZXJtaW5pc3RpYzogZmFsc2UsXG4gIGRpc2FibGVHcHU6IGZhbHNlLFxuICBkaXNhYmxlSHdDb2RlYzogZmFsc2UsXG4gIHdpbmRvd1RvbGVyYW50OiBmYWxzZSxcbn07XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA5LlxuXG5pbXBvcnQgeyBwcm9ncmFtIH0gZnJvbSBcImNvbW1hbmRlclwiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4vYmFzZS9sb2dnaW5nXCI7XG5pbXBvcnQgeyBub2VyciB9IGZyb20gXCIuL2Jhc2Uvbm9lcnJcIjtcbmltcG9ydCB7IHBhcnNlTnVtYmVyIH0gZnJvbSBcIi4vYmFzZS9wYXJzZXJcIjtcbmltcG9ydCB7IHBhcmdzIH0gZnJvbSBcIi4vYmFzZS9wcm9jZXNzXCI7XG5pbXBvcnQgeyBkZWZhdWx0UmVuZGVyT3B0aW9ucywgUmVuZGVyU2NoZW1hLCB0eXBlIFJlbmRlck9wdGlvbnMgfSBmcm9tIFwiLi9yZW5kZXJlci9zY2hlbWFcIjtcblxuZXhwb3J0IGludGVyZmFjZSBDTElPcHRpb25zIHtcbiAgbmFtZTogc3RyaW5nO1xuICBydW46IChzb3VyY2U6IHN0cmluZywgb3B0aW9uczogUmVuZGVyT3B0aW9ucykgPT4gUHJvbWlzZTx1bmtub3duPjtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG1ha2VDTEkob3B0aW9uczogQ0xJT3B0aW9ucykge1xuICBjb25zdCBzaGFwZSA9IFJlbmRlclNjaGVtYS5zaGFwZTtcbiAgY29uc3QgZCA9IGRlZmF1bHRSZW5kZXJPcHRpb25zO1xuICBwcm9ncmFtXG4gICAgLm5hbWUob3B0aW9ucy5uYW1lKVxuICAgIC5hcmd1bWVudChcIjxzb3VyY2U+XCIsIFwiZmlsZTovLywgaHR0cChzKTovLywgb3IgZGF0YTogVVJJXCIpXG4gICAgLm9wdGlvbihcIi1XLCAtLXdpZHRoIDxudW1iZXI+XCIsIHNoYXBlLndpZHRoLmRlc2NyaXB0aW9uLCBgJHtkLndpZHRofWApXG4gICAgLm9wdGlvbihcIi1ILCAtLWhlaWdodCA8bnVtYmVyPlwiLCBzaGFwZS5oZWlnaHQuZGVzY3JpcHRpb24sIGAke2QuaGVpZ2h0fWApXG4gICAgLm9wdGlvbihcIi1mLCAtLWZwcyA8bnVtYmVyPlwiLCBzaGFwZS5mcHMuZGVzY3JpcHRpb24sIGAke2QuZnBzfWApXG4gICAgLm9wdGlvbihcIi10LCAtLWR1cmF0aW9uIDxudW1iZXI+XCIsIHNoYXBlLmR1cmF0aW9uLmRlc2NyaXB0aW9uLCBgJHtkLmR1cmF0aW9ufWApXG4gICAgLm9wdGlvbihcIi1vLCAtLW91dC1maWxlIDxwYXRoPlwiLCBzaGFwZS5vdXRGaWxlLmRlc2NyaXB0aW9uLCBkLm91dEZpbGUpXG4gICAgLm9wdGlvbihcIi1hLCAtLXdpdGgtYXVkaW9cIiwgc2hhcGUud2l0aEF1ZGlvLmRlc2NyaXB0aW9uLCBkLndpdGhBdWRpbylcbiAgICAub3B0aW9uKFwiLWQsIC0tZGV0ZXJtaW5pc3RpY1wiLCBzaGFwZS5kZXRlcm1pbmlzdGljLmRlc2NyaXB0aW9uLCBkLmRldGVybWluaXN0aWMpXG4gICAgLm9wdGlvbihcIi0tdXNlLWlubmVyLXByb3h5XCIsIHNoYXBlLnVzZUlubmVyUHJveHkuZGVzY3JpcHRpb24sIGQudXNlSW5uZXJQcm94eSlcbiAgICAub3B0aW9uKFwiLS1kaXNhYmxlLWdwdVwiLCBzaGFwZS5kaXNhYmxlR3B1LmRlc2NyaXB0aW9uLCBkLmRpc2FibGVHcHUpXG4gICAgLm9wdGlvbihcIi0tZGlzYWJsZS1ody1jb2RlY1wiLCBzaGFwZS5kaXNhYmxlSHdDb2RlYy5kZXNjcmlwdGlvbiwgZC5kaXNhYmxlSHdDb2RlYylcbiAgICAub3B0aW9uKFwiLS13aW5kb3ctdG9sZXJhbnRcIiwgc2hhcGUud2luZG93VG9sZXJhbnQuZGVzY3JpcHRpb24sIGQud2luZG93VG9sZXJhbnQpXG4gICAgLmFjdGlvbihhc3luYyAoc291cmNlOiBzdHJpbmcsIG9wdHMpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IG9wdGlvbnMucnVuKHNvdXJjZSwge1xuICAgICAgICAgIHdpZHRoOiBub2VycihwYXJzZU51bWJlciwgZC53aWR0aCkob3B0cy53aWR0aCksXG4gICAgICAgICAgaGVpZ2h0OiBub2VycihwYXJzZU51bWJlciwgZC5oZWlnaHQpKG9wdHMuaGVpZ2h0KSxcbiAgICAgICAgICBmcHM6IG5vZXJyKHBhcnNlTnVtYmVyLCBkLmZwcykob3B0cy5mcHMpLFxuICAgICAgICAgIGR1cmF0aW9uOiBub2VycihwYXJzZU51bWJlciwgZC5kdXJhdGlvbikob3B0cy5kdXJhdGlvbiksXG4gICAgICAgICAgb3V0RmlsZTogb3B0cy5vdXRGaWxlID8/IGQub3V0RmlsZSxcbiAgICAgICAgICB3aXRoQXVkaW86IG9wdHMud2l0aEF1ZGlvID8/IGQud2l0aEF1ZGlvLFxuICAgICAgICAgIHVzZUlubmVyUHJveHk6IG9wdHMudXNlSW5uZXJQcm94eSA/PyBkLnVzZUlubmVyUHJveHksXG4gICAgICAgICAgZGV0ZXJtaW5pc3RpYzogb3B0cy5kZXRlcm1pbmlzdGljID8/IGQuZGV0ZXJtaW5pc3RpYyxcbiAgICAgICAgICBkaXNhYmxlR3B1OiBvcHRzLmRpc2FibGVHcHUgPz8gZC5kaXNhYmxlR3B1LFxuICAgICAgICAgIGRpc2FibGVId0NvZGVjOiBvcHRzLmRpc2FibGVId0NvZGVjID8/IGQuZGlzYWJsZUh3Q29kZWMsXG4gICAgICAgICAgd2luZG93VG9sZXJhbnQ6IG9wdHMud2luZG93VG9sZXJhbnQgPz8gZC53aW5kb3dUb2xlcmFudCxcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGxvZ2dlci5mYXRhbChlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgYXdhaXQgcHJvZ3JhbS5wYXJzZUFzeW5jKHBhcmdzKCkpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8wMS5cblxuaW1wb3J0IHR5cGUgeyBDaGlsZFByb2Nlc3MgfSBmcm9tIFwiY2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSBcImV2ZW50c1wiO1xuXG5leHBvcnQgY29uc3QgZW51bSBJcGNNc2dUeXBlIHtcbiAgLy8gY2hpbGQg4oaSIHBhcmVudFxuICBDT05TT0xFID0gXCJjb25zb2xlXCIsXG4gIFBST0dSRVNTID0gXCJwcm9ncmVzc1wiLFxuICBET05FID0gXCJkb25lXCIsXG4gIEVSUk9SID0gXCJlcnJvclwiLFxuICAvLyBwYXJlbnQg4oaSIGNoaWxkXG4gIENBTkNFTCA9IFwiY2FuY2VsXCIsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29uc29sZU1zZyB7XG4gIHR5cGU6IElwY01zZ1R5cGUuQ09OU09MRTtcbiAgbGV2ZWw6IHN0cmluZztcbiAgbWVzc2FnZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENhbmNlbE1zZyB7XG4gIHR5cGU6IElwY01zZ1R5cGUuQ0FOQ0VMO1xuICByZWFzb24/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSXBjRG9uZVBheWxvYWQge1xuICB3cml0dGVuOiBudW1iZXI7XG4gIGphbms6IG51bWJlcjtcbiAgb3V0RmlsZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFByb2dyZXNzTXNnIHtcbiAgdHlwZTogSXBjTXNnVHlwZS5QUk9HUkVTUztcbiAgdmFsdWU6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEb25lTXNnIHtcbiAgdHlwZTogSXBjTXNnVHlwZS5ET05FO1xuICBwYXlsb2FkOiBJcGNEb25lUGF5bG9hZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFcnJvck1zZyB7XG4gIHR5cGU6IElwY01zZ1R5cGUuRVJST1I7XG4gIGVycm9yOiBzdHJpbmc7XG59XG5cbmV4cG9ydCB0eXBlIElwY01zZyA9IENvbnNvbGVNc2cgfCBQcm9ncmVzc01zZyB8IERvbmVNc2cgfCBFcnJvck1zZyB8IENhbmNlbE1zZztcblxuZXhwb3J0IGludGVyZmFjZSBJcGNFdmVudHMge1xuICBwcm9ncmVzczogW3ZhbHVlOiBudW1iZXJdO1xuICBjb25zb2xlOiBbbGV2ZWw6IHN0cmluZywgbXNnOiBzdHJpbmddO1xuICBkb25lOiBbcGF5bG9hZDogSXBjRG9uZVBheWxvYWRdO1xuICBlcnJvcjogW2Vycm9yOiBFcnJvcl07XG4gIGNsb3NlOiBbY29kZTogbnVtYmVyIHwgbnVsbF07XG59XG5cbmV4cG9ydCBjbGFzcyBJcGNXcml0ZXIge1xuICB3cml0ZUNvbnNvbGUobGV2ZWw6IHN0cmluZywgbWVzc2FnZTogc3RyaW5nKSB7XG4gICAgdGhpcy5zZW5kKHsgdHlwZTogSXBjTXNnVHlwZS5DT05TT0xFLCBsZXZlbCwgbWVzc2FnZSB9KTtcbiAgfVxuXG4gIHdyaXRlUHJvZ3Jlc3ModmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuc2VuZCh7IHR5cGU6IElwY01zZ1R5cGUuUFJPR1JFU1MsIHZhbHVlIH0pO1xuICB9XG5cbiAgd3JpdGVFcnJvcihlcnJvcjogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuc2VuZCh7IHR5cGU6IElwY01zZ1R5cGUuRVJST1IsIGVycm9yIH0pO1xuICB9XG5cbiAgd3JpdGVEb25lKHBheWxvYWQ6IElwY0RvbmVQYXlsb2FkKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuc2VuZCh7IHR5cGU6IElwY01zZ1R5cGUuRE9ORSwgcGF5bG9hZCB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2VuZChtc2c6IElwY01zZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgaWYgKCFwcm9jZXNzLnNlbmQpIHJldHVybiByZXNvbHZlKCk7XG4gICAgICBwcm9jZXNzLnNlbmQobXNnLCAoKSA9PiByZXNvbHZlKCkpO1xuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBJcGNSZWFkZXIgZXh0ZW5kcyBFdmVudEVtaXR0ZXI8SXBjRXZlbnRzPiB7XG4gIGNvbnN0cnVjdG9yKGNoaWxkOiBDaGlsZFByb2Nlc3MpIHtcbiAgICBzdXBlcigpO1xuICAgIGNoaWxkLm9uKFwibWVzc2FnZVwiLCAocmF3KSA9PiB7XG4gICAgICBjb25zdCBtc2cgPSByYXcgYXMgSXBjTXNnO1xuICAgICAgc3dpdGNoIChtc2cudHlwZSkge1xuICAgICAgICBjYXNlIElwY01zZ1R5cGUuQ09OU09MRToge1xuICAgICAgICAgIHRoaXMuZW1pdChcImNvbnNvbGVcIiwgbXNnLmxldmVsLCBtc2cubWVzc2FnZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBJcGNNc2dUeXBlLlBST0dSRVNTOiB7XG4gICAgICAgICAgdGhpcy5lbWl0KFwicHJvZ3Jlc3NcIiwgbXNnLnZhbHVlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIElwY01zZ1R5cGUuRE9ORToge1xuICAgICAgICAgIHRoaXMuZW1pdChcImRvbmVcIiwgbXNnLnBheWxvYWQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgSXBjTXNnVHlwZS5FUlJPUjoge1xuICAgICAgICAgIHRoaXMuZW1pdChcImVycm9yXCIsIG5ldyBFcnJvcihtc2cuZXJyb3IpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIGNoaWxkLm9uY2UoXCJleGl0XCIsIChjKSA9PiB0aGlzLmVtaXQoXCJjbG9zZVwiLCBjKSk7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDkuXG5cbmV4cG9ydCBmdW5jdGlvbiBzbGVlcChtczogbnVtYmVyKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCBtcykpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gd2l0aFRpbWVvdXQ8VD4ocDogUHJvbWlzZTxUPiwgbXM6IG51bWJlciwgbGFiZWw6IHN0cmluZyk6IFByb21pc2U8VD4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiByZWplY3QobmV3IEVycm9yKGAke2xhYmVsfSB0aW1lZCBvdXQgYWZ0ZXIgJHttc31tc2ApKSwgbXMpO1xuICAgIHAudGhlbihyZXNvbHZlLCByZWplY3QpLmZpbmFsbHkoKCkgPT4gY2xlYXJUaW1lb3V0KHRpbWVyKSk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGVyaW9kaWNhbChjYWxsYmFjazogKGNvdW50OiBudW1iZXIpID0+IFByb21pc2U8dm9pZD4gfCB2b2lkLCBtczogbnVtYmVyKSB7XG4gIGxldCB0b2tlbjogTm9kZUpTLlRpbWVvdXQ7XG4gIGxldCBjbG9zZWQgPSBmYWxzZTtcbiAgYXN5bmMgZnVuY3Rpb24gdGljayhjb3VudDogbnVtYmVyKSB7XG4gICAgYXdhaXQgY2FsbGJhY2soY291bnQpO1xuICAgIGlmIChjbG9zZWQpIHJldHVybjtcbiAgICB0b2tlbiA9IHNldFRpbWVvdXQoKCkgPT4gdGljayhjb3VudCArIDEpLCBtcyk7XG4gIH1cbiAgdG9rZW4gPSBzZXRUaW1lb3V0KCgpID0+IHRpY2soMCksIG1zKTtcbiAgcmV0dXJuICgpID0+IHtcbiAgICBjbG9zZWQgPSB0cnVlO1xuICAgIGNsZWFyVGltZW91dCh0b2tlbik7XG4gIH07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAzLzEzLlxuXG5pbXBvcnQgdHlwZSB7IERlYnVnZ2VyLCBTaXplIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyB3aXRoVGltZW91dCB9IGZyb20gXCIuL3RpbWluZ1wiO1xuXG5jb25zdCBDRFBfVElNRU9VVF9NUyA9IDVfMDAwO1xuXG5leHBvcnQgZnVuY3Rpb24gc2VuZChjZHA6IERlYnVnZ2VyLCBtZXRob2Q6IHN0cmluZywgcGFyYW1zPzogb2JqZWN0KTogUHJvbWlzZTx1bmtub3duPiB7XG4gIHJldHVybiB3aXRoVGltZW91dChjZHAuc2VuZENvbW1hbmQobWV0aG9kLCBwYXJhbXMpLCBDRFBfVElNRU9VVF9NUywgYGNkcC4ke21ldGhvZH1gKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV2YWxJbihjZHA6IERlYnVnZ2VyLCBleHByZXNzaW9uOiBzdHJpbmcpOiBQcm9taXNlPHVua25vd24+IHtcbiAgcmV0dXJuIHdpdGhUaW1lb3V0KHNlbmQoY2RwLCBcIlJ1bnRpbWUuZXZhbHVhdGVcIiwgeyBleHByZXNzaW9uIH0pLCBDRFBfVElNRU9VVF9NUywgXCJldmFsSW5cIik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhZHZhbmNlVmlydHVhbFRpbWUoY2RwOiBEZWJ1Z2dlciwgYnVkZ2V0OiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjZHAub2ZmKFwibWVzc2FnZVwiLCBoYW5kbGVyKTtcbiAgICAgIHJlamVjdChuZXcgRXJyb3IoYGFkdmFuY2VWaXJ0dWFsVGltZSB0aW1lZCBvdXQgYWZ0ZXIgJHtDRFBfVElNRU9VVF9NU31tc2ApKTtcbiAgICB9LCBDRFBfVElNRU9VVF9NUyk7XG5cbiAgICBjb25zdCBoYW5kbGVyID0gKF86IEVsZWN0cm9uLkV2ZW50LCBtZXRob2Q6IHN0cmluZykgPT4ge1xuICAgICAgaWYgKG1ldGhvZCA9PT0gXCJFbXVsYXRpb24udmlydHVhbFRpbWVCdWRnZXRFeHBpcmVkXCIpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICBjZHAub2ZmKFwibWVzc2FnZVwiLCBoYW5kbGVyKTtcbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgfVxuICAgIH07XG4gICAgY2RwLm9uKFwibWVzc2FnZVwiLCBoYW5kbGVyKTtcbiAgICBzZW5kKGNkcCwgXCJFbXVsYXRpb24uc2V0VmlydHVhbFRpbWVQb2xpY3lcIiwgeyBwb2xpY3k6IFwiYWR2YW5jZVwiLCBidWRnZXQgfSkuY2F0Y2goKGUpID0+IHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgIGNkcC5vZmYoXCJtZXNzYWdlXCIsIGhhbmRsZXIpO1xuICAgICAgcmVqZWN0KGUpO1xuICAgIH0pO1xuICB9KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHBhdXNlVmlydHVhbFRpbWUoY2RwOiBEZWJ1Z2dlcik6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBzZW5kKGNkcCwgXCJFbXVsYXRpb24uc2V0VmlydHVhbFRpbWVQb2xpY3lcIiwgeyBwb2xpY3k6IFwicGF1c2VcIiB9KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc2l6ZURyYXdhYmxlKGNkcDogRGVidWdnZXIsIHNpemU6IFNpemUpIHtcbiAgYXdhaXQgc2VuZChjZHAsIFwiRW11bGF0aW9uLnNldERldmljZU1ldHJpY3NPdmVycmlkZVwiLCB7XG4gICAgLi4uc2l6ZSxcbiAgICBkZXZpY2VTY2FsZUZhY3RvcjogMSxcbiAgICBtb2JpbGU6IGZhbHNlLFxuICB9KTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDkuXG5cbmltcG9ydCB7IHR5cGUgRGVidWdnZXIsIHR5cGUgU2l6ZSwgdHlwZSBXZWJDb250ZW50cyB9IGZyb20gXCJlbGVjdHJvblwiO1xuaW1wb3J0IHsgYWR2YW5jZVZpcnR1YWxUaW1lLCBldmFsSW4gfSBmcm9tIFwiLi4vYmFzZS9jZHBcIjtcbmltcG9ydCB7IHdpdGhUaW1lb3V0IH0gZnJvbSBcIi4uL2Jhc2UvdGltaW5nXCI7XG5cbmV4cG9ydCBjb25zdCBGUkFNRV9TWU5DX01BUktFUl9XSURUSCA9IDMyO1xuZXhwb3J0IGNvbnN0IEZSQU1FX1NZTkNfTUFSS0VSX0hFSUdIVCA9IDE7XG5leHBvcnQgY29uc3QgU1RFR09fVElDS19DSEFOTkVMID0gXCJzdGVnby10aWNrXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFN0ZWdvSFRNTCh0YXJnZXRVUkw6IHN0cmluZywgc2l6ZTogU2l6ZSk6IHN0cmluZyB7XG4gIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gc2l6ZTtcbiAgcmV0dXJuIGA8IURPQ1RZUEUgaHRtbD5cbjxodG1sPlxuPGhlYWQ+XG4gIDxtZXRhIGNoYXJzZXQ9XCJVVEYtOFwiPlxuICA8c3R5bGU+XG4gICAgKiB7IG1hcmdpbjogMDsgcGFkZGluZzogMDsgYm94LXNpemluZzogYm9yZGVyLWJveDsgfVxuICAgIGh0bWwsIGJvZHkgeyB3aWR0aDogJHt3aWR0aH1weDsgaGVpZ2h0OiAke2hlaWdodCArIDF9cHg7IG92ZXJmbG93OiBoaWRkZW47IH1cbiAgICAjdGFyZ2V0IHsgXG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7IFxuICAgICAgdG9wOiAwOyBcbiAgICAgIGxlZnQ6IDA7IFxuICAgICAgd2lkdGg6ICR7d2lkdGh9cHg7IFxuICAgICAgaGVpZ2h0OiAke2hlaWdodH1weDsgXG4gICAgICBib3JkZXI6IG5vbmU7IFxuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgfVxuICAgICNzdGVnbyB7IFxuICAgICAgcG9zaXRpb246IGFic29sdXRlOyBcbiAgICAgIHRvcDogJHtoZWlnaHR9cHg7IFxuICAgICAgbGVmdDogMDsgXG4gICAgICB3aWR0aDogJHt3aWR0aH1weDsgXG4gICAgICBoZWlnaHQ6IDFweDsgXG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIGltYWdlLXJlbmRlcmluZzogcGl4ZWxhdGVkO1xuICAgIH1cbiAgPC9zdHlsZT5cbjwvaGVhZD5cbjxib2R5PlxuICA8aWZyYW1lIGlkPVwidGFyZ2V0XCIgc3JjPVwiJHt0YXJnZXRVUkx9XCI+PC9pZnJhbWU+XG4gIDxjYW52YXMgaWQ9XCJzdGVnb1wiIHdpZHRoPVwiJHt3aWR0aH1cIiBoZWlnaHQ9XCIxXCI+PC9jYW52YXM+XG4gIDxzY3JpcHQ+XG4gICAgKGZ1bmN0aW9uKCkge1xuICAgICAgY29uc3QgeyBpcGNSZW5kZXJlciB9ID0gcmVxdWlyZSgnZWxlY3Ryb24nKTtcbiAgICAgIGNvbnN0IFdJRFRIID0gJHt3aWR0aH07XG4gICAgICBjb25zdCBNQVJLRVJfV0lEVEggPSAke0ZSQU1FX1NZTkNfTUFSS0VSX1dJRFRIfTtcbiAgICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdGVnbycpO1xuICAgICAgY29uc3QgY3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJywgeyB3aWxsUmVhZEZyZXF1ZW50bHk6IHRydWUgfSk7XG4gICAgICBsZXQgc3RhcnRUaW1lID0gbnVsbDtcbiAgICAgIGxldCByYWZJZCA9IG51bGw7XG5cbiAgICAgIGZ1bmN0aW9uIGVuY29kZVRpbWVzdGFtcCh0aW1lc3RhbXBNcykge1xuICAgICAgICBjb25zdCBpbWFnZURhdGEgPSBjdHguY3JlYXRlSW1hZ2VEYXRhKFdJRFRILCAxKTtcbiAgICAgICAgY29uc3QgZGF0YSA9IGltYWdlRGF0YS5kYXRhO1xuXG4gICAgICAgIGNvbnN0IHRpbWVzdGFtcEludCA9IE1hdGguZmxvb3IodGltZXN0YW1wTXMpID4+PiAwO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgTUFSS0VSX1dJRFRIOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBiaXQgPSAodGltZXN0YW1wSW50ID4+PiAoTUFSS0VSX1dJRFRIIC0gMSAtIGkpKSAmIDE7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSBiaXQgPyAyNTUgOiAwO1xuICAgICAgICAgIGNvbnN0IGlkeCA9IGkgKiA0O1xuICAgICAgICAgIGRhdGFbaWR4XSA9IHZhbHVlO1xuICAgICAgICAgIGRhdGFbaWR4ICsgMV0gPSB2YWx1ZTtcbiAgICAgICAgICBkYXRhW2lkeCArIDJdID0gdmFsdWU7XG4gICAgICAgICAgZGF0YVtpZHggKyAzXSA9IDI1NTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAobGV0IGkgPSBNQVJLRVJfV0lEVEg7IGkgPCBXSURUSDsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgaWR4ID0gaSAqIDQ7XG4gICAgICAgICAgZGF0YVtpZHhdID0gMDtcbiAgICAgICAgICBkYXRhW2lkeCArIDFdID0gMDtcbiAgICAgICAgICBkYXRhW2lkeCArIDJdID0gMDtcbiAgICAgICAgICBkYXRhW2lkeCArIDNdID0gMjU1O1xuICAgICAgICB9XG5cbiAgICAgICAgY3R4LnB1dEltYWdlRGF0YShpbWFnZURhdGEsIDAsIDApO1xuICAgICAgICBpcGNSZW5kZXJlci5zZW5kKCcke1NURUdPX1RJQ0tfQ0hBTk5FTH0nKTtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gdXBkYXRlTG9vcCgpIHtcbiAgICAgICAgaWYgKHN0YXJ0VGltZSA9PT0gbnVsbCkgcmV0dXJuO1xuICAgICAgICBjb25zdCBlbGFwc2VkID0gcGVyZm9ybWFuY2Uubm93KCkgLSBzdGFydFRpbWU7XG4gICAgICAgIGVuY29kZVRpbWVzdGFtcChlbGFwc2VkKTtcbiAgICAgICAgcmFmSWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodXBkYXRlTG9vcCk7XG4gICAgICB9XG5cbiAgICAgIHdpbmRvdy5fX3B1cF9zdGFydF9zdGVnb19fID0gKCkgPT4ge1xuICAgICAgICBzdGFydFRpbWUgPSBwZXJmb3JtYW5jZS5ub3coKTtcbiAgICAgICAgZW5jb2RlVGltZXN0YW1wKDApO1xuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodXBkYXRlTG9vcCk7XG4gICAgICB9O1xuXG4gICAgICB3aW5kb3cuX19wdXBfZHJhd19zdGVnb19fID0gKG1zKSA9PiB7XG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiBlbmNvZGVUaW1lc3RhbXAobXMpKTtcbiAgICAgIH07XG5cbiAgICAgIHdpbmRvdy5fX3B1cF9zdG9wX3N0ZWdvX18gPSAoKSA9PiB7XG4gICAgICAgIGlmIChyYWZJZCAhPT0gbnVsbCkge1xuICAgICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHJhZklkKTtcbiAgICAgICAgICByYWZJZCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSkoKTtcbiAgPC9zY3JpcHQ+XG48L2JvZHk+XG48L2h0bWw+YDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlY29kZVN0ZWdvKGJpdG1hcDogQnVmZmVyLCBzaXplOiBTaXplKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSBzaXplO1xuICBpZiAod2lkdGggPCBGUkFNRV9TWU5DX01BUktFUl9XSURUSCB8fCBoZWlnaHQgPCAyKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IG1hcmtlclJvdyA9IGhlaWdodCAtIDE7XG5cbiAgbGV0IHRpbWVzdGFtcCA9IDA7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgRlJBTUVfU1lOQ19NQVJLRVJfV0lEVEg7IGkrKykge1xuICAgIGNvbnN0IHBpeGVsSWR4ID0gKG1hcmtlclJvdyAqIHdpZHRoICsgaSkgKiA0O1xuICAgIGNvbnN0IHIgPSBiaXRtYXBbcGl4ZWxJZHhdID8/IDA7XG4gICAgY29uc3QgYml0ID0gciA+IDEyNyA/IDEgOiAwO1xuICAgIHRpbWVzdGFtcCA9ICh0aW1lc3RhbXAgPDwgMSkgfCBiaXQ7XG4gIH1cblxuICB0aW1lc3RhbXAgPSB0aW1lc3RhbXAgPj4+IDA7XG5cbiAgaWYgKCFOdW1iZXIuaXNGaW5pdGUodGltZXN0YW1wKSB8fCB0aW1lc3RhbXAgPCAwIHx8IHRpbWVzdGFtcCA+IDFlNykge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICByZXR1cm4gdGltZXN0YW1wO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhcnRTdGVnbyhjZHA6IERlYnVnZ2VyKSB7XG4gIHJldHVybiBldmFsSW4oY2RwLCBgX19wdXBfc3RhcnRfc3RlZ29fXygpYCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdG9wU3RlZ28oY2RwOiBEZWJ1Z2dlcikge1xuICByZXR1cm4gZXZhbEluKGNkcCwgYF9fcHVwX3N0b3Bfc3RlZ29fXygpYCk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzd2FwQnVmZmVyKHdjOiBXZWJDb250ZW50cywgZXhwZWN0ZWQ6IG51bWJlciwgaW50ZXJ2YWw6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBzd2FwcGVkID0gbmV3IFByb21pc2UoKHIpID0+IHdjLmlwYy5vbmNlKFNURUdPX1RJQ0tfQ0hBTk5FTCwgcikpO1xuICBhd2FpdCBldmFsSW4od2MuZGVidWdnZXIsIGBfX3B1cF9kcmF3X3N0ZWdvX18oJHtleHBlY3RlZH0pYCk7XG4gIGF3YWl0IGFkdmFuY2VWaXJ0dWFsVGltZSh3Yy5kZWJ1Z2dlciwgaW50ZXJ2YWwpO1xuICBhd2FpdCB3aXRoVGltZW91dChzd2FwcGVkLCA1XzAwMCwgXCJzd2FwQnVmZmVyXCIpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8wMS5cblxuaW1wb3J0IHR5cGUgeyBTaXplIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBwcm90b2NvbCB9IGZyb20gXCJlbGVjdHJvblwiO1xuaW1wb3J0IHsgYnVpbGRTdGVnb0hUTUwgfSBmcm9tIFwiLi9zdGVnb1wiO1xuXG5jb25zdCBQVVBfU0NIRU1FID0gXCJwdXBcIjtcblxuLy8gTXVzdCBiZSBjYWxsZWQgc3luY2hyb25vdXNseSBiZWZvcmUgYXBwIGlzIHJlYWR5LlxucHJvdG9jb2wucmVnaXN0ZXJTY2hlbWVzQXNQcml2aWxlZ2VkKFtcbiAge1xuICAgIHNjaGVtZTogUFVQX1NDSEVNRSxcbiAgICBwcml2aWxlZ2VzOiB7XG4gICAgICBzdGFuZGFyZDogdHJ1ZSxcbiAgICAgIHNlY3VyZTogdHJ1ZSxcbiAgICAgIGJ5cGFzc0NTUDogdHJ1ZSxcbiAgICAgIGFsbG93U2VydmljZVdvcmtlcnM6IHRydWUsXG4gICAgICBzdXBwb3J0RmV0Y2hBUEk6IHRydWUsXG4gICAgICBjb3JzRW5hYmxlZDogdHJ1ZSxcbiAgICAgIHN0cmVhbTogdHJ1ZSxcbiAgICAgIGNvZGVDYWNoZTogdHJ1ZSxcbiAgICB9LFxuICB9LFxuXSk7XG5cbi8vIE11c3QgYmUgY2FsbGVkIGFmdGVyIGFwcCBpcyByZWFkeS5cbmV4cG9ydCBmdW5jdGlvbiBzZXR1cFB1cFByb3RvY29sKCk6IHZvaWQge1xuICBwcm90b2NvbC5oYW5kbGUoUFVQX1NDSEVNRSwgKHJlcSkgPT4ge1xuICAgIGNvbnN0IHVybCA9IG5ldyBVUkwocmVxLnVybCk7XG4gICAgY29uc3Qgc3JjID0gdXJsLnNlYXJjaFBhcmFtcy5nZXQoXCJzcmNcIikgPz8gXCJcIjtcbiAgICBjb25zdCB3aWR0aCA9IHBhcnNlSW50KHVybC5zZWFyY2hQYXJhbXMuZ2V0KFwid1wiKSA/PyBcIjBcIiwgMTApO1xuICAgIGNvbnN0IGhlaWdodCA9IHBhcnNlSW50KHVybC5zZWFyY2hQYXJhbXMuZ2V0KFwiaFwiKSA/PyBcIjBcIiwgMTApO1xuICAgIGNvbnN0IGh0bWwgPSBidWlsZFN0ZWdvSFRNTChzcmMsIHsgd2lkdGgsIGhlaWdodCB9KTtcbiAgICByZXR1cm4gbmV3IFJlc3BvbnNlKGh0bWwsIHsgaGVhZGVyczogeyBcImNvbnRlbnQtdHlwZVwiOiBcInRleHQvaHRtbFwiIH0gfSk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU3RlZ29VUkwoc3JjOiBzdHJpbmcsIHNpemU6IFNpemUpOiBzdHJpbmcge1xuICBjb25zdCB1cmwgPSBuZXcgVVJMKGAke1BVUF9TQ0hFTUV9Oi8vc3RlZ29gKTtcbiAgdXJsLnNlYXJjaFBhcmFtcy5zZXQoXCJzcmNcIiwgc3JjLnJlcGxhY2UoXCJodHRwOi8vXCIsIFwiaHR0cHM6Ly9cIikpO1xuICB1cmwuc2VhcmNoUGFyYW1zLnNldChcIndcIiwgU3RyaW5nKHNpemUud2lkdGgpKTtcbiAgdXJsLnNlYXJjaFBhcmFtcy5zZXQoXCJoXCIsIFN0cmluZyhzaXplLmhlaWdodCkpO1xuICByZXR1cm4gdXJsLnRvU3RyaW5nKCk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAxLzMwLlxuXG5pbnRlcmZhY2UgUXVldWVFbnRyeSB7XG4gIHJ1bjogVm9pZEZ1bmN0aW9uO1xuICByZWplY3Q6IChyZWFzb246IHVua25vd24pID0+IHZvaWQ7XG4gIHNpZ25hbD86IEFib3J0U2lnbmFsO1xufVxuXG5leHBvcnQgY2xhc3MgQ29uY3VycmVuY3lMaW1pdGVyIHtcbiAgcHJpdmF0ZSBfYWN0aXZlID0gMDtcbiAgcHJpdmF0ZSBfcXVldWU6IFF1ZXVlRW50cnlbXSA9IFtdO1xuICBwcml2YXRlIF9zaWduYWxzID0gbmV3IFdlYWtTZXQ8QWJvcnRTaWduYWw+KCk7XG4gIHByaXZhdGUgX3Jlc29sdmU/OiBWb2lkRnVuY3Rpb247XG5cbiAgY29uc3RydWN0b3IocmVhZG9ubHkgbWF4Q29uY3VycmVuY3k6IG51bWJlcikge31cblxuICBnZXQgYWN0aXZlKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2FjdGl2ZTtcbiAgfVxuXG4gIGdldCBwZW5kaW5nKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3F1ZXVlLmxlbmd0aDtcbiAgfVxuXG4gIGdldCBzdGF0cygpOiBzdHJpbmcge1xuICAgIHJldHVybiBgYWN0aXZlOiAke3RoaXMuYWN0aXZlfSwgcGVuZGluZzogJHt0aGlzLnBlbmRpbmd9YDtcbiAgfVxuXG4gIGFzeW5jIHNjaGVkdWxlPFQ+KGZuOiAoKSA9PiBQcm9taXNlPFQ+LCBzaWduYWw/OiBBYm9ydFNpZ25hbCk6IFByb21pc2U8VD4ge1xuICAgIHNpZ25hbD8udGhyb3dJZkFib3J0ZWQoKTtcblxuICAgIGlmIChzaWduYWwgJiYgIXRoaXMuX3NpZ25hbHMuaGFzKHNpZ25hbCkpIHtcbiAgICAgIHRoaXMuX3NpZ25hbHMuYWRkKHNpZ25hbCk7XG4gICAgICBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsICgpID0+IHRoaXMuZmx1c2goc2lnbmFsKSwgeyBvbmNlOiB0cnVlIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgUHJvbWlzZTxUPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLl9xdWV1ZS5wdXNoKHtcbiAgICAgICAgcnVuOiAoKSA9PiB7XG4gICAgICAgICAgaWYgKHNpZ25hbD8uYWJvcnRlZCkge1xuICAgICAgICAgICAgcmVqZWN0KHNpZ25hbC5yZWFzb24pO1xuICAgICAgICAgICAgdGhpcy5uZXh0KCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuX2FjdGl2ZSsrO1xuICAgICAgICAgIGZuKClcbiAgICAgICAgICAgIC50aGVuKCh2KSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuX2FjdGl2ZS0tO1xuICAgICAgICAgICAgICByZXNvbHZlKHYpO1xuICAgICAgICAgICAgICB0aGlzLm5leHQoKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5fYWN0aXZlLS07XG4gICAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICAgICAgdGhpcy5uZXh0KCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgcmVqZWN0LFxuICAgICAgICBzaWduYWwsXG4gICAgICB9KTtcbiAgICAgIHRoaXMubmV4dCgpO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZHJhaW4oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX2FjdGl2ZSA9PT0gMCAmJiB0aGlzLnBlbmRpbmcgPT09IDApIHJldHVybjtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHIpID0+ICh0aGlzLl9yZXNvbHZlID0gcikpO1xuICB9XG5cbiAgcHJpdmF0ZSBmbHVzaChzaWduYWw6IEFib3J0U2lnbmFsKSB7XG4gICAgY29uc3Qga2VlcDogUXVldWVFbnRyeVtdID0gW107XG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiB0aGlzLl9xdWV1ZSkge1xuICAgICAgaWYgKGVudHJ5LnNpZ25hbCA9PT0gc2lnbmFsKSB7XG4gICAgICAgIGVudHJ5LnJlamVjdChzaWduYWwucmVhc29uKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGtlZXAucHVzaChlbnRyeSk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuX3F1ZXVlID0ga2VlcDtcbiAgICB0aGlzLm5leHQoKTtcbiAgfVxuXG4gIHByaXZhdGUgbmV4dCgpIHtcbiAgICBpZiAodGhpcy5fYWN0aXZlID09PSAwICYmIHRoaXMucGVuZGluZyA9PT0gMCkge1xuICAgICAgdGhpcy5fcmVzb2x2ZT8uKCk7XG4gICAgICB0aGlzLl9yZXNvbHZlID0gdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5fYWN0aXZlIDwgdGhpcy5tYXhDb25jdXJyZW5jeSkge1xuICAgICAgdGhpcy5fcXVldWUuc2hpZnQoKT8ucnVuKCk7XG4gICAgfVxuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzEyLlxuXG5pbXBvcnQgeyBDb2RlYywgQ29kZWNDb250ZXh0LCBGRm1wZWdFcnJvciwgRnJhbWUsIEhhcmR3YXJlRnJhbWVzQ29udGV4dCwgUGFja2V0LCBSYXRpb25hbCwgdHlwZSBTdHJlYW0gfSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHtcbiAgQVZfQ09ERUNfRkxBR19HTE9CQUxfSEVBREVSLFxuICBBVkVSUk9SX0VBR0FJTixcbiAgQVZFUlJPUl9FT0YsXG4gIHR5cGUgQVZDb2xvclJhbmdlLFxuICB0eXBlIEFWUGl4ZWxGb3JtYXQsXG59IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuaW1wb3J0IHR5cGUgeyBGb3JtYXRNdXhlciB9IGZyb20gXCIuL211eGVyXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmlkZW9DdHhPcHRpb25zIHtcbiAgY29kZWM6IENvZGVjO1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgZnBzOiBudW1iZXI7XG4gIGJpdHJhdGU6IG51bWJlcjtcbiAgcGl4ZWxGb3JtYXQ6IEFWUGl4ZWxGb3JtYXQ7XG4gIGNvZGVjVGFnPzogc3RyaW5nO1xuICBjb2xvclJhbmdlPzogQVZDb2xvclJhbmdlO1xuICBvcHRpb25zPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgaHdGcmFtZXNDdHg/OiBIYXJkd2FyZUZyYW1lc0NvbnRleHQ7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBvcGVuVmlkZW9DdHgob3B0czogVmlkZW9DdHhPcHRpb25zLCBsYWJlbDogc3RyaW5nKTogUHJvbWlzZTxDb2RlY0NvbnRleHQ+IHtcbiAgY29uc3QgY3R4ID0gbmV3IENvZGVjQ29udGV4dCgpO1xuICBjdHguYWxsb2NDb250ZXh0MyhvcHRzLmNvZGVjKTtcbiAgY3R4LmNvZGVjSWQgPSBvcHRzLmNvZGVjLmlkO1xuICBjdHgud2lkdGggPSBvcHRzLndpZHRoO1xuICBjdHguaGVpZ2h0ID0gb3B0cy5oZWlnaHQ7XG4gIGN0eC5waXhlbEZvcm1hdCA9IG9wdHMucGl4ZWxGb3JtYXQ7XG4gIGN0eC50aW1lQmFzZSA9IG5ldyBSYXRpb25hbCgxLCBvcHRzLmZwcyk7XG4gIGN0eC5mcmFtZXJhdGUgPSBuZXcgUmF0aW9uYWwob3B0cy5mcHMsIDEpO1xuICBjdHguZ29wU2l6ZSA9IG9wdHMuZnBzICogMjtcbiAgY3R4LmJpdFJhdGUgPSBCaWdJbnQob3B0cy5iaXRyYXRlKTtcbiAgY3R4LnNldEZsYWdzKEFWX0NPREVDX0ZMQUdfR0xPQkFMX0hFQURFUik7XG4gIGlmIChvcHRzLmNvZGVjVGFnKSBjdHguY29kZWNUYWcgPSBvcHRzLmNvZGVjVGFnO1xuICBpZiAob3B0cy5jb2xvclJhbmdlICE9PSB1bmRlZmluZWQpIGN0eC5jb2xvclJhbmdlID0gb3B0cy5jb2xvclJhbmdlO1xuICBpZiAob3B0cy5od0ZyYW1lc0N0eCkgY3R4Lmh3RnJhbWVzQ3R4ID0gb3B0cy5od0ZyYW1lc0N0eDtcbiAgZm9yIChjb25zdCBbaywgdl0gb2YgT2JqZWN0LmVudHJpZXMob3B0cy5vcHRpb25zID8/IHt9KSkgY3R4LnNldE9wdGlvbihrLCB2KTtcbiAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IGN0eC5vcGVuMihvcHRzLmNvZGVjLCBudWxsKSwgbGFiZWwpO1xuICByZXR1cm4gY3R4O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWFrZUZyYW1lKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyLCBwaXhGbXQ6IEFWUGl4ZWxGb3JtYXQpOiBGcmFtZSB7XG4gIGNvbnN0IGZyYW1lID0gbmV3IEZyYW1lKCk7XG4gIGZyYW1lLmFsbG9jKCk7XG4gIGZyYW1lLmZvcm1hdCA9IHBpeEZtdDtcbiAgZnJhbWUud2lkdGggPSB3aWR0aDtcbiAgZnJhbWUuaGVpZ2h0ID0gaGVpZ2h0O1xuICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoZnJhbWUuZ2V0QnVmZmVyKDApLCBcImZyYW1lLmdldEJ1ZmZlclwiKTtcbiAgcmV0dXJuIGZyYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWFrZVBhY2tldCgpOiBQYWNrZXQge1xuICBjb25zdCBwa3QgPSBuZXcgUGFja2V0KCk7XG4gIHBrdC5hbGxvYygpO1xuICByZXR1cm4gcGt0O1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZHJhaW5QYWNrZXRzKGN0eDogQ29kZWNDb250ZXh0LCBwa3Q6IFBhY2tldCwgc3RyZWFtOiBTdHJlYW0sIG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICB3aGlsZSAodHJ1ZSkge1xuICAgIGNvbnN0IHIgPSBhd2FpdCBjdHgucmVjZWl2ZVBhY2tldChwa3QpO1xuICAgIGlmIChyID09PSBBVkVSUk9SX0VBR0FJTiB8fCByID09PSBBVkVSUk9SX0VPRikgYnJlYWs7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKHIsIFwicmVjZWl2ZVBhY2tldFwiKTtcbiAgICBwa3Quc3RyZWFtSW5kZXggPSBzdHJlYW0uaW5kZXg7XG4gICAgaWYgKHBrdC5kdXJhdGlvbiA9PT0gMG4pIHBrdC5kdXJhdGlvbiA9IDFuO1xuICAgIHBrdC5yZXNjYWxlVHMoY3R4LnRpbWVCYXNlLCBzdHJlYW0udGltZUJhc2UpO1xuICAgIGF3YWl0IG11eGVyLndyaXRlUGFja2V0KHBrdCk7XG4gICAgcGt0LnVucmVmKCk7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMDMuXG5cbmltcG9ydCB7IG9rIH0gZnJvbSBcImFzc2VydFwiO1xuaW1wb3J0IHtcbiAgQVZfUElYX0ZNVF9CR1JBLFxuICBBVl9QSVhfRk1UX1lVVkE0MjBQLFxuICBDb2RlYyxcbiAgQ29kZWNDb250ZXh0LFxuICBGRl9ERUNPREVSX1BORyxcbiAgRkZtcGVnRXJyb3IsXG4gIHR5cGUgRnJhbWUsXG4gIFBhY2tldCxcbiAgU29mdHdhcmVTY2FsZUNvbnRleHQsXG4gIFNXU19CSUxJTkVBUixcbiAgdHlwZSBBVlBpeGVsRm9ybWF0LFxufSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHsgbWFrZUZyYW1lLCBtYWtlUGFja2V0IH0gZnJvbSBcIi4vbWlzY1wiO1xuXG5leHBvcnQgY2xhc3MgQ29kZWNTdGF0ZSBpbXBsZW1lbnRzIERpc3Bvc2FibGUge1xuICByZWFkb25seSBzcmM6IEZyYW1lO1xuICByZWFkb25seSBkc3Q6IEZyYW1lO1xuICByZWFkb25seSBwa3Q6IFBhY2tldDtcbiAgcHJpdmF0ZSBfc3dzPzogU29mdHdhcmVTY2FsZUNvbnRleHQ7XG4gIHByaXZhdGUgX3BuZz86IENvZGVjO1xuXG4gIHN0YXRpYyBhc3luYyBjcmVhdGUod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpIHtcbiAgICBjb25zdCBjb2RlYyA9IENvZGVjLmZpbmREZWNvZGVyQnlOYW1lKEZGX0RFQ09ERVJfUE5HKTtcbiAgICBvayhjb2RlYywgXCJwbmcgZGVjb2RlciB1bmF2YWlsYWJsZVwiKTtcbiAgICByZXR1cm4gbmV3IENvZGVjU3RhdGUod2lkdGgsIGhlaWdodCwgY29kZWMpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcih3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlciwgcG5nOiBDb2RlYykge1xuICAgIHRoaXMuX3BuZyA9IHBuZztcbiAgICB0aGlzLnNyYyA9IG1ha2VGcmFtZSh3aWR0aCwgaGVpZ2h0LCBBVl9QSVhfRk1UX0JHUkEpO1xuICAgIHRoaXMuZHN0ID0gbWFrZUZyYW1lKHdpZHRoLCBoZWlnaHQsIEFWX1BJWF9GTVRfWVVWQTQyMFApO1xuICAgIHRoaXMucGt0ID0gbWFrZVBhY2tldCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIGZyZXNoIFBORyBkZWNvZGVyIGNvbnRleHQuXG4gICAqIFRoZSBGRm1wZWcgUE5HIGRlY29kZXIgYWNjdW11bGF0ZXMgQVBORyBibGVuZGluZyBzdGF0ZVxuICAgKiBhY3Jvc3MgZnJhbWVzLCBzbyBhIHNoYXJlZCBpbnN0YW5jZSBjb3JydXB0cyBvdXRwdXQgd2hlbiBkZWNvZGluZyBzdGFuZGFsb25lIFBOR3MuXG4gICAqL1xuICBhc3luYyBwbmcoKTogUHJvbWlzZTxDb2RlY0NvbnRleHQ+IHtcbiAgICBjb25zdCBwbmcgPSBuZXcgQ29kZWNDb250ZXh0KCk7XG4gICAgcG5nLmFsbG9jQ29udGV4dDModGhpcy5fcG5nKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgcG5nLm9wZW4yKHRoaXMuX3BuZyksIFwicG5nRGVjb2Rlci5vcGVuMlwiKTtcbiAgICByZXR1cm4gcG5nO1xuICB9XG5cbiAgYXN5bmMgZGVjb2RlUE5HKHBuZ0RhdGE6IEJ1ZmZlcik6IFByb21pc2U8RnJhbWU+IHtcbiAgICB1c2luZyBwbmcgPSBhd2FpdCB0aGlzLnBuZygpO1xuICAgIHRoaXMucGt0LmRhdGEgPSBwbmdEYXRhO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCBwbmcuc2VuZFBhY2tldCh0aGlzLnBrdCksIFwicG5nRGVjb2Rlci5zZW5kUGFja2V0XCIpO1xuICAgIHRoaXMucGt0LnVucmVmKCk7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IHBuZy5yZWNlaXZlRnJhbWUodGhpcy5zcmMpLCBcInBuZ0RlY29kZXIucmVjZWl2ZUZyYW1lXCIpO1xuICAgIHJldHVybiB0aGlzLnNyYztcbiAgfVxuXG4gIGdldCBzd3MoKSB7XG4gICAgaWYgKCF0aGlzLl9zd3MpIHtcbiAgICAgIGNvbnN0IHN3cyA9IG5ldyBTb2Z0d2FyZVNjYWxlQ29udGV4dCgpO1xuICAgICAgY29uc3QgZm10ID0gdGhpcy5zcmMuZm9ybWF0IGFzIEFWUGl4ZWxGb3JtYXQ7XG4gICAgICBzd3MuZ2V0Q29udGV4dChcbiAgICAgICAgdGhpcy5zcmMud2lkdGgsXG4gICAgICAgIHRoaXMuc3JjLmhlaWdodCxcbiAgICAgICAgZm10LFxuICAgICAgICB0aGlzLnNyYy53aWR0aCxcbiAgICAgICAgdGhpcy5zcmMuaGVpZ2h0LFxuICAgICAgICBBVl9QSVhfRk1UX1lVVkE0MjBQLFxuICAgICAgICBTV1NfQklMSU5FQVIsXG4gICAgICApO1xuICAgICAgdGhpcy5fc3dzID0gc3dzO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fc3dzO1xuICB9XG5cbiAgW1N5bWJvbC5kaXNwb3NlXSgpOiB2b2lkIHtcbiAgICB0aGlzLnNyY1tTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICB0aGlzLmRzdFtTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICB0aGlzLnBrdFtTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICB0aGlzLl9zd3M/LltTeW1ib2wuZGlzcG9zZV0oKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8wMS5cblxuaW1wb3J0IHtcbiAgQ29kZWMsXG4gIENvZGVjQ29udGV4dCxcbiAgRkZtcGVnRXJyb3IsXG4gIEZpbHRlcixcbiAgRmlsdGVyQ29udGV4dCxcbiAgRmlsdGVyR3JhcGgsXG4gIEZpbHRlckluT3V0LFxuICBGcmFtZSxcbiAgdHlwZSBQYWNrZXQsXG4gIFJhdGlvbmFsLFxuICB0eXBlIFN0cmVhbSxcbn0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB7XG4gIEFWX0NIQU5ORUxfTEFZT1VUX1NURVJFTyxcbiAgQVZfQ09ERUNfRkxBR19HTE9CQUxfSEVBREVSLFxuICBBVl9TQU1QTEVfRk1UX0ZMVCxcbiAgQVZfU0FNUExFX0ZNVF9GTFRQLFxuICBBVkVSUk9SX0VBR0FJTixcbiAgQVZFUlJPUl9FT0YsXG4gIHR5cGUgRkZBdWRpb0VuY29kZXIsXG59IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuaW1wb3J0IHR5cGUgeyBGb3JtYXRNdXhlciB9IGZyb20gXCIuL211eGVyXCI7XG5pbXBvcnQgeyBkcmFpblBhY2tldHMsIG1ha2VQYWNrZXQgfSBmcm9tIFwiLi9taXNjXCI7XG5cbmNvbnN0IFNBTVBMRV9GTVRfTkFNRTogUGFydGlhbDxSZWNvcmQ8bnVtYmVyLCBzdHJpbmc+PiA9IHsgW0FWX1NBTVBMRV9GTVRfRkxUXTogXCJmbHRcIiwgW0FWX1NBTVBMRV9GTVRfRkxUUF06IFwiZmx0cFwiIH07XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXVkaW9FbmNvZGVyT3B0aW9ucyB7XG4gIG91dFNhbXBsZVJhdGU6IG51bWJlcjtcbiAgb3V0U2FtcGxlRm10OiB0eXBlb2YgQVZfU0FNUExFX0ZNVF9GTFQgfCB0eXBlb2YgQVZfU0FNUExFX0ZNVF9GTFRQO1xuICBjb2RlY05hbWU6IEZGQXVkaW9FbmNvZGVyO1xuICBnbG9iYWxIZWFkZXI6IGJvb2xlYW47XG4gIGJpdHJhdGU6IG51bWJlcjtcbiAgbXV4ZXI6IEZvcm1hdE11eGVyO1xufVxuXG5leHBvcnQgY2xhc3MgQXVkaW9FbmNvZGVyIGltcGxlbWVudHMgRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgX2N0eDogQ29kZWNDb250ZXh0O1xuICBwcml2YXRlIF9zdHJlYW06IFN0cmVhbTtcbiAgcHJpdmF0ZSBfcGt0OiBQYWNrZXQ7XG4gIHByaXZhdGUgX291dFJhdGU6IG51bWJlcjtcbiAgcHJpdmF0ZSBfb3V0Rm10OiB0eXBlb2YgQVZfU0FNUExFX0ZNVF9GTFQgfCB0eXBlb2YgQVZfU0FNUExFX0ZNVF9GTFRQO1xuICBwcml2YXRlIF9mcmFtZVNpemU6IG51bWJlcjtcbiAgcHJpdmF0ZSBfZmlsdGVyRnJhbWU6IEZyYW1lO1xuICBwcml2YXRlIF9ncmFwaD86IEZpbHRlckdyYXBoO1xuICBwcml2YXRlIF9idWZTcmM/OiBGaWx0ZXJDb250ZXh0O1xuICBwcml2YXRlIF9idWZTaW5rPzogRmlsdGVyQ29udGV4dDtcbiAgcHJpdmF0ZSBfaW5SYXRlPzogbnVtYmVyO1xuICBwcml2YXRlIF9wdHMgPSAwbjtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKGN0eDogQ29kZWNDb250ZXh0LCBzdHJlYW06IFN0cmVhbSwgb3V0Rm10OiB0eXBlb2YgQVZfU0FNUExFX0ZNVF9GTFQgfCB0eXBlb2YgQVZfU0FNUExFX0ZNVF9GTFRQKSB7XG4gICAgdGhpcy5fY3R4ID0gY3R4O1xuICAgIHRoaXMuX3N0cmVhbSA9IHN0cmVhbTtcbiAgICB0aGlzLl9vdXRSYXRlID0gY3R4LnNhbXBsZVJhdGU7XG4gICAgdGhpcy5fb3V0Rm10ID0gb3V0Rm10O1xuICAgIHRoaXMuX2ZyYW1lU2l6ZSA9IGN0eC5mcmFtZVNpemU7XG4gICAgdGhpcy5fcGt0ID0gbWFrZVBhY2tldCgpO1xuICAgIHRoaXMuX2ZpbHRlckZyYW1lID0gbmV3IEZyYW1lKCk7XG4gICAgdGhpcy5fZmlsdGVyRnJhbWUuYWxsb2MoKTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBjcmVhdGUob3B0czogQXVkaW9FbmNvZGVyT3B0aW9ucyk6IFByb21pc2U8QXVkaW9FbmNvZGVyPiB7XG4gICAgY29uc3QgY29kZWMgPSBDb2RlYy5maW5kRW5jb2RlckJ5TmFtZShvcHRzLmNvZGVjTmFtZSk7XG4gICAgaWYgKCFjb2RlYykgdGhyb3cgbmV3IEVycm9yKGBBdWRpbyBlbmNvZGVyIG5vdCBmb3VuZDogJHtvcHRzLmNvZGVjTmFtZX1gKTtcbiAgICBjb25zdCBjdHggPSBuZXcgQ29kZWNDb250ZXh0KCk7XG4gICAgY3R4LmFsbG9jQ29udGV4dDMoY29kZWMpO1xuICAgIGN0eC5jb2RlY0lkID0gY29kZWMuaWQ7XG4gICAgY3R4LnNhbXBsZUZvcm1hdCA9IG9wdHMub3V0U2FtcGxlRm10O1xuICAgIGN0eC5zYW1wbGVSYXRlID0gb3B0cy5vdXRTYW1wbGVSYXRlO1xuICAgIGN0eC5jaGFubmVsTGF5b3V0ID0gQVZfQ0hBTk5FTF9MQVlPVVRfU1RFUkVPO1xuICAgIGN0eC50aW1lQmFzZSA9IG5ldyBSYXRpb25hbCgxLCBvcHRzLm91dFNhbXBsZVJhdGUpO1xuICAgIGN0eC5iaXRSYXRlID0gQmlnSW50KG9wdHMuYml0cmF0ZSk7XG4gICAgaWYgKG9wdHMuZ2xvYmFsSGVhZGVyKSBjdHguc2V0RmxhZ3MoQVZfQ09ERUNfRkxBR19HTE9CQUxfSEVBREVSKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgY3R4Lm9wZW4yKGNvZGVjLCBudWxsKSwgXCJhdWRpb0N0eC5vcGVuMlwiKTtcbiAgICBjb25zdCBzdHJlYW0gPSBvcHRzLm11eGVyLmFkZFN0cmVhbShjdHgpO1xuICAgIHJldHVybiBuZXcgQXVkaW9FbmNvZGVyKGN0eCwgc3RyZWFtLCBvcHRzLm91dFNhbXBsZUZtdCk7XG4gIH1cblxuICBzZXRJbnB1dFJhdGUoaW5TYW1wbGVSYXRlOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9ncmFwaD8uW1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgIHRoaXMuX2luUmF0ZSA9IGluU2FtcGxlUmF0ZTtcbiAgICBjb25zdCBncmFwaCA9IG5ldyBGaWx0ZXJHcmFwaCgpO1xuICAgIGdyYXBoLmFsbG9jKCk7XG4gICAgY29uc3QgYWJ1ZmZlciA9IEZpbHRlci5nZXRCeU5hbWUoXCJhYnVmZmVyXCIpITtcbiAgICBjb25zdCBidWZTcmMgPSBncmFwaC5jcmVhdGVGaWx0ZXIoXG4gICAgICBhYnVmZmVyLFxuICAgICAgXCJzcmNcIixcbiAgICAgIGBzYW1wbGVfcmF0ZT0ke2luU2FtcGxlUmF0ZX06c2FtcGxlX2ZtdD1mbHQ6Y2hhbm5lbF9sYXlvdXQ9c3RlcmVvOnRpbWVfYmFzZT0xLyR7aW5TYW1wbGVSYXRlfWAsXG4gICAgKTtcbiAgICBpZiAoIWJ1ZlNyYykgdGhyb3cgbmV3IEVycm9yKFwiRmFpbGVkIHRvIGNyZWF0ZSBhYnVmZmVyXCIpO1xuICAgIGNvbnN0IGFidWZmZXJzaW5rID0gRmlsdGVyLmdldEJ5TmFtZShcImFidWZmZXJzaW5rXCIpITtcbiAgICBjb25zdCBidWZTaW5rID0gZ3JhcGguY3JlYXRlRmlsdGVyKGFidWZmZXJzaW5rLCBcInNpbmtcIik7XG4gICAgaWYgKCFidWZTaW5rKSB0aHJvdyBuZXcgRXJyb3IoXCJGYWlsZWQgdG8gY3JlYXRlIGFidWZmZXJzaW5rXCIpO1xuICAgIGNvbnN0IGZtdE5hbWUgPSBTQU1QTEVfRk1UX05BTUVbdGhpcy5fb3V0Rm10XSA/PyBcImZsdFwiO1xuICAgIGNvbnN0IGZpbHRlckRlc2MgPSBgYWZvcm1hdD1zYW1wbGVfZm10cz0ke2ZtdE5hbWV9OnNhbXBsZV9yYXRlcz0ke3RoaXMuX291dFJhdGV9OmNoYW5uZWxfbGF5b3V0cz1zdGVyZW8sYXNldG5zYW1wbGVzPW49JHt0aGlzLl9mcmFtZVNpemV9OnA9MWA7XG4gICAgY29uc3Qgb3V0cHV0cyA9IEZpbHRlckluT3V0LmNyZWF0ZUxpc3QoW3sgbmFtZTogXCJpblwiLCBmaWx0ZXJDdHg6IGJ1ZlNyYywgcGFkSWR4OiAwIH1dKTtcbiAgICBjb25zdCBpbnB1dHMgPSBGaWx0ZXJJbk91dC5jcmVhdGVMaXN0KFt7IG5hbWU6IFwib3V0XCIsIGZpbHRlckN0eDogYnVmU2luaywgcGFkSWR4OiAwIH1dKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoZ3JhcGgucGFyc2VQdHIoZmlsdGVyRGVzYywgaW5wdXRzLCBvdXRwdXRzKSwgXCJncmFwaC5wYXJzZVB0clwiKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoZ3JhcGguY29uZmlnU3luYygpLCBcImdyYXBoLmNvbmZpZ1wiKTtcbiAgICB0aGlzLl9ncmFwaCA9IGdyYXBoO1xuICAgIHRoaXMuX2J1ZlNyYyA9IGJ1ZlNyYztcbiAgICB0aGlzLl9idWZTaW5rID0gYnVmU2luaztcbiAgfVxuXG4gIGFzeW5jIGVuY29kZShwY206IEJ1ZmZlciwgbXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLl9idWZTcmMgfHwgIXRoaXMuX2luUmF0ZSkgcmV0dXJuO1xuICAgIGNvbnN0IHNyYyA9IG5ldyBGbG9hdDMyQXJyYXkocGNtLmJ1ZmZlciwgcGNtLmJ5dGVPZmZzZXQsIHBjbS5ieXRlTGVuZ3RoIC8gNCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzcmMubGVuZ3RoOyBpKyspIGlmICghaXNGaW5pdGUoc3JjW2ldISkpIHNyY1tpXSA9IDA7XG4gICAgY29uc3QgblNhbXBsZXMgPSBzcmMubGVuZ3RoID4+IDE7XG4gICAgdXNpbmcgZnJhbWUgPSBGcmFtZS5mcm9tQXVkaW9CdWZmZXIoQnVmZmVyLmZyb20oc3JjLmJ1ZmZlciwgc3JjLmJ5dGVPZmZzZXQsIHNyYy5ieXRlTGVuZ3RoKSwge1xuICAgICAgbmJTYW1wbGVzOiBuU2FtcGxlcyxcbiAgICAgIGZvcm1hdDogQVZfU0FNUExFX0ZNVF9GTFQsXG4gICAgICBzYW1wbGVSYXRlOiB0aGlzLl9pblJhdGUsXG4gICAgICBjaGFubmVsTGF5b3V0OiBBVl9DSEFOTkVMX0xBWU9VVF9TVEVSRU8sXG4gICAgICBwdHM6IHRoaXMuX3B0cyxcbiAgICAgIHRpbWVCYXNlOiB7IG51bTogMSwgZGVuOiB0aGlzLl9pblJhdGUgfSxcbiAgICB9KTtcbiAgICB0aGlzLl9wdHMgKz0gQmlnSW50KG5TYW1wbGVzKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgdGhpcy5fYnVmU3JjLmJ1ZmZlcnNyY0FkZEZyYW1lKGZyYW1lKSwgXCJidWZmZXJzcmNBZGRGcmFtZVwiKTtcbiAgICBhd2FpdCB0aGlzLmRyYWluKG11eGVyKTtcbiAgfVxuXG4gIGFzeW5jIGZsdXNoKG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9idWZTcmMpIHtcbiAgICAgIGF3YWl0IHRoaXMuX2J1ZlNyYy5idWZmZXJzcmNBZGRGcmFtZShudWxsKTtcbiAgICAgIGF3YWl0IHRoaXMuZHJhaW4obXV4ZXIpO1xuICAgIH1cbiAgICBhd2FpdCB0aGlzLl9jdHguc2VuZEZyYW1lKG51bGwpO1xuICAgIGF3YWl0IHRoaXMuZHJhaW5Db2RlYyhtdXhlcik7XG4gIH1cblxuICBbU3ltYm9sLmRpc3Bvc2VdKCk6IHZvaWQge1xuICAgIHRoaXMuX3BrdC5mcmVlKCk7XG4gICAgdGhpcy5fZmlsdGVyRnJhbWUuZnJlZSgpO1xuICAgIHRoaXMuX2dyYXBoPy5bU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgdGhpcy5fY3R4LmZyZWVDb250ZXh0KCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGRyYWluKG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBjb25zdCByID0gYXdhaXQgdGhpcy5fYnVmU2luayEuYnVmZmVyc2lua0dldEZyYW1lKHRoaXMuX2ZpbHRlckZyYW1lKTtcbiAgICAgIGlmIChyID09PSBBVkVSUk9SX0VBR0FJTiB8fCByID09PSBBVkVSUk9SX0VPRikgYnJlYWs7XG4gICAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IociwgXCJidWZmZXJzaW5rR2V0RnJhbWVcIik7XG4gICAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgdGhpcy5fY3R4LnNlbmRGcmFtZSh0aGlzLl9maWx0ZXJGcmFtZSksIFwiYXVkaW9DdHguc2VuZEZyYW1lXCIpO1xuICAgICAgdGhpcy5fZmlsdGVyRnJhbWUudW5yZWYoKTtcbiAgICAgIGF3YWl0IHRoaXMuZHJhaW5Db2RlYyhtdXhlcik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBkcmFpbkNvZGVjKG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBkcmFpblBhY2tldHModGhpcy5fY3R4LCB0aGlzLl9wa3QsIHRoaXMuX3N0cmVhbSwgbXV4ZXIpO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzEzLlxuXG5leHBvcnQgZnVuY3Rpb24gcGFja0JpdHMoYml0czogbnVtYmVyW10pOiBCdWZmZXIge1xuICBjb25zdCBidWYgPSBCdWZmZXIuYWxsb2MoYml0cy5sZW5ndGggPj4gMyk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYnVmLmxlbmd0aDsgaSsrKSB7XG4gICAgbGV0IGJ5dGUgPSAwO1xuICAgIGZvciAobGV0IGIgPSAwOyBiIDwgODsgYisrKSBieXRlID0gKGJ5dGUgPDwgMSkgfCBiaXRzW2kgKiA4ICsgYl0hO1xuICAgIGJ1ZltpXSA9IGJ5dGU7XG4gIH1cbiAgcmV0dXJuIGJ1Zjtcbn1cblxuZXhwb3J0IGNsYXNzIEJpdFdyaXRlciB7XG4gIGJpdHM6IG51bWJlcltdID0gW107XG4gIHcodmFsOiBudW1iZXIsIG46IG51bWJlcikge1xuICAgIGZvciAobGV0IGkgPSBuIC0gMTsgaSA+PSAwOyBpLS0pIHRoaXMuYml0cy5wdXNoKCh2YWwgPj4gaSkgJiAxKTtcbiAgfVxuICBmbGFnKHZhbDogYm9vbGVhbiB8IG51bWJlcikge1xuICAgIHRoaXMuYml0cy5wdXNoKHZhbCA/IDEgOiAwKTtcbiAgfVxuICB1ZSh2YWw6IG51bWJlcikge1xuICAgIGNvbnN0IHYgPSB2YWwgKyAxO1xuICAgIGNvbnN0IGxlbiA9IDMyIC0gTWF0aC5jbHozMih2KTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbiAtIDE7IGkrKykgdGhpcy5iaXRzLnB1c2goMCk7XG4gICAgZm9yIChsZXQgaSA9IGxlbiAtIDE7IGkgPj0gMDsgaS0tKSB0aGlzLmJpdHMucHVzaCgodiA+PiBpKSAmIDEpO1xuICB9XG4gIGFsaWduKHBhZDogbnVtYmVyKSB7XG4gICAgd2hpbGUgKHRoaXMuYml0cy5sZW5ndGggJSA4ICE9PSAwKSB0aGlzLmJpdHMucHVzaChwYWQpO1xuICB9XG4gIGNvcHkoc3JjOiBudW1iZXJbXSwgc3RhcnQ6IG51bWJlciwgbGVuOiBudW1iZXIpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB0aGlzLmJpdHMucHVzaChzcmNbc3RhcnQgKyBpXSEpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBCaXRSZWFkZXIge1xuICBwcml2YXRlIF9iaXRzOiBudW1iZXJbXTtcbiAgcG9zID0gMDtcbiAgY29uc3RydWN0b3IoZGF0YTogQnVmZmVyKSB7XG4gICAgdGhpcy5fYml0cyA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgZm9yIChsZXQgYiA9IDc7IGIgPj0gMDsgYi0tKSB0aGlzLl9iaXRzLnB1c2goKGRhdGFbaV0hID4+IGIpICYgMSk7XG4gICAgfVxuICB9XG4gIGdldCBiaXRzKCkge1xuICAgIHJldHVybiB0aGlzLl9iaXRzO1xuICB9XG4gIHJlYWQobjogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBsZXQgdmFsID0gMDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG47IGkrKykgdmFsID0gKHZhbCA8PCAxKSB8IHRoaXMuX2JpdHNbdGhpcy5wb3MrK10hO1xuICAgIHJldHVybiB2YWw7XG4gIH1cbiAgcmVhZFVlKCk6IG51bWJlciB7XG4gICAgbGV0IHplcm9zID0gMDtcbiAgICB3aGlsZSAodGhpcy5fYml0c1t0aGlzLnBvc10gPT09IDApIHtcbiAgICAgIHplcm9zKys7XG4gICAgICB0aGlzLnBvcysrO1xuICAgIH1cbiAgICB0aGlzLnBvcysrO1xuICAgIGxldCB2YWwgPSAxO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgemVyb3M7IGkrKykgdmFsID0gKHZhbCA8PCAxKSB8IHRoaXMuX2JpdHNbdGhpcy5wb3MrK10hO1xuICAgIHJldHVybiB2YWwgLSAxO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzEyLlxuXG5jb25zdCBOQUxfSEVBREVSX1NJWkUgPSAyO1xuY29uc3QgQU5ORVhfQl9TVEFSVF9DT0RFID0gQnVmZmVyLmZyb20oWzB4MDAsIDB4MDAsIDB4MDAsIDB4MDFdKTtcblxuZXhwb3J0IHsgQU5ORVhfQl9TVEFSVF9DT0RFLCBOQUxfSEVBREVSX1NJWkUgfTtcblxuLy8gSEVWQyBOQUwgdW5pdCB0eXBlcyAoVC1SRUMtSC4yNjUgVGFibGUgNy0xKVxuZXhwb3J0IGNvbnN0IE5BTF9CTEFfV19MUCA9IDE2O1xuZXhwb3J0IGNvbnN0IE5BTF9JRFJfV19SQURMID0gMTk7XG5leHBvcnQgY29uc3QgTkFMX0lEUl9OX0xQID0gMjA7XG5leHBvcnQgY29uc3QgTkFMX1JTVl9JUkFQX1ZDTDIzID0gMjM7XG5leHBvcnQgY29uc3QgTkFMX1ZQUyA9IDMyO1xuZXhwb3J0IGNvbnN0IE5BTF9TUFMgPSAzMztcbmV4cG9ydCBjb25zdCBOQUxfUFBTID0gMzQ7XG5leHBvcnQgY29uc3QgTkFMX1NFSV9QUkVGSVggPSAzOTtcbmV4cG9ydCBjb25zdCBOQUxfU0VJX1NVRkZJWCA9IDQwO1xuXG5leHBvcnQgaW50ZXJmYWNlIE5hbFVuaXQge1xuICB0eXBlOiBudW1iZXI7XG4gIGxheWVySWQ6IG51bWJlcjtcbiAgZGF0YTogQnVmZmVyO1xufVxuXG5mdW5jdGlvbiBwYXJzZU5hbFR5cGUoaGVhZGVyMDogbnVtYmVyLCBoZWFkZXIxOiBudW1iZXIpOiB7IHR5cGU6IG51bWJlcjsgbGF5ZXJJZDogbnVtYmVyOyB0ZW1wb3JhbElkOiBudW1iZXIgfSB7XG4gIGNvbnN0IHR5cGUgPSAoaGVhZGVyMCA+PiAxKSAmIDB4M2Y7XG4gIGNvbnN0IGxheWVySWQgPSAoKGhlYWRlcjAgJiAxKSA8PCA1KSB8ICgoaGVhZGVyMSA+PiAzKSAmIDB4MWYpO1xuICBjb25zdCB0ZW1wb3JhbElkID0gaGVhZGVyMSAmIDB4MDc7XG4gIHJldHVybiB7IHR5cGUsIGxheWVySWQsIHRlbXBvcmFsSWQgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuY29kZU5hbEhlYWRlcih0eXBlOiBudW1iZXIsIGxheWVySWQ6IG51bWJlciwgdGVtcG9yYWxJZDogbnVtYmVyKTogW251bWJlciwgbnVtYmVyXSB7XG4gIGNvbnN0IGJ5dGUwID0gKCh0eXBlICYgMHgzZikgPDwgMSkgfCAoKGxheWVySWQgPj4gNSkgJiAxKTtcbiAgY29uc3QgYnl0ZTEgPSAoKGxheWVySWQgJiAweDFmKSA8PCAzKSB8ICh0ZW1wb3JhbElkICYgMHgwNyk7XG4gIHJldHVybiBbYnl0ZTAsIGJ5dGUxXTtcbn1cblxuLyoqIFNwbGl0IEFubmV4IEIgYml0c3RyZWFtIGludG8gTkFMIHVuaXRzLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNwbGl0TmFsVW5pdHMoYml0c3RyZWFtOiBCdWZmZXIpOiBOYWxVbml0W10ge1xuICBjb25zdCBuYWxzOiBOYWxVbml0W10gPSBbXTtcbiAgbGV0IGkgPSAwO1xuXG4gIHdoaWxlIChpIDwgYml0c3RyZWFtLmxlbmd0aCkge1xuICAgIGxldCBzY0xlbiA9IDA7XG4gICAgaWYgKGkgKyAzIDwgYml0c3RyZWFtLmxlbmd0aCAmJiBiaXRzdHJlYW1baV0gPT09IDAgJiYgYml0c3RyZWFtW2kgKyAxXSA9PT0gMCAmJiBiaXRzdHJlYW1baSArIDJdID09PSAxKSB7XG4gICAgICBzY0xlbiA9IDM7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIGkgKyA0IDwgYml0c3RyZWFtLmxlbmd0aCAmJlxuICAgICAgYml0c3RyZWFtW2ldID09PSAwICYmXG4gICAgICBiaXRzdHJlYW1baSArIDFdID09PSAwICYmXG4gICAgICBiaXRzdHJlYW1baSArIDJdID09PSAwICYmXG4gICAgICBiaXRzdHJlYW1baSArIDNdID09PSAxXG4gICAgKSB7XG4gICAgICBzY0xlbiA9IDQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGkrKztcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IG5hbFN0YXJ0ID0gaSArIHNjTGVuO1xuICAgIGlmIChuYWxTdGFydCArIE5BTF9IRUFERVJfU0laRSA+IGJpdHN0cmVhbS5sZW5ndGgpIGJyZWFrO1xuXG4gICAgbGV0IG5hbEVuZCA9IGJpdHN0cmVhbS5sZW5ndGg7XG4gICAgZm9yIChsZXQgaiA9IG5hbFN0YXJ0ICsgTkFMX0hFQURFUl9TSVpFOyBqIDwgYml0c3RyZWFtLmxlbmd0aCAtIDI7IGorKykge1xuICAgICAgaWYgKFxuICAgICAgICBiaXRzdHJlYW1bal0gPT09IDAgJiZcbiAgICAgICAgYml0c3RyZWFtW2ogKyAxXSA9PT0gMCAmJlxuICAgICAgICAoYml0c3RyZWFtW2ogKyAyXSA9PT0gMSB8fCAoaiArIDMgPCBiaXRzdHJlYW0ubGVuZ3RoICYmIGJpdHN0cmVhbVtqICsgMl0gPT09IDAgJiYgYml0c3RyZWFtW2ogKyAzXSA9PT0gMSkpXG4gICAgICApIHtcbiAgICAgICAgbmFsRW5kID0gajtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgeyB0eXBlLCBsYXllcklkIH0gPSBwYXJzZU5hbFR5cGUoYml0c3RyZWFtW25hbFN0YXJ0XSEsIGJpdHN0cmVhbVtuYWxTdGFydCArIDFdISk7XG4gICAgbmFscy5wdXNoKHsgdHlwZSwgbGF5ZXJJZCwgZGF0YTogYml0c3RyZWFtLnN1YmFycmF5KG5hbFN0YXJ0LCBuYWxFbmQpIH0pO1xuICAgIGkgPSBuYWxFbmQ7XG4gIH1cblxuICByZXR1cm4gbmFscztcbn1cblxuLyoqIFJld3JpdGUgbnVoX2xheWVyX2lkIGluIGEgTkFMIHVuaXQgKHJldHVybnMgY29weSkuICovXG5leHBvcnQgZnVuY3Rpb24gcmV3cml0ZU5hbExheWVySWQobmFsOiBCdWZmZXIsIGxheWVySWQ6IG51bWJlcik6IEJ1ZmZlciB7XG4gIGNvbnN0IG91dCA9IEJ1ZmZlci5mcm9tKG5hbCk7XG4gIGNvbnN0IHsgdHlwZSwgdGVtcG9yYWxJZCB9ID0gcGFyc2VOYWxUeXBlKG91dFswXSEsIG91dFsxXSEpO1xuICBjb25zdCBbYjAsIGIxXSA9IGVuY29kZU5hbEhlYWRlcih0eXBlLCBsYXllcklkLCB0ZW1wb3JhbElkKTtcbiAgb3V0WzBdID0gYjA7XG4gIG91dFsxXSA9IGIxO1xuICByZXR1cm4gb3V0O1xufVxuXG4vKiogUmV3cml0ZSBuYWxfdW5pdF90eXBlIGluIGEgTkFMIHVuaXQgKHJldHVybnMgY29weSkuICovXG5leHBvcnQgZnVuY3Rpb24gcmV3cml0ZU5hbFR5cGUobmFsOiBCdWZmZXIsIG5ld1R5cGU6IG51bWJlcik6IEJ1ZmZlciB7XG4gIGNvbnN0IG91dCA9IEJ1ZmZlci5mcm9tKG5hbCk7XG4gIGNvbnN0IHsgbGF5ZXJJZCwgdGVtcG9yYWxJZCB9ID0gcGFyc2VOYWxUeXBlKG91dFswXSEsIG91dFsxXSEpO1xuICBjb25zdCBbYjAsIGIxXSA9IGVuY29kZU5hbEhlYWRlcihuZXdUeXBlLCBsYXllcklkLCB0ZW1wb3JhbElkKTtcbiAgb3V0WzBdID0gYjA7XG4gIG91dFsxXSA9IGIxO1xuICByZXR1cm4gb3V0O1xufVxuXG4vKiogUmVtb3ZlIGVtdWxhdGlvbiBwcmV2ZW50aW9uIGJ5dGVzICgwMCAwMCAwMyDihpIgMDAgMDApIGZyb20gUkJTUC4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uKGRhdGE6IEJ1ZmZlcik6IEJ1ZmZlciB7XG4gIGNvbnN0IG91dDogbnVtYmVyW10gPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGkgKyAyIDwgZGF0YS5sZW5ndGggJiYgZGF0YVtpXSA9PT0gMCAmJiBkYXRhW2kgKyAxXSA9PT0gMCAmJiBkYXRhW2kgKyAyXSA9PT0gMykge1xuICAgICAgb3V0LnB1c2goMCwgMCk7XG4gICAgICBpICs9IDI7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dC5wdXNoKGRhdGFbaV0hKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIEJ1ZmZlci5mcm9tKG91dCk7XG59XG5cbi8qKiBJbnNlcnQgZW11bGF0aW9uIHByZXZlbnRpb24gYnl0ZXMgKDAwIDAwIDAzKSBmb3IgQW5uZXggQiBjb21wbGlhbmNlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZEVtdWxhdGlvblByZXZlbnRpb24obmFsOiBCdWZmZXIpOiBCdWZmZXIge1xuICBjb25zdCBvdXQ6IG51bWJlcltdID0gW107XG4gIG91dC5wdXNoKG5hbFswXSEsIG5hbFsxXSEpO1xuICBsZXQgemVyb3MgPSAwO1xuICBmb3IgKGxldCBpID0gMjsgaSA8IG5hbC5sZW5ndGg7IGkrKykge1xuICAgIGlmICh6ZXJvcyA9PT0gMiAmJiBuYWxbaV0hIDw9IDMpIHtcbiAgICAgIG91dC5wdXNoKDMpO1xuICAgICAgemVyb3MgPSAwO1xuICAgIH1cbiAgICBpZiAobmFsW2ldID09PSAwKSB6ZXJvcysrO1xuICAgIGVsc2UgemVyb3MgPSAwO1xuICAgIG91dC5wdXNoKG5hbFtpXSEpO1xuICB9XG4gIHJldHVybiBCdWZmZXIuZnJvbShvdXQpO1xufVxuIiwiLy8gUGF0Y2ggTlZFTkMgb3V0cHV0IHRvIGNvbmZvcm0gdG8gQXBwbGUgSEVWQyBWaWRlbyB3aXRoIEFscGhhIEludGVyb3BlcmFiaWxpdHkgUHJvZmlsZS5cbi8vIFNwZWM6IGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9hdi1mb3VuZGF0aW9uL0hFVkMtVmlkZW8td2l0aC1BbHBoYS1JbnRlcm9wZXJhYmlsaXR5LVByb2ZpbGUucGRmXG4vLyBTbGljZSBwYXJzZXIgaXMgY29uZmlnLWRyaXZlbjogTnZlbmNIZXZjQ29uZmlnIGZyb20gcGFyc2UudHMgZGVyaXZlcyBmbGFncyBhdCBlbmNvZGVyIGluaXQuXG5cbmltcG9ydCB7IEJpdFJlYWRlciwgQml0V3JpdGVyLCBwYWNrQml0cyB9IGZyb20gXCIuL2JpdFwiO1xuaW1wb3J0IHtcbiAgQU5ORVhfQl9TVEFSVF9DT0RFLFxuICBhZGRFbXVsYXRpb25QcmV2ZW50aW9uLFxuICBOQUxfQkxBX1dfTFAsXG4gIE5BTF9SU1ZfSVJBUF9WQ0wyMyxcbiAgTkFMX1NQUyxcbiAgTkFMX1ZQUyxcbiAgcmVtb3ZlRW11bGF0aW9uUHJldmVudGlvbixcbiAgc3BsaXROYWxVbml0cyxcbn0gZnJvbSBcIi4vbmFsXCI7XG5pbXBvcnQgdHlwZSB7IE52ZW5jSGV2Y0NvbmZpZyB9IGZyb20gXCIuL3BhcnNlclwiO1xuXG4vLyBQVEwgYml0IG9mZnNldHMgd2l0aGluIGVtdWxhdGlvbi1wcmV2ZW50aW9uLXN0cmlwcGVkIE5BTCAoTkFMIGhlYWRlciBpbmNsdWRlZCkuXG5jb25zdCBWUFNfUFRMX0JJVCA9IDQ4OyAvLyAxNiAoTkFMIGhkcikgKyAzMiAoVlBTIHByZWZpeClcbmNvbnN0IFNQU19QVExfQklUID0gMjQ7IC8vIDE2IChOQUwgaGRyKSArIDggKFNQUyBwcmVmaXgpXG5jb25zdCBQVExfVElFUl9CSVQgPSAyO1xuY29uc3QgUFRMX0NPTVBBVDJfQklUID0gMTA7IC8vIHByb2ZpbGVfc3BhY2UoMikgKyB0aWVyKDEpICsgaWRjKDUpICsgY29tcGF0WzAsMV0oMilcbmNvbnN0IFNMSUNFX1RZUEVfQiA9IDA7XG5jb25zdCBTTElDRV9UWVBFX1AgPSAxO1xuXG5mdW5jdGlvbiBzZXRCaXQoYnVmOiBCdWZmZXIsIGJpdE9mZnNldDogbnVtYmVyLCB2YWx1ZTogMCB8IDEpOiB2b2lkIHtcbiAgY29uc3QgYnl0ZSA9IGJpdE9mZnNldCA+PiAzO1xuICBjb25zdCBtYXNrID0gMSA8PCAoNyAtIChiaXRPZmZzZXQgJiA3KSk7XG4gIGNvbnN0IGN1ciA9IGJ1ZltieXRlXSA/PyAwO1xuICBidWZbYnl0ZV0gPSB2YWx1ZSA/IGN1ciB8IG1hc2sgOiBjdXIgJiB+bWFzaztcbn1cblxuZnVuY3Rpb24gcGF0Y2hQdGwobmFsRGF0YTogQnVmZmVyLCBwdGxTdGFydEJpdDogbnVtYmVyKTogQnVmZmVyIHtcbiAgY29uc3QgcmJzcCA9IHJlbW92ZUVtdWxhdGlvblByZXZlbnRpb24obmFsRGF0YSk7XG4gIHNldEJpdChyYnNwLCBwdGxTdGFydEJpdCArIFBUTF9USUVSX0JJVCwgMCk7XG4gIHNldEJpdChyYnNwLCBwdGxTdGFydEJpdCArIFBUTF9DT01QQVQyX0JJVCwgMSk7XG4gIHJldHVybiBhZGRFbXVsYXRpb25QcmV2ZW50aW9uKHJic3ApO1xufVxuXG4vKiogUGF0Y2ggZXZlcnkgVlBTL1NQUyBOQUwgaW4gYW4gQW5uZXggQiBiaXRzdHJlYW0gc28gUFRMIG1hdGNoZXMgQXBwbGUveDI2NS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXRjaEhldmNBbHBoYVB0bChiaXRzdHJlYW06IEJ1ZmZlcik6IEJ1ZmZlciB7XG4gIGNvbnN0IG5hbHMgPSBzcGxpdE5hbFVuaXRzKGJpdHN0cmVhbSk7XG4gIGlmIChuYWxzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGJpdHN0cmVhbTtcbiAgY29uc3QgY2h1bmtzOiBCdWZmZXJbXSA9IFtdO1xuICBmb3IgKGNvbnN0IG5hbCBvZiBuYWxzKSB7XG4gICAgbGV0IGRhdGEgPSBuYWwuZGF0YTtcbiAgICBpZiAobmFsLnR5cGUgPT09IE5BTF9WUFMpIGRhdGEgPSBwYXRjaFB0bChuYWwuZGF0YSwgVlBTX1BUTF9CSVQpO1xuICAgIGVsc2UgaWYgKG5hbC50eXBlID09PSBOQUxfU1BTKSBkYXRhID0gcGF0Y2hQdGwobmFsLmRhdGEsIFNQU19QVExfQklUKTtcbiAgICBjaHVua3MucHVzaChBTk5FWF9CX1NUQVJUX0NPREUsIGRhdGEpO1xuICB9XG4gIHJldHVybiBCdWZmZXIuY29uY2F0KGNodW5rcyk7XG59XG5cbi8vIOKUgOKUgOKUgCB1ZSh2KSByZXdyaXRlIGhlbHBlcnMgKFNQUy9QUFMg4oCUIFJCU1AgY2FuIGdyb3cgZnJlZWx5LCBubyBDQUJBQyB0cmFpbGluZykg4pSA4pSAXG5cbmZ1bmN0aW9uIHJld3JpdGVPbmVVZShuYWxJbjogQnVmZmVyLCBiaXRPZmZzZXQ6IG51bWJlciwgbmV3VmFsOiBudW1iZXIpOiBCdWZmZXIge1xuICBjb25zdCByYnNwID0gcmVtb3ZlRW11bGF0aW9uUHJldmVudGlvbihuYWxJbik7XG4gIGNvbnN0IGJyID0gbmV3IEJpdFJlYWRlcihyYnNwKTtcbiAgY29uc3QgYncgPSBuZXcgQml0V3JpdGVyKCk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYml0T2Zmc2V0OyBpKyspIGJ3LmJpdHMucHVzaChici5yZWFkKDEpKTtcbiAgYnIucmVhZFVlKCk7XG4gIGJ3LnVlKG5ld1ZhbCk7XG4gIHdoaWxlIChici5wb3MgPCBici5iaXRzLmxlbmd0aCkgYncuYml0cy5wdXNoKGJyLnJlYWQoMSkpO1xuICB3aGlsZSAoYncuYml0cy5sZW5ndGggJSA4ICE9PSAwKSBidy5iaXRzLnB1c2goMCk7XG4gIHJldHVybiBhZGRFbXVsYXRpb25QcmV2ZW50aW9uKHBhY2tCaXRzKGJ3LmJpdHMpKTtcbn1cblxuZnVuY3Rpb24gcmV3cml0ZVR3b1VlKG5hbEluOiBCdWZmZXIsIGJpdE9mZnNldDogbnVtYmVyLCBuZXdWYWwxOiBudW1iZXIsIG5ld1ZhbDI6IG51bWJlcik6IEJ1ZmZlciB7XG4gIGNvbnN0IHJic3AgPSByZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uKG5hbEluKTtcbiAgY29uc3QgYnIgPSBuZXcgQml0UmVhZGVyKHJic3ApO1xuICBjb25zdCBidyA9IG5ldyBCaXRXcml0ZXIoKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBiaXRPZmZzZXQ7IGkrKykgYncuYml0cy5wdXNoKGJyLnJlYWQoMSkpO1xuICBici5yZWFkVWUoKTtcbiAgYnIucmVhZFVlKCk7XG4gIGJ3LnVlKG5ld1ZhbDEpO1xuICBidy51ZShuZXdWYWwyKTtcbiAgd2hpbGUgKGJyLnBvcyA8IGJyLmJpdHMubGVuZ3RoKSBidy5iaXRzLnB1c2goYnIucmVhZCgxKSk7XG4gIHdoaWxlIChidy5iaXRzLmxlbmd0aCAlIDggIT09IDApIGJ3LmJpdHMucHVzaCgwKTtcbiAgcmV0dXJuIGFkZEVtdWxhdGlvblByZXZlbnRpb24ocGFja0JpdHMoYncuYml0cykpO1xufVxuXG4vKiogQWxwaGEgU1BTOiBzcHNfc2VxX3BhcmFtZXRlcl9zZXRfaWQgMCDihpIgMS4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXdyaXRlQWxwaGFTcHMoc3BzOiBCdWZmZXIpOiBCdWZmZXIge1xuICBjb25zdCBTUFNfU0VRX0lEX0JJVCA9IFNQU19QVExfQklUICsgOTY7IC8vIFBUTCBpcyA5NiBiaXRzIGZvciBvdXIgcHJvZmlsZSBjb25maWdcbiAgcmV0dXJuIHJld3JpdGVPbmVVZShzcHMsIFNQU19TRVFfSURfQklULCAxKTtcbn1cblxuLyoqIEFscGhhIFBQUzogcHBzX3BpY19wYXJhbWV0ZXJfc2V0X2lkIDAg4oaSIDEsIHBwc19zZXFfcGFyYW1ldGVyX3NldF9pZCAwIOKGkiAxLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJld3JpdGVBbHBoYVBwcyhwcHM6IEJ1ZmZlcik6IEJ1ZmZlciB7XG4gIHJldHVybiByZXdyaXRlVHdvVWUocHBzLCAxNiAvKiBhZnRlciBOQUwgaGVhZGVyICovLCAxLCAxKTtcbn1cblxuLy8g4pSA4pSA4pSAIFNsaWNlIGhlYWRlciByZXdyaXRlIChtdXN0IHByZXNlcnZlIENBQkFDIGJ5dGUgYWxpZ25tZW50KSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZnVuY3Rpb24gcmVhZFNlKGJyOiBCaXRSZWFkZXIpOiBudW1iZXIge1xuICBjb25zdCB1ZSA9IGJyLnJlYWRVZSgpO1xuICByZXR1cm4gdWUgJiAxID8gKHVlICsgMSkgPj4gMSA6IC0odWUgPj4gMSk7XG59XG5cbi8vIElubGluZSBzdF9yZWZfcGljX3NldCB3aGVuIHNsaWNlIGhhcyBzaG9ydF90ZXJtX3JlZl9waWNfc2V0X3Nwc19mbGFnPTAuXG4vLyBzdFJwc0lkeCA9IG51bV9zaG9ydF90ZXJtX3JlZl9waWNfc2V0cyBzbyBpbnRlcl9yZWZfcGljX3NldF9wcmVkaWN0aW9uIG1heSB1c2UgcHJldiBzZXQuXG5mdW5jdGlvbiBwYXJzZUlubGluZVN0UmVmUGljU2V0KGJyOiBCaXRSZWFkZXIsIG51bURlbHRhUG9jc1NldDA6IG51bWJlcik6IHZvaWQge1xuICBjb25zdCBpbnRlckZsYWcgPSBici5yZWFkKDEpOyAvLyBpbnRlcl9yZWZfcGljX3NldF9wcmVkaWN0aW9uX2ZsYWdcbiAgaWYgKGludGVyRmxhZykge1xuICAgIGNvbnN0IGRlbHRhSWR4TWludXMxID0gYnIucmVhZFVlKCk7IC8vIHN0UnBzSWR4ID09IG51bV9zaG9ydF90ZXJtX3JlZl9waWNfc2V0cyDihpIgcHJlc2VudFxuICAgIGlmIChkZWx0YUlkeE1pbnVzMSAhPT0gMCkgdGhyb3cgbmV3IEVycm9yKGBhcHBsZV9hbHBoYTogdW5leHBlY3RlZCBkZWx0YV9pZHhfbWludXMxPSR7ZGVsdGFJZHhNaW51czF9YCk7XG4gICAgYnIucmVhZCgxKTsgLy8gZGVsdGFfcnBzX3NpZ25cbiAgICBici5yZWFkVWUoKTsgLy8gYWJzX2RlbHRhX3Jwc19taW51czFcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8PSBudW1EZWx0YVBvY3NTZXQwOyBqKyspIHtcbiAgICAgIGNvbnN0IHVzZWQgPSBici5yZWFkKDEpO1xuICAgICAgaWYgKCF1c2VkKSBici5yZWFkKDEpOyAvLyB1c2VfZGVsdGFfZmxhZ1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBjb25zdCBudW1OZWcgPSBici5yZWFkVWUoKTtcbiAgICBjb25zdCBudW1Qb3MgPSBici5yZWFkVWUoKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bU5lZzsgaSsrKSB7IGJyLnJlYWRVZSgpOyBici5yZWFkKDEpOyB9XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1Qb3M7IGkrKykgeyBici5yZWFkVWUoKTsgYnIucmVhZCgxKTsgfVxuICB9XG59XG5cbi8qKiBQYXJzZSBzbGljZV9zZWdtZW50X2hlYWRlciB1cCB0byBieXRlX2FsaWdubWVudC4gUmV0dXJucyBiaXQgcG9zaXRpb24gQiAoZW5kIG9mIGhlYWRlciBjb250ZW50KS4gKi9cbmZ1bmN0aW9uIHBhcnNlSGVhZGVyVG9BbGlnbm1lbnQoYnI6IEJpdFJlYWRlciwgbmFsVHlwZTogbnVtYmVyLCBjZmc6IE52ZW5jSGV2Y0NvbmZpZyk6IG51bWJlciB7XG4gIGJyLnJlYWQoMTYpOyAvLyBza2lwIE5BTCBoZWFkZXJcbiAgaWYgKGJyLnJlYWQoMSkgIT09IDEpIHRocm93IG5ldyBFcnJvcihcImFwcGxlX2FscGhhOiBleHBlY3RlZCBmaXJzdF9zbGljZV9zZWdtZW50X2luX3BpY19mbGFnPTFcIik7XG4gIGNvbnN0IGlzSXJhcCA9IG5hbFR5cGUgPj0gTkFMX0JMQV9XX0xQICYmIG5hbFR5cGUgPD0gTkFMX1JTVl9JUkFQX1ZDTDIzO1xuICBpZiAoaXNJcmFwKSBici5yZWFkKDEpOyAvLyBub19vdXRwdXRfb2ZfcHJpb3JfcGljc19mbGFnXG4gIGJyLnJlYWRVZSgpOyAvLyBzbGljZV9waWNfcGFyYW1ldGVyX3NldF9pZFxuICBjb25zdCBzbGljZVR5cGUgPSBici5yZWFkVWUoKTtcbiAgaWYgKCFpc0lyYXApIHtcbiAgICBici5yZWFkKGNmZy5sb2cyTWF4UG9jTHNiKTsgLy8gc2xpY2VfcGljX29yZGVyX2NudF9sc2JcbiAgICBjb25zdCBzdFJlZlBpY1NldFNwc0ZsYWcgPSBici5yZWFkKDEpO1xuICAgIGlmICghc3RSZWZQaWNTZXRTcHNGbGFnKSBwYXJzZUlubGluZVN0UmVmUGljU2V0KGJyLCBjZmcubnVtRGVsdGFQb2NzU2V0MCk7XG4gICAgZWxzZSBpZiAoY2ZnLm51bVNob3J0VGVybVJlZlBpY1NldHMgPiAxKSBici5yZWFkKE1hdGguY2VpbChNYXRoLmxvZzIoY2ZnLm51bVNob3J0VGVybVJlZlBpY1NldHMpKSk7XG4gICAgaWYgKGNmZy5sb25nVGVybVJlZlBpY3NQcmVzZW50KSB0aHJvdyBuZXcgRXJyb3IoXCJhcHBsZV9hbHBoYTogbG9uZ190ZXJtX3JlZl9waWNzIHBhdGggdW5pbXBsZW1lbnRlZFwiKTtcbiAgICBpZiAoY2ZnLnNwc1RlbXBvcmFsTXZwRW5hYmxlZCkgYnIucmVhZCgxKTsgLy8gc2xpY2VfdGVtcG9yYWxfbXZwX2VuYWJsZWRfZmxhZ1xuICB9XG4gIGlmIChjZmcuc2FvRW5hYmxlZCkge1xuICAgIGJyLnJlYWQoMSk7IC8vIHNsaWNlX3Nhb19sdW1hX2ZsYWdcbiAgICBici5yZWFkKDEpOyAvLyBzbGljZV9zYW9fY2hyb21hX2ZsYWdcbiAgfVxuICBpZiAoc2xpY2VUeXBlID09PSBTTElDRV9UWVBFX1AgfHwgc2xpY2VUeXBlID09PSBTTElDRV9UWVBFX0IpIHtcbiAgICBjb25zdCBvdmVycmlkZUZsYWcgPSBici5yZWFkKDEpO1xuICAgIGlmIChvdmVycmlkZUZsYWcpIHtcbiAgICAgIGJyLnJlYWRVZSgpO1xuICAgICAgaWYgKHNsaWNlVHlwZSA9PT0gU0xJQ0VfVFlQRV9CKSBici5yZWFkVWUoKTtcbiAgICB9XG4gICAgaWYgKHNsaWNlVHlwZSA9PT0gU0xJQ0VfVFlQRV9CKSBici5yZWFkKDEpOyAvLyBtdmRfbDFfemVyb19mbGFnXG4gICAgaWYgKGNmZy5jYWJhY0luaXRQcmVzZW50KSBici5yZWFkKDEpOyAvLyBjYWJhY19pbml0X2ZsYWdcbiAgICBici5yZWFkVWUoKTsgLy8gZml2ZV9taW51c19tYXhfbnVtX21lcmdlX2NhbmRcbiAgfVxuICByZWFkU2UoYnIpOyAvLyBzbGljZV9xcF9kZWx0YVxuICBpZiAoY2ZnLnBwc0hhc0xvb3BGaWx0ZXJBY3Jvc3NTbGljZXNGbGFnKSBici5yZWFkKDEpOyAvLyBzbGljZV9sb29wX2ZpbHRlcl9hY3Jvc3Nfc2xpY2VzX2VuYWJsZWRfZmxhZ1xuICByZXR1cm4gYnIucG9zO1xufVxuXG4vKipcbiAqIFJld3JpdGUgYWxwaGEgc2xpY2UgaGVhZGVyOiBzbGljZV9waWNfcGFyYW1ldGVyX3NldF9pZCAwIOKGkiAxLlxuICogVGhlICsyLWJpdCBzaGlmdCBpcyBhYnNvcmJlZCBieSBlbWl0dGluZyBhIGZyZXNoIGJ5dGVfYWxpZ25tZW50IHRoZW4gYXBwZW5kaW5nIHRoZVxuICogb3JpZ2luYWwgQ0FCQUMgc2xpY2Vfc2VnbWVudF9kYXRhIGJ5dGVzIHZlcmJhdGltLiBDQUJBQyBieXRlIGJvdW5kYXJ5IGlzIHByZXNlcnZlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJld3JpdGVBbHBoYVNsaWNlSGVhZGVyKHNsaWNlOiBCdWZmZXIsIG5hbFR5cGU6IG51bWJlciwgY2ZnOiBOdmVuY0hldmNDb25maWcpOiBCdWZmZXIge1xuICBjb25zdCByYnNwID0gcmVtb3ZlRW11bGF0aW9uUHJldmVudGlvbihzbGljZSk7XG4gIGNvbnN0IGJyID0gbmV3IEJpdFJlYWRlcihyYnNwKTtcblxuICBjb25zdCBwcm9iZSA9IG5ldyBCaXRSZWFkZXIocmJzcCk7XG4gIGNvbnN0IEIgPSBwYXJzZUhlYWRlclRvQWxpZ25tZW50KHByb2JlLCBuYWxUeXBlLCBjZmcpO1xuICBjb25zdCBvbGRBbGlnbkJpdHMgPSBCICUgOCA9PT0gMCA/IDggOiA4IC0gKEIgJSA4KTtcbiAgY29uc3Qgc2xpY2VEYXRhQnl0ZU9mZnNldCA9IChCICsgb2xkQWxpZ25CaXRzKSAvIDg7XG5cbiAgY29uc3QgYncgPSBuZXcgQml0V3JpdGVyKCk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgMTY7IGkrKykgYncuYml0cy5wdXNoKGJyLnJlYWQoMSkpOyAvLyBOQUwgaGVhZGVyXG4gIGJ3LmJpdHMucHVzaChici5yZWFkKDEpKTsgLy8gZmlyc3Rfc2xpY2Vfc2VnbWVudF9pbl9waWNfZmxhZ1xuICBjb25zdCBpc0lyYXAgPSBuYWxUeXBlID49IE5BTF9CTEFfV19MUCAmJiBuYWxUeXBlIDw9IE5BTF9SU1ZfSVJBUF9WQ0wyMztcbiAgaWYgKGlzSXJhcCkgYncuYml0cy5wdXNoKGJyLnJlYWQoMSkpOyAvLyBub19vdXRwdXRfb2ZfcHJpb3JfcGljc19mbGFnXG5cbiAgYnIucmVhZFVlKCk7IC8vIGRpc2NhcmQgb2xkIHNsaWNlX3BpY19wYXJhbWV0ZXJfc2V0X2lkXG4gIGJ3LnVlKDEpOyAvLyBuZXcgc2xpY2VfcGljX3BhcmFtZXRlcl9zZXRfaWRcblxuICB3aGlsZSAoYnIucG9zIDwgQikgYncuYml0cy5wdXNoKGJyLnJlYWQoMSkpOyAvLyBjb3B5IHJlc3Qgb2YgaGVhZGVyIGJpdHNcblxuICBidy5iaXRzLnB1c2goMSk7IC8vIGJ5dGVfYWxpZ25tZW50OiByYnNwX2FsaWdubWVudF9iaXRfb25lXG4gIHdoaWxlIChidy5iaXRzLmxlbmd0aCAlIDggIT09IDApIGJ3LmJpdHMucHVzaCgwKTtcblxuICByZXR1cm4gYWRkRW11bGF0aW9uUHJldmVudGlvbihCdWZmZXIuY29uY2F0KFtwYWNrQml0cyhidy5iaXRzKSwgcmJzcC5zdWJhcnJheShzbGljZURhdGFCeXRlT2Zmc2V0KV0pKTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMTMuXG5cbmltcG9ydCB7IEJpdFJlYWRlciwgQml0V3JpdGVyLCBwYWNrQml0cyB9IGZyb20gXCIuL2JpdFwiO1xuaW1wb3J0IHsgYWRkRW11bGF0aW9uUHJldmVudGlvbiwgcmVtb3ZlRW11bGF0aW9uUHJldmVudGlvbiB9IGZyb20gXCIuL25hbFwiO1xuXG5pbnRlcmZhY2UgUGFyc2VkUFRMIHtcbiAgcHRsU3RhcnQ6IG51bWJlcjtcbiAgcHRsRW5kOiBudW1iZXI7XG4gIHB0bEJpdHM6IG51bWJlcltdO1xuICBtYXhTdWJMYXllcnNNaW51czE6IG51bWJlcjtcbn1cblxuZnVuY3Rpb24gZXh0cmFjdFBUTCh2cHNEYXRhOiBCdWZmZXIpOiBQYXJzZWRQVEwgfCB1bmRlZmluZWQge1xuICBjb25zdCBiciA9IG5ldyBCaXRSZWFkZXIocmVtb3ZlRW11bGF0aW9uUHJldmVudGlvbih2cHNEYXRhKSk7XG4gIGJyLnJlYWQoMTYpOyAvLyBOQUwgaGVhZGVyXG4gIGJyLnJlYWQoNCk7IC8vIHZwc19pZFxuICBici5yZWFkKDIpOyAvLyBiYXNlX2xheWVyX2ludGVybmFsICsgYXZhaWxhYmxlXG4gIGlmIChici5yZWFkKDYpID4gMCkgcmV0dXJuIHVuZGVmaW5lZDsgLy8gYWxyZWFkeSBtdWx0aS1sYXllclxuICBjb25zdCBtYXhTdWJMYXllcnNNaW51czEgPSBici5yZWFkKDMpO1xuICBici5yZWFkKDEgKyAxNik7IC8vIHRlbXBvcmFsX25lc3RpbmcgKyByZXNlcnZlZFxuXG4gIGNvbnN0IHB0bFN0YXJ0ID0gYnIucG9zO1xuICBici5yZWFkKDk2KTsgLy8gZ2VuZXJhbCBQVEwgKHByb2ZpbGVfc3BhY2UgKyB0aWVyICsgaWRjICsgY29tcGF0ICsgY29uc3RyYWludHMgKyBsZXZlbClcbiAgaWYgKG1heFN1YkxheWVyc01pbnVzMSA+IDApIGJyLnJlYWQobWF4U3ViTGF5ZXJzTWludXMxICogMiArICg4IC0gbWF4U3ViTGF5ZXJzTWludXMxKSAqIDIpO1xuICByZXR1cm4geyBwdGxTdGFydCwgcHRsRW5kOiBici5wb3MsIHB0bEJpdHM6IGJyLmJpdHMsIG1heFN1YkxheWVyc01pbnVzMSB9O1xufVxuXG4vKiogV3JpdGUgYmFzZSBWUFMgZmllbGRzIGZvciAyLWxheWVyIGFscGhhLiAqL1xuZnVuY3Rpb24gd3JpdGVCYXNlVlBTKGJ3OiBCaXRXcml0ZXIsIHB0bDogUGFyc2VkUFRMKSB7XG4gIGJ3LncoMHg0MDAxLCAxNik7IC8vIE5BTCBoZWFkZXJcbiAgYncudygwLCA0KTsgLy8gdnBzX2lkXG4gIGJ3LmZsYWcoMSk7IC8vIGJhc2VfbGF5ZXJfaW50ZXJuYWxcbiAgYncuZmxhZygxKTsgLy8gYmFzZV9sYXllcl9hdmFpbGFibGVcbiAgYncudygxLCA2KTsgLy8gbWF4X2xheWVyc19taW51czEgPSAxXG4gIGJ3LncocHRsLm1heFN1YkxheWVyc01pbnVzMSwgMyk7XG4gIC8vIHRlbXBvcmFsX25lc3Rpbmc6IHRydWUgd2hlbiBzaW5nbGUgc3ViLWxheWVyIChhbGwgcmVmcyBsYXllciAwKVxuICBidy5mbGFnKHB0bC5tYXhTdWJMYXllcnNNaW51czEgPT09IDApO1xuICBidy53KDB4ZmZmZiwgMTYpOyAvLyByZXNlcnZlZFxuICBidy5jb3B5KHB0bC5wdGxCaXRzLCBwdGwucHRsU3RhcnQsIHB0bC5wdGxFbmQgLSBwdGwucHRsU3RhcnQpO1xuXG4gIGJ3LmZsYWcoMSk7IC8vIHN1Yl9sYXllcl9vcmRlcmluZ19pbmZvX3ByZXNlbnRcbiAgZm9yIChsZXQgaSA9IDA7IGkgPD0gcHRsLm1heFN1YkxheWVyc01pbnVzMTsgaSsrKSB7XG4gICAgYncudWUoNCk7IC8vIG1heERlY1BpY0J1ZmZlcmluZyAtIDFcbiAgICBidy51ZSgyKTsgLy8gbnVtUmVvcmRlclBpY3NcbiAgICBidy51ZSg0KTsgLy8gbWF4TGF0ZW5jeUluY3JlYXNlICsgMVxuICB9XG5cbiAgYncudygxLCA2KTsgLy8gbWF4X251aF9sYXllcl9pZCA9IDFcbiAgYncudWUoMSk7IC8vIG51bV9sYXllcl9zZXRzX21pbnVzMSA9IDFcbiAgYncuZmxhZygxKTsgLy8gbGF5ZXJfaWRfaW5jbHVkZWRbMV1bMF1cbiAgYncuZmxhZygxKTsgLy8gbGF5ZXJfaWRfaW5jbHVkZWRbMV1bMV1cbiAgYncuZmxhZygwKTsgLy8gdGltaW5nX2luZm9fcHJlc2VudFxuICBidy5mbGFnKDEpOyAvLyB2cHNfZXh0ZW5zaW9uX2ZsYWdcbiAgYncuYWxpZ24oMSk7IC8vIGV4dGVuc2lvbiBhbGlnbm1lbnQgYml0cyA9IDFcbn1cblxuLyoqIFdyaXRlIFZQUyBleHRlbnNpb24gbWF0Y2hpbmcgeDI2NSA0LjEgRU5BQkxFX0FMUEhBLiAqL1xuZnVuY3Rpb24gd3JpdGVWUFNFeHRlbnNpb24oYnc6IEJpdFdyaXRlciwgcHRsOiBQYXJzZWRQVEwsIHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKSB7XG4gIC8vIEV4dGVuc2lvbiBQVEw6IGxldmVsX2lkYyBvbmx5IChwcm9maWxlUHJlc2VudEZsYWc9MClcbiAgYncuY29weShwdGwucHRsQml0cywgcHRsLnB0bEVuZCAtIDgsIDgpO1xuICBpZiAocHRsLm1heFN1YkxheWVyc01pbnVzMSA+IDApIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHB0bC5tYXhTdWJMYXllcnNNaW51czE7IGkrKykgYncudygwLCAyKTtcbiAgICBmb3IgKGxldCBpID0gcHRsLm1heFN1YkxheWVyc01pbnVzMTsgaSA8IDg7IGkrKykgYncudygwLCAyKTtcbiAgfVxuXG4gIGJ3LmZsYWcoMCk7IC8vIHNwbGl0dGluZ19mbGFnXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgMTY7IGkrKykgYncuZmxhZyhpID09PSAyIHx8IGkgPT09IDMpOyAvLyBzY2FsYWJpbGl0eTogc3BhdGlhbCArIGF1eFxuICBidy53KDAsIDMpOyAvLyBkaW1lbnNpb25faWRfbGVuWzBdID0gMVxuICBidy53KDAsIDMpOyAvLyBkaW1lbnNpb25faWRfbGVuWzFdID0gMVxuICBidy5mbGFnKDEpOyAvLyBudWhfbGF5ZXJfaWRfcHJlc2VudFxuICBidy53KDEsIDYpOyAvLyBsYXllcl9pZF9pbl9udWhbMV0gPSAxXG4gIGJ3LncoMSwgMSk7IC8vIGRpbWVuc2lvbl9pZFsxXVswXSA9IDFcbiAgYncudygxLCAxKTsgLy8gZGltZW5zaW9uX2lkWzFdWzFdID0gQVVYX0FMUEhBXG4gIGJ3LncoMCwgNCk7IC8vIHZpZXdfaWRfbGVuID0gMFxuXG4gIGJ3LmZsYWcoMCk7IC8vIGRpcmVjdF9kZXBlbmRlbmN5X2ZsYWdbMV1bMF1cbiAgYncudWUoMCk7IC8vIG51bV9hZGRfbGF5ZXJfc2V0c1xuICBidy5mbGFnKDApOyAvLyBzdWJfbGF5ZXJzX21heF9taW51czFfcHJlc2VudFxuICBidy5mbGFnKDApOyAvLyBtYXhfdGlkX3JlZl9wcmVzZW50XG4gIGJ3LmZsYWcoMCk7IC8vIGRlZmF1bHRfcmVmX2xheWVyc19hY3RpdmVcblxuICAvLyBGRm1wZWcgbG9vcHMgZnJvbSBpbmRleCAyIHRvIG5iX3B0bC0xLCBzbyBucHRsX20xPTIg4oaSIDEgZW50cnkgYXQgaW5kZXggMlxuICBidy51ZSgyKTsgLy8gdnBzX251bV9wcm9maWxlX3RpZXJfbGV2ZWxfbWludXMxXG4gIGJ3LmZsYWcoMSk7IC8vIHByb2ZpbGVfcHJlc2VudF9mbGFnWzJdXG4gIGJ3LmNvcHkocHRsLnB0bEJpdHMsIHB0bC5wdGxTdGFydCwgcHRsLnB0bEVuZCAtIHB0bC5wdGxTdGFydCk7XG5cbiAgYncudWUoMCk7IC8vIG51bV9hZGRfb2xzc1xuICBidy53KDAsIDIpOyAvLyBkZWZhdWx0X291dHB1dF9sYXllcl9pZGNcbiAgYncudygxLCAyKTsgLy8gcHRsX2lkeFsxXVswXSA9IDEgKGNlaWxfbG9nMigzKSA9IDIgYml0cylcbiAgYncudygyLCAyKTsgLy8gcHRsX2lkeFsxXVsxXSA9IDJcblxuICBidy51ZSgwKTsgLy8gdnBzX251bV9yZXBfZm9ybWF0c19taW51czFcbiAgYncudyh3aWR0aCwgMTYpO1xuICBidy53KGhlaWdodCwgMTYpO1xuICBidy5mbGFnKDEpOyAvLyBjaHJvbWFfYW5kX2JpdF9kZXB0aF92cHNfcHJlc2VudFxuICBidy53KDEsIDIpOyAvLyBjaHJvbWFfZm9ybWF0X2lkYyA9IDQ6MjowXG4gIGJ3LncoMCwgNCk7IC8vIGJpdF9kZXB0aF9sdW1hX21pbnVzOFxuICBidy53KDAsIDQpOyAvLyBiaXRfZGVwdGhfY2hyb21hX21pbnVzOFxuICBidy5mbGFnKDApOyAvLyBjb25mb3JtYW5jZV93aW5kb3dfdnBzX2ZsYWdcblxuICBidy5mbGFnKDEpOyAvLyBtYXhfb25lX2FjdGl2ZV9yZWZfbGF5ZXJcbiAgYncuZmxhZygwKTsgLy8gcG9jX2xzYl9hbGlnbmVkXG4gIGJ3LmZsYWcoMSk7IC8vIHBvY19sc2Jfbm90X3ByZXNlbnRcblxuICAvLyBEUEIgZm9yIE9MUyAxICgyIGxheWVycywgMSBzdWItbGF5ZXIpXG4gIGJ3LmZsYWcoMCk7IC8vIHN1Yl9sYXllcl9mbGFnX2luZm9fcHJlc2VudFxuICBidy51ZSgwKTsgLy8gbWF4X2RlY19waWNfYnVmZmVyaW5nIChsYXllciAwKVxuICBidy51ZSgwKTsgLy8gbWF4X2RlY19waWNfYnVmZmVyaW5nIChsYXllciAxKVxuICBidy51ZSgwKTsgLy8gbWF4X251bV9yZW9yZGVyX3BpY3NcbiAgYncudWUoMCk7IC8vIG1heF9sYXRlbmN5X2luY3JlYXNlXG5cbiAgYncudWUoMCk7IC8vIGRpcmVjdF9kZXBfdHlwZV9sZW5fbWludXMyXG4gIGJ3LmZsYWcoMCk7IC8vIGRlZmF1bHRfZGlyZWN0X2RlcGVuZGVuY3lfZmxhZ1xuICBidy51ZSgwKTsgLy8gbm9uX3Z1aV9leHRlbnNpb25fbGVuZ3RoXG4gIGJ3LmZsYWcoMCk7IC8vIHZwc192dWlfcHJlc2VudFxuICBidy5mbGFnKDApOyAvLyB2cHNfZXh0ZW5zaW9uMl9mbGFnXG59XG5cbi8qKlxuICogQnVpbGQgYSBjb21wbGV0ZSBhbHBoYSBWUFMgZnJvbSBzY3JhdGNoLCB1c2luZyB0aGUgb3JpZ2luYWwgTlZFTkMgVlBTXG4gKiBvbmx5IGFzIGEgc291cmNlIGZvciB0aGUgUFRMIChwcm9maWxlL3RpZXIvbGV2ZWwpIGJ5dGVzLlxuICogTWF0Y2hlcyB4MjY1IDQuMSBFTkFCTEVfQUxQSEEgVlBTIHN0cnVjdHVyZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkQWxwaGFWUFModnBzRGF0YTogQnVmZmVyLCB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcik6IEJ1ZmZlciB7XG4gIGNvbnN0IHB0bCA9IGV4dHJhY3RQVEwodnBzRGF0YSk7XG4gIGlmICghcHRsKSByZXR1cm4gdnBzRGF0YTtcblxuICBjb25zdCBidyA9IG5ldyBCaXRXcml0ZXIoKTtcbiAgd3JpdGVCYXNlVlBTKGJ3LCBwdGwpO1xuICB3cml0ZVZQU0V4dGVuc2lvbihidywgcHRsLCB3aWR0aCwgaGVpZ2h0KTtcblxuICBidy5iaXRzLnB1c2goMSk7IC8vIFJCU1Agc3RvcCBiaXRcbiAgYncuYWxpZ24oMCk7XG4gIHJldHVybiBhZGRFbXVsYXRpb25QcmV2ZW50aW9uKHBhY2tCaXRzKGJ3LmJpdHMpKTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMTIuXG5cbmltcG9ydCB0eXBlIHsgRnJhbWUgfSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHsgcmV3cml0ZUFscGhhUHBzLCByZXdyaXRlQWxwaGFTbGljZUhlYWRlciwgcmV3cml0ZUFscGhhU3BzIH0gZnJvbSBcIi4vYWxwaGFfZGFyd2luXCI7XG5pbXBvcnQgeyBwYWNrQml0cyB9IGZyb20gXCIuL2JpdFwiO1xuaW1wb3J0IHtcbiAgQU5ORVhfQl9TVEFSVF9DT0RFLFxuICBlbmNvZGVOYWxIZWFkZXIsXG4gIE5BTF9TRUlfUFJFRklYLFxuICBOQUxfU1BTLFxuICBOQUxfUFBTLFxuICBOQUxfVlBTLFxuICB0eXBlIE5hbFVuaXQsXG4gIHJld3JpdGVOYWxMYXllcklkLFxuICBzcGxpdE5hbFVuaXRzLFxufSBmcm9tIFwiLi9uYWxcIjtcbmltcG9ydCB0eXBlIHsgTnZlbmNIZXZjQ29uZmlnIH0gZnJvbSBcIi4vcGFyc2VyXCI7XG5pbXBvcnQgeyBidWlsZEFscGhhVlBTIH0gZnJvbSBcIi4vdnBzXCI7XG5cbi8vIEJHUkEgYWxwaGEg4oaSIFkgcGxhbmUgb2YgcGFja2VkIFlVVjQyMFAuIENhbGxlciBwcmUtZmlsbHMgVVY9MTI4LlxuLy8gVWludDMyIHBhdGg6IEJHUkEgTEUgdTMyID4+PiAyNCA9IEEgYnl0ZS5cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0QWxwaGFUb1l1djQyMHBCdWZmZXIoYmdyYUZyYW1lOiBGcmFtZSwgYnVmOiBCdWZmZXIpOiB2b2lkIHtcbiAgY29uc3Qgc3JjID0gYmdyYUZyYW1lLmRhdGE/LlswXTtcbiAgY29uc3Qgc3JjTHMgPSBiZ3JhRnJhbWUubGluZXNpemU/LlswXTtcbiAgaWYgKCFzcmMgfHwgIXNyY0xzKSB0aHJvdyBuZXcgRXJyb3IoXCJleHRyYWN0QWxwaGE6IG1pc3NpbmcgQkdSQSBkYXRhXCIpO1xuICBjb25zdCB3ID0gYmdyYUZyYW1lLndpZHRoO1xuICBjb25zdCBoID0gYmdyYUZyYW1lLmhlaWdodDtcbiAgY29uc3QgeVNpemUgPSB3ICogaDtcbiAgaWYgKHNyYy5ieXRlT2Zmc2V0ICUgNCA9PT0gMCAmJiBzcmNMcyA9PT0gdyAqIDQpIHtcbiAgICBjb25zdCBzcmMzMiA9IG5ldyBVaW50MzJBcnJheShzcmMuYnVmZmVyLCBzcmMuYnl0ZU9mZnNldCwgeVNpemUpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgeVNpemU7IGkrKykgYnVmW2ldID0gc3JjMzJbaV0hID4+PiAyNDtcbiAgfSBlbHNlIHtcbiAgICBmb3IgKGxldCB5ID0gMDsgeSA8IGg7IHkrKykge1xuICAgICAgY29uc3Qgcm93QmFzZSA9IHkgKiBzcmNMcyArIDM7XG4gICAgICBjb25zdCBkc3RCYXNlID0geSAqIHc7XG4gICAgICBmb3IgKGxldCB4ID0gMDsgeCA8IHc7IHgrKykgYnVmW2RzdEJhc2UgKyB4XSA9IHNyY1tyb3dCYXNlICsgeCAqIDRdITtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBVbmlmaWVkRXh0cmFkYXRhT3B0aW9ucyB7XG4gIGJhc2VFeHRyYWRhdGE6IEJ1ZmZlcjtcbiAgYWxwaGFFeHRyYWRhdGE6IEJ1ZmZlcjtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG59XG5cbi8vIEFwcGxlIEhFVkMgQWxwaGEgUHJvZmlsZTogYWxwaGEgU1BTIHNwc19zZXFfcGFyYW1ldGVyX3NldF9pZD0xLCBhbHBoYSBQUFMgcGljK3NlcSBpZD0xLlxuZnVuY3Rpb24gcmV3cml0ZUFscGhhUGFyYW1TZXQodHlwZTogbnVtYmVyLCBkYXRhOiBCdWZmZXIpOiBCdWZmZXIge1xuICBpZiAodHlwZSA9PT0gTkFMX1NQUykgcmV0dXJuIHJld3JpdGVBbHBoYVNwcyhkYXRhKTtcbiAgaWYgKHR5cGUgPT09IE5BTF9QUFMpIHJldHVybiByZXdyaXRlQWxwaGFQcHMoZGF0YSk7XG4gIHJldHVybiBkYXRhO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRVbmlmaWVkRXh0cmFkYXRhKG9wdHM6IFVuaWZpZWRFeHRyYWRhdGFPcHRpb25zKTogQnVmZmVyIHtcbiAgY29uc3QgeyBiYXNlRXh0cmFkYXRhLCBhbHBoYUV4dHJhZGF0YSB9ID0gb3B0cztcbiAgY29uc3QgYmFzZU5hbHMgPSBzcGxpdE5hbFVuaXRzKGJhc2VFeHRyYWRhdGEpO1xuICBjb25zdCBhbHBoYU5hbHMgPSBzcGxpdE5hbFVuaXRzKGFscGhhRXh0cmFkYXRhKTtcblxuICBjb25zdCBhbHBoYUJ5VHlwZSA9IG5ldyBNYXA8bnVtYmVyLCBOYWxVbml0W10+KCk7XG4gIGZvciAoY29uc3QgbmFsIG9mIGFscGhhTmFscykge1xuICAgIGlmIChuYWwudHlwZSA9PT0gTkFMX1ZQUykgY29udGludWU7XG4gICAgY29uc3QgYXJyID0gYWxwaGFCeVR5cGUuZ2V0KG5hbC50eXBlKSA/PyBbXTtcbiAgICBhcnIucHVzaChuYWwpO1xuICAgIGFscGhhQnlUeXBlLnNldChuYWwudHlwZSwgYXJyKTtcbiAgfVxuXG4gIGNvbnN0IGNodW5rczogQnVmZmVyW10gPSBbXTtcbiAgY29uc3QgZW1pdHRlZCA9IG5ldyBTZXQ8bnVtYmVyPigpO1xuICBmb3IgKGNvbnN0IG5hbCBvZiBiYXNlTmFscykge1xuICAgIGNvbnN0IGRhdGEgPSBuYWwudHlwZSA9PT0gTkFMX1ZQUyA/IGJ1aWxkQWxwaGFWUFMobmFsLmRhdGEsIG9wdHMud2lkdGgsIG9wdHMuaGVpZ2h0KSA6IG5hbC5kYXRhO1xuICAgIGNodW5rcy5wdXNoKEFOTkVYX0JfU1RBUlRfQ09ERSwgZGF0YSk7XG4gICAgaWYgKCFlbWl0dGVkLmhhcyhuYWwudHlwZSkpIHtcbiAgICAgIGVtaXR0ZWQuYWRkKG5hbC50eXBlKTtcbiAgICAgIGZvciAoY29uc3QgYWxwaGFOYWwgb2YgYWxwaGFCeVR5cGUuZ2V0KG5hbC50eXBlKSA/PyBbXSkge1xuICAgICAgICBjb25zdCBhRGF0YSA9IHJld3JpdGVBbHBoYVBhcmFtU2V0KG5hbC50eXBlLCBhbHBoYU5hbC5kYXRhKTtcbiAgICAgICAgY2h1bmtzLnB1c2goQU5ORVhfQl9TVEFSVF9DT0RFLCByZXdyaXRlTmFsTGF5ZXJJZChhRGF0YSwgMSkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNodW5rcy5wdXNoKGJ1aWxkQWxwaGFDaGFubmVsSW5mb1NFSSgpKTtcbiAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoY2h1bmtzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkQWxwaGFDaGFubmVsSW5mb1NFSSgpOiBCdWZmZXIge1xuICBjb25zdCBwYXlsb2FkVHlwZSA9IDE2NTtcbiAgY29uc3QgcGF5bG9hZFNpemUgPSA0O1xuICBjb25zdCBbaDAsIGgxXSA9IGVuY29kZU5hbEhlYWRlcihOQUxfU0VJX1BSRUZJWCwgMCwgMSk7XG5cbiAgY29uc3QgYml0czogbnVtYmVyW10gPSBbXTtcbiAgY29uc3Qgd3JpdGVCaXRzID0gKHZhbDogbnVtYmVyLCBuOiBudW1iZXIpID0+IHtcbiAgICBmb3IgKGxldCBpID0gbiAtIDE7IGkgPj0gMDsgaS0tKSBiaXRzLnB1c2goKHZhbCA+PiBpKSAmIDEpO1xuICB9O1xuXG4gIHdyaXRlQml0cygwLCAxKTsgLy8gYWxwaGFfY2hhbm5lbF9jYW5jZWxfZmxhZ1xuICB3cml0ZUJpdHMoMCwgMyk7IC8vIGFscGhhX2NoYW5uZWxfdXNlX2lkYyAoMCA9IHVuc3BlY2lmaWVkL3ByZW11bHRpcGxpZWQ7IG1hdGNoZXMgeDI2NSBFTkFCTEVfQUxQSEEpXG4gIHdyaXRlQml0cygwLCAzKTsgLy8gYWxwaGFfY2hhbm5lbF9iaXRfZGVwdGhfbWludXM4XG4gIHdyaXRlQml0cygwLCA5KTsgLy8gYWxwaGFfdHJhbnNwYXJlbnRfdmFsdWVcbiAgd3JpdGVCaXRzKDI1NSwgOSk7IC8vIGFscGhhX29wYXF1ZV92YWx1ZVxuICB3cml0ZUJpdHMoMCwgMSk7IC8vIGFscGhhX2NoYW5uZWxfaW5jcl9mbGFnXG4gIHdyaXRlQml0cygwLCAxKTsgLy8gYWxwaGFfY2hhbm5lbF9jbGlwX2ZsYWdcbiAgd3JpdGVCaXRzKDEsIDEpOyAvLyBieXRlIGFsaWdubWVudFxuICB3aGlsZSAoYml0cy5sZW5ndGggJSA4ICE9PSAwKSB3cml0ZUJpdHMoMCwgMSk7XG5cbiAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoW1xuICAgIEFOTkVYX0JfU1RBUlRfQ09ERSxcbiAgICBCdWZmZXIuZnJvbShbaDAsIGgxXSksXG4gICAgQnVmZmVyLmZyb20oW3BheWxvYWRUeXBlLCBwYXlsb2FkU2l6ZV0pLFxuICAgIHBhY2tCaXRzKGJpdHMpLFxuICAgIEJ1ZmZlci5mcm9tKFsweDgwXSksXG4gIF0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW50ZXJsZWF2ZUFjY2Vzc1VuaXRzKGJhc2VOYWxzOiBOYWxVbml0W10sIGFscGhhTmFsczogTmFsVW5pdFtdLCBjZmc6IE52ZW5jSGV2Y0NvbmZpZyk6IEJ1ZmZlciB7XG4gIGNvbnN0IGNodW5rczogQnVmZmVyW10gPSBbXTtcbiAgZm9yIChjb25zdCBuYWwgb2YgYmFzZU5hbHMpIHtcbiAgICBjaHVua3MucHVzaChBTk5FWF9CX1NUQVJUX0NPREUsIG5hbC5kYXRhKTtcbiAgfVxuICBmb3IgKGNvbnN0IG5hbCBvZiBhbHBoYU5hbHMpIHtcbiAgICBpZiAobmFsLnR5cGUgPCBOQUxfVlBTKSB7XG4gICAgICBjb25zdCBkYXRhID0gcmV3cml0ZUFscGhhU2xpY2VIZWFkZXIobmFsLmRhdGEsIG5hbC50eXBlLCBjZmcpO1xuICAgICAgY2h1bmtzLnB1c2goQU5ORVhfQl9TVEFSVF9DT0RFLCByZXdyaXRlTmFsTGF5ZXJJZChkYXRhLCAxKSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBCdWZmZXIuY29uY2F0KGNodW5rcyk7XG59XG4iLCIvLyBQYXJzZSBOVkVOQyBTUFMvUFBTIGV4dHJhZGF0YSBhdCBlbmNvZGVyIGluaXQgdG8gZGVyaXZlIGZsYWdzIHRoZSBzbGljZSBoZWFkZXIgcGFyc2VyIGRlcGVuZHMgb24uXG4vLyBEZWZ1c2VzIGZyYWdpbGUgaGFyZGNvZGVkIGFzc3VtcHRpb25zOiBpZiBOVkVOQyBkZWZhdWx0cyBzaGlmdCwgdGhyb3dzIHdpdGggYWN0aW9uYWJsZSBlcnJvci5cblxuaW1wb3J0IHsgQml0UmVhZGVyIH0gZnJvbSBcIi4vYml0XCI7XG5pbXBvcnQgeyBOQUxfUFBTLCBOQUxfU1BTLCByZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uLCBzcGxpdE5hbFVuaXRzIH0gZnJvbSBcIi4vbmFsXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTnZlbmNIZXZjQ29uZmlnIHtcbiAgbG9nMk1heFBvY0xzYjogbnVtYmVyO1xuICBudW1TaG9ydFRlcm1SZWZQaWNTZXRzOiBudW1iZXI7XG4gIG51bURlbHRhUG9jc1NldDA6IG51bWJlcjtcbiAgbG9uZ1Rlcm1SZWZQaWNzUHJlc2VudDogYm9vbGVhbjtcbiAgc3BzVGVtcG9yYWxNdnBFbmFibGVkOiBib29sZWFuO1xuICBzYW9FbmFibGVkOiBib29sZWFuO1xuICBjYWJhY0luaXRQcmVzZW50OiBib29sZWFuO1xuICBwcHNIYXNMb29wRmlsdGVyQWNyb3NzU2xpY2VzRmxhZzogYm9vbGVhbjtcbn1cblxuZnVuY3Rpb24gZmFpbChmaWVsZDogc3RyaW5nLCBnb3Q6IHVua25vd24sIGV4cGVjdGVkOiBzdHJpbmcpOiBuZXZlciB7XG4gIHRocm93IG5ldyBFcnJvcihgaGV2Y19hbHBoYTogTlZFTkMgU1BTL1BQUyB1bnN1cHBvcnRlZDogJHtmaWVsZH09JHtnb3R9LCBleHBlY3RlZCAke2V4cGVjdGVkfWApO1xufVxuXG5mdW5jdGlvbiBza2lwUHRsKGJyOiBCaXRSZWFkZXIsIG1heFN1YkxheWVyczogbnVtYmVyKTogdm9pZCB7XG4gIGJyLnJlYWQoMiArIDEgKyA1KTsgLy8gcHJvZmlsZV9zcGFjZSwgdGllciwgcHJvZmlsZV9pZGNcbiAgYnIucmVhZCgzMik7IC8vIHByb2ZpbGVfY29tcGF0aWJpbGl0eV9mbGFnWzAuLjMxXVxuICBici5yZWFkKDQ4KTsgLy8gNCBzb3VyY2UvcGFja2VkIGZsYWdzICsgNDMgY29uc3RyYWludC9yZXNlcnZlZCArIDEgaW5ibGRcbiAgYnIucmVhZCg4KTsgLy8gbGV2ZWxfaWRjXG4gIGNvbnN0IHN1YlByb2ZpbGVQcmVzZW50OiBudW1iZXJbXSA9IFtdO1xuICBjb25zdCBzdWJMZXZlbFByZXNlbnQ6IG51bWJlcltdID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbWF4U3ViTGF5ZXJzOyBpKyspIHtcbiAgICBzdWJQcm9maWxlUHJlc2VudC5wdXNoKGJyLnJlYWQoMSkpO1xuICAgIHN1YkxldmVsUHJlc2VudC5wdXNoKGJyLnJlYWQoMSkpO1xuICB9XG4gIGlmIChtYXhTdWJMYXllcnMgPiAwKSBmb3IgKGxldCBpID0gbWF4U3ViTGF5ZXJzOyBpIDwgODsgaSsrKSBici5yZWFkKDIpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IG1heFN1YkxheWVyczsgaSsrKSB7XG4gICAgaWYgKHN1YlByb2ZpbGVQcmVzZW50W2ldKSBici5yZWFkKDggKyAzMiArIDQ4KTtcbiAgICBpZiAoc3ViTGV2ZWxQcmVzZW50W2ldKSBici5yZWFkKDgpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlU3BzKHNwc1Jic3A6IEJ1ZmZlcik6IHtcbiAgbG9nMk1heFBvY0xzYjogbnVtYmVyO1xuICBzYW9FbmFibGVkOiBib29sZWFuO1xuICBudW1TaG9ydFRlcm1SZWZQaWNTZXRzOiBudW1iZXI7XG4gIG51bURlbHRhUG9jc1NldDA6IG51bWJlcjtcbiAgbG9uZ1Rlcm1SZWZQaWNzUHJlc2VudDogYm9vbGVhbjtcbiAgc3BzVGVtcG9yYWxNdnBFbmFibGVkOiBib29sZWFuO1xufSB7XG4gIGNvbnN0IGJyID0gbmV3IEJpdFJlYWRlcihzcHNSYnNwKTtcbiAgYnIucmVhZCgxNik7IC8vIE5BTCBoZWFkZXJcbiAgYnIucmVhZCg0KTsgLy8gc3BzX3ZpZGVvX3BhcmFtZXRlcl9zZXRfaWRcbiAgY29uc3QgbWF4U3ViTGF5ZXJzID0gYnIucmVhZCgzKTtcbiAgLy8gYWxwaGFfZGFyd2luLnJld3JpdGVBbHBoYVNwcyArIHZwcy5leHRyYWN0UFRMIGhhcmRjb2RlIDk2LWJpdCBQVEwg4oCUIG9ubHkgdmFsaWQgd2hlbiBzdWJfbGF5ZXJzPTAuXG4gIGlmIChtYXhTdWJMYXllcnMgIT09IDApIGZhaWwoXCJzcHNfbWF4X3N1Yl9sYXllcnNfbWludXMxXCIsIG1heFN1YkxheWVycywgXCIwXCIpO1xuICBici5yZWFkKDEpOyAvLyBzcHNfdGVtcG9yYWxfaWRfbmVzdGluZ19mbGFnXG4gIHNraXBQdGwoYnIsIG1heFN1YkxheWVycyk7XG4gIGJyLnJlYWRVZSgpOyAvLyBzcHNfc2VxX3BhcmFtZXRlcl9zZXRfaWRcbiAgY29uc3QgY2hyb21hRm9ybWF0ID0gYnIucmVhZFVlKCk7XG4gIGlmIChjaHJvbWFGb3JtYXQgPT09IDMpIGZhaWwoXCJjaHJvbWFfZm9ybWF0X2lkY1wiLCBjaHJvbWFGb3JtYXQsIFwi4omgM1wiKTtcbiAgYnIucmVhZFVlKCk7IC8vIHBpY193aWR0aF9pbl9sdW1hX3NhbXBsZXNcbiAgYnIucmVhZFVlKCk7IC8vIHBpY19oZWlnaHRfaW5fbHVtYV9zYW1wbGVzXG4gIGlmIChici5yZWFkKDEpKSB7XG4gICAgYnIucmVhZFVlKCk7IGJyLnJlYWRVZSgpOyBici5yZWFkVWUoKTsgYnIucmVhZFVlKCk7XG4gIH1cbiAgYnIucmVhZFVlKCk7IC8vIGJpdF9kZXB0aF9sdW1hX21pbnVzOFxuICBici5yZWFkVWUoKTsgLy8gYml0X2RlcHRoX2Nocm9tYV9taW51czhcbiAgY29uc3QgbG9nMk1heFBvY0xzYiA9IGJyLnJlYWRVZSgpICsgNDtcbiAgY29uc3Qgc3ViT3JkZXJJbmZvID0gYnIucmVhZCgxKTtcbiAgY29uc3Qgb3JkZXJDb3VudCA9IHN1Yk9yZGVySW5mbyA/IG1heFN1YkxheWVycyArIDEgOiAxO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IG9yZGVyQ291bnQ7IGkrKykge1xuICAgIGJyLnJlYWRVZSgpOyBici5yZWFkVWUoKTsgYnIucmVhZFVlKCk7XG4gIH1cbiAgYnIucmVhZFVlKCk7IGJyLnJlYWRVZSgpOyBici5yZWFkVWUoKTsgYnIucmVhZFVlKCk7XG4gIGJyLnJlYWRVZSgpOyBici5yZWFkVWUoKTtcbiAgaWYgKGJyLnJlYWQoMSkpIGZhaWwoXCJzY2FsaW5nX2xpc3RfZW5hYmxlZF9mbGFnXCIsIDEsIFwiMFwiKTtcbiAgYnIucmVhZCgxKTsgLy8gYW1wX2VuYWJsZWRfZmxhZ1xuICBjb25zdCBzYW9FbmFibGVkID0gYnIucmVhZCgxKSA9PT0gMTtcbiAgaWYgKGJyLnJlYWQoMSkpIGZhaWwoXCJwY21fZW5hYmxlZF9mbGFnXCIsIDEsIFwiMFwiKTtcbiAgY29uc3QgbnVtU3RScHMgPSBici5yZWFkVWUoKTtcbiAgaWYgKG51bVN0UnBzID4gMSkgZmFpbChcIm51bV9zaG9ydF90ZXJtX3JlZl9waWNfc2V0c1wiLCBudW1TdFJwcywgXCLiiaQxXCIpO1xuICBsZXQgbnVtRGVsdGFQb2NzU2V0MCA9IDA7XG4gIGlmIChudW1TdFJwcyA9PT0gMSkge1xuICAgIGNvbnN0IG51bU5lZyA9IGJyLnJlYWRVZSgpO1xuICAgIGNvbnN0IG51bVBvcyA9IGJyLnJlYWRVZSgpO1xuICAgIG51bURlbHRhUG9jc1NldDAgPSBudW1OZWcgKyBudW1Qb3M7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1OZWc7IGkrKykgeyBici5yZWFkVWUoKTsgYnIucmVhZCgxKTsgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtUG9zOyBpKyspIHsgYnIucmVhZFVlKCk7IGJyLnJlYWQoMSk7IH1cbiAgfVxuICBjb25zdCBsb25nVGVybVJlZlBpY3NQcmVzZW50ID0gYnIucmVhZCgxKSA9PT0gMTtcbiAgaWYgKGxvbmdUZXJtUmVmUGljc1ByZXNlbnQpIGZhaWwoXCJsb25nX3Rlcm1fcmVmX3BpY3NfcHJlc2VudF9mbGFnXCIsIDEsIFwiMFwiKTtcbiAgY29uc3Qgc3BzVGVtcG9yYWxNdnBFbmFibGVkID0gYnIucmVhZCgxKSA9PT0gMTtcbiAgcmV0dXJuIHsgbG9nMk1heFBvY0xzYiwgc2FvRW5hYmxlZCwgbnVtU2hvcnRUZXJtUmVmUGljU2V0czogbnVtU3RScHMsIG51bURlbHRhUG9jc1NldDAsIGxvbmdUZXJtUmVmUGljc1ByZXNlbnQsIHNwc1RlbXBvcmFsTXZwRW5hYmxlZCB9O1xufVxuXG5mdW5jdGlvbiBwYXJzZVBwcyhwcHNSYnNwOiBCdWZmZXIpOiB7IGNhYmFjSW5pdFByZXNlbnQ6IGJvb2xlYW47IHBwc0hhc0xvb3BGaWx0ZXJBY3Jvc3NTbGljZXNGbGFnOiBib29sZWFuIH0ge1xuICBjb25zdCBiciA9IG5ldyBCaXRSZWFkZXIocHBzUmJzcCk7XG4gIGJyLnJlYWQoMTYpOyAvLyBOQUwgaGVhZGVyXG4gIGJyLnJlYWRVZSgpOyAvLyBwcHNfcGljX3BhcmFtZXRlcl9zZXRfaWRcbiAgYnIucmVhZFVlKCk7IC8vIHBwc19zZXFfcGFyYW1ldGVyX3NldF9pZFxuICBici5yZWFkKDEpOyAvLyBkZXBlbmRlbnRfc2xpY2Vfc2VnbWVudHNfZW5hYmxlZF9mbGFnXG4gIGJyLnJlYWQoMSk7IC8vIG91dHB1dF9mbGFnX3ByZXNlbnRfZmxhZ1xuICBjb25zdCBudW1FeHRyYVNsaWNlSGVhZGVyQml0cyA9IGJyLnJlYWQoMyk7XG4gIGlmIChudW1FeHRyYVNsaWNlSGVhZGVyQml0cyAhPT0gMCkgZmFpbChcIm51bV9leHRyYV9zbGljZV9oZWFkZXJfYml0c1wiLCBudW1FeHRyYVNsaWNlSGVhZGVyQml0cywgXCIwXCIpO1xuICBici5yZWFkKDEpOyAvLyBzaWduX2RhdGFfaGlkaW5nX2VuYWJsZWRfZmxhZ1xuICBjb25zdCBjYWJhY0luaXRQcmVzZW50ID0gYnIucmVhZCgxKSA9PT0gMTtcbiAgYnIucmVhZFVlKCk7IC8vIG51bV9yZWZfaWR4X2wwX2RlZmF1bHRfYWN0aXZlX21pbnVzMVxuICBici5yZWFkVWUoKTsgLy8gbnVtX3JlZl9pZHhfbDFfZGVmYXVsdF9hY3RpdmVfbWludXMxXG4gIGJyLnJlYWRVZSgpOyAvLyBpbml0X3FwX21pbnVzMjYgKHNlLCBidXQgdWUgcGFyc2VyIGZpbmUgdG8gYWR2YW5jZSlcbiAgYnIucmVhZCgxKTsgLy8gY29uc3RyYWluZWRfaW50cmFfcHJlZF9mbGFnXG4gIGJyLnJlYWQoMSk7IC8vIHRyYW5zZm9ybV9za2lwX2VuYWJsZWRfZmxhZ1xuICBpZiAoYnIucmVhZCgxKSkgYnIucmVhZFVlKCk7IC8vIGN1X3FwX2RlbHRhX2VuYWJsZWQg4oaSIGRpZmZfY3VfcXBfZGVsdGFfZGVwdGhcbiAgYnIucmVhZFVlKCk7IC8vIHBwc19jYl9xcF9vZmZzZXRcbiAgYnIucmVhZFVlKCk7IC8vIHBwc19jcl9xcF9vZmZzZXRcbiAgYnIucmVhZCgxKTsgLy8gcHBzX3NsaWNlX2Nocm9tYV9xcF9vZmZzZXRzX3ByZXNlbnRfZmxhZ1xuICBici5yZWFkKDEpOyAvLyB3ZWlnaHRlZF9wcmVkX2ZsYWdcbiAgYnIucmVhZCgxKTsgLy8gd2VpZ2h0ZWRfYmlwcmVkX2ZsYWdcbiAgYnIucmVhZCgxKTsgLy8gdHJhbnNxdWFudF9ieXBhc3NfZW5hYmxlZF9mbGFnXG4gIGlmIChici5yZWFkKDEpKSBmYWlsKFwidGlsZXNfZW5hYmxlZF9mbGFnXCIsIDEsIFwiMFwiKTtcbiAgYnIucmVhZCgxKTsgLy8gZW50cm9weV9jb2Rpbmdfc3luY19lbmFibGVkX2ZsYWdcbiAgY29uc3QgcHBzTG9vcEZpbHRlckFjcm9zc1NsaWNlc0VuYWJsZWQgPSBici5yZWFkKDEpID09PSAxO1xuICBjb25zdCBkZWJsb2NraW5nQ29udHJvbFByZXNlbnQgPSBici5yZWFkKDEpO1xuICBsZXQgc2xpY2VEZWJsb2NraW5nRGlzYWJsZWRPdmVycmlkZSA9IGZhbHNlO1xuICBpZiAoZGVibG9ja2luZ0NvbnRyb2xQcmVzZW50KSB7XG4gICAgYnIucmVhZCgxKTsgLy8gZGVibG9ja2luZ19maWx0ZXJfb3ZlcnJpZGVfZW5hYmxlZF9mbGFnXG4gICAgc2xpY2VEZWJsb2NraW5nRGlzYWJsZWRPdmVycmlkZSA9IGJyLnJlYWQoMSkgPT09IDE7IC8vIHBwc19kZWJsb2NraW5nX2ZpbHRlcl9kaXNhYmxlZF9mbGFnXG4gICAgaWYgKCFzbGljZURlYmxvY2tpbmdEaXNhYmxlZE92ZXJyaWRlKSB7XG4gICAgICBici5yZWFkVWUoKTsgYnIucmVhZFVlKCk7IC8vIGJldGEvdGMgb2Zmc2V0cyAoc2UgdmlhIHVlIGFkdmFuY2UpXG4gICAgfVxuICB9XG4gIC8vIHNsaWNlX2xvb3BfZmlsdGVyX2Fjcm9zc19zbGljZXNfZW5hYmxlZF9mbGFnIGluIHNsaWNlIGhlYWRlciBpcyBwcmVzZW50IGlmZlxuICAvLyBwcHNfbG9vcF9maWx0ZXJfYWNyb3NzX3NsaWNlc19lbmFibGVkX2ZsYWcgJiYgIXNsaWNlX2RlYmxvY2tpbmdfZGlzYWJsZWQuXG4gIGNvbnN0IHBwc0hhc0xvb3BGaWx0ZXJBY3Jvc3NTbGljZXNGbGFnID0gcHBzTG9vcEZpbHRlckFjcm9zc1NsaWNlc0VuYWJsZWQgJiYgIXNsaWNlRGVibG9ja2luZ0Rpc2FibGVkT3ZlcnJpZGU7XG4gIHJldHVybiB7IGNhYmFjSW5pdFByZXNlbnQsIHBwc0hhc0xvb3BGaWx0ZXJBY3Jvc3NTbGljZXNGbGFnIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZU52ZW5jSGV2Y0NvbmZpZyhleHRyYWRhdGE6IEJ1ZmZlcik6IE52ZW5jSGV2Y0NvbmZpZyB7XG4gIGNvbnN0IG5hbHMgPSBzcGxpdE5hbFVuaXRzKGV4dHJhZGF0YSk7XG4gIGNvbnN0IHNwcyA9IG5hbHMuZmluZCgobikgPT4gbi50eXBlID09PSBOQUxfU1BTKTtcbiAgY29uc3QgcHBzID0gbmFscy5maW5kKChuKSA9PiBuLnR5cGUgPT09IE5BTF9QUFMpO1xuICBpZiAoIXNwcykgdGhyb3cgbmV3IEVycm9yKFwiaGV2Y19hbHBoYTogU1BTIG1pc3NpbmcgaW4gTlZFTkMgZXh0cmFkYXRhXCIpO1xuICBpZiAoIXBwcykgdGhyb3cgbmV3IEVycm9yKFwiaGV2Y19hbHBoYTogUFBTIG1pc3NpbmcgaW4gTlZFTkMgZXh0cmFkYXRhXCIpO1xuICBjb25zdCBzID0gcGFyc2VTcHMocmVtb3ZlRW11bGF0aW9uUHJldmVudGlvbihzcHMuZGF0YSkpO1xuICBjb25zdCBwID0gcGFyc2VQcHMocmVtb3ZlRW11bGF0aW9uUHJldmVudGlvbihwcHMuZGF0YSkpO1xuICByZXR1cm4geyAuLi5zLCAuLi5wIH07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzEyLlxuXG5pbXBvcnQgeyBDb2RlYywgdHlwZSBDb2RlY0NvbnRleHQsIEZGbXBlZ0Vycm9yLCBGcmFtZSwgdHlwZSBQYWNrZXQsIHR5cGUgU3RyZWFtIH0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB7IEFWX1BJWF9GTVRfQkdSQSwgQVZfUElYX0ZNVF9ZVVY0MjBQLCBGRl9FTkNPREVSX0hFVkNfTlZFTkMgfSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcbmltcG9ydCB7IG1ha2VGcmFtZSwgbWFrZVBhY2tldCwgb3BlblZpZGVvQ3R4IH0gZnJvbSBcIi4uL21pc2NcIjtcbmltcG9ydCB0eXBlIHsgRm9ybWF0TXV4ZXIgfSBmcm9tIFwiLi4vbXV4ZXJcIjtcbmltcG9ydCB0eXBlIHsgSHdWaWRlb0VuY29kZXJPcHRpb25zIH0gZnJvbSBcIi4uL3ZpZGVvdG9vbGJveFwiO1xuaW1wb3J0IHsgYnVpbGRVbmlmaWVkRXh0cmFkYXRhLCBleHRyYWN0QWxwaGFUb1l1djQyMHBCdWZmZXIsIGludGVybGVhdmVBY2Nlc3NVbml0cyB9IGZyb20gXCIuL2FscGhhXCI7XG5pbXBvcnQgeyBwYXRjaEhldmNBbHBoYVB0bCB9IGZyb20gXCIuL2FscGhhX2RhcndpblwiO1xuaW1wb3J0IHsgc3BsaXROYWxVbml0cyB9IGZyb20gXCIuL25hbFwiO1xuaW1wb3J0IHsgdHlwZSBOdmVuY0hldmNDb25maWcsIHBhcnNlTnZlbmNIZXZjQ29uZmlnIH0gZnJvbSBcIi4vcGFyc2VyXCI7XG5cbmludGVyZmFjZSBOdmVuY1N0YXRlIHtcbiAgYmFzZUN0eDogQ29kZWNDb250ZXh0O1xuICBhbHBoYUN0eDogQ29kZWNDb250ZXh0O1xuICBiYXNlUGt0OiBQYWNrZXQ7XG4gIGFscGhhUGt0OiBQYWNrZXQ7XG4gIHN0cmVhbTogU3RyZWFtO1xuICBhbHBoYVN3RnJhbWU6IEZyYW1lO1xuICBhbHBoYUJ1ZjogQnVmZmVyO1xuICBoZXZjQ2ZnOiBOdmVuY0hldmNDb25maWc7XG59XG5cbmV4cG9ydCBjbGFzcyBOdmVuY0R1YWxMYXllckVuY29kZXIgaW1wbGVtZW50cyBEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSBfczogTnZlbmNTdGF0ZTtcbiAgcHJpdmF0ZSBfcHRzID0gMG47XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihzOiBOdmVuY1N0YXRlKSB7XG4gICAgdGhpcy5fcyA9IHM7XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgY3JlYXRlKG9wdHM6IEh3VmlkZW9FbmNvZGVyT3B0aW9ucyk6IFByb21pc2U8TnZlbmNEdWFsTGF5ZXJFbmNvZGVyPiB7XG4gICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0LCBmcHMsIGJpdHJhdGUsIG11eGVyIH0gPSBvcHRzO1xuXG4gICAgY29uc3QgY29kZWMgPSBDb2RlYy5maW5kRW5jb2RlckJ5TmFtZShGRl9FTkNPREVSX0hFVkNfTlZFTkMpO1xuICAgIGlmICghY29kZWMpIHRocm93IG5ldyBFcnJvcihcImhldmNfbnZlbmMgZW5jb2RlciBub3QgZm91bmRcIik7XG5cbiAgICAvLyB0aWVyPW1haW4gbWF0Y2hlcyBBcHBsZSBWaWRlb1Rvb2xib3g7IG1hY09TIENocm9tZSByZXF1aXJlcyBNYWluIHRpZXIgZm9yIEhFVkMgYWxwaGEgZGVjb2RlLlxuICAgIGNvbnN0IG52ZW5jT3B0cyA9IHsgcHJlc2V0OiBcInA0XCIsIGJmOiBcIjBcIiwgdGllcjogXCJtYWluXCIgfTtcbiAgICBjb25zdCBjb21tb24gPSB7IGNvZGVjLCB3aWR0aCwgaGVpZ2h0LCBmcHMsIGJpdHJhdGUsIG9wdGlvbnM6IG52ZW5jT3B0cyB9O1xuICAgIC8vIEJHUkEgZGlyZWN0IOKAlCBOVkVOQyBjb252ZXJ0cyBpbnRlcm5hbGx5LCBubyBDUFUgU1dTLCBubyBod0ZyYW1lc0N0eCBuZWVkZWQuXG4gICAgY29uc3QgYmFzZUN0eCA9IGF3YWl0IG9wZW5WaWRlb0N0eCh7IC4uLmNvbW1vbiwgcGl4ZWxGb3JtYXQ6IEFWX1BJWF9GTVRfQkdSQSB9LCBcIm52ZW5jLmJhc2Uub3BlbjJcIik7XG4gICAgY29uc3QgYWxwaGFDdHggPSBhd2FpdCBvcGVuVmlkZW9DdHgoeyAuLi5jb21tb24sIHBpeGVsRm9ybWF0OiBBVl9QSVhfRk1UX1lVVjQyMFAgfSwgXCJudmVuYy5hbHBoYS5vcGVuMlwiKTtcblxuICAgIGlmICghYmFzZUN0eC5leHRyYURhdGEgfHwgIWFscGhhQ3R4LmV4dHJhRGF0YSkgdGhyb3cgbmV3IEVycm9yKFwibnZlbmM6IGNvZGVjIGV4dHJhZGF0YSBtaXNzaW5nXCIpO1xuICAgIGNvbnN0IGhldmNDZmcgPSBwYXJzZU52ZW5jSGV2Y0NvbmZpZyhiYXNlQ3R4LmV4dHJhRGF0YSk7XG5cbiAgICBjb25zdCBzdHJlYW0gPSBtdXhlci5hZGRTdHJlYW0oYmFzZUN0eCwgXCJodmMxXCIpO1xuICAgIGNvbnN0IHVuaWZpZWQgPSBidWlsZFVuaWZpZWRFeHRyYWRhdGEoe1xuICAgICAgYmFzZUV4dHJhZGF0YTogYmFzZUN0eC5leHRyYURhdGEsXG4gICAgICBhbHBoYUV4dHJhZGF0YTogYWxwaGFDdHguZXh0cmFEYXRhLFxuICAgICAgd2lkdGgsXG4gICAgICBoZWlnaHQsXG4gICAgfSk7XG4gICAgLy8gQXBwbGUtVlRCIGNvbXBhdDogcmV3cml0ZSBWUFMrU1BTIFBUTCBiaXRzIHRvIG1hdGNoIHgyNjUvVlRCIG91dHB1dCAodGllcj1NYWluLCBjb21wYXRbMl09MSkuXG4gICAgc3RyZWFtLmNvZGVjcGFyLmV4dHJhZGF0YSA9IHBhdGNoSGV2Y0FscGhhUHRsKHVuaWZpZWQpO1xuXG4gICAgY29uc3QgeVNpemUgPSB3aWR0aCAqIGhlaWdodDtcbiAgICBjb25zdCB1dlNpemUgPSAod2lkdGggPj4gMSkgKiAoaGVpZ2h0ID4+IDEpO1xuICAgIGNvbnN0IGFscGhhQnVmID0gQnVmZmVyLmFsbG9jKHlTaXplICsgdXZTaXplICogMik7XG4gICAgYWxwaGFCdWYuZmlsbCgxMjgsIHlTaXplKTtcblxuICAgIHJldHVybiBuZXcgTnZlbmNEdWFsTGF5ZXJFbmNvZGVyKHtcbiAgICAgIGJhc2VDdHgsXG4gICAgICBhbHBoYUN0eCxcbiAgICAgIGJhc2VQa3Q6IG1ha2VQYWNrZXQoKSxcbiAgICAgIGFscGhhUGt0OiBtYWtlUGFja2V0KCksXG4gICAgICBzdHJlYW0sXG4gICAgICBhbHBoYVN3RnJhbWU6IG1ha2VGcmFtZSh3aWR0aCwgaGVpZ2h0LCBBVl9QSVhfRk1UX1lVVjQyMFApLFxuICAgICAgYWxwaGFCdWYsXG4gICAgICBoZXZjQ2ZnLFxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZW5jb2RlKGJncmFGcmFtZTogRnJhbWUsIG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgYmFzZUN0eCwgYWxwaGFDdHgsIGFscGhhU3dGcmFtZSwgYWxwaGFCdWYgfSA9IHRoaXMuX3M7XG4gICAgY29uc3QgcHRzID0gdGhpcy5fcHRzKys7XG5cbiAgICBiZ3JhRnJhbWUucHRzID0gcHRzO1xuICAgIGJncmFGcmFtZS5kdXJhdGlvbiA9IDFuO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCBiYXNlQ3R4LnNlbmRGcmFtZShiZ3JhRnJhbWUpLCBcImJhc2Uuc2VuZEZyYW1lXCIpO1xuXG4gICAgLy8gRWxlY3Ryb246IGZyYW1lLmRhdGFbXSBpcyBhIGNvcHksIHdyaXRlcyBkaXNjYXJkZWQuIGZyb21CdWZmZXIgZ29lcyBuYXRpdmUuXG4gICAgZXh0cmFjdEFscGhhVG9ZdXY0MjBwQnVmZmVyKGJncmFGcmFtZSwgYWxwaGFCdWYpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhbHBoYVN3RnJhbWUubWFrZVdyaXRhYmxlKCksIFwiYWxwaGFTdy5tYWtlV3JpdGFibGVcIik7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGFscGhhU3dGcmFtZS5mcm9tQnVmZmVyKGFscGhhQnVmKSwgXCJhbHBoYVN3LmZyb21CdWZmZXJcIik7XG4gICAgYWxwaGFTd0ZyYW1lLnB0cyA9IHB0cztcbiAgICBhbHBoYVN3RnJhbWUuZHVyYXRpb24gPSAxbjtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgYWxwaGFDdHguc2VuZEZyYW1lKGFscGhhU3dGcmFtZSksIFwiYWxwaGEuc2VuZEZyYW1lXCIpO1xuXG4gICAgYXdhaXQgdGhpcy5kcmFpbkludGVybGVhdmVkKG11eGVyKTtcbiAgfVxuXG4gIGFzeW5jIGZsdXNoKG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuX3MuYmFzZUN0eC5zZW5kRnJhbWUobnVsbCk7XG4gICAgYXdhaXQgdGhpcy5fcy5hbHBoYUN0eC5zZW5kRnJhbWUobnVsbCk7XG4gICAgYXdhaXQgdGhpcy5kcmFpbkludGVybGVhdmVkKG11eGVyKTtcbiAgfVxuXG4gIFtTeW1ib2wuZGlzcG9zZV0oKTogdm9pZCB7XG4gICAgY29uc3QgeyBiYXNlUGt0LCBhbHBoYVBrdCwgYmFzZUN0eCwgYWxwaGFDdHgsIGFscGhhU3dGcmFtZSB9ID0gdGhpcy5fcztcbiAgICBiYXNlUGt0LmZyZWUoKTtcbiAgICBhbHBoYVBrdC5mcmVlKCk7XG4gICAgYWxwaGFTd0ZyYW1lLmZyZWUoKTtcbiAgICAvLyBOVklESUEgZHJpdmVyIDUyMC41Ni4wNisgVUFGIGluIGxpYm52Y3V2aWQgd2hlbiBOVkVOQyBzZXNzaW9ucyBmcmVlZCBpbiBjcmVhdGlvbiBvcmRlci5cbiAgICAvLyBMSUZPIGRlc3Ryb3kgYXZvaWRzIHRoZSBzZWdmYXVsdC4gUGVyIE5WSURJQSBmb3J1bSAvdC8yNjk5NzQuXG4gICAgYWxwaGFDdHguZnJlZUNvbnRleHQoKTtcbiAgICBiYXNlQ3R4LmZyZWVDb250ZXh0KCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGRyYWluSW50ZXJsZWF2ZWQobXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyBiYXNlQ3R4LCBhbHBoYUN0eCwgYmFzZVBrdCwgYWxwaGFQa3QsIHN0cmVhbSB9ID0gdGhpcy5fcztcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgY29uc3QgYmFzZVIgPSBhd2FpdCBiYXNlQ3R4LnJlY2VpdmVQYWNrZXQoYmFzZVBrdCk7XG4gICAgICBjb25zdCBhbHBoYVIgPSBhd2FpdCBhbHBoYUN0eC5yZWNlaXZlUGFja2V0KGFscGhhUGt0KTtcbiAgICAgIGNvbnN0IGJhc2VSZWFkeSA9IGJhc2VSID49IDA7XG4gICAgICBjb25zdCBhbHBoYVJlYWR5ID0gYWxwaGFSID49IDA7XG4gICAgICBpZiAoIWJhc2VSZWFkeSAmJiAhYWxwaGFSZWFkeSkgYnJlYWs7XG4gICAgICAvLyBiZj0wIOKGkiBib3RoIHN0cmVhbXMgZW1pdCBpbiBsb2Nrc3RlcC5cbiAgICAgIGlmIChiYXNlUmVhZHkgIT09IGFscGhhUmVhZHkpIHRocm93IG5ldyBFcnJvcihgTlZFTkMgZGVzeW5jOiBiYXNlPSR7YmFzZVJlYWR5fSwgYWxwaGE9JHthbHBoYVJlYWR5fWApO1xuXG4gICAgICAvLyBBbHBoYSBTRUkgbGl2ZXMgb25seSBpbiBleHRyYWRhdGEgKG1hdGNoZXMgeDI2NSBFTkFCTEVfQUxQSEEpOyBkdXBsaWNhdGUgaW4tYmFuZCBTRUkgY29uZnVzZXMgVlRCLlxuICAgICAgLy8gUGF0Y2ggaW4tYmFuZCBWUFMvU1BTIFBUTCBiaXRzIGZvciBBcHBsZS1WVEIgY29tcGF0IChlbmNvZGVyIHJlcGVhdHMgaGVhZGVycyBwZXIgSURSKS5cbiAgICAgIGNvbnN0IGludGVybGVhdmVkID0gaW50ZXJsZWF2ZUFjY2Vzc1VuaXRzKHNwbGl0TmFsVW5pdHMoYmFzZVBrdC5kYXRhISksIHNwbGl0TmFsVW5pdHMoYWxwaGFQa3QuZGF0YSEpLCB0aGlzLl9zLmhldmNDZmcpO1xuICAgICAgY29uc3QgY2h1bmtzID0gW3BhdGNoSGV2Y0FscGhhUHRsKGludGVybGVhdmVkKV07XG5cbiAgICAgIC8vIGJhc2VQa3QuZGF0YSBzZXR0ZXIgY2xlYXJzIHB0cy9kdHMvZHVyYXRpb24vZmxhZ3MuXG4gICAgICAvLyBGbGFncyBjYXJyeSBBVl9QS1RfRkxBR19LRVkg4oCUIHdpdGhvdXQgaXQgbW92IG11eGVyIG9taXRzIHN0c3MsIGJyZWFrcyBRdWlja0xvb2sgdGh1bWJuYWlsICsgc2Vlay5cbiAgICAgIGNvbnN0IHB0cyA9IGJhc2VQa3QucHRzO1xuICAgICAgY29uc3QgZHRzID0gYmFzZVBrdC5kdHM7XG4gICAgICBjb25zdCBkdXJhdGlvbiA9IGJhc2VQa3QuZHVyYXRpb247XG4gICAgICBjb25zdCBmbGFncyA9IGJhc2VQa3QuZmxhZ3M7XG4gICAgICBiYXNlUGt0LmRhdGEgPSBCdWZmZXIuY29uY2F0KGNodW5rcyk7XG4gICAgICBiYXNlUGt0LnB0cyA9IHB0cztcbiAgICAgIGJhc2VQa3QuZHRzID0gZHRzO1xuICAgICAgYmFzZVBrdC5kdXJhdGlvbiA9IGR1cmF0aW9uID09PSAwbiA/IDFuIDogZHVyYXRpb247XG4gICAgICBiYXNlUGt0LmZsYWdzID0gZmxhZ3M7XG4gICAgICBiYXNlUGt0LnN0cmVhbUluZGV4ID0gc3RyZWFtLmluZGV4O1xuICAgICAgYmFzZVBrdC5yZXNjYWxlVHMoYmFzZUN0eC50aW1lQmFzZSwgc3RyZWFtLnRpbWVCYXNlKTtcbiAgICAgIGF3YWl0IG11eGVyLndyaXRlUGFja2V0KGJhc2VQa3QpO1xuXG4gICAgICBiYXNlUGt0LnVucmVmKCk7XG4gICAgICBhbHBoYVBrdC51bnJlZigpO1xuICAgIH1cbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMy8yMS5cblxuaW1wb3J0IHsgQ29kZWMsIHR5cGUgQ29kZWNDb250ZXh0LCBGRm1wZWdFcnJvciwgRnJhbWUsIHR5cGUgUGFja2V0LCB0eXBlIFN0cmVhbSB9IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQgeyB0eXBlIEFWUGl4ZWxGb3JtYXQsIHR5cGUgRkZWaWRlb0VuY29kZXIgfSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcbmltcG9ydCB7IGRyYWluUGFja2V0cywgbWFrZVBhY2tldCwgb3BlblZpZGVvQ3R4IH0gZnJvbSBcIi4vbWlzY1wiO1xuaW1wb3J0IHR5cGUgeyBGb3JtYXRNdXhlciB9IGZyb20gXCIuL211eGVyXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmlkZW9FbmNvZGVyT3B0aW9ucyB7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICBmcHM6IG51bWJlcjtcbiAgY29kZWNOYW1lOiBGRlZpZGVvRW5jb2RlcjtcbiAgY29kZWNUYWc/OiBzdHJpbmc7XG4gIGNvZGVjT3B0czogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgYml0cmF0ZTogbnVtYmVyO1xuICBwaXhlbEZvcm1hdDogQVZQaXhlbEZvcm1hdDtcbiAgbXV4ZXI6IEZvcm1hdE11eGVyO1xufVxuXG5leHBvcnQgY2xhc3MgVmlkZW9FbmNvZGVyIGltcGxlbWVudHMgRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2N0eDogQ29kZWNDb250ZXh0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9wa3Q6IFBhY2tldDtcbiAgcHJpdmF0ZSByZWFkb25seSBfc3RyZWFtOiBTdHJlYW07XG4gIHByaXZhdGUgX3B0cyA9IDBuO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoY3R4OiBDb2RlY0NvbnRleHQsIHBrdDogUGFja2V0LCBzdHJlYW06IFN0cmVhbSkge1xuICAgIHRoaXMuX2N0eCA9IGN0eDtcbiAgICB0aGlzLl9wa3QgPSBwa3Q7XG4gICAgdGhpcy5fc3RyZWFtID0gc3RyZWFtO1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIGNyZWF0ZShvcHRzOiBWaWRlb0VuY29kZXJPcHRpb25zKTogUHJvbWlzZTxWaWRlb0VuY29kZXI+IHtcbiAgICBjb25zdCB7IGNvZGVjTmFtZSwgY29kZWNUYWcsIGNvZGVjT3B0cywgbXV4ZXIsIC4uLnJlc3QgfSA9IG9wdHM7XG5cbiAgICBjb25zdCBjb2RlYyA9IENvZGVjLmZpbmRFbmNvZGVyQnlOYW1lKGNvZGVjTmFtZSk7XG4gICAgaWYgKCFjb2RlYykgdGhyb3cgbmV3IEVycm9yKGBWaWRlbyBlbmNvZGVyIG5vdCBmb3VuZDogJHtjb2RlY05hbWV9YCk7XG5cbiAgICBjb25zdCBjdHggPSBhd2FpdCBvcGVuVmlkZW9DdHgoeyBjb2RlYywgLi4ucmVzdCwgY29kZWNUYWcsIG9wdGlvbnM6IGNvZGVjT3B0cyB9LCBcInZpZGVvQ3R4Lm9wZW4yXCIpO1xuICAgIGNvbnN0IHN0cmVhbSA9IG11eGVyLmFkZFN0cmVhbShjdHgsIGNvZGVjVGFnKTtcbiAgICByZXR1cm4gbmV3IFZpZGVvRW5jb2RlcihjdHgsIG1ha2VQYWNrZXQoKSwgc3RyZWFtKTtcbiAgfVxuXG4gIGFzeW5jIGVuY29kZShmcmFtZTogRnJhbWUsIG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGZyYW1lLnB0cyA9IHRoaXMuX3B0cysrO1xuICAgIGZyYW1lLmR1cmF0aW9uID0gMW47XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IHRoaXMuX2N0eC5zZW5kRnJhbWUoZnJhbWUpLCBcInZpZGVvQ3R4LnNlbmRGcmFtZVwiKTtcbiAgICBhd2FpdCB0aGlzLmRyYWluKG11eGVyKTtcbiAgfVxuXG4gIGFzeW5jIGZsdXNoKG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuX2N0eC5zZW5kRnJhbWUobnVsbCk7XG4gICAgYXdhaXQgdGhpcy5kcmFpbihtdXhlcik7XG4gIH1cblxuICBbU3ltYm9sLmRpc3Bvc2VdKCk6IHZvaWQge1xuICAgIHRoaXMuX3BrdC5mcmVlKCk7XG4gICAgdGhpcy5fY3R4LmZyZWVDb250ZXh0KCk7XG4gIH1cblxuICBwcml2YXRlIGRyYWluKG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBkcmFpblBhY2tldHModGhpcy5fY3R4LCB0aGlzLl9wa3QsIHRoaXMuX3N0cmVhbSwgbXV4ZXIpO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzEyLlxuXG5pbXBvcnQgeyB0eXBlIENvZGVjQ29udGV4dCwgRkZtcGVnRXJyb3IsIEZyYW1lLCB0eXBlIFBhY2tldCwgdHlwZSBTdHJlYW0gfSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHR5cGUgeyBIYXJkd2FyZUNvbnRleHQgfSBmcm9tIFwibm9kZS1hdi9hcGlcIjtcbmltcG9ydCB7IEFWX1BJWF9GTVRfQkdSQSwgQVZDT0xfUkFOR0VfSlBFRyB9IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgZHJhaW5QYWNrZXRzLCBtYWtlUGFja2V0LCBvcGVuVmlkZW9DdHggfSBmcm9tIFwiLi9taXNjXCI7XG5pbXBvcnQgdHlwZSB7IEZvcm1hdE11eGVyIH0gZnJvbSBcIi4vbXV4ZXJcIjtcblxuZXhwb3J0IGludGVyZmFjZSBId1ZpZGVvRW5jb2Rlck9wdGlvbnMge1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgZnBzOiBudW1iZXI7XG4gIGh3OiBIYXJkd2FyZUNvbnRleHQ7XG4gIGJpdHJhdGU6IG51bWJlcjtcbiAgbXV4ZXI6IEZvcm1hdE11eGVyO1xufVxuXG5leHBvcnQgY2xhc3MgVmlkZW9Ub29sYm94RW5jb2RlciBpbXBsZW1lbnRzIERpc3Bvc2FibGUge1xuICBwcml2YXRlIF9jdHg6IENvZGVjQ29udGV4dDtcbiAgcHJpdmF0ZSBfcGt0OiBQYWNrZXQ7XG4gIHByaXZhdGUgX3N0cmVhbTogU3RyZWFtO1xuICBwcml2YXRlIF9wdHMgPSAwbjtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKGN0eDogQ29kZWNDb250ZXh0LCBwa3Q6IFBhY2tldCwgc3RyZWFtOiBTdHJlYW0pIHtcbiAgICB0aGlzLl9jdHggPSBjdHg7XG4gICAgdGhpcy5fcGt0ID0gcGt0O1xuICAgIHRoaXMuX3N0cmVhbSA9IHN0cmVhbTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBjcmVhdGUob3B0czogSHdWaWRlb0VuY29kZXJPcHRpb25zKTogUHJvbWlzZTxWaWRlb1Rvb2xib3hFbmNvZGVyPiB7XG4gICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0LCBmcHMsIGh3LCBiaXRyYXRlLCBtdXhlciB9ID0gb3B0cztcblxuICAgIGNvbnN0IGNvZGVjID0gaHcuZ2V0RW5jb2RlckNvZGVjKFwiaGV2Y1wiKTtcbiAgICBpZiAoIWNvZGVjKSB0aHJvdyBuZXcgRXJyb3IoXCJoZXZjX3ZpZGVvdG9vbGJveCBlbmNvZGVyIG5vdCBmb3VuZFwiKTtcblxuICAgIGNvbnN0IGN0eCA9IGF3YWl0IG9wZW5WaWRlb0N0eChcbiAgICAgIHtcbiAgICAgICAgY29kZWMsXG4gICAgICAgIHdpZHRoLFxuICAgICAgICBoZWlnaHQsXG4gICAgICAgIGZwcyxcbiAgICAgICAgYml0cmF0ZSxcbiAgICAgICAgcGl4ZWxGb3JtYXQ6IEFWX1BJWF9GTVRfQkdSQSxcbiAgICAgICAgY29sb3JSYW5nZTogQVZDT0xfUkFOR0VfSlBFRyxcbiAgICAgICAgY29kZWNUYWc6IFwiaHZjMVwiLFxuICAgICAgICBvcHRpb25zOiB7IGFscGhhX3F1YWxpdHk6IFwiMVwiIH0sXG4gICAgICB9LFxuICAgICAgXCJ2dEVuYy5vcGVuMlwiLFxuICAgICk7XG4gICAgY29uc3Qgc3RyZWFtID0gbXV4ZXIuYWRkU3RyZWFtKGN0eCwgXCJodmMxXCIpO1xuICAgIHJldHVybiBuZXcgVmlkZW9Ub29sYm94RW5jb2RlcihjdHgsIG1ha2VQYWNrZXQoKSwgc3RyZWFtKTtcbiAgfVxuXG4gIGFzeW5jIGVuY29kZShiZ3JhRnJhbWU6IEZyYW1lLCBtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBiZ3JhRnJhbWUucHRzID0gdGhpcy5fcHRzKys7XG4gICAgYmdyYUZyYW1lLmR1cmF0aW9uID0gMW47XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IHRoaXMuX2N0eC5zZW5kRnJhbWUoYmdyYUZyYW1lKSwgXCJ2dEVuYy5zZW5kRnJhbWVcIik7XG4gICAgYXdhaXQgdGhpcy5kcmFpbihtdXhlcik7XG4gIH1cblxuICBhc3luYyBmbHVzaChtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLl9jdHguc2VuZEZyYW1lKG51bGwpO1xuICAgIGF3YWl0IHRoaXMuZHJhaW4obXV4ZXIpO1xuICB9XG5cbiAgW1N5bWJvbC5kaXNwb3NlXSgpOiB2b2lkIHtcbiAgICB0aGlzLl9wa3QuZnJlZSgpO1xuICAgIHRoaXMuX2N0eC5mcmVlQ29udGV4dCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBkcmFpbihtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gZHJhaW5QYWNrZXRzKHRoaXMuX2N0eCwgdGhpcy5fcGt0LCB0aGlzLl9zdHJlYW0sIG11eGVyKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8xMy5cblxuaW1wb3J0IHsgSGFyZHdhcmVDb250ZXh0IH0gZnJvbSBcIm5vZGUtYXYvYXBpXCI7XG5pbXBvcnQge1xuICBBVl9QSVhfRk1UX1lVVkE0MjBQLFxuICBGRl9FTkNPREVSX0xJQlgyNjUsXG4gIEZGX0hXREVWSUNFX1RZUEVfQ1VEQSxcbiAgRkZfSFdERVZJQ0VfVFlQRV9WSURFT1RPT0xCT1gsXG59IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuXG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi4vbG9nZ2luZ1wiO1xuaW1wb3J0IHsgQ29kZWNTdGF0ZSB9IGZyb20gXCIuL2NvZGVjXCI7XG5pbXBvcnQgdHlwZSB7IEZvcm1hdE11eGVyIH0gZnJvbSBcIi4vbXV4ZXJcIjtcbmltcG9ydCB7IE52ZW5jRHVhbExheWVyRW5jb2RlciB9IGZyb20gXCIuL2hldmNfYWxwaGEvbnZlbmNcIjtcbmltcG9ydCB7IFZpZGVvRW5jb2RlciB9IGZyb20gXCIuL3ZpZGVvXCI7XG5pbXBvcnQgeyBWaWRlb1Rvb2xib3hFbmNvZGVyIH0gZnJvbSBcIi4vdmlkZW90b29sYm94XCI7XG5cbmNvbnN0IFRBRyA9IFwiW0VuY29kZXJdXCI7XG5cbmV4cG9ydCB0eXBlIEh3RW5jb2RlciA9IFZpZGVvVG9vbGJveEVuY29kZXIgfCBOdmVuY0R1YWxMYXllckVuY29kZXI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmlkZW9TZXR1cCB7XG4gIHZpZGVvPzogVmlkZW9FbmNvZGVyO1xuICBod1ZpZGVvPzogSHdFbmNvZGVyO1xuICBjb2RlYz86IENvZGVjU3RhdGU7XG4gIGh3PzogSGFyZHdhcmVDb250ZXh0O1xuICBvd25zSHc6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSHdWaWRlb0ZhY3RvcnlPcHRpb25zIHtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIGZwczogbnVtYmVyO1xuICBiaXRyYXRlPzogbnVtYmVyO1xuICBkaXNhYmxlSHdDb2RlYz86IGJvb2xlYW47XG4gIHNoYXJlZEh3PzogSGFyZHdhcmVDb250ZXh0O1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlSHdWaWRlb0VuY29kZXIob3B0czogSHdWaWRlb0ZhY3RvcnlPcHRpb25zLCBtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPFZpZGVvU2V0dXA+IHtcbiAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0LCBmcHMsIGJpdHJhdGUgPSA4XzAwMF8wMDAsIGRpc2FibGVId0NvZGVjID0gZmFsc2UsIHNoYXJlZEh3IH0gPSBvcHRzO1xuICBjb25zdCBodyA9IHNoYXJlZEh3ID8/IChkaXNhYmxlSHdDb2RlYyA/IHVuZGVmaW5lZCA6IChIYXJkd2FyZUNvbnRleHQuYXV0bygpID8/IHVuZGVmaW5lZCkpO1xuICBjb25zdCBvd25zSHcgPSAhc2hhcmVkSHcgJiYgISFodztcblxuICB0cnkge1xuICAgIGlmIChodz8uZGV2aWNlVHlwZU5hbWUgPT09IEZGX0hXREVWSUNFX1RZUEVfVklERU9UT09MQk9YICYmIGh3LmdldEVuY29kZXJDb2RlYyhcImhldmNcIikpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhUQUcsIFwidXNpbmcgVmlkZW9Ub29sYm94IEhFVkMgYWxwaGEgZW5jb2RlclwiKTtcbiAgICAgIGNvbnN0IGh3VmlkZW8gPSBhd2FpdCBWaWRlb1Rvb2xib3hFbmNvZGVyLmNyZWF0ZSh7IHdpZHRoLCBoZWlnaHQsIGZwcywgaHcsIGJpdHJhdGUsIG11eGVyIH0pO1xuICAgICAgcmV0dXJuIHsgaHdWaWRlbywgaHcsIG93bnNIdyB9O1xuICAgIH1cbiAgICBpZiAoaHc/LmRldmljZVR5cGVOYW1lID09PSBGRl9IV0RFVklDRV9UWVBFX0NVREEgJiYgaHcuZ2V0RW5jb2RlckNvZGVjKFwiaGV2Y1wiKSkge1xuICAgICAgbG9nZ2VyLmRlYnVnKFRBRywgXCJ1c2luZyBOVkVOQyBkdWFsLWxheWVyIEhFVkMgYWxwaGEgZW5jb2RlclwiKTtcbiAgICAgIGNvbnN0IGh3VmlkZW8gPSBhd2FpdCBOdmVuY0R1YWxMYXllckVuY29kZXIuY3JlYXRlKHsgd2lkdGgsIGhlaWdodCwgZnBzLCBodywgYml0cmF0ZSwgbXV4ZXIgfSk7XG4gICAgICByZXR1cm4geyBod1ZpZGVvLCBodywgb3duc0h3IH07XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgbG9nZ2VyLndhcm4oVEFHLCBcIkhhcmR3YXJlIGNvZGVjIHNlc3Npb24gbGltaXRzIHJlYWNoZWQsIHVzZSBzb2Z0d2FyZSBlbmNvZGVyXCIsIGUpO1xuICAgIGlmIChvd25zSHcpIGh3Py5kaXNwb3NlKCk7XG4gIH1cblxuICBsb2dnZXIuZGVidWcoVEFHLCBcInVzaW5nIHNvZnR3YXJlIGxpYngyNjUgSEVWQyBhbHBoYSBlbmNvZGVyXCIpO1xuICBjb25zdCB2aWRlbyA9IGF3YWl0IFZpZGVvRW5jb2Rlci5jcmVhdGUoe1xuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICBmcHMsXG4gICAgY29kZWNOYW1lOiBGRl9FTkNPREVSX0xJQlgyNjUsXG4gICAgY29kZWNUYWc6IFwiaHZjMVwiLFxuICAgIGNvZGVjT3B0czogeyBwcmVzZXQ6IFwibWVkaXVtXCIsIFwieDI2NS1wYXJhbXNcIjogXCJsb2ctbGV2ZWw9MTpiZnJhbWVzPTM6cG9vbHM9KzpmcmFtZS10aHJlYWRzPTBcIiB9LFxuICAgIGJpdHJhdGUsXG4gICAgcGl4ZWxGb3JtYXQ6IEFWX1BJWF9GTVRfWVVWQTQyMFAsXG4gICAgbXV4ZXIsXG4gIH0pO1xuICByZXR1cm4geyB2aWRlbywgY29kZWM6IGF3YWl0IENvZGVjU3RhdGUuY3JlYXRlKHdpZHRoLCBoZWlnaHQpLCBvd25zSHc6IGZhbHNlIH07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAzLzIxLlxuXG5pbXBvcnQgeyBDb2RlY0NvbnRleHQsIEZGbXBlZ0Vycm9yLCBGb3JtYXRDb250ZXh0LCBQYWNrZXQgfSBmcm9tIFwibm9kZS1hdlwiO1xuXG5leHBvcnQgY2xhc3MgRm9ybWF0TXV4ZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF9jdHg6IEZvcm1hdENvbnRleHQ7XG4gIHByaXZhdGUgX29wZW5lZCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKG91dFBhdGg6IHN0cmluZywgZm9ybWF0TmFtZT86IHN0cmluZykge1xuICAgIHRoaXMuX2N0eCA9IG5ldyBGb3JtYXRDb250ZXh0KCk7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKHRoaXMuX2N0eC5hbGxvY091dHB1dENvbnRleHQyKG51bGwsIGZvcm1hdE5hbWUgPz8gbnVsbCwgb3V0UGF0aCksIFwiYWxsb2NPdXRwdXRDb250ZXh0MlwiKTtcbiAgfVxuXG4gIGFkZFN0cmVhbShjb2RlY0N0eDogQ29kZWNDb250ZXh0LCBjb2RlY1RhZz86IHN0cmluZyk6IFJldHVyblR5cGU8Rm9ybWF0Q29udGV4dFtcIm5ld1N0cmVhbVwiXT4ge1xuICAgIGNvbnN0IHN0cmVhbSA9IHRoaXMuX2N0eC5uZXdTdHJlYW0obnVsbCk7XG4gICAgc3RyZWFtLnRpbWVCYXNlID0gY29kZWNDdHgudGltZUJhc2U7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKHN0cmVhbS5jb2RlY3Bhci5mcm9tQ29udGV4dChjb2RlY0N0eCksIFwiY29kZWNwYXIuZnJvbUNvbnRleHRcIik7XG4gICAgaWYgKGNvZGVjVGFnKSBzdHJlYW0uY29kZWNwYXIuY29kZWNUYWcgPSBjb2RlY1RhZztcbiAgICByZXR1cm4gc3RyZWFtO1xuICB9XG5cbiAgYXN5bmMgb3BlbigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fb3BlbmVkKSByZXR1cm47XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IHRoaXMuX2N0eC5vcGVuT3V0cHV0KCksIFwib3Blbk91dHB1dFwiKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgdGhpcy5fY3R4LndyaXRlSGVhZGVyKG51bGwpLCBcIndyaXRlSGVhZGVyXCIpO1xuICAgIHRoaXMuX29wZW5lZCA9IHRydWU7XG4gIH1cblxuICBhc3luYyB3cml0ZVBhY2tldChwa3Q6IFBhY2tldCk6IFByb21pc2U8dm9pZD4ge1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCB0aGlzLl9jdHguaW50ZXJsZWF2ZWRXcml0ZUZyYW1lKHBrdCksIFwiaW50ZXJsZWF2ZWRXcml0ZUZyYW1lXCIpO1xuICB9XG5cbiAgYXN5bmMgW1N5bWJvbC5hc3luY0Rpc3Bvc2VdKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5fb3BlbmVkKSByZXR1cm47XG4gICAgYXdhaXQgdGhpcy5fY3R4LndyaXRlVHJhaWxlcigpO1xuICAgIGF3YWl0IHRoaXMuX2N0eC5jbG9zZU91dHB1dCgpO1xuICAgIGF3YWl0IHRoaXMuX2N0eFtTeW1ib2wuYXN5bmNEaXNwb3NlXSgpO1xuICAgIHRoaXMuX29wZW5lZCA9IGZhbHNlO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzI0LlxuXG5pbXBvcnQgeyBvayB9IGZyb20gXCJhc3NlcnRcIjtcbmltcG9ydCB7IEZGbXBlZ0Vycm9yLCB0eXBlIEZyYW1lIH0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB0eXBlIHsgSGFyZHdhcmVDb250ZXh0IH0gZnJvbSBcIm5vZGUtYXYvYXBpXCI7XG5pbXBvcnQge1xuICBBVl9QSVhfRk1UX1lVVkE0MjBQLFxuICBBVl9TQU1QTEVfRk1UX0ZMVCxcbiAgQVZfU0FNUExFX0ZNVF9GTFRQLFxuICBGRl9FTkNPREVSX0FBQyxcbiAgRkZfRU5DT0RFUl9MSUJPUFVTLFxuICB0eXBlIEZGVmlkZW9FbmNvZGVyLFxufSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcbmltcG9ydCB7IEF1ZGlvRW5jb2RlciB9IGZyb20gXCIuL2F1ZGlvXCI7XG5pbXBvcnQgeyBDb2RlY1N0YXRlIH0gZnJvbSBcIi4vY29kZWNcIjtcbmltcG9ydCB7IGNyZWF0ZUh3VmlkZW9FbmNvZGVyLCB0eXBlIEh3RW5jb2RlciwgdHlwZSBWaWRlb1NldHVwIH0gZnJvbSBcIi4vZmFjdG9yeVwiO1xuaW1wb3J0IHsgRm9ybWF0TXV4ZXIgfSBmcm9tIFwiLi9tdXhlclwiO1xuaW1wb3J0IHsgVmlkZW9FbmNvZGVyIH0gZnJvbSBcIi4vdmlkZW9cIjtcblxuLy8gbm9kZS1hdiA1LjIuMyBjb25zdGFudCBpcyB3cm9uZzsgZmZtcGVnIHJlZ2lzdGVycyB3aXRoIGRhc2guXG5jb25zdCBGRl9FTkNPREVSX0xJQlZQWF9WUDkgPSBcImxpYnZweC12cDlcIiBhcyBGRlZpZGVvRW5jb2RlcjtcblxuZXhwb3J0IHR5cGUgU2lua0tpbmQgPSBcIm1wNFwiIHwgXCJ3ZWJtXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2lua09wdGlvbnMge1xuICBvdXRGaWxlOiBzdHJpbmc7XG4gIGtpbmQ6IFNpbmtLaW5kO1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgZnBzOiBudW1iZXI7XG4gIHdpdGhBdWRpbzogYm9vbGVhbjtcbiAgZGlzYWJsZUh3Q29kZWM6IGJvb2xlYW47XG4gIHNoYXJlZEh3PzogSGFyZHdhcmVDb250ZXh0O1xufVxuXG5pbnRlcmZhY2UgU2lua1N0YXRlIHtcbiAgbXV4ZXI6IEZvcm1hdE11eGVyO1xuICB2aWRlbz86IFZpZGVvRW5jb2RlcjtcbiAgaHdWaWRlbz86IEh3RW5jb2RlcjtcbiAgYXVkaW8/OiBBdWRpb0VuY29kZXI7XG4gIGNvZGVjPzogQ29kZWNTdGF0ZTtcbiAgb3duc0h3OiBib29sZWFuO1xuICBodz86IEhhcmR3YXJlQ29udGV4dDtcbiAgb3B0czogU2lua09wdGlvbnM7XG59XG5cbmV4cG9ydCBjbGFzcyBPdXRwdXRTaW5rIGltcGxlbWVudHMgQXN5bmNEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSBfczogU2lua1N0YXRlO1xuICBwcml2YXRlIF9kaXNwb3NlZCA9IGZhbHNlO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoczogU2lua1N0YXRlKSB7XG4gICAgdGhpcy5fcyA9IHM7XG4gIH1cblxuICBzdGF0aWMga2luZEZyb21QYXRoKHBhdGg6IHN0cmluZyk6IFNpbmtLaW5kIHtcbiAgICBjb25zdCBsb3dlciA9IHBhdGgudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAobG93ZXIuZW5kc1dpdGgoXCIud2VibVwiKSkgcmV0dXJuIFwid2VibVwiO1xuICAgIGlmIChsb3dlci5lbmRzV2l0aChcIi5tcDRcIikgfHwgbG93ZXIuZW5kc1dpdGgoXCIubW92XCIpKSByZXR1cm4gXCJtcDRcIjtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIG91dHB1dCBleHRlbnNpb246ICR7cGF0aH1gKTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBjcmVhdGUob3B0czogU2lua09wdGlvbnMpOiBQcm9taXNlPE91dHB1dFNpbms+IHtcbiAgICBjb25zdCBtdXhlciA9IG5ldyBGb3JtYXRNdXhlcihvcHRzLm91dEZpbGUpO1xuICAgIGNvbnN0IHZpZGVvID0gb3B0cy5raW5kID09PSBcIm1wNFwiID8gYXdhaXQgdGhpcy5tcDRWaWRlbyhvcHRzLCBtdXhlcikgOiBhd2FpdCB0aGlzLndlYm1WaWRlbyhvcHRzLCBtdXhlcik7XG4gICAgY29uc3QgYXVkaW8gPSBvcHRzLndpdGhBdWRpbyA/IGF3YWl0IHRoaXMuYXVkaW9Gb3Iob3B0cywgbXV4ZXIpIDogdW5kZWZpbmVkO1xuICAgIGF3YWl0IG11eGVyLm9wZW4oKTtcbiAgICByZXR1cm4gbmV3IE91dHB1dFNpbmsoeyBtdXhlciwgLi4udmlkZW8sIGF1ZGlvLCBvcHRzIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgbXA0VmlkZW8ob3B0czogU2lua09wdGlvbnMsIG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8VmlkZW9TZXR1cD4ge1xuICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgZnBzLCBkaXNhYmxlSHdDb2RlYywgc2hhcmVkSHcgfSA9IG9wdHM7XG4gICAgcmV0dXJuIGNyZWF0ZUh3VmlkZW9FbmNvZGVyKHsgd2lkdGgsIGhlaWdodCwgZnBzLCBkaXNhYmxlSHdDb2RlYywgc2hhcmVkSHcgfSwgbXV4ZXIpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgYXN5bmMgd2VibVZpZGVvKG9wdHM6IFNpbmtPcHRpb25zLCBtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPFZpZGVvU2V0dXA+IHtcbiAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQsIGZwcyB9ID0gb3B0cztcbiAgICBjb25zdCB2aWRlbyA9IGF3YWl0IFZpZGVvRW5jb2Rlci5jcmVhdGUoe1xuICAgICAgd2lkdGgsXG4gICAgICBoZWlnaHQsXG4gICAgICBmcHMsXG4gICAgICBjb2RlY05hbWU6IEZGX0VOQ09ERVJfTElCVlBYX1ZQOSxcbiAgICAgIGNvZGVjT3B0czogeyBkZWFkbGluZTogXCJyZWFsdGltZVwiLCBcImNwdS11c2VkXCI6IFwiOFwiLCBcInJvdy1tdFwiOiBcIjFcIiwgdGhyZWFkczogXCIyXCIgfSxcbiAgICAgIGJpdHJhdGU6IDRfMDAwXzAwMCxcbiAgICAgIHBpeGVsRm9ybWF0OiBBVl9QSVhfRk1UX1lVVkE0MjBQLFxuICAgICAgbXV4ZXIsXG4gICAgfSk7XG4gICAgcmV0dXJuIHsgdmlkZW8sIGNvZGVjOiBhd2FpdCBDb2RlY1N0YXRlLmNyZWF0ZSh3aWR0aCwgaGVpZ2h0KSwgb3duc0h3OiBmYWxzZSB9O1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgYXVkaW9Gb3Iob3B0czogU2lua09wdGlvbnMsIG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8QXVkaW9FbmNvZGVyPiB7XG4gICAgLy8gT3B1cyByZWplY3RzIDQ0LjFrLlxuICAgIGNvbnN0IGNmZyA9XG4gICAgICBvcHRzLmtpbmQgPT09IFwibXA0XCJcbiAgICAgICAgPyB7IG91dFNhbXBsZVJhdGU6IDQ0XzEwMCwgb3V0U2FtcGxlRm10OiBBVl9TQU1QTEVfRk1UX0ZMVFAsIGNvZGVjTmFtZTogRkZfRU5DT0RFUl9BQUMgfVxuICAgICAgICA6IHsgb3V0U2FtcGxlUmF0ZTogNDhfMDAwLCBvdXRTYW1wbGVGbXQ6IEFWX1NBTVBMRV9GTVRfRkxULCBjb2RlY05hbWU6IEZGX0VOQ09ERVJfTElCT1BVUyB9O1xuICAgIHJldHVybiBBdWRpb0VuY29kZXIuY3JlYXRlKHsgLi4uY2ZnLCBnbG9iYWxIZWFkZXI6IHRydWUsIGJpdHJhdGU6IDEyOF8wMDAsIG11eGVyIH0pO1xuICB9XG5cbiAgc2V0SW5wdXRSYXRlKHNhbXBsZVJhdGU6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuX3MuYXVkaW8/LnNldElucHV0UmF0ZShzYW1wbGVSYXRlKTtcbiAgfVxuXG4gIGFzeW5jIGVuY29kZUJHUkEoYmdyYUZyYW1lOiBGcmFtZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgaHdWaWRlbywgbXV4ZXIgfSA9IHRoaXMuX3M7XG4gICAgaWYgKGh3VmlkZW8pIHJldHVybiBod1ZpZGVvLmVuY29kZShiZ3JhRnJhbWUsIG11eGVyKTtcbiAgICByZXR1cm4gdGhpcy5zd0VuY29kZShiZ3JhRnJhbWUpO1xuICB9XG5cbiAgYXN5bmMgZW5jb2RlRGVjb2RlZEZyYW1lKHNyYzogRnJhbWUpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IGh3VmlkZW8sIG11eGVyIH0gPSB0aGlzLl9zO1xuICAgIGlmIChod1ZpZGVvKSByZXR1cm4gaHdWaWRlby5lbmNvZGUoc3JjLCBtdXhlcik7XG4gICAgcmV0dXJuIHRoaXMuc3dFbmNvZGUoc3JjKTtcbiAgfVxuXG4gIGFzeW5jIGVuY29kZUF1ZGlvKHBjbTogQnVmZmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5fcy5hdWRpbz8uZW5jb2RlKHBjbSwgdGhpcy5fcy5tdXhlcik7XG4gIH1cblxuICBhc3luYyBmbHVzaCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IGh3VmlkZW8sIHZpZGVvLCBhdWRpbywgbXV4ZXIgfSA9IHRoaXMuX3M7XG4gICAgYXdhaXQgYXVkaW8/LmZsdXNoKG11eGVyKTtcbiAgICBpZiAoaHdWaWRlbykgYXdhaXQgaHdWaWRlby5mbHVzaChtdXhlcik7XG4gICAgZWxzZSBhd2FpdCB2aWRlbyEuZmx1c2gobXV4ZXIpO1xuICB9XG5cbiAgYXN5bmMgW1N5bWJvbC5hc3luY0Rpc3Bvc2VdKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9kaXNwb3NlZCkgcmV0dXJuO1xuICAgIHRoaXMuX2Rpc3Bvc2VkID0gdHJ1ZTtcbiAgICBjb25zdCB7IG11eGVyLCB2aWRlbywgaHdWaWRlbywgYXVkaW8sIGNvZGVjLCBodywgb3duc0h3IH0gPSB0aGlzLl9zO1xuICAgIHZpZGVvPy5bU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgaHdWaWRlbz8uW1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgIGF1ZGlvPy5bU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgY29kZWM/LltTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICBhd2FpdCBtdXhlcltTeW1ib2wuYXN5bmNEaXNwb3NlXSgpO1xuICAgIGlmIChvd25zSHcpIGh3Py5kaXNwb3NlKCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHN3RW5jb2RlKHNyYzogRnJhbWUpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IHZpZGVvLCBjb2RlYywgbXV4ZXIgfSA9IHRoaXMuX3M7XG4gICAgb2soY29kZWM/LnN3cywgXCJzd3Mgbm90IGluaXRpYWxpemVkXCIpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihjb2RlYy5kc3QubWFrZVdyaXRhYmxlKCksIFwic2lua0RzdC5tYWtlV3JpdGFibGVcIik7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IGNvZGVjLnN3cy5zY2FsZUZyYW1lKGNvZGVjLmRzdCwgc3JjKSwgXCJzaW5rU3dzLnNjYWxlRnJhbWVcIik7XG4gICAgYXdhaXQgdmlkZW8hLmVuY29kZShjb2RlYy5kc3QsIG11eGVyKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8wMS5cblxuaW1wb3J0IHsgRkZtcGVnRXJyb3IsIEZyYW1lIH0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB7IEhhcmR3YXJlQ29udGV4dCB9IGZyb20gXCJub2RlLWF2L2FwaVwiO1xuaW1wb3J0IHsgQVZfUElYX0ZNVF9CR1JBLCBGRl9IV0RFVklDRV9UWVBFX0NVREEsIEZGX0hXREVWSUNFX1RZUEVfVklERU9UT09MQk9YIH0gZnJvbSBcIm5vZGUtYXYvY29uc3RhbnRzXCI7XG5cbmltcG9ydCB7IENvbmN1cnJlbmN5TGltaXRlciB9IGZyb20gXCIuLi9saW1pdGVyXCI7XG5pbXBvcnQgeyBDb2RlY1N0YXRlIH0gZnJvbSBcIi4vY29kZWNcIjtcbmltcG9ydCB7IG1ha2VGcmFtZSB9IGZyb20gXCIuL21pc2NcIjtcbmltcG9ydCB7IE91dHB1dFNpbmsgfSBmcm9tIFwiLi9zaW5rXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRW5jb2RlclBpcGVsaW5lT3B0aW9ucyB7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICBmcHM6IG51bWJlcjtcbiAgb3V0RmlsZTogc3RyaW5nO1xuICB3aXRoQXVkaW8/OiBib29sZWFuO1xuICBkaXNhYmxlSHdDb2RlYz86IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBQaXBlbGluZVN0YXRlIHtcbiAgc2lua3M6IE91dHB1dFNpbmtbXTtcbiAgc2hhcmVkSHc/OiBIYXJkd2FyZUNvbnRleHQ7XG4gIGxpbWl0ZXI6IENvbmN1cnJlbmN5TGltaXRlcjtcbiAgcG5nQ29kZWM/OiBDb2RlY1N0YXRlO1xuICBvdXRGaWxlczogc3RyaW5nW107XG4gIG9wdHM6IEVuY29kZXJQaXBlbGluZU9wdGlvbnM7XG59XG5cbmV4cG9ydCBjbGFzcyBFbmNvZGVyUGlwZWxpbmUge1xuICBwcml2YXRlIF9zOiBQaXBlbGluZVN0YXRlO1xuICBwcml2YXRlIF9kaXNwb3NlZCA9IGZhbHNlO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoczogUGlwZWxpbmVTdGF0ZSkge1xuICAgIHRoaXMuX3MgPSBzO1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIGNyZWF0ZShvcHRzOiBFbmNvZGVyUGlwZWxpbmVPcHRpb25zKTogUHJvbWlzZTxFbmNvZGVyUGlwZWxpbmU+IHtcbiAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQsIGZwcywgb3V0RmlsZSwgd2l0aEF1ZGlvID0gZmFsc2UsIGRpc2FibGVId0NvZGVjID0gZmFsc2UgfSA9IG9wdHM7XG4gICAgY29uc3Qgb3V0RmlsZXMgPSBvdXRGaWxlXG4gICAgICAuc3BsaXQoXCIsXCIpXG4gICAgICAubWFwKChwKSA9PiBwLnRyaW0oKSlcbiAgICAgIC5maWx0ZXIoQm9vbGVhbik7XG4gICAgaWYgKG91dEZpbGVzLmxlbmd0aCA9PT0gMCkgdGhyb3cgbmV3IEVycm9yKFwib3V0RmlsZSBtdXN0IGNvbnRhaW4gYXQgbGVhc3Qgb25lIHBhdGhcIik7XG5cbiAgICBjb25zdCBraW5kcyA9IG91dEZpbGVzLm1hcCgocCkgPT4gT3V0cHV0U2luay5raW5kRnJvbVBhdGgocCkpO1xuICAgIGNvbnN0IG5lZWRzTXA0SHcgPSAhZGlzYWJsZUh3Q29kZWMgJiYga2luZHMuaW5jbHVkZXMoXCJtcDRcIik7XG4gICAgY29uc3Qgc2hhcmVkSHcgPSBuZWVkc01wNEh3ID8gKEhhcmR3YXJlQ29udGV4dC5hdXRvKCkgPz8gdW5kZWZpbmVkKSA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBpc0h3QWxwaGFDYXBhYmxlID1cbiAgICAgIHNoYXJlZEh3Py5kZXZpY2VUeXBlTmFtZSA9PT0gRkZfSFdERVZJQ0VfVFlQRV9WSURFT1RPT0xCT1ggfHwgc2hhcmVkSHc/LmRldmljZVR5cGVOYW1lID09PSBGRl9IV0RFVklDRV9UWVBFX0NVREE7XG5cbiAgICBjb25zdCBzaW5rczogT3V0cHV0U2lua1tdID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvdXRGaWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3Qgc2luayA9IGF3YWl0IE91dHB1dFNpbmsuY3JlYXRlKHtcbiAgICAgICAgb3V0RmlsZTogb3V0RmlsZXNbaV0hLFxuICAgICAgICBraW5kOiBraW5kc1tpXSEsXG4gICAgICAgIHdpZHRoLFxuICAgICAgICBoZWlnaHQsXG4gICAgICAgIGZwcyxcbiAgICAgICAgd2l0aEF1ZGlvLFxuICAgICAgICBkaXNhYmxlSHdDb2RlYyxcbiAgICAgICAgc2hhcmVkSHc6IGtpbmRzW2ldID09PSBcIm1wNFwiICYmIGlzSHdBbHBoYUNhcGFibGUgPyBzaGFyZWRIdyA6IHVuZGVmaW5lZCxcbiAgICAgIH0pO1xuICAgICAgc2lua3MucHVzaChzaW5rKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEVuY29kZXJQaXBlbGluZSh7IHNpbmtzLCBzaGFyZWRIdywgbGltaXRlcjogbmV3IENvbmN1cnJlbmN5TGltaXRlcigxKSwgb3V0RmlsZXMsIG9wdHMgfSk7XG4gIH1cblxuICBzZXR1cEF1ZGlvKHNhbXBsZVJhdGU6IG51bWJlcik6IHZvaWQge1xuICAgIGZvciAoY29uc3Qgc2luayBvZiB0aGlzLl9zLnNpbmtzKSBzaW5rLnNldElucHV0UmF0ZShzYW1wbGVSYXRlKTtcbiAgfVxuXG4gIGFzeW5jIGVuY29kZUJHUkEoaW5wdXQ6IEJ1ZmZlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuX3MubGltaXRlci5zY2hlZHVsZShhc3luYyAoKSA9PiB7XG4gICAgICB1c2luZyBmcmFtZSA9IHRoaXMuYmdyYUZyYW1lKGlucHV0KTtcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKHRoaXMuX3Muc2lua3MubWFwKChzaW5rKSA9PiBzaW5rLmVuY29kZUJHUkEoZnJhbWUpKSk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBlbmNvZGVQTkcocG5nRGF0YTogQnVmZmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5fcy5saW1pdGVyLnNjaGVkdWxlKGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gdGhpcy5fcy5vcHRzO1xuICAgICAgdGhpcy5fcy5wbmdDb2RlYyA/Pz0gYXdhaXQgQ29kZWNTdGF0ZS5jcmVhdGUod2lkdGgsIGhlaWdodCk7XG4gICAgICBjb25zdCBzcmMgPSBhd2FpdCB0aGlzLl9zLnBuZ0NvZGVjLmRlY29kZVBORyhwbmdEYXRhKTtcbiAgICAgIGZvciAoY29uc3Qgc2luayBvZiB0aGlzLl9zLnNpbmtzKSBhd2FpdCBzaW5rLmVuY29kZURlY29kZWRGcmFtZShzcmMpO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZW5jb2RlQXVkaW8ocGNtOiBCdWZmZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLl9zLmxpbWl0ZXIuc2NoZWR1bGUoYXN5bmMgKCkgPT4ge1xuICAgICAgZm9yIChjb25zdCBzaW5rIG9mIHRoaXMuX3Muc2lua3MpIGF3YWl0IHNpbmsuZW5jb2RlQXVkaW8ocGNtKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGZpbmlzaCgpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuX3MubGltaXRlci5kcmFpbigpO1xuICAgICAgZm9yIChjb25zdCBzaW5rIG9mIHRoaXMuX3Muc2lua3MpIGF3YWl0IHNpbmsuZmx1c2goKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgYXdhaXQgdGhpcy5mcmVlKCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9zLm91dEZpbGVzO1xuICB9XG5cbiAgYXN5bmMgW1N5bWJvbC5hc3luY0Rpc3Bvc2VdKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9kaXNwb3NlZCkgcmV0dXJuO1xuICAgIGF3YWl0IHRoaXMuX3MubGltaXRlci5kcmFpbigpO1xuICAgIGF3YWl0IHRoaXMuZnJlZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBmcmVlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9kaXNwb3NlZCkgcmV0dXJuO1xuICAgIHRoaXMuX2Rpc3Bvc2VkID0gdHJ1ZTtcbiAgICBmb3IgKGNvbnN0IHNpbmsgb2YgdGhpcy5fcy5zaW5rcykgYXdhaXQgc2lua1tTeW1ib2wuYXN5bmNEaXNwb3NlXSgpO1xuICAgIHRoaXMuX3MucG5nQ29kZWM/LltTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICB0aGlzLl9zLnNoYXJlZEh3Py5kaXNwb3NlKCk7XG4gIH1cblxuICBwcml2YXRlIGJncmFGcmFtZShpbnB1dDogQnVmZmVyKTogRnJhbWUge1xuICAgIGNvbnN0IGZyYW1lID0gbWFrZUZyYW1lKHRoaXMuX3Mub3B0cy53aWR0aCwgdGhpcy5fcy5vcHRzLmhlaWdodCwgQVZfUElYX0ZNVF9CR1JBKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoZnJhbWUuZnJvbUJ1ZmZlcihpbnB1dCksIFwiYmdyYUZyYW1lLmZyb21CdWZmZXJcIik7XG4gICAgcmV0dXJuIGZyYW1lO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAzLzIzLlxuXG4vKipcbiAqIEZyYW1lIGRyb3AgcXVhbGl0eSBzY29yZSAoMCA9IHBlcmZlY3QsIDEgPSB3b3JzdCkuXG4gKlxuICogQ29tYmluZXMgdHdvIGRpbWVuc2lvbnM6XG4gKiAtIEdsb2JhbDogb3ZlcmFsbCBkcm9wIHJhdGUgYWNyb3NzIHRoZSB0aW1lbGluZVxuICogLSBMb2NhbDogcGVyY2VwdHVhbCBzZXZlcml0eSBvZiBjb25zZWN1dGl2ZSBkcm9wcyAoYnVyc3RzKVxuICpcbiAqIFVzZXMgY29tcGxlbWVudGFyeSBtdWx0aXBsaWNhdGlvbjogc2NvcmUgPSAxIC0gKDEtZykoMS1sKVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZyYW1lRHJvcFNjb3JlIHtcbiAgZ2xvYmFsOiBudW1iZXI7XG4gIGxvY2FsOiBudW1iZXI7XG4gIGphbms6IG51bWJlcjtcbiAgZXhwZWN0ZWQ6IG51bWJlcjtcbiAgYWN0dWFsOiBudW1iZXI7XG4gIG1heEJ1cnN0OiBudW1iZXI7XG59XG5cbmV4cG9ydCBjbGFzcyBGcmFtZURyb3BTdGF0cyB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2ZwczogbnVtYmVyO1xuICBwcml2YXRlIF9hY3R1YWwgPSAwO1xuICBwcml2YXRlIF9jdXJyZW50QnVyc3QgPSAwO1xuICBwcml2YXRlIF9idXJzdHM6IG51bWJlcltdID0gW107XG5cbiAgY29uc3RydWN0b3IoZnBzOiBudW1iZXIpIHtcbiAgICB0aGlzLl9mcHMgPSBmcHM7XG4gIH1cblxuICAvKiogQ2FsbCB3aGVuIGEgZnJhbWUgaXMgYWN0dWFsbHkgd3JpdHRlbiB0byB0aGUgZW5jb2Rlci4gKi9cbiAgd3JvdGUoY291bnQgPSAxKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2N1cnJlbnRCdXJzdCA+IDApIHtcbiAgICAgIHRoaXMuX2J1cnN0cy5wdXNoKHRoaXMuX2N1cnJlbnRCdXJzdCk7XG4gICAgICB0aGlzLl9jdXJyZW50QnVyc3QgPSAwO1xuICAgIH1cbiAgICB0aGlzLl9hY3R1YWwgKz0gY291bnQ7XG4gIH1cblxuICAvKiogQ2FsbCB3aGVuIGEgZnJhbWUgaXMgZHJvcHBlZC4gKi9cbiAgZHJvcHBlZChjb3VudCA9IDEpOiB2b2lkIHtcbiAgICB0aGlzLl9jdXJyZW50QnVyc3QgKz0gY291bnQ7XG4gIH1cblxuICAvKiogRmluYWxpemUgYW5kIHJldHVybiB0aGUgc2NvcmUuICovXG4gIGZpbmFsaXplKCk6IEZyYW1lRHJvcFNjb3JlIHtcbiAgICBpZiAodGhpcy5fY3VycmVudEJ1cnN0ID4gMCkge1xuICAgICAgdGhpcy5fYnVyc3RzLnB1c2godGhpcy5fY3VycmVudEJ1cnN0KTtcbiAgICAgIHRoaXMuX2N1cnJlbnRCdXJzdCA9IDA7XG4gICAgfVxuXG4gICAgbGV0IHRvdGFsRHJvcHBlZCA9IDA7XG4gICAgbGV0IGxvY2FsU3VtID0gMDtcbiAgICBsZXQgbWF4QnVyc3QgPSAwO1xuICAgIGZvciAoY29uc3QgYnVyc3Qgb2YgdGhpcy5fYnVyc3RzKSB7XG4gICAgICB0b3RhbERyb3BwZWQgKz0gYnVyc3Q7XG4gICAgICBtYXhCdXJzdCA9IE1hdGgubWF4KG1heEJ1cnN0LCBidXJzdCk7XG4gICAgICBjb25zdCBwZXJjZXB0aWJsZSA9IE1hdGgubWF4KDAsIGJ1cnN0IC0gMSk7XG4gICAgICBsb2NhbFN1bSArPSAocGVyY2VwdGlibGUgLyB0aGlzLl9mcHMpICoqIDI7XG4gICAgfVxuXG4gICAgY29uc3QgZXhwZWN0ZWQgPSB0aGlzLl9hY3R1YWwgKyB0b3RhbERyb3BwZWQ7XG4gICAgY29uc3QgZyA9IGV4cGVjdGVkID4gMCA/IHRvdGFsRHJvcHBlZCAvIGV4cGVjdGVkIDogMDtcbiAgICBjb25zdCBsID0gTWF0aC5taW4oMSwgbG9jYWxTdW0pO1xuICAgIGNvbnN0IHNjb3JlID0gMSAtICgxIC0gZykgKiAoMSAtIGwpO1xuXG4gICAgcmV0dXJuIHsgZ2xvYmFsOiBnLCBsb2NhbDogbCwgamFuazogc2NvcmUsIGV4cGVjdGVkLCBhY3R1YWw6IHRoaXMuX2FjdHVhbCwgbWF4QnVyc3QgfTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wNi5cblxuaW1wb3J0IHR5cGUgeyBOYXRpdmVJbWFnZSwgU2l6ZSB9IGZyb20gXCJlbGVjdHJvblwiO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNFbXB0eShpbWFnZTogTmF0aXZlSW1hZ2UpIHtcbiAgY29uc3Qgc2l6ZSA9IGltYWdlLmdldFNpemUoKTtcbiAgaWYgKHNpemUud2lkdGggPT09IDAgfHwgc2l6ZS5oZWlnaHQgPT09IDApIHJldHVybiB0cnVlO1xuICByZXR1cm4gaW1hZ2UuaXNFbXB0eSgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2l6ZUVxdWFscyhhOiBTaXplLCBiOiBTaXplKSB7XG4gIHJldHVybiBhLndpZHRoID09PSBiLndpZHRoICYmIGEuaGVpZ2h0ID09PSBiLmhlaWdodDtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDMvMDIuXG5cbmltcG9ydCB7IHR5cGUgV2ViQ29udGVudHMgfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB0eXBlIHsgRW5jb2RlclBpcGVsaW5lIH0gZnJvbSBcIi4uL2Jhc2UvZW5jb2Rlci9waXBlbGluZVwiO1xuXG5leHBvcnQgY29uc3QgQVVESU9fTUVUQV9DSEFOTkVMID0gXCJhdWRpby1tZXRhXCI7XG5leHBvcnQgY29uc3QgQVVESU9fQ0hVTktfQ0hBTk5FTCA9IFwiYXVkaW8tY2h1bmtcIjtcblxuZXhwb3J0IGludGVyZmFjZSBBdWRpb0xpc3RlbmVyT3B0aW9ucyB7XG4gIHdjOiBXZWJDb250ZW50cztcbiAgZW5jb2RlcjogRW5jb2RlclBpcGVsaW5lO1xuICBnZXRWaWRlb1RpbWVNczogKCkgPT4gbnVtYmVyO1xuICBvbkVycm9yOiAoZXJyb3I6IEVycm9yKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgdHlwZSBBdWRpb0Rpc3Bvc2FsID0gKCkgPT4gdm9pZDtcblxuZXhwb3J0IGZ1bmN0aW9uIGF0dGFjaEF1ZGlvTGlzdGVuZXJzKHsgd2MsIGVuY29kZXIsIGdldFZpZGVvVGltZU1zLCBvbkVycm9yIH06IEF1ZGlvTGlzdGVuZXJPcHRpb25zKTogQXVkaW9EaXNwb3NhbCB7XG4gIGNvbnN0IG9uTWV0YSA9IGFzeW5jIChfZTogdW5rbm93biwgZGF0YTogeyBzYW1wbGVSYXRlOiBudW1iZXIgfSkgPT4ge1xuICAgIGNvbnN0IHNhbXBsZVJhdGUgPSBkYXRhLnNhbXBsZVJhdGU7XG4gICAgY29uc3Qgc3RhcnRNcyA9IGdldFZpZGVvVGltZU1zKCk7XG4gICAgZW5jb2Rlci5zZXR1cEF1ZGlvKHNhbXBsZVJhdGUpO1xuICAgIGNvbnN0IHNpbGVuY2VTYW1wbGVzID0gTWF0aC5jZWlsKChzdGFydE1zICogc2FtcGxlUmF0ZSkgLyAxMDAwKTtcbiAgICBpZiAoc2lsZW5jZVNhbXBsZXMgPD0gMCkgcmV0dXJuO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBlbmNvZGVyLmVuY29kZUF1ZGlvKEJ1ZmZlci5hbGxvYyhzaWxlbmNlU2FtcGxlcyAqIDIgKiA0KSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIG9uRXJyb3IoZXJyb3IgYXMgRXJyb3IpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBvbkNodW5rID0gYXN5bmMgKF9lOiB1bmtub3duLCBidWZmZXI6IEJ1ZmZlcikgPT4ge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBlbmNvZGVyLmVuY29kZUF1ZGlvKGJ1ZmZlcik7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIG9uRXJyb3IoZXJyb3IgYXMgRXJyb3IpO1xuICAgIH1cbiAgfTtcblxuICB3Yy5pcGMub24oQVVESU9fTUVUQV9DSEFOTkVMLCBvbk1ldGEpO1xuICB3Yy5pcGMub24oQVVESU9fQ0hVTktfQ0hBTk5FTCwgb25DaHVuayk7XG5cbiAgcmV0dXJuICgpID0+IHtcbiAgICB3Yy5pcGMucmVtb3ZlTGlzdGVuZXIoQVVESU9fTUVUQV9DSEFOTkVMLCBvbk1ldGEpO1xuICAgIHdjLmlwYy5yZW1vdmVMaXN0ZW5lcihBVURJT19DSFVOS19DSEFOTkVMLCBvbkNodW5rKTtcbiAgfTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDUuXG5cbmltcG9ydCB7IHNldFRpbWVvdXQgfSBmcm9tIFwidGltZXJzL3Byb21pc2VzXCI7XG5pbXBvcnQgeyBzbGVlcCB9IGZyb20gXCIuL3RpbWluZ1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJldHJ5T3B0aW9uczxBcmdzIGV4dGVuZHMgYW55W10sIFJldD4ge1xuICBmbjogKC4uLmFyZ3M6IEFyZ3MpID0+IFByb21pc2U8UmV0PjtcbiAgbWF4QXR0ZW1wdHM/OiBudW1iZXI7XG4gIHRpbWVvdXQ/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VSZXRyeTxBcmdzIGV4dGVuZHMgYW55W10sIFJldD4oeyBmbiwgbWF4QXR0ZW1wdHMgPSAzLCB0aW1lb3V0IH06IFJldHJ5T3B0aW9uczxBcmdzLCBSZXQ+KSB7XG4gIGNvbnN0IHRpbWVvdXRFcnJvciA9IG5ldyBFcnJvcihgdGltZW91dCBvdmVyICR7dGltZW91dH1tc2ApO1xuICByZXR1cm4gYXN5bmMgZnVuY3Rpb24gKC4uLmFyZ3M6IEFyZ3MpIHtcbiAgICBsZXQgYXR0ZW1wdCA9IDA7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHByb21pc2VzID0gW2ZuKC4uLmFyZ3MpXTtcbiAgICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAgICBwcm9taXNlcy5wdXNoKFxuICAgICAgICAgICAgc2V0VGltZW91dCh0aW1lb3V0KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgdGhyb3cgdGltZW91dEVycm9yO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXdhaXQgUHJvbWlzZS5yYWNlKHByb21pc2VzKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgYXR0ZW1wdCsrO1xuICAgICAgICBpZiAoYXR0ZW1wdCA+PSBtYXhBdHRlbXB0cykge1xuICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgc2xlZXAoTWF0aC5wb3coMiwgYXR0ZW1wdCkgKiAxMDAgKyBNYXRoLnJhbmRvbSgpICogMTAwKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA5LlxuXG5jb25zdCBTVVBQT1JURURfUFJPVE9DT0xTID0gW1wiZmlsZTpcIiwgXCJodHRwOlwiLCBcImh0dHBzOlwiLCBcImRhdGE6XCJdO1xuY29uc3QgU09VUkNFX1BBVFRFUk4gPSAvXihmaWxlOnxodHRwcz86fGRhdGE6KS87XG5cbmV4cG9ydCBmdW5jdGlvbiBjaGVja0hUTUwoc291cmNlOiBzdHJpbmcpOiB2b2lkIHtcbiAgaWYgKFNPVVJDRV9QQVRURVJOLnRlc3Qoc291cmNlKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHByb3RvY29sID0gc291cmNlLnNwbGl0KFwiOlwiKVswXSArIFwiOlwiO1xuICBjb25zdCBtZXNzYWdlID0gU1VQUE9SVEVEX1BST1RPQ09MUy5pbmNsdWRlcyhwcm90b2NvbClcbiAgICA/IGB1bnN1cHBvcnRlZCBwcm90b2NvbDogJHtwcm90b2NvbH0sIGV4cGVjdGVkICR7U1VQUE9SVEVEX1BST1RPQ09MUy5qb2luKFwiLCBcIil9YFxuICAgIDogYGludmFsaWQgc291cmNlIGZvcm1hdCwgZXhwZWN0ZWQgJHtTVVBQT1JURURfUFJPVE9DT0xTLmpvaW4oXCIsIFwiKX1gO1xuXG4gIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDMvMTAuXG5cbmV4cG9ydCBpbnRlcmZhY2UgV2FpdE9wdGlvbnMge1xuICB0aW1lb3V0OiBudW1iZXI7XG4gIG9uVGltZW91dD86ICgpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBjbGFzcyBXYWl0YWJsZUV2ZW50IHtcbiAgcHJpdmF0ZSBfcHJvbWlzZT86IFByb21pc2U8dm9pZD47XG4gIHByaXZhdGUgX3Jlc29sdmU/OiAoKSA9PiB2b2lkO1xuICBwcml2YXRlIF90aW1lb3V0VG9rZW4/OiBOb2RlSlMuVGltZW91dDtcblxuICB3YWl0KG9wdGlvbnM/OiBXYWl0T3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9wcm9taXNlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJhbHJlYWR5IHdhaXRpbmdcIik7XG4gICAgfVxuICAgIHRoaXMuX3Byb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgdGhpcy5fcmVzb2x2ZSA9IHJlc29sdmU7XG4gICAgICBpZiAob3B0aW9ucz8udGltZW91dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuX3RpbWVvdXRUb2tlbiA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIG9wdGlvbnMub25UaW1lb3V0Py4oKTtcbiAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH0sIG9wdGlvbnMudGltZW91dCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuX3Byb21pc2U7XG4gIH1cblxuICBzaWduYWwoKSB7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVvdXRUb2tlbik7XG4gICAgdGhpcy5fcHJvbWlzZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLl9yZXNvbHZlPy4oKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wOS5cblxuaW1wb3J0IHsgQnJvd3NlcldpbmRvdyB9IGZyb20gXCJlbGVjdHJvblwiO1xuaW1wb3J0IHsgVVJMIH0gZnJvbSBcInVybFwiO1xuaW1wb3J0IHsgQ29uY3VycmVuY3lMaW1pdGVyIH0gZnJvbSBcIi4uL2Jhc2UvbGltaXRlclwiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4uL2Jhc2UvbG9nZ2luZ1wiO1xuaW1wb3J0IHsgV2FpdGFibGVFdmVudCB9IGZyb20gXCIuLi9iYXNlL3dhaXRhYmxlX2V2ZW50XCI7XG5cbmNvbnN0IFRBRyA9IFwiW05ldHdvcmtdXCI7XG5cbmNvbnN0IG1hcCA9IG5ldyBNYXAoW1xuICBbYGpzc3otYm9zcy5oZHNsYi5jb21gLCBganNzei1ib3NzLmJpbGliaWxpLmNvYF0sIC8vXG4gIFtgYm9zcy5oZHNsYi5jb21gLCBgc2hqZC1ib3NzLmJpbGliaWxpLmNvYF0sXG5dKTtcblxuZXhwb3J0IGZ1bmN0aW9uIHByb3hpZWRVcmwodXJsOiBzdHJpbmcpIHtcbiAgaWYgKCF1cmwuc3RhcnRzV2l0aChcImh0dHBcIikpIHtcbiAgICByZXR1cm4gdXJsO1xuICB9XG4gIGNvbnN0IHBhcnNlZCA9IG5ldyBVUkwodXJsKTtcbiAgY29uc3QgdGFyZ2V0ID0gbWFwLmdldChwYXJzZWQuaG9zdG5hbWUpO1xuICBpZiAoIXRhcmdldCkge1xuICAgIHJldHVybiB1cmw7XG4gIH1cbiAgcGFyc2VkLmhvc3RuYW1lID0gdGFyZ2V0O1xuICBwYXJzZWQucHJvdG9jb2wgPSBcImh0dHA6XCI7XG4gIHJldHVybiBwYXJzZWQudG9TdHJpbmcoKTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBOZXR3b3JrT3B0aW9ucyB7XG4gIHNvdXJjZTogc3RyaW5nO1xuICB3aW5kb3c6IEJyb3dzZXJXaW5kb3c7XG4gIHVzZUlubmVyUHJveHk/OiBib29sZWFuO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0SW50ZXJjZXB0b3IoeyBzb3VyY2UsIHdpbmRvdywgdXNlSW5uZXJQcm94eSB9OiBOZXR3b3JrT3B0aW9ucykge1xuICBjb25zdCByZXEgPSB3aW5kb3cud2ViQ29udGVudHMuc2Vzc2lvbi53ZWJSZXF1ZXN0O1xuICBjb25zdCBsaW1pdGVyID0gbmV3IENvbmN1cnJlbmN5TGltaXRlcigyNTYpO1xuICBjb25zdCBldmVudHMgPSBuZXcgTWFwPHN0cmluZywgV2FpdGFibGVFdmVudD4oKTtcblxuICBhc3luYyBmdW5jdGlvbiB3YWl0KGtleTogc3RyaW5nLCBvblRpbWVvdXQ/OiAoKSA9PiB2b2lkKSB7XG4gICAgY29uc3QgZXZlbnQgPSBuZXcgV2FpdGFibGVFdmVudCgpO1xuICAgIGV2ZW50cy5zZXQoa2V5LCBldmVudCk7XG4gICAgYXdhaXQgZXZlbnQud2FpdCh7IHRpbWVvdXQ6IDVfMDAwLCBvblRpbWVvdXQgfSkuZmluYWxseSgoKSA9PiBldmVudHMuZGVsZXRlKGtleSkpO1xuICB9XG5cbiAgZnVuY3Rpb24gc2lnbmFsKGtleTogc3RyaW5nKSB7XG4gICAgZXZlbnRzLmdldChrZXkpPy5zaWduYWwoKTtcbiAgfVxuXG4gIHJlcS5vbkJlZm9yZVJlcXVlc3QoKGRldGFpbHMsIGNhbGxiYWNrKSA9PiB7XG4gICAgY29uc3QgdXJsID0gZGV0YWlscy51cmw7XG4gICAgY29uc3QgcHJveGllZCA9IHVzZUlubmVyUHJveHkgPyBwcm94aWVkVXJsKHVybCkgOiB1cmw7XG4gICAgbGltaXRlci5zY2hlZHVsZSgoKSA9PiB7XG4gICAgICBjb25zdCBrZXkgPSBgJHt3aW5kb3cuaWR9XyR7ZGV0YWlscy5pZH1gO1xuICAgICAgbG9nZ2VyLmRlYnVnKFRBRywgYHN0YXJ0OmAsIHtcbiAgICAgICAga2V5LFxuICAgICAgICB1cmwsXG4gICAgICAgIHByb3hpZWQsXG4gICAgICAgIG1ldGhvZDogZGV0YWlscy5tZXRob2QsXG4gICAgICAgIHNvdXJjZSxcbiAgICAgICAgc3RhdHM6IGxpbWl0ZXIuc3RhdHMsXG4gICAgICB9KTtcbiAgICAgIGlmIChwcm94aWVkID09PSB1cmwpIHtcbiAgICAgICAgY2FsbGJhY2soeyBjYW5jZWw6IGZhbHNlIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2FsbGJhY2soeyBjYW5jZWw6IGZhbHNlLCByZWRpcmVjdFVSTDogcHJveGllZCB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB3YWl0KGtleSwgKCkgPT4ge1xuICAgICAgICBsb2dnZXIud2FybihUQUcsIGBtYXliZSB0aW1lb3V0OmAsIHtcbiAgICAgICAgICBrZXksXG4gICAgICAgICAgdXJsLFxuICAgICAgICAgIHByb3hpZWQsXG4gICAgICAgICAgbWV0aG9kOiBkZXRhaWxzLm1ldGhvZCxcbiAgICAgICAgICBzb3VyY2UsXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIHJlcS5vbkhlYWRlcnNSZWNlaXZlZCgoeyByZXNwb25zZUhlYWRlcnMgfSwgY2FsbGJhY2spID0+IHtcbiAgICBkZWxldGUgcmVzcG9uc2VIZWFkZXJzPy5bXCJ4LWZyYW1lLW9wdGlvbnNcIl07XG4gICAgZGVsZXRlIHJlc3BvbnNlSGVhZGVycz8uW1wiWC1GcmFtZS1PcHRpb25zXCJdO1xuICAgIGRlbGV0ZSByZXNwb25zZUhlYWRlcnM/LltcImNvbnRlbnQtc2VjdXJpdHktcG9saWN5XCJdO1xuICAgIGRlbGV0ZSByZXNwb25zZUhlYWRlcnM/LltcIkNvbnRlbnQtU2VjdXJpdHktUG9saWN5XCJdO1xuICAgIGNhbGxiYWNrKHsgY2FuY2VsOiBmYWxzZSwgcmVzcG9uc2VIZWFkZXJzIH0pO1xuICB9KTtcblxuICByZXEub25Db21wbGV0ZWQoKGRldGFpbHMpID0+IHtcbiAgICBjb25zdCBrZXkgPSBgJHt3aW5kb3cuaWR9XyR7ZGV0YWlscy5pZH1gO1xuICAgIHNpZ25hbChrZXkpO1xuICAgIGxvZ2dlci5kZWJ1ZyhUQUcsIGBjb21wbGV0ZWQ6YCwge1xuICAgICAga2V5LFxuICAgICAgdXJsOiBkZXRhaWxzLnVybCxcbiAgICAgIG1ldGhvZDogZGV0YWlscy5tZXRob2QsXG4gICAgICBzdGF0dXNDb2RlOiBkZXRhaWxzLnN0YXR1c0NvZGUsXG4gICAgICBzb3VyY2UsXG4gICAgfSk7XG4gIH0pO1xuXG4gIHJlcS5vbkVycm9yT2NjdXJyZWQoKGRldGFpbHMpID0+IHtcbiAgICBjb25zdCBrZXkgPSBgJHt3aW5kb3cuaWR9XyR7ZGV0YWlscy5pZH1gO1xuICAgIHNpZ25hbChrZXkpO1xuICAgIGxvZ2dlci5lcnJvcihUQUcsIGBlcnJvcjpgLCB7XG4gICAgICBrZXksXG4gICAgICB1cmw6IGRldGFpbHMudXJsLFxuICAgICAgbWV0aG9kOiBkZXRhaWxzLm1ldGhvZCxcbiAgICAgIGVycm9yOiBkZXRhaWxzLmVycm9yLFxuICAgICAgc291cmNlLFxuICAgIH0pO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVuc2V0SW50ZXJjZXB0b3Iod2luZG93OiBCcm93c2VyV2luZG93KSB7XG4gIGNvbnN0IHJlcSA9IHdpbmRvdy53ZWJDb250ZW50cy5zZXNzaW9uLndlYlJlcXVlc3Q7XG4gIHJlcS5vbkJlZm9yZVJlcXVlc3QobnVsbCk7XG4gIHJlcS5vbkhlYWRlcnNSZWNlaXZlZChudWxsKTtcbiAgcmVxLm9uQ29tcGxldGVkKG51bGwpO1xuICByZXEub25FcnJvck9jY3VycmVkKG51bGwpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8yNy5cblxuaW1wb3J0IHsgQnJvd3NlcldpbmRvdyB9IGZyb20gXCJlbGVjdHJvblwiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4uL2Jhc2UvbG9nZ2luZ1wiO1xuaW1wb3J0IHsgdXNlUmV0cnkgfSBmcm9tIFwiLi4vYmFzZS9yZXRyeVwiO1xuaW1wb3J0IHsgc2xlZXAgfSBmcm9tIFwiLi4vYmFzZS90aW1pbmdcIjtcbmltcG9ydCB7IGNoZWNrSFRNTCB9IGZyb20gXCIuL2h0bWxfY2hlY2tcIjtcbmltcG9ydCB7IHByb3hpZWRVcmwsIHNldEludGVyY2VwdG9yLCB1bnNldEludGVyY2VwdG9yIH0gZnJvbSBcIi4vbmV0d29ya1wiO1xuaW1wb3J0IHsgY3JlYXRlU3RlZ29VUkwgfSBmcm9tIFwiLi9wcm90b2NvbFwiO1xuaW1wb3J0IHR5cGUgeyBJUENSZW5kZXJPcHRpb25zIH0gZnJvbSBcIi4vc2NoZW1hXCI7XG5cbmNvbnN0IFRBRyA9IFwiW1dpbmRvd11cIjtcbmNvbnN0IFRJTUVPVVRfRVJST1IgPSBuZXcgRXJyb3IoXCJ3aW5kb3cgdGltZW91dFwiKTtcblxuaW50ZXJmYWNlIEZpbmlzaE9wdGlvbnMge1xuICBzb3VyY2U6IHN0cmluZztcbiAgd2luOiBCcm93c2VyV2luZG93O1xuICBhY3Rpb246ICgpID0+IHZvaWQ7XG4gIHRvbGVyYW50PzogYm9vbGVhbjtcbiAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG59XG5cbmZ1bmN0aW9uIHdhaXRGb3JGaW5pc2goeyBzb3VyY2UsIHdpbiwgYWN0aW9uLCB0b2xlcmFudCwgc2lnbmFsIH06IEZpbmlzaE9wdGlvbnMpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiBkb25lKFRJTUVPVVRfRVJST1IpLCAxMF8wMDApO1xuICAgIGNvbnN0IGRvbmUgPSAoZXJyPzogdW5rbm93bikgPT4ge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgaWYgKGVycikgcmVqZWN0KGVycik7XG4gICAgICBlbHNlIHJlc29sdmUoKTtcbiAgICB9O1xuICAgIHNpZ25hbD8udGhyb3dJZkFib3J0ZWQoKTtcbiAgICBzaWduYWw/LmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCAoKSA9PiBkb25lKHNpZ25hbC5yZWFzb24pLCB7IG9uY2U6IHRydWUgfSk7XG4gICAgd2luLndlYkNvbnRlbnRzLm9uY2UoXCJkb20tcmVhZHlcIiwgKCkgPT4ge1xuICAgICAgbG9nZ2VyLmRlYnVnKFRBRywgXCJkb20tcmVhZHk6XCIsIHsgc291cmNlIH0pO1xuICAgICAgaWYgKHRvbGVyYW50KSBkb25lKCk7XG4gICAgfSk7XG4gICAgd2luLndlYkNvbnRlbnRzLm9uY2UoXCJkaWQtc3RvcC1sb2FkaW5nXCIsICgpID0+IHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhUQUcsIFwiZGlkLXN0b3AtbG9hZGluZzpcIiwgeyBzb3VyY2UgfSk7XG4gICAgICBkb25lKCk7XG4gICAgfSk7XG4gICAgd2luLndlYkNvbnRlbnRzLm9uY2UoXCJkaWQtZmFpbC1sb2FkXCIsIChfZSwgY29kZSwgZGVzYywgdXJsKSA9PiB7XG4gICAgICBjb25zdCBtc2cgPSBgZGlkLWZhaWwtbG9hZDogJHtKU09OLnN0cmluZ2lmeSh7IHVybCwgc291cmNlLCBjb2RlLCBkZXNjIH0pfWA7XG4gICAgICBsb2dnZXIuZXJyb3IoVEFHLCBtc2cpO1xuICAgICAgZG9uZShuZXcgRXJyb3IobXNnKSk7XG4gICAgfSk7XG4gICAgd2luLndlYkNvbnRlbnRzLm9uY2UoXCJyZW5kZXItcHJvY2Vzcy1nb25lXCIsIChfZSwgeyBleGl0Q29kZSwgcmVhc29uIH0pID0+IHtcbiAgICAgIGNvbnN0IG1zZyA9IGByZW5kZXItcHJvY2Vzcy1nb25lOiAke0pTT04uc3RyaW5naWZ5KHsgc291cmNlLCBleGl0Q29kZSwgcmVhc29uIH0pfWA7XG4gICAgICBsb2dnZXIuZXJyb3IoVEFHLCBtc2cpO1xuICAgICAgZG9uZShuZXcgRXJyb3IobXNnKSk7XG4gICAgfSk7XG4gICAgYWN0aW9uKCk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGlzcG9zZVdpbmRvdyh3aW46IEJyb3dzZXJXaW5kb3cpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiB7XG4gICAgdW5zZXRJbnRlcmNlcHRvcih3aW4pO1xuICAgIGNvbnN0IHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBsb2dnZXIud2FybihUQUcsIFwiZm9yY2UgY2xvc2VcIik7XG4gICAgICAgIHdpbi5kZXN0cm95KCk7XG4gICAgICB9IGNhdGNoIHt9XG4gICAgICBkb25lKCk7XG4gICAgfSwgMTAwMCk7XG4gICAgY29uc3QgZG9uZSA9ICgpID0+IChjbGVhclRpbWVvdXQodGltZXIpLCByZXNvbHZlKCkpO1xuICAgIHdpbi53ZWJDb250ZW50cy5zdG9wUGFpbnRpbmcoKTtcbiAgICB3aW4ud2ViQ29udGVudHMuZGVidWdnZXIuZGV0YWNoKCk7XG4gICAgd2luLm9uY2UoXCJjbG9zZWRcIiwgZG9uZSk7XG4gICAgd2luLmNsb3NlKCk7XG4gIH0pO1xufVxuXG5leHBvcnQgdHlwZSBXaW5kb3dDcmVhdGVkQ2FsbGJhY2sgPSAod2luZG93OiBCcm93c2VyV2luZG93KSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPjtcblxuZXhwb3J0IGludGVyZmFjZSBXaW5kb3dPcHRpb25zIHtcbiAgc291cmNlOiBzdHJpbmc7XG4gIHJlbmRlcmVyOiBJUENSZW5kZXJPcHRpb25zO1xuICB0b2xlcmFudD86IGJvb2xlYW47XG4gIHByZWxvYWQ/OiBzdHJpbmc7XG4gIG9uQ3JlYXRlZD86IFdpbmRvd0NyZWF0ZWRDYWxsYmFjaztcbiAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIG9wZW5XaW5kb3coe1xuICBzb3VyY2UsXG4gIHJlbmRlcmVyLFxuICB0b2xlcmFudCxcbiAgcHJlbG9hZCxcbiAgc2lnbmFsLFxuICBvbkNyZWF0ZWQsXG59OiBXaW5kb3dPcHRpb25zKTogUHJvbWlzZTxCcm93c2VyV2luZG93PiB7XG4gIGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgdXNlSW5uZXJQcm94eSB9ID0gcmVuZGVyZXI7XG4gIGNvbnN0IHNyYyA9IHVzZUlubmVyUHJveHkgPyBwcm94aWVkVXJsKHNvdXJjZSkgOiBzb3VyY2U7XG5cbiAgY29uc3Qgd2luID0gbmV3IEJyb3dzZXJXaW5kb3coe1xuICAgIHdpZHRoLFxuICAgIGhlaWdodDogaGVpZ2h0ICsgMSxcbiAgICBtaW5XaWR0aDogd2lkdGgsXG4gICAgbWluSGVpZ2h0OiBoZWlnaHQgKyAxLFxuICAgIG1heFdpZHRoOiB3aWR0aCxcbiAgICBtYXhIZWlnaHQ6IGhlaWdodCArIDEsXG4gICAgcmVzaXphYmxlOiBmYWxzZSxcbiAgICBtaW5pbWl6YWJsZTogZmFsc2UsXG4gICAgbW92YWJsZTogZmFsc2UsXG4gICAgc2hvdzogZmFsc2UsXG4gICAgdHJhbnNwYXJlbnQ6IHRydWUsXG4gICAgYmFja2dyb3VuZENvbG9yOiB1bmRlZmluZWQsXG4gICAgZnJhbWU6IGZhbHNlLFxuICAgIHdlYlByZWZlcmVuY2VzOiB7XG4gICAgICBvZmZzY3JlZW46IHRydWUsXG4gICAgICBiYWNrZ3JvdW5kVGhyb3R0bGluZzogZmFsc2UsXG4gICAgICBub2RlSW50ZWdyYXRpb246IHRydWUsXG4gICAgICBub2RlSW50ZWdyYXRpb25JblN1YkZyYW1lczogdHJ1ZSxcbiAgICAgIG5vZGVJbnRlZ3JhdGlvbkluV29ya2VyOiB0cnVlLFxuICAgICAgY29udGV4dElzb2xhdGlvbjogZmFsc2UsXG4gICAgICB3ZWJTZWN1cml0eTogZmFsc2UsXG4gICAgICBhbGxvd1J1bm5pbmdJbnNlY3VyZUNvbnRlbnQ6IHRydWUsXG4gICAgICBleHBlcmltZW50YWxGZWF0dXJlczogdHJ1ZSxcbiAgICAgIHByZWxvYWQsXG4gICAgfSxcbiAgfSk7XG4gIHNldEludGVyY2VwdG9yKHsgc291cmNlLCB3aW5kb3c6IHdpbiwgdXNlSW5uZXJQcm94eSB9KTtcbiAgd2luLndlYkNvbnRlbnRzLmRlYnVnZ2VyLmF0dGFjaChcIjEuM1wiKTtcbiAgYXdhaXQgb25DcmVhdGVkPy4od2luKTtcblxuICB3aW4ud2ViQ29udGVudHMub24oXCJjb25zb2xlLW1lc3NhZ2VcIiwgKHsgbGV2ZWwsIG1lc3NhZ2UsIGxpbmVOdW1iZXIsIHNvdXJjZUlkIH0pID0+IHtcbiAgICBjb25zdCBtc2dzID0gW1RBRywgXCJjb25zb2xlOlwiLCB7IG1lc3NhZ2UsIGxpbmVOdW1iZXIsIHNvdXJjZUlkLCBzb3VyY2UgfV07XG4gICAgbGV2ZWwgPT09IFwiZXJyb3JcIiA/IGxvZ2dlci5lcnJvciguLi5tc2dzKSA6IGxvZ2dlci5kZWJ1ZyguLi5tc2dzKTtcbiAgICBpZiAobGV2ZWwgPT09IFwid2FybmluZ1wiICYmIG1lc3NhZ2Uuc3RhcnRzV2l0aChgJWNFbGVjdHJvbiBTZWN1cml0eSBXYXJuaW5nYCkpIHJldHVybjtcbiAgICByZW5kZXJlci5vbkNvbnNvbGUobGV2ZWwsIG1lc3NhZ2UpO1xuICB9KTtcblxuICB0cnkge1xuICAgIGNvbnN0IHVybCA9IGNyZWF0ZVN0ZWdvVVJMKHNyYywgeyB3aWR0aCwgaGVpZ2h0IH0pO1xuICAgIGF3YWl0IHdhaXRGb3JGaW5pc2goeyBzb3VyY2UsIHdpbiwgYWN0aW9uOiAoKSA9PiB3aW4ubG9hZFVSTCh1cmwpLCB0b2xlcmFudCwgc2lnbmFsIH0pO1xuICB9IGNhdGNoIChlKSB7XG4gICAgYXdhaXQgZGlzcG9zZVdpbmRvdyh3aW4pO1xuICAgIHRocm93IGU7XG4gIH1cblxuICByZXR1cm4gd2luO1xufVxuXG5jb25zdCBvcGVuV2luZG93V2l0aFJldHJ5ID0gdXNlUmV0cnkoeyBmbjogb3BlbldpbmRvdywgbWF4QXR0ZW1wdHM6IDIgfSk7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsb2FkV2luZG93KHtcbiAgc291cmNlLFxuICByZW5kZXJlcixcbiAgcHJlbG9hZCxcbiAgb25DcmVhdGVkLFxuICBzaWduYWwsXG59OiBXaW5kb3dPcHRpb25zKTogUHJvbWlzZTxCcm93c2VyV2luZG93PiB7XG4gIGNoZWNrSFRNTChzb3VyY2UpO1xuXG4gIHNpZ25hbD8udGhyb3dJZkFib3J0ZWQoKTtcbiAgbGV0IHdhcm11cDogQnJvd3NlcldpbmRvdyB8IHVuZGVmaW5lZDtcbiAgbGV0IGVycm9yOiB1bmtub3duO1xuICB0cnkge1xuICAgIHdhcm11cCA9IGF3YWl0IG9wZW5XaW5kb3dXaXRoUmV0cnkoeyBzb3VyY2UsIHJlbmRlcmVyLCBzaWduYWwgfSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBlcnJvciA9IGU7XG4gIH1cblxuICBjb25zdCBvcGVuID0gKCkgPT4gb3BlbldpbmRvdyh7IHNvdXJjZSwgcmVuZGVyZXIsIHByZWxvYWQsIG9uQ3JlYXRlZCwgc2lnbmFsLCB0b2xlcmFudDogcmVuZGVyZXIud2luZG93VG9sZXJhbnQgfSk7XG5cbiAgaWYgKHJlbmRlcmVyLndpbmRvd1RvbGVyYW50ICYmIGVycm9yID09PSBUSU1FT1VUX0VSUk9SKSB7XG4gICAgbG9nZ2VyLndhcm4oVEFHLCBgd2FybXVwIHRpbWVvdXQ6ICR7c291cmNlfSwgZmFsbGluZyBiYWNrIHRvIGRvbS1yZWFkeWApO1xuICAgIHJldHVybiBhd2FpdCBvcGVuKCk7XG4gIH1cblxuICBpZiAoZXJyb3IpIHtcbiAgICBjb25zdCB7IG1lc3NhZ2UsIHN0YWNrIH0gPSBlcnJvciBhcyBFcnJvcjtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGZhaWxlZCB0byB3YXJtdXAgd2luZG93OiAke0pTT04uc3RyaW5naWZ5KHsgc291cmNlLCBtZXNzYWdlLCBzdGFjayB9KX1gKTtcbiAgfVxuXG4gIGlmICh3YXJtdXApIHtcbiAgICB3YXJtdXAud2ViQ29udGVudHMucmVtb3ZlQWxsTGlzdGVuZXJzKCk7XG4gICAgdW5zZXRJbnRlcmNlcHRvcih3YXJtdXApO1xuICAgIGF3YWl0IHNsZWVwKDIwMDApO1xuICAgIGF3YWl0IGRpc3Bvc2VXaW5kb3cod2FybXVwKTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IG9wZW4oKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGNvbnN0IHsgbWVzc2FnZSwgc3RhY2sgfSA9IGUgYXMgRXJyb3I7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBmYWlsZWQgdG8gbG9hZCB3aW5kb3c6ICR7SlNPTi5zdHJpbmdpZnkoeyBzb3VyY2UsIG1lc3NhZ2UsIHN0YWNrIH0pfWApO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA5LlxuXG5pbXBvcnQgeyB0eXBlIE5hdGl2ZUltYWdlLCB0eXBlIFNpemUgfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IHJlc2l6ZURyYXdhYmxlIH0gZnJvbSBcIi4uL2Jhc2UvY2RwXCI7XG5pbXBvcnQgeyBwdXBBdWRpb1ByZWxvYWQgfSBmcm9tIFwiLi4vYmFzZS9jb25zdGFudHNcIjtcbmltcG9ydCB7IEVuY29kZXJQaXBlbGluZSB9IGZyb20gXCIuLi9iYXNlL2VuY29kZXIvcGlwZWxpbmVcIjtcbmltcG9ydCB7IEZyYW1lRHJvcFN0YXRzIH0gZnJvbSBcIi4uL2Jhc2UvZnJhbWVfZHJvcFwiO1xuaW1wb3J0IHsgc2l6ZUVxdWFscyB9IGZyb20gXCIuLi9iYXNlL2ltYWdlXCI7XG5pbXBvcnQgeyBhdHRhY2hBdWRpb0xpc3RlbmVycywgdHlwZSBBdWRpb0Rpc3Bvc2FsIH0gZnJvbSBcIi4vYXVkaW9cIjtcbmltcG9ydCB0eXBlIHsgSXBjRG9uZVBheWxvYWQgfSBmcm9tIFwiLi9pcGNcIjtcbmltcG9ydCB0eXBlIHsgSVBDUmVuZGVyT3B0aW9ucyB9IGZyb20gXCIuL3NjaGVtYVwiO1xuaW1wb3J0IHsgZGVjb2RlU3RlZ28sIHN0YXJ0U3RlZ28gfSBmcm9tIFwiLi9zdGVnb1wiO1xuaW1wb3J0IHsgZGlzcG9zZVdpbmRvdywgbG9hZFdpbmRvdyB9IGZyb20gXCIuL3dpbmRvd1wiO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVuZGVyKG9wdGlvbnM6IElQQ1JlbmRlck9wdGlvbnMpOiBQcm9taXNlPElwY0RvbmVQYXlsb2FkPiB7XG4gIGNvbnN0IHsgc291cmNlLCBmcHMsIHdpZHRoLCBoZWlnaHQsIGR1cmF0aW9uLCB3aXRoQXVkaW8sIG91dEZpbGUsIGRpc2FibGVId0NvZGVjLCBzaWduYWwsIG9uUHJvZ3Jlc3MgfSA9IG9wdGlvbnM7XG5cbiAgYXdhaXQgdXNpbmcgZW5jb2RlciA9IGF3YWl0IEVuY29kZXJQaXBlbGluZS5jcmVhdGUoeyB3aWR0aCwgaGVpZ2h0LCBmcHMsIG91dEZpbGUsIHdpdGhBdWRpbywgZGlzYWJsZUh3Q29kZWMgfSk7XG5cbiAgY29uc3QgdG90YWwgPSBNYXRoLmNlaWwoZnBzICogZHVyYXRpb24pO1xuICBjb25zdCBmcmFtZUludGVydmFsID0gMTAwMCAvIGZwcztcbiAgY29uc3QgZnJhbWVTaXplOiBTaXplID0geyB3aWR0aCwgaGVpZ2h0OiBoZWlnaHQgKyAxIH07XG5cbiAgbGV0IHdyaXR0ZW4gPSAwO1xuICBsZXQgbGFzdFdyaXR0ZW5UaW1lOiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gIGxldCBwcm9ncmVzcyA9IDA7XG4gIGxldCBlbmNvZGVFcnJvcjogRXJyb3IgfCB1bmRlZmluZWQ7XG4gIGxldCByZXNvbHZlcjogKCgpID0+IHZvaWQpIHwgdW5kZWZpbmVkO1xuICBsZXQgcmVqZWN0ZXI6ICgocmVhc29uPzogdW5rbm93bikgPT4gdm9pZCkgfCB1bmRlZmluZWQ7XG4gIGNvbnN0IGRyb3BTdGF0cyA9IG5ldyBGcmFtZURyb3BTdGF0cyhmcHMpO1xuXG4gIGxldCBkaXNwb3NlQXVkaW86IEF1ZGlvRGlzcG9zYWwgfCB1bmRlZmluZWQ7XG4gIGNvbnN0IHNjaGVkdWxlRnJhbWUgPSAoZnJhbWU6IEJ1ZmZlcikgPT4ge1xuICAgIHdyaXR0ZW4rKztcbiAgICBlbmNvZGVyLmVuY29kZUJHUkEoZnJhbWUpLmNhdGNoKChlKSA9PiAoZW5jb2RlRXJyb3IgPz89IGUpKTtcbiAgfTtcblxuICBjb25zdCBwYWludCA9IChfZTogdW5rbm93biwgX3I6IHVua25vd24sIGltYWdlOiBOYXRpdmVJbWFnZSkgPT4ge1xuICAgIGVuY29kZUVycm9yID8/PSBzaWduYWw/LnJlYXNvbjtcbiAgICBpZiAoZW5jb2RlRXJyb3IpIHtcbiAgICAgIHJlamVjdGVyPy4oZW5jb2RlRXJyb3IpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGltYWdlU2l6ZSA9IGltYWdlLmdldFNpemUoKTtcbiAgICBpZiAoIXNpemVFcXVhbHMoaW1hZ2VTaXplLCBmcmFtZVNpemUpKSB7XG4gICAgICAvLyBOT1RFKEF1dG9rYWthKTogV2UgbXVzdCBlbnN1cmUgZnJhbWUgaXMgcmVhZHkgb24gZWxlY3Ryb24gdjQxK1xuICAgICAgcmVzaXplRHJhd2FibGUoY2RwLCBmcmFtZVNpemUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIERlY29kZSBzdGVnbyB0aW1lc3RhbXAgZnJvbSB0aGUgYm90dG9tIHBpeGVsIHJvdyB3aXRob3V0IGZ1bGwgYml0bWFwIGNvcHlcbiAgICBjb25zdCBiaXRtYXAgPSBpbWFnZS50b0JpdG1hcCgpO1xuICAgIGNvbnN0IGN1cnJlbnRUaW1lID0gZGVjb2RlU3RlZ28oYml0bWFwLCBpbWFnZVNpemUpO1xuICAgIGlmIChjdXJyZW50VGltZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBlbmNvZGVFcnJvciA/Pz0gbmV3IEVycm9yKGBubyB0aW1lc3RhbXAgQCAke3dyaXR0ZW59YCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gU2tpcCBmcmFtZXMgdGhhdCBhcnJpdmUgdG9vIHNvb24gKDwgODAlIG9mIGZyYW1lIGludGVydmFsKVxuICAgIGlmIChsYXN0V3JpdHRlblRpbWUgIT09IHVuZGVmaW5lZCAmJiBjdXJyZW50VGltZSAtIGxhc3RXcml0dGVuVGltZSA8IGZyYW1lSW50ZXJ2YWwgKiAwLjgpIHJldHVybjtcblxuICAgIGNvbnN0IGNyb3BwZWQgPSBCdWZmZXIuZnJvbShiaXRtYXAuYnVmZmVyLCBiaXRtYXAuYnl0ZU9mZnNldCwgaGVpZ2h0ICogd2lkdGggKiA0KTtcblxuICAgIGlmIChsYXN0V3JpdHRlblRpbWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgc2NoZWR1bGVGcmFtZShjcm9wcGVkKTtcbiAgICAgIGRyb3BTdGF0cy53cm90ZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB0aW1lRGVsdGEgPSBjdXJyZW50VGltZSAtIGxhc3RXcml0dGVuVGltZTtcbiAgICAgIGlmICh0aW1lRGVsdGEgPD0gZnJhbWVJbnRlcnZhbCAqIDEuMikge1xuICAgICAgICBzY2hlZHVsZUZyYW1lKGNyb3BwZWQpO1xuICAgICAgICBkcm9wU3RhdHMud3JvdGUoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGZyYW1lc1RvSW5zZXJ0ID0gTWF0aC5yb3VuZCh0aW1lRGVsdGEgLyBmcmFtZUludGVydmFsKTtcbiAgICAgICAgZHJvcFN0YXRzLmRyb3BwZWQoZnJhbWVzVG9JbnNlcnQgLSAxKTtcbiAgICAgICAgZHJvcFN0YXRzLndyb3RlKCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZnJhbWVzVG9JbnNlcnQgJiYgd3JpdHRlbiA8IHRvdGFsOyBpKyspIHtcbiAgICAgICAgICBzY2hlZHVsZUZyYW1lKGNyb3BwZWQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGxhc3RXcml0dGVuVGltZSA9IGN1cnJlbnRUaW1lO1xuXG4gICAgY29uc3QgbmV3UHJvZ3Jlc3MgPSBNYXRoLmZsb29yKCh3cml0dGVuIC8gdG90YWwpICogMTAwKTtcbiAgICBpZiAoTWF0aC5hYnMobmV3UHJvZ3Jlc3MgLSBwcm9ncmVzcykgPiAxMCkge1xuICAgICAgcHJvZ3Jlc3MgPSBuZXdQcm9ncmVzcztcbiAgICAgIG9uUHJvZ3Jlc3MocHJvZ3Jlc3MpO1xuICAgIH1cblxuICAgIGNvbnN0IGR1cmF0aW9uTXMgPSBkdXJhdGlvbiAqIDEwMDA7XG4gICAgaWYgKGN1cnJlbnRUaW1lID49IGR1cmF0aW9uTXMgLSBmcmFtZUludGVydmFsICogMC41IHx8IHdyaXR0ZW4gPj0gdG90YWwpIHtcbiAgICAgIHJlc29sdmVyPy4oKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3Qgd2luID0gYXdhaXQgbG9hZFdpbmRvdyh7XG4gICAgc291cmNlLFxuICAgIHJlbmRlcmVyOiBvcHRpb25zLFxuICAgIHNpZ25hbCxcbiAgICBwcmVsb2FkOiB3aXRoQXVkaW8gPyBwdXBBdWRpb1ByZWxvYWQgOiB1bmRlZmluZWQsXG4gICAgb25DcmVhdGVkOiAod2luKSA9PiB7XG4gICAgICBpZiAod2l0aEF1ZGlvKSB7XG4gICAgICAgIGRpc3Bvc2VBdWRpbyA9IGF0dGFjaEF1ZGlvTGlzdGVuZXJzKHtcbiAgICAgICAgICB3Yzogd2luLndlYkNvbnRlbnRzLFxuICAgICAgICAgIGVuY29kZXIsXG4gICAgICAgICAgZ2V0VmlkZW9UaW1lTXM6ICgpID0+IGxhc3RXcml0dGVuVGltZSA/PyAwLFxuICAgICAgICAgIG9uRXJyb3I6IChlOiBFcnJvcikgPT4gKGVuY29kZUVycm9yID8/PSBlKSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSxcbiAgfSk7XG4gIGNvbnN0IGNkcCA9IHdpbi53ZWJDb250ZW50cy5kZWJ1Z2dlcjtcblxuICB0cnkge1xuICAgIHdpbi53ZWJDb250ZW50cy5zdG9wUGFpbnRpbmcoKTtcbiAgICB3aW4ud2ViQ29udGVudHMuc2V0RnJhbWVSYXRlKGZwcyk7XG4gICAgd2luLndlYkNvbnRlbnRzLm9uKFwicGFpbnRcIiwgcGFpbnQpO1xuICAgIHdpbi53ZWJDb250ZW50cy5zdGFydFBhaW50aW5nKCk7XG4gICAgc2lnbmFsPy50aHJvd0lmQWJvcnRlZCgpO1xuICAgIHNpZ25hbD8uYWRkRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsICgpID0+IHJlamVjdGVyPy4oc2lnbmFsLnJlYXNvbiksIHsgb25jZTogdHJ1ZSB9KTtcbiAgICBhd2FpdCBzdGFydFN0ZWdvKGNkcCk7XG4gICAgYXdhaXQgbmV3IFByb21pc2U8dm9pZD4oKHIsIGopID0+IChbcmVzb2x2ZXIsIHJlamVjdGVyXSA9IFtyLCBqXSkpO1xuICB9IGZpbmFsbHkge1xuICAgIHdpbi53ZWJDb250ZW50cy5vZmYoXCJwYWludFwiLCBwYWludCk7XG4gICAgYXdhaXQgZGlzcG9zZVdpbmRvdyh3aW4pO1xuICAgIGRpc3Bvc2VBdWRpbz8uKCk7XG4gICAgYXdhaXQgZW5jb2Rlci5maW5pc2goKTtcbiAgfVxuXG4gIGlmIChlbmNvZGVFcnJvciB8fCB3cml0dGVuID09PSAwKSB7XG4gICAgdGhyb3cgZW5jb2RlRXJyb3IgPz8gbmV3IEVycm9yKFwibm8gZnJhbWVzIGNhcHR1cmVkXCIpO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGRyb3BTY29yZSA9IGRyb3BTdGF0cy5maW5hbGl6ZSgpO1xuICAgIHJldHVybiB7IHdyaXR0ZW4sIGphbms6IGRyb3BTY29yZS5qYW5rLCBvdXRGaWxlIH07XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMDEuXG5cbmltcG9ydCB0eXBlIHsgV2ViRnJhbWVNYWluIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi4vYmFzZS9sb2dnaW5nXCI7XG5pbXBvcnQgeyB3aXRoVGltZW91dCB9IGZyb20gXCIuLi9iYXNlL3RpbWluZ1wiO1xuXG5leHBvcnQgY29uc3QgVElDS19TWU1CT0wgPSBcIl9fcHVwX3RpY2tfX1wiO1xuY29uc3QgVEFHID0gYFtUaWNrXWA7XG5cbmNvbnN0IEhPT0sgPSBgKGZ1bmN0aW9uKCkge1xuICBpZiAod2luZG93LnNlbGYgPT09IHdpbmRvdy50b3ApIHJldHVybjtcbiAgaWYgKHR5cGVvZiAke1RJQ0tfU1lNQk9MfSAhPT0gJ3VuZGVmaW5lZCcpIHJldHVybjtcblxuICBjb25zdCBvcmlnID0ge1xuICAgIERhdGU6IERhdGUsXG4gICAgZGF0ZU5vdzogRGF0ZS5ub3cuYmluZChEYXRlKSxcbiAgICBwZXJmb3JtYW5jZU5vdzogcGVyZm9ybWFuY2Uubm93LmJpbmQocGVyZm9ybWFuY2UpLFxuICAgIHJhZjogcmVxdWVzdEFuaW1hdGlvbkZyYW1lLmJpbmQod2luZG93KSxcbiAgICBjYWY6IGNhbmNlbEFuaW1hdGlvbkZyYW1lLmJpbmQod2luZG93KSxcbiAgICBzZXRUaW1lb3V0OiBzZXRUaW1lb3V0LmJpbmQod2luZG93KSxcbiAgICBjbGVhclRpbWVvdXQ6IGNsZWFyVGltZW91dC5iaW5kKHdpbmRvdyksXG4gICAgc2V0SW50ZXJ2YWw6IHNldEludGVydmFsLmJpbmQod2luZG93KSxcbiAgICBjbGVhckludGVydmFsOiBjbGVhckludGVydmFsLmJpbmQod2luZG93KSxcbiAgfTtcblxuICBsZXQgY3Vyck1zID0gMDtcbiAgbGV0IHJhZlF1ZXVlID0gW107XG4gIGNvbnN0IHRpbWVycyA9IHt9O1xuICBsZXQgbmV4dElkID0gMTtcbiAgY29uc3QgZGF0ZU9yaWdpbiA9IG5ldyBvcmlnLkRhdGUoKTtcbiAgY29uc3QgcGVyZk9yaWdpbiA9IG9yaWcucGVyZm9ybWFuY2VOb3coKTtcblxuICBwZXJmb3JtYW5jZS5ub3cgPSBmdW5jdGlvbigpIHsgcmV0dXJuIHBlcmZPcmlnaW4gKyBjdXJyTXM7IH07XG4gIERhdGUubm93ID0gZnVuY3Rpb24oKSB7IHJldHVybiBkYXRlT3JpZ2luLmdldFRpbWUoKSArIGN1cnJNczsgfTtcbiAgRGF0ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBPID0gb3JpZy5EYXRlO1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSByZXR1cm4gbmV3IE8oZGF0ZU9yaWdpbi5nZXRUaW1lKCkgKyBjdXJyTXMpO1xuICAgIHJldHVybiBuZXcgKEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLmFwcGx5KE8sIFtudWxsXS5jb25jYXQoQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKSkpKSgpO1xuICB9O1xuICBEYXRlLm5vdyA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gZGF0ZU9yaWdpbi5nZXRUaW1lKCkgKyBjdXJyTXM7IH07XG4gIERhdGUucGFyc2UgPSBvcmlnLkRhdGUucGFyc2U7XG4gIERhdGUuVVRDID0gb3JpZy5EYXRlLlVUQztcbiAgRGF0ZS5wcm90b3R5cGUgPSBvcmlnLkRhdGUucHJvdG90eXBlO1xuXG4gIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPSBmdW5jdGlvbihjYikge1xuICAgIGNvbnN0IGlkID0gbmV4dElkKys7XG4gICAgcmFmUXVldWUucHVzaCh7IGlkLCBjYiB9KTtcbiAgICByZXR1cm4gaWQ7XG4gIH07XG4gIHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSA9IGZ1bmN0aW9uKGlkKSB7XG4gICAgcmFmUXVldWUgPSByYWZRdWV1ZS5maWx0ZXIoKHIpID0+IHIuaWQgIT09IGlkKTtcbiAgfTtcblxuICB3aW5kb3cuc2V0VGltZW91dCA9IGZ1bmN0aW9uKGNiLCBkZWxheSwgLi4uYXJncykge1xuICAgIGNvbnN0IGlkID0gbmV4dElkKys7XG4gICAgdGltZXJzW2lkXSA9IHsgdHlwZTogJ3RpbWVvdXQnLCBjYiwgZGVsYXk6IGRlbGF5IHx8IDAsIG5leHQ6IGN1cnJNcyArIChkZWxheSB8fCAwKSwgYXJncyB9O1xuICAgIHJldHVybiBpZDtcbiAgfTtcbiAgd2luZG93LmNsZWFyVGltZW91dCA9IGZ1bmN0aW9uKGlkKSB7IGRlbGV0ZSB0aW1lcnNbaWRdOyB9O1xuXG4gIHdpbmRvdy5zZXRJbnRlcnZhbCA9IGZ1bmN0aW9uKGNiLCBkZWxheSwgLi4uYXJncykge1xuICAgIGNvbnN0IGlkID0gbmV4dElkKys7XG4gICAgY29uc3QgZCA9IE1hdGgubWF4KGRlbGF5IHx8IDAsIDEpO1xuICAgIHRpbWVyc1tpZF0gPSB7IHR5cGU6ICdpbnRlcnZhbCcsIGNiLCBkZWxheTogZCwgbmV4dDogY3Vyck1zICsgZCwgYXJncyB9O1xuICAgIHJldHVybiBpZDtcbiAgfTtcbiAgd2luZG93LmNsZWFySW50ZXJ2YWwgPSBmdW5jdGlvbihpZCkgeyBkZWxldGUgdGltZXJzW2lkXTsgfTtcblxuICBmdW5jdGlvbiBwcm9jZXNzKHRpbWVzdGFtcE1zKSB7XG4gICAgY3Vyck1zID0gdGltZXN0YW1wTXM7XG4gICAgZG9jdW1lbnQuZ2V0QW5pbWF0aW9ucygpLmZvckVhY2goYSA9PiB7XG4gICAgICBhLnBhdXNlKCk7XG4gICAgICBhLmN1cnJlbnRUaW1lID0gY3Vyck1zO1xuICAgIH0pO1xuICAgIGNvbnN0IGlkcyA9IE9iamVjdC5rZXlzKHRpbWVycyk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHQgPSB0aW1lcnNbaWRzW2ldXTtcbiAgICAgIGlmICghdCkgY29udGludWU7XG4gICAgICB3aGlsZSAodC5uZXh0IDw9IGN1cnJNcykge1xuICAgICAgICBpZiAodHlwZW9mIHQuY2IgPT09ICdzdHJpbmcnKSBldmFsKHQuY2IpOyBlbHNlIHQuY2IuYXBwbHkodW5kZWZpbmVkLCB0LmFyZ3MpO1xuICAgICAgICBpZiAodC50eXBlID09PSAndGltZW91dCcpIHsgZGVsZXRlIHRpbWVyc1tpZHNbaV1dOyBicmVhazsgfVxuICAgICAgICB0Lm5leHQgKz0gdC5kZWxheTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgcmFmcyA9IHJhZlF1ZXVlLnNwbGljZSgwKTtcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IHJhZnMubGVuZ3RoOyBqKyspIHtcbiAgICAgIHJhZnNbal0uY2IoY3Vyck1zKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBlamVjdCgpIHtcbiAgICBEYXRlID0gb3JpZy5EYXRlO1xuICAgIHBlcmZvcm1hbmNlLm5vdyA9IG9yaWcucGVyZm9ybWFuY2VOb3c7XG4gICAgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSA9IG9yaWcucmFmO1xuICAgIHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSA9IG9yaWcuY2FmO1xuICAgIHdpbmRvdy5zZXRUaW1lb3V0ID0gb3JpZy5zZXRUaW1lb3V0O1xuICAgIHdpbmRvdy5jbGVhclRpbWVvdXQgPSBvcmlnLmNsZWFyVGltZW91dDtcbiAgICB3aW5kb3cuc2V0SW50ZXJ2YWwgPSBvcmlnLnNldEludGVydmFsO1xuICAgIHdpbmRvdy5jbGVhckludGVydmFsID0gb3JpZy5jbGVhckludGVydmFsO1xuICAgIGRlbGV0ZSB3aW5kb3cuJHtUSUNLX1NZTUJPTH07XG4gIH1cblxuICB3aW5kb3cuJHtUSUNLX1NZTUJPTH0gPSB7IHByb2Nlc3M6IHByb2Nlc3MsIGVqZWN0OiBlamVjdCB9O1xufSkoKTtgO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdGljayhmcmFtZTogV2ViRnJhbWVNYWluIHwgdW5kZWZpbmVkLCB0aW1lc3RhbXBNczogbnVtYmVyKSB7XG4gIGlmICghZnJhbWUpIHJldHVybjtcbiAgdHJ5IHtcbiAgICBhd2FpdCB3aXRoVGltZW91dChcbiAgICAgIGZyYW1lLmV4ZWN1dGVKYXZhU2NyaXB0KGAke0hPT0t9ICR7VElDS19TWU1CT0x9LnByb2Nlc3MoJHt0aW1lc3RhbXBNc30pYCksXG4gICAgICA1XzAwMCxcbiAgICAgIFwidGljay5leGVjdXRlSmF2YVNjcmlwdFwiLFxuICAgICk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAvLyBOT1RFKEF1dG9rYWthKTpcbiAgICAvLyBTaWRlLWVmZmVjdHMgbWF5IHRocm93IChlLmcuIHVuY2F1Z2h0IGVycm9yIG9uIGFuaW1hdGlvbiBjYWxsYmFjayksIGlnbm9yZSB0byBsZXQgcmVjb3JkZXIgY29udGludWVcbiAgICAvLyBUaGUgZXJyb3JzIHdpbGwgYmUgZGlzcGF0Y2hlZCB0byB3aW5kb3cgY29uc29sZSwganVzdCBsaWtlIGhvdyByZW5kZXIudHMgd29ya3NcbiAgICBsb2dnZXIuZXJyb3IoVEFHLCBcInRpY2sgZmFpbGVkOlwiLCBlKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMy8xMy5cblxuaW1wb3J0IHtcbiAgdHlwZSBCcm93c2VyV2luZG93LFxuICB0eXBlIEV2ZW50LFxuICB0eXBlIE5hdGl2ZUltYWdlLFxuICB0eXBlIFJlY3RhbmdsZSxcbiAgdHlwZSBTaXplLFxuICB0eXBlIFdlYkNvbnRlbnRzUGFpbnRFdmVudFBhcmFtcyxcbn0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBwYXVzZVZpcnR1YWxUaW1lLCByZXNpemVEcmF3YWJsZSB9IGZyb20gXCIuLi9iYXNlL2NkcFwiO1xuaW1wb3J0IHsgRW5jb2RlclBpcGVsaW5lIH0gZnJvbSBcIi4uL2Jhc2UvZW5jb2Rlci9waXBlbGluZVwiO1xuaW1wb3J0IHsgc2l6ZUVxdWFscyB9IGZyb20gXCIuLi9iYXNlL2ltYWdlXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi4vYmFzZS9sb2dnaW5nXCI7XG5pbXBvcnQgeyB0eXBlIElwY0RvbmVQYXlsb2FkIH0gZnJvbSBcIi4vaXBjXCI7XG5pbXBvcnQgdHlwZSB7IElQQ1JlbmRlck9wdGlvbnMgfSBmcm9tIFwiLi9zY2hlbWFcIjtcbmltcG9ydCB7IGRlY29kZVN0ZWdvLCBzd2FwQnVmZmVyIH0gZnJvbSBcIi4vc3RlZ29cIjtcbmltcG9ydCB7IHRpY2sgfSBmcm9tIFwiLi90aWNrXCI7XG5pbXBvcnQgeyBkaXNwb3NlV2luZG93LCBsb2FkV2luZG93IH0gZnJvbSBcIi4vd2luZG93XCI7XG5cbmNvbnN0IFRBRyA9IFwiW1Nob290XVwiO1xuXG5pbnRlcmZhY2UgUGFpbnRPcHRpb25zIHtcbiAgc291cmNlOiBzdHJpbmc7XG4gIHdpbjogQnJvd3NlcldpbmRvdztcbiAgc2l6ZTogU2l6ZTtcbiAgbXM6IG51bWJlcjtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcGFpbnQoeyBzb3VyY2UsIHdpbiwgc2l6ZSwgbXMgfTogUGFpbnRPcHRpb25zKTogUHJvbWlzZTxCdWZmZXI+IHtcbiAgbGV0IGxhc3RUczogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICBsZXQgbGFnZ3kgPSAwO1xuICBjb25zdCBjZHAgPSB3aW4ud2ViQ29udGVudHMuZGVidWdnZXI7XG4gIGNvbnN0IGZyYW1lU2l6ZTogU2l6ZSA9IHsgd2lkdGg6IHNpemUud2lkdGgsIGhlaWdodDogc2l6ZS5oZWlnaHQgKyAxIH07XG4gIGNvbnN0IGludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgIGxvZ2dlci53YXJuKFRBRywgYCR7c291cmNlfSByZW5kZXIgaXMgZXh0cmVtZWx5IHNsb3cgQCAke21zfSwgY3VycmVudDogJHtsYXN0VHN9IHdpdGggJHtsYWdneX0gcmVwZWF0c2ApO1xuICAgIHdpbi53ZWJDb250ZW50cy5pbnZhbGlkYXRlKCk7XG4gIH0sIDEwMDApO1xuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBuZXcgUHJvbWlzZTxCdWZmZXI+KChyZXNvbHZlKSA9PiB7XG4gICAgICBjb25zdCBoYW5kbGVyID0gKF9lOiBFdmVudDxXZWJDb250ZW50c1BhaW50RXZlbnRQYXJhbXM+LCBfZDogUmVjdGFuZ2xlLCBpbWFnZTogTmF0aXZlSW1hZ2UpID0+IHtcbiAgICAgICAgY29uc3QgaW1hZ2VTaXplID0gaW1hZ2UuZ2V0U2l6ZSgpO1xuICAgICAgICBpZiAoIXNpemVFcXVhbHMoaW1hZ2VTaXplLCBmcmFtZVNpemUpKSB7XG4gICAgICAgICAgLy8gTk9URShBdXRva2FrYSk6IFdlIG11c3QgZW5zdXJlIGZyYW1lIGlzIHJlYWR5IG9uIGVsZWN0cm9uIHY0MStcbiAgICAgICAgICByZXNpemVEcmF3YWJsZShjZHAsIGZyYW1lU2l6ZSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGJpdG1hcCA9IGltYWdlLnRvQml0bWFwKCk7XG4gICAgICAgIGNvbnN0IHRzID0gZGVjb2RlU3RlZ28oYml0bWFwLCBpbWFnZVNpemUpO1xuICAgICAgICBpZiAodHMgPT09IHVuZGVmaW5lZCB8fCBNYXRoLmFicyh0cyAtIG1zKSA+IDEpIHtcbiAgICAgICAgICBsYXN0VHMgPSB0cztcbiAgICAgICAgICBsYWdneSsrO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB3aW4ud2ViQ29udGVudHMub2ZmKFwicGFpbnRcIiwgaGFuZGxlcik7XG4gICAgICAgIHJlc29sdmUoQnVmZmVyLmZyb20oYml0bWFwLmJ1ZmZlciwgYml0bWFwLmJ5dGVPZmZzZXQsIHNpemUuaGVpZ2h0ICogc2l6ZS53aWR0aCAqIDQpKTtcbiAgICAgICAgd2luLndlYkNvbnRlbnRzLnN0b3BQYWludGluZygpO1xuICAgICAgfTtcbiAgICAgIHdpbi53ZWJDb250ZW50cy5vbihcInBhaW50XCIsIGhhbmRsZXIpO1xuICAgICAgd2luLndlYkNvbnRlbnRzLnN0YXJ0UGFpbnRpbmcoKTtcbiAgICB9KTtcbiAgfSBmaW5hbGx5IHtcbiAgICBjbGVhckludGVydmFsKGludGVydmFsKTtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2hvb3Qob3B0aW9uczogSVBDUmVuZGVyT3B0aW9ucyk6IFByb21pc2U8SXBjRG9uZVBheWxvYWQ+IHtcbiAgY29uc3QgeyBzb3VyY2UsIGZwcywgd2lkdGgsIGhlaWdodCwgZHVyYXRpb24sIHdpdGhBdWRpbywgb3V0RmlsZSwgZGlzYWJsZUh3Q29kZWMsIHNpZ25hbCwgb25Qcm9ncmVzcyB9ID0gb3B0aW9ucztcbiAgaWYgKHdpdGhBdWRpbykgbG9nZ2VyLndhcm4oVEFHLCBcImF1ZGlvIHdpbGwgYmUgaWdub3JlZCBvbiB0aGlzIG1vZGVcIik7XG5cbiAgY29uc3QgdEluaXQgPSBwZXJmb3JtYW5jZS5ub3coKTtcbiAgY29uc3Qgd2luUCA9IGxvYWRXaW5kb3coeyBzb3VyY2UsIHJlbmRlcmVyOiBvcHRpb25zLCBzaWduYWwgfSk7XG4gIGF3YWl0IHVzaW5nIHBpcGVsaW5lID0gYXdhaXQgRW5jb2RlclBpcGVsaW5lLmNyZWF0ZSh7IHdpZHRoLCBoZWlnaHQsIGZwcywgb3V0RmlsZSwgd2l0aEF1ZGlvLCBkaXNhYmxlSHdDb2RlYyB9KTtcbiAgY29uc3Qgd2luID0gYXdhaXQgd2luUDtcbiAgbG9nZ2VyLmRlYnVnKFRBRywgXCJpbml0IGRvbmU6XCIsIHsgc291cmNlLCBjb3N0OiBwZXJmb3JtYW5jZS5ub3coKSAtIHRJbml0IH0pO1xuXG4gIGNvbnN0IHRvdGFsID0gTWF0aC5jZWlsKGZwcyAqIGR1cmF0aW9uKTtcbiAgY29uc3QgZnJhbWVJbnRlcnZhbCA9IDEwMDAgLyBmcHM7XG5cbiAgbGV0IHdyaXR0ZW4gPSAwO1xuICBsZXQgcHJvZ3Jlc3MgPSAwO1xuICBsZXQgZW5jb2RlRXJyb3I6IEVycm9yIHwgdW5kZWZpbmVkO1xuICBjb25zdCBjZHAgPSB3aW4ud2ViQ29udGVudHMuZGVidWdnZXI7XG4gIGNvbnN0IG1haW4gPSB3aW4ud2ViQ29udGVudHMubWFpbkZyYW1lO1xuICBjb25zdCBpZnJhbWUgPSBtYWluLmZyYW1lc1swXTtcbiAgdHJ5IHtcbiAgICB3aW4ud2ViQ29udGVudHMuc2V0RnJhbWVSYXRlKGZwcyk7XG4gICAgd2luLndlYkNvbnRlbnRzLnN0b3BQYWludGluZygpO1xuICAgIGF3YWl0IHBhdXNlVmlydHVhbFRpbWUoY2RwKTtcblxuICAgIGZvciAobGV0IGZyYW1lID0gMDsgZnJhbWUgPCB0b3RhbDsgZnJhbWUrKykge1xuICAgICAgc2lnbmFsPy50aHJvd0lmQWJvcnRlZCgpO1xuICAgICAgY29uc3QgZnJhbWVNcyA9IChmcmFtZSArIDEpICogZnJhbWVJbnRlcnZhbDtcblxuICAgICAgYXdhaXQgdGljayhpZnJhbWUsIGZyYW1lTXMpO1xuICAgICAgYXdhaXQgc3dhcEJ1ZmZlcih3aW4ud2ViQ29udGVudHMsIGZyYW1lTXMsIGZyYW1lSW50ZXJ2YWwpO1xuICAgICAgY29uc3QgYml0bWFwID0gYXdhaXQgcGFpbnQoeyBzb3VyY2UsIHdpbiwgc2l6ZTogeyB3aWR0aCwgaGVpZ2h0IH0sIG1zOiBmcmFtZU1zIH0pO1xuICAgICAgLy8gS2ljayBvZmYgZW5jb2RlIHdpdGhvdXQgYXdhaXRpbmc7IHBpcGVsaW5lIGxpbWl0ZXIgc2VyaWFsaXplcyBpbnRlcm5hbGx5LlxuICAgICAgLy8gRW5jb2RlIHJ1bnMgY29uY3VycmVudCB3aXRoIG5leHQgZnJhbWUncyBDRFAvcGFpbnQgc2V0dXAuXG4gICAgICBwaXBlbGluZS5lbmNvZGVCR1JBKGJpdG1hcCkuY2F0Y2goKGUpID0+IChlbmNvZGVFcnJvciA/Pz0gZSkpO1xuICAgICAgd3JpdHRlbisrO1xuICAgICAgaWYgKGVuY29kZUVycm9yKSB0aHJvdyBlbmNvZGVFcnJvcjtcblxuICAgICAgY29uc3QgbmV3UHJvZ3Jlc3MgPSBNYXRoLmZsb29yKCh3cml0dGVuIC8gdG90YWwpICogMTAwKTtcbiAgICAgIGlmIChNYXRoLmFicyhuZXdQcm9ncmVzcyAtIHByb2dyZXNzKSA+IDEwKSB7XG4gICAgICAgIHByb2dyZXNzID0gbmV3UHJvZ3Jlc3M7XG4gICAgICAgIG9uUHJvZ3Jlc3MocHJvZ3Jlc3MpO1xuICAgICAgfVxuICAgIH1cbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCBkaXNwb3NlV2luZG93KHdpbik7XG4gICAgYXdhaXQgcGlwZWxpbmUuZmluaXNoKCk7XG4gIH1cblxuICBpZiAoZW5jb2RlRXJyb3IpIHRocm93IGVuY29kZUVycm9yO1xuICBpZiAod3JpdHRlbiA9PT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIm5vIGZyYW1lcyBjYXB0dXJlZFwiKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4geyB3cml0dGVuLCBqYW5rOiAwLCBvdXRGaWxlIH07XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDEvMzAuXG5cbmltcG9ydCB7IG9rIH0gZnJvbSBcImFzc2VydFwiO1xuaW1wb3J0IHsgYXBwLCBNZW51IH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBta2RpciB9IGZyb20gXCJmcy9wcm9taXNlc1wiO1xuaW1wb3J0IHsgZGlybmFtZSB9IGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyBzdGFydEVsZWN0cm9uQ3Jhc2hSZXBvcnRlciB9IGZyb20gXCIuL2Jhc2UvY3Jhc2hcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuL2Jhc2UvbG9nZ2luZ1wiO1xuaW1wb3J0IHsgbWFrZUNMSSB9IGZyb20gXCIuL2NvbW1vblwiO1xuaW1wb3J0IHsgSXBjTXNnVHlwZSwgSXBjV3JpdGVyLCB0eXBlIElwY01zZyB9IGZyb20gXCIuL3JlbmRlcmVyL2lwY1wiO1xuaW1wb3J0IHsgc2V0dXBQdXBQcm90b2NvbCB9IGZyb20gXCIuL3JlbmRlcmVyL3Byb3RvY29sXCI7XG5pbXBvcnQgeyByZW5kZXIgfSBmcm9tIFwiLi9yZW5kZXJlci9yZW5kZXJcIjtcbmltcG9ydCB7IHNob290IH0gZnJvbSBcIi4vcmVuZGVyZXIvc2hvb3RcIjtcblxuY29uc3QgVEFHID0gXCJbQXBwXVwiO1xuXG5mdW5jdGlvbiBwcmludEZlYXR1cmVzKCkge1xuICBsb2dnZXIuZGVidWcoVEFHLCBcImdwdSBmZWF0dXJlczpcIiwgYXBwLmdldEdQVUZlYXR1cmVTdGF0dXMoKSk7XG59XG5cbmNvbnN0IGN0cmwgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG5sZXQgZXhpdGluZyA9IGZhbHNlO1xuXG5zdGFydEVsZWN0cm9uQ3Jhc2hSZXBvcnRlcigpO1xuTWVudS5zZXRBcHBsaWNhdGlvbk1lbnUobnVsbCk7XG5hcHAuZG9jaz8uaGlkZSgpO1xuYXBwLm9uKFwid2luZG93LWFsbC1jbG9zZWRcIiwgKCkgPT4ge30pO1xuYXBwLm9uKFwiZ3B1LWluZm8tdXBkYXRlXCIsIHByaW50RmVhdHVyZXMpO1xuYXBwLm9uKFwiYmVmb3JlLXF1aXRcIiwgKGUpID0+ICFleGl0aW5nICYmIGUucHJldmVudERlZmF1bHQoKSk7XG5hcHAub24oXCJ3aWxsLXF1aXRcIiwgKGUpID0+ICFleGl0aW5nICYmIGUucHJldmVudERlZmF1bHQoKSk7XG5cbm9rKHByb2Nlc3Muc2VuZCwgXCJpcGMgY2hhbm5lbCBtaXNzaW5nIOKAlCBzcGF3biB3aXRoIHN0ZGlvWzNdPSdpcGMnXCIpO1xucHJvY2Vzcy5vbmNlKFwiZGlzY29ubmVjdFwiLCAoKSA9PiBjdHJsLmFib3J0KFwiZGlzY29ubmVjdFwiKSk7XG5wcm9jZXNzLm9uKFwibWVzc2FnZVwiLCAocmF3KSA9PiB7XG4gIGNvbnN0IG1zZyA9IHJhdyBhcyBJcGNNc2c7XG4gIGlmIChtc2cudHlwZSA9PT0gSXBjTXNnVHlwZS5DQU5DRUwpIGN0cmwuYWJvcnQobXNnLnJlYXNvbik7XG59KTtcblxubWFrZUNMSSh7XG4gIG5hbWU6IFwiYXBwXCIsXG4gIHJ1bjogYXN5bmMgKHNvdXJjZSwgb3B0aW9ucykgPT4ge1xuICAgIGNvbnN0IGlwYyA9IG5ldyBJcGNXcml0ZXIoKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgYXBwLndoZW5SZWFkeSgpO1xuICAgICAgc2V0dXBQdXBQcm90b2NvbCgpO1xuICAgICAgcHJpbnRGZWF0dXJlcygpO1xuICAgICAgZm9yIChjb25zdCBvdXQgb2Ygb3B0aW9ucy5vdXRGaWxlLnNwbGl0KFwiLFwiKSkge1xuICAgICAgICBhd2FpdCBta2RpcihkaXJuYW1lKG91dCksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgfVxuICAgICAgY29uc3QgYWN0aW9uID0gb3B0aW9ucy5kZXRlcm1pbmlzdGljID8gc2hvb3QgOiByZW5kZXI7XG4gICAgICBjdHJsLnNpZ25hbC50aHJvd0lmQWJvcnRlZCgpO1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYWN0aW9uKHtcbiAgICAgICAgc291cmNlLFxuICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICBzaWduYWw6IGN0cmwuc2lnbmFsLFxuICAgICAgICBvblByb2dyZXNzOiAocCkgPT4gaXBjLndyaXRlUHJvZ3Jlc3MocCksXG4gICAgICAgIG9uQ29uc29sZTogKGwsIG0pID0+IGlwYy53cml0ZUNvbnNvbGUobCwgbSksXG4gICAgICB9KTtcbiAgICAgIGF3YWl0IGlwYy53cml0ZURvbmUocmVzdWx0KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zdCBlcnJvciA9IGUgYXMgRXJyb3I7XG4gICAgICBjb25zdCBtID0gZXJyb3Iuc3RhY2sgPz8gZXJyb3IubWVzc2FnZSA/PyBTdHJpbmcoZSA/PyBcInVua25vd24gZXJyb3JcIik7XG4gICAgICBhd2FpdCBpcGMud3JpdGVFcnJvcihtKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgZXhpdGluZyA9IHRydWU7XG4gICAgICBhcHAuZXhpdCgpO1xuICAgIH1cbiAgfSxcbn0pO1xuIl19