pup-recorder 0.6.10 → 0.7.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/app.cjs CHANGED
@@ -1,4 +1,4 @@
1
- 'use strict';require('source-map-support/register.js');var assert=require('assert'),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$1=require('os');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var A__default=/*#__PURE__*/_interopDefault(A);var yo=Object.create;var ut=Object.defineProperty;var vo=Object.getOwnPropertyDescriptor;var Ue=(r,e)=>(e=Symbol[r])?e:Symbol.for("Symbol."+r),ne=r=>{throw TypeError(r)};var Wt=(r,e,t)=>e in r?ut(r,e,{enumerable:true,configurable:true,writable:true,value:t}):r[e]=t;var $t=r=>[,,,yo(null)],Gt=["class","method","getter","setter","accessor","field","value","get","set"],Ae=r=>r!==void 0&&typeof r!="function"?ne("Function expected"):r,Po=(r,e,t,o,n)=>({kind:Gt[r],name:e,metadata:o,addInitializer:i=>t._?ne("Already initialized"):n.push(Ae(i||null))}),pt=(r,e)=>Wt(e,Ue("metadata"),r[3]),zt=(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},ue=(r,e,t,o,n,i)=>{var c,a,d,p,u=e&7,l=false,m=false,w=2,b=Gt[u+5],S=r[w]||(r[w]=[]),v=((n=n.prototype),vo(n,t));for(var P=o.length-1;P>=0;P--)d=Po(u,t,a={},r[3],S),(d.static=l,d.private=m,p=d.access={has:y=>t in y},(p.get=y=>y[t]),u>2),c=(0, o[P])(v[b],d),a._=1,Ae(c)&&(v[b]=c);return v&&ut(n,t,v),n},jt=(r,e,t)=>Wt(r,e+"",t);var _=(r,e,t)=>{if(e!=null){typeof e!="object"&&typeof e!="function"&&ne("Object expected");var o,n;t&&(o=e[Ue("asyncDispose")]),o===void 0&&(o=e[Ue("dispose")],t&&(n=o)),typeof o!="function"&&ne("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 Co=()=>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=Co();function Kt(r,e,t){try{return e(process.env[r])}catch{return t}}function z(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}function Xt(r){return typeof r=="string"?r:String(r)}function lt(r){return e=>typeof e!="string"||e.trim()===""?[]:e.split(",").map(t=>r(t.trim()))}var ko=module$1.createRequire(f),qt=Kt("PUP_LOG_LEVEL",z,2),pe=path.dirname(ko.resolve("pup-recorder/package.json"));path.join(pe,"dist","app.cjs");var Jt=path.join(pe,"dist","runtime","preload.cjs");var ft="<pup@debug>",ht="<pup@info>",wt="<pup@warn>",_t="<pup@error>",gt="<pup@fatal>";function ke(r,e){return function(...t){let o=t.map(n=>n instanceof Error?n.stack??String(n):n);return r.call(this,...o)}}var Qt,Zt,er,tr,rr,ie;rr=[ke],tr=[ke],er=[ke],Zt=[ke],Qt=[ke];var j=class{constructor(e=qt){this._level=e;zt(ie,5,this);jt(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,flush:e.flush};}debug(...e){this.impl?.debug?.(ft,...e);}info(...e){this.impl?.info?.(ht,...e);}warn(...e){this.impl?.warn?.(wt,...e);}error(...e){this.impl?.error?.(_t,...e);}fatal(...e){this.impl?.error?.(gt,...e),process.exit(1);}dispatch(e){let t=e.trimEnd();t.startsWith(ft)?this.debug(t.slice(ft.length+1)):t.startsWith(ht)?this.info(t.slice(ht.length+1)):t.startsWith(wt)?this.warn(t.slice(wt.length+1)):t.startsWith(_t)?this.error(t.slice(_t.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(gt)?i+=a.slice(gt.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);});})}async flush(){await this.impl?.flush?.();}};ie=$t(),ue(ie,1,"debug",rr,j),ue(ie,1,"info",tr,j),ue(ie,1,"warn",er,j),ue(ie,1,"error",Zt,j),ue(ie,1,"fatal",Qt,j),pt(ie,j);var h=new j;nodeAv.Log.setCallback((r,e)=>{let t=e.trimEnd();t&&(r<=constants.AV_LOG_ERROR?h.error(t):r<=constants.AV_LOG_WARNING&&h.warn(t));});var Oo="[Crash]";function nr(){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}),h.debug(Oo,"set dump to",r);}function me(r,e){return (...t)=>{try{let o=r(...t);return o instanceof Promise?o.catch(()=>e):o}catch{return e}}}var Do="--pup-priv-args";function ir(){let r=process.argv,e=r.find(o=>o.startsWith(Do));if(!e)return h.debug("procargv",r),process.argv;let t=["exec",...r.slice(-1)];return e=Buffer.from(e.split("=")[1],"base64").toString(),t.push(...JSON.parse(e)),h.debug("pupargs",t),t}var Lo=1920,Vo=1080,Uo=30,Ho=5,Wo=10,$o=["out/html.mp4","out/html.webm"],sr=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"),outFiles:A__default.default.array(A__default.default.string()).describe("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"),disableWebSecurity:A__default.default.boolean().describe("Drop the same-origin wall; required to record a local file"),ignoreCertificateErrors:A__default.default.boolean().describe("Record over TLS the platform rejects, e.g. a self-signed intranet host"),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"),screenshots:A__default.default.array(A__default.default.number()).describe("Second marks to dump frame bitmaps as PNG")}),ar={width:Lo,height:Vo,fps:Uo,duration:Ho,outFiles:$o,withAudio:false,useInnerProxy:false,deterministic:false,disableGpu:false,disableHwCodec:false,disableWebSecurity:false,ignoreCertificateErrors:false,windowTolerant:false,windowTimeout:Wo,screenshots:[]};function jo(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 dr(r){let e=sr.shape,t=ar;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("-S, --screenshots <seconds>",e.screenshots.description,"").option("-f, --fps <number>",e.fps.description,`${t.fps}`).option("-t, --duration <number>",e.duration.description,`${t.duration}`).option("-o, --out-file <paths>",e.outFiles.description,t.outFiles.join(",")).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("--disable-web-security",e.disableWebSecurity.description,t.disableWebSecurity).option("--ignore-certificate-errors",e.ignoreCertificateErrors.description,t.ignoreCertificateErrors).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(jo(o),{width:me(z,t.width)(n.width),height:me(z,t.height)(n.height),fps:me(z,t.fps)(n.fps),duration:me(z,t.duration)(n.duration),outFiles:lt(Xt)(n.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,disableWebSecurity:n.disableWebSecurity??t.disableWebSecurity,ignoreCertificateErrors:n.ignoreCertificateErrors??t.ignoreCertificateErrors,windowTolerant:n.windowTolerant??t.windowTolerant,windowTimeout:me(z,t.windowTimeout)(n.windowTimeout),screenshots:lt(z)(n.screenshots)});}catch(i){h.fatal(i);}}),await commander.program.parseAsync(ir());}var He=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 We(r){return new Promise(e=>setTimeout(e,r))}function se(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 ur(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}function $e(r,e){let t,o=false;async function n(i){let s=await r(i);o||(t=setTimeout(()=>n(i+1),s??e));}return t=setTimeout(()=>n(0),e),()=>{o=true,clearTimeout(t);}}var Ge=5e3;function Te(r,e,t){return se(r.sendCommand(e,t),Ge,`cdp.${e}`)}function bt(r,e){return se(Te(r,"Runtime.evaluate",{expression:e}),Ge,"evalIn")}function pr(r,e){return new Promise((t,o)=>{let n=setTimeout(()=>{r.off("message",i),o(new Error(`advanceVirtualTime timed out after ${Ge}ms`));},Ge),i=(s,c)=>{c==="Emulation.virtualTimeBudgetExpired"&&(clearTimeout(n),r.off("message",i),t());};r.on("message",i),Te(r,"Emulation.setVirtualTimePolicy",{policy:"advance",budget:e}).catch(s=>{clearTimeout(n),r.off("message",i),o(s);});})}async function mr(r){await Te(r,"Emulation.setVirtualTimePolicy",{policy:"pause"});}async function Re(r,e){try{let t=r.debugger;await Te(t,"Emulation.clearDeviceMetricsOverride",{}),await Te(t,"Emulation.setDeviceMetricsOverride",{...e,deviceScaleFactor:1,mobile:!1}),r.invalidate();}catch{}}var le=32;var Ko="stego-tick";function lr(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$1=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 So=Object.create;var ut=Object.defineProperty;var Co=Object.getOwnPropertyDescriptor;var We=(r,e)=>(e=Symbol[r])?e:Symbol.for("Symbol."+r),oe=r=>{throw TypeError(r)};var Wt=(r,e,t)=>e in r?ut(r,e,{enumerable:true,configurable:true,writable:true,value:t}):r[e]=t;var $t=r=>[,,,So(null)],Gt=["class","method","getter","setter","accessor","field","value","get","set"],Te=r=>r!==void 0&&typeof r!="function"?oe("Function expected"):r,Ao=(r,e,t,o,n)=>({kind:Gt[r],name:e,metadata:o,addInitializer:i=>t._?oe("Already initialized"):n.push(Te(i||null))}),pt=(r,e)=>Wt(e,We("metadata"),r[3]),zt=(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},me=(r,e,t,o,n,i)=>{var a,c,d,p,u=e&7,f=false,m=false,w=2,b=Gt[u+5],E=r[w]||(r[w]=[]),v=((n=n.prototype),Co(n,t));for(var P=o.length-1;P>=0;P--)d=Ao(u,t,c={},r[3],E),(d.static=f,d.private=m,p=d.access={has:y=>t in y},(p.get=y=>y[t]),u>2),a=(0, o[P])(v[b],d),c._=1,Te(a)&&(v[b]=a);return v&&ut(n,t,v),n},jt=(r,e,t)=>Wt(r,e+"",t);var _=(r,e,t)=>{if(e!=null){typeof e!="object"&&typeof e!="function"&&oe("Object expected");var o,n;t&&(o=e[We("asyncDispose")]),o===void 0&&(o=e[We("dispose")],t&&(n=o)),typeof o!="function"&&oe("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,a,c,d){return d=Error(c),d.name="SuppressedError",d.error=s,d.suppressed=a,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 a=s[1]&&s[1].call(s[2]);if(s[0])return Promise.resolve(a).then(i,c=>(n(c),i()))}catch(c){n(c);}if(t)throw e};return i()};var To=()=>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,l=To();function Kt(r,e,t){try{return e(process.env[r])}catch{return t}}function z(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}function qt(r){return typeof r=="string"?r:String(r)}function ft(r){return e=>typeof e!="string"||e.trim()===""?[]:e.split(",").map(t=>r(t.trim()))}var Mo=module$1.createRequire(l),Yt=Kt("PUP_LOG_LEVEL",z,2),fe=path.dirname(Mo.resolve("pup-recorder/package.json"));path.join(fe,"dist","app.cjs");var Jt=path.join(fe,"dist","runtime","preload.cjs");var lt="<pup@debug>",ht="<pup@info>",wt="<pup@warn>",_t="<pup@error>",gt="<pup@fatal>";function Re(r,e){return function(...t){let o=t.map(n=>n instanceof Error?n.stack??String(n):n);return r.call(this,...o)}}var Qt,Zt,er,tr,rr,ne;rr=[Re],tr=[Re],er=[Re],Zt=[Re],Qt=[Re];var j=class{constructor(e=Yt){this._level=e;zt(ne,5,this);jt(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,flush:e.flush};}debug(...e){this.impl?.debug?.(lt,...e);}info(...e){this.impl?.info?.(ht,...e);}warn(...e){this.impl?.warn?.(wt,...e);}error(...e){this.impl?.error?.(_t,...e);}fatal(...e){this.impl?.error?.(gt,...e),process.exit(1);}dispatch(e){let t=e.trimEnd();t.startsWith(lt)?this.debug(t.slice(lt.length+1)):t.startsWith(ht)?this.info(t.slice(ht.length+1)):t.startsWith(wt)?this.warn(t.slice(wt.length+1)):t.startsWith(_t)?this.error(t.slice(_t.length+1)):this.info(t);}attach(e,t){return new Promise((o,n)=>{this.debug(`${t}.attach`);let i="",s=a=>{let c=a.toString();c.startsWith(gt)?i+=c.slice(gt.length+1):this.dispatch(c);};e.stderr?.on("data",s),e.stdout?.on("data",s),e.on("error",a=>{i+=a.message,e.kill();}).once("close",(a,c)=>{a||c||i?(i||=`command failed: ${e.spawnargs.join(" ")}`,this.debug(`${t}.close`,{code:a,signal:c,fatal:i}),n(new Error(i))):(this.debug(`${t}.close`),o());}).on("unhandledRejection",a=>{this.error(`${t}.unhandled`,a);}).on("uncaughtExceptionMonitor",a=>{this.error(`${t}.unhandled`,a);});})}async flush(){await this.impl?.flush?.();}};ne=$t(),me(ne,1,"debug",rr,j),me(ne,1,"info",tr,j),me(ne,1,"warn",er,j),me(ne,1,"error",Zt,j),me(ne,1,"fatal",Qt,j),pt(ne,j);var h=new j;nodeAv.Log.setCallback((r,e)=>{let t=e.trimEnd();t&&(r<=constants.AV_LOG_ERROR?h.error(t):r<=constants.AV_LOG_WARNING&&h.warn(t));});var Uo="[Crash]";function nr(){let r=path.join(electron.app.getPath("appData"),"pup-recorder","crashes");fs$1.mkdirSync(r,{recursive:true}),electron.app.setPath("crashDumps",r),electron.crashReporter.start({productName:"pup-recorder",uploadToServer:false,compress:false,ignoreSystemCrashHandler:true}),h.debug(Uo,"set dump to",r);}function le(r,e){return (...t)=>{try{let o=r(...t);return o instanceof Promise?o.catch(()=>e):o}catch{return e}}}var Ho="--pup-priv-args";function ir(){let r=process.argv,e=r.find(o=>o.startsWith(Ho));if(!e)return h.debug("procargv",r),process.argv;let t=["exec",...r.slice(-1)];return e=Buffer.from(e.split("=")[1],"base64").toString(),t.push(...JSON.parse(e)),h.debug("pupargs",t),t}var Wo=1920,$o=1080,Go=30,zo=5,jo=10,Ko=["out/html.mp4","out/html.webm"],sr=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"),outFiles:A__default.default.array(A__default.default.string()).describe("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"),disableWebSecurity:A__default.default.boolean().describe("Drop the same-origin wall; required to record a local file"),ignoreCertificateErrors:A__default.default.boolean().describe("Record over TLS the platform rejects, e.g. a self-signed intranet host"),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"),screenshots:A__default.default.array(A__default.default.number()).describe("Second marks to dump frame bitmaps as PNG")}),ar={width:Wo,height:$o,fps:Go,duration:zo,outFiles:Ko,withAudio:false,useInnerProxy:false,deterministic:false,disableGpu:false,disableHwCodec:false,disableWebSecurity:false,ignoreCertificateErrors:false,windowTolerant:false,windowTimeout:jo,screenshots:[]};function Yo(r){if(r.includes("://")||r.startsWith("data:"))return r;let e;try{e=fs$1.realpathSync(r);}catch{e=path.resolve(r);}return `file://${e}`}async function dr(r){let e=sr.shape,t=ar;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("-S, --screenshots <seconds>",e.screenshots.description,"").option("-f, --fps <number>",e.fps.description,`${t.fps}`).option("-t, --duration <number>",e.duration.description,`${t.duration}`).option("-o, --out-file <paths>",e.outFiles.description,t.outFiles.join(",")).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("--disable-web-security",e.disableWebSecurity.description,t.disableWebSecurity).option("--ignore-certificate-errors",e.ignoreCertificateErrors.description,t.ignoreCertificateErrors).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(Yo(o),{width:le(z,t.width)(n.width),height:le(z,t.height)(n.height),fps:le(z,t.fps)(n.fps),duration:le(z,t.duration)(n.duration),outFiles:ft(qt)(n.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,disableWebSecurity:n.disableWebSecurity??t.disableWebSecurity,ignoreCertificateErrors:n.ignoreCertificateErrors??t.ignoreCertificateErrors,windowTolerant:n.windowTolerant??t.windowTolerant,windowTimeout:le(z,t.windowTimeout)(n.windowTimeout),screenshots:ft(z)(n.screenshots)});}catch(i){h.fatal(i);}}),await commander.program.parseAsync(ir());}var $e=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 Ge(r){return new Promise(e=>setTimeout(e,r))}function L(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 ur(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}function ze(r,e){let t,o=false;async function n(i){let s=await r(i);o||(t=setTimeout(()=>n(i+1),s??e));}return t=setTimeout(()=>n(0),e),()=>{o=true,clearTimeout(t);}}var je=5e3;function Ie(r,e,t){return L(r.sendCommand(e,t),je,`cdp.${e}`)}function bt(r,e){return L(Ie(r,"Runtime.evaluate",{expression:e}),je,"evalIn")}function pr(r,e){return new Promise((t,o)=>{let n=setTimeout(()=>{r.off("message",i),o(new Error(`advanceVirtualTime timed out after ${je}ms`));},je),i=(s,a)=>{a==="Emulation.virtualTimeBudgetExpired"&&(clearTimeout(n),r.off("message",i),t());};r.on("message",i),Ie(r,"Emulation.setVirtualTimePolicy",{policy:"advance",budget:e}).catch(s=>{clearTimeout(n),r.off("message",i),o(s);});})}async function mr(r){await Ie(r,"Emulation.setVirtualTimePolicy",{policy:"pause"});}async function Me(r,e){try{let t=r.debugger;await Ie(t,"Emulation.clearDeviceMetricsOverride",{}),await Ie(t,"Emulation.setDeviceMetricsOverride",{...e,deviceScaleFactor:1,mobile:!1}),r.invalidate();}catch{}}var he=32;var Jo="stego-tick";function fr(r,e){let{width:t,height:o}=e;return `<!DOCTYPE html>
2
2
  <html>
3
3
  <head>
4
4
  <meta charset="UTF-8">
@@ -31,7 +31,7 @@
31
31
  <script>
32
32
  (function() {
33
33
  const WIDTH = ${t};
34
- const MARKER_WIDTH = ${le};
34
+ const MARKER_WIDTH = ${he};
35
35
  const canvas = document.getElementById('stego');
36
36
  const ctx = canvas.getContext('2d', { willReadFrequently: true });
37
37
  let startTime = null;
@@ -91,6 +91,6 @@
91
91
  })();
92
92
  </script>
93
93
  </body>
94
- </html>`}function ze(r,e){let{width:t,height:o}=e;if(t<le||o<2)return;let n=o-1,i=0;for(let s=0;s<le;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 fr(r){return bt(r,"__pup_start_stego__()")}async function hr(r,e){await bt(r.debugger,`__pup_draw_stego__(${e})`);}async function wr(r){let e=new Promise(t=>r.ipc.once(Ko,t));await se(e,5e3,"stego tick");}var xt="pup",Xo="pup-frame",_r={standard:true,secure:true,bypassCSP:true,supportFetchAPI:true,corsEnabled:true,stream:true,codeCache:true};electron.protocol.registerSchemesAsPrivileged([{scheme:xt,privileges:_r},{scheme:Xo,privileges:_r}]);function br(){electron.protocol.handle(xt,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=lr(t,{width:o,height:n});return new Response(i,{headers:{"content-type":"text/html"}})});}function xr(r,e){let t=new URL(`${xt}://stego`);return t.searchParams.set("src",r.replace("http://","https://")),t.searchParams.set("w",String(e.width)),t.searchParams.set("h",String(e.height)),t.toString()}var fe=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 Ie="libvpx-vp9";async function K(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 ae(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 B(){let r=new nodeAv.Packet;return r.alloc(),r}async function he(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 X=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=ae(e,t,nodeAv.AV_PIX_FMT_BGRA),this.dst=ae(e,t,nodeAv.AV_PIX_FMT_YUVA420P),this.pkt=B();}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 _n={[constants.AV_SAMPLE_FMT_FLT]:"flt",[constants.AV_SAMPLE_FMT_FLTP]:"fltp"},je=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=B(),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=_n[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,b=true;}finally{x(l,w,b);}}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 he(this._ctx,this._pkt,this._stream,e)}};function q(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 Y=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]);}},D=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 J=Buffer.from([0,0,0,1]);var Pt=16;var Et=23,_e=32,ge=33,Ke=34,Ar=39;function kr(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 St(r,e,t){let o=(r&63)<<1|e>>5&1,n=(e&31)<<3|t&7;return [o,n]}function U(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}=kr(r[n],r[n+1]);e.push({type:s,layerId:c,data:r.subarray(n,i)}),t=i;}return e}function Ct(r,e){let t=Buffer.from(r),{type:o,temporalId:n}=kr(t[0],t[1]),[i,s]=St(o,e,n);return t[0]=i,t[1]=s,t}function H(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 ce(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 gn=48,Ir=24,bn=2,xn=10,Ft=0,yn=1;function Tr(r,e,t){let o=e>>3,n=1<<7-(e&7),i=r[o]??0;r[o]=t?i|n:i&~n;}function Rr(r,e){let t=H(r);return Tr(t,e+bn,0),Tr(t,e+xn,1),ce(t)}function Xe(r){let e=U(r);if(e.length===0)return r;let t=[];for(let o of e){let n=o.data;o.type===_e?n=Rr(o.data,gn):o.type===ge&&(n=Rr(o.data,Ir)),t.push(J,n);}return Buffer.concat(t)}function vn(r,e,t){let o=H(r),n=new D(o),i=new Y;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 ce(q(i.bits))}function Pn(r,e,t,o){let n=H(r),i=new D(n),s=new Y;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 ce(q(s.bits))}function Br(r){let e=Ir+96;return vn(r,e,1)}function Mr(r){return Pn(r,16,1,1)}function En(r){let e=r.readUe();return e&1?e+1>>1:-(e>>1)}function Sn(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 Cn(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>=Pt&&e<=Et;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))):Sn(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===yn||n===Ft)&&(r.read(1)&&(r.readUe(),n===Ft&&r.readUe()),n===Ft&&r.read(1),t.cabacInitPresent&&r.read(1),r.readUe()),En(r),t.ppsHasLoopFilterAcrossSlicesFlag&&r.read(1),r.pos}function Nr(r,e,t){let o=H(r),n=new D(o),i=new D(o),s=Cn(i,e,t),c=s%8===0?8:8-s%8,a=(s+c)/8,d=new Y;for(let u=0;u<16;u++)d.bits.push(n.read(1));for(d.bits.push(n.read(1)),e>=Pt&&e<=Et&&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 ce(Buffer.concat([q(d.bits),o.subarray(a)]))}function Fn(r){let e=new D(H(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 An(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 kn(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 Or(r,e,t){let o=Fn(r);if(!o)return r;let n=new Y;return An(n,o),kn(n,o,e,t),n.bits.push(1),n.align(0),ce(q(n.bits))}function Dr(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 Tn(r,e){return r===ge?Br(e):r===Ke?Mr(e):e}function Lr(r){let{baseExtradata:e,alphaExtradata:t}=r,o=U(e),n=U(t),i=new Map;for(let a of n){if(a.type===_e)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===_e?Or(a.data,r.width,r.height):a.data;if(s.push(J,d),!c.has(a.type)){c.add(a.type);for(let p of i.get(a.type)??[]){let u=Tn(a.type,p.data);s.push(J,Ct(u,1));}}}return s.push(Rn()),Buffer.concat(s)}function Rn(){let[t,o]=St(Ar,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([J,Buffer.from([t,o]),Buffer.from([165,4]),q(n),Buffer.from([128])])}function Vr(r,e,t){let o=[];for(let n of r)o.push(J,n.data);for(let n of e)if(n.type<_e){let i=Nr(n.data,n.type,t);o.push(J,Ct(i,1));}return Buffer.concat(o)}var Ye=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=Vr(U(e.data),U(t.data),c);n.data=Xe(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 Q(r,e,t){throw new Error(`hevc_alpha: NVENC SPS/PPS unsupported: ${r}=${e}, expected ${t}`)}function Nn(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 On(r){let e=new D(r);e.read(16),e.read(4);let t=e.read(3);t!==0&&Q("sps_max_sub_layers_minus1",t,"0"),e.read(1),Nn(e,t),e.readUe();let o=e.readUe();o===3&&Q("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)&&Q("scaling_list_enabled_flag",1,"0"),e.read(1);let c=e.read(1)===1;e.read(1)&&Q("pcm_enabled_flag",1,"0");let a=e.readUe();a>1&&Q("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&&Q("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 Dn(r){let e=new D(r);e.read(16),e.readUe(),e.readUe(),e.read(1),e.read(1);let t=e.read(3);t!==0&&Q("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)&&Q("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 Ur(r){let e=U(r),t=e.find(s=>s.type===ge),o=e.find(s=>s.type===Ke);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=On(H(t.data)),i=Dn(H(o.data));return {...n,...i}}var qe=class r{_s;_mux;_pts=0n;constructor(e){this._s=e,this._mux=new Ye({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 K({...d,pixelFormat:constants.AV_PIX_FMT_BGRA},"nvenc.base.open2"));let l=p.use(await K({...d,pixelFormat:constants.AV_PIX_FMT_YUV420P},"nvenc.alpha.open2"));if(!u.extraData||!l.extraData)throw new Error("nvenc: codec extradata missing");let m=Ur(u.extraData);let w=s.addStream(u,"hvc1");let b=Lr({baseExtradata:u.extraData,alphaExtradata:l.extraData,width:t,height:o});w.codecpar.extradata=Xe(b);let g=t*o;let S=(t+1>>1)*(o+1>>1);let v=Buffer.alloc(g+S*2);v.fill(128,g);let P=p.use(B());let y=p.use(B());let E=p.use(ae(t,o,constants.AV_PIX_FMT_YUV420P));p.move();return new r({baseCtx:u,alphaCtx:l,basePkt:P,alphaPkt:y,stream:w,alphaSwFrame:E,alphaBuf:v,hevcCfg:m})}catch(T){var W=T,$=true;}finally{x(C,W,$);}}async encode(e,t){let{baseCtx:o,alphaCtx:n,alphaSwFrame:i,alphaBuf:s}=this._s,c=this._pts++;Dr(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 be=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 K({codec:c,...s,codecTag:o,options:n},"videoCtx.open2"));let p=a.use(B());let u=i.addStream(d,o);a.move();return new r(d,p,u)}catch(m){var w=m,b=true;}finally{x(l,w,b);}}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 he(this._ctx,this._pkt,this._stream,e)}};var Je=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 K({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(B());let l=c.addStream(d,"hvc1");p.move();return new r(d,u,l)}catch(w){var b=w,g=true;}finally{x(m,b,g);}}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 he(this._ctx,this._pkt,this._stream,e)}};var Qe="[Encoder]";async function Wr(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 h.debug(Qe,"using VideoToolbox HEVC alpha encoder"),{hwVideo:await Je.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 h.debug(Qe,"using NVENC dual-layer HEVC alpha encoder"),{hwVideo:await qe.create({width:t,height:o,fps:n,hw:a,bitrate:i,muxer:e}),hw:a,ownsHw:d}}catch(S){h.warn(Qe,"Hardware codec session limits reached, use software encoder",S),d&&a?.dispose();}h.debug(Qe,"using software libx265 HEVC alpha encoder");let p=_(m,new DisposableStack);let u=p.use(await be.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 X.create(t,o));p.move();return {video:u,codec:l,ownsHw:!1}}catch(w){var b=w,g=true;}finally{x(m,b,g);}}var xe=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 Ne=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 xe(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 Wr({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 be.create({width:o,height:n,fps:i,codecName:Ie,codecOpts:{deadline:"realtime","cpu-used":"8","row-mt":"1",threads:"4"},bitrate:4e6,pixelFormat:constants.AV_PIX_FMT_YUVA420P,muxer:t}),codec:await X.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 je.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 ye=class r{_s;_disposed=false;constructor(e){this._s=e;}static async create(e){var w=[];try{let{width:t,height:o,fps:n,outFiles:i,withAudio:s=!1,disableHwCodec:c=!1}=e;if(i.length===0)throw new Error("outFiles must contain at least one path");let a=i.map(P=>Ne.kindFromPath(P));let d=!c&&a.includes("mp4");let p=_(w,new AsyncDisposableStack,!0);let u=d?api.HardwareContext.auto()??void 0:void 0;u&&p.use(u);let l=u?.deviceTypeName===constants.FF_HWDEVICE_TYPE_VIDEOTOOLBOX||u?.deviceTypeName===constants.FF_HWDEVICE_TYPE_CUDA;let m=[];for(let P=0;P<i.length;P++){let y=await Ne.create({outFile:i[P],kind:a[P],width:t,height:o,fps:n,withAudio:s,disableHwCodec:c,sharedHw:a[P]==="mp4"&&l?u:void 0});p.use(y),m.push(y);}p.move();return new r({sinks:m,sharedHw:u,limiter:new fe(1),outFiles:i,opts:e})}catch(b){var g=b,S=true;}finally{var v=x(w,g,S);v&&await v;}}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 X.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(ae(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);}}};function Ze(r,e){return r.width===e.width&&r.height===e.height}function mi(r,e){return r.readUInt8(e)>>3|r.readUInt8(e+1)>>3<<5|r.readUInt8(e+2)>>3<<10|r.readUInt8(e+3)>>3<<15}function li(r,e,t){let o=Math.max(1,Math.floor(e/32)),n=Math.max(1,Math.floor(t/32)),i=new Map,s=new Map,c=0,a=0;for(let d=0;d<t;d+=n)for(let p=0;p<e;p+=o){let u=(d*e+p)*4,l=mi(r,u),m=(i.get(l)??0)+1;i.set(l,m),s.has(l)||s.set(l,u),m>a&&(a=m,c=l);}return s.get(c)??0}function fi(r,e,t){let o=li(r,e,t),n=r.readUInt8(o),i=r.readUInt8(o+1),s=r.readUInt8(o+2),c=r.readUInt8(o+3),a=0;for(let d=0;d<t;d+=4){let p=d>>2&3;for(let u=p;u<e;u+=4){let l=(d*e+u)*4;if((Math.abs(r.readUInt8(l)-n)>8||Math.abs(r.readUInt8(l+1)-i)>8||Math.abs(r.readUInt8(l+2)-s)>8||Math.abs(r.readUInt8(l+3)-c)>8)&&(a++,a>=16))return false}}return true}var ve=class{_width;_height;_total=0;_blank=0;constructor(e,t){this._width=e,this._height=t;}sample(e){this._total++,fi(e,this._width,this._height)&&this._blank++;}finalize(){return this._total>0?this._blank/this._total:0}};var Pe=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}}};var Gr="audio-meta",zr="audio-chunk";function jr({wc:r,encoder:e,getVideoTimeMs:t,onError:o}){let n=async(s,c)=>{let a=c.sampleRate;if(!Number.isFinite(a)||a<=0||a>192e3)return;let 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)=>{let a=ArrayBuffer.isView(c)?c.byteLength:0;if(!(a===0||a>384e3||a%8!==0))try{await e.encodeAudio(c);}catch(d){o(d);}};return r.ipc.on(Gr,n),r.ipc.on(zr,i),()=>{r.ipc.removeListener(Gr,n),r.ipc.removeListener(zr,i);}}var Ee=class{constructor(e){this._s=e;let t=path.dirname(e.outFiles[0]??".");this._pending=e.marks.map((o,n)=>({ms:o*1e3,index:n,path:path.join(t,`screenshot_${n}.png`)})).sort((o,n)=>o.ms-n.ms);}_s;_pending;_done=new Map;_writes=[];capture(e,t){for(;this._pending.length>0&&this._pending[0].ms<=e;)this.take(this._pending.shift(),t);}async finish(e){for(;e&&this._pending.length>0;)this.take(this._pending.shift(),e);return await Promise.all(this._writes),[...this._done.entries()].sort((t,o)=>t[0]-o[0]).map(([,t])=>t)}take(e,t){let{width:o,height:n}=this._s,i=electron.nativeImage.createFromBitmap(t,{width:o,height:n}).toPNG();this._done.set(e.index,e.path),this._writes.push(promises.writeFile(e.path,i));}};function et({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 We(2**s*100+Math.random()*100);}}}}var Kr="--pup-world=",Xr="--pup-audio";var tt=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 rt="[Network]",qr=new Map([["jssz-boss.hdslb.com","jssz-boss.bilibili.co"],["boss.hdslb.com","shjd-boss.bilibili.co"],["upos-sz-mirrorcos.bilivideo.com","jssz-inner-boss.bilibili.co"]]),xi=new Set(qr.values()),yi=["pup:","pup-frame:","file:","data:","blob:","chrome-extension:","devtools:"];function vi(r){for(let e of yi)if(r.startsWith(e))return true;return false}function Pi(r){return r.startsWith("http")&&xi.has(new url.URL(r).hostname)}function Se(r){if(!r.startsWith("http"))return r;let e=new url.URL(r),t=qr.get(e.hostname);return t?(e.hostname=t,e.protocol="http:",e.toString()):r}function Jr({source:r,window:e,useInnerProxy:t,stubMedia:o}){let n=e.webContents.session.webRequest,i=new fe(256),s=new Map;async function c(d,p){let u=new tt;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?Se(u):u;i.schedule(()=>{let m=`${e.id}_${d.id}`;return h.debug(rt,"start:",{key:m,url:u,proxied:l,method:d.method,source:r,stats:i.stats}),p(l===u?{cancel:false}:{cancel:false,redirectURL:l}),vi(u)?Promise.resolve():c(m,()=>{h.warn(rt,"maybe timeout:",{key:m,url:u,proxied:l,method:d.method,source:r});})});}),n.onHeadersReceived(({url:d,responseHeaders:p},u)=>{if(delete p?.["x-frame-options"],delete p?.["X-Frame-Options"],delete p?.["content-security-policy"],delete p?.["Content-Security-Policy"],t&&Pi(d)){u({cancel:false,responseHeaders:{...p,"access-control-allow-origin":["*"]}});return}u({cancel:false,responseHeaders:p});}),n.onCompleted(d=>{let p=`${e.id}_${d.id}`;a(p),h.debug(rt,"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;h[o&&w==="media"?m==="net::ERR_ABORTED"?"debug":"warn":"error"](rt,"error:",{key:p,url:u,method:l,error:m,resourceType:w,source:r});});}function At(r){let e=r.webContents.session.webRequest;e.onBeforeRequest(null),e.onHeadersReceived(null),e.onCompleted(null),e.onErrorOccurred(null);}var Z="[Window]",Qr=new Error("window timeout"),Si=["Mixed Content: The page at"];function Ci({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:Qr),o),p=u=>{clearTimeout(d),u?c(u):s();};i?.throwIfAborted(),i?.addEventListener("abort",()=>p(i.reason),{once:true}),e.webContents.once("dom-ready",()=>{h.debug(Z,"dom-ready:",{source:r}),a=true;}),e.webContents.once("did-stop-loading",()=>{h.debug(Z,"did-stop-loading:",{source:r}),p();}),e.webContents.once("did-fail-load",(u,l,m,w)=>{let b=`did-fail-load: ${JSON.stringify({url:w,source:r,code:l,desc:m})}`;h.error(Z,b),p(new Error(b));}),e.webContents.once("preload-error",(u,l,m)=>{h.error(Z,`preload-error: ${JSON.stringify({source:r,message:m.message})}`),p(m);}),e.webContents.once("render-process-gone",(u,{exitCode:l,reason:m})=>{let w=`render-process-gone: ${JSON.stringify({source:r,exitCode:l,reason:m})}`;h.error(Z,w),p(new Error(w));}),t();})}function Ce(r){return new Promise(e=>{At(r);let t=setTimeout(()=>{try{h.warn(Z,"force close"),r.destroy();}catch{}o();},1e3),o=()=>{clearTimeout(t),e();};r.webContents.stopPainting(),r.webContents.debugger.detach(),r.once("closed",o),r.close();})}var Fi={shoot:path.join(pe,"dist","runtime","shoot.global.js"),render:path.join(pe,"dist","runtime","render.global.js"),audio:path.join(pe,"dist","runtime","audio.global.js")};function Ai(r){let e=r.deterministic?"shoot":r.withAudio?"audio":"render";return Fi[e]}async function Zr({source:r,renderer:e,tolerant:t,signal:o,onCreated:n}){let{width:i,height:s,useInnerProxy:c}=e,a=c?Se(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,nodeIntegrationInSubFrames:true,sandbox:false,webSecurity:!e.disableWebSecurity,allowRunningInsecureContent:true,experimentalFeatures:true,preload:Jt,additionalArguments:[`${Kr}${Ai(e)}`,...e.withAudio?[Xr]:[]]}});Jr({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"&&Si.find(b=>u.startsWith(b)))return;let w=[Z,"console:",{message:u,lineNumber:l,sourceId:m,source:r}];p==="error"?h.error(...w):h.debug(...w),e.onConsole(p,u);});try{let p=xr(a,{width:i,height:s});await Ci({source:r,win:d,action:()=>d.loadURL(p),timeoutMs:e.windowTimeout*1e3,tolerant:t,signal:o});}catch(p){throw await Ce(d),p}return d}var ki=et({fn:Zr,maxAttempts:2});async function ot({source:r,renderer:e,onCreated:t,signal:o}){o?.throwIfAborted();let n,i;try{n=await ki({source:r,renderer:e,signal:o});}catch(c){i=c;}let s=()=>Zr({source:r,renderer:e,onCreated:t,signal:o,tolerant:e.windowTolerant});if(e.windowTolerant&&i===Qr)return h.warn(Z,`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(),At(n),await We(2e3),await Ce(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 eo="[Render]";async function to(r){var Le=[];try{let{source:e,fps:t,width:o,height:n,duration:i,withAudio:s,outFiles:c,disableHwCodec:a,signal:d,onProgress:p}=r;let u=_(Le,await ye.create({width:o,height:n,fps:t,outFiles:c,withAudio:s,disableHwCodec:a}),!0);let l=new Ee({marks:r.screenshots,width:o,height:n,outFiles:c});let m=Math.ceil(t*i);let w=1e3/t;let b={width:o,height:n+1};let g=0;let S;let v=[];let P;let y=0;let E;let C;let T;let W;let $=new ve(o,n);let M=new Pe(t);let k;let re=R=>{g++,$.sample(R),u.encodeBGRA(R).catch(I=>E??=I);};let oe=(R,I,O)=>{if(E??=d?.reason,E){T?.(E);return}let L=O.getSize();if(!Ze(L,b)){Re(F.webContents,b);return}let de=O.toBitmap(),G=ze(de,L);if(G===void 0){E??=new Error(`no timestamp @ ${g}`);return}if(P!==void 0&&G-P<w*.8)return;let Fe=Buffer.from(de.buffer,de.byteOffset,n*o*4);if(S=Fe,l.capture(G,Fe),P===void 0)re(Fe),M.wrote();else {let Ot=G-P;if(Ot<=w*1.2)re(Fe),M.wrote();else {let Dt=Math.round(Ot/w);M.dropped(Dt-1),M.wrote();for(let Lt=0;Lt<Dt&&g<m;Lt++)re(Fe);}}P=G;let Nt=Math.floor(g/m*100);Nt!==y&&(y=Nt,p(y));let xo=i*1e3;(G>=xo-w*.5||g>=m)&&C?.();};let F=await ot({source:e,renderer:r,signal:d,onCreated:R=>{s&&(k=jr({wc:R.webContents,encoder:u,getVideoTimeMs:()=>P??0,onError:I=>E??=I}));}});let ct=F.webContents.debugger;try{F.webContents.stopPainting(),F.webContents.setFrameRate(t),F.webContents.on("paint",oe),F.webContents.startPainting(),d?.throwIfAborted(),d?.addEventListener("abort",()=>T?.(d.reason),{once:!0}),await fr(ct),await new Promise((R,I)=>{[C,T]=[R,I];let O=0,L=0;W=$e(async()=>{if(g!==O){O=g,L=0;return}L++,L>=t?T?.(new Error(`renderer stalled for ${Math.round(L*1e3/t)}ms @ ${g}`)):(L===1||L===Math.floor(t/2))&&await Re(F.webContents,b);},1e3/t);});}finally{W?.(),F.webContents.off("paint",oe),await Ce(F),k?.(),await u.finish(),v=await l.finish(S);}if(E||g===0)throw E??new Error("no frames captured");else {let R=$.finalize();R>=.5&&h.warn(eo,`${e} blank-frame ratio ${Math.round(R*100)}% \u2014 possible white/blank screen`);let{jank:I}=M.finalize();return I>=.25&&h.warn(eo,`${e} jank score ${I.toFixed(2)} \u2014 dropped frames`),{written:g,outFiles:c,blank:R,screenshots:v,jank:I}}}catch(dt){var Ve=dt,V=true;}finally{var N=x(Le,Ve,V);N&&await N;}}var Ti="[Rerender]",ro=3;async function oo(r,e){let t;for(let o=1;o<=ro;o++)try{return await e()}catch(n){r.throwIfAborted(),t=n,h.warn(Ti,`retry ${o}/${ro}: ${n.message}`);}throw t}var Ri="[Video]";async function no({frame:r,timestampMs:e,signal:t}){if(r?.url){t?.throwIfAborted();try{await ur(r.executeJavaScript(`window.__pup_video__&&(async()=>{await __pup_video__.ready();await __pup_video__.advance(${e})})()`),t);}catch(o){t?.throwIfAborted(),h.warn(Ri,`advance skipped: ${o instanceof Error?o.message:String(o)}`);}}}var io="__pup_tick__";async function so(r){let{frame:e,timestampMs:t}=r;if(!e)return;let o=`window.${io}&&window.${io}.process(${t})`,n=e.executeJavaScript(o);await Promise.all([se(n,5e3,"tick.executeJavaScript"),no(r)]);}var Bi="8000000";function nt(r,e){let t={signal:e,options:{rw_timeout:Bi}};return api.Demuxer.open(r,t)}var Li="[Decode]";async function*ao({src:r,meta:e,signal:t,fromIdx:o}){var C=[];try{let n=_(C,await nt(r,t),!0);let i;if(o!==void 0&&o>1){let k=e.leadGap+(o-1)/e.fps;await n.seek(k,-1,constants.AVSEEK_FLAG_BACKWARD)===0?i=o:h.warn(Li,`seek to frame ${o} failed, decoding from head`);}let s=n.streams?.find(k=>k.codecpar.codecType===constants.AVMEDIA_TYPE_VIDEO);if(!s)throw new Error("no video stream");let c=_(C,await api.Decoder.create(s,{signal:t}));let{frameWidth:a,frameHeight:d,width:p,height:u,fps:l}=e;let m=a!==p||d!==u?`scale=${a}:${d},`:"";let w=_(C,api.FilterAPI.create(`fps=${l},${m}format=rgba`,{signal:t}));let b=0;let g=0;for await(var S of w.frames(c.frames(n.packets(s.index)))){var v=[];try{let k=_(v,S);if(k){if(i!==void 0){let re=k.timeBase.num/k.timeBase.den,oe=k.bestEffortTimestamp??k.pts;if(oe===void 0)continue;let F=Math.round((Number(oe)*re-e.leadGap)*e.fps)+1;if(F<g||(g=F,F<i))continue;b=F;}else b++;yield {idx:b,buf:Vi(k)};}}catch(P){var y=P,E=!0;}finally{x(v,y,E);}}}catch(T){var W=T,$=true;}finally{var M=x(C,W,$);M&&await M;}}function Vi(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 Ui="[DecodeSession]",co=4,Hi=16,Wi=256*1024*1024,$i=3,it=class{constructor(e,t){this.meta=e;this._src=t;this._leadFrames=Math.round(e.leadGap*e.fps),this._keepCount=Math.max(Hi,Math.floor(Wi/(e.frameWidth*e.frameHeight*4))),this._seekJump=Math.max(2*e.fps,co*2),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;_seekJump;_seekTo;_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),e>this._ready+this._seekJump?this.requestRestart(e):this.wake()):(this._ready=0,this._done=false,this._want=e,this.requestRestart(e)),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(e){this._seekTo=e,this._gen++;let t=this._restart;this._restart=void 0,t?.(),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,h.warn(Ui,`[${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<=$i||(e=0,this._done=true,this.drainWaiters(),await this.untilRestart());}}async decodePass(e){let t=this._seekTo;this._seekTo=void 0;let o=ao({src:this._src,meta:this.meta,signal:this._ctrl.signal,fromIdx:t});for await(let{idx:n,buf:i}of o){if(this._closed||this._gen!==e)return;let s=this._leadFrames+n;for(;!this._closed&&this._gen===e&&s>this.demand+co;)await this.pause();if(this._closed||this._gen!==e)return;this._buf.set(s,i),this._ready=s,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 uo(r){var S=[];try{let e=_(S,await nt(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=_(S,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 T=_(a,c);if(T?.decodeErrorFlags===0){s=Math.max(0,Number(T.pts)*n);break e}}catch(d){var p=d,u=!0;}finally{x(a,p,u);}}}catch{}}catch(w){var b=w,g=!0;}finally{x(m,b,g);}}return {width:t.codecpar.width,height:t.codecpar.height,duration:o,leadGap:s}}catch(v){var P=v,y=true;}finally{var E=x(S,P,y);E&&await E;}}async function mo({width:r,height:e,duration:t}){let o=nodeAv.Codec.findEncoderByName(Ie);if(!o)throw new Error(`stub: encoder not found: ${Ie}`);let n=path.join(os$1.tmpdir(),`pup_stub_${crypto.randomBytes(8).toString("hex")}.webm`);try{{var i=[];try{let p=_(i,new xe(n),!0);let u=_(i,await K({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 Bt(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 b=_(i,B());for(;;){let g=await u.receivePacket(b);if(g===constants.AVERROR_EAGAIN||g===constants.AVERROR_EOF)break;nodeAv.FFmpegError.throwIfError(g,"stubCtx.receivePacket"),b.streamIndex=l.index,b.duration=w,b.rescaleTs(u.timeBase,l.timeBase),await p.writePacket(b),b.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 Bt=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 st=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=rs(e),o=this._sessions.get(t);if(o)return o.refs++,o.session.meta;let n=this._useInnerProxy?Se(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=lo(i.width*d),c=lo(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 it(a,n),refs:1}),a}stub(e){if(this._closed)throw new Error("frame-server: closed");let t=this._useInnerProxy?Se(e):e,o=this._stubs.get(t);if(o)return o;let n=this.probeCached(t).then(i=>mo({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=et({fn:uo})(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 rs(r){return crypto.createHash("sha1").update(`${r.src}|${r.fps}|${r.dstW??""}|${r.dstH??""}|${r.fit??""}`).digest("hex")}function lo(r){let e=Math.round(r);return Math.max(2,e-e%2)}var ho="[FrameProtocol]",wo="pup-frame",ee={"access-control-allow-origin":"*","access-control-allow-methods":"GET, OPTIONS","access-control-allow-headers":"*"};function _o(r){let e=new st(r);return electron.protocol.handle(wo,async t=>{if(t.method==="OPTIONS")return new Response(null,{status:204,headers:ee});let o=new URL(t.url);h.debug(ho,`${t.method} ${o.hostname}${o.search}`);try{let n;switch(o.hostname){case "open":n=os(await e.open({src:o.searchParams.get("src")??"",fps:at(o,"fps",30),dstW:at(o,"w",0),dstH:at(o,"h",0),fit:o.searchParams.get("fit")??void 0}));break;case "frame":n=is(await e.getFrame(o.searchParams.get("id")??"",at(o,"idx",1)));break;case "stub":n=ns(await e.stub(o.searchParams.get("src")??""));break;case "close":await e.close(o.searchParams.get("id")??""),n=new Response(null,{status:204,headers:ee});break;default:n=new Response(`unknown action: ${o.hostname}`,{status:404,headers:ee});}return n}catch(n){let i=n instanceof Error?n.message:String(n);return h.error(ho,`${o.hostname} failed${o.search}: ${i}`),new Response(i,{status:500,headers:ee})}}),{[Symbol.asyncDispose]:async()=>{electron.protocol.unhandle(wo),await e.closeAll();}}}function os(r){return new Response(JSON.stringify(r),{headers:{...ee,"content-type":"application/json"}})}function ns(r){let e=new Uint8Array(r.byteLength);return e.set(r),new Response(e.buffer,{headers:{...ee,"content-type":"video/webm","cache-control":"no-store"}})}function is(r){if(r.byteLength===0)return new Response(null,{status:410,headers:ee});let e=new Uint8Array(r.byteLength);return e.set(r),new Response(e.buffer,{headers:{...ee,"content-type":"application/octet-stream","cache-control":"no-store"}})}function at(r,e,t){let o=r.searchParams.get(e),n=o?parseInt(o,10):NaN;return Number.isFinite(n)?n:t}var Oe="[Shoot]",ss=240;async function as({win:r,fps:e,size:t,ms:o}){let n,i={width:t.width,height:t.height+1},s=Math.abs(1e3/e-o)<1;try{return await new Promise(c=>{let a=(u,l,m)=>{let w=m.getSize();if(!Ze(w,i))return;let b=m.crop({x:0,y:i.height-2,width:le,height:2}),g=ze(b.toBitmap(),{width:le,height:2});if(g===void 0||o-g>1)return;let S=m.toBitmap();r.webContents.off("paint",a),c({ts:g,pix:Buffer.from(S.buffer,S.byteOffset,t.height*t.width*4)});};r.webContents.on("paint",a);let d=s?e*10:e*5,p=Math.floor(s?e:e/2);n=$e(async u=>{u>=d?(h.warn(Oe,`paint timeout @ ${o}`),r.webContents.off("paint",a),c(void 0)):u%p===0&&await Re(r.webContents,i);},1e3/e);})}finally{n?.();}}async function go(r){var F=[];try{let{source:e,fps:t,width:o,height:n,duration:i,withAudio:s,outFiles:c,disableHwCodec:a,signal:d,onProgress:p}=r;s&&h.warn(Oe,"audio will be ignored on this mode");let u=new Ee({marks:r.screenshots,width:o,height:n,outFiles:c});let l=_(F,_o(r.useInnerProxy),!0);let m=performance.now();let w=ot({source:e,renderer:r,signal:d});let b=_(F,await ye.create({width:o,height:n,fps:t,outFiles:c,withAudio:s,disableHwCodec:a}),!0);let g=await w;let S=Math.round(performance.now()-m);h.debug(Oe,"init done:",{source:e,cost:S});let v=Math.ceil(t*i);let P=1e3/t;let y=0;let E=0;let C=0;let T;let W=[];let $=new ve(o,n);let M=new Pe(t);let k=g.webContents.debugger;let re=g.webContents.mainFrame;let oe=re.frames[0];try{g.webContents.setFrameRate(ss),await mr(k);for(let V=0;V<v;V++){d?.throwIfAborted();let N=(V+1)*P,R=wr(g.webContents);R.catch(()=>{}),await Promise.all([so({frame:oe,timestampMs:N,signal:d}),hr(g.webContents,N)]),await Promise.all([pr(k,P),R]);let I=await as({source:e,fps:t,win:g,size:{width:o,height:n},ms:N});I?(C=0,M.wrote()):(C++,M.dropped(1));let O=I??T;if(!O||C>=t)throw new Error(`renderer exausted @ ${N}`);let L=Math.max(1,Math.ceil(O.ts/P-V));T=O;for(let G=0;G<L;G++)u.capture(N,O.pix),$.sample(O.pix),await b.encodeBGRA(O.pix),y++;let de=Math.floor(y/v*100);de!==E&&(E=de,p(E));}}finally{await Ce(g),await b.finish(),W=await u.finish(T?.pix);}if(y===0)throw new Error("no frames captured");else {let V=$.finalize();V>=.5&&h.warn(Oe,`${e} blank-frame ratio ${Math.round(V*100)}% \u2014 possible white/blank screen`);let{jank:N}=M.finalize();return N>=.25&&h.warn(Oe,`${e} jank score ${N.toFixed(2)} \u2014 frames held past paint timeout`),{written:y,outFiles:c,blank:V,jank:N,screenshots:W}}}catch(ct){var Le=ct,dt=true;}finally{var Ve=x(F,Le,dt);Ve&&await Ve;}}var ms="[App]";process.env.ELECTRON_DISABLE_SECURITY_WARNINGS="1";function bo(){h.debug(ms,"gpu features:",electron.app.getGPUFeatureStatus());}var De=new AbortController,Mt=false;nr();electron.Menu.setApplicationMenu(null);electron.app.dock?.hide();electron.app.on("window-all-closed",()=>{});electron.app.on("gpu-info-update",bo);electron.app.on("before-quit",r=>!Mt&&r.preventDefault());electron.app.on("will-quit",r=>!Mt&&r.preventDefault());assert.ok(process.send,"ipc channel missing \u2014 spawn with stdio[3]='ipc'");process.once("disconnect",()=>De.abort("disconnect"));process.on("message",r=>{let e=r;e.type==="cancel"&&De.abort(e.reason);});dr({name:"app",run:async(r,e)=>{let t=new He;try{await electron.app.whenReady(),br(),bo();for(let i of e.outFiles)await promises.mkdir(path.dirname(i),{recursive:!0});let o=e.deterministic?go:to;De.signal.throwIfAborted();let n=await oo(De.signal,()=>o({source:r,...e,signal:De.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{Mt=true,electron.app.exit();}}});
94
+ </html>`}function Ke(r,e){let{width:t,height:o}=e;if(t<he||o<2)return;let n=o-1,i=0;for(let s=0;s<he;s++){let a=(n*t+s)*4,d=(r[a]??0)>127?1:0;i=i<<1|d;}if(i=i>>>0,!(!Number.isFinite(i)||i<0||i>1e7))return i}function lr(r){return bt(r,"__pup_start_stego__()")}async function hr(r,e){await bt(r.debugger,`__pup_draw_stego__(${e})`);}async function wr(r){let e=new Promise(t=>r.ipc.once(Jo,t));await L(e,5e3,"stego tick");}var xt="pup",Qo="pup-frame",_r={standard:true,secure:true,bypassCSP:true,supportFetchAPI:true,corsEnabled:true,stream:true,codeCache:true};electron.protocol.registerSchemesAsPrivileged([{scheme:xt,privileges:_r},{scheme:Qo,privileges:_r}]);function br(){electron.protocol.handle(xt,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=fr(t,{width:o,height:n});return new Response(i,{headers:{"content-type":"text/html"}})});}function xr(r,e){let t=new URL(`${xt}://stego`);return t.searchParams.set("src",r.replace("http://","https://")),t.searchParams.set("w",String(e.width)),t.searchParams.set("h",String(e.height)),t.toString()}var we=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 Be="libvpx-vp9";async function K(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[c,d]of Object.entries(r.options??{}))t.setOption(c,d);nodeAv.FFmpegError.throwIfError(await t.open2(r.codec,null),e);o.move();return t}catch(i){var s=i,a=true;}finally{x(n,s,a);}}function ie(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 a=s,c=true;}finally{x(i,a,c);}}function M(){let r=new nodeAv.Packet;return r.alloc(),r}async function _e(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 se=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=ie(e,t,nodeAv.AV_PIX_FMT_BGRA),this.dst=ie(e,t,nodeAv.AV_PIX_FMT_YUVA420P),this.pkt=M();}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 yn={[constants.AV_SAMPLE_FMT_FLT]:"flt",[constants.AV_SAMPLE_FMT_FLTP]:"fltp"},qe=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=M(),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(a){var c=a,d=true;}finally{x(s,c,d);}}setInputRate(e){var f=[];try{this._graph?.[Symbol.dispose]();this._inRate=e;let t=_(f,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 a=o.createFilter(s,"sink");if(!a)throw new Error("Failed to create abuffersink");let c=yn[this._outFmt]??"flt";let d=`aformat=sample_fmts=${c}: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:a,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=a;}catch(m){var w=m,b=true;}finally{x(f,w,b);}}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(a){var c=a,d=true;}finally{x(s,c,d);}}async flush(e){this._bufSrc&&(await this._bufSrc.buffersrcAddFrame(null),await this.drain(e)),await this._ctx.sendFrame(null),await this.drainCodec(e);}[Symbol.dispose](){this._pkt.free(),this._filterFrame.free(),this._graph?.[Symbol.dispose](),this._ctx.freeContext();}async drain(e){for(;;){let t=await this._bufSink.buffersinkGetFrame(this._filterFrame);if(t===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 _e(this._ctx,this._pkt,this._stream,e)}};function Y(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 X=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]);}},N=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 J=Buffer.from([0,0,0,1]);var Pt=16;var Et=23,be=32,xe=33,Xe=34,Fr=39;function kr(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 St(r,e,t){let o=(r&63)<<1|e>>5&1,n=(e&31)<<3|t&7;return [o,n]}function W(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 c=n+2;c<r.length-2;c++)if(r[c]===0&&r[c+1]===0&&(r[c+2]===1||c+3<r.length&&r[c+2]===0&&r[c+3]===1)){i=c;break}let{type:s,layerId:a}=kr(r[n],r[n+1]);e.push({type:s,layerId:a,data:r.subarray(n,i)}),t=i;}return e}function Ct(r,e){let t=Buffer.from(r),{type:o,temporalId:n}=kr(t[0],t[1]),[i,s]=St(o,e,n);return t[0]=i,t[1]=s,t}function $(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 ae(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 vn=48,Ir=24,Pn=2,En=10,At=0,Sn=1;function Tr(r,e,t){let o=e>>3,n=1<<7-(e&7),i=r[o]??0;r[o]=t?i|n:i&~n;}function Rr(r,e){let t=$(r);return Tr(t,e+Pn,0),Tr(t,e+En,1),ae(t)}function Ye(r){let e=W(r);if(e.length===0)return r;let t=[];for(let o of e){let n=o.data;o.type===be?n=Rr(o.data,vn):o.type===xe&&(n=Rr(o.data,Ir)),t.push(J,n);}return Buffer.concat(t)}function Cn(r,e,t){let o=$(r),n=new N(o),i=new X;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 ae(Y(i.bits))}function An(r,e,t,o){let n=$(r),i=new N(n),s=new X;for(let a=0;a<e;a++)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 ae(Y(s.bits))}function Mr(r){let e=Ir+96;return Cn(r,e,1)}function Br(r){return An(r,16,1,1)}function Fn(r){let e=r.readUe();return e&1?e+1>>1:-(e>>1)}function kn(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 Tn(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>=Pt&&e<=Et;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))):kn(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===Sn||n===At)&&(r.read(1)&&(r.readUe(),n===At&&r.readUe()),n===At&&r.read(1),t.cabacInitPresent&&r.read(1),r.readUe()),Fn(r),t.ppsHasLoopFilterAcrossSlicesFlag&&r.read(1),r.pos}function Or(r,e,t){let o=$(r),n=new N(o),i=new N(o),s=Tn(i,e,t),a=s%8===0?8:8-s%8,c=(s+a)/8,d=new X;for(let u=0;u<16;u++)d.bits.push(n.read(1));for(d.bits.push(n.read(1)),e>=Pt&&e<=Et&&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 ae(Buffer.concat([Y(d.bits),o.subarray(c)]))}function Rn(r){let e=new N($(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 In(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 Mn(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 Nr(r,e,t){let o=Rn(r);if(!o)return r;let n=new X;return In(n,o),Mn(n,o,e,t),n.bits.push(1),n.align(0),ae(Y(n.bits))}function Dr(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 a=new Uint32Array(t.buffer,t.byteOffset,s);for(let c=0;c<s;c++)e[c]=a[c]>>>24;}else for(let a=0;a<i;a++){let c=a*o+3,d=a*n;for(let p=0;p<n;p++)e[d+p]=t[c+p*4];}}function Bn(r,e){return r===xe?Mr(e):r===Xe?Br(e):e}function Lr(r){let{baseExtradata:e,alphaExtradata:t}=r,o=W(e),n=W(t),i=new Map;for(let c of n){if(c.type===be)continue;let d=i.get(c.type)??[];d.push(c),i.set(c.type,d);}let s=[],a=new Set;for(let c of o){let d=c.type===be?Nr(c.data,r.width,r.height):c.data;if(s.push(J,d),!a.has(c.type)){a.add(c.type);for(let p of i.get(c.type)??[]){let u=Bn(c.type,p.data);s.push(J,Ct(u,1));}}}return s.push(On()),Buffer.concat(s)}function On(){let[t,o]=St(Fr,0,1),n=[],i=(s,a)=>{for(let c=a-1;c>=0;c--)n.push(s>>c&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([J,Buffer.from([t,o]),Buffer.from([165,4]),Y(n),Buffer.from([128])])}function Vr(r,e,t){let o=[];for(let n of r)o.push(J,n.data);for(let n of e)if(n.type<be){let i=Or(n.data,n.type,t);o.push(J,Ct(i,1));}return Buffer.concat(o)}var Je=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:a}=this._s,c=Vr(W(e.data),W(t.data),a);n.data=Ye(c),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 Q(r,e,t){throw new Error(`hevc_alpha: NVENC SPS/PPS unsupported: ${r}=${e}, expected ${t}`)}function Vn(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 Un(r){let e=new N(r);e.read(16),e.read(4);let t=e.read(3);t!==0&&Q("sps_max_sub_layers_minus1",t,"0"),e.read(1),Vn(e,t),e.readUe();let o=e.readUe();o===3&&Q("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 f=0;f<s;f++)e.readUe(),e.readUe(),e.readUe();e.readUe(),e.readUe(),e.readUe(),e.readUe(),e.readUe(),e.readUe(),e.read(1)&&Q("scaling_list_enabled_flag",1,"0"),e.read(1);let a=e.read(1)===1;e.read(1)&&Q("pcm_enabled_flag",1,"0");let c=e.readUe();c>1&&Q("num_short_term_ref_pic_sets",c,"\u22641");let d=0;if(c===1){let f=e.readUe(),m=e.readUe();d=f+m;for(let w=0;w<f;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&&Q("long_term_ref_pics_present_flag",1,"0");let u=e.read(1)===1;return {log2MaxPocLsb:n,saoEnabled:a,numShortTermRefPicSets:c,numDeltaPocsSet0:d,longTermRefPicsPresent:p,spsTemporalMvpEnabled:u}}function Hn(r){let e=new N(r);e.read(16),e.readUe(),e.readUe(),e.read(1),e.read(1);let t=e.read(3);t!==0&&Q("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)&&Q("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 Ur(r){let e=W(r),t=e.find(s=>s.type===xe),o=e.find(s=>s.type===Xe);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=Un($(t.data)),i=Hn($(o.data));return {...n,...i}}var Qe=class r{_s;_mux;_pts=0n;constructor(e){this._s=e,this._mux=new Je({baseCtx:e.baseCtx,alphaCtx:e.alphaCtx,basePkt:e.basePkt,alphaPkt:e.alphaPkt,stream:e.stream,hevcCfg:e.hevcCfg});}static async create(e){var k=[];try{let{width:t,height:o,fps:n,bitrate:i,muxer:s}=e;let a=nodeAv.Codec.findEncoderByName(constants.FF_ENCODER_HEVC_NVENC);if(!a)throw new Error("hevc_nvenc encoder not found");let c={preset:"p4",bf:"0",tier:"main"};let d={codec:a,width:t,height:o,fps:n,bitrate:i,options:c};let p=_(k,new DisposableStack);let u=p.use(await K({...d,pixelFormat:constants.AV_PIX_FMT_BGRA},"nvenc.base.open2"));let f=p.use(await K({...d,pixelFormat:constants.AV_PIX_FMT_YUV420P},"nvenc.alpha.open2"));if(!u.extraData||!f.extraData)throw new Error("nvenc: codec extradata missing");let m=Ur(u.extraData);let w=s.addStream(u,"hvc1");let b=Lr({baseExtradata:u.extraData,alphaExtradata:f.extraData,width:t,height:o});w.codecpar.extradata=Ye(b);let g=t*o;let E=(t+1>>1)*(o+1>>1);let v=Buffer.alloc(g+E*2);v.fill(128,g);let P=p.use(M());let y=p.use(M());let S=p.use(ie(t,o,constants.AV_PIX_FMT_YUV420P));p.move();return new r({baseCtx:u,alphaCtx:f,basePkt:P,alphaPkt:y,stream:w,alphaSwFrame:S,alphaBuf:v,hevcCfg:m})}catch(T){var B=T,V=true;}finally{x(k,B,V);}}async encode(e,t){let{baseCtx:o,alphaCtx:n,alphaSwFrame:i,alphaBuf:s}=this._s,a=this._pts++;Dr(e,s),nodeAv.FFmpegError.throwIfError(i.makeWritable(),"alphaSw.makeWritable"),nodeAv.FFmpegError.throwIfError(i.fromBuffer(s),"alphaSw.fromBuffer"),i.pts=a,i.duration=1n,e.pts=a,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 Ne=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 f=[];try{let{codecName:t,codecTag:o,codecOpts:n,muxer:i,...s}=e;let a=nodeAv.Codec.findEncoderByName(t);if(!a)throw new Error(`Video encoder not found: ${t}`);let c=_(f,new DisposableStack);let d=c.use(await K({codec:a,...s,codecTag:o,options:n},"videoCtx.open2"));let p=c.use(M());let u=i.addStream(d,o);c.move();return new r(d,p,u)}catch(m){var w=m,b=true;}finally{x(f,w,b);}}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 _e(this._ctx,this._pkt,this._stream,e)}};var Ze=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:a}=e;let c=i.getEncoderCodec("hevc");if(!c)throw new Error("hevc_videotoolbox encoder not found");let d=await K({codec:c,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(M());let f=a.addStream(d,"hvc1");p.move();return new r(d,u,f)}catch(w){var b=w,g=true;}finally{x(m,b,g);}}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 _e(this._ctx,this._pkt,this._stream,e)}};var et="[Encoder]",si={deadline:"realtime","cpu-used":"8","row-mt":"1",threads:"4"},ai={outSampleRate:44100,outSampleFmt:constants.AV_SAMPLE_FMT_FLTP,codecName:constants.FF_ENCODER_AAC},ci={outSampleRate:48e3,outSampleFmt:constants.AV_SAMPLE_FMT_FLT,codecName:constants.FF_ENCODER_LIBOPUS};async function $r(r,e){let{width:t,height:o,fps:n,disableHwCodec:i,sharedHw:s}=r;return di({width:t,height:o,fps:n,disableHwCodec:i,sharedHw:s},e)}async function Gr(r,e){let{width:t,height:o,fps:n}=r;return {video:await Ne.create({width:t,height:o,fps:n,codecName:Be,codecOpts:si,bitrate:4e6,pixelFormat:constants.AV_PIX_FMT_YUVA420P,muxer:e}),codec:await se.create(t,o),ownsHw:false}}function zr(r,e){let t=r==="mp4"?ai:ci;return qe.create({...t,globalHeader:true,bitrate:128e3,muxer:e})}async function di(r,e){var m=[];try{let{width:t,height:o,fps:n,bitrate:i=8e6,disableHwCodec:s=!1,sharedHw:a}=r;let c=a??(s?void 0:api.HardwareContext.auto()??void 0);let d=!a&&!!c;try{if(c?.deviceTypeName===constants.FF_HWDEVICE_TYPE_VIDEOTOOLBOX&&c.getEncoderCodec("hevc"))return h.debug(et,"using VideoToolbox HEVC alpha encoder"),{hwVideo:await Ze.create({width:t,height:o,fps:n,hw:c,bitrate:i,muxer:e}),hw:c,ownsHw:d};if(c?.deviceTypeName===constants.FF_HWDEVICE_TYPE_CUDA&&c.getEncoderCodec("hevc"))return h.debug(et,"using NVENC dual-layer HEVC alpha encoder"),{hwVideo:await Qe.create({width:t,height:o,fps:n,hw:c,bitrate:i,muxer:e}),hw:c,ownsHw:d}}catch(E){h.warn(et,"Hardware codec session limits reached, use software encoder",E),d&&c?.dispose();}h.debug(et,"using software libx265 HEVC alpha encoder");let p=_(m,new DisposableStack);let u=p.use(await Ne.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 f=p.use(await se.create(t,o));p.move();return {video:u,codec:f,ownsHw:!1}}catch(w){var b=w,g=true;}finally{x(m,b,g);}}var ye=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 Le=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 ye(e.outFile));let n=e.kind==="mp4"?await $r(e,o):await Gr(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 zr(e.kind,o):void 0;i&&t.use(i);await o.open();t.move();return new r({muxer:o,...n,audio:i,opts:e})}catch(a){var c=a,d=true;}finally{var p=x(s,c,d);p&&await p;}}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:a}=this._s;t?.[Symbol.dispose](),o?.[Symbol.dispose](),n?.[Symbol.dispose](),i?.[Symbol.dispose](),await e[Symbol.asyncDispose](),a&&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 Kr=5e3,gi=3e3,ve=class r{_s;_disposed=false;constructor(e){this._s=e;}static async create(e){var w=[];try{let{width:t,height:o,fps:n,outFiles:i,withAudio:s=!1,disableHwCodec:a=!1}=e;if(i.length===0)throw new Error("outFiles must contain at least one path");let c=i.map(P=>Le.kindFromPath(P));let d=!a&&c.includes("mp4");let p=_(w,new AsyncDisposableStack,!0);let u=d?api.HardwareContext.auto()??void 0:void 0;u&&p.use(u);let f=u?.deviceTypeName===constants.FF_HWDEVICE_TYPE_VIDEOTOOLBOX||u?.deviceTypeName===constants.FF_HWDEVICE_TYPE_CUDA;let m=[];for(let P=0;P<i.length;P++){let y=await Le.create({outFile:i[P],kind:c[P],width:t,height:o,fps:n,withAudio:s,disableHwCodec:a,sharedHw:c[P]==="mp4"&&f?u:void 0});p.use(y),m.push(y);}p.move();return new r({sinks:m,sharedHw:u,limiter:new we(1),outFiles:i,opts:e})}catch(b){var g=b,E=true;}finally{var v=x(w,g,E);v&&await v;}}setupAudio(e){for(let t of this._s.sinks)t.setInputRate(e);}async encodeBGRA(e){await this.enqueue("encodeBGRA",async()=>{var o=[];try{let t=_(o,this.bgraFrame(e));await Promise.all(this._s.sinks.map(a=>a.encodeBGRA(t)));}catch(n){var i=n,s=true;}finally{x(o,i,s);}});}async encodePNG(e){await this.enqueue("encodePNG",async()=>{let{width:t,height:o}=this._s.opts;this._s.pngCodec??=await se.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.enqueue("encodeAudio",async()=>{for(let t of this._s.sinks)await t.encodeAudio(e);});}enqueue(e,t){return L(this._s.limiter.schedule(t),gi,e)}async finish(){try{await L(this._s.limiter.drain(),Kr,"encoder drain (outputs incomplete \u2014 native encode wedged)");for(let e of this._s.sinks)await e.flush();}finally{await this.free();}return this._s.outFiles}async[Symbol.asyncDispose](){this._disposed||(await L(this._s.limiter.drain(),Kr,"encoder drain (outputs incomplete \u2014 native encode wedged)"),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(ie(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,a=true;}finally{x(n,s,a);}}};function tt(r,e){return r.width===e.width&&r.height===e.height}function bi(r,e){return r.readUInt8(e)>>3|r.readUInt8(e+1)>>3<<5|r.readUInt8(e+2)>>3<<10|r.readUInt8(e+3)>>3<<15}function xi(r,e,t){let o=Math.max(1,Math.floor(e/32)),n=Math.max(1,Math.floor(t/32)),i=new Map,s=new Map,a=0,c=0;for(let d=0;d<t;d+=n)for(let p=0;p<e;p+=o){let u=(d*e+p)*4,f=bi(r,u),m=(i.get(f)??0)+1;i.set(f,m),s.has(f)||s.set(f,u),m>c&&(c=m,a=f);}return s.get(a)??0}function yi(r,e,t){let o=xi(r,e,t),n=r.readUInt8(o),i=r.readUInt8(o+1),s=r.readUInt8(o+2),a=r.readUInt8(o+3),c=0;for(let d=0;d<t;d+=4){let p=d>>2&3;for(let u=p;u<e;u+=4){let f=(d*e+u)*4;if((Math.abs(r.readUInt8(f)-n)>8||Math.abs(r.readUInt8(f+1)-i)>8||Math.abs(r.readUInt8(f+2)-s)>8||Math.abs(r.readUInt8(f+3)-a)>8)&&(c++,c>=16))return false}}return true}var Pe=class{_width;_height;_total=0;_blank=0;constructor(e,t){this._width=e,this._height=t;}sample(e){this._total++,yi(e,this._width,this._height)&&this._blank++;}finalize(){return this._total>0?this._blank/this._total:0}};var Ee=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 c of this._bursts){e+=c,o=Math.max(o,c);let d=Math.max(0,c-1);t+=(d/this._fps)**2;}let n=this._actual+e,i=n>0?e/n:0,s=Math.min(1,t),a=1-(1-i)*(1-s);return {global:i,local:s,jank:a,expected:n,actual:this._actual,maxBurst:o}}};var qr="audio-meta",Xr="audio-chunk";function Yr({wc:r,encoder:e,getVideoTimeMs:t,onError:o}){let n=async(s,a)=>{let c=a.sampleRate;if(!Number.isFinite(c)||c<=0||c>192e3)return;let d=t();e.setupAudio(c);let p=Math.ceil(d*c/1e3);if(!(p<=0))try{await e.encodeAudio(Buffer.alloc(p*2*4));}catch(u){o(u);}},i=async(s,a)=>{let c=ArrayBuffer.isView(a)?a.byteLength:0;if(!(c===0||c>384e3||c%8!==0))try{await e.encodeAudio(a);}catch(d){o(d);}};return r.ipc.on(qr,n),r.ipc.on(Xr,i),()=>{r.ipc.removeListener(qr,n),r.ipc.removeListener(Xr,i);}}var Se=class{constructor(e){this._s=e;let t=path.dirname(e.outFiles[0]??".");this._pending=e.marks.map((o,n)=>({ms:o*1e3,index:n,path:path.join(t,`screenshot_${n}.png`)})).sort((o,n)=>o.ms-n.ms);}_s;_pending;_done=new Map;_writes=[];capture(e,t){for(;this._pending.length>0&&this._pending[0].ms<=e;)this.take(this._pending.shift(),t);}async finish(e){for(;e&&this._pending.length>0;)this.take(this._pending.shift(),e);return await Promise.all(this._writes),[...this._done.entries()].sort((t,o)=>t[0]-o[0]).map(([,t])=>t)}take(e,t){let{width:o,height:n}=this._s,i=electron.nativeImage.createFromBitmap(t,{width:o,height:n}).toPNG();this._done.set(e.index,e.path),this._writes.push(promises.writeFile(e.path,i));}};function rt({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 a=[r(...i)];return t&&a.push(promises$1.setTimeout(t).then(()=>{throw n})),await Promise.race(a)}catch(a){if(o?.throwIfAborted(),s++,s>=e)throw a;await Ge(2**s*100+Math.random()*100);}}}}var Jr="--pup-world=",Qr="--pup-audio";var ot=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 nt="[Network]",eo=new Map([["jssz-boss.hdslb.com","jssz-boss.bilibili.co"],["boss.hdslb.com","shjd-boss.bilibili.co"],["upos-sz-mirrorcos.bilivideo.com","jssz-inner-boss.bilibili.co"]]),Ai=new Set(eo.values()),Fi=["pup:","pup-frame:","file:","data:","blob:","chrome-extension:","devtools:"];function ki(r){for(let e of Fi)if(r.startsWith(e))return true;return false}function Ti(r){return r.startsWith("http")&&Ai.has(new url.URL(r).hostname)}function Ce(r){if(!r.startsWith("http"))return r;let e=new url.URL(r),t=eo.get(e.hostname);return t?(e.hostname=t,e.protocol="http:",e.toString()):r}function to({source:r,window:e,useInnerProxy:t,stubMedia:o}){let n=e.webContents.session.webRequest,i=new we(256),s=new Map;async function a(d,p){let u=new ot;s.set(d,u),await u.wait({timeout:5e3,onTimeout:p}).finally(()=>s.delete(d));}function c(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 f=t?Ce(u):u;i.schedule(()=>{let m=`${e.id}_${d.id}`;return h.debug(nt,"start:",{key:m,url:u,proxied:f,method:d.method,source:r,stats:i.stats}),p(f===u?{cancel:false}:{cancel:false,redirectURL:f}),ki(u)?Promise.resolve():a(m,()=>{h.debug(nt,"maybe timeout:",{key:m,url:u,proxied:f,method:d.method,source:r});})});}),n.onHeadersReceived(({url:d,responseHeaders:p},u)=>{if(delete p?.["x-frame-options"],delete p?.["X-Frame-Options"],delete p?.["content-security-policy"],delete p?.["Content-Security-Policy"],t&&Ti(d)){u({cancel:false,responseHeaders:{...p,"access-control-allow-origin":["*"]}});return}u({cancel:false,responseHeaders:p});}),n.onCompleted(d=>{let p=`${e.id}_${d.id}`;c(p),h.debug(nt,"completed:",{key:p,url:d.url,method:d.method,statusCode:d.statusCode,source:r});}),n.onErrorOccurred(d=>{let p=`${e.id}_${d.id}`;c(p);let{url:u,method:f,error:m,resourceType:w}=d;h.debug(nt,"error:",{key:p,url:u,method:f,error:m,resourceType:w,source:r});});}function Ft(r){let e=r.webContents.session.webRequest;e.onBeforeRequest(null),e.onHeadersReceived(null),e.onCompleted(null),e.onErrorOccurred(null);}var Z="[Window]",ro=new Error("window timeout"),Ii=["Mixed Content: The page at"];function Mi({source:r,win:e,action:t,timeoutMs:o,tolerant:n,signal:i}){return new Promise((s,a)=>{let c=false,d=setTimeout(()=>p(n&&c?void 0:ro),o),p=u=>{clearTimeout(d),u?a(u):s();};i?.throwIfAborted(),i?.addEventListener("abort",()=>p(i.reason),{once:true}),e.webContents.once("dom-ready",()=>{h.debug(Z,"dom-ready:",{source:r}),c=true;}),e.webContents.once("did-stop-loading",()=>{h.debug(Z,"did-stop-loading:",{source:r}),p();}),e.webContents.once("did-fail-load",(u,f,m,w)=>{let b=`did-fail-load: ${JSON.stringify({url:w,source:r,code:f,desc:m})}`;h.error(Z,b),p(new Error(b));}),e.webContents.once("preload-error",(u,f,m)=>{h.error(Z,`preload-error: ${JSON.stringify({source:r,message:m.message})}`),p(m);}),e.webContents.once("render-process-gone",(u,{exitCode:f,reason:m})=>{let w=`render-process-gone: ${JSON.stringify({source:r,exitCode:f,reason:m})}`;h.error(Z,w),p(new Error(w));}),t();})}function Ae(r){return new Promise(e=>{Ft(r);let t=setTimeout(()=>{try{h.warn(Z,"force close"),r.destroy();}catch{}o();},1e3),o=()=>{clearTimeout(t),e();};r.webContents.stopPainting(),r.webContents.debugger.detach(),r.once("closed",o),r.close();})}var Bi={shoot:path.join(fe,"dist","runtime","shoot.global.js"),render:path.join(fe,"dist","runtime","render.global.js"),audio:path.join(fe,"dist","runtime","audio.global.js")};function Oi(r){let e=r.deterministic?"shoot":r.withAudio?"audio":"render";return Bi[e]}async function oo({source:r,renderer:e,tolerant:t,signal:o,onCreated:n}){let{width:i,height:s,useInnerProxy:a}=e,c=a?Ce(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,nodeIntegrationInSubFrames:true,sandbox:false,webSecurity:!e.disableWebSecurity,allowRunningInsecureContent:true,experimentalFeatures:true,preload:Jt,additionalArguments:[`${Jr}${Oi(e)}`,...e.withAudio?[Qr]:[]]}});to({source:r,window:d,useInnerProxy:a,stubMedia:e.deterministic}),d.webContents.debugger.attach("1.3"),await n?.(d),d.webContents.on("console-message",({level:p,message:u,lineNumber:f,sourceId:m})=>{if(p==="warning"&&Ii.find(b=>u.startsWith(b)))return;let w=[Z,"console:",{message:u,lineNumber:f,sourceId:m,source:r}];p==="error"?h.error(...w):h.debug(...w),e.onConsole(p,u);});try{let p=xr(c,{width:i,height:s});await Mi({source:r,win:d,action:()=>d.loadURL(p),timeoutMs:e.windowTimeout*1e3,tolerant:t,signal:o});}catch(p){throw await Ae(d),p}return d}var Ni=rt({fn:oo,maxAttempts:2});async function it({source:r,renderer:e,onCreated:t,signal:o}){o?.throwIfAborted();let n,i;try{n=await Ni({source:r,renderer:e,signal:o});}catch(a){i=a;}let s=()=>oo({source:r,renderer:e,onCreated:t,signal:o,tolerant:e.windowTolerant});if(e.windowTolerant&&i===ro)return h.warn(Z,`warmup timeout: ${r}, falling back to dom-ready`),await s();if(i){let{message:a,stack:c}=i;throw new Error(`failed to warmup window: ${JSON.stringify({source:r,message:a,stack:c})}`)}n&&(n.webContents.removeAllListeners(),Ft(n),await Ge(2e3),await Ae(n));try{return await s()}catch(a){let{message:c,stack:d}=a;throw new Error(`failed to load window: ${JSON.stringify({source:r,message:c,stack:d})}`)}}var no="[Render]";async function io(r){var G=[];try{let{source:e,fps:t,width:o,height:n,duration:i,withAudio:s,outFiles:a,disableHwCodec:c,signal:d,onProgress:p}=r;let u=_(G,await ve.create({width:o,height:n,fps:t,outFiles:a,withAudio:s,disableHwCodec:c}),!0);let f=new Se({marks:r.screenshots,width:o,height:n,outFiles:a});let m=Math.ceil(t*i);let w=1e3/t;let b={width:o,height:n+1};let g=0;let E;let v=[];let P;let y=0;let S;let k;let T;let B;let V=new Pe(o,n);let U=new Ee(t);let ce;let q=R=>{g++,V.sample(R),u.encodeBGRA(R).catch(F=>S??=F);};let C=(R,F,re)=>{if(S??=d?.reason,S){T?.(S);return}let O=re.getSize();if(!tt(O,b)){Me(I.webContents,b);return}let ue=re.toBitmap(),pe=Ke(ue,O);if(pe===void 0){S??=new Error(`no timestamp @ ${g}`);return}if(P!==void 0&&pe-P<w*.8)return;let ke=Buffer.from(ue.buffer,ue.byteOffset,n*o*4);if(E=ke,f.capture(pe,ke),P===void 0)q(ke),U.wrote();else {let Nt=pe-P;if(Nt<=w*1.2)q(ke),U.wrote();else {let Dt=Math.round(Nt/w);U.dropped(Dt-1),U.wrote();for(let Lt=0;Lt<Dt&&g<m;Lt++)q(ke);}}P=pe;let Ot=Math.floor(g/m*100);Ot!==y&&(y=Ot,p(y));let Eo=i*1e3;(pe>=Eo-w*.5||g>=m)&&k?.();};let I=await it({source:e,renderer:r,signal:d,onCreated:R=>{s&&(ce=Yr({wc:R.webContents,encoder:u,getVideoTimeMs:()=>P??0,onError:F=>S??=F}));}});let de=I.webContents.debugger;try{I.webContents.stopPainting(),I.webContents.setFrameRate(t),I.webContents.on("paint",C),I.webContents.startPainting(),d?.throwIfAborted(),d?.addEventListener("abort",()=>T?.(d.reason),{once:!0}),await lr(de),await new Promise((R,F)=>{[k,T]=[R,F];let re=0,O=0;B=ze(async()=>{if(g!==re){re=g,O=0;return}O++,O>=t?T?.(new Error(`renderer stalled for ${Math.round(O*1e3/t)}ms @ ${g}`)):(O===1||O===Math.floor(t/2))&&await Me(I.webContents,b);},1e3/t);});}finally{B?.(),I.webContents.off("paint",C),await Ae(I),ce?.(),await u.finish(),v=await f.finish(E);}if(S||g===0)throw S??new Error("no frames captured");else {let R=V.finalize();R>=.5&&h.warn(no,`${e} blank-frame ratio ${Math.round(R*100)}% \u2014 possible white/blank screen`);let{jank:F}=U.finalize();return F>=.25&&h.warn(no,`${e} jank score ${F.toFixed(2)} \u2014 dropped frames`),{written:g,outFiles:a,blank:R,screenshots:v,jank:F}}}catch(He){var H=He,D=true;}finally{var Fe=x(G,H,D);Fe&&await Fe;}}var Di="[Rerender]",so=3;async function ao(r,e){let t;for(let o=1;o<=so;o++)try{return await e()}catch(n){r.throwIfAborted(),t=n,h.warn(Di,`retry ${o}/${so}: ${n.message}`);}throw t}var Li="[Video]";async function co({frame:r,timestampMs:e,signal:t}){if(r?.url){t?.throwIfAborted();try{await ur(r.executeJavaScript(`window.__pup_video__&&(async()=>{await __pup_video__.ready();await __pup_video__.advance(${e})})()`),t);}catch(o){t?.throwIfAborted(),h.warn(Li,`advance skipped: ${o instanceof Error?o.message:String(o)}`);}}}var uo="__pup_tick__";async function po(r){let{frame:e,timestampMs:t}=r;if(!e)return;let o=`window.${uo}&&window.${uo}.process(${t})`,n=e.executeJavaScript(o);await Promise.all([L(n,5e3,"tick.executeJavaScript"),co(r)]);}var Ui="8000000";function st(r,e){let t={signal:e,options:{rw_timeout:Ui}};return api.Demuxer.open(r,t)}var zi="[Decode]";async function*mo({src:r,meta:e,signal:t,fromIdx:o}){var B=[];try{let n=_(B,await st(r,t),!0);let i;if(o!==void 0&&o>1){let C=e.leadGap+(o-1)/e.fps;await n.seek(C,-1,constants.AVSEEK_FLAG_BACKWARD)===0?i=o:h.warn(zi,`seek to frame ${o} failed, decoding from head`);}let s=n.streams?.find(C=>C.codecpar.codecType===constants.AVMEDIA_TYPE_VIDEO);if(!s)throw new Error("no video stream");let a=_(B,await api.Decoder.create(s,{signal:t,threadCount:0}));let{frameWidth:c,frameHeight:d,width:p,height:u,fps:f}=e;let m=c!==p||d!==u?`scale=${c}:${d},`:"";let w=C=>Math.ceil(C/16)*16;let b=m===""&&(c%16!==0||d%16!==0)?`pad=${w(c)}:${w(d)}:0:0,`:"";let g=_(B,api.FilterAPI.create(`fps=${f},${m}${b}format=rgba`,{signal:t}));let E=0;let v=0;for await(var P of g.frames(a.frames(n.packets(s.index)))){var y=[];try{let C=_(y,P);if(C){if(i!==void 0){let I=C.timeBase.num/C.timeBase.den,de=C.bestEffortTimestamp??C.pts;if(de===void 0)continue;let G=Math.round((Number(de)*I-e.leadGap)*e.fps)+1;if(G<v||(v=G,G<i))continue;E=G;}else E++;yield {idx:E,buf:ji(C,c,d)};}}catch(S){var k=S,T=!0;}finally{x(y,k,T);}}}catch(V){var U=V,ce=true;}finally{var q=x(B,U,ce);q&&await q;}}function ji(r,e,t){let o=e*4,n=r.linesize[0],i=r.data[0];if(n===o&&r.height===t)return Buffer.from(i.subarray(0,o*t));let s=Buffer.allocUnsafe(o*t);for(let a=0;a<t;a++)i.copy(s,a*o,a*n,a*n+o);return s}var Ki="[DecodeSession]",fo=4,qi=16,Xi=256*1024*1024,Yi=3,at=class{constructor(e,t){this.meta=e;this._src=t;this._leadFrames=Math.round(e.leadGap*e.fps),this._keepCount=Math.max(qi,Math.floor(Xi/(e.frameWidth*e.frameHeight*4))),this._seekJump=Math.max(2*e.fps,fo*2),this._pumpDone=this.pump();}meta;_src;_buf=new Map;_ready=0;_want=1;_done=false;_closed=false;_gen=0;_ctrl=new AbortController;_resume;_restart;_waiters=new Set;_leadFrames;_keepCount;_seekJump;_seekTo;_passFrom=1;_pumpDone;async getFrame(e){let t=e<=this._leadFrames?this._leadFrames+1:e;for(;;){let o=this._buf.get(t);if(o)return o;if(this._closed)return;if(this._done&&t>this._ready)return Buffer.alloc(0);if(this._want=Math.max(this._want,t),this.mustRepoint(t)?this.requestRestart(t):this.wake(),await this.waitEvent(t)==="cancel")return}}mustRepoint(e){if(this._seekTo!==void 0)return e<this._seekTo;let t=this._passFrom;return e<t||e<=this._ready||e>Math.max(this._ready,t)+this._seekJump}async close(){this._closed=true,this._done=true,this._ctrl.abort(),this.requestRestart(),this._buf.clear(),await this._pumpDone;}wake(){let e=this._resume;this._resume=void 0,e?.();}waitEvent(e){return new Promise(t=>this._waiters.add({idx:e,resolve:t}))}signal(){for(let e of this._waiters)e.resolve("wake");this._waiters.clear();}requestRestart(e){if(this._seekTo=e,this._gen++,e!==void 0)for(let o of this._waiters)o.idx>e+this._keepCount&&(this._waiters.delete(o),o.resolve("cancel"));let t=this._restart;this._restart=void 0,t?.(),this.wake(),this.signal();}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,h.warn(Ki,`[${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<=Yi||(e=0,this._done=true,this.signal(),await this.untilRestart());}}async decodePass(e){for(let t=0;t<2;t++){let o=this._seekTo;this._seekTo=void 0,this._passFrom=o??1,this._want=o??1;let n=o===void 0?void 0:Math.max(1,o-this._leadFrames),i=mo({src:this._src,meta:this.meta,signal:this._ctrl.signal,fromIdx:n}),s=0;for await(let{idx:a,buf:c}of i){if(this._closed||this._gen!==e)return;let d=this._leadFrames+a;for(;!this._closed&&this._gen===e&&d>this._want+fo;)await this.pause();if(this._closed||this._gen!==e)return;this._buf.set(d,c),this._ready=d,this.evict(),this.signal(),s++;}if(!(t===0&&s===0&&n!==void 0&&!this._closed&&this._gen===e))return}}pause(){return new Promise(e=>{this._resume=e;})}untilRestart(){return new Promise(e=>{this._restart=e;})}evict(){let e=this._ready-this._keepCount;for(let t of this._buf.keys())t<e&&this._buf.delete(t);}};async function lo(r){var E=[];try{let e=_(E,await st(r),!0);let t=e.streams?.find(k=>k.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=_(E,await api.Decoder.create(t,{threadCount:1}));let s=0;e:for await(var f of e.packets(t.index)){var m=[];try{let k=_(m,f);try{for await(var a of i.frames(k)){var c=[];try{let T=_(c,a);if(T?.decodeErrorFlags===0){s=Math.max(0,Number(T.pts)*n);break e}}catch(d){var p=d,u=!0;}finally{x(c,p,u);}}}catch{}}catch(w){var b=w,g=!0;}finally{x(m,b,g);}}return {width:t.codecpar.width,height:t.codecpar.height,duration:o,leadGap:s}}catch(v){var P=v,y=true;}finally{var S=x(E,P,y);S&&await S;}}async function wo({width:r,height:e,duration:t}){let o=nodeAv.Codec.findEncoderByName(Be);if(!o)throw new Error(`stub: encoder not found: ${Be}`);let n=path.join(os.tmpdir(),`pup_stub_${crypto.randomBytes(8).toString("hex")}.webm`);try{{var i=[];try{let p=_(i,new ye(n),!0);let u=_(i,await K({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 f=p.addStream(u);await p.open();let m=_(i,new Mt(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 b=_(i,M());for(;;){let g=await u.receivePacket(b);if(g===constants.AVERROR_EAGAIN||g===constants.AVERROR_EOF)break;nodeAv.FFmpegError.throwIfError(g,"stubCtx.receivePacket"),b.streamIndex=f.index,b.duration=w,b.rescaleTs(u.timeBase,f.timeBase),await p.writePacket(b),b.unref();}}catch(s){var a=s,c=!0;}finally{var d=x(i,a,c);d&&await d;}}return await promises.readFile(n)}finally{await promises.rm(n,{force:true});}}var Mt=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 ct=class{constructor(e){this._useInnerProxy=e;}_useInnerProxy;_sessions=new Map;_probes=new Map;_stubs=new Map;_opening=new Map;_closed=false;async open(e){if(this._closed)throw new Error("frame-server: closed");let t=ds(e),o=this._sessions.get(t);if(o)return o.refs++,o.session.meta;let n=this._opening.get(t);if(n){let s=await n,a=this._sessions.get(t);return a&&a.refs++,s}let i=this.openOnce(e,t);this._opening.set(t,i);try{return await i}finally{this._opening.delete(t);}}async openOnce(e,t){let o=this._useInnerProxy?Ce(e.src):e.src,n=await this.probeCached(o);if(this._closed)throw new Error("frame-server: closed");let i=n.width,s=n.height;if(e.dstW&&e.dstH&&e.fit!=="none"){let c=Math.min(1,Math.max(e.dstW/n.width,e.dstH/n.height));i=_o(n.width*c),s=_o(n.height*c);}let a={id:t,width:n.width,height:n.height,frameWidth:i,frameHeight:s,fps:e.fps,duration:n.duration,leadGap:n.leadGap};return this._sessions.set(t,{session:new at(a,o),refs:1}),a}stub(e){if(this._closed)throw new Error("frame-server: closed");let t=this._useInnerProxy?Ce(e):e,o=this._stubs.get(t);if(o)return o;let n=this.probeCached(t).then(i=>wo({width:i.width,height:i.height,duration:i.duration}));return n.catch(()=>this._stubs.delete(t)),this._stubs.set(t,n),n}async getFrame(e,t){let o=this._sessions.get(e);if(o)return o.session.getFrame(t)}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=rt({fn:lo})(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 ds(r){return crypto.createHash("sha1").update(`${r.src}|${r.fps}|${r.dstW??""}|${r.dstH??""}|${r.fit??""}`).digest("hex")}function _o(r){let e=Math.round(r);return Math.max(2,e-e%2)}var bo="[FrameProtocol]",xo="pup-frame",ee={"access-control-allow-origin":"*","access-control-allow-methods":"GET, OPTIONS","access-control-allow-headers":"*"};function yo(r){let e=new ct(r);return electron.protocol.handle(xo,async t=>{if(t.method==="OPTIONS")return new Response(null,{status:204,headers:ee});let o=new URL(t.url);h.debug(bo,`${t.method} ${o.hostname}${o.search}`);try{let n;switch(o.hostname){case "open":n=us(await e.open({src:o.searchParams.get("src")??"",fps:dt(o,"fps",30),dstW:dt(o,"w",0),dstH:dt(o,"h",0),fit:o.searchParams.get("fit")??void 0}));break;case "frame":n=ms(await e.getFrame(o.searchParams.get("id")??"",dt(o,"idx",1))??Buffer.alloc(0));break;case "stub":n=ps(await e.stub(o.searchParams.get("src")??""));break;case "close":await e.close(o.searchParams.get("id")??""),n=new Response(null,{status:204,headers:ee});break;default:n=new Response(`unknown action: ${o.hostname}`,{status:404,headers:ee});}return n}catch(n){let i=n instanceof Error?n.message:String(n);return h.error(bo,`${o.hostname} failed${o.search}: ${i}`),new Response(i,{status:500,headers:ee})}}),{[Symbol.asyncDispose]:async()=>{electron.protocol.unhandle(xo),await e.closeAll();}}}function us(r){return new Response(JSON.stringify(r),{headers:{...ee,"content-type":"application/json"}})}function ps(r){let e=new Uint8Array(r.byteLength);return e.set(r),new Response(e.buffer,{headers:{...ee,"content-type":"video/webm","cache-control":"no-store"}})}function ms(r){if(r.byteLength===0)return new Response(null,{status:410,headers:ee});let e=new Uint8Array(r.byteLength);return e.set(r),new Response(e.buffer,{headers:{...ee,"content-type":"application/octet-stream","cache-control":"no-store"}})}function dt(r,e,t){let o=r.searchParams.get(e),n=o?parseInt(o,10):NaN;return Number.isFinite(n)?n:t}var Ve="[Shoot]",fs=240;async function ls({win:r,fps:e,size:t,ms:o}){let n,i={width:t.width,height:t.height+1},s=Math.abs(1e3/e-o)<1;try{return await new Promise(a=>{let c=(u,f,m)=>{let w=m.getSize();if(!tt(w,i))return;let b=m.crop({x:0,y:i.height-2,width:he,height:2}),g=Ke(b.toBitmap(),{width:he,height:2});if(g===void 0||o-g>1)return;let E=m.toBitmap();r.webContents.off("paint",c),a({ts:g,pix:Buffer.from(E.buffer,E.byteOffset,t.height*t.width*4)});};r.webContents.on("paint",c);let d=s?e*10:e*5,p=Math.floor(s?e:e/2);n=ze(async u=>{u>=d?(h.warn(Ve,`paint timeout @ ${o}`),r.webContents.off("paint",c),a(void 0)):u%p===0&&await Me(r.webContents,i);},1e3/e);})}finally{n?.();}}async function vo(r){var C=[];try{let{source:e,fps:t,width:o,height:n,duration:i,withAudio:s,outFiles:a,disableHwCodec:c,signal:d,onProgress:p}=r;s&&h.warn(Ve,"audio will be ignored on this mode");let u=new Se({marks:r.screenshots,width:o,height:n,outFiles:a});let f=_(C,yo(r.useInnerProxy),!0);let m=performance.now();let w=it({source:e,renderer:r,signal:d});let b=_(C,await ve.create({width:o,height:n,fps:t,outFiles:a,withAudio:s,disableHwCodec:c}),!0);let g=await w;h.debug(Ve,"init done:",{source:e,cost:Math.round(performance.now()-m)});let E=Math.ceil(t*i);let v=1e3/t;let P=0;let y=0;let S=0;let k;let T=[];let B=new Pe(o,n);let V=new Ee(t);let U=g.webContents.debugger;let ce=g.webContents.mainFrame;let q=ce.frames[0];try{g.webContents.setFrameRate(fs),await mr(U);for(let H=0;H<E;H++){d?.throwIfAborted();let D=(H+1)*v,Fe=wr(g.webContents);Fe.catch(()=>{}),await Promise.all([po({frame:q,timestampMs:D,signal:d}),hr(g.webContents,D)]),await Promise.all([pr(U,v),Fe]);let R=await ls({source:e,fps:t,win:g,size:{width:o,height:n},ms:D});R?(S=0,V.wrote()):(S++,V.dropped(1));let F=R??k;if(!F||S>=t)throw new Error(`renderer exausted @ ${D}`);let re=Math.max(1,Math.ceil(F.ts/v-H));k=F;for(let ue=0;ue<re;ue++)u.capture(D,F.pix),B.sample(F.pix),await b.encodeBGRA(F.pix),P++;let O=Math.floor(P/E*100);O!==y&&(y=O,p(y));}}finally{await Ae(g),await b.finish(),T=await u.finish(k?.pix);}if(P===0)throw new Error("no frames captured");else {let H=B.finalize();H>=.5&&h.warn(Ve,`${e} blank-frame ratio ${Math.round(H*100)}% \u2014 possible white/blank screen`);let{jank:D}=V.finalize();return D>=.25&&h.warn(Ve,`${e} jank score ${D.toFixed(2)} \u2014 frames held past paint timeout`),{written:P,outFiles:a,blank:H,jank:D,screenshots:T}}}catch(I){var de=I,G=true;}finally{var He=x(C,de,G);He&&await He;}}var bs="[App]";process.env.ELECTRON_DISABLE_SECURITY_WARNINGS="1";function Po(){h.debug(bs,"gpu features:",electron.app.getGPUFeatureStatus());}var Ue=new AbortController,Bt=false;nr();electron.Menu.setApplicationMenu(null);electron.app.dock?.hide();electron.app.on("window-all-closed",()=>{});electron.app.on("gpu-info-update",Po);electron.app.on("before-quit",r=>!Bt&&r.preventDefault());electron.app.on("will-quit",r=>!Bt&&r.preventDefault());assert.ok(process.send,"ipc channel missing \u2014 spawn with stdio[3]='ipc'");process.once("disconnect",()=>Ue.abort("disconnect"));process.on("message",r=>{let e=r;e.type==="cancel"&&Ue.abort(e.reason);});dr({name:"app",run:async(r,e)=>{let t=new $e;try{await electron.app.whenReady(),br(),Po();for(let i of e.outFiles)await promises.mkdir(path.dirname(i),{recursive:!0});let o=e.deterministic?vo:io;Ue.signal.throwIfAborted();let n=await ao(Ue.signal,()=>o({source:r,...e,signal:Ue.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{Bt=true,electron.app.exit();}}});
95
95
  //# sourceMappingURL=app.cjs.map
96
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL3RzdXBAOC41LjErY2JkMDZiZTE1OWE5MGZhZS9ub2RlX21vZHVsZXMvdHN1cC9hc3NldHMvY2pzX3NoaW1zLmpzIiwiLi4vc3JjL2Jhc2UvZW52LnRzIiwiLi4vc3JjL2Jhc2UvcGFyc2VyLnRzIiwiLi4vc3JjL2Jhc2UvY29uc3RhbnRzLnRzIiwiLi4vc3JjL2Jhc2UvbG9nZ2luZy50cyIsIi4uL3NyYy9iYXNlL2NyYXNoLnRzIiwiLi4vc3JjL2Jhc2Uvbm9lcnIudHMiLCIuLi9zcmMvYmFzZS9wcm9jZXNzLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3NjaGVtYS50cyIsIi4uL3NyYy9jb21tb24udHMiLCIuLi9zcmMvcmVuZGVyZXIvaXBjLnRzIiwiLi4vc3JjL2Jhc2UvdGltaW5nLnRzIiwiLi4vc3JjL2Jhc2UvY2RwLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3N0ZWdvLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3Byb3RvY29sLnRzIiwiLi4vc3JjL2Jhc2UvbGltaXRlci50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvbWlzYy50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvY29kZWMudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL2F1ZGlvLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9oZXZjX2FscGhhL2JpdC50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvaGV2Y19hbHBoYS9uYWwudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL2hldmNfYWxwaGEvYWxwaGFfZGFyd2luLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9oZXZjX2FscGhhL3Zwcy50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvaGV2Y19hbHBoYS9hbHBoYS50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvaGV2Y19hbHBoYS9kdWFsX2xheWVyX211eC50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvaGV2Y19hbHBoYS9wYXJzZXIudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL2hldmNfYWxwaGEvbnZlbmMudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL3ZpZGVvLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci92aWRlb3Rvb2xib3gudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL2ZhY3RvcnkudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL211eGVyLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9zaW5rLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9waXBlbGluZS50cyIsIi4uL3NyYy9iYXNlL2ltYWdlLnRzIiwiLi4vc3JjL2Jhc2UvcXVhbGl0eS9ibGFuay50cyIsIi4uL3NyYy9iYXNlL3F1YWxpdHkvZHJvcC50cyIsIi4uL3NyYy9yZW5kZXJlci9hdWRpby50cyIsIi4uL3NyYy9yZW5kZXJlci9zY3JlZW5zaG90LnRzIiwiLi4vc3JjL2Jhc2UvcmV0cnkudHMiLCIuLi9zcmMvcnVudGltZS93b3JsZC50cyIsIi4uL3NyYy9iYXNlL3dhaXRhYmxlX2V2ZW50LnRzIiwiLi4vc3JjL3JlbmRlcmVyL25ldHdvcmsudHMiLCIuLi9zcmMvcmVuZGVyZXIvd2luZG93LnRzIiwiLi4vc3JjL3JlbmRlcmVyL3JlbmRlci50cyIsIi4uL3NyYy9yZW5kZXJlci9yZXJlbmRlci50cyIsIi4uL3NyYy9yZW5kZXJlci92aWRlby9hZHZhbmNlLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3RpY2sudHMiLCIuLi9zcmMvcmVuZGVyZXIvdmlkZW8vb3Blbi50cyIsIi4uL3NyYy9yZW5kZXJlci92aWRlby9kZWNvZGUudHMiLCIuLi9zcmMvcmVuZGVyZXIvdmlkZW8vZGVjb2RlX3Nlc3Npb24udHMiLCIuLi9zcmMvcmVuZGVyZXIvdmlkZW8vcHJvYmUudHMiLCIuLi9zcmMvcmVuZGVyZXIvdmlkZW8vc3R1Yi50cyIsIi4uL3NyYy9yZW5kZXJlci92aWRlby9mcmFtZV9zZXJ2ZXIudHMiLCIuLi9zcmMvcmVuZGVyZXIvdmlkZW8vcHJvdG9jb2wudHMiLCIuLi9zcmMvcmVuZGVyZXIvc2hvb3QudHMiLCIuLi9zcmMvYXBwLnRzIl0sIm5hbWVzIjpbImdldEltcG9ydE1ldGFVcmwiLCJpbXBvcnRNZXRhVXJsIiwicGVudiIsIm5hbWUiLCJwYXJzZXIiLCJkZWZhdWx0VmFsdWUiLCJwYXJzZU51bWJlciIsIngiLCJudW0iLCJwYXJzZVN0cmluZyIsInBhcnNlQXJyYXkiLCJpdGVtIiwicyIsInJlcXVpcmUiLCJjcmVhdGVSZXF1aXJlIiwicHVwTG9nTGV2ZWwiLCJwdXBQa2dSb290IiwiZGlybmFtZSIsImpvaW4iLCJwdXBQcmVsb2FkIiwiREVCVUciLCJJTkZPIiwiV0FSTiIsIkVSUk9SIiwiRkFUQUwiLCJzdGFja0hvb2siLCJ0YXJnZXQiLCJfY29udGV4dCIsIm1lc3NhZ2VzIiwicHJvY2Vzc2VkIiwibXNnIiwiX2ZhdGFsX2RlYyIsIl9lcnJvcl9kZWMiLCJfd2Fybl9kZWMiLCJfaW5mb19kZWMiLCJfZGVidWdfZGVjIiwiX2luaXQiLCJMb2dnZXIiLCJfbGV2ZWwiLCJfX3J1bkluaXRpYWxpemVycyIsIl9fcHVibGljRmllbGQiLCJ2YWx1ZSIsImRlYnVnIiwiaW5mbyIsIndhcm4iLCJlcnJvciIsImx2IiwibWVzc2FnZSIsInByb2MiLCJyZXNvbHZlIiwicmVqZWN0IiwiZmF0YWwiLCJkaXNwYXRjaCIsImRhdGEiLCJlcnIiLCJjb2RlIiwic2lnbmFsIiwicmVhc29uIiwiX19kZWNvcmF0b3JTdGFydCIsIl9fZGVjb3JhdGVFbGVtZW50IiwiX19kZWNvcmF0b3JNZXRhZGF0YSIsImxvZ2dlciIsIkxvZyIsImxldmVsIiwiQVZfTE9HX0VSUk9SIiwiQVZfTE9HX1dBUk5JTkciLCJUQUciLCJzdGFydEVsZWN0cm9uQ3Jhc2hSZXBvcnRlciIsImR1bXBEaXIiLCJhcHAiLCJta2RpclN5bmMiLCJjcmFzaFJlcG9ydGVyIiwibm9lcnIiLCJmbiIsImFyZ3MiLCJyZXQiLCJQVVBfQVJHU19LRVkiLCJwYXJncyIsImFyZ3YiLCJwcml2IiwiYXJnIiwiREVGQVVMVF9XSURUSCIsIkRFRkFVTFRfSEVJR0hUIiwiREVGQVVMVF9GUFMiLCJERUZBVUxUX0RVUkFUSU9OIiwiREVGQVVMVF9XSU5ET1dfVElNRU9VVCIsIkRFRkFVTFRfT1VUX0ZJTEVTIiwicmVuZGVyU2NoZW1hIiwieiIsImRlZmF1bHRSZW5kZXJPcHRpb25zIiwibm9ybWFsaXplU291cmNlIiwiYWJzIiwicmVhbHBhdGhTeW5jIiwibWFrZUNMSSIsIm9wdGlvbnMiLCJzaGFwZSIsImQiLCJwcm9ncmFtIiwic291cmNlIiwib3B0cyIsImUiLCJJcGNXcml0ZXIiLCJwYXlsb2FkIiwic2xlZXAiLCJtcyIsIndpdGhUaW1lb3V0IiwicCIsImxhYmVsIiwidGltZXIiLCJhYm9ydGFibGUiLCJvbkFib3J0IiwicGVyaW9kaWNhbCIsImNhbGxiYWNrIiwidG9rZW4iLCJjbG9zZWQiLCJ0aWNrIiwiY291bnQiLCJuZXh0IiwiQ0RQX1RJTUVPVVRfTVMiLCJzZW5kIiwiY2RwIiwibWV0aG9kIiwicGFyYW1zIiwiZXZhbEluIiwiZXhwcmVzc2lvbiIsImFkdmFuY2VWaXJ0dWFsVGltZSIsImJ1ZGdldCIsInRpbWVvdXQiLCJoYW5kbGVyIiwiXyIsInBhdXNlVmlydHVhbFRpbWUiLCJyZWJ1aWxkRHJhd2FibGUiLCJ3ZWIiLCJzaXplIiwiRlJBTUVfU1lOQ19NQVJLRVJfV0lEVEgiLCJTVEVHT19USUNLX0NIQU5ORUwiLCJidWlsZFN0ZWdvSFRNTCIsInRhcmdldFVSTCIsIndpZHRoIiwiaGVpZ2h0IiwiZGVjb2RlU3RlZ28iLCJiaXRtYXAiLCJtYXJrZXJSb3ciLCJ0aW1lc3RhbXAiLCJpIiwicGl4ZWxJZHgiLCJiaXQiLCJzdGFydFN0ZWdvIiwiZHJhd1N0ZWdvIiwid2MiLCJleHBlY3RlZCIsIndhaXRTdGVnb1RpY2siLCJzd2FwcGVkIiwiciIsIlBVUF9TQ0hFTUUiLCJGUkFNRV9TQ0hFTUUiLCJQUklWSUxFR0VEX1BSSVZJTEVHRVMiLCJwcm90b2NvbCIsInNldHVwUHVwUHJvdG9jb2wiLCJyZXEiLCJ1cmwiLCJzcmMiLCJodG1sIiwiY3JlYXRlU3RlZ29VUkwiLCJDb25jdXJyZW5jeUxpbWl0ZXIiLCJtYXhDb25jdXJyZW5jeSIsInYiLCJrZWVwIiwiZW50cnkiLCJGRl9FTkNPREVSX0xJQlZQWF9WUDkiLCJvcGVuVmlkZW9DdHgiLCJfc3RhY2siLCJjdHgiLCJDb2RlY0NvbnRleHQiLCJzdGFjayIsIl9fdXNpbmciLCJSYXRpb25hbCIsIkFWX0NPREVDX0ZMQUdfR0xPQkFMX0hFQURFUiIsImsiLCJGRm1wZWdFcnJvciIsIl9lcnJvciIsIl9oYXNFcnJvciIsIl9fY2FsbERpc3Bvc2UiLCJtYWtlRnJhbWUiLCJwaXhGbXQiLCJmcmFtZSIsIkZyYW1lIiwibWFrZVBhY2tldCIsInBrdCIsIlBhY2tldCIsImRyYWluUGFja2V0cyIsInN0cmVhbSIsIm11eGVyIiwiQVZFUlJPUl9FQUdBSU4iLCJBVkVSUk9SX0VPRiIsIkNvZGVjU3RhdGUiLCJfQ29kZWNTdGF0ZSIsImNvZGVjIiwiQ29kZWMiLCJGRl9ERUNPREVSX1BORyIsIm9rIiwicG5nIiwiQVZfUElYX0ZNVF9CR1JBIiwiQVZfUElYX0ZNVF9ZVVZBNDIwUCIsInBuZ0RhdGEiLCJzd3MiLCJTb2Z0d2FyZVNjYWxlQ29udGV4dCIsImZtdCIsIlNXU19CSUxJTkVBUiIsIlNBTVBMRV9GTVRfTkFNRSIsIkFWX1NBTVBMRV9GTVRfRkxUIiwiQVZfU0FNUExFX0ZNVF9GTFRQIiwiQXVkaW9FbmNvZGVyIiwiX0F1ZGlvRW5jb2RlciIsIm91dEZtdCIsIkFWX0NIQU5ORUxfTEFZT1VUX1NURVJFTyIsImluU2FtcGxlUmF0ZSIsImdyYXBoIiwiRmlsdGVyR3JhcGgiLCJhYnVmZmVyIiwiRmlsdGVyIiwiYnVmU3JjIiwiYWJ1ZmZlcnNpbmsiLCJidWZTaW5rIiwiZm10TmFtZSIsImZpbHRlckRlc2MiLCJvdXRwdXRzIiwiRmlsdGVySW5PdXQiLCJpbnB1dHMiLCJwY20iLCJuU2FtcGxlcyIsInBhY2tCaXRzIiwiYml0cyIsImJ1ZiIsImJ5dGUiLCJiIiwiQml0V3JpdGVyIiwidmFsIiwibiIsImxlbiIsInBhZCIsInN0YXJ0IiwiQml0UmVhZGVyIiwiemVyb3MiLCJBTk5FWF9CX1NUQVJUX0NPREUiLCJOQUxfQkxBX1dfTFAiLCJOQUxfUlNWX0lSQVBfVkNMMjMiLCJOQUxfVlBTIiwiTkFMX1NQUyIsIk5BTF9QUFMiLCJOQUxfU0VJX1BSRUZJWCIsInBhcnNlTmFsVHlwZSIsImhlYWRlcjAiLCJoZWFkZXIxIiwidHlwZSIsImxheWVySWQiLCJ0ZW1wb3JhbElkIiwiZW5jb2RlTmFsSGVhZGVyIiwiYnl0ZTAiLCJieXRlMSIsInNwbGl0TmFsVW5pdHMiLCJiaXRzdHJlYW0iLCJuYWxzIiwic2NMZW4iLCJuYWxTdGFydCIsIm5hbEVuZCIsImoiLCJyZXdyaXRlTmFsTGF5ZXJJZCIsIm5hbCIsIm91dCIsImIwIiwiYjEiLCJyZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uIiwiYWRkRW11bGF0aW9uUHJldmVudGlvbiIsIlZQU19QVExfQklUIiwiU1BTX1BUTF9CSVQiLCJQVExfVElFUl9CSVQiLCJQVExfQ09NUEFUMl9CSVQiLCJTTElDRV9UWVBFX0IiLCJTTElDRV9UWVBFX1AiLCJzZXRCaXQiLCJiaXRPZmZzZXQiLCJtYXNrIiwiY3VyIiwicGF0Y2hQdGwiLCJuYWxEYXRhIiwicHRsU3RhcnRCaXQiLCJyYnNwIiwicGF0Y2hIZXZjQWxwaGFQdGwiLCJjaHVua3MiLCJyZXdyaXRlT25lVWUiLCJuYWxJbiIsIm5ld1ZhbCIsImJyIiwiYnciLCJyZXdyaXRlVHdvVWUiLCJuZXdWYWwxIiwibmV3VmFsMiIsInJld3JpdGVBbHBoYVNwcyIsInNwcyIsIlNQU19TRVFfSURfQklUIiwicmV3cml0ZUFscGhhUHBzIiwicHBzIiwicmVhZFNlIiwidWUiLCJwYXJzZUlubGluZVN0UmVmUGljU2V0IiwibnVtRGVsdGFQb2NzU2V0MCIsImRlbHRhSWR4TWludXMxIiwibnVtTmVnIiwibnVtUG9zIiwicGFyc2VIZWFkZXJUb0FsaWdubWVudCIsIm5hbFR5cGUiLCJjZmciLCJpc0lyYXAiLCJzbGljZVR5cGUiLCJyZXdyaXRlQWxwaGFTbGljZUhlYWRlciIsInNsaWNlIiwicHJvYmUiLCJCIiwib2xkQWxpZ25CaXRzIiwic2xpY2VEYXRhQnl0ZU9mZnNldCIsImV4dHJhY3RQVEwiLCJ2cHNEYXRhIiwibWF4U3ViTGF5ZXJzTWludXMxIiwicHRsU3RhcnQiLCJ3cml0ZUJhc2VWUFMiLCJwdGwiLCJ3cml0ZVZQU0V4dGVuc2lvbiIsImJ1aWxkQWxwaGFWUFMiLCJleHRyYWN0QWxwaGFUb1l1djQyMHBCdWZmZXIiLCJiZ3JhRnJhbWUiLCJzcmNMcyIsInciLCJoIiwieVNpemUiLCJzcmMzMiIsInkiLCJyb3dCYXNlIiwiZHN0QmFzZSIsInJld3JpdGVBbHBoYVBhcmFtU2V0IiwiYnVpbGRVbmlmaWVkRXh0cmFkYXRhIiwiYmFzZUV4dHJhZGF0YSIsImFscGhhRXh0cmFkYXRhIiwiYmFzZU5hbHMiLCJhbHBoYU5hbHMiLCJhbHBoYUJ5VHlwZSIsImFyciIsImVtaXR0ZWQiLCJhbHBoYU5hbCIsImFEYXRhIiwiYnVpbGRBbHBoYUNoYW5uZWxJbmZvU0VJIiwiaDAiLCJoMSIsIndyaXRlQml0cyIsImludGVybGVhdmVBY2Nlc3NVbml0cyIsIkR1YWxMYXllck11eCIsImJhc2VDdHgiLCJhbHBoYUN0eCIsImJhc2VQa3QiLCJhbHBoYVBrdCIsInRhZyIsImJhc2UiLCJhbHBoYSIsImhldmNDZmciLCJpbnRlcmxlYXZlZCIsImZhaWwiLCJmaWVsZCIsImdvdCIsInNraXBQdGwiLCJtYXhTdWJMYXllcnMiLCJzdWJQcm9maWxlUHJlc2VudCIsInN1YkxldmVsUHJlc2VudCIsInBhcnNlU3BzIiwic3BzUmJzcCIsImNocm9tYUZvcm1hdCIsImxvZzJNYXhQb2NMc2IiLCJvcmRlckNvdW50Iiwic2FvRW5hYmxlZCIsIm51bVN0UnBzIiwibG9uZ1Rlcm1SZWZQaWNzUHJlc2VudCIsInNwc1RlbXBvcmFsTXZwRW5hYmxlZCIsInBhcnNlUHBzIiwicHBzUmJzcCIsIm51bUV4dHJhU2xpY2VIZWFkZXJCaXRzIiwiY2FiYWNJbml0UHJlc2VudCIsInBwc0xvb3BGaWx0ZXJBY3Jvc3NTbGljZXNFbmFibGVkIiwiZGVibG9ja2luZ0NvbnRyb2xQcmVzZW50Iiwic2xpY2VEZWJsb2NraW5nRGlzYWJsZWRPdmVycmlkZSIsInBhcnNlTnZlbmNIZXZjQ29uZmlnIiwiZXh0cmFkYXRhIiwiTnZlbmNEdWFsTGF5ZXJFbmNvZGVyIiwiX052ZW5jRHVhbExheWVyRW5jb2RlciIsImZwcyIsImJpdHJhdGUiLCJGRl9FTkNPREVSX0hFVkNfTlZFTkMiLCJudmVuY09wdHMiLCJjb21tb24iLCJBVl9QSVhfRk1UX1lVVjQyMFAiLCJ1bmlmaWVkIiwiY2hyb21hU2l6ZSIsImFscGhhQnVmIiwiYWxwaGFTd0ZyYW1lIiwicHRzIiwiZGVzeW5jIiwiVmlkZW9FbmNvZGVyIiwiX1ZpZGVvRW5jb2RlciIsImNvZGVjTmFtZSIsImNvZGVjVGFnIiwiY29kZWNPcHRzIiwicmVzdCIsIlZpZGVvVG9vbGJveEVuY29kZXIiLCJfVmlkZW9Ub29sYm94RW5jb2RlciIsImh3IiwiQVZDT0xfUkFOR0VfSlBFRyIsImNyZWF0ZUh3VmlkZW9FbmNvZGVyIiwiZGlzYWJsZUh3Q29kZWMiLCJzaGFyZWRIdyIsIkhhcmR3YXJlQ29udGV4dCIsIm93bnNIdyIsIkZGX0hXREVWSUNFX1RZUEVfVklERU9UT09MQk9YIiwiRkZfSFdERVZJQ0VfVFlQRV9DVURBIiwidmlkZW8iLCJGRl9FTkNPREVSX0xJQlgyNjUiLCJGb3JtYXRNdXhlciIsIm91dFBhdGgiLCJmb3JtYXROYW1lIiwiRm9ybWF0Q29udGV4dCIsImNvZGVjQ3R4IiwiRGljdGlvbmFyeSIsIk91dHB1dFNpbmsiLCJfT3V0cHV0U2luayIsInBhdGgiLCJsb3dlciIsInNldHVwIiwiYXVkaW8iLCJfcHJvbWlzZSIsIkZGX0VOQ09ERVJfQUFDIiwiRkZfRU5DT0RFUl9MSUJPUFVTIiwic2FtcGxlUmF0ZSIsImh3VmlkZW8iLCJFbmNvZGVyUGlwZWxpbmUiLCJfRW5jb2RlclBpcGVsaW5lIiwib3V0RmlsZXMiLCJ3aXRoQXVkaW8iLCJraW5kcyIsIm5lZWRzTXA0SHciLCJpc0h3QWxwaGFDYXBhYmxlIiwic2lua3MiLCJzaW5rIiwiaW5wdXQiLCJzaXplRXF1YWxzIiwiYSIsInF1YW50aXplIiwiYmdyYSIsIm1vZGFsUGl4ZWwiLCJzdGVwWCIsInN0ZXBZIiwiY291bnRzIiwiZmlyc3RJZHgiLCJiZXN0IiwiYmVzdENvdW50Iiwia2V5IiwiaXNCbGFua0ZyYW1lIiwibSIsIm1iIiwibWciLCJtciIsIm1hIiwiY29udGVudCIsIm9mZnNldCIsIkJsYW5rU3RhdHMiLCJEcm9wU3RhdHMiLCJ0b3RhbERyb3BwZWQiLCJsb2NhbFN1bSIsIm1heEJ1cnN0IiwiYnVyc3QiLCJwZXJjZXB0aWJsZSIsImciLCJsIiwic2NvcmUiLCJBVURJT19NRVRBX0NIQU5ORUwiLCJBVURJT19DSFVOS19DSEFOTkVMIiwiYXR0YWNoQXVkaW9MaXN0ZW5lcnMiLCJlbmNvZGVyIiwiZ2V0VmlkZW9UaW1lTXMiLCJvbkVycm9yIiwib25NZXRhIiwiX2UiLCJzdGFydE1zIiwic2lsZW5jZVNhbXBsZXMiLCJvbkNodW5rIiwiYnVmZmVyIiwiYnl0ZXMiLCJTY3JlZW5zaG90VGFrZXIiLCJfcyIsImRpciIsInNlYyIsImluZGV4IiwiY3VycmVudFRpbWVNcyIsImZpbmFsQmdyYSIsIm5hdGl2ZUltYWdlIiwid3JpdGVGaWxlIiwidXNlUmV0cnkiLCJtYXhBdHRlbXB0cyIsInRpbWVvdXRFcnJvciIsImF0dGVtcHQiLCJwcm9taXNlcyIsInNldFRpbWVvdXQiLCJXT1JMRF9BUkciLCJBVURJT19BUkciLCJXYWl0YWJsZUV2ZW50IiwibWFwIiwidGFyZ2V0cyIsIkxPQ0FMX1NDSEVNRVMiLCJpc0xvY2FsU2NoZW1lIiwiaXNQcm94eVRhcmdldCIsIlVSTCIsInByb3hpZWRVcmwiLCJwYXJzZWQiLCJzZXRJbnRlcmNlcHRvciIsIndpbmRvdyIsInVzZUlubmVyUHJveHkiLCJzdHViTWVkaWEiLCJsaW1pdGVyIiwiZXZlbnRzIiwid2FpdCIsIm9uVGltZW91dCIsImV2ZW50IiwiZGV0YWlscyIsInByb3hpZWQiLCJyZXNwb25zZUhlYWRlcnMiLCJyZXNvdXJjZVR5cGUiLCJ1bnNldEludGVyY2VwdG9yIiwiVElNRU9VVF9FUlJPUiIsIkNPTlNPTEVfSUdOT1JFUyIsIndhaXRGb3JGaW5pc2giLCJ3aW4iLCJhY3Rpb24iLCJ0aW1lb3V0TXMiLCJ0b2xlcmFudCIsImRvbVJlYWR5IiwiZG9uZSIsImRlc2MiLCJfcGF0aCIsImV4aXRDb2RlIiwiZGlzcG9zZVdpbmRvdyIsIldPUkxEX1NDUklQVFMiLCJwaWNrV29ybGRTY3JpcHQiLCJyZW5kZXJlciIsIm1vZGUiLCJvcGVuV2luZG93Iiwib25DcmVhdGVkIiwiQnJvd3NlcldpbmRvdyIsImxpbmVOdW1iZXIiLCJzb3VyY2VJZCIsIm1zZ3MiLCJvcGVuV2luZG93V2l0aFJldHJ5IiwibG9hZFdpbmRvdyIsIndhcm11cCIsIm9wZW4iLCJyZW5kZXIiLCJkdXJhdGlvbiIsIm9uUHJvZ3Jlc3MiLCJ0YWtlciIsInRvdGFsIiwiZnJhbWVJbnRlcnZhbCIsImZyYW1lU2l6ZSIsIndyaXR0ZW4iLCJsYXN0RnJhbWUiLCJzY3JlZW5zaG90cyIsImxhc3RXcml0dGVuVGltZSIsInByb2dyZXNzIiwiZW5jb2RlRXJyb3IiLCJyZXNvbHZlciIsInJlamVjdGVyIiwiY2xlYXJTdHVja0NoZWNrIiwiYmxhbmtTdGF0cyIsImRyb3BTdGF0cyIsImRpc3Bvc2VBdWRpbyIsInNjaGVkdWxlRnJhbWUiLCJwYWludCIsIl9yIiwiaW1hZ2UiLCJpbWFnZVNpemUiLCJjdXJyZW50VGltZSIsImNyb3BwZWQiLCJ0aW1lRGVsdGEiLCJmcmFtZXNUb0luc2VydCIsIm5ld1Byb2dyZXNzIiwiZHVyYXRpb25NcyIsImxhc3RXcml0dGVuIiwic3R1Y2siLCJibGFuayIsImphbmsiLCJNQVhfUkVOREVSX0FUVEVNUFRTIiwid2l0aFJlcmVuZGVyIiwibGFzdEVyciIsImFkdmFuY2VWaWRlb3MiLCJ0aW1lc3RhbXBNcyIsIlRJQ0tfU1lNQk9MIiwiZXhwciIsInRpY2tFdiIsIlJXX1RJTUVPVVRfVVMiLCJvcGVuSW5wdXQiLCJEZW11eGVyIiwiZGVjb2RlRnJhbWVzIiwibWV0YSIsImZyb21JZHgiLCJyZXN1bWVBdCIsIkFWU0VFS19GTEFHX0JBQ0tXQVJEIiwiQVZNRURJQV9UWVBFX1ZJREVPIiwiZGVjIiwiRGVjb2RlciIsImZyYW1lV2lkdGgiLCJmcmFtZUhlaWdodCIsInNjYWxlIiwiZmlsdGVyIiwiRmlsdGVyQVBJIiwicHJldksiLCJfZnJhbWUiLCJ0YiIsInRzIiwiYXQiLCJwYWNrUmdiYSIsInJvdyIsInN0cmlkZSIsIkRFQ09ERV9BSEVBRCIsIktFRVBfQkVISU5EIiwiTUVNT1JZX0JVREdFVCIsIk1BWF9QQVNTX1JFVFJZIiwiRGVjb2RlU2Vzc2lvbiIsIl9zcmMiLCJpZHgiLCJoaXQiLCJmYWlscyIsImdlbiIsImZhaWxlZCIsImZyb20iLCJmbG9vciIsImxlYWRHYXAiLCJvdXRlciIsIl9wa3QiLCJlbmNvZGVTdHViV2VibSIsInRtcGRpciIsInJhbmRvbUJ5dGVzIiwic3R1YiIsIlN0dWJGcmFtZSIsInJlYWRGaWxlIiwicm0iLCJsdW1hIiwiY2hyb21hIiwiRnJhbWVTZXJ2ZXIiLCJfdXNlSW5uZXJQcm94eSIsImlkIiwiZXZlbiIsInJlYWwiLCJzZXNzaW9ucyIsImNyZWF0ZUhhc2giLCJTQ0hFTUUiLCJDT1JTX0hFQURFUlMiLCJ1c2VGcmFtZVByb3RvY29sIiwiZnMiLCJyZXMiLCJqc29uT2siLCJpbnQiLCJyZ2JhT2siLCJ3ZWJtT2siLCJjb3B5IiwiZmFsbGJhY2siLCJSRU5ERVJfRlBTIiwiY2xlYXJEaXJ0eUNoZWNrIiwiaXNGaXJzdEZyYW1lIiwiX2QiLCJzbGl2ZXIiLCJyZWZyZXNoRnBzIiwic2hvb3QiLCJ0SW5pdCIsIndpblAiLCJwaXBlbGluZSIsImluaXRNcyIsImhlbGQiLCJtYWluIiwiaWZyYW1lIiwiZnJhbWVJZCIsImZyYW1lTXMiLCJwYWludGVkIiwicmVwZWF0IiwicHJpbnRGZWF0dXJlcyIsImN0cmwiLCJleGl0aW5nIiwiTWVu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RVRBLEVBQUcsSUFBQSxDQUFLLENBQUMsRUFDVEEsQ0FBQUEsQ0FBRyxFQUFBLENBQUcsQ0FBQyxDQUFBLENBQ1BBLENBQUFBLENBQUcsSUFBQSxDQUFLLENBQUMsQ0FBQSxDQUNUQSxDQUFBQSxDQUFHLEtBQUssQ0FBQyxDQUFBLENBQ1RBLEVBQUcsSUFBQSxDQUFLLENBQUMsRUFHVEEsQ0FBQUEsQ0FBRyxFQUFBLENBQUcsQ0FBQyxDQUFBLENBQ1BBLENBQUFBLENBQUcsS0FBSyxDQUFDLENBQUEsQ0FDVEEsRUFBRyxJQUFBLENBQUtnQyxDQUFBQSxDQUFJLE9BQUEsQ0FBU0EsQ0FBQUEsQ0FBSSxRQUFBLENBQVVBLENBQUFBLENBQUksT0FBU0EsQ0FBQUEsQ0FBSSxRQUFRLEVBRTVEaEMsQ0FBQUEsQ0FBRyxFQUFBLENBQUcsQ0FBQyxDQUFBLENBQ1BBLENBQUFBLENBQUcsQ0FBQSxDQUFFLENBQUEsQ0FBRyxDQUFDLENBQUEsQ0FDVEEsRUFBRyxDQUFBLENBQUUsQ0FBQSxDQUFHLENBQUMsQ0FBQSxDQUNUQSxDQUFBQSxDQUFHLEVBQUUsQ0FBQSxDQUFHLENBQUMsQ0FBQSxDQUVUQSxDQUFBQSxDQUFHLEVBQUEsQ0FBRyxDQUFDLEVBQ1BBLENBQUFBLENBQUcsQ0FBQSxDQUFFNUosRUFBTyxFQUFFLENBQUEsQ0FDZDRKLEVBQUcsQ0FBQSxDQUFFM0osQ0FBQUEsQ0FBUSxFQUFFLENBQUEsQ0FDZjJKLENBQUFBLENBQUcsS0FBSyxDQUFDLENBQUEsQ0FDVEEsRUFBRyxDQUFBLENBQUUsQ0FBQSxDQUFHLENBQUMsQ0FBQSxDQUNUQSxDQUFBQSxDQUFHLENBQUEsQ0FBRSxDQUFBLENBQUcsQ0FBQyxDQUFBLENBQ1RBLEVBQUcsQ0FBQSxDQUFFLENBQUEsQ0FBRyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxLQUFLLENBQUMsQ0FBQSxDQUVUQSxDQUFBQSxDQUFHLElBQUEsQ0FBSyxDQUFDLENBQUEsQ0FDVEEsRUFBRyxJQUFBLENBQUssQ0FBQyxFQUNUQSxDQUFBQSxDQUFHLElBQUEsQ0FBSyxD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TTRRLENBQUFBLENBQVMzYixFQUFRLGFBQUEsQ0FBZ0Jxa0IsRUFBQUEsQ0FBUW5ILEdBQy9DZ0ksRUFBQUEsQ0FBSyxNQUFBLENBQU8sZ0JBQWUsQ0FDM0IsSUFBTU0sQ0FBQUEsQ0FBUyxNQUFNbkcsRUFBQUEsQ0FBYTZGLEVBQUFBLENBQUssT0FBUSxJQUM3Q3ZKLENBQUFBLENBQU8sQ0FDTCxNQUFBLENBQUF2YixDQUFBQSxDQUNBLEdBQUdKLENBQUFBLENBQ0gsTUFBQSxDQUFRa2xCLEVBQUFBLENBQUssTUFBQSxDQUNiLFVBQUEsQ0FBYXRrQixDQUFBQSxFQUFNMGtCLEVBQUksYUFBQSxDQUFjMWtCLENBQUMsRUFDdEMsU0FBQSxDQUFXLENBQUNvWCxFQUFHZixDQUFBQSxHQUFNcU8sQ0FBQUEsQ0FBSSxZQUFBLENBQWF0TixDQUFBQSxDQUFHZixDQUFDLENBQzVDLENBQUMsQ0FDSCxDQUFBLENBQ0EsTUFBTXFPLENBQUFBLENBQUksU0FBQSxDQUFVRSxDQUFNLEVBQzVCLENBQUEsTUFBU2xsQixDQUFBQSxDQUFHLENBQ1YsSUFBTXZELENBQUFBLENBQVF1RCxFQUNSMlcsQ0FBQUEsQ0FBSWxhLENBQUFBLENBQU0sT0FBU0EsQ0FBQUEsQ0FBTSxPQUFBLEVBQVcsT0FBT3VELENBQUFBLEVBQUssZUFBZSxDQUFBLENBQ3JFLE1BQU1nbEIsQ0FBQUEsQ0FBSSxVQUFBLENBQVdyTyxDQUFDLEVBQ3hCLENBQUEsT0FBRSxDQUNBa08sRUFBQUEsQ0FBVSxJQUFBLENBQ1Y1bUIsYUFBSSxJQUFBLEdBQ04sQ0FDRixDQUNGLENBQUMsQ0FBQSIsImZpbGUiOiJhcHAuY2pzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gU2hpbSBnbG9iYWxzIGluIGNqcyBidW5kbGVcbi8vIFRoZXJlJ3MgYSB3ZWlyZCBidWcgdGhhdCBlc2J1aWxkIHdpbGwgYWx3YXlzIGluamVjdCBpbXBvcnRNZXRhVXJsXG4vLyBpZiB3ZSBleHBvcnQgaXQgYXMgYGNvbnN0IGltcG9ydE1ldGFVcmwgPSAuLi4gX19maWxlbmFtZSAuLi5gXG4vLyBCdXQgdXNpbmcgYSBmdW5jdGlvbiB3aWxsIG5vdCBjYXVzZSB0aGlzIGlzc3VlXG5cbmNvbnN0IGdldEltcG9ydE1ldGFVcmwgPSAoKSA9PiBcbiAgdHlwZW9mIGRvY3VtZW50ID09PSBcInVuZGVmaW5lZFwiIFxuICAgID8gbmV3IFVSTChgZmlsZToke19fZmlsZW5hbWV9YCkuaHJlZiBcbiAgICA6IChkb2N1bWVudC5jdXJyZW50U2NyaXB0ICYmIGRvY3VtZW50LmN1cnJlbnRTY3JpcHQudGFnTmFtZS50b1VwcGVyQ2FzZSgpID09PSAnU0NSSVBUJykgXG4gICAgICA/IGRvY3VtZW50LmN1cnJlbnRTY3JpcHQuc3JjIFxuICAgICAgOiBuZXcgVVJMKFwibWFpbi5qc1wiLCBkb2N1bWVudC5iYXNlVVJJKS5ocmVmO1xuXG5leHBvcnQgY29uc3QgaW1wb3J0TWV0YVVybCA9IC8qIEBfX1BVUkVfXyAqLyBnZXRJbXBvcnRNZXRhVXJsKClcbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMjUuXG5cbmV4cG9ydCB0eXBlIEVudlBhcnNlcjxUPiA9ICh2YWx1ZTogdW5rbm93bikgPT4gVDtcblxuZXhwb3J0IGZ1bmN0aW9uIHBlbnY8VD4obmFtZTogc3RyaW5nLCBwYXJzZXI6IEVudlBhcnNlcjxUPiwgZGVmYXVsdFZhbHVlOiBUKTogVDtcbmV4cG9ydCBmdW5jdGlvbiBwZW52PFQ+KG5hbWU6IHN0cmluZywgcGFyc2VyOiBFbnZQYXJzZXI8VD4sIGRlZmF1bHRWYWx1ZT86IFQpOiBUIHwgdW5kZWZpbmVkO1xuZXhwb3J0IGZ1bmN0aW9uIHBlbnY8VD4obmFtZTogc3RyaW5nLCBwYXJzZXI6IEVudlBhcnNlcjxUPiwgZGVmYXVsdFZhbHVlPzogVCk6IFQgfCB1bmRlZmluZWQge1xuICB0cnkge1xuICAgIHJldHVybiBwYXJzZXIocHJvY2Vzcy5lbnZbbmFtZV0pO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZGVmYXVsdFZhbHVlO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAxLzMwLlxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VOdW1iZXIoeDogdW5rbm93bik6IG51bWJlciB7XG4gIGlmICh0eXBlb2YgeCA9PT0gXCJudW1iZXJcIikge1xuICAgIHJldHVybiB4O1xuICB9XG4gIGNvbnN0IG51bSA9IE51bWJlcih4KTtcbiAgaWYgKE51bWJlci5pc05hTihudW0pKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBWYWx1ZSAke3h9IGlzIG5vdCBhIHZhbGlkIG51bWJlcmApO1xuICB9XG4gIHJldHVybiBudW07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVN0cmluZyh4OiB1bmtub3duKTogc3RyaW5nIHtcbiAgaWYgKHR5cGVvZiB4ID09PSBcInN0cmluZ1wiKSB7XG4gICAgcmV0dXJuIHg7XG4gIH1cbiAgcmV0dXJuIFN0cmluZyh4KTtcbn1cblxuLy8gQ29tbWEtc2VwYXJhdGVkIHN0cmluZyDihpIgYXJyYXkgdmlhIGEgcGVyLWl0ZW0gcGFyc2VyOyBlbXB0eS9ibGFuayDihpIgW10uXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VBcnJheTxUPihpdGVtOiAoeDogdW5rbm93bikgPT4gVCk6ICh4OiB1bmtub3duKSA9PiBUW10ge1xuICByZXR1cm4gKHgpID0+IHtcbiAgICBpZiAodHlwZW9mIHggIT09IFwic3RyaW5nXCIgfHwgeC50cmltKCkgPT09IFwiXCIpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgcmV0dXJuIHguc3BsaXQoXCIsXCIpLm1hcCgocykgPT4gaXRlbShzLnRyaW0oKSkpO1xuICB9O1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wOS5cblxuaW1wb3J0IHsgY3JlYXRlUmVxdWlyZSB9IGZyb20gXCJub2RlOm1vZHVsZVwiO1xuaW1wb3J0IHsgZGlybmFtZSwgam9pbiB9IGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IHBlbnYgfSBmcm9tIFwiLi9lbnZcIjtcbmltcG9ydCB7IHBhcnNlTnVtYmVyIH0gZnJvbSBcIi4vcGFyc2VyXCI7XG5cbmNvbnN0IHJlcXVpcmUgPSBjcmVhdGVSZXF1aXJlKGltcG9ydC5tZXRhLnVybCk7XG5cbmV4cG9ydCBjb25zdCBwdXBMb2dMZXZlbCA9IHBlbnYoXCJQVVBfTE9HX0xFVkVMXCIsIHBhcnNlTnVtYmVyLCAyKTtcblxuZXhwb3J0IGNvbnN0IHB1cFBrZ1Jvb3QgPSBkaXJuYW1lKHJlcXVpcmUucmVzb2x2ZShcInB1cC1yZWNvcmRlci9wYWNrYWdlLmpzb25cIikpO1xuZXhwb3J0IGNvbnN0IHB1cEFwcCA9IGpvaW4ocHVwUGtnUm9vdCwgXCJkaXN0XCIsIFwiYXBwLmNqc1wiKTtcbmV4cG9ydCBjb25zdCBwdXBQcmVsb2FkID0gam9pbihwdXBQa2dSb290LCBcImRpc3RcIiwgXCJydW50aW1lXCIsIFwicHJlbG9hZC5janNcIik7XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA2LlxuXG5pbXBvcnQgdHlwZSB7IENoaWxkUHJvY2VzcyB9IGZyb20gXCJub2RlOmNoaWxkX3Byb2Nlc3NcIjtcbmltcG9ydCB7IExvZyB9IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQgeyBBVl9MT0dfRVJST1IsIEFWX0xPR19XQVJOSU5HIH0gZnJvbSBcIm5vZGUtYXYvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBwdXBMb2dMZXZlbCB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIExvZ2dlckxpa2Uge1xuICBkZWJ1Zz8odGhpczogdm9pZCwgLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQ7XG5cbiAgaW5mbz8odGhpczogdm9pZCwgLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQ7XG5cbiAgd2Fybj8odGhpczogdm9pZCwgLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQ7XG5cbiAgZXJyb3I/KHRoaXM6IHZvaWQsIC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkO1xuXG4gIC8vIEJ1ZmZlcmVkIGltcGxzIGRyYWluIG9uIHRoaXM7IHNodXRkb3duIGF3YWl0cyBpdCBzbyB0aGUgdGFpbCBpcyBub3QgbG9zdC5cbiAgZmx1c2g/KHRoaXM6IHZvaWQpOiBQcm9taXNlPHZvaWQ+O1xufVxuXG5jb25zdCBERUJVRyA9IFwiPHB1cEBkZWJ1Zz5cIjtcbmNvbnN0IElORk8gPSBcIjxwdXBAaW5mbz5cIjtcbmNvbnN0IFdBUk4gPSBcIjxwdXBAd2Fybj5cIjtcbmNvbnN0IEVSUk9SID0gXCI8cHVwQGVycm9yPlwiO1xuY29uc3QgRkFUQUwgPSBcIjxwdXBAZmF0YWw+XCI7XG5cbmZ1bmN0aW9uIHN0YWNrSG9vayh0YXJnZXQ6ICguLi5tZXNzYWdlczogdW5rbm93bltdKSA9PiB1bmtub3duLCBfY29udGV4dDogQ2xhc3NNZXRob2REZWNvcmF0b3JDb250ZXh0KSB7XG4gIHJldHVybiBmdW5jdGlvbiAodGhpczogTG9nZ2VyLCAuLi5tZXNzYWdlczogdW5rbm93bltdKSB7XG4gICAgY29uc3QgcHJvY2Vzc2VkID0gbWVzc2FnZXMubWFwKChtc2cpID0+IHtcbiAgICAgIHJldHVybiBtc2cgaW5zdGFuY2VvZiBFcnJvciA/IChtc2cuc3RhY2sgPz8gU3RyaW5nKG1zZykpIDogbXNnO1xuICAgIH0pO1xuICAgIHJldHVybiB0YXJnZXQuY2FsbCh0aGlzLCAuLi5wcm9jZXNzZWQpO1xuICB9O1xufVxuXG5leHBvcnQgY2xhc3MgTG9nZ2VyIGltcGxlbWVudHMgTG9nZ2VyTGlrZSB7XG4gIHByaXZhdGUgX2ltcGw/OiBMb2dnZXJMaWtlO1xuXG4gIGdldCBsZXZlbCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9sZXZlbDtcbiAgfVxuXG4gIHNldCBsZXZlbCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fbGV2ZWwgPSB2YWx1ZTtcbiAgICB0aGlzLmltcGwgPSB0aGlzLl9pbXBsID8/IGNvbnNvbGU7XG4gIH1cblxuICBnZXQgaW1wbCgpOiBMb2dnZXJMaWtlIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5faW1wbDtcbiAgfVxuXG4gIHNldCBpbXBsKHZhbHVlOiBMb2dnZXJMaWtlKSB7XG4gICAgY29uc3QgZGVidWcgPSB2YWx1ZS5kZWJ1ZyA/PyBjb25zb2xlLmRlYnVnO1xuICAgIGNvbnN0IGluZm8gPSB2YWx1ZS5pbmZvID8/IGNvbnNvbGUuaW5mbztcbiAgICBjb25zdCB3YXJuID0gdmFsdWUud2FybiA/PyBjb25zb2xlLndhcm47XG4gICAgY29uc3QgZXJyb3IgPSB2YWx1ZS5lcnJvciA/PyBjb25zb2xlLmVycm9yO1xuICAgIGNvbnN0IGx2ID0gdGhpcy5fbGV2ZWw7XG4gICAgdGhpcy5faW1wbCA9IHtcbiAgICAgIGRlYnVnOiBsdiA+PSAzID8gZGVidWcgOiB1bmRlZmluZWQsXG4gICAgICBpbmZvOiBsdiA+PSAyID8gaW5mbyA6IHVuZGVmaW5lZCxcbiAgICAgIHdhcm46IGx2ID49IDEgPyB3YXJuIDogdW5kZWZpbmVkLFxuICAgICAgZXJyb3I6IGx2ID49IDAgPyBlcnJvciA6IHVuZGVmaW5lZCxcbiAgICAgIGZsdXNoOiB2YWx1ZS5mbHVzaCxcbiAgICB9O1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfbGV2ZWw6IG51bWJlciA9IHB1cExvZ0xldmVsKSB7XG4gICAgdGhpcy5pbXBsID0gY29uc29sZTtcbiAgfVxuXG4gIEBzdGFja0hvb2tcbiAgZGVidWcoLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQge1xuICAgIHRoaXMuaW1wbD8uZGVidWc/LihERUJVRywgLi4ubWVzc2FnZXMpO1xuICB9XG5cbiAgQHN0YWNrSG9va1xuICBpbmZvKC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkIHtcbiAgICB0aGlzLmltcGw/LmluZm8/LihJTkZPLCAuLi5tZXNzYWdlcyk7XG4gIH1cblxuICBAc3RhY2tIb29rXG4gIHdhcm4oLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQge1xuICAgIHRoaXMuaW1wbD8ud2Fybj8uKFdBUk4sIC4uLm1lc3NhZ2VzKTtcbiAgfVxuXG4gIEBzdGFja0hvb2tcbiAgZXJyb3IoLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQge1xuICAgIHRoaXMuaW1wbD8uZXJyb3I/LihFUlJPUiwgLi4ubWVzc2FnZXMpO1xuICB9XG5cbiAgQHN0YWNrSG9va1xuICBmYXRhbCguLi5tZXNzYWdlczogdW5rbm93bltdKTogdm9pZCB7XG4gICAgdGhpcy5pbXBsPy5lcnJvcj8uKEZBVEFMLCAuLi5tZXNzYWdlcyk7XG4gICAgcHJvY2Vzcy5leGl0KDEpO1xuICB9XG5cbiAgcHJpdmF0ZSBkaXNwYXRjaChtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICBjb25zdCBtc2cgPSBtZXNzYWdlLnRyaW1FbmQoKTtcbiAgICBpZiAobXNnLnN0YXJ0c1dpdGgoREVCVUcpKSB7XG4gICAgICB0aGlzLmRlYnVnKG1zZy5zbGljZShERUJVRy5sZW5ndGggKyAxKSk7XG4gICAgfSBlbHNlIGlmIChtc2cuc3RhcnRzV2l0aChJTkZPKSkge1xuICAgICAgdGhpcy5pbmZvKG1zZy5zbGljZShJTkZPLmxlbmd0aCArIDEpKTtcbiAgICB9IGVsc2UgaWYgKG1zZy5zdGFydHNXaXRoKFdBUk4pKSB7XG4gICAgICB0aGlzLndhcm4obXNnLnNsaWNlKFdBUk4ubGVuZ3RoICsgMSkpO1xuICAgIH0gZWxzZSBpZiAobXNnLnN0YXJ0c1dpdGgoRVJST1IpKSB7XG4gICAgICB0aGlzLmVycm9yKG1zZy5zbGljZShFUlJPUi5sZW5ndGggKyAxKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaW5mbyhtc2cpO1xuICAgIH1cbiAgfVxuXG4gIGF0dGFjaChwcm9jOiBDaGlsZFByb2Nlc3MsIG5hbWU6IHN0cmluZykge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLmRlYnVnKGAke25hbWV9LmF0dGFjaGApO1xuICAgICAgbGV0IGZhdGFsOiBzdHJpbmcgPSBcIlwiO1xuICAgICAgY29uc3QgZGlzcGF0Y2ggPSAoZGF0YTogQnVmZmVyKSA9PiB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBkYXRhLnRvU3RyaW5nKCk7XG4gICAgICAgIGlmIChtZXNzYWdlLnN0YXJ0c1dpdGgoRkFUQUwpKSB7XG4gICAgICAgICAgZmF0YWwgKz0gbWVzc2FnZS5zbGljZShGQVRBTC5sZW5ndGggKyAxKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmRpc3BhdGNoKG1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgcHJvYy5zdGRlcnI/Lm9uKFwiZGF0YVwiLCBkaXNwYXRjaCk7XG4gICAgICBwcm9jLnN0ZG91dD8ub24oXCJkYXRhXCIsIGRpc3BhdGNoKTtcbiAgICAgIHByb2NcbiAgICAgICAgLm9uKFwiZXJyb3JcIiwgKGVycikgPT4ge1xuICAgICAgICAgIGZhdGFsICs9IGVyci5tZXNzYWdlO1xuICAgICAgICAgIHByb2Mua2lsbCgpO1xuICAgICAgICB9KVxuICAgICAgICAub25jZShcImNsb3NlXCIsIChjb2RlLCBzaWduYWwpID0+IHtcbiAgICAgICAgICBpZiAoY29kZSB8fCBzaWduYWwgfHwgZmF0YWwpIHtcbiAgICAgICAgICAgIGZhdGFsIHx8PSBgY29tbWFuZCBmYWlsZWQ6ICR7cHJvYy5zcGF3bmFyZ3Muam9pbihcIiBcIil9YDtcbiAgICAgICAgICAgIHRoaXMuZGVidWcoYCR7bmFtZX0uY2xvc2VgLCB7IGNvZGUsIHNpZ25hbCwgZmF0YWwgfSk7XG4gICAgICAgICAgICByZWplY3QobmV3IEVycm9yKGZhdGFsKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZGVidWcoYCR7bmFtZX0uY2xvc2VgKTtcbiAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC5vbihcInVuaGFuZGxlZFJlamVjdGlvblwiLCAocmVhc29uKSA9PiB7XG4gICAgICAgICAgdGhpcy5lcnJvcihgJHtuYW1lfS51bmhhbmRsZWRgLCByZWFzb24pO1xuICAgICAgICB9KVxuICAgICAgICAub24oXCJ1bmNhdWdodEV4Y2VwdGlvbk1vbml0b3JcIiwgKGVycikgPT4ge1xuICAgICAgICAgIHRoaXMuZXJyb3IoYCR7bmFtZX0udW5oYW5kbGVkYCwgZXJyKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBmbHVzaCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLmltcGw/LmZsdXNoPy4oKTtcbiAgfVxufVxuXG5jb25zdCBsb2dnZXIgPSBuZXcgTG9nZ2VyKCk7XG5cbi8vIFJvdXRlIGZmbXBlZyBuYXRpdmUgbG9ncyB0aHJvdWdoIHB1cCdzIGxvZ2dlci5cbkxvZy5zZXRDYWxsYmFjaygobGV2ZWwsIG1lc3NhZ2UpID0+IHtcbiAgY29uc3QgbXNnID0gbWVzc2FnZS50cmltRW5kKCk7XG4gIGlmICghbXNnKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChsZXZlbCA8PSBBVl9MT0dfRVJST1IpIHtcbiAgICBsb2dnZXIuZXJyb3IobXNnKTtcbiAgfSBlbHNlIGlmIChsZXZlbCA8PSBBVl9MT0dfV0FSTklORykge1xuICAgIGxvZ2dlci53YXJuKG1zZyk7XG4gIH1cbn0pO1xuXG5leHBvcnQgeyBsb2dnZXIgfTtcbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMjEuXG5cbmltcG9ydCB7IG1rZGlyU3luYyB9IGZyb20gXCJub2RlOmZzXCI7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHsgYXBwLCBjcmFzaFJlcG9ydGVyIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi9sb2dnaW5nXCI7XG5cbmNvbnN0IFRBRyA9IFwiW0NyYXNoXVwiO1xuXG5leHBvcnQgZnVuY3Rpb24gc3RhcnRFbGVjdHJvbkNyYXNoUmVwb3J0ZXIoKSB7XG4gIC8vIGFwcERhdGEgKG5vdCB0aGUgcGVyLXJ1biB1c2VyLWRhdGEtZGlyKSBzbyBldmVyeSBwdXAgYXBwJ3MgZHVtcHMgYWNjdW11bGF0ZSBpbiBvbmUgc2hhcmVkLCBwZXJzaXN0ZW50IGRpci5cbiAgY29uc3QgZHVtcERpciA9IGpvaW4oYXBwLmdldFBhdGgoXCJhcHBEYXRhXCIpLCBcInB1cC1yZWNvcmRlclwiLCBcImNyYXNoZXNcIik7XG4gIG1rZGlyU3luYyhkdW1wRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgYXBwLnNldFBhdGgoXCJjcmFzaER1bXBzXCIsIGR1bXBEaXIpO1xuICBjcmFzaFJlcG9ydGVyLnN0YXJ0KHtcbiAgICBwcm9kdWN0TmFtZTogXCJwdXAtcmVjb3JkZXJcIixcbiAgICB1cGxvYWRUb1NlcnZlcjogZmFsc2UsXG4gICAgY29tcHJlc3M6IGZhbHNlLFxuICAgIGlnbm9yZVN5c3RlbUNyYXNoSGFuZGxlcjogdHJ1ZSxcbiAgfSk7XG4gIGxvZ2dlci5kZWJ1ZyhUQUcsIFwic2V0IGR1bXAgdG9cIiwgZHVtcERpcik7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzI0LlxuXG5leHBvcnQgZnVuY3Rpb24gbm9lcnI8QSBleHRlbmRzIHVua25vd25bXSwgUiwgRD4oZm46ICguLi5hcmdzOiBBKSA9PiBSLCBkZWZhdWx0VmFsdWU6IEQpOiAoLi4uYXJnczogQSkgPT4gUiB8IEQge1xuICByZXR1cm4gKC4uLmFyZ3MpID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmV0ID0gZm4oLi4uYXJncyk7XG4gICAgICBpZiAocmV0IGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICByZXR1cm4gcmV0LmNhdGNoKCgpID0+IGRlZmF1bHRWYWx1ZSkgYXMgUiB8IEQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmV0O1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgICB9XG4gIH07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAxLzMwLlxuXG5pbXBvcnQgeyB0eXBlIENoaWxkUHJvY2VzcywgdHlwZSBTcGF3bk9wdGlvbnMsIHNwYXduIH0gZnJvbSBcIm5vZGU6Y2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0IHRyZWVLaWxsIGZyb20gXCJ0cmVlLWtpbGxcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuL2xvZ2dpbmdcIjtcblxuZXhwb3J0IGNvbnN0IFBVUF9BUkdTX0tFWSA9IFwiLS1wdXAtcHJpdi1hcmdzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJncygpIHtcbiAgY29uc3QgYXJndiA9IHByb2Nlc3MuYXJndjtcbiAgbGV0IHByaXYgPSBhcmd2LmZpbmQoKGFyZykgPT4gYXJnLnN0YXJ0c1dpdGgoUFVQX0FSR1NfS0VZKSk7XG4gIGlmICghcHJpdikge1xuICAgIGxvZ2dlci5kZWJ1ZyhcInByb2Nhcmd2XCIsIGFyZ3YpO1xuICAgIHJldHVybiBwcm9jZXNzLmFyZ3Y7XG4gIH1cbiAgY29uc3QgYXJncyA9IFtcImV4ZWNcIiwgLi4uYXJndi5zbGljZSgtMSldO1xuICBwcml2ID0gQnVmZmVyLmZyb20ocHJpdi5zcGxpdChcIj1cIilbMV0hLCBcImJhc2U2NFwiKS50b1N0cmluZygpO1xuICBhcmdzLnB1c2goLi4uSlNPTi5wYXJzZShwcml2KSk7XG4gIGxvZ2dlci5kZWJ1ZyhcInB1cGFyZ3NcIiwgYXJncyk7XG4gIHJldHVybiBhcmdzO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFByb2Nlc3NIYW5kbGUge1xuICBwcm9jZXNzOiBDaGlsZFByb2Nlc3M7XG4gIHdhaXQ6IFByb21pc2U8dm9pZD47XG4gIGdldCBraWxsZWQoKTogYm9vbGVhbjtcbiAga2lsbCgpOiB2b2lkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXhlYyhjbWQ6IHN0cmluZywgb3B0aW9ucz86IFNwYXduT3B0aW9ucyk6IFByb2Nlc3NIYW5kbGUge1xuICBjb25zdCBwYXJ0cyA9IGNtZC5zcGxpdChcIiBcIikuZmlsdGVyKChzKSA9PiBzLmxlbmd0aCk7XG4gIGNvbnN0IFtjb21tYW5kLCAuLi5hcmdzXSA9IHBhcnRzO1xuICBpZiAoIWNvbW1hbmQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJlbXB0eSBjb21tYW5kXCIpO1xuICB9XG4gIGNvbnN0IHByb2MgPSBzcGF3bihjb21tYW5kLCBhcmdzLCB7XG4gICAgc3RkaW86IFwiaW5oZXJpdFwiLFxuICAgIC4uLm9wdGlvbnMsXG4gIH0pO1xuICBsZXQga2lsbGVkID0gZmFsc2U7XG4gIHJldHVybiB7XG4gICAgcHJvY2VzczogcHJvYyxcbiAgICB3YWl0OiBsb2dnZXIuYXR0YWNoKHByb2MsIGNvbW1hbmQpLFxuICAgIGdldCBraWxsZWQoKSB7XG4gICAgICByZXR1cm4ga2lsbGVkO1xuICAgIH0sXG4gICAga2lsbCgpIHtcbiAgICAgIGlmIChraWxsZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAga2lsbGVkID0gdHJ1ZTtcbiAgICAgIGNvbnN0IHBpZCA9IHByb2MucGlkO1xuICAgICAgaWYgKHBpZCkge1xuICAgICAgICB0cmVlS2lsbChwaWQsIFwiU0lHS0lMTFwiKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHByb2Mua2lsbChcIlNJR0tJTExcIik7XG4gICAgICB9XG4gICAgfSxcbiAgfTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDYuXG5cbmltcG9ydCB6IGZyb20gXCJ6b2RcIjtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfV0lEVEggPSAxOTIwO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfSEVJR0hUID0gMTA4MDtcbmV4cG9ydCBjb25zdCBERUZBVUxUX0ZQUyA9IDMwO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfRFVSQVRJT04gPSA1O1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfV0lORE9XX1RJTUVPVVQgPSAxMDtcbmV4cG9ydCBjb25zdCBERUZBVUxUX09VVF9GSUxFUyA9IFtcIm91dC9odG1sLm1wNFwiLCBcIm91dC9odG1sLndlYm1cIl07XG5cbmV4cG9ydCBjb25zdCByZW5kZXJTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIGR1cmF0aW9uOiB6Lm51bWJlcigpLmRlc2NyaWJlKFwiRHVyYXRpb24gaW4gc2Vjb25kc1wiKSxcbiAgd2lkdGg6IHoubnVtYmVyKCkuZGVzY3JpYmUoXCJWaWRlbyB3aWR0aFwiKSxcbiAgaGVpZ2h0OiB6Lm51bWJlcigpLmRlc2NyaWJlKFwiVmlkZW8gaGVpZ2h0XCIpLFxuICBmcHM6IHoubnVtYmVyKCkuZGVzY3JpYmUoXCJGcmFtZXMgcGVyIHNlY29uZFwiKSxcbiAgd2l0aEF1ZGlvOiB6LmJvb2xlYW4oKS5kZXNjcmliZShcIkNhcHR1cmUgYW5kIGVuY29kZSBhdWRpb1wiKSxcbiAgb3V0RmlsZXM6IHouYXJyYXkoei5zdHJpbmcoKSkuZGVzY3JpYmUoXCJPdXRwdXQgcGF0aHM7IGV4dGVuc2lvbiAoLm1wNC8ud2VibSkgc2VsZWN0cyBlbmNvZGVyXCIpLFxuICB1c2VJbm5lclByb3h5OiB6LmJvb2xlYW4oKS5kZXNjcmliZShcIlVzZSBiaWxpYmlsaSBpbm5lciBwcm94eSBmb3IgcmVzb3VyY2UgYWNjZXNzXCIpLFxuICBkZXRlcm1pbmlzdGljOiB6LmJvb2xlYW4oKS5kZXNjcmliZShcIlJlbmRlciBieSBmcmFtZSByYXRoZXIgdGhhbiByZWNvcmRpbmdcIiksXG4gIGRpc2FibGVHcHU6IHouYm9vbGVhbigpLmRlc2NyaWJlKFwiRGlzYWJsZSBHUFUgcmVuZGVyaW5nLCBtYXkgcmVkdWNlIHBlcmZvcm1hbmNlIGJ1dCBpbmNyZWFzZSBzdGFiaWxpdHlcIiksXG4gIGRpc2FibGVId0NvZGVjOiB6LmJvb2xlYW4oKS5kZXNjcmliZShcIkRpc2FibGUgaGFyZHdhcmUgdmlkZW8gZW5jb2RlciAoTlZFTkMvVmlkZW9Ub29sYm94KSwgdXNlIHNvZnR3YXJlIHgyNjVcIiksXG4gIGRpc2FibGVXZWJTZWN1cml0eTogei5ib29sZWFuKCkuZGVzY3JpYmUoXCJEcm9wIHRoZSBzYW1lLW9yaWdpbiB3YWxsOyByZXF1aXJlZCB0byByZWNvcmQgYSBsb2NhbCBmaWxlXCIpLFxuICBpZ25vcmVDZXJ0aWZpY2F0ZUVycm9yczogelxuICAgIC5ib29sZWFuKClcbiAgICAuZGVzY3JpYmUoXCJSZWNvcmQgb3ZlciBUTFMgdGhlIHBsYXRmb3JtIHJlamVjdHMsIGUuZy4gYSBzZWxmLXNpZ25lZCBpbnRyYW5ldCBob3N0XCIpLFxuICB3aW5kb3dUb2xlcmFudDogei5ib29sZWFuKCkuZGVzY3JpYmUoXCJGYWxsIGJhY2sgdG8gZG9tLXJlYWR5IGlmIHdhcm11cCBsb2FkIHRpbWVzIG91dFwiKSxcbiAgd2luZG93VGltZW91dDogei5udW1iZXIoKS5kZXNjcmliZShcIldpbmRvdyBsb2FkIHRpbWVvdXQgaW4gc2Vjb25kc1wiKSxcbiAgc2NyZWVuc2hvdHM6IHouYXJyYXkoei5udW1iZXIoKSkuZGVzY3JpYmUoXCJTZWNvbmQgbWFya3MgdG8gZHVtcCBmcmFtZSBiaXRtYXBzIGFzIFBOR1wiKSxcbn0pO1xuXG5leHBvcnQgdHlwZSBSZW5kZXJPcHRpb25zID0gei5pbmZlcjx0eXBlb2YgcmVuZGVyU2NoZW1hPjtcblxuZXhwb3J0IHR5cGUgQ29uc29sZUNhbGxiYWNrID0gKGxldmVsOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZykgPT4gdm9pZDtcblxuZXhwb3J0IHR5cGUgUHJvZ3Jlc3NDYWxsYmFjayA9IChwcm9ncmVzczogbnVtYmVyKSA9PiB2b2lkO1xuXG5leHBvcnQgaW50ZXJmYWNlIElQQ1JlbmRlck9wdGlvbnMgZXh0ZW5kcyBSZW5kZXJPcHRpb25zIHtcbiAgc291cmNlOiBzdHJpbmc7XG4gIHNpZ25hbDogQWJvcnRTaWduYWw7XG4gIG9uUHJvZ3Jlc3M6IFByb2dyZXNzQ2FsbGJhY2s7XG4gIG9uQ29uc29sZTogQ29uc29sZUNhbGxiYWNrO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlbmRlclJlc3VsdCB7XG4gIG9wdGlvbnM6IFJlbmRlck9wdGlvbnM7XG4gIHdyaXR0ZW46IG51bWJlcjtcbiAgb3V0RmlsZXM6IHN0cmluZ1tdO1xuICBibGFuazogbnVtYmVyO1xuICBqYW5rOiBudW1iZXI7XG4gIHNjcmVlbnNob3RzOiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRSZW5kZXJPcHRpb25zOiBSZW5kZXJPcHRpb25zID0ge1xuICB3aWR0aDogREVGQVVMVF9XSURUSCxcbiAgaGVpZ2h0OiBERUZBVUxUX0hFSUdIVCxcbiAgZnBzOiBERUZBVUxUX0ZQUyxcbiAgZHVyYXRpb246IERFRkFVTFRfRFVSQVRJT04sXG4gIG91dEZpbGVzOiBERUZBVUxUX09VVF9GSUxFUyxcbiAgd2l0aEF1ZGlvOiBmYWxzZSxcbiAgdXNlSW5uZXJQcm94eTogZmFsc2UsXG4gIGRldGVybWluaXN0aWM6IGZhbHNlLFxuICBkaXNhYmxlR3B1OiBmYWxzZSxcbiAgZGlzYWJsZUh3Q29kZWM6IGZhbHNlLFxuICBkaXNhYmxlV2ViU2VjdXJpdHk6IGZhbHNlLFxuICBpZ25vcmVDZXJ0aWZpY2F0ZUVycm9yczogZmFsc2UsXG4gIHdpbmRvd1RvbGVyYW50OiBmYWxzZSxcbiAgd2luZG93VGltZW91dDogREVGQVVMVF9XSU5ET1dfVElNRU9VVCxcbiAgc2NyZWVuc2hvdHM6IFtdLFxufTtcbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDkuXG5cbmltcG9ydCB7IHJlYWxwYXRoU3luYyB9IGZyb20gXCJub2RlOmZzXCI7XG5pbXBvcnQgeyByZXNvbHZlIH0gZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHsgcHJvZ3JhbSB9IGZyb20gXCJjb21tYW5kZXJcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuL2Jhc2UvbG9nZ2luZ1wiO1xuaW1wb3J0IHsgbm9lcnIgfSBmcm9tIFwiLi9iYXNlL25vZXJyXCI7XG5pbXBvcnQgeyBwYXJzZUFycmF5LCBwYXJzZU51bWJlciwgcGFyc2VTdHJpbmcgfSBmcm9tIFwiLi9iYXNlL3BhcnNlclwiO1xuaW1wb3J0IHsgcGFyZ3MgfSBmcm9tIFwiLi9iYXNlL3Byb2Nlc3NcIjtcbmltcG9ydCB7IGRlZmF1bHRSZW5kZXJPcHRpb25zLCB0eXBlIFJlbmRlck9wdGlvbnMsIHJlbmRlclNjaGVtYSB9IGZyb20gXCIuL3JlbmRlcmVyL3NjaGVtYVwiO1xuXG4vLyBTY2hlbWVkIFVSSXMgcGFzcyB0aHJvdWdoOyBiYXJlIHBhdGhzIGdldCBjYW5vbmljYWxpemVkIGFuZCB3cmFwcGVkIGFzIGZpbGU6Ly8uXG5mdW5jdGlvbiBub3JtYWxpemVTb3VyY2Uoczogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKHMuaW5jbHVkZXMoXCI6Ly9cIikgfHwgcy5zdGFydHNXaXRoKFwiZGF0YTpcIikpIHtcbiAgICByZXR1cm4gcztcbiAgfVxuICBsZXQgYWJzOiBzdHJpbmc7XG4gIHRyeSB7XG4gICAgYWJzID0gcmVhbHBhdGhTeW5jKHMpO1xuICB9IGNhdGNoIHtcbiAgICBhYnMgPSByZXNvbHZlKHMpO1xuICB9XG4gIHJldHVybiBgZmlsZTovLyR7YWJzfWA7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ0xJT3B0aW9ucyB7XG4gIG5hbWU6IHN0cmluZztcbiAgcnVuOiAoc291cmNlOiBzdHJpbmcsIG9wdGlvbnM6IFJlbmRlck9wdGlvbnMpID0+IFByb21pc2U8dW5rbm93bj47XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBtYWtlQ0xJKG9wdGlvbnM6IENMSU9wdGlvbnMpIHtcbiAgY29uc3Qgc2hhcGUgPSByZW5kZXJTY2hlbWEuc2hhcGU7XG4gIGNvbnN0IGQgPSBkZWZhdWx0UmVuZGVyT3B0aW9ucztcbiAgcHJvZ3JhbVxuICAgIC5uYW1lKG9wdGlvbnMubmFtZSlcbiAgICAuYXJndW1lbnQoXCI8c291cmNlPlwiLCBcImZpbGU6Ly8sIGh0dHAocyk6Ly8sIGRhdGE6IFVSSSwgb3IgZmlsZXN5c3RlbSBwYXRoXCIpXG4gICAgLm9wdGlvbihcIi1XLCAtLXdpZHRoIDxudW1iZXI+XCIsIHNoYXBlLndpZHRoLmRlc2NyaXB0aW9uLCBgJHtkLndpZHRofWApXG4gICAgLm9wdGlvbihcIi1ILCAtLWhlaWdodCA8bnVtYmVyPlwiLCBzaGFwZS5oZWlnaHQuZGVzY3JpcHRpb24sIGAke2QuaGVpZ2h0fWApXG4gICAgLm9wdGlvbihcIi1TLCAtLXNjcmVlbnNob3RzIDxzZWNvbmRzPlwiLCBzaGFwZS5zY3JlZW5zaG90cy5kZXNjcmlwdGlvbiwgXCJcIilcbiAgICAub3B0aW9uKFwiLWYsIC0tZnBzIDxudW1iZXI+XCIsIHNoYXBlLmZwcy5kZXNjcmlwdGlvbiwgYCR7ZC5mcHN9YClcbiAgICAub3B0aW9uKFwiLXQsIC0tZHVyYXRpb24gPG51bWJlcj5cIiwgc2hhcGUuZHVyYXRpb24uZGVzY3JpcHRpb24sIGAke2QuZHVyYXRpb259YClcbiAgICAub3B0aW9uKFwiLW8sIC0tb3V0LWZpbGUgPHBhdGhzPlwiLCBzaGFwZS5vdXRGaWxlcy5kZXNjcmlwdGlvbiwgZC5vdXRGaWxlcy5qb2luKFwiLFwiKSlcbiAgICAub3B0aW9uKFwiLWEsIC0td2l0aC1hdWRpb1wiLCBzaGFwZS53aXRoQXVkaW8uZGVzY3JpcHRpb24sIGQud2l0aEF1ZGlvKVxuICAgIC5vcHRpb24oXCItZCwgLS1kZXRlcm1pbmlzdGljXCIsIHNoYXBlLmRldGVybWluaXN0aWMuZGVzY3JpcHRpb24sIGQuZGV0ZXJtaW5pc3RpYylcbiAgICAub3B0aW9uKFwiLS11c2UtaW5uZXItcHJveHlcIiwgc2hhcGUudXNlSW5uZXJQcm94eS5kZXNjcmlwdGlvbiwgZC51c2VJbm5lclByb3h5KVxuICAgIC5vcHRpb24oXCItLWRpc2FibGUtZ3B1XCIsIHNoYXBlLmRpc2FibGVHcHUuZGVzY3JpcHRpb24sIGQuZGlzYWJsZUdwdSlcbiAgICAub3B0aW9uKFwiLS1kaXNhYmxlLWh3LWNvZGVjXCIsIHNoYXBlLmRpc2FibGVId0NvZGVjLmRlc2NyaXB0aW9uLCBkLmRpc2FibGVId0NvZGVjKVxuICAgIC5vcHRpb24oXCItLWRpc2FibGUtd2ViLXNlY3VyaXR5XCIsIHNoYXBlLmRpc2FibGVXZWJTZWN1cml0eS5kZXNjcmlwdGlvbiwgZC5kaXNhYmxlV2ViU2VjdXJpdHkpXG4gICAgLm9wdGlvbihcIi0taWdub3JlLWNlcnRpZmljYXRlLWVycm9yc1wiLCBzaGFwZS5pZ25vcmVDZXJ0aWZpY2F0ZUVycm9ycy5kZXNjcmlwdGlvbiwgZC5pZ25vcmVDZXJ0aWZpY2F0ZUVycm9ycylcbiAgICAub3B0aW9uKFwiLS13aW5kb3ctdG9sZXJhbnRcIiwgc2hhcGUud2luZG93VG9sZXJhbnQuZGVzY3JpcHRpb24sIGQud2luZG93VG9sZXJhbnQpXG4gICAgLm9wdGlvbihcIi0td2luZG93LXRpbWVvdXQgPG51bWJlcj5cIiwgc2hhcGUud2luZG93VGltZW91dC5kZXNjcmlwdGlvbiwgYCR7ZC53aW5kb3dUaW1lb3V0fWApXG4gICAgLmFjdGlvbihhc3luYyAoc291cmNlOiBzdHJpbmcsIG9wdHMpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IG9wdGlvbnMucnVuKG5vcm1hbGl6ZVNvdXJjZShzb3VyY2UpLCB7XG4gICAgICAgICAgd2lkdGg6IG5vZXJyKHBhcnNlTnVtYmVyLCBkLndpZHRoKShvcHRzLndpZHRoKSxcbiAgICAgICAgICBoZWlnaHQ6IG5vZXJyKHBhcnNlTnVtYmVyLCBkLmhlaWdodCkob3B0cy5oZWlnaHQpLFxuICAgICAgICAgIGZwczogbm9lcnIocGFyc2VOdW1iZXIsIGQuZnBzKShvcHRzLmZwcyksXG4gICAgICAgICAgZHVyYXRpb246IG5vZXJyKHBhcnNlTnVtYmVyLCBkLmR1cmF0aW9uKShvcHRzLmR1cmF0aW9uKSxcbiAgICAgICAgICBvdXRGaWxlczogcGFyc2VBcnJheShwYXJzZVN0cmluZykob3B0cy5vdXRGaWxlKSxcbiAgICAgICAgICB3aXRoQXVkaW86IG9wdHMud2l0aEF1ZGlvID8/IGQud2l0aEF1ZGlvLFxuICAgICAgICAgIHVzZUlubmVyUHJveHk6IG9wdHMudXNlSW5uZXJQcm94eSA/PyBkLnVzZUlubmVyUHJveHksXG4gICAgICAgICAgZGV0ZXJtaW5pc3RpYzogb3B0cy5kZXRlcm1pbmlzdGljID8/IGQuZGV0ZXJtaW5pc3RpYyxcbiAgICAgICAgICBkaXNhYmxlR3B1OiBvcHRzLmRpc2FibGVHcHUgPz8gZC5kaXNhYmxlR3B1LFxuICAgICAgICAgIGRpc2FibGVId0NvZGVjOiBvcHRzLmRpc2FibGVId0NvZGVjID8/IGQuZGlzYWJsZUh3Q29kZWMsXG4gICAgICAgICAgZGlzYWJsZVdlYlNlY3VyaXR5OiBvcHRzLmRpc2FibGVXZWJTZWN1cml0eSA/PyBkLmRpc2FibGVXZWJTZWN1cml0eSxcbiAgICAgICAgICBpZ25vcmVDZXJ0aWZpY2F0ZUVycm9yczogb3B0cy5pZ25vcmVDZXJ0aWZpY2F0ZUVycm9ycyA/PyBkLmlnbm9yZUNlcnRpZmljYXRlRXJyb3JzLFxuICAgICAgICAgIHdpbmRvd1RvbGVyYW50OiBvcHRzLndpbmRvd1RvbGVyYW50ID8/IGQud2luZG93VG9sZXJhbnQsXG4gICAgICAgICAgd2luZG93VGltZW91dDogbm9lcnIocGFyc2VOdW1iZXIsIGQud2luZG93VGltZW91dCkob3B0cy53aW5kb3dUaW1lb3V0KSxcbiAgICAgICAgICBzY3JlZW5zaG90czogcGFyc2VBcnJheShwYXJzZU51bWJlcikob3B0cy5zY3JlZW5zaG90cyksXG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBsb2dnZXIuZmF0YWwoZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIGF3YWl0IHByb2dyYW0ucGFyc2VBc3luYyhwYXJncygpKTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMDEuXG5cbmltcG9ydCB0eXBlIHsgQ2hpbGRQcm9jZXNzIH0gZnJvbSBcIm5vZGU6Y2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSBcIm5vZGU6ZXZlbnRzXCI7XG5cbmV4cG9ydCBlbnVtIElwY01zZ1R5cGUge1xuICAvLyBjaGlsZCDihpIgcGFyZW50XG4gIENvbnNvbGUgPSBcImNvbnNvbGVcIixcbiAgUHJvZ3Jlc3MgPSBcInByb2dyZXNzXCIsXG4gIERvbmUgPSBcImRvbmVcIixcbiAgRXJyb3IgPSBcImVycm9yXCIsXG4gIC8vIHBhcmVudCDihpIgY2hpbGRcbiAgQ2FuY2VsID0gXCJjYW5jZWxcIixcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb25zb2xlTXNnIHtcbiAgdHlwZTogSXBjTXNnVHlwZS5Db25zb2xlO1xuICBsZXZlbDogc3RyaW5nO1xuICBtZXNzYWdlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2FuY2VsTXNnIHtcbiAgdHlwZTogSXBjTXNnVHlwZS5DYW5jZWw7XG4gIHJlYXNvbj86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJcGNEb25lUGF5bG9hZCB7XG4gIHdyaXR0ZW46IG51bWJlcjtcbiAgb3V0RmlsZXM6IHN0cmluZ1tdO1xuICBibGFuazogbnVtYmVyO1xuICBqYW5rOiBudW1iZXI7XG4gIHNjcmVlbnNob3RzOiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQcm9ncmVzc01zZyB7XG4gIHR5cGU6IElwY01zZ1R5cGUuUHJvZ3Jlc3M7XG4gIHZhbHVlOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRG9uZU1zZyB7XG4gIHR5cGU6IElwY01zZ1R5cGUuRG9uZTtcbiAgcGF5bG9hZDogSXBjRG9uZVBheWxvYWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXJyb3JNc2cge1xuICB0eXBlOiBJcGNNc2dUeXBlLkVycm9yO1xuICBlcnJvcjogc3RyaW5nO1xufVxuXG5leHBvcnQgdHlwZSBJcGNNc2cgPSBDb25zb2xlTXNnIHwgUHJvZ3Jlc3NNc2cgfCBEb25lTXNnIHwgRXJyb3JNc2cgfCBDYW5jZWxNc2c7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSXBjRXZlbnRzIHtcbiAgcHJvZ3Jlc3M6IFt2YWx1ZTogbnVtYmVyXTtcbiAgY29uc29sZTogW2xldmVsOiBzdHJpbmcsIG1zZzogc3RyaW5nXTtcbiAgZG9uZTogW3BheWxvYWQ6IElwY0RvbmVQYXlsb2FkXTtcbiAgZXJyb3I6IFtlcnJvcjogRXJyb3JdO1xuICBjbG9zZTogW2NvZGU6IG51bWJlciB8IG51bGxdO1xufVxuXG5leHBvcnQgY2xhc3MgSXBjV3JpdGVyIHtcbiAgd3JpdGVDb25zb2xlKGxldmVsOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZykge1xuICAgIHRoaXMuc2VuZCh7IHR5cGU6IElwY01zZ1R5cGUuQ29uc29sZSwgbGV2ZWwsIG1lc3NhZ2UgfSk7XG4gIH1cblxuICB3cml0ZVByb2dyZXNzKHZhbHVlOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLnNlbmQoeyB0eXBlOiBJcGNNc2dUeXBlLlByb2dyZXNzLCB2YWx1ZSB9KTtcbiAgfVxuXG4gIHdyaXRlRXJyb3IoZXJyb3I6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLnNlbmQoeyB0eXBlOiBJcGNNc2dUeXBlLkVycm9yLCBlcnJvciB9KTtcbiAgfVxuXG4gIHdyaXRlRG9uZShwYXlsb2FkOiBJcGNEb25lUGF5bG9hZCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLnNlbmQoeyB0eXBlOiBJcGNNc2dUeXBlLkRvbmUsIHBheWxvYWQgfSk7XG4gIH1cblxuICBwcml2YXRlIHNlbmQobXNnOiBJcGNNc2cpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIGlmICghcHJvY2Vzcy5zZW5kKSB7XG4gICAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgICB9XG4gICAgICBwcm9jZXNzLnNlbmQobXNnLCAoKSA9PiByZXNvbHZlKCkpO1xuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBJcGNSZWFkZXIgZXh0ZW5kcyBFdmVudEVtaXR0ZXI8SXBjRXZlbnRzPiB7XG4gIGNvbnN0cnVjdG9yKGNoaWxkOiBDaGlsZFByb2Nlc3MpIHtcbiAgICBzdXBlcigpO1xuICAgIGNoaWxkLm9uKFwibWVzc2FnZVwiLCAocmF3KSA9PiB7XG4gICAgICBjb25zdCBtc2cgPSByYXcgYXMgSXBjTXNnO1xuICAgICAgc3dpdGNoIChtc2cudHlwZSkge1xuICAgICAgICBjYXNlIElwY01zZ1R5cGUuQ29uc29sZToge1xuICAgICAgICAgIHRoaXMuZW1pdChcImNvbnNvbGVcIiwgbXNnLmxldmVsLCBtc2cubWVzc2FnZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBJcGNNc2dUeXBlLlByb2dyZXNzOiB7XG4gICAgICAgICAgdGhpcy5lbWl0KFwicHJvZ3Jlc3NcIiwgbXNnLnZhbHVlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIElwY01zZ1R5cGUuRG9uZToge1xuICAgICAgICAgIHRoaXMuZW1pdChcImRvbmVcIiwgbXNnLnBheWxvYWQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgSXBjTXNnVHlwZS5FcnJvcjoge1xuICAgICAgICAgIHRoaXMuZW1pdChcImVycm9yXCIsIG5ldyBFcnJvcihtc2cuZXJyb3IpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIGNoaWxkLm9uY2UoXCJleGl0XCIsIChjKSA9PiB0aGlzLmVtaXQoXCJjbG9zZVwiLCBjKSk7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDkuXG5cbmV4cG9ydCBmdW5jdGlvbiBzbGVlcChtczogbnVtYmVyKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCBtcykpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gd2l0aFRpbWVvdXQ8VD4ocDogUHJvbWlzZTxUPiwgbXM6IG51bWJlciwgbGFiZWw6IHN0cmluZyk6IFByb21pc2U8VD4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiByZWplY3QobmV3IEVycm9yKGAke2xhYmVsfSB0aW1lZCBvdXQgYWZ0ZXIgJHttc31tc2ApKSwgbXMpO1xuICAgIHAudGhlbihyZXNvbHZlLCByZWplY3QpLmZpbmFsbHkoKCkgPT4gY2xlYXJUaW1lb3V0KHRpbWVyKSk7XG4gIH0pO1xufVxuXG4vLyBSZWplY3QgYXMgc29vbiBhcyBgc2lnbmFsYCBhYm9ydHMsIGVsc2Ugc2V0dGxlIHdpdGggYHBgOyBuby1vcCBwYXNzdGhyb3VnaCB3aGVuIG5vIHNpZ25hbC5cbmV4cG9ydCBmdW5jdGlvbiBhYm9ydGFibGU8VD4ocDogUHJvbWlzZTxUPiwgc2lnbmFsPzogQWJvcnRTaWduYWwpOiBQcm9taXNlPFQ+IHtcbiAgaWYgKCFzaWduYWwpIHtcbiAgICByZXR1cm4gcDtcbiAgfVxuICByZXR1cm4gbmV3IFByb21pc2U8VD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IG9uQWJvcnQgPSAoKSA9PiByZWplY3Qoc2lnbmFsLnJlYXNvbik7XG4gICAgc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCBvbkFib3J0LCB7IG9uY2U6IHRydWUgfSk7XG4gICAgcC50aGVuKHJlc29sdmUsIHJlamVjdCkuZmluYWxseSgoKSA9PiBzaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsIG9uQWJvcnQpKTtcbiAgfSk7XG59XG5cbi8vIENhbGxiYWNrIG1heSByZXR1cm4gdGhlIG5leHQgaW50ZXJ2YWwgKG1zKSB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBmb3IgdGhlIGZvbGxvd2luZyB0aWNrLlxuZXhwb3J0IGZ1bmN0aW9uIHBlcmlvZGljYWwoY2FsbGJhY2s6IChjb3VudDogbnVtYmVyKSA9PiBQcm9taXNlPG51bWJlciB8IHVuZGVmaW5lZD4gfCB1bmRlZmluZWQsIG1zOiBudW1iZXIpIHtcbiAgbGV0IHRva2VuOiBOb2RlSlMuVGltZW91dDtcbiAgbGV0IGNsb3NlZCA9IGZhbHNlO1xuICBhc3luYyBmdW5jdGlvbiB0aWNrKGNvdW50OiBudW1iZXIpIHtcbiAgICBjb25zdCBuZXh0ID0gYXdhaXQgY2FsbGJhY2soY291bnQpO1xuICAgIGlmIChjbG9zZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdG9rZW4gPSBzZXRUaW1lb3V0KCgpID0+IHRpY2soY291bnQgKyAxKSwgbmV4dCA/PyBtcyk7XG4gIH1cbiAgdG9rZW4gPSBzZXRUaW1lb3V0KCgpID0+IHRpY2soMCksIG1zKTtcbiAgcmV0dXJuICgpID0+IHtcbiAgICBjbG9zZWQgPSB0cnVlO1xuICAgIGNsZWFyVGltZW91dCh0b2tlbik7XG4gIH07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAzLzEzLlxuXG5pbXBvcnQgdHlwZSB7IERlYnVnZ2VyLCBTaXplLCBXZWJDb250ZW50cyB9IGZyb20gXCJlbGVjdHJvblwiO1xuaW1wb3J0IHsgd2l0aFRpbWVvdXQgfSBmcm9tIFwiLi90aW1pbmdcIjtcblxuY29uc3QgQ0RQX1RJTUVPVVRfTVMgPSA1XzAwMDtcblxuZXhwb3J0IGZ1bmN0aW9uIHNlbmQoY2RwOiBEZWJ1Z2dlciwgbWV0aG9kOiBzdHJpbmcsIHBhcmFtcz86IG9iamVjdCk6IFByb21pc2U8dW5rbm93bj4ge1xuICByZXR1cm4gd2l0aFRpbWVvdXQoY2RwLnNlbmRDb21tYW5kKG1ldGhvZCwgcGFyYW1zKSwgQ0RQX1RJTUVPVVRfTVMsIGBjZHAuJHttZXRob2R9YCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBldmFsSW4oY2RwOiBEZWJ1Z2dlciwgZXhwcmVzc2lvbjogc3RyaW5nKTogUHJvbWlzZTx1bmtub3duPiB7XG4gIHJldHVybiB3aXRoVGltZW91dChzZW5kKGNkcCwgXCJSdW50aW1lLmV2YWx1YXRlXCIsIHsgZXhwcmVzc2lvbiB9KSwgQ0RQX1RJTUVPVVRfTVMsIFwiZXZhbEluXCIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYWR2YW5jZVZpcnR1YWxUaW1lKGNkcDogRGVidWdnZXIsIGJ1ZGdldDogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY2RwLm9mZihcIm1lc3NhZ2VcIiwgaGFuZGxlcik7XG4gICAgICByZWplY3QobmV3IEVycm9yKGBhZHZhbmNlVmlydHVhbFRpbWUgdGltZWQgb3V0IGFmdGVyICR7Q0RQX1RJTUVPVVRfTVN9bXNgKSk7XG4gICAgfSwgQ0RQX1RJTUVPVVRfTVMpO1xuXG4gICAgY29uc3QgaGFuZGxlciA9IChfOiBFbGVjdHJvbi5FdmVudCwgbWV0aG9kOiBzdHJpbmcpID0+IHtcbiAgICAgIGlmIChtZXRob2QgPT09IFwiRW11bGF0aW9uLnZpcnR1YWxUaW1lQnVkZ2V0RXhwaXJlZFwiKSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgY2RwLm9mZihcIm1lc3NhZ2VcIiwgaGFuZGxlcik7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNkcC5vbihcIm1lc3NhZ2VcIiwgaGFuZGxlcik7XG4gICAgLy8gTm8gc3RhcnZhdGlvbiBjYXAgKHdvdWxkIHNraXAgcGVuZGluZyB3b3JrIG5vbi1kZXRlcm1pbmlzdGljYWxseSk7IGNhcHR1cmUgc3RhcnRzIHBvc3QgZGlkLXN0b3AtbG9hZGluZywgYW5kIENEUF9USU1FT1VUX01TIHR1cm5zIGEgcmVhbCBzdGFsbCBpbnRvIGEgZmFpbGVkIHJlbmRlci5cbiAgICBzZW5kKGNkcCwgXCJFbXVsYXRpb24uc2V0VmlydHVhbFRpbWVQb2xpY3lcIiwge1xuICAgICAgcG9saWN5OiBcImFkdmFuY2VcIixcbiAgICAgIGJ1ZGdldCxcbiAgICB9KS5jYXRjaCgoZSkgPT4ge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgY2RwLm9mZihcIm1lc3NhZ2VcIiwgaGFuZGxlcik7XG4gICAgICByZWplY3QoZSk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcGF1c2VWaXJ0dWFsVGltZShjZHA6IERlYnVnZ2VyKTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IHNlbmQoY2RwLCBcIkVtdWxhdGlvbi5zZXRWaXJ0dWFsVGltZVBvbGljeVwiLCB7IHBvbGljeTogXCJwYXVzZVwiIH0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVidWlsZERyYXdhYmxlKHdlYjogV2ViQ29udGVudHMsIHNpemU6IFNpemUpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBjZHAgPSB3ZWIuZGVidWdnZXI7XG4gICAgYXdhaXQgc2VuZChjZHAsIFwiRW11bGF0aW9uLmNsZWFyRGV2aWNlTWV0cmljc092ZXJyaWRlXCIsIHt9KTtcbiAgICBhd2FpdCBzZW5kKGNkcCwgXCJFbXVsYXRpb24uc2V0RGV2aWNlTWV0cmljc092ZXJyaWRlXCIsIHtcbiAgICAgIC4uLnNpemUsXG4gICAgICBkZXZpY2VTY2FsZUZhY3RvcjogMSxcbiAgICAgIG1vYmlsZTogZmFsc2UsXG4gICAgfSk7XG4gICAgd2ViLmludmFsaWRhdGUoKTtcbiAgfSBjYXRjaCB7XG4gICAgLy8gU3RoIGxpa2UgdGVhcmRvd24gZGV0YWNoIHJlamVjdHMgaW4tZmxpZ2h0IENEUCBzZW5kczsgYSBsb3N0IHJlcGFpbnQga2ljayBpcyBoYXJtbGVzcy5cbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wOS5cblxuaW1wb3J0IHR5cGUgeyBEZWJ1Z2dlciwgU2l6ZSwgV2ViQ29udGVudHMgfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IGV2YWxJbiB9IGZyb20gXCIuLi9iYXNlL2NkcFwiO1xuaW1wb3J0IHsgd2l0aFRpbWVvdXQgfSBmcm9tIFwiLi4vYmFzZS90aW1pbmdcIjtcblxuZXhwb3J0IGNvbnN0IEZSQU1FX1NZTkNfTUFSS0VSX1dJRFRIID0gMzI7XG5leHBvcnQgY29uc3QgRlJBTUVfU1lOQ19NQVJLRVJfSEVJR0hUID0gMTtcbmV4cG9ydCBjb25zdCBTVEVHT19USUNLX0NIQU5ORUwgPSBcInN0ZWdvLXRpY2tcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkU3RlZ29IVE1MKHRhcmdldFVSTDogc3RyaW5nLCBzaXplOiBTaXplKTogc3RyaW5nIHtcbiAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSBzaXplO1xuICByZXR1cm4gYDwhRE9DVFlQRSBodG1sPlxuPGh0bWw+XG48aGVhZD5cbiAgPG1ldGEgY2hhcnNldD1cIlVURi04XCI+XG4gIDxzdHlsZT5cbiAgICAqIHsgbWFyZ2luOiAwOyBwYWRkaW5nOiAwOyBib3gtc2l6aW5nOiBib3JkZXItYm94OyB9XG4gICAgaHRtbCwgYm9keSB7IHdpZHRoOiAke3dpZHRofXB4OyBoZWlnaHQ6ICR7aGVpZ2h0ICsgMX1weDsgb3ZlcmZsb3c6IGhpZGRlbjsgfVxuICAgICN0YXJnZXQgeyBcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsgXG4gICAgICB0b3A6IDA7IFxuICAgICAgbGVmdDogMDsgXG4gICAgICB3aWR0aDogJHt3aWR0aH1weDsgXG4gICAgICBoZWlnaHQ6ICR7aGVpZ2h0fXB4OyBcbiAgICAgIGJvcmRlcjogbm9uZTsgXG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICB9XG4gICAgI3N0ZWdvIHtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHRvcDogJHtoZWlnaHR9cHg7XG4gICAgICBsZWZ0OiAwO1xuICAgICAgd2lkdGg6ICR7d2lkdGh9cHg7XG4gICAgICBoZWlnaHQ6IDFweDtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgaW1hZ2UtcmVuZGVyaW5nOiBwaXhlbGF0ZWQ7XG4gICAgfVxuICA8L3N0eWxlPlxuPC9oZWFkPlxuPGJvZHk+XG4gIDxpZnJhbWUgaWQ9XCJ0YXJnZXRcIiBzcmM9XCIke3RhcmdldFVSTH1cIj48L2lmcmFtZT5cbiAgPGNhbnZhcyBpZD1cInN0ZWdvXCIgd2lkdGg9XCIke3dpZHRofVwiIGhlaWdodD1cIjFcIj48L2NhbnZhcz5cbiAgPHNjcmlwdD5cbiAgICAoZnVuY3Rpb24oKSB7XG4gICAgICBjb25zdCBXSURUSCA9ICR7d2lkdGh9O1xuICAgICAgY29uc3QgTUFSS0VSX1dJRFRIID0gJHtGUkFNRV9TWU5DX01BUktFUl9XSURUSH07XG4gICAgICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3RlZ28nKTtcbiAgICAgIGNvbnN0IGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcsIHsgd2lsbFJlYWRGcmVxdWVudGx5OiB0cnVlIH0pO1xuICAgICAgbGV0IHN0YXJ0VGltZSA9IG51bGw7XG4gICAgICBsZXQgcmFmSWQgPSBudWxsO1xuXG4gICAgICBmdW5jdGlvbiBlbmNvZGVUaW1lc3RhbXAodGltZXN0YW1wTXMpIHtcbiAgICAgICAgY29uc3QgaW1hZ2VEYXRhID0gY3R4LmNyZWF0ZUltYWdlRGF0YShXSURUSCwgMSk7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBpbWFnZURhdGEuZGF0YTtcblxuICAgICAgICBjb25zdCB0aW1lc3RhbXBJbnQgPSBNYXRoLmZsb29yKHRpbWVzdGFtcE1zKSA+Pj4gMDtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IE1BUktFUl9XSURUSDsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgYml0ID0gKHRpbWVzdGFtcEludCA+Pj4gKE1BUktFUl9XSURUSCAtIDEgLSBpKSkgJiAxO1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gYml0ID8gMjU1IDogMDtcbiAgICAgICAgICBjb25zdCBpZHggPSBpICogNDtcbiAgICAgICAgICBkYXRhW2lkeF0gPSB2YWx1ZTtcbiAgICAgICAgICBkYXRhW2lkeCArIDFdID0gdmFsdWU7XG4gICAgICAgICAgZGF0YVtpZHggKyAyXSA9IHZhbHVlO1xuICAgICAgICAgIGRhdGFbaWR4ICsgM10gPSAyNTU7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGxldCBpID0gTUFSS0VSX1dJRFRIOyBpIDwgV0lEVEg7IGkrKykge1xuICAgICAgICAgIGNvbnN0IGlkeCA9IGkgKiA0O1xuICAgICAgICAgIGRhdGFbaWR4XSA9IDA7XG4gICAgICAgICAgZGF0YVtpZHggKyAxXSA9IDA7XG4gICAgICAgICAgZGF0YVtpZHggKyAyXSA9IDA7XG4gICAgICAgICAgZGF0YVtpZHggKyAzXSA9IDI1NTtcbiAgICAgICAgfVxuXG4gICAgICAgIGN0eC5wdXRJbWFnZURhdGEoaW1hZ2VEYXRhLCAwLCAwKTtcbiAgICAgICAgd2luZG93Ll9fcHVwX3N0ZWdvX3RpY2tfXygpO1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiB1cGRhdGVMb29wKCkge1xuICAgICAgICBpZiAoc3RhcnRUaW1lID09PSBudWxsKSByZXR1cm47XG4gICAgICAgIGNvbnN0IGVsYXBzZWQgPSBwZXJmb3JtYW5jZS5ub3coKSAtIHN0YXJ0VGltZTtcbiAgICAgICAgZW5jb2RlVGltZXN0YW1wKGVsYXBzZWQpO1xuICAgICAgICByYWZJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSh1cGRhdGVMb29wKTtcbiAgICAgIH1cblxuICAgICAgd2luZG93Ll9fcHVwX3N0YXJ0X3N0ZWdvX18gPSAoKSA9PiB7XG4gICAgICAgIHN0YXJ0VGltZSA9IHBlcmZvcm1hbmNlLm5vdygpO1xuICAgICAgICBlbmNvZGVUaW1lc3RhbXAoMCk7XG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSh1cGRhdGVMb29wKTtcbiAgICAgIH07XG5cbiAgICAgIHdpbmRvdy5fX3B1cF9kcmF3X3N0ZWdvX18gPSAobXMpID0+IHtcbiAgICAgICAgZW5jb2RlVGltZXN0YW1wKG1zKTtcbiAgICAgIH07XG5cbiAgICAgIHdpbmRvdy5fX3B1cF9zdG9wX3N0ZWdvX18gPSAoKSA9PiB7XG4gICAgICAgIGlmIChyYWZJZCAhPT0gbnVsbCkge1xuICAgICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHJhZklkKTtcbiAgICAgICAgICByYWZJZCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSkoKTtcbiAgPC9zY3JpcHQ+XG48L2JvZHk+XG48L2h0bWw+YDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlY29kZVN0ZWdvKGJpdG1hcDogQnVmZmVyLCBzaXplOiBTaXplKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSBzaXplO1xuICBpZiAod2lkdGggPCBGUkFNRV9TWU5DX01BUktFUl9XSURUSCB8fCBoZWlnaHQgPCAyKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IG1hcmtlclJvdyA9IGhlaWdodCAtIDE7XG5cbiAgbGV0IHRpbWVzdGFtcCA9IDA7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgRlJBTUVfU1lOQ19NQVJLRVJfV0lEVEg7IGkrKykge1xuICAgIGNvbnN0IHBpeGVsSWR4ID0gKG1hcmtlclJvdyAqIHdpZHRoICsgaSkgKiA0O1xuICAgIGNvbnN0IHIgPSBiaXRtYXBbcGl4ZWxJZHhdID8/IDA7XG4gICAgY29uc3QgYml0ID0gciA+IDEyNyA/IDEgOiAwO1xuICAgIHRpbWVzdGFtcCA9ICh0aW1lc3RhbXAgPDwgMSkgfCBiaXQ7XG4gIH1cblxuICB0aW1lc3RhbXAgPSB0aW1lc3RhbXAgPj4+IDA7XG5cbiAgaWYgKCFOdW1iZXIuaXNGaW5pdGUodGltZXN0YW1wKSB8fCB0aW1lc3RhbXAgPCAwIHx8IHRpbWVzdGFtcCA+IDFlNykge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICByZXR1cm4gdGltZXN0YW1wO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhcnRTdGVnbyhjZHA6IERlYnVnZ2VyKSB7XG4gIHJldHVybiBldmFsSW4oY2RwLCBgX19wdXBfc3RhcnRfc3RlZ29fXygpYCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdG9wU3RlZ28oY2RwOiBEZWJ1Z2dlcikge1xuICByZXR1cm4gZXZhbEluKGNkcCwgYF9fcHVwX3N0b3Bfc3RlZ29fXygpYCk7XG59XG5cbi8vIFBhaW50cyB0aGUgc3RlZ28gcm93IGZvciBgZXhwZWN0ZWRgIG1zIHN5bmNocm9ub3VzbHk7IHRoZSBkYW1hZ2UgcmlkZXMgb3V0IG9uIHRoZSBuZXh0IGNvbXBvc2l0ZWQgZnJhbWUuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZHJhd1N0ZWdvKHdjOiBXZWJDb250ZW50cywgZXhwZWN0ZWQ6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBldmFsSW4od2MuZGVidWdnZXIsIGBfX3B1cF9kcmF3X3N0ZWdvX18oJHtleHBlY3RlZH0pYCk7XG59XG5cbi8vIFJlc29sdmVzIHdoZW4gdGhlIHJlbmRlcmVyIGNvbW1pdHRlZCB0aGUgc3RlZ28gcm93OyBhcm0gQkVGT1JFIGRyYXdTdGVnbyB0byBhdm9pZCBtaXNzaW5nIHRoZSBhY2suXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd2FpdFN0ZWdvVGljayh3YzogV2ViQ29udGVudHMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3Qgc3dhcHBlZCA9IG5ldyBQcm9taXNlKChyKSA9PiB3Yy5pcGMub25jZShTVEVHT19USUNLX0NIQU5ORUwsIHIpKTtcbiAgYXdhaXQgd2l0aFRpbWVvdXQoc3dhcHBlZCwgNV8wMDAsIFwic3RlZ28gdGlja1wiKTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMDEuXG5cbmltcG9ydCB0eXBlIHsgU2l6ZSB9IGZyb20gXCJlbGVjdHJvblwiO1xuaW1wb3J0IHsgcHJvdG9jb2wgfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IGJ1aWxkU3RlZ29IVE1MIH0gZnJvbSBcIi4vc3RlZ29cIjtcblxuY29uc3QgUFVQX1NDSEVNRSA9IFwicHVwXCI7XG5jb25zdCBGUkFNRV9TQ0hFTUUgPSBcInB1cC1mcmFtZVwiO1xuXG4vLyByZWdpc3RlclNjaGVtZXNBc1ByaXZpbGVnZWQgaG9ub3JzIG9ubHkgdGhlIExBU1QgY2FsbCDigJQgcmVnaXN0ZXIgZXZlcnkgY3VzdG9tIHNjaGVtZSBpbiB0aGlzIG9uZSBsaXN0IGJlbG93LlxuY29uc3QgUFJJVklMRUdFRF9QUklWSUxFR0VTID0ge1xuICBzdGFuZGFyZDogdHJ1ZSxcbiAgc2VjdXJlOiB0cnVlLFxuICAvLyBBIHBhZ2UncyBvd24gQ1NQIHdvdWxkIG90aGVyd2lzZSByZWZ1c2UgdGhlIHZpZGVvIGhvb2sncyBmZXRjaCBvZiBwdXAtZnJhbWU6Ly8gc3R1YnMgKGNvbm5lY3Qtc3JjKS5cbiAgYnlwYXNzQ1NQOiB0cnVlLFxuICBzdXBwb3J0RmV0Y2hBUEk6IHRydWUsXG4gIGNvcnNFbmFibGVkOiB0cnVlLFxuICBzdHJlYW06IHRydWUsXG4gIGNvZGVDYWNoZTogdHJ1ZSxcbn0gYXMgY29uc3Q7XG5cbi8vIE11c3QgYmUgY2FsbGVkIHN5bmNocm9ub3VzbHkgYmVmb3JlIGFwcCBpcyByZWFkeS5cbnByb3RvY29sLnJlZ2lzdGVyU2NoZW1lc0FzUHJpdmlsZWdlZChbXG4gIHsgc2NoZW1lOiBQVVBfU0NIRU1FLCBwcml2aWxlZ2VzOiBQUklWSUxFR0VEX1BSSVZJTEVHRVMgfSxcbiAgeyBzY2hlbWU6IEZSQU1FX1NDSEVNRSwgcHJpdmlsZWdlczogUFJJVklMRUdFRF9QUklWSUxFR0VTIH0sXG5dKTtcblxuLy8gTXVzdCBiZSBjYWxsZWQgYWZ0ZXIgYXBwIGlzIHJlYWR5LlxuZXhwb3J0IGZ1bmN0aW9uIHNldHVwUHVwUHJvdG9jb2woKTogdm9pZCB7XG4gIHByb3RvY29sLmhhbmRsZShQVVBfU0NIRU1FLCAocmVxKSA9PiB7XG4gICAgY29uc3QgdXJsID0gbmV3IFVSTChyZXEudXJsKTtcbiAgICBjb25zdCBzcmMgPSB1cmwuc2VhcmNoUGFyYW1zLmdldChcInNyY1wiKSA/PyBcIlwiO1xuICAgIGNvbnN0IHdpZHRoID0gcGFyc2VJbnQodXJsLnNlYXJjaFBhcmFtcy5nZXQoXCJ3XCIpID8/IFwiMFwiLCAxMCk7XG4gICAgY29uc3QgaGVpZ2h0ID0gcGFyc2VJbnQodXJsLnNlYXJjaFBhcmFtcy5nZXQoXCJoXCIpID8/IFwiMFwiLCAxMCk7XG4gICAgY29uc3QgaHRtbCA9IGJ1aWxkU3RlZ29IVE1MKHNyYywgeyB3aWR0aCwgaGVpZ2h0IH0pO1xuICAgIHJldHVybiBuZXcgUmVzcG9uc2UoaHRtbCwgeyBoZWFkZXJzOiB7IFwiY29udGVudC10eXBlXCI6IFwidGV4dC9odG1sXCIgfSB9KTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTdGVnb1VSTChzcmM6IHN0cmluZywgc2l6ZTogU2l6ZSk6IHN0cmluZyB7XG4gIGNvbnN0IHVybCA9IG5ldyBVUkwoYCR7UFVQX1NDSEVNRX06Ly9zdGVnb2ApO1xuICB1cmwuc2VhcmNoUGFyYW1zLnNldChcInNyY1wiLCBzcmMucmVwbGFjZShcImh0dHA6Ly9cIiwgXCJodHRwczovL1wiKSk7XG4gIHVybC5zZWFyY2hQYXJhbXMuc2V0KFwid1wiLCBTdHJpbmcoc2l6ZS53aWR0aCkpO1xuICB1cmwuc2VhcmNoUGFyYW1zLnNldChcImhcIiwgU3RyaW5nKHNpemUuaGVpZ2h0KSk7XG4gIHJldHVybiB1cmwudG9TdHJpbmcoKTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDEvMzAuXG5cbmludGVyZmFjZSBRdWV1ZUVudHJ5IHtcbiAgcnVuOiBWb2lkRnVuY3Rpb247XG4gIHJlamVjdDogKHJlYXNvbjogdW5rbm93bikgPT4gdm9pZDtcbiAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG59XG5cbmV4cG9ydCBjbGFzcyBDb25jdXJyZW5jeUxpbWl0ZXIge1xuICBwcml2YXRlIF9hY3RpdmUgPSAwO1xuICBwcml2YXRlIF9xdWV1ZTogUXVldWVFbnRyeVtdID0gW107XG4gIHByaXZhdGUgX3NpZ25hbHMgPSBuZXcgV2Vha1NldDxBYm9ydFNpZ25hbD4oKTtcbiAgcHJpdmF0ZSBfcmVzb2x2ZT86IFZvaWRGdW5jdGlvbjtcblxuICBjb25zdHJ1Y3RvcihyZWFkb25seSBtYXhDb25jdXJyZW5jeTogbnVtYmVyKSB7fVxuXG4gIGdldCBhY3RpdmUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fYWN0aXZlO1xuICB9XG5cbiAgZ2V0IHBlbmRpbmcoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fcXVldWUubGVuZ3RoO1xuICB9XG5cbiAgZ2V0IHN0YXRzKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBhY3RpdmU6ICR7dGhpcy5hY3RpdmV9LCBwZW5kaW5nOiAke3RoaXMucGVuZGluZ31gO1xuICB9XG5cbiAgYXN5bmMgc2NoZWR1bGU8VD4oZm46ICgpID0+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+IHtcbiAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQsIGZwcywgZGlzYWJsZUh3Q29kZWMsIHNoYXJlZEh3IH0gPSBvcHRzO1xuICAgIHJldHVybiBjcmVhdGVId1ZpZGVvRW5jb2Rlcih7IHdpZHRoLCBoZWlnaHQsIGZwcywgZGlzYWJsZUh3Q29kZWMsIHNoYXJlZEh3IH0sIG11eGVyKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGFzeW5jIHdlYm1WaWRlbyhvcHRzOiBTaW5rT3B0aW9ucywgbXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTxWaWRlb1NldHVwPiB7XG4gICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0LCBmcHMgfSA9IG9wdHM7XG4gICAgY29uc3QgdmlkZW8gPSBhd2FpdCBWaWRlb0VuY29kZXIuY3JlYXRlKHtcbiAgICAgIHdpZHRoLFxuICAgICAgaGVpZ2h0LFxuICAgICAgZnBzLFxuICAgICAgY29kZWNOYW1lOiBGRl9FTkNPREVSX0xJQlZQWF9WUDksXG4gICAgICBjb2RlY09wdHM6IHtcbiAgICAgICAgZGVhZGxpbmU6IFwicmVhbHRpbWVcIixcbiAgICAgICAgXCJjcHUtdXNlZFwiOiBcIjhcIixcbiAgICAgICAgXCJyb3ctbXRcIjogXCIxXCIsXG4gICAgICAgIHRocmVhZHM6IFwiNFwiLFxuICAgICAgfSxcbiAgICAgIGJpdHJhdGU6IDRfMDAwXzAwMCxcbiAgICAgIHBpeGVsRm9ybWF0OiBBVl9QSVhfRk1UX1lVVkE0MjBQLFxuICAgICAgbXV4ZXIsXG4gICAgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHZpZGVvLFxuICAgICAgY29kZWM6IGF3YWl0IENvZGVjU3RhdGUuY3JlYXRlKHdpZHRoLCBoZWlnaHQpLFxuICAgICAgb3duc0h3OiBmYWxzZSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgYXVkaW9Gb3Iob3B0czogU2lua09wdGlvbnMsIG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8QXVkaW9FbmNvZGVyPiB7XG4gICAgLy8gT3B1cyByZWplY3RzIDQ0LjFrLlxuICAgIGNvbnN0IGNmZyA9XG4gICAgICBvcHRzLmtpbmQgPT09IFwibXA0XCJcbiAgICAgICAgPyB7XG4gICAgICAgICAgICBvdXRTYW1wbGVSYXRlOiA0NF8xMDAsXG4gICAgICAgICAgICBvdXRTYW1wbGVGbXQ6IEFWX1NBTVBMRV9GTVRfRkxUUCxcbiAgICAgICAgICAgIGNvZGVjTmFtZTogRkZfRU5DT0RFUl9BQUMsXG4gICAgICAgICAgfVxuICAgICAgICA6IHtcbiAgICAgICAgICAgIG91dFNhbXBsZVJhdGU6IDQ4XzAwMCxcbiAgICAgICAgICAgIG91dFNhbXBsZUZtdDogQVZfU0FNUExFX0ZNVF9GTFQsXG4gICAgICAgICAgICBjb2RlY05hbWU6IEZGX0VOQ09ERVJfTElCT1BVUyxcbiAgICAgICAgICB9O1xuICAgIHJldHVybiBBdWRpb0VuY29kZXIuY3JlYXRlKHtcbiAgICAgIC4uLmNmZyxcbiAgICAgIGdsb2JhbEhlYWRlcjogdHJ1ZSxcbiAgICAgIGJpdHJhdGU6IDEyOF8wMDAsXG4gICAgICBtdXhlcixcbiAgICB9KTtcbiAgfVxuXG4gIHNldElucHV0UmF0ZShzYW1wbGVSYXRlOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9zLmF1ZGlvPy5zZXRJbnB1dFJhdGUoc2FtcGxlUmF0ZSk7XG4gIH1cblxuICBhc3luYyBlbmNvZGVCR1JBKGJncmFGcmFtZTogRnJhbWUpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IGh3VmlkZW8sIG11eGVyIH0gPSB0aGlzLl9zO1xuICAgIGlmIChod1ZpZGVvKSB7XG4gICAgICByZXR1cm4gaHdWaWRlby5lbmNvZGUoYmdyYUZyYW1lLCBtdXhlcik7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnN3RW5jb2RlKGJncmFGcmFtZSk7XG4gIH1cblxuICBhc3luYyBlbmNvZGVEZWNvZGVkRnJhbWUoc3JjOiBGcmFtZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgaHdWaWRlbywgbXV4ZXIgfSA9IHRoaXMuX3M7XG4gICAgaWYgKGh3VmlkZW8pIHtcbiAgICAgIHJldHVybiBod1ZpZGVvLmVuY29kZShzcmMsIG11eGVyKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuc3dFbmNvZGUoc3JjKTtcbiAgfVxuXG4gIGFzeW5jIGVuY29kZUF1ZGlvKHBjbTogQnVmZmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5fcy5hdWRpbz8uZW5jb2RlKHBjbSwgdGhpcy5fcy5tdXhlcik7XG4gIH1cblxuICBhc3luYyBmbHVzaCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IGh3VmlkZW8sIHZpZGVvLCBhdWRpbywgbXV4ZXIgfSA9IHRoaXMuX3M7XG4gICAgYXdhaXQgYXVkaW8/LmZsdXNoKG11eGVyKTtcbiAgICBpZiAoaHdWaWRlbykge1xuICAgICAgYXdhaXQgaHdWaWRlby5mbHVzaChtdXhlcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF3YWl0IHZpZGVvIS5mbHVzaChtdXhlcik7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgW1N5bWJvbC5hc3luY0Rpc3Bvc2VdKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9kaXNwb3NlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9kaXNwb3NlZCA9IHRydWU7XG4gICAgY29uc3QgeyBtdXhlciwgdmlkZW8sIGh3VmlkZW8sIGF1ZGlvLCBjb2RlYywgaHcsIG93bnNIdyB9ID0gdGhpcy5fcztcbiAgICB2aWRlbz8uW1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgIGh3VmlkZW8/LltTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICBhdWRpbz8uW1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgIGNvZGVjPy5bU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgYXdhaXQgbXV4ZXJbU3ltYm9sLmFzeW5jRGlzcG9zZV0oKTtcbiAgICBpZiAob3duc0h3KSB7XG4gICAgICBodz8uZGlzcG9zZSgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc3dFbmNvZGUoc3JjOiBGcmFtZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgdmlkZW8sIGNvZGVjLCBtdXhlciB9ID0gdGhpcy5fcztcbiAgICBvayhjb2RlYz8uc3dzLCBcInN3cyBub3QgaW5pdGlhbGl6ZWRcIik7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGNvZGVjLmRzdC5tYWtlV3JpdGFibGUoKSwgXCJzaW5rRHN0Lm1ha2VXcml0YWJsZVwiKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgY29kZWMuc3dzLnNjYWxlRnJhbWUoY29kZWMuZHN0LCBzcmMpLCBcInNpbmtTd3Muc2NhbGVGcmFtZVwiKTtcbiAgICBhd2FpdCB2aWRlbyEuZW5jb2RlKGNvZGVjLmRzdCwgbXV4ZXIpO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzAxLlxuXG5pbXBvcnQgeyBGRm1wZWdFcnJvciwgdHlwZSBGcmFtZSB9IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQgeyBIYXJkd2FyZUNvbnRleHQgfSBmcm9tIFwibm9kZS1hdi9hcGlcIjtcbmltcG9ydCB7IEFWX1BJWF9GTVRfQkdSQSwgRkZfSFdERVZJQ0VfVFlQRV9DVURBLCBGRl9IV0RFVklDRV9UWVBFX1ZJREVPVE9PTEJPWCB9IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuXG5pbXBvcnQgeyBDb25jdXJyZW5jeUxpbWl0ZXIgfSBmcm9tIFwiLi4vbGltaXRlclwiO1xuaW1wb3J0IHsgQ29kZWNTdGF0ZSB9IGZyb20gXCIuL2NvZGVjXCI7XG5pbXBvcnQgeyBtYWtlRnJhbWUgfSBmcm9tIFwiLi9taXNjXCI7XG5pbXBvcnQgeyBPdXRwdXRTaW5rIH0gZnJvbSBcIi4vc2lua1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEVuY29kZXJQaXBlbGluZU9wdGlvbnMge1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgZnBzOiBudW1iZXI7XG4gIG91dEZpbGVzOiBzdHJpbmdbXTtcbiAgd2l0aEF1ZGlvPzogYm9vbGVhbjtcbiAgZGlzYWJsZUh3Q29kZWM/OiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgUGlwZWxpbmVTdGF0ZSB7XG4gIHNpbmtzOiBPdXRwdXRTaW5rW107XG4gIHNoYXJlZEh3PzogSGFyZHdhcmVDb250ZXh0O1xuICBsaW1pdGVyOiBDb25jdXJyZW5jeUxpbWl0ZXI7XG4gIHBuZ0NvZGVjPzogQ29kZWNTdGF0ZTtcbiAgb3V0RmlsZXM6IHN0cmluZ1tdO1xuICBvcHRzOiBFbmNvZGVyUGlwZWxpbmVPcHRpb25zO1xufVxuXG5leHBvcnQgY2xhc3MgRW5jb2RlclBpcGVsaW5lIHtcbiAgcHJpdmF0ZSBfczogUGlwZWxpbmVTdGF0ZTtcbiAgcHJpdmF0ZSBfZGlzcG9zZWQgPSBmYWxzZTtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHM6IFBpcGVsaW5lU3RhdGUpIHtcbiAgICB0aGlzLl9zID0gcztcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBjcmVhdGUob3B0czogRW5jb2RlclBpcGVsaW5lT3B0aW9ucyk6IFByb21pc2U8RW5jb2RlclBpcGVsaW5lPiB7XG4gICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0LCBmcHMsIG91dEZpbGVzLCB3aXRoQXVkaW8gPSBmYWxzZSwgZGlzYWJsZUh3Q29kZWMgPSBmYWxzZSB9ID0gb3B0cztcbiAgICBpZiAob3V0RmlsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJvdXRGaWxlcyBtdXN0IGNvbnRhaW4gYXQgbGVhc3Qgb25lIHBhdGhcIik7XG4gICAgfVxuXG4gICAgY29uc3Qga2luZHMgPSBvdXRGaWxlcy5tYXAoKHApID0+IE91dHB1dFNpbmsua2luZEZyb21QYXRoKHApKTtcbiAgICBjb25zdCBuZWVkc01wNEh3ID0gIWRpc2FibGVId0NvZGVjICYmIGtpbmRzLmluY2x1ZGVzKFwibXA0XCIpO1xuICAgIC8vIFBhcnRpYWwtY29uc3RydWN0aW9uIHNhZmV0eTogZGlzcG9zZSBzaGFyZWRIdyArIGFueSBzaW5rcyBhbHJlYWR5IGJ1aWx0IGlmIGEgbGF0ZXIgc2luayB0aHJvd3M7IG1vdmUoKSBkaXNvd25zIG9uIHN1Y2Nlc3MuXG4gICAgYXdhaXQgdXNpbmcgc3RhY2sgPSBuZXcgQXN5bmNEaXNwb3NhYmxlU3RhY2soKTtcbiAgICBjb25zdCBzaGFyZWRIdyA9IG5lZWRzTXA0SHcgPyAoSGFyZHdhcmVDb250ZXh0LmF1dG8oKSA/PyB1bmRlZmluZWQpIDogdW5kZWZpbmVkO1xuICAgIGlmIChzaGFyZWRIdykge1xuICAgICAgc3RhY2sudXNlKHNoYXJlZEh3KTtcbiAgICB9XG4gICAgY29uc3QgaXNId0FscGhhQ2FwYWJsZSA9XG4gICAgICBzaGFyZWRIdz8uZGV2aWNlVHlwZU5hbWUgPT09IEZGX0hXREVWSUNFX1RZUEVfVklERU9UT09MQk9YIHx8IHNoYXJlZEh3Py5kZXZpY2VUeXBlTmFtZSA9PT0gRkZfSFdERVZJQ0VfVFlQRV9DVURBO1xuXG4gICAgY29uc3Qgc2lua3M6IE91dHB1dFNpbmtbXSA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3V0RmlsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHNpbmsgPSBhd2FpdCBPdXRwdXRTaW5rLmNyZWF0ZSh7XG4gICAgICAgIG91dEZpbGU6IG91dEZpbGVzW2ldISxcbiAgICAgICAga2luZDoga2luZHNbaV0hLFxuICAgICAgICB3aWR0aCxcbiAgICAgICAgaGVpZ2h0LFxuICAgICAgICBmcHMsXG4gICAgICAgIHdpdGhBdWRpbyxcbiAgICAgICAgZGlzYWJsZUh3Q29kZWMsXG4gICAgICAgIHNoYXJlZEh3OiBraW5kc1tpXSA9PT0gXCJtcDRcIiAmJiBpc0h3QWxwaGFDYXBhYmxlID8gc2hhcmVkSHcgOiB1bmRlZmluZWQsXG4gICAgICB9KTtcbiAgICAgIHN0YWNrLnVzZShzaW5rKTtcbiAgICAgIHNpbmtzLnB1c2goc2luayk7XG4gICAgfVxuXG4gICAgc3RhY2subW92ZSgpO1xuICAgIHJldHVybiBuZXcgRW5jb2RlclBpcGVsaW5lKHsgc2lua3MsIHNoYXJlZEh3LCBsaW1pdGVyOiBuZXcgQ29uY3VycmVuY3lMaW1pdGVyKDEpLCBvdXRGaWxlcywgb3B0cyB9KTtcbiAgfVxuXG4gIHNldHVwQXVkaW8oc2FtcGxlUmF0ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBzaW5rIG9mIHRoaXMuX3Muc2lua3MpIHtcbiAgICAgIHNpbmsuc2V0SW5wdXRSYXRlKHNhbXBsZVJhdGUpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGVuY29kZUJHUkEoaW5wdXQ6IEJ1ZmZlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuX3MubGltaXRlci5zY2hlZHVsZShhc3luYyAoKSA9PiB7XG4gICAgICB1c2luZyBmcmFtZSA9IHRoaXMuYmdyYUZyYW1lKGlucHV0KTtcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKHRoaXMuX3Muc2lua3MubWFwKChzaW5rKSA9PiBzaW5rLmVuY29kZUJHUkEoZnJhbWUpKSk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBlbmNvZGVQTkcocG5nRGF0YTogQnVmZmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5fcy5saW1pdGVyLnNjaGVkdWxlKGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gdGhpcy5fcy5vcHRzO1xuICAgICAgdGhpcy5fcy5wbmdDb2RlYyA/Pz0gYXdhaXQgQ29kZWNTdGF0ZS5jcmVhdGUod2lkdGgsIGhlaWdodCk7XG4gICAgICBjb25zdCBzcmMgPSBhd2FpdCB0aGlzLl9zLnBuZ0NvZGVjLmRlY29kZVBORyhwbmdEYXRhKTtcbiAgICAgIGZvciAoY29uc3Qgc2luayBvZiB0aGlzLl9zLnNpbmtzKSB7XG4gICAgICAgIGF3YWl0IHNpbmsuZW5jb2RlRGVjb2RlZEZyYW1lKHNyYyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBlbmNvZGVBdWRpbyhwY206IEJ1ZmZlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuX3MubGltaXRlci5zY2hlZHVsZShhc3luYyAoKSA9PiB7XG4gICAgICBmb3IgKGNvbnN0IHNpbmsgb2YgdGhpcy5fcy5zaW5rcykge1xuICAgICAgICBhd2FpdCBzaW5rLmVuY29kZUF1ZGlvKHBjbSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBmaW5pc2goKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLl9zLmxpbWl0ZXIuZHJhaW4oKTtcbiAgICAgIGZvciAoY29uc3Qgc2luayBvZiB0aGlzLl9zLnNpbmtzKSB7XG4gICAgICAgIGF3YWl0IHNpbmsuZmx1c2goKTtcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgYXdhaXQgdGhpcy5mcmVlKCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9zLm91dEZpbGVzO1xuICB9XG5cbiAgYXN5bmMgW1N5bWJvbC5hc3luY0Rpc3Bvc2VdKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9kaXNwb3NlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBhd2FpdCB0aGlzLl9zLmxpbWl0ZXIuZHJhaW4oKTtcbiAgICBhd2FpdCB0aGlzLmZyZWUoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZnJlZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fZGlzcG9zZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fZGlzcG9zZWQgPSB0cnVlO1xuICAgIGZvciAoY29uc3Qgc2luayBvZiB0aGlzLl9zLnNpbmtzKSB7XG4gICAgICBhd2FpdCBzaW5rW1N5bWJvbC5hc3luY0Rpc3Bvc2VdKCk7XG4gICAgfVxuICAgIHRoaXMuX3MucG5nQ29kZWM/LltTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICB0aGlzLl9zLnNoYXJlZEh3Py5kaXNwb3NlKCk7XG4gIH1cblxuICBwcml2YXRlIGJncmFGcmFtZShpbnB1dDogQnVmZmVyKTogRnJhbWUge1xuICAgIC8vIFBhcnRpYWwtY29uc3RydWN0aW9uIHNhZmV0eTogZnJlZSBmcmFtZSBpZiBmcm9tQnVmZmVyIHRocm93cyBiZWZvcmUgd2UgcmV0dXJuIGl0LlxuICAgIHVzaW5nIHN0YWNrID0gbmV3IERpc3Bvc2FibGVTdGFjaygpO1xuICAgIGNvbnN0IGZyYW1lID0gc3RhY2sudXNlKG1ha2VGcmFtZSh0aGlzLl9zLm9wdHMud2lkdGgsIHRoaXMuX3Mub3B0cy5oZWlnaHQsIEFWX1BJWF9GTVRfQkdSQSkpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihmcmFtZS5mcm9tQnVmZmVyKGlucHV0KSwgXCJiZ3JhRnJhbWUuZnJvbUJ1ZmZlclwiKTtcbiAgICBzdGFjay5tb3ZlKCk7XG4gICAgcmV0dXJuIGZyYW1lO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA2LlxuXG5pbXBvcnQgdHlwZSB7IE5hdGl2ZUltYWdlLCBTaXplIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0VtcHR5KGltYWdlOiBOYXRpdmVJbWFnZSkge1xuICBjb25zdCBzaXplID0gaW1hZ2UuZ2V0U2l6ZSgpO1xuICBpZiAoc2l6ZS53aWR0aCA9PT0gMCB8fCBzaXplLmhlaWdodCA9PT0gMCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBpbWFnZS5pc0VtcHR5KCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaXplRXF1YWxzKGE6IFNpemUsIGI6IFNpemUpIHtcbiAgcmV0dXJuIGEud2lkdGggPT09IGIud2lkdGggJiYgYS5oZWlnaHQgPT09IGIuaGVpZ2h0O1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNy8wMy5cblxuY29uc3QgR1JJRCA9IDMyOyAvLyByZXNvbHV0aW9uLWluZGVwZW5kZW50IGxhdHRpY2UgZm9yIHRoZSBtb2RhbC1jb2xvciBwcmUtcGFzc1xuY29uc3QgU1RSSURFID0gNDsgLy8gbWFpbi1zY2FuIHN0ZXA7IHJvdy1zdGFnZ2VyZWQgc28gYW55IOKJpTFweCBzdHJ1Y3R1cmUgbGFuZHMgb24gYSBzYW1wbGUgd2l0aGluIDQgcm93c1xuY29uc3QgQ09OVEVOVF9ERUxUQSA9IDg7IC8vIG1heCBwZXItY2hhbm5lbCBkaXN0YW5jZSAoMC0yNTUpIHN0aWxsIGNvdW50ZWQgYXMgdGhlIGRvbWluYW50IGNvbG9yXG5jb25zdCBNSU5fQ09OVEVOVF9TQU1QTEVTID0gMTY7IC8vIHJlbmRlcmVkIGZyYW1lcyBhcmUgbm9pc2UtZnJlZSwgc28gYSBoYW5kZnVsIG9mIG9mZi1kb21pbmFudCBzYW1wbGVzIGlzIHJlYWwgY29udGVudFxuZXhwb3J0IGNvbnN0IEJMQU5LX1dBUk5fUkFUSU8gPSAwLjU7IC8vIGJsYW5rLWZyYW1lIGZyYWN0aW9uIGFib3ZlIHRoaXMgd2FybnMgYXQgcmVuZGVyIGVuZFxuXG4vLyA1IGJpdHMgcGVyIGNoYW5uZWwsIGFscGhhIGluY2x1ZGVkIOKAlCB0cmFuc3BhcmVudCBzdXJmYWNlcyBjYXJyeSBjb250ZW50IGluIGNvdmVyYWdlLCBub3QgY29sb3IuXG5mdW5jdGlvbiBxdWFudGl6ZShiZ3JhOiBCdWZmZXIsIGk6IG51bWJlcik6IG51bWJlciB7XG4gIHJldHVybiAoXG4gICAgKGJncmEucmVhZFVJbnQ4KGkpID4+IDMpIHxcbiAgICAoKGJncmEucmVhZFVJbnQ4KGkgKyAxKSA+PiAzKSA8PCA1KSB8XG4gICAgKChiZ3JhLnJlYWRVSW50OChpICsgMikgPj4gMykgPDwgMTApIHxcbiAgICAoKGJncmEucmVhZFVJbnQ4KGkgKyAzKSA+PiAzKSA8PCAxNSlcbiAgKTtcbn1cblxuLy8gQnl0ZSBvZmZzZXQgb2YgYSBwaXhlbCBjYXJyeWluZyB0aGUgZnJhbWUncyBkb21pbmFudCBjb2xvciAobW9kZSBvdmVyIGEgc3BhcnNlIGxhdHRpY2UpLlxuZnVuY3Rpb24gbW9kYWxQaXhlbChiZ3JhOiBCdWZmZXIsIHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKTogbnVtYmVyIHtcbiAgY29uc3Qgc3RlcFggPSBNYXRoLm1heCgxLCBNYXRoLmZsb29yKHdpZHRoIC8gR1JJRCkpO1xuICBjb25zdCBzdGVwWSA9IE1hdGgubWF4KDEsIE1hdGguZmxvb3IoaGVpZ2h0IC8gR1JJRCkpO1xuICBjb25zdCBjb3VudHMgPSBuZXcgTWFwPG51bWJlciwgbnVtYmVyPigpO1xuICBjb25zdCBmaXJzdElkeCA9IG5ldyBNYXA8bnVtYmVyLCBudW1iZXI+KCk7XG4gIGxldCBiZXN0ID0gMDtcbiAgbGV0IGJlc3RDb3VudCA9IDA7XG4gIGZvciAobGV0IHkgPSAwOyB5IDwgaGVpZ2h0OyB5ICs9IHN0ZXBZKSB7XG4gICAgZm9yIChsZXQgeCA9IDA7IHggPCB3aWR0aDsgeCArPSBzdGVwWCkge1xuICAgICAgY29uc3QgaSA9ICh5ICogd2lkdGggKyB4KSAqIDQ7XG4gICAgICBjb25zdCBrZXkgPSBxdWFudGl6ZShiZ3JhLCBpKTtcbiAgICAgIGNvbnN0IGNvdW50ID0gKGNvdW50cy5nZXQoa2V5KSA/PyAwKSArIDE7XG4gICAgICBjb3VudHMuc2V0KGtleSwgY291bnQpO1xuICAgICAgaWYgKCFmaXJzdElkeC5oYXMoa2V5KSkge1xuICAgICAgICBmaXJzdElkeC5zZXQoa2V5LCBpKTtcbiAgICAgIH1cbiAgICAgIGlmIChjb3VudCA+IGJlc3RDb3VudCkge1xuICAgICAgICBiZXN0Q291bnQgPSBjb3VudDtcbiAgICAgICAgYmVzdCA9IGtleTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZpcnN0SWR4LmdldChiZXN0KSA/PyAwO1xufVxuXG4vLyBCbGFuayA9IGRvbWluYW50LWNvbG9yIGNvdmVyYWdlOiBmZXdlciB0aGFuIE1JTl9DT05URU5UX1NBTVBMRVMgc2FtcGxlcyBkZXZpYXRlIGZyb20gdGhlIG1vZGFsIGNvbG9yLlxuZXhwb3J0IGZ1bmN0aW9uIGlzQmxhbmtGcmFtZShiZ3JhOiBCdWZmZXIsIHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKTogYm9vbGVhbiB7XG4gIGNvbnN0IG0gPSBtb2RhbFBpeGVsKGJncmEsIHdpZHRoLCBoZWlnaHQpO1xuICBjb25zdCBtYiA9IGJncmEucmVhZFVJbnQ4KG0pO1xuICBjb25zdCBtZyA9IGJncmEucmVhZFVJbnQ4KG0gKyAxKTtcbiAgY29uc3QgbXIgPSBiZ3JhLnJlYWRVSW50OChtICsgMik7XG4gIGNvbnN0IG1hID0gYmdyYS5yZWFkVUludDgobSArIDMpO1xuICBsZXQgY29udGVudCA9IDA7XG4gIGZvciAobGV0IHkgPSAwOyB5IDwgaGVpZ2h0OyB5ICs9IFNUUklERSkge1xuICAgIGNvbnN0IG9mZnNldCA9ICh5ID4+IDIpICYgKFNUUklERSAtIDEpO1xuICAgIGZvciAobGV0IHggPSBvZmZzZXQ7IHggPCB3aWR0aDsgeCArPSBTVFJJREUpIHtcbiAgICAgIGNvbnN0IGkgPSAoeSAqIHdpZHRoICsgeCkgKiA0O1xuICAgICAgaWYgKFxuICAgICAgICBNYXRoLmFicyhiZ3JhLnJlYWRVSW50OChpKSAtIG1iKSA+IENPTlRFTlRfREVMVEEgfHxcbiAgICAgICAgTWF0aC5hYnMoYmdyYS5yZWFkVUludDgoaSArIDEpIC0gbWcpID4gQ09OVEVOVF9ERUxUQSB8fFxuICAgICAgICBNYXRoLmFicyhiZ3JhLnJlYWRVSW50OChpICsgMikgLSBtcikgPiBDT05URU5UX0RFTFRBIHx8XG4gICAgICAgIE1hdGguYWJzKGJncmEucmVhZFVJbnQ4KGkgKyAzKSAtIG1hKSA+IENPTlRFTlRfREVMVEFcbiAgICAgICkge1xuICAgICAgICBjb250ZW50Kys7XG4gICAgICAgIGlmIChjb250ZW50ID49IE1JTl9DT05URU5UX1NBTVBMRVMpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBjbGFzcyBCbGFua1N0YXRzIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfd2lkdGg6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfaGVpZ2h0OiBudW1iZXI7XG4gIHByaXZhdGUgX3RvdGFsID0gMDtcbiAgcHJpdmF0ZSBfYmxhbmsgPSAwO1xuXG4gIGNvbnN0cnVjdG9yKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKSB7XG4gICAgdGhpcy5fd2lkdGggPSB3aWR0aDtcbiAgICB0aGlzLl9oZWlnaHQgPSBoZWlnaHQ7XG4gIH1cblxuICBzYW1wbGUoZnJhbWU6IEJ1ZmZlcik6IHZvaWQge1xuICAgIHRoaXMuX3RvdGFsKys7XG4gICAgaWYgKGlzQmxhbmtGcmFtZShmcmFtZSwgdGhpcy5fd2lkdGgsIHRoaXMuX2hlaWdodCkpIHtcbiAgICAgIHRoaXMuX2JsYW5rKys7XG4gICAgfVxuICB9XG5cbiAgLy8gRnJhY3Rpb24gb2Ygd3JpdHRlbiBmcmFtZXMgdGhhdCB3ZXJlIGNvbnRlbnRsZXNzICgwID0gYWxsIGhhZCBjb250ZW50LCAxID0gYWxsIGJsYW5rKS5cbiAgZmluYWxpemUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fdG90YWwgPiAwID8gdGhpcy5fYmxhbmsgLyB0aGlzLl90b3RhbCA6IDA7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDMvMjMuXG5cbmV4cG9ydCBjb25zdCBKQU5LX1dBUk5fU0NPUkUgPSAwLjI1OyAvLyBqYW5rIHNjb3JlIGFib3ZlIHRoaXMgd2FybnMgYXQgcmVuZGVyIGVuZCAofnF1YXJ0ZXIgZHJvcHBlZCBvciBhIH4wLjVzIGZyZWV6ZSlcblxuLy8gRnJhbWUtZHJvcCBxdWFsaXR5IHNjb3JlICgwID0gcGVyZmVjdCwgMSA9IHdvcnN0KTogZ2xvYmFsIGRyb3AgcmF0ZSBhbmQgbG9jYWwgYnVyc3Qgc2V2ZXJpdHkgY29tYmluZWQgdmlhIDEtKDEtZykoMS1sKS5cbmV4cG9ydCBpbnRlcmZhY2UgRHJvcFNjb3JlIHtcbiAgZ2xvYmFsOiBudW1iZXI7XG4gIGxvY2FsOiBudW1iZXI7XG4gIGphbms6IG51bWJlcjtcbiAgZXhwZWN0ZWQ6IG51bWJlcjtcbiAgYWN0dWFsOiBudW1iZXI7XG4gIG1heEJ1cnN0OiBudW1iZXI7XG59XG5cbmV4cG9ydCBjbGFzcyBEcm9wU3RhdHMge1xuICBwcml2YXRlIHJlYWRvbmx5IF9mcHM6IG51bWJlcjtcbiAgcHJpdmF0ZSBfYWN0dWFsID0gMDtcbiAgcHJpdmF0ZSBfY3VycmVudEJ1cnN0ID0gMDtcbiAgcHJpdmF0ZSBfYnVyc3RzOiBudW1iZXJbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKGZwczogbnVtYmVyKSB7XG4gICAgdGhpcy5fZnBzID0gZnBzO1xuICB9XG5cbiAgd3JvdGUoY291bnQgPSAxKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2N1cnJlbnRCdXJzdCA+IDApIHtcbiAgICAgIHRoaXMuX2J1cnN0cy5wdXNoKHRoaXMuX2N1cnJlbnRCdXJzdCk7XG4gICAgICB0aGlzLl9jdXJyZW50QnVyc3QgPSAwO1xuICAgIH1cbiAgICB0aGlzLl9hY3R1YWwgKz0gY291bnQ7XG4gIH1cblxuICBkcm9wcGVkKGNvdW50ID0gMSk6IHZvaWQge1xuICAgIHRoaXMuX2N1cnJlbnRCdXJzdCArPSBjb3VudDtcbiAgfVxuXG4gIGZpbmFsaXplKCk6IERyb3BTY29yZSB7XG4gICAgaWYgKHRoaXMuX2N1cnJlbnRCdXJzdCA+IDApIHtcbiAgICAgIHRoaXMuX2J1cnN0cy5wdXNoKHRoaXMuX2N1cnJlbnRCdXJzdCk7XG4gICAgICB0aGlzLl9jdXJyZW50QnVyc3QgPSAwO1xuICAgIH1cblxuICAgIGxldCB0b3RhbERyb3BwZWQgPSAwO1xuICAgIGxldCBsb2NhbFN1bSA9IDA7XG4gICAgbGV0IG1heEJ1cnN0ID0gMDtcbiAgICBmb3IgKGNvbnN0IGJ1cnN0IG9mIHRoaXMuX2J1cnN0cykge1xuICAgICAgdG90YWxEcm9wcGVkICs9IGJ1cnN0O1xuICAgICAgbWF4QnVyc3QgPSBNYXRoLm1heChtYXhCdXJzdCwgYnVyc3QpO1xuICAgICAgY29uc3QgcGVyY2VwdGlibGUgPSBNYXRoLm1heCgwLCBidXJzdCAtIDEpO1xuICAgICAgbG9jYWxTdW0gKz0gKHBlcmNlcHRpYmxlIC8gdGhpcy5fZnBzKSAqKiAyO1xuICAgIH1cblxuICAgIGNvbnN0IGV4cGVjdGVkID0gdGhpcy5fYWN0dWFsICsgdG90YWxEcm9wcGVkO1xuICAgIGNvbnN0IGcgPSBleHBlY3RlZCA+IDAgPyB0b3RhbERyb3BwZWQgLyBleHBlY3RlZCA6IDA7XG4gICAgY29uc3QgbCA9IE1hdGgubWluKDEsIGxvY2FsU3VtKTtcbiAgICBjb25zdCBzY29yZSA9IDEgLSAoMSAtIGcpICogKDEgLSBsKTtcblxuICAgIHJldHVybiB7IGdsb2JhbDogZywgbG9jYWw6IGwsIGphbms6IHNjb3JlLCBleHBlY3RlZCwgYWN0dWFsOiB0aGlzLl9hY3R1YWwsIG1heEJ1cnN0IH07XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDMvMDIuXG5cbmltcG9ydCB0eXBlIHsgV2ViQ29udGVudHMgfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB0eXBlIHsgRW5jb2RlclBpcGVsaW5lIH0gZnJvbSBcIi4uL2Jhc2UvZW5jb2Rlci9waXBlbGluZVwiO1xuXG5leHBvcnQgY29uc3QgQVVESU9fTUVUQV9DSEFOTkVMID0gXCJhdWRpby1tZXRhXCI7XG5leHBvcnQgY29uc3QgQVVESU9fQ0hVTktfQ0hBTk5FTCA9IFwiYXVkaW8tY2h1bmtcIjtcblxuZXhwb3J0IGludGVyZmFjZSBBdWRpb0xpc3RlbmVyT3B0aW9ucyB7XG4gIHdjOiBXZWJDb250ZW50cztcbiAgZW5jb2RlcjogRW5jb2RlclBpcGVsaW5lO1xuICBnZXRWaWRlb1RpbWVNczogKCkgPT4gbnVtYmVyO1xuICBvbkVycm9yOiAoZXJyb3I6IEVycm9yKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgdHlwZSBBdWRpb0Rpc3Bvc2FsID0gKCkgPT4gdm9pZDtcblxuLy8gQSByZW5kZXIgcXVhbnR1bSBpcyAxMjggc3RlcmVvIGZsb2F0czsgYW55dGhpbmcgcGFzdCBhIHNlY29uZCBvZiBhdWRpbyBjYW1lIGZyb20gYSBwYWdlIGFidXNpbmcgdGhlIGJyaWRnZS5cbmNvbnN0IE1BWF9DSFVOS19CWVRFUyA9IDQ4XzAwMCAqIDIgKiA0O1xuY29uc3QgTUFYX1NBTVBMRV9SQVRFID0gMTkyXzAwMDtcblxuZXhwb3J0IGZ1bmN0aW9uIGF0dGFjaEF1ZGlvTGlzdGVuZXJzKHsgd2MsIGVuY29kZXIsIGdldFZpZGVvVGltZU1zLCBvbkVycm9yIH06IEF1ZGlvTGlzdGVuZXJPcHRpb25zKTogQXVkaW9EaXNwb3NhbCB7XG4gIGNvbnN0IG9uTWV0YSA9IGFzeW5jIChfZTogdW5rbm93biwgZGF0YTogeyBzYW1wbGVSYXRlOiBudW1iZXIgfSkgPT4ge1xuICAgIGNvbnN0IHNhbXBsZVJhdGUgPSBkYXRhLnNhbXBsZVJhdGU7XG4gICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUoc2FtcGxlUmF0ZSkgfHwgc2FtcGxlUmF0ZSA8PSAwIHx8IHNhbXBsZVJhdGUgPiBNQVhfU0FNUExFX1JBVEUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgc3RhcnRNcyA9IGdldFZpZGVvVGltZU1zKCk7XG4gICAgZW5jb2Rlci5zZXR1cEF1ZGlvKHNhbXBsZVJhdGUpO1xuICAgIGNvbnN0IHNpbGVuY2VTYW1wbGVzID0gTWF0aC5jZWlsKChzdGFydE1zICogc2FtcGxlUmF0ZSkgLyAxMDAwKTtcbiAgICBpZiAoc2lsZW5jZVNhbXBsZXMgPD0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgYXdhaXQgZW5jb2Rlci5lbmNvZGVBdWRpbyhCdWZmZXIuYWxsb2Moc2lsZW5jZVNhbXBsZXMgKiAyICogNCkpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBvbkVycm9yKGVycm9yIGFzIEVycm9yKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3Qgb25DaHVuayA9IGFzeW5jIChfZTogdW5rbm93biwgYnVmZmVyOiBCdWZmZXIpID0+IHtcbiAgICAvLyBQYWdlLXdvcmxkIGNvZGUgb3ducyB0aGlzIGNoYW5uZWwsIHNvIHRyZWF0IGl0cyBwYXlsb2FkIGFzIGlucHV0OiB3cm9uZyBzaXplIG1lYW5zIGl0IGlzIG5vdCBvdXIgd29ya2xldCdzIFBDTS5cbiAgICBjb25zdCBieXRlcyA9IEFycmF5QnVmZmVyLmlzVmlldyhidWZmZXIpID8gYnVmZmVyLmJ5dGVMZW5ndGggOiAwO1xuICAgIGlmIChieXRlcyA9PT0gMCB8fCBieXRlcyA+IE1BWF9DSFVOS19CWVRFUyB8fCBieXRlcyAlIDggIT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGVuY29kZXIuZW5jb2RlQXVkaW8oYnVmZmVyKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgb25FcnJvcihlcnJvciBhcyBFcnJvcik7XG4gICAgfVxuICB9O1xuXG4gIHdjLmlwYy5vbihBVURJT19NRVRBX0NIQU5ORUwsIG9uTWV0YSk7XG4gIHdjLmlwYy5vbihBVURJT19DSFVOS19DSEFOTkVMLCBvbkNodW5rKTtcblxuICByZXR1cm4gKCkgPT4ge1xuICAgIHdjLmlwYy5yZW1vdmVMaXN0ZW5lcihBVURJT19NRVRBX0NIQU5ORUwsIG9uTWV0YSk7XG4gICAgd2MuaXBjLnJlbW92ZUxpc3RlbmVyKEFVRElPX0NIVU5LX0NIQU5ORUwsIG9uQ2h1bmspO1xuICB9O1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNy8xNi5cblxuaW1wb3J0IHsgd3JpdGVGaWxlIH0gZnJvbSBcIm5vZGU6ZnMvcHJvbWlzZXNcIjtcbmltcG9ydCB7IGRpcm5hbWUsIGpvaW4gfSBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyBuYXRpdmVJbWFnZSB9IGZyb20gXCJlbGVjdHJvblwiO1xuXG5pbnRlcmZhY2UgU2NyZWVuc2hvdFRhcmdldCB7XG4gIG1zOiBudW1iZXI7XG4gIGluZGV4OiBudW1iZXI7XG4gIHBhdGg6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTY3JlZW5zaG90T3B0aW9ucyB7XG4gIG1hcmtzOiBudW1iZXJbXTtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIG91dEZpbGVzOiBzdHJpbmdbXTtcbn1cblxuLy8gRHVtcHMgcGFpbnRlZCBCR1JBIGZyYW1lcyB0byBQTkcgYXQgcmVxdWVzdGVkIHNlY29uZCBtYXJrczsgcmVzdWx0IG9yZGVyIHRyYWNrcyBpbnB1dCBvcmRlci5cbmV4cG9ydCBjbGFzcyBTY3JlZW5zaG90VGFrZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF9wZW5kaW5nOiBTY3JlZW5zaG90VGFyZ2V0W107XG4gIHByaXZhdGUgcmVhZG9ubHkgX2RvbmUgPSBuZXcgTWFwPG51bWJlciwgc3RyaW5nPigpO1xuICBwcml2YXRlIHJlYWRvbmx5IF93cml0ZXM6IFByb21pc2U8dm9pZD5bXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgX3M6IFNjcmVlbnNob3RPcHRpb25zKSB7XG4gICAgY29uc3QgZGlyID0gZGlybmFtZShfcy5vdXRGaWxlc1swXSA/PyBcIi5cIik7XG4gICAgdGhpcy5fcGVuZGluZyA9IF9zLm1hcmtzXG4gICAgICAubWFwKChzZWMsIGluZGV4KSA9PiAoeyBtczogc2VjICogMTAwMCwgaW5kZXgsIHBhdGg6IGpvaW4oZGlyLCBgc2NyZWVuc2hvdF8ke2luZGV4fS5wbmdgKSB9KSlcbiAgICAgIC5zb3J0KChhLCBiKSA9PiBhLm1zIC0gYi5tcyk7XG4gIH1cblxuICAvLyBEdW1wIGV2ZXJ5IG1hcmsgd2hvc2Ugc2Vjb25kIGhhcyBiZWVuIHJlYWNoZWQgYnkgdGhpcyBmcmFtZS5cbiAgY2FwdHVyZShjdXJyZW50VGltZU1zOiBudW1iZXIsIGJncmE6IEJ1ZmZlcik6IHZvaWQge1xuICAgIHdoaWxlICh0aGlzLl9wZW5kaW5nLmxlbmd0aCA+IDAgJiYgdGhpcy5fcGVuZGluZ1swXSEubXMgPD0gY3VycmVudFRpbWVNcykge1xuICAgICAgdGhpcy50YWtlKHRoaXMuX3BlbmRpbmcuc2hpZnQoKSEsIGJncmEpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFJlY29yZGluZyBvdmVyOiBzbmFwIGFueSBtYXJrIHBhc3QgdGhlIGxhc3QgZnJhbWUgb250byBpdCwgdGhlbiB3cml0ZSBhbGwgc2hvdHMgb3V0LlxuICBhc3luYyBmaW5pc2goZmluYWxCZ3JhPzogQnVmZmVyKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgIHdoaWxlIChmaW5hbEJncmEgJiYgdGhpcy5fcGVuZGluZy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnRha2UodGhpcy5fcGVuZGluZy5zaGlmdCgpISwgZmluYWxCZ3JhKTtcbiAgICB9XG4gICAgYXdhaXQgUHJvbWlzZS5hbGwodGhpcy5fd3JpdGVzKTtcbiAgICByZXR1cm4gWy4uLnRoaXMuX2RvbmUuZW50cmllcygpXS5zb3J0KChhLCBiKSA9PiBhWzBdIC0gYlswXSkubWFwKChbLCBwYXRoXSkgPT4gcGF0aCk7XG4gIH1cblxuICBwcml2YXRlIHRha2UodGFyZ2V0OiBTY3JlZW5zaG90VGFyZ2V0LCBiZ3JhOiBCdWZmZXIpOiB2b2lkIHtcbiAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IHRoaXMuX3M7XG4gICAgY29uc3QgcG5nID0gbmF0aXZlSW1hZ2UuY3JlYXRlRnJvbUJpdG1hcChiZ3JhLCB7IHdpZHRoLCBoZWlnaHQgfSkudG9QTkcoKTtcbiAgICB0aGlzLl9kb25lLnNldCh0YXJnZXQuaW5kZXgsIHRhcmdldC5wYXRoKTtcbiAgICB0aGlzLl93cml0ZXMucHVzaCh3cml0ZUZpbGUodGFyZ2V0LnBhdGgsIHBuZykpO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA1LlxuXG5pbXBvcnQgeyBzZXRUaW1lb3V0IH0gZnJvbSBcIm5vZGU6dGltZXJzL3Byb21pc2VzXCI7XG5pbXBvcnQgeyBzbGVlcCB9IGZyb20gXCIuL3RpbWluZ1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJldHJ5T3B0aW9uczxBcmdzIGV4dGVuZHMgdW5rbm93bltdLCBSZXQ+IHtcbiAgZm46ICguLi5hcmdzOiBBcmdzKSA9PiBQcm9taXNlPFJldD47XG4gIG1heEF0dGVtcHRzPzogbnVtYmVyO1xuICB0aW1lb3V0PzogbnVtYmVyO1xuICAvLyBBYm9ydCBiYWlscyBpbW1lZGlhdGVseSBpbnN0ZWFkIG9mIHJldHJ5aW5nOyBzaWduYWwgaXMgbm90IGF1dG8tdGhyZWFkZWQgaW50byBmbiDigJQgY2FsbGVyIHdpcmVzIGl0IChmZXRjaCwgUzMgc2VuZCkuXG4gIHNpZ25hbD86IEFib3J0U2lnbmFsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXNlUmV0cnk8QXJncyBleHRlbmRzIHVua25vd25bXSwgUmV0Pih7XG4gIGZuLFxuICBtYXhBdHRlbXB0cyA9IDMsXG4gIHRpbWVvdXQsXG4gIHNpZ25hbCxcbn06IFJldHJ5T3B0aW9uczxBcmdzLCBSZXQ+KSB7XG4gIGNvbnN0IHRpbWVvdXRFcnJvciA9IG5ldyBFcnJvcihgdGltZW91dCBvdmVyICR7dGltZW91dH1tc2ApO1xuICByZXR1cm4gYXN5bmMgKC4uLmFyZ3M6IEFyZ3MpID0+IHtcbiAgICBsZXQgYXR0ZW1wdCA9IDA7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIHNpZ25hbD8udGhyb3dJZkFib3J0ZWQoKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHByb21pc2VzID0gW2ZuKC4uLmFyZ3MpXTtcbiAgICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAgICBwcm9taXNlcy5wdXNoKFxuICAgICAgICAgICAgc2V0VGltZW91dCh0aW1lb3V0KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgdGhyb3cgdGltZW91dEVycm9yO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXdhaXQgUHJvbWlzZS5yYWNlKHByb21pc2VzKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgc2lnbmFsPy50aHJvd0lmQWJvcnRlZCgpO1xuICAgICAgICBhdHRlbXB0Kys7XG4gICAgICAgIGlmIChhdHRlbXB0ID49IG1heEF0dGVtcHRzKSB7XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCBzbGVlcCgyICoqIGF0dGVtcHQgKiAxMDAgKyBNYXRoLnJhbmRvbSgpICogMTAwKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA3LzI3LlxuXG5leHBvcnQgdHlwZSBXb3JsZE1vZGUgPSBcInNob290XCIgfCBcInJlbmRlclwiIHwgXCJhdWRpb1wiO1xuXG4vLyBOYW1lcyB0aGUgcGFnZS13b3JsZCBidW5kbGUgaW4gdGhlIHByZWxvYWQncyBhcmd2OyBrZWVwIHRoaXMgbW9kdWxlIGRlcGVuZGVuY3ktZnJlZSwgdGhlIHByZWxvYWQgbG9hZHMgaXQgYXMtaXMuXG5leHBvcnQgY29uc3QgV09STERfQVJHID0gXCItLXB1cC13b3JsZD1cIjtcblxuLy8gUHJlc2VudCBvbmx5IHdoZW4gdGhlIHJ1biBjYXB0dXJlcyBhdWRpbywgc28gYSBwYWdlIGluIGFueSBvdGhlciBtb2RlIGhhcyBubyBjaGFubmVsIHRvIHB1c2ggUENNIHRocm91Z2guXG5leHBvcnQgY29uc3QgQVVESU9fQVJHID0gXCItLXB1cC1hdWRpb1wiO1xuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMy8xMC5cblxuZXhwb3J0IGludGVyZmFjZSBXYWl0T3B0aW9ucyB7XG4gIHRpbWVvdXQ6IG51bWJlcjtcbiAgb25UaW1lb3V0PzogKCkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGNsYXNzIFdhaXRhYmxlRXZlbnQge1xuICBwcml2YXRlIF9wcm9taXNlPzogUHJvbWlzZTx2b2lkPjtcbiAgcHJpdmF0ZSBfcmVzb2x2ZT86ICgpID0+IHZvaWQ7XG4gIHByaXZhdGUgX3RpbWVvdXRUb2tlbj86IE5vZGVKUy5UaW1lb3V0O1xuXG4gIHdhaXQob3B0aW9ucz86IFdhaXRPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX3Byb21pc2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcImFscmVhZHkgd2FpdGluZ1wiKTtcbiAgICB9XG4gICAgdGhpcy5fcHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICB0aGlzLl9yZXNvbHZlID0gcmVzb2x2ZTtcbiAgICAgIGlmIChvcHRpb25zPy50aW1lb3V0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5fdGltZW91dFRva2VuID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgb3B0aW9ucy5vblRpbWVvdXQ/LigpO1xuICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfSwgb3B0aW9ucy50aW1lb3V0KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5fcHJvbWlzZTtcbiAgfVxuXG4gIHNpZ25hbCgpIHtcbiAgICBjbGVhclRpbWVvdXQodGhpcy5fdGltZW91dFRva2VuKTtcbiAgICB0aGlzLl9wcm9taXNlID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuX3Jlc29sdmU/LigpO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA5LlxuXG5pbXBvcnQgeyBVUkwgfSBmcm9tIFwibm9kZTp1cmxcIjtcbmltcG9ydCB0eXBlIHsgQnJvd3NlcldpbmRvdyB9IGZyb20gXCJlbGVjdHJvblwiO1xuaW1wb3J0IHsgQ29uY3VycmVuY3lMaW1pdGVyIH0gZnJvbSBcIi4uL2Jhc2UvbGltaXRlclwiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4uL2Jhc2UvbG9nZ2luZ1wiO1xuaW1wb3J0IHsgV2FpdGFibGVFdmVudCB9IGZyb20gXCIuLi9iYXNlL3dhaXRhYmxlX2V2ZW50XCI7XG5cbmNvbnN0IFRBRyA9IFwiW05ldHdvcmtdXCI7XG5cbmNvbnN0IG1hcCA9IG5ldyBNYXAoW1xuICBbYGpzc3otYm9zcy5oZHNsYi5jb21gLCBganNzei1ib3NzLmJpbGliaWxpLmNvYF0sXG4gIFtgYm9zcy5oZHNsYi5jb21gLCBgc2hqZC1ib3NzLmJpbGliaWxpLmNvYF0sXG4gIFtgdXBvcy1zei1taXJyb3Jjb3MuYmlsaXZpZGVvLmNvbWAsIGBqc3N6LWlubmVyLWJvc3MuYmlsaWJpbGkuY29gXSxcbl0pO1xuXG5jb25zdCB0YXJnZXRzID0gbmV3IFNldChtYXAudmFsdWVzKCkpO1xuXG5jb25zdCBMT0NBTF9TQ0hFTUVTID0gW1wicHVwOlwiLCBcInB1cC1mcmFtZTpcIiwgXCJmaWxlOlwiLCBcImRhdGE6XCIsIFwiYmxvYjpcIiwgXCJjaHJvbWUtZXh0ZW5zaW9uOlwiLCBcImRldnRvb2xzOlwiXTtcblxuZnVuY3Rpb24gaXNMb2NhbFNjaGVtZSh1cmw6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBmb3IgKGNvbnN0IHMgb2YgTE9DQUxfU0NIRU1FUykge1xuICAgIGlmICh1cmwuc3RhcnRzV2l0aChzKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNQcm94eVRhcmdldCh1cmw6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gdXJsLnN0YXJ0c1dpdGgoXCJodHRwXCIpICYmIHRhcmdldHMuaGFzKG5ldyBVUkwodXJsKS5ob3N0bmFtZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm94aWVkVXJsKHVybDogc3RyaW5nKSB7XG4gIGlmICghdXJsLnN0YXJ0c1dpdGgoXCJodHRwXCIpKSB7XG4gICAgcmV0dXJuIHVybDtcbiAgfVxuICBjb25zdCBwYXJzZWQgPSBuZXcgVVJMKHVybCk7XG4gIGNvbnN0IHRhcmdldCA9IG1hcC5nZXQocGFyc2VkLmhvc3RuYW1lKTtcbiAgaWYgKCF0YXJnZXQpIHtcbiAgICByZXR1cm4gdXJsO1xuICB9XG4gIHBhcnNlZC5ob3N0bmFtZSA9IHRhcmdldDtcbiAgcGFyc2VkLnByb3RvY29sID0gXCJodHRwOlwiO1xuICByZXR1cm4gcGFyc2VkLnRvU3RyaW5nKCk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmV0d29ya09wdGlvbnMge1xuICBzb3VyY2U6IHN0cmluZztcbiAgd2luZG93OiBCcm93c2VyV2luZG93O1xuICB1c2VJbm5lclByb3h5PzogYm9vbGVhbjtcbiAgc3R1Yk1lZGlhPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEludGVyY2VwdG9yKHsgc291cmNlLCB3aW5kb3csIHVzZUlubmVyUHJveHksIHN0dWJNZWRpYSB9OiBOZXR3b3JrT3B0aW9ucykge1xuICBjb25zdCByZXEgPSB3aW5kb3cud2ViQ29udGVudHMuc2Vzc2lvbi53ZWJSZXF1ZXN0O1xuICBjb25zdCBsaW1pdGVyID0gbmV3IENvbmN1cnJlbmN5TGltaXRlcigyNTYpO1xuICBjb25zdCBldmVudHMgPSBuZXcgTWFwPHN0cmluZywgV2FpdGFibGVFdmVudD4oKTtcblxuICBhc3luYyBmdW5jdGlvbiB3YWl0KGtleTogc3RyaW5nLCBvblRpbWVvdXQ/OiAoKSA9PiB2b2lkKSB7XG4gICAgY29uc3QgZXZlbnQgPSBuZXcgV2FpdGFibGVFdmVudCgpO1xuICAgIGV2ZW50cy5zZXQoa2V5LCBldmVudCk7XG4gICAgYXdhaXQgZXZlbnQud2FpdCh7IHRpbWVvdXQ6IDVfMDAwLCBvblRpbWVvdXQgfSkuZmluYWxseSgoKSA9PiBldmVudHMuZGVsZXRlKGtleSkpO1xuICB9XG5cbiAgZnVuY3Rpb24gc2lnbmFsKGtleTogc3RyaW5nKSB7XG4gICAgZXZlbnRzLmdldChrZXkpPy5zaWduYWwoKTtcbiAgfVxuXG4gIHJlcS5vbkJlZm9yZVJlcXVlc3QoKGRldGFpbHMsIGNhbGxiYWNrKSA9PiB7XG4gICAgY29uc3QgdXJsID0gZGV0YWlscy51cmw7XG4gICAgLy8gU3dhcCBtZWRpYSBmb3IgYSBmcmFtZS1zZXJ2ZXIgc3R1YiAodHJ1ZSBpbnRyaW5zaWMgc2l6ZS9kdXJhdGlvbikgc28gQmxpbmsgbGF5cyBvdXQgbGlrZSBDaHJvbWUuXG4gICAgaWYgKHN0dWJNZWRpYSAmJiBkZXRhaWxzLnJlc291cmNlVHlwZSA9PT0gXCJtZWRpYVwiICYmICF1cmwuc3RhcnRzV2l0aChcInB1cC1mcmFtZTpcIikpIHtcbiAgICAgIGNhbGxiYWNrKHtcbiAgICAgICAgcmVkaXJlY3RVUkw6IGBwdXAtZnJhbWU6Ly9zdHViP3NyYz0ke2VuY29kZVVSSUNvbXBvbmVudCh1cmwpfWAsXG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcHJveGllZCA9IHVzZUlubmVyUHJveHkgPyBwcm94aWVkVXJsKHVybCkgOiB1cmw7XG4gICAgbGltaXRlci5zY2hlZHVsZSgoKSA9PiB7XG4gICAgICBjb25zdCBrZXkgPSBgJHt3aW5kb3cuaWR9XyR7ZGV0YWlscy5pZH1gO1xuICAgICAgbG9nZ2VyLmRlYnVnKFRBRywgYHN0YXJ0OmAsIHtcbiAgICAgICAga2V5LFxuICAgICAgICB1cmwsXG4gICAgICAgIHByb3hpZWQsXG4gICAgICAgIG1ldGhvZDogZGV0YWlscy5tZXRob2QsXG4gICAgICAgIHNvdXJjZSxcbiAgICAgICAgc3RhdHM6IGxpbWl0ZXIuc3RhdHMsXG4gICAgICB9KTtcbiAgICAgIGlmIChwcm94aWVkID09PSB1cmwpIHtcbiAgICAgICAgY2FsbGJhY2soeyBjYW5jZWw6IGZhbHNlIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2FsbGJhY2soeyBjYW5jZWw6IGZhbHNlLCByZWRpcmVjdFVSTDogcHJveGllZCB9KTtcbiAgICAgIH1cbiAgICAgIGlmIChpc0xvY2FsU2NoZW1lKHVybCkpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHdhaXQoa2V5LCAoKSA9PiB7XG4gICAgICAgIGxvZ2dlci53YXJuKFRBRywgYG1heWJlIHRpbWVvdXQ6YCwge1xuICAgICAgICAgIGtleSxcbiAgICAgICAgICB1cmwsXG4gICAgICAgICAgcHJveGllZCxcbiAgICAgICAgICBtZXRob2Q6IGRldGFpbHMubWV0aG9kLFxuICAgICAgICAgIHNvdXJjZSxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgcmVxLm9uSGVhZGVyc1JlY2VpdmVkKCh7IHVybCwgcmVzcG9uc2VIZWFkZXJzIH0sIGNhbGxiYWNrKSA9PiB7XG4gICAgZGVsZXRlIHJlc3BvbnNlSGVhZGVycz8uW1wieC1mcmFtZS1vcHRpb25zXCJdO1xuICAgIGRlbGV0ZSByZXNwb25zZUhlYWRlcnM/LltcIlgtRnJhbWUtT3B0aW9uc1wiXTtcbiAgICBkZWxldGUgcmVzcG9uc2VIZWFkZXJzPy5bXCJjb250ZW50LXNlY3VyaXR5LXBvbGljeVwiXTtcbiAgICBkZWxldGUgcmVzcG9uc2VIZWFkZXJzPy5bXCJDb250ZW50LVNlY3VyaXR5LVBvbGljeVwiXTtcbiAgICAvLyBQcm94eWluZyByZXdyb3RlIHRoZSBvcmlnaW4sIHNvIGZvbnRzIGFuZCBvdGhlciBDT1JTLW1vZGUgZmV0Y2hlcyBuZWVkIHRoZSBncmFudCB0aGUgb3JpZ2luYWwgaG9zdCB3b3VsZCBoYXZlIGhhZC5cbiAgICBpZiAodXNlSW5uZXJQcm94eSAmJiBpc1Byb3h5VGFyZ2V0KHVybCkpIHtcbiAgICAgIGNhbGxiYWNrKHsgY2FuY2VsOiBmYWxzZSwgcmVzcG9uc2VIZWFkZXJzOiB7IC4uLnJlc3BvbnNlSGVhZGVycywgXCJhY2Nlc3MtY29udHJvbC1hbGxvdy1vcmlnaW5cIjogW1wiKlwiXSB9IH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjYWxsYmFjayh7IGNhbmNlbDogZmFsc2UsIHJlc3BvbnNlSGVhZGVycyB9KTtcbiAgfSk7XG5cbiAgcmVxLm9uQ29tcGxldGVkKChkZXRhaWxzKSA9PiB7XG4gICAgY29uc3Qga2V5ID0gYCR7d2luZG93LmlkfV8ke2RldGFpbHMuaWR9YDtcbiAgICBzaWduYWwoa2V5KTtcbiAgICBsb2dnZXIuZGVidWcoVEFHLCBgY29tcGxldGVkOmAsIHtcbiAgICAgIGtleSxcbiAgICAgIHVybDogZGV0YWlscy51cmwsXG4gICAgICBtZXRob2Q6IGRldGFpbHMubWV0aG9kLFxuICAgICAgc3RhdHVzQ29kZTogZGV0YWlscy5zdGF0dXNDb2RlLFxuICAgICAgc291cmNlLFxuICAgIH0pO1xuICB9KTtcblxuICByZXEub25FcnJvck9jY3VycmVkKChkZXRhaWxzKSA9PiB7XG4gICAgY29uc3Qga2V5ID0gYCR7d2luZG93LmlkfV8ke2RldGFpbHMuaWR9YDtcbiAgICBzaWduYWwoa2V5KTtcbiAgICBjb25zdCB7IHVybCwgbWV0aG9kLCBlcnJvciwgcmVzb3VyY2VUeXBlIH0gPSBkZXRhaWxzO1xuICAgIC8vIFN0dWJiZWQgbWVkaWEgZG93bmdyYWRlczogRVJSX0FCT1JURUQgaXMganVzdCB0aGUgbG9hZGVyIHJlc3RhcnRpbmcgb250byB0aGUgY3Jvc3Mtc2NoZW1lIHJlZGlyZWN0LlxuICAgIGNvbnN0IG1lZGlhID0gc3R1Yk1lZGlhICYmIHJlc291cmNlVHlwZSA9PT0gXCJtZWRpYVwiO1xuICAgIGNvbnN0IGxldmVsID0gbWVkaWEgPyAoZXJyb3IgPT09IFwibmV0OjpFUlJfQUJPUlRFRFwiID8gXCJkZWJ1Z1wiIDogXCJ3YXJuXCIpIDogXCJlcnJvclwiO1xuICAgIGxvZ2dlcltsZXZlbF0oVEFHLCBgZXJyb3I6YCwgeyBrZXksIHVybCwgbWV0aG9kLCBlcnJvciwgcmVzb3VyY2VUeXBlLCBzb3VyY2UgfSk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdW5zZXRJbnRlcmNlcHRvcih3aW5kb3c6IEJyb3dzZXJXaW5kb3cpIHtcbiAgY29uc3QgcmVxID0gd2luZG93LndlYkNvbnRlbnRzLnNlc3Npb24ud2ViUmVxdWVzdDtcbiAgcmVxLm9uQmVmb3JlUmVxdWVzdChudWxsKTtcbiAgcmVxLm9uSGVhZGVyc1JlY2VpdmVkKG51bGwpO1xuICByZXEub25Db21wbGV0ZWQobnVsbCk7XG4gIHJlcS5vbkVycm9yT2NjdXJyZWQobnVsbCk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzI3LlxuXG5pbXBvcnQgeyBqb2luIH0gZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHsgQnJvd3NlcldpbmRvdyB9IGZyb20gXCJlbGVjdHJvblwiO1xuaW1wb3J0IHsgcHVwUGtnUm9vdCwgcHVwUHJlbG9hZCB9IGZyb20gXCIuLi9iYXNlL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4uL2Jhc2UvbG9nZ2luZ1wiO1xuaW1wb3J0IHsgdXNlUmV0cnkgfSBmcm9tIFwiLi4vYmFzZS9yZXRyeVwiO1xuaW1wb3J0IHsgc2xlZXAgfSBmcm9tIFwiLi4vYmFzZS90aW1pbmdcIjtcbmltcG9ydCB7IEFVRElPX0FSRywgV09STERfQVJHLCB0eXBlIFdvcmxkTW9kZSB9IGZyb20gXCIuLi9ydW50aW1lL3dvcmxkXCI7XG5pbXBvcnQgeyBwcm94aWVkVXJsLCBzZXRJbnRlcmNlcHRvciwgdW5zZXRJbnRlcmNlcHRvciB9IGZyb20gXCIuL25ldHdvcmtcIjtcbmltcG9ydCB7IGNyZWF0ZVN0ZWdvVVJMIH0gZnJvbSBcIi4vcHJvdG9jb2xcIjtcbmltcG9ydCB0eXBlIHsgSVBDUmVuZGVyT3B0aW9ucyB9IGZyb20gXCIuL3NjaGVtYVwiO1xuXG5jb25zdCBUQUcgPSBcIltXaW5kb3ddXCI7XG5jb25zdCBUSU1FT1VUX0VSUk9SID0gbmV3IEVycm9yKFwid2luZG93IHRpbWVvdXRcIik7XG5jb25zdCBDT05TT0xFX0lHTk9SRVMgPSBbXCJNaXhlZCBDb250ZW50OiBUaGUgcGFnZSBhdFwiXTtcblxuaW50ZXJmYWNlIEZpbmlzaE9wdGlvbnMge1xuICBzb3VyY2U6IHN0cmluZztcbiAgd2luOiBCcm93c2VyV2luZG93O1xuICBhY3Rpb246ICgpID0+IHZvaWQ7XG4gIHRpbWVvdXRNczogbnVtYmVyO1xuICB0b2xlcmFudD86IGJvb2xlYW47XG4gIHNpZ25hbD86IEFib3J0U2lnbmFsO1xufVxuXG5mdW5jdGlvbiB3YWl0Rm9yRmluaXNoKHsgc291cmNlLCB3aW4sIGFjdGlvbiwgdGltZW91dE1zLCB0b2xlcmFudCwgc2lnbmFsIH06IEZpbmlzaE9wdGlvbnMpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBsZXQgZG9tUmVhZHkgPSBmYWxzZTtcbiAgICAvLyBUb2xlcmFudCBwcm9jZWVkcyBvbiBhIHBhcnRpYWwgRE9NIG9ubHkgYXMgYSB0aW1lb3V0IGZhbGxiYWNrIOKAlCBzdGFydGluZyBvbiBiYXJlIGRvbS1yZWFkeSBsZWF2ZXMgdGhlIGxvYWQgcGVuZGluZyBhbmQgd2VkZ2VzIHZpcnR1YWwgdGltZS5cbiAgICBjb25zdCB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiBkb25lKHRvbGVyYW50ICYmIGRvbVJlYWR5ID8gdW5kZWZpbmVkIDogVElNRU9VVF9FUlJPUiksIHRpbWVvdXRNcyk7XG4gICAgY29uc3QgZG9uZSA9IChlcnI/OiB1bmtub3duKSA9PiB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgfVxuICAgIH07XG4gICAgc2lnbmFsPy50aHJvd0lmQWJvcnRlZCgpO1xuICAgIHNpZ25hbD8uYWRkRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsICgpID0+IGRvbmUoc2lnbmFsLnJlYXNvbiksIHtcbiAgICAgIG9uY2U6IHRydWUsXG4gICAgfSk7XG4gICAgd2luLndlYkNvbnRlbnRzLm9uY2UoXCJkb20tcmVhZHlcIiwgKCkgPT4ge1xuICAgICAgbG9nZ2VyLmRlYnVnKFRBRywgXCJkb20tcmVhZHk6XCIsIHsgc291cmNlIH0pO1xuICAgICAgZG9tUmVhZHkgPSB0cnVlO1xuICAgIH0pO1xuICAgIHdpbi53ZWJDb250ZW50cy5vbmNlKFwiZGlkLXN0b3AtbG9hZGluZ1wiLCAoKSA9PiB7XG4gICAgICBsb2dnZXIuZGVidWcoVEFHLCBcImRpZC1zdG9wLWxvYWRpbmc6XCIsIHsgc291cmNlIH0pO1xuICAgICAgZG9uZSgpO1xuICAgIH0pO1xuICAgIHdpbi53ZWJDb250ZW50cy5vbmNlKFwiZGlkLWZhaWwtbG9hZFwiLCAoX2UsIGNvZGUsIGRlc2MsIHVybCkgPT4ge1xuICAgICAgY29uc3QgbXNnID0gYGRpZC1mYWlsLWxvYWQ6ICR7SlNPTi5zdHJpbmdpZnkoeyB1cmwsIHNvdXJjZSwgY29kZSwgZGVzYyB9KX1gO1xuICAgICAgbG9nZ2VyLmVycm9yKFRBRywgbXNnKTtcbiAgICAgIGRvbmUobmV3IEVycm9yKG1zZykpO1xuICAgIH0pO1xuICAgIHdpbi53ZWJDb250ZW50cy5vbmNlKFwicHJlbG9hZC1lcnJvclwiLCAoX2UsIF9wYXRoLCBlcnJvcikgPT4ge1xuICAgICAgbG9nZ2VyLmVycm9yKFRBRywgYHByZWxvYWQtZXJyb3I6ICR7SlNPTi5zdHJpbmdpZnkoeyBzb3VyY2UsIG1lc3NhZ2U6IGVycm9yLm1lc3NhZ2UgfSl9YCk7XG4gICAgICBkb25lKGVycm9yKTtcbiAgICB9KTtcbiAgICB3aW4ud2ViQ29udGVudHMub25jZShcInJlbmRlci1wcm9jZXNzLWdvbmVcIiwgKF9lLCB7IGV4aXRDb2RlLCByZWFzb24gfSkgPT4ge1xuICAgICAgY29uc3QgbXNnID0gYHJlbmRlci1wcm9jZXNzLWdvbmU6ICR7SlNPTi5zdHJpbmdpZnkoeyBzb3VyY2UsIGV4aXRDb2RlLCByZWFzb24gfSl9YDtcbiAgICAgIGxvZ2dlci5lcnJvcihUQUcsIG1zZyk7XG4gICAgICBkb25lKG5ldyBFcnJvcihtc2cpKTtcbiAgICB9KTtcbiAgICBhY3Rpb24oKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkaXNwb3NlV2luZG93KHdpbjogQnJvd3NlcldpbmRvdykge1xuICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcbiAgICB1bnNldEludGVyY2VwdG9yKHdpbik7XG4gICAgY29uc3QgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGxvZ2dlci53YXJuKFRBRywgXCJmb3JjZSBjbG9zZVwiKTtcbiAgICAgICAgd2luLmRlc3Ryb3koKTtcbiAgICAgIH0gY2F0Y2gge31cbiAgICAgIGRvbmUoKTtcbiAgICB9LCAxMDAwKTtcbiAgICBjb25zdCBkb25lID0gKCkgPT4ge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICAgIHJlc29sdmUoKTtcbiAgICB9O1xuICAgIHdpbi53ZWJDb250ZW50cy5zdG9wUGFpbnRpbmcoKTtcbiAgICB3aW4ud2ViQ29udGVudHMuZGVidWdnZXIuZGV0YWNoKCk7XG4gICAgd2luLm9uY2UoXCJjbG9zZWRcIiwgZG9uZSk7XG4gICAgd2luLmNsb3NlKCk7XG4gIH0pO1xufVxuXG5leHBvcnQgdHlwZSBXaW5kb3dDcmVhdGVkQ2FsbGJhY2sgPSAod2luZG93OiBCcm93c2VyV2luZG93KSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPjtcblxuZXhwb3J0IGludGVyZmFjZSBXaW5kb3dPcHRpb25zIHtcbiAgc291cmNlOiBzdHJpbmc7XG4gIHJlbmRlcmVyOiBJUENSZW5kZXJPcHRpb25zO1xuICB0b2xlcmFudD86IGJvb2xlYW47XG4gIG9uQ3JlYXRlZD86IFdpbmRvd0NyZWF0ZWRDYWxsYmFjaztcbiAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG59XG5cbi8vIFBhZ2Utd29ybGQgaG9vayBidW5kbGVzOyB0aGUgcHJlbG9hZCBldmFsdWF0ZXMgdGhlIG5hbWVkIG9uZSBpbiB0aGUgbWFpbiB3b3JsZCBvZiBldmVyeSBmcmFtZSBpdCBsYW5kcyBpbi5cbmNvbnN0IFdPUkxEX1NDUklQVFM6IFJlY29yZDxXb3JsZE1vZGUsIHN0cmluZz4gPSB7XG4gIHNob290OiBqb2luKHB1cFBrZ1Jvb3QsIFwiZGlzdFwiLCBcInJ1bnRpbWVcIiwgXCJzaG9vdC5nbG9iYWwuanNcIiksXG4gIHJlbmRlcjogam9pbihwdXBQa2dSb290LCBcImRpc3RcIiwgXCJydW50aW1lXCIsIFwicmVuZGVyLmdsb2JhbC5qc1wiKSxcbiAgYXVkaW86IGpvaW4ocHVwUGtnUm9vdCwgXCJkaXN0XCIsIFwicnVudGltZVwiLCBcImF1ZGlvLmdsb2JhbC5qc1wiKSxcbn07XG5cbmZ1bmN0aW9uIHBpY2tXb3JsZFNjcmlwdChyZW5kZXJlcjogSVBDUmVuZGVyT3B0aW9ucyk6IHN0cmluZyB7XG4gIGNvbnN0IG1vZGU6IFdvcmxkTW9kZSA9IHJlbmRlcmVyLmRldGVybWluaXN0aWMgPyBcInNob290XCIgOiByZW5kZXJlci53aXRoQXVkaW8gPyBcImF1ZGlvXCIgOiBcInJlbmRlclwiO1xuICByZXR1cm4gV09STERfU0NSSVBUU1ttb2RlXTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gb3BlbldpbmRvdyh7IHNvdXJjZSwgcmVuZGVyZXIsIHRvbGVyYW50LCBzaWduYWwsIG9uQ3JlYXRlZCB9OiBXaW5kb3dPcHRpb25zKTogUHJvbWlzZTxCcm93c2VyV2luZG93PiB7XG4gIGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgdXNlSW5uZXJQcm94eSB9ID0gcmVuZGVyZXI7XG4gIGNvbnN0IHNyYyA9IHVzZUlubmVyUHJveHkgPyBwcm94aWVkVXJsKHNvdXJjZSkgOiBzb3VyY2U7XG5cbiAgY29uc3Qgd2luID0gbmV3IEJyb3dzZXJXaW5kb3coe1xuICAgIHdpZHRoLFxuICAgIGhlaWdodDogaGVpZ2h0ICsgMSxcbiAgICBtaW5XaWR0aDogd2lkdGgsXG4gICAgbWluSGVpZ2h0OiBoZWlnaHQgKyAxLFxuICAgIG1heFdpZHRoOiB3aWR0aCxcbiAgICBtYXhIZWlnaHQ6IGhlaWdodCArIDEsXG4gICAgcmVzaXphYmxlOiBmYWxzZSxcbiAgICBtaW5pbWl6YWJsZTogZmFsc2UsXG4gICAgbW92YWJsZTogZmFsc2UsXG4gICAgc2hvdzogZmFsc2UsXG4gICAgdHJhbnNwYXJlbnQ6IHRydWUsXG4gICAgYmFja2dyb3VuZENvbG9yOiB1bmRlZmluZWQsXG4gICAgZnJhbWU6IGZhbHNlLFxuICAgIHdlYlByZWZlcmVuY2VzOiB7XG4gICAgICBvZmZzY3JlZW46IHRydWUsXG4gICAgICBiYWNrZ3JvdW5kVGhyb3R0bGluZzogZmFsc2UsXG4gICAgICAvLyBDYXJyaWVzIHRoZSBicmlkZ2UgcHJlbG9hZCBpbnRvIHRoZSB0YXJnZXQgaWZyYW1lOyBub2RlIHN0YXlzIG9mZiwgYXMgbm9kZUludGVncmF0aW9uIGtlZXBzIGl0cyBmYWxzZSBkZWZhdWx0LlxuICAgICAgbm9kZUludGVncmF0aW9uSW5TdWJGcmFtZXM6IHRydWUsXG4gICAgICAvLyBFbGVjdHJvbiBzYW5kYm94ZXMgcHJlbG9hZHMgYnkgZGVmYXVsdCwgd2hpY2ggYnJlYWtzIHRoZWlyIGJ1bmRsZWQgcmVxdWlyZXM7IHRoZSBPUyBzYW5kYm94IGlzIG9mZiByZWdhcmRsZXNzLlxuICAgICAgc2FuZGJveDogZmFsc2UsXG4gICAgICB3ZWJTZWN1cml0eTogIXJlbmRlcmVyLmRpc2FibGVXZWJTZWN1cml0eSxcbiAgICAgIC8vIFRoZSB3cmFwcGVyIGlzIGEgc2VjdXJlIHNjaGVtZSwgc28gaXQgdXBncmFkZXMgdGhlIHRhcmdldCB0byBodHRwcyBhbmQgZXZlcnkgaHR0cCBzdWJyZXNvdXJjZSBpdCBvd25zIHR1cm5zIG1peGVkLlxuICAgICAgYWxsb3dSdW5uaW5nSW5zZWN1cmVDb250ZW50OiB0cnVlLFxuICAgICAgZXhwZXJpbWVudGFsRmVhdHVyZXM6IHRydWUsXG4gICAgICBwcmVsb2FkOiBwdXBQcmVsb2FkLFxuICAgICAgYWRkaXRpb25hbEFyZ3VtZW50czogW2Ake1dPUkxEX0FSR30ke3BpY2tXb3JsZFNjcmlwdChyZW5kZXJlcil9YCwgLi4uKHJlbmRlcmVyLndpdGhBdWRpbyA/IFtBVURJT19BUkddIDogW10pXSxcbiAgICB9LFxuICB9KTtcbiAgc2V0SW50ZXJjZXB0b3Ioe1xuICAgIHNvdXJjZSxcbiAgICB3aW5kb3c6IHdpbixcbiAgICB1c2VJbm5lclByb3h5LFxuICAgIHN0dWJNZWRpYTogcmVuZGVyZXIuZGV0ZXJtaW5pc3RpYyxcbiAgfSk7XG4gIHdpbi53ZWJDb250ZW50cy5kZWJ1Z2dlci5hdHRhY2goXCIxLjNcIik7XG4gIGF3YWl0IG9uQ3JlYXRlZD8uKHdpbik7XG5cbiAgd2luLndlYkNvbnRlbnRzLm9uKFwiY29uc29sZS1tZXNzYWdlXCIsICh7IGxldmVsLCBtZXNzYWdlLCBsaW5lTnVtYmVyLCBzb3VyY2VJZCB9KSA9PiB7XG4gICAgLy8gRHJvcCBoZWFkbGVzcyBub2lzZTogc2VjdXJpdHkgd2FybmluZ3MgYW5kIGh0dHDihpJodHRwcyBhdXRvLXVwZ3JhZGUgbm90aWNlcyBmb3IgaW50ZXJuYWwtcHJveHkgYXNzZXRzLlxuICAgIGlmIChsZXZlbCA9PT0gXCJ3YXJuaW5nXCIgJiYgQ09OU09MRV9JR05PUkVTLmZpbmQoKGkpID0+IG1lc3NhZ2Uuc3RhcnRzV2l0aChpKSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgbXNncyA9IFtUQUcsIFwiY29uc29sZTpcIiwgeyBtZXNzYWdlLCBsaW5lTnVtYmVyLCBzb3VyY2VJZCwgc291cmNlIH1dO1xuICAgIGxldmVsID09PSBcImVycm9yXCIgPyBsb2dnZXIuZXJyb3IoLi4ubXNncykgOiBsb2dnZXIuZGVidWcoLi4ubXNncyk7XG4gICAgcmVuZGVyZXIub25Db25zb2xlKGxldmVsLCBtZXNzYWdlKTtcbiAgfSk7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCB1cmwgPSBjcmVhdGVTdGVnb1VSTChzcmMsIHsgd2lkdGgsIGhlaWdodCB9KTtcbiAgICBhd2FpdCB3YWl0Rm9yRmluaXNoKHtcbiAgICAgIHNvdXJjZSxcbiAgICAgIHdpbixcbiAgICAgIGFjdGlvbjogKCkgPT4gd2luLmxvYWRVUkwodXJsKSxcbiAgICAgIHRpbWVvdXRNczogcmVuZGVyZXIud2luZG93VGltZW91dCAqIDEwMDAsXG4gICAgICB0b2xlcmFudCxcbiAgICAgIHNpZ25hbCxcbiAgICB9KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGF3YWl0IGRpc3Bvc2VXaW5kb3cod2luKTtcbiAgICB0aHJvdyBlO1xuICB9XG5cbiAgcmV0dXJuIHdpbjtcbn1cblxuY29uc3Qgb3BlbldpbmRvd1dpdGhSZXRyeSA9IHVzZVJldHJ5KHsgZm46IG9wZW5XaW5kb3csIG1heEF0dGVtcHRzOiAyIH0pO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9hZFdpbmRvdyh7IHNvdXJjZSwgcmVuZGVyZXIsIG9uQ3JlYXRlZCwgc2lnbmFsIH06IFdpbmRvd09wdGlvbnMpOiBQcm9taXNlPEJyb3dzZXJXaW5kb3c+IHtcbiAgc2lnbmFsPy50aHJvd0lmQWJvcnRlZCgpO1xuICBsZXQgd2FybXVwOiBCcm93c2VyV2luZG93IHwgdW5kZWZpbmVkO1xuICBsZXQgZXJyb3I6IHVua25vd247XG4gIHRyeSB7XG4gICAgd2FybXVwID0gYXdhaXQgb3BlbldpbmRvd1dpdGhSZXRyeSh7IHNvdXJjZSwgcmVuZGVyZXIsIHNpZ25hbCB9KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGVycm9yID0gZTtcbiAgfVxuXG4gIGNvbnN0IG9wZW4gPSAoKSA9PiB7XG4gICAgcmV0dXJuIG9wZW5XaW5kb3coe1xuICAgICAgc291cmNlLFxuICAgICAgcmVuZGVyZXIsXG4gICAgICBvbkNyZWF0ZWQsXG4gICAgICBzaWduYWwsXG4gICAgICB0b2xlcmFudDogcmVuZGVyZXIud2luZG93VG9sZXJhbnQsXG4gICAgfSk7XG4gIH07XG5cbiAgaWYgKHJlbmRlcmVyLndpbmRvd1RvbGVyYW50ICYmIGVycm9yID09PSBUSU1FT1VUX0VSUk9SKSB7XG4gICAgbG9nZ2VyLndhcm4oVEFHLCBgd2FybXVwIHRpbWVvdXQ6ICR7c291cmNlfSwgZmFsbGluZyBiYWNrIHRvIGRvbS1yZWFkeWApO1xuICAgIHJldHVybiBhd2FpdCBvcGVuKCk7XG4gIH1cblxuICBpZiAoZXJyb3IpIHtcbiAgICBjb25zdCB7IG1lc3NhZ2UsIHN0YWNrIH0gPSBlcnJvciBhcyBFcnJvcjtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGZhaWxlZCB0byB3YXJtdXAgd2luZG93OiAke0pTT04uc3RyaW5naWZ5KHsgc291cmNlLCBtZXNzYWdlLCBzdGFjayB9KX1gKTtcbiAgfVxuXG4gIGlmICh3YXJtdXApIHtcbiAgICB3YXJtdXAud2ViQ29udGVudHMucmVtb3ZlQWxsTGlzdGVuZXJzKCk7XG4gICAgdW5zZXRJbnRlcmNlcHRvcih3YXJtdXApO1xuICAgIGF3YWl0IHNsZWVwKDIwMDApO1xuICAgIGF3YWl0IGRpc3Bvc2VXaW5kb3cod2FybXVwKTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IG9wZW4oKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGNvbnN0IHsgbWVzc2FnZSwgc3RhY2sgfSA9IGUgYXMgRXJyb3I7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBmYWlsZWQgdG8gbG9hZCB3aW5kb3c6ICR7SlNPTi5zdHJpbmdpZnkoeyBzb3VyY2UsIG1lc3NhZ2UsIHN0YWNrIH0pfWApO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA5LlxuXG5pbXBvcnQgdHlwZSB7IE5hdGl2ZUltYWdlLCBTaXplIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyByZWJ1aWxkRHJhd2FibGUgfSBmcm9tIFwiLi4vYmFzZS9jZHBcIjtcbmltcG9ydCB7IEVuY29kZXJQaXBlbGluZSB9IGZyb20gXCIuLi9iYXNlL2VuY29kZXIvcGlwZWxpbmVcIjtcbmltcG9ydCB7IHNpemVFcXVhbHMgfSBmcm9tIFwiLi4vYmFzZS9pbWFnZVwiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4uL2Jhc2UvbG9nZ2luZ1wiO1xuaW1wb3J0IHsgQkxBTktfV0FSTl9SQVRJTywgQmxhbmtTdGF0cyB9IGZyb20gXCIuLi9iYXNlL3F1YWxpdHkvYmxhbmtcIjtcbmltcG9ydCB7IERyb3BTdGF0cywgSkFOS19XQVJOX1NDT1JFIH0gZnJvbSBcIi4uL2Jhc2UvcXVhbGl0eS9kcm9wXCI7XG5pbXBvcnQgeyBwZXJpb2RpY2FsIH0gZnJvbSBcIi4uL2Jhc2UvdGltaW5nXCI7XG5pbXBvcnQgeyB0eXBlIEF1ZGlvRGlzcG9zYWwsIGF0dGFjaEF1ZGlvTGlzdGVuZXJzIH0gZnJvbSBcIi4vYXVkaW9cIjtcbmltcG9ydCB0eXBlIHsgSXBjRG9uZVBheWxvYWQgfSBmcm9tIFwiLi9pcGNcIjtcbmltcG9ydCB0eXBlIHsgSVBDUmVuZGVyT3B0aW9ucyB9IGZyb20gXCIuL3NjaGVtYVwiO1xuaW1wb3J0IHsgU2NyZWVuc2hvdFRha2VyIH0gZnJvbSBcIi4vc2NyZWVuc2hvdFwiO1xuaW1wb3J0IHsgZGVjb2RlU3RlZ28sIHN0YXJ0U3RlZ28gfSBmcm9tIFwiLi9zdGVnb1wiO1xuaW1wb3J0IHsgZGlzcG9zZVdpbmRvdywgbG9hZFdpbmRvdyB9IGZyb20gXCIuL3dpbmRvd1wiO1xuXG5jb25zdCBUQUcgPSBcIltSZW5kZXJdXCI7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZW5kZXIob3B0aW9uczogSVBDUmVuZGVyT3B0aW9ucyk6IFByb21pc2U8SXBjRG9uZVBheWxvYWQ+IHtcbiAgY29uc3QgeyBzb3VyY2UsIGZwcywgd2lkdGgsIGhlaWdodCwgZHVyYXRpb24sIHdpdGhBdWRpbywgb3V0RmlsZXMsIGRpc2FibGVId0NvZGVjLCBzaWduYWwsIG9uUHJvZ3Jlc3MgfSA9IG9wdGlvbnM7XG5cbiAgYXdhaXQgdXNpbmcgZW5jb2RlciA9IGF3YWl0IEVuY29kZXJQaXBlbGluZS5jcmVhdGUoeyB3aWR0aCwgaGVpZ2h0LCBmcHMsIG91dEZpbGVzLCB3aXRoQXVkaW8sIGRpc2FibGVId0NvZGVjIH0pO1xuICBjb25zdCB0YWtlciA9IG5ldyBTY3JlZW5zaG90VGFrZXIoeyBtYXJrczogb3B0aW9ucy5zY3JlZW5zaG90cywgd2lkdGgsIGhlaWdodCwgb3V0RmlsZXMgfSk7XG5cbiAgY29uc3QgdG90YWwgPSBNYXRoLmNlaWwoZnBzICogZHVyYXRpb24pO1xuICBjb25zdCBmcmFtZUludGVydmFsID0gMTAwMCAvIGZwcztcbiAgY29uc3QgZnJhbWVTaXplOiBTaXplID0geyB3aWR0aCwgaGVpZ2h0OiBoZWlnaHQgKyAxIH07XG5cbiAgbGV0IHdyaXR0ZW4gPSAwO1xuICBsZXQgbGFzdEZyYW1lOiBCdWZmZXIgfCB1bmRlZmluZWQ7XG4gIGxldCBzY3JlZW5zaG90czogc3RyaW5nW10gPSBbXTtcbiAgbGV0IGxhc3RXcml0dGVuVGltZTogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICBsZXQgcHJvZ3Jlc3MgPSAwO1xuICBsZXQgZW5jb2RlRXJyb3I6IEVycm9yIHwgdW5kZWZpbmVkO1xuICBsZXQgcmVzb2x2ZXI6ICgoKSA9PiB2b2lkKSB8IHVuZGVmaW5lZDtcbiAgbGV0IHJlamVjdGVyOiAoKHJlYXNvbj86IHVua25vd24pID0+IHZvaWQpIHwgdW5kZWZpbmVkO1xuICBsZXQgY2xlYXJTdHVja0NoZWNrOiBWb2lkRnVuY3Rpb24gfCB1bmRlZmluZWQ7XG4gIGNvbnN0IGJsYW5rU3RhdHMgPSBuZXcgQmxhbmtTdGF0cyh3aWR0aCwgaGVpZ2h0KTtcbiAgY29uc3QgZHJvcFN0YXRzID0gbmV3IERyb3BTdGF0cyhmcHMpO1xuXG4gIGxldCBkaXNwb3NlQXVkaW86IEF1ZGlvRGlzcG9zYWwgfCB1bmRlZmluZWQ7XG4gIGNvbnN0IHNjaGVkdWxlRnJhbWUgPSAoZnJhbWU6IEJ1ZmZlcikgPT4ge1xuICAgIHdyaXR0ZW4rKztcbiAgICBibGFua1N0YXRzLnNhbXBsZShmcmFtZSk7XG4gICAgZW5jb2Rlci5lbmNvZGVCR1JBKGZyYW1lKS5jYXRjaCgoZSkgPT4gKGVuY29kZUVycm9yID8/PSBlKSk7XG4gIH07XG5cbiAgY29uc3QgcGFpbnQgPSAoX2U6IHVua25vd24sIF9yOiB1bmtub3duLCBpbWFnZTogTmF0aXZlSW1hZ2UpID0+IHtcbiAgICBlbmNvZGVFcnJvciA/Pz0gc2lnbmFsPy5yZWFzb247XG4gICAgaWYgKGVuY29kZUVycm9yKSB7XG4gICAgICByZWplY3Rlcj8uKGVuY29kZUVycm9yKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBpbWFnZVNpemUgPSBpbWFnZS5nZXRTaXplKCk7XG4gICAgaWYgKCFzaXplRXF1YWxzKGltYWdlU2l6ZSwgZnJhbWVTaXplKSkge1xuICAgICAgLy8gTk9URShBdXRva2FrYSk6IFdlIG11c3QgZW5zdXJlIGZyYW1lIGlzIHJlYWR5IG9uIGVsZWN0cm9uIHY0MStcbiAgICAgIHJlYnVpbGREcmF3YWJsZSh3aW4ud2ViQ29udGVudHMsIGZyYW1lU2l6ZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gRGVjb2RlIHN0ZWdvIHRpbWVzdGFtcCBmcm9tIHRoZSBib3R0b20gcGl4ZWwgcm93IHdpdGhvdXQgZnVsbCBiaXRtYXAgY29weVxuICAgIGNvbnN0IGJpdG1hcCA9IGltYWdlLnRvQml0bWFwKCk7XG4gICAgY29uc3QgY3VycmVudFRpbWUgPSBkZWNvZGVTdGVnbyhiaXRtYXAsIGltYWdlU2l6ZSk7XG4gICAgaWYgKGN1cnJlbnRUaW1lID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGVuY29kZUVycm9yID8/PSBuZXcgRXJyb3IoYG5vIHRpbWVzdGFtcCBAICR7d3JpdHRlbn1gKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBTa2lwIGZyYW1lcyB0aGF0IGFycml2ZSB0b28gc29vbiAoPCA4MCUgb2YgZnJhbWUgaW50ZXJ2YWwpXG4gICAgaWYgKGxhc3RXcml0dGVuVGltZSAhPT0gdW5kZWZpbmVkICYmIGN1cnJlbnRUaW1lIC0gbGFzdFdyaXR0ZW5UaW1lIDwgZnJhbWVJbnRlcnZhbCAqIDAuOCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGNyb3BwZWQgPSBCdWZmZXIuZnJvbShiaXRtYXAuYnVmZmVyLCBiaXRtYXAuYnl0ZU9mZnNldCwgaGVpZ2h0ICogd2lkdGggKiA0KTtcbiAgICBsYXN0RnJhbWUgPSBjcm9wcGVkO1xuICAgIHRha2VyLmNhcHR1cmUoY3VycmVudFRpbWUsIGNyb3BwZWQpO1xuXG4gICAgaWYgKGxhc3RXcml0dGVuVGltZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBzY2hlZHVsZUZyYW1lKGNyb3BwZWQpO1xuICAgICAgZHJvcFN0YXRzLndyb3RlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHRpbWVEZWx0YSA9IGN1cnJlbnRUaW1lIC0gbGFzdFdyaXR0ZW5UaW1lO1xuICAgICAgaWYgKHRpbWVEZWx0YSA8PSBmcmFtZUludGVydmFsICogMS4yKSB7XG4gICAgICAgIHNjaGVkdWxlRnJhbWUoY3JvcHBlZCk7XG4gICAgICAgIGRyb3BTdGF0cy53cm90ZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgZnJhbWVzVG9JbnNlcnQgPSBNYXRoLnJvdW5kKHRpbWVEZWx0YSAvIGZyYW1lSW50ZXJ2YWwpO1xuICAgICAgICBkcm9wU3RhdHMuZHJvcHBlZChmcmFtZXNUb0luc2VydCAtIDEpO1xuICAgICAgICBkcm9wU3RhdHMud3JvdGUoKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmcmFtZXNUb0luc2VydCAmJiB3cml0dGVuIDwgdG90YWw7IGkrKykge1xuICAgICAgICAgIHNjaGVkdWxlRnJhbWUoY3JvcHBlZCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgbGFzdFdyaXR0ZW5UaW1lID0gY3VycmVudFRpbWU7XG5cbiAgICBjb25zdCBuZXdQcm9ncmVzcyA9IE1hdGguZmxvb3IoKHdyaXR0ZW4gLyB0b3RhbCkgKiAxMDApO1xuICAgIGlmIChuZXdQcm9ncmVzcyAhPT0gcHJvZ3Jlc3MpIHtcbiAgICAgIHByb2dyZXNzID0gbmV3UHJvZ3Jlc3M7XG4gICAgICBvblByb2dyZXNzKHByb2dyZXNzKTtcbiAgICB9XG5cbiAgICBjb25zdCBkdXJhdGlvbk1zID0gZHVyYXRpb24gKiAxMDAwO1xuICAgIGlmIChjdXJyZW50VGltZSA+PSBkdXJhdGlvbk1zIC0gZnJhbWVJbnRlcnZhbCAqIDAuNSB8fCB3cml0dGVuID49IHRvdGFsKSB7XG4gICAgICByZXNvbHZlcj8uKCk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IHdpbiA9IGF3YWl0IGxvYWRXaW5kb3coe1xuICAgIHNvdXJjZSxcbiAgICByZW5kZXJlcjogb3B0aW9ucyxcbiAgICBzaWduYWwsXG4gICAgb25DcmVhdGVkOiAod2luKSA9PiB7XG4gICAgICBpZiAod2l0aEF1ZGlvKSB7XG4gICAgICAgIGRpc3Bvc2VBdWRpbyA9IGF0dGFjaEF1ZGlvTGlzdGVuZXJzKHtcbiAgICAgICAgICB3Yzogd2luLndlYkNvbnRlbnRzLFxuICAgICAgICAgIGVuY29kZXIsXG4gICAgICAgICAgZ2V0VmlkZW9UaW1lTXM6ICgpID0+IGxhc3RXcml0dGVuVGltZSA/PyAwLFxuICAgICAgICAgIG9uRXJyb3I6IChlOiBFcnJvcikgPT4gKGVuY29kZUVycm9yID8/PSBlKSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSxcbiAgfSk7XG4gIGNvbnN0IGNkcCA9IHdpbi53ZWJDb250ZW50cy5kZWJ1Z2dlcjtcblxuICB0cnkge1xuICAgIHdpbi53ZWJDb250ZW50cy5zdG9wUGFpbnRpbmcoKTtcbiAgICB3aW4ud2ViQ29udGVudHMuc2V0RnJhbWVSYXRlKGZwcyk7XG4gICAgd2luLndlYkNvbnRlbnRzLm9uKFwicGFpbnRcIiwgcGFpbnQpO1xuICAgIHdpbi53ZWJDb250ZW50cy5zdGFydFBhaW50aW5nKCk7XG4gICAgc2lnbmFsPy50aHJvd0lmQWJvcnRlZCgpO1xuICAgIHNpZ25hbD8uYWRkRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsICgpID0+IHJlamVjdGVyPy4oc2lnbmFsLnJlYXNvbiksIHsgb25jZTogdHJ1ZSB9KTtcbiAgICBhd2FpdCBzdGFydFN0ZWdvKGNkcCk7XG4gICAgYXdhaXQgbmV3IFByb21pc2U8dm9pZD4oKHIsIGopID0+IHtcbiAgICAgIFtyZXNvbHZlciwgcmVqZWN0ZXJdID0gW3IsIGpdO1xuICAgICAgbGV0IGxhc3RXcml0dGVuID0gMDtcbiAgICAgIGxldCBzdHVjayA9IDA7XG4gICAgICBjbGVhclN0dWNrQ2hlY2sgPSBwZXJpb2RpY2FsKGFzeW5jICgpID0+IHtcbiAgICAgICAgaWYgKHdyaXR0ZW4gIT09IGxhc3RXcml0dGVuKSB7XG4gICAgICAgICAgbGFzdFdyaXR0ZW4gPSB3cml0dGVuO1xuICAgICAgICAgIHN0dWNrID0gMDtcbiAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHN0dWNrKys7XG4gICAgICAgIGlmIChzdHVjayA+PSBmcHMpIHtcbiAgICAgICAgICByZWplY3Rlcj8uKG5ldyBFcnJvcihgcmVuZGVyZXIgc3RhbGxlZCBmb3IgJHtNYXRoLnJvdW5kKChzdHVjayAqIDEwMDApIC8gZnBzKX1tcyBAICR7d3JpdHRlbn1gKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3R1Y2sgPT09IDEgfHwgc3R1Y2sgPT09IE1hdGguZmxvb3IoZnBzIC8gMikpIHtcbiAgICAgICAgICBhd2FpdCByZWJ1aWxkRHJhd2FibGUod2luLndlYkNvbnRlbnRzLCBmcmFtZVNpemUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9LCAxMDAwIC8gZnBzKTtcbiAgICB9KTtcbiAgfSBmaW5hbGx5IHtcbiAgICBjbGVhclN0dWNrQ2hlY2s/LigpO1xuICAgIHdpbi53ZWJDb250ZW50cy5vZmYoXCJwYWludFwiLCBwYWludCk7XG4gICAgYXdhaXQgZGlzcG9zZVdpbmRvdyh3aW4pO1xuICAgIGRpc3Bvc2VBdWRpbz8uKCk7XG4gICAgYXdhaXQgZW5jb2Rlci5maW5pc2goKTtcbiAgICBzY3JlZW5zaG90cyA9IGF3YWl0IHRha2VyLmZpbmlzaChsYXN0RnJhbWUpO1xuICB9XG5cbiAgaWYgKGVuY29kZUVycm9yIHx8IHdyaXR0ZW4gPT09IDApIHtcbiAgICB0aHJvdyBlbmNvZGVFcnJvciA/PyBuZXcgRXJyb3IoXCJubyBmcmFtZXMgY2FwdHVyZWRcIik7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgYmxhbmsgPSBibGFua1N0YXRzLmZpbmFsaXplKCk7XG4gICAgaWYgKGJsYW5rID49IEJMQU5LX1dBUk5fUkFUSU8pIHtcbiAgICAgIGxvZ2dlci53YXJuKFRBRywgYCR7c291cmNlfSBibGFuay1mcmFtZSByYXRpbyAke01hdGgucm91bmQoYmxhbmsgKiAxMDApfSUg4oCUIHBvc3NpYmxlIHdoaXRlL2JsYW5rIHNjcmVlbmApO1xuICAgIH1cbiAgICBjb25zdCB7IGphbmsgfSA9IGRyb3BTdGF0cy5maW5hbGl6ZSgpO1xuICAgIGlmIChqYW5rID49IEpBTktfV0FSTl9TQ09SRSkge1xuICAgICAgbG9nZ2VyLndhcm4oVEFHLCBgJHtzb3VyY2V9IGphbmsgc2NvcmUgJHtqYW5rLnRvRml4ZWQoMil9IOKAlCBkcm9wcGVkIGZyYW1lc2ApO1xuICAgIH1cbiAgICByZXR1cm4geyB3cml0dGVuLCBvdXRGaWxlcywgYmxhbmssIHNjcmVlbnNob3RzLCBqYW5rIH07XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgTHUgQW8gKGx1YW9AYmlsaWJpbGkuY29tKSBvbiAyMDI2LzA4LzIxLlxuXG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi4vYmFzZS9sb2dnaW5nXCI7XG5cbmNvbnN0IFRBRyA9IFwiW1JlcmVuZGVyXVwiO1xuXG5leHBvcnQgY29uc3QgTUFYX1JFTkRFUl9BVFRFTVBUUyA9IDM7XG5cbi8vIEFueSByZW5kZXIgZmFpbHVyZSBlYXJucyBhIGZyZXNoIHdpbmRvdytjb21wb3NpdG9yIGF0dGVtcHQ7IGFib3J0cyBzdGlsbCBzdG9wIHRoZSBsb29wLlxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdpdGhSZXJlbmRlcjxUPihzaWduYWw6IEFib3J0U2lnbmFsLCBhY3Rpb246ICgpID0+IFByb21pc2U8VD4pOiBQcm9taXNlPFQ+IHtcbiAgbGV0IGxhc3RFcnI6IHVua25vd247XG4gIGZvciAobGV0IGF0dGVtcHQgPSAxOyBhdHRlbXB0IDw9IE1BWF9SRU5ERVJfQVRURU1QVFM7IGF0dGVtcHQrKykge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgYWN0aW9uKCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgc2lnbmFsLnRocm93SWZBYm9ydGVkKCk7XG4gICAgICBsYXN0RXJyID0gZTtcbiAgICAgIGxvZ2dlci53YXJuKFRBRywgYHJldHJ5ICR7YXR0ZW1wdH0vJHtNQVhfUkVOREVSX0FUVEVNUFRTfTogJHsoZSBhcyBFcnJvcikubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cbiAgdGhyb3cgbGFzdEVycjtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDUvMTguXG5cbmltcG9ydCB0eXBlIHsgV2ViRnJhbWVNYWluIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi4vLi4vYmFzZS9sb2dnaW5nXCI7XG5pbXBvcnQgeyBhYm9ydGFibGUgfSBmcm9tIFwiLi4vLi4vYmFzZS90aW1pbmdcIjtcblxuY29uc3QgVEFHID0gXCJbVmlkZW9dXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWR2YW5jZU9wdGlvbnMge1xuICBmcmFtZTogV2ViRnJhbWVNYWluIHwgdW5kZWZpbmVkO1xuICB0aW1lc3RhbXBNczogbnVtYmVyO1xuICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbn1cblxuLy8gT25seSB0aGUgZGV0ZXJtaW5pc3RpYyByZW5kZXJlciAoc2hvb3QpIGRyaXZlcyB0aGlzOyByZWFsLXRpbWUgdmlkZW9zIHNlbGYtdGljayB2aWEgckFGIGluIHRoZSBwYWdlLlxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFkdmFuY2VWaWRlb3MoeyBmcmFtZSwgdGltZXN0YW1wTXMsIHNpZ25hbCB9OiBBZHZhbmNlT3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICBpZiAoIWZyYW1lPy51cmwpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgc2lnbmFsPy50aHJvd0lmQWJvcnRlZCgpO1xuICB0cnkge1xuICAgIGF3YWl0IGFib3J0YWJsZShcbiAgICAgIGZyYW1lLmV4ZWN1dGVKYXZhU2NyaXB0KFxuICAgICAgICBgd2luZG93Ll9fcHVwX3ZpZGVvX18mJihhc3luYygpPT57YXdhaXQgX19wdXBfdmlkZW9fXy5yZWFkeSgpO2F3YWl0IF9fcHVwX3ZpZGVvX18uYWR2YW5jZSgke3RpbWVzdGFtcE1zfSl9KSgpYCxcbiAgICAgICksXG4gICAgICBzaWduYWwsXG4gICAgKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHNpZ25hbD8udGhyb3dJZkFib3J0ZWQoKTtcbiAgICBsb2dnZXIud2FybihUQUcsIGBhZHZhbmNlIHNraXBwZWQ6ICR7ZSBpbnN0YW5jZW9mIEVycm9yID8gZS5tZXNzYWdlIDogU3RyaW5nKGUpfWApO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzAxLlxuXG5pbXBvcnQgeyB3aXRoVGltZW91dCB9IGZyb20gXCIuLi9iYXNlL3RpbWluZ1wiO1xuaW1wb3J0IHsgdHlwZSBBZHZhbmNlT3B0aW9ucywgYWR2YW5jZVZpZGVvcyB9IGZyb20gXCIuL3ZpZGVvL2FkdmFuY2VcIjtcblxuZXhwb3J0IGNvbnN0IFRJQ0tfU1lNQk9MID0gXCJfX3B1cF90aWNrX19cIjtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRpY2soYXJnczogQWR2YW5jZU9wdGlvbnMpIHtcbiAgY29uc3QgeyBmcmFtZSwgdGltZXN0YW1wTXMgfSA9IGFyZ3M7XG4gIGlmICghZnJhbWUpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgZXhwciA9IGB3aW5kb3cuJHtUSUNLX1NZTUJPTH0mJndpbmRvdy4ke1RJQ0tfU1lNQk9MfS5wcm9jZXNzKCR7dGltZXN0YW1wTXN9KWA7XG4gIGNvbnN0IHRpY2tFdiA9IGZyYW1lLmV4ZWN1dGVKYXZhU2NyaXB0KGV4cHIpO1xuICBhd2FpdCBQcm9taXNlLmFsbChbd2l0aFRpbWVvdXQodGlja0V2LCA1XzAwMCwgXCJ0aWNrLmV4ZWN1dGVKYXZhU2NyaXB0XCIpLCBhZHZhbmNlVmlkZW9zKGFyZ3MpXSk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA2LzIzLlxuXG5pbXBvcnQgeyBEZW11eGVyLCB0eXBlIERlbXV4ZXJPcHRpb25zIH0gZnJvbSBcIm5vZGUtYXYvYXBpXCI7XG5cbi8vIGZmbXBlZyByZWFkL3dyaXRlIGRlYWRsaW5lICjCtXMpOyBhIGJsb2NraW5nIG9wZW4gaWdub3JlcyBBYm9ydFNpZ25hbCwgc28gdGhpcyBib3VuZHMgYSBzdHVjayBDRE4uXG5jb25zdCBSV19USU1FT1VUX1VTID0gXCI4MDAwMDAwXCI7XG5cbi8vIGZmbXBlZyBvcGVucyBodHRwL2h0dHBzIHdpdGggbmF0aXZlIGJ5dGUtcmFuZ2UgcmVxdWVzdHMsIHNvIG9ubHkgdGhlIGRlY29kZWQgcmFuZ2VzIGRvd25sb2FkLlxuZXhwb3J0IGZ1bmN0aW9uIG9wZW5JbnB1dChzcmM6IHN0cmluZywgc2lnbmFsPzogQWJvcnRTaWduYWwpOiBQcm9taXNlPERlbXV4ZXI+IHtcbiAgY29uc3Qgb3B0aW9uczogRGVtdXhlck9wdGlvbnMgPSB7IHNpZ25hbCwgb3B0aW9uczogeyByd190aW1lb3V0OiBSV19USU1FT1VUX1VTIH0gfTtcbiAgcmV0dXJuIERlbXV4ZXIub3BlbihzcmMsIG9wdGlvbnMpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNi8yNS5cblxuaW1wb3J0IHR5cGUgeyBGcmFtZSB9IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQgeyBEZWNvZGVyLCBGaWx0ZXJBUEkgfSBmcm9tIFwibm9kZS1hdi9hcGlcIjtcbmltcG9ydCB7IEFWTUVESUFfVFlQRV9WSURFTywgQVZTRUVLX0ZMQUdfQkFDS1dBUkQgfSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuLi8uLi9iYXNlL2xvZ2dpbmdcIjtcbmltcG9ydCB0eXBlIHsgVmlkZW9NZXRhIH0gZnJvbSBcIi4vZnJhbWVfc2VydmVyXCI7XG5pbXBvcnQgeyBvcGVuSW5wdXQgfSBmcm9tIFwiLi9vcGVuXCI7XG5cbmNvbnN0IFRBRyA9IFwiW0RlY29kZV1cIjtcblxuZXhwb3J0IGludGVyZmFjZSBEZWNvZGVkRnJhbWUge1xuICBpZHg6IG51bWJlcjtcbiAgYnVmOiBCdWZmZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGVjb2RlRnJhbWVzT3B0aW9ucyB7XG4gIHNyYzogc3RyaW5nO1xuICBtZXRhOiBWaWRlb01ldGE7XG4gIHNpZ25hbDogQWJvcnRTaWduYWw7XG4gIC8qKiAxLWJhc2VkIGNvbnRlbnQgZnJhbWUgdG8gcmVzdW1lIGRlY29kaW5nIGZyb207IGEgZmFpbGVkIHNlZWsgZmFsbHMgYmFjayB0byBkZWNvZGluZyB0aGUgd2hvbGUgaGVhZC4gKi9cbiAgZnJvbUlkeD86IG51bWJlcjtcbn1cblxuLy8gRGVjb2RlIGEgc291cmNlIHRvIGZwcy1yZXNhbXBsZWQsIGRpc3BsYXktc2NhbGVkLCB0aWdodC1SR0JBIGZyYW1lcyAoaWR4ID0gMS1iYXNlZCBjb250ZW50IHBvc2l0aW9uIHBhc3QgdGhlIGxlYWQgZ2FwKS4gQ29uc3VtZXIgYmFja3ByZXNzdXJlIGlzIGp1c3QgcHVsbGluZyBzbG93ZXIuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24qIGRlY29kZUZyYW1lcyh7IHNyYywgbWV0YSwgc2lnbmFsLCBmcm9tSWR4IH06IERlY29kZUZyYW1lc09wdGlvbnMpOiBBc3luY0dlbmVyYXRvcjxEZWNvZGVkRnJhbWU+IHtcbiAgYXdhaXQgdXNpbmcgaW5wdXQgPSBhd2FpdCBvcGVuSW5wdXQoc3JjLCBzaWduYWwpO1xuICBsZXQgcmVzdW1lQXQ6IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgaWYgKGZyb21JZHggIT09IHVuZGVmaW5lZCAmJiBmcm9tSWR4ID4gMSkge1xuICAgIGNvbnN0IHRhcmdldCA9IG1ldGEubGVhZEdhcCArIChmcm9tSWR4IC0gMSkgLyBtZXRhLmZwcztcbiAgICBpZiAoKGF3YWl0IGlucHV0LnNlZWsodGFyZ2V0LCAtMSwgQVZTRUVLX0ZMQUdfQkFDS1dBUkQpKSA9PT0gMCkge1xuICAgICAgcmVzdW1lQXQgPSBmcm9tSWR4O1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2dnZXIud2FybihUQUcsIGBzZWVrIHRvIGZyYW1lICR7ZnJvbUlkeH0gZmFpbGVkLCBkZWNvZGluZyBmcm9tIGhlYWRgKTtcbiAgICB9XG4gIH1cbiAgY29uc3Qgc3RyZWFtID0gaW5wdXQuc3RyZWFtcz8uZmluZCgocykgPT4gcy5jb2RlY3Bhci5jb2RlY1R5cGUgPT09IEFWTUVESUFfVFlQRV9WSURFTyk7XG4gIGlmICghc3RyZWFtKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwibm8gdmlkZW8gc3RyZWFtXCIpO1xuICB9XG4gIHVzaW5nIGRlYyA9IGF3YWl0IERlY29kZXIuY3JlYXRlKHN0cmVhbSwgeyBzaWduYWwgfSk7XG4gIGNvbnN0IHsgZnJhbWVXaWR0aCwgZnJhbWVIZWlnaHQsIHdpZHRoLCBoZWlnaHQsIGZwcyB9ID0gbWV0YTtcbiAgY29uc3Qgc2NhbGUgPSBmcmFtZVdpZHRoICE9PSB3aWR0aCB8fCBmcmFtZUhlaWdodCAhPT0gaGVpZ2h0ID8gYHNjYWxlPSR7ZnJhbWVXaWR0aH06JHtmcmFtZUhlaWdodH0sYCA6IFwiXCI7XG4gIHVzaW5nIGZpbHRlciA9IEZpbHRlckFQSS5jcmVhdGUoYGZwcz0ke2Zwc30sJHtzY2FsZX1mb3JtYXQ9cmdiYWAsIHsgc2lnbmFsIH0pO1xuICBsZXQgayA9IDA7XG4gIGxldCBwcmV2SyA9IDA7XG4gIGZvciBhd2FpdCAodXNpbmcgZnJhbWUgb2YgZmlsdGVyLmZyYW1lcyhkZWMuZnJhbWVzKGlucHV0LnBhY2tldHMoc3RyZWFtLmluZGV4KSkpKSB7XG4gICAgaWYgKCFmcmFtZSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChyZXN1bWVBdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCB0YiA9IGZyYW1lLnRpbWVCYXNlLm51bSAvIGZyYW1lLnRpbWVCYXNlLmRlbjtcbiAgICAgIGNvbnN0IHRzID0gZnJhbWUuYmVzdEVmZm9ydFRpbWVzdGFtcCA/PyBmcmFtZS5wdHM7XG4gICAgICBpZiAodHMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGF0ID0gTWF0aC5yb3VuZCgoTnVtYmVyKHRzKSAqIHRiIC0gbWV0YS5sZWFkR2FwKSAqIG1ldGEuZnBzKSArIDE7XG4gICAgICBpZiAoYXQgPCBwcmV2Sykge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHByZXZLID0gYXQ7XG4gICAgICBpZiAoYXQgPCByZXN1bWVBdCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGsgPSBhdDtcbiAgICB9IGVsc2Uge1xuICAgICAgaysrO1xuICAgIH1cbiAgICB5aWVsZCB7IGlkeDogaywgYnVmOiBwYWNrUmdiYShmcmFtZSkgfTtcbiAgfVxufVxuXG4vLyBUaWdodCBSR0JBIGNvcHkgKGRyb3AgbGliYXYgcm93IHBhZGRpbmcpIHNvIHRoZSBwYWdlIGNhbiB3cmFwIGl0IHN0cmFpZ2h0IGludG8gSW1hZ2VEYXRhLlxuZnVuY3Rpb24gcGFja1JnYmEoZnJhbWU6IEZyYW1lKTogQnVmZmVyIHtcbiAgY29uc3Qgcm93ID0gZnJhbWUud2lkdGggKiA0O1xuICBjb25zdCBzdHJpZGUgPSBmcmFtZS5saW5lc2l6ZVswXSE7XG4gIGNvbnN0IHNyYyA9IGZyYW1lLmRhdGEhWzBdITtcbiAgaWYgKHN0cmlkZSA9PT0gcm93KSB7XG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKHNyYy5zdWJhcnJheSgwLCByb3cgKiBmcmFtZS5oZWlnaHQpKTtcbiAgfVxuICBjb25zdCBvdXQgPSBCdWZmZXIuYWxsb2NVbnNhZmUocm93ICogZnJhbWUuaGVpZ2h0KTtcbiAgZm9yIChsZXQgeSA9IDA7IHkgPCBmcmFtZS5oZWlnaHQ7IHkrKykge1xuICAgIHNyYy5jb3B5KG91dCwgeSAqIHJvdywgeSAqIHN0cmlkZSwgeSAqIHN0cmlkZSArIHJvdyk7XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDYvMDIuXG5cbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuLi8uLi9iYXNlL2xvZ2dpbmdcIjtcbmltcG9ydCB7IGRlY29kZUZyYW1lcyB9IGZyb20gXCIuL2RlY29kZVwiO1xuaW1wb3J0IHR5cGUgeyBWaWRlb01ldGEgfSBmcm9tIFwiLi9mcmFtZV9zZXJ2ZXJcIjtcblxuY29uc3QgVEFHID0gXCJbRGVjb2RlU2Vzc2lvbl1cIjtcbmNvbnN0IERFQ09ERV9BSEVBRCA9IDQ7IC8vIGRlY29kZSBhIGZldyBmcmFtZXMgcGFzdCB0aGUgaGlnaGVzdCByZXF1ZXN0OyB0aGUgcGFnZSBhbHJlYWR5IHByZWZldGNoZXNcbmNvbnN0IEtFRVBfQkVISU5EID0gMTY7IC8vIG1pbiBmcmFtZXMgaGVsZCBiZWhpbmQgdGhlIGhlYWQ7IG11c3QgZXhjZWVkIHRoZSBwYWdlJ3MgcHJlZmV0Y2ggbGVhZCAoQUhFQUQ9MTApXG5jb25zdCBNRU1PUllfQlVER0VUID0gMjU2ICogMTAyNCAqIDEwMjQ7IC8vIHJldGFpbiBkZWNvZGVkIGZyYW1lcyB1cCB0byB0aGlzIHBlci1zZXNzaW9uIGJ1ZGdldCBzbyBhIHNtYWxsIGxvb3BpbmcgdmlkZW8gcmUtc2VydmVzIGZyb20gbWVtb3J5IGluc3RlYWQgb2YgcmUtZGVjb2RpbmdcbmNvbnN0IE1BWF9QQVNTX1JFVFJZID0gMzsgLy8gcmUtb3BlbiBhIHN0cmVhbWVkIHNvdXJjZSB0aGlzIG1hbnkgdGltZXMgb24gYSB0cmFuc2llbnQgZGVjb2RlIGVycm9yIGJlZm9yZSByZXBvcnRpbmcgZW5kLW9mLXN0cmVhbVxuXG5pbnRlcmZhY2UgV2FpdGVyIHtcbiAgaWR4OiBudW1iZXI7XG4gIHJlc29sdmU6IChiOiBCdWZmZXIpID0+IHZvaWQ7XG59XG5cbi8vIERlbWFuZC1kcml2ZW4gaW4tcHJvY2VzcyBkZWNvZGUgKERlbXV4ZXLihpJEZWNvZGVy4oaSZnBzL3NjYWxlL3JnYmEgZmlsdGVyKSBzZXJ2aW5nIGZyYW1lIE4gYXMgdGlnaHQgUkdCQTsgZm9yd2FyZC1vbmx5IOKAlCBhIGxvb3AvcmV3aW5kIHJlLWRlY29kZXMgZnJvbSBmcmFtZSAxIHVubGVzcyB0aGUgd2hvbGUgY2xpcCBzdGlsbCBmaXRzIHRoZSBtZW1vcnkgYnVkZ2V0LlxuZXhwb3J0IGNsYXNzIERlY29kZVNlc3Npb24ge1xuICBwcml2YXRlIF9idWYgPSBuZXcgTWFwPG51bWJlciwgQnVmZmVyPigpO1xuICBwcml2YXRlIF9yZWFkeSA9IDA7XG4gIHByaXZhdGUgX3dhbnQgPSAxO1xuICBwcml2YXRlIF9kb25lID0gZmFsc2U7XG4gIHByaXZhdGUgX2Nsb3NlZCA9IGZhbHNlO1xuICBwcml2YXRlIF9nZW4gPSAwO1xuICBwcml2YXRlIF9jdHJsID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICBwcml2YXRlIF93YWl0ZXJzID0gbmV3IFNldDxXYWl0ZXI+KCk7XG4gIHByaXZhdGUgX3Jlc3VtZTogKCgpID0+IHZvaWQpIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIF9yZXN0YXJ0OiAoKCkgPT4gdm9pZCkgfCB1bmRlZmluZWQ7XG4gIC8vIExlYWQgZnJhbWVzIGhlbGQgb24gdGhlIGZpcnN0IGRlY29kYWJsZSBmcmFtZTsgY29udGVudCBpZHggaXMgb2Zmc2V0IHBhc3QgdGhlbS5cbiAgcHJpdmF0ZSByZWFkb25seSBfbGVhZEZyYW1lczogbnVtYmVyO1xuICAvLyBGcmFtZXMga2VwdCBiZWhpbmQgdGhlIGhlYWQ7IGEgY2xpcCB0aGF0IGZpdHMgdGhlIGJ1ZGdldCByZXRhaW5zIGV2ZXJ5IGZyYW1lLCBzbyBsb29wcyByZS1zZXJ2ZSBmcm9tIG1lbW9yeS5cbiAgcHJpdmF0ZSByZWFkb25seSBfa2VlcENvdW50OiBudW1iZXI7XG4gIC8vIEEgcmVxdWVzdCB0aGlzIGZhciBhaGVhZCBvZiBkZWNvZGVkIHByb2dyZXNzIGlzIGEgcGFnZSBzY3J1Yiwgbm90IHBsYXliYWNrIOKAlCByZS1vcGVuIGF0IHRoZSB0YXJnZXQuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3NlZWtKdW1wOiBudW1iZXI7XG4gIC8vIFRhcmdldCBmcmFtZSBmb3IgdGhlIG5leHQgcGFzczsgdW5kZWZpbmVkID0gZGVjb2RlIGZyb20gdGhlIGhlYWQuXG4gIHByaXZhdGUgX3NlZWtUbz86IG51bWJlcjtcbiAgLy8gUmVzb2x2ZXMgd2hlbiBwdW1wKCkgZnVsbHkgdW53aW5kcyDigJQgYXdhaXRlZCBvbiBjbG9zZSBzbyBub2RlLWF2IGdlbmVyYXRvcnMgZnJlZSBiZWZvcmUgcHJvY2VzcyB0ZWFyZG93bi5cbiAgcHJpdmF0ZSByZWFkb25seSBfcHVtcERvbmU6IFByb21pc2U8dm9pZD47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcmVhZG9ubHkgbWV0YTogVmlkZW9NZXRhLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX3NyYzogc3RyaW5nLFxuICApIHtcbiAgICB0aGlzLl9sZWFkRnJhbWVzID0gTWF0aC5yb3VuZChtZXRhLmxlYWRHYXAgKiBtZXRhLmZwcyk7XG4gICAgdGhpcy5fa2VlcENvdW50ID0gTWF0aC5tYXgoS0VFUF9CRUhJTkQsIE1hdGguZmxvb3IoTUVNT1JZX0JVREdFVCAvIChtZXRhLmZyYW1lV2lkdGggKiBtZXRhLmZyYW1lSGVpZ2h0ICogNCkpKTtcbiAgICB0aGlzLl9zZWVrSnVtcCA9IE1hdGgubWF4KDIgKiBtZXRhLmZwcywgREVDT0RFX0FIRUFEICogMik7XG4gICAgdGhpcy5fcHVtcERvbmUgPSB0aGlzLnB1bXAoKTtcbiAgfVxuXG4gIGFzeW5jIGdldEZyYW1lKGlkeDogbnVtYmVyKTogUHJvbWlzZTxCdWZmZXI+IHtcbiAgICBpZiAoaWR4IDwgMSkge1xuICAgICAgaWR4ID0gMTtcbiAgICB9XG4gICAgaWYgKGlkeCA8PSB0aGlzLl9sZWFkRnJhbWVzKSB7XG4gICAgICBpZHggPSB0aGlzLl9sZWFkRnJhbWVzICsgMTsgLy8gaG9sZCB0aGUgZmlyc3QgZGVjb2RhYmxlIGZyYW1lIGFjcm9zcyB0aGUgbGVhZFxuICAgIH1cbiAgICBjb25zdCBoaXQgPSB0aGlzLl9idWYuZ2V0KGlkeCk7XG4gICAgaWYgKGhpdCkge1xuICAgICAgcmV0dXJuIGhpdDtcbiAgICB9XG4gICAgaWYgKHRoaXMuX2RvbmUgJiYgaWR4ID4gdGhpcy5fcmVhZHkpIHtcbiAgICAgIHJldHVybiBCdWZmZXIuYWxsb2MoMCk7IC8vIGJleW9uZCBlbmQgb2Ygc3RyZWFtXG4gICAgfVxuICAgIGlmIChpZHggPiB0aGlzLl9yZWFkeSkge1xuICAgICAgLy8gZm9yd2FyZCwgbm90IHlldCBkZWNvZGVkIGluIHRoaXMgcGFzc1xuICAgICAgaWYgKGlkeCA+IHRoaXMuX3dhbnQpIHtcbiAgICAgICAgdGhpcy5fd2FudCA9IGlkeDtcbiAgICAgIH1cbiAgICAgIGlmIChpZHggPiB0aGlzLl9yZWFkeSArIHRoaXMuX3NlZWtKdW1wKSB7XG4gICAgICAgIHRoaXMucmVxdWVzdFJlc3RhcnQoaWR4KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMud2FrZSgpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBFdmljdGVkIChsb29wL3Jld2luZCk6IGNsZWFyIHJlYWR5L2RvbmUgc3luY2hyb25vdXNseSBzbyB0aGUgd3JhcCdzIHByZWZldGNoIGJ1cnN0IGNvYWxlc2NlcyBpbnRvIG9uZSByZXN0YXJ0LCBub3Qgb25lIHBlciBmcmFtZS5cbiAgICAgIHRoaXMuX3JlYWR5ID0gMDtcbiAgICAgIHRoaXMuX2RvbmUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX3dhbnQgPSBpZHg7XG4gICAgICB0aGlzLnJlcXVlc3RSZXN0YXJ0KGlkeCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLndhaXQoaWR4KTtcbiAgfVxuXG4gIC8vIEF3YWl0IHRoZSBwdW1wIHNvIHRoZSBub2RlLWF2IGRlbXV4ZXIvZGVjb2RlciBnZW5lcmF0b3JzIHVud2luZCAoY29udGV4dHMgZnJlZWQpIGJlZm9yZSB0aGUgY2FsbGVyIGV4aXRzLlxuICBhc3luYyBjbG9zZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLl9jbG9zZWQgPSB0cnVlO1xuICAgIHRoaXMuX2RvbmUgPSB0cnVlO1xuICAgIHRoaXMuX2N0cmwuYWJvcnQoKTtcbiAgICB0aGlzLndha2UoKTtcbiAgICB0aGlzLnJlcXVlc3RSZXN0YXJ0KCk7XG4gICAgZm9yIChjb25zdCB3IG9mIHRoaXMuX3dhaXRlcnMpIHtcbiAgICAgIHcucmVzb2x2ZShCdWZmZXIuYWxsb2MoMCkpO1xuICAgIH1cbiAgICB0aGlzLl93YWl0ZXJzLmNsZWFyKCk7XG4gICAgdGhpcy5fYnVmLmNsZWFyKCk7XG4gICAgYXdhaXQgdGhpcy5fcHVtcERvbmU7XG4gIH1cblxuICAvLyAtZC1vbmx5IHN1YnN5c3RlbSwgc28gbmV2ZXIgdGltZSBvdXQ6IGRyYWluV2FpdGVycyByZXNvbHZlcyBvbiBkZWNvZGUsIEVPRiwgb3IgY2xvc2Ug4oCUIG91dHB1dCBuZXZlciBkZXBlbmRzIG9uIGZldGNoIGxhdGVuY3kuXG4gIHByaXZhdGUgd2FpdChpZHg6IG51bWJlcik6IFByb21pc2U8QnVmZmVyPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPEJ1ZmZlcj4oKHJlc29sdmUpID0+IHRoaXMuX3dhaXRlcnMuYWRkKHsgaWR4LCByZXNvbHZlIH0pKTtcbiAgfVxuXG4gIHByaXZhdGUgd2FrZSgpOiB2b2lkIHtcbiAgICBjb25zdCByID0gdGhpcy5fcmVzdW1lO1xuICAgIHRoaXMuX3Jlc3VtZSA9IHVuZGVmaW5lZDtcbiAgICByPy4oKTtcbiAgfVxuXG4gIC8vIEludmFsaWRhdGUgdGhlIHJ1bm5pbmcgcGFzcyAob3Igd2FrZSBhIHBhcmtlZCBvbmUpIHNvIHB1bXAoKSBzdGFydHMgYSBmcmVzaCBkZWNvZGUsIHNlZWtpbmcgdG8gYHRhcmdldGAgd2hlbiBnaXZlbi5cbiAgcHJpdmF0ZSByZXF1ZXN0UmVzdGFydCh0YXJnZXQ/OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9zZWVrVG8gPSB0YXJnZXQ7XG4gICAgdGhpcy5fZ2VuKys7XG4gICAgY29uc3QgciA9IHRoaXMuX3Jlc3RhcnQ7XG4gICAgdGhpcy5fcmVzdGFydCA9IHVuZGVmaW5lZDtcbiAgICByPy4oKTtcbiAgICB0aGlzLndha2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcHVtcCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBsZXQgZmFpbHMgPSAwO1xuICAgIHdoaWxlICghdGhpcy5fY2xvc2VkKSB7XG4gICAgICBjb25zdCBnZW4gPSB0aGlzLl9nZW47XG4gICAgICB0aGlzLl9yZWFkeSA9IDA7XG4gICAgICB0aGlzLl9kb25lID0gZmFsc2U7XG4gICAgICB0aGlzLl9idWYuY2xlYXIoKTtcbiAgICAgIGxldCBmYWlsZWQgPSBmYWxzZTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHRoaXMuZGVjb2RlUGFzcyhnZW4pO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBpZiAoIXRoaXMuX2Nsb3NlZCAmJiB0aGlzLl9nZW4gPT09IGdlbikge1xuICAgICAgICAgIGZhaWxlZCA9IHRydWU7XG4gICAgICAgICAgbG9nZ2VyLndhcm4oXG4gICAgICAgICAgICBUQUcsXG4gICAgICAgICAgICBgWyR7dGhpcy5tZXRhLmlkLnNsaWNlKDAsIDgpfV0gZGVjb2RlIHBhc3MgZmFpbGVkOiAke2UgaW5zdGFuY2VvZiBFcnJvciA/IGUubWVzc2FnZSA6IFN0cmluZyhlKX1gLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLl9jbG9zZWQpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5fZ2VuICE9PSBnZW4pIHtcbiAgICAgICAgZmFpbHMgPSAwO1xuICAgICAgICBjb250aW51ZTsgLy8gcmVzdGFydCByZXF1ZXN0ZWQgbWlkLXBhc3NcbiAgICAgIH1cbiAgICAgIC8vIEEgdGhyb3duIHBhc3MgaXMgYSB0cmFuc2llbnQgc291cmNlIGVycm9yIChlLmcuIGEgc3RyZWFtZWQgbG9vcCByZS1vcGVuKTsgcmV0cnkgaW5zdGVhZCBvZiByZXBvcnRpbmcgRU9GLCB3aGljaCB3b3VsZCBibGFuayB0aGUgZnJhbWUuXG4gICAgICBpZiAoZmFpbGVkICYmICsrZmFpbHMgPD0gTUFYX1BBU1NfUkVUUlkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBmYWlscyA9IDA7XG4gICAgICB0aGlzLl9kb25lID0gdHJ1ZTtcbiAgICAgIHRoaXMuZHJhaW5XYWl0ZXJzKCk7XG4gICAgICBhd2FpdCB0aGlzLnVudGlsUmVzdGFydCgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZGVjb2RlUGFzcyhnZW46IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGZyb20gPSB0aGlzLl9zZWVrVG87XG4gICAgdGhpcy5fc2Vla1RvID0gdW5kZWZpbmVkO1xuICAgIGNvbnN0IHN0cmVhbSA9IGRlY29kZUZyYW1lcyh7IHNyYzogdGhpcy5fc3JjLCBtZXRhOiB0aGlzLm1ldGEsIHNpZ25hbDogdGhpcy5fY3RybC5zaWduYWwsIGZyb21JZHg6IGZyb20gfSk7XG4gICAgZm9yIGF3YWl0IChjb25zdCB7IGlkeCwgYnVmIH0gb2Ygc3RyZWFtKSB7XG4gICAgICBpZiAodGhpcy5fY2xvc2VkIHx8IHRoaXMuX2dlbiAhPT0gZ2VuKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGF0ID0gdGhpcy5fbGVhZEZyYW1lcyArIGlkeDsgLy8gbWFwIGRlY29kZSBwb3NpdGlvbiBwYXN0IHRoZSBoZWxkIGxlYWQtZ2FwIGZyYW1lc1xuICAgICAgd2hpbGUgKCF0aGlzLl9jbG9zZWQgJiYgdGhpcy5fZ2VuID09PSBnZW4gJiYgYXQgPiB0aGlzLmRlbWFuZCArIERFQ09ERV9BSEVBRCkge1xuICAgICAgICBhd2FpdCB0aGlzLnBhdXNlKCk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5fY2xvc2VkIHx8IHRoaXMuX2dlbiAhPT0gZ2VuKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2J1Zi5zZXQoYXQsIGJ1Zik7XG4gICAgICB0aGlzLl9yZWFkeSA9IGF0O1xuICAgICAgLy8gRHJhaW4gYmVmb3JlIGV2aWN0OiB3aXRoIHdhbnQgZmFyIGFoZWFkIHRoZSBmbG9vciBjb3ZlcnMgdGhpcyBmcmFtZSwgYW5kIGV2aWN0aW5nIGl0IGZpcnN0IHN0YXJ2ZXMgaXRzIHdhaXRlciBmb3JldmVyLlxuICAgICAgdGhpcy5kcmFpbldhaXRlcnMoKTtcbiAgICAgIHRoaXMuZXZpY3QoKTtcbiAgICB9XG4gIH1cblxuICAvLyBXYWl0ZXJzIHRoYXQgc3Vydml2ZWQgYSByZXdpbmQgcmVzdGFydCBhcmUgc3RpbGwgZGVtYW5kOyBpZ25vcmluZyB0aGVtIHBhcmtzIHRoZSBwYXNzIGFuZCBzdGFydmVzIHRoZW0gZm9yZXZlci5cbiAgcHJpdmF0ZSBnZXQgZGVtYW5kKCk6IG51bWJlciB7XG4gICAgbGV0IGQgPSB0aGlzLl93YW50O1xuICAgIGZvciAoY29uc3QgdyBvZiB0aGlzLl93YWl0ZXJzKSB7XG4gICAgICBpZiAody5pZHggPiBkKSB7XG4gICAgICAgIGQgPSB3LmlkeDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGQ7XG4gIH1cblxuICBwcml2YXRlIHBhdXNlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocikgPT4ge1xuICAgICAgdGhpcy5fcmVzdW1lID0gcjtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIFBhcmsgdW50aWwgYSBsb29wL2JhY2t3YXJkIHJlcXVlc3QgKG9yIGNsb3NlKSBjYWxscyByZXF1ZXN0UmVzdGFydCgpLlxuICBwcml2YXRlIHVudGlsUmVzdGFydCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fY2xvc2VkKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocikgPT4ge1xuICAgICAgdGhpcy5fcmVzdGFydCA9IHI7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGV2aWN0KCk6IHZvaWQge1xuICAgIGNvbnN0IGZsb29yID0gdGhpcy5fd2FudCAtIHRoaXMuX2tlZXBDb3VudDtcbiAgICBmb3IgKGNvbnN0IGsgb2YgdGhpcy5fYnVmLmtleXMoKSkge1xuICAgICAgaWYgKGsgPCBmbG9vcikge1xuICAgICAgICB0aGlzLl9idWYuZGVsZXRlKGspO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZHJhaW5XYWl0ZXJzKCk6IHZvaWQge1xuICAgIGZvciAoY29uc3QgZW50cnkgb2YgWy4uLnRoaXMuX3dhaXRlcnNdKSB7XG4gICAgICBjb25zdCBoaXQgPSB0aGlzLl9idWYuZ2V0KGVudHJ5LmlkeCk7XG4gICAgICBpZiAoaGl0KSB7XG4gICAgICAgIHRoaXMuX3dhaXRlcnMuZGVsZXRlKGVudHJ5KTtcbiAgICAgICAgZW50cnkucmVzb2x2ZShoaXQpO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLl9kb25lKSB7XG4gICAgICAgIHRoaXMuX3dhaXRlcnMuZGVsZXRlKGVudHJ5KTtcbiAgICAgICAgZW50cnkucmVzb2x2ZShCdWZmZXIuYWxsb2MoMCkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNS8xOC5cblxuaW1wb3J0IHsgRGVjb2RlciB9IGZyb20gXCJub2RlLWF2L2FwaVwiO1xuaW1wb3J0IHsgQVZNRURJQV9UWVBFX1ZJREVPIH0gZnJvbSBcIm5vZGUtYXYvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBvcGVuSW5wdXQgfSBmcm9tIFwiLi9vcGVuXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJvYmVSZXN1bHQge1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgZHVyYXRpb246IG51bWJlcjtcbiAgLyoqIFBUUyAocykgb2YgdGhlIGZpcnN0IGRlY29kYWJsZSBmcmFtZTsgYSBjb3JydXB0L2VtcHR5IGxlYWRpbmcgcnVuIGlzIGhlbGQgb24gaXQsIGxpa2UgQ2hyb21lLiAqL1xuICBsZWFkR2FwOiBudW1iZXI7XG59XG5cbi8vIE5vIHdhbGwtY2xvY2sgY2FwOiBvcGVuSW5wdXQncyBwZXItcmVhZCByd190aW1lb3V0IGJvdW5kcyBhIHN0dWNrIHNvdXJjZSwgYW5kIHRoZSBjYWxsZXIgcmV0cmllcyBvbiB0aHJvdy5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm9iZShzcmM6IHN0cmluZyk6IFByb21pc2U8UHJvYmVSZXN1bHQ+IHtcbiAgYXdhaXQgdXNpbmcgZCA9IGF3YWl0IG9wZW5JbnB1dChzcmMpO1xuICBjb25zdCBzdHJlYW0gPSBkLnN0cmVhbXM/LmZpbmQoKHMpID0+IHMuY29kZWNwYXIuY29kZWNUeXBlID09PSBBVk1FRElBX1RZUEVfVklERU8pO1xuICBpZiAoIXN0cmVhbSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcInByb2JlOiBubyB2aWRlbyBzdHJlYW1cIik7XG4gIH1cbiAgY29uc3QgZHVyYXRpb24gPSBkLmR1cmF0aW9uID4gMCA/IGQuZHVyYXRpb24gOiAwO1xuICBjb25zdCB0YiA9IHN0cmVhbS50aW1lQmFzZS5udW0gLyBzdHJlYW0udGltZUJhc2UuZGVuO1xuICB1c2luZyBkZWMgPSBhd2FpdCBEZWNvZGVyLmNyZWF0ZShzdHJlYW0sIHsgdGhyZWFkQ291bnQ6IDEgfSk7XG4gIGxldCBsZWFkR2FwID0gMDtcbiAgLy8gRmlyc3QgY2xlYW4gZnJhbWUncyBQVFMgPSB3aGVyZSBjb250ZW50IGJlZ2luczsgc2tpcCBjb3JydXB0IGZyYW1lcyBsaWtlIGEgYnJvd3Nlci5cbiAgb3V0ZXI6IGZvciBhd2FpdCAodXNpbmcgcGt0IG9mIGQucGFja2V0cyhzdHJlYW0uaW5kZXgpKSB7XG4gICAgdHJ5IHtcbiAgICAgIGZvciBhd2FpdCAodXNpbmcgZnJhbWUgb2YgZGVjLmZyYW1lcyhwa3QpKSB7XG4gICAgICAgIGlmIChmcmFtZT8uZGVjb2RlRXJyb3JGbGFncyAhPT0gMCkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGxlYWRHYXAgPSBNYXRoLm1heCgwLCBOdW1iZXIoZnJhbWUucHRzKSAqIHRiKTtcbiAgICAgICAgYnJlYWsgb3V0ZXI7XG4gICAgICB9XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBjb3JydXB0IHBhY2tldCDigJQgc2tpcCB0byB0aGUgbmV4dFxuICAgIH1cbiAgfVxuICByZXR1cm4geyB3aWR0aDogc3RyZWFtLmNvZGVjcGFyLndpZHRoLCBoZWlnaHQ6IHN0cmVhbS5jb2RlY3Bhci5oZWlnaHQsIGR1cmF0aW9uLCBsZWFkR2FwIH07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA3LzA2LlxuXG5pbXBvcnQgeyByYW5kb21CeXRlcyB9IGZyb20gXCJub2RlOmNyeXB0b1wiO1xuaW1wb3J0IHsgcmVhZEZpbGUsIHJtIH0gZnJvbSBcIm5vZGU6ZnMvcHJvbWlzZXNcIjtcbmltcG9ydCB7IHRtcGRpciB9IGZyb20gXCJub2RlOm9zXCI7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHsgQ29kZWMsIEZGbXBlZ0Vycm9yLCBGcmFtZSB9IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQgeyBBVl9QSVhfRk1UX1lVVjQyMFAsIEFWRVJST1JfRUFHQUlOLCBBVkVSUk9SX0VPRiB9IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgRkZfRU5DT0RFUl9MSUJWUFhfVlA5LCBtYWtlUGFja2V0LCBvcGVuVmlkZW9DdHggfSBmcm9tIFwiLi4vLi4vYmFzZS9lbmNvZGVyL21pc2NcIjtcbmltcG9ydCB7IEZvcm1hdE11eGVyIH0gZnJvbSBcIi4uLy4uL2Jhc2UvZW5jb2Rlci9tdXhlclwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFN0dWJFbmNvZGVPcHRpb25zIHtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIGR1cmF0aW9uOiBudW1iZXI7XG59XG5cbi8vIFJlYWwgcGFyc2VhYmxlIG1lZGlhIHdpdGggdGhlIHNvdXJjZSdzIGludHJpbnNpYyBzaXplICsgZHVyYXRpb24sIHNvIEJsaW5rIGxheXMgb3V0IGxpa2UgQ2hyb21lLlxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGVuY29kZVN0dWJXZWJtKHsgd2lkdGgsIGhlaWdodCwgZHVyYXRpb24gfTogU3R1YkVuY29kZU9wdGlvbnMpOiBQcm9taXNlPEJ1ZmZlcj4ge1xuICBjb25zdCBjb2RlYyA9IENvZGVjLmZpbmRFbmNvZGVyQnlOYW1lKEZGX0VOQ09ERVJfTElCVlBYX1ZQOSk7XG4gIGlmICghY29kZWMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYHN0dWI6IGVuY29kZXIgbm90IGZvdW5kOiAke0ZGX0VOQ09ERVJfTElCVlBYX1ZQOX1gKTtcbiAgfVxuICBjb25zdCBwYXRoID0gam9pbih0bXBkaXIoKSwgYHB1cF9zdHViXyR7cmFuZG9tQnl0ZXMoOCkudG9TdHJpbmcoXCJoZXhcIil9LndlYm1gKTtcbiAgdHJ5IHtcbiAgICB7XG4gICAgICBhd2FpdCB1c2luZyBtdXhlciA9IG5ldyBGb3JtYXRNdXhlcihwYXRoKTtcbiAgICAgIC8vIFRpbWViYXNlIDEvMTAwMCAoZnBzIHBhcmFtKSBsZXRzIG9uZSBwYWNrZXQgY2FycnkgdGhlIGZ1bGwgc291cmNlIGR1cmF0aW9uIGluIG1zLlxuICAgICAgdXNpbmcgY3R4ID0gYXdhaXQgb3BlblZpZGVvQ3R4KFxuICAgICAgICB7XG4gICAgICAgICAgY29kZWMsXG4gICAgICAgICAgd2lkdGgsXG4gICAgICAgICAgaGVpZ2h0LFxuICAgICAgICAgIGZwczogMTAwMCxcbiAgICAgICAgICBiaXRyYXRlOiAxMDBfMDAwLFxuICAgICAgICAgIHBpeGVsRm9ybWF0OiBBVl9QSVhfRk1UX1lVVjQyMFAsXG4gICAgICAgICAgb3B0aW9uczogeyBkZWFkbGluZTogXCJyZWFsdGltZVwiLCBcImNwdS11c2VkXCI6IFwiOFwiIH0sXG4gICAgICAgIH0sXG4gICAgICAgIFwic3R1YkN0eC5vcGVuMlwiLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IHN0cmVhbSA9IG11eGVyLmFkZFN0cmVhbShjdHgpO1xuICAgICAgYXdhaXQgbXV4ZXIub3BlbigpO1xuICAgICAgdXNpbmcgc3R1YiA9IG5ldyBTdHViRnJhbWUod2lkdGgsIGhlaWdodCk7XG4gICAgICBjb25zdCBtcyA9IEJpZ0ludChNYXRoLm1heCgxLCBNYXRoLnJvdW5kKGR1cmF0aW9uICogMTAwMCkpKTtcbiAgICAgIHN0dWIuZnJhbWUucHRzID0gMG47XG4gICAgICBzdHViLmZyYW1lLmR1cmF0aW9uID0gbXM7XG4gICAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgY3R4LnNlbmRGcmFtZShzdHViLmZyYW1lKSwgXCJzdHViQ3R4LnNlbmRGcmFtZVwiKTtcbiAgICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCBjdHguc2VuZEZyYW1lKG51bGwpLCBcInN0dWJDdHguZmx1c2hcIik7XG4gICAgICB1c2luZyBwa3QgPSBtYWtlUGFja2V0KCk7XG4gICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICBjb25zdCByID0gYXdhaXQgY3R4LnJlY2VpdmVQYWNrZXQocGt0KTtcbiAgICAgICAgaWYgKHIgPT09IEFWRVJST1JfRUFHQUlOIHx8IHIgPT09IEFWRVJST1JfRU9GKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKHIsIFwic3R1YkN0eC5yZWNlaXZlUGFja2V0XCIpO1xuICAgICAgICBwa3Quc3RyZWFtSW5kZXggPSBzdHJlYW0uaW5kZXg7XG4gICAgICAgIHBrdC5kdXJhdGlvbiA9IG1zO1xuICAgICAgICBwa3QucmVzY2FsZVRzKGN0eC50aW1lQmFzZSwgc3RyZWFtLnRpbWVCYXNlKTtcbiAgICAgICAgYXdhaXQgbXV4ZXIud3JpdGVQYWNrZXQocGt0KTtcbiAgICAgICAgcGt0LnVucmVmKCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhd2FpdCByZWFkRmlsZShwYXRoKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCBybShwYXRoLCB7IGZvcmNlOiB0cnVlIH0pO1xuICB9XG59XG5cbi8vIE93bnMgdGhlIGJsYWNrIHBpeGVsIGJ1ZmZlciBBTkQgaXRzIHplcm8tY29weSBmcmFtZSB2aWV3IOKAlCBgdXNpbmdgIHBpbnMgYm90aCB1bnRpbCBhZnRlciBlbmNvZGUuXG5jbGFzcyBTdHViRnJhbWUgaW1wbGVtZW50cyBEaXNwb3NhYmxlIHtcbiAgcmVhZG9ubHkgZnJhbWU6IEZyYW1lO1xuICBwcml2YXRlIHJlYWRvbmx5IF9idWY6IEJ1ZmZlcjtcblxuICBjb25zdHJ1Y3Rvcih3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcikge1xuICAgIGNvbnN0IGx1bWEgPSB3aWR0aCAqIGhlaWdodDtcbiAgICBjb25zdCBjaHJvbWEgPSBNYXRoLmNlaWwod2lkdGggLyAyKSAqIE1hdGguY2VpbChoZWlnaHQgLyAyKTtcbiAgICB0aGlzLl9idWYgPSBCdWZmZXIuYWxsb2MobHVtYSArIGNocm9tYSAqIDIsIDB4ODApO1xuICAgIHRoaXMuX2J1Zi5maWxsKDAsIDAsIGx1bWEpO1xuICAgIHRoaXMuZnJhbWUgPSBGcmFtZS5mcm9tVmlkZW9CdWZmZXIodGhpcy5fYnVmLCB7IHdpZHRoLCBoZWlnaHQsIGZvcm1hdDogQVZfUElYX0ZNVF9ZVVY0MjBQIH0pO1xuICB9XG5cbiAgW1N5bWJvbC5kaXNwb3NlXSgpOiB2b2lkIHtcbiAgICB0aGlzLmZyYW1lW1N5bWJvbC5kaXNwb3NlXSgpO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA1LzE4LlxuXG5pbXBvcnQgeyBjcmVhdGVIYXNoIH0gZnJvbSBcIm5vZGU6Y3J5cHRvXCI7XG5pbXBvcnQgeyB1c2VSZXRyeSB9IGZyb20gXCIuLi8uLi9iYXNlL3JldHJ5XCI7XG5pbXBvcnQgeyBwcm94aWVkVXJsIH0gZnJvbSBcIi4uL25ldHdvcmtcIjtcbmltcG9ydCB7IERlY29kZVNlc3Npb24gfSBmcm9tIFwiLi9kZWNvZGVfc2Vzc2lvblwiO1xuaW1wb3J0IHsgdHlwZSBQcm9iZVJlc3VsdCwgcHJvYmUgfSBmcm9tIFwiLi9wcm9iZVwiO1xuaW1wb3J0IHsgZW5jb2RlU3R1YldlYm0gfSBmcm9tIFwiLi9zdHViXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmlkZW9NZXRhIHtcbiAgaWQ6IHN0cmluZztcbiAgLyoqIEludHJpbnNpYyBzb3VyY2UgZGltZW5zaW9ucyAocmVwb3J0ZWQgYXMgdmlkZW9XaWR0aC92aWRlb0hlaWdodCkuICovXG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICAvKiogRGVjb2RlZCtzY2FsZWQgZnJhbWUgZGltZW5zaW9ucyBhY3R1YWxseSBzZXJ2ZWQgKOKJpCBzb3VyY2U7IGNhcHBlZCB0byB0aGUgZGlzcGxheSBib3gpLiAqL1xuICBmcmFtZVdpZHRoOiBudW1iZXI7XG4gIGZyYW1lSGVpZ2h0OiBudW1iZXI7XG4gIGZwczogbnVtYmVyO1xuICBkdXJhdGlvbjogbnVtYmVyO1xuICAvKiogU2Vjb25kcyBvZiBjb3JydXB0L2VtcHR5IGxlYWRpbmcgY29udGVudCBoZWxkIG9uIHRoZSBmaXJzdCBkZWNvZGFibGUgZnJhbWUuICovXG4gIGxlYWRHYXA6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPcGVuT3B0aW9ucyB7XG4gIHNyYzogc3RyaW5nO1xuICBmcHM6IG51bWJlcjtcbiAgLyoqIERpc3BsYXktYm94IHBpeGVscyAoY2FudmFzIGJhY2tpbmcgc3RvcmUpOyBkZWNvZGUgaXMgZG93bnNjYWxlZCB0byBjb3ZlciB0aGlzLCBuZXZlciB1cHNjYWxlZC4gKi9cbiAgZHN0Vz86IG51bWJlcjtcbiAgZHN0SD86IG51bWJlcjtcbiAgLyoqIG9iamVjdEZpdDsgXCJub25lXCIgbmVlZHMgMToxIG5hdGl2ZSBwaXhlbHMgc28gaXQgc2tpcHMgZG93bnNjYWxlLiAqL1xuICBmaXQ/OiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBFbnRyeSB7XG4gIHNlc3Npb246IERlY29kZVNlc3Npb247XG4gIHJlZnM6IG51bWJlcjtcbn1cblxuZXhwb3J0IGNsYXNzIEZyYW1lU2VydmVyIHtcbiAgcHJpdmF0ZSBfc2Vzc2lvbnMgPSBuZXcgTWFwPHN0cmluZywgRW50cnk+KCk7XG4gIHByaXZhdGUgX3Byb2JlcyA9IG5ldyBNYXA8c3RyaW5nLCBQcm9taXNlPFByb2JlUmVzdWx0Pj4oKTtcbiAgcHJpdmF0ZSBfc3R1YnMgPSBuZXcgTWFwPHN0cmluZywgUHJvbWlzZTxCdWZmZXI+PigpO1xuICBwcml2YXRlIF9jbG9zZWQgPSBmYWxzZTtcblxuICAvLyAtZCBkZWNvZGUgYnlwYXNzZXMgdGhlIHdpbmRvdyBpbnRlcmNlcHRvciwgc28gaXQgcmVtYXBzIGhvc3RzIGl0c2VsZiB3aGVuIHRoZSBpbm5lciBwcm94eSBpcyBvbi5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBfdXNlSW5uZXJQcm94eTogYm9vbGVhbikge31cblxuICAvLyBjbG9zZWQtY2hlY2tlZCBhZnRlciBwcm9iZSBzbyBjbG9zZUFsbCgpIGNhbid0IHJhY2UgYSBzbG93IG9wZW4gaW50byBhIGxlYWtlZCBzZXNzaW9uLlxuICBhc3luYyBvcGVuKG9wdHM6IE9wZW5PcHRpb25zKTogUHJvbWlzZTxWaWRlb01ldGE+IHtcbiAgICBpZiAodGhpcy5fY2xvc2VkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJmcmFtZS1zZXJ2ZXI6IGNsb3NlZFwiKTtcbiAgICB9XG4gICAgY29uc3QgaWQgPSBrZXkob3B0cyk7XG4gICAgY29uc3QgaGl0ID0gdGhpcy5fc2Vzc2lvbnMuZ2V0KGlkKTtcbiAgICBpZiAoaGl0KSB7XG4gICAgICBoaXQucmVmcysrO1xuICAgICAgcmV0dXJuIGhpdC5zZXNzaW9uLm1ldGE7XG4gICAgfVxuICAgIGNvbnN0IHNyYyA9IHRoaXMuX3VzZUlubmVyUHJveHkgPyBwcm94aWVkVXJsKG9wdHMuc3JjKSA6IG9wdHMuc3JjO1xuICAgIGNvbnN0IGluZm8gPSBhd2FpdCB0aGlzLnByb2JlQ2FjaGVkKHNyYyk7XG4gICAgaWYgKHRoaXMuX2Nsb3NlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZnJhbWUtc2VydmVyOiBjbG9zZWRcIik7XG4gICAgfVxuICAgIGxldCBmcmFtZVdpZHRoID0gaW5mby53aWR0aDtcbiAgICBsZXQgZnJhbWVIZWlnaHQgPSBpbmZvLmhlaWdodDtcbiAgICAvLyBEb3duc2NhbGUgdG8gY292ZXIgdGhlIGRpc3BsYXkgYm94IChuZXZlciB1cHNjYWxlKTsgb2JqZWN0Rml0IFwibm9uZVwiIG5lZWRzIDE6MSBuYXRpdmUgcGl4ZWxzLlxuICAgIGlmIChvcHRzLmRzdFcgJiYgb3B0cy5kc3RIICYmIG9wdHMuZml0ICE9PSBcIm5vbmVcIikge1xuICAgICAgY29uc3QgcyA9IE1hdGgubWluKDEsIE1hdGgubWF4KG9wdHMuZHN0VyAvIGluZm8ud2lkdGgsIG9wdHMuZHN0SCAvIGluZm8uaGVpZ2h0KSk7XG4gICAgICBmcmFtZVdpZHRoID0gZXZlbihpbmZvLndpZHRoICogcyk7XG4gICAgICBmcmFtZUhlaWdodCA9IGV2ZW4oaW5mby5oZWlnaHQgKiBzKTtcbiAgICB9XG4gICAgY29uc3QgbWV0YTogVmlkZW9NZXRhID0ge1xuICAgICAgaWQsXG4gICAgICB3aWR0aDogaW5mby53aWR0aCxcbiAgICAgIGhlaWdodDogaW5mby5oZWlnaHQsXG4gICAgICBmcmFtZVdpZHRoLFxuICAgICAgZnJhbWVIZWlnaHQsXG4gICAgICBmcHM6IG9wdHMuZnBzLFxuICAgICAgZHVyYXRpb246IGluZm8uZHVyYXRpb24sXG4gICAgICBsZWFkR2FwOiBpbmZvLmxlYWRHYXAsXG4gICAgfTtcbiAgICB0aGlzLl9zZXNzaW9ucy5zZXQoaWQsIHsgc2Vzc2lvbjogbmV3IERlY29kZVNlc3Npb24obWV0YSwgc3JjKSwgcmVmczogMSB9KTtcbiAgICByZXR1cm4gbWV0YTtcbiAgfVxuXG4gIC8vIERldGVybWluaXN0aWMgbWVkaWEgcmVxdWVzdHMgcmVkaXJlY3QgaGVyZTogcmVhbCBwYXJzZWFibGUgYnl0ZXMgd2l0aCB0cnVlIGludHJpbnNpYyBzaXplICsgZHVyYXRpb24uXG4gIHN0dWIoc3JjOiBzdHJpbmcpOiBQcm9taXNlPEJ1ZmZlcj4ge1xuICAgIGlmICh0aGlzLl9jbG9zZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcImZyYW1lLXNlcnZlcjogY2xvc2VkXCIpO1xuICAgIH1cbiAgICBjb25zdCByZWFsID0gdGhpcy5fdXNlSW5uZXJQcm94eSA/IHByb3hpZWRVcmwoc3JjKSA6IHNyYztcbiAgICBjb25zdCBoaXQgPSB0aGlzLl9zdHVicy5nZXQocmVhbCk7XG4gICAgaWYgKGhpdCkge1xuICAgICAgcmV0dXJuIGhpdDtcbiAgICB9XG4gICAgY29uc3QgcCA9IHRoaXMucHJvYmVDYWNoZWQocmVhbCkudGhlbigoaW5mbykgPT5cbiAgICAgIGVuY29kZVN0dWJXZWJtKHtcbiAgICAgICAgd2lkdGg6IGluZm8ud2lkdGgsXG4gICAgICAgIGhlaWdodDogaW5mby5oZWlnaHQsXG4gICAgICAgIGR1cmF0aW9uOiBpbmZvLmR1cmF0aW9uLFxuICAgICAgfSksXG4gICAgKTtcbiAgICBwLmNhdGNoKCgpID0+IHRoaXMuX3N0dWJzLmRlbGV0ZShyZWFsKSk7XG4gICAgdGhpcy5fc3R1YnMuc2V0KHJlYWwsIHApO1xuICAgIHJldHVybiBwO1xuICB9XG5cbiAgZ2V0RnJhbWUoaWQ6IHN0cmluZywgaWR4OiBudW1iZXIpOiBQcm9taXNlPEJ1ZmZlcj4ge1xuICAgIGNvbnN0IGUgPSB0aGlzLl9zZXNzaW9ucy5nZXQoaWQpO1xuICAgIGlmICghZSkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShCdWZmZXIuYWxsb2MoMCkpO1xuICAgIH1cbiAgICByZXR1cm4gZS5zZXNzaW9uLmdldEZyYW1lKGlkeCk7XG4gIH1cblxuICBhc3luYyBjbG9zZShpZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgZSA9IHRoaXMuX3Nlc3Npb25zLmdldChpZCk7XG4gICAgaWYgKCFlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICgtLWUucmVmcyA+IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fc2Vzc2lvbnMuZGVsZXRlKGlkKTtcbiAgICBhd2FpdCBlLnNlc3Npb24uY2xvc2UoKTtcbiAgfVxuXG4gIC8vIEZhaWxlZCBwcm9iZXMgZXZpY3Qgc28gYSB0cmFuc2llbnQgc291cmNlIGVycm9yIGNhbiByZXRyeSBvbiB0aGUgbmV4dCByZXF1ZXN0LlxuICBwcml2YXRlIHByb2JlQ2FjaGVkKHNyYzogc3RyaW5nKTogUHJvbWlzZTxQcm9iZVJlc3VsdD4ge1xuICAgIGNvbnN0IGhpdCA9IHRoaXMuX3Byb2Jlcy5nZXQoc3JjKTtcbiAgICBpZiAoaGl0KSB7XG4gICAgICByZXR1cm4gaGl0O1xuICAgIH1cbiAgICBjb25zdCBwID0gdXNlUmV0cnkoeyBmbjogcHJvYmUgfSkoc3JjKTtcbiAgICBwLmNhdGNoKCgpID0+IHRoaXMuX3Byb2Jlcy5kZWxldGUoc3JjKSk7XG4gICAgdGhpcy5fcHJvYmVzLnNldChzcmMsIHApO1xuICAgIHJldHVybiBwO1xuICB9XG5cbiAgYXN5bmMgY2xvc2VBbGwoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5fY2xvc2VkID0gdHJ1ZTtcbiAgICBjb25zdCBzZXNzaW9ucyA9IFsuLi50aGlzLl9zZXNzaW9ucy52YWx1ZXMoKV07XG4gICAgdGhpcy5fc2Vzc2lvbnMuY2xlYXIoKTtcbiAgICBhd2FpdCBQcm9taXNlLmFsbChzZXNzaW9ucy5tYXAoKGUpID0+IGUuc2Vzc2lvbi5jbG9zZSgpKSk7XG4gIH1cbn1cblxuZnVuY3Rpb24ga2V5KG9wdHM6IE9wZW5PcHRpb25zKTogc3RyaW5nIHtcbiAgcmV0dXJuIGNyZWF0ZUhhc2goXCJzaGExXCIpXG4gICAgLnVwZGF0ZShgJHtvcHRzLnNyY318JHtvcHRzLmZwc318JHtvcHRzLmRzdFcgPz8gXCJcIn18JHtvcHRzLmRzdEggPz8gXCJcIn18JHtvcHRzLmZpdCA/PyBcIlwifWApXG4gICAgLmRpZ2VzdChcImhleFwiKTtcbn1cblxuLy8gUm91bmQgZG93biB0byBhbiBldmVuIGludGVnZXIgKOKJpTIpIGZvciB0aGUgc2NhbGVyLlxuZnVuY3Rpb24gZXZlbihuOiBudW1iZXIpOiBudW1iZXIge1xuICBjb25zdCByID0gTWF0aC5yb3VuZChuKTtcbiAgcmV0dXJuIE1hdGgubWF4KDIsIHIgLSAociAlIDIpKTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDUvMTguXG5cbmltcG9ydCB7IHByb3RvY29sIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi4vLi4vYmFzZS9sb2dnaW5nXCI7XG5pbXBvcnQgeyBGcmFtZVNlcnZlciwgdHlwZSBWaWRlb01ldGEgfSBmcm9tIFwiLi9mcmFtZV9zZXJ2ZXJcIjtcblxuY29uc3QgVEFHID0gXCJbRnJhbWVQcm90b2NvbF1cIjtcblxuLy8gU2NoZW1lIGlzIHJlZ2lzdGVyZWQgYWxvbmdzaWRlIGBwdXBgIGluIHJlbmRlcmVyL3Byb3RvY29sLnRzIChzaW5nbGUgY2FsbCBvbmx5KS5cbmNvbnN0IFNDSEVNRSA9IFwicHVwLWZyYW1lXCI7XG5cbmNvbnN0IENPUlNfSEVBREVSUzogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgXCJhY2Nlc3MtY29udHJvbC1hbGxvdy1vcmlnaW5cIjogXCIqXCIsXG4gIFwiYWNjZXNzLWNvbnRyb2wtYWxsb3ctbWV0aG9kc1wiOiBcIkdFVCwgT1BUSU9OU1wiLFxuICBcImFjY2Vzcy1jb250cm9sLWFsbG93LWhlYWRlcnNcIjogXCIqXCIsXG59O1xuXG4vLyBNdXN0IGJlIGNhbGxlZCBhZnRlciBhcHAgaXMgcmVhZHkuIERldGVybWluaXN0aWMtb25seSAocmVhbC10aW1lIHZpZGVvcyBzZWxmLXRpY2ssIG5vIGZyYW1lIHByb3RvY29sKS5cbmV4cG9ydCBmdW5jdGlvbiB1c2VGcmFtZVByb3RvY29sKHVzZUlubmVyUHJveHk6IGJvb2xlYW4pOiBBc3luY0Rpc3Bvc2FibGUge1xuICBjb25zdCBmcyA9IG5ldyBGcmFtZVNlcnZlcih1c2VJbm5lclByb3h5KTtcbiAgcHJvdG9jb2wuaGFuZGxlKFNDSEVNRSwgYXN5bmMgKHJlcSkgPT4ge1xuICAgIGlmIChyZXEubWV0aG9kID09PSBcIk9QVElPTlNcIikge1xuICAgICAgcmV0dXJuIG5ldyBSZXNwb25zZShudWxsLCB7IHN0YXR1czogMjA0LCBoZWFkZXJzOiBDT1JTX0hFQURFUlMgfSk7XG4gICAgfVxuICAgIGNvbnN0IHVybCA9IG5ldyBVUkwocmVxLnVybCk7XG4gICAgbG9nZ2VyLmRlYnVnKFRBRywgYCR7cmVxLm1ldGhvZH0gJHt1cmwuaG9zdG5hbWV9JHt1cmwuc2VhcmNofWApO1xuICAgIHRyeSB7XG4gICAgICBsZXQgcmVzOiBSZXNwb25zZTtcbiAgICAgIHN3aXRjaCAodXJsLmhvc3RuYW1lKSB7XG4gICAgICAgIGNhc2UgXCJvcGVuXCI6XG4gICAgICAgICAgcmVzID0ganNvbk9rKFxuICAgICAgICAgICAgYXdhaXQgZnMub3Blbih7XG4gICAgICAgICAgICAgIHNyYzogdXJsLnNlYXJjaFBhcmFtcy5nZXQoXCJzcmNcIikgPz8gXCJcIixcbiAgICAgICAgICAgICAgZnBzOiBpbnQodXJsLCBcImZwc1wiLCAzMCksXG4gICAgICAgICAgICAgIGRzdFc6IGludCh1cmwsIFwid1wiLCAwKSxcbiAgICAgICAgICAgICAgZHN0SDogaW50KHVybCwgXCJoXCIsIDApLFxuICAgICAgICAgICAgICBmaXQ6IHVybC5zZWFyY2hQYXJhbXMuZ2V0KFwiZml0XCIpID8/IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJmcmFtZVwiOlxuICAgICAgICAgIHJlcyA9IHJnYmFPayhhd2FpdCBmcy5nZXRGcmFtZSh1cmwuc2VhcmNoUGFyYW1zLmdldChcImlkXCIpID8/IFwiXCIsIGludCh1cmwsIFwiaWR4XCIsIDEpKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJzdHViXCI6XG4gICAgICAgICAgcmVzID0gd2VibU9rKGF3YWl0IGZzLnN0dWIodXJsLnNlYXJjaFBhcmFtcy5nZXQoXCJzcmNcIikgPz8gXCJcIikpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiY2xvc2VcIjpcbiAgICAgICAgICBhd2FpdCBmcy5jbG9zZSh1cmwuc2VhcmNoUGFyYW1zLmdldChcImlkXCIpID8/IFwiXCIpO1xuICAgICAgICAgIHJlcyA9IG5ldyBSZXNwb25zZShudWxsLCB7IHN0YXR1czogMjA0LCBoZWFkZXJzOiBDT1JTX0hFQURFUlMgfSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmVzID0gbmV3IFJlc3BvbnNlKGB1bmtub3duIGFjdGlvbjogJHt1cmwuaG9zdG5hbWV9YCwge1xuICAgICAgICAgICAgc3RhdHVzOiA0MDQsXG4gICAgICAgICAgICBoZWFkZXJzOiBDT1JTX0hFQURFUlMsXG4gICAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnN0IG1zZyA9IGUgaW5zdGFuY2VvZiBFcnJvciA/IGUubWVzc2FnZSA6IFN0cmluZyhlKTtcbiAgICAgIGxvZ2dlci5lcnJvcihUQUcsIGAke3VybC5ob3N0bmFtZX0gZmFpbGVkJHt1cmwuc2VhcmNofTogJHttc2d9YCk7XG4gICAgICByZXR1cm4gbmV3IFJlc3BvbnNlKG1zZywgeyBzdGF0dXM6IDUwMCwgaGVhZGVyczogQ09SU19IRUFERVJTIH0pO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiB7XG4gICAgW1N5bWJvbC5hc3luY0Rpc3Bvc2VdOiBhc3luYyAoKSA9PiB7XG4gICAgICBwcm90b2NvbC51bmhhbmRsZShTQ0hFTUUpO1xuICAgICAgYXdhaXQgZnMuY2xvc2VBbGwoKTtcbiAgICB9LFxuICB9O1xufVxuXG5mdW5jdGlvbiBqc29uT2sobWV0YTogVmlkZW9NZXRhKTogUmVzcG9uc2Uge1xuICByZXR1cm4gbmV3IFJlc3BvbnNlKEpTT04uc3RyaW5naWZ5KG1ldGEpLCB7XG4gICAgaGVhZGVyczogeyAuLi5DT1JTX0hFQURFUlMsIFwiY29udGVudC10eXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiIH0sXG4gIH0pO1xufVxuXG4vLyBDYWNoZWQgc3R1YiBCdWZmZXIgaXMgc2hhcmVkIGFjcm9zcyByZXNwb25zZXMg4oCUIGNvcHkgc28gYSBjb25zdW1lciBjYW4ndCBkZXRhY2ggaXQuXG5mdW5jdGlvbiB3ZWJtT2soYnl0ZXM6IEJ1ZmZlcik6IFJlc3BvbnNlIHtcbiAgY29uc3QgY29weSA9IG5ldyBVaW50OEFycmF5KGJ5dGVzLmJ5dGVMZW5ndGgpO1xuICBjb3B5LnNldChieXRlcyk7XG4gIHJldHVybiBuZXcgUmVzcG9uc2UoY29weS5idWZmZXIgYXMgQXJyYXlCdWZmZXIsIHtcbiAgICBoZWFkZXJzOiB7XG4gICAgICAuLi5DT1JTX0hFQURFUlMsXG4gICAgICBcImNvbnRlbnQtdHlwZVwiOiBcInZpZGVvL3dlYm1cIixcbiAgICAgIFwiY2FjaGUtY29udHJvbFwiOiBcIm5vLXN0b3JlXCIsXG4gICAgfSxcbiAgfSk7XG59XG5cbi8vIFJhdyBSR0JBIHBpeGVsczsgdGhlIHBhZ2Ugd3JhcHMgdGhlbSBpbiBJbWFnZURhdGEgdXNpbmcgbWV0YS53aWR0aC9oZWlnaHQgaXQgZ290IGZyb20gYG9wZW5gLlxuZnVuY3Rpb24gcmdiYU9rKGJ5dGVzOiBCdWZmZXIpOiBSZXNwb25zZSB7XG4gIGlmIChieXRlcy5ieXRlTGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG5ldyBSZXNwb25zZShudWxsLCB7IHN0YXR1czogNDEwLCBoZWFkZXJzOiBDT1JTX0hFQURFUlMgfSk7XG4gIH1cbiAgY29uc3QgY29weSA9IG5ldyBVaW50OEFycmF5KGJ5dGVzLmJ5dGVMZW5ndGgpO1xuICBjb3B5LnNldChieXRlcyk7XG4gIHJldHVybiBuZXcgUmVzcG9uc2UoY29weS5idWZmZXIgYXMgQXJyYXlCdWZmZXIsIHtcbiAgICBoZWFkZXJzOiB7XG4gICAgICAuLi5DT1JTX0hFQURFUlMsXG4gICAgICBcImNvbnRlbnQtdHlwZVwiOiBcImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbVwiLFxuICAgICAgXCJjYWNoZS1jb250cm9sXCI6IFwibm8tc3RvcmVcIixcbiAgICB9LFxuICB9KTtcbn1cblxuZnVuY3Rpb24gaW50KHVybDogVVJMLCBrZXk6IHN0cmluZywgZmFsbGJhY2s6IG51bWJlcik6IG51bWJlciB7XG4gIGNvbnN0IHYgPSB1cmwuc2VhcmNoUGFyYW1zLmdldChrZXkpO1xuICBjb25zdCBuID0gdiA/IHBhcnNlSW50KHYsIDEwKSA6IE5hTjtcbiAgcmV0dXJuIE51bWJlci5pc0Zpbml0ZShuKSA/IG4gOiBmYWxsYmFjaztcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDMvMTMuXG5cbmltcG9ydCB0eXBlIHsgQnJvd3NlcldpbmRvdywgTmF0aXZlSW1hZ2UsIFNpemUgfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IGFkdmFuY2VWaXJ0dWFsVGltZSwgcGF1c2VWaXJ0dWFsVGltZSwgcmVidWlsZERyYXdhYmxlIH0gZnJvbSBcIi4uL2Jhc2UvY2RwXCI7XG5pbXBvcnQgeyBFbmNvZGVyUGlwZWxpbmUgfSBmcm9tIFwiLi4vYmFzZS9lbmNvZGVyL3BpcGVsaW5lXCI7XG5pbXBvcnQgeyBzaXplRXF1YWxzIH0gZnJvbSBcIi4uL2Jhc2UvaW1hZ2VcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuLi9iYXNlL2xvZ2dpbmdcIjtcbmltcG9ydCB7IEJMQU5LX1dBUk5fUkFUSU8sIEJsYW5rU3RhdHMgfSBmcm9tIFwiLi4vYmFzZS9xdWFsaXR5L2JsYW5rXCI7XG5pbXBvcnQgeyBEcm9wU3RhdHMsIEpBTktfV0FSTl9TQ09SRSB9IGZyb20gXCIuLi9iYXNlL3F1YWxpdHkvZHJvcFwiO1xuaW1wb3J0IHsgcGVyaW9kaWNhbCB9IGZyb20gXCIuLi9iYXNlL3RpbWluZ1wiO1xuaW1wb3J0IHR5cGUgeyBJcGNEb25lUGF5bG9hZCB9IGZyb20gXCIuL2lwY1wiO1xuaW1wb3J0IHR5cGUgeyBJUENSZW5kZXJPcHRpb25zIH0gZnJvbSBcIi4vc2NoZW1hXCI7XG5pbXBvcnQgeyBTY3JlZW5zaG90VGFrZXIgfSBmcm9tIFwiLi9zY3JlZW5zaG90XCI7XG5pbXBvcnQgeyBkZWNvZGVTdGVnbywgZHJhd1N0ZWdvLCBGUkFNRV9TWU5DX01BUktFUl9XSURUSCwgd2FpdFN0ZWdvVGljayB9IGZyb20gXCIuL3N0ZWdvXCI7XG5pbXBvcnQgeyB0aWNrIH0gZnJvbSBcIi4vdGlja1wiO1xuaW1wb3J0IHsgdXNlRnJhbWVQcm90b2NvbCB9IGZyb20gXCIuL3ZpZGVvL3Byb3RvY29sXCI7XG5pbXBvcnQgeyBkaXNwb3NlV2luZG93LCBsb2FkV2luZG93IH0gZnJvbSBcIi4vd2luZG93XCI7XG5cbmNvbnN0IFRBRyA9IFwiW1Nob290XVwiO1xuY29uc3QgUkVOREVSX0ZQUyA9IDI0MDtcblxuaW50ZXJmYWNlIFBhaW50T3B0aW9ucyB7XG4gIHNvdXJjZTogc3RyaW5nO1xuICBmcHM6IG51bWJlcjtcbiAgd2luOiBCcm93c2VyV2luZG93O1xuICBzaXplOiBTaXplO1xuICBtczogbnVtYmVyO1xufVxuXG5pbnRlcmZhY2UgRnJhbWUge1xuICBwaXg6IEJ1ZmZlcjtcbiAgdHM6IG51bWJlcjtcbn1cblxuLy8gUGFpbnRpbmcgc3RheXMgb24gZm9yIHRoZSB3aG9sZSBydW47IHdhaXRzIGZvciB0aGUgZnJhbWUgd2hvc2Ugc3RlZ28gcm93IG1hdGNoZXMgYG1zYCwgdW5kZWZpbmVkIG9uIHRpbWVvdXQuXG5hc3luYyBmdW5jdGlvbiBwYWludCh7IHdpbiwgZnBzLCBzaXplLCBtcyB9OiBQYWludE9wdGlvbnMpOiBQcm9taXNlPEZyYW1lIHwgdW5kZWZpbmVkPiB7XG4gIGxldCBjbGVhckRpcnR5Q2hlY2s6IFZvaWRGdW5jdGlvbiB8IHVuZGVmaW5lZDtcbiAgY29uc3QgZnJhbWVTaXplOiBTaXplID0geyB3aWR0aDogc2l6ZS53aWR0aCwgaGVpZ2h0OiBzaXplLmhlaWdodCArIDEgfTtcbiAgY29uc3QgaXNGaXJzdEZyYW1lID0gTWF0aC5hYnMoMTAwMCAvIGZwcyAtIG1zKSA8IDE7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IG5ldyBQcm9taXNlPEZyYW1lIHwgdW5kZWZpbmVkPigocmVzb2x2ZSkgPT4ge1xuICAgICAgY29uc3QgaGFuZGxlciA9IChfZTogdW5rbm93biwgX2Q6IHVua25vd24sIGltYWdlOiBOYXRpdmVJbWFnZSkgPT4ge1xuICAgICAgICBjb25zdCBpbWFnZVNpemUgPSBpbWFnZS5nZXRTaXplKCk7XG4gICAgICAgIGlmICghc2l6ZUVxdWFscyhpbWFnZVNpemUsIGZyYW1lU2l6ZSkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gRGVjb2RlIGZyb20gYSAyLXJvdyBzbGl2ZXIgZmlyc3Q7IHRoZSBmdWxsLWZyYW1lIHJlYWRiYWNrICh+OE1CIG1lbWNweSkgaXMgcGFpZCBvbmx5IG9uIHRoZSBtYXRjaGluZyBmcmFtZS5cbiAgICAgICAgY29uc3Qgc2xpdmVyID0gaW1hZ2UuY3JvcCh7IHg6IDAsIHk6IGZyYW1lU2l6ZS5oZWlnaHQgLSAyLCB3aWR0aDogRlJBTUVfU1lOQ19NQVJLRVJfV0lEVEgsIGhlaWdodDogMiB9KTtcbiAgICAgICAgY29uc3QgdHMgPSBkZWNvZGVTdGVnbyhzbGl2ZXIudG9CaXRtYXAoKSwgeyB3aWR0aDogRlJBTUVfU1lOQ19NQVJLRVJfV0lEVEgsIGhlaWdodDogMiB9KTtcbiAgICAgICAgaWYgKHRzID09PSB1bmRlZmluZWQgfHwgbXMgLSB0cyA+IDEpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYml0bWFwID0gaW1hZ2UudG9CaXRtYXAoKTtcbiAgICAgICAgd2luLndlYkNvbnRlbnRzLm9mZihcInBhaW50XCIsIGhhbmRsZXIpO1xuICAgICAgICByZXNvbHZlKHsgdHMsIHBpeDogQnVmZmVyLmZyb20oYml0bWFwLmJ1ZmZlciwgYml0bWFwLmJ5dGVPZmZzZXQsIHNpemUuaGVpZ2h0ICogc2l6ZS53aWR0aCAqIDQpIH0pO1xuICAgICAgfTtcbiAgICAgIHdpbi53ZWJDb250ZW50cy5vbihcInBhaW50XCIsIGhhbmRsZXIpO1xuICAgICAgY29uc3QgdGltZW91dCA9IGlzRmlyc3RGcmFtZSA/IGZwcyAqIDEwIDogZnBzICogNTtcbiAgICAgIGNvbnN0IHJlZnJlc2hGcHMgPSBNYXRoLmZsb29yKGlzRmlyc3RGcmFtZSA/IGZwcyA6IGZwcyAvIDIpO1xuICAgICAgY2xlYXJEaXJ0eUNoZWNrID0gcGVyaW9kaWNhbChhc3luYyAoc3R1Y2spID0+IHtcbiAgICAgICAgaWYgKHN0dWNrID49IHRpbWVvdXQpIHtcbiAgICAgICAgICBsb2dnZXIud2FybihUQUcsIGBwYWludCB0aW1lb3V0IEAgJHttc31gKTtcbiAgICAgICAgICB3aW4ud2ViQ29udGVudHMub2ZmKFwicGFpbnRcIiwgaGFuZGxlcik7XG4gICAgICAgICAgcmVzb2x2ZSh1bmRlZmluZWQpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0dWNrICUgcmVmcmVzaEZwcyA9PT0gMCkge1xuICAgICAgICAgIGF3YWl0IHJlYnVpbGREcmF3YWJsZSh3aW4ud2ViQ29udGVudHMsIGZyYW1lU2l6ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH0sIDEwMDAgLyBmcHMpO1xuICAgIH0pO1xuICB9IGZpbmFsbHkge1xuICAgIGNsZWFyRGlydHlDaGVjaz8uKCk7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNob290KG9wdGlvbnM6IElQQ1JlbmRlck9wdGlvbnMpOiBQcm9taXNlPElwY0RvbmVQYXlsb2FkPiB7XG4gIGNvbnN0IHsgc291cmNlLCBmcHMsIHdpZHRoLCBoZWlnaHQsIGR1cmF0aW9uLCB3aXRoQXVkaW8sIG91dEZpbGVzLCBkaXNhYmxlSHdDb2RlYywgc2lnbmFsLCBvblByb2dyZXNzIH0gPSBvcHRpb25zO1xuICBpZiAod2l0aEF1ZGlvKSB7XG4gICAgbG9nZ2VyLndhcm4oVEFHLCBcImF1ZGlvIHdpbGwgYmUgaWdub3JlZCBvbiB0aGlzIG1vZGVcIik7XG4gIH1cbiAgY29uc3QgdGFrZXIgPSBuZXcgU2NyZWVuc2hvdFRha2VyKHsgbWFya3M6IG9wdGlvbnMuc2NyZWVuc2hvdHMsIHdpZHRoLCBoZWlnaHQsIG91dEZpbGVzIH0pO1xuXG4gIGF3YWl0IHVzaW5nIF8gPSB1c2VGcmFtZVByb3RvY29sKG9wdGlvbnMudXNlSW5uZXJQcm94eSk7XG4gIGNvbnN0IHRJbml0ID0gcGVyZm9ybWFuY2Uubm93KCk7XG4gIGNvbnN0IHdpblAgPSBsb2FkV2luZG93KHsgc291cmNlLCByZW5kZXJlcjogb3B0aW9ucywgc2lnbmFsIH0pO1xuICBhd2FpdCB1c2luZyBwaXBlbGluZSA9IGF3YWl0IEVuY29kZXJQaXBlbGluZS5jcmVhdGUoeyB3aWR0aCwgaGVpZ2h0LCBmcHMsIG91dEZpbGVzLCB3aXRoQXVkaW8sIGRpc2FibGVId0NvZGVjIH0pO1xuICBjb25zdCB3aW4gPSBhd2FpdCB3aW5QO1xuICBjb25zdCBpbml0TXMgPSBNYXRoLnJvdW5kKHBlcmZvcm1hbmNlLm5vdygpIC0gdEluaXQpO1xuICBsb2dnZXIuZGVidWcoVEFHLCBcImluaXQgZG9uZTpcIiwgeyBzb3VyY2UsIGNvc3Q6IGluaXRNcyB9KTtcblxuICBjb25zdCB0b3RhbCA9IE1hdGguY2VpbChmcHMgKiBkdXJhdGlvbik7XG4gIGNvbnN0IGZyYW1lSW50ZXJ2YWwgPSAxMDAwIC8gZnBzO1xuXG4gIGxldCB3cml0dGVuID0gMDtcbiAgbGV0IHByb2dyZXNzID0gMDtcbiAgbGV0IGhlbGQgPSAwO1xuICBsZXQgbGFzdEZyYW1lOiBGcmFtZSB8IHVuZGVmaW5lZDtcbiAgbGV0IHNjcmVlbnNob3RzOiBzdHJpbmdbXSA9IFtdO1xuICBjb25zdCBibGFua1N0YXRzID0gbmV3IEJsYW5rU3RhdHMod2lkdGgsIGhlaWdodCk7XG4gIGNvbnN0IGRyb3BTdGF0cyA9IG5ldyBEcm9wU3RhdHMoZnBzKTtcbiAgY29uc3QgY2RwID0gd2luLndlYkNvbnRlbnRzLmRlYnVnZ2VyO1xuICBjb25zdCBtYWluID0gd2luLndlYkNvbnRlbnRzLm1haW5GcmFtZTtcbiAgY29uc3QgaWZyYW1lID0gbWFpbi5mcmFtZXNbMF07XG4gIHRyeSB7XG4gICAgLy8gQ29tcG9zaXRvci9jYXB0dXJlIGNhZGVuY2UgY2FwLCBOT1Qgb3V0cHV0IGZwczsgZnJhbWVzIGFyZSBkYW1hZ2UtZHJpdmVuIHBlciB2aXJ0dWFsIHN0ZXAuXG4gICAgd2luLndlYkNvbnRlbnRzLnNldEZyYW1lUmF0ZShSRU5ERVJfRlBTKTtcbiAgICBhd2FpdCBwYXVzZVZpcnR1YWxUaW1lKGNkcCk7XG5cbiAgICBmb3IgKGxldCBmcmFtZUlkID0gMDsgZnJhbWVJZCA8IHRvdGFsOyBmcmFtZUlkKyspIHtcbiAgICAgIHNpZ25hbD8udGhyb3dJZkFib3J0ZWQoKTtcbiAgICAgIGNvbnN0IGZyYW1lTXMgPSAoZnJhbWVJZCArIDEpICogZnJhbWVJbnRlcnZhbDtcblxuICAgICAgLy8gQXJtIGJlZm9yZSBkcmF3U3RlZ28gc28gdGhlIGNvbW1pdCBhY2sgY2FuJ3QgYmUgbWlzc2VkOyBicmFuY2ggY2F0Y2gga2VlcHMgYW4gZWFybHkgdGljayBmYWlsdXJlIGZyb20gb3JwaGFuaW5nIGl0LlxuICAgICAgY29uc3Qgc3dhcHBlZCA9IHdhaXRTdGVnb1RpY2sod2luLndlYkNvbnRlbnRzKTtcbiAgICAgIHN3YXBwZWQuY2F0Y2goKCkgPT4ge30pO1xuICAgICAgLy8gSW5kZXBlbmRlbnQgdGFyZ2V0cyAoaWZyYW1lIGNsb2NrIHZzIG1haW4tZnJhbWUgc3RlZ28gY2FudmFzKTogb25lIGNvbmN1cnJlbnQgaG9wIGluc3RlYWQgb2YgdHdvIHNlcmlhbCBvbmVzLlxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoW3RpY2soeyBmcmFtZTogaWZyYW1lLCB0aW1lc3RhbXBNczogZnJhbWVNcywgc2lnbmFsIH0pLCBkcmF3U3RlZ28od2luLndlYkNvbnRlbnRzLCBmcmFtZU1zKV0pO1xuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoW2FkdmFuY2VWaXJ0dWFsVGltZShjZHAsIGZyYW1lSW50ZXJ2YWwpLCBzd2FwcGVkXSk7XG4gICAgICBjb25zdCBwYWludGVkID0gYXdhaXQgcGFpbnQoeyBzb3VyY2UsIGZwcywgd2luLCBzaXplOiB7IHdpZHRoLCBoZWlnaHQgfSwgbXM6IGZyYW1lTXMgfSk7XG4gICAgICBpZiAocGFpbnRlZCkge1xuICAgICAgICBoZWxkID0gMDtcbiAgICAgICAgZHJvcFN0YXRzLndyb3RlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBoZWxkKys7XG4gICAgICAgIGRyb3BTdGF0cy5kcm9wcGVkKDEpO1xuICAgICAgfVxuICAgICAgY29uc3QgZnJhbWUgPSBwYWludGVkID8/IGxhc3RGcmFtZTtcbiAgICAgIGlmICghZnJhbWUgfHwgaGVsZCA+PSBmcHMpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGByZW5kZXJlciBleGF1c3RlZCBAICR7ZnJhbWVNc31gKTtcbiAgICAgIH1cbiAgICAgIC8vIFRoZSBjb21wb3NpdG9yIG1heSBwYWludCBxdWlja2VyIHRoYW4gdXMsIG9yIHN0dWNrLCBzbyB3ZSBhdCBsZWFzdCBwYWludCBvbmNlXG4gICAgICBjb25zdCByZXBlYXQgPSBNYXRoLm1heCgxLCBNYXRoLmNlaWwoZnJhbWUudHMgLyBmcmFtZUludGVydmFsIC0gZnJhbWVJZCkpO1xuICAgICAgbGFzdEZyYW1lID0gZnJhbWU7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlcGVhdDsgaSsrKSB7XG4gICAgICAgIHRha2VyLmNhcHR1cmUoZnJhbWVNcywgZnJhbWUucGl4KTtcbiAgICAgICAgYmxhbmtTdGF0cy5zYW1wbGUoZnJhbWUucGl4KTtcbiAgICAgICAgLy8gQXdhaXRlZDogdGhlIGxpbWl0ZXIgcXVldWVzIHdpdGhvdXQgYm91bmQsIHNvIGFuIGVuY29kZXIgc2xvd2VyIHRoYW4gY2FwdHVyZSBwaW5zIG9uZSBmdWxsIEJHUkEgZnJhbWUgcGVyIGJhY2tsb2cgZW50cnkuXG4gICAgICAgIGF3YWl0IHBpcGVsaW5lLmVuY29kZUJHUkEoZnJhbWUucGl4KTtcbiAgICAgICAgd3JpdHRlbisrO1xuICAgICAgfVxuICAgICAgY29uc3QgbmV3UHJvZ3Jlc3MgPSBNYXRoLmZsb29yKCh3cml0dGVuIC8gdG90YWwpICogMTAwKTtcbiAgICAgIGlmIChuZXdQcm9ncmVzcyAhPT0gcHJvZ3Jlc3MpIHtcbiAgICAgICAgcHJvZ3Jlc3MgPSBuZXdQcm9ncmVzcztcbiAgICAgICAgb25Qcm9ncmVzcyhwcm9ncmVzcyk7XG4gICAgICB9XG4gICAgfVxuICB9IGZpbmFsbHkge1xuICAgIGF3YWl0IGRpc3Bvc2VXaW5kb3cod2luKTtcbiAgICBhd2FpdCBwaXBlbGluZS5maW5pc2goKTtcbiAgICBzY3JlZW5zaG90cyA9IGF3YWl0IHRha2VyLmZpbmlzaChsYXN0RnJhbWU/LnBpeCk7XG4gIH1cblxuICBpZiAod3JpdHRlbiA9PT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIm5vIGZyYW1lcyBjYXB0dXJlZFwiKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBibGFuayA9IGJsYW5rU3RhdHMuZmluYWxpemUoKTtcbiAgICBpZiAoYmxhbmsgPj0gQkxBTktfV0FSTl9SQVRJTykge1xuICAgICAgbG9nZ2VyLndhcm4oVEFHLCBgJHtzb3VyY2V9IGJsYW5rLWZyYW1lIHJhdGlvICR7TWF0aC5yb3VuZChibGFuayAqIDEwMCl9JSDigJQgcG9zc2libGUgd2hpdGUvYmxhbmsgc2NyZWVuYCk7XG4gICAgfVxuICAgIGNvbnN0IHsgamFuayB9ID0gZHJvcFN0YXRzLmZpbmFsaXplKCk7XG4gICAgaWYgKGphbmsgPj0gSkFOS19XQVJOX1NDT1JFKSB7XG4gICAgICBsb2dnZXIud2FybihUQUcsIGAke3NvdXJjZX0gamFuayBzY29yZSAke2phbmsudG9GaXhlZCgyKX0g4oCUIGZyYW1lcyBoZWxkIHBhc3QgcGFpbnQgdGltZW91dGApO1xuICAgIH1cbiAgICByZXR1cm4geyB3cml0dGVuLCBvdXRGaWxlcywgYmxhbmssIGphbmssIHNjcmVlbnNob3RzIH07XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDEvMzAuXG5cbmltcG9ydCB7IG9rIH0gZnJvbSBcIm5vZGU6YXNzZXJ0XCI7XG5pbXBvcnQgeyBta2RpciB9IGZyb20gXCJub2RlOmZzL3Byb21pc2VzXCI7XG5pbXBvcnQgeyBkaXJuYW1lIH0gZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHsgYXBwLCBNZW51IH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBzdGFydEVsZWN0cm9uQ3Jhc2hSZXBvcnRlciB9IGZyb20gXCIuL2Jhc2UvY3Jhc2hcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuL2Jhc2UvbG9nZ2luZ1wiO1xuaW1wb3J0IHsgbWFrZUNMSSB9IGZyb20gXCIuL2NvbW1vblwiO1xuaW1wb3J0IHsgdHlwZSBJcGNNc2csIElwY01zZ1R5cGUsIElwY1dyaXRlciB9IGZyb20gXCIuL3JlbmRlcmVyL2lwY1wiO1xuaW1wb3J0IHsgc2V0dXBQdXBQcm90b2NvbCB9IGZyb20gXCIuL3JlbmRlcmVyL3Byb3RvY29sXCI7XG5pbXBvcnQgeyByZW5kZXIgfSBmcm9tIFwiLi9yZW5kZXJlci9yZW5kZXJcIjtcbmltcG9ydCB7IHdpdGhSZXJlbmRlciB9IGZyb20gXCIuL3JlbmRlcmVyL3JlcmVuZGVyXCI7XG5pbXBvcnQgeyBzaG9vdCB9IGZyb20gXCIuL3JlbmRlcmVyL3Nob290XCI7XG5cbmNvbnN0IFRBRyA9IFwiW0FwcF1cIjtcblxucHJvY2Vzcy5lbnZbXCJFTEVDVFJPTl9ESVNBQkxFX1NFQ1VSSVRZX1dBUk5JTkdTXCJdID0gXCIxXCI7XG5cbmZ1bmN0aW9uIHByaW50RmVhdHVyZXMoKSB7XG4gIGxvZ2dlci5kZWJ1ZyhUQUcsIFwiZ3B1IGZlYXR1cmVzOlwiLCBhcHAuZ2V0R1BVRmVhdHVyZVN0YXR1cygpKTtcbn1cblxuY29uc3QgY3RybCA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbmxldCBleGl0aW5nID0gZmFsc2U7XG5cbnN0YXJ0RWxlY3Ryb25DcmFzaFJlcG9ydGVyKCk7XG5NZW51LnNldEFwcGxpY2F0aW9uTWVudShudWxsKTtcbmFwcC5kb2NrPy5oaWRlKCk7XG5hcHAub24oXCJ3aW5kb3ctYWxsLWNsb3NlZFwiLCAoKSA9PiB7fSk7XG5hcHAub24oXCJncHUtaW5mby11cGRhdGVcIiwgcHJpbnRGZWF0dXJlcyk7XG5hcHAub24oXCJiZWZvcmUtcXVpdFwiLCAoZSkgPT4gIWV4aXRpbmcgJiYgZS5wcmV2ZW50RGVmYXVsdCgpKTtcbmFwcC5vbihcIndpbGwtcXVpdFwiLCAoZSkgPT4gIWV4aXRpbmcgJiYgZS5wcmV2ZW50RGVmYXVsdCgpKTtcblxub2socHJvY2Vzcy5zZW5kLCBcImlwYyBjaGFubmVsIG1pc3Npbmcg4oCUIHNwYXduIHdpdGggc3RkaW9bM109J2lwYydcIik7XG5wcm9jZXNzLm9uY2UoXCJkaXNjb25uZWN0XCIsICgpID0+IGN0cmwuYWJvcnQoXCJkaXNjb25uZWN0XCIpKTtcbnByb2Nlc3Mub24oXCJtZXNzYWdlXCIsIChyYXcpID0+IHtcbiAgY29uc3QgbXNnID0gcmF3IGFzIElwY01zZztcbiAgaWYgKG1zZy50eXBlID09PSBJcGNNc2dUeXBlLkNhbmNlbCkge1xuICAgIGN0cmwuYWJvcnQobXNnLnJlYXNvbik7XG4gIH1cbn0pO1xuXG5tYWtlQ0xJKHtcbiAgbmFtZTogXCJhcHBcIixcbiAgcnVuOiBhc3luYyAoc291cmNlLCBvcHRpb25zKSA9PiB7XG4gICAgY29uc3QgaXBjID0gbmV3IElwY1dyaXRlcigpO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBhcHAud2hlblJlYWR5KCk7XG4gICAgICBzZXR1cFB1cFByb3RvY29sKCk7XG4gICAgICBwcmludEZlYXR1cmVzKCk7XG4gICAgICBmb3IgKGNvbnN0IG91dCBvZiBvcHRpb25zLm91dEZpbGVzKSB7XG4gICAgICAgIGF3YWl0IG1rZGlyKGRpcm5hbWUob3V0KSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICB9XG4gICAgICBjb25zdCBhY3Rpb24gPSBvcHRpb25zLmRldGVybWluaXN0aWMgPyBzaG9vdCA6IHJlbmRlcjtcbiAgICAgIGN0cmwuc2lnbmFsLnRocm93SWZBYm9ydGVkKCk7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB3aXRoUmVyZW5kZXIoY3RybC5zaWduYWwsICgpID0+XG4gICAgICAgIGFjdGlvbih7XG4gICAgICAgICAgc291cmNlLFxuICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgc2lnbmFsOiBjdHJsLnNpZ25hbCxcbiAgICAgICAgICBvblByb2dyZXNzOiAocCkgPT4gaXBjLndyaXRlUHJvZ3Jlc3MocCksXG4gICAgICAgICAgb25Db25zb2xlOiAobCwgbSkgPT4gaXBjLndyaXRlQ29uc29sZShsLCBtKSxcbiAgICAgICAgfSksXG4gICAgICApO1xuICAgICAgYXdhaXQgaXBjLndyaXRlRG9uZShyZXN1bHQpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnN0IGVycm9yID0gZSBhcyBFcnJvcjtcbiAgICAgIGNvbnN0IG0gPSBlcnJvci5zdGFjayA/PyBlcnJvci5tZXNzYWdlID8/IFN0cmluZyhlID8/IFwidW5rbm93biBlcnJvclwiKTtcbiAgICAgIGF3YWl0IGlwYy53cml0ZUVycm9yKG0pO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBleGl0aW5nID0gdHJ1ZTtcbiAgICAgIGFwcC5leGl0KCk7XG4gICAgfVxuICB9LFxufSk7XG4iXX0=
96
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL3RzdXBAOC41LjErY2JkMDZiZTE1OWE5MGZhZS9ub2RlX21vZHVsZXMvdHN1cC9hc3NldHMvY2pzX3NoaW1zLmpzIiwiLi4vc3JjL2Jhc2UvZW52LnRzIiwiLi4vc3JjL2Jhc2UvcGFyc2VyLnRzIiwiLi4vc3JjL2Jhc2UvY29uc3RhbnRzLnRzIiwiLi4vc3JjL2Jhc2UvbG9nZ2luZy50cyIsIi4uL3NyYy9iYXNlL2NyYXNoLnRzIiwiLi4vc3JjL2Jhc2Uvbm9lcnIudHMiLCIuLi9zcmMvYmFzZS9wcm9jZXNzLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3NjaGVtYS50cyIsIi4uL3NyYy9jb21tb24udHMiLCIuLi9zcmMvcmVuZGVyZXIvaXBjLnRzIiwiLi4vc3JjL2Jhc2UvdGltaW5nLnRzIiwiLi4vc3JjL2Jhc2UvY2RwLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3N0ZWdvLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3Byb3RvY29sLnRzIiwiLi4vc3JjL2Jhc2UvbGltaXRlci50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvbWlzYy50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvY29kZWMudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL2F1ZGlvLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9oZXZjX2FscGhhL2JpdC50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvaGV2Y19hbHBoYS9uYWwudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL2hldmNfYWxwaGEvYWxwaGFfZGFyd2luLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9oZXZjX2FscGhhL3Zwcy50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvaGV2Y19hbHBoYS9hbHBoYS50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvaGV2Y19hbHBoYS9kdWFsX2xheWVyX211eC50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvaGV2Y19hbHBoYS9wYXJzZXIudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL2hldmNfYWxwaGEvbnZlbmMudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL3ZpZGVvLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci92aWRlb3Rvb2xib3gudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL2ZhY3RvcnkudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL211eGVyLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9zaW5rLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9waXBlbGluZS50cyIsIi4uL3NyYy9iYXNlL2ltYWdlLnRzIiwiLi4vc3JjL2Jhc2UvcXVhbGl0eS9ibGFuay50cyIsIi4uL3NyYy9iYXNlL3F1YWxpdHkvZHJvcC50cyIsIi4uL3NyYy9yZW5kZXJlci9hdWRpby50cyIsIi4uL3NyYy9yZW5kZXJlci9zY3JlZW5zaG90LnRzIiwiLi4vc3JjL2Jhc2UvcmV0cnkudHMiLCIuLi9zcmMvcnVudGltZS93b3JsZC50cyIsIi4uL3NyYy9iYXNlL3dhaXRhYmxlX2V2ZW50LnRzIiwiLi4vc3JjL3JlbmRlcmVyL25ldHdvcmsudHMiLCIuLi9zcmMvcmVuZGVyZXIvd2luZG93LnRzIiwiLi4vc3JjL3JlbmRlcmVyL3JlbmRlci50cyIsIi4uL3NyYy9yZW5kZXJlci9yZXJlbmRlci50cyIsIi4uL3NyYy9yZW5kZXJlci92aWRlby9hZHZhbmNlLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3RpY2sudHMiLCIuLi9zcmMvcmVuZGVyZXIvdmlkZW8vb3Blbi50cyIsIi4uL3NyYy9yZW5kZXJlci92aWRlby9kZWNvZGUudHMiLCIuLi9zcmMvcmVuZGVyZXIvdmlkZW8vZGVjb2RlX3Nlc3Npb24udHMiLCIuLi9zcmMvcmVuZGVyZXIvdmlkZW8vcHJvYmUudHMiLCIuLi9zcmMvcmVuZGVyZXIvdmlkZW8vc3R1Yi50cyIsIi4uL3NyYy9yZW5kZXJlci92aWRlby9mcmFtZV9zZXJ2ZXIudHMiLCIuLi9zcmMvcmVuZGVyZXIvdmlkZW8vcHJvdG9jb2wudHMiLCIuLi9zcmMvcmVuZGVyZXIvc2hvb3QudHMiLCIuLi9zcmMvYXBwLnRzIl0sIm5hbWVzIjpbImdldEltcG9ydE1ldGFVcmwiLCJpbXBvcnRNZXRhVXJsIiwicGVudiIsIm5hbWUiLCJwYXJzZXIiLCJkZWZhdWx0VmFsdWUiLCJwYXJzZU51bWJlciIsIngiLCJudW0iLCJwYXJzZVN0cmluZyIsInBhcnNlQXJyYXkiLCJpdGVtIiwicyIsInJlcXVpcmUiLCJjcmVhdGVSZXF1aXJlIiwicHVwTG9nTGV2ZWwiLCJwdXBQa2dSb290IiwiZGlybmFtZSIsImpvaW4iLCJwdXBQcmVsb2FkIiwiREVCVUciLCJJTkZPIiwiV0FSTiIsIkVSUk9SIiwiRkFUQUwiLCJzdGFja0hvb2siLCJ0YXJnZXQiLCJfY29udGV4dCIsIm1lc3NhZ2VzIiwicHJvY2Vzc2VkIiwibXNnIiwiX2ZhdGFsX2RlYyIsIl9lcnJvcl9kZWMiLCJfd2Fybl9kZWMiLCJfaW5mb19kZWMiLCJfZGVidWdfZGVjIiwiX2luaXQiLCJMb2dnZXIiLCJfbGV2ZWwiLCJfX3J1bkluaXRpYWxpemVycyIsIl9fcHVibGljRmllbGQiLCJ2YWx1ZSIsImRlYnVnIiwiaW5mbyIsIndhcm4iLCJlcnJvciIsImx2IiwibWVzc2FnZSIsInByb2MiLCJyZXNvbHZlIiwicmVqZWN0IiwiZmF0YWwiLCJkaXNwYXRjaCIsImRhdGEiLCJlcnIiLCJjb2RlIiwic2lnbmFsIiwicmVhc29uIiwiX19kZWNvcmF0b3JTdGFydCIsIl9fZGVjb3JhdGVFbGVtZW50IiwiX19kZWNvcmF0b3JNZXRhZGF0YSIsImxvZ2dlciIsIkxvZyIsImxldmVsIiwiQVZfTE9HX0VSUk9SIiwiQVZfTE9HX1dBUk5JTkciLCJUQUciLCJzdGFydEVsZWN0cm9uQ3Jhc2hSZXBvcnRlciIsImR1bXBEaXIiLCJhcHAiLCJta2RpclN5bmMiLCJjcmFzaFJlcG9ydGVyIiwibm9lcnIiLCJmbiIsImFyZ3MiLCJyZXQiLCJQVVBfQVJHU19LRVkiLCJwYXJncyIsImFyZ3YiLCJwcml2IiwiYXJnIiwiREVGQVVMVF9XSURUSCIsIkRFRkFVTFRfSEVJR0hUIiwiREVGQVVMVF9GUFMiLCJERUZBVUxUX0RVUkFUSU9OIiwiREVGQVVMVF9XSU5ET1dfVElNRU9VVCIsIkRFRkFVTFRfT1VUX0ZJTEVTIiwicmVuZGVyU2NoZW1hIiwieiIsImRlZmF1bHRSZW5kZXJPcHRpb25zIiwibm9ybWFsaXplU291cmNlIiwiYWJzIiwicmVhbHBhdGhTeW5jIiwibWFrZUNMSSIsIm9wdGlvbnMiLCJzaGFwZSIsImQiLCJwcm9ncmFtIiwic291cmNlIiwib3B0cyIsImUiLCJJcGNXcml0ZXIiLCJwYXlsb2FkIiwic2xlZXAiLCJtcyIsIndpdGhUaW1lb3V0IiwicCIsImxhYmVsIiwidGltZXIiLCJhYm9ydGFibGUiLCJvbkFib3J0IiwicGVyaW9kaWNhbCIsImNhbGxiYWNrIiwidG9rZW4iLCJjbG9zZWQiLCJ0aWNrIiwiY291bnQiLCJuZXh0IiwiQ0RQX1RJTUVPVVRfTVMiLCJzZW5kIiwiY2RwIiwibWV0aG9kIiwicGFyYW1zIiwiZXZhbEluIiwiZXhwcmVzc2lvbiIsImFkdmFuY2VWaXJ0dWFsVGltZSIsImJ1ZGdldCIsInRpbWVvdXQiLCJoYW5kbGVyIiwiXyIsInBhdXNlVmlydHVhbFRpbWUiLCJyZWJ1aWxkRHJhd2FibGUiLCJ3ZWIiLCJzaXplIiwiRlJBTUVfU1lOQ19NQVJLRVJfV0lEVEgiLCJTVEVHT19USUNLX0NIQU5ORUwiLCJidWlsZFN0ZWdvSFRNTCIsInRhcmdldFVSTCIsIndpZHRoIiwiaGVpZ2h0IiwiZGVjb2RlU3RlZ28iLCJiaXRtYXAiLCJtYXJrZXJSb3ciLCJ0aW1lc3RhbXAiLCJpIiwicGl4ZWxJZHgiLCJiaXQiLCJzdGFydFN0ZWdvIiwiZHJhd1N0ZWdvIiwid2MiLCJleHBlY3RlZCIsIndhaXRTdGVnb1RpY2siLCJzd2FwcGVkIiwiciIsIlBVUF9TQ0hFTUUiLCJGUkFNRV9TQ0hFTUUiLCJQUklWSUxFR0VEX1BSSVZJTEVHRVMiLCJwcm90b2NvbCIsInNldHVwUHVwUHJvdG9jb2wiLCJyZXEiLCJ1cmwiLCJzcmMiLCJodG1sIiwiY3JlYXRlU3RlZ29VUkwiLCJDb25jdXJyZW5jeUxpbWl0ZXIiLCJtYXhDb25jdXJyZW5jeSIsInYiLCJrZWVwIiwiZW50cnkiLCJGRl9FTkNPREVSX0xJQlZQWF9WUDkiLCJvcGVuVmlkZW9DdHgiLCJfc3RhY2siLCJjdHgiLCJDb2RlY0NvbnRleHQiLCJzdGFjayIsIl9fdXNpbmciLCJSYXRpb25hbCIsIkFWX0NPREVDX0ZMQUdfR0xPQkFMX0hFQURFUiIsImsiLCJGRm1wZWdFcnJvciIsIl9lcnJvciIsIl9oYXNFcnJvciIsIl9fY2FsbERpc3Bvc2UiLCJtYWtlRnJhbWUiLCJwaXhGbXQiLCJmcmFtZSIsIkZyYW1lIiwibWFrZVBhY2tldCIsInBrdCIsIlBhY2tldCIsImRyYWluUGFja2V0cyIsInN0cmVhbSIsIm11eGVyIiwiQVZFUlJPUl9FQUdBSU4iLCJBVkVSUk9SX0VPRiIsIkNvZGVjU3RhdGUiLCJfQ29kZWNTdGF0ZSIsImNvZGVjIiwiQ29kZWMiLCJGRl9ERUNPREVSX1BORyIsIm9rIiwicG5nIiwiQVZfUElYX0ZNVF9CR1JBIiwiQVZfUElYX0ZNVF9ZVVZBNDIwUCIsInBuZ0RhdGEiLCJzd3MiLCJTb2Z0d2FyZVNjYWxlQ29udGV4dCIsImZtdCIsIlNXU19CSUxJTkVBUiIsIlNBTVBMRV9GTVRfTkFNRSIsIkFWX1NBTVBMRV9GTVRfRkxUIiwiQVZfU0FNUExFX0ZNVF9GTFRQIiwiQXVkaW9FbmNvZGVyIiwiX0F1ZGlvRW5jb2RlciIsIm91dEZtdCIsIkFWX0NIQU5ORUxfTEFZT1VUX1NURVJFTyIsImluU2FtcGxlUmF0ZSIsImdyYXBoIiwiRmlsdGVyR3JhcGgiLCJhYnVmZmVyIiwiRmlsdGVyIiwiYnVmU3JjIiwiYWJ1ZmZlcnNpbmsiLCJidWZTaW5rIiwiZm10TmFtZSIsImZpbHRlckRlc2MiLCJvdXRwdXRzIiwiRmlsdGVySW5PdXQiLCJpbnB1dHMiLCJwY20iLCJuU2FtcGxlcyIsInBhY2tCaXRzIiwiYml0cyIsImJ1ZiIsImJ5dGUiLCJiIiwiQml0V3JpdGVyIiwidmFsIiwibiIsImxlbiIsInBhZCIsInN0YXJ0IiwiQml0UmVhZGVyIiwiemVyb3MiLCJBTk5FWF9CX1NUQVJUX0NPREUiLCJOQUxfQkxBX1dfTFAiLCJOQUxfUlNWX0lSQVBfVkNMMjMiLCJOQUxfVlBTIiwiTkFMX1NQUyIsIk5BTF9QUFMiLCJOQUxfU0VJX1BSRUZJWCIsInBhcnNlTmFsVHlwZSIsImhlYWRlcjAiLCJoZWFkZXIxIiwidHlwZSIsImxheWVySWQiLCJ0ZW1wb3JhbElkIiwiZW5jb2RlTmFsSGVhZGVyIiwiYnl0ZTAiLCJieXRlMSIsInNwbGl0TmFsVW5pdHMiLCJiaXRzdHJlYW0iLCJuYWxzIiwic2NMZW4iLCJuYWxTdGFydCIsIm5hbEVuZCIsImoiLCJyZXdyaXRlTmFsTGF5ZXJJZCIsIm5hbCIsIm91dCIsImIwIiwiYjEiLCJyZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uIiwiYWRkRW11bGF0aW9uUHJldmVudGlvbiIsIlZQU19QVExfQklUIiwiU1BTX1BUTF9CSVQiLCJQVExfVElFUl9CSVQiLCJQVExfQ09NUEFUMl9CSVQiLCJTTElDRV9UWVBFX0IiLCJTTElDRV9UWVBFX1AiLCJzZXRCaXQiLCJiaXRPZmZzZXQiLCJtYXNrIiwiY3VyIiwicGF0Y2hQdGwiLCJuYWxEYXRhIiwicHRsU3RhcnRCaXQiLCJyYnNwIiwicGF0Y2hIZXZjQWxwaGFQdGwiLCJjaHVua3MiLCJyZXdyaXRlT25lVWUiLCJuYWxJbiIsIm5ld1ZhbCIsImJyIiwiYnciLCJyZXdyaXRlVHdvVWUiLCJuZXdWYWwxIiwibmV3VmFsMiIsInJld3JpdGVBbHBoYVNwcyIsInNwcyIsIlNQU19TRVFfSURfQklUIiwicmV3cml0ZUFscGhhUHBzIiwicHBzIiwicmVhZFNlIiwidWUiLCJwYXJzZUlubGluZVN0UmVmUGljU2V0IiwibnVtRGVsdGFQb2NzU2V0MCIsImRlbHRhSWR4TWludXMxIiwibnVtTmVnIiwibnVtUG9zIiwicGFyc2VIZWFkZXJUb0FsaWdubWVudCIsIm5hbFR5cGUiLCJjZmciLCJpc0lyYXAiLCJzbGljZVR5cGUiLCJyZXdyaXRlQWxwaGFTbGljZUhlYWRlciIsInNsaWNlIiwicHJvYmUiLCJCIiwib2xkQWxpZ25CaXRzIiwic2xpY2VEYXRhQnl0ZU9mZnNldCIsImV4dHJhY3RQVEwiLCJ2cHNEYXRhIiwibWF4U3ViTGF5ZXJzTWludXMxIiwicHRsU3RhcnQiLCJ3cml0ZUJhc2VWUFMiLCJwdGwiLCJ3cml0ZVZQU0V4dGVuc2lvbiIsImJ1aWxkQWxwaGFWUFMiLCJleHRyYWN0QWxwaGFUb1l1djQyMHBCdWZmZXIiLCJiZ3JhRnJhbWUiLCJzcmNMcyIsInciLCJoIiwieVNpemUiLCJzcmMzMiIsInkiLCJyb3dCYXNlIiwiZHN0QmFzZSIsInJld3JpdGVBbHBoYVBhcmFtU2V0IiwiYnVpbGRVbmlmaWVkRXh0cmFkYXRhIiwiYmFzZUV4dHJhZGF0YSIsImFscGhhRXh0cmFkYXRhIiwiYmFzZU5hbHMiLCJhbHBoYU5hbHMiLCJhbHBoYUJ5VHlwZSIsImFyciIsImVtaXR0ZWQiLCJhbHBoYU5hbCIsImFEYXRhIiwiYnVpbGRBbHBoYUNoYW5uZWxJbmZvU0VJIiwiaDAiLCJoMSIsIndyaXRlQml0cyIsImludGVybGVhdmVBY2Nlc3NVbml0cyIsIkR1YWxMYXllck11eCIsImJhc2VDdHgiLCJhbHBoYUN0eCIsImJhc2VQa3QiLCJhbHBoYVBrdCIsInRhZyIsImJhc2UiLCJhbHBoYSIsImhldmNDZmciLCJpbnRlcmxlYXZlZCIsImZhaWwiLCJmaWVsZCIsImdvdCIsInNraXBQdGwiLCJtYXhTdWJMYXllcnMiLCJzdWJQcm9maWxlUHJlc2VudCIsInN1YkxldmVsUHJlc2VudCIsInBhcnNlU3BzIiwic3BzUmJzcCIsImNocm9tYUZvcm1hdCIsImxvZzJNYXhQb2NMc2IiLCJvcmRlckNvdW50Iiwic2FvRW5hYmxlZCIsIm51bVN0UnBzIiwibG9uZ1Rlcm1SZWZQaWNzUHJlc2VudCIsInNwc1RlbXBvcmFsTXZwRW5hYmxlZCIsInBhcnNlUHBzIiwicHBzUmJzcCIsIm51bUV4dHJhU2xpY2VIZWFkZXJCaXRzIiwiY2FiYWNJbml0UHJlc2VudCIsInBwc0xvb3BGaWx0ZXJBY3Jvc3NTbGljZXNFbmFibGVkIiwiZGVibG9ja2luZ0NvbnRyb2xQcmVzZW50Iiwic2xpY2VEZWJsb2NraW5nRGlzYWJsZWRPdmVycmlkZSIsInBhcnNlTnZlbmNIZXZjQ29uZmlnIiwiZXh0cmFkYXRhIiwiTnZlbmNEdWFsTGF5ZXJFbmNvZGVyIiwiX052ZW5jRHVhbExheWVyRW5jb2RlciIsImZwcyIsImJpdHJhdGUiLCJGRl9FTkNPREVSX0hFVkNfTlZFTkMiLCJudmVuY09wdHMiLCJjb21tb24iLCJBVl9QSVhfRk1UX1lVVjQyMFAiLCJ1bmlmaWVkIiwiY2hyb21hU2l6ZSIsImFscGhhQnVmIiwiYWxwaGFTd0ZyYW1lIiwicHRzIiwiZGVzeW5jIiwiVmlkZW9FbmNvZGVyIiwiX1ZpZGVvRW5jb2RlciIsImNvZGVjTmFtZSIsImNvZGVjVGFnIiwiY29kZWNPcHRzIiwicmVzdCIsIlZpZGVvVG9vbGJveEVuY29kZXIiLCJfVmlkZW9Ub29sYm94RW5jb2RlciIsImh3IiwiQVZDT0xfUkFOR0VfSlBFRyIsIldFQk1fVlA5X09QVFMiLCJNUDRfQVVESU8iLCJGRl9FTkNPREVSX0FBQyIsIldFQk1fQVVESU8iLCJGRl9FTkNPREVSX0xJQk9QVVMiLCJjcmVhdGVNcDRWaWRlbyIsImRpc2FibGVId0NvZGVjIiwic2hhcmVkSHciLCJjcmVhdGVId1ZpZGVvRW5jb2RlciIsImNyZWF0ZVdlYm1WaWRlbyIsImNyZWF0ZUF1ZGlvIiwia2luZCIsIkhhcmR3YXJlQ29udGV4dCIsIm93bnNIdyIsIkZGX0hXREVWSUNFX1RZUEVfVklERU9UT09MQk9YIiwiRkZfSFdERVZJQ0VfVFlQRV9DVURBIiwidmlkZW8iLCJGRl9FTkNPREVSX0xJQlgyNjUiLCJGb3JtYXRNdXhlciIsIm91dFBhdGgiLCJmb3JtYXROYW1lIiwiRm9ybWF0Q29udGV4dCIsImNvZGVjQ3R4IiwiRGljdGlvbmFyeSIsIk91dHB1dFNpbmsiLCJfT3V0cHV0U2luayIsInBhdGgiLCJsb3dlciIsInNldHVwIiwiYXVkaW8iLCJfcHJvbWlzZSIsInNhbXBsZVJhdGUiLCJod1ZpZGVvIiwiRFJBSU5fVElNRU9VVF9NUyIsIkVOQ09ERV9USU1FT1VUX01TIiwiRW5jb2RlclBpcGVsaW5lIiwiX0VuY29kZXJQaXBlbGluZSIsIm91dEZpbGVzIiwid2l0aEF1ZGlvIiwia2luZHMiLCJuZWVkc01wNEh3IiwiaXNId0FscGhhQ2FwYWJsZSIsInNpbmtzIiwic2luayIsImlucHV0Iiwic2l6ZUVxdWFscyIsImEiLCJxdWFudGl6ZSIsImJncmEiLCJtb2RhbFBpeGVsIiwic3RlcFgiLCJzdGVwWSIsImNvdW50cyIsImZpcnN0SWR4IiwiYmVzdCIsImJlc3RDb3VudCIsImtleSIsImlzQmxhbmtGcmFtZSIsIm0iLCJtYiIsIm1nIiwibXIiLCJtYSIsImNvbnRlbnQiLCJvZmZzZXQiLCJCbGFua1N0YXRzIiwiRHJvcFN0YXRzIiwidG90YWxEcm9wcGVkIiwibG9jYWxTdW0iLCJtYXhCdXJzdCIsImJ1cnN0IiwicGVyY2VwdGlibGUiLCJnIiwibCIsInNjb3JlIiwiQVVESU9fTUVUQV9DSEFOTkVMIiwiQVVESU9fQ0hVTktfQ0hBTk5FTCIsImF0dGFjaEF1ZGlvTGlzdGVuZXJzIiwiZW5jb2RlciIsImdldFZpZGVvVGltZU1zIiwib25FcnJvciIsIm9uTWV0YSIsIl9lIiwic3RhcnRNcyIsInNpbGVuY2VTYW1wbGVzIiwib25DaHVuayIsImJ1ZmZlciIsImJ5dGVzIiwiU2NyZWVuc2hvdFRha2VyIiwiX3MiLCJkaXIiLCJzZWMiLCJpbmRleCIsImN1cnJlbnRUaW1lTXMiLCJmaW5hbEJncmEiLCJuYXRpdmVJbWFnZSIsIndyaXRlRmlsZSIsInVzZVJldHJ5IiwibWF4QXR0ZW1wdHMiLCJ0aW1lb3V0RXJyb3IiLCJhdHRlbXB0IiwicHJvbWlzZXMiLCJzZXRUaW1lb3V0IiwiV09STERfQVJHIiwiQVVESU9fQVJHIiwiV2FpdGFibGVFdmVudCIsIm1hcCIsInRhcmdldHMiLCJMT0NBTF9TQ0hFTUVTIiwiaXNMb2NhbFNjaGVtZSIsImlzUHJveHlUYXJnZXQiLCJVUkwiLCJwcm94aWVkVXJsIiwicGFyc2VkIiwic2V0SW50ZXJjZXB0b3IiLCJ3aW5kb3ciLCJ1c2VJbm5lclByb3h5Iiwic3R1Yk1lZGlhIiwibGltaXRlciIsImV2ZW50cyIsIndhaXQiLCJvblRpbWVvdXQiLCJldmVudCIsImRldGFpbHMiLCJwcm94aWVkIiwicmVzcG9uc2VIZWFkZXJzIiwicmVzb3VyY2VUeXBlIiwidW5zZXRJbnRlcmNlcHRvciIsIlRJTUVPVVRfRVJST1IiLCJDT05TT0xFX0lHTk9SRVMiLCJ3YWl0Rm9yRmluaXNoIiwid2luIiwiYWN0aW9uIiwidGltZW91dE1zIiwidG9sZXJhbnQiLCJkb21SZWFkeSIsImRvbmUiLCJkZXNjIiwiX3BhdGgiLCJleGl0Q29kZSIsImRpc3Bvc2VXaW5kb3ciLCJXT1JMRF9TQ1JJUFRTIiwicGlja1dvcmxkU2NyaXB0IiwicmVuZGVyZXIiLCJtb2RlIiwib3BlbldpbmRvdyIsIm9uQ3JlYXRlZCIsIkJyb3dzZXJXaW5kb3ciLCJsaW5lTnVtYmVyIiwic291cmNlSWQiLCJtc2dzIiwib3BlbldpbmRvd1dpdGhSZXRyeSIsImxvYWRXaW5kb3ciLCJ3YXJtdXAiLCJvcGVuIiwicmVuZGVyIiwiZHVyYXRpb24iLCJvblByb2dyZXNzIiwidGFrZXIiLCJ0b3RhbCIsImZyYW1lSW50ZXJ2YWwiLCJmcmFtZVNpemUiLCJ3cml0dGVuIiwibGFzdEZyYW1lIiwic2NyZWVuc2hvdHMiLCJsYXN0V3JpdHRlblRpbWUiLCJwcm9ncmVzcyIsImVuY29kZUVycm9yIiwicmVzb2x2ZXIiLCJyZWplY3RlciIsImNsZWFyU3R1Y2tDaGVjayIsImJsYW5rU3RhdHMiLCJkcm9wU3RhdHMiLCJkaXNwb3NlQXVkaW8iLCJzY2hlZHVsZUZyYW1lIiwicGFpbnQiLCJfciIsImltYWdlIiwiaW1hZ2VTaXplIiwiY3VycmVudFRpbWUiLCJjcm9wcGVkIiwidGltZURlbHRhIiwiZnJhbWVzVG9JbnNlcnQiLCJuZXdQcm9ncmVzcyIsImR1cmF0aW9uTXMiLCJsYXN0V3JpdHRlbiIsInN0dWNrIiwiYmxhbmsiLCJqYW5rIiwiTUFYX1JFTkRFUl9BVFRFTVBUUyIsIndpdGhSZXJlbmRlciIsImxhc3RFcnIiLCJhZHZhbmNlVmlkZW9zIiwidGltZXN0YW1wTXMiLCJUSUNLX1NZTUJPTCIsImV4cHIiLCJ0aWNrRXYiLCJSV19USU1FT1VUX1VTIiwib3BlbklucHV0IiwiRGVtdXhlciIsImRlY29kZUZyYW1lcyIsIm1ldGEiLCJmcm9tSWR4IiwicmVzdW1lQXQiLCJBVlNFRUtfRkxBR19CQUNLV0FSRCIsIkFWTUVESUFfVFlQRV9WSURFTyIsImRlYyIsIkRlY29kZXIiLCJmcmFtZVdpZHRoIiwiZnJhbWVIZWlnaHQiLCJzY2FsZSIsImFsaWduIiwiZmlsdGVyIiwiRmlsdGVyQVBJIiwicHJldksiLCJfZnJhbWUiLCJ0YiIsInRzIiwiYXQiLCJwYWNrUmdiYSIsIm91dFciLCJvdXRIIiwicm93Iiwic3RyaWRlIiwiREVDT0RFX0FIRUFEIiwiS0VFUF9CRUhJTkQiLCJNRU1PUllfQlVER0VUIiwiTUFYX1BBU1NfUkVUUlkiLCJEZWNvZGVTZXNzaW9uIiwiX3NyYyIsInJhdyIsImlkeCIsImhpdCIsImZyb20iLCJmYWlscyIsImdlbiIsImZhaWxlZCIsImNvbnRlbnRGcm9tIiwic3RvcmVkIiwiZmxvb3IiLCJsZWFkR2FwIiwib3V0ZXIiLCJfcGt0IiwiZW5jb2RlU3R1YldlYm0iLCJ0bXBkaXIiLCJyYW5kb21CeXRlcyIsInN0dWIiLCJTdHViRnJhbWUiLCJyZWFkRmlsZSIsInJtIiwibHVtYSIsImNocm9tYSIsIkZyYW1lU2VydmVyIiwiX3VzZUlubmVyUHJveHkiLCJpZCIsImluZmxpZ2h0Iiwib3BlbmluZyIsImV2ZW4iLCJyZWFsIiwic2Vzc2lvbnMiLCJjcmVhdGVIYXNoIiwiU0NIRU1FIiwiQ09SU19IRUFERVJTIiwidXNlRnJhbWVQcm90b2NvbCIsImZzIiwicmVzIiwianNvbk9rIiwiaW50IiwicmdiYU9rIiwid2VibU9rIiwiY29weSIsImZhbGxiYWNrIiwiUkVOREVSX0ZQUyIsImNsZWFyRGlydHlDaGVjayIsImlzRmlyc3RGcmFtZSIsIl9kIiwic2xpdmVyIiwicmVmcmVzaEZwcyIsInNob290IiwidEluaXQiLCJ3aW5QIiwicGlwZWxpbmUiLCJoZWxkIiwibWFpbiIsImlmcmFtZSIsImZyYW1lSWQiLCJmcmFtZU1zIiwicGFpbnRlZCIsInJlcGVhdCIsInByaW50RmVhdHVyZXMiLCJjdHJsIiwiZXhpdGluZyIsIk1lbnUiLCJpcGMiLCJta2RpciIsInJlc3VsdCJdLCJtYXBwaW5ncyI6Iml6RUFLQSxJQUFNQSxFQUFBQSxDQUFtQixJQUN2QixPQUFPLFFBQUEsQ0FBYSxHQUFBLENBQ2hCLElBQUksR0FBQSxDQUFJLENBQUEsS0FBQSxFQUFRLFVBQVUsQ0FBQSxDQUFFLENBQUEsQ0FBRSxJQUFBLENBQzdCLFNBQVMsYUFBQSxFQUFpQixRQUFBLENBQVMsYUFBQSxDQUFjLE9BQUEsQ0FBUSxXQUFBLEVBQVksR0FBTSxTQUMxRSxRQUFBLENBQVMsYUFBQSxDQUFjLEdBQUEsQ0FDdkIsSUFBSSxHQUFBLENBQUksU0FBQSxDQUFXLFNBQVMsT0FBTyxDQUFBLENBQUUsSUFBQSxDQUVoQ0MsQ0FBQUEsQ0FBZ0NELEVBQUFBLEVBQWlCLENDTnZELFNBQVNFLEVBQUFBLENBQVFDLENBQUFBLENBQWNDLENBQUFBLENBQXNCQyxFQUFpQyxDQUMzRixHQUFJLENBQ0YsT0FBT0QsQ0FBQUEsQ0FBTyxPQUFBLENBQVEsSUFBSUQsQ0FBSSxDQUFDLENBQ2pDLENBQUEsS0FBUSxDQUNOLE9BQU9FLENBQ1QsQ0FDRixDQ1ZPLFNBQVNDLENBQUFBLENBQVlDLENBQUFBLENBQW9CLENBQzlDLEdBQUksT0FBT0EsQ0FBQUEsRUFBTSxRQUFBLENBQ2YsT0FBT0EsQ0FBQUEsQ0FFVCxJQUFNQyxDQUFBQSxDQUFNLE9BQU9ELENBQUMsQ0FBQSxDQUNwQixHQUFJLE1BQUEsQ0FBTyxLQUFBLENBQU1DLENBQUcsRUFDbEIsTUFBTSxJQUFJLEtBQUEsQ0FBTSxDQUFBLE1BQUEsRUFBU0QsQ0FBQyxD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QU0sQ0FBQyxDQUFBLENBRTVCc0osQ0FBQUEsQ0FBRyxDQUFBLENBQUUsQ0FBQSxDQUFHLENBQUMsQ0FBQSxDQUNUQSxFQUFHLENBQUEsQ0FBRSxDQUFBLENBQUcsQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsS0FBSyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxDQUFBLENBQUUsQ0FBQSxDQUFHLENBQUMsRUFDVEEsQ0FBQUEsQ0FBRyxDQUFBLENBQUUsRUFBRyxDQUFDLENBQUEsQ0FDVEEsRUFBRyxDQUFBLENBQUUsQ0FBQSxDQUFHLENBQUMsQ0FBQSxDQUNUQSxDQUFBQSxDQUFHLENBQUEsQ0FBRSxFQUFHLENBQUMsQ0FBQSxDQUVUQSxFQUFHLElBQUEsQ0FBSyxDQUFDLEVBQ1RBLENBQUFBLENBQUcsRUFBQSxDQUFHLENBQUMsQ0FBQSxDQUNQQSxDQUFBQSxDQUFHLElBQUEsQ0FBSyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxLQUFLLENBQUMsQ0FBQSxDQUNUQSxFQUFHLElBQUEsQ0FBSyxDQUFDLENBQUEsQ0FHVEEsQ0FBQUEsQ0FBRyxFQUFBLENBQUcsQ0FBQyxFQUNQQSxDQUFBQSxDQUFHLElBQUEsQ0FBSyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxLQUFLZ0MsQ0FBQUEsQ0FBSSxPQUFBLENBQVNBLENBQUFBLENBQUksUUFBQSxDQUFVQSxDQUFBQSxDQUFJLE1BQUEsQ0FBU0EsRUFBSSxRQUFRLENBQUEsQ0FFNURoQyxFQUFHLEVBQUEsQ0FBRyxDQUFDLEVBQ1BBLENBQUFBLENBQUcsQ0FBQSxDQUFFLENBQUEsQ0FBRyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxFQUFFLENBQUEsQ0FBRyxDQUFDLEVBQ1RBLENBQUFBLENBQUcsQ0FBQSxDQUFFLEVBQUcsQ0FBQyxDQUFBLENBRVRBLEVBQUcsRUFBQSxDQUFHLENBQUMsRUFDUEEsQ0FBQUEsQ0FBRyxDQUFBLENBQUU1SixFQUFPLEVBQUUsQ0FBQSxDQUNkNEosRUFBRyxDQUFBLENBQUUzSixDQUFBQSxDQUFRLEVB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LEVBQVcsT0FBT3VELENBQUFBLEVBQUssZUFBZSxDQUFBLENBQ3JFLE1BQU0rbEIsQ0FBQUEsQ0FBSSxVQUFBLENBQVczTyxDQUFDLEVBQ3hCLENBQUEsT0FBRSxDQUNBeU8sRUFBQUEsQ0FBVSxJQUFBLENBQ1Y1bkIsYUFBSSxJQUFBLEdBQ04sQ0FDRixDQUNGLENBQUMsQ0FBQSIsImZpbGUiOiJhcHAuY2pzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gU2hpbSBnbG9iYWxzIGluIGNqcyBidW5kbGVcbi8vIFRoZXJlJ3MgYSB3ZWlyZCBidWcgdGhhdCBlc2J1aWxkIHdpbGwgYWx3YXlzIGluamVjdCBpbXBvcnRNZXRhVXJsXG4vLyBpZiB3ZSBleHBvcnQgaXQgYXMgYGNvbnN0IGltcG9ydE1ldGFVcmwgPSAuLi4gX19maWxlbmFtZSAuLi5gXG4vLyBCdXQgdXNpbmcgYSBmdW5jdGlvbiB3aWxsIG5vdCBjYXVzZSB0aGlzIGlzc3VlXG5cbmNvbnN0IGdldEltcG9ydE1ldGFVcmwgPSAoKSA9PiBcbiAgdHlwZW9mIGRvY3VtZW50ID09PSBcInVuZGVmaW5lZFwiIFxuICAgID8gbmV3IFVSTChgZmlsZToke19fZmlsZW5hbWV9YCkuaHJlZiBcbiAgICA6IChkb2N1bWVudC5jdXJyZW50U2NyaXB0ICYmIGRvY3VtZW50LmN1cnJlbnRTY3JpcHQudGFnTmFtZS50b1VwcGVyQ2FzZSgpID09PSAnU0NSSVBUJykgXG4gICAgICA/IGRvY3VtZW50LmN1cnJlbnRTY3JpcHQuc3JjIFxuICAgICAgOiBuZXcgVVJMKFwibWFpbi5qc1wiLCBkb2N1bWVudC5iYXNlVVJJKS5ocmVmO1xuXG5leHBvcnQgY29uc3QgaW1wb3J0TWV0YVVybCA9IC8qIEBfX1BVUkVfXyAqLyBnZXRJbXBvcnRNZXRhVXJsKClcbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMjUuXG5cbmV4cG9ydCB0eXBlIEVudlBhcnNlcjxUPiA9ICh2YWx1ZTogdW5rbm93bikgPT4gVDtcblxuZXhwb3J0IGZ1bmN0aW9uIHBlbnY8VD4obmFtZTogc3RyaW5nLCBwYXJzZXI6IEVudlBhcnNlcjxUPiwgZGVmYXVsdFZhbHVlOiBUKTogVDtcbmV4cG9ydCBmdW5jdGlvbiBwZW52PFQ+KG5hbWU6IHN0cmluZywgcGFyc2VyOiBFbnZQYXJzZXI8VD4sIGRlZmF1bHRWYWx1ZT86IFQpOiBUIHwgdW5kZWZpbmVkO1xuZXhwb3J0IGZ1bmN0aW9uIHBlbnY8VD4obmFtZTogc3RyaW5nLCBwYXJzZXI6IEVudlBhcnNlcjxUPiwgZGVmYXVsdFZhbHVlPzogVCk6IFQgfCB1bmRlZmluZWQge1xuICB0cnkge1xuICAgIHJldHVybiBwYXJzZXIocHJvY2Vzcy5lbnZbbmFtZV0pO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZGVmYXVsdFZhbHVlO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAxLzMwLlxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VOdW1iZXIoeDogdW5rbm93bik6IG51bWJlciB7XG4gIGlmICh0eXBlb2YgeCA9PT0gXCJudW1iZXJcIikge1xuICAgIHJldHVybiB4O1xuICB9XG4gIGNvbnN0IG51bSA9IE51bWJlcih4KTtcbiAgaWYgKE51bWJlci5pc05hTihudW0pKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBWYWx1ZSAke3h9IGlzIG5vdCBhIHZhbGlkIG51bWJlcmApO1xuICB9XG4gIHJldHVybiBudW07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVN0cmluZyh4OiB1bmtub3duKTogc3RyaW5nIHtcbiAgaWYgKHR5cGVvZiB4ID09PSBcInN0cmluZ1wiKSB7XG4gICAgcmV0dXJuIHg7XG4gIH1cbiAgcmV0dXJuIFN0cmluZyh4KTtcbn1cblxuLy8gQ29tbWEtc2VwYXJhdGVkIHN0cmluZyDihpIgYXJyYXkgdmlhIGEgcGVyLWl0ZW0gcGFyc2VyOyBlbXB0eS9ibGFuayDihpIgW10uXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VBcnJheTxUPihpdGVtOiAoeDogdW5rbm93bikgPT4gVCk6ICh4OiB1bmtub3duKSA9PiBUW10ge1xuICByZXR1cm4gKHgpID0+IHtcbiAgICBpZiAodHlwZW9mIHggIT09IFwic3RyaW5nXCIgfHwgeC50cmltKCkgPT09IFwiXCIpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgcmV0dXJuIHguc3BsaXQoXCIsXCIpLm1hcCgocykgPT4gaXRlbShzLnRyaW0oKSkpO1xuICB9O1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wOS5cblxuaW1wb3J0IHsgY3JlYXRlUmVxdWlyZSB9IGZyb20gXCJub2RlOm1vZHVsZVwiO1xuaW1wb3J0IHsgZGlybmFtZSwgam9pbiB9IGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IHBlbnYgfSBmcm9tIFwiLi9lbnZcIjtcbmltcG9ydCB7IHBhcnNlTnVtYmVyIH0gZnJvbSBcIi4vcGFyc2VyXCI7XG5cbmNvbnN0IHJlcXVpcmUgPSBjcmVhdGVSZXF1aXJlKGltcG9ydC5tZXRhLnVybCk7XG5cbmV4cG9ydCBjb25zdCBwdXBMb2dMZXZlbCA9IHBlbnYoXCJQVVBfTE9HX0xFVkVMXCIsIHBhcnNlTnVtYmVyLCAyKTtcblxuZXhwb3J0IGNvbnN0IHB1cFBrZ1Jvb3QgPSBkaXJuYW1lKHJlcXVpcmUucmVzb2x2ZShcInB1cC1yZWNvcmRlci9wYWNrYWdlLmpzb25cIikpO1xuZXhwb3J0IGNvbnN0IHB1cEFwcCA9IGpvaW4ocHVwUGtnUm9vdCwgXCJkaXN0XCIsIFwiYXBwLmNqc1wiKTtcbmV4cG9ydCBjb25zdCBwdXBQcmVsb2FkID0gam9pbihwdXBQa2dSb290LCBcImRpc3RcIiwgXCJydW50aW1lXCIsIFwicHJlbG9hZC5janNcIik7XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA2LlxuXG5pbXBvcnQgdHlwZSB7IENoaWxkUHJvY2VzcyB9IGZyb20gXCJub2RlOmNoaWxkX3Byb2Nlc3NcIjtcbmltcG9ydCB7IExvZyB9IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQgeyBBVl9MT0dfRVJST1IsIEFWX0xPR19XQVJOSU5HIH0gZnJvbSBcIm5vZGUtYXYvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBwdXBMb2dMZXZlbCB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIExvZ2dlckxpa2Uge1xuICBkZWJ1Zz8odGhpczogdm9pZCwgLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQ7XG5cbiAgaW5mbz8odGhpczogdm9pZCwgLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQ7XG5cbiAgd2Fybj8odGhpczogdm9pZCwgLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQ7XG5cbiAgZXJyb3I/KHRoaXM6IHZvaWQsIC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkO1xuXG4gIC8vIEJ1ZmZlcmVkIGltcGxzIGRyYWluIG9uIHRoaXM7IHNodXRkb3duIGF3YWl0cyBpdCBzbyB0aGUgdGFpbCBpcyBub3QgbG9zdC5cbiAgZmx1c2g/KHRoaXM6IHZvaWQpOiBQcm9taXNlPHZvaWQ+O1xufVxuXG5jb25zdCBERUJVRyA9IFwiPHB1cEBkZWJ1Zz5cIjtcbmNvbnN0IElORk8gPSBcIjxwdXBAaW5mbz5cIjtcbmNvbnN0IFdBUk4gPSBcIjxwdXBAd2Fybj5cIjtcbmNvbnN0IEVSUk9SID0gXCI8cHVwQGVycm9yPlwiO1xuY29uc3QgRkFUQUwgPSBcIjxwdXBAZmF0YWw+XCI7XG5cbmZ1bmN0aW9uIHN0YWNrSG9vayh0YXJnZXQ6ICguLi5tZXNzYWdlczogdW5rbm93bltdKSA9PiB1bmtub3duLCBfY29udGV4dDogQ2xhc3NNZXRob2REZWNvcmF0b3JDb250ZXh0KSB7XG4gIHJldHVybiBmdW5jdGlvbiAodGhpczogTG9nZ2VyLCAuLi5tZXNzYWdlczogdW5rbm93bltdKSB7XG4gICAgY29uc3QgcHJvY2Vzc2VkID0gbWVzc2FnZXMubWFwKChtc2cpID0+IHtcbiAgICAgIHJldHVybiBtc2cgaW5zdGFuY2VvZiBFcnJvciA/IChtc2cuc3RhY2sgPz8gU3RyaW5nKG1zZykpIDogbXNnO1xuICAgIH0pO1xuICAgIHJldHVybiB0YXJnZXQuY2FsbCh0aGlzLCAuLi5wcm9jZXNzZWQpO1xuICB9O1xufVxuXG5leHBvcnQgY2xhc3MgTG9nZ2VyIGltcGxlbWVudHMgTG9nZ2VyTGlrZSB7XG4gIHByaXZhdGUgX2ltcGw/OiBMb2dnZXJMaWtlO1xuXG4gIGdldCBsZXZlbCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9sZXZlbDtcbiAgfVxuXG4gIHNldCBsZXZlbCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fbGV2ZWwgPSB2YWx1ZTtcbiAgICB0aGlzLmltcGwgPSB0aGlzLl9pbXBsID8/IGNvbnNvbGU7XG4gIH1cblxuICBnZXQgaW1wbCgpOiBMb2dnZXJMaWtlIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5faW1wbDtcbiAgfVxuXG4gIHNldCBpbXBsKHZhbHVlOiBMb2dnZXJMaWtlKSB7XG4gICAgY29uc3QgZGVidWcgPSB2YWx1ZS5kZWJ1ZyA/PyBjb25zb2xlLmRlYnVnO1xuICAgIGNvbnN0IGluZm8gPSB2YWx1ZS5pbmZvID8/IGNvbnNvbGUuaW5mbztcbiAgICBjb25zdCB3YXJuID0gdmFsdWUud2FybiA/PyBjb25zb2xlLndhcm47XG4gICAgY29uc3QgZXJyb3IgPSB2YWx1ZS5lcnJvciA/PyBjb25zb2xlLmVycm9yO1xuICAgIGNvbnN0IGx2ID0gdGhpcy5fbGV2ZWw7XG4gICAgdGhpcy5faW1wbCA9IHtcbiAgICAgIGRlYnVnOiBsdiA+PSAzID8gZGVidWcgOiB1bmRlZmluZWQsXG4gICAgICBpbmZvOiBsdiA+PSAyID8gaW5mbyA6IHVuZGVmaW5lZCxcbiAgICAgIHdhcm46IGx2ID49IDEgPyB3YXJuIDogdW5kZWZpbmVkLFxuICAgICAgZXJyb3I6IGx2ID49IDAgPyBlcnJvciA6IHVuZGVmaW5lZCxcbiAgICAgIGZsdXNoOiB2YWx1ZS5mbHVzaCxcbiAgICB9O1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfbGV2ZWw6IG51bWJlciA9IHB1cExvZ0xldmVsKSB7XG4gICAgdGhpcy5pbXBsID0gY29uc29sZTtcbiAgfVxuXG4gIEBzdGFja0hvb2tcbiAgZGVidWcoLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQge1xuICAgIHRoaXMuaW1wbD8uZGVidWc/LihERUJVRywgLi4ubWVzc2FnZXMpO1xuICB9XG5cbiAgQHN0YWNrSG9va1xuICBpbmZvKC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkIHtcbiAgICB0aGlzLmltcGw/LmluZm8/LihJTkZPLCAuLi5tZXNzYWdlcyk7XG4gIH1cblxuICBAc3RhY2tIb29rXG4gIHdhcm4oLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQge1xuICAgIHRoaXMuaW1wbD8ud2Fybj8uKFdBUk4sIC4uLm1lc3NhZ2VzKTtcbiAgfVxuXG4gIEBzdGFja0hvb2tcbiAgZXJyb3IoLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQge1xuICAgIHRoaXMuaW1wbD8uZXJyb3I/LihFUlJPUiwgLi4ubWVzc2FnZXMpO1xuICB9XG5cbiAgQHN0YWNrSG9va1xuICBmYXRhbCguLi5tZXNzYWdlczogdW5rbm93bltdKTogdm9pZCB7XG4gICAgdGhpcy5pbXBsPy5lcnJvcj8uKEZBVEFMLCAuLi5tZXNzYWdlcyk7XG4gICAgcHJvY2Vzcy5leGl0KDEpO1xuICB9XG5cbiAgcHJpdmF0ZSBkaXNwYXRjaChtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICBjb25zdCBtc2cgPSBtZXNzYWdlLnRyaW1FbmQoKTtcbiAgICBpZiAobXNnLnN0YXJ0c1dpdGgoREVCVUcpKSB7XG4gICAgICB0aGlzLmRlYnVnKG1zZy5zbGljZShERUJVRy5sZW5ndGggKyAxKSk7XG4gICAgfSBlbHNlIGlmIChtc2cuc3RhcnRzV2l0aChJTkZPKSkge1xuICAgICAgdGhpcy5pbmZvKG1zZy5zbGljZShJTkZPLmxlbmd0aCArIDEpKTtcbiAgICB9IGVsc2UgaWYgKG1zZy5zdGFydHNXaXRoKFdBUk4pKSB7XG4gICAgICB0aGlzLndhcm4obXNnLnNsaWNlKFdBUk4ubGVuZ3RoICsgMSkpO1xuICAgIH0gZWxzZSBpZiAobXNnLnN0YXJ0c1dpdGgoRVJST1IpKSB7XG4gICAgICB0aGlzLmVycm9yKG1zZy5zbGljZShFUlJPUi5sZW5ndGggKyAxKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaW5mbyhtc2cpO1xuICAgIH1cbiAgfVxuXG4gIGF0dGFjaChwcm9jOiBDaGlsZFByb2Nlc3MsIG5hbWU6IHN0cmluZykge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLmRlYnVnKGAke25hbWV9LmF0dGFjaGApO1xuICAgICAgbGV0IGZhdGFsOiBzdHJpbmcgPSBcIlwiO1xuICAgICAgY29uc3QgZGlzcGF0Y2ggPSAoZGF0YTogQnVmZmVyKSA9PiB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBkYXRhLnRvU3RyaW5nKCk7XG4gICAgICAgIGlmIChtZXNzYWdlLnN0YXJ0c1dpdGgoRkFUQUwpKSB7XG4gICAgICAgICAgZmF0YWwgKz0gbWVzc2FnZS5zbGljZShGQVRBTC5sZW5ndGggKyAxKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmRpc3BhdGNoKG1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgcHJvYy5zdGRlcnI/Lm9uKFwiZGF0YVwiLCBkaXNwYXRjaCk7XG4gICAgICBwcm9jLnN0ZG91dD8ub24oXCJkYXRhXCIsIGRpc3BhdGNoKTtcbiAgICAgIHByb2NcbiAgICAgICAgLm9uKFwiZXJyb3JcIiwgKGVycikgPT4ge1xuICAgICAgICAgIGZhdGFsICs9IGVyci5tZXNzYWdlO1xuICAgICAgICAgIHByb2Mua2lsbCgpO1xuICAgICAgICB9KVxuICAgICAgICAub25jZShcImNsb3NlXCIsIChjb2RlLCBzaWduYWwpID0+IHtcbiAgICAgICAgICBpZiAoY29kZSB8fCBzaWduYWwgfHwgZmF0YWwpIHtcbiAgICAgICAgICAgIGZhdGFsIHx8PSBgY29tbWFuZCBmYWlsZWQ6ICR7cHJvYy5zcGF3bmFyZ3Muam9pbihcIiBcIil9YDtcbiAgICAgICAgICAgIHRoaXMuZGVidWcoYCR7bmFtZX0uY2xvc2VgLCB7IGNvZGUsIHNpZ25hbCwgZmF0YWwgfSk7XG4gICAgICAgICAgICByZWplY3QobmV3IEVycm9yKGZhdGFsKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZGVidWcoYCR7bmFtZX0uY2xvc2VgKTtcbiAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC5vbihcInVuaGFuZGxlZFJlamVjdGlvblwiLCAocmVhc29uKSA9PiB7XG4gICAgICAgICAgdGhpcy5lcnJvcihgJHtuYW1lfS51bmhhbmRsZWRgLCByZWFzb24pO1xuICAgICAgICB9KVxuICAgICAgICAub24oXCJ1bmNhdWdodEV4Y2VwdGlvbk1vbml0b3JcIiwgKGVycikgPT4ge1xuICAgICAgICAgIHRoaXMuZXJyb3IoYCR7bmFtZX0udW5oYW5kbGVkYCwgZXJyKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBmbHVzaCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLmltcGw/LmZsdXNoPy4oKTtcbiAgfVxufVxuXG5jb25zdCBsb2dnZXIgPSBuZXcgTG9nZ2VyKCk7XG5cbi8vIFJvdXRlIGZmbXBlZyBuYXRpdmUgbG9ncyB0aHJvdWdoIHB1cCdzIGxvZ2dlci5cbkxvZy5zZXRDYWxsYmFjaygobGV2ZWwsIG1lc3NhZ2UpID0+IHtcbiAgY29uc3QgbXNnID0gbWVzc2FnZS50cmltRW5kKCk7XG4gIGlmICghbXNnKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChsZXZlbCA8PSBBVl9MT0dfRVJST1IpIHtcbiAgICBsb2dnZXIuZXJyb3IobXNnKTtcbiAgfSBlbHNlIGlmIChsZXZlbCA8PSBBVl9MT0dfV0FSTklORykge1xuICAgIGxvZ2dlci53YXJuKG1zZyk7XG4gIH1cbn0pO1xuXG5leHBvcnQgeyBsb2dnZXIgfTtcbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMjEuXG5cbmltcG9ydCB7IG1rZGlyU3luYyB9IGZyb20gXCJub2RlOmZzXCI7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHsgYXBwLCBjcmFzaFJlcG9ydGVyIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi9sb2dnaW5nXCI7XG5cbmNvbnN0IFRBRyA9IFwiW0NyYXNoXVwiO1xuXG5leHBvcnQgZnVuY3Rpb24gc3RhcnRFbGVjdHJvbkNyYXNoUmVwb3J0ZXIoKSB7XG4gIC8vIGFwcERhdGEgKG5vdCB0aGUgcGVyLXJ1biB1c2VyLWRhdGEtZGlyKSBzbyBldmVyeSBwdXAgYXBwJ3MgZHVtcHMgYWNjdW11bGF0ZSBpbiBvbmUgc2hhcmVkLCBwZXJzaXN0ZW50IGRpci5cbiAgY29uc3QgZHVtcERpciA9IGpvaW4oYXBwLmdldFBhdGgoXCJhcHBEYXRhXCIpLCBcInB1cC1yZWNvcmRlclwiLCBcImNyYXNoZXNcIik7XG4gIG1rZGlyU3luYyhkdW1wRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgYXBwLnNldFBhdGgoXCJjcmFzaER1bXBzXCIsIGR1bXBEaXIpO1xuICBjcmFzaFJlcG9ydGVyLnN0YXJ0KHtcbiAgICBwcm9kdWN0TmFtZTogXCJwdXAtcmVjb3JkZXJcIixcbiAgICB1cGxvYWRUb1NlcnZlcjogZmFsc2UsXG4gICAgY29tcHJlc3M6IGZhbHNlLFxuICAgIGlnbm9yZVN5c3RlbUNyYXNoSGFuZGxlcjogdHJ1ZSxcbiAgfSk7XG4gIGxvZ2dlci5kZWJ1ZyhUQUcsIFwic2V0IGR1bXAgdG9cIiwgZHVtcERpcik7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzI0LlxuXG5leHBvcnQgZnVuY3Rpb24gbm9lcnI8QSBleHRlbmRzIHVua25vd25bXSwgUiwgRD4oZm46ICguLi5hcmdzOiBBKSA9PiBSLCBkZWZhdWx0VmFsdWU6IEQpOiAoLi4uYXJnczogQSkgPT4gUiB8IEQge1xuICByZXR1cm4gKC4uLmFyZ3MpID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmV0ID0gZm4oLi4uYXJncyk7XG4gICAgICBpZiAocmV0IGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICByZXR1cm4gcmV0LmNhdGNoKCgpID0+IGRlZmF1bHRWYWx1ZSkgYXMgUiB8IEQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmV0O1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgICB9XG4gIH07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAxLzMwLlxuXG5pbXBvcnQgeyB0eXBlIENoaWxkUHJvY2VzcywgdHlwZSBTcGF3bk9wdGlvbnMsIHNwYXduIH0gZnJvbSBcIm5vZGU6Y2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0IHRyZWVLaWxsIGZyb20gXCJ0cmVlLWtpbGxcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuL2xvZ2dpbmdcIjtcblxuZXhwb3J0IGNvbnN0IFBVUF9BUkdTX0tFWSA9IFwiLS1wdXAtcHJpdi1hcmdzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJncygpIHtcbiAgY29uc3QgYXJndiA9IHByb2Nlc3MuYXJndjtcbiAgbGV0IHByaXYgPSBhcmd2LmZpbmQoKGFyZykgPT4gYXJnLnN0YXJ0c1dpdGgoUFVQX0FSR1NfS0VZKSk7XG4gIGlmICghcHJpdikge1xuICAgIGxvZ2dlci5kZWJ1ZyhcInByb2Nhcmd2XCIsIGFyZ3YpO1xuICAgIHJldHVybiBwcm9jZXNzLmFyZ3Y7XG4gIH1cbiAgY29uc3QgYXJncyA9IFtcImV4ZWNcIiwgLi4uYXJndi5zbGljZSgtMSldO1xuICBwcml2ID0gQnVmZmVyLmZyb20ocHJpdi5zcGxpdChcIj1cIilbMV0hLCBcImJhc2U2NFwiKS50b1N0cmluZygpO1xuICBhcmdzLnB1c2goLi4uSlNPTi5wYXJzZShwcml2KSk7XG4gIGxvZ2dlci5kZWJ1ZyhcInB1cGFyZ3NcIiwgYXJncyk7XG4gIHJldHVybiBhcmdzO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFByb2Nlc3NIYW5kbGUge1xuICBwcm9jZXNzOiBDaGlsZFByb2Nlc3M7XG4gIHdhaXQ6IFByb21pc2U8dm9pZD47XG4gIGdldCBraWxsZWQoKTogYm9vbGVhbjtcbiAga2lsbCgpOiB2b2lkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXhlYyhjbWQ6IHN0cmluZywgb3B0aW9ucz86IFNwYXduT3B0aW9ucyk6IFByb2Nlc3NIYW5kbGUge1xuICBjb25zdCBwYXJ0cyA9IGNtZC5zcGxpdChcIiBcIikuZmlsdGVyKChzKSA9PiBzLmxlbmd0aCk7XG4gIGNvbnN0IFtjb21tYW5kLCAuLi5hcmdzXSA9IHBhcnRzO1xuICBpZiAoIWNvbW1hbmQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJlbXB0eSBjb21tYW5kXCIpO1xuICB9XG4gIGNvbnN0IHByb2MgPSBzcGF3bihjb21tYW5kLCBhcmdzLCB7XG4gICAgc3RkaW86IFwiaW5oZXJpdFwiLFxuICAgIC4uLm9wdGlvbnMsXG4gIH0pO1xuICBsZXQga2lsbGVkID0gZmFsc2U7XG4gIHJldHVybiB7XG4gICAgcHJvY2VzczogcHJvYyxcbiAgICB3YWl0OiBsb2dnZXIuYXR0YWNoKHByb2MsIGNvbW1hbmQpLFxuICAgIGdldCBraWxsZWQoKSB7XG4gICAgICByZXR1cm4ga2lsbGVkO1xuICAgIH0sXG4gICAga2lsbCgpIHtcbiAgICAgIGlmIChraWxsZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAga2lsbGVkID0gdHJ1ZTtcbiAgICAgIGNvbnN0IHBpZCA9IHByb2MucGlkO1xuICAgICAgaWYgKHBpZCkge1xuICAgICAgICB0cmVlS2lsbChwaWQsIFwiU0lHS0lMTFwiKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHByb2Mua2lsbChcIlNJR0tJTExcIik7XG4gICAgICB9XG4gICAgfSxcbiAgfTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDYuXG5cbmltcG9ydCB6IGZyb20gXCJ6b2RcIjtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfV0lEVEggPSAxOTIwO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfSEVJR0hUID0gMTA4MDtcbmV4cG9ydCBjb25zdCBERUZBVUxUX0ZQUyA9IDMwO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfRFVSQVRJT04gPSA1O1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfV0lORE9XX1RJTUVPVVQgPSAxMDtcbmV4cG9ydCBjb25zdCBERUZBVUxUX09VVF9GSUxFUyA9IFtcIm91dC9odG1sLm1wNFwiLCBcIm91dC9odG1sLndlYm1cIl07XG5cbmV4cG9ydCBjb25zdCByZW5kZXJTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIGR1cmF0aW9uOiB6Lm51bWJlcigpLmRlc2NyaWJlKFwiRHVyYXRpb24gaW4gc2Vjb25kc1wiKSxcbiAgd2lkdGg6IHoubnVtYmVyKCkuZGVzY3JpYmUoXCJWaWRlbyB3aWR0aFwiKSxcbiAgaGVpZ2h0OiB6Lm51bWJlcigpLmRlc2NyaWJlKFwiVmlkZW8gaGVpZ2h0XCIpLFxuICBmcHM6IHoubnVtYmVyKCkuZGVzY3JpYmUoXCJGcmFtZXMgcGVyIHNlY29uZFwiKSxcbiAgd2l0aEF1ZGlvOiB6LmJvb2xlYW4oKS5kZXNjcmliZShcIkNhcHR1cmUgYW5kIGVuY29kZSBhdWRpb1wiKSxcbiAgb3V0RmlsZXM6IHouYXJyYXkoei5zdHJpbmcoKSkuZGVzY3JpYmUoXCJPdXRwdXQgcGF0aHM7IGV4dGVuc2lvbiAoLm1wNC8ud2VibSkgc2VsZWN0cyBlbmNvZGVyXCIpLFxuICB1c2VJbm5lclByb3h5OiB6LmJvb2xlYW4oKS5kZXNjcmliZShcIlVzZSBiaWxpYmlsaSBpbm5lciBwcm94eSBmb3IgcmVzb3VyY2UgYWNjZXNzXCIpLFxuICBkZXRlcm1pbmlzdGljOiB6LmJvb2xlYW4oKS5kZXNjcmliZShcIlJlbmRlciBieSBmcmFtZSByYXRoZXIgdGhhbiByZWNvcmRpbmdcIiksXG4gIGRpc2FibGVHcHU6IHouYm9vbGVhbigpLmRlc2NyaWJlKFwiRGlzYWJsZSBHUFUgcmVuZGVyaW5nLCBtYXkgcmVkdWNlIHBlcmZvcm1hbmNlIGJ1dCBpbmNyZWFzZSBzdGFiaWxpdHlcIiksXG4gIGRpc2FibGVId0NvZGVjOiB6LmJvb2xlYW4oKS5kZXNjcmliZShcIkRpc2FibGUgaGFyZHdhcmUgdmlkZW8gZW5jb2RlciAoTlZFTkMvVmlkZW9Ub29sYm94KSwgdXNlIHNvZnR3YXJlIHgyNjVcIiksXG4gIGRpc2FibGVXZWJTZWN1cml0eTogei5ib29sZWFuKCkuZGVzY3JpYmUoXCJEcm9wIHRoZSBzYW1lLW9yaWdpbiB3YWxsOyByZXF1aXJlZCB0byByZWNvcmQgYSBsb2NhbCBmaWxlXCIpLFxuICBpZ25vcmVDZXJ0aWZpY2F0ZUVycm9yczogelxuICAgIC5ib29sZWFuKClcbiAgICAuZGVzY3JpYmUoXCJSZWNvcmQgb3ZlciBUTFMgdGhlIHBsYXRmb3JtIHJlamVjdHMsIGUuZy4gYSBzZWxmLXNpZ25lZCBpbnRyYW5ldCBob3N0XCIpLFxuICB3aW5kb3dUb2xlcmFudDogei5ib29sZWFuKCkuZGVzY3JpYmUoXCJGYWxsIGJhY2sgdG8gZG9tLXJlYWR5IGlmIHdhcm11cCBsb2FkIHRpbWVzIG91dFwiKSxcbiAgd2luZG93VGltZW91dDogei5udW1iZXIoKS5kZXNjcmliZShcIldpbmRvdyBsb2FkIHRpbWVvdXQgaW4gc2Vjb25kc1wiKSxcbiAgc2NyZWVuc2hvdHM6IHouYXJyYXkoei5udW1iZXIoKSkuZGVzY3JpYmUoXCJTZWNvbmQgbWFya3MgdG8gZHVtcCBmcmFtZSBiaXRtYXBzIGFzIFBOR1wiKSxcbn0pO1xuXG5leHBvcnQgdHlwZSBSZW5kZXJPcHRpb25zID0gei5pbmZlcjx0eXBlb2YgcmVuZGVyU2NoZW1hPjtcblxuZXhwb3J0IHR5cGUgQ29uc29sZUNhbGxiYWNrID0gKGxldmVsOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZykgPT4gdm9pZDtcblxuZXhwb3J0IHR5cGUgUHJvZ3Jlc3NDYWxsYmFjayA9IChwcm9ncmVzczogbnVtYmVyKSA9PiB2b2lkO1xuXG5leHBvcnQgaW50ZXJmYWNlIElQQ1JlbmRlck9wdGlvbnMgZXh0ZW5kcyBSZW5kZXJPcHRpb25zIHtcbiAgc291cmNlOiBzdHJpbmc7XG4gIHNpZ25hbDogQWJvcnRTaWduYWw7XG4gIG9uUHJvZ3Jlc3M6IFByb2dyZXNzQ2FsbGJhY2s7XG4gIG9uQ29uc29sZTogQ29uc29sZUNhbGxiYWNrO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlbmRlclJlc3VsdCB7XG4gIG9wdGlvbnM6IFJlbmRlck9wdGlvbnM7XG4gIHdyaXR0ZW46IG51bWJlcjtcbiAgb3V0RmlsZXM6IHN0cmluZ1tdO1xuICBibGFuazogbnVtYmVyO1xuICBqYW5rOiBudW1iZXI7XG4gIHNjcmVlbnNob3RzOiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRSZW5kZXJPcHRpb25zOiBSZW5kZXJPcHRpb25zID0ge1xuICB3aWR0aDogREVGQVVMVF9XSURUSCxcbiAgaGVpZ2h0OiBERUZBVUxUX0hFSUdIVCxcbiAgZnBzOiBERUZBVUxUX0ZQUyxcbiAgZHVyYXRpb246IERFRkFVTFRfRFVSQVRJT04sXG4gIG91dEZpbGVzOiBERUZBVUxUX09VVF9GSUxFUyxcbiAgd2l0aEF1ZGlvOiBmYWxzZSxcbiAgdXNlSW5uZXJQcm94eTogZmFsc2UsXG4gIGRldGVybWluaXN0aWM6IGZhbHNlLFxuICBkaXNhYmxlR3B1OiBmYWxzZSxcbiAgZGlzYWJsZUh3Q29kZWM6IGZhbHNlLFxuICBkaXNhYmxlV2ViU2VjdXJpdHk6IGZhbHNlLFxuICBpZ25vcmVDZXJ0aWZpY2F0ZUVycm9yczogZmFsc2UsXG4gIHdpbmRvd1RvbGVyYW50OiBmYWxzZSxcbiAgd2luZG93VGltZW91dDogREVGQVVMVF9XSU5ET1dfVElNRU9VVCxcbiAgc2NyZWVuc2hvdHM6IFtdLFxufTtcbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDkuXG5cbmltcG9ydCB7IHJlYWxwYXRoU3luYyB9IGZyb20gXCJub2RlOmZzXCI7XG5pbXBvcnQgeyByZXNvbHZlIH0gZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHsgcHJvZ3JhbSB9IGZyb20gXCJjb21tYW5kZXJcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuL2Jhc2UvbG9nZ2luZ1wiO1xuaW1wb3J0IHsgbm9lcnIgfSBmcm9tIFwiLi9iYXNlL25vZXJyXCI7XG5pbXBvcnQgeyBwYXJzZUFycmF5LCBwYXJzZU51bWJlciwgcGFyc2VTdHJpbmcgfSBmcm9tIFwiLi9iYXNlL3BhcnNlclwiO1xuaW1wb3J0IHsgcGFyZ3MgfSBmcm9tIFwiLi9iYXNlL3Byb2Nlc3NcIjtcbmltcG9ydCB7IGRlZmF1bHRSZW5kZXJPcHRpb25zLCB0eXBlIFJlbmRlck9wdGlvbnMsIHJlbmRlclNjaGVtYSB9IGZyb20gXCIuL3JlbmRlcmVyL3NjaGVtYVwiO1xuXG4vLyBTY2hlbWVkIFVSSXMgcGFzcyB0aHJvdWdoOyBiYXJlIHBhdGhzIGdldCBjYW5vbmljYWxpemVkIGFuZCB3cmFwcGVkIGFzIGZpbGU6Ly8uXG5mdW5jdGlvbiBub3JtYWxpemVTb3VyY2Uoczogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKHMuaW5jbHVkZXMoXCI6Ly9cIikgfHwgcy5zdGFydHNXaXRoKFwiZGF0YTpcIikpIHtcbiAgICByZXR1cm4gcztcbiAgfVxuICBsZXQgYWJzOiBzdHJpbmc7XG4gIHRyeSB7XG4gICAgYWJzID0gcmVhbHBhdGhTeW5jKHMpO1xuICB9IGNhdGNoIHtcbiAgICBhYnMgPSByZXNvbHZlKHMpO1xuICB9XG4gIHJldHVybiBgZmlsZTovLyR7YWJzfWA7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ0xJT3B0aW9ucyB7XG4gIG5hbWU6IHN0cmluZztcbiAgcnVuOiAoc291cmNlOiBzdHJpbmcsIG9wdGlvbnM6IFJlbmRlck9wdGlvbnMpID0+IFByb21pc2U8dW5rbm93bj47XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBtYWtlQ0xJKG9wdGlvbnM6IENMSU9wdGlvbnMpIHtcbiAgY29uc3Qgc2hhcGUgPSByZW5kZXJTY2hlbWEuc2hhcGU7XG4gIGNvbnN0IGQgPSBkZWZhdWx0UmVuZGVyT3B0aW9ucztcbiAgcHJvZ3JhbVxuICAgIC5uYW1lKG9wdGlvbnMubmFtZSlcbiAgICAuYXJndW1lbnQoXCI8c291cmNlPlwiLCBcImZpbGU6Ly8sIGh0dHAocyk6Ly8sIGRhdGE6IFVSSSwgb3IgZmlsZXN5c3RlbSBwYXRoXCIpXG4gICAgLm9wdGlvbihcIi1XLCAtLXdpZHRoIDxudW1iZXI+XCIsIHNoYXBlLndpZHRoLmRlc2NyaXB0aW9uLCBgJHtkLndpZHRofWApXG4gICAgLm9wdGlvbihcIi1ILCAtLWhlaWdodCA8bnVtYmVyPlwiLCBzaGFwZS5oZWlnaHQuZGVzY3JpcHRpb24sIGAke2QuaGVpZ2h0fWApXG4gICAgLm9wdGlvbihcIi1TLCAtLXNjcmVlbnNob3RzIDxzZWNvbmRzPlwiLCBzaGFwZS5zY3JlZW5zaG90cy5kZXNjcmlwdGlvbiwgXCJcIilcbiAgICAub3B0aW9uKFwiLWYsIC0tZnBzIDxudW1iZXI+XCIsIHNoYXBlLmZwcy5kZXNjcmlwdGlvbiwgYCR7ZC5mcHN9YClcbiAgICAub3B0aW9uKFwiLXQsIC0tZHVyYXRpb24gPG51bWJlcj5cIiwgc2hhcGUuZHVyYXRpb24uZGVzY3JpcHRpb24sIGAke2QuZHVyYXRpb259YClcbiAgICAub3B0aW9uKFwiLW8sIC0tb3V0LWZpbGUgPHBhdGhzPlwiLCBzaGFwZS5vdXRGaWxlcy5kZXNjcmlwdGlvbiwgZC5vdXRGaWxlcy5qb2luKFwiLFwiKSlcbiAgICAub3B0aW9uKFwiLWEsIC0td2l0aC1hdWRpb1wiLCBzaGFwZS53aXRoQXVkaW8uZGVzY3JpcHRpb24sIGQud2l0aEF1ZGlvKVxuICAgIC5vcHRpb24oXCItZCwgLS1kZXRlcm1pbmlzdGljXCIsIHNoYXBlLmRldGVybWluaXN0aWMuZGVzY3JpcHRpb24sIGQuZGV0ZXJtaW5pc3RpYylcbiAgICAub3B0aW9uKFwiLS11c2UtaW5uZXItcHJveHlcIiwgc2hhcGUudXNlSW5uZXJQcm94eS5kZXNjcmlwdGlvbiwgZC51c2VJbm5lclByb3h5KVxuICAgIC5vcHRpb24oXCItLWRpc2FibGUtZ3B1XCIsIHNoYXBlLmRpc2FibGVHcHUuZGVzY3JpcHRpb24sIGQuZGlzYWJsZUdwdSlcbiAgICAub3B0aW9uKFwiLS1kaXNhYmxlLWh3LWNvZGVjXCIsIHNoYXBlLmRpc2FibGVId0NvZGVjLmRlc2NyaXB0aW9uLCBkLmRpc2FibGVId0NvZGVjKVxuICAgIC5vcHRpb24oXCItLWRpc2FibGUtd2ViLXNlY3VyaXR5XCIsIHNoYXBlLmRpc2FibGVXZWJTZWN1cml0eS5kZXNjcmlwdGlvbiwgZC5kaXNhYmxlV2ViU2VjdXJpdHkpXG4gICAgLm9wdGlvbihcIi0taWdub3JlLWNlcnRpZmljYXRlLWVycm9yc1wiLCBzaGFwZS5pZ25vcmVDZXJ0aWZpY2F0ZUVycm9ycy5kZXNjcmlwdGlvbiwgZC5pZ25vcmVDZXJ0aWZpY2F0ZUVycm9ycylcbiAgICAub3B0aW9uKFwiLS13aW5kb3ctdG9sZXJhbnRcIiwgc2hhcGUud2luZG93VG9sZXJhbnQuZGVzY3JpcHRpb24sIGQud2luZG93VG9sZXJhbnQpXG4gICAgLm9wdGlvbihcIi0td2luZG93LXRpbWVvdXQgPG51bWJlcj5cIiwgc2hhcGUud2luZG93VGltZW91dC5kZXNjcmlwdGlvbiwgYCR7ZC53aW5kb3dUaW1lb3V0fWApXG4gICAgLmFjdGlvbihhc3luYyAoc291cmNlOiBzdHJpbmcsIG9wdHMpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IG9wdGlvbnMucnVuKG5vcm1hbGl6ZVNvdXJjZShzb3VyY2UpLCB7XG4gICAgICAgICAgd2lkdGg6IG5vZXJyKHBhcnNlTnVtYmVyLCBkLndpZHRoKShvcHRzLndpZHRoKSxcbiAgICAgICAgICBoZWlnaHQ6IG5vZXJyKHBhcnNlTnVtYmVyLCBkLmhlaWdodCkob3B0cy5oZWlnaHQpLFxuICAgICAgICAgIGZwczogbm9lcnIocGFyc2VOdW1iZXIsIGQuZnBzKShvcHRzLmZwcyksXG4gICAgICAgICAgZHVyYXRpb246IG5vZXJyKHBhcnNlTnVtYmVyLCBkLmR1cmF0aW9uKShvcHRzLmR1cmF0aW9uKSxcbiAgICAgICAgICBvdXRGaWxlczogcGFyc2VBcnJheShwYXJzZVN0cmluZykob3B0cy5vdXRGaWxlKSxcbiAgICAgICAgICB3aXRoQXVkaW86IG9wdHMud2l0aEF1ZGlvID8/IGQud2l0aEF1ZGlvLFxuICAgICAgICAgIHVzZUlubmVyUHJveHk6IG9wdHMudXNlSW5uZXJQcm94eSA/PyBkLnVzZUlubmVyUHJveHksXG4gICAgICAgICAgZGV0ZXJtaW5pc3RpYzogb3B0cy5kZXRlcm1pbmlzdGljID8/IGQuZGV0ZXJtaW5pc3RpYyxcbiAgICAgICAgICBkaXNhYmxlR3B1OiBvcHRzLmRpc2FibGVHcHUgPz8gZC5kaXNhYmxlR3B1LFxuICAgICAgICAgIGRpc2FibGVId0NvZGVjOiBvcHRzLmRpc2FibGVId0NvZGVjID8/IGQuZGlzYWJsZUh3Q29kZWMsXG4gICAgICAgICAgZGlzYWJsZVdlYlNlY3VyaXR5OiBvcHRzLmRpc2FibGVXZWJTZWN1cml0eSA/PyBkLmRpc2FibGVXZWJTZWN1cml0eSxcbiAgICAgICAgICBpZ25vcmVDZXJ0aWZpY2F0ZUVycm9yczogb3B0cy5pZ25vcmVDZXJ0aWZpY2F0ZUVycm9ycyA/PyBkLmlnbm9yZUNlcnRpZmljYXRlRXJyb3JzLFxuICAgICAgICAgIHdpbmRvd1RvbGVyYW50OiBvcHRzLndpbmRvd1RvbGVyYW50ID8/IGQud2luZG93VG9sZXJhbnQsXG4gICAgICAgICAgd2luZG93VGltZW91dDogbm9lcnIocGFyc2VOdW1iZXIsIGQud2luZG93VGltZW91dCkob3B0cy53aW5kb3dUaW1lb3V0KSxcbiAgICAgICAgICBzY3JlZW5zaG90czogcGFyc2VBcnJheShwYXJzZU51bWJlcikob3B0cy5zY3JlZW5zaG90cyksXG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBsb2dnZXIuZmF0YWwoZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIGF3YWl0IHByb2dyYW0ucGFyc2VBc3luYyhwYXJncygpKTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMDEuXG5cbmltcG9ydCB0eXBlIHsgQ2hpbGRQcm9jZXNzIH0gZnJvbSBcIm5vZGU6Y2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSBcIm5vZGU6ZXZlbnRzXCI7XG5cbmV4cG9ydCBlbnVtIElwY01zZ1R5cGUge1xuICAvLyBjaGlsZCDihpIgcGFyZW50XG4gIENvbnNvbGUgPSBcImNvbnNvbGVcIixcbiAgUHJvZ3Jlc3MgPSBcInByb2dyZXNzXCIsXG4gIERvbmUgPSBcImRvbmVcIixcbiAgRXJyb3IgPSBcImVycm9yXCIsXG4gIC8vIHBhcmVudCDihpIgY2hpbGRcbiAgQ2FuY2VsID0gXCJjYW5jZWxcIixcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb25zb2xlTXNnIHtcbiAgdHlwZTogSXBjTXNnVHlwZS5Db25zb2xlO1xuICBsZXZlbDogc3RyaW5nO1xuICBtZXNzYWdlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2FuY2VsTXNnIHtcbiAgdHlwZTogSXBjTXNnVHlwZS5DYW5jZWw7XG4gIHJlYXNvbj86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJcGNEb25lUGF5bG9hZCB7XG4gIHdyaXR0ZW46IG51bWJlcjtcbiAgb3V0RmlsZXM6IHN0cmluZ1tdO1xuICBibGFuazogbnVtYmVyO1xuICBqYW5rOiBudW1iZXI7XG4gIHNjcmVlbnNob3RzOiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQcm9ncmVzc01zZyB7XG4gIHR5cGU6IElwY01zZ1R5cGUuUHJvZ3Jlc3M7XG4gIHZhbHVlOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRG9uZU1zZyB7XG4gIHR5cGU6IElwY01zZ1R5cGUuRG9uZTtcbiAgcGF5bG9hZDogSXBjRG9uZVBheWxvYWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXJyb3JNc2cge1xuICB0eXBlOiBJcGNNc2dUeXBlLkVycm9yO1xuICBlcnJvcjogc3RyaW5nO1xufVxuXG5leHBvcnQgdHlwZSBJcGNNc2cgPSBDb25zb2xlTXNnIHwgUHJvZ3Jlc3NNc2cgfCBEb25lTXNnIHwgRXJyb3JNc2cgfCBDYW5jZWxNc2c7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSXBjRXZlbnRzIHtcbiAgcHJvZ3Jlc3M6IFt2YWx1ZTogbnVtYmVyXTtcbiAgY29uc29sZTogW2xldmVsOiBzdHJpbmcsIG1zZzogc3RyaW5nXTtcbiAgZG9uZTogW3BheWxvYWQ6IElwY0RvbmVQYXlsb2FkXTtcbiAgZXJyb3I6IFtlcnJvcjogRXJyb3JdO1xuICBjbG9zZTogW2NvZGU6IG51bWJlciB8IG51bGxdO1xufVxuXG5leHBvcnQgY2xhc3MgSXBjV3JpdGVyIHtcbiAgd3JpdGVDb25zb2xlKGxldmVsOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZykge1xuICAgIHRoaXMuc2VuZCh7IHR5cGU6IElwY01zZ1R5cGUuQ29uc29sZSwgbGV2ZWwsIG1lc3NhZ2UgfSk7XG4gIH1cblxuICB3cml0ZVByb2dyZXNzKHZhbHVlOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLnNlbmQoeyB0eXBlOiBJcGNNc2dUeXBlLlByb2dyZXNzLCB2YWx1ZSB9KTtcbiAgfVxuXG4gIHdyaXRlRXJyb3IoZXJyb3I6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLnNlbmQoeyB0eXBlOiBJcGNNc2dUeXBlLkVycm9yLCBlcnJvciB9KTtcbiAgfVxuXG4gIHdyaXRlRG9uZShwYXlsb2FkOiBJcGNEb25lUGF5bG9hZCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLnNlbmQoeyB0eXBlOiBJcGNNc2dUeXBlLkRvbmUsIHBheWxvYWQgfSk7XG4gIH1cblxuICBwcml2YXRlIHNlbmQobXNnOiBJcGNNc2cpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIGlmICghcHJvY2Vzcy5zZW5kKSB7XG4gICAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgICB9XG4gICAgICBwcm9jZXNzLnNlbmQobXNnLCAoKSA9PiByZXNvbHZlKCkpO1xuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBJcGNSZWFkZXIgZXh0ZW5kcyBFdmVudEVtaXR0ZXI8SXBjRXZlbnRzPiB7XG4gIGNvbnN0cnVjdG9yKGNoaWxkOiBDaGlsZFByb2Nlc3MpIHtcbiAgICBzdXBlcigpO1xuICAgIGNoaWxkLm9uKFwibWVzc2FnZVwiLCAocmF3KSA9PiB7XG4gICAgICBjb25zdCBtc2cgPSByYXcgYXMgSXBjTXNnO1xuICAgICAgc3dpdGNoIChtc2cudHlwZSkge1xuICAgICAgICBjYXNlIElwY01zZ1R5cGUuQ29uc29sZToge1xuICAgICAgICAgIHRoaXMuZW1pdChcImNvbnNvbGVcIiwgbXNnLmxldmVsLCBtc2cubWVzc2FnZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBJcGNNc2dUeXBlLlByb2dyZXNzOiB7XG4gICAgICAgICAgdGhpcy5lbWl0KFwicHJvZ3Jlc3NcIiwgbXNnLnZhbHVlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIElwY01zZ1R5cGUuRG9uZToge1xuICAgICAgICAgIHRoaXMuZW1pdChcImRvbmVcIiwgbXNnLnBheWxvYWQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgSXBjTXNnVHlwZS5FcnJvcjoge1xuICAgICAgICAgIHRoaXMuZW1pdChcImVycm9yXCIsIG5ldyBFcnJvcihtc2cuZXJyb3IpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIGNoaWxkLm9uY2UoXCJleGl0XCIsIChjKSA9PiB0aGlzLmVtaXQoXCJjbG9zZVwiLCBjKSk7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDkuXG5cbmV4cG9ydCBmdW5jdGlvbiBzbGVlcChtczogbnVtYmVyKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCBtcykpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gd2l0aFRpbWVvdXQ8VD4ocDogUHJvbWlzZTxUPiwgbXM6IG51bWJlciwgbGFiZWw6IHN0cmluZyk6IFByb21pc2U8VD4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiByZWplY3QobmV3IEVycm9yKGAke2xhYmVsfSB0aW1lZCBvdXQgYWZ0ZXIgJHttc31tc2ApKSwgbXMpO1xuICAgIHAudGhlbihyZXNvbHZlLCByZWplY3QpLmZpbmFsbHkoKCkgPT4gY2xlYXJUaW1lb3V0KHRpbWVyKSk7XG4gIH0pO1xufVxuXG4vLyBSZWplY3QgYXMgc29vbiBhcyBgc2lnbmFsYCBhYm9ydHMsIGVsc2Ugc2V0dGxlIHdpdGggYHBgOyBuby1vcCBwYXNzdGhyb3VnaCB3aGVuIG5vIHNpZ25hbC5cbmV4cG9ydCBmdW5jdGlvbiBhYm9ydGFibGU8VD4ocDogUHJvbWlzZTxUPiwgc2lnbmFsPzogQWJvcnRTaWduYWwpOiBQcm9taXNlPFQ+IHtcbiAgaWYgKCFzaWduYWwpIHtcbiAgICByZXR1cm4gcDtcbiAgfVxuICByZXR1cm4gbmV3IFByb21pc2U8VD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IG9uQWJvcnQgPSAoKSA9PiByZWplY3Qoc2lnbmFsLnJlYXNvbik7XG4gICAgc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCBvbkFib3J0LCB7IG9uY2U6IHRydWUgfSk7XG4gICAgcC50aGVuKHJlc29sdmUsIHJlamVjdCkuZmluYWxseSgoKSA9PiBzaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsIG9uQWJvcnQpKTtcbiAgfSk7XG59XG5cbi8vIENhbGxiYWNrIG1heSByZXR1cm4gdGhlIG5leHQgaW50ZXJ2YWwgKG1zKSB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBmb3IgdGhlIGZvbGxvd2luZyB0aWNrLlxuZXhwb3J0IGZ1bmN0aW9uIHBlcmlvZGljYWwoY2FsbGJhY2s6IChjb3VudDogbnVtYmVyKSA9PiBQcm9taXNlPG51bWJlciB8IHVuZGVmaW5lZD4gfCB1bmRlZmluZWQsIG1zOiBudW1iZXIpIHtcbiAgbGV0IHRva2VuOiBOb2RlSlMuVGltZW91dDtcbiAgbGV0IGNsb3NlZCA9IGZhbHNlO1xuICBhc3luYyBmdW5jdGlvbiB0aWNrKGNvdW50OiBudW1iZXIpIHtcbiAgICBjb25zdCBuZXh0ID0gYXdhaXQgY2FsbGJhY2soY291bnQpO1xuICAgIGlmIChjbG9zZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdG9rZW4gPSBzZXRUaW1lb3V0KCgpID0+IHRpY2soY291bnQgKyAxKSwgbmV4dCA/PyBtcyk7XG4gIH1cbiAgdG9rZW4gPSBzZXRUaW1lb3V0KCgpID0+IHRpY2soMCksIG1zKTtcbiAgcmV0dXJuICgpID0+IHtcbiAgICBjbG9zZWQgPSB0cnVlO1xuICAgIGNsZWFyVGltZW91dCh0b2tlbik7XG4gIH07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAzLzEzLlxuXG5pbXBvcnQgdHlwZSB7IERlYnVnZ2VyLCBTaXplLCBXZWJDb250ZW50cyB9IGZyb20gXCJlbGVjdHJvblwiO1xuaW1wb3J0IHsgd2l0aFRpbWVvdXQgfSBmcm9tIFwiLi90aW1pbmdcIjtcblxuY29uc3QgQ0RQX1RJTUVPVVRfTVMgPSA1XzAwMDtcblxuZXhwb3J0IGZ1bmN0aW9uIHNlbmQoY2RwOiBEZWJ1Z2dlciwgbWV0aG9kOiBzdHJpbmcsIHBhcmFtcz86IG9iamVjdCk6IFByb21pc2U8dW5rbm93bj4ge1xuICByZXR1cm4gd2l0aFRpbWVvdXQoY2RwLnNlbmRDb21tYW5kKG1ldGhvZCwgcGFyYW1zKSwgQ0RQX1RJTUVPVVRfTVMsIGBjZHAuJHttZXRob2R9YCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBldmFsSW4oY2RwOiBEZWJ1Z2dlciwgZXhwcmVzc2lvbjogc3RyaW5nKTogUHJvbWlzZTx1bmtub3duPiB7XG4gIHJldHVybiB3aXRoVGltZW91dChzZW5kKGNkcCwgXCJSdW50aW1lLmV2YWx1YXRlXCIsIHsgZXhwcmVzc2lvbiB9KSwgQ0RQX1RJTUVPVVRfTVMsIFwiZXZhbEluXCIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYWR2YW5jZVZpcnR1YWxUaW1lKGNkcDogRGVidWdnZXIsIGJ1ZGdldDogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY2RwLm9mZihcIm1lc3NhZ2VcIiwgaGFuZGxlcik7XG4gICAgICByZWplY3QobmV3IEVycm9yKGBhZHZhbmNlVmlydHVhbFRpbWUgdGltZWQgb3V0IGFmdGVyICR7Q0RQX1RJTUVPVVRfTVN9bXNgKSk7XG4gICAgfSwgQ0RQX1RJTUVPVVRfTVMpO1xuXG4gICAgY29uc3QgaGFuZGxlciA9IChfOiBFbGVjdHJvbi5FdmVudCwgbWV0aG9kOiBzdHJpbmcpID0+IHtcbiAgICAgIGlmIChtZXRob2QgPT09IFwiRW11bGF0aW9uLnZpcnR1YWxUaW1lQnVkZ2V0RXhwaXJlZFwiKSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgY2RwLm9mZihcIm1lc3NhZ2VcIiwgaGFuZGxlcik7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNkcC5vbihcIm1lc3NhZ2VcIiwgaGFuZGxlcik7XG4gICAgLy8gTm8gc3RhcnZhdGlvbiBjYXAgKHdvdWxkIHNraXAgcGVuZGluZyB3b3JrIG5vbi1kZXRlcm1pbmlzdGljYWxseSk7IGNhcHR1cmUgc3RhcnRzIHBvc3QgZGlkLXN0b3AtbG9hZGluZywgYW5kIENEUF9USU1FT1VUX01TIHR1cm5zIGEgcmVhbCBzdGFsbCBpbnRvIGEgZmFpbGVkIHJlbmRlci5cbiAgICBzZW5kKGNkcCwgXCJFbXVsYXRpb24uc2V0VmlydHVhbFRpbWVQb2xpY3lcIiwge1xuICAgICAgcG9saWN5OiBcImFkdmFuY2VcIixcbiAgICAgIGJ1ZGdldCxcbiAgICB9KS5jYXRjaCgoZSkgPT4ge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgY2RwLm9mZihcIm1lc3NhZ2VcIiwgaGFuZGxlcik7XG4gICAgICByZWplY3QoZSk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcGF1c2VWaXJ0dWFsVGltZShjZHA6IERlYnVnZ2VyKTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IHNlbmQoY2RwLCBcIkVtdWxhdGlvbi5zZXRWaXJ0dWFsVGltZVBvbGljeVwiLCB7IHBvbGljeTogXCJwYXVzZVwiIH0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVidWlsZERyYXdhYmxlKHdlYjogV2ViQ29udGVudHMsIHNpemU6IFNpemUpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBjZHAgPSB3ZWIuZGVidWdnZXI7XG4gICAgYXdhaXQgc2VuZChjZHAsIFwiRW11bGF0aW9uLmNsZWFyRGV2aWNlTWV0cmljc092ZXJyaWRlXCIsIHt9KTtcbiAgICBhd2FpdCBzZW5kKGNkcCwgXCJFbXVsYXRpb24uc2V0RGV2aWNlTWV0cmljc092ZXJyaWRlXCIsIHtcbiAgICAgIC4uLnNpemUsXG4gICAgICBkZXZpY2VTY2FsZUZhY3RvcjogMSxcbiAgICAgIG1vYmlsZTogZmFsc2UsXG4gICAgfSk7XG4gICAgd2ViLmludmFsaWRhdGUoKTtcbiAgfSBjYXRjaCB7XG4gICAgLy8gU3RoIGxpa2UgdGVhcmRvd24gZGV0YWNoIHJlamVjdHMgaW4tZmxpZ2h0IENEUCBzZW5kczsgYSBsb3N0IHJlcGFpbnQga2ljayBpcyBoYXJtbGVzcy5cbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wOS5cblxuaW1wb3J0IHR5cGUgeyBEZWJ1Z2dlciwgU2l6ZSwgV2ViQ29udGVudHMgfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IGV2YWxJbiB9IGZyb20gXCIuLi9iYXNlL2NkcFwiO1xuaW1wb3J0IHsgd2l0aFRpbWVvdXQgfSBmcm9tIFwiLi4vYmFzZS90aW1pbmdcIjtcblxuZXhwb3J0IGNvbnN0IEZSQU1FX1NZTkNfTUFSS0VSX1dJRFRIID0gMzI7XG5leHBvcnQgY29uc3QgRlJBTUVfU1lOQ19NQVJLRVJfSEVJR0hUID0gMTtcbmV4cG9ydCBjb25zdCBTVEVHT19USUNLX0NIQU5ORUwgPSBcInN0ZWdvLXRpY2tcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkU3RlZ29IVE1MKHRhcmdldFVSTDogc3RyaW5nLCBzaXplOiBTaXplKTogc3RyaW5nIHtcbiAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSBzaXplO1xuICByZXR1cm4gYDwhRE9DVFlQRSBodG1sPlxuPGh0bWw+XG48aGVhZD5cbiAgPG1ldGEgY2hhcnNldD1cIlVURi04XCI+XG4gIDxzdHlsZT5cbiAgICAqIHsgbWFyZ2luOiAwOyBwYWRkaW5nOiAwOyBib3gtc2l6aW5nOiBib3JkZXItYm94OyB9XG4gICAgaHRtbCwgYm9keSB7IHdpZHRoOiAke3dpZHRofXB4OyBoZWlnaHQ6ICR7aGVpZ2h0ICsgMX1weDsgb3ZlcmZsb3c6IGhpZGRlbjsgfVxuICAgICN0YXJnZXQgeyBcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsgXG4gICAgICB0b3A6IDA7IFxuICAgICAgbGVmdDogMDsgXG4gICAgICB3aWR0aDogJHt3aWR0aH1weDsgXG4gICAgICBoZWlnaHQ6ICR7aGVpZ2h0fXB4OyBcbiAgICAgIGJvcmRlcjogbm9uZTsgXG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICB9XG4gICAgI3N0ZWdvIHtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHRvcDogJHtoZWlnaHR9cHg7XG4gICAgICBsZWZ0OiAwO1xuICAgICAgd2lkdGg6ICR7d2lkdGh9cHg7XG4gICAgICBoZWlnaHQ6IDFweDtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgaW1hZ2UtcmVuZGVyaW5nOiBwaXhlbGF0ZWQ7XG4gICAgfVxuICA8L3N0eWxlPlxuPC9oZWFkPlxuPGJvZHk+XG4gIDxpZnJhbWUgaWQ9XCJ0YXJnZXRcIiBzcmM9XCIke3RhcmdldFVSTH1cIj48L2lmcmFtZT5cbiAgPGNhbnZhcyBpZD1cInN0ZWdvXCIgd2lkdGg9XCIke3dpZHRofVwiIGhlaWdodD1cIjFcIj48L2NhbnZhcz5cbiAgPHNjcmlwdD5cbiAgICAoZnVuY3Rpb24oKSB7XG4gICAgICBjb25zdCBXSURUSCA9ICR7d2lkdGh9O1xuICAgICAgY29uc3QgTUFSS0VSX1dJRFRIID0gJHtGUkFNRV9TWU5DX01BUktFUl9XSURUSH07XG4gICAgICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3RlZ28nKTtcbiAgICAgIGNvbnN0IGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcsIHsgd2lsbFJlYWRGcmVxdWVudGx5OiB0cnVlIH0pO1xuICAgICAgbGV0IHN0YXJ0VGltZSA9IG51bGw7XG4gICAgICBsZXQgcmFmSWQgPSBudWxsO1xuXG4gICAgICBmdW5jdGlvbiBlbmNvZGVUaW1lc3RhbXAodGltZXN0YW1wTXMpIHtcbiAgICAgICAgY29uc3QgaW1hZ2VEYXRhID0gY3R4LmNyZWF0ZUltYWdlRGF0YShXSURUSCwgMSk7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBpbWFnZURhdGEuZGF0YTtcblxuICAgICAgICBjb25zdCB0aW1lc3RhbXBJbnQgPSBNYXRoLmZsb29yKHRpbWVzdGFtcE1zKSA+Pj4gMDtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IE1BUktFUl9XSURUSDsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgYml0ID0gKHRpbWVzdGFtcEludCA+Pj4gKE1BUktFUl9XSURUSCAtIDEgLSBpKSkgJiAxO1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gYml0ID8gMjU1IDogMDtcbiAgICAgICAgICBjb25zdCBpZHggPSBpICogNDtcbiAgICAgICAgICBkYXRhW2lkeF0gPSB2YWx1ZTtcbiAgICAgICAgICBkYXRhW2lkeCArIDFdID0gdmFsdWU7XG4gICAgICAgICAgZGF0YVtpZHggKyAyXSA9IHZhbHVlO1xuICAgICAgICAgIGRhdGFbaWR4ICsgM10gPSAyNTU7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGxldCBpID0gTUFSS0VSX1dJRFRIOyBpIDwgV0lEVEg7IGkrKykge1xuICAgICAgICAgIGNvbnN0IGlkeCA9IGkgKiA0O1xuICAgICAgICAgIGRhdGFbaWR4XSA9IDA7XG4gICAgICAgICAgZGF0YVtpZHggKyAxXSA9IDA7XG4gICAgICAgICAgZGF0YVtpZHggKyAyXSA9IDA7XG4gICAgICAgICAgZGF0YVtpZHggKyAzXSA9IDI1NTtcbiAgICAgICAgfVxuXG4gICAgICAgIGN0eC5wdXRJbWFnZURhdGEoaW1hZ2VEYXRhLCAwLCAwKTtcbiAgICAgICAgd2luZG93Ll9fcHVwX3N0ZWdvX3RpY2tfXygpO1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiB1cGRhdGVMb29wKCkge1xuICAgICAgICBpZiAoc3RhcnRUaW1lID09PSBudWxsKSByZXR1cm47XG4gICAgICAgIGNvbnN0IGVsYXBzZWQgPSBwZXJmb3JtYW5jZS5ub3coKSAtIHN0YXJ0VGltZTtcbiAgICAgICAgZW5jb2RlVGltZXN0YW1wKGVsYXBzZWQpO1xuICAgICAgICByYWZJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSh1cGRhdGVMb29wKTtcbiAgICAgIH1cblxuICAgICAgd2luZG93Ll9fcHVwX3N0YXJ0X3N0ZWdvX18gPSAoKSA9PiB7XG4gICAgICAgIHN0YXJ0VGltZSA9IHBlcmZvcm1hbmNlLm5vdygpO1xuICAgICAgICBlbmNvZGVUaW1lc3RhbXAoMCk7XG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSh1cGRhdGVMb29wKTtcbiAgICAgIH07XG5cbiAgICAgIHdpbmRvdy5fX3B1cF9kcmF3X3N0ZWdvX18gPSAobXMpID0+IHtcbiAgICAgICAgZW5jb2RlVGltZXN0YW1wKG1zKTtcbiAgICAgIH07XG5cbiAgICAgIHdpbmRvdy5fX3B1cF9zdG9wX3N0ZWdvX18gPSAoKSA9PiB7XG4gICAgICAgIGlmIChyYWZJZCAhPT0gbnVsbCkge1xuICAgICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHJhZklkKTtcbiAgICAgICAgICByYWZJZCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSkoKTtcbiAgPC9zY3JpcHQ+XG48L2JvZHk+XG48L2h0bWw+YDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlY29kZVN0ZWdvKGJpdG1hcDogQnVmZmVyLCBzaXplOiBTaXplKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSBzaXplO1xuICBpZiAod2lkdGggPCBGUkFNRV9TWU5DX01BUktFUl9XSURUSCB8fCBoZWlnaHQgPCAyKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IG1hcmtlclJvdyA9IGhlaWdodCAtIDE7XG5cbiAgbGV0IHRpbWVzdGFtcCA9IDA7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgRlJBTUVfU1lOQ19NQVJLRVJfV0lEVEg7IGkrKykge1xuICAgIGNvbnN0IHBpeGVsSWR4ID0gKG1hcmtlclJvdyAqIHdpZHRoICsgaSkgKiA0O1xuICAgIGNvbnN0IHIgPSBiaXRtYXBbcGl4ZWxJZHhdID8/IDA7XG4gICAgY29uc3QgYml0ID0gciA+IDEyNyA/IDEgOiAwO1xuICAgIHRpbWVzdGFtcCA9ICh0aW1lc3RhbXAgPDwgMSkgfCBiaXQ7XG4gIH1cblxuICB0aW1lc3RhbXAgPSB0aW1lc3RhbXAgPj4+IDA7XG5cbiAgaWYgKCFOdW1iZXIuaXNGaW5pdGUodGltZXN0YW1wKSB8fCB0aW1lc3RhbXAgPCAwIHx8IHRpbWVzdGFtcCA+IDFlNykge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICByZXR1cm4gdGltZXN0YW1wO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhcnRTdGVnbyhjZHA6IERlYnVnZ2VyKSB7XG4gIHJldHVybiBldmFsSW4oY2RwLCBgX19wdXBfc3RhcnRfc3RlZ29fXygpYCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdG9wU3RlZ28oY2RwOiBEZWJ1Z2dlcikge1xuICByZXR1cm4gZXZhbEluKGNkcCwgYF9fcHVwX3N0b3Bfc3RlZ29fXygpYCk7XG59XG5cbi8vIFBhaW50cyB0aGUgc3RlZ28gcm93IGZvciBgZXhwZWN0ZWRgIG1zIHN5bmNocm9ub3VzbHk7IHRoZSBkYW1hZ2UgcmlkZXMgb3V0IG9uIHRoZSBuZXh0IGNvbXBvc2l0ZWQgZnJhbWUuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZHJhd1N0ZWdvKHdjOiBXZWJDb250ZW50cywgZXhwZWN0ZWQ6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBldmFsSW4od2MuZGVidWdnZXIsIGBfX3B1cF9kcmF3X3N0ZWdvX18oJHtleHBlY3RlZH0pYCk7XG59XG5cbi8vIFJlc29sdmVzIHdoZW4gdGhlIHJlbmRlcmVyIGNvbW1pdHRlZCB0aGUgc3RlZ28gcm93OyBhcm0gQkVGT1JFIGRyYXdTdGVnbyB0byBhdm9pZCBtaXNzaW5nIHRoZSBhY2suXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd2FpdFN0ZWdvVGljayh3YzogV2ViQ29udGVudHMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3Qgc3dhcHBlZCA9IG5ldyBQcm9taXNlKChyKSA9PiB3Yy5pcGMub25jZShTVEVHT19USUNLX0NIQU5ORUwsIHIpKTtcbiAgYXdhaXQgd2l0aFRpbWVvdXQoc3dhcHBlZCwgNV8wMDAsIFwic3RlZ28gdGlja1wiKTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMDEuXG5cbmltcG9ydCB0eXBlIHsgU2l6ZSB9IGZyb20gXCJlbGVjdHJvblwiO1xuaW1wb3J0IHsgcHJvdG9jb2wgfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IGJ1aWxkU3RlZ29IVE1MIH0gZnJvbSBcIi4vc3RlZ29cIjtcblxuY29uc3QgUFVQX1NDSEVNRSA9IFwicHVwXCI7XG5jb25zdCBGUkFNRV9TQ0hFTUUgPSBcInB1cC1mcmFtZVwiO1xuXG4vLyByZWdpc3RlclNjaGVtZXNBc1ByaXZpbGVnZWQgaG9ub3JzIG9ubHkgdGhlIExBU1QgY2FsbCDigJQgcmVnaXN0ZXIgZXZlcnkgY3VzdG9tIHNjaGVtZSBpbiB0aGlzIG9uZSBsaXN0IGJlbG93LlxuY29uc3QgUFJJVklMRUdFRF9QUklWSUxFR0VTID0ge1xuICBzdGFuZGFyZDogdHJ1ZSxcbiAgc2VjdXJlOiB0cnVlLFxuICAvLyBBIHBhZ2UncyBvd24gQ1NQIHdvdWxkIG90aGVyd2lzZSByZWZ1c2UgdGhlIHZpZGVvIGhvb2sncyBmZXRjaCBvZiBwdXAtZnJhbWU6Ly8gc3R1YnMgKGNvbm5lY3Qtc3JjKS5cbiAgYnlwYXNzQ1NQOiB0cnVlLFxuICBzdXBwb3J0RmV0Y2hBUEk6IHRydWUsXG4gIGNvcnNFbmFibGVkOiB0cnVlLFxuICBzdHJlYW06IHRydWUsXG4gIGNvZGVDYWNoZTogdHJ1ZSxcbn0gYXMgY29uc3Q7XG5cbi8vIE11c3QgYmUgY2FsbGVkIHN5bmNocm9ub3VzbHkgYmVmb3JlIGFwcCBpcyByZWFkeS5cbnByb3RvY29sLnJlZ2lzdGVyU2NoZW1lc0FzUHJpdmlsZWdlZChbXG4gIHsgc2NoZW1lOiBQVVBfU0NIRU1FLCBwcml2aWxlZ2VzOiBQUklWSUxFR0VEX1BSSVZJTEVHRVMgfSxcbiAgeyBzY2hlbWU6IEZSQU1FX1NDSEVNRSwgcHJpdmlsZWdlczogUFJJVklMRUdFRF9QUklWSUxFR0VTIH0sXG5dKTtcblxuLy8gTXVzdCBiZSBjYWxsZWQgYWZ0ZXIgYXBwIGlzIHJlYWR5LlxuZXhwb3J0IGZ1bmN0aW9uIHNldHVwUHVwUHJvdG9jb2woKTogdm9pZCB7XG4gIHByb3RvY29sLmhhbmRsZShQVVBfU0NIRU1FLCAocmVxKSA9PiB7XG4gICAgY29uc3QgdXJsID0gbmV3IFVSTChyZXEudXJsKTtcbiAgICBjb25zdCBzcmMgPSB1cmwuc2VhcmNoUGFyYW1zLmdldChcInNyY1wiKSA/PyBcIlwiO1xuICAgIGNvbnN0IHdpZHRoID0gcGFyc2VJbnQodXJsLnNlYXJjaFBhcmFtcy5nZXQoXCJ3XCIpID8/IFwiMFwiLCAxMCk7XG4gICAgY29uc3QgaGVpZ2h0ID0gcGFyc2VJbnQodXJsLnNlYXJjaFBhcmFtcy5nZXQoXCJoXCIpID8/IFwiMFwiLCAxMCk7XG4gICAgY29uc3QgaHRtbCA9IGJ1aWxkU3RlZ29IVE1MKHNyYywgeyB3aWR0aCwgaGVpZ2h0IH0pO1xuICAgIHJldHVybiBuZXcgUmVzcG9uc2UoaHRtbCwgeyBoZWFkZXJzOiB7IFwiY29udGVudC10eXBlXCI6IFwidGV4dC9odG1sXCIgfSB9KTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTdGVnb1VSTChzcmM6IHN0cmluZywgc2l6ZTogU2l6ZSk6IHN0cmluZyB7XG4gIGNvbnN0IHVybCA9IG5ldyBVUkwoYCR7UFVQX1NDSEVNRX06Ly9zdGVnb2ApO1xuICB1cmwuc2VhcmNoUGFyYW1zLnNldChcInNyY1wiLCBzcmMucmVwbGFjZShcImh0dHA6Ly9cIiwgXCJodHRwczovL1wiKSk7XG4gIHVybC5zZWFyY2hQYXJhbXMuc2V0KFwid1wiLCBTdHJpbmcoc2l6ZS53aWR0aCkpO1xuICB1cmwuc2VhcmNoUGFyYW1zLnNldChcImhcIiwgU3RyaW5nKHNpemUuaGVpZ2h0KSk7XG4gIHJldHVybiB1cmwudG9TdHJpbmcoKTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDEvMzAuXG5cbmludGVyZmFjZSBRdWV1ZUVudHJ5IHtcbiAgcnVuOiBWb2lkRnVuY3Rpb247XG4gIHJlamVjdDogKHJlYXNvbjogdW5rbm93bikgPT4gdm9pZDtcbiAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG59XG5cbmV4cG9ydCBjbGFzcyBDb25jdXJyZW5jeUxpbWl0ZXIge1xuICBwcml2YXRlIF9hY3RpdmUgPSAwO1xuICBwcml2YXRlIF9xdWV1ZTogUXVldWVFbnRyeVtdID0gW107XG4gIHByaXZhdGUgX3NpZ25hbHMgPSBuZXcgV2Vha1NldDxBYm9ydFNpZ25hbD4oKTtcbiAgcHJpdmF0ZSBfcmVzb2x2ZT86IFZvaWRGdW5jdGlvbjtcblxuICBjb25zdHJ1Y3RvcihyZWFkb25seSBtYXhDb25jdXJyZW5jeTogbnVtYmVyKSB7fVxuXG4gIGdldCBhY3RpdmUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fYWN0aXZlO1xuICB9XG5cbiAgZ2V0IHBlbmRpbmcoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fcXVldWUubGVuZ3RoO1xuICB9XG5cbiAgZ2V0IHN0YXRzKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBhY3RpdmU6ICR7dGhpcy5hY3RpdmV9LCBwZW5kaW5nOiAke3RoaXMucGVuZGluZ31gO1xuICB9XG5cbiAgYXN5bmMgc2NoZWR1bGU8VD4oZm46ICgpID0+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+IHtcbiAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQsIGZwcywgaHcsIGJpdHJhdGUsIG11eGVyIH0gPSBvcHRzO1xuXG4gICAgY29uc3QgY29kZWMgPSBody5nZXRFbmNvZGVyQ29kZWMoXCJoZXZjXCIpO1xuICAgIGlmICghY29kZWMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcImhldmNfdmlkZW90b29sYm94IGVuY29kZXIgbm90IGZvdW5kXCIpO1xuICAgIH1cblxuICAgIGNvbnN0IGN0eCA9IGF3YWl0IG9wZW5WaWRlb0N0eChcbiAgICAgIHtcbiAgICAgICAgY29kZWMsXG4gICAgICAgIHdpZHRoLFxuICAgICAgICBoZWlnaHQsXG4gICAgICAgIGZwcyxcbiAgICAgICAgYml0cmF0ZSxcbiAgICAgICAgcGl4ZWxGb3JtYXQ6IEFWX1BJWF9GTVRfQkdSQSxcbiAgICAgICAgY29sb3JSYW5nZTogQVZDT0xfUkFOR0VfSlBFRyxcbiAgICAgICAgY29kZWNUYWc6IFwiaHZjMVwiLFxuICAgICAgICBvcHRpb25zOiB7IGFscGhhX3F1YWxpdHk6IFwiMVwiIH0sXG4gICAgICB9LFxuICAgICAgXCJ2dEVuYy5vcGVuMlwiLFxuICAgICk7XG4gICAgLy8gUGFydGlhbC1jb25zdHJ1Y3Rpb24gc2FmZXR5OiBzdGFjayBkaXNwb3NlcyBjdHgvcGt0IGlmIGEgbGF0ZXIgc3RlcCB0aHJvd3M7IG1vdmUoKSBkaXNvd25zIG9uIHN1Y2Nlc3MuXG4gICAgdXNpbmcgc3RhY2sgPSBuZXcgRGlzcG9zYWJsZVN0YWNrKCk7XG4gICAgc3RhY2sudXNlKGN0eCk7XG4gICAgY29uc3QgcGt0ID0gc3RhY2sudXNlKG1ha2VQYWNrZXQoKSk7XG4gICAgY29uc3Qgc3RyZWFtID0gbXV4ZXIuYWRkU3RyZWFtKGN0eCwgXCJodmMxXCIpO1xuICAgIHN0YWNrLm1vdmUoKTtcbiAgICByZXR1cm4gbmV3IFZpZGVvVG9vbGJveEVuY29kZXIoY3R4LCBwa3QsIHN0cmVhbSk7XG4gIH1cblxuICBhc3luYyBlbmNvZGUoYmdyYUZyYW1lOiBGcmFtZSwgbXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYmdyYUZyYW1lLnB0cyA9IHRoaXMuX3B0cysrO1xuICAgIGJncmFGcmFtZS5kdXJhdGlvbiA9IDFuO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCB0aGlzLl9jdHguc2VuZEZyYW1lKGJncmFGcmFtZSksIFwidnRFbmMuc2VuZEZyYW1lXCIpO1xuICAgIGF3YWl0IHRoaXMuZHJhaW4obXV4ZXIpO1xuICB9XG5cbiAgYXN5bmMgZmx1c2gobXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5fY3R4LnNlbmRGcmFtZShudWxsKTtcbiAgICBhd2FpdCB0aGlzLmRyYWluKG11eGVyKTtcbiAgfVxuXG4gIFtTeW1ib2wuZGlzcG9zZV0oKTogdm9pZCB7XG4gICAgdGhpcy5fcGt0LmZyZWUoKTtcbiAgICB0aGlzLl9jdHguZnJlZUNvbnRleHQoKTtcbiAgfVxuXG4gIHByaXZhdGUgZHJhaW4obXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIGRyYWluUGFja2V0cyh0aGlzLl9jdHgsIHRoaXMuX3BrdCwgdGhpcy5fc3RyZWFtLCBtdXhlcik7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMTMuXG5cbmltcG9ydCB7IEhhcmR3YXJlQ29udGV4dCB9IGZyb20gXCJub2RlLWF2L2FwaVwiO1xuaW1wb3J0IHtcbiAgQVZfUElYX0ZNVF9ZVVZBNDIwUCxcbiAgQVZfU0FNUExFX0ZNVF9GTFQsXG4gIEFWX1NBTVBMRV9GTVRfRkxUUCxcbiAgRkZfRU5DT0RFUl9BQUMsXG4gIEZGX0VOQ09ERVJfTElCT1BVUyxcbiAgRkZfRU5DT0RFUl9MSUJYMjY1LFxuICBGRl9IV0RFVklDRV9UWVBFX0NVREEsXG4gIEZGX0hXREVWSUNFX1RZUEVfVklERU9UT09MQk9YLFxufSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcblxuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4uL2xvZ2dpbmdcIjtcbmltcG9ydCB7IEF1ZGlvRW5jb2RlciB9IGZyb20gXCIuL2F1ZGlvXCI7XG5pbXBvcnQgeyBDb2RlY1N0YXRlIH0gZnJvbSBcIi4vY29kZWNcIjtcbmltcG9ydCB7IE52ZW5jRHVhbExheWVyRW5jb2RlciB9IGZyb20gXCIuL2hldmNfYWxwaGEvbnZlbmNcIjtcbmltcG9ydCB7IEZGX0VOQ09ERVJfTElCVlBYX1ZQOSB9IGZyb20gXCIuL21pc2NcIjtcbmltcG9ydCB0eXBlIHsgRm9ybWF0TXV4ZXIgfSBmcm9tIFwiLi9tdXhlclwiO1xuaW1wb3J0IHR5cGUgeyBTaW5rS2luZCwgU2lua09wdGlvbnMgfSBmcm9tIFwiLi9zaW5rXCI7XG5pbXBvcnQgeyBWaWRlb0VuY29kZXIgfSBmcm9tIFwiLi92aWRlb1wiO1xuaW1wb3J0IHsgVmlkZW9Ub29sYm94RW5jb2RlciB9IGZyb20gXCIuL3ZpZGVvdG9vbGJveFwiO1xuXG5jb25zdCBUQUcgPSBcIltFbmNvZGVyXVwiO1xuXG5leHBvcnQgdHlwZSBId0VuY29kZXIgPSBWaWRlb1Rvb2xib3hFbmNvZGVyIHwgTnZlbmNEdWFsTGF5ZXJFbmNvZGVyO1xuXG5leHBvcnQgaW50ZXJmYWNlIFZpZGVvU2V0dXAge1xuICB2aWRlbz86IFZpZGVvRW5jb2RlcjtcbiAgaHdWaWRlbz86IEh3RW5jb2RlcjtcbiAgY29kZWM/OiBDb2RlY1N0YXRlO1xuICBodz86IEhhcmR3YXJlQ29udGV4dDtcbiAgb3duc0h3OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEh3VmlkZW9GYWN0b3J5T3B0aW9ucyB7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICBmcHM6IG51bWJlcjtcbiAgYml0cmF0ZT86IG51bWJlcjtcbiAgZGlzYWJsZUh3Q29kZWM/OiBib29sZWFuO1xuICBzaGFyZWRIdz86IEhhcmR3YXJlQ29udGV4dDtcbn1cblxuLy8gV2ViTSBWUDkgcmVhbHRpbWUgaXMgYWxyZWFkeSB0aGUgZmFzdCBwYXRoOyByb3ctbXQgKyB0aHJlYWRzIGNvdmVyIHRoZSByZXN0LlxuY29uc3QgV0VCTV9WUDlfT1BUUyA9IHtcbiAgZGVhZGxpbmU6IFwicmVhbHRpbWVcIixcbiAgXCJjcHUtdXNlZFwiOiBcIjhcIixcbiAgXCJyb3ctbXRcIjogXCIxXCIsXG4gIHRocmVhZHM6IFwiNFwiLFxufSBhcyBjb25zdDtcblxuY29uc3QgTVA0X0FVRElPID0ge1xuICBvdXRTYW1wbGVSYXRlOiA0NF8xMDAsXG4gIG91dFNhbXBsZUZtdDogQVZfU0FNUExFX0ZNVF9GTFRQLFxuICBjb2RlY05hbWU6IEZGX0VOQ09ERVJfQUFDLFxufSBhcyBjb25zdDtcblxuLy8gT3B1cyByZWplY3RzIDQ0LjFrLlxuY29uc3QgV0VCTV9BVURJTyA9IHtcbiAgb3V0U2FtcGxlUmF0ZTogNDhfMDAwLFxuICBvdXRTYW1wbGVGbXQ6IEFWX1NBTVBMRV9GTVRfRkxULFxuICBjb2RlY05hbWU6IEZGX0VOQ09ERVJfTElCT1BVUyxcbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVNcDRWaWRlbyhvcHRzOiBTaW5rT3B0aW9ucywgbXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTxWaWRlb1NldHVwPiB7XG4gIGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgZnBzLCBkaXNhYmxlSHdDb2RlYywgc2hhcmVkSHcgfSA9IG9wdHM7XG4gIHJldHVybiBjcmVhdGVId1ZpZGVvRW5jb2Rlcih7IHdpZHRoLCBoZWlnaHQsIGZwcywgZGlzYWJsZUh3Q29kZWMsIHNoYXJlZEh3IH0sIG11eGVyKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVdlYm1WaWRlbyhvcHRzOiBTaW5rT3B0aW9ucywgbXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTxWaWRlb1NldHVwPiB7XG4gIGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgZnBzIH0gPSBvcHRzO1xuICBjb25zdCB2aWRlbyA9IGF3YWl0IFZpZGVvRW5jb2Rlci5jcmVhdGUoe1xuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICBmcHMsXG4gICAgY29kZWNOYW1lOiBGRl9FTkNPREVSX0xJQlZQWF9WUDksXG4gICAgY29kZWNPcHRzOiBXRUJNX1ZQOV9PUFRTLFxuICAgIGJpdHJhdGU6IDRfMDAwXzAwMCxcbiAgICBwaXhlbEZvcm1hdDogQVZfUElYX0ZNVF9ZVVZBNDIwUCxcbiAgICBtdXhlcixcbiAgfSk7XG4gIHJldHVybiB7XG4gICAgdmlkZW8sXG4gICAgY29kZWM6IGF3YWl0IENvZGVjU3RhdGUuY3JlYXRlKHdpZHRoLCBoZWlnaHQpLFxuICAgIG93bnNIdzogZmFsc2UsXG4gIH07XG59XG5cbi8vIE9wdXMgcmVqZWN0cyA0NC4xay5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVBdWRpbyhraW5kOiBTaW5rS2luZCwgbXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTxBdWRpb0VuY29kZXI+IHtcbiAgY29uc3QgY2ZnID0ga2luZCA9PT0gXCJtcDRcIiA/IE1QNF9BVURJTyA6IFdFQk1fQVVESU87XG4gIHJldHVybiBBdWRpb0VuY29kZXIuY3JlYXRlKHtcbiAgICAuLi5jZmcsXG4gICAgZ2xvYmFsSGVhZGVyOiB0cnVlLFxuICAgIGJpdHJhdGU6IDEyOF8wMDAsXG4gICAgbXV4ZXIsXG4gIH0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlSHdWaWRlb0VuY29kZXIob3B0czogSHdWaWRlb0ZhY3RvcnlPcHRpb25zLCBtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPFZpZGVvU2V0dXA+IHtcbiAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0LCBmcHMsIGJpdHJhdGUgPSA4XzAwMF8wMDAsIGRpc2FibGVId0NvZGVjID0gZmFsc2UsIHNoYXJlZEh3IH0gPSBvcHRzO1xuICBjb25zdCBodyA9IHNoYXJlZEh3ID8/IChkaXNhYmxlSHdDb2RlYyA/IHVuZGVmaW5lZCA6IChIYXJkd2FyZUNvbnRleHQuYXV0bygpID8/IHVuZGVmaW5lZCkpO1xuICBjb25zdCBvd25zSHcgPSAhc2hhcmVkSHcgJiYgISFodztcblxuICB0cnkge1xuICAgIGlmIChodz8uZGV2aWNlVHlwZU5hbWUgPT09IEZGX0hXREVWSUNFX1RZUEVfVklERU9UT09MQk9YICYmIGh3LmdldEVuY29kZXJDb2RlYyhcImhldmNcIikpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhUQUcsIFwidXNpbmcgVmlkZW9Ub29sYm94IEhFVkMgYWxwaGEgZW5jb2RlclwiKTtcbiAgICAgIGNvbnN0IGh3VmlkZW8gPSBhd2FpdCBWaWRlb1Rvb2xib3hFbmNvZGVyLmNyZWF0ZSh7IHdpZHRoLCBoZWlnaHQsIGZwcywgaHcsIGJpdHJhdGUsIG11eGVyIH0pO1xuICAgICAgcmV0dXJuIHsgaHdWaWRlbywgaHcsIG93bnNIdyB9O1xuICAgIH1cbiAgICBpZiAoaHc/LmRldmljZVR5cGVOYW1lID09PSBGRl9IV0RFVklDRV9UWVBFX0NVREEgJiYgaHcuZ2V0RW5jb2RlckNvZGVjKFwiaGV2Y1wiKSkge1xuICAgICAgbG9nZ2VyLmRlYnVnKFRBRywgXCJ1c2luZyBOVkVOQyBkdWFsLWxheWVyIEhFVkMgYWxwaGEgZW5jb2RlclwiKTtcbiAgICAgIGNvbnN0IGh3VmlkZW8gPSBhd2FpdCBOdmVuY0R1YWxMYXllckVuY29kZXIuY3JlYXRlKHsgd2lkdGgsIGhlaWdodCwgZnBzLCBodywgYml0cmF0ZSwgbXV4ZXIgfSk7XG4gICAgICByZXR1cm4geyBod1ZpZGVvLCBodywgb3duc0h3IH07XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgbG9nZ2VyLndhcm4oVEFHLCBcIkhhcmR3YXJlIGNvZGVjIHNlc3Npb24gbGltaXRzIHJlYWNoZWQsIHVzZSBzb2Z0d2FyZSBlbmNvZGVyXCIsIGUpO1xuICAgIGlmIChvd25zSHcpIHtcbiAgICAgIGh3Py5kaXNwb3NlKCk7XG4gICAgfVxuICB9XG5cbiAgbG9nZ2VyLmRlYnVnKFRBRywgXCJ1c2luZyBzb2Z0d2FyZSBsaWJ4MjY1IEhFVkMgYWxwaGEgZW5jb2RlclwiKTtcbiAgLy8gUGFydGlhbC1jb25zdHJ1Y3Rpb24gc2FmZXR5OiBmcmVlIHRoZSB2aWRlbyBlbmNvZGVyIGlmIENvZGVjU3RhdGUuY3JlYXRlIHRocm93czsgbW92ZSgpIGRpc293bnMgb24gc3VjY2Vzcy5cbiAgdXNpbmcgc3RhY2sgPSBuZXcgRGlzcG9zYWJsZVN0YWNrKCk7XG4gIGNvbnN0IHZpZGVvID0gc3RhY2sudXNlKFxuICAgIGF3YWl0IFZpZGVvRW5jb2Rlci5jcmVhdGUoe1xuICAgICAgd2lkdGgsXG4gICAgICBoZWlnaHQsXG4gICAgICBmcHMsXG4gICAgICBjb2RlY05hbWU6IEZGX0VOQ09ERVJfTElCWDI2NSxcbiAgICAgIGNvZGVjVGFnOiBcImh2YzFcIixcbiAgICAgIGNvZGVjT3B0czogeyBwcmVzZXQ6IFwiZmFzdFwiLCBcIngyNjUtcGFyYW1zXCI6IFwibG9nLWxldmVsPTE6YmZyYW1lcz0zOnBvb2xzPSs6ZnJhbWUtdGhyZWFkcz0wXCIgfSxcbiAgICAgIGJpdHJhdGUsXG4gICAgICBwaXhlbEZvcm1hdDogQVZfUElYX0ZNVF9ZVVZBNDIwUCxcbiAgICAgIG11eGVyLFxuICAgIH0pLFxuICApO1xuICBjb25zdCBjb2RlYyA9IHN0YWNrLnVzZShhd2FpdCBDb2RlY1N0YXRlLmNyZWF0ZSh3aWR0aCwgaGVpZ2h0KSk7XG4gIHN0YWNrLm1vdmUoKTtcbiAgcmV0dXJuIHsgdmlkZW8sIGNvZGVjLCBvd25zSHc6IGZhbHNlIH07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAzLzIxLlxuXG5pbXBvcnQgeyB0eXBlIENvZGVjQ29udGV4dCwgRGljdGlvbmFyeSwgRkZtcGVnRXJyb3IsIEZvcm1hdENvbnRleHQsIHR5cGUgUGFja2V0LCB0eXBlIFN0cmVhbSB9IGZyb20gXCJub2RlLWF2XCI7XG5cbmV4cG9ydCBjbGFzcyBGb3JtYXRNdXhlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2N0eDogRm9ybWF0Q29udGV4dDtcbiAgcHJpdmF0ZSBfb3BlbmVkID0gZmFsc2U7XG4gIHByaXZhdGUgX2Rpc3Bvc2VkID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3Iob3V0UGF0aDogc3RyaW5nLCBmb3JtYXROYW1lPzogc3RyaW5nKSB7XG4gICAgdGhpcy5fY3R4ID0gbmV3IEZvcm1hdENvbnRleHQoKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IodGhpcy5fY3R4LmFsbG9jT3V0cHV0Q29udGV4dDIobnVsbCwgZm9ybWF0TmFtZSA/PyBudWxsLCBvdXRQYXRoKSwgXCJhbGxvY091dHB1dENvbnRleHQyXCIpO1xuICB9XG5cbiAgYWRkU3RyZWFtKGNvZGVjQ3R4OiBDb2RlY0NvbnRleHQsIGNvZGVjVGFnPzogc3RyaW5nKTogU3RyZWFtIHtcbiAgICBjb25zdCBzdHJlYW0gPSB0aGlzLl9jdHgubmV3U3RyZWFtKG51bGwpO1xuICAgIHN0cmVhbS50aW1lQmFzZSA9IGNvZGVjQ3R4LnRpbWVCYXNlO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihzdHJlYW0uY29kZWNwYXIuZnJvbUNvbnRleHQoY29kZWNDdHgpLCBcImNvZGVjcGFyLmZyb21Db250ZXh0XCIpO1xuICAgIGlmIChjb2RlY1RhZykge1xuICAgICAgc3RyZWFtLmNvZGVjcGFyLmNvZGVjVGFnID0gY29kZWNUYWc7XG4gICAgfVxuICAgIHJldHVybiBzdHJlYW07XG4gIH1cblxuICBhc3luYyBvcGVuKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9vcGVuZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IHRoaXMuX2N0eC5vcGVuT3V0cHV0KCksIFwib3Blbk91dHB1dFwiKTtcbiAgICAvLyArZmFzdHN0YXJ0IHJlbG9jYXRlcyBtb292IHRvIGZpbGUgZnJvbnQgb24gd3JpdGVUcmFpbGVyIHNvIHBsYXllcnMgY2FuIGJlZ2luIHBsYXliYWNrIGJlZm9yZSBmdWxsIGRvd25sb2FkLlxuICAgIHVzaW5nIG9wdHMgPSBEaWN0aW9uYXJ5LmZyb21PYmplY3QoeyBtb3ZmbGFnczogXCIrZmFzdHN0YXJ0XCIgfSk7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IHRoaXMuX2N0eC53cml0ZUhlYWRlcihvcHRzKSwgXCJ3cml0ZUhlYWRlclwiKTtcbiAgICB0aGlzLl9vcGVuZWQgPSB0cnVlO1xuICB9XG5cbiAgYXN5bmMgd3JpdGVQYWNrZXQocGt0OiBQYWNrZXQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgdGhpcy5fY3R4LmludGVybGVhdmVkV3JpdGVGcmFtZShwa3QpLCBcImludGVybGVhdmVkV3JpdGVGcmFtZVwiKTtcbiAgfVxuXG4gIGFzeW5jIFtTeW1ib2wuYXN5bmNEaXNwb3NlXSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fZGlzcG9zZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fZGlzcG9zZWQgPSB0cnVlO1xuICAgIHRyeSB7XG4gICAgICBpZiAodGhpcy5fb3BlbmVkKSB7XG4gICAgICAgIHRoaXMuX29wZW5lZCA9IGZhbHNlO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IHRoaXMuX2N0eC53cml0ZVRyYWlsZXIoKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAvLyBBIGZhaWxlZC90cnVuY2F0ZWQgdHJhaWxlciB3cml0ZSBtdXN0IG5vdCBsZWFrIHRoZSBGRC5cbiAgICAgICAgICBhd2FpdCB0aGlzLl9jdHguY2xvc2VPdXRwdXQoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICAvLyBBbHdheXMgZnJlZSB0aGUgbmF0aXZlIGNvbnRleHQg4oCUIGV2ZW4gYSBuZXZlci1vcGVuZWQgbXV4ZXIgYWxsb2NhdGVkIG9uZSBpbiB0aGUgY29uc3RydWN0b3IuXG4gICAgICBhd2FpdCB0aGlzLl9jdHhbU3ltYm9sLmFzeW5jRGlzcG9zZV0oKTtcbiAgICB9XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMjQuXG5cbmltcG9ydCB7IG9rIH0gZnJvbSBcIm5vZGU6YXNzZXJ0XCI7XG5pbXBvcnQgeyBGRm1wZWdFcnJvciwgdHlwZSBGcmFtZSB9IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQgdHlwZSB7IEhhcmR3YXJlQ29udGV4dCB9IGZyb20gXCJub2RlLWF2L2FwaVwiO1xuaW1wb3J0IHR5cGUgeyBBdWRpb0VuY29kZXIgfSBmcm9tIFwiLi9hdWRpb1wiO1xuaW1wb3J0IHR5cGUgeyBDb2RlY1N0YXRlIH0gZnJvbSBcIi4vY29kZWNcIjtcbmltcG9ydCB7IGNyZWF0ZUF1ZGlvLCBjcmVhdGVNcDRWaWRlbywgY3JlYXRlV2VibVZpZGVvLCB0eXBlIEh3RW5jb2RlciB9IGZyb20gXCIuL2ZhY3RvcnlcIjtcbmltcG9ydCB7IEZvcm1hdE11eGVyIH0gZnJvbSBcIi4vbXV4ZXJcIjtcbmltcG9ydCB0eXBlIHsgVmlkZW9FbmNvZGVyIH0gZnJvbSBcIi4vdmlkZW9cIjtcblxuZXhwb3J0IHR5cGUgU2lua0tpbmQgPSBcIm1wNFwiIHwgXCJ3ZWJtXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2lua09wdGlvbnMge1xuICBvdXRGaWxlOiBzdHJpbmc7XG4gIGtpbmQ6IFNpbmtLaW5kO1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgZnBzOiBudW1iZXI7XG4gIHdpdGhBdWRpbzogYm9vbGVhbjtcbiAgZGlzYWJsZUh3Q29kZWM6IGJvb2xlYW47XG4gIHNoYXJlZEh3PzogSGFyZHdhcmVDb250ZXh0O1xufVxuXG5pbnRlcmZhY2UgU2lua1N0YXRlIHtcbiAgbXV4ZXI6IEZvcm1hdE11eGVyO1xuICB2aWRlbz86IFZpZGVvRW5jb2RlcjtcbiAgaHdWaWRlbz86IEh3RW5jb2RlcjtcbiAgYXVkaW8/OiBBdWRpb0VuY29kZXI7XG4gIGNvZGVjPzogQ29kZWNTdGF0ZTtcbiAgb3duc0h3OiBib29sZWFuO1xuICBodz86IEhhcmR3YXJlQ29udGV4dDtcbiAgb3B0czogU2lua09wdGlvbnM7XG59XG5cbmV4cG9ydCBjbGFzcyBPdXRwdXRTaW5rIGltcGxlbWVudHMgQXN5bmNEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSBfczogU2lua1N0YXRlO1xuICBwcml2YXRlIF9kaXNwb3NlZCA9IGZhbHNlO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoczogU2lua1N0YXRlKSB7XG4gICAgdGhpcy5fcyA9IHM7XG4gIH1cblxuICBzdGF0aWMga2luZEZyb21QYXRoKHBhdGg6IHN0cmluZyk6IFNpbmtLaW5kIHtcbiAgICBjb25zdCBsb3dlciA9IHBhdGgudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAobG93ZXIuZW5kc1dpdGgoXCIud2VibVwiKSkge1xuICAgICAgcmV0dXJuIFwid2VibVwiO1xuICAgIH1cbiAgICBpZiAobG93ZXIuZW5kc1dpdGgoXCIubXA0XCIpIHx8IGxvd2VyLmVuZHNXaXRoKFwiLm1vdlwiKSkge1xuICAgICAgcmV0dXJuIFwibXA0XCI7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgb3V0cHV0IGV4dGVuc2lvbjogJHtwYXRofWApO1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIGNyZWF0ZShvcHRzOiBTaW5rT3B0aW9ucyk6IFByb21pc2U8T3V0cHV0U2luaz4ge1xuICAgIC8vIFBhcnRpYWwtY29uc3RydWN0aW9uIHNhZmV0eTogZGlzcG9zZSBtdXhlci9lbmNvZGVycyBpZiBhIGxhdGVyIHN0ZXAgdGhyb3dzOyBtb3ZlKCkgZGlzb3ducyBvbiBzdWNjZXNzLlxuICAgIGF3YWl0IHVzaW5nIHN0YWNrID0gbmV3IEFzeW5jRGlzcG9zYWJsZVN0YWNrKCk7XG4gICAgY29uc3QgbXV4ZXIgPSBzdGFjay51c2UobmV3IEZvcm1hdE11eGVyKG9wdHMub3V0RmlsZSkpO1xuICAgIGNvbnN0IHNldHVwID0gb3B0cy5raW5kID09PSBcIm1wNFwiID8gYXdhaXQgY3JlYXRlTXA0VmlkZW8ob3B0cywgbXV4ZXIpIDogYXdhaXQgY3JlYXRlV2VibVZpZGVvKG9wdHMsIG11eGVyKTtcbiAgICBpZiAoc2V0dXAudmlkZW8pIHtcbiAgICAgIHN0YWNrLnVzZShzZXR1cC52aWRlbyk7XG4gICAgfVxuICAgIGlmIChzZXR1cC5od1ZpZGVvKSB7XG4gICAgICBzdGFjay51c2Uoc2V0dXAuaHdWaWRlbyk7XG4gICAgfVxuICAgIGlmIChzZXR1cC5jb2RlYykge1xuICAgICAgc3RhY2sudXNlKHNldHVwLmNvZGVjKTtcbiAgICB9XG4gICAgLy8gT25seSBhIHNpbmstb3duZWQgaHcgZGV2aWNlIGlzIG91cnMgdG8gZnJlZSBoZXJlOyBhIHNoYXJlZCBkZXZpY2UgYmVsb25ncyB0byB0aGUgcGlwZWxpbmUuXG4gICAgaWYgKHNldHVwLm93bnNIdyAmJiBzZXR1cC5odykge1xuICAgICAgc3RhY2sudXNlKHNldHVwLmh3KTtcbiAgICB9XG4gICAgY29uc3QgYXVkaW8gPSBvcHRzLndpdGhBdWRpbyA/IGF3YWl0IGNyZWF0ZUF1ZGlvKG9wdHMua2luZCwgbXV4ZXIpIDogdW5kZWZpbmVkO1xuICAgIGlmIChhdWRpbykge1xuICAgICAgc3RhY2sudXNlKGF1ZGlvKTtcbiAgICB9XG4gICAgYXdhaXQgbXV4ZXIub3BlbigpO1xuICAgIHN0YWNrLm1vdmUoKTtcbiAgICByZXR1cm4gbmV3IE91dHB1dFNpbmsoeyBtdXhlciwgLi4uc2V0dXAsIGF1ZGlvLCBvcHRzIH0pO1xuICB9XG5cbiAgc2V0SW5wdXRSYXRlKHNhbXBsZVJhdGU6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuX3MuYXVkaW8/LnNldElucHV0UmF0ZShzYW1wbGVSYXRlKTtcbiAgfVxuXG4gIGFzeW5jIGVuY29kZUJHUkEoYmdyYUZyYW1lOiBGcmFtZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgaHdWaWRlbywgbXV4ZXIgfSA9IHRoaXMuX3M7XG4gICAgaWYgKGh3VmlkZW8pIHtcbiAgICAgIHJldHVybiBod1ZpZGVvLmVuY29kZShiZ3JhRnJhbWUsIG11eGVyKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuc3dFbmNvZGUoYmdyYUZyYW1lKTtcbiAgfVxuXG4gIGFzeW5jIGVuY29kZURlY29kZWRGcmFtZShzcmM6IEZyYW1lKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyBod1ZpZGVvLCBtdXhlciB9ID0gdGhpcy5fcztcbiAgICBpZiAoaHdWaWRlbykge1xuICAgICAgcmV0dXJuIGh3VmlkZW8uZW5jb2RlKHNyYywgbXV4ZXIpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zd0VuY29kZShzcmMpO1xuICB9XG5cbiAgYXN5bmMgZW5jb2RlQXVkaW8ocGNtOiBCdWZmZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLl9zLmF1ZGlvPy5lbmNvZGUocGNtLCB0aGlzLl9zLm11eGVyKTtcbiAgfVxuXG4gIGFzeW5jIGZsdXNoKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgaHdWaWRlbywgdmlkZW8sIGF1ZGlvLCBtdXhlciB9ID0gdGhpcy5fcztcbiAgICBhd2FpdCBhdWRpbz8uZmx1c2gobXV4ZXIpO1xuICAgIGlmIChod1ZpZGVvKSB7XG4gICAgICBhd2FpdCBod1ZpZGVvLmZsdXNoKG11eGVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXdhaXQgdmlkZW8hLmZsdXNoKG11eGVyKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBbU3ltYm9sLmFzeW5jRGlzcG9zZV0oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX2Rpc3Bvc2VkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX2Rpc3Bvc2VkID0gdHJ1ZTtcbiAgICBjb25zdCB7IG11eGVyLCB2aWRlbywgaHdWaWRlbywgYXVkaW8sIGNvZGVjLCBodywgb3duc0h3IH0gPSB0aGlzLl9zO1xuICAgIHZpZGVvPy5bU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgaHdWaWRlbz8uW1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgIGF1ZGlvPy5bU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgY29kZWM/LltTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICBhd2FpdCBtdXhlcltTeW1ib2wuYXN5bmNEaXNwb3NlXSgpO1xuICAgIGlmIChvd25zSHcpIHtcbiAgICAgIGh3Py5kaXNwb3NlKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzd0VuY29kZShzcmM6IEZyYW1lKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyB2aWRlbywgY29kZWMsIG11eGVyIH0gPSB0aGlzLl9zO1xuICAgIG9rKGNvZGVjPy5zd3MsIFwic3dzIG5vdCBpbml0aWFsaXplZFwiKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoY29kZWMuZHN0Lm1ha2VXcml0YWJsZSgpLCBcInNpbmtEc3QubWFrZVdyaXRhYmxlXCIpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCBjb2RlYy5zd3Muc2NhbGVGcmFtZShjb2RlYy5kc3QsIHNyYyksIFwic2lua1N3cy5zY2FsZUZyYW1lXCIpO1xuICAgIGF3YWl0IHZpZGVvIS5lbmNvZGUoY29kZWMuZHN0LCBtdXhlcik7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMDEuXG5cbmltcG9ydCB7IEZGbXBlZ0Vycm9yLCB0eXBlIEZyYW1lIH0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB7IEhhcmR3YXJlQ29udGV4dCB9IGZyb20gXCJub2RlLWF2L2FwaVwiO1xuaW1wb3J0IHsgQVZfUElYX0ZNVF9CR1JBLCBGRl9IV0RFVklDRV9UWVBFX0NVREEsIEZGX0hXREVWSUNFX1RZUEVfVklERU9UT09MQk9YIH0gZnJvbSBcIm5vZGUtYXYvY29uc3RhbnRzXCI7XG5cbmltcG9ydCB7IENvbmN1cnJlbmN5TGltaXRlciB9IGZyb20gXCIuLi9saW1pdGVyXCI7XG5pbXBvcnQgeyB3aXRoVGltZW91dCB9IGZyb20gXCIuLi90aW1pbmdcIjtcbmltcG9ydCB7IENvZGVjU3RhdGUgfSBmcm9tIFwiLi9jb2RlY1wiO1xuaW1wb3J0IHsgbWFrZUZyYW1lIH0gZnJvbSBcIi4vbWlzY1wiO1xuaW1wb3J0IHsgT3V0cHV0U2luayB9IGZyb20gXCIuL3NpbmtcIjtcblxuY29uc3QgRFJBSU5fVElNRU9VVF9NUyA9IDVfMDAwO1xuLy8gTm9ybWFsIGZyYW1lL2F1ZGlvIGVuY29kZSBsYW5kcyBpbiB0ZW5zIG9mIG1zOyB0aGUgYm91bmQgb25seSBiaXRlcyBhIHdlZGdlZCBuYXRpdmUgZW5jb2RlLlxuY29uc3QgRU5DT0RFX1RJTUVPVVRfTVMgPSAzXzAwMDtcblxuZXhwb3J0IGludGVyZmFjZSBFbmNvZGVyUGlwZWxpbmVPcHRpb25zIHtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIGZwczogbnVtYmVyO1xuICBvdXRGaWxlczogc3RyaW5nW107XG4gIHdpdGhBdWRpbz86IGJvb2xlYW47XG4gIGRpc2FibGVId0NvZGVjPzogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIFBpcGVsaW5lU3RhdGUge1xuICBzaW5rczogT3V0cHV0U2lua1tdO1xuICBzaGFyZWRIdz86IEhhcmR3YXJlQ29udGV4dDtcbiAgbGltaXRlcjogQ29uY3VycmVuY3lMaW1pdGVyO1xuICBwbmdDb2RlYz86IENvZGVjU3RhdGU7XG4gIG91dEZpbGVzOiBzdHJpbmdbXTtcbiAgb3B0czogRW5jb2RlclBpcGVsaW5lT3B0aW9ucztcbn1cblxuZXhwb3J0IGNsYXNzIEVuY29kZXJQaXBlbGluZSB7XG4gIHByaXZhdGUgX3M6IFBpcGVsaW5lU3RhdGU7XG4gIHByaXZhdGUgX2Rpc3Bvc2VkID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihzOiBQaXBlbGluZVN0YXRlKSB7XG4gICAgdGhpcy5fcyA9IHM7XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgY3JlYXRlKG9wdHM6IEVuY29kZXJQaXBlbGluZU9wdGlvbnMpOiBQcm9taXNlPEVuY29kZXJQaXBlbGluZT4ge1xuICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgZnBzLCBvdXRGaWxlcywgd2l0aEF1ZGlvID0gZmFsc2UsIGRpc2FibGVId0NvZGVjID0gZmFsc2UgfSA9IG9wdHM7XG4gICAgaWYgKG91dEZpbGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwib3V0RmlsZXMgbXVzdCBjb250YWluIGF0IGxlYXN0IG9uZSBwYXRoXCIpO1xuICAgIH1cblxuICAgIGNvbnN0IGtpbmRzID0gb3V0RmlsZXMubWFwKChwKSA9PiBPdXRwdXRTaW5rLmtpbmRGcm9tUGF0aChwKSk7XG4gICAgY29uc3QgbmVlZHNNcDRIdyA9ICFkaXNhYmxlSHdDb2RlYyAmJiBraW5kcy5pbmNsdWRlcyhcIm1wNFwiKTtcbiAgICAvLyBQYXJ0aWFsLWNvbnN0cnVjdGlvbiBzYWZldHk6IGRpc3Bvc2Ugc2hhcmVkSHcgKyBhbnkgc2lua3MgYWxyZWFkeSBidWlsdCBpZiBhIGxhdGVyIHNpbmsgdGhyb3dzOyBtb3ZlKCkgZGlzb3ducyBvbiBzdWNjZXNzLlxuICAgIGF3YWl0IHVzaW5nIHN0YWNrID0gbmV3IEFzeW5jRGlzcG9zYWJsZVN0YWNrKCk7XG4gICAgY29uc3Qgc2hhcmVkSHcgPSBuZWVkc01wNEh3ID8gKEhhcmR3YXJlQ29udGV4dC5hdXRvKCkgPz8gdW5kZWZpbmVkKSA6IHVuZGVmaW5lZDtcbiAgICBpZiAoc2hhcmVkSHcpIHtcbiAgICAgIHN0YWNrLnVzZShzaGFyZWRIdyk7XG4gICAgfVxuICAgIGNvbnN0IGlzSHdBbHBoYUNhcGFibGUgPVxuICAgICAgc2hhcmVkSHc/LmRldmljZVR5cGVOYW1lID09PSBGRl9IV0RFVklDRV9UWVBFX1ZJREVPVE9PTEJPWCB8fCBzaGFyZWRIdz8uZGV2aWNlVHlwZU5hbWUgPT09IEZGX0hXREVWSUNFX1RZUEVfQ1VEQTtcblxuICAgIGNvbnN0IHNpbmtzOiBPdXRwdXRTaW5rW10gPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG91dEZpbGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBzaW5rID0gYXdhaXQgT3V0cHV0U2luay5jcmVhdGUoe1xuICAgICAgICBvdXRGaWxlOiBvdXRGaWxlc1tpXSEsXG4gICAgICAgIGtpbmQ6IGtpbmRzW2ldISxcbiAgICAgICAgd2lkdGgsXG4gICAgICAgIGhlaWdodCxcbiAgICAgICAgZnBzLFxuICAgICAgICB3aXRoQXVkaW8sXG4gICAgICAgIGRpc2FibGVId0NvZGVjLFxuICAgICAgICBzaGFyZWRIdzoga2luZHNbaV0gPT09IFwibXA0XCIgJiYgaXNId0FscGhhQ2FwYWJsZSA/IHNoYXJlZEh3IDogdW5kZWZpbmVkLFxuICAgICAgfSk7XG4gICAgICBzdGFjay51c2Uoc2luayk7XG4gICAgICBzaW5rcy5wdXNoKHNpbmspO1xuICAgIH1cblxuICAgIHN0YWNrLm1vdmUoKTtcbiAgICByZXR1cm4gbmV3IEVuY29kZXJQaXBlbGluZSh7XG4gICAgICBzaW5rcyxcbiAgICAgIHNoYXJlZEh3LFxuICAgICAgbGltaXRlcjogbmV3IENvbmN1cnJlbmN5TGltaXRlcigxKSxcbiAgICAgIG91dEZpbGVzLFxuICAgICAgb3B0cyxcbiAgICB9KTtcbiAgfVxuXG4gIHNldHVwQXVkaW8oc2FtcGxlUmF0ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBzaW5rIG9mIHRoaXMuX3Muc2lua3MpIHtcbiAgICAgIHNpbmsuc2V0SW5wdXRSYXRlKHNhbXBsZVJhdGUpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGVuY29kZUJHUkEoaW5wdXQ6IEJ1ZmZlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuZW5xdWV1ZShcImVuY29kZUJHUkFcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgdXNpbmcgZnJhbWUgPSB0aGlzLmJncmFGcmFtZShpbnB1dCk7XG4gICAgICBhd2FpdCBQcm9taXNlLmFsbCh0aGlzLl9zLnNpbmtzLm1hcCgoc2luaykgPT4gc2luay5lbmNvZGVCR1JBKGZyYW1lKSkpO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZW5jb2RlUE5HKHBuZ0RhdGE6IEJ1ZmZlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuZW5xdWV1ZShcImVuY29kZVBOR1wiLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IHRoaXMuX3Mub3B0cztcbiAgICAgIHRoaXMuX3MucG5nQ29kZWMgPz89IGF3YWl0IENvZGVjU3RhdGUuY3JlYXRlKHdpZHRoLCBoZWlnaHQpO1xuICAgICAgY29uc3Qgc3JjID0gYXdhaXQgdGhpcy5fcy5wbmdDb2RlYy5kZWNvZGVQTkcocG5nRGF0YSk7XG4gICAgICBmb3IgKGNvbnN0IHNpbmsgb2YgdGhpcy5fcy5zaW5rcykge1xuICAgICAgICBhd2FpdCBzaW5rLmVuY29kZURlY29kZWRGcmFtZShzcmMpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZW5jb2RlQXVkaW8ocGNtOiBCdWZmZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLmVucXVldWUoXCJlbmNvZGVBdWRpb1wiLCBhc3luYyAoKSA9PiB7XG4gICAgICBmb3IgKGNvbnN0IHNpbmsgb2YgdGhpcy5fcy5zaW5rcykge1xuICAgICAgICBhd2FpdCBzaW5rLmVuY29kZUF1ZGlvKHBjbSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGVucXVldWUobGFiZWw6IHN0cmluZywgZm46ICgpID0+IFByb21pc2U8dm9pZD4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gd2l0aFRpbWVvdXQodGhpcy5fcy5saW1pdGVyLnNjaGVkdWxlKGZuKSwgRU5DT0RFX1RJTUVPVVRfTVMsIGxhYmVsKTtcbiAgfVxuXG4gIGFzeW5jIGZpbmlzaCgpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHdpdGhUaW1lb3V0KFxuICAgICAgICB0aGlzLl9zLmxpbWl0ZXIuZHJhaW4oKSxcbiAgICAgICAgRFJBSU5fVElNRU9VVF9NUyxcbiAgICAgICAgXCJlbmNvZGVyIGRyYWluIChvdXRwdXRzIGluY29tcGxldGUg4oCUIG5hdGl2ZSBlbmNvZGUgd2VkZ2VkKVwiLFxuICAgICAgKTtcbiAgICAgIGZvciAoY29uc3Qgc2luayBvZiB0aGlzLl9zLnNpbmtzKSB7XG4gICAgICAgIGF3YWl0IHNpbmsuZmx1c2goKTtcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgYXdhaXQgdGhpcy5mcmVlKCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9zLm91dEZpbGVzO1xuICB9XG5cbiAgYXN5bmMgW1N5bWJvbC5hc3luY0Rpc3Bvc2VdKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9kaXNwb3NlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBhd2FpdCB3aXRoVGltZW91dChcbiAgICAgIHRoaXMuX3MubGltaXRlci5kcmFpbigpLFxuICAgICAgRFJBSU5fVElNRU9VVF9NUyxcbiAgICAgIFwiZW5jb2RlciBkcmFpbiAob3V0cHV0cyBpbmNvbXBsZXRlIOKAlCBuYXRpdmUgZW5jb2RlIHdlZGdlZClcIixcbiAgICApO1xuICAgIGF3YWl0IHRoaXMuZnJlZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBmcmVlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9kaXNwb3NlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9kaXNwb3NlZCA9IHRydWU7XG4gICAgZm9yIChjb25zdCBzaW5rIG9mIHRoaXMuX3Muc2lua3MpIHtcbiAgICAgIGF3YWl0IHNpbmtbU3ltYm9sLmFzeW5jRGlzcG9zZV0oKTtcbiAgICB9XG4gICAgdGhpcy5fcy5wbmdDb2RlYz8uW1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgIHRoaXMuX3Muc2hhcmVkSHc/LmRpc3Bvc2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgYmdyYUZyYW1lKGlucHV0OiBCdWZmZXIpOiBGcmFtZSB7XG4gICAgLy8gUGFydGlhbC1jb25zdHJ1Y3Rpb24gc2FmZXR5OiBmcmVlIGZyYW1lIGlmIGZyb21CdWZmZXIgdGhyb3dzIGJlZm9yZSB3ZSByZXR1cm4gaXQuXG4gICAgdXNpbmcgc3RhY2sgPSBuZXcgRGlzcG9zYWJsZVN0YWNrKCk7XG4gICAgY29uc3QgZnJhbWUgPSBzdGFjay51c2UobWFrZUZyYW1lKHRoaXMuX3Mub3B0cy53aWR0aCwgdGhpcy5fcy5vcHRzLmhlaWdodCwgQVZfUElYX0ZNVF9CR1JBKSk7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGZyYW1lLmZyb21CdWZmZXIoaW5wdXQpLCBcImJncmFGcmFtZS5mcm9tQnVmZmVyXCIpO1xuICAgIHN0YWNrLm1vdmUoKTtcbiAgICByZXR1cm4gZnJhbWU7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDYuXG5cbmltcG9ydCB0eXBlIHsgTmF0aXZlSW1hZ2UsIFNpemUgfSBmcm9tIFwiZWxlY3Ryb25cIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzRW1wdHkoaW1hZ2U6IE5hdGl2ZUltYWdlKSB7XG4gIGNvbnN0IHNpemUgPSBpbWFnZS5nZXRTaXplKCk7XG4gIGlmIChzaXplLndpZHRoID09PSAwIHx8IHNpemUuaGVpZ2h0ID09PSAwKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGltYWdlLmlzRW1wdHkoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNpemVFcXVhbHMoYTogU2l6ZSwgYjogU2l6ZSkge1xuICByZXR1cm4gYS53aWR0aCA9PT0gYi53aWR0aCAmJiBhLmhlaWdodCA9PT0gYi5oZWlnaHQ7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA3LzAzLlxuXG5jb25zdCBHUklEID0gMzI7IC8vIHJlc29sdXRpb24taW5kZXBlbmRlbnQgbGF0dGljZSBmb3IgdGhlIG1vZGFsLWNvbG9yIHByZS1wYXNzXG5jb25zdCBTVFJJREUgPSA0OyAvLyBtYWluLXNjYW4gc3RlcDsgcm93LXN0YWdnZXJlZCBzbyBhbnkg4omlMXB4IHN0cnVjdHVyZSBsYW5kcyBvbiBhIHNhbXBsZSB3aXRoaW4gNCByb3dzXG5jb25zdCBDT05URU5UX0RFTFRBID0gODsgLy8gbWF4IHBlci1jaGFubmVsIGRpc3RhbmNlICgwLTI1NSkgc3RpbGwgY291bnRlZCBhcyB0aGUgZG9taW5hbnQgY29sb3JcbmNvbnN0IE1JTl9DT05URU5UX1NBTVBMRVMgPSAxNjsgLy8gcmVuZGVyZWQgZnJhbWVzIGFyZSBub2lzZS1mcmVlLCBzbyBhIGhhbmRmdWwgb2Ygb2ZmLWRvbWluYW50IHNhbXBsZXMgaXMgcmVhbCBjb250ZW50XG5leHBvcnQgY29uc3QgQkxBTktfV0FSTl9SQVRJTyA9IDAuNTsgLy8gYmxhbmstZnJhbWUgZnJhY3Rpb24gYWJvdmUgdGhpcyB3YXJucyBhdCByZW5kZXIgZW5kXG5cbi8vIDUgYml0cyBwZXIgY2hhbm5lbCwgYWxwaGEgaW5jbHVkZWQg4oCUIHRyYW5zcGFyZW50IHN1cmZhY2VzIGNhcnJ5IGNvbnRlbnQgaW4gY292ZXJhZ2UsIG5vdCBjb2xvci5cbmZ1bmN0aW9uIHF1YW50aXplKGJncmE6IEJ1ZmZlciwgaTogbnVtYmVyKTogbnVtYmVyIHtcbiAgcmV0dXJuIChcbiAgICAoYmdyYS5yZWFkVUludDgoaSkgPj4gMykgfFxuICAgICgoYmdyYS5yZWFkVUludDgoaSArIDEpID4+IDMpIDw8IDUpIHxcbiAgICAoKGJncmEucmVhZFVJbnQ4KGkgKyAyKSA+PiAzKSA8PCAxMCkgfFxuICAgICgoYmdyYS5yZWFkVUludDgoaSArIDMpID4+IDMpIDw8IDE1KVxuICApO1xufVxuXG4vLyBCeXRlIG9mZnNldCBvZiBhIHBpeGVsIGNhcnJ5aW5nIHRoZSBmcmFtZSdzIGRvbWluYW50IGNvbG9yIChtb2RlIG92ZXIgYSBzcGFyc2UgbGF0dGljZSkuXG5mdW5jdGlvbiBtb2RhbFBpeGVsKGJncmE6IEJ1ZmZlciwgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpOiBudW1iZXIge1xuICBjb25zdCBzdGVwWCA9IE1hdGgubWF4KDEsIE1hdGguZmxvb3Iod2lkdGggLyBHUklEKSk7XG4gIGNvbnN0IHN0ZXBZID0gTWF0aC5tYXgoMSwgTWF0aC5mbG9vcihoZWlnaHQgLyBHUklEKSk7XG4gIGNvbnN0IGNvdW50cyA9IG5ldyBNYXA8bnVtYmVyLCBudW1iZXI+KCk7XG4gIGNvbnN0IGZpcnN0SWR4ID0gbmV3IE1hcDxudW1iZXIsIG51bWJlcj4oKTtcbiAgbGV0IGJlc3QgPSAwO1xuICBsZXQgYmVzdENvdW50ID0gMDtcbiAgZm9yIChsZXQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkgKz0gc3RlcFkpIHtcbiAgICBmb3IgKGxldCB4ID0gMDsgeCA8IHdpZHRoOyB4ICs9IHN0ZXBYKSB7XG4gICAgICBjb25zdCBpID0gKHkgKiB3aWR0aCArIHgpICogNDtcbiAgICAgIGNvbnN0IGtleSA9IHF1YW50aXplKGJncmEsIGkpO1xuICAgICAgY29uc3QgY291bnQgPSAoY291bnRzLmdldChrZXkpID8/IDApICsgMTtcbiAgICAgIGNvdW50cy5zZXQoa2V5LCBjb3VudCk7XG4gICAgICBpZiAoIWZpcnN0SWR4LmhhcyhrZXkpKSB7XG4gICAgICAgIGZpcnN0SWR4LnNldChrZXksIGkpO1xuICAgICAgfVxuICAgICAgaWYgKGNvdW50ID4gYmVzdENvdW50KSB7XG4gICAgICAgIGJlc3RDb3VudCA9IGNvdW50O1xuICAgICAgICBiZXN0ID0ga2V5O1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gZmlyc3RJZHguZ2V0KGJlc3QpID8/IDA7XG59XG5cbi8vIEJsYW5rID0gZG9taW5hbnQtY29sb3IgY292ZXJhZ2U6IGZld2VyIHRoYW4gTUlOX0NPTlRFTlRfU0FNUExFUyBzYW1wbGVzIGRldmlhdGUgZnJvbSB0aGUgbW9kYWwgY29sb3IuXG5leHBvcnQgZnVuY3Rpb24gaXNCbGFua0ZyYW1lKGJncmE6IEJ1ZmZlciwgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpOiBib29sZWFuIHtcbiAgY29uc3QgbSA9IG1vZGFsUGl4ZWwoYmdyYSwgd2lkdGgsIGhlaWdodCk7XG4gIGNvbnN0IG1iID0gYmdyYS5yZWFkVUludDgobSk7XG4gIGNvbnN0IG1nID0gYmdyYS5yZWFkVUludDgobSArIDEpO1xuICBjb25zdCBtciA9IGJncmEucmVhZFVJbnQ4KG0gKyAyKTtcbiAgY29uc3QgbWEgPSBiZ3JhLnJlYWRVSW50OChtICsgMyk7XG4gIGxldCBjb250ZW50ID0gMDtcbiAgZm9yIChsZXQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkgKz0gU1RSSURFKSB7XG4gICAgY29uc3Qgb2Zmc2V0ID0gKHkgPj4gMikgJiAoU1RSSURFIC0gMSk7XG4gICAgZm9yIChsZXQgeCA9IG9mZnNldDsgeCA8IHdpZHRoOyB4ICs9IFNUUklERSkge1xuICAgICAgY29uc3QgaSA9ICh5ICogd2lkdGggKyB4KSAqIDQ7XG4gICAgICBpZiAoXG4gICAgICAgIE1hdGguYWJzKGJncmEucmVhZFVJbnQ4KGkpIC0gbWIpID4gQ09OVEVOVF9ERUxUQSB8fFxuICAgICAgICBNYXRoLmFicyhiZ3JhLnJlYWRVSW50OChpICsgMSkgLSBtZykgPiBDT05URU5UX0RFTFRBIHx8XG4gICAgICAgIE1hdGguYWJzKGJncmEucmVhZFVJbnQ4KGkgKyAyKSAtIG1yKSA+IENPTlRFTlRfREVMVEEgfHxcbiAgICAgICAgTWF0aC5hYnMoYmdyYS5yZWFkVUludDgoaSArIDMpIC0gbWEpID4gQ09OVEVOVF9ERUxUQVxuICAgICAgKSB7XG4gICAgICAgIGNvbnRlbnQrKztcbiAgICAgICAgaWYgKGNvbnRlbnQgPj0gTUlOX0NPTlRFTlRfU0FNUExFUykge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGNsYXNzIEJsYW5rU3RhdHMge1xuICBwcml2YXRlIHJlYWRvbmx5IF93aWR0aDogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9oZWlnaHQ6IG51bWJlcjtcbiAgcHJpdmF0ZSBfdG90YWwgPSAwO1xuICBwcml2YXRlIF9ibGFuayA9IDA7XG5cbiAgY29uc3RydWN0b3Iod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpIHtcbiAgICB0aGlzLl93aWR0aCA9IHdpZHRoO1xuICAgIHRoaXMuX2hlaWdodCA9IGhlaWdodDtcbiAgfVxuXG4gIHNhbXBsZShmcmFtZTogQnVmZmVyKTogdm9pZCB7XG4gICAgdGhpcy5fdG90YWwrKztcbiAgICBpZiAoaXNCbGFua0ZyYW1lKGZyYW1lLCB0aGlzLl93aWR0aCwgdGhpcy5faGVpZ2h0KSkge1xuICAgICAgdGhpcy5fYmxhbmsrKztcbiAgICB9XG4gIH1cblxuICAvLyBGcmFjdGlvbiBvZiB3cml0dGVuIGZyYW1lcyB0aGF0IHdlcmUgY29udGVudGxlc3MgKDAgPSBhbGwgaGFkIGNvbnRlbnQsIDEgPSBhbGwgYmxhbmspLlxuICBmaW5hbGl6ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl90b3RhbCA+IDAgPyB0aGlzLl9ibGFuayAvIHRoaXMuX3RvdGFsIDogMDtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMy8yMy5cblxuZXhwb3J0IGNvbnN0IEpBTktfV0FSTl9TQ09SRSA9IDAuMjU7IC8vIGphbmsgc2NvcmUgYWJvdmUgdGhpcyB3YXJucyBhdCByZW5kZXIgZW5kICh+cXVhcnRlciBkcm9wcGVkIG9yIGEgfjAuNXMgZnJlZXplKVxuXG4vLyBGcmFtZS1kcm9wIHF1YWxpdHkgc2NvcmUgKDAgPSBwZXJmZWN0LCAxID0gd29yc3QpOiBnbG9iYWwgZHJvcCByYXRlIGFuZCBsb2NhbCBidXJzdCBzZXZlcml0eSBjb21iaW5lZCB2aWEgMS0oMS1nKSgxLWwpLlxuZXhwb3J0IGludGVyZmFjZSBEcm9wU2NvcmUge1xuICBnbG9iYWw6IG51bWJlcjtcbiAgbG9jYWw6IG51bWJlcjtcbiAgamFuazogbnVtYmVyO1xuICBleHBlY3RlZDogbnVtYmVyO1xuICBhY3R1YWw6IG51bWJlcjtcbiAgbWF4QnVyc3Q6IG51bWJlcjtcbn1cblxuZXhwb3J0IGNsYXNzIERyb3BTdGF0cyB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2ZwczogbnVtYmVyO1xuICBwcml2YXRlIF9hY3R1YWwgPSAwO1xuICBwcml2YXRlIF9jdXJyZW50QnVyc3QgPSAwO1xuICBwcml2YXRlIF9idXJzdHM6IG51bWJlcltdID0gW107XG5cbiAgY29uc3RydWN0b3IoZnBzOiBudW1iZXIpIHtcbiAgICB0aGlzLl9mcHMgPSBmcHM7XG4gIH1cblxuICB3cm90ZShjb3VudCA9IDEpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fY3VycmVudEJ1cnN0ID4gMCkge1xuICAgICAgdGhpcy5fYnVyc3RzLnB1c2godGhpcy5fY3VycmVudEJ1cnN0KTtcbiAgICAgIHRoaXMuX2N1cnJlbnRCdXJzdCA9IDA7XG4gICAgfVxuICAgIHRoaXMuX2FjdHVhbCArPSBjb3VudDtcbiAgfVxuXG4gIGRyb3BwZWQoY291bnQgPSAxKTogdm9pZCB7XG4gICAgdGhpcy5fY3VycmVudEJ1cnN0ICs9IGNvdW50O1xuICB9XG5cbiAgZmluYWxpemUoKTogRHJvcFNjb3JlIHtcbiAgICBpZiAodGhpcy5fY3VycmVudEJ1cnN0ID4gMCkge1xuICAgICAgdGhpcy5fYnVyc3RzLnB1c2godGhpcy5fY3VycmVudEJ1cnN0KTtcbiAgICAgIHRoaXMuX2N1cnJlbnRCdXJzdCA9IDA7XG4gICAgfVxuXG4gICAgbGV0IHRvdGFsRHJvcHBlZCA9IDA7XG4gICAgbGV0IGxvY2FsU3VtID0gMDtcbiAgICBsZXQgbWF4QnVyc3QgPSAwO1xuICAgIGZvciAoY29uc3QgYnVyc3Qgb2YgdGhpcy5fYnVyc3RzKSB7XG4gICAgICB0b3RhbERyb3BwZWQgKz0gYnVyc3Q7XG4gICAgICBtYXhCdXJzdCA9IE1hdGgubWF4KG1heEJ1cnN0LCBidXJzdCk7XG4gICAgICBjb25zdCBwZXJjZXB0aWJsZSA9IE1hdGgubWF4KDAsIGJ1cnN0IC0gMSk7XG4gICAgICBsb2NhbFN1bSArPSAocGVyY2VwdGlibGUgLyB0aGlzLl9mcHMpICoqIDI7XG4gICAgfVxuXG4gICAgY29uc3QgZXhwZWN0ZWQgPSB0aGlzLl9hY3R1YWwgKyB0b3RhbERyb3BwZWQ7XG4gICAgY29uc3QgZyA9IGV4cGVjdGVkID4gMCA/IHRvdGFsRHJvcHBlZCAvIGV4cGVjdGVkIDogMDtcbiAgICBjb25zdCBsID0gTWF0aC5taW4oMSwgbG9jYWxTdW0pO1xuICAgIGNvbnN0IHNjb3JlID0gMSAtICgxIC0gZykgKiAoMSAtIGwpO1xuXG4gICAgcmV0dXJuIHsgZ2xvYmFsOiBnLCBsb2NhbDogbCwgamFuazogc2NvcmUsIGV4cGVjdGVkLCBhY3R1YWw6IHRoaXMuX2FjdHVhbCwgbWF4QnVyc3QgfTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMy8wMi5cblxuaW1wb3J0IHR5cGUgeyBXZWJDb250ZW50cyB9IGZyb20gXCJlbGVjdHJvblwiO1xuaW1wb3J0IHR5cGUgeyBFbmNvZGVyUGlwZWxpbmUgfSBmcm9tIFwiLi4vYmFzZS9lbmNvZGVyL3BpcGVsaW5lXCI7XG5cbmV4cG9ydCBjb25zdCBBVURJT19NRVRBX0NIQU5ORUwgPSBcImF1ZGlvLW1ldGFcIjtcbmV4cG9ydCBjb25zdCBBVURJT19DSFVOS19DSEFOTkVMID0gXCJhdWRpby1jaHVua1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEF1ZGlvTGlzdGVuZXJPcHRpb25zIHtcbiAgd2M6IFdlYkNvbnRlbnRzO1xuICBlbmNvZGVyOiBFbmNvZGVyUGlwZWxpbmU7XG4gIGdldFZpZGVvVGltZU1zOiAoKSA9PiBudW1iZXI7XG4gIG9uRXJyb3I6IChlcnJvcjogRXJyb3IpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCB0eXBlIEF1ZGlvRGlzcG9zYWwgPSAoKSA9PiB2b2lkO1xuXG4vLyBBIHJlbmRlciBxdWFudHVtIGlzIDEyOCBzdGVyZW8gZmxvYXRzOyBhbnl0aGluZyBwYXN0IGEgc2Vjb25kIG9mIGF1ZGlvIGNhbWUgZnJvbSBhIHBhZ2UgYWJ1c2luZyB0aGUgYnJpZGdlLlxuY29uc3QgTUFYX0NIVU5LX0JZVEVTID0gNDhfMDAwICogMiAqIDQ7XG5jb25zdCBNQVhfU0FNUExFX1JBVEUgPSAxOTJfMDAwO1xuXG5leHBvcnQgZnVuY3Rpb24gYXR0YWNoQXVkaW9MaXN0ZW5lcnMoeyB3YywgZW5jb2RlciwgZ2V0VmlkZW9UaW1lTXMsIG9uRXJyb3IgfTogQXVkaW9MaXN0ZW5lck9wdGlvbnMpOiBBdWRpb0Rpc3Bvc2FsIHtcbiAgY29uc3Qgb25NZXRhID0gYXN5bmMgKF9lOiB1bmtub3duLCBkYXRhOiB7IHNhbXBsZVJhdGU6IG51bWJlciB9KSA9PiB7XG4gICAgY29uc3Qgc2FtcGxlUmF0ZSA9IGRhdGEuc2FtcGxlUmF0ZTtcbiAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShzYW1wbGVSYXRlKSB8fCBzYW1wbGVSYXRlIDw9IDAgfHwgc2FtcGxlUmF0ZSA+IE1BWF9TQU1QTEVfUkFURSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBzdGFydE1zID0gZ2V0VmlkZW9UaW1lTXMoKTtcbiAgICBlbmNvZGVyLnNldHVwQXVkaW8oc2FtcGxlUmF0ZSk7XG4gICAgY29uc3Qgc2lsZW5jZVNhbXBsZXMgPSBNYXRoLmNlaWwoKHN0YXJ0TXMgKiBzYW1wbGVSYXRlKSAvIDEwMDApO1xuICAgIGlmIChzaWxlbmNlU2FtcGxlcyA8PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBlbmNvZGVyLmVuY29kZUF1ZGlvKEJ1ZmZlci5hbGxvYyhzaWxlbmNlU2FtcGxlcyAqIDIgKiA0KSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIG9uRXJyb3IoZXJyb3IgYXMgRXJyb3IpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBvbkNodW5rID0gYXN5bmMgKF9lOiB1bmtub3duLCBidWZmZXI6IEJ1ZmZlcikgPT4ge1xuICAgIC8vIFBhZ2Utd29ybGQgY29kZSBvd25zIHRoaXMgY2hhbm5lbCwgc28gdHJlYXQgaXRzIHBheWxvYWQgYXMgaW5wdXQ6IHdyb25nIHNpemUgbWVhbnMgaXQgaXMgbm90IG91ciB3b3JrbGV0J3MgUENNLlxuICAgIGNvbnN0IGJ5dGVzID0gQXJyYXlCdWZmZXIuaXNWaWV3KGJ1ZmZlcikgPyBidWZmZXIuYnl0ZUxlbmd0aCA6IDA7XG4gICAgaWYgKGJ5dGVzID09PSAwIHx8IGJ5dGVzID4gTUFYX0NIVU5LX0JZVEVTIHx8IGJ5dGVzICUgOCAhPT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgYXdhaXQgZW5jb2Rlci5lbmNvZGVBdWRpbyhidWZmZXIpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBvbkVycm9yKGVycm9yIGFzIEVycm9yKTtcbiAgICB9XG4gIH07XG5cbiAgd2MuaXBjLm9uKEFVRElPX01FVEFfQ0hBTk5FTCwgb25NZXRhKTtcbiAgd2MuaXBjLm9uKEFVRElPX0NIVU5LX0NIQU5ORUwsIG9uQ2h1bmspO1xuXG4gIHJldHVybiAoKSA9PiB7XG4gICAgd2MuaXBjLnJlbW92ZUxpc3RlbmVyKEFVRElPX01FVEFfQ0hBTk5FTCwgb25NZXRhKTtcbiAgICB3Yy5pcGMucmVtb3ZlTGlzdGVuZXIoQVVESU9fQ0hVTktfQ0hBTk5FTCwgb25DaHVuayk7XG4gIH07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA3LzE2LlxuXG5pbXBvcnQgeyB3cml0ZUZpbGUgfSBmcm9tIFwibm9kZTpmcy9wcm9taXNlc1wiO1xuaW1wb3J0IHsgZGlybmFtZSwgam9pbiB9IGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IG5hdGl2ZUltYWdlIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5cbmludGVyZmFjZSBTY3JlZW5zaG90VGFyZ2V0IHtcbiAgbXM6IG51bWJlcjtcbiAgaW5kZXg6IG51bWJlcjtcbiAgcGF0aDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNjcmVlbnNob3RPcHRpb25zIHtcbiAgbWFya3M6IG51bWJlcltdO1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgb3V0RmlsZXM6IHN0cmluZ1tdO1xufVxuXG4vLyBEdW1wcyBwYWludGVkIEJHUkEgZnJhbWVzIHRvIFBORyBhdCByZXF1ZXN0ZWQgc2Vjb25kIG1hcmtzOyByZXN1bHQgb3JkZXIgdHJhY2tzIGlucHV0IG9yZGVyLlxuZXhwb3J0IGNsYXNzIFNjcmVlbnNob3RUYWtlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3BlbmRpbmc6IFNjcmVlbnNob3RUYXJnZXRbXTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZG9uZSA9IG5ldyBNYXA8bnVtYmVyLCBzdHJpbmc+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3dyaXRlczogUHJvbWlzZTx2b2lkPltdID0gW107XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBfczogU2NyZWVuc2hvdE9wdGlvbnMpIHtcbiAgICBjb25zdCBkaXIgPSBkaXJuYW1lKF9zLm91dEZpbGVzWzBdID8/IFwiLlwiKTtcbiAgICB0aGlzLl9wZW5kaW5nID0gX3MubWFya3NcbiAgICAgIC5tYXAoKHNlYywgaW5kZXgpID0+ICh7IG1zOiBzZWMgKiAxMDAwLCBpbmRleCwgcGF0aDogam9pbihkaXIsIGBzY3JlZW5zaG90XyR7aW5kZXh9LnBuZ2ApIH0pKVxuICAgICAgLnNvcnQoKGEsIGIpID0+IGEubXMgLSBiLm1zKTtcbiAgfVxuXG4gIC8vIER1bXAgZXZlcnkgbWFyayB3aG9zZSBzZWNvbmQgaGFzIGJlZW4gcmVhY2hlZCBieSB0aGlzIGZyYW1lLlxuICBjYXB0dXJlKGN1cnJlbnRUaW1lTXM6IG51bWJlciwgYmdyYTogQnVmZmVyKTogdm9pZCB7XG4gICAgd2hpbGUgKHRoaXMuX3BlbmRpbmcubGVuZ3RoID4gMCAmJiB0aGlzLl9wZW5kaW5nWzBdIS5tcyA8PSBjdXJyZW50VGltZU1zKSB7XG4gICAgICB0aGlzLnRha2UodGhpcy5fcGVuZGluZy5zaGlmdCgpISwgYmdyYSk7XG4gICAgfVxuICB9XG5cbiAgLy8gUmVjb3JkaW5nIG92ZXI6IHNuYXAgYW55IG1hcmsgcGFzdCB0aGUgbGFzdCBmcmFtZSBvbnRvIGl0LCB0aGVuIHdyaXRlIGFsbCBzaG90cyBvdXQuXG4gIGFzeW5jIGZpbmlzaChmaW5hbEJncmE/OiBCdWZmZXIpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgd2hpbGUgKGZpbmFsQmdyYSAmJiB0aGlzLl9wZW5kaW5nLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMudGFrZSh0aGlzLl9wZW5kaW5nLnNoaWZ0KCkhLCBmaW5hbEJncmEpO1xuICAgIH1cbiAgICBhd2FpdCBQcm9taXNlLmFsbCh0aGlzLl93cml0ZXMpO1xuICAgIHJldHVybiBbLi4udGhpcy5fZG9uZS5lbnRyaWVzKCldLnNvcnQoKGEsIGIpID0+IGFbMF0gLSBiWzBdKS5tYXAoKFssIHBhdGhdKSA9PiBwYXRoKTtcbiAgfVxuXG4gIHByaXZhdGUgdGFrZSh0YXJnZXQ6IFNjcmVlbnNob3RUYXJnZXQsIGJncmE6IEJ1ZmZlcik6IHZvaWQge1xuICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gdGhpcy5fcztcbiAgICBjb25zdCBwbmcgPSBuYXRpdmVJbWFnZS5jcmVhdGVGcm9tQml0bWFwKGJncmEsIHsgd2lkdGgsIGhlaWdodCB9KS50b1BORygpO1xuICAgIHRoaXMuX2RvbmUuc2V0KHRhcmdldC5pbmRleCwgdGFyZ2V0LnBhdGgpO1xuICAgIHRoaXMuX3dyaXRlcy5wdXNoKHdyaXRlRmlsZSh0YXJnZXQucGF0aCwgcG5nKSk7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDUuXG5cbmltcG9ydCB7IHNldFRpbWVvdXQgfSBmcm9tIFwibm9kZTp0aW1lcnMvcHJvbWlzZXNcIjtcbmltcG9ydCB7IHNsZWVwIH0gZnJvbSBcIi4vdGltaW5nXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmV0cnlPcHRpb25zPEFyZ3MgZXh0ZW5kcyB1bmtub3duW10sIFJldD4ge1xuICBmbjogKC4uLmFyZ3M6IEFyZ3MpID0+IFByb21pc2U8UmV0PjtcbiAgbWF4QXR0ZW1wdHM/OiBudW1iZXI7XG4gIHRpbWVvdXQ/OiBudW1iZXI7XG4gIC8vIEFib3J0IGJhaWxzIGltbWVkaWF0ZWx5IGluc3RlYWQgb2YgcmV0cnlpbmc7IHNpZ25hbCBpcyBub3QgYXV0by10aHJlYWRlZCBpbnRvIGZuIOKAlCBjYWxsZXIgd2lyZXMgaXQgKGZldGNoLCBTMyBzZW5kKS5cbiAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VSZXRyeTxBcmdzIGV4dGVuZHMgdW5rbm93bltdLCBSZXQ+KHtcbiAgZm4sXG4gIG1heEF0dGVtcHRzID0gMyxcbiAgdGltZW91dCxcbiAgc2lnbmFsLFxufTogUmV0cnlPcHRpb25zPEFyZ3MsIFJldD4pIHtcbiAgY29uc3QgdGltZW91dEVycm9yID0gbmV3IEVycm9yKGB0aW1lb3V0IG92ZXIgJHt0aW1lb3V0fW1zYCk7XG4gIHJldHVybiBhc3luYyAoLi4uYXJnczogQXJncykgPT4ge1xuICAgIGxldCBhdHRlbXB0ID0gMDtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgc2lnbmFsPy50aHJvd0lmQWJvcnRlZCgpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcHJvbWlzZXMgPSBbZm4oLi4uYXJncyldO1xuICAgICAgICBpZiAodGltZW91dCkge1xuICAgICAgICAgIHByb21pc2VzLnB1c2goXG4gICAgICAgICAgICBzZXRUaW1lb3V0KHRpbWVvdXQpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICB0aHJvdyB0aW1lb3V0RXJyb3I7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhd2FpdCBQcm9taXNlLnJhY2UocHJvbWlzZXMpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBzaWduYWw/LnRocm93SWZBYm9ydGVkKCk7XG4gICAgICAgIGF0dGVtcHQrKztcbiAgICAgICAgaWYgKGF0dGVtcHQgPj0gbWF4QXR0ZW1wdHMpIHtcbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IHNsZWVwKDIgKiogYXR0ZW1wdCAqIDEwMCArIE1hdGgucmFuZG9tKCkgKiAxMDApO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDcvMjcuXG5cbmV4cG9ydCB0eXBlIFdvcmxkTW9kZSA9IFwic2hvb3RcIiB8IFwicmVuZGVyXCIgfCBcImF1ZGlvXCI7XG5cbi8vIE5hbWVzIHRoZSBwYWdlLXdvcmxkIGJ1bmRsZSBpbiB0aGUgcHJlbG9hZCdzIGFyZ3Y7IGtlZXAgdGhpcyBtb2R1bGUgZGVwZW5kZW5jeS1mcmVlLCB0aGUgcHJlbG9hZCBsb2FkcyBpdCBhcy1pcy5cbmV4cG9ydCBjb25zdCBXT1JMRF9BUkcgPSBcIi0tcHVwLXdvcmxkPVwiO1xuXG4vLyBQcmVzZW50IG9ubHkgd2hlbiB0aGUgcnVuIGNhcHR1cmVzIGF1ZGlvLCBzbyBhIHBhZ2UgaW4gYW55IG90aGVyIG1vZGUgaGFzIG5vIGNoYW5uZWwgdG8gcHVzaCBQQ00gdGhyb3VnaC5cbmV4cG9ydCBjb25zdCBBVURJT19BUkcgPSBcIi0tcHVwLWF1ZGlvXCI7XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAzLzEwLlxuXG5leHBvcnQgaW50ZXJmYWNlIFdhaXRPcHRpb25zIHtcbiAgdGltZW91dDogbnVtYmVyO1xuICBvblRpbWVvdXQ/OiAoKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgY2xhc3MgV2FpdGFibGVFdmVudCB7XG4gIHByaXZhdGUgX3Byb21pc2U/OiBQcm9taXNlPHZvaWQ+O1xuICBwcml2YXRlIF9yZXNvbHZlPzogKCkgPT4gdm9pZDtcbiAgcHJpdmF0ZSBfdGltZW91dFRva2VuPzogTm9kZUpTLlRpbWVvdXQ7XG5cbiAgd2FpdChvcHRpb25zPzogV2FpdE9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fcHJvbWlzZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYWxyZWFkeSB3YWl0aW5nXCIpO1xuICAgIH1cbiAgICB0aGlzLl9wcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIHRoaXMuX3Jlc29sdmUgPSByZXNvbHZlO1xuICAgICAgaWYgKG9wdGlvbnM/LnRpbWVvdXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLl90aW1lb3V0VG9rZW4gPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBvcHRpb25zLm9uVGltZW91dD8uKCk7XG4gICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9LCBvcHRpb25zLnRpbWVvdXQpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLl9wcm9taXNlO1xuICB9XG5cbiAgc2lnbmFsKCkge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLl90aW1lb3V0VG9rZW4pO1xuICAgIHRoaXMuX3Byb21pc2UgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5fcmVzb2x2ZT8uKCk7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDkuXG5cbmltcG9ydCB7IFVSTCB9IGZyb20gXCJub2RlOnVybFwiO1xuaW1wb3J0IHR5cGUgeyBCcm93c2VyV2luZG93IH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBDb25jdXJyZW5jeUxpbWl0ZXIgfSBmcm9tIFwiLi4vYmFzZS9saW1pdGVyXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi4vYmFzZS9sb2dnaW5nXCI7XG5pbXBvcnQgeyBXYWl0YWJsZUV2ZW50IH0gZnJvbSBcIi4uL2Jhc2Uvd2FpdGFibGVfZXZlbnRcIjtcblxuY29uc3QgVEFHID0gXCJbTmV0d29ya11cIjtcblxuY29uc3QgbWFwID0gbmV3IE1hcChbXG4gIFtganNzei1ib3NzLmhkc2xiLmNvbWAsIGBqc3N6LWJvc3MuYmlsaWJpbGkuY29gXSxcbiAgW2Bib3NzLmhkc2xiLmNvbWAsIGBzaGpkLWJvc3MuYmlsaWJpbGkuY29gXSxcbiAgW2B1cG9zLXN6LW1pcnJvcmNvcy5iaWxpdmlkZW8uY29tYCwgYGpzc3otaW5uZXItYm9zcy5iaWxpYmlsaS5jb2BdLFxuXSk7XG5cbmNvbnN0IHRhcmdldHMgPSBuZXcgU2V0KG1hcC52YWx1ZXMoKSk7XG5cbmNvbnN0IExPQ0FMX1NDSEVNRVMgPSBbXCJwdXA6XCIsIFwicHVwLWZyYW1lOlwiLCBcImZpbGU6XCIsIFwiZGF0YTpcIiwgXCJibG9iOlwiLCBcImNocm9tZS1leHRlbnNpb246XCIsIFwiZGV2dG9vbHM6XCJdO1xuXG5mdW5jdGlvbiBpc0xvY2FsU2NoZW1lKHVybDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGZvciAoY29uc3QgcyBvZiBMT0NBTF9TQ0hFTUVTKSB7XG4gICAgaWYgKHVybC5zdGFydHNXaXRoKHMpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBpc1Byb3h5VGFyZ2V0KHVybDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiB1cmwuc3RhcnRzV2l0aChcImh0dHBcIikgJiYgdGFyZ2V0cy5oYXMobmV3IFVSTCh1cmwpLmhvc3RuYW1lKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3hpZWRVcmwodXJsOiBzdHJpbmcpIHtcbiAgaWYgKCF1cmwuc3RhcnRzV2l0aChcImh0dHBcIikpIHtcbiAgICByZXR1cm4gdXJsO1xuICB9XG4gIGNvbnN0IHBhcnNlZCA9IG5ldyBVUkwodXJsKTtcbiAgY29uc3QgdGFyZ2V0ID0gbWFwLmdldChwYXJzZWQuaG9zdG5hbWUpO1xuICBpZiAoIXRhcmdldCkge1xuICAgIHJldHVybiB1cmw7XG4gIH1cbiAgcGFyc2VkLmhvc3RuYW1lID0gdGFyZ2V0O1xuICBwYXJzZWQucHJvdG9jb2wgPSBcImh0dHA6XCI7XG4gIHJldHVybiBwYXJzZWQudG9TdHJpbmcoKTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBOZXR3b3JrT3B0aW9ucyB7XG4gIHNvdXJjZTogc3RyaW5nO1xuICB3aW5kb3c6IEJyb3dzZXJXaW5kb3c7XG4gIHVzZUlubmVyUHJveHk/OiBib29sZWFuO1xuICBzdHViTWVkaWE/OiBib29sZWFuO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0SW50ZXJjZXB0b3IoeyBzb3VyY2UsIHdpbmRvdywgdXNlSW5uZXJQcm94eSwgc3R1Yk1lZGlhIH06IE5ldHdvcmtPcHRpb25zKSB7XG4gIGNvbnN0IHJlcSA9IHdpbmRvdy53ZWJDb250ZW50cy5zZXNzaW9uLndlYlJlcXVlc3Q7XG4gIGNvbnN0IGxpbWl0ZXIgPSBuZXcgQ29uY3VycmVuY3lMaW1pdGVyKDI1Nik7XG4gIGNvbnN0IGV2ZW50cyA9IG5ldyBNYXA8c3RyaW5nLCBXYWl0YWJsZUV2ZW50PigpO1xuXG4gIGFzeW5jIGZ1bmN0aW9uIHdhaXQoa2V5OiBzdHJpbmcsIG9uVGltZW91dD86ICgpID0+IHZvaWQpIHtcbiAgICBjb25zdCBldmVudCA9IG5ldyBXYWl0YWJsZUV2ZW50KCk7XG4gICAgZXZlbnRzLnNldChrZXksIGV2ZW50KTtcbiAgICBhd2FpdCBldmVudC53YWl0KHsgdGltZW91dDogNV8wMDAsIG9uVGltZW91dCB9KS5maW5hbGx5KCgpID0+IGV2ZW50cy5kZWxldGUoa2V5KSk7XG4gIH1cblxuICBmdW5jdGlvbiBzaWduYWwoa2V5OiBzdHJpbmcpIHtcbiAgICBldmVudHMuZ2V0KGtleSk/LnNpZ25hbCgpO1xuICB9XG5cbiAgcmVxLm9uQmVmb3JlUmVxdWVzdCgoZGV0YWlscywgY2FsbGJhY2spID0+IHtcbiAgICBjb25zdCB1cmwgPSBkZXRhaWxzLnVybDtcbiAgICAvLyBTd2FwIG1lZGlhIGZvciBhIGZyYW1lLXNlcnZlciBzdHViICh0cnVlIGludHJpbnNpYyBzaXplL2R1cmF0aW9uKSBzbyBCbGluayBsYXlzIG91dCBsaWtlIENocm9tZS5cbiAgICBpZiAoc3R1Yk1lZGlhICYmIGRldGFpbHMucmVzb3VyY2VUeXBlID09PSBcIm1lZGlhXCIgJiYgIXVybC5zdGFydHNXaXRoKFwicHVwLWZyYW1lOlwiKSkge1xuICAgICAgY2FsbGJhY2soe1xuICAgICAgICByZWRpcmVjdFVSTDogYHB1cC1mcmFtZTovL3N0dWI/c3JjPSR7ZW5jb2RlVVJJQ29tcG9uZW50KHVybCl9YCxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBwcm94aWVkID0gdXNlSW5uZXJQcm94eSA/IHByb3hpZWRVcmwodXJsKSA6IHVybDtcbiAgICBsaW1pdGVyLnNjaGVkdWxlKCgpID0+IHtcbiAgICAgIGNvbnN0IGtleSA9IGAke3dpbmRvdy5pZH1fJHtkZXRhaWxzLmlkfWA7XG4gICAgICBsb2dnZXIuZGVidWcoVEFHLCBgc3RhcnQ6YCwge1xuICAgICAgICBrZXksXG4gICAgICAgIHVybCxcbiAgICAgICAgcHJveGllZCxcbiAgICAgICAgbWV0aG9kOiBkZXRhaWxzLm1ldGhvZCxcbiAgICAgICAgc291cmNlLFxuICAgICAgICBzdGF0czogbGltaXRlci5zdGF0cyxcbiAgICAgIH0pO1xuICAgICAgaWYgKHByb3hpZWQgPT09IHVybCkge1xuICAgICAgICBjYWxsYmFjayh7IGNhbmNlbDogZmFsc2UgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjYWxsYmFjayh7IGNhbmNlbDogZmFsc2UsIHJlZGlyZWN0VVJMOiBwcm94aWVkIH0pO1xuICAgICAgfVxuICAgICAgaWYgKGlzTG9jYWxTY2hlbWUodXJsKSkge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gd2FpdChrZXksICgpID0+IHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKFRBRywgYG1heWJlIHRpbWVvdXQ6YCwge1xuICAgICAgICAgIGtleSxcbiAgICAgICAgICB1cmwsXG4gICAgICAgICAgcHJveGllZCxcbiAgICAgICAgICBtZXRob2Q6IGRldGFpbHMubWV0aG9kLFxuICAgICAgICAgIHNvdXJjZSxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgcmVxLm9uSGVhZGVyc1JlY2VpdmVkKCh7IHVybCwgcmVzcG9uc2VIZWFkZXJzIH0sIGNhbGxiYWNrKSA9PiB7XG4gICAgZGVsZXRlIHJlc3BvbnNlSGVhZGVycz8uW1wieC1mcmFtZS1vcHRpb25zXCJdO1xuICAgIGRlbGV0ZSByZXNwb25zZUhlYWRlcnM/LltcIlgtRnJhbWUtT3B0aW9uc1wiXTtcbiAgICBkZWxldGUgcmVzcG9uc2VIZWFkZXJzPy5bXCJjb250ZW50LXNlY3VyaXR5LXBvbGljeVwiXTtcbiAgICBkZWxldGUgcmVzcG9uc2VIZWFkZXJzPy5bXCJDb250ZW50LVNlY3VyaXR5LVBvbGljeVwiXTtcbiAgICAvLyBQcm94eWluZyByZXdyb3RlIHRoZSBvcmlnaW4sIHNvIGZvbnRzIGFuZCBvdGhlciBDT1JTLW1vZGUgZmV0Y2hlcyBuZWVkIHRoZSBncmFudCB0aGUgb3JpZ2luYWwgaG9zdCB3b3VsZCBoYXZlIGhhZC5cbiAgICBpZiAodXNlSW5uZXJQcm94eSAmJiBpc1Byb3h5VGFyZ2V0KHVybCkpIHtcbiAgICAgIGNhbGxiYWNrKHsgY2FuY2VsOiBmYWxzZSwgcmVzcG9uc2VIZWFkZXJzOiB7IC4uLnJlc3BvbnNlSGVhZGVycywgXCJhY2Nlc3MtY29udHJvbC1hbGxvdy1vcmlnaW5cIjogW1wiKlwiXSB9IH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjYWxsYmFjayh7IGNhbmNlbDogZmFsc2UsIHJlc3BvbnNlSGVhZGVycyB9KTtcbiAgfSk7XG5cbiAgcmVxLm9uQ29tcGxldGVkKChkZXRhaWxzKSA9PiB7XG4gICAgY29uc3Qga2V5ID0gYCR7d2luZG93LmlkfV8ke2RldGFpbHMuaWR9YDtcbiAgICBzaWduYWwoa2V5KTtcbiAgICBsb2dnZXIuZGVidWcoVEFHLCBgY29tcGxldGVkOmAsIHtcbiAgICAgIGtleSxcbiAgICAgIHVybDogZGV0YWlscy51cmwsXG4gICAgICBtZXRob2Q6IGRldGFpbHMubWV0aG9kLFxuICAgICAgc3RhdHVzQ29kZTogZGV0YWlscy5zdGF0dXNDb2RlLFxuICAgICAgc291cmNlLFxuICAgIH0pO1xuICB9KTtcblxuICByZXEub25FcnJvck9jY3VycmVkKChkZXRhaWxzKSA9PiB7XG4gICAgY29uc3Qga2V5ID0gYCR7d2luZG93LmlkfV8ke2RldGFpbHMuaWR9YDtcbiAgICBzaWduYWwoa2V5KTtcbiAgICBjb25zdCB7IHVybCwgbWV0aG9kLCBlcnJvciwgcmVzb3VyY2VUeXBlIH0gPSBkZXRhaWxzO1xuICAgIGxvZ2dlci5kZWJ1ZyhUQUcsIGBlcnJvcjpgLCB7IGtleSwgdXJsLCBtZXRob2QsIGVycm9yLCByZXNvdXJjZVR5cGUsIHNvdXJjZSB9KTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1bnNldEludGVyY2VwdG9yKHdpbmRvdzogQnJvd3NlcldpbmRvdykge1xuICBjb25zdCByZXEgPSB3aW5kb3cud2ViQ29udGVudHMuc2Vzc2lvbi53ZWJSZXF1ZXN0O1xuICByZXEub25CZWZvcmVSZXF1ZXN0KG51bGwpO1xuICByZXEub25IZWFkZXJzUmVjZWl2ZWQobnVsbCk7XG4gIHJlcS5vbkNvbXBsZXRlZChudWxsKTtcbiAgcmVxLm9uRXJyb3JPY2N1cnJlZChudWxsKTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMjcuXG5cbmltcG9ydCB7IGpvaW4gfSBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyBCcm93c2VyV2luZG93IH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBwdXBQa2dSb290LCBwdXBQcmVsb2FkIH0gZnJvbSBcIi4uL2Jhc2UvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi4vYmFzZS9sb2dnaW5nXCI7XG5pbXBvcnQgeyB1c2VSZXRyeSB9IGZyb20gXCIuLi9iYXNlL3JldHJ5XCI7XG5pbXBvcnQgeyBzbGVlcCB9IGZyb20gXCIuLi9iYXNlL3RpbWluZ1wiO1xuaW1wb3J0IHsgQVVESU9fQVJHLCBXT1JMRF9BUkcsIHR5cGUgV29ybGRNb2RlIH0gZnJvbSBcIi4uL3J1bnRpbWUvd29ybGRcIjtcbmltcG9ydCB7IHByb3hpZWRVcmwsIHNldEludGVyY2VwdG9yLCB1bnNldEludGVyY2VwdG9yIH0gZnJvbSBcIi4vbmV0d29ya1wiO1xuaW1wb3J0IHsgY3JlYXRlU3RlZ29VUkwgfSBmcm9tIFwiLi9wcm90b2NvbFwiO1xuaW1wb3J0IHR5cGUgeyBJUENSZW5kZXJPcHRpb25zIH0gZnJvbSBcIi4vc2NoZW1hXCI7XG5cbmNvbnN0IFRBRyA9IFwiW1dpbmRvd11cIjtcbmNvbnN0IFRJTUVPVVRfRVJST1IgPSBuZXcgRXJyb3IoXCJ3aW5kb3cgdGltZW91dFwiKTtcbmNvbnN0IENPTlNPTEVfSUdOT1JFUyA9IFtcIk1peGVkIENvbnRlbnQ6IFRoZSBwYWdlIGF0XCJdO1xuXG5pbnRlcmZhY2UgRmluaXNoT3B0aW9ucyB7XG4gIHNvdXJjZTogc3RyaW5nO1xuICB3aW46IEJyb3dzZXJXaW5kb3c7XG4gIGFjdGlvbjogKCkgPT4gdm9pZDtcbiAgdGltZW91dE1zOiBudW1iZXI7XG4gIHRvbGVyYW50PzogYm9vbGVhbjtcbiAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG59XG5cbmZ1bmN0aW9uIHdhaXRGb3JGaW5pc2goeyBzb3VyY2UsIHdpbiwgYWN0aW9uLCB0aW1lb3V0TXMsIHRvbGVyYW50LCBzaWduYWwgfTogRmluaXNoT3B0aW9ucykge1xuICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGxldCBkb21SZWFkeSA9IGZhbHNlO1xuICAgIC8vIFRvbGVyYW50IHByb2NlZWRzIG9uIGEgcGFydGlhbCBET00gb25seSBhcyBhIHRpbWVvdXQgZmFsbGJhY2sg4oCUIHN0YXJ0aW5nIG9uIGJhcmUgZG9tLXJlYWR5IGxlYXZlcyB0aGUgbG9hZCBwZW5kaW5nIGFuZCB3ZWRnZXMgdmlydHVhbCB0aW1lLlxuICAgIGNvbnN0IHRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IGRvbmUodG9sZXJhbnQgJiYgZG9tUmVhZHkgPyB1bmRlZmluZWQgOiBUSU1FT1VUX0VSUk9SKSwgdGltZW91dE1zKTtcbiAgICBjb25zdCBkb25lID0gKGVycj86IHVua25vd24pID0+IHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBzaWduYWw/LnRocm93SWZBYm9ydGVkKCk7XG4gICAgc2lnbmFsPy5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgKCkgPT4gZG9uZShzaWduYWwucmVhc29uKSwge1xuICAgICAgb25jZTogdHJ1ZSxcbiAgICB9KTtcbiAgICB3aW4ud2ViQ29udGVudHMub25jZShcImRvbS1yZWFkeVwiLCAoKSA9PiB7XG4gICAgICBsb2dnZXIuZGVidWcoVEFHLCBcImRvbS1yZWFkeTpcIiwgeyBzb3VyY2UgfSk7XG4gICAgICBkb21SZWFkeSA9IHRydWU7XG4gICAgfSk7XG4gICAgd2luLndlYkNvbnRlbnRzLm9uY2UoXCJkaWQtc3RvcC1sb2FkaW5nXCIsICgpID0+IHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhUQUcsIFwiZGlkLXN0b3AtbG9hZGluZzpcIiwgeyBzb3VyY2UgfSk7XG4gICAgICBkb25lKCk7XG4gICAgfSk7XG4gICAgd2luLndlYkNvbnRlbnRzLm9uY2UoXCJkaWQtZmFpbC1sb2FkXCIsIChfZSwgY29kZSwgZGVzYywgdXJsKSA9PiB7XG4gICAgICBjb25zdCBtc2cgPSBgZGlkLWZhaWwtbG9hZDogJHtKU09OLnN0cmluZ2lmeSh7IHVybCwgc291cmNlLCBjb2RlLCBkZXNjIH0pfWA7XG4gICAgICBsb2dnZXIuZXJyb3IoVEFHLCBtc2cpO1xuICAgICAgZG9uZShuZXcgRXJyb3IobXNnKSk7XG4gICAgfSk7XG4gICAgd2luLndlYkNvbnRlbnRzLm9uY2UoXCJwcmVsb2FkLWVycm9yXCIsIChfZSwgX3BhdGgsIGVycm9yKSA9PiB7XG4gICAgICBsb2dnZXIuZXJyb3IoVEFHLCBgcHJlbG9hZC1lcnJvcjogJHtKU09OLnN0cmluZ2lmeSh7IHNvdXJjZSwgbWVzc2FnZTogZXJyb3IubWVzc2FnZSB9KX1gKTtcbiAgICAgIGRvbmUoZXJyb3IpO1xuICAgIH0pO1xuICAgIHdpbi53ZWJDb250ZW50cy5vbmNlKFwicmVuZGVyLXByb2Nlc3MtZ29uZVwiLCAoX2UsIHsgZXhpdENvZGUsIHJlYXNvbiB9KSA9PiB7XG4gICAgICBjb25zdCBtc2cgPSBgcmVuZGVyLXByb2Nlc3MtZ29uZTogJHtKU09OLnN0cmluZ2lmeSh7IHNvdXJjZSwgZXhpdENvZGUsIHJlYXNvbiB9KX1gO1xuICAgICAgbG9nZ2VyLmVycm9yKFRBRywgbXNnKTtcbiAgICAgIGRvbmUobmV3IEVycm9yKG1zZykpO1xuICAgIH0pO1xuICAgIGFjdGlvbigpO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRpc3Bvc2VXaW5kb3cod2luOiBCcm93c2VyV2luZG93KSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4ge1xuICAgIHVuc2V0SW50ZXJjZXB0b3Iod2luKTtcbiAgICBjb25zdCB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgbG9nZ2VyLndhcm4oVEFHLCBcImZvcmNlIGNsb3NlXCIpO1xuICAgICAgICB3aW4uZGVzdHJveSgpO1xuICAgICAgfSBjYXRjaCB7fVxuICAgICAgZG9uZSgpO1xuICAgIH0sIDEwMDApO1xuICAgIGNvbnN0IGRvbmUgPSAoKSA9PiB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgICAgcmVzb2x2ZSgpO1xuICAgIH07XG4gICAgd2luLndlYkNvbnRlbnRzLnN0b3BQYWludGluZygpO1xuICAgIHdpbi53ZWJDb250ZW50cy5kZWJ1Z2dlci5kZXRhY2goKTtcbiAgICB3aW4ub25jZShcImNsb3NlZFwiLCBkb25lKTtcbiAgICB3aW4uY2xvc2UoKTtcbiAgfSk7XG59XG5cbmV4cG9ydCB0eXBlIFdpbmRvd0NyZWF0ZWRDYWxsYmFjayA9ICh3aW5kb3c6IEJyb3dzZXJXaW5kb3cpID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+O1xuXG5leHBvcnQgaW50ZXJmYWNlIFdpbmRvd09wdGlvbnMge1xuICBzb3VyY2U6IHN0cmluZztcbiAgcmVuZGVyZXI6IElQQ1JlbmRlck9wdGlvbnM7XG4gIHRvbGVyYW50PzogYm9vbGVhbjtcbiAgb25DcmVhdGVkPzogV2luZG93Q3JlYXRlZENhbGxiYWNrO1xuICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbn1cblxuLy8gUGFnZS13b3JsZCBob29rIGJ1bmRsZXM7IHRoZSBwcmVsb2FkIGV2YWx1YXRlcyB0aGUgbmFtZWQgb25lIGluIHRoZSBtYWluIHdvcmxkIG9mIGV2ZXJ5IGZyYW1lIGl0IGxhbmRzIGluLlxuY29uc3QgV09STERfU0NSSVBUUzogUmVjb3JkPFdvcmxkTW9kZSwgc3RyaW5nPiA9IHtcbiAgc2hvb3Q6IGpvaW4ocHVwUGtnUm9vdCwgXCJkaXN0XCIsIFwicnVudGltZVwiLCBcInNob290Lmdsb2JhbC5qc1wiKSxcbiAgcmVuZGVyOiBqb2luKHB1cFBrZ1Jvb3QsIFwiZGlzdFwiLCBcInJ1bnRpbWVcIiwgXCJyZW5kZXIuZ2xvYmFsLmpzXCIpLFxuICBhdWRpbzogam9pbihwdXBQa2dSb290LCBcImRpc3RcIiwgXCJydW50aW1lXCIsIFwiYXVkaW8uZ2xvYmFsLmpzXCIpLFxufTtcblxuZnVuY3Rpb24gcGlja1dvcmxkU2NyaXB0KHJlbmRlcmVyOiBJUENSZW5kZXJPcHRpb25zKTogc3RyaW5nIHtcbiAgY29uc3QgbW9kZTogV29ybGRNb2RlID0gcmVuZGVyZXIuZGV0ZXJtaW5pc3RpYyA/IFwic2hvb3RcIiA6IHJlbmRlcmVyLndpdGhBdWRpbyA/IFwiYXVkaW9cIiA6IFwicmVuZGVyXCI7XG4gIHJldHVybiBXT1JMRF9TQ1JJUFRTW21vZGVdO1xufVxuXG5hc3luYyBmdW5jdGlvbiBvcGVuV2luZG93KHsgc291cmNlLCByZW5kZXJlciwgdG9sZXJhbnQsIHNpZ25hbCwgb25DcmVhdGVkIH06IFdpbmRvd09wdGlvbnMpOiBQcm9taXNlPEJyb3dzZXJXaW5kb3c+IHtcbiAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0LCB1c2VJbm5lclByb3h5IH0gPSByZW5kZXJlcjtcbiAgY29uc3Qgc3JjID0gdXNlSW5uZXJQcm94eSA/IHByb3hpZWRVcmwoc291cmNlKSA6IHNvdXJjZTtcblxuICBjb25zdCB3aW4gPSBuZXcgQnJvd3NlcldpbmRvdyh7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0OiBoZWlnaHQgKyAxLFxuICAgIG1pbldpZHRoOiB3aWR0aCxcbiAgICBtaW5IZWlnaHQ6IGhlaWdodCArIDEsXG4gICAgbWF4V2lkdGg6IHdpZHRoLFxuICAgIG1heEhlaWdodDogaGVpZ2h0ICsgMSxcbiAgICByZXNpemFibGU6IGZhbHNlLFxuICAgIG1pbmltaXphYmxlOiBmYWxzZSxcbiAgICBtb3ZhYmxlOiBmYWxzZSxcbiAgICBzaG93OiBmYWxzZSxcbiAgICB0cmFuc3BhcmVudDogdHJ1ZSxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IHVuZGVmaW5lZCxcbiAgICBmcmFtZTogZmFsc2UsXG4gICAgd2ViUHJlZmVyZW5jZXM6IHtcbiAgICAgIG9mZnNjcmVlbjogdHJ1ZSxcbiAgICAgIGJhY2tncm91bmRUaHJvdHRsaW5nOiBmYWxzZSxcbiAgICAgIC8vIENhcnJpZXMgdGhlIGJyaWRnZSBwcmVsb2FkIGludG8gdGhlIHRhcmdldCBpZnJhbWU7IG5vZGUgc3RheXMgb2ZmLCBhcyBub2RlSW50ZWdyYXRpb24ga2VlcHMgaXRzIGZhbHNlIGRlZmF1bHQuXG4gICAgICBub2RlSW50ZWdyYXRpb25JblN1YkZyYW1lczogdHJ1ZSxcbiAgICAgIC8vIEVsZWN0cm9uIHNhbmRib3hlcyBwcmVsb2FkcyBieSBkZWZhdWx0LCB3aGljaCBicmVha3MgdGhlaXIgYnVuZGxlZCByZXF1aXJlczsgdGhlIE9TIHNhbmRib3ggaXMgb2ZmIHJlZ2FyZGxlc3MuXG4gICAgICBzYW5kYm94OiBmYWxzZSxcbiAgICAgIHdlYlNlY3VyaXR5OiAhcmVuZGVyZXIuZGlzYWJsZVdlYlNlY3VyaXR5LFxuICAgICAgLy8gVGhlIHdyYXBwZXIgaXMgYSBzZWN1cmUgc2NoZW1lLCBzbyBpdCB1cGdyYWRlcyB0aGUgdGFyZ2V0IHRvIGh0dHBzIGFuZCBldmVyeSBodHRwIHN1YnJlc291cmNlIGl0IG93bnMgdHVybnMgbWl4ZWQuXG4gICAgICBhbGxvd1J1bm5pbmdJbnNlY3VyZUNvbnRlbnQ6IHRydWUsXG4gICAgICBleHBlcmltZW50YWxGZWF0dXJlczogdHJ1ZSxcbiAgICAgIHByZWxvYWQ6IHB1cFByZWxvYWQsXG4gICAgICBhZGRpdGlvbmFsQXJndW1lbnRzOiBbYCR7V09STERfQVJHfSR7cGlja1dvcmxkU2NyaXB0KHJlbmRlcmVyKX1gLCAuLi4ocmVuZGVyZXIud2l0aEF1ZGlvID8gW0FVRElPX0FSR10gOiBbXSldLFxuICAgIH0sXG4gIH0pO1xuICBzZXRJbnRlcmNlcHRvcih7XG4gICAgc291cmNlLFxuICAgIHdpbmRvdzogd2luLFxuICAgIHVzZUlubmVyUHJveHksXG4gICAgc3R1Yk1lZGlhOiByZW5kZXJlci5kZXRlcm1pbmlzdGljLFxuICB9KTtcbiAgd2luLndlYkNvbnRlbnRzLmRlYnVnZ2VyLmF0dGFjaChcIjEuM1wiKTtcbiAgYXdhaXQgb25DcmVhdGVkPy4od2luKTtcblxuICB3aW4ud2ViQ29udGVudHMub24oXCJjb25zb2xlLW1lc3NhZ2VcIiwgKHsgbGV2ZWwsIG1lc3NhZ2UsIGxpbmVOdW1iZXIsIHNvdXJjZUlkIH0pID0+IHtcbiAgICAvLyBEcm9wIGhlYWRsZXNzIG5vaXNlOiBzZWN1cml0eSB3YXJuaW5ncyBhbmQgaHR0cOKGkmh0dHBzIGF1dG8tdXBncmFkZSBub3RpY2VzIGZvciBpbnRlcm5hbC1wcm94eSBhc3NldHMuXG4gICAgaWYgKGxldmVsID09PSBcIndhcm5pbmdcIiAmJiBDT05TT0xFX0lHTk9SRVMuZmluZCgoaSkgPT4gbWVzc2FnZS5zdGFydHNXaXRoKGkpKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBtc2dzID0gW1RBRywgXCJjb25zb2xlOlwiLCB7IG1lc3NhZ2UsIGxpbmVOdW1iZXIsIHNvdXJjZUlkLCBzb3VyY2UgfV07XG4gICAgbGV2ZWwgPT09IFwiZXJyb3JcIiA/IGxvZ2dlci5lcnJvciguLi5tc2dzKSA6IGxvZ2dlci5kZWJ1ZyguLi5tc2dzKTtcbiAgICByZW5kZXJlci5vbkNvbnNvbGUobGV2ZWwsIG1lc3NhZ2UpO1xuICB9KTtcblxuICB0cnkge1xuICAgIGNvbnN0IHVybCA9IGNyZWF0ZVN0ZWdvVVJMKHNyYywgeyB3aWR0aCwgaGVpZ2h0IH0pO1xuICAgIGF3YWl0IHdhaXRGb3JGaW5pc2goe1xuICAgICAgc291cmNlLFxuICAgICAgd2luLFxuICAgICAgYWN0aW9uOiAoKSA9PiB3aW4ubG9hZFVSTCh1cmwpLFxuICAgICAgdGltZW91dE1zOiByZW5kZXJlci53aW5kb3dUaW1lb3V0ICogMTAwMCxcbiAgICAgIHRvbGVyYW50LFxuICAgICAgc2lnbmFsLFxuICAgIH0pO1xuICB9IGNhdGNoIChlKSB7XG4gICAgYXdhaXQgZGlzcG9zZVdpbmRvdyh3aW4pO1xuICAgIHRocm93IGU7XG4gIH1cblxuICByZXR1cm4gd2luO1xufVxuXG5jb25zdCBvcGVuV2luZG93V2l0aFJldHJ5ID0gdXNlUmV0cnkoeyBmbjogb3BlbldpbmRvdywgbWF4QXR0ZW1wdHM6IDIgfSk7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsb2FkV2luZG93KHsgc291cmNlLCByZW5kZXJlciwgb25DcmVhdGVkLCBzaWduYWwgfTogV2luZG93T3B0aW9ucyk6IFByb21pc2U8QnJvd3NlcldpbmRvdz4ge1xuICBzaWduYWw/LnRocm93SWZBYm9ydGVkKCk7XG4gIGxldCB3YXJtdXA6IEJyb3dzZXJXaW5kb3cgfCB1bmRlZmluZWQ7XG4gIGxldCBlcnJvcjogdW5rbm93bjtcbiAgdHJ5IHtcbiAgICB3YXJtdXAgPSBhd2FpdCBvcGVuV2luZG93V2l0aFJldHJ5KHsgc291cmNlLCByZW5kZXJlciwgc2lnbmFsIH0pO1xuICB9IGNhdGNoIChlKSB7XG4gICAgZXJyb3IgPSBlO1xuICB9XG5cbiAgY29uc3Qgb3BlbiA9ICgpID0+IHtcbiAgICByZXR1cm4gb3BlbldpbmRvdyh7XG4gICAgICBzb3VyY2UsXG4gICAgICByZW5kZXJlcixcbiAgICAgIG9uQ3JlYXRlZCxcbiAgICAgIHNpZ25hbCxcbiAgICAgIHRvbGVyYW50OiByZW5kZXJlci53aW5kb3dUb2xlcmFudCxcbiAgICB9KTtcbiAgfTtcblxuICBpZiAocmVuZGVyZXIud2luZG93VG9sZXJhbnQgJiYgZXJyb3IgPT09IFRJTUVPVVRfRVJST1IpIHtcbiAgICBsb2dnZXIud2FybihUQUcsIGB3YXJtdXAgdGltZW91dDogJHtzb3VyY2V9LCBmYWxsaW5nIGJhY2sgdG8gZG9tLXJlYWR5YCk7XG4gICAgcmV0dXJuIGF3YWl0IG9wZW4oKTtcbiAgfVxuXG4gIGlmIChlcnJvcikge1xuICAgIGNvbnN0IHsgbWVzc2FnZSwgc3RhY2sgfSA9IGVycm9yIGFzIEVycm9yO1xuICAgIHRocm93IG5ldyBFcnJvcihgZmFpbGVkIHRvIHdhcm11cCB3aW5kb3c6ICR7SlNPTi5zdHJpbmdpZnkoeyBzb3VyY2UsIG1lc3NhZ2UsIHN0YWNrIH0pfWApO1xuICB9XG5cbiAgaWYgKHdhcm11cCkge1xuICAgIHdhcm11cC53ZWJDb250ZW50cy5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcbiAgICB1bnNldEludGVyY2VwdG9yKHdhcm11cCk7XG4gICAgYXdhaXQgc2xlZXAoMjAwMCk7XG4gICAgYXdhaXQgZGlzcG9zZVdpbmRvdyh3YXJtdXApO1xuICB9XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgb3BlbigpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgY29uc3QgeyBtZXNzYWdlLCBzdGFjayB9ID0gZSBhcyBFcnJvcjtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGZhaWxlZCB0byBsb2FkIHdpbmRvdzogJHtKU09OLnN0cmluZ2lmeSh7IHNvdXJjZSwgbWVzc2FnZSwgc3RhY2sgfSl9YCk7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDkuXG5cbmltcG9ydCB0eXBlIHsgTmF0aXZlSW1hZ2UsIFNpemUgfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IHJlYnVpbGREcmF3YWJsZSB9IGZyb20gXCIuLi9iYXNlL2NkcFwiO1xuaW1wb3J0IHsgRW5jb2RlclBpcGVsaW5lIH0gZnJvbSBcIi4uL2Jhc2UvZW5jb2Rlci9waXBlbGluZVwiO1xuaW1wb3J0IHsgc2l6ZUVxdWFscyB9IGZyb20gXCIuLi9iYXNlL2ltYWdlXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi4vYmFzZS9sb2dnaW5nXCI7XG5pbXBvcnQgeyBCTEFOS19XQVJOX1JBVElPLCBCbGFua1N0YXRzIH0gZnJvbSBcIi4uL2Jhc2UvcXVhbGl0eS9ibGFua1wiO1xuaW1wb3J0IHsgRHJvcFN0YXRzLCBKQU5LX1dBUk5fU0NPUkUgfSBmcm9tIFwiLi4vYmFzZS9xdWFsaXR5L2Ryb3BcIjtcbmltcG9ydCB7IHBlcmlvZGljYWwgfSBmcm9tIFwiLi4vYmFzZS90aW1pbmdcIjtcbmltcG9ydCB7IHR5cGUgQXVkaW9EaXNwb3NhbCwgYXR0YWNoQXVkaW9MaXN0ZW5lcnMgfSBmcm9tIFwiLi9hdWRpb1wiO1xuaW1wb3J0IHR5cGUgeyBJcGNEb25lUGF5bG9hZCB9IGZyb20gXCIuL2lwY1wiO1xuaW1wb3J0IHR5cGUgeyBJUENSZW5kZXJPcHRpb25zIH0gZnJvbSBcIi4vc2NoZW1hXCI7XG5pbXBvcnQgeyBTY3JlZW5zaG90VGFrZXIgfSBmcm9tIFwiLi9zY3JlZW5zaG90XCI7XG5pbXBvcnQgeyBkZWNvZGVTdGVnbywgc3RhcnRTdGVnbyB9IGZyb20gXCIuL3N0ZWdvXCI7XG5pbXBvcnQgeyBkaXNwb3NlV2luZG93LCBsb2FkV2luZG93IH0gZnJvbSBcIi4vd2luZG93XCI7XG5cbmNvbnN0IFRBRyA9IFwiW1JlbmRlcl1cIjtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlbmRlcihvcHRpb25zOiBJUENSZW5kZXJPcHRpb25zKTogUHJvbWlzZTxJcGNEb25lUGF5bG9hZD4ge1xuICBjb25zdCB7IHNvdXJjZSwgZnBzLCB3aWR0aCwgaGVpZ2h0LCBkdXJhdGlvbiwgd2l0aEF1ZGlvLCBvdXRGaWxlcywgZGlzYWJsZUh3Q29kZWMsIHNpZ25hbCwgb25Qcm9ncmVzcyB9ID0gb3B0aW9ucztcblxuICBhd2FpdCB1c2luZyBlbmNvZGVyID0gYXdhaXQgRW5jb2RlclBpcGVsaW5lLmNyZWF0ZSh7IHdpZHRoLCBoZWlnaHQsIGZwcywgb3V0RmlsZXMsIHdpdGhBdWRpbywgZGlzYWJsZUh3Q29kZWMgfSk7XG4gIGNvbnN0IHRha2VyID0gbmV3IFNjcmVlbnNob3RUYWtlcih7IG1hcmtzOiBvcHRpb25zLnNjcmVlbnNob3RzLCB3aWR0aCwgaGVpZ2h0LCBvdXRGaWxlcyB9KTtcblxuICBjb25zdCB0b3RhbCA9IE1hdGguY2VpbChmcHMgKiBkdXJhdGlvbik7XG4gIGNvbnN0IGZyYW1lSW50ZXJ2YWwgPSAxMDAwIC8gZnBzO1xuICBjb25zdCBmcmFtZVNpemU6IFNpemUgPSB7IHdpZHRoLCBoZWlnaHQ6IGhlaWdodCArIDEgfTtcblxuICBsZXQgd3JpdHRlbiA9IDA7XG4gIGxldCBsYXN0RnJhbWU6IEJ1ZmZlciB8IHVuZGVmaW5lZDtcbiAgbGV0IHNjcmVlbnNob3RzOiBzdHJpbmdbXSA9IFtdO1xuICBsZXQgbGFzdFdyaXR0ZW5UaW1lOiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gIGxldCBwcm9ncmVzcyA9IDA7XG4gIGxldCBlbmNvZGVFcnJvcjogRXJyb3IgfCB1bmRlZmluZWQ7XG4gIGxldCByZXNvbHZlcjogKCgpID0+IHZvaWQpIHwgdW5kZWZpbmVkO1xuICBsZXQgcmVqZWN0ZXI6ICgocmVhc29uPzogdW5rbm93bikgPT4gdm9pZCkgfCB1bmRlZmluZWQ7XG4gIGxldCBjbGVhclN0dWNrQ2hlY2s6IFZvaWRGdW5jdGlvbiB8IHVuZGVmaW5lZDtcbiAgY29uc3QgYmxhbmtTdGF0cyA9IG5ldyBCbGFua1N0YXRzKHdpZHRoLCBoZWlnaHQpO1xuICBjb25zdCBkcm9wU3RhdHMgPSBuZXcgRHJvcFN0YXRzKGZwcyk7XG5cbiAgbGV0IGRpc3Bvc2VBdWRpbzogQXVkaW9EaXNwb3NhbCB8IHVuZGVmaW5lZDtcbiAgY29uc3Qgc2NoZWR1bGVGcmFtZSA9IChmcmFtZTogQnVmZmVyKSA9PiB7XG4gICAgd3JpdHRlbisrO1xuICAgIGJsYW5rU3RhdHMuc2FtcGxlKGZyYW1lKTtcbiAgICBlbmNvZGVyLmVuY29kZUJHUkEoZnJhbWUpLmNhdGNoKChlKSA9PiAoZW5jb2RlRXJyb3IgPz89IGUpKTtcbiAgfTtcblxuICBjb25zdCBwYWludCA9IChfZTogdW5rbm93biwgX3I6IHVua25vd24sIGltYWdlOiBOYXRpdmVJbWFnZSkgPT4ge1xuICAgIGVuY29kZUVycm9yID8/PSBzaWduYWw/LnJlYXNvbjtcbiAgICBpZiAoZW5jb2RlRXJyb3IpIHtcbiAgICAgIHJlamVjdGVyPy4oZW5jb2RlRXJyb3IpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGltYWdlU2l6ZSA9IGltYWdlLmdldFNpemUoKTtcbiAgICBpZiAoIXNpemVFcXVhbHMoaW1hZ2VTaXplLCBmcmFtZVNpemUpKSB7XG4gICAgICAvLyBOT1RFKEF1dG9rYWthKTogV2UgbXVzdCBlbnN1cmUgZnJhbWUgaXMgcmVhZHkgb24gZWxlY3Ryb24gdjQxK1xuICAgICAgcmVidWlsZERyYXdhYmxlKHdpbi53ZWJDb250ZW50cywgZnJhbWVTaXplKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBEZWNvZGUgc3RlZ28gdGltZXN0YW1wIGZyb20gdGhlIGJvdHRvbSBwaXhlbCByb3cgd2l0aG91dCBmdWxsIGJpdG1hcCBjb3B5XG4gICAgY29uc3QgYml0bWFwID0gaW1hZ2UudG9CaXRtYXAoKTtcbiAgICBjb25zdCBjdXJyZW50VGltZSA9IGRlY29kZVN0ZWdvKGJpdG1hcCwgaW1hZ2VTaXplKTtcbiAgICBpZiAoY3VycmVudFRpbWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgZW5jb2RlRXJyb3IgPz89IG5ldyBFcnJvcihgbm8gdGltZXN0YW1wIEAgJHt3cml0dGVufWApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFNraXAgZnJhbWVzIHRoYXQgYXJyaXZlIHRvbyBzb29uICg8IDgwJSBvZiBmcmFtZSBpbnRlcnZhbClcbiAgICBpZiAobGFzdFdyaXR0ZW5UaW1lICE9PSB1bmRlZmluZWQgJiYgY3VycmVudFRpbWUgLSBsYXN0V3JpdHRlblRpbWUgPCBmcmFtZUludGVydmFsICogMC44KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY3JvcHBlZCA9IEJ1ZmZlci5mcm9tKGJpdG1hcC5idWZmZXIsIGJpdG1hcC5ieXRlT2Zmc2V0LCBoZWlnaHQgKiB3aWR0aCAqIDQpO1xuICAgIGxhc3RGcmFtZSA9IGNyb3BwZWQ7XG4gICAgdGFrZXIuY2FwdHVyZShjdXJyZW50VGltZSwgY3JvcHBlZCk7XG5cbiAgICBpZiAobGFzdFdyaXR0ZW5UaW1lID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHNjaGVkdWxlRnJhbWUoY3JvcHBlZCk7XG4gICAgICBkcm9wU3RhdHMud3JvdGUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgdGltZURlbHRhID0gY3VycmVudFRpbWUgLSBsYXN0V3JpdHRlblRpbWU7XG4gICAgICBpZiAodGltZURlbHRhIDw9IGZyYW1lSW50ZXJ2YWwgKiAxLjIpIHtcbiAgICAgICAgc2NoZWR1bGVGcmFtZShjcm9wcGVkKTtcbiAgICAgICAgZHJvcFN0YXRzLndyb3RlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBmcmFtZXNUb0luc2VydCA9IE1hdGgucm91bmQodGltZURlbHRhIC8gZnJhbWVJbnRlcnZhbCk7XG4gICAgICAgIGRyb3BTdGF0cy5kcm9wcGVkKGZyYW1lc1RvSW5zZXJ0IC0gMSk7XG4gICAgICAgIGRyb3BTdGF0cy53cm90ZSgpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZyYW1lc1RvSW5zZXJ0ICYmIHdyaXR0ZW4gPCB0b3RhbDsgaSsrKSB7XG4gICAgICAgICAgc2NoZWR1bGVGcmFtZShjcm9wcGVkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBsYXN0V3JpdHRlblRpbWUgPSBjdXJyZW50VGltZTtcblxuICAgIGNvbnN0IG5ld1Byb2dyZXNzID0gTWF0aC5mbG9vcigod3JpdHRlbiAvIHRvdGFsKSAqIDEwMCk7XG4gICAgaWYgKG5ld1Byb2dyZXNzICE9PSBwcm9ncmVzcykge1xuICAgICAgcHJvZ3Jlc3MgPSBuZXdQcm9ncmVzcztcbiAgICAgIG9uUHJvZ3Jlc3MocHJvZ3Jlc3MpO1xuICAgIH1cblxuICAgIGNvbnN0IGR1cmF0aW9uTXMgPSBkdXJhdGlvbiAqIDEwMDA7XG4gICAgaWYgKGN1cnJlbnRUaW1lID49IGR1cmF0aW9uTXMgLSBmcmFtZUludGVydmFsICogMC41IHx8IHdyaXR0ZW4gPj0gdG90YWwpIHtcbiAgICAgIHJlc29sdmVyPy4oKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3Qgd2luID0gYXdhaXQgbG9hZFdpbmRvdyh7XG4gICAgc291cmNlLFxuICAgIHJlbmRlcmVyOiBvcHRpb25zLFxuICAgIHNpZ25hbCxcbiAgICBvbkNyZWF0ZWQ6ICh3aW4pID0+IHtcbiAgICAgIGlmICh3aXRoQXVkaW8pIHtcbiAgICAgICAgZGlzcG9zZUF1ZGlvID0gYXR0YWNoQXVkaW9MaXN0ZW5lcnMoe1xuICAgICAgICAgIHdjOiB3aW4ud2ViQ29udGVudHMsXG4gICAgICAgICAgZW5jb2RlcixcbiAgICAgICAgICBnZXRWaWRlb1RpbWVNczogKCkgPT4gbGFzdFdyaXR0ZW5UaW1lID8/IDAsXG4gICAgICAgICAgb25FcnJvcjogKGU6IEVycm9yKSA9PiAoZW5jb2RlRXJyb3IgPz89IGUpLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LFxuICB9KTtcbiAgY29uc3QgY2RwID0gd2luLndlYkNvbnRlbnRzLmRlYnVnZ2VyO1xuXG4gIHRyeSB7XG4gICAgd2luLndlYkNvbnRlbnRzLnN0b3BQYWludGluZygpO1xuICAgIHdpbi53ZWJDb250ZW50cy5zZXRGcmFtZVJhdGUoZnBzKTtcbiAgICB3aW4ud2ViQ29udGVudHMub24oXCJwYWludFwiLCBwYWludCk7XG4gICAgd2luLndlYkNvbnRlbnRzLnN0YXJ0UGFpbnRpbmcoKTtcbiAgICBzaWduYWw/LnRocm93SWZBYm9ydGVkKCk7XG4gICAgc2lnbmFsPy5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgKCkgPT4gcmVqZWN0ZXI/LihzaWduYWwucmVhc29uKSwgeyBvbmNlOiB0cnVlIH0pO1xuICAgIGF3YWl0IHN0YXJ0U3RlZ28oY2RwKTtcbiAgICBhd2FpdCBuZXcgUHJvbWlzZTx2b2lkPigociwgaikgPT4ge1xuICAgICAgW3Jlc29sdmVyLCByZWplY3Rlcl0gPSBbciwgal07XG4gICAgICBsZXQgbGFzdFdyaXR0ZW4gPSAwO1xuICAgICAgbGV0IHN0dWNrID0gMDtcbiAgICAgIGNsZWFyU3R1Y2tDaGVjayA9IHBlcmlvZGljYWwoYXN5bmMgKCkgPT4ge1xuICAgICAgICBpZiAod3JpdHRlbiAhPT0gbGFzdFdyaXR0ZW4pIHtcbiAgICAgICAgICBsYXN0V3JpdHRlbiA9IHdyaXR0ZW47XG4gICAgICAgICAgc3R1Y2sgPSAwO1xuICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgc3R1Y2srKztcbiAgICAgICAgaWYgKHN0dWNrID49IGZwcykge1xuICAgICAgICAgIHJlamVjdGVyPy4obmV3IEVycm9yKGByZW5kZXJlciBzdGFsbGVkIGZvciAke01hdGgucm91bmQoKHN0dWNrICogMTAwMCkgLyBmcHMpfW1zIEAgJHt3cml0dGVufWApKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdHVjayA9PT0gMSB8fCBzdHVjayA9PT0gTWF0aC5mbG9vcihmcHMgLyAyKSkge1xuICAgICAgICAgIGF3YWl0IHJlYnVpbGREcmF3YWJsZSh3aW4ud2ViQ29udGVudHMsIGZyYW1lU2l6ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH0sIDEwMDAgLyBmcHMpO1xuICAgIH0pO1xuICB9IGZpbmFsbHkge1xuICAgIGNsZWFyU3R1Y2tDaGVjaz8uKCk7XG4gICAgd2luLndlYkNvbnRlbnRzLm9mZihcInBhaW50XCIsIHBhaW50KTtcbiAgICBhd2FpdCBkaXNwb3NlV2luZG93KHdpbik7XG4gICAgZGlzcG9zZUF1ZGlvPy4oKTtcbiAgICBhd2FpdCBlbmNvZGVyLmZpbmlzaCgpO1xuICAgIHNjcmVlbnNob3RzID0gYXdhaXQgdGFrZXIuZmluaXNoKGxhc3RGcmFtZSk7XG4gIH1cblxuICBpZiAoZW5jb2RlRXJyb3IgfHwgd3JpdHRlbiA9PT0gMCkge1xuICAgIHRocm93IGVuY29kZUVycm9yID8/IG5ldyBFcnJvcihcIm5vIGZyYW1lcyBjYXB0dXJlZFwiKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBibGFuayA9IGJsYW5rU3RhdHMuZmluYWxpemUoKTtcbiAgICBpZiAoYmxhbmsgPj0gQkxBTktfV0FSTl9SQVRJTykge1xuICAgICAgbG9nZ2VyLndhcm4oVEFHLCBgJHtzb3VyY2V9IGJsYW5rLWZyYW1lIHJhdGlvICR7TWF0aC5yb3VuZChibGFuayAqIDEwMCl9JSDigJQgcG9zc2libGUgd2hpdGUvYmxhbmsgc2NyZWVuYCk7XG4gICAgfVxuICAgIGNvbnN0IHsgamFuayB9ID0gZHJvcFN0YXRzLmZpbmFsaXplKCk7XG4gICAgaWYgKGphbmsgPj0gSkFOS19XQVJOX1NDT1JFKSB7XG4gICAgICBsb2dnZXIud2FybihUQUcsIGAke3NvdXJjZX0gamFuayBzY29yZSAke2phbmsudG9GaXhlZCgyKX0g4oCUIGRyb3BwZWQgZnJhbWVzYCk7XG4gICAgfVxuICAgIHJldHVybiB7IHdyaXR0ZW4sIG91dEZpbGVzLCBibGFuaywgc2NyZWVuc2hvdHMsIGphbmsgfTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBMdSBBbyAobHVhb0BiaWxpYmlsaS5jb20pIG9uIDIwMjYvMDgvMjEuXG5cbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuLi9iYXNlL2xvZ2dpbmdcIjtcblxuY29uc3QgVEFHID0gXCJbUmVyZW5kZXJdXCI7XG5cbmV4cG9ydCBjb25zdCBNQVhfUkVOREVSX0FUVEVNUFRTID0gMztcblxuLy8gQW55IHJlbmRlciBmYWlsdXJlIGVhcm5zIGEgZnJlc2ggd2luZG93K2NvbXBvc2l0b3IgYXR0ZW1wdDsgYWJvcnRzIHN0aWxsIHN0b3AgdGhlIGxvb3AuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd2l0aFJlcmVuZGVyPFQ+KHNpZ25hbDogQWJvcnRTaWduYWwsIGFjdGlvbjogKCkgPT4gUHJvbWlzZTxUPik6IFByb21pc2U8VD4ge1xuICBsZXQgbGFzdEVycjogdW5rbm93bjtcbiAgZm9yIChsZXQgYXR0ZW1wdCA9IDE7IGF0dGVtcHQgPD0gTUFYX1JFTkRFUl9BVFRFTVBUUzsgYXR0ZW1wdCsrKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCBhY3Rpb24oKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBzaWduYWwudGhyb3dJZkFib3J0ZWQoKTtcbiAgICAgIGxhc3RFcnIgPSBlO1xuICAgICAgbG9nZ2VyLndhcm4oVEFHLCBgcmV0cnkgJHthdHRlbXB0fS8ke01BWF9SRU5ERVJfQVRURU1QVFN9OiAkeyhlIGFzIEVycm9yKS5tZXNzYWdlfWApO1xuICAgIH1cbiAgfVxuICB0aHJvdyBsYXN0RXJyO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNS8xOC5cblxuaW1wb3J0IHR5cGUgeyBXZWJGcmFtZU1haW4gfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuLi8uLi9iYXNlL2xvZ2dpbmdcIjtcbmltcG9ydCB7IGFib3J0YWJsZSB9IGZyb20gXCIuLi8uLi9iYXNlL3RpbWluZ1wiO1xuXG5jb25zdCBUQUcgPSBcIltWaWRlb11cIjtcblxuZXhwb3J0IGludGVyZmFjZSBBZHZhbmNlT3B0aW9ucyB7XG4gIGZyYW1lOiBXZWJGcmFtZU1haW4gfCB1bmRlZmluZWQ7XG4gIHRpbWVzdGFtcE1zOiBudW1iZXI7XG4gIHNpZ25hbD86IEFib3J0U2lnbmFsO1xufVxuXG4vLyBPbmx5IHRoZSBkZXRlcm1pbmlzdGljIHJlbmRlcmVyIChzaG9vdCkgZHJpdmVzIHRoaXM7IHJlYWwtdGltZSB2aWRlb3Mgc2VsZi10aWNrIHZpYSByQUYgaW4gdGhlIHBhZ2UuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYWR2YW5jZVZpZGVvcyh7IGZyYW1lLCB0aW1lc3RhbXBNcywgc2lnbmFsIH06IEFkdmFuY2VPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmICghZnJhbWU/LnVybCkge1xuICAgIHJldHVybjtcbiAgfVxuICBzaWduYWw/LnRocm93SWZBYm9ydGVkKCk7XG4gIHRyeSB7XG4gICAgYXdhaXQgYWJvcnRhYmxlKFxuICAgICAgZnJhbWUuZXhlY3V0ZUphdmFTY3JpcHQoXG4gICAgICAgIGB3aW5kb3cuX19wdXBfdmlkZW9fXyYmKGFzeW5jKCk9Pnthd2FpdCBfX3B1cF92aWRlb19fLnJlYWR5KCk7YXdhaXQgX19wdXBfdmlkZW9fXy5hZHZhbmNlKCR7dGltZXN0YW1wTXN9KX0pKClgLFxuICAgICAgKSxcbiAgICAgIHNpZ25hbCxcbiAgICApO1xuICB9IGNhdGNoIChlKSB7XG4gICAgc2lnbmFsPy50aHJvd0lmQWJvcnRlZCgpO1xuICAgIGxvZ2dlci53YXJuKFRBRywgYGFkdmFuY2Ugc2tpcHBlZDogJHtlIGluc3RhbmNlb2YgRXJyb3IgPyBlLm1lc3NhZ2UgOiBTdHJpbmcoZSl9YCk7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMDEuXG5cbmltcG9ydCB7IHdpdGhUaW1lb3V0IH0gZnJvbSBcIi4uL2Jhc2UvdGltaW5nXCI7XG5pbXBvcnQgeyB0eXBlIEFkdmFuY2VPcHRpb25zLCBhZHZhbmNlVmlkZW9zIH0gZnJvbSBcIi4vdmlkZW8vYWR2YW5jZVwiO1xuXG5leHBvcnQgY29uc3QgVElDS19TWU1CT0wgPSBcIl9fcHVwX3RpY2tfX1wiO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdGljayhhcmdzOiBBZHZhbmNlT3B0aW9ucykge1xuICBjb25zdCB7IGZyYW1lLCB0aW1lc3RhbXBNcyB9ID0gYXJncztcbiAgaWYgKCFmcmFtZSkge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBleHByID0gYHdpbmRvdy4ke1RJQ0tfU1lNQk9MfSYmd2luZG93LiR7VElDS19TWU1CT0x9LnByb2Nlc3MoJHt0aW1lc3RhbXBNc30pYDtcbiAgY29uc3QgdGlja0V2ID0gZnJhbWUuZXhlY3V0ZUphdmFTY3JpcHQoZXhwcik7XG4gIGF3YWl0IFByb21pc2UuYWxsKFt3aXRoVGltZW91dCh0aWNrRXYsIDVfMDAwLCBcInRpY2suZXhlY3V0ZUphdmFTY3JpcHRcIiksIGFkdmFuY2VWaWRlb3MoYXJncyldKTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDYvMjMuXG5cbmltcG9ydCB7IERlbXV4ZXIsIHR5cGUgRGVtdXhlck9wdGlvbnMgfSBmcm9tIFwibm9kZS1hdi9hcGlcIjtcblxuLy8gZmZtcGVnIHJlYWQvd3JpdGUgZGVhZGxpbmUgKMK1cyk7IGEgYmxvY2tpbmcgb3BlbiBpZ25vcmVzIEFib3J0U2lnbmFsLCBzbyB0aGlzIGJvdW5kcyBhIHN0dWNrIENETi5cbmNvbnN0IFJXX1RJTUVPVVRfVVMgPSBcIjgwMDAwMDBcIjtcblxuLy8gZmZtcGVnIG9wZW5zIGh0dHAvaHR0cHMgd2l0aCBuYXRpdmUgYnl0ZS1yYW5nZSByZXF1ZXN0cywgc28gb25seSB0aGUgZGVjb2RlZCByYW5nZXMgZG93bmxvYWQuXG5leHBvcnQgZnVuY3Rpb24gb3BlbklucHV0KHNyYzogc3RyaW5nLCBzaWduYWw/OiBBYm9ydFNpZ25hbCk6IFByb21pc2U8RGVtdXhlcj4ge1xuICBjb25zdCBvcHRpb25zOiBEZW11eGVyT3B0aW9ucyA9IHsgc2lnbmFsLCBvcHRpb25zOiB7IHJ3X3RpbWVvdXQ6IFJXX1RJTUVPVVRfVVMgfSB9O1xuICByZXR1cm4gRGVtdXhlci5vcGVuKHNyYywgb3B0aW9ucyk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA2LzI1LlxuXG5pbXBvcnQgdHlwZSB7IEZyYW1lIH0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB7IERlY29kZXIsIEZpbHRlckFQSSB9IGZyb20gXCJub2RlLWF2L2FwaVwiO1xuaW1wb3J0IHsgQVZNRURJQV9UWVBFX1ZJREVPLCBBVlNFRUtfRkxBR19CQUNLV0FSRCB9IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4uLy4uL2Jhc2UvbG9nZ2luZ1wiO1xuaW1wb3J0IHR5cGUgeyBWaWRlb01ldGEgfSBmcm9tIFwiLi9mcmFtZV9zZXJ2ZXJcIjtcbmltcG9ydCB7IG9wZW5JbnB1dCB9IGZyb20gXCIuL29wZW5cIjtcblxuY29uc3QgVEFHID0gXCJbRGVjb2RlXVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIERlY29kZWRGcmFtZSB7XG4gIGlkeDogbnVtYmVyO1xuICBidWY6IEJ1ZmZlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEZWNvZGVGcmFtZXNPcHRpb25zIHtcbiAgc3JjOiBzdHJpbmc7XG4gIG1ldGE6IFZpZGVvTWV0YTtcbiAgc2lnbmFsOiBBYm9ydFNpZ25hbDtcbiAgLyoqIDEtYmFzZWQgY29udGVudCBmcmFtZSB0byByZXN1bWUgZGVjb2RpbmcgZnJvbTsgYSBmYWlsZWQgc2VlayBmYWxscyBiYWNrIHRvIGRlY29kaW5nIHRoZSB3aG9sZSBoZWFkLiAqL1xuICBmcm9tSWR4PzogbnVtYmVyO1xufVxuXG4vLyBEZWNvZGUgYSBzb3VyY2UgdG8gZnBzLXJlc2FtcGxlZCwgZGlzcGxheS1zY2FsZWQsIHRpZ2h0LVJHQkEgZnJhbWVzIChpZHggPSAxLWJhc2VkIGNvbnRlbnQgcG9zaXRpb24gcGFzdCB0aGUgbGVhZCBnYXApLiBDb25zdW1lciBiYWNrcHJlc3N1cmUgaXMganVzdCBwdWxsaW5nIHNsb3dlci5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiogZGVjb2RlRnJhbWVzKHsgc3JjLCBtZXRhLCBzaWduYWwsIGZyb21JZHggfTogRGVjb2RlRnJhbWVzT3B0aW9ucyk6IEFzeW5jR2VuZXJhdG9yPERlY29kZWRGcmFtZT4ge1xuICBhd2FpdCB1c2luZyBpbnB1dCA9IGF3YWl0IG9wZW5JbnB1dChzcmMsIHNpZ25hbCk7XG4gIGxldCByZXN1bWVBdDogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICBpZiAoZnJvbUlkeCAhPT0gdW5kZWZpbmVkICYmIGZyb21JZHggPiAxKSB7XG4gICAgY29uc3QgdGFyZ2V0ID0gbWV0YS5sZWFkR2FwICsgKGZyb21JZHggLSAxKSAvIG1ldGEuZnBzO1xuICAgIGlmICgoYXdhaXQgaW5wdXQuc2Vlayh0YXJnZXQsIC0xLCBBVlNFRUtfRkxBR19CQUNLV0FSRCkpID09PSAwKSB7XG4gICAgICByZXN1bWVBdCA9IGZyb21JZHg7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvZ2dlci53YXJuKFRBRywgYHNlZWsgdG8gZnJhbWUgJHtmcm9tSWR4fSBmYWlsZWQsIGRlY29kaW5nIGZyb20gaGVhZGApO1xuICAgIH1cbiAgfVxuICBjb25zdCBzdHJlYW0gPSBpbnB1dC5zdHJlYW1zPy5maW5kKChzKSA9PiBzLmNvZGVjcGFyLmNvZGVjVHlwZSA9PT0gQVZNRURJQV9UWVBFX1ZJREVPKTtcbiAgaWYgKCFzdHJlYW0pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJubyB2aWRlbyBzdHJlYW1cIik7XG4gIH1cbiAgLy8gU29mdHdhcmUgZGVjb2RlIHdpdGggYXV0by1kZXRlY3RlZCB0aHJlYWRzIChmZm1wZWcncyBkZWZhdWx0IG9mIDEgbGVhdmVzIG1vc3QgY29yZXMgaWRsZSBvbiAxMDgwcCkuXG4gIHVzaW5nIGRlYyA9IGF3YWl0IERlY29kZXIuY3JlYXRlKHN0cmVhbSwgeyBzaWduYWwsIHRocmVhZENvdW50OiAwIH0pO1xuICBjb25zdCB7IGZyYW1lV2lkdGgsIGZyYW1lSGVpZ2h0LCB3aWR0aCwgaGVpZ2h0LCBmcHMgfSA9IG1ldGE7XG4gIGNvbnN0IHNjYWxlID0gZnJhbWVXaWR0aCAhPT0gd2lkdGggfHwgZnJhbWVIZWlnaHQgIT09IGhlaWdodCA/IGBzY2FsZT0ke2ZyYW1lV2lkdGh9OiR7ZnJhbWVIZWlnaHR9LGAgOiBcIlwiO1xuICAvLyBPZGQgbmF0aXZlIHdpZHRocyAoMTkyMiBldGMpIGhhdmUgbm8gTkVPTiBzd3NjYWxlIHBhdGg7IHBhZC1yaWdodCB0byAxNi1hbGlnbmVkIGFuZCB0cmltIGluIHBhY2tSZ2JhLlxuICBjb25zdCBhbGlnbiA9IChuOiBudW1iZXIpOiBudW1iZXIgPT4gTWF0aC5jZWlsKG4gLyAxNikgKiAxNjtcbiAgY29uc3QgcGFkID1cbiAgICBzY2FsZSA9PT0gXCJcIiAmJiAoZnJhbWVXaWR0aCAlIDE2ICE9PSAwIHx8IGZyYW1lSGVpZ2h0ICUgMTYgIT09IDApXG4gICAgICA/IGBwYWQ9JHthbGlnbihmcmFtZVdpZHRoKX06JHthbGlnbihmcmFtZUhlaWdodCl9OjA6MCxgXG4gICAgICA6IFwiXCI7XG4gIHVzaW5nIGZpbHRlciA9IEZpbHRlckFQSS5jcmVhdGUoYGZwcz0ke2Zwc30sJHtzY2FsZX0ke3BhZH1mb3JtYXQ9cmdiYWAsIHsgc2lnbmFsIH0pO1xuICBsZXQgayA9IDA7XG4gIGxldCBwcmV2SyA9IDA7XG4gIGZvciBhd2FpdCAodXNpbmcgZnJhbWUgb2YgZmlsdGVyLmZyYW1lcyhkZWMuZnJhbWVzKGlucHV0LnBhY2tldHMoc3RyZWFtLmluZGV4KSkpKSB7XG4gICAgaWYgKCFmcmFtZSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChyZXN1bWVBdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCB0YiA9IGZyYW1lLnRpbWVCYXNlLm51bSAvIGZyYW1lLnRpbWVCYXNlLmRlbjtcbiAgICAgIGNvbnN0IHRzID0gZnJhbWUuYmVzdEVmZm9ydFRpbWVzdGFtcCA/PyBmcmFtZS5wdHM7XG4gICAgICBpZiAodHMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGF0ID0gTWF0aC5yb3VuZCgoTnVtYmVyKHRzKSAqIHRiIC0gbWV0YS5sZWFkR2FwKSAqIG1ldGEuZnBzKSArIDE7XG4gICAgICBpZiAoYXQgPCBwcmV2Sykge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHByZXZLID0gYXQ7XG4gICAgICBpZiAoYXQgPCByZXN1bWVBdCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGsgPSBhdDtcbiAgICB9IGVsc2Uge1xuICAgICAgaysrO1xuICAgIH1cbiAgICB5aWVsZCB7IGlkeDogaywgYnVmOiBwYWNrUmdiYShmcmFtZSwgZnJhbWVXaWR0aCwgZnJhbWVIZWlnaHQpIH07XG4gIH1cbn1cblxuLy8gVGlnaHQgUkdCQSBvZiB0aGUgdG9wLWxlZnQgb3V0V8OXb3V0SCByZWdpb24gKGRyb3BzIGxpYmF2IHJvdyBwYWRkaW5nIGFuZCBhbnkgcGFkLXJpZ2h0L2JvdHRvbSBwbGFuZXMpLlxuZnVuY3Rpb24gcGFja1JnYmEoZnJhbWU6IEZyYW1lLCBvdXRXOiBudW1iZXIsIG91dEg6IG51bWJlcik6IEJ1ZmZlciB7XG4gIGNvbnN0IHJvdyA9IG91dFcgKiA0O1xuICBjb25zdCBzdHJpZGUgPSBmcmFtZS5saW5lc2l6ZVswXSE7XG4gIGNvbnN0IHNyYyA9IGZyYW1lLmRhdGEhWzBdITtcbiAgaWYgKHN0cmlkZSA9PT0gcm93ICYmIGZyYW1lLmhlaWdodCA9PT0gb3V0SCkge1xuICAgIHJldHVybiBCdWZmZXIuZnJvbShzcmMuc3ViYXJyYXkoMCwgcm93ICogb3V0SCkpO1xuICB9XG4gIGNvbnN0IG91dCA9IEJ1ZmZlci5hbGxvY1Vuc2FmZShyb3cgKiBvdXRIKTtcbiAgZm9yIChsZXQgeSA9IDA7IHkgPCBvdXRIOyB5KyspIHtcbiAgICBzcmMuY29weShvdXQsIHkgKiByb3csIHkgKiBzdHJpZGUsIHkgKiBzdHJpZGUgKyByb3cpO1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA5LzAyLlxuXG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi4vLi4vYmFzZS9sb2dnaW5nXCI7XG5pbXBvcnQgeyBkZWNvZGVGcmFtZXMgfSBmcm9tIFwiLi9kZWNvZGVcIjtcbmltcG9ydCB0eXBlIHsgVmlkZW9NZXRhIH0gZnJvbSBcIi4vZnJhbWVfc2VydmVyXCI7XG5cbmNvbnN0IFRBRyA9IFwiW0RlY29kZVNlc3Npb25dXCI7XG5jb25zdCBERUNPREVfQUhFQUQgPSA0OyAvLyBkZWNvZGUgYSBmZXcgZnJhbWVzIHBhc3QgdGhlIGhpZ2hlc3QgcmVxdWVzdDsgdGhlIHBhZ2UgYWxyZWFkeSBwcmVmZXRjaGVzXG5jb25zdCBLRUVQX0JFSElORCA9IDE2OyAvLyBtaW4gZnJhbWVzIGhlbGQgYmVoaW5kIHRoZSBoZWFkOyBtdXN0IGV4Y2VlZCB0aGUgcGFnZSdzIHByZWZldGNoIGxlYWRcbmNvbnN0IE1FTU9SWV9CVURHRVQgPSAyNTYgKiAxMDI0ICogMTAyNDsgLy8gZGVjb2RlZC1mcmFtZSBidWRnZXQgcGVyIHNlc3Npb246IGEgc21hbGwgbG9vcCByZS1zZXJ2ZXMgZnJvbSBtZW1vcnlcbmNvbnN0IE1BWF9QQVNTX1JFVFJZID0gMzsgLy8gcmUtb3BlbiBhIHN0cmVhbWVkIHNvdXJjZSB0aGlzIG1hbnkgdGltZXMgb24gYSB0cmFuc2llbnQgZGVjb2RlIGVycm9yIGJlZm9yZSBFT0ZcblxuLy8gQSBzb3VyY2UgcGxheXMgb24gaXRzIG93biBjbG9jazogdGhlIHB1bXAgZmlsbHMgYSBmcmFtZSBzdG9yZSBhaGVhZCBvZiBkZW1hbmQ7IGdldEZyYW1lIHdhaXRzIGZvciBpdHMgZnJhbWUuXG5pbnRlcmZhY2UgRnJhbWVXYWl0ZXIge1xuICBpZHg6IG51bWJlcjtcbiAgcmVzb2x2ZTogKHdha2U6IFwid2FrZVwiIHwgXCJjYW5jZWxcIikgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGNsYXNzIERlY29kZVNlc3Npb24ge1xuICBwcml2YXRlIF9idWYgPSBuZXcgTWFwPG51bWJlciwgQnVmZmVyPigpO1xuICBwcml2YXRlIF9yZWFkeSA9IDA7XG4gIHByaXZhdGUgX3dhbnQgPSAxO1xuICBwcml2YXRlIF9kb25lID0gZmFsc2U7XG4gIHByaXZhdGUgX2Nsb3NlZCA9IGZhbHNlO1xuICBwcml2YXRlIF9nZW4gPSAwO1xuICBwcml2YXRlIF9jdHJsID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICBwcml2YXRlIF9yZXN1bWU6ICgoKSA9PiB2b2lkKSB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSBfcmVzdGFydDogKCgpID0+IHZvaWQpIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIHJlYWRvbmx5IF93YWl0ZXJzID0gbmV3IFNldDxGcmFtZVdhaXRlcj4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfbGVhZEZyYW1lczogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9rZWVwQ291bnQ6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfc2Vla0p1bXA6IG51bWJlcjtcbiAgcHJpdmF0ZSBfc2Vla1RvPzogbnVtYmVyO1xuICBwcml2YXRlIF9wYXNzRnJvbSA9IDE7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3B1bXBEb25lOiBQcm9taXNlPHZvaWQ+O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHJlYWRvbmx5IG1ldGE6IFZpZGVvTWV0YSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9zcmM6IHN0cmluZyxcbiAgKSB7XG4gICAgdGhpcy5fbGVhZEZyYW1lcyA9IE1hdGgucm91bmQobWV0YS5sZWFkR2FwICogbWV0YS5mcHMpO1xuICAgIHRoaXMuX2tlZXBDb3VudCA9IE1hdGgubWF4KEtFRVBfQkVISU5ELCBNYXRoLmZsb29yKE1FTU9SWV9CVURHRVQgLyAobWV0YS5mcmFtZVdpZHRoICogbWV0YS5mcmFtZUhlaWdodCAqIDQpKSk7XG4gICAgdGhpcy5fc2Vla0p1bXAgPSBNYXRoLm1heCgyICogbWV0YS5mcHMsIERFQ09ERV9BSEVBRCAqIDIpO1xuICAgIHRoaXMuX3B1bXBEb25lID0gdGhpcy5wdW1wKCk7XG4gIH1cblxuICAvLyBXYWl0cyBmb3IgdGhlIGZyYW1lIHRvIGxhbmQ6IHBhaW50cyBwYWNlIHRoZSB2aXJ0dWFsIGNsb2NrLCBzbyBzdGFsbCBpbnN0ZWFkIG9mIHBhaW50aW5nIGJsYWNrLlxuICBhc3luYyBnZXRGcmFtZShyYXc6IG51bWJlcik6IFByb21pc2U8QnVmZmVyIHwgdW5kZWZpbmVkPiB7XG4gICAgY29uc3QgaWR4ID0gcmF3IDw9IHRoaXMuX2xlYWRGcmFtZXMgPyB0aGlzLl9sZWFkRnJhbWVzICsgMSA6IHJhdzsgLy8gaG9sZCB0aGUgZmlyc3QgZnJhbWUgYWNyb3NzIHRoZSBsZWFkXG4gICAgZm9yICg7Oykge1xuICAgICAgY29uc3QgaGl0ID0gdGhpcy5fYnVmLmdldChpZHgpO1xuICAgICAgaWYgKGhpdCkge1xuICAgICAgICByZXR1cm4gaGl0O1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuX2Nsb3NlZCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuX2RvbmUgJiYgaWR4ID4gdGhpcy5fcmVhZHkpIHtcbiAgICAgICAgcmV0dXJuIEJ1ZmZlci5hbGxvYygwKTsgLy8gYmV5b25kIGVuZCBvZiBzdHJlYW1cbiAgICAgIH1cbiAgICAgIHRoaXMuX3dhbnQgPSBNYXRoLm1heCh0aGlzLl93YW50LCBpZHgpO1xuICAgICAgaWYgKHRoaXMubXVzdFJlcG9pbnQoaWR4KSkge1xuICAgICAgICB0aGlzLnJlcXVlc3RSZXN0YXJ0KGlkeCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLndha2UoKTtcbiAgICAgIH1cbiAgICAgIGlmICgoYXdhaXQgdGhpcy53YWl0RXZlbnQoaWR4KSkgPT09IFwiY2FuY2VsXCIpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDsgLy8gc3RhbGUgZGVtYW5kIGRyb3BwZWQgYnkgYSByZXN0YXJ0IChzZWUgcmVxdWVzdFJlc3RhcnQpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBtdXN0UmVwb2ludChpZHg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLl9zZWVrVG8gIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gQSByZS1wb2ludCBpcyBxdWV1ZWQgYnV0IG5vdCBzdGFydGVkOiBvbmx5IGEgbG93ZXIgdGFyZ2V0IG1heSBkaXNwbGFjZSBpdCwgb3Igd2FpdGVycyBib3VuY2UgZm9yZXZlci5cbiAgICAgIHJldHVybiBpZHggPCB0aGlzLl9zZWVrVG87XG4gICAgfVxuICAgIGNvbnN0IGZyb20gPSB0aGlzLl9wYXNzRnJvbTtcbiAgICByZXR1cm4gaWR4IDwgZnJvbSB8fCBpZHggPD0gdGhpcy5fcmVhZHkgfHwgaWR4ID4gTWF0aC5tYXgodGhpcy5fcmVhZHksIGZyb20pICsgdGhpcy5fc2Vla0p1bXA7XG4gIH1cblxuICBhc3luYyBjbG9zZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLl9jbG9zZWQgPSB0cnVlO1xuICAgIHRoaXMuX2RvbmUgPSB0cnVlO1xuICAgIHRoaXMuX2N0cmwuYWJvcnQoKTtcbiAgICB0aGlzLnJlcXVlc3RSZXN0YXJ0KCk7XG4gICAgdGhpcy5fYnVmLmNsZWFyKCk7XG4gICAgYXdhaXQgdGhpcy5fcHVtcERvbmU7XG4gIH1cblxuICBwcml2YXRlIHdha2UoKTogdm9pZCB7XG4gICAgY29uc3QgciA9IHRoaXMuX3Jlc3VtZTtcbiAgICB0aGlzLl9yZXN1bWUgPSB1bmRlZmluZWQ7XG4gICAgcj8uKCk7XG4gIH1cblxuICBwcml2YXRlIHdhaXRFdmVudChpZHg6IG51bWJlcik6IFByb21pc2U8XCJ3YWtlXCIgfCBcImNhbmNlbFwiPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPFwid2FrZVwiIHwgXCJjYW5jZWxcIj4oKHJlc29sdmUpID0+IHRoaXMuX3dhaXRlcnMuYWRkKHsgaWR4LCByZXNvbHZlIH0pKTtcbiAgfVxuXG4gIC8vIEJyb2FkY2FzdCBkZWNvZGUgcHJvZ3Jlc3MgKGZyYW1lIHN0b3JlZCAvIHBhc3MgZG9uZSAvIHJlc3RhcnQgLyBjbG9zZSkgdG8gd2FpdGluZyBnZXRGcmFtZXMuXG4gIHByaXZhdGUgc2lnbmFsKCk6IHZvaWQge1xuICAgIGZvciAoY29uc3QgdyBvZiB0aGlzLl93YWl0ZXJzKSB7XG4gICAgICB3LnJlc29sdmUoXCJ3YWtlXCIpO1xuICAgIH1cbiAgICB0aGlzLl93YWl0ZXJzLmNsZWFyKCk7XG4gIH1cblxuICBwcml2YXRlIHJlcXVlc3RSZXN0YXJ0KHRhcmdldD86IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuX3NlZWtUbyA9IHRhcmdldDtcbiAgICB0aGlzLl9nZW4rKztcbiAgICAvLyBEcm9wIHdhaXRlcnMgYSByZXN0YXJ0IGxlYXZlcyBmYXIgYmVoaW5kOiB0aGV5IG9ubHkgcmUtcmFpc2UgX3dhbnQgYW5kIGRyYWcgdGhlIHBhc3MgdG8gdGhlIHRhaWwuXG4gICAgaWYgKHRhcmdldCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBmb3IgKGNvbnN0IHcgb2YgdGhpcy5fd2FpdGVycykge1xuICAgICAgICBpZiAody5pZHggPiB0YXJnZXQgKyB0aGlzLl9rZWVwQ291bnQpIHtcbiAgICAgICAgICB0aGlzLl93YWl0ZXJzLmRlbGV0ZSh3KTtcbiAgICAgICAgICB3LnJlc29sdmUoXCJjYW5jZWxcIik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgciA9IHRoaXMuX3Jlc3RhcnQ7XG4gICAgdGhpcy5fcmVzdGFydCA9IHVuZGVmaW5lZDtcbiAgICByPy4oKTtcbiAgICB0aGlzLndha2UoKTtcbiAgICB0aGlzLnNpZ25hbCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBwdW1wKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGxldCBmYWlscyA9IDA7XG4gICAgd2hpbGUgKCF0aGlzLl9jbG9zZWQpIHtcbiAgICAgIGNvbnN0IGdlbiA9IHRoaXMuX2dlbjtcbiAgICAgIHRoaXMuX3JlYWR5ID0gMDtcbiAgICAgIHRoaXMuX2RvbmUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2J1Zi5jbGVhcigpO1xuICAgICAgbGV0IGZhaWxlZCA9IGZhbHNlO1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGhpcy5kZWNvZGVQYXNzKGdlbik7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlmICghdGhpcy5fY2xvc2VkICYmIHRoaXMuX2dlbiA9PT0gZ2VuKSB7XG4gICAgICAgICAgZmFpbGVkID0gdHJ1ZTtcbiAgICAgICAgICBsb2dnZXIud2FybihcbiAgICAgICAgICAgIFRBRyxcbiAgICAgICAgICAgIGBbJHt0aGlzLm1ldGEuaWQuc2xpY2UoMCwgOCl9XSBkZWNvZGUgcGFzcyBmYWlsZWQ6ICR7ZSBpbnN0YW5jZW9mIEVycm9yID8gZS5tZXNzYWdlIDogU3RyaW5nKGUpfWAsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHRoaXMuX2Nsb3NlZCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLl9nZW4gIT09IGdlbikge1xuICAgICAgICBmYWlscyA9IDA7XG4gICAgICAgIGNvbnRpbnVlOyAvLyByZXN0YXJ0IHJlcXVlc3RlZCBtaWQtcGFzc1xuICAgICAgfVxuICAgICAgLy8gQSB0aHJvd24gcGFzcyBpcyBhIHRyYW5zaWVudCBzb3VyY2UgZXJyb3IgKGUuZy4gYSBzdHJlYW1lZCBsb29wIHJlLW9wZW4pOyByZXRyeSwgZWxzZSBFT0Ygd291bGQgYmxhbmsgdGhlIGZyYW1lLlxuICAgICAgaWYgKGZhaWxlZCAmJiArK2ZhaWxzIDw9IE1BWF9QQVNTX1JFVFJZKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgZmFpbHMgPSAwO1xuICAgICAgdGhpcy5fZG9uZSA9IHRydWU7XG4gICAgICB0aGlzLnNpZ25hbCgpO1xuICAgICAgYXdhaXQgdGhpcy51bnRpbFJlc3RhcnQoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGRlY29kZVBhc3MoZ2VuOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBBIHNlZWsgd2hvc2UgdGFyZ2V0IG92ZXJzaG9vdHMgdGhlIGxhc3QgZnJhbWUgeWllbGRzIG5vdGhpbmc7IG9uZSByZXRyeSBmcm9tIGhlYWQgYmVhdHMgYSBmYWxzZSBFT0YuXG4gICAgZm9yIChsZXQgYXR0ZW1wdCA9IDA7IGF0dGVtcHQgPCAyOyBhdHRlbXB0KyspIHtcbiAgICAgIGNvbnN0IGZyb20gPSB0aGlzLl9zZWVrVG87IC8vIHJlc3RhcnQgdGFyZ2V0IGluIHBhZ2UtZnJhbWUgc3BhY2UgKGxlYWQgaW5jbHVkZWQpXG4gICAgICB0aGlzLl9zZWVrVG8gPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLl9wYXNzRnJvbSA9IGZyb20gPz8gMTtcbiAgICAgIHRoaXMuX3dhbnQgPSBmcm9tID8/IDE7IC8vIGEgZnJlc2ggcGFzcyBwYWNlcyBvZmYgaXRzIG93biBzdGFydCwgbm90IHRoZSBwcmV2aW91cyBwYXNzJ3MgdGFpbCBkZW1hbmRcbiAgICAgIC8vIGRlY29kZUZyYW1lcyBjb3VudHMgcG9zdC1sZWFkIGNvbnRlbnQgZnJhbWVzLCBzbyBhIHBhZ2Uta2V5IHRhcmdldCBsb3NlcyB0aGUgbGVhZCBvZmZzZXQuXG4gICAgICBjb25zdCBjb250ZW50RnJvbSA9IGZyb20gPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IE1hdGgubWF4KDEsIGZyb20gLSB0aGlzLl9sZWFkRnJhbWVzKTtcbiAgICAgIGNvbnN0IHN0cmVhbSA9IGRlY29kZUZyYW1lcyh7IHNyYzogdGhpcy5fc3JjLCBtZXRhOiB0aGlzLm1ldGEsIHNpZ25hbDogdGhpcy5fY3RybC5zaWduYWwsIGZyb21JZHg6IGNvbnRlbnRGcm9tIH0pO1xuICAgICAgbGV0IHN0b3JlZCA9IDA7XG4gICAgICBmb3IgYXdhaXQgKGNvbnN0IHsgaWR4LCBidWYgfSBvZiBzdHJlYW0pIHtcbiAgICAgICAgaWYgKHRoaXMuX2Nsb3NlZCB8fCB0aGlzLl9nZW4gIT09IGdlbikge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhdCA9IHRoaXMuX2xlYWRGcmFtZXMgKyBpZHg7IC8vIG1hcCBkZWNvZGUgcG9zaXRpb24gcGFzdCB0aGUgaGVsZCBsZWFkLWdhcCBmcmFtZXNcbiAgICAgICAgd2hpbGUgKCF0aGlzLl9jbG9zZWQgJiYgdGhpcy5fZ2VuID09PSBnZW4gJiYgYXQgPiB0aGlzLl93YW50ICsgREVDT0RFX0FIRUFEKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5wYXVzZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9jbG9zZWQgfHwgdGhpcy5fZ2VuICE9PSBnZW4pIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fYnVmLnNldChhdCwgYnVmKTtcbiAgICAgICAgdGhpcy5fcmVhZHkgPSBhdDtcbiAgICAgICAgdGhpcy5ldmljdCgpO1xuICAgICAgICB0aGlzLnNpZ25hbCgpO1xuICAgICAgICBzdG9yZWQrKztcbiAgICAgIH1cbiAgICAgIGlmIChhdHRlbXB0ID09PSAwICYmIHN0b3JlZCA9PT0gMCAmJiBjb250ZW50RnJvbSAhPT0gdW5kZWZpbmVkICYmICF0aGlzLl9jbG9zZWQgJiYgdGhpcy5fZ2VuID09PSBnZW4pIHtcbiAgICAgICAgY29udGludWU7IC8vIHNlZWsgbGFuZGVkIHBhc3QgdGhlIGxhc3QgZnJhbWU6IHJlLWRlY29kZSBmcm9tIGhlYWRcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHBhdXNlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocikgPT4ge1xuICAgICAgdGhpcy5fcmVzdW1lID0gcjtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIFBhcmsgdW50aWwgYSBsb29wL2JhY2t3YXJkIHJlcXVlc3QgKG9yIGNsb3NlKSBjYWxscyByZXF1ZXN0UmVzdGFydCgpLlxuICBwcml2YXRlIHVudGlsUmVzdGFydCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHIpID0+IHtcbiAgICAgIHRoaXMuX3Jlc3RhcnQgPSByO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBldmljdCgpOiB2b2lkIHtcbiAgICBjb25zdCBmbG9vciA9IHRoaXMuX3JlYWR5IC0gdGhpcy5fa2VlcENvdW50O1xuICAgIGZvciAoY29uc3QgayBvZiB0aGlzLl9idWYua2V5cygpKSB7XG4gICAgICBpZiAoayA8IGZsb29yKSB7XG4gICAgICAgIHRoaXMuX2J1Zi5kZWxldGUoayk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA1LzE4LlxuXG5pbXBvcnQgeyBEZWNvZGVyIH0gZnJvbSBcIm5vZGUtYXYvYXBpXCI7XG5pbXBvcnQgeyBBVk1FRElBX1RZUEVfVklERU8gfSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcbmltcG9ydCB7IG9wZW5JbnB1dCB9IGZyb20gXCIuL29wZW5cIjtcblxuZXhwb3J0IGludGVyZmFjZSBQcm9iZVJlc3VsdCB7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICBkdXJhdGlvbjogbnVtYmVyO1xuICAvKiogUFRTIChzKSBvZiB0aGUgZmlyc3QgZGVjb2RhYmxlIGZyYW1lOyBhIGNvcnJ1cHQvZW1wdHkgbGVhZGluZyBydW4gaXMgaGVsZCBvbiBpdCwgbGlrZSBDaHJvbWUuICovXG4gIGxlYWRHYXA6IG51bWJlcjtcbn1cblxuLy8gTm8gd2FsbC1jbG9jayBjYXA6IG9wZW5JbnB1dCdzIHBlci1yZWFkIHJ3X3RpbWVvdXQgYm91bmRzIGEgc3R1Y2sgc291cmNlLCBhbmQgdGhlIGNhbGxlciByZXRyaWVzIG9uIHRocm93LlxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb2JlKHNyYzogc3RyaW5nKTogUHJvbWlzZTxQcm9iZVJlc3VsdD4ge1xuICBhd2FpdCB1c2luZyBkID0gYXdhaXQgb3BlbklucHV0KHNyYyk7XG4gIGNvbnN0IHN0cmVhbSA9IGQuc3RyZWFtcz8uZmluZCgocykgPT4gcy5jb2RlY3Bhci5jb2RlY1R5cGUgPT09IEFWTUVESUFfVFlQRV9WSURFTyk7XG4gIGlmICghc3RyZWFtKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwicHJvYmU6IG5vIHZpZGVvIHN0cmVhbVwiKTtcbiAgfVxuICBjb25zdCBkdXJhdGlvbiA9IGQuZHVyYXRpb24gPiAwID8gZC5kdXJhdGlvbiA6IDA7XG4gIGNvbnN0IHRiID0gc3RyZWFtLnRpbWVCYXNlLm51bSAvIHN0cmVhbS50aW1lQmFzZS5kZW47XG4gIHVzaW5nIGRlYyA9IGF3YWl0IERlY29kZXIuY3JlYXRlKHN0cmVhbSwgeyB0aHJlYWRDb3VudDogMSB9KTtcbiAgbGV0IGxlYWRHYXAgPSAwO1xuICAvLyBGaXJzdCBjbGVhbiBmcmFtZSdzIFBUUyA9IHdoZXJlIGNvbnRlbnQgYmVnaW5zOyBza2lwIGNvcnJ1cHQgZnJhbWVzIGxpa2UgYSBicm93c2VyLlxuICBvdXRlcjogZm9yIGF3YWl0ICh1c2luZyBwa3Qgb2YgZC5wYWNrZXRzKHN0cmVhbS5pbmRleCkpIHtcbiAgICB0cnkge1xuICAgICAgZm9yIGF3YWl0ICh1c2luZyBmcmFtZSBvZiBkZWMuZnJhbWVzKHBrdCkpIHtcbiAgICAgICAgaWYgKGZyYW1lPy5kZWNvZGVFcnJvckZsYWdzICE9PSAwKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgbGVhZEdhcCA9IE1hdGgubWF4KDAsIE51bWJlcihmcmFtZS5wdHMpICogdGIpO1xuICAgICAgICBicmVhayBvdXRlcjtcbiAgICAgIH1cbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIGNvcnJ1cHQgcGFja2V0IOKAlCBza2lwIHRvIHRoZSBuZXh0XG4gICAgfVxuICB9XG4gIHJldHVybiB7IHdpZHRoOiBzdHJlYW0uY29kZWNwYXIud2lkdGgsIGhlaWdodDogc3RyZWFtLmNvZGVjcGFyLmhlaWdodCwgZHVyYXRpb24sIGxlYWRHYXAgfTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDcvMDYuXG5cbmltcG9ydCB7IHJhbmRvbUJ5dGVzIH0gZnJvbSBcIm5vZGU6Y3J5cHRvXCI7XG5pbXBvcnQgeyByZWFkRmlsZSwgcm0gfSBmcm9tIFwibm9kZTpmcy9wcm9taXNlc1wiO1xuaW1wb3J0IHsgdG1wZGlyIH0gZnJvbSBcIm5vZGU6b3NcIjtcbmltcG9ydCB7IGpvaW4gfSBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyBDb2RlYywgRkZtcGVnRXJyb3IsIEZyYW1lIH0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB7IEFWX1BJWF9GTVRfWVVWNDIwUCwgQVZFUlJPUl9FQUdBSU4sIEFWRVJST1JfRU9GIH0gZnJvbSBcIm5vZGUtYXYvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBGRl9FTkNPREVSX0xJQlZQWF9WUDksIG1ha2VQYWNrZXQsIG9wZW5WaWRlb0N0eCB9IGZyb20gXCIuLi8uLi9iYXNlL2VuY29kZXIvbWlzY1wiO1xuaW1wb3J0IHsgRm9ybWF0TXV4ZXIgfSBmcm9tIFwiLi4vLi4vYmFzZS9lbmNvZGVyL211eGVyXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3R1YkVuY29kZU9wdGlvbnMge1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgZHVyYXRpb246IG51bWJlcjtcbn1cblxuLy8gUmVhbCBwYXJzZWFibGUgbWVkaWEgd2l0aCB0aGUgc291cmNlJ3MgaW50cmluc2ljIHNpemUgKyBkdXJhdGlvbiwgc28gQmxpbmsgbGF5cyBvdXQgbGlrZSBDaHJvbWUuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZW5jb2RlU3R1YldlYm0oeyB3aWR0aCwgaGVpZ2h0LCBkdXJhdGlvbiB9OiBTdHViRW5jb2RlT3B0aW9ucyk6IFByb21pc2U8QnVmZmVyPiB7XG4gIGNvbnN0IGNvZGVjID0gQ29kZWMuZmluZEVuY29kZXJCeU5hbWUoRkZfRU5DT0RFUl9MSUJWUFhfVlA5KTtcbiAgaWYgKCFjb2RlYykge1xuICAgIHRocm93IG5ldyBFcnJvcihgc3R1YjogZW5jb2RlciBub3QgZm91bmQ6ICR7RkZfRU5DT0RFUl9MSUJWUFhfVlA5fWApO1xuICB9XG4gIGNvbnN0IHBhdGggPSBqb2luKHRtcGRpcigpLCBgcHVwX3N0dWJfJHtyYW5kb21CeXRlcyg4KS50b1N0cmluZyhcImhleFwiKX0ud2VibWApO1xuICB0cnkge1xuICAgIHtcbiAgICAgIGF3YWl0IHVzaW5nIG11eGVyID0gbmV3IEZvcm1hdE11eGVyKHBhdGgpO1xuICAgICAgLy8gVGltZWJhc2UgMS8xMDAwIChmcHMgcGFyYW0pIGxldHMgb25lIHBhY2tldCBjYXJyeSB0aGUgZnVsbCBzb3VyY2UgZHVyYXRpb24gaW4gbXMuXG4gICAgICB1c2luZyBjdHggPSBhd2FpdCBvcGVuVmlkZW9DdHgoXG4gICAgICAgIHtcbiAgICAgICAgICBjb2RlYyxcbiAgICAgICAgICB3aWR0aCxcbiAgICAgICAgICBoZWlnaHQsXG4gICAgICAgICAgZnBzOiAxMDAwLFxuICAgICAgICAgIGJpdHJhdGU6IDEwMF8wMDAsXG4gICAgICAgICAgcGl4ZWxGb3JtYXQ6IEFWX1BJWF9GTVRfWVVWNDIwUCxcbiAgICAgICAgICBvcHRpb25zOiB7IGRlYWRsaW5lOiBcInJlYWx0aW1lXCIsIFwiY3B1LXVzZWRcIjogXCI4XCIgfSxcbiAgICAgICAgfSxcbiAgICAgICAgXCJzdHViQ3R4Lm9wZW4yXCIsXG4gICAgICApO1xuICAgICAgY29uc3Qgc3RyZWFtID0gbXV4ZXIuYWRkU3RyZWFtKGN0eCk7XG4gICAgICBhd2FpdCBtdXhlci5vcGVuKCk7XG4gICAgICB1c2luZyBzdHViID0gbmV3IFN0dWJGcmFtZSh3aWR0aCwgaGVpZ2h0KTtcbiAgICAgIGNvbnN0IG1zID0gQmlnSW50KE1hdGgubWF4KDEsIE1hdGgucm91bmQoZHVyYXRpb24gKiAxMDAwKSkpO1xuICAgICAgc3R1Yi5mcmFtZS5wdHMgPSAwbjtcbiAgICAgIHN0dWIuZnJhbWUuZHVyYXRpb24gPSBtcztcbiAgICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCBjdHguc2VuZEZyYW1lKHN0dWIuZnJhbWUpLCBcInN0dWJDdHguc2VuZEZyYW1lXCIpO1xuICAgICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IGN0eC5zZW5kRnJhbWUobnVsbCksIFwic3R1YkN0eC5mbHVzaFwiKTtcbiAgICAgIHVzaW5nIHBrdCA9IG1ha2VQYWNrZXQoKTtcbiAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIGNvbnN0IHIgPSBhd2FpdCBjdHgucmVjZWl2ZVBhY2tldChwa3QpO1xuICAgICAgICBpZiAociA9PT0gQVZFUlJPUl9FQUdBSU4gfHwgciA9PT0gQVZFUlJPUl9FT0YpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IociwgXCJzdHViQ3R4LnJlY2VpdmVQYWNrZXRcIik7XG4gICAgICAgIHBrdC5zdHJlYW1JbmRleCA9IHN0cmVhbS5pbmRleDtcbiAgICAgICAgcGt0LmR1cmF0aW9uID0gbXM7XG4gICAgICAgIHBrdC5yZXNjYWxlVHMoY3R4LnRpbWVCYXNlLCBzdHJlYW0udGltZUJhc2UpO1xuICAgICAgICBhd2FpdCBtdXhlci53cml0ZVBhY2tldChwa3QpO1xuICAgICAgICBwa3QudW5yZWYoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGF3YWl0IHJlYWRGaWxlKHBhdGgpO1xuICB9IGZpbmFsbHkge1xuICAgIGF3YWl0IHJtKHBhdGgsIHsgZm9yY2U6IHRydWUgfSk7XG4gIH1cbn1cblxuLy8gT3ducyB0aGUgYmxhY2sgcGl4ZWwgYnVmZmVyIEFORCBpdHMgemVyby1jb3B5IGZyYW1lIHZpZXcg4oCUIGB1c2luZ2AgcGlucyBib3RoIHVudGlsIGFmdGVyIGVuY29kZS5cbmNsYXNzIFN0dWJGcmFtZSBpbXBsZW1lbnRzIERpc3Bvc2FibGUge1xuICByZWFkb25seSBmcmFtZTogRnJhbWU7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2J1ZjogQnVmZmVyO1xuXG4gIGNvbnN0cnVjdG9yKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKSB7XG4gICAgY29uc3QgbHVtYSA9IHdpZHRoICogaGVpZ2h0O1xuICAgIGNvbnN0IGNocm9tYSA9IE1hdGguY2VpbCh3aWR0aCAvIDIpICogTWF0aC5jZWlsKGhlaWdodCAvIDIpO1xuICAgIHRoaXMuX2J1ZiA9IEJ1ZmZlci5hbGxvYyhsdW1hICsgY2hyb21hICogMiwgMHg4MCk7XG4gICAgdGhpcy5fYnVmLmZpbGwoMCwgMCwgbHVtYSk7XG4gICAgdGhpcy5mcmFtZSA9IEZyYW1lLmZyb21WaWRlb0J1ZmZlcih0aGlzLl9idWYsIHsgd2lkdGgsIGhlaWdodCwgZm9ybWF0OiBBVl9QSVhfRk1UX1lVVjQyMFAgfSk7XG4gIH1cblxuICBbU3ltYm9sLmRpc3Bvc2VdKCk6IHZvaWQge1xuICAgIHRoaXMuZnJhbWVbU3ltYm9sLmRpc3Bvc2VdKCk7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDUvMTguXG5cbmltcG9ydCB7IGNyZWF0ZUhhc2ggfSBmcm9tIFwibm9kZTpjcnlwdG9cIjtcbmltcG9ydCB7IHVzZVJldHJ5IH0gZnJvbSBcIi4uLy4uL2Jhc2UvcmV0cnlcIjtcbmltcG9ydCB7IHByb3hpZWRVcmwgfSBmcm9tIFwiLi4vbmV0d29ya1wiO1xuaW1wb3J0IHsgRGVjb2RlU2Vzc2lvbiB9IGZyb20gXCIuL2RlY29kZV9zZXNzaW9uXCI7XG5pbXBvcnQgeyB0eXBlIFByb2JlUmVzdWx0LCBwcm9iZSB9IGZyb20gXCIuL3Byb2JlXCI7XG5pbXBvcnQgeyBlbmNvZGVTdHViV2VibSB9IGZyb20gXCIuL3N0dWJcIjtcblxuZXhwb3J0IGludGVyZmFjZSBWaWRlb01ldGEge1xuICBpZDogc3RyaW5nO1xuICAvKiogSW50cmluc2ljIHNvdXJjZSBkaW1lbnNpb25zIChyZXBvcnRlZCBhcyB2aWRlb1dpZHRoL3ZpZGVvSGVpZ2h0KS4gKi9cbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIC8qKiBEZWNvZGVkK3NjYWxlZCBmcmFtZSBkaW1lbnNpb25zIGFjdHVhbGx5IHNlcnZlZCAo4omkIHNvdXJjZTsgY2FwcGVkIHRvIHRoZSBkaXNwbGF5IGJveCkuICovXG4gIGZyYW1lV2lkdGg6IG51bWJlcjtcbiAgZnJhbWVIZWlnaHQ6IG51bWJlcjtcbiAgZnBzOiBudW1iZXI7XG4gIGR1cmF0aW9uOiBudW1iZXI7XG4gIC8qKiBTZWNvbmRzIG9mIGNvcnJ1cHQvZW1wdHkgbGVhZGluZyBjb250ZW50IGhlbGQgb24gdGhlIGZpcnN0IGRlY29kYWJsZSBmcmFtZS4gKi9cbiAgbGVhZEdhcDogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9wZW5PcHRpb25zIHtcbiAgc3JjOiBzdHJpbmc7XG4gIGZwczogbnVtYmVyO1xuICAvKiogRGlzcGxheS1ib3ggcGl4ZWxzIChjYW52YXMgYmFja2luZyBzdG9yZSk7IGRlY29kZSBpcyBkb3duc2NhbGVkIHRvIGNvdmVyIHRoaXMsIG5ldmVyIHVwc2NhbGVkLiAqL1xuICBkc3RXPzogbnVtYmVyO1xuICBkc3RIPzogbnVtYmVyO1xuICAvKiogb2JqZWN0Rml0OyBcIm5vbmVcIiBuZWVkcyAxOjEgbmF0aXZlIHBpeGVscyBzbyBpdCBza2lwcyBkb3duc2NhbGUuICovXG4gIGZpdD86IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIEVudHJ5IHtcbiAgc2Vzc2lvbjogRGVjb2RlU2Vzc2lvbjtcbiAgcmVmczogbnVtYmVyO1xufVxuXG5leHBvcnQgY2xhc3MgRnJhbWVTZXJ2ZXIge1xuICBwcml2YXRlIF9zZXNzaW9ucyA9IG5ldyBNYXA8c3RyaW5nLCBFbnRyeT4oKTtcbiAgcHJpdmF0ZSBfcHJvYmVzID0gbmV3IE1hcDxzdHJpbmcsIFByb21pc2U8UHJvYmVSZXN1bHQ+PigpO1xuICBwcml2YXRlIF9zdHVicyA9IG5ldyBNYXA8c3RyaW5nLCBQcm9taXNlPEJ1ZmZlcj4+KCk7XG4gIHByaXZhdGUgX29wZW5pbmcgPSBuZXcgTWFwPHN0cmluZywgUHJvbWlzZTxWaWRlb01ldGE+PigpO1xuICBwcml2YXRlIF9jbG9zZWQgPSBmYWxzZTtcblxuICAvLyAtZCBkZWNvZGUgYnlwYXNzZXMgdGhlIHdpbmRvdyBpbnRlcmNlcHRvciwgc28gaXQgcmVtYXBzIGhvc3RzIGl0c2VsZiB3aGVuIHRoZSBpbm5lciBwcm94eSBpcyBvbi5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBfdXNlSW5uZXJQcm94eTogYm9vbGVhbikge31cblxuICAvLyBEZWR1cGVzIGNvbmN1cnJlbnQgc2FtZS1rZXkgb3BlbnMgKHR3byBzYW1lLXNyYy9zaXplIDx2aWRlbz4gc2Nhbm5lZCB0b2dldGhlcikgc28gbm8gc2Vzc2lvbiBpcyBvcnBoYW5lZC5cbiAgYXN5bmMgb3BlbihvcHRzOiBPcGVuT3B0aW9ucyk6IFByb21pc2U8VmlkZW9NZXRhPiB7XG4gICAgaWYgKHRoaXMuX2Nsb3NlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZnJhbWUtc2VydmVyOiBjbG9zZWRcIik7XG4gICAgfVxuICAgIGNvbnN0IGlkID0ga2V5KG9wdHMpO1xuICAgIGNvbnN0IGhpdCA9IHRoaXMuX3Nlc3Npb25zLmdldChpZCk7XG4gICAgaWYgKGhpdCkge1xuICAgICAgaGl0LnJlZnMrKztcbiAgICAgIHJldHVybiBoaXQuc2Vzc2lvbi5tZXRhO1xuICAgIH1cbiAgICBjb25zdCBpbmZsaWdodCA9IHRoaXMuX29wZW5pbmcuZ2V0KGlkKTtcbiAgICBpZiAoaW5mbGlnaHQpIHtcbiAgICAgIGNvbnN0IG1ldGEgPSBhd2FpdCBpbmZsaWdodDtcbiAgICAgIGNvbnN0IGUgPSB0aGlzLl9zZXNzaW9ucy5nZXQoaWQpO1xuICAgICAgaWYgKGUpIHtcbiAgICAgICAgZS5yZWZzKys7XG4gICAgICB9XG4gICAgICByZXR1cm4gbWV0YTtcbiAgICB9XG4gICAgY29uc3Qgb3BlbmluZyA9IHRoaXMub3Blbk9uY2Uob3B0cywgaWQpO1xuICAgIHRoaXMuX29wZW5pbmcuc2V0KGlkLCBvcGVuaW5nKTtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IG9wZW5pbmc7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuX29wZW5pbmcuZGVsZXRlKGlkKTtcbiAgICB9XG4gIH1cblxuICAvLyBjbG9zZWQtY2hlY2tlZCBhZnRlciBwcm9iZSBzbyBjbG9zZUFsbCgpIGNhbid0IHJhY2UgYSBzbG93IG9wZW4gaW50byBhIGxlYWtlZCBzZXNzaW9uLlxuICBwcml2YXRlIGFzeW5jIG9wZW5PbmNlKG9wdHM6IE9wZW5PcHRpb25zLCBpZDogc3RyaW5nKTogUHJvbWlzZTxWaWRlb01ldGE+IHtcbiAgICBjb25zdCBzcmMgPSB0aGlzLl91c2VJbm5lclByb3h5ID8gcHJveGllZFVybChvcHRzLnNyYykgOiBvcHRzLnNyYztcbiAgICBjb25zdCBpbmZvID0gYXdhaXQgdGhpcy5wcm9iZUNhY2hlZChzcmMpO1xuICAgIGlmICh0aGlzLl9jbG9zZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcImZyYW1lLXNlcnZlcjogY2xvc2VkXCIpO1xuICAgIH1cbiAgICBsZXQgZnJhbWVXaWR0aCA9IGluZm8ud2lkdGg7XG4gICAgbGV0IGZyYW1lSGVpZ2h0ID0gaW5mby5oZWlnaHQ7XG4gICAgLy8gRG93bnNjYWxlIHRvIGNvdmVyIHRoZSBkaXNwbGF5IGJveCAobmV2ZXIgdXBzY2FsZSk7IG9iamVjdEZpdCBcIm5vbmVcIiBuZWVkcyAxOjEgbmF0aXZlIHBpeGVscy5cbiAgICBpZiAob3B0cy5kc3RXICYmIG9wdHMuZHN0SCAmJiBvcHRzLmZpdCAhPT0gXCJub25lXCIpIHtcbiAgICAgIGNvbnN0IHMgPSBNYXRoLm1pbigxLCBNYXRoLm1heChvcHRzLmRzdFcgLyBpbmZvLndpZHRoLCBvcHRzLmRzdEggLyBpbmZvLmhlaWdodCkpO1xuICAgICAgZnJhbWVXaWR0aCA9IGV2ZW4oaW5mby53aWR0aCAqIHMpO1xuICAgICAgZnJhbWVIZWlnaHQgPSBldmVuKGluZm8uaGVpZ2h0ICogcyk7XG4gICAgfVxuICAgIGNvbnN0IG1ldGE6IFZpZGVvTWV0YSA9IHtcbiAgICAgIGlkLFxuICAgICAgd2lkdGg6IGluZm8ud2lkdGgsXG4gICAgICBoZWlnaHQ6IGluZm8uaGVpZ2h0LFxuICAgICAgZnJhbWVXaWR0aCxcbiAgICAgIGZyYW1lSGVpZ2h0LFxuICAgICAgZnBzOiBvcHRzLmZwcyxcbiAgICAgIGR1cmF0aW9uOiBpbmZvLmR1cmF0aW9uLFxuICAgICAgbGVhZEdhcDogaW5mby5sZWFkR2FwLFxuICAgIH07XG4gICAgdGhpcy5fc2Vzc2lvbnMuc2V0KGlkLCB7IHNlc3Npb246IG5ldyBEZWNvZGVTZXNzaW9uKG1ldGEsIHNyYyksIHJlZnM6IDEgfSk7XG4gICAgcmV0dXJuIG1ldGE7XG4gIH1cblxuICAvLyBEZXRlcm1pbmlzdGljIG1lZGlhIHJlcXVlc3RzIHJlZGlyZWN0IGhlcmU6IHJlYWwgcGFyc2VhYmxlIGJ5dGVzIHdpdGggdHJ1ZSBpbnRyaW5zaWMgc2l6ZSArIGR1cmF0aW9uLlxuICBzdHViKHNyYzogc3RyaW5nKTogUHJvbWlzZTxCdWZmZXI+IHtcbiAgICBpZiAodGhpcy5fY2xvc2VkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJmcmFtZS1zZXJ2ZXI6IGNsb3NlZFwiKTtcbiAgICB9XG4gICAgY29uc3QgcmVhbCA9IHRoaXMuX3VzZUlubmVyUHJveHkgPyBwcm94aWVkVXJsKHNyYykgOiBzcmM7XG4gICAgY29uc3QgaGl0ID0gdGhpcy5fc3R1YnMuZ2V0KHJlYWwpO1xuICAgIGlmIChoaXQpIHtcbiAgICAgIHJldHVybiBoaXQ7XG4gICAgfVxuICAgIGNvbnN0IHAgPSB0aGlzLnByb2JlQ2FjaGVkKHJlYWwpLnRoZW4oKGluZm8pID0+XG4gICAgICBlbmNvZGVTdHViV2VibSh7XG4gICAgICAgIHdpZHRoOiBpbmZvLndpZHRoLFxuICAgICAgICBoZWlnaHQ6IGluZm8uaGVpZ2h0LFxuICAgICAgICBkdXJhdGlvbjogaW5mby5kdXJhdGlvbixcbiAgICAgIH0pLFxuICAgICk7XG4gICAgcC5jYXRjaCgoKSA9PiB0aGlzLl9zdHVicy5kZWxldGUocmVhbCkpO1xuICAgIHRoaXMuX3N0dWJzLnNldChyZWFsLCBwKTtcbiAgICByZXR1cm4gcDtcbiAgfVxuXG4gIGFzeW5jIGdldEZyYW1lKGlkOiBzdHJpbmcsIGlkeDogbnVtYmVyKTogUHJvbWlzZTxCdWZmZXIgfCB1bmRlZmluZWQ+IHtcbiAgICBjb25zdCBlID0gdGhpcy5fc2Vzc2lvbnMuZ2V0KGlkKTtcbiAgICBpZiAoIWUpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHJldHVybiBlLnNlc3Npb24uZ2V0RnJhbWUoaWR4KTtcbiAgfVxuXG4gIGFzeW5jIGNsb3NlKGlkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBlID0gdGhpcy5fc2Vzc2lvbnMuZ2V0KGlkKTtcbiAgICBpZiAoIWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKC0tZS5yZWZzID4gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9zZXNzaW9ucy5kZWxldGUoaWQpO1xuICAgIGF3YWl0IGUuc2Vzc2lvbi5jbG9zZSgpO1xuICB9XG5cbiAgLy8gRmFpbGVkIHByb2JlcyBldmljdCBzbyBhIHRyYW5zaWVudCBzb3VyY2UgZXJyb3IgY2FuIHJldHJ5IG9uIHRoZSBuZXh0IHJlcXVlc3QuXG4gIHByaXZhdGUgcHJvYmVDYWNoZWQoc3JjOiBzdHJpbmcpOiBQcm9taXNlPFByb2JlUmVzdWx0PiB7XG4gICAgY29uc3QgaGl0ID0gdGhpcy5fcHJvYmVzLmdldChzcmMpO1xuICAgIGlmIChoaXQpIHtcbiAgICAgIHJldHVybiBoaXQ7XG4gICAgfVxuICAgIGNvbnN0IHAgPSB1c2VSZXRyeSh7IGZuOiBwcm9iZSB9KShzcmMpO1xuICAgIHAuY2F0Y2goKCkgPT4gdGhpcy5fcHJvYmVzLmRlbGV0ZShzcmMpKTtcbiAgICB0aGlzLl9wcm9iZXMuc2V0KHNyYywgcCk7XG4gICAgcmV0dXJuIHA7XG4gIH1cblxuICBhc3luYyBjbG9zZUFsbCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLl9jbG9zZWQgPSB0cnVlO1xuICAgIGNvbnN0IHNlc3Npb25zID0gWy4uLnRoaXMuX3Nlc3Npb25zLnZhbHVlcygpXTtcbiAgICB0aGlzLl9zZXNzaW9ucy5jbGVhcigpO1xuICAgIGF3YWl0IFByb21pc2UuYWxsKHNlc3Npb25zLm1hcCgoZSkgPT4gZS5zZXNzaW9uLmNsb3NlKCkpKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBrZXkob3B0czogT3Blbk9wdGlvbnMpOiBzdHJpbmcge1xuICByZXR1cm4gY3JlYXRlSGFzaChcInNoYTFcIilcbiAgICAudXBkYXRlKGAke29wdHMuc3JjfXwke29wdHMuZnBzfXwke29wdHMuZHN0VyA/PyBcIlwifXwke29wdHMuZHN0SCA/PyBcIlwifXwke29wdHMuZml0ID8/IFwiXCJ9YClcbiAgICAuZGlnZXN0KFwiaGV4XCIpO1xufVxuXG4vLyBSb3VuZCBkb3duIHRvIGFuIGV2ZW4gaW50ZWdlciAo4omlMikgZm9yIHRoZSBzY2FsZXIuXG5mdW5jdGlvbiBldmVuKG46IG51bWJlcik6IG51bWJlciB7XG4gIGNvbnN0IHIgPSBNYXRoLnJvdW5kKG4pO1xuICByZXR1cm4gTWF0aC5tYXgoMiwgciAtIChyICUgMikpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNS8xOC5cblxuaW1wb3J0IHsgcHJvdG9jb2wgfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuLi8uLi9iYXNlL2xvZ2dpbmdcIjtcbmltcG9ydCB7IEZyYW1lU2VydmVyLCB0eXBlIFZpZGVvTWV0YSB9IGZyb20gXCIuL2ZyYW1lX3NlcnZlclwiO1xuXG5jb25zdCBUQUcgPSBcIltGcmFtZVByb3RvY29sXVwiO1xuXG4vLyBTY2hlbWUgaXMgcmVnaXN0ZXJlZCBhbG9uZ3NpZGUgYHB1cGAgaW4gcmVuZGVyZXIvcHJvdG9jb2wudHMgKHNpbmdsZSBjYWxsIG9ubHkpLlxuY29uc3QgU0NIRU1FID0gXCJwdXAtZnJhbWVcIjtcblxuY29uc3QgQ09SU19IRUFERVJTOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICBcImFjY2Vzcy1jb250cm9sLWFsbG93LW9yaWdpblwiOiBcIipcIixcbiAgXCJhY2Nlc3MtY29udHJvbC1hbGxvdy1tZXRob2RzXCI6IFwiR0VULCBPUFRJT05TXCIsXG4gIFwiYWNjZXNzLWNvbnRyb2wtYWxsb3ctaGVhZGVyc1wiOiBcIipcIixcbn07XG5cbi8vIE11c3QgYmUgY2FsbGVkIGFmdGVyIGFwcCBpcyByZWFkeS4gRGV0ZXJtaW5pc3RpYy1vbmx5IChyZWFsLXRpbWUgdmlkZW9zIHNlbGYtdGljaywgbm8gZnJhbWUgcHJvdG9jb2wpLlxuZXhwb3J0IGZ1bmN0aW9uIHVzZUZyYW1lUHJvdG9jb2wodXNlSW5uZXJQcm94eTogYm9vbGVhbik6IEFzeW5jRGlzcG9zYWJsZSB7XG4gIGNvbnN0IGZzID0gbmV3IEZyYW1lU2VydmVyKHVzZUlubmVyUHJveHkpO1xuICBwcm90b2NvbC5oYW5kbGUoU0NIRU1FLCBhc3luYyAocmVxKSA9PiB7XG4gICAgaWYgKHJlcS5tZXRob2QgPT09IFwiT1BUSU9OU1wiKSB7XG4gICAgICByZXR1cm4gbmV3IFJlc3BvbnNlKG51bGwsIHsgc3RhdHVzOiAyMDQsIGhlYWRlcnM6IENPUlNfSEVBREVSUyB9KTtcbiAgICB9XG4gICAgY29uc3QgdXJsID0gbmV3IFVSTChyZXEudXJsKTtcbiAgICBsb2dnZXIuZGVidWcoVEFHLCBgJHtyZXEubWV0aG9kfSAke3VybC5ob3N0bmFtZX0ke3VybC5zZWFyY2h9YCk7XG4gICAgdHJ5IHtcbiAgICAgIGxldCByZXM6IFJlc3BvbnNlO1xuICAgICAgc3dpdGNoICh1cmwuaG9zdG5hbWUpIHtcbiAgICAgICAgY2FzZSBcIm9wZW5cIjpcbiAgICAgICAgICByZXMgPSBqc29uT2soXG4gICAgICAgICAgICBhd2FpdCBmcy5vcGVuKHtcbiAgICAgICAgICAgICAgc3JjOiB1cmwuc2VhcmNoUGFyYW1zLmdldChcInNyY1wiKSA/PyBcIlwiLFxuICAgICAgICAgICAgICBmcHM6IGludCh1cmwsIFwiZnBzXCIsIDMwKSxcbiAgICAgICAgICAgICAgZHN0VzogaW50KHVybCwgXCJ3XCIsIDApLFxuICAgICAgICAgICAgICBkc3RIOiBpbnQodXJsLCBcImhcIiwgMCksXG4gICAgICAgICAgICAgIGZpdDogdXJsLnNlYXJjaFBhcmFtcy5nZXQoXCJmaXRcIikgPz8gdW5kZWZpbmVkLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcImZyYW1lXCI6XG4gICAgICAgICAgLy8gUGFpbnRzIGRyaXZlIHRoZSB2aXJ0dWFsIGNsb2NrLCBzbyBzdGFsbCBvbiBkZWNvZGUgaW5zdGVhZCBvZiBoYW5kaW5nIGJhY2sgYSBibGFjayBmcmFtZS5cbiAgICAgICAgICByZXMgPSByZ2JhT2soKGF3YWl0IGZzLmdldEZyYW1lKHVybC5zZWFyY2hQYXJhbXMuZ2V0KFwiaWRcIikgPz8gXCJcIiwgaW50KHVybCwgXCJpZHhcIiwgMSkpKSA/PyBCdWZmZXIuYWxsb2MoMCkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwic3R1YlwiOlxuICAgICAgICAgIHJlcyA9IHdlYm1Payhhd2FpdCBmcy5zdHViKHVybC5zZWFyY2hQYXJhbXMuZ2V0KFwic3JjXCIpID8/IFwiXCIpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcImNsb3NlXCI6XG4gICAgICAgICAgYXdhaXQgZnMuY2xvc2UodXJsLnNlYXJjaFBhcmFtcy5nZXQoXCJpZFwiKSA/PyBcIlwiKTtcbiAgICAgICAgICByZXMgPSBuZXcgUmVzcG9uc2UobnVsbCwgeyBzdGF0dXM6IDIwNCwgaGVhZGVyczogQ09SU19IRUFERVJTIH0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJlcyA9IG5ldyBSZXNwb25zZShgdW5rbm93biBhY3Rpb246ICR7dXJsLmhvc3RuYW1lfWAsIHtcbiAgICAgICAgICAgIHN0YXR1czogNDA0LFxuICAgICAgICAgICAgaGVhZGVyczogQ09SU19IRUFERVJTLFxuICAgICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlcztcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zdCBtc2cgPSBlIGluc3RhbmNlb2YgRXJyb3IgPyBlLm1lc3NhZ2UgOiBTdHJpbmcoZSk7XG4gICAgICBsb2dnZXIuZXJyb3IoVEFHLCBgJHt1cmwuaG9zdG5hbWV9IGZhaWxlZCR7dXJsLnNlYXJjaH06ICR7bXNnfWApO1xuICAgICAgcmV0dXJuIG5ldyBSZXNwb25zZShtc2csIHsgc3RhdHVzOiA1MDAsIGhlYWRlcnM6IENPUlNfSEVBREVSUyB9KTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4ge1xuICAgIFtTeW1ib2wuYXN5bmNEaXNwb3NlXTogYXN5bmMgKCkgPT4ge1xuICAgICAgcHJvdG9jb2wudW5oYW5kbGUoU0NIRU1FKTtcbiAgICAgIGF3YWl0IGZzLmNsb3NlQWxsKCk7XG4gICAgfSxcbiAgfTtcbn1cblxuZnVuY3Rpb24ganNvbk9rKG1ldGE6IFZpZGVvTWV0YSk6IFJlc3BvbnNlIHtcbiAgcmV0dXJuIG5ldyBSZXNwb25zZShKU09OLnN0cmluZ2lmeShtZXRhKSwge1xuICAgIGhlYWRlcnM6IHsgLi4uQ09SU19IRUFERVJTLCBcImNvbnRlbnQtdHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIiB9LFxuICB9KTtcbn1cblxuLy8gQ2FjaGVkIHN0dWIgQnVmZmVyIGlzIHNoYXJlZCBhY3Jvc3MgcmVzcG9uc2VzIOKAlCBjb3B5IHNvIGEgY29uc3VtZXIgY2FuJ3QgZGV0YWNoIGl0LlxuZnVuY3Rpb24gd2VibU9rKGJ5dGVzOiBCdWZmZXIpOiBSZXNwb25zZSB7XG4gIGNvbnN0IGNvcHkgPSBuZXcgVWludDhBcnJheShieXRlcy5ieXRlTGVuZ3RoKTtcbiAgY29weS5zZXQoYnl0ZXMpO1xuICByZXR1cm4gbmV3IFJlc3BvbnNlKGNvcHkuYnVmZmVyIGFzIEFycmF5QnVmZmVyLCB7XG4gICAgaGVhZGVyczoge1xuICAgICAgLi4uQ09SU19IRUFERVJTLFxuICAgICAgXCJjb250ZW50LXR5cGVcIjogXCJ2aWRlby93ZWJtXCIsXG4gICAgICBcImNhY2hlLWNvbnRyb2xcIjogXCJuby1zdG9yZVwiLFxuICAgIH0sXG4gIH0pO1xufVxuXG4vLyBSYXcgUkdCQSBwaXhlbHM7IHRoZSBwYWdlIHdyYXBzIHRoZW0gaW4gSW1hZ2VEYXRhIHVzaW5nIG1ldGEud2lkdGgvaGVpZ2h0IGl0IGdvdCBmcm9tIGBvcGVuYC5cbmZ1bmN0aW9uIHJnYmFPayhieXRlczogQnVmZmVyKTogUmVzcG9uc2Uge1xuICBpZiAoYnl0ZXMuYnl0ZUxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBuZXcgUmVzcG9uc2UobnVsbCwgeyBzdGF0dXM6IDQxMCwgaGVhZGVyczogQ09SU19IRUFERVJTIH0pO1xuICB9XG4gIGNvbnN0IGNvcHkgPSBuZXcgVWludDhBcnJheShieXRlcy5ieXRlTGVuZ3RoKTtcbiAgY29weS5zZXQoYnl0ZXMpO1xuICByZXR1cm4gbmV3IFJlc3BvbnNlKGNvcHkuYnVmZmVyIGFzIEFycmF5QnVmZmVyLCB7XG4gICAgaGVhZGVyczoge1xuICAgICAgLi4uQ09SU19IRUFERVJTLFxuICAgICAgXCJjb250ZW50LXR5cGVcIjogXCJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW1cIixcbiAgICAgIFwiY2FjaGUtY29udHJvbFwiOiBcIm5vLXN0b3JlXCIsXG4gICAgfSxcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGludCh1cmw6IFVSTCwga2V5OiBzdHJpbmcsIGZhbGxiYWNrOiBudW1iZXIpOiBudW1iZXIge1xuICBjb25zdCB2ID0gdXJsLnNlYXJjaFBhcmFtcy5nZXQoa2V5KTtcbiAgY29uc3QgbiA9IHYgPyBwYXJzZUludCh2LCAxMCkgOiBOYU47XG4gIHJldHVybiBOdW1iZXIuaXNGaW5pdGUobikgPyBuIDogZmFsbGJhY2s7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAzLzEzLlxuXG5pbXBvcnQgdHlwZSB7IEJyb3dzZXJXaW5kb3csIE5hdGl2ZUltYWdlLCBTaXplIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBhZHZhbmNlVmlydHVhbFRpbWUsIHBhdXNlVmlydHVhbFRpbWUsIHJlYnVpbGREcmF3YWJsZSB9IGZyb20gXCIuLi9iYXNlL2NkcFwiO1xuaW1wb3J0IHsgRW5jb2RlclBpcGVsaW5lIH0gZnJvbSBcIi4uL2Jhc2UvZW5jb2Rlci9waXBlbGluZVwiO1xuaW1wb3J0IHsgc2l6ZUVxdWFscyB9IGZyb20gXCIuLi9iYXNlL2ltYWdlXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi4vYmFzZS9sb2dnaW5nXCI7XG5pbXBvcnQgeyBCTEFOS19XQVJOX1JBVElPLCBCbGFua1N0YXRzIH0gZnJvbSBcIi4uL2Jhc2UvcXVhbGl0eS9ibGFua1wiO1xuaW1wb3J0IHsgRHJvcFN0YXRzLCBKQU5LX1dBUk5fU0NPUkUgfSBmcm9tIFwiLi4vYmFzZS9xdWFsaXR5L2Ryb3BcIjtcbmltcG9ydCB7IHBlcmlvZGljYWwgfSBmcm9tIFwiLi4vYmFzZS90aW1pbmdcIjtcbmltcG9ydCB0eXBlIHsgSXBjRG9uZVBheWxvYWQgfSBmcm9tIFwiLi9pcGNcIjtcbmltcG9ydCB0eXBlIHsgSVBDUmVuZGVyT3B0aW9ucyB9IGZyb20gXCIuL3NjaGVtYVwiO1xuaW1wb3J0IHsgU2NyZWVuc2hvdFRha2VyIH0gZnJvbSBcIi4vc2NyZWVuc2hvdFwiO1xuaW1wb3J0IHsgZGVjb2RlU3RlZ28sIGRyYXdTdGVnbywgRlJBTUVfU1lOQ19NQVJLRVJfV0lEVEgsIHdhaXRTdGVnb1RpY2sgfSBmcm9tIFwiLi9zdGVnb1wiO1xuaW1wb3J0IHsgdGljayB9IGZyb20gXCIuL3RpY2tcIjtcbmltcG9ydCB7IHVzZUZyYW1lUHJvdG9jb2wgfSBmcm9tIFwiLi92aWRlby9wcm90b2NvbFwiO1xuaW1wb3J0IHsgZGlzcG9zZVdpbmRvdywgbG9hZFdpbmRvdyB9IGZyb20gXCIuL3dpbmRvd1wiO1xuXG5jb25zdCBUQUcgPSBcIltTaG9vdF1cIjtcbmNvbnN0IFJFTkRFUl9GUFMgPSAyNDA7XG5cbmludGVyZmFjZSBQYWludE9wdGlvbnMge1xuICBzb3VyY2U6IHN0cmluZztcbiAgZnBzOiBudW1iZXI7XG4gIHdpbjogQnJvd3NlcldpbmRvdztcbiAgc2l6ZTogU2l6ZTtcbiAgbXM6IG51bWJlcjtcbn1cblxuaW50ZXJmYWNlIEZyYW1lIHtcbiAgcGl4OiBCdWZmZXI7XG4gIHRzOiBudW1iZXI7XG59XG5cbi8vIFBhaW50aW5nIHN0YXlzIG9uIGZvciB0aGUgd2hvbGUgcnVuOyB3YWl0cyBmb3IgdGhlIGZyYW1lIHdob3NlIHN0ZWdvIHJvdyBtYXRjaGVzIGBtc2AsIHVuZGVmaW5lZCBvbiB0aW1lb3V0LlxuYXN5bmMgZnVuY3Rpb24gcGFpbnQoeyB3aW4sIGZwcywgc2l6ZSwgbXMgfTogUGFpbnRPcHRpb25zKTogUHJvbWlzZTxGcmFtZSB8IHVuZGVmaW5lZD4ge1xuICBsZXQgY2xlYXJEaXJ0eUNoZWNrOiBWb2lkRnVuY3Rpb24gfCB1bmRlZmluZWQ7XG4gIGNvbnN0IGZyYW1lU2l6ZTogU2l6ZSA9IHsgd2lkdGg6IHNpemUud2lkdGgsIGhlaWdodDogc2l6ZS5oZWlnaHQgKyAxIH07XG4gIGNvbnN0IGlzRmlyc3RGcmFtZSA9IE1hdGguYWJzKDEwMDAgLyBmcHMgLSBtcykgPCAxO1xuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBuZXcgUHJvbWlzZTxGcmFtZSB8IHVuZGVmaW5lZD4oKHJlc29sdmUpID0+IHtcbiAgICAgIGNvbnN0IGhhbmRsZXIgPSAoX2U6IHVua25vd24sIF9kOiB1bmtub3duLCBpbWFnZTogTmF0aXZlSW1hZ2UpID0+IHtcbiAgICAgICAgY29uc3QgaW1hZ2VTaXplID0gaW1hZ2UuZ2V0U2l6ZSgpO1xuICAgICAgICBpZiAoIXNpemVFcXVhbHMoaW1hZ2VTaXplLCBmcmFtZVNpemUpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIERlY29kZSBmcm9tIGEgMi1yb3cgc2xpdmVyIGZpcnN0OyB0aGUgZnVsbC1mcmFtZSByZWFkYmFjayAofjhNQiBtZW1jcHkpIGlzIHBhaWQgb25seSBvbiB0aGUgbWF0Y2hpbmcgZnJhbWUuXG4gICAgICAgIGNvbnN0IHNsaXZlciA9IGltYWdlLmNyb3AoeyB4OiAwLCB5OiBmcmFtZVNpemUuaGVpZ2h0IC0gMiwgd2lkdGg6IEZSQU1FX1NZTkNfTUFSS0VSX1dJRFRILCBoZWlnaHQ6IDIgfSk7XG4gICAgICAgIGNvbnN0IHRzID0gZGVjb2RlU3RlZ28oc2xpdmVyLnRvQml0bWFwKCksIHsgd2lkdGg6IEZSQU1FX1NZTkNfTUFSS0VSX1dJRFRILCBoZWlnaHQ6IDIgfSk7XG4gICAgICAgIGlmICh0cyA9PT0gdW5kZWZpbmVkIHx8IG1zIC0gdHMgPiAxKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGJpdG1hcCA9IGltYWdlLnRvQml0bWFwKCk7XG4gICAgICAgIHdpbi53ZWJDb250ZW50cy5vZmYoXCJwYWludFwiLCBoYW5kbGVyKTtcbiAgICAgICAgcmVzb2x2ZSh7IHRzLCBwaXg6IEJ1ZmZlci5mcm9tKGJpdG1hcC5idWZmZXIsIGJpdG1hcC5ieXRlT2Zmc2V0LCBzaXplLmhlaWdodCAqIHNpemUud2lkdGggKiA0KSB9KTtcbiAgICAgIH07XG4gICAgICB3aW4ud2ViQ29udGVudHMub24oXCJwYWludFwiLCBoYW5kbGVyKTtcbiAgICAgIGNvbnN0IHRpbWVvdXQgPSBpc0ZpcnN0RnJhbWUgPyBmcHMgKiAxMCA6IGZwcyAqIDU7XG4gICAgICBjb25zdCByZWZyZXNoRnBzID0gTWF0aC5mbG9vcihpc0ZpcnN0RnJhbWUgPyBmcHMgOiBmcHMgLyAyKTtcbiAgICAgIGNsZWFyRGlydHlDaGVjayA9IHBlcmlvZGljYWwoYXN5bmMgKHN0dWNrKSA9PiB7XG4gICAgICAgIGlmIChzdHVjayA+PSB0aW1lb3V0KSB7XG4gICAgICAgICAgbG9nZ2VyLndhcm4oVEFHLCBgcGFpbnQgdGltZW91dCBAICR7bXN9YCk7XG4gICAgICAgICAgd2luLndlYkNvbnRlbnRzLm9mZihcInBhaW50XCIsIGhhbmRsZXIpO1xuICAgICAgICAgIHJlc29sdmUodW5kZWZpbmVkKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdHVjayAlIHJlZnJlc2hGcHMgPT09IDApIHtcbiAgICAgICAgICBhd2FpdCByZWJ1aWxkRHJhd2FibGUod2luLndlYkNvbnRlbnRzLCBmcmFtZVNpemUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9LCAxMDAwIC8gZnBzKTtcbiAgICB9KTtcbiAgfSBmaW5hbGx5IHtcbiAgICBjbGVhckRpcnR5Q2hlY2s/LigpO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzaG9vdChvcHRpb25zOiBJUENSZW5kZXJPcHRpb25zKTogUHJvbWlzZTxJcGNEb25lUGF5bG9hZD4ge1xuICBjb25zdCB7IHNvdXJjZSwgZnBzLCB3aWR0aCwgaGVpZ2h0LCBkdXJhdGlvbiwgd2l0aEF1ZGlvLCBvdXRGaWxlcywgZGlzYWJsZUh3Q29kZWMsIHNpZ25hbCwgb25Qcm9ncmVzcyB9ID0gb3B0aW9ucztcbiAgaWYgKHdpdGhBdWRpbykge1xuICAgIGxvZ2dlci53YXJuKFRBRywgXCJhdWRpbyB3aWxsIGJlIGlnbm9yZWQgb24gdGhpcyBtb2RlXCIpO1xuICB9XG4gIGNvbnN0IHRha2VyID0gbmV3IFNjcmVlbnNob3RUYWtlcih7IG1hcmtzOiBvcHRpb25zLnNjcmVlbnNob3RzLCB3aWR0aCwgaGVpZ2h0LCBvdXRGaWxlcyB9KTtcblxuICBhd2FpdCB1c2luZyBfID0gdXNlRnJhbWVQcm90b2NvbChvcHRpb25zLnVzZUlubmVyUHJveHkpO1xuICBjb25zdCB0SW5pdCA9IHBlcmZvcm1hbmNlLm5vdygpO1xuICBjb25zdCB3aW5QID0gbG9hZFdpbmRvdyh7IHNvdXJjZSwgcmVuZGVyZXI6IG9wdGlvbnMsIHNpZ25hbCB9KTtcbiAgYXdhaXQgdXNpbmcgcGlwZWxpbmUgPSBhd2FpdCBFbmNvZGVyUGlwZWxpbmUuY3JlYXRlKHsgd2lkdGgsIGhlaWdodCwgZnBzLCBvdXRGaWxlcywgd2l0aEF1ZGlvLCBkaXNhYmxlSHdDb2RlYyB9KTtcbiAgY29uc3Qgd2luID0gYXdhaXQgd2luUDtcbiAgbG9nZ2VyLmRlYnVnKFRBRywgXCJpbml0IGRvbmU6XCIsIHsgc291cmNlLCBjb3N0OiBNYXRoLnJvdW5kKHBlcmZvcm1hbmNlLm5vdygpIC0gdEluaXQpIH0pO1xuXG4gIGNvbnN0IHRvdGFsID0gTWF0aC5jZWlsKGZwcyAqIGR1cmF0aW9uKTtcbiAgY29uc3QgZnJhbWVJbnRlcnZhbCA9IDEwMDAgLyBmcHM7XG5cbiAgbGV0IHdyaXR0ZW4gPSAwO1xuICBsZXQgcHJvZ3Jlc3MgPSAwO1xuICBsZXQgaGVsZCA9IDA7XG4gIGxldCBsYXN0RnJhbWU6IEZyYW1lIHwgdW5kZWZpbmVkO1xuICBsZXQgc2NyZWVuc2hvdHM6IHN0cmluZ1tdID0gW107XG4gIGNvbnN0IGJsYW5rU3RhdHMgPSBuZXcgQmxhbmtTdGF0cyh3aWR0aCwgaGVpZ2h0KTtcbiAgY29uc3QgZHJvcFN0YXRzID0gbmV3IERyb3BTdGF0cyhmcHMpO1xuICBjb25zdCBjZHAgPSB3aW4ud2ViQ29udGVudHMuZGVidWdnZXI7XG4gIGNvbnN0IG1haW4gPSB3aW4ud2ViQ29udGVudHMubWFpbkZyYW1lO1xuICBjb25zdCBpZnJhbWUgPSBtYWluLmZyYW1lc1swXTtcbiAgdHJ5IHtcbiAgICAvLyBDb21wb3NpdG9yL2NhcHR1cmUgY2FkZW5jZSBjYXAsIE5PVCBvdXRwdXQgZnBzOyBmcmFtZXMgYXJlIGRhbWFnZS1kcml2ZW4gcGVyIHZpcnR1YWwgc3RlcC5cbiAgICB3aW4ud2ViQ29udGVudHMuc2V0RnJhbWVSYXRlKFJFTkRFUl9GUFMpO1xuICAgIGF3YWl0IHBhdXNlVmlydHVhbFRpbWUoY2RwKTtcblxuICAgIGZvciAobGV0IGZyYW1lSWQgPSAwOyBmcmFtZUlkIDwgdG90YWw7IGZyYW1lSWQrKykge1xuICAgICAgc2lnbmFsPy50aHJvd0lmQWJvcnRlZCgpO1xuICAgICAgY29uc3QgZnJhbWVNcyA9IChmcmFtZUlkICsgMSkgKiBmcmFtZUludGVydmFsO1xuXG4gICAgICAvLyBBcm0gYmVmb3JlIGRyYXdTdGVnbyBzbyB0aGUgY29tbWl0IGFjayBjYW4ndCBiZSBtaXNzZWQ7IGJyYW5jaCBjYXRjaCBrZWVwcyBhbiBlYXJseSB0aWNrIGZhaWx1cmUgZnJvbSBvcnBoYW5pbmcgaXQuXG4gICAgICBjb25zdCBzd2FwcGVkID0gd2FpdFN0ZWdvVGljayh3aW4ud2ViQ29udGVudHMpO1xuICAgICAgc3dhcHBlZC5jYXRjaCgoKSA9PiB7fSk7XG4gICAgICAvLyBJbmRlcGVuZGVudCB0YXJnZXRzIChpZnJhbWUgY2xvY2sgdnMgbWFpbi1mcmFtZSBzdGVnbyBjYW52YXMpOiBvbmUgY29uY3VycmVudCBob3AgaW5zdGVhZCBvZiB0d28gc2VyaWFsIG9uZXMuXG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChbdGljayh7IGZyYW1lOiBpZnJhbWUsIHRpbWVzdGFtcE1zOiBmcmFtZU1zLCBzaWduYWwgfSksIGRyYXdTdGVnbyh3aW4ud2ViQ29udGVudHMsIGZyYW1lTXMpXSk7XG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChbYWR2YW5jZVZpcnR1YWxUaW1lKGNkcCwgZnJhbWVJbnRlcnZhbCksIHN3YXBwZWRdKTtcbiAgICAgIGNvbnN0IHBhaW50ZWQgPSBhd2FpdCBwYWludCh7IHNvdXJjZSwgZnBzLCB3aW4sIHNpemU6IHsgd2lkdGgsIGhlaWdodCB9LCBtczogZnJhbWVNcyB9KTtcbiAgICAgIGlmIChwYWludGVkKSB7XG4gICAgICAgIGhlbGQgPSAwO1xuICAgICAgICBkcm9wU3RhdHMud3JvdGUoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGhlbGQrKztcbiAgICAgICAgZHJvcFN0YXRzLmRyb3BwZWQoMSk7XG4gICAgICB9XG4gICAgICBjb25zdCBmcmFtZSA9IHBhaW50ZWQgPz8gbGFzdEZyYW1lO1xuICAgICAgaWYgKCFmcmFtZSB8fCBoZWxkID49IGZwcykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHJlbmRlcmVyIGV4YXVzdGVkIEAgJHtmcmFtZU1zfWApO1xuICAgICAgfVxuICAgICAgLy8gVGhlIGNvbXBvc2l0b3IgbWF5IHBhaW50IHF1aWNrZXIgdGhhbiB1cywgb3Igc3R1Y2ssIHNvIHdlIGF0IGxlYXN0IHBhaW50IG9uY2VcbiAgICAgIGNvbnN0IHJlcGVhdCA9IE1hdGgubWF4KDEsIE1hdGguY2VpbChmcmFtZS50cyAvIGZyYW1lSW50ZXJ2YWwgLSBmcmFtZUlkKSk7XG4gICAgICBsYXN0RnJhbWUgPSBmcmFtZTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVwZWF0OyBpKyspIHtcbiAgICAgICAgdGFrZXIuY2FwdHVyZShmcmFtZU1zLCBmcmFtZS5waXgpO1xuICAgICAgICBibGFua1N0YXRzLnNhbXBsZShmcmFtZS5waXgpO1xuICAgICAgICAvLyBBd2FpdGVkOiB0aGUgbGltaXRlciBxdWV1ZXMgd2l0aG91dCBib3VuZCwgc28gYW4gZW5jb2RlciBzbG93ZXIgdGhhbiBjYXB0dXJlIHBpbnMgb25lIGZ1bGwgQkdSQSBmcmFtZSBwZXIgYmFja2xvZyBlbnRyeS5cbiAgICAgICAgYXdhaXQgcGlwZWxpbmUuZW5jb2RlQkdSQShmcmFtZS5waXgpO1xuICAgICAgICB3cml0dGVuKys7XG4gICAgICB9XG4gICAgICBjb25zdCBuZXdQcm9ncmVzcyA9IE1hdGguZmxvb3IoKHdyaXR0ZW4gLyB0b3RhbCkgKiAxMDApO1xuICAgICAgaWYgKG5ld1Byb2dyZXNzICE9PSBwcm9ncmVzcykge1xuICAgICAgICBwcm9ncmVzcyA9IG5ld1Byb2dyZXNzO1xuICAgICAgICBvblByb2dyZXNzKHByb2dyZXNzKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZmluYWxseSB7XG4gICAgYXdhaXQgZGlzcG9zZVdpbmRvdyh3aW4pO1xuICAgIGF3YWl0IHBpcGVsaW5lLmZpbmlzaCgpO1xuICAgIHNjcmVlbnNob3RzID0gYXdhaXQgdGFrZXIuZmluaXNoKGxhc3RGcmFtZT8ucGl4KTtcbiAgfVxuXG4gIGlmICh3cml0dGVuID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwibm8gZnJhbWVzIGNhcHR1cmVkXCIpO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGJsYW5rID0gYmxhbmtTdGF0cy5maW5hbGl6ZSgpO1xuICAgIGlmIChibGFuayA+PSBCTEFOS19XQVJOX1JBVElPKSB7XG4gICAgICBsb2dnZXIud2FybihUQUcsIGAke3NvdXJjZX0gYmxhbmstZnJhbWUgcmF0aW8gJHtNYXRoLnJvdW5kKGJsYW5rICogMTAwKX0lIOKAlCBwb3NzaWJsZSB3aGl0ZS9ibGFuayBzY3JlZW5gKTtcbiAgICB9XG4gICAgY29uc3QgeyBqYW5rIH0gPSBkcm9wU3RhdHMuZmluYWxpemUoKTtcbiAgICBpZiAoamFuayA+PSBKQU5LX1dBUk5fU0NPUkUpIHtcbiAgICAgIGxvZ2dlci53YXJuKFRBRywgYCR7c291cmNlfSBqYW5rIHNjb3JlICR7amFuay50b0ZpeGVkKDIpfSDigJQgZnJhbWVzIGhlbGQgcGFzdCBwYWludCB0aW1lb3V0YCk7XG4gICAgfVxuICAgIHJldHVybiB7IHdyaXR0ZW4sIG91dEZpbGVzLCBibGFuaywgamFuaywgc2NyZWVuc2hvdHMgfTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMS8zMC5cblxuaW1wb3J0IHsgb2sgfSBmcm9tIFwibm9kZTphc3NlcnRcIjtcbmltcG9ydCB7IG1rZGlyIH0gZnJvbSBcIm5vZGU6ZnMvcHJvbWlzZXNcIjtcbmltcG9ydCB7IGRpcm5hbWUgfSBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyBhcHAsIE1lbnUgfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IHN0YXJ0RWxlY3Ryb25DcmFzaFJlcG9ydGVyIH0gZnJvbSBcIi4vYmFzZS9jcmFzaFwiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4vYmFzZS9sb2dnaW5nXCI7XG5pbXBvcnQgeyBtYWtlQ0xJIH0gZnJvbSBcIi4vY29tbW9uXCI7XG5pbXBvcnQgeyB0eXBlIElwY01zZywgSXBjTXNnVHlwZSwgSXBjV3JpdGVyIH0gZnJvbSBcIi4vcmVuZGVyZXIvaXBjXCI7XG5pbXBvcnQgeyBzZXR1cFB1cFByb3RvY29sIH0gZnJvbSBcIi4vcmVuZGVyZXIvcHJvdG9jb2xcIjtcbmltcG9ydCB7IHJlbmRlciB9IGZyb20gXCIuL3JlbmRlcmVyL3JlbmRlclwiO1xuaW1wb3J0IHsgd2l0aFJlcmVuZGVyIH0gZnJvbSBcIi4vcmVuZGVyZXIvcmVyZW5kZXJcIjtcbmltcG9ydCB7IHNob290IH0gZnJvbSBcIi4vcmVuZGVyZXIvc2hvb3RcIjtcblxuY29uc3QgVEFHID0gXCJbQXBwXVwiO1xuXG5wcm9jZXNzLmVudltcIkVMRUNUUk9OX0RJU0FCTEVfU0VDVVJJVFlfV0FSTklOR1NcIl0gPSBcIjFcIjtcblxuZnVuY3Rpb24gcHJpbnRGZWF0dXJlcygpIHtcbiAgbG9nZ2VyLmRlYnVnKFRBRywgXCJncHUgZmVhdHVyZXM6XCIsIGFwcC5nZXRHUFVGZWF0dXJlU3RhdHVzKCkpO1xufVxuXG5jb25zdCBjdHJsID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xubGV0IGV4aXRpbmcgPSBmYWxzZTtcblxuc3RhcnRFbGVjdHJvbkNyYXNoUmVwb3J0ZXIoKTtcbk1lbnUuc2V0QXBwbGljYXRpb25NZW51KG51bGwpO1xuYXBwLmRvY2s/LmhpZGUoKTtcbmFwcC5vbihcIndpbmRvdy1hbGwtY2xvc2VkXCIsICgpID0+IHt9KTtcbmFwcC5vbihcImdwdS1pbmZvLXVwZGF0ZVwiLCBwcmludEZlYXR1cmVzKTtcbmFwcC5vbihcImJlZm9yZS1xdWl0XCIsIChlKSA9PiAhZXhpdGluZyAmJiBlLnByZXZlbnREZWZhdWx0KCkpO1xuYXBwLm9uKFwid2lsbC1xdWl0XCIsIChlKSA9PiAhZXhpdGluZyAmJiBlLnByZXZlbnREZWZhdWx0KCkpO1xuXG5vayhwcm9jZXNzLnNlbmQsIFwiaXBjIGNoYW5uZWwgbWlzc2luZyDigJQgc3Bhd24gd2l0aCBzdGRpb1szXT0naXBjJ1wiKTtcbnByb2Nlc3Mub25jZShcImRpc2Nvbm5lY3RcIiwgKCkgPT4gY3RybC5hYm9ydChcImRpc2Nvbm5lY3RcIikpO1xucHJvY2Vzcy5vbihcIm1lc3NhZ2VcIiwgKHJhdykgPT4ge1xuICBjb25zdCBtc2cgPSByYXcgYXMgSXBjTXNnO1xuICBpZiAobXNnLnR5cGUgPT09IElwY01zZ1R5cGUuQ2FuY2VsKSB7XG4gICAgY3RybC5hYm9ydChtc2cucmVhc29uKTtcbiAgfVxufSk7XG5cbm1ha2VDTEkoe1xuICBuYW1lOiBcImFwcFwiLFxuICBydW46IGFzeW5jIChzb3VyY2UsIG9wdGlvbnMpID0+IHtcbiAgICBjb25zdCBpcGMgPSBuZXcgSXBjV3JpdGVyKCk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGFwcC53aGVuUmVhZHkoKTtcbiAgICAgIHNldHVwUHVwUHJvdG9jb2woKTtcbiAgICAgIHByaW50RmVhdHVyZXMoKTtcbiAgICAgIGZvciAoY29uc3Qgb3V0IG9mIG9wdGlvbnMub3V0RmlsZXMpIHtcbiAgICAgICAgYXdhaXQgbWtkaXIoZGlybmFtZShvdXQpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGFjdGlvbiA9IG9wdGlvbnMuZGV0ZXJtaW5pc3RpYyA/IHNob290IDogcmVuZGVyO1xuICAgICAgY3RybC5zaWduYWwudGhyb3dJZkFib3J0ZWQoKTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHdpdGhSZXJlbmRlcihjdHJsLnNpZ25hbCwgKCkgPT5cbiAgICAgICAgYWN0aW9uKHtcbiAgICAgICAgICBzb3VyY2UsXG4gICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICBzaWduYWw6IGN0cmwuc2lnbmFsLFxuICAgICAgICAgIG9uUHJvZ3Jlc3M6IChwKSA9PiBpcGMud3JpdGVQcm9ncmVzcyhwKSxcbiAgICAgICAgICBvbkNvbnNvbGU6IChsLCBtKSA9PiBpcGMud3JpdGVDb25zb2xlKGwsIG0pLFxuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgICBhd2FpdCBpcGMud3JpdGVEb25lKHJlc3VsdCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc3QgZXJyb3IgPSBlIGFzIEVycm9yO1xuICAgICAgY29uc3QgbSA9IGVycm9yLnN0YWNrID8/IGVycm9yLm1lc3NhZ2UgPz8gU3RyaW5nKGUgPz8gXCJ1bmtub3duIGVycm9yXCIpO1xuICAgICAgYXdhaXQgaXBjLndyaXRlRXJyb3IobSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGV4aXRpbmcgPSB0cnVlO1xuICAgICAgYXBwLmV4aXQoKTtcbiAgICB9XG4gIH0sXG59KTtcbiJdfQ==