pup-recorder 0.4.6 → 0.4.7
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 +3 -3
- package/package.json +1 -1
package/dist/app.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
'use strict';require('source-map-support/register.js');var assert=require('assert'),promises=require('fs/promises'),path=require('path'),electron=require('electron'),fs=require('fs'),nodeAv=require('node-av'),constants=require('node-av/constants'),module$1=require('module'),commander=require('commander');require('child_process'),require('tree-kill');var F=require('zod');require('events');var api=require('node-av/api'),promises$1=require('timers/promises'),url=require('url'),crypto=require('crypto'),os=require('os');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var F__default=/*#__PURE__*/_interopDefault(F);var po=Object.create;var nt=Object.defineProperty;var mo=Object.getOwnPropertyDescriptor;var Te=(r,e)=>(e=Symbol[r])?e:Symbol.for("Symbol."+r),K=r=>{throw TypeError(r)};var Dt=(r,e,t)=>e in r?nt(r,e,{enumerable:true,configurable:true,writable:true,value:t}):r[e]=t;var Nt=r=>[,,,po(null)],Vt=["class","method","getter","setter","accessor","field","value","get","set"],ve=r=>r!==void 0&&typeof r!="function"?K("Function expected"):r,lo=(r,e,t,o,n)=>({kind:Vt[r],name:e,metadata:o,addInitializer:i=>t._?K("Already initialized"):n.push(ve(i||null))}),it=(r,e)=>Dt(e,Te("metadata"),r[3]),Ht=(r,e,t,o)=>{for(var n=0,i=r[e>>1],s=i&&i.length;n<s;n++)i[n].call(t);return o},re=(r,e,t,o,n,i)=>{var c,a,d,p,u=e&7,l=false,m=false,w=2,f=Vt[u+5],P=r[w]||(r[w]=[]),v=((n=n.prototype),mo(n,t));for(var E=o.length-1;E>=0;E--)d=lo(u,t,a={},r[3],P),(d.static=l,d.private=m,p=d.access={has:b=>t in b},(p.get=b=>b[t]),u>2),c=(0, o[E])(v[f],d),a._=1,ve(c)&&(v[f]=c);return v&&nt(n,t,v),n},Ut=(r,e,t)=>Dt(r,e+"",t);var _=(r,e,t)=>{if(e!=null){typeof e!="object"&&typeof e!="function"&&K("Object expected");var o,n;t&&(o=e[Te("asyncDispose")]),o===void 0&&(o=e[Te("dispose")],t&&(n=o)),typeof o!="function"&&K("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},x=(r,e,t)=>{var o=typeof SuppressedError=="function"?SuppressedError:function(s,c,a,d){return d=Error(a),d.name="SuppressedError",d.error=s,d.suppressed=c,d},n=s=>e=t?new o(s,e,"An error was suppressed during disposal"):(t=true,s),i=s=>{for(;s=r.pop();)try{var c=s[1]&&s[1].call(s[2]);if(s[0])return Promise.resolve(c).then(i,a=>(n(a),i()))}catch(a){n(a);}if(t)throw e};return i()};var wo=()=>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,h=wo();function Wt(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 bo=module$1.createRequire(h),$t=Wt("PUP_LOG_LEVEL",U,2),ct=path.dirname(bo.resolve("pup-recorder/package.json"));path.join(ct,"dist","app.cjs");var Gt=path.join(ct,"dist","runtime","audio_preload.cjs"),zt=path.join(ct,"dist","runtime","iframe_preload.cjs");var dt="<pup@debug>",ut="<pup@info>",pt="<pup@warn>",mt="<pup@error>",lt="<pup@fatal>";function ye(r,e){return function(...t){let o=t.map(n=>n instanceof Error?n.stack??String(n):n);return r.call(this,...o)}}var jt,qt,Xt,Yt,Kt,Q;Kt=[ye],Yt=[ye],Xt=[ye],qt=[ye],jt=[ye];var V=class{constructor(e=$t){this._level=e;Ht(Q,5,this);Ut(this,"_impl");this.impl=console;}_level;get level(){return this._level}set level(e){this._level=e,this.impl=this._impl??console;}get impl(){return this._impl}set impl(e){let t=e.debug??console.debug,o=e.info??console.info,n=e.warn??console.warn,i=e.error??console.error,s=this._level;this._impl={debug:s>=3?t:void 0,info:s>=2?o:void 0,warn:s>=1?n:void 0,error:s>=0?i:void 0};}debug(...e){this.impl?.debug?.(dt,...e);}info(...e){this.impl?.info?.(ut,...e);}warn(...e){this.impl?.warn?.(pt,...e);}error(...e){this.impl?.error?.(mt,...e);}fatal(...e){this.impl?.error?.(lt,...e),process.exit(1);}dispatch(e){let t=e.trimEnd();t.startsWith(dt)?this.debug(t.slice(dt.length+1)):t.startsWith(ut)?this.info(t.slice(ut.length+1)):t.startsWith(pt)?this.warn(t.slice(pt.length+1)):t.startsWith(mt)?this.error(t.slice(mt.length+1)):this.info(t);}attach(e,t){return new Promise((o,n)=>{this.debug(`${t}.attach`);let i="",s=c=>{let a=c.toString();a.startsWith(lt)?i+=a.slice(lt.length+1):this.dispatch(a);};e.stderr?.on("data",s),e.stdout?.on("data",s),e.on("error",c=>{i+=c.message,e.kill();}).once("close",(c,a)=>{c||a||i?(i||=`command failed: ${e.spawnargs.join(" ")}`,this.debug(`${t}.close`,{code:c,signal:a,fatal:i}),n(new Error(i))):(this.debug(`${t}.close`),o());}).on("unhandledRejection",c=>{this.error(`${t}.unhandled`,c);}).on("uncaughtExceptionMonitor",c=>{this.error(`${t}.unhandled`,c);});})}};Q=Nt(),re(Q,1,"debug",Kt,V),re(Q,1,"info",Yt,V),re(Q,1,"warn",Xt,V),re(Q,1,"error",qt,V),re(Q,1,"fatal",jt,V),it(Q,V);var g=new V;nodeAv.Log.setCallback((r,e)=>{let t=e.trimEnd();t&&(r<=constants.AV_LOG_ERROR?g.error(t):r<=constants.AV_LOG_WARNING&&g.warn(t));});var Co="[Crash]";function Jt(){let r=path.join(electron.app.getPath("appData"),"pup-recorder","crashes");fs.mkdirSync(r,{recursive:true}),electron.app.setPath("crashDumps",r),electron.crashReporter.start({productName:"pup-recorder",uploadToServer:false,compress:false,ignoreSystemCrashHandler:true}),g.debug(Co,"set dump to",r);}function oe(r,e){return (...t)=>{try{let o=r(...t);return o instanceof Promise?o.catch(()=>e):o}catch{return e}}}var Fo="--pup-priv-args";function Zt(){let r=process.argv,e=r.find(o=>o.startsWith(Fo));if(!e)return g.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)),g.debug("pupargs",t),t}var Ao=1920,ko=1080,To=30,Ro=5,Io=10,Bo="out/html.mp4,out/html.webm",er=F__default.default.object({duration:F__default.default.number().describe("Duration in seconds"),width:F__default.default.number().describe("Video width"),height:F__default.default.number().describe("Video height"),fps:F__default.default.number().describe("Frames per second"),withAudio:F__default.default.boolean().describe("Capture and encode audio"),outFile:F__default.default.string().describe("Comma-separated output paths; extension (.mp4/.webm) selects encoder"),useInnerProxy:F__default.default.boolean().describe("Use bilibili inner proxy for resource access"),deterministic:F__default.default.boolean().describe("Render by frame rather than recording"),disableGpu:F__default.default.boolean().describe("Disable GPU rendering, may reduce performance but increase stability"),disableHwCodec:F__default.default.boolean().describe("Disable hardware video encoder (NVENC/VideoToolbox), use software x265"),windowTolerant:F__default.default.boolean().describe("Fall back to dom-ready if warmup load times out"),windowTimeout:F__default.default.number().describe("Window load timeout in seconds")}),tr={width:Ao,height:ko,fps:To,duration:Ro,outFile:Bo,withAudio:false,useInnerProxy:false,deterministic:false,disableGpu:false,disableHwCodec:false,windowTolerant:false,windowTimeout:Io};function Lo(r){if(r.includes("://")||r.startsWith("data:"))return r;let e;try{e=fs.realpathSync(r);}catch{e=path.resolve(r);}return `file://${e}`}async function or(r){let e=er.shape,t=tr;commander.program.name(r.name).argument("<source>","file://, http(s)://, data: URI, or filesystem path").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).option("--window-timeout <number>",e.windowTimeout.description,`${t.windowTimeout}`).action(async(o,n)=>{try{await r.run(Lo(o),{width:oe(U,t.width)(n.width),height:oe(U,t.height)(n.height),fps:oe(U,t.fps)(n.fps),duration:oe(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,windowTimeout:oe(U,t.windowTimeout)(n.windowTimeout)});}catch(i){g.fatal(i);}}),await commander.program.parseAsync(Zt());}var Re=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 Ie(r){return new Promise(e=>setTimeout(e,r))}function J(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));})}function ft(r,e){return e?new Promise((t,o)=>{let n=()=>o(e.reason);e.addEventListener("abort",n,{once:true}),r.then(t,o).finally(()=>e.removeEventListener("abort",n));}):r}var Be=5e3;function Me(r,e,t){return J(r.sendCommand(e,t),Be,`cdp.${e}`)}function ht(r,e){return J(Me(r,"Runtime.evaluate",{expression:e}),Be,"evalIn")}function nr(r,e){return new Promise((t,o)=>{let n=setTimeout(()=>{r.off("message",i),o(new Error(`advanceVirtualTime timed out after ${Be}ms`));},Be),i=(s,c)=>{c==="Emulation.virtualTimeBudgetExpired"&&(clearTimeout(n),r.off("message",i),t());};r.on("message",i),Me(r,"Emulation.setVirtualTimePolicy",{policy:"advance",budget:e}).catch(s=>{clearTimeout(n),r.off("message",i),o(s);});})}async function ir(r){await Me(r,"Emulation.setVirtualTimePolicy",{policy:"pause"});}async function Oe(r,e){await Me(r,"Emulation.setDeviceMetricsOverride",{...e,deviceScaleFactor:1,mobile:false});}var ne=32;var sr="stego-tick";function ar(r,e){let{width:t,height:o}=e;return `<!DOCTYPE html>
|
|
1
|
+
'use strict';require('source-map-support/register.js');var assert=require('assert'),promises=require('fs/promises'),path=require('path'),electron=require('electron'),fs=require('fs'),nodeAv=require('node-av'),constants=require('node-av/constants'),module$1=require('module'),commander=require('commander');require('child_process'),require('tree-kill');var A=require('zod');require('events');var api=require('node-av/api'),promises$1=require('timers/promises'),url=require('url'),crypto=require('crypto'),os=require('os');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var A__default=/*#__PURE__*/_interopDefault(A);var po=Object.create;var nt=Object.defineProperty;var mo=Object.getOwnPropertyDescriptor;var Te=(r,e)=>(e=Symbol[r])?e:Symbol.for("Symbol."+r),K=r=>{throw TypeError(r)};var Lt=(r,e,t)=>e in r?nt(r,e,{enumerable:true,configurable:true,writable:true,value:t}):r[e]=t;var Nt=r=>[,,,po(null)],Vt=["class","method","getter","setter","accessor","field","value","get","set"],ve=r=>r!==void 0&&typeof r!="function"?K("Function expected"):r,lo=(r,e,t,o,n)=>({kind:Vt[r],name:e,metadata:o,addInitializer:i=>t._?K("Already initialized"):n.push(ve(i||null))}),it=(r,e)=>Lt(e,Te("metadata"),r[3]),Ht=(r,e,t,o)=>{for(var n=0,i=r[e>>1],s=i&&i.length;n<s;n++)i[n].call(t);return o},re=(r,e,t,o,n,i)=>{var c,a,d,p,u=e&7,l=false,m=false,h=2,w=Vt[u+5],P=r[h]||(r[h]=[]),v=((n=n.prototype),mo(n,t));for(var E=o.length-1;E>=0;E--)d=lo(u,t,a={},r[3],P),(d.static=l,d.private=m,p=d.access={has:b=>t in b},(p.get=b=>b[t]),u>2),c=(0, o[E])(v[w],d),a._=1,ve(c)&&(v[w]=c);return v&&nt(n,t,v),n},Ut=(r,e,t)=>Lt(r,e+"",t);var _=(r,e,t)=>{if(e!=null){typeof e!="object"&&typeof e!="function"&&K("Object expected");var o,n;t&&(o=e[Te("asyncDispose")]),o===void 0&&(o=e[Te("dispose")],t&&(n=o)),typeof o!="function"&&K("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},x=(r,e,t)=>{var o=typeof SuppressedError=="function"?SuppressedError:function(s,c,a,d){return d=Error(a),d.name="SuppressedError",d.error=s,d.suppressed=c,d},n=s=>e=t?new o(s,e,"An error was suppressed during disposal"):(t=true,s),i=s=>{for(;s=r.pop();)try{var c=s[1]&&s[1].call(s[2]);if(s[0])return Promise.resolve(c).then(i,a=>(n(a),i()))}catch(a){n(a);}if(t)throw e};return i()};var wo=()=>typeof document>"u"?new URL(`file:${__filename}`).href:document.currentScript&&document.currentScript.tagName.toUpperCase()==="SCRIPT"?document.currentScript.src:new URL("main.js",document.baseURI).href,f=wo();function Wt(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 bo=module$1.createRequire(f),$t=Wt("PUP_LOG_LEVEL",U,2),ct=path.dirname(bo.resolve("pup-recorder/package.json"));path.join(ct,"dist","app.cjs");var Gt=path.join(ct,"dist","runtime","audio_preload.cjs"),zt=path.join(ct,"dist","runtime","iframe_preload.cjs");var dt="<pup@debug>",ut="<pup@info>",pt="<pup@warn>",mt="<pup@error>",lt="<pup@fatal>";function ye(r,e){return function(...t){let o=t.map(n=>n instanceof Error?n.stack??String(n):n);return r.call(this,...o)}}var jt,qt,Xt,Yt,Kt,Q;Kt=[ye],Yt=[ye],Xt=[ye],qt=[ye],jt=[ye];var V=class{constructor(e=$t){this._level=e;Ht(Q,5,this);Ut(this,"_impl");this.impl=console;}_level;get level(){return this._level}set level(e){this._level=e,this.impl=this._impl??console;}get impl(){return this._impl}set impl(e){let t=e.debug??console.debug,o=e.info??console.info,n=e.warn??console.warn,i=e.error??console.error,s=this._level;this._impl={debug:s>=3?t:void 0,info:s>=2?o:void 0,warn:s>=1?n:void 0,error:s>=0?i:void 0};}debug(...e){this.impl?.debug?.(dt,...e);}info(...e){this.impl?.info?.(ut,...e);}warn(...e){this.impl?.warn?.(pt,...e);}error(...e){this.impl?.error?.(mt,...e);}fatal(...e){this.impl?.error?.(lt,...e),process.exit(1);}dispatch(e){let t=e.trimEnd();t.startsWith(dt)?this.debug(t.slice(dt.length+1)):t.startsWith(ut)?this.info(t.slice(ut.length+1)):t.startsWith(pt)?this.warn(t.slice(pt.length+1)):t.startsWith(mt)?this.error(t.slice(mt.length+1)):this.info(t);}attach(e,t){return new Promise((o,n)=>{this.debug(`${t}.attach`);let i="",s=c=>{let a=c.toString();a.startsWith(lt)?i+=a.slice(lt.length+1):this.dispatch(a);};e.stderr?.on("data",s),e.stdout?.on("data",s),e.on("error",c=>{i+=c.message,e.kill();}).once("close",(c,a)=>{c||a||i?(i||=`command failed: ${e.spawnargs.join(" ")}`,this.debug(`${t}.close`,{code:c,signal:a,fatal:i}),n(new Error(i))):(this.debug(`${t}.close`),o());}).on("unhandledRejection",c=>{this.error(`${t}.unhandled`,c);}).on("uncaughtExceptionMonitor",c=>{this.error(`${t}.unhandled`,c);});})}};Q=Nt(),re(Q,1,"debug",Kt,V),re(Q,1,"info",Yt,V),re(Q,1,"warn",Xt,V),re(Q,1,"error",qt,V),re(Q,1,"fatal",jt,V),it(Q,V);var g=new V;nodeAv.Log.setCallback((r,e)=>{let t=e.trimEnd();t&&(r<=constants.AV_LOG_ERROR?g.error(t):r<=constants.AV_LOG_WARNING&&g.warn(t));});var Co="[Crash]";function Jt(){let r=path.join(electron.app.getPath("appData"),"pup-recorder","crashes");fs.mkdirSync(r,{recursive:true}),electron.app.setPath("crashDumps",r),electron.crashReporter.start({productName:"pup-recorder",uploadToServer:false,compress:false,ignoreSystemCrashHandler:true}),g.debug(Co,"set dump to",r);}function oe(r,e){return (...t)=>{try{let o=r(...t);return o instanceof Promise?o.catch(()=>e):o}catch{return e}}}var Fo="--pup-priv-args";function Zt(){let r=process.argv,e=r.find(o=>o.startsWith(Fo));if(!e)return g.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)),g.debug("pupargs",t),t}var Ao=1920,ko=1080,To=30,Ro=5,Io=10,Bo="out/html.mp4,out/html.webm",er=A__default.default.object({duration:A__default.default.number().describe("Duration in seconds"),width:A__default.default.number().describe("Video width"),height:A__default.default.number().describe("Video height"),fps:A__default.default.number().describe("Frames per second"),withAudio:A__default.default.boolean().describe("Capture and encode audio"),outFile:A__default.default.string().describe("Comma-separated output paths; extension (.mp4/.webm) selects encoder"),useInnerProxy:A__default.default.boolean().describe("Use bilibili inner proxy for resource access"),deterministic:A__default.default.boolean().describe("Render by frame rather than recording"),disableGpu:A__default.default.boolean().describe("Disable GPU rendering, may reduce performance but increase stability"),disableHwCodec:A__default.default.boolean().describe("Disable hardware video encoder (NVENC/VideoToolbox), use software x265"),windowTolerant:A__default.default.boolean().describe("Fall back to dom-ready if warmup load times out"),windowTimeout:A__default.default.number().describe("Window load timeout in seconds")}),tr={width:Ao,height:ko,fps:To,duration:Ro,outFile:Bo,withAudio:false,useInnerProxy:false,deterministic:false,disableGpu:false,disableHwCodec:false,windowTolerant:false,windowTimeout:Io};function Oo(r){if(r.includes("://")||r.startsWith("data:"))return r;let e;try{e=fs.realpathSync(r);}catch{e=path.resolve(r);}return `file://${e}`}async function or(r){let e=er.shape,t=tr;commander.program.name(r.name).argument("<source>","file://, http(s)://, data: URI, or filesystem path").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).option("--window-timeout <number>",e.windowTimeout.description,`${t.windowTimeout}`).action(async(o,n)=>{try{await r.run(Oo(o),{width:oe(U,t.width)(n.width),height:oe(U,t.height)(n.height),fps:oe(U,t.fps)(n.fps),duration:oe(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,windowTimeout:oe(U,t.windowTimeout)(n.windowTimeout)});}catch(i){g.fatal(i);}}),await commander.program.parseAsync(Zt());}var Re=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 Ie(r){return new Promise(e=>setTimeout(e,r))}function J(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));})}function ft(r,e){return e?new Promise((t,o)=>{let n=()=>o(e.reason);e.addEventListener("abort",n,{once:true}),r.then(t,o).finally(()=>e.removeEventListener("abort",n));}):r}var Be=5e3;function Me(r,e,t){return J(r.sendCommand(e,t),Be,`cdp.${e}`)}function ht(r,e){return J(Me(r,"Runtime.evaluate",{expression:e}),Be,"evalIn")}function nr(r,e){return new Promise((t,o)=>{let n=setTimeout(()=>{r.off("message",i),o(new Error(`advanceVirtualTime timed out after ${Be}ms`));},Be),i=(s,c)=>{c==="Emulation.virtualTimeBudgetExpired"&&(clearTimeout(n),r.off("message",i),t());};r.on("message",i),Me(r,"Emulation.setVirtualTimePolicy",{policy:"advance",budget:e}).catch(s=>{clearTimeout(n),r.off("message",i),o(s);});})}async function ir(r){await Me(r,"Emulation.setVirtualTimePolicy",{policy:"pause"});}async function De(r,e){await Me(r,"Emulation.setDeviceMetricsOverride",{...e,deviceScaleFactor:1,mobile:false});}var ne=32;var sr="stego-tick";function ar(r,e){let{width:t,height:o}=e;return `<!DOCTYPE html>
|
|
2
2
|
<html>
|
|
3
3
|
<head>
|
|
4
4
|
<meta charset="UTF-8">
|
|
@@ -92,6 +92,6 @@
|
|
|
92
92
|
})();
|
|
93
93
|
</script>
|
|
94
94
|
</body>
|
|
95
|
-
</html>`}function Le(r,e){let{width:t,height:o}=e;if(t<ne||o<2)return;let n=o-1,i=0;for(let s=0;s<ne;s++){let c=(n*t+s)*4,d=(r[c]??0)>127?1:0;i=i<<1|d;}if(i=i>>>0,!(!Number.isFinite(i)||i<0||i>1e7))return i}function cr(r){return ht(r,"__pup_start_stego__()")}async function dr(r,e){await ht(r.debugger,`__pup_draw_stego__(${e})`);}async function ur(r){let e=new Promise(t=>r.ipc.once(sr,t));await J(e,5e3,"stego tick");}var wt="pup",Do="pup-frame",pr={standard:true,secure:true,bypassCSP:true,allowServiceWorkers:true,supportFetchAPI:true,corsEnabled:true,stream:true,codeCache:true};electron.protocol.registerSchemesAsPrivileged([{scheme:wt,privileges:pr},{scheme:Do,privileges:pr}]);function lr(){electron.protocol.handle(wt,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=ar(t,{width:o,height:n});return new Response(i,{headers:{"content-type":"text/html"}})});}function fr(r,e){let t=new URL(`${wt}://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()}function No(r,e,t){let o=Math.max(1,Math.floor(e/32)),n=Math.max(1,Math.floor(t/32)),i=255,s=0,c=255,a=0,d=255,p=0;for(let u=0;u<t;u+=n)for(let l=0;l<e;l+=o){let m=(u*e+l)*4,w=r.readUInt8(m),f=r.readUInt8(m+1),y=r.readUInt8(m+2);i=Math.min(i,y),s=Math.max(s,y),c=Math.min(c,f),a=Math.max(a,f),d=Math.min(d,w),p=Math.max(p,w);}return Math.max(s-i,a-c,p-d)<=8}var ie=class{_width;_height;_total=0;_blank=0;constructor(e,t){this._width=e,this._height=t;}sample(e){this._total++,No(e,this._width,this._height)&&this._blank++;}finalize(){return this._total>0?this._blank/this._total:0}};var se=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();}};var Pe="libvpx-vp9";async function H(r,e){var n=[];try{let t=new nodeAv.CodecContext;t.allocContext3(r.codec);let o=_(n,new DisposableStack);o.use(t);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[a,d]of Object.entries(r.options??{}))t.setOption(a,d);nodeAv.FFmpegError.throwIfError(await t.open2(r.codec,null),e);o.move();return t}catch(i){var s=i,c=true;}finally{x(n,s,c);}}function Z(r,e,t){var i=[];try{let o=new nodeAv.Frame;o.alloc();let n=_(i,new DisposableStack);n.use(o);o.format=t;o.width=r;o.height=e;nodeAv.FFmpegError.throwIfError(o.getBuffer(0),"frame.getBuffer");n.move();return o}catch(s){var c=s,a=true;}finally{x(i,c,a);}}function A(){let r=new nodeAv.Packet;return r.alloc(),r}async function ae(r,e,t,o){for(;;){let n=await r.receivePacket(e);if(n===constants.AVERROR_EAGAIN||n===constants.AVERROR_EOF)break;try{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);}finally{e.unref();}}}var W=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=A();}async png(){var o=[];try{let e=_(o,new DisposableStack);let t=new nodeAv.CodecContext;t.allocContext3(this._png);e.use(t);nodeAv.FFmpegError.throwIfError(await t.open2(this._png),"pngDecoder.open2");e.move();return t}catch(n){var i=n,s=true;}finally{x(o,i,s);}}async decodePNG(e){var o=[];try{let t=_(o,await this.png());this.pkt.data=e;nodeAv.FFmpegError.throwIfError(await t.sendPacket(this.pkt),"pngDecoder.sendPacket");this.pkt.unref();nodeAv.FFmpegError.throwIfError(await t.receiveFrame(this.src),"pngDecoder.receiveFrame");return this.src}catch(n){var i=n,s=true;}finally{x(o,i,s);}}get sws(){if(!this._sws){let e=new nodeAv.SoftwareScaleContext,t=this.src.format;e.getContext(this.src.width,this.src.height,t,this.src.width,this.src.height,nodeAv.AV_PIX_FMT_YUVA420P,nodeAv.SWS_BILINEAR),this._sws=e;}return this._sws}[Symbol.dispose](){this.src[Symbol.dispose](),this.dst[Symbol.dispose](),this.pkt[Symbol.dispose](),this._sws?.[Symbol.dispose]();}};var an={[constants.AV_SAMPLE_FMT_FLT]:"flt",[constants.AV_SAMPLE_FMT_FLTP]:"fltp"},De=class r{_ctx;_stream;_pkt;_outRate;_outFmt;_frameSize;_filterFrame;_graph;_bufSrc;_bufSink;_inRate;_pts=0n;constructor(e,t,o){this._ctx=e,this._stream=t,this._outRate=e.sampleRate,this._outFmt=o,this._frameSize=e.frameSize,this._pkt=A(),this._filterFrame=new nodeAv.Frame,this._filterFrame.alloc();}static async create(e){var s=[];try{let t=nodeAv.Codec.findEncoderByName(e.codecName);if(!t)throw new Error(`Audio encoder not found: ${e.codecName}`);let o=_(s,new DisposableStack);let n=new nodeAv.CodecContext;n.allocContext3(t);o.use(n);n.codecId=t.id;n.sampleFormat=e.outSampleFmt;n.sampleRate=e.outSampleRate;n.channelLayout=constants.AV_CHANNEL_LAYOUT_STEREO;n.timeBase=new nodeAv.Rational(1,e.outSampleRate);n.bitRate=BigInt(e.bitrate);e.globalHeader&&n.setFlags(constants.AV_CODEC_FLAG_GLOBAL_HEADER);nodeAv.FFmpegError.throwIfError(await n.open2(t,null),"audioCtx.open2");let i=e.muxer.addStream(n);o.move();return new r(n,i,e.outSampleFmt)}catch(c){var a=c,d=true;}finally{x(s,a,d);}}setInputRate(e){var l=[];try{this._graph?.[Symbol.dispose]();this._inRate=e;let t=_(l,new DisposableStack);let o=new nodeAv.FilterGraph;o.alloc();t.use(o);let n=nodeAv.Filter.getByName("abuffer");let i=o.createFilter(n,"src",`sample_rate=${e}:sample_fmt=flt:channel_layout=stereo:time_base=1/${e}`);if(!i)throw new Error("Failed to create abuffer");let s=nodeAv.Filter.getByName("abuffersink");let c=o.createFilter(s,"sink");if(!c)throw new Error("Failed to create abuffersink");let a=an[this._outFmt]??"flt";let d=`aformat=sample_fmts=${a}:sample_rates=${this._outRate}:channel_layouts=stereo,asetnsamples=n=${this._frameSize}:p=1`;let p=nodeAv.FilterInOut.createList([{name:"in",filterCtx:i,padIdx:0}]);let u=nodeAv.FilterInOut.createList([{name:"out",filterCtx:c,padIdx:0}]);nodeAv.FFmpegError.throwIfError(o.parsePtr(d,u,p),"graph.parsePtr");nodeAv.FFmpegError.throwIfError(o.configSync(),"graph.config");t.move();this._graph=o;this._bufSrc=i;this._bufSink=c;}catch(m){var w=m,f=true;}finally{x(l,w,f);}}async encode(e,t){var s=[];try{if(!this._bufSrc||!this._inRate)return;let o=new Float32Array(e.buffer,e.byteOffset,e.byteLength/4);for(let p=0;p<o.length;p++)Number.isFinite(o[p])||(o[p]=0);let n=o.length>>1;let i=_(s,nodeAv.Frame.fromAudioBuffer(Buffer.from(o.buffer,o.byteOffset,o.byteLength),{nbSamples:n,format:constants.AV_SAMPLE_FMT_FLT,sampleRate:this._inRate,channelLayout:constants.AV_CHANNEL_LAYOUT_STEREO,pts:this._pts,timeBase:{num:1,den:this._inRate}}));this._pts+=BigInt(n);nodeAv.FFmpegError.throwIfError(await this._bufSrc.buffersrcAddFrame(i),"buffersrcAddFrame");await this.drain(t);}catch(c){var a=c,d=true;}finally{x(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;try{nodeAv.FFmpegError.throwIfError(t,"buffersinkGetFrame"),nodeAv.FFmpegError.throwIfError(await this._ctx.sendFrame(this._filterFrame),"audioCtx.sendFrame"),await this.drainCodec(e);}finally{this._filterFrame.unref();}}}drainCodec(e){return ae(this._ctx,this._pkt,this._stream,e)}};function G(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 $=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]);}},I=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]);var bt=16;var xt=23,de=32,ue=33,Ne=34,yr=39;function Pr(r,e){let t=r>>1&63,o=(r&1)<<5|e>>3&31,n=e&7;return {type:t,layerId:o,temporalId:n}}function vt(r,e,t){let o=(r&63)<<1|e>>5&1,n=(e&31)<<3|t&7;return [o,n]}function O(r){let e=[],t=0;for(;t<r.length;){let o=0;if(t+3<r.length&&r[t]===0&&r[t+1]===0&&r[t+2]===1)o=3;else if(t+4<r.length&&r[t]===0&&r[t+1]===0&&r[t+2]===0&&r[t+3]===1)o=4;else {t++;continue}let n=t+o;if(n+2>r.length)break;let i=r.length;for(let a=n+2;a<r.length-2;a++)if(r[a]===0&&r[a+1]===0&&(r[a+2]===1||a+3<r.length&&r[a+2]===0&&r[a+3]===1)){i=a;break}let{type:s,layerId:c}=Pr(r[n],r[n+1]);e.push({type:s,layerId:c,data:r.subarray(n,i)}),t=i;}return e}function yt(r,e){let t=Buffer.from(r),{type:o,temporalId:n}=Pr(t[0],t[1]),[i,s]=vt(o,e,n);return t[0]=i,t[1]=s,t}function L(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 ee(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 cn=48,Cr=24,dn=2,un=10,Pt=0,pn=1;function Er(r,e,t){let o=e>>3,n=1<<7-(e&7),i=r[o]??0;r[o]=t?i|n:i&~n;}function Sr(r,e){let t=L(r);return Er(t,e+dn,0),Er(t,e+un,1),ee(t)}function Ve(r){let e=O(r);if(e.length===0)return r;let t=[];for(let o of e){let n=o.data;o.type===de?n=Sr(o.data,cn):o.type===ue&&(n=Sr(o.data,Cr)),t.push(z,n);}return Buffer.concat(t)}function mn(r,e,t){let o=L(r),n=new I(o),i=new $;for(let s=0;s<e;s++)i.bits.push(n.read(1));for(n.readUe(),i.ue(t);n.pos<n.bits.length;)i.bits.push(n.read(1));for(;i.bits.length%8!==0;)i.bits.push(0);return ee(G(i.bits))}function ln(r,e,t,o){let n=L(r),i=new I(n),s=new $;for(let c=0;c<e;c++)s.bits.push(i.read(1));for(i.readUe(),i.readUe(),s.ue(t),s.ue(o);i.pos<i.bits.length;)s.bits.push(i.read(1));for(;s.bits.length%8!==0;)s.bits.push(0);return ee(G(s.bits))}function Fr(r){let e=Cr+96;return mn(r,e,1)}function Ar(r){return ln(r,16,1,1)}function fn(r){let e=r.readUe();return e&1?e+1>>1:-(e>>1)}function hn(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 wn(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>=bt&&e<=xt;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))):hn(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===pn||n===Pt)&&(r.read(1)&&(r.readUe(),n===Pt&&r.readUe()),n===Pt&&r.read(1),t.cabacInitPresent&&r.read(1),r.readUe()),fn(r),t.ppsHasLoopFilterAcrossSlicesFlag&&r.read(1),r.pos}function kr(r,e,t){let o=L(r),n=new I(o),i=new I(o),s=wn(i,e,t),c=s%8===0?8:8-s%8,a=(s+c)/8,d=new $;for(let u=0;u<16;u++)d.bits.push(n.read(1));for(d.bits.push(n.read(1)),e>=bt&&e<=xt&&d.bits.push(n.read(1)),n.readUe(),d.ue(1);n.pos<s;)d.bits.push(n.read(1));for(d.bits.push(1);d.bits.length%8!==0;)d.bits.push(0);return ee(Buffer.concat([G(d.bits),o.subarray(a)]))}function gn(r){let e=new I(L(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 _n(r,e){r.w(16385,16),r.w(0,4),r.flag(1),r.flag(1),r.w(1,6),r.w(e.maxSubLayersMinus1,3),r.flag(e.maxSubLayersMinus1===0),r.w(65535,16),r.copy(e.ptlBits,e.ptlStart,e.ptlEnd-e.ptlStart),r.flag(1);for(let t=0;t<=e.maxSubLayersMinus1;t++)r.ue(4),r.ue(2),r.ue(4);r.w(1,6),r.ue(1),r.flag(1),r.flag(1),r.flag(0),r.flag(1),r.align(1);}function bn(r,e,t,o){if(r.copy(e.ptlBits,e.ptlEnd-8,8),e.maxSubLayersMinus1>0){for(let n=0;n<e.maxSubLayersMinus1;n++)r.w(0,2);for(let n=e.maxSubLayersMinus1;n<8;n++)r.w(0,2);}r.flag(0);for(let n=0;n<16;n++)r.flag(n===2||n===3);r.w(0,3),r.w(0,3),r.flag(1),r.w(1,6),r.w(1,1),r.w(1,1),r.w(0,4),r.flag(0),r.ue(0),r.flag(0),r.flag(0),r.flag(0),r.ue(2),r.flag(1),r.copy(e.ptlBits,e.ptlStart,e.ptlEnd-e.ptlStart),r.ue(0),r.w(0,2),r.w(1,2),r.w(2,2),r.ue(0),r.w(t,16),r.w(o,16),r.flag(1),r.w(1,2),r.w(0,4),r.w(0,4),r.flag(0),r.flag(1),r.flag(0),r.flag(1),r.flag(0),r.ue(0),r.ue(0),r.ue(0),r.ue(0),r.ue(0),r.flag(0),r.ue(0),r.flag(0),r.flag(0);}function Tr(r,e,t){let o=gn(r);if(!o)return r;let n=new $;return _n(n,o),bn(n,o,e,t),n.bits.push(1),n.align(0),ee(G(n.bits))}function Rr(r,e){let t=r.data?.[0],o=r.linesize?.[0];if(!t||!o)throw new Error("extractAlpha: missing BGRA data");let n=r.width,i=r.height,s=n*i;if(t.byteOffset%4===0&&o===n*4){let c=new Uint32Array(t.buffer,t.byteOffset,s);for(let a=0;a<s;a++)e[a]=c[a]>>>24;}else for(let c=0;c<i;c++){let a=c*o+3,d=c*n;for(let p=0;p<n;p++)e[d+p]=t[a+p*4];}}function xn(r,e){return r===ue?Fr(e):r===Ne?Ar(e):e}function Ir(r){let{baseExtradata:e,alphaExtradata:t}=r,o=O(e),n=O(t),i=new Map;for(let a of n){if(a.type===de)continue;let d=i.get(a.type)??[];d.push(a),i.set(a.type,d);}let s=[],c=new Set;for(let a of o){let d=a.type===de?Tr(a.data,r.width,r.height):a.data;if(s.push(z,d),!c.has(a.type)){c.add(a.type);for(let p of i.get(a.type)??[]){let u=xn(a.type,p.data);s.push(z,yt(u,1));}}}return s.push(vn()),Buffer.concat(s)}function vn(){let[t,o]=vt(yr,0,1),n=[],i=(s,c)=>{for(let a=c-1;a>=0;a--)n.push(s>>a&1);};for(i(0,1),i(0,3),i(0,3),i(0,9),i(255,9),i(0,1),i(0,1),i(1,1);n.length%8!==0;)i(0,1);return Buffer.concat([z,Buffer.from([t,o]),Buffer.from([165,4]),G(n),Buffer.from([128])])}function Br(r,e,t){let o=[];for(let n of r)o.push(z,n.data);for(let n of e)if(n.type<de){let i=kr(n.data,n.type,t);o.push(z,yt(i,1));}return Buffer.concat(o)}var He=class{_s;_baseQueue=[];_alphaQueue=[];constructor(e){this._s=e;}async drain(e){let{baseCtx:t,alphaCtx:o,basePkt:n,alphaPkt:i}=this._s;for(this._baseQueue.push(...await this.receiveAll(t,n,"base")),this._alphaQueue.push(...await this.receiveAll(o,i,"alpha"));this._baseQueue.length&&this._alphaQueue.length;)await this.writePair(this._baseQueue.shift(),this._alphaQueue.shift(),e);}desyncAfterEof(){if(!(!this._baseQueue.length&&!this._alphaQueue.length))return `base=${this._baseQueue.length}, alpha=${this._alphaQueue.length} unpaired`}async receiveAll(e,t,o){let n=[];for(;;){let i=await e.receivePacket(t);if(i>=0){n.push(this.snapshot(t)),t.unref();continue}if(i===constants.AVERROR_EAGAIN||i===constants.AVERROR_EOF)return n;nodeAv.FFmpegError.throwIfError(i,`nvenc.${o}.receivePacket`);}}snapshot(e){return {data:Buffer.from(e.data),pts:e.pts,dts:e.dts,duration:e.duration,flags:e.flags}}async writePair(e,t,o){let{basePkt:n,baseCtx:i,stream:s,hevcCfg:c}=this._s,a=Br(O(e.data),O(t.data),c);n.data=Ve(a),n.pts=e.pts,n.dts=e.dts,n.duration=e.duration===0n?1n:e.duration,n.flags=e.flags,n.streamIndex=s.index,n.rescaleTs(i.timeBase,s.timeBase),await o.writePacket(n),n.unref();}};function j(r,e,t){throw new Error(`hevc_alpha: NVENC SPS/PPS unsupported: ${r}=${e}, expected ${t}`)}function Sn(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 Cn(r){let e=new I(r);e.read(16),e.read(4);let t=e.read(3);t!==0&&j("sps_max_sub_layers_minus1",t,"0"),e.read(1),Sn(e,t),e.readUe();let o=e.readUe();o===3&&j("chroma_format_idc",o,"\u22603"),e.readUe(),e.readUe(),e.read(1)&&(e.readUe(),e.readUe(),e.readUe(),e.readUe()),e.readUe(),e.readUe();let n=e.readUe()+4,s=e.read(1)?t+1:1;for(let l=0;l<s;l++)e.readUe(),e.readUe(),e.readUe();e.readUe(),e.readUe(),e.readUe(),e.readUe(),e.readUe(),e.readUe(),e.read(1)&&j("scaling_list_enabled_flag",1,"0"),e.read(1);let c=e.read(1)===1;e.read(1)&&j("pcm_enabled_flag",1,"0");let a=e.readUe();a>1&&j("num_short_term_ref_pic_sets",a,"\u22641");let d=0;if(a===1){let l=e.readUe(),m=e.readUe();d=l+m;for(let w=0;w<l;w++)e.readUe(),e.read(1);for(let w=0;w<m;w++)e.readUe(),e.read(1);}let p=e.read(1)===1;p&&j("long_term_ref_pics_present_flag",1,"0");let u=e.read(1)===1;return {log2MaxPocLsb:n,saoEnabled:c,numShortTermRefPicSets:a,numDeltaPocsSet0:d,longTermRefPicsPresent:p,spsTemporalMvpEnabled:u}}function Fn(r){let e=new I(r);e.read(16),e.readUe(),e.readUe(),e.read(1),e.read(1);let t=e.read(3);t!==0&&j("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)&&j("tiles_enabled_flag",1,"0"),e.read(1);let n=e.read(1)===1,i=e.read(1),s=false;return i&&(e.read(1),s=e.read(1)===1,s||(e.readUe(),e.readUe())),{cabacInitPresent:o,ppsHasLoopFilterAcrossSlicesFlag:n&&!s}}function Mr(r){let e=O(r),t=e.find(s=>s.type===ue),o=e.find(s=>s.type===Ne);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=Cn(L(t.data)),i=Fn(L(o.data));return {...n,...i}}var Ue=class r{_s;_mux;_pts=0n;constructor(e){this._s=e,this._mux=new He({baseCtx:e.baseCtx,alphaCtx:e.alphaCtx,basePkt:e.basePkt,alphaPkt:e.alphaPkt,stream:e.stream,hevcCfg:e.hevcCfg});}static async create(e){var C=[];try{let{width:t,height:o,fps:n,bitrate:i,muxer:s}=e;let c=nodeAv.Codec.findEncoderByName(constants.FF_ENCODER_HEVC_NVENC);if(!c)throw new Error("hevc_nvenc encoder not found");let a={preset:"p4",bf:"0",tier:"main"};let d={codec:c,width:t,height:o,fps:n,bitrate:i,options:a};let p=_(C,new DisposableStack);let u=p.use(await H({...d,pixelFormat:constants.AV_PIX_FMT_BGRA},"nvenc.base.open2"));let l=p.use(await H({...d,pixelFormat:constants.AV_PIX_FMT_YUV420P},"nvenc.alpha.open2"));if(!u.extraData||!l.extraData)throw new Error("nvenc: codec extradata missing");let m=Mr(u.extraData);let w=s.addStream(u,"hvc1");let f=Ir({baseExtradata:u.extraData,alphaExtradata:l.extraData,width:t,height:o});w.codecpar.extradata=Ve(f);let y=t*o;let P=(t+1>>1)*(o+1>>1);let v=Buffer.alloc(y+P*2);v.fill(128,y);let E=p.use(A());let b=p.use(A());let S=p.use(Z(t,o,constants.AV_PIX_FMT_YUV420P));p.move();return new r({baseCtx:u,alphaCtx:l,basePkt:E,alphaPkt:b,stream:w,alphaSwFrame:S,alphaBuf:v,hevcCfg:m})}catch(k){var B=k,D=true;}finally{x(C,B,D);}}async encode(e,t){let{baseCtx:o,alphaCtx:n,alphaSwFrame:i,alphaBuf:s}=this._s,c=this._pts++;Rr(e,s),nodeAv.FFmpegError.throwIfError(i.makeWritable(),"alphaSw.makeWritable"),nodeAv.FFmpegError.throwIfError(i.fromBuffer(s),"alphaSw.fromBuffer"),i.pts=c,i.duration=1n,e.pts=c,e.duration=1n,nodeAv.FFmpegError.throwIfError(await o.sendFrame(e),"base.sendFrame"),nodeAv.FFmpegError.throwIfError(await n.sendFrame(i),"alpha.sendFrame"),await this._mux.drain(t);}async flush(e){await this.sendEof(this._s.baseCtx,"base"),await this.sendEof(this._s.alphaCtx,"alpha"),await this._mux.drain(e);let t=this._mux.desyncAfterEof();if(t)throw new Error(`NVENC desync: ${t}`)}[Symbol.dispose](){let{basePkt:e,alphaPkt:t,baseCtx:o,alphaCtx:n,alphaSwFrame:i}=this._s;e.free(),t.free(),i.free(),n.freeContext(),o.freeContext();}async sendEof(e,t){let o=await e.sendFrame(null);o<0&&o!==constants.AVERROR_EAGAIN&&o!==constants.AVERROR_EOF&&nodeAv.FFmpegError.throwIfError(o,`nvenc.${t}.sendFrame(null)`);}};var pe=class r{_ctx;_pkt;_stream;_pts=0n;constructor(e,t,o){this._ctx=e,this._pkt=t,this._stream=o;}static async create(e){var l=[];try{let{codecName:t,codecTag:o,codecOpts:n,muxer:i,...s}=e;let c=nodeAv.Codec.findEncoderByName(t);if(!c)throw new Error(`Video encoder not found: ${t}`);let a=_(l,new DisposableStack);let d=a.use(await H({codec:c,...s,codecTag:o,options:n},"videoCtx.open2"));let p=a.use(A());let u=i.addStream(d,o);a.move();return new r(d,p,u)}catch(m){var w=m,f=true;}finally{x(l,w,f);}}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 ae(this._ctx,this._pkt,this._stream,e)}};var We=class r{_ctx;_pkt;_stream;_pts=0n;constructor(e,t,o){this._ctx=e,this._pkt=t,this._stream=o;}static async create(e){var m=[];try{let{width:t,height:o,fps:n,hw:i,bitrate:s,muxer:c}=e;let a=i.getEncoderCodec("hevc");if(!a)throw new Error("hevc_videotoolbox encoder not found");let d=await H({codec:a,width:t,height:o,fps:n,bitrate:s,pixelFormat:constants.AV_PIX_FMT_BGRA,colorRange:constants.AVCOL_RANGE_JPEG,codecTag:"hvc1",options:{alpha_quality:"1"}},"vtEnc.open2");let p=_(m,new DisposableStack);p.use(d);let u=p.use(A());let l=c.addStream(d,"hvc1");p.move();return new r(d,u,l)}catch(w){var f=w,y=true;}finally{x(m,f,y);}}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 ae(this._ctx,this._pkt,this._stream,e)}};var $e="[Encoder]";async function Lr(r,e){var m=[];try{let{width:t,height:o,fps:n,bitrate:i=8e6,disableHwCodec:s=!1,sharedHw:c}=r;let a=c??(s?void 0:api.HardwareContext.auto()??void 0);let d=!c&&!!a;try{if(a?.deviceTypeName===constants.FF_HWDEVICE_TYPE_VIDEOTOOLBOX&&a.getEncoderCodec("hevc"))return g.debug($e,"using VideoToolbox HEVC alpha encoder"),{hwVideo:await We.create({width:t,height:o,fps:n,hw:a,bitrate:i,muxer:e}),hw:a,ownsHw:d};if(a?.deviceTypeName===constants.FF_HWDEVICE_TYPE_CUDA&&a.getEncoderCodec("hevc"))return g.debug($e,"using NVENC dual-layer HEVC alpha encoder"),{hwVideo:await Ue.create({width:t,height:o,fps:n,hw:a,bitrate:i,muxer:e}),hw:a,ownsHw:d}}catch(P){g.warn($e,"Hardware codec session limits reached, use software encoder",P),d&&a?.dispose();}g.debug($e,"using software libx265 HEVC alpha encoder");let p=_(m,new DisposableStack);let u=p.use(await pe.create({width:t,height:o,fps:n,codecName:constants.FF_ENCODER_LIBX265,codecTag:"hvc1",codecOpts:{preset:"fast","x265-params":"log-level=1:bframes=3:pools=+:frame-threads=0"},bitrate:i,pixelFormat:constants.AV_PIX_FMT_YUVA420P,muxer:e}));let l=p.use(await W.create(t,o));p.move();return {video:u,codec:l,ownsHw:!1}}catch(w){var f=w,y=true;}finally{x(m,f,y);}}var me=class{_ctx;_opened=false;_disposed=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(){var t=[];try{if(this._opened)return;nodeAv.FFmpegError.throwIfError(await this._ctx.openOutput(),"openOutput");let e=_(t,nodeAv.Dictionary.fromObject({movflags:"+faststart"}));nodeAv.FFmpegError.throwIfError(await this._ctx.writeHeader(e),"writeHeader");this._opened=!0;}catch(o){var n=o,i=true;}finally{x(t,n,i);}}async writePacket(e){nodeAv.FFmpegError.throwIfError(await this._ctx.interleavedWriteFrame(e),"interleavedWriteFrame");}async[Symbol.asyncDispose](){if(!this._disposed){this._disposed=true;try{if(this._opened){this._opened=!1;try{await this._ctx.writeTrailer();}finally{await this._ctx.closeOutput();}}}finally{await this._ctx[Symbol.asyncDispose]();}}}};var Ce=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){var s=[];try{let t=_(s,new AsyncDisposableStack,!0);let o=t.use(new me(e.outFile));let n=e.kind==="mp4"?await r.mp4Video(e,o):await r.webmVideo(e,o);n.video&&t.use(n.video);n.hwVideo&&t.use(n.hwVideo);n.codec&&t.use(n.codec);n.ownsHw&&n.hw&&t.use(n.hw);let i=e.withAudio?await r.audioFor(e,o):void 0;i&&t.use(i);await o.open();t.move();return new r({muxer:o,...n,audio:i,opts:e})}catch(c){var a=c,d=true;}finally{var p=x(s,a,d);p&&await p;}}static mp4Video(e,t){let{width:o,height:n,fps:i,disableHwCodec:s,sharedHw:c}=e;return Lr({width:o,height:n,fps:i,disableHwCodec:s,sharedHw:c},t)}static async webmVideo(e,t){let{width:o,height:n,fps:i}=e;return {video:await pe.create({width:o,height:n,fps:i,codecName:Pe,codecOpts:{deadline:"realtime","cpu-used":"8","row-mt":"1",threads:"2"},bitrate:4e6,pixelFormat:constants.AV_PIX_FMT_YUVA420P,muxer:t}),codec:await W.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 De.create({...o,globalHeader:true,bitrate:128e3,muxer:t})}setInputRate(e){this._s.audio?.setInputRate(e);}async encodeBGRA(e){let{hwVideo:t,muxer:o}=this._s;return t?t.encode(e,o):this.swEncode(e)}async encodeDecodedFrame(e){let{hwVideo:t,muxer:o}=this._s;return t?t.encode(e,o):this.swEncode(e)}async encodeAudio(e){await this._s.audio?.encode(e,this._s.muxer);}async flush(){let{hwVideo:e,video:t,audio:o,muxer:n}=this._s;await o?.flush(n),e?await e.flush(n):await t.flush(n);}async[Symbol.asyncDispose](){if(this._disposed)return;this._disposed=true;let{muxer:e,video:t,hwVideo:o,audio:n,codec:i,hw:s,ownsHw:c}=this._s;t?.[Symbol.dispose](),o?.[Symbol.dispose](),n?.[Symbol.dispose](),i?.[Symbol.dispose](),await e[Symbol.asyncDispose](),c&&s?.dispose();}async swEncode(e){let{video:t,codec:o,muxer:n}=this._s;assert.ok(o?.sws,"sws not initialized"),nodeAv.FFmpegError.throwIfError(o.dst.makeWritable(),"sinkDst.makeWritable"),nodeAv.FFmpegError.throwIfError(await o.sws.scaleFrame(o.dst,e),"sinkSws.scaleFrame"),await t.encode(o.dst,n);}};var le=class r{_s;_disposed=false;constructor(e){this._s=e;}static async create(e){var f=[];try{let{width:t,height:o,fps:n,outFile:i,withAudio:s=!1,disableHwCodec:c=!1}=e;let a=i.split(",").map(b=>b.trim()).filter(Boolean);if(a.length===0)throw new Error("outFile must contain at least one path");let d=a.map(b=>Ce.kindFromPath(b));let p=!c&&d.includes("mp4");let u=_(f,new AsyncDisposableStack,!0);let l=p?api.HardwareContext.auto()??void 0:void 0;l&&u.use(l);let m=l?.deviceTypeName===constants.FF_HWDEVICE_TYPE_VIDEOTOOLBOX||l?.deviceTypeName===constants.FF_HWDEVICE_TYPE_CUDA;let w=[];for(let b=0;b<a.length;b++){let S=await Ce.create({outFile:a[b],kind:d[b],width:t,height:o,fps:n,withAudio:s,disableHwCodec:c,sharedHw:d[b]==="mp4"&&m?l:void 0});u.use(S),w.push(S);}u.move();return new r({sinks:w,sharedHw:l,limiter:new se(1),outFiles:a,opts:e})}catch(y){var P=y,v=true;}finally{var E=x(f,P,v);E&&await 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=_(o,this.bgraFrame(e));await Promise.all(this._s.sinks.map(c=>c.encodeBGRA(t)));}catch(n){var i=n,s=true;}finally{x(o,i,s);}});}async encodePNG(e){await this._s.limiter.schedule(async()=>{let{width:t,height:o}=this._s.opts;this._s.pngCodec??=await W.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){var n=[];try{let t=_(n,new DisposableStack);let o=t.use(Z(this._s.opts.width,this._s.opts.height,constants.AV_PIX_FMT_BGRA));nodeAv.FFmpegError.throwIfError(o.fromBuffer(e),"bgraFrame.fromBuffer");t.move();return o}catch(i){var s=i,c=true;}finally{x(n,s,c);}}};var Ge=class{_fps;_actual=0;_currentBurst=0;_bursts=[];constructor(e){this._fps=e;}wrote(e=1){this._currentBurst>0&&(this._bursts.push(this._currentBurst),this._currentBurst=0),this._actual+=e;}dropped(e=1){this._currentBurst+=e;}finalize(){this._currentBurst>0&&(this._bursts.push(this._currentBurst),this._currentBurst=0);let e=0,t=0,o=0;for(let a of this._bursts){e+=a,o=Math.max(o,a);let d=Math.max(0,a-1);t+=(d/this._fps)**2;}let n=this._actual+e,i=n>0?e/n:0,s=Math.min(1,t),c=1-(1-i)*(1-s);return {global:i,local:s,jank:c,expected:n,actual:this._actual,maxBurst:o}}};function ze(r,e){return r.width===e.width&&r.height===e.height}var Nr="audio-meta",Vr="audio-chunk";function Hr({wc:r,encoder:e,getVideoTimeMs:t,onError:o}){let n=async(s,c)=>{let a=c.sampleRate,d=t();e.setupAudio(a);let p=Math.ceil(d*a/1e3);if(!(p<=0))try{await e.encodeAudio(Buffer.alloc(p*2*4));}catch(u){o(u);}},i=async(s,c)=>{try{await e.encodeAudio(c);}catch(a){o(a);}};return r.ipc.on(Nr,n),r.ipc.on(Vr,i),()=>{r.ipc.removeListener(Nr,n),r.ipc.removeListener(Vr,i);}}function je({fn:r,maxAttempts:e=3,timeout:t,signal:o}){let n=new Error(`timeout over ${t}ms`);return async(...i)=>{let s=0;for(;;){o?.throwIfAborted();try{let c=[r(...i)];return t&&c.push(promises$1.setTimeout(t).then(()=>{throw n})),await Promise.race(c)}catch(c){if(o?.throwIfAborted(),s++,s>=e)throw c;await Ie(2**s*100+Math.random()*100);}}}}var Et=["file:","http:","https:","data:"],oi=/^(file:|https?:|data:)/;function Ur(r){if(oi.test(r))return;let e=`${r.split(":")[0]}:`,t=Et.includes(e)?`unsupported protocol: ${e}, expected ${Et.join(", ")}`:`invalid source format, expected ${Et.join(", ")}`;throw new Error(t)}var qe=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 Xe="[Network]",ii=new Map([["jssz-boss.hdslb.com","jssz-boss.bilibili.co"],["boss.hdslb.com","shjd-boss.bilibili.co"]]),si=["pup:","pup-frame:","file:","data:","blob:","chrome-extension:","devtools:"];function ai(r){for(let e of si)if(r.startsWith(e))return true;return false}function fe(r){if(!r.startsWith("http"))return r;let e=new url.URL(r),t=ii.get(e.hostname);return t?(e.hostname=t,e.protocol="http:",e.toString()):r}function Wr({source:r,window:e,useInnerProxy:t,stubMedia:o}){let n=e.webContents.session.webRequest,i=new se(256),s=new Map;async function c(d,p){let u=new qe;s.set(d,u),await u.wait({timeout:5e3,onTimeout:p}).finally(()=>s.delete(d));}function a(d){s.get(d)?.signal();}n.onBeforeRequest((d,p)=>{let u=d.url;if(o&&d.resourceType==="media"&&!u.startsWith("pup-frame:")){p({redirectURL:`pup-frame://stub?src=${encodeURIComponent(u)}`});return}let l=t?fe(u):u;i.schedule(()=>{let m=`${e.id}_${d.id}`;return g.debug(Xe,"start:",{key:m,url:u,proxied:l,method:d.method,source:r,stats:i.stats}),p(l===u?{cancel:false}:{cancel:false,redirectURL:l}),ai(u)?Promise.resolve():c(m,()=>{g.warn(Xe,"maybe timeout:",{key:m,url:u,proxied:l,method:d.method,source:r});})});}),n.onHeadersReceived(({responseHeaders:d},p)=>{delete d?.["x-frame-options"],delete d?.["X-Frame-Options"],delete d?.["content-security-policy"],delete d?.["Content-Security-Policy"],p({cancel:false,responseHeaders:d});}),n.onCompleted(d=>{let p=`${e.id}_${d.id}`;a(p),g.debug(Xe,"completed:",{key:p,url:d.url,method:d.method,statusCode:d.statusCode,source:r});}),n.onErrorOccurred(d=>{let p=`${e.id}_${d.id}`;a(p);let{url:u,method:l,error:m,resourceType:w}=d;g[o&&w==="media"?m==="net::ERR_ABORTED"?"debug":"warn":"error"](Xe,"error:",{key:p,url:u,method:l,error:m,resourceType:w,source:r});});}function St(r){let e=r.webContents.session.webRequest;e.onBeforeRequest(null),e.onHeadersReceived(null),e.onCompleted(null),e.onErrorOccurred(null);}var te="[Window]",$r=new Error("window timeout"),di=["%cElectron Security Warning","Mixed Content: The page at"];function ui({source:r,win:e,action:t,timeoutMs:o,tolerant:n,signal:i}){return new Promise((s,c)=>{let a=false,d=setTimeout(()=>p(n&&a?void 0:$r),o),p=u=>{clearTimeout(d),u?c(u):s();};i?.throwIfAborted(),i?.addEventListener("abort",()=>p(i.reason),{once:true}),e.webContents.once("dom-ready",()=>{g.debug(te,"dom-ready:",{source:r}),a=true;}),e.webContents.once("did-stop-loading",()=>{g.debug(te,"did-stop-loading:",{source:r}),p();}),e.webContents.once("did-fail-load",(u,l,m,w)=>{let f=`did-fail-load: ${JSON.stringify({url:w,source:r,code:l,desc:m})}`;g.error(te,f),p(new Error(f));}),e.webContents.once("render-process-gone",(u,{exitCode:l,reason:m})=>{let w=`render-process-gone: ${JSON.stringify({source:r,exitCode:l,reason:m})}`;g.error(te,w),p(new Error(w));}),t();})}function he(r){return new Promise(e=>{St(r);let t=setTimeout(()=>{try{g.warn(te,"force close"),r.destroy();}catch{}o();},1e3),o=()=>{clearTimeout(t),e();};r.webContents.stopPainting(),r.webContents.debugger.detach(),r.once("closed",o),r.close();})}function pi(r){if(r.deterministic)return zt;if(r.withAudio)return Gt}async function Gr({source:r,renderer:e,tolerant:t,signal:o,onCreated:n}){let{width:i,height:s,useInnerProxy:c}=e,a=c?fe(r):r,d=new electron.BrowserWindow({width:i,height:s+1,minWidth:i,minHeight:s+1,maxWidth:i,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,preload:pi(e)}});Wr({source:r,window:d,useInnerProxy:c,stubMedia:e.deterministic}),d.webContents.debugger.attach("1.3"),await n?.(d),d.webContents.on("console-message",({level:p,message:u,lineNumber:l,sourceId:m})=>{if(p==="warning"&&di.find(f=>u.startsWith(f)))return;let w=[te,"console:",{message:u,lineNumber:l,sourceId:m,source:r}];p==="error"?g.error(...w):g.debug(...w),e.onConsole(p,u);});try{let p=fr(a,{width:i,height:s});await ui({source:r,win:d,action:()=>d.loadURL(p),timeoutMs:e.windowTimeout*1e3,tolerant:t,signal:o});}catch(p){throw await he(d),p}return d}var mi=je({fn:Gr,maxAttempts:2});async function Ye({source:r,renderer:e,onCreated:t,signal:o}){Ur(r),o?.throwIfAborted();let n,i;try{n=await mi({source:r,renderer:e,signal:o});}catch(c){i=c;}let s=()=>Gr({source:r,renderer:e,onCreated:t,signal:o,tolerant:e.windowTolerant});if(e.windowTolerant&&i===$r)return g.warn(te,`warmup timeout: ${r}, falling back to dom-ready`),await s();if(i){let{message:c,stack:a}=i;throw new Error(`failed to warmup window: ${JSON.stringify({source:r,message:c,stack:a})}`)}n&&(n.webContents.removeAllListeners(),St(n),await Ie(2e3),await he(n));try{return await s()}catch(c){let{message:a,stack:d}=c;throw new Error(`failed to load window: ${JSON.stringify({source:r,message:a,stack:d})}`)}}var zr="[Render]";async function jr(r){var we=[];try{let{source:e,fps:t,width:o,height:n,duration:i,withAudio:s,outFile:c,disableHwCodec:a,signal:d,onProgress:p}=r;let u=_(we,await le.create({width:o,height:n,fps:t,outFile:c,withAudio:s,disableHwCodec:a}),!0);let l=Math.ceil(t*i);let m=1e3/t;let w={width:o,height:n+1};let f=0;let y;let P=0;let v;let E;let b;let S;let C=new Ge(t);let k=new ie(o,n);let B;let D=T=>{f++,k.sample(T),u.encodeBGRA(T).catch(R=>v??=R);};let Ae=(T,R,be)=>{if(v??=d?.reason,v){b?.(v);return}let Y=be.getSize();if(!ze(Y,w)){Oe(ke,w);return}let rt=be.toBitmap(),xe=Le(rt,Y);if(xe===void 0){v??=new Error(`no timestamp @ ${f}`);return}if(y!==void 0&&xe-y<m*.8)return;let ot=Buffer.from(rt.buffer,rt.byteOffset,n*o*4);if(y===void 0)D(ot),C.wrote();else {let Rt=xe-y;if(Rt<=m*1.2)D(ot),C.wrote();else {let It=Math.round(Rt/m);C.dropped(It-1),C.wrote();for(let Bt=0;Bt<It&&f<l;Bt++)D(ot);}}y=xe;let Tt=Math.floor(f/l*100);Tt!==P&&(P=Tt,p(P));let uo=i*1e3;(xe>=uo-m*.5||f>=l)&&E?.();};let M=await Ye({source:e,renderer:r,signal:d,onCreated:T=>{s&&(B=Hr({wc:T.webContents,encoder:u,getVideoTimeMs:()=>y??0,onError:R=>v??=R}));}});let ke=M.webContents.debugger;try{M.webContents.stopPainting(),M.webContents.setFrameRate(t),M.webContents.on("paint",Ae),M.webContents.startPainting(),d?.throwIfAborted(),d?.addEventListener("abort",()=>b?.(d.reason),{once:!0}),await cr(ke),await new Promise((T,R)=>{[E,b]=[T,R];let be=0,Y=0;S=setInterval(()=>{if(f!==be){be=f,Y=0;return}if(Y>=3){b?.(new Error("drawable timeout"));return}g.warn(zr,`${e} render is extremely slow, written=${f} stuck=${Y}`),Y++,M.webContents.invalidate();},1e3);});}finally{clearInterval(S),M.webContents.off("paint",Ae),await he(M),B?.(),await u.finish();}if(v||f===0)throw v??new Error("no frames captured");else {let T=C.finalize(),R=k.finalize();return R>=.5&&g.warn(zr,`${e} blank-frame ratio ${Math.round(R*100)}% \u2014 possible white/blank screen`),{written:f,jank:T.jank,outFile:c,blank:R}}}catch(N){var ge=N,tt=true;}finally{var _e=x(we,ge,tt);_e&&await _e;}}var li="[Rerender]",qr=3;async function Xr(r,e){let t;for(let o=0;o<qr;o++)try{return await e()}catch(n){if(r.aborted)throw n;t=n,g.warn(li,`retry ${o+1}/${qr}: ${n.message}`);}throw t}var fi="[Video]";async function Yr({frame:r,timestampMs:e,signal:t}){if(r?.url){t?.throwIfAborted();try{await ft(r.executeJavaScript("window.__pup_video__&&window.__pup_video__.ready()"),t),await ft(r.executeJavaScript(`window.__pup_video__&&window.__pup_video__.advance(${e})`),t);}catch(o){t?.throwIfAborted(),g.warn(fi,`advance skipped: ${o instanceof Error?o.message:String(o)}`);}}}var Kr="__pup_tick__";async function Qr(r){let{frame:e,timestampMs:t}=r;if(!e)return;let o=`window.${Kr}&&window.${Kr}.process(${t})`,n=e.executeJavaScript(o);await Promise.all([J(n,5e3,"tick.executeJavaScript"),Yr(r)]);}var wi="8000000";function Ke(r,e){let t={signal:e,options:{rw_timeout:wi}};return api.Demuxer.open(r,t)}async function*Jr(r,e,t){var E=[];try{let o=_(E,await Ke(r,t),!0);let n=o.streams?.find(B=>B.codecpar.codecType===constants.AVMEDIA_TYPE_VIDEO);if(!n)throw new Error("no video stream");let i=_(E,await api.Decoder.create(n,{signal:t}));let{frameWidth:s,frameHeight:c,width:a,height:d,fps:p}=e;let u=s!==a||c!==d?`scale=${s}:${c},`:"";let l=_(E,api.FilterAPI.create(`fps=${p},${u}format=rgba`,{signal:t}));let m=0;for await(var w of l.frames(i.frames(o.packets(n.index)))){var f=[];try{let B=_(f,w);B&&(yield {idx:++m,buf:xi(B)});}catch(y){var P=y,v=!0;}finally{x(f,P,v);}}}catch(b){var S=b,C=true;}finally{var k=x(E,S,C);k&&await k;}}function xi(r){let e=r.width*4,t=r.linesize[0],o=r.data[0];if(t===e)return Buffer.from(o.subarray(0,e*r.height));let n=Buffer.allocUnsafe(e*r.height);for(let i=0;i<r.height;i++)o.copy(n,i*e,i*t,i*t+e);return n}var vi="[DecodeSession]",yi=4,Pi=16,Ei=256*1024*1024,Si=3,Qe=class{constructor(e,t){this.meta=e;this._src=t;this._leadFrames=Math.round(e.leadGap*e.fps),this._keepCount=Math.max(Pi,Math.floor(Ei/(e.frameWidth*e.frameHeight*4))),this._pumpDone=this.pump();}meta;_src;_buf=new Map;_ready=0;_want=1;_done=false;_closed=false;_gen=0;_ctrl=new AbortController;_waiters=new Set;_resume;_restart;_leadFrames;_keepCount;_pumpDone;async getFrame(e){e<1&&(e=1),e<=this._leadFrames&&(e=this._leadFrames+1);let t=this._buf.get(e);return t||(this._done&&e>this._ready?Buffer.alloc(0):(e>this._ready?(e>this._want&&(this._want=e),this.wake()):(this._ready=0,this._done=false,this._want=e,this.requestRestart()),this.wait(e)))}async close(){this._closed=true,this._done=true,this._ctrl.abort(),this.wake(),this.requestRestart();for(let e of this._waiters)e.resolve(Buffer.alloc(0));this._waiters.clear(),this._buf.clear(),await this._pumpDone;}wait(e){return new Promise(t=>this._waiters.add({idx:e,resolve:t}))}wake(){let e=this._resume;this._resume=void 0,e?.();}requestRestart(){this._gen++;let e=this._restart;this._restart=void 0,e?.(),this.wake();}async pump(){let e=0;for(;!this._closed;){let t=this._gen;this._ready=0,this._done=false,this._buf.clear();let o=false;try{await this.decodePass(t);}catch(n){!this._closed&&this._gen===t&&(o=true,g.warn(vi,`[${this.meta.id.slice(0,8)}] decode pass failed: ${n instanceof Error?n.message:String(n)}`));}if(this._closed)break;if(this._gen!==t){e=0;continue}o&&++e<=Si||(e=0,this._done=true,this.drainWaiters(),await this.untilRestart());}}async decodePass(e){for await(let{idx:t,buf:o}of Jr(this._src,this.meta,this._ctrl.signal)){if(this._closed||this._gen!==e)return;let n=this._leadFrames+t;for(;!this._closed&&this._gen===e&&n>this.demand+yi;)await this.pause();if(this._closed||this._gen!==e)return;this._buf.set(n,o),this._ready=n,this.drainWaiters(),this.evict();}}get demand(){let e=this._want;for(let t of this._waiters)t.idx>e&&(e=t.idx);return e}pause(){return new Promise(e=>{this._resume=e;})}untilRestart(){return this._closed?Promise.resolve():new Promise(e=>{this._restart=e;})}evict(){let e=this._want-this._keepCount;for(let t of this._buf.keys())t<e&&this._buf.delete(t);}drainWaiters(){for(let e of [...this._waiters]){let t=this._buf.get(e.idx);t?(this._waiters.delete(e),e.resolve(t)):this._done&&(this._waiters.delete(e),e.resolve(Buffer.alloc(0)));}}};async function Zr(r){var P=[];try{let e=_(P,await Ke(r),!0);let t=e.streams?.find(C=>C.codecpar.codecType===constants.AVMEDIA_TYPE_VIDEO);if(!t)throw new Error("probe: no video stream");let o=e.duration>0?e.duration:0;let n=t.timeBase.num/t.timeBase.den;let i=_(P,await api.Decoder.create(t,{threadCount:1}));let s=0;e:for await(var l of e.packets(t.index)){var m=[];try{let C=_(m,l);try{for await(var c of i.frames(C)){var a=[];try{let k=_(a,c);if(k?.decodeErrorFlags===0){s=Math.max(0,Number(k.pts)*n);break e}}catch(d){var p=d,u=!0;}finally{x(a,p,u);}}}catch{}}catch(w){var f=w,y=!0;}finally{x(m,f,y);}}return {width:t.codecpar.width,height:t.codecpar.height,duration:o,leadGap:s}}catch(v){var E=v,b=true;}finally{var S=x(P,E,b);S&&await S;}}async function to({width:r,height:e,duration:t}){let o=nodeAv.Codec.findEncoderByName(Pe);if(!o)throw new Error(`stub: encoder not found: ${Pe}`);let n=path.join(os.tmpdir(),`pup_stub_${crypto.randomBytes(8).toString("hex")}.webm`);try{{var i=[];try{let p=_(i,new me(n),!0);let u=_(i,await H({codec:o,width:r,height:e,fps:1e3,bitrate:1e5,pixelFormat:constants.AV_PIX_FMT_YUV420P,options:{deadline:"realtime","cpu-used":"8"}},"stubCtx.open2"));let l=p.addStream(u);await p.open();let m=_(i,new At(r,e));let w=BigInt(Math.max(1,Math.round(t*1e3)));m.frame.pts=0n;m.frame.duration=w;nodeAv.FFmpegError.throwIfError(await u.sendFrame(m.frame),"stubCtx.sendFrame");nodeAv.FFmpegError.throwIfError(await u.sendFrame(null),"stubCtx.flush");let f=_(i,A());for(;;){let y=await u.receivePacket(f);if(y===constants.AVERROR_EAGAIN||y===constants.AVERROR_EOF)break;nodeAv.FFmpegError.throwIfError(y,"stubCtx.receivePacket"),f.streamIndex=l.index,f.duration=w,f.rescaleTs(u.timeBase,l.timeBase),await p.writePacket(f),f.unref();}}catch(s){var c=s,a=!0;}finally{var d=x(i,c,a);d&&await d;}}return await promises.readFile(n)}finally{await promises.rm(n,{force:true});}}var At=class{frame;_buf;constructor(e,t){let o=e*t,n=Math.ceil(e/2)*Math.ceil(t/2);this._buf=Buffer.alloc(o+n*2,128),this._buf.fill(0,0,o),this.frame=nodeAv.Frame.fromVideoBuffer(this._buf,{width:e,height:t,format:constants.AV_PIX_FMT_YUV420P});}[Symbol.dispose](){this.frame[Symbol.dispose]();}};var Je=class{constructor(e){this._useInnerProxy=e;}_useInnerProxy;_sessions=new Map;_probes=new Map;_stubs=new Map;_closed=false;async open(e){if(this._closed)throw new Error("frame-server: closed");let t=Ni(e),o=this._sessions.get(t);if(o)return o.refs++,o.session.meta;let n=this._useInnerProxy?fe(e.src):e.src,i=await this.probeCached(n);if(this._closed)throw new Error("frame-server: closed");let s=i.width,c=i.height;if(e.dstW&&e.dstH&&e.fit!=="none"){let d=Math.min(1,Math.max(e.dstW/i.width,e.dstH/i.height));s=ro(i.width*d),c=ro(i.height*d);}let a={id:t,width:i.width,height:i.height,frameWidth:s,frameHeight:c,fps:e.fps,duration:i.duration,leadGap:i.leadGap};return this._sessions.set(t,{session:new Qe(a,n),refs:1}),a}stub(e){if(this._closed)throw new Error("frame-server: closed");let t=this._useInnerProxy?fe(e):e,o=this._stubs.get(t);if(o)return o;let n=this.probeCached(t).then(i=>to({width:i.width,height:i.height,duration:i.duration}));return n.catch(()=>this._stubs.delete(t)),this._stubs.set(t,n),n}getFrame(e,t){let o=this._sessions.get(e);return o?o.session.getFrame(t):Promise.resolve(Buffer.alloc(0))}async close(e){let t=this._sessions.get(e);t&&(--t.refs>0||(this._sessions.delete(e),await t.session.close()));}probeCached(e){let t=this._probes.get(e);if(t)return t;let o=je({fn:Zr})(e);return o.catch(()=>this._probes.delete(e)),this._probes.set(e,o),o}async closeAll(){this._closed=true;let e=[...this._sessions.values()];this._sessions.clear(),await Promise.all(e.map(t=>t.session.close()));}};function Ni(r){return crypto.createHash("sha1").update(`${r.src}|${r.fps}|${r.dstW??""}|${r.dstH??""}|${r.fit??""}`).digest("hex")}function ro(r){let e=Math.round(r);return Math.max(2,e-e%2)}var no="[FrameProtocol]",io="pup-frame",q={"access-control-allow-origin":"*","access-control-allow-methods":"GET, OPTIONS","access-control-allow-headers":"*"};function so(r){let e=new Je(r);return electron.protocol.handle(io,async t=>{if(t.method==="OPTIONS")return new Response(null,{status:204,headers:q});let o=new URL(t.url);g.debug(no,`${t.method} ${o.hostname}${o.search}`);try{switch(o.hostname){case "open":return Vi(await e.open({src:o.searchParams.get("src")??"",fps:Ze(o,"fps",30),dstW:Ze(o,"w",0),dstH:Ze(o,"h",0),fit:o.searchParams.get("fit")??void 0}));case "frame":return Ui(await e.getFrame(o.searchParams.get("id")??"",Ze(o,"idx",1)));case "stub":return Hi(await e.stub(o.searchParams.get("src")??""));case "close":return await e.close(o.searchParams.get("id")??""),new Response(null,{status:204,headers:q});default:return new Response(`unknown action: ${o.hostname}`,{status:404,headers:q})}}catch(n){let i=n instanceof Error?n.message:String(n);return g.error(no,`${o.hostname} failed${o.search}: ${i}`),new Response(i,{status:500,headers:q})}}),{[Symbol.asyncDispose]:async()=>{electron.protocol.unhandle(io),await e.closeAll();}}}function Vi(r){return new Response(JSON.stringify(r),{headers:{...q,"content-type":"application/json"}})}function Hi(r){let e=new Uint8Array(r.byteLength);return e.set(r),new Response(e.buffer,{headers:{...q,"content-type":"video/webm","cache-control":"no-store"}})}function Ui(r){if(r.byteLength===0)return new Response(null,{status:410,headers:q});let e=new Uint8Array(r.byteLength);return e.set(r),new Response(e.buffer,{headers:{...q,"content-type":"application/octet-stream","cache-control":"no-store"}})}function Ze(r,e,t){let o=r.searchParams.get(e),n=o?parseInt(o,10):NaN;return Number.isFinite(n)?n:t}var et="[Shoot]";async function Wi({source:r,win:e,size:t,ms:o}){let n,i=0,s,c=e.webContents.debugger,a={width:t.width,height:t.height+1};try{return await new Promise((d,p)=>{s=setInterval(()=>{if(i>=3){p(new Error("drawable timeout"));return}i++,g.warn(et,`${r} render is extremely slow @ ${o}, current: ${n} with ${i} repeats`),e.webContents.invalidate();},1e3);let u=(l,m,w)=>{let f=w.getSize();if(!ze(f,a)){Oe(c,a);return}let y=w.crop({x:0,y:a.height-2,width:ne,height:2}),P=Le(y.toBitmap(),{width:ne,height:2});if(P===void 0||Math.abs(P-o)>1){n=P;return}let v=w.toBitmap();e.webContents.off("paint",u),d(Buffer.from(v.buffer,v.byteOffset,t.height*t.width*4));};e.webContents.on("paint",u);})}finally{clearInterval(s);}}async function ao(r){var D=[];try{let{source:e,fps:t,width:o,height:n,duration:i,withAudio:s,outFile:c,disableHwCodec:a,signal:d,onProgress:p}=r;s&&g.warn(et,"audio will be ignored on this mode");let u=_(D,so(r.useInnerProxy),!0);let l=performance.now();let m=Ye({source:e,renderer:r,signal:d});let w=_(D,await le.create({width:o,height:n,fps:t,outFile:c,withAudio:s,disableHwCodec:a}),!0);let f=await m;g.debug(et,"init done:",{source:e,cost:performance.now()-l});let y=Math.ceil(t*i);let P=1e3/t;let v=0;let E=0;let b;let S=new ie(o,n);let C=f.webContents.debugger;let k=f.webContents.mainFrame;let B=k.frames[0];try{f.webContents.setFrameRate(240),await ir(C);for(let N=0;N<y;N++){d?.throwIfAborted();let ge=(N+1)*P,tt=ur(f.webContents);await Promise.all([Qr({frame:B,timestampMs:ge,signal:d}),dr(f.webContents,ge)]),await Promise.all([nr(C,P),tt]);let _e=await Wi({source:e,win:f,size:{width:o,height:n},ms:ge});if(S.sample(_e),w.encodeBGRA(_e).catch(R=>b??=R),v++,b)throw b;let T=Math.floor(v/y*100);T!==E&&(E=T,p(E));}}finally{await he(f),await w.finish();}if(b)throw b;if(v===0)throw new Error("no frames captured");else {let N=S.finalize();return N>=.5&&g.warn(et,`${e} blank-frame ratio ${Math.round(N*100)}% \u2014 possible white/blank screen`),{written:v,jank:0,outFile:c,blank:N}}}catch(Ae){var M=Ae,ke=true;}finally{var we=x(D,M,ke);we&&await we;}}var qi="[App]";function co(){g.debug(qi,"gpu features:",electron.app.getGPUFeatureStatus());}var Fe=new AbortController,kt=false;Jt();electron.Menu.setApplicationMenu(null);electron.app.dock?.hide();electron.app.on("window-all-closed",()=>{});electron.app.on("gpu-info-update",co);electron.app.on("before-quit",r=>!kt&&r.preventDefault());electron.app.on("will-quit",r=>!kt&&r.preventDefault());assert.ok(process.send,"ipc channel missing \u2014 spawn with stdio[3]='ipc'");process.once("disconnect",()=>Fe.abort("disconnect"));process.on("message",r=>{let e=r;e.type==="cancel"&&Fe.abort(e.reason);});or({name:"app",run:async(r,e)=>{let t=new Re;try{await electron.app.whenReady(),lr(),co();for(let i of e.outFile.split(","))await promises.mkdir(path.dirname(i),{recursive:!0});let o=e.deterministic?ao:jr;Fe.signal.throwIfAborted();let n=await Xr(Fe.signal,()=>o({source:r,...e,signal:Fe.signal,onProgress:i=>t.writeProgress(i),onConsole:(i,s)=>t.writeConsole(i,s)}));await t.writeDone(n);}catch(o){let n=o,i=n.stack??n.message??String(o??"unknown error");await t.writeError(i);}finally{kt=true,electron.app.exit();}}});
|
|
95
|
+
</html>`}function Oe(r,e){let{width:t,height:o}=e;if(t<ne||o<2)return;let n=o-1,i=0;for(let s=0;s<ne;s++){let c=(n*t+s)*4,d=(r[c]??0)>127?1:0;i=i<<1|d;}if(i=i>>>0,!(!Number.isFinite(i)||i<0||i>1e7))return i}function cr(r){return ht(r,"__pup_start_stego__()")}async function dr(r,e){await ht(r.debugger,`__pup_draw_stego__(${e})`);}async function ur(r){let e=new Promise(t=>r.ipc.once(sr,t));await J(e,5e3,"stego tick");}var wt="pup",Lo="pup-frame",pr={standard:true,secure:true,bypassCSP:true,allowServiceWorkers:true,supportFetchAPI:true,corsEnabled:true,stream:true,codeCache:true};electron.protocol.registerSchemesAsPrivileged([{scheme:wt,privileges:pr},{scheme:Lo,privileges:pr}]);function lr(){electron.protocol.handle(wt,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=ar(t,{width:o,height:n});return new Response(i,{headers:{"content-type":"text/html"}})});}function fr(r,e){let t=new URL(`${wt}://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()}function No(r,e,t){let o=Math.max(1,Math.floor(e/32)),n=Math.max(1,Math.floor(t/32)),i=255,s=0,c=255,a=0,d=255,p=0;for(let u=0;u<t;u+=n)for(let l=0;l<e;l+=o){let m=(u*e+l)*4,h=r.readUInt8(m),w=r.readUInt8(m+1),y=r.readUInt8(m+2);i=Math.min(i,y),s=Math.max(s,y),c=Math.min(c,w),a=Math.max(a,w),d=Math.min(d,h),p=Math.max(p,h);}return Math.max(s-i,a-c,p-d)<=8}var ie=class{_width;_height;_total=0;_blank=0;constructor(e,t){this._width=e,this._height=t;}sample(e){this._total++,No(e,this._width,this._height)&&this._blank++;}finalize(){return this._total>0?this._blank/this._total:0}};var se=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();}};var Pe="libvpx-vp9";async function H(r,e){var n=[];try{let t=new nodeAv.CodecContext;t.allocContext3(r.codec);let o=_(n,new DisposableStack);o.use(t);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[a,d]of Object.entries(r.options??{}))t.setOption(a,d);nodeAv.FFmpegError.throwIfError(await t.open2(r.codec,null),e);o.move();return t}catch(i){var s=i,c=true;}finally{x(n,s,c);}}function Z(r,e,t){var i=[];try{let o=new nodeAv.Frame;o.alloc();let n=_(i,new DisposableStack);n.use(o);o.format=t;o.width=r;o.height=e;nodeAv.FFmpegError.throwIfError(o.getBuffer(0),"frame.getBuffer");n.move();return o}catch(s){var c=s,a=true;}finally{x(i,c,a);}}function k(){let r=new nodeAv.Packet;return r.alloc(),r}async function ae(r,e,t,o){for(;;){let n=await r.receivePacket(e);if(n===constants.AVERROR_EAGAIN||n===constants.AVERROR_EOF)break;try{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);}finally{e.unref();}}}var W=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=k();}async png(){var o=[];try{let e=_(o,new DisposableStack);let t=new nodeAv.CodecContext;t.allocContext3(this._png);e.use(t);nodeAv.FFmpegError.throwIfError(await t.open2(this._png),"pngDecoder.open2");e.move();return t}catch(n){var i=n,s=true;}finally{x(o,i,s);}}async decodePNG(e){var o=[];try{let t=_(o,await this.png());this.pkt.data=e;nodeAv.FFmpegError.throwIfError(await t.sendPacket(this.pkt),"pngDecoder.sendPacket");this.pkt.unref();nodeAv.FFmpegError.throwIfError(await t.receiveFrame(this.src),"pngDecoder.receiveFrame");return this.src}catch(n){var i=n,s=true;}finally{x(o,i,s);}}get sws(){if(!this._sws){let e=new nodeAv.SoftwareScaleContext,t=this.src.format;e.getContext(this.src.width,this.src.height,t,this.src.width,this.src.height,nodeAv.AV_PIX_FMT_YUVA420P,nodeAv.SWS_BILINEAR),this._sws=e;}return this._sws}[Symbol.dispose](){this.src[Symbol.dispose](),this.dst[Symbol.dispose](),this.pkt[Symbol.dispose](),this._sws?.[Symbol.dispose]();}};var an={[constants.AV_SAMPLE_FMT_FLT]:"flt",[constants.AV_SAMPLE_FMT_FLTP]:"fltp"},Le=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=k(),this._filterFrame=new nodeAv.Frame,this._filterFrame.alloc();}static async create(e){var s=[];try{let t=nodeAv.Codec.findEncoderByName(e.codecName);if(!t)throw new Error(`Audio encoder not found: ${e.codecName}`);let o=_(s,new DisposableStack);let n=new nodeAv.CodecContext;n.allocContext3(t);o.use(n);n.codecId=t.id;n.sampleFormat=e.outSampleFmt;n.sampleRate=e.outSampleRate;n.channelLayout=constants.AV_CHANNEL_LAYOUT_STEREO;n.timeBase=new nodeAv.Rational(1,e.outSampleRate);n.bitRate=BigInt(e.bitrate);e.globalHeader&&n.setFlags(constants.AV_CODEC_FLAG_GLOBAL_HEADER);nodeAv.FFmpegError.throwIfError(await n.open2(t,null),"audioCtx.open2");let i=e.muxer.addStream(n);o.move();return new r(n,i,e.outSampleFmt)}catch(c){var a=c,d=true;}finally{x(s,a,d);}}setInputRate(e){var l=[];try{this._graph?.[Symbol.dispose]();this._inRate=e;let t=_(l,new DisposableStack);let o=new nodeAv.FilterGraph;o.alloc();t.use(o);let n=nodeAv.Filter.getByName("abuffer");let i=o.createFilter(n,"src",`sample_rate=${e}:sample_fmt=flt:channel_layout=stereo:time_base=1/${e}`);if(!i)throw new Error("Failed to create abuffer");let s=nodeAv.Filter.getByName("abuffersink");let c=o.createFilter(s,"sink");if(!c)throw new Error("Failed to create abuffersink");let a=an[this._outFmt]??"flt";let d=`aformat=sample_fmts=${a}:sample_rates=${this._outRate}:channel_layouts=stereo,asetnsamples=n=${this._frameSize}:p=1`;let p=nodeAv.FilterInOut.createList([{name:"in",filterCtx:i,padIdx:0}]);let u=nodeAv.FilterInOut.createList([{name:"out",filterCtx:c,padIdx:0}]);nodeAv.FFmpegError.throwIfError(o.parsePtr(d,u,p),"graph.parsePtr");nodeAv.FFmpegError.throwIfError(o.configSync(),"graph.config");t.move();this._graph=o;this._bufSrc=i;this._bufSink=c;}catch(m){var h=m,w=true;}finally{x(l,h,w);}}async encode(e,t){var s=[];try{if(!this._bufSrc||!this._inRate)return;let o=new Float32Array(e.buffer,e.byteOffset,e.byteLength/4);for(let p=0;p<o.length;p++)Number.isFinite(o[p])||(o[p]=0);let n=o.length>>1;let i=_(s,nodeAv.Frame.fromAudioBuffer(Buffer.from(o.buffer,o.byteOffset,o.byteLength),{nbSamples:n,format:constants.AV_SAMPLE_FMT_FLT,sampleRate:this._inRate,channelLayout:constants.AV_CHANNEL_LAYOUT_STEREO,pts:this._pts,timeBase:{num:1,den:this._inRate}}));this._pts+=BigInt(n);nodeAv.FFmpegError.throwIfError(await this._bufSrc.buffersrcAddFrame(i),"buffersrcAddFrame");await this.drain(t);}catch(c){var a=c,d=true;}finally{x(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;try{nodeAv.FFmpegError.throwIfError(t,"buffersinkGetFrame"),nodeAv.FFmpegError.throwIfError(await this._ctx.sendFrame(this._filterFrame),"audioCtx.sendFrame"),await this.drainCodec(e);}finally{this._filterFrame.unref();}}}drainCodec(e){return ae(this._ctx,this._pkt,this._stream,e)}};function G(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 $=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]);}},I=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]);var bt=16;var xt=23,de=32,ue=33,Ne=34,yr=39;function Pr(r,e){let t=r>>1&63,o=(r&1)<<5|e>>3&31,n=e&7;return {type:t,layerId:o,temporalId:n}}function vt(r,e,t){let o=(r&63)<<1|e>>5&1,n=(e&31)<<3|t&7;return [o,n]}function D(r){let e=[],t=0;for(;t<r.length;){let o=0;if(t+3<r.length&&r[t]===0&&r[t+1]===0&&r[t+2]===1)o=3;else if(t+4<r.length&&r[t]===0&&r[t+1]===0&&r[t+2]===0&&r[t+3]===1)o=4;else {t++;continue}let n=t+o;if(n+2>r.length)break;let i=r.length;for(let a=n+2;a<r.length-2;a++)if(r[a]===0&&r[a+1]===0&&(r[a+2]===1||a+3<r.length&&r[a+2]===0&&r[a+3]===1)){i=a;break}let{type:s,layerId:c}=Pr(r[n],r[n+1]);e.push({type:s,layerId:c,data:r.subarray(n,i)}),t=i;}return e}function yt(r,e){let t=Buffer.from(r),{type:o,temporalId:n}=Pr(t[0],t[1]),[i,s]=vt(o,e,n);return t[0]=i,t[1]=s,t}function O(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 ee(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 cn=48,Cr=24,dn=2,un=10,Pt=0,pn=1;function Er(r,e,t){let o=e>>3,n=1<<7-(e&7),i=r[o]??0;r[o]=t?i|n:i&~n;}function Sr(r,e){let t=O(r);return Er(t,e+dn,0),Er(t,e+un,1),ee(t)}function Ve(r){let e=D(r);if(e.length===0)return r;let t=[];for(let o of e){let n=o.data;o.type===de?n=Sr(o.data,cn):o.type===ue&&(n=Sr(o.data,Cr)),t.push(z,n);}return Buffer.concat(t)}function mn(r,e,t){let o=O(r),n=new I(o),i=new $;for(let s=0;s<e;s++)i.bits.push(n.read(1));for(n.readUe(),i.ue(t);n.pos<n.bits.length;)i.bits.push(n.read(1));for(;i.bits.length%8!==0;)i.bits.push(0);return ee(G(i.bits))}function ln(r,e,t,o){let n=O(r),i=new I(n),s=new $;for(let c=0;c<e;c++)s.bits.push(i.read(1));for(i.readUe(),i.readUe(),s.ue(t),s.ue(o);i.pos<i.bits.length;)s.bits.push(i.read(1));for(;s.bits.length%8!==0;)s.bits.push(0);return ee(G(s.bits))}function Fr(r){let e=Cr+96;return mn(r,e,1)}function Ar(r){return ln(r,16,1,1)}function fn(r){let e=r.readUe();return e&1?e+1>>1:-(e>>1)}function hn(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 wn(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>=bt&&e<=xt;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))):hn(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===pn||n===Pt)&&(r.read(1)&&(r.readUe(),n===Pt&&r.readUe()),n===Pt&&r.read(1),t.cabacInitPresent&&r.read(1),r.readUe()),fn(r),t.ppsHasLoopFilterAcrossSlicesFlag&&r.read(1),r.pos}function kr(r,e,t){let o=O(r),n=new I(o),i=new I(o),s=wn(i,e,t),c=s%8===0?8:8-s%8,a=(s+c)/8,d=new $;for(let u=0;u<16;u++)d.bits.push(n.read(1));for(d.bits.push(n.read(1)),e>=bt&&e<=xt&&d.bits.push(n.read(1)),n.readUe(),d.ue(1);n.pos<s;)d.bits.push(n.read(1));for(d.bits.push(1);d.bits.length%8!==0;)d.bits.push(0);return ee(Buffer.concat([G(d.bits),o.subarray(a)]))}function gn(r){let e=new I(O(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 _n(r,e){r.w(16385,16),r.w(0,4),r.flag(1),r.flag(1),r.w(1,6),r.w(e.maxSubLayersMinus1,3),r.flag(e.maxSubLayersMinus1===0),r.w(65535,16),r.copy(e.ptlBits,e.ptlStart,e.ptlEnd-e.ptlStart),r.flag(1);for(let t=0;t<=e.maxSubLayersMinus1;t++)r.ue(4),r.ue(2),r.ue(4);r.w(1,6),r.ue(1),r.flag(1),r.flag(1),r.flag(0),r.flag(1),r.align(1);}function bn(r,e,t,o){if(r.copy(e.ptlBits,e.ptlEnd-8,8),e.maxSubLayersMinus1>0){for(let n=0;n<e.maxSubLayersMinus1;n++)r.w(0,2);for(let n=e.maxSubLayersMinus1;n<8;n++)r.w(0,2);}r.flag(0);for(let n=0;n<16;n++)r.flag(n===2||n===3);r.w(0,3),r.w(0,3),r.flag(1),r.w(1,6),r.w(1,1),r.w(1,1),r.w(0,4),r.flag(0),r.ue(0),r.flag(0),r.flag(0),r.flag(0),r.ue(2),r.flag(1),r.copy(e.ptlBits,e.ptlStart,e.ptlEnd-e.ptlStart),r.ue(0),r.w(0,2),r.w(1,2),r.w(2,2),r.ue(0),r.w(t,16),r.w(o,16),r.flag(1),r.w(1,2),r.w(0,4),r.w(0,4),r.flag(0),r.flag(1),r.flag(0),r.flag(1),r.flag(0),r.ue(0),r.ue(0),r.ue(0),r.ue(0),r.ue(0),r.flag(0),r.ue(0),r.flag(0),r.flag(0);}function Tr(r,e,t){let o=gn(r);if(!o)return r;let n=new $;return _n(n,o),bn(n,o,e,t),n.bits.push(1),n.align(0),ee(G(n.bits))}function Rr(r,e){let t=r.data?.[0],o=r.linesize?.[0];if(!t||!o)throw new Error("extractAlpha: missing BGRA data");let n=r.width,i=r.height,s=n*i;if(t.byteOffset%4===0&&o===n*4){let c=new Uint32Array(t.buffer,t.byteOffset,s);for(let a=0;a<s;a++)e[a]=c[a]>>>24;}else for(let c=0;c<i;c++){let a=c*o+3,d=c*n;for(let p=0;p<n;p++)e[d+p]=t[a+p*4];}}function xn(r,e){return r===ue?Fr(e):r===Ne?Ar(e):e}function Ir(r){let{baseExtradata:e,alphaExtradata:t}=r,o=D(e),n=D(t),i=new Map;for(let a of n){if(a.type===de)continue;let d=i.get(a.type)??[];d.push(a),i.set(a.type,d);}let s=[],c=new Set;for(let a of o){let d=a.type===de?Tr(a.data,r.width,r.height):a.data;if(s.push(z,d),!c.has(a.type)){c.add(a.type);for(let p of i.get(a.type)??[]){let u=xn(a.type,p.data);s.push(z,yt(u,1));}}}return s.push(vn()),Buffer.concat(s)}function vn(){let[t,o]=vt(yr,0,1),n=[],i=(s,c)=>{for(let a=c-1;a>=0;a--)n.push(s>>a&1);};for(i(0,1),i(0,3),i(0,3),i(0,9),i(255,9),i(0,1),i(0,1),i(1,1);n.length%8!==0;)i(0,1);return Buffer.concat([z,Buffer.from([t,o]),Buffer.from([165,4]),G(n),Buffer.from([128])])}function Br(r,e,t){let o=[];for(let n of r)o.push(z,n.data);for(let n of e)if(n.type<de){let i=kr(n.data,n.type,t);o.push(z,yt(i,1));}return Buffer.concat(o)}var He=class{_s;_baseQueue=[];_alphaQueue=[];constructor(e){this._s=e;}async drain(e){let{baseCtx:t,alphaCtx:o,basePkt:n,alphaPkt:i}=this._s;for(this._baseQueue.push(...await this.receiveAll(t,n,"base")),this._alphaQueue.push(...await this.receiveAll(o,i,"alpha"));this._baseQueue.length&&this._alphaQueue.length;)await this.writePair(this._baseQueue.shift(),this._alphaQueue.shift(),e);}desyncAfterEof(){if(!(!this._baseQueue.length&&!this._alphaQueue.length))return `base=${this._baseQueue.length}, alpha=${this._alphaQueue.length} unpaired`}async receiveAll(e,t,o){let n=[];for(;;){let i=await e.receivePacket(t);if(i>=0){n.push(this.snapshot(t)),t.unref();continue}if(i===constants.AVERROR_EAGAIN||i===constants.AVERROR_EOF)return n;nodeAv.FFmpegError.throwIfError(i,`nvenc.${o}.receivePacket`);}}snapshot(e){return {data:Buffer.from(e.data),pts:e.pts,dts:e.dts,duration:e.duration,flags:e.flags}}async writePair(e,t,o){let{basePkt:n,baseCtx:i,stream:s,hevcCfg:c}=this._s,a=Br(D(e.data),D(t.data),c);n.data=Ve(a),n.pts=e.pts,n.dts=e.dts,n.duration=e.duration===0n?1n:e.duration,n.flags=e.flags,n.streamIndex=s.index,n.rescaleTs(i.timeBase,s.timeBase),await o.writePacket(n),n.unref();}};function j(r,e,t){throw new Error(`hevc_alpha: NVENC SPS/PPS unsupported: ${r}=${e}, expected ${t}`)}function Sn(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 Cn(r){let e=new I(r);e.read(16),e.read(4);let t=e.read(3);t!==0&&j("sps_max_sub_layers_minus1",t,"0"),e.read(1),Sn(e,t),e.readUe();let o=e.readUe();o===3&&j("chroma_format_idc",o,"\u22603"),e.readUe(),e.readUe(),e.read(1)&&(e.readUe(),e.readUe(),e.readUe(),e.readUe()),e.readUe(),e.readUe();let n=e.readUe()+4,s=e.read(1)?t+1:1;for(let l=0;l<s;l++)e.readUe(),e.readUe(),e.readUe();e.readUe(),e.readUe(),e.readUe(),e.readUe(),e.readUe(),e.readUe(),e.read(1)&&j("scaling_list_enabled_flag",1,"0"),e.read(1);let c=e.read(1)===1;e.read(1)&&j("pcm_enabled_flag",1,"0");let a=e.readUe();a>1&&j("num_short_term_ref_pic_sets",a,"\u22641");let d=0;if(a===1){let l=e.readUe(),m=e.readUe();d=l+m;for(let h=0;h<l;h++)e.readUe(),e.read(1);for(let h=0;h<m;h++)e.readUe(),e.read(1);}let p=e.read(1)===1;p&&j("long_term_ref_pics_present_flag",1,"0");let u=e.read(1)===1;return {log2MaxPocLsb:n,saoEnabled:c,numShortTermRefPicSets:a,numDeltaPocsSet0:d,longTermRefPicsPresent:p,spsTemporalMvpEnabled:u}}function Fn(r){let e=new I(r);e.read(16),e.readUe(),e.readUe(),e.read(1),e.read(1);let t=e.read(3);t!==0&&j("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)&&j("tiles_enabled_flag",1,"0"),e.read(1);let n=e.read(1)===1,i=e.read(1),s=false;return i&&(e.read(1),s=e.read(1)===1,s||(e.readUe(),e.readUe())),{cabacInitPresent:o,ppsHasLoopFilterAcrossSlicesFlag:n&&!s}}function Mr(r){let e=D(r),t=e.find(s=>s.type===ue),o=e.find(s=>s.type===Ne);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=Cn(O(t.data)),i=Fn(O(o.data));return {...n,...i}}var Ue=class r{_s;_mux;_pts=0n;constructor(e){this._s=e,this._mux=new He({baseCtx:e.baseCtx,alphaCtx:e.alphaCtx,basePkt:e.basePkt,alphaPkt:e.alphaPkt,stream:e.stream,hevcCfg:e.hevcCfg});}static async create(e){var C=[];try{let{width:t,height:o,fps:n,bitrate:i,muxer:s}=e;let c=nodeAv.Codec.findEncoderByName(constants.FF_ENCODER_HEVC_NVENC);if(!c)throw new Error("hevc_nvenc encoder not found");let a={preset:"p4",bf:"0",tier:"main"};let d={codec:c,width:t,height:o,fps:n,bitrate:i,options:a};let p=_(C,new DisposableStack);let u=p.use(await H({...d,pixelFormat:constants.AV_PIX_FMT_BGRA},"nvenc.base.open2"));let l=p.use(await H({...d,pixelFormat:constants.AV_PIX_FMT_YUV420P},"nvenc.alpha.open2"));if(!u.extraData||!l.extraData)throw new Error("nvenc: codec extradata missing");let m=Mr(u.extraData);let h=s.addStream(u,"hvc1");let w=Ir({baseExtradata:u.extraData,alphaExtradata:l.extraData,width:t,height:o});h.codecpar.extradata=Ve(w);let y=t*o;let P=(t+1>>1)*(o+1>>1);let v=Buffer.alloc(y+P*2);v.fill(128,y);let E=p.use(k());let b=p.use(k());let S=p.use(Z(t,o,constants.AV_PIX_FMT_YUV420P));p.move();return new r({baseCtx:u,alphaCtx:l,basePkt:E,alphaPkt:b,stream:h,alphaSwFrame:S,alphaBuf:v,hevcCfg:m})}catch(B){var L=B,F=true;}finally{x(C,L,F);}}async encode(e,t){let{baseCtx:o,alphaCtx:n,alphaSwFrame:i,alphaBuf:s}=this._s,c=this._pts++;Rr(e,s),nodeAv.FFmpegError.throwIfError(i.makeWritable(),"alphaSw.makeWritable"),nodeAv.FFmpegError.throwIfError(i.fromBuffer(s),"alphaSw.fromBuffer"),i.pts=c,i.duration=1n,e.pts=c,e.duration=1n,nodeAv.FFmpegError.throwIfError(await o.sendFrame(e),"base.sendFrame"),nodeAv.FFmpegError.throwIfError(await n.sendFrame(i),"alpha.sendFrame"),await this._mux.drain(t);}async flush(e){await this.sendEof(this._s.baseCtx,"base"),await this.sendEof(this._s.alphaCtx,"alpha"),await this._mux.drain(e);let t=this._mux.desyncAfterEof();if(t)throw new Error(`NVENC desync: ${t}`)}[Symbol.dispose](){let{basePkt:e,alphaPkt:t,baseCtx:o,alphaCtx:n,alphaSwFrame:i}=this._s;e.free(),t.free(),i.free(),n.freeContext(),o.freeContext();}async sendEof(e,t){let o=await e.sendFrame(null);o<0&&o!==constants.AVERROR_EAGAIN&&o!==constants.AVERROR_EOF&&nodeAv.FFmpegError.throwIfError(o,`nvenc.${t}.sendFrame(null)`);}};var pe=class r{_ctx;_pkt;_stream;_pts=0n;constructor(e,t,o){this._ctx=e,this._pkt=t,this._stream=o;}static async create(e){var l=[];try{let{codecName:t,codecTag:o,codecOpts:n,muxer:i,...s}=e;let c=nodeAv.Codec.findEncoderByName(t);if(!c)throw new Error(`Video encoder not found: ${t}`);let a=_(l,new DisposableStack);let d=a.use(await H({codec:c,...s,codecTag:o,options:n},"videoCtx.open2"));let p=a.use(k());let u=i.addStream(d,o);a.move();return new r(d,p,u)}catch(m){var h=m,w=true;}finally{x(l,h,w);}}async encode(e,t){e.pts=this._pts++,e.duration=1n,nodeAv.FFmpegError.throwIfError(await this._ctx.sendFrame(e),"videoCtx.sendFrame"),await this.drain(t);}async flush(e){await this._ctx.sendFrame(null),await this.drain(e);}[Symbol.dispose](){this._pkt.free(),this._ctx.freeContext();}drain(e){return ae(this._ctx,this._pkt,this._stream,e)}};var We=class r{_ctx;_pkt;_stream;_pts=0n;constructor(e,t,o){this._ctx=e,this._pkt=t,this._stream=o;}static async create(e){var m=[];try{let{width:t,height:o,fps:n,hw:i,bitrate:s,muxer:c}=e;let a=i.getEncoderCodec("hevc");if(!a)throw new Error("hevc_videotoolbox encoder not found");let d=await H({codec:a,width:t,height:o,fps:n,bitrate:s,pixelFormat:constants.AV_PIX_FMT_BGRA,colorRange:constants.AVCOL_RANGE_JPEG,codecTag:"hvc1",options:{alpha_quality:"1"}},"vtEnc.open2");let p=_(m,new DisposableStack);p.use(d);let u=p.use(k());let l=c.addStream(d,"hvc1");p.move();return new r(d,u,l)}catch(h){var w=h,y=true;}finally{x(m,w,y);}}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 ae(this._ctx,this._pkt,this._stream,e)}};var $e="[Encoder]";async function Or(r,e){var m=[];try{let{width:t,height:o,fps:n,bitrate:i=8e6,disableHwCodec:s=!1,sharedHw:c}=r;let a=c??(s?void 0:api.HardwareContext.auto()??void 0);let d=!c&&!!a;try{if(a?.deviceTypeName===constants.FF_HWDEVICE_TYPE_VIDEOTOOLBOX&&a.getEncoderCodec("hevc"))return g.debug($e,"using VideoToolbox HEVC alpha encoder"),{hwVideo:await We.create({width:t,height:o,fps:n,hw:a,bitrate:i,muxer:e}),hw:a,ownsHw:d};if(a?.deviceTypeName===constants.FF_HWDEVICE_TYPE_CUDA&&a.getEncoderCodec("hevc"))return g.debug($e,"using NVENC dual-layer HEVC alpha encoder"),{hwVideo:await Ue.create({width:t,height:o,fps:n,hw:a,bitrate:i,muxer:e}),hw:a,ownsHw:d}}catch(P){g.warn($e,"Hardware codec session limits reached, use software encoder",P),d&&a?.dispose();}g.debug($e,"using software libx265 HEVC alpha encoder");let p=_(m,new DisposableStack);let u=p.use(await pe.create({width:t,height:o,fps:n,codecName:constants.FF_ENCODER_LIBX265,codecTag:"hvc1",codecOpts:{preset:"fast","x265-params":"log-level=1:bframes=3:pools=+:frame-threads=0"},bitrate:i,pixelFormat:constants.AV_PIX_FMT_YUVA420P,muxer:e}));let l=p.use(await W.create(t,o));p.move();return {video:u,codec:l,ownsHw:!1}}catch(h){var w=h,y=true;}finally{x(m,w,y);}}var me=class{_ctx;_opened=false;_disposed=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(){var t=[];try{if(this._opened)return;nodeAv.FFmpegError.throwIfError(await this._ctx.openOutput(),"openOutput");let e=_(t,nodeAv.Dictionary.fromObject({movflags:"+faststart"}));nodeAv.FFmpegError.throwIfError(await this._ctx.writeHeader(e),"writeHeader");this._opened=!0;}catch(o){var n=o,i=true;}finally{x(t,n,i);}}async writePacket(e){nodeAv.FFmpegError.throwIfError(await this._ctx.interleavedWriteFrame(e),"interleavedWriteFrame");}async[Symbol.asyncDispose](){if(!this._disposed){this._disposed=true;try{if(this._opened){this._opened=!1;try{await this._ctx.writeTrailer();}finally{await this._ctx.closeOutput();}}}finally{await this._ctx[Symbol.asyncDispose]();}}}};var Ce=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){var s=[];try{let t=_(s,new AsyncDisposableStack,!0);let o=t.use(new me(e.outFile));let n=e.kind==="mp4"?await r.mp4Video(e,o):await r.webmVideo(e,o);n.video&&t.use(n.video);n.hwVideo&&t.use(n.hwVideo);n.codec&&t.use(n.codec);n.ownsHw&&n.hw&&t.use(n.hw);let i=e.withAudio?await r.audioFor(e,o):void 0;i&&t.use(i);await o.open();t.move();return new r({muxer:o,...n,audio:i,opts:e})}catch(c){var a=c,d=true;}finally{var p=x(s,a,d);p&&await p;}}static mp4Video(e,t){let{width:o,height:n,fps:i,disableHwCodec:s,sharedHw:c}=e;return Or({width:o,height:n,fps:i,disableHwCodec:s,sharedHw:c},t)}static async webmVideo(e,t){let{width:o,height:n,fps:i}=e;return {video:await pe.create({width:o,height:n,fps:i,codecName:Pe,codecOpts:{deadline:"realtime","cpu-used":"8","row-mt":"1",threads:"2"},bitrate:4e6,pixelFormat:constants.AV_PIX_FMT_YUVA420P,muxer:t}),codec:await W.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 Le.create({...o,globalHeader:true,bitrate:128e3,muxer:t})}setInputRate(e){this._s.audio?.setInputRate(e);}async encodeBGRA(e){let{hwVideo:t,muxer:o}=this._s;return t?t.encode(e,o):this.swEncode(e)}async encodeDecodedFrame(e){let{hwVideo:t,muxer:o}=this._s;return t?t.encode(e,o):this.swEncode(e)}async encodeAudio(e){await this._s.audio?.encode(e,this._s.muxer);}async flush(){let{hwVideo:e,video:t,audio:o,muxer:n}=this._s;await o?.flush(n),e?await e.flush(n):await t.flush(n);}async[Symbol.asyncDispose](){if(this._disposed)return;this._disposed=true;let{muxer:e,video:t,hwVideo:o,audio:n,codec:i,hw:s,ownsHw:c}=this._s;t?.[Symbol.dispose](),o?.[Symbol.dispose](),n?.[Symbol.dispose](),i?.[Symbol.dispose](),await e[Symbol.asyncDispose](),c&&s?.dispose();}async swEncode(e){let{video:t,codec:o,muxer:n}=this._s;assert.ok(o?.sws,"sws not initialized"),nodeAv.FFmpegError.throwIfError(o.dst.makeWritable(),"sinkDst.makeWritable"),nodeAv.FFmpegError.throwIfError(await o.sws.scaleFrame(o.dst,e),"sinkSws.scaleFrame"),await t.encode(o.dst,n);}};var le=class r{_s;_disposed=false;constructor(e){this._s=e;}static async create(e){var w=[];try{let{width:t,height:o,fps:n,outFile:i,withAudio:s=!1,disableHwCodec:c=!1}=e;let a=i.split(",").map(b=>b.trim()).filter(Boolean);if(a.length===0)throw new Error("outFile must contain at least one path");let d=a.map(b=>Ce.kindFromPath(b));let p=!c&&d.includes("mp4");let u=_(w,new AsyncDisposableStack,!0);let l=p?api.HardwareContext.auto()??void 0:void 0;l&&u.use(l);let m=l?.deviceTypeName===constants.FF_HWDEVICE_TYPE_VIDEOTOOLBOX||l?.deviceTypeName===constants.FF_HWDEVICE_TYPE_CUDA;let h=[];for(let b=0;b<a.length;b++){let S=await Ce.create({outFile:a[b],kind:d[b],width:t,height:o,fps:n,withAudio:s,disableHwCodec:c,sharedHw:d[b]==="mp4"&&m?l:void 0});u.use(S),h.push(S);}u.move();return new r({sinks:h,sharedHw:l,limiter:new se(1),outFiles:a,opts:e})}catch(y){var P=y,v=true;}finally{var E=x(w,P,v);E&&await 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=_(o,this.bgraFrame(e));await Promise.all(this._s.sinks.map(c=>c.encodeBGRA(t)));}catch(n){var i=n,s=true;}finally{x(o,i,s);}});}async encodePNG(e){await this._s.limiter.schedule(async()=>{let{width:t,height:o}=this._s.opts;this._s.pngCodec??=await W.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){var n=[];try{let t=_(n,new DisposableStack);let o=t.use(Z(this._s.opts.width,this._s.opts.height,constants.AV_PIX_FMT_BGRA));nodeAv.FFmpegError.throwIfError(o.fromBuffer(e),"bgraFrame.fromBuffer");t.move();return o}catch(i){var s=i,c=true;}finally{x(n,s,c);}}};var Ge=class{_fps;_actual=0;_currentBurst=0;_bursts=[];constructor(e){this._fps=e;}wrote(e=1){this._currentBurst>0&&(this._bursts.push(this._currentBurst),this._currentBurst=0),this._actual+=e;}dropped(e=1){this._currentBurst+=e;}finalize(){this._currentBurst>0&&(this._bursts.push(this._currentBurst),this._currentBurst=0);let e=0,t=0,o=0;for(let a of this._bursts){e+=a,o=Math.max(o,a);let d=Math.max(0,a-1);t+=(d/this._fps)**2;}let n=this._actual+e,i=n>0?e/n:0,s=Math.min(1,t),c=1-(1-i)*(1-s);return {global:i,local:s,jank:c,expected:n,actual:this._actual,maxBurst:o}}};function ze(r,e){return r.width===e.width&&r.height===e.height}var Nr="audio-meta",Vr="audio-chunk";function Hr({wc:r,encoder:e,getVideoTimeMs:t,onError:o}){let n=async(s,c)=>{let a=c.sampleRate,d=t();e.setupAudio(a);let p=Math.ceil(d*a/1e3);if(!(p<=0))try{await e.encodeAudio(Buffer.alloc(p*2*4));}catch(u){o(u);}},i=async(s,c)=>{try{await e.encodeAudio(c);}catch(a){o(a);}};return r.ipc.on(Nr,n),r.ipc.on(Vr,i),()=>{r.ipc.removeListener(Nr,n),r.ipc.removeListener(Vr,i);}}function je({fn:r,maxAttempts:e=3,timeout:t,signal:o}){let n=new Error(`timeout over ${t}ms`);return async(...i)=>{let s=0;for(;;){o?.throwIfAborted();try{let c=[r(...i)];return t&&c.push(promises$1.setTimeout(t).then(()=>{throw n})),await Promise.race(c)}catch(c){if(o?.throwIfAborted(),s++,s>=e)throw c;await Ie(2**s*100+Math.random()*100);}}}}var Et=["file:","http:","https:","data:"],oi=/^(file:|https?:|data:)/;function Ur(r){if(oi.test(r))return;let e=`${r.split(":")[0]}:`,t=Et.includes(e)?`unsupported protocol: ${e}, expected ${Et.join(", ")}`:`invalid source format, expected ${Et.join(", ")}`;throw new Error(t)}var qe=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 Xe="[Network]",ii=new Map([["jssz-boss.hdslb.com","jssz-boss.bilibili.co"],["boss.hdslb.com","shjd-boss.bilibili.co"]]),si=["pup:","pup-frame:","file:","data:","blob:","chrome-extension:","devtools:"];function ai(r){for(let e of si)if(r.startsWith(e))return true;return false}function fe(r){if(!r.startsWith("http"))return r;let e=new url.URL(r),t=ii.get(e.hostname);return t?(e.hostname=t,e.protocol="http:",e.toString()):r}function Wr({source:r,window:e,useInnerProxy:t,stubMedia:o}){let n=e.webContents.session.webRequest,i=new se(256),s=new Map;async function c(d,p){let u=new qe;s.set(d,u),await u.wait({timeout:5e3,onTimeout:p}).finally(()=>s.delete(d));}function a(d){s.get(d)?.signal();}n.onBeforeRequest((d,p)=>{let u=d.url;if(o&&d.resourceType==="media"&&!u.startsWith("pup-frame:")){p({redirectURL:`pup-frame://stub?src=${encodeURIComponent(u)}`});return}let l=t?fe(u):u;i.schedule(()=>{let m=`${e.id}_${d.id}`;return g.debug(Xe,"start:",{key:m,url:u,proxied:l,method:d.method,source:r,stats:i.stats}),p(l===u?{cancel:false}:{cancel:false,redirectURL:l}),ai(u)?Promise.resolve():c(m,()=>{g.warn(Xe,"maybe timeout:",{key:m,url:u,proxied:l,method:d.method,source:r});})});}),n.onHeadersReceived(({responseHeaders:d},p)=>{delete d?.["x-frame-options"],delete d?.["X-Frame-Options"],delete d?.["content-security-policy"],delete d?.["Content-Security-Policy"],p({cancel:false,responseHeaders:d});}),n.onCompleted(d=>{let p=`${e.id}_${d.id}`;a(p),g.debug(Xe,"completed:",{key:p,url:d.url,method:d.method,statusCode:d.statusCode,source:r});}),n.onErrorOccurred(d=>{let p=`${e.id}_${d.id}`;a(p);let{url:u,method:l,error:m,resourceType:h}=d;g[o&&h==="media"?m==="net::ERR_ABORTED"?"debug":"warn":"error"](Xe,"error:",{key:p,url:u,method:l,error:m,resourceType:h,source:r});});}function St(r){let e=r.webContents.session.webRequest;e.onBeforeRequest(null),e.onHeadersReceived(null),e.onCompleted(null),e.onErrorOccurred(null);}var te="[Window]",$r=new Error("window timeout"),di=["%cElectron Security Warning","Mixed Content: The page at"];function ui({source:r,win:e,action:t,timeoutMs:o,tolerant:n,signal:i}){return new Promise((s,c)=>{let a=false,d=setTimeout(()=>p(n&&a?void 0:$r),o),p=u=>{clearTimeout(d),u?c(u):s();};i?.throwIfAborted(),i?.addEventListener("abort",()=>p(i.reason),{once:true}),e.webContents.once("dom-ready",()=>{g.debug(te,"dom-ready:",{source:r}),a=true;}),e.webContents.once("did-stop-loading",()=>{g.debug(te,"did-stop-loading:",{source:r}),p();}),e.webContents.once("did-fail-load",(u,l,m,h)=>{let w=`did-fail-load: ${JSON.stringify({url:h,source:r,code:l,desc:m})}`;g.error(te,w),p(new Error(w));}),e.webContents.once("render-process-gone",(u,{exitCode:l,reason:m})=>{let h=`render-process-gone: ${JSON.stringify({source:r,exitCode:l,reason:m})}`;g.error(te,h),p(new Error(h));}),t();})}function he(r){return new Promise(e=>{St(r);let t=setTimeout(()=>{try{g.warn(te,"force close"),r.destroy();}catch{}o();},1e3),o=()=>{clearTimeout(t),e();};r.webContents.stopPainting(),r.webContents.debugger.detach(),r.once("closed",o),r.close();})}function pi(r){if(r.deterministic)return zt;if(r.withAudio)return Gt}async function Gr({source:r,renderer:e,tolerant:t,signal:o,onCreated:n}){let{width:i,height:s,useInnerProxy:c}=e,a=c?fe(r):r,d=new electron.BrowserWindow({width:i,height:s+1,minWidth:i,minHeight:s+1,maxWidth:i,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,preload:pi(e)}});Wr({source:r,window:d,useInnerProxy:c,stubMedia:e.deterministic}),d.webContents.debugger.attach("1.3"),await n?.(d),d.webContents.on("console-message",({level:p,message:u,lineNumber:l,sourceId:m})=>{if(p==="warning"&&di.find(w=>u.startsWith(w)))return;let h=[te,"console:",{message:u,lineNumber:l,sourceId:m,source:r}];p==="error"?g.error(...h):g.debug(...h),e.onConsole(p,u);});try{let p=fr(a,{width:i,height:s});await ui({source:r,win:d,action:()=>d.loadURL(p),timeoutMs:e.windowTimeout*1e3,tolerant:t,signal:o});}catch(p){throw await he(d),p}return d}var mi=je({fn:Gr,maxAttempts:2});async function Ye({source:r,renderer:e,onCreated:t,signal:o}){Ur(r),o?.throwIfAborted();let n,i;try{n=await mi({source:r,renderer:e,signal:o});}catch(c){i=c;}let s=()=>Gr({source:r,renderer:e,onCreated:t,signal:o,tolerant:e.windowTolerant});if(e.windowTolerant&&i===$r)return g.warn(te,`warmup timeout: ${r}, falling back to dom-ready`),await s();if(i){let{message:c,stack:a}=i;throw new Error(`failed to warmup window: ${JSON.stringify({source:r,message:c,stack:a})}`)}n&&(n.webContents.removeAllListeners(),St(n),await Ie(2e3),await he(n));try{return await s()}catch(c){let{message:a,stack:d}=c;throw new Error(`failed to load window: ${JSON.stringify({source:r,message:a,stack:d})}`)}}var zr="[Render]";async function jr(r){var we=[];try{let{source:e,fps:t,width:o,height:n,duration:i,withAudio:s,outFile:c,disableHwCodec:a,signal:d,onProgress:p}=r;let u=_(we,await le.create({width:o,height:n,fps:t,outFile:c,withAudio:s,disableHwCodec:a}),!0);let l=Math.ceil(t*i);let m=1e3/t;let h={width:o,height:n+1};let w=0;let y;let P=0;let v;let E;let b;let S;let C=new Ge(t);let B=new ie(o,n);let L;let F=T=>{w++,B.sample(T),u.encodeBGRA(T).catch(R=>v??=R);};let Ae=(T,R,be)=>{if(v??=d?.reason,v){b?.(v);return}let Y=be.getSize();if(!ze(Y,h)){De(ke,h);return}let rt=be.toBitmap(),xe=Oe(rt,Y);if(xe===void 0){v??=new Error(`no timestamp @ ${w}`);return}if(y!==void 0&&xe-y<m*.8)return;let ot=Buffer.from(rt.buffer,rt.byteOffset,n*o*4);if(y===void 0)F(ot),C.wrote();else {let Rt=xe-y;if(Rt<=m*1.2)F(ot),C.wrote();else {let It=Math.round(Rt/m);C.dropped(It-1),C.wrote();for(let Bt=0;Bt<It&&w<l;Bt++)F(ot);}}y=xe;let Tt=Math.floor(w/l*100);Tt!==P&&(P=Tt,p(P));let uo=i*1e3;(xe>=uo-m*.5||w>=l)&&E?.();};let M=await Ye({source:e,renderer:r,signal:d,onCreated:T=>{s&&(L=Hr({wc:T.webContents,encoder:u,getVideoTimeMs:()=>y??0,onError:R=>v??=R}));}});let ke=M.webContents.debugger;try{M.webContents.stopPainting(),M.webContents.setFrameRate(t),M.webContents.on("paint",Ae),M.webContents.startPainting(),d?.throwIfAborted(),d?.addEventListener("abort",()=>b?.(d.reason),{once:!0}),await cr(ke),await new Promise((T,R)=>{[E,b]=[T,R];let be=0,Y=0;S=setInterval(()=>{if(w!==be){be=w,Y=0;return}if(Y>=3){b?.(new Error("drawable timeout"));return}g.warn(zr,`${e} render is extremely slow, written=${w} stuck=${Y}`),Y++,M.webContents.invalidate();},1e3);});}finally{clearInterval(S),M.webContents.off("paint",Ae),await he(M),L?.(),await u.finish();}if(v||w===0)throw v??new Error("no frames captured");else {let T=C.finalize(),R=B.finalize();return R>=.5&&g.warn(zr,`${e} blank-frame ratio ${Math.round(R*100)}% \u2014 possible white/blank screen`),{written:w,jank:T.jank,outFile:c,blank:R}}}catch(N){var ge=N,tt=true;}finally{var _e=x(we,ge,tt);_e&&await _e;}}var li="[Rerender]",qr=3;async function Xr(r,e){let t;for(let o=0;o<qr;o++)try{return await e()}catch(n){if(r.aborted)throw n;t=n,g.warn(li,`retry ${o+1}/${qr}: ${n.message}`);}throw t}var fi="[Video]";async function Yr({frame:r,timestampMs:e,signal:t}){if(r?.url){t?.throwIfAborted();try{await ft(r.executeJavaScript("window.__pup_video__&&window.__pup_video__.ready()"),t),await ft(r.executeJavaScript(`window.__pup_video__&&window.__pup_video__.advance(${e})`),t);}catch(o){t?.throwIfAborted(),g.warn(fi,`advance skipped: ${o instanceof Error?o.message:String(o)}`);}}}var Kr="__pup_tick__";async function Qr(r){let{frame:e,timestampMs:t}=r;if(!e)return;let o=`window.${Kr}&&window.${Kr}.process(${t})`,n=e.executeJavaScript(o);await Promise.all([J(n,5e3,"tick.executeJavaScript"),Yr(r)]);}var wi="8000000";function Ke(r,e){let t={signal:e,options:{rw_timeout:wi}};return api.Demuxer.open(r,t)}async function*Jr({src:r,meta:e,signal:t,onDemuxer:o}){var b=[];try{let n=_(b,await Ke(r,t),!0);o?.(n);let i=n.streams?.find(F=>F.codecpar.codecType===constants.AVMEDIA_TYPE_VIDEO);if(!i)throw new Error("no video stream");let s=_(b,await api.Decoder.create(i,{signal:t}));let{frameWidth:c,frameHeight:a,width:d,height:p,fps:u}=e;let l=c!==d||a!==p?`scale=${c}:${a},`:"";let m=_(b,api.FilterAPI.create(`fps=${u},${l}format=rgba`,{signal:t}));let h=0;for await(var w of m.frames(s.frames(n.packets(i.index)))){var y=[];try{let F=_(y,w);F&&(yield {idx:++h,buf:xi(F)});}catch(P){var v=P,E=!0;}finally{x(y,v,E);}}}catch(S){var C=S,B=true;}finally{var L=x(b,C,B);L&&await L;}}function xi(r){let e=r.width*4,t=r.linesize[0],o=r.data[0];if(t===e)return Buffer.from(o.subarray(0,e*r.height));let n=Buffer.allocUnsafe(e*r.height);for(let i=0;i<r.height;i++)o.copy(n,i*e,i*t,i*t+e);return n}var vi="[DecodeSession]",yi=4,Pi=16,Ei=256*1024*1024,Si=3,Qe=class{constructor(e,t){this.meta=e;this._src=t;this._leadFrames=Math.round(e.leadGap*e.fps),this._keepCount=Math.max(Pi,Math.floor(Ei/(e.frameWidth*e.frameHeight*4))),this._pumpDone=this.pump();}meta;_src;_buf=new Map;_ready=0;_want=1;_done=false;_closed=false;_gen=0;_ctrl=new AbortController;_waiters=new Set;_resume;_restart;_demuxer;_leadFrames;_keepCount;_pumpDone;async getFrame(e){e<1&&(e=1),e<=this._leadFrames&&(e=this._leadFrames+1);let t=this._buf.get(e);return t||(this._done&&e>this._ready?Buffer.alloc(0):(e>this._ready?(e>this._want&&(this._want=e),this.wake()):(this._ready=0,this._done=false,this._want=e,this.requestRestart()),this.wait(e)))}async close(){this._closed=true,this._done=true,this._ctrl.abort(),this.wake(),this.requestRestart();for(let e of this._waiters)e.resolve(Buffer.alloc(0));this._waiters.clear(),this._buf.clear(),this._demuxer?.interrupt(),await this._pumpDone;}wait(e){return new Promise(t=>this._waiters.add({idx:e,resolve:t}))}wake(){let e=this._resume;this._resume=void 0,e?.();}requestRestart(){this._gen++;let e=this._restart;this._restart=void 0,e?.(),this.wake();}async pump(){let e=0;for(;!this._closed;){let t=this._gen;this._ready=0,this._done=false,this._buf.clear();let o=false;try{await this.decodePass(t);}catch(n){!this._closed&&this._gen===t&&(o=true,g.warn(vi,`[${this.meta.id.slice(0,8)}] decode pass failed: ${n instanceof Error?n.message:String(n)}`));}finally{this._demuxer=void 0;}if(this._closed)break;if(this._gen!==t){e=0;continue}o&&++e<=Si||(e=0,this._done=true,this.drainWaiters(),await this.untilRestart());}}async decodePass(e){let t=Jr({src:this._src,meta:this.meta,signal:this._ctrl.signal,onDemuxer:o=>{this._demuxer=o;}});for await(let{idx:o,buf:n}of t){if(this._closed||this._gen!==e)return;let i=this._leadFrames+o;for(;!this._closed&&this._gen===e&&i>this.demand+yi;)await this.pause();if(this._closed||this._gen!==e)return;this._buf.set(i,n),this._ready=i,this.drainWaiters(),this.evict();}}get demand(){let e=this._want;for(let t of this._waiters)t.idx>e&&(e=t.idx);return e}pause(){return new Promise(e=>{this._resume=e;})}untilRestart(){return this._closed?Promise.resolve():new Promise(e=>{this._restart=e;})}evict(){let e=this._want-this._keepCount;for(let t of this._buf.keys())t<e&&this._buf.delete(t);}drainWaiters(){for(let e of [...this._waiters]){let t=this._buf.get(e.idx);t?(this._waiters.delete(e),e.resolve(t)):this._done&&(this._waiters.delete(e),e.resolve(Buffer.alloc(0)));}}};async function Zr(r){var P=[];try{let e=_(P,await Ke(r),!0);let t=e.streams?.find(C=>C.codecpar.codecType===constants.AVMEDIA_TYPE_VIDEO);if(!t)throw new Error("probe: no video stream");let o=e.duration>0?e.duration:0;let n=t.timeBase.num/t.timeBase.den;let i=_(P,await api.Decoder.create(t,{threadCount:1}));let s=0;e:for await(var l of e.packets(t.index)){var m=[];try{let C=_(m,l);try{for await(var c of i.frames(C)){var a=[];try{let B=_(a,c);if(B?.decodeErrorFlags===0){s=Math.max(0,Number(B.pts)*n);break e}}catch(d){var p=d,u=!0;}finally{x(a,p,u);}}}catch{}}catch(h){var w=h,y=!0;}finally{x(m,w,y);}}return {width:t.codecpar.width,height:t.codecpar.height,duration:o,leadGap:s}}catch(v){var E=v,b=true;}finally{var S=x(P,E,b);S&&await S;}}async function to({width:r,height:e,duration:t}){let o=nodeAv.Codec.findEncoderByName(Pe);if(!o)throw new Error(`stub: encoder not found: ${Pe}`);let n=path.join(os.tmpdir(),`pup_stub_${crypto.randomBytes(8).toString("hex")}.webm`);try{{var i=[];try{let p=_(i,new me(n),!0);let u=_(i,await H({codec:o,width:r,height:e,fps:1e3,bitrate:1e5,pixelFormat:constants.AV_PIX_FMT_YUV420P,options:{deadline:"realtime","cpu-used":"8"}},"stubCtx.open2"));let l=p.addStream(u);await p.open();let m=_(i,new At(r,e));let h=BigInt(Math.max(1,Math.round(t*1e3)));m.frame.pts=0n;m.frame.duration=h;nodeAv.FFmpegError.throwIfError(await u.sendFrame(m.frame),"stubCtx.sendFrame");nodeAv.FFmpegError.throwIfError(await u.sendFrame(null),"stubCtx.flush");let w=_(i,k());for(;;){let y=await u.receivePacket(w);if(y===constants.AVERROR_EAGAIN||y===constants.AVERROR_EOF)break;nodeAv.FFmpegError.throwIfError(y,"stubCtx.receivePacket"),w.streamIndex=l.index,w.duration=h,w.rescaleTs(u.timeBase,l.timeBase),await p.writePacket(w),w.unref();}}catch(s){var c=s,a=!0;}finally{var d=x(i,c,a);d&&await d;}}return await promises.readFile(n)}finally{await promises.rm(n,{force:true});}}var At=class{frame;_buf;constructor(e,t){let o=e*t,n=Math.ceil(e/2)*Math.ceil(t/2);this._buf=Buffer.alloc(o+n*2,128),this._buf.fill(0,0,o),this.frame=nodeAv.Frame.fromVideoBuffer(this._buf,{width:e,height:t,format:constants.AV_PIX_FMT_YUV420P});}[Symbol.dispose](){this.frame[Symbol.dispose]();}};var Je=class{constructor(e){this._useInnerProxy=e;}_useInnerProxy;_sessions=new Map;_probes=new Map;_stubs=new Map;_closed=false;async open(e){if(this._closed)throw new Error("frame-server: closed");let t=Ni(e),o=this._sessions.get(t);if(o)return o.refs++,o.session.meta;let n=this._useInnerProxy?fe(e.src):e.src,i=await this.probeCached(n);if(this._closed)throw new Error("frame-server: closed");let s=i.width,c=i.height;if(e.dstW&&e.dstH&&e.fit!=="none"){let d=Math.min(1,Math.max(e.dstW/i.width,e.dstH/i.height));s=ro(i.width*d),c=ro(i.height*d);}let a={id:t,width:i.width,height:i.height,frameWidth:s,frameHeight:c,fps:e.fps,duration:i.duration,leadGap:i.leadGap};return this._sessions.set(t,{session:new Qe(a,n),refs:1}),a}stub(e){if(this._closed)throw new Error("frame-server: closed");let t=this._useInnerProxy?fe(e):e,o=this._stubs.get(t);if(o)return o;let n=this.probeCached(t).then(i=>to({width:i.width,height:i.height,duration:i.duration}));return n.catch(()=>this._stubs.delete(t)),this._stubs.set(t,n),n}getFrame(e,t){let o=this._sessions.get(e);return o?o.session.getFrame(t):Promise.resolve(Buffer.alloc(0))}async close(e){let t=this._sessions.get(e);t&&(--t.refs>0||(this._sessions.delete(e),await t.session.close()));}probeCached(e){let t=this._probes.get(e);if(t)return t;let o=je({fn:Zr})(e);return o.catch(()=>this._probes.delete(e)),this._probes.set(e,o),o}async closeAll(){this._closed=true;let e=[...this._sessions.values()];this._sessions.clear(),await Promise.all(e.map(t=>t.session.close()));}};function Ni(r){return crypto.createHash("sha1").update(`${r.src}|${r.fps}|${r.dstW??""}|${r.dstH??""}|${r.fit??""}`).digest("hex")}function ro(r){let e=Math.round(r);return Math.max(2,e-e%2)}var no="[FrameProtocol]",io="pup-frame",q={"access-control-allow-origin":"*","access-control-allow-methods":"GET, OPTIONS","access-control-allow-headers":"*"};function so(r){let e=new Je(r);return electron.protocol.handle(io,async t=>{if(t.method==="OPTIONS")return new Response(null,{status:204,headers:q});let o=new URL(t.url);g.debug(no,`${t.method} ${o.hostname}${o.search}`);try{switch(o.hostname){case "open":return Vi(await e.open({src:o.searchParams.get("src")??"",fps:Ze(o,"fps",30),dstW:Ze(o,"w",0),dstH:Ze(o,"h",0),fit:o.searchParams.get("fit")??void 0}));case "frame":return Ui(await e.getFrame(o.searchParams.get("id")??"",Ze(o,"idx",1)));case "stub":return Hi(await e.stub(o.searchParams.get("src")??""));case "close":return await e.close(o.searchParams.get("id")??""),new Response(null,{status:204,headers:q});default:return new Response(`unknown action: ${o.hostname}`,{status:404,headers:q})}}catch(n){let i=n instanceof Error?n.message:String(n);return g.error(no,`${o.hostname} failed${o.search}: ${i}`),new Response(i,{status:500,headers:q})}}),{[Symbol.asyncDispose]:async()=>{electron.protocol.unhandle(io),await e.closeAll();}}}function Vi(r){return new Response(JSON.stringify(r),{headers:{...q,"content-type":"application/json"}})}function Hi(r){let e=new Uint8Array(r.byteLength);return e.set(r),new Response(e.buffer,{headers:{...q,"content-type":"video/webm","cache-control":"no-store"}})}function Ui(r){if(r.byteLength===0)return new Response(null,{status:410,headers:q});let e=new Uint8Array(r.byteLength);return e.set(r),new Response(e.buffer,{headers:{...q,"content-type":"application/octet-stream","cache-control":"no-store"}})}function Ze(r,e,t){let o=r.searchParams.get(e),n=o?parseInt(o,10):NaN;return Number.isFinite(n)?n:t}var et="[Shoot]";async function Wi({source:r,win:e,size:t,ms:o}){let n,i=0,s,c=e.webContents.debugger,a={width:t.width,height:t.height+1};try{return await new Promise((d,p)=>{s=setInterval(()=>{if(i>=3){p(new Error("drawable timeout"));return}i++,g.warn(et,`${r} render is extremely slow @ ${o}, current: ${n} with ${i} repeats`),e.webContents.invalidate();},1e3);let u=(l,m,h)=>{let w=h.getSize();if(!ze(w,a)){De(c,a);return}let y=h.crop({x:0,y:a.height-2,width:ne,height:2}),P=Oe(y.toBitmap(),{width:ne,height:2});if(P===void 0||Math.abs(P-o)>1){n=P;return}let v=h.toBitmap();e.webContents.off("paint",u),d(Buffer.from(v.buffer,v.byteOffset,t.height*t.width*4));};e.webContents.on("paint",u);})}finally{clearInterval(s);}}async function ao(r){var F=[];try{let{source:e,fps:t,width:o,height:n,duration:i,withAudio:s,outFile:c,disableHwCodec:a,signal:d,onProgress:p}=r;s&&g.warn(et,"audio will be ignored on this mode");let u=_(F,so(r.useInnerProxy),!0);let l=performance.now();let m=Ye({source:e,renderer:r,signal:d});let h=_(F,await le.create({width:o,height:n,fps:t,outFile:c,withAudio:s,disableHwCodec:a}),!0);let w=await m;g.debug(et,"init done:",{source:e,cost:performance.now()-l});let y=Math.ceil(t*i);let P=1e3/t;let v=0;let E=0;let b;let S=new ie(o,n);let C=w.webContents.debugger;let B=w.webContents.mainFrame;let L=B.frames[0];try{w.webContents.setFrameRate(240),await ir(C);for(let N=0;N<y;N++){d?.throwIfAborted();let ge=(N+1)*P,tt=ur(w.webContents);await Promise.all([Qr({frame:L,timestampMs:ge,signal:d}),dr(w.webContents,ge)]),await Promise.all([nr(C,P),tt]);let _e=await Wi({source:e,win:w,size:{width:o,height:n},ms:ge});if(S.sample(_e),h.encodeBGRA(_e).catch(R=>b??=R),v++,b)throw b;let T=Math.floor(v/y*100);T!==E&&(E=T,p(E));}}finally{await he(w),await h.finish();}if(b)throw b;if(v===0)throw new Error("no frames captured");else {let N=S.finalize();return N>=.5&&g.warn(et,`${e} blank-frame ratio ${Math.round(N*100)}% \u2014 possible white/blank screen`),{written:v,jank:0,outFile:c,blank:N}}}catch(Ae){var M=Ae,ke=true;}finally{var we=x(F,M,ke);we&&await we;}}var qi="[App]";function co(){g.debug(qi,"gpu features:",electron.app.getGPUFeatureStatus());}var Fe=new AbortController,kt=false;Jt();electron.Menu.setApplicationMenu(null);electron.app.dock?.hide();electron.app.on("window-all-closed",()=>{});electron.app.on("gpu-info-update",co);electron.app.on("before-quit",r=>!kt&&r.preventDefault());electron.app.on("will-quit",r=>!kt&&r.preventDefault());assert.ok(process.send,"ipc channel missing \u2014 spawn with stdio[3]='ipc'");process.once("disconnect",()=>Fe.abort("disconnect"));process.on("message",r=>{let e=r;e.type==="cancel"&&Fe.abort(e.reason);});or({name:"app",run:async(r,e)=>{let t=new Re;try{await electron.app.whenReady(),lr(),co();for(let i of e.outFile.split(","))await promises.mkdir(path.dirname(i),{recursive:!0});let o=e.deterministic?ao:jr;Fe.signal.throwIfAborted();let n=await Xr(Fe.signal,()=>o({source:r,...e,signal:Fe.signal,onProgress:i=>t.writeProgress(i),onConsole:(i,s)=>t.writeConsole(i,s)}));await t.writeDone(n);}catch(o){let n=o,i=n.stack??n.message??String(o??"unknown error");await t.writeError(i);}finally{kt=true,electron.app.exit();}}});
|
|
96
96
|
//# sourceMappingURL=app.cjs.map
|
|
97
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL3RzdXBAOC41LjErYTI3MDY0MzQ3NGU3MzE4ZC9ub2RlX21vZHVsZXMvdHN1cC9hc3NldHMvY2pzX3NoaW1zLmpzIiwiLi4vc3JjL2Jhc2UvZW52LnRzIiwiLi4vc3JjL2Jhc2UvcGFyc2VyLnRzIiwiLi4vc3JjL2Jhc2UvY29uc3RhbnRzLnRzIiwiLi4vc3JjL2Jhc2UvbG9nZ2luZy50cyIsIi4uL3NyYy9iYXNlL2NyYXNoLnRzIiwiLi4vc3JjL2Jhc2Uvbm9lcnIudHMiLCIuLi9zcmMvYmFzZS9wcm9jZXNzLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3NjaGVtYS50cyIsIi4uL3NyYy9jb21tb24udHMiLCIuLi9zcmMvcmVuZGVyZXIvaXBjLnRzIiwiLi4vc3JjL2Jhc2UvdGltaW5nLnRzIiwiLi4vc3JjL2Jhc2UvY2RwLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3N0ZWdvLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3Byb3RvY29sLnRzIiwiLi4vc3JjL2Jhc2UvYmxhbmtfZnJhbWUudHMiLCIuLi9zcmMvYmFzZS9saW1pdGVyLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9taXNjLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9jb2RlYy50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvYXVkaW8udHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL2hldmNfYWxwaGEvYml0LnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9oZXZjX2FscGhhL25hbC50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvaGV2Y19hbHBoYS9hbHBoYV9kYXJ3aW4udHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL2hldmNfYWxwaGEvdnBzLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9oZXZjX2FscGhhL2FscGhhLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9oZXZjX2FscGhhL2R1YWxfbGF5ZXJfbXV4LnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9oZXZjX2FscGhhL3BhcnNlci50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvaGV2Y19hbHBoYS9udmVuYy50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvdmlkZW8udHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL3ZpZGVvdG9vbGJveC50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvZmFjdG9yeS50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvbXV4ZXIudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL3NpbmsudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL3BpcGVsaW5lLnRzIiwiLi4vc3JjL2Jhc2UvZnJhbWVfZHJvcC50cyIsIi4uL3NyYy9iYXNlL2ltYWdlLnRzIiwiLi4vc3JjL3JlbmRlcmVyL2F1ZGlvLnRzIiwiLi4vc3JjL2Jhc2UvcmV0cnkudHMiLCIuLi9zcmMvcmVuZGVyZXIvaHRtbF9jaGVjay50cyIsIi4uL3NyYy9iYXNlL3dhaXRhYmxlX2V2ZW50LnRzIiwiLi4vc3JjL3JlbmRlcmVyL25ldHdvcmsudHMiLCIuLi9zcmMvcmVuZGVyZXIvd2luZG93LnRzIiwiLi4vc3JjL3JlbmRlcmVyL3JlbmRlci50cyIsIi4uL3NyYy9yZW5kZXJlci9yZXJlbmRlci50cyIsIi4uL3NyYy9yZW5kZXJlci92aWRlby9hZHZhbmNlLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3RpY2sudHMiLCIuLi9zcmMvcmVuZGVyZXIvdmlkZW8vb3Blbi50cyIsIi4uL3NyYy9yZW5kZXJlci92aWRlby9kZWNvZGUudHMiLCIuLi9zcmMvcmVuZGVyZXIvdmlkZW8vZGVjb2RlX3Nlc3Npb24udHMiLCIuLi9zcmMvcmVuZGVyZXIvdmlkZW8vcHJvYmUudHMiLCIuLi9zcmMvcmVuZGVyZXIvdmlkZW8vc3R1Yi50cyIsIi4uL3NyYy9yZW5kZXJlci92aWRlby9mcmFtZV9zZXJ2ZXIudHMiLCIuLi9zcmMvcmVuZGVyZXIvdmlkZW8vcHJvdG9jb2wudHMiLCIuLi9zcmMvcmVuZGVyZXIvc2hvb3QudHMiLCIuLi9zcmMvYXBwLnRzIl0sIm5hbWVzIjpbImdldEltcG9ydE1ldGFVcmwiLCJpbXBvcnRNZXRhVXJsIiwicGVudiIsIm5hbWUiLCJwYXJzZXIiLCJkZWZhdWx0VmFsdWUiLCJwYXJzZU51bWJlciIsIngiLCJudW0iLCJyZXF1aXJlIiwiY3JlYXRlUmVxdWlyZSIsInB1cExvZ0xldmVsIiwicHVwUGtnUm9vdCIsImRpcm5hbWUiLCJqb2luIiwicHVwQXVkaW9QcmVsb2FkIiwicHVwSWZyYW1lUHJlbG9hZCIsIkRFQlVHIiwiSU5GTyIsIldBUk4iLCJFUlJPUiIsIkZBVEFMIiwic3RhY2tIb29rIiwidGFyZ2V0IiwiX2NvbnRleHQiLCJtZXNzYWdlcyIsInByb2Nlc3NlZCIsIm1zZyIsIl9mYXRhbF9kZWMiLCJfZXJyb3JfZGVjIiwiX3dhcm5fZGVjIiwiX2luZm9fZGVjIiwiX2RlYnVnX2RlYyIsIl9pbml0IiwiTG9nZ2VyIiwiX2xldmVsIiwiX19ydW5Jbml0aWFsaXplcnMiLCJfX3B1YmxpY0ZpZWxkIiwidmFsdWUiLCJkZWJ1ZyIsImluZm8iLCJ3YXJuIiwiZXJyb3IiLCJsdiIsIm1lc3NhZ2UiLCJwcm9jIiwicmVzb2x2ZSIsInJlamVjdCIsImZhdGFsIiwiZGlzcGF0Y2giLCJkYXRhIiwiZXJyIiwiY29kZSIsInNpZ25hbCIsInJlYXNvbiIsIl9fZGVjb3JhdG9yU3RhcnQiLCJfX2RlY29yYXRlRWxlbWVudCIsIl9fZGVjb3JhdG9yTWV0YWRhdGEiLCJsb2dnZXIiLCJMb2ciLCJsZXZlbCIsIkFWX0xPR19FUlJPUiIsIkFWX0xPR19XQVJOSU5HIiwiVEFHIiwic3RhcnRFbGVjdHJvbkNyYXNoUmVwb3J0ZXIiLCJkdW1wRGlyIiwiYXBwIiwibWtkaXJTeW5jIiwiY3Jhc2hSZXBvcnRlciIsIm5vZXJyIiwiZm4iLCJhcmdzIiwicmV0IiwiUFVQX0FSR1NfS0VZIiwicGFyZ3MiLCJhcmd2IiwicHJpdiIsImFyZyIsIkRFRkFVTFRfV0lEVEgiLCJERUZBVUxUX0hFSUdIVCIsIkRFRkFVTFRfRlBTIiwiREVGQVVMVF9EVVJBVElPTiIsIkRFRkFVTFRfV0lORE9XX1RJTUVPVVQiLCJERUZBVUxUX09VVF9GSUxFIiwicmVuZGVyU2NoZW1hIiwieiIsImRlZmF1bHRSZW5kZXJPcHRpb25zIiwibm9ybWFsaXplU291cmNlIiwicyIsImFicyIsInJlYWxwYXRoU3luYyIsIm1ha2VDTEkiLCJvcHRpb25zIiwic2hhcGUiLCJkIiwicHJvZ3JhbSIsInNvdXJjZSIsIm9wdHMiLCJlIiwiSXBjV3JpdGVyIiwicGF5bG9hZCIsInNsZWVwIiwibXMiLCJ3aXRoVGltZW91dCIsInAiLCJsYWJlbCIsInRpbWVyIiwiYWJvcnRhYmxlIiwib25BYm9ydCIsIkNEUF9USU1FT1VUX01TIiwic2VuZCIsImNkcCIsIm1ldGhvZCIsInBhcmFtcyIsImV2YWxJbiIsImV4cHJlc3Npb24iLCJhZHZhbmNlVmlydHVhbFRpbWUiLCJidWRnZXQiLCJ0aW1lb3V0IiwiaGFuZGxlciIsIl8iLCJwYXVzZVZpcnR1YWxUaW1lIiwicmVzaXplRHJhd2FibGUiLCJzaXplIiwiRlJBTUVfU1lOQ19NQVJLRVJfV0lEVEgiLCJTVEVHT19USUNLX0NIQU5ORUwiLCJidWlsZFN0ZWdvSFRNTCIsInRhcmdldFVSTCIsIndpZHRoIiwiaGVpZ2h0IiwiZGVjb2RlU3RlZ28iLCJiaXRtYXAiLCJtYXJrZXJSb3ciLCJ0aW1lc3RhbXAiLCJpIiwicGl4ZWxJZHgiLCJiaXQiLCJzdGFydFN0ZWdvIiwiZHJhd1N0ZWdvIiwid2MiLCJleHBlY3RlZCIsIndhaXRTdGVnb1RpY2siLCJzd2FwcGVkIiwiciIsIlBVUF9TQ0hFTUUiLCJGUkFNRV9TQ0hFTUUiLCJQUklWSUxFR0VEX1BSSVZJTEVHRVMiLCJwcm90b2NvbCIsInNldHVwUHVwUHJvdG9jb2wiLCJyZXEiLCJ1cmwiLCJzcmMiLCJodG1sIiwiY3JlYXRlU3RlZ29VUkwiLCJpc0JsYW5rRnJhbWUiLCJiZ3JhIiwic3RlcFgiLCJzdGVwWSIsInJNaW4iLCJyTWF4IiwiZ01pbiIsImdNYXgiLCJiTWluIiwiYk1heCIsInkiLCJiIiwiZyIsIkJsYW5rRnJhbWVTdGF0cyIsImZyYW1lIiwiQ29uY3VycmVuY3lMaW1pdGVyIiwibWF4Q29uY3VycmVuY3kiLCJ2Iiwia2VlcCIsImVudHJ5IiwiRkZfRU5DT0RFUl9MSUJWUFhfVlA5Iiwib3BlblZpZGVvQ3R4IiwiX3N0YWNrIiwiY3R4IiwiQ29kZWNDb250ZXh0Iiwic3RhY2siLCJfX3VzaW5nIiwiUmF0aW9uYWwiLCJBVl9DT0RFQ19GTEFHX0dMT0JBTF9IRUFERVIiLCJrIiwiRkZtcGVnRXJyb3IiLCJfZXJyb3IiLCJfaGFzRXJyb3IiLCJfX2NhbGxEaXNwb3NlIiwibWFrZUZyYW1lIiwicGl4Rm10IiwiRnJhbWUiLCJtYWtlUGFja2V0IiwicGt0IiwiUGFja2V0IiwiZHJhaW5QYWNrZXRzIiwic3RyZWFtIiwibXV4ZXIiLCJBVkVSUk9SX0VBR0FJTiIsIkFWRVJST1JfRU9GIiwiQ29kZWNTdGF0ZSIsIl9Db2RlY1N0YXRlIiwiY29kZWMiLCJDb2RlYyIsIkZGX0RFQ09ERVJfUE5HIiwib2siLCJwbmciLCJBVl9QSVhfRk1UX0JHUkEiLCJBVl9QSVhfRk1UX1lVVkE0MjBQIiwicG5nRGF0YSIsInN3cyIsIlNvZnR3YXJlU2NhbGVDb250ZXh0IiwiZm10IiwiU1dTX0JJTElORUFSIiwiU0FNUExFX0ZNVF9OQU1FIiwiQVZfU0FNUExFX0ZNVF9GTFQiLCJBVl9TQU1QTEVfRk1UX0ZMVFAiLCJBdWRpb0VuY29kZXIiLCJfQXVkaW9FbmNvZGVyIiwib3V0Rm10IiwiQVZfQ0hBTk5FTF9MQVlPVVRfU1RFUkVPIiwiaW5TYW1wbGVSYXRlIiwiZ3JhcGgiLCJGaWx0ZXJHcmFwaCIsImFidWZmZXIiLCJGaWx0ZXIiLCJidWZTcmMiLCJhYnVmZmVyc2luayIsImJ1ZlNpbmsiLCJmbXROYW1lIiwiZmlsdGVyRGVzYyIsIm91dHB1dHMiLCJGaWx0ZXJJbk91dCIsImlucHV0cyIsInBjbSIsIm5TYW1wbGVzIiwicGFja0JpdHMiLCJiaXRzIiwiYnVmIiwiYnl0ZSIsIkJpdFdyaXRlciIsInZhbCIsIm4iLCJsZW4iLCJwYWQiLCJzdGFydCIsIkJpdFJlYWRlciIsInplcm9zIiwiQU5ORVhfQl9TVEFSVF9DT0RFIiwiTkFMX0JMQV9XX0xQIiwiTkFMX1JTVl9JUkFQX1ZDTDIzIiwiTkFMX1ZQUyIsIk5BTF9TUFMiLCJOQUxfUFBTIiwiTkFMX1NFSV9QUkVGSVgiLCJwYXJzZU5hbFR5cGUiLCJoZWFkZXIwIiwiaGVhZGVyMSIsInR5cGUiLCJsYXllcklkIiwidGVtcG9yYWxJZCIsImVuY29kZU5hbEhlYWRlciIsImJ5dGUwIiwiYnl0ZTEiLCJzcGxpdE5hbFVuaXRzIiwiYml0c3RyZWFtIiwibmFscyIsInNjTGVuIiwibmFsU3RhcnQiLCJuYWxFbmQiLCJqIiwicmV3cml0ZU5hbExheWVySWQiLCJuYWwiLCJvdXQiLCJiMCIsImIxIiwicmVtb3ZlRW11bGF0aW9uUHJldmVudGlvbiIsImFkZEVtdWxhdGlvblByZXZlbnRpb24iLCJWUFNfUFRMX0JJVCIsIlNQU19QVExfQklUIiwiUFRMX1RJRVJfQklUIiwiUFRMX0NPTVBBVDJfQklUIiwiU0xJQ0VfVFlQRV9CIiwiU0xJQ0VfVFlQRV9QIiwic2V0Qml0IiwiYml0T2Zmc2V0IiwibWFzayIsImN1ciIsInBhdGNoUHRsIiwibmFsRGF0YSIsInB0bFN0YXJ0Qml0IiwicmJzcCIsInBhdGNoSGV2Y0FscGhhUHRsIiwiY2h1bmtzIiwicmV3cml0ZU9uZVVlIiwibmFsSW4iLCJuZXdWYWwiLCJiciIsImJ3IiwicmV3cml0ZVR3b1VlIiwibmV3VmFsMSIsIm5ld1ZhbDIiLCJyZXdyaXRlQWxwaGFTcHMiLCJzcHMiLCJTUFNfU0VRX0lEX0JJVCIsInJld3JpdGVBbHBoYVBwcyIsInBwcyIsInJlYWRTZSIsInVlIiwicGFyc2VJbmxpbmVTdFJlZlBpY1NldCIsIm51bURlbHRhUG9jc1NldDAiLCJkZWx0YUlkeE1pbnVzMSIsIm51bU5lZyIsIm51bVBvcyIsInBhcnNlSGVhZGVyVG9BbGlnbm1lbnQiLCJuYWxUeXBlIiwiY2ZnIiwiaXNJcmFwIiwic2xpY2VUeXBlIiwicmV3cml0ZUFscGhhU2xpY2VIZWFkZXIiLCJzbGljZSIsInByb2JlIiwiQiIsIm9sZEFsaWduQml0cyIsInNsaWNlRGF0YUJ5dGVPZmZzZXQiLCJleHRyYWN0UFRMIiwidnBzRGF0YSIsIm1heFN1YkxheWVyc01pbnVzMSIsInB0bFN0YXJ0Iiwid3JpdGVCYXNlVlBTIiwicHRsIiwid3JpdGVWUFNFeHRlbnNpb24iLCJidWlsZEFscGhhVlBTIiwiZXh0cmFjdEFscGhhVG9ZdXY0MjBwQnVmZmVyIiwiYmdyYUZyYW1lIiwic3JjTHMiLCJ3IiwiaCIsInlTaXplIiwic3JjMzIiLCJyb3dCYXNlIiwiZHN0QmFzZSIsInJld3JpdGVBbHBoYVBhcmFtU2V0IiwiYnVpbGRVbmlmaWVkRXh0cmFkYXRhIiwiYmFzZUV4dHJhZGF0YSIsImFscGhhRXh0cmFkYXRhIiwiYmFzZU5hbHMiLCJhbHBoYU5hbHMiLCJhbHBoYUJ5VHlwZSIsImFyciIsImVtaXR0ZWQiLCJhbHBoYU5hbCIsImFEYXRhIiwiYnVpbGRBbHBoYUNoYW5uZWxJbmZvU0VJIiwiaDAiLCJoMSIsIndyaXRlQml0cyIsImludGVybGVhdmVBY2Nlc3NVbml0cyIsIkR1YWxMYXllck11eCIsImJhc2VDdHgiLCJhbHBoYUN0eCIsImJhc2VQa3QiLCJhbHBoYVBrdCIsInRhZyIsImJhc2UiLCJhbHBoYSIsImhldmNDZmciLCJpbnRlcmxlYXZlZCIsImZhaWwiLCJmaWVsZCIsImdvdCIsInNraXBQdGwiLCJtYXhTdWJMYXllcnMiLCJzdWJQcm9maWxlUHJlc2VudCIsInN1YkxldmVsUHJlc2VudCIsInBhcnNlU3BzIiwic3BzUmJzcCIsImNocm9tYUZvcm1hdCIsImxvZzJNYXhQb2NMc2IiLCJvcmRlckNvdW50Iiwic2FvRW5hYmxlZCIsIm51bVN0UnBzIiwibG9uZ1Rlcm1SZWZQaWNzUHJlc2VudCIsInNwc1RlbXBvcmFsTXZwRW5hYmxlZCIsInBhcnNlUHBzIiwicHBzUmJzcCIsIm51bUV4dHJhU2xpY2VIZWFkZXJCaXRzIiwiY2FiYWNJbml0UHJlc2VudCIsInBwc0xvb3BGaWx0ZXJBY3Jvc3NTbGljZXNFbmFibGVkIiwiZGVibG9ja2luZ0NvbnRyb2xQcmVzZW50Iiwic2xpY2VEZWJsb2NraW5nRGlzYWJsZWRPdmVycmlkZSIsInBhcnNlTnZlbmNIZXZjQ29uZmlnIiwiZXh0cmFkYXRhIiwiTnZlbmNEdWFsTGF5ZXJFbmNvZGVyIiwiX052ZW5jRHVhbExheWVyRW5jb2RlciIsImZwcyIsImJpdHJhdGUiLCJGRl9FTkNPREVSX0hFVkNfTlZFTkMiLCJudmVuY09wdHMiLCJjb21tb24iLCJBVl9QSVhfRk1UX1lVVjQyMFAiLCJ1bmlmaWVkIiwiY2hyb21hU2l6ZSIsImFscGhhQnVmIiwiYWxwaGFTd0ZyYW1lIiwicHRzIiwiZGVzeW5jIiwiVmlkZW9FbmNvZGVyIiwiX1ZpZGVvRW5jb2RlciIsImNvZGVjTmFtZSIsImNvZGVjVGFnIiwiY29kZWNPcHRzIiwicmVzdCIsIlZpZGVvVG9vbGJveEVuY29kZXIiLCJfVmlkZW9Ub29sYm94RW5jb2RlciIsImh3IiwiQVZDT0xfUkFOR0VfSlBFRyIsImNyZWF0ZUh3VmlkZW9FbmNvZGVyIiwiZGlzYWJsZUh3Q29kZWMiLCJzaGFyZWRIdyIsIkhhcmR3YXJlQ29udGV4dCIsIm93bnNIdyIsIkZGX0hXREVWSUNFX1RZUEVfVklERU9UT09MQk9YIiwiRkZfSFdERVZJQ0VfVFlQRV9DVURBIiwidmlkZW8iLCJGRl9FTkNPREVSX0xJQlgyNjUiLCJGb3JtYXRNdXhlciIsIm91dFBhdGgiLCJmb3JtYXROYW1lIiwiRm9ybWF0Q29udGV4dCIsImNvZGVjQ3R4IiwiRGljdGlvbmFyeSIsIk91dHB1dFNpbmsiLCJfT3V0cHV0U2luayIsInBhdGgiLCJsb3dlciIsInNldHVwIiwiYXVkaW8iLCJfcHJvbWlzZSIsIkZGX0VOQ09ERVJfQUFDIiwiRkZfRU5DT0RFUl9MSUJPUFVTIiwic2FtcGxlUmF0ZSIsImh3VmlkZW8iLCJFbmNvZGVyUGlwZWxpbmUiLCJfRW5jb2RlclBpcGVsaW5lIiwib3V0RmlsZSIsIndpdGhBdWRpbyIsIm91dEZpbGVzIiwia2luZHMiLCJuZWVkc01wNEh3IiwiaXNId0FscGhhQ2FwYWJsZSIsInNpbmtzIiwic2luayIsImlucHV0IiwiRnJhbWVEcm9wU3RhdHMiLCJjb3VudCIsInRvdGFsRHJvcHBlZCIsImxvY2FsU3VtIiwibWF4QnVyc3QiLCJidXJzdCIsInBlcmNlcHRpYmxlIiwibCIsInNjb3JlIiwic2l6ZUVxdWFscyIsImEiLCJBVURJT19NRVRBX0NIQU5ORUwiLCJBVURJT19DSFVOS19DSEFOTkVMIiwiYXR0YWNoQXVkaW9MaXN0ZW5lcnMiLCJlbmNvZGVyIiwiZ2V0VmlkZW9UaW1lTXMiLCJvbkVycm9yIiwib25NZXRhIiwiX2UiLCJzdGFydE1zIiwic2lsZW5jZVNhbXBsZXMiLCJvbkNodW5rIiwiYnVmZmVyIiwidXNlUmV0cnkiLCJtYXhBdHRlbXB0cyIsInRpbWVvdXRFcnJvciIsImF0dGVtcHQiLCJwcm9taXNlcyIsInNldFRpbWVvdXQiLCJTVVBQT1JURURfUFJPVE9DT0xTIiwiU09VUkNFX1BBVFRFUk4iLCJjaGVja0hUTUwiLCJXYWl0YWJsZUV2ZW50IiwibWFwIiwiTE9DQUxfU0NIRU1FUyIsImlzTG9jYWxTY2hlbWUiLCJwcm94aWVkVXJsIiwicGFyc2VkIiwiVVJMIiwic2V0SW50ZXJjZXB0b3IiLCJ3aW5kb3ciLCJ1c2VJbm5lclByb3h5Iiwic3R1Yk1lZGlhIiwibGltaXRlciIsImV2ZW50cyIsIndhaXQiLCJrZXkiLCJvblRpbWVvdXQiLCJldmVudCIsImRldGFpbHMiLCJjYWxsYmFjayIsInByb3hpZWQiLCJyZXNwb25zZUhlYWRlcnMiLCJyZXNvdXJjZVR5cGUiLCJ1bnNldEludGVyY2VwdG9yIiwiVElNRU9VVF9FUlJPUiIsIkNPTlNPTEVfSUdOT1JFUyIsIndhaXRGb3JGaW5pc2giLCJ3aW4iLCJhY3Rpb24iLCJ0aW1lb3V0TXMiLCJ0b2xlcmFudCIsImRvbVJlYWR5IiwiZG9uZSIsImRlc2MiLCJleGl0Q29kZSIsImRpc3Bvc2VXaW5kb3ciLCJwaWNrUHJlbG9hZCIsInJlbmRlcmVyIiwib3BlbldpbmRvdyIsIm9uQ3JlYXRlZCIsIkJyb3dzZXJXaW5kb3ciLCJsaW5lTnVtYmVyIiwic291cmNlSWQiLCJtc2dzIiwib3BlbldpbmRvd1dpdGhSZXRyeSIsImxvYWRXaW5kb3ciLCJ3YXJtdXAiLCJvcGVuIiwicmVuZGVyIiwiZHVyYXRpb24iLCJvblByb2dyZXNzIiwidG90YWwiLCJmcmFtZUludGVydmFsIiwiZnJhbWVTaXplIiwid3JpdHRlbiIsImxhc3RXcml0dGVuVGltZSIsInByb2dyZXNzIiwiZW5jb2RlRXJyb3IiLCJyZXNvbHZlciIsInJlamVjdGVyIiwiaW50ZXJ2YWwiLCJkcm9wU3RhdHMiLCJibGFua1N0YXRzIiwiZGlzcG9zZUF1ZGlvIiwic2NoZWR1bGVGcmFtZSIsInBhaW50IiwiX3IiLCJpbWFnZSIsImltYWdlU2l6ZSIsImN1cnJlbnRUaW1lIiwiY3JvcHBlZCIsInRpbWVEZWx0YSIsImZyYW1lc1RvSW5zZXJ0IiwibmV3UHJvZ3Jlc3MiLCJkdXJhdGlvbk1zIiwibGFzdFdyaXR0ZW4iLCJzdHVjayIsImRyb3BTY29yZSIsImJsYW5rIiwiTUFYX1JFTkRFUl9BVFRFTVBUUyIsIndpdGhSZXJlbmRlciIsImxhc3RFcnIiLCJhZHZhbmNlVmlkZW9zIiwidGltZXN0YW1wTXMiLCJUSUNLX1NZTUJPTCIsInRpY2siLCJleHByIiwidGlja0V2IiwiUldfVElNRU9VVF9VUyIsIm9wZW5JbnB1dCIsIkRlbXV4ZXIiLCJkZWNvZGVGcmFtZXMiLCJtZXRhIiwiQVZNRURJQV9UWVBFX1ZJREVPIiwiZGVjIiwiRGVjb2RlciIsImZyYW1lV2lkdGgiLCJmcmFtZUhlaWdodCIsInNjYWxlIiwiZmlsdGVyIiwiRmlsdGVyQVBJIiwiX2ZyYW1lIiwicGFja1JnYmEiLCJyb3ciLCJzdHJpZGUiLCJERUNPREVfQUhFQUQiLCJLRUVQX0JFSElORCIsIk1FTU9SWV9CVURHRVQiLCJNQVhfUEFTU19SRVRSWSIsIkRlY29kZVNlc3Npb24iLCJfc3JjIiwiaWR4IiwiaGl0IiwiZmFpbHMiLCJnZW4iLCJmYWlsZWQiLCJhdCIsImZsb29yIiwidGIiLCJsZWFkR2FwIiwib3V0ZXIiLCJfcGt0IiwiZW5jb2RlU3R1YldlYm0iLCJ0bXBkaXIiLCJyYW5kb21CeXRlcyIsInN0dWIiLCJTdHViRnJhbWUiLCJyZWFkRmlsZSIsInJtIiwibHVtYSIsImNocm9tYSIsIkZyYW1lU2VydmVyIiwiX3VzZUlubmVyUHJveHkiLCJpZCIsImV2ZW4iLCJyZWFsIiwic2Vzc2lvbnMiLCJjcmVhdGVIYXNoIiwiU0NIRU1FIiwiQ09SU19IRUFERVJTIiwidXNlRnJhbWVQcm90b2NvbCIsImZzIiwianNvbk9rIiwiaW50IiwicmdiYU9rIiwid2VibU9rIiwiYnl0ZXMiLCJjb3B5IiwiZmFsbGJhY2siLCJsYXN0VHMiLCJfZCIsInNsaXZlciIsInRzIiwic2hvb3QiLCJ0SW5pdCIsIndpblAiLCJwaXBlbGluZSIsIm1haW4iLCJpZnJhbWUiLCJmcmFtZU1zIiwicHJpbnRGZWF0dXJlcyIsImN0cmwiLCJleGl0aW5nIiwiTWVudSIsInJhdyIsImlwYyIsIm1rZGlyIiwicmVzdWx0IiwibSJdLCJtYXBwaW5ncyI6IjB5RUFLQSxJQUFNQSxFQUFBQSxDQUFtQixJQUN2QixPQUFPLFFBQUEsQ0FBYSxJQUNoQixJQUFJLEdBQUEsQ0FBSSxRQUFRLFVBQVUsQ0FBQSxDQUFFLEVBQUUsSUFBQSxDQUM3QixRQUFBLENBQVMsZUFBaUIsUUFBQSxDQUFTLGFBQUEsQ0FBYyxRQUFRLFdBQUEsRUFBWSxHQUFNLFFBQUEsQ0FDMUUsUUFBQSxDQUFTLGFBQUEsQ0FBYyxHQUFBLENBQ3ZCLElBQUksR0FBQSxDQUFJLFNBQUEsQ0FBVyxTQUFTLE9BQU8sQ0FBQSxDQUFFLEtBRWhDQyxDQUFBQSxDQUFnQ0QsRUFBQUEsR0NOdEMsU0FBU0UsR0FBUUMsQ0FBQUEsQ0FBY0MsQ0FBQUEsQ0FBc0JDLEVBQWlDLENBQzNGLEdBQUksQ0FDRixPQUFPRCxDQUFBQSxDQUFPLE9BQUEsQ0FBUSxHQUFBLENBQUlELENBQUksQ0FBQyxDQUNqQyxDQUFBLEtBQVEsQ0FDTixP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LENBQUEsQ0FBR0EsQ0FBQUEsQ0FBSSxHQUFJQSxDQUFBQSxFQUFBQSxDQUN0Qm1LLENBQUFBLENBQUcsS0FBS25LLENBQUFBLEdBQU0sQ0FBQSxFQUFLQSxJQUFNLENBQUMsQ0FBQSxDQUU1Qm1LLEVBQUcsQ0FBQSxDQUFFLENBQUEsQ0FBRyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxFQUFFLENBQUEsQ0FBRyxDQUFDLEVBQ1RBLENBQUFBLENBQUcsSUFBQSxDQUFLLENBQUMsQ0FBQSxDQUNUQSxDQUFBQSxDQUFHLEVBQUUsQ0FBQSxDQUFHLENBQUMsRUFDVEEsQ0FBQUEsQ0FBRyxDQUFBLENBQUUsRUFBRyxDQUFDLENBQUEsQ0FDVEEsRUFBRyxDQUFBLENBQUUsQ0FBQSxDQUFHLENBQUMsQ0FBQSxDQUNUQSxDQUFBQSxDQUFHLEVBQUUsQ0FBQSxDQUFHLENBQUMsRUFFVEEsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsR0FBRyxDQUFDLENBQUEsQ0FDUEEsRUFBRyxJQUFBLENBQUssQ0FBQyxFQUNUQSxDQUFBQSxDQUFHLElBQUEsQ0FBSyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxLQUFLLENBQUMsQ0FBQSxDQUdUQSxFQUFHLEVBQUEsQ0FBRyxDQUFDLEVBQ1BBLENBQUFBLENBQUcsSUFBQSxDQUFLLENBQUMsQ0FBQSxDQUNUQSxDQUFBQSxDQUFHLEtBQUtnQyxDQUFBQSxDQUFJLE9BQUEsQ0FBU0EsRUFBSSxRQUFBLENBQVVBLENBQUFBLENBQUksT0FBU0EsQ0FBQUEsQ0FBSSxRQUFRLEVBRTVEaEMsQ0FBQUEsQ0FBRyxFQUFBLENBQUcsQ0FBQyxDQUFBLENBQ1BBLENBQUFBLENBQUcsRUFBRSxDQUFBLENBQUcsQ0FBQyxFQUNUQSxDQUFBQSxDQUFHLENBQUEsQ0FBRSxFQUFHLENBQUMsQ0FBQSxDQUNUQSxFQUFHLENBQUEsQ0FBRSxDQUFBLENBQUcsQ0FBQyxDQUFBLENBRVRBLENBQUFBLENBQUcsR0FBRyxDQUFDLENBQUEsQ0FDUEEsRUFB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QUM3Q3JJLENBQUFBLENBQU8sQ0FDTCxPQUFBaGEsQ0FBQUEsQ0FDQSxHQUFHSixFQUNILE1BQUEsQ0FBUXlpQixFQUFBQSxDQUFLLE9BQ2IsVUFBQSxDQUFhN2hCLENBQUFBLEVBQU1paUIsRUFBSSxhQUFBLENBQWNqaUIsQ0FBQyxFQUN0QyxTQUFBLENBQVcsQ0FBQ29XLEVBQUdnTSxDQUFBQSxHQUFNSCxDQUFBQSxDQUFJLGFBQWE3TCxDQUFBQSxDQUFHZ00sQ0FBQyxDQUM1QyxDQUFDLENBQ0gsRUFDQSxNQUFNSCxDQUFBQSxDQUFJLFVBQVVFLENBQU0sRUFDNUIsT0FBU3ppQixDQUFBQSxDQUFHLENBQ1YsSUFBTXhELENBQUFBLENBQVF3RCxDQUFBQSxDQUNSMGlCLEVBQUlsbUIsQ0FBQUEsQ0FBTSxLQUFBLEVBQVNBLEVBQU0sT0FBQSxFQUFXLE1BQUEsQ0FBT3dELEdBQUssZUFBZSxDQUFBLENBQ3JFLE1BQU11aUIsQ0FBQUEsQ0FBSSxVQUFBLENBQVdHLENBQUMsRUFDeEIsQ0FBQSxPQUFFLENBQ0FOLEVBQUFBLENBQVUsSUFBQSxDQUNWcGtCLGFBQUksSUFBQSxHQUNOLENBQ0YsQ0FDRixDQUFDLENBQUEiLCJmaWxlIjoiYXBwLmNqcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIFNoaW0gZ2xvYmFscyBpbiBjanMgYnVuZGxlXG4vLyBUaGVyZSdzIGEgd2VpcmQgYnVnIHRoYXQgZXNidWlsZCB3aWxsIGFsd2F5cyBpbmplY3QgaW1wb3J0TWV0YVVybFxuLy8gaWYgd2UgZXhwb3J0IGl0IGFzIGBjb25zdCBpbXBvcnRNZXRhVXJsID0gLi4uIF9fZmlsZW5hbWUgLi4uYFxuLy8gQnV0IHVzaW5nIGEgZnVuY3Rpb24gd2lsbCBub3QgY2F1c2UgdGhpcyBpc3N1ZVxuXG5jb25zdCBnZXRJbXBvcnRNZXRhVXJsID0gKCkgPT4gXG4gIHR5cGVvZiBkb2N1bWVudCA9PT0gXCJ1bmRlZmluZWRcIiBcbiAgICA/IG5ldyBVUkwoYGZpbGU6JHtfX2ZpbGVuYW1lfWApLmhyZWYgXG4gICAgOiAoZG9jdW1lbnQuY3VycmVudFNjcmlwdCAmJiBkb2N1bWVudC5jdXJyZW50U2NyaXB0LnRhZ05hbWUudG9VcHBlckNhc2UoKSA9PT0gJ1NDUklQVCcpIFxuICAgICAgPyBkb2N1bWVudC5jdXJyZW50U2NyaXB0LnNyYyBcbiAgICAgIDogbmV3IFVSTChcIm1haW4uanNcIiwgZG9jdW1lbnQuYmFzZVVSSSkuaHJlZjtcblxuZXhwb3J0IGNvbnN0IGltcG9ydE1ldGFVcmwgPSAvKiBAX19QVVJFX18gKi8gZ2V0SW1wb3J0TWV0YVVybCgpXG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzI1LlxuXG5leHBvcnQgdHlwZSBFbnZQYXJzZXI8VD4gPSAodmFsdWU6IHVua25vd24pID0+IFQ7XG5cbmV4cG9ydCBmdW5jdGlvbiBwZW52PFQ+KG5hbWU6IHN0cmluZywgcGFyc2VyOiBFbnZQYXJzZXI8VD4sIGRlZmF1bHRWYWx1ZTogVCk6IFQ7XG5leHBvcnQgZnVuY3Rpb24gcGVudjxUPihuYW1lOiBzdHJpbmcsIHBhcnNlcjogRW52UGFyc2VyPFQ+LCBkZWZhdWx0VmFsdWU/OiBUKTogVCB8IHVuZGVmaW5lZDtcbmV4cG9ydCBmdW5jdGlvbiBwZW52PFQ+KG5hbWU6IHN0cmluZywgcGFyc2VyOiBFbnZQYXJzZXI8VD4sIGRlZmF1bHRWYWx1ZT86IFQpOiBUIHwgdW5kZWZpbmVkIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gcGFyc2VyKHByb2Nlc3MuZW52W25hbWVdKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMS8zMC5cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlTnVtYmVyKHg6IHVua25vd24pOiBudW1iZXIge1xuICBpZiAodHlwZW9mIHggPT09IFwibnVtYmVyXCIpIHtcbiAgICByZXR1cm4geDtcbiAgfVxuICBjb25zdCBudW0gPSBOdW1iZXIoeCk7XG4gIGlmIChOdW1iZXIuaXNOYU4obnVtKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgVmFsdWUgJHt4fSBpcyBub3QgYSB2YWxpZCBudW1iZXJgKTtcbiAgfVxuICByZXR1cm4gbnVtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VTdHJpbmcoeDogdW5rbm93bik6IHN0cmluZyB7XG4gIGlmICh0eXBlb2YgeCA9PT0gXCJzdHJpbmdcIikge1xuICAgIHJldHVybiB4O1xuICB9XG4gIHJldHVybiBTdHJpbmcoeCk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA5LlxuXG5pbXBvcnQgeyBjcmVhdGVSZXF1aXJlIH0gZnJvbSBcIm5vZGU6bW9kdWxlXCI7XG5pbXBvcnQgeyBkaXJuYW1lLCBqb2luIH0gZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHsgcGVudiB9IGZyb20gXCIuL2VudlwiO1xuaW1wb3J0IHsgcGFyc2VOdW1iZXIgfSBmcm9tIFwiLi9wYXJzZXJcIjtcblxuY29uc3QgcmVxdWlyZSA9IGNyZWF0ZVJlcXVpcmUoaW1wb3J0Lm1ldGEudXJsKTtcblxuZXhwb3J0IGNvbnN0IHB1cExvZ0xldmVsID0gcGVudihcIlBVUF9MT0dfTEVWRUxcIiwgcGFyc2VOdW1iZXIsIDIpO1xuXG5leHBvcnQgY29uc3QgcHVwUGtnUm9vdCA9IGRpcm5hbWUocmVxdWlyZS5yZXNvbHZlKFwicHVwLXJlY29yZGVyL3BhY2thZ2UuanNvblwiKSk7XG5leHBvcnQgY29uc3QgcHVwQXBwID0gam9pbihwdXBQa2dSb290LCBcImRpc3RcIiwgXCJhcHAuY2pzXCIpO1xuZXhwb3J0IGNvbnN0IHB1cEF1ZGlvUHJlbG9hZCA9IGpvaW4ocHVwUGtnUm9vdCwgXCJkaXN0XCIsIFwicnVudGltZVwiLCBcImF1ZGlvX3ByZWxvYWQuY2pzXCIpO1xuZXhwb3J0IGNvbnN0IHB1cElmcmFtZVByZWxvYWQgPSBqb2luKHB1cFBrZ1Jvb3QsIFwiZGlzdFwiLCBcInJ1bnRpbWVcIiwgXCJpZnJhbWVfcHJlbG9hZC5janNcIik7XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA2LlxuXG5pbXBvcnQgdHlwZSB7IENoaWxkUHJvY2VzcyB9IGZyb20gXCJub2RlOmNoaWxkX3Byb2Nlc3NcIjtcbmltcG9ydCB7IExvZyB9IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQgeyBBVl9MT0dfRVJST1IsIEFWX0xPR19XQVJOSU5HIH0gZnJvbSBcIm5vZGUtYXYvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBwdXBMb2dMZXZlbCB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIExvZ2dlckxpa2Uge1xuICBkZWJ1Zz8odGhpczogdm9pZCwgLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQ7XG5cbiAgaW5mbz8odGhpczogdm9pZCwgLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQ7XG5cbiAgd2Fybj8odGhpczogdm9pZCwgLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQ7XG5cbiAgZXJyb3I/KHRoaXM6IHZvaWQsIC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkO1xufVxuXG5jb25zdCBERUJVRyA9IFwiPHB1cEBkZWJ1Zz5cIjtcbmNvbnN0IElORk8gPSBcIjxwdXBAaW5mbz5cIjtcbmNvbnN0IFdBUk4gPSBcIjxwdXBAd2Fybj5cIjtcbmNvbnN0IEVSUk9SID0gXCI8cHVwQGVycm9yPlwiO1xuY29uc3QgRkFUQUwgPSBcIjxwdXBAZmF0YWw+XCI7XG5cbmZ1bmN0aW9uIHN0YWNrSG9vayh0YXJnZXQ6ICguLi5tZXNzYWdlczogdW5rbm93bltdKSA9PiB1bmtub3duLCBfY29udGV4dDogQ2xhc3NNZXRob2REZWNvcmF0b3JDb250ZXh0KSB7XG4gIHJldHVybiBmdW5jdGlvbiAodGhpczogTG9nZ2VyLCAuLi5tZXNzYWdlczogdW5rbm93bltdKSB7XG4gICAgY29uc3QgcHJvY2Vzc2VkID0gbWVzc2FnZXMubWFwKChtc2cpID0+IHtcbiAgICAgIHJldHVybiBtc2cgaW5zdGFuY2VvZiBFcnJvciA/IChtc2cuc3RhY2sgPz8gU3RyaW5nKG1zZykpIDogbXNnO1xuICAgIH0pO1xuICAgIHJldHVybiB0YXJnZXQuY2FsbCh0aGlzLCAuLi5wcm9jZXNzZWQpO1xuICB9O1xufVxuXG5leHBvcnQgY2xhc3MgTG9nZ2VyIGltcGxlbWVudHMgTG9nZ2VyTGlrZSB7XG4gIHByaXZhdGUgX2ltcGw/OiBMb2dnZXJMaWtlO1xuXG4gIGdldCBsZXZlbCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9sZXZlbDtcbiAgfVxuXG4gIHNldCBsZXZlbCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fbGV2ZWwgPSB2YWx1ZTtcbiAgICB0aGlzLmltcGwgPSB0aGlzLl9pbXBsID8/IGNvbnNvbGU7XG4gIH1cblxuICBnZXQgaW1wbCgpOiBMb2dnZXJMaWtlIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5faW1wbDtcbiAgfVxuXG4gIHNldCBpbXBsKHZhbHVlOiBMb2dnZXJMaWtlKSB7XG4gICAgY29uc3QgZGVidWcgPSB2YWx1ZS5kZWJ1ZyA/PyBjb25zb2xlLmRlYnVnO1xuICAgIGNvbnN0IGluZm8gPSB2YWx1ZS5pbmZvID8/IGNvbnNvbGUuaW5mbztcbiAgICBjb25zdCB3YXJuID0gdmFsdWUud2FybiA/PyBjb25zb2xlLndhcm47XG4gICAgY29uc3QgZXJyb3IgPSB2YWx1ZS5lcnJvciA/PyBjb25zb2xlLmVycm9yO1xuICAgIGNvbnN0IGx2ID0gdGhpcy5fbGV2ZWw7XG4gICAgdGhpcy5faW1wbCA9IHtcbiAgICAgIGRlYnVnOiBsdiA+PSAzID8gZGVidWcgOiB1bmRlZmluZWQsXG4gICAgICBpbmZvOiBsdiA+PSAyID8gaW5mbyA6IHVuZGVmaW5lZCxcbiAgICAgIHdhcm46IGx2ID49IDEgPyB3YXJuIDogdW5kZWZpbmVkLFxuICAgICAgZXJyb3I6IGx2ID49IDAgPyBlcnJvciA6IHVuZGVmaW5lZCxcbiAgICB9O1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfbGV2ZWw6IG51bWJlciA9IHB1cExvZ0xldmVsKSB7XG4gICAgdGhpcy5pbXBsID0gY29uc29sZTtcbiAgfVxuXG4gIEBzdGFja0hvb2tcbiAgZGVidWcoLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQge1xuICAgIHRoaXMuaW1wbD8uZGVidWc/LihERUJVRywgLi4ubWVzc2FnZXMpO1xuICB9XG5cbiAgQHN0YWNrSG9va1xuICBpbmZvKC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkIHtcbiAgICB0aGlzLmltcGw/LmluZm8/LihJTkZPLCAuLi5tZXNzYWdlcyk7XG4gIH1cblxuICBAc3RhY2tIb29rXG4gIHdhcm4oLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQge1xuICAgIHRoaXMuaW1wbD8ud2Fybj8uKFdBUk4sIC4uLm1lc3NhZ2VzKTtcbiAgfVxuXG4gIEBzdGFja0hvb2tcbiAgZXJyb3IoLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQge1xuICAgIHRoaXMuaW1wbD8uZXJyb3I/LihFUlJPUiwgLi4ubWVzc2FnZXMpO1xuICB9XG5cbiAgQHN0YWNrSG9va1xuICBmYXRhbCguLi5tZXNzYWdlczogdW5rbm93bltdKTogdm9pZCB7XG4gICAgdGhpcy5pbXBsPy5lcnJvcj8uKEZBVEFMLCAuLi5tZXNzYWdlcyk7XG4gICAgcHJvY2Vzcy5leGl0KDEpO1xuICB9XG5cbiAgcHJpdmF0ZSBkaXNwYXRjaChtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICBjb25zdCBtc2cgPSBtZXNzYWdlLnRyaW1FbmQoKTtcbiAgICBpZiAobXNnLnN0YXJ0c1dpdGgoREVCVUcpKSB7XG4gICAgICB0aGlzLmRlYnVnKG1zZy5zbGljZShERUJVRy5sZW5ndGggKyAxKSk7XG4gICAgfSBlbHNlIGlmIChtc2cuc3RhcnRzV2l0aChJTkZPKSkge1xuICAgICAgdGhpcy5pbmZvKG1zZy5zbGljZShJTkZPLmxlbmd0aCArIDEpKTtcbiAgICB9IGVsc2UgaWYgKG1zZy5zdGFydHNXaXRoKFdBUk4pKSB7XG4gICAgICB0aGlzLndhcm4obXNnLnNsaWNlKFdBUk4ubGVuZ3RoICsgMSkpO1xuICAgIH0gZWxzZSBpZiAobXNnLnN0YXJ0c1dpdGgoRVJST1IpKSB7XG4gICAgICB0aGlzLmVycm9yKG1zZy5zbGljZShFUlJPUi5sZW5ndGggKyAxKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaW5mbyhtc2cpO1xuICAgIH1cbiAgfVxuXG4gIGF0dGFjaChwcm9jOiBDaGlsZFByb2Nlc3MsIG5hbWU6IHN0cmluZykge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLmRlYnVnKGAke25hbWV9LmF0dGFjaGApO1xuICAgICAgbGV0IGZhdGFsOiBzdHJpbmcgPSBcIlwiO1xuICAgICAgY29uc3QgZGlzcGF0Y2ggPSAoZGF0YTogQnVmZmVyKSA9PiB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBkYXRhLnRvU3RyaW5nKCk7XG4gICAgICAgIGlmIChtZXNzYWdlLnN0YXJ0c1dpdGgoRkFUQUwpKSB7XG4gICAgICAgICAgZmF0YWwgKz0gbWVzc2FnZS5zbGljZShGQVRBTC5sZW5ndGggKyAxKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmRpc3BhdGNoKG1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgcHJvYy5zdGRlcnI/Lm9uKFwiZGF0YVwiLCBkaXNwYXRjaCk7XG4gICAgICBwcm9jLnN0ZG91dD8ub24oXCJkYXRhXCIsIGRpc3BhdGNoKTtcbiAgICAgIHByb2NcbiAgICAgICAgLm9uKFwiZXJyb3JcIiwgKGVycikgPT4ge1xuICAgICAgICAgIGZhdGFsICs9IGVyci5tZXNzYWdlO1xuICAgICAgICAgIHByb2Mua2lsbCgpO1xuICAgICAgICB9KVxuICAgICAgICAub25jZShcImNsb3NlXCIsIChjb2RlLCBzaWduYWwpID0+IHtcbiAgICAgICAgICBpZiAoY29kZSB8fCBzaWduYWwgfHwgZmF0YWwpIHtcbiAgICAgICAgICAgIGZhdGFsIHx8PSBgY29tbWFuZCBmYWlsZWQ6ICR7cHJvYy5zcGF3bmFyZ3Muam9pbihcIiBcIil9YDtcbiAgICAgICAgICAgIHRoaXMuZGVidWcoYCR7bmFtZX0uY2xvc2VgLCB7IGNvZGUsIHNpZ25hbCwgZmF0YWwgfSk7XG4gICAgICAgICAgICByZWplY3QobmV3IEVycm9yKGZhdGFsKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZGVidWcoYCR7bmFtZX0uY2xvc2VgKTtcbiAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC5vbihcInVuaGFuZGxlZFJlamVjdGlvblwiLCAocmVhc29uKSA9PiB7XG4gICAgICAgICAgdGhpcy5lcnJvcihgJHtuYW1lfS51bmhhbmRsZWRgLCByZWFzb24pO1xuICAgICAgICB9KVxuICAgICAgICAub24oXCJ1bmNhdWdodEV4Y2VwdGlvbk1vbml0b3JcIiwgKGVycikgPT4ge1xuICAgICAgICAgIHRoaXMuZXJyb3IoYCR7bmFtZX0udW5oYW5kbGVkYCwgZXJyKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn1cblxuY29uc3QgbG9nZ2VyID0gbmV3IExvZ2dlcigpO1xuXG4vLyBSb3V0ZSBmZm1wZWcgbmF0aXZlIGxvZ3MgdGhyb3VnaCBwdXAncyBsb2dnZXIuXG5Mb2cuc2V0Q2FsbGJhY2soKGxldmVsLCBtZXNzYWdlKSA9PiB7XG4gIGNvbnN0IG1zZyA9IG1lc3NhZ2UudHJpbUVuZCgpO1xuICBpZiAoIW1zZykge1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAobGV2ZWwgPD0gQVZfTE9HX0VSUk9SKSB7XG4gICAgbG9nZ2VyLmVycm9yKG1zZyk7XG4gIH0gZWxzZSBpZiAobGV2ZWwgPD0gQVZfTE9HX1dBUk5JTkcpIHtcbiAgICBsb2dnZXIud2Fybihtc2cpO1xuICB9XG59KTtcblxuZXhwb3J0IHsgbG9nZ2VyIH07XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzIxLlxuXG5pbXBvcnQgeyBta2RpclN5bmMgfSBmcm9tIFwibm9kZTpmc1wiO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IGFwcCwgY3Jhc2hSZXBvcnRlciB9IGZyb20gXCJlbGVjdHJvblwiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4vbG9nZ2luZ1wiO1xuXG5jb25zdCBUQUcgPSBcIltDcmFzaF1cIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXJ0RWxlY3Ryb25DcmFzaFJlcG9ydGVyKCkge1xuICAvLyBhcHBEYXRhIChub3QgdGhlIHBlci1ydW4gdXNlci1kYXRhLWRpcikgc28gZXZlcnkgcHVwIGFwcCdzIGR1bXBzIGFjY3VtdWxhdGUgaW4gb25lIHNoYXJlZCwgcGVyc2lzdGVudCBkaXIuXG4gIGNvbnN0IGR1bXBEaXIgPSBqb2luKGFwcC5nZXRQYXRoKFwiYXBwRGF0YVwiKSwgXCJwdXAtcmVjb3JkZXJcIiwgXCJjcmFzaGVzXCIpO1xuICBta2RpclN5bmMoZHVtcERpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gIGFwcC5zZXRQYXRoKFwiY3Jhc2hEdW1wc1wiLCBkdW1wRGlyKTtcbiAgY3Jhc2hSZXBvcnRlci5zdGFydCh7XG4gICAgcHJvZHVjdE5hbWU6IFwicHVwLXJlY29yZGVyXCIsXG4gICAgdXBsb2FkVG9TZXJ2ZXI6IGZhbHNlLFxuICAgIGNvbXByZXNzOiBmYWxzZSxcbiAgICBpZ25vcmVTeXN0ZW1DcmFzaEhhbmRsZXI6IHRydWUsXG4gIH0pO1xuICBsb2dnZXIuZGVidWcoVEFHLCBcInNldCBkdW1wIHRvXCIsIGR1bXBEaXIpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8yNC5cblxuZXhwb3J0IGZ1bmN0aW9uIG5vZXJyPEEgZXh0ZW5kcyB1bmtub3duW10sIFIsIEQ+KGZuOiAoLi4uYXJnczogQSkgPT4gUiwgZGVmYXVsdFZhbHVlOiBEKTogKC4uLmFyZ3M6IEEpID0+IFIgfCBEIHtcbiAgcmV0dXJuICguLi5hcmdzKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJldCA9IGZuKC4uLmFyZ3MpO1xuICAgICAgaWYgKHJldCBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgcmV0dXJuIHJldC5jYXRjaCgoKSA9PiBkZWZhdWx0VmFsdWUpIGFzIFIgfCBEO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJldDtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gICAgfVxuICB9O1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMS8zMC5cblxuaW1wb3J0IHsgdHlwZSBDaGlsZFByb2Nlc3MsIHR5cGUgU3Bhd25PcHRpb25zLCBzcGF3biB9IGZyb20gXCJub2RlOmNoaWxkX3Byb2Nlc3NcIjtcbmltcG9ydCB0cmVlS2lsbCBmcm9tIFwidHJlZS1raWxsXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi9sb2dnaW5nXCI7XG5cbmV4cG9ydCBjb25zdCBQVVBfQVJHU19LRVkgPSBcIi0tcHVwLXByaXYtYXJnc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gcGFyZ3MoKSB7XG4gIGNvbnN0IGFyZ3YgPSBwcm9jZXNzLmFyZ3Y7XG4gIGxldCBwcml2ID0gYXJndi5maW5kKChhcmcpID0+IGFyZy5zdGFydHNXaXRoKFBVUF9BUkdTX0tFWSkpO1xuICBpZiAoIXByaXYpIHtcbiAgICBsb2dnZXIuZGVidWcoXCJwcm9jYXJndlwiLCBhcmd2KTtcbiAgICByZXR1cm4gcHJvY2Vzcy5hcmd2O1xuICB9XG4gIGNvbnN0IGFyZ3MgPSBbXCJleGVjXCIsIC4uLmFyZ3Yuc2xpY2UoLTEpXTtcbiAgcHJpdiA9IEJ1ZmZlci5mcm9tKHByaXYuc3BsaXQoXCI9XCIpWzFdISwgXCJiYXNlNjRcIikudG9TdHJpbmcoKTtcbiAgYXJncy5wdXNoKC4uLkpTT04ucGFyc2UocHJpdikpO1xuICBsb2dnZXIuZGVidWcoXCJwdXBhcmdzXCIsIGFyZ3MpO1xuICByZXR1cm4gYXJncztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQcm9jZXNzSGFuZGxlIHtcbiAgcHJvY2VzczogQ2hpbGRQcm9jZXNzO1xuICB3YWl0OiBQcm9taXNlPHZvaWQ+O1xuICBnZXQga2lsbGVkKCk6IGJvb2xlYW47XG4gIGtpbGwoKTogdm9pZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4ZWMoY21kOiBzdHJpbmcsIG9wdGlvbnM/OiBTcGF3bk9wdGlvbnMpOiBQcm9jZXNzSGFuZGxlIHtcbiAgY29uc3QgcGFydHMgPSBjbWQuc3BsaXQoXCIgXCIpLmZpbHRlcigocykgPT4gcy5sZW5ndGgpO1xuICBjb25zdCBbY29tbWFuZCwgLi4uYXJnc10gPSBwYXJ0cztcbiAgaWYgKCFjb21tYW5kKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiZW1wdHkgY29tbWFuZFwiKTtcbiAgfVxuICBjb25zdCBwcm9jID0gc3Bhd24oY29tbWFuZCwgYXJncywge1xuICAgIHN0ZGlvOiBcImluaGVyaXRcIixcbiAgICAuLi5vcHRpb25zLFxuICB9KTtcbiAgbGV0IGtpbGxlZCA9IGZhbHNlO1xuICByZXR1cm4ge1xuICAgIHByb2Nlc3M6IHByb2MsXG4gICAgd2FpdDogbG9nZ2VyLmF0dGFjaChwcm9jLCBjb21tYW5kKSxcbiAgICBnZXQga2lsbGVkKCkge1xuICAgICAgcmV0dXJuIGtpbGxlZDtcbiAgICB9LFxuICAgIGtpbGwoKSB7XG4gICAgICBpZiAoa2lsbGVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGtpbGxlZCA9IHRydWU7XG4gICAgICBjb25zdCBwaWQgPSBwcm9jLnBpZDtcbiAgICAgIGlmIChwaWQpIHtcbiAgICAgICAgdHJlZUtpbGwocGlkLCBcIlNJR0tJTExcIik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwcm9jLmtpbGwoXCJTSUdLSUxMXCIpO1xuICAgICAgfVxuICAgIH0sXG4gIH07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA2LlxuXG5pbXBvcnQgeiBmcm9tIFwiem9kXCI7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX1dJRFRIID0gMTkyMDtcbmV4cG9ydCBjb25zdCBERUZBVUxUX0hFSUdIVCA9IDEwODA7XG5leHBvcnQgY29uc3QgREVGQVVMVF9GUFMgPSAzMDtcbmV4cG9ydCBjb25zdCBERUZBVUxUX0RVUkFUSU9OID0gNTtcbmV4cG9ydCBjb25zdCBERUZBVUxUX1dJTkRPV19USU1FT1VUID0gMTA7XG5leHBvcnQgY29uc3QgREVGQVVMVF9PVVRfRklMRSA9IFwib3V0L2h0bWwubXA0LG91dC9odG1sLndlYm1cIjtcblxuZXhwb3J0IGNvbnN0IHJlbmRlclNjaGVtYSA9IHoub2JqZWN0KHtcbiAgZHVyYXRpb246IHoubnVtYmVyKCkuZGVzY3JpYmUoXCJEdXJhdGlvbiBpbiBzZWNvbmRzXCIpLFxuICB3aWR0aDogei5udW1iZXIoKS5kZXNjcmliZShcIlZpZGVvIHdpZHRoXCIpLFxuICBoZWlnaHQ6IHoubnVtYmVyKCkuZGVzY3JpYmUoXCJWaWRlbyBoZWlnaHRcIiksXG4gIGZwczogei5udW1iZXIoKS5kZXNjcmliZShcIkZyYW1lcyBwZXIgc2Vjb25kXCIpLFxuICB3aXRoQXVkaW86IHouYm9vbGVhbigpLmRlc2NyaWJlKFwiQ2FwdHVyZSBhbmQgZW5jb2RlIGF1ZGlvXCIpLFxuICBvdXRGaWxlOiB6LnN0cmluZygpLmRlc2NyaWJlKFwiQ29tbWEtc2VwYXJhdGVkIG91dHB1dCBwYXRoczsgZXh0ZW5zaW9uICgubXA0Ly53ZWJtKSBzZWxlY3RzIGVuY29kZXJcIiksXG4gIHVzZUlubmVyUHJveHk6IHouYm9vbGVhbigpLmRlc2NyaWJlKFwiVXNlIGJpbGliaWxpIGlubmVyIHByb3h5IGZvciByZXNvdXJjZSBhY2Nlc3NcIiksXG4gIGRldGVybWluaXN0aWM6IHouYm9vbGVhbigpLmRlc2NyaWJlKFwiUmVuZGVyIGJ5IGZyYW1lIHJhdGhlciB0aGFuIHJlY29yZGluZ1wiKSxcbiAgZGlzYWJsZUdwdTogei5ib29sZWFuKCkuZGVzY3JpYmUoXCJEaXNhYmxlIEdQVSByZW5kZXJpbmcsIG1heSByZWR1Y2UgcGVyZm9ybWFuY2UgYnV0IGluY3JlYXNlIHN0YWJpbGl0eVwiKSxcbiAgZGlzYWJsZUh3Q29kZWM6IHouYm9vbGVhbigpLmRlc2NyaWJlKFwiRGlzYWJsZSBoYXJkd2FyZSB2aWRlbyBlbmNvZGVyIChOVkVOQy9WaWRlb1Rvb2xib3gpLCB1c2Ugc29mdHdhcmUgeDI2NVwiKSxcbiAgd2luZG93VG9sZXJhbnQ6IHouYm9vbGVhbigpLmRlc2NyaWJlKFwiRmFsbCBiYWNrIHRvIGRvbS1yZWFkeSBpZiB3YXJtdXAgbG9hZCB0aW1lcyBvdXRcIiksXG4gIHdpbmRvd1RpbWVvdXQ6IHoubnVtYmVyKCkuZGVzY3JpYmUoXCJXaW5kb3cgbG9hZCB0aW1lb3V0IGluIHNlY29uZHNcIiksXG59KTtcblxuZXhwb3J0IHR5cGUgUmVuZGVyT3B0aW9ucyA9IHouaW5mZXI8dHlwZW9mIHJlbmRlclNjaGVtYT47XG5cbmV4cG9ydCB0eXBlIENvbnNvbGVDYWxsYmFjayA9IChsZXZlbDogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcpID0+IHZvaWQ7XG5cbmV4cG9ydCB0eXBlIFByb2dyZXNzQ2FsbGJhY2sgPSAocHJvZ3Jlc3M6IG51bWJlcikgPT4gdm9pZDtcblxuZXhwb3J0IGludGVyZmFjZSBJUENSZW5kZXJPcHRpb25zIGV4dGVuZHMgUmVuZGVyT3B0aW9ucyB7XG4gIHNvdXJjZTogc3RyaW5nO1xuICBzaWduYWw6IEFib3J0U2lnbmFsO1xuICBvblByb2dyZXNzOiBQcm9ncmVzc0NhbGxiYWNrO1xuICBvbkNvbnNvbGU6IENvbnNvbGVDYWxsYmFjaztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZW5kZXJSZXN1bHQge1xuICBvcHRpb25zOiBSZW5kZXJPcHRpb25zO1xuICB3cml0dGVuOiBudW1iZXI7XG4gIGphbms6IG51bWJlcjtcbiAgb3V0RmlsZTogc3RyaW5nO1xuICBibGFuazogbnVtYmVyO1xufVxuXG5leHBvcnQgY29uc3QgZGVmYXVsdFJlbmRlck9wdGlvbnM6IFJlbmRlck9wdGlvbnMgPSB7XG4gIHdpZHRoOiBERUZBVUxUX1dJRFRILFxuICBoZWlnaHQ6IERFRkFVTFRfSEVJR0hULFxuICBmcHM6IERFRkFVTFRfRlBTLFxuICBkdXJhdGlvbjogREVGQVVMVF9EVVJBVElPTixcbiAgb3V0RmlsZTogREVGQVVMVF9PVVRfRklMRSxcbiAgd2l0aEF1ZGlvOiBmYWxzZSxcbiAgdXNlSW5uZXJQcm94eTogZmFsc2UsXG4gIGRldGVybWluaXN0aWM6IGZhbHNlLFxuICBkaXNhYmxlR3B1OiBmYWxzZSxcbiAgZGlzYWJsZUh3Q29kZWM6IGZhbHNlLFxuICB3aW5kb3dUb2xlcmFudDogZmFsc2UsXG4gIHdpbmRvd1RpbWVvdXQ6IERFRkFVTFRfV0lORE9XX1RJTUVPVVQsXG59O1xuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wOS5cblxuaW1wb3J0IHsgcmVhbHBhdGhTeW5jIH0gZnJvbSBcIm5vZGU6ZnNcIjtcbmltcG9ydCB7IHJlc29sdmUgfSBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyBwcm9ncmFtIH0gZnJvbSBcImNvbW1hbmRlclwiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4vYmFzZS9sb2dnaW5nXCI7XG5pbXBvcnQgeyBub2VyciB9IGZyb20gXCIuL2Jhc2Uvbm9lcnJcIjtcbmltcG9ydCB7IHBhcnNlTnVtYmVyIH0gZnJvbSBcIi4vYmFzZS9wYXJzZXJcIjtcbmltcG9ydCB7IHBhcmdzIH0gZnJvbSBcIi4vYmFzZS9wcm9jZXNzXCI7XG5pbXBvcnQgeyBkZWZhdWx0UmVuZGVyT3B0aW9ucywgdHlwZSBSZW5kZXJPcHRpb25zLCByZW5kZXJTY2hlbWEgfSBmcm9tIFwiLi9yZW5kZXJlci9zY2hlbWFcIjtcblxuLy8gU2NoZW1lZCBVUklzIHBhc3MgdGhyb3VnaDsgYmFyZSBwYXRocyBnZXQgY2Fub25pY2FsaXplZCBhbmQgd3JhcHBlZCBhcyBmaWxlOi8vLlxuZnVuY3Rpb24gbm9ybWFsaXplU291cmNlKHM6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmIChzLmluY2x1ZGVzKFwiOi8vXCIpIHx8IHMuc3RhcnRzV2l0aChcImRhdGE6XCIpKSB7XG4gICAgcmV0dXJuIHM7XG4gIH1cbiAgbGV0IGFiczogc3RyaW5nO1xuICB0cnkge1xuICAgIGFicyA9IHJlYWxwYXRoU3luYyhzKTtcbiAgfSBjYXRjaCB7XG4gICAgYWJzID0gcmVzb2x2ZShzKTtcbiAgfVxuICByZXR1cm4gYGZpbGU6Ly8ke2Fic31gO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENMSU9wdGlvbnMge1xuICBuYW1lOiBzdHJpbmc7XG4gIHJ1bjogKHNvdXJjZTogc3RyaW5nLCBvcHRpb25zOiBSZW5kZXJPcHRpb25zKSA9PiBQcm9taXNlPHVua25vd24+O1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbWFrZUNMSShvcHRpb25zOiBDTElPcHRpb25zKSB7XG4gIGNvbnN0IHNoYXBlID0gcmVuZGVyU2NoZW1hLnNoYXBlO1xuICBjb25zdCBkID0gZGVmYXVsdFJlbmRlck9wdGlvbnM7XG4gIHByb2dyYW1cbiAgICAubmFtZShvcHRpb25zLm5hbWUpXG4gICAgLmFyZ3VtZW50KFwiPHNvdXJjZT5cIiwgXCJmaWxlOi8vLCBodHRwKHMpOi8vLCBkYXRhOiBVUkksIG9yIGZpbGVzeXN0ZW0gcGF0aFwiKVxuICAgIC5vcHRpb24oXCItVywgLS13aWR0aCA8bnVtYmVyPlwiLCBzaGFwZS53aWR0aC5kZXNjcmlwdGlvbiwgYCR7ZC53aWR0aH1gKVxuICAgIC5vcHRpb24oXCItSCwgLS1oZWlnaHQgPG51bWJlcj5cIiwgc2hhcGUuaGVpZ2h0LmRlc2NyaXB0aW9uLCBgJHtkLmhlaWdodH1gKVxuICAgIC5vcHRpb24oXCItZiwgLS1mcHMgPG51bWJlcj5cIiwgc2hhcGUuZnBzLmRlc2NyaXB0aW9uLCBgJHtkLmZwc31gKVxuICAgIC5vcHRpb24oXCItdCwgLS1kdXJhdGlvbiA8bnVtYmVyPlwiLCBzaGFwZS5kdXJhdGlvbi5kZXNjcmlwdGlvbiwgYCR7ZC5kdXJhdGlvbn1gKVxuICAgIC5vcHRpb24oXCItbywgLS1vdXQtZmlsZSA8cGF0aD5cIiwgc2hhcGUub3V0RmlsZS5kZXNjcmlwdGlvbiwgZC5vdXRGaWxlKVxuICAgIC5vcHRpb24oXCItYSwgLS13aXRoLWF1ZGlvXCIsIHNoYXBlLndpdGhBdWRpby5kZXNjcmlwdGlvbiwgZC53aXRoQXVkaW8pXG4gICAgLm9wdGlvbihcIi1kLCAtLWRldGVybWluaXN0aWNcIiwgc2hhcGUuZGV0ZXJtaW5pc3RpYy5kZXNjcmlwdGlvbiwgZC5kZXRlcm1pbmlzdGljKVxuICAgIC5vcHRpb24oXCItLXVzZS1pbm5lci1wcm94eVwiLCBzaGFwZS51c2VJbm5lclByb3h5LmRlc2NyaXB0aW9uLCBkLnVzZUlubmVyUHJveHkpXG4gICAgLm9wdGlvbihcIi0tZGlzYWJsZS1ncHVcIiwgc2hhcGUuZGlzYWJsZUdwdS5kZXNjcmlwdGlvbiwgZC5kaXNhYmxlR3B1KVxuICAgIC5vcHRpb24oXCItLWRpc2FibGUtaHctY29kZWNcIiwgc2hhcGUuZGlzYWJsZUh3Q29kZWMuZGVzY3JpcHRpb24sIGQuZGlzYWJsZUh3Q29kZWMpXG4gICAgLm9wdGlvbihcIi0td2luZG93LXRvbGVyYW50XCIsIHNoYXBlLndpbmRvd1RvbGVyYW50LmRlc2NyaXB0aW9uLCBkLndpbmRvd1RvbGVyYW50KVxuICAgIC5vcHRpb24oXCItLXdpbmRvdy10aW1lb3V0IDxudW1iZXI+XCIsIHNoYXBlLndpbmRvd1RpbWVvdXQuZGVzY3JpcHRpb24sIGAke2Qud2luZG93VGltZW91dH1gKVxuICAgIC5hY3Rpb24oYXN5bmMgKHNvdXJjZTogc3RyaW5nLCBvcHRzKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBvcHRpb25zLnJ1bihub3JtYWxpemVTb3VyY2Uoc291cmNlKSwge1xuICAgICAgICAgIHdpZHRoOiBub2VycihwYXJzZU51bWJlciwgZC53aWR0aCkob3B0cy53aWR0aCksXG4gICAgICAgICAgaGVpZ2h0OiBub2VycihwYXJzZU51bWJlciwgZC5oZWlnaHQpKG9wdHMuaGVpZ2h0KSxcbiAgICAgICAgICBmcHM6IG5vZXJyKHBhcnNlTnVtYmVyLCBkLmZwcykob3B0cy5mcHMpLFxuICAgICAgICAgIGR1cmF0aW9uOiBub2VycihwYXJzZU51bWJlciwgZC5kdXJhdGlvbikob3B0cy5kdXJhdGlvbiksXG4gICAgICAgICAgb3V0RmlsZTogb3B0cy5vdXRGaWxlID8/IGQub3V0RmlsZSxcbiAgICAgICAgICB3aXRoQXVkaW86IG9wdHMud2l0aEF1ZGlvID8/IGQud2l0aEF1ZGlvLFxuICAgICAgICAgIHVzZUlubmVyUHJveHk6IG9wdHMudXNlSW5uZXJQcm94eSA/PyBkLnVzZUlubmVyUHJveHksXG4gICAgICAgICAgZGV0ZXJtaW5pc3RpYzogb3B0cy5kZXRlcm1pbmlzdGljID8/IGQuZGV0ZXJtaW5pc3RpYyxcbiAgICAgICAgICBkaXNhYmxlR3B1OiBvcHRzLmRpc2FibGVHcHUgPz8gZC5kaXNhYmxlR3B1LFxuICAgICAgICAgIGRpc2FibGVId0NvZGVjOiBvcHRzLmRpc2FibGVId0NvZGVjID8/IGQuZGlzYWJsZUh3Q29kZWMsXG4gICAgICAgICAgd2luZG93VG9sZXJhbnQ6IG9wdHMud2luZG93VG9sZXJhbnQgPz8gZC53aW5kb3dUb2xlcmFudCxcbiAgICAgICAgICB3aW5kb3dUaW1lb3V0OiBub2VycihwYXJzZU51bWJlciwgZC53aW5kb3dUaW1lb3V0KShvcHRzLndpbmRvd1RpbWVvdXQpLFxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgbG9nZ2VyLmZhdGFsKGUpO1xuICAgICAgfVxuICAgIH0pO1xuICBhd2FpdCBwcm9ncmFtLnBhcnNlQXN5bmMocGFyZ3MoKSk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzAxLlxuXG5pbXBvcnQgdHlwZSB7IENoaWxkUHJvY2VzcyB9IGZyb20gXCJub2RlOmNoaWxkX3Byb2Nlc3NcIjtcbmltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gXCJub2RlOmV2ZW50c1wiO1xuXG5leHBvcnQgZW51bSBJcGNNc2dUeXBlIHtcbiAgLy8gY2hpbGQg4oaSIHBhcmVudFxuICBDb25zb2xlID0gXCJjb25zb2xlXCIsXG4gIFByb2dyZXNzID0gXCJwcm9ncmVzc1wiLFxuICBEb25lID0gXCJkb25lXCIsXG4gIEVycm9yID0gXCJlcnJvclwiLFxuICAvLyBwYXJlbnQg4oaSIGNoaWxkXG4gIENhbmNlbCA9IFwiY2FuY2VsXCIsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29uc29sZU1zZyB7XG4gIHR5cGU6IElwY01zZ1R5cGUuQ29uc29sZTtcbiAgbGV2ZWw6IHN0cmluZztcbiAgbWVzc2FnZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENhbmNlbE1zZyB7XG4gIHR5cGU6IElwY01zZ1R5cGUuQ2FuY2VsO1xuICByZWFzb24/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSXBjRG9uZVBheWxvYWQge1xuICB3cml0dGVuOiBudW1iZXI7XG4gIGphbms6IG51bWJlcjtcbiAgb3V0RmlsZTogc3RyaW5nO1xuICBibGFuazogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFByb2dyZXNzTXNnIHtcbiAgdHlwZTogSXBjTXNnVHlwZS5Qcm9ncmVzcztcbiAgdmFsdWU6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEb25lTXNnIHtcbiAgdHlwZTogSXBjTXNnVHlwZS5Eb25lO1xuICBwYXlsb2FkOiBJcGNEb25lUGF5bG9hZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFcnJvck1zZyB7XG4gIHR5cGU6IElwY01zZ1R5cGUuRXJyb3I7XG4gIGVycm9yOiBzdHJpbmc7XG59XG5cbmV4cG9ydCB0eXBlIElwY01zZyA9IENvbnNvbGVNc2cgfCBQcm9ncmVzc01zZyB8IERvbmVNc2cgfCBFcnJvck1zZyB8IENhbmNlbE1zZztcblxuZXhwb3J0IGludGVyZmFjZSBJcGNFdmVudHMge1xuICBwcm9ncmVzczogW3ZhbHVlOiBudW1iZXJdO1xuICBjb25zb2xlOiBbbGV2ZWw6IHN0cmluZywgbXNnOiBzdHJpbmddO1xuICBkb25lOiBbcGF5bG9hZDogSXBjRG9uZVBheWxvYWRdO1xuICBlcnJvcjogW2Vycm9yOiBFcnJvcl07XG4gIGNsb3NlOiBbY29kZTogbnVtYmVyIHwgbnVsbF07XG59XG5cbmV4cG9ydCBjbGFzcyBJcGNXcml0ZXIge1xuICB3cml0ZUNvbnNvbGUobGV2ZWw6IHN0cmluZywgbWVzc2FnZTogc3RyaW5nKSB7XG4gICAgdGhpcy5zZW5kKHsgdHlwZTogSXBjTXNnVHlwZS5Db25zb2xlLCBsZXZlbCwgbWVzc2FnZSB9KTtcbiAgfVxuXG4gIHdyaXRlUHJvZ3Jlc3ModmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuc2VuZCh7IHR5cGU6IElwY01zZ1R5cGUuUHJvZ3Jlc3MsIHZhbHVlIH0pO1xuICB9XG5cbiAgd3JpdGVFcnJvcihlcnJvcjogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuc2VuZCh7IHR5cGU6IElwY01zZ1R5cGUuRXJyb3IsIGVycm9yIH0pO1xuICB9XG5cbiAgd3JpdGVEb25lKHBheWxvYWQ6IElwY0RvbmVQYXlsb2FkKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuc2VuZCh7IHR5cGU6IElwY01zZ1R5cGUuRG9uZSwgcGF5bG9hZCB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2VuZChtc2c6IElwY01zZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgaWYgKCFwcm9jZXNzLnNlbmQpIHtcbiAgICAgICAgcmV0dXJuIHJlc29sdmUoKTtcbiAgICAgIH1cbiAgICAgIHByb2Nlc3Muc2VuZChtc2csICgpID0+IHJlc29sdmUoKSk7XG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIElwY1JlYWRlciBleHRlbmRzIEV2ZW50RW1pdHRlcjxJcGNFdmVudHM+IHtcbiAgY29uc3RydWN0b3IoY2hpbGQ6IENoaWxkUHJvY2Vzcykge1xuICAgIHN1cGVyKCk7XG4gICAgY2hpbGQub24oXCJtZXNzYWdlXCIsIChyYXcpID0+IHtcbiAgICAgIGNvbnN0IG1zZyA9IHJhdyBhcyBJcGNNc2c7XG4gICAgICBzd2l0Y2ggKG1zZy50eXBlKSB7XG4gICAgICAgIGNhc2UgSXBjTXNnVHlwZS5Db25zb2xlOiB7XG4gICAgICAgICAgdGhpcy5lbWl0KFwiY29uc29sZVwiLCBtc2cubGV2ZWwsIG1zZy5tZXNzYWdlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIElwY01zZ1R5cGUuUHJvZ3Jlc3M6IHtcbiAgICAgICAgICB0aGlzLmVtaXQoXCJwcm9ncmVzc1wiLCBtc2cudmFsdWUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgSXBjTXNnVHlwZS5Eb25lOiB7XG4gICAgICAgICAgdGhpcy5lbWl0KFwiZG9uZVwiLCBtc2cucGF5bG9hZCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBJcGNNc2dUeXBlLkVycm9yOiB7XG4gICAgICAgICAgdGhpcy5lbWl0KFwiZXJyb3JcIiwgbmV3IEVycm9yKG1zZy5lcnJvcikpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgY2hpbGQub25jZShcImV4aXRcIiwgKGMpID0+IHRoaXMuZW1pdChcImNsb3NlXCIsIGMpKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wOS5cblxuZXhwb3J0IGZ1bmN0aW9uIHNsZWVwKG1zOiBudW1iZXIpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIG1zKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3aXRoVGltZW91dDxUPihwOiBQcm9taXNlPFQ+LCBtczogbnVtYmVyLCBsYWJlbDogc3RyaW5nKTogUHJvbWlzZTxUPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHJlamVjdChuZXcgRXJyb3IoYCR7bGFiZWx9IHRpbWVkIG91dCBhZnRlciAke21zfW1zYCkpLCBtcyk7XG4gICAgcC50aGVuKHJlc29sdmUsIHJlamVjdCkuZmluYWxseSgoKSA9PiBjbGVhclRpbWVvdXQodGltZXIpKTtcbiAgfSk7XG59XG5cbi8vIFJlamVjdCBhcyBzb29uIGFzIGBzaWduYWxgIGFib3J0cywgZWxzZSBzZXR0bGUgd2l0aCBgcGA7IG5vLW9wIHBhc3N0aHJvdWdoIHdoZW4gbm8gc2lnbmFsLlxuZXhwb3J0IGZ1bmN0aW9uIGFib3J0YWJsZTxUPihwOiBQcm9taXNlPFQ+LCBzaWduYWw/OiBBYm9ydFNpZ25hbCk6IFByb21pc2U8VD4ge1xuICBpZiAoIXNpZ25hbCkge1xuICAgIHJldHVybiBwO1xuICB9XG4gIHJldHVybiBuZXcgUHJvbWlzZTxUPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3Qgb25BYm9ydCA9ICgpID0+IHJlamVjdChzaWduYWwucmVhc29uKTtcbiAgICBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsIG9uQWJvcnQsIHsgb25jZTogdHJ1ZSB9KTtcbiAgICBwLnRoZW4ocmVzb2x2ZSwgcmVqZWN0KS5maW5hbGx5KCgpID0+IHNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgb25BYm9ydCkpO1xuICB9KTtcbn1cblxuLy8gQ2FsbGJhY2sgbWF5IHJldHVybiB0aGUgbmV4dCBpbnRlcnZhbCAobXMpIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IGZvciB0aGUgZm9sbG93aW5nIHRpY2suXG5leHBvcnQgZnVuY3Rpb24gcGVyaW9kaWNhbChjYWxsYmFjazogKGNvdW50OiBudW1iZXIpID0+IFByb21pc2U8bnVtYmVyIHwgdW5kZWZpbmVkPiB8IHVuZGVmaW5lZCwgbXM6IG51bWJlcikge1xuICBsZXQgdG9rZW46IE5vZGVKUy5UaW1lb3V0O1xuICBsZXQgY2xvc2VkID0gZmFsc2U7XG4gIGFzeW5jIGZ1bmN0aW9uIHRpY2soY291bnQ6IG51bWJlcikge1xuICAgIGNvbnN0IG5leHQgPSBhd2FpdCBjYWxsYmFjayhjb3VudCk7XG4gICAgaWYgKGNsb3NlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0b2tlbiA9IHNldFRpbWVvdXQoKCkgPT4gdGljayhjb3VudCArIDEpLCBuZXh0ID8/IG1zKTtcbiAgfVxuICB0b2tlbiA9IHNldFRpbWVvdXQoKCkgPT4gdGljaygwKSwgbXMpO1xuICByZXR1cm4gKCkgPT4ge1xuICAgIGNsb3NlZCA9IHRydWU7XG4gICAgY2xlYXJUaW1lb3V0KHRva2VuKTtcbiAgfTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDMvMTMuXG5cbmltcG9ydCB0eXBlIHsgRGVidWdnZXIsIFNpemUgfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IHdpdGhUaW1lb3V0IH0gZnJvbSBcIi4vdGltaW5nXCI7XG5cbmNvbnN0IENEUF9USU1FT1VUX01TID0gNV8wMDA7XG5cbmV4cG9ydCBmdW5jdGlvbiBzZW5kKGNkcDogRGVidWdnZXIsIG1ldGhvZDogc3RyaW5nLCBwYXJhbXM/OiBvYmplY3QpOiBQcm9taXNlPHVua25vd24+IHtcbiAgcmV0dXJuIHdpdGhUaW1lb3V0KGNkcC5zZW5kQ29tbWFuZChtZXRob2QsIHBhcmFtcyksIENEUF9USU1FT1VUX01TLCBgY2RwLiR7bWV0aG9kfWApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXZhbEluKGNkcDogRGVidWdnZXIsIGV4cHJlc3Npb246IHN0cmluZyk6IFByb21pc2U8dW5rbm93bj4ge1xuICByZXR1cm4gd2l0aFRpbWVvdXQoc2VuZChjZHAsIFwiUnVudGltZS5ldmFsdWF0ZVwiLCB7IGV4cHJlc3Npb24gfSksIENEUF9USU1FT1VUX01TLCBcImV2YWxJblwiKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFkdmFuY2VWaXJ0dWFsVGltZShjZHA6IERlYnVnZ2VyLCBidWRnZXQ6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNkcC5vZmYoXCJtZXNzYWdlXCIsIGhhbmRsZXIpO1xuICAgICAgcmVqZWN0KG5ldyBFcnJvcihgYWR2YW5jZVZpcnR1YWxUaW1lIHRpbWVkIG91dCBhZnRlciAke0NEUF9USU1FT1VUX01TfW1zYCkpO1xuICAgIH0sIENEUF9USU1FT1VUX01TKTtcblxuICAgIGNvbnN0IGhhbmRsZXIgPSAoXzogRWxlY3Ryb24uRXZlbnQsIG1ldGhvZDogc3RyaW5nKSA9PiB7XG4gICAgICBpZiAobWV0aG9kID09PSBcIkVtdWxhdGlvbi52aXJ0dWFsVGltZUJ1ZGdldEV4cGlyZWRcIikge1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgIGNkcC5vZmYoXCJtZXNzYWdlXCIsIGhhbmRsZXIpO1xuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjZHAub24oXCJtZXNzYWdlXCIsIGhhbmRsZXIpO1xuICAgIC8vIE5vIHN0YXJ2YXRpb24gY2FwICh3b3VsZCBza2lwIHBlbmRpbmcgd29yayBub24tZGV0ZXJtaW5pc3RpY2FsbHkpOyBjYXB0dXJlIHN0YXJ0cyBwb3N0IGRpZC1zdG9wLWxvYWRpbmcsIGFuZCBDRFBfVElNRU9VVF9NUyB0dXJucyBhIHJlYWwgc3RhbGwgaW50byBhIGZhaWxlZCByZW5kZXIuXG4gICAgc2VuZChjZHAsIFwiRW11bGF0aW9uLnNldFZpcnR1YWxUaW1lUG9saWN5XCIsIHtcbiAgICAgIHBvbGljeTogXCJhZHZhbmNlXCIsXG4gICAgICBidWRnZXQsXG4gICAgfSkuY2F0Y2goKGUpID0+IHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgIGNkcC5vZmYoXCJtZXNzYWdlXCIsIGhhbmRsZXIpO1xuICAgICAgcmVqZWN0KGUpO1xuICAgIH0pO1xuICB9KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHBhdXNlVmlydHVhbFRpbWUoY2RwOiBEZWJ1Z2dlcik6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBzZW5kKGNkcCwgXCJFbXVsYXRpb24uc2V0VmlydHVhbFRpbWVQb2xpY3lcIiwgeyBwb2xpY3k6IFwicGF1c2VcIiB9KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc2l6ZURyYXdhYmxlKGNkcDogRGVidWdnZXIsIHNpemU6IFNpemUpIHtcbiAgYXdhaXQgc2VuZChjZHAsIFwiRW11bGF0aW9uLnNldERldmljZU1ldHJpY3NPdmVycmlkZVwiLCB7XG4gICAgLi4uc2l6ZSxcbiAgICBkZXZpY2VTY2FsZUZhY3RvcjogMSxcbiAgICBtb2JpbGU6IGZhbHNlLFxuICB9KTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDkuXG5cbmltcG9ydCB0eXBlIHsgRGVidWdnZXIsIFNpemUsIFdlYkNvbnRlbnRzIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBldmFsSW4gfSBmcm9tIFwiLi4vYmFzZS9jZHBcIjtcbmltcG9ydCB7IHdpdGhUaW1lb3V0IH0gZnJvbSBcIi4uL2Jhc2UvdGltaW5nXCI7XG5cbmV4cG9ydCBjb25zdCBGUkFNRV9TWU5DX01BUktFUl9XSURUSCA9IDMyO1xuZXhwb3J0IGNvbnN0IEZSQU1FX1NZTkNfTUFSS0VSX0hFSUdIVCA9IDE7XG5leHBvcnQgY29uc3QgU1RFR09fVElDS19DSEFOTkVMID0gXCJzdGVnby10aWNrXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFN0ZWdvSFRNTCh0YXJnZXRVUkw6IHN0cmluZywgc2l6ZTogU2l6ZSk6IHN0cmluZyB7XG4gIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gc2l6ZTtcbiAgcmV0dXJuIGA8IURPQ1RZUEUgaHRtbD5cbjxodG1sPlxuPGhlYWQ+XG4gIDxtZXRhIGNoYXJzZXQ9XCJVVEYtOFwiPlxuICA8c3R5bGU+XG4gICAgKiB7IG1hcmdpbjogMDsgcGFkZGluZzogMDsgYm94LXNpemluZzogYm9yZGVyLWJveDsgfVxuICAgIGh0bWwsIGJvZHkgeyB3aWR0aDogJHt3aWR0aH1weDsgaGVpZ2h0OiAke2hlaWdodCArIDF9cHg7IG92ZXJmbG93OiBoaWRkZW47IH1cbiAgICAjdGFyZ2V0IHsgXG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7IFxuICAgICAgdG9wOiAwOyBcbiAgICAgIGxlZnQ6IDA7IFxuICAgICAgd2lkdGg6ICR7d2lkdGh9cHg7IFxuICAgICAgaGVpZ2h0OiAke2hlaWdodH1weDsgXG4gICAgICBib3JkZXI6IG5vbmU7IFxuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgfVxuICAgICNzdGVnbyB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB0b3A6ICR7aGVpZ2h0fXB4O1xuICAgICAgbGVmdDogMDtcbiAgICAgIHdpZHRoOiAke3dpZHRofXB4O1xuICAgICAgaGVpZ2h0OiAxcHg7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIGltYWdlLXJlbmRlcmluZzogcGl4ZWxhdGVkO1xuICAgIH1cbiAgPC9zdHlsZT5cbjwvaGVhZD5cbjxib2R5PlxuICA8aWZyYW1lIGlkPVwidGFyZ2V0XCIgc3JjPVwiJHt0YXJnZXRVUkx9XCI+PC9pZnJhbWU+XG4gIDxjYW52YXMgaWQ9XCJzdGVnb1wiIHdpZHRoPVwiJHt3aWR0aH1cIiBoZWlnaHQ9XCIxXCI+PC9jYW52YXM+XG4gIDxzY3JpcHQ+XG4gICAgKGZ1bmN0aW9uKCkge1xuICAgICAgY29uc3QgeyBpcGNSZW5kZXJlciB9ID0gcmVxdWlyZSgnZWxlY3Ryb24nKTtcbiAgICAgIGNvbnN0IFdJRFRIID0gJHt3aWR0aH07XG4gICAgICBjb25zdCBNQVJLRVJfV0lEVEggPSAke0ZSQU1FX1NZTkNfTUFSS0VSX1dJRFRIfTtcbiAgICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdGVnbycpO1xuICAgICAgY29uc3QgY3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJywgeyB3aWxsUmVhZEZyZXF1ZW50bHk6IHRydWUgfSk7XG4gICAgICBsZXQgc3RhcnRUaW1lID0gbnVsbDtcbiAgICAgIGxldCByYWZJZCA9IG51bGw7XG5cbiAgICAgIGZ1bmN0aW9uIGVuY29kZVRpbWVzdGFtcCh0aW1lc3RhbXBNcykge1xuICAgICAgICBjb25zdCBpbWFnZURhdGEgPSBjdHguY3JlYXRlSW1hZ2VEYXRhKFdJRFRILCAxKTtcbiAgICAgICAgY29uc3QgZGF0YSA9IGltYWdlRGF0YS5kYXRhO1xuXG4gICAgICAgIGNvbnN0IHRpbWVzdGFtcEludCA9IE1hdGguZmxvb3IodGltZXN0YW1wTXMpID4+PiAwO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgTUFSS0VSX1dJRFRIOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBiaXQgPSAodGltZXN0YW1wSW50ID4+PiAoTUFSS0VSX1dJRFRIIC0gMSAtIGkpKSAmIDE7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSBiaXQgPyAyNTUgOiAwO1xuICAgICAgICAgIGNvbnN0IGlkeCA9IGkgKiA0O1xuICAgICAgICAgIGRhdGFbaWR4XSA9IHZhbHVlO1xuICAgICAgICAgIGRhdGFbaWR4ICsgMV0gPSB2YWx1ZTtcbiAgICAgICAgICBkYXRhW2lkeCArIDJdID0gdmFsdWU7XG4gICAgICAgICAgZGF0YVtpZHggKyAzXSA9IDI1NTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAobGV0IGkgPSBNQVJLRVJfV0lEVEg7IGkgPCBXSURUSDsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgaWR4ID0gaSAqIDQ7XG4gICAgICAgICAgZGF0YVtpZHhdID0gMDtcbiAgICAgICAgICBkYXRhW2lkeCArIDFdID0gMDtcbiAgICAgICAgICBkYXRhW2lkeCArIDJdID0gMDtcbiAgICAgICAgICBkYXRhW2lkeCArIDNdID0gMjU1O1xuICAgICAgICB9XG5cbiAgICAgICAgY3R4LnB1dEltYWdlRGF0YShpbWFnZURhdGEsIDAsIDApO1xuICAgICAgICBpcGNSZW5kZXJlci5zZW5kKCcke1NURUdPX1RJQ0tfQ0hBTk5FTH0nKTtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gdXBkYXRlTG9vcCgpIHtcbiAgICAgICAgaWYgKHN0YXJ0VGltZSA9PT0gbnVsbCkgcmV0dXJuO1xuICAgICAgICBjb25zdCBlbGFwc2VkID0gcGVyZm9ybWFuY2Uubm93KCkgLSBzdGFydFRpbWU7XG4gICAgICAgIGVuY29kZVRpbWVzdGFtcChlbGFwc2VkKTtcbiAgICAgICAgcmFmSWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodXBkYXRlTG9vcCk7XG4gICAgICB9XG5cbiAgICAgIHdpbmRvdy5fX3B1cF9zdGFydF9zdGVnb19fID0gKCkgPT4ge1xuICAgICAgICBzdGFydFRpbWUgPSBwZXJmb3JtYW5jZS5ub3coKTtcbiAgICAgICAgZW5jb2RlVGltZXN0YW1wKDApO1xuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodXBkYXRlTG9vcCk7XG4gICAgICB9O1xuXG4gICAgICB3aW5kb3cuX19wdXBfZHJhd19zdGVnb19fID0gKG1zKSA9PiB7XG4gICAgICAgIGVuY29kZVRpbWVzdGFtcChtcyk7XG4gICAgICB9O1xuXG4gICAgICB3aW5kb3cuX19wdXBfc3RvcF9zdGVnb19fID0gKCkgPT4ge1xuICAgICAgICBpZiAocmFmSWQgIT09IG51bGwpIHtcbiAgICAgICAgICBjYW5jZWxBbmltYXRpb25GcmFtZShyYWZJZCk7XG4gICAgICAgICAgcmFmSWQgPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH0pKCk7XG4gIDwvc2NyaXB0PlxuPC9ib2R5PlxuPC9odG1sPmA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWNvZGVTdGVnbyhiaXRtYXA6IEJ1ZmZlciwgc2l6ZTogU2l6ZSk6IG51bWJlciB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gc2l6ZTtcbiAgaWYgKHdpZHRoIDwgRlJBTUVfU1lOQ19NQVJLRVJfV0lEVEggfHwgaGVpZ2h0IDwgMikge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBtYXJrZXJSb3cgPSBoZWlnaHQgLSAxO1xuXG4gIGxldCB0aW1lc3RhbXAgPSAwO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IEZSQU1FX1NZTkNfTUFSS0VSX1dJRFRIOyBpKyspIHtcbiAgICBjb25zdCBwaXhlbElkeCA9IChtYXJrZXJSb3cgKiB3aWR0aCArIGkpICogNDtcbiAgICBjb25zdCByID0gYml0bWFwW3BpeGVsSWR4XSA/PyAwO1xuICAgIGNvbnN0IGJpdCA9IHIgPiAxMjcgPyAxIDogMDtcbiAgICB0aW1lc3RhbXAgPSAodGltZXN0YW1wIDw8IDEpIHwgYml0O1xuICB9XG5cbiAgdGltZXN0YW1wID0gdGltZXN0YW1wID4+PiAwO1xuXG4gIGlmICghTnVtYmVyLmlzRmluaXRlKHRpbWVzdGFtcCkgfHwgdGltZXN0YW1wIDwgMCB8fCB0aW1lc3RhbXAgPiAxZTcpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcmV0dXJuIHRpbWVzdGFtcDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXJ0U3RlZ28oY2RwOiBEZWJ1Z2dlcikge1xuICByZXR1cm4gZXZhbEluKGNkcCwgYF9fcHVwX3N0YXJ0X3N0ZWdvX18oKWApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RvcFN0ZWdvKGNkcDogRGVidWdnZXIpIHtcbiAgcmV0dXJuIGV2YWxJbihjZHAsIGBfX3B1cF9zdG9wX3N0ZWdvX18oKWApO1xufVxuXG4vLyBQYWludHMgdGhlIHN0ZWdvIHJvdyBmb3IgYGV4cGVjdGVkYCBtcyBzeW5jaHJvbm91c2x5OyB0aGUgZGFtYWdlIHJpZGVzIG91dCBvbiB0aGUgbmV4dCBjb21wb3NpdGVkIGZyYW1lLlxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRyYXdTdGVnbyh3YzogV2ViQ29udGVudHMsIGV4cGVjdGVkOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgZXZhbEluKHdjLmRlYnVnZ2VyLCBgX19wdXBfZHJhd19zdGVnb19fKCR7ZXhwZWN0ZWR9KWApO1xufVxuXG4vLyBSZXNvbHZlcyB3aGVuIHRoZSByZW5kZXJlciBjb21taXR0ZWQgdGhlIHN0ZWdvIHJvdzsgYXJtIEJFRk9SRSBkcmF3U3RlZ28gdG8gYXZvaWQgbWlzc2luZyB0aGUgYWNrLlxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdhaXRTdGVnb1RpY2sod2M6IFdlYkNvbnRlbnRzKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHN3YXBwZWQgPSBuZXcgUHJvbWlzZSgocikgPT4gd2MuaXBjLm9uY2UoU1RFR09fVElDS19DSEFOTkVMLCByKSk7XG4gIGF3YWl0IHdpdGhUaW1lb3V0KHN3YXBwZWQsIDVfMDAwLCBcInN0ZWdvIHRpY2tcIik7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzAxLlxuXG5pbXBvcnQgdHlwZSB7IFNpemUgfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IHByb3RvY29sIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBidWlsZFN0ZWdvSFRNTCB9IGZyb20gXCIuL3N0ZWdvXCI7XG5cbmNvbnN0IFBVUF9TQ0hFTUUgPSBcInB1cFwiO1xuY29uc3QgRlJBTUVfU0NIRU1FID0gXCJwdXAtZnJhbWVcIjtcblxuLy8gcmVnaXN0ZXJTY2hlbWVzQXNQcml2aWxlZ2VkIGhvbm9ycyBvbmx5IHRoZSBMQVNUIGNhbGwg4oCUIHJlZ2lzdGVyIGV2ZXJ5IGN1c3RvbSBzY2hlbWUgaW4gdGhpcyBvbmUgbGlzdCBiZWxvdy5cbmNvbnN0IFBSSVZJTEVHRURfUFJJVklMRUdFUyA9IHtcbiAgc3RhbmRhcmQ6IHRydWUsXG4gIHNlY3VyZTogdHJ1ZSxcbiAgYnlwYXNzQ1NQOiB0cnVlLFxuICBhbGxvd1NlcnZpY2VXb3JrZXJzOiB0cnVlLFxuICBzdXBwb3J0RmV0Y2hBUEk6IHRydWUsXG4gIGNvcnNFbmFibGVkOiB0cnVlLFxuICBzdHJlYW06IHRydWUsXG4gIGNvZGVDYWNoZTogdHJ1ZSxcbn0gYXMgY29uc3Q7XG5cbi8vIE11c3QgYmUgY2FsbGVkIHN5bmNocm9ub3VzbHkgYmVmb3JlIGFwcCBpcyByZWFkeS5cbnByb3RvY29sLnJlZ2lzdGVyU2NoZW1lc0FzUHJpdmlsZWdlZChbXG4gIHsgc2NoZW1lOiBQVVBfU0NIRU1FLCBwcml2aWxlZ2VzOiBQUklWSUxFR0VEX1BSSVZJTEVHRVMgfSxcbiAgeyBzY2hlbWU6IEZSQU1FX1NDSEVNRSwgcHJpdmlsZWdlczogUFJJVklMRUdFRF9QUklWSUxFR0VTIH0sXG5dKTtcblxuLy8gTXVzdCBiZSBjYWxsZWQgYWZ0ZXIgYXBwIGlzIHJlYWR5LlxuZXhwb3J0IGZ1bmN0aW9uIHNldHVwUHVwUHJvdG9jb2woKTogdm9pZCB7XG4gIHByb3RvY29sLmhhbmRsZShQVVBfU0NIRU1FLCAocmVxKSA9PiB7XG4gICAgY29uc3QgdXJsID0gbmV3IFVSTChyZXEudXJsKTtcbiAgICBjb25zdCBzcmMgPSB1cmwuc2VhcmNoUGFyYW1zLmdldChcInNyY1wiKSA/PyBcIlwiO1xuICAgIGNvbnN0IHdpZHRoID0gcGFyc2VJbnQodXJsLnNlYXJjaFBhcmFtcy5nZXQoXCJ3XCIpID8/IFwiMFwiLCAxMCk7XG4gICAgY29uc3QgaGVpZ2h0ID0gcGFyc2VJbnQodXJsLnNlYXJjaFBhcmFtcy5nZXQoXCJoXCIpID8/IFwiMFwiLCAxMCk7XG4gICAgY29uc3QgaHRtbCA9IGJ1aWxkU3RlZ29IVE1MKHNyYywgeyB3aWR0aCwgaGVpZ2h0IH0pO1xuICAgIHJldHVybiBuZXcgUmVzcG9uc2UoaHRtbCwgeyBoZWFkZXJzOiB7IFwiY29udGVudC10eXBlXCI6IFwidGV4dC9odG1sXCIgfSB9KTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTdGVnb1VSTChzcmM6IHN0cmluZywgc2l6ZTogU2l6ZSk6IHN0cmluZyB7XG4gIGNvbnN0IHVybCA9IG5ldyBVUkwoYCR7UFVQX1NDSEVNRX06Ly9zdGVnb2ApO1xuICB1cmwuc2VhcmNoUGFyYW1zLnNldChcInNyY1wiLCBzcmMucmVwbGFjZShcImh0dHA6Ly9cIiwgXCJodHRwczovL1wiKSk7XG4gIHVybC5zZWFyY2hQYXJhbXMuc2V0KFwid1wiLCBTdHJpbmcoc2l6ZS53aWR0aCkpO1xuICB1cmwuc2VhcmNoUGFyYW1zLnNldChcImhcIiwgU3RyaW5nKHNpemUuaGVpZ2h0KSk7XG4gIHJldHVybiB1cmwudG9TdHJpbmcoKTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDcvMDMuXG5cbmNvbnN0IEdSSUQgPSAzMjsgLy8gcmVzb2x1dGlvbi1pbmRlcGVuZGVudCAzMsOXMzIgc2FtcGxlIGxhdHRpY2VcbmNvbnN0IEJMQU5LX1JBTkdFID0gODsgLy8gbWF4IHBlci1jaGFubmVsIHNwYXRpYWwgc3ByZWFkICgwLTI1NSkgdG8gdHJlYXQgYSBmcmFtZSBhcyBjb250ZW50bGVzc1xuZXhwb3J0IGNvbnN0IEJMQU5LX1dBUk5fUkFUSU8gPSAwLjU7IC8vIGJsYW5rLWZyYW1lIGZyYWN0aW9uIGFib3ZlIHRoaXMgd2FybnMgYXQgcmVuZGVyIGVuZFxuXG4vLyBCbGFuayA9IG5lYXItdW5pZm9ybTogcGVyLWNoYW5uZWwgc3BhdGlhbCByYW5nZSBiZWxvdyB0aHJlc2hvbGQgPSBub3RoaW5nIHJlbmRlcmVkICh3aGl0ZS9ibGFjay9hbnkgc29saWQgc2NyZWVuKS5cbmV4cG9ydCBmdW5jdGlvbiBpc0JsYW5rRnJhbWUoYmdyYTogQnVmZmVyLCB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcik6IGJvb2xlYW4ge1xuICBjb25zdCBzdGVwWCA9IE1hdGgubWF4KDEsIE1hdGguZmxvb3Iod2lkdGggLyBHUklEKSk7XG4gIGNvbnN0IHN0ZXBZID0gTWF0aC5tYXgoMSwgTWF0aC5mbG9vcihoZWlnaHQgLyBHUklEKSk7XG4gIGxldCByTWluID0gMjU1O1xuICBsZXQgck1heCA9IDA7XG4gIGxldCBnTWluID0gMjU1O1xuICBsZXQgZ01heCA9IDA7XG4gIGxldCBiTWluID0gMjU1O1xuICBsZXQgYk1heCA9IDA7XG4gIGZvciAobGV0IHkgPSAwOyB5IDwgaGVpZ2h0OyB5ICs9IHN0ZXBZKSB7XG4gICAgZm9yIChsZXQgeCA9IDA7IHggPCB3aWR0aDsgeCArPSBzdGVwWCkge1xuICAgICAgY29uc3QgaSA9ICh5ICogd2lkdGggKyB4KSAqIDQ7XG4gICAgICBjb25zdCBiID0gYmdyYS5yZWFkVUludDgoaSk7XG4gICAgICBjb25zdCBnID0gYmdyYS5yZWFkVUludDgoaSArIDEpO1xuICAgICAgY29uc3QgciA9IGJncmEucmVhZFVJbnQ4KGkgKyAyKTtcbiAgICAgIHJNaW4gPSBNYXRoLm1pbihyTWluLCByKTtcbiAgICAgIHJNYXggPSBNYXRoLm1heChyTWF4LCByKTtcbiAgICAgIGdNaW4gPSBNYXRoLm1pbihnTWluLCBnKTtcbiAgICAgIGdNYXggPSBNYXRoLm1heChnTWF4LCBnKTtcbiAgICAgIGJNaW4gPSBNYXRoLm1pbihiTWluLCBiKTtcbiAgICAgIGJNYXggPSBNYXRoLm1heChiTWF4LCBiKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIE1hdGgubWF4KHJNYXggLSByTWluLCBnTWF4IC0gZ01pbiwgYk1heCAtIGJNaW4pIDw9IEJMQU5LX1JBTkdFO1xufVxuXG5leHBvcnQgY2xhc3MgQmxhbmtGcmFtZVN0YXRzIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfd2lkdGg6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfaGVpZ2h0OiBudW1iZXI7XG4gIHByaXZhdGUgX3RvdGFsID0gMDtcbiAgcHJpdmF0ZSBfYmxhbmsgPSAwO1xuXG4gIGNvbnN0cnVjdG9yKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKSB7XG4gICAgdGhpcy5fd2lkdGggPSB3aWR0aDtcbiAgICB0aGlzLl9oZWlnaHQgPSBoZWlnaHQ7XG4gIH1cblxuICBzYW1wbGUoZnJhbWU6IEJ1ZmZlcik6IHZvaWQge1xuICAgIHRoaXMuX3RvdGFsKys7XG4gICAgaWYgKGlzQmxhbmtGcmFtZShmcmFtZSwgdGhpcy5fd2lkdGgsIHRoaXMuX2hlaWdodCkpIHtcbiAgICAgIHRoaXMuX2JsYW5rKys7XG4gICAgfVxuICB9XG5cbiAgLy8gRnJhY3Rpb24gb2Ygd3JpdHRlbiBmcmFtZXMgdGhhdCB3ZXJlIGNvbnRlbnRsZXNzICgwID0gYWxsIGhhZCBjb250ZW50LCAxID0gYWxsIGJsYW5rKS5cbiAgZmluYWxpemUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fdG90YWwgPiAwID8gdGhpcy5fYmxhbmsgLyB0aGlzLl90b3RhbCA6IDA7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDEvMzAuXG5cbmludGVyZmFjZSBRdWV1ZUVudHJ5IHtcbiAgcnVuOiBWb2lkRnVuY3Rpb247XG4gIHJlamVjdDogKHJlYXNvbjogdW5rbm93bikgPT4gdm9pZDtcbiAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG59XG5cbmV4cG9ydCBjbGFzcyBDb25jdXJyZW5jeUxpbWl0ZXIge1xuICBwcml2YXRlIF9hY3RpdmUgPSAwO1xuICBwcml2YXRlIF9xdWV1ZTogUXVldWVFbnRyeVtdID0gW107XG4gIHByaXZhdGUgX3NpZ25hbHMgPSBuZXcgV2Vha1NldDxBYm9ydFNpZ25hbD4oKTtcbiAgcHJpdmF0ZSBfcmVzb2x2ZT86IFZvaWRGdW5jdGlvbjtcblxuICBjb25zdHJ1Y3RvcihyZWFkb25seSBtYXhDb25jdXJyZW5jeTogbnVtYmVyKSB7fVxuXG4gIGdldCBhY3RpdmUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fYWN0aXZlO1xuICB9XG5cbiAgZ2V0IHBlbmRpbmcoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fcXVldWUubGVuZ3RoO1xuICB9XG5cbiAgZ2V0IHN0YXRzKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBhY3RpdmU6ICR7dGhpcy5hY3RpdmV9LCBwZW5kaW5nOiAke3RoaXMucGVuZGluZ31gO1xuICB9XG5cbiAgYXN5bmMgc2NoZWR1bGU8VD4oZm46ICgpID0+IFByb21pc2U8VD4sIHNpZ25hbD86IEFib3J0U2lnbmFsKTogUHJvbWlzZTxUPiB7XG4gICAgc2lnbmFsPy50aHJvd0lmQWJvcnRlZCgpO1xuXG4gICAgaWYgKHNpZ25hbCAmJiAhdGhpcy5fc2lnbmFscy5oYXMoc2lnbmFsKSkge1xuICAgICAgdGhpcy5fc2lnbmFscy5hZGQoc2lnbmFsKTtcbiAgICAgIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgKCkgPT4gdGhpcy5mbHVzaChzaWduYWwpLCB7IG9uY2U6IHRydWUgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPFQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMuX3F1ZXVlLnB1c2goe1xuICAgICAgICBydW46ICgpID0+IHtcbiAgICAgICAgICBpZiAoc2lnbmFsPy5hYm9ydGVkKSB7XG4gICAgICAgICAgICByZWplY3Qoc2lnbmFsLnJlYXNvbik7XG4gICAgICAgICAgICB0aGlzLm5leHQoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5fYWN0aXZlKys7XG4gICAgICAgICAgZm4oKVxuICAgICAgICAgICAgLnRoZW4oKHYpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5fYWN0aXZlLS07XG4gICAgICAgICAgICAgIHJlc29sdmUodik7XG4gICAgICAgICAgICAgIHRoaXMubmV4dCgpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLl9hY3RpdmUtLTtcbiAgICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgICAgICB0aGlzLm5leHQoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICByZWplY3QsXG4gICAgICAgIHNpZ25hbCxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5uZXh0KCk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBkcmFpbigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fYWN0aXZlID09PSAwICYmIHRoaXMucGVuZGluZyA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHIpID0+ICh0aGlzLl9yZXNvbHZlID0gcikpO1xuICB9XG5cbiAgcHJpdmF0ZSBmbHVzaChzaWduYWw6IEFib3J0U2lnbmFsKSB7XG4gICAgY29uc3Qga2VlcDogUXVldWVFbnRyeVtdID0gW107XG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiB0aGlzLl9xdWV1ZSkge1xuICAgICAgaWYgKGVudHJ5LnNpZ25hbCA9PT0gc2lnbmFsKSB7XG4gICAgICAgIGVudHJ5LnJlamVjdChzaWduYWwucmVhc29uKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGtlZXAucHVzaChlbnRyeSk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuX3F1ZXVlID0ga2VlcDtcbiAgICB0aGlzLm5leHQoKTtcbiAgfVxuXG4gIHByaXZhdGUgbmV4dCgpIHtcbiAgICBpZiAodGhpcy5fYWN0aXZlID09PSAwICYmIHRoaXMucGVuZGluZyA9PT0gMCkge1xuICAgICAgdGhpcy5fcmVzb2x2ZT8uKCk7XG4gICAgICB0aGlzLl9yZXNvbHZlID0gdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5fYWN0aXZlIDwgdGhpcy5tYXhDb25jdXJyZW5jeSkge1xuICAgICAgdGhpcy5fcXVldWUuc2hpZnQoKT8ucnVuKCk7XG4gICAgfVxuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzEyLlxuXG5pbXBvcnQge1xuICB0eXBlIENvZGVjLFxuICBDb2RlY0NvbnRleHQsXG4gIEZGbXBlZ0Vycm9yLFxuICBGcmFtZSxcbiAgdHlwZSBIYXJkd2FyZUZyYW1lc0NvbnRleHQsXG4gIFBhY2tldCxcbiAgUmF0aW9uYWwsXG4gIHR5cGUgU3RyZWFtLFxufSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHtcbiAgQVZfQ09ERUNfRkxBR19HTE9CQUxfSEVBREVSLFxuICB0eXBlIEFWQ29sb3JSYW5nZSxcbiAgQVZFUlJPUl9FQUdBSU4sXG4gIEFWRVJST1JfRU9GLFxuICB0eXBlIEFWUGl4ZWxGb3JtYXQsXG4gIHR5cGUgRkZWaWRlb0VuY29kZXIsXG59IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuaW1wb3J0IHR5cGUgeyBGb3JtYXRNdXhlciB9IGZyb20gXCIuL211eGVyXCI7XG5cbi8vIG5vZGUtYXYgNS4yLjMgY29uc3RhbnQgaXMgd3Jvbmc7IGZmbXBlZyByZWdpc3RlcnMgd2l0aCBkYXNoLlxuZXhwb3J0IGNvbnN0IEZGX0VOQ09ERVJfTElCVlBYX1ZQOSA9IFwibGlidnB4LXZwOVwiIGFzIEZGVmlkZW9FbmNvZGVyO1xuXG5leHBvcnQgaW50ZXJmYWNlIFZpZGVvQ3R4T3B0aW9ucyB7XG4gIGNvZGVjOiBDb2RlYztcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIGZwczogbnVtYmVyO1xuICBiaXRyYXRlOiBudW1iZXI7XG4gIHBpeGVsRm9ybWF0OiBBVlBpeGVsRm9ybWF0O1xuICBjb2RlY1RhZz86IHN0cmluZztcbiAgY29sb3JSYW5nZT86IEFWQ29sb3JSYW5nZTtcbiAgb3B0aW9ucz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIGh3RnJhbWVzQ3R4PzogSGFyZHdhcmVGcmFtZXNDb250ZXh0O1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gb3BlblZpZGVvQ3R4KG9wdHM6IFZpZGVvQ3R4T3B0aW9ucywgbGFiZWw6IHN0cmluZyk6IFByb21pc2U8Q29kZWNDb250ZXh0PiB7XG4gIGNvbnN0IGN0eCA9IG5ldyBDb2RlY0NvbnRleHQoKTtcbiAgY3R4LmFsbG9jQ29udGV4dDMob3B0cy5jb2RlYyk7XG4gIC8vIFBhcnRpYWwtY29uc3RydWN0aW9uIHNhZmV0eTogZnJlZSBjdHggaWYgYW55IHNldHRlci9vcGVuMiB0aHJvd3MgYmVmb3JlIHdlIHJldHVybiBpdC5cbiAgdXNpbmcgc3RhY2sgPSBuZXcgRGlzcG9zYWJsZVN0YWNrKCk7XG4gIHN0YWNrLnVzZShjdHgpO1xuICBjdHguY29kZWNJZCA9IG9wdHMuY29kZWMuaWQ7XG4gIGN0eC53aWR0aCA9IG9wdHMud2lkdGg7XG4gIGN0eC5oZWlnaHQgPSBvcHRzLmhlaWdodDtcbiAgY3R4LnBpeGVsRm9ybWF0ID0gb3B0cy5waXhlbEZvcm1hdDtcbiAgY3R4LnRpbWVCYXNlID0gbmV3IFJhdGlvbmFsKDEsIG9wdHMuZnBzKTtcbiAgY3R4LmZyYW1lcmF0ZSA9IG5ldyBSYXRpb25hbChvcHRzLmZwcywgMSk7XG4gIGN0eC5nb3BTaXplID0gb3B0cy5mcHMgKiAyO1xuICBjdHguYml0UmF0ZSA9IEJpZ0ludChvcHRzLmJpdHJhdGUpO1xuICBjdHguc2V0RmxhZ3MoQVZfQ09ERUNfRkxBR19HTE9CQUxfSEVBREVSKTtcbiAgaWYgKG9wdHMuY29kZWNUYWcpIHtcbiAgICBjdHguY29kZWNUYWcgPSBvcHRzLmNvZGVjVGFnO1xuICB9XG4gIGlmIChvcHRzLmNvbG9yUmFuZ2UgIT09IHVuZGVmaW5lZCkge1xuICAgIGN0eC5jb2xvclJhbmdlID0gb3B0cy5jb2xvclJhbmdlO1xuICB9XG4gIGlmIChvcHRzLmh3RnJhbWVzQ3R4KSB7XG4gICAgY3R4Lmh3RnJhbWVzQ3R4ID0gb3B0cy5od0ZyYW1lc0N0eDtcbiAgfVxuICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyhvcHRzLm9wdGlvbnMgPz8ge30pKSB7XG4gICAgY3R4LnNldE9wdGlvbihrLCB2KTtcbiAgfVxuICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgY3R4Lm9wZW4yKG9wdHMuY29kZWMsIG51bGwpLCBsYWJlbCk7XG4gIHN0YWNrLm1vdmUoKTtcbiAgcmV0dXJuIGN0eDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ha2VGcmFtZSh3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlciwgcGl4Rm10OiBBVlBpeGVsRm9ybWF0KTogRnJhbWUge1xuICBjb25zdCBmcmFtZSA9IG5ldyBGcmFtZSgpO1xuICBmcmFtZS5hbGxvYygpO1xuICAvLyBQYXJ0aWFsLWNvbnN0cnVjdGlvbiBzYWZldHk6IGZyZWUgZnJhbWUgaWYgZ2V0QnVmZmVyIHRocm93cyBiZWZvcmUgd2UgcmV0dXJuIGl0LlxuICB1c2luZyBzdGFjayA9IG5ldyBEaXNwb3NhYmxlU3RhY2soKTtcbiAgc3RhY2sudXNlKGZyYW1lKTtcbiAgZnJhbWUuZm9ybWF0ID0gcGl4Rm10O1xuICBmcmFtZS53aWR0aCA9IHdpZHRoO1xuICBmcmFtZS5oZWlnaHQgPSBoZWlnaHQ7XG4gIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihmcmFtZS5nZXRCdWZmZXIoMCksIFwiZnJhbWUuZ2V0QnVmZmVyXCIpO1xuICBzdGFjay5tb3ZlKCk7XG4gIHJldHVybiBmcmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ha2VQYWNrZXQoKTogUGFja2V0IHtcbiAgY29uc3QgcGt0ID0gbmV3IFBhY2tldCgpO1xuICBwa3QuYWxsb2MoKTtcbiAgcmV0dXJuIHBrdDtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRyYWluUGFja2V0cyhjdHg6IENvZGVjQ29udGV4dCwgcGt0OiBQYWNrZXQsIHN0cmVhbTogU3RyZWFtLCBtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgd2hpbGUgKHRydWUpIHtcbiAgICBjb25zdCByID0gYXdhaXQgY3R4LnJlY2VpdmVQYWNrZXQocGt0KTtcbiAgICBpZiAociA9PT0gQVZFUlJPUl9FQUdBSU4gfHwgciA9PT0gQVZFUlJPUl9FT0YpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKHIsIFwicmVjZWl2ZVBhY2tldFwiKTtcbiAgICAgIHBrdC5zdHJlYW1JbmRleCA9IHN0cmVhbS5pbmRleDtcbiAgICAgIGlmIChwa3QuZHVyYXRpb24gPT09IDBuKSB7XG4gICAgICAgIHBrdC5kdXJhdGlvbiA9IDFuO1xuICAgICAgfVxuICAgICAgcGt0LnJlc2NhbGVUcyhjdHgudGltZUJhc2UsIHN0cmVhbS50aW1lQmFzZSk7XG4gICAgICBhd2FpdCBtdXhlci53cml0ZVBhY2tldChwa3QpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBwa3QudW5yZWYoKTtcbiAgICB9XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMDMuXG5cbmltcG9ydCB7IG9rIH0gZnJvbSBcIm5vZGU6YXNzZXJ0XCI7XG5pbXBvcnQge1xuICBBVl9QSVhfRk1UX0JHUkEsXG4gIEFWX1BJWF9GTVRfWVVWQTQyMFAsXG4gIHR5cGUgQVZQaXhlbEZvcm1hdCxcbiAgQ29kZWMsXG4gIENvZGVjQ29udGV4dCxcbiAgRkZfREVDT0RFUl9QTkcsXG4gIEZGbXBlZ0Vycm9yLFxuICB0eXBlIEZyYW1lLFxuICB0eXBlIFBhY2tldCxcbiAgU29mdHdhcmVTY2FsZUNvbnRleHQsXG4gIFNXU19CSUxJTkVBUixcbn0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB7IG1ha2VGcmFtZSwgbWFrZVBhY2tldCB9IGZyb20gXCIuL21pc2NcIjtcblxuZXhwb3J0IGNsYXNzIENvZGVjU3RhdGUgaW1wbGVtZW50cyBEaXNwb3NhYmxlIHtcbiAgcmVhZG9ubHkgc3JjOiBGcmFtZTtcbiAgcmVhZG9ubHkgZHN0OiBGcmFtZTtcbiAgcmVhZG9ubHkgcGt0OiBQYWNrZXQ7XG4gIHByaXZhdGUgX3N3cz86IFNvZnR3YXJlU2NhbGVDb250ZXh0O1xuICBwcml2YXRlIF9wbmc/OiBDb2RlYztcblxuICBzdGF0aWMgYXN5bmMgY3JlYXRlKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKSB7XG4gICAgY29uc3QgY29kZWMgPSBDb2RlYy5maW5kRGVjb2RlckJ5TmFtZShGRl9ERUNPREVSX1BORyk7XG4gICAgb2soY29kZWMsIFwicG5nIGRlY29kZXIgdW5hdmFpbGFibGVcIik7XG4gICAgcmV0dXJuIG5ldyBDb2RlY1N0YXRlKHdpZHRoLCBoZWlnaHQsIGNvZGVjKTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3Iod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIsIHBuZzogQ29kZWMpIHtcbiAgICB0aGlzLl9wbmcgPSBwbmc7XG4gICAgdGhpcy5zcmMgPSBtYWtlRnJhbWUod2lkdGgsIGhlaWdodCwgQVZfUElYX0ZNVF9CR1JBKTtcbiAgICB0aGlzLmRzdCA9IG1ha2VGcmFtZSh3aWR0aCwgaGVpZ2h0LCBBVl9QSVhfRk1UX1lVVkE0MjBQKTtcbiAgICB0aGlzLnBrdCA9IG1ha2VQYWNrZXQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBmcmVzaCBQTkcgZGVjb2RlciBjb250ZXh0LlxuICAgKiBUaGUgRkZtcGVnIFBORyBkZWNvZGVyIGFjY3VtdWxhdGVzIEFQTkcgYmxlbmRpbmcgc3RhdGVcbiAgICogYWNyb3NzIGZyYW1lcywgc28gYSBzaGFyZWQgaW5zdGFuY2UgY29ycnVwdHMgb3V0cHV0IHdoZW4gZGVjb2Rpbmcgc3RhbmRhbG9uZSBQTkdzLlxuICAgKi9cbiAgYXN5bmMgcG5nKCk6IFByb21pc2U8Q29kZWNDb250ZXh0PiB7XG4gICAgLy8gUGFydGlhbC1jb25zdHJ1Y3Rpb24gc2FmZXR5OiBmcmVlIHRoZSBjdHggaWYgb3BlbjIgdGhyb3dzOyBtb3ZlKCkgZGlzb3ducyBvbiBzdWNjZXNzLlxuICAgIHVzaW5nIHN0YWNrID0gbmV3IERpc3Bvc2FibGVTdGFjaygpO1xuICAgIGNvbnN0IHBuZyA9IG5ldyBDb2RlY0NvbnRleHQoKTtcbiAgICBwbmcuYWxsb2NDb250ZXh0Myh0aGlzLl9wbmcpO1xuICAgIHN0YWNrLnVzZShwbmcpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCBwbmcub3BlbjIodGhpcy5fcG5nKSwgXCJwbmdEZWNvZGVyLm9wZW4yXCIpO1xuICAgIHN0YWNrLm1vdmUoKTtcbiAgICByZXR1cm4gcG5nO1xuICB9XG5cbiAgYXN5bmMgZGVjb2RlUE5HKHBuZ0RhdGE6IEJ1ZmZlcik6IFByb21pc2U8RnJhbWU+IHtcbiAgICB1c2luZyBwbmcgPSBhd2FpdCB0aGlzLnBuZygpO1xuICAgIHRoaXMucGt0LmRhdGEgPSBwbmdEYXRhO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCBwbmcuc2VuZFBhY2tldCh0aGlzLnBrdCksIFwicG5nRGVjb2Rlci5zZW5kUGFja2V0XCIpO1xuICAgIHRoaXMucGt0LnVucmVmKCk7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IHBuZy5yZWNlaXZlRnJhbWUodGhpcy5zcmMpLCBcInBuZ0RlY29kZXIucmVjZWl2ZUZyYW1lXCIpO1xuICAgIHJldHVybiB0aGlzLnNyYztcbiAgfVxuXG4gIGdldCBzd3MoKSB7XG4gICAgaWYgKCF0aGlzLl9zd3MpIHtcbiAgICAgIGNvbnN0IHN3cyA9IG5ldyBTb2Z0d2FyZVNjYWxlQ29udGV4dCgpO1xuICAgICAgY29uc3QgZm10ID0gdGhpcy5zcmMuZm9ybWF0IGFzIEFWUGl4ZWxGb3JtYXQ7XG4gICAgICBzd3MuZ2V0Q29udGV4dChcbiAgICAgICAgdGhpcy5zcmMud2lkdGgsXG4gICAgICAgIHRoaXMuc3JjLmhlaWdodCxcbiAgICAgICAgZm10LFxuICAgICAgICB0aGlzLnNyYy53aWR0aCxcbiAgICAgICAgdGhpcy5zcmMuaGVpZ2h0LFxuICAgICAgICBBVl9QSVhfRk1UX1lVVkE0MjBQLFxuICAgICAgICBTV1NfQklMSU5FQVIsXG4gICAgICApO1xuICAgICAgdGhpcy5fc3dzID0gc3dzO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fc3dzO1xuICB9XG5cbiAgW1N5bWJvbC5kaXNwb3NlXSgpOiB2b2lkIHtcbiAgICB0aGlzLnNyY1tTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICB0aGlzLmRzdFtTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICB0aGlzLnBrdFtTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICB0aGlzLl9zd3M/LltTeW1ib2wuZGlzcG9zZV0oKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8wMS5cblxuaW1wb3J0IHtcbiAgQ29kZWMsXG4gIENvZGVjQ29udGV4dCxcbiAgRkZtcGVnRXJyb3IsXG4gIEZpbHRlcixcbiAgdHlwZSBGaWx0ZXJDb250ZXh0LFxuICBGaWx0ZXJHcmFwaCxcbiAgRmlsdGVySW5PdXQsXG4gIEZyYW1lLFxuICB0eXBlIFBhY2tldCxcbiAgUmF0aW9uYWwsXG4gIHR5cGUgU3RyZWFtLFxufSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHtcbiAgQVZfQ0hBTk5FTF9MQVlPVVRfU1RFUkVPLFxuICBBVl9DT0RFQ19GTEFHX0dMT0JBTF9IRUFERVIsXG4gIEFWX1NBTVBMRV9GTVRfRkxULFxuICBBVl9TQU1QTEVfRk1UX0ZMVFAsXG4gIEFWRVJST1JfRUFHQUlOLFxuICBBVkVSUk9SX0VPRixcbiAgdHlwZSBGRkF1ZGlvRW5jb2Rlcixcbn0gZnJvbSBcIm5vZGUtYXYvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBkcmFpblBhY2tldHMsIG1ha2VQYWNrZXQgfSBmcm9tIFwiLi9taXNjXCI7XG5pbXBvcnQgdHlwZSB7IEZvcm1hdE11eGVyIH0gZnJvbSBcIi4vbXV4ZXJcIjtcblxuY29uc3QgU0FNUExFX0ZNVF9OQU1FOiBQYXJ0aWFsPFJlY29yZDxudW1iZXIsIHN0cmluZz4+ID0geyBbQVZfU0FNUExFX0ZNVF9GTFRdOiBcImZsdFwiLCBbQVZfU0FNUExFX0ZNVF9GTFRQXTogXCJmbHRwXCIgfTtcblxuZXhwb3J0IGludGVyZmFjZSBBdWRpb0VuY29kZXJPcHRpb25zIHtcbiAgb3V0U2FtcGxlUmF0ZTogbnVtYmVyO1xuICBvdXRTYW1wbGVGbXQ6IHR5cGVvZiBBVl9TQU1QTEVfRk1UX0ZMVCB8IHR5cGVvZiBBVl9TQU1QTEVfRk1UX0ZMVFA7XG4gIGNvZGVjTmFtZTogRkZBdWRpb0VuY29kZXI7XG4gIGdsb2JhbEhlYWRlcjogYm9vbGVhbjtcbiAgYml0cmF0ZTogbnVtYmVyO1xuICBtdXhlcjogRm9ybWF0TXV4ZXI7XG59XG5cbmV4cG9ydCBjbGFzcyBBdWRpb0VuY29kZXIgaW1wbGVtZW50cyBEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSBfY3R4OiBDb2RlY0NvbnRleHQ7XG4gIHByaXZhdGUgX3N0cmVhbTogU3RyZWFtO1xuICBwcml2YXRlIF9wa3Q6IFBhY2tldDtcbiAgcHJpdmF0ZSBfb3V0UmF0ZTogbnVtYmVyO1xuICBwcml2YXRlIF9vdXRGbXQ6IHR5cGVvZiBBVl9TQU1QTEVfRk1UX0ZMVCB8IHR5cGVvZiBBVl9TQU1QTEVfRk1UX0ZMVFA7XG4gIHByaXZhdGUgX2ZyYW1lU2l6ZTogbnVtYmVyO1xuICBwcml2YXRlIF9maWx0ZXJGcmFtZTogRnJhbWU7XG4gIHByaXZhdGUgX2dyYXBoPzogRmlsdGVyR3JhcGg7XG4gIHByaXZhdGUgX2J1ZlNyYz86IEZpbHRlckNvbnRleHQ7XG4gIHByaXZhdGUgX2J1ZlNpbms/OiBGaWx0ZXJDb250ZXh0O1xuICBwcml2YXRlIF9pblJhdGU/OiBudW1iZXI7XG4gIHByaXZhdGUgX3B0cyA9IDBuO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoY3R4OiBDb2RlY0NvbnRleHQsIHN0cmVhbTogU3RyZWFtLCBvdXRGbXQ6IHR5cGVvZiBBVl9TQU1QTEVfRk1UX0ZMVCB8IHR5cGVvZiBBVl9TQU1QTEVfRk1UX0ZMVFApIHtcbiAgICB0aGlzLl9jdHggPSBjdHg7XG4gICAgdGhpcy5fc3RyZWFtID0gc3RyZWFtO1xuICAgIHRoaXMuX291dFJhdGUgPSBjdHguc2FtcGxlUmF0ZTtcbiAgICB0aGlzLl9vdXRGbXQgPSBvdXRGbXQ7XG4gICAgdGhpcy5fZnJhbWVTaXplID0gY3R4LmZyYW1lU2l6ZTtcbiAgICB0aGlzLl9wa3QgPSBtYWtlUGFja2V0KCk7XG4gICAgdGhpcy5fZmlsdGVyRnJhbWUgPSBuZXcgRnJhbWUoKTtcbiAgICB0aGlzLl9maWx0ZXJGcmFtZS5hbGxvYygpO1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIGNyZWF0ZShvcHRzOiBBdWRpb0VuY29kZXJPcHRpb25zKTogUHJvbWlzZTxBdWRpb0VuY29kZXI+IHtcbiAgICBjb25zdCBjb2RlYyA9IENvZGVjLmZpbmRFbmNvZGVyQnlOYW1lKG9wdHMuY29kZWNOYW1lKTtcbiAgICBpZiAoIWNvZGVjKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEF1ZGlvIGVuY29kZXIgbm90IGZvdW5kOiAke29wdHMuY29kZWNOYW1lfWApO1xuICAgIH1cbiAgICAvLyBQYXJ0aWFsLWNvbnN0cnVjdGlvbiBzYWZldHk6IHN0YWNrIGZyZWVzIGN0eCBpZiBhIGxhdGVyIHN0ZXAgdGhyb3dzOyBtb3ZlKCkgZGlzb3ducyBvbiBzdWNjZXNzLlxuICAgIHVzaW5nIHN0YWNrID0gbmV3IERpc3Bvc2FibGVTdGFjaygpO1xuICAgIGNvbnN0IGN0eCA9IG5ldyBDb2RlY0NvbnRleHQoKTtcbiAgICBjdHguYWxsb2NDb250ZXh0Myhjb2RlYyk7XG4gICAgc3RhY2sudXNlKGN0eCk7XG4gICAgY3R4LmNvZGVjSWQgPSBjb2RlYy5pZDtcbiAgICBjdHguc2FtcGxlRm9ybWF0ID0gb3B0cy5vdXRTYW1wbGVGbXQ7XG4gICAgY3R4LnNhbXBsZVJhdGUgPSBvcHRzLm91dFNhbXBsZVJhdGU7XG4gICAgY3R4LmNoYW5uZWxMYXlvdXQgPSBBVl9DSEFOTkVMX0xBWU9VVF9TVEVSRU87XG4gICAgY3R4LnRpbWVCYXNlID0gbmV3IFJhdGlvbmFsKDEsIG9wdHMub3V0U2FtcGxlUmF0ZSk7XG4gICAgY3R4LmJpdFJhdGUgPSBCaWdJbnQob3B0cy5iaXRyYXRlKTtcbiAgICBpZiAob3B0cy5nbG9iYWxIZWFkZXIpIHtcbiAgICAgIGN0eC5zZXRGbGFncyhBVl9DT0RFQ19GTEFHX0dMT0JBTF9IRUFERVIpO1xuICAgIH1cbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgY3R4Lm9wZW4yKGNvZGVjLCBudWxsKSwgXCJhdWRpb0N0eC5vcGVuMlwiKTtcbiAgICBjb25zdCBzdHJlYW0gPSBvcHRzLm11eGVyLmFkZFN0cmVhbShjdHgpO1xuICAgIHN0YWNrLm1vdmUoKTtcbiAgICByZXR1cm4gbmV3IEF1ZGlvRW5jb2RlcihjdHgsIHN0cmVhbSwgb3B0cy5vdXRTYW1wbGVGbXQpO1xuICB9XG5cbiAgc2V0SW5wdXRSYXRlKGluU2FtcGxlUmF0ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5fZ3JhcGg/LltTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICB0aGlzLl9pblJhdGUgPSBpblNhbXBsZVJhdGU7XG4gICAgLy8gUGFydGlhbC1jb25zdHJ1Y3Rpb24gc2FmZXR5OiBzdGFjayBmcmVlcyB0aGUgZ3JhcGggaWYgZmlsdGVyIHNldHVwIHRocm93czsgbW92ZSgpIGRpc293bnMgb24gc3VjY2Vzcy5cbiAgICB1c2luZyBzdGFjayA9IG5ldyBEaXNwb3NhYmxlU3RhY2soKTtcbiAgICBjb25zdCBncmFwaCA9IG5ldyBGaWx0ZXJHcmFwaCgpO1xuICAgIGdyYXBoLmFsbG9jKCk7XG4gICAgc3RhY2sudXNlKGdyYXBoKTtcbiAgICBjb25zdCBhYnVmZmVyID0gRmlsdGVyLmdldEJ5TmFtZShcImFidWZmZXJcIikhO1xuICAgIGNvbnN0IGJ1ZlNyYyA9IGdyYXBoLmNyZWF0ZUZpbHRlcihcbiAgICAgIGFidWZmZXIsXG4gICAgICBcInNyY1wiLFxuICAgICAgYHNhbXBsZV9yYXRlPSR7aW5TYW1wbGVSYXRlfTpzYW1wbGVfZm10PWZsdDpjaGFubmVsX2xheW91dD1zdGVyZW86dGltZV9iYXNlPTEvJHtpblNhbXBsZVJhdGV9YCxcbiAgICApO1xuICAgIGlmICghYnVmU3JjKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJGYWlsZWQgdG8gY3JlYXRlIGFidWZmZXJcIik7XG4gICAgfVxuICAgIGNvbnN0IGFidWZmZXJzaW5rID0gRmlsdGVyLmdldEJ5TmFtZShcImFidWZmZXJzaW5rXCIpITtcbiAgICBjb25zdCBidWZTaW5rID0gZ3JhcGguY3JlYXRlRmlsdGVyKGFidWZmZXJzaW5rLCBcInNpbmtcIik7XG4gICAgaWYgKCFidWZTaW5rKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJGYWlsZWQgdG8gY3JlYXRlIGFidWZmZXJzaW5rXCIpO1xuICAgIH1cbiAgICBjb25zdCBmbXROYW1lID0gU0FNUExFX0ZNVF9OQU1FW3RoaXMuX291dEZtdF0gPz8gXCJmbHRcIjtcbiAgICBjb25zdCBmaWx0ZXJEZXNjID0gYGFmb3JtYXQ9c2FtcGxlX2ZtdHM9JHtmbXROYW1lfTpzYW1wbGVfcmF0ZXM9JHt0aGlzLl9vdXRSYXRlfTpjaGFubmVsX2xheW91dHM9c3RlcmVvLGFzZXRuc2FtcGxlcz1uPSR7dGhpcy5fZnJhbWVTaXplfTpwPTFgO1xuICAgIGNvbnN0IG91dHB1dHMgPSBGaWx0ZXJJbk91dC5jcmVhdGVMaXN0KFt7IG5hbWU6IFwiaW5cIiwgZmlsdGVyQ3R4OiBidWZTcmMsIHBhZElkeDogMCB9XSk7XG4gICAgY29uc3QgaW5wdXRzID0gRmlsdGVySW5PdXQuY3JlYXRlTGlzdChbeyBuYW1lOiBcIm91dFwiLCBmaWx0ZXJDdHg6IGJ1ZlNpbmssIHBhZElkeDogMCB9XSk7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGdyYXBoLnBhcnNlUHRyKGZpbHRlckRlc2MsIGlucHV0cywgb3V0cHV0cyksIFwiZ3JhcGgucGFyc2VQdHJcIik7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGdyYXBoLmNvbmZpZ1N5bmMoKSwgXCJncmFwaC5jb25maWdcIik7XG4gICAgc3RhY2subW92ZSgpO1xuICAgIHRoaXMuX2dyYXBoID0gZ3JhcGg7XG4gICAgdGhpcy5fYnVmU3JjID0gYnVmU3JjO1xuICAgIHRoaXMuX2J1ZlNpbmsgPSBidWZTaW5rO1xuICB9XG5cbiAgYXN5bmMgZW5jb2RlKHBjbTogQnVmZmVyLCBtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuX2J1ZlNyYyB8fCAhdGhpcy5faW5SYXRlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHNyYyA9IG5ldyBGbG9hdDMyQXJyYXkocGNtLmJ1ZmZlciwgcGNtLmJ5dGVPZmZzZXQsIHBjbS5ieXRlTGVuZ3RoIC8gNCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzcmMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICghTnVtYmVyLmlzRmluaXRlKHNyY1tpXSEpKSB7XG4gICAgICAgIHNyY1tpXSA9IDA7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IG5TYW1wbGVzID0gc3JjLmxlbmd0aCA+PiAxO1xuICAgIHVzaW5nIGZyYW1lID0gRnJhbWUuZnJvbUF1ZGlvQnVmZmVyKEJ1ZmZlci5mcm9tKHNyYy5idWZmZXIsIHNyYy5ieXRlT2Zmc2V0LCBzcmMuYnl0ZUxlbmd0aCksIHtcbiAgICAgIG5iU2FtcGxlczogblNhbXBsZXMsXG4gICAgICBmb3JtYXQ6IEFWX1NBTVBMRV9GTVRfRkxULFxuICAgICAgc2FtcGxlUmF0ZTogdGhpcy5faW5SYXRlLFxuICAgICAgY2hhbm5lbExheW91dDogQVZfQ0hBTk5FTF9MQVlPVVRfU1RFUkVPLFxuICAgICAgcHRzOiB0aGlzLl9wdHMsXG4gICAgICB0aW1lQmFzZTogeyBudW06IDEsIGRlbjogdGhpcy5faW5SYXRlIH0sXG4gICAgfSk7XG4gICAgdGhpcy5fcHRzICs9IEJpZ0ludChuU2FtcGxlcyk7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IHRoaXMuX2J1ZlNyYy5idWZmZXJzcmNBZGRGcmFtZShmcmFtZSksIFwiYnVmZmVyc3JjQWRkRnJhbWVcIik7XG4gICAgYXdhaXQgdGhpcy5kcmFpbihtdXhlcik7XG4gIH1cblxuICBhc3luYyBmbHVzaChtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fYnVmU3JjKSB7XG4gICAgICBhd2FpdCB0aGlzLl9idWZTcmMuYnVmZmVyc3JjQWRkRnJhbWUobnVsbCk7XG4gICAgICBhd2FpdCB0aGlzLmRyYWluKG11eGVyKTtcbiAgICB9XG4gICAgYXdhaXQgdGhpcy5fY3R4LnNlbmRGcmFtZShudWxsKTtcbiAgICBhd2FpdCB0aGlzLmRyYWluQ29kZWMobXV4ZXIpO1xuICB9XG5cbiAgW1N5bWJvbC5kaXNwb3NlXSgpOiB2b2lkIHtcbiAgICB0aGlzLl9wa3QuZnJlZSgpO1xuICAgIHRoaXMuX2ZpbHRlckZyYW1lLmZyZWUoKTtcbiAgICB0aGlzLl9ncmFwaD8uW1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgIHRoaXMuX2N0eC5mcmVlQ29udGV4dCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBkcmFpbihtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgY29uc3QgciA9IGF3YWl0IHRoaXMuX2J1ZlNpbmshLmJ1ZmZlcnNpbmtHZXRGcmFtZSh0aGlzLl9maWx0ZXJGcmFtZSk7XG4gICAgICBpZiAociA9PT0gQVZFUlJPUl9FQUdBSU4gfHwgciA9PT0gQVZFUlJPUl9FT0YpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICB0cnkge1xuICAgICAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IociwgXCJidWZmZXJzaW5rR2V0RnJhbWVcIik7XG4gICAgICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCB0aGlzLl9jdHguc2VuZEZyYW1lKHRoaXMuX2ZpbHRlckZyYW1lKSwgXCJhdWRpb0N0eC5zZW5kRnJhbWVcIik7XG4gICAgICAgIGF3YWl0IHRoaXMuZHJhaW5Db2RlYyhtdXhlcik7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB0aGlzLl9maWx0ZXJGcmFtZS51bnJlZigpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZHJhaW5Db2RlYyhtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gZHJhaW5QYWNrZXRzKHRoaXMuX2N0eCwgdGhpcy5fcGt0LCB0aGlzLl9zdHJlYW0sIG11eGVyKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8xMy5cblxuZXhwb3J0IGZ1bmN0aW9uIHBhY2tCaXRzKGJpdHM6IG51bWJlcltdKTogQnVmZmVyIHtcbiAgY29uc3QgYnVmID0gQnVmZmVyLmFsbG9jKGJpdHMubGVuZ3RoID4+IDMpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGJ1Zi5sZW5ndGg7IGkrKykge1xuICAgIGxldCBieXRlID0gMDtcbiAgICBmb3IgKGxldCBiID0gMDsgYiA8IDg7IGIrKykge1xuICAgICAgYnl0ZSA9IChieXRlIDw8IDEpIHwgYml0c1tpICogOCArIGJdITtcbiAgICB9XG4gICAgYnVmW2ldID0gYnl0ZTtcbiAgfVxuICByZXR1cm4gYnVmO1xufVxuXG5leHBvcnQgY2xhc3MgQml0V3JpdGVyIHtcbiAgYml0czogbnVtYmVyW10gPSBbXTtcbiAgdyh2YWw6IG51bWJlciwgbjogbnVtYmVyKSB7XG4gICAgZm9yIChsZXQgaSA9IG4gLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgdGhpcy5iaXRzLnB1c2goKHZhbCA+PiBpKSAmIDEpO1xuICAgIH1cbiAgfVxuICBmbGFnKHZhbDogYm9vbGVhbiB8IG51bWJlcikge1xuICAgIHRoaXMuYml0cy5wdXNoKHZhbCA/IDEgOiAwKTtcbiAgfVxuICB1ZSh2YWw6IG51bWJlcikge1xuICAgIGNvbnN0IHYgPSB2YWwgKyAxO1xuICAgIGNvbnN0IGxlbiA9IDMyIC0gTWF0aC5jbHozMih2KTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbiAtIDE7IGkrKykge1xuICAgICAgdGhpcy5iaXRzLnB1c2goMCk7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSBsZW4gLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgdGhpcy5iaXRzLnB1c2goKHYgPj4gaSkgJiAxKTtcbiAgICB9XG4gIH1cbiAgYWxpZ24ocGFkOiBudW1iZXIpIHtcbiAgICB3aGlsZSAodGhpcy5iaXRzLmxlbmd0aCAlIDggIT09IDApIHtcbiAgICAgIHRoaXMuYml0cy5wdXNoKHBhZCk7XG4gICAgfVxuICB9XG4gIGNvcHkoc3JjOiBudW1iZXJbXSwgc3RhcnQ6IG51bWJlciwgbGVuOiBudW1iZXIpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICB0aGlzLmJpdHMucHVzaChzcmNbc3RhcnQgKyBpXSEpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQml0UmVhZGVyIHtcbiAgcHJpdmF0ZSBfYml0czogbnVtYmVyW107XG4gIHBvcyA9IDA7XG4gIGNvbnN0cnVjdG9yKGRhdGE6IEJ1ZmZlcikge1xuICAgIHRoaXMuX2JpdHMgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGIgPSA3OyBiID49IDA7IGItLSkge1xuICAgICAgICB0aGlzLl9iaXRzLnB1c2goKGRhdGFbaV0hID4+IGIpICYgMSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGdldCBiaXRzKCkge1xuICAgIHJldHVybiB0aGlzLl9iaXRzO1xuICB9XG4gIHJlYWQobjogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBsZXQgdmFsID0gMDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG47IGkrKykge1xuICAgICAgdmFsID0gKHZhbCA8PCAxKSB8IHRoaXMuX2JpdHNbdGhpcy5wb3MrK10hO1xuICAgIH1cbiAgICByZXR1cm4gdmFsO1xuICB9XG4gIHJlYWRVZSgpOiBudW1iZXIge1xuICAgIGxldCB6ZXJvcyA9IDA7XG4gICAgd2hpbGUgKHRoaXMuX2JpdHNbdGhpcy5wb3NdID09PSAwKSB7XG4gICAgICB6ZXJvcysrO1xuICAgICAgdGhpcy5wb3MrKztcbiAgICB9XG4gICAgdGhpcy5wb3MrKztcbiAgICBsZXQgdmFsID0gMTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHplcm9zOyBpKyspIHtcbiAgICAgIHZhbCA9ICh2YWwgPDwgMSkgfCB0aGlzLl9iaXRzW3RoaXMucG9zKytdITtcbiAgICB9XG4gICAgcmV0dXJuIHZhbCAtIDE7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMTIuXG5cbmNvbnN0IE5BTF9IRUFERVJfU0laRSA9IDI7XG5jb25zdCBBTk5FWF9CX1NUQVJUX0NPREUgPSBCdWZmZXIuZnJvbShbMHgwMCwgMHgwMCwgMHgwMCwgMHgwMV0pO1xuXG5leHBvcnQgeyBBTk5FWF9CX1NUQVJUX0NPREUsIE5BTF9IRUFERVJfU0laRSB9O1xuXG4vLyBIRVZDIE5BTCB1bml0IHR5cGVzIChULVJFQy1ILjI2NSBUYWJsZSA3LTEpXG5leHBvcnQgY29uc3QgTkFMX0JMQV9XX0xQID0gMTY7XG5leHBvcnQgY29uc3QgTkFMX0lEUl9XX1JBREwgPSAxOTtcbmV4cG9ydCBjb25zdCBOQUxfSURSX05fTFAgPSAyMDtcbmV4cG9ydCBjb25zdCBOQUxfUlNWX0lSQVBfVkNMMjMgPSAyMztcbmV4cG9ydCBjb25zdCBOQUxfVlBTID0gMzI7XG5leHBvcnQgY29uc3QgTkFMX1NQUyA9IDMzO1xuZXhwb3J0IGNvbnN0IE5BTF9QUFMgPSAzNDtcbmV4cG9ydCBjb25zdCBOQUxfU0VJX1BSRUZJWCA9IDM5O1xuZXhwb3J0IGNvbnN0IE5BTF9TRUlfU1VGRklYID0gNDA7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmFsVW5pdCB7XG4gIHR5cGU6IG51bWJlcjtcbiAgbGF5ZXJJZDogbnVtYmVyO1xuICBkYXRhOiBCdWZmZXI7XG59XG5cbmZ1bmN0aW9uIHBhcnNlTmFsVHlwZShoZWFkZXIwOiBudW1iZXIsIGhlYWRlcjE6IG51bWJlcik6IHsgdHlwZTogbnVtYmVyOyBsYXllcklkOiBudW1iZXI7IHRlbXBvcmFsSWQ6IG51bWJlciB9IHtcbiAgY29uc3QgdHlwZSA9IChoZWFkZXIwID4+IDEpICYgMHgzZjtcbiAgY29uc3QgbGF5ZXJJZCA9ICgoaGVhZGVyMCAmIDEpIDw8IDUpIHwgKChoZWFkZXIxID4+IDMpICYgMHgxZik7XG4gIGNvbnN0IHRlbXBvcmFsSWQgPSBoZWFkZXIxICYgMHgwNztcbiAgcmV0dXJuIHsgdHlwZSwgbGF5ZXJJZCwgdGVtcG9yYWxJZCB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5jb2RlTmFsSGVhZGVyKHR5cGU6IG51bWJlciwgbGF5ZXJJZDogbnVtYmVyLCB0ZW1wb3JhbElkOiBudW1iZXIpOiBbbnVtYmVyLCBudW1iZXJdIHtcbiAgY29uc3QgYnl0ZTAgPSAoKHR5cGUgJiAweDNmKSA8PCAxKSB8ICgobGF5ZXJJZCA+PiA1KSAmIDEpO1xuICBjb25zdCBieXRlMSA9ICgobGF5ZXJJZCAmIDB4MWYpIDw8IDMpIHwgKHRlbXBvcmFsSWQgJiAweDA3KTtcbiAgcmV0dXJuIFtieXRlMCwgYnl0ZTFdO1xufVxuXG4vKiogU3BsaXQgQW5uZXggQiBiaXRzdHJlYW0gaW50byBOQUwgdW5pdHMuICovXG5leHBvcnQgZnVuY3Rpb24gc3BsaXROYWxVbml0cyhiaXRzdHJlYW06IEJ1ZmZlcik6IE5hbFVuaXRbXSB7XG4gIGNvbnN0IG5hbHM6IE5hbFVuaXRbXSA9IFtdO1xuICBsZXQgaSA9IDA7XG5cbiAgd2hpbGUgKGkgPCBiaXRzdHJlYW0ubGVuZ3RoKSB7XG4gICAgbGV0IHNjTGVuID0gMDtcbiAgICBpZiAoaSArIDMgPCBiaXRzdHJlYW0ubGVuZ3RoICYmIGJpdHN0cmVhbVtpXSA9PT0gMCAmJiBiaXRzdHJlYW1baSArIDFdID09PSAwICYmIGJpdHN0cmVhbVtpICsgMl0gPT09IDEpIHtcbiAgICAgIHNjTGVuID0gMztcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgaSArIDQgPCBiaXRzdHJlYW0ubGVuZ3RoICYmXG4gICAgICBiaXRzdHJlYW1baV0gPT09IDAgJiZcbiAgICAgIGJpdHN0cmVhbVtpICsgMV0gPT09IDAgJiZcbiAgICAgIGJpdHN0cmVhbVtpICsgMl0gPT09IDAgJiZcbiAgICAgIGJpdHN0cmVhbVtpICsgM10gPT09IDFcbiAgICApIHtcbiAgICAgIHNjTGVuID0gNDtcbiAgICB9IGVsc2Uge1xuICAgICAgaSsrO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgbmFsU3RhcnQgPSBpICsgc2NMZW47XG4gICAgaWYgKG5hbFN0YXJ0ICsgTkFMX0hFQURFUl9TSVpFID4gYml0c3RyZWFtLmxlbmd0aCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgbGV0IG5hbEVuZCA9IGJpdHN0cmVhbS5sZW5ndGg7XG4gICAgZm9yIChsZXQgaiA9IG5hbFN0YXJ0ICsgTkFMX0hFQURFUl9TSVpFOyBqIDwgYml0c3RyZWFtLmxlbmd0aCAtIDI7IGorKykge1xuICAgICAgaWYgKFxuICAgICAgICBiaXRzdHJlYW1bal0gPT09IDAgJiZcbiAgICAgICAgYml0c3RyZWFtW2ogKyAxXSA9PT0gMCAmJlxuICAgICAgICAoYml0c3RyZWFtW2ogKyAyXSA9PT0gMSB8fCAoaiArIDMgPCBiaXRzdHJlYW0ubGVuZ3RoICYmIGJpdHN0cmVhbVtqICsgMl0gPT09IDAgJiYgYml0c3RyZWFtW2ogKyAzXSA9PT0gMSkpXG4gICAgICApIHtcbiAgICAgICAgbmFsRW5kID0gajtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgeyB0eXBlLCBsYXllcklkIH0gPSBwYXJzZU5hbFR5cGUoYml0c3RyZWFtW25hbFN0YXJ0XSEsIGJpdHN0cmVhbVtuYWxTdGFydCArIDFdISk7XG4gICAgbmFscy5wdXNoKHsgdHlwZSwgbGF5ZXJJZCwgZGF0YTogYml0c3RyZWFtLnN1YmFycmF5KG5hbFN0YXJ0LCBuYWxFbmQpIH0pO1xuICAgIGkgPSBuYWxFbmQ7XG4gIH1cblxuICByZXR1cm4gbmFscztcbn1cblxuLyoqIFJld3JpdGUgbnVoX2xheWVyX2lkIGluIGEgTkFMIHVuaXQgKHJldHVybnMgY29weSkuICovXG5leHBvcnQgZnVuY3Rpb24gcmV3cml0ZU5hbExheWVySWQobmFsOiBCdWZmZXIsIGxheWVySWQ6IG51bWJlcik6IEJ1ZmZlciB7XG4gIGNvbnN0IG91dCA9IEJ1ZmZlci5mcm9tKG5hbCk7XG4gIGNvbnN0IHsgdHlwZSwgdGVtcG9yYWxJZCB9ID0gcGFyc2VOYWxUeXBlKG91dFswXSEsIG91dFsxXSEpO1xuICBjb25zdCBbYjAsIGIxXSA9IGVuY29kZU5hbEhlYWRlcih0eXBlLCBsYXllcklkLCB0ZW1wb3JhbElkKTtcbiAgb3V0WzBdID0gYjA7XG4gIG91dFsxXSA9IGIxO1xuICByZXR1cm4gb3V0O1xufVxuXG4vKiogUmV3cml0ZSBuYWxfdW5pdF90eXBlIGluIGEgTkFMIHVuaXQgKHJldHVybnMgY29weSkuICovXG5leHBvcnQgZnVuY3Rpb24gcmV3cml0ZU5hbFR5cGUobmFsOiBCdWZmZXIsIG5ld1R5cGU6IG51bWJlcik6IEJ1ZmZlciB7XG4gIGNvbnN0IG91dCA9IEJ1ZmZlci5mcm9tKG5hbCk7XG4gIGNvbnN0IHsgbGF5ZXJJZCwgdGVtcG9yYWxJZCB9ID0gcGFyc2VOYWxUeXBlKG91dFswXSEsIG91dFsxXSEpO1xuICBjb25zdCBbYjAsIGIxXSA9IGVuY29kZU5hbEhlYWRlcihuZXdUeXBlLCBsYXllcklkLCB0ZW1wb3JhbElkKTtcbiAgb3V0WzBdID0gYjA7XG4gIG91dFsxXSA9IGIxO1xuICByZXR1cm4gb3V0O1xufVxuXG4vKiogUmVtb3ZlIGVtdWxhdGlvbiBwcmV2ZW50aW9uIGJ5dGVzICgwMCAwMCAwMyDihpIgMDAgMDApIGZyb20gUkJTUC4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uKGRhdGE6IEJ1ZmZlcik6IEJ1ZmZlciB7XG4gIGNvbnN0IG91dDogbnVtYmVyW10gPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGkgKyAyIDwgZGF0YS5sZW5ndGggJiYgZGF0YVtpXSA9PT0gMCAmJiBkYXRhW2kgKyAxXSA9PT0gMCAmJiBkYXRhW2kgKyAyXSA9PT0gMykge1xuICAgICAgb3V0LnB1c2goMCwgMCk7XG4gICAgICBpICs9IDI7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dC5wdXNoKGRhdGFbaV0hKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIEJ1ZmZlci5mcm9tKG91dCk7XG59XG5cbi8qKiBJbnNlcnQgZW11bGF0aW9uIHByZXZlbnRpb24gYnl0ZXMgKDAwIDAwIDAzKSBmb3IgQW5uZXggQiBjb21wbGlhbmNlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZEVtdWxhdGlvblByZXZlbnRpb24obmFsOiBCdWZmZXIpOiBCdWZmZXIge1xuICBjb25zdCBvdXQ6IG51bWJlcltdID0gW107XG4gIG91dC5wdXNoKG5hbFswXSEsIG5hbFsxXSEpO1xuICBsZXQgemVyb3MgPSAwO1xuICBmb3IgKGxldCBpID0gMjsgaSA8IG5hbC5sZW5ndGg7IGkrKykge1xuICAgIGlmICh6ZXJvcyA9PT0gMiAmJiBuYWxbaV0hIDw9IDMpIHtcbiAgICAgIG91dC5wdXNoKDMpO1xuICAgICAgemVyb3MgPSAwO1xuICAgIH1cbiAgICBpZiAobmFsW2ldID09PSAwKSB7XG4gICAgICB6ZXJvcysrO1xuICAgIH0gZWxzZSB7XG4gICAgICB6ZXJvcyA9IDA7XG4gICAgfVxuICAgIG91dC5wdXNoKG5hbFtpXSEpO1xuICB9XG4gIHJldHVybiBCdWZmZXIuZnJvbShvdXQpO1xufVxuIiwiLy8gQ29uZm9ybSBOVkVOQyBvdXRwdXQgdG8gaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2F2LWZvdW5kYXRpb24vSEVWQy1WaWRlby13aXRoLUFscGhhLUludGVyb3BlcmFiaWxpdHktUHJvZmlsZS5wZGZcblxuaW1wb3J0IHsgQml0UmVhZGVyLCBCaXRXcml0ZXIsIHBhY2tCaXRzIH0gZnJvbSBcIi4vYml0XCI7XG5pbXBvcnQge1xuICBBTk5FWF9CX1NUQVJUX0NPREUsXG4gIGFkZEVtdWxhdGlvblByZXZlbnRpb24sXG4gIE5BTF9CTEFfV19MUCxcbiAgTkFMX1JTVl9JUkFQX1ZDTDIzLFxuICBOQUxfU1BTLFxuICBOQUxfVlBTLFxuICByZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uLFxuICBzcGxpdE5hbFVuaXRzLFxufSBmcm9tIFwiLi9uYWxcIjtcbmltcG9ydCB0eXBlIHsgTnZlbmNIZXZjQ29uZmlnIH0gZnJvbSBcIi4vcGFyc2VyXCI7XG5cbi8vIFBUTCBiaXQgb2Zmc2V0cyB3aXRoaW4gZW11bGF0aW9uLXByZXZlbnRpb24tc3RyaXBwZWQgTkFMIChOQUwgaGVhZGVyIGluY2x1ZGVkKS5cbmNvbnN0IFZQU19QVExfQklUID0gNDg7IC8vIDE2IChOQUwgaGRyKSArIDMyIChWUFMgcHJlZml4KVxuY29uc3QgU1BTX1BUTF9CSVQgPSAyNDsgLy8gMTYgKE5BTCBoZHIpICsgOCAoU1BTIHByZWZpeClcbmNvbnN0IFBUTF9USUVSX0JJVCA9IDI7XG5jb25zdCBQVExfQ09NUEFUMl9CSVQgPSAxMDsgLy8gcHJvZmlsZV9zcGFjZSgyKSArIHRpZXIoMSkgKyBpZGMoNSkgKyBjb21wYXRbMCwxXSgyKVxuY29uc3QgU0xJQ0VfVFlQRV9CID0gMDtcbmNvbnN0IFNMSUNFX1RZUEVfUCA9IDE7XG5cbmZ1bmN0aW9uIHNldEJpdChidWY6IEJ1ZmZlciwgYml0T2Zmc2V0OiBudW1iZXIsIHZhbHVlOiAwIHwgMSk6IHZvaWQge1xuICBjb25zdCBieXRlID0gYml0T2Zmc2V0ID4+IDM7XG4gIGNvbnN0IG1hc2sgPSAxIDw8ICg3IC0gKGJpdE9mZnNldCAmIDcpKTtcbiAgY29uc3QgY3VyID0gYnVmW2J5dGVdID8/IDA7XG4gIGJ1ZltieXRlXSA9IHZhbHVlID8gY3VyIHwgbWFzayA6IGN1ciAmIH5tYXNrO1xufVxuXG5mdW5jdGlvbiBwYXRjaFB0bChuYWxEYXRhOiBCdWZmZXIsIHB0bFN0YXJ0Qml0OiBudW1iZXIpOiBCdWZmZXIge1xuICBjb25zdCByYnNwID0gcmVtb3ZlRW11bGF0aW9uUHJldmVudGlvbihuYWxEYXRhKTtcbiAgc2V0Qml0KHJic3AsIHB0bFN0YXJ0Qml0ICsgUFRMX1RJRVJfQklULCAwKTtcbiAgc2V0Qml0KHJic3AsIHB0bFN0YXJ0Qml0ICsgUFRMX0NPTVBBVDJfQklULCAxKTtcbiAgcmV0dXJuIGFkZEVtdWxhdGlvblByZXZlbnRpb24ocmJzcCk7XG59XG5cbi8qKiBQYXRjaCBldmVyeSBWUFMvU1BTIE5BTCBpbiBhbiBBbm5leCBCIGJpdHN0cmVhbSBzbyBQVEwgbWF0Y2hlcyBBcHBsZS94MjY1LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhdGNoSGV2Y0FscGhhUHRsKGJpdHN0cmVhbTogQnVmZmVyKTogQnVmZmVyIHtcbiAgY29uc3QgbmFscyA9IHNwbGl0TmFsVW5pdHMoYml0c3RyZWFtKTtcbiAgaWYgKG5hbHMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGJpdHN0cmVhbTtcbiAgfVxuICBjb25zdCBjaHVua3M6IEJ1ZmZlcltdID0gW107XG4gIGZvciAoY29uc3QgbmFsIG9mIG5hbHMpIHtcbiAgICBsZXQgZGF0YSA9IG5hbC5kYXRhO1xuICAgIGlmIChuYWwudHlwZSA9PT0gTkFMX1ZQUykge1xuICAgICAgZGF0YSA9IHBhdGNoUHRsKG5hbC5kYXRhLCBWUFNfUFRMX0JJVCk7XG4gICAgfSBlbHNlIGlmIChuYWwudHlwZSA9PT0gTkFMX1NQUykge1xuICAgICAgZGF0YSA9IHBhdGNoUHRsKG5hbC5kYXRhLCBTUFNfUFRMX0JJVCk7XG4gICAgfVxuICAgIGNodW5rcy5wdXNoKEFOTkVYX0JfU1RBUlRfQ09ERSwgZGF0YSk7XG4gIH1cbiAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoY2h1bmtzKTtcbn1cblxuLy8g4pSA4pSA4pSAIHVlKHYpIHJld3JpdGUgaGVscGVycyAoU1BTL1BQUyDigJQgUkJTUCBjYW4gZ3JvdyBmcmVlbHksIG5vIENBQkFDIHRyYWlsaW5nKSDilIDilIBcblxuZnVuY3Rpb24gcmV3cml0ZU9uZVVlKG5hbEluOiBCdWZmZXIsIGJpdE9mZnNldDogbnVtYmVyLCBuZXdWYWw6IG51bWJlcik6IEJ1ZmZlciB7XG4gIGNvbnN0IHJic3AgPSByZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uKG5hbEluKTtcbiAgY29uc3QgYnIgPSBuZXcgQml0UmVhZGVyKHJic3ApO1xuICBjb25zdCBidyA9IG5ldyBCaXRXcml0ZXIoKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBiaXRPZmZzZXQ7IGkrKykge1xuICAgIGJ3LmJpdHMucHVzaChici5yZWFkKDEpKTtcbiAgfVxuICBici5yZWFkVWUoKTtcbiAgYncudWUobmV3VmFsKTtcbiAgd2hpbGUgKGJyLnBvcyA8IGJyLmJpdHMubGVuZ3RoKSB7XG4gICAgYncuYml0cy5wdXNoKGJyLnJlYWQoMSkpO1xuICB9XG4gIHdoaWxlIChidy5iaXRzLmxlbmd0aCAlIDggIT09IDApIHtcbiAgICBidy5iaXRzLnB1c2goMCk7XG4gIH1cbiAgcmV0dXJuIGFkZEVtdWxhdGlvblByZXZlbnRpb24ocGFja0JpdHMoYncuYml0cykpO1xufVxuXG5mdW5jdGlvbiByZXdyaXRlVHdvVWUobmFsSW46IEJ1ZmZlciwgYml0T2Zmc2V0OiBudW1iZXIsIG5ld1ZhbDE6IG51bWJlciwgbmV3VmFsMjogbnVtYmVyKTogQnVmZmVyIHtcbiAgY29uc3QgcmJzcCA9IHJlbW92ZUVtdWxhdGlvblByZXZlbnRpb24obmFsSW4pO1xuICBjb25zdCBiciA9IG5ldyBCaXRSZWFkZXIocmJzcCk7XG4gIGNvbnN0IGJ3ID0gbmV3IEJpdFdyaXRlcigpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGJpdE9mZnNldDsgaSsrKSB7XG4gICAgYncuYml0cy5wdXNoKGJyLnJlYWQoMSkpO1xuICB9XG4gIGJyLnJlYWRVZSgpO1xuICBici5yZWFkVWUoKTtcbiAgYncudWUobmV3VmFsMSk7XG4gIGJ3LnVlKG5ld1ZhbDIpO1xuICB3aGlsZSAoYnIucG9zIDwgYnIuYml0cy5sZW5ndGgpIHtcbiAgICBidy5iaXRzLnB1c2goYnIucmVhZCgxKSk7XG4gIH1cbiAgd2hpbGUgKGJ3LmJpdHMubGVuZ3RoICUgOCAhPT0gMCkge1xuICAgIGJ3LmJpdHMucHVzaCgwKTtcbiAgfVxuICByZXR1cm4gYWRkRW11bGF0aW9uUHJldmVudGlvbihwYWNrQml0cyhidy5iaXRzKSk7XG59XG5cbi8qKiBBbHBoYSBTUFM6IHNwc19zZXFfcGFyYW1ldGVyX3NldF9pZCAwIOKGkiAxLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJld3JpdGVBbHBoYVNwcyhzcHM6IEJ1ZmZlcik6IEJ1ZmZlciB7XG4gIGNvbnN0IFNQU19TRVFfSURfQklUID0gU1BTX1BUTF9CSVQgKyA5NjsgLy8gUFRMIGlzIDk2IGJpdHMgZm9yIG91ciBwcm9maWxlIGNvbmZpZ1xuICByZXR1cm4gcmV3cml0ZU9uZVVlKHNwcywgU1BTX1NFUV9JRF9CSVQsIDEpO1xufVxuXG4vKiogQWxwaGEgUFBTOiBwcHNfcGljX3BhcmFtZXRlcl9zZXRfaWQgMCDihpIgMSwgcHBzX3NlcV9wYXJhbWV0ZXJfc2V0X2lkIDAg4oaSIDEuICovXG5leHBvcnQgZnVuY3Rpb24gcmV3cml0ZUFscGhhUHBzKHBwczogQnVmZmVyKTogQnVmZmVyIHtcbiAgcmV0dXJuIHJld3JpdGVUd29VZShwcHMsIDE2IC8qIGFmdGVyIE5BTCBoZWFkZXIgKi8sIDEsIDEpO1xufVxuXG4vLyDilIDilIDilIAgU2xpY2UgaGVhZGVyIHJld3JpdGUgKG11c3QgcHJlc2VydmUgQ0FCQUMgYnl0ZSBhbGlnbm1lbnQpIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5mdW5jdGlvbiByZWFkU2UoYnI6IEJpdFJlYWRlcik6IG51bWJlciB7XG4gIGNvbnN0IHVlID0gYnIucmVhZFVlKCk7XG4gIHJldHVybiB1ZSAmIDEgPyAodWUgKyAxKSA+PiAxIDogLSh1ZSA+PiAxKTtcbn1cblxuLy8gSW5saW5lIHN0X3JlZl9waWNfc2V0IChzcHNfZmxhZz0wKTsgc3RScHNJZHggPSBudW1fc2hvcnRfdGVybV9yZWZfcGljX3NldHMg4oaSIGludGVyIHByZWRpY3Rpb24gbWF5IHVzZSBwcmV2IHNldC5cbmZ1bmN0aW9uIHBhcnNlSW5saW5lU3RSZWZQaWNTZXQoYnI6IEJpdFJlYWRlciwgbnVtRGVsdGFQb2NzU2V0MDogbnVtYmVyKTogdm9pZCB7XG4gIGNvbnN0IGludGVyRmxhZyA9IGJyLnJlYWQoMSk7IC8vIGludGVyX3JlZl9waWNfc2V0X3ByZWRpY3Rpb25fZmxhZ1xuICBpZiAoaW50ZXJGbGFnKSB7XG4gICAgY29uc3QgZGVsdGFJZHhNaW51czEgPSBici5yZWFkVWUoKTsgLy8gc3RScHNJZHggPT0gbnVtX3Nob3J0X3Rlcm1fcmVmX3BpY19zZXRzIOKGkiBwcmVzZW50XG4gICAgaWYgKGRlbHRhSWR4TWludXMxICE9PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYGFwcGxlX2FscGhhOiB1bmV4cGVjdGVkIGRlbHRhX2lkeF9taW51czE9JHtkZWx0YUlkeE1pbnVzMX1gKTtcbiAgICB9XG4gICAgYnIucmVhZCgxKTsgLy8gZGVsdGFfcnBzX3NpZ25cbiAgICBici5yZWFkVWUoKTsgLy8gYWJzX2RlbHRhX3Jwc19taW51czFcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8PSBudW1EZWx0YVBvY3NTZXQwOyBqKyspIHtcbiAgICAgIGNvbnN0IHVzZWQgPSBici5yZWFkKDEpO1xuICAgICAgaWYgKCF1c2VkKSB7XG4gICAgICAgIGJyLnJlYWQoMSk7IC8vIHVzZV9kZWx0YV9mbGFnXG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGNvbnN0IG51bU5lZyA9IGJyLnJlYWRVZSgpO1xuICAgIGNvbnN0IG51bVBvcyA9IGJyLnJlYWRVZSgpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtTmVnOyBpKyspIHtcbiAgICAgIGJyLnJlYWRVZSgpO1xuICAgICAgYnIucmVhZCgxKTtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1Qb3M7IGkrKykge1xuICAgICAgYnIucmVhZFVlKCk7XG4gICAgICBici5yZWFkKDEpO1xuICAgIH1cbiAgfVxufVxuXG4vKiogUGFyc2Ugc2xpY2Vfc2VnbWVudF9oZWFkZXIgdXAgdG8gYnl0ZV9hbGlnbm1lbnQuIFJldHVybnMgYml0IHBvc2l0aW9uIEIgKGVuZCBvZiBoZWFkZXIgY29udGVudCkuICovXG5mdW5jdGlvbiBwYXJzZUhlYWRlclRvQWxpZ25tZW50KGJyOiBCaXRSZWFkZXIsIG5hbFR5cGU6IG51bWJlciwgY2ZnOiBOdmVuY0hldmNDb25maWcpOiBudW1iZXIge1xuICBici5yZWFkKDE2KTsgLy8gc2tpcCBOQUwgaGVhZGVyXG4gIGlmIChici5yZWFkKDEpICE9PSAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiYXBwbGVfYWxwaGE6IGV4cGVjdGVkIGZpcnN0X3NsaWNlX3NlZ21lbnRfaW5fcGljX2ZsYWc9MVwiKTtcbiAgfVxuICBjb25zdCBpc0lyYXAgPSBuYWxUeXBlID49IE5BTF9CTEFfV19MUCAmJiBuYWxUeXBlIDw9IE5BTF9SU1ZfSVJBUF9WQ0wyMztcbiAgaWYgKGlzSXJhcCkge1xuICAgIGJyLnJlYWQoMSk7IC8vIG5vX291dHB1dF9vZl9wcmlvcl9waWNzX2ZsYWdcbiAgfVxuICBici5yZWFkVWUoKTsgLy8gc2xpY2VfcGljX3BhcmFtZXRlcl9zZXRfaWRcbiAgY29uc3Qgc2xpY2VUeXBlID0gYnIucmVhZFVlKCk7XG4gIGlmICghaXNJcmFwKSB7XG4gICAgYnIucmVhZChjZmcubG9nMk1heFBvY0xzYik7IC8vIHNsaWNlX3BpY19vcmRlcl9jbnRfbHNiXG4gICAgY29uc3Qgc3RSZWZQaWNTZXRTcHNGbGFnID0gYnIucmVhZCgxKTtcbiAgICBpZiAoIXN0UmVmUGljU2V0U3BzRmxhZykge1xuICAgICAgcGFyc2VJbmxpbmVTdFJlZlBpY1NldChiciwgY2ZnLm51bURlbHRhUG9jc1NldDApO1xuICAgIH0gZWxzZSBpZiAoY2ZnLm51bVNob3J0VGVybVJlZlBpY1NldHMgPiAxKSB7XG4gICAgICBici5yZWFkKE1hdGguY2VpbChNYXRoLmxvZzIoY2ZnLm51bVNob3J0VGVybVJlZlBpY1NldHMpKSk7XG4gICAgfVxuICAgIGlmIChjZmcubG9uZ1Rlcm1SZWZQaWNzUHJlc2VudCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYXBwbGVfYWxwaGE6IGxvbmdfdGVybV9yZWZfcGljcyBwYXRoIHVuaW1wbGVtZW50ZWRcIik7XG4gICAgfVxuICAgIGlmIChjZmcuc3BzVGVtcG9yYWxNdnBFbmFibGVkKSB7XG4gICAgICBici5yZWFkKDEpOyAvLyBzbGljZV90ZW1wb3JhbF9tdnBfZW5hYmxlZF9mbGFnXG4gICAgfVxuICB9XG4gIGlmIChjZmcuc2FvRW5hYmxlZCkge1xuICAgIGJyLnJlYWQoMSk7IC8vIHNsaWNlX3Nhb19sdW1hX2ZsYWdcbiAgICBici5yZWFkKDEpOyAvLyBzbGljZV9zYW9fY2hyb21hX2ZsYWdcbiAgfVxuICBpZiAoc2xpY2VUeXBlID09PSBTTElDRV9UWVBFX1AgfHwgc2xpY2VUeXBlID09PSBTTElDRV9UWVBFX0IpIHtcbiAgICBjb25zdCBvdmVycmlkZUZsYWcgPSBici5yZWFkKDEpO1xuICAgIGlmIChvdmVycmlkZUZsYWcpIHtcbiAgICAgIGJyLnJlYWRVZSgpO1xuICAgICAgaWYgKHNsaWNlVHlwZSA9PT0gU0xJQ0VfVFlQRV9CKSB7XG4gICAgICAgIGJyLnJlYWRVZSgpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoc2xpY2VUeXBlID09PSBTTElDRV9UWVBFX0IpIHtcbiAgICAgIGJyLnJlYWQoMSk7IC8vIG12ZF9sMV96ZXJvX2ZsYWdcbiAgICB9XG4gICAgaWYgKGNmZy5jYWJhY0luaXRQcmVzZW50KSB7XG4gICAgICBici5yZWFkKDEpOyAvLyBjYWJhY19pbml0X2ZsYWdcbiAgICB9XG4gICAgYnIucmVhZFVlKCk7IC8vIGZpdmVfbWludXNfbWF4X251bV9tZXJnZV9jYW5kXG4gIH1cbiAgcmVhZFNlKGJyKTsgLy8gc2xpY2VfcXBfZGVsdGFcbiAgaWYgKGNmZy5wcHNIYXNMb29wRmlsdGVyQWNyb3NzU2xpY2VzRmxhZykge1xuICAgIGJyLnJlYWQoMSk7IC8vIHNsaWNlX2xvb3BfZmlsdGVyX2Fjcm9zc19zbGljZXNfZW5hYmxlZF9mbGFnXG4gIH1cbiAgcmV0dXJuIGJyLnBvcztcbn1cblxuLyoqXG4gKiBSZXdyaXRlIGFscGhhIHNsaWNlIGhlYWRlcjogc2xpY2VfcGljX3BhcmFtZXRlcl9zZXRfaWQgMCDihpIgMS5cbiAqIFRoZSArMi1iaXQgc2hpZnQgaXMgYWJzb3JiZWQgYnkgZW1pdHRpbmcgYSBmcmVzaCBieXRlX2FsaWdubWVudCB0aGVuIGFwcGVuZGluZyB0aGVcbiAqIG9yaWdpbmFsIENBQkFDIHNsaWNlX3NlZ21lbnRfZGF0YSBieXRlcyB2ZXJiYXRpbS4gQ0FCQUMgYnl0ZSBib3VuZGFyeSBpcyBwcmVzZXJ2ZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXdyaXRlQWxwaGFTbGljZUhlYWRlcihzbGljZTogQnVmZmVyLCBuYWxUeXBlOiBudW1iZXIsIGNmZzogTnZlbmNIZXZjQ29uZmlnKTogQnVmZmVyIHtcbiAgY29uc3QgcmJzcCA9IHJlbW92ZUVtdWxhdGlvblByZXZlbnRpb24oc2xpY2UpO1xuICBjb25zdCBiciA9IG5ldyBCaXRSZWFkZXIocmJzcCk7XG5cbiAgY29uc3QgcHJvYmUgPSBuZXcgQml0UmVhZGVyKHJic3ApO1xuICBjb25zdCBCID0gcGFyc2VIZWFkZXJUb0FsaWdubWVudChwcm9iZSwgbmFsVHlwZSwgY2ZnKTtcbiAgY29uc3Qgb2xkQWxpZ25CaXRzID0gQiAlIDggPT09IDAgPyA4IDogOCAtIChCICUgOCk7XG4gIGNvbnN0IHNsaWNlRGF0YUJ5dGVPZmZzZXQgPSAoQiArIG9sZEFsaWduQml0cykgLyA4O1xuXG4gIGNvbnN0IGJ3ID0gbmV3IEJpdFdyaXRlcigpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IDE2OyBpKyspIHtcbiAgICBidy5iaXRzLnB1c2goYnIucmVhZCgxKSk7IC8vIE5BTCBoZWFkZXJcbiAgfVxuICBidy5iaXRzLnB1c2goYnIucmVhZCgxKSk7IC8vIGZpcnN0X3NsaWNlX3NlZ21lbnRfaW5fcGljX2ZsYWdcbiAgY29uc3QgaXNJcmFwID0gbmFsVHlwZSA+PSBOQUxfQkxBX1dfTFAgJiYgbmFsVHlwZSA8PSBOQUxfUlNWX0lSQVBfVkNMMjM7XG4gIGlmIChpc0lyYXApIHtcbiAgICBidy5iaXRzLnB1c2goYnIucmVhZCgxKSk7IC8vIG5vX291dHB1dF9vZl9wcmlvcl9waWNzX2ZsYWdcbiAgfVxuXG4gIGJyLnJlYWRVZSgpOyAvLyBkaXNjYXJkIG9sZCBzbGljZV9waWNfcGFyYW1ldGVyX3NldF9pZFxuICBidy51ZSgxKTsgLy8gbmV3IHNsaWNlX3BpY19wYXJhbWV0ZXJfc2V0X2lkXG5cbiAgd2hpbGUgKGJyLnBvcyA8IEIpIHtcbiAgICBidy5iaXRzLnB1c2goYnIucmVhZCgxKSk7IC8vIGNvcHkgcmVzdCBvZiBoZWFkZXIgYml0c1xuICB9XG5cbiAgYncuYml0cy5wdXNoKDEpOyAvLyBieXRlX2FsaWdubWVudDogcmJzcF9hbGlnbm1lbnRfYml0X29uZVxuICB3aGlsZSAoYncuYml0cy5sZW5ndGggJSA4ICE9PSAwKSB7XG4gICAgYncuYml0cy5wdXNoKDApO1xuICB9XG5cbiAgcmV0dXJuIGFkZEVtdWxhdGlvblByZXZlbnRpb24oQnVmZmVyLmNvbmNhdChbcGFja0JpdHMoYncuYml0cyksIHJic3Auc3ViYXJyYXkoc2xpY2VEYXRhQnl0ZU9mZnNldCldKSk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzEzLlxuXG5pbXBvcnQgeyBCaXRSZWFkZXIsIEJpdFdyaXRlciwgcGFja0JpdHMgfSBmcm9tIFwiLi9iaXRcIjtcbmltcG9ydCB7IGFkZEVtdWxhdGlvblByZXZlbnRpb24sIHJlbW92ZUVtdWxhdGlvblByZXZlbnRpb24gfSBmcm9tIFwiLi9uYWxcIjtcblxuaW50ZXJmYWNlIFBhcnNlZFBUTCB7XG4gIHB0bFN0YXJ0OiBudW1iZXI7XG4gIHB0bEVuZDogbnVtYmVyO1xuICBwdGxCaXRzOiBudW1iZXJbXTtcbiAgbWF4U3ViTGF5ZXJzTWludXMxOiBudW1iZXI7XG59XG5cbmZ1bmN0aW9uIGV4dHJhY3RQVEwodnBzRGF0YTogQnVmZmVyKTogUGFyc2VkUFRMIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgYnIgPSBuZXcgQml0UmVhZGVyKHJlbW92ZUVtdWxhdGlvblByZXZlbnRpb24odnBzRGF0YSkpO1xuICBici5yZWFkKDE2KTsgLy8gTkFMIGhlYWRlclxuICBici5yZWFkKDQpOyAvLyB2cHNfaWRcbiAgYnIucmVhZCgyKTsgLy8gYmFzZV9sYXllcl9pbnRlcm5hbCArIGF2YWlsYWJsZVxuICBpZiAoYnIucmVhZCg2KSA+IDApIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkOyAvLyBhbHJlYWR5IG11bHRpLWxheWVyXG4gIH1cbiAgY29uc3QgbWF4U3ViTGF5ZXJzTWludXMxID0gYnIucmVhZCgzKTtcbiAgYnIucmVhZCgxICsgMTYpOyAvLyB0ZW1wb3JhbF9uZXN0aW5nICsgcmVzZXJ2ZWRcblxuICBjb25zdCBwdGxTdGFydCA9IGJyLnBvcztcbiAgYnIucmVhZCg5Nik7IC8vIGdlbmVyYWwgUFRMIChwcm9maWxlX3NwYWNlICsgdGllciArIGlkYyArIGNvbXBhdCArIGNvbnN0cmFpbnRzICsgbGV2ZWwpXG4gIGlmIChtYXhTdWJMYXllcnNNaW51czEgPiAwKSB7XG4gICAgYnIucmVhZChtYXhTdWJMYXllcnNNaW51czEgKiAyICsgKDggLSBtYXhTdWJMYXllcnNNaW51czEpICogMik7XG4gIH1cbiAgcmV0dXJuIHsgcHRsU3RhcnQsIHB0bEVuZDogYnIucG9zLCBwdGxCaXRzOiBici5iaXRzLCBtYXhTdWJMYXllcnNNaW51czEgfTtcbn1cblxuLyoqIFdyaXRlIGJhc2UgVlBTIGZpZWxkcyBmb3IgMi1sYXllciBhbHBoYS4gKi9cbmZ1bmN0aW9uIHdyaXRlQmFzZVZQUyhidzogQml0V3JpdGVyLCBwdGw6IFBhcnNlZFBUTCkge1xuICBidy53KDB4NDAwMSwgMTYpOyAvLyBOQUwgaGVhZGVyXG4gIGJ3LncoMCwgNCk7IC8vIHZwc19pZFxuICBidy5mbGFnKDEpOyAvLyBiYXNlX2xheWVyX2ludGVybmFsXG4gIGJ3LmZsYWcoMSk7IC8vIGJhc2VfbGF5ZXJfYXZhaWxhYmxlXG4gIGJ3LncoMSwgNik7IC8vIG1heF9sYXllcnNfbWludXMxID0gMVxuICBidy53KHB0bC5tYXhTdWJMYXllcnNNaW51czEsIDMpO1xuICAvLyB0ZW1wb3JhbF9uZXN0aW5nOiB0cnVlIHdoZW4gc2luZ2xlIHN1Yi1sYXllciAoYWxsIHJlZnMgbGF5ZXIgMClcbiAgYncuZmxhZyhwdGwubWF4U3ViTGF5ZXJzTWludXMxID09PSAwKTtcbiAgYncudygweGZmZmYsIDE2KTsgLy8gcmVzZXJ2ZWRcbiAgYncuY29weShwdGwucHRsQml0cywgcHRsLnB0bFN0YXJ0LCBwdGwucHRsRW5kIC0gcHRsLnB0bFN0YXJ0KTtcblxuICBidy5mbGFnKDEpOyAvLyBzdWJfbGF5ZXJfb3JkZXJpbmdfaW5mb19wcmVzZW50XG4gIGZvciAobGV0IGkgPSAwOyBpIDw9IHB0bC5tYXhTdWJMYXllcnNNaW51czE7IGkrKykge1xuICAgIGJ3LnVlKDQpOyAvLyBtYXhEZWNQaWNCdWZmZXJpbmcgLSAxXG4gICAgYncudWUoMik7IC8vIG51bVJlb3JkZXJQaWNzXG4gICAgYncudWUoNCk7IC8vIG1heExhdGVuY3lJbmNyZWFzZSArIDFcbiAgfVxuXG4gIGJ3LncoMSwgNik7IC8vIG1heF9udWhfbGF5ZXJfaWQgPSAxXG4gIGJ3LnVlKDEpOyAvLyBudW1fbGF5ZXJfc2V0c19taW51czEgPSAxXG4gIGJ3LmZsYWcoMSk7IC8vIGxheWVyX2lkX2luY2x1ZGVkWzFdWzBdXG4gIGJ3LmZsYWcoMSk7IC8vIGxheWVyX2lkX2luY2x1ZGVkWzFdWzFdXG4gIGJ3LmZsYWcoMCk7IC8vIHRpbWluZ19pbmZvX3ByZXNlbnRcbiAgYncuZmxhZygxKTsgLy8gdnBzX2V4dGVuc2lvbl9mbGFnXG4gIGJ3LmFsaWduKDEpOyAvLyBleHRlbnNpb24gYWxpZ25tZW50IGJpdHMgPSAxXG59XG5cbi8qKiBXcml0ZSBWUFMgZXh0ZW5zaW9uIG1hdGNoaW5nIHgyNjUgNC4xIEVOQUJMRV9BTFBIQS4gKi9cbmZ1bmN0aW9uIHdyaXRlVlBTRXh0ZW5zaW9uKGJ3OiBCaXRXcml0ZXIsIHB0bDogUGFyc2VkUFRMLCB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcikge1xuICAvLyBFeHRlbnNpb24gUFRMOiBsZXZlbF9pZGMgb25seSAocHJvZmlsZVByZXNlbnRGbGFnPTApXG4gIGJ3LmNvcHkocHRsLnB0bEJpdHMsIHB0bC5wdGxFbmQgLSA4LCA4KTtcbiAgaWYgKHB0bC5tYXhTdWJMYXllcnNNaW51czEgPiAwKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwdGwubWF4U3ViTGF5ZXJzTWludXMxOyBpKyspIHtcbiAgICAgIGJ3LncoMCwgMik7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSBwdGwubWF4U3ViTGF5ZXJzTWludXMxOyBpIDwgODsgaSsrKSB7XG4gICAgICBidy53KDAsIDIpO1xuICAgIH1cbiAgfVxuXG4gIGJ3LmZsYWcoMCk7IC8vIHNwbGl0dGluZ19mbGFnXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgMTY7IGkrKykge1xuICAgIGJ3LmZsYWcoaSA9PT0gMiB8fCBpID09PSAzKTsgLy8gc2NhbGFiaWxpdHk6IHNwYXRpYWwgKyBhdXhcbiAgfVxuICBidy53KDAsIDMpOyAvLyBkaW1lbnNpb25faWRfbGVuWzBdID0gMVxuICBidy53KDAsIDMpOyAvLyBkaW1lbnNpb25faWRfbGVuWzFdID0gMVxuICBidy5mbGFnKDEpOyAvLyBudWhfbGF5ZXJfaWRfcHJlc2VudFxuICBidy53KDEsIDYpOyAvLyBsYXllcl9pZF9pbl9udWhbMV0gPSAxXG4gIGJ3LncoMSwgMSk7IC8vIGRpbWVuc2lvbl9pZFsxXVswXSA9IDFcbiAgYncudygxLCAxKTsgLy8gZGltZW5zaW9uX2lkWzFdWzFdID0gQVVYX0FMUEhBXG4gIGJ3LncoMCwgNCk7IC8vIHZpZXdfaWRfbGVuID0gMFxuXG4gIGJ3LmZsYWcoMCk7IC8vIGRpcmVjdF9kZXBlbmRlbmN5X2ZsYWdbMV1bMF1cbiAgYncudWUoMCk7IC8vIG51bV9hZGRfbGF5ZXJfc2V0c1xuICBidy5mbGFnKDApOyAvLyBzdWJfbGF5ZXJzX21heF9taW51czFfcHJlc2VudFxuICBidy5mbGFnKDApOyAvLyBtYXhfdGlkX3JlZl9wcmVzZW50XG4gIGJ3LmZsYWcoMCk7IC8vIGRlZmF1bHRfcmVmX2xheWVyc19hY3RpdmVcblxuICAvLyBGRm1wZWcgbG9vcHMgZnJvbSBpbmRleCAyIHRvIG5iX3B0bC0xLCBzbyBucHRsX20xPTIg4oaSIDEgZW50cnkgYXQgaW5kZXggMlxuICBidy51ZSgyKTsgLy8gdnBzX251bV9wcm9maWxlX3RpZXJfbGV2ZWxfbWludXMxXG4gIGJ3LmZsYWcoMSk7IC8vIHByb2ZpbGVfcHJlc2VudF9mbGFnWzJdXG4gIGJ3LmNvcHkocHRsLnB0bEJpdHMsIHB0bC5wdGxTdGFydCwgcHRsLnB0bEVuZCAtIHB0bC5wdGxTdGFydCk7XG5cbiAgYncudWUoMCk7IC8vIG51bV9hZGRfb2xzc1xuICBidy53KDAsIDIpOyAvLyBkZWZhdWx0X291dHB1dF9sYXllcl9pZGNcbiAgYncudygxLCAyKTsgLy8gcHRsX2lkeFsxXVswXSA9IDEgKGNlaWxfbG9nMigzKSA9IDIgYml0cylcbiAgYncudygyLCAyKTsgLy8gcHRsX2lkeFsxXVsxXSA9IDJcblxuICBidy51ZSgwKTsgLy8gdnBzX251bV9yZXBfZm9ybWF0c19taW51czFcbiAgYncudyh3aWR0aCwgMTYpO1xuICBidy53KGhlaWdodCwgMTYpO1xuICBidy5mbGFnKDEpOyAvLyBjaHJvbWFfYW5kX2JpdF9kZXB0aF92cHNfcHJlc2VudFxuICBidy53KDEsIDIpOyAvLyBjaHJvbWFfZm9ybWF0X2lkYyA9IDQ6MjowXG4gIGJ3LncoMCwgNCk7IC8vIGJpdF9kZXB0aF9sdW1hX21pbnVzOFxuICBidy53KDAsIDQpOyAvLyBiaXRfZGVwdGhfY2hyb21hX21pbnVzOFxuICBidy5mbGFnKDApOyAvLyBjb25mb3JtYW5jZV93aW5kb3dfdnBzX2ZsYWdcblxuICBidy5mbGFnKDEpOyAvLyBtYXhfb25lX2FjdGl2ZV9yZWZfbGF5ZXJcbiAgYncuZmxhZygwKTsgLy8gcG9jX2xzYl9hbGlnbmVkXG4gIGJ3LmZsYWcoMSk7IC8vIHBvY19sc2Jfbm90X3ByZXNlbnRcblxuICAvLyBEUEIgZm9yIE9MUyAxICgyIGxheWVycywgMSBzdWItbGF5ZXIpXG4gIGJ3LmZsYWcoMCk7IC8vIHN1Yl9sYXllcl9mbGFnX2luZm9fcHJlc2VudFxuICBidy51ZSgwKTsgLy8gbWF4X2RlY19waWNfYnVmZmVyaW5nIChsYXllciAwKVxuICBidy51ZSgwKTsgLy8gbWF4X2RlY19waWNfYnVmZmVyaW5nIChsYXllciAxKVxuICBidy51ZSgwKTsgLy8gbWF4X251bV9yZW9yZGVyX3BpY3NcbiAgYncudWUoMCk7IC8vIG1heF9sYXRlbmN5X2luY3JlYXNlXG5cbiAgYncudWUoMCk7IC8vIGRpcmVjdF9kZXBfdHlwZV9sZW5fbWludXMyXG4gIGJ3LmZsYWcoMCk7IC8vIGRlZmF1bHRfZGlyZWN0X2RlcGVuZGVuY3lfZmxhZ1xuICBidy51ZSgwKTsgLy8gbm9uX3Z1aV9leHRlbnNpb25fbGVuZ3RoXG4gIGJ3LmZsYWcoMCk7IC8vIHZwc192dWlfcHJlc2VudFxuICBidy5mbGFnKDApOyAvLyB2cHNfZXh0ZW5zaW9uMl9mbGFnXG59XG5cbi8qKlxuICogQnVpbGQgYSBjb21wbGV0ZSBhbHBoYSBWUFMgZnJvbSBzY3JhdGNoLCB1c2luZyB0aGUgb3JpZ2luYWwgTlZFTkMgVlBTXG4gKiBvbmx5IGFzIGEgc291cmNlIGZvciB0aGUgUFRMIChwcm9maWxlL3RpZXIvbGV2ZWwpIGJ5dGVzLlxuICogTWF0Y2hlcyB4MjY1IDQuMSBFTkFCTEVfQUxQSEEgVlBTIHN0cnVjdHVyZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkQWxwaGFWUFModnBzRGF0YTogQnVmZmVyLCB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcik6IEJ1ZmZlciB7XG4gIGNvbnN0IHB0bCA9IGV4dHJhY3RQVEwodnBzRGF0YSk7XG4gIGlmICghcHRsKSB7XG4gICAgcmV0dXJuIHZwc0RhdGE7XG4gIH1cblxuICBjb25zdCBidyA9IG5ldyBCaXRXcml0ZXIoKTtcbiAgd3JpdGVCYXNlVlBTKGJ3LCBwdGwpO1xuICB3cml0ZVZQU0V4dGVuc2lvbihidywgcHRsLCB3aWR0aCwgaGVpZ2h0KTtcblxuICBidy5iaXRzLnB1c2goMSk7IC8vIFJCU1Agc3RvcCBiaXRcbiAgYncuYWxpZ24oMCk7XG4gIHJldHVybiBhZGRFbXVsYXRpb25QcmV2ZW50aW9uKHBhY2tCaXRzKGJ3LmJpdHMpKTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMTIuXG5cbmltcG9ydCB0eXBlIHsgRnJhbWUgfSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHsgcmV3cml0ZUFscGhhUHBzLCByZXdyaXRlQWxwaGFTbGljZUhlYWRlciwgcmV3cml0ZUFscGhhU3BzIH0gZnJvbSBcIi4vYWxwaGFfZGFyd2luXCI7XG5pbXBvcnQgeyBwYWNrQml0cyB9IGZyb20gXCIuL2JpdFwiO1xuaW1wb3J0IHtcbiAgQU5ORVhfQl9TVEFSVF9DT0RFLFxuICBlbmNvZGVOYWxIZWFkZXIsXG4gIE5BTF9QUFMsXG4gIE5BTF9TRUlfUFJFRklYLFxuICBOQUxfU1BTLFxuICBOQUxfVlBTLFxuICB0eXBlIE5hbFVuaXQsXG4gIHJld3JpdGVOYWxMYXllcklkLFxuICBzcGxpdE5hbFVuaXRzLFxufSBmcm9tIFwiLi9uYWxcIjtcbmltcG9ydCB0eXBlIHsgTnZlbmNIZXZjQ29uZmlnIH0gZnJvbSBcIi4vcGFyc2VyXCI7XG5pbXBvcnQgeyBidWlsZEFscGhhVlBTIH0gZnJvbSBcIi4vdnBzXCI7XG5cbi8vIEJHUkEgYWxwaGEg4oaSIFkgcGxhbmUgb2YgcGFja2VkIFlVVjQyMFAgKGNhbGxlciBwcmUtZmlsbHMgVVY9MTI4KTsgVWludDMyIGZhc3QgcGF0aDogQkdSQSBMRSB1MzIgPj4+IDI0ID0gQSBieXRlLlxuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RBbHBoYVRvWXV2NDIwcEJ1ZmZlcihiZ3JhRnJhbWU6IEZyYW1lLCBidWY6IEJ1ZmZlcik6IHZvaWQge1xuICBjb25zdCBzcmMgPSBiZ3JhRnJhbWUuZGF0YT8uWzBdO1xuICBjb25zdCBzcmNMcyA9IGJncmFGcmFtZS5saW5lc2l6ZT8uWzBdO1xuICBpZiAoIXNyYyB8fCAhc3JjTHMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJleHRyYWN0QWxwaGE6IG1pc3NpbmcgQkdSQSBkYXRhXCIpO1xuICB9XG4gIGNvbnN0IHcgPSBiZ3JhRnJhbWUud2lkdGg7XG4gIGNvbnN0IGggPSBiZ3JhRnJhbWUuaGVpZ2h0O1xuICBjb25zdCB5U2l6ZSA9IHcgKiBoO1xuICBpZiAoc3JjLmJ5dGVPZmZzZXQgJSA0ID09PSAwICYmIHNyY0xzID09PSB3ICogNCkge1xuICAgIGNvbnN0IHNyYzMyID0gbmV3IFVpbnQzMkFycmF5KHNyYy5idWZmZXIsIHNyYy5ieXRlT2Zmc2V0LCB5U2l6ZSk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB5U2l6ZTsgaSsrKSB7XG4gICAgICBidWZbaV0gPSBzcmMzMltpXSEgPj4+IDI0O1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBmb3IgKGxldCB5ID0gMDsgeSA8IGg7IHkrKykge1xuICAgICAgY29uc3Qgcm93QmFzZSA9IHkgKiBzcmNMcyArIDM7XG4gICAgICBjb25zdCBkc3RCYXNlID0geSAqIHc7XG4gICAgICBmb3IgKGxldCB4ID0gMDsgeCA8IHc7IHgrKykge1xuICAgICAgICBidWZbZHN0QmFzZSArIHhdID0gc3JjW3Jvd0Jhc2UgKyB4ICogNF0hO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVuaWZpZWRFeHRyYWRhdGFPcHRpb25zIHtcbiAgYmFzZUV4dHJhZGF0YTogQnVmZmVyO1xuICBhbHBoYUV4dHJhZGF0YTogQnVmZmVyO1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbn1cblxuLy8gQXBwbGUgSEVWQyBBbHBoYSBQcm9maWxlOiBhbHBoYSBTUFMgc3BzX3NlcV9wYXJhbWV0ZXJfc2V0X2lkPTEsIGFscGhhIFBQUyBwaWMrc2VxIGlkPTEuXG5mdW5jdGlvbiByZXdyaXRlQWxwaGFQYXJhbVNldCh0eXBlOiBudW1iZXIsIGRhdGE6IEJ1ZmZlcik6IEJ1ZmZlciB7XG4gIGlmICh0eXBlID09PSBOQUxfU1BTKSB7XG4gICAgcmV0dXJuIHJld3JpdGVBbHBoYVNwcyhkYXRhKTtcbiAgfVxuICBpZiAodHlwZSA9PT0gTkFMX1BQUykge1xuICAgIHJldHVybiByZXdyaXRlQWxwaGFQcHMoZGF0YSk7XG4gIH1cbiAgcmV0dXJuIGRhdGE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFVuaWZpZWRFeHRyYWRhdGEob3B0czogVW5pZmllZEV4dHJhZGF0YU9wdGlvbnMpOiBCdWZmZXIge1xuICBjb25zdCB7IGJhc2VFeHRyYWRhdGEsIGFscGhhRXh0cmFkYXRhIH0gPSBvcHRzO1xuICBjb25zdCBiYXNlTmFscyA9IHNwbGl0TmFsVW5pdHMoYmFzZUV4dHJhZGF0YSk7XG4gIGNvbnN0IGFscGhhTmFscyA9IHNwbGl0TmFsVW5pdHMoYWxwaGFFeHRyYWRhdGEpO1xuXG4gIGNvbnN0IGFscGhhQnlUeXBlID0gbmV3IE1hcDxudW1iZXIsIE5hbFVuaXRbXT4oKTtcbiAgZm9yIChjb25zdCBuYWwgb2YgYWxwaGFOYWxzKSB7XG4gICAgaWYgKG5hbC50eXBlID09PSBOQUxfVlBTKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29uc3QgYXJyID0gYWxwaGFCeVR5cGUuZ2V0KG5hbC50eXBlKSA/PyBbXTtcbiAgICBhcnIucHVzaChuYWwpO1xuICAgIGFscGhhQnlUeXBlLnNldChuYWwudHlwZSwgYXJyKTtcbiAgfVxuXG4gIGNvbnN0IGNodW5rczogQnVmZmVyW10gPSBbXTtcbiAgY29uc3QgZW1pdHRlZCA9IG5ldyBTZXQ8bnVtYmVyPigpO1xuICBmb3IgKGNvbnN0IG5hbCBvZiBiYXNlTmFscykge1xuICAgIGNvbnN0IGRhdGEgPSBuYWwudHlwZSA9PT0gTkFMX1ZQUyA/IGJ1aWxkQWxwaGFWUFMobmFsLmRhdGEsIG9wdHMud2lkdGgsIG9wdHMuaGVpZ2h0KSA6IG5hbC5kYXRhO1xuICAgIGNodW5rcy5wdXNoKEFOTkVYX0JfU1RBUlRfQ09ERSwgZGF0YSk7XG4gICAgaWYgKCFlbWl0dGVkLmhhcyhuYWwudHlwZSkpIHtcbiAgICAgIGVtaXR0ZWQuYWRkKG5hbC50eXBlKTtcbiAgICAgIGZvciAoY29uc3QgYWxwaGFOYWwgb2YgYWxwaGFCeVR5cGUuZ2V0KG5hbC50eXBlKSA/PyBbXSkge1xuICAgICAgICBjb25zdCBhRGF0YSA9IHJld3JpdGVBbHBoYVBhcmFtU2V0KG5hbC50eXBlLCBhbHBoYU5hbC5kYXRhKTtcbiAgICAgICAgY2h1bmtzLnB1c2goQU5ORVhfQl9TVEFSVF9DT0RFLCByZXdyaXRlTmFsTGF5ZXJJZChhRGF0YSwgMSkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNodW5rcy5wdXNoKGJ1aWxkQWxwaGFDaGFubmVsSW5mb1NFSSgpKTtcbiAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoY2h1bmtzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkQWxwaGFDaGFubmVsSW5mb1NFSSgpOiBCdWZmZXIge1xuICBjb25zdCBwYXlsb2FkVHlwZSA9IDE2NTtcbiAgY29uc3QgcGF5bG9hZFNpemUgPSA0O1xuICBjb25zdCBbaDAsIGgxXSA9IGVuY29kZU5hbEhlYWRlcihOQUxfU0VJX1BSRUZJWCwgMCwgMSk7XG5cbiAgY29uc3QgYml0czogbnVtYmVyW10gPSBbXTtcbiAgY29uc3Qgd3JpdGVCaXRzID0gKHZhbDogbnVtYmVyLCBuOiBudW1iZXIpID0+IHtcbiAgICBmb3IgKGxldCBpID0gbiAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBiaXRzLnB1c2goKHZhbCA+PiBpKSAmIDEpO1xuICAgIH1cbiAgfTtcblxuICB3cml0ZUJpdHMoMCwgMSk7IC8vIGFscGhhX2NoYW5uZWxfY2FuY2VsX2ZsYWdcbiAgd3JpdGVCaXRzKDAsIDMpOyAvLyBhbHBoYV9jaGFubmVsX3VzZV9pZGMgKDAgPSB1bnNwZWNpZmllZC9wcmVtdWx0aXBsaWVkOyBtYXRjaGVzIHgyNjUgRU5BQkxFX0FMUEhBKVxuICB3cml0ZUJpdHMoMCwgMyk7IC8vIGFscGhhX2NoYW5uZWxfYml0X2RlcHRoX21pbnVzOFxuICB3cml0ZUJpdHMoMCwgOSk7IC8vIGFscGhhX3RyYW5zcGFyZW50X3ZhbHVlXG4gIHdyaXRlQml0cygyNTUsIDkpOyAvLyBhbHBoYV9vcGFxdWVfdmFsdWVcbiAgd3JpdGVCaXRzKDAsIDEpOyAvLyBhbHBoYV9jaGFubmVsX2luY3JfZmxhZ1xuICB3cml0ZUJpdHMoMCwgMSk7IC8vIGFscGhhX2NoYW5uZWxfY2xpcF9mbGFnXG4gIHdyaXRlQml0cygxLCAxKTsgLy8gYnl0ZSBhbGlnbm1lbnRcbiAgd2hpbGUgKGJpdHMubGVuZ3RoICUgOCAhPT0gMCkge1xuICAgIHdyaXRlQml0cygwLCAxKTtcbiAgfVxuXG4gIHJldHVybiBCdWZmZXIuY29uY2F0KFtcbiAgICBBTk5FWF9CX1NUQVJUX0NPREUsXG4gICAgQnVmZmVyLmZyb20oW2gwLCBoMV0pLFxuICAgIEJ1ZmZlci5mcm9tKFtwYXlsb2FkVHlwZSwgcGF5bG9hZFNpemVdKSxcbiAgICBwYWNrQml0cyhiaXRzKSxcbiAgICBCdWZmZXIuZnJvbShbMHg4MF0pLFxuICBdKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGludGVybGVhdmVBY2Nlc3NVbml0cyhiYXNlTmFsczogTmFsVW5pdFtdLCBhbHBoYU5hbHM6IE5hbFVuaXRbXSwgY2ZnOiBOdmVuY0hldmNDb25maWcpOiBCdWZmZXIge1xuICBjb25zdCBjaHVua3M6IEJ1ZmZlcltdID0gW107XG4gIGZvciAoY29uc3QgbmFsIG9mIGJhc2VOYWxzKSB7XG4gICAgY2h1bmtzLnB1c2goQU5ORVhfQl9TVEFSVF9DT0RFLCBuYWwuZGF0YSk7XG4gIH1cbiAgZm9yIChjb25zdCBuYWwgb2YgYWxwaGFOYWxzKSB7XG4gICAgaWYgKG5hbC50eXBlIDwgTkFMX1ZQUykge1xuICAgICAgY29uc3QgZGF0YSA9IHJld3JpdGVBbHBoYVNsaWNlSGVhZGVyKG5hbC5kYXRhLCBuYWwudHlwZSwgY2ZnKTtcbiAgICAgIGNodW5rcy5wdXNoKEFOTkVYX0JfU1RBUlRfQ09ERSwgcmV3cml0ZU5hbExheWVySWQoZGF0YSwgMSkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gQnVmZmVyLmNvbmNhdChjaHVua3MpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNS8xOC5cblxuaW1wb3J0IHsgdHlwZSBDb2RlY0NvbnRleHQsIEZGbXBlZ0Vycm9yLCB0eXBlIFBhY2tldCwgdHlwZSBTdHJlYW0gfSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHsgQVZFUlJPUl9FQUdBSU4sIEFWRVJST1JfRU9GLCB0eXBlIEFWUGFja2V0RmxhZyB9IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuaW1wb3J0IHR5cGUgeyBGb3JtYXRNdXhlciB9IGZyb20gXCIuLi9tdXhlclwiO1xuaW1wb3J0IHsgaW50ZXJsZWF2ZUFjY2Vzc1VuaXRzIH0gZnJvbSBcIi4vYWxwaGFcIjtcbmltcG9ydCB7IHBhdGNoSGV2Y0FscGhhUHRsIH0gZnJvbSBcIi4vYWxwaGFfZGFyd2luXCI7XG5pbXBvcnQgeyBzcGxpdE5hbFVuaXRzIH0gZnJvbSBcIi4vbmFsXCI7XG5pbXBvcnQgdHlwZSB7IE52ZW5jSGV2Y0NvbmZpZyB9IGZyb20gXCIuL3BhcnNlclwiO1xuXG5pbnRlcmZhY2UgUGVuZGluZ1BhY2tldCB7XG4gIGRhdGE6IEJ1ZmZlcjtcbiAgcHRzOiBiaWdpbnQ7XG4gIGR0czogYmlnaW50O1xuICBkdXJhdGlvbjogYmlnaW50O1xuICBmbGFnczogQVZQYWNrZXRGbGFnO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIER1YWxMYXllck11eE9wdGlvbnMge1xuICBiYXNlQ3R4OiBDb2RlY0NvbnRleHQ7XG4gIGFscGhhQ3R4OiBDb2RlY0NvbnRleHQ7XG4gIGJhc2VQa3Q6IFBhY2tldDtcbiAgYWxwaGFQa3Q6IFBhY2tldDtcbiAgc3RyZWFtOiBTdHJlYW07XG4gIGhldmNDZmc6IE52ZW5jSGV2Y0NvbmZpZztcbn1cblxuLy8gRHJhaW5zIHRoZSBiYXNlICsgYWxwaGEgTlZFTkMgc2Vzc2lvbnMgYW5kIHdyaXRlcyBpbnRlcmxlYXZlZCBIRVZDLWFscGhhIGFjY2VzcyB1bml0cy5cbmV4cG9ydCBjbGFzcyBEdWFsTGF5ZXJNdXgge1xuICBwcml2YXRlIF9zOiBEdWFsTGF5ZXJNdXhPcHRpb25zO1xuICBwcml2YXRlIF9iYXNlUXVldWU6IFBlbmRpbmdQYWNrZXRbXSA9IFtdO1xuICBwcml2YXRlIF9hbHBoYVF1ZXVlOiBQZW5kaW5nUGFja2V0W10gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihzOiBEdWFsTGF5ZXJNdXhPcHRpb25zKSB7XG4gICAgdGhpcy5fcyA9IHM7XG4gIH1cblxuICBhc3luYyBkcmFpbihtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IGJhc2VDdHgsIGFscGhhQ3R4LCBiYXNlUGt0LCBhbHBoYVBrdCB9ID0gdGhpcy5fcztcbiAgICAvLyBEcmFpbiBlYWNoIHNlc3Npb24gZnVsbHkg4oCUIGluZGVwZW5kZW50IE5WRU5DIHNlc3Npb25zIHJ1biBhIGZyYW1lIGFwYXJ0IHRyYW5zaWVudGx5LlxuICAgIHRoaXMuX2Jhc2VRdWV1ZS5wdXNoKC4uLihhd2FpdCB0aGlzLnJlY2VpdmVBbGwoYmFzZUN0eCwgYmFzZVBrdCwgXCJiYXNlXCIpKSk7XG4gICAgdGhpcy5fYWxwaGFRdWV1ZS5wdXNoKC4uLihhd2FpdCB0aGlzLnJlY2VpdmVBbGwoYWxwaGFDdHgsIGFscGhhUGt0LCBcImFscGhhXCIpKSk7XG4gICAgLy8gYmY9MCDihpIgbm8gcmVvcmRlcjsgcXVldWUgaW5kZXggTiBpcyB0aGUgc2FtZSBmcmFtZSBmb3IgYm90aC4gTGVmdG92ZXIgd2FpdHMgZm9yIG5leHQgZHJhaW4uXG4gICAgd2hpbGUgKHRoaXMuX2Jhc2VRdWV1ZS5sZW5ndGggJiYgdGhpcy5fYWxwaGFRdWV1ZS5sZW5ndGgpIHtcbiAgICAgIGF3YWl0IHRoaXMud3JpdGVQYWlyKHRoaXMuX2Jhc2VRdWV1ZS5zaGlmdCgpISwgdGhpcy5fYWxwaGFRdWV1ZS5zaGlmdCgpISwgbXV4ZXIpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFVucGFpcmVkIGxlZnRvdmVycyBhZnRlciBFT0YgPSB0cnVlIGJhc2UvYWxwaGEgZGVzeW5jOyByZXR1cm5zIGEgZGVzY3JpcHRpb24sIGVsc2UgdW5kZWZpbmVkLlxuICBkZXN5bmNBZnRlckVvZigpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGlmICghdGhpcy5fYmFzZVF1ZXVlLmxlbmd0aCAmJiAhdGhpcy5fYWxwaGFRdWV1ZS5sZW5ndGgpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHJldHVybiBgYmFzZT0ke3RoaXMuX2Jhc2VRdWV1ZS5sZW5ndGh9LCBhbHBoYT0ke3RoaXMuX2FscGhhUXVldWUubGVuZ3RofSB1bnBhaXJlZGA7XG4gIH1cblxuICAvLyBFQUdBSU4vRU9GID0gbm9ybWFsIHN0b3A7IGFueSBvdGhlciBuZWdhdGl2ZSBpcyBhIHJlYWwgZmF1bHQsIG5vdCBcImRyYWluZWRcIi5cbiAgcHJpdmF0ZSBhc3luYyByZWNlaXZlQWxsKGN0eDogQ29kZWNDb250ZXh0LCBwa3Q6IFBhY2tldCwgdGFnOiBzdHJpbmcpOiBQcm9taXNlPFBlbmRpbmdQYWNrZXRbXT4ge1xuICAgIGNvbnN0IG91dDogUGVuZGluZ1BhY2tldFtdID0gW107XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGNvbnN0IHJldCA9IGF3YWl0IGN0eC5yZWNlaXZlUGFja2V0KHBrdCk7XG4gICAgICBpZiAocmV0ID49IDApIHtcbiAgICAgICAgb3V0LnB1c2godGhpcy5zbmFwc2hvdChwa3QpKTtcbiAgICAgICAgcGt0LnVucmVmKCk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKHJldCA9PT0gQVZFUlJPUl9FQUdBSU4gfHwgcmV0ID09PSBBVkVSUk9SX0VPRikge1xuICAgICAgICByZXR1cm4gb3V0O1xuICAgICAgfVxuICAgICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKHJldCwgYG52ZW5jLiR7dGFnfS5yZWNlaXZlUGFja2V0YCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzbmFwc2hvdChwa3Q6IFBhY2tldCk6IFBlbmRpbmdQYWNrZXQge1xuICAgIC8vIHBrdC5kYXRhIGlzIG5hdGl2ZSBtZW1vcnkgZnJlZWQgb24gdW5yZWYg4oCUIGNvcHkgYmVmb3JlIHF1ZXVlaW5nLlxuICAgIHJldHVybiB7IGRhdGE6IEJ1ZmZlci5mcm9tKHBrdC5kYXRhISksIHB0czogcGt0LnB0cywgZHRzOiBwa3QuZHRzLCBkdXJhdGlvbjogcGt0LmR1cmF0aW9uLCBmbGFnczogcGt0LmZsYWdzIH07XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHdyaXRlUGFpcihiYXNlOiBQZW5kaW5nUGFja2V0LCBhbHBoYTogUGVuZGluZ1BhY2tldCwgbXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyBiYXNlUGt0LCBiYXNlQ3R4LCBzdHJlYW0sIGhldmNDZmcgfSA9IHRoaXMuX3M7XG4gICAgLy8gUGF0Y2ggaW4tYmFuZCBWUFMvU1BTIFBUTCBiaXRzIGZvciBBcHBsZS1WVEIgY29tcGF0IChlbmNvZGVyIHJlcGVhdHMgaGVhZGVycyBwZXIgSURSKS5cbiAgICBjb25zdCBpbnRlcmxlYXZlZCA9IGludGVybGVhdmVBY2Nlc3NVbml0cyhzcGxpdE5hbFVuaXRzKGJhc2UuZGF0YSksIHNwbGl0TmFsVW5pdHMoYWxwaGEuZGF0YSksIGhldmNDZmcpO1xuICAgIC8vIGRhdGEgc2V0dGVyIHdpcGVzIHB0cy9kdHMvZHVyYXRpb24vZmxhZ3Mg4oCUIHJlc3RvcmU7IGZsYWdzJyBLRVkgYml0IGRyaXZlcyBtb3Ygc3Rzcy5cbiAgICBiYXNlUGt0LmRhdGEgPSBwYXRjaEhldmNBbHBoYVB0bChpbnRlcmxlYXZlZCk7XG4gICAgYmFzZVBrdC5wdHMgPSBiYXNlLnB0cztcbiAgICBiYXNlUGt0LmR0cyA9IGJhc2UuZHRzO1xuICAgIGJhc2VQa3QuZHVyYXRpb24gPSBiYXNlLmR1cmF0aW9uID09PSAwbiA/IDFuIDogYmFzZS5kdXJhdGlvbjtcbiAgICBiYXNlUGt0LmZsYWdzID0gYmFzZS5mbGFncztcbiAgICBiYXNlUGt0LnN0cmVhbUluZGV4ID0gc3RyZWFtLmluZGV4O1xuICAgIGJhc2VQa3QucmVzY2FsZVRzKGJhc2VDdHgudGltZUJhc2UsIHN0cmVhbS50aW1lQmFzZSk7XG4gICAgYXdhaXQgbXV4ZXIud3JpdGVQYWNrZXQoYmFzZVBrdCk7XG4gICAgYmFzZVBrdC51bnJlZigpO1xuICB9XG59XG4iLCIvLyBQYXJzZSBOVkVOQyBTUFMvUFBTIGV4dHJhZGF0YSBhdCBlbmNvZGVyIGluaXQgdG8gZGVyaXZlIHNsaWNlLWhlYWRlciBwYXJzZXIgZmxhZ3M7IHRocm93cyBpZiBOVkVOQyBkZWZhdWx0cyBzaGlmdC5cblxuaW1wb3J0IHsgQml0UmVhZGVyIH0gZnJvbSBcIi4vYml0XCI7XG5pbXBvcnQgeyBOQUxfUFBTLCBOQUxfU1BTLCByZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uLCBzcGxpdE5hbFVuaXRzIH0gZnJvbSBcIi4vbmFsXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTnZlbmNIZXZjQ29uZmlnIHtcbiAgbG9nMk1heFBvY0xzYjogbnVtYmVyO1xuICBudW1TaG9ydFRlcm1SZWZQaWNTZXRzOiBudW1iZXI7XG4gIG51bURlbHRhUG9jc1NldDA6IG51bWJlcjtcbiAgbG9uZ1Rlcm1SZWZQaWNzUHJlc2VudDogYm9vbGVhbjtcbiAgc3BzVGVtcG9yYWxNdnBFbmFibGVkOiBib29sZWFuO1xuICBzYW9FbmFibGVkOiBib29sZWFuO1xuICBjYWJhY0luaXRQcmVzZW50OiBib29sZWFuO1xuICBwcHNIYXNMb29wRmlsdGVyQWNyb3NzU2xpY2VzRmxhZzogYm9vbGVhbjtcbn1cblxuZnVuY3Rpb24gZmFpbChmaWVsZDogc3RyaW5nLCBnb3Q6IHVua25vd24sIGV4cGVjdGVkOiBzdHJpbmcpOiBuZXZlciB7XG4gIHRocm93IG5ldyBFcnJvcihgaGV2Y19hbHBoYTogTlZFTkMgU1BTL1BQUyB1bnN1cHBvcnRlZDogJHtmaWVsZH09JHtnb3R9LCBleHBlY3RlZCAke2V4cGVjdGVkfWApO1xufVxuXG5mdW5jdGlvbiBza2lwUHRsKGJyOiBCaXRSZWFkZXIsIG1heFN1YkxheWVyczogbnVtYmVyKTogdm9pZCB7XG4gIGJyLnJlYWQoMiArIDEgKyA1KTsgLy8gcHJvZmlsZV9zcGFjZSwgdGllciwgcHJvZmlsZV9pZGNcbiAgYnIucmVhZCgzMik7IC8vIHByb2ZpbGVfY29tcGF0aWJpbGl0eV9mbGFnWzAuLjMxXVxuICBici5yZWFkKDQ4KTsgLy8gNCBzb3VyY2UvcGFja2VkIGZsYWdzICsgNDMgY29uc3RyYWludC9yZXNlcnZlZCArIDEgaW5ibGRcbiAgYnIucmVhZCg4KTsgLy8gbGV2ZWxfaWRjXG4gIGNvbnN0IHN1YlByb2ZpbGVQcmVzZW50OiBudW1iZXJbXSA9IFtdO1xuICBjb25zdCBzdWJMZXZlbFByZXNlbnQ6IG51bWJlcltdID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbWF4U3ViTGF5ZXJzOyBpKyspIHtcbiAgICBzdWJQcm9maWxlUHJlc2VudC5wdXNoKGJyLnJlYWQoMSkpO1xuICAgIHN1YkxldmVsUHJlc2VudC5wdXNoKGJyLnJlYWQoMSkpO1xuICB9XG4gIGlmIChtYXhTdWJMYXllcnMgPiAwKSB7XG4gICAgZm9yIChsZXQgaSA9IG1heFN1YkxheWVyczsgaSA8IDg7IGkrKykge1xuICAgICAgYnIucmVhZCgyKTtcbiAgICB9XG4gIH1cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXhTdWJMYXllcnM7IGkrKykge1xuICAgIGlmIChzdWJQcm9maWxlUHJlc2VudFtpXSkge1xuICAgICAgYnIucmVhZCg4ICsgMzIgKyA0OCk7XG4gICAgfVxuICAgIGlmIChzdWJMZXZlbFByZXNlbnRbaV0pIHtcbiAgICAgIGJyLnJlYWQoOCk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlU3BzKHNwc1Jic3A6IEJ1ZmZlcik6IHtcbiAgbG9nMk1heFBvY0xzYjogbnVtYmVyO1xuICBzYW9FbmFibGVkOiBib29sZWFuO1xuICBudW1TaG9ydFRlcm1SZWZQaWNTZXRzOiBudW1iZXI7XG4gIG51bURlbHRhUG9jc1NldDA6IG51bWJlcjtcbiAgbG9uZ1Rlcm1SZWZQaWNzUHJlc2VudDogYm9vbGVhbjtcbiAgc3BzVGVtcG9yYWxNdnBFbmFibGVkOiBib29sZWFuO1xufSB7XG4gIGNvbnN0IGJyID0gbmV3IEJpdFJlYWRlcihzcHNSYnNwKTtcbiAgYnIucmVhZCgxNik7IC8vIE5BTCBoZWFkZXJcbiAgYnIucmVhZCg0KTsgLy8gc3BzX3ZpZGVvX3BhcmFtZXRlcl9zZXRfaWRcbiAgY29uc3QgbWF4U3ViTGF5ZXJzID0gYnIucmVhZCgzKTtcbiAgLy8gYWxwaGFfZGFyd2luLnJld3JpdGVBbHBoYVNwcyArIHZwcy5leHRyYWN0UFRMIGhhcmRjb2RlIDk2LWJpdCBQVEwg4oCUIG9ubHkgdmFsaWQgd2hlbiBzdWJfbGF5ZXJzPTAuXG4gIGlmIChtYXhTdWJMYXllcnMgIT09IDApIHtcbiAgICBmYWlsKFwic3BzX21heF9zdWJfbGF5ZXJzX21pbnVzMVwiLCBtYXhTdWJMYXllcnMsIFwiMFwiKTtcbiAgfVxuICBici5yZWFkKDEpOyAvLyBzcHNfdGVtcG9yYWxfaWRfbmVzdGluZ19mbGFnXG4gIHNraXBQdGwoYnIsIG1heFN1YkxheWVycyk7XG4gIGJyLnJlYWRVZSgpOyAvLyBzcHNfc2VxX3BhcmFtZXRlcl9zZXRfaWRcbiAgY29uc3QgY2hyb21hRm9ybWF0ID0gYnIucmVhZFVlKCk7XG4gIGlmIChjaHJvbWFGb3JtYXQgPT09IDMpIHtcbiAgICBmYWlsKFwiY2hyb21hX2Zvcm1hdF9pZGNcIiwgY2hyb21hRm9ybWF0LCBcIuKJoDNcIik7XG4gIH1cbiAgYnIucmVhZFVlKCk7IC8vIHBpY193aWR0aF9pbl9sdW1hX3NhbXBsZXNcbiAgYnIucmVhZFVlKCk7IC8vIHBpY19oZWlnaHRfaW5fbHVtYV9zYW1wbGVzXG4gIGlmIChici5yZWFkKDEpKSB7XG4gICAgYnIucmVhZFVlKCk7XG4gICAgYnIucmVhZFVlKCk7XG4gICAgYnIucmVhZFVlKCk7XG4gICAgYnIucmVhZFVlKCk7XG4gIH1cbiAgYnIucmVhZFVlKCk7IC8vIGJpdF9kZXB0aF9sdW1hX21pbnVzOFxuICBici5yZWFkVWUoKTsgLy8gYml0X2RlcHRoX2Nocm9tYV9taW51czhcbiAgY29uc3QgbG9nMk1heFBvY0xzYiA9IGJyLnJlYWRVZSgpICsgNDtcbiAgY29uc3Qgc3ViT3JkZXJJbmZvID0gYnIucmVhZCgxKTtcbiAgY29uc3Qgb3JkZXJDb3VudCA9IHN1Yk9yZGVySW5mbyA/IG1heFN1YkxheWVycyArIDEgOiAxO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IG9yZGVyQ291bnQ7IGkrKykge1xuICAgIGJyLnJlYWRVZSgpO1xuICAgIGJyLnJlYWRVZSgpO1xuICAgIGJyLnJlYWRVZSgpO1xuICB9XG4gIGJyLnJlYWRVZSgpO1xuICBici5yZWFkVWUoKTtcbiAgYnIucmVhZFVlKCk7XG4gIGJyLnJlYWRVZSgpO1xuICBici5yZWFkVWUoKTtcbiAgYnIucmVhZFVlKCk7XG4gIGlmIChici5yZWFkKDEpKSB7XG4gICAgZmFpbChcInNjYWxpbmdfbGlzdF9lbmFibGVkX2ZsYWdcIiwgMSwgXCIwXCIpO1xuICB9XG4gIGJyLnJlYWQoMSk7IC8vIGFtcF9lbmFibGVkX2ZsYWdcbiAgY29uc3Qgc2FvRW5hYmxlZCA9IGJyLnJlYWQoMSkgPT09IDE7XG4gIGlmIChici5yZWFkKDEpKSB7XG4gICAgZmFpbChcInBjbV9lbmFibGVkX2ZsYWdcIiwgMSwgXCIwXCIpO1xuICB9XG4gIGNvbnN0IG51bVN0UnBzID0gYnIucmVhZFVlKCk7XG4gIGlmIChudW1TdFJwcyA+IDEpIHtcbiAgICBmYWlsKFwibnVtX3Nob3J0X3Rlcm1fcmVmX3BpY19zZXRzXCIsIG51bVN0UnBzLCBcIuKJpDFcIik7XG4gIH1cbiAgbGV0IG51bURlbHRhUG9jc1NldDAgPSAwO1xuICBpZiAobnVtU3RScHMgPT09IDEpIHtcbiAgICBjb25zdCBudW1OZWcgPSBici5yZWFkVWUoKTtcbiAgICBjb25zdCBudW1Qb3MgPSBici5yZWFkVWUoKTtcbiAgICBudW1EZWx0YVBvY3NTZXQwID0gbnVtTmVnICsgbnVtUG9zO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtTmVnOyBpKyspIHtcbiAgICAgIGJyLnJlYWRVZSgpO1xuICAgICAgYnIucmVhZCgxKTtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1Qb3M7IGkrKykge1xuICAgICAgYnIucmVhZFVlKCk7XG4gICAgICBici5yZWFkKDEpO1xuICAgIH1cbiAgfVxuICBjb25zdCBsb25nVGVybVJlZlBpY3NQcmVzZW50ID0gYnIucmVhZCgxKSA9PT0gMTtcbiAgaWYgKGxvbmdUZXJtUmVmUGljc1ByZXNlbnQpIHtcbiAgICBmYWlsKFwibG9uZ190ZXJtX3JlZl9waWNzX3ByZXNlbnRfZmxhZ1wiLCAxLCBcIjBcIik7XG4gIH1cbiAgY29uc3Qgc3BzVGVtcG9yYWxNdnBFbmFibGVkID0gYnIucmVhZCgxKSA9PT0gMTtcbiAgcmV0dXJuIHtcbiAgICBsb2cyTWF4UG9jTHNiLFxuICAgIHNhb0VuYWJsZWQsXG4gICAgbnVtU2hvcnRUZXJtUmVmUGljU2V0czogbnVtU3RScHMsXG4gICAgbnVtRGVsdGFQb2NzU2V0MCxcbiAgICBsb25nVGVybVJlZlBpY3NQcmVzZW50LFxuICAgIHNwc1RlbXBvcmFsTXZwRW5hYmxlZCxcbiAgfTtcbn1cblxuZnVuY3Rpb24gcGFyc2VQcHMocHBzUmJzcDogQnVmZmVyKTogeyBjYWJhY0luaXRQcmVzZW50OiBib29sZWFuOyBwcHNIYXNMb29wRmlsdGVyQWNyb3NzU2xpY2VzRmxhZzogYm9vbGVhbiB9IHtcbiAgY29uc3QgYnIgPSBuZXcgQml0UmVhZGVyKHBwc1Jic3ApO1xuICBici5yZWFkKDE2KTsgLy8gTkFMIGhlYWRlclxuICBici5yZWFkVWUoKTsgLy8gcHBzX3BpY19wYXJhbWV0ZXJfc2V0X2lkXG4gIGJyLnJlYWRVZSgpOyAvLyBwcHNfc2VxX3BhcmFtZXRlcl9zZXRfaWRcbiAgYnIucmVhZCgxKTsgLy8gZGVwZW5kZW50X3NsaWNlX3NlZ21lbnRzX2VuYWJsZWRfZmxhZ1xuICBici5yZWFkKDEpOyAvLyBvdXRwdXRfZmxhZ19wcmVzZW50X2ZsYWdcbiAgY29uc3QgbnVtRXh0cmFTbGljZUhlYWRlckJpdHMgPSBici5yZWFkKDMpO1xuICBpZiAobnVtRXh0cmFTbGljZUhlYWRlckJpdHMgIT09IDApIHtcbiAgICBmYWlsKFwibnVtX2V4dHJhX3NsaWNlX2hlYWRlcl9iaXRzXCIsIG51bUV4dHJhU2xpY2VIZWFkZXJCaXRzLCBcIjBcIik7XG4gIH1cbiAgYnIucmVhZCgxKTsgLy8gc2lnbl9kYXRhX2hpZGluZ19lbmFibGVkX2ZsYWdcbiAgY29uc3QgY2FiYWNJbml0UHJlc2VudCA9IGJyLnJlYWQoMSkgPT09IDE7XG4gIGJyLnJlYWRVZSgpOyAvLyBudW1fcmVmX2lkeF9sMF9kZWZhdWx0X2FjdGl2ZV9taW51czFcbiAgYnIucmVhZFVlKCk7IC8vIG51bV9yZWZfaWR4X2wxX2RlZmF1bHRfYWN0aXZlX21pbnVzMVxuICBici5yZWFkVWUoKTsgLy8gaW5pdF9xcF9taW51czI2IChzZSwgYnV0IHVlIHBhcnNlciBmaW5lIHRvIGFkdmFuY2UpXG4gIGJyLnJlYWQoMSk7IC8vIGNvbnN0cmFpbmVkX2ludHJhX3ByZWRfZmxhZ1xuICBici5yZWFkKDEpOyAvLyB0cmFuc2Zvcm1fc2tpcF9lbmFibGVkX2ZsYWdcbiAgaWYgKGJyLnJlYWQoMSkpIHtcbiAgICBici5yZWFkVWUoKTsgLy8gY3VfcXBfZGVsdGFfZW5hYmxlZCDihpIgZGlmZl9jdV9xcF9kZWx0YV9kZXB0aFxuICB9XG4gIGJyLnJlYWRVZSgpOyAvLyBwcHNfY2JfcXBfb2Zmc2V0XG4gIGJyLnJlYWRVZSgpOyAvLyBwcHNfY3JfcXBfb2Zmc2V0XG4gIGJyLnJlYWQoMSk7IC8vIHBwc19zbGljZV9jaHJvbWFfcXBfb2Zmc2V0c19wcmVzZW50X2ZsYWdcbiAgYnIucmVhZCgxKTsgLy8gd2VpZ2h0ZWRfcHJlZF9mbGFnXG4gIGJyLnJlYWQoMSk7IC8vIHdlaWdodGVkX2JpcHJlZF9mbGFnXG4gIGJyLnJlYWQoMSk7IC8vIHRyYW5zcXVhbnRfYnlwYXNzX2VuYWJsZWRfZmxhZ1xuICBpZiAoYnIucmVhZCgxKSkge1xuICAgIGZhaWwoXCJ0aWxlc19lbmFibGVkX2ZsYWdcIiwgMSwgXCIwXCIpO1xuICB9XG4gIGJyLnJlYWQoMSk7IC8vIGVudHJvcHlfY29kaW5nX3N5bmNfZW5hYmxlZF9mbGFnXG4gIGNvbnN0IHBwc0xvb3BGaWx0ZXJBY3Jvc3NTbGljZXNFbmFibGVkID0gYnIucmVhZCgxKSA9PT0gMTtcbiAgY29uc3QgZGVibG9ja2luZ0NvbnRyb2xQcmVzZW50ID0gYnIucmVhZCgxKTtcbiAgbGV0IHNsaWNlRGVibG9ja2luZ0Rpc2FibGVkT3ZlcnJpZGUgPSBmYWxzZTtcbiAgaWYgKGRlYmxvY2tpbmdDb250cm9sUHJlc2VudCkge1xuICAgIGJyLnJlYWQoMSk7IC8vIGRlYmxvY2tpbmdfZmlsdGVyX292ZXJyaWRlX2VuYWJsZWRfZmxhZ1xuICAgIHNsaWNlRGVibG9ja2luZ0Rpc2FibGVkT3ZlcnJpZGUgPSBici5yZWFkKDEpID09PSAxOyAvLyBwcHNfZGVibG9ja2luZ19maWx0ZXJfZGlzYWJsZWRfZmxhZ1xuICAgIGlmICghc2xpY2VEZWJsb2NraW5nRGlzYWJsZWRPdmVycmlkZSkge1xuICAgICAgYnIucmVhZFVlKCk7XG4gICAgICBici5yZWFkVWUoKTsgLy8gYmV0YS90YyBvZmZzZXRzIChzZSB2aWEgdWUgYWR2YW5jZSlcbiAgICB9XG4gIH1cbiAgLy8gc2xpY2VfbG9vcF9maWx0ZXJfYWNyb3NzX3NsaWNlc19lbmFibGVkX2ZsYWcgcHJlc2VudCBpZmYgUFBTIGFjcm9zcy1zbGljZXMgZW5hYmxlZCAmJiAhc2xpY2VfZGVibG9ja2luZ19kaXNhYmxlZC5cbiAgY29uc3QgcHBzSGFzTG9vcEZpbHRlckFjcm9zc1NsaWNlc0ZsYWcgPSBwcHNMb29wRmlsdGVyQWNyb3NzU2xpY2VzRW5hYmxlZCAmJiAhc2xpY2VEZWJsb2NraW5nRGlzYWJsZWRPdmVycmlkZTtcbiAgcmV0dXJuIHsgY2FiYWNJbml0UHJlc2VudCwgcHBzSGFzTG9vcEZpbHRlckFjcm9zc1NsaWNlc0ZsYWcgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlTnZlbmNIZXZjQ29uZmlnKGV4dHJhZGF0YTogQnVmZmVyKTogTnZlbmNIZXZjQ29uZmlnIHtcbiAgY29uc3QgbmFscyA9IHNwbGl0TmFsVW5pdHMoZXh0cmFkYXRhKTtcbiAgY29uc3Qgc3BzID0gbmFscy5maW5kKChuKSA9PiBuLnR5cGUgPT09IE5BTF9TUFMpO1xuICBjb25zdCBwcHMgPSBuYWxzLmZpbmQoKG4pID0+IG4udHlwZSA9PT0gTkFMX1BQUyk7XG4gIGlmICghc3BzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiaGV2Y19hbHBoYTogU1BTIG1pc3NpbmcgaW4gTlZFTkMgZXh0cmFkYXRhXCIpO1xuICB9XG4gIGlmICghcHBzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiaGV2Y19hbHBoYTogUFBTIG1pc3NpbmcgaW4gTlZFTkMgZXh0cmFkYXRhXCIpO1xuICB9XG4gIGNvbnN0IHMgPSBwYXJzZVNwcyhyZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uKHNwcy5kYXRhKSk7XG4gIGNvbnN0IHAgPSBwYXJzZVBwcyhyZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uKHBwcy5kYXRhKSk7XG4gIHJldHVybiB7IC4uLnMsIC4uLnAgfTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMTIuXG5cbmltcG9ydCB7IENvZGVjLCB0eXBlIENvZGVjQ29udGV4dCwgRkZtcGVnRXJyb3IsIHR5cGUgRnJhbWUsIHR5cGUgUGFja2V0LCB0eXBlIFN0cmVhbSB9IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQge1xuICBBVl9QSVhfRk1UX0JHUkEsXG4gIEFWX1BJWF9GTVRfWVVWNDIwUCxcbiAgQVZFUlJPUl9FQUdBSU4sXG4gIEFWRVJST1JfRU9GLFxuICBGRl9FTkNPREVSX0hFVkNfTlZFTkMsXG59IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgbWFrZUZyYW1lLCBtYWtlUGFja2V0LCBvcGVuVmlkZW9DdHggfSBmcm9tIFwiLi4vbWlzY1wiO1xuaW1wb3J0IHR5cGUgeyBGb3JtYXRNdXhlciB9IGZyb20gXCIuLi9tdXhlclwiO1xuaW1wb3J0IHR5cGUgeyBId1ZpZGVvRW5jb2Rlck9wdGlvbnMgfSBmcm9tIFwiLi4vdmlkZW90b29sYm94XCI7XG5pbXBvcnQgeyBidWlsZFVuaWZpZWRFeHRyYWRhdGEsIGV4dHJhY3RBbHBoYVRvWXV2NDIwcEJ1ZmZlciB9IGZyb20gXCIuL2FscGhhXCI7XG5pbXBvcnQgeyBwYXRjaEhldmNBbHBoYVB0bCB9IGZyb20gXCIuL2FscGhhX2RhcndpblwiO1xuaW1wb3J0IHsgRHVhbExheWVyTXV4IH0gZnJvbSBcIi4vZHVhbF9sYXllcl9tdXhcIjtcbmltcG9ydCB7IHR5cGUgTnZlbmNIZXZjQ29uZmlnLCBwYXJzZU52ZW5jSGV2Y0NvbmZpZyB9IGZyb20gXCIuL3BhcnNlclwiO1xuXG5pbnRlcmZhY2UgTnZlbmNTdGF0ZSB7XG4gIGJhc2VDdHg6IENvZGVjQ29udGV4dDtcbiAgYWxwaGFDdHg6IENvZGVjQ29udGV4dDtcbiAgYmFzZVBrdDogUGFja2V0O1xuICBhbHBoYVBrdDogUGFja2V0O1xuICBzdHJlYW06IFN0cmVhbTtcbiAgYWxwaGFTd0ZyYW1lOiBGcmFtZTtcbiAgYWxwaGFCdWY6IEJ1ZmZlcjtcbiAgaGV2Y0NmZzogTnZlbmNIZXZjQ29uZmlnO1xufVxuXG5leHBvcnQgY2xhc3MgTnZlbmNEdWFsTGF5ZXJFbmNvZGVyIGltcGxlbWVudHMgRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgX3M6IE52ZW5jU3RhdGU7XG4gIHByaXZhdGUgX211eDogRHVhbExheWVyTXV4O1xuICBwcml2YXRlIF9wdHMgPSAwbjtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHM6IE52ZW5jU3RhdGUpIHtcbiAgICB0aGlzLl9zID0gcztcbiAgICB0aGlzLl9tdXggPSBuZXcgRHVhbExheWVyTXV4KHtcbiAgICAgIGJhc2VDdHg6IHMuYmFzZUN0eCxcbiAgICAgIGFscGhhQ3R4OiBzLmFscGhhQ3R4LFxuICAgICAgYmFzZVBrdDogcy5iYXNlUGt0LFxuICAgICAgYWxwaGFQa3Q6IHMuYWxwaGFQa3QsXG4gICAgICBzdHJlYW06IHMuc3RyZWFtLFxuICAgICAgaGV2Y0NmZzogcy5oZXZjQ2ZnLFxuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIGNyZWF0ZShvcHRzOiBId1ZpZGVvRW5jb2Rlck9wdGlvbnMpOiBQcm9taXNlPE52ZW5jRHVhbExheWVyRW5jb2Rlcj4ge1xuICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgZnBzLCBiaXRyYXRlLCBtdXhlciB9ID0gb3B0cztcblxuICAgIGNvbnN0IGNvZGVjID0gQ29kZWMuZmluZEVuY29kZXJCeU5hbWUoRkZfRU5DT0RFUl9IRVZDX05WRU5DKTtcbiAgICBpZiAoIWNvZGVjKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJoZXZjX252ZW5jIGVuY29kZXIgbm90IGZvdW5kXCIpO1xuICAgIH1cblxuICAgIC8vIHRpZXI9bWFpbiBtYXRjaGVzIEFwcGxlIFZpZGVvVG9vbGJveDsgbWFjT1MgQ2hyb21lIHJlcXVpcmVzIE1haW4gdGllciBmb3IgSEVWQyBhbHBoYSBkZWNvZGUuXG4gICAgY29uc3QgbnZlbmNPcHRzID0geyBwcmVzZXQ6IFwicDRcIiwgYmY6IFwiMFwiLCB0aWVyOiBcIm1haW5cIiB9O1xuICAgIGNvbnN0IGNvbW1vbiA9IHsgY29kZWMsIHdpZHRoLCBoZWlnaHQsIGZwcywgYml0cmF0ZSwgb3B0aW9uczogbnZlbmNPcHRzIH07XG4gICAgLy8gQkdSQSBkaXJlY3QgKE5WRU5DIGNvbnZlcnRzLCBubyBDUFUgU1dTKTsgc3RhY2sgZnJlZXMgZXZlcnkgbmF0aXZlIGlmIGEgbGF0ZXIgc3RlcCB0aHJvd3MsIG1vdmUoKSBkaXNvd25zIG9uIHN1Y2Nlc3MuXG4gICAgdXNpbmcgc3RhY2sgPSBuZXcgRGlzcG9zYWJsZVN0YWNrKCk7XG4gICAgY29uc3QgYmFzZUN0eCA9IHN0YWNrLnVzZShhd2FpdCBvcGVuVmlkZW9DdHgoeyAuLi5jb21tb24sIHBpeGVsRm9ybWF0OiBBVl9QSVhfRk1UX0JHUkEgfSwgXCJudmVuYy5iYXNlLm9wZW4yXCIpKTtcbiAgICBjb25zdCBhbHBoYUN0eCA9IHN0YWNrLnVzZShhd2FpdCBvcGVuVmlkZW9DdHgoeyAuLi5jb21tb24sIHBpeGVsRm9ybWF0OiBBVl9QSVhfRk1UX1lVVjQyMFAgfSwgXCJudmVuYy5hbHBoYS5vcGVuMlwiKSk7XG5cbiAgICBpZiAoIWJhc2VDdHguZXh0cmFEYXRhIHx8ICFhbHBoYUN0eC5leHRyYURhdGEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIm52ZW5jOiBjb2RlYyBleHRyYWRhdGEgbWlzc2luZ1wiKTtcbiAgICB9XG4gICAgY29uc3QgaGV2Y0NmZyA9IHBhcnNlTnZlbmNIZXZjQ29uZmlnKGJhc2VDdHguZXh0cmFEYXRhKTtcblxuICAgIGNvbnN0IHN0cmVhbSA9IG11eGVyLmFkZFN0cmVhbShiYXNlQ3R4LCBcImh2YzFcIik7XG4gICAgY29uc3QgdW5pZmllZCA9IGJ1aWxkVW5pZmllZEV4dHJhZGF0YSh7XG4gICAgICBiYXNlRXh0cmFkYXRhOiBiYXNlQ3R4LmV4dHJhRGF0YSxcbiAgICAgIGFscGhhRXh0cmFkYXRhOiBhbHBoYUN0eC5leHRyYURhdGEsXG4gICAgICB3aWR0aCxcbiAgICAgIGhlaWdodCxcbiAgICB9KTtcbiAgICAvLyBBcHBsZS1WVEIgY29tcGF0OiByZXdyaXRlIFZQUytTUFMgUFRMIGJpdHMgdG8gbWF0Y2ggeDI2NS9WVEIgb3V0cHV0ICh0aWVyPU1haW4sIGNvbXBhdFsyXT0xKS5cbiAgICBzdHJlYW0uY29kZWNwYXIuZXh0cmFkYXRhID0gcGF0Y2hIZXZjQWxwaGFQdGwodW5pZmllZCk7XG5cbiAgICBjb25zdCB5U2l6ZSA9IHdpZHRoICogaGVpZ2h0O1xuICAgIC8vIFlVVjQyMFAgY2hyb21hIHBsYW5lcyBhcmUgY2VpbCh3LzIpw5djZWlsKGgvMik7IGZsb29yIHVuZGVyZmxvd3Mgb24gb2RkIGRpbWVuc2lvbnMuXG4gICAgY29uc3QgY2hyb21hU2l6ZSA9ICgod2lkdGggKyAxKSA+PiAxKSAqICgoaGVpZ2h0ICsgMSkgPj4gMSk7XG4gICAgY29uc3QgYWxwaGFCdWYgPSBCdWZmZXIuYWxsb2MoeVNpemUgKyBjaHJvbWFTaXplICogMik7XG4gICAgYWxwaGFCdWYuZmlsbCgxMjgsIHlTaXplKTtcblxuICAgIGNvbnN0IGJhc2VQa3QgPSBzdGFjay51c2UobWFrZVBhY2tldCgpKTtcbiAgICBjb25zdCBhbHBoYVBrdCA9IHN0YWNrLnVzZShtYWtlUGFja2V0KCkpO1xuICAgIGNvbnN0IGFscGhhU3dGcmFtZSA9IHN0YWNrLnVzZShtYWtlRnJhbWUod2lkdGgsIGhlaWdodCwgQVZfUElYX0ZNVF9ZVVY0MjBQKSk7XG5cbiAgICBzdGFjay5tb3ZlKCk7XG4gICAgcmV0dXJuIG5ldyBOdmVuY0R1YWxMYXllckVuY29kZXIoe1xuICAgICAgYmFzZUN0eCxcbiAgICAgIGFscGhhQ3R4LFxuICAgICAgYmFzZVBrdCxcbiAgICAgIGFscGhhUGt0LFxuICAgICAgc3RyZWFtLFxuICAgICAgYWxwaGFTd0ZyYW1lLFxuICAgICAgYWxwaGFCdWYsXG4gICAgICBoZXZjQ2ZnLFxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZW5jb2RlKGJncmFGcmFtZTogRnJhbWUsIG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgYmFzZUN0eCwgYWxwaGFDdHgsIGFscGhhU3dGcmFtZSwgYWxwaGFCdWYgfSA9IHRoaXMuX3M7XG4gICAgY29uc3QgcHRzID0gdGhpcy5fcHRzKys7XG5cbiAgICAvLyBFeHRyYWN0IHRoZSBhbHBoYSBwbGFuZSBiZWZvcmUgYmFzZS5zZW5kRnJhbWUg4oCUIHRoZSBlbmNvZGVyIHVucmVmcyB0aGUgaW5wdXQgZnJhbWUuXG4gICAgZXh0cmFjdEFscGhhVG9ZdXY0MjBwQnVmZmVyKGJncmFGcmFtZSwgYWxwaGFCdWYpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhbHBoYVN3RnJhbWUubWFrZVdyaXRhYmxlKCksIFwiYWxwaGFTdy5tYWtlV3JpdGFibGVcIik7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGFscGhhU3dGcmFtZS5mcm9tQnVmZmVyKGFscGhhQnVmKSwgXCJhbHBoYVN3LmZyb21CdWZmZXJcIik7XG4gICAgYWxwaGFTd0ZyYW1lLnB0cyA9IHB0cztcbiAgICBhbHBoYVN3RnJhbWUuZHVyYXRpb24gPSAxbjtcblxuICAgIGJncmFGcmFtZS5wdHMgPSBwdHM7XG4gICAgYmdyYUZyYW1lLmR1cmF0aW9uID0gMW47XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IGJhc2VDdHguc2VuZEZyYW1lKGJncmFGcmFtZSksIFwiYmFzZS5zZW5kRnJhbWVcIik7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IGFscGhhQ3R4LnNlbmRGcmFtZShhbHBoYVN3RnJhbWUpLCBcImFscGhhLnNlbmRGcmFtZVwiKTtcblxuICAgIGF3YWl0IHRoaXMuX211eC5kcmFpbihtdXhlcik7XG4gIH1cblxuICBhc3luYyBmbHVzaChtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLnNlbmRFb2YodGhpcy5fcy5iYXNlQ3R4LCBcImJhc2VcIik7XG4gICAgYXdhaXQgdGhpcy5zZW5kRW9mKHRoaXMuX3MuYWxwaGFDdHgsIFwiYWxwaGFcIik7XG4gICAgYXdhaXQgdGhpcy5fbXV4LmRyYWluKG11eGVyKTtcbiAgICBjb25zdCBkZXN5bmMgPSB0aGlzLl9tdXguZGVzeW5jQWZ0ZXJFb2YoKTtcbiAgICBpZiAoZGVzeW5jKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE5WRU5DIGRlc3luYzogJHtkZXN5bmN9YCk7XG4gICAgfVxuICB9XG5cbiAgW1N5bWJvbC5kaXNwb3NlXSgpOiB2b2lkIHtcbiAgICBjb25zdCB7IGJhc2VQa3QsIGFscGhhUGt0LCBiYXNlQ3R4LCBhbHBoYUN0eCwgYWxwaGFTd0ZyYW1lIH0gPSB0aGlzLl9zO1xuICAgIGJhc2VQa3QuZnJlZSgpO1xuICAgIGFscGhhUGt0LmZyZWUoKTtcbiAgICBhbHBoYVN3RnJhbWUuZnJlZSgpO1xuICAgIC8vIE5WSURJQSBkcml2ZXIgNTIwLjU2LjA2KyBVQUYgaW4gbGlibnZjdXZpZCBvbiBjcmVhdGlvbi1vcmRlciBzZXNzaW9uIGZyZWUg4oCUIExJRk8gZGVzdHJveSBhdm9pZHMgaXQgKGZvcnVtIC90LzI2OTk3NCkuXG4gICAgYWxwaGFDdHguZnJlZUNvbnRleHQoKTtcbiAgICBiYXNlQ3R4LmZyZWVDb250ZXh0KCk7XG4gIH1cblxuICAvLyBFT0YgZmx1c2g7IEVBR0FJTi9FT0YgcmV0dXJucyBhcmUgYmVuaWduIChhbHJlYWR5LWRyYWluaW5nIGVuY29kZXIpLlxuICBwcml2YXRlIGFzeW5jIHNlbmRFb2YoY3R4OiBDb2RlY0NvbnRleHQsIHRhZzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcmV0ID0gYXdhaXQgY3R4LnNlbmRGcmFtZShudWxsKTtcbiAgICBpZiAocmV0IDwgMCAmJiByZXQgIT09IEFWRVJST1JfRUFHQUlOICYmIHJldCAhPT0gQVZFUlJPUl9FT0YpIHtcbiAgICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihyZXQsIGBudmVuYy4ke3RhZ30uc2VuZEZyYW1lKG51bGwpYCk7XG4gICAgfVxuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAzLzIxLlxuXG5pbXBvcnQgeyBDb2RlYywgdHlwZSBDb2RlY0NvbnRleHQsIEZGbXBlZ0Vycm9yLCB0eXBlIEZyYW1lLCB0eXBlIFBhY2tldCwgdHlwZSBTdHJlYW0gfSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHR5cGUgeyBBVlBpeGVsRm9ybWF0LCBGRlZpZGVvRW5jb2RlciB9IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgZHJhaW5QYWNrZXRzLCBtYWtlUGFja2V0LCBvcGVuVmlkZW9DdHggfSBmcm9tIFwiLi9taXNjXCI7XG5pbXBvcnQgdHlwZSB7IEZvcm1hdE11eGVyIH0gZnJvbSBcIi4vbXV4ZXJcIjtcblxuZXhwb3J0IGludGVyZmFjZSBWaWRlb0VuY29kZXJPcHRpb25zIHtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIGZwczogbnVtYmVyO1xuICBjb2RlY05hbWU6IEZGVmlkZW9FbmNvZGVyO1xuICBjb2RlY1RhZz86IHN0cmluZztcbiAgY29kZWNPcHRzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICBiaXRyYXRlOiBudW1iZXI7XG4gIHBpeGVsRm9ybWF0OiBBVlBpeGVsRm9ybWF0O1xuICBtdXhlcjogRm9ybWF0TXV4ZXI7XG59XG5cbmV4cG9ydCBjbGFzcyBWaWRlb0VuY29kZXIgaW1wbGVtZW50cyBEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfY3R4OiBDb2RlY0NvbnRleHQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3BrdDogUGFja2V0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdHJlYW06IFN0cmVhbTtcbiAgcHJpdmF0ZSBfcHRzID0gMG47XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihjdHg6IENvZGVjQ29udGV4dCwgcGt0OiBQYWNrZXQsIHN0cmVhbTogU3RyZWFtKSB7XG4gICAgdGhpcy5fY3R4ID0gY3R4O1xuICAgIHRoaXMuX3BrdCA9IHBrdDtcbiAgICB0aGlzLl9zdHJlYW0gPSBzdHJlYW07XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgY3JlYXRlKG9wdHM6IFZpZGVvRW5jb2Rlck9wdGlvbnMpOiBQcm9taXNlPFZpZGVvRW5jb2Rlcj4ge1xuICAgIGNvbnN0IHsgY29kZWNOYW1lLCBjb2RlY1RhZywgY29kZWNPcHRzLCBtdXhlciwgLi4ucmVzdCB9ID0gb3B0cztcblxuICAgIGNvbnN0IGNvZGVjID0gQ29kZWMuZmluZEVuY29kZXJCeU5hbWUoY29kZWNOYW1lKTtcbiAgICBpZiAoIWNvZGVjKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFZpZGVvIGVuY29kZXIgbm90IGZvdW5kOiAke2NvZGVjTmFtZX1gKTtcbiAgICB9XG5cbiAgICAvLyBQYXJ0aWFsLWNvbnN0cnVjdGlvbiBzYWZldHk6IHN0YWNrIGRpc3Bvc2VzIGN0eC9wa3QgaWYgYSBsYXRlciBzdGVwIHRocm93czsgbW92ZSgpIGRpc293bnMgb24gc3VjY2Vzcy5cbiAgICB1c2luZyBzdGFjayA9IG5ldyBEaXNwb3NhYmxlU3RhY2soKTtcbiAgICBjb25zdCBjdHggPSBzdGFjay51c2UoYXdhaXQgb3BlblZpZGVvQ3R4KHsgY29kZWMsIC4uLnJlc3QsIGNvZGVjVGFnLCBvcHRpb25zOiBjb2RlY09wdHMgfSwgXCJ2aWRlb0N0eC5vcGVuMlwiKSk7XG4gICAgY29uc3QgcGt0ID0gc3RhY2sudXNlKG1ha2VQYWNrZXQoKSk7XG4gICAgY29uc3Qgc3RyZWFtID0gbXV4ZXIuYWRkU3RyZWFtKGN0eCwgY29kZWNUYWcpO1xuICAgIHN0YWNrLm1vdmUoKTtcbiAgICByZXR1cm4gbmV3IFZpZGVvRW5jb2RlcihjdHgsIHBrdCwgc3RyZWFtKTtcbiAgfVxuXG4gIGFzeW5jIGVuY29kZShmcmFtZTogRnJhbWUsIG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGZyYW1lLnB0cyA9IHRoaXMuX3B0cysrO1xuICAgIGZyYW1lLmR1cmF0aW9uID0gMW47XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IHRoaXMuX2N0eC5zZW5kRnJhbWUoZnJhbWUpLCBcInZpZGVvQ3R4LnNlbmRGcmFtZVwiKTtcbiAgICBhd2FpdCB0aGlzLmRyYWluKG11eGVyKTtcbiAgfVxuXG4gIGFzeW5jIGZsdXNoKG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuX2N0eC5zZW5kRnJhbWUobnVsbCk7XG4gICAgYXdhaXQgdGhpcy5kcmFpbihtdXhlcik7XG4gIH1cblxuICBbU3ltYm9sLmRpc3Bvc2VdKCk6IHZvaWQge1xuICAgIHRoaXMuX3BrdC5mcmVlKCk7XG4gICAgdGhpcy5fY3R4LmZyZWVDb250ZXh0KCk7XG4gIH1cblxuICBwcml2YXRlIGRyYWluKG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBkcmFpblBhY2tldHModGhpcy5fY3R4LCB0aGlzLl9wa3QsIHRoaXMuX3N0cmVhbSwgbXV4ZXIpO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzEyLlxuXG5pbXBvcnQgeyB0eXBlIENvZGVjQ29udGV4dCwgRkZtcGVnRXJyb3IsIHR5cGUgRnJhbWUsIHR5cGUgUGFja2V0LCB0eXBlIFN0cmVhbSB9IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQgdHlwZSB7IEhhcmR3YXJlQ29udGV4dCB9IGZyb20gXCJub2RlLWF2L2FwaVwiO1xuaW1wb3J0IHsgQVZfUElYX0ZNVF9CR1JBLCBBVkNPTF9SQU5HRV9KUEVHIH0gZnJvbSBcIm5vZGUtYXYvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBkcmFpblBhY2tldHMsIG1ha2VQYWNrZXQsIG9wZW5WaWRlb0N0eCB9IGZyb20gXCIuL21pc2NcIjtcbmltcG9ydCB0eXBlIHsgRm9ybWF0TXV4ZXIgfSBmcm9tIFwiLi9tdXhlclwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEh3VmlkZW9FbmNvZGVyT3B0aW9ucyB7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICBmcHM6IG51bWJlcjtcbiAgaHc6IEhhcmR3YXJlQ29udGV4dDtcbiAgYml0cmF0ZTogbnVtYmVyO1xuICBtdXhlcjogRm9ybWF0TXV4ZXI7XG59XG5cbmV4cG9ydCBjbGFzcyBWaWRlb1Rvb2xib3hFbmNvZGVyIGltcGxlbWVudHMgRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgX2N0eDogQ29kZWNDb250ZXh0O1xuICBwcml2YXRlIF9wa3Q6IFBhY2tldDtcbiAgcHJpdmF0ZSBfc3RyZWFtOiBTdHJlYW07XG4gIHByaXZhdGUgX3B0cyA9IDBuO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoY3R4OiBDb2RlY0NvbnRleHQsIHBrdDogUGFja2V0LCBzdHJlYW06IFN0cmVhbSkge1xuICAgIHRoaXMuX2N0eCA9IGN0eDtcbiAgICB0aGlzLl9wa3QgPSBwa3Q7XG4gICAgdGhpcy5fc3RyZWFtID0gc3RyZWFtO1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIGNyZWF0ZShvcHRzOiBId1ZpZGVvRW5jb2Rlck9wdGlvbnMpOiBQcm9taXNlPFZpZGVvVG9vbGJveEVuY29kZXI+IHtcbiAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQsIGZwcywgaHcsIGJpdHJhdGUsIG11eGVyIH0gPSBvcHRzO1xuXG4gICAgY29uc3QgY29kZWMgPSBody5nZXRFbmNvZGVyQ29kZWMoXCJoZXZjXCIpO1xuICAgIGlmICghY29kZWMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcImhldmNfdmlkZW90b29sYm94IGVuY29kZXIgbm90IGZvdW5kXCIpO1xuICAgIH1cblxuICAgIGNvbnN0IGN0eCA9IGF3YWl0IG9wZW5WaWRlb0N0eChcbiAgICAgIHtcbiAgICAgICAgY29kZWMsXG4gICAgICAgIHdpZHRoLFxuICAgICAgICBoZWlnaHQsXG4gICAgICAgIGZwcyxcbiAgICAgICAgYml0cmF0ZSxcbiAgICAgICAgcGl4ZWxGb3JtYXQ6IEFWX1BJWF9GTVRfQkdSQSxcbiAgICAgICAgY29sb3JSYW5nZTogQVZDT0xfUkFOR0VfSlBFRyxcbiAgICAgICAgY29kZWNUYWc6IFwiaHZjMVwiLFxuICAgICAgICBvcHRpb25zOiB7IGFscGhhX3F1YWxpdHk6IFwiMVwiIH0sXG4gICAgICB9LFxuICAgICAgXCJ2dEVuYy5vcGVuMlwiLFxuICAgICk7XG4gICAgLy8gUGFydGlhbC1jb25zdHJ1Y3Rpb24gc2FmZXR5OiBzdGFjayBkaXNwb3NlcyBjdHgvcGt0IGlmIGEgbGF0ZXIgc3RlcCB0aHJvd3M7IG1vdmUoKSBkaXNvd25zIG9uIHN1Y2Nlc3MuXG4gICAgdXNpbmcgc3RhY2sgPSBuZXcgRGlzcG9zYWJsZVN0YWNrKCk7XG4gICAgc3RhY2sudXNlKGN0eCk7XG4gICAgY29uc3QgcGt0ID0gc3RhY2sudXNlKG1ha2VQYWNrZXQoKSk7XG4gICAgY29uc3Qgc3RyZWFtID0gbXV4ZXIuYWRkU3RyZWFtKGN0eCwgXCJodmMxXCIpO1xuICAgIHN0YWNrLm1vdmUoKTtcbiAgICByZXR1cm4gbmV3IFZpZGVvVG9vbGJveEVuY29kZXIoY3R4LCBwa3QsIHN0cmVhbSk7XG4gIH1cblxuICBhc3luYyBlbmNvZGUoYmdyYUZyYW1lOiBGcmFtZSwgbXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYmdyYUZyYW1lLnB0cyA9IHRoaXMuX3B0cysrO1xuICAgIGJncmFGcmFtZS5kdXJhdGlvbiA9IDFuO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCB0aGlzLl9jdHguc2VuZEZyYW1lKGJncmFGcmFtZSksIFwidnRFbmMuc2VuZEZyYW1lXCIpO1xuICAgIGF3YWl0IHRoaXMuZHJhaW4obXV4ZXIpO1xuICB9XG5cbiAgYXN5bmMgZmx1c2gobXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5fY3R4LnNlbmRGcmFtZShudWxsKTtcbiAgICBhd2FpdCB0aGlzLmRyYWluKG11eGVyKTtcbiAgfVxuXG4gIFtTeW1ib2wuZGlzcG9zZV0oKTogdm9pZCB7XG4gICAgdGhpcy5fcGt0LmZyZWUoKTtcbiAgICB0aGlzLl9jdHguZnJlZUNvbnRleHQoKTtcbiAgfVxuXG4gIHByaXZhdGUgZHJhaW4obXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIGRyYWluUGFja2V0cyh0aGlzLl9jdHgsIHRoaXMuX3BrdCwgdGhpcy5fc3RyZWFtLCBtdXhlcik7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMTMuXG5cbmltcG9ydCB7IEhhcmR3YXJlQ29udGV4dCB9IGZyb20gXCJub2RlLWF2L2FwaVwiO1xuaW1wb3J0IHtcbiAgQVZfUElYX0ZNVF9ZVVZBNDIwUCxcbiAgRkZfRU5DT0RFUl9MSUJYMjY1LFxuICBGRl9IV0RFVklDRV9UWVBFX0NVREEsXG4gIEZGX0hXREVWSUNFX1RZUEVfVklERU9UT09MQk9YLFxufSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcblxuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4uL2xvZ2dpbmdcIjtcbmltcG9ydCB7IENvZGVjU3RhdGUgfSBmcm9tIFwiLi9jb2RlY1wiO1xuaW1wb3J0IHsgTnZlbmNEdWFsTGF5ZXJFbmNvZGVyIH0gZnJvbSBcIi4vaGV2Y19hbHBoYS9udmVuY1wiO1xuaW1wb3J0IHR5cGUgeyBGb3JtYXRNdXhlciB9IGZyb20gXCIuL211eGVyXCI7XG5pbXBvcnQgeyBWaWRlb0VuY29kZXIgfSBmcm9tIFwiLi92aWRlb1wiO1xuaW1wb3J0IHsgVmlkZW9Ub29sYm94RW5jb2RlciB9IGZyb20gXCIuL3ZpZGVvdG9vbGJveFwiO1xuXG5jb25zdCBUQUcgPSBcIltFbmNvZGVyXVwiO1xuXG5leHBvcnQgdHlwZSBId0VuY29kZXIgPSBWaWRlb1Rvb2xib3hFbmNvZGVyIHwgTnZlbmNEdWFsTGF5ZXJFbmNvZGVyO1xuXG5leHBvcnQgaW50ZXJmYWNlIFZpZGVvU2V0dXAge1xuICB2aWRlbz86IFZpZGVvRW5jb2RlcjtcbiAgaHdWaWRlbz86IEh3RW5jb2RlcjtcbiAgY29kZWM/OiBDb2RlY1N0YXRlO1xuICBodz86IEhhcmR3YXJlQ29udGV4dDtcbiAgb3duc0h3OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEh3VmlkZW9GYWN0b3J5T3B0aW9ucyB7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICBmcHM6IG51bWJlcjtcbiAgYml0cmF0ZT86IG51bWJlcjtcbiAgZGlzYWJsZUh3Q29kZWM/OiBib29sZWFuO1xuICBzaGFyZWRIdz86IEhhcmR3YXJlQ29udGV4dDtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUh3VmlkZW9FbmNvZGVyKG9wdHM6IEh3VmlkZW9GYWN0b3J5T3B0aW9ucywgbXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTxWaWRlb1NldHVwPiB7XG4gIGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgZnBzLCBiaXRyYXRlID0gOF8wMDBfMDAwLCBkaXNhYmxlSHdDb2RlYyA9IGZhbHNlLCBzaGFyZWRIdyB9ID0gb3B0cztcbiAgY29uc3QgaHcgPSBzaGFyZWRIdyA/PyAoZGlzYWJsZUh3Q29kZWMgPyB1bmRlZmluZWQgOiAoSGFyZHdhcmVDb250ZXh0LmF1dG8oKSA/PyB1bmRlZmluZWQpKTtcbiAgY29uc3Qgb3duc0h3ID0gIXNoYXJlZEh3ICYmICEhaHc7XG5cbiAgdHJ5IHtcbiAgICBpZiAoaHc/LmRldmljZVR5cGVOYW1lID09PSBGRl9IV0RFVklDRV9UWVBFX1ZJREVPVE9PTEJPWCAmJiBody5nZXRFbmNvZGVyQ29kZWMoXCJoZXZjXCIpKSB7XG4gICAgICBsb2dnZXIuZGVidWcoVEFHLCBcInVzaW5nIFZpZGVvVG9vbGJveCBIRVZDIGFscGhhIGVuY29kZXJcIik7XG4gICAgICBjb25zdCBod1ZpZGVvID0gYXdhaXQgVmlkZW9Ub29sYm94RW5jb2Rlci5jcmVhdGUoeyB3aWR0aCwgaGVpZ2h0LCBmcHMsIGh3LCBiaXRyYXRlLCBtdXhlciB9KTtcbiAgICAgIHJldHVybiB7IGh3VmlkZW8sIGh3LCBvd25zSHcgfTtcbiAgICB9XG4gICAgaWYgKGh3Py5kZXZpY2VUeXBlTmFtZSA9PT0gRkZfSFdERVZJQ0VfVFlQRV9DVURBICYmIGh3LmdldEVuY29kZXJDb2RlYyhcImhldmNcIikpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhUQUcsIFwidXNpbmcgTlZFTkMgZHVhbC1sYXllciBIRVZDIGFscGhhIGVuY29kZXJcIik7XG4gICAgICBjb25zdCBod1ZpZGVvID0gYXdhaXQgTnZlbmNEdWFsTGF5ZXJFbmNvZGVyLmNyZWF0ZSh7IHdpZHRoLCBoZWlnaHQsIGZwcywgaHcsIGJpdHJhdGUsIG11eGVyIH0pO1xuICAgICAgcmV0dXJuIHsgaHdWaWRlbywgaHcsIG93bnNIdyB9O1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIGxvZ2dlci53YXJuKFRBRywgXCJIYXJkd2FyZSBjb2RlYyBzZXNzaW9uIGxpbWl0cyByZWFjaGVkLCB1c2Ugc29mdHdhcmUgZW5jb2RlclwiLCBlKTtcbiAgICBpZiAob3duc0h3KSB7XG4gICAgICBodz8uZGlzcG9zZSgpO1xuICAgIH1cbiAgfVxuXG4gIGxvZ2dlci5kZWJ1ZyhUQUcsIFwidXNpbmcgc29mdHdhcmUgbGlieDI2NSBIRVZDIGFscGhhIGVuY29kZXJcIik7XG4gIC8vIFBhcnRpYWwtY29uc3RydWN0aW9uIHNhZmV0eTogZnJlZSB0aGUgdmlkZW8gZW5jb2RlciBpZiBDb2RlY1N0YXRlLmNyZWF0ZSB0aHJvd3M7IG1vdmUoKSBkaXNvd25zIG9uIHN1Y2Nlc3MuXG4gIHVzaW5nIHN0YWNrID0gbmV3IERpc3Bvc2FibGVTdGFjaygpO1xuICBjb25zdCB2aWRlbyA9IHN0YWNrLnVzZShcbiAgICBhd2FpdCBWaWRlb0VuY29kZXIuY3JlYXRlKHtcbiAgICAgIHdpZHRoLFxuICAgICAgaGVpZ2h0LFxuICAgICAgZnBzLFxuICAgICAgY29kZWNOYW1lOiBGRl9FTkNPREVSX0xJQlgyNjUsXG4gICAgICBjb2RlY1RhZzogXCJodmMxXCIsXG4gICAgICBjb2RlY09wdHM6IHsgcHJlc2V0OiBcImZhc3RcIiwgXCJ4MjY1LXBhcmFtc1wiOiBcImxvZy1sZXZlbD0xOmJmcmFtZXM9Mzpwb29scz0rOmZyYW1lLXRocmVhZHM9MFwiIH0sXG4gICAgICBiaXRyYXRlLFxuICAgICAgcGl4ZWxGb3JtYXQ6IEFWX1BJWF9GTVRfWVVWQTQyMFAsXG4gICAgICBtdXhlcixcbiAgICB9KSxcbiAgKTtcbiAgY29uc3QgY29kZWMgPSBzdGFjay51c2UoYXdhaXQgQ29kZWNTdGF0ZS5jcmVhdGUod2lkdGgsIGhlaWdodCkpO1xuICBzdGFjay5tb3ZlKCk7XG4gIHJldHVybiB7IHZpZGVvLCBjb2RlYywgb3duc0h3OiBmYWxzZSB9O1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMy8yMS5cblxuaW1wb3J0IHsgdHlwZSBDb2RlY0NvbnRleHQsIERpY3Rpb25hcnksIEZGbXBlZ0Vycm9yLCBGb3JtYXRDb250ZXh0LCB0eXBlIFBhY2tldCwgdHlwZSBTdHJlYW0gfSBmcm9tIFwibm9kZS1hdlwiO1xuXG5leHBvcnQgY2xhc3MgRm9ybWF0TXV4ZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF9jdHg6IEZvcm1hdENvbnRleHQ7XG4gIHByaXZhdGUgX29wZW5lZCA9IGZhbHNlO1xuICBwcml2YXRlIF9kaXNwb3NlZCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKG91dFBhdGg6IHN0cmluZywgZm9ybWF0TmFtZT86IHN0cmluZykge1xuICAgIHRoaXMuX2N0eCA9IG5ldyBGb3JtYXRDb250ZXh0KCk7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKHRoaXMuX2N0eC5hbGxvY091dHB1dENvbnRleHQyKG51bGwsIGZvcm1hdE5hbWUgPz8gbnVsbCwgb3V0UGF0aCksIFwiYWxsb2NPdXRwdXRDb250ZXh0MlwiKTtcbiAgfVxuXG4gIGFkZFN0cmVhbShjb2RlY0N0eDogQ29kZWNDb250ZXh0LCBjb2RlY1RhZz86IHN0cmluZyk6IFN0cmVhbSB7XG4gICAgY29uc3Qgc3RyZWFtID0gdGhpcy5fY3R4Lm5ld1N0cmVhbShudWxsKTtcbiAgICBzdHJlYW0udGltZUJhc2UgPSBjb2RlY0N0eC50aW1lQmFzZTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3Ioc3RyZWFtLmNvZGVjcGFyLmZyb21Db250ZXh0KGNvZGVjQ3R4KSwgXCJjb2RlY3Bhci5mcm9tQ29udGV4dFwiKTtcbiAgICBpZiAoY29kZWNUYWcpIHtcbiAgICAgIHN0cmVhbS5jb2RlY3Bhci5jb2RlY1RhZyA9IGNvZGVjVGFnO1xuICAgIH1cbiAgICByZXR1cm4gc3RyZWFtO1xuICB9XG5cbiAgYXN5bmMgb3BlbigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fb3BlbmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCB0aGlzLl9jdHgub3Blbk91dHB1dCgpLCBcIm9wZW5PdXRwdXRcIik7XG4gICAgLy8gK2Zhc3RzdGFydCByZWxvY2F0ZXMgbW9vdiB0byBmaWxlIGZyb250IG9uIHdyaXRlVHJhaWxlciBzbyBwbGF5ZXJzIGNhbiBiZWdpbiBwbGF5YmFjayBiZWZvcmUgZnVsbCBkb3dubG9hZC5cbiAgICB1c2luZyBvcHRzID0gRGljdGlvbmFyeS5mcm9tT2JqZWN0KHsgbW92ZmxhZ3M6IFwiK2Zhc3RzdGFydFwiIH0pO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCB0aGlzLl9jdHgud3JpdGVIZWFkZXIob3B0cyksIFwid3JpdGVIZWFkZXJcIik7XG4gICAgdGhpcy5fb3BlbmVkID0gdHJ1ZTtcbiAgfVxuXG4gIGFzeW5jIHdyaXRlUGFja2V0KHBrdDogUGFja2V0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IHRoaXMuX2N0eC5pbnRlcmxlYXZlZFdyaXRlRnJhbWUocGt0KSwgXCJpbnRlcmxlYXZlZFdyaXRlRnJhbWVcIik7XG4gIH1cblxuICBhc3luYyBbU3ltYm9sLmFzeW5jRGlzcG9zZV0oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX2Rpc3Bvc2VkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX2Rpc3Bvc2VkID0gdHJ1ZTtcbiAgICB0cnkge1xuICAgICAgaWYgKHRoaXMuX29wZW5lZCkge1xuICAgICAgICB0aGlzLl9vcGVuZWQgPSBmYWxzZTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCB0aGlzLl9jdHgud3JpdGVUcmFpbGVyKCk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgLy8gQSBmYWlsZWQvdHJ1bmNhdGVkIHRyYWlsZXIgd3JpdGUgbXVzdCBub3QgbGVhayB0aGUgRkQuXG4gICAgICAgICAgYXdhaXQgdGhpcy5fY3R4LmNsb3NlT3V0cHV0KCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgLy8gQWx3YXlzIGZyZWUgdGhlIG5hdGl2ZSBjb250ZXh0IOKAlCBldmVuIGEgbmV2ZXItb3BlbmVkIG11eGVyIGFsbG9jYXRlZCBvbmUgaW4gdGhlIGNvbnN0cnVjdG9yLlxuICAgICAgYXdhaXQgdGhpcy5fY3R4W1N5bWJvbC5hc3luY0Rpc3Bvc2VdKCk7XG4gICAgfVxuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzI0LlxuXG5pbXBvcnQgeyBvayB9IGZyb20gXCJub2RlOmFzc2VydFwiO1xuaW1wb3J0IHsgRkZtcGVnRXJyb3IsIHR5cGUgRnJhbWUgfSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHR5cGUgeyBIYXJkd2FyZUNvbnRleHQgfSBmcm9tIFwibm9kZS1hdi9hcGlcIjtcbmltcG9ydCB7XG4gIEFWX1BJWF9GTVRfWVVWQTQyMFAsXG4gIEFWX1NBTVBMRV9GTVRfRkxULFxuICBBVl9TQU1QTEVfRk1UX0ZMVFAsXG4gIEZGX0VOQ09ERVJfQUFDLFxuICBGRl9FTkNPREVSX0xJQk9QVVMsXG59IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgQXVkaW9FbmNvZGVyIH0gZnJvbSBcIi4vYXVkaW9cIjtcbmltcG9ydCB7IENvZGVjU3RhdGUgfSBmcm9tIFwiLi9jb2RlY1wiO1xuaW1wb3J0IHsgY3JlYXRlSHdWaWRlb0VuY29kZXIsIHR5cGUgSHdFbmNvZGVyLCB0eXBlIFZpZGVvU2V0dXAgfSBmcm9tIFwiLi9mYWN0b3J5XCI7XG5pbXBvcnQgeyBGRl9FTkNPREVSX0xJQlZQWF9WUDkgfSBmcm9tIFwiLi9taXNjXCI7XG5pbXBvcnQgeyBGb3JtYXRNdXhlciB9IGZyb20gXCIuL211eGVyXCI7XG5pbXBvcnQgeyBWaWRlb0VuY29kZXIgfSBmcm9tIFwiLi92aWRlb1wiO1xuXG5leHBvcnQgdHlwZSBTaW5rS2luZCA9IFwibXA0XCIgfCBcIndlYm1cIjtcblxuZXhwb3J0IGludGVyZmFjZSBTaW5rT3B0aW9ucyB7XG4gIG91dEZpbGU6IHN0cmluZztcbiAga2luZDogU2lua0tpbmQ7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICBmcHM6IG51bWJlcjtcbiAgd2l0aEF1ZGlvOiBib29sZWFuO1xuICBkaXNhYmxlSHdDb2RlYzogYm9vbGVhbjtcbiAgc2hhcmVkSHc/OiBIYXJkd2FyZUNvbnRleHQ7XG59XG5cbmludGVyZmFjZSBTaW5rU3RhdGUge1xuICBtdXhlcjogRm9ybWF0TXV4ZXI7XG4gIHZpZGVvPzogVmlkZW9FbmNvZGVyO1xuICBod1ZpZGVvPzogSHdFbmNvZGVyO1xuICBhdWRpbz86IEF1ZGlvRW5jb2RlcjtcbiAgY29kZWM/OiBDb2RlY1N0YXRlO1xuICBvd25zSHc6IGJvb2xlYW47XG4gIGh3PzogSGFyZHdhcmVDb250ZXh0O1xuICBvcHRzOiBTaW5rT3B0aW9ucztcbn1cblxuZXhwb3J0IGNsYXNzIE91dHB1dFNpbmsgaW1wbGVtZW50cyBBc3luY0Rpc3Bvc2FibGUge1xuICBwcml2YXRlIF9zOiBTaW5rU3RhdGU7XG4gIHByaXZhdGUgX2Rpc3Bvc2VkID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihzOiBTaW5rU3RhdGUpIHtcbiAgICB0aGlzLl9zID0gcztcbiAgfVxuXG4gIHN0YXRpYyBraW5kRnJvbVBhdGgocGF0aDogc3RyaW5nKTogU2lua0tpbmQge1xuICAgIGNvbnN0IGxvd2VyID0gcGF0aC50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChsb3dlci5lbmRzV2l0aChcIi53ZWJtXCIpKSB7XG4gICAgICByZXR1cm4gXCJ3ZWJtXCI7XG4gICAgfVxuICAgIGlmIChsb3dlci5lbmRzV2l0aChcIi5tcDRcIikgfHwgbG93ZXIuZW5kc1dpdGgoXCIubW92XCIpKSB7XG4gICAgICByZXR1cm4gXCJtcDRcIjtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBvdXRwdXQgZXh0ZW5zaW9uOiAke3BhdGh9YCk7XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgY3JlYXRlKG9wdHM6IFNpbmtPcHRpb25zKTogUHJvbWlzZTxPdXRwdXRTaW5rPiB7XG4gICAgLy8gUGFydGlhbC1jb25zdHJ1Y3Rpb24gc2FmZXR5OiBkaXNwb3NlIG11eGVyL2VuY29kZXJzIGlmIGEgbGF0ZXIgc3RlcCB0aHJvd3M7IG1vdmUoKSBkaXNvd25zIG9uIHN1Y2Nlc3MuXG4gICAgYXdhaXQgdXNpbmcgc3RhY2sgPSBuZXcgQXN5bmNEaXNwb3NhYmxlU3RhY2soKTtcbiAgICBjb25zdCBtdXhlciA9IHN0YWNrLnVzZShuZXcgRm9ybWF0TXV4ZXIob3B0cy5vdXRGaWxlKSk7XG4gICAgY29uc3Qgc2V0dXAgPVxuICAgICAgb3B0cy5raW5kID09PSBcIm1wNFwiID8gYXdhaXQgT3V0cHV0U2luay5tcDRWaWRlbyhvcHRzLCBtdXhlcikgOiBhd2FpdCBPdXRwdXRTaW5rLndlYm1WaWRlbyhvcHRzLCBtdXhlcik7XG4gICAgaWYgKHNldHVwLnZpZGVvKSB7XG4gICAgICBzdGFjay51c2Uoc2V0dXAudmlkZW8pO1xuICAgIH1cbiAgICBpZiAoc2V0dXAuaHdWaWRlbykge1xuICAgICAgc3RhY2sudXNlKHNldHVwLmh3VmlkZW8pO1xuICAgIH1cbiAgICBpZiAoc2V0dXAuY29kZWMpIHtcbiAgICAgIHN0YWNrLnVzZShzZXR1cC5jb2RlYyk7XG4gICAgfVxuICAgIC8vIE9ubHkgYSBzaW5rLW93bmVkIGh3IGRldmljZSBpcyBvdXJzIHRvIGZyZWUgaGVyZTsgYSBzaGFyZWQgZGV2aWNlIGJlbG9uZ3MgdG8gdGhlIHBpcGVsaW5lLlxuICAgIGlmIChzZXR1cC5vd25zSHcgJiYgc2V0dXAuaHcpIHtcbiAgICAgIHN0YWNrLnVzZShzZXR1cC5odyk7XG4gICAgfVxuICAgIGNvbnN0IGF1ZGlvID0gb3B0cy53aXRoQXVkaW8gPyBhd2FpdCBPdXRwdXRTaW5rLmF1ZGlvRm9yKG9wdHMsIG11eGVyKSA6IHVuZGVmaW5lZDtcbiAgICBpZiAoYXVkaW8pIHtcbiAgICAgIHN0YWNrLnVzZShhdWRpbyk7XG4gICAgfVxuICAgIGF3YWl0IG11eGVyLm9wZW4oKTtcbiAgICBzdGFjay5tb3ZlKCk7XG4gICAgcmV0dXJuIG5ldyBPdXRwdXRTaW5rKHsgbXV4ZXIsIC4uLnNldHVwLCBhdWRpbywgb3B0cyB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIG1wNFZpZGVvKG9wdHM6IFNpbmtPcHRpb25zLCBtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPFZpZGVvU2V0dXA+IHtcbiAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQsIGZwcywgZGlzYWJsZUh3Q29kZWMsIHNoYXJlZEh3IH0gPSBvcHRzO1xuICAgIHJldHVybiBjcmVhdGVId1ZpZGVvRW5jb2Rlcih7IHdpZHRoLCBoZWlnaHQsIGZwcywgZGlzYWJsZUh3Q29kZWMsIHNoYXJlZEh3IH0sIG11eGVyKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGFzeW5jIHdlYm1WaWRlbyhvcHRzOiBTaW5rT3B0aW9ucywgbXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTxWaWRlb1NldHVwPiB7XG4gICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0LCBmcHMgfSA9IG9wdHM7XG4gICAgY29uc3QgdmlkZW8gPSBhd2FpdCBWaWRlb0VuY29kZXIuY3JlYXRlKHtcbiAgICAgIHdpZHRoLFxuICAgICAgaGVpZ2h0LFxuICAgICAgZnBzLFxuICAgICAgY29kZWNOYW1lOiBGRl9FTkNPREVSX0xJQlZQWF9WUDksXG4gICAgICBjb2RlY09wdHM6IHtcbiAgICAgICAgZGVhZGxpbmU6IFwicmVhbHRpbWVcIixcbiAgICAgICAgXCJjcHUtdXNlZFwiOiBcIjhcIixcbiAgICAgICAgXCJyb3ctbXRcIjogXCIxXCIsXG4gICAgICAgIHRocmVhZHM6IFwiMlwiLFxuICAgICAgfSxcbiAgICAgIGJpdHJhdGU6IDRfMDAwXzAwMCxcbiAgICAgIHBpeGVsRm9ybWF0OiBBVl9QSVhfRk1UX1lVVkE0MjBQLFxuICAgICAgbXV4ZXIsXG4gICAgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHZpZGVvLFxuICAgICAgY29kZWM6IGF3YWl0IENvZGVjU3RhdGUuY3JlYXRlKHdpZHRoLCBoZWlnaHQpLFxuICAgICAgb3duc0h3OiBmYWxzZSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgYXVkaW9Gb3Iob3B0czogU2lua09wdGlvbnMsIG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8QXVkaW9FbmNvZGVyPiB7XG4gICAgLy8gT3B1cyByZWplY3RzIDQ0LjFrLlxuICAgIGNvbnN0IGNmZyA9XG4gICAgICBvcHRzLmtpbmQgPT09IFwibXA0XCJcbiAgICAgICAgPyB7XG4gICAgICAgICAgICBvdXRTYW1wbGVSYXRlOiA0NF8xMDAsXG4gICAgICAgICAgICBvdXRTYW1wbGVGbXQ6IEFWX1NBTVBMRV9GTVRfRkxUUCxcbiAgICAgICAgICAgIGNvZGVjTmFtZTogRkZfRU5DT0RFUl9BQUMsXG4gICAgICAgICAgfVxuICAgICAgICA6IHtcbiAgICAgICAgICAgIG91dFNhbXBsZVJhdGU6IDQ4XzAwMCxcbiAgICAgICAgICAgIG91dFNhbXBsZUZtdDogQVZfU0FNUExFX0ZNVF9GTFQsXG4gICAgICAgICAgICBjb2RlY05hbWU6IEZGX0VOQ09ERVJfTElCT1BVUyxcbiAgICAgICAgICB9O1xuICAgIHJldHVybiBBdWRpb0VuY29kZXIuY3JlYXRlKHtcbiAgICAgIC4uLmNmZyxcbiAgICAgIGdsb2JhbEhlYWRlcjogdHJ1ZSxcbiAgICAgIGJpdHJhdGU6IDEyOF8wMDAsXG4gICAgICBtdXhlcixcbiAgICB9KTtcbiAgfVxuXG4gIHNldElucHV0UmF0ZShzYW1wbGVSYXRlOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9zLmF1ZGlvPy5zZXRJbnB1dFJhdGUoc2FtcGxlUmF0ZSk7XG4gIH1cblxuICBhc3luYyBlbmNvZGVCR1JBKGJncmFGcmFtZTogRnJhbWUpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IGh3VmlkZW8sIG11eGVyIH0gPSB0aGlzLl9zO1xuICAgIGlmIChod1ZpZGVvKSB7XG4gICAgICByZXR1cm4gaHdWaWRlby5lbmNvZGUoYmdyYUZyYW1lLCBtdXhlcik7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnN3RW5jb2RlKGJncmFGcmFtZSk7XG4gIH1cblxuICBhc3luYyBlbmNvZGVEZWNvZGVkRnJhbWUoc3JjOiBGcmFtZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgaHdWaWRlbywgbXV4ZXIgfSA9IHRoaXMuX3M7XG4gICAgaWYgKGh3VmlkZW8pIHtcbiAgICAgIHJldHVybiBod1ZpZGVvLmVuY29kZShzcmMsIG11eGVyKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuc3dFbmNvZGUoc3JjKTtcbiAgfVxuXG4gIGFzeW5jIGVuY29kZUF1ZGlvKHBjbTogQnVmZmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5fcy5hdWRpbz8uZW5jb2RlKHBjbSwgdGhpcy5fcy5tdXhlcik7XG4gIH1cblxuICBhc3luYyBmbHVzaCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IGh3VmlkZW8sIHZpZGVvLCBhdWRpbywgbXV4ZXIgfSA9IHRoaXMuX3M7XG4gICAgYXdhaXQgYXVkaW8/LmZsdXNoKG11eGVyKTtcbiAgICBpZiAoaHdWaWRlbykge1xuICAgICAgYXdhaXQgaHdWaWRlby5mbHVzaChtdXhlcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF3YWl0IHZpZGVvIS5mbHVzaChtdXhlcik7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgW1N5bWJvbC5hc3luY0Rpc3Bvc2VdKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9kaXNwb3NlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9kaXNwb3NlZCA9IHRydWU7XG4gICAgY29uc3QgeyBtdXhlciwgdmlkZW8sIGh3VmlkZW8sIGF1ZGlvLCBjb2RlYywgaHcsIG93bnNIdyB9ID0gdGhpcy5fcztcbiAgICB2aWRlbz8uW1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgIGh3VmlkZW8/LltTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICBhdWRpbz8uW1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgIGNvZGVjPy5bU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgYXdhaXQgbXV4ZXJbU3ltYm9sLmFzeW5jRGlzcG9zZV0oKTtcbiAgICBpZiAob3duc0h3KSB7XG4gICAgICBodz8uZGlzcG9zZSgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc3dFbmNvZGUoc3JjOiBGcmFtZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgdmlkZW8sIGNvZGVjLCBtdXhlciB9ID0gdGhpcy5fcztcbiAgICBvayhjb2RlYz8uc3dzLCBcInN3cyBub3QgaW5pdGlhbGl6ZWRcIik7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGNvZGVjLmRzdC5tYWtlV3JpdGFibGUoKSwgXCJzaW5rRHN0Lm1ha2VXcml0YWJsZVwiKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgY29kZWMuc3dzLnNjYWxlRnJhbWUoY29kZWMuZHN0LCBzcmMpLCBcInNpbmtTd3Muc2NhbGVGcmFtZVwiKTtcbiAgICBhd2FpdCB2aWRlbyEuZW5jb2RlKGNvZGVjLmRzdCwgbXV4ZXIpO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzAxLlxuXG5pbXBvcnQgeyBGRm1wZWdFcnJvciwgdHlwZSBGcmFtZSB9IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQgeyBIYXJkd2FyZUNvbnRleHQgfSBmcm9tIFwibm9kZS1hdi9hcGlcIjtcbmltcG9ydCB7IEFWX1BJWF9GTVRfQkdSQSwgRkZfSFdERVZJQ0VfVFlQRV9DVURBLCBGRl9IV0RFVklDRV9UWVBFX1ZJREVPVE9PTEJPWCB9IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuXG5pbXBvcnQgeyBDb25jdXJyZW5jeUxpbWl0ZXIgfSBmcm9tIFwiLi4vbGltaXRlclwiO1xuaW1wb3J0IHsgQ29kZWNTdGF0ZSB9IGZyb20gXCIuL2NvZGVjXCI7XG5pbXBvcnQgeyBtYWtlRnJhbWUgfSBmcm9tIFwiLi9taXNjXCI7XG5pbXBvcnQgeyBPdXRwdXRTaW5rIH0gZnJvbSBcIi4vc2lua1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEVuY29kZXJQaXBlbGluZU9wdGlvbnMge1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgZnBzOiBudW1iZXI7XG4gIG91dEZpbGU6IHN0cmluZztcbiAgd2l0aEF1ZGlvPzogYm9vbGVhbjtcbiAgZGlzYWJsZUh3Q29kZWM/OiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgUGlwZWxpbmVTdGF0ZSB7XG4gIHNpbmtzOiBPdXRwdXRTaW5rW107XG4gIHNoYXJlZEh3PzogSGFyZHdhcmVDb250ZXh0O1xuICBsaW1pdGVyOiBDb25jdXJyZW5jeUxpbWl0ZXI7XG4gIHBuZ0NvZGVjPzogQ29kZWNTdGF0ZTtcbiAgb3V0RmlsZXM6IHN0cmluZ1tdO1xuICBvcHRzOiBFbmNvZGVyUGlwZWxpbmVPcHRpb25zO1xufVxuXG5leHBvcnQgY2xhc3MgRW5jb2RlclBpcGVsaW5lIHtcbiAgcHJpdmF0ZSBfczogUGlwZWxpbmVTdGF0ZTtcbiAgcHJpdmF0ZSBfZGlzcG9zZWQgPSBmYWxzZTtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHM6IFBpcGVsaW5lU3RhdGUpIHtcbiAgICB0aGlzLl9zID0gcztcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBjcmVhdGUob3B0czogRW5jb2RlclBpcGVsaW5lT3B0aW9ucyk6IFByb21pc2U8RW5jb2RlclBpcGVsaW5lPiB7XG4gICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0LCBmcHMsIG91dEZpbGUsIHdpdGhBdWRpbyA9IGZhbHNlLCBkaXNhYmxlSHdDb2RlYyA9IGZhbHNlIH0gPSBvcHRzO1xuICAgIGNvbnN0IG91dEZpbGVzID0gb3V0RmlsZVxuICAgICAgLnNwbGl0KFwiLFwiKVxuICAgICAgLm1hcCgocCkgPT4gcC50cmltKCkpXG4gICAgICAuZmlsdGVyKEJvb2xlYW4pO1xuICAgIGlmIChvdXRGaWxlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIm91dEZpbGUgbXVzdCBjb250YWluIGF0IGxlYXN0IG9uZSBwYXRoXCIpO1xuICAgIH1cblxuICAgIGNvbnN0IGtpbmRzID0gb3V0RmlsZXMubWFwKChwKSA9PiBPdXRwdXRTaW5rLmtpbmRGcm9tUGF0aChwKSk7XG4gICAgY29uc3QgbmVlZHNNcDRIdyA9ICFkaXNhYmxlSHdDb2RlYyAmJiBraW5kcy5pbmNsdWRlcyhcIm1wNFwiKTtcbiAgICAvLyBQYXJ0aWFsLWNvbnN0cnVjdGlvbiBzYWZldHk6IGRpc3Bvc2Ugc2hhcmVkSHcgKyBhbnkgc2lua3MgYWxyZWFkeSBidWlsdCBpZiBhIGxhdGVyIHNpbmsgdGhyb3dzOyBtb3ZlKCkgZGlzb3ducyBvbiBzdWNjZXNzLlxuICAgIGF3YWl0IHVzaW5nIHN0YWNrID0gbmV3IEFzeW5jRGlzcG9zYWJsZVN0YWNrKCk7XG4gICAgY29uc3Qgc2hhcmVkSHcgPSBuZWVkc01wNEh3ID8gKEhhcmR3YXJlQ29udGV4dC5hdXRvKCkgPz8gdW5kZWZpbmVkKSA6IHVuZGVmaW5lZDtcbiAgICBpZiAoc2hhcmVkSHcpIHtcbiAgICAgIHN0YWNrLnVzZShzaGFyZWRIdyk7XG4gICAgfVxuICAgIGNvbnN0IGlzSHdBbHBoYUNhcGFibGUgPVxuICAgICAgc2hhcmVkSHc/LmRldmljZVR5cGVOYW1lID09PSBGRl9IV0RFVklDRV9UWVBFX1ZJREVPVE9PTEJPWCB8fCBzaGFyZWRIdz8uZGV2aWNlVHlwZU5hbWUgPT09IEZGX0hXREVWSUNFX1RZUEVfQ1VEQTtcblxuICAgIGNvbnN0IHNpbmtzOiBPdXRwdXRTaW5rW10gPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG91dEZpbGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBzaW5rID0gYXdhaXQgT3V0cHV0U2luay5jcmVhdGUoe1xuICAgICAgICBvdXRGaWxlOiBvdXRGaWxlc1tpXSEsXG4gICAgICAgIGtpbmQ6IGtpbmRzW2ldISxcbiAgICAgICAgd2lkdGgsXG4gICAgICAgIGhlaWdodCxcbiAgICAgICAgZnBzLFxuICAgICAgICB3aXRoQXVkaW8sXG4gICAgICAgIGRpc2FibGVId0NvZGVjLFxuICAgICAgICBzaGFyZWRIdzoga2luZHNbaV0gPT09IFwibXA0XCIgJiYgaXNId0FscGhhQ2FwYWJsZSA/IHNoYXJlZEh3IDogdW5kZWZpbmVkLFxuICAgICAgfSk7XG4gICAgICBzdGFjay51c2Uoc2luayk7XG4gICAgICBzaW5rcy5wdXNoKHNpbmspO1xuICAgIH1cblxuICAgIHN0YWNrLm1vdmUoKTtcbiAgICByZXR1cm4gbmV3IEVuY29kZXJQaXBlbGluZSh7IHNpbmtzLCBzaGFyZWRIdywgbGltaXRlcjogbmV3IENvbmN1cnJlbmN5TGltaXRlcigxKSwgb3V0RmlsZXMsIG9wdHMgfSk7XG4gIH1cblxuICBzZXR1cEF1ZGlvKHNhbXBsZVJhdGU6IG51bWJlcik6IHZvaWQge1xuICAgIGZvciAoY29uc3Qgc2luayBvZiB0aGlzLl9zLnNpbmtzKSB7XG4gICAgICBzaW5rLnNldElucHV0UmF0ZShzYW1wbGVSYXRlKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBlbmNvZGVCR1JBKGlucHV0OiBCdWZmZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLl9zLmxpbWl0ZXIuc2NoZWR1bGUoYXN5bmMgKCkgPT4ge1xuICAgICAgdXNpbmcgZnJhbWUgPSB0aGlzLmJncmFGcmFtZShpbnB1dCk7XG4gICAgICBhd2FpdCBQcm9taXNlLmFsbCh0aGlzLl9zLnNpbmtzLm1hcCgoc2luaykgPT4gc2luay5lbmNvZGVCR1JBKGZyYW1lKSkpO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZW5jb2RlUE5HKHBuZ0RhdGE6IEJ1ZmZlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuX3MubGltaXRlci5zY2hlZHVsZShhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IHRoaXMuX3Mub3B0cztcbiAgICAgIHRoaXMuX3MucG5nQ29kZWMgPz89IGF3YWl0IENvZGVjU3RhdGUuY3JlYXRlKHdpZHRoLCBoZWlnaHQpO1xuICAgICAgY29uc3Qgc3JjID0gYXdhaXQgdGhpcy5fcy5wbmdDb2RlYy5kZWNvZGVQTkcocG5nRGF0YSk7XG4gICAgICBmb3IgKGNvbnN0IHNpbmsgb2YgdGhpcy5fcy5zaW5rcykge1xuICAgICAgICBhd2FpdCBzaW5rLmVuY29kZURlY29kZWRGcmFtZShzcmMpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZW5jb2RlQXVkaW8ocGNtOiBCdWZmZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLl9zLmxpbWl0ZXIuc2NoZWR1bGUoYXN5bmMgKCkgPT4ge1xuICAgICAgZm9yIChjb25zdCBzaW5rIG9mIHRoaXMuX3Muc2lua3MpIHtcbiAgICAgICAgYXdhaXQgc2luay5lbmNvZGVBdWRpbyhwY20pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZmluaXNoKCk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5fcy5saW1pdGVyLmRyYWluKCk7XG4gICAgICBmb3IgKGNvbnN0IHNpbmsgb2YgdGhpcy5fcy5zaW5rcykge1xuICAgICAgICBhd2FpdCBzaW5rLmZsdXNoKCk7XG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGF3YWl0IHRoaXMuZnJlZSgpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fcy5vdXRGaWxlcztcbiAgfVxuXG4gIGFzeW5jIFtTeW1ib2wuYXN5bmNEaXNwb3NlXSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fZGlzcG9zZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgYXdhaXQgdGhpcy5fcy5saW1pdGVyLmRyYWluKCk7XG4gICAgYXdhaXQgdGhpcy5mcmVlKCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGZyZWUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX2Rpc3Bvc2VkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX2Rpc3Bvc2VkID0gdHJ1ZTtcbiAgICBmb3IgKGNvbnN0IHNpbmsgb2YgdGhpcy5fcy5zaW5rcykge1xuICAgICAgYXdhaXQgc2lua1tTeW1ib2wuYXN5bmNEaXNwb3NlXSgpO1xuICAgIH1cbiAgICB0aGlzLl9zLnBuZ0NvZGVjPy5bU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgdGhpcy5fcy5zaGFyZWRIdz8uZGlzcG9zZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBiZ3JhRnJhbWUoaW5wdXQ6IEJ1ZmZlcik6IEZyYW1lIHtcbiAgICAvLyBQYXJ0aWFsLWNvbnN0cnVjdGlvbiBzYWZldHk6IGZyZWUgZnJhbWUgaWYgZnJvbUJ1ZmZlciB0aHJvd3MgYmVmb3JlIHdlIHJldHVybiBpdC5cbiAgICB1c2luZyBzdGFjayA9IG5ldyBEaXNwb3NhYmxlU3RhY2soKTtcbiAgICBjb25zdCBmcmFtZSA9IHN0YWNrLnVzZShtYWtlRnJhbWUodGhpcy5fcy5vcHRzLndpZHRoLCB0aGlzLl9zLm9wdHMuaGVpZ2h0LCBBVl9QSVhfRk1UX0JHUkEpKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoZnJhbWUuZnJvbUJ1ZmZlcihpbnB1dCksIFwiYmdyYUZyYW1lLmZyb21CdWZmZXJcIik7XG4gICAgc3RhY2subW92ZSgpO1xuICAgIHJldHVybiBmcmFtZTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMy8yMy5cblxuLyoqXG4gKiBGcmFtZSBkcm9wIHF1YWxpdHkgc2NvcmUgKDAgPSBwZXJmZWN0LCAxID0gd29yc3QpLlxuICpcbiAqIENvbWJpbmVzIHR3byBkaW1lbnNpb25zOlxuICogLSBHbG9iYWw6IG92ZXJhbGwgZHJvcCByYXRlIGFjcm9zcyB0aGUgdGltZWxpbmVcbiAqIC0gTG9jYWw6IHBlcmNlcHR1YWwgc2V2ZXJpdHkgb2YgY29uc2VjdXRpdmUgZHJvcHMgKGJ1cnN0cylcbiAqXG4gKiBVc2VzIGNvbXBsZW1lbnRhcnkgbXVsdGlwbGljYXRpb246IHNjb3JlID0gMSAtICgxLWcpKDEtbClcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGcmFtZURyb3BTY29yZSB7XG4gIGdsb2JhbDogbnVtYmVyO1xuICBsb2NhbDogbnVtYmVyO1xuICBqYW5rOiBudW1iZXI7XG4gIGV4cGVjdGVkOiBudW1iZXI7XG4gIGFjdHVhbDogbnVtYmVyO1xuICBtYXhCdXJzdDogbnVtYmVyO1xufVxuXG5leHBvcnQgY2xhc3MgRnJhbWVEcm9wU3RhdHMge1xuICBwcml2YXRlIHJlYWRvbmx5IF9mcHM6IG51bWJlcjtcbiAgcHJpdmF0ZSBfYWN0dWFsID0gMDtcbiAgcHJpdmF0ZSBfY3VycmVudEJ1cnN0ID0gMDtcbiAgcHJpdmF0ZSBfYnVyc3RzOiBudW1iZXJbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKGZwczogbnVtYmVyKSB7XG4gICAgdGhpcy5fZnBzID0gZnBzO1xuICB9XG5cbiAgLyoqIENhbGwgd2hlbiBhIGZyYW1lIGlzIGFjdHVhbGx5IHdyaXR0ZW4gdG8gdGhlIGVuY29kZXIuICovXG4gIHdyb3RlKGNvdW50ID0gMSk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9jdXJyZW50QnVyc3QgPiAwKSB7XG4gICAgICB0aGlzLl9idXJzdHMucHVzaCh0aGlzLl9jdXJyZW50QnVyc3QpO1xuICAgICAgdGhpcy5fY3VycmVudEJ1cnN0ID0gMDtcbiAgICB9XG4gICAgdGhpcy5fYWN0dWFsICs9IGNvdW50O1xuICB9XG5cbiAgLyoqIENhbGwgd2hlbiBhIGZyYW1lIGlzIGRyb3BwZWQuICovXG4gIGRyb3BwZWQoY291bnQgPSAxKTogdm9pZCB7XG4gICAgdGhpcy5fY3VycmVudEJ1cnN0ICs9IGNvdW50O1xuICB9XG5cbiAgLyoqIEZpbmFsaXplIGFuZCByZXR1cm4gdGhlIHNjb3JlLiAqL1xuICBmaW5hbGl6ZSgpOiBGcmFtZURyb3BTY29yZSB7XG4gICAgaWYgKHRoaXMuX2N1cnJlbnRCdXJzdCA+IDApIHtcbiAgICAgIHRoaXMuX2J1cnN0cy5wdXNoKHRoaXMuX2N1cnJlbnRCdXJzdCk7XG4gICAgICB0aGlzLl9jdXJyZW50QnVyc3QgPSAwO1xuICAgIH1cblxuICAgIGxldCB0b3RhbERyb3BwZWQgPSAwO1xuICAgIGxldCBsb2NhbFN1bSA9IDA7XG4gICAgbGV0IG1heEJ1cnN0ID0gMDtcbiAgICBmb3IgKGNvbnN0IGJ1cnN0IG9mIHRoaXMuX2J1cnN0cykge1xuICAgICAgdG90YWxEcm9wcGVkICs9IGJ1cnN0O1xuICAgICAgbWF4QnVyc3QgPSBNYXRoLm1heChtYXhCdXJzdCwgYnVyc3QpO1xuICAgICAgY29uc3QgcGVyY2VwdGlibGUgPSBNYXRoLm1heCgwLCBidXJzdCAtIDEpO1xuICAgICAgbG9jYWxTdW0gKz0gKHBlcmNlcHRpYmxlIC8gdGhpcy5fZnBzKSAqKiAyO1xuICAgIH1cblxuICAgIGNvbnN0IGV4cGVjdGVkID0gdGhpcy5fYWN0dWFsICsgdG90YWxEcm9wcGVkO1xuICAgIGNvbnN0IGcgPSBleHBlY3RlZCA+IDAgPyB0b3RhbERyb3BwZWQgLyBleHBlY3RlZCA6IDA7XG4gICAgY29uc3QgbCA9IE1hdGgubWluKDEsIGxvY2FsU3VtKTtcbiAgICBjb25zdCBzY29yZSA9IDEgLSAoMSAtIGcpICogKDEgLSBsKTtcblxuICAgIHJldHVybiB7IGdsb2JhbDogZywgbG9jYWw6IGwsIGphbms6IHNjb3JlLCBleHBlY3RlZCwgYWN0dWFsOiB0aGlzLl9hY3R1YWwsIG1heEJ1cnN0IH07XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDYuXG5cbmltcG9ydCB0eXBlIHsgTmF0aXZlSW1hZ2UsIFNpemUgfSBmcm9tIFwiZWxlY3Ryb25cIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzRW1wdHkoaW1hZ2U6IE5hdGl2ZUltYWdlKSB7XG4gIGNvbnN0IHNpemUgPSBpbWFnZS5nZXRTaXplKCk7XG4gIGlmIChzaXplLndpZHRoID09PSAwIHx8IHNpemUuaGVpZ2h0ID09PSAwKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGltYWdlLmlzRW1wdHkoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNpemVFcXVhbHMoYTogU2l6ZSwgYjogU2l6ZSkge1xuICByZXR1cm4gYS53aWR0aCA9PT0gYi53aWR0aCAmJiBhLmhlaWdodCA9PT0gYi5oZWlnaHQ7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAzLzAyLlxuXG5pbXBvcnQgdHlwZSB7IFdlYkNvbnRlbnRzIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgdHlwZSB7IEVuY29kZXJQaXBlbGluZSB9IGZyb20gXCIuLi9iYXNlL2VuY29kZXIvcGlwZWxpbmVcIjtcblxuZXhwb3J0IGNvbnN0IEFVRElPX01FVEFfQ0hBTk5FTCA9IFwiYXVkaW8tbWV0YVwiO1xuZXhwb3J0IGNvbnN0IEFVRElPX0NIVU5LX0NIQU5ORUwgPSBcImF1ZGlvLWNodW5rXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXVkaW9MaXN0ZW5lck9wdGlvbnMge1xuICB3YzogV2ViQ29udGVudHM7XG4gIGVuY29kZXI6IEVuY29kZXJQaXBlbGluZTtcbiAgZ2V0VmlkZW9UaW1lTXM6ICgpID0+IG51bWJlcjtcbiAgb25FcnJvcjogKGVycm9yOiBFcnJvcikgPT4gdm9pZDtcbn1cblxuZXhwb3J0IHR5cGUgQXVkaW9EaXNwb3NhbCA9ICgpID0+IHZvaWQ7XG5cbmV4cG9ydCBmdW5jdGlvbiBhdHRhY2hBdWRpb0xpc3RlbmVycyh7IHdjLCBlbmNvZGVyLCBnZXRWaWRlb1RpbWVNcywgb25FcnJvciB9OiBBdWRpb0xpc3RlbmVyT3B0aW9ucyk6IEF1ZGlvRGlzcG9zYWwge1xuICBjb25zdCBvbk1ldGEgPSBhc3luYyAoX2U6IHVua25vd24sIGRhdGE6IHsgc2FtcGxlUmF0ZTogbnVtYmVyIH0pID0+IHtcbiAgICBjb25zdCBzYW1wbGVSYXRlID0gZGF0YS5zYW1wbGVSYXRlO1xuICAgIGNvbnN0IHN0YXJ0TXMgPSBnZXRWaWRlb1RpbWVNcygpO1xuICAgIGVuY29kZXIuc2V0dXBBdWRpbyhzYW1wbGVSYXRlKTtcbiAgICBjb25zdCBzaWxlbmNlU2FtcGxlcyA9IE1hdGguY2VpbCgoc3RhcnRNcyAqIHNhbXBsZVJhdGUpIC8gMTAwMCk7XG4gICAgaWYgKHNpbGVuY2VTYW1wbGVzIDw9IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGVuY29kZXIuZW5jb2RlQXVkaW8oQnVmZmVyLmFsbG9jKHNpbGVuY2VTYW1wbGVzICogMiAqIDQpKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgb25FcnJvcihlcnJvciBhcyBFcnJvcik7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IG9uQ2h1bmsgPSBhc3luYyAoX2U6IHVua25vd24sIGJ1ZmZlcjogQnVmZmVyKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGVuY29kZXIuZW5jb2RlQXVkaW8oYnVmZmVyKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgb25FcnJvcihlcnJvciBhcyBFcnJvcik7XG4gICAgfVxuICB9O1xuXG4gIHdjLmlwYy5vbihBVURJT19NRVRBX0NIQU5ORUwsIG9uTWV0YSk7XG4gIHdjLmlwYy5vbihBVURJT19DSFVOS19DSEFOTkVMLCBvbkNodW5rKTtcblxuICByZXR1cm4gKCkgPT4ge1xuICAgIHdjLmlwYy5yZW1vdmVMaXN0ZW5lcihBVURJT19NRVRBX0NIQU5ORUwsIG9uTWV0YSk7XG4gICAgd2MuaXBjLnJlbW92ZUxpc3RlbmVyKEFVRElPX0NIVU5LX0NIQU5ORUwsIG9uQ2h1bmspO1xuICB9O1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wNS5cblxuaW1wb3J0IHsgc2V0VGltZW91dCB9IGZyb20gXCJub2RlOnRpbWVycy9wcm9taXNlc1wiO1xuaW1wb3J0IHsgc2xlZXAgfSBmcm9tIFwiLi90aW1pbmdcIjtcblxuZXhwb3J0IGludGVyZmFjZSBSZXRyeU9wdGlvbnM8QXJncyBleHRlbmRzIHVua25vd25bXSwgUmV0PiB7XG4gIGZuOiAoLi4uYXJnczogQXJncykgPT4gUHJvbWlzZTxSZXQ+O1xuICBtYXhBdHRlbXB0cz86IG51bWJlcjtcbiAgdGltZW91dD86IG51bWJlcjtcbiAgLy8gQWJvcnQgYmFpbHMgaW1tZWRpYXRlbHkgaW5zdGVhZCBvZiByZXRyeWluZzsgc2lnbmFsIGlzIG5vdCBhdXRvLXRocmVhZGVkIGludG8gZm4g4oCUIGNhbGxlciB3aXJlcyBpdCAoZmV0Y2gsIFMzIHNlbmQpLlxuICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVzZVJldHJ5PEFyZ3MgZXh0ZW5kcyB1bmtub3duW10sIFJldD4oe1xuICBmbixcbiAgbWF4QXR0ZW1wdHMgPSAzLFxuICB0aW1lb3V0LFxuICBzaWduYWwsXG59OiBSZXRyeU9wdGlvbnM8QXJncywgUmV0Pikge1xuICBjb25zdCB0aW1lb3V0RXJyb3IgPSBuZXcgRXJyb3IoYHRpbWVvdXQgb3ZlciAke3RpbWVvdXR9bXNgKTtcbiAgcmV0dXJuIGFzeW5jICguLi5hcmdzOiBBcmdzKSA9PiB7XG4gICAgbGV0IGF0dGVtcHQgPSAwO1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBzaWduYWw/LnRocm93SWZBYm9ydGVkKCk7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBwcm9taXNlcyA9IFtmbiguLi5hcmdzKV07XG4gICAgICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICAgICAgcHJvbWlzZXMucHVzaChcbiAgICAgICAgICAgIHNldFRpbWVvdXQodGltZW91dCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgIHRocm93IHRpbWVvdXRFcnJvcjtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGF3YWl0IFByb21pc2UucmFjZShwcm9taXNlcyk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHNpZ25hbD8udGhyb3dJZkFib3J0ZWQoKTtcbiAgICAgICAgYXR0ZW1wdCsrO1xuICAgICAgICBpZiAoYXR0ZW1wdCA+PSBtYXhBdHRlbXB0cykge1xuICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgc2xlZXAoMiAqKiBhdHRlbXB0ICogMTAwICsgTWF0aC5yYW5kb20oKSAqIDEwMCk7XG4gICAgICB9XG4gICAgfVxuICB9O1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wOS5cblxuY29uc3QgU1VQUE9SVEVEX1BST1RPQ09MUyA9IFtcImZpbGU6XCIsIFwiaHR0cDpcIiwgXCJodHRwczpcIiwgXCJkYXRhOlwiXTtcbmNvbnN0IFNPVVJDRV9QQVRURVJOID0gL14oZmlsZTp8aHR0cHM/OnxkYXRhOikvO1xuXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tIVE1MKHNvdXJjZTogc3RyaW5nKTogdm9pZCB7XG4gIGlmIChTT1VSQ0VfUEFUVEVSTi50ZXN0KHNvdXJjZSkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBwcm90b2NvbCA9IGAke3NvdXJjZS5zcGxpdChcIjpcIilbMF19OmA7XG4gIGNvbnN0IG1lc3NhZ2UgPSBTVVBQT1JURURfUFJPVE9DT0xTLmluY2x1ZGVzKHByb3RvY29sKVxuICAgID8gYHVuc3VwcG9ydGVkIHByb3RvY29sOiAke3Byb3RvY29sfSwgZXhwZWN0ZWQgJHtTVVBQT1JURURfUFJPVE9DT0xTLmpvaW4oXCIsIFwiKX1gXG4gICAgOiBgaW52YWxpZCBzb3VyY2UgZm9ybWF0LCBleHBlY3RlZCAke1NVUFBPUlRFRF9QUk9UT0NPTFMuam9pbihcIiwgXCIpfWA7XG5cbiAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMy8xMC5cblxuZXhwb3J0IGludGVyZmFjZSBXYWl0T3B0aW9ucyB7XG4gIHRpbWVvdXQ6IG51bWJlcjtcbiAgb25UaW1lb3V0PzogKCkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGNsYXNzIFdhaXRhYmxlRXZlbnQge1xuICBwcml2YXRlIF9wcm9taXNlPzogUHJvbWlzZTx2b2lkPjtcbiAgcHJpdmF0ZSBfcmVzb2x2ZT86ICgpID0+IHZvaWQ7XG4gIHByaXZhdGUgX3RpbWVvdXRUb2tlbj86IE5vZGVKUy5UaW1lb3V0O1xuXG4gIHdhaXQob3B0aW9ucz86IFdhaXRPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX3Byb21pc2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcImFscmVhZHkgd2FpdGluZ1wiKTtcbiAgICB9XG4gICAgdGhpcy5fcHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICB0aGlzLl9yZXNvbHZlID0gcmVzb2x2ZTtcbiAgICAgIGlmIChvcHRpb25zPy50aW1lb3V0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5fdGltZW91dFRva2VuID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgb3B0aW9ucy5vblRpbWVvdXQ/LigpO1xuICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfSwgb3B0aW9ucy50aW1lb3V0KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5fcHJvbWlzZTtcbiAgfVxuXG4gIHNpZ25hbCgpIHtcbiAgICBjbGVhclRpbWVvdXQodGhpcy5fdGltZW91dFRva2VuKTtcbiAgICB0aGlzLl9wcm9taXNlID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuX3Jlc29sdmU/LigpO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA5LlxuXG5pbXBvcnQgeyBVUkwgfSBmcm9tIFwibm9kZTp1cmxcIjtcbmltcG9ydCB0eXBlIHsgQnJvd3NlcldpbmRvdyB9IGZyb20gXCJlbGVjdHJvblwiO1xuaW1wb3J0IHsgQ29uY3VycmVuY3lMaW1pdGVyIH0gZnJvbSBcIi4uL2Jhc2UvbGltaXRlclwiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4uL2Jhc2UvbG9nZ2luZ1wiO1xuaW1wb3J0IHsgV2FpdGFibGVFdmVudCB9IGZyb20gXCIuLi9iYXNlL3dhaXRhYmxlX2V2ZW50XCI7XG5cbmNvbnN0IFRBRyA9IFwiW05ldHdvcmtdXCI7XG5cbmNvbnN0IG1hcCA9IG5ldyBNYXAoW1xuICBbYGpzc3otYm9zcy5oZHNsYi5jb21gLCBganNzei1ib3NzLmJpbGliaWxpLmNvYF0sIC8vXG4gIFtgYm9zcy5oZHNsYi5jb21gLCBgc2hqZC1ib3NzLmJpbGliaWxpLmNvYF0sXG5dKTtcblxuY29uc3QgTE9DQUxfU0NIRU1FUyA9IFtcInB1cDpcIiwgXCJwdXAtZnJhbWU6XCIsIFwiZmlsZTpcIiwgXCJkYXRhOlwiLCBcImJsb2I6XCIsIFwiY2hyb21lLWV4dGVuc2lvbjpcIiwgXCJkZXZ0b29sczpcIl07XG5cbmZ1bmN0aW9uIGlzTG9jYWxTY2hlbWUodXJsOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgZm9yIChjb25zdCBzIG9mIExPQ0FMX1NDSEVNRVMpIHtcbiAgICBpZiAodXJsLnN0YXJ0c1dpdGgocykpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm94aWVkVXJsKHVybDogc3RyaW5nKSB7XG4gIGlmICghdXJsLnN0YXJ0c1dpdGgoXCJodHRwXCIpKSB7XG4gICAgcmV0dXJuIHVybDtcbiAgfVxuICBjb25zdCBwYXJzZWQgPSBuZXcgVVJMKHVybCk7XG4gIGNvbnN0IHRhcmdldCA9IG1hcC5nZXQocGFyc2VkLmhvc3RuYW1lKTtcbiAgaWYgKCF0YXJnZXQpIHtcbiAgICByZXR1cm4gdXJsO1xuICB9XG4gIHBhcnNlZC5ob3N0bmFtZSA9IHRhcmdldDtcbiAgcGFyc2VkLnByb3RvY29sID0gXCJodHRwOlwiO1xuICByZXR1cm4gcGFyc2VkLnRvU3RyaW5nKCk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmV0d29ya09wdGlvbnMge1xuICBzb3VyY2U6IHN0cmluZztcbiAgd2luZG93OiBCcm93c2VyV2luZG93O1xuICB1c2VJbm5lclByb3h5PzogYm9vbGVhbjtcbiAgc3R1Yk1lZGlhPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEludGVyY2VwdG9yKHsgc291cmNlLCB3aW5kb3csIHVzZUlubmVyUHJveHksIHN0dWJNZWRpYSB9OiBOZXR3b3JrT3B0aW9ucykge1xuICBjb25zdCByZXEgPSB3aW5kb3cud2ViQ29udGVudHMuc2Vzc2lvbi53ZWJSZXF1ZXN0O1xuICBjb25zdCBsaW1pdGVyID0gbmV3IENvbmN1cnJlbmN5TGltaXRlcigyNTYpO1xuICBjb25zdCBldmVudHMgPSBuZXcgTWFwPHN0cmluZywgV2FpdGFibGVFdmVudD4oKTtcblxuICBhc3luYyBmdW5jdGlvbiB3YWl0KGtleTogc3RyaW5nLCBvblRpbWVvdXQ/OiAoKSA9PiB2b2lkKSB7XG4gICAgY29uc3QgZXZlbnQgPSBuZXcgV2FpdGFibGVFdmVudCgpO1xuICAgIGV2ZW50cy5zZXQoa2V5LCBldmVudCk7XG4gICAgYXdhaXQgZXZlbnQud2FpdCh7IHRpbWVvdXQ6IDVfMDAwLCBvblRpbWVvdXQgfSkuZmluYWxseSgoKSA9PiBldmVudHMuZGVsZXRlKGtleSkpO1xuICB9XG5cbiAgZnVuY3Rpb24gc2lnbmFsKGtleTogc3RyaW5nKSB7XG4gICAgZXZlbnRzLmdldChrZXkpPy5zaWduYWwoKTtcbiAgfVxuXG4gIHJlcS5vbkJlZm9yZVJlcXVlc3QoKGRldGFpbHMsIGNhbGxiYWNrKSA9PiB7XG4gICAgY29uc3QgdXJsID0gZGV0YWlscy51cmw7XG4gICAgLy8gU3dhcCBtZWRpYSBmb3IgYSBmcmFtZS1zZXJ2ZXIgc3R1YiAodHJ1ZSBpbnRyaW5zaWMgc2l6ZS9kdXJhdGlvbikgc28gQmxpbmsgbGF5cyBvdXQgbGlrZSBDaHJvbWUuXG4gICAgaWYgKHN0dWJNZWRpYSAmJiBkZXRhaWxzLnJlc291cmNlVHlwZSA9PT0gXCJtZWRpYVwiICYmICF1cmwuc3RhcnRzV2l0aChcInB1cC1mcmFtZTpcIikpIHtcbiAgICAgIGNhbGxiYWNrKHtcbiAgICAgICAgcmVkaXJlY3RVUkw6IGBwdXAtZnJhbWU6Ly9zdHViP3NyYz0ke2VuY29kZVVSSUNvbXBvbmVudCh1cmwpfWAsXG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcHJveGllZCA9IHVzZUlubmVyUHJveHkgPyBwcm94aWVkVXJsKHVybCkgOiB1cmw7XG4gICAgbGltaXRlci5zY2hlZHVsZSgoKSA9PiB7XG4gICAgICBjb25zdCBrZXkgPSBgJHt3aW5kb3cuaWR9XyR7ZGV0YWlscy5pZH1gO1xuICAgICAgbG9nZ2VyLmRlYnVnKFRBRywgYHN0YXJ0OmAsIHtcbiAgICAgICAga2V5LFxuICAgICAgICB1cmwsXG4gICAgICAgIHByb3hpZWQsXG4gICAgICAgIG1ldGhvZDogZGV0YWlscy5tZXRob2QsXG4gICAgICAgIHNvdXJjZSxcbiAgICAgICAgc3RhdHM6IGxpbWl0ZXIuc3RhdHMsXG4gICAgICB9KTtcbiAgICAgIGlmIChwcm94aWVkID09PSB1cmwpIHtcbiAgICAgICAgY2FsbGJhY2soeyBjYW5jZWw6IGZhbHNlIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2FsbGJhY2soeyBjYW5jZWw6IGZhbHNlLCByZWRpcmVjdFVSTDogcHJveGllZCB9KTtcbiAgICAgIH1cbiAgICAgIGlmIChpc0xvY2FsU2NoZW1lKHVybCkpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHdhaXQoa2V5LCAoKSA9PiB7XG4gICAgICAgIGxvZ2dlci53YXJuKFRBRywgYG1heWJlIHRpbWVvdXQ6YCwge1xuICAgICAgICAgIGtleSxcbiAgICAgICAgICB1cmwsXG4gICAgICAgICAgcHJveGllZCxcbiAgICAgICAgICBtZXRob2Q6IGRldGFpbHMubWV0aG9kLFxuICAgICAgICAgIHNvdXJjZSxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgcmVxLm9uSGVhZGVyc1JlY2VpdmVkKCh7IHJlc3BvbnNlSGVhZGVycyB9LCBjYWxsYmFjaykgPT4ge1xuICAgIGRlbGV0ZSByZXNwb25zZUhlYWRlcnM/LltcIngtZnJhbWUtb3B0aW9uc1wiXTtcbiAgICBkZWxldGUgcmVzcG9uc2VIZWFkZXJzPy5bXCJYLUZyYW1lLU9wdGlvbnNcIl07XG4gICAgZGVsZXRlIHJlc3BvbnNlSGVhZGVycz8uW1wiY29udGVudC1zZWN1cml0eS1wb2xpY3lcIl07XG4gICAgZGVsZXRlIHJlc3BvbnNlSGVhZGVycz8uW1wiQ29udGVudC1TZWN1cml0eS1Qb2xpY3lcIl07XG4gICAgY2FsbGJhY2soeyBjYW5jZWw6IGZhbHNlLCByZXNwb25zZUhlYWRlcnMgfSk7XG4gIH0pO1xuXG4gIHJlcS5vbkNvbXBsZXRlZCgoZGV0YWlscykgPT4ge1xuICAgIGNvbnN0IGtleSA9IGAke3dpbmRvdy5pZH1fJHtkZXRhaWxzLmlkfWA7XG4gICAgc2lnbmFsKGtleSk7XG4gICAgbG9nZ2VyLmRlYnVnKFRBRywgYGNvbXBsZXRlZDpgLCB7XG4gICAgICBrZXksXG4gICAgICB1cmw6IGRldGFpbHMudXJsLFxuICAgICAgbWV0aG9kOiBkZXRhaWxzLm1ldGhvZCxcbiAgICAgIHN0YXR1c0NvZGU6IGRldGFpbHMuc3RhdHVzQ29kZSxcbiAgICAgIHNvdXJjZSxcbiAgICB9KTtcbiAgfSk7XG5cbiAgcmVxLm9uRXJyb3JPY2N1cnJlZCgoZGV0YWlscykgPT4ge1xuICAgIGNvbnN0IGtleSA9IGAke3dpbmRvdy5pZH1fJHtkZXRhaWxzLmlkfWA7XG4gICAgc2lnbmFsKGtleSk7XG4gICAgY29uc3QgeyB1cmwsIG1ldGhvZCwgZXJyb3IsIHJlc291cmNlVHlwZSB9ID0gZGV0YWlscztcbiAgICAvLyBTdHViYmVkIG1lZGlhIGRvd25ncmFkZXM6IEVSUl9BQk9SVEVEIGlzIGp1c3QgdGhlIGxvYWRlciByZXN0YXJ0aW5nIG9udG8gdGhlIGNyb3NzLXNjaGVtZSByZWRpcmVjdC5cbiAgICBjb25zdCBtZWRpYSA9IHN0dWJNZWRpYSAmJiByZXNvdXJjZVR5cGUgPT09IFwibWVkaWFcIjtcbiAgICBjb25zdCBsZXZlbCA9IG1lZGlhID8gKGVycm9yID09PSBcIm5ldDo6RVJSX0FCT1JURURcIiA/IFwiZGVidWdcIiA6IFwid2FyblwiKSA6IFwiZXJyb3JcIjtcbiAgICBsb2dnZXJbbGV2ZWxdKFRBRywgYGVycm9yOmAsIHsga2V5LCB1cmwsIG1ldGhvZCwgZXJyb3IsIHJlc291cmNlVHlwZSwgc291cmNlIH0pO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVuc2V0SW50ZXJjZXB0b3Iod2luZG93OiBCcm93c2VyV2luZG93KSB7XG4gIGNvbnN0IHJlcSA9IHdpbmRvdy53ZWJDb250ZW50cy5zZXNzaW9uLndlYlJlcXVlc3Q7XG4gIHJlcS5vbkJlZm9yZVJlcXVlc3QobnVsbCk7XG4gIHJlcS5vbkhlYWRlcnNSZWNlaXZlZChudWxsKTtcbiAgcmVxLm9uQ29tcGxldGVkKG51bGwpO1xuICByZXEub25FcnJvck9jY3VycmVkKG51bGwpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8yNy5cblxuaW1wb3J0IHsgQnJvd3NlcldpbmRvdyB9IGZyb20gXCJlbGVjdHJvblwiO1xuaW1wb3J0IHsgcHVwQXVkaW9QcmVsb2FkLCBwdXBJZnJhbWVQcmVsb2FkIH0gZnJvbSBcIi4uL2Jhc2UvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi4vYmFzZS9sb2dnaW5nXCI7XG5pbXBvcnQgeyB1c2VSZXRyeSB9IGZyb20gXCIuLi9iYXNlL3JldHJ5XCI7XG5pbXBvcnQgeyBzbGVlcCB9IGZyb20gXCIuLi9iYXNlL3RpbWluZ1wiO1xuaW1wb3J0IHsgY2hlY2tIVE1MIH0gZnJvbSBcIi4vaHRtbF9jaGVja1wiO1xuaW1wb3J0IHsgcHJveGllZFVybCwgc2V0SW50ZXJjZXB0b3IsIHVuc2V0SW50ZXJjZXB0b3IgfSBmcm9tIFwiLi9uZXR3b3JrXCI7XG5pbXBvcnQgeyBjcmVhdGVTdGVnb1VSTCB9IGZyb20gXCIuL3Byb3RvY29sXCI7XG5pbXBvcnQgdHlwZSB7IElQQ1JlbmRlck9wdGlvbnMgfSBmcm9tIFwiLi9zY2hlbWFcIjtcblxuY29uc3QgVEFHID0gXCJbV2luZG93XVwiO1xuY29uc3QgVElNRU9VVF9FUlJPUiA9IG5ldyBFcnJvcihcIndpbmRvdyB0aW1lb3V0XCIpO1xuY29uc3QgQ09OU09MRV9JR05PUkVTID0gW2AlY0VsZWN0cm9uIFNlY3VyaXR5IFdhcm5pbmdgLCBcIk1peGVkIENvbnRlbnQ6IFRoZSBwYWdlIGF0XCJdO1xuXG5pbnRlcmZhY2UgRmluaXNoT3B0aW9ucyB7XG4gIHNvdXJjZTogc3RyaW5nO1xuICB3aW46IEJyb3dzZXJXaW5kb3c7XG4gIGFjdGlvbjogKCkgPT4gdm9pZDtcbiAgdGltZW91dE1zOiBudW1iZXI7XG4gIHRvbGVyYW50PzogYm9vbGVhbjtcbiAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG59XG5cbmZ1bmN0aW9uIHdhaXRGb3JGaW5pc2goeyBzb3VyY2UsIHdpbiwgYWN0aW9uLCB0aW1lb3V0TXMsIHRvbGVyYW50LCBzaWduYWwgfTogRmluaXNoT3B0aW9ucykge1xuICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGxldCBkb21SZWFkeSA9IGZhbHNlO1xuICAgIC8vIFRvbGVyYW50IHByb2NlZWRzIG9uIGEgcGFydGlhbCBET00gb25seSBhcyBhIHRpbWVvdXQgZmFsbGJhY2sg4oCUIHN0YXJ0aW5nIG9uIGJhcmUgZG9tLXJlYWR5IGxlYXZlcyB0aGUgbG9hZCBwZW5kaW5nIGFuZCB3ZWRnZXMgdmlydHVhbCB0aW1lLlxuICAgIGNvbnN0IHRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IGRvbmUodG9sZXJhbnQgJiYgZG9tUmVhZHkgPyB1bmRlZmluZWQgOiBUSU1FT1VUX0VSUk9SKSwgdGltZW91dE1zKTtcbiAgICBjb25zdCBkb25lID0gKGVycj86IHVua25vd24pID0+IHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBzaWduYWw/LnRocm93SWZBYm9ydGVkKCk7XG4gICAgc2lnbmFsPy5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgKCkgPT4gZG9uZShzaWduYWwucmVhc29uKSwge1xuICAgICAgb25jZTogdHJ1ZSxcbiAgICB9KTtcbiAgICB3aW4ud2ViQ29udGVudHMub25jZShcImRvbS1yZWFkeVwiLCAoKSA9PiB7XG4gICAgICBsb2dnZXIuZGVidWcoVEFHLCBcImRvbS1yZWFkeTpcIiwgeyBzb3VyY2UgfSk7XG4gICAgICBkb21SZWFkeSA9IHRydWU7XG4gICAgfSk7XG4gICAgd2luLndlYkNvbnRlbnRzLm9uY2UoXCJkaWQtc3RvcC1sb2FkaW5nXCIsICgpID0+IHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhUQUcsIFwiZGlkLXN0b3AtbG9hZGluZzpcIiwgeyBzb3VyY2UgfSk7XG4gICAgICBkb25lKCk7XG4gICAgfSk7XG4gICAgd2luLndlYkNvbnRlbnRzLm9uY2UoXCJkaWQtZmFpbC1sb2FkXCIsIChfZSwgY29kZSwgZGVzYywgdXJsKSA9PiB7XG4gICAgICBjb25zdCBtc2cgPSBgZGlkLWZhaWwtbG9hZDogJHtKU09OLnN0cmluZ2lmeSh7IHVybCwgc291cmNlLCBjb2RlLCBkZXNjIH0pfWA7XG4gICAgICBsb2dnZXIuZXJyb3IoVEFHLCBtc2cpO1xuICAgICAgZG9uZShuZXcgRXJyb3IobXNnKSk7XG4gICAgfSk7XG4gICAgd2luLndlYkNvbnRlbnRzLm9uY2UoXCJyZW5kZXItcHJvY2Vzcy1nb25lXCIsIChfZSwgeyBleGl0Q29kZSwgcmVhc29uIH0pID0+IHtcbiAgICAgIGNvbnN0IG1zZyA9IGByZW5kZXItcHJvY2Vzcy1nb25lOiAke0pTT04uc3RyaW5naWZ5KHsgc291cmNlLCBleGl0Q29kZSwgcmVhc29uIH0pfWA7XG4gICAgICBsb2dnZXIuZXJyb3IoVEFHLCBtc2cpO1xuICAgICAgZG9uZShuZXcgRXJyb3IobXNnKSk7XG4gICAgfSk7XG4gICAgYWN0aW9uKCk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGlzcG9zZVdpbmRvdyh3aW46IEJyb3dzZXJXaW5kb3cpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiB7XG4gICAgdW5zZXRJbnRlcmNlcHRvcih3aW4pO1xuICAgIGNvbnN0IHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBsb2dnZXIud2FybihUQUcsIFwiZm9yY2UgY2xvc2VcIik7XG4gICAgICAgIHdpbi5kZXN0cm95KCk7XG4gICAgICB9IGNhdGNoIHt9XG4gICAgICBkb25lKCk7XG4gICAgfSwgMTAwMCk7XG4gICAgY29uc3QgZG9uZSA9ICgpID0+IHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICByZXNvbHZlKCk7XG4gICAgfTtcbiAgICB3aW4ud2ViQ29udGVudHMuc3RvcFBhaW50aW5nKCk7XG4gICAgd2luLndlYkNvbnRlbnRzLmRlYnVnZ2VyLmRldGFjaCgpO1xuICAgIHdpbi5vbmNlKFwiY2xvc2VkXCIsIGRvbmUpO1xuICAgIHdpbi5jbG9zZSgpO1xuICB9KTtcbn1cblxuZXhwb3J0IHR5cGUgV2luZG93Q3JlYXRlZENhbGxiYWNrID0gKHdpbmRvdzogQnJvd3NlcldpbmRvdykgPT4gdm9pZCB8IFByb21pc2U8dm9pZD47XG5cbmV4cG9ydCBpbnRlcmZhY2UgV2luZG93T3B0aW9ucyB7XG4gIHNvdXJjZTogc3RyaW5nO1xuICByZW5kZXJlcjogSVBDUmVuZGVyT3B0aW9ucztcbiAgdG9sZXJhbnQ/OiBib29sZWFuO1xuICBvbkNyZWF0ZWQ/OiBXaW5kb3dDcmVhdGVkQ2FsbGJhY2s7XG4gIHNpZ25hbD86IEFib3J0U2lnbmFsO1xufVxuXG5mdW5jdGlvbiBwaWNrUHJlbG9hZChyZW5kZXJlcjogSVBDUmVuZGVyT3B0aW9ucyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmIChyZW5kZXJlci5kZXRlcm1pbmlzdGljKSB7XG4gICAgcmV0dXJuIHB1cElmcmFtZVByZWxvYWQ7XG4gIH1cbiAgaWYgKHJlbmRlcmVyLndpdGhBdWRpbykge1xuICAgIHJldHVybiBwdXBBdWRpb1ByZWxvYWQ7XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gb3BlbldpbmRvdyh7IHNvdXJjZSwgcmVuZGVyZXIsIHRvbGVyYW50LCBzaWduYWwsIG9uQ3JlYXRlZCB9OiBXaW5kb3dPcHRpb25zKTogUHJvbWlzZTxCcm93c2VyV2luZG93PiB7XG4gIGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgdXNlSW5uZXJQcm94eSB9ID0gcmVuZGVyZXI7XG4gIGNvbnN0IHNyYyA9IHVzZUlubmVyUHJveHkgPyBwcm94aWVkVXJsKHNvdXJjZSkgOiBzb3VyY2U7XG5cbiAgY29uc3Qgd2luID0gbmV3IEJyb3dzZXJXaW5kb3coe1xuICAgIHdpZHRoLFxuICAgIGhlaWdodDogaGVpZ2h0ICsgMSxcbiAgICBtaW5XaWR0aDogd2lkdGgsXG4gICAgbWluSGVpZ2h0OiBoZWlnaHQgKyAxLFxuICAgIG1heFdpZHRoOiB3aWR0aCxcbiAgICBtYXhIZWlnaHQ6IGhlaWdodCArIDEsXG4gICAgcmVzaXphYmxlOiBmYWxzZSxcbiAgICBtaW5pbWl6YWJsZTogZmFsc2UsXG4gICAgbW92YWJsZTogZmFsc2UsXG4gICAgc2hvdzogZmFsc2UsXG4gICAgdHJhbnNwYXJlbnQ6IHRydWUsXG4gICAgYmFja2dyb3VuZENvbG9yOiB1bmRlZmluZWQsXG4gICAgZnJhbWU6IGZhbHNlLFxuICAgIHdlYlByZWZlcmVuY2VzOiB7XG4gICAgICBvZmZzY3JlZW46IHRydWUsXG4gICAgICBiYWNrZ3JvdW5kVGhyb3R0bGluZzogZmFsc2UsXG4gICAgICBub2RlSW50ZWdyYXRpb246IHRydWUsXG4gICAgICBub2RlSW50ZWdyYXRpb25JblN1YkZyYW1lczogdHJ1ZSxcbiAgICAgIG5vZGVJbnRlZ3JhdGlvbkluV29ya2VyOiB0cnVlLFxuICAgICAgY29udGV4dElzb2xhdGlvbjogZmFsc2UsXG4gICAgICB3ZWJTZWN1cml0eTogZmFsc2UsXG4gICAgICBhbGxvd1J1bm5pbmdJbnNlY3VyZUNvbnRlbnQ6IHRydWUsXG4gICAgICBleHBlcmltZW50YWxGZWF0dXJlczogdHJ1ZSxcbiAgICAgIHByZWxvYWQ6IHBpY2tQcmVsb2FkKHJlbmRlcmVyKSxcbiAgICB9LFxuICB9KTtcbiAgc2V0SW50ZXJjZXB0b3Ioe1xuICAgIHNvdXJjZSxcbiAgICB3aW5kb3c6IHdpbixcbiAgICB1c2VJbm5lclByb3h5LFxuICAgIHN0dWJNZWRpYTogcmVuZGVyZXIuZGV0ZXJtaW5pc3RpYyxcbiAgfSk7XG4gIHdpbi53ZWJDb250ZW50cy5kZWJ1Z2dlci5hdHRhY2goXCIxLjNcIik7XG4gIGF3YWl0IG9uQ3JlYXRlZD8uKHdpbik7XG5cbiAgd2luLndlYkNvbnRlbnRzLm9uKFwiY29uc29sZS1tZXNzYWdlXCIsICh7IGxldmVsLCBtZXNzYWdlLCBsaW5lTnVtYmVyLCBzb3VyY2VJZCB9KSA9PiB7XG4gICAgLy8gRHJvcCBoZWFkbGVzcyBub2lzZTogc2VjdXJpdHkgd2FybmluZ3MgYW5kIGh0dHDihpJodHRwcyBhdXRvLXVwZ3JhZGUgbm90aWNlcyBmb3IgaW50ZXJuYWwtcHJveHkgYXNzZXRzLlxuICAgIGlmIChsZXZlbCA9PT0gXCJ3YXJuaW5nXCIgJiYgQ09OU09MRV9JR05PUkVTLmZpbmQoKGkpID0+IG1lc3NhZ2Uuc3RhcnRzV2l0aChpKSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgbXNncyA9IFtUQUcsIFwiY29uc29sZTpcIiwgeyBtZXNzYWdlLCBsaW5lTnVtYmVyLCBzb3VyY2VJZCwgc291cmNlIH1dO1xuICAgIGxldmVsID09PSBcImVycm9yXCIgPyBsb2dnZXIuZXJyb3IoLi4ubXNncykgOiBsb2dnZXIuZGVidWcoLi4ubXNncyk7XG4gICAgcmVuZGVyZXIub25Db25zb2xlKGxldmVsLCBtZXNzYWdlKTtcbiAgfSk7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCB1cmwgPSBjcmVhdGVTdGVnb1VSTChzcmMsIHsgd2lkdGgsIGhlaWdodCB9KTtcbiAgICBhd2FpdCB3YWl0Rm9yRmluaXNoKHtcbiAgICAgIHNvdXJjZSxcbiAgICAgIHdpbixcbiAgICAgIGFjdGlvbjogKCkgPT4gd2luLmxvYWRVUkwodXJsKSxcbiAgICAgIHRpbWVvdXRNczogcmVuZGVyZXIud2luZG93VGltZW91dCAqIDEwMDAsXG4gICAgICB0b2xlcmFudCxcbiAgICAgIHNpZ25hbCxcbiAgICB9KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGF3YWl0IGRpc3Bvc2VXaW5kb3cod2luKTtcbiAgICB0aHJvdyBlO1xuICB9XG5cbiAgcmV0dXJuIHdpbjtcbn1cblxuY29uc3Qgb3BlbldpbmRvd1dpdGhSZXRyeSA9IHVzZVJldHJ5KHsgZm46IG9wZW5XaW5kb3csIG1heEF0dGVtcHRzOiAyIH0pO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9hZFdpbmRvdyh7IHNvdXJjZSwgcmVuZGVyZXIsIG9uQ3JlYXRlZCwgc2lnbmFsIH06IFdpbmRvd09wdGlvbnMpOiBQcm9taXNlPEJyb3dzZXJXaW5kb3c+IHtcbiAgY2hlY2tIVE1MKHNvdXJjZSk7XG5cbiAgc2lnbmFsPy50aHJvd0lmQWJvcnRlZCgpO1xuICBsZXQgd2FybXVwOiBCcm93c2VyV2luZG93IHwgdW5kZWZpbmVkO1xuICBsZXQgZXJyb3I6IHVua25vd247XG4gIHRyeSB7XG4gICAgd2FybXVwID0gYXdhaXQgb3BlbldpbmRvd1dpdGhSZXRyeSh7IHNvdXJjZSwgcmVuZGVyZXIsIHNpZ25hbCB9KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGVycm9yID0gZTtcbiAgfVxuXG4gIGNvbnN0IG9wZW4gPSAoKSA9PiB7XG4gICAgcmV0dXJuIG9wZW5XaW5kb3coe1xuICAgICAgc291cmNlLFxuICAgICAgcmVuZGVyZXIsXG4gICAgICBvbkNyZWF0ZWQsXG4gICAgICBzaWduYWwsXG4gICAgICB0b2xlcmFudDogcmVuZGVyZXIud2luZG93VG9sZXJhbnQsXG4gICAgfSk7XG4gIH07XG5cbiAgaWYgKHJlbmRlcmVyLndpbmRvd1RvbGVyYW50ICYmIGVycm9yID09PSBUSU1FT1VUX0VSUk9SKSB7XG4gICAgbG9nZ2VyLndhcm4oVEFHLCBgd2FybXVwIHRpbWVvdXQ6ICR7c291cmNlfSwgZmFsbGluZyBiYWNrIHRvIGRvbS1yZWFkeWApO1xuICAgIHJldHVybiBhd2FpdCBvcGVuKCk7XG4gIH1cblxuICBpZiAoZXJyb3IpIHtcbiAgICBjb25zdCB7IG1lc3NhZ2UsIHN0YWNrIH0gPSBlcnJvciBhcyBFcnJvcjtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGZhaWxlZCB0byB3YXJtdXAgd2luZG93OiAke0pTT04uc3RyaW5naWZ5KHsgc291cmNlLCBtZXNzYWdlLCBzdGFjayB9KX1gKTtcbiAgfVxuXG4gIGlmICh3YXJtdXApIHtcbiAgICB3YXJtdXAud2ViQ29udGVudHMucmVtb3ZlQWxsTGlzdGVuZXJzKCk7XG4gICAgdW5zZXRJbnRlcmNlcHRvcih3YXJtdXApO1xuICAgIGF3YWl0IHNsZWVwKDIwMDApO1xuICAgIGF3YWl0IGRpc3Bvc2VXaW5kb3cod2FybXVwKTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IG9wZW4oKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGNvbnN0IHsgbWVzc2FnZSwgc3RhY2sgfSA9IGUgYXMgRXJyb3I7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBmYWlsZWQgdG8gbG9hZCB3aW5kb3c6ICR7SlNPTi5zdHJpbmdpZnkoeyBzb3VyY2UsIG1lc3NhZ2UsIHN0YWNrIH0pfWApO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA5LlxuXG5pbXBvcnQgdHlwZSB7IE5hdGl2ZUltYWdlLCBTaXplIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBCTEFOS19XQVJOX1JBVElPLCBCbGFua0ZyYW1lU3RhdHMgfSBmcm9tIFwiLi4vYmFzZS9ibGFua19mcmFtZVwiO1xuaW1wb3J0IHsgcmVzaXplRHJhd2FibGUgfSBmcm9tIFwiLi4vYmFzZS9jZHBcIjtcbmltcG9ydCB7IEVuY29kZXJQaXBlbGluZSB9IGZyb20gXCIuLi9iYXNlL2VuY29kZXIvcGlwZWxpbmVcIjtcbmltcG9ydCB7IEZyYW1lRHJvcFN0YXRzIH0gZnJvbSBcIi4uL2Jhc2UvZnJhbWVfZHJvcFwiO1xuaW1wb3J0IHsgc2l6ZUVxdWFscyB9IGZyb20gXCIuLi9iYXNlL2ltYWdlXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi4vYmFzZS9sb2dnaW5nXCI7XG5pbXBvcnQgeyB0eXBlIEF1ZGlvRGlzcG9zYWwsIGF0dGFjaEF1ZGlvTGlzdGVuZXJzIH0gZnJvbSBcIi4vYXVkaW9cIjtcbmltcG9ydCB0eXBlIHsgSXBjRG9uZVBheWxvYWQgfSBmcm9tIFwiLi9pcGNcIjtcbmltcG9ydCB0eXBlIHsgSVBDUmVuZGVyT3B0aW9ucyB9IGZyb20gXCIuL3NjaGVtYVwiO1xuaW1wb3J0IHsgZGVjb2RlU3RlZ28sIHN0YXJ0U3RlZ28gfSBmcm9tIFwiLi9zdGVnb1wiO1xuaW1wb3J0IHsgZGlzcG9zZVdpbmRvdywgbG9hZFdpbmRvdyB9IGZyb20gXCIuL3dpbmRvd1wiO1xuXG5jb25zdCBUQUcgPSBcIltSZW5kZXJdXCI7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZW5kZXIob3B0aW9uczogSVBDUmVuZGVyT3B0aW9ucyk6IFByb21pc2U8SXBjRG9uZVBheWxvYWQ+IHtcbiAgY29uc3QgeyBzb3VyY2UsIGZwcywgd2lkdGgsIGhlaWdodCwgZHVyYXRpb24sIHdpdGhBdWRpbywgb3V0RmlsZSwgZGlzYWJsZUh3Q29kZWMsIHNpZ25hbCwgb25Qcm9ncmVzcyB9ID0gb3B0aW9ucztcblxuICBhd2FpdCB1c2luZyBlbmNvZGVyID0gYXdhaXQgRW5jb2RlclBpcGVsaW5lLmNyZWF0ZSh7IHdpZHRoLCBoZWlnaHQsIGZwcywgb3V0RmlsZSwgd2l0aEF1ZGlvLCBkaXNhYmxlSHdDb2RlYyB9KTtcblxuICBjb25zdCB0b3RhbCA9IE1hdGguY2VpbChmcHMgKiBkdXJhdGlvbik7XG4gIGNvbnN0IGZyYW1lSW50ZXJ2YWwgPSAxMDAwIC8gZnBzO1xuICBjb25zdCBmcmFtZVNpemU6IFNpemUgPSB7IHdpZHRoLCBoZWlnaHQ6IGhlaWdodCArIDEgfTtcblxuICBsZXQgd3JpdHRlbiA9IDA7XG4gIGxldCBsYXN0V3JpdHRlblRpbWU6IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgbGV0IHByb2dyZXNzID0gMDtcbiAgbGV0IGVuY29kZUVycm9yOiBFcnJvciB8IHVuZGVmaW5lZDtcbiAgbGV0IHJlc29sdmVyOiAoKCkgPT4gdm9pZCkgfCB1bmRlZmluZWQ7XG4gIGxldCByZWplY3RlcjogKChyZWFzb24/OiB1bmtub3duKSA9PiB2b2lkKSB8IHVuZGVmaW5lZDtcbiAgbGV0IGludGVydmFsOiBOb2RlSlMuVGltZW91dCB8IHVuZGVmaW5lZDtcbiAgY29uc3QgZHJvcFN0YXRzID0gbmV3IEZyYW1lRHJvcFN0YXRzKGZwcyk7XG4gIGNvbnN0IGJsYW5rU3RhdHMgPSBuZXcgQmxhbmtGcmFtZVN0YXRzKHdpZHRoLCBoZWlnaHQpO1xuXG4gIGxldCBkaXNwb3NlQXVkaW86IEF1ZGlvRGlzcG9zYWwgfCB1bmRlZmluZWQ7XG4gIGNvbnN0IHNjaGVkdWxlRnJhbWUgPSAoZnJhbWU6IEJ1ZmZlcikgPT4ge1xuICAgIHdyaXR0ZW4rKztcbiAgICBibGFua1N0YXRzLnNhbXBsZShmcmFtZSk7XG4gICAgZW5jb2Rlci5lbmNvZGVCR1JBKGZyYW1lKS5jYXRjaCgoZSkgPT4gKGVuY29kZUVycm9yID8/PSBlKSk7XG4gIH07XG5cbiAgY29uc3QgcGFpbnQgPSAoX2U6IHVua25vd24sIF9yOiB1bmtub3duLCBpbWFnZTogTmF0aXZlSW1hZ2UpID0+IHtcbiAgICBlbmNvZGVFcnJvciA/Pz0gc2lnbmFsPy5yZWFzb247XG4gICAgaWYgKGVuY29kZUVycm9yKSB7XG4gICAgICByZWplY3Rlcj8uKGVuY29kZUVycm9yKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBpbWFnZVNpemUgPSBpbWFnZS5nZXRTaXplKCk7XG4gICAgaWYgKCFzaXplRXF1YWxzKGltYWdlU2l6ZSwgZnJhbWVTaXplKSkge1xuICAgICAgLy8gTk9URShBdXRva2FrYSk6IFdlIG11c3QgZW5zdXJlIGZyYW1lIGlzIHJlYWR5IG9uIGVsZWN0cm9uIHY0MStcbiAgICAgIHJlc2l6ZURyYXdhYmxlKGNkcCwgZnJhbWVTaXplKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBEZWNvZGUgc3RlZ28gdGltZXN0YW1wIGZyb20gdGhlIGJvdHRvbSBwaXhlbCByb3cgd2l0aG91dCBmdWxsIGJpdG1hcCBjb3B5XG4gICAgY29uc3QgYml0bWFwID0gaW1hZ2UudG9CaXRtYXAoKTtcbiAgICBjb25zdCBjdXJyZW50VGltZSA9IGRlY29kZVN0ZWdvKGJpdG1hcCwgaW1hZ2VTaXplKTtcbiAgICBpZiAoY3VycmVudFRpbWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgZW5jb2RlRXJyb3IgPz89IG5ldyBFcnJvcihgbm8gdGltZXN0YW1wIEAgJHt3cml0dGVufWApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFNraXAgZnJhbWVzIHRoYXQgYXJyaXZlIHRvbyBzb29uICg8IDgwJSBvZiBmcmFtZSBpbnRlcnZhbClcbiAgICBpZiAobGFzdFdyaXR0ZW5UaW1lICE9PSB1bmRlZmluZWQgJiYgY3VycmVudFRpbWUgLSBsYXN0V3JpdHRlblRpbWUgPCBmcmFtZUludGVydmFsICogMC44KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY3JvcHBlZCA9IEJ1ZmZlci5mcm9tKGJpdG1hcC5idWZmZXIsIGJpdG1hcC5ieXRlT2Zmc2V0LCBoZWlnaHQgKiB3aWR0aCAqIDQpO1xuXG4gICAgaWYgKGxhc3RXcml0dGVuVGltZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBzY2hlZHVsZUZyYW1lKGNyb3BwZWQpO1xuICAgICAgZHJvcFN0YXRzLndyb3RlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHRpbWVEZWx0YSA9IGN1cnJlbnRUaW1lIC0gbGFzdFdyaXR0ZW5UaW1lO1xuICAgICAgaWYgKHRpbWVEZWx0YSA8PSBmcmFtZUludGVydmFsICogMS4yKSB7XG4gICAgICAgIHNjaGVkdWxlRnJhbWUoY3JvcHBlZCk7XG4gICAgICAgIGRyb3BTdGF0cy53cm90ZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgZnJhbWVzVG9JbnNlcnQgPSBNYXRoLnJvdW5kKHRpbWVEZWx0YSAvIGZyYW1lSW50ZXJ2YWwpO1xuICAgICAgICBkcm9wU3RhdHMuZHJvcHBlZChmcmFtZXNUb0luc2VydCAtIDEpO1xuICAgICAgICBkcm9wU3RhdHMud3JvdGUoKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmcmFtZXNUb0luc2VydCAmJiB3cml0dGVuIDwgdG90YWw7IGkrKykge1xuICAgICAgICAgIHNjaGVkdWxlRnJhbWUoY3JvcHBlZCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgbGFzdFdyaXR0ZW5UaW1lID0gY3VycmVudFRpbWU7XG5cbiAgICBjb25zdCBuZXdQcm9ncmVzcyA9IE1hdGguZmxvb3IoKHdyaXR0ZW4gLyB0b3RhbCkgKiAxMDApO1xuICAgIGlmIChuZXdQcm9ncmVzcyAhPT0gcHJvZ3Jlc3MpIHtcbiAgICAgIHByb2dyZXNzID0gbmV3UHJvZ3Jlc3M7XG4gICAgICBvblByb2dyZXNzKHByb2dyZXNzKTtcbiAgICB9XG5cbiAgICBjb25zdCBkdXJhdGlvbk1zID0gZHVyYXRpb24gKiAxMDAwO1xuICAgIGlmIChjdXJyZW50VGltZSA+PSBkdXJhdGlvbk1zIC0gZnJhbWVJbnRlcnZhbCAqIDAuNSB8fCB3cml0dGVuID49IHRvdGFsKSB7XG4gICAgICByZXNvbHZlcj8uKCk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IHdpbiA9IGF3YWl0IGxvYWRXaW5kb3coe1xuICAgIHNvdXJjZSxcbiAgICByZW5kZXJlcjogb3B0aW9ucyxcbiAgICBzaWduYWwsXG4gICAgb25DcmVhdGVkOiAod2luKSA9PiB7XG4gICAgICBpZiAod2l0aEF1ZGlvKSB7XG4gICAgICAgIGRpc3Bvc2VBdWRpbyA9IGF0dGFjaEF1ZGlvTGlzdGVuZXJzKHtcbiAgICAgICAgICB3Yzogd2luLndlYkNvbnRlbnRzLFxuICAgICAgICAgIGVuY29kZXIsXG4gICAgICAgICAgZ2V0VmlkZW9UaW1lTXM6ICgpID0+IGxhc3RXcml0dGVuVGltZSA/PyAwLFxuICAgICAgICAgIG9uRXJyb3I6IChlOiBFcnJvcikgPT4gKGVuY29kZUVycm9yID8/PSBlKSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSxcbiAgfSk7XG4gIGNvbnN0IGNkcCA9IHdpbi53ZWJDb250ZW50cy5kZWJ1Z2dlcjtcblxuICB0cnkge1xuICAgIHdpbi53ZWJDb250ZW50cy5zdG9wUGFpbnRpbmcoKTtcbiAgICB3aW4ud2ViQ29udGVudHMuc2V0RnJhbWVSYXRlKGZwcyk7XG4gICAgd2luLndlYkNvbnRlbnRzLm9uKFwicGFpbnRcIiwgcGFpbnQpO1xuICAgIHdpbi53ZWJDb250ZW50cy5zdGFydFBhaW50aW5nKCk7XG4gICAgc2lnbmFsPy50aHJvd0lmQWJvcnRlZCgpO1xuICAgIHNpZ25hbD8uYWRkRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsICgpID0+IHJlamVjdGVyPy4oc2lnbmFsLnJlYXNvbiksIHsgb25jZTogdHJ1ZSB9KTtcbiAgICBhd2FpdCBzdGFydFN0ZWdvKGNkcCk7XG4gICAgYXdhaXQgbmV3IFByb21pc2U8dm9pZD4oKHIsIGopID0+IHtcbiAgICAgIFtyZXNvbHZlciwgcmVqZWN0ZXJdID0gW3IsIGpdO1xuICAgICAgbGV0IGxhc3RXcml0dGVuID0gMDtcbiAgICAgIGxldCBzdHVjayA9IDA7XG4gICAgICBpbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgaWYgKHdyaXR0ZW4gIT09IGxhc3RXcml0dGVuKSB7XG4gICAgICAgICAgbGFzdFdyaXR0ZW4gPSB3cml0dGVuO1xuICAgICAgICAgIHN0dWNrID0gMDtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0dWNrID49IDMpIHtcbiAgICAgICAgICByZWplY3Rlcj8uKG5ldyBFcnJvcihcImRyYXdhYmxlIHRpbWVvdXRcIikpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBsb2dnZXIud2FybihUQUcsIGAke3NvdXJjZX0gcmVuZGVyIGlzIGV4dHJlbWVseSBzbG93LCB3cml0dGVuPSR7d3JpdHRlbn0gc3R1Y2s9JHtzdHVja31gKTtcbiAgICAgICAgc3R1Y2srKztcbiAgICAgICAgd2luLndlYkNvbnRlbnRzLmludmFsaWRhdGUoKTtcbiAgICAgIH0sIDEwMDApO1xuICAgIH0pO1xuICB9IGZpbmFsbHkge1xuICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWwpO1xuICAgIHdpbi53ZWJDb250ZW50cy5vZmYoXCJwYWludFwiLCBwYWludCk7XG4gICAgYXdhaXQgZGlzcG9zZVdpbmRvdyh3aW4pO1xuICAgIGRpc3Bvc2VBdWRpbz8uKCk7XG4gICAgYXdhaXQgZW5jb2Rlci5maW5pc2goKTtcbiAgfVxuXG4gIGlmIChlbmNvZGVFcnJvciB8fCB3cml0dGVuID09PSAwKSB7XG4gICAgdGhyb3cgZW5jb2RlRXJyb3IgPz8gbmV3IEVycm9yKFwibm8gZnJhbWVzIGNhcHR1cmVkXCIpO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGRyb3BTY29yZSA9IGRyb3BTdGF0cy5maW5hbGl6ZSgpO1xuICAgIGNvbnN0IGJsYW5rID0gYmxhbmtTdGF0cy5maW5hbGl6ZSgpO1xuICAgIGlmIChibGFuayA+PSBCTEFOS19XQVJOX1JBVElPKSB7XG4gICAgICBsb2dnZXIud2FybihUQUcsIGAke3NvdXJjZX0gYmxhbmstZnJhbWUgcmF0aW8gJHtNYXRoLnJvdW5kKGJsYW5rICogMTAwKX0lIOKAlCBwb3NzaWJsZSB3aGl0ZS9ibGFuayBzY3JlZW5gKTtcbiAgICB9XG4gICAgcmV0dXJuIHsgd3JpdHRlbiwgamFuazogZHJvcFNjb3JlLmphbmssIG91dEZpbGUsIGJsYW5rIH07XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDMvMDIuXG5cbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuLi9iYXNlL2xvZ2dpbmdcIjtcblxuY29uc3QgVEFHID0gXCJbUmVyZW5kZXJdXCI7XG5cbmV4cG9ydCBjb25zdCBNQVhfUkVOREVSX0FUVEVNUFRTID0gMztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdpdGhSZXJlbmRlcjxUPihzaWduYWw6IEFib3J0U2lnbmFsLCBhY3Rpb246ICgpID0+IFByb21pc2U8VD4pOiBQcm9taXNlPFQ+IHtcbiAgbGV0IGxhc3RFcnI6IHVua25vd247XG4gIGZvciAobGV0IGF0dGVtcHQgPSAwOyBhdHRlbXB0IDwgTUFYX1JFTkRFUl9BVFRFTVBUUzsgYXR0ZW1wdCsrKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCBhY3Rpb24oKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpZiAoc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICAgIGxhc3RFcnIgPSBlO1xuICAgICAgbG9nZ2VyLndhcm4oVEFHLCBgcmV0cnkgJHthdHRlbXB0ICsgMX0vJHtNQVhfUkVOREVSX0FUVEVNUFRTfTogJHsoZSBhcyBFcnJvcikubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cbiAgdGhyb3cgbGFzdEVycjtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDUvMTguXG5cbmltcG9ydCB0eXBlIHsgV2ViRnJhbWVNYWluIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi4vLi4vYmFzZS9sb2dnaW5nXCI7XG5pbXBvcnQgeyBhYm9ydGFibGUgfSBmcm9tIFwiLi4vLi4vYmFzZS90aW1pbmdcIjtcblxuY29uc3QgVEFHID0gXCJbVmlkZW9dXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWR2YW5jZU9wdGlvbnMge1xuICBmcmFtZTogV2ViRnJhbWVNYWluIHwgdW5kZWZpbmVkO1xuICB0aW1lc3RhbXBNczogbnVtYmVyO1xuICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbn1cblxuLy8gT25seSB0aGUgZGV0ZXJtaW5pc3RpYyByZW5kZXJlciAoc2hvb3QpIGRyaXZlcyB0aGlzOyByZWFsLXRpbWUgdmlkZW9zIHNlbGYtdGljayB2aWEgckFGIGluIHRoZSBwYWdlLlxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFkdmFuY2VWaWRlb3MoeyBmcmFtZSwgdGltZXN0YW1wTXMsIHNpZ25hbCB9OiBBZHZhbmNlT3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICBpZiAoIWZyYW1lPy51cmwpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgc2lnbmFsPy50aHJvd0lmQWJvcnRlZCgpO1xuICB0cnkge1xuICAgIC8vIFNvdXJjZSBvcGVucyBhcmUgd2FsbC10aW1lIGFzeW5jOyBzZXR0bGUgdGhlbSBmaXJzdCBzbyB2aXJ0dWFsIHRpbWUgY2FuJ3Qgc3RlcCBvbnRvIGEgYmxhbmssIG5vdC15ZXQtb3BlbmVkIDx2aWRlbz4uXG4gICAgYXdhaXQgYWJvcnRhYmxlKGZyYW1lLmV4ZWN1dGVKYXZhU2NyaXB0KGB3aW5kb3cuX19wdXBfdmlkZW9fXyYmd2luZG93Ll9fcHVwX3ZpZGVvX18ucmVhZHkoKWApLCBzaWduYWwpO1xuICAgIC8vIE5vIHdhbGwtY2xvY2sgY2FwOiBhIHNsb3cgZmV0Y2ggZGVsYXlzIHRoZSBmcmFtZSBpbnN0ZWFkIG9mIGRyb3BwaW5nIGl0LCBrZWVwaW5nIC1kIG91dHB1dCBkZXRlcm1pbmlzdGljLlxuICAgIGF3YWl0IGFib3J0YWJsZShcbiAgICAgIGZyYW1lLmV4ZWN1dGVKYXZhU2NyaXB0KGB3aW5kb3cuX19wdXBfdmlkZW9fXyYmd2luZG93Ll9fcHVwX3ZpZGVvX18uYWR2YW5jZSgke3RpbWVzdGFtcE1zfSlgKSxcbiAgICAgIHNpZ25hbCxcbiAgICApO1xuICB9IGNhdGNoIChlKSB7XG4gICAgc2lnbmFsPy50aHJvd0lmQWJvcnRlZCgpO1xuICAgIGxvZ2dlci53YXJuKFRBRywgYGFkdmFuY2Ugc2tpcHBlZDogJHtlIGluc3RhbmNlb2YgRXJyb3IgPyBlLm1lc3NhZ2UgOiBTdHJpbmcoZSl9YCk7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMDEuXG5cbmltcG9ydCB7IHdpdGhUaW1lb3V0IH0gZnJvbSBcIi4uL2Jhc2UvdGltaW5nXCI7XG5pbXBvcnQgeyB0eXBlIEFkdmFuY2VPcHRpb25zLCBhZHZhbmNlVmlkZW9zIH0gZnJvbSBcIi4vdmlkZW8vYWR2YW5jZVwiO1xuXG5leHBvcnQgY29uc3QgVElDS19TWU1CT0wgPSBcIl9fcHVwX3RpY2tfX1wiO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdGljayhhcmdzOiBBZHZhbmNlT3B0aW9ucykge1xuICBjb25zdCB7IGZyYW1lLCB0aW1lc3RhbXBNcyB9ID0gYXJncztcbiAgaWYgKCFmcmFtZSkge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBleHByID0gYHdpbmRvdy4ke1RJQ0tfU1lNQk9MfSYmd2luZG93LiR7VElDS19TWU1CT0x9LnByb2Nlc3MoJHt0aW1lc3RhbXBNc30pYDtcbiAgY29uc3QgdGlja0V2ID0gZnJhbWUuZXhlY3V0ZUphdmFTY3JpcHQoZXhwcik7XG4gIGF3YWl0IFByb21pc2UuYWxsKFt3aXRoVGltZW91dCh0aWNrRXYsIDVfMDAwLCBcInRpY2suZXhlY3V0ZUphdmFTY3JpcHRcIiksIGFkdmFuY2VWaWRlb3MoYXJncyldKTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDYvMjMuXG5cbmltcG9ydCB7IERlbXV4ZXIsIHR5cGUgRGVtdXhlck9wdGlvbnMgfSBmcm9tIFwibm9kZS1hdi9hcGlcIjtcblxuLy8gZmZtcGVnIHJlYWQvd3JpdGUgZGVhZGxpbmUgKMK1cyk7IGEgYmxvY2tpbmcgb3BlbiBpZ25vcmVzIEFib3J0U2lnbmFsLCBzbyB0aGlzIGJvdW5kcyBhIHN0dWNrIENETi5cbmNvbnN0IFJXX1RJTUVPVVRfVVMgPSBcIjgwMDAwMDBcIjtcblxuLy8gZmZtcGVnIG9wZW5zIGh0dHAvaHR0cHMgd2l0aCBuYXRpdmUgYnl0ZS1yYW5nZSByZXF1ZXN0cywgc28gb25seSB0aGUgZGVjb2RlZCByYW5nZXMgZG93bmxvYWQuXG5leHBvcnQgZnVuY3Rpb24gb3BlbklucHV0KHNyYzogc3RyaW5nLCBzaWduYWw/OiBBYm9ydFNpZ25hbCk6IFByb21pc2U8RGVtdXhlcj4ge1xuICBjb25zdCBvcHRpb25zOiBEZW11eGVyT3B0aW9ucyA9IHsgc2lnbmFsLCBvcHRpb25zOiB7IHJ3X3RpbWVvdXQ6IFJXX1RJTUVPVVRfVVMgfSB9O1xuICByZXR1cm4gRGVtdXhlci5vcGVuKHNyYywgb3B0aW9ucyk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA2LzI1LlxuXG5pbXBvcnQgdHlwZSB7IEZyYW1lIH0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB7IERlY29kZXIsIEZpbHRlckFQSSB9IGZyb20gXCJub2RlLWF2L2FwaVwiO1xuaW1wb3J0IHsgQVZNRURJQV9UWVBFX1ZJREVPIH0gZnJvbSBcIm5vZGUtYXYvY29uc3RhbnRzXCI7XG5pbXBvcnQgdHlwZSB7IFZpZGVvTWV0YSB9IGZyb20gXCIuL2ZyYW1lX3NlcnZlclwiO1xuaW1wb3J0IHsgb3BlbklucHV0IH0gZnJvbSBcIi4vb3BlblwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIERlY29kZWRGcmFtZSB7XG4gIGlkeDogbnVtYmVyO1xuICBidWY6IEJ1ZmZlcjtcbn1cblxuLy8gRGVjb2RlIGEgc291cmNlIHRvIGZwcy1yZXNhbXBsZWQsIGRpc3BsYXktc2NhbGVkLCB0aWdodC1SR0JBIGZyYW1lcyBpbiBvcmRlciAoaWR4ID0gMS1iYXNlZCBkZWNvZGUgcG9zaXRpb24pLiBDb25zdW1lciBiYWNrcHJlc3N1cmUgaXMganVzdCBwdWxsaW5nIHNsb3dlci5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiogZGVjb2RlRnJhbWVzKHNyYzogc3RyaW5nLCBtZXRhOiBWaWRlb01ldGEsIHNpZ25hbDogQWJvcnRTaWduYWwpOiBBc3luY0dlbmVyYXRvcjxEZWNvZGVkRnJhbWU+IHtcbiAgYXdhaXQgdXNpbmcgaW5wdXQgPSBhd2FpdCBvcGVuSW5wdXQoc3JjLCBzaWduYWwpO1xuICBjb25zdCBzdHJlYW0gPSBpbnB1dC5zdHJlYW1zPy5maW5kKChzKSA9PiBzLmNvZGVjcGFyLmNvZGVjVHlwZSA9PT0gQVZNRURJQV9UWVBFX1ZJREVPKTtcbiAgaWYgKCFzdHJlYW0pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJubyB2aWRlbyBzdHJlYW1cIik7XG4gIH1cbiAgdXNpbmcgZGVjID0gYXdhaXQgRGVjb2Rlci5jcmVhdGUoc3RyZWFtLCB7IHNpZ25hbCB9KTtcbiAgY29uc3QgeyBmcmFtZVdpZHRoLCBmcmFtZUhlaWdodCwgd2lkdGgsIGhlaWdodCwgZnBzIH0gPSBtZXRhO1xuICBjb25zdCBzY2FsZSA9IGZyYW1lV2lkdGggIT09IHdpZHRoIHx8IGZyYW1lSGVpZ2h0ICE9PSBoZWlnaHQgPyBgc2NhbGU9JHtmcmFtZVdpZHRofToke2ZyYW1lSGVpZ2h0fSxgIDogXCJcIjtcbiAgdXNpbmcgZmlsdGVyID0gRmlsdGVyQVBJLmNyZWF0ZShgZnBzPSR7ZnBzfSwke3NjYWxlfWZvcm1hdD1yZ2JhYCwgeyBzaWduYWwgfSk7XG4gIGxldCBrID0gMDtcbiAgZm9yIGF3YWl0ICh1c2luZyBmcmFtZSBvZiBmaWx0ZXIuZnJhbWVzKGRlYy5mcmFtZXMoaW5wdXQucGFja2V0cyhzdHJlYW0uaW5kZXgpKSkpIHtcbiAgICBpZiAoIWZyYW1lKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgeWllbGQgeyBpZHg6ICsraywgYnVmOiBwYWNrUmdiYShmcmFtZSkgfTtcbiAgfVxufVxuXG4vLyBUaWdodCBSR0JBIGNvcHkgKGRyb3AgbGliYXYgcm93IHBhZGRpbmcpIHNvIHRoZSBwYWdlIGNhbiB3cmFwIGl0IHN0cmFpZ2h0IGludG8gSW1hZ2VEYXRhLlxuZnVuY3Rpb24gcGFja1JnYmEoZnJhbWU6IEZyYW1lKTogQnVmZmVyIHtcbiAgY29uc3Qgcm93ID0gZnJhbWUud2lkdGggKiA0O1xuICBjb25zdCBzdHJpZGUgPSBmcmFtZS5saW5lc2l6ZVswXSE7XG4gIGNvbnN0IHNyYyA9IGZyYW1lLmRhdGEhWzBdITtcbiAgaWYgKHN0cmlkZSA9PT0gcm93KSB7XG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKHNyYy5zdWJhcnJheSgwLCByb3cgKiBmcmFtZS5oZWlnaHQpKTtcbiAgfVxuICBjb25zdCBvdXQgPSBCdWZmZXIuYWxsb2NVbnNhZmUocm93ICogZnJhbWUuaGVpZ2h0KTtcbiAgZm9yIChsZXQgeSA9IDA7IHkgPCBmcmFtZS5oZWlnaHQ7IHkrKykge1xuICAgIHNyYy5jb3B5KG91dCwgeSAqIHJvdywgeSAqIHN0cmlkZSwgeSAqIHN0cmlkZSArIHJvdyk7XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDYvMDIuXG5cbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuLi8uLi9iYXNlL2xvZ2dpbmdcIjtcbmltcG9ydCB7IGRlY29kZUZyYW1lcyB9IGZyb20gXCIuL2RlY29kZVwiO1xuaW1wb3J0IHR5cGUgeyBWaWRlb01ldGEgfSBmcm9tIFwiLi9mcmFtZV9zZXJ2ZXJcIjtcblxuY29uc3QgVEFHID0gXCJbRGVjb2RlU2Vzc2lvbl1cIjtcbmNvbnN0IERFQ09ERV9BSEVBRCA9IDQ7IC8vIGRlY29kZSBhIGZldyBmcmFtZXMgcGFzdCB0aGUgaGlnaGVzdCByZXF1ZXN0OyB0aGUgcGFnZSBhbHJlYWR5IHByZWZldGNoZXNcbmNvbnN0IEtFRVBfQkVISU5EID0gMTY7IC8vIG1pbiBmcmFtZXMgaGVsZCBiZWhpbmQgdGhlIGhlYWQ7IG11c3QgZXhjZWVkIHRoZSBwYWdlJ3MgcHJlZmV0Y2ggbGVhZCAoQUhFQUQ9MTApXG5jb25zdCBNRU1PUllfQlVER0VUID0gMjU2ICogMTAyNCAqIDEwMjQ7IC8vIHJldGFpbiBkZWNvZGVkIGZyYW1lcyB1cCB0byB0aGlzIHBlci1zZXNzaW9uIGJ1ZGdldCBzbyBhIHNtYWxsIGxvb3BpbmcgdmlkZW8gcmUtc2VydmVzIGZyb20gbWVtb3J5IGluc3RlYWQgb2YgcmUtZGVjb2RpbmdcbmNvbnN0IE1BWF9QQVNTX1JFVFJZID0gMzsgLy8gcmUtb3BlbiBhIHN0cmVhbWVkIHNvdXJjZSB0aGlzIG1hbnkgdGltZXMgb24gYSB0cmFuc2llbnQgZGVjb2RlIGVycm9yIGJlZm9yZSByZXBvcnRpbmcgZW5kLW9mLXN0cmVhbVxuXG5pbnRlcmZhY2UgV2FpdGVyIHtcbiAgaWR4OiBudW1iZXI7XG4gIHJlc29sdmU6IChiOiBCdWZmZXIpID0+IHZvaWQ7XG59XG5cbi8vIERlbWFuZC1kcml2ZW4gaW4tcHJvY2VzcyBkZWNvZGUgKERlbXV4ZXLihpJEZWNvZGVy4oaSZnBzL3NjYWxlL3JnYmEgZmlsdGVyKSBzZXJ2aW5nIGZyYW1lIE4gYXMgdGlnaHQgUkdCQTsgZm9yd2FyZC1vbmx5IOKAlCBhIGxvb3AvcmV3aW5kIHJlLWRlY29kZXMgZnJvbSBmcmFtZSAxIHVubGVzcyB0aGUgd2hvbGUgY2xpcCBzdGlsbCBmaXRzIHRoZSBtZW1vcnkgYnVkZ2V0LlxuZXhwb3J0IGNsYXNzIERlY29kZVNlc3Npb24ge1xuICBwcml2YXRlIF9idWYgPSBuZXcgTWFwPG51bWJlciwgQnVmZmVyPigpO1xuICBwcml2YXRlIF9yZWFkeSA9IDA7XG4gIHByaXZhdGUgX3dhbnQgPSAxO1xuICBwcml2YXRlIF9kb25lID0gZmFsc2U7XG4gIHByaXZhdGUgX2Nsb3NlZCA9IGZhbHNlO1xuICBwcml2YXRlIF9nZW4gPSAwO1xuICBwcml2YXRlIF9jdHJsID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICBwcml2YXRlIF93YWl0ZXJzID0gbmV3IFNldDxXYWl0ZXI+KCk7XG4gIHByaXZhdGUgX3Jlc3VtZTogKCgpID0+IHZvaWQpIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIF9yZXN0YXJ0OiAoKCkgPT4gdm9pZCkgfCB1bmRlZmluZWQ7XG4gIC8vIExlYWQgZnJhbWVzIGhlbGQgb24gdGhlIGZpcnN0IGRlY29kYWJsZSBmcmFtZTsgY29udGVudCBpZHggaXMgb2Zmc2V0IHBhc3QgdGhlbS5cbiAgcHJpdmF0ZSByZWFkb25seSBfbGVhZEZyYW1lczogbnVtYmVyO1xuICAvLyBGcmFtZXMga2VwdCBiZWhpbmQgdGhlIGhlYWQ7IGEgY2xpcCB0aGF0IGZpdHMgdGhlIGJ1ZGdldCByZXRhaW5zIGV2ZXJ5IGZyYW1lLCBzbyBsb29wcyByZS1zZXJ2ZSBmcm9tIG1lbW9yeS5cbiAgcHJpdmF0ZSByZWFkb25seSBfa2VlcENvdW50OiBudW1iZXI7XG4gIC8vIFJlc29sdmVzIHdoZW4gcHVtcCgpIGZ1bGx5IHVud2luZHMg4oCUIGF3YWl0ZWQgb24gY2xvc2Ugc28gbm9kZS1hdiBnZW5lcmF0b3JzIGZyZWUgYmVmb3JlIHByb2Nlc3MgdGVhcmRvd24uXG4gIHByaXZhdGUgcmVhZG9ubHkgX3B1bXBEb25lOiBQcm9taXNlPHZvaWQ+O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHJlYWRvbmx5IG1ldGE6IFZpZGVvTWV0YSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9zcmM6IHN0cmluZyxcbiAgKSB7XG4gICAgdGhpcy5fbGVhZEZyYW1lcyA9IE1hdGgucm91bmQobWV0YS5sZWFkR2FwICogbWV0YS5mcHMpO1xuICAgIHRoaXMuX2tlZXBDb3VudCA9IE1hdGgubWF4KEtFRVBfQkVISU5ELCBNYXRoLmZsb29yKE1FTU9SWV9CVURHRVQgLyAobWV0YS5mcmFtZVdpZHRoICogbWV0YS5mcmFtZUhlaWdodCAqIDQpKSk7XG4gICAgdGhpcy5fcHVtcERvbmUgPSB0aGlzLnB1bXAoKTtcbiAgfVxuXG4gIGFzeW5jIGdldEZyYW1lKGlkeDogbnVtYmVyKTogUHJvbWlzZTxCdWZmZXI+IHtcbiAgICBpZiAoaWR4IDwgMSkge1xuICAgICAgaWR4ID0gMTtcbiAgICB9XG4gICAgaWYgKGlkeCA8PSB0aGlzLl9sZWFkRnJhbWVzKSB7XG4gICAgICBpZHggPSB0aGlzLl9sZWFkRnJhbWVzICsgMTsgLy8gaG9sZCB0aGUgZmlyc3QgZGVjb2RhYmxlIGZyYW1lIGFjcm9zcyB0aGUgbGVhZFxuICAgIH1cbiAgICBjb25zdCBoaXQgPSB0aGlzLl9idWYuZ2V0KGlkeCk7XG4gICAgaWYgKGhpdCkge1xuICAgICAgcmV0dXJuIGhpdDtcbiAgICB9XG4gICAgaWYgKHRoaXMuX2RvbmUgJiYgaWR4ID4gdGhpcy5fcmVhZHkpIHtcbiAgICAgIHJldHVybiBCdWZmZXIuYWxsb2MoMCk7IC8vIGJleW9uZCBlbmQgb2Ygc3RyZWFtXG4gICAgfVxuICAgIGlmIChpZHggPiB0aGlzLl9yZWFkeSkge1xuICAgICAgLy8gZm9yd2FyZCwgbm90IHlldCBkZWNvZGVkIGluIHRoaXMgcGFzc1xuICAgICAgaWYgKGlkeCA+IHRoaXMuX3dhbnQpIHtcbiAgICAgICAgdGhpcy5fd2FudCA9IGlkeDtcbiAgICAgIH1cbiAgICAgIHRoaXMud2FrZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBFdmljdGVkIChsb29wL3Jld2luZCk6IGNsZWFyIHJlYWR5L2RvbmUgc3luY2hyb25vdXNseSBzbyB0aGUgd3JhcCdzIHByZWZldGNoIGJ1cnN0IGNvYWxlc2NlcyBpbnRvIG9uZSByZXN0YXJ0LCBub3Qgb25lIHBlciBmcmFtZS5cbiAgICAgIHRoaXMuX3JlYWR5ID0gMDtcbiAgICAgIHRoaXMuX2RvbmUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX3dhbnQgPSBpZHg7XG4gICAgICB0aGlzLnJlcXVlc3RSZXN0YXJ0KCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLndhaXQoaWR4KTtcbiAgfVxuXG4gIC8vIEF3YWl0IHRoZSBwdW1wIHNvIHRoZSBub2RlLWF2IGRlbXV4ZXIvZGVjb2RlciBnZW5lcmF0b3JzIHVud2luZCAoY29udGV4dHMgZnJlZWQpIGJlZm9yZSB0aGUgY2FsbGVyIGV4aXRzLlxuICBhc3luYyBjbG9zZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLl9jbG9zZWQgPSB0cnVlO1xuICAgIHRoaXMuX2RvbmUgPSB0cnVlO1xuICAgIHRoaXMuX2N0cmwuYWJvcnQoKTtcbiAgICB0aGlzLndha2UoKTtcbiAgICB0aGlzLnJlcXVlc3RSZXN0YXJ0KCk7XG4gICAgZm9yIChjb25zdCB3IG9mIHRoaXMuX3dhaXRlcnMpIHtcbiAgICAgIHcucmVzb2x2ZShCdWZmZXIuYWxsb2MoMCkpO1xuICAgIH1cbiAgICB0aGlzLl93YWl0ZXJzLmNsZWFyKCk7XG4gICAgdGhpcy5fYnVmLmNsZWFyKCk7XG4gICAgYXdhaXQgdGhpcy5fcHVtcERvbmU7XG4gIH1cblxuICAvLyAtZC1vbmx5IHN1YnN5c3RlbSwgc28gbmV2ZXIgdGltZSBvdXQ6IGRyYWluV2FpdGVycyByZXNvbHZlcyBvbiBkZWNvZGUsIEVPRiwgb3IgY2xvc2Ug4oCUIG91dHB1dCBuZXZlciBkZXBlbmRzIG9uIGZldGNoIGxhdGVuY3kuXG4gIHByaXZhdGUgd2FpdChpZHg6IG51bWJlcik6IFByb21pc2U8QnVmZmVyPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPEJ1ZmZlcj4oKHJlc29sdmUpID0+IHRoaXMuX3dhaXRlcnMuYWRkKHsgaWR4LCByZXNvbHZlIH0pKTtcbiAgfVxuXG4gIHByaXZhdGUgd2FrZSgpOiB2b2lkIHtcbiAgICBjb25zdCByID0gdGhpcy5fcmVzdW1lO1xuICAgIHRoaXMuX3Jlc3VtZSA9IHVuZGVmaW5lZDtcbiAgICByPy4oKTtcbiAgfVxuXG4gIC8vIEludmFsaWRhdGUgdGhlIHJ1bm5pbmcgcGFzcyAob3Igd2FrZSBhIHBhcmtlZCBvbmUpIHNvIHB1bXAoKSBzdGFydHMgYSBmcmVzaCBkZWNvZGUgZnJvbSBmcmFtZSAxLlxuICBwcml2YXRlIHJlcXVlc3RSZXN0YXJ0KCk6IHZvaWQge1xuICAgIHRoaXMuX2dlbisrO1xuICAgIGNvbnN0IHIgPSB0aGlzLl9yZXN0YXJ0O1xuICAgIHRoaXMuX3Jlc3RhcnQgPSB1bmRlZmluZWQ7XG4gICAgcj8uKCk7XG4gICAgdGhpcy53YWtlKCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHB1bXAoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgbGV0IGZhaWxzID0gMDtcbiAgICB3aGlsZSAoIXRoaXMuX2Nsb3NlZCkge1xuICAgICAgY29uc3QgZ2VuID0gdGhpcy5fZ2VuO1xuICAgICAgdGhpcy5fcmVhZHkgPSAwO1xuICAgICAgdGhpcy5fZG9uZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fYnVmLmNsZWFyKCk7XG4gICAgICBsZXQgZmFpbGVkID0gZmFsc2U7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0aGlzLmRlY29kZVBhc3MoZ2VuKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9jbG9zZWQgJiYgdGhpcy5fZ2VuID09PSBnZW4pIHtcbiAgICAgICAgICBmYWlsZWQgPSB0cnVlO1xuICAgICAgICAgIGxvZ2dlci53YXJuKFxuICAgICAgICAgICAgVEFHLFxuICAgICAgICAgICAgYFske3RoaXMubWV0YS5pZC5zbGljZSgwLCA4KX1dIGRlY29kZSBwYXNzIGZhaWxlZDogJHtlIGluc3RhbmNlb2YgRXJyb3IgPyBlLm1lc3NhZ2UgOiBTdHJpbmcoZSl9YCxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5fY2xvc2VkKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuX2dlbiAhPT0gZ2VuKSB7XG4gICAgICAgIGZhaWxzID0gMDtcbiAgICAgICAgY29udGludWU7IC8vIHJlc3RhcnQgcmVxdWVzdGVkIG1pZC1wYXNzXG4gICAgICB9XG4gICAgICAvLyBBIHRocm93biBwYXNzIGlzIGEgdHJhbnNpZW50IHNvdXJjZSBlcnJvciAoZS5nLiBhIHN0cmVhbWVkIGxvb3AgcmUtb3Blbik7IHJldHJ5IGluc3RlYWQgb2YgcmVwb3J0aW5nIEVPRiwgd2hpY2ggd291bGQgYmxhbmsgdGhlIGZyYW1lLlxuICAgICAgaWYgKGZhaWxlZCAmJiArK2ZhaWxzIDw9IE1BWF9QQVNTX1JFVFJZKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgZmFpbHMgPSAwO1xuICAgICAgdGhpcy5fZG9uZSA9IHRydWU7XG4gICAgICB0aGlzLmRyYWluV2FpdGVycygpO1xuICAgICAgYXdhaXQgdGhpcy51bnRpbFJlc3RhcnQoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGRlY29kZVBhc3MoZ2VuOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBmb3IgYXdhaXQgKGNvbnN0IHsgaWR4LCBidWYgfSBvZiBkZWNvZGVGcmFtZXModGhpcy5fc3JjLCB0aGlzLm1ldGEsIHRoaXMuX2N0cmwuc2lnbmFsKSkge1xuICAgICAgaWYgKHRoaXMuX2Nsb3NlZCB8fCB0aGlzLl9nZW4gIT09IGdlbikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBhdCA9IHRoaXMuX2xlYWRGcmFtZXMgKyBpZHg7IC8vIG1hcCBkZWNvZGUgcG9zaXRpb24gcGFzdCB0aGUgaGVsZCBsZWFkLWdhcCBmcmFtZXNcbiAgICAgIHdoaWxlICghdGhpcy5fY2xvc2VkICYmIHRoaXMuX2dlbiA9PT0gZ2VuICYmIGF0ID4gdGhpcy5kZW1hbmQgKyBERUNPREVfQUhFQUQpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5wYXVzZSgpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuX2Nsb3NlZCB8fCB0aGlzLl9nZW4gIT09IGdlbikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLl9idWYuc2V0KGF0LCBidWYpO1xuICAgICAgdGhpcy5fcmVhZHkgPSBhdDtcbiAgICAgIC8vIERyYWluIGJlZm9yZSBldmljdDogd2l0aCB3YW50IGZhciBhaGVhZCB0aGUgZmxvb3IgY292ZXJzIHRoaXMgZnJhbWUsIGFuZCBldmljdGluZyBpdCBmaXJzdCBzdGFydmVzIGl0cyB3YWl0ZXIgZm9yZXZlci5cbiAgICAgIHRoaXMuZHJhaW5XYWl0ZXJzKCk7XG4gICAgICB0aGlzLmV2aWN0KCk7XG4gICAgfVxuICB9XG5cbiAgLy8gV2FpdGVycyB0aGF0IHN1cnZpdmVkIGEgcmV3aW5kIHJlc3RhcnQgYXJlIHN0aWxsIGRlbWFuZDsgaWdub3JpbmcgdGhlbSBwYXJrcyB0aGUgcGFzcyBhbmQgc3RhcnZlcyB0aGVtIGZvcmV2ZXIuXG4gIHByaXZhdGUgZ2V0IGRlbWFuZCgpOiBudW1iZXIge1xuICAgIGxldCBkID0gdGhpcy5fd2FudDtcbiAgICBmb3IgKGNvbnN0IHcgb2YgdGhpcy5fd2FpdGVycykge1xuICAgICAgaWYgKHcuaWR4ID4gZCkge1xuICAgICAgICBkID0gdy5pZHg7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBkO1xuICB9XG5cbiAgcHJpdmF0ZSBwYXVzZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHIpID0+IHtcbiAgICAgIHRoaXMuX3Jlc3VtZSA9IHI7XG4gICAgfSk7XG4gIH1cblxuICAvLyBQYXJrIHVudGlsIGEgbG9vcC9iYWNrd2FyZCByZXF1ZXN0IChvciBjbG9zZSkgY2FsbHMgcmVxdWVzdFJlc3RhcnQoKS5cbiAgcHJpdmF0ZSB1bnRpbFJlc3RhcnQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX2Nsb3NlZCkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHIpID0+IHtcbiAgICAgIHRoaXMuX3Jlc3RhcnQgPSByO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBldmljdCgpOiB2b2lkIHtcbiAgICBjb25zdCBmbG9vciA9IHRoaXMuX3dhbnQgLSB0aGlzLl9rZWVwQ291bnQ7XG4gICAgZm9yIChjb25zdCBrIG9mIHRoaXMuX2J1Zi5rZXlzKCkpIHtcbiAgICAgIGlmIChrIDwgZmxvb3IpIHtcbiAgICAgICAgdGhpcy5fYnVmLmRlbGV0ZShrKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGRyYWluV2FpdGVycygpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIFsuLi50aGlzLl93YWl0ZXJzXSkge1xuICAgICAgY29uc3QgaGl0ID0gdGhpcy5fYnVmLmdldChlbnRyeS5pZHgpO1xuICAgICAgaWYgKGhpdCkge1xuICAgICAgICB0aGlzLl93YWl0ZXJzLmRlbGV0ZShlbnRyeSk7XG4gICAgICAgIGVudHJ5LnJlc29sdmUoaGl0KTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5fZG9uZSkge1xuICAgICAgICB0aGlzLl93YWl0ZXJzLmRlbGV0ZShlbnRyeSk7XG4gICAgICAgIGVudHJ5LnJlc29sdmUoQnVmZmVyLmFsbG9jKDApKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDUvMTguXG5cbmltcG9ydCB7IERlY29kZXIgfSBmcm9tIFwibm9kZS1hdi9hcGlcIjtcbmltcG9ydCB7IEFWTUVESUFfVFlQRV9WSURFTyB9IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgb3BlbklucHV0IH0gZnJvbSBcIi4vb3BlblwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFByb2JlUmVzdWx0IHtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIGR1cmF0aW9uOiBudW1iZXI7XG4gIC8qKiBQVFMgKHMpIG9mIHRoZSBmaXJzdCBkZWNvZGFibGUgZnJhbWU7IGEgY29ycnVwdC9lbXB0eSBsZWFkaW5nIHJ1biBpcyBoZWxkIG9uIGl0LCBsaWtlIENocm9tZS4gKi9cbiAgbGVhZEdhcDogbnVtYmVyO1xufVxuXG4vLyBObyB3YWxsLWNsb2NrIGNhcDogb3BlbklucHV0J3MgcGVyLXJlYWQgcndfdGltZW91dCBib3VuZHMgYSBzdHVjayBzb3VyY2UsIGFuZCB0aGUgY2FsbGVyIHJldHJpZXMgb24gdGhyb3cuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvYmUoc3JjOiBzdHJpbmcpOiBQcm9taXNlPFByb2JlUmVzdWx0PiB7XG4gIGF3YWl0IHVzaW5nIGQgPSBhd2FpdCBvcGVuSW5wdXQoc3JjKTtcbiAgY29uc3Qgc3RyZWFtID0gZC5zdHJlYW1zPy5maW5kKChzKSA9PiBzLmNvZGVjcGFyLmNvZGVjVHlwZSA9PT0gQVZNRURJQV9UWVBFX1ZJREVPKTtcbiAgaWYgKCFzdHJlYW0pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJwcm9iZTogbm8gdmlkZW8gc3RyZWFtXCIpO1xuICB9XG4gIGNvbnN0IGR1cmF0aW9uID0gZC5kdXJhdGlvbiA+IDAgPyBkLmR1cmF0aW9uIDogMDtcbiAgY29uc3QgdGIgPSBzdHJlYW0udGltZUJhc2UubnVtIC8gc3RyZWFtLnRpbWVCYXNlLmRlbjtcbiAgdXNpbmcgZGVjID0gYXdhaXQgRGVjb2Rlci5jcmVhdGUoc3RyZWFtLCB7IHRocmVhZENvdW50OiAxIH0pO1xuICBsZXQgbGVhZEdhcCA9IDA7XG4gIC8vIEZpcnN0IGNsZWFuIGZyYW1lJ3MgUFRTID0gd2hlcmUgY29udGVudCBiZWdpbnM7IHNraXAgY29ycnVwdCBmcmFtZXMgbGlrZSBhIGJyb3dzZXIuXG4gIG91dGVyOiBmb3IgYXdhaXQgKHVzaW5nIHBrdCBvZiBkLnBhY2tldHMoc3RyZWFtLmluZGV4KSkge1xuICAgIHRyeSB7XG4gICAgICBmb3IgYXdhaXQgKHVzaW5nIGZyYW1lIG9mIGRlYy5mcmFtZXMocGt0KSkge1xuICAgICAgICBpZiAoZnJhbWU/LmRlY29kZUVycm9yRmxhZ3MgIT09IDApIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBsZWFkR2FwID0gTWF0aC5tYXgoMCwgTnVtYmVyKGZyYW1lLnB0cykgKiB0Yik7XG4gICAgICAgIGJyZWFrIG91dGVyO1xuICAgICAgfVxuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gY29ycnVwdCBwYWNrZXQg4oCUIHNraXAgdG8gdGhlIG5leHRcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHsgd2lkdGg6IHN0cmVhbS5jb2RlY3Bhci53aWR0aCwgaGVpZ2h0OiBzdHJlYW0uY29kZWNwYXIuaGVpZ2h0LCBkdXJhdGlvbiwgbGVhZEdhcCB9O1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNy8wNi5cblxuaW1wb3J0IHsgcmFuZG9tQnl0ZXMgfSBmcm9tIFwibm9kZTpjcnlwdG9cIjtcbmltcG9ydCB7IHJlYWRGaWxlLCBybSB9IGZyb20gXCJub2RlOmZzL3Byb21pc2VzXCI7XG5pbXBvcnQgeyB0bXBkaXIgfSBmcm9tIFwibm9kZTpvc1wiO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IENvZGVjLCBGRm1wZWdFcnJvciwgRnJhbWUgfSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHsgQVZfUElYX0ZNVF9ZVVY0MjBQLCBBVkVSUk9SX0VBR0FJTiwgQVZFUlJPUl9FT0YgfSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcbmltcG9ydCB7IEZGX0VOQ09ERVJfTElCVlBYX1ZQOSwgbWFrZVBhY2tldCwgb3BlblZpZGVvQ3R4IH0gZnJvbSBcIi4uLy4uL2Jhc2UvZW5jb2Rlci9taXNjXCI7XG5pbXBvcnQgeyBGb3JtYXRNdXhlciB9IGZyb20gXCIuLi8uLi9iYXNlL2VuY29kZXIvbXV4ZXJcIjtcblxuZXhwb3J0IGludGVyZmFjZSBTdHViRW5jb2RlT3B0aW9ucyB7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICBkdXJhdGlvbjogbnVtYmVyO1xufVxuXG4vLyBSZWFsIHBhcnNlYWJsZSBtZWRpYSB3aXRoIHRoZSBzb3VyY2UncyBpbnRyaW5zaWMgc2l6ZSArIGR1cmF0aW9uLCBzbyBCbGluayBsYXlzIG91dCBsaWtlIENocm9tZS5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBlbmNvZGVTdHViV2VibSh7IHdpZHRoLCBoZWlnaHQsIGR1cmF0aW9uIH06IFN0dWJFbmNvZGVPcHRpb25zKTogUHJvbWlzZTxCdWZmZXI+IHtcbiAgY29uc3QgY29kZWMgPSBDb2RlYy5maW5kRW5jb2RlckJ5TmFtZShGRl9FTkNPREVSX0xJQlZQWF9WUDkpO1xuICBpZiAoIWNvZGVjKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBzdHViOiBlbmNvZGVyIG5vdCBmb3VuZDogJHtGRl9FTkNPREVSX0xJQlZQWF9WUDl9YCk7XG4gIH1cbiAgY29uc3QgcGF0aCA9IGpvaW4odG1wZGlyKCksIGBwdXBfc3R1Yl8ke3JhbmRvbUJ5dGVzKDgpLnRvU3RyaW5nKFwiaGV4XCIpfS53ZWJtYCk7XG4gIHRyeSB7XG4gICAge1xuICAgICAgYXdhaXQgdXNpbmcgbXV4ZXIgPSBuZXcgRm9ybWF0TXV4ZXIocGF0aCk7XG4gICAgICAvLyBUaW1lYmFzZSAxLzEwMDAgKGZwcyBwYXJhbSkgbGV0cyBvbmUgcGFja2V0IGNhcnJ5IHRoZSBmdWxsIHNvdXJjZSBkdXJhdGlvbiBpbiBtcy5cbiAgICAgIHVzaW5nIGN0eCA9IGF3YWl0IG9wZW5WaWRlb0N0eChcbiAgICAgICAge1xuICAgICAgICAgIGNvZGVjLFxuICAgICAgICAgIHdpZHRoLFxuICAgICAgICAgIGhlaWdodCxcbiAgICAgICAgICBmcHM6IDEwMDAsXG4gICAgICAgICAgYml0cmF0ZTogMTAwXzAwMCxcbiAgICAgICAgICBwaXhlbEZvcm1hdDogQVZfUElYX0ZNVF9ZVVY0MjBQLFxuICAgICAgICAgIG9wdGlvbnM6IHsgZGVhZGxpbmU6IFwicmVhbHRpbWVcIiwgXCJjcHUtdXNlZFwiOiBcIjhcIiB9LFxuICAgICAgICB9LFxuICAgICAgICBcInN0dWJDdHgub3BlbjJcIixcbiAgICAgICk7XG4gICAgICBjb25zdCBzdHJlYW0gPSBtdXhlci5hZGRTdHJlYW0oY3R4KTtcbiAgICAgIGF3YWl0IG11eGVyLm9wZW4oKTtcbiAgICAgIHVzaW5nIHN0dWIgPSBuZXcgU3R1YkZyYW1lKHdpZHRoLCBoZWlnaHQpO1xuICAgICAgY29uc3QgbXMgPSBCaWdJbnQoTWF0aC5tYXgoMSwgTWF0aC5yb3VuZChkdXJhdGlvbiAqIDEwMDApKSk7XG4gICAgICBzdHViLmZyYW1lLnB0cyA9IDBuO1xuICAgICAgc3R1Yi5mcmFtZS5kdXJhdGlvbiA9IG1zO1xuICAgICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IGN0eC5zZW5kRnJhbWUoc3R1Yi5mcmFtZSksIFwic3R1YkN0eC5zZW5kRnJhbWVcIik7XG4gICAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgY3R4LnNlbmRGcmFtZShudWxsKSwgXCJzdHViQ3R4LmZsdXNoXCIpO1xuICAgICAgdXNpbmcgcGt0ID0gbWFrZVBhY2tldCgpO1xuICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgY29uc3QgciA9IGF3YWl0IGN0eC5yZWNlaXZlUGFja2V0KHBrdCk7XG4gICAgICAgIGlmIChyID09PSBBVkVSUk9SX0VBR0FJTiB8fCByID09PSBBVkVSUk9SX0VPRikge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihyLCBcInN0dWJDdHgucmVjZWl2ZVBhY2tldFwiKTtcbiAgICAgICAgcGt0LnN0cmVhbUluZGV4ID0gc3RyZWFtLmluZGV4O1xuICAgICAgICBwa3QuZHVyYXRpb24gPSBtcztcbiAgICAgICAgcGt0LnJlc2NhbGVUcyhjdHgudGltZUJhc2UsIHN0cmVhbS50aW1lQmFzZSk7XG4gICAgICAgIGF3YWl0IG11eGVyLndyaXRlUGFja2V0KHBrdCk7XG4gICAgICAgIHBrdC51bnJlZigpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYXdhaXQgcmVhZEZpbGUocGF0aCk7XG4gIH0gZmluYWxseSB7XG4gICAgYXdhaXQgcm0ocGF0aCwgeyBmb3JjZTogdHJ1ZSB9KTtcbiAgfVxufVxuXG4vLyBPd25zIHRoZSBibGFjayBwaXhlbCBidWZmZXIgQU5EIGl0cyB6ZXJvLWNvcHkgZnJhbWUgdmlldyDigJQgYHVzaW5nYCBwaW5zIGJvdGggdW50aWwgYWZ0ZXIgZW5jb2RlLlxuY2xhc3MgU3R1YkZyYW1lIGltcGxlbWVudHMgRGlzcG9zYWJsZSB7XG4gIHJlYWRvbmx5IGZyYW1lOiBGcmFtZTtcbiAgcHJpdmF0ZSByZWFkb25seSBfYnVmOiBCdWZmZXI7XG5cbiAgY29uc3RydWN0b3Iod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpIHtcbiAgICBjb25zdCBsdW1hID0gd2lkdGggKiBoZWlnaHQ7XG4gICAgY29uc3QgY2hyb21hID0gTWF0aC5jZWlsKHdpZHRoIC8gMikgKiBNYXRoLmNlaWwoaGVpZ2h0IC8gMik7XG4gICAgdGhpcy5fYnVmID0gQnVmZmVyLmFsbG9jKGx1bWEgKyBjaHJvbWEgKiAyLCAweDgwKTtcbiAgICB0aGlzLl9idWYuZmlsbCgwLCAwLCBsdW1hKTtcbiAgICB0aGlzLmZyYW1lID0gRnJhbWUuZnJvbVZpZGVvQnVmZmVyKHRoaXMuX2J1ZiwgeyB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQ6IEFWX1BJWF9GTVRfWVVWNDIwUCB9KTtcbiAgfVxuXG4gIFtTeW1ib2wuZGlzcG9zZV0oKTogdm9pZCB7XG4gICAgdGhpcy5mcmFtZVtTeW1ib2wuZGlzcG9zZV0oKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNS8xOC5cblxuaW1wb3J0IHsgY3JlYXRlSGFzaCB9IGZyb20gXCJub2RlOmNyeXB0b1wiO1xuaW1wb3J0IHsgdXNlUmV0cnkgfSBmcm9tIFwiLi4vLi4vYmFzZS9yZXRyeVwiO1xuaW1wb3J0IHsgcHJveGllZFVybCB9IGZyb20gXCIuLi9uZXR3b3JrXCI7XG5pbXBvcnQgeyBEZWNvZGVTZXNzaW9uIH0gZnJvbSBcIi4vZGVjb2RlX3Nlc3Npb25cIjtcbmltcG9ydCB7IHR5cGUgUHJvYmVSZXN1bHQsIHByb2JlIH0gZnJvbSBcIi4vcHJvYmVcIjtcbmltcG9ydCB7IGVuY29kZVN0dWJXZWJtIH0gZnJvbSBcIi4vc3R1YlwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFZpZGVvTWV0YSB7XG4gIGlkOiBzdHJpbmc7XG4gIC8qKiBJbnRyaW5zaWMgc291cmNlIGRpbWVuc2lvbnMgKHJlcG9ydGVkIGFzIHZpZGVvV2lkdGgvdmlkZW9IZWlnaHQpLiAqL1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgLyoqIERlY29kZWQrc2NhbGVkIGZyYW1lIGRpbWVuc2lvbnMgYWN0dWFsbHkgc2VydmVkICjiiaQgc291cmNlOyBjYXBwZWQgdG8gdGhlIGRpc3BsYXkgYm94KS4gKi9cbiAgZnJhbWVXaWR0aDogbnVtYmVyO1xuICBmcmFtZUhlaWdodDogbnVtYmVyO1xuICBmcHM6IG51bWJlcjtcbiAgZHVyYXRpb246IG51bWJlcjtcbiAgLyoqIFNlY29uZHMgb2YgY29ycnVwdC9lbXB0eSBsZWFkaW5nIGNvbnRlbnQgaGVsZCBvbiB0aGUgZmlyc3QgZGVjb2RhYmxlIGZyYW1lLiAqL1xuICBsZWFkR2FwOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3Blbk9wdGlvbnMge1xuICBzcmM6IHN0cmluZztcbiAgZnBzOiBudW1iZXI7XG4gIC8qKiBEaXNwbGF5LWJveCBwaXhlbHMgKGNhbnZhcyBiYWNraW5nIHN0b3JlKTsgZGVjb2RlIGlzIGRvd25zY2FsZWQgdG8gY292ZXIgdGhpcywgbmV2ZXIgdXBzY2FsZWQuICovXG4gIGRzdFc/OiBudW1iZXI7XG4gIGRzdEg/OiBudW1iZXI7XG4gIC8qKiBvYmplY3RGaXQ7IFwibm9uZVwiIG5lZWRzIDE6MSBuYXRpdmUgcGl4ZWxzIHNvIGl0IHNraXBzIGRvd25zY2FsZS4gKi9cbiAgZml0Pzogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgRW50cnkge1xuICBzZXNzaW9uOiBEZWNvZGVTZXNzaW9uO1xuICByZWZzOiBudW1iZXI7XG59XG5cbmV4cG9ydCBjbGFzcyBGcmFtZVNlcnZlciB7XG4gIHByaXZhdGUgX3Nlc3Npb25zID0gbmV3IE1hcDxzdHJpbmcsIEVudHJ5PigpO1xuICBwcml2YXRlIF9wcm9iZXMgPSBuZXcgTWFwPHN0cmluZywgUHJvbWlzZTxQcm9iZVJlc3VsdD4+KCk7XG4gIHByaXZhdGUgX3N0dWJzID0gbmV3IE1hcDxzdHJpbmcsIFByb21pc2U8QnVmZmVyPj4oKTtcbiAgcHJpdmF0ZSBfY2xvc2VkID0gZmFsc2U7XG5cbiAgLy8gLWQgZGVjb2RlIGJ5cGFzc2VzIHRoZSB3aW5kb3cgaW50ZXJjZXB0b3IsIHNvIGl0IHJlbWFwcyBob3N0cyBpdHNlbGYgd2hlbiB0aGUgaW5uZXIgcHJveHkgaXMgb24uXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgX3VzZUlubmVyUHJveHk6IGJvb2xlYW4pIHt9XG5cbiAgLy8gY2xvc2VkLWNoZWNrZWQgYWZ0ZXIgcHJvYmUgc28gY2xvc2VBbGwoKSBjYW4ndCByYWNlIGEgc2xvdyBvcGVuIGludG8gYSBsZWFrZWQgc2Vzc2lvbi5cbiAgYXN5bmMgb3BlbihvcHRzOiBPcGVuT3B0aW9ucyk6IFByb21pc2U8VmlkZW9NZXRhPiB7XG4gICAgaWYgKHRoaXMuX2Nsb3NlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZnJhbWUtc2VydmVyOiBjbG9zZWRcIik7XG4gICAgfVxuICAgIGNvbnN0IGlkID0ga2V5KG9wdHMpO1xuICAgIGNvbnN0IGhpdCA9IHRoaXMuX3Nlc3Npb25zLmdldChpZCk7XG4gICAgaWYgKGhpdCkge1xuICAgICAgaGl0LnJlZnMrKztcbiAgICAgIHJldHVybiBoaXQuc2Vzc2lvbi5tZXRhO1xuICAgIH1cbiAgICBjb25zdCBzcmMgPSB0aGlzLl91c2VJbm5lclByb3h5ID8gcHJveGllZFVybChvcHRzLnNyYykgOiBvcHRzLnNyYztcbiAgICBjb25zdCBpbmZvID0gYXdhaXQgdGhpcy5wcm9iZUNhY2hlZChzcmMpO1xuICAgIGlmICh0aGlzLl9jbG9zZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcImZyYW1lLXNlcnZlcjogY2xvc2VkXCIpO1xuICAgIH1cbiAgICBsZXQgZnJhbWVXaWR0aCA9IGluZm8ud2lkdGg7XG4gICAgbGV0IGZyYW1lSGVpZ2h0ID0gaW5mby5oZWlnaHQ7XG4gICAgLy8gRG93bnNjYWxlIHRvIGNvdmVyIHRoZSBkaXNwbGF5IGJveCAobmV2ZXIgdXBzY2FsZSk7IG9iamVjdEZpdCBcIm5vbmVcIiBuZWVkcyAxOjEgbmF0aXZlIHBpeGVscy5cbiAgICBpZiAob3B0cy5kc3RXICYmIG9wdHMuZHN0SCAmJiBvcHRzLmZpdCAhPT0gXCJub25lXCIpIHtcbiAgICAgIGNvbnN0IHMgPSBNYXRoLm1pbigxLCBNYXRoLm1heChvcHRzLmRzdFcgLyBpbmZvLndpZHRoLCBvcHRzLmRzdEggLyBpbmZvLmhlaWdodCkpO1xuICAgICAgZnJhbWVXaWR0aCA9IGV2ZW4oaW5mby53aWR0aCAqIHMpO1xuICAgICAgZnJhbWVIZWlnaHQgPSBldmVuKGluZm8uaGVpZ2h0ICogcyk7XG4gICAgfVxuICAgIGNvbnN0IG1ldGE6IFZpZGVvTWV0YSA9IHtcbiAgICAgIGlkLFxuICAgICAgd2lkdGg6IGluZm8ud2lkdGgsXG4gICAgICBoZWlnaHQ6IGluZm8uaGVpZ2h0LFxuICAgICAgZnJhbWVXaWR0aCxcbiAgICAgIGZyYW1lSGVpZ2h0LFxuICAgICAgZnBzOiBvcHRzLmZwcyxcbiAgICAgIGR1cmF0aW9uOiBpbmZvLmR1cmF0aW9uLFxuICAgICAgbGVhZEdhcDogaW5mby5sZWFkR2FwLFxuICAgIH07XG4gICAgdGhpcy5fc2Vzc2lvbnMuc2V0KGlkLCB7IHNlc3Npb246IG5ldyBEZWNvZGVTZXNzaW9uKG1ldGEsIHNyYyksIHJlZnM6IDEgfSk7XG4gICAgcmV0dXJuIG1ldGE7XG4gIH1cblxuICAvLyBEZXRlcm1pbmlzdGljIG1lZGlhIHJlcXVlc3RzIHJlZGlyZWN0IGhlcmU6IHJlYWwgcGFyc2VhYmxlIGJ5dGVzIHdpdGggdHJ1ZSBpbnRyaW5zaWMgc2l6ZSArIGR1cmF0aW9uLlxuICBzdHViKHNyYzogc3RyaW5nKTogUHJvbWlzZTxCdWZmZXI+IHtcbiAgICBpZiAodGhpcy5fY2xvc2VkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJmcmFtZS1zZXJ2ZXI6IGNsb3NlZFwiKTtcbiAgICB9XG4gICAgY29uc3QgcmVhbCA9IHRoaXMuX3VzZUlubmVyUHJveHkgPyBwcm94aWVkVXJsKHNyYykgOiBzcmM7XG4gICAgY29uc3QgaGl0ID0gdGhpcy5fc3R1YnMuZ2V0KHJlYWwpO1xuICAgIGlmIChoaXQpIHtcbiAgICAgIHJldHVybiBoaXQ7XG4gICAgfVxuICAgIGNvbnN0IHAgPSB0aGlzLnByb2JlQ2FjaGVkKHJlYWwpLnRoZW4oKGluZm8pID0+XG4gICAgICBlbmNvZGVTdHViV2VibSh7XG4gICAgICAgIHdpZHRoOiBpbmZvLndpZHRoLFxuICAgICAgICBoZWlnaHQ6IGluZm8uaGVpZ2h0LFxuICAgICAgICBkdXJhdGlvbjogaW5mby5kdXJhdGlvbixcbiAgICAgIH0pLFxuICAgICk7XG4gICAgcC5jYXRjaCgoKSA9PiB0aGlzLl9zdHVicy5kZWxldGUocmVhbCkpO1xuICAgIHRoaXMuX3N0dWJzLnNldChyZWFsLCBwKTtcbiAgICByZXR1cm4gcDtcbiAgfVxuXG4gIGdldEZyYW1lKGlkOiBzdHJpbmcsIGlkeDogbnVtYmVyKTogUHJvbWlzZTxCdWZmZXI+IHtcbiAgICBjb25zdCBlID0gdGhpcy5fc2Vzc2lvbnMuZ2V0KGlkKTtcbiAgICBpZiAoIWUpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoQnVmZmVyLmFsbG9jKDApKTtcbiAgICB9XG4gICAgcmV0dXJuIGUuc2Vzc2lvbi5nZXRGcmFtZShpZHgpO1xuICB9XG5cbiAgYXN5bmMgY2xvc2UoaWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGUgPSB0aGlzLl9zZXNzaW9ucy5nZXQoaWQpO1xuICAgIGlmICghZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoLS1lLnJlZnMgPiAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX3Nlc3Npb25zLmRlbGV0ZShpZCk7XG4gICAgYXdhaXQgZS5zZXNzaW9uLmNsb3NlKCk7XG4gIH1cblxuICAvLyBGYWlsZWQgcHJvYmVzIGV2aWN0IHNvIGEgdHJhbnNpZW50IHNvdXJjZSBlcnJvciBjYW4gcmV0cnkgb24gdGhlIG5leHQgcmVxdWVzdC5cbiAgcHJpdmF0ZSBwcm9iZUNhY2hlZChzcmM6IHN0cmluZyk6IFByb21pc2U8UHJvYmVSZXN1bHQ+IHtcbiAgICBjb25zdCBoaXQgPSB0aGlzLl9wcm9iZXMuZ2V0KHNyYyk7XG4gICAgaWYgKGhpdCkge1xuICAgICAgcmV0dXJuIGhpdDtcbiAgICB9XG4gICAgY29uc3QgcCA9IHVzZVJldHJ5KHsgZm46IHByb2JlIH0pKHNyYyk7XG4gICAgcC5jYXRjaCgoKSA9PiB0aGlzLl9wcm9iZXMuZGVsZXRlKHNyYykpO1xuICAgIHRoaXMuX3Byb2Jlcy5zZXQoc3JjLCBwKTtcbiAgICByZXR1cm4gcDtcbiAgfVxuXG4gIGFzeW5jIGNsb3NlQWxsKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuX2Nsb3NlZCA9IHRydWU7XG4gICAgY29uc3Qgc2Vzc2lvbnMgPSBbLi4udGhpcy5fc2Vzc2lvbnMudmFsdWVzKCldO1xuICAgIHRoaXMuX3Nlc3Npb25zLmNsZWFyKCk7XG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoc2Vzc2lvbnMubWFwKChlKSA9PiBlLnNlc3Npb24uY2xvc2UoKSkpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGtleShvcHRzOiBPcGVuT3B0aW9ucyk6IHN0cmluZyB7XG4gIHJldHVybiBjcmVhdGVIYXNoKFwic2hhMVwiKVxuICAgIC51cGRhdGUoYCR7b3B0cy5zcmN9fCR7b3B0cy5mcHN9fCR7b3B0cy5kc3RXID8/IFwiXCJ9fCR7b3B0cy5kc3RIID8/IFwiXCJ9fCR7b3B0cy5maXQgPz8gXCJcIn1gKVxuICAgIC5kaWdlc3QoXCJoZXhcIik7XG59XG5cbi8vIFJvdW5kIGRvd24gdG8gYW4gZXZlbiBpbnRlZ2VyICjiiaUyKSBmb3IgdGhlIHNjYWxlci5cbmZ1bmN0aW9uIGV2ZW4objogbnVtYmVyKTogbnVtYmVyIHtcbiAgY29uc3QgciA9IE1hdGgucm91bmQobik7XG4gIHJldHVybiBNYXRoLm1heCgyLCByIC0gKHIgJSAyKSk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA1LzE4LlxuXG5pbXBvcnQgeyBwcm90b2NvbCB9IGZyb20gXCJlbGVjdHJvblwiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4uLy4uL2Jhc2UvbG9nZ2luZ1wiO1xuaW1wb3J0IHsgRnJhbWVTZXJ2ZXIsIHR5cGUgVmlkZW9NZXRhIH0gZnJvbSBcIi4vZnJhbWVfc2VydmVyXCI7XG5cbmNvbnN0IFRBRyA9IFwiW0ZyYW1lUHJvdG9jb2xdXCI7XG5cbi8vIFNjaGVtZSBpcyByZWdpc3RlcmVkIGFsb25nc2lkZSBgcHVwYCBpbiByZW5kZXJlci9wcm90b2NvbC50cyAoc2luZ2xlIGNhbGwgb25seSkuXG5jb25zdCBTQ0hFTUUgPSBcInB1cC1mcmFtZVwiO1xuXG5jb25zdCBDT1JTX0hFQURFUlM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gIFwiYWNjZXNzLWNvbnRyb2wtYWxsb3ctb3JpZ2luXCI6IFwiKlwiLFxuICBcImFjY2Vzcy1jb250cm9sLWFsbG93LW1ldGhvZHNcIjogXCJHRVQsIE9QVElPTlNcIixcbiAgXCJhY2Nlc3MtY29udHJvbC1hbGxvdy1oZWFkZXJzXCI6IFwiKlwiLFxufTtcblxuLy8gTXVzdCBiZSBjYWxsZWQgYWZ0ZXIgYXBwIGlzIHJlYWR5LiBEZXRlcm1pbmlzdGljLW9ubHkgKHJlYWwtdGltZSB2aWRlb3Mgc2VsZi10aWNrLCBubyBmcmFtZSBwcm90b2NvbCkuXG5leHBvcnQgZnVuY3Rpb24gdXNlRnJhbWVQcm90b2NvbCh1c2VJbm5lclByb3h5OiBib29sZWFuKTogQXN5bmNEaXNwb3NhYmxlIHtcbiAgY29uc3QgZnMgPSBuZXcgRnJhbWVTZXJ2ZXIodXNlSW5uZXJQcm94eSk7XG4gIHByb3RvY29sLmhhbmRsZShTQ0hFTUUsIGFzeW5jIChyZXEpID0+IHtcbiAgICBpZiAocmVxLm1ldGhvZCA9PT0gXCJPUFRJT05TXCIpIHtcbiAgICAgIHJldHVybiBuZXcgUmVzcG9uc2UobnVsbCwgeyBzdGF0dXM6IDIwNCwgaGVhZGVyczogQ09SU19IRUFERVJTIH0pO1xuICAgIH1cbiAgICBjb25zdCB1cmwgPSBuZXcgVVJMKHJlcS51cmwpO1xuICAgIGxvZ2dlci5kZWJ1ZyhUQUcsIGAke3JlcS5tZXRob2R9ICR7dXJsLmhvc3RuYW1lfSR7dXJsLnNlYXJjaH1gKTtcbiAgICB0cnkge1xuICAgICAgc3dpdGNoICh1cmwuaG9zdG5hbWUpIHtcbiAgICAgICAgY2FzZSBcIm9wZW5cIjpcbiAgICAgICAgICByZXR1cm4ganNvbk9rKFxuICAgICAgICAgICAgYXdhaXQgZnMub3Blbih7XG4gICAgICAgICAgICAgIHNyYzogdXJsLnNlYXJjaFBhcmFtcy5nZXQoXCJzcmNcIikgPz8gXCJcIixcbiAgICAgICAgICAgICAgZnBzOiBpbnQodXJsLCBcImZwc1wiLCAzMCksXG4gICAgICAgICAgICAgIGRzdFc6IGludCh1cmwsIFwid1wiLCAwKSxcbiAgICAgICAgICAgICAgZHN0SDogaW50KHVybCwgXCJoXCIsIDApLFxuICAgICAgICAgICAgICBmaXQ6IHVybC5zZWFyY2hQYXJhbXMuZ2V0KFwiZml0XCIpID8/IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICk7XG4gICAgICAgIGNhc2UgXCJmcmFtZVwiOlxuICAgICAgICAgIHJldHVybiByZ2JhT2soYXdhaXQgZnMuZ2V0RnJhbWUodXJsLnNlYXJjaFBhcmFtcy5nZXQoXCJpZFwiKSA/PyBcIlwiLCBpbnQodXJsLCBcImlkeFwiLCAxKSkpO1xuICAgICAgICBjYXNlIFwic3R1YlwiOlxuICAgICAgICAgIHJldHVybiB3ZWJtT2soYXdhaXQgZnMuc3R1Yih1cmwuc2VhcmNoUGFyYW1zLmdldChcInNyY1wiKSA/PyBcIlwiKSk7XG4gICAgICAgIGNhc2UgXCJjbG9zZVwiOlxuICAgICAgICAgIGF3YWl0IGZzLmNsb3NlKHVybC5zZWFyY2hQYXJhbXMuZ2V0KFwiaWRcIikgPz8gXCJcIik7XG4gICAgICAgICAgcmV0dXJuIG5ldyBSZXNwb25zZShudWxsLCB7IHN0YXR1czogMjA0LCBoZWFkZXJzOiBDT1JTX0hFQURFUlMgfSk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIG5ldyBSZXNwb25zZShgdW5rbm93biBhY3Rpb246ICR7dXJsLmhvc3RuYW1lfWAsIHtcbiAgICAgICAgICAgIHN0YXR1czogNDA0LFxuICAgICAgICAgICAgaGVhZGVyczogQ09SU19IRUFERVJTLFxuICAgICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnN0IG1zZyA9IGUgaW5zdGFuY2VvZiBFcnJvciA/IGUubWVzc2FnZSA6IFN0cmluZyhlKTtcbiAgICAgIGxvZ2dlci5lcnJvcihUQUcsIGAke3VybC5ob3N0bmFtZX0gZmFpbGVkJHt1cmwuc2VhcmNofTogJHttc2d9YCk7XG4gICAgICByZXR1cm4gbmV3IFJlc3BvbnNlKG1zZywgeyBzdGF0dXM6IDUwMCwgaGVhZGVyczogQ09SU19IRUFERVJTIH0pO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiB7XG4gICAgW1N5bWJvbC5hc3luY0Rpc3Bvc2VdOiBhc3luYyAoKSA9PiB7XG4gICAgICBwcm90b2NvbC51bmhhbmRsZShTQ0hFTUUpO1xuICAgICAgYXdhaXQgZnMuY2xvc2VBbGwoKTtcbiAgICB9LFxuICB9O1xufVxuXG5mdW5jdGlvbiBqc29uT2sobWV0YTogVmlkZW9NZXRhKTogUmVzcG9uc2Uge1xuICByZXR1cm4gbmV3IFJlc3BvbnNlKEpTT04uc3RyaW5naWZ5KG1ldGEpLCB7XG4gICAgaGVhZGVyczogeyAuLi5DT1JTX0hFQURFUlMsIFwiY29udGVudC10eXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiIH0sXG4gIH0pO1xufVxuXG4vLyBDYWNoZWQgc3R1YiBCdWZmZXIgaXMgc2hhcmVkIGFjcm9zcyByZXNwb25zZXMg4oCUIGNvcHkgc28gYSBjb25zdW1lciBjYW4ndCBkZXRhY2ggaXQuXG5mdW5jdGlvbiB3ZWJtT2soYnl0ZXM6IEJ1ZmZlcik6IFJlc3BvbnNlIHtcbiAgY29uc3QgY29weSA9IG5ldyBVaW50OEFycmF5KGJ5dGVzLmJ5dGVMZW5ndGgpO1xuICBjb3B5LnNldChieXRlcyk7XG4gIHJldHVybiBuZXcgUmVzcG9uc2UoY29weS5idWZmZXIgYXMgQXJyYXlCdWZmZXIsIHtcbiAgICBoZWFkZXJzOiB7XG4gICAgICAuLi5DT1JTX0hFQURFUlMsXG4gICAgICBcImNvbnRlbnQtdHlwZVwiOiBcInZpZGVvL3dlYm1cIixcbiAgICAgIFwiY2FjaGUtY29udHJvbFwiOiBcIm5vLXN0b3JlXCIsXG4gICAgfSxcbiAgfSk7XG59XG5cbi8vIFJhdyBSR0JBIHBpeGVsczsgdGhlIHBhZ2Ugd3JhcHMgdGhlbSBpbiBJbWFnZURhdGEgdXNpbmcgbWV0YS53aWR0aC9oZWlnaHQgaXQgZ290IGZyb20gYG9wZW5gLlxuZnVuY3Rpb24gcmdiYU9rKGJ5dGVzOiBCdWZmZXIpOiBSZXNwb25zZSB7XG4gIGlmIChieXRlcy5ieXRlTGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG5ldyBSZXNwb25zZShudWxsLCB7IHN0YXR1czogNDEwLCBoZWFkZXJzOiBDT1JTX0hFQURFUlMgfSk7XG4gIH1cbiAgY29uc3QgY29weSA9IG5ldyBVaW50OEFycmF5KGJ5dGVzLmJ5dGVMZW5ndGgpO1xuICBjb3B5LnNldChieXRlcyk7XG4gIHJldHVybiBuZXcgUmVzcG9uc2UoY29weS5idWZmZXIgYXMgQXJyYXlCdWZmZXIsIHtcbiAgICBoZWFkZXJzOiB7XG4gICAgICAuLi5DT1JTX0hFQURFUlMsXG4gICAgICBcImNvbnRlbnQtdHlwZVwiOiBcImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbVwiLFxuICAgICAgXCJjYWNoZS1jb250cm9sXCI6IFwibm8tc3RvcmVcIixcbiAgICB9LFxuICB9KTtcbn1cblxuZnVuY3Rpb24gaW50KHVybDogVVJMLCBrZXk6IHN0cmluZywgZmFsbGJhY2s6IG51bWJlcik6IG51bWJlciB7XG4gIGNvbnN0IHYgPSB1cmwuc2VhcmNoUGFyYW1zLmdldChrZXkpO1xuICBjb25zdCBuID0gdiA/IHBhcnNlSW50KHYsIDEwKSA6IE5hTjtcbiAgcmV0dXJuIE51bWJlci5pc0Zpbml0ZShuKSA/IG4gOiBmYWxsYmFjaztcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDMvMTMuXG5cbmltcG9ydCB0eXBlIHsgQnJvd3NlcldpbmRvdywgRXZlbnQsIE5hdGl2ZUltYWdlLCBSZWN0YW5nbGUsIFNpemUsIFdlYkNvbnRlbnRzUGFpbnRFdmVudFBhcmFtcyB9IGZyb20gXCJlbGVjdHJvblwiO1xuaW1wb3J0IHsgQkxBTktfV0FSTl9SQVRJTywgQmxhbmtGcmFtZVN0YXRzIH0gZnJvbSBcIi4uL2Jhc2UvYmxhbmtfZnJhbWVcIjtcbmltcG9ydCB7IGFkdmFuY2VWaXJ0dWFsVGltZSwgcGF1c2VWaXJ0dWFsVGltZSwgcmVzaXplRHJhd2FibGUgfSBmcm9tIFwiLi4vYmFzZS9jZHBcIjtcbmltcG9ydCB7IEVuY29kZXJQaXBlbGluZSB9IGZyb20gXCIuLi9iYXNlL2VuY29kZXIvcGlwZWxpbmVcIjtcbmltcG9ydCB7IHNpemVFcXVhbHMgfSBmcm9tIFwiLi4vYmFzZS9pbWFnZVwiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4uL2Jhc2UvbG9nZ2luZ1wiO1xuaW1wb3J0IHR5cGUgeyBJcGNEb25lUGF5bG9hZCB9IGZyb20gXCIuL2lwY1wiO1xuaW1wb3J0IHR5cGUgeyBJUENSZW5kZXJPcHRpb25zIH0gZnJvbSBcIi4vc2NoZW1hXCI7XG5pbXBvcnQgeyBkZWNvZGVTdGVnbywgZHJhd1N0ZWdvLCBGUkFNRV9TWU5DX01BUktFUl9XSURUSCwgd2FpdFN0ZWdvVGljayB9IGZyb20gXCIuL3N0ZWdvXCI7XG5pbXBvcnQgeyB0aWNrIH0gZnJvbSBcIi4vdGlja1wiO1xuaW1wb3J0IHsgdXNlRnJhbWVQcm90b2NvbCB9IGZyb20gXCIuL3ZpZGVvL3Byb3RvY29sXCI7XG5pbXBvcnQgeyBkaXNwb3NlV2luZG93LCBsb2FkV2luZG93IH0gZnJvbSBcIi4vd2luZG93XCI7XG5cbmNvbnN0IFRBRyA9IFwiW1Nob290XVwiO1xuXG5pbnRlcmZhY2UgUGFpbnRPcHRpb25zIHtcbiAgc291cmNlOiBzdHJpbmc7XG4gIHdpbjogQnJvd3NlcldpbmRvdztcbiAgc2l6ZTogU2l6ZTtcbiAgbXM6IG51bWJlcjtcbn1cblxuLy8gUGFpbnRpbmcgc3RheXMgb24gZm9yIHRoZSB3aG9sZSBydW47IHRoaXMgb25seSB3YWl0cyBmb3IgdGhlIGZyYW1lIHdob3NlIHN0ZWdvIHJvdyBtYXRjaGVzIGBtc2AuXG5hc3luYyBmdW5jdGlvbiBwYWludCh7IHNvdXJjZSwgd2luLCBzaXplLCBtcyB9OiBQYWludE9wdGlvbnMpOiBQcm9taXNlPEJ1ZmZlcj4ge1xuICBsZXQgbGFzdFRzOiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gIGxldCBzdHVjayA9IDA7XG4gIGxldCBpbnRlcnZhbDogTm9kZUpTLlRpbWVvdXQgfCB1bmRlZmluZWQ7XG4gIGNvbnN0IGNkcCA9IHdpbi53ZWJDb250ZW50cy5kZWJ1Z2dlcjtcbiAgY29uc3QgZnJhbWVTaXplOiBTaXplID0geyB3aWR0aDogc2l6ZS53aWR0aCwgaGVpZ2h0OiBzaXplLmhlaWdodCArIDEgfTtcbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgbmV3IFByb21pc2U8QnVmZmVyPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBpbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgaWYgKHN0dWNrID49IDMpIHtcbiAgICAgICAgICByZWplY3QobmV3IEVycm9yKFwiZHJhd2FibGUgdGltZW91dFwiKSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHN0dWNrKys7XG4gICAgICAgIGxvZ2dlci53YXJuKFRBRywgYCR7c291cmNlfSByZW5kZXIgaXMgZXh0cmVtZWx5IHNsb3cgQCAke21zfSwgY3VycmVudDogJHtsYXN0VHN9IHdpdGggJHtzdHVja30gcmVwZWF0c2ApO1xuICAgICAgICB3aW4ud2ViQ29udGVudHMuaW52YWxpZGF0ZSgpO1xuICAgICAgfSwgMTAwMCk7XG4gICAgICBjb25zdCBoYW5kbGVyID0gKF9lOiBFdmVudDxXZWJDb250ZW50c1BhaW50RXZlbnRQYXJhbXM+LCBfZDogUmVjdGFuZ2xlLCBpbWFnZTogTmF0aXZlSW1hZ2UpID0+IHtcbiAgICAgICAgY29uc3QgaW1hZ2VTaXplID0gaW1hZ2UuZ2V0U2l6ZSgpO1xuICAgICAgICBpZiAoIXNpemVFcXVhbHMoaW1hZ2VTaXplLCBmcmFtZVNpemUpKSB7XG4gICAgICAgICAgLy8gTk9URShBdXRva2FrYSk6IFdlIG11c3QgZW5zdXJlIGZyYW1lIGlzIHJlYWR5IG9uIGVsZWN0cm9uIHY0MStcbiAgICAgICAgICByZXNpemVEcmF3YWJsZShjZHAsIGZyYW1lU2l6ZSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIERlY29kZSBmcm9tIGEgMi1yb3cgc2xpdmVyIGZpcnN0OyB0aGUgZnVsbC1mcmFtZSByZWFkYmFjayAofjhNQiBtZW1jcHkpIGlzIHBhaWQgb25seSBvbiB0aGUgbWF0Y2hpbmcgZnJhbWUuXG4gICAgICAgIGNvbnN0IHNsaXZlciA9IGltYWdlLmNyb3AoeyB4OiAwLCB5OiBmcmFtZVNpemUuaGVpZ2h0IC0gMiwgd2lkdGg6IEZSQU1FX1NZTkNfTUFSS0VSX1dJRFRILCBoZWlnaHQ6IDIgfSk7XG4gICAgICAgIGNvbnN0IHRzID0gZGVjb2RlU3RlZ28oc2xpdmVyLnRvQml0bWFwKCksIHsgd2lkdGg6IEZSQU1FX1NZTkNfTUFSS0VSX1dJRFRILCBoZWlnaHQ6IDIgfSk7XG4gICAgICAgIGlmICh0cyA9PT0gdW5kZWZpbmVkIHx8IE1hdGguYWJzKHRzIC0gbXMpID4gMSkge1xuICAgICAgICAgIGxhc3RUcyA9IHRzO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBiaXRtYXAgPSBpbWFnZS50b0JpdG1hcCgpO1xuICAgICAgICB3aW4ud2ViQ29udGVudHMub2ZmKFwicGFpbnRcIiwgaGFuZGxlcik7XG4gICAgICAgIHJlc29sdmUoQnVmZmVyLmZyb20oYml0bWFwLmJ1ZmZlciwgYml0bWFwLmJ5dGVPZmZzZXQsIHNpemUuaGVpZ2h0ICogc2l6ZS53aWR0aCAqIDQpKTtcbiAgICAgIH07XG4gICAgICB3aW4ud2ViQ29udGVudHMub24oXCJwYWludFwiLCBoYW5kbGVyKTtcbiAgICB9KTtcbiAgfSBmaW5hbGx5IHtcbiAgICBjbGVhckludGVydmFsKGludGVydmFsKTtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2hvb3Qob3B0aW9uczogSVBDUmVuZGVyT3B0aW9ucyk6IFByb21pc2U8SXBjRG9uZVBheWxvYWQ+IHtcbiAgY29uc3QgeyBzb3VyY2UsIGZwcywgd2lkdGgsIGhlaWdodCwgZHVyYXRpb24sIHdpdGhBdWRpbywgb3V0RmlsZSwgZGlzYWJsZUh3Q29kZWMsIHNpZ25hbCwgb25Qcm9ncmVzcyB9ID0gb3B0aW9ucztcbiAgaWYgKHdpdGhBdWRpbykge1xuICAgIGxvZ2dlci53YXJuKFRBRywgXCJhdWRpbyB3aWxsIGJlIGlnbm9yZWQgb24gdGhpcyBtb2RlXCIpO1xuICB9XG5cbiAgYXdhaXQgdXNpbmcgXyA9IHVzZUZyYW1lUHJvdG9jb2wob3B0aW9ucy51c2VJbm5lclByb3h5KTtcbiAgY29uc3QgdEluaXQgPSBwZXJmb3JtYW5jZS5ub3coKTtcbiAgY29uc3Qgd2luUCA9IGxvYWRXaW5kb3coeyBzb3VyY2UsIHJlbmRlcmVyOiBvcHRpb25zLCBzaWduYWwgfSk7XG4gIGF3YWl0IHVzaW5nIHBpcGVsaW5lID0gYXdhaXQgRW5jb2RlclBpcGVsaW5lLmNyZWF0ZSh7IHdpZHRoLCBoZWlnaHQsIGZwcywgb3V0RmlsZSwgd2l0aEF1ZGlvLCBkaXNhYmxlSHdDb2RlYyB9KTtcbiAgY29uc3Qgd2luID0gYXdhaXQgd2luUDtcbiAgbG9nZ2VyLmRlYnVnKFRBRywgXCJpbml0IGRvbmU6XCIsIHsgc291cmNlLCBjb3N0OiBwZXJmb3JtYW5jZS5ub3coKSAtIHRJbml0IH0pO1xuXG4gIGNvbnN0IHRvdGFsID0gTWF0aC5jZWlsKGZwcyAqIGR1cmF0aW9uKTtcbiAgY29uc3QgZnJhbWVJbnRlcnZhbCA9IDEwMDAgLyBmcHM7XG5cbiAgbGV0IHdyaXR0ZW4gPSAwO1xuICBsZXQgcHJvZ3Jlc3MgPSAwO1xuICBsZXQgZW5jb2RlRXJyb3I6IEVycm9yIHwgdW5kZWZpbmVkO1xuICBjb25zdCBibGFua1N0YXRzID0gbmV3IEJsYW5rRnJhbWVTdGF0cyh3aWR0aCwgaGVpZ2h0KTtcbiAgY29uc3QgY2RwID0gd2luLndlYkNvbnRlbnRzLmRlYnVnZ2VyO1xuICBjb25zdCBtYWluID0gd2luLndlYkNvbnRlbnRzLm1haW5GcmFtZTtcbiAgY29uc3QgaWZyYW1lID0gbWFpbi5mcmFtZXNbMF07XG4gIHRyeSB7XG4gICAgLy8gQ29tcG9zaXRvci9jYXB0dXJlIGNhZGVuY2UgY2FwLCBOT1Qgb3V0cHV0IGZwczsgZnJhbWVzIGFyZSBkYW1hZ2UtZHJpdmVuIHBlciB2aXJ0dWFsIHN0ZXAuXG4gICAgd2luLndlYkNvbnRlbnRzLnNldEZyYW1lUmF0ZSgyNDApO1xuICAgIGF3YWl0IHBhdXNlVmlydHVhbFRpbWUoY2RwKTtcblxuICAgIGZvciAobGV0IGZyYW1lID0gMDsgZnJhbWUgPCB0b3RhbDsgZnJhbWUrKykge1xuICAgICAgc2lnbmFsPy50aHJvd0lmQWJvcnRlZCgpO1xuICAgICAgY29uc3QgZnJhbWVNcyA9IChmcmFtZSArIDEpICogZnJhbWVJbnRlcnZhbDtcblxuICAgICAgY29uc3Qgc3dhcHBlZCA9IHdhaXRTdGVnb1RpY2sod2luLndlYkNvbnRlbnRzKTtcbiAgICAgIC8vIEluZGVwZW5kZW50IHRhcmdldHMgKGlmcmFtZSBjbG9jayB2cyBtYWluLWZyYW1lIHN0ZWdvIGNhbnZhcyk6IG9uZSBjb25jdXJyZW50IGhvcCBpbnN0ZWFkIG9mIHR3byBzZXJpYWwgb25lcy5cbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKFt0aWNrKHsgZnJhbWU6IGlmcmFtZSwgdGltZXN0YW1wTXM6IGZyYW1lTXMsIHNpZ25hbCB9KSwgZHJhd1N0ZWdvKHdpbi53ZWJDb250ZW50cywgZnJhbWVNcyldKTtcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKFthZHZhbmNlVmlydHVhbFRpbWUoY2RwLCBmcmFtZUludGVydmFsKSwgc3dhcHBlZF0pO1xuICAgICAgY29uc3QgYml0bWFwID0gYXdhaXQgcGFpbnQoeyBzb3VyY2UsIHdpbiwgc2l6ZTogeyB3aWR0aCwgaGVpZ2h0IH0sIG1zOiBmcmFtZU1zIH0pO1xuICAgICAgYmxhbmtTdGF0cy5zYW1wbGUoYml0bWFwKTtcbiAgICAgIC8vIEVuY29kZSB3aXRob3V0IGF3YWl0aW5nIChsaW1pdGVyIHNlcmlhbGl6ZXMpLCBzbyBpdCBvdmVybGFwcyB0aGUgbmV4dCBmcmFtZSdzIENEUC9wYWludCBzZXR1cC5cbiAgICAgIHBpcGVsaW5lLmVuY29kZUJHUkEoYml0bWFwKS5jYXRjaCgoZSkgPT4gKGVuY29kZUVycm9yID8/PSBlKSk7XG4gICAgICB3cml0dGVuKys7XG4gICAgICBpZiAoZW5jb2RlRXJyb3IpIHtcbiAgICAgICAgdGhyb3cgZW5jb2RlRXJyb3I7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5ld1Byb2dyZXNzID0gTWF0aC5mbG9vcigod3JpdHRlbiAvIHRvdGFsKSAqIDEwMCk7XG4gICAgICBpZiAobmV3UHJvZ3Jlc3MgIT09IHByb2dyZXNzKSB7XG4gICAgICAgIHByb2dyZXNzID0gbmV3UHJvZ3Jlc3M7XG4gICAgICAgIG9uUHJvZ3Jlc3MocHJvZ3Jlc3MpO1xuICAgICAgfVxuICAgIH1cbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCBkaXNwb3NlV2luZG93KHdpbik7XG4gICAgYXdhaXQgcGlwZWxpbmUuZmluaXNoKCk7XG4gIH1cblxuICBpZiAoZW5jb2RlRXJyb3IpIHtcbiAgICB0aHJvdyBlbmNvZGVFcnJvcjtcbiAgfVxuICBpZiAod3JpdHRlbiA9PT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIm5vIGZyYW1lcyBjYXB0dXJlZFwiKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBibGFuayA9IGJsYW5rU3RhdHMuZmluYWxpemUoKTtcbiAgICBpZiAoYmxhbmsgPj0gQkxBTktfV0FSTl9SQVRJTykge1xuICAgICAgbG9nZ2VyLndhcm4oVEFHLCBgJHtzb3VyY2V9IGJsYW5rLWZyYW1lIHJhdGlvICR7TWF0aC5yb3VuZChibGFuayAqIDEwMCl9JSDigJQgcG9zc2libGUgd2hpdGUvYmxhbmsgc2NyZWVuYCk7XG4gICAgfVxuICAgIHJldHVybiB7IHdyaXR0ZW4sIGphbms6IDAsIG91dEZpbGUsIGJsYW5rIH07XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDEvMzAuXG5cbmltcG9ydCB7IG9rIH0gZnJvbSBcIm5vZGU6YXNzZXJ0XCI7XG5pbXBvcnQgeyBta2RpciB9IGZyb20gXCJub2RlOmZzL3Byb21pc2VzXCI7XG5pbXBvcnQgeyBkaXJuYW1lIH0gZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHsgYXBwLCBNZW51IH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBzdGFydEVsZWN0cm9uQ3Jhc2hSZXBvcnRlciB9IGZyb20gXCIuL2Jhc2UvY3Jhc2hcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuL2Jhc2UvbG9nZ2luZ1wiO1xuaW1wb3J0IHsgbWFrZUNMSSB9IGZyb20gXCIuL2NvbW1vblwiO1xuaW1wb3J0IHsgdHlwZSBJcGNNc2csIElwY01zZ1R5cGUsIElwY1dyaXRlciB9IGZyb20gXCIuL3JlbmRlcmVyL2lwY1wiO1xuaW1wb3J0IHsgc2V0dXBQdXBQcm90b2NvbCB9IGZyb20gXCIuL3JlbmRlcmVyL3Byb3RvY29sXCI7XG5pbXBvcnQgeyByZW5kZXIgfSBmcm9tIFwiLi9yZW5kZXJlci9yZW5kZXJcIjtcbmltcG9ydCB7IHdpdGhSZXJlbmRlciB9IGZyb20gXCIuL3JlbmRlcmVyL3JlcmVuZGVyXCI7XG5pbXBvcnQgeyBzaG9vdCB9IGZyb20gXCIuL3JlbmRlcmVyL3Nob290XCI7XG5cbmNvbnN0IFRBRyA9IFwiW0FwcF1cIjtcblxuZnVuY3Rpb24gcHJpbnRGZWF0dXJlcygpIHtcbiAgbG9nZ2VyLmRlYnVnKFRBRywgXCJncHUgZmVhdHVyZXM6XCIsIGFwcC5nZXRHUFVGZWF0dXJlU3RhdHVzKCkpO1xufVxuXG5jb25zdCBjdHJsID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xubGV0IGV4aXRpbmcgPSBmYWxzZTtcblxuc3RhcnRFbGVjdHJvbkNyYXNoUmVwb3J0ZXIoKTtcbk1lbnUuc2V0QXBwbGljYXRpb25NZW51KG51bGwpO1xuYXBwLmRvY2s/LmhpZGUoKTtcbmFwcC5vbihcIndpbmRvdy1hbGwtY2xvc2VkXCIsICgpID0+IHt9KTtcbmFwcC5vbihcImdwdS1pbmZvLXVwZGF0ZVwiLCBwcmludEZlYXR1cmVzKTtcbmFwcC5vbihcImJlZm9yZS1xdWl0XCIsIChlKSA9PiAhZXhpdGluZyAmJiBlLnByZXZlbnREZWZhdWx0KCkpO1xuYXBwLm9uKFwid2lsbC1xdWl0XCIsIChlKSA9PiAhZXhpdGluZyAmJiBlLnByZXZlbnREZWZhdWx0KCkpO1xuXG5vayhwcm9jZXNzLnNlbmQsIFwiaXBjIGNoYW5uZWwgbWlzc2luZyDigJQgc3Bhd24gd2l0aCBzdGRpb1szXT0naXBjJ1wiKTtcbnByb2Nlc3Mub25jZShcImRpc2Nvbm5lY3RcIiwgKCkgPT4gY3RybC5hYm9ydChcImRpc2Nvbm5lY3RcIikpO1xucHJvY2Vzcy5vbihcIm1lc3NhZ2VcIiwgKHJhdykgPT4ge1xuICBjb25zdCBtc2cgPSByYXcgYXMgSXBjTXNnO1xuICBpZiAobXNnLnR5cGUgPT09IElwY01zZ1R5cGUuQ2FuY2VsKSB7XG4gICAgY3RybC5hYm9ydChtc2cucmVhc29uKTtcbiAgfVxufSk7XG5cbm1ha2VDTEkoe1xuICBuYW1lOiBcImFwcFwiLFxuICBydW46IGFzeW5jIChzb3VyY2UsIG9wdGlvbnMpID0+IHtcbiAgICBjb25zdCBpcGMgPSBuZXcgSXBjV3JpdGVyKCk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGFwcC53aGVuUmVhZHkoKTtcbiAgICAgIHNldHVwUHVwUHJvdG9jb2woKTtcbiAgICAgIHByaW50RmVhdHVyZXMoKTtcbiAgICAgIGZvciAoY29uc3Qgb3V0IG9mIG9wdGlvbnMub3V0RmlsZS5zcGxpdChcIixcIikpIHtcbiAgICAgICAgYXdhaXQgbWtkaXIoZGlybmFtZShvdXQpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGFjdGlvbiA9IG9wdGlvbnMuZGV0ZXJtaW5pc3RpYyA/IHNob290IDogcmVuZGVyO1xuICAgICAgY3RybC5zaWduYWwudGhyb3dJZkFib3J0ZWQoKTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHdpdGhSZXJlbmRlcihjdHJsLnNpZ25hbCwgKCkgPT5cbiAgICAgICAgYWN0aW9uKHtcbiAgICAgICAgICBzb3VyY2UsXG4gICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICBzaWduYWw6IGN0cmwuc2lnbmFsLFxuICAgICAgICAgIG9uUHJvZ3Jlc3M6IChwKSA9PiBpcGMud3JpdGVQcm9ncmVzcyhwKSxcbiAgICAgICAgICBvbkNvbnNvbGU6IChsLCBtKSA9PiBpcGMud3JpdGVDb25zb2xlKGwsIG0pLFxuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgICBhd2FpdCBpcGMud3JpdGVEb25lKHJlc3VsdCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc3QgZXJyb3IgPSBlIGFzIEVycm9yO1xuICAgICAgY29uc3QgbSA9IGVycm9yLnN0YWNrID8/IGVycm9yLm1lc3NhZ2UgPz8gU3RyaW5nKGUgPz8gXCJ1bmtub3duIGVycm9yXCIpO1xuICAgICAgYXdhaXQgaXBjLndyaXRlRXJyb3IobSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGV4aXRpbmcgPSB0cnVlO1xuICAgICAgYXBwLmV4aXQoKTtcbiAgICB9XG4gIH0sXG59KTtcbiJdfQ==
|
|
97
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL3RzdXBAOC41LjErYTI3MDY0MzQ3NGU3MzE4ZC9ub2RlX21vZHVsZXMvdHN1cC9hc3NldHMvY2pzX3NoaW1zLmpzIiwiLi4vc3JjL2Jhc2UvZW52LnRzIiwiLi4vc3JjL2Jhc2UvcGFyc2VyLnRzIiwiLi4vc3JjL2Jhc2UvY29uc3RhbnRzLnRzIiwiLi4vc3JjL2Jhc2UvbG9nZ2luZy50cyIsIi4uL3NyYy9iYXNlL2NyYXNoLnRzIiwiLi4vc3JjL2Jhc2Uvbm9lcnIudHMiLCIuLi9zcmMvYmFzZS9wcm9jZXNzLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3NjaGVtYS50cyIsIi4uL3NyYy9jb21tb24udHMiLCIuLi9zcmMvcmVuZGVyZXIvaXBjLnRzIiwiLi4vc3JjL2Jhc2UvdGltaW5nLnRzIiwiLi4vc3JjL2Jhc2UvY2RwLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3N0ZWdvLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3Byb3RvY29sLnRzIiwiLi4vc3JjL2Jhc2UvYmxhbmtfZnJhbWUudHMiLCIuLi9zcmMvYmFzZS9saW1pdGVyLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9taXNjLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9jb2RlYy50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvYXVkaW8udHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL2hldmNfYWxwaGEvYml0LnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9oZXZjX2FscGhhL25hbC50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvaGV2Y19hbHBoYS9hbHBoYV9kYXJ3aW4udHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL2hldmNfYWxwaGEvdnBzLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9oZXZjX2FscGhhL2FscGhhLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9oZXZjX2FscGhhL2R1YWxfbGF5ZXJfbXV4LnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9oZXZjX2FscGhhL3BhcnNlci50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvaGV2Y19hbHBoYS9udmVuYy50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvdmlkZW8udHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL3ZpZGVvdG9vbGJveC50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvZmFjdG9yeS50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvbXV4ZXIudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL3NpbmsudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL3BpcGVsaW5lLnRzIiwiLi4vc3JjL2Jhc2UvZnJhbWVfZHJvcC50cyIsIi4uL3NyYy9iYXNlL2ltYWdlLnRzIiwiLi4vc3JjL3JlbmRlcmVyL2F1ZGlvLnRzIiwiLi4vc3JjL2Jhc2UvcmV0cnkudHMiLCIuLi9zcmMvcmVuZGVyZXIvaHRtbF9jaGVjay50cyIsIi4uL3NyYy9iYXNlL3dhaXRhYmxlX2V2ZW50LnRzIiwiLi4vc3JjL3JlbmRlcmVyL25ldHdvcmsudHMiLCIuLi9zcmMvcmVuZGVyZXIvd2luZG93LnRzIiwiLi4vc3JjL3JlbmRlcmVyL3JlbmRlci50cyIsIi4uL3NyYy9yZW5kZXJlci9yZXJlbmRlci50cyIsIi4uL3NyYy9yZW5kZXJlci92aWRlby9hZHZhbmNlLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3RpY2sudHMiLCIuLi9zcmMvcmVuZGVyZXIvdmlkZW8vb3Blbi50cyIsIi4uL3NyYy9yZW5kZXJlci92aWRlby9kZWNvZGUudHMiLCIuLi9zcmMvcmVuZGVyZXIvdmlkZW8vZGVjb2RlX3Nlc3Npb24udHMiLCIuLi9zcmMvcmVuZGVyZXIvdmlkZW8vcHJvYmUudHMiLCIuLi9zcmMvcmVuZGVyZXIvdmlkZW8vc3R1Yi50cyIsIi4uL3NyYy9yZW5kZXJlci92aWRlby9mcmFtZV9zZXJ2ZXIudHMiLCIuLi9zcmMvcmVuZGVyZXIvdmlkZW8vcHJvdG9jb2wudHMiLCIuLi9zcmMvcmVuZGVyZXIvc2hvb3QudHMiLCIuLi9zcmMvYXBwLnRzIl0sIm5hbWVzIjpbImdldEltcG9ydE1ldGFVcmwiLCJpbXBvcnRNZXRhVXJsIiwicGVudiIsIm5hbWUiLCJwYXJzZXIiLCJkZWZhdWx0VmFsdWUiLCJwYXJzZU51bWJlciIsIngiLCJudW0iLCJyZXF1aXJlIiwiY3JlYXRlUmVxdWlyZSIsInB1cExvZ0xldmVsIiwicHVwUGtnUm9vdCIsImRpcm5hbWUiLCJqb2luIiwicHVwQXVkaW9QcmVsb2FkIiwicHVwSWZyYW1lUHJlbG9hZCIsIkRFQlVHIiwiSU5GTyIsIldBUk4iLCJFUlJPUiIsIkZBVEFMIiwic3RhY2tIb29rIiwidGFyZ2V0IiwiX2NvbnRleHQiLCJtZXNzYWdlcyIsInByb2Nlc3NlZCIsIm1zZyIsIl9mYXRhbF9kZWMiLCJfZXJyb3JfZGVjIiwiX3dhcm5fZGVjIiwiX2luZm9fZGVjIiwiX2RlYnVnX2RlYyIsIl9pbml0IiwiTG9nZ2VyIiwiX2xldmVsIiwiX19ydW5Jbml0aWFsaXplcnMiLCJfX3B1YmxpY0ZpZWxkIiwidmFsdWUiLCJkZWJ1ZyIsImluZm8iLCJ3YXJuIiwiZXJyb3IiLCJsdiIsIm1lc3NhZ2UiLCJwcm9jIiwicmVzb2x2ZSIsInJlamVjdCIsImZhdGFsIiwiZGlzcGF0Y2giLCJkYXRhIiwiZXJyIiwiY29kZSIsInNpZ25hbCIsInJlYXNvbiIsIl9fZGVjb3JhdG9yU3RhcnQiLCJfX2RlY29yYXRlRWxlbWVudCIsIl9fZGVjb3JhdG9yTWV0YWRhdGEiLCJsb2dnZXIiLCJMb2ciLCJsZXZlbCIsIkFWX0xPR19FUlJPUiIsIkFWX0xPR19XQVJOSU5HIiwiVEFHIiwic3RhcnRFbGVjdHJvbkNyYXNoUmVwb3J0ZXIiLCJkdW1wRGlyIiwiYXBwIiwibWtkaXJTeW5jIiwiY3Jhc2hSZXBvcnRlciIsIm5vZXJyIiwiZm4iLCJhcmdzIiwicmV0IiwiUFVQX0FSR1NfS0VZIiwicGFyZ3MiLCJhcmd2IiwicHJpdiIsImFyZyIsIkRFRkFVTFRfV0lEVEgiLCJERUZBVUxUX0hFSUdIVCIsIkRFRkFVTFRfRlBTIiwiREVGQVVMVF9EVVJBVElPTiIsIkRFRkFVTFRfV0lORE9XX1RJTUVPVVQiLCJERUZBVUxUX09VVF9GSUxFIiwicmVuZGVyU2NoZW1hIiwieiIsImRlZmF1bHRSZW5kZXJPcHRpb25zIiwibm9ybWFsaXplU291cmNlIiwicyIsImFicyIsInJlYWxwYXRoU3luYyIsIm1ha2VDTEkiLCJvcHRpb25zIiwic2hhcGUiLCJkIiwicHJvZ3JhbSIsInNvdXJjZSIsIm9wdHMiLCJlIiwiSXBjV3JpdGVyIiwicGF5bG9hZCIsInNsZWVwIiwibXMiLCJ3aXRoVGltZW91dCIsInAiLCJsYWJlbCIsInRpbWVyIiwiYWJvcnRhYmxlIiwib25BYm9ydCIsIkNEUF9USU1FT1VUX01TIiwic2VuZCIsImNkcCIsIm1ldGhvZCIsInBhcmFtcyIsImV2YWxJbiIsImV4cHJlc3Npb24iLCJhZHZhbmNlVmlydHVhbFRpbWUiLCJidWRnZXQiLCJ0aW1lb3V0IiwiaGFuZGxlciIsIl8iLCJwYXVzZVZpcnR1YWxUaW1lIiwicmVzaXplRHJhd2FibGUiLCJzaXplIiwiRlJBTUVfU1lOQ19NQVJLRVJfV0lEVEgiLCJTVEVHT19USUNLX0NIQU5ORUwiLCJidWlsZFN0ZWdvSFRNTCIsInRhcmdldFVSTCIsIndpZHRoIiwiaGVpZ2h0IiwiZGVjb2RlU3RlZ28iLCJiaXRtYXAiLCJtYXJrZXJSb3ciLCJ0aW1lc3RhbXAiLCJpIiwicGl4ZWxJZHgiLCJiaXQiLCJzdGFydFN0ZWdvIiwiZHJhd1N0ZWdvIiwid2MiLCJleHBlY3RlZCIsIndhaXRTdGVnb1RpY2siLCJzd2FwcGVkIiwiciIsIlBVUF9TQ0hFTUUiLCJGUkFNRV9TQ0hFTUUiLCJQUklWSUxFR0VEX1BSSVZJTEVHRVMiLCJwcm90b2NvbCIsInNldHVwUHVwUHJvdG9jb2wiLCJyZXEiLCJ1cmwiLCJzcmMiLCJodG1sIiwiY3JlYXRlU3RlZ29VUkwiLCJpc0JsYW5rRnJhbWUiLCJiZ3JhIiwic3RlcFgiLCJzdGVwWSIsInJNaW4iLCJyTWF4IiwiZ01pbiIsImdNYXgiLCJiTWluIiwiYk1heCIsInkiLCJiIiwiZyIsIkJsYW5rRnJhbWVTdGF0cyIsImZyYW1lIiwiQ29uY3VycmVuY3lMaW1pdGVyIiwibWF4Q29uY3VycmVuY3kiLCJ2Iiwia2VlcCIsImVudHJ5IiwiRkZfRU5DT0RFUl9MSUJWUFhfVlA5Iiwib3BlblZpZGVvQ3R4IiwiX3N0YWNrIiwiY3R4IiwiQ29kZWNDb250ZXh0Iiwic3RhY2siLCJfX3VzaW5nIiwiUmF0aW9uYWwiLCJBVl9DT0RFQ19GTEFHX0dMT0JBTF9IRUFERVIiLCJrIiwiRkZtcGVnRXJyb3IiLCJfZXJyb3IiLCJfaGFzRXJyb3IiLCJfX2NhbGxEaXNwb3NlIiwibWFrZUZyYW1lIiwicGl4Rm10IiwiRnJhbWUiLCJtYWtlUGFja2V0IiwicGt0IiwiUGFja2V0IiwiZHJhaW5QYWNrZXRzIiwic3RyZWFtIiwibXV4ZXIiLCJBVkVSUk9SX0VBR0FJTiIsIkFWRVJST1JfRU9GIiwiQ29kZWNTdGF0ZSIsIl9Db2RlY1N0YXRlIiwiY29kZWMiLCJDb2RlYyIsIkZGX0RFQ09ERVJfUE5HIiwib2siLCJwbmciLCJBVl9QSVhfRk1UX0JHUkEiLCJBVl9QSVhfRk1UX1lVVkE0MjBQIiwicG5nRGF0YSIsInN3cyIsIlNvZnR3YXJlU2NhbGVDb250ZXh0IiwiZm10IiwiU1dTX0JJTElORUFSIiwiU0FNUExFX0ZNVF9OQU1FIiwiQVZfU0FNUExFX0ZNVF9GTFQiLCJBVl9TQU1QTEVfRk1UX0ZMVFAiLCJBdWRpb0VuY29kZXIiLCJfQXVkaW9FbmNvZGVyIiwib3V0Rm10IiwiQVZfQ0hBTk5FTF9MQVlPVVRfU1RFUkVPIiwiaW5TYW1wbGVSYXRlIiwiZ3JhcGgiLCJGaWx0ZXJHcmFwaCIsImFidWZmZXIiLCJGaWx0ZXIiLCJidWZTcmMiLCJhYnVmZmVyc2luayIsImJ1ZlNpbmsiLCJmbXROYW1lIiwiZmlsdGVyRGVzYyIsIm91dHB1dHMiLCJGaWx0ZXJJbk91dCIsImlucHV0cyIsInBjbSIsIm5TYW1wbGVzIiwicGFja0JpdHMiLCJiaXRzIiwiYnVmIiwiYnl0ZSIsIkJpdFdyaXRlciIsInZhbCIsIm4iLCJsZW4iLCJwYWQiLCJzdGFydCIsIkJpdFJlYWRlciIsInplcm9zIiwiQU5ORVhfQl9TVEFSVF9DT0RFIiwiTkFMX0JMQV9XX0xQIiwiTkFMX1JTVl9JUkFQX1ZDTDIzIiwiTkFMX1ZQUyIsIk5BTF9TUFMiLCJOQUxfUFBTIiwiTkFMX1NFSV9QUkVGSVgiLCJwYXJzZU5hbFR5cGUiLCJoZWFkZXIwIiwiaGVhZGVyMSIsInR5cGUiLCJsYXllcklkIiwidGVtcG9yYWxJZCIsImVuY29kZU5hbEhlYWRlciIsImJ5dGUwIiwiYnl0ZTEiLCJzcGxpdE5hbFVuaXRzIiwiYml0c3RyZWFtIiwibmFscyIsInNjTGVuIiwibmFsU3RhcnQiLCJuYWxFbmQiLCJqIiwicmV3cml0ZU5hbExheWVySWQiLCJuYWwiLCJvdXQiLCJiMCIsImIxIiwicmVtb3ZlRW11bGF0aW9uUHJldmVudGlvbiIsImFkZEVtdWxhdGlvblByZXZlbnRpb24iLCJWUFNfUFRMX0JJVCIsIlNQU19QVExfQklUIiwiUFRMX1RJRVJfQklUIiwiUFRMX0NPTVBBVDJfQklUIiwiU0xJQ0VfVFlQRV9CIiwiU0xJQ0VfVFlQRV9QIiwic2V0Qml0IiwiYml0T2Zmc2V0IiwibWFzayIsImN1ciIsInBhdGNoUHRsIiwibmFsRGF0YSIsInB0bFN0YXJ0Qml0IiwicmJzcCIsInBhdGNoSGV2Y0FscGhhUHRsIiwiY2h1bmtzIiwicmV3cml0ZU9uZVVlIiwibmFsSW4iLCJuZXdWYWwiLCJiciIsImJ3IiwicmV3cml0ZVR3b1VlIiwibmV3VmFsMSIsIm5ld1ZhbDIiLCJyZXdyaXRlQWxwaGFTcHMiLCJzcHMiLCJTUFNfU0VRX0lEX0JJVCIsInJld3JpdGVBbHBoYVBwcyIsInBwcyIsInJlYWRTZSIsInVlIiwicGFyc2VJbmxpbmVTdFJlZlBpY1NldCIsIm51bURlbHRhUG9jc1NldDAiLCJkZWx0YUlkeE1pbnVzMSIsIm51bU5lZyIsIm51bVBvcyIsInBhcnNlSGVhZGVyVG9BbGlnbm1lbnQiLCJuYWxUeXBlIiwiY2ZnIiwiaXNJcmFwIiwic2xpY2VUeXBlIiwicmV3cml0ZUFscGhhU2xpY2VIZWFkZXIiLCJzbGljZSIsInByb2JlIiwiQiIsIm9sZEFsaWduQml0cyIsInNsaWNlRGF0YUJ5dGVPZmZzZXQiLCJleHRyYWN0UFRMIiwidnBzRGF0YSIsIm1heFN1YkxheWVyc01pbnVzMSIsInB0bFN0YXJ0Iiwid3JpdGVCYXNlVlBTIiwicHRsIiwid3JpdGVWUFNFeHRlbnNpb24iLCJidWlsZEFscGhhVlBTIiwiZXh0cmFjdEFscGhhVG9ZdXY0MjBwQnVmZmVyIiwiYmdyYUZyYW1lIiwic3JjTHMiLCJ3IiwiaCIsInlTaXplIiwic3JjMzIiLCJyb3dCYXNlIiwiZHN0QmFzZSIsInJld3JpdGVBbHBoYVBhcmFtU2V0IiwiYnVpbGRVbmlmaWVkRXh0cmFkYXRhIiwiYmFzZUV4dHJhZGF0YSIsImFscGhhRXh0cmFkYXRhIiwiYmFzZU5hbHMiLCJhbHBoYU5hbHMiLCJhbHBoYUJ5VHlwZSIsImFyciIsImVtaXR0ZWQiLCJhbHBoYU5hbCIsImFEYXRhIiwiYnVpbGRBbHBoYUNoYW5uZWxJbmZvU0VJIiwiaDAiLCJoMSIsIndyaXRlQml0cyIsImludGVybGVhdmVBY2Nlc3NVbml0cyIsIkR1YWxMYXllck11eCIsImJhc2VDdHgiLCJhbHBoYUN0eCIsImJhc2VQa3QiLCJhbHBoYVBrdCIsInRhZyIsImJhc2UiLCJhbHBoYSIsImhldmNDZmciLCJpbnRlcmxlYXZlZCIsImZhaWwiLCJmaWVsZCIsImdvdCIsInNraXBQdGwiLCJtYXhTdWJMYXllcnMiLCJzdWJQcm9maWxlUHJlc2VudCIsInN1YkxldmVsUHJlc2VudCIsInBhcnNlU3BzIiwic3BzUmJzcCIsImNocm9tYUZvcm1hdCIsImxvZzJNYXhQb2NMc2IiLCJvcmRlckNvdW50Iiwic2FvRW5hYmxlZCIsIm51bVN0UnBzIiwibG9uZ1Rlcm1SZWZQaWNzUHJlc2VudCIsInNwc1RlbXBvcmFsTXZwRW5hYmxlZCIsInBhcnNlUHBzIiwicHBzUmJzcCIsIm51bUV4dHJhU2xpY2VIZWFkZXJCaXRzIiwiY2FiYWNJbml0UHJlc2VudCIsInBwc0xvb3BGaWx0ZXJBY3Jvc3NTbGljZXNFbmFibGVkIiwiZGVibG9ja2luZ0NvbnRyb2xQcmVzZW50Iiwic2xpY2VEZWJsb2NraW5nRGlzYWJsZWRPdmVycmlkZSIsInBhcnNlTnZlbmNIZXZjQ29uZmlnIiwiZXh0cmFkYXRhIiwiTnZlbmNEdWFsTGF5ZXJFbmNvZGVyIiwiX052ZW5jRHVhbExheWVyRW5jb2RlciIsImZwcyIsImJpdHJhdGUiLCJGRl9FTkNPREVSX0hFVkNfTlZFTkMiLCJudmVuY09wdHMiLCJjb21tb24iLCJBVl9QSVhfRk1UX1lVVjQyMFAiLCJ1bmlmaWVkIiwiY2hyb21hU2l6ZSIsImFscGhhQnVmIiwiYWxwaGFTd0ZyYW1lIiwicHRzIiwiZGVzeW5jIiwiVmlkZW9FbmNvZGVyIiwiX1ZpZGVvRW5jb2RlciIsImNvZGVjTmFtZSIsImNvZGVjVGFnIiwiY29kZWNPcHRzIiwicmVzdCIsIlZpZGVvVG9vbGJveEVuY29kZXIiLCJfVmlkZW9Ub29sYm94RW5jb2RlciIsImh3IiwiQVZDT0xfUkFOR0VfSlBFRyIsImNyZWF0ZUh3VmlkZW9FbmNvZGVyIiwiZGlzYWJsZUh3Q29kZWMiLCJzaGFyZWRIdyIsIkhhcmR3YXJlQ29udGV4dCIsIm93bnNIdyIsIkZGX0hXREVWSUNFX1RZUEVfVklERU9UT09MQk9YIiwiRkZfSFdERVZJQ0VfVFlQRV9DVURBIiwidmlkZW8iLCJGRl9FTkNPREVSX0xJQlgyNjUiLCJGb3JtYXRNdXhlciIsIm91dFBhdGgiLCJmb3JtYXROYW1lIiwiRm9ybWF0Q29udGV4dCIsImNvZGVjQ3R4IiwiRGljdGlvbmFyeSIsIk91dHB1dFNpbmsiLCJfT3V0cHV0U2luayIsInBhdGgiLCJsb3dlciIsInNldHVwIiwiYXVkaW8iLCJfcHJvbWlzZSIsIkZGX0VOQ09ERVJfQUFDIiwiRkZfRU5DT0RFUl9MSUJPUFVTIiwic2FtcGxlUmF0ZSIsImh3VmlkZW8iLCJFbmNvZGVyUGlwZWxpbmUiLCJfRW5jb2RlclBpcGVsaW5lIiwib3V0RmlsZSIsIndpdGhBdWRpbyIsIm91dEZpbGVzIiwia2luZHMiLCJuZWVkc01wNEh3IiwiaXNId0FscGhhQ2FwYWJsZSIsInNpbmtzIiwic2luayIsImlucHV0IiwiRnJhbWVEcm9wU3RhdHMiLCJjb3VudCIsInRvdGFsRHJvcHBlZCIsImxvY2FsU3VtIiwibWF4QnVyc3QiLCJidXJzdCIsInBlcmNlcHRpYmxlIiwibCIsInNjb3JlIiwic2l6ZUVxdWFscyIsImEiLCJBVURJT19NRVRBX0NIQU5ORUwiLCJBVURJT19DSFVOS19DSEFOTkVMIiwiYXR0YWNoQXVkaW9MaXN0ZW5lcnMiLCJlbmNvZGVyIiwiZ2V0VmlkZW9UaW1lTXMiLCJvbkVycm9yIiwib25NZXRhIiwiX2UiLCJzdGFydE1zIiwic2lsZW5jZVNhbXBsZXMiLCJvbkNodW5rIiwiYnVmZmVyIiwidXNlUmV0cnkiLCJtYXhBdHRlbXB0cyIsInRpbWVvdXRFcnJvciIsImF0dGVtcHQiLCJwcm9taXNlcyIsInNldFRpbWVvdXQiLCJTVVBQT1JURURfUFJPVE9DT0xTIiwiU09VUkNFX1BBVFRFUk4iLCJjaGVja0hUTUwiLCJXYWl0YWJsZUV2ZW50IiwibWFwIiwiTE9DQUxfU0NIRU1FUyIsImlzTG9jYWxTY2hlbWUiLCJwcm94aWVkVXJsIiwicGFyc2VkIiwiVVJMIiwic2V0SW50ZXJjZXB0b3IiLCJ3aW5kb3ciLCJ1c2VJbm5lclByb3h5Iiwic3R1Yk1lZGlhIiwibGltaXRlciIsImV2ZW50cyIsIndhaXQiLCJrZXkiLCJvblRpbWVvdXQiLCJldmVudCIsImRldGFpbHMiLCJjYWxsYmFjayIsInByb3hpZWQiLCJyZXNwb25zZUhlYWRlcnMiLCJyZXNvdXJjZVR5cGUiLCJ1bnNldEludGVyY2VwdG9yIiwiVElNRU9VVF9FUlJPUiIsIkNPTlNPTEVfSUdOT1JFUyIsIndhaXRGb3JGaW5pc2giLCJ3aW4iLCJhY3Rpb24iLCJ0aW1lb3V0TXMiLCJ0b2xlcmFudCIsImRvbVJlYWR5IiwiZG9uZSIsImRlc2MiLCJleGl0Q29kZSIsImRpc3Bvc2VXaW5kb3ciLCJwaWNrUHJlbG9hZCIsInJlbmRlcmVyIiwib3BlbldpbmRvdyIsIm9uQ3JlYXRlZCIsIkJyb3dzZXJXaW5kb3ciLCJsaW5lTnVtYmVyIiwic291cmNlSWQiLCJtc2dzIiwib3BlbldpbmRvd1dpdGhSZXRyeSIsImxvYWRXaW5kb3ciLCJ3YXJtdXAiLCJvcGVuIiwicmVuZGVyIiwiZHVyYXRpb24iLCJvblByb2dyZXNzIiwidG90YWwiLCJmcmFtZUludGVydmFsIiwiZnJhbWVTaXplIiwid3JpdHRlbiIsImxhc3RXcml0dGVuVGltZSIsInByb2dyZXNzIiwiZW5jb2RlRXJyb3IiLCJyZXNvbHZlciIsInJlamVjdGVyIiwiaW50ZXJ2YWwiLCJkcm9wU3RhdHMiLCJibGFua1N0YXRzIiwiZGlzcG9zZUF1ZGlvIiwic2NoZWR1bGVGcmFtZSIsInBhaW50IiwiX3IiLCJpbWFnZSIsImltYWdlU2l6ZSIsImN1cnJlbnRUaW1lIiwiY3JvcHBlZCIsInRpbWVEZWx0YSIsImZyYW1lc1RvSW5zZXJ0IiwibmV3UHJvZ3Jlc3MiLCJkdXJhdGlvbk1zIiwibGFzdFdyaXR0ZW4iLCJzdHVjayIsImRyb3BTY29yZSIsImJsYW5rIiwiTUFYX1JFTkRFUl9BVFRFTVBUUyIsIndpdGhSZXJlbmRlciIsImxhc3RFcnIiLCJhZHZhbmNlVmlkZW9zIiwidGltZXN0YW1wTXMiLCJUSUNLX1NZTUJPTCIsInRpY2siLCJleHByIiwidGlja0V2IiwiUldfVElNRU9VVF9VUyIsIm9wZW5JbnB1dCIsIkRlbXV4ZXIiLCJkZWNvZGVGcmFtZXMiLCJtZXRhIiwib25EZW11eGVyIiwiQVZNRURJQV9UWVBFX1ZJREVPIiwiZGVjIiwiRGVjb2RlciIsImZyYW1lV2lkdGgiLCJmcmFtZUhlaWdodCIsInNjYWxlIiwiZmlsdGVyIiwiRmlsdGVyQVBJIiwiX2ZyYW1lIiwicGFja1JnYmEiLCJyb3ciLCJzdHJpZGUiLCJERUNPREVfQUhFQUQiLCJLRUVQX0JFSElORCIsIk1FTU9SWV9CVURHRVQiLCJNQVhfUEFTU19SRVRSWSIsIkRlY29kZVNlc3Npb24iLCJfc3JjIiwiaWR4IiwiaGl0IiwiZmFpbHMiLCJnZW4iLCJmYWlsZWQiLCJhdCIsImZsb29yIiwidGIiLCJsZWFkR2FwIiwib3V0ZXIiLCJfcGt0IiwiZW5jb2RlU3R1YldlYm0iLCJ0bXBkaXIiLCJyYW5kb21CeXRlcyIsInN0dWIiLCJTdHViRnJhbWUiLCJyZWFkRmlsZSIsInJtIiwibHVtYSIsImNocm9tYSIsIkZyYW1lU2VydmVyIiwiX3VzZUlubmVyUHJveHkiLCJpZCIsImV2ZW4iLCJyZWFsIiwic2Vzc2lvbnMiLCJjcmVhdGVIYXNoIiwiU0NIRU1FIiwiQ09SU19IRUFERVJTIiwidXNlRnJhbWVQcm90b2NvbCIsImZzIiwianNvbk9rIiwiaW50IiwicmdiYU9rIiwid2VibU9rIiwiYnl0ZXMiLCJjb3B5IiwiZmFsbGJhY2siLCJsYXN0VHMiLCJfZCIsInNsaXZlciIsInRzIiwic2hvb3QiLCJ0SW5pdCIsIndpblAiLCJwaXBlbGluZSIsIm1haW4iLCJpZnJhbWUiLCJmcmFtZU1zIiwicHJpbnRGZWF0dXJlcyIsImN0cmwiLCJleGl0aW5nIiwiTWVudSIsInJhdyIsImlwYyIsIm1rZGlyIiwicmVzdWx0IiwibSJdLCJtYXBwaW5ncyI6IjB5RUFLQSxJQUFNQSxFQUFBQSxDQUFtQixJQUN2QixPQUFPLFFBQUEsQ0FBYSxJQUNoQixJQUFJLEdBQUEsQ0FBSSxRQUFRLFVBQVUsQ0FBQSxDQUFFLEVBQUUsSUFBQSxDQUM3QixRQUFBLENBQVMsZUFBaUIsUUFBQSxDQUFTLGFBQUEsQ0FBYyxRQUFRLFdBQUEsRUFBWSxHQUFNLFFBQUEsQ0FDMUUsUUFBQSxDQUFTLGFBQUEsQ0FBYyxHQUFBLENBQ3ZCLElBQUksR0FBQSxDQUFJLFNBQUEsQ0FBVyxTQUFTLE9BQU8sQ0FBQSxDQUFFLEtBRWhDQyxDQUFBQSxDQUFnQ0QsRUFBQUEsR0NOdEMsU0FBU0UsR0FBUUMsQ0FBQUEsQ0FBY0MsQ0FBQUEsQ0FBc0JDLEVBQWlDLENBQzNGLEdBQUksQ0FDRixPQUFPRCxDQUFBQSxDQUFPLE9BQUEsQ0FBUSxHQUFBLENBQUlELENBQUksQ0FBQyxDQUNqQyxDQUFB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QUMsRUFFYixDQUVBQSxFQUFHLElBQUEsQ0FBSyxDQUFDLEVBQ1QsSUFBQSxJQUFTbkssQ0FBQUEsQ0FBSSxFQUFHQSxDQUFBQSxDQUFJLEVBQUEsQ0FBSUEsSUFDdEJtSyxDQUFBQSxDQUFHLElBQUEsQ0FBS25LLElBQU0sQ0FBQSxFQUFLQSxDQUFBQSxHQUFNLENBQUMsQ0FBQSxDQUU1Qm1LLENBQUFBLENBQUcsRUFBRSxDQUFBLENBQUcsQ0FBQyxFQUNUQSxDQUFBQSxDQUFHLENBQUEsQ0FBRSxFQUFHLENBQUMsQ0FBQSxDQUNUQSxFQUFHLElBQUEsQ0FBSyxDQUFDLEVBQ1RBLENBQUFBLENBQUcsQ0FBQSxDQUFFLEVBQUcsQ0FBQyxDQUFBLENBQ1RBLEVBQUcsQ0FBQSxDQUFFLENBQUEsQ0FBRyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxFQUFFLENBQUEsQ0FBRyxDQUFDLEVBQ1RBLENBQUFBLENBQUcsQ0FBQSxDQUFFLEVBQUcsQ0FBQyxDQUFBLENBRVRBLEVBQUcsSUFBQSxDQUFLLENBQUMsRUFDVEEsQ0FBQUEsQ0FBRyxFQUFBLENBQUcsQ0FBQyxDQUFBLENBQ1BBLENBQUFBLENBQUcsS0FBSyxDQUFDLENBQUEsQ0FDVEEsRUFBRyxJQUFBLENBQUssQ0FBQyxFQUNUQSxDQUFBQSxDQUFHLElBQUEsQ0FBSyxDQUFDLENBQUEsQ0FHVEEsQ0FBQUEsQ0FBRyxHQUFHLENBQUMsQ0FBQSxDQUNQQSxFQUFHLElBQUEsQ0FBSyxDQUFDLEVBQ1RBLENBQUFBLENBQUcsSUFBQSxDQUFLZ0MsRUFBSSxPQUFBLENBQVNBLENBQUFBLENBQUksU0FBVUEsQ0FBQUEsQ0FBSSxNQUFBLENBQVNBLEVBQUksUUFBUSxDQUFBLENBRTVEaEMsRUFBRyxFQUFBLENBQUcsQ0FBQyxFQUNQQSxDQUFBQSxDQUFHLENBQUEsQ0FBRSxFQUFHLENBQUMsQ0FBQSxDQUNUQSxFQUFHLENBQUEsQ0FBRSxDQUFBLENBQUcsQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsRUFBRSxDQUFBLENBQUcsQ0FBQyxFQUVUQSxDQUFB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QUFBQSxDQUFJLFVBQUEsQ0FBV0csQ0FBQyxFQUN4QixDQUFBLE9BQUUsQ0FDQU4sRUFBQUEsQ0FBVSxJQUFBLENBQ1Zya0IsYUFBSSxJQUFBLEdBQ04sQ0FDRixDQUNGLENBQUMsQ0FBQSIsImZpbGUiOiJhcHAuY2pzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gU2hpbSBnbG9iYWxzIGluIGNqcyBidW5kbGVcbi8vIFRoZXJlJ3MgYSB3ZWlyZCBidWcgdGhhdCBlc2J1aWxkIHdpbGwgYWx3YXlzIGluamVjdCBpbXBvcnRNZXRhVXJsXG4vLyBpZiB3ZSBleHBvcnQgaXQgYXMgYGNvbnN0IGltcG9ydE1ldGFVcmwgPSAuLi4gX19maWxlbmFtZSAuLi5gXG4vLyBCdXQgdXNpbmcgYSBmdW5jdGlvbiB3aWxsIG5vdCBjYXVzZSB0aGlzIGlzc3VlXG5cbmNvbnN0IGdldEltcG9ydE1ldGFVcmwgPSAoKSA9PiBcbiAgdHlwZW9mIGRvY3VtZW50ID09PSBcInVuZGVmaW5lZFwiIFxuICAgID8gbmV3IFVSTChgZmlsZToke19fZmlsZW5hbWV9YCkuaHJlZiBcbiAgICA6IChkb2N1bWVudC5jdXJyZW50U2NyaXB0ICYmIGRvY3VtZW50LmN1cnJlbnRTY3JpcHQudGFnTmFtZS50b1VwcGVyQ2FzZSgpID09PSAnU0NSSVBUJykgXG4gICAgICA/IGRvY3VtZW50LmN1cnJlbnRTY3JpcHQuc3JjIFxuICAgICAgOiBuZXcgVVJMKFwibWFpbi5qc1wiLCBkb2N1bWVudC5iYXNlVVJJKS5ocmVmO1xuXG5leHBvcnQgY29uc3QgaW1wb3J0TWV0YVVybCA9IC8qIEBfX1BVUkVfXyAqLyBnZXRJbXBvcnRNZXRhVXJsKClcbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMjUuXG5cbmV4cG9ydCB0eXBlIEVudlBhcnNlcjxUPiA9ICh2YWx1ZTogdW5rbm93bikgPT4gVDtcblxuZXhwb3J0IGZ1bmN0aW9uIHBlbnY8VD4obmFtZTogc3RyaW5nLCBwYXJzZXI6IEVudlBhcnNlcjxUPiwgZGVmYXVsdFZhbHVlOiBUKTogVDtcbmV4cG9ydCBmdW5jdGlvbiBwZW52PFQ+KG5hbWU6IHN0cmluZywgcGFyc2VyOiBFbnZQYXJzZXI8VD4sIGRlZmF1bHRWYWx1ZT86IFQpOiBUIHwgdW5kZWZpbmVkO1xuZXhwb3J0IGZ1bmN0aW9uIHBlbnY8VD4obmFtZTogc3RyaW5nLCBwYXJzZXI6IEVudlBhcnNlcjxUPiwgZGVmYXVsdFZhbHVlPzogVCk6IFQgfCB1bmRlZmluZWQge1xuICB0cnkge1xuICAgIHJldHVybiBwYXJzZXIocHJvY2Vzcy5lbnZbbmFtZV0pO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZGVmYXVsdFZhbHVlO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAxLzMwLlxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VOdW1iZXIoeDogdW5rbm93bik6IG51bWJlciB7XG4gIGlmICh0eXBlb2YgeCA9PT0gXCJudW1iZXJcIikge1xuICAgIHJldHVybiB4O1xuICB9XG4gIGNvbnN0IG51bSA9IE51bWJlcih4KTtcbiAgaWYgKE51bWJlci5pc05hTihudW0pKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBWYWx1ZSAke3h9IGlzIG5vdCBhIHZhbGlkIG51bWJlcmApO1xuICB9XG4gIHJldHVybiBudW07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVN0cmluZyh4OiB1bmtub3duKTogc3RyaW5nIHtcbiAgaWYgKHR5cGVvZiB4ID09PSBcInN0cmluZ1wiKSB7XG4gICAgcmV0dXJuIHg7XG4gIH1cbiAgcmV0dXJuIFN0cmluZyh4KTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDkuXG5cbmltcG9ydCB7IGNyZWF0ZVJlcXVpcmUgfSBmcm9tIFwibm9kZTptb2R1bGVcIjtcbmltcG9ydCB7IGRpcm5hbWUsIGpvaW4gfSBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyBwZW52IH0gZnJvbSBcIi4vZW52XCI7XG5pbXBvcnQgeyBwYXJzZU51bWJlciB9IGZyb20gXCIuL3BhcnNlclwiO1xuXG5jb25zdCByZXF1aXJlID0gY3JlYXRlUmVxdWlyZShpbXBvcnQubWV0YS51cmwpO1xuXG5leHBvcnQgY29uc3QgcHVwTG9nTGV2ZWwgPSBwZW52KFwiUFVQX0xPR19MRVZFTFwiLCBwYXJzZU51bWJlciwgMik7XG5cbmV4cG9ydCBjb25zdCBwdXBQa2dSb290ID0gZGlybmFtZShyZXF1aXJlLnJlc29sdmUoXCJwdXAtcmVjb3JkZXIvcGFja2FnZS5qc29uXCIpKTtcbmV4cG9ydCBjb25zdCBwdXBBcHAgPSBqb2luKHB1cFBrZ1Jvb3QsIFwiZGlzdFwiLCBcImFwcC5janNcIik7XG5leHBvcnQgY29uc3QgcHVwQXVkaW9QcmVsb2FkID0gam9pbihwdXBQa2dSb290LCBcImRpc3RcIiwgXCJydW50aW1lXCIsIFwiYXVkaW9fcHJlbG9hZC5janNcIik7XG5leHBvcnQgY29uc3QgcHVwSWZyYW1lUHJlbG9hZCA9IGpvaW4ocHVwUGtnUm9vdCwgXCJkaXN0XCIsIFwicnVudGltZVwiLCBcImlmcmFtZV9wcmVsb2FkLmNqc1wiKTtcbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDYuXG5cbmltcG9ydCB0eXBlIHsgQ2hpbGRQcm9jZXNzIH0gZnJvbSBcIm5vZGU6Y2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0IHsgTG9nIH0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB7IEFWX0xPR19FUlJPUiwgQVZfTE9HX1dBUk5JTkcgfSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcbmltcG9ydCB7IHB1cExvZ0xldmVsIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTG9nZ2VyTGlrZSB7XG4gIGRlYnVnPyh0aGlzOiB2b2lkLCAuLi5tZXNzYWdlczogdW5rbm93bltdKTogdm9pZDtcblxuICBpbmZvPyh0aGlzOiB2b2lkLCAuLi5tZXNzYWdlczogdW5rbm93bltdKTogdm9pZDtcblxuICB3YXJuPyh0aGlzOiB2b2lkLCAuLi5tZXNzYWdlczogdW5rbm93bltdKTogdm9pZDtcblxuICBlcnJvcj8odGhpczogdm9pZCwgLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQ7XG59XG5cbmNvbnN0IERFQlVHID0gXCI8cHVwQGRlYnVnPlwiO1xuY29uc3QgSU5GTyA9IFwiPHB1cEBpbmZvPlwiO1xuY29uc3QgV0FSTiA9IFwiPHB1cEB3YXJuPlwiO1xuY29uc3QgRVJST1IgPSBcIjxwdXBAZXJyb3I+XCI7XG5jb25zdCBGQVRBTCA9IFwiPHB1cEBmYXRhbD5cIjtcblxuZnVuY3Rpb24gc3RhY2tIb29rKHRhcmdldDogKC4uLm1lc3NhZ2VzOiB1bmtub3duW10pID0+IHVua25vd24sIF9jb250ZXh0OiBDbGFzc01ldGhvZERlY29yYXRvckNvbnRleHQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh0aGlzOiBMb2dnZXIsIC4uLm1lc3NhZ2VzOiB1bmtub3duW10pIHtcbiAgICBjb25zdCBwcm9jZXNzZWQgPSBtZXNzYWdlcy5tYXAoKG1zZykgPT4ge1xuICAgICAgcmV0dXJuIG1zZyBpbnN0YW5jZW9mIEVycm9yID8gKG1zZy5zdGFjayA/PyBTdHJpbmcobXNnKSkgOiBtc2c7XG4gICAgfSk7XG4gICAgcmV0dXJuIHRhcmdldC5jYWxsKHRoaXMsIC4uLnByb2Nlc3NlZCk7XG4gIH07XG59XG5cbmV4cG9ydCBjbGFzcyBMb2dnZXIgaW1wbGVtZW50cyBMb2dnZXJMaWtlIHtcbiAgcHJpdmF0ZSBfaW1wbD86IExvZ2dlckxpa2U7XG5cbiAgZ2V0IGxldmVsKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2xldmVsO1xuICB9XG5cbiAgc2V0IGxldmVsKHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLl9sZXZlbCA9IHZhbHVlO1xuICAgIHRoaXMuaW1wbCA9IHRoaXMuX2ltcGwgPz8gY29uc29sZTtcbiAgfVxuXG4gIGdldCBpbXBsKCk6IExvZ2dlckxpa2UgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9pbXBsO1xuICB9XG5cbiAgc2V0IGltcGwodmFsdWU6IExvZ2dlckxpa2UpIHtcbiAgICBjb25zdCBkZWJ1ZyA9IHZhbHVlLmRlYnVnID8/IGNvbnNvbGUuZGVidWc7XG4gICAgY29uc3QgaW5mbyA9IHZhbHVlLmluZm8gPz8gY29uc29sZS5pbmZvO1xuICAgIGNvbnN0IHdhcm4gPSB2YWx1ZS53YXJuID8/IGNvbnNvbGUud2FybjtcbiAgICBjb25zdCBlcnJvciA9IHZhbHVlLmVycm9yID8/IGNvbnNvbGUuZXJyb3I7XG4gICAgY29uc3QgbHYgPSB0aGlzLl9sZXZlbDtcbiAgICB0aGlzLl9pbXBsID0ge1xuICAgICAgZGVidWc6IGx2ID49IDMgPyBkZWJ1ZyA6IHVuZGVmaW5lZCxcbiAgICAgIGluZm86IGx2ID49IDIgPyBpbmZvIDogdW5kZWZpbmVkLFxuICAgICAgd2FybjogbHYgPj0gMSA/IHdhcm4gOiB1bmRlZmluZWQsXG4gICAgICBlcnJvcjogbHYgPj0gMCA/IGVycm9yIDogdW5kZWZpbmVkLFxuICAgIH07XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9sZXZlbDogbnVtYmVyID0gcHVwTG9nTGV2ZWwpIHtcbiAgICB0aGlzLmltcGwgPSBjb25zb2xlO1xuICB9XG5cbiAgQHN0YWNrSG9va1xuICBkZWJ1ZyguLi5tZXNzYWdlczogdW5rbm93bltdKTogdm9pZCB7XG4gICAgdGhpcy5pbXBsPy5kZWJ1Zz8uKERFQlVHLCAuLi5tZXNzYWdlcyk7XG4gIH1cblxuICBAc3RhY2tIb29rXG4gIGluZm8oLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQge1xuICAgIHRoaXMuaW1wbD8uaW5mbz8uKElORk8sIC4uLm1lc3NhZ2VzKTtcbiAgfVxuXG4gIEBzdGFja0hvb2tcbiAgd2FybiguLi5tZXNzYWdlczogdW5rbm93bltdKTogdm9pZCB7XG4gICAgdGhpcy5pbXBsPy53YXJuPy4oV0FSTiwgLi4ubWVzc2FnZXMpO1xuICB9XG5cbiAgQHN0YWNrSG9va1xuICBlcnJvciguLi5tZXNzYWdlczogdW5rbm93bltdKTogdm9pZCB7XG4gICAgdGhpcy5pbXBsPy5lcnJvcj8uKEVSUk9SLCAuLi5tZXNzYWdlcyk7XG4gIH1cblxuICBAc3RhY2tIb29rXG4gIGZhdGFsKC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkIHtcbiAgICB0aGlzLmltcGw/LmVycm9yPy4oRkFUQUwsIC4uLm1lc3NhZ2VzKTtcbiAgICBwcm9jZXNzLmV4aXQoMSk7XG4gIH1cblxuICBwcml2YXRlIGRpc3BhdGNoKG1lc3NhZ2U6IHN0cmluZykge1xuICAgIGNvbnN0IG1zZyA9IG1lc3NhZ2UudHJpbUVuZCgpO1xuICAgIGlmIChtc2cuc3RhcnRzV2l0aChERUJVRykpIHtcbiAgICAgIHRoaXMuZGVidWcobXNnLnNsaWNlKERFQlVHLmxlbmd0aCArIDEpKTtcbiAgICB9IGVsc2UgaWYgKG1zZy5zdGFydHNXaXRoKElORk8pKSB7XG4gICAgICB0aGlzLmluZm8obXNnLnNsaWNlKElORk8ubGVuZ3RoICsgMSkpO1xuICAgIH0gZWxzZSBpZiAobXNnLnN0YXJ0c1dpdGgoV0FSTikpIHtcbiAgICAgIHRoaXMud2Fybihtc2cuc2xpY2UoV0FSTi5sZW5ndGggKyAxKSk7XG4gICAgfSBlbHNlIGlmIChtc2cuc3RhcnRzV2l0aChFUlJPUikpIHtcbiAgICAgIHRoaXMuZXJyb3IobXNnLnNsaWNlKEVSUk9SLmxlbmd0aCArIDEpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pbmZvKG1zZyk7XG4gICAgfVxuICB9XG5cbiAgYXR0YWNoKHByb2M6IENoaWxkUHJvY2VzcywgbmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMuZGVidWcoYCR7bmFtZX0uYXR0YWNoYCk7XG4gICAgICBsZXQgZmF0YWw6IHN0cmluZyA9IFwiXCI7XG4gICAgICBjb25zdCBkaXNwYXRjaCA9IChkYXRhOiBCdWZmZXIpID0+IHtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IGRhdGEudG9TdHJpbmcoKTtcbiAgICAgICAgaWYgKG1lc3NhZ2Uuc3RhcnRzV2l0aChGQVRBTCkpIHtcbiAgICAgICAgICBmYXRhbCArPSBtZXNzYWdlLnNsaWNlKEZBVEFMLmxlbmd0aCArIDEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZGlzcGF0Y2gobWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBwcm9jLnN0ZGVycj8ub24oXCJkYXRhXCIsIGRpc3BhdGNoKTtcbiAgICAgIHByb2Muc3Rkb3V0Py5vbihcImRhdGFcIiwgZGlzcGF0Y2gpO1xuICAgICAgcHJvY1xuICAgICAgICAub24oXCJlcnJvclwiLCAoZXJyKSA9PiB7XG4gICAgICAgICAgZmF0YWwgKz0gZXJyLm1lc3NhZ2U7XG4gICAgICAgICAgcHJvYy5raWxsKCk7XG4gICAgICAgIH0pXG4gICAgICAgIC5vbmNlKFwiY2xvc2VcIiwgKGNvZGUsIHNpZ25hbCkgPT4ge1xuICAgICAgICAgIGlmIChjb2RlIHx8IHNpZ25hbCB8fCBmYXRhbCkge1xuICAgICAgICAgICAgZmF0YWwgfHw9IGBjb21tYW5kIGZhaWxlZDogJHtwcm9jLnNwYXduYXJncy5qb2luKFwiIFwiKX1gO1xuICAgICAgICAgICAgdGhpcy5kZWJ1ZyhgJHtuYW1lfS5jbG9zZWAsIHsgY29kZSwgc2lnbmFsLCBmYXRhbCB9KTtcbiAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoZmF0YWwpKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5kZWJ1ZyhgJHtuYW1lfS5jbG9zZWApO1xuICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgLm9uKFwidW5oYW5kbGVkUmVqZWN0aW9uXCIsIChyZWFzb24pID0+IHtcbiAgICAgICAgICB0aGlzLmVycm9yKGAke25hbWV9LnVuaGFuZGxlZGAsIHJlYXNvbik7XG4gICAgICAgIH0pXG4gICAgICAgIC5vbihcInVuY2F1Z2h0RXhjZXB0aW9uTW9uaXRvclwiLCAoZXJyKSA9PiB7XG4gICAgICAgICAgdGhpcy5lcnJvcihgJHtuYW1lfS51bmhhbmRsZWRgLCBlcnIpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfVxufVxuXG5jb25zdCBsb2dnZXIgPSBuZXcgTG9nZ2VyKCk7XG5cbi8vIFJvdXRlIGZmbXBlZyBuYXRpdmUgbG9ncyB0aHJvdWdoIHB1cCdzIGxvZ2dlci5cbkxvZy5zZXRDYWxsYmFjaygobGV2ZWwsIG1lc3NhZ2UpID0+IHtcbiAgY29uc3QgbXNnID0gbWVzc2FnZS50cmltRW5kKCk7XG4gIGlmICghbXNnKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChsZXZlbCA8PSBBVl9MT0dfRVJST1IpIHtcbiAgICBsb2dnZXIuZXJyb3IobXNnKTtcbiAgfSBlbHNlIGlmIChsZXZlbCA8PSBBVl9MT0dfV0FSTklORykge1xuICAgIGxvZ2dlci53YXJuKG1zZyk7XG4gIH1cbn0pO1xuXG5leHBvcnQgeyBsb2dnZXIgfTtcbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMjEuXG5cbmltcG9ydCB7IG1rZGlyU3luYyB9IGZyb20gXCJub2RlOmZzXCI7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHsgYXBwLCBjcmFzaFJlcG9ydGVyIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi9sb2dnaW5nXCI7XG5cbmNvbnN0IFRBRyA9IFwiW0NyYXNoXVwiO1xuXG5leHBvcnQgZnVuY3Rpb24gc3RhcnRFbGVjdHJvbkNyYXNoUmVwb3J0ZXIoKSB7XG4gIC8vIGFwcERhdGEgKG5vdCB0aGUgcGVyLXJ1biB1c2VyLWRhdGEtZGlyKSBzbyBldmVyeSBwdXAgYXBwJ3MgZHVtcHMgYWNjdW11bGF0ZSBpbiBvbmUgc2hhcmVkLCBwZXJzaXN0ZW50IGRpci5cbiAgY29uc3QgZHVtcERpciA9IGpvaW4oYXBwLmdldFBhdGgoXCJhcHBEYXRhXCIpLCBcInB1cC1yZWNvcmRlclwiLCBcImNyYXNoZXNcIik7XG4gIG1rZGlyU3luYyhkdW1wRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgYXBwLnNldFBhdGgoXCJjcmFzaER1bXBzXCIsIGR1bXBEaXIpO1xuICBjcmFzaFJlcG9ydGVyLnN0YXJ0KHtcbiAgICBwcm9kdWN0TmFtZTogXCJwdXAtcmVjb3JkZXJcIixcbiAgICB1cGxvYWRUb1NlcnZlcjogZmFsc2UsXG4gICAgY29tcHJlc3M6IGZhbHNlLFxuICAgIGlnbm9yZVN5c3RlbUNyYXNoSGFuZGxlcjogdHJ1ZSxcbiAgfSk7XG4gIGxvZ2dlci5kZWJ1ZyhUQUcsIFwic2V0IGR1bXAgdG9cIiwgZHVtcERpcik7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzI0LlxuXG5leHBvcnQgZnVuY3Rpb24gbm9lcnI8QSBleHRlbmRzIHVua25vd25bXSwgUiwgRD4oZm46ICguLi5hcmdzOiBBKSA9PiBSLCBkZWZhdWx0VmFsdWU6IEQpOiAoLi4uYXJnczogQSkgPT4gUiB8IEQge1xuICByZXR1cm4gKC4uLmFyZ3MpID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmV0ID0gZm4oLi4uYXJncyk7XG4gICAgICBpZiAocmV0IGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICByZXR1cm4gcmV0LmNhdGNoKCgpID0+IGRlZmF1bHRWYWx1ZSkgYXMgUiB8IEQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmV0O1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgICB9XG4gIH07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAxLzMwLlxuXG5pbXBvcnQgeyB0eXBlIENoaWxkUHJvY2VzcywgdHlwZSBTcGF3bk9wdGlvbnMsIHNwYXduIH0gZnJvbSBcIm5vZGU6Y2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0IHRyZWVLaWxsIGZyb20gXCJ0cmVlLWtpbGxcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuL2xvZ2dpbmdcIjtcblxuZXhwb3J0IGNvbnN0IFBVUF9BUkdTX0tFWSA9IFwiLS1wdXAtcHJpdi1hcmdzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJncygpIHtcbiAgY29uc3QgYXJndiA9IHByb2Nlc3MuYXJndjtcbiAgbGV0IHByaXYgPSBhcmd2LmZpbmQoKGFyZykgPT4gYXJnLnN0YXJ0c1dpdGgoUFVQX0FSR1NfS0VZKSk7XG4gIGlmICghcHJpdikge1xuICAgIGxvZ2dlci5kZWJ1ZyhcInByb2Nhcmd2XCIsIGFyZ3YpO1xuICAgIHJldHVybiBwcm9jZXNzLmFyZ3Y7XG4gIH1cbiAgY29uc3QgYXJncyA9IFtcImV4ZWNcIiwgLi4uYXJndi5zbGljZSgtMSldO1xuICBwcml2ID0gQnVmZmVyLmZyb20ocHJpdi5zcGxpdChcIj1cIilbMV0hLCBcImJhc2U2NFwiKS50b1N0cmluZygpO1xuICBhcmdzLnB1c2goLi4uSlNPTi5wYXJzZShwcml2KSk7XG4gIGxvZ2dlci5kZWJ1ZyhcInB1cGFyZ3NcIiwgYXJncyk7XG4gIHJldHVybiBhcmdzO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFByb2Nlc3NIYW5kbGUge1xuICBwcm9jZXNzOiBDaGlsZFByb2Nlc3M7XG4gIHdhaXQ6IFByb21pc2U8dm9pZD47XG4gIGdldCBraWxsZWQoKTogYm9vbGVhbjtcbiAga2lsbCgpOiB2b2lkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXhlYyhjbWQ6IHN0cmluZywgb3B0aW9ucz86IFNwYXduT3B0aW9ucyk6IFByb2Nlc3NIYW5kbGUge1xuICBjb25zdCBwYXJ0cyA9IGNtZC5zcGxpdChcIiBcIikuZmlsdGVyKChzKSA9PiBzLmxlbmd0aCk7XG4gIGNvbnN0IFtjb21tYW5kLCAuLi5hcmdzXSA9IHBhcnRzO1xuICBpZiAoIWNvbW1hbmQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJlbXB0eSBjb21tYW5kXCIpO1xuICB9XG4gIGNvbnN0IHByb2MgPSBzcGF3bihjb21tYW5kLCBhcmdzLCB7XG4gICAgc3RkaW86IFwiaW5oZXJpdFwiLFxuICAgIC4uLm9wdGlvbnMsXG4gIH0pO1xuICBsZXQga2lsbGVkID0gZmFsc2U7XG4gIHJldHVybiB7XG4gICAgcHJvY2VzczogcHJvYyxcbiAgICB3YWl0OiBsb2dnZXIuYXR0YWNoKHByb2MsIGNvbW1hbmQpLFxuICAgIGdldCBraWxsZWQoKSB7XG4gICAgICByZXR1cm4ga2lsbGVkO1xuICAgIH0sXG4gICAga2lsbCgpIHtcbiAgICAgIGlmIChraWxsZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAga2lsbGVkID0gdHJ1ZTtcbiAgICAgIGNvbnN0IHBpZCA9IHByb2MucGlkO1xuICAgICAgaWYgKHBpZCkge1xuICAgICAgICB0cmVlS2lsbChwaWQsIFwiU0lHS0lMTFwiKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHByb2Mua2lsbChcIlNJR0tJTExcIik7XG4gICAgICB9XG4gICAgfSxcbiAgfTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDYuXG5cbmltcG9ydCB6IGZyb20gXCJ6b2RcIjtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfV0lEVEggPSAxOTIwO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfSEVJR0hUID0gMTA4MDtcbmV4cG9ydCBjb25zdCBERUZBVUxUX0ZQUyA9IDMwO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfRFVSQVRJT04gPSA1O1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfV0lORE9XX1RJTUVPVVQgPSAxMDtcbmV4cG9ydCBjb25zdCBERUZBVUxUX09VVF9GSUxFID0gXCJvdXQvaHRtbC5tcDQsb3V0L2h0bWwud2VibVwiO1xuXG5leHBvcnQgY29uc3QgcmVuZGVyU2NoZW1hID0gei5vYmplY3Qoe1xuICBkdXJhdGlvbjogei5udW1iZXIoKS5kZXNjcmliZShcIkR1cmF0aW9uIGluIHNlY29uZHNcIiksXG4gIHdpZHRoOiB6Lm51bWJlcigpLmRlc2NyaWJlKFwiVmlkZW8gd2lkdGhcIiksXG4gIGhlaWdodDogei5udW1iZXIoKS5kZXNjcmliZShcIlZpZGVvIGhlaWdodFwiKSxcbiAgZnBzOiB6Lm51bWJlcigpLmRlc2NyaWJlKFwiRnJhbWVzIHBlciBzZWNvbmRcIiksXG4gIHdpdGhBdWRpbzogei5ib29sZWFuKCkuZGVzY3JpYmUoXCJDYXB0dXJlIGFuZCBlbmNvZGUgYXVkaW9cIiksXG4gIG91dEZpbGU6IHouc3RyaW5nKCkuZGVzY3JpYmUoXCJDb21tYS1zZXBhcmF0ZWQgb3V0cHV0IHBhdGhzOyBleHRlbnNpb24gKC5tcDQvLndlYm0pIHNlbGVjdHMgZW5jb2RlclwiKSxcbiAgdXNlSW5uZXJQcm94eTogei5ib29sZWFuKCkuZGVzY3JpYmUoXCJVc2UgYmlsaWJpbGkgaW5uZXIgcHJveHkgZm9yIHJlc291cmNlIGFjY2Vzc1wiKSxcbiAgZGV0ZXJtaW5pc3RpYzogei5ib29sZWFuKCkuZGVzY3JpYmUoXCJSZW5kZXIgYnkgZnJhbWUgcmF0aGVyIHRoYW4gcmVjb3JkaW5nXCIpLFxuICBkaXNhYmxlR3B1OiB6LmJvb2xlYW4oKS5kZXNjcmliZShcIkRpc2FibGUgR1BVIHJlbmRlcmluZywgbWF5IHJlZHVjZSBwZXJmb3JtYW5jZSBidXQgaW5jcmVhc2Ugc3RhYmlsaXR5XCIpLFxuICBkaXNhYmxlSHdDb2RlYzogei5ib29sZWFuKCkuZGVzY3JpYmUoXCJEaXNhYmxlIGhhcmR3YXJlIHZpZGVvIGVuY29kZXIgKE5WRU5DL1ZpZGVvVG9vbGJveCksIHVzZSBzb2Z0d2FyZSB4MjY1XCIpLFxuICB3aW5kb3dUb2xlcmFudDogei5ib29sZWFuKCkuZGVzY3JpYmUoXCJGYWxsIGJhY2sgdG8gZG9tLXJlYWR5IGlmIHdhcm11cCBsb2FkIHRpbWVzIG91dFwiKSxcbiAgd2luZG93VGltZW91dDogei5udW1iZXIoKS5kZXNjcmliZShcIldpbmRvdyBsb2FkIHRpbWVvdXQgaW4gc2Vjb25kc1wiKSxcbn0pO1xuXG5leHBvcnQgdHlwZSBSZW5kZXJPcHRpb25zID0gei5pbmZlcjx0eXBlb2YgcmVuZGVyU2NoZW1hPjtcblxuZXhwb3J0IHR5cGUgQ29uc29sZUNhbGxiYWNrID0gKGxldmVsOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZykgPT4gdm9pZDtcblxuZXhwb3J0IHR5cGUgUHJvZ3Jlc3NDYWxsYmFjayA9IChwcm9ncmVzczogbnVtYmVyKSA9PiB2b2lkO1xuXG5leHBvcnQgaW50ZXJmYWNlIElQQ1JlbmRlck9wdGlvbnMgZXh0ZW5kcyBSZW5kZXJPcHRpb25zIHtcbiAgc291cmNlOiBzdHJpbmc7XG4gIHNpZ25hbDogQWJvcnRTaWduYWw7XG4gIG9uUHJvZ3Jlc3M6IFByb2dyZXNzQ2FsbGJhY2s7XG4gIG9uQ29uc29sZTogQ29uc29sZUNhbGxiYWNrO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlbmRlclJlc3VsdCB7XG4gIG9wdGlvbnM6IFJlbmRlck9wdGlvbnM7XG4gIHdyaXR0ZW46IG51bWJlcjtcbiAgamFuazogbnVtYmVyO1xuICBvdXRGaWxlOiBzdHJpbmc7XG4gIGJsYW5rOiBudW1iZXI7XG59XG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0UmVuZGVyT3B0aW9uczogUmVuZGVyT3B0aW9ucyA9IHtcbiAgd2lkdGg6IERFRkFVTFRfV0lEVEgsXG4gIGhlaWdodDogREVGQVVMVF9IRUlHSFQsXG4gIGZwczogREVGQVVMVF9GUFMsXG4gIGR1cmF0aW9uOiBERUZBVUxUX0RVUkFUSU9OLFxuICBvdXRGaWxlOiBERUZBVUxUX09VVF9GSUxFLFxuICB3aXRoQXVkaW86IGZhbHNlLFxuICB1c2VJbm5lclByb3h5OiBmYWxzZSxcbiAgZGV0ZXJtaW5pc3RpYzogZmFsc2UsXG4gIGRpc2FibGVHcHU6IGZhbHNlLFxuICBkaXNhYmxlSHdDb2RlYzogZmFsc2UsXG4gIHdpbmRvd1RvbGVyYW50OiBmYWxzZSxcbiAgd2luZG93VGltZW91dDogREVGQVVMVF9XSU5ET1dfVElNRU9VVCxcbn07XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA5LlxuXG5pbXBvcnQgeyByZWFscGF0aFN5bmMgfSBmcm9tIFwibm9kZTpmc1wiO1xuaW1wb3J0IHsgcmVzb2x2ZSB9IGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IHByb2dyYW0gfSBmcm9tIFwiY29tbWFuZGVyXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi9iYXNlL2xvZ2dpbmdcIjtcbmltcG9ydCB7IG5vZXJyIH0gZnJvbSBcIi4vYmFzZS9ub2VyclwiO1xuaW1wb3J0IHsgcGFyc2VOdW1iZXIgfSBmcm9tIFwiLi9iYXNlL3BhcnNlclwiO1xuaW1wb3J0IHsgcGFyZ3MgfSBmcm9tIFwiLi9iYXNlL3Byb2Nlc3NcIjtcbmltcG9ydCB7IGRlZmF1bHRSZW5kZXJPcHRpb25zLCB0eXBlIFJlbmRlck9wdGlvbnMsIHJlbmRlclNjaGVtYSB9IGZyb20gXCIuL3JlbmRlcmVyL3NjaGVtYVwiO1xuXG4vLyBTY2hlbWVkIFVSSXMgcGFzcyB0aHJvdWdoOyBiYXJlIHBhdGhzIGdldCBjYW5vbmljYWxpemVkIGFuZCB3cmFwcGVkIGFzIGZpbGU6Ly8uXG5mdW5jdGlvbiBub3JtYWxpemVTb3VyY2Uoczogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKHMuaW5jbHVkZXMoXCI6Ly9cIikgfHwgcy5zdGFydHNXaXRoKFwiZGF0YTpcIikpIHtcbiAgICByZXR1cm4gcztcbiAgfVxuICBsZXQgYWJzOiBzdHJpbmc7XG4gIHRyeSB7XG4gICAgYWJzID0gcmVhbHBhdGhTeW5jKHMpO1xuICB9IGNhdGNoIHtcbiAgICBhYnMgPSByZXNvbHZlKHMpO1xuICB9XG4gIHJldHVybiBgZmlsZTovLyR7YWJzfWA7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ0xJT3B0aW9ucyB7XG4gIG5hbWU6IHN0cmluZztcbiAgcnVuOiAoc291cmNlOiBzdHJpbmcsIG9wdGlvbnM6IFJlbmRlck9wdGlvbnMpID0+IFByb21pc2U8dW5rbm93bj47XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBtYWtlQ0xJKG9wdGlvbnM6IENMSU9wdGlvbnMpIHtcbiAgY29uc3Qgc2hhcGUgPSByZW5kZXJTY2hlbWEuc2hhcGU7XG4gIGNvbnN0IGQgPSBkZWZhdWx0UmVuZGVyT3B0aW9ucztcbiAgcHJvZ3JhbVxuICAgIC5uYW1lKG9wdGlvbnMubmFtZSlcbiAgICAuYXJndW1lbnQoXCI8c291cmNlPlwiLCBcImZpbGU6Ly8sIGh0dHAocyk6Ly8sIGRhdGE6IFVSSSwgb3IgZmlsZXN5c3RlbSBwYXRoXCIpXG4gICAgLm9wdGlvbihcIi1XLCAtLXdpZHRoIDxudW1iZXI+XCIsIHNoYXBlLndpZHRoLmRlc2NyaXB0aW9uLCBgJHtkLndpZHRofWApXG4gICAgLm9wdGlvbihcIi1ILCAtLWhlaWdodCA8bnVtYmVyPlwiLCBzaGFwZS5oZWlnaHQuZGVzY3JpcHRpb24sIGAke2QuaGVpZ2h0fWApXG4gICAgLm9wdGlvbihcIi1mLCAtLWZwcyA8bnVtYmVyPlwiLCBzaGFwZS5mcHMuZGVzY3JpcHRpb24sIGAke2QuZnBzfWApXG4gICAgLm9wdGlvbihcIi10LCAtLWR1cmF0aW9uIDxudW1iZXI+XCIsIHNoYXBlLmR1cmF0aW9uLmRlc2NyaXB0aW9uLCBgJHtkLmR1cmF0aW9ufWApXG4gICAgLm9wdGlvbihcIi1vLCAtLW91dC1maWxlIDxwYXRoPlwiLCBzaGFwZS5vdXRGaWxlLmRlc2NyaXB0aW9uLCBkLm91dEZpbGUpXG4gICAgLm9wdGlvbihcIi1hLCAtLXdpdGgtYXVkaW9cIiwgc2hhcGUud2l0aEF1ZGlvLmRlc2NyaXB0aW9uLCBkLndpdGhBdWRpbylcbiAgICAub3B0aW9uKFwiLWQsIC0tZGV0ZXJtaW5pc3RpY1wiLCBzaGFwZS5kZXRlcm1pbmlzdGljLmRlc2NyaXB0aW9uLCBkLmRldGVybWluaXN0aWMpXG4gICAgLm9wdGlvbihcIi0tdXNlLWlubmVyLXByb3h5XCIsIHNoYXBlLnVzZUlubmVyUHJveHkuZGVzY3JpcHRpb24sIGQudXNlSW5uZXJQcm94eSlcbiAgICAub3B0aW9uKFwiLS1kaXNhYmxlLWdwdVwiLCBzaGFwZS5kaXNhYmxlR3B1LmRlc2NyaXB0aW9uLCBkLmRpc2FibGVHcHUpXG4gICAgLm9wdGlvbihcIi0tZGlzYWJsZS1ody1jb2RlY1wiLCBzaGFwZS5kaXNhYmxlSHdDb2RlYy5kZXNjcmlwdGlvbiwgZC5kaXNhYmxlSHdDb2RlYylcbiAgICAub3B0aW9uKFwiLS13aW5kb3ctdG9sZXJhbnRcIiwgc2hhcGUud2luZG93VG9sZXJhbnQuZGVzY3JpcHRpb24sIGQud2luZG93VG9sZXJhbnQpXG4gICAgLm9wdGlvbihcIi0td2luZG93LXRpbWVvdXQgPG51bWJlcj5cIiwgc2hhcGUud2luZG93VGltZW91dC5kZXNjcmlwdGlvbiwgYCR7ZC53aW5kb3dUaW1lb3V0fWApXG4gICAgLmFjdGlvbihhc3luYyAoc291cmNlOiBzdHJpbmcsIG9wdHMpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IG9wdGlvbnMucnVuKG5vcm1hbGl6ZVNvdXJjZShzb3VyY2UpLCB7XG4gICAgICAgICAgd2lkdGg6IG5vZXJyKHBhcnNlTnVtYmVyLCBkLndpZHRoKShvcHRzLndpZHRoKSxcbiAgICAgICAgICBoZWlnaHQ6IG5vZXJyKHBhcnNlTnVtYmVyLCBkLmhlaWdodCkob3B0cy5oZWlnaHQpLFxuICAgICAgICAgIGZwczogbm9lcnIocGFyc2VOdW1iZXIsIGQuZnBzKShvcHRzLmZwcyksXG4gICAgICAgICAgZHVyYXRpb246IG5vZXJyKHBhcnNlTnVtYmVyLCBkLmR1cmF0aW9uKShvcHRzLmR1cmF0aW9uKSxcbiAgICAgICAgICBvdXRGaWxlOiBvcHRzLm91dEZpbGUgPz8gZC5vdXRGaWxlLFxuICAgICAgICAgIHdpdGhBdWRpbzogb3B0cy53aXRoQXVkaW8gPz8gZC53aXRoQXVkaW8sXG4gICAgICAgICAgdXNlSW5uZXJQcm94eTogb3B0cy51c2VJbm5lclByb3h5ID8/IGQudXNlSW5uZXJQcm94eSxcbiAgICAgICAgICBkZXRlcm1pbmlzdGljOiBvcHRzLmRldGVybWluaXN0aWMgPz8gZC5kZXRlcm1pbmlzdGljLFxuICAgICAgICAgIGRpc2FibGVHcHU6IG9wdHMuZGlzYWJsZUdwdSA/PyBkLmRpc2FibGVHcHUsXG4gICAgICAgICAgZGlzYWJsZUh3Q29kZWM6IG9wdHMuZGlzYWJsZUh3Q29kZWMgPz8gZC5kaXNhYmxlSHdDb2RlYyxcbiAgICAgICAgICB3aW5kb3dUb2xlcmFudDogb3B0cy53aW5kb3dUb2xlcmFudCA/PyBkLndpbmRvd1RvbGVyYW50LFxuICAgICAgICAgIHdpbmRvd1RpbWVvdXQ6IG5vZXJyKHBhcnNlTnVtYmVyLCBkLndpbmRvd1RpbWVvdXQpKG9wdHMud2luZG93VGltZW91dCksXG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBsb2dnZXIuZmF0YWwoZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIGF3YWl0IHByb2dyYW0ucGFyc2VBc3luYyhwYXJncygpKTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMDEuXG5cbmltcG9ydCB0eXBlIHsgQ2hpbGRQcm9jZXNzIH0gZnJvbSBcIm5vZGU6Y2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSBcIm5vZGU6ZXZlbnRzXCI7XG5cbmV4cG9ydCBlbnVtIElwY01zZ1R5cGUge1xuICAvLyBjaGlsZCDihpIgcGFyZW50XG4gIENvbnNvbGUgPSBcImNvbnNvbGVcIixcbiAgUHJvZ3Jlc3MgPSBcInByb2dyZXNzXCIsXG4gIERvbmUgPSBcImRvbmVcIixcbiAgRXJyb3IgPSBcImVycm9yXCIsXG4gIC8vIHBhcmVudCDihpIgY2hpbGRcbiAgQ2FuY2VsID0gXCJjYW5jZWxcIixcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb25zb2xlTXNnIHtcbiAgdHlwZTogSXBjTXNnVHlwZS5Db25zb2xlO1xuICBsZXZlbDogc3RyaW5nO1xuICBtZXNzYWdlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2FuY2VsTXNnIHtcbiAgdHlwZTogSXBjTXNnVHlwZS5DYW5jZWw7XG4gIHJlYXNvbj86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJcGNEb25lUGF5bG9hZCB7XG4gIHdyaXR0ZW46IG51bWJlcjtcbiAgamFuazogbnVtYmVyO1xuICBvdXRGaWxlOiBzdHJpbmc7XG4gIGJsYW5rOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJvZ3Jlc3NNc2cge1xuICB0eXBlOiBJcGNNc2dUeXBlLlByb2dyZXNzO1xuICB2YWx1ZTogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERvbmVNc2cge1xuICB0eXBlOiBJcGNNc2dUeXBlLkRvbmU7XG4gIHBheWxvYWQ6IElwY0RvbmVQYXlsb2FkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEVycm9yTXNnIHtcbiAgdHlwZTogSXBjTXNnVHlwZS5FcnJvcjtcbiAgZXJyb3I6IHN0cmluZztcbn1cblxuZXhwb3J0IHR5cGUgSXBjTXNnID0gQ29uc29sZU1zZyB8IFByb2dyZXNzTXNnIHwgRG9uZU1zZyB8IEVycm9yTXNnIHwgQ2FuY2VsTXNnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElwY0V2ZW50cyB7XG4gIHByb2dyZXNzOiBbdmFsdWU6IG51bWJlcl07XG4gIGNvbnNvbGU6IFtsZXZlbDogc3RyaW5nLCBtc2c6IHN0cmluZ107XG4gIGRvbmU6IFtwYXlsb2FkOiBJcGNEb25lUGF5bG9hZF07XG4gIGVycm9yOiBbZXJyb3I6IEVycm9yXTtcbiAgY2xvc2U6IFtjb2RlOiBudW1iZXIgfCBudWxsXTtcbn1cblxuZXhwb3J0IGNsYXNzIElwY1dyaXRlciB7XG4gIHdyaXRlQ29uc29sZShsZXZlbDogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNlbmQoeyB0eXBlOiBJcGNNc2dUeXBlLkNvbnNvbGUsIGxldmVsLCBtZXNzYWdlIH0pO1xuICB9XG5cbiAgd3JpdGVQcm9ncmVzcyh2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5zZW5kKHsgdHlwZTogSXBjTXNnVHlwZS5Qcm9ncmVzcywgdmFsdWUgfSk7XG4gIH1cblxuICB3cml0ZUVycm9yKGVycm9yOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5zZW5kKHsgdHlwZTogSXBjTXNnVHlwZS5FcnJvciwgZXJyb3IgfSk7XG4gIH1cblxuICB3cml0ZURvbmUocGF5bG9hZDogSXBjRG9uZVBheWxvYWQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5zZW5kKHsgdHlwZTogSXBjTXNnVHlwZS5Eb25lLCBwYXlsb2FkIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzZW5kKG1zZzogSXBjTXNnKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICBpZiAoIXByb2Nlc3Muc2VuZCkge1xuICAgICAgICByZXR1cm4gcmVzb2x2ZSgpO1xuICAgICAgfVxuICAgICAgcHJvY2Vzcy5zZW5kKG1zZywgKCkgPT4gcmVzb2x2ZSgpKTtcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgSXBjUmVhZGVyIGV4dGVuZHMgRXZlbnRFbWl0dGVyPElwY0V2ZW50cz4ge1xuICBjb25zdHJ1Y3RvcihjaGlsZDogQ2hpbGRQcm9jZXNzKSB7XG4gICAgc3VwZXIoKTtcbiAgICBjaGlsZC5vbihcIm1lc3NhZ2VcIiwgKHJhdykgPT4ge1xuICAgICAgY29uc3QgbXNnID0gcmF3IGFzIElwY01zZztcbiAgICAgIHN3aXRjaCAobXNnLnR5cGUpIHtcbiAgICAgICAgY2FzZSBJcGNNc2dUeXBlLkNvbnNvbGU6IHtcbiAgICAgICAgICB0aGlzLmVtaXQoXCJjb25zb2xlXCIsIG1zZy5sZXZlbCwgbXNnLm1lc3NhZ2UpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgSXBjTXNnVHlwZS5Qcm9ncmVzczoge1xuICAgICAgICAgIHRoaXMuZW1pdChcInByb2dyZXNzXCIsIG1zZy52YWx1ZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBJcGNNc2dUeXBlLkRvbmU6IHtcbiAgICAgICAgICB0aGlzLmVtaXQoXCJkb25lXCIsIG1zZy5wYXlsb2FkKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIElwY01zZ1R5cGUuRXJyb3I6IHtcbiAgICAgICAgICB0aGlzLmVtaXQoXCJlcnJvclwiLCBuZXcgRXJyb3IobXNnLmVycm9yKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBjaGlsZC5vbmNlKFwiZXhpdFwiLCAoYykgPT4gdGhpcy5lbWl0KFwiY2xvc2VcIiwgYykpO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA5LlxuXG5leHBvcnQgZnVuY3Rpb24gc2xlZXAobXM6IG51bWJlcikge1xuICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgbXMpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdpdGhUaW1lb3V0PFQ+KHA6IFByb21pc2U8VD4sIG1zOiBudW1iZXIsIGxhYmVsOiBzdHJpbmcpOiBQcm9taXNlPFQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4gcmVqZWN0KG5ldyBFcnJvcihgJHtsYWJlbH0gdGltZWQgb3V0IGFmdGVyICR7bXN9bXNgKSksIG1zKTtcbiAgICBwLnRoZW4ocmVzb2x2ZSwgcmVqZWN0KS5maW5hbGx5KCgpID0+IGNsZWFyVGltZW91dCh0aW1lcikpO1xuICB9KTtcbn1cblxuLy8gUmVqZWN0IGFzIHNvb24gYXMgYHNpZ25hbGAgYWJvcnRzLCBlbHNlIHNldHRsZSB3aXRoIGBwYDsgbm8tb3AgcGFzc3Rocm91Z2ggd2hlbiBubyBzaWduYWwuXG5leHBvcnQgZnVuY3Rpb24gYWJvcnRhYmxlPFQ+KHA6IFByb21pc2U8VD4sIHNpZ25hbD86IEFib3J0U2lnbmFsKTogUHJvbWlzZTxUPiB7XG4gIGlmICghc2lnbmFsKSB7XG4gICAgcmV0dXJuIHA7XG4gIH1cbiAgcmV0dXJuIG5ldyBQcm9taXNlPFQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCBvbkFib3J0ID0gKCkgPT4gcmVqZWN0KHNpZ25hbC5yZWFzb24pO1xuICAgIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgb25BYm9ydCwgeyBvbmNlOiB0cnVlIH0pO1xuICAgIHAudGhlbihyZXNvbHZlLCByZWplY3QpLmZpbmFsbHkoKCkgPT4gc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCBvbkFib3J0KSk7XG4gIH0pO1xufVxuXG4vLyBDYWxsYmFjayBtYXkgcmV0dXJuIHRoZSBuZXh0IGludGVydmFsIChtcykgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgZm9yIHRoZSBmb2xsb3dpbmcgdGljay5cbmV4cG9ydCBmdW5jdGlvbiBwZXJpb2RpY2FsKGNhbGxiYWNrOiAoY291bnQ6IG51bWJlcikgPT4gUHJvbWlzZTxudW1iZXIgfCB1bmRlZmluZWQ+IHwgdW5kZWZpbmVkLCBtczogbnVtYmVyKSB7XG4gIGxldCB0b2tlbjogTm9kZUpTLlRpbWVvdXQ7XG4gIGxldCBjbG9zZWQgPSBmYWxzZTtcbiAgYXN5bmMgZnVuY3Rpb24gdGljayhjb3VudDogbnVtYmVyKSB7XG4gICAgY29uc3QgbmV4dCA9IGF3YWl0IGNhbGxiYWNrKGNvdW50KTtcbiAgICBpZiAoY2xvc2VkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRva2VuID0gc2V0VGltZW91dCgoKSA9PiB0aWNrKGNvdW50ICsgMSksIG5leHQgPz8gbXMpO1xuICB9XG4gIHRva2VuID0gc2V0VGltZW91dCgoKSA9PiB0aWNrKDApLCBtcyk7XG4gIHJldHVybiAoKSA9PiB7XG4gICAgY2xvc2VkID0gdHJ1ZTtcbiAgICBjbGVhclRpbWVvdXQodG9rZW4pO1xuICB9O1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMy8xMy5cblxuaW1wb3J0IHR5cGUgeyBEZWJ1Z2dlciwgU2l6ZSB9IGZyb20gXCJlbGVjdHJvblwiO1xuaW1wb3J0IHsgd2l0aFRpbWVvdXQgfSBmcm9tIFwiLi90aW1pbmdcIjtcblxuY29uc3QgQ0RQX1RJTUVPVVRfTVMgPSA1XzAwMDtcblxuZXhwb3J0IGZ1bmN0aW9uIHNlbmQoY2RwOiBEZWJ1Z2dlciwgbWV0aG9kOiBzdHJpbmcsIHBhcmFtcz86IG9iamVjdCk6IFByb21pc2U8dW5rbm93bj4ge1xuICByZXR1cm4gd2l0aFRpbWVvdXQoY2RwLnNlbmRDb21tYW5kKG1ldGhvZCwgcGFyYW1zKSwgQ0RQX1RJTUVPVVRfTVMsIGBjZHAuJHttZXRob2R9YCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBldmFsSW4oY2RwOiBEZWJ1Z2dlciwgZXhwcmVzc2lvbjogc3RyaW5nKTogUHJvbWlzZTx1bmtub3duPiB7XG4gIHJldHVybiB3aXRoVGltZW91dChzZW5kKGNkcCwgXCJSdW50aW1lLmV2YWx1YXRlXCIsIHsgZXhwcmVzc2lvbiB9KSwgQ0RQX1RJTUVPVVRfTVMsIFwiZXZhbEluXCIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYWR2YW5jZVZpcnR1YWxUaW1lKGNkcDogRGVidWdnZXIsIGJ1ZGdldDogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY2RwLm9mZihcIm1lc3NhZ2VcIiwgaGFuZGxlcik7XG4gICAgICByZWplY3QobmV3IEVycm9yKGBhZHZhbmNlVmlydHVhbFRpbWUgdGltZWQgb3V0IGFmdGVyICR7Q0RQX1RJTUVPVVRfTVN9bXNgKSk7XG4gICAgfSwgQ0RQX1RJTUVPVVRfTVMpO1xuXG4gICAgY29uc3QgaGFuZGxlciA9IChfOiBFbGVjdHJvbi5FdmVudCwgbWV0aG9kOiBzdHJpbmcpID0+IHtcbiAgICAgIGlmIChtZXRob2QgPT09IFwiRW11bGF0aW9uLnZpcnR1YWxUaW1lQnVkZ2V0RXhwaXJlZFwiKSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgY2RwLm9mZihcIm1lc3NhZ2VcIiwgaGFuZGxlcik7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNkcC5vbihcIm1lc3NhZ2VcIiwgaGFuZGxlcik7XG4gICAgLy8gTm8gc3RhcnZhdGlvbiBjYXAgKHdvdWxkIHNraXAgcGVuZGluZyB3b3JrIG5vbi1kZXRlcm1pbmlzdGljYWxseSk7IGNhcHR1cmUgc3RhcnRzIHBvc3QgZGlkLXN0b3AtbG9hZGluZywgYW5kIENEUF9USU1FT1VUX01TIHR1cm5zIGEgcmVhbCBzdGFsbCBpbnRvIGEgZmFpbGVkIHJlbmRlci5cbiAgICBzZW5kKGNkcCwgXCJFbXVsYXRpb24uc2V0VmlydHVhbFRpbWVQb2xpY3lcIiwge1xuICAgICAgcG9saWN5OiBcImFkdmFuY2VcIixcbiAgICAgIGJ1ZGdldCxcbiAgICB9KS5jYXRjaCgoZSkgPT4ge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgY2RwLm9mZihcIm1lc3NhZ2VcIiwgaGFuZGxlcik7XG4gICAgICByZWplY3QoZSk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcGF1c2VWaXJ0dWFsVGltZShjZHA6IERlYnVnZ2VyKTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IHNlbmQoY2RwLCBcIkVtdWxhdGlvbi5zZXRWaXJ0dWFsVGltZVBvbGljeVwiLCB7IHBvbGljeTogXCJwYXVzZVwiIH0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzaXplRHJhd2FibGUoY2RwOiBEZWJ1Z2dlciwgc2l6ZTogU2l6ZSkge1xuICBhd2FpdCBzZW5kKGNkcCwgXCJFbXVsYXRpb24uc2V0RGV2aWNlTWV0cmljc092ZXJyaWRlXCIsIHtcbiAgICAuLi5zaXplLFxuICAgIGRldmljZVNjYWxlRmFjdG9yOiAxLFxuICAgIG1vYmlsZTogZmFsc2UsXG4gIH0pO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wOS5cblxuaW1wb3J0IHR5cGUgeyBEZWJ1Z2dlciwgU2l6ZSwgV2ViQ29udGVudHMgfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IGV2YWxJbiB9IGZyb20gXCIuLi9iYXNlL2NkcFwiO1xuaW1wb3J0IHsgd2l0aFRpbWVvdXQgfSBmcm9tIFwiLi4vYmFzZS90aW1pbmdcIjtcblxuZXhwb3J0IGNvbnN0IEZSQU1FX1NZTkNfTUFSS0VSX1dJRFRIID0gMzI7XG5leHBvcnQgY29uc3QgRlJBTUVfU1lOQ19NQVJLRVJfSEVJR0hUID0gMTtcbmV4cG9ydCBjb25zdCBTVEVHT19USUNLX0NIQU5ORUwgPSBcInN0ZWdvLXRpY2tcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkU3RlZ29IVE1MKHRhcmdldFVSTDogc3RyaW5nLCBzaXplOiBTaXplKTogc3RyaW5nIHtcbiAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSBzaXplO1xuICByZXR1cm4gYDwhRE9DVFlQRSBodG1sPlxuPGh0bWw+XG48aGVhZD5cbiAgPG1ldGEgY2hhcnNldD1cIlVURi04XCI+XG4gIDxzdHlsZT5cbiAgICAqIHsgbWFyZ2luOiAwOyBwYWRkaW5nOiAwOyBib3gtc2l6aW5nOiBib3JkZXItYm94OyB9XG4gICAgaHRtbCwgYm9keSB7IHdpZHRoOiAke3dpZHRofXB4OyBoZWlnaHQ6ICR7aGVpZ2h0ICsgMX1weDsgb3ZlcmZsb3c6IGhpZGRlbjsgfVxuICAgICN0YXJnZXQgeyBcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsgXG4gICAgICB0b3A6IDA7IFxuICAgICAgbGVmdDogMDsgXG4gICAgICB3aWR0aDogJHt3aWR0aH1weDsgXG4gICAgICBoZWlnaHQ6ICR7aGVpZ2h0fXB4OyBcbiAgICAgIGJvcmRlcjogbm9uZTsgXG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICB9XG4gICAgI3N0ZWdvIHtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHRvcDogJHtoZWlnaHR9cHg7XG4gICAgICBsZWZ0OiAwO1xuICAgICAgd2lkdGg6ICR7d2lkdGh9cHg7XG4gICAgICBoZWlnaHQ6IDFweDtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgaW1hZ2UtcmVuZGVyaW5nOiBwaXhlbGF0ZWQ7XG4gICAgfVxuICA8L3N0eWxlPlxuPC9oZWFkPlxuPGJvZHk+XG4gIDxpZnJhbWUgaWQ9XCJ0YXJnZXRcIiBzcmM9XCIke3RhcmdldFVSTH1cIj48L2lmcmFtZT5cbiAgPGNhbnZhcyBpZD1cInN0ZWdvXCIgd2lkdGg9XCIke3dpZHRofVwiIGhlaWdodD1cIjFcIj48L2NhbnZhcz5cbiAgPHNjcmlwdD5cbiAgICAoZnVuY3Rpb24oKSB7XG4gICAgICBjb25zdCB7IGlwY1JlbmRlcmVyIH0gPSByZXF1aXJlKCdlbGVjdHJvbicpO1xuICAgICAgY29uc3QgV0lEVEggPSAke3dpZHRofTtcbiAgICAgIGNvbnN0IE1BUktFUl9XSURUSCA9ICR7RlJBTUVfU1lOQ19NQVJLRVJfV0lEVEh9O1xuICAgICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N0ZWdvJyk7XG4gICAgICBjb25zdCBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnLCB7IHdpbGxSZWFkRnJlcXVlbnRseTogdHJ1ZSB9KTtcbiAgICAgIGxldCBzdGFydFRpbWUgPSBudWxsO1xuICAgICAgbGV0IHJhZklkID0gbnVsbDtcblxuICAgICAgZnVuY3Rpb24gZW5jb2RlVGltZXN0YW1wKHRpbWVzdGFtcE1zKSB7XG4gICAgICAgIGNvbnN0IGltYWdlRGF0YSA9IGN0eC5jcmVhdGVJbWFnZURhdGEoV0lEVEgsIDEpO1xuICAgICAgICBjb25zdCBkYXRhID0gaW1hZ2VEYXRhLmRhdGE7XG5cbiAgICAgICAgY29uc3QgdGltZXN0YW1wSW50ID0gTWF0aC5mbG9vcih0aW1lc3RhbXBNcykgPj4+IDA7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBNQVJLRVJfV0lEVEg7IGkrKykge1xuICAgICAgICAgIGNvbnN0IGJpdCA9ICh0aW1lc3RhbXBJbnQgPj4+IChNQVJLRVJfV0lEVEggLSAxIC0gaSkpICYgMTtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IGJpdCA/IDI1NSA6IDA7XG4gICAgICAgICAgY29uc3QgaWR4ID0gaSAqIDQ7XG4gICAgICAgICAgZGF0YVtpZHhdID0gdmFsdWU7XG4gICAgICAgICAgZGF0YVtpZHggKyAxXSA9IHZhbHVlO1xuICAgICAgICAgIGRhdGFbaWR4ICsgMl0gPSB2YWx1ZTtcbiAgICAgICAgICBkYXRhW2lkeCArIDNdID0gMjU1O1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IE1BUktFUl9XSURUSDsgaSA8IFdJRFRIOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBpZHggPSBpICogNDtcbiAgICAgICAgICBkYXRhW2lkeF0gPSAwO1xuICAgICAgICAgIGRhdGFbaWR4ICsgMV0gPSAwO1xuICAgICAgICAgIGRhdGFbaWR4ICsgMl0gPSAwO1xuICAgICAgICAgIGRhdGFbaWR4ICsgM10gPSAyNTU7XG4gICAgICAgIH1cblxuICAgICAgICBjdHgucHV0SW1hZ2VEYXRhKGltYWdlRGF0YSwgMCwgMCk7XG4gICAgICAgIGlwY1JlbmRlcmVyLnNlbmQoJyR7U1RFR09fVElDS19DSEFOTkVMfScpO1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiB1cGRhdGVMb29wKCkge1xuICAgICAgICBpZiAoc3RhcnRUaW1lID09PSBudWxsKSByZXR1cm47XG4gICAgICAgIGNvbnN0IGVsYXBzZWQgPSBwZXJmb3JtYW5jZS5ub3coKSAtIHN0YXJ0VGltZTtcbiAgICAgICAgZW5jb2RlVGltZXN0YW1wKGVsYXBzZWQpO1xuICAgICAgICByYWZJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSh1cGRhdGVMb29wKTtcbiAgICAgIH1cblxuICAgICAgd2luZG93Ll9fcHVwX3N0YXJ0X3N0ZWdvX18gPSAoKSA9PiB7XG4gICAgICAgIHN0YXJ0VGltZSA9IHBlcmZvcm1hbmNlLm5vdygpO1xuICAgICAgICBlbmNvZGVUaW1lc3RhbXAoMCk7XG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSh1cGRhdGVMb29wKTtcbiAgICAgIH07XG5cbiAgICAgIHdpbmRvdy5fX3B1cF9kcmF3X3N0ZWdvX18gPSAobXMpID0+IHtcbiAgICAgICAgZW5jb2RlVGltZXN0YW1wKG1zKTtcbiAgICAgIH07XG5cbiAgICAgIHdpbmRvdy5fX3B1cF9zdG9wX3N0ZWdvX18gPSAoKSA9PiB7XG4gICAgICAgIGlmIChyYWZJZCAhPT0gbnVsbCkge1xuICAgICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHJhZklkKTtcbiAgICAgICAgICByYWZJZCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSkoKTtcbiAgPC9zY3JpcHQ+XG48L2JvZHk+XG48L2h0bWw+YDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlY29kZVN0ZWdvKGJpdG1hcDogQnVmZmVyLCBzaXplOiBTaXplKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSBzaXplO1xuICBpZiAod2lkdGggPCBGUkFNRV9TWU5DX01BUktFUl9XSURUSCB8fCBoZWlnaHQgPCAyKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IG1hcmtlclJvdyA9IGhlaWdodCAtIDE7XG5cbiAgbGV0IHRpbWVzdGFtcCA9IDA7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgRlJBTUVfU1lOQ19NQVJLRVJfV0lEVEg7IGkrKykge1xuICAgIGNvbnN0IHBpeGVsSWR4ID0gKG1hcmtlclJvdyAqIHdpZHRoICsgaSkgKiA0O1xuICAgIGNvbnN0IHIgPSBiaXRtYXBbcGl4ZWxJZHhdID8/IDA7XG4gICAgY29uc3QgYml0ID0gciA+IDEyNyA/IDEgOiAwO1xuICAgIHRpbWVzdGFtcCA9ICh0aW1lc3RhbXAgPDwgMSkgfCBiaXQ7XG4gIH1cblxuICB0aW1lc3RhbXAgPSB0aW1lc3RhbXAgPj4+IDA7XG5cbiAgaWYgKCFOdW1iZXIuaXNGaW5pdGUodGltZXN0YW1wKSB8fCB0aW1lc3RhbXAgPCAwIHx8IHRpbWVzdGFtcCA+IDFlNykge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICByZXR1cm4gdGltZXN0YW1wO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhcnRTdGVnbyhjZHA6IERlYnVnZ2VyKSB7XG4gIHJldHVybiBldmFsSW4oY2RwLCBgX19wdXBfc3RhcnRfc3RlZ29fXygpYCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdG9wU3RlZ28oY2RwOiBEZWJ1Z2dlcikge1xuICByZXR1cm4gZXZhbEluKGNkcCwgYF9fcHVwX3N0b3Bfc3RlZ29fXygpYCk7XG59XG5cbi8vIFBhaW50cyB0aGUgc3RlZ28gcm93IGZvciBgZXhwZWN0ZWRgIG1zIHN5bmNocm9ub3VzbHk7IHRoZSBkYW1hZ2UgcmlkZXMgb3V0IG9uIHRoZSBuZXh0IGNvbXBvc2l0ZWQgZnJhbWUuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZHJhd1N0ZWdvKHdjOiBXZWJDb250ZW50cywgZXhwZWN0ZWQ6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBldmFsSW4od2MuZGVidWdnZXIsIGBfX3B1cF9kcmF3X3N0ZWdvX18oJHtleHBlY3RlZH0pYCk7XG59XG5cbi8vIFJlc29sdmVzIHdoZW4gdGhlIHJlbmRlcmVyIGNvbW1pdHRlZCB0aGUgc3RlZ28gcm93OyBhcm0gQkVGT1JFIGRyYXdTdGVnbyB0byBhdm9pZCBtaXNzaW5nIHRoZSBhY2suXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd2FpdFN0ZWdvVGljayh3YzogV2ViQ29udGVudHMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3Qgc3dhcHBlZCA9IG5ldyBQcm9taXNlKChyKSA9PiB3Yy5pcGMub25jZShTVEVHT19USUNLX0NIQU5ORUwsIHIpKTtcbiAgYXdhaXQgd2l0aFRpbWVvdXQoc3dhcHBlZCwgNV8wMDAsIFwic3RlZ28gdGlja1wiKTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMDEuXG5cbmltcG9ydCB0eXBlIHsgU2l6ZSB9IGZyb20gXCJlbGVjdHJvblwiO1xuaW1wb3J0IHsgcHJvdG9jb2wgfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IGJ1aWxkU3RlZ29IVE1MIH0gZnJvbSBcIi4vc3RlZ29cIjtcblxuY29uc3QgUFVQX1NDSEVNRSA9IFwicHVwXCI7XG5jb25zdCBGUkFNRV9TQ0hFTUUgPSBcInB1cC1mcmFtZVwiO1xuXG4vLyByZWdpc3RlclNjaGVtZXNBc1ByaXZpbGVnZWQgaG9ub3JzIG9ubHkgdGhlIExBU1QgY2FsbCDigJQgcmVnaXN0ZXIgZXZlcnkgY3VzdG9tIHNjaGVtZSBpbiB0aGlzIG9uZSBsaXN0IGJlbG93LlxuY29uc3QgUFJJVklMRUdFRF9QUklWSUxFR0VTID0ge1xuICBzdGFuZGFyZDogdHJ1ZSxcbiAgc2VjdXJlOiB0cnVlLFxuICBieXBhc3NDU1A6IHRydWUsXG4gIGFsbG93U2VydmljZVdvcmtlcnM6IHRydWUsXG4gIHN1cHBvcnRGZXRjaEFQSTogdHJ1ZSxcbiAgY29yc0VuYWJsZWQ6IHRydWUsXG4gIHN0cmVhbTogdHJ1ZSxcbiAgY29kZUNhY2hlOiB0cnVlLFxufSBhcyBjb25zdDtcblxuLy8gTXVzdCBiZSBjYWxsZWQgc3luY2hyb25vdXNseSBiZWZvcmUgYXBwIGlzIHJlYWR5LlxucHJvdG9jb2wucmVnaXN0ZXJTY2hlbWVzQXNQcml2aWxlZ2VkKFtcbiAgeyBzY2hlbWU6IFBVUF9TQ0hFTUUsIHByaXZpbGVnZXM6IFBSSVZJTEVHRURfUFJJVklMRUdFUyB9LFxuICB7IHNjaGVtZTogRlJBTUVfU0NIRU1FLCBwcml2aWxlZ2VzOiBQUklWSUxFR0VEX1BSSVZJTEVHRVMgfSxcbl0pO1xuXG4vLyBNdXN0IGJlIGNhbGxlZCBhZnRlciBhcHAgaXMgcmVhZHkuXG5leHBvcnQgZnVuY3Rpb24gc2V0dXBQdXBQcm90b2NvbCgpOiB2b2lkIHtcbiAgcHJvdG9jb2wuaGFuZGxlKFBVUF9TQ0hFTUUsIChyZXEpID0+IHtcbiAgICBjb25zdCB1cmwgPSBuZXcgVVJMKHJlcS51cmwpO1xuICAgIGNvbnN0IHNyYyA9IHVybC5zZWFyY2hQYXJhbXMuZ2V0KFwic3JjXCIpID8/IFwiXCI7XG4gICAgY29uc3Qgd2lkdGggPSBwYXJzZUludCh1cmwuc2VhcmNoUGFyYW1zLmdldChcIndcIikgPz8gXCIwXCIsIDEwKTtcbiAgICBjb25zdCBoZWlnaHQgPSBwYXJzZUludCh1cmwuc2VhcmNoUGFyYW1zLmdldChcImhcIikgPz8gXCIwXCIsIDEwKTtcbiAgICBjb25zdCBodG1sID0gYnVpbGRTdGVnb0hUTUwoc3JjLCB7IHdpZHRoLCBoZWlnaHQgfSk7XG4gICAgcmV0dXJuIG5ldyBSZXNwb25zZShodG1sLCB7IGhlYWRlcnM6IHsgXCJjb250ZW50LXR5cGVcIjogXCJ0ZXh0L2h0bWxcIiB9IH0pO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVN0ZWdvVVJMKHNyYzogc3RyaW5nLCBzaXplOiBTaXplKTogc3RyaW5nIHtcbiAgY29uc3QgdXJsID0gbmV3IFVSTChgJHtQVVBfU0NIRU1FfTovL3N0ZWdvYCk7XG4gIHVybC5zZWFyY2hQYXJhbXMuc2V0KFwic3JjXCIsIHNyYy5yZXBsYWNlKFwiaHR0cDovL1wiLCBcImh0dHBzOi8vXCIpKTtcbiAgdXJsLnNlYXJjaFBhcmFtcy5zZXQoXCJ3XCIsIFN0cmluZyhzaXplLndpZHRoKSk7XG4gIHVybC5zZWFyY2hQYXJhbXMuc2V0KFwiaFwiLCBTdHJpbmcoc2l6ZS5oZWlnaHQpKTtcbiAgcmV0dXJuIHVybC50b1N0cmluZygpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNy8wMy5cblxuY29uc3QgR1JJRCA9IDMyOyAvLyByZXNvbHV0aW9uLWluZGVwZW5kZW50IDMyw5czMiBzYW1wbGUgbGF0dGljZVxuY29uc3QgQkxBTktfUkFOR0UgPSA4OyAvLyBtYXggcGVyLWNoYW5uZWwgc3BhdGlhbCBzcHJlYWQgKDAtMjU1KSB0byB0cmVhdCBhIGZyYW1lIGFzIGNvbnRlbnRsZXNzXG5leHBvcnQgY29uc3QgQkxBTktfV0FSTl9SQVRJTyA9IDAuNTsgLy8gYmxhbmstZnJhbWUgZnJhY3Rpb24gYWJvdmUgdGhpcyB3YXJucyBhdCByZW5kZXIgZW5kXG5cbi8vIEJsYW5rID0gbmVhci11bmlmb3JtOiBwZXItY2hhbm5lbCBzcGF0aWFsIHJhbmdlIGJlbG93IHRocmVzaG9sZCA9IG5vdGhpbmcgcmVuZGVyZWQgKHdoaXRlL2JsYWNrL2FueSBzb2xpZCBzY3JlZW4pLlxuZXhwb3J0IGZ1bmN0aW9uIGlzQmxhbmtGcmFtZShiZ3JhOiBCdWZmZXIsIHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKTogYm9vbGVhbiB7XG4gIGNvbnN0IHN0ZXBYID0gTWF0aC5tYXgoMSwgTWF0aC5mbG9vcih3aWR0aCAvIEdSSUQpKTtcbiAgY29uc3Qgc3RlcFkgPSBNYXRoLm1heCgxLCBNYXRoLmZsb29yKGhlaWdodCAvIEdSSUQpKTtcbiAgbGV0IHJNaW4gPSAyNTU7XG4gIGxldCByTWF4ID0gMDtcbiAgbGV0IGdNaW4gPSAyNTU7XG4gIGxldCBnTWF4ID0gMDtcbiAgbGV0IGJNaW4gPSAyNTU7XG4gIGxldCBiTWF4ID0gMDtcbiAgZm9yIChsZXQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkgKz0gc3RlcFkpIHtcbiAgICBmb3IgKGxldCB4ID0gMDsgeCA8IHdpZHRoOyB4ICs9IHN0ZXBYKSB7XG4gICAgICBjb25zdCBpID0gKHkgKiB3aWR0aCArIHgpICogNDtcbiAgICAgIGNvbnN0IGIgPSBiZ3JhLnJlYWRVSW50OChpKTtcbiAgICAgIGNvbnN0IGcgPSBiZ3JhLnJlYWRVSW50OChpICsgMSk7XG4gICAgICBjb25zdCByID0gYmdyYS5yZWFkVUludDgoaSArIDIpO1xuICAgICAgck1pbiA9IE1hdGgubWluKHJNaW4sIHIpO1xuICAgICAgck1heCA9IE1hdGgubWF4KHJNYXgsIHIpO1xuICAgICAgZ01pbiA9IE1hdGgubWluKGdNaW4sIGcpO1xuICAgICAgZ01heCA9IE1hdGgubWF4KGdNYXgsIGcpO1xuICAgICAgYk1pbiA9IE1hdGgubWluKGJNaW4sIGIpO1xuICAgICAgYk1heCA9IE1hdGgubWF4KGJNYXgsIGIpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gTWF0aC5tYXgock1heCAtIHJNaW4sIGdNYXggLSBnTWluLCBiTWF4IC0gYk1pbikgPD0gQkxBTktfUkFOR0U7XG59XG5cbmV4cG9ydCBjbGFzcyBCbGFua0ZyYW1lU3RhdHMge1xuICBwcml2YXRlIHJlYWRvbmx5IF93aWR0aDogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9oZWlnaHQ6IG51bWJlcjtcbiAgcHJpdmF0ZSBfdG90YWwgPSAwO1xuICBwcml2YXRlIF9ibGFuayA9IDA7XG5cbiAgY29uc3RydWN0b3Iod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpIHtcbiAgICB0aGlzLl93aWR0aCA9IHdpZHRoO1xuICAgIHRoaXMuX2hlaWdodCA9IGhlaWdodDtcbiAgfVxuXG4gIHNhbXBsZShmcmFtZTogQnVmZmVyKTogdm9pZCB7XG4gICAgdGhpcy5fdG90YWwrKztcbiAgICBpZiAoaXNCbGFua0ZyYW1lKGZyYW1lLCB0aGlzLl93aWR0aCwgdGhpcy5faGVpZ2h0KSkge1xuICAgICAgdGhpcy5fYmxhbmsrKztcbiAgICB9XG4gIH1cblxuICAvLyBGcmFjdGlvbiBvZiB3cml0dGVuIGZyYW1lcyB0aGF0IHdlcmUgY29udGVudGxlc3MgKDAgPSBhbGwgaGFkIGNvbnRlbnQsIDEgPSBhbGwgYmxhbmspLlxuICBmaW5hbGl6ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl90b3RhbCA+IDAgPyB0aGlzLl9ibGFuayAvIHRoaXMuX3RvdGFsIDogMDtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMS8zMC5cblxuaW50ZXJmYWNlIFF1ZXVlRW50cnkge1xuICBydW46IFZvaWRGdW5jdGlvbjtcbiAgcmVqZWN0OiAocmVhc29uOiB1bmtub3duKSA9PiB2b2lkO1xuICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbn1cblxuZXhwb3J0IGNsYXNzIENvbmN1cnJlbmN5TGltaXRlciB7XG4gIHByaXZhdGUgX2FjdGl2ZSA9IDA7XG4gIHByaXZhdGUgX3F1ZXVlOiBRdWV1ZUVudHJ5W10gPSBbXTtcbiAgcHJpdmF0ZSBfc2lnbmFscyA9IG5ldyBXZWFrU2V0PEFib3J0U2lnbmFsPigpO1xuICBwcml2YXRlIF9yZXNvbHZlPzogVm9pZEZ1bmN0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKHJlYWRvbmx5IG1heENvbmN1cnJlbmN5OiBudW1iZXIpIHt9XG5cbiAgZ2V0IGFjdGl2ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9hY3RpdmU7XG4gIH1cblxuICBnZXQgcGVuZGluZygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9xdWV1ZS5sZW5ndGg7XG4gIH1cblxuICBnZXQgc3RhdHMoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYGFjdGl2ZTogJHt0aGlzLmFjdGl2ZX0sIHBlbmRpbmc6ICR7dGhpcy5wZW5kaW5nfWA7XG4gIH1cblxuICBhc3luYyBzY2hlZHVsZTxUPihmbjogKCkgPT4gUHJvbWlzZTxUPiwgc2lnbmFsPzogQWJvcnRTaWduYWwpOiBQcm9taXNlPFQ+IHtcbiAgICBzaWduYWw/LnRocm93SWZBYm9ydGVkKCk7XG5cbiAgICBpZiAoc2lnbmFsICYmICF0aGlzLl9zaWduYWxzLmhhcyhzaWduYWwpKSB7XG4gICAgICB0aGlzLl9zaWduYWxzLmFkZChzaWduYWwpO1xuICAgICAgc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCAoKSA9PiB0aGlzLmZsdXNoKHNpZ25hbCksIHsgb25jZTogdHJ1ZSB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2U8VD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpcy5fcXVldWUucHVzaCh7XG4gICAgICAgIHJ1bjogKCkgPT4ge1xuICAgICAgICAgIGlmIChzaWduYWw/LmFib3J0ZWQpIHtcbiAgICAgICAgICAgIHJlamVjdChzaWduYWwucmVhc29uKTtcbiAgICAgICAgICAgIHRoaXMubmV4dCgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLl9hY3RpdmUrKztcbiAgICAgICAgICBmbigpXG4gICAgICAgICAgICAudGhlbigodikgPT4ge1xuICAgICAgICAgICAgICB0aGlzLl9hY3RpdmUtLTtcbiAgICAgICAgICAgICAgcmVzb2x2ZSh2KTtcbiAgICAgICAgICAgICAgdGhpcy5uZXh0KCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuX2FjdGl2ZS0tO1xuICAgICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgICAgIHRoaXMubmV4dCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIHJlamVjdCxcbiAgICAgICAgc2lnbmFsLFxuICAgICAgfSk7XG4gICAgICB0aGlzLm5leHQoKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGRyYWluKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9hY3RpdmUgPT09IDAgJiYgdGhpcy5wZW5kaW5nID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocikgPT4gKHRoaXMuX3Jlc29sdmUgPSByKSk7XG4gIH1cblxuICBwcml2YXRlIGZsdXNoKHNpZ25hbDogQWJvcnRTaWduYWwpIHtcbiAgICBjb25zdCBrZWVwOiBRdWV1ZUVudHJ5W10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIHRoaXMuX3F1ZXVlKSB7XG4gICAgICBpZiAoZW50cnkuc2lnbmFsID09PSBzaWduYWwpIHtcbiAgICAgICAgZW50cnkucmVqZWN0KHNpZ25hbC5yZWFzb24pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAga2VlcC5wdXNoKGVudHJ5KTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5fcXVldWUgPSBrZWVwO1xuICAgIHRoaXMubmV4dCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBuZXh0KCkge1xuICAgIGlmICh0aGlzLl9hY3RpdmUgPT09IDAgJiYgdGhpcy5wZW5kaW5nID09PSAwKSB7XG4gICAgICB0aGlzLl9yZXNvbHZlPy4oKTtcbiAgICAgIHRoaXMuX3Jlc29sdmUgPSB1bmRlZmluZWQ7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLl9hY3RpdmUgPCB0aGlzLm1heENvbmN1cnJlbmN5KSB7XG4gICAgICB0aGlzLl9xdWV1ZS5zaGlmdCgpPy5ydW4oKTtcbiAgICB9XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMTIuXG5cbmltcG9ydCB7XG4gIHR5cGUgQ29kZWMsXG4gIENvZGVjQ29udGV4dCxcbiAgRkZtcGVnRXJyb3IsXG4gIEZyYW1lLFxuICB0eXBlIEhhcmR3YXJlRnJhbWVzQ29udGV4dCxcbiAgUGFja2V0LFxuICBSYXRpb25hbCxcbiAgdHlwZSBTdHJlYW0sXG59IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQge1xuICBBVl9DT0RFQ19GTEFHX0dMT0JBTF9IRUFERVIsXG4gIHR5cGUgQVZDb2xvclJhbmdlLFxuICBBVkVSUk9SX0VBR0FJTixcbiAgQVZFUlJPUl9FT0YsXG4gIHR5cGUgQVZQaXhlbEZvcm1hdCxcbiAgdHlwZSBGRlZpZGVvRW5jb2Rlcixcbn0gZnJvbSBcIm5vZGUtYXYvY29uc3RhbnRzXCI7XG5pbXBvcnQgdHlwZSB7IEZvcm1hdE11eGVyIH0gZnJvbSBcIi4vbXV4ZXJcIjtcblxuLy8gbm9kZS1hdiA1LjIuMyBjb25zdGFudCBpcyB3cm9uZzsgZmZtcGVnIHJlZ2lzdGVycyB3aXRoIGRhc2guXG5leHBvcnQgY29uc3QgRkZfRU5DT0RFUl9MSUJWUFhfVlA5ID0gXCJsaWJ2cHgtdnA5XCIgYXMgRkZWaWRlb0VuY29kZXI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmlkZW9DdHhPcHRpb25zIHtcbiAgY29kZWM6IENvZGVjO1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgZnBzOiBudW1iZXI7XG4gIGJpdHJhdGU6IG51bWJlcjtcbiAgcGl4ZWxGb3JtYXQ6IEFWUGl4ZWxGb3JtYXQ7XG4gIGNvZGVjVGFnPzogc3RyaW5nO1xuICBjb2xvclJhbmdlPzogQVZDb2xvclJhbmdlO1xuICBvcHRpb25zPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgaHdGcmFtZXNDdHg/OiBIYXJkd2FyZUZyYW1lc0NvbnRleHQ7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBvcGVuVmlkZW9DdHgob3B0czogVmlkZW9DdHhPcHRpb25zLCBsYWJlbDogc3RyaW5nKTogUHJvbWlzZTxDb2RlY0NvbnRleHQ+IHtcbiAgY29uc3QgY3R4ID0gbmV3IENvZGVjQ29udGV4dCgpO1xuICBjdHguYWxsb2NDb250ZXh0MyhvcHRzLmNvZGVjKTtcbiAgLy8gUGFydGlhbC1jb25zdHJ1Y3Rpb24gc2FmZXR5OiBmcmVlIGN0eCBpZiBhbnkgc2V0dGVyL29wZW4yIHRocm93cyBiZWZvcmUgd2UgcmV0dXJuIGl0LlxuICB1c2luZyBzdGFjayA9IG5ldyBEaXNwb3NhYmxlU3RhY2soKTtcbiAgc3RhY2sudXNlKGN0eCk7XG4gIGN0eC5jb2RlY0lkID0gb3B0cy5jb2RlYy5pZDtcbiAgY3R4LndpZHRoID0gb3B0cy53aWR0aDtcbiAgY3R4LmhlaWdodCA9IG9wdHMuaGVpZ2h0O1xuICBjdHgucGl4ZWxGb3JtYXQgPSBvcHRzLnBpeGVsRm9ybWF0O1xuICBjdHgudGltZUJhc2UgPSBuZXcgUmF0aW9uYWwoMSwgb3B0cy5mcHMpO1xuICBjdHguZnJhbWVyYXRlID0gbmV3IFJhdGlvbmFsKG9wdHMuZnBzLCAxKTtcbiAgY3R4LmdvcFNpemUgPSBvcHRzLmZwcyAqIDI7XG4gIGN0eC5iaXRSYXRlID0gQmlnSW50KG9wdHMuYml0cmF0ZSk7XG4gIGN0eC5zZXRGbGFncyhBVl9DT0RFQ19GTEFHX0dMT0JBTF9IRUFERVIpO1xuICBpZiAob3B0cy5jb2RlY1RhZykge1xuICAgIGN0eC5jb2RlY1RhZyA9IG9wdHMuY29kZWNUYWc7XG4gIH1cbiAgaWYgKG9wdHMuY29sb3JSYW5nZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY3R4LmNvbG9yUmFuZ2UgPSBvcHRzLmNvbG9yUmFuZ2U7XG4gIH1cbiAgaWYgKG9wdHMuaHdGcmFtZXNDdHgpIHtcbiAgICBjdHguaHdGcmFtZXNDdHggPSBvcHRzLmh3RnJhbWVzQ3R4O1xuICB9XG4gIGZvciAoY29uc3QgW2ssIHZdIG9mIE9iamVjdC5lbnRyaWVzKG9wdHMub3B0aW9ucyA/PyB7fSkpIHtcbiAgICBjdHguc2V0T3B0aW9uKGssIHYpO1xuICB9XG4gIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCBjdHgub3BlbjIob3B0cy5jb2RlYywgbnVsbCksIGxhYmVsKTtcbiAgc3RhY2subW92ZSgpO1xuICByZXR1cm4gY3R4O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWFrZUZyYW1lKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyLCBwaXhGbXQ6IEFWUGl4ZWxGb3JtYXQpOiBGcmFtZSB7XG4gIGNvbnN0IGZyYW1lID0gbmV3IEZyYW1lKCk7XG4gIGZyYW1lLmFsbG9jKCk7XG4gIC8vIFBhcnRpYWwtY29uc3RydWN0aW9uIHNhZmV0eTogZnJlZSBmcmFtZSBpZiBnZXRCdWZmZXIgdGhyb3dzIGJlZm9yZSB3ZSByZXR1cm4gaXQuXG4gIHVzaW5nIHN0YWNrID0gbmV3IERpc3Bvc2FibGVTdGFjaygpO1xuICBzdGFjay51c2UoZnJhbWUpO1xuICBmcmFtZS5mb3JtYXQgPSBwaXhGbXQ7XG4gIGZyYW1lLndpZHRoID0gd2lkdGg7XG4gIGZyYW1lLmhlaWdodCA9IGhlaWdodDtcbiAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGZyYW1lLmdldEJ1ZmZlcigwKSwgXCJmcmFtZS5nZXRCdWZmZXJcIik7XG4gIHN0YWNrLm1vdmUoKTtcbiAgcmV0dXJuIGZyYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWFrZVBhY2tldCgpOiBQYWNrZXQge1xuICBjb25zdCBwa3QgPSBuZXcgUGFja2V0KCk7XG4gIHBrdC5hbGxvYygpO1xuICByZXR1cm4gcGt0O1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZHJhaW5QYWNrZXRzKGN0eDogQ29kZWNDb250ZXh0LCBwa3Q6IFBhY2tldCwgc3RyZWFtOiBTdHJlYW0sIG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICB3aGlsZSAodHJ1ZSkge1xuICAgIGNvbnN0IHIgPSBhd2FpdCBjdHgucmVjZWl2ZVBhY2tldChwa3QpO1xuICAgIGlmIChyID09PSBBVkVSUk9SX0VBR0FJTiB8fCByID09PSBBVkVSUk9SX0VPRikge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IociwgXCJyZWNlaXZlUGFja2V0XCIpO1xuICAgICAgcGt0LnN0cmVhbUluZGV4ID0gc3RyZWFtLmluZGV4O1xuICAgICAgaWYgKHBrdC5kdXJhdGlvbiA9PT0gMG4pIHtcbiAgICAgICAgcGt0LmR1cmF0aW9uID0gMW47XG4gICAgICB9XG4gICAgICBwa3QucmVzY2FsZVRzKGN0eC50aW1lQmFzZSwgc3RyZWFtLnRpbWVCYXNlKTtcbiAgICAgIGF3YWl0IG11eGVyLndyaXRlUGFja2V0KHBrdCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHBrdC51bnJlZigpO1xuICAgIH1cbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8wMy5cblxuaW1wb3J0IHsgb2sgfSBmcm9tIFwibm9kZTphc3NlcnRcIjtcbmltcG9ydCB7XG4gIEFWX1BJWF9GTVRfQkdSQSxcbiAgQVZfUElYX0ZNVF9ZVVZBNDIwUCxcbiAgdHlwZSBBVlBpeGVsRm9ybWF0LFxuICBDb2RlYyxcbiAgQ29kZWNDb250ZXh0LFxuICBGRl9ERUNPREVSX1BORyxcbiAgRkZtcGVnRXJyb3IsXG4gIHR5cGUgRnJhbWUsXG4gIHR5cGUgUGFja2V0LFxuICBTb2Z0d2FyZVNjYWxlQ29udGV4dCxcbiAgU1dTX0JJTElORUFSLFxufSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHsgbWFrZUZyYW1lLCBtYWtlUGFja2V0IH0gZnJvbSBcIi4vbWlzY1wiO1xuXG5leHBvcnQgY2xhc3MgQ29kZWNTdGF0ZSBpbXBsZW1lbnRzIERpc3Bvc2FibGUge1xuICByZWFkb25seSBzcmM6IEZyYW1lO1xuICByZWFkb25seSBkc3Q6IEZyYW1lO1xuICByZWFkb25seSBwa3Q6IFBhY2tldDtcbiAgcHJpdmF0ZSBfc3dzPzogU29mdHdhcmVTY2FsZUNvbnRleHQ7XG4gIHByaXZhdGUgX3BuZz86IENvZGVjO1xuXG4gIHN0YXRpYyBhc3luYyBjcmVhdGUod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpIHtcbiAgICBjb25zdCBjb2RlYyA9IENvZGVjLmZpbmREZWNvZGVyQnlOYW1lKEZGX0RFQ09ERVJfUE5HKTtcbiAgICBvayhjb2RlYywgXCJwbmcgZGVjb2RlciB1bmF2YWlsYWJsZVwiKTtcbiAgICByZXR1cm4gbmV3IENvZGVjU3RhdGUod2lkdGgsIGhlaWdodCwgY29kZWMpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcih3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlciwgcG5nOiBDb2RlYykge1xuICAgIHRoaXMuX3BuZyA9IHBuZztcbiAgICB0aGlzLnNyYyA9IG1ha2VGcmFtZSh3aWR0aCwgaGVpZ2h0LCBBVl9QSVhfRk1UX0JHUkEpO1xuICAgIHRoaXMuZHN0ID0gbWFrZUZyYW1lKHdpZHRoLCBoZWlnaHQsIEFWX1BJWF9GTVRfWVVWQTQyMFApO1xuICAgIHRoaXMucGt0ID0gbWFrZVBhY2tldCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIGZyZXNoIFBORyBkZWNvZGVyIGNvbnRleHQuXG4gICAqIFRoZSBGRm1wZWcgUE5HIGRlY29kZXIgYWNjdW11bGF0ZXMgQVBORyBibGVuZGluZyBzdGF0ZVxuICAgKiBhY3Jvc3MgZnJhbWVzLCBzbyBhIHNoYXJlZCBpbnN0YW5jZSBjb3JydXB0cyBvdXRwdXQgd2hlbiBkZWNvZGluZyBzdGFuZGFsb25lIFBOR3MuXG4gICAqL1xuICBhc3luYyBwbmcoKTogUHJvbWlzZTxDb2RlY0NvbnRleHQ+IHtcbiAgICAvLyBQYXJ0aWFsLWNvbnN0cnVjdGlvbiBzYWZldHk6IGZyZWUgdGhlIGN0eCBpZiBvcGVuMiB0aHJvd3M7IG1vdmUoKSBkaXNvd25zIG9uIHN1Y2Nlc3MuXG4gICAgdXNpbmcgc3RhY2sgPSBuZXcgRGlzcG9zYWJsZVN0YWNrKCk7XG4gICAgY29uc3QgcG5nID0gbmV3IENvZGVjQ29udGV4dCgpO1xuICAgIHBuZy5hbGxvY0NvbnRleHQzKHRoaXMuX3BuZyk7XG4gICAgc3RhY2sudXNlKHBuZyk7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IHBuZy5vcGVuMih0aGlzLl9wbmcpLCBcInBuZ0RlY29kZXIub3BlbjJcIik7XG4gICAgc3RhY2subW92ZSgpO1xuICAgIHJldHVybiBwbmc7XG4gIH1cblxuICBhc3luYyBkZWNvZGVQTkcocG5nRGF0YTogQnVmZmVyKTogUHJvbWlzZTxGcmFtZT4ge1xuICAgIHVzaW5nIHBuZyA9IGF3YWl0IHRoaXMucG5nKCk7XG4gICAgdGhpcy5wa3QuZGF0YSA9IHBuZ0RhdGE7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IHBuZy5zZW5kUGFja2V0KHRoaXMucGt0KSwgXCJwbmdEZWNvZGVyLnNlbmRQYWNrZXRcIik7XG4gICAgdGhpcy5wa3QudW5yZWYoKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgcG5nLnJlY2VpdmVGcmFtZSh0aGlzLnNyYyksIFwicG5nRGVjb2Rlci5yZWNlaXZlRnJhbWVcIik7XG4gICAgcmV0dXJuIHRoaXMuc3JjO1xuICB9XG5cbiAgZ2V0IHN3cygpIHtcbiAgICBpZiAoIXRoaXMuX3N3cykge1xuICAgICAgY29uc3Qgc3dzID0gbmV3IFNvZnR3YXJlU2NhbGVDb250ZXh0KCk7XG4gICAgICBjb25zdCBmbXQgPSB0aGlzLnNyYy5mb3JtYXQgYXMgQVZQaXhlbEZvcm1hdDtcbiAgICAgIHN3cy5nZXRDb250ZXh0KFxuICAgICAgICB0aGlzLnNyYy53aWR0aCxcbiAgICAgICAgdGhpcy5zcmMuaGVpZ2h0LFxuICAgICAgICBmbXQsXG4gICAgICAgIHRoaXMuc3JjLndpZHRoLFxuICAgICAgICB0aGlzLnNyYy5oZWlnaHQsXG4gICAgICAgIEFWX1BJWF9GTVRfWVVWQTQyMFAsXG4gICAgICAgIFNXU19CSUxJTkVBUixcbiAgICAgICk7XG4gICAgICB0aGlzLl9zd3MgPSBzd3M7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9zd3M7XG4gIH1cblxuICBbU3ltYm9sLmRpc3Bvc2VdKCk6IHZvaWQge1xuICAgIHRoaXMuc3JjW1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgIHRoaXMuZHN0W1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgIHRoaXMucGt0W1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgIHRoaXMuX3N3cz8uW1N5bWJvbC5kaXNwb3NlXSgpO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzAxLlxuXG5pbXBvcnQge1xuICBDb2RlYyxcbiAgQ29kZWNDb250ZXh0LFxuICBGRm1wZWdFcnJvcixcbiAgRmlsdGVyLFxuICB0eXBlIEZpbHRlckNvbnRleHQsXG4gIEZpbHRlckdyYXBoLFxuICBGaWx0ZXJJbk91dCxcbiAgRnJhbWUsXG4gIHR5cGUgUGFja2V0LFxuICBSYXRpb25hbCxcbiAgdHlwZSBTdHJlYW0sXG59IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQge1xuICBBVl9DSEFOTkVMX0xBWU9VVF9TVEVSRU8sXG4gIEFWX0NPREVDX0ZMQUdfR0xPQkFMX0hFQURFUixcbiAgQVZfU0FNUExFX0ZNVF9GTFQsXG4gIEFWX1NBTVBMRV9GTVRfRkxUUCxcbiAgQVZFUlJPUl9FQUdBSU4sXG4gIEFWRVJST1JfRU9GLFxuICB0eXBlIEZGQXVkaW9FbmNvZGVyLFxufSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcbmltcG9ydCB7IGRyYWluUGFja2V0cywgbWFrZVBhY2tldCB9IGZyb20gXCIuL21pc2NcIjtcbmltcG9ydCB0eXBlIHsgRm9ybWF0TXV4ZXIgfSBmcm9tIFwiLi9tdXhlclwiO1xuXG5jb25zdCBTQU1QTEVfRk1UX05BTUU6IFBhcnRpYWw8UmVjb3JkPG51bWJlciwgc3RyaW5nPj4gPSB7IFtBVl9TQU1QTEVfRk1UX0ZMVF06IFwiZmx0XCIsIFtBVl9TQU1QTEVfRk1UX0ZMVFBdOiBcImZsdHBcIiB9O1xuXG5leHBvcnQgaW50ZXJmYWNlIEF1ZGlvRW5jb2Rlck9wdGlvbnMge1xuICBvdXRTYW1wbGVSYXRlOiBudW1iZXI7XG4gIG91dFNhbXBsZUZtdDogdHlwZW9mIEFWX1NBTVBMRV9GTVRfRkxUIHwgdHlwZW9mIEFWX1NBTVBMRV9GTVRfRkxUUDtcbiAgY29kZWNOYW1lOiBGRkF1ZGlvRW5jb2RlcjtcbiAgZ2xvYmFsSGVhZGVyOiBib29sZWFuO1xuICBiaXRyYXRlOiBudW1iZXI7XG4gIG11eGVyOiBGb3JtYXRNdXhlcjtcbn1cblxuZXhwb3J0IGNsYXNzIEF1ZGlvRW5jb2RlciBpbXBsZW1lbnRzIERpc3Bvc2FibGUge1xuICBwcml2YXRlIF9jdHg6IENvZGVjQ29udGV4dDtcbiAgcHJpdmF0ZSBfc3RyZWFtOiBTdHJlYW07XG4gIHByaXZhdGUgX3BrdDogUGFja2V0O1xuICBwcml2YXRlIF9vdXRSYXRlOiBudW1iZXI7XG4gIHByaXZhdGUgX291dEZtdDogdHlwZW9mIEFWX1NBTVBMRV9GTVRfRkxUIHwgdHlwZW9mIEFWX1NBTVBMRV9GTVRfRkxUUDtcbiAgcHJpdmF0ZSBfZnJhbWVTaXplOiBudW1iZXI7XG4gIHByaXZhdGUgX2ZpbHRlckZyYW1lOiBGcmFtZTtcbiAgcHJpdmF0ZSBfZ3JhcGg/OiBGaWx0ZXJHcmFwaDtcbiAgcHJpdmF0ZSBfYnVmU3JjPzogRmlsdGVyQ29udGV4dDtcbiAgcHJpdmF0ZSBfYnVmU2luaz86IEZpbHRlckNvbnRleHQ7XG4gIHByaXZhdGUgX2luUmF0ZT86IG51bWJlcjtcbiAgcHJpdmF0ZSBfcHRzID0gMG47XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihjdHg6IENvZGVjQ29udGV4dCwgc3RyZWFtOiBTdHJlYW0sIG91dEZtdDogdHlwZW9mIEFWX1NBTVBMRV9GTVRfRkxUIHwgdHlwZW9mIEFWX1NBTVBMRV9GTVRfRkxUUCkge1xuICAgIHRoaXMuX2N0eCA9IGN0eDtcbiAgICB0aGlzLl9zdHJlYW0gPSBzdHJlYW07XG4gICAgdGhpcy5fb3V0UmF0ZSA9IGN0eC5zYW1wbGVSYXRlO1xuICAgIHRoaXMuX291dEZtdCA9IG91dEZtdDtcbiAgICB0aGlzLl9mcmFtZVNpemUgPSBjdHguZnJhbWVTaXplO1xuICAgIHRoaXMuX3BrdCA9IG1ha2VQYWNrZXQoKTtcbiAgICB0aGlzLl9maWx0ZXJGcmFtZSA9IG5ldyBGcmFtZSgpO1xuICAgIHRoaXMuX2ZpbHRlckZyYW1lLmFsbG9jKCk7XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgY3JlYXRlKG9wdHM6IEF1ZGlvRW5jb2Rlck9wdGlvbnMpOiBQcm9taXNlPEF1ZGlvRW5jb2Rlcj4ge1xuICAgIGNvbnN0IGNvZGVjID0gQ29kZWMuZmluZEVuY29kZXJCeU5hbWUob3B0cy5jb2RlY05hbWUpO1xuICAgIGlmICghY29kZWMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQXVkaW8gZW5jb2RlciBub3QgZm91bmQ6ICR7b3B0cy5jb2RlY05hbWV9YCk7XG4gICAgfVxuICAgIC8vIFBhcnRpYWwtY29uc3RydWN0aW9uIHNhZmV0eTogc3RhY2sgZnJlZXMgY3R4IGlmIGEgbGF0ZXIgc3RlcCB0aHJvd3M7IG1vdmUoKSBkaXNvd25zIG9uIHN1Y2Nlc3MuXG4gICAgdXNpbmcgc3RhY2sgPSBuZXcgRGlzcG9zYWJsZVN0YWNrKCk7XG4gICAgY29uc3QgY3R4ID0gbmV3IENvZGVjQ29udGV4dCgpO1xuICAgIGN0eC5hbGxvY0NvbnRleHQzKGNvZGVjKTtcbiAgICBzdGFjay51c2UoY3R4KTtcbiAgICBjdHguY29kZWNJZCA9IGNvZGVjLmlkO1xuICAgIGN0eC5zYW1wbGVGb3JtYXQgPSBvcHRzLm91dFNhbXBsZUZtdDtcbiAgICBjdHguc2FtcGxlUmF0ZSA9IG9wdHMub3V0U2FtcGxlUmF0ZTtcbiAgICBjdHguY2hhbm5lbExheW91dCA9IEFWX0NIQU5ORUxfTEFZT1VUX1NURVJFTztcbiAgICBjdHgudGltZUJhc2UgPSBuZXcgUmF0aW9uYWwoMSwgb3B0cy5vdXRTYW1wbGVSYXRlKTtcbiAgICBjdHguYml0UmF0ZSA9IEJpZ0ludChvcHRzLmJpdHJhdGUpO1xuICAgIGlmIChvcHRzLmdsb2JhbEhlYWRlcikge1xuICAgICAgY3R4LnNldEZsYWdzKEFWX0NPREVDX0ZMQUdfR0xPQkFMX0hFQURFUik7XG4gICAgfVxuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCBjdHgub3BlbjIoY29kZWMsIG51bGwpLCBcImF1ZGlvQ3R4Lm9wZW4yXCIpO1xuICAgIGNvbnN0IHN0cmVhbSA9IG9wdHMubXV4ZXIuYWRkU3RyZWFtKGN0eCk7XG4gICAgc3RhY2subW92ZSgpO1xuICAgIHJldHVybiBuZXcgQXVkaW9FbmNvZGVyKGN0eCwgc3RyZWFtLCBvcHRzLm91dFNhbXBsZUZtdCk7XG4gIH1cblxuICBzZXRJbnB1dFJhdGUoaW5TYW1wbGVSYXRlOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9ncmFwaD8uW1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgIHRoaXMuX2luUmF0ZSA9IGluU2FtcGxlUmF0ZTtcbiAgICAvLyBQYXJ0aWFsLWNvbnN0cnVjdGlvbiBzYWZldHk6IHN0YWNrIGZyZWVzIHRoZSBncmFwaCBpZiBmaWx0ZXIgc2V0dXAgdGhyb3dzOyBtb3ZlKCkgZGlzb3ducyBvbiBzdWNjZXNzLlxuICAgIHVzaW5nIHN0YWNrID0gbmV3IERpc3Bvc2FibGVTdGFjaygpO1xuICAgIGNvbnN0IGdyYXBoID0gbmV3IEZpbHRlckdyYXBoKCk7XG4gICAgZ3JhcGguYWxsb2MoKTtcbiAgICBzdGFjay51c2UoZ3JhcGgpO1xuICAgIGNvbnN0IGFidWZmZXIgPSBGaWx0ZXIuZ2V0QnlOYW1lKFwiYWJ1ZmZlclwiKSE7XG4gICAgY29uc3QgYnVmU3JjID0gZ3JhcGguY3JlYXRlRmlsdGVyKFxuICAgICAgYWJ1ZmZlcixcbiAgICAgIFwic3JjXCIsXG4gICAgICBgc2FtcGxlX3JhdGU9JHtpblNhbXBsZVJhdGV9OnNhbXBsZV9mbXQ9Zmx0OmNoYW5uZWxfbGF5b3V0PXN0ZXJlbzp0aW1lX2Jhc2U9MS8ke2luU2FtcGxlUmF0ZX1gLFxuICAgICk7XG4gICAgaWYgKCFidWZTcmMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkZhaWxlZCB0byBjcmVhdGUgYWJ1ZmZlclwiKTtcbiAgICB9XG4gICAgY29uc3QgYWJ1ZmZlcnNpbmsgPSBGaWx0ZXIuZ2V0QnlOYW1lKFwiYWJ1ZmZlcnNpbmtcIikhO1xuICAgIGNvbnN0IGJ1ZlNpbmsgPSBncmFwaC5jcmVhdGVGaWx0ZXIoYWJ1ZmZlcnNpbmssIFwic2lua1wiKTtcbiAgICBpZiAoIWJ1ZlNpbmspIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkZhaWxlZCB0byBjcmVhdGUgYWJ1ZmZlcnNpbmtcIik7XG4gICAgfVxuICAgIGNvbnN0IGZtdE5hbWUgPSBTQU1QTEVfRk1UX05BTUVbdGhpcy5fb3V0Rm10XSA/PyBcImZsdFwiO1xuICAgIGNvbnN0IGZpbHRlckRlc2MgPSBgYWZvcm1hdD1zYW1wbGVfZm10cz0ke2ZtdE5hbWV9OnNhbXBsZV9yYXRlcz0ke3RoaXMuX291dFJhdGV9OmNoYW5uZWxfbGF5b3V0cz1zdGVyZW8sYXNldG5zYW1wbGVzPW49JHt0aGlzLl9mcmFtZVNpemV9OnA9MWA7XG4gICAgY29uc3Qgb3V0cHV0cyA9IEZpbHRlckluT3V0LmNyZWF0ZUxpc3QoW3sgbmFtZTogXCJpblwiLCBmaWx0ZXJDdHg6IGJ1ZlNyYywgcGFkSWR4OiAwIH1dKTtcbiAgICBjb25zdCBpbnB1dHMgPSBGaWx0ZXJJbk91dC5jcmVhdGVMaXN0KFt7IG5hbWU6IFwib3V0XCIsIGZpbHRlckN0eDogYnVmU2luaywgcGFkSWR4OiAwIH1dKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoZ3JhcGgucGFyc2VQdHIoZmlsdGVyRGVzYywgaW5wdXRzLCBvdXRwdXRzKSwgXCJncmFwaC5wYXJzZVB0clwiKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoZ3JhcGguY29uZmlnU3luYygpLCBcImdyYXBoLmNvbmZpZ1wiKTtcbiAgICBzdGFjay5tb3ZlKCk7XG4gICAgdGhpcy5fZ3JhcGggPSBncmFwaDtcbiAgICB0aGlzLl9idWZTcmMgPSBidWZTcmM7XG4gICAgdGhpcy5fYnVmU2luayA9IGJ1ZlNpbms7XG4gIH1cblxuICBhc3luYyBlbmNvZGUocGNtOiBCdWZmZXIsIG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5fYnVmU3JjIHx8ICF0aGlzLl9pblJhdGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgc3JjID0gbmV3IEZsb2F0MzJBcnJheShwY20uYnVmZmVyLCBwY20uYnl0ZU9mZnNldCwgcGNtLmJ5dGVMZW5ndGggLyA0KTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNyYy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUoc3JjW2ldISkpIHtcbiAgICAgICAgc3JjW2ldID0gMDtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgblNhbXBsZXMgPSBzcmMubGVuZ3RoID4+IDE7XG4gICAgdXNpbmcgZnJhbWUgPSBGcmFtZS5mcm9tQXVkaW9CdWZmZXIoQnVmZmVyLmZyb20oc3JjLmJ1ZmZlciwgc3JjLmJ5dGVPZmZzZXQsIHNyYy5ieXRlTGVuZ3RoKSwge1xuICAgICAgbmJTYW1wbGVzOiBuU2FtcGxlcyxcbiAgICAgIGZvcm1hdDogQVZfU0FNUExFX0ZNVF9GTFQsXG4gICAgICBzYW1wbGVSYXRlOiB0aGlzLl9pblJhdGUsXG4gICAgICBjaGFubmVsTGF5b3V0OiBBVl9DSEFOTkVMX0xBWU9VVF9TVEVSRU8sXG4gICAgICBwdHM6IHRoaXMuX3B0cyxcbiAgICAgIHRpbWVCYXNlOiB7IG51bTogMSwgZGVuOiB0aGlzLl9pblJhdGUgfSxcbiAgICB9KTtcbiAgICB0aGlzLl9wdHMgKz0gQmlnSW50KG5TYW1wbGVzKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgdGhpcy5fYnVmU3JjLmJ1ZmZlcnNyY0FkZEZyYW1lKGZyYW1lKSwgXCJidWZmZXJzcmNBZGRGcmFtZVwiKTtcbiAgICBhd2FpdCB0aGlzLmRyYWluKG11eGVyKTtcbiAgfVxuXG4gIGFzeW5jIGZsdXNoKG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9idWZTcmMpIHtcbiAgICAgIGF3YWl0IHRoaXMuX2J1ZlNyYy5idWZmZXJzcmNBZGRGcmFtZShudWxsKTtcbiAgICAgIGF3YWl0IHRoaXMuZHJhaW4obXV4ZXIpO1xuICAgIH1cbiAgICBhd2FpdCB0aGlzLl9jdHguc2VuZEZyYW1lKG51bGwpO1xuICAgIGF3YWl0IHRoaXMuZHJhaW5Db2RlYyhtdXhlcik7XG4gIH1cblxuICBbU3ltYm9sLmRpc3Bvc2VdKCk6IHZvaWQge1xuICAgIHRoaXMuX3BrdC5mcmVlKCk7XG4gICAgdGhpcy5fZmlsdGVyRnJhbWUuZnJlZSgpO1xuICAgIHRoaXMuX2dyYXBoPy5bU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgdGhpcy5fY3R4LmZyZWVDb250ZXh0KCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGRyYWluKG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBjb25zdCByID0gYXdhaXQgdGhpcy5fYnVmU2luayEuYnVmZmVyc2lua0dldEZyYW1lKHRoaXMuX2ZpbHRlckZyYW1lKTtcbiAgICAgIGlmIChyID09PSBBVkVSUk9SX0VBR0FJTiB8fCByID09PSBBVkVSUk9SX0VPRikge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHRyeSB7XG4gICAgICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihyLCBcImJ1ZmZlcnNpbmtHZXRGcmFtZVwiKTtcbiAgICAgICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IHRoaXMuX2N0eC5zZW5kRnJhbWUodGhpcy5fZmlsdGVyRnJhbWUpLCBcImF1ZGlvQ3R4LnNlbmRGcmFtZVwiKTtcbiAgICAgICAgYXdhaXQgdGhpcy5kcmFpbkNvZGVjKG11eGVyKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMuX2ZpbHRlckZyYW1lLnVucmVmKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBkcmFpbkNvZGVjKG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBkcmFpblBhY2tldHModGhpcy5fY3R4LCB0aGlzLl9wa3QsIHRoaXMuX3N0cmVhbSwgbXV4ZXIpO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzEzLlxuXG5leHBvcnQgZnVuY3Rpb24gcGFja0JpdHMoYml0czogbnVtYmVyW10pOiBCdWZmZXIge1xuICBjb25zdCBidWYgPSBCdWZmZXIuYWxsb2MoYml0cy5sZW5ndGggPj4gMyk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYnVmLmxlbmd0aDsgaSsrKSB7XG4gICAgbGV0IGJ5dGUgPSAwO1xuICAgIGZvciAobGV0IGIgPSAwOyBiIDwgODsgYisrKSB7XG4gICAgICBieXRlID0gKGJ5dGUgPDwgMSkgfCBiaXRzW2kgKiA4ICsgYl0hO1xuICAgIH1cbiAgICBidWZbaV0gPSBieXRlO1xuICB9XG4gIHJldHVybiBidWY7XG59XG5cbmV4cG9ydCBjbGFzcyBCaXRXcml0ZXIge1xuICBiaXRzOiBudW1iZXJbXSA9IFtdO1xuICB3KHZhbDogbnVtYmVyLCBuOiBudW1iZXIpIHtcbiAgICBmb3IgKGxldCBpID0gbiAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICB0aGlzLmJpdHMucHVzaCgodmFsID4+IGkpICYgMSk7XG4gICAgfVxuICB9XG4gIGZsYWcodmFsOiBib29sZWFuIHwgbnVtYmVyKSB7XG4gICAgdGhpcy5iaXRzLnB1c2godmFsID8gMSA6IDApO1xuICB9XG4gIHVlKHZhbDogbnVtYmVyKSB7XG4gICAgY29uc3QgdiA9IHZhbCArIDE7XG4gICAgY29uc3QgbGVuID0gMzIgLSBNYXRoLmNsejMyKHYpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuIC0gMTsgaSsrKSB7XG4gICAgICB0aGlzLmJpdHMucHVzaCgwKTtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IGxlbiAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICB0aGlzLmJpdHMucHVzaCgodiA+PiBpKSAmIDEpO1xuICAgIH1cbiAgfVxuICBhbGlnbihwYWQ6IG51bWJlcikge1xuICAgIHdoaWxlICh0aGlzLmJpdHMubGVuZ3RoICUgOCAhPT0gMCkge1xuICAgICAgdGhpcy5iaXRzLnB1c2gocGFkKTtcbiAgICB9XG4gIH1cbiAgY29weShzcmM6IG51bWJlcltdLCBzdGFydDogbnVtYmVyLCBsZW46IG51bWJlcikge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIHRoaXMuYml0cy5wdXNoKHNyY1tzdGFydCArIGldISk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBCaXRSZWFkZXIge1xuICBwcml2YXRlIF9iaXRzOiBudW1iZXJbXTtcbiAgcG9zID0gMDtcbiAgY29uc3RydWN0b3IoZGF0YTogQnVmZmVyKSB7XG4gICAgdGhpcy5fYml0cyA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgZm9yIChsZXQgYiA9IDc7IGIgPj0gMDsgYi0tKSB7XG4gICAgICAgIHRoaXMuX2JpdHMucHVzaCgoZGF0YVtpXSEgPj4gYikgJiAxKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgZ2V0IGJpdHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2JpdHM7XG4gIH1cbiAgcmVhZChuOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGxldCB2YWwgPSAwO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbjsgaSsrKSB7XG4gICAgICB2YWwgPSAodmFsIDw8IDEpIHwgdGhpcy5fYml0c1t0aGlzLnBvcysrXSE7XG4gICAgfVxuICAgIHJldHVybiB2YWw7XG4gIH1cbiAgcmVhZFVlKCk6IG51bWJlciB7XG4gICAgbGV0IHplcm9zID0gMDtcbiAgICB3aGlsZSAodGhpcy5fYml0c1t0aGlzLnBvc10gPT09IDApIHtcbiAgICAgIHplcm9zKys7XG4gICAgICB0aGlzLnBvcysrO1xuICAgIH1cbiAgICB0aGlzLnBvcysrO1xuICAgIGxldCB2YWwgPSAxO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgemVyb3M7IGkrKykge1xuICAgICAgdmFsID0gKHZhbCA8PCAxKSB8IHRoaXMuX2JpdHNbdGhpcy5wb3MrK10hO1xuICAgIH1cbiAgICByZXR1cm4gdmFsIC0gMTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8xMi5cblxuY29uc3QgTkFMX0hFQURFUl9TSVpFID0gMjtcbmNvbnN0IEFOTkVYX0JfU1RBUlRfQ09ERSA9IEJ1ZmZlci5mcm9tKFsweDAwLCAweDAwLCAweDAwLCAweDAxXSk7XG5cbmV4cG9ydCB7IEFOTkVYX0JfU1RBUlRfQ09ERSwgTkFMX0hFQURFUl9TSVpFIH07XG5cbi8vIEhFVkMgTkFMIHVuaXQgdHlwZXMgKFQtUkVDLUguMjY1IFRhYmxlIDctMSlcbmV4cG9ydCBjb25zdCBOQUxfQkxBX1dfTFAgPSAxNjtcbmV4cG9ydCBjb25zdCBOQUxfSURSX1dfUkFETCA9IDE5O1xuZXhwb3J0IGNvbnN0IE5BTF9JRFJfTl9MUCA9IDIwO1xuZXhwb3J0IGNvbnN0IE5BTF9SU1ZfSVJBUF9WQ0wyMyA9IDIzO1xuZXhwb3J0IGNvbnN0IE5BTF9WUFMgPSAzMjtcbmV4cG9ydCBjb25zdCBOQUxfU1BTID0gMzM7XG5leHBvcnQgY29uc3QgTkFMX1BQUyA9IDM0O1xuZXhwb3J0IGNvbnN0IE5BTF9TRUlfUFJFRklYID0gMzk7XG5leHBvcnQgY29uc3QgTkFMX1NFSV9TVUZGSVggPSA0MDtcblxuZXhwb3J0IGludGVyZmFjZSBOYWxVbml0IHtcbiAgdHlwZTogbnVtYmVyO1xuICBsYXllcklkOiBudW1iZXI7XG4gIGRhdGE6IEJ1ZmZlcjtcbn1cblxuZnVuY3Rpb24gcGFyc2VOYWxUeXBlKGhlYWRlcjA6IG51bWJlciwgaGVhZGVyMTogbnVtYmVyKTogeyB0eXBlOiBudW1iZXI7IGxheWVySWQ6IG51bWJlcjsgdGVtcG9yYWxJZDogbnVtYmVyIH0ge1xuICBjb25zdCB0eXBlID0gKGhlYWRlcjAgPj4gMSkgJiAweDNmO1xuICBjb25zdCBsYXllcklkID0gKChoZWFkZXIwICYgMSkgPDwgNSkgfCAoKGhlYWRlcjEgPj4gMykgJiAweDFmKTtcbiAgY29uc3QgdGVtcG9yYWxJZCA9IGhlYWRlcjEgJiAweDA3O1xuICByZXR1cm4geyB0eXBlLCBsYXllcklkLCB0ZW1wb3JhbElkIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbmNvZGVOYWxIZWFkZXIodHlwZTogbnVtYmVyLCBsYXllcklkOiBudW1iZXIsIHRlbXBvcmFsSWQ6IG51bWJlcik6IFtudW1iZXIsIG51bWJlcl0ge1xuICBjb25zdCBieXRlMCA9ICgodHlwZSAmIDB4M2YpIDw8IDEpIHwgKChsYXllcklkID4+IDUpICYgMSk7XG4gIGNvbnN0IGJ5dGUxID0gKChsYXllcklkICYgMHgxZikgPDwgMykgfCAodGVtcG9yYWxJZCAmIDB4MDcpO1xuICByZXR1cm4gW2J5dGUwLCBieXRlMV07XG59XG5cbi8qKiBTcGxpdCBBbm5leCBCIGJpdHN0cmVhbSBpbnRvIE5BTCB1bml0cy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzcGxpdE5hbFVuaXRzKGJpdHN0cmVhbTogQnVmZmVyKTogTmFsVW5pdFtdIHtcbiAgY29uc3QgbmFsczogTmFsVW5pdFtdID0gW107XG4gIGxldCBpID0gMDtcblxuICB3aGlsZSAoaSA8IGJpdHN0cmVhbS5sZW5ndGgpIHtcbiAgICBsZXQgc2NMZW4gPSAwO1xuICAgIGlmIChpICsgMyA8IGJpdHN0cmVhbS5sZW5ndGggJiYgYml0c3RyZWFtW2ldID09PSAwICYmIGJpdHN0cmVhbVtpICsgMV0gPT09IDAgJiYgYml0c3RyZWFtW2kgKyAyXSA9PT0gMSkge1xuICAgICAgc2NMZW4gPSAzO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICBpICsgNCA8IGJpdHN0cmVhbS5sZW5ndGggJiZcbiAgICAgIGJpdHN0cmVhbVtpXSA9PT0gMCAmJlxuICAgICAgYml0c3RyZWFtW2kgKyAxXSA9PT0gMCAmJlxuICAgICAgYml0c3RyZWFtW2kgKyAyXSA9PT0gMCAmJlxuICAgICAgYml0c3RyZWFtW2kgKyAzXSA9PT0gMVxuICAgICkge1xuICAgICAgc2NMZW4gPSA0O1xuICAgIH0gZWxzZSB7XG4gICAgICBpKys7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCBuYWxTdGFydCA9IGkgKyBzY0xlbjtcbiAgICBpZiAobmFsU3RhcnQgKyBOQUxfSEVBREVSX1NJWkUgPiBiaXRzdHJlYW0ubGVuZ3RoKSB7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBsZXQgbmFsRW5kID0gYml0c3RyZWFtLmxlbmd0aDtcbiAgICBmb3IgKGxldCBqID0gbmFsU3RhcnQgKyBOQUxfSEVBREVSX1NJWkU7IGogPCBiaXRzdHJlYW0ubGVuZ3RoIC0gMjsgaisrKSB7XG4gICAgICBpZiAoXG4gICAgICAgIGJpdHN0cmVhbVtqXSA9PT0gMCAmJlxuICAgICAgICBiaXRzdHJlYW1baiArIDFdID09PSAwICYmXG4gICAgICAgIChiaXRzdHJlYW1baiArIDJdID09PSAxIHx8IChqICsgMyA8IGJpdHN0cmVhbS5sZW5ndGggJiYgYml0c3RyZWFtW2ogKyAyXSA9PT0gMCAmJiBiaXRzdHJlYW1baiArIDNdID09PSAxKSlcbiAgICAgICkge1xuICAgICAgICBuYWxFbmQgPSBqO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCB7IHR5cGUsIGxheWVySWQgfSA9IHBhcnNlTmFsVHlwZShiaXRzdHJlYW1bbmFsU3RhcnRdISwgYml0c3RyZWFtW25hbFN0YXJ0ICsgMV0hKTtcbiAgICBuYWxzLnB1c2goeyB0eXBlLCBsYXllcklkLCBkYXRhOiBiaXRzdHJlYW0uc3ViYXJyYXkobmFsU3RhcnQsIG5hbEVuZCkgfSk7XG4gICAgaSA9IG5hbEVuZDtcbiAgfVxuXG4gIHJldHVybiBuYWxzO1xufVxuXG4vKiogUmV3cml0ZSBudWhfbGF5ZXJfaWQgaW4gYSBOQUwgdW5pdCAocmV0dXJucyBjb3B5KS4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXdyaXRlTmFsTGF5ZXJJZChuYWw6IEJ1ZmZlciwgbGF5ZXJJZDogbnVtYmVyKTogQnVmZmVyIHtcbiAgY29uc3Qgb3V0ID0gQnVmZmVyLmZyb20obmFsKTtcbiAgY29uc3QgeyB0eXBlLCB0ZW1wb3JhbElkIH0gPSBwYXJzZU5hbFR5cGUob3V0WzBdISwgb3V0WzFdISk7XG4gIGNvbnN0IFtiMCwgYjFdID0gZW5jb2RlTmFsSGVhZGVyKHR5cGUsIGxheWVySWQsIHRlbXBvcmFsSWQpO1xuICBvdXRbMF0gPSBiMDtcbiAgb3V0WzFdID0gYjE7XG4gIHJldHVybiBvdXQ7XG59XG5cbi8qKiBSZXdyaXRlIG5hbF91bml0X3R5cGUgaW4gYSBOQUwgdW5pdCAocmV0dXJucyBjb3B5KS4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXdyaXRlTmFsVHlwZShuYWw6IEJ1ZmZlciwgbmV3VHlwZTogbnVtYmVyKTogQnVmZmVyIHtcbiAgY29uc3Qgb3V0ID0gQnVmZmVyLmZyb20obmFsKTtcbiAgY29uc3QgeyBsYXllcklkLCB0ZW1wb3JhbElkIH0gPSBwYXJzZU5hbFR5cGUob3V0WzBdISwgb3V0WzFdISk7XG4gIGNvbnN0IFtiMCwgYjFdID0gZW5jb2RlTmFsSGVhZGVyKG5ld1R5cGUsIGxheWVySWQsIHRlbXBvcmFsSWQpO1xuICBvdXRbMF0gPSBiMDtcbiAgb3V0WzFdID0gYjE7XG4gIHJldHVybiBvdXQ7XG59XG5cbi8qKiBSZW1vdmUgZW11bGF0aW9uIHByZXZlbnRpb24gYnl0ZXMgKDAwIDAwIDAzIOKGkiAwMCAwMCkgZnJvbSBSQlNQLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUVtdWxhdGlvblByZXZlbnRpb24oZGF0YTogQnVmZmVyKTogQnVmZmVyIHtcbiAgY29uc3Qgb3V0OiBudW1iZXJbXSA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoaSArIDIgPCBkYXRhLmxlbmd0aCAmJiBkYXRhW2ldID09PSAwICYmIGRhdGFbaSArIDFdID09PSAwICYmIGRhdGFbaSArIDJdID09PSAzKSB7XG4gICAgICBvdXQucHVzaCgwLCAwKTtcbiAgICAgIGkgKz0gMjtcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0LnB1c2goZGF0YVtpXSEpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gQnVmZmVyLmZyb20ob3V0KTtcbn1cblxuLyoqIEluc2VydCBlbXVsYXRpb24gcHJldmVudGlvbiBieXRlcyAoMDAgMDAgMDMpIGZvciBBbm5leCBCIGNvbXBsaWFuY2UuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkRW11bGF0aW9uUHJldmVudGlvbihuYWw6IEJ1ZmZlcik6IEJ1ZmZlciB7XG4gIGNvbnN0IG91dDogbnVtYmVyW10gPSBbXTtcbiAgb3V0LnB1c2gobmFsWzBdISwgbmFsWzFdISk7XG4gIGxldCB6ZXJvcyA9IDA7XG4gIGZvciAobGV0IGkgPSAyOyBpIDwgbmFsLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKHplcm9zID09PSAyICYmIG5hbFtpXSEgPD0gMykge1xuICAgICAgb3V0LnB1c2goMyk7XG4gICAgICB6ZXJvcyA9IDA7XG4gICAgfVxuICAgIGlmIChuYWxbaV0gPT09IDApIHtcbiAgICAgIHplcm9zKys7XG4gICAgfSBlbHNlIHtcbiAgICAgIHplcm9zID0gMDtcbiAgICB9XG4gICAgb3V0LnB1c2gobmFsW2ldISk7XG4gIH1cbiAgcmV0dXJuIEJ1ZmZlci5mcm9tKG91dCk7XG59XG4iLCIvLyBDb25mb3JtIE5WRU5DIG91dHB1dCB0byBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vYXYtZm91bmRhdGlvbi9IRVZDLVZpZGVvLXdpdGgtQWxwaGEtSW50ZXJvcGVyYWJpbGl0eS1Qcm9maWxlLnBkZlxuXG5pbXBvcnQgeyBCaXRSZWFkZXIsIEJpdFdyaXRlciwgcGFja0JpdHMgfSBmcm9tIFwiLi9iaXRcIjtcbmltcG9ydCB7XG4gIEFOTkVYX0JfU1RBUlRfQ09ERSxcbiAgYWRkRW11bGF0aW9uUHJldmVudGlvbixcbiAgTkFMX0JMQV9XX0xQLFxuICBOQUxfUlNWX0lSQVBfVkNMMjMsXG4gIE5BTF9TUFMsXG4gIE5BTF9WUFMsXG4gIHJlbW92ZUVtdWxhdGlvblByZXZlbnRpb24sXG4gIHNwbGl0TmFsVW5pdHMsXG59IGZyb20gXCIuL25hbFwiO1xuaW1wb3J0IHR5cGUgeyBOdmVuY0hldmNDb25maWcgfSBmcm9tIFwiLi9wYXJzZXJcIjtcblxuLy8gUFRMIGJpdCBvZmZzZXRzIHdpdGhpbiBlbXVsYXRpb24tcHJldmVudGlvbi1zdHJpcHBlZCBOQUwgKE5BTCBoZWFkZXIgaW5jbHVkZWQpLlxuY29uc3QgVlBTX1BUTF9CSVQgPSA0ODsgLy8gMTYgKE5BTCBoZHIpICsgMzIgKFZQUyBwcmVmaXgpXG5jb25zdCBTUFNfUFRMX0JJVCA9IDI0OyAvLyAxNiAoTkFMIGhkcikgKyA4IChTUFMgcHJlZml4KVxuY29uc3QgUFRMX1RJRVJfQklUID0gMjtcbmNvbnN0IFBUTF9DT01QQVQyX0JJVCA9IDEwOyAvLyBwcm9maWxlX3NwYWNlKDIpICsgdGllcigxKSArIGlkYyg1KSArIGNvbXBhdFswLDFdKDIpXG5jb25zdCBTTElDRV9UWVBFX0IgPSAwO1xuY29uc3QgU0xJQ0VfVFlQRV9QID0gMTtcblxuZnVuY3Rpb24gc2V0Qml0KGJ1ZjogQnVmZmVyLCBiaXRPZmZzZXQ6IG51bWJlciwgdmFsdWU6IDAgfCAxKTogdm9pZCB7XG4gIGNvbnN0IGJ5dGUgPSBiaXRPZmZzZXQgPj4gMztcbiAgY29uc3QgbWFzayA9IDEgPDwgKDcgLSAoYml0T2Zmc2V0ICYgNykpO1xuICBjb25zdCBjdXIgPSBidWZbYnl0ZV0gPz8gMDtcbiAgYnVmW2J5dGVdID0gdmFsdWUgPyBjdXIgfCBtYXNrIDogY3VyICYgfm1hc2s7XG59XG5cbmZ1bmN0aW9uIHBhdGNoUHRsKG5hbERhdGE6IEJ1ZmZlciwgcHRsU3RhcnRCaXQ6IG51bWJlcik6IEJ1ZmZlciB7XG4gIGNvbnN0IHJic3AgPSByZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uKG5hbERhdGEpO1xuICBzZXRCaXQocmJzcCwgcHRsU3RhcnRCaXQgKyBQVExfVElFUl9CSVQsIDApO1xuICBzZXRCaXQocmJzcCwgcHRsU3RhcnRCaXQgKyBQVExfQ09NUEFUMl9CSVQsIDEpO1xuICByZXR1cm4gYWRkRW11bGF0aW9uUHJldmVudGlvbihyYnNwKTtcbn1cblxuLyoqIFBhdGNoIGV2ZXJ5IFZQUy9TUFMgTkFMIGluIGFuIEFubmV4IEIgYml0c3RyZWFtIHNvIFBUTCBtYXRjaGVzIEFwcGxlL3gyNjUuICovXG5leHBvcnQgZnVuY3Rpb24gcGF0Y2hIZXZjQWxwaGFQdGwoYml0c3RyZWFtOiBCdWZmZXIpOiBCdWZmZXIge1xuICBjb25zdCBuYWxzID0gc3BsaXROYWxVbml0cyhiaXRzdHJlYW0pO1xuICBpZiAobmFscy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gYml0c3RyZWFtO1xuICB9XG4gIGNvbnN0IGNodW5rczogQnVmZmVyW10gPSBbXTtcbiAgZm9yIChjb25zdCBuYWwgb2YgbmFscykge1xuICAgIGxldCBkYXRhID0gbmFsLmRhdGE7XG4gICAgaWYgKG5hbC50eXBlID09PSBOQUxfVlBTKSB7XG4gICAgICBkYXRhID0gcGF0Y2hQdGwobmFsLmRhdGEsIFZQU19QVExfQklUKTtcbiAgICB9IGVsc2UgaWYgKG5hbC50eXBlID09PSBOQUxfU1BTKSB7XG4gICAgICBkYXRhID0gcGF0Y2hQdGwobmFsLmRhdGEsIFNQU19QVExfQklUKTtcbiAgICB9XG4gICAgY2h1bmtzLnB1c2goQU5ORVhfQl9TVEFSVF9DT0RFLCBkYXRhKTtcbiAgfVxuICByZXR1cm4gQnVmZmVyLmNvbmNhdChjaHVua3MpO1xufVxuXG4vLyDilIDilIDilIAgdWUodikgcmV3cml0ZSBoZWxwZXJzIChTUFMvUFBTIOKAlCBSQlNQIGNhbiBncm93IGZyZWVseSwgbm8gQ0FCQUMgdHJhaWxpbmcpIOKUgOKUgFxuXG5mdW5jdGlvbiByZXdyaXRlT25lVWUobmFsSW46IEJ1ZmZlciwgYml0T2Zmc2V0OiBudW1iZXIsIG5ld1ZhbDogbnVtYmVyKTogQnVmZmVyIHtcbiAgY29uc3QgcmJzcCA9IHJlbW92ZUVtdWxhdGlvblByZXZlbnRpb24obmFsSW4pO1xuICBjb25zdCBiciA9IG5ldyBCaXRSZWFkZXIocmJzcCk7XG4gIGNvbnN0IGJ3ID0gbmV3IEJpdFdyaXRlcigpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGJpdE9mZnNldDsgaSsrKSB7XG4gICAgYncuYml0cy5wdXNoKGJyLnJlYWQoMSkpO1xuICB9XG4gIGJyLnJlYWRVZSgpO1xuICBidy51ZShuZXdWYWwpO1xuICB3aGlsZSAoYnIucG9zIDwgYnIuYml0cy5sZW5ndGgpIHtcbiAgICBidy5iaXRzLnB1c2goYnIucmVhZCgxKSk7XG4gIH1cbiAgd2hpbGUgKGJ3LmJpdHMubGVuZ3RoICUgOCAhPT0gMCkge1xuICAgIGJ3LmJpdHMucHVzaCgwKTtcbiAgfVxuICByZXR1cm4gYWRkRW11bGF0aW9uUHJldmVudGlvbihwYWNrQml0cyhidy5iaXRzKSk7XG59XG5cbmZ1bmN0aW9uIHJld3JpdGVUd29VZShuYWxJbjogQnVmZmVyLCBiaXRPZmZzZXQ6IG51bWJlciwgbmV3VmFsMTogbnVtYmVyLCBuZXdWYWwyOiBudW1iZXIpOiBCdWZmZXIge1xuICBjb25zdCByYnNwID0gcmVtb3ZlRW11bGF0aW9uUHJldmVudGlvbihuYWxJbik7XG4gIGNvbnN0IGJyID0gbmV3IEJpdFJlYWRlcihyYnNwKTtcbiAgY29uc3QgYncgPSBuZXcgQml0V3JpdGVyKCk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYml0T2Zmc2V0OyBpKyspIHtcbiAgICBidy5iaXRzLnB1c2goYnIucmVhZCgxKSk7XG4gIH1cbiAgYnIucmVhZFVlKCk7XG4gIGJyLnJlYWRVZSgpO1xuICBidy51ZShuZXdWYWwxKTtcbiAgYncudWUobmV3VmFsMik7XG4gIHdoaWxlIChici5wb3MgPCBici5iaXRzLmxlbmd0aCkge1xuICAgIGJ3LmJpdHMucHVzaChici5yZWFkKDEpKTtcbiAgfVxuICB3aGlsZSAoYncuYml0cy5sZW5ndGggJSA4ICE9PSAwKSB7XG4gICAgYncuYml0cy5wdXNoKDApO1xuICB9XG4gIHJldHVybiBhZGRFbXVsYXRpb25QcmV2ZW50aW9uKHBhY2tCaXRzKGJ3LmJpdHMpKTtcbn1cblxuLyoqIEFscGhhIFNQUzogc3BzX3NlcV9wYXJhbWV0ZXJfc2V0X2lkIDAg4oaSIDEuICovXG5leHBvcnQgZnVuY3Rpb24gcmV3cml0ZUFscGhhU3BzKHNwczogQnVmZmVyKTogQnVmZmVyIHtcbiAgY29uc3QgU1BTX1NFUV9JRF9CSVQgPSBTUFNfUFRMX0JJVCArIDk2OyAvLyBQVEwgaXMgOTYgYml0cyBmb3Igb3VyIHByb2ZpbGUgY29uZmlnXG4gIHJldHVybiByZXdyaXRlT25lVWUoc3BzLCBTUFNfU0VRX0lEX0JJVCwgMSk7XG59XG5cbi8qKiBBbHBoYSBQUFM6IHBwc19waWNfcGFyYW1ldGVyX3NldF9pZCAwIOKGkiAxLCBwcHNfc2VxX3BhcmFtZXRlcl9zZXRfaWQgMCDihpIgMS4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXdyaXRlQWxwaGFQcHMocHBzOiBCdWZmZXIpOiBCdWZmZXIge1xuICByZXR1cm4gcmV3cml0ZVR3b1VlKHBwcywgMTYgLyogYWZ0ZXIgTkFMIGhlYWRlciAqLywgMSwgMSk7XG59XG5cbi8vIOKUgOKUgOKUgCBTbGljZSBoZWFkZXIgcmV3cml0ZSAobXVzdCBwcmVzZXJ2ZSBDQUJBQyBieXRlIGFsaWdubWVudCkg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmZ1bmN0aW9uIHJlYWRTZShicjogQml0UmVhZGVyKTogbnVtYmVyIHtcbiAgY29uc3QgdWUgPSBici5yZWFkVWUoKTtcbiAgcmV0dXJuIHVlICYgMSA/ICh1ZSArIDEpID4+IDEgOiAtKHVlID4+IDEpO1xufVxuXG4vLyBJbmxpbmUgc3RfcmVmX3BpY19zZXQgKHNwc19mbGFnPTApOyBzdFJwc0lkeCA9IG51bV9zaG9ydF90ZXJtX3JlZl9waWNfc2V0cyDihpIgaW50ZXIgcHJlZGljdGlvbiBtYXkgdXNlIHByZXYgc2V0LlxuZnVuY3Rpb24gcGFyc2VJbmxpbmVTdFJlZlBpY1NldChicjogQml0UmVhZGVyLCBudW1EZWx0YVBvY3NTZXQwOiBudW1iZXIpOiB2b2lkIHtcbiAgY29uc3QgaW50ZXJGbGFnID0gYnIucmVhZCgxKTsgLy8gaW50ZXJfcmVmX3BpY19zZXRfcHJlZGljdGlvbl9mbGFnXG4gIGlmIChpbnRlckZsYWcpIHtcbiAgICBjb25zdCBkZWx0YUlkeE1pbnVzMSA9IGJyLnJlYWRVZSgpOyAvLyBzdFJwc0lkeCA9PSBudW1fc2hvcnRfdGVybV9yZWZfcGljX3NldHMg4oaSIHByZXNlbnRcbiAgICBpZiAoZGVsdGFJZHhNaW51czEgIT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgYXBwbGVfYWxwaGE6IHVuZXhwZWN0ZWQgZGVsdGFfaWR4X21pbnVzMT0ke2RlbHRhSWR4TWludXMxfWApO1xuICAgIH1cbiAgICBici5yZWFkKDEpOyAvLyBkZWx0YV9ycHNfc2lnblxuICAgIGJyLnJlYWRVZSgpOyAvLyBhYnNfZGVsdGFfcnBzX21pbnVzMVxuICAgIGZvciAobGV0IGogPSAwOyBqIDw9IG51bURlbHRhUG9jc1NldDA7IGorKykge1xuICAgICAgY29uc3QgdXNlZCA9IGJyLnJlYWQoMSk7XG4gICAgICBpZiAoIXVzZWQpIHtcbiAgICAgICAgYnIucmVhZCgxKTsgLy8gdXNlX2RlbHRhX2ZsYWdcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgbnVtTmVnID0gYnIucmVhZFVlKCk7XG4gICAgY29uc3QgbnVtUG9zID0gYnIucmVhZFVlKCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1OZWc7IGkrKykge1xuICAgICAgYnIucmVhZFVlKCk7XG4gICAgICBici5yZWFkKDEpO1xuICAgIH1cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bVBvczsgaSsrKSB7XG4gICAgICBici5yZWFkVWUoKTtcbiAgICAgIGJyLnJlYWQoMSk7XG4gICAgfVxuICB9XG59XG5cbi8qKiBQYXJzZSBzbGljZV9zZWdtZW50X2hlYWRlciB1cCB0byBieXRlX2FsaWdubWVudC4gUmV0dXJucyBiaXQgcG9zaXRpb24gQiAoZW5kIG9mIGhlYWRlciBjb250ZW50KS4gKi9cbmZ1bmN0aW9uIHBhcnNlSGVhZGVyVG9BbGlnbm1lbnQoYnI6IEJpdFJlYWRlciwgbmFsVHlwZTogbnVtYmVyLCBjZmc6IE52ZW5jSGV2Y0NvbmZpZyk6IG51bWJlciB7XG4gIGJyLnJlYWQoMTYpOyAvLyBza2lwIE5BTCBoZWFkZXJcbiAgaWYgKGJyLnJlYWQoMSkgIT09IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJhcHBsZV9hbHBoYTogZXhwZWN0ZWQgZmlyc3Rfc2xpY2Vfc2VnbWVudF9pbl9waWNfZmxhZz0xXCIpO1xuICB9XG4gIGNvbnN0IGlzSXJhcCA9IG5hbFR5cGUgPj0gTkFMX0JMQV9XX0xQICYmIG5hbFR5cGUgPD0gTkFMX1JTVl9JUkFQX1ZDTDIzO1xuICBpZiAoaXNJcmFwKSB7XG4gICAgYnIucmVhZCgxKTsgLy8gbm9fb3V0cHV0X29mX3ByaW9yX3BpY3NfZmxhZ1xuICB9XG4gIGJyLnJlYWRVZSgpOyAvLyBzbGljZV9waWNfcGFyYW1ldGVyX3NldF9pZFxuICBjb25zdCBzbGljZVR5cGUgPSBici5yZWFkVWUoKTtcbiAgaWYgKCFpc0lyYXApIHtcbiAgICBici5yZWFkKGNmZy5sb2cyTWF4UG9jTHNiKTsgLy8gc2xpY2VfcGljX29yZGVyX2NudF9sc2JcbiAgICBjb25zdCBzdFJlZlBpY1NldFNwc0ZsYWcgPSBici5yZWFkKDEpO1xuICAgIGlmICghc3RSZWZQaWNTZXRTcHNGbGFnKSB7XG4gICAgICBwYXJzZUlubGluZVN0UmVmUGljU2V0KGJyLCBjZmcubnVtRGVsdGFQb2NzU2V0MCk7XG4gICAgfSBlbHNlIGlmIChjZmcubnVtU2hvcnRUZXJtUmVmUGljU2V0cyA+IDEpIHtcbiAgICAgIGJyLnJlYWQoTWF0aC5jZWlsKE1hdGgubG9nMihjZmcubnVtU2hvcnRUZXJtUmVmUGljU2V0cykpKTtcbiAgICB9XG4gICAgaWYgKGNmZy5sb25nVGVybVJlZlBpY3NQcmVzZW50KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJhcHBsZV9hbHBoYTogbG9uZ190ZXJtX3JlZl9waWNzIHBhdGggdW5pbXBsZW1lbnRlZFwiKTtcbiAgICB9XG4gICAgaWYgKGNmZy5zcHNUZW1wb3JhbE12cEVuYWJsZWQpIHtcbiAgICAgIGJyLnJlYWQoMSk7IC8vIHNsaWNlX3RlbXBvcmFsX212cF9lbmFibGVkX2ZsYWdcbiAgICB9XG4gIH1cbiAgaWYgKGNmZy5zYW9FbmFibGVkKSB7XG4gICAgYnIucmVhZCgxKTsgLy8gc2xpY2Vfc2FvX2x1bWFfZmxhZ1xuICAgIGJyLnJlYWQoMSk7IC8vIHNsaWNlX3Nhb19jaHJvbWFfZmxhZ1xuICB9XG4gIGlmIChzbGljZVR5cGUgPT09IFNMSUNFX1RZUEVfUCB8fCBzbGljZVR5cGUgPT09IFNMSUNFX1RZUEVfQikge1xuICAgIGNvbnN0IG92ZXJyaWRlRmxhZyA9IGJyLnJlYWQoMSk7XG4gICAgaWYgKG92ZXJyaWRlRmxhZykge1xuICAgICAgYnIucmVhZFVlKCk7XG4gICAgICBpZiAoc2xpY2VUeXBlID09PSBTTElDRV9UWVBFX0IpIHtcbiAgICAgICAgYnIucmVhZFVlKCk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChzbGljZVR5cGUgPT09IFNMSUNFX1RZUEVfQikge1xuICAgICAgYnIucmVhZCgxKTsgLy8gbXZkX2wxX3plcm9fZmxhZ1xuICAgIH1cbiAgICBpZiAoY2ZnLmNhYmFjSW5pdFByZXNlbnQpIHtcbiAgICAgIGJyLnJlYWQoMSk7IC8vIGNhYmFjX2luaXRfZmxhZ1xuICAgIH1cbiAgICBici5yZWFkVWUoKTsgLy8gZml2ZV9taW51c19tYXhfbnVtX21lcmdlX2NhbmRcbiAgfVxuICByZWFkU2UoYnIpOyAvLyBzbGljZV9xcF9kZWx0YVxuICBpZiAoY2ZnLnBwc0hhc0xvb3BGaWx0ZXJBY3Jvc3NTbGljZXNGbGFnKSB7XG4gICAgYnIucmVhZCgxKTsgLy8gc2xpY2VfbG9vcF9maWx0ZXJfYWNyb3NzX3NsaWNlc19lbmFibGVkX2ZsYWdcbiAgfVxuICByZXR1cm4gYnIucG9zO1xufVxuXG4vKipcbiAqIFJld3JpdGUgYWxwaGEgc2xpY2UgaGVhZGVyOiBzbGljZV9waWNfcGFyYW1ldGVyX3NldF9pZCAwIOKGkiAxLlxuICogVGhlICsyLWJpdCBzaGlmdCBpcyBhYnNvcmJlZCBieSBlbWl0dGluZyBhIGZyZXNoIGJ5dGVfYWxpZ25tZW50IHRoZW4gYXBwZW5kaW5nIHRoZVxuICogb3JpZ2luYWwgQ0FCQUMgc2xpY2Vfc2VnbWVudF9kYXRhIGJ5dGVzIHZlcmJhdGltLiBDQUJBQyBieXRlIGJvdW5kYXJ5IGlzIHByZXNlcnZlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJld3JpdGVBbHBoYVNsaWNlSGVhZGVyKHNsaWNlOiBCdWZmZXIsIG5hbFR5cGU6IG51bWJlciwgY2ZnOiBOdmVuY0hldmNDb25maWcpOiBCdWZmZXIge1xuICBjb25zdCByYnNwID0gcmVtb3ZlRW11bGF0aW9uUHJldmVudGlvbihzbGljZSk7XG4gIGNvbnN0IGJyID0gbmV3IEJpdFJlYWRlcihyYnNwKTtcblxuICBjb25zdCBwcm9iZSA9IG5ldyBCaXRSZWFkZXIocmJzcCk7XG4gIGNvbnN0IEIgPSBwYXJzZUhlYWRlclRvQWxpZ25tZW50KHByb2JlLCBuYWxUeXBlLCBjZmcpO1xuICBjb25zdCBvbGRBbGlnbkJpdHMgPSBCICUgOCA9PT0gMCA/IDggOiA4IC0gKEIgJSA4KTtcbiAgY29uc3Qgc2xpY2VEYXRhQnl0ZU9mZnNldCA9IChCICsgb2xkQWxpZ25CaXRzKSAvIDg7XG5cbiAgY29uc3QgYncgPSBuZXcgQml0V3JpdGVyKCk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgMTY7IGkrKykge1xuICAgIGJ3LmJpdHMucHVzaChici5yZWFkKDEpKTsgLy8gTkFMIGhlYWRlclxuICB9XG4gIGJ3LmJpdHMucHVzaChici5yZWFkKDEpKTsgLy8gZmlyc3Rfc2xpY2Vfc2VnbWVudF9pbl9waWNfZmxhZ1xuICBjb25zdCBpc0lyYXAgPSBuYWxUeXBlID49IE5BTF9CTEFfV19MUCAmJiBuYWxUeXBlIDw9IE5BTF9SU1ZfSVJBUF9WQ0wyMztcbiAgaWYgKGlzSXJhcCkge1xuICAgIGJ3LmJpdHMucHVzaChici5yZWFkKDEpKTsgLy8gbm9fb3V0cHV0X29mX3ByaW9yX3BpY3NfZmxhZ1xuICB9XG5cbiAgYnIucmVhZFVlKCk7IC8vIGRpc2NhcmQgb2xkIHNsaWNlX3BpY19wYXJhbWV0ZXJfc2V0X2lkXG4gIGJ3LnVlKDEpOyAvLyBuZXcgc2xpY2VfcGljX3BhcmFtZXRlcl9zZXRfaWRcblxuICB3aGlsZSAoYnIucG9zIDwgQikge1xuICAgIGJ3LmJpdHMucHVzaChici5yZWFkKDEpKTsgLy8gY29weSByZXN0IG9mIGhlYWRlciBiaXRzXG4gIH1cblxuICBidy5iaXRzLnB1c2goMSk7IC8vIGJ5dGVfYWxpZ25tZW50OiByYnNwX2FsaWdubWVudF9iaXRfb25lXG4gIHdoaWxlIChidy5iaXRzLmxlbmd0aCAlIDggIT09IDApIHtcbiAgICBidy5iaXRzLnB1c2goMCk7XG4gIH1cblxuICByZXR1cm4gYWRkRW11bGF0aW9uUHJldmVudGlvbihCdWZmZXIuY29uY2F0KFtwYWNrQml0cyhidy5iaXRzKSwgcmJzcC5zdWJhcnJheShzbGljZURhdGFCeXRlT2Zmc2V0KV0pKTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMTMuXG5cbmltcG9ydCB7IEJpdFJlYWRlciwgQml0V3JpdGVyLCBwYWNrQml0cyB9IGZyb20gXCIuL2JpdFwiO1xuaW1wb3J0IHsgYWRkRW11bGF0aW9uUHJldmVudGlvbiwgcmVtb3ZlRW11bGF0aW9uUHJldmVudGlvbiB9IGZyb20gXCIuL25hbFwiO1xuXG5pbnRlcmZhY2UgUGFyc2VkUFRMIHtcbiAgcHRsU3RhcnQ6IG51bWJlcjtcbiAgcHRsRW5kOiBudW1iZXI7XG4gIHB0bEJpdHM6IG51bWJlcltdO1xuICBtYXhTdWJMYXllcnNNaW51czE6IG51bWJlcjtcbn1cblxuZnVuY3Rpb24gZXh0cmFjdFBUTCh2cHNEYXRhOiBCdWZmZXIpOiBQYXJzZWRQVEwgfCB1bmRlZmluZWQge1xuICBjb25zdCBiciA9IG5ldyBCaXRSZWFkZXIocmVtb3ZlRW11bGF0aW9uUHJldmVudGlvbih2cHNEYXRhKSk7XG4gIGJyLnJlYWQoMTYpOyAvLyBOQUwgaGVhZGVyXG4gIGJyLnJlYWQoNCk7IC8vIHZwc19pZFxuICBici5yZWFkKDIpOyAvLyBiYXNlX2xheWVyX2ludGVybmFsICsgYXZhaWxhYmxlXG4gIGlmIChici5yZWFkKDYpID4gMCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7IC8vIGFscmVhZHkgbXVsdGktbGF5ZXJcbiAgfVxuICBjb25zdCBtYXhTdWJMYXllcnNNaW51czEgPSBici5yZWFkKDMpO1xuICBici5yZWFkKDEgKyAxNik7IC8vIHRlbXBvcmFsX25lc3RpbmcgKyByZXNlcnZlZFxuXG4gIGNvbnN0IHB0bFN0YXJ0ID0gYnIucG9zO1xuICBici5yZWFkKDk2KTsgLy8gZ2VuZXJhbCBQVEwgKHByb2ZpbGVfc3BhY2UgKyB0aWVyICsgaWRjICsgY29tcGF0ICsgY29uc3RyYWludHMgKyBsZXZlbClcbiAgaWYgKG1heFN1YkxheWVyc01pbnVzMSA+IDApIHtcbiAgICBici5yZWFkKG1heFN1YkxheWVyc01pbnVzMSAqIDIgKyAoOCAtIG1heFN1YkxheWVyc01pbnVzMSkgKiAyKTtcbiAgfVxuICByZXR1cm4geyBwdGxTdGFydCwgcHRsRW5kOiBici5wb3MsIHB0bEJpdHM6IGJyLmJpdHMsIG1heFN1YkxheWVyc01pbnVzMSB9O1xufVxuXG4vKiogV3JpdGUgYmFzZSBWUFMgZmllbGRzIGZvciAyLWxheWVyIGFscGhhLiAqL1xuZnVuY3Rpb24gd3JpdGVCYXNlVlBTKGJ3OiBCaXRXcml0ZXIsIHB0bDogUGFyc2VkUFRMKSB7XG4gIGJ3LncoMHg0MDAxLCAxNik7IC8vIE5BTCBoZWFkZXJcbiAgYncudygwLCA0KTsgLy8gdnBzX2lkXG4gIGJ3LmZsYWcoMSk7IC8vIGJhc2VfbGF5ZXJfaW50ZXJuYWxcbiAgYncuZmxhZygxKTsgLy8gYmFzZV9sYXllcl9hdmFpbGFibGVcbiAgYncudygxLCA2KTsgLy8gbWF4X2xheWVyc19taW51czEgPSAxXG4gIGJ3LncocHRsLm1heFN1YkxheWVyc01pbnVzMSwgMyk7XG4gIC8vIHRlbXBvcmFsX25lc3Rpbmc6IHRydWUgd2hlbiBzaW5nbGUgc3ViLWxheWVyIChhbGwgcmVmcyBsYXllciAwKVxuICBidy5mbGFnKHB0bC5tYXhTdWJMYXllcnNNaW51czEgPT09IDApO1xuICBidy53KDB4ZmZmZiwgMTYpOyAvLyByZXNlcnZlZFxuICBidy5jb3B5KHB0bC5wdGxCaXRzLCBwdGwucHRsU3RhcnQsIHB0bC5wdGxFbmQgLSBwdGwucHRsU3RhcnQpO1xuXG4gIGJ3LmZsYWcoMSk7IC8vIHN1Yl9sYXllcl9vcmRlcmluZ19pbmZvX3ByZXNlbnRcbiAgZm9yIChsZXQgaSA9IDA7IGkgPD0gcHRsLm1heFN1YkxheWVyc01pbnVzMTsgaSsrKSB7XG4gICAgYncudWUoNCk7IC8vIG1heERlY1BpY0J1ZmZlcmluZyAtIDFcbiAgICBidy51ZSgyKTsgLy8gbnVtUmVvcmRlclBpY3NcbiAgICBidy51ZSg0KTsgLy8gbWF4TGF0ZW5jeUluY3JlYXNlICsgMVxuICB9XG5cbiAgYncudygxLCA2KTsgLy8gbWF4X251aF9sYXllcl9pZCA9IDFcbiAgYncudWUoMSk7IC8vIG51bV9sYXllcl9zZXRzX21pbnVzMSA9IDFcbiAgYncuZmxhZygxKTsgLy8gbGF5ZXJfaWRfaW5jbHVkZWRbMV1bMF1cbiAgYncuZmxhZygxKTsgLy8gbGF5ZXJfaWRfaW5jbHVkZWRbMV1bMV1cbiAgYncuZmxhZygwKTsgLy8gdGltaW5nX2luZm9fcHJlc2VudFxuICBidy5mbGFnKDEpOyAvLyB2cHNfZXh0ZW5zaW9uX2ZsYWdcbiAgYncuYWxpZ24oMSk7IC8vIGV4dGVuc2lvbiBhbGlnbm1lbnQgYml0cyA9IDFcbn1cblxuLyoqIFdyaXRlIFZQUyBleHRlbnNpb24gbWF0Y2hpbmcgeDI2NSA0LjEgRU5BQkxFX0FMUEhBLiAqL1xuZnVuY3Rpb24gd3JpdGVWUFNFeHRlbnNpb24oYnc6IEJpdFdyaXRlciwgcHRsOiBQYXJzZWRQVEwsIHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKSB7XG4gIC8vIEV4dGVuc2lvbiBQVEw6IGxldmVsX2lkYyBvbmx5IChwcm9maWxlUHJlc2VudEZsYWc9MClcbiAgYncuY29weShwdGwucHRsQml0cywgcHRsLnB0bEVuZCAtIDgsIDgpO1xuICBpZiAocHRsLm1heFN1YkxheWVyc01pbnVzMSA+IDApIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHB0bC5tYXhTdWJMYXllcnNNaW51czE7IGkrKykge1xuICAgICAgYncudygwLCAyKTtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IHB0bC5tYXhTdWJMYXllcnNNaW51czE7IGkgPCA4OyBpKyspIHtcbiAgICAgIGJ3LncoMCwgMik7XG4gICAgfVxuICB9XG5cbiAgYncuZmxhZygwKTsgLy8gc3BsaXR0aW5nX2ZsYWdcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCAxNjsgaSsrKSB7XG4gICAgYncuZmxhZyhpID09PSAyIHx8IGkgPT09IDMpOyAvLyBzY2FsYWJpbGl0eTogc3BhdGlhbCArIGF1eFxuICB9XG4gIGJ3LncoMCwgMyk7IC8vIGRpbWVuc2lvbl9pZF9sZW5bMF0gPSAxXG4gIGJ3LncoMCwgMyk7IC8vIGRpbWVuc2lvbl9pZF9sZW5bMV0gPSAxXG4gIGJ3LmZsYWcoMSk7IC8vIG51aF9sYXllcl9pZF9wcmVzZW50XG4gIGJ3LncoMSwgNik7IC8vIGxheWVyX2lkX2luX251aFsxXSA9IDFcbiAgYncudygxLCAxKTsgLy8gZGltZW5zaW9uX2lkWzFdWzBdID0gMVxuICBidy53KDEsIDEpOyAvLyBkaW1lbnNpb25faWRbMV1bMV0gPSBBVVhfQUxQSEFcbiAgYncudygwLCA0KTsgLy8gdmlld19pZF9sZW4gPSAwXG5cbiAgYncuZmxhZygwKTsgLy8gZGlyZWN0X2RlcGVuZGVuY3lfZmxhZ1sxXVswXVxuICBidy51ZSgwKTsgLy8gbnVtX2FkZF9sYXllcl9zZXRzXG4gIGJ3LmZsYWcoMCk7IC8vIHN1Yl9sYXllcnNfbWF4X21pbnVzMV9wcmVzZW50XG4gIGJ3LmZsYWcoMCk7IC8vIG1heF90aWRfcmVmX3ByZXNlbnRcbiAgYncuZmxhZygwKTsgLy8gZGVmYXVsdF9yZWZfbGF5ZXJzX2FjdGl2ZVxuXG4gIC8vIEZGbXBlZyBsb29wcyBmcm9tIGluZGV4IDIgdG8gbmJfcHRsLTEsIHNvIG5wdGxfbTE9MiDihpIgMSBlbnRyeSBhdCBpbmRleCAyXG4gIGJ3LnVlKDIpOyAvLyB2cHNfbnVtX3Byb2ZpbGVfdGllcl9sZXZlbF9taW51czFcbiAgYncuZmxhZygxKTsgLy8gcHJvZmlsZV9wcmVzZW50X2ZsYWdbMl1cbiAgYncuY29weShwdGwucHRsQml0cywgcHRsLnB0bFN0YXJ0LCBwdGwucHRsRW5kIC0gcHRsLnB0bFN0YXJ0KTtcblxuICBidy51ZSgwKTsgLy8gbnVtX2FkZF9vbHNzXG4gIGJ3LncoMCwgMik7IC8vIGRlZmF1bHRfb3V0cHV0X2xheWVyX2lkY1xuICBidy53KDEsIDIpOyAvLyBwdGxfaWR4WzFdWzBdID0gMSAoY2VpbF9sb2cyKDMpID0gMiBiaXRzKVxuICBidy53KDIsIDIpOyAvLyBwdGxfaWR4WzFdWzFdID0gMlxuXG4gIGJ3LnVlKDApOyAvLyB2cHNfbnVtX3JlcF9mb3JtYXRzX21pbnVzMVxuICBidy53KHdpZHRoLCAxNik7XG4gIGJ3LncoaGVpZ2h0LCAxNik7XG4gIGJ3LmZsYWcoMSk7IC8vIGNocm9tYV9hbmRfYml0X2RlcHRoX3Zwc19wcmVzZW50XG4gIGJ3LncoMSwgMik7IC8vIGNocm9tYV9mb3JtYXRfaWRjID0gNDoyOjBcbiAgYncudygwLCA0KTsgLy8gYml0X2RlcHRoX2x1bWFfbWludXM4XG4gIGJ3LncoMCwgNCk7IC8vIGJpdF9kZXB0aF9jaHJvbWFfbWludXM4XG4gIGJ3LmZsYWcoMCk7IC8vIGNvbmZvcm1hbmNlX3dpbmRvd192cHNfZmxhZ1xuXG4gIGJ3LmZsYWcoMSk7IC8vIG1heF9vbmVfYWN0aXZlX3JlZl9sYXllclxuICBidy5mbGFnKDApOyAvLyBwb2NfbHNiX2FsaWduZWRcbiAgYncuZmxhZygxKTsgLy8gcG9jX2xzYl9ub3RfcHJlc2VudFxuXG4gIC8vIERQQiBmb3IgT0xTIDEgKDIgbGF5ZXJzLCAxIHN1Yi1sYXllcilcbiAgYncuZmxhZygwKTsgLy8gc3ViX2xheWVyX2ZsYWdfaW5mb19wcmVzZW50XG4gIGJ3LnVlKDApOyAvLyBtYXhfZGVjX3BpY19idWZmZXJpbmcgKGxheWVyIDApXG4gIGJ3LnVlKDApOyAvLyBtYXhfZGVjX3BpY19idWZmZXJpbmcgKGxheWVyIDEpXG4gIGJ3LnVlKDApOyAvLyBtYXhfbnVtX3Jlb3JkZXJfcGljc1xuICBidy51ZSgwKTsgLy8gbWF4X2xhdGVuY3lfaW5jcmVhc2VcblxuICBidy51ZSgwKTsgLy8gZGlyZWN0X2RlcF90eXBlX2xlbl9taW51czJcbiAgYncuZmxhZygwKTsgLy8gZGVmYXVsdF9kaXJlY3RfZGVwZW5kZW5jeV9mbGFnXG4gIGJ3LnVlKDApOyAvLyBub25fdnVpX2V4dGVuc2lvbl9sZW5ndGhcbiAgYncuZmxhZygwKTsgLy8gdnBzX3Z1aV9wcmVzZW50XG4gIGJ3LmZsYWcoMCk7IC8vIHZwc19leHRlbnNpb24yX2ZsYWdcbn1cblxuLyoqXG4gKiBCdWlsZCBhIGNvbXBsZXRlIGFscGhhIFZQUyBmcm9tIHNjcmF0Y2gsIHVzaW5nIHRoZSBvcmlnaW5hbCBOVkVOQyBWUFNcbiAqIG9ubHkgYXMgYSBzb3VyY2UgZm9yIHRoZSBQVEwgKHByb2ZpbGUvdGllci9sZXZlbCkgYnl0ZXMuXG4gKiBNYXRjaGVzIHgyNjUgNC4xIEVOQUJMRV9BTFBIQSBWUFMgc3RydWN0dXJlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRBbHBoYVZQUyh2cHNEYXRhOiBCdWZmZXIsIHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKTogQnVmZmVyIHtcbiAgY29uc3QgcHRsID0gZXh0cmFjdFBUTCh2cHNEYXRhKTtcbiAgaWYgKCFwdGwpIHtcbiAgICByZXR1cm4gdnBzRGF0YTtcbiAgfVxuXG4gIGNvbnN0IGJ3ID0gbmV3IEJpdFdyaXRlcigpO1xuICB3cml0ZUJhc2VWUFMoYncsIHB0bCk7XG4gIHdyaXRlVlBTRXh0ZW5zaW9uKGJ3LCBwdGwsIHdpZHRoLCBoZWlnaHQpO1xuXG4gIGJ3LmJpdHMucHVzaCgxKTsgLy8gUkJTUCBzdG9wIGJpdFxuICBidy5hbGlnbigwKTtcbiAgcmV0dXJuIGFkZEVtdWxhdGlvblByZXZlbnRpb24ocGFja0JpdHMoYncuYml0cykpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8xMi5cblxuaW1wb3J0IHR5cGUgeyBGcmFtZSB9IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQgeyByZXdyaXRlQWxwaGFQcHMsIHJld3JpdGVBbHBoYVNsaWNlSGVhZGVyLCByZXdyaXRlQWxwaGFTcHMgfSBmcm9tIFwiLi9hbHBoYV9kYXJ3aW5cIjtcbmltcG9ydCB7IHBhY2tCaXRzIH0gZnJvbSBcIi4vYml0XCI7XG5pbXBvcnQge1xuICBBTk5FWF9CX1NUQVJUX0NPREUsXG4gIGVuY29kZU5hbEhlYWRlcixcbiAgTkFMX1BQUyxcbiAgTkFMX1NFSV9QUkVGSVgsXG4gIE5BTF9TUFMsXG4gIE5BTF9WUFMsXG4gIHR5cGUgTmFsVW5pdCxcbiAgcmV3cml0ZU5hbExheWVySWQsXG4gIHNwbGl0TmFsVW5pdHMsXG59IGZyb20gXCIuL25hbFwiO1xuaW1wb3J0IHR5cGUgeyBOdmVuY0hldmNDb25maWcgfSBmcm9tIFwiLi9wYXJzZXJcIjtcbmltcG9ydCB7IGJ1aWxkQWxwaGFWUFMgfSBmcm9tIFwiLi92cHNcIjtcblxuLy8gQkdSQSBhbHBoYSDihpIgWSBwbGFuZSBvZiBwYWNrZWQgWVVWNDIwUCAoY2FsbGVyIHByZS1maWxscyBVVj0xMjgpOyBVaW50MzIgZmFzdCBwYXRoOiBCR1JBIExFIHUzMiA+Pj4gMjQgPSBBIGJ5dGUuXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdEFscGhhVG9ZdXY0MjBwQnVmZmVyKGJncmFGcmFtZTogRnJhbWUsIGJ1ZjogQnVmZmVyKTogdm9pZCB7XG4gIGNvbnN0IHNyYyA9IGJncmFGcmFtZS5kYXRhPy5bMF07XG4gIGNvbnN0IHNyY0xzID0gYmdyYUZyYW1lLmxpbmVzaXplPy5bMF07XG4gIGlmICghc3JjIHx8ICFzcmNMcykge1xuICAgIHRocm93IG5ldyBFcnJvcihcImV4dHJhY3RBbHBoYTogbWlzc2luZyBCR1JBIGRhdGFcIik7XG4gIH1cbiAgY29uc3QgdyA9IGJncmFGcmFtZS53aWR0aDtcbiAgY29uc3QgaCA9IGJncmFGcmFtZS5oZWlnaHQ7XG4gIGNvbnN0IHlTaXplID0gdyAqIGg7XG4gIGlmIChzcmMuYnl0ZU9mZnNldCAlIDQgPT09IDAgJiYgc3JjTHMgPT09IHcgKiA0KSB7XG4gICAgY29uc3Qgc3JjMzIgPSBuZXcgVWludDMyQXJyYXkoc3JjLmJ1ZmZlciwgc3JjLmJ5dGVPZmZzZXQsIHlTaXplKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHlTaXplOyBpKyspIHtcbiAgICAgIGJ1ZltpXSA9IHNyYzMyW2ldISA+Pj4gMjQ7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGZvciAobGV0IHkgPSAwOyB5IDwgaDsgeSsrKSB7XG4gICAgICBjb25zdCByb3dCYXNlID0geSAqIHNyY0xzICsgMztcbiAgICAgIGNvbnN0IGRzdEJhc2UgPSB5ICogdztcbiAgICAgIGZvciAobGV0IHggPSAwOyB4IDwgdzsgeCsrKSB7XG4gICAgICAgIGJ1Zltkc3RCYXNlICsgeF0gPSBzcmNbcm93QmFzZSArIHggKiA0XSE7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVW5pZmllZEV4dHJhZGF0YU9wdGlvbnMge1xuICBiYXNlRXh0cmFkYXRhOiBCdWZmZXI7XG4gIGFscGhhRXh0cmFkYXRhOiBCdWZmZXI7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xufVxuXG4vLyBBcHBsZSBIRVZDIEFscGhhIFByb2ZpbGU6IGFscGhhIFNQUyBzcHNfc2VxX3BhcmFtZXRlcl9zZXRfaWQ9MSwgYWxwaGEgUFBTIHBpYytzZXEgaWQ9MS5cbmZ1bmN0aW9uIHJld3JpdGVBbHBoYVBhcmFtU2V0KHR5cGU6IG51bWJlciwgZGF0YTogQnVmZmVyKTogQnVmZmVyIHtcbiAgaWYgKHR5cGUgPT09IE5BTF9TUFMpIHtcbiAgICByZXR1cm4gcmV3cml0ZUFscGhhU3BzKGRhdGEpO1xuICB9XG4gIGlmICh0eXBlID09PSBOQUxfUFBTKSB7XG4gICAgcmV0dXJuIHJld3JpdGVBbHBoYVBwcyhkYXRhKTtcbiAgfVxuICByZXR1cm4gZGF0YTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkVW5pZmllZEV4dHJhZGF0YShvcHRzOiBVbmlmaWVkRXh0cmFkYXRhT3B0aW9ucyk6IEJ1ZmZlciB7XG4gIGNvbnN0IHsgYmFzZUV4dHJhZGF0YSwgYWxwaGFFeHRyYWRhdGEgfSA9IG9wdHM7XG4gIGNvbnN0IGJhc2VOYWxzID0gc3BsaXROYWxVbml0cyhiYXNlRXh0cmFkYXRhKTtcbiAgY29uc3QgYWxwaGFOYWxzID0gc3BsaXROYWxVbml0cyhhbHBoYUV4dHJhZGF0YSk7XG5cbiAgY29uc3QgYWxwaGFCeVR5cGUgPSBuZXcgTWFwPG51bWJlciwgTmFsVW5pdFtdPigpO1xuICBmb3IgKGNvbnN0IG5hbCBvZiBhbHBoYU5hbHMpIHtcbiAgICBpZiAobmFsLnR5cGUgPT09IE5BTF9WUFMpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCBhcnIgPSBhbHBoYUJ5VHlwZS5nZXQobmFsLnR5cGUpID8/IFtdO1xuICAgIGFyci5wdXNoKG5hbCk7XG4gICAgYWxwaGFCeVR5cGUuc2V0KG5hbC50eXBlLCBhcnIpO1xuICB9XG5cbiAgY29uc3QgY2h1bmtzOiBCdWZmZXJbXSA9IFtdO1xuICBjb25zdCBlbWl0dGVkID0gbmV3IFNldDxudW1iZXI+KCk7XG4gIGZvciAoY29uc3QgbmFsIG9mIGJhc2VOYWxzKSB7XG4gICAgY29uc3QgZGF0YSA9IG5hbC50eXBlID09PSBOQUxfVlBTID8gYnVpbGRBbHBoYVZQUyhuYWwuZGF0YSwgb3B0cy53aWR0aCwgb3B0cy5oZWlnaHQpIDogbmFsLmRhdGE7XG4gICAgY2h1bmtzLnB1c2goQU5ORVhfQl9TVEFSVF9DT0RFLCBkYXRhKTtcbiAgICBpZiAoIWVtaXR0ZWQuaGFzKG5hbC50eXBlKSkge1xuICAgICAgZW1pdHRlZC5hZGQobmFsLnR5cGUpO1xuICAgICAgZm9yIChjb25zdCBhbHBoYU5hbCBvZiBhbHBoYUJ5VHlwZS5nZXQobmFsLnR5cGUpID8/IFtdKSB7XG4gICAgICAgIGNvbnN0IGFEYXRhID0gcmV3cml0ZUFscGhhUGFyYW1TZXQobmFsLnR5cGUsIGFscGhhTmFsLmRhdGEpO1xuICAgICAgICBjaHVua3MucHVzaChBTk5FWF9CX1NUQVJUX0NPREUsIHJld3JpdGVOYWxMYXllcklkKGFEYXRhLCAxKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY2h1bmtzLnB1c2goYnVpbGRBbHBoYUNoYW5uZWxJbmZvU0VJKCkpO1xuICByZXR1cm4gQnVmZmVyLmNvbmNhdChjaHVua3MpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRBbHBoYUNoYW5uZWxJbmZvU0VJKCk6IEJ1ZmZlciB7XG4gIGNvbnN0IHBheWxvYWRUeXBlID0gMTY1O1xuICBjb25zdCBwYXlsb2FkU2l6ZSA9IDQ7XG4gIGNvbnN0IFtoMCwgaDFdID0gZW5jb2RlTmFsSGVhZGVyKE5BTF9TRUlfUFJFRklYLCAwLCAxKTtcblxuICBjb25zdCBiaXRzOiBudW1iZXJbXSA9IFtdO1xuICBjb25zdCB3cml0ZUJpdHMgPSAodmFsOiBudW1iZXIsIG46IG51bWJlcikgPT4ge1xuICAgIGZvciAobGV0IGkgPSBuIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGJpdHMucHVzaCgodmFsID4+IGkpICYgMSk7XG4gICAgfVxuICB9O1xuXG4gIHdyaXRlQml0cygwLCAxKTsgLy8gYWxwaGFfY2hhbm5lbF9jYW5jZWxfZmxhZ1xuICB3cml0ZUJpdHMoMCwgMyk7IC8vIGFscGhhX2NoYW5uZWxfdXNlX2lkYyAoMCA9IHVuc3BlY2lmaWVkL3ByZW11bHRpcGxpZWQ7IG1hdGNoZXMgeDI2NSBFTkFCTEVfQUxQSEEpXG4gIHdyaXRlQml0cygwLCAzKTsgLy8gYWxwaGFfY2hhbm5lbF9iaXRfZGVwdGhfbWludXM4XG4gIHdyaXRlQml0cygwLCA5KTsgLy8gYWxwaGFfdHJhbnNwYXJlbnRfdmFsdWVcbiAgd3JpdGVCaXRzKDI1NSwgOSk7IC8vIGFscGhhX29wYXF1ZV92YWx1ZVxuICB3cml0ZUJpdHMoMCwgMSk7IC8vIGFscGhhX2NoYW5uZWxfaW5jcl9mbGFnXG4gIHdyaXRlQml0cygwLCAxKTsgLy8gYWxwaGFfY2hhbm5lbF9jbGlwX2ZsYWdcbiAgd3JpdGVCaXRzKDEsIDEpOyAvLyBieXRlIGFsaWdubWVudFxuICB3aGlsZSAoYml0cy5sZW5ndGggJSA4ICE9PSAwKSB7XG4gICAgd3JpdGVCaXRzKDAsIDEpO1xuICB9XG5cbiAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoW1xuICAgIEFOTkVYX0JfU1RBUlRfQ09ERSxcbiAgICBCdWZmZXIuZnJvbShbaDAsIGgxXSksXG4gICAgQnVmZmVyLmZyb20oW3BheWxvYWRUeXBlLCBwYXlsb2FkU2l6ZV0pLFxuICAgIHBhY2tCaXRzKGJpdHMpLFxuICAgIEJ1ZmZlci5mcm9tKFsweDgwXSksXG4gIF0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW50ZXJsZWF2ZUFjY2Vzc1VuaXRzKGJhc2VOYWxzOiBOYWxVbml0W10sIGFscGhhTmFsczogTmFsVW5pdFtdLCBjZmc6IE52ZW5jSGV2Y0NvbmZpZyk6IEJ1ZmZlciB7XG4gIGNvbnN0IGNodW5rczogQnVmZmVyW10gPSBbXTtcbiAgZm9yIChjb25zdCBuYWwgb2YgYmFzZU5hbHMpIHtcbiAgICBjaHVua3MucHVzaChBTk5FWF9CX1NUQVJUX0NPREUsIG5hbC5kYXRhKTtcbiAgfVxuICBmb3IgKGNvbnN0IG5hbCBvZiBhbHBoYU5hbHMpIHtcbiAgICBpZiAobmFsLnR5cGUgPCBOQUxfVlBTKSB7XG4gICAgICBjb25zdCBkYXRhID0gcmV3cml0ZUFscGhhU2xpY2VIZWFkZXIobmFsLmRhdGEsIG5hbC50eXBlLCBjZmcpO1xuICAgICAgY2h1bmtzLnB1c2goQU5ORVhfQl9TVEFSVF9DT0RFLCByZXdyaXRlTmFsTGF5ZXJJZChkYXRhLCAxKSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBCdWZmZXIuY29uY2F0KGNodW5rcyk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA1LzE4LlxuXG5pbXBvcnQgeyB0eXBlIENvZGVjQ29udGV4dCwgRkZtcGVnRXJyb3IsIHR5cGUgUGFja2V0LCB0eXBlIFN0cmVhbSB9IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQgeyBBVkVSUk9SX0VBR0FJTiwgQVZFUlJPUl9FT0YsIHR5cGUgQVZQYWNrZXRGbGFnIH0gZnJvbSBcIm5vZGUtYXYvY29uc3RhbnRzXCI7XG5pbXBvcnQgdHlwZSB7IEZvcm1hdE11eGVyIH0gZnJvbSBcIi4uL211eGVyXCI7XG5pbXBvcnQgeyBpbnRlcmxlYXZlQWNjZXNzVW5pdHMgfSBmcm9tIFwiLi9hbHBoYVwiO1xuaW1wb3J0IHsgcGF0Y2hIZXZjQWxwaGFQdGwgfSBmcm9tIFwiLi9hbHBoYV9kYXJ3aW5cIjtcbmltcG9ydCB7IHNwbGl0TmFsVW5pdHMgfSBmcm9tIFwiLi9uYWxcIjtcbmltcG9ydCB0eXBlIHsgTnZlbmNIZXZjQ29uZmlnIH0gZnJvbSBcIi4vcGFyc2VyXCI7XG5cbmludGVyZmFjZSBQZW5kaW5nUGFja2V0IHtcbiAgZGF0YTogQnVmZmVyO1xuICBwdHM6IGJpZ2ludDtcbiAgZHRzOiBiaWdpbnQ7XG4gIGR1cmF0aW9uOiBiaWdpbnQ7XG4gIGZsYWdzOiBBVlBhY2tldEZsYWc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRHVhbExheWVyTXV4T3B0aW9ucyB7XG4gIGJhc2VDdHg6IENvZGVjQ29udGV4dDtcbiAgYWxwaGFDdHg6IENvZGVjQ29udGV4dDtcbiAgYmFzZVBrdDogUGFja2V0O1xuICBhbHBoYVBrdDogUGFja2V0O1xuICBzdHJlYW06IFN0cmVhbTtcbiAgaGV2Y0NmZzogTnZlbmNIZXZjQ29uZmlnO1xufVxuXG4vLyBEcmFpbnMgdGhlIGJhc2UgKyBhbHBoYSBOVkVOQyBzZXNzaW9ucyBhbmQgd3JpdGVzIGludGVybGVhdmVkIEhFVkMtYWxwaGEgYWNjZXNzIHVuaXRzLlxuZXhwb3J0IGNsYXNzIER1YWxMYXllck11eCB7XG4gIHByaXZhdGUgX3M6IER1YWxMYXllck11eE9wdGlvbnM7XG4gIHByaXZhdGUgX2Jhc2VRdWV1ZTogUGVuZGluZ1BhY2tldFtdID0gW107XG4gIHByaXZhdGUgX2FscGhhUXVldWU6IFBlbmRpbmdQYWNrZXRbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKHM6IER1YWxMYXllck11eE9wdGlvbnMpIHtcbiAgICB0aGlzLl9zID0gcztcbiAgfVxuXG4gIGFzeW5jIGRyYWluKG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgYmFzZUN0eCwgYWxwaGFDdHgsIGJhc2VQa3QsIGFscGhhUGt0IH0gPSB0aGlzLl9zO1xuICAgIC8vIERyYWluIGVhY2ggc2Vzc2lvbiBmdWxseSDigJQgaW5kZXBlbmRlbnQgTlZFTkMgc2Vzc2lvbnMgcnVuIGEgZnJhbWUgYXBhcnQgdHJhbnNpZW50bHkuXG4gICAgdGhpcy5fYmFzZVF1ZXVlLnB1c2goLi4uKGF3YWl0IHRoaXMucmVjZWl2ZUFsbChiYXNlQ3R4LCBiYXNlUGt0LCBcImJhc2VcIikpKTtcbiAgICB0aGlzLl9hbHBoYVF1ZXVlLnB1c2goLi4uKGF3YWl0IHRoaXMucmVjZWl2ZUFsbChhbHBoYUN0eCwgYWxwaGFQa3QsIFwiYWxwaGFcIikpKTtcbiAgICAvLyBiZj0wIOKGkiBubyByZW9yZGVyOyBxdWV1ZSBpbmRleCBOIGlzIHRoZSBzYW1lIGZyYW1lIGZvciBib3RoLiBMZWZ0b3ZlciB3YWl0cyBmb3IgbmV4dCBkcmFpbi5cbiAgICB3aGlsZSAodGhpcy5fYmFzZVF1ZXVlLmxlbmd0aCAmJiB0aGlzLl9hbHBoYVF1ZXVlLmxlbmd0aCkge1xuICAgICAgYXdhaXQgdGhpcy53cml0ZVBhaXIodGhpcy5fYmFzZVF1ZXVlLnNoaWZ0KCkhLCB0aGlzLl9hbHBoYVF1ZXVlLnNoaWZ0KCkhLCBtdXhlcik7XG4gICAgfVxuICB9XG5cbiAgLy8gVW5wYWlyZWQgbGVmdG92ZXJzIGFmdGVyIEVPRiA9IHRydWUgYmFzZS9hbHBoYSBkZXN5bmM7IHJldHVybnMgYSBkZXNjcmlwdGlvbiwgZWxzZSB1bmRlZmluZWQuXG4gIGRlc3luY0FmdGVyRW9mKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCF0aGlzLl9iYXNlUXVldWUubGVuZ3RoICYmICF0aGlzLl9hbHBoYVF1ZXVlLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIGBiYXNlPSR7dGhpcy5fYmFzZVF1ZXVlLmxlbmd0aH0sIGFscGhhPSR7dGhpcy5fYWxwaGFRdWV1ZS5sZW5ndGh9IHVucGFpcmVkYDtcbiAgfVxuXG4gIC8vIEVBR0FJTi9FT0YgPSBub3JtYWwgc3RvcDsgYW55IG90aGVyIG5lZ2F0aXZlIGlzIGEgcmVhbCBmYXVsdCwgbm90IFwiZHJhaW5lZFwiLlxuICBwcml2YXRlIGFzeW5jIHJlY2VpdmVBbGwoY3R4OiBDb2RlY0NvbnRleHQsIHBrdDogUGFja2V0LCB0YWc6IHN0cmluZyk6IFByb21pc2U8UGVuZGluZ1BhY2tldFtdPiB7XG4gICAgY29uc3Qgb3V0OiBQZW5kaW5nUGFja2V0W10gPSBbXTtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgY29uc3QgcmV0ID0gYXdhaXQgY3R4LnJlY2VpdmVQYWNrZXQocGt0KTtcbiAgICAgIGlmIChyZXQgPj0gMCkge1xuICAgICAgICBvdXQucHVzaCh0aGlzLnNuYXBzaG90KHBrdCkpO1xuICAgICAgICBwa3QudW5yZWYoKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAocmV0ID09PSBBVkVSUk9SX0VBR0FJTiB8fCByZXQgPT09IEFWRVJST1JfRU9GKSB7XG4gICAgICAgIHJldHVybiBvdXQ7XG4gICAgICB9XG4gICAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IocmV0LCBgbnZlbmMuJHt0YWd9LnJlY2VpdmVQYWNrZXRgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNuYXBzaG90KHBrdDogUGFja2V0KTogUGVuZGluZ1BhY2tldCB7XG4gICAgLy8gcGt0LmRhdGEgaXMgbmF0aXZlIG1lbW9yeSBmcmVlZCBvbiB1bnJlZiDigJQgY29weSBiZWZvcmUgcXVldWVpbmcuXG4gICAgcmV0dXJuIHsgZGF0YTogQnVmZmVyLmZyb20ocGt0LmRhdGEhKSwgcHRzOiBwa3QucHRzLCBkdHM6IHBrdC5kdHMsIGR1cmF0aW9uOiBwa3QuZHVyYXRpb24sIGZsYWdzOiBwa3QuZmxhZ3MgfTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgd3JpdGVQYWlyKGJhc2U6IFBlbmRpbmdQYWNrZXQsIGFscGhhOiBQZW5kaW5nUGFja2V0LCBtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IGJhc2VQa3QsIGJhc2VDdHgsIHN0cmVhbSwgaGV2Y0NmZyB9ID0gdGhpcy5fcztcbiAgICAvLyBQYXRjaCBpbi1iYW5kIFZQUy9TUFMgUFRMIGJpdHMgZm9yIEFwcGxlLVZUQiBjb21wYXQgKGVuY29kZXIgcmVwZWF0cyBoZWFkZXJzIHBlciBJRFIpLlxuICAgIGNvbnN0IGludGVybGVhdmVkID0gaW50ZXJsZWF2ZUFjY2Vzc1VuaXRzKHNwbGl0TmFsVW5pdHMoYmFzZS5kYXRhKSwgc3BsaXROYWxVbml0cyhhbHBoYS5kYXRhKSwgaGV2Y0NmZyk7XG4gICAgLy8gZGF0YSBzZXR0ZXIgd2lwZXMgcHRzL2R0cy9kdXJhdGlvbi9mbGFncyDigJQgcmVzdG9yZTsgZmxhZ3MnIEtFWSBiaXQgZHJpdmVzIG1vdiBzdHNzLlxuICAgIGJhc2VQa3QuZGF0YSA9IHBhdGNoSGV2Y0FscGhhUHRsKGludGVybGVhdmVkKTtcbiAgICBiYXNlUGt0LnB0cyA9IGJhc2UucHRzO1xuICAgIGJhc2VQa3QuZHRzID0gYmFzZS5kdHM7XG4gICAgYmFzZVBrdC5kdXJhdGlvbiA9IGJhc2UuZHVyYXRpb24gPT09IDBuID8gMW4gOiBiYXNlLmR1cmF0aW9uO1xuICAgIGJhc2VQa3QuZmxhZ3MgPSBiYXNlLmZsYWdzO1xuICAgIGJhc2VQa3Quc3RyZWFtSW5kZXggPSBzdHJlYW0uaW5kZXg7XG4gICAgYmFzZVBrdC5yZXNjYWxlVHMoYmFzZUN0eC50aW1lQmFzZSwgc3RyZWFtLnRpbWVCYXNlKTtcbiAgICBhd2FpdCBtdXhlci53cml0ZVBhY2tldChiYXNlUGt0KTtcbiAgICBiYXNlUGt0LnVucmVmKCk7XG4gIH1cbn1cbiIsIi8vIFBhcnNlIE5WRU5DIFNQUy9QUFMgZXh0cmFkYXRhIGF0IGVuY29kZXIgaW5pdCB0byBkZXJpdmUgc2xpY2UtaGVhZGVyIHBhcnNlciBmbGFnczsgdGhyb3dzIGlmIE5WRU5DIGRlZmF1bHRzIHNoaWZ0LlxuXG5pbXBvcnQgeyBCaXRSZWFkZXIgfSBmcm9tIFwiLi9iaXRcIjtcbmltcG9ydCB7IE5BTF9QUFMsIE5BTF9TUFMsIHJlbW92ZUVtdWxhdGlvblByZXZlbnRpb24sIHNwbGl0TmFsVW5pdHMgfSBmcm9tIFwiLi9uYWxcIjtcblxuZXhwb3J0IGludGVyZmFjZSBOdmVuY0hldmNDb25maWcge1xuICBsb2cyTWF4UG9jTHNiOiBudW1iZXI7XG4gIG51bVNob3J0VGVybVJlZlBpY1NldHM6IG51bWJlcjtcbiAgbnVtRGVsdGFQb2NzU2V0MDogbnVtYmVyO1xuICBsb25nVGVybVJlZlBpY3NQcmVzZW50OiBib29sZWFuO1xuICBzcHNUZW1wb3JhbE12cEVuYWJsZWQ6IGJvb2xlYW47XG4gIHNhb0VuYWJsZWQ6IGJvb2xlYW47XG4gIGNhYmFjSW5pdFByZXNlbnQ6IGJvb2xlYW47XG4gIHBwc0hhc0xvb3BGaWx0ZXJBY3Jvc3NTbGljZXNGbGFnOiBib29sZWFuO1xufVxuXG5mdW5jdGlvbiBmYWlsKGZpZWxkOiBzdHJpbmcsIGdvdDogdW5rbm93biwgZXhwZWN0ZWQ6IHN0cmluZyk6IG5ldmVyIHtcbiAgdGhyb3cgbmV3IEVycm9yKGBoZXZjX2FscGhhOiBOVkVOQyBTUFMvUFBTIHVuc3VwcG9ydGVkOiAke2ZpZWxkfT0ke2dvdH0sIGV4cGVjdGVkICR7ZXhwZWN0ZWR9YCk7XG59XG5cbmZ1bmN0aW9uIHNraXBQdGwoYnI6IEJpdFJlYWRlciwgbWF4U3ViTGF5ZXJzOiBudW1iZXIpOiB2b2lkIHtcbiAgYnIucmVhZCgyICsgMSArIDUpOyAvLyBwcm9maWxlX3NwYWNlLCB0aWVyLCBwcm9maWxlX2lkY1xuICBici5yZWFkKDMyKTsgLy8gcHJvZmlsZV9jb21wYXRpYmlsaXR5X2ZsYWdbMC4uMzFdXG4gIGJyLnJlYWQoNDgpOyAvLyA0IHNvdXJjZS9wYWNrZWQgZmxhZ3MgKyA0MyBjb25zdHJhaW50L3Jlc2VydmVkICsgMSBpbmJsZFxuICBici5yZWFkKDgpOyAvLyBsZXZlbF9pZGNcbiAgY29uc3Qgc3ViUHJvZmlsZVByZXNlbnQ6IG51bWJlcltdID0gW107XG4gIGNvbnN0IHN1YkxldmVsUHJlc2VudDogbnVtYmVyW10gPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXhTdWJMYXllcnM7IGkrKykge1xuICAgIHN1YlByb2ZpbGVQcmVzZW50LnB1c2goYnIucmVhZCgxKSk7XG4gICAgc3ViTGV2ZWxQcmVzZW50LnB1c2goYnIucmVhZCgxKSk7XG4gIH1cbiAgaWYgKG1heFN1YkxheWVycyA+IDApIHtcbiAgICBmb3IgKGxldCBpID0gbWF4U3ViTGF5ZXJzOyBpIDwgODsgaSsrKSB7XG4gICAgICBici5yZWFkKDIpO1xuICAgIH1cbiAgfVxuICBmb3IgKGxldCBpID0gMDsgaSA8IG1heFN1YkxheWVyczsgaSsrKSB7XG4gICAgaWYgKHN1YlByb2ZpbGVQcmVzZW50W2ldKSB7XG4gICAgICBici5yZWFkKDggKyAzMiArIDQ4KTtcbiAgICB9XG4gICAgaWYgKHN1YkxldmVsUHJlc2VudFtpXSkge1xuICAgICAgYnIucmVhZCg4KTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcGFyc2VTcHMoc3BzUmJzcDogQnVmZmVyKToge1xuICBsb2cyTWF4UG9jTHNiOiBudW1iZXI7XG4gIHNhb0VuYWJsZWQ6IGJvb2xlYW47XG4gIG51bVNob3J0VGVybVJlZlBpY1NldHM6IG51bWJlcjtcbiAgbnVtRGVsdGFQb2NzU2V0MDogbnVtYmVyO1xuICBsb25nVGVybVJlZlBpY3NQcmVzZW50OiBib29sZWFuO1xuICBzcHNUZW1wb3JhbE12cEVuYWJsZWQ6IGJvb2xlYW47XG59IHtcbiAgY29uc3QgYnIgPSBuZXcgQml0UmVhZGVyKHNwc1Jic3ApO1xuICBici5yZWFkKDE2KTsgLy8gTkFMIGhlYWRlclxuICBici5yZWFkKDQpOyAvLyBzcHNfdmlkZW9fcGFyYW1ldGVyX3NldF9pZFxuICBjb25zdCBtYXhTdWJMYXllcnMgPSBici5yZWFkKDMpO1xuICAvLyBhbHBoYV9kYXJ3aW4ucmV3cml0ZUFscGhhU3BzICsgdnBzLmV4dHJhY3RQVEwgaGFyZGNvZGUgOTYtYml0IFBUTCDigJQgb25seSB2YWxpZCB3aGVuIHN1Yl9sYXllcnM9MC5cbiAgaWYgKG1heFN1YkxheWVycyAhPT0gMCkge1xuICAgIGZhaWwoXCJzcHNfbWF4X3N1Yl9sYXllcnNfbWludXMxXCIsIG1heFN1YkxheWVycywgXCIwXCIpO1xuICB9XG4gIGJyLnJlYWQoMSk7IC8vIHNwc190ZW1wb3JhbF9pZF9uZXN0aW5nX2ZsYWdcbiAgc2tpcFB0bChiciwgbWF4U3ViTGF5ZXJzKTtcbiAgYnIucmVhZFVlKCk7IC8vIHNwc19zZXFfcGFyYW1ldGVyX3NldF9pZFxuICBjb25zdCBjaHJvbWFGb3JtYXQgPSBici5yZWFkVWUoKTtcbiAgaWYgKGNocm9tYUZvcm1hdCA9PT0gMykge1xuICAgIGZhaWwoXCJjaHJvbWFfZm9ybWF0X2lkY1wiLCBjaHJvbWFGb3JtYXQsIFwi4omgM1wiKTtcbiAgfVxuICBici5yZWFkVWUoKTsgLy8gcGljX3dpZHRoX2luX2x1bWFfc2FtcGxlc1xuICBici5yZWFkVWUoKTsgLy8gcGljX2hlaWdodF9pbl9sdW1hX3NhbXBsZXNcbiAgaWYgKGJyLnJlYWQoMSkpIHtcbiAgICBici5yZWFkVWUoKTtcbiAgICBici5yZWFkVWUoKTtcbiAgICBici5yZWFkVWUoKTtcbiAgICBici5yZWFkVWUoKTtcbiAgfVxuICBici5yZWFkVWUoKTsgLy8gYml0X2RlcHRoX2x1bWFfbWludXM4XG4gIGJyLnJlYWRVZSgpOyAvLyBiaXRfZGVwdGhfY2hyb21hX21pbnVzOFxuICBjb25zdCBsb2cyTWF4UG9jTHNiID0gYnIucmVhZFVlKCkgKyA0O1xuICBjb25zdCBzdWJPcmRlckluZm8gPSBici5yZWFkKDEpO1xuICBjb25zdCBvcmRlckNvdW50ID0gc3ViT3JkZXJJbmZvID8gbWF4U3ViTGF5ZXJzICsgMSA6IDE7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgb3JkZXJDb3VudDsgaSsrKSB7XG4gICAgYnIucmVhZFVlKCk7XG4gICAgYnIucmVhZFVlKCk7XG4gICAgYnIucmVhZFVlKCk7XG4gIH1cbiAgYnIucmVhZFVlKCk7XG4gIGJyLnJlYWRVZSgpO1xuICBici5yZWFkVWUoKTtcbiAgYnIucmVhZFVlKCk7XG4gIGJyLnJlYWRVZSgpO1xuICBici5yZWFkVWUoKTtcbiAgaWYgKGJyLnJlYWQoMSkpIHtcbiAgICBmYWlsKFwic2NhbGluZ19saXN0X2VuYWJsZWRfZmxhZ1wiLCAxLCBcIjBcIik7XG4gIH1cbiAgYnIucmVhZCgxKTsgLy8gYW1wX2VuYWJsZWRfZmxhZ1xuICBjb25zdCBzYW9FbmFibGVkID0gYnIucmVhZCgxKSA9PT0gMTtcbiAgaWYgKGJyLnJlYWQoMSkpIHtcbiAgICBmYWlsKFwicGNtX2VuYWJsZWRfZmxhZ1wiLCAxLCBcIjBcIik7XG4gIH1cbiAgY29uc3QgbnVtU3RScHMgPSBici5yZWFkVWUoKTtcbiAgaWYgKG51bVN0UnBzID4gMSkge1xuICAgIGZhaWwoXCJudW1fc2hvcnRfdGVybV9yZWZfcGljX3NldHNcIiwgbnVtU3RScHMsIFwi4omkMVwiKTtcbiAgfVxuICBsZXQgbnVtRGVsdGFQb2NzU2V0MCA9IDA7XG4gIGlmIChudW1TdFJwcyA9PT0gMSkge1xuICAgIGNvbnN0IG51bU5lZyA9IGJyLnJlYWRVZSgpO1xuICAgIGNvbnN0IG51bVBvcyA9IGJyLnJlYWRVZSgpO1xuICAgIG51bURlbHRhUG9jc1NldDAgPSBudW1OZWcgKyBudW1Qb3M7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1OZWc7IGkrKykge1xuICAgICAgYnIucmVhZFVlKCk7XG4gICAgICBici5yZWFkKDEpO1xuICAgIH1cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bVBvczsgaSsrKSB7XG4gICAgICBici5yZWFkVWUoKTtcbiAgICAgIGJyLnJlYWQoMSk7XG4gICAgfVxuICB9XG4gIGNvbnN0IGxvbmdUZXJtUmVmUGljc1ByZXNlbnQgPSBici5yZWFkKDEpID09PSAxO1xuICBpZiAobG9uZ1Rlcm1SZWZQaWNzUHJlc2VudCkge1xuICAgIGZhaWwoXCJsb25nX3Rlcm1fcmVmX3BpY3NfcHJlc2VudF9mbGFnXCIsIDEsIFwiMFwiKTtcbiAgfVxuICBjb25zdCBzcHNUZW1wb3JhbE12cEVuYWJsZWQgPSBici5yZWFkKDEpID09PSAxO1xuICByZXR1cm4ge1xuICAgIGxvZzJNYXhQb2NMc2IsXG4gICAgc2FvRW5hYmxlZCxcbiAgICBudW1TaG9ydFRlcm1SZWZQaWNTZXRzOiBudW1TdFJwcyxcbiAgICBudW1EZWx0YVBvY3NTZXQwLFxuICAgIGxvbmdUZXJtUmVmUGljc1ByZXNlbnQsXG4gICAgc3BzVGVtcG9yYWxNdnBFbmFibGVkLFxuICB9O1xufVxuXG5mdW5jdGlvbiBwYXJzZVBwcyhwcHNSYnNwOiBCdWZmZXIpOiB7IGNhYmFjSW5pdFByZXNlbnQ6IGJvb2xlYW47IHBwc0hhc0xvb3BGaWx0ZXJBY3Jvc3NTbGljZXNGbGFnOiBib29sZWFuIH0ge1xuICBjb25zdCBiciA9IG5ldyBCaXRSZWFkZXIocHBzUmJzcCk7XG4gIGJyLnJlYWQoMTYpOyAvLyBOQUwgaGVhZGVyXG4gIGJyLnJlYWRVZSgpOyAvLyBwcHNfcGljX3BhcmFtZXRlcl9zZXRfaWRcbiAgYnIucmVhZFVlKCk7IC8vIHBwc19zZXFfcGFyYW1ldGVyX3NldF9pZFxuICBici5yZWFkKDEpOyAvLyBkZXBlbmRlbnRfc2xpY2Vfc2VnbWVudHNfZW5hYmxlZF9mbGFnXG4gIGJyLnJlYWQoMSk7IC8vIG91dHB1dF9mbGFnX3ByZXNlbnRfZmxhZ1xuICBjb25zdCBudW1FeHRyYVNsaWNlSGVhZGVyQml0cyA9IGJyLnJlYWQoMyk7XG4gIGlmIChudW1FeHRyYVNsaWNlSGVhZGVyQml0cyAhPT0gMCkge1xuICAgIGZhaWwoXCJudW1fZXh0cmFfc2xpY2VfaGVhZGVyX2JpdHNcIiwgbnVtRXh0cmFTbGljZUhlYWRlckJpdHMsIFwiMFwiKTtcbiAgfVxuICBici5yZWFkKDEpOyAvLyBzaWduX2RhdGFfaGlkaW5nX2VuYWJsZWRfZmxhZ1xuICBjb25zdCBjYWJhY0luaXRQcmVzZW50ID0gYnIucmVhZCgxKSA9PT0gMTtcbiAgYnIucmVhZFVlKCk7IC8vIG51bV9yZWZfaWR4X2wwX2RlZmF1bHRfYWN0aXZlX21pbnVzMVxuICBici5yZWFkVWUoKTsgLy8gbnVtX3JlZl9pZHhfbDFfZGVmYXVsdF9hY3RpdmVfbWludXMxXG4gIGJyLnJlYWRVZSgpOyAvLyBpbml0X3FwX21pbnVzMjYgKHNlLCBidXQgdWUgcGFyc2VyIGZpbmUgdG8gYWR2YW5jZSlcbiAgYnIucmVhZCgxKTsgLy8gY29uc3RyYWluZWRfaW50cmFfcHJlZF9mbGFnXG4gIGJyLnJlYWQoMSk7IC8vIHRyYW5zZm9ybV9za2lwX2VuYWJsZWRfZmxhZ1xuICBpZiAoYnIucmVhZCgxKSkge1xuICAgIGJyLnJlYWRVZSgpOyAvLyBjdV9xcF9kZWx0YV9lbmFibGVkIOKGkiBkaWZmX2N1X3FwX2RlbHRhX2RlcHRoXG4gIH1cbiAgYnIucmVhZFVlKCk7IC8vIHBwc19jYl9xcF9vZmZzZXRcbiAgYnIucmVhZFVlKCk7IC8vIHBwc19jcl9xcF9vZmZzZXRcbiAgYnIucmVhZCgxKTsgLy8gcHBzX3NsaWNlX2Nocm9tYV9xcF9vZmZzZXRzX3ByZXNlbnRfZmxhZ1xuICBici5yZWFkKDEpOyAvLyB3ZWlnaHRlZF9wcmVkX2ZsYWdcbiAgYnIucmVhZCgxKTsgLy8gd2VpZ2h0ZWRfYmlwcmVkX2ZsYWdcbiAgYnIucmVhZCgxKTsgLy8gdHJhbnNxdWFudF9ieXBhc3NfZW5hYmxlZF9mbGFnXG4gIGlmIChici5yZWFkKDEpKSB7XG4gICAgZmFpbChcInRpbGVzX2VuYWJsZWRfZmxhZ1wiLCAxLCBcIjBcIik7XG4gIH1cbiAgYnIucmVhZCgxKTsgLy8gZW50cm9weV9jb2Rpbmdfc3luY19lbmFibGVkX2ZsYWdcbiAgY29uc3QgcHBzTG9vcEZpbHRlckFjcm9zc1NsaWNlc0VuYWJsZWQgPSBici5yZWFkKDEpID09PSAxO1xuICBjb25zdCBkZWJsb2NraW5nQ29udHJvbFByZXNlbnQgPSBici5yZWFkKDEpO1xuICBsZXQgc2xpY2VEZWJsb2NraW5nRGlzYWJsZWRPdmVycmlkZSA9IGZhbHNlO1xuICBpZiAoZGVibG9ja2luZ0NvbnRyb2xQcmVzZW50KSB7XG4gICAgYnIucmVhZCgxKTsgLy8gZGVibG9ja2luZ19maWx0ZXJfb3ZlcnJpZGVfZW5hYmxlZF9mbGFnXG4gICAgc2xpY2VEZWJsb2NraW5nRGlzYWJsZWRPdmVycmlkZSA9IGJyLnJlYWQoMSkgPT09IDE7IC8vIHBwc19kZWJsb2NraW5nX2ZpbHRlcl9kaXNhYmxlZF9mbGFnXG4gICAgaWYgKCFzbGljZURlYmxvY2tpbmdEaXNhYmxlZE92ZXJyaWRlKSB7XG4gICAgICBici5yZWFkVWUoKTtcbiAgICAgIGJyLnJlYWRVZSgpOyAvLyBiZXRhL3RjIG9mZnNldHMgKHNlIHZpYSB1ZSBhZHZhbmNlKVxuICAgIH1cbiAgfVxuICAvLyBzbGljZV9sb29wX2ZpbHRlcl9hY3Jvc3Nfc2xpY2VzX2VuYWJsZWRfZmxhZyBwcmVzZW50IGlmZiBQUFMgYWNyb3NzLXNsaWNlcyBlbmFibGVkICYmICFzbGljZV9kZWJsb2NraW5nX2Rpc2FibGVkLlxuICBjb25zdCBwcHNIYXNMb29wRmlsdGVyQWNyb3NzU2xpY2VzRmxhZyA9IHBwc0xvb3BGaWx0ZXJBY3Jvc3NTbGljZXNFbmFibGVkICYmICFzbGljZURlYmxvY2tpbmdEaXNhYmxlZE92ZXJyaWRlO1xuICByZXR1cm4geyBjYWJhY0luaXRQcmVzZW50LCBwcHNIYXNMb29wRmlsdGVyQWNyb3NzU2xpY2VzRmxhZyB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VOdmVuY0hldmNDb25maWcoZXh0cmFkYXRhOiBCdWZmZXIpOiBOdmVuY0hldmNDb25maWcge1xuICBjb25zdCBuYWxzID0gc3BsaXROYWxVbml0cyhleHRyYWRhdGEpO1xuICBjb25zdCBzcHMgPSBuYWxzLmZpbmQoKG4pID0+IG4udHlwZSA9PT0gTkFMX1NQUyk7XG4gIGNvbnN0IHBwcyA9IG5hbHMuZmluZCgobikgPT4gbi50eXBlID09PSBOQUxfUFBTKTtcbiAgaWYgKCFzcHMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJoZXZjX2FscGhhOiBTUFMgbWlzc2luZyBpbiBOVkVOQyBleHRyYWRhdGFcIik7XG4gIH1cbiAgaWYgKCFwcHMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJoZXZjX2FscGhhOiBQUFMgbWlzc2luZyBpbiBOVkVOQyBleHRyYWRhdGFcIik7XG4gIH1cbiAgY29uc3QgcyA9IHBhcnNlU3BzKHJlbW92ZUVtdWxhdGlvblByZXZlbnRpb24oc3BzLmRhdGEpKTtcbiAgY29uc3QgcCA9IHBhcnNlUHBzKHJlbW92ZUVtdWxhdGlvblByZXZlbnRpb24ocHBzLmRhdGEpKTtcbiAgcmV0dXJuIHsgLi4ucywgLi4ucCB9O1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8xMi5cblxuaW1wb3J0IHsgQ29kZWMsIHR5cGUgQ29kZWNDb250ZXh0LCBGRm1wZWdFcnJvciwgdHlwZSBGcmFtZSwgdHlwZSBQYWNrZXQsIHR5cGUgU3RyZWFtIH0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB7XG4gIEFWX1BJWF9GTVRfQkdSQSxcbiAgQVZfUElYX0ZNVF9ZVVY0MjBQLFxuICBBVkVSUk9SX0VBR0FJTixcbiAgQVZFUlJPUl9FT0YsXG4gIEZGX0VOQ09ERVJfSEVWQ19OVkVOQyxcbn0gZnJvbSBcIm5vZGUtYXYvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBtYWtlRnJhbWUsIG1ha2VQYWNrZXQsIG9wZW5WaWRlb0N0eCB9IGZyb20gXCIuLi9taXNjXCI7XG5pbXBvcnQgdHlwZSB7IEZvcm1hdE11eGVyIH0gZnJvbSBcIi4uL211eGVyXCI7XG5pbXBvcnQgdHlwZSB7IEh3VmlkZW9FbmNvZGVyT3B0aW9ucyB9IGZyb20gXCIuLi92aWRlb3Rvb2xib3hcIjtcbmltcG9ydCB7IGJ1aWxkVW5pZmllZEV4dHJhZGF0YSwgZXh0cmFjdEFscGhhVG9ZdXY0MjBwQnVmZmVyIH0gZnJvbSBcIi4vYWxwaGFcIjtcbmltcG9ydCB7IHBhdGNoSGV2Y0FscGhhUHRsIH0gZnJvbSBcIi4vYWxwaGFfZGFyd2luXCI7XG5pbXBvcnQgeyBEdWFsTGF5ZXJNdXggfSBmcm9tIFwiLi9kdWFsX2xheWVyX211eFwiO1xuaW1wb3J0IHsgdHlwZSBOdmVuY0hldmNDb25maWcsIHBhcnNlTnZlbmNIZXZjQ29uZmlnIH0gZnJvbSBcIi4vcGFyc2VyXCI7XG5cbmludGVyZmFjZSBOdmVuY1N0YXRlIHtcbiAgYmFzZUN0eDogQ29kZWNDb250ZXh0O1xuICBhbHBoYUN0eDogQ29kZWNDb250ZXh0O1xuICBiYXNlUGt0OiBQYWNrZXQ7XG4gIGFscGhhUGt0OiBQYWNrZXQ7XG4gIHN0cmVhbTogU3RyZWFtO1xuICBhbHBoYVN3RnJhbWU6IEZyYW1lO1xuICBhbHBoYUJ1ZjogQnVmZmVyO1xuICBoZXZjQ2ZnOiBOdmVuY0hldmNDb25maWc7XG59XG5cbmV4cG9ydCBjbGFzcyBOdmVuY0R1YWxMYXllckVuY29kZXIgaW1wbGVtZW50cyBEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSBfczogTnZlbmNTdGF0ZTtcbiAgcHJpdmF0ZSBfbXV4OiBEdWFsTGF5ZXJNdXg7XG4gIHByaXZhdGUgX3B0cyA9IDBuO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoczogTnZlbmNTdGF0ZSkge1xuICAgIHRoaXMuX3MgPSBzO1xuICAgIHRoaXMuX211eCA9IG5ldyBEdWFsTGF5ZXJNdXgoe1xuICAgICAgYmFzZUN0eDogcy5iYXNlQ3R4LFxuICAgICAgYWxwaGFDdHg6IHMuYWxwaGFDdHgsXG4gICAgICBiYXNlUGt0OiBzLmJhc2VQa3QsXG4gICAgICBhbHBoYVBrdDogcy5hbHBoYVBrdCxcbiAgICAgIHN0cmVhbTogcy5zdHJlYW0sXG4gICAgICBoZXZjQ2ZnOiBzLmhldmNDZmcsXG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgY3JlYXRlKG9wdHM6IEh3VmlkZW9FbmNvZGVyT3B0aW9ucyk6IFByb21pc2U8TnZlbmNEdWFsTGF5ZXJFbmNvZGVyPiB7XG4gICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0LCBmcHMsIGJpdHJhdGUsIG11eGVyIH0gPSBvcHRzO1xuXG4gICAgY29uc3QgY29kZWMgPSBDb2RlYy5maW5kRW5jb2RlckJ5TmFtZShGRl9FTkNPREVSX0hFVkNfTlZFTkMpO1xuICAgIGlmICghY29kZWMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcImhldmNfbnZlbmMgZW5jb2RlciBub3QgZm91bmRcIik7XG4gICAgfVxuXG4gICAgLy8gdGllcj1tYWluIG1hdGNoZXMgQXBwbGUgVmlkZW9Ub29sYm94OyBtYWNPUyBDaHJvbWUgcmVxdWlyZXMgTWFpbiB0aWVyIGZvciBIRVZDIGFscGhhIGRlY29kZS5cbiAgICBjb25zdCBudmVuY09wdHMgPSB7IHByZXNldDogXCJwNFwiLCBiZjogXCIwXCIsIHRpZXI6IFwibWFpblwiIH07XG4gICAgY29uc3QgY29tbW9uID0geyBjb2RlYywgd2lkdGgsIGhlaWdodCwgZnBzLCBiaXRyYXRlLCBvcHRpb25zOiBudmVuY09wdHMgfTtcbiAgICAvLyBCR1JBIGRpcmVjdCAoTlZFTkMgY29udmVydHMsIG5vIENQVSBTV1MpOyBzdGFjayBmcmVlcyBldmVyeSBuYXRpdmUgaWYgYSBsYXRlciBzdGVwIHRocm93cywgbW92ZSgpIGRpc293bnMgb24gc3VjY2Vzcy5cbiAgICB1c2luZyBzdGFjayA9IG5ldyBEaXNwb3NhYmxlU3RhY2soKTtcbiAgICBjb25zdCBiYXNlQ3R4ID0gc3RhY2sudXNlKGF3YWl0IG9wZW5WaWRlb0N0eCh7IC4uLmNvbW1vbiwgcGl4ZWxGb3JtYXQ6IEFWX1BJWF9GTVRfQkdSQSB9LCBcIm52ZW5jLmJhc2Uub3BlbjJcIikpO1xuICAgIGNvbnN0IGFscGhhQ3R4ID0gc3RhY2sudXNlKGF3YWl0IG9wZW5WaWRlb0N0eCh7IC4uLmNvbW1vbiwgcGl4ZWxGb3JtYXQ6IEFWX1BJWF9GTVRfWVVWNDIwUCB9LCBcIm52ZW5jLmFscGhhLm9wZW4yXCIpKTtcblxuICAgIGlmICghYmFzZUN0eC5leHRyYURhdGEgfHwgIWFscGhhQ3R4LmV4dHJhRGF0YSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwibnZlbmM6IGNvZGVjIGV4dHJhZGF0YSBtaXNzaW5nXCIpO1xuICAgIH1cbiAgICBjb25zdCBoZXZjQ2ZnID0gcGFyc2VOdmVuY0hldmNDb25maWcoYmFzZUN0eC5leHRyYURhdGEpO1xuXG4gICAgY29uc3Qgc3RyZWFtID0gbXV4ZXIuYWRkU3RyZWFtKGJhc2VDdHgsIFwiaHZjMVwiKTtcbiAgICBjb25zdCB1bmlmaWVkID0gYnVpbGRVbmlmaWVkRXh0cmFkYXRhKHtcbiAgICAgIGJhc2VFeHRyYWRhdGE6IGJhc2VDdHguZXh0cmFEYXRhLFxuICAgICAgYWxwaGFFeHRyYWRhdGE6IGFscGhhQ3R4LmV4dHJhRGF0YSxcbiAgICAgIHdpZHRoLFxuICAgICAgaGVpZ2h0LFxuICAgIH0pO1xuICAgIC8vIEFwcGxlLVZUQiBjb21wYXQ6IHJld3JpdGUgVlBTK1NQUyBQVEwgYml0cyB0byBtYXRjaCB4MjY1L1ZUQiBvdXRwdXQgKHRpZXI9TWFpbiwgY29tcGF0WzJdPTEpLlxuICAgIHN0cmVhbS5jb2RlY3Bhci5leHRyYWRhdGEgPSBwYXRjaEhldmNBbHBoYVB0bCh1bmlmaWVkKTtcblxuICAgIGNvbnN0IHlTaXplID0gd2lkdGggKiBoZWlnaHQ7XG4gICAgLy8gWVVWNDIwUCBjaHJvbWEgcGxhbmVzIGFyZSBjZWlsKHcvMinDl2NlaWwoaC8yKTsgZmxvb3IgdW5kZXJmbG93cyBvbiBvZGQgZGltZW5zaW9ucy5cbiAgICBjb25zdCBjaHJvbWFTaXplID0gKCh3aWR0aCArIDEpID4+IDEpICogKChoZWlnaHQgKyAxKSA+PiAxKTtcbiAgICBjb25zdCBhbHBoYUJ1ZiA9IEJ1ZmZlci5hbGxvYyh5U2l6ZSArIGNocm9tYVNpemUgKiAyKTtcbiAgICBhbHBoYUJ1Zi5maWxsKDEyOCwgeVNpemUpO1xuXG4gICAgY29uc3QgYmFzZVBrdCA9IHN0YWNrLnVzZShtYWtlUGFja2V0KCkpO1xuICAgIGNvbnN0IGFscGhhUGt0ID0gc3RhY2sudXNlKG1ha2VQYWNrZXQoKSk7XG4gICAgY29uc3QgYWxwaGFTd0ZyYW1lID0gc3RhY2sudXNlKG1ha2VGcmFtZSh3aWR0aCwgaGVpZ2h0LCBBVl9QSVhfRk1UX1lVVjQyMFApKTtcblxuICAgIHN0YWNrLm1vdmUoKTtcbiAgICByZXR1cm4gbmV3IE52ZW5jRHVhbExheWVyRW5jb2Rlcih7XG4gICAgICBiYXNlQ3R4LFxuICAgICAgYWxwaGFDdHgsXG4gICAgICBiYXNlUGt0LFxuICAgICAgYWxwaGFQa3QsXG4gICAgICBzdHJlYW0sXG4gICAgICBhbHBoYVN3RnJhbWUsXG4gICAgICBhbHBoYUJ1ZixcbiAgICAgIGhldmNDZmcsXG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBlbmNvZGUoYmdyYUZyYW1lOiBGcmFtZSwgbXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyBiYXNlQ3R4LCBhbHBoYUN0eCwgYWxwaGFTd0ZyYW1lLCBhbHBoYUJ1ZiB9ID0gdGhpcy5fcztcbiAgICBjb25zdCBwdHMgPSB0aGlzLl9wdHMrKztcblxuICAgIC8vIEV4dHJhY3QgdGhlIGFscGhhIHBsYW5lIGJlZm9yZSBiYXNlLnNlbmRGcmFtZSDigJQgdGhlIGVuY29kZXIgdW5yZWZzIHRoZSBpbnB1dCBmcmFtZS5cbiAgICBleHRyYWN0QWxwaGFUb1l1djQyMHBCdWZmZXIoYmdyYUZyYW1lLCBhbHBoYUJ1Zik7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGFscGhhU3dGcmFtZS5tYWtlV3JpdGFibGUoKSwgXCJhbHBoYVN3Lm1ha2VXcml0YWJsZVwiKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYWxwaGFTd0ZyYW1lLmZyb21CdWZmZXIoYWxwaGFCdWYpLCBcImFscGhhU3cuZnJvbUJ1ZmZlclwiKTtcbiAgICBhbHBoYVN3RnJhbWUucHRzID0gcHRzO1xuICAgIGFscGhhU3dGcmFtZS5kdXJhdGlvbiA9IDFuO1xuXG4gICAgYmdyYUZyYW1lLnB0cyA9IHB0cztcbiAgICBiZ3JhRnJhbWUuZHVyYXRpb24gPSAxbjtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgYmFzZUN0eC5zZW5kRnJhbWUoYmdyYUZyYW1lKSwgXCJiYXNlLnNlbmRGcmFtZVwiKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgYWxwaGFDdHguc2VuZEZyYW1lKGFscGhhU3dGcmFtZSksIFwiYWxwaGEuc2VuZEZyYW1lXCIpO1xuXG4gICAgYXdhaXQgdGhpcy5fbXV4LmRyYWluKG11eGVyKTtcbiAgfVxuXG4gIGFzeW5jIGZsdXNoKG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuc2VuZEVvZih0aGlzLl9zLmJhc2VDdHgsIFwiYmFzZVwiKTtcbiAgICBhd2FpdCB0aGlzLnNlbmRFb2YodGhpcy5fcy5hbHBoYUN0eCwgXCJhbHBoYVwiKTtcbiAgICBhd2FpdCB0aGlzLl9tdXguZHJhaW4obXV4ZXIpO1xuICAgIGNvbnN0IGRlc3luYyA9IHRoaXMuX211eC5kZXN5bmNBZnRlckVvZigpO1xuICAgIGlmIChkZXN5bmMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTlZFTkMgZGVzeW5jOiAke2Rlc3luY31gKTtcbiAgICB9XG4gIH1cblxuICBbU3ltYm9sLmRpc3Bvc2VdKCk6IHZvaWQge1xuICAgIGNvbnN0IHsgYmFzZVBrdCwgYWxwaGFQa3QsIGJhc2VDdHgsIGFscGhhQ3R4LCBhbHBoYVN3RnJhbWUgfSA9IHRoaXMuX3M7XG4gICAgYmFzZVBrdC5mcmVlKCk7XG4gICAgYWxwaGFQa3QuZnJlZSgpO1xuICAgIGFscGhhU3dGcmFtZS5mcmVlKCk7XG4gICAgLy8gTlZJRElBIGRyaXZlciA1MjAuNTYuMDYrIFVBRiBpbiBsaWJudmN1dmlkIG9uIGNyZWF0aW9uLW9yZGVyIHNlc3Npb24gZnJlZSDigJQgTElGTyBkZXN0cm95IGF2b2lkcyBpdCAoZm9ydW0gL3QvMjY5OTc0KS5cbiAgICBhbHBoYUN0eC5mcmVlQ29udGV4dCgpO1xuICAgIGJhc2VDdHguZnJlZUNvbnRleHQoKTtcbiAgfVxuXG4gIC8vIEVPRiBmbHVzaDsgRUFHQUlOL0VPRiByZXR1cm5zIGFyZSBiZW5pZ24gKGFscmVhZHktZHJhaW5pbmcgZW5jb2RlcikuXG4gIHByaXZhdGUgYXN5bmMgc2VuZEVvZihjdHg6IENvZGVjQ29udGV4dCwgdGFnOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCByZXQgPSBhd2FpdCBjdHguc2VuZEZyYW1lKG51bGwpO1xuICAgIGlmIChyZXQgPCAwICYmIHJldCAhPT0gQVZFUlJPUl9FQUdBSU4gJiYgcmV0ICE9PSBBVkVSUk9SX0VPRikge1xuICAgICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKHJldCwgYG52ZW5jLiR7dGFnfS5zZW5kRnJhbWUobnVsbClgKTtcbiAgICB9XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDMvMjEuXG5cbmltcG9ydCB7IENvZGVjLCB0eXBlIENvZGVjQ29udGV4dCwgRkZtcGVnRXJyb3IsIHR5cGUgRnJhbWUsIHR5cGUgUGFja2V0LCB0eXBlIFN0cmVhbSB9IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQgdHlwZSB7IEFWUGl4ZWxGb3JtYXQsIEZGVmlkZW9FbmNvZGVyIH0gZnJvbSBcIm5vZGUtYXYvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBkcmFpblBhY2tldHMsIG1ha2VQYWNrZXQsIG9wZW5WaWRlb0N0eCB9IGZyb20gXCIuL21pc2NcIjtcbmltcG9ydCB0eXBlIHsgRm9ybWF0TXV4ZXIgfSBmcm9tIFwiLi9tdXhlclwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFZpZGVvRW5jb2Rlck9wdGlvbnMge1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgZnBzOiBudW1iZXI7XG4gIGNvZGVjTmFtZTogRkZWaWRlb0VuY29kZXI7XG4gIGNvZGVjVGFnPzogc3RyaW5nO1xuICBjb2RlY09wdHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIGJpdHJhdGU6IG51bWJlcjtcbiAgcGl4ZWxGb3JtYXQ6IEFWUGl4ZWxGb3JtYXQ7XG4gIG11eGVyOiBGb3JtYXRNdXhlcjtcbn1cblxuZXhwb3J0IGNsYXNzIFZpZGVvRW5jb2RlciBpbXBsZW1lbnRzIERpc3Bvc2FibGUge1xuICBwcml2YXRlIHJlYWRvbmx5IF9jdHg6IENvZGVjQ29udGV4dDtcbiAgcHJpdmF0ZSByZWFkb25seSBfcGt0OiBQYWNrZXQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N0cmVhbTogU3RyZWFtO1xuICBwcml2YXRlIF9wdHMgPSAwbjtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKGN0eDogQ29kZWNDb250ZXh0LCBwa3Q6IFBhY2tldCwgc3RyZWFtOiBTdHJlYW0pIHtcbiAgICB0aGlzLl9jdHggPSBjdHg7XG4gICAgdGhpcy5fcGt0ID0gcGt0O1xuICAgIHRoaXMuX3N0cmVhbSA9IHN0cmVhbTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBjcmVhdGUob3B0czogVmlkZW9FbmNvZGVyT3B0aW9ucyk6IFByb21pc2U8VmlkZW9FbmNvZGVyPiB7XG4gICAgY29uc3QgeyBjb2RlY05hbWUsIGNvZGVjVGFnLCBjb2RlY09wdHMsIG11eGVyLCAuLi5yZXN0IH0gPSBvcHRzO1xuXG4gICAgY29uc3QgY29kZWMgPSBDb2RlYy5maW5kRW5jb2RlckJ5TmFtZShjb2RlY05hbWUpO1xuICAgIGlmICghY29kZWMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVmlkZW8gZW5jb2RlciBub3QgZm91bmQ6ICR7Y29kZWNOYW1lfWApO1xuICAgIH1cblxuICAgIC8vIFBhcnRpYWwtY29uc3RydWN0aW9uIHNhZmV0eTogc3RhY2sgZGlzcG9zZXMgY3R4L3BrdCBpZiBhIGxhdGVyIHN0ZXAgdGhyb3dzOyBtb3ZlKCkgZGlzb3ducyBvbiBzdWNjZXNzLlxuICAgIHVzaW5nIHN0YWNrID0gbmV3IERpc3Bvc2FibGVTdGFjaygpO1xuICAgIGNvbnN0IGN0eCA9IHN0YWNrLnVzZShhd2FpdCBvcGVuVmlkZW9DdHgoeyBjb2RlYywgLi4ucmVzdCwgY29kZWNUYWcsIG9wdGlvbnM6IGNvZGVjT3B0cyB9LCBcInZpZGVvQ3R4Lm9wZW4yXCIpKTtcbiAgICBjb25zdCBwa3QgPSBzdGFjay51c2UobWFrZVBhY2tldCgpKTtcbiAgICBjb25zdCBzdHJlYW0gPSBtdXhlci5hZGRTdHJlYW0oY3R4LCBjb2RlY1RhZyk7XG4gICAgc3RhY2subW92ZSgpO1xuICAgIHJldHVybiBuZXcgVmlkZW9FbmNvZGVyKGN0eCwgcGt0LCBzdHJlYW0pO1xuICB9XG5cbiAgYXN5bmMgZW5jb2RlKGZyYW1lOiBGcmFtZSwgbXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgZnJhbWUucHRzID0gdGhpcy5fcHRzKys7XG4gICAgZnJhbWUuZHVyYXRpb24gPSAxbjtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgdGhpcy5fY3R4LnNlbmRGcmFtZShmcmFtZSksIFwidmlkZW9DdHguc2VuZEZyYW1lXCIpO1xuICAgIGF3YWl0IHRoaXMuZHJhaW4obXV4ZXIpO1xuICB9XG5cbiAgYXN5bmMgZmx1c2gobXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5fY3R4LnNlbmRGcmFtZShudWxsKTtcbiAgICBhd2FpdCB0aGlzLmRyYWluKG11eGVyKTtcbiAgfVxuXG4gIFtTeW1ib2wuZGlzcG9zZV0oKTogdm9pZCB7XG4gICAgdGhpcy5fcGt0LmZyZWUoKTtcbiAgICB0aGlzLl9jdHguZnJlZUNvbnRleHQoKTtcbiAgfVxuXG4gIHByaXZhdGUgZHJhaW4obXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIGRyYWluUGFja2V0cyh0aGlzLl9jdHgsIHRoaXMuX3BrdCwgdGhpcy5fc3RyZWFtLCBtdXhlcik7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMTIuXG5cbmltcG9ydCB7IHR5cGUgQ29kZWNDb250ZXh0LCBGRm1wZWdFcnJvciwgdHlwZSBGcmFtZSwgdHlwZSBQYWNrZXQsIHR5cGUgU3RyZWFtIH0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB0eXBlIHsgSGFyZHdhcmVDb250ZXh0IH0gZnJvbSBcIm5vZGUtYXYvYXBpXCI7XG5pbXBvcnQgeyBBVl9QSVhfRk1UX0JHUkEsIEFWQ09MX1JBTkdFX0pQRUcgfSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcbmltcG9ydCB7IGRyYWluUGFja2V0cywgbWFrZVBhY2tldCwgb3BlblZpZGVvQ3R4IH0gZnJvbSBcIi4vbWlzY1wiO1xuaW1wb3J0IHR5cGUgeyBGb3JtYXRNdXhlciB9IGZyb20gXCIuL211eGVyXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSHdWaWRlb0VuY29kZXJPcHRpb25zIHtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIGZwczogbnVtYmVyO1xuICBodzogSGFyZHdhcmVDb250ZXh0O1xuICBiaXRyYXRlOiBudW1iZXI7XG4gIG11eGVyOiBGb3JtYXRNdXhlcjtcbn1cblxuZXhwb3J0IGNsYXNzIFZpZGVvVG9vbGJveEVuY29kZXIgaW1wbGVtZW50cyBEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSBfY3R4OiBDb2RlY0NvbnRleHQ7XG4gIHByaXZhdGUgX3BrdDogUGFja2V0O1xuICBwcml2YXRlIF9zdHJlYW06IFN0cmVhbTtcbiAgcHJpdmF0ZSBfcHRzID0gMG47XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihjdHg6IENvZGVjQ29udGV4dCwgcGt0OiBQYWNrZXQsIHN0cmVhbTogU3RyZWFtKSB7XG4gICAgdGhpcy5fY3R4ID0gY3R4O1xuICAgIHRoaXMuX3BrdCA9IHBrdDtcbiAgICB0aGlzLl9zdHJlYW0gPSBzdHJlYW07XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgY3JlYXRlKG9wdHM6IEh3VmlkZW9FbmNvZGVyT3B0aW9ucyk6IFByb21pc2U8VmlkZW9Ub29sYm94RW5jb2Rlcj4ge1xuICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgZnBzLCBodywgYml0cmF0ZSwgbXV4ZXIgfSA9IG9wdHM7XG5cbiAgICBjb25zdCBjb2RlYyA9IGh3LmdldEVuY29kZXJDb2RlYyhcImhldmNcIik7XG4gICAgaWYgKCFjb2RlYykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaGV2Y192aWRlb3Rvb2xib3ggZW5jb2RlciBub3QgZm91bmRcIik7XG4gICAgfVxuXG4gICAgY29uc3QgY3R4ID0gYXdhaXQgb3BlblZpZGVvQ3R4KFxuICAgICAge1xuICAgICAgICBjb2RlYyxcbiAgICAgICAgd2lkdGgsXG4gICAgICAgIGhlaWdodCxcbiAgICAgICAgZnBzLFxuICAgICAgICBiaXRyYXRlLFxuICAgICAgICBwaXhlbEZvcm1hdDogQVZfUElYX0ZNVF9CR1JBLFxuICAgICAgICBjb2xvclJhbmdlOiBBVkNPTF9SQU5HRV9KUEVHLFxuICAgICAgICBjb2RlY1RhZzogXCJodmMxXCIsXG4gICAgICAgIG9wdGlvbnM6IHsgYWxwaGFfcXVhbGl0eTogXCIxXCIgfSxcbiAgICAgIH0sXG4gICAgICBcInZ0RW5jLm9wZW4yXCIsXG4gICAgKTtcbiAgICAvLyBQYXJ0aWFsLWNvbnN0cnVjdGlvbiBzYWZldHk6IHN0YWNrIGRpc3Bvc2VzIGN0eC9wa3QgaWYgYSBsYXRlciBzdGVwIHRocm93czsgbW92ZSgpIGRpc293bnMgb24gc3VjY2Vzcy5cbiAgICB1c2luZyBzdGFjayA9IG5ldyBEaXNwb3NhYmxlU3RhY2soKTtcbiAgICBzdGFjay51c2UoY3R4KTtcbiAgICBjb25zdCBwa3QgPSBzdGFjay51c2UobWFrZVBhY2tldCgpKTtcbiAgICBjb25zdCBzdHJlYW0gPSBtdXhlci5hZGRTdHJlYW0oY3R4LCBcImh2YzFcIik7XG4gICAgc3RhY2subW92ZSgpO1xuICAgIHJldHVybiBuZXcgVmlkZW9Ub29sYm94RW5jb2RlcihjdHgsIHBrdCwgc3RyZWFtKTtcbiAgfVxuXG4gIGFzeW5jIGVuY29kZShiZ3JhRnJhbWU6IEZyYW1lLCBtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBiZ3JhRnJhbWUucHRzID0gdGhpcy5fcHRzKys7XG4gICAgYmdyYUZyYW1lLmR1cmF0aW9uID0gMW47XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IHRoaXMuX2N0eC5zZW5kRnJhbWUoYmdyYUZyYW1lKSwgXCJ2dEVuYy5zZW5kRnJhbWVcIik7XG4gICAgYXdhaXQgdGhpcy5kcmFpbihtdXhlcik7XG4gIH1cblxuICBhc3luYyBmbHVzaChtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLl9jdHguc2VuZEZyYW1lKG51bGwpO1xuICAgIGF3YWl0IHRoaXMuZHJhaW4obXV4ZXIpO1xuICB9XG5cbiAgW1N5bWJvbC5kaXNwb3NlXSgpOiB2b2lkIHtcbiAgICB0aGlzLl9wa3QuZnJlZSgpO1xuICAgIHRoaXMuX2N0eC5mcmVlQ29udGV4dCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBkcmFpbihtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gZHJhaW5QYWNrZXRzKHRoaXMuX2N0eCwgdGhpcy5fcGt0LCB0aGlzLl9zdHJlYW0sIG11eGVyKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8xMy5cblxuaW1wb3J0IHsgSGFyZHdhcmVDb250ZXh0IH0gZnJvbSBcIm5vZGUtYXYvYXBpXCI7XG5pbXBvcnQge1xuICBBVl9QSVhfRk1UX1lVVkE0MjBQLFxuICBGRl9FTkNPREVSX0xJQlgyNjUsXG4gIEZGX0hXREVWSUNFX1RZUEVfQ1VEQSxcbiAgRkZfSFdERVZJQ0VfVFlQRV9WSURFT1RPT0xCT1gsXG59IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuXG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi4vbG9nZ2luZ1wiO1xuaW1wb3J0IHsgQ29kZWNTdGF0ZSB9IGZyb20gXCIuL2NvZGVjXCI7XG5pbXBvcnQgeyBOdmVuY0R1YWxMYXllckVuY29kZXIgfSBmcm9tIFwiLi9oZXZjX2FscGhhL252ZW5jXCI7XG5pbXBvcnQgdHlwZSB7IEZvcm1hdE11eGVyIH0gZnJvbSBcIi4vbXV4ZXJcIjtcbmltcG9ydCB7IFZpZGVvRW5jb2RlciB9IGZyb20gXCIuL3ZpZGVvXCI7XG5pbXBvcnQgeyBWaWRlb1Rvb2xib3hFbmNvZGVyIH0gZnJvbSBcIi4vdmlkZW90b29sYm94XCI7XG5cbmNvbnN0IFRBRyA9IFwiW0VuY29kZXJdXCI7XG5cbmV4cG9ydCB0eXBlIEh3RW5jb2RlciA9IFZpZGVvVG9vbGJveEVuY29kZXIgfCBOdmVuY0R1YWxMYXllckVuY29kZXI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmlkZW9TZXR1cCB7XG4gIHZpZGVvPzogVmlkZW9FbmNvZGVyO1xuICBod1ZpZGVvPzogSHdFbmNvZGVyO1xuICBjb2RlYz86IENvZGVjU3RhdGU7XG4gIGh3PzogSGFyZHdhcmVDb250ZXh0O1xuICBvd25zSHc6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSHdWaWRlb0ZhY3RvcnlPcHRpb25zIHtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIGZwczogbnVtYmVyO1xuICBiaXRyYXRlPzogbnVtYmVyO1xuICBkaXNhYmxlSHdDb2RlYz86IGJvb2xlYW47XG4gIHNoYXJlZEh3PzogSGFyZHdhcmVDb250ZXh0O1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlSHdWaWRlb0VuY29kZXIob3B0czogSHdWaWRlb0ZhY3RvcnlPcHRpb25zLCBtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPFZpZGVvU2V0dXA+IHtcbiAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0LCBmcHMsIGJpdHJhdGUgPSA4XzAwMF8wMDAsIGRpc2FibGVId0NvZGVjID0gZmFsc2UsIHNoYXJlZEh3IH0gPSBvcHRzO1xuICBjb25zdCBodyA9IHNoYXJlZEh3ID8/IChkaXNhYmxlSHdDb2RlYyA/IHVuZGVmaW5lZCA6IChIYXJkd2FyZUNvbnRleHQuYXV0bygpID8/IHVuZGVmaW5lZCkpO1xuICBjb25zdCBvd25zSHcgPSAhc2hhcmVkSHcgJiYgISFodztcblxuICB0cnkge1xuICAgIGlmIChodz8uZGV2aWNlVHlwZU5hbWUgPT09IEZGX0hXREVWSUNFX1RZUEVfVklERU9UT09MQk9YICYmIGh3LmdldEVuY29kZXJDb2RlYyhcImhldmNcIikpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhUQUcsIFwidXNpbmcgVmlkZW9Ub29sYm94IEhFVkMgYWxwaGEgZW5jb2RlclwiKTtcbiAgICAgIGNvbnN0IGh3VmlkZW8gPSBhd2FpdCBWaWRlb1Rvb2xib3hFbmNvZGVyLmNyZWF0ZSh7IHdpZHRoLCBoZWlnaHQsIGZwcywgaHcsIGJpdHJhdGUsIG11eGVyIH0pO1xuICAgICAgcmV0dXJuIHsgaHdWaWRlbywgaHcsIG93bnNIdyB9O1xuICAgIH1cbiAgICBpZiAoaHc/LmRldmljZVR5cGVOYW1lID09PSBGRl9IV0RFVklDRV9UWVBFX0NVREEgJiYgaHcuZ2V0RW5jb2RlckNvZGVjKFwiaGV2Y1wiKSkge1xuICAgICAgbG9nZ2VyLmRlYnVnKFRBRywgXCJ1c2luZyBOVkVOQyBkdWFsLWxheWVyIEhFVkMgYWxwaGEgZW5jb2RlclwiKTtcbiAgICAgIGNvbnN0IGh3VmlkZW8gPSBhd2FpdCBOdmVuY0R1YWxMYXllckVuY29kZXIuY3JlYXRlKHsgd2lkdGgsIGhlaWdodCwgZnBzLCBodywgYml0cmF0ZSwgbXV4ZXIgfSk7XG4gICAgICByZXR1cm4geyBod1ZpZGVvLCBodywgb3duc0h3IH07XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgbG9nZ2VyLndhcm4oVEFHLCBcIkhhcmR3YXJlIGNvZGVjIHNlc3Npb24gbGltaXRzIHJlYWNoZWQsIHVzZSBzb2Z0d2FyZSBlbmNvZGVyXCIsIGUpO1xuICAgIGlmIChvd25zSHcpIHtcbiAgICAgIGh3Py5kaXNwb3NlKCk7XG4gICAgfVxuICB9XG5cbiAgbG9nZ2VyLmRlYnVnKFRBRywgXCJ1c2luZyBzb2Z0d2FyZSBsaWJ4MjY1IEhFVkMgYWxwaGEgZW5jb2RlclwiKTtcbiAgLy8gUGFydGlhbC1jb25zdHJ1Y3Rpb24gc2FmZXR5OiBmcmVlIHRoZSB2aWRlbyBlbmNvZGVyIGlmIENvZGVjU3RhdGUuY3JlYXRlIHRocm93czsgbW92ZSgpIGRpc293bnMgb24gc3VjY2Vzcy5cbiAgdXNpbmcgc3RhY2sgPSBuZXcgRGlzcG9zYWJsZVN0YWNrKCk7XG4gIGNvbnN0IHZpZGVvID0gc3RhY2sudXNlKFxuICAgIGF3YWl0IFZpZGVvRW5jb2Rlci5jcmVhdGUoe1xuICAgICAgd2lkdGgsXG4gICAgICBoZWlnaHQsXG4gICAgICBmcHMsXG4gICAgICBjb2RlY05hbWU6IEZGX0VOQ09ERVJfTElCWDI2NSxcbiAgICAgIGNvZGVjVGFnOiBcImh2YzFcIixcbiAgICAgIGNvZGVjT3B0czogeyBwcmVzZXQ6IFwiZmFzdFwiLCBcIngyNjUtcGFyYW1zXCI6IFwibG9nLWxldmVsPTE6YmZyYW1lcz0zOnBvb2xzPSs6ZnJhbWUtdGhyZWFkcz0wXCIgfSxcbiAgICAgIGJpdHJhdGUsXG4gICAgICBwaXhlbEZvcm1hdDogQVZfUElYX0ZNVF9ZVVZBNDIwUCxcbiAgICAgIG11eGVyLFxuICAgIH0pLFxuICApO1xuICBjb25zdCBjb2RlYyA9IHN0YWNrLnVzZShhd2FpdCBDb2RlY1N0YXRlLmNyZWF0ZSh3aWR0aCwgaGVpZ2h0KSk7XG4gIHN0YWNrLm1vdmUoKTtcbiAgcmV0dXJuIHsgdmlkZW8sIGNvZGVjLCBvd25zSHc6IGZhbHNlIH07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAzLzIxLlxuXG5pbXBvcnQgeyB0eXBlIENvZGVjQ29udGV4dCwgRGljdGlvbmFyeSwgRkZtcGVnRXJyb3IsIEZvcm1hdENvbnRleHQsIHR5cGUgUGFja2V0LCB0eXBlIFN0cmVhbSB9IGZyb20gXCJub2RlLWF2XCI7XG5cbmV4cG9ydCBjbGFzcyBGb3JtYXRNdXhlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2N0eDogRm9ybWF0Q29udGV4dDtcbiAgcHJpdmF0ZSBfb3BlbmVkID0gZmFsc2U7XG4gIHByaXZhdGUgX2Rpc3Bvc2VkID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3Iob3V0UGF0aDogc3RyaW5nLCBmb3JtYXROYW1lPzogc3RyaW5nKSB7XG4gICAgdGhpcy5fY3R4ID0gbmV3IEZvcm1hdENvbnRleHQoKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IodGhpcy5fY3R4LmFsbG9jT3V0cHV0Q29udGV4dDIobnVsbCwgZm9ybWF0TmFtZSA/PyBudWxsLCBvdXRQYXRoKSwgXCJhbGxvY091dHB1dENvbnRleHQyXCIpO1xuICB9XG5cbiAgYWRkU3RyZWFtKGNvZGVjQ3R4OiBDb2RlY0NvbnRleHQsIGNvZGVjVGFnPzogc3RyaW5nKTogU3RyZWFtIHtcbiAgICBjb25zdCBzdHJlYW0gPSB0aGlzLl9jdHgubmV3U3RyZWFtKG51bGwpO1xuICAgIHN0cmVhbS50aW1lQmFzZSA9IGNvZGVjQ3R4LnRpbWVCYXNlO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihzdHJlYW0uY29kZWNwYXIuZnJvbUNvbnRleHQoY29kZWNDdHgpLCBcImNvZGVjcGFyLmZyb21Db250ZXh0XCIpO1xuICAgIGlmIChjb2RlY1RhZykge1xuICAgICAgc3RyZWFtLmNvZGVjcGFyLmNvZGVjVGFnID0gY29kZWNUYWc7XG4gICAgfVxuICAgIHJldHVybiBzdHJlYW07XG4gIH1cblxuICBhc3luYyBvcGVuKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9vcGVuZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IHRoaXMuX2N0eC5vcGVuT3V0cHV0KCksIFwib3Blbk91dHB1dFwiKTtcbiAgICAvLyArZmFzdHN0YXJ0IHJlbG9jYXRlcyBtb292IHRvIGZpbGUgZnJvbnQgb24gd3JpdGVUcmFpbGVyIHNvIHBsYXllcnMgY2FuIGJlZ2luIHBsYXliYWNrIGJlZm9yZSBmdWxsIGRvd25sb2FkLlxuICAgIHVzaW5nIG9wdHMgPSBEaWN0aW9uYXJ5LmZyb21PYmplY3QoeyBtb3ZmbGFnczogXCIrZmFzdHN0YXJ0XCIgfSk7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IHRoaXMuX2N0eC53cml0ZUhlYWRlcihvcHRzKSwgXCJ3cml0ZUhlYWRlclwiKTtcbiAgICB0aGlzLl9vcGVuZWQgPSB0cnVlO1xuICB9XG5cbiAgYXN5bmMgd3JpdGVQYWNrZXQocGt0OiBQYWNrZXQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgdGhpcy5fY3R4LmludGVybGVhdmVkV3JpdGVGcmFtZShwa3QpLCBcImludGVybGVhdmVkV3JpdGVGcmFtZVwiKTtcbiAgfVxuXG4gIGFzeW5jIFtTeW1ib2wuYXN5bmNEaXNwb3NlXSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fZGlzcG9zZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fZGlzcG9zZWQgPSB0cnVlO1xuICAgIHRyeSB7XG4gICAgICBpZiAodGhpcy5fb3BlbmVkKSB7XG4gICAgICAgIHRoaXMuX29wZW5lZCA9IGZhbHNlO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IHRoaXMuX2N0eC53cml0ZVRyYWlsZXIoKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAvLyBBIGZhaWxlZC90cnVuY2F0ZWQgdHJhaWxlciB3cml0ZSBtdXN0IG5vdCBsZWFrIHRoZSBGRC5cbiAgICAgICAgICBhd2FpdCB0aGlzLl9jdHguY2xvc2VPdXRwdXQoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICAvLyBBbHdheXMgZnJlZSB0aGUgbmF0aXZlIGNvbnRleHQg4oCUIGV2ZW4gYSBuZXZlci1vcGVuZWQgbXV4ZXIgYWxsb2NhdGVkIG9uZSBpbiB0aGUgY29uc3RydWN0b3IuXG4gICAgICBhd2FpdCB0aGlzLl9jdHhbU3ltYm9sLmFzeW5jRGlzcG9zZV0oKTtcbiAgICB9XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMjQuXG5cbmltcG9ydCB7IG9rIH0gZnJvbSBcIm5vZGU6YXNzZXJ0XCI7XG5pbXBvcnQgeyBGRm1wZWdFcnJvciwgdHlwZSBGcmFtZSB9IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQgdHlwZSB7IEhhcmR3YXJlQ29udGV4dCB9IGZyb20gXCJub2RlLWF2L2FwaVwiO1xuaW1wb3J0IHtcbiAgQVZfUElYX0ZNVF9ZVVZBNDIwUCxcbiAgQVZfU0FNUExFX0ZNVF9GTFQsXG4gIEFWX1NBTVBMRV9GTVRfRkxUUCxcbiAgRkZfRU5DT0RFUl9BQUMsXG4gIEZGX0VOQ09ERVJfTElCT1BVUyxcbn0gZnJvbSBcIm5vZGUtYXYvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBBdWRpb0VuY29kZXIgfSBmcm9tIFwiLi9hdWRpb1wiO1xuaW1wb3J0IHsgQ29kZWNTdGF0ZSB9IGZyb20gXCIuL2NvZGVjXCI7XG5pbXBvcnQgeyBjcmVhdGVId1ZpZGVvRW5jb2RlciwgdHlwZSBId0VuY29kZXIsIHR5cGUgVmlkZW9TZXR1cCB9IGZyb20gXCIuL2ZhY3RvcnlcIjtcbmltcG9ydCB7IEZGX0VOQ09ERVJfTElCVlBYX1ZQOSB9IGZyb20gXCIuL21pc2NcIjtcbmltcG9ydCB7IEZvcm1hdE11eGVyIH0gZnJvbSBcIi4vbXV4ZXJcIjtcbmltcG9ydCB7IFZpZGVvRW5jb2RlciB9IGZyb20gXCIuL3ZpZGVvXCI7XG5cbmV4cG9ydCB0eXBlIFNpbmtLaW5kID0gXCJtcDRcIiB8IFwid2VibVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNpbmtPcHRpb25zIHtcbiAgb3V0RmlsZTogc3RyaW5nO1xuICBraW5kOiBTaW5rS2luZDtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIGZwczogbnVtYmVyO1xuICB3aXRoQXVkaW86IGJvb2xlYW47XG4gIGRpc2FibGVId0NvZGVjOiBib29sZWFuO1xuICBzaGFyZWRIdz86IEhhcmR3YXJlQ29udGV4dDtcbn1cblxuaW50ZXJmYWNlIFNpbmtTdGF0ZSB7XG4gIG11eGVyOiBGb3JtYXRNdXhlcjtcbiAgdmlkZW8/OiBWaWRlb0VuY29kZXI7XG4gIGh3VmlkZW8/OiBId0VuY29kZXI7XG4gIGF1ZGlvPzogQXVkaW9FbmNvZGVyO1xuICBjb2RlYz86IENvZGVjU3RhdGU7XG4gIG93bnNIdzogYm9vbGVhbjtcbiAgaHc/OiBIYXJkd2FyZUNvbnRleHQ7XG4gIG9wdHM6IFNpbmtPcHRpb25zO1xufVxuXG5leHBvcnQgY2xhc3MgT3V0cHV0U2luayBpbXBsZW1lbnRzIEFzeW5jRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgX3M6IFNpbmtTdGF0ZTtcbiAgcHJpdmF0ZSBfZGlzcG9zZWQgPSBmYWxzZTtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHM6IFNpbmtTdGF0ZSkge1xuICAgIHRoaXMuX3MgPSBzO1xuICB9XG5cbiAgc3RhdGljIGtpbmRGcm9tUGF0aChwYXRoOiBzdHJpbmcpOiBTaW5rS2luZCB7XG4gICAgY29uc3QgbG93ZXIgPSBwYXRoLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKGxvd2VyLmVuZHNXaXRoKFwiLndlYm1cIikpIHtcbiAgICAgIHJldHVybiBcIndlYm1cIjtcbiAgICB9XG4gICAgaWYgKGxvd2VyLmVuZHNXaXRoKFwiLm1wNFwiKSB8fCBsb3dlci5lbmRzV2l0aChcIi5tb3ZcIikpIHtcbiAgICAgIHJldHVybiBcIm1wNFwiO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIG91dHB1dCBleHRlbnNpb246ICR7cGF0aH1gKTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBjcmVhdGUob3B0czogU2lua09wdGlvbnMpOiBQcm9taXNlPE91dHB1dFNpbms+IHtcbiAgICAvLyBQYXJ0aWFsLWNvbnN0cnVjdGlvbiBzYWZldHk6IGRpc3Bvc2UgbXV4ZXIvZW5jb2RlcnMgaWYgYSBsYXRlciBzdGVwIHRocm93czsgbW92ZSgpIGRpc293bnMgb24gc3VjY2Vzcy5cbiAgICBhd2FpdCB1c2luZyBzdGFjayA9IG5ldyBBc3luY0Rpc3Bvc2FibGVTdGFjaygpO1xuICAgIGNvbnN0IG11eGVyID0gc3RhY2sudXNlKG5ldyBGb3JtYXRNdXhlcihvcHRzLm91dEZpbGUpKTtcbiAgICBjb25zdCBzZXR1cCA9XG4gICAgICBvcHRzLmtpbmQgPT09IFwibXA0XCIgPyBhd2FpdCBPdXRwdXRTaW5rLm1wNFZpZGVvKG9wdHMsIG11eGVyKSA6IGF3YWl0IE91dHB1dFNpbmsud2VibVZpZGVvKG9wdHMsIG11eGVyKTtcbiAgICBpZiAoc2V0dXAudmlkZW8pIHtcbiAgICAgIHN0YWNrLnVzZShzZXR1cC52aWRlbyk7XG4gICAgfVxuICAgIGlmIChzZXR1cC5od1ZpZGVvKSB7XG4gICAgICBzdGFjay51c2Uoc2V0dXAuaHdWaWRlbyk7XG4gICAgfVxuICAgIGlmIChzZXR1cC5jb2RlYykge1xuICAgICAgc3RhY2sudXNlKHNldHVwLmNvZGVjKTtcbiAgICB9XG4gICAgLy8gT25seSBhIHNpbmstb3duZWQgaHcgZGV2aWNlIGlzIG91cnMgdG8gZnJlZSBoZXJlOyBhIHNoYXJlZCBkZXZpY2UgYmVsb25ncyB0byB0aGUgcGlwZWxpbmUuXG4gICAgaWYgKHNldHVwLm93bnNIdyAmJiBzZXR1cC5odykge1xuICAgICAgc3RhY2sudXNlKHNldHVwLmh3KTtcbiAgICB9XG4gICAgY29uc3QgYXVkaW8gPSBvcHRzLndpdGhBdWRpbyA/IGF3YWl0IE91dHB1dFNpbmsuYXVkaW9Gb3Iob3B0cywgbXV4ZXIpIDogdW5kZWZpbmVkO1xuICAgIGlmIChhdWRpbykge1xuICAgICAgc3RhY2sudXNlKGF1ZGlvKTtcbiAgICB9XG4gICAgYXdhaXQgbXV4ZXIub3BlbigpO1xuICAgIHN0YWNrLm1vdmUoKTtcbiAgICByZXR1cm4gbmV3IE91dHB1dFNpbmsoeyBtdXhlciwgLi4uc2V0dXAsIGF1ZGlvLCBvcHRzIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgbXA0VmlkZW8ob3B0czogU2lua09wdGlvbnMsIG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8VmlkZW9TZXR1cD4ge1xuICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgZnBzLCBkaXNhYmxlSHdDb2RlYywgc2hhcmVkSHcgfSA9IG9wdHM7XG4gICAgcmV0dXJuIGNyZWF0ZUh3VmlkZW9FbmNvZGVyKHsgd2lkdGgsIGhlaWdodCwgZnBzLCBkaXNhYmxlSHdDb2RlYywgc2hhcmVkSHcgfSwgbXV4ZXIpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgYXN5bmMgd2VibVZpZGVvKG9wdHM6IFNpbmtPcHRpb25zLCBtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPFZpZGVvU2V0dXA+IHtcbiAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQsIGZwcyB9ID0gb3B0cztcbiAgICBjb25zdCB2aWRlbyA9IGF3YWl0IFZpZGVvRW5jb2Rlci5jcmVhdGUoe1xuICAgICAgd2lkdGgsXG4gICAgICBoZWlnaHQsXG4gICAgICBmcHMsXG4gICAgICBjb2RlY05hbWU6IEZGX0VOQ09ERVJfTElCVlBYX1ZQOSxcbiAgICAgIGNvZGVjT3B0czoge1xuICAgICAgICBkZWFkbGluZTogXCJyZWFsdGltZVwiLFxuICAgICAgICBcImNwdS11c2VkXCI6IFwiOFwiLFxuICAgICAgICBcInJvdy1tdFwiOiBcIjFcIixcbiAgICAgICAgdGhyZWFkczogXCIyXCIsXG4gICAgICB9LFxuICAgICAgYml0cmF0ZTogNF8wMDBfMDAwLFxuICAgICAgcGl4ZWxGb3JtYXQ6IEFWX1BJWF9GTVRfWVVWQTQyMFAsXG4gICAgICBtdXhlcixcbiAgICB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgdmlkZW8sXG4gICAgICBjb2RlYzogYXdhaXQgQ29kZWNTdGF0ZS5jcmVhdGUod2lkdGgsIGhlaWdodCksXG4gICAgICBvd25zSHc6IGZhbHNlLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBhdWRpb0ZvcihvcHRzOiBTaW5rT3B0aW9ucywgbXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTxBdWRpb0VuY29kZXI+IHtcbiAgICAvLyBPcHVzIHJlamVjdHMgNDQuMWsuXG4gICAgY29uc3QgY2ZnID1cbiAgICAgIG9wdHMua2luZCA9PT0gXCJtcDRcIlxuICAgICAgICA/IHtcbiAgICAgICAgICAgIG91dFNhbXBsZVJhdGU6IDQ0XzEwMCxcbiAgICAgICAgICAgIG91dFNhbXBsZUZtdDogQVZfU0FNUExFX0ZNVF9GTFRQLFxuICAgICAgICAgICAgY29kZWNOYW1lOiBGRl9FTkNPREVSX0FBQyxcbiAgICAgICAgICB9XG4gICAgICAgIDoge1xuICAgICAgICAgICAgb3V0U2FtcGxlUmF0ZTogNDhfMDAwLFxuICAgICAgICAgICAgb3V0U2FtcGxlRm10OiBBVl9TQU1QTEVfRk1UX0ZMVCxcbiAgICAgICAgICAgIGNvZGVjTmFtZTogRkZfRU5DT0RFUl9MSUJPUFVTLFxuICAgICAgICAgIH07XG4gICAgcmV0dXJuIEF1ZGlvRW5jb2Rlci5jcmVhdGUoe1xuICAgICAgLi4uY2ZnLFxuICAgICAgZ2xvYmFsSGVhZGVyOiB0cnVlLFxuICAgICAgYml0cmF0ZTogMTI4XzAwMCxcbiAgICAgIG11eGVyLFxuICAgIH0pO1xuICB9XG5cbiAgc2V0SW5wdXRSYXRlKHNhbXBsZVJhdGU6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuX3MuYXVkaW8/LnNldElucHV0UmF0ZShzYW1wbGVSYXRlKTtcbiAgfVxuXG4gIGFzeW5jIGVuY29kZUJHUkEoYmdyYUZyYW1lOiBGcmFtZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgaHdWaWRlbywgbXV4ZXIgfSA9IHRoaXMuX3M7XG4gICAgaWYgKGh3VmlkZW8pIHtcbiAgICAgIHJldHVybiBod1ZpZGVvLmVuY29kZShiZ3JhRnJhbWUsIG11eGVyKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuc3dFbmNvZGUoYmdyYUZyYW1lKTtcbiAgfVxuXG4gIGFzeW5jIGVuY29kZURlY29kZWRGcmFtZShzcmM6IEZyYW1lKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyBod1ZpZGVvLCBtdXhlciB9ID0gdGhpcy5fcztcbiAgICBpZiAoaHdWaWRlbykge1xuICAgICAgcmV0dXJuIGh3VmlkZW8uZW5jb2RlKHNyYywgbXV4ZXIpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zd0VuY29kZShzcmMpO1xuICB9XG5cbiAgYXN5bmMgZW5jb2RlQXVkaW8ocGNtOiBCdWZmZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLl9zLmF1ZGlvPy5lbmNvZGUocGNtLCB0aGlzLl9zLm11eGVyKTtcbiAgfVxuXG4gIGFzeW5jIGZsdXNoKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgaHdWaWRlbywgdmlkZW8sIGF1ZGlvLCBtdXhlciB9ID0gdGhpcy5fcztcbiAgICBhd2FpdCBhdWRpbz8uZmx1c2gobXV4ZXIpO1xuICAgIGlmIChod1ZpZGVvKSB7XG4gICAgICBhd2FpdCBod1ZpZGVvLmZsdXNoKG11eGVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXdhaXQgdmlkZW8hLmZsdXNoKG11eGVyKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBbU3ltYm9sLmFzeW5jRGlzcG9zZV0oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX2Rpc3Bvc2VkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX2Rpc3Bvc2VkID0gdHJ1ZTtcbiAgICBjb25zdCB7IG11eGVyLCB2aWRlbywgaHdWaWRlbywgYXVkaW8sIGNvZGVjLCBodywgb3duc0h3IH0gPSB0aGlzLl9zO1xuICAgIHZpZGVvPy5bU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgaHdWaWRlbz8uW1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgIGF1ZGlvPy5bU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgY29kZWM/LltTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICBhd2FpdCBtdXhlcltTeW1ib2wuYXN5bmNEaXNwb3NlXSgpO1xuICAgIGlmIChvd25zSHcpIHtcbiAgICAgIGh3Py5kaXNwb3NlKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzd0VuY29kZShzcmM6IEZyYW1lKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyB2aWRlbywgY29kZWMsIG11eGVyIH0gPSB0aGlzLl9zO1xuICAgIG9rKGNvZGVjPy5zd3MsIFwic3dzIG5vdCBpbml0aWFsaXplZFwiKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoY29kZWMuZHN0Lm1ha2VXcml0YWJsZSgpLCBcInNpbmtEc3QubWFrZVdyaXRhYmxlXCIpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCBjb2RlYy5zd3Muc2NhbGVGcmFtZShjb2RlYy5kc3QsIHNyYyksIFwic2lua1N3cy5zY2FsZUZyYW1lXCIpO1xuICAgIGF3YWl0IHZpZGVvIS5lbmNvZGUoY29kZWMuZHN0LCBtdXhlcik7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMDEuXG5cbmltcG9ydCB7IEZGbXBlZ0Vycm9yLCB0eXBlIEZyYW1lIH0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB7IEhhcmR3YXJlQ29udGV4dCB9IGZyb20gXCJub2RlLWF2L2FwaVwiO1xuaW1wb3J0IHsgQVZfUElYX0ZNVF9CR1JBLCBGRl9IV0RFVklDRV9UWVBFX0NVREEsIEZGX0hXREVWSUNFX1RZUEVfVklERU9UT09MQk9YIH0gZnJvbSBcIm5vZGUtYXYvY29uc3RhbnRzXCI7XG5cbmltcG9ydCB7IENvbmN1cnJlbmN5TGltaXRlciB9IGZyb20gXCIuLi9saW1pdGVyXCI7XG5pbXBvcnQgeyBDb2RlY1N0YXRlIH0gZnJvbSBcIi4vY29kZWNcIjtcbmltcG9ydCB7IG1ha2VGcmFtZSB9IGZyb20gXCIuL21pc2NcIjtcbmltcG9ydCB7IE91dHB1dFNpbmsgfSBmcm9tIFwiLi9zaW5rXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRW5jb2RlclBpcGVsaW5lT3B0aW9ucyB7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICBmcHM6IG51bWJlcjtcbiAgb3V0RmlsZTogc3RyaW5nO1xuICB3aXRoQXVkaW8/OiBib29sZWFuO1xuICBkaXNhYmxlSHdDb2RlYz86IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBQaXBlbGluZVN0YXRlIHtcbiAgc2lua3M6IE91dHB1dFNpbmtbXTtcbiAgc2hhcmVkSHc/OiBIYXJkd2FyZUNvbnRleHQ7XG4gIGxpbWl0ZXI6IENvbmN1cnJlbmN5TGltaXRlcjtcbiAgcG5nQ29kZWM/OiBDb2RlY1N0YXRlO1xuICBvdXRGaWxlczogc3RyaW5nW107XG4gIG9wdHM6IEVuY29kZXJQaXBlbGluZU9wdGlvbnM7XG59XG5cbmV4cG9ydCBjbGFzcyBFbmNvZGVyUGlwZWxpbmUge1xuICBwcml2YXRlIF9zOiBQaXBlbGluZVN0YXRlO1xuICBwcml2YXRlIF9kaXNwb3NlZCA9IGZhbHNlO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoczogUGlwZWxpbmVTdGF0ZSkge1xuICAgIHRoaXMuX3MgPSBzO1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIGNyZWF0ZShvcHRzOiBFbmNvZGVyUGlwZWxpbmVPcHRpb25zKTogUHJvbWlzZTxFbmNvZGVyUGlwZWxpbmU+IHtcbiAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQsIGZwcywgb3V0RmlsZSwgd2l0aEF1ZGlvID0gZmFsc2UsIGRpc2FibGVId0NvZGVjID0gZmFsc2UgfSA9IG9wdHM7XG4gICAgY29uc3Qgb3V0RmlsZXMgPSBvdXRGaWxlXG4gICAgICAuc3BsaXQoXCIsXCIpXG4gICAgICAubWFwKChwKSA9PiBwLnRyaW0oKSlcbiAgICAgIC5maWx0ZXIoQm9vbGVhbik7XG4gICAgaWYgKG91dEZpbGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwib3V0RmlsZSBtdXN0IGNvbnRhaW4gYXQgbGVhc3Qgb25lIHBhdGhcIik7XG4gICAgfVxuXG4gICAgY29uc3Qga2luZHMgPSBvdXRGaWxlcy5tYXAoKHApID0+IE91dHB1dFNpbmsua2luZEZyb21QYXRoKHApKTtcbiAgICBjb25zdCBuZWVkc01wNEh3ID0gIWRpc2FibGVId0NvZGVjICYmIGtpbmRzLmluY2x1ZGVzKFwibXA0XCIpO1xuICAgIC8vIFBhcnRpYWwtY29uc3RydWN0aW9uIHNhZmV0eTogZGlzcG9zZSBzaGFyZWRIdyArIGFueSBzaW5rcyBhbHJlYWR5IGJ1aWx0IGlmIGEgbGF0ZXIgc2luayB0aHJvd3M7IG1vdmUoKSBkaXNvd25zIG9uIHN1Y2Nlc3MuXG4gICAgYXdhaXQgdXNpbmcgc3RhY2sgPSBuZXcgQXN5bmNEaXNwb3NhYmxlU3RhY2soKTtcbiAgICBjb25zdCBzaGFyZWRIdyA9IG5lZWRzTXA0SHcgPyAoSGFyZHdhcmVDb250ZXh0LmF1dG8oKSA/PyB1bmRlZmluZWQpIDogdW5kZWZpbmVkO1xuICAgIGlmIChzaGFyZWRIdykge1xuICAgICAgc3RhY2sudXNlKHNoYXJlZEh3KTtcbiAgICB9XG4gICAgY29uc3QgaXNId0FscGhhQ2FwYWJsZSA9XG4gICAgICBzaGFyZWRIdz8uZGV2aWNlVHlwZU5hbWUgPT09IEZGX0hXREVWSUNFX1RZUEVfVklERU9UT09MQk9YIHx8IHNoYXJlZEh3Py5kZXZpY2VUeXBlTmFtZSA9PT0gRkZfSFdERVZJQ0VfVFlQRV9DVURBO1xuXG4gICAgY29uc3Qgc2lua3M6IE91dHB1dFNpbmtbXSA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3V0RmlsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHNpbmsgPSBhd2FpdCBPdXRwdXRTaW5rLmNyZWF0ZSh7XG4gICAgICAgIG91dEZpbGU6IG91dEZpbGVzW2ldISxcbiAgICAgICAga2luZDoga2luZHNbaV0hLFxuICAgICAgICB3aWR0aCxcbiAgICAgICAgaGVpZ2h0LFxuICAgICAgICBmcHMsXG4gICAgICAgIHdpdGhBdWRpbyxcbiAgICAgICAgZGlzYWJsZUh3Q29kZWMsXG4gICAgICAgIHNoYXJlZEh3OiBraW5kc1tpXSA9PT0gXCJtcDRcIiAmJiBpc0h3QWxwaGFDYXBhYmxlID8gc2hhcmVkSHcgOiB1bmRlZmluZWQsXG4gICAgICB9KTtcbiAgICAgIHN0YWNrLnVzZShzaW5rKTtcbiAgICAgIHNpbmtzLnB1c2goc2luayk7XG4gICAgfVxuXG4gICAgc3RhY2subW92ZSgpO1xuICAgIHJldHVybiBuZXcgRW5jb2RlclBpcGVsaW5lKHsgc2lua3MsIHNoYXJlZEh3LCBsaW1pdGVyOiBuZXcgQ29uY3VycmVuY3lMaW1pdGVyKDEpLCBvdXRGaWxlcywgb3B0cyB9KTtcbiAgfVxuXG4gIHNldHVwQXVkaW8oc2FtcGxlUmF0ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBzaW5rIG9mIHRoaXMuX3Muc2lua3MpIHtcbiAgICAgIHNpbmsuc2V0SW5wdXRSYXRlKHNhbXBsZVJhdGUpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGVuY29kZUJHUkEoaW5wdXQ6IEJ1ZmZlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuX3MubGltaXRlci5zY2hlZHVsZShhc3luYyAoKSA9PiB7XG4gICAgICB1c2luZyBmcmFtZSA9IHRoaXMuYmdyYUZyYW1lKGlucHV0KTtcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKHRoaXMuX3Muc2lua3MubWFwKChzaW5rKSA9PiBzaW5rLmVuY29kZUJHUkEoZnJhbWUpKSk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBlbmNvZGVQTkcocG5nRGF0YTogQnVmZmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5fcy5saW1pdGVyLnNjaGVkdWxlKGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gdGhpcy5fcy5vcHRzO1xuICAgICAgdGhpcy5fcy5wbmdDb2RlYyA/Pz0gYXdhaXQgQ29kZWNTdGF0ZS5jcmVhdGUod2lkdGgsIGhlaWdodCk7XG4gICAgICBjb25zdCBzcmMgPSBhd2FpdCB0aGlzLl9zLnBuZ0NvZGVjLmRlY29kZVBORyhwbmdEYXRhKTtcbiAgICAgIGZvciAoY29uc3Qgc2luayBvZiB0aGlzLl9zLnNpbmtzKSB7XG4gICAgICAgIGF3YWl0IHNpbmsuZW5jb2RlRGVjb2RlZEZyYW1lKHNyYyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBlbmNvZGVBdWRpbyhwY206IEJ1ZmZlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuX3MubGltaXRlci5zY2hlZHVsZShhc3luYyAoKSA9PiB7XG4gICAgICBmb3IgKGNvbnN0IHNpbmsgb2YgdGhpcy5fcy5zaW5rcykge1xuICAgICAgICBhd2FpdCBzaW5rLmVuY29kZUF1ZGlvKHBjbSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBmaW5pc2goKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLl9zLmxpbWl0ZXIuZHJhaW4oKTtcbiAgICAgIGZvciAoY29uc3Qgc2luayBvZiB0aGlzLl9zLnNpbmtzKSB7XG4gICAgICAgIGF3YWl0IHNpbmsuZmx1c2goKTtcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgYXdhaXQgdGhpcy5mcmVlKCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9zLm91dEZpbGVzO1xuICB9XG5cbiAgYXN5bmMgW1N5bWJvbC5hc3luY0Rpc3Bvc2VdKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9kaXNwb3NlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBhd2FpdCB0aGlzLl9zLmxpbWl0ZXIuZHJhaW4oKTtcbiAgICBhd2FpdCB0aGlzLmZyZWUoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZnJlZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fZGlzcG9zZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fZGlzcG9zZWQgPSB0cnVlO1xuICAgIGZvciAoY29uc3Qgc2luayBvZiB0aGlzLl9zLnNpbmtzKSB7XG4gICAgICBhd2FpdCBzaW5rW1N5bWJvbC5hc3luY0Rpc3Bvc2VdKCk7XG4gICAgfVxuICAgIHRoaXMuX3MucG5nQ29kZWM/LltTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICB0aGlzLl9zLnNoYXJlZEh3Py5kaXNwb3NlKCk7XG4gIH1cblxuICBwcml2YXRlIGJncmFGcmFtZShpbnB1dDogQnVmZmVyKTogRnJhbWUge1xuICAgIC8vIFBhcnRpYWwtY29uc3RydWN0aW9uIHNhZmV0eTogZnJlZSBmcmFtZSBpZiBmcm9tQnVmZmVyIHRocm93cyBiZWZvcmUgd2UgcmV0dXJuIGl0LlxuICAgIHVzaW5nIHN0YWNrID0gbmV3IERpc3Bvc2FibGVTdGFjaygpO1xuICAgIGNvbnN0IGZyYW1lID0gc3RhY2sudXNlKG1ha2VGcmFtZSh0aGlzLl9zLm9wdHMud2lkdGgsIHRoaXMuX3Mub3B0cy5oZWlnaHQsIEFWX1BJWF9GTVRfQkdSQSkpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihmcmFtZS5mcm9tQnVmZmVyKGlucHV0KSwgXCJiZ3JhRnJhbWUuZnJvbUJ1ZmZlclwiKTtcbiAgICBzdGFjay5tb3ZlKCk7XG4gICAgcmV0dXJuIGZyYW1lO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAzLzIzLlxuXG4vKipcbiAqIEZyYW1lIGRyb3AgcXVhbGl0eSBzY29yZSAoMCA9IHBlcmZlY3QsIDEgPSB3b3JzdCkuXG4gKlxuICogQ29tYmluZXMgdHdvIGRpbWVuc2lvbnM6XG4gKiAtIEdsb2JhbDogb3ZlcmFsbCBkcm9wIHJhdGUgYWNyb3NzIHRoZSB0aW1lbGluZVxuICogLSBMb2NhbDogcGVyY2VwdHVhbCBzZXZlcml0eSBvZiBjb25zZWN1dGl2ZSBkcm9wcyAoYnVyc3RzKVxuICpcbiAqIFVzZXMgY29tcGxlbWVudGFyeSBtdWx0aXBsaWNhdGlvbjogc2NvcmUgPSAxIC0gKDEtZykoMS1sKVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZyYW1lRHJvcFNjb3JlIHtcbiAgZ2xvYmFsOiBudW1iZXI7XG4gIGxvY2FsOiBudW1iZXI7XG4gIGphbms6IG51bWJlcjtcbiAgZXhwZWN0ZWQ6IG51bWJlcjtcbiAgYWN0dWFsOiBudW1iZXI7XG4gIG1heEJ1cnN0OiBudW1iZXI7XG59XG5cbmV4cG9ydCBjbGFzcyBGcmFtZURyb3BTdGF0cyB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2ZwczogbnVtYmVyO1xuICBwcml2YXRlIF9hY3R1YWwgPSAwO1xuICBwcml2YXRlIF9jdXJyZW50QnVyc3QgPSAwO1xuICBwcml2YXRlIF9idXJzdHM6IG51bWJlcltdID0gW107XG5cbiAgY29uc3RydWN0b3IoZnBzOiBudW1iZXIpIHtcbiAgICB0aGlzLl9mcHMgPSBmcHM7XG4gIH1cblxuICAvKiogQ2FsbCB3aGVuIGEgZnJhbWUgaXMgYWN0dWFsbHkgd3JpdHRlbiB0byB0aGUgZW5jb2Rlci4gKi9cbiAgd3JvdGUoY291bnQgPSAxKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2N1cnJlbnRCdXJzdCA+IDApIHtcbiAgICAgIHRoaXMuX2J1cnN0cy5wdXNoKHRoaXMuX2N1cnJlbnRCdXJzdCk7XG4gICAgICB0aGlzLl9jdXJyZW50QnVyc3QgPSAwO1xuICAgIH1cbiAgICB0aGlzLl9hY3R1YWwgKz0gY291bnQ7XG4gIH1cblxuICAvKiogQ2FsbCB3aGVuIGEgZnJhbWUgaXMgZHJvcHBlZC4gKi9cbiAgZHJvcHBlZChjb3VudCA9IDEpOiB2b2lkIHtcbiAgICB0aGlzLl9jdXJyZW50QnVyc3QgKz0gY291bnQ7XG4gIH1cblxuICAvKiogRmluYWxpemUgYW5kIHJldHVybiB0aGUgc2NvcmUuICovXG4gIGZpbmFsaXplKCk6IEZyYW1lRHJvcFNjb3JlIHtcbiAgICBpZiAodGhpcy5fY3VycmVudEJ1cnN0ID4gMCkge1xuICAgICAgdGhpcy5fYnVyc3RzLnB1c2godGhpcy5fY3VycmVudEJ1cnN0KTtcbiAgICAgIHRoaXMuX2N1cnJlbnRCdXJzdCA9IDA7XG4gICAgfVxuXG4gICAgbGV0IHRvdGFsRHJvcHBlZCA9IDA7XG4gICAgbGV0IGxvY2FsU3VtID0gMDtcbiAgICBsZXQgbWF4QnVyc3QgPSAwO1xuICAgIGZvciAoY29uc3QgYnVyc3Qgb2YgdGhpcy5fYnVyc3RzKSB7XG4gICAgICB0b3RhbERyb3BwZWQgKz0gYnVyc3Q7XG4gICAgICBtYXhCdXJzdCA9IE1hdGgubWF4KG1heEJ1cnN0LCBidXJzdCk7XG4gICAgICBjb25zdCBwZXJjZXB0aWJsZSA9IE1hdGgubWF4KDAsIGJ1cnN0IC0gMSk7XG4gICAgICBsb2NhbFN1bSArPSAocGVyY2VwdGlibGUgLyB0aGlzLl9mcHMpICoqIDI7XG4gICAgfVxuXG4gICAgY29uc3QgZXhwZWN0ZWQgPSB0aGlzLl9hY3R1YWwgKyB0b3RhbERyb3BwZWQ7XG4gICAgY29uc3QgZyA9IGV4cGVjdGVkID4gMCA/IHRvdGFsRHJvcHBlZCAvIGV4cGVjdGVkIDogMDtcbiAgICBjb25zdCBsID0gTWF0aC5taW4oMSwgbG9jYWxTdW0pO1xuICAgIGNvbnN0IHNjb3JlID0gMSAtICgxIC0gZykgKiAoMSAtIGwpO1xuXG4gICAgcmV0dXJuIHsgZ2xvYmFsOiBnLCBsb2NhbDogbCwgamFuazogc2NvcmUsIGV4cGVjdGVkLCBhY3R1YWw6IHRoaXMuX2FjdHVhbCwgbWF4QnVyc3QgfTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wNi5cblxuaW1wb3J0IHR5cGUgeyBOYXRpdmVJbWFnZSwgU2l6ZSB9IGZyb20gXCJlbGVjdHJvblwiO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNFbXB0eShpbWFnZTogTmF0aXZlSW1hZ2UpIHtcbiAgY29uc3Qgc2l6ZSA9IGltYWdlLmdldFNpemUoKTtcbiAgaWYgKHNpemUud2lkdGggPT09IDAgfHwgc2l6ZS5oZWlnaHQgPT09IDApIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gaW1hZ2UuaXNFbXB0eSgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2l6ZUVxdWFscyhhOiBTaXplLCBiOiBTaXplKSB7XG4gIHJldHVybiBhLndpZHRoID09PSBiLndpZHRoICYmIGEuaGVpZ2h0ID09PSBiLmhlaWdodDtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDMvMDIuXG5cbmltcG9ydCB0eXBlIHsgV2ViQ29udGVudHMgfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB0eXBlIHsgRW5jb2RlclBpcGVsaW5lIH0gZnJvbSBcIi4uL2Jhc2UvZW5jb2Rlci9waXBlbGluZVwiO1xuXG5leHBvcnQgY29uc3QgQVVESU9fTUVUQV9DSEFOTkVMID0gXCJhdWRpby1tZXRhXCI7XG5leHBvcnQgY29uc3QgQVVESU9fQ0hVTktfQ0hBTk5FTCA9IFwiYXVkaW8tY2h1bmtcIjtcblxuZXhwb3J0IGludGVyZmFjZSBBdWRpb0xpc3RlbmVyT3B0aW9ucyB7XG4gIHdjOiBXZWJDb250ZW50cztcbiAgZW5jb2RlcjogRW5jb2RlclBpcGVsaW5lO1xuICBnZXRWaWRlb1RpbWVNczogKCkgPT4gbnVtYmVyO1xuICBvbkVycm9yOiAoZXJyb3I6IEVycm9yKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgdHlwZSBBdWRpb0Rpc3Bvc2FsID0gKCkgPT4gdm9pZDtcblxuZXhwb3J0IGZ1bmN0aW9uIGF0dGFjaEF1ZGlvTGlzdGVuZXJzKHsgd2MsIGVuY29kZXIsIGdldFZpZGVvVGltZU1zLCBvbkVycm9yIH06IEF1ZGlvTGlzdGVuZXJPcHRpb25zKTogQXVkaW9EaXNwb3NhbCB7XG4gIGNvbnN0IG9uTWV0YSA9IGFzeW5jIChfZTogdW5rbm93biwgZGF0YTogeyBzYW1wbGVSYXRlOiBudW1iZXIgfSkgPT4ge1xuICAgIGNvbnN0IHNhbXBsZVJhdGUgPSBkYXRhLnNhbXBsZVJhdGU7XG4gICAgY29uc3Qgc3RhcnRNcyA9IGdldFZpZGVvVGltZU1zKCk7XG4gICAgZW5jb2Rlci5zZXR1cEF1ZGlvKHNhbXBsZVJhdGUpO1xuICAgIGNvbnN0IHNpbGVuY2VTYW1wbGVzID0gTWF0aC5jZWlsKChzdGFydE1zICogc2FtcGxlUmF0ZSkgLyAxMDAwKTtcbiAgICBpZiAoc2lsZW5jZVNhbXBsZXMgPD0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgYXdhaXQgZW5jb2Rlci5lbmNvZGVBdWRpbyhCdWZmZXIuYWxsb2Moc2lsZW5jZVNhbXBsZXMgKiAyICogNCkpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBvbkVycm9yKGVycm9yIGFzIEVycm9yKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3Qgb25DaHVuayA9IGFzeW5jIChfZTogdW5rbm93biwgYnVmZmVyOiBCdWZmZXIpID0+IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgZW5jb2Rlci5lbmNvZGVBdWRpbyhidWZmZXIpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBvbkVycm9yKGVycm9yIGFzIEVycm9yKTtcbiAgICB9XG4gIH07XG5cbiAgd2MuaXBjLm9uKEFVRElPX01FVEFfQ0hBTk5FTCwgb25NZXRhKTtcbiAgd2MuaXBjLm9uKEFVRElPX0NIVU5LX0NIQU5ORUwsIG9uQ2h1bmspO1xuXG4gIHJldHVybiAoKSA9PiB7XG4gICAgd2MuaXBjLnJlbW92ZUxpc3RlbmVyKEFVRElPX01FVEFfQ0hBTk5FTCwgb25NZXRhKTtcbiAgICB3Yy5pcGMucmVtb3ZlTGlzdGVuZXIoQVVESU9fQ0hVTktfQ0hBTk5FTCwgb25DaHVuayk7XG4gIH07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA1LlxuXG5pbXBvcnQgeyBzZXRUaW1lb3V0IH0gZnJvbSBcIm5vZGU6dGltZXJzL3Byb21pc2VzXCI7XG5pbXBvcnQgeyBzbGVlcCB9IGZyb20gXCIuL3RpbWluZ1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJldHJ5T3B0aW9uczxBcmdzIGV4dGVuZHMgdW5rbm93bltdLCBSZXQ+IHtcbiAgZm46ICguLi5hcmdzOiBBcmdzKSA9PiBQcm9taXNlPFJldD47XG4gIG1heEF0dGVtcHRzPzogbnVtYmVyO1xuICB0aW1lb3V0PzogbnVtYmVyO1xuICAvLyBBYm9ydCBiYWlscyBpbW1lZGlhdGVseSBpbnN0ZWFkIG9mIHJldHJ5aW5nOyBzaWduYWwgaXMgbm90IGF1dG8tdGhyZWFkZWQgaW50byBmbiDigJQgY2FsbGVyIHdpcmVzIGl0IChmZXRjaCwgUzMgc2VuZCkuXG4gIHNpZ25hbD86IEFib3J0U2lnbmFsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXNlUmV0cnk8QXJncyBleHRlbmRzIHVua25vd25bXSwgUmV0Pih7XG4gIGZuLFxuICBtYXhBdHRlbXB0cyA9IDMsXG4gIHRpbWVvdXQsXG4gIHNpZ25hbCxcbn06IFJldHJ5T3B0aW9uczxBcmdzLCBSZXQ+KSB7XG4gIGNvbnN0IHRpbWVvdXRFcnJvciA9IG5ldyBFcnJvcihgdGltZW91dCBvdmVyICR7dGltZW91dH1tc2ApO1xuICByZXR1cm4gYXN5bmMgKC4uLmFyZ3M6IEFyZ3MpID0+IHtcbiAgICBsZXQgYXR0ZW1wdCA9IDA7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIHNpZ25hbD8udGhyb3dJZkFib3J0ZWQoKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHByb21pc2VzID0gW2ZuKC4uLmFyZ3MpXTtcbiAgICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAgICBwcm9taXNlcy5wdXNoKFxuICAgICAgICAgICAgc2V0VGltZW91dCh0aW1lb3V0KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgdGhyb3cgdGltZW91dEVycm9yO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXdhaXQgUHJvbWlzZS5yYWNlKHByb21pc2VzKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgc2lnbmFsPy50aHJvd0lmQWJvcnRlZCgpO1xuICAgICAgICBhdHRlbXB0Kys7XG4gICAgICAgIGlmIChhdHRlbXB0ID49IG1heEF0dGVtcHRzKSB7XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCBzbGVlcCgyICoqIGF0dGVtcHQgKiAxMDAgKyBNYXRoLnJhbmRvbSgpICogMTAwKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA5LlxuXG5jb25zdCBTVVBQT1JURURfUFJPVE9DT0xTID0gW1wiZmlsZTpcIiwgXCJodHRwOlwiLCBcImh0dHBzOlwiLCBcImRhdGE6XCJdO1xuY29uc3QgU09VUkNFX1BBVFRFUk4gPSAvXihmaWxlOnxodHRwcz86fGRhdGE6KS87XG5cbmV4cG9ydCBmdW5jdGlvbiBjaGVja0hUTUwoc291cmNlOiBzdHJpbmcpOiB2b2lkIHtcbiAgaWYgKFNPVVJDRV9QQVRURVJOLnRlc3Qoc291cmNlKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHByb3RvY29sID0gYCR7c291cmNlLnNwbGl0KFwiOlwiKVswXX06YDtcbiAgY29uc3QgbWVzc2FnZSA9IFNVUFBPUlRFRF9QUk9UT0NPTFMuaW5jbHVkZXMocHJvdG9jb2wpXG4gICAgPyBgdW5zdXBwb3J0ZWQgcHJvdG9jb2w6ICR7cHJvdG9jb2x9LCBleHBlY3RlZCAke1NVUFBPUlRFRF9QUk9UT0NPTFMuam9pbihcIiwgXCIpfWBcbiAgICA6IGBpbnZhbGlkIHNvdXJjZSBmb3JtYXQsIGV4cGVjdGVkICR7U1VQUE9SVEVEX1BST1RPQ09MUy5qb2luKFwiLCBcIil9YDtcblxuICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAzLzEwLlxuXG5leHBvcnQgaW50ZXJmYWNlIFdhaXRPcHRpb25zIHtcbiAgdGltZW91dDogbnVtYmVyO1xuICBvblRpbWVvdXQ/OiAoKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgY2xhc3MgV2FpdGFibGVFdmVudCB7XG4gIHByaXZhdGUgX3Byb21pc2U/OiBQcm9taXNlPHZvaWQ+O1xuICBwcml2YXRlIF9yZXNvbHZlPzogKCkgPT4gdm9pZDtcbiAgcHJpdmF0ZSBfdGltZW91dFRva2VuPzogTm9kZUpTLlRpbWVvdXQ7XG5cbiAgd2FpdChvcHRpb25zPzogV2FpdE9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fcHJvbWlzZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYWxyZWFkeSB3YWl0aW5nXCIpO1xuICAgIH1cbiAgICB0aGlzLl9wcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIHRoaXMuX3Jlc29sdmUgPSByZXNvbHZlO1xuICAgICAgaWYgKG9wdGlvbnM/LnRpbWVvdXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLl90aW1lb3V0VG9rZW4gPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBvcHRpb25zLm9uVGltZW91dD8uKCk7XG4gICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9LCBvcHRpb25zLnRpbWVvdXQpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLl9wcm9taXNlO1xuICB9XG5cbiAgc2lnbmFsKCkge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLl90aW1lb3V0VG9rZW4pO1xuICAgIHRoaXMuX3Byb21pc2UgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5fcmVzb2x2ZT8uKCk7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDkuXG5cbmltcG9ydCB7IFVSTCB9IGZyb20gXCJub2RlOnVybFwiO1xuaW1wb3J0IHR5cGUgeyBCcm93c2VyV2luZG93IH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBDb25jdXJyZW5jeUxpbWl0ZXIgfSBmcm9tIFwiLi4vYmFzZS9saW1pdGVyXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi4vYmFzZS9sb2dnaW5nXCI7XG5pbXBvcnQgeyBXYWl0YWJsZUV2ZW50IH0gZnJvbSBcIi4uL2Jhc2Uvd2FpdGFibGVfZXZlbnRcIjtcblxuY29uc3QgVEFHID0gXCJbTmV0d29ya11cIjtcblxuY29uc3QgbWFwID0gbmV3IE1hcChbXG4gIFtganNzei1ib3NzLmhkc2xiLmNvbWAsIGBqc3N6LWJvc3MuYmlsaWJpbGkuY29gXSwgLy9cbiAgW2Bib3NzLmhkc2xiLmNvbWAsIGBzaGpkLWJvc3MuYmlsaWJpbGkuY29gXSxcbl0pO1xuXG5jb25zdCBMT0NBTF9TQ0hFTUVTID0gW1wicHVwOlwiLCBcInB1cC1mcmFtZTpcIiwgXCJmaWxlOlwiLCBcImRhdGE6XCIsIFwiYmxvYjpcIiwgXCJjaHJvbWUtZXh0ZW5zaW9uOlwiLCBcImRldnRvb2xzOlwiXTtcblxuZnVuY3Rpb24gaXNMb2NhbFNjaGVtZSh1cmw6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBmb3IgKGNvbnN0IHMgb2YgTE9DQUxfU0NIRU1FUykge1xuICAgIGlmICh1cmwuc3RhcnRzV2l0aChzKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3hpZWRVcmwodXJsOiBzdHJpbmcpIHtcbiAgaWYgKCF1cmwuc3RhcnRzV2l0aChcImh0dHBcIikpIHtcbiAgICByZXR1cm4gdXJsO1xuICB9XG4gIGNvbnN0IHBhcnNlZCA9IG5ldyBVUkwodXJsKTtcbiAgY29uc3QgdGFyZ2V0ID0gbWFwLmdldChwYXJzZWQuaG9zdG5hbWUpO1xuICBpZiAoIXRhcmdldCkge1xuICAgIHJldHVybiB1cmw7XG4gIH1cbiAgcGFyc2VkLmhvc3RuYW1lID0gdGFyZ2V0O1xuICBwYXJzZWQucHJvdG9jb2wgPSBcImh0dHA6XCI7XG4gIHJldHVybiBwYXJzZWQudG9TdHJpbmcoKTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBOZXR3b3JrT3B0aW9ucyB7XG4gIHNvdXJjZTogc3RyaW5nO1xuICB3aW5kb3c6IEJyb3dzZXJXaW5kb3c7XG4gIHVzZUlubmVyUHJveHk/OiBib29sZWFuO1xuICBzdHViTWVkaWE/OiBib29sZWFuO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0SW50ZXJjZXB0b3IoeyBzb3VyY2UsIHdpbmRvdywgdXNlSW5uZXJQcm94eSwgc3R1Yk1lZGlhIH06IE5ldHdvcmtPcHRpb25zKSB7XG4gIGNvbnN0IHJlcSA9IHdpbmRvdy53ZWJDb250ZW50cy5zZXNzaW9uLndlYlJlcXVlc3Q7XG4gIGNvbnN0IGxpbWl0ZXIgPSBuZXcgQ29uY3VycmVuY3lMaW1pdGVyKDI1Nik7XG4gIGNvbnN0IGV2ZW50cyA9IG5ldyBNYXA8c3RyaW5nLCBXYWl0YWJsZUV2ZW50PigpO1xuXG4gIGFzeW5jIGZ1bmN0aW9uIHdhaXQoa2V5OiBzdHJpbmcsIG9uVGltZW91dD86ICgpID0+IHZvaWQpIHtcbiAgICBjb25zdCBldmVudCA9IG5ldyBXYWl0YWJsZUV2ZW50KCk7XG4gICAgZXZlbnRzLnNldChrZXksIGV2ZW50KTtcbiAgICBhd2FpdCBldmVudC53YWl0KHsgdGltZW91dDogNV8wMDAsIG9uVGltZW91dCB9KS5maW5hbGx5KCgpID0+IGV2ZW50cy5kZWxldGUoa2V5KSk7XG4gIH1cblxuICBmdW5jdGlvbiBzaWduYWwoa2V5OiBzdHJpbmcpIHtcbiAgICBldmVudHMuZ2V0KGtleSk/LnNpZ25hbCgpO1xuICB9XG5cbiAgcmVxLm9uQmVmb3JlUmVxdWVzdCgoZGV0YWlscywgY2FsbGJhY2spID0+IHtcbiAgICBjb25zdCB1cmwgPSBkZXRhaWxzLnVybDtcbiAgICAvLyBTd2FwIG1lZGlhIGZvciBhIGZyYW1lLXNlcnZlciBzdHViICh0cnVlIGludHJpbnNpYyBzaXplL2R1cmF0aW9uKSBzbyBCbGluayBsYXlzIG91dCBsaWtlIENocm9tZS5cbiAgICBpZiAoc3R1Yk1lZGlhICYmIGRldGFpbHMucmVzb3VyY2VUeXBlID09PSBcIm1lZGlhXCIgJiYgIXVybC5zdGFydHNXaXRoKFwicHVwLWZyYW1lOlwiKSkge1xuICAgICAgY2FsbGJhY2soe1xuICAgICAgICByZWRpcmVjdFVSTDogYHB1cC1mcmFtZTovL3N0dWI/c3JjPSR7ZW5jb2RlVVJJQ29tcG9uZW50KHVybCl9YCxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBwcm94aWVkID0gdXNlSW5uZXJQcm94eSA/IHByb3hpZWRVcmwodXJsKSA6IHVybDtcbiAgICBsaW1pdGVyLnNjaGVkdWxlKCgpID0+IHtcbiAgICAgIGNvbnN0IGtleSA9IGAke3dpbmRvdy5pZH1fJHtkZXRhaWxzLmlkfWA7XG4gICAgICBsb2dnZXIuZGVidWcoVEFHLCBgc3RhcnQ6YCwge1xuICAgICAgICBrZXksXG4gICAgICAgIHVybCxcbiAgICAgICAgcHJveGllZCxcbiAgICAgICAgbWV0aG9kOiBkZXRhaWxzLm1ldGhvZCxcbiAgICAgICAgc291cmNlLFxuICAgICAgICBzdGF0czogbGltaXRlci5zdGF0cyxcbiAgICAgIH0pO1xuICAgICAgaWYgKHByb3hpZWQgPT09IHVybCkge1xuICAgICAgICBjYWxsYmFjayh7IGNhbmNlbDogZmFsc2UgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjYWxsYmFjayh7IGNhbmNlbDogZmFsc2UsIHJlZGlyZWN0VVJMOiBwcm94aWVkIH0pO1xuICAgICAgfVxuICAgICAgaWYgKGlzTG9jYWxTY2hlbWUodXJsKSkge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gd2FpdChrZXksICgpID0+IHtcbiAgICAgICAgbG9nZ2VyLndhcm4oVEFHLCBgbWF5YmUgdGltZW91dDpgLCB7XG4gICAgICAgICAga2V5LFxuICAgICAgICAgIHVybCxcbiAgICAgICAgICBwcm94aWVkLFxuICAgICAgICAgIG1ldGhvZDogZGV0YWlscy5tZXRob2QsXG4gICAgICAgICAgc291cmNlLFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICByZXEub25IZWFkZXJzUmVjZWl2ZWQoKHsgcmVzcG9uc2VIZWFkZXJzIH0sIGNhbGxiYWNrKSA9PiB7XG4gICAgZGVsZXRlIHJlc3BvbnNlSGVhZGVycz8uW1wieC1mcmFtZS1vcHRpb25zXCJdO1xuICAgIGRlbGV0ZSByZXNwb25zZUhlYWRlcnM/LltcIlgtRnJhbWUtT3B0aW9uc1wiXTtcbiAgICBkZWxldGUgcmVzcG9uc2VIZWFkZXJzPy5bXCJjb250ZW50LXNlY3VyaXR5LXBvbGljeVwiXTtcbiAgICBkZWxldGUgcmVzcG9uc2VIZWFkZXJzPy5bXCJDb250ZW50LVNlY3VyaXR5LVBvbGljeVwiXTtcbiAgICBjYWxsYmFjayh7IGNhbmNlbDogZmFsc2UsIHJlc3BvbnNlSGVhZGVycyB9KTtcbiAgfSk7XG5cbiAgcmVxLm9uQ29tcGxldGVkKChkZXRhaWxzKSA9PiB7XG4gICAgY29uc3Qga2V5ID0gYCR7d2luZG93LmlkfV8ke2RldGFpbHMuaWR9YDtcbiAgICBzaWduYWwoa2V5KTtcbiAgICBsb2dnZXIuZGVidWcoVEFHLCBgY29tcGxldGVkOmAsIHtcbiAgICAgIGtleSxcbiAgICAgIHVybDogZGV0YWlscy51cmwsXG4gICAgICBtZXRob2Q6IGRldGFpbHMubWV0aG9kLFxuICAgICAgc3RhdHVzQ29kZTogZGV0YWlscy5zdGF0dXNDb2RlLFxuICAgICAgc291cmNlLFxuICAgIH0pO1xuICB9KTtcblxuICByZXEub25FcnJvck9jY3VycmVkKChkZXRhaWxzKSA9PiB7XG4gICAgY29uc3Qga2V5ID0gYCR7d2luZG93LmlkfV8ke2RldGFpbHMuaWR9YDtcbiAgICBzaWduYWwoa2V5KTtcbiAgICBjb25zdCB7IHVybCwgbWV0aG9kLCBlcnJvciwgcmVzb3VyY2VUeXBlIH0gPSBkZXRhaWxzO1xuICAgIC8vIFN0dWJiZWQgbWVkaWEgZG93bmdyYWRlczogRVJSX0FCT1JURUQgaXMganVzdCB0aGUgbG9hZGVyIHJlc3RhcnRpbmcgb250byB0aGUgY3Jvc3Mtc2NoZW1lIHJlZGlyZWN0LlxuICAgIGNvbnN0IG1lZGlhID0gc3R1Yk1lZGlhICYmIHJlc291cmNlVHlwZSA9PT0gXCJtZWRpYVwiO1xuICAgIGNvbnN0IGxldmVsID0gbWVkaWEgPyAoZXJyb3IgPT09IFwibmV0OjpFUlJfQUJPUlRFRFwiID8gXCJkZWJ1Z1wiIDogXCJ3YXJuXCIpIDogXCJlcnJvclwiO1xuICAgIGxvZ2dlcltsZXZlbF0oVEFHLCBgZXJyb3I6YCwgeyBrZXksIHVybCwgbWV0aG9kLCBlcnJvciwgcmVzb3VyY2VUeXBlLCBzb3VyY2UgfSk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdW5zZXRJbnRlcmNlcHRvcih3aW5kb3c6IEJyb3dzZXJXaW5kb3cpIHtcbiAgY29uc3QgcmVxID0gd2luZG93LndlYkNvbnRlbnRzLnNlc3Npb24ud2ViUmVxdWVzdDtcbiAgcmVxLm9uQmVmb3JlUmVxdWVzdChudWxsKTtcbiAgcmVxLm9uSGVhZGVyc1JlY2VpdmVkKG51bGwpO1xuICByZXEub25Db21wbGV0ZWQobnVsbCk7XG4gIHJlcS5vbkVycm9yT2NjdXJyZWQobnVsbCk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzI3LlxuXG5pbXBvcnQgeyBCcm93c2VyV2luZG93IH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBwdXBBdWRpb1ByZWxvYWQsIHB1cElmcmFtZVByZWxvYWQgfSBmcm9tIFwiLi4vYmFzZS9jb25zdGFudHNcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuLi9iYXNlL2xvZ2dpbmdcIjtcbmltcG9ydCB7IHVzZVJldHJ5IH0gZnJvbSBcIi4uL2Jhc2UvcmV0cnlcIjtcbmltcG9ydCB7IHNsZWVwIH0gZnJvbSBcIi4uL2Jhc2UvdGltaW5nXCI7XG5pbXBvcnQgeyBjaGVja0hUTUwgfSBmcm9tIFwiLi9odG1sX2NoZWNrXCI7XG5pbXBvcnQgeyBwcm94aWVkVXJsLCBzZXRJbnRlcmNlcHRvciwgdW5zZXRJbnRlcmNlcHRvciB9IGZyb20gXCIuL25ldHdvcmtcIjtcbmltcG9ydCB7IGNyZWF0ZVN0ZWdvVVJMIH0gZnJvbSBcIi4vcHJvdG9jb2xcIjtcbmltcG9ydCB0eXBlIHsgSVBDUmVuZGVyT3B0aW9ucyB9IGZyb20gXCIuL3NjaGVtYVwiO1xuXG5jb25zdCBUQUcgPSBcIltXaW5kb3ddXCI7XG5jb25zdCBUSU1FT1VUX0VSUk9SID0gbmV3IEVycm9yKFwid2luZG93IHRpbWVvdXRcIik7XG5jb25zdCBDT05TT0xFX0lHTk9SRVMgPSBbYCVjRWxlY3Ryb24gU2VjdXJpdHkgV2FybmluZ2AsIFwiTWl4ZWQgQ29udGVudDogVGhlIHBhZ2UgYXRcIl07XG5cbmludGVyZmFjZSBGaW5pc2hPcHRpb25zIHtcbiAgc291cmNlOiBzdHJpbmc7XG4gIHdpbjogQnJvd3NlcldpbmRvdztcbiAgYWN0aW9uOiAoKSA9PiB2b2lkO1xuICB0aW1lb3V0TXM6IG51bWJlcjtcbiAgdG9sZXJhbnQ/OiBib29sZWFuO1xuICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbn1cblxuZnVuY3Rpb24gd2FpdEZvckZpbmlzaCh7IHNvdXJjZSwgd2luLCBhY3Rpb24sIHRpbWVvdXRNcywgdG9sZXJhbnQsIHNpZ25hbCB9OiBGaW5pc2hPcHRpb25zKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgbGV0IGRvbVJlYWR5ID0gZmFsc2U7XG4gICAgLy8gVG9sZXJhbnQgcHJvY2VlZHMgb24gYSBwYXJ0aWFsIERPTSBvbmx5IGFzIGEgdGltZW91dCBmYWxsYmFjayDigJQgc3RhcnRpbmcgb24gYmFyZSBkb20tcmVhZHkgbGVhdmVzIHRoZSBsb2FkIHBlbmRpbmcgYW5kIHdlZGdlcyB2aXJ0dWFsIHRpbWUuXG4gICAgY29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4gZG9uZSh0b2xlcmFudCAmJiBkb21SZWFkeSA/IHVuZGVmaW5lZCA6IFRJTUVPVVRfRVJST1IpLCB0aW1lb3V0TXMpO1xuICAgIGNvbnN0IGRvbmUgPSAoZXJyPzogdW5rbm93bikgPT4ge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgaWYgKGVycikge1xuICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHNpZ25hbD8udGhyb3dJZkFib3J0ZWQoKTtcbiAgICBzaWduYWw/LmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCAoKSA9PiBkb25lKHNpZ25hbC5yZWFzb24pLCB7XG4gICAgICBvbmNlOiB0cnVlLFxuICAgIH0pO1xuICAgIHdpbi53ZWJDb250ZW50cy5vbmNlKFwiZG9tLXJlYWR5XCIsICgpID0+IHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhUQUcsIFwiZG9tLXJlYWR5OlwiLCB7IHNvdXJjZSB9KTtcbiAgICAgIGRvbVJlYWR5ID0gdHJ1ZTtcbiAgICB9KTtcbiAgICB3aW4ud2ViQ29udGVudHMub25jZShcImRpZC1zdG9wLWxvYWRpbmdcIiwgKCkgPT4ge1xuICAgICAgbG9nZ2VyLmRlYnVnKFRBRywgXCJkaWQtc3RvcC1sb2FkaW5nOlwiLCB7IHNvdXJjZSB9KTtcbiAgICAgIGRvbmUoKTtcbiAgICB9KTtcbiAgICB3aW4ud2ViQ29udGVudHMub25jZShcImRpZC1mYWlsLWxvYWRcIiwgKF9lLCBjb2RlLCBkZXNjLCB1cmwpID0+IHtcbiAgICAgIGNvbnN0IG1zZyA9IGBkaWQtZmFpbC1sb2FkOiAke0pTT04uc3RyaW5naWZ5KHsgdXJsLCBzb3VyY2UsIGNvZGUsIGRlc2MgfSl9YDtcbiAgICAgIGxvZ2dlci5lcnJvcihUQUcsIG1zZyk7XG4gICAgICBkb25lKG5ldyBFcnJvcihtc2cpKTtcbiAgICB9KTtcbiAgICB3aW4ud2ViQ29udGVudHMub25jZShcInJlbmRlci1wcm9jZXNzLWdvbmVcIiwgKF9lLCB7IGV4aXRDb2RlLCByZWFzb24gfSkgPT4ge1xuICAgICAgY29uc3QgbXNnID0gYHJlbmRlci1wcm9jZXNzLWdvbmU6ICR7SlNPTi5zdHJpbmdpZnkoeyBzb3VyY2UsIGV4aXRDb2RlLCByZWFzb24gfSl9YDtcbiAgICAgIGxvZ2dlci5lcnJvcihUQUcsIG1zZyk7XG4gICAgICBkb25lKG5ldyBFcnJvcihtc2cpKTtcbiAgICB9KTtcbiAgICBhY3Rpb24oKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkaXNwb3NlV2luZG93KHdpbjogQnJvd3NlcldpbmRvdykge1xuICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcbiAgICB1bnNldEludGVyY2VwdG9yKHdpbik7XG4gICAgY29uc3QgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGxvZ2dlci53YXJuKFRBRywgXCJmb3JjZSBjbG9zZVwiKTtcbiAgICAgICAgd2luLmRlc3Ryb3koKTtcbiAgICAgIH0gY2F0Y2gge31cbiAgICAgIGRvbmUoKTtcbiAgICB9LCAxMDAwKTtcbiAgICBjb25zdCBkb25lID0gKCkgPT4ge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICAgIHJlc29sdmUoKTtcbiAgICB9O1xuICAgIHdpbi53ZWJDb250ZW50cy5zdG9wUGFpbnRpbmcoKTtcbiAgICB3aW4ud2ViQ29udGVudHMuZGVidWdnZXIuZGV0YWNoKCk7XG4gICAgd2luLm9uY2UoXCJjbG9zZWRcIiwgZG9uZSk7XG4gICAgd2luLmNsb3NlKCk7XG4gIH0pO1xufVxuXG5leHBvcnQgdHlwZSBXaW5kb3dDcmVhdGVkQ2FsbGJhY2sgPSAod2luZG93OiBCcm93c2VyV2luZG93KSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPjtcblxuZXhwb3J0IGludGVyZmFjZSBXaW5kb3dPcHRpb25zIHtcbiAgc291cmNlOiBzdHJpbmc7XG4gIHJlbmRlcmVyOiBJUENSZW5kZXJPcHRpb25zO1xuICB0b2xlcmFudD86IGJvb2xlYW47XG4gIG9uQ3JlYXRlZD86IFdpbmRvd0NyZWF0ZWRDYWxsYmFjaztcbiAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG59XG5cbmZ1bmN0aW9uIHBpY2tQcmVsb2FkKHJlbmRlcmVyOiBJUENSZW5kZXJPcHRpb25zKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKHJlbmRlcmVyLmRldGVybWluaXN0aWMpIHtcbiAgICByZXR1cm4gcHVwSWZyYW1lUHJlbG9hZDtcbiAgfVxuICBpZiAocmVuZGVyZXIud2l0aEF1ZGlvKSB7XG4gICAgcmV0dXJuIHB1cEF1ZGlvUHJlbG9hZDtcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5hc3luYyBmdW5jdGlvbiBvcGVuV2luZG93KHsgc291cmNlLCByZW5kZXJlciwgdG9sZXJhbnQsIHNpZ25hbCwgb25DcmVhdGVkIH06IFdpbmRvd09wdGlvbnMpOiBQcm9taXNlPEJyb3dzZXJXaW5kb3c+IHtcbiAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0LCB1c2VJbm5lclByb3h5IH0gPSByZW5kZXJlcjtcbiAgY29uc3Qgc3JjID0gdXNlSW5uZXJQcm94eSA/IHByb3hpZWRVcmwoc291cmNlKSA6IHNvdXJjZTtcblxuICBjb25zdCB3aW4gPSBuZXcgQnJvd3NlcldpbmRvdyh7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0OiBoZWlnaHQgKyAxLFxuICAgIG1pbldpZHRoOiB3aWR0aCxcbiAgICBtaW5IZWlnaHQ6IGhlaWdodCArIDEsXG4gICAgbWF4V2lkdGg6IHdpZHRoLFxuICAgIG1heEhlaWdodDogaGVpZ2h0ICsgMSxcbiAgICByZXNpemFibGU6IGZhbHNlLFxuICAgIG1pbmltaXphYmxlOiBmYWxzZSxcbiAgICBtb3ZhYmxlOiBmYWxzZSxcbiAgICBzaG93OiBmYWxzZSxcbiAgICB0cmFuc3BhcmVudDogdHJ1ZSxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IHVuZGVmaW5lZCxcbiAgICBmcmFtZTogZmFsc2UsXG4gICAgd2ViUHJlZmVyZW5jZXM6IHtcbiAgICAgIG9mZnNjcmVlbjogdHJ1ZSxcbiAgICAgIGJhY2tncm91bmRUaHJvdHRsaW5nOiBmYWxzZSxcbiAgICAgIG5vZGVJbnRlZ3JhdGlvbjogdHJ1ZSxcbiAgICAgIG5vZGVJbnRlZ3JhdGlvbkluU3ViRnJhbWVzOiB0cnVlLFxuICAgICAgbm9kZUludGVncmF0aW9uSW5Xb3JrZXI6IHRydWUsXG4gICAgICBjb250ZXh0SXNvbGF0aW9uOiBmYWxzZSxcbiAgICAgIHdlYlNlY3VyaXR5OiBmYWxzZSxcbiAgICAgIGFsbG93UnVubmluZ0luc2VjdXJlQ29udGVudDogdHJ1ZSxcbiAgICAgIGV4cGVyaW1lbnRhbEZlYXR1cmVzOiB0cnVlLFxuICAgICAgcHJlbG9hZDogcGlja1ByZWxvYWQocmVuZGVyZXIpLFxuICAgIH0sXG4gIH0pO1xuICBzZXRJbnRlcmNlcHRvcih7XG4gICAgc291cmNlLFxuICAgIHdpbmRvdzogd2luLFxuICAgIHVzZUlubmVyUHJveHksXG4gICAgc3R1Yk1lZGlhOiByZW5kZXJlci5kZXRlcm1pbmlzdGljLFxuICB9KTtcbiAgd2luLndlYkNvbnRlbnRzLmRlYnVnZ2VyLmF0dGFjaChcIjEuM1wiKTtcbiAgYXdhaXQgb25DcmVhdGVkPy4od2luKTtcblxuICB3aW4ud2ViQ29udGVudHMub24oXCJjb25zb2xlLW1lc3NhZ2VcIiwgKHsgbGV2ZWwsIG1lc3NhZ2UsIGxpbmVOdW1iZXIsIHNvdXJjZUlkIH0pID0+IHtcbiAgICAvLyBEcm9wIGhlYWRsZXNzIG5vaXNlOiBzZWN1cml0eSB3YXJuaW5ncyBhbmQgaHR0cOKGkmh0dHBzIGF1dG8tdXBncmFkZSBub3RpY2VzIGZvciBpbnRlcm5hbC1wcm94eSBhc3NldHMuXG4gICAgaWYgKGxldmVsID09PSBcIndhcm5pbmdcIiAmJiBDT05TT0xFX0lHTk9SRVMuZmluZCgoaSkgPT4gbWVzc2FnZS5zdGFydHNXaXRoKGkpKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBtc2dzID0gW1RBRywgXCJjb25zb2xlOlwiLCB7IG1lc3NhZ2UsIGxpbmVOdW1iZXIsIHNvdXJjZUlkLCBzb3VyY2UgfV07XG4gICAgbGV2ZWwgPT09IFwiZXJyb3JcIiA/IGxvZ2dlci5lcnJvciguLi5tc2dzKSA6IGxvZ2dlci5kZWJ1ZyguLi5tc2dzKTtcbiAgICByZW5kZXJlci5vbkNvbnNvbGUobGV2ZWwsIG1lc3NhZ2UpO1xuICB9KTtcblxuICB0cnkge1xuICAgIGNvbnN0IHVybCA9IGNyZWF0ZVN0ZWdvVVJMKHNyYywgeyB3aWR0aCwgaGVpZ2h0IH0pO1xuICAgIGF3YWl0IHdhaXRGb3JGaW5pc2goe1xuICAgICAgc291cmNlLFxuICAgICAgd2luLFxuICAgICAgYWN0aW9uOiAoKSA9PiB3aW4ubG9hZFVSTCh1cmwpLFxuICAgICAgdGltZW91dE1zOiByZW5kZXJlci53aW5kb3dUaW1lb3V0ICogMTAwMCxcbiAgICAgIHRvbGVyYW50LFxuICAgICAgc2lnbmFsLFxuICAgIH0pO1xuICB9IGNhdGNoIChlKSB7XG4gICAgYXdhaXQgZGlzcG9zZVdpbmRvdyh3aW4pO1xuICAgIHRocm93IGU7XG4gIH1cblxuICByZXR1cm4gd2luO1xufVxuXG5jb25zdCBvcGVuV2luZG93V2l0aFJldHJ5ID0gdXNlUmV0cnkoeyBmbjogb3BlbldpbmRvdywgbWF4QXR0ZW1wdHM6IDIgfSk7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsb2FkV2luZG93KHsgc291cmNlLCByZW5kZXJlciwgb25DcmVhdGVkLCBzaWduYWwgfTogV2luZG93T3B0aW9ucyk6IFByb21pc2U8QnJvd3NlcldpbmRvdz4ge1xuICBjaGVja0hUTUwoc291cmNlKTtcblxuICBzaWduYWw/LnRocm93SWZBYm9ydGVkKCk7XG4gIGxldCB3YXJtdXA6IEJyb3dzZXJXaW5kb3cgfCB1bmRlZmluZWQ7XG4gIGxldCBlcnJvcjogdW5rbm93bjtcbiAgdHJ5IHtcbiAgICB3YXJtdXAgPSBhd2FpdCBvcGVuV2luZG93V2l0aFJldHJ5KHsgc291cmNlLCByZW5kZXJlciwgc2lnbmFsIH0pO1xuICB9IGNhdGNoIChlKSB7XG4gICAgZXJyb3IgPSBlO1xuICB9XG5cbiAgY29uc3Qgb3BlbiA9ICgpID0+IHtcbiAgICByZXR1cm4gb3BlbldpbmRvdyh7XG4gICAgICBzb3VyY2UsXG4gICAgICByZW5kZXJlcixcbiAgICAgIG9uQ3JlYXRlZCxcbiAgICAgIHNpZ25hbCxcbiAgICAgIHRvbGVyYW50OiByZW5kZXJlci53aW5kb3dUb2xlcmFudCxcbiAgICB9KTtcbiAgfTtcblxuICBpZiAocmVuZGVyZXIud2luZG93VG9sZXJhbnQgJiYgZXJyb3IgPT09IFRJTUVPVVRfRVJST1IpIHtcbiAgICBsb2dnZXIud2FybihUQUcsIGB3YXJtdXAgdGltZW91dDogJHtzb3VyY2V9LCBmYWxsaW5nIGJhY2sgdG8gZG9tLXJlYWR5YCk7XG4gICAgcmV0dXJuIGF3YWl0IG9wZW4oKTtcbiAgfVxuXG4gIGlmIChlcnJvcikge1xuICAgIGNvbnN0IHsgbWVzc2FnZSwgc3RhY2sgfSA9IGVycm9yIGFzIEVycm9yO1xuICAgIHRocm93IG5ldyBFcnJvcihgZmFpbGVkIHRvIHdhcm11cCB3aW5kb3c6ICR7SlNPTi5zdHJpbmdpZnkoeyBzb3VyY2UsIG1lc3NhZ2UsIHN0YWNrIH0pfWApO1xuICB9XG5cbiAgaWYgKHdhcm11cCkge1xuICAgIHdhcm11cC53ZWJDb250ZW50cy5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcbiAgICB1bnNldEludGVyY2VwdG9yKHdhcm11cCk7XG4gICAgYXdhaXQgc2xlZXAoMjAwMCk7XG4gICAgYXdhaXQgZGlzcG9zZVdpbmRvdyh3YXJtdXApO1xuICB9XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgb3BlbigpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgY29uc3QgeyBtZXNzYWdlLCBzdGFjayB9ID0gZSBhcyBFcnJvcjtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGZhaWxlZCB0byBsb2FkIHdpbmRvdzogJHtKU09OLnN0cmluZ2lmeSh7IHNvdXJjZSwgbWVzc2FnZSwgc3RhY2sgfSl9YCk7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDkuXG5cbmltcG9ydCB0eXBlIHsgTmF0aXZlSW1hZ2UsIFNpemUgfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IEJMQU5LX1dBUk5fUkFUSU8sIEJsYW5rRnJhbWVTdGF0cyB9IGZyb20gXCIuLi9iYXNlL2JsYW5rX2ZyYW1lXCI7XG5pbXBvcnQgeyByZXNpemVEcmF3YWJsZSB9IGZyb20gXCIuLi9iYXNlL2NkcFwiO1xuaW1wb3J0IHsgRW5jb2RlclBpcGVsaW5lIH0gZnJvbSBcIi4uL2Jhc2UvZW5jb2Rlci9waXBlbGluZVwiO1xuaW1wb3J0IHsgRnJhbWVEcm9wU3RhdHMgfSBmcm9tIFwiLi4vYmFzZS9mcmFtZV9kcm9wXCI7XG5pbXBvcnQgeyBzaXplRXF1YWxzIH0gZnJvbSBcIi4uL2Jhc2UvaW1hZ2VcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuLi9iYXNlL2xvZ2dpbmdcIjtcbmltcG9ydCB7IHR5cGUgQXVkaW9EaXNwb3NhbCwgYXR0YWNoQXVkaW9MaXN0ZW5lcnMgfSBmcm9tIFwiLi9hdWRpb1wiO1xuaW1wb3J0IHR5cGUgeyBJcGNEb25lUGF5bG9hZCB9IGZyb20gXCIuL2lwY1wiO1xuaW1wb3J0IHR5cGUgeyBJUENSZW5kZXJPcHRpb25zIH0gZnJvbSBcIi4vc2NoZW1hXCI7XG5pbXBvcnQgeyBkZWNvZGVTdGVnbywgc3RhcnRTdGVnbyB9IGZyb20gXCIuL3N0ZWdvXCI7XG5pbXBvcnQgeyBkaXNwb3NlV2luZG93LCBsb2FkV2luZG93IH0gZnJvbSBcIi4vd2luZG93XCI7XG5cbmNvbnN0IFRBRyA9IFwiW1JlbmRlcl1cIjtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlbmRlcihvcHRpb25zOiBJUENSZW5kZXJPcHRpb25zKTogUHJvbWlzZTxJcGNEb25lUGF5bG9hZD4ge1xuICBjb25zdCB7IHNvdXJjZSwgZnBzLCB3aWR0aCwgaGVpZ2h0LCBkdXJhdGlvbiwgd2l0aEF1ZGlvLCBvdXRGaWxlLCBkaXNhYmxlSHdDb2RlYywgc2lnbmFsLCBvblByb2dyZXNzIH0gPSBvcHRpb25zO1xuXG4gIGF3YWl0IHVzaW5nIGVuY29kZXIgPSBhd2FpdCBFbmNvZGVyUGlwZWxpbmUuY3JlYXRlKHsgd2lkdGgsIGhlaWdodCwgZnBzLCBvdXRGaWxlLCB3aXRoQXVkaW8sIGRpc2FibGVId0NvZGVjIH0pO1xuXG4gIGNvbnN0IHRvdGFsID0gTWF0aC5jZWlsKGZwcyAqIGR1cmF0aW9uKTtcbiAgY29uc3QgZnJhbWVJbnRlcnZhbCA9IDEwMDAgLyBmcHM7XG4gIGNvbnN0IGZyYW1lU2l6ZTogU2l6ZSA9IHsgd2lkdGgsIGhlaWdodDogaGVpZ2h0ICsgMSB9O1xuXG4gIGxldCB3cml0dGVuID0gMDtcbiAgbGV0IGxhc3RXcml0dGVuVGltZTogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICBsZXQgcHJvZ3Jlc3MgPSAwO1xuICBsZXQgZW5jb2RlRXJyb3I6IEVycm9yIHwgdW5kZWZpbmVkO1xuICBsZXQgcmVzb2x2ZXI6ICgoKSA9PiB2b2lkKSB8IHVuZGVmaW5lZDtcbiAgbGV0IHJlamVjdGVyOiAoKHJlYXNvbj86IHVua25vd24pID0+IHZvaWQpIHwgdW5kZWZpbmVkO1xuICBsZXQgaW50ZXJ2YWw6IE5vZGVKUy5UaW1lb3V0IHwgdW5kZWZpbmVkO1xuICBjb25zdCBkcm9wU3RhdHMgPSBuZXcgRnJhbWVEcm9wU3RhdHMoZnBzKTtcbiAgY29uc3QgYmxhbmtTdGF0cyA9IG5ldyBCbGFua0ZyYW1lU3RhdHMod2lkdGgsIGhlaWdodCk7XG5cbiAgbGV0IGRpc3Bvc2VBdWRpbzogQXVkaW9EaXNwb3NhbCB8IHVuZGVmaW5lZDtcbiAgY29uc3Qgc2NoZWR1bGVGcmFtZSA9IChmcmFtZTogQnVmZmVyKSA9PiB7XG4gICAgd3JpdHRlbisrO1xuICAgIGJsYW5rU3RhdHMuc2FtcGxlKGZyYW1lKTtcbiAgICBlbmNvZGVyLmVuY29kZUJHUkEoZnJhbWUpLmNhdGNoKChlKSA9PiAoZW5jb2RlRXJyb3IgPz89IGUpKTtcbiAgfTtcblxuICBjb25zdCBwYWludCA9IChfZTogdW5rbm93biwgX3I6IHVua25vd24sIGltYWdlOiBOYXRpdmVJbWFnZSkgPT4ge1xuICAgIGVuY29kZUVycm9yID8/PSBzaWduYWw/LnJlYXNvbjtcbiAgICBpZiAoZW5jb2RlRXJyb3IpIHtcbiAgICAgIHJlamVjdGVyPy4oZW5jb2RlRXJyb3IpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGltYWdlU2l6ZSA9IGltYWdlLmdldFNpemUoKTtcbiAgICBpZiAoIXNpemVFcXVhbHMoaW1hZ2VTaXplLCBmcmFtZVNpemUpKSB7XG4gICAgICAvLyBOT1RFKEF1dG9rYWthKTogV2UgbXVzdCBlbnN1cmUgZnJhbWUgaXMgcmVhZHkgb24gZWxlY3Ryb24gdjQxK1xuICAgICAgcmVzaXplRHJhd2FibGUoY2RwLCBmcmFtZVNpemUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIERlY29kZSBzdGVnbyB0aW1lc3RhbXAgZnJvbSB0aGUgYm90dG9tIHBpeGVsIHJvdyB3aXRob3V0IGZ1bGwgYml0bWFwIGNvcHlcbiAgICBjb25zdCBiaXRtYXAgPSBpbWFnZS50b0JpdG1hcCgpO1xuICAgIGNvbnN0IGN1cnJlbnRUaW1lID0gZGVjb2RlU3RlZ28oYml0bWFwLCBpbWFnZVNpemUpO1xuICAgIGlmIChjdXJyZW50VGltZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBlbmNvZGVFcnJvciA/Pz0gbmV3IEVycm9yKGBubyB0aW1lc3RhbXAgQCAke3dyaXR0ZW59YCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gU2tpcCBmcmFtZXMgdGhhdCBhcnJpdmUgdG9vIHNvb24gKDwgODAlIG9mIGZyYW1lIGludGVydmFsKVxuICAgIGlmIChsYXN0V3JpdHRlblRpbWUgIT09IHVuZGVmaW5lZCAmJiBjdXJyZW50VGltZSAtIGxhc3RXcml0dGVuVGltZSA8IGZyYW1lSW50ZXJ2YWwgKiAwLjgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjcm9wcGVkID0gQnVmZmVyLmZyb20oYml0bWFwLmJ1ZmZlciwgYml0bWFwLmJ5dGVPZmZzZXQsIGhlaWdodCAqIHdpZHRoICogNCk7XG5cbiAgICBpZiAobGFzdFdyaXR0ZW5UaW1lID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHNjaGVkdWxlRnJhbWUoY3JvcHBlZCk7XG4gICAgICBkcm9wU3RhdHMud3JvdGUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgdGltZURlbHRhID0gY3VycmVudFRpbWUgLSBsYXN0V3JpdHRlblRpbWU7XG4gICAgICBpZiAodGltZURlbHRhIDw9IGZyYW1lSW50ZXJ2YWwgKiAxLjIpIHtcbiAgICAgICAgc2NoZWR1bGVGcmFtZShjcm9wcGVkKTtcbiAgICAgICAgZHJvcFN0YXRzLndyb3RlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBmcmFtZXNUb0luc2VydCA9IE1hdGgucm91bmQodGltZURlbHRhIC8gZnJhbWVJbnRlcnZhbCk7XG4gICAgICAgIGRyb3BTdGF0cy5kcm9wcGVkKGZyYW1lc1RvSW5zZXJ0IC0gMSk7XG4gICAgICAgIGRyb3BTdGF0cy53cm90ZSgpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZyYW1lc1RvSW5zZXJ0ICYmIHdyaXR0ZW4gPCB0b3RhbDsgaSsrKSB7XG4gICAgICAgICAgc2NoZWR1bGVGcmFtZShjcm9wcGVkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBsYXN0V3JpdHRlblRpbWUgPSBjdXJyZW50VGltZTtcblxuICAgIGNvbnN0IG5ld1Byb2dyZXNzID0gTWF0aC5mbG9vcigod3JpdHRlbiAvIHRvdGFsKSAqIDEwMCk7XG4gICAgaWYgKG5ld1Byb2dyZXNzICE9PSBwcm9ncmVzcykge1xuICAgICAgcHJvZ3Jlc3MgPSBuZXdQcm9ncmVzcztcbiAgICAgIG9uUHJvZ3Jlc3MocHJvZ3Jlc3MpO1xuICAgIH1cblxuICAgIGNvbnN0IGR1cmF0aW9uTXMgPSBkdXJhdGlvbiAqIDEwMDA7XG4gICAgaWYgKGN1cnJlbnRUaW1lID49IGR1cmF0aW9uTXMgLSBmcmFtZUludGVydmFsICogMC41IHx8IHdyaXR0ZW4gPj0gdG90YWwpIHtcbiAgICAgIHJlc29sdmVyPy4oKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3Qgd2luID0gYXdhaXQgbG9hZFdpbmRvdyh7XG4gICAgc291cmNlLFxuICAgIHJlbmRlcmVyOiBvcHRpb25zLFxuICAgIHNpZ25hbCxcbiAgICBvbkNyZWF0ZWQ6ICh3aW4pID0+IHtcbiAgICAgIGlmICh3aXRoQXVkaW8pIHtcbiAgICAgICAgZGlzcG9zZUF1ZGlvID0gYXR0YWNoQXVkaW9MaXN0ZW5lcnMoe1xuICAgICAgICAgIHdjOiB3aW4ud2ViQ29udGVudHMsXG4gICAgICAgICAgZW5jb2RlcixcbiAgICAgICAgICBnZXRWaWRlb1RpbWVNczogKCkgPT4gbGFzdFdyaXR0ZW5UaW1lID8/IDAsXG4gICAgICAgICAgb25FcnJvcjogKGU6IEVycm9yKSA9PiAoZW5jb2RlRXJyb3IgPz89IGUpLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LFxuICB9KTtcbiAgY29uc3QgY2RwID0gd2luLndlYkNvbnRlbnRzLmRlYnVnZ2VyO1xuXG4gIHRyeSB7XG4gICAgd2luLndlYkNvbnRlbnRzLnN0b3BQYWludGluZygpO1xuICAgIHdpbi53ZWJDb250ZW50cy5zZXRGcmFtZVJhdGUoZnBzKTtcbiAgICB3aW4ud2ViQ29udGVudHMub24oXCJwYWludFwiLCBwYWludCk7XG4gICAgd2luLndlYkNvbnRlbnRzLnN0YXJ0UGFpbnRpbmcoKTtcbiAgICBzaWduYWw/LnRocm93SWZBYm9ydGVkKCk7XG4gICAgc2lnbmFsPy5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgKCkgPT4gcmVqZWN0ZXI/LihzaWduYWwucmVhc29uKSwgeyBvbmNlOiB0cnVlIH0pO1xuICAgIGF3YWl0IHN0YXJ0U3RlZ28oY2RwKTtcbiAgICBhd2FpdCBuZXcgUHJvbWlzZTx2b2lkPigociwgaikgPT4ge1xuICAgICAgW3Jlc29sdmVyLCByZWplY3Rlcl0gPSBbciwgal07XG4gICAgICBsZXQgbGFzdFdyaXR0ZW4gPSAwO1xuICAgICAgbGV0IHN0dWNrID0gMDtcbiAgICAgIGludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgICBpZiAod3JpdHRlbiAhPT0gbGFzdFdyaXR0ZW4pIHtcbiAgICAgICAgICBsYXN0V3JpdHRlbiA9IHdyaXR0ZW47XG4gICAgICAgICAgc3R1Y2sgPSAwO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3R1Y2sgPj0gMykge1xuICAgICAgICAgIHJlamVjdGVyPy4obmV3IEVycm9yKFwiZHJhd2FibGUgdGltZW91dFwiKSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGxvZ2dlci53YXJuKFRBRywgYCR7c291cmNlfSByZW5kZXIgaXMgZXh0cmVtZWx5IHNsb3csIHdyaXR0ZW49JHt3cml0dGVufSBzdHVjaz0ke3N0dWNrfWApO1xuICAgICAgICBzdHVjaysrO1xuICAgICAgICB3aW4ud2ViQ29udGVudHMuaW52YWxpZGF0ZSgpO1xuICAgICAgfSwgMTAwMCk7XG4gICAgfSk7XG4gIH0gZmluYWxseSB7XG4gICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbCk7XG4gICAgd2luLndlYkNvbnRlbnRzLm9mZihcInBhaW50XCIsIHBhaW50KTtcbiAgICBhd2FpdCBkaXNwb3NlV2luZG93KHdpbik7XG4gICAgZGlzcG9zZUF1ZGlvPy4oKTtcbiAgICBhd2FpdCBlbmNvZGVyLmZpbmlzaCgpO1xuICB9XG5cbiAgaWYgKGVuY29kZUVycm9yIHx8IHdyaXR0ZW4gPT09IDApIHtcbiAgICB0aHJvdyBlbmNvZGVFcnJvciA/PyBuZXcgRXJyb3IoXCJubyBmcmFtZXMgY2FwdHVyZWRcIik7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgZHJvcFNjb3JlID0gZHJvcFN0YXRzLmZpbmFsaXplKCk7XG4gICAgY29uc3QgYmxhbmsgPSBibGFua1N0YXRzLmZpbmFsaXplKCk7XG4gICAgaWYgKGJsYW5rID49IEJMQU5LX1dBUk5fUkFUSU8pIHtcbiAgICAgIGxvZ2dlci53YXJuKFRBRywgYCR7c291cmNlfSBibGFuay1mcmFtZSByYXRpbyAke01hdGgucm91bmQoYmxhbmsgKiAxMDApfSUg4oCUIHBvc3NpYmxlIHdoaXRlL2JsYW5rIHNjcmVlbmApO1xuICAgIH1cbiAgICByZXR1cm4geyB3cml0dGVuLCBqYW5rOiBkcm9wU2NvcmUuamFuaywgb3V0RmlsZSwgYmxhbmsgfTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMy8wMi5cblxuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4uL2Jhc2UvbG9nZ2luZ1wiO1xuXG5jb25zdCBUQUcgPSBcIltSZXJlbmRlcl1cIjtcblxuZXhwb3J0IGNvbnN0IE1BWF9SRU5ERVJfQVRURU1QVFMgPSAzO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd2l0aFJlcmVuZGVyPFQ+KHNpZ25hbDogQWJvcnRTaWduYWwsIGFjdGlvbjogKCkgPT4gUHJvbWlzZTxUPik6IFByb21pc2U8VD4ge1xuICBsZXQgbGFzdEVycjogdW5rbm93bjtcbiAgZm9yIChsZXQgYXR0ZW1wdCA9IDA7IGF0dGVtcHQgPCBNQVhfUkVOREVSX0FUVEVNUFRTOyBhdHRlbXB0KyspIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IGFjdGlvbigpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmIChzaWduYWwuYWJvcnRlZCkge1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgICAgbGFzdEVyciA9IGU7XG4gICAgICBsb2dnZXIud2FybihUQUcsIGByZXRyeSAke2F0dGVtcHQgKyAxfS8ke01BWF9SRU5ERVJfQVRURU1QVFN9OiAkeyhlIGFzIEVycm9yKS5tZXNzYWdlfWApO1xuICAgIH1cbiAgfVxuICB0aHJvdyBsYXN0RXJyO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNS8xOC5cblxuaW1wb3J0IHR5cGUgeyBXZWJGcmFtZU1haW4gfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuLi8uLi9iYXNlL2xvZ2dpbmdcIjtcbmltcG9ydCB7IGFib3J0YWJsZSB9IGZyb20gXCIuLi8uLi9iYXNlL3RpbWluZ1wiO1xuXG5jb25zdCBUQUcgPSBcIltWaWRlb11cIjtcblxuZXhwb3J0IGludGVyZmFjZSBBZHZhbmNlT3B0aW9ucyB7XG4gIGZyYW1lOiBXZWJGcmFtZU1haW4gfCB1bmRlZmluZWQ7XG4gIHRpbWVzdGFtcE1zOiBudW1iZXI7XG4gIHNpZ25hbD86IEFib3J0U2lnbmFsO1xufVxuXG4vLyBPbmx5IHRoZSBkZXRlcm1pbmlzdGljIHJlbmRlcmVyIChzaG9vdCkgZHJpdmVzIHRoaXM7IHJlYWwtdGltZSB2aWRlb3Mgc2VsZi10aWNrIHZpYSByQUYgaW4gdGhlIHBhZ2UuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYWR2YW5jZVZpZGVvcyh7IGZyYW1lLCB0aW1lc3RhbXBNcywgc2lnbmFsIH06IEFkdmFuY2VPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmICghZnJhbWU/LnVybCkge1xuICAgIHJldHVybjtcbiAgfVxuICBzaWduYWw/LnRocm93SWZBYm9ydGVkKCk7XG4gIHRyeSB7XG4gICAgLy8gU291cmNlIG9wZW5zIGFyZSB3YWxsLXRpbWUgYXN5bmM7IHNldHRsZSB0aGVtIGZpcnN0IHNvIHZpcnR1YWwgdGltZSBjYW4ndCBzdGVwIG9udG8gYSBibGFuaywgbm90LXlldC1vcGVuZWQgPHZpZGVvPi5cbiAgICBhd2FpdCBhYm9ydGFibGUoZnJhbWUuZXhlY3V0ZUphdmFTY3JpcHQoYHdpbmRvdy5fX3B1cF92aWRlb19fJiZ3aW5kb3cuX19wdXBfdmlkZW9fXy5yZWFkeSgpYCksIHNpZ25hbCk7XG4gICAgLy8gTm8gd2FsbC1jbG9jayBjYXA6IGEgc2xvdyBmZXRjaCBkZWxheXMgdGhlIGZyYW1lIGluc3RlYWQgb2YgZHJvcHBpbmcgaXQsIGtlZXBpbmcgLWQgb3V0cHV0IGRldGVybWluaXN0aWMuXG4gICAgYXdhaXQgYWJvcnRhYmxlKFxuICAgICAgZnJhbWUuZXhlY3V0ZUphdmFTY3JpcHQoYHdpbmRvdy5fX3B1cF92aWRlb19fJiZ3aW5kb3cuX19wdXBfdmlkZW9fXy5hZHZhbmNlKCR7dGltZXN0YW1wTXN9KWApLFxuICAgICAgc2lnbmFsLFxuICAgICk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBzaWduYWw/LnRocm93SWZBYm9ydGVkKCk7XG4gICAgbG9nZ2VyLndhcm4oVEFHLCBgYWR2YW5jZSBza2lwcGVkOiAke2UgaW5zdGFuY2VvZiBFcnJvciA/IGUubWVzc2FnZSA6IFN0cmluZyhlKX1gKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8wMS5cblxuaW1wb3J0IHsgd2l0aFRpbWVvdXQgfSBmcm9tIFwiLi4vYmFzZS90aW1pbmdcIjtcbmltcG9ydCB7IHR5cGUgQWR2YW5jZU9wdGlvbnMsIGFkdmFuY2VWaWRlb3MgfSBmcm9tIFwiLi92aWRlby9hZHZhbmNlXCI7XG5cbmV4cG9ydCBjb25zdCBUSUNLX1NZTUJPTCA9IFwiX19wdXBfdGlja19fXCI7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB0aWNrKGFyZ3M6IEFkdmFuY2VPcHRpb25zKSB7XG4gIGNvbnN0IHsgZnJhbWUsIHRpbWVzdGFtcE1zIH0gPSBhcmdzO1xuICBpZiAoIWZyYW1lKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IGV4cHIgPSBgd2luZG93LiR7VElDS19TWU1CT0x9JiZ3aW5kb3cuJHtUSUNLX1NZTUJPTH0ucHJvY2Vzcygke3RpbWVzdGFtcE1zfSlgO1xuICBjb25zdCB0aWNrRXYgPSBmcmFtZS5leGVjdXRlSmF2YVNjcmlwdChleHByKTtcbiAgYXdhaXQgUHJvbWlzZS5hbGwoW3dpdGhUaW1lb3V0KHRpY2tFdiwgNV8wMDAsIFwidGljay5leGVjdXRlSmF2YVNjcmlwdFwiKSwgYWR2YW5jZVZpZGVvcyhhcmdzKV0pO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNi8yMy5cblxuaW1wb3J0IHsgRGVtdXhlciwgdHlwZSBEZW11eGVyT3B0aW9ucyB9IGZyb20gXCJub2RlLWF2L2FwaVwiO1xuXG4vLyBmZm1wZWcgcmVhZC93cml0ZSBkZWFkbGluZSAowrVzKTsgYSBibG9ja2luZyBvcGVuIGlnbm9yZXMgQWJvcnRTaWduYWwsIHNvIHRoaXMgYm91bmRzIGEgc3R1Y2sgQ0ROLlxuY29uc3QgUldfVElNRU9VVF9VUyA9IFwiODAwMDAwMFwiO1xuXG4vLyBmZm1wZWcgb3BlbnMgaHR0cC9odHRwcyB3aXRoIG5hdGl2ZSBieXRlLXJhbmdlIHJlcXVlc3RzLCBzbyBvbmx5IHRoZSBkZWNvZGVkIHJhbmdlcyBkb3dubG9hZC5cbmV4cG9ydCBmdW5jdGlvbiBvcGVuSW5wdXQoc3JjOiBzdHJpbmcsIHNpZ25hbD86IEFib3J0U2lnbmFsKTogUHJvbWlzZTxEZW11eGVyPiB7XG4gIGNvbnN0IG9wdGlvbnM6IERlbXV4ZXJPcHRpb25zID0geyBzaWduYWwsIG9wdGlvbnM6IHsgcndfdGltZW91dDogUldfVElNRU9VVF9VUyB9IH07XG4gIHJldHVybiBEZW11eGVyLm9wZW4oc3JjLCBvcHRpb25zKTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDYvMjUuXG5cbmltcG9ydCB0eXBlIHsgRnJhbWUgfSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHsgRGVjb2RlciwgdHlwZSBEZW11eGVyLCBGaWx0ZXJBUEkgfSBmcm9tIFwibm9kZS1hdi9hcGlcIjtcbmltcG9ydCB7IEFWTUVESUFfVFlQRV9WSURFTyB9IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuaW1wb3J0IHR5cGUgeyBWaWRlb01ldGEgfSBmcm9tIFwiLi9mcmFtZV9zZXJ2ZXJcIjtcbmltcG9ydCB7IG9wZW5JbnB1dCB9IGZyb20gXCIuL29wZW5cIjtcblxuZXhwb3J0IGludGVyZmFjZSBEZWNvZGVkRnJhbWUge1xuICBpZHg6IG51bWJlcjtcbiAgYnVmOiBCdWZmZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGVjb2RlRnJhbWVzT3B0aW9ucyB7XG4gIHNyYzogc3RyaW5nO1xuICBtZXRhOiBWaWRlb01ldGE7XG4gIHNpZ25hbDogQWJvcnRTaWduYWw7XG4gIC8vIFJlY2VpdmVzIHRoZSBsaXZlIERlbXV4ZXI7IGNhbGxlcnMga2VlcCBpdCB0byBpbnRlcnJ1cHQoKSBhIGJsb2NrZWQgbmV0d29yayByZWFkIG9uIHRlYXJkb3duLlxuICBvbkRlbXV4ZXI/OiAoZDogRGVtdXhlcikgPT4gdm9pZDtcbn1cblxuLy8gRGVjb2RlIGEgc291cmNlIHRvIGZwcy1yZXNhbXBsZWQsIGRpc3BsYXktc2NhbGVkLCB0aWdodC1SR0JBIGZyYW1lcyBpbiBvcmRlciAoaWR4ID0gMS1iYXNlZCBkZWNvZGUgcG9zaXRpb24pLiBDb25zdW1lciBiYWNrcHJlc3N1cmUgaXMganVzdCBwdWxsaW5nIHNsb3dlci5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiogZGVjb2RlRnJhbWVzKHtcbiAgc3JjLFxuICBtZXRhLFxuICBzaWduYWwsXG4gIG9uRGVtdXhlcixcbn06IERlY29kZUZyYW1lc09wdGlvbnMpOiBBc3luY0dlbmVyYXRvcjxEZWNvZGVkRnJhbWU+IHtcbiAgYXdhaXQgdXNpbmcgaW5wdXQgPSBhd2FpdCBvcGVuSW5wdXQoc3JjLCBzaWduYWwpO1xuICBvbkRlbXV4ZXI/LihpbnB1dCk7XG4gIGNvbnN0IHN0cmVhbSA9IGlucHV0LnN0cmVhbXM/LmZpbmQoKHMpID0+IHMuY29kZWNwYXIuY29kZWNUeXBlID09PSBBVk1FRElBX1RZUEVfVklERU8pO1xuICBpZiAoIXN0cmVhbSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIm5vIHZpZGVvIHN0cmVhbVwiKTtcbiAgfVxuICB1c2luZyBkZWMgPSBhd2FpdCBEZWNvZGVyLmNyZWF0ZShzdHJlYW0sIHsgc2lnbmFsIH0pO1xuICBjb25zdCB7IGZyYW1lV2lkdGgsIGZyYW1lSGVpZ2h0LCB3aWR0aCwgaGVpZ2h0LCBmcHMgfSA9IG1ldGE7XG4gIGNvbnN0IHNjYWxlID0gZnJhbWVXaWR0aCAhPT0gd2lkdGggfHwgZnJhbWVIZWlnaHQgIT09IGhlaWdodCA/IGBzY2FsZT0ke2ZyYW1lV2lkdGh9OiR7ZnJhbWVIZWlnaHR9LGAgOiBcIlwiO1xuICB1c2luZyBmaWx0ZXIgPSBGaWx0ZXJBUEkuY3JlYXRlKGBmcHM9JHtmcHN9LCR7c2NhbGV9Zm9ybWF0PXJnYmFgLCB7IHNpZ25hbCB9KTtcbiAgbGV0IGsgPSAwO1xuICBmb3IgYXdhaXQgKHVzaW5nIGZyYW1lIG9mIGZpbHRlci5mcmFtZXMoZGVjLmZyYW1lcyhpbnB1dC5wYWNrZXRzKHN0cmVhbS5pbmRleCkpKSkge1xuICAgIGlmICghZnJhbWUpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICB5aWVsZCB7IGlkeDogKytrLCBidWY6IHBhY2tSZ2JhKGZyYW1lKSB9O1xuICB9XG59XG5cbi8vIFRpZ2h0IFJHQkEgY29weSAoZHJvcCBsaWJhdiByb3cgcGFkZGluZykgc28gdGhlIHBhZ2UgY2FuIHdyYXAgaXQgc3RyYWlnaHQgaW50byBJbWFnZURhdGEuXG5mdW5jdGlvbiBwYWNrUmdiYShmcmFtZTogRnJhbWUpOiBCdWZmZXIge1xuICBjb25zdCByb3cgPSBmcmFtZS53aWR0aCAqIDQ7XG4gIGNvbnN0IHN0cmlkZSA9IGZyYW1lLmxpbmVzaXplWzBdITtcbiAgY29uc3Qgc3JjID0gZnJhbWUuZGF0YSFbMF0hO1xuICBpZiAoc3RyaWRlID09PSByb3cpIHtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20oc3JjLnN1YmFycmF5KDAsIHJvdyAqIGZyYW1lLmhlaWdodCkpO1xuICB9XG4gIGNvbnN0IG91dCA9IEJ1ZmZlci5hbGxvY1Vuc2FmZShyb3cgKiBmcmFtZS5oZWlnaHQpO1xuICBmb3IgKGxldCB5ID0gMDsgeSA8IGZyYW1lLmhlaWdodDsgeSsrKSB7XG4gICAgc3JjLmNvcHkob3V0LCB5ICogcm93LCB5ICogc3RyaWRlLCB5ICogc3RyaWRlICsgcm93KTtcbiAgfVxuICByZXR1cm4gb3V0O1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNi8wMi5cblxuaW1wb3J0IHR5cGUgeyBEZW11eGVyIH0gZnJvbSBcIm5vZGUtYXYvYXBpXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi4vLi4vYmFzZS9sb2dnaW5nXCI7XG5pbXBvcnQgeyBkZWNvZGVGcmFtZXMgfSBmcm9tIFwiLi9kZWNvZGVcIjtcbmltcG9ydCB0eXBlIHsgVmlkZW9NZXRhIH0gZnJvbSBcIi4vZnJhbWVfc2VydmVyXCI7XG5cbmNvbnN0IFRBRyA9IFwiW0RlY29kZVNlc3Npb25dXCI7XG5jb25zdCBERUNPREVfQUhFQUQgPSA0OyAvLyBkZWNvZGUgYSBmZXcgZnJhbWVzIHBhc3QgdGhlIGhpZ2hlc3QgcmVxdWVzdDsgdGhlIHBhZ2UgYWxyZWFkeSBwcmVmZXRjaGVzXG5jb25zdCBLRUVQX0JFSElORCA9IDE2OyAvLyBtaW4gZnJhbWVzIGhlbGQgYmVoaW5kIHRoZSBoZWFkOyBtdXN0IGV4Y2VlZCB0aGUgcGFnZSdzIHByZWZldGNoIGxlYWQgKEFIRUFEPTEwKVxuY29uc3QgTUVNT1JZX0JVREdFVCA9IDI1NiAqIDEwMjQgKiAxMDI0OyAvLyByZXRhaW4gZGVjb2RlZCBmcmFtZXMgdXAgdG8gdGhpcyBwZXItc2Vzc2lvbiBidWRnZXQgc28gYSBzbWFsbCBsb29waW5nIHZpZGVvIHJlLXNlcnZlcyBmcm9tIG1lbW9yeSBpbnN0ZWFkIG9mIHJlLWRlY29kaW5nXG5jb25zdCBNQVhfUEFTU19SRVRSWSA9IDM7IC8vIHJlLW9wZW4gYSBzdHJlYW1lZCBzb3VyY2UgdGhpcyBtYW55IHRpbWVzIG9uIGEgdHJhbnNpZW50IGRlY29kZSBlcnJvciBiZWZvcmUgcmVwb3J0aW5nIGVuZC1vZi1zdHJlYW1cblxuaW50ZXJmYWNlIFdhaXRlciB7XG4gIGlkeDogbnVtYmVyO1xuICByZXNvbHZlOiAoYjogQnVmZmVyKSA9PiB2b2lkO1xufVxuXG4vLyBEZW1hbmQtZHJpdmVuIGluLXByb2Nlc3MgZGVjb2RlIChEZW11eGVy4oaSRGVjb2RlcuKGkmZwcy9zY2FsZS9yZ2JhIGZpbHRlcikgc2VydmluZyBmcmFtZSBOIGFzIHRpZ2h0IFJHQkE7IGZvcndhcmQtb25seSDigJQgYSBsb29wL3Jld2luZCByZS1kZWNvZGVzIGZyb20gZnJhbWUgMSB1bmxlc3MgdGhlIHdob2xlIGNsaXAgc3RpbGwgZml0cyB0aGUgbWVtb3J5IGJ1ZGdldC5cbmV4cG9ydCBjbGFzcyBEZWNvZGVTZXNzaW9uIHtcbiAgcHJpdmF0ZSBfYnVmID0gbmV3IE1hcDxudW1iZXIsIEJ1ZmZlcj4oKTtcbiAgcHJpdmF0ZSBfcmVhZHkgPSAwO1xuICBwcml2YXRlIF93YW50ID0gMTtcbiAgcHJpdmF0ZSBfZG9uZSA9IGZhbHNlO1xuICBwcml2YXRlIF9jbG9zZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfZ2VuID0gMDtcbiAgcHJpdmF0ZSBfY3RybCA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgcHJpdmF0ZSBfd2FpdGVycyA9IG5ldyBTZXQ8V2FpdGVyPigpO1xuICBwcml2YXRlIF9yZXN1bWU6ICgoKSA9PiB2b2lkKSB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSBfcmVzdGFydDogKCgpID0+IHZvaWQpIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIF9kZW11eGVyOiBEZW11eGVyIHwgdW5kZWZpbmVkO1xuICAvLyBMZWFkIGZyYW1lcyBoZWxkIG9uIHRoZSBmaXJzdCBkZWNvZGFibGUgZnJhbWU7IGNvbnRlbnQgaWR4IGlzIG9mZnNldCBwYXN0IHRoZW0uXG4gIHByaXZhdGUgcmVhZG9ubHkgX2xlYWRGcmFtZXM6IG51bWJlcjtcbiAgLy8gRnJhbWVzIGtlcHQgYmVoaW5kIHRoZSBoZWFkOyBhIGNsaXAgdGhhdCBmaXRzIHRoZSBidWRnZXQgcmV0YWlucyBldmVyeSBmcmFtZSwgc28gbG9vcHMgcmUtc2VydmUgZnJvbSBtZW1vcnkuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2tlZXBDb3VudDogbnVtYmVyO1xuICAvLyBSZXNvbHZlcyB3aGVuIHB1bXAoKSBmdWxseSB1bndpbmRzIOKAlCBhd2FpdGVkIG9uIGNsb3NlIHNvIG5vZGUtYXYgZ2VuZXJhdG9ycyBmcmVlIGJlZm9yZSBwcm9jZXNzIHRlYXJkb3duLlxuICBwcml2YXRlIHJlYWRvbmx5IF9wdW1wRG9uZTogUHJvbWlzZTx2b2lkPjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICByZWFkb25seSBtZXRhOiBWaWRlb01ldGEsXG4gICAgcHJpdmF0ZSByZWFkb25seSBfc3JjOiBzdHJpbmcsXG4gICkge1xuICAgIHRoaXMuX2xlYWRGcmFtZXMgPSBNYXRoLnJvdW5kKG1ldGEubGVhZEdhcCAqIG1ldGEuZnBzKTtcbiAgICB0aGlzLl9rZWVwQ291bnQgPSBNYXRoLm1heChLRUVQX0JFSElORCwgTWF0aC5mbG9vcihNRU1PUllfQlVER0VUIC8gKG1ldGEuZnJhbWVXaWR0aCAqIG1ldGEuZnJhbWVIZWlnaHQgKiA0KSkpO1xuICAgIHRoaXMuX3B1bXBEb25lID0gdGhpcy5wdW1wKCk7XG4gIH1cblxuICBhc3luYyBnZXRGcmFtZShpZHg6IG51bWJlcik6IFByb21pc2U8QnVmZmVyPiB7XG4gICAgaWYgKGlkeCA8IDEpIHtcbiAgICAgIGlkeCA9IDE7XG4gICAgfVxuICAgIGlmIChpZHggPD0gdGhpcy5fbGVhZEZyYW1lcykge1xuICAgICAgaWR4ID0gdGhpcy5fbGVhZEZyYW1lcyArIDE7IC8vIGhvbGQgdGhlIGZpcnN0IGRlY29kYWJsZSBmcmFtZSBhY3Jvc3MgdGhlIGxlYWRcbiAgICB9XG4gICAgY29uc3QgaGl0ID0gdGhpcy5fYnVmLmdldChpZHgpO1xuICAgIGlmIChoaXQpIHtcbiAgICAgIHJldHVybiBoaXQ7XG4gICAgfVxuICAgIGlmICh0aGlzLl9kb25lICYmIGlkeCA+IHRoaXMuX3JlYWR5KSB7XG4gICAgICByZXR1cm4gQnVmZmVyLmFsbG9jKDApOyAvLyBiZXlvbmQgZW5kIG9mIHN0cmVhbVxuICAgIH1cbiAgICBpZiAoaWR4ID4gdGhpcy5fcmVhZHkpIHtcbiAgICAgIC8vIGZvcndhcmQsIG5vdCB5ZXQgZGVjb2RlZCBpbiB0aGlzIHBhc3NcbiAgICAgIGlmIChpZHggPiB0aGlzLl93YW50KSB7XG4gICAgICAgIHRoaXMuX3dhbnQgPSBpZHg7XG4gICAgICB9XG4gICAgICB0aGlzLndha2UoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRXZpY3RlZCAobG9vcC9yZXdpbmQpOiBjbGVhciByZWFkeS9kb25lIHN5bmNocm9ub3VzbHkgc28gdGhlIHdyYXAncyBwcmVmZXRjaCBidXJzdCBjb2FsZXNjZXMgaW50byBvbmUgcmVzdGFydCwgbm90IG9uZSBwZXIgZnJhbWUuXG4gICAgICB0aGlzLl9yZWFkeSA9IDA7XG4gICAgICB0aGlzLl9kb25lID0gZmFsc2U7XG4gICAgICB0aGlzLl93YW50ID0gaWR4O1xuICAgICAgdGhpcy5yZXF1ZXN0UmVzdGFydCgpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy53YWl0KGlkeCk7XG4gIH1cblxuICAvLyBBd2FpdCB0aGUgcHVtcCBzbyB0aGUgbm9kZS1hdiBkZW11eGVyL2RlY29kZXIgZ2VuZXJhdG9ycyB1bndpbmQgKGNvbnRleHRzIGZyZWVkKSBiZWZvcmUgdGhlIGNhbGxlciBleGl0cy5cbiAgYXN5bmMgY2xvc2UoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5fY2xvc2VkID0gdHJ1ZTtcbiAgICB0aGlzLl9kb25lID0gdHJ1ZTtcbiAgICB0aGlzLl9jdHJsLmFib3J0KCk7XG4gICAgdGhpcy53YWtlKCk7XG4gICAgdGhpcy5yZXF1ZXN0UmVzdGFydCgpO1xuICAgIGZvciAoY29uc3QgdyBvZiB0aGlzLl93YWl0ZXJzKSB7XG4gICAgICB3LnJlc29sdmUoQnVmZmVyLmFsbG9jKDApKTtcbiAgICB9XG4gICAgdGhpcy5fd2FpdGVycy5jbGVhcigpO1xuICAgIHRoaXMuX2J1Zi5jbGVhcigpO1xuICAgIHRoaXMuX2RlbXV4ZXI/LmludGVycnVwdCgpO1xuICAgIGF3YWl0IHRoaXMuX3B1bXBEb25lO1xuICB9XG5cbiAgLy8gLWQtb25seSBzdWJzeXN0ZW0sIHNvIG5ldmVyIHRpbWUgb3V0OiBkcmFpbldhaXRlcnMgcmVzb2x2ZXMgb24gZGVjb2RlLCBFT0YsIG9yIGNsb3NlIOKAlCBvdXRwdXQgbmV2ZXIgZGVwZW5kcyBvbiBmZXRjaCBsYXRlbmN5LlxuICBwcml2YXRlIHdhaXQoaWR4OiBudW1iZXIpOiBQcm9taXNlPEJ1ZmZlcj4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTxCdWZmZXI+KChyZXNvbHZlKSA9PiB0aGlzLl93YWl0ZXJzLmFkZCh7IGlkeCwgcmVzb2x2ZSB9KSk7XG4gIH1cblxuICBwcml2YXRlIHdha2UoKTogdm9pZCB7XG4gICAgY29uc3QgciA9IHRoaXMuX3Jlc3VtZTtcbiAgICB0aGlzLl9yZXN1bWUgPSB1bmRlZmluZWQ7XG4gICAgcj8uKCk7XG4gIH1cblxuICAvLyBJbnZhbGlkYXRlIHRoZSBydW5uaW5nIHBhc3MgKG9yIHdha2UgYSBwYXJrZWQgb25lKSBzbyBwdW1wKCkgc3RhcnRzIGEgZnJlc2ggZGVjb2RlIGZyb20gZnJhbWUgMS5cbiAgcHJpdmF0ZSByZXF1ZXN0UmVzdGFydCgpOiB2b2lkIHtcbiAgICB0aGlzLl9nZW4rKztcbiAgICBjb25zdCByID0gdGhpcy5fcmVzdGFydDtcbiAgICB0aGlzLl9yZXN0YXJ0ID0gdW5kZWZpbmVkO1xuICAgIHI/LigpO1xuICAgIHRoaXMud2FrZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBwdW1wKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGxldCBmYWlscyA9IDA7XG4gICAgd2hpbGUgKCF0aGlzLl9jbG9zZWQpIHtcbiAgICAgIGNvbnN0IGdlbiA9IHRoaXMuX2dlbjtcbiAgICAgIHRoaXMuX3JlYWR5ID0gMDtcbiAgICAgIHRoaXMuX2RvbmUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2J1Zi5jbGVhcigpO1xuICAgICAgbGV0IGZhaWxlZCA9IGZhbHNlO1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGhpcy5kZWNvZGVQYXNzKGdlbik7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlmICghdGhpcy5fY2xvc2VkICYmIHRoaXMuX2dlbiA9PT0gZ2VuKSB7XG4gICAgICAgICAgZmFpbGVkID0gdHJ1ZTtcbiAgICAgICAgICBsb2dnZXIud2FybihcbiAgICAgICAgICAgIFRBRyxcbiAgICAgICAgICAgIGBbJHt0aGlzLm1ldGEuaWQuc2xpY2UoMCwgOCl9XSBkZWNvZGUgcGFzcyBmYWlsZWQ6ICR7ZSBpbnN0YW5jZW9mIEVycm9yID8gZS5tZXNzYWdlIDogU3RyaW5nKGUpfWAsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgLy8gVGhlIHBhc3MncyBkZW11eGVyIGlzIGRpc3Bvc2VkIHdpdGggdGhlIGdlbmVyYXRvcjsgZHJvcCBpdCBzbyBjbG9zZSgpIG5ldmVyIGludGVycnVwdHMgYSBmcmVlZCBjb250ZXh0LlxuICAgICAgICB0aGlzLl9kZW11eGVyID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuX2Nsb3NlZCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLl9nZW4gIT09IGdlbikge1xuICAgICAgICBmYWlscyA9IDA7XG4gICAgICAgIGNvbnRpbnVlOyAvLyByZXN0YXJ0IHJlcXVlc3RlZCBtaWQtcGFzc1xuICAgICAgfVxuICAgICAgLy8gQSB0aHJvd24gcGFzcyBpcyBhIHRyYW5zaWVudCBzb3VyY2UgZXJyb3IgKGUuZy4gYSBzdHJlYW1lZCBsb29wIHJlLW9wZW4pOyByZXRyeSBpbnN0ZWFkIG9mIHJlcG9ydGluZyBFT0YsIHdoaWNoIHdvdWxkIGJsYW5rIHRoZSBmcmFtZS5cbiAgICAgIGlmIChmYWlsZWQgJiYgKytmYWlscyA8PSBNQVhfUEFTU19SRVRSWSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGZhaWxzID0gMDtcbiAgICAgIHRoaXMuX2RvbmUgPSB0cnVlO1xuICAgICAgdGhpcy5kcmFpbldhaXRlcnMoKTtcbiAgICAgIGF3YWl0IHRoaXMudW50aWxSZXN0YXJ0KCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBkZWNvZGVQYXNzKGdlbjogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgc3RyZWFtID0gZGVjb2RlRnJhbWVzKHtcbiAgICAgIHNyYzogdGhpcy5fc3JjLFxuICAgICAgbWV0YTogdGhpcy5tZXRhLFxuICAgICAgc2lnbmFsOiB0aGlzLl9jdHJsLnNpZ25hbCxcbiAgICAgIG9uRGVtdXhlcjogKGQpID0+IHtcbiAgICAgICAgdGhpcy5fZGVtdXhlciA9IGQ7XG4gICAgICB9LFxuICAgIH0pO1xuICAgIGZvciBhd2FpdCAoY29uc3QgeyBpZHgsIGJ1ZiB9IG9mIHN0cmVhbSkge1xuICAgICAgaWYgKHRoaXMuX2Nsb3NlZCB8fCB0aGlzLl9nZW4gIT09IGdlbikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBhdCA9IHRoaXMuX2xlYWRGcmFtZXMgKyBpZHg7IC8vIG1hcCBkZWNvZGUgcG9zaXRpb24gcGFzdCB0aGUgaGVsZCBsZWFkLWdhcCBmcmFtZXNcbiAgICAgIHdoaWxlICghdGhpcy5fY2xvc2VkICYmIHRoaXMuX2dlbiA9PT0gZ2VuICYmIGF0ID4gdGhpcy5kZW1hbmQgKyBERUNPREVfQUhFQUQpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5wYXVzZSgpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuX2Nsb3NlZCB8fCB0aGlzLl9nZW4gIT09IGdlbikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLl9idWYuc2V0KGF0LCBidWYpO1xuICAgICAgdGhpcy5fcmVhZHkgPSBhdDtcbiAgICAgIC8vIERyYWluIGJlZm9yZSBldmljdDogd2l0aCB3YW50IGZhciBhaGVhZCB0aGUgZmxvb3IgY292ZXJzIHRoaXMgZnJhbWUsIGFuZCBldmljdGluZyBpdCBmaXJzdCBzdGFydmVzIGl0cyB3YWl0ZXIgZm9yZXZlci5cbiAgICAgIHRoaXMuZHJhaW5XYWl0ZXJzKCk7XG4gICAgICB0aGlzLmV2aWN0KCk7XG4gICAgfVxuICB9XG5cbiAgLy8gV2FpdGVycyB0aGF0IHN1cnZpdmVkIGEgcmV3aW5kIHJlc3RhcnQgYXJlIHN0aWxsIGRlbWFuZDsgaWdub3JpbmcgdGhlbSBwYXJrcyB0aGUgcGFzcyBhbmQgc3RhcnZlcyB0aGVtIGZvcmV2ZXIuXG4gIHByaXZhdGUgZ2V0IGRlbWFuZCgpOiBudW1iZXIge1xuICAgIGxldCBkID0gdGhpcy5fd2FudDtcbiAgICBmb3IgKGNvbnN0IHcgb2YgdGhpcy5fd2FpdGVycykge1xuICAgICAgaWYgKHcuaWR4ID4gZCkge1xuICAgICAgICBkID0gdy5pZHg7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBkO1xuICB9XG5cbiAgcHJpdmF0ZSBwYXVzZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHIpID0+IHtcbiAgICAgIHRoaXMuX3Jlc3VtZSA9IHI7XG4gICAgfSk7XG4gIH1cblxuICAvLyBQYXJrIHVudGlsIGEgbG9vcC9iYWNrd2FyZCByZXF1ZXN0IChvciBjbG9zZSkgY2FsbHMgcmVxdWVzdFJlc3RhcnQoKS5cbiAgcHJpdmF0ZSB1bnRpbFJlc3RhcnQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX2Nsb3NlZCkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHIpID0+IHtcbiAgICAgIHRoaXMuX3Jlc3RhcnQgPSByO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBldmljdCgpOiB2b2lkIHtcbiAgICBjb25zdCBmbG9vciA9IHRoaXMuX3dhbnQgLSB0aGlzLl9rZWVwQ291bnQ7XG4gICAgZm9yIChjb25zdCBrIG9mIHRoaXMuX2J1Zi5rZXlzKCkpIHtcbiAgICAgIGlmIChrIDwgZmxvb3IpIHtcbiAgICAgICAgdGhpcy5fYnVmLmRlbGV0ZShrKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGRyYWluV2FpdGVycygpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIFsuLi50aGlzLl93YWl0ZXJzXSkge1xuICAgICAgY29uc3QgaGl0ID0gdGhpcy5fYnVmLmdldChlbnRyeS5pZHgpO1xuICAgICAgaWYgKGhpdCkge1xuICAgICAgICB0aGlzLl93YWl0ZXJzLmRlbGV0ZShlbnRyeSk7XG4gICAgICAgIGVudHJ5LnJlc29sdmUoaGl0KTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5fZG9uZSkge1xuICAgICAgICB0aGlzLl93YWl0ZXJzLmRlbGV0ZShlbnRyeSk7XG4gICAgICAgIGVudHJ5LnJlc29sdmUoQnVmZmVyLmFsbG9jKDApKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDUvMTguXG5cbmltcG9ydCB7IERlY29kZXIgfSBmcm9tIFwibm9kZS1hdi9hcGlcIjtcbmltcG9ydCB7IEFWTUVESUFfVFlQRV9WSURFTyB9IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgb3BlbklucHV0IH0gZnJvbSBcIi4vb3BlblwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFByb2JlUmVzdWx0IHtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIGR1cmF0aW9uOiBudW1iZXI7XG4gIC8qKiBQVFMgKHMpIG9mIHRoZSBmaXJzdCBkZWNvZGFibGUgZnJhbWU7IGEgY29ycnVwdC9lbXB0eSBsZWFkaW5nIHJ1biBpcyBoZWxkIG9uIGl0LCBsaWtlIENocm9tZS4gKi9cbiAgbGVhZEdhcDogbnVtYmVyO1xufVxuXG4vLyBObyB3YWxsLWNsb2NrIGNhcDogb3BlbklucHV0J3MgcGVyLXJlYWQgcndfdGltZW91dCBib3VuZHMgYSBzdHVjayBzb3VyY2UsIGFuZCB0aGUgY2FsbGVyIHJldHJpZXMgb24gdGhyb3cuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvYmUoc3JjOiBzdHJpbmcpOiBQcm9taXNlPFByb2JlUmVzdWx0PiB7XG4gIGF3YWl0IHVzaW5nIGQgPSBhd2FpdCBvcGVuSW5wdXQoc3JjKTtcbiAgY29uc3Qgc3RyZWFtID0gZC5zdHJlYW1zPy5maW5kKChzKSA9PiBzLmNvZGVjcGFyLmNvZGVjVHlwZSA9PT0gQVZNRURJQV9UWVBFX1ZJREVPKTtcbiAgaWYgKCFzdHJlYW0pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJwcm9iZTogbm8gdmlkZW8gc3RyZWFtXCIpO1xuICB9XG4gIGNvbnN0IGR1cmF0aW9uID0gZC5kdXJhdGlvbiA+IDAgPyBkLmR1cmF0aW9uIDogMDtcbiAgY29uc3QgdGIgPSBzdHJlYW0udGltZUJhc2UubnVtIC8gc3RyZWFtLnRpbWVCYXNlLmRlbjtcbiAgdXNpbmcgZGVjID0gYXdhaXQgRGVjb2Rlci5jcmVhdGUoc3RyZWFtLCB7IHRocmVhZENvdW50OiAxIH0pO1xuICBsZXQgbGVhZEdhcCA9IDA7XG4gIC8vIEZpcnN0IGNsZWFuIGZyYW1lJ3MgUFRTID0gd2hlcmUgY29udGVudCBiZWdpbnM7IHNraXAgY29ycnVwdCBmcmFtZXMgbGlrZSBhIGJyb3dzZXIuXG4gIG91dGVyOiBmb3IgYXdhaXQgKHVzaW5nIHBrdCBvZiBkLnBhY2tldHMoc3RyZWFtLmluZGV4KSkge1xuICAgIHRyeSB7XG4gICAgICBmb3IgYXdhaXQgKHVzaW5nIGZyYW1lIG9mIGRlYy5mcmFtZXMocGt0KSkge1xuICAgICAgICBpZiAoZnJhbWU/LmRlY29kZUVycm9yRmxhZ3MgIT09IDApIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBsZWFkR2FwID0gTWF0aC5tYXgoMCwgTnVtYmVyKGZyYW1lLnB0cykgKiB0Yik7XG4gICAgICAgIGJyZWFrIG91dGVyO1xuICAgICAgfVxuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gY29ycnVwdCBwYWNrZXQg4oCUIHNraXAgdG8gdGhlIG5leHRcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHsgd2lkdGg6IHN0cmVhbS5jb2RlY3Bhci53aWR0aCwgaGVpZ2h0OiBzdHJlYW0uY29kZWNwYXIuaGVpZ2h0LCBkdXJhdGlvbiwgbGVhZEdhcCB9O1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNy8wNi5cblxuaW1wb3J0IHsgcmFuZG9tQnl0ZXMgfSBmcm9tIFwibm9kZTpjcnlwdG9cIjtcbmltcG9ydCB7IHJlYWRGaWxlLCBybSB9IGZyb20gXCJub2RlOmZzL3Byb21pc2VzXCI7XG5pbXBvcnQgeyB0bXBkaXIgfSBmcm9tIFwibm9kZTpvc1wiO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IENvZGVjLCBGRm1wZWdFcnJvciwgRnJhbWUgfSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHsgQVZfUElYX0ZNVF9ZVVY0MjBQLCBBVkVSUk9SX0VBR0FJTiwgQVZFUlJPUl9FT0YgfSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcbmltcG9ydCB7IEZGX0VOQ09ERVJfTElCVlBYX1ZQOSwgbWFrZVBhY2tldCwgb3BlblZpZGVvQ3R4IH0gZnJvbSBcIi4uLy4uL2Jhc2UvZW5jb2Rlci9taXNjXCI7XG5pbXBvcnQgeyBGb3JtYXRNdXhlciB9IGZyb20gXCIuLi8uLi9iYXNlL2VuY29kZXIvbXV4ZXJcIjtcblxuZXhwb3J0IGludGVyZmFjZSBTdHViRW5jb2RlT3B0aW9ucyB7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICBkdXJhdGlvbjogbnVtYmVyO1xufVxuXG4vLyBSZWFsIHBhcnNlYWJsZSBtZWRpYSB3aXRoIHRoZSBzb3VyY2UncyBpbnRyaW5zaWMgc2l6ZSArIGR1cmF0aW9uLCBzbyBCbGluayBsYXlzIG91dCBsaWtlIENocm9tZS5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBlbmNvZGVTdHViV2VibSh7IHdpZHRoLCBoZWlnaHQsIGR1cmF0aW9uIH06IFN0dWJFbmNvZGVPcHRpb25zKTogUHJvbWlzZTxCdWZmZXI+IHtcbiAgY29uc3QgY29kZWMgPSBDb2RlYy5maW5kRW5jb2RlckJ5TmFtZShGRl9FTkNPREVSX0xJQlZQWF9WUDkpO1xuICBpZiAoIWNvZGVjKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBzdHViOiBlbmNvZGVyIG5vdCBmb3VuZDogJHtGRl9FTkNPREVSX0xJQlZQWF9WUDl9YCk7XG4gIH1cbiAgY29uc3QgcGF0aCA9IGpvaW4odG1wZGlyKCksIGBwdXBfc3R1Yl8ke3JhbmRvbUJ5dGVzKDgpLnRvU3RyaW5nKFwiaGV4XCIpfS53ZWJtYCk7XG4gIHRyeSB7XG4gICAge1xuICAgICAgYXdhaXQgdXNpbmcgbXV4ZXIgPSBuZXcgRm9ybWF0TXV4ZXIocGF0aCk7XG4gICAgICAvLyBUaW1lYmFzZSAxLzEwMDAgKGZwcyBwYXJhbSkgbGV0cyBvbmUgcGFja2V0IGNhcnJ5IHRoZSBmdWxsIHNvdXJjZSBkdXJhdGlvbiBpbiBtcy5cbiAgICAgIHVzaW5nIGN0eCA9IGF3YWl0IG9wZW5WaWRlb0N0eChcbiAgICAgICAge1xuICAgICAgICAgIGNvZGVjLFxuICAgICAgICAgIHdpZHRoLFxuICAgICAgICAgIGhlaWdodCxcbiAgICAgICAgICBmcHM6IDEwMDAsXG4gICAgICAgICAgYml0cmF0ZTogMTAwXzAwMCxcbiAgICAgICAgICBwaXhlbEZvcm1hdDogQVZfUElYX0ZNVF9ZVVY0MjBQLFxuICAgICAgICAgIG9wdGlvbnM6IHsgZGVhZGxpbmU6IFwicmVhbHRpbWVcIiwgXCJjcHUtdXNlZFwiOiBcIjhcIiB9LFxuICAgICAgICB9LFxuICAgICAgICBcInN0dWJDdHgub3BlbjJcIixcbiAgICAgICk7XG4gICAgICBjb25zdCBzdHJlYW0gPSBtdXhlci5hZGRTdHJlYW0oY3R4KTtcbiAgICAgIGF3YWl0IG11eGVyLm9wZW4oKTtcbiAgICAgIHVzaW5nIHN0dWIgPSBuZXcgU3R1YkZyYW1lKHdpZHRoLCBoZWlnaHQpO1xuICAgICAgY29uc3QgbXMgPSBCaWdJbnQoTWF0aC5tYXgoMSwgTWF0aC5yb3VuZChkdXJhdGlvbiAqIDEwMDApKSk7XG4gICAgICBzdHViLmZyYW1lLnB0cyA9IDBuO1xuICAgICAgc3R1Yi5mcmFtZS5kdXJhdGlvbiA9IG1zO1xuICAgICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IGN0eC5zZW5kRnJhbWUoc3R1Yi5mcmFtZSksIFwic3R1YkN0eC5zZW5kRnJhbWVcIik7XG4gICAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgY3R4LnNlbmRGcmFtZShudWxsKSwgXCJzdHViQ3R4LmZsdXNoXCIpO1xuICAgICAgdXNpbmcgcGt0ID0gbWFrZVBhY2tldCgpO1xuICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgY29uc3QgciA9IGF3YWl0IGN0eC5yZWNlaXZlUGFja2V0KHBrdCk7XG4gICAgICAgIGlmIChyID09PSBBVkVSUk9SX0VBR0FJTiB8fCByID09PSBBVkVSUk9SX0VPRikge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihyLCBcInN0dWJDdHgucmVjZWl2ZVBhY2tldFwiKTtcbiAgICAgICAgcGt0LnN0cmVhbUluZGV4ID0gc3RyZWFtLmluZGV4O1xuICAgICAgICBwa3QuZHVyYXRpb24gPSBtcztcbiAgICAgICAgcGt0LnJlc2NhbGVUcyhjdHgudGltZUJhc2UsIHN0cmVhbS50aW1lQmFzZSk7XG4gICAgICAgIGF3YWl0IG11eGVyLndyaXRlUGFja2V0KHBrdCk7XG4gICAgICAgIHBrdC51bnJlZigpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYXdhaXQgcmVhZEZpbGUocGF0aCk7XG4gIH0gZmluYWxseSB7XG4gICAgYXdhaXQgcm0ocGF0aCwgeyBmb3JjZTogdHJ1ZSB9KTtcbiAgfVxufVxuXG4vLyBPd25zIHRoZSBibGFjayBwaXhlbCBidWZmZXIgQU5EIGl0cyB6ZXJvLWNvcHkgZnJhbWUgdmlldyDigJQgYHVzaW5nYCBwaW5zIGJvdGggdW50aWwgYWZ0ZXIgZW5jb2RlLlxuY2xhc3MgU3R1YkZyYW1lIGltcGxlbWVudHMgRGlzcG9zYWJsZSB7XG4gIHJlYWRvbmx5IGZyYW1lOiBGcmFtZTtcbiAgcHJpdmF0ZSByZWFkb25seSBfYnVmOiBCdWZmZXI7XG5cbiAgY29uc3RydWN0b3Iod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpIHtcbiAgICBjb25zdCBsdW1hID0gd2lkdGggKiBoZWlnaHQ7XG4gICAgY29uc3QgY2hyb21hID0gTWF0aC5jZWlsKHdpZHRoIC8gMikgKiBNYXRoLmNlaWwoaGVpZ2h0IC8gMik7XG4gICAgdGhpcy5fYnVmID0gQnVmZmVyLmFsbG9jKGx1bWEgKyBjaHJvbWEgKiAyLCAweDgwKTtcbiAgICB0aGlzLl9idWYuZmlsbCgwLCAwLCBsdW1hKTtcbiAgICB0aGlzLmZyYW1lID0gRnJhbWUuZnJvbVZpZGVvQnVmZmVyKHRoaXMuX2J1ZiwgeyB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQ6IEFWX1BJWF9GTVRfWVVWNDIwUCB9KTtcbiAgfVxuXG4gIFtTeW1ib2wuZGlzcG9zZV0oKTogdm9pZCB7XG4gICAgdGhpcy5mcmFtZVtTeW1ib2wuZGlzcG9zZV0oKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNS8xOC5cblxuaW1wb3J0IHsgY3JlYXRlSGFzaCB9IGZyb20gXCJub2RlOmNyeXB0b1wiO1xuaW1wb3J0IHsgdXNlUmV0cnkgfSBmcm9tIFwiLi4vLi4vYmFzZS9yZXRyeVwiO1xuaW1wb3J0IHsgcHJveGllZFVybCB9IGZyb20gXCIuLi9uZXR3b3JrXCI7XG5pbXBvcnQgeyBEZWNvZGVTZXNzaW9uIH0gZnJvbSBcIi4vZGVjb2RlX3Nlc3Npb25cIjtcbmltcG9ydCB7IHR5cGUgUHJvYmVSZXN1bHQsIHByb2JlIH0gZnJvbSBcIi4vcHJvYmVcIjtcbmltcG9ydCB7IGVuY29kZVN0dWJXZWJtIH0gZnJvbSBcIi4vc3R1YlwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFZpZGVvTWV0YSB7XG4gIGlkOiBzdHJpbmc7XG4gIC8qKiBJbnRyaW5zaWMgc291cmNlIGRpbWVuc2lvbnMgKHJlcG9ydGVkIGFzIHZpZGVvV2lkdGgvdmlkZW9IZWlnaHQpLiAqL1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgLyoqIERlY29kZWQrc2NhbGVkIGZyYW1lIGRpbWVuc2lvbnMgYWN0dWFsbHkgc2VydmVkICjiiaQgc291cmNlOyBjYXBwZWQgdG8gdGhlIGRpc3BsYXkgYm94KS4gKi9cbiAgZnJhbWVXaWR0aDogbnVtYmVyO1xuICBmcmFtZUhlaWdodDogbnVtYmVyO1xuICBmcHM6IG51bWJlcjtcbiAgZHVyYXRpb246IG51bWJlcjtcbiAgLyoqIFNlY29uZHMgb2YgY29ycnVwdC9lbXB0eSBsZWFkaW5nIGNvbnRlbnQgaGVsZCBvbiB0aGUgZmlyc3QgZGVjb2RhYmxlIGZyYW1lLiAqL1xuICBsZWFkR2FwOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3Blbk9wdGlvbnMge1xuICBzcmM6IHN0cmluZztcbiAgZnBzOiBudW1iZXI7XG4gIC8qKiBEaXNwbGF5LWJveCBwaXhlbHMgKGNhbnZhcyBiYWNraW5nIHN0b3JlKTsgZGVjb2RlIGlzIGRvd25zY2FsZWQgdG8gY292ZXIgdGhpcywgbmV2ZXIgdXBzY2FsZWQuICovXG4gIGRzdFc/OiBudW1iZXI7XG4gIGRzdEg/OiBudW1iZXI7XG4gIC8qKiBvYmplY3RGaXQ7IFwibm9uZVwiIG5lZWRzIDE6MSBuYXRpdmUgcGl4ZWxzIHNvIGl0IHNraXBzIGRvd25zY2FsZS4gKi9cbiAgZml0Pzogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgRW50cnkge1xuICBzZXNzaW9uOiBEZWNvZGVTZXNzaW9uO1xuICByZWZzOiBudW1iZXI7XG59XG5cbmV4cG9ydCBjbGFzcyBGcmFtZVNlcnZlciB7XG4gIHByaXZhdGUgX3Nlc3Npb25zID0gbmV3IE1hcDxzdHJpbmcsIEVudHJ5PigpO1xuICBwcml2YXRlIF9wcm9iZXMgPSBuZXcgTWFwPHN0cmluZywgUHJvbWlzZTxQcm9iZVJlc3VsdD4+KCk7XG4gIHByaXZhdGUgX3N0dWJzID0gbmV3IE1hcDxzdHJpbmcsIFByb21pc2U8QnVmZmVyPj4oKTtcbiAgcHJpdmF0ZSBfY2xvc2VkID0gZmFsc2U7XG5cbiAgLy8gLWQgZGVjb2RlIGJ5cGFzc2VzIHRoZSB3aW5kb3cgaW50ZXJjZXB0b3IsIHNvIGl0IHJlbWFwcyBob3N0cyBpdHNlbGYgd2hlbiB0aGUgaW5uZXIgcHJveHkgaXMgb24uXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgX3VzZUlubmVyUHJveHk6IGJvb2xlYW4pIHt9XG5cbiAgLy8gY2xvc2VkLWNoZWNrZWQgYWZ0ZXIgcHJvYmUgc28gY2xvc2VBbGwoKSBjYW4ndCByYWNlIGEgc2xvdyBvcGVuIGludG8gYSBsZWFrZWQgc2Vzc2lvbi5cbiAgYXN5bmMgb3BlbihvcHRzOiBPcGVuT3B0aW9ucyk6IFByb21pc2U8VmlkZW9NZXRhPiB7XG4gICAgaWYgKHRoaXMuX2Nsb3NlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZnJhbWUtc2VydmVyOiBjbG9zZWRcIik7XG4gICAgfVxuICAgIGNvbnN0IGlkID0ga2V5KG9wdHMpO1xuICAgIGNvbnN0IGhpdCA9IHRoaXMuX3Nlc3Npb25zLmdldChpZCk7XG4gICAgaWYgKGhpdCkge1xuICAgICAgaGl0LnJlZnMrKztcbiAgICAgIHJldHVybiBoaXQuc2Vzc2lvbi5tZXRhO1xuICAgIH1cbiAgICBjb25zdCBzcmMgPSB0aGlzLl91c2VJbm5lclByb3h5ID8gcHJveGllZFVybChvcHRzLnNyYykgOiBvcHRzLnNyYztcbiAgICBjb25zdCBpbmZvID0gYXdhaXQgdGhpcy5wcm9iZUNhY2hlZChzcmMpO1xuICAgIGlmICh0aGlzLl9jbG9zZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcImZyYW1lLXNlcnZlcjogY2xvc2VkXCIpO1xuICAgIH1cbiAgICBsZXQgZnJhbWVXaWR0aCA9IGluZm8ud2lkdGg7XG4gICAgbGV0IGZyYW1lSGVpZ2h0ID0gaW5mby5oZWlnaHQ7XG4gICAgLy8gRG93bnNjYWxlIHRvIGNvdmVyIHRoZSBkaXNwbGF5IGJveCAobmV2ZXIgdXBzY2FsZSk7IG9iamVjdEZpdCBcIm5vbmVcIiBuZWVkcyAxOjEgbmF0aXZlIHBpeGVscy5cbiAgICBpZiAob3B0cy5kc3RXICYmIG9wdHMuZHN0SCAmJiBvcHRzLmZpdCAhPT0gXCJub25lXCIpIHtcbiAgICAgIGNvbnN0IHMgPSBNYXRoLm1pbigxLCBNYXRoLm1heChvcHRzLmRzdFcgLyBpbmZvLndpZHRoLCBvcHRzLmRzdEggLyBpbmZvLmhlaWdodCkpO1xuICAgICAgZnJhbWVXaWR0aCA9IGV2ZW4oaW5mby53aWR0aCAqIHMpO1xuICAgICAgZnJhbWVIZWlnaHQgPSBldmVuKGluZm8uaGVpZ2h0ICogcyk7XG4gICAgfVxuICAgIGNvbnN0IG1ldGE6IFZpZGVvTWV0YSA9IHtcbiAgICAgIGlkLFxuICAgICAgd2lkdGg6IGluZm8ud2lkdGgsXG4gICAgICBoZWlnaHQ6IGluZm8uaGVpZ2h0LFxuICAgICAgZnJhbWVXaWR0aCxcbiAgICAgIGZyYW1lSGVpZ2h0LFxuICAgICAgZnBzOiBvcHRzLmZwcyxcbiAgICAgIGR1cmF0aW9uOiBpbmZvLmR1cmF0aW9uLFxuICAgICAgbGVhZEdhcDogaW5mby5sZWFkR2FwLFxuICAgIH07XG4gICAgdGhpcy5fc2Vzc2lvbnMuc2V0KGlkLCB7IHNlc3Npb246IG5ldyBEZWNvZGVTZXNzaW9uKG1ldGEsIHNyYyksIHJlZnM6IDEgfSk7XG4gICAgcmV0dXJuIG1ldGE7XG4gIH1cblxuICAvLyBEZXRlcm1pbmlzdGljIG1lZGlhIHJlcXVlc3RzIHJlZGlyZWN0IGhlcmU6IHJlYWwgcGFyc2VhYmxlIGJ5dGVzIHdpdGggdHJ1ZSBpbnRyaW5zaWMgc2l6ZSArIGR1cmF0aW9uLlxuICBzdHViKHNyYzogc3RyaW5nKTogUHJvbWlzZTxCdWZmZXI+IHtcbiAgICBpZiAodGhpcy5fY2xvc2VkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJmcmFtZS1zZXJ2ZXI6IGNsb3NlZFwiKTtcbiAgICB9XG4gICAgY29uc3QgcmVhbCA9IHRoaXMuX3VzZUlubmVyUHJveHkgPyBwcm94aWVkVXJsKHNyYykgOiBzcmM7XG4gICAgY29uc3QgaGl0ID0gdGhpcy5fc3R1YnMuZ2V0KHJlYWwpO1xuICAgIGlmIChoaXQpIHtcbiAgICAgIHJldHVybiBoaXQ7XG4gICAgfVxuICAgIGNvbnN0IHAgPSB0aGlzLnByb2JlQ2FjaGVkKHJlYWwpLnRoZW4oKGluZm8pID0+XG4gICAgICBlbmNvZGVTdHViV2VibSh7XG4gICAgICAgIHdpZHRoOiBpbmZvLndpZHRoLFxuICAgICAgICBoZWlnaHQ6IGluZm8uaGVpZ2h0LFxuICAgICAgICBkdXJhdGlvbjogaW5mby5kdXJhdGlvbixcbiAgICAgIH0pLFxuICAgICk7XG4gICAgcC5jYXRjaCgoKSA9PiB0aGlzLl9zdHVicy5kZWxldGUocmVhbCkpO1xuICAgIHRoaXMuX3N0dWJzLnNldChyZWFsLCBwKTtcbiAgICByZXR1cm4gcDtcbiAgfVxuXG4gIGdldEZyYW1lKGlkOiBzdHJpbmcsIGlkeDogbnVtYmVyKTogUHJvbWlzZTxCdWZmZXI+IHtcbiAgICBjb25zdCBlID0gdGhpcy5fc2Vzc2lvbnMuZ2V0KGlkKTtcbiAgICBpZiAoIWUpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoQnVmZmVyLmFsbG9jKDApKTtcbiAgICB9XG4gICAgcmV0dXJuIGUuc2Vzc2lvbi5nZXRGcmFtZShpZHgpO1xuICB9XG5cbiAgYXN5bmMgY2xvc2UoaWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGUgPSB0aGlzLl9zZXNzaW9ucy5nZXQoaWQpO1xuICAgIGlmICghZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoLS1lLnJlZnMgPiAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX3Nlc3Npb25zLmRlbGV0ZShpZCk7XG4gICAgYXdhaXQgZS5zZXNzaW9uLmNsb3NlKCk7XG4gIH1cblxuICAvLyBGYWlsZWQgcHJvYmVzIGV2aWN0IHNvIGEgdHJhbnNpZW50IHNvdXJjZSBlcnJvciBjYW4gcmV0cnkgb24gdGhlIG5leHQgcmVxdWVzdC5cbiAgcHJpdmF0ZSBwcm9iZUNhY2hlZChzcmM6IHN0cmluZyk6IFByb21pc2U8UHJvYmVSZXN1bHQ+IHtcbiAgICBjb25zdCBoaXQgPSB0aGlzLl9wcm9iZXMuZ2V0KHNyYyk7XG4gICAgaWYgKGhpdCkge1xuICAgICAgcmV0dXJuIGhpdDtcbiAgICB9XG4gICAgY29uc3QgcCA9IHVzZVJldHJ5KHsgZm46IHByb2JlIH0pKHNyYyk7XG4gICAgcC5jYXRjaCgoKSA9PiB0aGlzLl9wcm9iZXMuZGVsZXRlKHNyYykpO1xuICAgIHRoaXMuX3Byb2Jlcy5zZXQoc3JjLCBwKTtcbiAgICByZXR1cm4gcDtcbiAgfVxuXG4gIGFzeW5jIGNsb3NlQWxsKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuX2Nsb3NlZCA9IHRydWU7XG4gICAgY29uc3Qgc2Vzc2lvbnMgPSBbLi4udGhpcy5fc2Vzc2lvbnMudmFsdWVzKCldO1xuICAgIHRoaXMuX3Nlc3Npb25zLmNsZWFyKCk7XG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoc2Vzc2lvbnMubWFwKChlKSA9PiBlLnNlc3Npb24uY2xvc2UoKSkpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGtleShvcHRzOiBPcGVuT3B0aW9ucyk6IHN0cmluZyB7XG4gIHJldHVybiBjcmVhdGVIYXNoKFwic2hhMVwiKVxuICAgIC51cGRhdGUoYCR7b3B0cy5zcmN9fCR7b3B0cy5mcHN9fCR7b3B0cy5kc3RXID8/IFwiXCJ9fCR7b3B0cy5kc3RIID8/IFwiXCJ9fCR7b3B0cy5maXQgPz8gXCJcIn1gKVxuICAgIC5kaWdlc3QoXCJoZXhcIik7XG59XG5cbi8vIFJvdW5kIGRvd24gdG8gYW4gZXZlbiBpbnRlZ2VyICjiiaUyKSBmb3IgdGhlIHNjYWxlci5cbmZ1bmN0aW9uIGV2ZW4objogbnVtYmVyKTogbnVtYmVyIHtcbiAgY29uc3QgciA9IE1hdGgucm91bmQobik7XG4gIHJldHVybiBNYXRoLm1heCgyLCByIC0gKHIgJSAyKSk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA1LzE4LlxuXG5pbXBvcnQgeyBwcm90b2NvbCB9IGZyb20gXCJlbGVjdHJvblwiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4uLy4uL2Jhc2UvbG9nZ2luZ1wiO1xuaW1wb3J0IHsgRnJhbWVTZXJ2ZXIsIHR5cGUgVmlkZW9NZXRhIH0gZnJvbSBcIi4vZnJhbWVfc2VydmVyXCI7XG5cbmNvbnN0IFRBRyA9IFwiW0ZyYW1lUHJvdG9jb2xdXCI7XG5cbi8vIFNjaGVtZSBpcyByZWdpc3RlcmVkIGFsb25nc2lkZSBgcHVwYCBpbiByZW5kZXJlci9wcm90b2NvbC50cyAoc2luZ2xlIGNhbGwgb25seSkuXG5jb25zdCBTQ0hFTUUgPSBcInB1cC1mcmFtZVwiO1xuXG5jb25zdCBDT1JTX0hFQURFUlM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gIFwiYWNjZXNzLWNvbnRyb2wtYWxsb3ctb3JpZ2luXCI6IFwiKlwiLFxuICBcImFjY2Vzcy1jb250cm9sLWFsbG93LW1ldGhvZHNcIjogXCJHRVQsIE9QVElPTlNcIixcbiAgXCJhY2Nlc3MtY29udHJvbC1hbGxvdy1oZWFkZXJzXCI6IFwiKlwiLFxufTtcblxuLy8gTXVzdCBiZSBjYWxsZWQgYWZ0ZXIgYXBwIGlzIHJlYWR5LiBEZXRlcm1pbmlzdGljLW9ubHkgKHJlYWwtdGltZSB2aWRlb3Mgc2VsZi10aWNrLCBubyBmcmFtZSBwcm90b2NvbCkuXG5leHBvcnQgZnVuY3Rpb24gdXNlRnJhbWVQcm90b2NvbCh1c2VJbm5lclByb3h5OiBib29sZWFuKTogQXN5bmNEaXNwb3NhYmxlIHtcbiAgY29uc3QgZnMgPSBuZXcgRnJhbWVTZXJ2ZXIodXNlSW5uZXJQcm94eSk7XG4gIHByb3RvY29sLmhhbmRsZShTQ0hFTUUsIGFzeW5jIChyZXEpID0+IHtcbiAgICBpZiAocmVxLm1ldGhvZCA9PT0gXCJPUFRJT05TXCIpIHtcbiAgICAgIHJldHVybiBuZXcgUmVzcG9uc2UobnVsbCwgeyBzdGF0dXM6IDIwNCwgaGVhZGVyczogQ09SU19IRUFERVJTIH0pO1xuICAgIH1cbiAgICBjb25zdCB1cmwgPSBuZXcgVVJMKHJlcS51cmwpO1xuICAgIGxvZ2dlci5kZWJ1ZyhUQUcsIGAke3JlcS5tZXRob2R9ICR7dXJsLmhvc3RuYW1lfSR7dXJsLnNlYXJjaH1gKTtcbiAgICB0cnkge1xuICAgICAgc3dpdGNoICh1cmwuaG9zdG5hbWUpIHtcbiAgICAgICAgY2FzZSBcIm9wZW5cIjpcbiAgICAgICAgICByZXR1cm4ganNvbk9rKFxuICAgICAgICAgICAgYXdhaXQgZnMub3Blbih7XG4gICAgICAgICAgICAgIHNyYzogdXJsLnNlYXJjaFBhcmFtcy5nZXQoXCJzcmNcIikgPz8gXCJcIixcbiAgICAgICAgICAgICAgZnBzOiBpbnQodXJsLCBcImZwc1wiLCAzMCksXG4gICAgICAgICAgICAgIGRzdFc6IGludCh1cmwsIFwid1wiLCAwKSxcbiAgICAgICAgICAgICAgZHN0SDogaW50KHVybCwgXCJoXCIsIDApLFxuICAgICAgICAgICAgICBmaXQ6IHVybC5zZWFyY2hQYXJhbXMuZ2V0KFwiZml0XCIpID8/IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICk7XG4gICAgICAgIGNhc2UgXCJmcmFtZVwiOlxuICAgICAgICAgIHJldHVybiByZ2JhT2soYXdhaXQgZnMuZ2V0RnJhbWUodXJsLnNlYXJjaFBhcmFtcy5nZXQoXCJpZFwiKSA/PyBcIlwiLCBpbnQodXJsLCBcImlkeFwiLCAxKSkpO1xuICAgICAgICBjYXNlIFwic3R1YlwiOlxuICAgICAgICAgIHJldHVybiB3ZWJtT2soYXdhaXQgZnMuc3R1Yih1cmwuc2VhcmNoUGFyYW1zLmdldChcInNyY1wiKSA/PyBcIlwiKSk7XG4gICAgICAgIGNhc2UgXCJjbG9zZVwiOlxuICAgICAgICAgIGF3YWl0IGZzLmNsb3NlKHVybC5zZWFyY2hQYXJhbXMuZ2V0KFwiaWRcIikgPz8gXCJcIik7XG4gICAgICAgICAgcmV0dXJuIG5ldyBSZXNwb25zZShudWxsLCB7IHN0YXR1czogMjA0LCBoZWFkZXJzOiBDT1JTX0hFQURFUlMgfSk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIG5ldyBSZXNwb25zZShgdW5rbm93biBhY3Rpb246ICR7dXJsLmhvc3RuYW1lfWAsIHtcbiAgICAgICAgICAgIHN0YXR1czogNDA0LFxuICAgICAgICAgICAgaGVhZGVyczogQ09SU19IRUFERVJTLFxuICAgICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnN0IG1zZyA9IGUgaW5zdGFuY2VvZiBFcnJvciA/IGUubWVzc2FnZSA6IFN0cmluZyhlKTtcbiAgICAgIGxvZ2dlci5lcnJvcihUQUcsIGAke3VybC5ob3N0bmFtZX0gZmFpbGVkJHt1cmwuc2VhcmNofTogJHttc2d9YCk7XG4gICAgICByZXR1cm4gbmV3IFJlc3BvbnNlKG1zZywgeyBzdGF0dXM6IDUwMCwgaGVhZGVyczogQ09SU19IRUFERVJTIH0pO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiB7XG4gICAgW1N5bWJvbC5hc3luY0Rpc3Bvc2VdOiBhc3luYyAoKSA9PiB7XG4gICAgICBwcm90b2NvbC51bmhhbmRsZShTQ0hFTUUpO1xuICAgICAgYXdhaXQgZnMuY2xvc2VBbGwoKTtcbiAgICB9LFxuICB9O1xufVxuXG5mdW5jdGlvbiBqc29uT2sobWV0YTogVmlkZW9NZXRhKTogUmVzcG9uc2Uge1xuICByZXR1cm4gbmV3IFJlc3BvbnNlKEpTT04uc3RyaW5naWZ5KG1ldGEpLCB7XG4gICAgaGVhZGVyczogeyAuLi5DT1JTX0hFQURFUlMsIFwiY29udGVudC10eXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiIH0sXG4gIH0pO1xufVxuXG4vLyBDYWNoZWQgc3R1YiBCdWZmZXIgaXMgc2hhcmVkIGFjcm9zcyByZXNwb25zZXMg4oCUIGNvcHkgc28gYSBjb25zdW1lciBjYW4ndCBkZXRhY2ggaXQuXG5mdW5jdGlvbiB3ZWJtT2soYnl0ZXM6IEJ1ZmZlcik6IFJlc3BvbnNlIHtcbiAgY29uc3QgY29weSA9IG5ldyBVaW50OEFycmF5KGJ5dGVzLmJ5dGVMZW5ndGgpO1xuICBjb3B5LnNldChieXRlcyk7XG4gIHJldHVybiBuZXcgUmVzcG9uc2UoY29weS5idWZmZXIgYXMgQXJyYXlCdWZmZXIsIHtcbiAgICBoZWFkZXJzOiB7XG4gICAgICAuLi5DT1JTX0hFQURFUlMsXG4gICAgICBcImNvbnRlbnQtdHlwZVwiOiBcInZpZGVvL3dlYm1cIixcbiAgICAgIFwiY2FjaGUtY29udHJvbFwiOiBcIm5vLXN0b3JlXCIsXG4gICAgfSxcbiAgfSk7XG59XG5cbi8vIFJhdyBSR0JBIHBpeGVsczsgdGhlIHBhZ2Ugd3JhcHMgdGhlbSBpbiBJbWFnZURhdGEgdXNpbmcgbWV0YS53aWR0aC9oZWlnaHQgaXQgZ290IGZyb20gYG9wZW5gLlxuZnVuY3Rpb24gcmdiYU9rKGJ5dGVzOiBCdWZmZXIpOiBSZXNwb25zZSB7XG4gIGlmIChieXRlcy5ieXRlTGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG5ldyBSZXNwb25zZShudWxsLCB7IHN0YXR1czogNDEwLCBoZWFkZXJzOiBDT1JTX0hFQURFUlMgfSk7XG4gIH1cbiAgY29uc3QgY29weSA9IG5ldyBVaW50OEFycmF5KGJ5dGVzLmJ5dGVMZW5ndGgpO1xuICBjb3B5LnNldChieXRlcyk7XG4gIHJldHVybiBuZXcgUmVzcG9uc2UoY29weS5idWZmZXIgYXMgQXJyYXlCdWZmZXIsIHtcbiAgICBoZWFkZXJzOiB7XG4gICAgICAuLi5DT1JTX0hFQURFUlMsXG4gICAgICBcImNvbnRlbnQtdHlwZVwiOiBcImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbVwiLFxuICAgICAgXCJjYWNoZS1jb250cm9sXCI6IFwibm8tc3RvcmVcIixcbiAgICB9LFxuICB9KTtcbn1cblxuZnVuY3Rpb24gaW50KHVybDogVVJMLCBrZXk6IHN0cmluZywgZmFsbGJhY2s6IG51bWJlcik6IG51bWJlciB7XG4gIGNvbnN0IHYgPSB1cmwuc2VhcmNoUGFyYW1zLmdldChrZXkpO1xuICBjb25zdCBuID0gdiA/IHBhcnNlSW50KHYsIDEwKSA6IE5hTjtcbiAgcmV0dXJuIE51bWJlci5pc0Zpbml0ZShuKSA/IG4gOiBmYWxsYmFjaztcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDMvMTMuXG5cbmltcG9ydCB0eXBlIHsgQnJvd3NlcldpbmRvdywgRXZlbnQsIE5hdGl2ZUltYWdlLCBSZWN0YW5nbGUsIFNpemUsIFdlYkNvbnRlbnRzUGFpbnRFdmVudFBhcmFtcyB9IGZyb20gXCJlbGVjdHJvblwiO1xuaW1wb3J0IHsgQkxBTktfV0FSTl9SQVRJTywgQmxhbmtGcmFtZVN0YXRzIH0gZnJvbSBcIi4uL2Jhc2UvYmxhbmtfZnJhbWVcIjtcbmltcG9ydCB7IGFkdmFuY2VWaXJ0dWFsVGltZSwgcGF1c2VWaXJ0dWFsVGltZSwgcmVzaXplRHJhd2FibGUgfSBmcm9tIFwiLi4vYmFzZS9jZHBcIjtcbmltcG9ydCB7IEVuY29kZXJQaXBlbGluZSB9IGZyb20gXCIuLi9iYXNlL2VuY29kZXIvcGlwZWxpbmVcIjtcbmltcG9ydCB7IHNpemVFcXVhbHMgfSBmcm9tIFwiLi4vYmFzZS9pbWFnZVwiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4uL2Jhc2UvbG9nZ2luZ1wiO1xuaW1wb3J0IHR5cGUgeyBJcGNEb25lUGF5bG9hZCB9IGZyb20gXCIuL2lwY1wiO1xuaW1wb3J0IHR5cGUgeyBJUENSZW5kZXJPcHRpb25zIH0gZnJvbSBcIi4vc2NoZW1hXCI7XG5pbXBvcnQgeyBkZWNvZGVTdGVnbywgZHJhd1N0ZWdvLCBGUkFNRV9TWU5DX01BUktFUl9XSURUSCwgd2FpdFN0ZWdvVGljayB9IGZyb20gXCIuL3N0ZWdvXCI7XG5pbXBvcnQgeyB0aWNrIH0gZnJvbSBcIi4vdGlja1wiO1xuaW1wb3J0IHsgdXNlRnJhbWVQcm90b2NvbCB9IGZyb20gXCIuL3ZpZGVvL3Byb3RvY29sXCI7XG5pbXBvcnQgeyBkaXNwb3NlV2luZG93LCBsb2FkV2luZG93IH0gZnJvbSBcIi4vd2luZG93XCI7XG5cbmNvbnN0IFRBRyA9IFwiW1Nob290XVwiO1xuXG5pbnRlcmZhY2UgUGFpbnRPcHRpb25zIHtcbiAgc291cmNlOiBzdHJpbmc7XG4gIHdpbjogQnJvd3NlcldpbmRvdztcbiAgc2l6ZTogU2l6ZTtcbiAgbXM6IG51bWJlcjtcbn1cblxuLy8gUGFpbnRpbmcgc3RheXMgb24gZm9yIHRoZSB3aG9sZSBydW47IHRoaXMgb25seSB3YWl0cyBmb3IgdGhlIGZyYW1lIHdob3NlIHN0ZWdvIHJvdyBtYXRjaGVzIGBtc2AuXG5hc3luYyBmdW5jdGlvbiBwYWludCh7IHNvdXJjZSwgd2luLCBzaXplLCBtcyB9OiBQYWludE9wdGlvbnMpOiBQcm9taXNlPEJ1ZmZlcj4ge1xuICBsZXQgbGFzdFRzOiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gIGxldCBzdHVjayA9IDA7XG4gIGxldCBpbnRlcnZhbDogTm9kZUpTLlRpbWVvdXQgfCB1bmRlZmluZWQ7XG4gIGNvbnN0IGNkcCA9IHdpbi53ZWJDb250ZW50cy5kZWJ1Z2dlcjtcbiAgY29uc3QgZnJhbWVTaXplOiBTaXplID0geyB3aWR0aDogc2l6ZS53aWR0aCwgaGVpZ2h0OiBzaXplLmhlaWdodCArIDEgfTtcbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgbmV3IFByb21pc2U8QnVmZmVyPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBpbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgaWYgKHN0dWNrID49IDMpIHtcbiAgICAgICAgICByZWplY3QobmV3IEVycm9yKFwiZHJhd2FibGUgdGltZW91dFwiKSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHN0dWNrKys7XG4gICAgICAgIGxvZ2dlci53YXJuKFRBRywgYCR7c291cmNlfSByZW5kZXIgaXMgZXh0cmVtZWx5IHNsb3cgQCAke21zfSwgY3VycmVudDogJHtsYXN0VHN9IHdpdGggJHtzdHVja30gcmVwZWF0c2ApO1xuICAgICAgICB3aW4ud2ViQ29udGVudHMuaW52YWxpZGF0ZSgpO1xuICAgICAgfSwgMTAwMCk7XG4gICAgICBjb25zdCBoYW5kbGVyID0gKF9lOiBFdmVudDxXZWJDb250ZW50c1BhaW50RXZlbnRQYXJhbXM+LCBfZDogUmVjdGFuZ2xlLCBpbWFnZTogTmF0aXZlSW1hZ2UpID0+IHtcbiAgICAgICAgY29uc3QgaW1hZ2VTaXplID0gaW1hZ2UuZ2V0U2l6ZSgpO1xuICAgICAgICBpZiAoIXNpemVFcXVhbHMoaW1hZ2VTaXplLCBmcmFtZVNpemUpKSB7XG4gICAgICAgICAgLy8gTk9URShBdXRva2FrYSk6IFdlIG11c3QgZW5zdXJlIGZyYW1lIGlzIHJlYWR5IG9uIGVsZWN0cm9uIHY0MStcbiAgICAgICAgICByZXNpemVEcmF3YWJsZShjZHAsIGZyYW1lU2l6ZSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIERlY29kZSBmcm9tIGEgMi1yb3cgc2xpdmVyIGZpcnN0OyB0aGUgZnVsbC1mcmFtZSByZWFkYmFjayAofjhNQiBtZW1jcHkpIGlzIHBhaWQgb25seSBvbiB0aGUgbWF0Y2hpbmcgZnJhbWUuXG4gICAgICAgIGNvbnN0IHNsaXZlciA9IGltYWdlLmNyb3AoeyB4OiAwLCB5OiBmcmFtZVNpemUuaGVpZ2h0IC0gMiwgd2lkdGg6IEZSQU1FX1NZTkNfTUFSS0VSX1dJRFRILCBoZWlnaHQ6IDIgfSk7XG4gICAgICAgIGNvbnN0IHRzID0gZGVjb2RlU3RlZ28oc2xpdmVyLnRvQml0bWFwKCksIHsgd2lkdGg6IEZSQU1FX1NZTkNfTUFSS0VSX1dJRFRILCBoZWlnaHQ6IDIgfSk7XG4gICAgICAgIGlmICh0cyA9PT0gdW5kZWZpbmVkIHx8IE1hdGguYWJzKHRzIC0gbXMpID4gMSkge1xuICAgICAgICAgIGxhc3RUcyA9IHRzO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBiaXRtYXAgPSBpbWFnZS50b0JpdG1hcCgpO1xuICAgICAgICB3aW4ud2ViQ29udGVudHMub2ZmKFwicGFpbnRcIiwgaGFuZGxlcik7XG4gICAgICAgIHJlc29sdmUoQnVmZmVyLmZyb20oYml0bWFwLmJ1ZmZlciwgYml0bWFwLmJ5dGVPZmZzZXQsIHNpemUuaGVpZ2h0ICogc2l6ZS53aWR0aCAqIDQpKTtcbiAgICAgIH07XG4gICAgICB3aW4ud2ViQ29udGVudHMub24oXCJwYWludFwiLCBoYW5kbGVyKTtcbiAgICB9KTtcbiAgfSBmaW5hbGx5IHtcbiAgICBjbGVhckludGVydmFsKGludGVydmFsKTtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2hvb3Qob3B0aW9uczogSVBDUmVuZGVyT3B0aW9ucyk6IFByb21pc2U8SXBjRG9uZVBheWxvYWQ+IHtcbiAgY29uc3QgeyBzb3VyY2UsIGZwcywgd2lkdGgsIGhlaWdodCwgZHVyYXRpb24sIHdpdGhBdWRpbywgb3V0RmlsZSwgZGlzYWJsZUh3Q29kZWMsIHNpZ25hbCwgb25Qcm9ncmVzcyB9ID0gb3B0aW9ucztcbiAgaWYgKHdpdGhBdWRpbykge1xuICAgIGxvZ2dlci53YXJuKFRBRywgXCJhdWRpbyB3aWxsIGJlIGlnbm9yZWQgb24gdGhpcyBtb2RlXCIpO1xuICB9XG5cbiAgYXdhaXQgdXNpbmcgXyA9IHVzZUZyYW1lUHJvdG9jb2wob3B0aW9ucy51c2VJbm5lclByb3h5KTtcbiAgY29uc3QgdEluaXQgPSBwZXJmb3JtYW5jZS5ub3coKTtcbiAgY29uc3Qgd2luUCA9IGxvYWRXaW5kb3coeyBzb3VyY2UsIHJlbmRlcmVyOiBvcHRpb25zLCBzaWduYWwgfSk7XG4gIGF3YWl0IHVzaW5nIHBpcGVsaW5lID0gYXdhaXQgRW5jb2RlclBpcGVsaW5lLmNyZWF0ZSh7IHdpZHRoLCBoZWlnaHQsIGZwcywgb3V0RmlsZSwgd2l0aEF1ZGlvLCBkaXNhYmxlSHdDb2RlYyB9KTtcbiAgY29uc3Qgd2luID0gYXdhaXQgd2luUDtcbiAgbG9nZ2VyLmRlYnVnKFRBRywgXCJpbml0IGRvbmU6XCIsIHsgc291cmNlLCBjb3N0OiBwZXJmb3JtYW5jZS5ub3coKSAtIHRJbml0IH0pO1xuXG4gIGNvbnN0IHRvdGFsID0gTWF0aC5jZWlsKGZwcyAqIGR1cmF0aW9uKTtcbiAgY29uc3QgZnJhbWVJbnRlcnZhbCA9IDEwMDAgLyBmcHM7XG5cbiAgbGV0IHdyaXR0ZW4gPSAwO1xuICBsZXQgcHJvZ3Jlc3MgPSAwO1xuICBsZXQgZW5jb2RlRXJyb3I6IEVycm9yIHwgdW5kZWZpbmVkO1xuICBjb25zdCBibGFua1N0YXRzID0gbmV3IEJsYW5rRnJhbWVTdGF0cyh3aWR0aCwgaGVpZ2h0KTtcbiAgY29uc3QgY2RwID0gd2luLndlYkNvbnRlbnRzLmRlYnVnZ2VyO1xuICBjb25zdCBtYWluID0gd2luLndlYkNvbnRlbnRzLm1haW5GcmFtZTtcbiAgY29uc3QgaWZyYW1lID0gbWFpbi5mcmFtZXNbMF07XG4gIHRyeSB7XG4gICAgLy8gQ29tcG9zaXRvci9jYXB0dXJlIGNhZGVuY2UgY2FwLCBOT1Qgb3V0cHV0IGZwczsgZnJhbWVzIGFyZSBkYW1hZ2UtZHJpdmVuIHBlciB2aXJ0dWFsIHN0ZXAuXG4gICAgd2luLndlYkNvbnRlbnRzLnNldEZyYW1lUmF0ZSgyNDApO1xuICAgIGF3YWl0IHBhdXNlVmlydHVhbFRpbWUoY2RwKTtcblxuICAgIGZvciAobGV0IGZyYW1lID0gMDsgZnJhbWUgPCB0b3RhbDsgZnJhbWUrKykge1xuICAgICAgc2lnbmFsPy50aHJvd0lmQWJvcnRlZCgpO1xuICAgICAgY29uc3QgZnJhbWVNcyA9IChmcmFtZSArIDEpICogZnJhbWVJbnRlcnZhbDtcblxuICAgICAgY29uc3Qgc3dhcHBlZCA9IHdhaXRTdGVnb1RpY2sod2luLndlYkNvbnRlbnRzKTtcbiAgICAgIC8vIEluZGVwZW5kZW50IHRhcmdldHMgKGlmcmFtZSBjbG9jayB2cyBtYWluLWZyYW1lIHN0ZWdvIGNhbnZhcyk6IG9uZSBjb25jdXJyZW50IGhvcCBpbnN0ZWFkIG9mIHR3byBzZXJpYWwgb25lcy5cbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKFt0aWNrKHsgZnJhbWU6IGlmcmFtZSwgdGltZXN0YW1wTXM6IGZyYW1lTXMsIHNpZ25hbCB9KSwgZHJhd1N0ZWdvKHdpbi53ZWJDb250ZW50cywgZnJhbWVNcyldKTtcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKFthZHZhbmNlVmlydHVhbFRpbWUoY2RwLCBmcmFtZUludGVydmFsKSwgc3dhcHBlZF0pO1xuICAgICAgY29uc3QgYml0bWFwID0gYXdhaXQgcGFpbnQoeyBzb3VyY2UsIHdpbiwgc2l6ZTogeyB3aWR0aCwgaGVpZ2h0IH0sIG1zOiBmcmFtZU1zIH0pO1xuICAgICAgYmxhbmtTdGF0cy5zYW1wbGUoYml0bWFwKTtcbiAgICAgIC8vIEVuY29kZSB3aXRob3V0IGF3YWl0aW5nIChsaW1pdGVyIHNlcmlhbGl6ZXMpLCBzbyBpdCBvdmVybGFwcyB0aGUgbmV4dCBmcmFtZSdzIENEUC9wYWludCBzZXR1cC5cbiAgICAgIHBpcGVsaW5lLmVuY29kZUJHUkEoYml0bWFwKS5jYXRjaCgoZSkgPT4gKGVuY29kZUVycm9yID8/PSBlKSk7XG4gICAgICB3cml0dGVuKys7XG4gICAgICBpZiAoZW5jb2RlRXJyb3IpIHtcbiAgICAgICAgdGhyb3cgZW5jb2RlRXJyb3I7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5ld1Byb2dyZXNzID0gTWF0aC5mbG9vcigod3JpdHRlbiAvIHRvdGFsKSAqIDEwMCk7XG4gICAgICBpZiAobmV3UHJvZ3Jlc3MgIT09IHByb2dyZXNzKSB7XG4gICAgICAgIHByb2dyZXNzID0gbmV3UHJvZ3Jlc3M7XG4gICAgICAgIG9uUHJvZ3Jlc3MocHJvZ3Jlc3MpO1xuICAgICAgfVxuICAgIH1cbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCBkaXNwb3NlV2luZG93KHdpbik7XG4gICAgYXdhaXQgcGlwZWxpbmUuZmluaXNoKCk7XG4gIH1cblxuICBpZiAoZW5jb2RlRXJyb3IpIHtcbiAgICB0aHJvdyBlbmNvZGVFcnJvcjtcbiAgfVxuICBpZiAod3JpdHRlbiA9PT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIm5vIGZyYW1lcyBjYXB0dXJlZFwiKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBibGFuayA9IGJsYW5rU3RhdHMuZmluYWxpemUoKTtcbiAgICBpZiAoYmxhbmsgPj0gQkxBTktfV0FSTl9SQVRJTykge1xuICAgICAgbG9nZ2VyLndhcm4oVEFHLCBgJHtzb3VyY2V9IGJsYW5rLWZyYW1lIHJhdGlvICR7TWF0aC5yb3VuZChibGFuayAqIDEwMCl9JSDigJQgcG9zc2libGUgd2hpdGUvYmxhbmsgc2NyZWVuYCk7XG4gICAgfVxuICAgIHJldHVybiB7IHdyaXR0ZW4sIGphbms6IDAsIG91dEZpbGUsIGJsYW5rIH07XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDEvMzAuXG5cbmltcG9ydCB7IG9rIH0gZnJvbSBcIm5vZGU6YXNzZXJ0XCI7XG5pbXBvcnQgeyBta2RpciB9IGZyb20gXCJub2RlOmZzL3Byb21pc2VzXCI7XG5pbXBvcnQgeyBkaXJuYW1lIH0gZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHsgYXBwLCBNZW51IH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBzdGFydEVsZWN0cm9uQ3Jhc2hSZXBvcnRlciB9IGZyb20gXCIuL2Jhc2UvY3Jhc2hcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuL2Jhc2UvbG9nZ2luZ1wiO1xuaW1wb3J0IHsgbWFrZUNMSSB9IGZyb20gXCIuL2NvbW1vblwiO1xuaW1wb3J0IHsgdHlwZSBJcGNNc2csIElwY01zZ1R5cGUsIElwY1dyaXRlciB9IGZyb20gXCIuL3JlbmRlcmVyL2lwY1wiO1xuaW1wb3J0IHsgc2V0dXBQdXBQcm90b2NvbCB9IGZyb20gXCIuL3JlbmRlcmVyL3Byb3RvY29sXCI7XG5pbXBvcnQgeyByZW5kZXIgfSBmcm9tIFwiLi9yZW5kZXJlci9yZW5kZXJcIjtcbmltcG9ydCB7IHdpdGhSZXJlbmRlciB9IGZyb20gXCIuL3JlbmRlcmVyL3JlcmVuZGVyXCI7XG5pbXBvcnQgeyBzaG9vdCB9IGZyb20gXCIuL3JlbmRlcmVyL3Nob290XCI7XG5cbmNvbnN0IFRBRyA9IFwiW0FwcF1cIjtcblxuZnVuY3Rpb24gcHJpbnRGZWF0dXJlcygpIHtcbiAgbG9nZ2VyLmRlYnVnKFRBRywgXCJncHUgZmVhdHVyZXM6XCIsIGFwcC5nZXRHUFVGZWF0dXJlU3RhdHVzKCkpO1xufVxuXG5jb25zdCBjdHJsID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xubGV0IGV4aXRpbmcgPSBmYWxzZTtcblxuc3RhcnRFbGVjdHJvbkNyYXNoUmVwb3J0ZXIoKTtcbk1lbnUuc2V0QXBwbGljYXRpb25NZW51KG51bGwpO1xuYXBwLmRvY2s/LmhpZGUoKTtcbmFwcC5vbihcIndpbmRvdy1hbGwtY2xvc2VkXCIsICgpID0+IHt9KTtcbmFwcC5vbihcImdwdS1pbmZvLXVwZGF0ZVwiLCBwcmludEZlYXR1cmVzKTtcbmFwcC5vbihcImJlZm9yZS1xdWl0XCIsIChlKSA9PiAhZXhpdGluZyAmJiBlLnByZXZlbnREZWZhdWx0KCkpO1xuYXBwLm9uKFwid2lsbC1xdWl0XCIsIChlKSA9PiAhZXhpdGluZyAmJiBlLnByZXZlbnREZWZhdWx0KCkpO1xuXG5vayhwcm9jZXNzLnNlbmQsIFwiaXBjIGNoYW5uZWwgbWlzc2luZyDigJQgc3Bhd24gd2l0aCBzdGRpb1szXT0naXBjJ1wiKTtcbnByb2Nlc3Mub25jZShcImRpc2Nvbm5lY3RcIiwgKCkgPT4gY3RybC5hYm9ydChcImRpc2Nvbm5lY3RcIikpO1xucHJvY2Vzcy5vbihcIm1lc3NhZ2VcIiwgKHJhdykgPT4ge1xuICBjb25zdCBtc2cgPSByYXcgYXMgSXBjTXNnO1xuICBpZiAobXNnLnR5cGUgPT09IElwY01zZ1R5cGUuQ2FuY2VsKSB7XG4gICAgY3RybC5hYm9ydChtc2cucmVhc29uKTtcbiAgfVxufSk7XG5cbm1ha2VDTEkoe1xuICBuYW1lOiBcImFwcFwiLFxuICBydW46IGFzeW5jIChzb3VyY2UsIG9wdGlvbnMpID0+IHtcbiAgICBjb25zdCBpcGMgPSBuZXcgSXBjV3JpdGVyKCk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGFwcC53aGVuUmVhZHkoKTtcbiAgICAgIHNldHVwUHVwUHJvdG9jb2woKTtcbiAgICAgIHByaW50RmVhdHVyZXMoKTtcbiAgICAgIGZvciAoY29uc3Qgb3V0IG9mIG9wdGlvbnMub3V0RmlsZS5zcGxpdChcIixcIikpIHtcbiAgICAgICAgYXdhaXQgbWtkaXIoZGlybmFtZShvdXQpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGFjdGlvbiA9IG9wdGlvbnMuZGV0ZXJtaW5pc3RpYyA/IHNob290IDogcmVuZGVyO1xuICAgICAgY3RybC5zaWduYWwudGhyb3dJZkFib3J0ZWQoKTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHdpdGhSZXJlbmRlcihjdHJsLnNpZ25hbCwgKCkgPT5cbiAgICAgICAgYWN0aW9uKHtcbiAgICAgICAgICBzb3VyY2UsXG4gICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICBzaWduYWw6IGN0cmwuc2lnbmFsLFxuICAgICAgICAgIG9uUHJvZ3Jlc3M6IChwKSA9PiBpcGMud3JpdGVQcm9ncmVzcyhwKSxcbiAgICAgICAgICBvbkNvbnNvbGU6IChsLCBtKSA9PiBpcGMud3JpdGVDb25zb2xlKGwsIG0pLFxuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgICBhd2FpdCBpcGMud3JpdGVEb25lKHJlc3VsdCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc3QgZXJyb3IgPSBlIGFzIEVycm9yO1xuICAgICAgY29uc3QgbSA9IGVycm9yLnN0YWNrID8/IGVycm9yLm1lc3NhZ2UgPz8gU3RyaW5nKGUgPz8gXCJ1bmtub3duIGVycm9yXCIpO1xuICAgICAgYXdhaXQgaXBjLndyaXRlRXJyb3IobSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGV4aXRpbmcgPSB0cnVlO1xuICAgICAgYXBwLmV4aXQoKTtcbiAgICB9XG4gIH0sXG59KTtcbiJdfQ==
|