pup-recorder 0.7.6 → 0.7.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/app.cjs +3 -3
- package/dist/chunk-GEVLAQUQ.js +4 -0
- package/dist/cli.js +1 -1
- package/dist/index.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-2UDJY3KA.js +0 -4
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$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 F=require('zod');require('events');var api=require('node-av/api'),promises$1=require('timers/promises'),url=require('url'),crypto=require('crypto'),os=require('os');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var F__default=/*#__PURE__*/_interopDefault(F);var Co=Object.create;var pt=Object.defineProperty;var Fo=Object.getOwnPropertyDescriptor;var We=(r,e)=>(e=Symbol[r])?e:Symbol.for("Symbol."+r),oe=r=>{throw TypeError(r)};var Gt=(r,e,t)=>e in r?pt(r,e,{enumerable:true,configurable:true,writable:true,value:t}):r[e]=t;var zt=r=>[,,,Co(null)],jt=["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:jt[r],name:e,metadata:o,addInitializer:i=>t._?oe("Already initialized"):n.push(Te(i||null))}),mt=(r,e)=>Gt(e,We("metadata"),r[3]),qt=(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,l=false,m=false,h=2,b=jt[u+5],P=r[h]||(r[h]=[]),y=((n=n.prototype),Fo(n,t));for(var E=o.length-1;E>=0;E--)d=Ao(u,t,c={},r[3],P),(d.static=l,d.private=m,p=d.access={has:v=>t in v},(p.get=v=>v[t]),u>2),a=(0, o[E])(y[b],d),c._=1,Te(a)&&(y[b]=a);return y&&pt(n,t,y),n},Kt=(r,e,t)=>Gt(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 Ro=()=>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=Ro();function Xt(r,e,t){try{return e(process.env[r])}catch{return t}}function j(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 Yt(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 Bo=module$1.createRequire(f),Qt=Xt("PUP_LOG_LEVEL",j,2),le=path.dirname(Bo.resolve("pup-recorder/package.json"));path.join(le,"dist","app.cjs");var Zt=path.join(le,"dist","runtime","preload.cjs");var ht="<pup@debug>",wt="<pup@info>",_t="<pup@warn>",gt="<pup@error>",bt="<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 er,tr,rr,or,nr,ne;nr=[Re],or=[Re],rr=[Re],tr=[Re],er=[Re];var q=class{constructor(e=Qt){this._level=e;qt(ne,5,this);Kt(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?.(ht,...e);}info(...e){this.impl?.info?.(wt,...e);}warn(...e){this.impl?.warn?.(_t,...e);}error(...e){this.impl?.error?.(gt,...e);}fatal(...e){this.impl?.error?.(bt,...e),process.exit(1);}dispatch(e){let t=e.trimEnd();t.startsWith(ht)?this.debug(t.slice(ht.length+1)):t.startsWith(wt)?this.info(t.slice(wt.length+1)):t.startsWith(_t)?this.warn(t.slice(_t.length+1)):t.startsWith(gt)?this.error(t.slice(gt.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(bt)?i+=c.slice(bt.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=zt(),me(ne,1,"debug",nr,q),me(ne,1,"info",or,q),me(ne,1,"warn",rr,q),me(ne,1,"error",tr,q),me(ne,1,"fatal",er,q),mt(ne,q);var w=new q;nodeAv.Log.setCallback((r,e)=>{let t=e.trimEnd();t&&(r<=constants.AV_LOG_ERROR?w.error(t):r<=constants.AV_LOG_WARNING&&w.warn(t));});var Ho="[Crash]";function sr(){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}),w.debug(Ho,"set dump to",r);}function fe(r,e){return (...t)=>{try{let o=r(...t);return o instanceof Promise?o.catch(()=>e):o}catch{return e}}}var Wo="--pup-priv-args";function ar(){let r=process.argv,e=r.find(o=>o.startsWith(Wo));if(!e)return w.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)),w.debug("pupargs",t),t}var $o=1920,Go=1080,zo=30,jo=5,qo=10,Ko=["out/html.mp4","out/html.webm"],cr=F__default.default.object({duration:F__default.default.number().describe("Duration in seconds"),width:F__default.default.number().describe("Video width"),height:F__default.default.number().describe("Video height"),fps:F__default.default.number().describe("Frames per second"),withAudio:F__default.default.boolean().describe("Capture and encode audio"),outFiles:F__default.default.array(F__default.default.string()).describe("Output paths; extension (.mp4/.webm) selects encoder"),useInnerProxy:F__default.default.boolean().describe("Use bilibili inner proxy for resource access"),deterministic:F__default.default.boolean().describe("Render by frame rather than recording"),disableGpu:F__default.default.boolean().describe("Disable GPU rendering, may reduce performance but increase stability"),disableHwCodec:F__default.default.boolean().describe("Disable hardware video encoder (NVENC/VideoToolbox), use software x265"),disableWebSecurity:F__default.default.boolean().describe("Drop the same-origin wall; required to record a local file"),ignoreCertificateErrors:F__default.default.boolean().describe("Record over TLS the platform rejects, e.g. a self-signed intranet host"),windowTolerant:F__default.default.boolean().describe("Fall back to dom-ready if warmup load times out"),windowTimeout:F__default.default.number().describe("Window load timeout in seconds"),screenshots:F__default.default.array(F__default.default.number()).describe("Second marks to dump frame bitmaps as PNG")}),dr={width:$o,height:Go,fps:zo,duration:jo,outFiles:Ko,withAudio:false,useInnerProxy:false,deterministic:false,disableGpu:false,disableHwCodec:false,disableWebSecurity:false,ignoreCertificateErrors:false,windowTolerant:false,windowTimeout:qo,screenshots:[]};function Jo(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 pr(r){let e=cr.shape,t=dr;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:fe(j,t.width)(n.width),height:fe(j,t.height)(n.height),fps:fe(j,t.fps)(n.fps),duration:fe(j,t.duration)(n.duration),outFiles:ft(Yt)(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:fe(j,t.windowTimeout)(n.windowTimeout),screenshots:ft(j)(n.screenshots)});}catch(i){w.fatal(i);}}),await commander.program.parseAsync(ar());}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 mr(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 xt(r,e){return L(Ie(r,"Runtime.evaluate",{expression:e}),je,"evalIn")}function lr(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 fr(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 Qo="stego-tick";function hr(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 F=require('zod');require('events');var api=require('node-av/api'),promises$1=require('timers/promises'),url=require('url'),crypto=require('crypto'),os=require('os');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var F__default=/*#__PURE__*/_interopDefault(F);var Co=Object.create;var pt=Object.defineProperty;var Fo=Object.getOwnPropertyDescriptor;var We=(r,e)=>(e=Symbol[r])?e:Symbol.for("Symbol."+r),oe=r=>{throw TypeError(r)};var Gt=(r,e,t)=>e in r?pt(r,e,{enumerable:true,configurable:true,writable:true,value:t}):r[e]=t;var zt=r=>[,,,Co(null)],jt=["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:jt[r],name:e,metadata:o,addInitializer:i=>t._?oe("Already initialized"):n.push(Te(i||null))}),mt=(r,e)=>Gt(e,We("metadata"),r[3]),qt=(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,l=false,m=false,h=2,b=jt[u+5],P=r[h]||(r[h]=[]),y=((n=n.prototype),Fo(n,t));for(var E=o.length-1;E>=0;E--)d=Ao(u,t,c={},r[3],P),(d.static=l,d.private=m,p=d.access={has:v=>t in v},(p.get=v=>v[t]),u>2),a=(0, o[E])(y[b],d),c._=1,Te(a)&&(y[b]=a);return y&&pt(n,t,y),n},Kt=(r,e,t)=>Gt(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 Ro=()=>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=Ro();function Xt(r,e,t){try{return e(process.env[r])}catch{return t}}function j(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 Yt(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 Bo=module$1.createRequire(f),Qt=Xt("PUP_LOG_LEVEL",j,2),le=path.dirname(Bo.resolve("pup-recorder/package.json"));path.join(le,"dist","app.cjs");var Zt=path.join(le,"dist","runtime","preload.cjs");var ht="<pup@debug>",wt="<pup@info>",_t="<pup@warn>",gt="<pup@error>",bt="<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 er,tr,rr,or,nr,ne;nr=[Re],or=[Re],rr=[Re],tr=[Re],er=[Re];var q=class{constructor(e=Qt){this._level=e;qt(ne,5,this);Kt(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?.(ht,...e);}info(...e){this.impl?.info?.(wt,...e);}warn(...e){this.impl?.warn?.(_t,...e);}error(...e){this.impl?.error?.(gt,...e);}fatal(...e){this.impl?.error?.(bt,...e),process.exit(1);}dispatch(e){let t=e.trimEnd();t.startsWith(ht)?this.debug(t.slice(ht.length+1)):t.startsWith(wt)?this.info(t.slice(wt.length+1)):t.startsWith(_t)?this.warn(t.slice(_t.length+1)):t.startsWith(gt)?this.error(t.slice(gt.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(bt)?i+=c.slice(bt.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=zt(),me(ne,1,"debug",nr,q),me(ne,1,"info",or,q),me(ne,1,"warn",rr,q),me(ne,1,"error",tr,q),me(ne,1,"fatal",er,q),mt(ne,q);var w=new q;nodeAv.Log.setCallback((r,e)=>{let t=e.trimEnd();t&&(r<=constants.AV_LOG_ERROR?w.error(t):r<=constants.AV_LOG_WARNING&&w.warn(t));});var Ho="[Crash]";function sr(){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}),w.debug(Ho,"set dump to",r);}function fe(r,e){return (...t)=>{try{let o=r(...t);return o instanceof Promise?o.catch(()=>e):o}catch{return e}}}var $o="--pup-priv-args";function ar(){let r=process.argv,e=r.find(n=>n.startsWith($o));if(!e)return w.debug("procargv",r),process.argv;let t=["exec",...r.slice(-1)],o=JSON.parse(fs$1.readFileSync(e.split("=")[1],"utf8"));return t.push(...o),w.debug("pupargs",t),t}var Go=1920,zo=1080,jo=30,qo=5,Ko=10,Xo=["out/html.mp4","out/html.webm"],cr=F__default.default.object({duration:F__default.default.number().describe("Duration in seconds"),width:F__default.default.number().describe("Video width"),height:F__default.default.number().describe("Video height"),fps:F__default.default.number().describe("Frames per second"),withAudio:F__default.default.boolean().describe("Capture and encode audio"),outFiles:F__default.default.array(F__default.default.string()).describe("Output paths; extension (.mp4/.webm) selects encoder"),useInnerProxy:F__default.default.boolean().describe("Use bilibili inner proxy for resource access"),deterministic:F__default.default.boolean().describe("Render by frame rather than recording"),disableGpu:F__default.default.boolean().describe("Disable GPU rendering, may reduce performance but increase stability"),disableHwCodec:F__default.default.boolean().describe("Disable hardware video encoder (NVENC/VideoToolbox), use software x265"),disableWebSecurity:F__default.default.boolean().describe("Drop the same-origin wall; required to record a local file"),ignoreCertificateErrors:F__default.default.boolean().describe("Record over TLS the platform rejects, e.g. a self-signed intranet host"),windowTolerant:F__default.default.boolean().describe("Fall back to dom-ready if warmup load times out"),windowTimeout:F__default.default.number().describe("Window load timeout in seconds"),screenshots:F__default.default.array(F__default.default.number()).describe("Second marks to dump frame bitmaps as PNG")}),dr={width:Go,height:zo,fps:jo,duration:qo,outFiles:Xo,withAudio:false,useInnerProxy:false,deterministic:false,disableGpu:false,disableHwCodec:false,disableWebSecurity:false,ignoreCertificateErrors:false,windowTolerant:false,windowTimeout:Ko,screenshots:[]};function Qo(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 pr(r){let e=cr.shape,t=dr;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(Qo(o),{width:fe(j,t.width)(n.width),height:fe(j,t.height)(n.height),fps:fe(j,t.fps)(n.fps),duration:fe(j,t.duration)(n.duration),outFiles:ft(Yt)(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:fe(j,t.windowTimeout)(n.windowTimeout),screenshots:ft(j)(n.screenshots)});}catch(i){w.fatal(i);}}),await commander.program.parseAsync(ar());}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 mr(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 xt(r,e){return L(Ie(r,"Runtime.evaluate",{expression:e}),je,"evalIn")}function lr(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 fr(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 Zo="stego-tick";function hr(r,e){let{width:t,height:o}=e;return `<!DOCTYPE html>
|
|
2
2
|
<html>
|
|
3
3
|
<head>
|
|
4
4
|
<meta charset="UTF-8">
|
|
@@ -91,6 +91,6 @@
|
|
|
91
91
|
})();
|
|
92
92
|
</script>
|
|
93
93
|
</body>
|
|
94
|
-
</html>`}function qe(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 wr(r){return xt(r,"__pup_start_stego__()")}async function _r(r,e){await xt(r.debugger,`__pup_draw_stego__(${e})`);}async function gr(r){let e=new Promise(t=>r.ipc.once(Qo,t));await L(e,5e3,"stego tick");}var yt="pup",Zo="pup-frame",br={standard:true,secure:true,bypassCSP:true,supportFetchAPI:true,corsEnabled:true,stream:true,codeCache:true};electron.protocol.registerSchemesAsPrivileged([{scheme:yt,privileges:br},{scheme:Zo,privileges:br}]);function yr(){electron.protocol.handle(yt,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=hr(t,{width:o,height:n});return new Response(i,{headers:{"content-type":"text/html"}})});}function vr(r,e){let t=new URL(`${yt}://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 vn={[constants.AV_SAMPLE_FMT_FLT]:"flt",[constants.AV_SAMPLE_FMT_FLTP]:"fltp"},Ke=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 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 a=o.createFilter(s,"sink");if(!a)throw new Error("Failed to create abuffersink");let c=vn[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 h=m,b=true;}finally{x(l,h,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]);}},O=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 Et=16;var St=23,be=32,xe=33,Xe=34,Tr=39;function Rr(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 Ct(r,e,t){let o=(r&63)<<1|e>>5&1,n=(e&31)<<3|t&7;return [o,n]}function $(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}=Rr(r[n],r[n+1]);e.push({type:s,layerId:a,data:r.subarray(n,i)}),t=i;}return e}function Ft(r,e){let t=Buffer.from(r),{type:o,temporalId:n}=Rr(t[0],t[1]),[i,s]=Ct(o,e,n);return t[0]=i,t[1]=s,t}function G(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 Pn=48,Br=24,En=2,Sn=10,At=0,Cn=1;function Ir(r,e,t){let o=e>>3,n=1<<7-(e&7),i=r[o]??0;r[o]=t?i|n:i&~n;}function Mr(r,e){let t=G(r);return Ir(t,e+En,0),Ir(t,e+Sn,1),ae(t)}function Ye(r){let e=$(r);if(e.length===0)return r;let t=[];for(let o of e){let n=o.data;o.type===be?n=Mr(o.data,Pn):o.type===xe&&(n=Mr(o.data,Br)),t.push(J,n);}return Buffer.concat(t)}function Fn(r,e,t){let o=G(r),n=new O(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=G(r),i=new O(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 Nr(r){let e=Br+96;return Fn(r,e,1)}function Or(r){return An(r,16,1,1)}function kn(r){let e=r.readUe();return e&1?e+1>>1:-(e>>1)}function Tn(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 Rn(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>=Et&&e<=St;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))):Tn(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===Cn||n===At)&&(r.read(1)&&(r.readUe(),n===At&&r.readUe()),n===At&&r.read(1),t.cabacInitPresent&&r.read(1),r.readUe()),kn(r),t.ppsHasLoopFilterAcrossSlicesFlag&&r.read(1),r.pos}function Dr(r,e,t){let o=G(r),n=new O(o),i=new O(o),s=Rn(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>=Et&&e<=St&&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 In(r){let e=new O(G(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 Mn(r,e){r.w(16385,16),r.w(0,4),r.flag(1),r.flag(1),r.w(1,6),r.w(e.maxSubLayersMinus1,3),r.flag(e.maxSubLayersMinus1===0),r.w(65535,16),r.copy(e.ptlBits,e.ptlStart,e.ptlEnd-e.ptlStart),r.flag(1);for(let t=0;t<=e.maxSubLayersMinus1;t++)r.ue(4),r.ue(2),r.ue(4);r.w(1,6),r.ue(1),r.flag(1),r.flag(1),r.flag(0),r.flag(1),r.align(1);}function Bn(r,e,t,o){if(r.copy(e.ptlBits,e.ptlEnd-8,8),e.maxSubLayersMinus1>0){for(let n=0;n<e.maxSubLayersMinus1;n++)r.w(0,2);for(let n=e.maxSubLayersMinus1;n<8;n++)r.w(0,2);}r.flag(0);for(let n=0;n<16;n++)r.flag(n===2||n===3);r.w(0,3),r.w(0,3),r.flag(1),r.w(1,6),r.w(1,1),r.w(1,1),r.w(0,4),r.flag(0),r.ue(0),r.flag(0),r.flag(0),r.flag(0),r.ue(2),r.flag(1),r.copy(e.ptlBits,e.ptlStart,e.ptlEnd-e.ptlStart),r.ue(0),r.w(0,2),r.w(1,2),r.w(2,2),r.ue(0),r.w(t,16),r.w(o,16),r.flag(1),r.w(1,2),r.w(0,4),r.w(0,4),r.flag(0),r.flag(1),r.flag(0),r.flag(1),r.flag(0),r.ue(0),r.ue(0),r.ue(0),r.ue(0),r.ue(0),r.flag(0),r.ue(0),r.flag(0),r.flag(0);}function Lr(r,e,t){let o=In(r);if(!o)return r;let n=new X;return Mn(n,o),Bn(n,o,e,t),n.bits.push(1),n.align(0),ae(Y(n.bits))}function Vr(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 Nn(r,e){return r===xe?Nr(e):r===Xe?Or(e):e}function Ur(r){let{baseExtradata:e,alphaExtradata:t}=r,o=$(e),n=$(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?Lr(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=Nn(c.type,p.data);s.push(J,Ft(u,1));}}}return s.push(On()),Buffer.concat(s)}function On(){let[t,o]=Ct(Tr,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 Hr(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=Dr(n.data,n.type,t);o.push(J,Ft(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=Hr($(e.data),$(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 Un(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 Hn(r){let e=new O(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),Un(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 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 l=e.readUe(),m=e.readUe();d=l+m;for(let h=0;h<l;h++)e.readUe(),e.read(1);for(let h=0;h<m;h++)e.readUe(),e.read(1);}let p=e.read(1)===1;p&&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 Wn(r){let e=new O(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 Wr(r){let e=$(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=Hn(G(t.data)),i=Wn(G(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 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=Wr(u.extraData);let h=s.addStream(u,"hvc1");let b=Ur({baseExtradata:u.extraData,alphaExtradata:l.extraData,width:t,height:o});h.codecpar.extradata=Ye(b);let g=t*o;let P=(t+1>>1)*(o+1>>1);let y=Buffer.alloc(g+P*2);y.fill(128,g);let E=p.use(M());let v=p.use(M());let S=p.use(ie(t,o,constants.AV_PIX_FMT_YUV420P));p.move();return new r({baseCtx:u,alphaCtx:l,basePkt:E,alphaPkt:v,stream:h,alphaSwFrame:S,alphaBuf:y,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++;Vr(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 Oe=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 a=nodeAv.Codec.findEncoderByName(t);if(!a)throw new Error(`Video encoder not found: ${t}`);let c=_(l,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 h=m,b=true;}finally{x(l,h,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 l=a.addStream(d,"hvc1");p.move();return new r(d,u,l)}catch(h){var b=h,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]",ai={deadline:"realtime","cpu-used":"8","row-mt":"1",threads:"4"},ci={outSampleRate:44100,outSampleFmt:constants.AV_SAMPLE_FMT_FLTP,codecName:constants.FF_ENCODER_AAC},di={outSampleRate:48e3,outSampleFmt:constants.AV_SAMPLE_FMT_FLT,codecName:constants.FF_ENCODER_LIBOPUS};async function zr(r,e){let{width:t,height:o,fps:n,disableHwCodec:i,sharedHw:s}=r;return ui({width:t,height:o,fps:n,disableHwCodec:i,sharedHw:s},e)}async function jr(r,e){let{width:t,height:o,fps:n}=r;return {video:await Oe.create({width:t,height:o,fps:n,codecName:Be,codecOpts:ai,bitrate:4e6,pixelFormat:constants.AV_PIX_FMT_YUVA420P,muxer:e}),codec:await se.create(t,o),ownsHw:false}}function qr(r,e){let t=r==="mp4"?ci:di;return Ke.create({...t,globalHeader:true,bitrate:128e3,muxer:e})}async function ui(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 w.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 w.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(P){w.warn(et,"Hardware codec session limits reached, use software encoder",P),d&&c?.dispose();}w.debug(et,"using software libx265 HEVC alpha encoder");let p=_(m,new DisposableStack);let u=p.use(await Oe.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 se.create(t,o));p.move();return {video:u,codec:l,ownsHw:!1}}catch(h){var b=h,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 zr(e,o):await jr(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 qr(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 Xr=5e3,bi=3e3,ve=class r{_s;_disposed=false;constructor(e){this._s=e;}static async create(e){var h=[];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(E=>Le.kindFromPath(E));let d=!a&&c.includes("mp4");let p=_(h,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 E=0;E<i.length;E++){let v=await Le.create({outFile:i[E],kind:c[E],width:t,height:o,fps:n,withAudio:s,disableHwCodec:a,sharedHw:c[E]==="mp4"&&l?u:void 0});p.use(v),m.push(v);}p.move();return new r({sinks:m,sharedHw:u,limiter:new we(1),outFiles:i,opts:e})}catch(b){var g=b,P=true;}finally{var y=x(h,g,P);y&&await y;}}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),bi,e)}async finish(){try{await L(this._s.limiter.drain(),Xr,"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(),Xr,"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 xi(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 yi(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,l=xi(r,u),m=(i.get(l)??0)+1;i.set(l,m),s.has(l)||s.set(l,u),m>c&&(c=m,a=l);}return s.get(a)??0}function vi(r,e,t){let o=yi(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 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)-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++,vi(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 Yr="audio-meta",Jr="audio-chunk";function Qr({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(Yr,n),r.ipc.on(Jr,i),()=>{r.ipc.removeListener(Yr,n),r.ipc.removeListener(Jr,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 Zr="--pup-world=",eo="--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]",ro=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(ro.values()),ki=["pup:","pup-frame:","file:","data:","blob:","chrome-extension:","devtools:"];function Ti(r){for(let e of ki)if(r.startsWith(e))return true;return false}function Ri(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=ro.get(e.hostname);return t?(e.hostname=t,e.protocol="http:",e.toString()):r}function oo({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 l=t?Ce(u):u;i.schedule(()=>{let m=`${e.id}_${d.id}`;return w.debug(nt,"start:",{key:m,url:u,proxied:l,method:d.method,source:r,stats:i.stats}),p(l===u?{cancel:false}:{cancel:false,redirectURL:l}),Ti(u)?Promise.resolve():a(m,()=>{w.debug(nt,"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&&Ri(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),w.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:l,error:m,resourceType:h}=d;w.debug(nt,"error:",{key:p,url:u,method:l,error:m,resourceType:h,source:r});});}function kt(r){let e=r.webContents.session.webRequest;e.onBeforeRequest(null),e.onHeadersReceived(null),e.onCompleted(null),e.onErrorOccurred(null);}var Z="[Window]",no=new Error("window timeout"),Mi=["Mixed Content: The page at"];function Bi({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:no),o),p=u=>{clearTimeout(d),u?a(u):s();};i?.throwIfAborted(),i?.addEventListener("abort",()=>p(i.reason),{once:true}),e.webContents.once("dom-ready",()=>{w.debug(Z,"dom-ready:",{source:r}),c=true;}),e.webContents.once("did-stop-loading",()=>{w.debug(Z,"did-stop-loading:",{source:r}),p();}),e.webContents.once("did-fail-load",(u,l,m,h)=>{let b=`did-fail-load: ${JSON.stringify({url:h,source:r,code:l,desc:m})}`;w.error(Z,b),p(new Error(b));}),e.webContents.once("preload-error",(u,l,m)=>{w.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 h=`render-process-gone: ${JSON.stringify({source:r,exitCode:l,reason:m})}`;w.error(Z,h),p(new Error(h));}),t();})}function Fe(r){return new Promise(e=>{kt(r);let t=setTimeout(()=>{try{w.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 Ni={shoot:path.join(le,"dist","runtime","shoot.global.js"),render:path.join(le,"dist","runtime","render.global.js"),audio:path.join(le,"dist","runtime","audio.global.js")};function Oi(r){let e=r.deterministic?"shoot":r.withAudio?"audio":"render";return Ni[e]}async function io({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:Zt,additionalArguments:[`${Zr}${Oi(e)}`,...e.withAudio?[eo]:[]]}});oo({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:l,sourceId:m})=>{if(p==="warning"&&Mi.find(b=>u.startsWith(b)))return;let h=[Z,"console:",{message:u,lineNumber:l,sourceId:m,source:r}];p==="error"?w.error(...h):w.debug(...h),e.onConsole(p,u);});try{let p=vr(c,{width:i,height:s});await Bi({source:r,win:d,action:()=>d.loadURL(p),timeoutMs:e.windowTimeout*1e3,tolerant:t,signal:o});}catch(p){throw await Fe(d),p}return d}var Di=rt({fn:io,maxAttempts:2});async function it({source:r,renderer:e,onCreated:t,signal:o}){o?.throwIfAborted();let n,i;try{n=await Di({source:r,renderer:e,signal:o});}catch(a){i=a;}let s=()=>io({source:r,renderer:e,onCreated:t,signal:o,tolerant:e.windowTolerant});if(e.windowTolerant&&i===no)return w.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(),kt(n),await Ge(2e3),await Fe(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 so="[Render]";async function ao(r){var z=[];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=_(z,await ve.create({width:o,height:n,fps:t,outFiles:a,withAudio:s,disableHwCodec:c}),!0);let l=new Se({marks:r.screenshots,width:o,height:n,outFiles:a});let m=Math.ceil(t*i);let h=1e3/t;let b={width:o,height:n+1};let g=0;let P;let y=[];let E;let v=0;let S;let k;let T;let B;let V=new Pe(o,n);let U=new Ee(t);let ce;let H=R=>{g++,V.sample(R),u.encodeBGRA(R).catch(A=>S??=A);};let C=(R,A,re)=>{if(S??=d?.reason,S){T?.(S);return}let N=re.getSize();if(!tt(N,b)){Me(I.webContents,b);return}let ue=re.toBitmap(),pe=qe(ue,N);if(pe===void 0){S??=new Error(`no timestamp @ ${g}`);return}if(E!==void 0&&pe-E<h*.8)return;let ke=Buffer.from(ue.buffer,ue.byteOffset,n*o*4);if(P=ke,l.capture(pe,ke),E===void 0)H(ke),U.wrote();else {let Lt=pe-E;if(Lt<=h*1.2)H(ke),U.wrote();else {let Vt=Math.round(Lt/h);U.dropped(Vt-1),U.wrote();for(let Ut=0;Ut<Vt&&g<m;Ut++)H(ke);}}E=pe;let Dt=Math.floor(g/m*100);Dt!==v&&(v=Dt,p(v));let So=i*1e3;(pe>=So-h*.5||g>=m)&&k?.();};let I=await it({source:e,renderer:r,signal:d,onCreated:R=>{s&&(ce=Qr({wc:R.webContents,encoder:u,getVideoTimeMs:()=>E??0,onError:A=>S??=A}));}});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 wr(de),await new Promise((R,A)=>{[k,T]=[R,A];let re=0,N=0;B=ze(async()=>{if(g!==re){re=g,N=0;return}N++,N>=t?T?.(new Error(`renderer stalled for ${Math.round(N*1e3/t)}ms @ ${g}`)):(N===1||N===Math.floor(t/2))&&await Me(I.webContents,b);},1e3/t);});}finally{B?.(),I.webContents.off("paint",C),await Fe(I),ce?.(),await u.finish(),y=await l.finish(P);}if(S||g===0)throw S??new Error("no frames captured");else {let R=V.finalize();R>=.5&&w.warn(so,`${e} blank-frame ratio ${Math.round(R*100)}% \u2014 possible white/blank screen`);let{jank:A}=U.finalize();return A>=.25&&w.warn(so,`${e} jank score ${A.toFixed(2)} \u2014 dropped frames`),{written:g,outFiles:a,blank:R,screenshots:y,jank:A}}}catch(He){var W=He,D=true;}finally{var Ae=x(z,W,D);Ae&&await Ae;}}var Li="[Rerender]",co=3;async function uo(r,e){let t;for(let o=1;o<=co;o++)try{return await e()}catch(n){r.throwIfAborted(),t=n,w.warn(Li,`retry ${o}/${co}: ${n.message}`);}throw t}var st=class{constructor(e){this._opts=e;}_opts;_baseline;_baselineAt=0;get baseline(){return this._baseline}accept(e,t){if(!this._baseline){this._baseline=e,this._baselineAt=t;return}return Vi(this._baseline.pix,e.pix,this._opts)?e:void 0}expired(e){return this._baseline!==void 0&&e-this._baselineAt>=this._opts.windowMs}};function Vi(r,e,t){for(let o=0;o<t.height;o+=4){let n=o*t.width*4;for(let i=0;i<t.width;i+=4){let s=n+i*4;if(r[s]!==e[s]||r[s+1]!==e[s+1]||r[s+2]!==e[s+2]||r[s+3]!==e[s+3])return true}}return false}var Ui="[Video]";async function po({frame:r,timestampMs:e,signal:t}){if(r?.url){t?.throwIfAborted();try{await mr(r.executeJavaScript(`window.__pup_video__&&(async()=>{await __pup_video__.ready();await __pup_video__.advance(${e})})()`),t);}catch(o){t?.throwIfAborted(),w.warn(Ui,`advance skipped: ${o instanceof Error?o.message:String(o)}`);}}}var mo="__pup_tick__";async function Mt(r){let{frame:e,timestampMs:t}=r;if(!e)return;let o=`window.${mo}&&window.${mo}.process(${t})`,n=e.executeJavaScript(o);await Promise.all([L(n,5e3,"tick.executeJavaScript"),po(r)]);}var Wi="8000000";function at(r,e){let t={signal:e,options:{rw_timeout:Wi}};return api.Demuxer.open(r,t)}var qi="[Decode]";async function*lo({src:r,meta:e,signal:t,fromIdx:o}){var B=[];try{let n=_(B,await at(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:w.warn(qi,`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:l}=e;let m=c!==p||d!==u?`scale=${c}:${d},`:"";let h=C=>Math.ceil(C/16)*16;let b=m===""&&(c%16!==0||d%16!==0)?`pad=${h(c)}:${h(d)}:0:0,`:"";let g=_(B,api.FilterAPI.create(`fps=${l},${m}${b}format=rgba`,{signal:t}));let P=0;let y=0;for await(var E of g.frames(a.frames(n.packets(s.index)))){var v=[];try{let C=_(v,E);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 z=Math.round((Number(de)*I-e.leadGap)*e.fps)+1;if(z<y||(y=z,z<i))continue;P=z;}else P++;yield {idx:P,buf:Ki(C,c,d)};}}catch(S){var k=S,T=!0;}finally{x(v,k,T);}}}catch(V){var U=V,ce=true;}finally{var H=x(B,U,ce);H&&await H;}}function Ki(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 Xi="[DecodeSession]",fo=4,Yi=16,Ji=256*1024*1024,Qi=3,ct=class{constructor(e,t){this.meta=e;this._src=t;this._leadFrames=Math.round(e.leadGap*e.fps),this._keepCount=Math.max(Yi,Math.floor(Ji/(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,w.warn(Xi,`[${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<=Qi||(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=lo({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 ho(r){var P=[];try{let e=_(P,await at(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=_(P,await api.Decoder.create(t,{threadCount:1}));let s=0;e:for await(var l of e.packets(t.index)){var m=[];try{let k=_(m,l);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(h){var b=h,g=!0;}finally{x(m,b,g);}}return {width:t.codecpar.width,height:t.codecpar.height,duration:o,leadGap:s}}catch(y){var E=y,v=true;}finally{var S=x(P,E,v);S&&await S;}}async function _o({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 l=p.addStream(u);await p.open();let m=_(i,new Nt(r,e));let h=BigInt(Math.max(1,Math.round(t*1e3)));m.frame.pts=0n;m.frame.duration=h;nodeAv.FFmpegError.throwIfError(await u.sendFrame(m.frame),"stubCtx.sendFrame");nodeAv.FFmpegError.throwIfError(await u.sendFrame(null),"stubCtx.flush");let 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=l.index,b.duration=h,b.rescaleTs(u.timeBase,l.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 Nt=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 dt=class{constructor(e){this._useInnerProxy=e;}_useInnerProxy;_sessions=new Map;_probes=new Map;_stubs=new Map;_seq=0;_closed=false;async open(e){if(this._closed)throw new Error("frame-server: closed");let t=this._useInnerProxy?Ce(e.src):e.src,o=await this.probeCached(t);if(this._closed)throw new Error("frame-server: closed");let n=o.width,i=o.height;if(e.dstW&&e.dstH&&e.fit!=="none"){let a=Math.min(1,Math.max(e.dstW/o.width,e.dstH/o.height));n=go(o.width*a),i=go(o.height*a);}let s={id:String(++this._seq),width:o.width,height:o.height,frameWidth:n,frameHeight:i,fps:e.fps,duration:o.duration,leadGap:o.leadGap};return this._sessions.set(s.id,new ct(s,t)),s}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=>_o({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){return this._sessions.get(e)?.getFrame(t)}async close(e){let t=this._sessions.get(e);t&&(this._sessions.delete(e),await t.close());}probeCached(e){let t=this._probes.get(e);if(t)return t;let o=rt({fn:ho})(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.close()));}};function go(r){let e=Math.round(r);return Math.max(2,e-e%2)}var xo="[FrameProtocol]",yo="pup-frame",ee={"access-control-allow-origin":"*","access-control-allow-methods":"GET, OPTIONS","access-control-allow-headers":"*"};function vo(r){let e=new dt(r);return electron.protocol.handle(yo,async t=>{if(t.method==="OPTIONS")return new Response(null,{status:204,headers:ee});let o=new URL(t.url);w.debug(xo,`${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:ut(o,"fps",30),dstW:ut(o,"w",0),dstH:ut(o,"h",0),fit:o.searchParams.get("fit")??void 0}));break;case "frame":n=ms(await e.getFrame(o.searchParams.get("id")??"",ut(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 w.error(xo,`${o.hostname} failed${o.search}: ${i}`),new Response(i,{status:500,headers:ee})}}),{[Symbol.asyncDispose]:async()=>{electron.protocol.unhandle(yo),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 ut(r,e,t){let o=r.searchParams.get(e),n=o?parseInt(o,10):NaN;return Number.isFinite(n)?n:t}var Ve="[Shoot]",ls=240;async function fs({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,a=s?new st({width:t.width,height:t.height,windowMs:300}):void 0;try{return await new Promise(c=>{let d=(l,m,h)=>{let b=h.getSize();if(!tt(b,i))return;let g=h.crop({x:0,y:i.height-2,width:he,height:2}),P=qe(g.toBitmap(),{width:he,height:2});if(P===void 0||o-P>1)return;let y={ts:P,pix:h.toBitmap().subarray(0,t.width*t.height*4)};a&&a.accept(y,performance.now())===void 0||(r.webContents.off("paint",d),c(y));};r.webContents.on("paint",d);let p=s?e*10:e*5,u=Math.floor(s?e:e/2);n=ze(async l=>{l>=p?(w.warn(Ve,`paint timeout @ ${o}`),r.webContents.off("paint",d),c(a?.baseline)):a?.expired(performance.now())?(r.webContents.off("paint",d),c(a.baseline)):l%u===0&&await Me(r.webContents,i);},1e3/e);})}finally{n?.();}}async function Po(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&&w.warn(Ve,"audio will be ignored on this mode");let u=new Se({marks:r.screenshots,width:o,height:n,outFiles:a});let l=_(C,vo(r.useInnerProxy),!0);let m=performance.now();let h=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 h;w.debug(Ve,"init done:",{source:e,cost:Math.round(performance.now()-m)});let P=Math.ceil(t*i);let y=1e3/t;let E=0;let v=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 H=ce.frames[0];try{g.webContents.setFrameRate(ls),await fr(U),P>0&&H&&await Mt({frame:H,timestampMs:0,signal:d});for(let W=0;W<P;W++){d?.throwIfAborted();let D=(W+1)*y,Ae=gr(g.webContents);Ae.catch(()=>{}),await Promise.all([Mt({frame:H,timestampMs:D,signal:d}),_r(g.webContents,D)]),await Promise.all([lr(U,y),Ae]);let R=await fs({source:e,fps:t,win:g,size:{width:o,height:n},ms:D});R?(S=0,V.wrote()):(S++,V.dropped(1));let A=R??k;if(!A||S>=t)throw new Error(`renderer exausted @ ${D}`);let re=Math.max(1,Math.ceil(A.ts/y-W));k=A;for(let ue=0;ue<re;ue++)u.capture(D,A.pix),B.sample(A.pix),await b.encodeBGRA(A.pix),E++;let N=Math.floor(E/P*100);N!==v&&(v=N,p(v));}}finally{await Fe(g),await b.finish(),T=await u.finish(k?.pix);}if(E===0)throw new Error("no frames captured");else {let W=B.finalize();W>=.5&&w.warn(Ve,`${e} blank-frame ratio ${Math.round(W*100)}% \u2014 possible white/blank screen`);let{jank:D}=V.finalize();return D>=.25&&w.warn(Ve,`${e} jank score ${D.toFixed(2)} \u2014 frames held past paint timeout`),{written:E,outFiles:a,blank:W,jank:D,screenshots:T}}}catch(I){var de=I,z=true;}finally{var He=x(C,de,z);He&&await He;}}var bs="[App]";process.env.ELECTRON_DISABLE_SECURITY_WARNINGS="1";function Eo(){w.debug(bs,"gpu features:",electron.app.getGPUFeatureStatus());}var Ue=new AbortController,Ot=false;sr();electron.Menu.setApplicationMenu(null);electron.app.dock?.hide();electron.app.on("window-all-closed",()=>{});electron.app.on("gpu-info-update",Eo);electron.app.on("before-quit",r=>!Ot&&r.preventDefault());electron.app.on("will-quit",r=>!Ot&&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);});pr({name:"app",run:async(r,e)=>{let t=new $e;try{await electron.app.whenReady(),yr(),Eo();for(let i of e.outFiles)await promises.mkdir(path.dirname(i),{recursive:!0});let o=e.deterministic?Po:ao;Ue.signal.throwIfAborted();let n=await uo(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{Ot=true,electron.app.exit();}}});
|
|
94
|
+
</html>`}function qe(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 wr(r){return xt(r,"__pup_start_stego__()")}async function _r(r,e){await xt(r.debugger,`__pup_draw_stego__(${e})`);}async function gr(r){let e=new Promise(t=>r.ipc.once(Zo,t));await L(e,5e3,"stego tick");}var yt="pup",en="pup-frame",br={standard:true,secure:true,bypassCSP:true,supportFetchAPI:true,corsEnabled:true,stream:true,codeCache:true};electron.protocol.registerSchemesAsPrivileged([{scheme:yt,privileges:br},{scheme:en,privileges:br}]);function yr(){electron.protocol.handle(yt,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=hr(t,{width:o,height:n});return new Response(i,{headers:{"content-type":"text/html"}})});}function vr(r,e){let t=new URL(`${yt}://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 Pn={[constants.AV_SAMPLE_FMT_FLT]:"flt",[constants.AV_SAMPLE_FMT_FLTP]:"fltp"},Ke=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 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 a=o.createFilter(s,"sink");if(!a)throw new Error("Failed to create abuffersink");let c=Pn[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 h=m,b=true;}finally{x(l,h,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]);}},O=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 Et=16;var St=23,be=32,xe=33,Xe=34,Tr=39;function Rr(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 Ct(r,e,t){let o=(r&63)<<1|e>>5&1,n=(e&31)<<3|t&7;return [o,n]}function $(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}=Rr(r[n],r[n+1]);e.push({type:s,layerId:a,data:r.subarray(n,i)}),t=i;}return e}function Ft(r,e){let t=Buffer.from(r),{type:o,temporalId:n}=Rr(t[0],t[1]),[i,s]=Ct(o,e,n);return t[0]=i,t[1]=s,t}function G(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 En=48,Br=24,Sn=2,Cn=10,At=0,Fn=1;function Ir(r,e,t){let o=e>>3,n=1<<7-(e&7),i=r[o]??0;r[o]=t?i|n:i&~n;}function Mr(r,e){let t=G(r);return Ir(t,e+Sn,0),Ir(t,e+Cn,1),ae(t)}function Ye(r){let e=$(r);if(e.length===0)return r;let t=[];for(let o of e){let n=o.data;o.type===be?n=Mr(o.data,En):o.type===xe&&(n=Mr(o.data,Br)),t.push(J,n);}return Buffer.concat(t)}function An(r,e,t){let o=G(r),n=new O(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 kn(r,e,t,o){let n=G(r),i=new O(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 Nr(r){let e=Br+96;return An(r,e,1)}function Or(r){return kn(r,16,1,1)}function Tn(r){let e=r.readUe();return e&1?e+1>>1:-(e>>1)}function Rn(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 In(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>=Et&&e<=St;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))):Rn(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===Fn||n===At)&&(r.read(1)&&(r.readUe(),n===At&&r.readUe()),n===At&&r.read(1),t.cabacInitPresent&&r.read(1),r.readUe()),Tn(r),t.ppsHasLoopFilterAcrossSlicesFlag&&r.read(1),r.pos}function Dr(r,e,t){let o=G(r),n=new O(o),i=new O(o),s=In(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>=Et&&e<=St&&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 Mn(r){let e=new O(G(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 Bn(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 Nn(r,e,t,o){if(r.copy(e.ptlBits,e.ptlEnd-8,8),e.maxSubLayersMinus1>0){for(let n=0;n<e.maxSubLayersMinus1;n++)r.w(0,2);for(let n=e.maxSubLayersMinus1;n<8;n++)r.w(0,2);}r.flag(0);for(let n=0;n<16;n++)r.flag(n===2||n===3);r.w(0,3),r.w(0,3),r.flag(1),r.w(1,6),r.w(1,1),r.w(1,1),r.w(0,4),r.flag(0),r.ue(0),r.flag(0),r.flag(0),r.flag(0),r.ue(2),r.flag(1),r.copy(e.ptlBits,e.ptlStart,e.ptlEnd-e.ptlStart),r.ue(0),r.w(0,2),r.w(1,2),r.w(2,2),r.ue(0),r.w(t,16),r.w(o,16),r.flag(1),r.w(1,2),r.w(0,4),r.w(0,4),r.flag(0),r.flag(1),r.flag(0),r.flag(1),r.flag(0),r.ue(0),r.ue(0),r.ue(0),r.ue(0),r.ue(0),r.flag(0),r.ue(0),r.flag(0),r.flag(0);}function Lr(r,e,t){let o=Mn(r);if(!o)return r;let n=new X;return Bn(n,o),Nn(n,o,e,t),n.bits.push(1),n.align(0),ae(Y(n.bits))}function Vr(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 On(r,e){return r===xe?Nr(e):r===Xe?Or(e):e}function Ur(r){let{baseExtradata:e,alphaExtradata:t}=r,o=$(e),n=$(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?Lr(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=On(c.type,p.data);s.push(J,Ft(u,1));}}}return s.push(Dn()),Buffer.concat(s)}function Dn(){let[t,o]=Ct(Tr,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 Hr(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=Dr(n.data,n.type,t);o.push(J,Ft(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=Hr($(e.data),$(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 Hn(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 Wn(r){let e=new O(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),Hn(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 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 l=e.readUe(),m=e.readUe();d=l+m;for(let h=0;h<l;h++)e.readUe(),e.read(1);for(let h=0;h<m;h++)e.readUe(),e.read(1);}let p=e.read(1)===1;p&&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 $n(r){let e=new O(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 Wr(r){let e=$(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=Wn(G(t.data)),i=$n(G(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 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=Wr(u.extraData);let h=s.addStream(u,"hvc1");let b=Ur({baseExtradata:u.extraData,alphaExtradata:l.extraData,width:t,height:o});h.codecpar.extradata=Ye(b);let g=t*o;let P=(t+1>>1)*(o+1>>1);let y=Buffer.alloc(g+P*2);y.fill(128,g);let E=p.use(M());let v=p.use(M());let S=p.use(ie(t,o,constants.AV_PIX_FMT_YUV420P));p.move();return new r({baseCtx:u,alphaCtx:l,basePkt:E,alphaPkt:v,stream:h,alphaSwFrame:S,alphaBuf:y,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++;Vr(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 Oe=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 a=nodeAv.Codec.findEncoderByName(t);if(!a)throw new Error(`Video encoder not found: ${t}`);let c=_(l,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 h=m,b=true;}finally{x(l,h,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 l=a.addStream(d,"hvc1");p.move();return new r(d,u,l)}catch(h){var b=h,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]",ci={deadline:"realtime","cpu-used":"8","row-mt":"1",threads:"4"},di={outSampleRate:44100,outSampleFmt:constants.AV_SAMPLE_FMT_FLTP,codecName:constants.FF_ENCODER_AAC},ui={outSampleRate:48e3,outSampleFmt:constants.AV_SAMPLE_FMT_FLT,codecName:constants.FF_ENCODER_LIBOPUS};async function zr(r,e){let{width:t,height:o,fps:n,disableHwCodec:i,sharedHw:s}=r;return pi({width:t,height:o,fps:n,disableHwCodec:i,sharedHw:s},e)}async function jr(r,e){let{width:t,height:o,fps:n}=r;return {video:await Oe.create({width:t,height:o,fps:n,codecName:Be,codecOpts:ci,bitrate:4e6,pixelFormat:constants.AV_PIX_FMT_YUVA420P,muxer:e}),codec:await se.create(t,o),ownsHw:false}}function qr(r,e){let t=r==="mp4"?di:ui;return Ke.create({...t,globalHeader:true,bitrate:128e3,muxer:e})}async function pi(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 w.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 w.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(P){w.warn(et,"Hardware codec session limits reached, use software encoder",P),d&&c?.dispose();}w.debug(et,"using software libx265 HEVC alpha encoder");let p=_(m,new DisposableStack);let u=p.use(await Oe.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 se.create(t,o));p.move();return {video:u,codec:l,ownsHw:!1}}catch(h){var b=h,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 zr(e,o):await jr(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 qr(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 Xr=5e3,xi=3e3,ve=class r{_s;_disposed=false;constructor(e){this._s=e;}static async create(e){var h=[];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(E=>Le.kindFromPath(E));let d=!a&&c.includes("mp4");let p=_(h,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 E=0;E<i.length;E++){let v=await Le.create({outFile:i[E],kind:c[E],width:t,height:o,fps:n,withAudio:s,disableHwCodec:a,sharedHw:c[E]==="mp4"&&l?u:void 0});p.use(v),m.push(v);}p.move();return new r({sinks:m,sharedHw:u,limiter:new we(1),outFiles:i,opts:e})}catch(b){var g=b,P=true;}finally{var y=x(h,g,P);y&&await y;}}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),xi,e)}async finish(){try{await L(this._s.limiter.drain(),Xr,"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(),Xr,"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 yi(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 vi(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,l=yi(r,u),m=(i.get(l)??0)+1;i.set(l,m),s.has(l)||s.set(l,u),m>c&&(c=m,a=l);}return s.get(a)??0}function Pi(r,e,t){let o=vi(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 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)-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++,Pi(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 Yr="audio-meta",Jr="audio-chunk";function Qr({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(Yr,n),r.ipc.on(Jr,i),()=>{r.ipc.removeListener(Yr,n),r.ipc.removeListener(Jr,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 Zr="--pup-world=",eo="--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]",ro=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"]]),ki=new Set(ro.values()),Ti=["pup:","pup-frame:","file:","data:","blob:","chrome-extension:","devtools:"];function Ri(r){for(let e of Ti)if(r.startsWith(e))return true;return false}function Ii(r){return r.startsWith("http")&&ki.has(new url.URL(r).hostname)}function Ce(r){if(!r.startsWith("http"))return r;let e=new url.URL(r),t=ro.get(e.hostname);return t?(e.hostname=t,e.protocol="http:",e.toString()):r}function oo({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 l=t?Ce(u):u;i.schedule(()=>{let m=`${e.id}_${d.id}`;return w.debug(nt,"start:",{key:m,url:u,proxied:l,method:d.method,source:r,stats:i.stats}),p(l===u?{cancel:false}:{cancel:false,redirectURL:l}),Ri(u)?Promise.resolve():a(m,()=>{w.debug(nt,"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&&Ii(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),w.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:l,error:m,resourceType:h}=d;w.debug(nt,"error:",{key:p,url:u,method:l,error:m,resourceType:h,source:r});});}function kt(r){let e=r.webContents.session.webRequest;e.onBeforeRequest(null),e.onHeadersReceived(null),e.onCompleted(null),e.onErrorOccurred(null);}var Z="[Window]",no=new Error("window timeout"),Bi=["Mixed Content: The page at"];function Ni({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:no),o),p=u=>{clearTimeout(d),u?a(u):s();};i?.throwIfAborted(),i?.addEventListener("abort",()=>p(i.reason),{once:true}),e.webContents.once("dom-ready",()=>{w.debug(Z,"dom-ready:",{source:r}),c=true;}),e.webContents.once("did-stop-loading",()=>{w.debug(Z,"did-stop-loading:",{source:r}),p();}),e.webContents.once("did-fail-load",(u,l,m,h)=>{let b=`did-fail-load: ${JSON.stringify({url:h,source:r,code:l,desc:m})}`;w.error(Z,b),p(new Error(b));}),e.webContents.once("preload-error",(u,l,m)=>{w.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 h=`render-process-gone: ${JSON.stringify({source:r,exitCode:l,reason:m})}`;w.error(Z,h),p(new Error(h));}),t();})}function Fe(r){return new Promise(e=>{kt(r);let t=setTimeout(()=>{try{w.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 Oi={shoot:path.join(le,"dist","runtime","shoot.global.js"),render:path.join(le,"dist","runtime","render.global.js"),audio:path.join(le,"dist","runtime","audio.global.js")};function Di(r){let e=r.deterministic?"shoot":r.withAudio?"audio":"render";return Oi[e]}async function io({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:Zt,additionalArguments:[`${Zr}${Di(e)}`,...e.withAudio?[eo]:[]]}});oo({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:l,sourceId:m})=>{if(p==="warning"&&Bi.find(b=>u.startsWith(b)))return;let h=[Z,"console:",{message:u,lineNumber:l,sourceId:m,source:r}];p==="error"?w.error(...h):w.debug(...h),e.onConsole(p,u);});try{let p=vr(c,{width:i,height:s});await Ni({source:r,win:d,action:()=>d.loadURL(p),timeoutMs:e.windowTimeout*1e3,tolerant:t,signal:o});}catch(p){throw await Fe(d),p}return d}var Li=rt({fn:io,maxAttempts:2});async function it({source:r,renderer:e,onCreated:t,signal:o}){o?.throwIfAborted();let n,i;try{n=await Li({source:r,renderer:e,signal:o});}catch(a){i=a;}let s=()=>io({source:r,renderer:e,onCreated:t,signal:o,tolerant:e.windowTolerant});if(e.windowTolerant&&i===no)return w.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(),kt(n),await Ge(2e3),await Fe(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 so="[Render]";async function ao(r){var z=[];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=_(z,await ve.create({width:o,height:n,fps:t,outFiles:a,withAudio:s,disableHwCodec:c}),!0);let l=new Se({marks:r.screenshots,width:o,height:n,outFiles:a});let m=Math.ceil(t*i);let h=1e3/t;let b={width:o,height:n+1};let g=0;let P;let y=[];let E;let v=0;let S;let k;let T;let B;let V=new Pe(o,n);let U=new Ee(t);let ce;let H=R=>{g++,V.sample(R),u.encodeBGRA(R).catch(A=>S??=A);};let C=(R,A,re)=>{if(S??=d?.reason,S){T?.(S);return}let N=re.getSize();if(!tt(N,b)){Me(I.webContents,b);return}let ue=re.toBitmap(),pe=qe(ue,N);if(pe===void 0){S??=new Error(`no timestamp @ ${g}`);return}if(E!==void 0&&pe-E<h*.8)return;let ke=Buffer.from(ue.buffer,ue.byteOffset,n*o*4);if(P=ke,l.capture(pe,ke),E===void 0)H(ke),U.wrote();else {let Lt=pe-E;if(Lt<=h*1.2)H(ke),U.wrote();else {let Vt=Math.round(Lt/h);U.dropped(Vt-1),U.wrote();for(let Ut=0;Ut<Vt&&g<m;Ut++)H(ke);}}E=pe;let Dt=Math.floor(g/m*100);Dt!==v&&(v=Dt,p(v));let So=i*1e3;(pe>=So-h*.5||g>=m)&&k?.();};let I=await it({source:e,renderer:r,signal:d,onCreated:R=>{s&&(ce=Qr({wc:R.webContents,encoder:u,getVideoTimeMs:()=>E??0,onError:A=>S??=A}));}});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 wr(de),await new Promise((R,A)=>{[k,T]=[R,A];let re=0,N=0;B=ze(async()=>{if(g!==re){re=g,N=0;return}N++,N>=t?T?.(new Error(`renderer stalled for ${Math.round(N*1e3/t)}ms @ ${g}`)):(N===1||N===Math.floor(t/2))&&await Me(I.webContents,b);},1e3/t);});}finally{B?.(),I.webContents.off("paint",C),await Fe(I),ce?.(),await u.finish(),y=await l.finish(P);}if(S||g===0)throw S??new Error("no frames captured");else {let R=V.finalize();R>=.5&&w.warn(so,`${e} blank-frame ratio ${Math.round(R*100)}% \u2014 possible white/blank screen`);let{jank:A}=U.finalize();return A>=.25&&w.warn(so,`${e} jank score ${A.toFixed(2)} \u2014 dropped frames`),{written:g,outFiles:a,blank:R,screenshots:y,jank:A}}}catch(He){var W=He,D=true;}finally{var Ae=x(z,W,D);Ae&&await Ae;}}var Vi="[Rerender]",co=3;async function uo(r,e){let t;for(let o=1;o<=co;o++)try{return await e()}catch(n){r.throwIfAborted(),t=n,w.warn(Vi,`retry ${o}/${co}: ${n.message}`);}throw t}var st=class{constructor(e){this._opts=e;}_opts;_baseline;_baselineAt=0;get baseline(){return this._baseline}accept(e,t){if(!this._baseline){this._baseline=e,this._baselineAt=t;return}return Ui(this._baseline.pix,e.pix,this._opts)?e:void 0}expired(e){return this._baseline!==void 0&&e-this._baselineAt>=this._opts.windowMs}};function Ui(r,e,t){for(let o=0;o<t.height;o+=4){let n=o*t.width*4;for(let i=0;i<t.width;i+=4){let s=n+i*4;if(r[s]!==e[s]||r[s+1]!==e[s+1]||r[s+2]!==e[s+2]||r[s+3]!==e[s+3])return true}}return false}var Hi="[Video]";async function po({frame:r,timestampMs:e,signal:t}){if(r?.url){t?.throwIfAborted();try{await mr(r.executeJavaScript(`window.__pup_video__&&(async()=>{await __pup_video__.ready();await __pup_video__.advance(${e})})()`),t);}catch(o){t?.throwIfAborted(),w.warn(Hi,`advance skipped: ${o instanceof Error?o.message:String(o)}`);}}}var mo="__pup_tick__";async function Mt(r){let{frame:e,timestampMs:t}=r;if(!e)return;let o=`window.${mo}&&window.${mo}.process(${t})`,n=e.executeJavaScript(o);await Promise.all([L(n,5e3,"tick.executeJavaScript"),po(r)]);}var $i="8000000";function at(r,e){let t={signal:e,options:{rw_timeout:$i}};return api.Demuxer.open(r,t)}var Ki="[Decode]";async function*lo({src:r,meta:e,signal:t,fromIdx:o}){var B=[];try{let n=_(B,await at(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:w.warn(Ki,`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:l}=e;let m=c!==p||d!==u?`scale=${c}:${d},`:"";let h=C=>Math.ceil(C/16)*16;let b=m===""&&(c%16!==0||d%16!==0)?`pad=${h(c)}:${h(d)}:0:0,`:"";let g=_(B,api.FilterAPI.create(`fps=${l},${m}${b}format=rgba`,{signal:t}));let P=0;let y=0;for await(var E of g.frames(a.frames(n.packets(s.index)))){var v=[];try{let C=_(v,E);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 z=Math.round((Number(de)*I-e.leadGap)*e.fps)+1;if(z<y||(y=z,z<i))continue;P=z;}else P++;yield {idx:P,buf:Xi(C,c,d)};}}catch(S){var k=S,T=!0;}finally{x(v,k,T);}}}catch(V){var U=V,ce=true;}finally{var H=x(B,U,ce);H&&await H;}}function Xi(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 Yi="[DecodeSession]",fo=4,Ji=16,Qi=256*1024*1024,Zi=3,ct=class{constructor(e,t){this.meta=e;this._src=t;this._leadFrames=Math.round(e.leadGap*e.fps),this._keepCount=Math.max(Ji,Math.floor(Qi/(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,w.warn(Yi,`[${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<=Zi||(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=lo({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 ho(r){var P=[];try{let e=_(P,await at(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=_(P,await api.Decoder.create(t,{threadCount:1}));let s=0;e:for await(var l of e.packets(t.index)){var m=[];try{let k=_(m,l);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(h){var b=h,g=!0;}finally{x(m,b,g);}}return {width:t.codecpar.width,height:t.codecpar.height,duration:o,leadGap:s}}catch(y){var E=y,v=true;}finally{var S=x(P,E,v);S&&await S;}}async function _o({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 l=p.addStream(u);await p.open();let m=_(i,new Nt(r,e));let h=BigInt(Math.max(1,Math.round(t*1e3)));m.frame.pts=0n;m.frame.duration=h;nodeAv.FFmpegError.throwIfError(await u.sendFrame(m.frame),"stubCtx.sendFrame");nodeAv.FFmpegError.throwIfError(await u.sendFrame(null),"stubCtx.flush");let 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=l.index,b.duration=h,b.rescaleTs(u.timeBase,l.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 Nt=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 dt=class{constructor(e){this._useInnerProxy=e;}_useInnerProxy;_sessions=new Map;_probes=new Map;_stubs=new Map;_seq=0;_closed=false;async open(e){if(this._closed)throw new Error("frame-server: closed");let t=this._useInnerProxy?Ce(e.src):e.src,o=await this.probeCached(t);if(this._closed)throw new Error("frame-server: closed");let n=o.width,i=o.height;if(e.dstW&&e.dstH&&e.fit!=="none"){let a=Math.min(1,Math.max(e.dstW/o.width,e.dstH/o.height));n=go(o.width*a),i=go(o.height*a);}let s={id:String(++this._seq),width:o.width,height:o.height,frameWidth:n,frameHeight:i,fps:e.fps,duration:o.duration,leadGap:o.leadGap};return this._sessions.set(s.id,new ct(s,t)),s}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=>_o({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){return this._sessions.get(e)?.getFrame(t)}async close(e){let t=this._sessions.get(e);t&&(this._sessions.delete(e),await t.close());}probeCached(e){let t=this._probes.get(e);if(t)return t;let o=rt({fn:ho})(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.close()));}};function go(r){let e=Math.round(r);return Math.max(2,e-e%2)}var xo="[FrameProtocol]",yo="pup-frame",ee={"access-control-allow-origin":"*","access-control-allow-methods":"GET, OPTIONS","access-control-allow-headers":"*"};function vo(r){let e=new dt(r);return electron.protocol.handle(yo,async t=>{if(t.method==="OPTIONS")return new Response(null,{status:204,headers:ee});let o=new URL(t.url);w.debug(xo,`${t.method} ${o.hostname}${o.search}`);try{let n;switch(o.hostname){case "open":n=ps(await e.open({src:o.searchParams.get("src")??"",fps:ut(o,"fps",30),dstW:ut(o,"w",0),dstH:ut(o,"h",0),fit:o.searchParams.get("fit")??void 0}));break;case "frame":n=ls(await e.getFrame(o.searchParams.get("id")??"",ut(o,"idx",1))??Buffer.alloc(0));break;case "stub":n=ms(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 w.error(xo,`${o.hostname} failed${o.search}: ${i}`),new Response(i,{status:500,headers:ee})}}),{[Symbol.asyncDispose]:async()=>{electron.protocol.unhandle(yo),await e.closeAll();}}}function ps(r){return new Response(JSON.stringify(r),{headers:{...ee,"content-type":"application/json"}})}function ms(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 ls(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 ut(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 hs({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,a=s?new st({width:t.width,height:t.height,windowMs:300}):void 0;try{return await new Promise(c=>{let d=(l,m,h)=>{let b=h.getSize();if(!tt(b,i))return;let g=h.crop({x:0,y:i.height-2,width:he,height:2}),P=qe(g.toBitmap(),{width:he,height:2});if(P===void 0||o-P>1)return;let y={ts:P,pix:h.toBitmap().subarray(0,t.width*t.height*4)};a&&a.accept(y,performance.now())===void 0||(r.webContents.off("paint",d),c(y));};r.webContents.on("paint",d);let p=s?e*10:e*5,u=Math.floor(s?e:e/2);n=ze(async l=>{l>=p?(w.warn(Ve,`paint timeout @ ${o}`),r.webContents.off("paint",d),c(a?.baseline)):a?.expired(performance.now())?(r.webContents.off("paint",d),c(a.baseline)):l%u===0&&await Me(r.webContents,i);},1e3/e);})}finally{n?.();}}async function Po(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&&w.warn(Ve,"audio will be ignored on this mode");let u=new Se({marks:r.screenshots,width:o,height:n,outFiles:a});let l=_(C,vo(r.useInnerProxy),!0);let m=performance.now();let h=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 h;w.debug(Ve,"init done:",{source:e,cost:Math.round(performance.now()-m)});let P=Math.ceil(t*i);let y=1e3/t;let E=0;let v=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 H=ce.frames[0];try{g.webContents.setFrameRate(fs),await fr(U),P>0&&H&&await Mt({frame:H,timestampMs:0,signal:d});for(let W=0;W<P;W++){d?.throwIfAborted();let D=(W+1)*y,Ae=gr(g.webContents);Ae.catch(()=>{}),await Promise.all([Mt({frame:H,timestampMs:D,signal:d}),_r(g.webContents,D)]),await Promise.all([lr(U,y),Ae]);let R=await hs({source:e,fps:t,win:g,size:{width:o,height:n},ms:D});R?(S=0,V.wrote()):(S++,V.dropped(1));let A=R??k;if(!A||S>=t)throw new Error(`renderer exausted @ ${D}`);let re=Math.max(1,Math.ceil(A.ts/y-W));k=A;for(let ue=0;ue<re;ue++)u.capture(D,A.pix),B.sample(A.pix),await b.encodeBGRA(A.pix),E++;let N=Math.floor(E/P*100);N!==v&&(v=N,p(v));}}finally{await Fe(g),await b.finish(),T=await u.finish(k?.pix);}if(E===0)throw new Error("no frames captured");else {let W=B.finalize();W>=.5&&w.warn(Ve,`${e} blank-frame ratio ${Math.round(W*100)}% \u2014 possible white/blank screen`);let{jank:D}=V.finalize();return D>=.25&&w.warn(Ve,`${e} jank score ${D.toFixed(2)} \u2014 frames held past paint timeout`),{written:E,outFiles:a,blank:W,jank:D,screenshots:T}}}catch(I){var de=I,z=true;}finally{var He=x(C,de,z);He&&await He;}}var xs="[App]";process.env.ELECTRON_DISABLE_SECURITY_WARNINGS="1";function Eo(){w.debug(xs,"gpu features:",electron.app.getGPUFeatureStatus());}var Ue=new AbortController,Ot=false;sr();electron.Menu.setApplicationMenu(null);electron.app.dock?.hide();electron.app.on("window-all-closed",()=>{});electron.app.on("gpu-info-update",Eo);electron.app.on("before-quit",r=>!Ot&&r.preventDefault());electron.app.on("will-quit",r=>!Ot&&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);});pr({name:"app",run:async(r,e)=>{let t=new $e;try{await electron.app.whenReady(),yr(),Eo();for(let i of e.outFiles)await promises.mkdir(path.dirname(i),{recursive:!0});let o=e.deterministic?Po:ao;Ue.signal.throwIfAborted();let n=await uo(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{Ot=true,electron.app.exit();}}});
|
|
95
95
|
//# sourceMappingURL=app.cjs.map
|
|
96
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL3RzdXBAOC41LjErY2JkMDZiZTE1OWE5MGZhZS9ub2RlX21vZHVsZXMvdHN1cC9hc3NldHMvY2pzX3NoaW1zLmpzIiwiLi4vc3JjL2Jhc2UvZW52LnRzIiwiLi4vc3JjL2Jhc2UvcGFyc2VyLnRzIiwiLi4vc3JjL2Jhc2UvY29uc3RhbnRzLnRzIiwiLi4vc3JjL2Jhc2UvbG9nZ2luZy50cyIsIi4uL3NyYy9iYXNlL2NyYXNoLnRzIiwiLi4vc3JjL2Jhc2Uvbm9lcnIudHMiLCIuLi9zcmMvYmFzZS9wcm9jZXNzLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3NjaGVtYS50cyIsIi4uL3NyYy9jb21tb24udHMiLCIuLi9zcmMvcmVuZGVyZXIvaXBjLnRzIiwiLi4vc3JjL2Jhc2UvdGltaW5nLnRzIiwiLi4vc3JjL2Jhc2UvY2RwLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3N0ZWdvLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3Byb3RvY29sLnRzIiwiLi4vc3JjL2Jhc2UvbGltaXRlci50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvbWlzYy50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvY29kZWMudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL2F1ZGlvLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9oZXZjX2FscGhhL2JpdC50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvaGV2Y19hbHBoYS9uYWwudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL2hldmNfYWxwaGEvYWxwaGFfZGFyd2luLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9oZXZjX2FscGhhL3Zwcy50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvaGV2Y19hbHBoYS9hbHBoYS50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvaGV2Y19hbHBoYS9kdWFsX2xheWVyX211eC50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvaGV2Y19hbHBoYS9wYXJzZXIudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL2hldmNfYWxwaGEvbnZlbmMudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL3ZpZGVvLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci92aWRlb3Rvb2xib3gudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL2ZhY3RvcnkudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL211eGVyLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9zaW5rLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9waXBlbGluZS50cyIsIi4uL3NyYy9iYXNlL2ltYWdlLnRzIiwiLi4vc3JjL2Jhc2UvcXVhbGl0eS9ibGFuay50cyIsIi4uL3NyYy9iYXNlL3F1YWxpdHkvZHJvcC50cyIsIi4uL3NyYy9yZW5kZXJlci9hdWRpby50cyIsIi4uL3NyYy9yZW5kZXJlci9zY3JlZW5zaG90LnRzIiwiLi4vc3JjL2Jhc2UvcmV0cnkudHMiLCIuLi9zcmMvcnVudGltZS93b3JsZC50cyIsIi4uL3NyYy9iYXNlL3dhaXRhYmxlX2V2ZW50LnRzIiwiLi4vc3JjL3JlbmRlcmVyL25ldHdvcmsudHMiLCIuLi9zcmMvcmVuZGVyZXIvd2luZG93LnRzIiwiLi4vc3JjL3JlbmRlcmVyL3JlbmRlci50cyIsIi4uL3NyYy9yZW5kZXJlci9yZXJlbmRlci50cyIsIi4uL3NyYy9yZW5kZXJlci9mcmFtZV9nYXRlLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3ZpZGVvL2FkdmFuY2UudHMiLCIuLi9zcmMvcmVuZGVyZXIvdGljay50cyIsIi4uL3NyYy9yZW5kZXJlci92aWRlby9vcGVuLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3ZpZGVvL2RlY29kZS50cyIsIi4uL3NyYy9yZW5kZXJlci92aWRlby9kZWNvZGVfc2Vzc2lvbi50cyIsIi4uL3NyYy9yZW5kZXJlci92aWRlby9wcm9iZS50cyIsIi4uL3NyYy9yZW5kZXJlci92aWRlby9zdHViLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3ZpZGVvL2ZyYW1lX3NlcnZlci50cyIsIi4uL3NyYy9yZW5kZXJlci92aWRlby9wcm90b2NvbC50cyIsIi4uL3NyYy9yZW5kZXJlci9zaG9vdC50cyIsIi4uL3NyYy9hcHAudHMiXSwibmFtZXMiOlsiZ2V0SW1wb3J0TWV0YVVybCIsImltcG9ydE1ldGFVcmwiLCJwZW52IiwibmFtZSIsInBhcnNlciIsImRlZmF1bHRWYWx1ZSIsInBhcnNlTnVtYmVyIiwieCIsIm51bSIsInBhcnNlU3RyaW5nIiwicGFyc2VBcnJheSIsIml0ZW0iLCJzIiwicmVxdWlyZSIsImNyZWF0ZVJlcXVpcmUiLCJwdXBMb2dMZXZlbCIsInB1cFBrZ1Jvb3QiLCJkaXJuYW1lIiwiam9pbiIsInB1cFByZWxvYWQiLCJERUJVRyIsIklORk8iLCJXQVJOIiwiRVJST1IiLCJGQVRBTCIsInN0YWNrSG9vayIsInRhcmdldCIsIl9jb250ZXh0IiwibWVzc2FnZXMiLCJwcm9jZXNzZWQiLCJtc2ciLCJfZmF0YWxfZGVjIiwiX2Vycm9yX2RlYyIsIl93YXJuX2RlYyIsIl9pbmZvX2RlYyIsIl9kZWJ1Z19kZWMiLCJfaW5pdCIsIkxvZ2dlciIsIl9sZXZlbCIsIl9fcnVuSW5pdGlhbGl6ZXJzIiwiX19wdWJsaWNGaWVsZCIsInZhbHVlIiwiZGVidWciLCJpbmZvIiwid2FybiIsImVycm9yIiwibHYiLCJtZXNzYWdlIiwicHJvYyIsInJlc29sdmUiLCJyZWplY3QiLCJmYXRhbCIsImRpc3BhdGNoIiwiZGF0YSIsImVyciIsImNvZGUiLCJzaWduYWwiLCJyZWFzb24iLCJfX2RlY29yYXRvclN0YXJ0IiwiX19kZWNvcmF0ZUVsZW1lbnQiLCJfX2RlY29yYXRvck1ldGFkYXRhIiwibG9nZ2VyIiwiTG9nIiwibGV2ZWwiLCJBVl9MT0dfRVJST1IiLCJBVl9MT0dfV0FSTklORyIsIlRBRyIsInN0YXJ0RWxlY3Ryb25DcmFzaFJlcG9ydGVyIiwiZHVtcERpciIsImFwcCIsIm1rZGlyU3luYyIsImNyYXNoUmVwb3J0ZXIiLCJub2VyciIsImZuIiwiYXJncyIsInJldCIsIlBVUF9BUkdTX0tFWSIsInBhcmdzIiwiYXJndiIsInByaXYiLCJhcmciLCJERUZBVUxUX1dJRFRIIiwiREVGQVVMVF9IRUlHSFQiLCJERUZBVUxUX0ZQUyIsIkRFRkFVTFRfRFVSQVRJT04iLCJERUZBVUxUX1dJTkRPV19USU1FT1VUIiwiREVGQVVMVF9PVVRfRklMRVMiLCJyZW5kZXJTY2hlbWEiLCJ6IiwiZGVmYXVsdFJlbmRlck9wdGlvbnMiLCJub3JtYWxpemVTb3VyY2UiLCJhYnMiLCJyZWFscGF0aFN5bmMiLCJtYWtlQ0xJIiwib3B0aW9ucyIsInNoYXBlIiwiZCIsInByb2dyYW0iLCJzb3VyY2UiLCJvcHRzIiwiZSIsIklwY1dyaXRlciIsInBheWxvYWQiLCJzbGVlcCIsIm1zIiwid2l0aFRpbWVvdXQiLCJwIiwibGFiZWwiLCJ0aW1lciIsImFib3J0YWJsZSIsIm9uQWJvcnQiLCJwZXJpb2RpY2FsIiwiY2FsbGJhY2siLCJ0b2tlbiIsImNsb3NlZCIsInRpY2siLCJjb3VudCIsIm5leHQiLCJDRFBfVElNRU9VVF9NUyIsInNlbmQiLCJjZHAiLCJtZXRob2QiLCJwYXJhbXMiLCJldmFsSW4iLCJleHByZXNzaW9uIiwiYWR2YW5jZVZpcnR1YWxUaW1lIiwiYnVkZ2V0IiwidGltZW91dCIsImhhbmRsZXIiLCJfIiwicGF1c2VWaXJ0dWFsVGltZSIsInJlYnVpbGREcmF3YWJsZSIsIndlYiIsInNpemUiLCJGUkFNRV9TWU5DX01BUktFUl9XSURUSCIsIlNURUdPX1RJQ0tfQ0hBTk5FTCIsImJ1aWxkU3RlZ29IVE1MIiwidGFyZ2V0VVJMIiwid2lkdGgiLCJoZWlnaHQiLCJkZWNvZGVTdGVnbyIsImJpdG1hcCIsIm1hcmtlclJvdyIsInRpbWVzdGFtcCIsImkiLCJwaXhlbElkeCIsImJpdCIsInN0YXJ0U3RlZ28iLCJkcmF3U3RlZ28iLCJ3YyIsImV4cGVjdGVkIiwid2FpdFN0ZWdvVGljayIsInN3YXBwZWQiLCJyIiwiUFVQX1NDSEVNRSIsIkZSQU1FX1NDSEVNRSIsIlBSSVZJTEVHRURfUFJJVklMRUdFUyIsInByb3RvY29sIiwic2V0dXBQdXBQcm90b2NvbCIsInJlcSIsInVybCIsInNyYyIsImh0bWwiLCJjcmVhdGVTdGVnb1VSTCIsIkNvbmN1cnJlbmN5TGltaXRlciIsIm1heENvbmN1cnJlbmN5IiwidiIsImtlZXAiLCJlbnRyeSIsIkZGX0VOQ09ERVJfTElCVlBYX1ZQOSIsIm9wZW5WaWRlb0N0eCIsIl9zdGFjayIsImN0eCIsIkNvZGVjQ29udGV4dCIsInN0YWNrIiwiX191c2luZyIsIlJhdGlvbmFsIiwiQVZfQ09ERUNfRkxBR19HTE9CQUxfSEVBREVSIiwiayIsIkZGbXBlZ0Vycm9yIiwiX2Vycm9yIiwiX2hhc0Vycm9yIiwiX19jYWxsRGlzcG9zZSIsIm1ha2VGcmFtZSIsInBpeEZtdCIsImZyYW1lIiwiRnJhbWUiLCJtYWtlUGFja2V0IiwicGt0IiwiUGFja2V0IiwiZHJhaW5QYWNrZXRzIiwic3RyZWFtIiwibXV4ZXIiLCJBVkVSUk9SX0VBR0FJTiIsIkFWRVJST1JfRU9GIiwiQ29kZWNTdGF0ZSIsIl9Db2RlY1N0YXRlIiwiY29kZWMiLCJDb2RlYyIsIkZGX0RFQ09ERVJfUE5HIiwib2siLCJwbmciLCJBVl9QSVhfRk1UX0JHUkEiLCJBVl9QSVhfRk1UX1lVVkE0MjBQIiwicG5nRGF0YSIsInN3cyIsIlNvZnR3YXJlU2NhbGVDb250ZXh0IiwiZm10IiwiU1dTX0JJTElORUFSIiwiU0FNUExFX0ZNVF9OQU1FIiwiQVZfU0FNUExFX0ZNVF9GTFQiLCJBVl9TQU1QTEVfRk1UX0ZMVFAiLCJBdWRpb0VuY29kZXIiLCJfQXVkaW9FbmNvZGVyIiwib3V0Rm10IiwiQVZfQ0hBTk5FTF9MQVlPVVRfU1RFUkVPIiwiaW5TYW1wbGVSYXRlIiwiZ3JhcGgiLCJGaWx0ZXJHcmFwaCIsImFidWZmZXIiLCJGaWx0ZXIiLCJidWZTcmMiLCJhYnVmZmVyc2luayIsImJ1ZlNpbmsiLCJmbXROYW1lIiwiZmlsdGVyRGVzYyIsIm91dHB1dHMiLCJGaWx0ZXJJbk91dCIsImlucHV0cyIsInBjbSIsIm5TYW1wbGVzIiwicGFja0JpdHMiLCJiaXRzIiwiYnVmIiwiYnl0ZSIsImIiLCJCaXRXcml0ZXIiLCJ2YWwiLCJuIiwibGVuIiwicGFkIiwic3RhcnQiLCJCaXRSZWFkZXIiLCJ6ZXJvcyIsIkFOTkVYX0JfU1RBUlRfQ09ERSIsIk5BTF9CTEFfV19MUCIsIk5BTF9SU1ZfSVJBUF9WQ0wyMyIsIk5BTF9WUFMiLCJOQUxfU1BTIiwiTkFMX1BQUyIsIk5BTF9TRUlfUFJFRklYIiwicGFyc2VOYWxUeXBlIiwiaGVhZGVyMCIsImhlYWRlcjEiLCJ0eXBlIiwibGF5ZXJJZCIsInRlbXBvcmFsSWQiLCJlbmNvZGVOYWxIZWFkZXIiLCJieXRlMCIsImJ5dGUxIiwic3BsaXROYWxVbml0cyIsImJpdHN0cmVhbSIsIm5hbHMiLCJzY0xlbiIsIm5hbFN0YXJ0IiwibmFsRW5kIiwiaiIsInJld3JpdGVOYWxMYXllcklkIiwibmFsIiwib3V0IiwiYjAiLCJiMSIsInJlbW92ZUVtdWxhdGlvblByZXZlbnRpb24iLCJhZGRFbXVsYXRpb25QcmV2ZW50aW9uIiwiVlBTX1BUTF9CSVQiLCJTUFNfUFRMX0JJVCIsIlBUTF9USUVSX0JJVCIsIlBUTF9DT01QQVQyX0JJVCIsIlNMSUNFX1RZUEVfQiIsIlNMSUNFX1RZUEVfUCIsInNldEJpdCIsImJpdE9mZnNldCIsIm1hc2siLCJjdXIiLCJwYXRjaFB0bCIsIm5hbERhdGEiLCJwdGxTdGFydEJpdCIsInJic3AiLCJwYXRjaEhldmNBbHBoYVB0bCIsImNodW5rcyIsInJld3JpdGVPbmVVZSIsIm5hbEluIiwibmV3VmFsIiwiYnIiLCJidyIsInJld3JpdGVUd29VZSIsIm5ld1ZhbDEiLCJuZXdWYWwyIiwicmV3cml0ZUFscGhhU3BzIiwic3BzIiwiU1BTX1NFUV9JRF9CSVQiLCJyZXdyaXRlQWxwaGFQcHMiLCJwcHMiLCJyZWFkU2UiLCJ1ZSIsInBhcnNlSW5saW5lU3RSZWZQaWNTZXQiLCJudW1EZWx0YVBvY3NTZXQwIiwiZGVsdGFJZHhNaW51czEiLCJudW1OZWciLCJudW1Qb3MiLCJwYXJzZUhlYWRlclRvQWxpZ25tZW50IiwibmFsVHlwZSIsImNmZyIsImlzSXJhcCIsInNsaWNlVHlwZSIsInJld3JpdGVBbHBoYVNsaWNlSGVhZGVyIiwic2xpY2UiLCJwcm9iZSIsIkIiLCJvbGRBbGlnbkJpdHMiLCJzbGljZURhdGFCeXRlT2Zmc2V0IiwiZXh0cmFjdFBUTCIsInZwc0RhdGEiLCJtYXhTdWJMYXllcnNNaW51czEiLCJwdGxTdGFydCIsIndyaXRlQmFzZVZQUyIsInB0bCIsIndyaXRlVlBTRXh0ZW5zaW9uIiwiYnVpbGRBbHBoYVZQUyIsImV4dHJhY3RBbHBoYVRvWXV2NDIwcEJ1ZmZlciIsImJncmFGcmFtZSIsInNyY0xzIiwidyIsImgiLCJ5U2l6ZSIsInNyYzMyIiwieSIsInJvd0Jhc2UiLCJkc3RCYXNlIiwicmV3cml0ZUFscGhhUGFyYW1TZXQiLCJidWlsZFVuaWZpZWRFeHRyYWRhdGEiLCJiYXNlRXh0cmFkYXRhIiwiYWxwaGFFeHRyYWRhdGEiLCJiYXNlTmFscyIsImFscGhhTmFscyIsImFscGhhQnlUeXBlIiwiYXJyIiwiZW1pdHRlZCIsImFscGhhTmFsIiwiYURhdGEiLCJidWlsZEFscGhhQ2hhbm5lbEluZm9TRUkiLCJoMCIsImgxIiwid3JpdGVCaXRzIiwiaW50ZXJsZWF2ZUFjY2Vzc1VuaXRzIiwiRHVhbExheWVyTXV4IiwiYmFzZUN0eCIsImFscGhhQ3R4IiwiYmFzZVBrdCIsImFscGhhUGt0IiwidGFnIiwiYmFzZSIsImFscGhhIiwiaGV2Y0NmZyIsImludGVybGVhdmVkIiwiZmFpbCIsImZpZWxkIiwiZ290Iiwic2tpcFB0bCIsIm1heFN1YkxheWVycyIsInN1YlByb2ZpbGVQcmVzZW50Iiwic3ViTGV2ZWxQcmVzZW50IiwicGFyc2VTcHMiLCJzcHNSYnNwIiwiY2hyb21hRm9ybWF0IiwibG9nMk1heFBvY0xzYiIsIm9yZGVyQ291bnQiLCJzYW9FbmFibGVkIiwibnVtU3RScHMiLCJsb25nVGVybVJlZlBpY3NQcmVzZW50Iiwic3BzVGVtcG9yYWxNdnBFbmFibGVkIiwicGFyc2VQcHMiLCJwcHNSYnNwIiwibnVtRXh0cmFTbGljZUhlYWRlckJpdHMiLCJjYWJhY0luaXRQcmVzZW50IiwicHBzTG9vcEZpbHRlckFjcm9zc1NsaWNlc0VuYWJsZWQiLCJkZWJsb2NraW5nQ29udHJvbFByZXNlbnQiLCJzbGljZURlYmxvY2tpbmdEaXNhYmxlZE92ZXJyaWRlIiwicGFyc2VOdmVuY0hldmNDb25maWciLCJleHRyYWRhdGEiLCJOdmVuY0R1YWxMYXllckVuY29kZXIiLCJfTnZlbmNEdWFsTGF5ZXJFbmNvZGVyIiwiZnBzIiwiYml0cmF0ZSIsIkZGX0VOQ09ERVJfSEVWQ19OVkVOQyIsIm52ZW5jT3B0cyIsImNvbW1vbiIsIkFWX1BJWF9GTVRfWVVWNDIwUCIsInVuaWZpZWQiLCJjaHJvbWFTaXplIiwiYWxwaGFCdWYiLCJhbHBoYVN3RnJhbWUiLCJwdHMiLCJkZXN5bmMiLCJWaWRlb0VuY29kZXIiLCJfVmlkZW9FbmNvZGVyIiwiY29kZWNOYW1lIiwiY29kZWNUYWciLCJjb2RlY09wdHMiLCJyZXN0IiwiVmlkZW9Ub29sYm94RW5jb2RlciIsIl9WaWRlb1Rvb2xib3hFbmNvZGVyIiwiaHciLCJBVkNPTF9SQU5HRV9KUEVHIiwiV0VCTV9WUDlfT1BUUyIsIk1QNF9BVURJTyIsIkZGX0VOQ09ERVJfQUFDIiwiV0VCTV9BVURJTyIsIkZGX0VOQ09ERVJfTElCT1BVUyIsImNyZWF0ZU1wNFZpZGVvIiwiZGlzYWJsZUh3Q29kZWMiLCJzaGFyZWRIdyIsImNyZWF0ZUh3VmlkZW9FbmNvZGVyIiwiY3JlYXRlV2VibVZpZGVvIiwiY3JlYXRlQXVkaW8iLCJraW5kIiwiSGFyZHdhcmVDb250ZXh0Iiwib3duc0h3IiwiRkZfSFdERVZJQ0VfVFlQRV9WSURFT1RPT0xCT1giLCJGRl9IV0RFVklDRV9UWVBFX0NVREEiLCJ2aWRlbyIsIkZGX0VOQ09ERVJfTElCWDI2NSIsIkZvcm1hdE11eGVyIiwib3V0UGF0aCIsImZvcm1hdE5hbWUiLCJGb3JtYXRDb250ZXh0IiwiY29kZWNDdHgiLCJEaWN0aW9uYXJ5IiwiT3V0cHV0U2luayIsIl9PdXRwdXRTaW5rIiwicGF0aCIsImxvd2VyIiwic2V0dXAiLCJhdWRpbyIsIl9wcm9taXNlIiwic2FtcGxlUmF0ZSIsImh3VmlkZW8iLCJEUkFJTl9USU1FT1VUX01TIiwiRU5DT0RFX1RJTUVPVVRfTVMiLCJFbmNvZGVyUGlwZWxpbmUiLCJfRW5jb2RlclBpcGVsaW5lIiwib3V0RmlsZXMiLCJ3aXRoQXVkaW8iLCJraW5kcyIsIm5lZWRzTXA0SHciLCJpc0h3QWxwaGFDYXBhYmxlIiwic2lua3MiLCJzaW5rIiwiaW5wdXQiLCJzaXplRXF1YWxzIiwiYSIsInF1YW50aXplIiwiYmdyYSIsIm1vZGFsUGl4ZWwiLCJzdGVwWCIsInN0ZXBZIiwiY291bnRzIiwiZmlyc3RJZHgiLCJiZXN0IiwiYmVzdENvdW50Iiwia2V5IiwiaXNCbGFua0ZyYW1lIiwibSIsIm1iIiwibWciLCJtciIsIm1hIiwiY29udGVudCIsIm9mZnNldCIsIkJsYW5rU3RhdHMiLCJEcm9wU3RhdHMiLCJ0b3RhbERyb3BwZWQiLCJsb2NhbFN1bSIsIm1heEJ1cnN0IiwiYnVyc3QiLCJwZXJjZXB0aWJsZSIsImciLCJsIiwic2NvcmUiLCJBVURJT19NRVRBX0NIQU5ORUwiLCJBVURJT19DSFVOS19DSEFOTkVMIiwiYXR0YWNoQXVkaW9MaXN0ZW5lcnMiLCJlbmNvZGVyIiwiZ2V0VmlkZW9UaW1lTXMiLCJvbkVycm9yIiwib25NZXRhIiwiX2UiLCJzdGFydE1zIiwic2lsZW5jZVNhbXBsZXMiLCJvbkNodW5rIiwiYnVmZmVyIiwiYnl0ZXMiLCJTY3JlZW5zaG90VGFrZXIiLCJfcyIsImRpciIsInNlYyIsImluZGV4IiwiY3VycmVudFRpbWVNcyIsImZpbmFsQmdyYSIsIm5hdGl2ZUltYWdlIiwid3JpdGVGaWxlIiwidXNlUmV0cnkiLCJtYXhBdHRlbXB0cyIsInRpbWVvdXRFcnJvciIsImF0dGVtcHQiLCJwcm9taXNlcyIsInNldFRpbWVvdXQiLCJXT1JMRF9BUkciLCJBVURJT19BUkciLCJXYWl0YWJsZUV2ZW50IiwibWFwIiwidGFyZ2V0cyIsIkxPQ0FMX1NDSEVNRVMiLCJpc0xvY2FsU2NoZW1lIiwiaXNQcm94eVRhcmdldCIsIlVSTCIsInByb3hpZWRVcmwiLCJwYXJzZWQiLCJzZXRJbnRlcmNlcHRvciIsIndpbmRvdyIsInVzZUlubmVyUHJveHkiLCJzdHViTWVkaWEiLCJsaW1pdGVyIiwiZXZlbnRzIiwid2FpdCIsIm9uVGltZW91dCIsImV2ZW50IiwiZGV0YWlscyIsInByb3hpZWQiLCJyZXNwb25zZUhlYWRlcnMiLCJyZXNvdXJjZVR5cGUiLCJ1bnNldEludGVyY2VwdG9yIiwiVElNRU9VVF9FUlJPUiIsIkNPTlNPTEVfSUdOT1JFUyIsIndhaXRGb3JGaW5pc2giLCJ3aW4iLCJhY3Rpb24iLCJ0aW1lb3V0TXMiLCJ0b2xlcmFudCIsImRvbVJlYWR5IiwiZG9uZSIsImRlc2MiLCJfcGF0aCIsImV4aXRDb2RlIiwiZGlzcG9zZVdpbmRvdyIsIldPUkxEX1NDUklQVFMiLCJwaWNrV29ybGRTY3JpcHQiLCJyZW5kZXJlciIsIm1vZGUiLCJvcGVuV2luZG93Iiwib25DcmVhdGVkIiwiQnJvd3NlcldpbmRvdyIsImxpbmVOdW1iZXIiLCJzb3VyY2VJZCIsIm1zZ3MiLCJvcGVuV2luZG93V2l0aFJldHJ5IiwibG9hZFdpbmRvdyIsIndhcm11cCIsIm9wZW4iLCJyZW5kZXIiLCJkdXJhdGlvbiIsIm9uUHJvZ3Jlc3MiLCJ0YWtlciIsInRvdGFsIiwiZnJhbWVJbnRlcnZhbCIsImZyYW1lU2l6ZSIsIndyaXR0ZW4iLCJsYXN0RnJhbWUiLCJzY3JlZW5zaG90cyIsImxhc3RXcml0dGVuVGltZSIsInByb2dyZXNzIiwiZW5jb2RlRXJyb3IiLCJyZXNvbHZlciIsInJlamVjdGVyIiwiY2xlYXJTdHVja0NoZWNrIiwiYmxhbmtTdGF0cyIsImRyb3BTdGF0cyIsImRpc3Bvc2VBdWRpbyIsInNjaGVkdWxlRnJhbWUiLCJwYWludCIsIl9yIiwiaW1hZ2UiLCJpbWFnZVNpemUiLCJjdXJyZW50VGltZSIsImNyb3BwZWQiLCJ0aW1lRGVsdGEiLCJmcmFtZXNUb0luc2VydCIsIm5ld1Byb2dyZXNzIiwiZHVyYXRpb25NcyIsImxhc3RXcml0dGVuIiwic3R1Y2siLCJibGFuayIsImphbmsiLCJNQVhfUkVOREVSX0FUVEVNUFRTIiwid2l0aFJlcmVuZGVyIiwibGFzdEVyciIsIkZpcnN0RnJhbWVHYXRlIiwiX29wdHMiLCJub3ciLCJoYXNEaWZmIiwicm93IiwiYWR2YW5jZVZpZGVvcyIsInRpbWVzdGFtcE1zIiwiVElDS19TWU1CT0wiLCJleHByIiwidGlja0V2IiwiUldfVElNRU9VVF9VUyIsIm9wZW5JbnB1dCIsIkRlbXV4ZXIiLCJkZWNvZGVGcmFtZXMiLCJtZXRhIiwiZnJvbUlkeCIsInJlc3VtZUF0IiwiQVZTRUVLX0ZMQUdfQkFDS1dBUkQiLCJBVk1FRElBX1RZUEVfVklERU8iLCJkZWMiLCJEZWNvZGVyIiwiZnJhbWVXaWR0aCIsImZyYW1lSGVpZ2h0Iiwic2NhbGUiLCJhbGlnbiIsImZpbHRlciIsIkZpbHRlckFQSSIsInByZXZLIiwiX2ZyYW1lIiwidGIiLCJ0cyIsImF0IiwicGFja1JnYmEiLCJvdXRXIiwib3V0SCIsInN0cmlkZSIsIkRFQ09ERV9BSEVBRCIsIktFRVBfQkVISU5EIiwiTUVNT1JZX0JVREdFVCIsIk1BWF9QQVNTX1JFVFJZIiwiRGVjb2RlU2Vzc2lvbiIsIl9zcmMiLCJyYXciLCJpZHgiLCJoaXQiLCJmcm9tIiwiZmFpbHMiLCJnZW4iLCJmYWlsZWQiLCJjb250ZW50RnJvbSIsInN0b3JlZCIsImZsb29yIiwibGVhZEdhcCIsIm91dGVyIiwiX3BrdCIsImVuY29kZVN0dWJXZWJtIiwidG1wZGlyIiwicmFuZG9tQnl0ZXMiLCJzdHViIiwiU3R1YkZyYW1lIiwicmVhZEZpbGUiLCJybSIsImx1bWEiLCJjaHJvbWEiLCJGcmFtZVNlcnZlciIsIl91c2VJbm5lclByb3h5IiwiZXZlbiIsInJlYWwiLCJpZCIsInNlc3Npb25zIiwiU0NIRU1FIiwiQ09SU19IRUFERVJTIiwidXNlRnJhbWVQcm90b2NvbCIsImZzIiwicmVzIiwianNvbk9rIiwiaW50IiwicmdiYU9rIiwid2VibU9rIiwiY29weSIsImZhbGxiYWNrIiwiUkVOREVSX0ZQUyIsImNsZWFyRGlydHlDaGVjayIsImlzRmlyc3RGcmFtZSIsImdhdGUiLCJfZCIsInNsaXZlciIsInJlZnJlc2hGcHMiLCJzaG9vdCIsInRJbml0Iiwid2luUCIsInBpcGVsaW5lIiwiaGVsZCIsIm1haW4iLCJpZnJhbWUiLCJmcmFtZUlkIiwiZnJhbWVNcyIsInBhaW50ZWQiLCJyZXBlYXQiLCJwcmludEZlYXR1cmVzIiwiY3RybCIsImV4aXRpbmciLCJNZW51IiwiaXBjIiwibWtkaXIiLCJyZXN1bHQiXSwibWFwcGluZ3MiOiJpekVBS0EsSUFBTUEsRUFBQUEsQ0FBbUIsSUFDdkIsT0FBTyxRQUFBLENBQWEsR0FBQSxDQUNoQixJQUFJLEdBQUEsQ0FBSSxDQUFBLEtBQUEsRUFBUSxVQUFVLENBQUEsQ0FBRSxDQUFBLENBQUUsSUFBQSxDQUM3QixTQUFTLGFBQUEsRUFBaUIsUUFBQSxDQUFTLGFBQUEsQ0FBYyxPQUFBLENBQVEsV0FBQSxFQUFZLEdBQU0sU0FDMUUsUUFBQSxDQUFTLGFBQUEsQ0FBYyxHQUFBLENBQ3ZCLElBQUksR0FBQSxDQUFJLFNBQUEsQ0FBVyxTQUFTLE9BQU8sQ0FBQSxDQUFFLElBQUEsQ0FFaENDLENBQUFBLENBQWdDRCxFQUFBQSxFQUFpQixDQ052RCxTQUFTRSxFQUFBQSxDQUFRQyxDQUFBQSxDQUFjQyxDQUFBQSxDQUFzQkMsRUFBaUMsQ0FDM0YsR0FBSSxDQUNGLE9BQU9ELENBQUFBLENBQU8sT0FBQSxDQUFRLElBQUlELENBQUksQ0FBQyxDQUNqQyxDQUFBLEtBQVEsQ0FDTixPQUFPRSxDQUNULENBQ0YsQ0NWTyxTQUFTQyxDQUFBQSxDQUFZQyxDQUFBQSxDQUFvQixDQUM5QyxHQUFJLE9BQU9BLENBQUFBLEVBQU0sUUFBQSxDQUNmLE9BQU9BLENBQUFBLENBRVQsSUFBTUMsQ0FBQUEsQ0FBTSxPQUFPRCxDQUFDLENBQUEsQ0FDcEIsR0FBSSxNQUFBLENBQU8sS0FBQSxDQUFNQyxDQUFHLEVBQ2xCLE1BQU0sSUFBSSxLQUFBLENBQU0sQ0FBQSxNQUFBLEVBQVNELENBQUMsQ0FBQSxzQkFBQSxDQUF3QixFQUVwRCxPQUFPQyxDQUNULENBRU8sU0FBU0MsRUFBQUEsQ0FBWUYsQ0FBQUEsQ0FBb0IsQ0FDOUMsT0FBSSxPQUFPQSxDQUFBQSxFQUFNLFFBQUEsQ0FDUkEsQ0FBQUEsQ0FFRixNQUFBLENBQU9BLENBQUMsQ0FDakIsQ0FHTyxTQUFTRyxFQUFBQSxDQUFjQyxDQUFBQSxDQUE4QyxDQUMxRSxPQUFRSixDQUFBQSxFQUNGLE9BQU9BLENBQUFBLEVBQU0sUUFBQSxFQUFZQSxDQUFBQSxDQUFFLElBQUEsRUFBSyxHQUFNLEVBQUEsQ0FDakMsRUFBQyxDQUVIQSxDQUFBQSxDQUFFLEtBQUEsQ0FBTSxHQUFHLENBQUEsQ0FBRSxJQUFLSyxDQUFBQSxFQUFNRCxDQUFBQSxDQUFLQyxDQUFBQSxDQUFFLElBQUEsRUFBTSxDQUFDLENBRWpELENDckJBLElBQU1DLEVBQUFBLENBQVVDLHNCQUFBQSxDQUFjYixDQUFlLENBQUEsQ0FFaENjLEdBQWNiLEVBQUFBLENBQUssZUFBQSxDQUFpQkksQ0FBQUEsQ0FBYSxDQUFDLENBQUEsQ0FFbERVLEVBQUFBLENBQWFDLGFBQVFKLEVBQUFBLENBQVEsT0FBQSxDQUFRLDJCQUEyQixDQUFDLENBQUEsQ0FDeERLLFVBQUtGLEVBQUFBLENBQVksTUFBQSxDQUFRLFNBQVMsQ0FBQSxLQUMzQ0csRUFBQUEsQ0FBYUQsU0FBQUEsQ0FBS0YsR0FBWSxNQUFBLENBQVEsU0FBQSxDQUFXLGFBQWEsRUNPM0UsSUFBTUksRUFBQUEsQ0FBUSxjQUNSQyxFQUFBQSxDQUFPLFlBQUEsQ0FDUEMsRUFBQUEsQ0FBTyxZQUFBLENBQ1BDLEVBQUFBLENBQVEsYUFBQSxDQUNSQyxFQUFBQSxDQUFRLGFBQUEsQ0FFZCxTQUFTQyxFQUFBQSxDQUFVQyxDQUFBQSxDQUE2Q0MsQ0FBQUEsQ0FBdUMsQ0FDckcsT0FBTyxZQUEyQkMsQ0FBQUEsQ0FBcUIsQ0FDckQsSUFBTUMsQ0FBQUEsQ0FBWUQsQ0FBQUEsQ0FBUyxHQUFBLENBQUtFLEdBQ3ZCQSxDQUFBQSxZQUFlLEtBQUEsQ0FBU0EsQ0FBQUEsQ0FBSSxLQUFBLEVBQVMsTUFBQSxDQUFPQSxDQUFHLEVBQUtBLENBQzVELENBQUEsQ0FDRCxPQUFPSixDQUFBQSxDQUFPLElBQUEsQ0FBSyxJQUFBLENBQU0sR0FBR0csQ0FBUyxDQUN2QyxDQUNGLENBakNBLElBQUFFLEVBQUFBLENBQUFDLEdBQUFDLEVBQUFBLENBQUFDLEVBQUFBLENBQUFDLEVBQUFBLENBQUFDLEVBQUFBLENBc0VFRCxFQUFBQSxDQUFBLENBQUNWLElBS0RTLEVBQUFBLENBQUEsQ0FBQ1QsRUFBQUEsQ0FBQUEsQ0FLRFEsRUFBQUEsQ0FBQSxDQUFDUixFQUFBQSxDQUFBQSxDQUtETyxHQUFBLENBQUNQLEVBQUFBLENBQUFBLENBS0RNLEVBQUFBLENBQUEsQ0FBQ04sRUFBQUEsQ0FBQUEsQ0F2REksSUFBTVksQ0FBQUEsQ0FBTixLQUFtQyxDQStCeEMsV0FBQSxDQUFvQkMsQ0FBQUEsQ0FBaUJ2QixFQUFBQSxDQUFhLENBQTlCLElBQUEsQ0FBQSxNQUFBLENBQUF1QixFQS9CZkMsRUFBQUEsQ0FBQUgsRUFBQUEsQ0FBQSxDQUFBLENBQUEsSUFBQSxDQUFBLENBQ0xJLEVBQUFBLENBQUEsSUFBQSxDQUFRLE9BQUEsQ0FBQSxDQStCTixLQUFLLElBQUEsQ0FBTyxRQUNkLENBRm9CLE1BQUEsQ0E1QnBCLElBQUksS0FBQSxFQUFnQixDQUNsQixPQUFPLElBQUEsQ0FBSyxNQUNkLENBRUEsSUFBSSxLQUFBLENBQU1DLEVBQWUsQ0FDdkIsSUFBQSxDQUFLLE1BQUEsQ0FBU0EsQ0FBQUEsQ0FDZCxJQUFBLENBQUssSUFBQSxDQUFPLEtBQUssS0FBQSxFQUFTLFFBQzVCLENBRUEsSUFBSSxJQUFBLEVBQStCLENBQ2pDLE9BQU8sSUFBQSxDQUFLLEtBQ2QsQ0FFQSxJQUFJLElBQUEsQ0FBS0EsQ0FBQUEsQ0FBbUIsQ0FDMUIsSUFBTUMsQ0FBQUEsQ0FBUUQsQ0FBQUEsQ0FBTSxLQUFBLEVBQVMsT0FBQSxDQUFRLEtBQUEsQ0FDL0JFLENBQUFBLENBQU9GLENBQUFBLENBQU0sSUFBQSxFQUFRLE9BQUEsQ0FBUSxJQUFBLENBQzdCRyxDQUFBQSxDQUFPSCxDQUFBQSxDQUFNLElBQUEsRUFBUSxRQUFRLElBQUEsQ0FDN0JJLENBQUFBLENBQVFKLENBQUFBLENBQU0sS0FBQSxFQUFTLE9BQUEsQ0FBUSxLQUFBLENBQy9CSyxFQUFLLElBQUEsQ0FBSyxNQUFBLENBQ2hCLElBQUEsQ0FBSyxLQUFBLENBQVEsQ0FDWCxLQUFBLENBQU9BLEdBQU0sQ0FBQSxDQUFJSixDQUFBQSxDQUFRLE1BQUEsQ0FDekIsSUFBQSxDQUFNSSxDQUFBQSxFQUFNLENBQUEsQ0FBSUgsRUFBTyxNQUFBLENBQ3ZCLElBQUEsQ0FBTUcsQ0FBQUEsRUFBTSxDQUFBLENBQUlGLENBQUFBLENBQU8sTUFBQSxDQUN2QixNQUFPRSxDQUFBQSxFQUFNLENBQUEsQ0FBSUQsQ0FBQUEsQ0FBUSxNQUFBLENBQ3pCLEtBQUEsQ0FBT0osQ0FBQUEsQ0FBTSxLQUNmLEVBQ0YsQ0FPQSxLQUFBLENBQUEsR0FBU2IsQ0FBQUEsQ0FBMkIsQ0FDbEMsSUFBQSxDQUFLLE1BQU0sS0FBQSxHQUFRUixFQUFBQSxDQUFPLEdBQUdRLENBQVEsRUFDdkMsQ0FHQSxJQUFBLENBQUEsR0FBUUEsQ0FBQUEsQ0FBMkIsQ0FDakMsSUFBQSxDQUFLLElBQUEsRUFBTSxJQUFBLEdBQU9QLEVBQUFBLENBQU0sR0FBR08sQ0FBUSxFQUNyQyxDQUdBLElBQUEsQ0FBQSxHQUFRQSxDQUFBQSxDQUEyQixDQUNqQyxJQUFBLENBQUssTUFBTSxJQUFBLEdBQU9OLEVBQUFBLENBQU0sR0FBR00sQ0FBUSxFQUNyQyxDQUdBLFNBQVNBLENBQUFBLENBQTJCLENBQ2xDLElBQUEsQ0FBSyxJQUFBLEVBQU0sS0FBQSxHQUFRTCxFQUFBQSxDQUFPLEdBQUdLLENBQVEsRUFDdkMsQ0FHQSxLQUFBLENBQUEsR0FBU0EsQ0FBQUEsQ0FBMkIsQ0FDbEMsS0FBSyxJQUFBLEVBQU0sS0FBQSxHQUFRSixFQUFBQSxDQUFPLEdBQUdJLENBQVEsQ0FBQSxDQUNyQyxRQUFRLElBQUEsQ0FBSyxDQUFDLEVBQ2hCLENBRVEsUUFBQSxDQUFTbUIsQ0FBQUEsQ0FBaUIsQ0FDaEMsSUFBTWpCLENBQUFBLENBQU1pQixDQUFBQSxDQUFRLE9BQUEsRUFBUSxDQUN4QmpCLENBQUFBLENBQUksVUFBQSxDQUFXVixFQUFLLENBQUEsQ0FDdEIsSUFBQSxDQUFLLEtBQUEsQ0FBTVUsQ0FBQUEsQ0FBSSxLQUFBLENBQU1WLEVBQUFBLENBQU0sT0FBUyxDQUFDLENBQUMsQ0FBQSxDQUM3QlUsQ0FBQUEsQ0FBSSxVQUFBLENBQVdULEVBQUksRUFDNUIsSUFBQSxDQUFLLElBQUEsQ0FBS1MsQ0FBQUEsQ0FBSSxLQUFBLENBQU1ULEVBQUFBLENBQUssTUFBQSxDQUFTLENBQUMsQ0FBQyxDQUFBLENBQzNCUyxDQUFBQSxDQUFJLFVBQUEsQ0FBV1IsRUFBSSxDQUFBLENBQzVCLEtBQUssSUFBQSxDQUFLUSxDQUFBQSxDQUFJLEtBQUEsQ0FBTVIsRUFBQUEsQ0FBSyxNQUFBLENBQVMsQ0FBQyxDQUFDLENBQUEsQ0FDM0JRLENBQUFBLENBQUksVUFBQSxDQUFXUCxFQUFLLENBQUEsQ0FDN0IsSUFBQSxDQUFLLE1BQU1PLENBQUFBLENBQUksS0FBQSxDQUFNUCxFQUFBQSxDQUFNLE1BQUEsQ0FBUyxDQUFDLENBQUMsRUFFdEMsSUFBQSxDQUFLLElBQUEsQ0FBS08sQ0FBRyxFQUVqQixDQUVBLE1BQUEsQ0FBT2tCLENBQUFBLENBQW9CN0MsQ0FBQUEsQ0FBYyxDQUN2QyxPQUFPLElBQUksT0FBQSxDQUFjLENBQUM4QyxDQUFBQSxDQUFTQyxJQUFXLENBQzVDLElBQUEsQ0FBSyxLQUFBLENBQU0sQ0FBQSxFQUFHL0MsQ0FBSSxDQUFBLE9BQUEsQ0FBUyxFQUMzQixJQUFJZ0QsQ0FBQUEsQ0FBZ0IsRUFBQSxDQUNkQyxDQUFBQSxDQUFZQyxDQUFBQSxFQUFpQixDQUNqQyxJQUFNTixDQUFBQSxDQUFVTSxDQUFBQSxDQUFLLFFBQUEsRUFBUyxDQUMxQk4sQ0FBQUEsQ0FBUSxVQUFBLENBQVd2QixFQUFLLENBQUEsQ0FDMUIyQixDQUFBQSxFQUFTSixDQUFBQSxDQUFRLEtBQUEsQ0FBTXZCLEVBQUFBLENBQU0sTUFBQSxDQUFTLENBQUMsQ0FBQSxDQUV2QyxJQUFBLENBQUssUUFBQSxDQUFTdUIsQ0FBTyxFQUV6QixDQUFBLENBQ0FDLEVBQUssTUFBQSxFQUFRLEVBQUEsQ0FBRyxNQUFBLENBQVFJLENBQVEsQ0FBQSxDQUNoQ0osQ0FBQUEsQ0FBSyxRQUFRLEVBQUEsQ0FBRyxNQUFBLENBQVFJLENBQVEsQ0FBQSxDQUNoQ0osQ0FBQUEsQ0FDRyxFQUFBLENBQUcsT0FBQSxDQUFVTSxDQUFBQSxFQUFRLENBQ3BCSCxDQUFBQSxFQUFTRyxDQUFBQSxDQUFJLE9BQUEsQ0FDYk4sQ0FBQUEsQ0FBSyxJQUFBLEdBQ1AsQ0FBQyxDQUFBLENBQ0EsSUFBQSxDQUFLLE9BQUEsQ0FBUyxDQUFDTyxDQUFBQSxDQUFNQyxJQUFXLENBQzNCRCxDQUFBQSxFQUFRQyxDQUFBQSxFQUFVTCxDQUFBQSxFQUNwQkEsQ0FBQUEsR0FBVSxDQUFBLGdCQUFBLEVBQW1CSCxFQUFLLFNBQUEsQ0FBVSxJQUFBLENBQUssR0FBRyxDQUFDLENBQUEsQ0FBQSxDQUNyRCxJQUFBLENBQUssTUFBTSxDQUFBLEVBQUc3QyxDQUFJLENBQUEsTUFBQSxDQUFBLENBQVUsQ0FBRSxJQUFBLENBQUFvRCxDQUFBQSxDQUFNLE9BQUFDLENBQUFBLENBQVEsS0FBQSxDQUFBTCxDQUFNLENBQUMsQ0FBQSxDQUNuREQsQ0FBQUEsQ0FBTyxJQUFJLEtBQUEsQ0FBTUMsQ0FBSyxDQUFDLENBQUEsR0FFdkIsSUFBQSxDQUFLLEtBQUEsQ0FBTSxHQUFHaEQsQ0FBSSxDQUFBLE1BQUEsQ0FBUSxDQUFBLENBQzFCOEMsQ0FBQUEsRUFBUSxFQUVaLENBQUMsQ0FBQSxDQUNBLEVBQUEsQ0FBRyxvQkFBQSxDQUF1QlEsQ0FBQUEsRUFBVyxDQUNwQyxJQUFBLENBQUssS0FBQSxDQUFNLENBQUEsRUFBR3RELENBQUksQ0FBQSxVQUFBLENBQUEsQ0FBY3NELENBQU0sRUFDeEMsQ0FBQyxDQUFBLENBQ0EsRUFBQSxDQUFHLDJCQUE2QkgsQ0FBQUEsRUFBUSxDQUN2QyxJQUFBLENBQUssS0FBQSxDQUFNLENBQUEsRUFBR25ELENBQUksYUFBY21ELENBQUcsRUFDckMsQ0FBQyxFQUNMLENBQUMsQ0FDSCxDQUVBLE1BQU0sS0FBQSxFQUF1QixDQUMzQixNQUFNLElBQUEsQ0FBSyxJQUFBLEVBQU0sVUFDbkIsQ0FDRixDQUFBLENBckhPbEIsRUFBQUEsQ0FBQXNCLEVBQUFBLENBQUEsQ0FBQSxDQW9DTEMsR0FBQXZCLEVBQUFBLENBQUEsQ0FBQSxDQUFBLE9BQUEsQ0FEQUQsRUFBQUEsQ0FuQ1dFLENBQUFBLENBQUFBLENBeUNYc0IsRUFBQUEsQ0FBQXZCLEVBQUFBLENBQUEsU0FEQUYsRUFBQUEsQ0F4Q1dHLENBQUFBLENBQUFBLENBOENYc0IsRUFBQUEsQ0FBQXZCLEVBQUFBLENBQUEsQ0FBQSxDQUFBLE1BQUEsQ0FEQUgsRUFBQUEsQ0E3Q1dJLENBQUFBLENBQUFBLENBbURYc0IsRUFBQUEsQ0FBQXZCLEVBQUFBLENBQUEsQ0FBQSxDQUFBLE9BQUEsQ0FEQUosRUFBQUEsQ0FsRFdLLENBQUFBLENBQUFBLENBd0RYc0IsRUFBQUEsQ0FBQXZCLEVBQUFBLENBQUEsVUFEQUwsRUFBQUEsQ0F2RFdNLENBQUFBLENBQUFBLENBQU51QixFQUFBQSxDQUFBeEIsRUFBQUEsQ0FBTUMsQ0FBQUEsQ0FBQUEsQ0F1SGIsSUFBTXdCLEVBQVMsSUFBSXhCLENBQUFBLENBR25CeUIsVUFBQUEsQ0FBSSxXQUFBLENBQVksQ0FBQ0MsQ0FBQUEsQ0FBT2hCLElBQVksQ0FDbEMsSUFBTWpCLENBQUFBLENBQU1pQixDQUFBQSxDQUFRLE9BQUEsRUFBUSxDQUN2QmpCLElBR0RpQyxDQUFBQSxFQUFTQyxzQkFBQUEsQ0FDWEgsQ0FBQUEsQ0FBTyxLQUFBLENBQU0vQixDQUFHLENBQUEsQ0FDUGlDLEdBQVNFLHdCQUFBQSxFQUNsQkosQ0FBQUEsQ0FBTyxJQUFBLENBQUsvQixDQUFHLENBQUEsRUFFbkIsQ0FBQyxFQ2hLRCxJQUFNb0MsRUFBQUEsQ0FBTSxTQUFBLENBRUwsU0FBU0MsRUFBQUEsRUFBNkIsQ0FFM0MsSUFBTUMsQ0FBQUEsQ0FBVWxELFNBQUFBLENBQUttRCxZQUFBQSxDQUFJLE9BQUEsQ0FBUSxTQUFTLENBQUEsQ0FBRyxjQUFBLENBQWdCLFNBQVMsQ0FBQSxDQUN0RUMsY0FBQUEsQ0FBVUYsQ0FBQUEsQ0FBUyxDQUFFLFNBQUEsQ0FBVyxJQUFLLENBQUMsQ0FBQSxDQUN0Q0MsWUFBQUEsQ0FBSSxPQUFBLENBQVEsWUFBQSxDQUFjRCxDQUFPLENBQUEsQ0FDakNHLHVCQUFjLEtBQUEsQ0FBTSxDQUNsQixXQUFBLENBQWEsY0FBQSxDQUNiLGNBQUEsQ0FBZ0IsS0FBQSxDQUNoQixTQUFVLEtBQUEsQ0FDVix3QkFBQSxDQUEwQixJQUM1QixDQUFDLENBQUEsQ0FDRFYsQ0FBQUEsQ0FBTyxNQUFNSyxFQUFBQSxDQUFLLGFBQUEsQ0FBZUUsQ0FBTyxFQUMxQyxDQ25CTyxTQUFTSSxFQUFBQSxDQUFpQ0MsQ0FBQUEsQ0FBdUJwRSxFQUF3QyxDQUM5RyxPQUFPLENBQUEsR0FBSXFFLENBQUFBLEdBQVMsQ0FDbEIsR0FBSSxDQUNGLElBQU1DLENBQUFBLENBQU1GLENBQUFBLENBQUcsR0FBR0MsQ0FBSSxDQUFBLENBQ3RCLE9BQUlDLGFBQWUsT0FBQSxDQUNWQSxDQUFBQSxDQUFJLEtBQUEsQ0FBTSxJQUFNdEUsQ0FBWSxDQUFBLENBRTlCc0UsQ0FDVCxDQUFBLEtBQVEsQ0FDTixPQUFPdEUsQ0FDVCxDQUNGLENBQ0YsQ0NSTyxJQUFNdUUsRUFBQUEsQ0FBZSxpQkFBQSxDQUVyQixTQUFTQyxFQUFBQSxFQUFRLENBQ3RCLElBQU1DLENBQUFBLENBQU8sT0FBQSxDQUFRLElBQUEsQ0FDakJDLENBQUFBLENBQU9ELENBQUFBLENBQUssSUFBQSxDQUFNRSxHQUFRQSxDQUFBQSxDQUFJLFVBQUEsQ0FBV0osRUFBWSxDQUFDLENBQUEsQ0FDMUQsR0FBSSxDQUFDRyxDQUFBQSxDQUNILE9BQUFsQixDQUFBQSxDQUFPLEtBQUEsQ0FBTSxVQUFBLENBQVlpQixDQUFJLENBQUEsQ0FDdEIsT0FBQSxDQUFRLElBQUEsQ0FFakIsSUFBTUosQ0FBQUEsQ0FBTyxDQUFDLE1BQUEsQ0FBUSxHQUFHSSxFQUFLLEtBQUEsQ0FBTSxFQUFFLENBQUMsQ0FBQSxDQUN2QyxPQUFBQyxDQUFBQSxDQUFPLE9BQU8sSUFBQSxDQUFLQSxDQUFBQSxDQUFLLEtBQUEsQ0FBTSxHQUFHLENBQUEsQ0FBRSxDQUFDLEVBQUksUUFBUSxDQUFBLENBQUUsUUFBQSxFQUFTLENBQzNETCxDQUFBQSxDQUFLLElBQUEsQ0FBSyxHQUFHLElBQUEsQ0FBSyxLQUFBLENBQU1LLENBQUksQ0FBQyxDQUFBLENBQzdCbEIsQ0FBQUEsQ0FBTyxNQUFNLFNBQUEsQ0FBV2EsQ0FBSSxDQUFBLENBQ3JCQSxDQUNULENDaEJPLElBQU1PLEVBQUFBLENBQWdCLElBQUEsQ0FDaEJDLEVBQUFBLENBQWlCLElBQUEsQ0FDakJDLEdBQWMsRUFBQSxDQUNkQyxFQUFBQSxDQUFtQixDQUFBLENBQ25CQyxFQUFBQSxDQUF5QixFQUFBLENBQ3pCQyxFQUFBQSxDQUFvQixDQUFDLGNBQUEsQ0FBZ0IsZUFBZSxDQUFBLENBRXBEQyxFQUFBQSxDQUFlQyxrQkFBQUEsQ0FBRSxNQUFBLENBQU8sQ0FDbkMsU0FBVUEsa0JBQUFBLENBQUUsTUFBQSxFQUFPLENBQUUsUUFBQSxDQUFTLHFCQUFxQixDQUFBLENBQ25ELE1BQU9BLGtCQUFBQSxDQUFFLE1BQUEsRUFBTyxDQUFFLFFBQUEsQ0FBUyxhQUFhLENBQUEsQ0FDeEMsT0FBUUEsa0JBQUFBLENBQUUsTUFBQSxFQUFPLENBQUUsUUFBQSxDQUFTLGNBQWMsQ0FBQSxDQUMxQyxJQUFLQSxrQkFBQUEsQ0FBRSxNQUFBLEVBQU8sQ0FBRSxRQUFBLENBQVMsbUJBQW1CLENBQUEsQ0FDNUMsVUFBV0Esa0JBQUFBLENBQUUsT0FBQSxFQUFRLENBQUUsUUFBQSxDQUFTLDBCQUEwQixDQUFBLENBQzFELFNBQVVBLGtCQUFBQSxDQUFFLEtBQUEsQ0FBTUEsa0JBQUFBLENBQUUsTUFBQSxFQUFRLENBQUEsQ0FBRSxTQUFTLHNEQUFzRCxDQUFBLENBQzdGLGFBQUEsQ0FBZUEsa0JBQUFBLENBQUUsT0FBQSxFQUFRLENBQUUsU0FBUyw4Q0FBOEMsQ0FBQSxDQUNsRixhQUFBLENBQWVBLGtCQUFBQSxDQUFFLE9BQUEsRUFBUSxDQUFFLFNBQVMsdUNBQXVDLENBQUEsQ0FDM0UsVUFBQSxDQUFZQSxrQkFBQUEsQ0FBRSxPQUFBLEVBQVEsQ0FBRSxTQUFTLHNFQUFzRSxDQUFBLENBQ3ZHLGNBQUEsQ0FBZ0JBLGtCQUFBQSxDQUFFLE9BQUEsRUFBUSxDQUFFLFNBQVMsd0VBQXdFLENBQUEsQ0FDN0csa0JBQUEsQ0FBb0JBLGtCQUFBQSxDQUFFLE9BQUEsRUFBUSxDQUFFLFNBQVMsNERBQTRELENBQUEsQ0FDckcsdUJBQUEsQ0FBeUJBLGtCQUFBQSxDQUN0QixPQUFBLEVBQVEsQ0FDUixTQUFTLHdFQUF3RSxDQUFBLENBQ3BGLGNBQUEsQ0FBZ0JBLGtCQUFBQSxDQUFFLE9BQUEsRUFBUSxDQUFFLFNBQVMsaURBQWlELENBQUEsQ0FDdEYsYUFBQSxDQUFlQSxrQkFBQUEsQ0FBRSxNQUFBLEVBQU8sQ0FBRSxTQUFTLGdDQUFnQyxDQUFBLENBQ25FLFdBQUEsQ0FBYUEsa0JBQUFBLENBQUUsS0FBQSxDQUFNQSxrQkFBQUEsQ0FBRSxNQUFBLEVBQVEsQ0FBQSxDQUFFLFFBQUEsQ0FBUywyQ0FBMkMsQ0FDdkYsQ0FBQyxDQUFBLENBd0JZQyxHQUFzQyxDQUNqRCxLQUFBLENBQU9SLEVBQUFBLENBQ1AsTUFBQSxDQUFRQyxFQUFBQSxDQUNSLEdBQUEsQ0FBS0MsR0FDTCxRQUFBLENBQVVDLEVBQUFBLENBQ1YsUUFBQSxDQUFVRSxFQUFBQSxDQUNWLFNBQUEsQ0FBVyxLQUFBLENBQ1gsY0FBZSxLQUFBLENBQ2YsYUFBQSxDQUFlLEtBQUEsQ0FDZixVQUFBLENBQVksS0FBQSxDQUNaLGNBQUEsQ0FBZ0IsTUFDaEIsa0JBQUEsQ0FBb0IsS0FBQSxDQUNwQix1QkFBQSxDQUF5QixLQUFBLENBQ3pCLGNBQUEsQ0FBZ0IsS0FBQSxDQUNoQixjQUFlRCxFQUFBQSxDQUNmLFdBQUEsQ0FBYSxFQUNmLENBQUEsQ0N6REEsU0FBU0ssR0FBZ0I5RSxDQUFBQSxDQUFtQixDQUMxQyxHQUFJQSxDQUFBQSxDQUFFLFFBQUEsQ0FBUyxLQUFLLEdBQUtBLENBQUFBLENBQUUsVUFBQSxDQUFXLE9BQU8sQ0FBQSxDQUMzQyxPQUFPQSxDQUFBQSxDQUVULElBQUkrRSxDQUFBQSxDQUNKLEdBQUksQ0FDRkEsQ0FBQUEsQ0FBTUMsaUJBQUFBLENBQWFoRixDQUFDLEVBQ3RCLE1BQVEsQ0FDTitFLENBQUFBLENBQU0xQyxZQUFBQSxDQUFRckMsQ0FBQyxFQUNqQixDQUNBLE9BQU8sQ0FBQSxPQUFBLEVBQVUrRSxDQUFHLENBQUEsQ0FDdEIsQ0FPQSxlQUFzQkUsRUFBQUEsQ0FBUUMsRUFBcUIsQ0FDakQsSUFBTUMsQ0FBQUEsQ0FBUVIsRUFBQUEsQ0FBYSxLQUFBLENBQ3JCUyxDQUFBQSxDQUFJUCxHQUNWUSxpQkFBQUEsQ0FDRyxJQUFBLENBQUtILENBQUFBLENBQVEsSUFBSSxDQUFBLENBQ2pCLFFBQUEsQ0FBUyxXQUFZLG9EQUFvRCxDQUFBLENBQ3pFLE1BQUEsQ0FBTyxzQkFBQSxDQUF3QkMsQ0FBQUEsQ0FBTSxLQUFBLENBQU0sWUFBYSxDQUFBLEVBQUdDLENBQUFBLENBQUUsS0FBSyxDQUFBLENBQUUsQ0FBQSxDQUNwRSxNQUFBLENBQU8sd0JBQXlCRCxDQUFBQSxDQUFNLE1BQUEsQ0FBTyxXQUFBLENBQWEsQ0FBQSxFQUFHQyxDQUFBQSxDQUFFLE1BQU0sQ0FBQSxDQUFFLENBQUEsQ0FDdkUsTUFBQSxDQUFPLDZCQUFBLENBQStCRCxDQUFBQSxDQUFNLFdBQUEsQ0FBWSxXQUFBLENBQWEsRUFBRSxFQUN2RSxNQUFBLENBQU8sb0JBQUEsQ0FBc0JBLENBQUFBLENBQU0sR0FBQSxDQUFJLFdBQUEsQ0FBYSxDQUFBLEVBQUdDLEVBQUUsR0FBRyxDQUFBLENBQUUsQ0FBQSxDQUM5RCxNQUFBLENBQU8seUJBQUEsQ0FBMkJELENBQUFBLENBQU0sU0FBUyxXQUFBLENBQWEsQ0FBQSxFQUFHQyxDQUFBQSxDQUFFLFFBQVEsQ0FBQSxDQUFFLENBQUEsQ0FDN0UsT0FBTyx3QkFBQSxDQUEwQkQsQ0FBQUEsQ0FBTSxRQUFBLENBQVMsV0FBQSxDQUFhQyxDQUFBQSxDQUFFLFFBQUEsQ0FBUyxLQUFLLEdBQUcsQ0FBQyxDQUFBLENBQ2pGLE1BQUEsQ0FBTyxrQkFBQSxDQUFvQkQsQ0FBQUEsQ0FBTSxVQUFVLFdBQUEsQ0FBYUMsQ0FBQUEsQ0FBRSxTQUFTLENBQUEsQ0FDbkUsTUFBQSxDQUFPLHFCQUFBLENBQXVCRCxFQUFNLGFBQUEsQ0FBYyxXQUFBLENBQWFDLENBQUFBLENBQUUsYUFBYSxDQUFBLENBQzlFLE1BQUEsQ0FBTyxtQkFBQSxDQUFxQkQsQ0FBQUEsQ0FBTSxhQUFBLENBQWMsV0FBQSxDQUFhQyxDQUFBQSxDQUFFLGFBQWEsQ0FBQSxDQUM1RSxNQUFBLENBQU8sZ0JBQWlCRCxDQUFBQSxDQUFNLFVBQUEsQ0FBVyxXQUFBLENBQWFDLENBQUFBLENBQUUsVUFBVSxDQUFBLENBQ2xFLE9BQU8sb0JBQUEsQ0FBc0JELENBQUFBLENBQU0sY0FBQSxDQUFlLFdBQUEsQ0FBYUMsQ0FBQUEsQ0FBRSxjQUFjLEVBQy9FLE1BQUEsQ0FBTyx3QkFBQSxDQUEwQkQsQ0FBQUEsQ0FBTSxrQkFBQSxDQUFtQixXQUFBLENBQWFDLENBQUFBLENBQUUsa0JBQWtCLENBQUEsQ0FDM0YsTUFBQSxDQUFPLDZCQUFBLENBQStCRCxDQUFBQSxDQUFNLHVCQUFBLENBQXdCLFdBQUEsQ0FBYUMsRUFBRSx1QkFBdUIsQ0FBQSxDQUMxRyxNQUFBLENBQU8sbUJBQUEsQ0FBcUJELENBQUFBLENBQU0sY0FBQSxDQUFlLFlBQWFDLENBQUFBLENBQUUsY0FBYyxDQUFBLENBQzlFLE1BQUEsQ0FBTywyQkFBQSxDQUE2QkQsQ0FBQUEsQ0FBTSxjQUFjLFdBQUEsQ0FBYSxDQUFBLEVBQUdDLENBQUFBLENBQUUsYUFBYSxDQUFBLENBQUUsQ0FBQSxDQUN6RixNQUFBLENBQU8sTUFBT0UsQ0FBQUEsQ0FBZ0JDLENBQUFBLEdBQVMsQ0FDdEMsR0FBSSxDQUNGLE1BQU1MLEVBQVEsR0FBQSxDQUFJSixFQUFBQSxDQUFnQlEsQ0FBTSxDQUFBLENBQUcsQ0FDekMsS0FBQSxDQUFPMUIsR0FBTWxFLENBQUFBLENBQWEwRixDQUFBQSxDQUFFLEtBQUssQ0FBQSxDQUFFRyxDQUFBQSxDQUFLLEtBQUssRUFDN0MsTUFBQSxDQUFRM0IsRUFBQUEsQ0FBTWxFLENBQUFBLENBQWEwRixDQUFBQSxDQUFFLE1BQU0sQ0FBQSxDQUFFRyxFQUFLLE1BQU0sQ0FBQSxDQUNoRCxHQUFBLENBQUszQixFQUFBQSxDQUFNbEUsQ0FBQUEsQ0FBYTBGLENBQUFBLENBQUUsR0FBRyxDQUFBLENBQUVHLENBQUFBLENBQUssR0FBRyxDQUFBLENBQ3ZDLFFBQUEsQ0FBVTNCLEVBQUFBLENBQU1sRSxFQUFhMEYsQ0FBQUEsQ0FBRSxRQUFRLENBQUEsQ0FBRUcsQ0FBQUEsQ0FBSyxRQUFRLENBQUEsQ0FDdEQsU0FBVXpGLEVBQUFBLENBQVdELEVBQVcsQ0FBQSxDQUFFMEYsQ0FBQUEsQ0FBSyxPQUFPLENBQUEsQ0FDOUMsU0FBQSxDQUFXQSxDQUFBQSxDQUFLLFNBQUEsRUFBYUgsQ0FBQUEsQ0FBRSxTQUFBLENBQy9CLGFBQUEsQ0FBZUcsQ0FBQUEsQ0FBSyxhQUFBLEVBQWlCSCxFQUFFLGFBQUEsQ0FDdkMsYUFBQSxDQUFlRyxDQUFBQSxDQUFLLGFBQUEsRUFBaUJILENBQUFBLENBQUUsYUFBQSxDQUN2QyxXQUFZRyxDQUFBQSxDQUFLLFVBQUEsRUFBY0gsQ0FBQUEsQ0FBRSxVQUFBLENBQ2pDLGNBQUEsQ0FBZ0JHLENBQUFBLENBQUssZ0JBQWtCSCxDQUFBQSxDQUFFLGNBQUEsQ0FDekMsa0JBQUEsQ0FBb0JHLENBQUFBLENBQUssa0JBQUEsRUFBc0JILENBQUFBLENBQUUsbUJBQ2pELHVCQUFBLENBQXlCRyxDQUFBQSxDQUFLLHVCQUFBLEVBQTJCSCxDQUFBQSxDQUFFLHVCQUFBLENBQzNELGNBQUEsQ0FBZ0JHLEVBQUssY0FBQSxFQUFrQkgsQ0FBQUEsQ0FBRSxjQUFBLENBQ3pDLGFBQUEsQ0FBZXhCLEVBQUFBLENBQU1sRSxDQUFBQSxDQUFhMEYsRUFBRSxhQUFhLENBQUEsQ0FBRUcsQ0FBQUEsQ0FBSyxhQUFhLENBQUEsQ0FDckUsV0FBQSxDQUFhekYsR0FBV0osQ0FBVyxDQUFBLENBQUU2RixDQUFBQSxDQUFLLFdBQVcsQ0FDdkQsQ0FBQyxFQUNILENBQUEsTUFBU0MsQ0FBQUEsQ0FBRyxDQUNWdkMsQ0FBQUEsQ0FBTyxLQUFBLENBQU11QyxDQUFDLEVBQ2hCLENBQ0YsQ0FBQyxDQUFBLENBQ0gsTUFBTUgsaUJBQUFBLENBQVEsVUFBQSxDQUFXcEIsRUFBQUEsRUFBTyxFQUNsQyxDQ2hCTyxJQUFNd0IsRUFBQUEsQ0FBTixLQUFnQixDQUNyQixZQUFBLENBQWF0QyxDQUFBQSxDQUFlaEIsQ0FBQUEsQ0FBaUIsQ0FDM0MsSUFBQSxDQUFLLElBQUEsQ0FBSyxDQUFFLElBQUEsQ0FBTSxTQUFBLENBQW9CLEtBQUEsQ0FBQWdCLEVBQU8sT0FBQSxDQUFBaEIsQ0FBUSxDQUFDLEVBQ3hELENBRUEsYUFBQSxDQUFjTixFQUFxQixDQUNqQyxJQUFBLENBQUssSUFBQSxDQUFLLENBQUUsSUFBQSxDQUFNLFVBQUEsQ0FBcUIsTUFBQUEsQ0FBTSxDQUFDLEVBQ2hELENBRUEsVUFBQSxDQUFXSSxDQUFBQSxDQUE4QixDQUN2QyxPQUFPLElBQUEsQ0FBSyxJQUFBLENBQUssQ0FBRSxJQUFBLENBQU0sT0FBQSxDQUFrQixLQUFBLENBQUFBLENBQU0sQ0FBQyxDQUNwRCxDQUVBLFNBQUEsQ0FBVXlELENBQUFBLENBQXdDLENBQ2hELE9BQU8sSUFBQSxDQUFLLElBQUEsQ0FBSyxDQUFFLElBQUEsQ0FBTSxNQUFBLENBQWlCLE9BQUEsQ0FBQUEsQ0FBUSxDQUFDLENBQ3JELENBRVEsSUFBQSxDQUFLeEUsQ0FBQUEsQ0FBNEIsQ0FDdkMsT0FBTyxJQUFJLE9BQUEsQ0FBU21CLENBQUFBLEVBQVksQ0FDOUIsR0FBSSxDQUFDLFFBQVEsSUFBQSxDQUNYLE9BQU9BLENBQUFBLEVBQVEsQ0FFakIsT0FBQSxDQUFRLElBQUEsQ0FBS25CLEVBQUssSUFBTW1CLENBQUFBLEVBQVMsRUFDbkMsQ0FBQyxDQUNILENBQ0YsQ0FBQSxDQ2xGTyxTQUFTc0QsRUFBQUEsQ0FBTUMsQ0FBQUEsQ0FBWSxDQUNoQyxPQUFPLElBQUksT0FBQSxDQUFldkQsQ0FBQUEsRUFBWSxVQUFBLENBQVdBLEVBQVN1RCxDQUFFLENBQUMsQ0FDL0QsQ0FFTyxTQUFTQyxDQUFBQSxDQUFlQyxFQUFlRixDQUFBQSxDQUFZRyxDQUFBQSxDQUEyQixDQUNuRixPQUFPLElBQUksT0FBQSxDQUFRLENBQUMxRCxDQUFBQSxDQUFTQyxDQUFBQSxHQUFXLENBQ3RDLElBQU0wRCxDQUFBQSxDQUFRLFVBQUEsQ0FBVyxJQUFNMUQsQ0FBQUEsQ0FBTyxJQUFJLEtBQUEsQ0FBTSxDQUFBLEVBQUd5RCxDQUFLLENBQUEsaUJBQUEsRUFBb0JILENBQUUsQ0FBQSxFQUFBLENBQUksQ0FBQyxDQUFBLENBQUdBLENBQUUsQ0FBQSxDQUN4RkUsQ0FBQUEsQ0FBRSxLQUFLekQsQ0FBQUEsQ0FBU0MsQ0FBTSxDQUFBLENBQUUsT0FBQSxDQUFRLElBQU0sWUFBQSxDQUFhMEQsQ0FBSyxDQUFDLEVBQzNELENBQUMsQ0FDSCxDQUdPLFNBQVNDLEVBQUFBLENBQWFILENBQUFBLENBQWVsRCxDQUFBQSxDQUFrQyxDQUM1RSxPQUFLQSxDQUFBQSxDQUdFLElBQUksT0FBQSxDQUFXLENBQUNQLENBQUFBLENBQVNDLENBQUFBLEdBQVcsQ0FDekMsSUFBTTRELENBQUFBLENBQVUsSUFBTTVELEVBQU9NLENBQUFBLENBQU8sTUFBTSxDQUFBLENBQzFDQSxDQUFBQSxDQUFPLGdCQUFBLENBQWlCLE9BQUEsQ0FBU3NELEVBQVMsQ0FBRSxJQUFBLENBQU0sSUFBSyxDQUFDLENBQUEsQ0FDeERKLENBQUFBLENBQUUsS0FBS3pELENBQUFBLENBQVNDLENBQU0sQ0FBQSxDQUFFLE9BQUEsQ0FBUSxJQUFNTSxDQUFBQSxDQUFPLG9CQUFvQixPQUFBLENBQVNzRCxDQUFPLENBQUMsRUFDcEYsQ0FBQyxDQUFBLENBTlFKLENBT1gsQ0FHTyxTQUFTSyxFQUFBQSxDQUFXQyxDQUFBQSxDQUFzRVIsQ0FBQUEsQ0FBWSxDQUMzRyxJQUFJUyxDQUFBQSxDQUNBQyxDQUFBQSxDQUFTLEtBQUEsQ0FDYixlQUFlQyxDQUFBQSxDQUFLQyxDQUFBQSxDQUFlLENBQ2pDLElBQU1DLENBQUFBLENBQU8sTUFBTUwsQ0FBQUEsQ0FBU0ksQ0FBSyxDQUFBLENBQzdCRixDQUFBQSxHQUdKRCxFQUFRLFVBQUEsQ0FBVyxJQUFNRSxDQUFBQSxDQUFLQyxDQUFBQSxDQUFRLENBQUMsQ0FBQSxDQUFHQyxHQUFRYixDQUFFLENBQUEsRUFDdEQsQ0FDQSxPQUFBUyxDQUFBQSxDQUFRLFVBQUEsQ0FBVyxJQUFNRSxDQUFBQSxDQUFLLENBQUMsQ0FBQSxDQUFHWCxDQUFFLENBQUEsQ0FDN0IsSUFBTSxDQUNYVSxDQUFBQSxDQUFTLElBQUEsQ0FDVCxZQUFBLENBQWFELENBQUssRUFDcEIsQ0FDRixDQ3BDQSxJQUFNSyxFQUFBQSxDQUFpQixHQUFBLENBRWhCLFNBQVNDLEVBQUFBLENBQUtDLENBQUFBLENBQWVDLEVBQWdCQyxDQUFBQSxDQUFtQyxDQUNyRixPQUFPakIsQ0FBQUEsQ0FBWWUsQ0FBQUEsQ0FBSSxXQUFBLENBQVlDLEVBQVFDLENBQU0sQ0FBQSxDQUFHSixFQUFBQSxDQUFnQixDQUFBLElBQUEsRUFBT0csQ0FBTSxDQUFBLENBQUUsQ0FDckYsQ0FFTyxTQUFTRSxFQUFBQSxDQUFPSCxDQUFBQSxDQUFlSSxDQUFBQSxDQUFzQyxDQUMxRSxPQUFPbkIsRUFBWWMsRUFBQUEsQ0FBS0MsQ0FBQUEsQ0FBSyxrQkFBQSxDQUFvQixDQUFFLFVBQUEsQ0FBQUksQ0FBVyxDQUFDLENBQUEsQ0FBR04sRUFBQUEsQ0FBZ0IsUUFBUSxDQUM1RixDQUVPLFNBQVNPLEdBQW1CTCxDQUFBQSxDQUFlTSxDQUFBQSxDQUErQixDQUMvRSxPQUFPLElBQUksT0FBQSxDQUFRLENBQUM3RSxDQUFBQSxDQUFTQyxDQUFBQSxHQUFXLENBQ3RDLElBQU02RSxDQUFBQSxDQUFVLFVBQUEsQ0FBVyxJQUFNLENBQy9CUCxDQUFBQSxDQUFJLEdBQUEsQ0FBSSxTQUFBLENBQVdRLENBQU8sQ0FBQSxDQUMxQjlFLEVBQU8sSUFBSSxLQUFBLENBQU0sQ0FBQSxtQ0FBQSxFQUFzQ29FLEVBQWMsQ0FBQSxFQUFBLENBQUksQ0FBQyxFQUM1RSxDQUFBLENBQUdBLEVBQWMsQ0FBQSxDQUVYVSxDQUFBQSxDQUFVLENBQUNDLENBQUFBLENBQW1CUixDQUFBQSxHQUFtQixDQUNqREEsQ0FBQUEsR0FBVyxvQ0FBQSxHQUNiLFlBQUEsQ0FBYU0sQ0FBTyxDQUFBLENBQ3BCUCxDQUFBQSxDQUFJLElBQUksU0FBQSxDQUFXUSxDQUFPLENBQUEsQ0FDMUIvRSxDQUFBQSxFQUFRLEVBRVosQ0FBQSxDQUNBdUUsRUFBSSxFQUFBLENBQUcsU0FBQSxDQUFXUSxDQUFPLENBQUEsQ0FFekJULEVBQUFBLENBQUtDLENBQUFBLENBQUssaUNBQWtDLENBQzFDLE1BQUEsQ0FBUSxTQUFBLENBQ1IsTUFBQSxDQUFBTSxDQUNGLENBQUMsRUFBRSxLQUFBLENBQU8xQixDQUFBQSxFQUFNLENBQ2QsWUFBQSxDQUFhMkIsQ0FBTyxDQUFBLENBQ3BCUCxFQUFJLEdBQUEsQ0FBSSxTQUFBLENBQVdRLENBQU8sQ0FBQSxDQUMxQjlFLENBQUFBLENBQU9rRCxDQUFDLEVBQ1YsQ0FBQyxFQUNILENBQUMsQ0FDSCxDQUVBLGVBQXNCOEIsR0FBaUJWLENBQUFBLENBQThCLENBQ25FLE1BQU1ELEVBQUFBLENBQUtDLENBQUFBLENBQUssZ0NBQUEsQ0FBa0MsQ0FBRSxNQUFBLENBQVEsT0FBUSxDQUFDLEVBQ3ZFLENBRUEsZUFBc0JXLEVBQUFBLENBQWdCQyxFQUFrQkMsQ0FBQUEsQ0FBWSxDQUNsRSxHQUFJLENBQ0YsSUFBTWIsQ0FBQUEsQ0FBTVksRUFBSSxRQUFBLENBQ2hCLE1BQU1iLEVBQUFBLENBQUtDLENBQUFBLENBQUssc0NBQUEsQ0FBd0MsRUFBRSxDQUFBLENBQzFELE1BQU1ELEVBQUFBLENBQUtDLENBQUFBLENBQUssb0NBQUEsQ0FBc0MsQ0FDcEQsR0FBR2EsQ0FBQUEsQ0FDSCxpQkFBQSxDQUFtQixDQUFBLENBQ25CLE1BQUEsQ0FBUSxDQUFBLENBQ1YsQ0FBQyxFQUNERCxDQUFBQSxDQUFJLFVBQUEsR0FDTixDQUFBLEtBQVEsQ0FFUixDQUNGLENDckRPLElBQU1FLEVBQUFBLENBQTBCLEVBQUEsQ0FFaEMsSUFBTUMsRUFBQUEsQ0FBcUIsWUFBQSxDQUUzQixTQUFTQyxFQUFBQSxDQUFlQyxDQUFBQSxDQUFtQkosQ0FBQUEsQ0FBb0IsQ0FDcEUsR0FBTSxDQUFFLEtBQUEsQ0FBQUssQ0FBQUEsQ0FBTyxNQUFBLENBQUFDLENBQU8sQ0FBQSxDQUFJTixDQUFBQSxDQUMxQixPQUFPLENBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsd0JBQUEsRUFNaUJLLENBQUssQ0FBQSxZQUFBLEVBQWVDLENBQUFBLENBQVMsQ0FBQyxDQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxhQUFBLEVBS3pDRCxDQUFLLENBQUE7QUFBQSxjQUFBLEVBQ0pDLENBQU0sQ0FBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxXQUFBLEVBTVRBLENBQU0sQ0FBQTtBQUFBO0FBQUEsYUFBQSxFQUVKRCxDQUFLLENBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLDJCQUFBLEVBUVNELENBQVMsQ0FBQTtBQUFBLDRCQUFBLEVBQ1JDLENBQUssQ0FBQTtBQUFBO0FBQUE7QUFBQSxvQkFBQSxFQUdiQSxDQUFLLENBQUE7QUFBQSwyQkFBQSxFQUNFSixFQUF1QixDQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQTtBQUFBOztBQUFBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLE9BQUEsQ0E2RHBELENBRU8sU0FBU00sRUFBQUEsQ0FBWUMsQ0FBQUEsQ0FBZ0JSLEVBQWdDLENBQzFFLEdBQU0sQ0FBRSxLQUFBLENBQUFLLENBQUFBLENBQU8sT0FBQUMsQ0FBTyxDQUFBLENBQUlOLEVBQzFCLEdBQUlLLENBQUFBLENBQVFKLElBQTJCSyxDQUFBQSxDQUFTLENBQUEsQ0FDOUMsT0FHRixJQUFNRyxDQUFBQSxDQUFZSCxDQUFBQSxDQUFTLEVBRXZCSSxDQUFBQSxDQUFZLENBQUEsQ0FDaEIsUUFBU0MsQ0FBQUEsQ0FBSSxDQUFBLENBQUdBLEVBQUlWLEVBQUFBLENBQXlCVSxDQUFBQSxFQUFBQSxDQUFLLENBQ2hELElBQU1DLENBQUFBLENBQUFBLENBQVlILENBQUFBLENBQVlKLEVBQVFNLENBQUFBLEVBQUssQ0FBQSxDQUVyQ0UsR0FESUwsQ0FBQUEsQ0FBT0ksQ0FBUSxHQUFLLENBQUEsRUFDZCxHQUFBLENBQU0sQ0FBQSxDQUFJLENBQUEsQ0FDMUJGLENBQUFBLENBQWFBLENBQUFBLEVBQWEsRUFBS0csRUFDakMsQ0FJQSxHQUZBSCxDQUFBQSxDQUFZQSxDQUFBQSxHQUFjLEVBRXRCLEVBQUEsQ0FBQyxNQUFBLENBQU8sUUFBQSxDQUFTQSxDQUFTLENBQUEsRUFBS0EsQ0FBQUEsQ0FBWSxHQUFLQSxDQUFBQSxDQUFZLEdBQUEsQ0FBQSxDQUloRSxPQUFPQSxDQUNULENBRU8sU0FBU0ksRUFBQUEsQ0FBVzNCLENBQUFBLENBQWUsQ0FDeEMsT0FBT0csRUFBQUEsQ0FBT0gsQ0FBQUEsQ0FBSyx1QkFBdUIsQ0FDNUMsQ0FPQSxlQUFzQjRCLEVBQUFBLENBQVVDLENBQUFBLENBQWlCQyxFQUFpQyxDQUNoRixNQUFNM0IsRUFBQUEsQ0FBTzBCLENBQUFBLENBQUcsUUFBQSxDQUFVLENBQUEsbUJBQUEsRUFBc0JDLENBQVEsQ0FBQSxDQUFBLENBQUcsRUFDN0QsQ0FHQSxlQUFzQkMsRUFBQUEsQ0FBY0YsRUFBZ0MsQ0FDbEUsSUFBTUcsQ0FBQUEsQ0FBVSxJQUFJLE9BQUEsQ0FBU0MsQ0FBQUEsRUFBTUosRUFBRyxHQUFBLENBQUksSUFBQSxDQUFLZCxHQUFvQmtCLENBQUMsQ0FBQyxFQUNyRSxNQUFNaEQsQ0FBQUEsQ0FBWStDLENBQUFBLENBQVMsR0FBQSxDQUFPLFlBQVksRUFDaEQsQ0NoSkEsSUFBTUUsRUFBQUEsQ0FBYSxNQUNiQyxFQUFBQSxDQUFlLFdBQUEsQ0FHZkMsR0FBd0IsQ0FDNUIsUUFBQSxDQUFVLElBQUEsQ0FDVixNQUFBLENBQVEsSUFBQSxDQUVSLFNBQUEsQ0FBVyxLQUNYLGVBQUEsQ0FBaUIsSUFBQSxDQUNqQixZQUFhLElBQUEsQ0FDYixNQUFBLENBQVEsS0FDUixTQUFBLENBQVcsSUFDYixDQUFBLENBR0FDLGlCQUFBQSxDQUFTLDJCQUFBLENBQTRCLENBQ25DLENBQUUsTUFBQSxDQUFRSCxFQUFBQSxDQUFZLFdBQVlFLEVBQXNCLENBQUEsQ0FDeEQsQ0FBRSxNQUFBLENBQVFELEVBQUFBLENBQWMsVUFBQSxDQUFZQyxFQUFzQixDQUM1RCxDQUFDLEVBR00sU0FBU0UsRUFBQUEsRUFBeUIsQ0FDdkNELGlCQUFBQSxDQUFTLE1BQUEsQ0FBT0gsR0FBYUssQ0FBQUEsRUFBUSxDQUNuQyxJQUFNQyxDQUFBQSxDQUFNLElBQUksR0FBQSxDQUFJRCxFQUFJLEdBQUcsQ0FBQSxDQUNyQkUsRUFBTUQsQ0FBQUEsQ0FBSSxZQUFBLENBQWEsSUFBSSxLQUFLLENBQUEsRUFBSyxFQUFBLENBQ3JDdEIsQ0FBQUEsQ0FBUSxRQUFBLENBQVNzQixDQUFBQSxDQUFJLGFBQWEsR0FBQSxDQUFJLEdBQUcsR0FBSyxHQUFBLENBQUssRUFBRSxFQUNyRHJCLENBQUFBLENBQVMsUUFBQSxDQUFTcUIsQ0FBQUEsQ0FBSSxZQUFBLENBQWEsR0FBQSxDQUFJLEdBQUcsR0FBSyxHQUFBLENBQUssRUFBRSxFQUN0REUsQ0FBQUEsQ0FBTzFCLEVBQUFBLENBQWV5QixFQUFLLENBQUUsS0FBQSxDQUFBdkIsQ0FBQUEsQ0FBTyxNQUFBLENBQUFDLENBQU8sQ0FBQyxFQUNsRCxPQUFPLElBQUksU0FBU3VCLENBQUFBLENBQU0sQ0FBRSxRQUFTLENBQUUsY0FBQSxDQUFnQixXQUFZLENBQUUsQ0FBQyxDQUN4RSxDQUFDLEVBQ0gsQ0FFTyxTQUFTQyxFQUFBQSxDQUFlRixDQUFBQSxDQUFhNUIsRUFBb0IsQ0FDOUQsSUFBTTJCLENBQUFBLENBQU0sSUFBSSxHQUFBLENBQUksQ0FBQSxFQUFHTixFQUFVLENBQUEsUUFBQSxDQUFVLENBQUEsQ0FDM0MsT0FBQU0sQ0FBQUEsQ0FBSSxZQUFBLENBQWEsSUFBSSxLQUFBLENBQU9DLENBQUFBLENBQUksT0FBQSxDQUFRLFNBQUEsQ0FBVyxVQUFVLENBQUMsRUFDOURELENBQUFBLENBQUksWUFBQSxDQUFhLElBQUksR0FBQSxDQUFLLE1BQUEsQ0FBTzNCLEVBQUssS0FBSyxDQUFDLENBQUEsQ0FDNUMyQixDQUFBQSxDQUFJLFlBQUEsQ0FBYSxHQUFBLENBQUksSUFBSyxNQUFBLENBQU8zQixDQUFBQSxDQUFLLE1BQU0sQ0FBQyxDQUFBLENBQ3RDMkIsRUFBSSxRQUFBLEVBQ2IsQ0NyQ08sSUFBTUksRUFBQUEsQ0FBTixLQUF5QixDQU05QixXQUFBLENBQXFCQyxDQUFBQSxDQUF3QixDQUF4QixJQUFBLENBQUEsY0FBQSxDQUFBQSxFQUF5QixDQUF6QixjQUFBLENBTGIsT0FBQSxDQUFVLENBQUEsQ0FDVixPQUF1QixFQUFDLENBQ3hCLFNBQVcsSUFBSSxPQUFBLENBQ2YsU0FJUixJQUFJLE1BQUEsRUFBaUIsQ0FDbkIsT0FBTyxJQUFBLENBQUssT0FDZCxDQUVBLElBQUksT0FBQSxFQUFrQixDQUNwQixPQUFPLElBQUEsQ0FBSyxPQUFPLE1BQ3JCLENBRUEsSUFBSSxLQUFBLEVBQWdCLENBQ2xCLE9BQU8sV0FBVyxJQUFBLENBQUssTUFBTSxjQUFjLElBQUEsQ0FBSyxPQUFPLEVBQ3pELENBRUEsTUFBTSxRQUFBLENBQVk1RixDQUFBQSxDQUFzQmpCLENBQUFBLENBQWtDLENBQ3hFLE9BQUFBLENBQUFBLEVBQVEsY0FBQSxHQUVKQSxDQUFBQSxFQUFVLENBQUMsS0FBSyxRQUFBLENBQVMsR0FBQSxDQUFJQSxDQUFNLENBQUEsR0FDckMsSUFBQSxDQUFLLFFBQUEsQ0FBUyxJQUFJQSxDQUFNLENBQUEsQ0FDeEJBLEVBQU8sZ0JBQUEsQ0FBaUIsT0FBQSxDQUFTLElBQU0sSUFBQSxDQUFLLEtBQUEsQ0FBTUEsQ0FBTSxDQUFBLENBQUcsQ0FBRSxJQUFBLENBQU0sSUFBSyxDQUFDLENBQUEsQ0FBQSxDQUdwRSxJQUFJLE9BQUEsQ0FBVyxDQUFDUCxFQUFTQyxDQUFBQSxHQUFXLENBQ3pDLElBQUEsQ0FBSyxNQUFBLENBQU8sSUFBQSxDQUFLLENBQ2YsSUFBSyxJQUFNLENBQ1QsR0FBSU0sQ0FBQUEsRUFBUSxPQUFBLENBQVMsQ0FDbkJOLENBQUFBLENBQU9NLENBQUFBLENBQU8sTUFBTSxDQUFBLENBQ3BCLElBQUEsQ0FBSyxJQUFBLEdBQ0wsTUFDRixDQUNBLEtBQUssT0FBQSxFQUFBLENBQ0xpQixDQUFBQSxHQUNHLElBQUEsQ0FBTTZGLENBQUFBLEVBQU0sQ0FDWCxJQUFBLENBQUssT0FBQSxFQUFBLENBQ0xySCxDQUFBQSxDQUFRcUgsQ0FBQyxDQUFBLENBQ1QsSUFBQSxDQUFLLE9BQ1AsQ0FBQyxFQUNBLEtBQUEsQ0FBT2xFLENBQUFBLEVBQU0sQ0FDWixJQUFBLENBQUssT0FBQSxFQUFBLENBQ0xsRCxDQUFBQSxDQUFPa0QsQ0FBQyxDQUFBLENBQ1IsSUFBQSxDQUFLLE9BQ1AsQ0FBQyxFQUNMLENBQUEsQ0FDQSxNQUFBLENBQUFsRCxFQUNBLE1BQUEsQ0FBQU0sQ0FDRixDQUFDLENBQUEsQ0FDRCxJQUFBLENBQUssT0FDUCxDQUFDLENBQ0gsQ0FFQSxNQUFNLEtBQUEsRUFBdUIsQ0FDM0IsR0FBSSxFQUFBLElBQUEsQ0FBSyxVQUFZLENBQUEsRUFBSyxJQUFBLENBQUssVUFBWSxDQUFBLENBQUEsQ0FHM0MsT0FBTyxJQUFJLE9BQUEsQ0FBU2lHLENBQUFBLEVBQU8sSUFBQSxDQUFLLFFBQUEsQ0FBV0EsQ0FBRSxDQUMvQyxDQUVRLEtBQUEsQ0FBTWpHLENBQUFBLENBQXFCLENBQ2pDLElBQU0rRyxDQUFBQSxDQUFxQixFQUFDLENBQzVCLElBQUEsSUFBV0MsQ0FBQUEsSUFBUyxJQUFBLENBQUssTUFBQSxDQUNuQkEsQ0FBQUEsQ0FBTSxTQUFXaEgsQ0FBQUEsQ0FDbkJnSCxDQUFBQSxDQUFNLE9BQU9oSCxDQUFBQSxDQUFPLE1BQU0sRUFFMUIrRyxDQUFBQSxDQUFLLElBQUEsQ0FBS0MsQ0FBSyxDQUFBLENBR25CLElBQUEsQ0FBSyxNQUFBLENBQVNELEVBQ2QsSUFBQSxDQUFLLElBQUEsR0FDUCxDQUVRLElBQUEsRUFBTyxDQUNiLEdBQUksSUFBQSxDQUFLLE9BQUEsR0FBWSxDQUFBLEVBQUssSUFBQSxDQUFLLE9BQUEsR0FBWSxFQUFHLENBQzVDLElBQUEsQ0FBSyxZQUFXLENBQ2hCLElBQUEsQ0FBSyxTQUFXLE1BQUEsQ0FDaEIsTUFDRixDQUNJLElBQUEsQ0FBSyxPQUFBLENBQVUsSUFBQSxDQUFLLGdCQUN0QixJQUFBLENBQUssTUFBQSxDQUFPLE9BQU0sRUFBRyxHQUFBLEdBRXpCLENBQ0YsQ0FBQSxDQ3ZFTyxJQUFNRSxHQUF3QixZQUFBLENBZXJDLGVBQXNCQyxFQUFhdkUsQ0FBQUEsQ0FBdUJRLENBQUFBLENBQXNDLENBSTlGLElBQUFnRSxDQUFBQSxDQUFBLEVBQUEsQ0FBQSxHQUFBLENBSEEsSUFBTUMsQ0FBQUEsQ0FBTSxJQUFJQyxvQkFDaEJELENBQUFBLENBQUksYUFBQSxDQUFjekUsRUFBSyxLQUFLLENBQUEsQ0FFNUIsSUFBTTJFLENBQUFBLENBQVFDLENBQUFBLENBQUFKLENBQUFBLENBQUEsSUFBSSxlQUFBLENBQUEsQ0FDbEJHLENBQUFBLENBQU0sSUFBSUYsQ0FBRyxDQUFBLENBQ2JBLEVBQUksT0FBQSxDQUFVekUsQ0FBQUEsQ0FBSyxNQUFNLEVBQUEsQ0FDekJ5RSxDQUFBQSxDQUFJLEtBQUEsQ0FBUXpFLENBQUFBLENBQUssS0FBQSxDQUNqQnlFLENBQUFBLENBQUksT0FBU3pFLENBQUFBLENBQUssTUFBQSxDQUNsQnlFLEVBQUksV0FBQSxDQUFjekUsQ0FBQUEsQ0FBSyxZQUN2QnlFLENBQUFBLENBQUksUUFBQSxDQUFXLElBQUlJLGVBQUFBLENBQVMsQ0FBQSxDQUFHN0UsQ0FBQUEsQ0FBSyxHQUFHLENBQUEsQ0FDdkN5RSxDQUFBQSxDQUFJLFVBQVksSUFBSUksZUFBQUEsQ0FBUzdFLEVBQUssR0FBQSxDQUFLLENBQUMsQ0FBQSxDQUN4Q3lFLENBQUFBLENBQUksT0FBQSxDQUFVekUsQ0FBQUEsQ0FBSyxJQUFNLENBQUEsQ0FDekJ5RSxDQUFBQSxDQUFJLFFBQVUsTUFBQSxDQUFPekUsQ0FBQUEsQ0FBSyxPQUFPLENBQUEsQ0FDakN5RSxDQUFBQSxDQUFJLFFBQUEsQ0FBU0sscUNBQTJCLENBQUEsQ0FDcEM5RSxDQUFBQSxDQUFLLFdBQ1B5RSxDQUFBQSxDQUFJLFFBQUEsQ0FBV3pFLEVBQUssUUFBQSxDQUFBLENBRWxCQSxDQUFBQSxDQUFLLGFBQWUsS0FBQSxDQUFBLEdBQ3RCeUUsQ0FBQUEsQ0FBSSxVQUFBLENBQWF6RSxDQUFBQSxDQUFLLFVBQUEsQ0FBQSxDQUVwQkEsQ0FBQUEsQ0FBSyxjQUNQeUUsQ0FBQUEsQ0FBSSxXQUFBLENBQWN6RSxFQUFLLFdBQUEsQ0FBQSxDQUV6QixJQUFBLEdBQVcsQ0FBQytFLENBQUFBLENBQUdaLENBQUMsQ0FBQSxHQUFLLE1BQUEsQ0FBTyxPQUFBLENBQVFuRSxDQUFBQSxDQUFLLFNBQVcsRUFBRSxFQUNwRHlFLENBQUFBLENBQUksU0FBQSxDQUFVTSxFQUFHWixDQUFDLENBQUEsQ0FFcEJhLGtCQUFBQSxDQUFZLFlBQUEsQ0FBYSxNQUFNUCxDQUFBQSxDQUFJLE1BQU16RSxDQUFBQSxDQUFLLEtBQUEsQ0FBTyxJQUFJLENBQUEsQ0FBR1EsQ0FBSyxFQUNqRW1FLENBQUFBLENBQU0sSUFBQSxFQUFLLENBQ1gsT0FBT0YsQ0FBQUEsQ0FBQUEsTUF6QlAzQyxDQUFBQSxDQUFBLEtBQUFtRCxDQUFBQSxDQUFBbkQsQ0FBQUEsQ0FBQW9ELEVBQUEsS0FBQSxDQUFBLE9BQUEsQ0FBQUMsQ0FBQUEsQ0FBQVgsRUFBQVMsQ0FBQUEsQ0FBQUMsQ0FBQUEsRUFBQUEsQ0EwQkYsQ0FFTyxTQUFTRSxFQUFBQSxDQUFVN0MsQ0FBQUEsQ0FBZUMsRUFBZ0I2QyxDQUFBQSxDQUE4QixDQUlyRixJQUFBYixDQUFBQSxDQUFBLEVBQUEsQ0FBQSxHQUFBLENBSEEsSUFBTWMsQ0FBQUEsQ0FBUSxJQUFJQyxZQUFBQSxDQUNsQkQsQ0FBQUEsQ0FBTSxLQUFBLEVBQU0sQ0FFWixJQUFNWCxDQUFBQSxDQUFRQyxDQUFBQSxDQUFBSixFQUFBLElBQUksZUFBQSxDQUFBLENBQ2xCRyxFQUFNLEdBQUEsQ0FBSVcsQ0FBSyxDQUFBLENBQ2ZBLENBQUFBLENBQU0sTUFBQSxDQUFTRCxDQUFBQSxDQUNmQyxFQUFNLEtBQUEsQ0FBUS9DLENBQUFBLENBQ2QrQyxFQUFNLE1BQUEsQ0FBUzlDLENBQUFBLENBQ2Z3QyxtQkFBWSxZQUFBLENBQWFNLENBQUFBLENBQU0sU0FBQSxDQUFVLENBQUMsQ0FBQSxDQUFHLGlCQUFpQixFQUM5RFgsQ0FBQUEsQ0FBTSxJQUFBLEdBQ04sT0FBT1csQ0FBQUEsQ0FBQUEsTUFQUHhELEVBQUEsQ0FBQSxJQUFBbUQsQ0FBQUEsQ0FBQW5ELENBQUFBLENBQUFvRCxDQUFBQSxDQUFBLEtBQUEsQ0FBQSxPQUFBLENBQUFDLENBQUFBLENBQUFYLEVBQUFTLENBQUFBLENBQUFDLENBQUFBLEVBQUFBLENBUUYsQ0FFTyxTQUFTTSxDQUFBQSxFQUFxQixDQUNuQyxJQUFNQyxDQUFBQSxDQUFNLElBQUlDLGFBQUFBLENBQ2hCLE9BQUFELENBQUFBLENBQUksT0FBTSxDQUNIQSxDQUNULENBRUEsZUFBc0JFLEVBQUFBLENBQWFsQixFQUFtQmdCLENBQUFBLENBQWFHLENBQUFBLENBQWdCQyxDQUFBQSxDQUFtQyxDQUNwSCxPQUFhLENBQ1gsSUFBTXZDLENBQUFBLENBQUksTUFBTW1CLEVBQUksYUFBQSxDQUFjZ0IsQ0FBRyxFQUNyQyxHQUFJbkMsQ0FBQUEsR0FBTXdDLHdCQUFBQSxFQUFrQnhDLENBQUFBLEdBQU15QyxxQkFBQUEsQ0FDaEMsTUFFRixHQUFJLENBQ0ZmLGtCQUFBQSxDQUFZLGFBQWExQixDQUFBQSxDQUFHLGVBQWUsRUFDM0NtQyxDQUFBQSxDQUFJLFdBQUEsQ0FBY0csQ0FBQUEsQ0FBTyxLQUFBLENBQ3JCSCxDQUFBQSxDQUFJLFFBQUEsR0FBYSxLQUNuQkEsQ0FBQUEsQ0FBSSxRQUFBLENBQVcsSUFFakJBLENBQUFBLENBQUksU0FBQSxDQUFVaEIsRUFBSSxRQUFBLENBQVVtQixDQUFBQSxDQUFPLFFBQVEsQ0FBQSxDQUMzQyxNQUFNQyxDQUFBQSxDQUFNLFlBQVlKLENBQUcsRUFDN0IsUUFBRSxDQUNBQSxDQUFBQSxDQUFJLFFBQ04sQ0FDRixDQUNGLENDMUZPLElBQU1PLEVBQUFBLENBQU4sTUFBTUMsQ0FBaUMsQ0FDbkMsSUFDQSxHQUFBLENBQ0EsR0FBQSxDQUNELEtBQ0EsSUFBQSxDQUVSLGFBQWEsT0FBTzFELENBQUFBLENBQWVDLENBQUFBLENBQWdCLENBQ2pELElBQU0wRCxDQUFBQSxDQUFRQyxhQUFNLGlCQUFBLENBQWtCQyxxQkFBYyxFQUNwRCxPQUFBQyxTQUFBQSxDQUFHSCxDQUFBQSxDQUFPLHlCQUF5QixDQUFBLENBQzVCLElBQUlELEVBQVcxRCxDQUFBQSxDQUFPQyxDQUFBQSxDQUFRMEQsQ0FBSyxDQUM1QyxDQUVRLFlBQVkzRCxDQUFBQSxDQUFlQyxDQUFBQSxDQUFnQjhELENBQUFBLENBQVksQ0FDN0QsSUFBQSxDQUFLLElBQUEsQ0FBT0EsRUFDWixJQUFBLENBQUssR0FBQSxDQUFNbEIsR0FBVTdDLENBQUFBLENBQU9DLENBQUFBLENBQVErRCxzQkFBZSxDQUFBLENBQ25ELElBQUEsQ0FBSyxHQUFBLENBQU1uQixFQUFBQSxDQUFVN0MsQ0FBQUEsQ0FBT0MsQ0FBQUEsQ0FBUWdFLDBCQUFtQixDQUFBLENBQ3ZELElBQUEsQ0FBSyxJQUFNaEIsQ0FBQUEsR0FDYixDQU9BLE1BQU0sR0FBQSxFQUE2QixDQUVqQyxJQUFBaEIsQ0FBQUEsQ0FBQSxFQUFBLENBQUEsR0FBQSxDQUFBLElBQU1HLEVBQVFDLENBQUFBLENBQUFKLENBQUFBLENBQUEsSUFBSSxlQUFBLENBQUEsQ0FDbEIsSUFBTThCLEVBQU0sSUFBSTVCLG1CQUFBQSxDQUNoQjRCLENBQUFBLENBQUksYUFBQSxDQUFjLElBQUEsQ0FBSyxJQUFJLEVBQzNCM0IsQ0FBQUEsQ0FBTSxHQUFBLENBQUkyQixDQUFHLENBQUEsQ0FDYnRCLGtCQUFBQSxDQUFZLGFBQWEsTUFBTXNCLENBQUFBLENBQUksS0FBQSxDQUFNLElBQUEsQ0FBSyxJQUFJLENBQUEsQ0FBRyxrQkFBa0IsQ0FBQSxDQUN2RTNCLENBQUFBLENBQU0sTUFBSyxDQUNYLE9BQU8yQixRQU5QeEUsQ0FBQUEsQ0FBQSxDQUFBLElBQUFtRCxDQUFBQSxDQUFBbkQsQ0FBQUEsQ0FBQW9ELENBQUFBLENBQUEsS0FBQSxDQUFBLE9BQUEsQ0FBQUMsRUFBQVgsQ0FBQUEsQ0FBQVMsQ0FBQUEsQ0FBQUMsSUFPRixDQUVBLE1BQU0sVUFBVXVCLENBQUFBLENBQWlDLENBQy9DLElBQUFqQyxDQUFBQSxDQUFBLEVBQUEsQ0FBQSxHQUFBLENBQUEsSUFBTThCLENBQUFBLENBQU0xQixFQUFBSixDQUFBQSxDQUFBLE1BQU0sS0FBSyxHQUFBLEVBQUksQ0FBQSxDQUMzQixLQUFLLEdBQUEsQ0FBSSxJQUFBLENBQU9pQyxDQUFBQSxDQUNoQnpCLGtCQUFBQSxDQUFZLFlBQUEsQ0FBYSxNQUFNc0IsRUFBSSxVQUFBLENBQVcsSUFBQSxDQUFLLEdBQUcsQ0FBQSxDQUFHLHVCQUF1QixFQUNoRixJQUFBLENBQUssR0FBQSxDQUFJLEtBQUEsRUFBTSxDQUNmdEIsa0JBQUFBLENBQVksWUFBQSxDQUFhLE1BQU1zQixDQUFBQSxDQUFJLFlBQUEsQ0FBYSxLQUFLLEdBQUcsQ0FBQSxDQUFHLHlCQUF5QixDQUFBLENBQ3BGLE9BQU8sSUFBQSxDQUFLLEdBQUEsQ0FBQSxNQUxaeEUsQ0FBQUEsQ0FBQSxDQUFBLElBQUFtRCxFQUFBbkQsQ0FBQUEsQ0FBQW9ELENBQUFBLENBQUEsY0FBQUMsQ0FBQUEsQ0FBQVgsQ0FBQUEsQ0FBQVMsRUFBQUMsQ0FBQUEsRUFBQUEsQ0FNRixDQUVBLElBQUksR0FBQSxFQUFNLENBQ1IsR0FBSSxDQUFDLElBQUEsQ0FBSyxJQUFBLENBQU0sQ0FDZCxJQUFNd0IsQ0FBQUEsQ0FBTSxJQUFJQywyQkFBQUEsQ0FDVkMsQ0FBQUEsQ0FBTSxJQUFBLENBQUssR0FBQSxDQUFJLE1BQUEsQ0FDckJGLENBQUFBLENBQUksV0FDRixJQUFBLENBQUssR0FBQSxDQUFJLE1BQ1QsSUFBQSxDQUFLLEdBQUEsQ0FBSSxPQUNURSxDQUFBQSxDQUNBLElBQUEsQ0FBSyxHQUFBLENBQUksS0FBQSxDQUNULElBQUEsQ0FBSyxHQUFBLENBQUksT0FDVEosMEJBQUFBLENBQ0FLLG1CQUNGLEVBQ0EsSUFBQSxDQUFLLElBQUEsQ0FBT0gsRUFDZCxDQUNBLE9BQU8sSUFBQSxDQUFLLElBQ2QsQ0FFQSxDQUFDLE9BQU8sT0FBTyxDQUFBLEVBQVUsQ0FDdkIsSUFBQSxDQUFLLEdBQUEsQ0FBSSxPQUFPLE9BQU8sQ0FBQSxFQUFFLENBQ3pCLElBQUEsQ0FBSyxHQUFBLENBQUksTUFBQSxDQUFPLE9BQU8sQ0FBQSxFQUFFLENBQ3pCLEtBQUssR0FBQSxDQUFJLE1BQUEsQ0FBTyxPQUFPLENBQUEsRUFBRSxDQUN6QixJQUFBLENBQUssSUFBQSxHQUFPLE1BQUEsQ0FBTyxPQUFPLElBQzVCLENBQ0YsRUM1REEsSUFBTUksRUFBQUEsQ0FBbUQsQ0FBRSxDQUFDQywyQkFBaUIsRUFBRyxLQUFBLENBQU8sQ0FBQ0MsNEJBQWtCLEVBQUcsTUFBTyxDQUFBLENBV3ZHQyxHQUFOLE1BQU1DLENBQW1DLENBQ3RDLElBQUEsQ0FDQSxPQUFBLENBQ0EsS0FDQSxRQUFBLENBQ0EsT0FBQSxDQUNBLFVBQUEsQ0FDQSxZQUFBLENBQ0EsTUFBQSxDQUNBLE9BQUEsQ0FDQSxTQUNBLE9BQUEsQ0FDQSxJQUFBLENBQU8sR0FFUCxXQUFBLENBQVl6QyxDQUFBQSxDQUFtQm1CLEVBQWdCdUIsQ0FBQUEsQ0FBOEQsQ0FDbkgsSUFBQSxDQUFLLElBQUEsQ0FBTzFDLENBQUFBLENBQ1osSUFBQSxDQUFLLFFBQVVtQixDQUFBQSxDQUNmLElBQUEsQ0FBSyxTQUFXbkIsQ0FBQUEsQ0FBSSxVQUFBLENBQ3BCLEtBQUssT0FBQSxDQUFVMEMsQ0FBQUEsQ0FDZixJQUFBLENBQUssVUFBQSxDQUFhMUMsQ0FBQUEsQ0FBSSxTQUFBLENBQ3RCLEtBQUssSUFBQSxDQUFPZSxDQUFBQSxHQUNaLElBQUEsQ0FBSyxZQUFBLENBQWUsSUFBSUQsWUFBQUEsQ0FDeEIsSUFBQSxDQUFLLFlBQUEsQ0FBYSxLQUFBLEdBQ3BCLENBRUEsYUFBYSxNQUFBLENBQU92RixDQUFBQSxDQUFrRCxDQU1wRSxJQUFBd0UsQ0FBQUEsQ0FBQSxPQUxBLElBQU0wQixDQUFBQSxDQUFRQyxZQUFBQSxDQUFNLGlCQUFBLENBQWtCbkcsQ0FBQUEsQ0FBSyxTQUFTLEVBQ3BELEdBQUksQ0FBQ2tHLEVBQ0gsTUFBTSxJQUFJLE1BQU0sQ0FBQSx5QkFBQSxFQUE0QmxHLENBQUFBLENBQUssU0FBUyxDQUFBLENBQUUsQ0FBQSxDQUc5RCxJQUFNMkUsRUFBUUMsQ0FBQUEsQ0FBQUosQ0FBQUEsQ0FBQSxJQUFJLGVBQUEsQ0FBQSxDQUNsQixJQUFNQyxFQUFNLElBQUlDLG1CQUFBQSxDQUNoQkQsQ0FBQUEsQ0FBSSxhQUFBLENBQWN5QixDQUFLLENBQUEsQ0FDdkJ2QixFQUFNLEdBQUEsQ0FBSUYsQ0FBRyxFQUNiQSxDQUFBQSxDQUFJLE9BQUEsQ0FBVXlCLEVBQU0sRUFBQSxDQUNwQnpCLENBQUFBLENBQUksWUFBQSxDQUFlekUsQ0FBQUEsQ0FBSyxZQUFBLENBQ3hCeUUsQ0FBQUEsQ0FBSSxXQUFhekUsQ0FBQUEsQ0FBSyxhQUFBLENBQ3RCeUUsRUFBSSxhQUFBLENBQWdCMkMsa0NBQUFBLENBQ3BCM0MsRUFBSSxRQUFBLENBQVcsSUFBSUksZ0JBQVMsQ0FBQSxDQUFHN0UsQ0FBQUEsQ0FBSyxhQUFhLENBQUEsQ0FDakR5RSxDQUFBQSxDQUFJLFFBQVUsTUFBQSxDQUFPekUsQ0FBQUEsQ0FBSyxPQUFPLENBQUEsQ0FDN0JBLENBQUFBLENBQUssWUFBQSxFQUNQeUUsQ0FBQUEsQ0FBSSxRQUFBLENBQVNLLHFDQUEyQixFQUUxQ0Usa0JBQUFBLENBQVksWUFBQSxDQUFhLE1BQU1QLENBQUFBLENBQUksS0FBQSxDQUFNeUIsRUFBTyxJQUFJLENBQUEsQ0FBRyxnQkFBZ0IsQ0FBQSxDQUN2RSxJQUFNTixDQUFBQSxDQUFTNUYsRUFBSyxLQUFBLENBQU0sU0FBQSxDQUFVeUUsQ0FBRyxDQUFBLENBQ3ZDRSxDQUFBQSxDQUFNLE1BQUssQ0FDWCxPQUFPLElBQUl1QyxDQUFBQSxDQUFhekMsQ0FBQUEsQ0FBS21CLENBQUFBLENBQVE1RixFQUFLLFlBQVksQ0FBQSxDQUFBLE1BaEJ0RDhCLEVBQUEsQ0FBQSxJQUFBbUQsQ0FBQUEsQ0FBQW5ELEVBQUFvRCxDQUFBQSxDQUFBLEtBQUEsQ0FBQSxPQUFBLENBQUFDLENBQUFBLENBQUFYLENBQUFBLENBQUFTLENBQUFBLENBQUFDLENBQUFBLEVBQUFBLENBaUJGLENBRUEsWUFBQSxDQUFhbUMsQ0FBQUEsQ0FBNEIsQ0FJdkMsSUFBQTdDLENBQUFBLENBQUEsT0FIQSxJQUFBLENBQUssTUFBQSxHQUFTLE1BQUEsQ0FBTyxPQUFPLENBQUEsRUFBRSxDQUM5QixLQUFLLE9BQUEsQ0FBVTZDLENBQUFBLENBRWYsSUFBTTFDLENBQUFBLENBQVFDLENBQUFBLENBQUFKLEVBQUEsSUFBSSxlQUFBLENBQUEsQ0FDbEIsSUFBTThDLENBQUFBLENBQVEsSUFBSUMsa0JBQUFBLENBQ2xCRCxFQUFNLEtBQUEsRUFBTSxDQUNaM0MsRUFBTSxHQUFBLENBQUkyQyxDQUFLLEVBQ2YsSUFBTUUsQ0FBQUEsQ0FBVUMsYUFBQUEsQ0FBTyxTQUFBLENBQVUsU0FBUyxDQUFBLENBQzFDLElBQU1DLENBQUFBLENBQVNKLENBQUFBLENBQU0sYUFDbkJFLENBQUFBLENBQ0EsS0FBQSxDQUNBLGVBQWVILENBQVksQ0FBQSxrREFBQSxFQUFxREEsQ0FBWSxDQUFBLENBQzlGLENBQUEsQ0FDQSxHQUFJLENBQUNLLENBQUFBLENBQ0gsTUFBTSxJQUFJLEtBQUEsQ0FBTSwwQkFBMEIsRUFFNUMsSUFBTUMsQ0FBQUEsQ0FBY0YsYUFBQUEsQ0FBTyxTQUFBLENBQVUsYUFBYSxDQUFBLENBQ2xELElBQU1HLENBQUFBLENBQVVOLENBQUFBLENBQU0sYUFBYUssQ0FBQUEsQ0FBYSxNQUFNLEVBQ3RELEdBQUksQ0FBQ0MsQ0FBQUEsQ0FDSCxNQUFNLElBQUksS0FBQSxDQUFNLDhCQUE4QixDQUFBLENBRWhELElBQU1DLEVBQVVmLEVBQUFBLENBQWdCLElBQUEsQ0FBSyxPQUFPLENBQUEsRUFBSyxLQUFBLENBQ2pELElBQU1nQixDQUFBQSxDQUFhLENBQUEsb0JBQUEsRUFBdUJELENBQU8saUJBQWlCLElBQUEsQ0FBSyxRQUFRLDBDQUEwQyxJQUFBLENBQUssVUFBVSxPQUN4SSxJQUFNRSxDQUFBQSxDQUFVQyxrQkFBQUEsQ0FBWSxVQUFBLENBQVcsQ0FBQyxDQUFFLEtBQU0sSUFBQSxDQUFNLFNBQUEsQ0FBV04sRUFBUSxNQUFBLENBQVEsQ0FBRSxDQUFDLENBQUMsQ0FBQSxDQUNyRixJQUFNTyxDQUFBQSxDQUFTRCxrQkFBQUEsQ0FBWSxVQUFBLENBQVcsQ0FBQyxDQUFFLElBQUEsQ0FBTSxNQUFPLFNBQUEsQ0FBV0osQ0FBQUEsQ0FBUyxPQUFRLENBQUUsQ0FBQyxDQUFDLENBQUEsQ0FDdEY1QyxrQkFBQUEsQ0FBWSxZQUFBLENBQWFzQyxFQUFNLFFBQUEsQ0FBU1EsQ0FBQUEsQ0FBWUcsRUFBUUYsQ0FBTyxDQUFBLENBQUcsZ0JBQWdCLENBQUEsQ0FDdEYvQyxrQkFBQUEsQ0FBWSxZQUFBLENBQWFzQyxDQUFBQSxDQUFNLFVBQUEsRUFBVyxDQUFHLGNBQWMsQ0FBQSxDQUMzRDNDLENBQUFBLENBQU0sTUFBSyxDQUNYLElBQUEsQ0FBSyxPQUFTMkMsQ0FBQUEsQ0FDZCxJQUFBLENBQUssT0FBQSxDQUFVSSxDQUFBQSxDQUNmLElBQUEsQ0FBSyxRQUFBLENBQVdFLFNBM0JoQjlGLENBQUFBLENBQUEsQ0FBQSxJQUFBbUQsRUFBQW5ELENBQUFBLENBQUFvRCxDQUFBQSxDQUFBLGNBQUFDLENBQUFBLENBQUFYLENBQUFBLENBQUFTLENBQUFBLENBQUFDLENBQUFBLEVBQUFBLENBNEJGLENBRUEsTUFBTSxPQUFPZ0QsQ0FBQUEsQ0FBYXJDLENBQUFBLENBQW1DLENBVzNELElBQUFyQixDQUFBQSxDQUFBLE9BVkEsR0FBSSxDQUFDLElBQUEsQ0FBSyxPQUFBLEVBQVcsQ0FBQyxJQUFBLENBQUssUUFDekIsT0FFRixJQUFNVixFQUFNLElBQUksWUFBQSxDQUFhb0UsRUFBSSxNQUFBLENBQVFBLENBQUFBLENBQUksVUFBQSxDQUFZQSxDQUFBQSxDQUFJLFVBQUEsQ0FBYSxDQUFDLEVBQzNFLElBQUEsSUFBU3JGLENBQUFBLENBQUksRUFBR0EsQ0FBQUEsQ0FBSWlCLENBQUFBLENBQUksT0FBUWpCLENBQUFBLEVBQUFBLENBQ3pCLE1BQUEsQ0FBTyxRQUFBLENBQVNpQixDQUFBQSxDQUFJakIsQ0FBQyxDQUFFLElBQzFCaUIsQ0FBQUEsQ0FBSWpCLENBQUMsRUFBSSxDQUFBLENBQUEsQ0FHYixJQUFNc0YsRUFBV3JFLENBQUFBLENBQUksTUFBQSxFQUFVLENBQUEsQ0FDL0IsSUFBTXdCLENBQUFBLENBQVFWLENBQUFBLENBQUFKLEVBQUFlLFlBQUFBLENBQU0sZUFBQSxDQUFnQixPQUFPLElBQUEsQ0FBS3pCLENBQUFBLENBQUksT0FBUUEsQ0FBQUEsQ0FBSSxVQUFBLENBQVlBLENBQUFBLENBQUksVUFBVSxDQUFBLENBQUcsQ0FDM0YsVUFBV3FFLENBQUFBLENBQ1gsTUFBQSxDQUFRcEIsNEJBQ1IsVUFBQSxDQUFZLElBQUEsQ0FBSyxRQUNqQixhQUFBLENBQWVLLGtDQUFBQSxDQUNmLEdBQUEsQ0FBSyxJQUFBLENBQUssSUFBQSxDQUNWLFFBQUEsQ0FBVSxDQUFFLEdBQUEsQ0FBSyxDQUFBLENBQUcsSUFBSyxJQUFBLENBQUssT0FBUSxDQUN4QyxDQUFDLENBQUEsQ0FBQSxDQUNELElBQUEsQ0FBSyxJQUFBLEVBQVEsTUFBQSxDQUFPZSxDQUFRLEVBQzVCbkQsa0JBQUFBLENBQVksWUFBQSxDQUFhLE1BQU0sSUFBQSxDQUFLLE9BQUEsQ0FBUSxrQkFBa0JNLENBQUssQ0FBQSxDQUFHLG1CQUFtQixDQUFBLENBQ3pGLE1BQU0sSUFBQSxDQUFLLE1BQU1PLENBQUssRUFBQSxDQUFBLE1BVnRCL0QsRUFBQSxDQUFBLElBQUFtRCxDQUFBQSxDQUFBbkQsRUFBQW9ELENBQUFBLENBQUEsS0FBQSxDQUFBLE9BQUEsQ0FBQUMsQ0FBQUEsQ0FBQVgsQ0FBQUEsQ0FBQVMsQ0FBQUEsQ0FBQUMsQ0FBQUEsRUFBQUEsQ0FXRixDQUVBLE1BQU0sS0FBQSxDQUFNVyxFQUFtQyxDQUN6QyxJQUFBLENBQUssVUFDUCxNQUFNLElBQUEsQ0FBSyxPQUFBLENBQVEsaUJBQUEsQ0FBa0IsSUFBSSxDQUFBLENBQ3pDLE1BQU0sSUFBQSxDQUFLLEtBQUEsQ0FBTUEsQ0FBSyxDQUFBLENBQUEsQ0FFeEIsTUFBTSxLQUFLLElBQUEsQ0FBSyxTQUFBLENBQVUsSUFBSSxDQUFBLENBQzlCLE1BQU0sSUFBQSxDQUFLLFdBQVdBLENBQUssRUFDN0IsQ0FFQSxDQUFDLE1BQUEsQ0FBTyxPQUFPLENBQUEsRUFBVSxDQUN2QixJQUFBLENBQUssSUFBQSxDQUFLLElBQUEsRUFBSyxDQUNmLEtBQUssWUFBQSxDQUFhLElBQUEsR0FDbEIsSUFBQSxDQUFLLE1BQUEsR0FBUyxPQUFPLE9BQU8sQ0FBQSxFQUFFLENBQzlCLElBQUEsQ0FBSyxJQUFBLENBQUssV0FBQSxHQUNaLENBRUEsTUFBYyxNQUFNQSxDQUFBQSxDQUFtQyxDQUNyRCxPQUFhLENBQ1gsSUFBTXZDLENBQUFBLENBQUksTUFBTSxJQUFBLENBQUssUUFBQSxDQUFVLG1CQUFtQixJQUFBLENBQUssWUFBWSxFQUNuRSxHQUFJQSxDQUFBQSxHQUFNd0MsMEJBQWtCeEMsQ0FBQUEsR0FBTXlDLHFCQUFBQSxDQUNoQyxNQUVGLEdBQUksQ0FDRmYsbUJBQVksWUFBQSxDQUFhMUIsQ0FBQUEsQ0FBRyxvQkFBb0IsQ0FBQSxDQUNoRDBCLGtCQUFBQSxDQUFZLGFBQWEsTUFBTSxJQUFBLENBQUssSUFBQSxDQUFLLFNBQUEsQ0FBVSxJQUFBLENBQUssWUFBWSxFQUFHLG9CQUFvQixDQUFBLENBQzNGLE1BQU0sSUFBQSxDQUFLLFVBQUEsQ0FBV2EsQ0FBSyxFQUM3QixDQUFBLE9BQUUsQ0FDQSxJQUFBLENBQUssWUFBQSxDQUFhLEtBQUEsR0FDcEIsQ0FDRixDQUNGLENBRVEsVUFBQSxDQUFXQSxDQUFBQSxDQUFtQyxDQUNwRCxPQUFPRixFQUFBQSxDQUFhLElBQUEsQ0FBSyxJQUFBLENBQU0sSUFBQSxDQUFLLElBQUEsQ0FBTSxLQUFLLE9BQUEsQ0FBU0UsQ0FBSyxDQUMvRCxDQUNGLENBQUEsQ0NuTE8sU0FBU3VDLENBQUFBLENBQVNDLEVBQXdCLENBQy9DLElBQU1DLEVBQU0sTUFBQSxDQUFPLEtBQUEsQ0FBTUQsRUFBSyxNQUFBLEVBQVUsQ0FBQyxDQUFBLENBQ3pDLElBQUEsSUFBU3hGLENBQUFBLENBQUksQ0FBQSxDQUFHQSxFQUFJeUYsQ0FBQUEsQ0FBSSxNQUFBLENBQVF6RixJQUFLLENBQ25DLElBQUkwRixFQUFPLENBQUEsQ0FDWCxJQUFBLElBQVNDLENBQUFBLENBQUksQ0FBQSxDQUFHQSxDQUFBQSxDQUFJLENBQUEsQ0FBR0EsSUFDckJELENBQUFBLENBQVFBLENBQUFBLEVBQVEsRUFBS0YsQ0FBQUEsQ0FBS3hGLENBQUFBLENBQUksRUFBSTJGLENBQUMsQ0FBQSxDQUVyQ0YsQ0FBQUEsQ0FBSXpGLENBQUMsQ0FBQSxDQUFJMEYsRUFDWCxDQUNBLE9BQU9ELENBQ1QsQ0FFTyxJQUFNRyxDQUFBQSxDQUFOLEtBQWdCLENBQ3JCLElBQUEsQ0FBaUIsRUFBQyxDQUNsQixDQUFBLENBQUVDLENBQUFBLENBQWFDLEVBQVcsQ0FDeEIsSUFBQSxJQUFTOUYsRUFBSThGLENBQUFBLENBQUksQ0FBQSxDQUFHOUYsR0FBSyxDQUFBLENBQUdBLENBQUFBLEVBQUFBLENBQzFCLElBQUEsQ0FBSyxJQUFBLENBQUssSUFBQSxDQUFNNkYsQ0FBQUEsRUFBTzdGLEVBQUssQ0FBQyxFQUVqQyxDQUNBLElBQUEsQ0FBSzZGLENBQUFBLENBQXVCLENBQzFCLElBQUEsQ0FBSyxJQUFBLENBQUssSUFBQSxDQUFLQSxDQUFBQSxDQUFNLENBQUEsQ0FBSSxDQUFDLEVBQzVCLENBQ0EsRUFBQSxDQUFHQSxFQUFhLENBQ2QsSUFBTXZFLEVBQUl1RSxDQUFBQSxDQUFNLENBQUEsQ0FDVkUsQ0FBQUEsQ0FBTSxFQUFBLENBQUssSUFBQSxDQUFLLEtBQUEsQ0FBTXpFLENBQUMsQ0FBQSxDQUM3QixJQUFBLElBQVN0QixFQUFJLENBQUEsQ0FBR0EsQ0FBQUEsQ0FBSStGLEVBQU0sQ0FBQSxDQUFHL0YsQ0FBQUEsRUFBQUEsQ0FDM0IsSUFBQSxDQUFLLElBQUEsQ0FBSyxJQUFBLENBQUssQ0FBQyxFQUVsQixJQUFBLElBQVNBLENBQUFBLENBQUkrRixFQUFNLENBQUEsQ0FBRy9GLENBQUFBLEVBQUssRUFBR0EsQ0FBQUEsRUFBQUEsQ0FDNUIsSUFBQSxDQUFLLElBQUEsQ0FBSyxJQUFBLENBQU1zQixDQUFBQSxFQUFLdEIsQ0FBQUEsQ0FBSyxDQUFDLEVBRS9CLENBQ0EsTUFBTWdHLENBQUFBLENBQWEsQ0FDakIsS0FBTyxJQUFBLENBQUssSUFBQSxDQUFLLE1BQUEsQ0FBUyxDQUFBLEdBQU0sQ0FBQSxFQUM5QixJQUFBLENBQUssS0FBSyxJQUFBLENBQUtBLENBQUcsRUFFdEIsQ0FDQSxJQUFBLENBQUsvRSxFQUFlZ0YsQ0FBQUEsQ0FBZUYsQ0FBQUEsQ0FBYSxDQUM5QyxJQUFBLElBQVMvRixDQUFBQSxDQUFJLENBQUEsQ0FBR0EsRUFBSStGLENBQUFBLENBQUsvRixDQUFBQSxFQUFBQSxDQUN2QixLQUFLLElBQUEsQ0FBSyxJQUFBLENBQUtpQixFQUFJZ0YsQ0FBQUEsQ0FBUWpHLENBQUMsQ0FBRSxFQUVsQyxDQUNGLENBQUEsQ0FFYWtHLEVBQU4sS0FBZ0IsQ0FDYixNQUNSLEdBQUEsQ0FBTSxDQUFBLENBQ04sWUFBWTdMLENBQUFBLENBQWMsQ0FDeEIsSUFBQSxDQUFLLEtBQUEsQ0FBUSxFQUFDLENBQ2QsUUFBUzJGLENBQUFBLENBQUksQ0FBQSxDQUFHQSxFQUFJM0YsQ0FBQUEsQ0FBSyxNQUFBLENBQVEyRixJQUMvQixJQUFBLElBQVMyRixDQUFBQSxDQUFJLENBQUEsQ0FBR0EsQ0FBQUEsRUFBSyxDQUFBLENBQUdBLENBQUFBLEVBQUFBLENBQ3RCLEtBQUssS0FBQSxDQUFNLElBQUEsQ0FBTXRMLEVBQUsyRixDQUFDLENBQUEsRUFBTTJGLEVBQUssQ0FBQyxFQUd6QyxDQUNBLElBQUksSUFBQSxFQUFPLENBQ1QsT0FBTyxJQUFBLENBQUssS0FDZCxDQUNBLElBQUEsQ0FBS0csQ0FBQUEsQ0FBbUIsQ0FDdEIsSUFBSUQsQ0FBQUEsQ0FBTSxDQUFBLENBQ1YsSUFBQSxJQUFTN0YsQ0FBQUEsQ0FBSSxDQUFBLENBQUdBLEVBQUk4RixDQUFBQSxDQUFHOUYsQ0FBQUEsRUFBQUEsQ0FDckI2RixFQUFPQSxDQUFBQSxFQUFPLENBQUEsQ0FBSyxLQUFLLEtBQUEsQ0FBTSxJQUFBLENBQUssR0FBQSxFQUFLLENBQUEsQ0FFMUMsT0FBT0EsQ0FDVCxDQUNBLE1BQUEsRUFBaUIsQ0FDZixJQUFJTSxDQUFBQSxDQUFRLENBQUEsQ0FDWixLQUFPLElBQUEsQ0FBSyxLQUFBLENBQU0sSUFBQSxDQUFLLEdBQUcsQ0FBQSxHQUFNLENBQUEsRUFDOUJBLElBQ0EsSUFBQSxDQUFLLEdBQUEsRUFBQSxDQUVQLEtBQUssR0FBQSxFQUFBLENBQ0wsSUFBSU4sRUFBTSxDQUFBLENBQ1YsSUFBQSxJQUFTN0YsQ0FBQUEsQ0FBSSxDQUFBLENBQUdBLENBQUFBLENBQUltRyxDQUFBQSxDQUFPbkcsSUFDekI2RixDQUFBQSxDQUFPQSxDQUFBQSxFQUFPLEVBQUssSUFBQSxDQUFLLEtBQUEsQ0FBTSxLQUFLLEdBQUEsRUFBSyxDQUFBLENBRTFDLE9BQU9BLENBQUFBLENBQU0sQ0FDZixDQUNGLEVDN0VBLElBQU1PLENBQUFBLENBQXFCLE9BQU8sSUFBQSxDQUFLLENBQUMsRUFBTSxDQUFBLENBQU0sQ0FBQSxDQUFNLENBQUksQ0FBQyxDQUFBLENBS3hELElBQU1DLEdBQWUsRUFBQSxDQUdyQixJQUFNQyxHQUFxQixFQUFBLENBQ3JCQyxFQUFBQSxDQUFVLEdBQ1ZDLEVBQUFBLENBQVUsRUFBQSxDQUNWQyxFQUFBQSxDQUFVLEVBQUEsQ0FDVkMsRUFBQUEsQ0FBaUIsRUFBQSxDQVM5QixTQUFTQyxFQUFBQSxDQUFhQyxDQUFBQSxDQUFpQkMsRUFBd0UsQ0FDN0csSUFBTUMsRUFBUUYsQ0FBQUEsRUFBVyxDQUFBLENBQUssRUFBQSxDQUN4QkcsQ0FBQUEsQ0FBQUEsQ0FBWUgsQ0FBQUEsQ0FBVSxDQUFBLEdBQU0sRUFBT0MsQ0FBQUEsRUFBVyxDQUFBLENBQUssR0FDbkRHLENBQUFBLENBQWFILENBQUFBLENBQVUsRUFDN0IsT0FBTyxDQUFFLElBQUEsQ0FBQUMsQ0FBQUEsQ0FBTSxPQUFBLENBQUFDLENBQUFBLENBQVMsV0FBQUMsQ0FBVyxDQUNyQyxDQUVPLFNBQVNDLEVBQUFBLENBQWdCSCxFQUFjQyxDQUFBQSxDQUFpQkMsQ0FBQUEsQ0FBc0MsQ0FDbkcsSUFBTUUsQ0FBQUEsQ0FBQUEsQ0FBVUosQ0FBQUEsQ0FBTyxLQUFTLENBQUEsQ0FBT0MsQ0FBQUEsRUFBVyxFQUFLLENBQUEsQ0FDakRJLENBQUFBLENBQUFBLENBQVVKLEVBQVUsRUFBQSxHQUFTLENBQUEsQ0FBTUMsQ0FBQUEsQ0FBYSxDQUFBLENBQ3RELE9BQU8sQ0FBQ0UsRUFBT0MsQ0FBSyxDQUN0QixDQUdPLFNBQVNDLENBQUFBLENBQWNDLEVBQThCLENBQzFELElBQU1DLEVBQWtCLEVBQUMsQ0FDckJ0SCxFQUFJLENBQUEsQ0FFUixLQUFPQSxFQUFJcUgsQ0FBQUEsQ0FBVSxNQUFBLEVBQVEsQ0FDM0IsSUFBSUUsQ0FBQUEsQ0FBUSxDQUFBLENBQ1osR0FBSXZILENBQUFBLENBQUksQ0FBQSxDQUFJcUgsRUFBVSxNQUFBLEVBQVVBLENBQUFBLENBQVVySCxDQUFDLENBQUEsR0FBTSxDQUFBLEVBQUtxSCxFQUFVckgsQ0FBQUEsQ0FBSSxDQUFDLENBQUEsR0FBTSxDQUFBLEVBQUtxSCxDQUFBQSxDQUFVckgsQ0FBQUEsQ0FBSSxDQUFDLENBQUEsR0FBTSxDQUFBLENBQ25HdUgsRUFBUSxDQUFBLENBQUEsS0FBQSxHQUVSdkgsQ0FBQUEsQ0FBSSxFQUFJcUgsQ0FBQUEsQ0FBVSxNQUFBLEVBQ2xCQSxDQUFBQSxDQUFVckgsQ0FBQyxDQUFBLEdBQU0sQ0FBQSxFQUNqQnFILEVBQVVySCxDQUFBQSxDQUFJLENBQUMsSUFBTSxDQUFBLEVBQ3JCcUgsQ0FBQUEsQ0FBVXJILEVBQUksQ0FBQyxDQUFBLEdBQU0sQ0FBQSxFQUNyQnFILENBQUFBLENBQVVySCxDQUFBQSxDQUFJLENBQUMsSUFBTSxDQUFBLENBRXJCdUgsQ0FBQUEsQ0FBUSxPQUNILENBQ0x2SCxDQUFBQSxFQUFBQSxDQUNBLFFBQ0YsQ0FFQSxJQUFNd0gsQ0FBQUEsQ0FBV3hILENBQUFBLENBQUl1SCxDQUFBQSxDQUNyQixHQUFJQyxFQUFXLENBQUEsQ0FBa0JILENBQUFBLENBQVUsT0FDekMsTUFHRixJQUFJSSxFQUFTSixDQUFBQSxDQUFVLE1BQUEsQ0FDdkIsSUFBQSxJQUFTSyxDQUFBQSxDQUFJRixDQUFBQSxDQUFXLENBQUEsQ0FBaUJFLEVBQUlMLENBQUFBLENBQVUsTUFBQSxDQUFTLEVBQUdLLENBQUFBLEVBQUFBLENBQ2pFLEdBQ0VMLEVBQVVLLENBQUMsQ0FBQSxHQUFNLENBQUEsRUFDakJMLENBQUFBLENBQVVLLENBQUFBLENBQUksQ0FBQyxJQUFNLENBQUEsR0FDcEJMLENBQUFBLENBQVVLLEVBQUksQ0FBQyxDQUFBLEdBQU0sR0FBTUEsQ0FBQUEsQ0FBSSxDQUFBLENBQUlMLENBQUFBLENBQVUsTUFBQSxFQUFVQSxDQUFBQSxDQUFVSyxDQUFBQSxDQUFJLENBQUMsQ0FBQSxHQUFNLENBQUEsRUFBS0wsRUFBVUssQ0FBQUEsQ0FBSSxDQUFDLElBQU0sQ0FBQSxDQUFBLENBQ3ZHLENBQ0FELENBQUFBLENBQVNDLENBQUFBLENBQ1QsS0FDRixDQUdGLEdBQU0sQ0FBRSxJQUFBLENBQUFaLEVBQU0sT0FBQSxDQUFBQyxDQUFRLEVBQUlKLEVBQUFBLENBQWFVLENBQUFBLENBQVVHLENBQVEsQ0FBQSxDQUFJSCxDQUFBQSxDQUFVRyxDQUFBQSxDQUFXLENBQUMsQ0FBRSxDQUFBLENBQ3JGRixFQUFLLElBQUEsQ0FBSyxDQUFFLEtBQUFSLENBQUFBLENBQU0sT0FBQSxDQUFBQyxDQUFBQSxDQUFTLElBQUEsQ0FBTU0sQ0FBQUEsQ0FBVSxRQUFBLENBQVNHLEVBQVVDLENBQU0sQ0FBRSxDQUFDLENBQUEsQ0FDdkV6SCxDQUFBQSxDQUFJeUgsRUFDTixDQUVBLE9BQU9ILENBQ1QsQ0FHTyxTQUFTSyxFQUFBQSxDQUFrQkMsRUFBYWIsQ0FBQUEsQ0FBeUIsQ0FDdEUsSUFBTWMsQ0FBQUEsQ0FBTSxNQUFBLENBQU8sS0FBS0QsQ0FBRyxDQUFBLENBQ3JCLENBQUUsSUFBQSxDQUFBZCxDQUFBQSxDQUFNLFVBQUEsQ0FBQUUsQ0FBVyxDQUFBLENBQUlMLEVBQUFBLENBQWFrQixFQUFJLENBQUMsQ0FBQSxDQUFJQSxFQUFJLENBQUMsQ0FBRSxDQUFBLENBQ3BELENBQUNDLENBQUFBLENBQUlDLENBQUUsRUFBSWQsRUFBQUEsQ0FBZ0JILENBQUFBLENBQU1DLEVBQVNDLENBQVUsQ0FBQSxDQUMxRCxPQUFBYSxDQUFBQSxDQUFJLENBQUMsQ0FBQSxDQUFJQyxDQUFBQSxDQUNURCxDQUFBQSxDQUFJLENBQUMsRUFBSUUsQ0FBQUEsQ0FDRkYsQ0FDVCxDQWFPLFNBQVNHLENBQUFBLENBQTBCM04sRUFBc0IsQ0FDOUQsSUFBTXdOLENBQUFBLENBQWdCLEVBQUMsQ0FDdkIsSUFBQSxJQUFTN0gsRUFBSSxDQUFBLENBQUdBLENBQUFBLENBQUkzRixFQUFLLE1BQUEsQ0FBUTJGLENBQUFBLEVBQUFBLENBQzNCQSxFQUFJLENBQUEsQ0FBSTNGLENBQUFBLENBQUssTUFBQSxFQUFVQSxDQUFBQSxDQUFLMkYsQ0FBQyxDQUFBLEdBQU0sR0FBSzNGLENBQUFBLENBQUsyRixDQUFBQSxDQUFJLENBQUMsQ0FBQSxHQUFNLENBQUEsRUFBSzNGLEVBQUsyRixDQUFBQSxDQUFJLENBQUMsQ0FBQSxHQUFNLENBQUEsRUFDL0U2SCxDQUFBQSxDQUFJLElBQUEsQ0FBSyxFQUFHLENBQUMsQ0FBQSxDQUNiN0gsR0FBSyxDQUFBLEVBRUw2SCxDQUFBQSxDQUFJLEtBQUt4TixDQUFBQSxDQUFLMkYsQ0FBQyxDQUFFLENBQUEsQ0FHckIsT0FBTyxNQUFBLENBQU8sS0FBSzZILENBQUcsQ0FDeEIsQ0FHTyxTQUFTSSxFQUFBQSxDQUF1QkwsRUFBcUIsQ0FDMUQsSUFBTUMsQ0FBQUEsQ0FBZ0IsRUFBQyxDQUN2QkEsQ0FBQUEsQ0FBSSxLQUFLRCxDQUFBQSxDQUFJLENBQUMsRUFBSUEsQ0FBQUEsQ0FBSSxDQUFDLENBQUUsQ0FBQSxDQUN6QixJQUFJekIsQ0FBQUEsQ0FBUSxDQUFBLENBQ1osSUFBQSxJQUFTbkcsQ0FBQUEsQ0FBSSxFQUFHQSxDQUFBQSxDQUFJNEgsQ0FBQUEsQ0FBSSxPQUFRNUgsQ0FBQUEsRUFBQUEsQ0FDMUJtRyxDQUFBQSxHQUFVLEdBQUt5QixDQUFBQSxDQUFJNUgsQ0FBQyxDQUFBLEVBQU0sQ0FBQSxHQUM1QjZILENBQUFBLENBQUksSUFBQSxDQUFLLENBQUMsQ0FBQSxDQUNWMUIsQ0FBQUEsQ0FBUSxHQUVOeUIsQ0FBQUEsQ0FBSTVILENBQUMsSUFBTSxDQUFBLENBQ2JtRyxDQUFBQSxFQUFBQSxDQUVBQSxDQUFBQSxDQUFRLENBQUEsQ0FFVjBCLENBQUFBLENBQUksSUFBQSxDQUFLRCxFQUFJNUgsQ0FBQyxDQUFFLEVBRWxCLE9BQU8sTUFBQSxDQUFPLEtBQUs2SCxDQUFHLENBQ3hCLENDeEhBLElBQU1LLEVBQUFBLENBQWMsRUFBQSxDQUNkQyxHQUFjLEVBQUEsQ0FDZEMsRUFBQUEsQ0FBZSxFQUNmQyxFQUFBQSxDQUFrQixFQUFBLENBQ2xCQyxHQUFlLENBQUEsQ0FDZkMsRUFBQUEsQ0FBZSxDQUFBLENBRXJCLFNBQVNDLEVBQUFBLENBQU8vQyxDQUFBQSxDQUFhZ0QsRUFBbUJoUCxDQUFBQSxDQUFvQixDQUNsRSxJQUFNaU0sQ0FBQUEsQ0FBTytDLENBQUFBLEVBQWEsRUFDcEJDLENBQUFBLENBQU8sQ0FBQSxFQUFNLENBQUEsRUFBS0QsQ0FBQUEsQ0FBWSxDQUFBLENBQUEsQ0FDOUJFLENBQUFBLENBQU1sRCxFQUFJQyxDQUFJLENBQUEsRUFBSyxFQUN6QkQsQ0FBQUEsQ0FBSUMsQ0FBSSxFQUFJak0sQ0FBQUEsQ0FBUWtQLENBQUFBLENBQU1ELENBQUFBLENBQU9DLENBQUFBLENBQU0sQ0FBQ0QsRUFDMUMsQ0FFQSxTQUFTRSxFQUFBQSxDQUFTQyxFQUFpQkMsQ0FBQUEsQ0FBNkIsQ0FDOUQsSUFBTUMsQ0FBQUEsQ0FBT2YsQ0FBQUEsQ0FBMEJhLENBQU8sQ0FBQSxDQUM5QyxPQUFBTCxFQUFBQSxDQUFPTyxFQUFNRCxDQUFBQSxDQUFjVixFQUFBQSxDQUFjLENBQUMsQ0FBQSxDQUMxQ0ksRUFBQUEsQ0FBT08sRUFBTUQsQ0FBQUEsQ0FBY1QsRUFBQUEsQ0FBaUIsQ0FBQyxDQUFBLENBQ3RDSixFQUFBQSxDQUF1QmMsQ0FBSSxDQUNwQyxDQUdPLFNBQVNDLEdBQWtCM0IsQ0FBQUEsQ0FBMkIsQ0FDM0QsSUFBTUMsQ0FBQUEsQ0FBT0YsQ0FBQUEsQ0FBY0MsQ0FBUyxDQUFBLENBQ3BDLEdBQUlDLENBQUFBLENBQUssU0FBVyxDQUFBLENBQ2xCLE9BQU9ELEVBRVQsSUFBTTRCLENBQUFBLENBQW1CLEVBQUMsQ0FDMUIsSUFBQSxJQUFXckIsQ0FBQUEsSUFBT04sQ0FBQUEsQ0FBTSxDQUN0QixJQUFJak4sRUFBT3VOLENBQUFBLENBQUksSUFBQSxDQUNYQSxFQUFJLElBQUEsR0FBU3JCLEVBQUFBLENBQ2ZsTSxFQUFPdU8sRUFBQUEsQ0FBU2hCLENBQUFBLENBQUksS0FBTU0sRUFBVyxDQUFBLENBQzVCTixFQUFJLElBQUEsR0FBU3BCLEVBQUFBLEdBQ3RCbk0sRUFBT3VPLEVBQUFBLENBQVNoQixDQUFBQSxDQUFJLEtBQU1PLEVBQVcsQ0FBQSxDQUFBLENBRXZDYyxDQUFBQSxDQUFPLElBQUEsQ0FBSzdDLENBQUFBLENBQW9CL0wsQ0FBSSxFQUN0QyxDQUNBLE9BQU8sT0FBTyxNQUFBLENBQU80TyxDQUFNLENBQzdCLENBSUEsU0FBU0MsRUFBQUEsQ0FBYUMsQ0FBQUEsQ0FBZVYsQ0FBQUEsQ0FBbUJXLENBQUFBLENBQXdCLENBQzlFLElBQU1MLENBQUFBLENBQU9mLEVBQTBCbUIsQ0FBSyxDQUFBLENBQ3RDRSxFQUFLLElBQUluRCxDQUFBQSxDQUFVNkMsQ0FBSSxDQUFBLENBQ3ZCTyxDQUFBQSxDQUFLLElBQUkxRCxFQUNmLElBQUEsSUFBUzVGLENBQUFBLENBQUksRUFBR0EsQ0FBQUEsQ0FBSXlJLENBQUFBLENBQVd6SSxJQUM3QnNKLENBQUFBLENBQUcsSUFBQSxDQUFLLElBQUEsQ0FBS0QsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxDQUFDLENBQUEsQ0FJekIsSUFGQUEsRUFBRyxNQUFBLEVBQU8sQ0FDVkMsRUFBRyxFQUFBLENBQUdGLENBQU0sQ0FBQSxDQUNMQyxDQUFBQSxDQUFHLEdBQUEsQ0FBTUEsQ0FBQUEsQ0FBRyxLQUFLLE1BQUEsRUFDdEJDLENBQUFBLENBQUcsS0FBSyxJQUFBLENBQUtELENBQUFBLENBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQSxDQUV6QixLQUFPQyxDQUFBQSxDQUFHLElBQUEsQ0FBSyxPQUFTLENBQUEsR0FBTSxDQUFBLEVBQzVCQSxFQUFHLElBQUEsQ0FBSyxJQUFBLENBQUssQ0FBQyxDQUFBLENBRWhCLE9BQU9yQixFQUFBQSxDQUF1QjFDLENBQUFBLENBQVMrRCxDQUFBQSxDQUFHLElBQUksQ0FBQyxDQUNqRCxDQUVBLFNBQVNDLEVBQUFBLENBQWFKLENBQUFBLENBQWVWLEVBQW1CZSxDQUFBQSxDQUFpQkMsQ0FBQUEsQ0FBeUIsQ0FDaEcsSUFBTVYsQ0FBQUEsQ0FBT2YsQ0FBQUEsQ0FBMEJtQixDQUFLLENBQUEsQ0FDdENFLENBQUFBLENBQUssSUFBSW5ELENBQUFBLENBQVU2QyxDQUFJLEVBQ3ZCTyxDQUFBQSxDQUFLLElBQUkxRCxDQUFBQSxDQUNmLElBQUEsSUFBUzVGLENBQUFBLENBQUksQ0FBQSxDQUFHQSxFQUFJeUksQ0FBQUEsQ0FBV3pJLENBQUFBLEVBQUFBLENBQzdCc0osRUFBRyxJQUFBLENBQUssSUFBQSxDQUFLRCxFQUFHLElBQUEsQ0FBSyxDQUFDLENBQUMsQ0FBQSxDQU16QixJQUpBQSxDQUFBQSxDQUFHLFFBQU8sQ0FDVkEsQ0FBQUEsQ0FBRyxRQUFPLENBQ1ZDLENBQUFBLENBQUcsR0FBR0UsQ0FBTyxDQUFBLENBQ2JGLENBQUFBLENBQUcsRUFBQSxDQUFHRyxDQUFPLENBQUEsQ0FDTkosRUFBRyxHQUFBLENBQU1BLENBQUFBLENBQUcsS0FBSyxNQUFBLEVBQ3RCQyxDQUFBQSxDQUFHLEtBQUssSUFBQSxDQUFLRCxDQUFBQSxDQUFHLElBQUEsQ0FBSyxDQUFDLENBQUMsQ0FBQSxDQUV6QixLQUFPQyxDQUFBQSxDQUFHLElBQUEsQ0FBSyxPQUFTLENBQUEsR0FBTSxDQUFBLEVBQzVCQSxFQUFHLElBQUEsQ0FBSyxJQUFBLENBQUssQ0FBQyxDQUFBLENBRWhCLE9BQU9yQixFQUFBQSxDQUF1QjFDLEVBQVMrRCxDQUFBQSxDQUFHLElBQUksQ0FBQyxDQUNqRCxDQUdPLFNBQVNJLEVBQUFBLENBQWdCQyxDQUFBQSxDQUFxQixDQUNuRCxJQUFNQyxDQUFBQSxDQUFpQnpCLEVBQUFBLENBQWMsR0FDckMsT0FBT2UsRUFBQUEsQ0FBYVMsRUFBS0MsQ0FBQUEsQ0FBZ0IsQ0FBQyxDQUM1QyxDQUdPLFNBQVNDLEVBQUFBLENBQWdCQyxDQUFBQSxDQUFxQixDQUNuRCxPQUFPUCxHQUFhTyxDQUFBQSxDQUFLLEVBQUEsQ0FBMkIsRUFBRyxDQUFDLENBQzFELENBSUEsU0FBU0MsRUFBQUEsQ0FBT1YsQ0FBQUEsQ0FBdUIsQ0FDckMsSUFBTVcsQ0FBQUEsQ0FBS1gsRUFBRyxNQUFBLEVBQU8sQ0FDckIsT0FBT1csQ0FBQUEsQ0FBSyxDQUFBLENBQUtBLEVBQUssQ0FBQSxFQUFNLENBQUEsQ0FBSSxFQUFFQSxDQUFBQSxFQUFNLENBQUEsQ0FDMUMsQ0FHQSxTQUFTQyxFQUFBQSxDQUF1QlosQ0FBQUEsQ0FBZWEsRUFBZ0MsQ0FFN0UsR0FEa0JiLEVBQUcsSUFBQSxDQUFLLENBQUMsQ0FBQSxDQUNaLENBQ2IsSUFBTWMsQ0FBQUEsQ0FBaUJkLEVBQUcsTUFBQSxFQUFPLENBQ2pDLEdBQUljLENBQUFBLEdBQW1CLENBQUEsQ0FDckIsTUFBTSxJQUFJLEtBQUEsQ0FBTSxDQUFBLHlDQUFBLEVBQTRDQSxDQUFjLENBQUEsQ0FBRSxDQUFBLENBRTlFZCxFQUFHLElBQUEsQ0FBSyxDQUFDLEVBQ1RBLENBQUFBLENBQUcsTUFBQSxHQUNILElBQUEsSUFBUzNCLENBQUFBLENBQUksQ0FBQSxDQUFHQSxDQUFBQSxFQUFLd0MsQ0FBQUEsQ0FBa0J4QyxDQUFBQSxFQUFBQSxDQUN4QjJCLEVBQUcsSUFBQSxDQUFLLENBQUMsR0FFcEJBLENBQUFBLENBQUcsSUFBQSxDQUFLLENBQUMsRUFHZixDQUFBLEtBQU8sQ0FDTCxJQUFNZSxDQUFBQSxDQUFTZixDQUFBQSxDQUFHLFFBQU8sQ0FDbkJnQixDQUFBQSxDQUFTaEIsRUFBRyxNQUFBLEVBQU8sQ0FDekIsUUFBUyxDQUFBLENBQUksQ0FBQSxDQUFHLENBQUEsQ0FBSWUsQ0FBQUEsQ0FBUSxDQUFBLEVBQUEsQ0FDMUJmLENBQUFBLENBQUcsUUFBTyxDQUNWQSxDQUFBQSxDQUFHLEtBQUssQ0FBQyxDQUFBLENBRVgsUUFBUyxDQUFBLENBQUksQ0FBQSxDQUFHLENBQUEsQ0FBSWdCLENBQUFBLENBQVEsQ0FBQSxFQUFBLENBQzFCaEIsQ0FBQUEsQ0FBRyxRQUFPLENBQ1ZBLENBQUFBLENBQUcsS0FBSyxDQUFDLEVBRWIsQ0FDRixDQUdBLFNBQVNpQixFQUFBQSxDQUF1QmpCLENBQUFBLENBQWVrQixDQUFBQSxDQUFpQkMsQ0FBQUEsQ0FBOEIsQ0FFNUYsR0FEQW5CLENBQUFBLENBQUcsS0FBSyxFQUFFLENBQUEsQ0FDTkEsRUFBRyxJQUFBLENBQUssQ0FBQyxDQUFBLEdBQU0sQ0FBQSxDQUNqQixNQUFNLElBQUksTUFBTSx5REFBeUQsQ0FBQSxDQUUzRSxJQUFNb0IsQ0FBQUEsQ0FBU0YsQ0FBQUEsRUFBV2xFLElBQWdCa0UsQ0FBQUEsRUFBV2pFLEVBQUFBLENBQ2pEbUUsQ0FBQUEsRUFDRnBCLENBQUFBLENBQUcsSUFBQSxDQUFLLENBQUMsRUFFWEEsQ0FBQUEsQ0FBRyxNQUFBLEdBQ0gsSUFBTXFCLENBQUFBLENBQVlyQixFQUFHLE1BQUEsRUFBTyxDQUM1QixHQUFJLENBQUNvQixDQUFBQSxDQUFRLENBUVgsR0FQQXBCLENBQUFBLENBQUcsSUFBQSxDQUFLbUIsRUFBSSxhQUFhLENBQUEsQ0FDRW5CLEVBQUcsSUFBQSxDQUFLLENBQUMsQ0FBQSxDQUd6Qm1CLENBQUFBLENBQUksc0JBQUEsQ0FBeUIsQ0FBQSxFQUN0Q25CLEVBQUcsSUFBQSxDQUFLLElBQUEsQ0FBSyxLQUFLLElBQUEsQ0FBSyxJQUFBLENBQUttQixFQUFJLHNCQUFzQixDQUFDLENBQUMsQ0FBQSxDQUZ4RFAsRUFBQUEsQ0FBdUJaLENBQUFBLENBQUltQixFQUFJLGdCQUFnQixDQUFBLENBSTdDQSxFQUFJLHNCQUFBLENBQ04sTUFBTSxJQUFJLEtBQUEsQ0FBTSxvREFBb0QsQ0FBQSxDQUVsRUEsQ0FBQUEsQ0FBSSxxQkFBQSxFQUNObkIsQ0FBQUEsQ0FBRyxLQUFLLENBQUMsRUFFYixDQUNBLE9BQUltQixDQUFBQSxDQUFJLGFBQ05uQixDQUFBQSxDQUFHLElBQUEsQ0FBSyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxDQUFBLENBQUEsQ0FBQSxDQUVQcUIsQ0FBQUEsR0FBY25DLElBQWdCbUMsQ0FBQUEsR0FBY3BDLEVBQUFBLElBQ3pCZSxFQUFHLElBQUEsQ0FBSyxDQUFDLElBRTVCQSxDQUFBQSxDQUFHLE1BQUEsR0FDQ3FCLENBQUFBLEdBQWNwQyxFQUFBQSxFQUNoQmUsRUFBRyxNQUFBLEVBQU8sQ0FBQSxDQUdWcUIsSUFBY3BDLEVBQUFBLEVBQ2hCZSxDQUFBQSxDQUFHLElBQUEsQ0FBSyxDQUFDLENBQUEsQ0FFUG1CLENBQUFBLENBQUksa0JBQ05uQixDQUFBQSxDQUFHLElBQUEsQ0FBSyxDQUFDLENBQUEsQ0FFWEEsQ0FBQUEsQ0FBRyxRQUFPLENBQUEsQ0FFWlUsRUFBQUEsQ0FBT1YsQ0FBRSxDQUFBLENBQ0xtQixDQUFBQSxDQUFJLGdDQUFBLEVBQ05uQixFQUFHLElBQUEsQ0FBSyxDQUFDLEVBRUpBLENBQUFBLENBQUcsR0FDWixDQU9PLFNBQVNzQixFQUFBQSxDQUF3QkMsQ0FBQUEsQ0FBZUwsQ0FBQUEsQ0FBaUJDLENBQUFBLENBQThCLENBQ3BHLElBQU16QixDQUFBQSxDQUFPZixDQUFBQSxDQUEwQjRDLENBQUssQ0FBQSxDQUN0Q3ZCLENBQUFBLENBQUssSUFBSW5ELENBQUFBLENBQVU2QyxDQUFJLENBQUEsQ0FFdkI4QixDQUFBQSxDQUFRLElBQUkzRSxDQUFBQSxDQUFVNkMsQ0FBSSxDQUFBLENBQzFCK0IsQ0FBQUEsQ0FBSVIsR0FBdUJPLENBQUFBLENBQU9OLENBQUFBLENBQVNDLENBQUcsQ0FBQSxDQUM5Q08sQ0FBQUEsQ0FBZUQsQ0FBQUEsQ0FBSSxDQUFBLEdBQU0sQ0FBQSxDQUFJLENBQUEsQ0FBSSxFQUFLQSxDQUFBQSxDQUFJLENBQUEsQ0FDMUNFLEdBQXVCRixDQUFBQSxDQUFJQyxDQUFBQSxFQUFnQixFQUUzQ3pCLENBQUFBLENBQUssSUFBSTFELENBQUFBLENBQ2YsSUFBQSxJQUFTNUYsQ0FBQUEsQ0FBSSxDQUFBLENBQUdBLEVBQUksRUFBQSxDQUFJQSxDQUFBQSxFQUFBQSxDQUN0QnNKLEVBQUcsSUFBQSxDQUFLLElBQUEsQ0FBS0QsRUFBRyxJQUFBLENBQUssQ0FBQyxDQUFDLENBQUEsQ0FXekIsSUFUQUMsQ0FBQUEsQ0FBRyxLQUFLLElBQUEsQ0FBS0QsQ0FBQUEsQ0FBRyxLQUFLLENBQUMsQ0FBQyxFQUNSa0IsQ0FBQUEsRUFBV2xFLEVBQUFBLEVBQWdCa0UsQ0FBQUEsRUFBV2pFLEVBQUFBLEVBRW5EZ0QsQ0FBQUEsQ0FBRyxJQUFBLENBQUssS0FBS0QsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxDQUFDLENBQUEsQ0FHekJBLEVBQUcsTUFBQSxFQUFPLENBQ1ZDLENBQUFBLENBQUcsRUFBQSxDQUFHLENBQUMsQ0FBQSxDQUVBRCxFQUFHLEdBQUEsQ0FBTXlCLENBQUFBLEVBQ2R4QixFQUFHLElBQUEsQ0FBSyxJQUFBLENBQUtELEVBQUcsSUFBQSxDQUFLLENBQUMsQ0FBQyxDQUFBLENBSXpCLElBREFDLENBQUFBLENBQUcsS0FBSyxJQUFBLENBQUssQ0FBQyxFQUNQQSxDQUFBQSxDQUFHLElBQUEsQ0FBSyxPQUFTLENBQUEsR0FBTSxDQUFBLEVBQzVCQSxDQUFBQSxDQUFHLElBQUEsQ0FBSyxJQUFBLENBQUssQ0FBQyxFQUdoQixPQUFPckIsRUFBQUEsQ0FBdUIsT0FBTyxNQUFBLENBQU8sQ0FBQzFDLEVBQVMrRCxDQUFBQSxDQUFHLElBQUksQ0FBQSxDQUFHUCxDQUFBQSxDQUFLLFFBQUEsQ0FBU2lDLENBQW1CLENBQUMsQ0FBQyxDQUFDLENBQ3RHLENDL05BLFNBQVNDLEdBQVdDLENBQUFBLENBQXdDLENBQzFELElBQU03QixDQUFBQSxDQUFLLElBQUluRCxDQUFBQSxDQUFVOEIsRUFBMEJrRCxDQUFPLENBQUMsRUFJM0QsR0FIQTdCLENBQUFBLENBQUcsS0FBSyxFQUFFLENBQUEsQ0FDVkEsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxDQUFBLENBQ1RBLEVBQUcsSUFBQSxDQUFLLENBQUMsRUFDTEEsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxDQUFBLENBQUksQ0FBQSxDQUNmLE9BRUYsSUFBTThCLENBQUFBLENBQXFCOUIsQ0FBQUEsQ0FBRyxLQUFLLENBQUMsQ0FBQSxDQUNwQ0EsRUFBRyxJQUFBLENBQUssRUFBTSxFQUVkLElBQU0rQixDQUFBQSxDQUFXL0IsQ0FBQUEsQ0FBRyxHQUFBLENBQ3BCLE9BQUFBLENBQUFBLENBQUcsS0FBSyxFQUFFLENBQUEsQ0FDTjhCLEVBQXFCLENBQUEsRUFDdkI5QixDQUFBQSxDQUFHLEtBQUs4QixDQUFBQSxDQUFxQixDQUFBLENBQUEsQ0FBSyxDQUFBLENBQUlBLENBQUFBLEVBQXNCLENBQUMsQ0FBQSxDQUV4RCxDQUFFLFFBQUEsQ0FBQUMsQ0FBQUEsQ0FBVSxPQUFRL0IsQ0FBQUEsQ0FBRyxHQUFBLENBQUssUUFBU0EsQ0FBQUEsQ0FBRyxJQUFBLENBQU0sa0JBQUEsQ0FBQThCLENBQW1CLENBQzFFLENBR0EsU0FBU0UsRUFBQUEsQ0FBYS9CLENBQUFBLENBQWVnQyxFQUFnQixDQUNuRGhDLENBQUFBLENBQUcsRUFBRSxLQUFBLENBQVEsRUFBRSxDQUFBLENBQ2ZBLENBQUFBLENBQUcsQ0FBQSxDQUFFLENBQUEsQ0FBRyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxLQUFLLENBQUMsQ0FBQSxDQUNUQSxFQUFHLElBQUEsQ0FBSyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxDQUFBLENBQUUsQ0FBQSxDQUFHLENBQUMsQ0FBQSxDQUNUQSxDQUFBQSxDQUFHLEVBQUVnQyxDQUFBQSxDQUFJLGtCQUFBLENBQW9CLENBQUMsQ0FBQSxDQUU5QmhDLENBQUFBLENBQUcsSUFBQSxDQUFLZ0MsQ0FBQUEsQ0FBSSxrQkFBQSxHQUF1QixDQUFDLEVBQ3BDaEMsQ0FBQUEsQ0FBRyxDQUFBLENBQUUsTUFBUSxFQUFFLENBQUEsQ0FDZkEsRUFBRyxJQUFBLENBQUtnQyxDQUFBQSxDQUFJLE9BQUEsQ0FBU0EsQ0FBQUEsQ0FBSSxRQUFBLENBQVVBLENBQUFBLENBQUksT0FBU0EsQ0FBQUEsQ0FBSSxRQUFRLEVBRTVEaEMsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxDQUFBLENBQ1QsSUFBQSxJQUFTdEosQ0FBQUEsQ0FBSSxDQUFBLENBQUdBLENBQUFBLEVBQUtzTCxDQUFBQSxDQUFJLG1CQUFvQnRMLENBQUFBLEVBQUFBLENBQzNDc0osQ0FBQUEsQ0FBRyxHQUFHLENBQUMsQ0FBQSxDQUNQQSxFQUFHLEVBQUEsQ0FBRyxDQUFDLENBQUEsQ0FDUEEsQ0FBQUEsQ0FBRyxFQUFBLENBQUcsQ0FBQyxFQUdUQSxDQUFBQSxDQUFHLENBQUEsQ0FBRSxFQUFHLENBQUMsQ0FBQSxDQUNUQSxFQUFHLEVBQUEsQ0FBRyxDQUFDLENBQUEsQ0FDUEEsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxFQUNUQSxDQUFBQSxDQUFHLElBQUEsQ0FBSyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxLQUFLLENBQUMsQ0FBQSxDQUNUQSxDQUFBQSxDQUFHLElBQUEsQ0FBSyxDQUFDLENBQUEsQ0FDVEEsRUFBRyxLQUFBLENBQU0sQ0FBQyxFQUNaLENBR0EsU0FBU2lDLEdBQWtCakMsQ0FBQUEsQ0FBZWdDLENBQUFBLENBQWdCNUwsQ0FBQUEsQ0FBZUMsQ0FBQUEsQ0FBZ0IsQ0FHdkYsR0FEQTJKLEVBQUcsSUFBQSxDQUFLZ0MsQ0FBQUEsQ0FBSSxRQUFTQSxDQUFBQSxDQUFJLE1BQUEsQ0FBUyxFQUFHLENBQUMsQ0FBQSxDQUNsQ0EsQ0FBQUEsQ0FBSSxrQkFBQSxDQUFxQixDQUFBLENBQUcsQ0FDOUIsUUFBU3RMLENBQUFBLENBQUksQ0FBQSxDQUFHQSxFQUFJc0wsQ0FBQUEsQ0FBSSxrQkFBQSxDQUFvQnRMLElBQzFDc0osQ0FBQUEsQ0FBRyxDQUFBLENBQUUsQ0FBQSxDQUFHLENBQUMsQ0FBQSxDQUVYLElBQUEsSUFBU3RKLEVBQUlzTCxDQUFBQSxDQUFJLGtCQUFBLENBQW9CdEwsRUFBSSxDQUFBLENBQUdBLENBQUFBLEVBQUFBLENBQzFDc0osRUFBRyxDQUFBLENBQUUsQ0FBQSxDQUFHLENBQUMsRUFFYixDQUVBQSxDQUFBQSxDQUFHLEtBQUssQ0FBQyxDQUFBLENBQ1QsUUFBU3RKLENBQUFBLENBQUksQ0FBQSxDQUFHQSxFQUFJLEVBQUEsQ0FBSUEsQ0FBQUEsRUFBQUEsQ0FDdEJzSixDQUFBQSxDQUFHLElBQUEsQ0FBS3RKLENBQUFBLEdBQU0sQ0FBQSxFQUFLQSxJQUFNLENBQUMsQ0FBQSxDQUU1QnNKLEVBQUcsQ0FBQSxDQUFFLENBQUEsQ0FBRyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxFQUFFLENBQUEsQ0FBRyxDQUFDLEVBQ1RBLENBQUFBLENBQUcsSUFBQSxDQUFLLENBQUMsQ0FBQSxDQUNUQSxDQUFBQSxDQUFHLEVBQUUsQ0FBQSxDQUFHLENBQUMsQ0FBQSxDQUNUQSxDQUFBQSxDQUFHLENBQUEsQ0FBRSxDQUFBLENBQUcsQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsRUFBRSxDQUFBLENBQUcsQ0FBQyxFQUNUQSxDQUFBQSxDQUFHLENBQUEsQ0FBRSxDQUFBLENBQUcsQ0FBQyxDQUFBLENBRVRBLENBQUFBLENBQUcsS0FBSyxDQUFDLENBQUEsQ0FDVEEsRUFBRyxFQUFBLENBQUcsQ0FBQyxFQUNQQSxDQUFBQSxDQUFHLElBQUEsQ0FBSyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsS0FBSyxDQUFDLENBQUEsQ0FHVEEsRUFBRyxFQUFBLENBQUcsQ0FBQyxDQUFBLENBQ1BBLENBQUFBLENBQUcsSUFBQSxDQUFLLENBQUMsRUFDVEEsQ0FBQUEsQ0FBRyxJQUFBLENBQUtnQyxFQUFJLE9BQUEsQ0FBU0EsQ0FBQUEsQ0FBSSxTQUFVQSxDQUFBQSxDQUFJLE1BQUEsQ0FBU0EsQ0FBQUEsQ0FBSSxRQUFRLENBQUEsQ0FFNURoQyxDQUFBQSxDQUFHLEdBQUcsQ0FBQyxDQUFBLENBQ1BBLEVBQUcsQ0FBQSxDQUFFLENBQUEsQ0FBRyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxDQUFBLENBQUUsQ0FBQSxDQUFHLENBQUMsQ0FBQSxDQUNUQSxFQUFHLENBQUEsQ0FBRSxDQUFBLENBQUcsQ0FBQyxDQUFBLENBRVRBLENBQUFBLENBQUcsR0FBRyxDQUFDLENBQUEsQ0FDUEEsQ0FBQUEsQ0FBRyxDQUFBLENBQUU1SixDQUFBQSxDQUFPLEVBQUUsRUFDZDRKLENBQUFBLENBQUcsQ0FBQSxDQUFFM0osRUFBUSxFQUFFLENBQUEsQ0FDZjJKLEVBQUcsSUFBQSxDQUFLLENBQUMsQ0FBQSxDQUNUQSxDQUFBQSxDQUFHLENBQUEsQ0FBRSxDQUFBLENBQUcsQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsRUFBRSxDQUFBLENBQUcsQ0FBQyxFQUNUQSxDQUFBQSxDQUFHLENBQUEsQ0FBRSxDQUFBLENBQUcsQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsS0FBSyxDQUFDLENBQUEsQ0FFVEEsRUFBRyxJQUFBLENBQUssQ0FBQyxFQUNUQSxDQUFBQSxDQUFHLElBQUEsQ0FBSyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxDQUFBLENBR1RBLENBQUFBLENBQUcsS0FBSyxDQUFDLENBQUEsQ0FDVEEsRUFBRyxFQUFBLENBQUcsQ0FBQyxDQUFBLENBQ1BBLENBQUFBLENBQUcsRUFBQSxDQUFHLENBQUMsRUFDUEEsQ0FBQUEsQ0FBRyxFQUFBLENBQUcsQ0FBQyxDQUFBLENBQ1BBLENBQUFBLENBQUcsR0FBRyxDQUFDLENBQUEsQ0FFUEEsQ0FBQUEsQ0FBRyxFQUFBLENBQUcsQ0FBQyxDQUFBLENBQ1BBLEVBQUcsSUFBQSxDQUFLLENBQUMsRUFDVEEsQ0FBQUEsQ0FBRyxFQUFBLENBQUcsQ0FBQyxDQUFBLENBQ1BBLENBQUFBLENBQUcsSUFBQSxDQUFLLENBQUMsQ0FBQSxDQUNUQSxDQUFBQSxDQUFHLEtBQUssQ0FBQyxFQUNYLENBT08sU0FBU2tDLEVBQUFBLENBQWNOLEVBQWlCeEwsQ0FBQUEsQ0FBZUMsQ0FBQUEsQ0FBd0IsQ0FDcEYsSUFBTTJMLENB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QUFlLENBQUEsQ0FDckUsTUFBTWltQixDQUFBQSxDQUFJLFVBQUEsQ0FBVzdPLENBQUMsRUFDeEIsQ0FBQSxPQUFFLENBQ0EyTyxFQUFBQSxDQUFVLElBQUEsQ0FDVjluQixhQUFJLElBQUEsR0FDTixDQUNGLENBQ0YsQ0FBQyxDQUFBIiwiZmlsZSI6ImFwcC5janMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTaGltIGdsb2JhbHMgaW4gY2pzIGJ1bmRsZVxuLy8gVGhlcmUncyBhIHdlaXJkIGJ1ZyB0aGF0IGVzYnVpbGQgd2lsbCBhbHdheXMgaW5qZWN0IGltcG9ydE1ldGFVcmxcbi8vIGlmIHdlIGV4cG9ydCBpdCBhcyBgY29uc3QgaW1wb3J0TWV0YVVybCA9IC4uLiBfX2ZpbGVuYW1lIC4uLmBcbi8vIEJ1dCB1c2luZyBhIGZ1bmN0aW9uIHdpbGwgbm90IGNhdXNlIHRoaXMgaXNzdWVcblxuY29uc3QgZ2V0SW1wb3J0TWV0YVVybCA9ICgpID0+IFxuICB0eXBlb2YgZG9jdW1lbnQgPT09IFwidW5kZWZpbmVkXCIgXG4gICAgPyBuZXcgVVJMKGBmaWxlOiR7X19maWxlbmFtZX1gKS5ocmVmIFxuICAgIDogKGRvY3VtZW50LmN1cnJlbnRTY3JpcHQgJiYgZG9jdW1lbnQuY3VycmVudFNjcmlwdC50YWdOYW1lLnRvVXBwZXJDYXNlKCkgPT09ICdTQ1JJUFQnKSBcbiAgICAgID8gZG9jdW1lbnQuY3VycmVudFNjcmlwdC5zcmMgXG4gICAgICA6IG5ldyBVUkwoXCJtYWluLmpzXCIsIGRvY3VtZW50LmJhc2VVUkkpLmhyZWY7XG5cbmV4cG9ydCBjb25zdCBpbXBvcnRNZXRhVXJsID0gLyogQF9fUFVSRV9fICovIGdldEltcG9ydE1ldGFVcmwoKVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8yNS5cblxuZXhwb3J0IHR5cGUgRW52UGFyc2VyPFQ+ID0gKHZhbHVlOiB1bmtub3duKSA9PiBUO1xuXG5leHBvcnQgZnVuY3Rpb24gcGVudjxUPihuYW1lOiBzdHJpbmcsIHBhcnNlcjogRW52UGFyc2VyPFQ+LCBkZWZhdWx0VmFsdWU6IFQpOiBUO1xuZXhwb3J0IGZ1bmN0aW9uIHBlbnY8VD4obmFtZTogc3RyaW5nLCBwYXJzZXI6IEVudlBhcnNlcjxUPiwgZGVmYXVsdFZhbHVlPzogVCk6IFQgfCB1bmRlZmluZWQ7XG5leHBvcnQgZnVuY3Rpb24gcGVudjxUPihuYW1lOiBzdHJpbmcsIHBhcnNlcjogRW52UGFyc2VyPFQ+LCBkZWZhdWx0VmFsdWU/OiBUKTogVCB8IHVuZGVmaW5lZCB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHBhcnNlcihwcm9jZXNzLmVudltuYW1lXSk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDEvMzAuXG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZU51bWJlcih4OiB1bmtub3duKTogbnVtYmVyIHtcbiAgaWYgKHR5cGVvZiB4ID09PSBcIm51bWJlclwiKSB7XG4gICAgcmV0dXJuIHg7XG4gIH1cbiAgY29uc3QgbnVtID0gTnVtYmVyKHgpO1xuICBpZiAoTnVtYmVyLmlzTmFOKG51bSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFZhbHVlICR7eH0gaXMgbm90IGEgdmFsaWQgbnVtYmVyYCk7XG4gIH1cbiAgcmV0dXJuIG51bTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlU3RyaW5nKHg6IHVua25vd24pOiBzdHJpbmcge1xuICBpZiAodHlwZW9mIHggPT09IFwic3RyaW5nXCIpIHtcbiAgICByZXR1cm4geDtcbiAgfVxuICByZXR1cm4gU3RyaW5nKHgpO1xufVxuXG4vLyBDb21tYS1zZXBhcmF0ZWQgc3RyaW5nIOKGkiBhcnJheSB2aWEgYSBwZXItaXRlbSBwYXJzZXI7IGVtcHR5L2JsYW5rIOKGkiBbXS5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUFycmF5PFQ+KGl0ZW06ICh4OiB1bmtub3duKSA9PiBUKTogKHg6IHVua25vd24pID0+IFRbXSB7XG4gIHJldHVybiAoeCkgPT4ge1xuICAgIGlmICh0eXBlb2YgeCAhPT0gXCJzdHJpbmdcIiB8fCB4LnRyaW0oKSA9PT0gXCJcIikge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICByZXR1cm4geC5zcGxpdChcIixcIikubWFwKChzKSA9PiBpdGVtKHMudHJpbSgpKSk7XG4gIH07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA5LlxuXG5pbXBvcnQgeyBjcmVhdGVSZXF1aXJlIH0gZnJvbSBcIm5vZGU6bW9kdWxlXCI7XG5pbXBvcnQgeyBkaXJuYW1lLCBqb2luIH0gZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHsgcGVudiB9IGZyb20gXCIuL2VudlwiO1xuaW1wb3J0IHsgcGFyc2VOdW1iZXIgfSBmcm9tIFwiLi9wYXJzZXJcIjtcblxuY29uc3QgcmVxdWlyZSA9IGNyZWF0ZVJlcXVpcmUoaW1wb3J0Lm1ldGEudXJsKTtcblxuZXhwb3J0IGNvbnN0IHB1cExvZ0xldmVsID0gcGVudihcIlBVUF9MT0dfTEVWRUxcIiwgcGFyc2VOdW1iZXIsIDIpO1xuXG5leHBvcnQgY29uc3QgcHVwUGtnUm9vdCA9IGRpcm5hbWUocmVxdWlyZS5yZXNvbHZlKFwicHVwLXJlY29yZGVyL3BhY2thZ2UuanNvblwiKSk7XG5leHBvcnQgY29uc3QgcHVwQXBwID0gam9pbihwdXBQa2dSb290LCBcImRpc3RcIiwgXCJhcHAuY2pzXCIpO1xuZXhwb3J0IGNvbnN0IHB1cFByZWxvYWQgPSBqb2luKHB1cFBrZ1Jvb3QsIFwiZGlzdFwiLCBcInJ1bnRpbWVcIiwgXCJwcmVsb2FkLmNqc1wiKTtcbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDYuXG5cbmltcG9ydCB0eXBlIHsgQ2hpbGRQcm9jZXNzIH0gZnJvbSBcIm5vZGU6Y2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0IHsgTG9nIH0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB7IEFWX0xPR19FUlJPUiwgQVZfTE9HX1dBUk5JTkcgfSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcbmltcG9ydCB7IHB1cExvZ0xldmVsIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTG9nZ2VyTGlrZSB7XG4gIGRlYnVnPyh0aGlzOiB2b2lkLCAuLi5tZXNzYWdlczogdW5rbm93bltdKTogdm9pZDtcblxuICBpbmZvPyh0aGlzOiB2b2lkLCAuLi5tZXNzYWdlczogdW5rbm93bltdKTogdm9pZDtcblxuICB3YXJuPyh0aGlzOiB2b2lkLCAuLi5tZXNzYWdlczogdW5rbm93bltdKTogdm9pZDtcblxuICBlcnJvcj8odGhpczogdm9pZCwgLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQ7XG5cbiAgLy8gQnVmZmVyZWQgaW1wbHMgZHJhaW4gb24gdGhpczsgc2h1dGRvd24gYXdhaXRzIGl0IHNvIHRoZSB0YWlsIGlzIG5vdCBsb3N0LlxuICBmbHVzaD8odGhpczogdm9pZCk6IFByb21pc2U8dm9pZD47XG59XG5cbmNvbnN0IERFQlVHID0gXCI8cHVwQGRlYnVnPlwiO1xuY29uc3QgSU5GTyA9IFwiPHB1cEBpbmZvPlwiO1xuY29uc3QgV0FSTiA9IFwiPHB1cEB3YXJuPlwiO1xuY29uc3QgRVJST1IgPSBcIjxwdXBAZXJyb3I+XCI7XG5jb25zdCBGQVRBTCA9IFwiPHB1cEBmYXRhbD5cIjtcblxuZnVuY3Rpb24gc3RhY2tIb29rKHRhcmdldDogKC4uLm1lc3NhZ2VzOiB1bmtub3duW10pID0+IHVua25vd24sIF9jb250ZXh0OiBDbGFzc01ldGhvZERlY29yYXRvckNvbnRleHQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh0aGlzOiBMb2dnZXIsIC4uLm1lc3NhZ2VzOiB1bmtub3duW10pIHtcbiAgICBjb25zdCBwcm9jZXNzZWQgPSBtZXNzYWdlcy5tYXAoKG1zZykgPT4ge1xuICAgICAgcmV0dXJuIG1zZyBpbnN0YW5jZW9mIEVycm9yID8gKG1zZy5zdGFjayA/PyBTdHJpbmcobXNnKSkgOiBtc2c7XG4gICAgfSk7XG4gICAgcmV0dXJuIHRhcmdldC5jYWxsKHRoaXMsIC4uLnByb2Nlc3NlZCk7XG4gIH07XG59XG5cbmV4cG9ydCBjbGFzcyBMb2dnZXIgaW1wbGVtZW50cyBMb2dnZXJMaWtlIHtcbiAgcHJpdmF0ZSBfaW1wbD86IExvZ2dlckxpa2U7XG5cbiAgZ2V0IGxldmVsKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2xldmVsO1xuICB9XG5cbiAgc2V0IGxldmVsKHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLl9sZXZlbCA9IHZhbHVlO1xuICAgIHRoaXMuaW1wbCA9IHRoaXMuX2ltcGwgPz8gY29uc29sZTtcbiAgfVxuXG4gIGdldCBpbXBsKCk6IExvZ2dlckxpa2UgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9pbXBsO1xuICB9XG5cbiAgc2V0IGltcGwodmFsdWU6IExvZ2dlckxpa2UpIHtcbiAgICBjb25zdCBkZWJ1ZyA9IHZhbHVlLmRlYnVnID8/IGNvbnNvbGUuZGVidWc7XG4gICAgY29uc3QgaW5mbyA9IHZhbHVlLmluZm8gPz8gY29uc29sZS5pbmZvO1xuICAgIGNvbnN0IHdhcm4gPSB2YWx1ZS53YXJuID8/IGNvbnNvbGUud2FybjtcbiAgICBjb25zdCBlcnJvciA9IHZhbHVlLmVycm9yID8/IGNvbnNvbGUuZXJyb3I7XG4gICAgY29uc3QgbHYgPSB0aGlzLl9sZXZlbDtcbiAgICB0aGlzLl9pbXBsID0ge1xuICAgICAgZGVidWc6IGx2ID49IDMgPyBkZWJ1ZyA6IHVuZGVmaW5lZCxcbiAgICAgIGluZm86IGx2ID49IDIgPyBpbmZvIDogdW5kZWZpbmVkLFxuICAgICAgd2FybjogbHYgPj0gMSA/IHdhcm4gOiB1bmRlZmluZWQsXG4gICAgICBlcnJvcjogbHYgPj0gMCA/IGVycm9yIDogdW5kZWZpbmVkLFxuICAgICAgZmx1c2g6IHZhbHVlLmZsdXNoLFxuICAgIH07XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9sZXZlbDogbnVtYmVyID0gcHVwTG9nTGV2ZWwpIHtcbiAgICB0aGlzLmltcGwgPSBjb25zb2xlO1xuICB9XG5cbiAgQHN0YWNrSG9va1xuICBkZWJ1ZyguLi5tZXNzYWdlczogdW5rbm93bltdKTogdm9pZCB7XG4gICAgdGhpcy5pbXBsPy5kZWJ1Zz8uKERFQlVHLCAuLi5tZXNzYWdlcyk7XG4gIH1cblxuICBAc3RhY2tIb29rXG4gIGluZm8oLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQge1xuICAgIHRoaXMuaW1wbD8uaW5mbz8uKElORk8sIC4uLm1lc3NhZ2VzKTtcbiAgfVxuXG4gIEBzdGFja0hvb2tcbiAgd2FybiguLi5tZXNzYWdlczogdW5rbm93bltdKTogdm9pZCB7XG4gICAgdGhpcy5pbXBsPy53YXJuPy4oV0FSTiwgLi4ubWVzc2FnZXMpO1xuICB9XG5cbiAgQHN0YWNrSG9va1xuICBlcnJvciguLi5tZXNzYWdlczogdW5rbm93bltdKTogdm9pZCB7XG4gICAgdGhpcy5pbXBsPy5lcnJvcj8uKEVSUk9SLCAuLi5tZXNzYWdlcyk7XG4gIH1cblxuICBAc3RhY2tIb29rXG4gIGZhdGFsKC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkIHtcbiAgICB0aGlzLmltcGw/LmVycm9yPy4oRkFUQUwsIC4uLm1lc3NhZ2VzKTtcbiAgICBwcm9jZXNzLmV4aXQoMSk7XG4gIH1cblxuICBwcml2YXRlIGRpc3BhdGNoKG1lc3NhZ2U6IHN0cmluZykge1xuICAgIGNvbnN0IG1zZyA9IG1lc3NhZ2UudHJpbUVuZCgpO1xuICAgIGlmIChtc2cuc3RhcnRzV2l0aChERUJVRykpIHtcbiAgICAgIHRoaXMuZGVidWcobXNnLnNsaWNlKERFQlVHLmxlbmd0aCArIDEpKTtcbiAgICB9IGVsc2UgaWYgKG1zZy5zdGFydHNXaXRoKElORk8pKSB7XG4gICAgICB0aGlzLmluZm8obXNnLnNsaWNlKElORk8ubGVuZ3RoICsgMSkpO1xuICAgIH0gZWxzZSBpZiAobXNnLnN0YXJ0c1dpdGgoV0FSTikpIHtcbiAgICAgIHRoaXMud2Fybihtc2cuc2xpY2UoV0FSTi5sZW5ndGggKyAxKSk7XG4gICAgfSBlbHNlIGlmIChtc2cuc3RhcnRzV2l0aChFUlJPUikpIHtcbiAgICAgIHRoaXMuZXJyb3IobXNnLnNsaWNlKEVSUk9SLmxlbmd0aCArIDEpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pbmZvKG1zZyk7XG4gICAgfVxuICB9XG5cbiAgYXR0YWNoKHByb2M6IENoaWxkUHJvY2VzcywgbmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMuZGVidWcoYCR7bmFtZX0uYXR0YWNoYCk7XG4gICAgICBsZXQgZmF0YWw6IHN0cmluZyA9IFwiXCI7XG4gICAgICBjb25zdCBkaXNwYXRjaCA9IChkYXRhOiBCdWZmZXIpID0+IHtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IGRhdGEudG9TdHJpbmcoKTtcbiAgICAgICAgaWYgKG1lc3NhZ2Uuc3RhcnRzV2l0aChGQVRBTCkpIHtcbiAgICAgICAgICBmYXRhbCArPSBtZXNzYWdlLnNsaWNlKEZBVEFMLmxlbmd0aCArIDEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZGlzcGF0Y2gobWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBwcm9jLnN0ZGVycj8ub24oXCJkYXRhXCIsIGRpc3BhdGNoKTtcbiAgICAgIHByb2Muc3Rkb3V0Py5vbihcImRhdGFcIiwgZGlzcGF0Y2gpO1xuICAgICAgcHJvY1xuICAgICAgICAub24oXCJlcnJvclwiLCAoZXJyKSA9PiB7XG4gICAgICAgICAgZmF0YWwgKz0gZXJyLm1lc3NhZ2U7XG4gICAgICAgICAgcHJvYy5raWxsKCk7XG4gICAgICAgIH0pXG4gICAgICAgIC5vbmNlKFwiY2xvc2VcIiwgKGNvZGUsIHNpZ25hbCkgPT4ge1xuICAgICAgICAgIGlmIChjb2RlIHx8IHNpZ25hbCB8fCBmYXRhbCkge1xuICAgICAgICAgICAgZmF0YWwgfHw9IGBjb21tYW5kIGZhaWxlZDogJHtwcm9jLnNwYXduYXJncy5qb2luKFwiIFwiKX1gO1xuICAgICAgICAgICAgdGhpcy5kZWJ1ZyhgJHtuYW1lfS5jbG9zZWAsIHsgY29kZSwgc2lnbmFsLCBmYXRhbCB9KTtcbiAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoZmF0YWwpKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5kZWJ1ZyhgJHtuYW1lfS5jbG9zZWApO1xuICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgLm9uKFwidW5oYW5kbGVkUmVqZWN0aW9uXCIsIChyZWFzb24pID0+IHtcbiAgICAgICAgICB0aGlzLmVycm9yKGAke25hbWV9LnVuaGFuZGxlZGAsIHJlYXNvbik7XG4gICAgICAgIH0pXG4gICAgICAgIC5vbihcInVuY2F1Z2h0RXhjZXB0aW9uTW9uaXRvclwiLCAoZXJyKSA9PiB7XG4gICAgICAgICAgdGhpcy5lcnJvcihgJHtuYW1lfS51bmhhbmRsZWRgLCBlcnIpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGZsdXNoKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuaW1wbD8uZmx1c2g/LigpO1xuICB9XG59XG5cbmNvbnN0IGxvZ2dlciA9IG5ldyBMb2dnZXIoKTtcblxuLy8gUm91dGUgZmZtcGVnIG5hdGl2ZSBsb2dzIHRocm91Z2ggcHVwJ3MgbG9nZ2VyLlxuTG9nLnNldENhbGxiYWNrKChsZXZlbCwgbWVzc2FnZSkgPT4ge1xuICBjb25zdCBtc2cgPSBtZXNzYWdlLnRyaW1FbmQoKTtcbiAgaWYgKCFtc2cpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKGxldmVsIDw9IEFWX0xPR19FUlJPUikge1xuICAgIGxvZ2dlci5lcnJvcihtc2cpO1xuICB9IGVsc2UgaWYgKGxldmVsIDw9IEFWX0xPR19XQVJOSU5HKSB7XG4gICAgbG9nZ2VyLndhcm4obXNnKTtcbiAgfVxufSk7XG5cbmV4cG9ydCB7IGxvZ2dlciB9O1xuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8yMS5cblxuaW1wb3J0IHsgbWtkaXJTeW5jIH0gZnJvbSBcIm5vZGU6ZnNcIjtcbmltcG9ydCB7IGpvaW4gfSBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyBhcHAsIGNyYXNoUmVwb3J0ZXIgfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuL2xvZ2dpbmdcIjtcblxuY29uc3QgVEFHID0gXCJbQ3Jhc2hdXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGFydEVsZWN0cm9uQ3Jhc2hSZXBvcnRlcigpIHtcbiAgLy8gYXBwRGF0YSAobm90IHRoZSBwZXItcnVuIHVzZXItZGF0YS1kaXIpIHNvIGV2ZXJ5IHB1cCBhcHAncyBkdW1wcyBhY2N1bXVsYXRlIGluIG9uZSBzaGFyZWQsIHBlcnNpc3RlbnQgZGlyLlxuICBjb25zdCBkdW1wRGlyID0gam9pbihhcHAuZ2V0UGF0aChcImFwcERhdGFcIiksIFwicHVwLXJlY29yZGVyXCIsIFwiY3Jhc2hlc1wiKTtcbiAgbWtkaXJTeW5jKGR1bXBEaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICBhcHAuc2V0UGF0aChcImNyYXNoRHVtcHNcIiwgZHVtcERpcik7XG4gIGNyYXNoUmVwb3J0ZXIuc3RhcnQoe1xuICAgIHByb2R1Y3ROYW1lOiBcInB1cC1yZWNvcmRlclwiLFxuICAgIHVwbG9hZFRvU2VydmVyOiBmYWxzZSxcbiAgICBjb21wcmVzczogZmFsc2UsXG4gICAgaWdub3JlU3lzdGVtQ3Jhc2hIYW5kbGVyOiB0cnVlLFxuICB9KTtcbiAgbG9nZ2VyLmRlYnVnKFRBRywgXCJzZXQgZHVtcCB0b1wiLCBkdW1wRGlyKTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMjQuXG5cbmV4cG9ydCBmdW5jdGlvbiBub2VycjxBIGV4dGVuZHMgdW5rbm93bltdLCBSLCBEPihmbjogKC4uLmFyZ3M6IEEpID0+IFIsIGRlZmF1bHRWYWx1ZTogRCk6ICguLi5hcmdzOiBBKSA9PiBSIHwgRCB7XG4gIHJldHVybiAoLi4uYXJncykgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXQgPSBmbiguLi5hcmdzKTtcbiAgICAgIGlmIChyZXQgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgIHJldHVybiByZXQuY2F0Y2goKCkgPT4gZGVmYXVsdFZhbHVlKSBhcyBSIHwgRDtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXQ7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gZGVmYXVsdFZhbHVlO1xuICAgIH1cbiAgfTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDEvMzAuXG5cbmltcG9ydCB7IHR5cGUgQ2hpbGRQcm9jZXNzLCB0eXBlIFNwYXduT3B0aW9ucywgc3Bhd24gfSBmcm9tIFwibm9kZTpjaGlsZF9wcm9jZXNzXCI7XG5pbXBvcnQgdHJlZUtpbGwgZnJvbSBcInRyZWUta2lsbFwiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4vbG9nZ2luZ1wiO1xuXG5leHBvcnQgY29uc3QgUFVQX0FSR1NfS0VZID0gXCItLXB1cC1wcml2LWFyZ3NcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHBhcmdzKCkge1xuICBjb25zdCBhcmd2ID0gcHJvY2Vzcy5hcmd2O1xuICBsZXQgcHJpdiA9IGFyZ3YuZmluZCgoYXJnKSA9PiBhcmcuc3RhcnRzV2l0aChQVVBfQVJHU19LRVkpKTtcbiAgaWYgKCFwcml2KSB7XG4gICAgbG9nZ2VyLmRlYnVnKFwicHJvY2FyZ3ZcIiwgYXJndik7XG4gICAgcmV0dXJuIHByb2Nlc3MuYXJndjtcbiAgfVxuICBjb25zdCBhcmdzID0gW1wiZXhlY1wiLCAuLi5hcmd2LnNsaWNlKC0xKV07XG4gIHByaXYgPSBCdWZmZXIuZnJvbShwcml2LnNwbGl0KFwiPVwiKVsxXSEsIFwiYmFzZTY0XCIpLnRvU3RyaW5nKCk7XG4gIGFyZ3MucHVzaCguLi5KU09OLnBhcnNlKHByaXYpKTtcbiAgbG9nZ2VyLmRlYnVnKFwicHVwYXJnc1wiLCBhcmdzKTtcbiAgcmV0dXJuIGFyZ3M7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJvY2Vzc0hhbmRsZSB7XG4gIHByb2Nlc3M6IENoaWxkUHJvY2VzcztcbiAgd2FpdDogUHJvbWlzZTx2b2lkPjtcbiAgZ2V0IGtpbGxlZCgpOiBib29sZWFuO1xuICBraWxsKCk6IHZvaWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleGVjKGNtZDogc3RyaW5nLCBvcHRpb25zPzogU3Bhd25PcHRpb25zKTogUHJvY2Vzc0hhbmRsZSB7XG4gIGNvbnN0IHBhcnRzID0gY21kLnNwbGl0KFwiIFwiKS5maWx0ZXIoKHMpID0+IHMubGVuZ3RoKTtcbiAgY29uc3QgW2NvbW1hbmQsIC4uLmFyZ3NdID0gcGFydHM7XG4gIGlmICghY29tbWFuZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcImVtcHR5IGNvbW1hbmRcIik7XG4gIH1cbiAgY29uc3QgcHJvYyA9IHNwYXduKGNvbW1hbmQsIGFyZ3MsIHtcbiAgICBzdGRpbzogXCJpbmhlcml0XCIsXG4gICAgLi4ub3B0aW9ucyxcbiAgfSk7XG4gIGxldCBraWxsZWQgPSBmYWxzZTtcbiAgcmV0dXJuIHtcbiAgICBwcm9jZXNzOiBwcm9jLFxuICAgIHdhaXQ6IGxvZ2dlci5hdHRhY2gocHJvYywgY29tbWFuZCksXG4gICAgZ2V0IGtpbGxlZCgpIHtcbiAgICAgIHJldHVybiBraWxsZWQ7XG4gICAgfSxcbiAgICBraWxsKCkge1xuICAgICAgaWYgKGtpbGxlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBraWxsZWQgPSB0cnVlO1xuICAgICAgY29uc3QgcGlkID0gcHJvYy5waWQ7XG4gICAgICBpZiAocGlkKSB7XG4gICAgICAgIHRyZWVLaWxsKHBpZCwgXCJTSUdLSUxMXCIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcHJvYy5raWxsKFwiU0lHS0lMTFwiKTtcbiAgICAgIH1cbiAgICB9LFxuICB9O1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wNi5cblxuaW1wb3J0IHogZnJvbSBcInpvZFwiO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9XSURUSCA9IDE5MjA7XG5leHBvcnQgY29uc3QgREVGQVVMVF9IRUlHSFQgPSAxMDgwO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfRlBTID0gMzA7XG5leHBvcnQgY29uc3QgREVGQVVMVF9EVVJBVElPTiA9IDU7XG5leHBvcnQgY29uc3QgREVGQVVMVF9XSU5ET1dfVElNRU9VVCA9IDEwO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfT1VUX0ZJTEVTID0gW1wib3V0L2h0bWwubXA0XCIsIFwib3V0L2h0bWwud2VibVwiXTtcblxuZXhwb3J0IGNvbnN0IHJlbmRlclNjaGVtYSA9IHoub2JqZWN0KHtcbiAgZHVyYXRpb246IHoubnVtYmVyKCkuZGVzY3JpYmUoXCJEdXJhdGlvbiBpbiBzZWNvbmRzXCIpLFxuICB3aWR0aDogei5udW1iZXIoKS5kZXNjcmliZShcIlZpZGVvIHdpZHRoXCIpLFxuICBoZWlnaHQ6IHoubnVtYmVyKCkuZGVzY3JpYmUoXCJWaWRlbyBoZWlnaHRcIiksXG4gIGZwczogei5udW1iZXIoKS5kZXNjcmliZShcIkZyYW1lcyBwZXIgc2Vjb25kXCIpLFxuICB3aXRoQXVkaW86IHouYm9vbGVhbigpLmRlc2NyaWJlKFwiQ2FwdHVyZSBhbmQgZW5jb2RlIGF1ZGlvXCIpLFxuICBvdXRGaWxlczogei5hcnJheSh6LnN0cmluZygpKS5kZXNjcmliZShcIk91dHB1dCBwYXRoczsgZXh0ZW5zaW9uICgubXA0Ly53ZWJtKSBzZWxlY3RzIGVuY29kZXJcIiksXG4gIHVzZUlubmVyUHJveHk6IHouYm9vbGVhbigpLmRlc2NyaWJlKFwiVXNlIGJpbGliaWxpIGlubmVyIHByb3h5IGZvciByZXNvdXJjZSBhY2Nlc3NcIiksXG4gIGRldGVybWluaXN0aWM6IHouYm9vbGVhbigpLmRlc2NyaWJlKFwiUmVuZGVyIGJ5IGZyYW1lIHJhdGhlciB0aGFuIHJlY29yZGluZ1wiKSxcbiAgZGlzYWJsZUdwdTogei5ib29sZWFuKCkuZGVzY3JpYmUoXCJEaXNhYmxlIEdQVSByZW5kZXJpbmcsIG1heSByZWR1Y2UgcGVyZm9ybWFuY2UgYnV0IGluY3JlYXNlIHN0YWJpbGl0eVwiKSxcbiAgZGlzYWJsZUh3Q29kZWM6IHouYm9vbGVhbigpLmRlc2NyaWJlKFwiRGlzYWJsZSBoYXJkd2FyZSB2aWRlbyBlbmNvZGVyIChOVkVOQy9WaWRlb1Rvb2xib3gpLCB1c2Ugc29mdHdhcmUgeDI2NVwiKSxcbiAgZGlzYWJsZVdlYlNlY3VyaXR5OiB6LmJvb2xlYW4oKS5kZXNjcmliZShcIkRyb3AgdGhlIHNhbWUtb3JpZ2luIHdhbGw7IHJlcXVpcmVkIHRvIHJlY29yZCBhIGxvY2FsIGZpbGVcIiksXG4gIGlnbm9yZUNlcnRpZmljYXRlRXJyb3JzOiB6XG4gICAgLmJvb2xlYW4oKVxuICAgIC5kZXNjcmliZShcIlJlY29yZCBvdmVyIFRMUyB0aGUgcGxhdGZvcm0gcmVqZWN0cywgZS5nLiBhIHNlbGYtc2lnbmVkIGludHJhbmV0IGhvc3RcIiksXG4gIHdpbmRvd1RvbGVyYW50OiB6LmJvb2xlYW4oKS5kZXNjcmliZShcIkZhbGwgYmFjayB0byBkb20tcmVhZHkgaWYgd2FybXVwIGxvYWQgdGltZXMgb3V0XCIpLFxuICB3aW5kb3dUaW1lb3V0OiB6Lm51bWJlcigpLmRlc2NyaWJlKFwiV2luZG93IGxvYWQgdGltZW91dCBpbiBzZWNvbmRzXCIpLFxuICBzY3JlZW5zaG90czogei5hcnJheSh6Lm51bWJlcigpKS5kZXNjcmliZShcIlNlY29uZCBtYXJrcyB0byBkdW1wIGZyYW1lIGJpdG1hcHMgYXMgUE5HXCIpLFxufSk7XG5cbmV4cG9ydCB0eXBlIFJlbmRlck9wdGlvbnMgPSB6LmluZmVyPHR5cGVvZiByZW5kZXJTY2hlbWE+O1xuXG5leHBvcnQgdHlwZSBDb25zb2xlQ2FsbGJhY2sgPSAobGV2ZWw6IHN0cmluZywgbWVzc2FnZTogc3RyaW5nKSA9PiB2b2lkO1xuXG5leHBvcnQgdHlwZSBQcm9ncmVzc0NhbGxiYWNrID0gKHByb2dyZXNzOiBudW1iZXIpID0+IHZvaWQ7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVBDUmVuZGVyT3B0aW9ucyBleHRlbmRzIFJlbmRlck9wdGlvbnMge1xuICBzb3VyY2U6IHN0cmluZztcbiAgc2lnbmFsOiBBYm9ydFNpZ25hbDtcbiAgb25Qcm9ncmVzczogUHJvZ3Jlc3NDYWxsYmFjaztcbiAgb25Db25zb2xlOiBDb25zb2xlQ2FsbGJhY2s7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVuZGVyUmVzdWx0IHtcbiAgb3B0aW9uczogUmVuZGVyT3B0aW9ucztcbiAgd3JpdHRlbjogbnVtYmVyO1xuICBvdXRGaWxlczogc3RyaW5nW107XG4gIGJsYW5rOiBudW1iZXI7XG4gIGphbms6IG51bWJlcjtcbiAgc2NyZWVuc2hvdHM6IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgY29uc3QgZGVmYXVsdFJlbmRlck9wdGlvbnM6IFJlbmRlck9wdGlvbnMgPSB7XG4gIHdpZHRoOiBERUZBVUxUX1dJRFRILFxuICBoZWlnaHQ6IERFRkFVTFRfSEVJR0hULFxuICBmcHM6IERFRkFVTFRfRlBTLFxuICBkdXJhdGlvbjogREVGQVVMVF9EVVJBVElPTixcbiAgb3V0RmlsZXM6IERFRkFVTFRfT1VUX0ZJTEVTLFxuICB3aXRoQXVkaW86IGZhbHNlLFxuICB1c2VJbm5lclByb3h5OiBmYWxzZSxcbiAgZGV0ZXJtaW5pc3RpYzogZmFsc2UsXG4gIGRpc2FibGVHcHU6IGZhbHNlLFxuICBkaXNhYmxlSHdDb2RlYzogZmFsc2UsXG4gIGRpc2FibGVXZWJTZWN1cml0eTogZmFsc2UsXG4gIGlnbm9yZUNlcnRpZmljYXRlRXJyb3JzOiBmYWxzZSxcbiAgd2luZG93VG9sZXJhbnQ6IGZhbHNlLFxuICB3aW5kb3dUaW1lb3V0OiBERUZBVUxUX1dJTkRPV19USU1FT1VULFxuICBzY3JlZW5zaG90czogW10sXG59O1xuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wOS5cblxuaW1wb3J0IHsgcmVhbHBhdGhTeW5jIH0gZnJvbSBcIm5vZGU6ZnNcIjtcbmltcG9ydCB7IHJlc29sdmUgfSBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyBwcm9ncmFtIH0gZnJvbSBcImNvbW1hbmRlclwiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4vYmFzZS9sb2dnaW5nXCI7XG5pbXBvcnQgeyBub2VyciB9IGZyb20gXCIuL2Jhc2Uvbm9lcnJcIjtcbmltcG9ydCB7IHBhcnNlQXJyYXksIHBhcnNlTnVtYmVyLCBwYXJzZVN0cmluZyB9IGZyb20gXCIuL2Jhc2UvcGFyc2VyXCI7XG5pbXBvcnQgeyBwYXJncyB9IGZyb20gXCIuL2Jhc2UvcHJvY2Vzc1wiO1xuaW1wb3J0IHsgZGVmYXVsdFJlbmRlck9wdGlvbnMsIHR5cGUgUmVuZGVyT3B0aW9ucywgcmVuZGVyU2NoZW1hIH0gZnJvbSBcIi4vcmVuZGVyZXIvc2NoZW1hXCI7XG5cbi8vIFNjaGVtZWQgVVJJcyBwYXNzIHRocm91Z2g7IGJhcmUgcGF0aHMgZ2V0IGNhbm9uaWNhbGl6ZWQgYW5kIHdyYXBwZWQgYXMgZmlsZTovLy5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVNvdXJjZShzOiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAocy5pbmNsdWRlcyhcIjovL1wiKSB8fCBzLnN0YXJ0c1dpdGgoXCJkYXRhOlwiKSkge1xuICAgIHJldHVybiBzO1xuICB9XG4gIGxldCBhYnM6IHN0cmluZztcbiAgdHJ5IHtcbiAgICBhYnMgPSByZWFscGF0aFN5bmMocyk7XG4gIH0gY2F0Y2gge1xuICAgIGFicyA9IHJlc29sdmUocyk7XG4gIH1cbiAgcmV0dXJuIGBmaWxlOi8vJHthYnN9YDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDTElPcHRpb25zIHtcbiAgbmFtZTogc3RyaW5nO1xuICBydW46IChzb3VyY2U6IHN0cmluZywgb3B0aW9uczogUmVuZGVyT3B0aW9ucykgPT4gUHJvbWlzZTx1bmtub3duPjtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG1ha2VDTEkob3B0aW9uczogQ0xJT3B0aW9ucykge1xuICBjb25zdCBzaGFwZSA9IHJlbmRlclNjaGVtYS5zaGFwZTtcbiAgY29uc3QgZCA9IGRlZmF1bHRSZW5kZXJPcHRpb25zO1xuICBwcm9ncmFtXG4gICAgLm5hbWUob3B0aW9ucy5uYW1lKVxuICAgIC5hcmd1bWVudChcIjxzb3VyY2U+XCIsIFwiZmlsZTovLywgaHR0cChzKTovLywgZGF0YTogVVJJLCBvciBmaWxlc3lzdGVtIHBhdGhcIilcbiAgICAub3B0aW9uKFwiLVcsIC0td2lkdGggPG51bWJlcj5cIiwgc2hhcGUud2lkdGguZGVzY3JpcHRpb24sIGAke2Qud2lkdGh9YClcbiAgICAub3B0aW9uKFwiLUgsIC0taGVpZ2h0IDxudW1iZXI+XCIsIHNoYXBlLmhlaWdodC5kZXNjcmlwdGlvbiwgYCR7ZC5oZWlnaHR9YClcbiAgICAub3B0aW9uKFwiLVMsIC0tc2NyZWVuc2hvdHMgPHNlY29uZHM+XCIsIHNoYXBlLnNjcmVlbnNob3RzLmRlc2NyaXB0aW9uLCBcIlwiKVxuICAgIC5vcHRpb24oXCItZiwgLS1mcHMgPG51bWJlcj5cIiwgc2hhcGUuZnBzLmRlc2NyaXB0aW9uLCBgJHtkLmZwc31gKVxuICAgIC5vcHRpb24oXCItdCwgLS1kdXJhdGlvbiA8bnVtYmVyPlwiLCBzaGFwZS5kdXJhdGlvbi5kZXNjcmlwdGlvbiwgYCR7ZC5kdXJhdGlvbn1gKVxuICAgIC5vcHRpb24oXCItbywgLS1vdXQtZmlsZSA8cGF0aHM+XCIsIHNoYXBlLm91dEZpbGVzLmRlc2NyaXB0aW9uLCBkLm91dEZpbGVzLmpvaW4oXCIsXCIpKVxuICAgIC5vcHRpb24oXCItYSwgLS13aXRoLWF1ZGlvXCIsIHNoYXBlLndpdGhBdWRpby5kZXNjcmlwdGlvbiwgZC53aXRoQXVkaW8pXG4gICAgLm9wdGlvbihcIi1kLCAtLWRldGVybWluaXN0aWNcIiwgc2hhcGUuZGV0ZXJtaW5pc3RpYy5kZXNjcmlwdGlvbiwgZC5kZXRlcm1pbmlzdGljKVxuICAgIC5vcHRpb24oXCItLXVzZS1pbm5lci1wcm94eVwiLCBzaGFwZS51c2VJbm5lclByb3h5LmRlc2NyaXB0aW9uLCBkLnVzZUlubmVyUHJveHkpXG4gICAgLm9wdGlvbihcIi0tZGlzYWJsZS1ncHVcIiwgc2hhcGUuZGlzYWJsZUdwdS5kZXNjcmlwdGlvbiwgZC5kaXNhYmxlR3B1KVxuICAgIC5vcHRpb24oXCItLWRpc2FibGUtaHctY29kZWNcIiwgc2hhcGUuZGlzYWJsZUh3Q29kZWMuZGVzY3JpcHRpb24sIGQuZGlzYWJsZUh3Q29kZWMpXG4gICAgLm9wdGlvbihcIi0tZGlzYWJsZS13ZWItc2VjdXJpdHlcIiwgc2hhcGUuZGlzYWJsZVdlYlNlY3VyaXR5LmRlc2NyaXB0aW9uLCBkLmRpc2FibGVXZWJTZWN1cml0eSlcbiAgICAub3B0aW9uKFwiLS1pZ25vcmUtY2VydGlmaWNhdGUtZXJyb3JzXCIsIHNoYXBlLmlnbm9yZUNlcnRpZmljYXRlRXJyb3JzLmRlc2NyaXB0aW9uLCBkLmlnbm9yZUNlcnRpZmljYXRlRXJyb3JzKVxuICAgIC5vcHRpb24oXCItLXdpbmRvdy10b2xlcmFudFwiLCBzaGFwZS53aW5kb3dUb2xlcmFudC5kZXNjcmlwdGlvbiwgZC53aW5kb3dUb2xlcmFudClcbiAgICAub3B0aW9uKFwiLS13aW5kb3ctdGltZW91dCA8bnVtYmVyPlwiLCBzaGFwZS53aW5kb3dUaW1lb3V0LmRlc2NyaXB0aW9uLCBgJHtkLndpbmRvd1RpbWVvdXR9YClcbiAgICAuYWN0aW9uKGFzeW5jIChzb3VyY2U6IHN0cmluZywgb3B0cykgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgb3B0aW9ucy5ydW4obm9ybWFsaXplU291cmNlKHNvdXJjZSksIHtcbiAgICAgICAgICB3aWR0aDogbm9lcnIocGFyc2VOdW1iZXIsIGQud2lkdGgpKG9wdHMud2lkdGgpLFxuICAgICAgICAgIGhlaWdodDogbm9lcnIocGFyc2VOdW1iZXIsIGQuaGVpZ2h0KShvcHRzLmhlaWdodCksXG4gICAgICAgICAgZnBzOiBub2VycihwYXJzZU51bWJlciwgZC5mcHMpKG9wdHMuZnBzKSxcbiAgICAgICAgICBkdXJhdGlvbjogbm9lcnIocGFyc2VOdW1iZXIsIGQuZHVyYXRpb24pKG9wdHMuZHVyYXRpb24pLFxuICAgICAgICAgIG91dEZpbGVzOiBwYXJzZUFycmF5KHBhcnNlU3RyaW5nKShvcHRzLm91dEZpbGUpLFxuICAgICAgICAgIHdpdGhBdWRpbzogb3B0cy53aXRoQXVkaW8gPz8gZC53aXRoQXVkaW8sXG4gICAgICAgICAgdXNlSW5uZXJQcm94eTogb3B0cy51c2VJbm5lclByb3h5ID8/IGQudXNlSW5uZXJQcm94eSxcbiAgICAgICAgICBkZXRlcm1pbmlzdGljOiBvcHRzLmRldGVybWluaXN0aWMgPz8gZC5kZXRlcm1pbmlzdGljLFxuICAgICAgICAgIGRpc2FibGVHcHU6IG9wdHMuZGlzYWJsZUdwdSA/PyBkLmRpc2FibGVHcHUsXG4gICAgICAgICAgZGlzYWJsZUh3Q29kZWM6IG9wdHMuZGlzYWJsZUh3Q29kZWMgPz8gZC5kaXNhYmxlSHdDb2RlYyxcbiAgICAgICAgICBkaXNhYmxlV2ViU2VjdXJpdHk6IG9wdHMuZGlzYWJsZVdlYlNlY3VyaXR5ID8/IGQuZGlzYWJsZVdlYlNlY3VyaXR5LFxuICAgICAgICAgIGlnbm9yZUNlcnRpZmljYXRlRXJyb3JzOiBvcHRzLmlnbm9yZUNlcnRpZmljYXRlRXJyb3JzID8/IGQuaWdub3JlQ2VydGlmaWNhdGVFcnJvcnMsXG4gICAgICAgICAgd2luZG93VG9sZXJhbnQ6IG9wdHMud2luZG93VG9sZXJhbnQgPz8gZC53aW5kb3dUb2xlcmFudCxcbiAgICAgICAgICB3aW5kb3dUaW1lb3V0OiBub2VycihwYXJzZU51bWJlciwgZC53aW5kb3dUaW1lb3V0KShvcHRzLndpbmRvd1RpbWVvdXQpLFxuICAgICAgICAgIHNjcmVlbnNob3RzOiBwYXJzZUFycmF5KHBhcnNlTnVtYmVyKShvcHRzLnNjcmVlbnNob3RzKSxcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGxvZ2dlci5mYXRhbChlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgYXdhaXQgcHJvZ3JhbS5wYXJzZUFzeW5jKHBhcmdzKCkpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8wMS5cblxuaW1wb3J0IHR5cGUgeyBDaGlsZFByb2Nlc3MgfSBmcm9tIFwibm9kZTpjaGlsZF9wcm9jZXNzXCI7XG5pbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tIFwibm9kZTpldmVudHNcIjtcblxuZXhwb3J0IGVudW0gSXBjTXNnVHlwZSB7XG4gIC8vIGNoaWxkIOKGkiBwYXJlbnRcbiAgQ29uc29sZSA9IFwiY29uc29sZVwiLFxuICBQcm9ncmVzcyA9IFwicHJvZ3Jlc3NcIixcbiAgRG9uZSA9IFwiZG9uZVwiLFxuICBFcnJvciA9IFwiZXJyb3JcIixcbiAgLy8gcGFyZW50IOKGkiBjaGlsZFxuICBDYW5jZWwgPSBcImNhbmNlbFwiLFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbnNvbGVNc2cge1xuICB0eXBlOiBJcGNNc2dUeXBlLkNvbnNvbGU7XG4gIGxldmVsOiBzdHJpbmc7XG4gIG1lc3NhZ2U6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDYW5jZWxNc2cge1xuICB0eXBlOiBJcGNNc2dUeXBlLkNhbmNlbDtcbiAgcmVhc29uPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElwY0RvbmVQYXlsb2FkIHtcbiAgd3JpdHRlbjogbnVtYmVyO1xuICBvdXRGaWxlczogc3RyaW5nW107XG4gIGJsYW5rOiBudW1iZXI7XG4gIGphbms6IG51bWJlcjtcbiAgc2NyZWVuc2hvdHM6IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFByb2dyZXNzTXNnIHtcbiAgdHlwZTogSXBjTXNnVHlwZS5Qcm9ncmVzcztcbiAgdmFsdWU6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEb25lTXNnIHtcbiAgdHlwZTogSXBjTXNnVHlwZS5Eb25lO1xuICBwYXlsb2FkOiBJcGNEb25lUGF5bG9hZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFcnJvck1zZyB7XG4gIHR5cGU6IElwY01zZ1R5cGUuRXJyb3I7XG4gIGVycm9yOiBzdHJpbmc7XG59XG5cbmV4cG9ydCB0eXBlIElwY01zZyA9IENvbnNvbGVNc2cgfCBQcm9ncmVzc01zZyB8IERvbmVNc2cgfCBFcnJvck1zZyB8IENhbmNlbE1zZztcblxuZXhwb3J0IGludGVyZmFjZSBJcGNFdmVudHMge1xuICBwcm9ncmVzczogW3ZhbHVlOiBudW1iZXJdO1xuICBjb25zb2xlOiBbbGV2ZWw6IHN0cmluZywgbXNnOiBzdHJpbmddO1xuICBkb25lOiBbcGF5bG9hZDogSXBjRG9uZVBheWxvYWRdO1xuICBlcnJvcjogW2Vycm9yOiBFcnJvcl07XG4gIGNsb3NlOiBbY29kZTogbnVtYmVyIHwgbnVsbF07XG59XG5cbmV4cG9ydCBjbGFzcyBJcGNXcml0ZXIge1xuICB3cml0ZUNvbnNvbGUobGV2ZWw6IHN0cmluZywgbWVzc2FnZTogc3RyaW5nKSB7XG4gICAgdGhpcy5zZW5kKHsgdHlwZTogSXBjTXNnVHlwZS5Db25zb2xlLCBsZXZlbCwgbWVzc2FnZSB9KTtcbiAgfVxuXG4gIHdyaXRlUHJvZ3Jlc3ModmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuc2VuZCh7IHR5cGU6IElwY01zZ1R5cGUuUHJvZ3Jlc3MsIHZhbHVlIH0pO1xuICB9XG5cbiAgd3JpdGVFcnJvcihlcnJvcjogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuc2VuZCh7IHR5cGU6IElwY01zZ1R5cGUuRXJyb3IsIGVycm9yIH0pO1xuICB9XG5cbiAgd3JpdGVEb25lKHBheWxvYWQ6IElwY0RvbmVQYXlsb2FkKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuc2VuZCh7IHR5cGU6IElwY01zZ1R5cGUuRG9uZSwgcGF5bG9hZCB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2VuZChtc2c6IElwY01zZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgaWYgKCFwcm9jZXNzLnNlbmQpIHtcbiAgICAgICAgcmV0dXJuIHJlc29sdmUoKTtcbiAgICAgIH1cbiAgICAgIHByb2Nlc3Muc2VuZChtc2csICgpID0+IHJlc29sdmUoKSk7XG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIElwY1JlYWRlciBleHRlbmRzIEV2ZW50RW1pdHRlcjxJcGNFdmVudHM+IHtcbiAgY29uc3RydWN0b3IoY2hpbGQ6IENoaWxkUHJvY2Vzcykge1xuICAgIHN1cGVyKCk7XG4gICAgY2hpbGQub24oXCJtZXNzYWdlXCIsIChyYXcpID0+IHtcbiAgICAgIGNvbnN0IG1zZyA9IHJhdyBhcyBJcGNNc2c7XG4gICAgICBzd2l0Y2ggKG1zZy50eXBlKSB7XG4gICAgICAgIGNhc2UgSXBjTXNnVHlwZS5Db25zb2xlOiB7XG4gICAgICAgICAgdGhpcy5lbWl0KFwiY29uc29sZVwiLCBtc2cubGV2ZWwsIG1zZy5tZXNzYWdlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIElwY01zZ1R5cGUuUHJvZ3Jlc3M6IHtcbiAgICAgICAgICB0aGlzLmVtaXQoXCJwcm9ncmVzc1wiLCBtc2cudmFsdWUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgSXBjTXNnVHlwZS5Eb25lOiB7XG4gICAgICAgICAgdGhpcy5lbWl0KFwiZG9uZVwiLCBtc2cucGF5bG9hZCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBJcGNNc2dUeXBlLkVycm9yOiB7XG4gICAgICAgICAgdGhpcy5lbWl0KFwiZXJyb3JcIiwgbmV3IEVycm9yKG1zZy5lcnJvcikpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgY2hpbGQub25jZShcImV4aXRcIiwgKGMpID0+IHRoaXMuZW1pdChcImNsb3NlXCIsIGMpKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wOS5cblxuZXhwb3J0IGZ1bmN0aW9uIHNsZWVwKG1zOiBudW1iZXIpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIG1zKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3aXRoVGltZW91dDxUPihwOiBQcm9taXNlPFQ+LCBtczogbnVtYmVyLCBsYWJlbDogc3RyaW5nKTogUHJvbWlzZTxUPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHJlamVjdChuZXcgRXJyb3IoYCR7bGFiZWx9IHRpbWVkIG91dCBhZnRlciAke21zfW1zYCkpLCBtcyk7XG4gICAgcC50aGVuKHJlc29sdmUsIHJlamVjdCkuZmluYWxseSgoKSA9PiBjbGVhclRpbWVvdXQodGltZXIpKTtcbiAgfSk7XG59XG5cbi8vIFJlamVjdCBhcyBzb29uIGFzIGBzaWduYWxgIGFib3J0cywgZWxzZSBzZXR0bGUgd2l0aCBgcGA7IG5vLW9wIHBhc3N0aHJvdWdoIHdoZW4gbm8gc2lnbmFsLlxuZXhwb3J0IGZ1bmN0aW9uIGFib3J0YWJsZTxUPihwOiBQcm9taXNlPFQ+LCBzaWduYWw/OiBBYm9ydFNpZ25hbCk6IFByb21pc2U8VD4ge1xuICBpZiAoIXNpZ25hbCkge1xuICAgIHJldHVybiBwO1xuICB9XG4gIHJldHVybiBuZXcgUHJvbWlzZTxUPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3Qgb25BYm9ydCA9ICgpID0+IHJlamVjdChzaWduYWwucmVhc29uKTtcbiAgICBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsIG9uQWJvcnQsIHsgb25jZTogdHJ1ZSB9KTtcbiAgICBwLnRoZW4ocmVzb2x2ZSwgcmVqZWN0KS5maW5hbGx5KCgpID0+IHNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgb25BYm9ydCkpO1xuICB9KTtcbn1cblxuLy8gQ2FsbGJhY2sgbWF5IHJldHVybiB0aGUgbmV4dCBpbnRlcnZhbCAobXMpIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IGZvciB0aGUgZm9sbG93aW5nIHRpY2suXG5leHBvcnQgZnVuY3Rpb24gcGVyaW9kaWNhbChjYWxsYmFjazogKGNvdW50OiBudW1iZXIpID0+IFByb21pc2U8bnVtYmVyIHwgdW5kZWZpbmVkPiB8IHVuZGVmaW5lZCwgbXM6IG51bWJlcikge1xuICBsZXQgdG9rZW46IE5vZGVKUy5UaW1lb3V0O1xuICBsZXQgY2xvc2VkID0gZmFsc2U7XG4gIGFzeW5jIGZ1bmN0aW9uIHRpY2soY291bnQ6IG51bWJlcikge1xuICAgIGNvbnN0IG5leHQgPSBhd2FpdCBjYWxsYmFjayhjb3VudCk7XG4gICAgaWYgKGNsb3NlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0b2tlbiA9IHNldFRpbWVvdXQoKCkgPT4gdGljayhjb3VudCArIDEpLCBuZXh0ID8/IG1zKTtcbiAgfVxuICB0b2tlbiA9IHNldFRpbWVvdXQoKCkgPT4gdGljaygwKSwgbXMpO1xuICByZXR1cm4gKCkgPT4ge1xuICAgIGNsb3NlZCA9IHRydWU7XG4gICAgY2xlYXJUaW1lb3V0KHRva2VuKTtcbiAgfTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDMvMTMuXG5cbmltcG9ydCB0eXBlIHsgRGVidWdnZXIsIFNpemUsIFdlYkNvbnRlbnRzIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyB3aXRoVGltZW91dCB9IGZyb20gXCIuL3RpbWluZ1wiO1xuXG5jb25zdCBDRFBfVElNRU9VVF9NUyA9IDVfMDAwO1xuXG5leHBvcnQgZnVuY3Rpb24gc2VuZChjZHA6IERlYnVnZ2VyLCBtZXRob2Q6IHN0cmluZywgcGFyYW1zPzogb2JqZWN0KTogUHJvbWlzZTx1bmtub3duPiB7XG4gIHJldHVybiB3aXRoVGltZW91dChjZHAuc2VuZENvbW1hbmQobWV0aG9kLCBwYXJhbXMpLCBDRFBfVElNRU9VVF9NUywgYGNkcC4ke21ldGhvZH1gKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV2YWxJbihjZHA6IERlYnVnZ2VyLCBleHByZXNzaW9uOiBzdHJpbmcpOiBQcm9taXNlPHVua25vd24+IHtcbiAgcmV0dXJuIHdpdGhUaW1lb3V0KHNlbmQoY2RwLCBcIlJ1bnRpbWUuZXZhbHVhdGVcIiwgeyBleHByZXNzaW9uIH0pLCBDRFBfVElNRU9VVF9NUywgXCJldmFsSW5cIik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhZHZhbmNlVmlydHVhbFRpbWUoY2RwOiBEZWJ1Z2dlciwgYnVkZ2V0OiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjZHAub2ZmKFwibWVzc2FnZVwiLCBoYW5kbGVyKTtcbiAgICAgIHJlamVjdChuZXcgRXJyb3IoYGFkdmFuY2VWaXJ0dWFsVGltZSB0aW1lZCBvdXQgYWZ0ZXIgJHtDRFBfVElNRU9VVF9NU31tc2ApKTtcbiAgICB9LCBDRFBfVElNRU9VVF9NUyk7XG5cbiAgICBjb25zdCBoYW5kbGVyID0gKF86IEVsZWN0cm9uLkV2ZW50LCBtZXRob2Q6IHN0cmluZykgPT4ge1xuICAgICAgaWYgKG1ldGhvZCA9PT0gXCJFbXVsYXRpb24udmlydHVhbFRpbWVCdWRnZXRFeHBpcmVkXCIpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICBjZHAub2ZmKFwibWVzc2FnZVwiLCBoYW5kbGVyKTtcbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgfVxuICAgIH07XG4gICAgY2RwLm9uKFwibWVzc2FnZVwiLCBoYW5kbGVyKTtcbiAgICAvLyBObyBzdGFydmF0aW9uIGNhcCAod291bGQgc2tpcCBwZW5kaW5nIHdvcmsgbm9uLWRldGVybWluaXN0aWNhbGx5KTsgY2FwdHVyZSBzdGFydHMgcG9zdCBkaWQtc3RvcC1sb2FkaW5nLCBhbmQgQ0RQX1RJTUVPVVRfTVMgdHVybnMgYSByZWFsIHN0YWxsIGludG8gYSBmYWlsZWQgcmVuZGVyLlxuICAgIHNlbmQoY2RwLCBcIkVtdWxhdGlvbi5zZXRWaXJ0dWFsVGltZVBvbGljeVwiLCB7XG4gICAgICBwb2xpY3k6IFwiYWR2YW5jZVwiLFxuICAgICAgYnVkZ2V0LFxuICAgIH0pLmNhdGNoKChlKSA9PiB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICBjZHAub2ZmKFwibWVzc2FnZVwiLCBoYW5kbGVyKTtcbiAgICAgIHJlamVjdChlKTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwYXVzZVZpcnR1YWxUaW1lKGNkcDogRGVidWdnZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgc2VuZChjZHAsIFwiRW11bGF0aW9uLnNldFZpcnR1YWxUaW1lUG9saWN5XCIsIHsgcG9saWN5OiBcInBhdXNlXCIgfSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWJ1aWxkRHJhd2FibGUod2ViOiBXZWJDb250ZW50cywgc2l6ZTogU2l6ZSkge1xuICB0cnkge1xuICAgIGNvbnN0IGNkcCA9IHdlYi5kZWJ1Z2dlcjtcbiAgICBhd2FpdCBzZW5kKGNkcCwgXCJFbXVsYXRpb24uY2xlYXJEZXZpY2VNZXRyaWNzT3ZlcnJpZGVcIiwge30pO1xuICAgIGF3YWl0IHNlbmQoY2RwLCBcIkVtdWxhdGlvbi5zZXREZXZpY2VNZXRyaWNzT3ZlcnJpZGVcIiwge1xuICAgICAgLi4uc2l6ZSxcbiAgICAgIGRldmljZVNjYWxlRmFjdG9yOiAxLFxuICAgICAgbW9iaWxlOiBmYWxzZSxcbiAgICB9KTtcbiAgICB3ZWIuaW52YWxpZGF0ZSgpO1xuICB9IGNhdGNoIHtcbiAgICAvLyBTdGggbGlrZSB0ZWFyZG93biBkZXRhY2ggcmVqZWN0cyBpbi1mbGlnaHQgQ0RQIHNlbmRzOyBhIGxvc3QgcmVwYWludCBraWNrIGlzIGhhcm1sZXNzLlxuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA5LlxuXG5pbXBvcnQgdHlwZSB7IERlYnVnZ2VyLCBTaXplLCBXZWJDb250ZW50cyB9IGZyb20gXCJlbGVjdHJvblwiO1xuaW1wb3J0IHsgZXZhbEluIH0gZnJvbSBcIi4uL2Jhc2UvY2RwXCI7XG5pbXBvcnQgeyB3aXRoVGltZW91dCB9IGZyb20gXCIuLi9iYXNlL3RpbWluZ1wiO1xuXG5leHBvcnQgY29uc3QgRlJBTUVfU1lOQ19NQVJLRVJfV0lEVEggPSAzMjtcbmV4cG9ydCBjb25zdCBGUkFNRV9TWU5DX01BUktFUl9IRUlHSFQgPSAxO1xuZXhwb3J0IGNvbnN0IFNURUdPX1RJQ0tfQ0hBTk5FTCA9IFwic3RlZ28tdGlja1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRTdGVnb0hUTUwodGFyZ2V0VVJMOiBzdHJpbmcsIHNpemU6IFNpemUpOiBzdHJpbmcge1xuICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IHNpemU7XG4gIHJldHVybiBgPCFET0NUWVBFIGh0bWw+XG48aHRtbD5cbjxoZWFkPlxuICA8bWV0YSBjaGFyc2V0PVwiVVRGLThcIj5cbiAgPHN0eWxlPlxuICAgICogeyBtYXJnaW46IDA7IHBhZGRpbmc6IDA7IGJveC1zaXppbmc6IGJvcmRlci1ib3g7IH1cbiAgICBodG1sLCBib2R5IHsgd2lkdGg6ICR7d2lkdGh9cHg7IGhlaWdodDogJHtoZWlnaHQgKyAxfXB4OyBvdmVyZmxvdzogaGlkZGVuOyB9XG4gICAgI3RhcmdldCB7IFxuICAgICAgcG9zaXRpb246IGFic29sdXRlOyBcbiAgICAgIHRvcDogMDsgXG4gICAgICBsZWZ0OiAwOyBcbiAgICAgIHdpZHRoOiAke3dpZHRofXB4OyBcbiAgICAgIGhlaWdodDogJHtoZWlnaHR9cHg7IFxuICAgICAgYm9yZGVyOiBub25lOyBcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIH1cbiAgICAjc3RlZ28ge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgdG9wOiAke2hlaWdodH1weDtcbiAgICAgIGxlZnQ6IDA7XG4gICAgICB3aWR0aDogJHt3aWR0aH1weDtcbiAgICAgIGhlaWdodDogMXB4O1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICBpbWFnZS1yZW5kZXJpbmc6IHBpeGVsYXRlZDtcbiAgICB9XG4gIDwvc3R5bGU+XG48L2hlYWQ+XG48Ym9keT5cbiAgPGlmcmFtZSBpZD1cInRhcmdldFwiIHNyYz1cIiR7dGFyZ2V0VVJMfVwiPjwvaWZyYW1lPlxuICA8Y2FudmFzIGlkPVwic3RlZ29cIiB3aWR0aD1cIiR7d2lkdGh9XCIgaGVpZ2h0PVwiMVwiPjwvY2FudmFzPlxuICA8c2NyaXB0PlxuICAgIChmdW5jdGlvbigpIHtcbiAgICAgIGNvbnN0IFdJRFRIID0gJHt3aWR0aH07XG4gICAgICBjb25zdCBNQVJLRVJfV0lEVEggPSAke0ZSQU1FX1NZTkNfTUFSS0VSX1dJRFRIfTtcbiAgICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdGVnbycpO1xuICAgICAgY29uc3QgY3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJywgeyB3aWxsUmVhZEZyZXF1ZW50bHk6IHRydWUgfSk7XG4gICAgICBsZXQgc3RhcnRUaW1lID0gbnVsbDtcbiAgICAgIGxldCByYWZJZCA9IG51bGw7XG5cbiAgICAgIGZ1bmN0aW9uIGVuY29kZVRpbWVzdGFtcCh0aW1lc3RhbXBNcykge1xuICAgICAgICBjb25zdCBpbWFnZURhdGEgPSBjdHguY3JlYXRlSW1hZ2VEYXRhKFdJRFRILCAxKTtcbiAgICAgICAgY29uc3QgZGF0YSA9IGltYWdlRGF0YS5kYXRhO1xuXG4gICAgICAgIGNvbnN0IHRpbWVzdGFtcEludCA9IE1hdGguZmxvb3IodGltZXN0YW1wTXMpID4+PiAwO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgTUFSS0VSX1dJRFRIOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBiaXQgPSAodGltZXN0YW1wSW50ID4+PiAoTUFSS0VSX1dJRFRIIC0gMSAtIGkpKSAmIDE7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSBiaXQgPyAyNTUgOiAwO1xuICAgICAgICAgIGNvbnN0IGlkeCA9IGkgKiA0O1xuICAgICAgICAgIGRhdGFbaWR4XSA9IHZhbHVlO1xuICAgICAgICAgIGRhdGFbaWR4ICsgMV0gPSB2YWx1ZTtcbiAgICAgICAgICBkYXRhW2lkeCArIDJdID0gdmFsdWU7XG4gICAgICAgICAgZGF0YVtpZHggKyAzXSA9IDI1NTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAobGV0IGkgPSBNQVJLRVJfV0lEVEg7IGkgPCBXSURUSDsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgaWR4ID0gaSAqIDQ7XG4gICAgICAgICAgZGF0YVtpZHhdID0gMDtcbiAgICAgICAgICBkYXRhW2lkeCArIDFdID0gMDtcbiAgICAgICAgICBkYXRhW2lkeCArIDJdID0gMDtcbiAgICAgICAgICBkYXRhW2lkeCArIDNdID0gMjU1O1xuICAgICAgICB9XG5cbiAgICAgICAgY3R4LnB1dEltYWdlRGF0YShpbWFnZURhdGEsIDAsIDApO1xuICAgICAgICB3aW5kb3cuX19wdXBfc3RlZ29fdGlja19fKCk7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIHVwZGF0ZUxvb3AoKSB7XG4gICAgICAgIGlmIChzdGFydFRpbWUgPT09IG51bGwpIHJldHVybjtcbiAgICAgICAgY29uc3QgZWxhcHNlZCA9IHBlcmZvcm1hbmNlLm5vdygpIC0gc3RhcnRUaW1lO1xuICAgICAgICBlbmNvZGVUaW1lc3RhbXAoZWxhcHNlZCk7XG4gICAgICAgIHJhZklkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHVwZGF0ZUxvb3ApO1xuICAgICAgfVxuXG4gICAgICB3aW5kb3cuX19wdXBfc3RhcnRfc3RlZ29fXyA9ICgpID0+IHtcbiAgICAgICAgc3RhcnRUaW1lID0gcGVyZm9ybWFuY2Uubm93KCk7XG4gICAgICAgIGVuY29kZVRpbWVzdGFtcCgwKTtcbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHVwZGF0ZUxvb3ApO1xuICAgICAgfTtcblxuICAgICAgd2luZG93Ll9fcHVwX2RyYXdfc3RlZ29fXyA9IChtcykgPT4ge1xuICAgICAgICBlbmNvZGVUaW1lc3RhbXAobXMpO1xuICAgICAgfTtcblxuICAgICAgd2luZG93Ll9fcHVwX3N0b3Bfc3RlZ29fXyA9ICgpID0+IHtcbiAgICAgICAgaWYgKHJhZklkICE9PSBudWxsKSB7XG4gICAgICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUocmFmSWQpO1xuICAgICAgICAgIHJhZklkID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9KSgpO1xuICA8L3NjcmlwdD5cbjwvYm9keT5cbjwvaHRtbD5gO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVjb2RlU3RlZ28oYml0bWFwOiBCdWZmZXIsIHNpemU6IFNpemUpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IHNpemU7XG4gIGlmICh3aWR0aCA8IEZSQU1FX1NZTkNfTUFSS0VSX1dJRFRIIHx8IGhlaWdodCA8IDIpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgbWFya2VyUm93ID0gaGVpZ2h0IC0gMTtcblxuICBsZXQgdGltZXN0YW1wID0gMDtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBGUkFNRV9TWU5DX01BUktFUl9XSURUSDsgaSsrKSB7XG4gICAgY29uc3QgcGl4ZWxJZHggPSAobWFya2VyUm93ICogd2lkdGggKyBpKSAqIDQ7XG4gICAgY29uc3QgciA9IGJpdG1hcFtwaXhlbElkeF0gPz8gMDtcbiAgICBjb25zdCBiaXQgPSByID4gMTI3ID8gMSA6IDA7XG4gICAgdGltZXN0YW1wID0gKHRpbWVzdGFtcCA8PCAxKSB8IGJpdDtcbiAgfVxuXG4gIHRpbWVzdGFtcCA9IHRpbWVzdGFtcCA+Pj4gMDtcblxuICBpZiAoIU51bWJlci5pc0Zpbml0ZSh0aW1lc3RhbXApIHx8IHRpbWVzdGFtcCA8IDAgfHwgdGltZXN0YW1wID4gMWU3KSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHJldHVybiB0aW1lc3RhbXA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGFydFN0ZWdvKGNkcDogRGVidWdnZXIpIHtcbiAgcmV0dXJuIGV2YWxJbihjZHAsIGBfX3B1cF9zdGFydF9zdGVnb19fKClgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0b3BTdGVnbyhjZHA6IERlYnVnZ2VyKSB7XG4gIHJldHVybiBldmFsSW4oY2RwLCBgX19wdXBfc3RvcF9zdGVnb19fKClgKTtcbn1cblxuLy8gUGFpbnRzIHRoZSBzdGVnbyByb3cgZm9yIGBleHBlY3RlZGAgbXMgc3luY2hyb25vdXNseTsgdGhlIGRhbWFnZSByaWRlcyBvdXQgb24gdGhlIG5leHQgY29tcG9zaXRlZCBmcmFtZS5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkcmF3U3RlZ28od2M6IFdlYkNvbnRlbnRzLCBleHBlY3RlZDogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IGV2YWxJbih3Yy5kZWJ1Z2dlciwgYF9fcHVwX2RyYXdfc3RlZ29fXygke2V4cGVjdGVkfSlgKTtcbn1cblxuLy8gUmVzb2x2ZXMgd2hlbiB0aGUgcmVuZGVyZXIgY29tbWl0dGVkIHRoZSBzdGVnbyByb3c7IGFybSBCRUZPUkUgZHJhd1N0ZWdvIHRvIGF2b2lkIG1pc3NpbmcgdGhlIGFjay5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3YWl0U3RlZ29UaWNrKHdjOiBXZWJDb250ZW50cyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBzd2FwcGVkID0gbmV3IFByb21pc2UoKHIpID0+IHdjLmlwYy5vbmNlKFNURUdPX1RJQ0tfQ0hBTk5FTCwgcikpO1xuICBhd2FpdCB3aXRoVGltZW91dChzd2FwcGVkLCA1XzAwMCwgXCJzdGVnbyB0aWNrXCIpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8wMS5cblxuaW1wb3J0IHR5cGUgeyBTaXplIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBwcm90b2NvbCB9IGZyb20gXCJlbGVjdHJvblwiO1xuaW1wb3J0IHsgYnVpbGRTdGVnb0hUTUwgfSBmcm9tIFwiLi9zdGVnb1wiO1xuXG5jb25zdCBQVVBfU0NIRU1FID0gXCJwdXBcIjtcbmNvbnN0IEZSQU1FX1NDSEVNRSA9IFwicHVwLWZyYW1lXCI7XG5cbi8vIHJlZ2lzdGVyU2NoZW1lc0FzUHJpdmlsZWdlZCBob25vcnMgb25seSB0aGUgTEFTVCBjYWxsIOKAlCByZWdpc3RlciBldmVyeSBjdXN0b20gc2NoZW1lIGluIHRoaXMgb25lIGxpc3QgYmVsb3cuXG5jb25zdCBQUklWSUxFR0VEX1BSSVZJTEVHRVMgPSB7XG4gIHN0YW5kYXJkOiB0cnVlLFxuICBzZWN1cmU6IHRydWUsXG4gIC8vIEEgcGFnZSdzIG93biBDU1Agd291bGQgb3RoZXJ3aXNlIHJlZnVzZSB0aGUgdmlkZW8gaG9vaydzIGZldGNoIG9mIHB1cC1mcmFtZTovLyBzdHVicyAoY29ubmVjdC1zcmMpLlxuICBieXBhc3NDU1A6IHRydWUsXG4gIHN1cHBvcnRGZXRjaEFQSTogdHJ1ZSxcbiAgY29yc0VuYWJsZWQ6IHRydWUsXG4gIHN0cmVhbTogdHJ1ZSxcbiAgY29kZUNhY2hlOiB0cnVlLFxufSBhcyBjb25zdDtcblxuLy8gTXVzdCBiZSBjYWxsZWQgc3luY2hyb25vdXNseSBiZWZvcmUgYXBwIGlzIHJlYWR5LlxucHJvdG9jb2wucmVnaXN0ZXJTY2hlbWVzQXNQcml2aWxlZ2VkKFtcbiAgeyBzY2hlbWU6IFBVUF9TQ0hFTUUsIHByaXZpbGVnZXM6IFBSSVZJTEVHRURfUFJJVklMRUdFUyB9LFxuICB7IHNjaGVtZTogRlJBTUVfU0NIRU1FLCBwcml2aWxlZ2VzOiBQUklWSUxFR0VEX1BSSVZJTEVHRVMgfSxcbl0pO1xuXG4vLyBNdXN0IGJlIGNhbGxlZCBhZnRlciBhcHAgaXMgcmVhZHkuXG5leHBvcnQgZnVuY3Rpb24gc2V0dXBQdXBQcm90b2NvbCgpOiB2b2lkIHtcbiAgcHJvdG9jb2wuaGFuZGxlKFBVUF9TQ0hFTUUsIChyZXEpID0+IHtcbiAgICBjb25zdCB1cmwgPSBuZXcgVVJMKHJlcS51cmwpO1xuICAgIGNvbnN0IHNyYyA9IHVybC5zZWFyY2hQYXJhbXMuZ2V0KFwic3JjXCIpID8/IFwiXCI7XG4gICAgY29uc3Qgd2lkdGggPSBwYXJzZUludCh1cmwuc2VhcmNoUGFyYW1zLmdldChcIndcIikgPz8gXCIwXCIsIDEwKTtcbiAgICBjb25zdCBoZWlnaHQgPSBwYXJzZUludCh1cmwuc2VhcmNoUGFyYW1zLmdldChcImhcIikgPz8gXCIwXCIsIDEwKTtcbiAgICBjb25zdCBodG1sID0gYnVpbGRTdGVnb0hUTUwoc3JjLCB7IHdpZHRoLCBoZWlnaHQgfSk7XG4gICAgcmV0dXJuIG5ldyBSZXNwb25zZShodG1sLCB7IGhlYWRlcnM6IHsgXCJjb250ZW50LXR5cGVcIjogXCJ0ZXh0L2h0bWxcIiB9IH0pO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVN0ZWdvVVJMKHNyYzogc3RyaW5nLCBzaXplOiBTaXplKTogc3RyaW5nIHtcbiAgY29uc3QgdXJsID0gbmV3IFVSTChgJHtQVVBfU0NIRU1FfTovL3N0ZWdvYCk7XG4gIHVybC5zZWFyY2hQYXJhbXMuc2V0KFwic3JjXCIsIHNyYy5yZXBsYWNlKFwiaHR0cDovL1wiLCBcImh0dHBzOi8vXCIpKTtcbiAgdXJsLnNlYXJjaFBhcmFtcy5zZXQoXCJ3XCIsIFN0cmluZyhzaXplLndpZHRoKSk7XG4gIHVybC5zZWFyY2hQYXJhbXMuc2V0KFwiaFwiLCBTdHJpbmcoc2l6ZS5oZWlnaHQpKTtcbiAgcmV0dXJuIHVybC50b1N0cmluZygpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMS8zMC5cblxuaW50ZXJmYWNlIFF1ZXVlRW50cnkge1xuICBydW46IFZvaWRGdW5jdGlvbjtcbiAgcmVqZWN0OiAocmVhc29uOiB1bmtub3duKSA9PiB2b2lkO1xuICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbn1cblxuZXhwb3J0IGNsYXNzIENvbmN1cnJlbmN5TGltaXRlciB7XG4gIHByaXZhdGUgX2FjdGl2ZSA9IDA7XG4gIHByaXZhdGUgX3F1ZXVlOiBRdWV1ZUVudHJ5W10gPSBbXTtcbiAgcHJpdmF0ZSBfc2lnbmFscyA9IG5ldyBXZWFrU2V0PEFib3J0U2lnbmFsPigpO1xuICBwcml2YXRlIF9yZXNvbHZlPzogVm9pZEZ1bmN0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKHJlYWRvbmx5IG1heENvbmN1cnJlbmN5OiBudW1iZXIpIHt9XG5cbiAgZ2V0IGFjdGl2ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9hY3RpdmU7XG4gIH1cblxuICBnZXQgcGVuZGluZygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9xdWV1ZS5sZW5ndGg7XG4gIH1cblxuICBnZXQgc3RhdHMoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYGFjdGl2ZTogJHt0aGlzLmFjdGl2ZX0sIHBlbmRpbmc6ICR7dGhpcy5wZW5kaW5nfWA7XG4gIH1cblxuICBhc3luYyBzY2hlZHVsZTxUPihmbjogKCkgPT4gUHJvbWlzZTxUPiwgc2lnbmFsPzogQWJvcnRTaWduYWwpOiBQcm9taXNlPFQ+IHtcbiAgICBzaWduYWw/LnRocm93SWZBYm9ydGVkKCk7XG5cbiAgICBpZiAoc2lnbmFsICYmICF0aGlzLl9zaWduYWxzLmhhcyhzaWduYWwpKSB7XG4gICAgICB0aGlzLl9zaWduYWxzLmFkZChzaWduYWwpO1xuICAgICAgc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCAoKSA9PiB0aGlzLmZsdXNoKHNpZ25hbCksIHsgb25jZTogdHJ1ZSB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2U8VD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpcy5fcXVldWUucHVzaCh7XG4gICAgICAgIHJ1bjogKCkgPT4ge1xuICAgICAgICAgIGlmIChzaWduYWw/LmFib3J0ZWQpIHtcbiAgICAgICAgICAgIHJlamVjdChzaWduYWwucmVhc29uKTtcbiAgICAgICAgICAgIHRoaXMubmV4dCgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLl9hY3RpdmUrKztcbiAgICAgICAgICBmbigpXG4gICAgICAgICAgICAudGhlbigodikgPT4ge1xuICAgICAgICAgICAgICB0aGlzLl9hY3RpdmUtLTtcbiAgICAgICAgICAgICAgcmVzb2x2ZSh2KTtcbiAgICAgICAgICAgICAgdGhpcy5uZXh0KCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuX2FjdGl2ZS0tO1xuICAgICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgICAgIHRoaXMubmV4dCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIHJlamVjdCxcbiAgICAgICAgc2lnbmFsLFxuICAgICAgfSk7XG4gICAgICB0aGlzLm5leHQoKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGRyYWluKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9hY3RpdmUgPT09IDAgJiYgdGhpcy5wZW5kaW5nID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocikgPT4gKHRoaXMuX3Jlc29sdmUgPSByKSk7XG4gIH1cblxuICBwcml2YXRlIGZsdXNoKHNpZ25hbDogQWJvcnRTaWduYWwpIHtcbiAgICBjb25zdCBrZWVwOiBRdWV1ZUVudHJ5W10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIHRoaXMuX3F1ZXVlKSB7XG4gICAgICBpZiAoZW50cnkuc2lnbmFsID09PSBzaWduYWwpIHtcbiAgICAgICAgZW50cnkucmVqZWN0KHNpZ25hbC5yZWFzb24pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAga2VlcC5wdXNoKGVudHJ5KTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5fcXVldWUgPSBrZWVwO1xuICAgIHRoaXMubmV4dCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBuZXh0KCkge1xuICAgIGlmICh0aGlzLl9hY3RpdmUgPT09IDAgJiYgdGhpcy5wZW5kaW5nID09PSAwKSB7XG4gICAgICB0aGlzLl9yZXNvbHZlPy4oKTtcbiAgICAgIHRoaXMuX3Jlc29sdmUgPSB1bmRlZmluZWQ7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLl9hY3RpdmUgPCB0aGlzLm1heENvbmN1cnJlbmN5KSB7XG4gICAgICB0aGlzLl9xdWV1ZS5zaGlmdCgpPy5ydW4oKTtcbiAgICB9XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMTIuXG5cbmltcG9ydCB7XG4gIHR5cGUgQ29kZWMsXG4gIENvZGVjQ29udGV4dCxcbiAgRkZtcGVnRXJyb3IsXG4gIEZyYW1lLFxuICB0eXBlIEhhcmR3YXJlRnJhbWVzQ29udGV4dCxcbiAgUGFja2V0LFxuICBSYXRpb25hbCxcbiAgdHlwZSBTdHJlYW0sXG59IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQge1xuICBBVl9DT0RFQ19GTEFHX0dMT0JBTF9IRUFERVIsXG4gIHR5cGUgQVZDb2xvclJhbmdlLFxuICBBVkVSUk9SX0VBR0FJTixcbiAgQVZFUlJPUl9FT0YsXG4gIHR5cGUgQVZQaXhlbEZvcm1hdCxcbiAgdHlwZSBGRlZpZGVvRW5jb2Rlcixcbn0gZnJvbSBcIm5vZGUtYXYvY29uc3RhbnRzXCI7XG5pbXBvcnQgdHlwZSB7IEZvcm1hdE11eGVyIH0gZnJvbSBcIi4vbXV4ZXJcIjtcblxuLy8gbm9kZS1hdiA1LjIuMyBjb25zdGFudCBpcyB3cm9uZzsgZmZtcGVnIHJlZ2lzdGVycyB3aXRoIGRhc2guXG5leHBvcnQgY29uc3QgRkZfRU5DT0RFUl9MSUJWUFhfVlA5ID0gXCJsaWJ2cHgtdnA5XCIgYXMgRkZWaWRlb0VuY29kZXI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmlkZW9DdHhPcHRpb25zIHtcbiAgY29kZWM6IENvZGVjO1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgZnBzOiBudW1iZXI7XG4gIGJpdHJhdGU6IG51bWJlcjtcbiAgcGl4ZWxGb3JtYXQ6IEFWUGl4ZWxGb3JtYXQ7XG4gIGNvZGVjVGFnPzogc3RyaW5nO1xuICBjb2xvclJhbmdlPzogQVZDb2xvclJhbmdlO1xuICBvcHRpb25zPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgaHdGcmFtZXNDdHg/OiBIYXJkd2FyZUZyYW1lc0NvbnRleHQ7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBvcGVuVmlkZW9DdHgob3B0czogVmlkZW9DdHhPcHRpb25zLCBsYWJlbDogc3RyaW5nKTogUHJvbWlzZTxDb2RlY0NvbnRleHQ+IHtcbiAgY29uc3QgY3R4ID0gbmV3IENvZGVjQ29udGV4dCgpO1xuICBjdHguYWxsb2NDb250ZXh0MyhvcHRzLmNvZGVjKTtcbiAgLy8gUGFydGlhbC1jb25zdHJ1Y3Rpb24gc2FmZXR5OiBmcmVlIGN0eCBpZiBhbnkgc2V0dGVyL29wZW4yIHRocm93cyBiZWZvcmUgd2UgcmV0dXJuIGl0LlxuICB1c2luZyBzdGFjayA9IG5ldyBEaXNwb3NhYmxlU3RhY2soKTtcbiAgc3RhY2sudXNlKGN0eCk7XG4gIGN0eC5jb2RlY0lkID0gb3B0cy5jb2RlYy5pZDtcbiAgY3R4LndpZHRoID0gb3B0cy53aWR0aDtcbiAgY3R4LmhlaWdodCA9IG9wdHMuaGVpZ2h0O1xuICBjdHgucGl4ZWxGb3JtYXQgPSBvcHRzLnBpeGVsRm9ybWF0O1xuICBjdHgudGltZUJhc2UgPSBuZXcgUmF0aW9uYWwoMSwgb3B0cy5mcHMpO1xuICBjdHguZnJhbWVyYXRlID0gbmV3IFJhdGlvbmFsKG9wdHMuZnBzLCAxKTtcbiAgY3R4LmdvcFNpemUgPSBvcHRzLmZwcyAqIDI7XG4gIGN0eC5iaXRSYXRlID0gQmlnSW50KG9wdHMuYml0cmF0ZSk7XG4gIGN0eC5zZXRGbGFncyhBVl9DT0RFQ19GTEFHX0dMT0JBTF9IRUFERVIpO1xuICBpZiAob3B0cy5jb2RlY1RhZykge1xuICAgIGN0eC5jb2RlY1RhZyA9IG9wdHMuY29kZWNUYWc7XG4gIH1cbiAgaWYgKG9wdHMuY29sb3JSYW5nZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY3R4LmNvbG9yUmFuZ2UgPSBvcHRzLmNvbG9yUmFuZ2U7XG4gIH1cbiAgaWYgKG9wdHMuaHdGcmFtZXNDdHgpIHtcbiAgICBjdHguaHdGcmFtZXNDdHggPSBvcHRzLmh3RnJhbWVzQ3R4O1xuICB9XG4gIGZvciAoY29uc3QgW2ssIHZdIG9mIE9iamVjdC5lbnRyaWVzKG9wdHMub3B0aW9ucyA/PyB7fSkpIHtcbiAgICBjdHguc2V0T3B0aW9uKGssIHYpO1xuICB9XG4gIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCBjdHgub3BlbjIob3B0cy5jb2RlYywgbnVsbCksIGxhYmVsKTtcbiAgc3RhY2subW92ZSgpO1xuICByZXR1cm4gY3R4O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWFrZUZyYW1lKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyLCBwaXhGbXQ6IEFWUGl4ZWxGb3JtYXQpOiBGcmFtZSB7XG4gIGNvbnN0IGZyYW1lID0gbmV3IEZyYW1lKCk7XG4gIGZyYW1lLmFsbG9jKCk7XG4gIC8vIFBhcnRpYWwtY29uc3RydWN0aW9uIHNhZmV0eTogZnJlZSBmcmFtZSBpZiBnZXRCdWZmZXIgdGhyb3dzIGJlZm9yZSB3ZSByZXR1cm4gaXQuXG4gIHVzaW5nIHN0YWNrID0gbmV3IERpc3Bvc2FibGVTdGFjaygpO1xuICBzdGFjay51c2UoZnJhbWUpO1xuICBmcmFtZS5mb3JtYXQgPSBwaXhGbXQ7XG4gIGZyYW1lLndpZHRoID0gd2lkdGg7XG4gIGZyYW1lLmhlaWdodCA9IGhlaWdodDtcbiAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGZyYW1lLmdldEJ1ZmZlcigwKSwgXCJmcmFtZS5nZXRCdWZmZXJcIik7XG4gIHN0YWNrLm1vdmUoKTtcbiAgcmV0dXJuIGZyYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWFrZVBhY2tldCgpOiBQYWNrZXQge1xuICBjb25zdCBwa3QgPSBuZXcgUGFja2V0KCk7XG4gIHBrdC5hbGxvYygpO1xuICByZXR1cm4gcGt0O1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZHJhaW5QYWNrZXRzKGN0eDogQ29kZWNDb250ZXh0LCBwa3Q6IFBhY2tldCwgc3RyZWFtOiBTdHJlYW0sIG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICB3aGlsZSAodHJ1ZSkge1xuICAgIGNvbnN0IHIgPSBhd2FpdCBjdHgucmVjZWl2ZVBhY2tldChwa3QpO1xuICAgIGlmIChyID09PSBBVkVSUk9SX0VBR0FJTiB8fCByID09PSBBVkVSUk9SX0VPRikge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IociwgXCJyZWNlaXZlUGFja2V0XCIpO1xuICAgICAgcGt0LnN0cmVhbUluZGV4ID0gc3RyZWFtLmluZGV4O1xuICAgICAgaWYgKHBrdC5kdXJhdGlvbiA9PT0gMG4pIHtcbiAgICAgICAgcGt0LmR1cmF0aW9uID0gMW47XG4gICAgICB9XG4gICAgICBwa3QucmVzY2FsZVRzKGN0eC50aW1lQmFzZSwgc3RyZWFtLnRpbWVCYXNlKTtcbiAgICAgIGF3YWl0IG11eGVyLndyaXRlUGFja2V0KHBrdCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHBrdC51bnJlZigpO1xuICAgIH1cbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8wMy5cblxuaW1wb3J0IHsgb2sgfSBmcm9tIFwibm9kZTphc3NlcnRcIjtcbmltcG9ydCB7XG4gIEFWX1BJWF9GTVRfQkdSQSxcbiAgQVZfUElYX0ZNVF9ZVVZBNDIwUCxcbiAgdHlwZSBBVlBpeGVsRm9ybWF0LFxuICBDb2RlYyxcbiAgQ29kZWNDb250ZXh0LFxuICBGRl9ERUNPREVSX1BORyxcbiAgRkZtcGVnRXJyb3IsXG4gIHR5cGUgRnJhbWUsXG4gIHR5cGUgUGFja2V0LFxuICBTb2Z0d2FyZVNjYWxlQ29udGV4dCxcbiAgU1dTX0JJTElORUFSLFxufSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHsgbWFrZUZyYW1lLCBtYWtlUGFja2V0IH0gZnJvbSBcIi4vbWlzY1wiO1xuXG5leHBvcnQgY2xhc3MgQ29kZWNTdGF0ZSBpbXBsZW1lbnRzIERpc3Bvc2FibGUge1xuICByZWFkb25seSBzcmM6IEZyYW1lO1xuICByZWFkb25seSBkc3Q6IEZyYW1lO1xuICByZWFkb25seSBwa3Q6IFBhY2tldDtcbiAgcHJpdmF0ZSBfc3dzPzogU29mdHdhcmVTY2FsZUNvbnRleHQ7XG4gIHByaXZhdGUgX3BuZz86IENvZGVjO1xuXG4gIHN0YXRpYyBhc3luYyBjcmVhdGUod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpIHtcbiAgICBjb25zdCBjb2RlYyA9IENvZGVjLmZpbmREZWNvZGVyQnlOYW1lKEZGX0RFQ09ERVJfUE5HKTtcbiAgICBvayhjb2RlYywgXCJwbmcgZGVjb2RlciB1bmF2YWlsYWJsZVwiKTtcbiAgICByZXR1cm4gbmV3IENvZGVjU3RhdGUod2lkdGgsIGhlaWdodCwgY29kZWMpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcih3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlciwgcG5nOiBDb2RlYykge1xuICAgIHRoaXMuX3BuZyA9IHBuZztcbiAgICB0aGlzLnNyYyA9IG1ha2VGcmFtZSh3aWR0aCwgaGVpZ2h0LCBBVl9QSVhfRk1UX0JHUkEpO1xuICAgIHRoaXMuZHN0ID0gbWFrZUZyYW1lKHdpZHRoLCBoZWlnaHQsIEFWX1BJWF9GTVRfWVVWQTQyMFApO1xuICAgIHRoaXMucGt0ID0gbWFrZVBhY2tldCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIGZyZXNoIFBORyBkZWNvZGVyIGNvbnRleHQuXG4gICAqIFRoZSBGRm1wZWcgUE5HIGRlY29kZXIgYWNjdW11bGF0ZXMgQVBORyBibGVuZGluZyBzdGF0ZVxuICAgKiBhY3Jvc3MgZnJhbWVzLCBzbyBhIHNoYXJlZCBpbnN0YW5jZSBjb3JydXB0cyBvdXRwdXQgd2hlbiBkZWNvZGluZyBzdGFuZGFsb25lIFBOR3MuXG4gICAqL1xuICBhc3luYyBwbmcoKTogUHJvbWlzZTxDb2RlY0NvbnRleHQ+IHtcbiAgICAvLyBQYXJ0aWFsLWNvbnN0cnVjdGlvbiBzYWZldHk6IGZyZWUgdGhlIGN0eCBpZiBvcGVuMiB0aHJvd3M7IG1vdmUoKSBkaXNvd25zIG9uIHN1Y2Nlc3MuXG4gICAgdXNpbmcgc3RhY2sgPSBuZXcgRGlzcG9zYWJsZVN0YWNrKCk7XG4gICAgY29uc3QgcG5nID0gbmV3IENvZGVjQ29udGV4dCgpO1xuICAgIHBuZy5hbGxvY0NvbnRleHQzKHRoaXMuX3BuZyk7XG4gICAgc3RhY2sudXNlKHBuZyk7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IHBuZy5vcGVuMih0aGlzLl9wbmcpLCBcInBuZ0RlY29kZXIub3BlbjJcIik7XG4gICAgc3RhY2subW92ZSgpO1xuICAgIHJldHVybiBwbmc7XG4gIH1cblxuICBhc3luYyBkZWNvZGVQTkcocG5nRGF0YTogQnVmZmVyKTogUHJvbWlzZTxGcmFtZT4ge1xuICAgIHVzaW5nIHBuZyA9IGF3YWl0IHRoaXMucG5nKCk7XG4gICAgdGhpcy5wa3QuZGF0YSA9IHBuZ0RhdGE7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IHBuZy5zZW5kUGFja2V0KHRoaXMucGt0KSwgXCJwbmdEZWNvZGVyLnNlbmRQYWNrZXRcIik7XG4gICAgdGhpcy5wa3QudW5yZWYoKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgcG5nLnJlY2VpdmVGcmFtZSh0aGlzLnNyYyksIFwicG5nRGVjb2Rlci5yZWNlaXZlRnJhbWVcIik7XG4gICAgcmV0dXJuIHRoaXMuc3JjO1xuICB9XG5cbiAgZ2V0IHN3cygpIHtcbiAgICBpZiAoIXRoaXMuX3N3cykge1xuICAgICAgY29uc3Qgc3dzID0gbmV3IFNvZnR3YXJlU2NhbGVDb250ZXh0KCk7XG4gICAgICBjb25zdCBmbXQgPSB0aGlzLnNyYy5mb3JtYXQgYXMgQVZQaXhlbEZvcm1hdDtcbiAgICAgIHN3cy5nZXRDb250ZXh0KFxuICAgICAgICB0aGlzLnNyYy53aWR0aCxcbiAgICAgICAgdGhpcy5zcmMuaGVpZ2h0LFxuICAgICAgICBmbXQsXG4gICAgICAgIHRoaXMuc3JjLndpZHRoLFxuICAgICAgICB0aGlzLnNyYy5oZWlnaHQsXG4gICAgICAgIEFWX1BJWF9GTVRfWVVWQTQyMFAsXG4gICAgICAgIFNXU19CSUxJTkVBUixcbiAgICAgICk7XG4gICAgICB0aGlzLl9zd3MgPSBzd3M7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9zd3M7XG4gIH1cblxuICBbU3ltYm9sLmRpc3Bvc2VdKCk6IHZvaWQge1xuICAgIHRoaXMuc3JjW1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgIHRoaXMuZHN0W1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgIHRoaXMucGt0W1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgIHRoaXMuX3N3cz8uW1N5bWJvbC5kaXNwb3NlXSgpO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzAxLlxuXG5pbXBvcnQge1xuICBDb2RlYyxcbiAgQ29kZWNDb250ZXh0LFxuICBGRm1wZWdFcnJvcixcbiAgRmlsdGVyLFxuICB0eXBlIEZpbHRlckNvbnRleHQsXG4gIEZpbHRlckdyYXBoLFxuICBGaWx0ZXJJbk91dCxcbiAgRnJhbWUsXG4gIHR5cGUgUGFja2V0LFxuICBSYXRpb25hbCxcbiAgdHlwZSBTdHJlYW0sXG59IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQge1xuICBBVl9DSEFOTkVMX0xBWU9VVF9TVEVSRU8sXG4gIEFWX0NPREVDX0ZMQUdfR0xPQkFMX0hFQURFUixcbiAgQVZfU0FNUExFX0ZNVF9GTFQsXG4gIEFWX1NBTVBMRV9GTVRfRkxUUCxcbiAgQVZFUlJPUl9FQUdBSU4sXG4gIEFWRVJST1JfRU9GLFxuICB0eXBlIEZGQXVkaW9FbmNvZGVyLFxufSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcbmltcG9ydCB7IGRyYWluUGFja2V0cywgbWFrZVBhY2tldCB9IGZyb20gXCIuL21pc2NcIjtcbmltcG9ydCB0eXBlIHsgRm9ybWF0TXV4ZXIgfSBmcm9tIFwiLi9tdXhlclwiO1xuXG5jb25zdCBTQU1QTEVfRk1UX05BTUU6IFBhcnRpYWw8UmVjb3JkPG51bWJlciwgc3RyaW5nPj4gPSB7IFtBVl9TQU1QTEVfRk1UX0ZMVF06IFwiZmx0XCIsIFtBVl9TQU1QTEVfRk1UX0ZMVFBdOiBcImZsdHBcIiB9O1xuXG5leHBvcnQgaW50ZXJmYWNlIEF1ZGlvRW5jb2Rlck9wdGlvbnMge1xuICBvdXRTYW1wbGVSYXRlOiBudW1iZXI7XG4gIG91dFNhbXBsZUZtdDogdHlwZW9mIEFWX1NBTVBMRV9GTVRfRkxUIHwgdHlwZW9mIEFWX1NBTVBMRV9GTVRfRkxUUDtcbiAgY29kZWNOYW1lOiBGRkF1ZGlvRW5jb2RlcjtcbiAgZ2xvYmFsSGVhZGVyOiBib29sZWFuO1xuICBiaXRyYXRlOiBudW1iZXI7XG4gIG11eGVyOiBGb3JtYXRNdXhlcjtcbn1cblxuZXhwb3J0IGNsYXNzIEF1ZGlvRW5jb2RlciBpbXBsZW1lbnRzIERpc3Bvc2FibGUge1xuICBwcml2YXRlIF9jdHg6IENvZGVjQ29udGV4dDtcbiAgcHJpdmF0ZSBfc3RyZWFtOiBTdHJlYW07XG4gIHByaXZhdGUgX3BrdDogUGFja2V0O1xuICBwcml2YXRlIF9vdXRSYXRlOiBudW1iZXI7XG4gIHByaXZhdGUgX291dEZtdDogdHlwZW9mIEFWX1NBTVBMRV9GTVRfRkxUIHwgdHlwZW9mIEFWX1NBTVBMRV9GTVRfRkxUUDtcbiAgcHJpdmF0ZSBfZnJhbWVTaXplOiBudW1iZXI7XG4gIHByaXZhdGUgX2ZpbHRlckZyYW1lOiBGcmFtZTtcbiAgcHJpdmF0ZSBfZ3JhcGg/OiBGaWx0ZXJHcmFwaDtcbiAgcHJpdmF0ZSBfYnVmU3JjPzogRmlsdGVyQ29udGV4dDtcbiAgcHJpdmF0ZSBfYnVmU2luaz86IEZpbHRlckNvbnRleHQ7XG4gIHByaXZhdGUgX2luUmF0ZT86IG51bWJlcjtcbiAgcHJpdmF0ZSBfcHRzID0gMG47XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihjdHg6IENvZGVjQ29udGV4dCwgc3RyZWFtOiBTdHJlYW0sIG91dEZtdDogdHlwZW9mIEFWX1NBTVBMRV9GTVRfRkxUIHwgdHlwZW9mIEFWX1NBTVBMRV9GTVRfRkxUUCkge1xuICAgIHRoaXMuX2N0eCA9IGN0eDtcbiAgICB0aGlzLl9zdHJlYW0gPSBzdHJlYW07XG4gICAgdGhpcy5fb3V0UmF0ZSA9IGN0eC5zYW1wbGVSYXRlO1xuICAgIHRoaXMuX291dEZtdCA9IG91dEZtdDtcbiAgICB0aGlzLl9mcmFtZVNpemUgPSBjdHguZnJhbWVTaXplO1xuICAgIHRoaXMuX3BrdCA9IG1ha2VQYWNrZXQoKTtcbiAgICB0aGlzLl9maWx0ZXJGcmFtZSA9IG5ldyBGcmFtZSgpO1xuICAgIHRoaXMuX2ZpbHRlckZyYW1lLmFsbG9jKCk7XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgY3JlYXRlKG9wdHM6IEF1ZGlvRW5jb2Rlck9wdGlvbnMpOiBQcm9taXNlPEF1ZGlvRW5jb2Rlcj4ge1xuICAgIGNvbnN0IGNvZGVjID0gQ29kZWMuZmluZEVuY29kZXJCeU5hbWUob3B0cy5jb2RlY05hbWUpO1xuICAgIGlmICghY29kZWMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQXVkaW8gZW5jb2RlciBub3QgZm91bmQ6ICR7b3B0cy5jb2RlY05hbWV9YCk7XG4gICAgfVxuICAgIC8vIFBhcnRpYWwtY29uc3RydWN0aW9uIHNhZmV0eTogc3RhY2sgZnJlZXMgY3R4IGlmIGEgbGF0ZXIgc3RlcCB0aHJvd3M7IG1vdmUoKSBkaXNvd25zIG9uIHN1Y2Nlc3MuXG4gICAgdXNpbmcgc3RhY2sgPSBuZXcgRGlzcG9zYWJsZVN0YWNrKCk7XG4gICAgY29uc3QgY3R4ID0gbmV3IENvZGVjQ29udGV4dCgpO1xuICAgIGN0eC5hbGxvY0NvbnRleHQzKGNvZGVjKTtcbiAgICBzdGFjay51c2UoY3R4KTtcbiAgICBjdHguY29kZWNJZCA9IGNvZGVjLmlkO1xuICAgIGN0eC5zYW1wbGVGb3JtYXQgPSBvcHRzLm91dFNhbXBsZUZtdDtcbiAgICBjdHguc2FtcGxlUmF0ZSA9IG9wdHMub3V0U2FtcGxlUmF0ZTtcbiAgICBjdHguY2hhbm5lbExheW91dCA9IEFWX0NIQU5ORUxfTEFZT1VUX1NURVJFTztcbiAgICBjdHgudGltZUJhc2UgPSBuZXcgUmF0aW9uYWwoMSwgb3B0cy5vdXRTYW1wbGVSYXRlKTtcbiAgICBjdHguYml0UmF0ZSA9IEJpZ0ludChvcHRzLmJpdHJhdGUpO1xuICAgIGlmIChvcHRzLmdsb2JhbEhlYWRlcikge1xuICAgICAgY3R4LnNldEZsYWdzKEFWX0NPREVDX0ZMQUdfR0xPQkFMX0hFQURFUik7XG4gICAgfVxuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCBjdHgub3BlbjIoY29kZWMsIG51bGwpLCBcImF1ZGlvQ3R4Lm9wZW4yXCIpO1xuICAgIGNvbnN0IHN0cmVhbSA9IG9wdHMubXV4ZXIuYWRkU3RyZWFtKGN0eCk7XG4gICAgc3RhY2subW92ZSgpO1xuICAgIHJldHVybiBuZXcgQXVkaW9FbmNvZGVyKGN0eCwgc3RyZWFtLCBvcHRzLm91dFNhbXBsZUZtdCk7XG4gIH1cblxuICBzZXRJbnB1dFJhdGUoaW5TYW1wbGVSYXRlOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9ncmFwaD8uW1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgIHRoaXMuX2luUmF0ZSA9IGluU2FtcGxlUmF0ZTtcbiAgICAvLyBQYXJ0aWFsLWNvbnN0cnVjdGlvbiBzYWZldHk6IHN0YWNrIGZyZWVzIHRoZSBncmFwaCBpZiBmaWx0ZXIgc2V0dXAgdGhyb3dzOyBtb3ZlKCkgZGlzb3ducyBvbiBzdWNjZXNzLlxuICAgIHVzaW5nIHN0YWNrID0gbmV3IERpc3Bvc2FibGVTdGFjaygpO1xuICAgIGNvbnN0IGdyYXBoID0gbmV3IEZpbHRlckdyYXBoKCk7XG4gICAgZ3JhcGguYWxsb2MoKTtcbiAgICBzdGFjay51c2UoZ3JhcGgpO1xuICAgIGNvbnN0IGFidWZmZXIgPSBGaWx0ZXIuZ2V0QnlOYW1lKFwiYWJ1ZmZlclwiKSE7XG4gICAgY29uc3QgYnVmU3JjID0gZ3JhcGguY3JlYXRlRmlsdGVyKFxuICAgICAgYWJ1ZmZlcixcbiAgICAgIFwic3JjXCIsXG4gICAgICBgc2FtcGxlX3JhdGU9JHtpblNhbXBsZVJhdGV9OnNhbXBsZV9mbXQ9Zmx0OmNoYW5uZWxfbGF5b3V0PXN0ZXJlbzp0aW1lX2Jhc2U9MS8ke2luU2FtcGxlUmF0ZX1gLFxuICAgICk7XG4gICAgaWYgKCFidWZTcmMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkZhaWxlZCB0byBjcmVhdGUgYWJ1ZmZlclwiKTtcbiAgICB9XG4gICAgY29uc3QgYWJ1ZmZlcnNpbmsgPSBGaWx0ZXIuZ2V0QnlOYW1lKFwiYWJ1ZmZlcnNpbmtcIikhO1xuICAgIGNvbnN0IGJ1ZlNpbmsgPSBncmFwaC5jcmVhdGVGaWx0ZXIoYWJ1ZmZlcnNpbmssIFwic2lua1wiKTtcbiAgICBpZiAoIWJ1ZlNpbmspIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkZhaWxlZCB0byBjcmVhdGUgYWJ1ZmZlcnNpbmtcIik7XG4gICAgfVxuICAgIGNvbnN0IGZtdE5hbWUgPSBTQU1QTEVfRk1UX05BTUVbdGhpcy5fb3V0Rm10XSA/PyBcImZsdFwiO1xuICAgIGNvbnN0IGZpbHRlckRlc2MgPSBgYWZvcm1hdD1zYW1wbGVfZm10cz0ke2ZtdE5hbWV9OnNhbXBsZV9yYXRlcz0ke3RoaXMuX291dFJhdGV9OmNoYW5uZWxfbGF5b3V0cz1zdGVyZW8sYXNldG5zYW1wbGVzPW49JHt0aGlzLl9mcmFtZVNpemV9OnA9MWA7XG4gICAgY29uc3Qgb3V0cHV0cyA9IEZpbHRlckluT3V0LmNyZWF0ZUxpc3QoW3sgbmFtZTogXCJpblwiLCBmaWx0ZXJDdHg6IGJ1ZlNyYywgcGFkSWR4OiAwIH1dKTtcbiAgICBjb25zdCBpbnB1dHMgPSBGaWx0ZXJJbk91dC5jcmVhdGVMaXN0KFt7IG5hbWU6IFwib3V0XCIsIGZpbHRlckN0eDogYnVmU2luaywgcGFkSWR4OiAwIH1dKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoZ3JhcGgucGFyc2VQdHIoZmlsdGVyRGVzYywgaW5wdXRzLCBvdXRwdXRzKSwgXCJncmFwaC5wYXJzZVB0clwiKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoZ3JhcGguY29uZmlnU3luYygpLCBcImdyYXBoLmNvbmZpZ1wiKTtcbiAgICBzdGFjay5tb3ZlKCk7XG4gICAgdGhpcy5fZ3JhcGggPSBncmFwaDtcbiAgICB0aGlzLl9idWZTcmMgPSBidWZTcmM7XG4gICAgdGhpcy5fYnVmU2luayA9IGJ1ZlNpbms7XG4gIH1cblxuICBhc3luYyBlbmNvZGUocGNtOiBCdWZmZXIsIG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5fYnVmU3JjIHx8ICF0aGlzLl9pblJhdGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgc3JjID0gbmV3IEZsb2F0MzJBcnJheShwY20uYnVmZmVyLCBwY20uYnl0ZU9mZnNldCwgcGNtLmJ5dGVMZW5ndGggLyA0KTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNyYy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUoc3JjW2ldISkpIHtcbiAgICAgICAgc3JjW2ldID0gMDtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgblNhbXBsZXMgPSBzcmMubGVuZ3RoID4+IDE7XG4gICAgdXNpbmcgZnJhbWUgPSBGcmFtZS5mcm9tQXVkaW9CdWZmZXIoQnVmZmVyLmZyb20oc3JjLmJ1ZmZlciwgc3JjLmJ5dGVPZmZzZXQsIHNyYy5ieXRlTGVuZ3RoKSwge1xuICAgICAgbmJTYW1wbGVzOiBuU2FtcGxlcyxcbiAgICAgIGZvcm1hdDogQVZfU0FNUExFX0ZNVF9GTFQsXG4gICAgICBzYW1wbGVSYXRlOiB0aGlzLl9pblJhdGUsXG4gICAgICBjaGFubmVsTGF5b3V0OiBBVl9DSEFOTkVMX0xBWU9VVF9TVEVSRU8sXG4gICAgICBwdHM6IHRoaXMuX3B0cyxcbiAgICAgIHRpbWVCYXNlOiB7IG51bTogMSwgZGVuOiB0aGlzLl9pblJhdGUgfSxcbiAgICB9KTtcbiAgICB0aGlzLl9wdHMgKz0gQmlnSW50KG5TYW1wbGVzKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgdGhpcy5fYnVmU3JjLmJ1ZmZlcnNyY0FkZEZyYW1lKGZyYW1lKSwgXCJidWZmZXJzcmNBZGRGcmFtZVwiKTtcbiAgICBhd2FpdCB0aGlzLmRyYWluKG11eGVyKTtcbiAgfVxuXG4gIGFzeW5jIGZsdXNoKG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9idWZTcmMpIHtcbiAgICAgIGF3YWl0IHRoaXMuX2J1ZlNyYy5idWZmZXJzcmNBZGRGcmFtZShudWxsKTtcbiAgICAgIGF3YWl0IHRoaXMuZHJhaW4obXV4ZXIpO1xuICAgIH1cbiAgICBhd2FpdCB0aGlzLl9jdHguc2VuZEZyYW1lKG51bGwpO1xuICAgIGF3YWl0IHRoaXMuZHJhaW5Db2RlYyhtdXhlcik7XG4gIH1cblxuICBbU3ltYm9sLmRpc3Bvc2VdKCk6IHZvaWQge1xuICAgIHRoaXMuX3BrdC5mcmVlKCk7XG4gICAgdGhpcy5fZmlsdGVyRnJhbWUuZnJlZSgpO1xuICAgIHRoaXMuX2dyYXBoPy5bU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgdGhpcy5fY3R4LmZyZWVDb250ZXh0KCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGRyYWluKG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBjb25zdCByID0gYXdhaXQgdGhpcy5fYnVmU2luayEuYnVmZmVyc2lua0dldEZyYW1lKHRoaXMuX2ZpbHRlckZyYW1lKTtcbiAgICAgIGlmIChyID09PSBBVkVSUk9SX0VBR0FJTiB8fCByID09PSBBVkVSUk9SX0VPRikge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHRyeSB7XG4gICAgICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihyLCBcImJ1ZmZlcnNpbmtHZXRGcmFtZVwiKTtcbiAgICAgICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IHRoaXMuX2N0eC5zZW5kRnJhbWUodGhpcy5fZmlsdGVyRnJhbWUpLCBcImF1ZGlvQ3R4LnNlbmRGcmFtZVwiKTtcbiAgICAgICAgYXdhaXQgdGhpcy5kcmFpbkNvZGVjKG11eGVyKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMuX2ZpbHRlckZyYW1lLnVucmVmKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBkcmFpbkNvZGVjKG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBkcmFpblBhY2tldHModGhpcy5fY3R4LCB0aGlzLl9wa3QsIHRoaXMuX3N0cmVhbSwgbXV4ZXIpO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzEzLlxuXG5leHBvcnQgZnVuY3Rpb24gcGFja0JpdHMoYml0czogbnVtYmVyW10pOiBCdWZmZXIge1xuICBjb25zdCBidWYgPSBCdWZmZXIuYWxsb2MoYml0cy5sZW5ndGggPj4gMyk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYnVmLmxlbmd0aDsgaSsrKSB7XG4gICAgbGV0IGJ5dGUgPSAwO1xuICAgIGZvciAobGV0IGIgPSAwOyBiIDwgODsgYisrKSB7XG4gICAgICBieXRlID0gKGJ5dGUgPDwgMSkgfCBiaXRzW2kgKiA4ICsgYl0hO1xuICAgIH1cbiAgICBidWZbaV0gPSBieXRlO1xuICB9XG4gIHJldHVybiBidWY7XG59XG5cbmV4cG9ydCBjbGFzcyBCaXRXcml0ZXIge1xuICBiaXRzOiBudW1iZXJbXSA9IFtdO1xuICB3KHZhbDogbnVtYmVyLCBuOiBudW1iZXIpIHtcbiAgICBmb3IgKGxldCBpID0gbiAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICB0aGlzLmJpdHMucHVzaCgodmFsID4+IGkpICYgMSk7XG4gICAgfVxuICB9XG4gIGZsYWcodmFsOiBib29sZWFuIHwgbnVtYmVyKSB7XG4gICAgdGhpcy5iaXRzLnB1c2godmFsID8gMSA6IDApO1xuICB9XG4gIHVlKHZhbDogbnVtYmVyKSB7XG4gICAgY29uc3QgdiA9IHZhbCArIDE7XG4gICAgY29uc3QgbGVuID0gMzIgLSBNYXRoLmNsejMyKHYpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuIC0gMTsgaSsrKSB7XG4gICAgICB0aGlzLmJpdHMucHVzaCgwKTtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IGxlbiAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICB0aGlzLmJpdHMucHVzaCgodiA+PiBpKSAmIDEpO1xuICAgIH1cbiAgfVxuICBhbGlnbihwYWQ6IG51bWJlcikge1xuICAgIHdoaWxlICh0aGlzLmJpdHMubGVuZ3RoICUgOCAhPT0gMCkge1xuICAgICAgdGhpcy5iaXRzLnB1c2gocGFkKTtcbiAgICB9XG4gIH1cbiAgY29weShzcmM6IG51bWJlcltdLCBzdGFydDogbnVtYmVyLCBsZW46IG51bWJlcikge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIHRoaXMuYml0cy5wdXNoKHNyY1tzdGFydCArIGldISk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBCaXRSZWFkZXIge1xuICBwcml2YXRlIF9iaXRzOiBudW1iZXJbXTtcbiAgcG9zID0gMDtcbiAgY29uc3RydWN0b3IoZGF0YTogQnVmZmVyKSB7XG4gICAgdGhpcy5fYml0cyA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgZm9yIChsZXQgYiA9IDc7IGIgPj0gMDsgYi0tKSB7XG4gICAgICAgIHRoaXMuX2JpdHMucHVzaCgoZGF0YVtpXSEgPj4gYikgJiAxKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgZ2V0IGJpdHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2JpdHM7XG4gIH1cbiAgcmVhZChuOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGxldCB2YWwgPSAwO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbjsgaSsrKSB7XG4gICAgICB2YWwgPSAodmFsIDw8IDEpIHwgdGhpcy5fYml0c1t0aGlzLnBvcysrXSE7XG4gICAgfVxuICAgIHJldHVybiB2YWw7XG4gIH1cbiAgcmVhZFVlKCk6IG51bWJlciB7XG4gICAgbGV0IHplcm9zID0gMDtcbiAgICB3aGlsZSAodGhpcy5fYml0c1t0aGlzLnBvc10gPT09IDApIHtcbiAgICAgIHplcm9zKys7XG4gICAgICB0aGlzLnBvcysrO1xuICAgIH1cbiAgICB0aGlzLnBvcysrO1xuICAgIGxldCB2YWwgPSAxO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgemVyb3M7IGkrKykge1xuICAgICAgdmFsID0gKHZhbCA8PCAxKSB8IHRoaXMuX2JpdHNbdGhpcy5wb3MrK10hO1xuICAgIH1cbiAgICByZXR1cm4gdmFsIC0gMTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8xMi5cblxuY29uc3QgTkFMX0hFQURFUl9TSVpFID0gMjtcbmNvbnN0IEFOTkVYX0JfU1RBUlRfQ09ERSA9IEJ1ZmZlci5mcm9tKFsweDAwLCAweDAwLCAweDAwLCAweDAxXSk7XG5cbmV4cG9ydCB7IEFOTkVYX0JfU1RBUlRfQ09ERSwgTkFMX0hFQURFUl9TSVpFIH07XG5cbi8vIEhFVkMgTkFMIHVuaXQgdHlwZXMgKFQtUkVDLUguMjY1IFRhYmxlIDctMSlcbmV4cG9ydCBjb25zdCBOQUxfQkxBX1dfTFAgPSAxNjtcbmV4cG9ydCBjb25zdCBOQUxfSURSX1dfUkFETCA9IDE5O1xuZXhwb3J0IGNvbnN0IE5BTF9JRFJfTl9MUCA9IDIwO1xuZXhwb3J0IGNvbnN0IE5BTF9SU1ZfSVJBUF9WQ0wyMyA9IDIzO1xuZXhwb3J0IGNvbnN0IE5BTF9WUFMgPSAzMjtcbmV4cG9ydCBjb25zdCBOQUxfU1BTID0gMzM7XG5leHBvcnQgY29uc3QgTkFMX1BQUyA9IDM0O1xuZXhwb3J0IGNvbnN0IE5BTF9TRUlfUFJFRklYID0gMzk7XG5leHBvcnQgY29uc3QgTkFMX1NFSV9TVUZGSVggPSA0MDtcblxuZXhwb3J0IGludGVyZmFjZSBOYWxVbml0IHtcbiAgdHlwZTogbnVtYmVyO1xuICBsYXllcklkOiBudW1iZXI7XG4gIGRhdGE6IEJ1ZmZlcjtcbn1cblxuZnVuY3Rpb24gcGFyc2VOYWxUeXBlKGhlYWRlcjA6IG51bWJlciwgaGVhZGVyMTogbnVtYmVyKTogeyB0eXBlOiBudW1iZXI7IGxheWVySWQ6IG51bWJlcjsgdGVtcG9yYWxJZDogbnVtYmVyIH0ge1xuICBjb25zdCB0eXBlID0gKGhlYWRlcjAgPj4gMSkgJiAweDNmO1xuICBjb25zdCBsYXllcklkID0gKChoZWFkZXIwICYgMSkgPDwgNSkgfCAoKGhlYWRlcjEgPj4gMykgJiAweDFmKTtcbiAgY29uc3QgdGVtcG9yYWxJZCA9IGhlYWRlcjEgJiAweDA3O1xuICByZXR1cm4geyB0eXBlLCBsYXllcklkLCB0ZW1wb3JhbElkIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbmNvZGVOYWxIZWFkZXIodHlwZTogbnVtYmVyLCBsYXllcklkOiBudW1iZXIsIHRlbXBvcmFsSWQ6IG51bWJlcik6IFtudW1iZXIsIG51bWJlcl0ge1xuICBjb25zdCBieXRlMCA9ICgodHlwZSAmIDB4M2YpIDw8IDEpIHwgKChsYXllcklkID4+IDUpICYgMSk7XG4gIGNvbnN0IGJ5dGUxID0gKChsYXllcklkICYgMHgxZikgPDwgMykgfCAodGVtcG9yYWxJZCAmIDB4MDcpO1xuICByZXR1cm4gW2J5dGUwLCBieXRlMV07XG59XG5cbi8qKiBTcGxpdCBBbm5leCBCIGJpdHN0cmVhbSBpbnRvIE5BTCB1bml0cy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzcGxpdE5hbFVuaXRzKGJpdHN0cmVhbTogQnVmZmVyKTogTmFsVW5pdFtdIHtcbiAgY29uc3QgbmFsczogTmFsVW5pdFtdID0gW107XG4gIGxldCBpID0gMDtcblxuICB3aGlsZSAoaSA8IGJpdHN0cmVhbS5sZW5ndGgpIHtcbiAgICBsZXQgc2NMZW4gPSAwO1xuICAgIGlmIChpICsgMyA8IGJpdHN0cmVhbS5sZW5ndGggJiYgYml0c3RyZWFtW2ldID09PSAwICYmIGJpdHN0cmVhbVtpICsgMV0gPT09IDAgJiYgYml0c3RyZWFtW2kgKyAyXSA9PT0gMSkge1xuICAgICAgc2NMZW4gPSAzO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICBpICsgNCA8IGJpdHN0cmVhbS5sZW5ndGggJiZcbiAgICAgIGJpdHN0cmVhbVtpXSA9PT0gMCAmJlxuICAgICAgYml0c3RyZWFtW2kgKyAxXSA9PT0gMCAmJlxuICAgICAgYml0c3RyZWFtW2kgKyAyXSA9PT0gMCAmJlxuICAgICAgYml0c3RyZWFtW2kgKyAzXSA9PT0gMVxuICAgICkge1xuICAgICAgc2NMZW4gPSA0O1xuICAgIH0gZWxzZSB7XG4gICAgICBpKys7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCBuYWxTdGFydCA9IGkgKyBzY0xlbjtcbiAgICBpZiAobmFsU3RhcnQgKyBOQUxfSEVBREVSX1NJWkUgPiBiaXRzdHJlYW0ubGVuZ3RoKSB7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBsZXQgbmFsRW5kID0gYml0c3RyZWFtLmxlbmd0aDtcbiAgICBmb3IgKGxldCBqID0gbmFsU3RhcnQgKyBOQUxfSEVBREVSX1NJWkU7IGogPCBiaXRzdHJlYW0ubGVuZ3RoIC0gMjsgaisrKSB7XG4gICAgICBpZiAoXG4gICAgICAgIGJpdHN0cmVhbVtqXSA9PT0gMCAmJlxuICAgICAgICBiaXRzdHJlYW1baiArIDFdID09PSAwICYmXG4gICAgICAgIChiaXRzdHJlYW1baiArIDJdID09PSAxIHx8IChqICsgMyA8IGJpdHN0cmVhbS5sZW5ndGggJiYgYml0c3RyZWFtW2ogKyAyXSA9PT0gMCAmJiBiaXRzdHJlYW1baiArIDNdID09PSAxKSlcbiAgICAgICkge1xuICAgICAgICBuYWxFbmQgPSBqO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCB7IHR5cGUsIGxheWVySWQgfSA9IHBhcnNlTmFsVHlwZShiaXRzdHJlYW1bbmFsU3RhcnRdISwgYml0c3RyZWFtW25hbFN0YXJ0ICsgMV0hKTtcbiAgICBuYWxzLnB1c2goeyB0eXBlLCBsYXllcklkLCBkYXRhOiBiaXRzdHJlYW0uc3ViYXJyYXkobmFsU3RhcnQsIG5hbEVuZCkgfSk7XG4gICAgaSA9IG5hbEVuZDtcbiAgfVxuXG4gIHJldHVybiBuYWxzO1xufVxuXG4vKiogUmV3cml0ZSBudWhfbGF5ZXJfaWQgaW4gYSBOQUwgdW5pdCAocmV0dXJucyBjb3B5KS4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXdyaXRlTmFsTGF5ZXJJZChuYWw6IEJ1ZmZlciwgbGF5ZXJJZDogbnVtYmVyKTogQnVmZmVyIHtcbiAgY29uc3Qgb3V0ID0gQnVmZmVyLmZyb20obmFsKTtcbiAgY29uc3QgeyB0eXBlLCB0ZW1wb3JhbElkIH0gPSBwYXJzZU5hbFR5cGUob3V0WzBdISwgb3V0WzFdISk7XG4gIGNvbnN0IFtiMCwgYjFdID0gZW5jb2RlTmFsSGVhZGVyKHR5cGUsIGxheWVySWQsIHRlbXBvcmFsSWQpO1xuICBvdXRbMF0gPSBiMDtcbiAgb3V0WzFdID0gYjE7XG4gIHJldHVybiBvdXQ7XG59XG5cbi8qKiBSZXdyaXRlIG5hbF91bml0X3R5cGUgaW4gYSBOQUwgdW5pdCAocmV0dXJucyBjb3B5KS4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXdyaXRlTmFsVHlwZShuYWw6IEJ1ZmZlciwgbmV3VHlwZTogbnVtYmVyKTogQnVmZmVyIHtcbiAgY29uc3Qgb3V0ID0gQnVmZmVyLmZyb20obmFsKTtcbiAgY29uc3QgeyBsYXllcklkLCB0ZW1wb3JhbElkIH0gPSBwYXJzZU5hbFR5cGUob3V0WzBdISwgb3V0WzFdISk7XG4gIGNvbnN0IFtiMCwgYjFdID0gZW5jb2RlTmFsSGVhZGVyKG5ld1R5cGUsIGxheWVySWQsIHRlbXBvcmFsSWQpO1xuICBvdXRbMF0gPSBiMDtcbiAgb3V0WzFdID0gYjE7XG4gIHJldHVybiBvdXQ7XG59XG5cbi8qKiBSZW1vdmUgZW11bGF0aW9uIHByZXZlbnRpb24gYnl0ZXMgKDAwIDAwIDAzIOKGkiAwMCAwMCkgZnJvbSBSQlNQLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUVtdWxhdGlvblByZXZlbnRpb24oZGF0YTogQnVmZmVyKTogQnVmZmVyIHtcbiAgY29uc3Qgb3V0OiBudW1iZXJbXSA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoaSArIDIgPCBkYXRhLmxlbmd0aCAmJiBkYXRhW2ldID09PSAwICYmIGRhdGFbaSArIDFdID09PSAwICYmIGRhdGFbaSArIDJdID09PSAzKSB7XG4gICAgICBvdXQucHVzaCgwLCAwKTtcbiAgICAgIGkgKz0gMjtcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0LnB1c2goZGF0YVtpXSEpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gQnVmZmVyLmZyb20ob3V0KTtcbn1cblxuLyoqIEluc2VydCBlbXVsYXRpb24gcHJldmVudGlvbiBieXRlcyAoMDAgMDAgMDMpIGZvciBBbm5leCBCIGNvbXBsaWFuY2UuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkRW11bGF0aW9uUHJldmVudGlvbihuYWw6IEJ1ZmZlcik6IEJ1ZmZlciB7XG4gIGNvbnN0IG91dDogbnVtYmVyW10gPSBbXTtcbiAgb3V0LnB1c2gobmFsWzBdISwgbmFsWzFdISk7XG4gIGxldCB6ZXJvcyA9IDA7XG4gIGZvciAobGV0IGkgPSAyOyBpIDwgbmFsLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKHplcm9zID09PSAyICYmIG5hbFtpXSEgPD0gMykge1xuICAgICAgb3V0LnB1c2goMyk7XG4gICAgICB6ZXJvcyA9IDA7XG4gICAgfVxuICAgIGlmIChuYWxbaV0gPT09IDApIHtcbiAgICAgIHplcm9zKys7XG4gICAgfSBlbHNlIHtcbiAgICAgIHplcm9zID0gMDtcbiAgICB9XG4gICAgb3V0LnB1c2gobmFsW2ldISk7XG4gIH1cbiAgcmV0dXJuIEJ1ZmZlci5mcm9tKG91dCk7XG59XG4iLCIvLyBDb25mb3JtIE5WRU5DIG91dHB1dCB0byBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vYXYtZm91bmRhdGlvbi9IRVZDLVZpZGVvLXdpdGgtQWxwaGEtSW50ZXJvcGVyYWJpbGl0eS1Qcm9maWxlLnBkZlxuXG5pbXBvcnQgeyBCaXRSZWFkZXIsIEJpdFdyaXRlciwgcGFja0JpdHMgfSBmcm9tIFwiLi9iaXRcIjtcbmltcG9ydCB7XG4gIEFOTkVYX0JfU1RBUlRfQ09ERSxcbiAgYWRkRW11bGF0aW9uUHJldmVudGlvbixcbiAgTkFMX0JMQV9XX0xQLFxuICBOQUxfUlNWX0lSQVBfVkNMMjMsXG4gIE5BTF9TUFMsXG4gIE5BTF9WUFMsXG4gIHJlbW92ZUVtdWxhdGlvblByZXZlbnRpb24sXG4gIHNwbGl0TmFsVW5pdHMsXG59IGZyb20gXCIuL25hbFwiO1xuaW1wb3J0IHR5cGUgeyBOdmVuY0hldmNDb25maWcgfSBmcm9tIFwiLi9wYXJzZXJcIjtcblxuLy8gUFRMIGJpdCBvZmZzZXRzIHdpdGhpbiBlbXVsYXRpb24tcHJldmVudGlvbi1zdHJpcHBlZCBOQUwgKE5BTCBoZWFkZXIgaW5jbHVkZWQpLlxuY29uc3QgVlBTX1BUTF9CSVQgPSA0ODsgLy8gMTYgKE5BTCBoZHIpICsgMzIgKFZQUyBwcmVmaXgpXG5jb25zdCBTUFNfUFRMX0JJVCA9IDI0OyAvLyAxNiAoTkFMIGhkcikgKyA4IChTUFMgcHJlZml4KVxuY29uc3QgUFRMX1RJRVJfQklUID0gMjtcbmNvbnN0IFBUTF9DT01QQVQyX0JJVCA9IDEwOyAvLyBwcm9maWxlX3NwYWNlKDIpICsgdGllcigxKSArIGlkYyg1KSArIGNvbXBhdFswLDFdKDIpXG5jb25zdCBTTElDRV9UWVBFX0IgPSAwO1xuY29uc3QgU0xJQ0VfVFlQRV9QID0gMTtcblxuZnVuY3Rpb24gc2V0Qml0KGJ1ZjogQnVmZmVyLCBiaXRPZmZzZXQ6IG51bWJlciwgdmFsdWU6IDAgfCAxKTogdm9pZCB7XG4gIGNvbnN0IGJ5dGUgPSBiaXRPZmZzZXQgPj4gMztcbiAgY29uc3QgbWFzayA9IDEgPDwgKDcgLSAoYml0T2Zmc2V0ICYgNykpO1xuICBjb25zdCBjdXIgPSBidWZbYnl0ZV0gPz8gMDtcbiAgYnVmW2J5dGVdID0gdmFsdWUgPyBjdXIgfCBtYXNrIDogY3VyICYgfm1hc2s7XG59XG5cbmZ1bmN0aW9uIHBhdGNoUHRsKG5hbERhdGE6IEJ1ZmZlciwgcHRsU3RhcnRCaXQ6IG51bWJlcik6IEJ1ZmZlciB7XG4gIGNvbnN0IHJic3AgPSByZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uKG5hbERhdGEpO1xuICBzZXRCaXQocmJzcCwgcHRsU3RhcnRCaXQgKyBQVExfVElFUl9CSVQsIDApO1xuICBzZXRCaXQocmJzcCwgcHRsU3RhcnRCaXQgKyBQVExfQ09NUEFUMl9CSVQsIDEpO1xuICByZXR1cm4gYWRkRW11bGF0aW9uUHJldmVudGlvbihyYnNwKTtcbn1cblxuLyoqIFBhdGNoIGV2ZXJ5IFZQUy9TUFMgTkFMIGluIGFuIEFubmV4IEIgYml0c3RyZWFtIHNvIFBUTCBtYXRjaGVzIEFwcGxlL3gyNjUuICovXG5leHBvcnQgZnVuY3Rpb24gcGF0Y2hIZXZjQWxwaGFQdGwoYml0c3RyZWFtOiBCdWZmZXIpOiBCdWZmZXIge1xuICBjb25zdCBuYWxzID0gc3BsaXROYWxVbml0cyhiaXRzdHJlYW0pO1xuICBpZiAobmFscy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gYml0c3RyZWFtO1xuICB9XG4gIGNvbnN0IGNodW5rczogQnVmZmVyW10gPSBbXTtcbiAgZm9yIChjb25zdCBuYWwgb2YgbmFscykge1xuICAgIGxldCBkYXRhID0gbmFsLmRhdGE7XG4gICAgaWYgKG5hbC50eXBlID09PSBOQUxfVlBTKSB7XG4gICAgICBkYXRhID0gcGF0Y2hQdGwobmFsLmRhdGEsIFZQU19QVExfQklUKTtcbiAgICB9IGVsc2UgaWYgKG5hbC50eXBlID09PSBOQUxfU1BTKSB7XG4gICAgICBkYXRhID0gcGF0Y2hQdGwobmFsLmRhdGEsIFNQU19QVExfQklUKTtcbiAgICB9XG4gICAgY2h1bmtzLnB1c2goQU5ORVhfQl9TVEFSVF9DT0RFLCBkYXRhKTtcbiAgfVxuICByZXR1cm4gQnVmZmVyLmNvbmNhdChjaHVua3MpO1xufVxuXG4vLyDilIDilIDilIAgdWUodikgcmV3cml0ZSBoZWxwZXJzIChTUFMvUFBTIOKAlCBSQlNQIGNhbiBncm93IGZyZWVseSwgbm8gQ0FCQUMgdHJhaWxpbmcpIOKUgOKUgFxuXG5mdW5jdGlvbiByZXdyaXRlT25lVWUobmFsSW46IEJ1ZmZlciwgYml0T2Zmc2V0OiBudW1iZXIsIG5ld1ZhbDogbnVtYmVyKTogQnVmZmVyIHtcbiAgY29uc3QgcmJzcCA9IHJlbW92ZUVtdWxhdGlvblByZXZlbnRpb24obmFsSW4pO1xuICBjb25zdCBiciA9IG5ldyBCaXRSZWFkZXIocmJzcCk7XG4gIGNvbnN0IGJ3ID0gbmV3IEJpdFdyaXRlcigpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGJpdE9mZnNldDsgaSsrKSB7XG4gICAgYncuYml0cy5wdXNoKGJyLnJlYWQoMSkpO1xuICB9XG4gIGJyLnJlYWRVZSgpO1xuICBidy51ZShuZXdWYWwpO1xuICB3aGlsZSAoYnIucG9zIDwgYnIuYml0cy5sZW5ndGgpIHtcbiAgICBidy5iaXRzLnB1c2goYnIucmVhZCgxKSk7XG4gIH1cbiAgd2hpbGUgKGJ3LmJpdHMubGVuZ3RoICUgOCAhPT0gMCkge1xuICAgIGJ3LmJpdHMucHVzaCgwKTtcbiAgfVxuICByZXR1cm4gYWRkRW11bGF0aW9uUHJldmVudGlvbihwYWNrQml0cyhidy5iaXRzKSk7XG59XG5cbmZ1bmN0aW9uIHJld3JpdGVUd29VZShuYWxJbjogQnVmZmVyLCBiaXRPZmZzZXQ6IG51bWJlciwgbmV3VmFsMTogbnVtYmVyLCBuZXdWYWwyOiBudW1iZXIpOiBCdWZmZXIge1xuICBjb25zdCByYnNwID0gcmVtb3ZlRW11bGF0aW9uUHJldmVudGlvbihuYWxJbik7XG4gIGNvbnN0IGJyID0gbmV3IEJpdFJlYWRlcihyYnNwKTtcbiAgY29uc3QgYncgPSBuZXcgQml0V3JpdGVyKCk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYml0T2Zmc2V0OyBpKyspIHtcbiAgICBidy5iaXRzLnB1c2goYnIucmVhZCgxKSk7XG4gIH1cbiAgYnIucmVhZFVlKCk7XG4gIGJyLnJlYWRVZSgpO1xuICBidy51ZShuZXdWYWwxKTtcbiAgYncudWUobmV3VmFsMik7XG4gIHdoaWxlIChici5wb3MgPCBici5iaXRzLmxlbmd0aCkge1xuICAgIGJ3LmJpdHMucHVzaChici5yZWFkKDEpKTtcbiAgfVxuICB3aGlsZSAoYncuYml0cy5sZW5ndGggJSA4ICE9PSAwKSB7XG4gICAgYncuYml0cy5wdXNoKDApO1xuICB9XG4gIHJldHVybiBhZGRFbXVsYXRpb25QcmV2ZW50aW9uKHBhY2tCaXRzKGJ3LmJpdHMpKTtcbn1cblxuLyoqIEFscGhhIFNQUzogc3BzX3NlcV9wYXJhbWV0ZXJfc2V0X2lkIDAg4oaSIDEuICovXG5leHBvcnQgZnVuY3Rpb24gcmV3cml0ZUFscGhhU3BzKHNwczogQnVmZmVyKTogQnVmZmVyIHtcbiAgY29uc3QgU1BTX1NFUV9JRF9CSVQgPSBTUFNfUFRMX0JJVCArIDk2OyAvLyBQVEwgaXMgOTYgYml0cyBmb3Igb3VyIHByb2ZpbGUgY29uZmlnXG4gIHJldHVybiByZXdyaXRlT25lVWUoc3BzLCBTUFNfU0VRX0lEX0JJVCwgMSk7XG59XG5cbi8qKiBBbHBoYSBQUFM6IHBwc19waWNfcGFyYW1ldGVyX3NldF9pZCAwIOKGkiAxLCBwcHNfc2VxX3BhcmFtZXRlcl9zZXRfaWQgMCDihpIgMS4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXdyaXRlQWxwaGFQcHMocHBzOiBCdWZmZXIpOiBCdWZmZXIge1xuICByZXR1cm4gcmV3cml0ZVR3b1VlKHBwcywgMTYgLyogYWZ0ZXIgTkFMIGhlYWRlciAqLywgMSwgMSk7XG59XG5cbi8vIOKUgOKUgOKUgCBTbGljZSBoZWFkZXIgcmV3cml0ZSAobXVzdCBwcmVzZXJ2ZSBDQUJBQyBieXRlIGFsaWdubWVudCkg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmZ1bmN0aW9uIHJlYWRTZShicjogQml0UmVhZGVyKTogbnVtYmVyIHtcbiAgY29uc3QgdWUgPSBici5yZWFkVWUoKTtcbiAgcmV0dXJuIHVlICYgMSA/ICh1ZSArIDEpID4+IDEgOiAtKHVlID4+IDEpO1xufVxuXG4vLyBJbmxpbmUgc3RfcmVmX3BpY19zZXQgKHNwc19mbGFnPTApOyBzdFJwc0lkeCA9IG51bV9zaG9ydF90ZXJtX3JlZl9waWNfc2V0cyDihpIgaW50ZXIgcHJlZGljdGlvbiBtYXkgdXNlIHByZXYgc2V0LlxuZnVuY3Rpb24gcGFyc2VJbmxpbmVTdFJlZlBpY1NldChicjogQml0UmVhZGVyLCBudW1EZWx0YVBvY3NTZXQwOiBudW1iZXIpOiB2b2lkIHtcbiAgY29uc3QgaW50ZXJGbGFnID0gYnIucmVhZCgxKTsgLy8gaW50ZXJfcmVmX3BpY19zZXRfcHJlZGljdGlvbl9mbGFnXG4gIGlmIChpbnRlckZsYWcpIHtcbiAgICBjb25zdCBkZWx0YUlkeE1pbnVzMSA9IGJyLnJlYWRVZSgpOyAvLyBzdFJwc0lkeCA9PSBudW1fc2hvcnRfdGVybV9yZWZfcGljX3NldHMg4oaSIHByZXNlbnRcbiAgICBpZiAoZGVsdGFJZHhNaW51czEgIT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgYXBwbGVfYWxwaGE6IHVuZXhwZWN0ZWQgZGVsdGFfaWR4X21pbnVzMT0ke2RlbHRhSWR4TWludXMxfWApO1xuICAgIH1cbiAgICBici5yZWFkKDEpOyAvLyBkZWx0YV9ycHNfc2lnblxuICAgIGJyLnJlYWRVZSgpOyAvLyBhYnNfZGVsdGFfcnBzX21pbnVzMVxuICAgIGZvciAobGV0IGogPSAwOyBqIDw9IG51bURlbHRhUG9jc1NldDA7IGorKykge1xuICAgICAgY29uc3QgdXNlZCA9IGJyLnJlYWQoMSk7XG4gICAgICBpZiAoIXVzZWQpIHtcbiAgICAgICAgYnIucmVhZCgxKTsgLy8gdXNlX2RlbHRhX2ZsYWdcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgbnVtTmVnID0gYnIucmVhZFVlKCk7XG4gICAgY29uc3QgbnVtUG9zID0gYnIucmVhZFVlKCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1OZWc7IGkrKykge1xuICAgICAgYnIucmVhZFVlKCk7XG4gICAgICBici5yZWFkKDEpO1xuICAgIH1cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bVBvczsgaSsrKSB7XG4gICAgICBici5yZWFkVWUoKTtcbiAgICAgIGJyLnJlYWQoMSk7XG4gICAgfVxuICB9XG59XG5cbi8qKiBQYXJzZSBzbGljZV9zZWdtZW50X2hlYWRlciB1cCB0byBieXRlX2FsaWdubWVudC4gUmV0dXJucyBiaXQgcG9zaXRpb24gQiAoZW5kIG9mIGhlYWRlciBjb250ZW50KS4gKi9cbmZ1bmN0aW9uIHBhcnNlSGVhZGVyVG9BbGlnbm1lbnQoYnI6IEJpdFJlYWRlciwgbmFsVHlwZTogbnVtYmVyLCBjZmc6IE52ZW5jSGV2Y0NvbmZpZyk6IG51bWJlciB7XG4gIGJyLnJlYWQoMTYpOyAvLyBza2lwIE5BTCBoZWFkZXJcbiAgaWYgKGJyLnJlYWQoMSkgIT09IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJhcHBsZV9hbHBoYTogZXhwZWN0ZWQgZmlyc3Rfc2xpY2Vfc2VnbWVudF9pbl9waWNfZmxhZz0xXCIpO1xuICB9XG4gIGNvbnN0IGlzSXJhcCA9IG5hbFR5cGUgPj0gTkFMX0JMQV9XX0xQICYmIG5hbFR5cGUgPD0gTkFMX1JTVl9JUkFQX1ZDTDIzO1xuICBpZiAoaXNJcmFwKSB7XG4gICAgYnIucmVhZCgxKTsgLy8gbm9fb3V0cHV0X29mX3ByaW9yX3BpY3NfZmxhZ1xuICB9XG4gIGJyLnJlYWRVZSgpOyAvLyBzbGljZV9waWNfcGFyYW1ldGVyX3NldF9pZFxuICBjb25zdCBzbGljZVR5cGUgPSBici5yZWFkVWUoKTtcbiAgaWYgKCFpc0lyYXApIHtcbiAgICBici5yZWFkKGNmZy5sb2cyTWF4UG9jTHNiKTsgLy8gc2xpY2VfcGljX29yZGVyX2NudF9sc2JcbiAgICBjb25zdCBzdFJlZlBpY1NldFNwc0ZsYWcgPSBici5yZWFkKDEpO1xuICAgIGlmICghc3RSZWZQaWNTZXRTcHNGbGFnKSB7XG4gICAgICBwYXJzZUlubGluZVN0UmVmUGljU2V0KGJyLCBjZmcubnVtRGVsdGFQb2NzU2V0MCk7XG4gICAgfSBlbHNlIGlmIChjZmcubnVtU2hvcnRUZXJtUmVmUGljU2V0cyA+IDEpIHtcbiAgICAgIGJyLnJlYWQoTWF0aC5jZWlsKE1hdGgubG9nMihjZmcubnVtU2hvcnRUZXJtUmVmUGljU2V0cykpKTtcbiAgICB9XG4gICAgaWYgKGNmZy5sb25nVGVybVJlZlBpY3NQcmVzZW50KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJhcHBsZV9hbHBoYTogbG9uZ190ZXJtX3JlZl9waWNzIHBhdGggdW5pbXBsZW1lbnRlZFwiKTtcbiAgICB9XG4gICAgaWYgKGNmZy5zcHNUZW1wb3JhbE12cEVuYWJsZWQpIHtcbiAgICAgIGJyLnJlYWQoMSk7IC8vIHNsaWNlX3RlbXBvcmFsX212cF9lbmFibGVkX2ZsYWdcbiAgICB9XG4gIH1cbiAgaWYgKGNmZy5zYW9FbmFibGVkKSB7XG4gICAgYnIucmVhZCgxKTsgLy8gc2xpY2Vfc2FvX2x1bWFfZmxhZ1xuICAgIGJyLnJlYWQoMSk7IC8vIHNsaWNlX3Nhb19jaHJvbWFfZmxhZ1xuICB9XG4gIGlmIChzbGljZVR5cGUgPT09IFNMSUNFX1RZUEVfUCB8fCBzbGljZVR5cGUgPT09IFNMSUNFX1RZUEVfQikge1xuICAgIGNvbnN0IG92ZXJyaWRlRmxhZyA9IGJyLnJlYWQoMSk7XG4gICAgaWYgKG92ZXJyaWRlRmxhZykge1xuICAgICAgYnIucmVhZFVlKCk7XG4gICAgICBpZiAoc2xpY2VUeXBlID09PSBTTElDRV9UWVBFX0IpIHtcbiAgICAgICAgYnIucmVhZFVlKCk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChzbGljZVR5cGUgPT09IFNMSUNFX1RZUEVfQikge1xuICAgICAgYnIucmVhZCgxKTsgLy8gbXZkX2wxX3plcm9fZmxhZ1xuICAgIH1cbiAgICBpZiAoY2ZnLmNhYmFjSW5pdFByZXNlbnQpIHtcbiAgICAgIGJyLnJlYWQoMSk7IC8vIGNhYmFjX2luaXRfZmxhZ1xuICAgIH1cbiAgICBici5yZWFkVWUoKTsgLy8gZml2ZV9taW51c19tYXhfbnVtX21lcmdlX2NhbmRcbiAgfVxuICByZWFkU2UoYnIpOyAvLyBzbGljZV9xcF9kZWx0YVxuICBpZiAoY2ZnLnBwc0hhc0xvb3BGaWx0ZXJBY3Jvc3NTbGljZXNGbGFnKSB7XG4gICAgYnIucmVhZCgxKTsgLy8gc2xpY2VfbG9vcF9maWx0ZXJfYWNyb3NzX3NsaWNlc19lbmFibGVkX2ZsYWdcbiAgfVxuICByZXR1cm4gYnIucG9zO1xufVxuXG4vKipcbiAqIFJld3JpdGUgYWxwaGEgc2xpY2UgaGVhZGVyOiBzbGljZV9waWNfcGFyYW1ldGVyX3NldF9pZCAwIOKGkiAxLlxuICogVGhlICsyLWJpdCBzaGlmdCBpcyBhYnNvcmJlZCBieSBlbWl0dGluZyBhIGZyZXNoIGJ5dGVfYWxpZ25tZW50IHRoZW4gYXBwZW5kaW5nIHRoZVxuICogb3JpZ2luYWwgQ0FCQUMgc2xpY2Vfc2VnbWVudF9kYXRhIGJ5dGVzIHZlcmJhdGltLiBDQUJBQyBieXRlIGJvdW5kYXJ5IGlzIHByZXNlcnZlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJld3JpdGVBbHBoYVNsaWNlSGVhZGVyKHNsaWNlOiBCdWZmZXIsIG5hbFR5cGU6IG51bWJlciwgY2ZnOiBOdmVuY0hldmNDb25maWcpOiBCdWZmZXIge1xuICBjb25zdCByYnNwID0gcmVtb3ZlRW11bGF0aW9uUHJldmVudGlvbihzbGljZSk7XG4gIGNvbnN0IGJyID0gbmV3IEJpdFJlYWRlcihyYnNwKTtcblxuICBjb25zdCBwcm9iZSA9IG5ldyBCaXRSZWFkZXIocmJzcCk7XG4gIGNvbnN0IEIgPSBwYXJzZUhlYWRlclRvQWxpZ25tZW50KHByb2JlLCBuYWxUeXBlLCBjZmcpO1xuICBjb25zdCBvbGRBbGlnbkJpdHMgPSBCICUgOCA9PT0gMCA/IDggOiA4IC0gKEIgJSA4KTtcbiAgY29uc3Qgc2xpY2VEYXRhQnl0ZU9mZnNldCA9IChCICsgb2xkQWxpZ25CaXRzKSAvIDg7XG5cbiAgY29uc3QgYncgPSBuZXcgQml0V3JpdGVyKCk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgMTY7IGkrKykge1xuICAgIGJ3LmJpdHMucHVzaChici5yZWFkKDEpKTsgLy8gTkFMIGhlYWRlclxuICB9XG4gIGJ3LmJpdHMucHVzaChici5yZWFkKDEpKTsgLy8gZmlyc3Rfc2xpY2Vfc2VnbWVudF9pbl9waWNfZmxhZ1xuICBjb25zdCBpc0lyYXAgPSBuYWxUeXBlID49IE5BTF9CTEFfV19MUCAmJiBuYWxUeXBlIDw9IE5BTF9SU1ZfSVJBUF9WQ0wyMztcbiAgaWYgKGlzSXJhcCkge1xuICAgIGJ3LmJpdHMucHVzaChici5yZWFkKDEpKTsgLy8gbm9fb3V0cHV0X29mX3ByaW9yX3BpY3NfZmxhZ1xuICB9XG5cbiAgYnIucmVhZFVlKCk7IC8vIGRpc2NhcmQgb2xkIHNsaWNlX3BpY19wYXJhbWV0ZXJfc2V0X2lkXG4gIGJ3LnVlKDEpOyAvLyBuZXcgc2xpY2VfcGljX3BhcmFtZXRlcl9zZXRfaWRcblxuICB3aGlsZSAoYnIucG9zIDwgQikge1xuICAgIGJ3LmJpdHMucHVzaChici5yZWFkKDEpKTsgLy8gY29weSByZXN0IG9mIGhlYWRlciBiaXRzXG4gIH1cblxuICBidy5iaXRzLnB1c2goMSk7IC8vIGJ5dGVfYWxpZ25tZW50OiByYnNwX2FsaWdubWVudF9iaXRfb25lXG4gIHdoaWxlIChidy5iaXRzLmxlbmd0aCAlIDggIT09IDApIHtcbiAgICBidy5iaXRzLnB1c2goMCk7XG4gIH1cblxuICByZXR1cm4gYWRkRW11bGF0aW9uUHJldmVudGlvbihCdWZmZXIuY29uY2F0KFtwYWNrQml0cyhidy5iaXRzKSwgcmJzcC5zdWJhcnJheShzbGljZURhdGFCeXRlT2Zmc2V0KV0pKTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMTMuXG5cbmltcG9ydCB7IEJpdFJlYWRlciwgQml0V3JpdGVyLCBwYWNrQml0cyB9IGZyb20gXCIuL2JpdFwiO1xuaW1wb3J0IHsgYWRkRW11bGF0aW9uUHJldmVudGlvbiwgcmVtb3ZlRW11bGF0aW9uUHJldmVudGlvbiB9IGZyb20gXCIuL25hbFwiO1xuXG5pbnRlcmZhY2UgUGFyc2VkUFRMIHtcbiAgcHRsU3RhcnQ6IG51bWJlcjtcbiAgcHRsRW5kOiBudW1iZXI7XG4gIHB0bEJpdHM6IG51bWJlcltdO1xuICBtYXhTdWJMYXllcnNNaW51czE6IG51bWJlcjtcbn1cblxuZnVuY3Rpb24gZXh0cmFjdFBUTCh2cHNEYXRhOiBCdWZmZXIpOiBQYXJzZWRQVEwgfCB1bmRlZmluZWQge1xuICBjb25zdCBiciA9IG5ldyBCaXRSZWFkZXIocmVtb3ZlRW11bGF0aW9uUHJldmVudGlvbih2cHNEYXRhKSk7XG4gIGJyLnJlYWQoMTYpOyAvLyBOQUwgaGVhZGVyXG4gIGJyLnJlYWQoNCk7IC8vIHZwc19pZFxuICBici5yZWFkKDIpOyAvLyBiYXNlX2xheWVyX2ludGVybmFsICsgYXZhaWxhYmxlXG4gIGlmIChici5yZWFkKDYpID4gMCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7IC8vIGFscmVhZHkgbXVsdGktbGF5ZXJcbiAgfVxuICBjb25zdCBtYXhTdWJMYXllcnNNaW51czEgPSBici5yZWFkKDMpO1xuICBici5yZWFkKDEgKyAxNik7IC8vIHRlbXBvcmFsX25lc3RpbmcgKyByZXNlcnZlZFxuXG4gIGNvbnN0IHB0bFN0YXJ0ID0gYnIucG9zO1xuICBici5yZWFkKDk2KTsgLy8gZ2VuZXJhbCBQVEwgKHByb2ZpbGVfc3BhY2UgKyB0aWVyICsgaWRjICsgY29tcGF0ICsgY29uc3RyYWludHMgKyBsZXZlbClcbiAgaWYgKG1heFN1YkxheWVyc01pbnVzMSA+IDApIHtcbiAgICBici5yZWFkKG1heFN1YkxheWVyc01pbnVzMSAqIDIgKyAoOCAtIG1heFN1YkxheWVyc01pbnVzMSkgKiAyKTtcbiAgfVxuICByZXR1cm4geyBwdGxTdGFydCwgcHRsRW5kOiBici5wb3MsIHB0bEJpdHM6IGJyLmJpdHMsIG1heFN1YkxheWVyc01pbnVzMSB9O1xufVxuXG4vKiogV3JpdGUgYmFzZSBWUFMgZmllbGRzIGZvciAyLWxheWVyIGFscGhhLiAqL1xuZnVuY3Rpb24gd3JpdGVCYXNlVlBTKGJ3OiBCaXRXcml0ZXIsIHB0bDogUGFyc2VkUFRMKSB7XG4gIGJ3LncoMHg0MDAxLCAxNik7IC8vIE5BTCBoZWFkZXJcbiAgYncudygwLCA0KTsgLy8gdnBzX2lkXG4gIGJ3LmZsYWcoMSk7IC8vIGJhc2VfbGF5ZXJfaW50ZXJuYWxcbiAgYncuZmxhZygxKTsgLy8gYmFzZV9sYXllcl9hdmFpbGFibGVcbiAgYncudygxLCA2KTsgLy8gbWF4X2xheWVyc19taW51czEgPSAxXG4gIGJ3LncocHRsLm1heFN1YkxheWVyc01pbnVzMSwgMyk7XG4gIC8vIHRlbXBvcmFsX25lc3Rpbmc6IHRydWUgd2hlbiBzaW5nbGUgc3ViLWxheWVyIChhbGwgcmVmcyBsYXllciAwKVxuICBidy5mbGFnKHB0bC5tYXhTdWJMYXllcnNNaW51czEgPT09IDApO1xuICBidy53KDB4ZmZmZiwgMTYpOyAvLyByZXNlcnZlZFxuICBidy5jb3B5KHB0bC5wdGxCaXRzLCBwdGwucHRsU3RhcnQsIHB0bC5wdGxFbmQgLSBwdGwucHRsU3RhcnQpO1xuXG4gIGJ3LmZsYWcoMSk7IC8vIHN1Yl9sYXllcl9vcmRlcmluZ19pbmZvX3ByZXNlbnRcbiAgZm9yIChsZXQgaSA9IDA7IGkgPD0gcHRsLm1heFN1YkxheWVyc01pbnVzMTsgaSsrKSB7XG4gICAgYncudWUoNCk7IC8vIG1heERlY1BpY0J1ZmZlcmluZyAtIDFcbiAgICBidy51ZSgyKTsgLy8gbnVtUmVvcmRlclBpY3NcbiAgICBidy51ZSg0KTsgLy8gbWF4TGF0ZW5jeUluY3JlYXNlICsgMVxuICB9XG5cbiAgYncudygxLCA2KTsgLy8gbWF4X251aF9sYXllcl9pZCA9IDFcbiAgYncudWUoMSk7IC8vIG51bV9sYXllcl9zZXRzX21pbnVzMSA9IDFcbiAgYncuZmxhZygxKTsgLy8gbGF5ZXJfaWRfaW5jbHVkZWRbMV1bMF1cbiAgYncuZmxhZygxKTsgLy8gbGF5ZXJfaWRfaW5jbHVkZWRbMV1bMV1cbiAgYncuZmxhZygwKTsgLy8gdGltaW5nX2luZm9fcHJlc2VudFxuICBidy5mbGFnKDEpOyAvLyB2cHNfZXh0ZW5zaW9uX2ZsYWdcbiAgYncuYWxpZ24oMSk7IC8vIGV4dGVuc2lvbiBhbGlnbm1lbnQgYml0cyA9IDFcbn1cblxuLyoqIFdyaXRlIFZQUyBleHRlbnNpb24gbWF0Y2hpbmcgeDI2NSA0LjEgRU5BQkxFX0FMUEhBLiAqL1xuZnVuY3Rpb24gd3JpdGVWUFNFeHRlbnNpb24oYnc6IEJpdFdyaXRlciwgcHRsOiBQYXJzZWRQVEwsIHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKSB7XG4gIC8vIEV4dGVuc2lvbiBQVEw6IGxldmVsX2lkYyBvbmx5IChwcm9maWxlUHJlc2VudEZsYWc9MClcbiAgYncuY29weShwdGwucHRsQml0cywgcHRsLnB0bEVuZCAtIDgsIDgpO1xuICBpZiAocHRsLm1heFN1YkxheWVyc01pbnVzMSA+IDApIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHB0bC5tYXhTdWJMYXllcnNNaW51czE7IGkrKykge1xuICAgICAgYncudygwLCAyKTtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IHB0bC5tYXhTdWJMYXllcnNNaW51czE7IGkgPCA4OyBpKyspIHtcbiAgICAgIGJ3LncoMCwgMik7XG4gICAgfVxuICB9XG5cbiAgYncuZmxhZygwKTsgLy8gc3BsaXR0aW5nX2ZsYWdcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCAxNjsgaSsrKSB7XG4gICAgYncuZmxhZyhpID09PSAyIHx8IGkgPT09IDMpOyAvLyBzY2FsYWJpbGl0eTogc3BhdGlhbCArIGF1eFxuICB9XG4gIGJ3LncoMCwgMyk7IC8vIGRpbWVuc2lvbl9pZF9sZW5bMF0gPSAxXG4gIGJ3LncoMCwgMyk7IC8vIGRpbWVuc2lvbl9pZF9sZW5bMV0gPSAxXG4gIGJ3LmZsYWcoMSk7IC8vIG51aF9sYXllcl9pZF9wcmVzZW50XG4gIGJ3LncoMSwgNik7IC8vIGxheWVyX2lkX2luX251aFsxXSA9IDFcbiAgYncudygxLCAxKTsgLy8gZGltZW5zaW9uX2lkWzFdWzBdID0gMVxuICBidy53KDEsIDEpOyAvLyBkaW1lbnNpb25faWRbMV1bMV0gPSBBVVhfQUxQSEFcbiAgYncudygwLCA0KTsgLy8gdmlld19pZF9sZW4gPSAwXG5cbiAgYncuZmxhZygwKTsgLy8gZGlyZWN0X2RlcGVuZGVuY3lfZmxhZ1sxXVswXVxuICBidy51ZSgwKTsgLy8gbnVtX2FkZF9sYXllcl9zZXRzXG4gIGJ3LmZsYWcoMCk7IC8vIHN1Yl9sYXllcnNfbWF4X21pbnVzMV9wcmVzZW50XG4gIGJ3LmZsYWcoMCk7IC8vIG1heF90aWRfcmVmX3ByZXNlbnRcbiAgYncuZmxhZygwKTsgLy8gZGVmYXVsdF9yZWZfbGF5ZXJzX2FjdGl2ZVxuXG4gIC8vIEZGbXBlZyBsb29wcyBmcm9tIGluZGV4IDIgdG8gbmJfcHRsLTEsIHNvIG5wdGxfbTE9MiDihpIgMSBlbnRyeSBhdCBpbmRleCAyXG4gIGJ3LnVlKDIpOyAvLyB2cHNfbnVtX3Byb2ZpbGVfdGllcl9sZXZlbF9taW51czFcbiAgYncuZmxhZygxKTsgLy8gcHJvZmlsZV9wcmVzZW50X2ZsYWdbMl1cbiAgYncuY29weShwdGwucHRsQml0cywgcHRsLnB0bFN0YXJ0LCBwdGwucHRsRW5kIC0gcHRsLnB0bFN0YXJ0KTtcblxuICBidy51ZSgwKTsgLy8gbnVtX2FkZF9vbHNzXG4gIGJ3LncoMCwgMik7IC8vIGRlZmF1bHRfb3V0cHV0X2xheWVyX2lkY1xuICBidy53KDEsIDIpOyAvLyBwdGxfaWR4WzFdWzBdID0gMSAoY2VpbF9sb2cyKDMpID0gMiBiaXRzKVxuICBidy53KDIsIDIpOyAvLyBwdGxfaWR4WzFdWzFdID0gMlxuXG4gIGJ3LnVlKDApOyAvLyB2cHNfbnVtX3JlcF9mb3JtYXRzX21pbnVzMVxuICBidy53KHdpZHRoLCAxNik7XG4gIGJ3LncoaGVpZ2h0LCAxNik7XG4gIGJ3LmZsYWcoMSk7IC8vIGNocm9tYV9hbmRfYml0X2RlcHRoX3Zwc19wcmVzZW50XG4gIGJ3LncoMSwgMik7IC8vIGNocm9tYV9mb3JtYXRfaWRjID0gNDoyOjBcbiAgYncudygwLCA0KTsgLy8gYml0X2RlcHRoX2x1bWFfbWludXM4XG4gIGJ3LncoMCwgNCk7IC8vIGJpdF9kZXB0aF9jaHJvbWFfbWludXM4XG4gIGJ3LmZsYWcoMCk7IC8vIGNvbmZvcm1hbmNlX3dpbmRvd192cHNfZmxhZ1xuXG4gIGJ3LmZsYWcoMSk7IC8vIG1heF9vbmVfYWN0aXZlX3JlZl9sYXllclxuICBidy5mbGFnKDApOyAvLyBwb2NfbHNiX2FsaWduZWRcbiAgYncuZmxhZygxKTsgLy8gcG9jX2xzYl9ub3RfcHJlc2VudFxuXG4gIC8vIERQQiBmb3IgT0xTIDEgKDIgbGF5ZXJzLCAxIHN1Yi1sYXllcilcbiAgYncuZmxhZygwKTsgLy8gc3ViX2xheWVyX2ZsYWdfaW5mb19wcmVzZW50XG4gIGJ3LnVlKDApOyAvLyBtYXhfZGVjX3BpY19idWZmZXJpbmcgKGxheWVyIDApXG4gIGJ3LnVlKDApOyAvLyBtYXhfZGVjX3BpY19idWZmZXJpbmcgKGxheWVyIDEpXG4gIGJ3LnVlKDApOyAvLyBtYXhfbnVtX3Jlb3JkZXJfcGljc1xuICBidy51ZSgwKTsgLy8gbWF4X2xhdGVuY3lfaW5jcmVhc2VcblxuICBidy51ZSgwKTsgLy8gZGlyZWN0X2RlcF90eXBlX2xlbl9taW51czJcbiAgYncuZmxhZygwKTsgLy8gZGVmYXVsdF9kaXJlY3RfZGVwZW5kZW5jeV9mbGFnXG4gIGJ3LnVlKDApOyAvLyBub25fdnVpX2V4dGVuc2lvbl9sZW5ndGhcbiAgYncuZmxhZygwKTsgLy8gdnBzX3Z1aV9wcmVzZW50XG4gIGJ3LmZsYWcoMCk7IC8vIHZwc19leHRlbnNpb24yX2ZsYWdcbn1cblxuLyoqXG4gKiBCdWlsZCBhIGNvbXBsZXRlIGFscGhhIFZQUyBmcm9tIHNjcmF0Y2gsIHVzaW5nIHRoZSBvcmlnaW5hbCBOVkVOQyBWUFNcbiAqIG9ubHkgYXMgYSBzb3VyY2UgZm9yIHRoZSBQVEwgKHByb2ZpbGUvdGllci9sZXZlbCkgYnl0ZXMuXG4gKiBNYXRjaGVzIHgyNjUgNC4xIEVOQUJMRV9BTFBIQSBWUFMgc3RydWN0dXJlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRBbHBoYVZQUyh2cHNEYXRhOiBCdWZmZXIsIHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKTogQnVmZmVyIHtcbiAgY29uc3QgcHRsID0gZXh0cmFjdFBUTCh2cHNEYXRhKTtcbiAgaWYgKCFwdGwpIHtcbiAgICByZXR1cm4gdnBzRGF0YTtcbiAgfVxuXG4gIGNvbnN0IGJ3ID0gbmV3IEJpdFdyaXRlcigpO1xuICB3cml0ZUJhc2VWUFMoYncsIHB0bCk7XG4gIHdyaXRlVlBTRXh0ZW5zaW9uKGJ3LCBwdGwsIHdpZHRoLCBoZWlnaHQpO1xuXG4gIGJ3LmJpdHMucHVzaCgxKTsgLy8gUkJTUCBzdG9wIGJpdFxuICBidy5hbGlnbigwKTtcbiAgcmV0dXJuIGFkZEVtdWxhdGlvblByZXZlbnRpb24ocGFja0JpdHMoYncuYml0cykpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8xMi5cblxuaW1wb3J0IHR5cGUgeyBGcmFtZSB9IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQgeyByZXdyaXRlQWxwaGFQcHMsIHJld3JpdGVBbHBoYVNsaWNlSGVhZGVyLCByZXdyaXRlQWxwaGFTcHMgfSBmcm9tIFwiLi9hbHBoYV9kYXJ3aW5cIjtcbmltcG9ydCB7IHBhY2tCaXRzIH0gZnJvbSBcIi4vYml0XCI7XG5pbXBvcnQge1xuICBBTk5FWF9CX1NUQVJUX0NPREUsXG4gIGVuY29kZU5hbEhlYWRlcixcbiAgTkFMX1BQUyxcbiAgTkFMX1NFSV9QUkVGSVgsXG4gIE5BTF9TUFMsXG4gIE5BTF9WUFMsXG4gIHR5cGUgTmFsVW5pdCxcbiAgcmV3cml0ZU5hbExheWVySWQsXG4gIHNwbGl0TmFsVW5pdHMsXG59IGZyb20gXCIuL25hbFwiO1xuaW1wb3J0IHR5cGUgeyBOdmVuY0hldmNDb25maWcgfSBmcm9tIFwiLi9wYXJzZXJcIjtcbmltcG9ydCB7IGJ1aWxkQWxwaGFWUFMgfSBmcm9tIFwiLi92cHNcIjtcblxuLy8gQkdSQSBhbHBoYSDihpIgWSBwbGFuZSBvZiBwYWNrZWQgWVVWNDIwUCAoY2FsbGVyIHByZS1maWxscyBVVj0xMjgpOyBVaW50MzIgZmFzdCBwYXRoOiBCR1JBIExFIHUzMiA+Pj4gMjQgPSBBIGJ5dGUuXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdEFscGhhVG9ZdXY0MjBwQnVmZmVyKGJncmFGcmFtZTogRnJhbWUsIGJ1ZjogQnVmZmVyKTogdm9pZCB7XG4gIGNvbnN0IHNyYyA9IGJncmFGcmFtZS5kYXRhPy5bMF07XG4gIGNvbnN0IHNyY0xzID0gYmdyYUZyYW1lLmxpbmVzaXplPy5bMF07XG4gIGlmICghc3JjIHx8ICFzcmNMcykge1xuICAgIHRocm93IG5ldyBFcnJvcihcImV4dHJhY3RBbHBoYTogbWlzc2luZyBCR1JBIGRhdGFcIik7XG4gIH1cbiAgY29uc3QgdyA9IGJncmFGcmFtZS53aWR0aDtcbiAgY29uc3QgaCA9IGJncmFGcmFtZS5oZWlnaHQ7XG4gIGNvbnN0IHlTaXplID0gdyAqIGg7XG4gIGlmIChzcmMuYnl0ZU9mZnNldCAlIDQgPT09IDAgJiYgc3JjTHMgPT09IHcgKiA0KSB7XG4gICAgY29uc3Qgc3JjMzIgPSBuZXcgVWludDMyQXJyYXkoc3JjLmJ1ZmZlciwgc3JjLmJ5dGVPZmZzZXQsIHlTaXplKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHlTaXplOyBpKyspIHtcbiAgICAgIGJ1ZltpXSA9IHNyYzMyW2ldISA+Pj4gMjQ7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGZvciAobGV0IHkgPSAwOyB5IDwgaDsgeSsrKSB7XG4gICAgICBjb25zdCByb3dCYXNlID0geSAqIHNyY0xzICsgMztcbiAgICAgIGNvbnN0IGRzdEJhc2UgPSB5ICogdztcbiAgICAgIGZvciAobGV0IHggPSAwOyB4IDwgdzsgeCsrKSB7XG4gICAgICAgIGJ1Zltkc3RCYXNlICsgeF0gPSBzcmNbcm93QmFzZSArIHggKiA0XSE7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVW5pZmllZEV4dHJhZGF0YU9wdGlvbnMge1xuICBiYXNlRXh0cmFkYXRhOiBCdWZmZXI7XG4gIGFscGhhRXh0cmFkYXRhOiBCdWZmZXI7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xufVxuXG4vLyBBcHBsZSBIRVZDIEFscGhhIFByb2ZpbGU6IGFscGhhIFNQUyBzcHNfc2VxX3BhcmFtZXRlcl9zZXRfaWQ9MSwgYWxwaGEgUFBTIHBpYytzZXEgaWQ9MS5cbmZ1bmN0aW9uIHJld3JpdGVBbHBoYVBhcmFtU2V0KHR5cGU6IG51bWJlciwgZGF0YTogQnVmZmVyKTogQnVmZmVyIHtcbiAgaWYgKHR5cGUgPT09IE5BTF9TUFMpIHtcbiAgICByZXR1cm4gcmV3cml0ZUFscGhhU3BzKGRhdGEpO1xuICB9XG4gIGlmICh0eXBlID09PSBOQUxfUFBTKSB7XG4gICAgcmV0dXJuIHJld3JpdGVBbHBoYVBwcyhkYXRhKTtcbiAgfVxuICByZXR1cm4gZGF0YTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkVW5pZmllZEV4dHJhZGF0YShvcHRzOiBVbmlmaWVkRXh0cmFkYXRhT3B0aW9ucyk6IEJ1ZmZlciB7XG4gIGNvbnN0IHsgYmFzZUV4dHJhZGF0YSwgYWxwaGFFeHRyYWRhdGEgfSA9IG9wdHM7XG4gIGNvbnN0IGJhc2VOYWxzID0gc3BsaXROYWxVbml0cyhiYXNlRXh0cmFkYXRhKTtcbiAgY29uc3QgYWxwaGFOYWxzID0gc3BsaXROYWxVbml0cyhhbHBoYUV4dHJhZGF0YSk7XG5cbiAgY29uc3QgYWxwaGFCeVR5cGUgPSBuZXcgTWFwPG51bWJlciwgTmFsVW5pdFtdPigpO1xuICBmb3IgKGNvbnN0IG5hbCBvZiBhbHBoYU5hbHMpIHtcbiAgICBpZiAobmFsLnR5cGUgPT09IE5BTF9WUFMpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCBhcnIgPSBhbHBoYUJ5VHlwZS5nZXQobmFsLnR5cGUpID8/IFtdO1xuICAgIGFyci5wdXNoKG5hbCk7XG4gICAgYWxwaGFCeVR5cGUuc2V0KG5hbC50eXBlLCBhcnIpO1xuICB9XG5cbiAgY29uc3QgY2h1bmtzOiBCdWZmZXJbXSA9IFtdO1xuICBjb25zdCBlbWl0dGVkID0gbmV3IFNldDxudW1iZXI+KCk7XG4gIGZvciAoY29uc3QgbmFsIG9mIGJhc2VOYWxzKSB7XG4gICAgY29uc3QgZGF0YSA9IG5hbC50eXBlID09PSBOQUxfVlBTID8gYnVpbGRBbHBoYVZQUyhuYWwuZGF0YSwgb3B0cy53aWR0aCwgb3B0cy5oZWlnaHQpIDogbmFsLmRhdGE7XG4gICAgY2h1bmtzLnB1c2goQU5ORVhfQl9TVEFSVF9DT0RFLCBkYXRhKTtcbiAgICBpZiAoIWVtaXR0ZWQuaGFzKG5hbC50eXBlKSkge1xuICAgICAgZW1pdHRlZC5hZGQobmFsLnR5cGUpO1xuICAgICAgZm9yIChjb25zdCBhbHBoYU5hbCBvZiBhbHBoYUJ5VHlwZS5nZXQobmFsLnR5cGUpID8/IFtdKSB7XG4gICAgICAgIGNvbnN0IGFEYXRhID0gcmV3cml0ZUFscGhhUGFyYW1TZXQobmFsLnR5cGUsIGFscGhhTmFsLmRhdGEpO1xuICAgICAgICBjaHVua3MucHVzaChBTk5FWF9CX1NUQVJUX0NPREUsIHJld3JpdGVOYWxMYXllcklkKGFEYXRhLCAxKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY2h1bmtzLnB1c2goYnVpbGRBbHBoYUNoYW5uZWxJbmZvU0VJKCkpO1xuICByZXR1cm4gQnVmZmVyLmNvbmNhdChjaHVua3MpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRBbHBoYUNoYW5uZWxJbmZvU0VJKCk6IEJ1ZmZlciB7XG4gIGNvbnN0IHBheWxvYWRUeXBlID0gMTY1O1xuICBjb25zdCBwYXlsb2FkU2l6ZSA9IDQ7XG4gIGNvbnN0IFtoMCwgaDFdID0gZW5jb2RlTmFsSGVhZGVyKE5BTF9TRUlfUFJFRklYLCAwLCAxKTtcblxuICBjb25zdCBiaXRzOiBudW1iZXJbXSA9IFtdO1xuICBjb25zdCB3cml0ZUJpdHMgPSAodmFsOiBudW1iZXIsIG46IG51bWJlcikgPT4ge1xuICAgIGZvciAobGV0IGkgPSBuIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGJpdHMucHVzaCgodmFsID4+IGkpICYgMSk7XG4gICAgfVxuICB9O1xuXG4gIHdyaXRlQml0cygwLCAxKTsgLy8gYWxwaGFfY2hhbm5lbF9jYW5jZWxfZmxhZ1xuICB3cml0ZUJpdHMoMCwgMyk7IC8vIGFscGhhX2NoYW5uZWxfdXNlX2lkYyAoMCA9IHVuc3BlY2lmaWVkL3ByZW11bHRpcGxpZWQ7IG1hdGNoZXMgeDI2NSBFTkFCTEVfQUxQSEEpXG4gIHdyaXRlQml0cygwLCAzKTsgLy8gYWxwaGFfY2hhbm5lbF9iaXRfZGVwdGhfbWludXM4XG4gIHdyaXRlQml0cygwLCA5KTsgLy8gYWxwaGFfdHJhbnNwYXJlbnRfdmFsdWVcbiAgd3JpdGVCaXRzKDI1NSwgOSk7IC8vIGFscGhhX29wYXF1ZV92YWx1ZVxuICB3cml0ZUJpdHMoMCwgMSk7IC8vIGFscGhhX2NoYW5uZWxfaW5jcl9mbGFnXG4gIHdyaXRlQml0cygwLCAxKTsgLy8gYWxwaGFfY2hhbm5lbF9jbGlwX2ZsYWdcbiAgd3JpdGVCaXRzKDEsIDEpOyAvLyBieXRlIGFsaWdubWVudFxuICB3aGlsZSAoYml0cy5sZW5ndGggJSA4ICE9PSAwKSB7XG4gICAgd3JpdGVCaXRzKDAsIDEpO1xuICB9XG5cbiAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoW1xuICAgIEFOTkVYX0JfU1RBUlRfQ09ERSxcbiAgICBCdWZmZXIuZnJvbShbaDAsIGgxXSksXG4gICAgQnVmZmVyLmZyb20oW3BheWxvYWRUeXBlLCBwYXlsb2FkU2l6ZV0pLFxuICAgIHBhY2tCaXRzKGJpdHMpLFxuICAgIEJ1ZmZlci5mcm9tKFsweDgwXSksXG4gIF0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW50ZXJsZWF2ZUFjY2Vzc1VuaXRzKGJhc2VOYWxzOiBOYWxVbml0W10sIGFscGhhTmFsczogTmFsVW5pdFtdLCBjZmc6IE52ZW5jSGV2Y0NvbmZpZyk6IEJ1ZmZlciB7XG4gIGNvbnN0IGNodW5rczogQnVmZmVyW10gPSBbXTtcbiAgZm9yIChjb25zdCBuYWwgb2YgYmFzZU5hbHMpIHtcbiAgICBjaHVua3MucHVzaChBTk5FWF9CX1NUQVJUX0NPREUsIG5hbC5kYXRhKTtcbiAgfVxuICBmb3IgKGNvbnN0IG5hbCBvZiBhbHBoYU5hbHMpIHtcbiAgICBpZiAobmFsLnR5cGUgPCBOQUxfVlBTKSB7XG4gICAgICBjb25zdCBkYXRhID0gcmV3cml0ZUFscGhhU2xpY2VIZWFkZXIobmFsLmRhdGEsIG5hbC50eXBlLCBjZmcpO1xuICAgICAgY2h1bmtzLnB1c2goQU5ORVhfQl9TVEFSVF9DT0RFLCByZXdyaXRlTmFsTGF5ZXJJZChkYXRhLCAxKSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBCdWZmZXIuY29uY2F0KGNodW5rcyk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA1LzE4LlxuXG5pbXBvcnQgeyB0eXBlIENvZGVjQ29udGV4dCwgRkZtcGVnRXJyb3IsIHR5cGUgUGFja2V0LCB0eXBlIFN0cmVhbSB9IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQgeyBBVkVSUk9SX0VBR0FJTiwgQVZFUlJPUl9FT0YsIHR5cGUgQVZQYWNrZXRGbGFnIH0gZnJvbSBcIm5vZGUtYXYvY29uc3RhbnRzXCI7XG5pbXBvcnQgdHlwZSB7IEZvcm1hdE11eGVyIH0gZnJvbSBcIi4uL211eGVyXCI7XG5pbXBvcnQgeyBpbnRlcmxlYXZlQWNjZXNzVW5pdHMgfSBmcm9tIFwiLi9hbHBoYVwiO1xuaW1wb3J0IHsgcGF0Y2hIZXZjQWxwaGFQdGwgfSBmcm9tIFwiLi9hbHBoYV9kYXJ3aW5cIjtcbmltcG9ydCB7IHNwbGl0TmFsVW5pdHMgfSBmcm9tIFwiLi9uYWxcIjtcbmltcG9ydCB0eXBlIHsgTnZlbmNIZXZjQ29uZmlnIH0gZnJvbSBcIi4vcGFyc2VyXCI7XG5cbmludGVyZmFjZSBQZW5kaW5nUGFja2V0IHtcbiAgZGF0YTogQnVmZmVyO1xuICBwdHM6IGJpZ2ludDtcbiAgZHRzOiBiaWdpbnQ7XG4gIGR1cmF0aW9uOiBiaWdpbnQ7XG4gIGZsYWdzOiBBVlBhY2tldEZsYWc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRHVhbExheWVyTXV4T3B0aW9ucyB7XG4gIGJhc2VDdHg6IENvZGVjQ29udGV4dDtcbiAgYWxwaGFDdHg6IENvZGVjQ29udGV4dDtcbiAgYmFzZVBrdDogUGFja2V0O1xuICBhbHBoYVBrdDogUGFja2V0O1xuICBzdHJlYW06IFN0cmVhbTtcbiAgaGV2Y0NmZzogTnZlbmNIZXZjQ29uZmlnO1xufVxuXG4vLyBEcmFpbnMgdGhlIGJhc2UgKyBhbHBoYSBOVkVOQyBzZXNzaW9ucyBhbmQgd3JpdGVzIGludGVybGVhdmVkIEhFVkMtYWxwaGEgYWNjZXNzIHVuaXRzLlxuZXhwb3J0IGNsYXNzIER1YWxMYXllck11eCB7XG4gIHByaXZhdGUgX3M6IER1YWxMYXllck11eE9wdGlvbnM7XG4gIHByaXZhdGUgX2Jhc2VRdWV1ZTogUGVuZGluZ1BhY2tldFtdID0gW107XG4gIHByaXZhdGUgX2FscGhhUXVldWU6IFBlbmRpbmdQYWNrZXRbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKHM6IER1YWxMYXllck11eE9wdGlvbnMpIHtcbiAgICB0aGlzLl9zID0gcztcbiAgfVxuXG4gIGFzeW5jIGRyYWluKG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgYmFzZUN0eCwgYWxwaGFDdHgsIGJhc2VQa3QsIGFscGhhUGt0IH0gPSB0aGlzLl9zO1xuICAgIC8vIERyYWluIGVhY2ggc2Vzc2lvbiBmdWxseSDigJQgaW5kZXBlbmRlbnQgTlZFTkMgc2Vzc2lvbnMgcnVuIGEgZnJhbWUgYXBhcnQgdHJhbnNpZW50bHkuXG4gICAgdGhpcy5fYmFzZVF1ZXVlLnB1c2goLi4uKGF3YWl0IHRoaXMucmVjZWl2ZUFsbChiYXNlQ3R4LCBiYXNlUGt0LCBcImJhc2VcIikpKTtcbiAgICB0aGlzLl9hbHBoYVF1ZXVlLnB1c2goLi4uKGF3YWl0IHRoaXMucmVjZWl2ZUFsbChhbHBoYUN0eCwgYWxwaGFQa3QsIFwiYWxwaGFcIikpKTtcbiAgICAvLyBiZj0wIOKGkiBubyByZW9yZGVyOyBxdWV1ZSBpbmRleCBOIGlzIHRoZSBzYW1lIGZyYW1lIGZvciBib3RoLiBMZWZ0b3ZlciB3YWl0cyBmb3IgbmV4dCBkcmFpbi5cbiAgICB3aGlsZSAodGhpcy5fYmFzZVF1ZXVlLmxlbmd0aCAmJiB0aGlzLl9hbHBoYVF1ZXVlLmxlbmd0aCkge1xuICAgICAgYXdhaXQgdGhpcy53cml0ZVBhaXIodGhpcy5fYmFzZVF1ZXVlLnNoaWZ0KCkhLCB0aGlzLl9hbHBoYVF1ZXVlLnNoaWZ0KCkhLCBtdXhlcik7XG4gICAgfVxuICB9XG5cbiAgLy8gVW5wYWlyZWQgbGVmdG92ZXJzIGFmdGVyIEVPRiA9IHRydWUgYmFzZS9hbHBoYSBkZXN5bmM7IHJldHVybnMgYSBkZXNjcmlwdGlvbiwgZWxzZSB1bmRlZmluZWQuXG4gIGRlc3luY0FmdGVyRW9mKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCF0aGlzLl9iYXNlUXVldWUubGVuZ3RoICYmICF0aGlzLl9hbHBoYVF1ZXVlLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIGBiYXNlPSR7dGhpcy5fYmFzZVF1ZXVlLmxlbmd0aH0sIGFscGhhPSR7dGhpcy5fYWxwaGFRdWV1ZS5sZW5ndGh9IHVucGFpcmVkYDtcbiAgfVxuXG4gIC8vIEVBR0FJTi9FT0YgPSBub3JtYWwgc3RvcDsgYW55IG90aGVyIG5lZ2F0aXZlIGlzIGEgcmVhbCBmYXVsdCwgbm90IFwiZHJhaW5lZFwiLlxuICBwcml2YXRlIGFzeW5jIHJlY2VpdmVBbGwoY3R4OiBDb2RlY0NvbnRleHQsIHBrdDogUGFja2V0LCB0YWc6IHN0cmluZyk6IFByb21pc2U8UGVuZGluZ1BhY2tldFtdPiB7XG4gICAgY29uc3Qgb3V0OiBQZW5kaW5nUGFja2V0W10gPSBbXTtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgY29uc3QgcmV0ID0gYXdhaXQgY3R4LnJlY2VpdmVQYWNrZXQocGt0KTtcbiAgICAgIGlmIChyZXQgPj0gMCkge1xuICAgICAgICBvdXQucHVzaCh0aGlzLnNuYXBzaG90KHBrdCkpO1xuICAgICAgICBwa3QudW5yZWYoKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAocmV0ID09PSBBVkVSUk9SX0VBR0FJTiB8fCByZXQgPT09IEFWRVJST1JfRU9GKSB7XG4gICAgICAgIHJldHVybiBvdXQ7XG4gICAgICB9XG4gICAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IocmV0LCBgbnZlbmMuJHt0YWd9LnJlY2VpdmVQYWNrZXRgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNuYXBzaG90KHBrdDogUGFja2V0KTogUGVuZGluZ1BhY2tldCB7XG4gICAgLy8gcGt0LmRhdGEgaXMgbmF0aXZlIG1lbW9yeSBmcmVlZCBvbiB1bnJlZiDigJQgY29weSBiZWZvcmUgcXVldWVpbmcuXG4gICAgcmV0dXJuIHsgZGF0YTogQnVmZmVyLmZyb20ocGt0LmRhdGEhKSwgcHRzOiBwa3QucHRzLCBkdHM6IHBrdC5kdHMsIGR1cmF0aW9uOiBwa3QuZHVyYXRpb24sIGZsYWdzOiBwa3QuZmxhZ3MgfTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgd3JpdGVQYWlyKGJhc2U6IFBlbmRpbmdQYWNrZXQsIGFscGhhOiBQZW5kaW5nUGFja2V0LCBtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IGJhc2VQa3QsIGJhc2VDdHgsIHN0cmVhbSwgaGV2Y0NmZyB9ID0gdGhpcy5fcztcbiAgICAvLyBQYXRjaCBpbi1iYW5kIFZQUy9TUFMgUFRMIGJpdHMgZm9yIEFwcGxlLVZUQiBjb21wYXQgKGVuY29kZXIgcmVwZWF0cyBoZWFkZXJzIHBlciBJRFIpLlxuICAgIGNvbnN0IGludGVybGVhdmVkID0gaW50ZXJsZWF2ZUFjY2Vzc1VuaXRzKHNwbGl0TmFsVW5pdHMoYmFzZS5kYXRhKSwgc3BsaXROYWxVbml0cyhhbHBoYS5kYXRhKSwgaGV2Y0NmZyk7XG4gICAgLy8gZGF0YSBzZXR0ZXIgd2lwZXMgcHRzL2R0cy9kdXJhdGlvbi9mbGFncyDigJQgcmVzdG9yZTsgZmxhZ3MnIEtFWSBiaXQgZHJpdmVzIG1vdiBzdHNzLlxuICAgIGJhc2VQa3QuZGF0YSA9IHBhdGNoSGV2Y0FscGhhUHRsKGludGVybGVhdmVkKTtcbiAgICBiYXNlUGt0LnB0cyA9IGJhc2UucHRzO1xuICAgIGJhc2VQa3QuZHRzID0gYmFzZS5kdHM7XG4gICAgYmFzZVBrdC5kdXJhdGlvbiA9IGJhc2UuZHVyYXRpb24gPT09IDBuID8gMW4gOiBiYXNlLmR1cmF0aW9uO1xuICAgIGJhc2VQa3QuZmxhZ3MgPSBiYXNlLmZsYWdzO1xuICAgIGJhc2VQa3Quc3RyZWFtSW5kZXggPSBzdHJlYW0uaW5kZXg7XG4gICAgYmFzZVBrdC5yZXNjYWxlVHMoYmFzZUN0eC50aW1lQmFzZSwgc3RyZWFtLnRpbWVCYXNlKTtcbiAgICBhd2FpdCBtdXhlci53cml0ZVBhY2tldChiYXNlUGt0KTtcbiAgICBiYXNlUGt0LnVucmVmKCk7XG4gIH1cbn1cbiIsIi8vIFBhcnNlIE5WRU5DIFNQUy9QUFMgZXh0cmFkYXRhIGF0IGVuY29kZXIgaW5pdCB0byBkZXJpdmUgc2xpY2UtaGVhZGVyIHBhcnNlciBmbGFnczsgdGhyb3dzIGlmIE5WRU5DIGRlZmF1bHRzIHNoaWZ0LlxuXG5pbXBvcnQgeyBCaXRSZWFkZXIgfSBmcm9tIFwiLi9iaXRcIjtcbmltcG9ydCB7IE5BTF9QUFMsIE5BTF9TUFMsIHJlbW92ZUVtdWxhdGlvblByZXZlbnRpb24sIHNwbGl0TmFsVW5pdHMgfSBmcm9tIFwiLi9uYWxcIjtcblxuZXhwb3J0IGludGVyZmFjZSBOdmVuY0hldmNDb25maWcge1xuICBsb2cyTWF4UG9jTHNiOiBudW1iZXI7XG4gIG51bVNob3J0VGVybVJlZlBpY1NldHM6IG51bWJlcjtcbiAgbnVtRGVsdGFQb2NzU2V0MDogbnVtYmVyO1xuICBsb25nVGVybVJlZlBpY3NQcmVzZW50OiBib29sZWFuO1xuICBzcHNUZW1wb3JhbE12cEVuYWJsZWQ6IGJvb2xlYW47XG4gIHNhb0VuYWJsZWQ6IGJvb2xlYW47XG4gIGNhYmFjSW5pdFByZXNlbnQ6IGJvb2xlYW47XG4gIHBwc0hhc0xvb3BGaWx0ZXJBY3Jvc3NTbGljZXNGbGFnOiBib29sZWFuO1xufVxuXG5mdW5jdGlvbiBmYWlsKGZpZWxkOiBzdHJpbmcsIGdvdDogdW5rbm93biwgZXhwZWN0ZWQ6IHN0cmluZyk6IG5ldmVyIHtcbiAgdGhyb3cgbmV3IEVycm9yKGBoZXZjX2FscGhhOiBOVkVOQyBTUFMvUFBTIHVuc3VwcG9ydGVkOiAke2ZpZWxkfT0ke2dvdH0sIGV4cGVjdGVkICR7ZXhwZWN0ZWR9YCk7XG59XG5cbmZ1bmN0aW9uIHNraXBQdGwoYnI6IEJpdFJlYWRlciwgbWF4U3ViTGF5ZXJzOiBudW1iZXIpOiB2b2lkIHtcbiAgYnIucmVhZCgyICsgMSArIDUpOyAvLyBwcm9maWxlX3NwYWNlLCB0aWVyLCBwcm9maWxlX2lkY1xuICBici5yZWFkKDMyKTsgLy8gcHJvZmlsZV9jb21wYXRpYmlsaXR5X2ZsYWdbMC4uMzFdXG4gIGJyLnJlYWQoNDgpOyAvLyA0IHNvdXJjZS9wYWNrZWQgZmxhZ3MgKyA0MyBjb25zdHJhaW50L3Jlc2VydmVkICsgMSBpbmJsZFxuICBici5yZWFkKDgpOyAvLyBsZXZlbF9pZGNcbiAgY29uc3Qgc3ViUHJvZmlsZVByZXNlbnQ6IG51bWJlcltdID0gW107XG4gIGNvbnN0IHN1YkxldmVsUHJlc2VudDogbnVtYmVyW10gPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXhTdWJMYXllcnM7IGkrKykge1xuICAgIHN1YlByb2ZpbGVQcmVzZW50LnB1c2goYnIucmVhZCgxKSk7XG4gICAgc3ViTGV2ZWxQcmVzZW50LnB1c2goYnIucmVhZCgxKSk7XG4gIH1cbiAgaWYgKG1heFN1YkxheWVycyA+IDApIHtcbiAgICBmb3IgKGxldCBpID0gbWF4U3ViTGF5ZXJzOyBpIDwgODsgaSsrKSB7XG4gICAgICBici5yZWFkKDIpO1xuICAgIH1cbiAgfVxuICBmb3IgKGxldCBpID0gMDsgaSA8IG1heFN1YkxheWVyczsgaSsrKSB7XG4gICAgaWYgKHN1YlByb2ZpbGVQcmVzZW50W2ldKSB7XG4gICAgICBici5yZWFkKDggKyAzMiArIDQ4KTtcbiAgICB9XG4gICAgaWYgKHN1YkxldmVsUHJlc2VudFtpXSkge1xuICAgICAgYnIucmVhZCg4KTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcGFyc2VTcHMoc3BzUmJzcDogQnVmZmVyKToge1xuICBsb2cyTWF4UG9jTHNiOiBudW1iZXI7XG4gIHNhb0VuYWJsZWQ6IGJvb2xlYW47XG4gIG51bVNob3J0VGVybVJlZlBpY1NldHM6IG51bWJlcjtcbiAgbnVtRGVsdGFQb2NzU2V0MDogbnVtYmVyO1xuICBsb25nVGVybVJlZlBpY3NQcmVzZW50OiBib29sZWFuO1xuICBzcHNUZW1wb3JhbE12cEVuYWJsZWQ6IGJvb2xlYW47XG59IHtcbiAgY29uc3QgYnIgPSBuZXcgQml0UmVhZGVyKHNwc1Jic3ApO1xuICBici5yZWFkKDE2KTsgLy8gTkFMIGhlYWRlclxuICBici5yZWFkKDQpOyAvLyBzcHNfdmlkZW9fcGFyYW1ldGVyX3NldF9pZFxuICBjb25zdCBtYXhTdWJMYXllcnMgPSBici5yZWFkKDMpO1xuICAvLyBhbHBoYV9kYXJ3aW4ucmV3cml0ZUFscGhhU3BzICsgdnBzLmV4dHJhY3RQVEwgaGFyZGNvZGUgOTYtYml0IFBUTCDigJQgb25seSB2YWxpZCB3aGVuIHN1Yl9sYXllcnM9MC5cbiAgaWYgKG1heFN1YkxheWVycyAhPT0gMCkge1xuICAgIGZhaWwoXCJzcHNfbWF4X3N1Yl9sYXllcnNfbWludXMxXCIsIG1heFN1YkxheWVycywgXCIwXCIpO1xuICB9XG4gIGJyLnJlYWQoMSk7IC8vIHNwc190ZW1wb3JhbF9pZF9uZXN0aW5nX2ZsYWdcbiAgc2tpcFB0bChiciwgbWF4U3ViTGF5ZXJzKTtcbiAgYnIucmVhZFVlKCk7IC8vIHNwc19zZXFfcGFyYW1ldGVyX3NldF9pZFxuICBjb25zdCBjaHJvbWFGb3JtYXQgPSBici5yZWFkVWUoKTtcbiAgaWYgKGNocm9tYUZvcm1hdCA9PT0gMykge1xuICAgIGZhaWwoXCJjaHJvbWFfZm9ybWF0X2lkY1wiLCBjaHJvbWFGb3JtYXQsIFwi4omgM1wiKTtcbiAgfVxuICBici5yZWFkVWUoKTsgLy8gcGljX3dpZHRoX2luX2x1bWFfc2FtcGxlc1xuICBici5yZWFkVWUoKTsgLy8gcGljX2hlaWdodF9pbl9sdW1hX3NhbXBsZXNcbiAgaWYgKGJyLnJlYWQoMSkpIHtcbiAgICBici5yZWFkVWUoKTtcbiAgICBici5yZWFkVWUoKTtcbiAgICBici5yZWFkVWUoKTtcbiAgICBici5yZWFkVWUoKTtcbiAgfVxuICBici5yZWFkVWUoKTsgLy8gYml0X2RlcHRoX2x1bWFfbWludXM4XG4gIGJyLnJlYWRVZSgpOyAvLyBiaXRfZGVwdGhfY2hyb21hX21pbnVzOFxuICBjb25zdCBsb2cyTWF4UG9jTHNiID0gYnIucmVhZFVlKCkgKyA0O1xuICBjb25zdCBzdWJPcmRlckluZm8gPSBici5yZWFkKDEpO1xuICBjb25zdCBvcmRlckNvdW50ID0gc3ViT3JkZXJJbmZvID8gbWF4U3ViTGF5ZXJzICsgMSA6IDE7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgb3JkZXJDb3VudDsgaSsrKSB7XG4gICAgYnIucmVhZFVlKCk7XG4gICAgYnIucmVhZFVlKCk7XG4gICAgYnIucmVhZFVlKCk7XG4gIH1cbiAgYnIucmVhZFVlKCk7XG4gIGJyLnJlYWRVZSgpO1xuICBici5yZWFkVWUoKTtcbiAgYnIucmVhZFVlKCk7XG4gIGJyLnJlYWRVZSgpO1xuICBici5yZWFkVWUoKTtcbiAgaWYgKGJyLnJlYWQoMSkpIHtcbiAgICBmYWlsKFwic2NhbGluZ19saXN0X2VuYWJsZWRfZmxhZ1wiLCAxLCBcIjBcIik7XG4gIH1cbiAgYnIucmVhZCgxKTsgLy8gYW1wX2VuYWJsZWRfZmxhZ1xuICBjb25zdCBzYW9FbmFibGVkID0gYnIucmVhZCgxKSA9PT0gMTtcbiAgaWYgKGJyLnJlYWQoMSkpIHtcbiAgICBmYWlsKFwicGNtX2VuYWJsZWRfZmxhZ1wiLCAxLCBcIjBcIik7XG4gIH1cbiAgY29uc3QgbnVtU3RScHMgPSBici5yZWFkVWUoKTtcbiAgaWYgKG51bVN0UnBzID4gMSkge1xuICAgIGZhaWwoXCJudW1fc2hvcnRfdGVybV9yZWZfcGljX3NldHNcIiwgbnVtU3RScHMsIFwi4omkMVwiKTtcbiAgfVxuICBsZXQgbnVtRGVsdGFQb2NzU2V0MCA9IDA7XG4gIGlmIChudW1TdFJwcyA9PT0gMSkge1xuICAgIGNvbnN0IG51bU5lZyA9IGJyLnJlYWRVZSgpO1xuICAgIGNvbnN0IG51bVBvcyA9IGJyLnJlYWRVZSgpO1xuICAgIG51bURlbHRhUG9jc1NldDAgPSBudW1OZWcgKyBudW1Qb3M7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1OZWc7IGkrKykge1xuICAgICAgYnIucmVhZFVlKCk7XG4gICAgICBici5yZWFkKDEpO1xuICAgIH1cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bVBvczsgaSsrKSB7XG4gICAgICBici5yZWFkVWUoKTtcbiAgICAgIGJyLnJlYWQoMSk7XG4gICAgfVxuICB9XG4gIGNvbnN0IGxvbmdUZXJtUmVmUGljc1ByZXNlbnQgPSBici5yZWFkKDEpID09PSAxO1xuICBpZiAobG9uZ1Rlcm1SZWZQaWNzUHJlc2VudCkge1xuICAgIGZhaWwoXCJsb25nX3Rlcm1fcmVmX3BpY3NfcHJlc2VudF9mbGFnXCIsIDEsIFwiMFwiKTtcbiAgfVxuICBjb25zdCBzcHNUZW1wb3JhbE12cEVuYWJsZWQgPSBici5yZWFkKDEpID09PSAxO1xuICByZXR1cm4ge1xuICAgIGxvZzJNYXhQb2NMc2IsXG4gICAgc2FvRW5hYmxlZCxcbiAgICBudW1TaG9ydFRlcm1SZWZQaWNTZXRzOiBudW1TdFJwcyxcbiAgICBudW1EZWx0YVBvY3NTZXQwLFxuICAgIGxvbmdUZXJtUmVmUGljc1ByZXNlbnQsXG4gICAgc3BzVGVtcG9yYWxNdnBFbmFibGVkLFxuICB9O1xufVxuXG5mdW5jdGlvbiBwYXJzZVBwcyhwcHNSYnNwOiBCdWZmZXIpOiB7IGNhYmFjSW5pdFByZXNlbnQ6IGJvb2xlYW47IHBwc0hhc0xvb3BGaWx0ZXJBY3Jvc3NTbGljZXNGbGFnOiBib29sZWFuIH0ge1xuICBjb25zdCBiciA9IG5ldyBCaXRSZWFkZXIocHBzUmJzcCk7XG4gIGJyLnJlYWQoMTYpOyAvLyBOQUwgaGVhZGVyXG4gIGJyLnJlYWRVZSgpOyAvLyBwcHNfcGljX3BhcmFtZXRlcl9zZXRfaWRcbiAgYnIucmVhZFVlKCk7IC8vIHBwc19zZXFfcGFyYW1ldGVyX3NldF9pZFxuICBici5yZWFkKDEpOyAvLyBkZXBlbmRlbnRfc2xpY2Vfc2VnbWVudHNfZW5hYmxlZF9mbGFnXG4gIGJyLnJlYWQoMSk7IC8vIG91dHB1dF9mbGFnX3ByZXNlbnRfZmxhZ1xuICBjb25zdCBudW1FeHRyYVNsaWNlSGVhZGVyQml0cyA9IGJyLnJlYWQoMyk7XG4gIGlmIChudW1FeHRyYVNsaWNlSGVhZGVyQml0cyAhPT0gMCkge1xuICAgIGZhaWwoXCJudW1fZXh0cmFfc2xpY2VfaGVhZGVyX2JpdHNcIiwgbnVtRXh0cmFTbGljZUhlYWRlckJpdHMsIFwiMFwiKTtcbiAgfVxuICBici5yZWFkKDEpOyAvLyBzaWduX2RhdGFfaGlkaW5nX2VuYWJsZWRfZmxhZ1xuICBjb25zdCBjYWJhY0luaXRQcmVzZW50ID0gYnIucmVhZCgxKSA9PT0gMTtcbiAgYnIucmVhZFVlKCk7IC8vIG51bV9yZWZfaWR4X2wwX2RlZmF1bHRfYWN0aXZlX21pbnVzMVxuICBici5yZWFkVWUoKTsgLy8gbnVtX3JlZl9pZHhfbDFfZGVmYXVsdF9hY3RpdmVfbWludXMxXG4gIGJyLnJlYWRVZSgpOyAvLyBpbml0X3FwX21pbnVzMjYgKHNlLCBidXQgdWUgcGFyc2VyIGZpbmUgdG8gYWR2YW5jZSlcbiAgYnIucmVhZCgxKTsgLy8gY29uc3RyYWluZWRfaW50cmFfcHJlZF9mbGFnXG4gIGJyLnJlYWQoMSk7IC8vIHRyYW5zZm9ybV9za2lwX2VuYWJsZWRfZmxhZ1xuICBpZiAoYnIucmVhZCgxKSkge1xuICAgIGJyLnJlYWRVZSgpOyAvLyBjdV9xcF9kZWx0YV9lbmFibGVkIOKGkiBkaWZmX2N1X3FwX2RlbHRhX2RlcHRoXG4gIH1cbiAgYnIucmVhZFVlKCk7IC8vIHBwc19jYl9xcF9vZmZzZXRcbiAgYnIucmVhZFVlKCk7IC8vIHBwc19jcl9xcF9vZmZzZXRcbiAgYnIucmVhZCgxKTsgLy8gcHBzX3NsaWNlX2Nocm9tYV9xcF9vZmZzZXRzX3ByZXNlbnRfZmxhZ1xuICBici5yZWFkKDEpOyAvLyB3ZWlnaHRlZF9wcmVkX2ZsYWdcbiAgYnIucmVhZCgxKTsgLy8gd2VpZ2h0ZWRfYmlwcmVkX2ZsYWdcbiAgYnIucmVhZCgxKTsgLy8gdHJhbnNxdWFudF9ieXBhc3NfZW5hYmxlZF9mbGFnXG4gIGlmIChici5yZWFkKDEpKSB7XG4gICAgZmFpbChcInRpbGVzX2VuYWJsZWRfZmxhZ1wiLCAxLCBcIjBcIik7XG4gIH1cbiAgYnIucmVhZCgxKTsgLy8gZW50cm9weV9jb2Rpbmdfc3luY19lbmFibGVkX2ZsYWdcbiAgY29uc3QgcHBzTG9vcEZpbHRlckFjcm9zc1NsaWNlc0VuYWJsZWQgPSBici5yZWFkKDEpID09PSAxO1xuICBjb25zdCBkZWJsb2NraW5nQ29udHJvbFByZXNlbnQgPSBici5yZWFkKDEpO1xuICBsZXQgc2xpY2VEZWJsb2NraW5nRGlzYWJsZWRPdmVycmlkZSA9IGZhbHNlO1xuICBpZiAoZGVibG9ja2luZ0NvbnRyb2xQcmVzZW50KSB7XG4gICAgYnIucmVhZCgxKTsgLy8gZGVibG9ja2luZ19maWx0ZXJfb3ZlcnJpZGVfZW5hYmxlZF9mbGFnXG4gICAgc2xpY2VEZWJsb2NraW5nRGlzYWJsZWRPdmVycmlkZSA9IGJyLnJlYWQoMSkgPT09IDE7IC8vIHBwc19kZWJsb2NraW5nX2ZpbHRlcl9kaXNhYmxlZF9mbGFnXG4gICAgaWYgKCFzbGljZURlYmxvY2tpbmdEaXNhYmxlZE92ZXJyaWRlKSB7XG4gICAgICBici5yZWFkVWUoKTtcbiAgICAgIGJyLnJlYWRVZSgpOyAvLyBiZXRhL3RjIG9mZnNldHMgKHNlIHZpYSB1ZSBhZHZhbmNlKVxuICAgIH1cbiAgfVxuICAvLyBzbGljZV9sb29wX2ZpbHRlcl9hY3Jvc3Nfc2xpY2VzX2VuYWJsZWRfZmxhZyBwcmVzZW50IGlmZiBQUFMgYWNyb3NzLXNsaWNlcyBlbmFibGVkICYmICFzbGljZV9kZWJsb2NraW5nX2Rpc2FibGVkLlxuICBjb25zdCBwcHNIYXNMb29wRmlsdGVyQWNyb3NzU2xpY2VzRmxhZyA9IHBwc0xvb3BGaWx0ZXJBY3Jvc3NTbGljZXNFbmFibGVkICYmICFzbGljZURlYmxvY2tpbmdEaXNhYmxlZE92ZXJyaWRlO1xuICByZXR1cm4geyBjYWJhY0luaXRQcmVzZW50LCBwcHNIYXNMb29wRmlsdGVyQWNyb3NzU2xpY2VzRmxhZyB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VOdmVuY0hldmNDb25maWcoZXh0cmFkYXRhOiBCdWZmZXIpOiBOdmVuY0hldmNDb25maWcge1xuICBjb25zdCBuYWxzID0gc3BsaXROYWxVbml0cyhleHRyYWRhdGEpO1xuICBjb25zdCBzcHMgPSBuYWxzLmZpbmQoKG4pID0+IG4udHlwZSA9PT0gTkFMX1NQUyk7XG4gIGNvbnN0IHBwcyA9IG5hbHMuZmluZCgobikgPT4gbi50eXBlID09PSBOQUxfUFBTKTtcbiAgaWYgKCFzcHMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJoZXZjX2FscGhhOiBTUFMgbWlzc2luZyBpbiBOVkVOQyBleHRyYWRhdGFcIik7XG4gIH1cbiAgaWYgKCFwcHMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJoZXZjX2FscGhhOiBQUFMgbWlzc2luZyBpbiBOVkVOQyBleHRyYWRhdGFcIik7XG4gIH1cbiAgY29uc3QgcyA9IHBhcnNlU3BzKHJlbW92ZUVtdWxhdGlvblByZXZlbnRpb24oc3BzLmRhdGEpKTtcbiAgY29uc3QgcCA9IHBhcnNlUHBzKHJlbW92ZUVtdWxhdGlvblByZXZlbnRpb24ocHBzLmRhdGEpKTtcbiAgcmV0dXJuIHsgLi4ucywgLi4ucCB9O1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8xMi5cblxuaW1wb3J0IHsgQ29kZWMsIHR5cGUgQ29kZWNDb250ZXh0LCBGRm1wZWdFcnJvciwgdHlwZSBGcmFtZSwgdHlwZSBQYWNrZXQsIHR5cGUgU3RyZWFtIH0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB7XG4gIEFWX1BJWF9GTVRfQkdSQSxcbiAgQVZfUElYX0ZNVF9ZVVY0MjBQLFxuICBBVkVSUk9SX0VBR0FJTixcbiAgQVZFUlJPUl9FT0YsXG4gIEZGX0VOQ09ERVJfSEVWQ19OVkVOQyxcbn0gZnJvbSBcIm5vZGUtYXYvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBtYWtlRnJhbWUsIG1ha2VQYWNrZXQsIG9wZW5WaWRlb0N0eCB9IGZyb20gXCIuLi9taXNjXCI7XG5pbXBvcnQgdHlwZSB7IEZvcm1hdE11eGVyIH0gZnJvbSBcIi4uL211eGVyXCI7XG5pbXBvcnQgdHlwZSB7IEh3VmlkZW9FbmNvZGVyT3B0aW9ucyB9IGZyb20gXCIuLi92aWRlb3Rvb2xib3hcIjtcbmltcG9ydCB7IGJ1aWxkVW5pZmllZEV4dHJhZGF0YSwgZXh0cmFjdEFscGhhVG9ZdXY0MjBwQnVmZmVyIH0gZnJvbSBcIi4vYWxwaGFcIjtcbmltcG9ydCB7IHBhdGNoSGV2Y0FscGhhUHRsIH0gZnJvbSBcIi4vYWxwaGFfZGFyd2luXCI7XG5pbXBvcnQgeyBEdWFsTGF5ZXJNdXggfSBmcm9tIFwiLi9kdWFsX2xheWVyX211eFwiO1xuaW1wb3J0IHsgdHlwZSBOdmVuY0hldmNDb25maWcsIHBhcnNlTnZlbmNIZXZjQ29uZmlnIH0gZnJvbSBcIi4vcGFyc2VyXCI7XG5cbmludGVyZmFjZSBOdmVuY1N0YXRlIHtcbiAgYmFzZUN0eDogQ29kZWNDb250ZXh0O1xuICBhbHBoYUN0eDogQ29kZWNDb250ZXh0O1xuICBiYXNlUGt0OiBQYWNrZXQ7XG4gIGFscGhhUGt0OiBQYWNrZXQ7XG4gIHN0cmVhbTogU3RyZWFtO1xuICBhbHBoYVN3RnJhbWU6IEZyYW1lO1xuICBhbHBoYUJ1ZjogQnVmZmVyO1xuICBoZXZjQ2ZnOiBOdmVuY0hldmNDb25maWc7XG59XG5cbmV4cG9ydCBjbGFzcyBOdmVuY0R1YWxMYXllckVuY29kZXIgaW1wbGVtZW50cyBEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSBfczogTnZlbmNTdGF0ZTtcbiAgcHJpdmF0ZSBfbXV4OiBEdWFsTGF5ZXJNdXg7XG4gIHByaXZhdGUgX3B0cyA9IDBuO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoczogTnZlbmNTdGF0ZSkge1xuICAgIHRoaXMuX3MgPSBzO1xuICAgIHRoaXMuX211eCA9IG5ldyBEdWFsTGF5ZXJNdXgoe1xuICAgICAgYmFzZUN0eDogcy5iYXNlQ3R4LFxuICAgICAgYWxwaGFDdHg6IHMuYWxwaGFDdHgsXG4gICAgICBiYXNlUGt0OiBzLmJhc2VQa3QsXG4gICAgICBhbHBoYVBrdDogcy5hbHBoYVBrdCxcbiAgICAgIHN0cmVhbTogcy5zdHJlYW0sXG4gICAgICBoZXZjQ2ZnOiBzLmhldmNDZmcsXG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgY3JlYXRlKG9wdHM6IEh3VmlkZW9FbmNvZGVyT3B0aW9ucyk6IFByb21pc2U8TnZlbmNEdWFsTGF5ZXJFbmNvZGVyPiB7XG4gICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0LCBmcHMsIGJpdHJhdGUsIG11eGVyIH0gPSBvcHRzO1xuXG4gICAgY29uc3QgY29kZWMgPSBDb2RlYy5maW5kRW5jb2RlckJ5TmFtZShGRl9FTkNPREVSX0hFVkNfTlZFTkMpO1xuICAgIGlmICghY29kZWMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcImhldmNfbnZlbmMgZW5jb2RlciBub3QgZm91bmRcIik7XG4gICAgfVxuXG4gICAgLy8gdGllcj1tYWluIG1hdGNoZXMgQXBwbGUgVmlkZW9Ub29sYm94OyBtYWNPUyBDaHJvbWUgcmVxdWlyZXMgTWFpbiB0aWVyIGZvciBIRVZDIGFscGhhIGRlY29kZS5cbiAgICBjb25zdCBudmVuY09wdHMgPSB7IHByZXNldDogXCJwNFwiLCBiZjogXCIwXCIsIHRpZXI6IFwibWFpblwiIH07XG4gICAgY29uc3QgY29tbW9uID0geyBjb2RlYywgd2lkdGgsIGhlaWdodCwgZnBzLCBiaXRyYXRlLCBvcHRpb25zOiBudmVuY09wdHMgfTtcbiAgICAvLyBCR1JBIGRpcmVjdCAoTlZFTkMgY29udmVydHMsIG5vIENQVSBTV1MpOyBzdGFjayBmcmVlcyBldmVyeSBuYXRpdmUgaWYgYSBsYXRlciBzdGVwIHRocm93cywgbW92ZSgpIGRpc293bnMgb24gc3VjY2Vzcy5cbiAgICB1c2luZyBzdGFjayA9IG5ldyBEaXNwb3NhYmxlU3RhY2soKTtcbiAgICBjb25zdCBiYXNlQ3R4ID0gc3RhY2sudXNlKGF3YWl0IG9wZW5WaWRlb0N0eCh7IC4uLmNvbW1vbiwgcGl4ZWxGb3JtYXQ6IEFWX1BJWF9GTVRfQkdSQSB9LCBcIm52ZW5jLmJhc2Uub3BlbjJcIikpO1xuICAgIGNvbnN0IGFscGhhQ3R4ID0gc3RhY2sudXNlKGF3YWl0IG9wZW5WaWRlb0N0eCh7IC4uLmNvbW1vbiwgcGl4ZWxGb3JtYXQ6IEFWX1BJWF9GTVRfWVVWNDIwUCB9LCBcIm52ZW5jLmFscGhhLm9wZW4yXCIpKTtcblxuICAgIGlmICghYmFzZUN0eC5leHRyYURhdGEgfHwgIWFscGhhQ3R4LmV4dHJhRGF0YSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwibnZlbmM6IGNvZGVjIGV4dHJhZGF0YSBtaXNzaW5nXCIpO1xuICAgIH1cbiAgICBjb25zdCBoZXZjQ2ZnID0gcGFyc2VOdmVuY0hldmNDb25maWcoYmFzZUN0eC5leHRyYURhdGEpO1xuXG4gICAgY29uc3Qgc3RyZWFtID0gbXV4ZXIuYWRkU3RyZWFtKGJhc2VDdHgsIFwiaHZjMVwiKTtcbiAgICBjb25zdCB1bmlmaWVkID0gYnVpbGRVbmlmaWVkRXh0cmFkYXRhKHtcbiAgICAgIGJhc2VFeHRyYWRhdGE6IGJhc2VDdHguZXh0cmFEYXRhLFxuICAgICAgYWxwaGFFeHRyYWRhdGE6IGFscGhhQ3R4LmV4dHJhRGF0YSxcbiAgICAgIHdpZHRoLFxuICAgICAgaGVpZ2h0LFxuICAgIH0pO1xuICAgIC8vIEFwcGxlLVZUQiBjb21wYXQ6IHJld3JpdGUgVlBTK1NQUyBQVEwgYml0cyB0byBtYXRjaCB4MjY1L1ZUQiBvdXRwdXQgKHRpZXI9TWFpbiwgY29tcGF0WzJdPTEpLlxuICAgIHN0cmVhbS5jb2RlY3Bhci5leHRyYWRhdGEgPSBwYXRjaEhldmNBbHBoYVB0bCh1bmlmaWVkKTtcblxuICAgIGNvbnN0IHlTaXplID0gd2lkdGggKiBoZWlnaHQ7XG4gICAgLy8gWVVWNDIwUCBjaHJvbWEgcGxhbmVzIGFyZSBjZWlsKHcvMinDl2NlaWwoaC8yKTsgZmxvb3IgdW5kZXJmbG93cyBvbiBvZGQgZGltZW5zaW9ucy5cbiAgICBjb25zdCBjaHJvbWFTaXplID0gKCh3aWR0aCArIDEpID4+IDEpICogKChoZWlnaHQgKyAxKSA+PiAxKTtcbiAgICBjb25zdCBhbHBoYUJ1ZiA9IEJ1ZmZlci5hbGxvYyh5U2l6ZSArIGNocm9tYVNpemUgKiAyKTtcbiAgICBhbHBoYUJ1Zi5maWxsKDEyOCwgeVNpemUpO1xuXG4gICAgY29uc3QgYmFzZVBrdCA9IHN0YWNrLnVzZShtYWtlUGFja2V0KCkpO1xuICAgIGNvbnN0IGFscGhhUGt0ID0gc3RhY2sudXNlKG1ha2VQYWNrZXQoKSk7XG4gICAgY29uc3QgYWxwaGFTd0ZyYW1lID0gc3RhY2sudXNlKG1ha2VGcmFtZSh3aWR0aCwgaGVpZ2h0LCBBVl9QSVhfRk1UX1lVVjQyMFApKTtcblxuICAgIHN0YWNrLm1vdmUoKTtcbiAgICByZXR1cm4gbmV3IE52ZW5jRHVhbExheWVyRW5jb2Rlcih7XG4gICAgICBiYXNlQ3R4LFxuICAgICAgYWxwaGFDdHgsXG4gICAgICBiYXNlUGt0LFxuICAgICAgYWxwaGFQa3QsXG4gICAgICBzdHJlYW0sXG4gICAgICBhbHBoYVN3RnJhbWUsXG4gICAgICBhbHBoYUJ1ZixcbiAgICAgIGhldmNDZmcsXG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBlbmNvZGUoYmdyYUZyYW1lOiBGcmFtZSwgbXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyBiYXNlQ3R4LCBhbHBoYUN0eCwgYWxwaGFTd0ZyYW1lLCBhbHBoYUJ1ZiB9ID0gdGhpcy5fcztcbiAgICBjb25zdCBwdHMgPSB0aGlzLl9wdHMrKztcblxuICAgIC8vIEV4dHJhY3QgdGhlIGFscGhhIHBsYW5lIGJlZm9yZSBiYXNlLnNlbmRGcmFtZSDigJQgdGhlIGVuY29kZXIgdW5yZWZzIHRoZSBpbnB1dCBmcmFtZS5cbiAgICBleHRyYWN0QWxwaGFUb1l1djQyMHBCdWZmZXIoYmdyYUZyYW1lLCBhbHBoYUJ1Zik7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGFscGhhU3dGcmFtZS5tYWtlV3JpdGFibGUoKSwgXCJhbHBoYVN3Lm1ha2VXcml0YWJsZVwiKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYWxwaGFTd0ZyYW1lLmZyb21CdWZmZXIoYWxwaGFCdWYpLCBcImFscGhhU3cuZnJvbUJ1ZmZlclwiKTtcbiAgICBhbHBoYVN3RnJhbWUucHRzID0gcHRzO1xuICAgIGFscGhhU3dGcmFtZS5kdXJhdGlvbiA9IDFuO1xuXG4gICAgYmdyYUZyYW1lLnB0cyA9IHB0cztcbiAgICBiZ3JhRnJhbWUuZHVyYXRpb24gPSAxbjtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgYmFzZUN0eC5zZW5kRnJhbWUoYmdyYUZyYW1lKSwgXCJiYXNlLnNlbmRGcmFtZVwiKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgYWxwaGFDdHguc2VuZEZyYW1lKGFscGhhU3dGcmFtZSksIFwiYWxwaGEuc2VuZEZyYW1lXCIpO1xuXG4gICAgYXdhaXQgdGhpcy5fbXV4LmRyYWluKG11eGVyKTtcbiAgfVxuXG4gIGFzeW5jIGZsdXNoKG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuc2VuZEVvZih0aGlzLl9zLmJhc2VDdHgsIFwiYmFzZVwiKTtcbiAgICBhd2FpdCB0aGlzLnNlbmRFb2YodGhpcy5fcy5hbHBoYUN0eCwgXCJhbHBoYVwiKTtcbiAgICBhd2FpdCB0aGlzLl9tdXguZHJhaW4obXV4ZXIpO1xuICAgIGNvbnN0IGRlc3luYyA9IHRoaXMuX211eC5kZXN5bmNBZnRlckVvZigpO1xuICAgIGlmIChkZXN5bmMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTlZFTkMgZGVzeW5jOiAke2Rlc3luY31gKTtcbiAgICB9XG4gIH1cblxuICBbU3ltYm9sLmRpc3Bvc2VdKCk6IHZvaWQge1xuICAgIGNvbnN0IHsgYmFzZVBrdCwgYWxwaGFQa3QsIGJhc2VDdHgsIGFscGhhQ3R4LCBhbHBoYVN3RnJhbWUgfSA9IHRoaXMuX3M7XG4gICAgYmFzZVBrdC5mcmVlKCk7XG4gICAgYWxwaGFQa3QuZnJlZSgpO1xuICAgIGFscGhhU3dGcmFtZS5mcmVlKCk7XG4gICAgLy8gTlZJRElBIGRyaXZlciA1MjAuNTYuMDYrIFVBRiBpbiBsaWJudmN1dmlkIG9uIGNyZWF0aW9uLW9yZGVyIHNlc3Npb24gZnJlZSDigJQgTElGTyBkZXN0cm95IGF2b2lkcyBpdCAoZm9ydW0gL3QvMjY5OTc0KS5cbiAgICBhbHBoYUN0eC5mcmVlQ29udGV4dCgpO1xuICAgIGJhc2VDdHguZnJlZUNvbnRleHQoKTtcbiAgfVxuXG4gIC8vIEVPRiBmbHVzaDsgRUFHQUlOL0VPRiByZXR1cm5zIGFyZSBiZW5pZ24gKGFscmVhZHktZHJhaW5pbmcgZW5jb2RlcikuXG4gIHByaXZhdGUgYXN5bmMgc2VuZEVvZihjdHg6IENvZGVjQ29udGV4dCwgdGFnOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCByZXQgPSBhd2FpdCBjdHguc2VuZEZyYW1lKG51bGwpO1xuICAgIGlmIChyZXQgPCAwICYmIHJldCAhPT0gQVZFUlJPUl9FQUdBSU4gJiYgcmV0ICE9PSBBVkVSUk9SX0VPRikge1xuICAgICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKHJldCwgYG52ZW5jLiR7dGFnfS5zZW5kRnJhbWUobnVsbClgKTtcbiAgICB9XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDMvMjEuXG5cbmltcG9ydCB7IENvZGVjLCB0eXBlIENvZGVjQ29udGV4dCwgRkZtcGVnRXJyb3IsIHR5cGUgRnJhbWUsIHR5cGUgUGFja2V0LCB0eXBlIFN0cmVhbSB9IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQgdHlwZSB7IEFWUGl4ZWxGb3JtYXQsIEZGVmlkZW9FbmNvZGVyIH0gZnJvbSBcIm5vZGUtYXYvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBkcmFpblBhY2tldHMsIG1ha2VQYWNrZXQsIG9wZW5WaWRlb0N0eCB9IGZyb20gXCIuL21pc2NcIjtcbmltcG9ydCB0eXBlIHsgRm9ybWF0TXV4ZXIgfSBmcm9tIFwiLi9tdXhlclwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFZpZGVvRW5jb2Rlck9wdGlvbnMge1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgZnBzOiBudW1iZXI7XG4gIGNvZGVjTmFtZTogRkZWaWRlb0VuY29kZXI7XG4gIGNvZGVjVGFnPzogc3RyaW5nO1xuICBjb2RlY09wdHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIGJpdHJhdGU6IG51bWJlcjtcbiAgcGl4ZWxGb3JtYXQ6IEFWUGl4ZWxGb3JtYXQ7XG4gIG11eGVyOiBGb3JtYXRNdXhlcjtcbn1cblxuZXhwb3J0IGNsYXNzIFZpZGVvRW5jb2RlciBpbXBsZW1lbnRzIERpc3Bvc2FibGUge1xuICBwcml2YXRlIHJlYWRvbmx5IF9jdHg6IENvZGVjQ29udGV4dDtcbiAgcHJpdmF0ZSByZWFkb25seSBfcGt0OiBQYWNrZXQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N0cmVhbTogU3RyZWFtO1xuICBwcml2YXRlIF9wdHMgPSAwbjtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKGN0eDogQ29kZWNDb250ZXh0LCBwa3Q6IFBhY2tldCwgc3RyZWFtOiBTdHJlYW0pIHtcbiAgICB0aGlzLl9jdHggPSBjdHg7XG4gICAgdGhpcy5fcGt0ID0gcGt0O1xuICAgIHRoaXMuX3N0cmVhbSA9IHN0cmVhbTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBjcmVhdGUob3B0czogVmlkZW9FbmNvZGVyT3B0aW9ucyk6IFByb21pc2U8VmlkZW9FbmNvZGVyPiB7XG4gICAgY29uc3QgeyBjb2RlY05hbWUsIGNvZGVjVGFnLCBjb2RlY09wdHMsIG11eGVyLCAuLi5yZXN0IH0gPSBvcHRzO1xuXG4gICAgY29uc3QgY29kZWMgPSBDb2RlYy5maW5kRW5jb2RlckJ5TmFtZShjb2RlY05hbWUpO1xuICAgIGlmICghY29kZWMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVmlkZW8gZW5jb2RlciBub3QgZm91bmQ6ICR7Y29kZWNOYW1lfWApO1xuICAgIH1cblxuICAgIC8vIFBhcnRpYWwtY29uc3RydWN0aW9uIHNhZmV0eTogc3RhY2sgZGlzcG9zZXMgY3R4L3BrdCBpZiBhIGxhdGVyIHN0ZXAgdGhyb3dzOyBtb3ZlKCkgZGlzb3ducyBvbiBzdWNjZXNzLlxuICAgIHVzaW5nIHN0YWNrID0gbmV3IERpc3Bvc2FibGVTdGFjaygpO1xuICAgIGNvbnN0IGN0eCA9IHN0YWNrLnVzZShhd2FpdCBvcGVuVmlkZW9DdHgoeyBjb2RlYywgLi4ucmVzdCwgY29kZWNUYWcsIG9wdGlvbnM6IGNvZGVjT3B0cyB9LCBcInZpZGVvQ3R4Lm9wZW4yXCIpKTtcbiAgICBjb25zdCBwa3QgPSBzdGFjay51c2UobWFrZVBhY2tldCgpKTtcbiAgICBjb25zdCBzdHJlYW0gPSBtdXhlci5hZGRTdHJlYW0oY3R4LCBjb2RlY1RhZyk7XG4gICAgc3RhY2subW92ZSgpO1xuICAgIHJldHVybiBuZXcgVmlkZW9FbmNvZGVyKGN0eCwgcGt0LCBzdHJlYW0pO1xuICB9XG5cbiAgYXN5bmMgZW5jb2RlKGZyYW1lOiBGcmFtZSwgbXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgZnJhbWUucHRzID0gdGhpcy5fcHRzKys7XG4gICAgZnJhbWUuZHVyYXRpb24gPSAxbjtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgdGhpcy5fY3R4LnNlbmRGcmFtZShmcmFtZSksIFwidmlkZW9DdHguc2VuZEZyYW1lXCIpO1xuICAgIGF3YWl0IHRoaXMuZHJhaW4obXV4ZXIpO1xuICB9XG5cbiAgYXN5bmMgZmx1c2gobXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5fY3R4LnNlbmRGcmFtZShudWxsKTtcbiAgICBhd2FpdCB0aGlzLmRyYWluKG11eGVyKTtcbiAgfVxuXG4gIFtTeW1ib2wuZGlzcG9zZV0oKTogdm9pZCB7XG4gICAgdGhpcy5fcGt0LmZyZWUoKTtcbiAgICB0aGlzLl9jdHguZnJlZUNvbnRleHQoKTtcbiAgfVxuXG4gIHByaXZhdGUgZHJhaW4obXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIGRyYWluUGFja2V0cyh0aGlzLl9jdHgsIHRoaXMuX3BrdCwgdGhpcy5fc3RyZWFtLCBtdXhlcik7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMTIuXG5cbmltcG9ydCB7IHR5cGUgQ29kZWNDb250ZXh0LCBGRm1wZWdFcnJvciwgdHlwZSBGcmFtZSwgdHlwZSBQYWNrZXQsIHR5cGUgU3RyZWFtIH0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB0eXBlIHsgSGFyZHdhcmVDb250ZXh0IH0gZnJvbSBcIm5vZGUtYXYvYXBpXCI7XG5pbXBvcnQgeyBBVl9QSVhfRk1UX0JHUkEsIEFWQ09MX1JBTkdFX0pQRUcgfSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcbmltcG9ydCB7IGRyYWluUGFja2V0cywgbWFrZVBhY2tldCwgb3BlblZpZGVvQ3R4IH0gZnJvbSBcIi4vbWlzY1wiO1xuaW1wb3J0IHR5cGUgeyBGb3JtYXRNdXhlciB9IGZyb20gXCIuL211eGVyXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSHdWaWRlb0VuY29kZXJPcHRpb25zIHtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIGZwczogbnVtYmVyO1xuICBodzogSGFyZHdhcmVDb250ZXh0O1xuICBiaXRyYXRlOiBudW1iZXI7XG4gIG11eGVyOiBGb3JtYXRNdXhlcjtcbn1cblxuZXhwb3J0IGNsYXNzIFZpZGVvVG9vbGJveEVuY29kZXIgaW1wbGVtZW50cyBEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSBfY3R4OiBDb2RlY0NvbnRleHQ7XG4gIHByaXZhdGUgX3BrdDogUGFja2V0O1xuICBwcml2YXRlIF9zdHJlYW06IFN0cmVhbTtcbiAgcHJpdmF0ZSBfcHRzID0gMG47XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihjdHg6IENvZGVjQ29udGV4dCwgcGt0OiBQYWNrZXQsIHN0cmVhbTogU3RyZWFtKSB7XG4gICAgdGhpcy5fY3R4ID0gY3R4O1xuICAgIHRoaXMuX3BrdCA9IHBrdDtcbiAgICB0aGlzLl9zdHJlYW0gPSBzdHJlYW07XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgY3JlYXRlKG9wdHM6IEh3VmlkZW9FbmNvZGVyT3B0aW9ucyk6IFByb21pc2U8VmlkZW9Ub29sYm94RW5jb2Rlcj4ge1xuICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgZnBzLCBodywgYml0cmF0ZSwgbXV4ZXIgfSA9IG9wdHM7XG5cbiAgICBjb25zdCBjb2RlYyA9IGh3LmdldEVuY29kZXJDb2RlYyhcImhldmNcIik7XG4gICAgaWYgKCFjb2RlYykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaGV2Y192aWRlb3Rvb2xib3ggZW5jb2RlciBub3QgZm91bmRcIik7XG4gICAgfVxuXG4gICAgY29uc3QgY3R4ID0gYXdhaXQgb3BlblZpZGVvQ3R4KFxuICAgICAge1xuICAgICAgICBjb2RlYyxcbiAgICAgICAgd2lkdGgsXG4gICAgICAgIGhlaWdodCxcbiAgICAgICAgZnBzLFxuICAgICAgICBiaXRyYXRlLFxuICAgICAgICBwaXhlbEZvcm1hdDogQVZfUElYX0ZNVF9CR1JBLFxuICAgICAgICBjb2xvclJhbmdlOiBBVkNPTF9SQU5HRV9KUEVHLFxuICAgICAgICBjb2RlY1RhZzogXCJodmMxXCIsXG4gICAgICAgIG9wdGlvbnM6IHsgYWxwaGFfcXVhbGl0eTogXCIxXCIgfSxcbiAgICAgIH0sXG4gICAgICBcInZ0RW5jLm9wZW4yXCIsXG4gICAgKTtcbiAgICAvLyBQYXJ0aWFsLWNvbnN0cnVjdGlvbiBzYWZldHk6IHN0YWNrIGRpc3Bvc2VzIGN0eC9wa3QgaWYgYSBsYXRlciBzdGVwIHRocm93czsgbW92ZSgpIGRpc293bnMgb24gc3VjY2Vzcy5cbiAgICB1c2luZyBzdGFjayA9IG5ldyBEaXNwb3NhYmxlU3RhY2soKTtcbiAgICBzdGFjay51c2UoY3R4KTtcbiAgICBjb25zdCBwa3QgPSBzdGFjay51c2UobWFrZVBhY2tldCgpKTtcbiAgICBjb25zdCBzdHJlYW0gPSBtdXhlci5hZGRTdHJlYW0oY3R4LCBcImh2YzFcIik7XG4gICAgc3RhY2subW92ZSgpO1xuICAgIHJldHVybiBuZXcgVmlkZW9Ub29sYm94RW5jb2RlcihjdHgsIHBrdCwgc3RyZWFtKTtcbiAgfVxuXG4gIGFzeW5jIGVuY29kZShiZ3JhRnJhbWU6IEZyYW1lLCBtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBiZ3JhRnJhbWUucHRzID0gdGhpcy5fcHRzKys7XG4gICAgYmdyYUZyYW1lLmR1cmF0aW9uID0gMW47XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IHRoaXMuX2N0eC5zZW5kRnJhbWUoYmdyYUZyYW1lKSwgXCJ2dEVuYy5zZW5kRnJhbWVcIik7XG4gICAgYXdhaXQgdGhpcy5kcmFpbihtdXhlcik7XG4gIH1cblxuICBhc3luYyBmbHVzaChtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLl9jdHguc2VuZEZyYW1lKG51bGwpO1xuICAgIGF3YWl0IHRoaXMuZHJhaW4obXV4ZXIpO1xuICB9XG5cbiAgW1N5bWJvbC5kaXNwb3NlXSgpOiB2b2lkIHtcbiAgICB0aGlzLl9wa3QuZnJlZSgpO1xuICAgIHRoaXMuX2N0eC5mcmVlQ29udGV4dCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBkcmFpbihtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gZHJhaW5QYWNrZXRzKHRoaXMuX2N0eCwgdGhpcy5fcGt0LCB0aGlzLl9zdHJlYW0sIG11eGVyKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8xMy5cblxuaW1wb3J0IHsgSGFyZHdhcmVDb250ZXh0IH0gZnJvbSBcIm5vZGUtYXYvYXBpXCI7XG5pbXBvcnQge1xuICBBVl9QSVhfRk1UX1lVVkE0MjBQLFxuICBBVl9TQU1QTEVfRk1UX0ZMVCxcbiAgQVZfU0FNUExFX0ZNVF9GTFRQLFxuICBGRl9FTkNPREVSX0FBQyxcbiAgRkZfRU5DT0RFUl9MSUJPUFVTLFxuICBGRl9FTkNPREVSX0xJQlgyNjUsXG4gIEZGX0hXREVWSUNFX1RZUEVfQ1VEQSxcbiAgRkZfSFdERVZJQ0VfVFlQRV9WSURFT1RPT0xCT1gsXG59IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuXG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi4vbG9nZ2luZ1wiO1xuaW1wb3J0IHsgQXVkaW9FbmNvZGVyIH0gZnJvbSBcIi4vYXVkaW9cIjtcbmltcG9ydCB7IENvZGVjU3RhdGUgfSBmcm9tIFwiLi9jb2RlY1wiO1xuaW1wb3J0IHsgTnZlbmNEdWFsTGF5ZXJFbmNvZGVyIH0gZnJvbSBcIi4vaGV2Y19hbHBoYS9udmVuY1wiO1xuaW1wb3J0IHsgRkZfRU5DT0RFUl9MSUJWUFhfVlA5IH0gZnJvbSBcIi4vbWlzY1wiO1xuaW1wb3J0IHR5cGUgeyBGb3JtYXRNdXhlciB9IGZyb20gXCIuL211eGVyXCI7XG5pbXBvcnQgdHlwZSB7IFNpbmtLaW5kLCBTaW5rT3B0aW9ucyB9IGZyb20gXCIuL3NpbmtcIjtcbmltcG9ydCB7IFZpZGVvRW5jb2RlciB9IGZyb20gXCIuL3ZpZGVvXCI7XG5pbXBvcnQgeyBWaWRlb1Rvb2xib3hFbmNvZGVyIH0gZnJvbSBcIi4vdmlkZW90b29sYm94XCI7XG5cbmNvbnN0IFRBRyA9IFwiW0VuY29kZXJdXCI7XG5cbmV4cG9ydCB0eXBlIEh3RW5jb2RlciA9IFZpZGVvVG9vbGJveEVuY29kZXIgfCBOdmVuY0R1YWxMYXllckVuY29kZXI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmlkZW9TZXR1cCB7XG4gIHZpZGVvPzogVmlkZW9FbmNvZGVyO1xuICBod1ZpZGVvPzogSHdFbmNvZGVyO1xuICBjb2RlYz86IENvZGVjU3RhdGU7XG4gIGh3PzogSGFyZHdhcmVDb250ZXh0O1xuICBvd25zSHc6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSHdWaWRlb0ZhY3RvcnlPcHRpb25zIHtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIGZwczogbnVtYmVyO1xuICBiaXRyYXRlPzogbnVtYmVyO1xuICBkaXNhYmxlSHdDb2RlYz86IGJvb2xlYW47XG4gIHNoYXJlZEh3PzogSGFyZHdhcmVDb250ZXh0O1xufVxuXG4vLyBXZWJNIFZQOSByZWFsdGltZSBpcyBhbHJlYWR5IHRoZSBmYXN0IHBhdGg7IHJvdy1tdCArIHRocmVhZHMgY292ZXIgdGhlIHJlc3QuXG5jb25zdCBXRUJNX1ZQOV9PUFRTID0ge1xuICBkZWFkbGluZTogXCJyZWFsdGltZVwiLFxuICBcImNwdS11c2VkXCI6IFwiOFwiLFxuICBcInJvdy1tdFwiOiBcIjFcIixcbiAgdGhyZWFkczogXCI0XCIsXG59IGFzIGNvbnN0O1xuXG5jb25zdCBNUDRfQVVESU8gPSB7XG4gIG91dFNhbXBsZVJhdGU6IDQ0XzEwMCxcbiAgb3V0U2FtcGxlRm10OiBBVl9TQU1QTEVfRk1UX0ZMVFAsXG4gIGNvZGVjTmFtZTogRkZfRU5DT0RFUl9BQUMsXG59IGFzIGNvbnN0O1xuXG4vLyBPcHVzIHJlamVjdHMgNDQuMWsuXG5jb25zdCBXRUJNX0FVRElPID0ge1xuICBvdXRTYW1wbGVSYXRlOiA0OF8wMDAsXG4gIG91dFNhbXBsZUZtdDogQVZfU0FNUExFX0ZNVF9GTFQsXG4gIGNvZGVjTmFtZTogRkZfRU5DT0RFUl9MSUJPUFVTLFxufSBhcyBjb25zdDtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZU1wNFZpZGVvKG9wdHM6IFNpbmtPcHRpb25zLCBtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPFZpZGVvU2V0dXA+IHtcbiAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0LCBmcHMsIGRpc2FibGVId0NvZGVjLCBzaGFyZWRIdyB9ID0gb3B0cztcbiAgcmV0dXJuIGNyZWF0ZUh3VmlkZW9FbmNvZGVyKHsgd2lkdGgsIGhlaWdodCwgZnBzLCBkaXNhYmxlSHdDb2RlYywgc2hhcmVkSHcgfSwgbXV4ZXIpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlV2VibVZpZGVvKG9wdHM6IFNpbmtPcHRpb25zLCBtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPFZpZGVvU2V0dXA+IHtcbiAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0LCBmcHMgfSA9IG9wdHM7XG4gIGNvbnN0IHZpZGVvID0gYXdhaXQgVmlkZW9FbmNvZGVyLmNyZWF0ZSh7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0LFxuICAgIGZwcyxcbiAgICBjb2RlY05hbWU6IEZGX0VOQ09ERVJfTElCVlBYX1ZQOSxcbiAgICBjb2RlY09wdHM6IFdFQk1fVlA5X09QVFMsXG4gICAgYml0cmF0ZTogNF8wMDBfMDAwLFxuICAgIHBpeGVsRm9ybWF0OiBBVl9QSVhfRk1UX1lVVkE0MjBQLFxuICAgIG11eGVyLFxuICB9KTtcbiAgcmV0dXJuIHtcbiAgICB2aWRlbyxcbiAgICBjb2RlYzogYXdhaXQgQ29kZWNTdGF0ZS5jcmVhdGUod2lkdGgsIGhlaWdodCksXG4gICAgb3duc0h3OiBmYWxzZSxcbiAgfTtcbn1cblxuLy8gT3B1cyByZWplY3RzIDQ0LjFrLlxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUF1ZGlvKGtpbmQ6IFNpbmtLaW5kLCBtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPEF1ZGlvRW5jb2Rlcj4ge1xuICBjb25zdCBjZmcgPSBraW5kID09PSBcIm1wNFwiID8gTVA0X0FVRElPIDogV0VCTV9BVURJTztcbiAgcmV0dXJuIEF1ZGlvRW5jb2Rlci5jcmVhdGUoe1xuICAgIC4uLmNmZyxcbiAgICBnbG9iYWxIZWFkZXI6IHRydWUsXG4gICAgYml0cmF0ZTogMTI4XzAwMCxcbiAgICBtdXhlcixcbiAgfSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVId1ZpZGVvRW5jb2RlcihvcHRzOiBId1ZpZGVvRmFjdG9yeU9wdGlvbnMsIG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8VmlkZW9TZXR1cD4ge1xuICBjb25zdCB7IHdpZHRoLCBoZWlnaHQsIGZwcywgYml0cmF0ZSA9IDhfMDAwXzAwMCwgZGlzYWJsZUh3Q29kZWMgPSBmYWxzZSwgc2hhcmVkSHcgfSA9IG9wdHM7XG4gIGNvbnN0IGh3ID0gc2hhcmVkSHcgPz8gKGRpc2FibGVId0NvZGVjID8gdW5kZWZpbmVkIDogKEhhcmR3YXJlQ29udGV4dC5hdXRvKCkgPz8gdW5kZWZpbmVkKSk7XG4gIGNvbnN0IG93bnNIdyA9ICFzaGFyZWRIdyAmJiAhIWh3O1xuXG4gIHRyeSB7XG4gICAgaWYgKGh3Py5kZXZpY2VUeXBlTmFtZSA9PT0gRkZfSFdERVZJQ0VfVFlQRV9WSURFT1RPT0xCT1ggJiYgaHcuZ2V0RW5jb2RlckNvZGVjKFwiaGV2Y1wiKSkge1xuICAgICAgbG9nZ2VyLmRlYnVnKFRBRywgXCJ1c2luZyBWaWRlb1Rvb2xib3ggSEVWQyBhbHBoYSBlbmNvZGVyXCIpO1xuICAgICAgY29uc3QgaHdWaWRlbyA9IGF3YWl0IFZpZGVvVG9vbGJveEVuY29kZXIuY3JlYXRlKHsgd2lkdGgsIGhlaWdodCwgZnBzLCBodywgYml0cmF0ZSwgbXV4ZXIgfSk7XG4gICAgICByZXR1cm4geyBod1ZpZGVvLCBodywgb3duc0h3IH07XG4gICAgfVxuICAgIGlmIChodz8uZGV2aWNlVHlwZU5hbWUgPT09IEZGX0hXREVWSUNFX1RZUEVfQ1VEQSAmJiBody5nZXRFbmNvZGVyQ29kZWMoXCJoZXZjXCIpKSB7XG4gICAgICBsb2dnZXIuZGVidWcoVEFHLCBcInVzaW5nIE5WRU5DIGR1YWwtbGF5ZXIgSEVWQyBhbHBoYSBlbmNvZGVyXCIpO1xuICAgICAgY29uc3QgaHdWaWRlbyA9IGF3YWl0IE52ZW5jRHVhbExheWVyRW5jb2Rlci5jcmVhdGUoeyB3aWR0aCwgaGVpZ2h0LCBmcHMsIGh3LCBiaXRyYXRlLCBtdXhlciB9KTtcbiAgICAgIHJldHVybiB7IGh3VmlkZW8sIGh3LCBvd25zSHcgfTtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsb2dnZXIud2FybihUQUcsIFwiSGFyZHdhcmUgY29kZWMgc2Vzc2lvbiBsaW1pdHMgcmVhY2hlZCwgdXNlIHNvZnR3YXJlIGVuY29kZXJcIiwgZSk7XG4gICAgaWYgKG93bnNIdykge1xuICAgICAgaHc/LmRpc3Bvc2UoKTtcbiAgICB9XG4gIH1cblxuICBsb2dnZXIuZGVidWcoVEFHLCBcInVzaW5nIHNvZnR3YXJlIGxpYngyNjUgSEVWQyBhbHBoYSBlbmNvZGVyXCIpO1xuICAvLyBQYXJ0aWFsLWNvbnN0cnVjdGlvbiBzYWZldHk6IGZyZWUgdGhlIHZpZGVvIGVuY29kZXIgaWYgQ29kZWNTdGF0ZS5jcmVhdGUgdGhyb3dzOyBtb3ZlKCkgZGlzb3ducyBvbiBzdWNjZXNzLlxuICB1c2luZyBzdGFjayA9IG5ldyBEaXNwb3NhYmxlU3RhY2soKTtcbiAgY29uc3QgdmlkZW8gPSBzdGFjay51c2UoXG4gICAgYXdhaXQgVmlkZW9FbmNvZGVyLmNyZWF0ZSh7XG4gICAgICB3aWR0aCxcbiAgICAgIGhlaWdodCxcbiAgICAgIGZwcyxcbiAgICAgIGNvZGVjTmFtZTogRkZfRU5DT0RFUl9MSUJYMjY1LFxuICAgICAgY29kZWNUYWc6IFwiaHZjMVwiLFxuICAgICAgY29kZWNPcHRzOiB7IHByZXNldDogXCJmYXN0XCIsIFwieDI2NS1wYXJhbXNcIjogXCJsb2ctbGV2ZWw9MTpiZnJhbWVzPTM6cG9vbHM9KzpmcmFtZS10aHJlYWRzPTBcIiB9LFxuICAgICAgYml0cmF0ZSxcbiAgICAgIHBpeGVsRm9ybWF0OiBBVl9QSVhfRk1UX1lVVkE0MjBQLFxuICAgICAgbXV4ZXIsXG4gICAgfSksXG4gICk7XG4gIGNvbnN0IGNvZGVjID0gc3RhY2sudXNlKGF3YWl0IENvZGVjU3RhdGUuY3JlYXRlKHdpZHRoLCBoZWlnaHQpKTtcbiAgc3RhY2subW92ZSgpO1xuICByZXR1cm4geyB2aWRlbywgY29kZWMsIG93bnNIdzogZmFsc2UgfTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDMvMjEuXG5cbmltcG9ydCB7IHR5cGUgQ29kZWNDb250ZXh0LCBEaWN0aW9uYXJ5LCBGRm1wZWdFcnJvciwgRm9ybWF0Q29udGV4dCwgdHlwZSBQYWNrZXQsIHR5cGUgU3RyZWFtIH0gZnJvbSBcIm5vZGUtYXZcIjtcblxuZXhwb3J0IGNsYXNzIEZvcm1hdE11eGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfY3R4OiBGb3JtYXRDb250ZXh0O1xuICBwcml2YXRlIF9vcGVuZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfZGlzcG9zZWQgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihvdXRQYXRoOiBzdHJpbmcsIGZvcm1hdE5hbWU/OiBzdHJpbmcpIHtcbiAgICB0aGlzLl9jdHggPSBuZXcgRm9ybWF0Q29udGV4dCgpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcih0aGlzLl9jdHguYWxsb2NPdXRwdXRDb250ZXh0MihudWxsLCBmb3JtYXROYW1lID8/IG51bGwsIG91dFBhdGgpLCBcImFsbG9jT3V0cHV0Q29udGV4dDJcIik7XG4gIH1cblxuICBhZGRTdHJlYW0oY29kZWNDdHg6IENvZGVjQ29udGV4dCwgY29kZWNUYWc/OiBzdHJpbmcpOiBTdHJlYW0ge1xuICAgIGNvbnN0IHN0cmVhbSA9IHRoaXMuX2N0eC5uZXdTdHJlYW0obnVsbCk7XG4gICAgc3RyZWFtLnRpbWVCYXNlID0gY29kZWNDdHgudGltZUJhc2U7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKHN0cmVhbS5jb2RlY3Bhci5mcm9tQ29udGV4dChjb2RlY0N0eCksIFwiY29kZWNwYXIuZnJvbUNvbnRleHRcIik7XG4gICAgaWYgKGNvZGVjVGFnKSB7XG4gICAgICBzdHJlYW0uY29kZWNwYXIuY29kZWNUYWcgPSBjb2RlY1RhZztcbiAgICB9XG4gICAgcmV0dXJuIHN0cmVhbTtcbiAgfVxuXG4gIGFzeW5jIG9wZW4oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX29wZW5lZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgdGhpcy5fY3R4Lm9wZW5PdXRwdXQoKSwgXCJvcGVuT3V0cHV0XCIpO1xuICAgIC8vICtmYXN0c3RhcnQgcmVsb2NhdGVzIG1vb3YgdG8gZmlsZSBmcm9udCBvbiB3cml0ZVRyYWlsZXIgc28gcGxheWVycyBjYW4gYmVnaW4gcGxheWJhY2sgYmVmb3JlIGZ1bGwgZG93bmxvYWQuXG4gICAgdXNpbmcgb3B0cyA9IERpY3Rpb25hcnkuZnJvbU9iamVjdCh7IG1vdmZsYWdzOiBcIitmYXN0c3RhcnRcIiB9KTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgdGhpcy5fY3R4LndyaXRlSGVhZGVyKG9wdHMpLCBcIndyaXRlSGVhZGVyXCIpO1xuICAgIHRoaXMuX29wZW5lZCA9IHRydWU7XG4gIH1cblxuICBhc3luYyB3cml0ZVBhY2tldChwa3Q6IFBhY2tldCk6IFByb21pc2U8dm9pZD4ge1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCB0aGlzLl9jdHguaW50ZXJsZWF2ZWRXcml0ZUZyYW1lKHBrdCksIFwiaW50ZXJsZWF2ZWRXcml0ZUZyYW1lXCIpO1xuICB9XG5cbiAgYXN5bmMgW1N5bWJvbC5hc3luY0Rpc3Bvc2VdKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9kaXNwb3NlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9kaXNwb3NlZCA9IHRydWU7XG4gICAgdHJ5IHtcbiAgICAgIGlmICh0aGlzLl9vcGVuZWQpIHtcbiAgICAgICAgdGhpcy5fb3BlbmVkID0gZmFsc2U7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5fY3R4LndyaXRlVHJhaWxlcigpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIC8vIEEgZmFpbGVkL3RydW5jYXRlZCB0cmFpbGVyIHdyaXRlIG11c3Qgbm90IGxlYWsgdGhlIEZELlxuICAgICAgICAgIGF3YWl0IHRoaXMuX2N0eC5jbG9zZU91dHB1dCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIC8vIEFsd2F5cyBmcmVlIHRoZSBuYXRpdmUgY29udGV4dCDigJQgZXZlbiBhIG5ldmVyLW9wZW5lZCBtdXhlciBhbGxvY2F0ZWQgb25lIGluIHRoZSBjb25zdHJ1Y3Rvci5cbiAgICAgIGF3YWl0IHRoaXMuX2N0eFtTeW1ib2wuYXN5bmNEaXNwb3NlXSgpO1xuICAgIH1cbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8yNC5cblxuaW1wb3J0IHsgb2sgfSBmcm9tIFwibm9kZTphc3NlcnRcIjtcbmltcG9ydCB7IEZGbXBlZ0Vycm9yLCB0eXBlIEZyYW1lIH0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB0eXBlIHsgSGFyZHdhcmVDb250ZXh0IH0gZnJvbSBcIm5vZGUtYXYvYXBpXCI7XG5pbXBvcnQgdHlwZSB7IEF1ZGlvRW5jb2RlciB9IGZyb20gXCIuL2F1ZGlvXCI7XG5pbXBvcnQgdHlwZSB7IENvZGVjU3RhdGUgfSBmcm9tIFwiLi9jb2RlY1wiO1xuaW1wb3J0IHsgY3JlYXRlQXVkaW8sIGNyZWF0ZU1wNFZpZGVvLCBjcmVhdGVXZWJtVmlkZW8sIHR5cGUgSHdFbmNvZGVyIH0gZnJvbSBcIi4vZmFjdG9yeVwiO1xuaW1wb3J0IHsgRm9ybWF0TXV4ZXIgfSBmcm9tIFwiLi9tdXhlclwiO1xuaW1wb3J0IHR5cGUgeyBWaWRlb0VuY29kZXIgfSBmcm9tIFwiLi92aWRlb1wiO1xuXG5leHBvcnQgdHlwZSBTaW5rS2luZCA9IFwibXA0XCIgfCBcIndlYm1cIjtcblxuZXhwb3J0IGludGVyZmFjZSBTaW5rT3B0aW9ucyB7XG4gIG91dEZpbGU6IHN0cmluZztcbiAga2luZDogU2lua0tpbmQ7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICBmcHM6IG51bWJlcjtcbiAgd2l0aEF1ZGlvOiBib29sZWFuO1xuICBkaXNhYmxlSHdDb2RlYzogYm9vbGVhbjtcbiAgc2hhcmVkSHc/OiBIYXJkd2FyZUNvbnRleHQ7XG59XG5cbmludGVyZmFjZSBTaW5rU3RhdGUge1xuICBtdXhlcjogRm9ybWF0TXV4ZXI7XG4gIHZpZGVvPzogVmlkZW9FbmNvZGVyO1xuICBod1ZpZGVvPzogSHdFbmNvZGVyO1xuICBhdWRpbz86IEF1ZGlvRW5jb2RlcjtcbiAgY29kZWM/OiBDb2RlY1N0YXRlO1xuICBvd25zSHc6IGJvb2xlYW47XG4gIGh3PzogSGFyZHdhcmVDb250ZXh0O1xuICBvcHRzOiBTaW5rT3B0aW9ucztcbn1cblxuZXhwb3J0IGNsYXNzIE91dHB1dFNpbmsgaW1wbGVtZW50cyBBc3luY0Rpc3Bvc2FibGUge1xuICBwcml2YXRlIF9zOiBTaW5rU3RhdGU7XG4gIHByaXZhdGUgX2Rpc3Bvc2VkID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihzOiBTaW5rU3RhdGUpIHtcbiAgICB0aGlzLl9zID0gcztcbiAgfVxuXG4gIHN0YXRpYyBraW5kRnJvbVBhdGgocGF0aDogc3RyaW5nKTogU2lua0tpbmQge1xuICAgIGNvbnN0IGxvd2VyID0gcGF0aC50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChsb3dlci5lbmRzV2l0aChcIi53ZWJtXCIpKSB7XG4gICAgICByZXR1cm4gXCJ3ZWJtXCI7XG4gICAgfVxuICAgIGlmIChsb3dlci5lbmRzV2l0aChcIi5tcDRcIikgfHwgbG93ZXIuZW5kc1dpdGgoXCIubW92XCIpKSB7XG4gICAgICByZXR1cm4gXCJtcDRcIjtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBvdXRwdXQgZXh0ZW5zaW9uOiAke3BhdGh9YCk7XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgY3JlYXRlKG9wdHM6IFNpbmtPcHRpb25zKTogUHJvbWlzZTxPdXRwdXRTaW5rPiB7XG4gICAgLy8gUGFydGlhbC1jb25zdHJ1Y3Rpb24gc2FmZXR5OiBkaXNwb3NlIG11eGVyL2VuY29kZXJzIGlmIGEgbGF0ZXIgc3RlcCB0aHJvd3M7IG1vdmUoKSBkaXNvd25zIG9uIHN1Y2Nlc3MuXG4gICAgYXdhaXQgdXNpbmcgc3RhY2sgPSBuZXcgQXN5bmNEaXNwb3NhYmxlU3RhY2soKTtcbiAgICBjb25zdCBtdXhlciA9IHN0YWNrLnVzZShuZXcgRm9ybWF0TXV4ZXIob3B0cy5vdXRGaWxlKSk7XG4gICAgY29uc3Qgc2V0dXAgPSBvcHRzLmtpbmQgPT09IFwibXA0XCIgPyBhd2FpdCBjcmVhdGVNcDRWaWRlbyhvcHRzLCBtdXhlcikgOiBhd2FpdCBjcmVhdGVXZWJtVmlkZW8ob3B0cywgbXV4ZXIpO1xuICAgIGlmIChzZXR1cC52aWRlbykge1xuICAgICAgc3RhY2sudXNlKHNldHVwLnZpZGVvKTtcbiAgICB9XG4gICAgaWYgKHNldHVwLmh3VmlkZW8pIHtcbiAgICAgIHN0YWNrLnVzZShzZXR1cC5od1ZpZGVvKTtcbiAgICB9XG4gICAgaWYgKHNldHVwLmNvZGVjKSB7XG4gICAgICBzdGFjay51c2Uoc2V0dXAuY29kZWMpO1xuICAgIH1cbiAgICAvLyBPbmx5IGEgc2luay1vd25lZCBodyBkZXZpY2UgaXMgb3VycyB0byBmcmVlIGhlcmU7IGEgc2hhcmVkIGRldmljZSBiZWxvbmdzIHRvIHRoZSBwaXBlbGluZS5cbiAgICBpZiAoc2V0dXAub3duc0h3ICYmIHNldHVwLmh3KSB7XG4gICAgICBzdGFjay51c2Uoc2V0dXAuaHcpO1xuICAgIH1cbiAgICBjb25zdCBhdWRpbyA9IG9wdHMud2l0aEF1ZGlvID8gYXdhaXQgY3JlYXRlQXVkaW8ob3B0cy5raW5kLCBtdXhlcikgOiB1bmRlZmluZWQ7XG4gICAgaWYgKGF1ZGlvKSB7XG4gICAgICBzdGFjay51c2UoYXVkaW8pO1xuICAgIH1cbiAgICBhd2FpdCBtdXhlci5vcGVuKCk7XG4gICAgc3RhY2subW92ZSgpO1xuICAgIHJldHVybiBuZXcgT3V0cHV0U2luayh7IG11eGVyLCAuLi5zZXR1cCwgYXVkaW8sIG9wdHMgfSk7XG4gIH1cblxuICBzZXRJbnB1dFJhdGUoc2FtcGxlUmF0ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5fcy5hdWRpbz8uc2V0SW5wdXRSYXRlKHNhbXBsZVJhdGUpO1xuICB9XG5cbiAgYXN5bmMgZW5jb2RlQkdSQShiZ3JhRnJhbWU6IEZyYW1lKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyBod1ZpZGVvLCBtdXhlciB9ID0gdGhpcy5fcztcbiAgICBpZiAoaHdWaWRlbykge1xuICAgICAgcmV0dXJuIGh3VmlkZW8uZW5jb2RlKGJncmFGcmFtZSwgbXV4ZXIpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zd0VuY29kZShiZ3JhRnJhbWUpO1xuICB9XG5cbiAgYXN5bmMgZW5jb2RlRGVjb2RlZEZyYW1lKHNyYzogRnJhbWUpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IGh3VmlkZW8sIG11eGVyIH0gPSB0aGlzLl9zO1xuICAgIGlmIChod1ZpZGVvKSB7XG4gICAgICByZXR1cm4gaHdWaWRlby5lbmNvZGUoc3JjLCBtdXhlcik7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnN3RW5jb2RlKHNyYyk7XG4gIH1cblxuICBhc3luYyBlbmNvZGVBdWRpbyhwY206IEJ1ZmZlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuX3MuYXVkaW8/LmVuY29kZShwY20sIHRoaXMuX3MubXV4ZXIpO1xuICB9XG5cbiAgYXN5bmMgZmx1c2goKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyBod1ZpZGVvLCB2aWRlbywgYXVkaW8sIG11eGVyIH0gPSB0aGlzLl9zO1xuICAgIGF3YWl0IGF1ZGlvPy5mbHVzaChtdXhlcik7XG4gICAgaWYgKGh3VmlkZW8pIHtcbiAgICAgIGF3YWl0IGh3VmlkZW8uZmx1c2gobXV4ZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCB2aWRlbyEuZmx1c2gobXV4ZXIpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIFtTeW1ib2wuYXN5bmNEaXNwb3NlXSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fZGlzcG9zZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fZGlzcG9zZWQgPSB0cnVlO1xuICAgIGNvbnN0IHsgbXV4ZXIsIHZpZGVvLCBod1ZpZGVvLCBhdWRpbywgY29kZWMsIGh3LCBvd25zSHcgfSA9IHRoaXMuX3M7XG4gICAgdmlkZW8/LltTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICBod1ZpZGVvPy5bU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgYXVkaW8/LltTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICBjb2RlYz8uW1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgIGF3YWl0IG11eGVyW1N5bWJvbC5hc3luY0Rpc3Bvc2VdKCk7XG4gICAgaWYgKG93bnNIdykge1xuICAgICAgaHc/LmRpc3Bvc2UoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHN3RW5jb2RlKHNyYzogRnJhbWUpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IHZpZGVvLCBjb2RlYywgbXV4ZXIgfSA9IHRoaXMuX3M7XG4gICAgb2soY29kZWM/LnN3cywgXCJzd3Mgbm90IGluaXRpYWxpemVkXCIpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihjb2RlYy5kc3QubWFrZVdyaXRhYmxlKCksIFwic2lua0RzdC5tYWtlV3JpdGFibGVcIik7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IGNvZGVjLnN3cy5zY2FsZUZyYW1lKGNvZGVjLmRzdCwgc3JjKSwgXCJzaW5rU3dzLnNjYWxlRnJhbWVcIik7XG4gICAgYXdhaXQgdmlkZW8hLmVuY29kZShjb2RlYy5kc3QsIG11eGVyKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8wMS5cblxuaW1wb3J0IHsgRkZtcGVnRXJyb3IsIHR5cGUgRnJhbWUgfSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHsgSGFyZHdhcmVDb250ZXh0IH0gZnJvbSBcIm5vZGUtYXYvYXBpXCI7XG5pbXBvcnQgeyBBVl9QSVhfRk1UX0JHUkEsIEZGX0hXREVWSUNFX1RZUEVfQ1VEQSwgRkZfSFdERVZJQ0VfVFlQRV9WSURFT1RPT0xCT1ggfSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcblxuaW1wb3J0IHsgQ29uY3VycmVuY3lMaW1pdGVyIH0gZnJvbSBcIi4uL2xpbWl0ZXJcIjtcbmltcG9ydCB7IHdpdGhUaW1lb3V0IH0gZnJvbSBcIi4uL3RpbWluZ1wiO1xuaW1wb3J0IHsgQ29kZWNTdGF0ZSB9IGZyb20gXCIuL2NvZGVjXCI7XG5pbXBvcnQgeyBtYWtlRnJhbWUgfSBmcm9tIFwiLi9taXNjXCI7XG5pbXBvcnQgeyBPdXRwdXRTaW5rIH0gZnJvbSBcIi4vc2lua1wiO1xuXG5jb25zdCBEUkFJTl9USU1FT1VUX01TID0gNV8wMDA7XG4vLyBOb3JtYWwgZnJhbWUvYXVkaW8gZW5jb2RlIGxhbmRzIGluIHRlbnMgb2YgbXM7IHRoZSBib3VuZCBvbmx5IGJpdGVzIGEgd2VkZ2VkIG5hdGl2ZSBlbmNvZGUuXG5jb25zdCBFTkNPREVfVElNRU9VVF9NUyA9IDNfMDAwO1xuXG5leHBvcnQgaW50ZXJmYWNlIEVuY29kZXJQaXBlbGluZU9wdGlvbnMge1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgZnBzOiBudW1iZXI7XG4gIG91dEZpbGVzOiBzdHJpbmdbXTtcbiAgd2l0aEF1ZGlvPzogYm9vbGVhbjtcbiAgZGlzYWJsZUh3Q29kZWM/OiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgUGlwZWxpbmVTdGF0ZSB7XG4gIHNpbmtzOiBPdXRwdXRTaW5rW107XG4gIHNoYXJlZEh3PzogSGFyZHdhcmVDb250ZXh0O1xuICBsaW1pdGVyOiBDb25jdXJyZW5jeUxpbWl0ZXI7XG4gIHBuZ0NvZGVjPzogQ29kZWNTdGF0ZTtcbiAgb3V0RmlsZXM6IHN0cmluZ1tdO1xuICBvcHRzOiBFbmNvZGVyUGlwZWxpbmVPcHRpb25zO1xufVxuXG5leHBvcnQgY2xhc3MgRW5jb2RlclBpcGVsaW5lIHtcbiAgcHJpdmF0ZSBfczogUGlwZWxpbmVTdGF0ZTtcbiAgcHJpdmF0ZSBfZGlzcG9zZWQgPSBmYWxzZTtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHM6IFBpcGVsaW5lU3RhdGUpIHtcbiAgICB0aGlzLl9zID0gcztcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBjcmVhdGUob3B0czogRW5jb2RlclBpcGVsaW5lT3B0aW9ucyk6IFByb21pc2U8RW5jb2RlclBpcGVsaW5lPiB7XG4gICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0LCBmcHMsIG91dEZpbGVzLCB3aXRoQXVkaW8gPSBmYWxzZSwgZGlzYWJsZUh3Q29kZWMgPSBmYWxzZSB9ID0gb3B0cztcbiAgICBpZiAob3V0RmlsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJvdXRGaWxlcyBtdXN0IGNvbnRhaW4gYXQgbGVhc3Qgb25lIHBhdGhcIik7XG4gICAgfVxuXG4gICAgY29uc3Qga2luZHMgPSBvdXRGaWxlcy5tYXAoKHApID0+IE91dHB1dFNpbmsua2luZEZyb21QYXRoKHApKTtcbiAgICBjb25zdCBuZWVkc01wNEh3ID0gIWRpc2FibGVId0NvZGVjICYmIGtpbmRzLmluY2x1ZGVzKFwibXA0XCIpO1xuICAgIC8vIFBhcnRpYWwtY29uc3RydWN0aW9uIHNhZmV0eTogZGlzcG9zZSBzaGFyZWRIdyArIGFueSBzaW5rcyBhbHJlYWR5IGJ1aWx0IGlmIGEgbGF0ZXIgc2luayB0aHJvd3M7IG1vdmUoKSBkaXNvd25zIG9uIHN1Y2Nlc3MuXG4gICAgYXdhaXQgdXNpbmcgc3RhY2sgPSBuZXcgQXN5bmNEaXNwb3NhYmxlU3RhY2soKTtcbiAgICBjb25zdCBzaGFyZWRIdyA9IG5lZWRzTXA0SHcgPyAoSGFyZHdhcmVDb250ZXh0LmF1dG8oKSA/PyB1bmRlZmluZWQpIDogdW5kZWZpbmVkO1xuICAgIGlmIChzaGFyZWRIdykge1xuICAgICAgc3RhY2sudXNlKHNoYXJlZEh3KTtcbiAgICB9XG4gICAgY29uc3QgaXNId0FscGhhQ2FwYWJsZSA9XG4gICAgICBzaGFyZWRIdz8uZGV2aWNlVHlwZU5hbWUgPT09IEZGX0hXREVWSUNFX1RZUEVfVklERU9UT09MQk9YIHx8IHNoYXJlZEh3Py5kZXZpY2VUeXBlTmFtZSA9PT0gRkZfSFdERVZJQ0VfVFlQRV9DVURBO1xuXG4gICAgY29uc3Qgc2lua3M6IE91dHB1dFNpbmtbXSA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3V0RmlsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHNpbmsgPSBhd2FpdCBPdXRwdXRTaW5rLmNyZWF0ZSh7XG4gICAgICAgIG91dEZpbGU6IG91dEZpbGVzW2ldISxcbiAgICAgICAga2luZDoga2luZHNbaV0hLFxuICAgICAgICB3aWR0aCxcbiAgICAgICAgaGVpZ2h0LFxuICAgICAgICBmcHMsXG4gICAgICAgIHdpdGhBdWRpbyxcbiAgICAgICAgZGlzYWJsZUh3Q29kZWMsXG4gICAgICAgIHNoYXJlZEh3OiBraW5kc1tpXSA9PT0gXCJtcDRcIiAmJiBpc0h3QWxwaGFDYXBhYmxlID8gc2hhcmVkSHcgOiB1bmRlZmluZWQsXG4gICAgICB9KTtcbiAgICAgIHN0YWNrLnVzZShzaW5rKTtcbiAgICAgIHNpbmtzLnB1c2goc2luayk7XG4gICAgfVxuXG4gICAgc3RhY2subW92ZSgpO1xuICAgIHJldHVybiBuZXcgRW5jb2RlclBpcGVsaW5lKHtcbiAgICAgIHNpbmtzLFxuICAgICAgc2hhcmVkSHcsXG4gICAgICBsaW1pdGVyOiBuZXcgQ29uY3VycmVuY3lMaW1pdGVyKDEpLFxuICAgICAgb3V0RmlsZXMsXG4gICAgICBvcHRzLFxuICAgIH0pO1xuICB9XG5cbiAgc2V0dXBBdWRpbyhzYW1wbGVSYXRlOiBudW1iZXIpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IHNpbmsgb2YgdGhpcy5fcy5zaW5rcykge1xuICAgICAgc2luay5zZXRJbnB1dFJhdGUoc2FtcGxlUmF0ZSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZW5jb2RlQkdSQShpbnB1dDogQnVmZmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5lbnF1ZXVlKFwiZW5jb2RlQkdSQVwiLCBhc3luYyAoKSA9PiB7XG4gICAgICB1c2luZyBmcmFtZSA9IHRoaXMuYmdyYUZyYW1lKGlucHV0KTtcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKHRoaXMuX3Muc2lua3MubWFwKChzaW5rKSA9PiBzaW5rLmVuY29kZUJHUkEoZnJhbWUpKSk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBlbmNvZGVQTkcocG5nRGF0YTogQnVmZmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5lbnF1ZXVlKFwiZW5jb2RlUE5HXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gdGhpcy5fcy5vcHRzO1xuICAgICAgdGhpcy5fcy5wbmdDb2RlYyA/Pz0gYXdhaXQgQ29kZWNTdGF0ZS5jcmVhdGUod2lkdGgsIGhlaWdodCk7XG4gICAgICBjb25zdCBzcmMgPSBhd2FpdCB0aGlzLl9zLnBuZ0NvZGVjLmRlY29kZVBORyhwbmdEYXRhKTtcbiAgICAgIGZvciAoY29uc3Qgc2luayBvZiB0aGlzLl9zLnNpbmtzKSB7XG4gICAgICAgIGF3YWl0IHNpbmsuZW5jb2RlRGVjb2RlZEZyYW1lKHNyYyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBlbmNvZGVBdWRpbyhwY206IEJ1ZmZlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuZW5xdWV1ZShcImVuY29kZUF1ZGlvXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIGZvciAoY29uc3Qgc2luayBvZiB0aGlzLl9zLnNpbmtzKSB7XG4gICAgICAgIGF3YWl0IHNpbmsuZW5jb2RlQXVkaW8ocGNtKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZW5xdWV1ZShsYWJlbDogc3RyaW5nLCBmbjogKCkgPT4gUHJvbWlzZTx2b2lkPik6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB3aXRoVGltZW91dCh0aGlzLl9zLmxpbWl0ZXIuc2NoZWR1bGUoZm4pLCBFTkNPREVfVElNRU9VVF9NUywgbGFiZWwpO1xuICB9XG5cbiAgYXN5bmMgZmluaXNoKCk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgd2l0aFRpbWVvdXQoXG4gICAgICAgIHRoaXMuX3MubGltaXRlci5kcmFpbigpLFxuICAgICAgICBEUkFJTl9USU1FT1VUX01TLFxuICAgICAgICBcImVuY29kZXIgZHJhaW4gKG91dHB1dHMgaW5jb21wbGV0ZSDigJQgbmF0aXZlIGVuY29kZSB3ZWRnZWQpXCIsXG4gICAgICApO1xuICAgICAgZm9yIChjb25zdCBzaW5rIG9mIHRoaXMuX3Muc2lua3MpIHtcbiAgICAgICAgYXdhaXQgc2luay5mbHVzaCgpO1xuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICBhd2FpdCB0aGlzLmZyZWUoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3Mub3V0RmlsZXM7XG4gIH1cblxuICBhc3luYyBbU3ltYm9sLmFzeW5jRGlzcG9zZV0oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX2Rpc3Bvc2VkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGF3YWl0IHdpdGhUaW1lb3V0KFxuICAgICAgdGhpcy5fcy5saW1pdGVyLmRyYWluKCksXG4gICAgICBEUkFJTl9USU1FT1VUX01TLFxuICAgICAgXCJlbmNvZGVyIGRyYWluIChvdXRwdXRzIGluY29tcGxldGUg4oCUIG5hdGl2ZSBlbmNvZGUgd2VkZ2VkKVwiLFxuICAgICk7XG4gICAgYXdhaXQgdGhpcy5mcmVlKCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGZyZWUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX2Rpc3Bvc2VkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX2Rpc3Bvc2VkID0gdHJ1ZTtcbiAgICBmb3IgKGNvbnN0IHNpbmsgb2YgdGhpcy5fcy5zaW5rcykge1xuICAgICAgYXdhaXQgc2lua1tTeW1ib2wuYXN5bmNEaXNwb3NlXSgpO1xuICAgIH1cbiAgICB0aGlzLl9zLnBuZ0NvZGVjPy5bU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgdGhpcy5fcy5zaGFyZWRIdz8uZGlzcG9zZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBiZ3JhRnJhbWUoaW5wdXQ6IEJ1ZmZlcik6IEZyYW1lIHtcbiAgICAvLyBQYXJ0aWFsLWNvbnN0cnVjdGlvbiBzYWZldHk6IGZyZWUgZnJhbWUgaWYgZnJvbUJ1ZmZlciB0aHJvd3MgYmVmb3JlIHdlIHJldHVybiBpdC5cbiAgICB1c2luZyBzdGFjayA9IG5ldyBEaXNwb3NhYmxlU3RhY2soKTtcbiAgICBjb25zdCBmcmFtZSA9IHN0YWNrLnVzZShtYWtlRnJhbWUodGhpcy5fcy5vcHRzLndpZHRoLCB0aGlzLl9zLm9wdHMuaGVpZ2h0LCBBVl9QSVhfRk1UX0JHUkEpKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoZnJhbWUuZnJvbUJ1ZmZlcihpbnB1dCksIFwiYmdyYUZyYW1lLmZyb21CdWZmZXJcIik7XG4gICAgc3RhY2subW92ZSgpO1xuICAgIHJldHVybiBmcmFtZTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wNi5cblxuaW1wb3J0IHR5cGUgeyBOYXRpdmVJbWFnZSwgU2l6ZSB9IGZyb20gXCJlbGVjdHJvblwiO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNFbXB0eShpbWFnZTogTmF0aXZlSW1hZ2UpIHtcbiAgY29uc3Qgc2l6ZSA9IGltYWdlLmdldFNpemUoKTtcbiAgaWYgKHNpemUud2lkdGggPT09IDAgfHwgc2l6ZS5oZWlnaHQgPT09IDApIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gaW1hZ2UuaXNFbXB0eSgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2l6ZUVxdWFscyhhOiBTaXplLCBiOiBTaXplKSB7XG4gIHJldHVybiBhLndpZHRoID09PSBiLndpZHRoICYmIGEuaGVpZ2h0ID09PSBiLmhlaWdodDtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDcvMDMuXG5cbmNvbnN0IEdSSUQgPSAzMjsgLy8gcmVzb2x1dGlvbi1pbmRlcGVuZGVudCBsYXR0aWNlIGZvciB0aGUgbW9kYWwtY29sb3IgcHJlLXBhc3NcbmNvbnN0IFNUUklERSA9IDQ7IC8vIG1haW4tc2NhbiBzdGVwOyByb3ctc3RhZ2dlcmVkIHNvIGFueSDiiaUxcHggc3RydWN0dXJlIGxhbmRzIG9uIGEgc2FtcGxlIHdpdGhpbiA0IHJvd3NcbmNvbnN0IENPTlRFTlRfREVMVEEgPSA4OyAvLyBtYXggcGVyLWNoYW5uZWwgZGlzdGFuY2UgKDAtMjU1KSBzdGlsbCBjb3VudGVkIGFzIHRoZSBkb21pbmFudCBjb2xvclxuY29uc3QgTUlOX0NPTlRFTlRfU0FNUExFUyA9IDE2OyAvLyByZW5kZXJlZCBmcmFtZXMgYXJlIG5vaXNlLWZyZWUsIHNvIGEgaGFuZGZ1bCBvZiBvZmYtZG9taW5hbnQgc2FtcGxlcyBpcyByZWFsIGNvbnRlbnRcbmV4cG9ydCBjb25zdCBCTEFOS19XQVJOX1JBVElPID0gMC41OyAvLyBibGFuay1mcmFtZSBmcmFjdGlvbiBhYm92ZSB0aGlzIHdhcm5zIGF0IHJlbmRlciBlbmRcblxuLy8gNSBiaXRzIHBlciBjaGFubmVsLCBhbHBoYSBpbmNsdWRlZCDigJQgdHJhbnNwYXJlbnQgc3VyZmFjZXMgY2FycnkgY29udGVudCBpbiBjb3ZlcmFnZSwgbm90IGNvbG9yLlxuZnVuY3Rpb24gcXVhbnRpemUoYmdyYTogQnVmZmVyLCBpOiBudW1iZXIpOiBudW1iZXIge1xuICByZXR1cm4gKFxuICAgIChiZ3JhLnJlYWRVSW50OChpKSA+PiAzKSB8XG4gICAgKChiZ3JhLnJlYWRVSW50OChpICsgMSkgPj4gMykgPDwgNSkgfFxuICAgICgoYmdyYS5yZWFkVUludDgoaSArIDIpID4+IDMpIDw8IDEwKSB8XG4gICAgKChiZ3JhLnJlYWRVSW50OChpICsgMykgPj4gMykgPDwgMTUpXG4gICk7XG59XG5cbi8vIEJ5dGUgb2Zmc2V0IG9mIGEgcGl4ZWwgY2FycnlpbmcgdGhlIGZyYW1lJ3MgZG9taW5hbnQgY29sb3IgKG1vZGUgb3ZlciBhIHNwYXJzZSBsYXR0aWNlKS5cbmZ1bmN0aW9uIG1vZGFsUGl4ZWwoYmdyYTogQnVmZmVyLCB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcik6IG51bWJlciB7XG4gIGNvbnN0IHN0ZXBYID0gTWF0aC5tYXgoMSwgTWF0aC5mbG9vcih3aWR0aCAvIEdSSUQpKTtcbiAgY29uc3Qgc3RlcFkgPSBNYXRoLm1heCgxLCBNYXRoLmZsb29yKGhlaWdodCAvIEdSSUQpKTtcbiAgY29uc3QgY291bnRzID0gbmV3IE1hcDxudW1iZXIsIG51bWJlcj4oKTtcbiAgY29uc3QgZmlyc3RJZHggPSBuZXcgTWFwPG51bWJlciwgbnVtYmVyPigpO1xuICBsZXQgYmVzdCA9IDA7XG4gIGxldCBiZXN0Q291bnQgPSAwO1xuICBmb3IgKGxldCB5ID0gMDsgeSA8IGhlaWdodDsgeSArPSBzdGVwWSkge1xuICAgIGZvciAobGV0IHggPSAwOyB4IDwgd2lkdGg7IHggKz0gc3RlcFgpIHtcbiAgICAgIGNvbnN0IGkgPSAoeSAqIHdpZHRoICsgeCkgKiA0O1xuICAgICAgY29uc3Qga2V5ID0gcXVhbnRpemUoYmdyYSwgaSk7XG4gICAgICBjb25zdCBjb3VudCA9IChjb3VudHMuZ2V0KGtleSkgPz8gMCkgKyAxO1xuICAgICAgY291bnRzLnNldChrZXksIGNvdW50KTtcbiAgICAgIGlmICghZmlyc3RJZHguaGFzKGtleSkpIHtcbiAgICAgICAgZmlyc3RJZHguc2V0KGtleSwgaSk7XG4gICAgICB9XG4gICAgICBpZiAoY291bnQgPiBiZXN0Q291bnQpIHtcbiAgICAgICAgYmVzdENvdW50ID0gY291bnQ7XG4gICAgICAgIGJlc3QgPSBrZXk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBmaXJzdElkeC5nZXQoYmVzdCkgPz8gMDtcbn1cblxuLy8gQmxhbmsgPSBkb21pbmFudC1jb2xvciBjb3ZlcmFnZTogZmV3ZXIgdGhhbiBNSU5fQ09OVEVOVF9TQU1QTEVTIHNhbXBsZXMgZGV2aWF0ZSBmcm9tIHRoZSBtb2RhbCBjb2xvci5cbmV4cG9ydCBmdW5jdGlvbiBpc0JsYW5rRnJhbWUoYmdyYTogQnVmZmVyLCB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcik6IGJvb2xlYW4ge1xuICBjb25zdCBtID0gbW9kYWxQaXhlbChiZ3JhLCB3aWR0aCwgaGVpZ2h0KTtcbiAgY29uc3QgbWIgPSBiZ3JhLnJlYWRVSW50OChtKTtcbiAgY29uc3QgbWcgPSBiZ3JhLnJlYWRVSW50OChtICsgMSk7XG4gIGNvbnN0IG1yID0gYmdyYS5yZWFkVUludDgobSArIDIpO1xuICBjb25zdCBtYSA9IGJncmEucmVhZFVJbnQ4KG0gKyAzKTtcbiAgbGV0IGNvbnRlbnQgPSAwO1xuICBmb3IgKGxldCB5ID0gMDsgeSA8IGhlaWdodDsgeSArPSBTVFJJREUpIHtcbiAgICBjb25zdCBvZmZzZXQgPSAoeSA+PiAyKSAmIChTVFJJREUgLSAxKTtcbiAgICBmb3IgKGxldCB4ID0gb2Zmc2V0OyB4IDwgd2lkdGg7IHggKz0gU1RSSURFKSB7XG4gICAgICBjb25zdCBpID0gKHkgKiB3aWR0aCArIHgpICogNDtcbiAgICAgIGlmIChcbiAgICAgICAgTWF0aC5hYnMoYmdyYS5yZWFkVUludDgoaSkgLSBtYikgPiBDT05URU5UX0RFTFRBIHx8XG4gICAgICAgIE1hdGguYWJzKGJncmEucmVhZFVJbnQ4KGkgKyAxKSAtIG1nKSA+IENPTlRFTlRfREVMVEEgfHxcbiAgICAgICAgTWF0aC5hYnMoYmdyYS5yZWFkVUludDgoaSArIDIpIC0gbXIpID4gQ09OVEVOVF9ERUxUQSB8fFxuICAgICAgICBNYXRoLmFicyhiZ3JhLnJlYWRVSW50OChpICsgMykgLSBtYSkgPiBDT05URU5UX0RFTFRBXG4gICAgICApIHtcbiAgICAgICAgY29udGVudCsrO1xuICAgICAgICBpZiAoY29udGVudCA+PSBNSU5fQ09OVEVOVF9TQU1QTEVTKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgY2xhc3MgQmxhbmtTdGF0cyB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3dpZHRoOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2hlaWdodDogbnVtYmVyO1xuICBwcml2YXRlIF90b3RhbCA9IDA7XG4gIHByaXZhdGUgX2JsYW5rID0gMDtcblxuICBjb25zdHJ1Y3Rvcih3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcikge1xuICAgIHRoaXMuX3dpZHRoID0gd2lkdGg7XG4gICAgdGhpcy5faGVpZ2h0ID0gaGVpZ2h0O1xuICB9XG5cbiAgc2FtcGxlKGZyYW1lOiBCdWZmZXIpOiB2b2lkIHtcbiAgICB0aGlzLl90b3RhbCsrO1xuICAgIGlmIChpc0JsYW5rRnJhbWUoZnJhbWUsIHRoaXMuX3dpZHRoLCB0aGlzLl9oZWlnaHQpKSB7XG4gICAgICB0aGlzLl9ibGFuaysrO1xuICAgIH1cbiAgfVxuXG4gIC8vIEZyYWN0aW9uIG9mIHdyaXR0ZW4gZnJhbWVzIHRoYXQgd2VyZSBjb250ZW50bGVzcyAoMCA9IGFsbCBoYWQgY29udGVudCwgMSA9IGFsbCBibGFuaykuXG4gIGZpbmFsaXplKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3RvdGFsID4gMCA/IHRoaXMuX2JsYW5rIC8gdGhpcy5fdG90YWwgOiAwO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAzLzIzLlxuXG5leHBvcnQgY29uc3QgSkFOS19XQVJOX1NDT1JFID0gMC4yNTsgLy8gamFuayBzY29yZSBhYm92ZSB0aGlzIHdhcm5zIGF0IHJlbmRlciBlbmQgKH5xdWFydGVyIGRyb3BwZWQgb3IgYSB+MC41cyBmcmVlemUpXG5cbi8vIEZyYW1lLWRyb3AgcXVhbGl0eSBzY29yZSAoMCA9IHBlcmZlY3QsIDEgPSB3b3JzdCk6IGdsb2JhbCBkcm9wIHJhdGUgYW5kIGxvY2FsIGJ1cnN0IHNldmVyaXR5IGNvbWJpbmVkIHZpYSAxLSgxLWcpKDEtbCkuXG5leHBvcnQgaW50ZXJmYWNlIERyb3BTY29yZSB7XG4gIGdsb2JhbDogbnVtYmVyO1xuICBsb2NhbDogbnVtYmVyO1xuICBqYW5rOiBudW1iZXI7XG4gIGV4cGVjdGVkOiBudW1iZXI7XG4gIGFjdHVhbDogbnVtYmVyO1xuICBtYXhCdXJzdDogbnVtYmVyO1xufVxuXG5leHBvcnQgY2xhc3MgRHJvcFN0YXRzIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfZnBzOiBudW1iZXI7XG4gIHByaXZhdGUgX2FjdHVhbCA9IDA7XG4gIHByaXZhdGUgX2N1cnJlbnRCdXJzdCA9IDA7XG4gIHByaXZhdGUgX2J1cnN0czogbnVtYmVyW10gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihmcHM6IG51bWJlcikge1xuICAgIHRoaXMuX2ZwcyA9IGZwcztcbiAgfVxuXG4gIHdyb3RlKGNvdW50ID0gMSk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9jdXJyZW50QnVyc3QgPiAwKSB7XG4gICAgICB0aGlzLl9idXJzdHMucHVzaCh0aGlzLl9jdXJyZW50QnVyc3QpO1xuICAgICAgdGhpcy5fY3VycmVudEJ1cnN0ID0gMDtcbiAgICB9XG4gICAgdGhpcy5fYWN0dWFsICs9IGNvdW50O1xuICB9XG5cbiAgZHJvcHBlZChjb3VudCA9IDEpOiB2b2lkIHtcbiAgICB0aGlzLl9jdXJyZW50QnVyc3QgKz0gY291bnQ7XG4gIH1cblxuICBmaW5hbGl6ZSgpOiBEcm9wU2NvcmUge1xuICAgIGlmICh0aGlzLl9jdXJyZW50QnVyc3QgPiAwKSB7XG4gICAgICB0aGlzLl9idXJzdHMucHVzaCh0aGlzLl9jdXJyZW50QnVyc3QpO1xuICAgICAgdGhpcy5fY3VycmVudEJ1cnN0ID0gMDtcbiAgICB9XG5cbiAgICBsZXQgdG90YWxEcm9wcGVkID0gMDtcbiAgICBsZXQgbG9jYWxTdW0gPSAwO1xuICAgIGxldCBtYXhCdXJzdCA9IDA7XG4gICAgZm9yIChjb25zdCBidXJzdCBvZiB0aGlzLl9idXJzdHMpIHtcbiAgICAgIHRvdGFsRHJvcHBlZCArPSBidXJzdDtcbiAgICAgIG1heEJ1cnN0ID0gTWF0aC5tYXgobWF4QnVyc3QsIGJ1cnN0KTtcbiAgICAgIGNvbnN0IHBlcmNlcHRpYmxlID0gTWF0aC5tYXgoMCwgYnVyc3QgLSAxKTtcbiAgICAgIGxvY2FsU3VtICs9IChwZXJjZXB0aWJsZSAvIHRoaXMuX2ZwcykgKiogMjtcbiAgICB9XG5cbiAgICBjb25zdCBleHBlY3RlZCA9IHRoaXMuX2FjdHVhbCArIHRvdGFsRHJvcHBlZDtcbiAgICBjb25zdCBnID0gZXhwZWN0ZWQgPiAwID8gdG90YWxEcm9wcGVkIC8gZXhwZWN0ZWQgOiAwO1xuICAgIGNvbnN0IGwgPSBNYXRoLm1pbigxLCBsb2NhbFN1bSk7XG4gICAgY29uc3Qgc2NvcmUgPSAxIC0gKDEgLSBnKSAqICgxIC0gbCk7XG5cbiAgICByZXR1cm4geyBnbG9iYWw6IGcsIGxvY2FsOiBsLCBqYW5rOiBzY29yZSwgZXhwZWN0ZWQsIGFjdHVhbDogdGhpcy5fYWN0dWFsLCBtYXhCdXJzdCB9O1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAzLzAyLlxuXG5pbXBvcnQgdHlwZSB7IFdlYkNvbnRlbnRzIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgdHlwZSB7IEVuY29kZXJQaXBlbGluZSB9IGZyb20gXCIuLi9iYXNlL2VuY29kZXIvcGlwZWxpbmVcIjtcblxuZXhwb3J0IGNvbnN0IEFVRElPX01FVEFfQ0hBTk5FTCA9IFwiYXVkaW8tbWV0YVwiO1xuZXhwb3J0IGNvbnN0IEFVRElPX0NIVU5LX0NIQU5ORUwgPSBcImF1ZGlvLWNodW5rXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXVkaW9MaXN0ZW5lck9wdGlvbnMge1xuICB3YzogV2ViQ29udGVudHM7XG4gIGVuY29kZXI6IEVuY29kZXJQaXBlbGluZTtcbiAgZ2V0VmlkZW9UaW1lTXM6ICgpID0+IG51bWJlcjtcbiAgb25FcnJvcjogKGVycm9yOiBFcnJvcikgPT4gdm9pZDtcbn1cblxuZXhwb3J0IHR5cGUgQXVkaW9EaXNwb3NhbCA9ICgpID0+IHZvaWQ7XG5cbi8vIEEgcmVuZGVyIHF1YW50dW0gaXMgMTI4IHN0ZXJlbyBmbG9hdHM7IGFueXRoaW5nIHBhc3QgYSBzZWNvbmQgb2YgYXVkaW8gY2FtZSBmcm9tIGEgcGFnZSBhYnVzaW5nIHRoZSBicmlkZ2UuXG5jb25zdCBNQVhfQ0hVTktfQllURVMgPSA0OF8wMDAgKiAyICogNDtcbmNvbnN0IE1BWF9TQU1QTEVfUkFURSA9IDE5Ml8wMDA7XG5cbmV4cG9ydCBmdW5jdGlvbiBhdHRhY2hBdWRpb0xpc3RlbmVycyh7IHdjLCBlbmNvZGVyLCBnZXRWaWRlb1RpbWVNcywgb25FcnJvciB9OiBBdWRpb0xpc3RlbmVyT3B0aW9ucyk6IEF1ZGlvRGlzcG9zYWwge1xuICBjb25zdCBvbk1ldGEgPSBhc3luYyAoX2U6IHVua25vd24sIGRhdGE6IHsgc2FtcGxlUmF0ZTogbnVtYmVyIH0pID0+IHtcbiAgICBjb25zdCBzYW1wbGVSYXRlID0gZGF0YS5zYW1wbGVSYXRlO1xuICAgIGlmICghTnVtYmVyLmlzRmluaXRlKHNhbXBsZVJhdGUpIHx8IHNhbXBsZVJhdGUgPD0gMCB8fCBzYW1wbGVSYXRlID4gTUFYX1NBTVBMRV9SQVRFKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHN0YXJ0TXMgPSBnZXRWaWRlb1RpbWVNcygpO1xuICAgIGVuY29kZXIuc2V0dXBBdWRpbyhzYW1wbGVSYXRlKTtcbiAgICBjb25zdCBzaWxlbmNlU2FtcGxlcyA9IE1hdGguY2VpbCgoc3RhcnRNcyAqIHNhbXBsZVJhdGUpIC8gMTAwMCk7XG4gICAgaWYgKHNpbGVuY2VTYW1wbGVzIDw9IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGVuY29kZXIuZW5jb2RlQXVkaW8oQnVmZmVyLmFsbG9jKHNpbGVuY2VTYW1wbGVzICogMiAqIDQpKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgb25FcnJvcihlcnJvciBhcyBFcnJvcik7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IG9uQ2h1bmsgPSBhc3luYyAoX2U6IHVua25vd24sIGJ1ZmZlcjogQnVmZmVyKSA9PiB7XG4gICAgLy8gUGFnZS13b3JsZCBjb2RlIG93bnMgdGhpcyBjaGFubmVsLCBzbyB0cmVhdCBpdHMgcGF5bG9hZCBhcyBpbnB1dDogd3Jvbmcgc2l6ZSBtZWFucyBpdCBpcyBub3Qgb3VyIHdvcmtsZXQncyBQQ00uXG4gICAgY29uc3QgYnl0ZXMgPSBBcnJheUJ1ZmZlci5pc1ZpZXcoYnVmZmVyKSA/IGJ1ZmZlci5ieXRlTGVuZ3RoIDogMDtcbiAgICBpZiAoYnl0ZXMgPT09IDAgfHwgYnl0ZXMgPiBNQVhfQ0hVTktfQllURVMgfHwgYnl0ZXMgJSA4ICE9PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBlbmNvZGVyLmVuY29kZUF1ZGlvKGJ1ZmZlcik7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIG9uRXJyb3IoZXJyb3IgYXMgRXJyb3IpO1xuICAgIH1cbiAgfTtcblxuICB3Yy5pcGMub24oQVVESU9fTUVUQV9DSEFOTkVMLCBvbk1ldGEpO1xuICB3Yy5pcGMub24oQVVESU9fQ0hVTktfQ0hBTk5FTCwgb25DaHVuayk7XG5cbiAgcmV0dXJuICgpID0+IHtcbiAgICB3Yy5pcGMucmVtb3ZlTGlzdGVuZXIoQVVESU9fTUVUQV9DSEFOTkVMLCBvbk1ldGEpO1xuICAgIHdjLmlwYy5yZW1vdmVMaXN0ZW5lcihBVURJT19DSFVOS19DSEFOTkVMLCBvbkNodW5rKTtcbiAgfTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDcvMTYuXG5cbmltcG9ydCB7IHdyaXRlRmlsZSB9IGZyb20gXCJub2RlOmZzL3Byb21pc2VzXCI7XG5pbXBvcnQgeyBkaXJuYW1lLCBqb2luIH0gZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHsgbmF0aXZlSW1hZ2UgfSBmcm9tIFwiZWxlY3Ryb25cIjtcblxuaW50ZXJmYWNlIFNjcmVlbnNob3RUYXJnZXQge1xuICBtczogbnVtYmVyO1xuICBpbmRleDogbnVtYmVyO1xuICBwYXRoOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2NyZWVuc2hvdE9wdGlvbnMge1xuICBtYXJrczogbnVtYmVyW107XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICBvdXRGaWxlczogc3RyaW5nW107XG59XG5cbi8vIER1bXBzIHBhaW50ZWQgQkdSQSBmcmFtZXMgdG8gUE5HIGF0IHJlcXVlc3RlZCBzZWNvbmQgbWFya3M7IHJlc3VsdCBvcmRlciB0cmFja3MgaW5wdXQgb3JkZXIuXG5leHBvcnQgY2xhc3MgU2NyZWVuc2hvdFRha2VyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfcGVuZGluZzogU2NyZWVuc2hvdFRhcmdldFtdO1xuICBwcml2YXRlIHJlYWRvbmx5IF9kb25lID0gbmV3IE1hcDxudW1iZXIsIHN0cmluZz4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfd3JpdGVzOiBQcm9taXNlPHZvaWQ+W10gPSBbXTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IF9zOiBTY3JlZW5zaG90T3B0aW9ucykge1xuICAgIGNvbnN0IGRpciA9IGRpcm5hbWUoX3Mub3V0RmlsZXNbMF0gPz8gXCIuXCIpO1xuICAgIHRoaXMuX3BlbmRpbmcgPSBfcy5tYXJrc1xuICAgICAgLm1hcCgoc2VjLCBpbmRleCkgPT4gKHsgbXM6IHNlYyAqIDEwMDAsIGluZGV4LCBwYXRoOiBqb2luKGRpciwgYHNjcmVlbnNob3RfJHtpbmRleH0ucG5nYCkgfSkpXG4gICAgICAuc29ydCgoYSwgYikgPT4gYS5tcyAtIGIubXMpO1xuICB9XG5cbiAgLy8gRHVtcCBldmVyeSBtYXJrIHdob3NlIHNlY29uZCBoYXMgYmVlbiByZWFjaGVkIGJ5IHRoaXMgZnJhbWUuXG4gIGNhcHR1cmUoY3VycmVudFRpbWVNczogbnVtYmVyLCBiZ3JhOiBCdWZmZXIpOiB2b2lkIHtcbiAgICB3aGlsZSAodGhpcy5fcGVuZGluZy5sZW5ndGggPiAwICYmIHRoaXMuX3BlbmRpbmdbMF0hLm1zIDw9IGN1cnJlbnRUaW1lTXMpIHtcbiAgICAgIHRoaXMudGFrZSh0aGlzLl9wZW5kaW5nLnNoaWZ0KCkhLCBiZ3JhKTtcbiAgICB9XG4gIH1cblxuICAvLyBSZWNvcmRpbmcgb3Zlcjogc25hcCBhbnkgbWFyayBwYXN0IHRoZSBsYXN0IGZyYW1lIG9udG8gaXQsIHRoZW4gd3JpdGUgYWxsIHNob3RzIG91dC5cbiAgYXN5bmMgZmluaXNoKGZpbmFsQmdyYT86IEJ1ZmZlcik6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICB3aGlsZSAoZmluYWxCZ3JhICYmIHRoaXMuX3BlbmRpbmcubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy50YWtlKHRoaXMuX3BlbmRpbmcuc2hpZnQoKSEsIGZpbmFsQmdyYSk7XG4gICAgfVxuICAgIGF3YWl0IFByb21pc2UuYWxsKHRoaXMuX3dyaXRlcyk7XG4gICAgcmV0dXJuIFsuLi50aGlzLl9kb25lLmVudHJpZXMoKV0uc29ydCgoYSwgYikgPT4gYVswXSAtIGJbMF0pLm1hcCgoWywgcGF0aF0pID0+IHBhdGgpO1xuICB9XG5cbiAgcHJpdmF0ZSB0YWtlKHRhcmdldDogU2NyZWVuc2hvdFRhcmdldCwgYmdyYTogQnVmZmVyKTogdm9pZCB7XG4gICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSB0aGlzLl9zO1xuICAgIGNvbnN0IHBuZyA9IG5hdGl2ZUltYWdlLmNyZWF0ZUZyb21CaXRtYXAoYmdyYSwgeyB3aWR0aCwgaGVpZ2h0IH0pLnRvUE5HKCk7XG4gICAgdGhpcy5fZG9uZS5zZXQodGFyZ2V0LmluZGV4LCB0YXJnZXQucGF0aCk7XG4gICAgdGhpcy5fd3JpdGVzLnB1c2god3JpdGVGaWxlKHRhcmdldC5wYXRoLCBwbmcpKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wNS5cblxuaW1wb3J0IHsgc2V0VGltZW91dCB9IGZyb20gXCJub2RlOnRpbWVycy9wcm9taXNlc1wiO1xuaW1wb3J0IHsgc2xlZXAgfSBmcm9tIFwiLi90aW1pbmdcIjtcblxuZXhwb3J0IGludGVyZmFjZSBSZXRyeU9wdGlvbnM8QXJncyBleHRlbmRzIHVua25vd25bXSwgUmV0PiB7XG4gIGZuOiAoLi4uYXJnczogQXJncykgPT4gUHJvbWlzZTxSZXQ+O1xuICBtYXhBdHRlbXB0cz86IG51bWJlcjtcbiAgdGltZW91dD86IG51bWJlcjtcbiAgLy8gQWJvcnQgYmFpbHMgaW1tZWRpYXRlbHkgaW5zdGVhZCBvZiByZXRyeWluZzsgc2lnbmFsIGlzIG5vdCBhdXRvLXRocmVhZGVkIGludG8gZm4g4oCUIGNhbGxlciB3aXJlcyBpdCAoZmV0Y2gsIFMzIHNlbmQpLlxuICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVzZVJldHJ5PEFyZ3MgZXh0ZW5kcyB1bmtub3duW10sIFJldD4oe1xuICBmbixcbiAgbWF4QXR0ZW1wdHMgPSAzLFxuICB0aW1lb3V0LFxuICBzaWduYWwsXG59OiBSZXRyeU9wdGlvbnM8QXJncywgUmV0Pikge1xuICBjb25zdCB0aW1lb3V0RXJyb3IgPSBuZXcgRXJyb3IoYHRpbWVvdXQgb3ZlciAke3RpbWVvdXR9bXNgKTtcbiAgcmV0dXJuIGFzeW5jICguLi5hcmdzOiBBcmdzKSA9PiB7XG4gICAgbGV0IGF0dGVtcHQgPSAwO1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBzaWduYWw/LnRocm93SWZBYm9ydGVkKCk7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBwcm9taXNlcyA9IFtmbiguLi5hcmdzKV07XG4gICAgICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICAgICAgcHJvbWlzZXMucHVzaChcbiAgICAgICAgICAgIHNldFRpbWVvdXQodGltZW91dCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgIHRocm93IHRpbWVvdXRFcnJvcjtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGF3YWl0IFByb21pc2UucmFjZShwcm9taXNlcyk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHNpZ25hbD8udGhyb3dJZkFib3J0ZWQoKTtcbiAgICAgICAgYXR0ZW1wdCsrO1xuICAgICAgICBpZiAoYXR0ZW1wdCA+PSBtYXhBdHRlbXB0cykge1xuICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgc2xlZXAoMiAqKiBhdHRlbXB0ICogMTAwICsgTWF0aC5yYW5kb20oKSAqIDEwMCk7XG4gICAgICB9XG4gICAgfVxuICB9O1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNy8yNy5cblxuZXhwb3J0IHR5cGUgV29ybGRNb2RlID0gXCJzaG9vdFwiIHwgXCJyZW5kZXJcIiB8IFwiYXVkaW9cIjtcblxuLy8gTmFtZXMgdGhlIHBhZ2Utd29ybGQgYnVuZGxlIGluIHRoZSBwcmVsb2FkJ3MgYXJndjsga2VlcCB0aGlzIG1vZHVsZSBkZXBlbmRlbmN5LWZyZWUsIHRoZSBwcmVsb2FkIGxvYWRzIGl0IGFzLWlzLlxuZXhwb3J0IGNvbnN0IFdPUkxEX0FSRyA9IFwiLS1wdXAtd29ybGQ9XCI7XG5cbi8vIFByZXNlbnQgb25seSB3aGVuIHRoZSBydW4gY2FwdHVyZXMgYXVkaW8sIHNvIGEgcGFnZSBpbiBhbnkgb3RoZXIgbW9kZSBoYXMgbm8gY2hhbm5lbCB0byBwdXNoIFBDTSB0aHJvdWdoLlxuZXhwb3J0IGNvbnN0IEFVRElPX0FSRyA9IFwiLS1wdXAtYXVkaW9cIjtcbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDMvMTAuXG5cbmV4cG9ydCBpbnRlcmZhY2UgV2FpdE9wdGlvbnMge1xuICB0aW1lb3V0OiBudW1iZXI7XG4gIG9uVGltZW91dD86ICgpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBjbGFzcyBXYWl0YWJsZUV2ZW50IHtcbiAgcHJpdmF0ZSBfcHJvbWlzZT86IFByb21pc2U8dm9pZD47XG4gIHByaXZhdGUgX3Jlc29sdmU/OiAoKSA9PiB2b2lkO1xuICBwcml2YXRlIF90aW1lb3V0VG9rZW4/OiBOb2RlSlMuVGltZW91dDtcblxuICB3YWl0KG9wdGlvbnM/OiBXYWl0T3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9wcm9taXNlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJhbHJlYWR5IHdhaXRpbmdcIik7XG4gICAgfVxuICAgIHRoaXMuX3Byb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgdGhpcy5fcmVzb2x2ZSA9IHJlc29sdmU7XG4gICAgICBpZiAob3B0aW9ucz8udGltZW91dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuX3RpbWVvdXRUb2tlbiA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIG9wdGlvbnMub25UaW1lb3V0Py4oKTtcbiAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH0sIG9wdGlvbnMudGltZW91dCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuX3Byb21pc2U7XG4gIH1cblxuICBzaWduYWwoKSB7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVvdXRUb2tlbik7XG4gICAgdGhpcy5fcHJvbWlzZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLl9yZXNvbHZlPy4oKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wOS5cblxuaW1wb3J0IHsgVVJMIH0gZnJvbSBcIm5vZGU6dXJsXCI7XG5pbXBvcnQgdHlwZSB7IEJyb3dzZXJXaW5kb3cgfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IENvbmN1cnJlbmN5TGltaXRlciB9IGZyb20gXCIuLi9iYXNlL2xpbWl0ZXJcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuLi9iYXNlL2xvZ2dpbmdcIjtcbmltcG9ydCB7IFdhaXRhYmxlRXZlbnQgfSBmcm9tIFwiLi4vYmFzZS93YWl0YWJsZV9ldmVudFwiO1xuXG5jb25zdCBUQUcgPSBcIltOZXR3b3JrXVwiO1xuXG5jb25zdCBtYXAgPSBuZXcgTWFwKFtcbiAgW2Bqc3N6LWJvc3MuaGRzbGIuY29tYCwgYGpzc3otYm9zcy5iaWxpYmlsaS5jb2BdLFxuICBbYGJvc3MuaGRzbGIuY29tYCwgYHNoamQtYm9zcy5iaWxpYmlsaS5jb2BdLFxuICBbYHVwb3Mtc3otbWlycm9yY29zLmJpbGl2aWRlby5jb21gLCBganNzei1pbm5lci1ib3NzLmJpbGliaWxpLmNvYF0sXG5dKTtcblxuY29uc3QgdGFyZ2V0cyA9IG5ldyBTZXQobWFwLnZhbHVlcygpKTtcblxuY29uc3QgTE9DQUxfU0NIRU1FUyA9IFtcInB1cDpcIiwgXCJwdXAtZnJhbWU6XCIsIFwiZmlsZTpcIiwgXCJkYXRhOlwiLCBcImJsb2I6XCIsIFwiY2hyb21lLWV4dGVuc2lvbjpcIiwgXCJkZXZ0b29sczpcIl07XG5cbmZ1bmN0aW9uIGlzTG9jYWxTY2hlbWUodXJsOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgZm9yIChjb25zdCBzIG9mIExPQ0FMX1NDSEVNRVMpIHtcbiAgICBpZiAodXJsLnN0YXJ0c1dpdGgocykpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzUHJveHlUYXJnZXQodXJsOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIHVybC5zdGFydHNXaXRoKFwiaHR0cFwiKSAmJiB0YXJnZXRzLmhhcyhuZXcgVVJMKHVybCkuaG9zdG5hbWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJveGllZFVybCh1cmw6IHN0cmluZykge1xuICBpZiAoIXVybC5zdGFydHNXaXRoKFwiaHR0cFwiKSkge1xuICAgIHJldHVybiB1cmw7XG4gIH1cbiAgY29uc3QgcGFyc2VkID0gbmV3IFVSTCh1cmwpO1xuICBjb25zdCB0YXJnZXQgPSBtYXAuZ2V0KHBhcnNlZC5ob3N0bmFtZSk7XG4gIGlmICghdGFyZ2V0KSB7XG4gICAgcmV0dXJuIHVybDtcbiAgfVxuICBwYXJzZWQuaG9zdG5hbWUgPSB0YXJnZXQ7XG4gIHBhcnNlZC5wcm90b2NvbCA9IFwiaHR0cDpcIjtcbiAgcmV0dXJuIHBhcnNlZC50b1N0cmluZygpO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5ldHdvcmtPcHRpb25zIHtcbiAgc291cmNlOiBzdHJpbmc7XG4gIHdpbmRvdzogQnJvd3NlcldpbmRvdztcbiAgdXNlSW5uZXJQcm94eT86IGJvb2xlYW47XG4gIHN0dWJNZWRpYT86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRJbnRlcmNlcHRvcih7IHNvdXJjZSwgd2luZG93LCB1c2VJbm5lclByb3h5LCBzdHViTWVkaWEgfTogTmV0d29ya09wdGlvbnMpIHtcbiAgY29uc3QgcmVxID0gd2luZG93LndlYkNvbnRlbnRzLnNlc3Npb24ud2ViUmVxdWVzdDtcbiAgY29uc3QgbGltaXRlciA9IG5ldyBDb25jdXJyZW5jeUxpbWl0ZXIoMjU2KTtcbiAgY29uc3QgZXZlbnRzID0gbmV3IE1hcDxzdHJpbmcsIFdhaXRhYmxlRXZlbnQ+KCk7XG5cbiAgYXN5bmMgZnVuY3Rpb24gd2FpdChrZXk6IHN0cmluZywgb25UaW1lb3V0PzogKCkgPT4gdm9pZCkge1xuICAgIGNvbnN0IGV2ZW50ID0gbmV3IFdhaXRhYmxlRXZlbnQoKTtcbiAgICBldmVudHMuc2V0KGtleSwgZXZlbnQpO1xuICAgIGF3YWl0IGV2ZW50LndhaXQoeyB0aW1lb3V0OiA1XzAwMCwgb25UaW1lb3V0IH0pLmZpbmFsbHkoKCkgPT4gZXZlbnRzLmRlbGV0ZShrZXkpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNpZ25hbChrZXk6IHN0cmluZykge1xuICAgIGV2ZW50cy5nZXQoa2V5KT8uc2lnbmFsKCk7XG4gIH1cblxuICByZXEub25CZWZvcmVSZXF1ZXN0KChkZXRhaWxzLCBjYWxsYmFjaykgPT4ge1xuICAgIGNvbnN0IHVybCA9IGRldGFpbHMudXJsO1xuICAgIC8vIFN3YXAgbWVkaWEgZm9yIGEgZnJhbWUtc2VydmVyIHN0dWIgKHRydWUgaW50cmluc2ljIHNpemUvZHVyYXRpb24pIHNvIEJsaW5rIGxheXMgb3V0IGxpa2UgQ2hyb21lLlxuICAgIGlmIChzdHViTWVkaWEgJiYgZGV0YWlscy5yZXNvdXJjZVR5cGUgPT09IFwibWVkaWFcIiAmJiAhdXJsLnN0YXJ0c1dpdGgoXCJwdXAtZnJhbWU6XCIpKSB7XG4gICAgICBjYWxsYmFjayh7XG4gICAgICAgIHJlZGlyZWN0VVJMOiBgcHVwLWZyYW1lOi8vc3R1Yj9zcmM9JHtlbmNvZGVVUklDb21wb25lbnQodXJsKX1gLFxuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHByb3hpZWQgPSB1c2VJbm5lclByb3h5ID8gcHJveGllZFVybCh1cmwpIDogdXJsO1xuICAgIGxpbWl0ZXIuc2NoZWR1bGUoKCkgPT4ge1xuICAgICAgY29uc3Qga2V5ID0gYCR7d2luZG93LmlkfV8ke2RldGFpbHMuaWR9YDtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhUQUcsIGBzdGFydDpgLCB7XG4gICAgICAgIGtleSxcbiAgICAgICAgdXJsLFxuICAgICAgICBwcm94aWVkLFxuICAgICAgICBtZXRob2Q6IGRldGFpbHMubWV0aG9kLFxuICAgICAgICBzb3VyY2UsXG4gICAgICAgIHN0YXRzOiBsaW1pdGVyLnN0YXRzLFxuICAgICAgfSk7XG4gICAgICBpZiAocHJveGllZCA9PT0gdXJsKSB7XG4gICAgICAgIGNhbGxiYWNrKHsgY2FuY2VsOiBmYWxzZSB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNhbGxiYWNrKHsgY2FuY2VsOiBmYWxzZSwgcmVkaXJlY3RVUkw6IHByb3hpZWQgfSk7XG4gICAgICB9XG4gICAgICBpZiAoaXNMb2NhbFNjaGVtZSh1cmwpKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB3YWl0KGtleSwgKCkgPT4ge1xuICAgICAgICBsb2dnZXIuZGVidWcoVEFHLCBgbWF5YmUgdGltZW91dDpgLCB7XG4gICAgICAgICAga2V5LFxuICAgICAgICAgIHVybCxcbiAgICAgICAgICBwcm94aWVkLFxuICAgICAgICAgIG1ldGhvZDogZGV0YWlscy5tZXRob2QsXG4gICAgICAgICAgc291cmNlLFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICByZXEub25IZWFkZXJzUmVjZWl2ZWQoKHsgdXJsLCByZXNwb25zZUhlYWRlcnMgfSwgY2FsbGJhY2spID0+IHtcbiAgICBkZWxldGUgcmVzcG9uc2VIZWFkZXJzPy5bXCJ4LWZyYW1lLW9wdGlvbnNcIl07XG4gICAgZGVsZXRlIHJlc3BvbnNlSGVhZGVycz8uW1wiWC1GcmFtZS1PcHRpb25zXCJdO1xuICAgIGRlbGV0ZSByZXNwb25zZUhlYWRlcnM/LltcImNvbnRlbnQtc2VjdXJpdHktcG9saWN5XCJdO1xuICAgIGRlbGV0ZSByZXNwb25zZUhlYWRlcnM/LltcIkNvbnRlbnQtU2VjdXJpdHktUG9saWN5XCJdO1xuICAgIC8vIFByb3h5aW5nIHJld3JvdGUgdGhlIG9yaWdpbiwgc28gZm9udHMgYW5kIG90aGVyIENPUlMtbW9kZSBmZXRjaGVzIG5lZWQgdGhlIGdyYW50IHRoZSBvcmlnaW5hbCBob3N0IHdvdWxkIGhhdmUgaGFkLlxuICAgIGlmICh1c2VJbm5lclByb3h5ICYmIGlzUHJveHlUYXJnZXQodXJsKSkge1xuICAgICAgY2FsbGJhY2soeyBjYW5jZWw6IGZhbHNlLCByZXNwb25zZUhlYWRlcnM6IHsgLi4ucmVzcG9uc2VIZWFkZXJzLCBcImFjY2Vzcy1jb250cm9sLWFsbG93LW9yaWdpblwiOiBbXCIqXCJdIH0gfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNhbGxiYWNrKHsgY2FuY2VsOiBmYWxzZSwgcmVzcG9uc2VIZWFkZXJzIH0pO1xuICB9KTtcblxuICByZXEub25Db21wbGV0ZWQoKGRldGFpbHMpID0+IHtcbiAgICBjb25zdCBrZXkgPSBgJHt3aW5kb3cuaWR9XyR7ZGV0YWlscy5pZH1gO1xuICAgIHNpZ25hbChrZXkpO1xuICAgIGxvZ2dlci5kZWJ1ZyhUQUcsIGBjb21wbGV0ZWQ6YCwge1xuICAgICAga2V5LFxuICAgICAgdXJsOiBkZXRhaWxzLnVybCxcbiAgICAgIG1ldGhvZDogZGV0YWlscy5tZXRob2QsXG4gICAgICBzdGF0dXNDb2RlOiBkZXRhaWxzLnN0YXR1c0NvZGUsXG4gICAgICBzb3VyY2UsXG4gICAgfSk7XG4gIH0pO1xuXG4gIHJlcS5vbkVycm9yT2NjdXJyZWQoKGRldGFpbHMpID0+IHtcbiAgICBjb25zdCBrZXkgPSBgJHt3aW5kb3cuaWR9XyR7ZGV0YWlscy5pZH1gO1xuICAgIHNpZ25hbChrZXkpO1xuICAgIGNvbnN0IHsgdXJsLCBtZXRob2QsIGVycm9yLCByZXNvdXJjZVR5cGUgfSA9IGRldGFpbHM7XG4gICAgbG9nZ2VyLmRlYnVnKFRBRywgYGVycm9yOmAsIHsga2V5LCB1cmwsIG1ldGhvZCwgZXJyb3IsIHJlc291cmNlVHlwZSwgc291cmNlIH0pO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVuc2V0SW50ZXJjZXB0b3Iod2luZG93OiBCcm93c2VyV2luZG93KSB7XG4gIGNvbnN0IHJlcSA9IHdpbmRvdy53ZWJDb250ZW50cy5zZXNzaW9uLndlYlJlcXVlc3Q7XG4gIHJlcS5vbkJlZm9yZVJlcXVlc3QobnVsbCk7XG4gIHJlcS5vbkhlYWRlcnNSZWNlaXZlZChudWxsKTtcbiAgcmVxLm9uQ29tcGxldGVkKG51bGwpO1xuICByZXEub25FcnJvck9jY3VycmVkKG51bGwpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8yNy5cblxuaW1wb3J0IHsgam9pbiB9IGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IEJyb3dzZXJXaW5kb3cgfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IHB1cFBrZ1Jvb3QsIHB1cFByZWxvYWQgfSBmcm9tIFwiLi4vYmFzZS9jb25zdGFudHNcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuLi9iYXNlL2xvZ2dpbmdcIjtcbmltcG9ydCB7IHVzZVJldHJ5IH0gZnJvbSBcIi4uL2Jhc2UvcmV0cnlcIjtcbmltcG9ydCB7IHNsZWVwIH0gZnJvbSBcIi4uL2Jhc2UvdGltaW5nXCI7XG5pbXBvcnQgeyBBVURJT19BUkcsIFdPUkxEX0FSRywgdHlwZSBXb3JsZE1vZGUgfSBmcm9tIFwiLi4vcnVudGltZS93b3JsZFwiO1xuaW1wb3J0IHsgcHJveGllZFVybCwgc2V0SW50ZXJjZXB0b3IsIHVuc2V0SW50ZXJjZXB0b3IgfSBmcm9tIFwiLi9uZXR3b3JrXCI7XG5pbXBvcnQgeyBjcmVhdGVTdGVnb1VSTCB9IGZyb20gXCIuL3Byb3RvY29sXCI7XG5pbXBvcnQgdHlwZSB7IElQQ1JlbmRlck9wdGlvbnMgfSBmcm9tIFwiLi9zY2hlbWFcIjtcblxuY29uc3QgVEFHID0gXCJbV2luZG93XVwiO1xuY29uc3QgVElNRU9VVF9FUlJPUiA9IG5ldyBFcnJvcihcIndpbmRvdyB0aW1lb3V0XCIpO1xuY29uc3QgQ09OU09MRV9JR05PUkVTID0gW1wiTWl4ZWQgQ29udGVudDogVGhlIHBhZ2UgYXRcIl07XG5cbmludGVyZmFjZSBGaW5pc2hPcHRpb25zIHtcbiAgc291cmNlOiBzdHJpbmc7XG4gIHdpbjogQnJvd3NlcldpbmRvdztcbiAgYWN0aW9uOiAoKSA9PiB2b2lkO1xuICB0aW1lb3V0TXM6IG51bWJlcjtcbiAgdG9sZXJhbnQ/OiBib29sZWFuO1xuICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbn1cblxuZnVuY3Rpb24gd2FpdEZvckZpbmlzaCh7IHNvdXJjZSwgd2luLCBhY3Rpb24sIHRpbWVvdXRNcywgdG9sZXJhbnQsIHNpZ25hbCB9OiBGaW5pc2hPcHRpb25zKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgbGV0IGRvbVJlYWR5ID0gZmFsc2U7XG4gICAgLy8gVG9sZXJhbnQgcHJvY2VlZHMgb24gYSBwYXJ0aWFsIERPTSBvbmx5IGFzIGEgdGltZW91dCBmYWxsYmFjayDigJQgc3RhcnRpbmcgb24gYmFyZSBkb20tcmVhZHkgbGVhdmVzIHRoZSBsb2FkIHBlbmRpbmcgYW5kIHdlZGdlcyB2aXJ0dWFsIHRpbWUuXG4gICAgY29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4gZG9uZSh0b2xlcmFudCAmJiBkb21SZWFkeSA/IHVuZGVmaW5lZCA6IFRJTUVPVVRfRVJST1IpLCB0aW1lb3V0TXMpO1xuICAgIGNvbnN0IGRvbmUgPSAoZXJyPzogdW5rbm93bikgPT4ge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgaWYgKGVycikge1xuICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHNpZ25hbD8udGhyb3dJZkFib3J0ZWQoKTtcbiAgICBzaWduYWw/LmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCAoKSA9PiBkb25lKHNpZ25hbC5yZWFzb24pLCB7XG4gICAgICBvbmNlOiB0cnVlLFxuICAgIH0pO1xuICAgIHdpbi53ZWJDb250ZW50cy5vbmNlKFwiZG9tLXJlYWR5XCIsICgpID0+IHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhUQUcsIFwiZG9tLXJlYWR5OlwiLCB7IHNvdXJjZSB9KTtcbiAgICAgIGRvbVJlYWR5ID0gdHJ1ZTtcbiAgICB9KTtcbiAgICB3aW4ud2ViQ29udGVudHMub25jZShcImRpZC1zdG9wLWxvYWRpbmdcIiwgKCkgPT4ge1xuICAgICAgbG9nZ2VyLmRlYnVnKFRBRywgXCJkaWQtc3RvcC1sb2FkaW5nOlwiLCB7IHNvdXJjZSB9KTtcbiAgICAgIGRvbmUoKTtcbiAgICB9KTtcbiAgICB3aW4ud2ViQ29udGVudHMub25jZShcImRpZC1mYWlsLWxvYWRcIiwgKF9lLCBjb2RlLCBkZXNjLCB1cmwpID0+IHtcbiAgICAgIGNvbnN0IG1zZyA9IGBkaWQtZmFpbC1sb2FkOiAke0pTT04uc3RyaW5naWZ5KHsgdXJsLCBzb3VyY2UsIGNvZGUsIGRlc2MgfSl9YDtcbiAgICAgIGxvZ2dlci5lcnJvcihUQUcsIG1zZyk7XG4gICAgICBkb25lKG5ldyBFcnJvcihtc2cpKTtcbiAgICB9KTtcbiAgICB3aW4ud2ViQ29udGVudHMub25jZShcInByZWxvYWQtZXJyb3JcIiwgKF9lLCBfcGF0aCwgZXJyb3IpID0+IHtcbiAgICAgIGxvZ2dlci5lcnJvcihUQUcsIGBwcmVsb2FkLWVycm9yOiAke0pTT04uc3RyaW5naWZ5KHsgc291cmNlLCBtZXNzYWdlOiBlcnJvci5tZXNzYWdlIH0pfWApO1xuICAgICAgZG9uZShlcnJvcik7XG4gICAgfSk7XG4gICAgd2luLndlYkNvbnRlbnRzLm9uY2UoXCJyZW5kZXItcHJvY2Vzcy1nb25lXCIsIChfZSwgeyBleGl0Q29kZSwgcmVhc29uIH0pID0+IHtcbiAgICAgIGNvbnN0IG1zZyA9IGByZW5kZXItcHJvY2Vzcy1nb25lOiAke0pTT04uc3RyaW5naWZ5KHsgc291cmNlLCBleGl0Q29kZSwgcmVhc29uIH0pfWA7XG4gICAgICBsb2dnZXIuZXJyb3IoVEFHLCBtc2cpO1xuICAgICAgZG9uZShuZXcgRXJyb3IobXNnKSk7XG4gICAgfSk7XG4gICAgYWN0aW9uKCk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGlzcG9zZVdpbmRvdyh3aW46IEJyb3dzZXJXaW5kb3cpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiB7XG4gICAgdW5zZXRJbnRlcmNlcHRvcih3aW4pO1xuICAgIGNvbnN0IHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBsb2dnZXIud2FybihUQUcsIFwiZm9yY2UgY2xvc2VcIik7XG4gICAgICAgIHdpbi5kZXN0cm95KCk7XG4gICAgICB9IGNhdGNoIHt9XG4gICAgICBkb25lKCk7XG4gICAgfSwgMTAwMCk7XG4gICAgY29uc3QgZG9uZSA9ICgpID0+IHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICByZXNvbHZlKCk7XG4gICAgfTtcbiAgICB3aW4ud2ViQ29udGVudHMuc3RvcFBhaW50aW5nKCk7XG4gICAgd2luLndlYkNvbnRlbnRzLmRlYnVnZ2VyLmRldGFjaCgpO1xuICAgIHdpbi5vbmNlKFwiY2xvc2VkXCIsIGRvbmUpO1xuICAgIHdpbi5jbG9zZSgpO1xuICB9KTtcbn1cblxuZXhwb3J0IHR5cGUgV2luZG93Q3JlYXRlZENhbGxiYWNrID0gKHdpbmRvdzogQnJvd3NlcldpbmRvdykgPT4gdm9pZCB8IFByb21pc2U8dm9pZD47XG5cbmV4cG9ydCBpbnRlcmZhY2UgV2luZG93T3B0aW9ucyB7XG4gIHNvdXJjZTogc3RyaW5nO1xuICByZW5kZXJlcjogSVBDUmVuZGVyT3B0aW9ucztcbiAgdG9sZXJhbnQ/OiBib29sZWFuO1xuICBvbkNyZWF0ZWQ/OiBXaW5kb3dDcmVhdGVkQ2FsbGJhY2s7XG4gIHNpZ25hbD86IEFib3J0U2lnbmFsO1xufVxuXG4vLyBQYWdlLXdvcmxkIGhvb2sgYnVuZGxlczsgdGhlIHByZWxvYWQgZXZhbHVhdGVzIHRoZSBuYW1lZCBvbmUgaW4gdGhlIG1haW4gd29ybGQgb2YgZXZlcnkgZnJhbWUgaXQgbGFuZHMgaW4uXG5jb25zdCBXT1JMRF9TQ1JJUFRTOiBSZWNvcmQ8V29ybGRNb2RlLCBzdHJpbmc+ID0ge1xuICBzaG9vdDogam9pbihwdXBQa2dSb290LCBcImRpc3RcIiwgXCJydW50aW1lXCIsIFwic2hvb3QuZ2xvYmFsLmpzXCIpLFxuICByZW5kZXI6IGpvaW4ocHVwUGtnUm9vdCwgXCJkaXN0XCIsIFwicnVudGltZVwiLCBcInJlbmRlci5nbG9iYWwuanNcIiksXG4gIGF1ZGlvOiBqb2luKHB1cFBrZ1Jvb3QsIFwiZGlzdFwiLCBcInJ1bnRpbWVcIiwgXCJhdWRpby5nbG9iYWwuanNcIiksXG59O1xuXG5mdW5jdGlvbiBwaWNrV29ybGRTY3JpcHQocmVuZGVyZXI6IElQQ1JlbmRlck9wdGlvbnMpOiBzdHJpbmcge1xuICBjb25zdCBtb2RlOiBXb3JsZE1vZGUgPSByZW5kZXJlci5kZXRlcm1pbmlzdGljID8gXCJzaG9vdFwiIDogcmVuZGVyZXIud2l0aEF1ZGlvID8gXCJhdWRpb1wiIDogXCJyZW5kZXJcIjtcbiAgcmV0dXJuIFdPUkxEX1NDUklQVFNbbW9kZV07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIG9wZW5XaW5kb3coeyBzb3VyY2UsIHJlbmRlcmVyLCB0b2xlcmFudCwgc2lnbmFsLCBvbkNyZWF0ZWQgfTogV2luZG93T3B0aW9ucyk6IFByb21pc2U8QnJvd3NlcldpbmRvdz4ge1xuICBjb25zdCB7IHdpZHRoLCBoZWlnaHQsIHVzZUlubmVyUHJveHkgfSA9IHJlbmRlcmVyO1xuICBjb25zdCBzcmMgPSB1c2VJbm5lclByb3h5ID8gcHJveGllZFVybChzb3VyY2UpIDogc291cmNlO1xuXG4gIGNvbnN0IHdpbiA9IG5ldyBCcm93c2VyV2luZG93KHtcbiAgICB3aWR0aCxcbiAgICBoZWlnaHQ6IGhlaWdodCArIDEsXG4gICAgbWluV2lkdGg6IHdpZHRoLFxuICAgIG1pbkhlaWdodDogaGVpZ2h0ICsgMSxcbiAgICBtYXhXaWR0aDogd2lkdGgsXG4gICAgbWF4SGVpZ2h0OiBoZWlnaHQgKyAxLFxuICAgIHJlc2l6YWJsZTogZmFsc2UsXG4gICAgbWluaW1pemFibGU6IGZhbHNlLFxuICAgIG1vdmFibGU6IGZhbHNlLFxuICAgIHNob3c6IGZhbHNlLFxuICAgIHRyYW5zcGFyZW50OiB0cnVlLFxuICAgIGJhY2tncm91bmRDb2xvcjogdW5kZWZpbmVkLFxuICAgIGZyYW1lOiBmYWxzZSxcbiAgICB3ZWJQcmVmZXJlbmNlczoge1xuICAgICAgb2Zmc2NyZWVuOiB0cnVlLFxuICAgICAgYmFja2dyb3VuZFRocm90dGxpbmc6IGZhbHNlLFxuICAgICAgLy8gQ2FycmllcyB0aGUgYnJpZGdlIHByZWxvYWQgaW50byB0aGUgdGFyZ2V0IGlmcmFtZTsgbm9kZSBzdGF5cyBvZmYsIGFzIG5vZGVJbnRlZ3JhdGlvbiBrZWVwcyBpdHMgZmFsc2UgZGVmYXVsdC5cbiAgICAgIG5vZGVJbnRlZ3JhdGlvbkluU3ViRnJhbWVzOiB0cnVlLFxuICAgICAgLy8gRWxlY3Ryb24gc2FuZGJveGVzIHByZWxvYWRzIGJ5IGRlZmF1bHQsIHdoaWNoIGJyZWFrcyB0aGVpciBidW5kbGVkIHJlcXVpcmVzOyB0aGUgT1Mgc2FuZGJveCBpcyBvZmYgcmVnYXJkbGVzcy5cbiAgICAgIHNhbmRib3g6IGZhbHNlLFxuICAgICAgd2ViU2VjdXJpdHk6ICFyZW5kZXJlci5kaXNhYmxlV2ViU2VjdXJpdHksXG4gICAgICAvLyBUaGUgd3JhcHBlciBpcyBhIHNlY3VyZSBzY2hlbWUsIHNvIGl0IHVwZ3JhZGVzIHRoZSB0YXJnZXQgdG8gaHR0cHMgYW5kIGV2ZXJ5IGh0dHAgc3VicmVzb3VyY2UgaXQgb3ducyB0dXJucyBtaXhlZC5cbiAgICAgIGFsbG93UnVubmluZ0luc2VjdXJlQ29udGVudDogdHJ1ZSxcbiAgICAgIGV4cGVyaW1lbnRhbEZlYXR1cmVzOiB0cnVlLFxuICAgICAgcHJlbG9hZDogcHVwUHJlbG9hZCxcbiAgICAgIGFkZGl0aW9uYWxBcmd1bWVudHM6IFtgJHtXT1JMRF9BUkd9JHtwaWNrV29ybGRTY3JpcHQocmVuZGVyZXIpfWAsIC4uLihyZW5kZXJlci53aXRoQXVkaW8gPyBbQVVESU9fQVJHXSA6IFtdKV0sXG4gICAgfSxcbiAgfSk7XG4gIHNldEludGVyY2VwdG9yKHtcbiAgICBzb3VyY2UsXG4gICAgd2luZG93OiB3aW4sXG4gICAgdXNlSW5uZXJQcm94eSxcbiAgICBzdHViTWVkaWE6IHJlbmRlcmVyLmRldGVybWluaXN0aWMsXG4gIH0pO1xuICB3aW4ud2ViQ29udGVudHMuZGVidWdnZXIuYXR0YWNoKFwiMS4zXCIpO1xuICBhd2FpdCBvbkNyZWF0ZWQ/Lih3aW4pO1xuXG4gIHdpbi53ZWJDb250ZW50cy5vbihcImNvbnNvbGUtbWVzc2FnZVwiLCAoeyBsZXZlbCwgbWVzc2FnZSwgbGluZU51bWJlciwgc291cmNlSWQgfSkgPT4ge1xuICAgIC8vIERyb3AgaGVhZGxlc3Mgbm9pc2U6IHNlY3VyaXR5IHdhcm5pbmdzIGFuZCBodHRw4oaSaHR0cHMgYXV0by11cGdyYWRlIG5vdGljZXMgZm9yIGludGVybmFsLXByb3h5IGFzc2V0cy5cbiAgICBpZiAobGV2ZWwgPT09IFwid2FybmluZ1wiICYmIENPTlNPTEVfSUdOT1JFUy5maW5kKChpKSA9PiBtZXNzYWdlLnN0YXJ0c1dpdGgoaSkpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IG1zZ3MgPSBbVEFHLCBcImNvbnNvbGU6XCIsIHsgbWVzc2FnZSwgbGluZU51bWJlciwgc291cmNlSWQsIHNvdXJjZSB9XTtcbiAgICBsZXZlbCA9PT0gXCJlcnJvclwiID8gbG9nZ2VyLmVycm9yKC4uLm1zZ3MpIDogbG9nZ2VyLmRlYnVnKC4uLm1zZ3MpO1xuICAgIHJlbmRlcmVyLm9uQ29uc29sZShsZXZlbCwgbWVzc2FnZSk7XG4gIH0pO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgdXJsID0gY3JlYXRlU3RlZ29VUkwoc3JjLCB7IHdpZHRoLCBoZWlnaHQgfSk7XG4gICAgYXdhaXQgd2FpdEZvckZpbmlzaCh7XG4gICAgICBzb3VyY2UsXG4gICAgICB3aW4sXG4gICAgICBhY3Rpb246ICgpID0+IHdpbi5sb2FkVVJMKHVybCksXG4gICAgICB0aW1lb3V0TXM6IHJlbmRlcmVyLndpbmRvd1RpbWVvdXQgKiAxMDAwLFxuICAgICAgdG9sZXJhbnQsXG4gICAgICBzaWduYWwsXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBhd2FpdCBkaXNwb3NlV2luZG93KHdpbik7XG4gICAgdGhyb3cgZTtcbiAgfVxuXG4gIHJldHVybiB3aW47XG59XG5cbmNvbnN0IG9wZW5XaW5kb3dXaXRoUmV0cnkgPSB1c2VSZXRyeSh7IGZuOiBvcGVuV2luZG93LCBtYXhBdHRlbXB0czogMiB9KTtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxvYWRXaW5kb3coeyBzb3VyY2UsIHJlbmRlcmVyLCBvbkNyZWF0ZWQsIHNpZ25hbCB9OiBXaW5kb3dPcHRpb25zKTogUHJvbWlzZTxCcm93c2VyV2luZG93PiB7XG4gIHNpZ25hbD8udGhyb3dJZkFib3J0ZWQoKTtcbiAgbGV0IHdhcm11cDogQnJvd3NlcldpbmRvdyB8IHVuZGVmaW5lZDtcbiAgbGV0IGVycm9yOiB1bmtub3duO1xuICB0cnkge1xuICAgIHdhcm11cCA9IGF3YWl0IG9wZW5XaW5kb3dXaXRoUmV0cnkoeyBzb3VyY2UsIHJlbmRlcmVyLCBzaWduYWwgfSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBlcnJvciA9IGU7XG4gIH1cblxuICBjb25zdCBvcGVuID0gKCkgPT4ge1xuICAgIHJldHVybiBvcGVuV2luZG93KHtcbiAgICAgIHNvdXJjZSxcbiAgICAgIHJlbmRlcmVyLFxuICAgICAgb25DcmVhdGVkLFxuICAgICAgc2lnbmFsLFxuICAgICAgdG9sZXJhbnQ6IHJlbmRlcmVyLndpbmRvd1RvbGVyYW50LFxuICAgIH0pO1xuICB9O1xuXG4gIGlmIChyZW5kZXJlci53aW5kb3dUb2xlcmFudCAmJiBlcnJvciA9PT0gVElNRU9VVF9FUlJPUikge1xuICAgIGxvZ2dlci53YXJuKFRBRywgYHdhcm11cCB0aW1lb3V0OiAke3NvdXJjZX0sIGZhbGxpbmcgYmFjayB0byBkb20tcmVhZHlgKTtcbiAgICByZXR1cm4gYXdhaXQgb3BlbigpO1xuICB9XG5cbiAgaWYgKGVycm9yKSB7XG4gICAgY29uc3QgeyBtZXNzYWdlLCBzdGFjayB9ID0gZXJyb3IgYXMgRXJyb3I7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBmYWlsZWQgdG8gd2FybXVwIHdpbmRvdzogJHtKU09OLnN0cmluZ2lmeSh7IHNvdXJjZSwgbWVzc2FnZSwgc3RhY2sgfSl9YCk7XG4gIH1cblxuICBpZiAod2FybXVwKSB7XG4gICAgd2FybXVwLndlYkNvbnRlbnRzLnJlbW92ZUFsbExpc3RlbmVycygpO1xuICAgIHVuc2V0SW50ZXJjZXB0b3Iod2FybXVwKTtcbiAgICBhd2FpdCBzbGVlcCgyMDAwKTtcbiAgICBhd2FpdCBkaXNwb3NlV2luZG93KHdhcm11cCk7XG4gIH1cblxuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBvcGVuKCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBjb25zdCB7IG1lc3NhZ2UsIHN0YWNrIH0gPSBlIGFzIEVycm9yO1xuICAgIHRocm93IG5ldyBFcnJvcihgZmFpbGVkIHRvIGxvYWQgd2luZG93OiAke0pTT04uc3RyaW5naWZ5KHsgc291cmNlLCBtZXNzYWdlLCBzdGFjayB9KX1gKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wOS5cblxuaW1wb3J0IHR5cGUgeyBOYXRpdmVJbWFnZSwgU2l6ZSB9IGZyb20gXCJlbGVjdHJvblwiO1xuaW1wb3J0IHsgcmVidWlsZERyYXdhYmxlIH0gZnJvbSBcIi4uL2Jhc2UvY2RwXCI7XG5pbXBvcnQgeyBFbmNvZGVyUGlwZWxpbmUgfSBmcm9tIFwiLi4vYmFzZS9lbmNvZGVyL3BpcGVsaW5lXCI7XG5pbXBvcnQgeyBzaXplRXF1YWxzIH0gZnJvbSBcIi4uL2Jhc2UvaW1hZ2VcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuLi9iYXNlL2xvZ2dpbmdcIjtcbmltcG9ydCB7IEJMQU5LX1dBUk5fUkFUSU8sIEJsYW5rU3RhdHMgfSBmcm9tIFwiLi4vYmFzZS9xdWFsaXR5L2JsYW5rXCI7XG5pbXBvcnQgeyBEcm9wU3RhdHMsIEpBTktfV0FSTl9TQ09SRSB9IGZyb20gXCIuLi9iYXNlL3F1YWxpdHkvZHJvcFwiO1xuaW1wb3J0IHsgcGVyaW9kaWNhbCB9IGZyb20gXCIuLi9iYXNlL3RpbWluZ1wiO1xuaW1wb3J0IHsgdHlwZSBBdWRpb0Rpc3Bvc2FsLCBhdHRhY2hBdWRpb0xpc3RlbmVycyB9IGZyb20gXCIuL2F1ZGlvXCI7XG5pbXBvcnQgdHlwZSB7IElwY0RvbmVQYXlsb2FkIH0gZnJvbSBcIi4vaXBjXCI7XG5pbXBvcnQgdHlwZSB7IElQQ1JlbmRlck9wdGlvbnMgfSBmcm9tIFwiLi9zY2hlbWFcIjtcbmltcG9ydCB7IFNjcmVlbnNob3RUYWtlciB9IGZyb20gXCIuL3NjcmVlbnNob3RcIjtcbmltcG9ydCB7IGRlY29kZVN0ZWdvLCBzdGFydFN0ZWdvIH0gZnJvbSBcIi4vc3RlZ29cIjtcbmltcG9ydCB7IGRpc3Bvc2VXaW5kb3csIGxvYWRXaW5kb3cgfSBmcm9tIFwiLi93aW5kb3dcIjtcblxuY29uc3QgVEFHID0gXCJbUmVuZGVyXVwiO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVuZGVyKG9wdGlvbnM6IElQQ1JlbmRlck9wdGlvbnMpOiBQcm9taXNlPElwY0RvbmVQYXlsb2FkPiB7XG4gIGNvbnN0IHsgc291cmNlLCBmcHMsIHdpZHRoLCBoZWlnaHQsIGR1cmF0aW9uLCB3aXRoQXVkaW8sIG91dEZpbGVzLCBkaXNhYmxlSHdDb2RlYywgc2lnbmFsLCBvblByb2dyZXNzIH0gPSBvcHRpb25zO1xuXG4gIGF3YWl0IHVzaW5nIGVuY29kZXIgPSBhd2FpdCBFbmNvZGVyUGlwZWxpbmUuY3JlYXRlKHsgd2lkdGgsIGhlaWdodCwgZnBzLCBvdXRGaWxlcywgd2l0aEF1ZGlvLCBkaXNhYmxlSHdDb2RlYyB9KTtcbiAgY29uc3QgdGFrZXIgPSBuZXcgU2NyZWVuc2hvdFRha2VyKHsgbWFya3M6IG9wdGlvbnMuc2NyZWVuc2hvdHMsIHdpZHRoLCBoZWlnaHQsIG91dEZpbGVzIH0pO1xuXG4gIGNvbnN0IHRvdGFsID0gTWF0aC5jZWlsKGZwcyAqIGR1cmF0aW9uKTtcbiAgY29uc3QgZnJhbWVJbnRlcnZhbCA9IDEwMDAgLyBmcHM7XG4gIGNvbnN0IGZyYW1lU2l6ZTogU2l6ZSA9IHsgd2lkdGgsIGhlaWdodDogaGVpZ2h0ICsgMSB9O1xuXG4gIGxldCB3cml0dGVuID0gMDtcbiAgbGV0IGxhc3RGcmFtZTogQnVmZmVyIHwgdW5kZWZpbmVkO1xuICBsZXQgc2NyZWVuc2hvdHM6IHN0cmluZ1tdID0gW107XG4gIGxldCBsYXN0V3JpdHRlblRpbWU6IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgbGV0IHByb2dyZXNzID0gMDtcbiAgbGV0IGVuY29kZUVycm9yOiBFcnJvciB8IHVuZGVmaW5lZDtcbiAgbGV0IHJlc29sdmVyOiAoKCkgPT4gdm9pZCkgfCB1bmRlZmluZWQ7XG4gIGxldCByZWplY3RlcjogKChyZWFzb24/OiB1bmtub3duKSA9PiB2b2lkKSB8IHVuZGVmaW5lZDtcbiAgbGV0IGNsZWFyU3R1Y2tDaGVjazogVm9pZEZ1bmN0aW9uIHwgdW5kZWZpbmVkO1xuICBjb25zdCBibGFua1N0YXRzID0gbmV3IEJsYW5rU3RhdHMod2lkdGgsIGhlaWdodCk7XG4gIGNvbnN0IGRyb3BTdGF0cyA9IG5ldyBEcm9wU3RhdHMoZnBzKTtcblxuICBsZXQgZGlzcG9zZUF1ZGlvOiBBdWRpb0Rpc3Bvc2FsIHwgdW5kZWZpbmVkO1xuICBjb25zdCBzY2hlZHVsZUZyYW1lID0gKGZyYW1lOiBCdWZmZXIpID0+IHtcbiAgICB3cml0dGVuKys7XG4gICAgYmxhbmtTdGF0cy5zYW1wbGUoZnJhbWUpO1xuICAgIGVuY29kZXIuZW5jb2RlQkdSQShmcmFtZSkuY2F0Y2goKGUpID0+IChlbmNvZGVFcnJvciA/Pz0gZSkpO1xuICB9O1xuXG4gIGNvbnN0IHBhaW50ID0gKF9lOiB1bmtub3duLCBfcjogdW5rbm93biwgaW1hZ2U6IE5hdGl2ZUltYWdlKSA9PiB7XG4gICAgZW5jb2RlRXJyb3IgPz89IHNpZ25hbD8ucmVhc29uO1xuICAgIGlmIChlbmNvZGVFcnJvcikge1xuICAgICAgcmVqZWN0ZXI/LihlbmNvZGVFcnJvcik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgaW1hZ2VTaXplID0gaW1hZ2UuZ2V0U2l6ZSgpO1xuICAgIGlmICghc2l6ZUVxdWFscyhpbWFnZVNpemUsIGZyYW1lU2l6ZSkpIHtcbiAgICAgIC8vIE5PVEUoQXV0b2tha2EpOiBXZSBtdXN0IGVuc3VyZSBmcmFtZSBpcyByZWFkeSBvbiBlbGVjdHJvbiB2NDErXG4gICAgICByZWJ1aWxkRHJhd2FibGUod2luLndlYkNvbnRlbnRzLCBmcmFtZVNpemUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIERlY29kZSBzdGVnbyB0aW1lc3RhbXAgZnJvbSB0aGUgYm90dG9tIHBpeGVsIHJvdyB3aXRob3V0IGZ1bGwgYml0bWFwIGNvcHlcbiAgICBjb25zdCBiaXRtYXAgPSBpbWFnZS50b0JpdG1hcCgpO1xuICAgIGNvbnN0IGN1cnJlbnRUaW1lID0gZGVjb2RlU3RlZ28oYml0bWFwLCBpbWFnZVNpemUpO1xuICAgIGlmIChjdXJyZW50VGltZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBlbmNvZGVFcnJvciA/Pz0gbmV3IEVycm9yKGBubyB0aW1lc3RhbXAgQCAke3dyaXR0ZW59YCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gU2tpcCBmcmFtZXMgdGhhdCBhcnJpdmUgdG9vIHNvb24gKDwgODAlIG9mIGZyYW1lIGludGVydmFsKVxuICAgIGlmIChsYXN0V3JpdHRlblRpbWUgIT09IHVuZGVmaW5lZCAmJiBjdXJyZW50VGltZSAtIGxhc3RXcml0dGVuVGltZSA8IGZyYW1lSW50ZXJ2YWwgKiAwLjgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjcm9wcGVkID0gQnVmZmVyLmZyb20oYml0bWFwLmJ1ZmZlciwgYml0bWFwLmJ5dGVPZmZzZXQsIGhlaWdodCAqIHdpZHRoICogNCk7XG4gICAgbGFzdEZyYW1lID0gY3JvcHBlZDtcbiAgICB0YWtlci5jYXB0dXJlKGN1cnJlbnRUaW1lLCBjcm9wcGVkKTtcblxuICAgIGlmIChsYXN0V3JpdHRlblRpbWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgc2NoZWR1bGVGcmFtZShjcm9wcGVkKTtcbiAgICAgIGRyb3BTdGF0cy53cm90ZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB0aW1lRGVsdGEgPSBjdXJyZW50VGltZSAtIGxhc3RXcml0dGVuVGltZTtcbiAgICAgIGlmICh0aW1lRGVsdGEgPD0gZnJhbWVJbnRlcnZhbCAqIDEuMikge1xuICAgICAgICBzY2hlZHVsZUZyYW1lKGNyb3BwZWQpO1xuICAgICAgICBkcm9wU3RhdHMud3JvdGUoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGZyYW1lc1RvSW5zZXJ0ID0gTWF0aC5yb3VuZCh0aW1lRGVsdGEgLyBmcmFtZUludGVydmFsKTtcbiAgICAgICAgZHJvcFN0YXRzLmRyb3BwZWQoZnJhbWVzVG9JbnNlcnQgLSAxKTtcbiAgICAgICAgZHJvcFN0YXRzLndyb3RlKCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZnJhbWVzVG9JbnNlcnQgJiYgd3JpdHRlbiA8IHRvdGFsOyBpKyspIHtcbiAgICAgICAgICBzY2hlZHVsZUZyYW1lKGNyb3BwZWQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGxhc3RXcml0dGVuVGltZSA9IGN1cnJlbnRUaW1lO1xuXG4gICAgY29uc3QgbmV3UHJvZ3Jlc3MgPSBNYXRoLmZsb29yKCh3cml0dGVuIC8gdG90YWwpICogMTAwKTtcbiAgICBpZiAobmV3UHJvZ3Jlc3MgIT09IHByb2dyZXNzKSB7XG4gICAgICBwcm9ncmVzcyA9IG5ld1Byb2dyZXNzO1xuICAgICAgb25Qcm9ncmVzcyhwcm9ncmVzcyk7XG4gICAgfVxuXG4gICAgY29uc3QgZHVyYXRpb25NcyA9IGR1cmF0aW9uICogMTAwMDtcbiAgICBpZiAoY3VycmVudFRpbWUgPj0gZHVyYXRpb25NcyAtIGZyYW1lSW50ZXJ2YWwgKiAwLjUgfHwgd3JpdHRlbiA+PSB0b3RhbCkge1xuICAgICAgcmVzb2x2ZXI/LigpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCB3aW4gPSBhd2FpdCBsb2FkV2luZG93KHtcbiAgICBzb3VyY2UsXG4gICAgcmVuZGVyZXI6IG9wdGlvbnMsXG4gICAgc2lnbmFsLFxuICAgIG9uQ3JlYXRlZDogKHdpbikgPT4ge1xuICAgICAgaWYgKHdpdGhBdWRpbykge1xuICAgICAgICBkaXNwb3NlQXVkaW8gPSBhdHRhY2hBdWRpb0xpc3RlbmVycyh7XG4gICAgICAgICAgd2M6IHdpbi53ZWJDb250ZW50cyxcbiAgICAgICAgICBlbmNvZGVyLFxuICAgICAgICAgIGdldFZpZGVvVGltZU1zOiAoKSA9PiBsYXN0V3JpdHRlblRpbWUgPz8gMCxcbiAgICAgICAgICBvbkVycm9yOiAoZTogRXJyb3IpID0+IChlbmNvZGVFcnJvciA/Pz0gZSksXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sXG4gIH0pO1xuICBjb25zdCBjZHAgPSB3aW4ud2ViQ29udGVudHMuZGVidWdnZXI7XG5cbiAgdHJ5IHtcbiAgICB3aW4ud2ViQ29udGVudHMuc3RvcFBhaW50aW5nKCk7XG4gICAgd2luLndlYkNvbnRlbnRzLnNldEZyYW1lUmF0ZShmcHMpO1xuICAgIHdpbi53ZWJDb250ZW50cy5vbihcInBhaW50XCIsIHBhaW50KTtcbiAgICB3aW4ud2ViQ29udGVudHMuc3RhcnRQYWludGluZygpO1xuICAgIHNpZ25hbD8udGhyb3dJZkFib3J0ZWQoKTtcbiAgICBzaWduYWw/LmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCAoKSA9PiByZWplY3Rlcj8uKHNpZ25hbC5yZWFzb24pLCB7IG9uY2U6IHRydWUgfSk7XG4gICAgYXdhaXQgc3RhcnRTdGVnbyhjZHApO1xuICAgIGF3YWl0IG5ldyBQcm9taXNlPHZvaWQ+KChyLCBqKSA9PiB7XG4gICAgICBbcmVzb2x2ZXIsIHJlamVjdGVyXSA9IFtyLCBqXTtcbiAgICAgIGxldCBsYXN0V3JpdHRlbiA9IDA7XG4gICAgICBsZXQgc3R1Y2sgPSAwO1xuICAgICAgY2xlYXJTdHVja0NoZWNrID0gcGVyaW9kaWNhbChhc3luYyAoKSA9PiB7XG4gICAgICAgIGlmICh3cml0dGVuICE9PSBsYXN0V3JpdHRlbikge1xuICAgICAgICAgIGxhc3RXcml0dGVuID0gd3JpdHRlbjtcbiAgICAgICAgICBzdHVjayA9IDA7XG4gICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBzdHVjaysrO1xuICAgICAgICBpZiAoc3R1Y2sgPj0gZnBzKSB7XG4gICAgICAgICAgcmVqZWN0ZXI/LihuZXcgRXJyb3IoYHJlbmRlcmVyIHN0YWxsZWQgZm9yICR7TWF0aC5yb3VuZCgoc3R1Y2sgKiAxMDAwKSAvIGZwcyl9bXMgQCAke3dyaXR0ZW59YCkpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0dWNrID09PSAxIHx8IHN0dWNrID09PSBNYXRoLmZsb29yKGZwcyAvIDIpKSB7XG4gICAgICAgICAgYXdhaXQgcmVidWlsZERyYXdhYmxlKHdpbi53ZWJDb250ZW50cywgZnJhbWVTaXplKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfSwgMTAwMCAvIGZwcyk7XG4gICAgfSk7XG4gIH0gZmluYWxseSB7XG4gICAgY2xlYXJTdHVja0NoZWNrPy4oKTtcbiAgICB3aW4ud2ViQ29udGVudHMub2ZmKFwicGFpbnRcIiwgcGFpbnQpO1xuICAgIGF3YWl0IGRpc3Bvc2VXaW5kb3cod2luKTtcbiAgICBkaXNwb3NlQXVkaW8/LigpO1xuICAgIGF3YWl0IGVuY29kZXIuZmluaXNoKCk7XG4gICAgc2NyZWVuc2hvdHMgPSBhd2FpdCB0YWtlci5maW5pc2gobGFzdEZyYW1lKTtcbiAgfVxuXG4gIGlmIChlbmNvZGVFcnJvciB8fCB3cml0dGVuID09PSAwKSB7XG4gICAgdGhyb3cgZW5jb2RlRXJyb3IgPz8gbmV3IEVycm9yKFwibm8gZnJhbWVzIGNhcHR1cmVkXCIpO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGJsYW5rID0gYmxhbmtTdGF0cy5maW5hbGl6ZSgpO1xuICAgIGlmIChibGFuayA+PSBCTEFOS19XQVJOX1JBVElPKSB7XG4gICAgICBsb2dnZXIud2FybihUQUcsIGAke3NvdXJjZX0gYmxhbmstZnJhbWUgcmF0aW8gJHtNYXRoLnJvdW5kKGJsYW5rICogMTAwKX0lIOKAlCBwb3NzaWJsZSB3aGl0ZS9ibGFuayBzY3JlZW5gKTtcbiAgICB9XG4gICAgY29uc3QgeyBqYW5rIH0gPSBkcm9wU3RhdHMuZmluYWxpemUoKTtcbiAgICBpZiAoamFuayA+PSBKQU5LX1dBUk5fU0NPUkUpIHtcbiAgICAgIGxvZ2dlci53YXJuKFRBRywgYCR7c291cmNlfSBqYW5rIHNjb3JlICR7amFuay50b0ZpeGVkKDIpfSDigJQgZHJvcHBlZCBmcmFtZXNgKTtcbiAgICB9XG4gICAgcmV0dXJuIHsgd3JpdHRlbiwgb3V0RmlsZXMsIGJsYW5rLCBzY3JlZW5zaG90cywgamFuayB9O1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEx1IEFvIChsdWFvQGJpbGliaWxpLmNvbSkgb24gMjAyNi8wOC8yMS5cblxuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4uL2Jhc2UvbG9nZ2luZ1wiO1xuXG5jb25zdCBUQUcgPSBcIltSZXJlbmRlcl1cIjtcblxuZXhwb3J0IGNvbnN0IE1BWF9SRU5ERVJfQVRURU1QVFMgPSAzO1xuXG4vLyBBbnkgcmVuZGVyIGZhaWx1cmUgZWFybnMgYSBmcmVzaCB3aW5kb3crY29tcG9zaXRvciBhdHRlbXB0OyBhYm9ydHMgc3RpbGwgc3RvcCB0aGUgbG9vcC5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3aXRoUmVyZW5kZXI8VD4oc2lnbmFsOiBBYm9ydFNpZ25hbCwgYWN0aW9uOiAoKSA9PiBQcm9taXNlPFQ+KTogUHJvbWlzZTxUPiB7XG4gIGxldCBsYXN0RXJyOiB1bmtub3duO1xuICBmb3IgKGxldCBhdHRlbXB0ID0gMTsgYXR0ZW1wdCA8PSBNQVhfUkVOREVSX0FUVEVNUFRTOyBhdHRlbXB0KyspIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IGFjdGlvbigpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHNpZ25hbC50aHJvd0lmQWJvcnRlZCgpO1xuICAgICAgbGFzdEVyciA9IGU7XG4gICAgICBsb2dnZXIud2FybihUQUcsIGByZXRyeSAke2F0dGVtcHR9LyR7TUFYX1JFTkRFUl9BVFRFTVBUU306ICR7KGUgYXMgRXJyb3IpLm1lc3NhZ2V9YCk7XG4gICAgfVxuICB9XG4gIHRocm93IGxhc3RFcnI7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAzLzEzLlxuXG4vLyBBIGNvbXBvc2l0ZSBoYW5kZWQgdG8gdGhlIGdhdGU6IHRoZSBzdGVnbyByb3cgdGltZXN0YW1wIGl0IG1hdGNoZWQgYW5kIGZ1bGwgQkdSQSBwaXhlbHMuXG5leHBvcnQgaW50ZXJmYWNlIENhcHR1cmVkRnJhbWUge1xuICB0czogbnVtYmVyO1xuICBwaXg6IEJ1ZmZlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGcmFtZUdhdGVPcHRpb25zIHtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIC8vIEhvdyBsb25nIHRvIHdhdGNoIGFmdGVyIHRoZSBmaXJzdCBtYXRjaCBiZWZvcmUgZmFsbGluZyBiYWNrIHRvIHRoZSBiYXNlbGluZSBmcmFtZS5cbiAgd2luZG93TXM6IG51bWJlcjtcbn1cblxuLy8gRmlyc3QgZnJhbWUgb25seTogaG9sZCB0aGUgZmlyc3QgbWF0Y2ggYXMgYmFzZWxpbmUgYW5kIGFjY2VwdCB0aGUgZmlyc3QgbGF0ZXIgY29tcG9zaXRlIHdob3NlIHBpeGVscyBkaWZmZXIgYXQgYWxsOyBleHBpcmVkKCkgY292ZXJzIGEgd2luZG93IHRoYXQgY2xvc2VkIHVuY2hhbmdlZC5cbmV4cG9ydCBjbGFzcyBGaXJzdEZyYW1lR2F0ZSB7XG4gIHByaXZhdGUgX2Jhc2VsaW5lOiBDYXB0dXJlZEZyYW1lIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIF9iYXNlbGluZUF0ID0gMDtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IF9vcHRzOiBGcmFtZUdhdGVPcHRpb25zKSB7fVxuXG4gIC8vIFRoZSBiYXNlbGluZSBmcmFtZTogdGhlIHBhZ2UncyB0cnVlIGZpcnN0IGZyYW1lIG9uY2UgdGhlIHdhdGNoIHdpbmRvdyBleHBpcmVkIHVuY2hhbmdlZC5cbiAgZ2V0IGJhc2VsaW5lKCk6IENhcHR1cmVkRnJhbWUgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9iYXNlbGluZTtcbiAgfVxuXG4gIC8vIFJldHVybnMgdGhlIGZyYW1lIHRvIGNhcHR1cmUgb25jZSBhIHJlYWwgZmlyc3QgcGFpbnQgc2hvd3MgdXAsIHVuZGVmaW5lZCB3aGlsZSBzdGlsbCB3YXRjaGluZy5cbiAgYWNjZXB0KGZyYW1lOiBDYXB0dXJlZEZyYW1lLCBub3c6IG51bWJlcik6IENhcHR1cmVkRnJhbWUgfCB1bmRlZmluZWQge1xuICAgIGlmICghdGhpcy5fYmFzZWxpbmUpIHtcbiAgICAgIHRoaXMuX2Jhc2VsaW5lID0gZnJhbWU7XG4gICAgICB0aGlzLl9iYXNlbGluZUF0ID0gbm93O1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIGhhc0RpZmYodGhpcy5fYmFzZWxpbmUucGl4LCBmcmFtZS5waXgsIHRoaXMuX29wdHMpID8gZnJhbWUgOiB1bmRlZmluZWQ7XG4gIH1cblxuICAvLyBUcnVlIG9uY2UgdGhlIHdpbmRvdyBhZnRlciB0aGUgZmlyc3QgbWF0Y2ggaGFzIHBhc3NlZCB3aXRob3V0IGFueSBkaWZmZXJpbmcgZnJhbWUuXG4gIGV4cGlyZWQobm93OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fYmFzZWxpbmUgIT09IHVuZGVmaW5lZCAmJiBub3cgLSB0aGlzLl9iYXNlbGluZUF0ID49IHRoaXMuX29wdHMud2luZG93TXM7XG4gIH1cbn1cblxuLy8gVHJ1ZSB3aGVuIGFueSBzYW1wbGVkIHBpeGVsIGRpZmZlcnMgYmV0d2VlbiB0d28gQkdSQSBmcmFtZXM7IGV4aXRzIGF0IHRoZSBmaXJzdCBkaWZmZXJlbmNlIGZvdW5kLlxuZnVuY3Rpb24gaGFzRGlmZihhOiBCdWZmZXIsIGI6IEJ1ZmZlciwgc2l6ZTogeyB3aWR0aDogbnVtYmVyOyBoZWlnaHQ6IG51bWJlciB9KTogYm9vbGVhbiB7XG4gIGZvciAobGV0IHkgPSAwOyB5IDwgc2l6ZS5oZWlnaHQ7IHkgKz0gNCkge1xuICAgIGNvbnN0IHJvdyA9IHkgKiBzaXplLndpZHRoICogNDtcbiAgICBmb3IgKGxldCB4ID0gMDsgeCA8IHNpemUud2lkdGg7IHggKz0gNCkge1xuICAgICAgY29uc3QgaSA9IHJvdyArIHggKiA0O1xuICAgICAgaWYgKGFbaV0gIT09IGJbaV0gfHwgYVtpICsgMV0gIT09IGJbaSArIDFdIHx8IGFbaSArIDJdICE9PSBiW2kgKyAyXSB8fCBhW2kgKyAzXSAhPT0gYltpICsgM10pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDUvMTguXG5cbmltcG9ydCB0eXBlIHsgV2ViRnJhbWVNYWluIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi4vLi4vYmFzZS9sb2dnaW5nXCI7XG5pbXBvcnQgeyBhYm9ydGFibGUgfSBmcm9tIFwiLi4vLi4vYmFzZS90aW1pbmdcIjtcblxuY29uc3QgVEFHID0gXCJbVmlkZW9dXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWR2YW5jZU9wdGlvbnMge1xuICBmcmFtZTogV2ViRnJhbWVNYWluIHwgdW5kZWZpbmVkO1xuICB0aW1lc3RhbXBNczogbnVtYmVyO1xuICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbn1cblxuLy8gT25seSB0aGUgZGV0ZXJtaW5pc3RpYyByZW5kZXJlciAoc2hvb3QpIGRyaXZlcyB0aGlzOyByZWFsLXRpbWUgdmlkZW9zIHNlbGYtdGljayB2aWEgckFGIGluIHRoZSBwYWdlLlxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFkdmFuY2VWaWRlb3MoeyBmcmFtZSwgdGltZXN0YW1wTXMsIHNpZ25hbCB9OiBBZHZhbmNlT3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICBpZiAoIWZyYW1lPy51cmwpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgc2lnbmFsPy50aHJvd0lmQWJvcnRlZCgpO1xuICB0cnkge1xuICAgIGF3YWl0IGFib3J0YWJsZShcbiAgICAgIGZyYW1lLmV4ZWN1dGVKYXZhU2NyaXB0KFxuICAgICAgICBgd2luZG93Ll9fcHVwX3ZpZGVvX18mJihhc3luYygpPT57YXdhaXQgX19wdXBfdmlkZW9fXy5yZWFkeSgpO2F3YWl0IF9fcHVwX3ZpZGVvX18uYWR2YW5jZSgke3RpbWVzdGFtcE1zfSl9KSgpYCxcbiAgICAgICksXG4gICAgICBzaWduYWwsXG4gICAgKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHNpZ25hbD8udGhyb3dJZkFib3J0ZWQoKTtcbiAgICBsb2dnZXIud2FybihUQUcsIGBhZHZhbmNlIHNraXBwZWQ6ICR7ZSBpbnN0YW5jZW9mIEVycm9yID8gZS5tZXNzYWdlIDogU3RyaW5nKGUpfWApO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzAxLlxuXG5pbXBvcnQgeyB3aXRoVGltZW91dCB9IGZyb20gXCIuLi9iYXNlL3RpbWluZ1wiO1xuaW1wb3J0IHsgdHlwZSBBZHZhbmNlT3B0aW9ucywgYWR2YW5jZVZpZGVvcyB9IGZyb20gXCIuL3ZpZGVvL2FkdmFuY2VcIjtcblxuZXhwb3J0IGNvbnN0IFRJQ0tfU1lNQk9MID0gXCJfX3B1cF90aWNrX19cIjtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRpY2soYXJnczogQWR2YW5jZU9wdGlvbnMpIHtcbiAgY29uc3QgeyBmcmFtZSwgdGltZXN0YW1wTXMgfSA9IGFyZ3M7XG4gIGlmICghZnJhbWUpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgZXhwciA9IGB3aW5kb3cuJHtUSUNLX1NZTUJPTH0mJndpbmRvdy4ke1RJQ0tfU1lNQk9MfS5wcm9jZXNzKCR7dGltZXN0YW1wTXN9KWA7XG4gIGNvbnN0IHRpY2tFdiA9IGZyYW1lLmV4ZWN1dGVKYXZhU2NyaXB0KGV4cHIpO1xuICBhd2FpdCBQcm9taXNlLmFsbChbd2l0aFRpbWVvdXQodGlja0V2LCA1XzAwMCwgXCJ0aWNrLmV4ZWN1dGVKYXZhU2NyaXB0XCIpLCBhZHZhbmNlVmlkZW9zKGFyZ3MpXSk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA2LzIzLlxuXG5pbXBvcnQgeyBEZW11eGVyLCB0eXBlIERlbXV4ZXJPcHRpb25zIH0gZnJvbSBcIm5vZGUtYXYvYXBpXCI7XG5cbi8vIGZmbXBlZyByZWFkL3dyaXRlIGRlYWRsaW5lICjCtXMpOyBhIGJsb2NraW5nIG9wZW4gaWdub3JlcyBBYm9ydFNpZ25hbCwgc28gdGhpcyBib3VuZHMgYSBzdHVjayBDRE4uXG5jb25zdCBSV19USU1FT1VUX1VTID0gXCI4MDAwMDAwXCI7XG5cbi8vIGZmbXBlZyBvcGVucyBodHRwL2h0dHBzIHdpdGggbmF0aXZlIGJ5dGUtcmFuZ2UgcmVxdWVzdHMsIHNvIG9ubHkgdGhlIGRlY29kZWQgcmFuZ2VzIGRvd25sb2FkLlxuZXhwb3J0IGZ1bmN0aW9uIG9wZW5JbnB1dChzcmM6IHN0cmluZywgc2lnbmFsPzogQWJvcnRTaWduYWwpOiBQcm9taXNlPERlbXV4ZXI+IHtcbiAgY29uc3Qgb3B0aW9uczogRGVtdXhlck9wdGlvbnMgPSB7IHNpZ25hbCwgb3B0aW9uczogeyByd190aW1lb3V0OiBSV19USU1FT1VUX1VTIH0gfTtcbiAgcmV0dXJuIERlbXV4ZXIub3BlbihzcmMsIG9wdGlvbnMpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNi8yNS5cblxuaW1wb3J0IHR5cGUgeyBGcmFtZSB9IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQgeyBEZWNvZGVyLCBGaWx0ZXJBUEkgfSBmcm9tIFwibm9kZS1hdi9hcGlcIjtcbmltcG9ydCB7IEFWTUVESUFfVFlQRV9WSURFTywgQVZTRUVLX0ZMQUdfQkFDS1dBUkQgfSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuLi8uLi9iYXNlL2xvZ2dpbmdcIjtcbmltcG9ydCB0eXBlIHsgVmlkZW9NZXRhIH0gZnJvbSBcIi4vZnJhbWVfc2VydmVyXCI7XG5pbXBvcnQgeyBvcGVuSW5wdXQgfSBmcm9tIFwiLi9vcGVuXCI7XG5cbmNvbnN0IFRBRyA9IFwiW0RlY29kZV1cIjtcblxuZXhwb3J0IGludGVyZmFjZSBEZWNvZGVkRnJhbWUge1xuICBpZHg6IG51bWJlcjtcbiAgYnVmOiBCdWZmZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGVjb2RlRnJhbWVzT3B0aW9ucyB7XG4gIHNyYzogc3RyaW5nO1xuICBtZXRhOiBWaWRlb01ldGE7XG4gIHNpZ25hbDogQWJvcnRTaWduYWw7XG4gIC8qKiAxLWJhc2VkIGNvbnRlbnQgZnJhbWUgdG8gcmVzdW1lIGRlY29kaW5nIGZyb207IGEgZmFpbGVkIHNlZWsgZmFsbHMgYmFjayB0byBkZWNvZGluZyB0aGUgd2hvbGUgaGVhZC4gKi9cbiAgZnJvbUlkeD86IG51bWJlcjtcbn1cblxuLy8gRGVjb2RlIGEgc291cmNlIHRvIGZwcy1yZXNhbXBsZWQsIGRpc3BsYXktc2NhbGVkLCB0aWdodC1SR0JBIGZyYW1lcyAoaWR4ID0gMS1iYXNlZCBjb250ZW50IHBvc2l0aW9uIHBhc3QgdGhlIGxlYWQgZ2FwKS4gQ29uc3VtZXIgYmFja3ByZXNzdXJlIGlzIGp1c3QgcHVsbGluZyBzbG93ZXIuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24qIGRlY29kZUZyYW1lcyh7IHNyYywgbWV0YSwgc2lnbmFsLCBmcm9tSWR4IH06IERlY29kZUZyYW1lc09wdGlvbnMpOiBBc3luY0dlbmVyYXRvcjxEZWNvZGVkRnJhbWU+IHtcbiAgYXdhaXQgdXNpbmcgaW5wdXQgPSBhd2FpdCBvcGVuSW5wdXQoc3JjLCBzaWduYWwpO1xuICBsZXQgcmVzdW1lQXQ6IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgaWYgKGZyb21JZHggIT09IHVuZGVmaW5lZCAmJiBmcm9tSWR4ID4gMSkge1xuICAgIGNvbnN0IHRhcmdldCA9IG1ldGEubGVhZEdhcCArIChmcm9tSWR4IC0gMSkgLyBtZXRhLmZwcztcbiAgICBpZiAoKGF3YWl0IGlucHV0LnNlZWsodGFyZ2V0LCAtMSwgQVZTRUVLX0ZMQUdfQkFDS1dBUkQpKSA9PT0gMCkge1xuICAgICAgcmVzdW1lQXQgPSBmcm9tSWR4O1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2dnZXIud2FybihUQUcsIGBzZWVrIHRvIGZyYW1lICR7ZnJvbUlkeH0gZmFpbGVkLCBkZWNvZGluZyBmcm9tIGhlYWRgKTtcbiAgICB9XG4gIH1cbiAgY29uc3Qgc3RyZWFtID0gaW5wdXQuc3RyZWFtcz8uZmluZCgocykgPT4gcy5jb2RlY3Bhci5jb2RlY1R5cGUgPT09IEFWTUVESUFfVFlQRV9WSURFTyk7XG4gIGlmICghc3RyZWFtKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwibm8gdmlkZW8gc3RyZWFtXCIpO1xuICB9XG4gIC8vIFNvZnR3YXJlIGRlY29kZSB3aXRoIGF1dG8tZGV0ZWN0ZWQgdGhyZWFkcyAoZmZtcGVnJ3MgZGVmYXVsdCBvZiAxIGxlYXZlcyBtb3N0IGNvcmVzIGlkbGUgb24gMTA4MHApLlxuICB1c2luZyBkZWMgPSBhd2FpdCBEZWNvZGVyLmNyZWF0ZShzdHJlYW0sIHsgc2lnbmFsLCB0aHJlYWRDb3VudDogMCB9KTtcbiAgY29uc3QgeyBmcmFtZVdpZHRoLCBmcmFtZUhlaWdodCwgd2lkdGgsIGhlaWdodCwgZnBzIH0gPSBtZXRhO1xuICBjb25zdCBzY2FsZSA9IGZyYW1lV2lkdGggIT09IHdpZHRoIHx8IGZyYW1lSGVpZ2h0ICE9PSBoZWlnaHQgPyBgc2NhbGU9JHtmcmFtZVdpZHRofToke2ZyYW1lSGVpZ2h0fSxgIDogXCJcIjtcbiAgLy8gT2RkIG5hdGl2ZSB3aWR0aHMgKDE5MjIgZXRjKSBoYXZlIG5vIE5FT04gc3dzY2FsZSBwYXRoOyBwYWQtcmlnaHQgdG8gMTYtYWxpZ25lZCBhbmQgdHJpbSBpbiBwYWNrUmdiYS5cbiAgY29uc3QgYWxpZ24gPSAobjogbnVtYmVyKTogbnVtYmVyID0+IE1hdGguY2VpbChuIC8gMTYpICogMTY7XG4gIGNvbnN0IHBhZCA9XG4gICAgc2NhbGUgPT09IFwiXCIgJiYgKGZyYW1lV2lkdGggJSAxNiAhPT0gMCB8fCBmcmFtZUhlaWdodCAlIDE2ICE9PSAwKVxuICAgICAgPyBgcGFkPSR7YWxpZ24oZnJhbWVXaWR0aCl9OiR7YWxpZ24oZnJhbWVIZWlnaHQpfTowOjAsYFxuICAgICAgOiBcIlwiO1xuICB1c2luZyBmaWx0ZXIgPSBGaWx0ZXJBUEkuY3JlYXRlKGBmcHM9JHtmcHN9LCR7c2NhbGV9JHtwYWR9Zm9ybWF0PXJnYmFgLCB7IHNpZ25hbCB9KTtcbiAgbGV0IGsgPSAwO1xuICBsZXQgcHJldksgPSAwO1xuICBmb3IgYXdhaXQgKHVzaW5nIGZyYW1lIG9mIGZpbHRlci5mcmFtZXMoZGVjLmZyYW1lcyhpbnB1dC5wYWNrZXRzKHN0cmVhbS5pbmRleCkpKSkge1xuICAgIGlmICghZnJhbWUpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAocmVzdW1lQXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgdGIgPSBmcmFtZS50aW1lQmFzZS5udW0gLyBmcmFtZS50aW1lQmFzZS5kZW47XG4gICAgICBjb25zdCB0cyA9IGZyYW1lLmJlc3RFZmZvcnRUaW1lc3RhbXAgPz8gZnJhbWUucHRzO1xuICAgICAgaWYgKHRzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCBhdCA9IE1hdGgucm91bmQoKE51bWJlcih0cykgKiB0YiAtIG1ldGEubGVhZEdhcCkgKiBtZXRhLmZwcykgKyAxO1xuICAgICAgaWYgKGF0IDwgcHJldkspIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBwcmV2SyA9IGF0O1xuICAgICAgaWYgKGF0IDwgcmVzdW1lQXQpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBrID0gYXQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGsrKztcbiAgICB9XG4gICAgeWllbGQgeyBpZHg6IGssIGJ1ZjogcGFja1JnYmEoZnJhbWUsIGZyYW1lV2lkdGgsIGZyYW1lSGVpZ2h0KSB9O1xuICB9XG59XG5cbi8vIFRpZ2h0IFJHQkEgb2YgdGhlIHRvcC1sZWZ0IG91dFfDl291dEggcmVnaW9uIChkcm9wcyBsaWJhdiByb3cgcGFkZGluZyBhbmQgYW55IHBhZC1yaWdodC9ib3R0b20gcGxhbmVzKS5cbmZ1bmN0aW9uIHBhY2tSZ2JhKGZyYW1lOiBGcmFtZSwgb3V0VzogbnVtYmVyLCBvdXRIOiBudW1iZXIpOiBCdWZmZXIge1xuICBjb25zdCByb3cgPSBvdXRXICogNDtcbiAgY29uc3Qgc3RyaWRlID0gZnJhbWUubGluZXNpemVbMF0hO1xuICBjb25zdCBzcmMgPSBmcmFtZS5kYXRhIVswXSE7XG4gIGlmIChzdHJpZGUgPT09IHJvdyAmJiBmcmFtZS5oZWlnaHQgPT09IG91dEgpIHtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20oc3JjLnN1YmFycmF5KDAsIHJvdyAqIG91dEgpKTtcbiAgfVxuICBjb25zdCBvdXQgPSBCdWZmZXIuYWxsb2NVbnNhZmUocm93ICogb3V0SCk7XG4gIGZvciAobGV0IHkgPSAwOyB5IDwgb3V0SDsgeSsrKSB7XG4gICAgc3JjLmNvcHkob3V0LCB5ICogcm93LCB5ICogc3RyaWRlLCB5ICogc3RyaWRlICsgcm93KTtcbiAgfVxuICByZXR1cm4gb3V0O1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wOS8wMi5cblxuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4uLy4uL2Jhc2UvbG9nZ2luZ1wiO1xuaW1wb3J0IHsgZGVjb2RlRnJhbWVzIH0gZnJvbSBcIi4vZGVjb2RlXCI7XG5pbXBvcnQgdHlwZSB7IFZpZGVvTWV0YSB9IGZyb20gXCIuL2ZyYW1lX3NlcnZlclwiO1xuXG5jb25zdCBUQUcgPSBcIltEZWNvZGVTZXNzaW9uXVwiO1xuY29uc3QgREVDT0RFX0FIRUFEID0gNDsgLy8gZGVjb2RlIGEgZmV3IGZyYW1lcyBwYXN0IHRoZSBoaWdoZXN0IHJlcXVlc3Q7IHRoZSBwYWdlIGFscmVhZHkgcHJlZmV0Y2hlc1xuY29uc3QgS0VFUF9CRUhJTkQgPSAxNjsgLy8gbWluIGZyYW1lcyBoZWxkIGJlaGluZCB0aGUgaGVhZDsgbXVzdCBleGNlZWQgdGhlIHBhZ2UncyBwcmVmZXRjaCBsZWFkXG5jb25zdCBNRU1PUllfQlVER0VUID0gMjU2ICogMTAyNCAqIDEwMjQ7IC8vIGRlY29kZWQtZnJhbWUgYnVkZ2V0IHBlciBzZXNzaW9uOiBhIHNtYWxsIGxvb3AgcmUtc2VydmVzIGZyb20gbWVtb3J5XG5jb25zdCBNQVhfUEFTU19SRVRSWSA9IDM7IC8vIHJlLW9wZW4gYSBzdHJlYW1lZCBzb3VyY2UgdGhpcyBtYW55IHRpbWVzIG9uIGEgdHJhbnNpZW50IGRlY29kZSBlcnJvciBiZWZvcmUgRU9GXG5cbi8vIEEgc291cmNlIHBsYXlzIG9uIGl0cyBvd24gY2xvY2s6IHRoZSBwdW1wIGZpbGxzIGEgZnJhbWUgc3RvcmUgYWhlYWQgb2YgZGVtYW5kOyBnZXRGcmFtZSB3YWl0cyBmb3IgaXRzIGZyYW1lLlxuaW50ZXJmYWNlIEZyYW1lV2FpdGVyIHtcbiAgaWR4OiBudW1iZXI7XG4gIHJlc29sdmU6ICh3YWtlOiBcIndha2VcIiB8IFwiY2FuY2VsXCIpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBjbGFzcyBEZWNvZGVTZXNzaW9uIHtcbiAgcHJpdmF0ZSBfYnVmID0gbmV3IE1hcDxudW1iZXIsIEJ1ZmZlcj4oKTtcbiAgcHJpdmF0ZSBfcmVhZHkgPSAwO1xuICBwcml2YXRlIF93YW50ID0gMTtcbiAgcHJpdmF0ZSBfZG9uZSA9IGZhbHNlO1xuICBwcml2YXRlIF9jbG9zZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfZ2VuID0gMDtcbiAgcHJpdmF0ZSBfY3RybCA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgcHJpdmF0ZSBfcmVzdW1lOiAoKCkgPT4gdm9pZCkgfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgX3Jlc3RhcnQ6ICgoKSA9PiB2b2lkKSB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSByZWFkb25seSBfd2FpdGVycyA9IG5ldyBTZXQ8RnJhbWVXYWl0ZXI+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xlYWRGcmFtZXM6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfa2VlcENvdW50OiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3NlZWtKdW1wOiBudW1iZXI7XG4gIHByaXZhdGUgX3NlZWtUbz86IG51bWJlcjtcbiAgcHJpdmF0ZSBfcGFzc0Zyb20gPSAxO1xuICBwcml2YXRlIHJlYWRvbmx5IF9wdW1wRG9uZTogUHJvbWlzZTx2b2lkPjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICByZWFkb25seSBtZXRhOiBWaWRlb01ldGEsXG4gICAgcHJpdmF0ZSByZWFkb25seSBfc3JjOiBzdHJpbmcsXG4gICkge1xuICAgIHRoaXMuX2xlYWRGcmFtZXMgPSBNYXRoLnJvdW5kKG1ldGEubGVhZEdhcCAqIG1ldGEuZnBzKTtcbiAgICB0aGlzLl9rZWVwQ291bnQgPSBNYXRoLm1heChLRUVQX0JFSElORCwgTWF0aC5mbG9vcihNRU1PUllfQlVER0VUIC8gKG1ldGEuZnJhbWVXaWR0aCAqIG1ldGEuZnJhbWVIZWlnaHQgKiA0KSkpO1xuICAgIHRoaXMuX3NlZWtKdW1wID0gTWF0aC5tYXgoMiAqIG1ldGEuZnBzLCBERUNPREVfQUhFQUQgKiAyKTtcbiAgICB0aGlzLl9wdW1wRG9uZSA9IHRoaXMucHVtcCgpO1xuICB9XG5cbiAgLy8gV2FpdHMgZm9yIHRoZSBmcmFtZSB0byBsYW5kOiBwYWludHMgcGFjZSB0aGUgdmlydHVhbCBjbG9jaywgc28gc3RhbGwgaW5zdGVhZCBvZiBwYWludGluZyBibGFjay5cbiAgYXN5bmMgZ2V0RnJhbWUocmF3OiBudW1iZXIpOiBQcm9taXNlPEJ1ZmZlciB8IHVuZGVmaW5lZD4ge1xuICAgIGNvbnN0IGlkeCA9IHJhdyA8PSB0aGlzLl9sZWFkRnJhbWVzID8gdGhpcy5fbGVhZEZyYW1lcyArIDEgOiByYXc7IC8vIGhvbGQgdGhlIGZpcnN0IGZyYW1lIGFjcm9zcyB0aGUgbGVhZFxuICAgIGZvciAoOzspIHtcbiAgICAgIGNvbnN0IGhpdCA9IHRoaXMuX2J1Zi5nZXQoaWR4KTtcbiAgICAgIGlmIChoaXQpIHtcbiAgICAgICAgcmV0dXJuIGhpdDtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLl9jbG9zZWQpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLl9kb25lICYmIGlkeCA+IHRoaXMuX3JlYWR5KSB7XG4gICAgICAgIHJldHVybiBCdWZmZXIuYWxsb2MoMCk7IC8vIGJleW9uZCBlbmQgb2Ygc3RyZWFtXG4gICAgICB9XG4gICAgICB0aGlzLl93YW50ID0gTWF0aC5tYXgodGhpcy5fd2FudCwgaWR4KTtcbiAgICAgIGlmICh0aGlzLm11c3RSZXBvaW50KGlkeCkpIHtcbiAgICAgICAgdGhpcy5yZXF1ZXN0UmVzdGFydChpZHgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy53YWtlKCk7XG4gICAgICB9XG4gICAgICBpZiAoKGF3YWl0IHRoaXMud2FpdEV2ZW50KGlkeCkpID09PSBcImNhbmNlbFwiKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7IC8vIHN0YWxlIGRlbWFuZCBkcm9wcGVkIGJ5IGEgcmVzdGFydCAoc2VlIHJlcXVlc3RSZXN0YXJ0KVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbXVzdFJlcG9pbnQoaWR4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5fc2Vla1RvICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIEEgcmUtcG9pbnQgaXMgcXVldWVkIGJ1dCBub3Qgc3RhcnRlZDogb25seSBhIGxvd2VyIHRhcmdldCBtYXkgZGlzcGxhY2UgaXQsIG9yIHdhaXRlcnMgYm91bmNlIGZvcmV2ZXIuXG4gICAgICByZXR1cm4gaWR4IDwgdGhpcy5fc2Vla1RvO1xuICAgIH1cbiAgICBjb25zdCBmcm9tID0gdGhpcy5fcGFzc0Zyb207XG4gICAgcmV0dXJuIGlkeCA8IGZyb20gfHwgaWR4IDw9IHRoaXMuX3JlYWR5IHx8IGlkeCA+IE1hdGgubWF4KHRoaXMuX3JlYWR5LCBmcm9tKSArIHRoaXMuX3NlZWtKdW1wO1xuICB9XG5cbiAgYXN5bmMgY2xvc2UoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5fY2xvc2VkID0gdHJ1ZTtcbiAgICB0aGlzLl9kb25lID0gdHJ1ZTtcbiAgICB0aGlzLl9jdHJsLmFib3J0KCk7XG4gICAgdGhpcy5yZXF1ZXN0UmVzdGFydCgpO1xuICAgIHRoaXMuX2J1Zi5jbGVhcigpO1xuICAgIGF3YWl0IHRoaXMuX3B1bXBEb25lO1xuICB9XG5cbiAgcHJpdmF0ZSB3YWtlKCk6IHZvaWQge1xuICAgIGNvbnN0IHIgPSB0aGlzLl9yZXN1bWU7XG4gICAgdGhpcy5fcmVzdW1lID0gdW5kZWZpbmVkO1xuICAgIHI/LigpO1xuICB9XG5cbiAgcHJpdmF0ZSB3YWl0RXZlbnQoaWR4OiBudW1iZXIpOiBQcm9taXNlPFwid2FrZVwiIHwgXCJjYW5jZWxcIj4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTxcIndha2VcIiB8IFwiY2FuY2VsXCI+KChyZXNvbHZlKSA9PiB0aGlzLl93YWl0ZXJzLmFkZCh7IGlkeCwgcmVzb2x2ZSB9KSk7XG4gIH1cblxuICAvLyBCcm9hZGNhc3QgZGVjb2RlIHByb2dyZXNzIChmcmFtZSBzdG9yZWQgLyBwYXNzIGRvbmUgLyByZXN0YXJ0IC8gY2xvc2UpIHRvIHdhaXRpbmcgZ2V0RnJhbWVzLlxuICBwcml2YXRlIHNpZ25hbCgpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IHcgb2YgdGhpcy5fd2FpdGVycykge1xuICAgICAgdy5yZXNvbHZlKFwid2FrZVwiKTtcbiAgICB9XG4gICAgdGhpcy5fd2FpdGVycy5jbGVhcigpO1xuICB9XG5cbiAgcHJpdmF0ZSByZXF1ZXN0UmVzdGFydCh0YXJnZXQ/OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9zZWVrVG8gPSB0YXJnZXQ7XG4gICAgdGhpcy5fZ2VuKys7XG4gICAgLy8gRHJvcCB3YWl0ZXJzIGEgcmVzdGFydCBsZWF2ZXMgZmFyIGJlaGluZDogdGhleSBvbmx5IHJlLXJhaXNlIF93YW50IGFuZCBkcmFnIHRoZSBwYXNzIHRvIHRoZSB0YWlsLlxuICAgIGlmICh0YXJnZXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZm9yIChjb25zdCB3IG9mIHRoaXMuX3dhaXRlcnMpIHtcbiAgICAgICAgaWYgKHcuaWR4ID4gdGFyZ2V0ICsgdGhpcy5fa2VlcENvdW50KSB7XG4gICAgICAgICAgdGhpcy5fd2FpdGVycy5kZWxldGUodyk7XG4gICAgICAgICAgdy5yZXNvbHZlKFwiY2FuY2VsXCIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHIgPSB0aGlzLl9yZXN0YXJ0O1xuICAgIHRoaXMuX3Jlc3RhcnQgPSB1bmRlZmluZWQ7XG4gICAgcj8uKCk7XG4gICAgdGhpcy53YWtlKCk7XG4gICAgdGhpcy5zaWduYWwoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcHVtcCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBsZXQgZmFpbHMgPSAwO1xuICAgIHdoaWxlICghdGhpcy5fY2xvc2VkKSB7XG4gICAgICBjb25zdCBnZW4gPSB0aGlzLl9nZW47XG4gICAgICB0aGlzLl9yZWFkeSA9IDA7XG4gICAgICB0aGlzLl9kb25lID0gZmFsc2U7XG4gICAgICB0aGlzLl9idWYuY2xlYXIoKTtcbiAgICAgIGxldCBmYWlsZWQgPSBmYWxzZTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHRoaXMuZGVjb2RlUGFzcyhnZW4pO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBpZiAoIXRoaXMuX2Nsb3NlZCAmJiB0aGlzLl9nZW4gPT09IGdlbikge1xuICAgICAgICAgIGZhaWxlZCA9IHRydWU7XG4gICAgICAgICAgbG9nZ2VyLndhcm4oXG4gICAgICAgICAgICBUQUcsXG4gICAgICAgICAgICBgWyR7dGhpcy5tZXRhLmlkLnNsaWNlKDAsIDgpfV0gZGVjb2RlIHBhc3MgZmFpbGVkOiAke2UgaW5zdGFuY2VvZiBFcnJvciA/IGUubWVzc2FnZSA6IFN0cmluZyhlKX1gLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLl9jbG9zZWQpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5fZ2VuICE9PSBnZW4pIHtcbiAgICAgICAgZmFpbHMgPSAwO1xuICAgICAgICBjb250aW51ZTsgLy8gcmVzdGFydCByZXF1ZXN0ZWQgbWlkLXBhc3NcbiAgICAgIH1cbiAgICAgIC8vIEEgdGhyb3duIHBhc3MgaXMgYSB0cmFuc2llbnQgc291cmNlIGVycm9yIChlLmcuIGEgc3RyZWFtZWQgbG9vcCByZS1vcGVuKTsgcmV0cnksIGVsc2UgRU9GIHdvdWxkIGJsYW5rIHRoZSBmcmFtZS5cbiAgICAgIGlmIChmYWlsZWQgJiYgKytmYWlscyA8PSBNQVhfUEFTU19SRVRSWSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGZhaWxzID0gMDtcbiAgICAgIHRoaXMuX2RvbmUgPSB0cnVlO1xuICAgICAgdGhpcy5zaWduYWwoKTtcbiAgICAgIGF3YWl0IHRoaXMudW50aWxSZXN0YXJ0KCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBkZWNvZGVQYXNzKGdlbjogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gQSBzZWVrIHdob3NlIHRhcmdldCBvdmVyc2hvb3RzIHRoZSBsYXN0IGZyYW1lIHlpZWxkcyBub3RoaW5nOyBvbmUgcmV0cnkgZnJvbSBoZWFkIGJlYXRzIGEgZmFsc2UgRU9GLlxuICAgIGZvciAobGV0IGF0dGVtcHQgPSAwOyBhdHRlbXB0IDwgMjsgYXR0ZW1wdCsrKSB7XG4gICAgICBjb25zdCBmcm9tID0gdGhpcy5fc2Vla1RvOyAvLyByZXN0YXJ0IHRhcmdldCBpbiBwYWdlLWZyYW1lIHNwYWNlIChsZWFkIGluY2x1ZGVkKVxuICAgICAgdGhpcy5fc2Vla1RvID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fcGFzc0Zyb20gPSBmcm9tID8/IDE7XG4gICAgICB0aGlzLl93YW50ID0gZnJvbSA/PyAxOyAvLyBhIGZyZXNoIHBhc3MgcGFjZXMgb2ZmIGl0cyBvd24gc3RhcnQsIG5vdCB0aGUgcHJldmlvdXMgcGFzcydzIHRhaWwgZGVtYW5kXG4gICAgICAvLyBkZWNvZGVGcmFtZXMgY291bnRzIHBvc3QtbGVhZCBjb250ZW50IGZyYW1lcywgc28gYSBwYWdlLWtleSB0YXJnZXQgbG9zZXMgdGhlIGxlYWQgb2Zmc2V0LlxuICAgICAgY29uc3QgY29udGVudEZyb20gPSBmcm9tID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBNYXRoLm1heCgxLCBmcm9tIC0gdGhpcy5fbGVhZEZyYW1lcyk7XG4gICAgICBjb25zdCBzdHJlYW0gPSBkZWNvZGVGcmFtZXMoeyBzcmM6IHRoaXMuX3NyYywgbWV0YTogdGhpcy5tZXRhLCBzaWduYWw6IHRoaXMuX2N0cmwuc2lnbmFsLCBmcm9tSWR4OiBjb250ZW50RnJvbSB9KTtcbiAgICAgIGxldCBzdG9yZWQgPSAwO1xuICAgICAgZm9yIGF3YWl0IChjb25zdCB7IGlkeCwgYnVmIH0gb2Ygc3RyZWFtKSB7XG4gICAgICAgIGlmICh0aGlzLl9jbG9zZWQgfHwgdGhpcy5fZ2VuICE9PSBnZW4pIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYXQgPSB0aGlzLl9sZWFkRnJhbWVzICsgaWR4OyAvLyBtYXAgZGVjb2RlIHBvc2l0aW9uIHBhc3QgdGhlIGhlbGQgbGVhZC1nYXAgZnJhbWVzXG4gICAgICAgIHdoaWxlICghdGhpcy5fY2xvc2VkICYmIHRoaXMuX2dlbiA9PT0gZ2VuICYmIGF0ID4gdGhpcy5fd2FudCArIERFQ09ERV9BSEVBRCkge1xuICAgICAgICAgIGF3YWl0IHRoaXMucGF1c2UoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5fY2xvc2VkIHx8IHRoaXMuX2dlbiAhPT0gZ2VuKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2J1Zi5zZXQoYXQsIGJ1Zik7XG4gICAgICAgIHRoaXMuX3JlYWR5ID0gYXQ7XG4gICAgICAgIHRoaXMuZXZpY3QoKTtcbiAgICAgICAgdGhpcy5zaWduYWwoKTtcbiAgICAgICAgc3RvcmVkKys7XG4gICAgICB9XG4gICAgICBpZiAoYXR0ZW1wdCA9PT0gMCAmJiBzdG9yZWQgPT09IDAgJiYgY29udGVudEZyb20gIT09IHVuZGVmaW5lZCAmJiAhdGhpcy5fY2xvc2VkICYmIHRoaXMuX2dlbiA9PT0gZ2VuKSB7XG4gICAgICAgIGNvbnRpbnVlOyAvLyBzZWVrIGxhbmRlZCBwYXN0IHRoZSBsYXN0IGZyYW1lOiByZS1kZWNvZGUgZnJvbSBoZWFkXG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBwYXVzZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHIpID0+IHtcbiAgICAgIHRoaXMuX3Jlc3VtZSA9IHI7XG4gICAgfSk7XG4gIH1cblxuICAvLyBQYXJrIHVudGlsIGEgbG9vcC9iYWNrd2FyZCByZXF1ZXN0IChvciBjbG9zZSkgY2FsbHMgcmVxdWVzdFJlc3RhcnQoKS5cbiAgcHJpdmF0ZSB1bnRpbFJlc3RhcnQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyKSA9PiB7XG4gICAgICB0aGlzLl9yZXN0YXJ0ID0gcjtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZXZpY3QoKTogdm9pZCB7XG4gICAgY29uc3QgZmxvb3IgPSB0aGlzLl9yZWFkeSAtIHRoaXMuX2tlZXBDb3VudDtcbiAgICBmb3IgKGNvbnN0IGsgb2YgdGhpcy5fYnVmLmtleXMoKSkge1xuICAgICAgaWYgKGsgPCBmbG9vcikge1xuICAgICAgICB0aGlzLl9idWYuZGVsZXRlKGspO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNS8xOC5cblxuaW1wb3J0IHsgRGVjb2RlciB9IGZyb20gXCJub2RlLWF2L2FwaVwiO1xuaW1wb3J0IHsgQVZNRURJQV9UWVBFX1ZJREVPIH0gZnJvbSBcIm5vZGUtYXYvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBvcGVuSW5wdXQgfSBmcm9tIFwiLi9vcGVuXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJvYmVSZXN1bHQge1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgZHVyYXRpb246IG51bWJlcjtcbiAgLyoqIFBUUyAocykgb2YgdGhlIGZpcnN0IGRlY29kYWJsZSBmcmFtZTsgYSBjb3JydXB0L2VtcHR5IGxlYWRpbmcgcnVuIGlzIGhlbGQgb24gaXQsIGxpa2UgQ2hyb21lLiAqL1xuICBsZWFkR2FwOiBudW1iZXI7XG59XG5cbi8vIE5vIHdhbGwtY2xvY2sgY2FwOiBvcGVuSW5wdXQncyBwZXItcmVhZCByd190aW1lb3V0IGJvdW5kcyBhIHN0dWNrIHNvdXJjZSwgYW5kIHRoZSBjYWxsZXIgcmV0cmllcyBvbiB0aHJvdy5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm9iZShzcmM6IHN0cmluZyk6IFByb21pc2U8UHJvYmVSZXN1bHQ+IHtcbiAgYXdhaXQgdXNpbmcgZCA9IGF3YWl0IG9wZW5JbnB1dChzcmMpO1xuICBjb25zdCBzdHJlYW0gPSBkLnN0cmVhbXM/LmZpbmQoKHMpID0+IHMuY29kZWNwYXIuY29kZWNUeXBlID09PSBBVk1FRElBX1RZUEVfVklERU8pO1xuICBpZiAoIXN0cmVhbSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcInByb2JlOiBubyB2aWRlbyBzdHJlYW1cIik7XG4gIH1cbiAgY29uc3QgZHVyYXRpb24gPSBkLmR1cmF0aW9uID4gMCA/IGQuZHVyYXRpb24gOiAwO1xuICBjb25zdCB0YiA9IHN0cmVhbS50aW1lQmFzZS5udW0gLyBzdHJlYW0udGltZUJhc2UuZGVuO1xuICB1c2luZyBkZWMgPSBhd2FpdCBEZWNvZGVyLmNyZWF0ZShzdHJlYW0sIHsgdGhyZWFkQ291bnQ6IDEgfSk7XG4gIGxldCBsZWFkR2FwID0gMDtcbiAgLy8gRmlyc3QgY2xlYW4gZnJhbWUncyBQVFMgPSB3aGVyZSBjb250ZW50IGJlZ2luczsgc2tpcCBjb3JydXB0IGZyYW1lcyBsaWtlIGEgYnJvd3Nlci5cbiAgb3V0ZXI6IGZvciBhd2FpdCAodXNpbmcgcGt0IG9mIGQucGFja2V0cyhzdHJlYW0uaW5kZXgpKSB7XG4gICAgdHJ5IHtcbiAgICAgIGZvciBhd2FpdCAodXNpbmcgZnJhbWUgb2YgZGVjLmZyYW1lcyhwa3QpKSB7XG4gICAgICAgIGlmIChmcmFtZT8uZGVjb2RlRXJyb3JGbGFncyAhPT0gMCkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGxlYWRHYXAgPSBNYXRoLm1heCgwLCBOdW1iZXIoZnJhbWUucHRzKSAqIHRiKTtcbiAgICAgICAgYnJlYWsgb3V0ZXI7XG4gICAgICB9XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBjb3JydXB0IHBhY2tldCDigJQgc2tpcCB0byB0aGUgbmV4dFxuICAgIH1cbiAgfVxuICByZXR1cm4geyB3aWR0aDogc3RyZWFtLmNvZGVjcGFyLndpZHRoLCBoZWlnaHQ6IHN0cmVhbS5jb2RlY3Bhci5oZWlnaHQsIGR1cmF0aW9uLCBsZWFkR2FwIH07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA3LzA2LlxuXG5pbXBvcnQgeyByYW5kb21CeXRlcyB9IGZyb20gXCJub2RlOmNyeXB0b1wiO1xuaW1wb3J0IHsgcmVhZEZpbGUsIHJtIH0gZnJvbSBcIm5vZGU6ZnMvcHJvbWlzZXNcIjtcbmltcG9ydCB7IHRtcGRpciB9IGZyb20gXCJub2RlOm9zXCI7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHsgQ29kZWMsIEZGbXBlZ0Vycm9yLCBGcmFtZSB9IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQgeyBBVl9QSVhfRk1UX1lVVjQyMFAsIEFWRVJST1JfRUFHQUlOLCBBVkVSUk9SX0VPRiB9IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgRkZfRU5DT0RFUl9MSUJWUFhfVlA5LCBtYWtlUGFja2V0LCBvcGVuVmlkZW9DdHggfSBmcm9tIFwiLi4vLi4vYmFzZS9lbmNvZGVyL21pc2NcIjtcbmltcG9ydCB7IEZvcm1hdE11eGVyIH0gZnJvbSBcIi4uLy4uL2Jhc2UvZW5jb2Rlci9tdXhlclwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFN0dWJFbmNvZGVPcHRpb25zIHtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIGR1cmF0aW9uOiBudW1iZXI7XG59XG5cbi8vIFJlYWwgcGFyc2VhYmxlIG1lZGlhIHdpdGggdGhlIHNvdXJjZSdzIGludHJpbnNpYyBzaXplICsgZHVyYXRpb24sIHNvIEJsaW5rIGxheXMgb3V0IGxpa2UgQ2hyb21lLlxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGVuY29kZVN0dWJXZWJtKHsgd2lkdGgsIGhlaWdodCwgZHVyYXRpb24gfTogU3R1YkVuY29kZU9wdGlvbnMpOiBQcm9taXNlPEJ1ZmZlcj4ge1xuICBjb25zdCBjb2RlYyA9IENvZGVjLmZpbmRFbmNvZGVyQnlOYW1lKEZGX0VOQ09ERVJfTElCVlBYX1ZQOSk7XG4gIGlmICghY29kZWMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYHN0dWI6IGVuY29kZXIgbm90IGZvdW5kOiAke0ZGX0VOQ09ERVJfTElCVlBYX1ZQOX1gKTtcbiAgfVxuICBjb25zdCBwYXRoID0gam9pbih0bXBkaXIoKSwgYHB1cF9zdHViXyR7cmFuZG9tQnl0ZXMoOCkudG9TdHJpbmcoXCJoZXhcIil9LndlYm1gKTtcbiAgdHJ5IHtcbiAgICB7XG4gICAgICBhd2FpdCB1c2luZyBtdXhlciA9IG5ldyBGb3JtYXRNdXhlcihwYXRoKTtcbiAgICAgIC8vIFRpbWViYXNlIDEvMTAwMCAoZnBzIHBhcmFtKSBsZXRzIG9uZSBwYWNrZXQgY2FycnkgdGhlIGZ1bGwgc291cmNlIGR1cmF0aW9uIGluIG1zLlxuICAgICAgdXNpbmcgY3R4ID0gYXdhaXQgb3BlblZpZGVvQ3R4KFxuICAgICAgICB7XG4gICAgICAgICAgY29kZWMsXG4gICAgICAgICAgd2lkdGgsXG4gICAgICAgICAgaGVpZ2h0LFxuICAgICAgICAgIGZwczogMTAwMCxcbiAgICAgICAgICBiaXRyYXRlOiAxMDBfMDAwLFxuICAgICAgICAgIHBpeGVsRm9ybWF0OiBBVl9QSVhfRk1UX1lVVjQyMFAsXG4gICAgICAgICAgb3B0aW9uczogeyBkZWFkbGluZTogXCJyZWFsdGltZVwiLCBcImNwdS11c2VkXCI6IFwiOFwiIH0sXG4gICAgICAgIH0sXG4gICAgICAgIFwic3R1YkN0eC5vcGVuMlwiLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IHN0cmVhbSA9IG11eGVyLmFkZFN0cmVhbShjdHgpO1xuICAgICAgYXdhaXQgbXV4ZXIub3BlbigpO1xuICAgICAgdXNpbmcgc3R1YiA9IG5ldyBTdHViRnJhbWUod2lkdGgsIGhlaWdodCk7XG4gICAgICBjb25zdCBtcyA9IEJpZ0ludChNYXRoLm1heCgxLCBNYXRoLnJvdW5kKGR1cmF0aW9uICogMTAwMCkpKTtcbiAgICAgIHN0dWIuZnJhbWUucHRzID0gMG47XG4gICAgICBzdHViLmZyYW1lLmR1cmF0aW9uID0gbXM7XG4gICAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgY3R4LnNlbmRGcmFtZShzdHViLmZyYW1lKSwgXCJzdHViQ3R4LnNlbmRGcmFtZVwiKTtcbiAgICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCBjdHguc2VuZEZyYW1lKG51bGwpLCBcInN0dWJDdHguZmx1c2hcIik7XG4gICAgICB1c2luZyBwa3QgPSBtYWtlUGFja2V0KCk7XG4gICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICBjb25zdCByID0gYXdhaXQgY3R4LnJlY2VpdmVQYWNrZXQocGt0KTtcbiAgICAgICAgaWYgKHIgPT09IEFWRVJST1JfRUFHQUlOIHx8IHIgPT09IEFWRVJST1JfRU9GKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKHIsIFwic3R1YkN0eC5yZWNlaXZlUGFja2V0XCIpO1xuICAgICAgICBwa3Quc3RyZWFtSW5kZXggPSBzdHJlYW0uaW5kZXg7XG4gICAgICAgIHBrdC5kdXJhdGlvbiA9IG1zO1xuICAgICAgICBwa3QucmVzY2FsZVRzKGN0eC50aW1lQmFzZSwgc3RyZWFtLnRpbWVCYXNlKTtcbiAgICAgICAgYXdhaXQgbXV4ZXIud3JpdGVQYWNrZXQocGt0KTtcbiAgICAgICAgcGt0LnVucmVmKCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhd2FpdCByZWFkRmlsZShwYXRoKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCBybShwYXRoLCB7IGZvcmNlOiB0cnVlIH0pO1xuICB9XG59XG5cbi8vIE93bnMgdGhlIGJsYWNrIHBpeGVsIGJ1ZmZlciBBTkQgaXRzIHplcm8tY29weSBmcmFtZSB2aWV3IOKAlCBgdXNpbmdgIHBpbnMgYm90aCB1bnRpbCBhZnRlciBlbmNvZGUuXG5jbGFzcyBTdHViRnJhbWUgaW1wbGVtZW50cyBEaXNwb3NhYmxlIHtcbiAgcmVhZG9ubHkgZnJhbWU6IEZyYW1lO1xuICBwcml2YXRlIHJlYWRvbmx5IF9idWY6IEJ1ZmZlcjtcblxuICBjb25zdHJ1Y3Rvcih3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcikge1xuICAgIGNvbnN0IGx1bWEgPSB3aWR0aCAqIGhlaWdodDtcbiAgICBjb25zdCBjaHJvbWEgPSBNYXRoLmNlaWwod2lkdGggLyAyKSAqIE1hdGguY2VpbChoZWlnaHQgLyAyKTtcbiAgICB0aGlzLl9idWYgPSBCdWZmZXIuYWxsb2MobHVtYSArIGNocm9tYSAqIDIsIDB4ODApO1xuICAgIHRoaXMuX2J1Zi5maWxsKDAsIDAsIGx1bWEpO1xuICAgIHRoaXMuZnJhbWUgPSBGcmFtZS5mcm9tVmlkZW9CdWZmZXIodGhpcy5fYnVmLCB7IHdpZHRoLCBoZWlnaHQsIGZvcm1hdDogQVZfUElYX0ZNVF9ZVVY0MjBQIH0pO1xuICB9XG5cbiAgW1N5bWJvbC5kaXNwb3NlXSgpOiB2b2lkIHtcbiAgICB0aGlzLmZyYW1lW1N5bWJvbC5kaXNwb3NlXSgpO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA1LzE4LlxuXG5pbXBvcnQgeyB1c2VSZXRyeSB9IGZyb20gXCIuLi8uLi9iYXNlL3JldHJ5XCI7XG5pbXBvcnQgeyBwcm94aWVkVXJsIH0gZnJvbSBcIi4uL25ldHdvcmtcIjtcbmltcG9ydCB7IERlY29kZVNlc3Npb24gfSBmcm9tIFwiLi9kZWNvZGVfc2Vzc2lvblwiO1xuaW1wb3J0IHsgdHlwZSBQcm9iZVJlc3VsdCwgcHJvYmUgfSBmcm9tIFwiLi9wcm9iZVwiO1xuaW1wb3J0IHsgZW5jb2RlU3R1YldlYm0gfSBmcm9tIFwiLi9zdHViXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmlkZW9NZXRhIHtcbiAgaWQ6IHN0cmluZztcbiAgLyoqIEludHJpbnNpYyBzb3VyY2UgZGltZW5zaW9ucyAocmVwb3J0ZWQgYXMgdmlkZW9XaWR0aC92aWRlb0hlaWdodCkuICovXG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICAvKiogRGVjb2RlZCtzY2FsZWQgZnJhbWUgZGltZW5zaW9ucyBhY3R1YWxseSBzZXJ2ZWQgKOKJpCBzb3VyY2U7IGNhcHBlZCB0byB0aGUgZGlzcGxheSBib3gpLiAqL1xuICBmcmFtZVdpZHRoOiBudW1iZXI7XG4gIGZyYW1lSGVpZ2h0OiBudW1iZXI7XG4gIGZwczogbnVtYmVyO1xuICBkdXJhdGlvbjogbnVtYmVyO1xuICAvKiogU2Vjb25kcyBvZiBjb3JydXB0L2VtcHR5IGxlYWRpbmcgY29udGVudCBoZWxkIG9uIHRoZSBmaXJzdCBkZWNvZGFibGUgZnJhbWUuICovXG4gIGxlYWRHYXA6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPcGVuT3B0aW9ucyB7XG4gIHNyYzogc3RyaW5nO1xuICBmcHM6IG51bWJlcjtcbiAgLyoqIERpc3BsYXktYm94IHBpeGVscyAoY2FudmFzIGJhY2tpbmcgc3RvcmUpOyBkZWNvZGUgaXMgZG93bnNjYWxlZCB0byBjb3ZlciB0aGlzLCBuZXZlciB1cHNjYWxlZC4gKi9cbiAgZHN0Vz86IG51bWJlcjtcbiAgZHN0SD86IG51bWJlcjtcbiAgLyoqIG9iamVjdEZpdDsgXCJub25lXCIgbmVlZHMgMToxIG5hdGl2ZSBwaXhlbHMgc28gaXQgc2tpcHMgZG93bnNjYWxlLiAqL1xuICBmaXQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBGcmFtZVNlcnZlciB7XG4gIHByaXZhdGUgX3Nlc3Npb25zID0gbmV3IE1hcDxzdHJpbmcsIERlY29kZVNlc3Npb24+KCk7XG4gIHByaXZhdGUgX3Byb2JlcyA9IG5ldyBNYXA8c3RyaW5nLCBQcm9taXNlPFByb2JlUmVzdWx0Pj4oKTtcbiAgcHJpdmF0ZSBfc3R1YnMgPSBuZXcgTWFwPHN0cmluZywgUHJvbWlzZTxCdWZmZXI+PigpO1xuICBwcml2YXRlIF9zZXEgPSAwO1xuICBwcml2YXRlIF9jbG9zZWQgPSBmYWxzZTtcblxuICAvLyAtZCBkZWNvZGUgYnlwYXNzZXMgdGhlIHdpbmRvdyBpbnRlcmNlcHRvciwgc28gaXQgcmVtYXBzIGhvc3RzIGl0c2VsZiB3aGVuIHRoZSBpbm5lciBwcm94eSBpcyBvbi5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBfdXNlSW5uZXJQcm94eTogYm9vbGVhbikge31cblxuICAvLyBPbmUgc2Vzc2lvbiBwZXIgPHZpZGVvPiBlbGVtZW50OiBhIHNlc3Npb24gaXMgYSBzaW5nbGUgcGxheWJhY2sgaGVhZCwgc28gc2FtZS1zcmMgZWxlbWVudHMgbXVzdCBub3Qgc2hhcmUgaXQuXG4gIGFzeW5jIG9wZW4ob3B0czogT3Blbk9wdGlvbnMpOiBQcm9taXNlPFZpZGVvTWV0YT4ge1xuICAgIGlmICh0aGlzLl9jbG9zZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcImZyYW1lLXNlcnZlcjogY2xvc2VkXCIpO1xuICAgIH1cbiAgICBjb25zdCBzcmMgPSB0aGlzLl91c2VJbm5lclByb3h5ID8gcHJveGllZFVybChvcHRzLnNyYykgOiBvcHRzLnNyYztcbiAgICBjb25zdCBpbmZvID0gYXdhaXQgdGhpcy5wcm9iZUNhY2hlZChzcmMpO1xuICAgIGlmICh0aGlzLl9jbG9zZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcImZyYW1lLXNlcnZlcjogY2xvc2VkXCIpO1xuICAgIH1cbiAgICBsZXQgZnJhbWVXaWR0aCA9IGluZm8ud2lkdGg7XG4gICAgbGV0IGZyYW1lSGVpZ2h0ID0gaW5mby5oZWlnaHQ7XG4gICAgLy8gRG93bnNjYWxlIHRvIGNvdmVyIHRoZSBkaXNwbGF5IGJveCAobmV2ZXIgdXBzY2FsZSk7IG9iamVjdEZpdCBcIm5vbmVcIiBuZWVkcyAxOjEgbmF0aXZlIHBpeGVscy5cbiAgICBpZiAob3B0cy5kc3RXICYmIG9wdHMuZHN0SCAmJiBvcHRzLmZpdCAhPT0gXCJub25lXCIpIHtcbiAgICAgIGNvbnN0IHMgPSBNYXRoLm1pbigxLCBNYXRoLm1heChvcHRzLmRzdFcgLyBpbmZvLndpZHRoLCBvcHRzLmRzdEggLyBpbmZvLmhlaWdodCkpO1xuICAgICAgZnJhbWVXaWR0aCA9IGV2ZW4oaW5mby53aWR0aCAqIHMpO1xuICAgICAgZnJhbWVIZWlnaHQgPSBldmVuKGluZm8uaGVpZ2h0ICogcyk7XG4gICAgfVxuICAgIGNvbnN0IG1ldGE6IFZpZGVvTWV0YSA9IHtcbiAgICAgIGlkOiBTdHJpbmcoKyt0aGlzLl9zZXEpLFxuICAgICAgd2lkdGg6IGluZm8ud2lkdGgsXG4gICAgICBoZWlnaHQ6IGluZm8uaGVpZ2h0LFxuICAgICAgZnJhbWVXaWR0aCxcbiAgICAgIGZyYW1lSGVpZ2h0LFxuICAgICAgZnBzOiBvcHRzLmZwcyxcbiAgICAgIGR1cmF0aW9uOiBpbmZvLmR1cmF0aW9uLFxuICAgICAgbGVhZEdhcDogaW5mby5sZWFkR2FwLFxuICAgIH07XG4gICAgdGhpcy5fc2Vzc2lvbnMuc2V0KG1ldGEuaWQsIG5ldyBEZWNvZGVTZXNzaW9uKG1ldGEsIHNyYykpO1xuICAgIHJldHVybiBtZXRhO1xuICB9XG5cbiAgLy8gRGV0ZXJtaW5pc3RpYyBtZWRpYSByZXF1ZXN0cyByZWRpcmVjdCBoZXJlOiByZWFsIHBhcnNlYWJsZSBieXRlcyB3aXRoIHRydWUgaW50cmluc2ljIHNpemUgKyBkdXJhdGlvbi5cbiAgc3R1YihzcmM6IHN0cmluZyk6IFByb21pc2U8QnVmZmVyPiB7XG4gICAgaWYgKHRoaXMuX2Nsb3NlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZnJhbWUtc2VydmVyOiBjbG9zZWRcIik7XG4gICAgfVxuICAgIGNvbnN0IHJlYWwgPSB0aGlzLl91c2VJbm5lclByb3h5ID8gcHJveGllZFVybChzcmMpIDogc3JjO1xuICAgIGNvbnN0IGhpdCA9IHRoaXMuX3N0dWJzLmdldChyZWFsKTtcbiAgICBpZiAoaGl0KSB7XG4gICAgICByZXR1cm4gaGl0O1xuICAgIH1cbiAgICBjb25zdCBwID0gdGhpcy5wcm9iZUNhY2hlZChyZWFsKS50aGVuKChpbmZvKSA9PlxuICAgICAgZW5jb2RlU3R1YldlYm0oe1xuICAgICAgICB3aWR0aDogaW5mby53aWR0aCxcbiAgICAgICAgaGVpZ2h0OiBpbmZvLmhlaWdodCxcbiAgICAgICAgZHVyYXRpb246IGluZm8uZHVyYXRpb24sXG4gICAgICB9KSxcbiAgICApO1xuICAgIHAuY2F0Y2goKCkgPT4gdGhpcy5fc3R1YnMuZGVsZXRlKHJlYWwpKTtcbiAgICB0aGlzLl9zdHVicy5zZXQocmVhbCwgcCk7XG4gICAgcmV0dXJuIHA7XG4gIH1cblxuICBhc3luYyBnZXRGcmFtZShpZDogc3RyaW5nLCBpZHg6IG51bWJlcik6IFByb21pc2U8QnVmZmVyIHwgdW5kZWZpbmVkPiB7XG4gICAgcmV0dXJuIHRoaXMuX3Nlc3Npb25zLmdldChpZCk/LmdldEZyYW1lKGlkeCk7XG4gIH1cblxuICBhc3luYyBjbG9zZShpZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcyA9IHRoaXMuX3Nlc3Npb25zLmdldChpZCk7XG4gICAgaWYgKCFzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX3Nlc3Npb25zLmRlbGV0ZShpZCk7XG4gICAgYXdhaXQgcy5jbG9zZSgpO1xuICB9XG5cbiAgLy8gRmFpbGVkIHByb2JlcyBldmljdCBzbyBhIHRyYW5zaWVudCBzb3VyY2UgZXJyb3IgY2FuIHJldHJ5IG9uIHRoZSBuZXh0IHJlcXVlc3QuXG4gIHByaXZhdGUgcHJvYmVDYWNoZWQoc3JjOiBzdHJpbmcpOiBQcm9taXNlPFByb2JlUmVzdWx0PiB7XG4gICAgY29uc3QgaGl0ID0gdGhpcy5fcHJvYmVzLmdldChzcmMpO1xuICAgIGlmIChoaXQpIHtcbiAgICAgIHJldHVybiBoaXQ7XG4gICAgfVxuICAgIGNvbnN0IHAgPSB1c2VSZXRyeSh7IGZuOiBwcm9iZSB9KShzcmMpO1xuICAgIHAuY2F0Y2goKCkgPT4gdGhpcy5fcHJvYmVzLmRlbGV0ZShzcmMpKTtcbiAgICB0aGlzLl9wcm9iZXMuc2V0KHNyYywgcCk7XG4gICAgcmV0dXJuIHA7XG4gIH1cblxuICBhc3luYyBjbG9zZUFsbCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLl9jbG9zZWQgPSB0cnVlO1xuICAgIGNvbnN0IHNlc3Npb25zID0gWy4uLnRoaXMuX3Nlc3Npb25zLnZhbHVlcygpXTtcbiAgICB0aGlzLl9zZXNzaW9ucy5jbGVhcigpO1xuICAgIGF3YWl0IFByb21pc2UuYWxsKHNlc3Npb25zLm1hcCgocykgPT4gcy5jbG9zZSgpKSk7XG4gIH1cbn1cblxuLy8gUm91bmQgZG93biB0byBhbiBldmVuIGludGVnZXIgKOKJpTIpIGZvciB0aGUgc2NhbGVyLlxuZnVuY3Rpb24gZXZlbihuOiBudW1iZXIpOiBudW1iZXIge1xuICBjb25zdCByID0gTWF0aC5yb3VuZChuKTtcbiAgcmV0dXJuIE1hdGgubWF4KDIsIHIgLSAociAlIDIpKTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDUvMTguXG5cbmltcG9ydCB7IHByb3RvY29sIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi4vLi4vYmFzZS9sb2dnaW5nXCI7XG5pbXBvcnQgeyBGcmFtZVNlcnZlciwgdHlwZSBWaWRlb01ldGEgfSBmcm9tIFwiLi9mcmFtZV9zZXJ2ZXJcIjtcblxuY29uc3QgVEFHID0gXCJbRnJhbWVQcm90b2NvbF1cIjtcblxuLy8gU2NoZW1lIGlzIHJlZ2lzdGVyZWQgYWxvbmdzaWRlIGBwdXBgIGluIHJlbmRlcmVyL3Byb3RvY29sLnRzIChzaW5nbGUgY2FsbCBvbmx5KS5cbmNvbnN0IFNDSEVNRSA9IFwicHVwLWZyYW1lXCI7XG5cbmNvbnN0IENPUlNfSEVBREVSUzogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgXCJhY2Nlc3MtY29udHJvbC1hbGxvdy1vcmlnaW5cIjogXCIqXCIsXG4gIFwiYWNjZXNzLWNvbnRyb2wtYWxsb3ctbWV0aG9kc1wiOiBcIkdFVCwgT1BUSU9OU1wiLFxuICBcImFjY2Vzcy1jb250cm9sLWFsbG93LWhlYWRlcnNcIjogXCIqXCIsXG59O1xuXG4vLyBNdXN0IGJlIGNhbGxlZCBhZnRlciBhcHAgaXMgcmVhZHkuIERldGVybWluaXN0aWMtb25seSAocmVhbC10aW1lIHZpZGVvcyBzZWxmLXRpY2ssIG5vIGZyYW1lIHByb3RvY29sKS5cbmV4cG9ydCBmdW5jdGlvbiB1c2VGcmFtZVByb3RvY29sKHVzZUlubmVyUHJveHk6IGJvb2xlYW4pOiBBc3luY0Rpc3Bvc2FibGUge1xuICBjb25zdCBmcyA9IG5ldyBGcmFtZVNlcnZlcih1c2VJbm5lclByb3h5KTtcbiAgcHJvdG9jb2wuaGFuZGxlKFNDSEVNRSwgYXN5bmMgKHJlcSkgPT4ge1xuICAgIGlmIChyZXEubWV0aG9kID09PSBcIk9QVElPTlNcIikge1xuICAgICAgcmV0dXJuIG5ldyBSZXNwb25zZShudWxsLCB7IHN0YXR1czogMjA0LCBoZWFkZXJzOiBDT1JTX0hFQURFUlMgfSk7XG4gICAgfVxuICAgIGNvbnN0IHVybCA9IG5ldyBVUkwocmVxLnVybCk7XG4gICAgbG9nZ2VyLmRlYnVnKFRBRywgYCR7cmVxLm1ldGhvZH0gJHt1cmwuaG9zdG5hbWV9JHt1cmwuc2VhcmNofWApO1xuICAgIHRyeSB7XG4gICAgICBsZXQgcmVzOiBSZXNwb25zZTtcbiAgICAgIHN3aXRjaCAodXJsLmhvc3RuYW1lKSB7XG4gICAgICAgIGNhc2UgXCJvcGVuXCI6XG4gICAgICAgICAgcmVzID0ganNvbk9rKFxuICAgICAgICAgICAgYXdhaXQgZnMub3Blbih7XG4gICAgICAgICAgICAgIHNyYzogdXJsLnNlYXJjaFBhcmFtcy5nZXQoXCJzcmNcIikgPz8gXCJcIixcbiAgICAgICAgICAgICAgZnBzOiBpbnQodXJsLCBcImZwc1wiLCAzMCksXG4gICAgICAgICAgICAgIGRzdFc6IGludCh1cmwsIFwid1wiLCAwKSxcbiAgICAgICAgICAgICAgZHN0SDogaW50KHVybCwgXCJoXCIsIDApLFxuICAgICAgICAgICAgICBmaXQ6IHVybC5zZWFyY2hQYXJhbXMuZ2V0KFwiZml0XCIpID8/IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJmcmFtZVwiOlxuICAgICAgICAgIC8vIFBhaW50cyBkcml2ZSB0aGUgdmlydHVhbCBjbG9jaywgc28gc3RhbGwgb24gZGVjb2RlIGluc3RlYWQgb2YgaGFuZGluZyBiYWNrIGEgYmxhY2sgZnJhbWUuXG4gICAgICAgICAgcmVzID0gcmdiYU9rKChhd2FpdCBmcy5nZXRGcmFtZSh1cmwuc2VhcmNoUGFyYW1zLmdldChcImlkXCIpID8/IFwiXCIsIGludCh1cmwsIFwiaWR4XCIsIDEpKSkgPz8gQnVmZmVyLmFsbG9jKDApKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcInN0dWJcIjpcbiAgICAgICAgICByZXMgPSB3ZWJtT2soYXdhaXQgZnMuc3R1Yih1cmwuc2VhcmNoUGFyYW1zLmdldChcInNyY1wiKSA/PyBcIlwiKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJjbG9zZVwiOlxuICAgICAgICAgIGF3YWl0IGZzLmNsb3NlKHVybC5zZWFyY2hQYXJhbXMuZ2V0KFwiaWRcIikgPz8gXCJcIik7XG4gICAgICAgICAgcmVzID0gbmV3IFJlc3BvbnNlKG51bGwsIHsgc3RhdHVzOiAyMDQsIGhlYWRlcnM6IENPUlNfSEVBREVSUyB9KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXMgPSBuZXcgUmVzcG9uc2UoYHVua25vd24gYWN0aW9uOiAke3VybC5ob3N0bmFtZX1gLCB7XG4gICAgICAgICAgICBzdGF0dXM6IDQwNCxcbiAgICAgICAgICAgIGhlYWRlcnM6IENPUlNfSEVBREVSUyxcbiAgICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXM7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc3QgbXNnID0gZSBpbnN0YW5jZW9mIEVycm9yID8gZS5tZXNzYWdlIDogU3RyaW5nKGUpO1xuICAgICAgbG9nZ2VyLmVycm9yKFRBRywgYCR7dXJsLmhvc3RuYW1lfSBmYWlsZWQke3VybC5zZWFyY2h9OiAke21zZ31gKTtcbiAgICAgIHJldHVybiBuZXcgUmVzcG9uc2UobXNnLCB7IHN0YXR1czogNTAwLCBoZWFkZXJzOiBDT1JTX0hFQURFUlMgfSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHtcbiAgICBbU3ltYm9sLmFzeW5jRGlzcG9zZV06IGFzeW5jICgpID0+IHtcbiAgICAgIHByb3RvY29sLnVuaGFuZGxlKFNDSEVNRSk7XG4gICAgICBhd2FpdCBmcy5jbG9zZUFsbCgpO1xuICAgIH0sXG4gIH07XG59XG5cbmZ1bmN0aW9uIGpzb25PayhtZXRhOiBWaWRlb01ldGEpOiBSZXNwb25zZSB7XG4gIHJldHVybiBuZXcgUmVzcG9uc2UoSlNPTi5zdHJpbmdpZnkobWV0YSksIHtcbiAgICBoZWFkZXJzOiB7IC4uLkNPUlNfSEVBREVSUywgXCJjb250ZW50LXR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIgfSxcbiAgfSk7XG59XG5cbi8vIENhY2hlZCBzdHViIEJ1ZmZlciBpcyBzaGFyZWQgYWNyb3NzIHJlc3BvbnNlcyDigJQgY29weSBzbyBhIGNvbnN1bWVyIGNhbid0IGRldGFjaCBpdC5cbmZ1bmN0aW9uIHdlYm1PayhieXRlczogQnVmZmVyKTogUmVzcG9uc2Uge1xuICBjb25zdCBjb3B5ID0gbmV3IFVpbnQ4QXJyYXkoYnl0ZXMuYnl0ZUxlbmd0aCk7XG4gIGNvcHkuc2V0KGJ5dGVzKTtcbiAgcmV0dXJuIG5ldyBSZXNwb25zZShjb3B5LmJ1ZmZlciBhcyBBcnJheUJ1ZmZlciwge1xuICAgIGhlYWRlcnM6IHtcbiAgICAgIC4uLkNPUlNfSEVBREVSUyxcbiAgICAgIFwiY29udGVudC10eXBlXCI6IFwidmlkZW8vd2VibVwiLFxuICAgICAgXCJjYWNoZS1jb250cm9sXCI6IFwibm8tc3RvcmVcIixcbiAgICB9LFxuICB9KTtcbn1cblxuLy8gUmF3IFJHQkEgcGl4ZWxzOyB0aGUgcGFnZSB3cmFwcyB0aGVtIGluIEltYWdlRGF0YSB1c2luZyBtZXRhLndpZHRoL2hlaWdodCBpdCBnb3QgZnJvbSBgb3BlbmAuXG5mdW5jdGlvbiByZ2JhT2soYnl0ZXM6IEJ1ZmZlcik6IFJlc3BvbnNlIHtcbiAgaWYgKGJ5dGVzLmJ5dGVMZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gbmV3IFJlc3BvbnNlKG51bGwsIHsgc3RhdHVzOiA0MTAsIGhlYWRlcnM6IENPUlNfSEVBREVSUyB9KTtcbiAgfVxuICBjb25zdCBjb3B5ID0gbmV3IFVpbnQ4QXJyYXkoYnl0ZXMuYnl0ZUxlbmd0aCk7XG4gIGNvcHkuc2V0KGJ5dGVzKTtcbiAgcmV0dXJuIG5ldyBSZXNwb25zZShjb3B5LmJ1ZmZlciBhcyBBcnJheUJ1ZmZlciwge1xuICAgIGhlYWRlcnM6IHtcbiAgICAgIC4uLkNPUlNfSEVBREVSUyxcbiAgICAgIFwiY29udGVudC10eXBlXCI6IFwiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtXCIsXG4gICAgICBcImNhY2hlLWNvbnRyb2xcIjogXCJuby1zdG9yZVwiLFxuICAgIH0sXG4gIH0pO1xufVxuXG5mdW5jdGlvbiBpbnQodXJsOiBVUkwsIGtleTogc3RyaW5nLCBmYWxsYmFjazogbnVtYmVyKTogbnVtYmVyIHtcbiAgY29uc3QgdiA9IHVybC5zZWFyY2hQYXJhbXMuZ2V0KGtleSk7XG4gIGNvbnN0IG4gPSB2ID8gcGFyc2VJbnQodiwgMTApIDogTmFOO1xuICByZXR1cm4gTnVtYmVyLmlzRmluaXRlKG4pID8gbiA6IGZhbGxiYWNrO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMy8xMy5cblxuaW1wb3J0IHR5cGUgeyBCcm93c2VyV2luZG93LCBOYXRpdmVJbWFnZSwgU2l6ZSB9IGZyb20gXCJlbGVjdHJvblwiO1xuaW1wb3J0IHsgYWR2YW5jZVZpcnR1YWxUaW1lLCBwYXVzZVZpcnR1YWxUaW1lLCByZWJ1aWxkRHJhd2FibGUgfSBmcm9tIFwiLi4vYmFzZS9jZHBcIjtcbmltcG9ydCB7IEVuY29kZXJQaXBlbGluZSB9IGZyb20gXCIuLi9iYXNlL2VuY29kZXIvcGlwZWxpbmVcIjtcbmltcG9ydCB7IHNpemVFcXVhbHMgfSBmcm9tIFwiLi4vYmFzZS9pbWFnZVwiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4uL2Jhc2UvbG9nZ2luZ1wiO1xuaW1wb3J0IHsgQkxBTktfV0FSTl9SQVRJTywgQmxhbmtTdGF0cyB9IGZyb20gXCIuLi9iYXNlL3F1YWxpdHkvYmxhbmtcIjtcbmltcG9ydCB7IERyb3BTdGF0cywgSkFOS19XQVJOX1NDT1JFIH0gZnJvbSBcIi4uL2Jhc2UvcXVhbGl0eS9kcm9wXCI7XG5pbXBvcnQgeyBwZXJpb2RpY2FsIH0gZnJvbSBcIi4uL2Jhc2UvdGltaW5nXCI7XG5pbXBvcnQgeyBGaXJzdEZyYW1lR2F0ZSwgdHlwZSBDYXB0dXJlZEZyYW1lIGFzIEZyYW1lIH0gZnJvbSBcIi4vZnJhbWVfZ2F0ZVwiO1xuaW1wb3J0IHR5cGUgeyBJcGNEb25lUGF5bG9hZCB9IGZyb20gXCIuL2lwY1wiO1xuaW1wb3J0IHR5cGUgeyBJUENSZW5kZXJPcHRpb25zIH0gZnJvbSBcIi4vc2NoZW1hXCI7XG5pbXBvcnQgeyBTY3JlZW5zaG90VGFrZXIgfSBmcm9tIFwiLi9zY3JlZW5zaG90XCI7XG5pbXBvcnQgeyBkZWNvZGVTdGVnbywgZHJhd1N0ZWdvLCBGUkFNRV9TWU5DX01BUktFUl9XSURUSCwgd2FpdFN0ZWdvVGljayB9IGZyb20gXCIuL3N0ZWdvXCI7XG5pbXBvcnQgeyB0aWNrIH0gZnJvbSBcIi4vdGlja1wiO1xuaW1wb3J0IHsgdXNlRnJhbWVQcm90b2NvbCB9IGZyb20gXCIuL3ZpZGVvL3Byb3RvY29sXCI7XG5pbXBvcnQgeyBkaXNwb3NlV2luZG93LCBsb2FkV2luZG93IH0gZnJvbSBcIi4vd2luZG93XCI7XG5cbmNvbnN0IFRBRyA9IFwiW1Nob290XVwiO1xuY29uc3QgUkVOREVSX0ZQUyA9IDI0MDtcblxuaW50ZXJmYWNlIFBhaW50T3B0aW9ucyB7XG4gIHNvdXJjZTogc3RyaW5nO1xuICBmcHM6IG51bWJlcjtcbiAgd2luOiBCcm93c2VyV2luZG93O1xuICBzaXplOiBTaXplO1xuICBtczogbnVtYmVyO1xufVxuXG4vLyBXYWl0cyBmb3IgYSBjb21wb3NpdGVkIGZyYW1lIHdob3NlIHN0ZWdvIHJvdyBtYXRjaGVzIG1zOyBvbiB0aGUgZmlyc3QgZnJhbWUgb25seSwgRmlyc3RGcmFtZUdhdGUgaG9sZHMgdGhlIGZpcnN0IG1hdGNoIGFzIGJhc2VsaW5lIGFuZCBvbmx5IGxldHMgYSBsYXRlciBjb21wb3NpdGUgdGhhdCBkaWZmZXJzIGJleW9uZCB0aHJlc2hvbGQgdGhyb3VnaCwgc28gYSBzdGVnbyByb3cgbGFuZGluZyBiZWZvcmUgdGhlIHBhZ2UncyBmaXJzdCBwYWludCBjYW5ub3QgYmUgY2FwdHVyZWQgYXMgYW4gZW1wdHkgZnJhbWUgMC5cbmFzeW5jIGZ1bmN0aW9uIHBhaW50KHsgd2luLCBmcHMsIHNpemUsIG1zIH06IFBhaW50T3B0aW9ucyk6IFByb21pc2U8RnJhbWUgfCB1bmRlZmluZWQ+IHtcbiAgbGV0IGNsZWFyRGlydHlDaGVjazogVm9pZEZ1bmN0aW9uIHwgdW5kZWZpbmVkO1xuICBjb25zdCBmcmFtZVNpemU6IFNpemUgPSB7IHdpZHRoOiBzaXplLndpZHRoLCBoZWlnaHQ6IHNpemUuaGVpZ2h0ICsgMSB9O1xuICBjb25zdCBpc0ZpcnN0RnJhbWUgPSBNYXRoLmFicygxMDAwIC8gZnBzIC0gbXMpIDwgMTtcbiAgLy8gR2F0ZSB3YWl0cyBhdCBtb3N0IDMwMG1zIGZvciBhIGRpZmZlcmluZyBmcmFtZTsgYSBwYWdlIHRoYXQgc3RheXMgYmxhbmsgaXMgYWNjZXB0ZWQgYXMtaXMuXG4gIGNvbnN0IGdhdGUgPSBpc0ZpcnN0RnJhbWUgPyBuZXcgRmlyc3RGcmFtZUdhdGUoeyB3aWR0aDogc2l6ZS53aWR0aCwgaGVpZ2h0OiBzaXplLmhlaWdodCwgd2luZG93TXM6IDMwMCB9KSA6IHVuZGVmaW5lZDtcbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgbmV3IFByb21pc2U8RnJhbWUgfCB1bmRlZmluZWQ+KChyZXNvbHZlKSA9PiB7XG4gICAgICBjb25zdCBoYW5kbGVyID0gKF9lOiB1bmtub3duLCBfZDogdW5rbm93biwgaW1hZ2U6IE5hdGl2ZUltYWdlKTogdm9pZCA9PiB7XG4gICAgICAgIGNvbnN0IGltYWdlU2l6ZSA9IGltYWdlLmdldFNpemUoKTtcbiAgICAgICAgaWYgKCFzaXplRXF1YWxzKGltYWdlU2l6ZSwgZnJhbWVTaXplKSkge1xuICAgICAgICAgIHJldHVybjsgLy8gbm90IGEgZnVsbCBvdXRwdXQgZnJhbWUgKGUuZy4gYSBwYXJ0aWFsIHJlcGFpbnQgc2xpdmVyKVxuICAgICAgICB9XG4gICAgICAgIC8vIERlY29kZSB0aGUgMi1yb3cgdGFpbCBmaXJzdDsgdGhlIGZ1bGwtZnJhbWUgcmVhZGJhY2sgKH44TUIgbWVtY3B5KSBpcyBwYWlkIG9ubHkgb24gYSBtYXRjaC5cbiAgICAgICAgY29uc3Qgc2xpdmVyID0gaW1hZ2UuY3JvcCh7IHg6IDAsIHk6IGZyYW1lU2l6ZS5oZWlnaHQgLSAyLCB3aWR0aDogRlJBTUVfU1lOQ19NQVJLRVJfV0lEVEgsIGhlaWdodDogMiB9KTtcbiAgICAgICAgY29uc3QgdHMgPSBkZWNvZGVTdGVnbyhzbGl2ZXIudG9CaXRtYXAoKSwgeyB3aWR0aDogRlJBTUVfU1lOQ19NQVJLRVJfV0lEVEgsIGhlaWdodDogMiB9KTtcbiAgICAgICAgaWYgKHRzID09PSB1bmRlZmluZWQgfHwgbXMgLSB0cyA+IDEpIHtcbiAgICAgICAgICByZXR1cm47IC8vIHN0ZWdvIHJvdyBzdGlsbCBiZWhpbmQgdGhlIHRhcmdldCB0aW1lc3RhbXBcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmcmFtZSA9IHsgdHMsIHBpeDogaW1hZ2UudG9CaXRtYXAoKS5zdWJhcnJheSgwLCBzaXplLndpZHRoICogc2l6ZS5oZWlnaHQgKiA0KSB9O1xuICAgICAgICAvLyBXaXRob3V0IHRoZSBnYXRlIGV2ZXJ5IG1hdGNoIGlzIGZpbmFsOyB3aXRoIGl0LCBvbmx5IGEgZnJhbWUgdGhhdCBkaWZmZXJzIGZyb20gdGhlIGJhc2VsaW5lIGxhbmRzLlxuICAgICAgICBpZiAoZ2F0ZSAmJiBnYXRlLmFjY2VwdChmcmFtZSwgcGVyZm9ybWFuY2Uubm93KCkpID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgd2luLndlYkNvbnRlbnRzLm9mZihcInBhaW50XCIsIGhhbmRsZXIpO1xuICAgICAgICByZXNvbHZlKGZyYW1lKTtcbiAgICAgIH07XG4gICAgICB3aW4ud2ViQ29udGVudHMub24oXCJwYWludFwiLCBoYW5kbGVyKTtcbiAgICAgIGNvbnN0IHRpbWVvdXQgPSBpc0ZpcnN0RnJhbWUgPyBmcHMgKiAxMCA6IGZwcyAqIDU7XG4gICAgICBjb25zdCByZWZyZXNoRnBzID0gTWF0aC5mbG9vcihpc0ZpcnN0RnJhbWUgPyBmcHMgOiBmcHMgLyAyKTtcbiAgICAgIGNsZWFyRGlydHlDaGVjayA9IHBlcmlvZGljYWwoYXN5bmMgKHN0dWNrKSA9PiB7XG4gICAgICAgIGlmIChzdHVjayA+PSB0aW1lb3V0KSB7XG4gICAgICAgICAgbG9nZ2VyLndhcm4oVEFHLCBgcGFpbnQgdGltZW91dCBAICR7bXN9YCk7XG4gICAgICAgICAgd2luLndlYkNvbnRlbnRzLm9mZihcInBhaW50XCIsIGhhbmRsZXIpO1xuICAgICAgICAgIHJlc29sdmUoZ2F0ZT8uYmFzZWxpbmUpO1xuICAgICAgICB9IGVsc2UgaWYgKGdhdGU/LmV4cGlyZWQocGVyZm9ybWFuY2Uubm93KCkpKSB7XG4gICAgICAgICAgLy8gTm8gZGlmZmVyaW5nIGZyYW1lIGluc2lkZSB0aGUgd2luZG93OiB0aGUgcGFnZSBzdGFydHMgYmxhbmssIGl0cyB0cnVlIGZpcnN0IGZyYW1lIGlzIHRoZSBiYXNlbGluZS5cbiAgICAgICAgICB3aW4ud2ViQ29udGVudHMub2ZmKFwicGFpbnRcIiwgaGFuZGxlcik7XG4gICAgICAgICAgcmVzb2x2ZShnYXRlLmJhc2VsaW5lKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdHVjayAlIHJlZnJlc2hGcHMgPT09IDApIHtcbiAgICAgICAgICBhd2FpdCByZWJ1aWxkRHJhd2FibGUod2luLndlYkNvbnRlbnRzLCBmcmFtZVNpemUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9LCAxMDAwIC8gZnBzKTtcbiAgICB9KTtcbiAgfSBmaW5hbGx5IHtcbiAgICBjbGVhckRpcnR5Q2hlY2s/LigpO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzaG9vdChvcHRpb25zOiBJUENSZW5kZXJPcHRpb25zKTogUHJvbWlzZTxJcGNEb25lUGF5bG9hZD4ge1xuICBjb25zdCB7IHNvdXJjZSwgZnBzLCB3aWR0aCwgaGVpZ2h0LCBkdXJhdGlvbiwgd2l0aEF1ZGlvLCBvdXRGaWxlcywgZGlzYWJsZUh3Q29kZWMsIHNpZ25hbCwgb25Qcm9ncmVzcyB9ID0gb3B0aW9ucztcbiAgaWYgKHdpdGhBdWRpbykge1xuICAgIGxvZ2dlci53YXJuKFRBRywgXCJhdWRpbyB3aWxsIGJlIGlnbm9yZWQgb24gdGhpcyBtb2RlXCIpO1xuICB9XG4gIGNvbnN0IHRha2VyID0gbmV3IFNjcmVlbnNob3RUYWtlcih7IG1hcmtzOiBvcHRpb25zLnNjcmVlbnNob3RzLCB3aWR0aCwgaGVpZ2h0LCBvdXRGaWxlcyB9KTtcblxuICBhd2FpdCB1c2luZyBfID0gdXNlRnJhbWVQcm90b2NvbChvcHRpb25zLnVzZUlubmVyUHJveHkpO1xuICBjb25zdCB0SW5pdCA9IHBlcmZvcm1hbmNlLm5vdygpO1xuICBjb25zdCB3aW5QID0gbG9hZFdpbmRvdyh7IHNvdXJjZSwgcmVuZGVyZXI6IG9wdGlvbnMsIHNpZ25hbCB9KTtcbiAgYXdhaXQgdXNpbmcgcGlwZWxpbmUgPSBhd2FpdCBFbmNvZGVyUGlwZWxpbmUuY3JlYXRlKHsgd2lkdGgsIGhlaWdodCwgZnBzLCBvdXRGaWxlcywgd2l0aEF1ZGlvLCBkaXNhYmxlSHdDb2RlYyB9KTtcbiAgY29uc3Qgd2luID0gYXdhaXQgd2luUDtcbiAgbG9nZ2VyLmRlYnVnKFRBRywgXCJpbml0IGRvbmU6XCIsIHsgc291cmNlLCBjb3N0OiBNYXRoLnJvdW5kKHBlcmZvcm1hbmNlLm5vdygpIC0gdEluaXQpIH0pO1xuXG4gIGNvbnN0IHRvdGFsID0gTWF0aC5jZWlsKGZwcyAqIGR1cmF0aW9uKTtcbiAgY29uc3QgZnJhbWVJbnRlcnZhbCA9IDEwMDAgLyBmcHM7XG5cbiAgbGV0IHdyaXR0ZW4gPSAwO1xuICBsZXQgcHJvZ3Jlc3MgPSAwO1xuICBsZXQgaGVsZCA9IDA7XG4gIGxldCBsYXN0RnJhbWU6IEZyYW1lIHwgdW5kZWZpbmVkO1xuICBsZXQgc2NyZWVuc2hvdHM6IHN0cmluZ1tdID0gW107XG4gIGNvbnN0IGJsYW5rU3RhdHMgPSBuZXcgQmxhbmtTdGF0cyh3aWR0aCwgaGVpZ2h0KTtcbiAgY29uc3QgZHJvcFN0YXRzID0gbmV3IERyb3BTdGF0cyhmcHMpO1xuICBjb25zdCBjZHAgPSB3aW4ud2ViQ29udGVudHMuZGVidWdnZXI7XG4gIGNvbnN0IG1haW4gPSB3aW4ud2ViQ29udGVudHMubWFpbkZyYW1lO1xuICBjb25zdCBpZnJhbWUgPSBtYWluLmZyYW1lc1swXTtcbiAgdHJ5IHtcbiAgICAvLyBDb21wb3NpdG9yL2NhcHR1cmUgY2FkZW5jZSBjYXAsIE5PVCBvdXRwdXQgZnBzOyBmcmFtZXMgYXJlIGRhbWFnZS1kcml2ZW4gcGVyIHZpcnR1YWwgc3RlcC5cbiAgICB3aW4ud2ViQ29udGVudHMuc2V0RnJhbWVSYXRlKFJFTkRFUl9GUFMpO1xuICAgIGF3YWl0IHBhdXNlVmlydHVhbFRpbWUoY2RwKTtcblxuICAgIC8vIFZpZGVvIG9wZW5zIGxhbmQgb24gd2FsbCB0aW1lIHdoaWxlIHRoZSBjYXB0dXJlIGNsb2NrIGlzIHZpcnR1YWw7IHByaW1lIG9uZSB0aWNrIGF0IDAgc28gZnJhbWUgMCdzIHN0ZWdvIG1hdGNoIGNvbXBvc2l0ZXMgdGhlIGZpcnN0IHBhaW50ZWQgZnJhbWUsIG5vdCB0aGUgcHJlLW9wZW4gZW1wdHkgY2FudmFzLlxuICAgIGlmICh0b3RhbCA+IDAgJiYgaWZyYW1lKSB7XG4gICAgICBhd2FpdCB0aWNrKHsgZnJhbWU6IGlmcmFtZSwgdGltZXN0YW1wTXM6IDAsIHNpZ25hbCB9KTtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBmcmFtZUlkID0gMDsgZnJhbWVJZCA8IHRvdGFsOyBmcmFtZUlkKyspIHtcbiAgICAgIHNpZ25hbD8udGhyb3dJZkFib3J0ZWQoKTtcbiAgICAgIGNvbnN0IGZyYW1lTXMgPSAoZnJhbWVJZCArIDEpICogZnJhbWVJbnRlcnZhbDtcblxuICAgICAgLy8gQXJtIGJlZm9yZSBkcmF3U3RlZ28gc28gdGhlIGNvbW1pdCBhY2sgY2FuJ3QgYmUgbWlzc2VkOyBicmFuY2ggY2F0Y2gga2VlcHMgYW4gZWFybHkgdGljayBmYWlsdXJlIGZyb20gb3JwaGFuaW5nIGl0LlxuICAgICAgY29uc3Qgc3dhcHBlZCA9IHdhaXRTdGVnb1RpY2sod2luLndlYkNvbnRlbnRzKTtcbiAgICAgIHN3YXBwZWQuY2F0Y2goKCkgPT4ge30pO1xuICAgICAgLy8gSW5kZXBlbmRlbnQgdGFyZ2V0cyAoaWZyYW1lIGNsb2NrIHZzIG1haW4tZnJhbWUgc3RlZ28gY2FudmFzKTogb25lIGNvbmN1cnJlbnQgaG9wIGluc3RlYWQgb2YgdHdvIHNlcmlhbCBvbmVzLlxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoW3RpY2soeyBmcmFtZTogaWZyYW1lLCB0aW1lc3RhbXBNczogZnJhbWVNcywgc2lnbmFsIH0pLCBkcmF3U3RlZ28od2luLndlYkNvbnRlbnRzLCBmcmFtZU1zKV0pO1xuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoW2FkdmFuY2VWaXJ0dWFsVGltZShjZHAsIGZyYW1lSW50ZXJ2YWwpLCBzd2FwcGVkXSk7XG4gICAgICBjb25zdCBwYWludGVkID0gYXdhaXQgcGFpbnQoeyBzb3VyY2UsIGZwcywgd2luLCBzaXplOiB7IHdpZHRoLCBoZWlnaHQgfSwgbXM6IGZyYW1lTXMgfSk7XG4gICAgICBpZiAocGFpbnRlZCkge1xuICAgICAgICBoZWxkID0gMDtcbiAgICAgICAgZHJvcFN0YXRzLndyb3RlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBoZWxkKys7XG4gICAgICAgIGRyb3BTdGF0cy5kcm9wcGVkKDEpO1xuICAgICAgfVxuICAgICAgY29uc3QgZnJhbWUgPSBwYWludGVkID8/IGxhc3RGcmFtZTtcbiAgICAgIGlmICghZnJhbWUgfHwgaGVsZCA+PSBmcHMpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGByZW5kZXJlciBleGF1c3RlZCBAICR7ZnJhbWVNc31gKTtcbiAgICAgIH1cbiAgICAgIC8vIFRoZSBjb21wb3NpdG9yIG1heSBwYWludCBxdWlja2VyIHRoYW4gdXMsIG9yIHN0dWNrLCBzbyB3ZSBhdCBsZWFzdCBwYWludCBvbmNlXG4gICAgICBjb25zdCByZXBlYXQgPSBNYXRoLm1heCgxLCBNYXRoLmNlaWwoZnJhbWUudHMgLyBmcmFtZUludGVydmFsIC0gZnJhbWVJZCkpO1xuICAgICAgbGFzdEZyYW1lID0gZnJhbWU7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlcGVhdDsgaSsrKSB7XG4gICAgICAgIHRha2VyLmNhcHR1cmUoZnJhbWVNcywgZnJhbWUucGl4KTtcbiAgICAgICAgYmxhbmtTdGF0cy5zYW1wbGUoZnJhbWUucGl4KTtcbiAgICAgICAgLy8gQXdhaXRlZDogdGhlIGxpbWl0ZXIgcXVldWVzIHdpdGhvdXQgYm91bmQsIHNvIGFuIGVuY29kZXIgc2xvd2VyIHRoYW4gY2FwdHVyZSBwaW5zIG9uZSBmdWxsIEJHUkEgZnJhbWUgcGVyIGJhY2tsb2cgZW50cnkuXG4gICAgICAgIGF3YWl0IHBpcGVsaW5lLmVuY29kZUJHUkEoZnJhbWUucGl4KTtcbiAgICAgICAgd3JpdHRlbisrO1xuICAgICAgfVxuICAgICAgY29uc3QgbmV3UHJvZ3Jlc3MgPSBNYXRoLmZsb29yKCh3cml0dGVuIC8gdG90YWwpICogMTAwKTtcbiAgICAgIGlmIChuZXdQcm9ncmVzcyAhPT0gcHJvZ3Jlc3MpIHtcbiAgICAgICAgcHJvZ3Jlc3MgPSBuZXdQcm9ncmVzcztcbiAgICAgICAgb25Qcm9ncmVzcyhwcm9ncmVzcyk7XG4gICAgICB9XG4gICAgfVxuICB9IGZpbmFsbHkge1xuICAgIGF3YWl0IGRpc3Bvc2VXaW5kb3cod2luKTtcbiAgICBhd2FpdCBwaXBlbGluZS5maW5pc2goKTtcbiAgICBzY3JlZW5zaG90cyA9IGF3YWl0IHRha2VyLmZpbmlzaChsYXN0RnJhbWU/LnBpeCk7XG4gIH1cblxuICBpZiAod3JpdHRlbiA9PT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIm5vIGZyYW1lcyBjYXB0dXJlZFwiKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBibGFuayA9IGJsYW5rU3RhdHMuZmluYWxpemUoKTtcbiAgICBpZiAoYmxhbmsgPj0gQkxBTktfV0FSTl9SQVRJTykge1xuICAgICAgbG9nZ2VyLndhcm4oVEFHLCBgJHtzb3VyY2V9IGJsYW5rLWZyYW1lIHJhdGlvICR7TWF0aC5yb3VuZChibGFuayAqIDEwMCl9JSDigJQgcG9zc2libGUgd2hpdGUvYmxhbmsgc2NyZWVuYCk7XG4gICAgfVxuICAgIGNvbnN0IHsgamFuayB9ID0gZHJvcFN0YXRzLmZpbmFsaXplKCk7XG4gICAgaWYgKGphbmsgPj0gSkFOS19XQVJOX1NDT1JFKSB7XG4gICAgICBsb2dnZXIud2FybihUQUcsIGAke3NvdXJjZX0gamFuayBzY29yZSAke2phbmsudG9GaXhlZCgyKX0g4oCUIGZyYW1lcyBoZWxkIHBhc3QgcGFpbnQgdGltZW91dGApO1xuICAgIH1cbiAgICByZXR1cm4geyB3cml0dGVuLCBvdXRGaWxlcywgYmxhbmssIGphbmssIHNjcmVlbnNob3RzIH07XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDEvMzAuXG5cbmltcG9ydCB7IG9rIH0gZnJvbSBcIm5vZGU6YXNzZXJ0XCI7XG5pbXBvcnQgeyBta2RpciB9IGZyb20gXCJub2RlOmZzL3Byb21pc2VzXCI7XG5pbXBvcnQgeyBkaXJuYW1lIH0gZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHsgYXBwLCBNZW51IH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBzdGFydEVsZWN0cm9uQ3Jhc2hSZXBvcnRlciB9IGZyb20gXCIuL2Jhc2UvY3Jhc2hcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuL2Jhc2UvbG9nZ2luZ1wiO1xuaW1wb3J0IHsgbWFrZUNMSSB9IGZyb20gXCIuL2NvbW1vblwiO1xuaW1wb3J0IHsgdHlwZSBJcGNNc2csIElwY01zZ1R5cGUsIElwY1dyaXRlciB9IGZyb20gXCIuL3JlbmRlcmVyL2lwY1wiO1xuaW1wb3J0IHsgc2V0dXBQdXBQcm90b2NvbCB9IGZyb20gXCIuL3JlbmRlcmVyL3Byb3RvY29sXCI7XG5pbXBvcnQgeyByZW5kZXIgfSBmcm9tIFwiLi9yZW5kZXJlci9yZW5kZXJcIjtcbmltcG9ydCB7IHdpdGhSZXJlbmRlciB9IGZyb20gXCIuL3JlbmRlcmVyL3JlcmVuZGVyXCI7XG5pbXBvcnQgeyBzaG9vdCB9IGZyb20gXCIuL3JlbmRlcmVyL3Nob290XCI7XG5cbmNvbnN0IFRBRyA9IFwiW0FwcF1cIjtcblxucHJvY2Vzcy5lbnZbXCJFTEVDVFJPTl9ESVNBQkxFX1NFQ1VSSVRZX1dBUk5JTkdTXCJdID0gXCIxXCI7XG5cbmZ1bmN0aW9uIHByaW50RmVhdHVyZXMoKSB7XG4gIGxvZ2dlci5kZWJ1ZyhUQUcsIFwiZ3B1IGZlYXR1cmVzOlwiLCBhcHAuZ2V0R1BVRmVhdHVyZVN0YXR1cygpKTtcbn1cblxuY29uc3QgY3RybCA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbmxldCBleGl0aW5nID0gZmFsc2U7XG5cbnN0YXJ0RWxlY3Ryb25DcmFzaFJlcG9ydGVyKCk7XG5NZW51LnNldEFwcGxpY2F0aW9uTWVudShudWxsKTtcbmFwcC5kb2NrPy5oaWRlKCk7XG5hcHAub24oXCJ3aW5kb3ctYWxsLWNsb3NlZFwiLCAoKSA9PiB7fSk7XG5hcHAub24oXCJncHUtaW5mby11cGRhdGVcIiwgcHJpbnRGZWF0dXJlcyk7XG5hcHAub24oXCJiZWZvcmUtcXVpdFwiLCAoZSkgPT4gIWV4aXRpbmcgJiYgZS5wcmV2ZW50RGVmYXVsdCgpKTtcbmFwcC5vbihcIndpbGwtcXVpdFwiLCAoZSkgPT4gIWV4aXRpbmcgJiYgZS5wcmV2ZW50RGVmYXVsdCgpKTtcblxub2socHJvY2Vzcy5zZW5kLCBcImlwYyBjaGFubmVsIG1pc3Npbmcg4oCUIHNwYXduIHdpdGggc3RkaW9bM109J2lwYydcIik7XG5wcm9jZXNzLm9uY2UoXCJkaXNjb25uZWN0XCIsICgpID0+IGN0cmwuYWJvcnQoXCJkaXNjb25uZWN0XCIpKTtcbnByb2Nlc3Mub24oXCJtZXNzYWdlXCIsIChyYXcpID0+IHtcbiAgY29uc3QgbXNnID0gcmF3IGFzIElwY01zZztcbiAgaWYgKG1zZy50eXBlID09PSBJcGNNc2dUeXBlLkNhbmNlbCkge1xuICAgIGN0cmwuYWJvcnQobXNnLnJlYXNvbik7XG4gIH1cbn0pO1xuXG5tYWtlQ0xJKHtcbiAgbmFtZTogXCJhcHBcIixcbiAgcnVuOiBhc3luYyAoc291cmNlLCBvcHRpb25zKSA9PiB7XG4gICAgY29uc3QgaXBjID0gbmV3IElwY1dyaXRlcigpO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBhcHAud2hlblJlYWR5KCk7XG4gICAgICBzZXR1cFB1cFByb3RvY29sKCk7XG4gICAgICBwcmludEZlYXR1cmVzKCk7XG4gICAgICBmb3IgKGNvbnN0IG91dCBvZiBvcHRpb25zLm91dEZpbGVzKSB7XG4gICAgICAgIGF3YWl0IG1rZGlyKGRpcm5hbWUob3V0KSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICB9XG4gICAgICBjb25zdCBhY3Rpb24gPSBvcHRpb25zLmRldGVybWluaXN0aWMgPyBzaG9vdCA6IHJlbmRlcjtcbiAgICAgIGN0cmwuc2lnbmFsLnRocm93SWZBYm9ydGVkKCk7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB3aXRoUmVyZW5kZXIoY3RybC5zaWduYWwsICgpID0+XG4gICAgICAgIGFjdGlvbih7XG4gICAgICAgICAgc291cmNlLFxuICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgc2lnbmFsOiBjdHJsLnNpZ25hbCxcbiAgICAgICAgICBvblByb2dyZXNzOiAocCkgPT4gaXBjLndyaXRlUHJvZ3Jlc3MocCksXG4gICAgICAgICAgb25Db25zb2xlOiAobCwgbSkgPT4gaXBjLndyaXRlQ29uc29sZShsLCBtKSxcbiAgICAgICAgfSksXG4gICAgICApO1xuICAgICAgYXdhaXQgaXBjLndyaXRlRG9uZShyZXN1bHQpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnN0IGVycm9yID0gZSBhcyBFcnJvcjtcbiAgICAgIGNvbnN0IG0gPSBlcnJvci5zdGFjayA/PyBlcnJvci5tZXNzYWdlID8/IFN0cmluZyhlID8/IFwidW5rbm93biBlcnJvclwiKTtcbiAgICAgIGF3YWl0IGlwYy53cml0ZUVycm9yKG0pO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBleGl0aW5nID0gdHJ1ZTtcbiAgICAgIGFwcC5leGl0KCk7XG4gICAgfVxuICB9LFxufSk7XG4iXX0=
|
|
96
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL3RzdXBAOC41LjErNTc2NmViYjcyNmRlMWFiYi9ub2RlX21vZHVsZXMvdHN1cC9hc3NldHMvY2pzX3NoaW1zLmpzIiwiLi4vc3JjL2Jhc2UvZW52LnRzIiwiLi4vc3JjL2Jhc2UvcGFyc2VyLnRzIiwiLi4vc3JjL2Jhc2UvY29uc3RhbnRzLnRzIiwiLi4vc3JjL2Jhc2UvbG9nZ2luZy50cyIsIi4uL3NyYy9iYXNlL2NyYXNoLnRzIiwiLi4vc3JjL2Jhc2Uvbm9lcnIudHMiLCIuLi9zcmMvYmFzZS9wcm9jZXNzLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3NjaGVtYS50cyIsIi4uL3NyYy9jb21tb24udHMiLCIuLi9zcmMvcmVuZGVyZXIvaXBjLnRzIiwiLi4vc3JjL2Jhc2UvdGltaW5nLnRzIiwiLi4vc3JjL2Jhc2UvY2RwLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3N0ZWdvLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3Byb3RvY29sLnRzIiwiLi4vc3JjL2Jhc2UvbGltaXRlci50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvbWlzYy50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvY29kZWMudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL2F1ZGlvLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9oZXZjX2FscGhhL2JpdC50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvaGV2Y19hbHBoYS9uYWwudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL2hldmNfYWxwaGEvYWxwaGFfZGFyd2luLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9oZXZjX2FscGhhL3Zwcy50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvaGV2Y19hbHBoYS9hbHBoYS50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvaGV2Y19hbHBoYS9kdWFsX2xheWVyX211eC50cyIsIi4uL3NyYy9iYXNlL2VuY29kZXIvaGV2Y19hbHBoYS9wYXJzZXIudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL2hldmNfYWxwaGEvbnZlbmMudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL3ZpZGVvLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci92aWRlb3Rvb2xib3gudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL2ZhY3RvcnkudHMiLCIuLi9zcmMvYmFzZS9lbmNvZGVyL211eGVyLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9zaW5rLnRzIiwiLi4vc3JjL2Jhc2UvZW5jb2Rlci9waXBlbGluZS50cyIsIi4uL3NyYy9iYXNlL2ltYWdlLnRzIiwiLi4vc3JjL2Jhc2UvcXVhbGl0eS9ibGFuay50cyIsIi4uL3NyYy9iYXNlL3F1YWxpdHkvZHJvcC50cyIsIi4uL3NyYy9yZW5kZXJlci9hdWRpby50cyIsIi4uL3NyYy9yZW5kZXJlci9zY3JlZW5zaG90LnRzIiwiLi4vc3JjL2Jhc2UvcmV0cnkudHMiLCIuLi9zcmMvcnVudGltZS93b3JsZC50cyIsIi4uL3NyYy9iYXNlL3dhaXRhYmxlX2V2ZW50LnRzIiwiLi4vc3JjL3JlbmRlcmVyL25ldHdvcmsudHMiLCIuLi9zcmMvcmVuZGVyZXIvd2luZG93LnRzIiwiLi4vc3JjL3JlbmRlcmVyL3JlbmRlci50cyIsIi4uL3NyYy9yZW5kZXJlci9yZXJlbmRlci50cyIsIi4uL3NyYy9yZW5kZXJlci9mcmFtZV9nYXRlLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3ZpZGVvL2FkdmFuY2UudHMiLCIuLi9zcmMvcmVuZGVyZXIvdGljay50cyIsIi4uL3NyYy9yZW5kZXJlci92aWRlby9vcGVuLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3ZpZGVvL2RlY29kZS50cyIsIi4uL3NyYy9yZW5kZXJlci92aWRlby9kZWNvZGVfc2Vzc2lvbi50cyIsIi4uL3NyYy9yZW5kZXJlci92aWRlby9wcm9iZS50cyIsIi4uL3NyYy9yZW5kZXJlci92aWRlby9zdHViLnRzIiwiLi4vc3JjL3JlbmRlcmVyL3ZpZGVvL2ZyYW1lX3NlcnZlci50cyIsIi4uL3NyYy9yZW5kZXJlci92aWRlby9wcm90b2NvbC50cyIsIi4uL3NyYy9yZW5kZXJlci9zaG9vdC50cyIsIi4uL3NyYy9hcHAudHMiXSwibmFtZXMiOlsiZ2V0SW1wb3J0TWV0YVVybCIsImltcG9ydE1ldGFVcmwiLCJwZW52IiwibmFtZSIsInBhcnNlciIsImRlZmF1bHRWYWx1ZSIsInBhcnNlTnVtYmVyIiwieCIsIm51bSIsInBhcnNlU3RyaW5nIiwicGFyc2VBcnJheSIsIml0ZW0iLCJzIiwicmVxdWlyZSIsImNyZWF0ZVJlcXVpcmUiLCJwdXBMb2dMZXZlbCIsInB1cFBrZ1Jvb3QiLCJkaXJuYW1lIiwiam9pbiIsInB1cFByZWxvYWQiLCJERUJVRyIsIklORk8iLCJXQVJOIiwiRVJST1IiLCJGQVRBTCIsInN0YWNrSG9vayIsInRhcmdldCIsIl9jb250ZXh0IiwibWVzc2FnZXMiLCJwcm9jZXNzZWQiLCJtc2ciLCJfZmF0YWxfZGVjIiwiX2Vycm9yX2RlYyIsIl93YXJuX2RlYyIsIl9pbmZvX2RlYyIsIl9kZWJ1Z19kZWMiLCJfaW5pdCIsIkxvZ2dlciIsIl9sZXZlbCIsIl9fcnVuSW5pdGlhbGl6ZXJzIiwiX19wdWJsaWNGaWVsZCIsInZhbHVlIiwiZGVidWciLCJpbmZvIiwid2FybiIsImVycm9yIiwibHYiLCJtZXNzYWdlIiwicHJvYyIsInJlc29sdmUiLCJyZWplY3QiLCJmYXRhbCIsImRpc3BhdGNoIiwiZGF0YSIsImVyciIsImNvZGUiLCJzaWduYWwiLCJyZWFzb24iLCJfX2RlY29yYXRvclN0YXJ0IiwiX19kZWNvcmF0ZUVsZW1lbnQiLCJfX2RlY29yYXRvck1ldGFkYXRhIiwibG9nZ2VyIiwiTG9nIiwibGV2ZWwiLCJBVl9MT0dfRVJST1IiLCJBVl9MT0dfV0FSTklORyIsIlRBRyIsInN0YXJ0RWxlY3Ryb25DcmFzaFJlcG9ydGVyIiwiZHVtcERpciIsImFwcCIsIm1rZGlyU3luYyIsImNyYXNoUmVwb3J0ZXIiLCJub2VyciIsImZuIiwiYXJncyIsInJldCIsIlBVUF9BUkdTX0tFWSIsInBhcmdzIiwiYXJndiIsInByaXYiLCJhcmciLCJzdGFnZWQiLCJyZWFkRmlsZVN5bmMiLCJERUZBVUxUX1dJRFRIIiwiREVGQVVMVF9IRUlHSFQiLCJERUZBVUxUX0ZQUyIsIkRFRkFVTFRfRFVSQVRJT04iLCJERUZBVUxUX1dJTkRPV19USU1FT1VUIiwiREVGQVVMVF9PVVRfRklMRVMiLCJyZW5kZXJTY2hlbWEiLCJ6IiwiZGVmYXVsdFJlbmRlck9wdGlvbnMiLCJub3JtYWxpemVTb3VyY2UiLCJhYnMiLCJyZWFscGF0aFN5bmMiLCJtYWtlQ0xJIiwib3B0aW9ucyIsInNoYXBlIiwiZCIsInByb2dyYW0iLCJzb3VyY2UiLCJvcHRzIiwiZSIsIklwY1dyaXRlciIsInBheWxvYWQiLCJzbGVlcCIsIm1zIiwid2l0aFRpbWVvdXQiLCJwIiwibGFiZWwiLCJ0aW1lciIsImFib3J0YWJsZSIsIm9uQWJvcnQiLCJwZXJpb2RpY2FsIiwiY2FsbGJhY2siLCJ0b2tlbiIsImNsb3NlZCIsInRpY2siLCJjb3VudCIsIm5leHQiLCJDRFBfVElNRU9VVF9NUyIsInNlbmQiLCJjZHAiLCJtZXRob2QiLCJwYXJhbXMiLCJldmFsSW4iLCJleHByZXNzaW9uIiwiYWR2YW5jZVZpcnR1YWxUaW1lIiwiYnVkZ2V0IiwidGltZW91dCIsImhhbmRsZXIiLCJfIiwicGF1c2VWaXJ0dWFsVGltZSIsInJlYnVpbGREcmF3YWJsZSIsIndlYiIsInNpemUiLCJGUkFNRV9TWU5DX01BUktFUl9XSURUSCIsIlNURUdPX1RJQ0tfQ0hBTk5FTCIsImJ1aWxkU3RlZ29IVE1MIiwidGFyZ2V0VVJMIiwid2lkdGgiLCJoZWlnaHQiLCJkZWNvZGVTdGVnbyIsImJpdG1hcCIsIm1hcmtlclJvdyIsInRpbWVzdGFtcCIsImkiLCJwaXhlbElkeCIsImJpdCIsInN0YXJ0U3RlZ28iLCJkcmF3U3RlZ28iLCJ3YyIsImV4cGVjdGVkIiwid2FpdFN0ZWdvVGljayIsInN3YXBwZWQiLCJyIiwiUFVQX1NDSEVNRSIsIkZSQU1FX1NDSEVNRSIsIlBSSVZJTEVHRURfUFJJVklMRUdFUyIsInByb3RvY29sIiwic2V0dXBQdXBQcm90b2NvbCIsInJlcSIsInVybCIsInNyYyIsImh0bWwiLCJjcmVhdGVTdGVnb1VSTCIsIkNvbmN1cnJlbmN5TGltaXRlciIsIm1heENvbmN1cnJlbmN5IiwidiIsImtlZXAiLCJlbnRyeSIsIkZGX0VOQ09ERVJfTElCVlBYX1ZQOSIsIm9wZW5WaWRlb0N0eCIsIl9zdGFjayIsImN0eCIsIkNvZGVjQ29udGV4dCIsInN0YWNrIiwiX191c2luZyIsIlJhdGlvbmFsIiwiQVZfQ09ERUNfRkxBR19HTE9CQUxfSEVBREVSIiwiayIsIkZGbXBlZ0Vycm9yIiwiX2Vycm9yIiwiX2hhc0Vycm9yIiwiX19jYWxsRGlzcG9zZSIsIm1ha2VGcmFtZSIsInBpeEZtdCIsImZyYW1lIiwiRnJhbWUiLCJtYWtlUGFja2V0IiwicGt0IiwiUGFja2V0IiwiZHJhaW5QYWNrZXRzIiwic3RyZWFtIiwibXV4ZXIiLCJBVkVSUk9SX0VBR0FJTiIsIkFWRVJST1JfRU9GIiwiQ29kZWNTdGF0ZSIsIl9Db2RlY1N0YXRlIiwiY29kZWMiLCJDb2RlYyIsIkZGX0RFQ09ERVJfUE5HIiwib2siLCJwbmciLCJBVl9QSVhfRk1UX0JHUkEiLCJBVl9QSVhfRk1UX1lVVkE0MjBQIiwicG5nRGF0YSIsInN3cyIsIlNvZnR3YXJlU2NhbGVDb250ZXh0IiwiZm10IiwiU1dTX0JJTElORUFSIiwiU0FNUExFX0ZNVF9OQU1FIiwiQVZfU0FNUExFX0ZNVF9GTFQiLCJBVl9TQU1QTEVfRk1UX0ZMVFAiLCJBdWRpb0VuY29kZXIiLCJfQXVkaW9FbmNvZGVyIiwib3V0Rm10IiwiQVZfQ0hBTk5FTF9MQVlPVVRfU1RFUkVPIiwiaW5TYW1wbGVSYXRlIiwiZ3JhcGgiLCJGaWx0ZXJHcmFwaCIsImFidWZmZXIiLCJGaWx0ZXIiLCJidWZTcmMiLCJhYnVmZmVyc2luayIsImJ1ZlNpbmsiLCJmbXROYW1lIiwiZmlsdGVyRGVzYyIsIm91dHB1dHMiLCJGaWx0ZXJJbk91dCIsImlucHV0cyIsInBjbSIsIm5TYW1wbGVzIiwicGFja0JpdHMiLCJiaXRzIiwiYnVmIiwiYnl0ZSIsImIiLCJCaXRXcml0ZXIiLCJ2YWwiLCJuIiwibGVuIiwicGFkIiwic3RhcnQiLCJCaXRSZWFkZXIiLCJ6ZXJvcyIsIkFOTkVYX0JfU1RBUlRfQ09ERSIsIk5BTF9CTEFfV19MUCIsIk5BTF9SU1ZfSVJBUF9WQ0wyMyIsIk5BTF9WUFMiLCJOQUxfU1BTIiwiTkFMX1BQUyIsIk5BTF9TRUlfUFJFRklYIiwicGFyc2VOYWxUeXBlIiwiaGVhZGVyMCIsImhlYWRlcjEiLCJ0eXBlIiwibGF5ZXJJZCIsInRlbXBvcmFsSWQiLCJlbmNvZGVOYWxIZWFkZXIiLCJieXRlMCIsImJ5dGUxIiwic3BsaXROYWxVbml0cyIsImJpdHN0cmVhbSIsIm5hbHMiLCJzY0xlbiIsIm5hbFN0YXJ0IiwibmFsRW5kIiwiaiIsInJld3JpdGVOYWxMYXllcklkIiwibmFsIiwib3V0IiwiYjAiLCJiMSIsInJlbW92ZUVtdWxhdGlvblByZXZlbnRpb24iLCJhZGRFbXVsYXRpb25QcmV2ZW50aW9uIiwiVlBTX1BUTF9CSVQiLCJTUFNfUFRMX0JJVCIsIlBUTF9USUVSX0JJVCIsIlBUTF9DT01QQVQyX0JJVCIsIlNMSUNFX1RZUEVfQiIsIlNMSUNFX1RZUEVfUCIsInNldEJpdCIsImJpdE9mZnNldCIsIm1hc2siLCJjdXIiLCJwYXRjaFB0bCIsIm5hbERhdGEiLCJwdGxTdGFydEJpdCIsInJic3AiLCJwYXRjaEhldmNBbHBoYVB0bCIsImNodW5rcyIsInJld3JpdGVPbmVVZSIsIm5hbEluIiwibmV3VmFsIiwiYnIiLCJidyIsInJld3JpdGVUd29VZSIsIm5ld1ZhbDEiLCJuZXdWYWwyIiwicmV3cml0ZUFscGhhU3BzIiwic3BzIiwiU1BTX1NFUV9JRF9CSVQiLCJyZXdyaXRlQWxwaGFQcHMiLCJwcHMiLCJyZWFkU2UiLCJ1ZSIsInBhcnNlSW5saW5lU3RSZWZQaWNTZXQiLCJudW1EZWx0YVBvY3NTZXQwIiwiZGVsdGFJZHhNaW51czEiLCJudW1OZWciLCJudW1Qb3MiLCJwYXJzZUhlYWRlclRvQWxpZ25tZW50IiwibmFsVHlwZSIsImNmZyIsImlzSXJhcCIsInNsaWNlVHlwZSIsInJld3JpdGVBbHBoYVNsaWNlSGVhZGVyIiwic2xpY2UiLCJwcm9iZSIsIkIiLCJvbGRBbGlnbkJpdHMiLCJzbGljZURhdGFCeXRlT2Zmc2V0IiwiZXh0cmFjdFBUTCIsInZwc0RhdGEiLCJtYXhTdWJMYXllcnNNaW51czEiLCJwdGxTdGFydCIsIndyaXRlQmFzZVZQUyIsInB0bCIsIndyaXRlVlBTRXh0ZW5zaW9uIiwiYnVpbGRBbHBoYVZQUyIsImV4dHJhY3RBbHBoYVRvWXV2NDIwcEJ1ZmZlciIsImJncmFGcmFtZSIsInNyY0xzIiwidyIsImgiLCJ5U2l6ZSIsInNyYzMyIiwieSIsInJvd0Jhc2UiLCJkc3RCYXNlIiwicmV3cml0ZUFscGhhUGFyYW1TZXQiLCJidWlsZFVuaWZpZWRFeHRyYWRhdGEiLCJiYXNlRXh0cmFkYXRhIiwiYWxwaGFFeHRyYWRhdGEiLCJiYXNlTmFscyIsImFscGhhTmFscyIsImFscGhhQnlUeXBlIiwiYXJyIiwiZW1pdHRlZCIsImFscGhhTmFsIiwiYURhdGEiLCJidWlsZEFscGhhQ2hhbm5lbEluZm9TRUkiLCJoMCIsImgxIiwid3JpdGVCaXRzIiwiaW50ZXJsZWF2ZUFjY2Vzc1VuaXRzIiwiRHVhbExheWVyTXV4IiwiYmFzZUN0eCIsImFscGhhQ3R4IiwiYmFzZVBrdCIsImFscGhhUGt0IiwidGFnIiwiYmFzZSIsImFscGhhIiwiaGV2Y0NmZyIsImludGVybGVhdmVkIiwiZmFpbCIsImZpZWxkIiwiZ290Iiwic2tpcFB0bCIsIm1heFN1YkxheWVycyIsInN1YlByb2ZpbGVQcmVzZW50Iiwic3ViTGV2ZWxQcmVzZW50IiwicGFyc2VTcHMiLCJzcHNSYnNwIiwiY2hyb21hRm9ybWF0IiwibG9nMk1heFBvY0xzYiIsIm9yZGVyQ291bnQiLCJzYW9FbmFibGVkIiwibnVtU3RScHMiLCJsb25nVGVybVJlZlBpY3NQcmVzZW50Iiwic3BzVGVtcG9yYWxNdnBFbmFibGVkIiwicGFyc2VQcHMiLCJwcHNSYnNwIiwibnVtRXh0cmFTbGljZUhlYWRlckJpdHMiLCJjYWJhY0luaXRQcmVzZW50IiwicHBzTG9vcEZpbHRlckFjcm9zc1NsaWNlc0VuYWJsZWQiLCJkZWJsb2NraW5nQ29udHJvbFByZXNlbnQiLCJzbGljZURlYmxvY2tpbmdEaXNhYmxlZE92ZXJyaWRlIiwicGFyc2VOdmVuY0hldmNDb25maWciLCJleHRyYWRhdGEiLCJOdmVuY0R1YWxMYXllckVuY29kZXIiLCJfTnZlbmNEdWFsTGF5ZXJFbmNvZGVyIiwiZnBzIiwiYml0cmF0ZSIsIkZGX0VOQ09ERVJfSEVWQ19OVkVOQyIsIm52ZW5jT3B0cyIsImNvbW1vbiIsIkFWX1BJWF9GTVRfWVVWNDIwUCIsInVuaWZpZWQiLCJjaHJvbWFTaXplIiwiYWxwaGFCdWYiLCJhbHBoYVN3RnJhbWUiLCJwdHMiLCJkZXN5bmMiLCJWaWRlb0VuY29kZXIiLCJfVmlkZW9FbmNvZGVyIiwiY29kZWNOYW1lIiwiY29kZWNUYWciLCJjb2RlY09wdHMiLCJyZXN0IiwiVmlkZW9Ub29sYm94RW5jb2RlciIsIl9WaWRlb1Rvb2xib3hFbmNvZGVyIiwiaHciLCJBVkNPTF9SQU5HRV9KUEVHIiwiV0VCTV9WUDlfT1BUUyIsIk1QNF9BVURJTyIsIkZGX0VOQ09ERVJfQUFDIiwiV0VCTV9BVURJTyIsIkZGX0VOQ09ERVJfTElCT1BVUyIsImNyZWF0ZU1wNFZpZGVvIiwiZGlzYWJsZUh3Q29kZWMiLCJzaGFyZWRIdyIsImNyZWF0ZUh3VmlkZW9FbmNvZGVyIiwiY3JlYXRlV2VibVZpZGVvIiwiY3JlYXRlQXVkaW8iLCJraW5kIiwiSGFyZHdhcmVDb250ZXh0Iiwib3duc0h3IiwiRkZfSFdERVZJQ0VfVFlQRV9WSURFT1RPT0xCT1giLCJGRl9IV0RFVklDRV9UWVBFX0NVREEiLCJ2aWRlbyIsIkZGX0VOQ09ERVJfTElCWDI2NSIsIkZvcm1hdE11eGVyIiwib3V0UGF0aCIsImZvcm1hdE5hbWUiLCJGb3JtYXRDb250ZXh0IiwiY29kZWNDdHgiLCJEaWN0aW9uYXJ5IiwiT3V0cHV0U2luayIsIl9PdXRwdXRTaW5rIiwicGF0aCIsImxvd2VyIiwic2V0dXAiLCJhdWRpbyIsIl9wcm9taXNlIiwic2FtcGxlUmF0ZSIsImh3VmlkZW8iLCJEUkFJTl9USU1FT1VUX01TIiwiRU5DT0RFX1RJTUVPVVRfTVMiLCJFbmNvZGVyUGlwZWxpbmUiLCJfRW5jb2RlclBpcGVsaW5lIiwib3V0RmlsZXMiLCJ3aXRoQXVkaW8iLCJraW5kcyIsIm5lZWRzTXA0SHciLCJpc0h3QWxwaGFDYXBhYmxlIiwic2lua3MiLCJzaW5rIiwiaW5wdXQiLCJzaXplRXF1YWxzIiwiYSIsInF1YW50aXplIiwiYmdyYSIsIm1vZGFsUGl4ZWwiLCJzdGVwWCIsInN0ZXBZIiwiY291bnRzIiwiZmlyc3RJZHgiLCJiZXN0IiwiYmVzdENvdW50Iiwia2V5IiwiaXNCbGFua0ZyYW1lIiwibSIsIm1iIiwibWciLCJtciIsIm1hIiwiY29udGVudCIsIm9mZnNldCIsIkJsYW5rU3RhdHMiLCJEcm9wU3RhdHMiLCJ0b3RhbERyb3BwZWQiLCJsb2NhbFN1bSIsIm1heEJ1cnN0IiwiYnVyc3QiLCJwZXJjZXB0aWJsZSIsImciLCJsIiwic2NvcmUiLCJBVURJT19NRVRBX0NIQU5ORUwiLCJBVURJT19DSFVOS19DSEFOTkVMIiwiYXR0YWNoQXVkaW9MaXN0ZW5lcnMiLCJlbmNvZGVyIiwiZ2V0VmlkZW9UaW1lTXMiLCJvbkVycm9yIiwib25NZXRhIiwiX2UiLCJzdGFydE1zIiwic2lsZW5jZVNhbXBsZXMiLCJvbkNodW5rIiwiYnVmZmVyIiwiYnl0ZXMiLCJTY3JlZW5zaG90VGFrZXIiLCJfcyIsImRpciIsInNlYyIsImluZGV4IiwiY3VycmVudFRpbWVNcyIsImZpbmFsQmdyYSIsIm5hdGl2ZUltYWdlIiwid3JpdGVGaWxlIiwidXNlUmV0cnkiLCJtYXhBdHRlbXB0cyIsInRpbWVvdXRFcnJvciIsImF0dGVtcHQiLCJwcm9taXNlcyIsInNldFRpbWVvdXQiLCJXT1JMRF9BUkciLCJBVURJT19BUkciLCJXYWl0YWJsZUV2ZW50IiwibWFwIiwidGFyZ2V0cyIsIkxPQ0FMX1NDSEVNRVMiLCJpc0xvY2FsU2NoZW1lIiwiaXNQcm94eVRhcmdldCIsIlVSTCIsInByb3hpZWRVcmwiLCJwYXJzZWQiLCJzZXRJbnRlcmNlcHRvciIsIndpbmRvdyIsInVzZUlubmVyUHJveHkiLCJzdHViTWVkaWEiLCJsaW1pdGVyIiwiZXZlbnRzIiwid2FpdCIsIm9uVGltZW91dCIsImV2ZW50IiwiZGV0YWlscyIsInByb3hpZWQiLCJyZXNwb25zZUhlYWRlcnMiLCJyZXNvdXJjZVR5cGUiLCJ1bnNldEludGVyY2VwdG9yIiwiVElNRU9VVF9FUlJPUiIsIkNPTlNPTEVfSUdOT1JFUyIsIndhaXRGb3JGaW5pc2giLCJ3aW4iLCJhY3Rpb24iLCJ0aW1lb3V0TXMiLCJ0b2xlcmFudCIsImRvbVJlYWR5IiwiZG9uZSIsImRlc2MiLCJfcGF0aCIsImV4aXRDb2RlIiwiZGlzcG9zZVdpbmRvdyIsIldPUkxEX1NDUklQVFMiLCJwaWNrV29ybGRTY3JpcHQiLCJyZW5kZXJlciIsIm1vZGUiLCJvcGVuV2luZG93Iiwib25DcmVhdGVkIiwiQnJvd3NlcldpbmRvdyIsImxpbmVOdW1iZXIiLCJzb3VyY2VJZCIsIm1zZ3MiLCJvcGVuV2luZG93V2l0aFJldHJ5IiwibG9hZFdpbmRvdyIsIndhcm11cCIsIm9wZW4iLCJyZW5kZXIiLCJkdXJhdGlvbiIsIm9uUHJvZ3Jlc3MiLCJ0YWtlciIsInRvdGFsIiwiZnJhbWVJbnRlcnZhbCIsImZyYW1lU2l6ZSIsIndyaXR0ZW4iLCJsYXN0RnJhbWUiLCJzY3JlZW5zaG90cyIsImxhc3RXcml0dGVuVGltZSIsInByb2dyZXNzIiwiZW5jb2RlRXJyb3IiLCJyZXNvbHZlciIsInJlamVjdGVyIiwiY2xlYXJTdHVja0NoZWNrIiwiYmxhbmtTdGF0cyIsImRyb3BTdGF0cyIsImRpc3Bvc2VBdWRpbyIsInNjaGVkdWxlRnJhbWUiLCJwYWludCIsIl9yIiwiaW1hZ2UiLCJpbWFnZVNpemUiLCJjdXJyZW50VGltZSIsImNyb3BwZWQiLCJ0aW1lRGVsdGEiLCJmcmFtZXNUb0luc2VydCIsIm5ld1Byb2dyZXNzIiwiZHVyYXRpb25NcyIsImxhc3RXcml0dGVuIiwic3R1Y2siLCJibGFuayIsImphbmsiLCJNQVhfUkVOREVSX0FUVEVNUFRTIiwid2l0aFJlcmVuZGVyIiwibGFzdEVyciIsIkZpcnN0RnJhbWVHYXRlIiwiX29wdHMiLCJub3ciLCJoYXNEaWZmIiwicm93IiwiYWR2YW5jZVZpZGVvcyIsInRpbWVzdGFtcE1zIiwiVElDS19TWU1CT0wiLCJleHByIiwidGlja0V2IiwiUldfVElNRU9VVF9VUyIsIm9wZW5JbnB1dCIsIkRlbXV4ZXIiLCJkZWNvZGVGcmFtZXMiLCJtZXRhIiwiZnJvbUlkeCIsInJlc3VtZUF0IiwiQVZTRUVLX0ZMQUdfQkFDS1dBUkQiLCJBVk1FRElBX1RZUEVfVklERU8iLCJkZWMiLCJEZWNvZGVyIiwiZnJhbWVXaWR0aCIsImZyYW1lSGVpZ2h0Iiwic2NhbGUiLCJhbGlnbiIsImZpbHRlciIsIkZpbHRlckFQSSIsInByZXZLIiwiX2ZyYW1lIiwidGIiLCJ0cyIsImF0IiwicGFja1JnYmEiLCJvdXRXIiwib3V0SCIsInN0cmlkZSIsIkRFQ09ERV9BSEVBRCIsIktFRVBfQkVISU5EIiwiTUVNT1JZX0JVREdFVCIsIk1BWF9QQVNTX1JFVFJZIiwiRGVjb2RlU2Vzc2lvbiIsIl9zcmMiLCJyYXciLCJpZHgiLCJoaXQiLCJmcm9tIiwiZmFpbHMiLCJnZW4iLCJmYWlsZWQiLCJjb250ZW50RnJvbSIsInN0b3JlZCIsImZsb29yIiwibGVhZEdhcCIsIm91dGVyIiwiX3BrdCIsImVuY29kZVN0dWJXZWJtIiwidG1wZGlyIiwicmFuZG9tQnl0ZXMiLCJzdHViIiwiU3R1YkZyYW1lIiwicmVhZEZpbGUiLCJybSIsImx1bWEiLCJjaHJvbWEiLCJGcmFtZVNlcnZlciIsIl91c2VJbm5lclByb3h5IiwiZXZlbiIsInJlYWwiLCJpZCIsInNlc3Npb25zIiwiU0NIRU1FIiwiQ09SU19IRUFERVJTIiwidXNlRnJhbWVQcm90b2NvbCIsImZzIiwicmVzIiwianNvbk9rIiwiaW50IiwicmdiYU9rIiwid2VibU9rIiwiY29weSIsImZhbGxiYWNrIiwiUkVOREVSX0ZQUyIsImNsZWFyRGlydHlDaGVjayIsImlzRmlyc3RGcmFtZSIsImdhdGUiLCJfZCIsInNsaXZlciIsInJlZnJlc2hGcHMiLCJzaG9vdCIsInRJbml0Iiwid2luUCIsInBpcGVsaW5lIiwiaGVsZCIsIm1haW4iLCJpZnJhbWUiLCJmcmFtZUlkIiwiZnJhbWVNcyIsInBhaW50ZWQiLCJyZXBlYXQiLCJwcmludEZlYXR1cmVzIiwiY3RybCIsImV4aXRpbmciLCJNZW51IiwiaXBjIiwibWtkaXIiLCJyZXN1bHQiXSwibWFwcGluZ3MiOiJpekVBS0EsSUFBTUEsRUFBQUEsQ0FBbUIsSUFDdkIsT0FBTyxRQUFBLENBQWEsR0FBQSxDQUNoQixJQUFJLEdBQUEsQ0FBSSxDQUFBLEtBQUEsRUFBUSxVQUFVLENBQUEsQ0FBRSxDQUFBLENBQUUsSUFBQSxDQUM3QixTQUFTLGFBQUEsRUFBaUIsUUFBQSxDQUFTLGFBQUEsQ0FBYyxPQUFBLENBQVEsV0FBQSxFQUFZLEdBQU0sU0FDMUUsUUFBQSxDQUFTLGFBQUEsQ0FBYyxHQUFBLENBQ3ZCLElBQUksR0FBQSxDQUFJLFNBQUEsQ0FBVyxTQUFTLE9BQU8sQ0FBQSxDQUFFLElBQUEsQ0FFaENDLENBQUFBLENBQWdDRCxFQUFBQSxFQUFpQixDQ052RCxTQUFTRSxFQUFBQSxDQUFRQyxDQUFBQSxDQUFjQyxDQUFBQSxDQUFzQkMsRUFBaUMsQ0FDM0YsR0FBSSxDQUNGLE9BQU9ELENBQUFBLENBQU8sT0FBQSxDQUFRLElBQUlELENBQUksQ0FBQyxDQUNqQyxDQUFBLEtBQVEsQ0FDTixPQUFPRSxDQUNULENBQ0YsQ0NWTyxTQUFTQyxDQUFBQSxDQUFZQyxDQUFBQSxDQUFvQixDQUM5QyxHQUFJLE9BQU9BLENBQUFBLEVBQU0sUUFBQSxDQUNmLE9BQU9BLENBQUFBLENBRVQsSUFBTUMsQ0FBQUEsQ0FBTSxPQUFPRCxDQUFDLENBQUEsQ0FDcEIsR0FBSSxNQUFB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Q3NKLEVBQUcsQ0FBQSxDQUFFLENBQUEsQ0FBRyxDQUFDLEVBRWIsQ0FFQUEsQ0FBQUEsQ0FBRyxLQUFLLENBQUMsQ0FBQSxDQUNULFFBQVN0SixDQUFBQSxDQUFJLENBQUEsQ0FBR0EsRUFBSSxFQUFBLENBQUlBLENBQUFBLEVBQUFBLENBQ3RCc0osQ0FBQUEsQ0FBRyxJQUFBLENBQUt0SixDQUFBQSxHQUFNLENBQUEsRUFBS0EsSUFBTSxDQUFDLENBQUEsQ0FFNUJzSixFQUFHLENBQUEsQ0FBRSxDQUFBLENBQUcsQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsRUFBRSxDQUFBLENBQUcsQ0FBQyxFQUNUQSxDQUFBQSxDQUFHLElBQUEsQ0FBSyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxFQUFFLENBQUEsQ0FBRyxDQUFDLENBQUEsQ0FDVEEsQ0FBQUEsQ0FBRyxDQUFBLENBQUUsQ0FBQSxDQUFHLENBQUMsQ0FBQSxDQUNUQSxDQUFBQSxDQUFHLEVBQUUsQ0FBQSxDQUFHLENBQUMsRUFDVEEsQ0FBQUEsQ0FBRyxDQUFBLENBQUUsQ0FBQSxDQUFHLENBQUMsQ0FBQSxDQUVUQSxDQUFBQSxDQUFHLEtBQUssQ0FBQyxDQUFBLENBQ1RBLEVBQUcsRUFBQSxDQUFHLENBQUMsRUFDUEEsQ0FBQUEsQ0FBRyxJQUFBLENBQUssQ0FBQyxDQUFBLENBQ1RBLENBQUFBLENBQUcsSUFBQSxDQUFLLENBQUMsQ0FBQSxDQUNUQSxDQUFBQSxDQUFHLEtBQUssQ0FBQyxDQUFBLENBR1RBLEVBQUcsRUFBQSxDQUFHLENBQUMsQ0FBQSxDQUNQQSxDQUFBQSxDQUFHLElBQUEsQ0FBSyxDQUFDLEVBQ1RBLENBQUFBLENBQUcsSUFBQSxDQUFLZ0MsRUFBSSxPQUFBLENBQVNBLENBQUFBLENBQUksU0FBVUEsQ0FBQUEsQ0FBSSxNQUFBLENBQVNBLENBQUFBLENBQUksUUFBUSxDQUFBLENBRTVEaEMsQ0FBQUEsQ0FBRyxHQUFHLENBQUMsQ0FBQSxDQUNQQSxFQUFHLENBQUEsQ0FBRSxDQUFBLENBQUcsQ0FBQyxDQUFBLENB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QUEsRUFBSyxlQUFlLENBQUEsQ0FDckUsTUFBTWltQixDQUFBQSxDQUFJLFVBQUEsQ0FBVzdPLENBQUMsRUFDeEIsQ0FBQSxPQUFFLENBQ0EyTyxFQUFBQSxDQUFVLElBQUEsQ0FDVmhvQixhQUFJLElBQUEsR0FDTixDQUNGLENBQ0YsQ0FBQyxDQUFBIiwiZmlsZSI6ImFwcC5janMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTaGltIGdsb2JhbHMgaW4gY2pzIGJ1bmRsZVxuLy8gVGhlcmUncyBhIHdlaXJkIGJ1ZyB0aGF0IGVzYnVpbGQgd2lsbCBhbHdheXMgaW5qZWN0IGltcG9ydE1ldGFVcmxcbi8vIGlmIHdlIGV4cG9ydCBpdCBhcyBgY29uc3QgaW1wb3J0TWV0YVVybCA9IC4uLiBfX2ZpbGVuYW1lIC4uLmBcbi8vIEJ1dCB1c2luZyBhIGZ1bmN0aW9uIHdpbGwgbm90IGNhdXNlIHRoaXMgaXNzdWVcblxuY29uc3QgZ2V0SW1wb3J0TWV0YVVybCA9ICgpID0+IFxuICB0eXBlb2YgZG9jdW1lbnQgPT09IFwidW5kZWZpbmVkXCIgXG4gICAgPyBuZXcgVVJMKGBmaWxlOiR7X19maWxlbmFtZX1gKS5ocmVmIFxuICAgIDogKGRvY3VtZW50LmN1cnJlbnRTY3JpcHQgJiYgZG9jdW1lbnQuY3VycmVudFNjcmlwdC50YWdOYW1lLnRvVXBwZXJDYXNlKCkgPT09ICdTQ1JJUFQnKSBcbiAgICAgID8gZG9jdW1lbnQuY3VycmVudFNjcmlwdC5zcmMgXG4gICAgICA6IG5ldyBVUkwoXCJtYWluLmpzXCIsIGRvY3VtZW50LmJhc2VVUkkpLmhyZWY7XG5cbmV4cG9ydCBjb25zdCBpbXBvcnRNZXRhVXJsID0gLyogQF9fUFVSRV9fICovIGdldEltcG9ydE1ldGFVcmwoKVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8yNS5cblxuZXhwb3J0IHR5cGUgRW52UGFyc2VyPFQ+ID0gKHZhbHVlOiB1bmtub3duKSA9PiBUO1xuXG5leHBvcnQgZnVuY3Rpb24gcGVudjxUPihuYW1lOiBzdHJpbmcsIHBhcnNlcjogRW52UGFyc2VyPFQ+LCBkZWZhdWx0VmFsdWU6IFQpOiBUO1xuZXhwb3J0IGZ1bmN0aW9uIHBlbnY8VD4obmFtZTogc3RyaW5nLCBwYXJzZXI6IEVudlBhcnNlcjxUPiwgZGVmYXVsdFZhbHVlPzogVCk6IFQgfCB1bmRlZmluZWQ7XG5leHBvcnQgZnVuY3Rpb24gcGVudjxUPihuYW1lOiBzdHJpbmcsIHBhcnNlcjogRW52UGFyc2VyPFQ+LCBkZWZhdWx0VmFsdWU/OiBUKTogVCB8IHVuZGVmaW5lZCB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHBhcnNlcihwcm9jZXNzLmVudltuYW1lXSk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDEvMzAuXG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZU51bWJlcih4OiB1bmtub3duKTogbnVtYmVyIHtcbiAgaWYgKHR5cGVvZiB4ID09PSBcIm51bWJlclwiKSB7XG4gICAgcmV0dXJuIHg7XG4gIH1cbiAgY29uc3QgbnVtID0gTnVtYmVyKHgpO1xuICBpZiAoTnVtYmVyLmlzTmFOKG51bSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFZhbHVlICR7eH0gaXMgbm90IGEgdmFsaWQgbnVtYmVyYCk7XG4gIH1cbiAgcmV0dXJuIG51bTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlU3RyaW5nKHg6IHVua25vd24pOiBzdHJpbmcge1xuICBpZiAodHlwZW9mIHggPT09IFwic3RyaW5nXCIpIHtcbiAgICByZXR1cm4geDtcbiAgfVxuICByZXR1cm4gU3RyaW5nKHgpO1xufVxuXG4vLyBDb21tYS1zZXBhcmF0ZWQgc3RyaW5nIOKGkiBhcnJheSB2aWEgYSBwZXItaXRlbSBwYXJzZXI7IGVtcHR5L2JsYW5rIOKGkiBbXS5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUFycmF5PFQ+KGl0ZW06ICh4OiB1bmtub3duKSA9PiBUKTogKHg6IHVua25vd24pID0+IFRbXSB7XG4gIHJldHVybiAoeCkgPT4ge1xuICAgIGlmICh0eXBlb2YgeCAhPT0gXCJzdHJpbmdcIiB8fCB4LnRyaW0oKSA9PT0gXCJcIikge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICByZXR1cm4geC5zcGxpdChcIixcIikubWFwKChzKSA9PiBpdGVtKHMudHJpbSgpKSk7XG4gIH07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA5LlxuXG5pbXBvcnQgeyBjcmVhdGVSZXF1aXJlIH0gZnJvbSBcIm5vZGU6bW9kdWxlXCI7XG5pbXBvcnQgeyBkaXJuYW1lLCBqb2luIH0gZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHsgcGVudiB9IGZyb20gXCIuL2VudlwiO1xuaW1wb3J0IHsgcGFyc2VOdW1iZXIgfSBmcm9tIFwiLi9wYXJzZXJcIjtcblxuY29uc3QgcmVxdWlyZSA9IGNyZWF0ZVJlcXVpcmUoaW1wb3J0Lm1ldGEudXJsKTtcblxuZXhwb3J0IGNvbnN0IHB1cExvZ0xldmVsID0gcGVudihcIlBVUF9MT0dfTEVWRUxcIiwgcGFyc2VOdW1iZXIsIDIpO1xuXG5leHBvcnQgY29uc3QgcHVwUGtnUm9vdCA9IGRpcm5hbWUocmVxdWlyZS5yZXNvbHZlKFwicHVwLXJlY29yZGVyL3BhY2thZ2UuanNvblwiKSk7XG5leHBvcnQgY29uc3QgcHVwQXBwID0gam9pbihwdXBQa2dSb290LCBcImRpc3RcIiwgXCJhcHAuY2pzXCIpO1xuZXhwb3J0IGNvbnN0IHB1cFByZWxvYWQgPSBqb2luKHB1cFBrZ1Jvb3QsIFwiZGlzdFwiLCBcInJ1bnRpbWVcIiwgXCJwcmVsb2FkLmNqc1wiKTtcbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMDYuXG5cbmltcG9ydCB0eXBlIHsgQ2hpbGRQcm9jZXNzIH0gZnJvbSBcIm5vZGU6Y2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0IHsgTG9nIH0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB7IEFWX0xPR19FUlJPUiwgQVZfTE9HX1dBUk5JTkcgfSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcbmltcG9ydCB7IHB1cExvZ0xldmVsIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTG9nZ2VyTGlrZSB7XG4gIGRlYnVnPyh0aGlzOiB2b2lkLCAuLi5tZXNzYWdlczogdW5rbm93bltdKTogdm9pZDtcblxuICBpbmZvPyh0aGlzOiB2b2lkLCAuLi5tZXNzYWdlczogdW5rbm93bltdKTogdm9pZDtcblxuICB3YXJuPyh0aGlzOiB2b2lkLCAuLi5tZXNzYWdlczogdW5rbm93bltdKTogdm9pZDtcblxuICBlcnJvcj8odGhpczogdm9pZCwgLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQ7XG5cbiAgLy8gQnVmZmVyZWQgaW1wbHMgZHJhaW4gb24gdGhpczsgc2h1dGRvd24gYXdhaXRzIGl0IHNvIHRoZSB0YWlsIGlzIG5vdCBsb3N0LlxuICBmbHVzaD8odGhpczogdm9pZCk6IFByb21pc2U8dm9pZD47XG59XG5cbmNvbnN0IERFQlVHID0gXCI8cHVwQGRlYnVnPlwiO1xuY29uc3QgSU5GTyA9IFwiPHB1cEBpbmZvPlwiO1xuY29uc3QgV0FSTiA9IFwiPHB1cEB3YXJuPlwiO1xuY29uc3QgRVJST1IgPSBcIjxwdXBAZXJyb3I+XCI7XG5jb25zdCBGQVRBTCA9IFwiPHB1cEBmYXRhbD5cIjtcblxuZnVuY3Rpb24gc3RhY2tIb29rKHRhcmdldDogKC4uLm1lc3NhZ2VzOiB1bmtub3duW10pID0+IHVua25vd24sIF9jb250ZXh0OiBDbGFzc01ldGhvZERlY29yYXRvckNvbnRleHQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh0aGlzOiBMb2dnZXIsIC4uLm1lc3NhZ2VzOiB1bmtub3duW10pIHtcbiAgICBjb25zdCBwcm9jZXNzZWQgPSBtZXNzYWdlcy5tYXAoKG1zZykgPT4ge1xuICAgICAgcmV0dXJuIG1zZyBpbnN0YW5jZW9mIEVycm9yID8gKG1zZy5zdGFjayA/PyBTdHJpbmcobXNnKSkgOiBtc2c7XG4gICAgfSk7XG4gICAgcmV0dXJuIHRhcmdldC5jYWxsKHRoaXMsIC4uLnByb2Nlc3NlZCk7XG4gIH07XG59XG5cbmV4cG9ydCBjbGFzcyBMb2dnZXIgaW1wbGVtZW50cyBMb2dnZXJMaWtlIHtcbiAgcHJpdmF0ZSBfaW1wbD86IExvZ2dlckxpa2U7XG5cbiAgZ2V0IGxldmVsKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2xldmVsO1xuICB9XG5cbiAgc2V0IGxldmVsKHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLl9sZXZlbCA9IHZhbHVlO1xuICAgIHRoaXMuaW1wbCA9IHRoaXMuX2ltcGwgPz8gY29uc29sZTtcbiAgfVxuXG4gIGdldCBpbXBsKCk6IExvZ2dlckxpa2UgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9pbXBsO1xuICB9XG5cbiAgc2V0IGltcGwodmFsdWU6IExvZ2dlckxpa2UpIHtcbiAgICBjb25zdCBkZWJ1ZyA9IHZhbHVlLmRlYnVnID8/IGNvbnNvbGUuZGVidWc7XG4gICAgY29uc3QgaW5mbyA9IHZhbHVlLmluZm8gPz8gY29uc29sZS5pbmZvO1xuICAgIGNvbnN0IHdhcm4gPSB2YWx1ZS53YXJuID8/IGNvbnNvbGUud2FybjtcbiAgICBjb25zdCBlcnJvciA9IHZhbHVlLmVycm9yID8/IGNvbnNvbGUuZXJyb3I7XG4gICAgY29uc3QgbHYgPSB0aGlzLl9sZXZlbDtcbiAgICB0aGlzLl9pbXBsID0ge1xuICAgICAgZGVidWc6IGx2ID49IDMgPyBkZWJ1ZyA6IHVuZGVmaW5lZCxcbiAgICAgIGluZm86IGx2ID49IDIgPyBpbmZvIDogdW5kZWZpbmVkLFxuICAgICAgd2FybjogbHYgPj0gMSA/IHdhcm4gOiB1bmRlZmluZWQsXG4gICAgICBlcnJvcjogbHYgPj0gMCA/IGVycm9yIDogdW5kZWZpbmVkLFxuICAgICAgZmx1c2g6IHZhbHVlLmZsdXNoLFxuICAgIH07XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9sZXZlbDogbnVtYmVyID0gcHVwTG9nTGV2ZWwpIHtcbiAgICB0aGlzLmltcGwgPSBjb25zb2xlO1xuICB9XG5cbiAgQHN0YWNrSG9va1xuICBkZWJ1ZyguLi5tZXNzYWdlczogdW5rbm93bltdKTogdm9pZCB7XG4gICAgdGhpcy5pbXBsPy5kZWJ1Zz8uKERFQlVHLCAuLi5tZXNzYWdlcyk7XG4gIH1cblxuICBAc3RhY2tIb29rXG4gIGluZm8oLi4ubWVzc2FnZXM6IHVua25vd25bXSk6IHZvaWQge1xuICAgIHRoaXMuaW1wbD8uaW5mbz8uKElORk8sIC4uLm1lc3NhZ2VzKTtcbiAgfVxuXG4gIEBzdGFja0hvb2tcbiAgd2FybiguLi5tZXNzYWdlczogdW5rbm93bltdKTogdm9pZCB7XG4gICAgdGhpcy5pbXBsPy53YXJuPy4oV0FSTiwgLi4ubWVzc2FnZXMpO1xuICB9XG5cbiAgQHN0YWNrSG9va1xuICBlcnJvciguLi5tZXNzYWdlczogdW5rbm93bltdKTogdm9pZCB7XG4gICAgdGhpcy5pbXBsPy5lcnJvcj8uKEVSUk9SLCAuLi5tZXNzYWdlcyk7XG4gIH1cblxuICBAc3RhY2tIb29rXG4gIGZhdGFsKC4uLm1lc3NhZ2VzOiB1bmtub3duW10pOiB2b2lkIHtcbiAgICB0aGlzLmltcGw/LmVycm9yPy4oRkFUQUwsIC4uLm1lc3NhZ2VzKTtcbiAgICBwcm9jZXNzLmV4aXQoMSk7XG4gIH1cblxuICBwcml2YXRlIGRpc3BhdGNoKG1lc3NhZ2U6IHN0cmluZykge1xuICAgIGNvbnN0IG1zZyA9IG1lc3NhZ2UudHJpbUVuZCgpO1xuICAgIGlmIChtc2cuc3RhcnRzV2l0aChERUJVRykpIHtcbiAgICAgIHRoaXMuZGVidWcobXNnLnNsaWNlKERFQlVHLmxlbmd0aCArIDEpKTtcbiAgICB9IGVsc2UgaWYgKG1zZy5zdGFydHNXaXRoKElORk8pKSB7XG4gICAgICB0aGlzLmluZm8obXNnLnNsaWNlKElORk8ubGVuZ3RoICsgMSkpO1xuICAgIH0gZWxzZSBpZiAobXNnLnN0YXJ0c1dpdGgoV0FSTikpIHtcbiAgICAgIHRoaXMud2Fybihtc2cuc2xpY2UoV0FSTi5sZW5ndGggKyAxKSk7XG4gICAgfSBlbHNlIGlmIChtc2cuc3RhcnRzV2l0aChFUlJPUikpIHtcbiAgICAgIHRoaXMuZXJyb3IobXNnLnNsaWNlKEVSUk9SLmxlbmd0aCArIDEpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pbmZvKG1zZyk7XG4gICAgfVxuICB9XG5cbiAgYXR0YWNoKHByb2M6IENoaWxkUHJvY2VzcywgbmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMuZGVidWcoYCR7bmFtZX0uYXR0YWNoYCk7XG4gICAgICBsZXQgZmF0YWw6IHN0cmluZyA9IFwiXCI7XG4gICAgICBjb25zdCBkaXNwYXRjaCA9IChkYXRhOiBCdWZmZXIpID0+IHtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IGRhdGEudG9TdHJpbmcoKTtcbiAgICAgICAgaWYgKG1lc3NhZ2Uuc3RhcnRzV2l0aChGQVRBTCkpIHtcbiAgICAgICAgICBmYXRhbCArPSBtZXNzYWdlLnNsaWNlKEZBVEFMLmxlbmd0aCArIDEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZGlzcGF0Y2gobWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBwcm9jLnN0ZGVycj8ub24oXCJkYXRhXCIsIGRpc3BhdGNoKTtcbiAgICAgIHByb2Muc3Rkb3V0Py5vbihcImRhdGFcIiwgZGlzcGF0Y2gpO1xuICAgICAgcHJvY1xuICAgICAgICAub24oXCJlcnJvclwiLCAoZXJyKSA9PiB7XG4gICAgICAgICAgZmF0YWwgKz0gZXJyLm1lc3NhZ2U7XG4gICAgICAgICAgcHJvYy5raWxsKCk7XG4gICAgICAgIH0pXG4gICAgICAgIC5vbmNlKFwiY2xvc2VcIiwgKGNvZGUsIHNpZ25hbCkgPT4ge1xuICAgICAgICAgIGlmIChjb2RlIHx8IHNpZ25hbCB8fCBmYXRhbCkge1xuICAgICAgICAgICAgZmF0YWwgfHw9IGBjb21tYW5kIGZhaWxlZDogJHtwcm9jLnNwYXduYXJncy5qb2luKFwiIFwiKX1gO1xuICAgICAgICAgICAgdGhpcy5kZWJ1ZyhgJHtuYW1lfS5jbG9zZWAsIHsgY29kZSwgc2lnbmFsLCBmYXRhbCB9KTtcbiAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoZmF0YWwpKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5kZWJ1ZyhgJHtuYW1lfS5jbG9zZWApO1xuICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgLm9uKFwidW5oYW5kbGVkUmVqZWN0aW9uXCIsIChyZWFzb24pID0+IHtcbiAgICAgICAgICB0aGlzLmVycm9yKGAke25hbWV9LnVuaGFuZGxlZGAsIHJlYXNvbik7XG4gICAgICAgIH0pXG4gICAgICAgIC5vbihcInVuY2F1Z2h0RXhjZXB0aW9uTW9uaXRvclwiLCAoZXJyKSA9PiB7XG4gICAgICAgICAgdGhpcy5lcnJvcihgJHtuYW1lfS51bmhhbmRsZWRgLCBlcnIpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGZsdXNoKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuaW1wbD8uZmx1c2g/LigpO1xuICB9XG59XG5cbmNvbnN0IGxvZ2dlciA9IG5ldyBMb2dnZXIoKTtcblxuLy8gUm91dGUgZmZtcGVnIG5hdGl2ZSBsb2dzIHRocm91Z2ggcHVwJ3MgbG9nZ2VyLlxuTG9nLnNldENhbGxiYWNrKChsZXZlbCwgbWVzc2FnZSkgPT4ge1xuICBjb25zdCBtc2cgPSBtZXNzYWdlLnRyaW1FbmQoKTtcbiAgaWYgKCFtc2cpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKGxldmVsIDw9IEFWX0xPR19FUlJPUikge1xuICAgIGxvZ2dlci5lcnJvcihtc2cpO1xuICB9IGVsc2UgaWYgKGxldmVsIDw9IEFWX0xPR19XQVJOSU5HKSB7XG4gICAgbG9nZ2VyLndhcm4obXNnKTtcbiAgfVxufSk7XG5cbmV4cG9ydCB7IGxvZ2dlciB9O1xuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8yMS5cblxuaW1wb3J0IHsgbWtkaXJTeW5jIH0gZnJvbSBcIm5vZGU6ZnNcIjtcbmltcG9ydCB7IGpvaW4gfSBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyBhcHAsIGNyYXNoUmVwb3J0ZXIgfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuL2xvZ2dpbmdcIjtcblxuY29uc3QgVEFHID0gXCJbQ3Jhc2hdXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGFydEVsZWN0cm9uQ3Jhc2hSZXBvcnRlcigpIHtcbiAgLy8gYXBwRGF0YSAobm90IHRoZSBwZXItcnVuIHVzZXItZGF0YS1kaXIpIHNvIGV2ZXJ5IHB1cCBhcHAncyBkdW1wcyBhY2N1bXVsYXRlIGluIG9uZSBzaGFyZWQsIHBlcnNpc3RlbnQgZGlyLlxuICBjb25zdCBkdW1wRGlyID0gam9pbihhcHAuZ2V0UGF0aChcImFwcERhdGFcIiksIFwicHVwLXJlY29yZGVyXCIsIFwiY3Jhc2hlc1wiKTtcbiAgbWtkaXJTeW5jKGR1bXBEaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICBhcHAuc2V0UGF0aChcImNyYXNoRHVtcHNcIiwgZHVtcERpcik7XG4gIGNyYXNoUmVwb3J0ZXIuc3RhcnQoe1xuICAgIHByb2R1Y3ROYW1lOiBcInB1cC1yZWNvcmRlclwiLFxuICAgIHVwbG9hZFRvU2VydmVyOiBmYWxzZSxcbiAgICBjb21wcmVzczogZmFsc2UsXG4gICAgaWdub3JlU3lzdGVtQ3Jhc2hIYW5kbGVyOiB0cnVlLFxuICB9KTtcbiAgbG9nZ2VyLmRlYnVnKFRBRywgXCJzZXQgZHVtcCB0b1wiLCBkdW1wRGlyKTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDIvMjQuXG5cbmV4cG9ydCBmdW5jdGlvbiBub2VycjxBIGV4dGVuZHMgdW5rbm93bltdLCBSLCBEPihmbjogKC4uLmFyZ3M6IEEpID0+IFIsIGRlZmF1bHRWYWx1ZTogRCk6ICguLi5hcmdzOiBBKSA9PiBSIHwgRCB7XG4gIHJldHVybiAoLi4uYXJncykgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXQgPSBmbiguLi5hcmdzKTtcbiAgICAgIGlmIChyZXQgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgIHJldHVybiByZXQuY2F0Y2goKCkgPT4gZGVmYXVsdFZhbHVlKSBhcyBSIHwgRDtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXQ7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gZGVmYXVsdFZhbHVlO1xuICAgIH1cbiAgfTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDEvMzAuXG5cbmltcG9ydCB7IHR5cGUgQ2hpbGRQcm9jZXNzLCB0eXBlIFNwYXduT3B0aW9ucywgc3Bhd24gfSBmcm9tIFwibm9kZTpjaGlsZF9wcm9jZXNzXCI7XG5pbXBvcnQgeyByZWFkRmlsZVN5bmMgfSBmcm9tIFwibm9kZTpmc1wiO1xuaW1wb3J0IHRyZWVLaWxsIGZyb20gXCJ0cmVlLWtpbGxcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuL2xvZ2dpbmdcIjtcblxuZXhwb3J0IGNvbnN0IFBVUF9BUkdTX0tFWSA9IFwiLS1wdXAtcHJpdi1hcmdzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJncygpIHtcbiAgY29uc3QgYXJndiA9IHByb2Nlc3MuYXJndjtcbiAgY29uc3QgcHJpdiA9IGFyZ3YuZmluZCgoYXJnKSA9PiBhcmcuc3RhcnRzV2l0aChQVVBfQVJHU19LRVkpKTtcbiAgaWYgKCFwcml2KSB7XG4gICAgbG9nZ2VyLmRlYnVnKFwicHJvY2FyZ3ZcIiwgYXJndik7XG4gICAgcmV0dXJuIHByb2Nlc3MuYXJndjtcbiAgfVxuICBjb25zdCBhcmdzID0gW1wiZXhlY1wiLCAuLi5hcmd2LnNsaWNlKC0xKV07XG4gIC8vIFN0YWdlIGZpbGUgKGVsZWN0cm9uLnRzIHdyaXRlcyBpdCBuZXh0IHRvIHRoZSBwcm9maWxlIGRpcik7IGJhc2U2NC1vbi1hcmd2IGJsZXcgRTJCSUcgb24gbGFyZ2Ugc291cmNlcy5cbiAgY29uc3Qgc3RhZ2VkID0gSlNPTi5wYXJzZShyZWFkRmlsZVN5bmMocHJpdi5zcGxpdChcIj1cIilbMV0hLCBcInV0ZjhcIikpIGFzIHN0cmluZ1tdO1xuICBhcmdzLnB1c2goLi4uc3RhZ2VkKTtcbiAgbG9nZ2VyLmRlYnVnKFwicHVwYXJnc1wiLCBhcmdzKTtcbiAgcmV0dXJuIGFyZ3M7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJvY2Vzc0hhbmRsZSB7XG4gIHByb2Nlc3M6IENoaWxkUHJvY2VzcztcbiAgd2FpdDogUHJvbWlzZTx2b2lkPjtcbiAgZ2V0IGtpbGxlZCgpOiBib29sZWFuO1xuICBraWxsKCk6IHZvaWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleGVjKGNtZDogc3RyaW5nLCBvcHRpb25zPzogU3Bhd25PcHRpb25zKTogUHJvY2Vzc0hhbmRsZSB7XG4gIGNvbnN0IHBhcnRzID0gY21kLnNwbGl0KFwiIFwiKS5maWx0ZXIoKHMpID0+IHMubGVuZ3RoKTtcbiAgY29uc3QgW2NvbW1hbmQsIC4uLmFyZ3NdID0gcGFydHM7XG4gIGlmICghY29tbWFuZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcImVtcHR5IGNvbW1hbmRcIik7XG4gIH1cbiAgY29uc3QgcHJvYyA9IHNwYXduKGNvbW1hbmQsIGFyZ3MsIHtcbiAgICBzdGRpbzogXCJpbmhlcml0XCIsXG4gICAgLi4ub3B0aW9ucyxcbiAgfSk7XG4gIGxldCBraWxsZWQgPSBmYWxzZTtcbiAgcmV0dXJuIHtcbiAgICBwcm9jZXNzOiBwcm9jLFxuICAgIHdhaXQ6IGxvZ2dlci5hdHRhY2gocHJvYywgY29tbWFuZCksXG4gICAgZ2V0IGtpbGxlZCgpIHtcbiAgICAgIHJldHVybiBraWxsZWQ7XG4gICAgfSxcbiAgICBraWxsKCkge1xuICAgICAgaWYgKGtpbGxlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBraWxsZWQgPSB0cnVlO1xuICAgICAgY29uc3QgcGlkID0gcHJvYy5waWQ7XG4gICAgICBpZiAocGlkKSB7XG4gICAgICAgIHRyZWVLaWxsKHBpZCwgXCJTSUdLSUxMXCIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcHJvYy5raWxsKFwiU0lHS0lMTFwiKTtcbiAgICAgIH1cbiAgICB9LFxuICB9O1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wNi5cblxuaW1wb3J0IHogZnJvbSBcInpvZFwiO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9XSURUSCA9IDE5MjA7XG5leHBvcnQgY29uc3QgREVGQVVMVF9IRUlHSFQgPSAxMDgwO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfRlBTID0gMzA7XG5leHBvcnQgY29uc3QgREVGQVVMVF9EVVJBVElPTiA9IDU7XG5leHBvcnQgY29uc3QgREVGQVVMVF9XSU5ET1dfVElNRU9VVCA9IDEwO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfT1VUX0ZJTEVTID0gW1wib3V0L2h0bWwubXA0XCIsIFwib3V0L2h0bWwud2VibVwiXTtcblxuZXhwb3J0IGNvbnN0IHJlbmRlclNjaGVtYSA9IHoub2JqZWN0KHtcbiAgZHVyYXRpb246IHoubnVtYmVyKCkuZGVzY3JpYmUoXCJEdXJhdGlvbiBpbiBzZWNvbmRzXCIpLFxuICB3aWR0aDogei5udW1iZXIoKS5kZXNjcmliZShcIlZpZGVvIHdpZHRoXCIpLFxuICBoZWlnaHQ6IHoubnVtYmVyKCkuZGVzY3JpYmUoXCJWaWRlbyBoZWlnaHRcIiksXG4gIGZwczogei5udW1iZXIoKS5kZXNjcmliZShcIkZyYW1lcyBwZXIgc2Vjb25kXCIpLFxuICB3aXRoQXVkaW86IHouYm9vbGVhbigpLmRlc2NyaWJlKFwiQ2FwdHVyZSBhbmQgZW5jb2RlIGF1ZGlvXCIpLFxuICBvdXRGaWxlczogei5hcnJheSh6LnN0cmluZygpKS5kZXNjcmliZShcIk91dHB1dCBwYXRoczsgZXh0ZW5zaW9uICgubXA0Ly53ZWJtKSBzZWxlY3RzIGVuY29kZXJcIiksXG4gIHVzZUlubmVyUHJveHk6IHouYm9vbGVhbigpLmRlc2NyaWJlKFwiVXNlIGJpbGliaWxpIGlubmVyIHByb3h5IGZvciByZXNvdXJjZSBhY2Nlc3NcIiksXG4gIGRldGVybWluaXN0aWM6IHouYm9vbGVhbigpLmRlc2NyaWJlKFwiUmVuZGVyIGJ5IGZyYW1lIHJhdGhlciB0aGFuIHJlY29yZGluZ1wiKSxcbiAgZGlzYWJsZUdwdTogei5ib29sZWFuKCkuZGVzY3JpYmUoXCJEaXNhYmxlIEdQVSByZW5kZXJpbmcsIG1heSByZWR1Y2UgcGVyZm9ybWFuY2UgYnV0IGluY3JlYXNlIHN0YWJpbGl0eVwiKSxcbiAgZGlzYWJsZUh3Q29kZWM6IHouYm9vbGVhbigpLmRlc2NyaWJlKFwiRGlzYWJsZSBoYXJkd2FyZSB2aWRlbyBlbmNvZGVyIChOVkVOQy9WaWRlb1Rvb2xib3gpLCB1c2Ugc29mdHdhcmUgeDI2NVwiKSxcbiAgZGlzYWJsZVdlYlNlY3VyaXR5OiB6LmJvb2xlYW4oKS5kZXNjcmliZShcIkRyb3AgdGhlIHNhbWUtb3JpZ2luIHdhbGw7IHJlcXVpcmVkIHRvIHJlY29yZCBhIGxvY2FsIGZpbGVcIiksXG4gIGlnbm9yZUNlcnRpZmljYXRlRXJyb3JzOiB6XG4gICAgLmJvb2xlYW4oKVxuICAgIC5kZXNjcmliZShcIlJlY29yZCBvdmVyIFRMUyB0aGUgcGxhdGZvcm0gcmVqZWN0cywgZS5nLiBhIHNlbGYtc2lnbmVkIGludHJhbmV0IGhvc3RcIiksXG4gIHdpbmRvd1RvbGVyYW50OiB6LmJvb2xlYW4oKS5kZXNjcmliZShcIkZhbGwgYmFjayB0byBkb20tcmVhZHkgaWYgd2FybXVwIGxvYWQgdGltZXMgb3V0XCIpLFxuICB3aW5kb3dUaW1lb3V0OiB6Lm51bWJlcigpLmRlc2NyaWJlKFwiV2luZG93IGxvYWQgdGltZW91dCBpbiBzZWNvbmRzXCIpLFxuICBzY3JlZW5zaG90czogei5hcnJheSh6Lm51bWJlcigpKS5kZXNjcmliZShcIlNlY29uZCBtYXJrcyB0byBkdW1wIGZyYW1lIGJpdG1hcHMgYXMgUE5HXCIpLFxufSk7XG5cbmV4cG9ydCB0eXBlIFJlbmRlck9wdGlvbnMgPSB6LmluZmVyPHR5cGVvZiByZW5kZXJTY2hlbWE+O1xuXG5leHBvcnQgdHlwZSBDb25zb2xlQ2FsbGJhY2sgPSAobGV2ZWw6IHN0cmluZywgbWVzc2FnZTogc3RyaW5nKSA9PiB2b2lkO1xuXG5leHBvcnQgdHlwZSBQcm9ncmVzc0NhbGxiYWNrID0gKHByb2dyZXNzOiBudW1iZXIpID0+IHZvaWQ7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVBDUmVuZGVyT3B0aW9ucyBleHRlbmRzIFJlbmRlck9wdGlvbnMge1xuICBzb3VyY2U6IHN0cmluZztcbiAgc2lnbmFsOiBBYm9ydFNpZ25hbDtcbiAgb25Qcm9ncmVzczogUHJvZ3Jlc3NDYWxsYmFjaztcbiAgb25Db25zb2xlOiBDb25zb2xlQ2FsbGJhY2s7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVuZGVyUmVzdWx0IHtcbiAgb3B0aW9uczogUmVuZGVyT3B0aW9ucztcbiAgd3JpdHRlbjogbnVtYmVyO1xuICBvdXRGaWxlczogc3RyaW5nW107XG4gIGJsYW5rOiBudW1iZXI7XG4gIGphbms6IG51bWJlcjtcbiAgc2NyZWVuc2hvdHM6IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgY29uc3QgZGVmYXVsdFJlbmRlck9wdGlvbnM6IFJlbmRlck9wdGlvbnMgPSB7XG4gIHdpZHRoOiBERUZBVUxUX1dJRFRILFxuICBoZWlnaHQ6IERFRkFVTFRfSEVJR0hULFxuICBmcHM6IERFRkFVTFRfRlBTLFxuICBkdXJhdGlvbjogREVGQVVMVF9EVVJBVElPTixcbiAgb3V0RmlsZXM6IERFRkFVTFRfT1VUX0ZJTEVTLFxuICB3aXRoQXVkaW86IGZhbHNlLFxuICB1c2VJbm5lclByb3h5OiBmYWxzZSxcbiAgZGV0ZXJtaW5pc3RpYzogZmFsc2UsXG4gIGRpc2FibGVHcHU6IGZhbHNlLFxuICBkaXNhYmxlSHdDb2RlYzogZmFsc2UsXG4gIGRpc2FibGVXZWJTZWN1cml0eTogZmFsc2UsXG4gIGlnbm9yZUNlcnRpZmljYXRlRXJyb3JzOiBmYWxzZSxcbiAgd2luZG93VG9sZXJhbnQ6IGZhbHNlLFxuICB3aW5kb3dUaW1lb3V0OiBERUZBVUxUX1dJTkRPV19USU1FT1VULFxuICBzY3JlZW5zaG90czogW10sXG59O1xuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wOS5cblxuaW1wb3J0IHsgcmVhbHBhdGhTeW5jIH0gZnJvbSBcIm5vZGU6ZnNcIjtcbmltcG9ydCB7IHJlc29sdmUgfSBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyBwcm9ncmFtIH0gZnJvbSBcImNvbW1hbmRlclwiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4vYmFzZS9sb2dnaW5nXCI7XG5pbXBvcnQgeyBub2VyciB9IGZyb20gXCIuL2Jhc2Uvbm9lcnJcIjtcbmltcG9ydCB7IHBhcnNlQXJyYXksIHBhcnNlTnVtYmVyLCBwYXJzZVN0cmluZyB9IGZyb20gXCIuL2Jhc2UvcGFyc2VyXCI7XG5pbXBvcnQgeyBwYXJncyB9IGZyb20gXCIuL2Jhc2UvcHJvY2Vzc1wiO1xuaW1wb3J0IHsgZGVmYXVsdFJlbmRlck9wdGlvbnMsIHR5cGUgUmVuZGVyT3B0aW9ucywgcmVuZGVyU2NoZW1hIH0gZnJvbSBcIi4vcmVuZGVyZXIvc2NoZW1hXCI7XG5cbi8vIFNjaGVtZWQgVVJJcyBwYXNzIHRocm91Z2g7IGJhcmUgcGF0aHMgZ2V0IGNhbm9uaWNhbGl6ZWQgYW5kIHdyYXBwZWQgYXMgZmlsZTovLy5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVNvdXJjZShzOiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAocy5pbmNsdWRlcyhcIjovL1wiKSB8fCBzLnN0YXJ0c1dpdGgoXCJkYXRhOlwiKSkge1xuICAgIHJldHVybiBzO1xuICB9XG4gIGxldCBhYnM6IHN0cmluZztcbiAgdHJ5IHtcbiAgICBhYnMgPSByZWFscGF0aFN5bmMocyk7XG4gIH0gY2F0Y2gge1xuICAgIGFicyA9IHJlc29sdmUocyk7XG4gIH1cbiAgcmV0dXJuIGBmaWxlOi8vJHthYnN9YDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDTElPcHRpb25zIHtcbiAgbmFtZTogc3RyaW5nO1xuICBydW46IChzb3VyY2U6IHN0cmluZywgb3B0aW9uczogUmVuZGVyT3B0aW9ucykgPT4gUHJvbWlzZTx1bmtub3duPjtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG1ha2VDTEkob3B0aW9uczogQ0xJT3B0aW9ucykge1xuICBjb25zdCBzaGFwZSA9IHJlbmRlclNjaGVtYS5zaGFwZTtcbiAgY29uc3QgZCA9IGRlZmF1bHRSZW5kZXJPcHRpb25zO1xuICBwcm9ncmFtXG4gICAgLm5hbWUob3B0aW9ucy5uYW1lKVxuICAgIC5hcmd1bWVudChcIjxzb3VyY2U+XCIsIFwiZmlsZTovLywgaHR0cChzKTovLywgZGF0YTogVVJJLCBvciBmaWxlc3lzdGVtIHBhdGhcIilcbiAgICAub3B0aW9uKFwiLVcsIC0td2lkdGggPG51bWJlcj5cIiwgc2hhcGUud2lkdGguZGVzY3JpcHRpb24sIGAke2Qud2lkdGh9YClcbiAgICAub3B0aW9uKFwiLUgsIC0taGVpZ2h0IDxudW1iZXI+XCIsIHNoYXBlLmhlaWdodC5kZXNjcmlwdGlvbiwgYCR7ZC5oZWlnaHR9YClcbiAgICAub3B0aW9uKFwiLVMsIC0tc2NyZWVuc2hvdHMgPHNlY29uZHM+XCIsIHNoYXBlLnNjcmVlbnNob3RzLmRlc2NyaXB0aW9uLCBcIlwiKVxuICAgIC5vcHRpb24oXCItZiwgLS1mcHMgPG51bWJlcj5cIiwgc2hhcGUuZnBzLmRlc2NyaXB0aW9uLCBgJHtkLmZwc31gKVxuICAgIC5vcHRpb24oXCItdCwgLS1kdXJhdGlvbiA8bnVtYmVyPlwiLCBzaGFwZS5kdXJhdGlvbi5kZXNjcmlwdGlvbiwgYCR7ZC5kdXJhdGlvbn1gKVxuICAgIC5vcHRpb24oXCItbywgLS1vdXQtZmlsZSA8cGF0aHM+XCIsIHNoYXBlLm91dEZpbGVzLmRlc2NyaXB0aW9uLCBkLm91dEZpbGVzLmpvaW4oXCIsXCIpKVxuICAgIC5vcHRpb24oXCItYSwgLS13aXRoLWF1ZGlvXCIsIHNoYXBlLndpdGhBdWRpby5kZXNjcmlwdGlvbiwgZC53aXRoQXVkaW8pXG4gICAgLm9wdGlvbihcIi1kLCAtLWRldGVybWluaXN0aWNcIiwgc2hhcGUuZGV0ZXJtaW5pc3RpYy5kZXNjcmlwdGlvbiwgZC5kZXRlcm1pbmlzdGljKVxuICAgIC5vcHRpb24oXCItLXVzZS1pbm5lci1wcm94eVwiLCBzaGFwZS51c2VJbm5lclByb3h5LmRlc2NyaXB0aW9uLCBkLnVzZUlubmVyUHJveHkpXG4gICAgLm9wdGlvbihcIi0tZGlzYWJsZS1ncHVcIiwgc2hhcGUuZGlzYWJsZUdwdS5kZXNjcmlwdGlvbiwgZC5kaXNhYmxlR3B1KVxuICAgIC5vcHRpb24oXCItLWRpc2FibGUtaHctY29kZWNcIiwgc2hhcGUuZGlzYWJsZUh3Q29kZWMuZGVzY3JpcHRpb24sIGQuZGlzYWJsZUh3Q29kZWMpXG4gICAgLm9wdGlvbihcIi0tZGlzYWJsZS13ZWItc2VjdXJpdHlcIiwgc2hhcGUuZGlzYWJsZVdlYlNlY3VyaXR5LmRlc2NyaXB0aW9uLCBkLmRpc2FibGVXZWJTZWN1cml0eSlcbiAgICAub3B0aW9uKFwiLS1pZ25vcmUtY2VydGlmaWNhdGUtZXJyb3JzXCIsIHNoYXBlLmlnbm9yZUNlcnRpZmljYXRlRXJyb3JzLmRlc2NyaXB0aW9uLCBkLmlnbm9yZUNlcnRpZmljYXRlRXJyb3JzKVxuICAgIC5vcHRpb24oXCItLXdpbmRvdy10b2xlcmFudFwiLCBzaGFwZS53aW5kb3dUb2xlcmFudC5kZXNjcmlwdGlvbiwgZC53aW5kb3dUb2xlcmFudClcbiAgICAub3B0aW9uKFwiLS13aW5kb3ctdGltZW91dCA8bnVtYmVyPlwiLCBzaGFwZS53aW5kb3dUaW1lb3V0LmRlc2NyaXB0aW9uLCBgJHtkLndpbmRvd1RpbWVvdXR9YClcbiAgICAuYWN0aW9uKGFzeW5jIChzb3VyY2U6IHN0cmluZywgb3B0cykgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgb3B0aW9ucy5ydW4obm9ybWFsaXplU291cmNlKHNvdXJjZSksIHtcbiAgICAgICAgICB3aWR0aDogbm9lcnIocGFyc2VOdW1iZXIsIGQud2lkdGgpKG9wdHMud2lkdGgpLFxuICAgICAgICAgIGhlaWdodDogbm9lcnIocGFyc2VOdW1iZXIsIGQuaGVpZ2h0KShvcHRzLmhlaWdodCksXG4gICAgICAgICAgZnBzOiBub2VycihwYXJzZU51bWJlciwgZC5mcHMpKG9wdHMuZnBzKSxcbiAgICAgICAgICBkdXJhdGlvbjogbm9lcnIocGFyc2VOdW1iZXIsIGQuZHVyYXRpb24pKG9wdHMuZHVyYXRpb24pLFxuICAgICAgICAgIG91dEZpbGVzOiBwYXJzZUFycmF5KHBhcnNlU3RyaW5nKShvcHRzLm91dEZpbGUpLFxuICAgICAgICAgIHdpdGhBdWRpbzogb3B0cy53aXRoQXVkaW8gPz8gZC53aXRoQXVkaW8sXG4gICAgICAgICAgdXNlSW5uZXJQcm94eTogb3B0cy51c2VJbm5lclByb3h5ID8/IGQudXNlSW5uZXJQcm94eSxcbiAgICAgICAgICBkZXRlcm1pbmlzdGljOiBvcHRzLmRldGVybWluaXN0aWMgPz8gZC5kZXRlcm1pbmlzdGljLFxuICAgICAgICAgIGRpc2FibGVHcHU6IG9wdHMuZGlzYWJsZUdwdSA/PyBkLmRpc2FibGVHcHUsXG4gICAgICAgICAgZGlzYWJsZUh3Q29kZWM6IG9wdHMuZGlzYWJsZUh3Q29kZWMgPz8gZC5kaXNhYmxlSHdDb2RlYyxcbiAgICAgICAgICBkaXNhYmxlV2ViU2VjdXJpdHk6IG9wdHMuZGlzYWJsZVdlYlNlY3VyaXR5ID8/IGQuZGlzYWJsZVdlYlNlY3VyaXR5LFxuICAgICAgICAgIGlnbm9yZUNlcnRpZmljYXRlRXJyb3JzOiBvcHRzLmlnbm9yZUNlcnRpZmljYXRlRXJyb3JzID8/IGQuaWdub3JlQ2VydGlmaWNhdGVFcnJvcnMsXG4gICAgICAgICAgd2luZG93VG9sZXJhbnQ6IG9wdHMud2luZG93VG9sZXJhbnQgPz8gZC53aW5kb3dUb2xlcmFudCxcbiAgICAgICAgICB3aW5kb3dUaW1lb3V0OiBub2VycihwYXJzZU51bWJlciwgZC53aW5kb3dUaW1lb3V0KShvcHRzLndpbmRvd1RpbWVvdXQpLFxuICAgICAgICAgIHNjcmVlbnNob3RzOiBwYXJzZUFycmF5KHBhcnNlTnVtYmVyKShvcHRzLnNjcmVlbnNob3RzKSxcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGxvZ2dlci5mYXRhbChlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgYXdhaXQgcHJvZ3JhbS5wYXJzZUFzeW5jKHBhcmdzKCkpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8wMS5cblxuaW1wb3J0IHR5cGUgeyBDaGlsZFByb2Nlc3MgfSBmcm9tIFwibm9kZTpjaGlsZF9wcm9jZXNzXCI7XG5pbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tIFwibm9kZTpldmVudHNcIjtcblxuZXhwb3J0IGVudW0gSXBjTXNnVHlwZSB7XG4gIC8vIGNoaWxkIOKGkiBwYXJlbnRcbiAgQ29uc29sZSA9IFwiY29uc29sZVwiLFxuICBQcm9ncmVzcyA9IFwicHJvZ3Jlc3NcIixcbiAgRG9uZSA9IFwiZG9uZVwiLFxuICBFcnJvciA9IFwiZXJyb3JcIixcbiAgLy8gcGFyZW50IOKGkiBjaGlsZFxuICBDYW5jZWwgPSBcImNhbmNlbFwiLFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbnNvbGVNc2cge1xuICB0eXBlOiBJcGNNc2dUeXBlLkNvbnNvbGU7XG4gIGxldmVsOiBzdHJpbmc7XG4gIG1lc3NhZ2U6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDYW5jZWxNc2cge1xuICB0eXBlOiBJcGNNc2dUeXBlLkNhbmNlbDtcbiAgcmVhc29uPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElwY0RvbmVQYXlsb2FkIHtcbiAgd3JpdHRlbjogbnVtYmVyO1xuICBvdXRGaWxlczogc3RyaW5nW107XG4gIGJsYW5rOiBudW1iZXI7XG4gIGphbms6IG51bWJlcjtcbiAgc2NyZWVuc2hvdHM6IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFByb2dyZXNzTXNnIHtcbiAgdHlwZTogSXBjTXNnVHlwZS5Qcm9ncmVzcztcbiAgdmFsdWU6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEb25lTXNnIHtcbiAgdHlwZTogSXBjTXNnVHlwZS5Eb25lO1xuICBwYXlsb2FkOiBJcGNEb25lUGF5bG9hZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFcnJvck1zZyB7XG4gIHR5cGU6IElwY01zZ1R5cGUuRXJyb3I7XG4gIGVycm9yOiBzdHJpbmc7XG59XG5cbmV4cG9ydCB0eXBlIElwY01zZyA9IENvbnNvbGVNc2cgfCBQcm9ncmVzc01zZyB8IERvbmVNc2cgfCBFcnJvck1zZyB8IENhbmNlbE1zZztcblxuZXhwb3J0IGludGVyZmFjZSBJcGNFdmVudHMge1xuICBwcm9ncmVzczogW3ZhbHVlOiBudW1iZXJdO1xuICBjb25zb2xlOiBbbGV2ZWw6IHN0cmluZywgbXNnOiBzdHJpbmddO1xuICBkb25lOiBbcGF5bG9hZDogSXBjRG9uZVBheWxvYWRdO1xuICBlcnJvcjogW2Vycm9yOiBFcnJvcl07XG4gIGNsb3NlOiBbY29kZTogbnVtYmVyIHwgbnVsbF07XG59XG5cbmV4cG9ydCBjbGFzcyBJcGNXcml0ZXIge1xuICB3cml0ZUNvbnNvbGUobGV2ZWw6IHN0cmluZywgbWVzc2FnZTogc3RyaW5nKSB7XG4gICAgdGhpcy5zZW5kKHsgdHlwZTogSXBjTXNnVHlwZS5Db25zb2xlLCBsZXZlbCwgbWVzc2FnZSB9KTtcbiAgfVxuXG4gIHdyaXRlUHJvZ3Jlc3ModmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuc2VuZCh7IHR5cGU6IElwY01zZ1R5cGUuUHJvZ3Jlc3MsIHZhbHVlIH0pO1xuICB9XG5cbiAgd3JpdGVFcnJvcihlcnJvcjogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuc2VuZCh7IHR5cGU6IElwY01zZ1R5cGUuRXJyb3IsIGVycm9yIH0pO1xuICB9XG5cbiAgd3JpdGVEb25lKHBheWxvYWQ6IElwY0RvbmVQYXlsb2FkKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuc2VuZCh7IHR5cGU6IElwY01zZ1R5cGUuRG9uZSwgcGF5bG9hZCB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2VuZChtc2c6IElwY01zZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgaWYgKCFwcm9jZXNzLnNlbmQpIHtcbiAgICAgICAgcmV0dXJuIHJlc29sdmUoKTtcbiAgICAgIH1cbiAgICAgIHByb2Nlc3Muc2VuZChtc2csICgpID0+IHJlc29sdmUoKSk7XG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIElwY1JlYWRlciBleHRlbmRzIEV2ZW50RW1pdHRlcjxJcGNFdmVudHM+IHtcbiAgY29uc3RydWN0b3IoY2hpbGQ6IENoaWxkUHJvY2Vzcykge1xuICAgIHN1cGVyKCk7XG4gICAgY2hpbGQub24oXCJtZXNzYWdlXCIsIChyYXcpID0+IHtcbiAgICAgIGNvbnN0IG1zZyA9IHJhdyBhcyBJcGNNc2c7XG4gICAgICBzd2l0Y2ggKG1zZy50eXBlKSB7XG4gICAgICAgIGNhc2UgSXBjTXNnVHlwZS5Db25zb2xlOiB7XG4gICAgICAgICAgdGhpcy5lbWl0KFwiY29uc29sZVwiLCBtc2cubGV2ZWwsIG1zZy5tZXNzYWdlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIElwY01zZ1R5cGUuUHJvZ3Jlc3M6IHtcbiAgICAgICAgICB0aGlzLmVtaXQoXCJwcm9ncmVzc1wiLCBtc2cudmFsdWUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgSXBjTXNnVHlwZS5Eb25lOiB7XG4gICAgICAgICAgdGhpcy5lbWl0KFwiZG9uZVwiLCBtc2cucGF5bG9hZCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBJcGNNc2dUeXBlLkVycm9yOiB7XG4gICAgICAgICAgdGhpcy5lbWl0KFwiZXJyb3JcIiwgbmV3IEVycm9yKG1zZy5lcnJvcikpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgY2hpbGQub25jZShcImV4aXRcIiwgKGMpID0+IHRoaXMuZW1pdChcImNsb3NlXCIsIGMpKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wOS5cblxuZXhwb3J0IGZ1bmN0aW9uIHNsZWVwKG1zOiBudW1iZXIpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIG1zKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3aXRoVGltZW91dDxUPihwOiBQcm9taXNlPFQ+LCBtczogbnVtYmVyLCBsYWJlbDogc3RyaW5nKTogUHJvbWlzZTxUPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHJlamVjdChuZXcgRXJyb3IoYCR7bGFiZWx9IHRpbWVkIG91dCBhZnRlciAke21zfW1zYCkpLCBtcyk7XG4gICAgcC50aGVuKHJlc29sdmUsIHJlamVjdCkuZmluYWxseSgoKSA9PiBjbGVhclRpbWVvdXQodGltZXIpKTtcbiAgfSk7XG59XG5cbi8vIFJlamVjdCBhcyBzb29uIGFzIGBzaWduYWxgIGFib3J0cywgZWxzZSBzZXR0bGUgd2l0aCBgcGA7IG5vLW9wIHBhc3N0aHJvdWdoIHdoZW4gbm8gc2lnbmFsLlxuZXhwb3J0IGZ1bmN0aW9uIGFib3J0YWJsZTxUPihwOiBQcm9taXNlPFQ+LCBzaWduYWw/OiBBYm9ydFNpZ25hbCk6IFByb21pc2U8VD4ge1xuICBpZiAoIXNpZ25hbCkge1xuICAgIHJldHVybiBwO1xuICB9XG4gIHJldHVybiBuZXcgUHJvbWlzZTxUPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3Qgb25BYm9ydCA9ICgpID0+IHJlamVjdChzaWduYWwucmVhc29uKTtcbiAgICBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsIG9uQWJvcnQsIHsgb25jZTogdHJ1ZSB9KTtcbiAgICBwLnRoZW4ocmVzb2x2ZSwgcmVqZWN0KS5maW5hbGx5KCgpID0+IHNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgb25BYm9ydCkpO1xuICB9KTtcbn1cblxuLy8gQ2FsbGJhY2sgbWF5IHJldHVybiB0aGUgbmV4dCBpbnRlcnZhbCAobXMpIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IGZvciB0aGUgZm9sbG93aW5nIHRpY2suXG5leHBvcnQgZnVuY3Rpb24gcGVyaW9kaWNhbChjYWxsYmFjazogKGNvdW50OiBudW1iZXIpID0+IFByb21pc2U8bnVtYmVyIHwgdW5kZWZpbmVkPiB8IHVuZGVmaW5lZCwgbXM6IG51bWJlcikge1xuICBsZXQgdG9rZW46IE5vZGVKUy5UaW1lb3V0O1xuICBsZXQgY2xvc2VkID0gZmFsc2U7XG4gIGFzeW5jIGZ1bmN0aW9uIHRpY2soY291bnQ6IG51bWJlcikge1xuICAgIGNvbnN0IG5leHQgPSBhd2FpdCBjYWxsYmFjayhjb3VudCk7XG4gICAgaWYgKGNsb3NlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0b2tlbiA9IHNldFRpbWVvdXQoKCkgPT4gdGljayhjb3VudCArIDEpLCBuZXh0ID8/IG1zKTtcbiAgfVxuICB0b2tlbiA9IHNldFRpbWVvdXQoKCkgPT4gdGljaygwKSwgbXMpO1xuICByZXR1cm4gKCkgPT4ge1xuICAgIGNsb3NlZCA9IHRydWU7XG4gICAgY2xlYXJUaW1lb3V0KHRva2VuKTtcbiAgfTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDMvMTMuXG5cbmltcG9ydCB0eXBlIHsgRGVidWdnZXIsIFNpemUsIFdlYkNvbnRlbnRzIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyB3aXRoVGltZW91dCB9IGZyb20gXCIuL3RpbWluZ1wiO1xuXG5jb25zdCBDRFBfVElNRU9VVF9NUyA9IDVfMDAwO1xuXG5leHBvcnQgZnVuY3Rpb24gc2VuZChjZHA6IERlYnVnZ2VyLCBtZXRob2Q6IHN0cmluZywgcGFyYW1zPzogb2JqZWN0KTogUHJvbWlzZTx1bmtub3duPiB7XG4gIHJldHVybiB3aXRoVGltZW91dChjZHAuc2VuZENvbW1hbmQobWV0aG9kLCBwYXJhbXMpLCBDRFBfVElNRU9VVF9NUywgYGNkcC4ke21ldGhvZH1gKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV2YWxJbihjZHA6IERlYnVnZ2VyLCBleHByZXNzaW9uOiBzdHJpbmcpOiBQcm9taXNlPHVua25vd24+IHtcbiAgcmV0dXJuIHdpdGhUaW1lb3V0KHNlbmQoY2RwLCBcIlJ1bnRpbWUuZXZhbHVhdGVcIiwgeyBleHByZXNzaW9uIH0pLCBDRFBfVElNRU9VVF9NUywgXCJldmFsSW5cIik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhZHZhbmNlVmlydHVhbFRpbWUoY2RwOiBEZWJ1Z2dlciwgYnVkZ2V0OiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjZHAub2ZmKFwibWVzc2FnZVwiLCBoYW5kbGVyKTtcbiAgICAgIHJlamVjdChuZXcgRXJyb3IoYGFkdmFuY2VWaXJ0dWFsVGltZSB0aW1lZCBvdXQgYWZ0ZXIgJHtDRFBfVElNRU9VVF9NU31tc2ApKTtcbiAgICB9LCBDRFBfVElNRU9VVF9NUyk7XG5cbiAgICBjb25zdCBoYW5kbGVyID0gKF86IEVsZWN0cm9uLkV2ZW50LCBtZXRob2Q6IHN0cmluZykgPT4ge1xuICAgICAgaWYgKG1ldGhvZCA9PT0gXCJFbXVsYXRpb24udmlydHVhbFRpbWVCdWRnZXRFeHBpcmVkXCIpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICBjZHAub2ZmKFwibWVzc2FnZVwiLCBoYW5kbGVyKTtcbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgfVxuICAgIH07XG4gICAgY2RwLm9uKFwibWVzc2FnZVwiLCBoYW5kbGVyKTtcbiAgICAvLyBObyBzdGFydmF0aW9uIGNhcCAod291bGQgc2tpcCBwZW5kaW5nIHdvcmsgbm9uLWRldGVybWluaXN0aWNhbGx5KTsgY2FwdHVyZSBzdGFydHMgcG9zdCBkaWQtc3RvcC1sb2FkaW5nLCBhbmQgQ0RQX1RJTUVPVVRfTVMgdHVybnMgYSByZWFsIHN0YWxsIGludG8gYSBmYWlsZWQgcmVuZGVyLlxuICAgIHNlbmQoY2RwLCBcIkVtdWxhdGlvbi5zZXRWaXJ0dWFsVGltZVBvbGljeVwiLCB7XG4gICAgICBwb2xpY3k6IFwiYWR2YW5jZVwiLFxuICAgICAgYnVkZ2V0LFxuICAgIH0pLmNhdGNoKChlKSA9PiB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICBjZHAub2ZmKFwibWVzc2FnZVwiLCBoYW5kbGVyKTtcbiAgICAgIHJlamVjdChlKTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwYXVzZVZpcnR1YWxUaW1lKGNkcDogRGVidWdnZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgc2VuZChjZHAsIFwiRW11bGF0aW9uLnNldFZpcnR1YWxUaW1lUG9saWN5XCIsIHsgcG9saWN5OiBcInBhdXNlXCIgfSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWJ1aWxkRHJhd2FibGUod2ViOiBXZWJDb250ZW50cywgc2l6ZTogU2l6ZSkge1xuICB0cnkge1xuICAgIGNvbnN0IGNkcCA9IHdlYi5kZWJ1Z2dlcjtcbiAgICBhd2FpdCBzZW5kKGNkcCwgXCJFbXVsYXRpb24uY2xlYXJEZXZpY2VNZXRyaWNzT3ZlcnJpZGVcIiwge30pO1xuICAgIGF3YWl0IHNlbmQoY2RwLCBcIkVtdWxhdGlvbi5zZXREZXZpY2VNZXRyaWNzT3ZlcnJpZGVcIiwge1xuICAgICAgLi4uc2l6ZSxcbiAgICAgIGRldmljZVNjYWxlRmFjdG9yOiAxLFxuICAgICAgbW9iaWxlOiBmYWxzZSxcbiAgICB9KTtcbiAgICB3ZWIuaW52YWxpZGF0ZSgpO1xuICB9IGNhdGNoIHtcbiAgICAvLyBTdGggbGlrZSB0ZWFyZG93biBkZXRhY2ggcmVqZWN0cyBpbi1mbGlnaHQgQ0RQIHNlbmRzOyBhIGxvc3QgcmVwYWludCBraWNrIGlzIGhhcm1sZXNzLlxuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAyLzA5LlxuXG5pbXBvcnQgdHlwZSB7IERlYnVnZ2VyLCBTaXplLCBXZWJDb250ZW50cyB9IGZyb20gXCJlbGVjdHJvblwiO1xuaW1wb3J0IHsgZXZhbEluIH0gZnJvbSBcIi4uL2Jhc2UvY2RwXCI7XG5pbXBvcnQgeyB3aXRoVGltZW91dCB9IGZyb20gXCIuLi9iYXNlL3RpbWluZ1wiO1xuXG5leHBvcnQgY29uc3QgRlJBTUVfU1lOQ19NQVJLRVJfV0lEVEggPSAzMjtcbmV4cG9ydCBjb25zdCBGUkFNRV9TWU5DX01BUktFUl9IRUlHSFQgPSAxO1xuZXhwb3J0IGNvbnN0IFNURUdPX1RJQ0tfQ0hBTk5FTCA9IFwic3RlZ28tdGlja1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRTdGVnb0hUTUwodGFyZ2V0VVJMOiBzdHJpbmcsIHNpemU6IFNpemUpOiBzdHJpbmcge1xuICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IHNpemU7XG4gIHJldHVybiBgPCFET0NUWVBFIGh0bWw+XG48aHRtbD5cbjxoZWFkPlxuICA8bWV0YSBjaGFyc2V0PVwiVVRGLThcIj5cbiAgPHN0eWxlPlxuICAgICogeyBtYXJnaW46IDA7IHBhZGRpbmc6IDA7IGJveC1zaXppbmc6IGJvcmRlci1ib3g7IH1cbiAgICBodG1sLCBib2R5IHsgd2lkdGg6ICR7d2lkdGh9cHg7IGhlaWdodDogJHtoZWlnaHQgKyAxfXB4OyBvdmVyZmxvdzogaGlkZGVuOyB9XG4gICAgI3RhcmdldCB7IFxuICAgICAgcG9zaXRpb246IGFic29sdXRlOyBcbiAgICAgIHRvcDogMDsgXG4gICAgICBsZWZ0OiAwOyBcbiAgICAgIHdpZHRoOiAke3dpZHRofXB4OyBcbiAgICAgIGhlaWdodDogJHtoZWlnaHR9cHg7IFxuICAgICAgYm9yZGVyOiBub25lOyBcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIH1cbiAgICAjc3RlZ28ge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgdG9wOiAke2hlaWdodH1weDtcbiAgICAgIGxlZnQ6IDA7XG4gICAgICB3aWR0aDogJHt3aWR0aH1weDtcbiAgICAgIGhlaWdodDogMXB4O1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICBpbWFnZS1yZW5kZXJpbmc6IHBpeGVsYXRlZDtcbiAgICB9XG4gIDwvc3R5bGU+XG48L2hlYWQ+XG48Ym9keT5cbiAgPGlmcmFtZSBpZD1cInRhcmdldFwiIHNyYz1cIiR7dGFyZ2V0VVJMfVwiPjwvaWZyYW1lPlxuICA8Y2FudmFzIGlkPVwic3RlZ29cIiB3aWR0aD1cIiR7d2lkdGh9XCIgaGVpZ2h0PVwiMVwiPjwvY2FudmFzPlxuICA8c2NyaXB0PlxuICAgIChmdW5jdGlvbigpIHtcbiAgICAgIGNvbnN0IFdJRFRIID0gJHt3aWR0aH07XG4gICAgICBjb25zdCBNQVJLRVJfV0lEVEggPSAke0ZSQU1FX1NZTkNfTUFSS0VSX1dJRFRIfTtcbiAgICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdGVnbycpO1xuICAgICAgY29uc3QgY3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJywgeyB3aWxsUmVhZEZyZXF1ZW50bHk6IHRydWUgfSk7XG4gICAgICBsZXQgc3RhcnRUaW1lID0gbnVsbDtcbiAgICAgIGxldCByYWZJZCA9IG51bGw7XG5cbiAgICAgIGZ1bmN0aW9uIGVuY29kZVRpbWVzdGFtcCh0aW1lc3RhbXBNcykge1xuICAgICAgICBjb25zdCBpbWFnZURhdGEgPSBjdHguY3JlYXRlSW1hZ2VEYXRhKFdJRFRILCAxKTtcbiAgICAgICAgY29uc3QgZGF0YSA9IGltYWdlRGF0YS5kYXRhO1xuXG4gICAgICAgIGNvbnN0IHRpbWVzdGFtcEludCA9IE1hdGguZmxvb3IodGltZXN0YW1wTXMpID4+PiAwO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgTUFSS0VSX1dJRFRIOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBiaXQgPSAodGltZXN0YW1wSW50ID4+PiAoTUFSS0VSX1dJRFRIIC0gMSAtIGkpKSAmIDE7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSBiaXQgPyAyNTUgOiAwO1xuICAgICAgICAgIGNvbnN0IGlkeCA9IGkgKiA0O1xuICAgICAgICAgIGRhdGFbaWR4XSA9IHZhbHVlO1xuICAgICAgICAgIGRhdGFbaWR4ICsgMV0gPSB2YWx1ZTtcbiAgICAgICAgICBkYXRhW2lkeCArIDJdID0gdmFsdWU7XG4gICAgICAgICAgZGF0YVtpZHggKyAzXSA9IDI1NTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAobGV0IGkgPSBNQVJLRVJfV0lEVEg7IGkgPCBXSURUSDsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgaWR4ID0gaSAqIDQ7XG4gICAgICAgICAgZGF0YVtpZHhdID0gMDtcbiAgICAgICAgICBkYXRhW2lkeCArIDFdID0gMDtcbiAgICAgICAgICBkYXRhW2lkeCArIDJdID0gMDtcbiAgICAgICAgICBkYXRhW2lkeCArIDNdID0gMjU1O1xuICAgICAgICB9XG5cbiAgICAgICAgY3R4LnB1dEltYWdlRGF0YShpbWFnZURhdGEsIDAsIDApO1xuICAgICAgICB3aW5kb3cuX19wdXBfc3RlZ29fdGlja19fKCk7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIHVwZGF0ZUxvb3AoKSB7XG4gICAgICAgIGlmIChzdGFydFRpbWUgPT09IG51bGwpIHJldHVybjtcbiAgICAgICAgY29uc3QgZWxhcHNlZCA9IHBlcmZvcm1hbmNlLm5vdygpIC0gc3RhcnRUaW1lO1xuICAgICAgICBlbmNvZGVUaW1lc3RhbXAoZWxhcHNlZCk7XG4gICAgICAgIHJhZklkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHVwZGF0ZUxvb3ApO1xuICAgICAgfVxuXG4gICAgICB3aW5kb3cuX19wdXBfc3RhcnRfc3RlZ29fXyA9ICgpID0+IHtcbiAgICAgICAgc3RhcnRUaW1lID0gcGVyZm9ybWFuY2Uubm93KCk7XG4gICAgICAgIGVuY29kZVRpbWVzdGFtcCgwKTtcbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHVwZGF0ZUxvb3ApO1xuICAgICAgfTtcblxuICAgICAgd2luZG93Ll9fcHVwX2RyYXdfc3RlZ29fXyA9IChtcykgPT4ge1xuICAgICAgICBlbmNvZGVUaW1lc3RhbXAobXMpO1xuICAgICAgfTtcblxuICAgICAgd2luZG93Ll9fcHVwX3N0b3Bfc3RlZ29fXyA9ICgpID0+IHtcbiAgICAgICAgaWYgKHJhZklkICE9PSBudWxsKSB7XG4gICAgICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUocmFmSWQpO1xuICAgICAgICAgIHJhZklkID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9KSgpO1xuICA8L3NjcmlwdD5cbjwvYm9keT5cbjwvaHRtbD5gO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVjb2RlU3RlZ28oYml0bWFwOiBCdWZmZXIsIHNpemU6IFNpemUpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IHNpemU7XG4gIGlmICh3aWR0aCA8IEZSQU1FX1NZTkNfTUFSS0VSX1dJRFRIIHx8IGhlaWdodCA8IDIpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgbWFya2VyUm93ID0gaGVpZ2h0IC0gMTtcblxuICBsZXQgdGltZXN0YW1wID0gMDtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBGUkFNRV9TWU5DX01BUktFUl9XSURUSDsgaSsrKSB7XG4gICAgY29uc3QgcGl4ZWxJZHggPSAobWFya2VyUm93ICogd2lkdGggKyBpKSAqIDQ7XG4gICAgY29uc3QgciA9IGJpdG1hcFtwaXhlbElkeF0gPz8gMDtcbiAgICBjb25zdCBiaXQgPSByID4gMTI3ID8gMSA6IDA7XG4gICAgdGltZXN0YW1wID0gKHRpbWVzdGFtcCA8PCAxKSB8IGJpdDtcbiAgfVxuXG4gIHRpbWVzdGFtcCA9IHRpbWVzdGFtcCA+Pj4gMDtcblxuICBpZiAoIU51bWJlci5pc0Zpbml0ZSh0aW1lc3RhbXApIHx8IHRpbWVzdGFtcCA8IDAgfHwgdGltZXN0YW1wID4gMWU3KSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHJldHVybiB0aW1lc3RhbXA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGFydFN0ZWdvKGNkcDogRGVidWdnZXIpIHtcbiAgcmV0dXJuIGV2YWxJbihjZHAsIGBfX3B1cF9zdGFydF9zdGVnb19fKClgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0b3BTdGVnbyhjZHA6IERlYnVnZ2VyKSB7XG4gIHJldHVybiBldmFsSW4oY2RwLCBgX19wdXBfc3RvcF9zdGVnb19fKClgKTtcbn1cblxuLy8gUGFpbnRzIHRoZSBzdGVnbyByb3cgZm9yIGBleHBlY3RlZGAgbXMgc3luY2hyb25vdXNseTsgdGhlIGRhbWFnZSByaWRlcyBvdXQgb24gdGhlIG5leHQgY29tcG9zaXRlZCBmcmFtZS5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkcmF3U3RlZ28od2M6IFdlYkNvbnRlbnRzLCBleHBlY3RlZDogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IGV2YWxJbih3Yy5kZWJ1Z2dlciwgYF9fcHVwX2RyYXdfc3RlZ29fXygke2V4cGVjdGVkfSlgKTtcbn1cblxuLy8gUmVzb2x2ZXMgd2hlbiB0aGUgcmVuZGVyZXIgY29tbWl0dGVkIHRoZSBzdGVnbyByb3c7IGFybSBCRUZPUkUgZHJhd1N0ZWdvIHRvIGF2b2lkIG1pc3NpbmcgdGhlIGFjay5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3YWl0U3RlZ29UaWNrKHdjOiBXZWJDb250ZW50cyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBzd2FwcGVkID0gbmV3IFByb21pc2UoKHIpID0+IHdjLmlwYy5vbmNlKFNURUdPX1RJQ0tfQ0hBTk5FTCwgcikpO1xuICBhd2FpdCB3aXRoVGltZW91dChzd2FwcGVkLCA1XzAwMCwgXCJzdGVnbyB0aWNrXCIpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8wMS5cblxuaW1wb3J0IHR5cGUgeyBTaXplIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBwcm90b2NvbCB9IGZyb20gXCJlbGVjdHJvblwiO1xuaW1wb3J0IHsgYnVpbGRTdGVnb0hUTUwgfSBmcm9tIFwiLi9zdGVnb1wiO1xuXG5jb25zdCBQVVBfU0NIRU1FID0gXCJwdXBcIjtcbmNvbnN0IEZSQU1FX1NDSEVNRSA9IFwicHVwLWZyYW1lXCI7XG5cbi8vIHJlZ2lzdGVyU2NoZW1lc0FzUHJpdmlsZWdlZCBob25vcnMgb25seSB0aGUgTEFTVCBjYWxsIOKAlCByZWdpc3RlciBldmVyeSBjdXN0b20gc2NoZW1lIGluIHRoaXMgb25lIGxpc3QgYmVsb3cuXG5jb25zdCBQUklWSUxFR0VEX1BSSVZJTEVHRVMgPSB7XG4gIHN0YW5kYXJkOiB0cnVlLFxuICBzZWN1cmU6IHRydWUsXG4gIC8vIEEgcGFnZSdzIG93biBDU1Agd291bGQgb3RoZXJ3aXNlIHJlZnVzZSB0aGUgdmlkZW8gaG9vaydzIGZldGNoIG9mIHB1cC1mcmFtZTovLyBzdHVicyAoY29ubmVjdC1zcmMpLlxuICBieXBhc3NDU1A6IHRydWUsXG4gIHN1cHBvcnRGZXRjaEFQSTogdHJ1ZSxcbiAgY29yc0VuYWJsZWQ6IHRydWUsXG4gIHN0cmVhbTogdHJ1ZSxcbiAgY29kZUNhY2hlOiB0cnVlLFxufSBhcyBjb25zdDtcblxuLy8gTXVzdCBiZSBjYWxsZWQgc3luY2hyb25vdXNseSBiZWZvcmUgYXBwIGlzIHJlYWR5LlxucHJvdG9jb2wucmVnaXN0ZXJTY2hlbWVzQXNQcml2aWxlZ2VkKFtcbiAgeyBzY2hlbWU6IFBVUF9TQ0hFTUUsIHByaXZpbGVnZXM6IFBSSVZJTEVHRURfUFJJVklMRUdFUyB9LFxuICB7IHNjaGVtZTogRlJBTUVfU0NIRU1FLCBwcml2aWxlZ2VzOiBQUklWSUxFR0VEX1BSSVZJTEVHRVMgfSxcbl0pO1xuXG4vLyBNdXN0IGJlIGNhbGxlZCBhZnRlciBhcHAgaXMgcmVhZHkuXG5leHBvcnQgZnVuY3Rpb24gc2V0dXBQdXBQcm90b2NvbCgpOiB2b2lkIHtcbiAgcHJvdG9jb2wuaGFuZGxlKFBVUF9TQ0hFTUUsIChyZXEpID0+IHtcbiAgICBjb25zdCB1cmwgPSBuZXcgVVJMKHJlcS51cmwpO1xuICAgIGNvbnN0IHNyYyA9IHVybC5zZWFyY2hQYXJhbXMuZ2V0KFwic3JjXCIpID8/IFwiXCI7XG4gICAgY29uc3Qgd2lkdGggPSBwYXJzZUludCh1cmwuc2VhcmNoUGFyYW1zLmdldChcIndcIikgPz8gXCIwXCIsIDEwKTtcbiAgICBjb25zdCBoZWlnaHQgPSBwYXJzZUludCh1cmwuc2VhcmNoUGFyYW1zLmdldChcImhcIikgPz8gXCIwXCIsIDEwKTtcbiAgICBjb25zdCBodG1sID0gYnVpbGRTdGVnb0hUTUwoc3JjLCB7IHdpZHRoLCBoZWlnaHQgfSk7XG4gICAgcmV0dXJuIG5ldyBSZXNwb25zZShodG1sLCB7IGhlYWRlcnM6IHsgXCJjb250ZW50LXR5cGVcIjogXCJ0ZXh0L2h0bWxcIiB9IH0pO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVN0ZWdvVVJMKHNyYzogc3RyaW5nLCBzaXplOiBTaXplKTogc3RyaW5nIHtcbiAgY29uc3QgdXJsID0gbmV3IFVSTChgJHtQVVBfU0NIRU1FfTovL3N0ZWdvYCk7XG4gIHVybC5zZWFyY2hQYXJhbXMuc2V0KFwic3JjXCIsIHNyYy5yZXBsYWNlKFwiaHR0cDovL1wiLCBcImh0dHBzOi8vXCIpKTtcbiAgdXJsLnNlYXJjaFBhcmFtcy5zZXQoXCJ3XCIsIFN0cmluZyhzaXplLndpZHRoKSk7XG4gIHVybC5zZWFyY2hQYXJhbXMuc2V0KFwiaFwiLCBTdHJpbmcoc2l6ZS5oZWlnaHQpKTtcbiAgcmV0dXJuIHVybC50b1N0cmluZygpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMS8zMC5cblxuaW50ZXJmYWNlIFF1ZXVlRW50cnkge1xuICBydW46IFZvaWRGdW5jdGlvbjtcbiAgcmVqZWN0OiAocmVhc29uOiB1bmtub3duKSA9PiB2b2lkO1xuICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbn1cblxuZXhwb3J0IGNsYXNzIENvbmN1cnJlbmN5TGltaXRlciB7XG4gIHByaXZhdGUgX2FjdGl2ZSA9IDA7XG4gIHByaXZhdGUgX3F1ZXVlOiBRdWV1ZUVudHJ5W10gPSBbXTtcbiAgcHJpdmF0ZSBfc2lnbmFscyA9IG5ldyBXZWFrU2V0PEFib3J0U2lnbmFsPigpO1xuICBwcml2YXRlIF9yZXNvbHZlPzogVm9pZEZ1bmN0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKHJlYWRvbmx5IG1heENvbmN1cnJlbmN5OiBudW1iZXIpIHt9XG5cbiAgZ2V0IGFjdGl2ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9hY3RpdmU7XG4gIH1cblxuICBnZXQgcGVuZGluZygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9xdWV1ZS5sZW5ndGg7XG4gIH1cblxuICBnZXQgc3RhdHMoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYGFjdGl2ZTogJHt0aGlzLmFjdGl2ZX0sIHBlbmRpbmc6ICR7dGhpcy5wZW5kaW5nfWA7XG4gIH1cblxuICBhc3luYyBzY2hlZHVsZTxUPihmbjogKCkgPT4gUHJvbWlzZTxUPiwgc2lnbmFsPzogQWJvcnRTaWduYWwpOiBQcm9taXNlPFQ+IHtcbiAgICBzaWduYWw/LnRocm93SWZBYm9ydGVkKCk7XG5cbiAgICBpZiAoc2lnbmFsICYmICF0aGlzLl9zaWduYWxzLmhhcyhzaWduYWwpKSB7XG4gICAgICB0aGlzLl9zaWduYWxzLmFkZChzaWduYWwpO1xuICAgICAgc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCAoKSA9PiB0aGlzLmZsdXNoKHNpZ25hbCksIHsgb25jZTogdHJ1ZSB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2U8VD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpcy5fcXVldWUucHVzaCh7XG4gICAgICAgIHJ1bjogKCkgPT4ge1xuICAgICAgICAgIGlmIChzaWduYWw/LmFib3J0ZWQpIHtcbiAgICAgICAgICAgIHJlamVjdChzaWduYWwucmVhc29uKTtcbiAgICAgICAgICAgIHRoaXMubmV4dCgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLl9hY3RpdmUrKztcbiAgICAgICAgICBmbigpXG4gICAgICAgICAgICAudGhlbigodikgPT4ge1xuICAgICAgICAgICAgICB0aGlzLl9hY3RpdmUtLTtcbiAgICAgICAgICAgICAgcmVzb2x2ZSh2KTtcbiAgICAgICAgICAgICAgdGhpcy5uZXh0KCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuX2FjdGl2ZS0tO1xuICAgICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgICAgIHRoaXMubmV4dCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIHJlamVjdCxcbiAgICAgICAgc2lnbmFsLFxuICAgICAgfSk7XG4gICAgICB0aGlzLm5leHQoKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGRyYWluKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9hY3RpdmUgPT09IDAgJiYgdGhpcy5wZW5kaW5nID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocikgPT4gKHRoaXMuX3Jlc29sdmUgPSByKSk7XG4gIH1cblxuICBwcml2YXRlIGZsdXNoKHNpZ25hbDogQWJvcnRTaWduYWwpIHtcbiAgICBjb25zdCBrZWVwOiBRdWV1ZUVudHJ5W10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIHRoaXMuX3F1ZXVlKSB7XG4gICAgICBpZiAoZW50cnkuc2lnbmFsID09PSBzaWduYWwpIHtcbiAgICAgICAgZW50cnkucmVqZWN0KHNpZ25hbC5yZWFzb24pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAga2VlcC5wdXNoKGVudHJ5KTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5fcXVldWUgPSBrZWVwO1xuICAgIHRoaXMubmV4dCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBuZXh0KCkge1xuICAgIGlmICh0aGlzLl9hY3RpdmUgPT09IDAgJiYgdGhpcy5wZW5kaW5nID09PSAwKSB7XG4gICAgICB0aGlzLl9yZXNvbHZlPy4oKTtcbiAgICAgIHRoaXMuX3Jlc29sdmUgPSB1bmRlZmluZWQ7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLl9hY3RpdmUgPCB0aGlzLm1heENvbmN1cnJlbmN5KSB7XG4gICAgICB0aGlzLl9xdWV1ZS5zaGlmdCgpPy5ydW4oKTtcbiAgICB9XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMTIuXG5cbmltcG9ydCB7XG4gIHR5cGUgQ29kZWMsXG4gIENvZGVjQ29udGV4dCxcbiAgRkZtcGVnRXJyb3IsXG4gIEZyYW1lLFxuICB0eXBlIEhhcmR3YXJlRnJhbWVzQ29udGV4dCxcbiAgUGFja2V0LFxuICBSYXRpb25hbCxcbiAgdHlwZSBTdHJlYW0sXG59IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQge1xuICBBVl9DT0RFQ19GTEFHX0dMT0JBTF9IRUFERVIsXG4gIHR5cGUgQVZDb2xvclJhbmdlLFxuICBBVkVSUk9SX0VBR0FJTixcbiAgQVZFUlJPUl9FT0YsXG4gIHR5cGUgQVZQaXhlbEZvcm1hdCxcbiAgdHlwZSBGRlZpZGVvRW5jb2Rlcixcbn0gZnJvbSBcIm5vZGUtYXYvY29uc3RhbnRzXCI7XG5pbXBvcnQgdHlwZSB7IEZvcm1hdE11eGVyIH0gZnJvbSBcIi4vbXV4ZXJcIjtcblxuLy8gbm9kZS1hdiA1LjIuMyBjb25zdGFudCBpcyB3cm9uZzsgZmZtcGVnIHJlZ2lzdGVycyB3aXRoIGRhc2guXG5leHBvcnQgY29uc3QgRkZfRU5DT0RFUl9MSUJWUFhfVlA5ID0gXCJsaWJ2cHgtdnA5XCIgYXMgRkZWaWRlb0VuY29kZXI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmlkZW9DdHhPcHRpb25zIHtcbiAgY29kZWM6IENvZGVjO1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgZnBzOiBudW1iZXI7XG4gIGJpdHJhdGU6IG51bWJlcjtcbiAgcGl4ZWxGb3JtYXQ6IEFWUGl4ZWxGb3JtYXQ7XG4gIGNvZGVjVGFnPzogc3RyaW5nO1xuICBjb2xvclJhbmdlPzogQVZDb2xvclJhbmdlO1xuICBvcHRpb25zPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgaHdGcmFtZXNDdHg/OiBIYXJkd2FyZUZyYW1lc0NvbnRleHQ7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBvcGVuVmlkZW9DdHgob3B0czogVmlkZW9DdHhPcHRpb25zLCBsYWJlbDogc3RyaW5nKTogUHJvbWlzZTxDb2RlY0NvbnRleHQ+IHtcbiAgY29uc3QgY3R4ID0gbmV3IENvZGVjQ29udGV4dCgpO1xuICBjdHguYWxsb2NDb250ZXh0MyhvcHRzLmNvZGVjKTtcbiAgLy8gUGFydGlhbC1jb25zdHJ1Y3Rpb24gc2FmZXR5OiBmcmVlIGN0eCBpZiBhbnkgc2V0dGVyL29wZW4yIHRocm93cyBiZWZvcmUgd2UgcmV0dXJuIGl0LlxuICB1c2luZyBzdGFjayA9IG5ldyBEaXNwb3NhYmxlU3RhY2soKTtcbiAgc3RhY2sudXNlKGN0eCk7XG4gIGN0eC5jb2RlY0lkID0gb3B0cy5jb2RlYy5pZDtcbiAgY3R4LndpZHRoID0gb3B0cy53aWR0aDtcbiAgY3R4LmhlaWdodCA9IG9wdHMuaGVpZ2h0O1xuICBjdHgucGl4ZWxGb3JtYXQgPSBvcHRzLnBpeGVsRm9ybWF0O1xuICBjdHgudGltZUJhc2UgPSBuZXcgUmF0aW9uYWwoMSwgb3B0cy5mcHMpO1xuICBjdHguZnJhbWVyYXRlID0gbmV3IFJhdGlvbmFsKG9wdHMuZnBzLCAxKTtcbiAgY3R4LmdvcFNpemUgPSBvcHRzLmZwcyAqIDI7XG4gIGN0eC5iaXRSYXRlID0gQmlnSW50KG9wdHMuYml0cmF0ZSk7XG4gIGN0eC5zZXRGbGFncyhBVl9DT0RFQ19GTEFHX0dMT0JBTF9IRUFERVIpO1xuICBpZiAob3B0cy5jb2RlY1RhZykge1xuICAgIGN0eC5jb2RlY1RhZyA9IG9wdHMuY29kZWNUYWc7XG4gIH1cbiAgaWYgKG9wdHMuY29sb3JSYW5nZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY3R4LmNvbG9yUmFuZ2UgPSBvcHRzLmNvbG9yUmFuZ2U7XG4gIH1cbiAgaWYgKG9wdHMuaHdGcmFtZXNDdHgpIHtcbiAgICBjdHguaHdGcmFtZXNDdHggPSBvcHRzLmh3RnJhbWVzQ3R4O1xuICB9XG4gIGZvciAoY29uc3QgW2ssIHZdIG9mIE9iamVjdC5lbnRyaWVzKG9wdHMub3B0aW9ucyA/PyB7fSkpIHtcbiAgICBjdHguc2V0T3B0aW9uKGssIHYpO1xuICB9XG4gIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCBjdHgub3BlbjIob3B0cy5jb2RlYywgbnVsbCksIGxhYmVsKTtcbiAgc3RhY2subW92ZSgpO1xuICByZXR1cm4gY3R4O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWFrZUZyYW1lKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyLCBwaXhGbXQ6IEFWUGl4ZWxGb3JtYXQpOiBGcmFtZSB7XG4gIGNvbnN0IGZyYW1lID0gbmV3IEZyYW1lKCk7XG4gIGZyYW1lLmFsbG9jKCk7XG4gIC8vIFBhcnRpYWwtY29uc3RydWN0aW9uIHNhZmV0eTogZnJlZSBmcmFtZSBpZiBnZXRCdWZmZXIgdGhyb3dzIGJlZm9yZSB3ZSByZXR1cm4gaXQuXG4gIHVzaW5nIHN0YWNrID0gbmV3IERpc3Bvc2FibGVTdGFjaygpO1xuICBzdGFjay51c2UoZnJhbWUpO1xuICBmcmFtZS5mb3JtYXQgPSBwaXhGbXQ7XG4gIGZyYW1lLndpZHRoID0gd2lkdGg7XG4gIGZyYW1lLmhlaWdodCA9IGhlaWdodDtcbiAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGZyYW1lLmdldEJ1ZmZlcigwKSwgXCJmcmFtZS5nZXRCdWZmZXJcIik7XG4gIHN0YWNrLm1vdmUoKTtcbiAgcmV0dXJuIGZyYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWFrZVBhY2tldCgpOiBQYWNrZXQge1xuICBjb25zdCBwa3QgPSBuZXcgUGFja2V0KCk7XG4gIHBrdC5hbGxvYygpO1xuICByZXR1cm4gcGt0O1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZHJhaW5QYWNrZXRzKGN0eDogQ29kZWNDb250ZXh0LCBwa3Q6IFBhY2tldCwgc3RyZWFtOiBTdHJlYW0sIG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICB3aGlsZSAodHJ1ZSkge1xuICAgIGNvbnN0IHIgPSBhd2FpdCBjdHgucmVjZWl2ZVBhY2tldChwa3QpO1xuICAgIGlmIChyID09PSBBVkVSUk9SX0VBR0FJTiB8fCByID09PSBBVkVSUk9SX0VPRikge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IociwgXCJyZWNlaXZlUGFja2V0XCIpO1xuICAgICAgcGt0LnN0cmVhbUluZGV4ID0gc3RyZWFtLmluZGV4O1xuICAgICAgaWYgKHBrdC5kdXJhdGlvbiA9PT0gMG4pIHtcbiAgICAgICAgcGt0LmR1cmF0aW9uID0gMW47XG4gICAgICB9XG4gICAgICBwa3QucmVzY2FsZVRzKGN0eC50aW1lQmFzZSwgc3RyZWFtLnRpbWVCYXNlKTtcbiAgICAgIGF3YWl0IG11eGVyLndyaXRlUGFja2V0KHBrdCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHBrdC51bnJlZigpO1xuICAgIH1cbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8wMy5cblxuaW1wb3J0IHsgb2sgfSBmcm9tIFwibm9kZTphc3NlcnRcIjtcbmltcG9ydCB7XG4gIEFWX1BJWF9GTVRfQkdSQSxcbiAgQVZfUElYX0ZNVF9ZVVZBNDIwUCxcbiAgdHlwZSBBVlBpeGVsRm9ybWF0LFxuICBDb2RlYyxcbiAgQ29kZWNDb250ZXh0LFxuICBGRl9ERUNPREVSX1BORyxcbiAgRkZtcGVnRXJyb3IsXG4gIHR5cGUgRnJhbWUsXG4gIHR5cGUgUGFja2V0LFxuICBTb2Z0d2FyZVNjYWxlQ29udGV4dCxcbiAgU1dTX0JJTElORUFSLFxufSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHsgbWFrZUZyYW1lLCBtYWtlUGFja2V0IH0gZnJvbSBcIi4vbWlzY1wiO1xuXG5leHBvcnQgY2xhc3MgQ29kZWNTdGF0ZSBpbXBsZW1lbnRzIERpc3Bvc2FibGUge1xuICByZWFkb25seSBzcmM6IEZyYW1lO1xuICByZWFkb25seSBkc3Q6IEZyYW1lO1xuICByZWFkb25seSBwa3Q6IFBhY2tldDtcbiAgcHJpdmF0ZSBfc3dzPzogU29mdHdhcmVTY2FsZUNvbnRleHQ7XG4gIHByaXZhdGUgX3BuZz86IENvZGVjO1xuXG4gIHN0YXRpYyBhc3luYyBjcmVhdGUod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpIHtcbiAgICBjb25zdCBjb2RlYyA9IENvZGVjLmZpbmREZWNvZGVyQnlOYW1lKEZGX0RFQ09ERVJfUE5HKTtcbiAgICBvayhjb2RlYywgXCJwbmcgZGVjb2RlciB1bmF2YWlsYWJsZVwiKTtcbiAgICByZXR1cm4gbmV3IENvZGVjU3RhdGUod2lkdGgsIGhlaWdodCwgY29kZWMpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcih3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlciwgcG5nOiBDb2RlYykge1xuICAgIHRoaXMuX3BuZyA9IHBuZztcbiAgICB0aGlzLnNyYyA9IG1ha2VGcmFtZSh3aWR0aCwgaGVpZ2h0LCBBVl9QSVhfRk1UX0JHUkEpO1xuICAgIHRoaXMuZHN0ID0gbWFrZUZyYW1lKHdpZHRoLCBoZWlnaHQsIEFWX1BJWF9GTVRfWVVWQTQyMFApO1xuICAgIHRoaXMucGt0ID0gbWFrZVBhY2tldCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIGZyZXNoIFBORyBkZWNvZGVyIGNvbnRleHQuXG4gICAqIFRoZSBGRm1wZWcgUE5HIGRlY29kZXIgYWNjdW11bGF0ZXMgQVBORyBibGVuZGluZyBzdGF0ZVxuICAgKiBhY3Jvc3MgZnJhbWVzLCBzbyBhIHNoYXJlZCBpbnN0YW5jZSBjb3JydXB0cyBvdXRwdXQgd2hlbiBkZWNvZGluZyBzdGFuZGFsb25lIFBOR3MuXG4gICAqL1xuICBhc3luYyBwbmcoKTogUHJvbWlzZTxDb2RlY0NvbnRleHQ+IHtcbiAgICAvLyBQYXJ0aWFsLWNvbnN0cnVjdGlvbiBzYWZldHk6IGZyZWUgdGhlIGN0eCBpZiBvcGVuMiB0aHJvd3M7IG1vdmUoKSBkaXNvd25zIG9uIHN1Y2Nlc3MuXG4gICAgdXNpbmcgc3RhY2sgPSBuZXcgRGlzcG9zYWJsZVN0YWNrKCk7XG4gICAgY29uc3QgcG5nID0gbmV3IENvZGVjQ29udGV4dCgpO1xuICAgIHBuZy5hbGxvY0NvbnRleHQzKHRoaXMuX3BuZyk7XG4gICAgc3RhY2sudXNlKHBuZyk7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IHBuZy5vcGVuMih0aGlzLl9wbmcpLCBcInBuZ0RlY29kZXIub3BlbjJcIik7XG4gICAgc3RhY2subW92ZSgpO1xuICAgIHJldHVybiBwbmc7XG4gIH1cblxuICBhc3luYyBkZWNvZGVQTkcocG5nRGF0YTogQnVmZmVyKTogUHJvbWlzZTxGcmFtZT4ge1xuICAgIHVzaW5nIHBuZyA9IGF3YWl0IHRoaXMucG5nKCk7XG4gICAgdGhpcy5wa3QuZGF0YSA9IHBuZ0RhdGE7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IHBuZy5zZW5kUGFja2V0KHRoaXMucGt0KSwgXCJwbmdEZWNvZGVyLnNlbmRQYWNrZXRcIik7XG4gICAgdGhpcy5wa3QudW5yZWYoKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgcG5nLnJlY2VpdmVGcmFtZSh0aGlzLnNyYyksIFwicG5nRGVjb2Rlci5yZWNlaXZlRnJhbWVcIik7XG4gICAgcmV0dXJuIHRoaXMuc3JjO1xuICB9XG5cbiAgZ2V0IHN3cygpIHtcbiAgICBpZiAoIXRoaXMuX3N3cykge1xuICAgICAgY29uc3Qgc3dzID0gbmV3IFNvZnR3YXJlU2NhbGVDb250ZXh0KCk7XG4gICAgICBjb25zdCBmbXQgPSB0aGlzLnNyYy5mb3JtYXQgYXMgQVZQaXhlbEZvcm1hdDtcbiAgICAgIHN3cy5nZXRDb250ZXh0KFxuICAgICAgICB0aGlzLnNyYy53aWR0aCxcbiAgICAgICAgdGhpcy5zcmMuaGVpZ2h0LFxuICAgICAgICBmbXQsXG4gICAgICAgIHRoaXMuc3JjLndpZHRoLFxuICAgICAgICB0aGlzLnNyYy5oZWlnaHQsXG4gICAgICAgIEFWX1BJWF9GTVRfWVVWQTQyMFAsXG4gICAgICAgIFNXU19CSUxJTkVBUixcbiAgICAgICk7XG4gICAgICB0aGlzLl9zd3MgPSBzd3M7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9zd3M7XG4gIH1cblxuICBbU3ltYm9sLmRpc3Bvc2VdKCk6IHZvaWQge1xuICAgIHRoaXMuc3JjW1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgIHRoaXMuZHN0W1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgIHRoaXMucGt0W1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgIHRoaXMuX3N3cz8uW1N5bWJvbC5kaXNwb3NlXSgpO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzAxLlxuXG5pbXBvcnQge1xuICBDb2RlYyxcbiAgQ29kZWNDb250ZXh0LFxuICBGRm1wZWdFcnJvcixcbiAgRmlsdGVyLFxuICB0eXBlIEZpbHRlckNvbnRleHQsXG4gIEZpbHRlckdyYXBoLFxuICBGaWx0ZXJJbk91dCxcbiAgRnJhbWUsXG4gIHR5cGUgUGFja2V0LFxuICBSYXRpb25hbCxcbiAgdHlwZSBTdHJlYW0sXG59IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQge1xuICBBVl9DSEFOTkVMX0xBWU9VVF9TVEVSRU8sXG4gIEFWX0NPREVDX0ZMQUdfR0xPQkFMX0hFQURFUixcbiAgQVZfU0FNUExFX0ZNVF9GTFQsXG4gIEFWX1NBTVBMRV9GTVRfRkxUUCxcbiAgQVZFUlJPUl9FQUdBSU4sXG4gIEFWRVJST1JfRU9GLFxuICB0eXBlIEZGQXVkaW9FbmNvZGVyLFxufSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcbmltcG9ydCB7IGRyYWluUGFja2V0cywgbWFrZVBhY2tldCB9IGZyb20gXCIuL21pc2NcIjtcbmltcG9ydCB0eXBlIHsgRm9ybWF0TXV4ZXIgfSBmcm9tIFwiLi9tdXhlclwiO1xuXG5jb25zdCBTQU1QTEVfRk1UX05BTUU6IFBhcnRpYWw8UmVjb3JkPG51bWJlciwgc3RyaW5nPj4gPSB7IFtBVl9TQU1QTEVfRk1UX0ZMVF06IFwiZmx0XCIsIFtBVl9TQU1QTEVfRk1UX0ZMVFBdOiBcImZsdHBcIiB9O1xuXG5leHBvcnQgaW50ZXJmYWNlIEF1ZGlvRW5jb2Rlck9wdGlvbnMge1xuICBvdXRTYW1wbGVSYXRlOiBudW1iZXI7XG4gIG91dFNhbXBsZUZtdDogdHlwZW9mIEFWX1NBTVBMRV9GTVRfRkxUIHwgdHlwZW9mIEFWX1NBTVBMRV9GTVRfRkxUUDtcbiAgY29kZWNOYW1lOiBGRkF1ZGlvRW5jb2RlcjtcbiAgZ2xvYmFsSGVhZGVyOiBib29sZWFuO1xuICBiaXRyYXRlOiBudW1iZXI7XG4gIG11eGVyOiBGb3JtYXRNdXhlcjtcbn1cblxuZXhwb3J0IGNsYXNzIEF1ZGlvRW5jb2RlciBpbXBsZW1lbnRzIERpc3Bvc2FibGUge1xuICBwcml2YXRlIF9jdHg6IENvZGVjQ29udGV4dDtcbiAgcHJpdmF0ZSBfc3RyZWFtOiBTdHJlYW07XG4gIHByaXZhdGUgX3BrdDogUGFja2V0O1xuICBwcml2YXRlIF9vdXRSYXRlOiBudW1iZXI7XG4gIHByaXZhdGUgX291dEZtdDogdHlwZW9mIEFWX1NBTVBMRV9GTVRfRkxUIHwgdHlwZW9mIEFWX1NBTVBMRV9GTVRfRkxUUDtcbiAgcHJpdmF0ZSBfZnJhbWVTaXplOiBudW1iZXI7XG4gIHByaXZhdGUgX2ZpbHRlckZyYW1lOiBGcmFtZTtcbiAgcHJpdmF0ZSBfZ3JhcGg/OiBGaWx0ZXJHcmFwaDtcbiAgcHJpdmF0ZSBfYnVmU3JjPzogRmlsdGVyQ29udGV4dDtcbiAgcHJpdmF0ZSBfYnVmU2luaz86IEZpbHRlckNvbnRleHQ7XG4gIHByaXZhdGUgX2luUmF0ZT86IG51bWJlcjtcbiAgcHJpdmF0ZSBfcHRzID0gMG47XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihjdHg6IENvZGVjQ29udGV4dCwgc3RyZWFtOiBTdHJlYW0sIG91dEZtdDogdHlwZW9mIEFWX1NBTVBMRV9GTVRfRkxUIHwgdHlwZW9mIEFWX1NBTVBMRV9GTVRfRkxUUCkge1xuICAgIHRoaXMuX2N0eCA9IGN0eDtcbiAgICB0aGlzLl9zdHJlYW0gPSBzdHJlYW07XG4gICAgdGhpcy5fb3V0UmF0ZSA9IGN0eC5zYW1wbGVSYXRlO1xuICAgIHRoaXMuX291dEZtdCA9IG91dEZtdDtcbiAgICB0aGlzLl9mcmFtZVNpemUgPSBjdHguZnJhbWVTaXplO1xuICAgIHRoaXMuX3BrdCA9IG1ha2VQYWNrZXQoKTtcbiAgICB0aGlzLl9maWx0ZXJGcmFtZSA9IG5ldyBGcmFtZSgpO1xuICAgIHRoaXMuX2ZpbHRlckZyYW1lLmFsbG9jKCk7XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgY3JlYXRlKG9wdHM6IEF1ZGlvRW5jb2Rlck9wdGlvbnMpOiBQcm9taXNlPEF1ZGlvRW5jb2Rlcj4ge1xuICAgIGNvbnN0IGNvZGVjID0gQ29kZWMuZmluZEVuY29kZXJCeU5hbWUob3B0cy5jb2RlY05hbWUpO1xuICAgIGlmICghY29kZWMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQXVkaW8gZW5jb2RlciBub3QgZm91bmQ6ICR7b3B0cy5jb2RlY05hbWV9YCk7XG4gICAgfVxuICAgIC8vIFBhcnRpYWwtY29uc3RydWN0aW9uIHNhZmV0eTogc3RhY2sgZnJlZXMgY3R4IGlmIGEgbGF0ZXIgc3RlcCB0aHJvd3M7IG1vdmUoKSBkaXNvd25zIG9uIHN1Y2Nlc3MuXG4gICAgdXNpbmcgc3RhY2sgPSBuZXcgRGlzcG9zYWJsZVN0YWNrKCk7XG4gICAgY29uc3QgY3R4ID0gbmV3IENvZGVjQ29udGV4dCgpO1xuICAgIGN0eC5hbGxvY0NvbnRleHQzKGNvZGVjKTtcbiAgICBzdGFjay51c2UoY3R4KTtcbiAgICBjdHguY29kZWNJZCA9IGNvZGVjLmlkO1xuICAgIGN0eC5zYW1wbGVGb3JtYXQgPSBvcHRzLm91dFNhbXBsZUZtdDtcbiAgICBjdHguc2FtcGxlUmF0ZSA9IG9wdHMub3V0U2FtcGxlUmF0ZTtcbiAgICBjdHguY2hhbm5lbExheW91dCA9IEFWX0NIQU5ORUxfTEFZT1VUX1NURVJFTztcbiAgICBjdHgudGltZUJhc2UgPSBuZXcgUmF0aW9uYWwoMSwgb3B0cy5vdXRTYW1wbGVSYXRlKTtcbiAgICBjdHguYml0UmF0ZSA9IEJpZ0ludChvcHRzLmJpdHJhdGUpO1xuICAgIGlmIChvcHRzLmdsb2JhbEhlYWRlcikge1xuICAgICAgY3R4LnNldEZsYWdzKEFWX0NPREVDX0ZMQUdfR0xPQkFMX0hFQURFUik7XG4gICAgfVxuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCBjdHgub3BlbjIoY29kZWMsIG51bGwpLCBcImF1ZGlvQ3R4Lm9wZW4yXCIpO1xuICAgIGNvbnN0IHN0cmVhbSA9IG9wdHMubXV4ZXIuYWRkU3RyZWFtKGN0eCk7XG4gICAgc3RhY2subW92ZSgpO1xuICAgIHJldHVybiBuZXcgQXVkaW9FbmNvZGVyKGN0eCwgc3RyZWFtLCBvcHRzLm91dFNhbXBsZUZtdCk7XG4gIH1cblxuICBzZXRJbnB1dFJhdGUoaW5TYW1wbGVSYXRlOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9ncmFwaD8uW1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgIHRoaXMuX2luUmF0ZSA9IGluU2FtcGxlUmF0ZTtcbiAgICAvLyBQYXJ0aWFsLWNvbnN0cnVjdGlvbiBzYWZldHk6IHN0YWNrIGZyZWVzIHRoZSBncmFwaCBpZiBmaWx0ZXIgc2V0dXAgdGhyb3dzOyBtb3ZlKCkgZGlzb3ducyBvbiBzdWNjZXNzLlxuICAgIHVzaW5nIHN0YWNrID0gbmV3IERpc3Bvc2FibGVTdGFjaygpO1xuICAgIGNvbnN0IGdyYXBoID0gbmV3IEZpbHRlckdyYXBoKCk7XG4gICAgZ3JhcGguYWxsb2MoKTtcbiAgICBzdGFjay51c2UoZ3JhcGgpO1xuICAgIGNvbnN0IGFidWZmZXIgPSBGaWx0ZXIuZ2V0QnlOYW1lKFwiYWJ1ZmZlclwiKSE7XG4gICAgY29uc3QgYnVmU3JjID0gZ3JhcGguY3JlYXRlRmlsdGVyKFxuICAgICAgYWJ1ZmZlcixcbiAgICAgIFwic3JjXCIsXG4gICAgICBgc2FtcGxlX3JhdGU9JHtpblNhbXBsZVJhdGV9OnNhbXBsZV9mbXQ9Zmx0OmNoYW5uZWxfbGF5b3V0PXN0ZXJlbzp0aW1lX2Jhc2U9MS8ke2luU2FtcGxlUmF0ZX1gLFxuICAgICk7XG4gICAgaWYgKCFidWZTcmMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkZhaWxlZCB0byBjcmVhdGUgYWJ1ZmZlclwiKTtcbiAgICB9XG4gICAgY29uc3QgYWJ1ZmZlcnNpbmsgPSBGaWx0ZXIuZ2V0QnlOYW1lKFwiYWJ1ZmZlcnNpbmtcIikhO1xuICAgIGNvbnN0IGJ1ZlNpbmsgPSBncmFwaC5jcmVhdGVGaWx0ZXIoYWJ1ZmZlcnNpbmssIFwic2lua1wiKTtcbiAgICBpZiAoIWJ1ZlNpbmspIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkZhaWxlZCB0byBjcmVhdGUgYWJ1ZmZlcnNpbmtcIik7XG4gICAgfVxuICAgIGNvbnN0IGZtdE5hbWUgPSBTQU1QTEVfRk1UX05BTUVbdGhpcy5fb3V0Rm10XSA/PyBcImZsdFwiO1xuICAgIGNvbnN0IGZpbHRlckRlc2MgPSBgYWZvcm1hdD1zYW1wbGVfZm10cz0ke2ZtdE5hbWV9OnNhbXBsZV9yYXRlcz0ke3RoaXMuX291dFJhdGV9OmNoYW5uZWxfbGF5b3V0cz1zdGVyZW8sYXNldG5zYW1wbGVzPW49JHt0aGlzLl9mcmFtZVNpemV9OnA9MWA7XG4gICAgY29uc3Qgb3V0cHV0cyA9IEZpbHRlckluT3V0LmNyZWF0ZUxpc3QoW3sgbmFtZTogXCJpblwiLCBmaWx0ZXJDdHg6IGJ1ZlNyYywgcGFkSWR4OiAwIH1dKTtcbiAgICBjb25zdCBpbnB1dHMgPSBGaWx0ZXJJbk91dC5jcmVhdGVMaXN0KFt7IG5hbWU6IFwib3V0XCIsIGZpbHRlckN0eDogYnVmU2luaywgcGFkSWR4OiAwIH1dKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoZ3JhcGgucGFyc2VQdHIoZmlsdGVyRGVzYywgaW5wdXRzLCBvdXRwdXRzKSwgXCJncmFwaC5wYXJzZVB0clwiKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoZ3JhcGguY29uZmlnU3luYygpLCBcImdyYXBoLmNvbmZpZ1wiKTtcbiAgICBzdGFjay5tb3ZlKCk7XG4gICAgdGhpcy5fZ3JhcGggPSBncmFwaDtcbiAgICB0aGlzLl9idWZTcmMgPSBidWZTcmM7XG4gICAgdGhpcy5fYnVmU2luayA9IGJ1ZlNpbms7XG4gIH1cblxuICBhc3luYyBlbmNvZGUocGNtOiBCdWZmZXIsIG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5fYnVmU3JjIHx8ICF0aGlzLl9pblJhdGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgc3JjID0gbmV3IEZsb2F0MzJBcnJheShwY20uYnVmZmVyLCBwY20uYnl0ZU9mZnNldCwgcGNtLmJ5dGVMZW5ndGggLyA0KTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNyYy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUoc3JjW2ldISkpIHtcbiAgICAgICAgc3JjW2ldID0gMDtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgblNhbXBsZXMgPSBzcmMubGVuZ3RoID4+IDE7XG4gICAgdXNpbmcgZnJhbWUgPSBGcmFtZS5mcm9tQXVkaW9CdWZmZXIoQnVmZmVyLmZyb20oc3JjLmJ1ZmZlciwgc3JjLmJ5dGVPZmZzZXQsIHNyYy5ieXRlTGVuZ3RoKSwge1xuICAgICAgbmJTYW1wbGVzOiBuU2FtcGxlcyxcbiAgICAgIGZvcm1hdDogQVZfU0FNUExFX0ZNVF9GTFQsXG4gICAgICBzYW1wbGVSYXRlOiB0aGlzLl9pblJhdGUsXG4gICAgICBjaGFubmVsTGF5b3V0OiBBVl9DSEFOTkVMX0xBWU9VVF9TVEVSRU8sXG4gICAgICBwdHM6IHRoaXMuX3B0cyxcbiAgICAgIHRpbWVCYXNlOiB7IG51bTogMSwgZGVuOiB0aGlzLl9pblJhdGUgfSxcbiAgICB9KTtcbiAgICB0aGlzLl9wdHMgKz0gQmlnSW50KG5TYW1wbGVzKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgdGhpcy5fYnVmU3JjLmJ1ZmZlcnNyY0FkZEZyYW1lKGZyYW1lKSwgXCJidWZmZXJzcmNBZGRGcmFtZVwiKTtcbiAgICBhd2FpdCB0aGlzLmRyYWluKG11eGVyKTtcbiAgfVxuXG4gIGFzeW5jIGZsdXNoKG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9idWZTcmMpIHtcbiAgICAgIGF3YWl0IHRoaXMuX2J1ZlNyYy5idWZmZXJzcmNBZGRGcmFtZShudWxsKTtcbiAgICAgIGF3YWl0IHRoaXMuZHJhaW4obXV4ZXIpO1xuICAgIH1cbiAgICBhd2FpdCB0aGlzLl9jdHguc2VuZEZyYW1lKG51bGwpO1xuICAgIGF3YWl0IHRoaXMuZHJhaW5Db2RlYyhtdXhlcik7XG4gIH1cblxuICBbU3ltYm9sLmRpc3Bvc2VdKCk6IHZvaWQge1xuICAgIHRoaXMuX3BrdC5mcmVlKCk7XG4gICAgdGhpcy5fZmlsdGVyRnJhbWUuZnJlZSgpO1xuICAgIHRoaXMuX2dyYXBoPy5bU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgdGhpcy5fY3R4LmZyZWVDb250ZXh0KCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGRyYWluKG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBjb25zdCByID0gYXdhaXQgdGhpcy5fYnVmU2luayEuYnVmZmVyc2lua0dldEZyYW1lKHRoaXMuX2ZpbHRlckZyYW1lKTtcbiAgICAgIGlmIChyID09PSBBVkVSUk9SX0VBR0FJTiB8fCByID09PSBBVkVSUk9SX0VPRikge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHRyeSB7XG4gICAgICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihyLCBcImJ1ZmZlcnNpbmtHZXRGcmFtZVwiKTtcbiAgICAgICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IHRoaXMuX2N0eC5zZW5kRnJhbWUodGhpcy5fZmlsdGVyRnJhbWUpLCBcImF1ZGlvQ3R4LnNlbmRGcmFtZVwiKTtcbiAgICAgICAgYXdhaXQgdGhpcy5kcmFpbkNvZGVjKG11eGVyKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMuX2ZpbHRlckZyYW1lLnVucmVmKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBkcmFpbkNvZGVjKG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBkcmFpblBhY2tldHModGhpcy5fY3R4LCB0aGlzLl9wa3QsIHRoaXMuX3N0cmVhbSwgbXV4ZXIpO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzEzLlxuXG5leHBvcnQgZnVuY3Rpb24gcGFja0JpdHMoYml0czogbnVtYmVyW10pOiBCdWZmZXIge1xuICBjb25zdCBidWYgPSBCdWZmZXIuYWxsb2MoYml0cy5sZW5ndGggPj4gMyk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYnVmLmxlbmd0aDsgaSsrKSB7XG4gICAgbGV0IGJ5dGUgPSAwO1xuICAgIGZvciAobGV0IGIgPSAwOyBiIDwgODsgYisrKSB7XG4gICAgICBieXRlID0gKGJ5dGUgPDwgMSkgfCBiaXRzW2kgKiA4ICsgYl0hO1xuICAgIH1cbiAgICBidWZbaV0gPSBieXRlO1xuICB9XG4gIHJldHVybiBidWY7XG59XG5cbmV4cG9ydCBjbGFzcyBCaXRXcml0ZXIge1xuICBiaXRzOiBudW1iZXJbXSA9IFtdO1xuICB3KHZhbDogbnVtYmVyLCBuOiBudW1iZXIpIHtcbiAgICBmb3IgKGxldCBpID0gbiAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICB0aGlzLmJpdHMucHVzaCgodmFsID4+IGkpICYgMSk7XG4gICAgfVxuICB9XG4gIGZsYWcodmFsOiBib29sZWFuIHwgbnVtYmVyKSB7XG4gICAgdGhpcy5iaXRzLnB1c2godmFsID8gMSA6IDApO1xuICB9XG4gIHVlKHZhbDogbnVtYmVyKSB7XG4gICAgY29uc3QgdiA9IHZhbCArIDE7XG4gICAgY29uc3QgbGVuID0gMzIgLSBNYXRoLmNsejMyKHYpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuIC0gMTsgaSsrKSB7XG4gICAgICB0aGlzLmJpdHMucHVzaCgwKTtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IGxlbiAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICB0aGlzLmJpdHMucHVzaCgodiA+PiBpKSAmIDEpO1xuICAgIH1cbiAgfVxuICBhbGlnbihwYWQ6IG51bWJlcikge1xuICAgIHdoaWxlICh0aGlzLmJpdHMubGVuZ3RoICUgOCAhPT0gMCkge1xuICAgICAgdGhpcy5iaXRzLnB1c2gocGFkKTtcbiAgICB9XG4gIH1cbiAgY29weShzcmM6IG51bWJlcltdLCBzdGFydDogbnVtYmVyLCBsZW46IG51bWJlcikge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIHRoaXMuYml0cy5wdXNoKHNyY1tzdGFydCArIGldISk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBCaXRSZWFkZXIge1xuICBwcml2YXRlIF9iaXRzOiBudW1iZXJbXTtcbiAgcG9zID0gMDtcbiAgY29uc3RydWN0b3IoZGF0YTogQnVmZmVyKSB7XG4gICAgdGhpcy5fYml0cyA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgZm9yIChsZXQgYiA9IDc7IGIgPj0gMDsgYi0tKSB7XG4gICAgICAgIHRoaXMuX2JpdHMucHVzaCgoZGF0YVtpXSEgPj4gYikgJiAxKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgZ2V0IGJpdHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2JpdHM7XG4gIH1cbiAgcmVhZChuOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGxldCB2YWwgPSAwO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbjsgaSsrKSB7XG4gICAgICB2YWwgPSAodmFsIDw8IDEpIHwgdGhpcy5fYml0c1t0aGlzLnBvcysrXSE7XG4gICAgfVxuICAgIHJldHVybiB2YWw7XG4gIH1cbiAgcmVhZFVlKCk6IG51bWJlciB7XG4gICAgbGV0IHplcm9zID0gMDtcbiAgICB3aGlsZSAodGhpcy5fYml0c1t0aGlzLnBvc10gPT09IDApIHtcbiAgICAgIHplcm9zKys7XG4gICAgICB0aGlzLnBvcysrO1xuICAgIH1cbiAgICB0aGlzLnBvcysrO1xuICAgIGxldCB2YWwgPSAxO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgemVyb3M7IGkrKykge1xuICAgICAgdmFsID0gKHZhbCA8PCAxKSB8IHRoaXMuX2JpdHNbdGhpcy5wb3MrK10hO1xuICAgIH1cbiAgICByZXR1cm4gdmFsIC0gMTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8xMi5cblxuY29uc3QgTkFMX0hFQURFUl9TSVpFID0gMjtcbmNvbnN0IEFOTkVYX0JfU1RBUlRfQ09ERSA9IEJ1ZmZlci5mcm9tKFsweDAwLCAweDAwLCAweDAwLCAweDAxXSk7XG5cbmV4cG9ydCB7IEFOTkVYX0JfU1RBUlRfQ09ERSwgTkFMX0hFQURFUl9TSVpFIH07XG5cbi8vIEhFVkMgTkFMIHVuaXQgdHlwZXMgKFQtUkVDLUguMjY1IFRhYmxlIDctMSlcbmV4cG9ydCBjb25zdCBOQUxfQkxBX1dfTFAgPSAxNjtcbmV4cG9ydCBjb25zdCBOQUxfSURSX1dfUkFETCA9IDE5O1xuZXhwb3J0IGNvbnN0IE5BTF9JRFJfTl9MUCA9IDIwO1xuZXhwb3J0IGNvbnN0IE5BTF9SU1ZfSVJBUF9WQ0wyMyA9IDIzO1xuZXhwb3J0IGNvbnN0IE5BTF9WUFMgPSAzMjtcbmV4cG9ydCBjb25zdCBOQUxfU1BTID0gMzM7XG5leHBvcnQgY29uc3QgTkFMX1BQUyA9IDM0O1xuZXhwb3J0IGNvbnN0IE5BTF9TRUlfUFJFRklYID0gMzk7XG5leHBvcnQgY29uc3QgTkFMX1NFSV9TVUZGSVggPSA0MDtcblxuZXhwb3J0IGludGVyZmFjZSBOYWxVbml0IHtcbiAgdHlwZTogbnVtYmVyO1xuICBsYXllcklkOiBudW1iZXI7XG4gIGRhdGE6IEJ1ZmZlcjtcbn1cblxuZnVuY3Rpb24gcGFyc2VOYWxUeXBlKGhlYWRlcjA6IG51bWJlciwgaGVhZGVyMTogbnVtYmVyKTogeyB0eXBlOiBudW1iZXI7IGxheWVySWQ6IG51bWJlcjsgdGVtcG9yYWxJZDogbnVtYmVyIH0ge1xuICBjb25zdCB0eXBlID0gKGhlYWRlcjAgPj4gMSkgJiAweDNmO1xuICBjb25zdCBsYXllcklkID0gKChoZWFkZXIwICYgMSkgPDwgNSkgfCAoKGhlYWRlcjEgPj4gMykgJiAweDFmKTtcbiAgY29uc3QgdGVtcG9yYWxJZCA9IGhlYWRlcjEgJiAweDA3O1xuICByZXR1cm4geyB0eXBlLCBsYXllcklkLCB0ZW1wb3JhbElkIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbmNvZGVOYWxIZWFkZXIodHlwZTogbnVtYmVyLCBsYXllcklkOiBudW1iZXIsIHRlbXBvcmFsSWQ6IG51bWJlcik6IFtudW1iZXIsIG51bWJlcl0ge1xuICBjb25zdCBieXRlMCA9ICgodHlwZSAmIDB4M2YpIDw8IDEpIHwgKChsYXllcklkID4+IDUpICYgMSk7XG4gIGNvbnN0IGJ5dGUxID0gKChsYXllcklkICYgMHgxZikgPDwgMykgfCAodGVtcG9yYWxJZCAmIDB4MDcpO1xuICByZXR1cm4gW2J5dGUwLCBieXRlMV07XG59XG5cbi8qKiBTcGxpdCBBbm5leCBCIGJpdHN0cmVhbSBpbnRvIE5BTCB1bml0cy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzcGxpdE5hbFVuaXRzKGJpdHN0cmVhbTogQnVmZmVyKTogTmFsVW5pdFtdIHtcbiAgY29uc3QgbmFsczogTmFsVW5pdFtdID0gW107XG4gIGxldCBpID0gMDtcblxuICB3aGlsZSAoaSA8IGJpdHN0cmVhbS5sZW5ndGgpIHtcbiAgICBsZXQgc2NMZW4gPSAwO1xuICAgIGlmIChpICsgMyA8IGJpdHN0cmVhbS5sZW5ndGggJiYgYml0c3RyZWFtW2ldID09PSAwICYmIGJpdHN0cmVhbVtpICsgMV0gPT09IDAgJiYgYml0c3RyZWFtW2kgKyAyXSA9PT0gMSkge1xuICAgICAgc2NMZW4gPSAzO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICBpICsgNCA8IGJpdHN0cmVhbS5sZW5ndGggJiZcbiAgICAgIGJpdHN0cmVhbVtpXSA9PT0gMCAmJlxuICAgICAgYml0c3RyZWFtW2kgKyAxXSA9PT0gMCAmJlxuICAgICAgYml0c3RyZWFtW2kgKyAyXSA9PT0gMCAmJlxuICAgICAgYml0c3RyZWFtW2kgKyAzXSA9PT0gMVxuICAgICkge1xuICAgICAgc2NMZW4gPSA0O1xuICAgIH0gZWxzZSB7XG4gICAgICBpKys7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCBuYWxTdGFydCA9IGkgKyBzY0xlbjtcbiAgICBpZiAobmFsU3RhcnQgKyBOQUxfSEVBREVSX1NJWkUgPiBiaXRzdHJlYW0ubGVuZ3RoKSB7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBsZXQgbmFsRW5kID0gYml0c3RyZWFtLmxlbmd0aDtcbiAgICBmb3IgKGxldCBqID0gbmFsU3RhcnQgKyBOQUxfSEVBREVSX1NJWkU7IGogPCBiaXRzdHJlYW0ubGVuZ3RoIC0gMjsgaisrKSB7XG4gICAgICBpZiAoXG4gICAgICAgIGJpdHN0cmVhbVtqXSA9PT0gMCAmJlxuICAgICAgICBiaXRzdHJlYW1baiArIDFdID09PSAwICYmXG4gICAgICAgIChiaXRzdHJlYW1baiArIDJdID09PSAxIHx8IChqICsgMyA8IGJpdHN0cmVhbS5sZW5ndGggJiYgYml0c3RyZWFtW2ogKyAyXSA9PT0gMCAmJiBiaXRzdHJlYW1baiArIDNdID09PSAxKSlcbiAgICAgICkge1xuICAgICAgICBuYWxFbmQgPSBqO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCB7IHR5cGUsIGxheWVySWQgfSA9IHBhcnNlTmFsVHlwZShiaXRzdHJlYW1bbmFsU3RhcnRdISwgYml0c3RyZWFtW25hbFN0YXJ0ICsgMV0hKTtcbiAgICBuYWxzLnB1c2goeyB0eXBlLCBsYXllcklkLCBkYXRhOiBiaXRzdHJlYW0uc3ViYXJyYXkobmFsU3RhcnQsIG5hbEVuZCkgfSk7XG4gICAgaSA9IG5hbEVuZDtcbiAgfVxuXG4gIHJldHVybiBuYWxzO1xufVxuXG4vKiogUmV3cml0ZSBudWhfbGF5ZXJfaWQgaW4gYSBOQUwgdW5pdCAocmV0dXJucyBjb3B5KS4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXdyaXRlTmFsTGF5ZXJJZChuYWw6IEJ1ZmZlciwgbGF5ZXJJZDogbnVtYmVyKTogQnVmZmVyIHtcbiAgY29uc3Qgb3V0ID0gQnVmZmVyLmZyb20obmFsKTtcbiAgY29uc3QgeyB0eXBlLCB0ZW1wb3JhbElkIH0gPSBwYXJzZU5hbFR5cGUob3V0WzBdISwgb3V0WzFdISk7XG4gIGNvbnN0IFtiMCwgYjFdID0gZW5jb2RlTmFsSGVhZGVyKHR5cGUsIGxheWVySWQsIHRlbXBvcmFsSWQpO1xuICBvdXRbMF0gPSBiMDtcbiAgb3V0WzFdID0gYjE7XG4gIHJldHVybiBvdXQ7XG59XG5cbi8qKiBSZXdyaXRlIG5hbF91bml0X3R5cGUgaW4gYSBOQUwgdW5pdCAocmV0dXJucyBjb3B5KS4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXdyaXRlTmFsVHlwZShuYWw6IEJ1ZmZlciwgbmV3VHlwZTogbnVtYmVyKTogQnVmZmVyIHtcbiAgY29uc3Qgb3V0ID0gQnVmZmVyLmZyb20obmFsKTtcbiAgY29uc3QgeyBsYXllcklkLCB0ZW1wb3JhbElkIH0gPSBwYXJzZU5hbFR5cGUob3V0WzBdISwgb3V0WzFdISk7XG4gIGNvbnN0IFtiMCwgYjFdID0gZW5jb2RlTmFsSGVhZGVyKG5ld1R5cGUsIGxheWVySWQsIHRlbXBvcmFsSWQpO1xuICBvdXRbMF0gPSBiMDtcbiAgb3V0WzFdID0gYjE7XG4gIHJldHVybiBvdXQ7XG59XG5cbi8qKiBSZW1vdmUgZW11bGF0aW9uIHByZXZlbnRpb24gYnl0ZXMgKDAwIDAwIDAzIOKGkiAwMCAwMCkgZnJvbSBSQlNQLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUVtdWxhdGlvblByZXZlbnRpb24oZGF0YTogQnVmZmVyKTogQnVmZmVyIHtcbiAgY29uc3Qgb3V0OiBudW1iZXJbXSA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoaSArIDIgPCBkYXRhLmxlbmd0aCAmJiBkYXRhW2ldID09PSAwICYmIGRhdGFbaSArIDFdID09PSAwICYmIGRhdGFbaSArIDJdID09PSAzKSB7XG4gICAgICBvdXQucHVzaCgwLCAwKTtcbiAgICAgIGkgKz0gMjtcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0LnB1c2goZGF0YVtpXSEpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gQnVmZmVyLmZyb20ob3V0KTtcbn1cblxuLyoqIEluc2VydCBlbXVsYXRpb24gcHJldmVudGlvbiBieXRlcyAoMDAgMDAgMDMpIGZvciBBbm5leCBCIGNvbXBsaWFuY2UuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkRW11bGF0aW9uUHJldmVudGlvbihuYWw6IEJ1ZmZlcik6IEJ1ZmZlciB7XG4gIGNvbnN0IG91dDogbnVtYmVyW10gPSBbXTtcbiAgb3V0LnB1c2gobmFsWzBdISwgbmFsWzFdISk7XG4gIGxldCB6ZXJvcyA9IDA7XG4gIGZvciAobGV0IGkgPSAyOyBpIDwgbmFsLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKHplcm9zID09PSAyICYmIG5hbFtpXSEgPD0gMykge1xuICAgICAgb3V0LnB1c2goMyk7XG4gICAgICB6ZXJvcyA9IDA7XG4gICAgfVxuICAgIGlmIChuYWxbaV0gPT09IDApIHtcbiAgICAgIHplcm9zKys7XG4gICAgfSBlbHNlIHtcbiAgICAgIHplcm9zID0gMDtcbiAgICB9XG4gICAgb3V0LnB1c2gobmFsW2ldISk7XG4gIH1cbiAgcmV0dXJuIEJ1ZmZlci5mcm9tKG91dCk7XG59XG4iLCIvLyBDb25mb3JtIE5WRU5DIG91dHB1dCB0byBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vYXYtZm91bmRhdGlvbi9IRVZDLVZpZGVvLXdpdGgtQWxwaGEtSW50ZXJvcGVyYWJpbGl0eS1Qcm9maWxlLnBkZlxuXG5pbXBvcnQgeyBCaXRSZWFkZXIsIEJpdFdyaXRlciwgcGFja0JpdHMgfSBmcm9tIFwiLi9iaXRcIjtcbmltcG9ydCB7XG4gIEFOTkVYX0JfU1RBUlRfQ09ERSxcbiAgYWRkRW11bGF0aW9uUHJldmVudGlvbixcbiAgTkFMX0JMQV9XX0xQLFxuICBOQUxfUlNWX0lSQVBfVkNMMjMsXG4gIE5BTF9TUFMsXG4gIE5BTF9WUFMsXG4gIHJlbW92ZUVtdWxhdGlvblByZXZlbnRpb24sXG4gIHNwbGl0TmFsVW5pdHMsXG59IGZyb20gXCIuL25hbFwiO1xuaW1wb3J0IHR5cGUgeyBOdmVuY0hldmNDb25maWcgfSBmcm9tIFwiLi9wYXJzZXJcIjtcblxuLy8gUFRMIGJpdCBvZmZzZXRzIHdpdGhpbiBlbXVsYXRpb24tcHJldmVudGlvbi1zdHJpcHBlZCBOQUwgKE5BTCBoZWFkZXIgaW5jbHVkZWQpLlxuY29uc3QgVlBTX1BUTF9CSVQgPSA0ODsgLy8gMTYgKE5BTCBoZHIpICsgMzIgKFZQUyBwcmVmaXgpXG5jb25zdCBTUFNfUFRMX0JJVCA9IDI0OyAvLyAxNiAoTkFMIGhkcikgKyA4IChTUFMgcHJlZml4KVxuY29uc3QgUFRMX1RJRVJfQklUID0gMjtcbmNvbnN0IFBUTF9DT01QQVQyX0JJVCA9IDEwOyAvLyBwcm9maWxlX3NwYWNlKDIpICsgdGllcigxKSArIGlkYyg1KSArIGNvbXBhdFswLDFdKDIpXG5jb25zdCBTTElDRV9UWVBFX0IgPSAwO1xuY29uc3QgU0xJQ0VfVFlQRV9QID0gMTtcblxuZnVuY3Rpb24gc2V0Qml0KGJ1ZjogQnVmZmVyLCBiaXRPZmZzZXQ6IG51bWJlciwgdmFsdWU6IDAgfCAxKTogdm9pZCB7XG4gIGNvbnN0IGJ5dGUgPSBiaXRPZmZzZXQgPj4gMztcbiAgY29uc3QgbWFzayA9IDEgPDwgKDcgLSAoYml0T2Zmc2V0ICYgNykpO1xuICBjb25zdCBjdXIgPSBidWZbYnl0ZV0gPz8gMDtcbiAgYnVmW2J5dGVdID0gdmFsdWUgPyBjdXIgfCBtYXNrIDogY3VyICYgfm1hc2s7XG59XG5cbmZ1bmN0aW9uIHBhdGNoUHRsKG5hbERhdGE6IEJ1ZmZlciwgcHRsU3RhcnRCaXQ6IG51bWJlcik6IEJ1ZmZlciB7XG4gIGNvbnN0IHJic3AgPSByZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uKG5hbERhdGEpO1xuICBzZXRCaXQocmJzcCwgcHRsU3RhcnRCaXQgKyBQVExfVElFUl9CSVQsIDApO1xuICBzZXRCaXQocmJzcCwgcHRsU3RhcnRCaXQgKyBQVExfQ09NUEFUMl9CSVQsIDEpO1xuICByZXR1cm4gYWRkRW11bGF0aW9uUHJldmVudGlvbihyYnNwKTtcbn1cblxuLyoqIFBhdGNoIGV2ZXJ5IFZQUy9TUFMgTkFMIGluIGFuIEFubmV4IEIgYml0c3RyZWFtIHNvIFBUTCBtYXRjaGVzIEFwcGxlL3gyNjUuICovXG5leHBvcnQgZnVuY3Rpb24gcGF0Y2hIZXZjQWxwaGFQdGwoYml0c3RyZWFtOiBCdWZmZXIpOiBCdWZmZXIge1xuICBjb25zdCBuYWxzID0gc3BsaXROYWxVbml0cyhiaXRzdHJlYW0pO1xuICBpZiAobmFscy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gYml0c3RyZWFtO1xuICB9XG4gIGNvbnN0IGNodW5rczogQnVmZmVyW10gPSBbXTtcbiAgZm9yIChjb25zdCBuYWwgb2YgbmFscykge1xuICAgIGxldCBkYXRhID0gbmFsLmRhdGE7XG4gICAgaWYgKG5hbC50eXBlID09PSBOQUxfVlBTKSB7XG4gICAgICBkYXRhID0gcGF0Y2hQdGwobmFsLmRhdGEsIFZQU19QVExfQklUKTtcbiAgICB9IGVsc2UgaWYgKG5hbC50eXBlID09PSBOQUxfU1BTKSB7XG4gICAgICBkYXRhID0gcGF0Y2hQdGwobmFsLmRhdGEsIFNQU19QVExfQklUKTtcbiAgICB9XG4gICAgY2h1bmtzLnB1c2goQU5ORVhfQl9TVEFSVF9DT0RFLCBkYXRhKTtcbiAgfVxuICByZXR1cm4gQnVmZmVyLmNvbmNhdChjaHVua3MpO1xufVxuXG4vLyDilIDilIDilIAgdWUodikgcmV3cml0ZSBoZWxwZXJzIChTUFMvUFBTIOKAlCBSQlNQIGNhbiBncm93IGZyZWVseSwgbm8gQ0FCQUMgdHJhaWxpbmcpIOKUgOKUgFxuXG5mdW5jdGlvbiByZXdyaXRlT25lVWUobmFsSW46IEJ1ZmZlciwgYml0T2Zmc2V0OiBudW1iZXIsIG5ld1ZhbDogbnVtYmVyKTogQnVmZmVyIHtcbiAgY29uc3QgcmJzcCA9IHJlbW92ZUVtdWxhdGlvblByZXZlbnRpb24obmFsSW4pO1xuICBjb25zdCBiciA9IG5ldyBCaXRSZWFkZXIocmJzcCk7XG4gIGNvbnN0IGJ3ID0gbmV3IEJpdFdyaXRlcigpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGJpdE9mZnNldDsgaSsrKSB7XG4gICAgYncuYml0cy5wdXNoKGJyLnJlYWQoMSkpO1xuICB9XG4gIGJyLnJlYWRVZSgpO1xuICBidy51ZShuZXdWYWwpO1xuICB3aGlsZSAoYnIucG9zIDwgYnIuYml0cy5sZW5ndGgpIHtcbiAgICBidy5iaXRzLnB1c2goYnIucmVhZCgxKSk7XG4gIH1cbiAgd2hpbGUgKGJ3LmJpdHMubGVuZ3RoICUgOCAhPT0gMCkge1xuICAgIGJ3LmJpdHMucHVzaCgwKTtcbiAgfVxuICByZXR1cm4gYWRkRW11bGF0aW9uUHJldmVudGlvbihwYWNrQml0cyhidy5iaXRzKSk7XG59XG5cbmZ1bmN0aW9uIHJld3JpdGVUd29VZShuYWxJbjogQnVmZmVyLCBiaXRPZmZzZXQ6IG51bWJlciwgbmV3VmFsMTogbnVtYmVyLCBuZXdWYWwyOiBudW1iZXIpOiBCdWZmZXIge1xuICBjb25zdCByYnNwID0gcmVtb3ZlRW11bGF0aW9uUHJldmVudGlvbihuYWxJbik7XG4gIGNvbnN0IGJyID0gbmV3IEJpdFJlYWRlcihyYnNwKTtcbiAgY29uc3QgYncgPSBuZXcgQml0V3JpdGVyKCk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYml0T2Zmc2V0OyBpKyspIHtcbiAgICBidy5iaXRzLnB1c2goYnIucmVhZCgxKSk7XG4gIH1cbiAgYnIucmVhZFVlKCk7XG4gIGJyLnJlYWRVZSgpO1xuICBidy51ZShuZXdWYWwxKTtcbiAgYncudWUobmV3VmFsMik7XG4gIHdoaWxlIChici5wb3MgPCBici5iaXRzLmxlbmd0aCkge1xuICAgIGJ3LmJpdHMucHVzaChici5yZWFkKDEpKTtcbiAgfVxuICB3aGlsZSAoYncuYml0cy5sZW5ndGggJSA4ICE9PSAwKSB7XG4gICAgYncuYml0cy5wdXNoKDApO1xuICB9XG4gIHJldHVybiBhZGRFbXVsYXRpb25QcmV2ZW50aW9uKHBhY2tCaXRzKGJ3LmJpdHMpKTtcbn1cblxuLyoqIEFscGhhIFNQUzogc3BzX3NlcV9wYXJhbWV0ZXJfc2V0X2lkIDAg4oaSIDEuICovXG5leHBvcnQgZnVuY3Rpb24gcmV3cml0ZUFscGhhU3BzKHNwczogQnVmZmVyKTogQnVmZmVyIHtcbiAgY29uc3QgU1BTX1NFUV9JRF9CSVQgPSBTUFNfUFRMX0JJVCArIDk2OyAvLyBQVEwgaXMgOTYgYml0cyBmb3Igb3VyIHByb2ZpbGUgY29uZmlnXG4gIHJldHVybiByZXdyaXRlT25lVWUoc3BzLCBTUFNfU0VRX0lEX0JJVCwgMSk7XG59XG5cbi8qKiBBbHBoYSBQUFM6IHBwc19waWNfcGFyYW1ldGVyX3NldF9pZCAwIOKGkiAxLCBwcHNfc2VxX3BhcmFtZXRlcl9zZXRfaWQgMCDihpIgMS4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXdyaXRlQWxwaGFQcHMocHBzOiBCdWZmZXIpOiBCdWZmZXIge1xuICByZXR1cm4gcmV3cml0ZVR3b1VlKHBwcywgMTYgLyogYWZ0ZXIgTkFMIGhlYWRlciAqLywgMSwgMSk7XG59XG5cbi8vIOKUgOKUgOKUgCBTbGljZSBoZWFkZXIgcmV3cml0ZSAobXVzdCBwcmVzZXJ2ZSBDQUJBQyBieXRlIGFsaWdubWVudCkg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmZ1bmN0aW9uIHJlYWRTZShicjogQml0UmVhZGVyKTogbnVtYmVyIHtcbiAgY29uc3QgdWUgPSBici5yZWFkVWUoKTtcbiAgcmV0dXJuIHVlICYgMSA/ICh1ZSArIDEpID4+IDEgOiAtKHVlID4+IDEpO1xufVxuXG4vLyBJbmxpbmUgc3RfcmVmX3BpY19zZXQgKHNwc19mbGFnPTApOyBzdFJwc0lkeCA9IG51bV9zaG9ydF90ZXJtX3JlZl9waWNfc2V0cyDihpIgaW50ZXIgcHJlZGljdGlvbiBtYXkgdXNlIHByZXYgc2V0LlxuZnVuY3Rpb24gcGFyc2VJbmxpbmVTdFJlZlBpY1NldChicjogQml0UmVhZGVyLCBudW1EZWx0YVBvY3NTZXQwOiBudW1iZXIpOiB2b2lkIHtcbiAgY29uc3QgaW50ZXJGbGFnID0gYnIucmVhZCgxKTsgLy8gaW50ZXJfcmVmX3BpY19zZXRfcHJlZGljdGlvbl9mbGFnXG4gIGlmIChpbnRlckZsYWcpIHtcbiAgICBjb25zdCBkZWx0YUlkeE1pbnVzMSA9IGJyLnJlYWRVZSgpOyAvLyBzdFJwc0lkeCA9PSBudW1fc2hvcnRfdGVybV9yZWZfcGljX3NldHMg4oaSIHByZXNlbnRcbiAgICBpZiAoZGVsdGFJZHhNaW51czEgIT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgYXBwbGVfYWxwaGE6IHVuZXhwZWN0ZWQgZGVsdGFfaWR4X21pbnVzMT0ke2RlbHRhSWR4TWludXMxfWApO1xuICAgIH1cbiAgICBici5yZWFkKDEpOyAvLyBkZWx0YV9ycHNfc2lnblxuICAgIGJyLnJlYWRVZSgpOyAvLyBhYnNfZGVsdGFfcnBzX21pbnVzMVxuICAgIGZvciAobGV0IGogPSAwOyBqIDw9IG51bURlbHRhUG9jc1NldDA7IGorKykge1xuICAgICAgY29uc3QgdXNlZCA9IGJyLnJlYWQoMSk7XG4gICAgICBpZiAoIXVzZWQpIHtcbiAgICAgICAgYnIucmVhZCgxKTsgLy8gdXNlX2RlbHRhX2ZsYWdcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgbnVtTmVnID0gYnIucmVhZFVlKCk7XG4gICAgY29uc3QgbnVtUG9zID0gYnIucmVhZFVlKCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1OZWc7IGkrKykge1xuICAgICAgYnIucmVhZFVlKCk7XG4gICAgICBici5yZWFkKDEpO1xuICAgIH1cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bVBvczsgaSsrKSB7XG4gICAgICBici5yZWFkVWUoKTtcbiAgICAgIGJyLnJlYWQoMSk7XG4gICAgfVxuICB9XG59XG5cbi8qKiBQYXJzZSBzbGljZV9zZWdtZW50X2hlYWRlciB1cCB0byBieXRlX2FsaWdubWVudC4gUmV0dXJucyBiaXQgcG9zaXRpb24gQiAoZW5kIG9mIGhlYWRlciBjb250ZW50KS4gKi9cbmZ1bmN0aW9uIHBhcnNlSGVhZGVyVG9BbGlnbm1lbnQoYnI6IEJpdFJlYWRlciwgbmFsVHlwZTogbnVtYmVyLCBjZmc6IE52ZW5jSGV2Y0NvbmZpZyk6IG51bWJlciB7XG4gIGJyLnJlYWQoMTYpOyAvLyBza2lwIE5BTCBoZWFkZXJcbiAgaWYgKGJyLnJlYWQoMSkgIT09IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJhcHBsZV9hbHBoYTogZXhwZWN0ZWQgZmlyc3Rfc2xpY2Vfc2VnbWVudF9pbl9waWNfZmxhZz0xXCIpO1xuICB9XG4gIGNvbnN0IGlzSXJhcCA9IG5hbFR5cGUgPj0gTkFMX0JMQV9XX0xQICYmIG5hbFR5cGUgPD0gTkFMX1JTVl9JUkFQX1ZDTDIzO1xuICBpZiAoaXNJcmFwKSB7XG4gICAgYnIucmVhZCgxKTsgLy8gbm9fb3V0cHV0X29mX3ByaW9yX3BpY3NfZmxhZ1xuICB9XG4gIGJyLnJlYWRVZSgpOyAvLyBzbGljZV9waWNfcGFyYW1ldGVyX3NldF9pZFxuICBjb25zdCBzbGljZVR5cGUgPSBici5yZWFkVWUoKTtcbiAgaWYgKCFpc0lyYXApIHtcbiAgICBici5yZWFkKGNmZy5sb2cyTWF4UG9jTHNiKTsgLy8gc2xpY2VfcGljX29yZGVyX2NudF9sc2JcbiAgICBjb25zdCBzdFJlZlBpY1NldFNwc0ZsYWcgPSBici5yZWFkKDEpO1xuICAgIGlmICghc3RSZWZQaWNTZXRTcHNGbGFnKSB7XG4gICAgICBwYXJzZUlubGluZVN0UmVmUGljU2V0KGJyLCBjZmcubnVtRGVsdGFQb2NzU2V0MCk7XG4gICAgfSBlbHNlIGlmIChjZmcubnVtU2hvcnRUZXJtUmVmUGljU2V0cyA+IDEpIHtcbiAgICAgIGJyLnJlYWQoTWF0aC5jZWlsKE1hdGgubG9nMihjZmcubnVtU2hvcnRUZXJtUmVmUGljU2V0cykpKTtcbiAgICB9XG4gICAgaWYgKGNmZy5sb25nVGVybVJlZlBpY3NQcmVzZW50KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJhcHBsZV9hbHBoYTogbG9uZ190ZXJtX3JlZl9waWNzIHBhdGggdW5pbXBsZW1lbnRlZFwiKTtcbiAgICB9XG4gICAgaWYgKGNmZy5zcHNUZW1wb3JhbE12cEVuYWJsZWQpIHtcbiAgICAgIGJyLnJlYWQoMSk7IC8vIHNsaWNlX3RlbXBvcmFsX212cF9lbmFibGVkX2ZsYWdcbiAgICB9XG4gIH1cbiAgaWYgKGNmZy5zYW9FbmFibGVkKSB7XG4gICAgYnIucmVhZCgxKTsgLy8gc2xpY2Vfc2FvX2x1bWFfZmxhZ1xuICAgIGJyLnJlYWQoMSk7IC8vIHNsaWNlX3Nhb19jaHJvbWFfZmxhZ1xuICB9XG4gIGlmIChzbGljZVR5cGUgPT09IFNMSUNFX1RZUEVfUCB8fCBzbGljZVR5cGUgPT09IFNMSUNFX1RZUEVfQikge1xuICAgIGNvbnN0IG92ZXJyaWRlRmxhZyA9IGJyLnJlYWQoMSk7XG4gICAgaWYgKG92ZXJyaWRlRmxhZykge1xuICAgICAgYnIucmVhZFVlKCk7XG4gICAgICBpZiAoc2xpY2VUeXBlID09PSBTTElDRV9UWVBFX0IpIHtcbiAgICAgICAgYnIucmVhZFVlKCk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChzbGljZVR5cGUgPT09IFNMSUNFX1RZUEVfQikge1xuICAgICAgYnIucmVhZCgxKTsgLy8gbXZkX2wxX3plcm9fZmxhZ1xuICAgIH1cbiAgICBpZiAoY2ZnLmNhYmFjSW5pdFByZXNlbnQpIHtcbiAgICAgIGJyLnJlYWQoMSk7IC8vIGNhYmFjX2luaXRfZmxhZ1xuICAgIH1cbiAgICBici5yZWFkVWUoKTsgLy8gZml2ZV9taW51c19tYXhfbnVtX21lcmdlX2NhbmRcbiAgfVxuICByZWFkU2UoYnIpOyAvLyBzbGljZV9xcF9kZWx0YVxuICBpZiAoY2ZnLnBwc0hhc0xvb3BGaWx0ZXJBY3Jvc3NTbGljZXNGbGFnKSB7XG4gICAgYnIucmVhZCgxKTsgLy8gc2xpY2VfbG9vcF9maWx0ZXJfYWNyb3NzX3NsaWNlc19lbmFibGVkX2ZsYWdcbiAgfVxuICByZXR1cm4gYnIucG9zO1xufVxuXG4vKipcbiAqIFJld3JpdGUgYWxwaGEgc2xpY2UgaGVhZGVyOiBzbGljZV9waWNfcGFyYW1ldGVyX3NldF9pZCAwIOKGkiAxLlxuICogVGhlICsyLWJpdCBzaGlmdCBpcyBhYnNvcmJlZCBieSBlbWl0dGluZyBhIGZyZXNoIGJ5dGVfYWxpZ25tZW50IHRoZW4gYXBwZW5kaW5nIHRoZVxuICogb3JpZ2luYWwgQ0FCQUMgc2xpY2Vfc2VnbWVudF9kYXRhIGJ5dGVzIHZlcmJhdGltLiBDQUJBQyBieXRlIGJvdW5kYXJ5IGlzIHByZXNlcnZlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJld3JpdGVBbHBoYVNsaWNlSGVhZGVyKHNsaWNlOiBCdWZmZXIsIG5hbFR5cGU6IG51bWJlciwgY2ZnOiBOdmVuY0hldmNDb25maWcpOiBCdWZmZXIge1xuICBjb25zdCByYnNwID0gcmVtb3ZlRW11bGF0aW9uUHJldmVudGlvbihzbGljZSk7XG4gIGNvbnN0IGJyID0gbmV3IEJpdFJlYWRlcihyYnNwKTtcblxuICBjb25zdCBwcm9iZSA9IG5ldyBCaXRSZWFkZXIocmJzcCk7XG4gIGNvbnN0IEIgPSBwYXJzZUhlYWRlclRvQWxpZ25tZW50KHByb2JlLCBuYWxUeXBlLCBjZmcpO1xuICBjb25zdCBvbGRBbGlnbkJpdHMgPSBCICUgOCA9PT0gMCA/IDggOiA4IC0gKEIgJSA4KTtcbiAgY29uc3Qgc2xpY2VEYXRhQnl0ZU9mZnNldCA9IChCICsgb2xkQWxpZ25CaXRzKSAvIDg7XG5cbiAgY29uc3QgYncgPSBuZXcgQml0V3JpdGVyKCk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgMTY7IGkrKykge1xuICAgIGJ3LmJpdHMucHVzaChici5yZWFkKDEpKTsgLy8gTkFMIGhlYWRlclxuICB9XG4gIGJ3LmJpdHMucHVzaChici5yZWFkKDEpKTsgLy8gZmlyc3Rfc2xpY2Vfc2VnbWVudF9pbl9waWNfZmxhZ1xuICBjb25zdCBpc0lyYXAgPSBuYWxUeXBlID49IE5BTF9CTEFfV19MUCAmJiBuYWxUeXBlIDw9IE5BTF9SU1ZfSVJBUF9WQ0wyMztcbiAgaWYgKGlzSXJhcCkge1xuICAgIGJ3LmJpdHMucHVzaChici5yZWFkKDEpKTsgLy8gbm9fb3V0cHV0X29mX3ByaW9yX3BpY3NfZmxhZ1xuICB9XG5cbiAgYnIucmVhZFVlKCk7IC8vIGRpc2NhcmQgb2xkIHNsaWNlX3BpY19wYXJhbWV0ZXJfc2V0X2lkXG4gIGJ3LnVlKDEpOyAvLyBuZXcgc2xpY2VfcGljX3BhcmFtZXRlcl9zZXRfaWRcblxuICB3aGlsZSAoYnIucG9zIDwgQikge1xuICAgIGJ3LmJpdHMucHVzaChici5yZWFkKDEpKTsgLy8gY29weSByZXN0IG9mIGhlYWRlciBiaXRzXG4gIH1cblxuICBidy5iaXRzLnB1c2goMSk7IC8vIGJ5dGVfYWxpZ25tZW50OiByYnNwX2FsaWdubWVudF9iaXRfb25lXG4gIHdoaWxlIChidy5iaXRzLmxlbmd0aCAlIDggIT09IDApIHtcbiAgICBidy5iaXRzLnB1c2goMCk7XG4gIH1cblxuICByZXR1cm4gYWRkRW11bGF0aW9uUHJldmVudGlvbihCdWZmZXIuY29uY2F0KFtwYWNrQml0cyhidy5iaXRzKSwgcmJzcC5zdWJhcnJheShzbGljZURhdGFCeXRlT2Zmc2V0KV0pKTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMTMuXG5cbmltcG9ydCB7IEJpdFJlYWRlciwgQml0V3JpdGVyLCBwYWNrQml0cyB9IGZyb20gXCIuL2JpdFwiO1xuaW1wb3J0IHsgYWRkRW11bGF0aW9uUHJldmVudGlvbiwgcmVtb3ZlRW11bGF0aW9uUHJldmVudGlvbiB9IGZyb20gXCIuL25hbFwiO1xuXG5pbnRlcmZhY2UgUGFyc2VkUFRMIHtcbiAgcHRsU3RhcnQ6IG51bWJlcjtcbiAgcHRsRW5kOiBudW1iZXI7XG4gIHB0bEJpdHM6IG51bWJlcltdO1xuICBtYXhTdWJMYXllcnNNaW51czE6IG51bWJlcjtcbn1cblxuZnVuY3Rpb24gZXh0cmFjdFBUTCh2cHNEYXRhOiBCdWZmZXIpOiBQYXJzZWRQVEwgfCB1bmRlZmluZWQge1xuICBjb25zdCBiciA9IG5ldyBCaXRSZWFkZXIocmVtb3ZlRW11bGF0aW9uUHJldmVudGlvbih2cHNEYXRhKSk7XG4gIGJyLnJlYWQoMTYpOyAvLyBOQUwgaGVhZGVyXG4gIGJyLnJlYWQoNCk7IC8vIHZwc19pZFxuICBici5yZWFkKDIpOyAvLyBiYXNlX2xheWVyX2ludGVybmFsICsgYXZhaWxhYmxlXG4gIGlmIChici5yZWFkKDYpID4gMCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7IC8vIGFscmVhZHkgbXVsdGktbGF5ZXJcbiAgfVxuICBjb25zdCBtYXhTdWJMYXllcnNNaW51czEgPSBici5yZWFkKDMpO1xuICBici5yZWFkKDEgKyAxNik7IC8vIHRlbXBvcmFsX25lc3RpbmcgKyByZXNlcnZlZFxuXG4gIGNvbnN0IHB0bFN0YXJ0ID0gYnIucG9zO1xuICBici5yZWFkKDk2KTsgLy8gZ2VuZXJhbCBQVEwgKHByb2ZpbGVfc3BhY2UgKyB0aWVyICsgaWRjICsgY29tcGF0ICsgY29uc3RyYWludHMgKyBsZXZlbClcbiAgaWYgKG1heFN1YkxheWVyc01pbnVzMSA+IDApIHtcbiAgICBici5yZWFkKG1heFN1YkxheWVyc01pbnVzMSAqIDIgKyAoOCAtIG1heFN1YkxheWVyc01pbnVzMSkgKiAyKTtcbiAgfVxuICByZXR1cm4geyBwdGxTdGFydCwgcHRsRW5kOiBici5wb3MsIHB0bEJpdHM6IGJyLmJpdHMsIG1heFN1YkxheWVyc01pbnVzMSB9O1xufVxuXG4vKiogV3JpdGUgYmFzZSBWUFMgZmllbGRzIGZvciAyLWxheWVyIGFscGhhLiAqL1xuZnVuY3Rpb24gd3JpdGVCYXNlVlBTKGJ3OiBCaXRXcml0ZXIsIHB0bDogUGFyc2VkUFRMKSB7XG4gIGJ3LncoMHg0MDAxLCAxNik7IC8vIE5BTCBoZWFkZXJcbiAgYncudygwLCA0KTsgLy8gdnBzX2lkXG4gIGJ3LmZsYWcoMSk7IC8vIGJhc2VfbGF5ZXJfaW50ZXJuYWxcbiAgYncuZmxhZygxKTsgLy8gYmFzZV9sYXllcl9hdmFpbGFibGVcbiAgYncudygxLCA2KTsgLy8gbWF4X2xheWVyc19taW51czEgPSAxXG4gIGJ3LncocHRsLm1heFN1YkxheWVyc01pbnVzMSwgMyk7XG4gIC8vIHRlbXBvcmFsX25lc3Rpbmc6IHRydWUgd2hlbiBzaW5nbGUgc3ViLWxheWVyIChhbGwgcmVmcyBsYXllciAwKVxuICBidy5mbGFnKHB0bC5tYXhTdWJMYXllcnNNaW51czEgPT09IDApO1xuICBidy53KDB4ZmZmZiwgMTYpOyAvLyByZXNlcnZlZFxuICBidy5jb3B5KHB0bC5wdGxCaXRzLCBwdGwucHRsU3RhcnQsIHB0bC5wdGxFbmQgLSBwdGwucHRsU3RhcnQpO1xuXG4gIGJ3LmZsYWcoMSk7IC8vIHN1Yl9sYXllcl9vcmRlcmluZ19pbmZvX3ByZXNlbnRcbiAgZm9yIChsZXQgaSA9IDA7IGkgPD0gcHRsLm1heFN1YkxheWVyc01pbnVzMTsgaSsrKSB7XG4gICAgYncudWUoNCk7IC8vIG1heERlY1BpY0J1ZmZlcmluZyAtIDFcbiAgICBidy51ZSgyKTsgLy8gbnVtUmVvcmRlclBpY3NcbiAgICBidy51ZSg0KTsgLy8gbWF4TGF0ZW5jeUluY3JlYXNlICsgMVxuICB9XG5cbiAgYncudygxLCA2KTsgLy8gbWF4X251aF9sYXllcl9pZCA9IDFcbiAgYncudWUoMSk7IC8vIG51bV9sYXllcl9zZXRzX21pbnVzMSA9IDFcbiAgYncuZmxhZygxKTsgLy8gbGF5ZXJfaWRfaW5jbHVkZWRbMV1bMF1cbiAgYncuZmxhZygxKTsgLy8gbGF5ZXJfaWRfaW5jbHVkZWRbMV1bMV1cbiAgYncuZmxhZygwKTsgLy8gdGltaW5nX2luZm9fcHJlc2VudFxuICBidy5mbGFnKDEpOyAvLyB2cHNfZXh0ZW5zaW9uX2ZsYWdcbiAgYncuYWxpZ24oMSk7IC8vIGV4dGVuc2lvbiBhbGlnbm1lbnQgYml0cyA9IDFcbn1cblxuLyoqIFdyaXRlIFZQUyBleHRlbnNpb24gbWF0Y2hpbmcgeDI2NSA0LjEgRU5BQkxFX0FMUEhBLiAqL1xuZnVuY3Rpb24gd3JpdGVWUFNFeHRlbnNpb24oYnc6IEJpdFdyaXRlciwgcHRsOiBQYXJzZWRQVEwsIHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKSB7XG4gIC8vIEV4dGVuc2lvbiBQVEw6IGxldmVsX2lkYyBvbmx5IChwcm9maWxlUHJlc2VudEZsYWc9MClcbiAgYncuY29weShwdGwucHRsQml0cywgcHRsLnB0bEVuZCAtIDgsIDgpO1xuICBpZiAocHRsLm1heFN1YkxheWVyc01pbnVzMSA+IDApIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHB0bC5tYXhTdWJMYXllcnNNaW51czE7IGkrKykge1xuICAgICAgYncudygwLCAyKTtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IHB0bC5tYXhTdWJMYXllcnNNaW51czE7IGkgPCA4OyBpKyspIHtcbiAgICAgIGJ3LncoMCwgMik7XG4gICAgfVxuICB9XG5cbiAgYncuZmxhZygwKTsgLy8gc3BsaXR0aW5nX2ZsYWdcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCAxNjsgaSsrKSB7XG4gICAgYncuZmxhZyhpID09PSAyIHx8IGkgPT09IDMpOyAvLyBzY2FsYWJpbGl0eTogc3BhdGlhbCArIGF1eFxuICB9XG4gIGJ3LncoMCwgMyk7IC8vIGRpbWVuc2lvbl9pZF9sZW5bMF0gPSAxXG4gIGJ3LncoMCwgMyk7IC8vIGRpbWVuc2lvbl9pZF9sZW5bMV0gPSAxXG4gIGJ3LmZsYWcoMSk7IC8vIG51aF9sYXllcl9pZF9wcmVzZW50XG4gIGJ3LncoMSwgNik7IC8vIGxheWVyX2lkX2luX251aFsxXSA9IDFcbiAgYncudygxLCAxKTsgLy8gZGltZW5zaW9uX2lkWzFdWzBdID0gMVxuICBidy53KDEsIDEpOyAvLyBkaW1lbnNpb25faWRbMV1bMV0gPSBBVVhfQUxQSEFcbiAgYncudygwLCA0KTsgLy8gdmlld19pZF9sZW4gPSAwXG5cbiAgYncuZmxhZygwKTsgLy8gZGlyZWN0X2RlcGVuZGVuY3lfZmxhZ1sxXVswXVxuICBidy51ZSgwKTsgLy8gbnVtX2FkZF9sYXllcl9zZXRzXG4gIGJ3LmZsYWcoMCk7IC8vIHN1Yl9sYXllcnNfbWF4X21pbnVzMV9wcmVzZW50XG4gIGJ3LmZsYWcoMCk7IC8vIG1heF90aWRfcmVmX3ByZXNlbnRcbiAgYncuZmxhZygwKTsgLy8gZGVmYXVsdF9yZWZfbGF5ZXJzX2FjdGl2ZVxuXG4gIC8vIEZGbXBlZyBsb29wcyBmcm9tIGluZGV4IDIgdG8gbmJfcHRsLTEsIHNvIG5wdGxfbTE9MiDihpIgMSBlbnRyeSBhdCBpbmRleCAyXG4gIGJ3LnVlKDIpOyAvLyB2cHNfbnVtX3Byb2ZpbGVfdGllcl9sZXZlbF9taW51czFcbiAgYncuZmxhZygxKTsgLy8gcHJvZmlsZV9wcmVzZW50X2ZsYWdbMl1cbiAgYncuY29weShwdGwucHRsQml0cywgcHRsLnB0bFN0YXJ0LCBwdGwucHRsRW5kIC0gcHRsLnB0bFN0YXJ0KTtcblxuICBidy51ZSgwKTsgLy8gbnVtX2FkZF9vbHNzXG4gIGJ3LncoMCwgMik7IC8vIGRlZmF1bHRfb3V0cHV0X2xheWVyX2lkY1xuICBidy53KDEsIDIpOyAvLyBwdGxfaWR4WzFdWzBdID0gMSAoY2VpbF9sb2cyKDMpID0gMiBiaXRzKVxuICBidy53KDIsIDIpOyAvLyBwdGxfaWR4WzFdWzFdID0gMlxuXG4gIGJ3LnVlKDApOyAvLyB2cHNfbnVtX3JlcF9mb3JtYXRzX21pbnVzMVxuICBidy53KHdpZHRoLCAxNik7XG4gIGJ3LncoaGVpZ2h0LCAxNik7XG4gIGJ3LmZsYWcoMSk7IC8vIGNocm9tYV9hbmRfYml0X2RlcHRoX3Zwc19wcmVzZW50XG4gIGJ3LncoMSwgMik7IC8vIGNocm9tYV9mb3JtYXRfaWRjID0gNDoyOjBcbiAgYncudygwLCA0KTsgLy8gYml0X2RlcHRoX2x1bWFfbWludXM4XG4gIGJ3LncoMCwgNCk7IC8vIGJpdF9kZXB0aF9jaHJvbWFfbWludXM4XG4gIGJ3LmZsYWcoMCk7IC8vIGNvbmZvcm1hbmNlX3dpbmRvd192cHNfZmxhZ1xuXG4gIGJ3LmZsYWcoMSk7IC8vIG1heF9vbmVfYWN0aXZlX3JlZl9sYXllclxuICBidy5mbGFnKDApOyAvLyBwb2NfbHNiX2FsaWduZWRcbiAgYncuZmxhZygxKTsgLy8gcG9jX2xzYl9ub3RfcHJlc2VudFxuXG4gIC8vIERQQiBmb3IgT0xTIDEgKDIgbGF5ZXJzLCAxIHN1Yi1sYXllcilcbiAgYncuZmxhZygwKTsgLy8gc3ViX2xheWVyX2ZsYWdfaW5mb19wcmVzZW50XG4gIGJ3LnVlKDApOyAvLyBtYXhfZGVjX3BpY19idWZmZXJpbmcgKGxheWVyIDApXG4gIGJ3LnVlKDApOyAvLyBtYXhfZGVjX3BpY19idWZmZXJpbmcgKGxheWVyIDEpXG4gIGJ3LnVlKDApOyAvLyBtYXhfbnVtX3Jlb3JkZXJfcGljc1xuICBidy51ZSgwKTsgLy8gbWF4X2xhdGVuY3lfaW5jcmVhc2VcblxuICBidy51ZSgwKTsgLy8gZGlyZWN0X2RlcF90eXBlX2xlbl9taW51czJcbiAgYncuZmxhZygwKTsgLy8gZGVmYXVsdF9kaXJlY3RfZGVwZW5kZW5jeV9mbGFnXG4gIGJ3LnVlKDApOyAvLyBub25fdnVpX2V4dGVuc2lvbl9sZW5ndGhcbiAgYncuZmxhZygwKTsgLy8gdnBzX3Z1aV9wcmVzZW50XG4gIGJ3LmZsYWcoMCk7IC8vIHZwc19leHRlbnNpb24yX2ZsYWdcbn1cblxuLyoqXG4gKiBCdWlsZCBhIGNvbXBsZXRlIGFscGhhIFZQUyBmcm9tIHNjcmF0Y2gsIHVzaW5nIHRoZSBvcmlnaW5hbCBOVkVOQyBWUFNcbiAqIG9ubHkgYXMgYSBzb3VyY2UgZm9yIHRoZSBQVEwgKHByb2ZpbGUvdGllci9sZXZlbCkgYnl0ZXMuXG4gKiBNYXRjaGVzIHgyNjUgNC4xIEVOQUJMRV9BTFBIQSBWUFMgc3RydWN0dXJlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRBbHBoYVZQUyh2cHNEYXRhOiBCdWZmZXIsIHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKTogQnVmZmVyIHtcbiAgY29uc3QgcHRsID0gZXh0cmFjdFBUTCh2cHNEYXRhKTtcbiAgaWYgKCFwdGwpIHtcbiAgICByZXR1cm4gdnBzRGF0YTtcbiAgfVxuXG4gIGNvbnN0IGJ3ID0gbmV3IEJpdFdyaXRlcigpO1xuICB3cml0ZUJhc2VWUFMoYncsIHB0bCk7XG4gIHdyaXRlVlBTRXh0ZW5zaW9uKGJ3LCBwdGwsIHdpZHRoLCBoZWlnaHQpO1xuXG4gIGJ3LmJpdHMucHVzaCgxKTsgLy8gUkJTUCBzdG9wIGJpdFxuICBidy5hbGlnbigwKTtcbiAgcmV0dXJuIGFkZEVtdWxhdGlvblByZXZlbnRpb24ocGFja0JpdHMoYncuYml0cykpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8xMi5cblxuaW1wb3J0IHR5cGUgeyBGcmFtZSB9IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQgeyByZXdyaXRlQWxwaGFQcHMsIHJld3JpdGVBbHBoYVNsaWNlSGVhZGVyLCByZXdyaXRlQWxwaGFTcHMgfSBmcm9tIFwiLi9hbHBoYV9kYXJ3aW5cIjtcbmltcG9ydCB7IHBhY2tCaXRzIH0gZnJvbSBcIi4vYml0XCI7XG5pbXBvcnQge1xuICBBTk5FWF9CX1NUQVJUX0NPREUsXG4gIGVuY29kZU5hbEhlYWRlcixcbiAgTkFMX1BQUyxcbiAgTkFMX1NFSV9QUkVGSVgsXG4gIE5BTF9TUFMsXG4gIE5BTF9WUFMsXG4gIHR5cGUgTmFsVW5pdCxcbiAgcmV3cml0ZU5hbExheWVySWQsXG4gIHNwbGl0TmFsVW5pdHMsXG59IGZyb20gXCIuL25hbFwiO1xuaW1wb3J0IHR5cGUgeyBOdmVuY0hldmNDb25maWcgfSBmcm9tIFwiLi9wYXJzZXJcIjtcbmltcG9ydCB7IGJ1aWxkQWxwaGFWUFMgfSBmcm9tIFwiLi92cHNcIjtcblxuLy8gQkdSQSBhbHBoYSDihpIgWSBwbGFuZSBvZiBwYWNrZWQgWVVWNDIwUCAoY2FsbGVyIHByZS1maWxscyBVVj0xMjgpOyBVaW50MzIgZmFzdCBwYXRoOiBCR1JBIExFIHUzMiA+Pj4gMjQgPSBBIGJ5dGUuXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdEFscGhhVG9ZdXY0MjBwQnVmZmVyKGJncmFGcmFtZTogRnJhbWUsIGJ1ZjogQnVmZmVyKTogdm9pZCB7XG4gIGNvbnN0IHNyYyA9IGJncmFGcmFtZS5kYXRhPy5bMF07XG4gIGNvbnN0IHNyY0xzID0gYmdyYUZyYW1lLmxpbmVzaXplPy5bMF07XG4gIGlmICghc3JjIHx8ICFzcmNMcykge1xuICAgIHRocm93IG5ldyBFcnJvcihcImV4dHJhY3RBbHBoYTogbWlzc2luZyBCR1JBIGRhdGFcIik7XG4gIH1cbiAgY29uc3QgdyA9IGJncmFGcmFtZS53aWR0aDtcbiAgY29uc3QgaCA9IGJncmFGcmFtZS5oZWlnaHQ7XG4gIGNvbnN0IHlTaXplID0gdyAqIGg7XG4gIGlmIChzcmMuYnl0ZU9mZnNldCAlIDQgPT09IDAgJiYgc3JjTHMgPT09IHcgKiA0KSB7XG4gICAgY29uc3Qgc3JjMzIgPSBuZXcgVWludDMyQXJyYXkoc3JjLmJ1ZmZlciwgc3JjLmJ5dGVPZmZzZXQsIHlTaXplKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHlTaXplOyBpKyspIHtcbiAgICAgIGJ1ZltpXSA9IHNyYzMyW2ldISA+Pj4gMjQ7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGZvciAobGV0IHkgPSAwOyB5IDwgaDsgeSsrKSB7XG4gICAgICBjb25zdCByb3dCYXNlID0geSAqIHNyY0xzICsgMztcbiAgICAgIGNvbnN0IGRzdEJhc2UgPSB5ICogdztcbiAgICAgIGZvciAobGV0IHggPSAwOyB4IDwgdzsgeCsrKSB7XG4gICAgICAgIGJ1Zltkc3RCYXNlICsgeF0gPSBzcmNbcm93QmFzZSArIHggKiA0XSE7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVW5pZmllZEV4dHJhZGF0YU9wdGlvbnMge1xuICBiYXNlRXh0cmFkYXRhOiBCdWZmZXI7XG4gIGFscGhhRXh0cmFkYXRhOiBCdWZmZXI7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xufVxuXG4vLyBBcHBsZSBIRVZDIEFscGhhIFByb2ZpbGU6IGFscGhhIFNQUyBzcHNfc2VxX3BhcmFtZXRlcl9zZXRfaWQ9MSwgYWxwaGEgUFBTIHBpYytzZXEgaWQ9MS5cbmZ1bmN0aW9uIHJld3JpdGVBbHBoYVBhcmFtU2V0KHR5cGU6IG51bWJlciwgZGF0YTogQnVmZmVyKTogQnVmZmVyIHtcbiAgaWYgKHR5cGUgPT09IE5BTF9TUFMpIHtcbiAgICByZXR1cm4gcmV3cml0ZUFscGhhU3BzKGRhdGEpO1xuICB9XG4gIGlmICh0eXBlID09PSBOQUxfUFBTKSB7XG4gICAgcmV0dXJuIHJld3JpdGVBbHBoYVBwcyhkYXRhKTtcbiAgfVxuICByZXR1cm4gZGF0YTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkVW5pZmllZEV4dHJhZGF0YShvcHRzOiBVbmlmaWVkRXh0cmFkYXRhT3B0aW9ucyk6IEJ1ZmZlciB7XG4gIGNvbnN0IHsgYmFzZUV4dHJhZGF0YSwgYWxwaGFFeHRyYWRhdGEgfSA9IG9wdHM7XG4gIGNvbnN0IGJhc2VOYWxzID0gc3BsaXROYWxVbml0cyhiYXNlRXh0cmFkYXRhKTtcbiAgY29uc3QgYWxwaGFOYWxzID0gc3BsaXROYWxVbml0cyhhbHBoYUV4dHJhZGF0YSk7XG5cbiAgY29uc3QgYWxwaGFCeVR5cGUgPSBuZXcgTWFwPG51bWJlciwgTmFsVW5pdFtdPigpO1xuICBmb3IgKGNvbnN0IG5hbCBvZiBhbHBoYU5hbHMpIHtcbiAgICBpZiAobmFsLnR5cGUgPT09IE5BTF9WUFMpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCBhcnIgPSBhbHBoYUJ5VHlwZS5nZXQobmFsLnR5cGUpID8/IFtdO1xuICAgIGFyci5wdXNoKG5hbCk7XG4gICAgYWxwaGFCeVR5cGUuc2V0KG5hbC50eXBlLCBhcnIpO1xuICB9XG5cbiAgY29uc3QgY2h1bmtzOiBCdWZmZXJbXSA9IFtdO1xuICBjb25zdCBlbWl0dGVkID0gbmV3IFNldDxudW1iZXI+KCk7XG4gIGZvciAoY29uc3QgbmFsIG9mIGJhc2VOYWxzKSB7XG4gICAgY29uc3QgZGF0YSA9IG5hbC50eXBlID09PSBOQUxfVlBTID8gYnVpbGRBbHBoYVZQUyhuYWwuZGF0YSwgb3B0cy53aWR0aCwgb3B0cy5oZWlnaHQpIDogbmFsLmRhdGE7XG4gICAgY2h1bmtzLnB1c2goQU5ORVhfQl9TVEFSVF9DT0RFLCBkYXRhKTtcbiAgICBpZiAoIWVtaXR0ZWQuaGFzKG5hbC50eXBlKSkge1xuICAgICAgZW1pdHRlZC5hZGQobmFsLnR5cGUpO1xuICAgICAgZm9yIChjb25zdCBhbHBoYU5hbCBvZiBhbHBoYUJ5VHlwZS5nZXQobmFsLnR5cGUpID8/IFtdKSB7XG4gICAgICAgIGNvbnN0IGFEYXRhID0gcmV3cml0ZUFscGhhUGFyYW1TZXQobmFsLnR5cGUsIGFscGhhTmFsLmRhdGEpO1xuICAgICAgICBjaHVua3MucHVzaChBTk5FWF9CX1NUQVJUX0NPREUsIHJld3JpdGVOYWxMYXllcklkKGFEYXRhLCAxKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY2h1bmtzLnB1c2goYnVpbGRBbHBoYUNoYW5uZWxJbmZvU0VJKCkpO1xuICByZXR1cm4gQnVmZmVyLmNvbmNhdChjaHVua3MpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRBbHBoYUNoYW5uZWxJbmZvU0VJKCk6IEJ1ZmZlciB7XG4gIGNvbnN0IHBheWxvYWRUeXBlID0gMTY1O1xuICBjb25zdCBwYXlsb2FkU2l6ZSA9IDQ7XG4gIGNvbnN0IFtoMCwgaDFdID0gZW5jb2RlTmFsSGVhZGVyKE5BTF9TRUlfUFJFRklYLCAwLCAxKTtcblxuICBjb25zdCBiaXRzOiBudW1iZXJbXSA9IFtdO1xuICBjb25zdCB3cml0ZUJpdHMgPSAodmFsOiBudW1iZXIsIG46IG51bWJlcikgPT4ge1xuICAgIGZvciAobGV0IGkgPSBuIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGJpdHMucHVzaCgodmFsID4+IGkpICYgMSk7XG4gICAgfVxuICB9O1xuXG4gIHdyaXRlQml0cygwLCAxKTsgLy8gYWxwaGFfY2hhbm5lbF9jYW5jZWxfZmxhZ1xuICB3cml0ZUJpdHMoMCwgMyk7IC8vIGFscGhhX2NoYW5uZWxfdXNlX2lkYyAoMCA9IHVuc3BlY2lmaWVkL3ByZW11bHRpcGxpZWQ7IG1hdGNoZXMgeDI2NSBFTkFCTEVfQUxQSEEpXG4gIHdyaXRlQml0cygwLCAzKTsgLy8gYWxwaGFfY2hhbm5lbF9iaXRfZGVwdGhfbWludXM4XG4gIHdyaXRlQml0cygwLCA5KTsgLy8gYWxwaGFfdHJhbnNwYXJlbnRfdmFsdWVcbiAgd3JpdGVCaXRzKDI1NSwgOSk7IC8vIGFscGhhX29wYXF1ZV92YWx1ZVxuICB3cml0ZUJpdHMoMCwgMSk7IC8vIGFscGhhX2NoYW5uZWxfaW5jcl9mbGFnXG4gIHdyaXRlQml0cygwLCAxKTsgLy8gYWxwaGFfY2hhbm5lbF9jbGlwX2ZsYWdcbiAgd3JpdGVCaXRzKDEsIDEpOyAvLyBieXRlIGFsaWdubWVudFxuICB3aGlsZSAoYml0cy5sZW5ndGggJSA4ICE9PSAwKSB7XG4gICAgd3JpdGVCaXRzKDAsIDEpO1xuICB9XG5cbiAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoW1xuICAgIEFOTkVYX0JfU1RBUlRfQ09ERSxcbiAgICBCdWZmZXIuZnJvbShbaDAsIGgxXSksXG4gICAgQnVmZmVyLmZyb20oW3BheWxvYWRUeXBlLCBwYXlsb2FkU2l6ZV0pLFxuICAgIHBhY2tCaXRzKGJpdHMpLFxuICAgIEJ1ZmZlci5mcm9tKFsweDgwXSksXG4gIF0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW50ZXJsZWF2ZUFjY2Vzc1VuaXRzKGJhc2VOYWxzOiBOYWxVbml0W10sIGFscGhhTmFsczogTmFsVW5pdFtdLCBjZmc6IE52ZW5jSGV2Y0NvbmZpZyk6IEJ1ZmZlciB7XG4gIGNvbnN0IGNodW5rczogQnVmZmVyW10gPSBbXTtcbiAgZm9yIChjb25zdCBuYWwgb2YgYmFzZU5hbHMpIHtcbiAgICBjaHVua3MucHVzaChBTk5FWF9CX1NUQVJUX0NPREUsIG5hbC5kYXRhKTtcbiAgfVxuICBmb3IgKGNvbnN0IG5hbCBvZiBhbHBoYU5hbHMpIHtcbiAgICBpZiAobmFsLnR5cGUgPCBOQUxfVlBTKSB7XG4gICAgICBjb25zdCBkYXRhID0gcmV3cml0ZUFscGhhU2xpY2VIZWFkZXIobmFsLmRhdGEsIG5hbC50eXBlLCBjZmcpO1xuICAgICAgY2h1bmtzLnB1c2goQU5ORVhfQl9TVEFSVF9DT0RFLCByZXdyaXRlTmFsTGF5ZXJJZChkYXRhLCAxKSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBCdWZmZXIuY29uY2F0KGNodW5rcyk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA1LzE4LlxuXG5pbXBvcnQgeyB0eXBlIENvZGVjQ29udGV4dCwgRkZtcGVnRXJyb3IsIHR5cGUgUGFja2V0LCB0eXBlIFN0cmVhbSB9IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQgeyBBVkVSUk9SX0VBR0FJTiwgQVZFUlJPUl9FT0YsIHR5cGUgQVZQYWNrZXRGbGFnIH0gZnJvbSBcIm5vZGUtYXYvY29uc3RhbnRzXCI7XG5pbXBvcnQgdHlwZSB7IEZvcm1hdE11eGVyIH0gZnJvbSBcIi4uL211eGVyXCI7XG5pbXBvcnQgeyBpbnRlcmxlYXZlQWNjZXNzVW5pdHMgfSBmcm9tIFwiLi9hbHBoYVwiO1xuaW1wb3J0IHsgcGF0Y2hIZXZjQWxwaGFQdGwgfSBmcm9tIFwiLi9hbHBoYV9kYXJ3aW5cIjtcbmltcG9ydCB7IHNwbGl0TmFsVW5pdHMgfSBmcm9tIFwiLi9uYWxcIjtcbmltcG9ydCB0eXBlIHsgTnZlbmNIZXZjQ29uZmlnIH0gZnJvbSBcIi4vcGFyc2VyXCI7XG5cbmludGVyZmFjZSBQZW5kaW5nUGFja2V0IHtcbiAgZGF0YTogQnVmZmVyO1xuICBwdHM6IGJpZ2ludDtcbiAgZHRzOiBiaWdpbnQ7XG4gIGR1cmF0aW9uOiBiaWdpbnQ7XG4gIGZsYWdzOiBBVlBhY2tldEZsYWc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRHVhbExheWVyTXV4T3B0aW9ucyB7XG4gIGJhc2VDdHg6IENvZGVjQ29udGV4dDtcbiAgYWxwaGFDdHg6IENvZGVjQ29udGV4dDtcbiAgYmFzZVBrdDogUGFja2V0O1xuICBhbHBoYVBrdDogUGFja2V0O1xuICBzdHJlYW06IFN0cmVhbTtcbiAgaGV2Y0NmZzogTnZlbmNIZXZjQ29uZmlnO1xufVxuXG4vLyBEcmFpbnMgdGhlIGJhc2UgKyBhbHBoYSBOVkVOQyBzZXNzaW9ucyBhbmQgd3JpdGVzIGludGVybGVhdmVkIEhFVkMtYWxwaGEgYWNjZXNzIHVuaXRzLlxuZXhwb3J0IGNsYXNzIER1YWxMYXllck11eCB7XG4gIHByaXZhdGUgX3M6IER1YWxMYXllck11eE9wdGlvbnM7XG4gIHByaXZhdGUgX2Jhc2VRdWV1ZTogUGVuZGluZ1BhY2tldFtdID0gW107XG4gIHByaXZhdGUgX2FscGhhUXVldWU6IFBlbmRpbmdQYWNrZXRbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKHM6IER1YWxMYXllck11eE9wdGlvbnMpIHtcbiAgICB0aGlzLl9zID0gcztcbiAgfVxuXG4gIGFzeW5jIGRyYWluKG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgYmFzZUN0eCwgYWxwaGFDdHgsIGJhc2VQa3QsIGFscGhhUGt0IH0gPSB0aGlzLl9zO1xuICAgIC8vIERyYWluIGVhY2ggc2Vzc2lvbiBmdWxseSDigJQgaW5kZXBlbmRlbnQgTlZFTkMgc2Vzc2lvbnMgcnVuIGEgZnJhbWUgYXBhcnQgdHJhbnNpZW50bHkuXG4gICAgdGhpcy5fYmFzZVF1ZXVlLnB1c2goLi4uKGF3YWl0IHRoaXMucmVjZWl2ZUFsbChiYXNlQ3R4LCBiYXNlUGt0LCBcImJhc2VcIikpKTtcbiAgICB0aGlzLl9hbHBoYVF1ZXVlLnB1c2goLi4uKGF3YWl0IHRoaXMucmVjZWl2ZUFsbChhbHBoYUN0eCwgYWxwaGFQa3QsIFwiYWxwaGFcIikpKTtcbiAgICAvLyBiZj0wIOKGkiBubyByZW9yZGVyOyBxdWV1ZSBpbmRleCBOIGlzIHRoZSBzYW1lIGZyYW1lIGZvciBib3RoLiBMZWZ0b3ZlciB3YWl0cyBmb3IgbmV4dCBkcmFpbi5cbiAgICB3aGlsZSAodGhpcy5fYmFzZVF1ZXVlLmxlbmd0aCAmJiB0aGlzLl9hbHBoYVF1ZXVlLmxlbmd0aCkge1xuICAgICAgYXdhaXQgdGhpcy53cml0ZVBhaXIodGhpcy5fYmFzZVF1ZXVlLnNoaWZ0KCkhLCB0aGlzLl9hbHBoYVF1ZXVlLnNoaWZ0KCkhLCBtdXhlcik7XG4gICAgfVxuICB9XG5cbiAgLy8gVW5wYWlyZWQgbGVmdG92ZXJzIGFmdGVyIEVPRiA9IHRydWUgYmFzZS9hbHBoYSBkZXN5bmM7IHJldHVybnMgYSBkZXNjcmlwdGlvbiwgZWxzZSB1bmRlZmluZWQuXG4gIGRlc3luY0FmdGVyRW9mKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCF0aGlzLl9iYXNlUXVldWUubGVuZ3RoICYmICF0aGlzLl9hbHBoYVF1ZXVlLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIGBiYXNlPSR7dGhpcy5fYmFzZVF1ZXVlLmxlbmd0aH0sIGFscGhhPSR7dGhpcy5fYWxwaGFRdWV1ZS5sZW5ndGh9IHVucGFpcmVkYDtcbiAgfVxuXG4gIC8vIEVBR0FJTi9FT0YgPSBub3JtYWwgc3RvcDsgYW55IG90aGVyIG5lZ2F0aXZlIGlzIGEgcmVhbCBmYXVsdCwgbm90IFwiZHJhaW5lZFwiLlxuICBwcml2YXRlIGFzeW5jIHJlY2VpdmVBbGwoY3R4OiBDb2RlY0NvbnRleHQsIHBrdDogUGFja2V0LCB0YWc6IHN0cmluZyk6IFByb21pc2U8UGVuZGluZ1BhY2tldFtdPiB7XG4gICAgY29uc3Qgb3V0OiBQZW5kaW5nUGFja2V0W10gPSBbXTtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgY29uc3QgcmV0ID0gYXdhaXQgY3R4LnJlY2VpdmVQYWNrZXQocGt0KTtcbiAgICAgIGlmIChyZXQgPj0gMCkge1xuICAgICAgICBvdXQucHVzaCh0aGlzLnNuYXBzaG90KHBrdCkpO1xuICAgICAgICBwa3QudW5yZWYoKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAocmV0ID09PSBBVkVSUk9SX0VBR0FJTiB8fCByZXQgPT09IEFWRVJST1JfRU9GKSB7XG4gICAgICAgIHJldHVybiBvdXQ7XG4gICAgICB9XG4gICAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IocmV0LCBgbnZlbmMuJHt0YWd9LnJlY2VpdmVQYWNrZXRgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNuYXBzaG90KHBrdDogUGFja2V0KTogUGVuZGluZ1BhY2tldCB7XG4gICAgLy8gcGt0LmRhdGEgaXMgbmF0aXZlIG1lbW9yeSBmcmVlZCBvbiB1bnJlZiDigJQgY29weSBiZWZvcmUgcXVldWVpbmcuXG4gICAgcmV0dXJuIHsgZGF0YTogQnVmZmVyLmZyb20ocGt0LmRhdGEhKSwgcHRzOiBwa3QucHRzLCBkdHM6IHBrdC5kdHMsIGR1cmF0aW9uOiBwa3QuZHVyYXRpb24sIGZsYWdzOiBwa3QuZmxhZ3MgfTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgd3JpdGVQYWlyKGJhc2U6IFBlbmRpbmdQYWNrZXQsIGFscGhhOiBQZW5kaW5nUGFja2V0LCBtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IGJhc2VQa3QsIGJhc2VDdHgsIHN0cmVhbSwgaGV2Y0NmZyB9ID0gdGhpcy5fcztcbiAgICAvLyBQYXRjaCBpbi1iYW5kIFZQUy9TUFMgUFRMIGJpdHMgZm9yIEFwcGxlLVZUQiBjb21wYXQgKGVuY29kZXIgcmVwZWF0cyBoZWFkZXJzIHBlciBJRFIpLlxuICAgIGNvbnN0IGludGVybGVhdmVkID0gaW50ZXJsZWF2ZUFjY2Vzc1VuaXRzKHNwbGl0TmFsVW5pdHMoYmFzZS5kYXRhKSwgc3BsaXROYWxVbml0cyhhbHBoYS5kYXRhKSwgaGV2Y0NmZyk7XG4gICAgLy8gZGF0YSBzZXR0ZXIgd2lwZXMgcHRzL2R0cy9kdXJhdGlvbi9mbGFncyDigJQgcmVzdG9yZTsgZmxhZ3MnIEtFWSBiaXQgZHJpdmVzIG1vdiBzdHNzLlxuICAgIGJhc2VQa3QuZGF0YSA9IHBhdGNoSGV2Y0FscGhhUHRsKGludGVybGVhdmVkKTtcbiAgICBiYXNlUGt0LnB0cyA9IGJhc2UucHRzO1xuICAgIGJhc2VQa3QuZHRzID0gYmFzZS5kdHM7XG4gICAgYmFzZVBrdC5kdXJhdGlvbiA9IGJhc2UuZHVyYXRpb24gPT09IDBuID8gMW4gOiBiYXNlLmR1cmF0aW9uO1xuICAgIGJhc2VQa3QuZmxhZ3MgPSBiYXNlLmZsYWdzO1xuICAgIGJhc2VQa3Quc3RyZWFtSW5kZXggPSBzdHJlYW0uaW5kZXg7XG4gICAgYmFzZVBrdC5yZXNjYWxlVHMoYmFzZUN0eC50aW1lQmFzZSwgc3RyZWFtLnRpbWVCYXNlKTtcbiAgICBhd2FpdCBtdXhlci53cml0ZVBhY2tldChiYXNlUGt0KTtcbiAgICBiYXNlUGt0LnVucmVmKCk7XG4gIH1cbn1cbiIsIi8vIFBhcnNlIE5WRU5DIFNQUy9QUFMgZXh0cmFkYXRhIGF0IGVuY29kZXIgaW5pdCB0byBkZXJpdmUgc2xpY2UtaGVhZGVyIHBhcnNlciBmbGFnczsgdGhyb3dzIGlmIE5WRU5DIGRlZmF1bHRzIHNoaWZ0LlxuXG5pbXBvcnQgeyBCaXRSZWFkZXIgfSBmcm9tIFwiLi9iaXRcIjtcbmltcG9ydCB7IE5BTF9QUFMsIE5BTF9TUFMsIHJlbW92ZUVtdWxhdGlvblByZXZlbnRpb24sIHNwbGl0TmFsVW5pdHMgfSBmcm9tIFwiLi9uYWxcIjtcblxuZXhwb3J0IGludGVyZmFjZSBOdmVuY0hldmNDb25maWcge1xuICBsb2cyTWF4UG9jTHNiOiBudW1iZXI7XG4gIG51bVNob3J0VGVybVJlZlBpY1NldHM6IG51bWJlcjtcbiAgbnVtRGVsdGFQb2NzU2V0MDogbnVtYmVyO1xuICBsb25nVGVybVJlZlBpY3NQcmVzZW50OiBib29sZWFuO1xuICBzcHNUZW1wb3JhbE12cEVuYWJsZWQ6IGJvb2xlYW47XG4gIHNhb0VuYWJsZWQ6IGJvb2xlYW47XG4gIGNhYmFjSW5pdFByZXNlbnQ6IGJvb2xlYW47XG4gIHBwc0hhc0xvb3BGaWx0ZXJBY3Jvc3NTbGljZXNGbGFnOiBib29sZWFuO1xufVxuXG5mdW5jdGlvbiBmYWlsKGZpZWxkOiBzdHJpbmcsIGdvdDogdW5rbm93biwgZXhwZWN0ZWQ6IHN0cmluZyk6IG5ldmVyIHtcbiAgdGhyb3cgbmV3IEVycm9yKGBoZXZjX2FscGhhOiBOVkVOQyBTUFMvUFBTIHVuc3VwcG9ydGVkOiAke2ZpZWxkfT0ke2dvdH0sIGV4cGVjdGVkICR7ZXhwZWN0ZWR9YCk7XG59XG5cbmZ1bmN0aW9uIHNraXBQdGwoYnI6IEJpdFJlYWRlciwgbWF4U3ViTGF5ZXJzOiBudW1iZXIpOiB2b2lkIHtcbiAgYnIucmVhZCgyICsgMSArIDUpOyAvLyBwcm9maWxlX3NwYWNlLCB0aWVyLCBwcm9maWxlX2lkY1xuICBici5yZWFkKDMyKTsgLy8gcHJvZmlsZV9jb21wYXRpYmlsaXR5X2ZsYWdbMC4uMzFdXG4gIGJyLnJlYWQoNDgpOyAvLyA0IHNvdXJjZS9wYWNrZWQgZmxhZ3MgKyA0MyBjb25zdHJhaW50L3Jlc2VydmVkICsgMSBpbmJsZFxuICBici5yZWFkKDgpOyAvLyBsZXZlbF9pZGNcbiAgY29uc3Qgc3ViUHJvZmlsZVByZXNlbnQ6IG51bWJlcltdID0gW107XG4gIGNvbnN0IHN1YkxldmVsUHJlc2VudDogbnVtYmVyW10gPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXhTdWJMYXllcnM7IGkrKykge1xuICAgIHN1YlByb2ZpbGVQcmVzZW50LnB1c2goYnIucmVhZCgxKSk7XG4gICAgc3ViTGV2ZWxQcmVzZW50LnB1c2goYnIucmVhZCgxKSk7XG4gIH1cbiAgaWYgKG1heFN1YkxheWVycyA+IDApIHtcbiAgICBmb3IgKGxldCBpID0gbWF4U3ViTGF5ZXJzOyBpIDwgODsgaSsrKSB7XG4gICAgICBici5yZWFkKDIpO1xuICAgIH1cbiAgfVxuICBmb3IgKGxldCBpID0gMDsgaSA8IG1heFN1YkxheWVyczsgaSsrKSB7XG4gICAgaWYgKHN1YlByb2ZpbGVQcmVzZW50W2ldKSB7XG4gICAgICBici5yZWFkKDggKyAzMiArIDQ4KTtcbiAgICB9XG4gICAgaWYgKHN1YkxldmVsUHJlc2VudFtpXSkge1xuICAgICAgYnIucmVhZCg4KTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcGFyc2VTcHMoc3BzUmJzcDogQnVmZmVyKToge1xuICBsb2cyTWF4UG9jTHNiOiBudW1iZXI7XG4gIHNhb0VuYWJsZWQ6IGJvb2xlYW47XG4gIG51bVNob3J0VGVybVJlZlBpY1NldHM6IG51bWJlcjtcbiAgbnVtRGVsdGFQb2NzU2V0MDogbnVtYmVyO1xuICBsb25nVGVybVJlZlBpY3NQcmVzZW50OiBib29sZWFuO1xuICBzcHNUZW1wb3JhbE12cEVuYWJsZWQ6IGJvb2xlYW47XG59IHtcbiAgY29uc3QgYnIgPSBuZXcgQml0UmVhZGVyKHNwc1Jic3ApO1xuICBici5yZWFkKDE2KTsgLy8gTkFMIGhlYWRlclxuICBici5yZWFkKDQpOyAvLyBzcHNfdmlkZW9fcGFyYW1ldGVyX3NldF9pZFxuICBjb25zdCBtYXhTdWJMYXllcnMgPSBici5yZWFkKDMpO1xuICAvLyBhbHBoYV9kYXJ3aW4ucmV3cml0ZUFscGhhU3BzICsgdnBzLmV4dHJhY3RQVEwgaGFyZGNvZGUgOTYtYml0IFBUTCDigJQgb25seSB2YWxpZCB3aGVuIHN1Yl9sYXllcnM9MC5cbiAgaWYgKG1heFN1YkxheWVycyAhPT0gMCkge1xuICAgIGZhaWwoXCJzcHNfbWF4X3N1Yl9sYXllcnNfbWludXMxXCIsIG1heFN1YkxheWVycywgXCIwXCIpO1xuICB9XG4gIGJyLnJlYWQoMSk7IC8vIHNwc190ZW1wb3JhbF9pZF9uZXN0aW5nX2ZsYWdcbiAgc2tpcFB0bChiciwgbWF4U3ViTGF5ZXJzKTtcbiAgYnIucmVhZFVlKCk7IC8vIHNwc19zZXFfcGFyYW1ldGVyX3NldF9pZFxuICBjb25zdCBjaHJvbWFGb3JtYXQgPSBici5yZWFkVWUoKTtcbiAgaWYgKGNocm9tYUZvcm1hdCA9PT0gMykge1xuICAgIGZhaWwoXCJjaHJvbWFfZm9ybWF0X2lkY1wiLCBjaHJvbWFGb3JtYXQsIFwi4omgM1wiKTtcbiAgfVxuICBici5yZWFkVWUoKTsgLy8gcGljX3dpZHRoX2luX2x1bWFfc2FtcGxlc1xuICBici5yZWFkVWUoKTsgLy8gcGljX2hlaWdodF9pbl9sdW1hX3NhbXBsZXNcbiAgaWYgKGJyLnJlYWQoMSkpIHtcbiAgICBici5yZWFkVWUoKTtcbiAgICBici5yZWFkVWUoKTtcbiAgICBici5yZWFkVWUoKTtcbiAgICBici5yZWFkVWUoKTtcbiAgfVxuICBici5yZWFkVWUoKTsgLy8gYml0X2RlcHRoX2x1bWFfbWludXM4XG4gIGJyLnJlYWRVZSgpOyAvLyBiaXRfZGVwdGhfY2hyb21hX21pbnVzOFxuICBjb25zdCBsb2cyTWF4UG9jTHNiID0gYnIucmVhZFVlKCkgKyA0O1xuICBjb25zdCBzdWJPcmRlckluZm8gPSBici5yZWFkKDEpO1xuICBjb25zdCBvcmRlckNvdW50ID0gc3ViT3JkZXJJbmZvID8gbWF4U3ViTGF5ZXJzICsgMSA6IDE7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgb3JkZXJDb3VudDsgaSsrKSB7XG4gICAgYnIucmVhZFVlKCk7XG4gICAgYnIucmVhZFVlKCk7XG4gICAgYnIucmVhZFVlKCk7XG4gIH1cbiAgYnIucmVhZFVlKCk7XG4gIGJyLnJlYWRVZSgpO1xuICBici5yZWFkVWUoKTtcbiAgYnIucmVhZFVlKCk7XG4gIGJyLnJlYWRVZSgpO1xuICBici5yZWFkVWUoKTtcbiAgaWYgKGJyLnJlYWQoMSkpIHtcbiAgICBmYWlsKFwic2NhbGluZ19saXN0X2VuYWJsZWRfZmxhZ1wiLCAxLCBcIjBcIik7XG4gIH1cbiAgYnIucmVhZCgxKTsgLy8gYW1wX2VuYWJsZWRfZmxhZ1xuICBjb25zdCBzYW9FbmFibGVkID0gYnIucmVhZCgxKSA9PT0gMTtcbiAgaWYgKGJyLnJlYWQoMSkpIHtcbiAgICBmYWlsKFwicGNtX2VuYWJsZWRfZmxhZ1wiLCAxLCBcIjBcIik7XG4gIH1cbiAgY29uc3QgbnVtU3RScHMgPSBici5yZWFkVWUoKTtcbiAgaWYgKG51bVN0UnBzID4gMSkge1xuICAgIGZhaWwoXCJudW1fc2hvcnRfdGVybV9yZWZfcGljX3NldHNcIiwgbnVtU3RScHMsIFwi4omkMVwiKTtcbiAgfVxuICBsZXQgbnVtRGVsdGFQb2NzU2V0MCA9IDA7XG4gIGlmIChudW1TdFJwcyA9PT0gMSkge1xuICAgIGNvbnN0IG51bU5lZyA9IGJyLnJlYWRVZSgpO1xuICAgIGNvbnN0IG51bVBvcyA9IGJyLnJlYWRVZSgpO1xuICAgIG51bURlbHRhUG9jc1NldDAgPSBudW1OZWcgKyBudW1Qb3M7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1OZWc7IGkrKykge1xuICAgICAgYnIucmVhZFVlKCk7XG4gICAgICBici5yZWFkKDEpO1xuICAgIH1cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bVBvczsgaSsrKSB7XG4gICAgICBici5yZWFkVWUoKTtcbiAgICAgIGJyLnJlYWQoMSk7XG4gICAgfVxuICB9XG4gIGNvbnN0IGxvbmdUZXJtUmVmUGljc1ByZXNlbnQgPSBici5yZWFkKDEpID09PSAxO1xuICBpZiAobG9uZ1Rlcm1SZWZQaWNzUHJlc2VudCkge1xuICAgIGZhaWwoXCJsb25nX3Rlcm1fcmVmX3BpY3NfcHJlc2VudF9mbGFnXCIsIDEsIFwiMFwiKTtcbiAgfVxuICBjb25zdCBzcHNUZW1wb3JhbE12cEVuYWJsZWQgPSBici5yZWFkKDEpID09PSAxO1xuICByZXR1cm4ge1xuICAgIGxvZzJNYXhQb2NMc2IsXG4gICAgc2FvRW5hYmxlZCxcbiAgICBudW1TaG9ydFRlcm1SZWZQaWNTZXRzOiBudW1TdFJwcyxcbiAgICBudW1EZWx0YVBvY3NTZXQwLFxuICAgIGxvbmdUZXJtUmVmUGljc1ByZXNlbnQsXG4gICAgc3BzVGVtcG9yYWxNdnBFbmFibGVkLFxuICB9O1xufVxuXG5mdW5jdGlvbiBwYXJzZVBwcyhwcHNSYnNwOiBCdWZmZXIpOiB7IGNhYmFjSW5pdFByZXNlbnQ6IGJvb2xlYW47IHBwc0hhc0xvb3BGaWx0ZXJBY3Jvc3NTbGljZXNGbGFnOiBib29sZWFuIH0ge1xuICBjb25zdCBiciA9IG5ldyBCaXRSZWFkZXIocHBzUmJzcCk7XG4gIGJyLnJlYWQoMTYpOyAvLyBOQUwgaGVhZGVyXG4gIGJyLnJlYWRVZSgpOyAvLyBwcHNfcGljX3BhcmFtZXRlcl9zZXRfaWRcbiAgYnIucmVhZFVlKCk7IC8vIHBwc19zZXFfcGFyYW1ldGVyX3NldF9pZFxuICBici5yZWFkKDEpOyAvLyBkZXBlbmRlbnRfc2xpY2Vfc2VnbWVudHNfZW5hYmxlZF9mbGFnXG4gIGJyLnJlYWQoMSk7IC8vIG91dHB1dF9mbGFnX3ByZXNlbnRfZmxhZ1xuICBjb25zdCBudW1FeHRyYVNsaWNlSGVhZGVyQml0cyA9IGJyLnJlYWQoMyk7XG4gIGlmIChudW1FeHRyYVNsaWNlSGVhZGVyQml0cyAhPT0gMCkge1xuICAgIGZhaWwoXCJudW1fZXh0cmFfc2xpY2VfaGVhZGVyX2JpdHNcIiwgbnVtRXh0cmFTbGljZUhlYWRlckJpdHMsIFwiMFwiKTtcbiAgfVxuICBici5yZWFkKDEpOyAvLyBzaWduX2RhdGFfaGlkaW5nX2VuYWJsZWRfZmxhZ1xuICBjb25zdCBjYWJhY0luaXRQcmVzZW50ID0gYnIucmVhZCgxKSA9PT0gMTtcbiAgYnIucmVhZFVlKCk7IC8vIG51bV9yZWZfaWR4X2wwX2RlZmF1bHRfYWN0aXZlX21pbnVzMVxuICBici5yZWFkVWUoKTsgLy8gbnVtX3JlZl9pZHhfbDFfZGVmYXVsdF9hY3RpdmVfbWludXMxXG4gIGJyLnJlYWRVZSgpOyAvLyBpbml0X3FwX21pbnVzMjYgKHNlLCBidXQgdWUgcGFyc2VyIGZpbmUgdG8gYWR2YW5jZSlcbiAgYnIucmVhZCgxKTsgLy8gY29uc3RyYWluZWRfaW50cmFfcHJlZF9mbGFnXG4gIGJyLnJlYWQoMSk7IC8vIHRyYW5zZm9ybV9za2lwX2VuYWJsZWRfZmxhZ1xuICBpZiAoYnIucmVhZCgxKSkge1xuICAgIGJyLnJlYWRVZSgpOyAvLyBjdV9xcF9kZWx0YV9lbmFibGVkIOKGkiBkaWZmX2N1X3FwX2RlbHRhX2RlcHRoXG4gIH1cbiAgYnIucmVhZFVlKCk7IC8vIHBwc19jYl9xcF9vZmZzZXRcbiAgYnIucmVhZFVlKCk7IC8vIHBwc19jcl9xcF9vZmZzZXRcbiAgYnIucmVhZCgxKTsgLy8gcHBzX3NsaWNlX2Nocm9tYV9xcF9vZmZzZXRzX3ByZXNlbnRfZmxhZ1xuICBici5yZWFkKDEpOyAvLyB3ZWlnaHRlZF9wcmVkX2ZsYWdcbiAgYnIucmVhZCgxKTsgLy8gd2VpZ2h0ZWRfYmlwcmVkX2ZsYWdcbiAgYnIucmVhZCgxKTsgLy8gdHJhbnNxdWFudF9ieXBhc3NfZW5hYmxlZF9mbGFnXG4gIGlmIChici5yZWFkKDEpKSB7XG4gICAgZmFpbChcInRpbGVzX2VuYWJsZWRfZmxhZ1wiLCAxLCBcIjBcIik7XG4gIH1cbiAgYnIucmVhZCgxKTsgLy8gZW50cm9weV9jb2Rpbmdfc3luY19lbmFibGVkX2ZsYWdcbiAgY29uc3QgcHBzTG9vcEZpbHRlckFjcm9zc1NsaWNlc0VuYWJsZWQgPSBici5yZWFkKDEpID09PSAxO1xuICBjb25zdCBkZWJsb2NraW5nQ29udHJvbFByZXNlbnQgPSBici5yZWFkKDEpO1xuICBsZXQgc2xpY2VEZWJsb2NraW5nRGlzYWJsZWRPdmVycmlkZSA9IGZhbHNlO1xuICBpZiAoZGVibG9ja2luZ0NvbnRyb2xQcmVzZW50KSB7XG4gICAgYnIucmVhZCgxKTsgLy8gZGVibG9ja2luZ19maWx0ZXJfb3ZlcnJpZGVfZW5hYmxlZF9mbGFnXG4gICAgc2xpY2VEZWJsb2NraW5nRGlzYWJsZWRPdmVycmlkZSA9IGJyLnJlYWQoMSkgPT09IDE7IC8vIHBwc19kZWJsb2NraW5nX2ZpbHRlcl9kaXNhYmxlZF9mbGFnXG4gICAgaWYgKCFzbGljZURlYmxvY2tpbmdEaXNhYmxlZE92ZXJyaWRlKSB7XG4gICAgICBici5yZWFkVWUoKTtcbiAgICAgIGJyLnJlYWRVZSgpOyAvLyBiZXRhL3RjIG9mZnNldHMgKHNlIHZpYSB1ZSBhZHZhbmNlKVxuICAgIH1cbiAgfVxuICAvLyBzbGljZV9sb29wX2ZpbHRlcl9hY3Jvc3Nfc2xpY2VzX2VuYWJsZWRfZmxhZyBwcmVzZW50IGlmZiBQUFMgYWNyb3NzLXNsaWNlcyBlbmFibGVkICYmICFzbGljZV9kZWJsb2NraW5nX2Rpc2FibGVkLlxuICBjb25zdCBwcHNIYXNMb29wRmlsdGVyQWNyb3NzU2xpY2VzRmxhZyA9IHBwc0xvb3BGaWx0ZXJBY3Jvc3NTbGljZXNFbmFibGVkICYmICFzbGljZURlYmxvY2tpbmdEaXNhYmxlZE92ZXJyaWRlO1xuICByZXR1cm4geyBjYWJhY0luaXRQcmVzZW50LCBwcHNIYXNMb29wRmlsdGVyQWNyb3NzU2xpY2VzRmxhZyB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VOdmVuY0hldmNDb25maWcoZXh0cmFkYXRhOiBCdWZmZXIpOiBOdmVuY0hldmNDb25maWcge1xuICBjb25zdCBuYWxzID0gc3BsaXROYWxVbml0cyhleHRyYWRhdGEpO1xuICBjb25zdCBzcHMgPSBuYWxzLmZpbmQoKG4pID0+IG4udHlwZSA9PT0gTkFMX1NQUyk7XG4gIGNvbnN0IHBwcyA9IG5hbHMuZmluZCgobikgPT4gbi50eXBlID09PSBOQUxfUFBTKTtcbiAgaWYgKCFzcHMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJoZXZjX2FscGhhOiBTUFMgbWlzc2luZyBpbiBOVkVOQyBleHRyYWRhdGFcIik7XG4gIH1cbiAgaWYgKCFwcHMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJoZXZjX2FscGhhOiBQUFMgbWlzc2luZyBpbiBOVkVOQyBleHRyYWRhdGFcIik7XG4gIH1cbiAgY29uc3QgcyA9IHBhcnNlU3BzKHJlbW92ZUVtdWxhdGlvblByZXZlbnRpb24oc3BzLmRhdGEpKTtcbiAgY29uc3QgcCA9IHBhcnNlUHBzKHJlbW92ZUVtdWxhdGlvblByZXZlbnRpb24ocHBzLmRhdGEpKTtcbiAgcmV0dXJuIHsgLi4ucywgLi4ucCB9O1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8xMi5cblxuaW1wb3J0IHsgQ29kZWMsIHR5cGUgQ29kZWNDb250ZXh0LCBGRm1wZWdFcnJvciwgdHlwZSBGcmFtZSwgdHlwZSBQYWNrZXQsIHR5cGUgU3RyZWFtIH0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB7XG4gIEFWX1BJWF9GTVRfQkdSQSxcbiAgQVZfUElYX0ZNVF9ZVVY0MjBQLFxuICBBVkVSUk9SX0VBR0FJTixcbiAgQVZFUlJPUl9FT0YsXG4gIEZGX0VOQ09ERVJfSEVWQ19OVkVOQyxcbn0gZnJvbSBcIm5vZGUtYXYvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBtYWtlRnJhbWUsIG1ha2VQYWNrZXQsIG9wZW5WaWRlb0N0eCB9IGZyb20gXCIuLi9taXNjXCI7XG5pbXBvcnQgdHlwZSB7IEZvcm1hdE11eGVyIH0gZnJvbSBcIi4uL211eGVyXCI7XG5pbXBvcnQgdHlwZSB7IEh3VmlkZW9FbmNvZGVyT3B0aW9ucyB9IGZyb20gXCIuLi92aWRlb3Rvb2xib3hcIjtcbmltcG9ydCB7IGJ1aWxkVW5pZmllZEV4dHJhZGF0YSwgZXh0cmFjdEFscGhhVG9ZdXY0MjBwQnVmZmVyIH0gZnJvbSBcIi4vYWxwaGFcIjtcbmltcG9ydCB7IHBhdGNoSGV2Y0FscGhhUHRsIH0gZnJvbSBcIi4vYWxwaGFfZGFyd2luXCI7XG5pbXBvcnQgeyBEdWFsTGF5ZXJNdXggfSBmcm9tIFwiLi9kdWFsX2xheWVyX211eFwiO1xuaW1wb3J0IHsgdHlwZSBOdmVuY0hldmNDb25maWcsIHBhcnNlTnZlbmNIZXZjQ29uZmlnIH0gZnJvbSBcIi4vcGFyc2VyXCI7XG5cbmludGVyZmFjZSBOdmVuY1N0YXRlIHtcbiAgYmFzZUN0eDogQ29kZWNDb250ZXh0O1xuICBhbHBoYUN0eDogQ29kZWNDb250ZXh0O1xuICBiYXNlUGt0OiBQYWNrZXQ7XG4gIGFscGhhUGt0OiBQYWNrZXQ7XG4gIHN0cmVhbTogU3RyZWFtO1xuICBhbHBoYVN3RnJhbWU6IEZyYW1lO1xuICBhbHBoYUJ1ZjogQnVmZmVyO1xuICBoZXZjQ2ZnOiBOdmVuY0hldmNDb25maWc7XG59XG5cbmV4cG9ydCBjbGFzcyBOdmVuY0R1YWxMYXllckVuY29kZXIgaW1wbGVtZW50cyBEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSBfczogTnZlbmNTdGF0ZTtcbiAgcHJpdmF0ZSBfbXV4OiBEdWFsTGF5ZXJNdXg7XG4gIHByaXZhdGUgX3B0cyA9IDBuO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoczogTnZlbmNTdGF0ZSkge1xuICAgIHRoaXMuX3MgPSBzO1xuICAgIHRoaXMuX211eCA9IG5ldyBEdWFsTGF5ZXJNdXgoe1xuICAgICAgYmFzZUN0eDogcy5iYXNlQ3R4LFxuICAgICAgYWxwaGFDdHg6IHMuYWxwaGFDdHgsXG4gICAgICBiYXNlUGt0OiBzLmJhc2VQa3QsXG4gICAgICBhbHBoYVBrdDogcy5hbHBoYVBrdCxcbiAgICAgIHN0cmVhbTogcy5zdHJlYW0sXG4gICAgICBoZXZjQ2ZnOiBzLmhldmNDZmcsXG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgY3JlYXRlKG9wdHM6IEh3VmlkZW9FbmNvZGVyT3B0aW9ucyk6IFByb21pc2U8TnZlbmNEdWFsTGF5ZXJFbmNvZGVyPiB7XG4gICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0LCBmcHMsIGJpdHJhdGUsIG11eGVyIH0gPSBvcHRzO1xuXG4gICAgY29uc3QgY29kZWMgPSBDb2RlYy5maW5kRW5jb2RlckJ5TmFtZShGRl9FTkNPREVSX0hFVkNfTlZFTkMpO1xuICAgIGlmICghY29kZWMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcImhldmNfbnZlbmMgZW5jb2RlciBub3QgZm91bmRcIik7XG4gICAgfVxuXG4gICAgLy8gdGllcj1tYWluIG1hdGNoZXMgQXBwbGUgVmlkZW9Ub29sYm94OyBtYWNPUyBDaHJvbWUgcmVxdWlyZXMgTWFpbiB0aWVyIGZvciBIRVZDIGFscGhhIGRlY29kZS5cbiAgICBjb25zdCBudmVuY09wdHMgPSB7IHByZXNldDogXCJwNFwiLCBiZjogXCIwXCIsIHRpZXI6IFwibWFpblwiIH07XG4gICAgY29uc3QgY29tbW9uID0geyBjb2RlYywgd2lkdGgsIGhlaWdodCwgZnBzLCBiaXRyYXRlLCBvcHRpb25zOiBudmVuY09wdHMgfTtcbiAgICAvLyBCR1JBIGRpcmVjdCAoTlZFTkMgY29udmVydHMsIG5vIENQVSBTV1MpOyBzdGFjayBmcmVlcyBldmVyeSBuYXRpdmUgaWYgYSBsYXRlciBzdGVwIHRocm93cywgbW92ZSgpIGRpc293bnMgb24gc3VjY2Vzcy5cbiAgICB1c2luZyBzdGFjayA9IG5ldyBEaXNwb3NhYmxlU3RhY2soKTtcbiAgICBjb25zdCBiYXNlQ3R4ID0gc3RhY2sudXNlKGF3YWl0IG9wZW5WaWRlb0N0eCh7IC4uLmNvbW1vbiwgcGl4ZWxGb3JtYXQ6IEFWX1BJWF9GTVRfQkdSQSB9LCBcIm52ZW5jLmJhc2Uub3BlbjJcIikpO1xuICAgIGNvbnN0IGFscGhhQ3R4ID0gc3RhY2sudXNlKGF3YWl0IG9wZW5WaWRlb0N0eCh7IC4uLmNvbW1vbiwgcGl4ZWxGb3JtYXQ6IEFWX1BJWF9GTVRfWVVWNDIwUCB9LCBcIm52ZW5jLmFscGhhLm9wZW4yXCIpKTtcblxuICAgIGlmICghYmFzZUN0eC5leHRyYURhdGEgfHwgIWFscGhhQ3R4LmV4dHJhRGF0YSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwibnZlbmM6IGNvZGVjIGV4dHJhZGF0YSBtaXNzaW5nXCIpO1xuICAgIH1cbiAgICBjb25zdCBoZXZjQ2ZnID0gcGFyc2VOdmVuY0hldmNDb25maWcoYmFzZUN0eC5leHRyYURhdGEpO1xuXG4gICAgY29uc3Qgc3RyZWFtID0gbXV4ZXIuYWRkU3RyZWFtKGJhc2VDdHgsIFwiaHZjMVwiKTtcbiAgICBjb25zdCB1bmlmaWVkID0gYnVpbGRVbmlmaWVkRXh0cmFkYXRhKHtcbiAgICAgIGJhc2VFeHRyYWRhdGE6IGJhc2VDdHguZXh0cmFEYXRhLFxuICAgICAgYWxwaGFFeHRyYWRhdGE6IGFscGhhQ3R4LmV4dHJhRGF0YSxcbiAgICAgIHdpZHRoLFxuICAgICAgaGVpZ2h0LFxuICAgIH0pO1xuICAgIC8vIEFwcGxlLVZUQiBjb21wYXQ6IHJld3JpdGUgVlBTK1NQUyBQVEwgYml0cyB0byBtYXRjaCB4MjY1L1ZUQiBvdXRwdXQgKHRpZXI9TWFpbiwgY29tcGF0WzJdPTEpLlxuICAgIHN0cmVhbS5jb2RlY3Bhci5leHRyYWRhdGEgPSBwYXRjaEhldmNBbHBoYVB0bCh1bmlmaWVkKTtcblxuICAgIGNvbnN0IHlTaXplID0gd2lkdGggKiBoZWlnaHQ7XG4gICAgLy8gWVVWNDIwUCBjaHJvbWEgcGxhbmVzIGFyZSBjZWlsKHcvMinDl2NlaWwoaC8yKTsgZmxvb3IgdW5kZXJmbG93cyBvbiBvZGQgZGltZW5zaW9ucy5cbiAgICBjb25zdCBjaHJvbWFTaXplID0gKCh3aWR0aCArIDEpID4+IDEpICogKChoZWlnaHQgKyAxKSA+PiAxKTtcbiAgICBjb25zdCBhbHBoYUJ1ZiA9IEJ1ZmZlci5hbGxvYyh5U2l6ZSArIGNocm9tYVNpemUgKiAyKTtcbiAgICBhbHBoYUJ1Zi5maWxsKDEyOCwgeVNpemUpO1xuXG4gICAgY29uc3QgYmFzZVBrdCA9IHN0YWNrLnVzZShtYWtlUGFja2V0KCkpO1xuICAgIGNvbnN0IGFscGhhUGt0ID0gc3RhY2sudXNlKG1ha2VQYWNrZXQoKSk7XG4gICAgY29uc3QgYWxwaGFTd0ZyYW1lID0gc3RhY2sudXNlKG1ha2VGcmFtZSh3aWR0aCwgaGVpZ2h0LCBBVl9QSVhfRk1UX1lVVjQyMFApKTtcblxuICAgIHN0YWNrLm1vdmUoKTtcbiAgICByZXR1cm4gbmV3IE52ZW5jRHVhbExheWVyRW5jb2Rlcih7XG4gICAgICBiYXNlQ3R4LFxuICAgICAgYWxwaGFDdHgsXG4gICAgICBiYXNlUGt0LFxuICAgICAgYWxwaGFQa3QsXG4gICAgICBzdHJlYW0sXG4gICAgICBhbHBoYVN3RnJhbWUsXG4gICAgICBhbHBoYUJ1ZixcbiAgICAgIGhldmNDZmcsXG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBlbmNvZGUoYmdyYUZyYW1lOiBGcmFtZSwgbXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyBiYXNlQ3R4LCBhbHBoYUN0eCwgYWxwaGFTd0ZyYW1lLCBhbHBoYUJ1ZiB9ID0gdGhpcy5fcztcbiAgICBjb25zdCBwdHMgPSB0aGlzLl9wdHMrKztcblxuICAgIC8vIEV4dHJhY3QgdGhlIGFscGhhIHBsYW5lIGJlZm9yZSBiYXNlLnNlbmRGcmFtZSDigJQgdGhlIGVuY29kZXIgdW5yZWZzIHRoZSBpbnB1dCBmcmFtZS5cbiAgICBleHRyYWN0QWxwaGFUb1l1djQyMHBCdWZmZXIoYmdyYUZyYW1lLCBhbHBoYUJ1Zik7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGFscGhhU3dGcmFtZS5tYWtlV3JpdGFibGUoKSwgXCJhbHBoYVN3Lm1ha2VXcml0YWJsZVwiKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYWxwaGFTd0ZyYW1lLmZyb21CdWZmZXIoYWxwaGFCdWYpLCBcImFscGhhU3cuZnJvbUJ1ZmZlclwiKTtcbiAgICBhbHBoYVN3RnJhbWUucHRzID0gcHRzO1xuICAgIGFscGhhU3dGcmFtZS5kdXJhdGlvbiA9IDFuO1xuXG4gICAgYmdyYUZyYW1lLnB0cyA9IHB0cztcbiAgICBiZ3JhRnJhbWUuZHVyYXRpb24gPSAxbjtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgYmFzZUN0eC5zZW5kRnJhbWUoYmdyYUZyYW1lKSwgXCJiYXNlLnNlbmRGcmFtZVwiKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgYWxwaGFDdHguc2VuZEZyYW1lKGFscGhhU3dGcmFtZSksIFwiYWxwaGEuc2VuZEZyYW1lXCIpO1xuXG4gICAgYXdhaXQgdGhpcy5fbXV4LmRyYWluKG11eGVyKTtcbiAgfVxuXG4gIGFzeW5jIGZsdXNoKG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuc2VuZEVvZih0aGlzLl9zLmJhc2VDdHgsIFwiYmFzZVwiKTtcbiAgICBhd2FpdCB0aGlzLnNlbmRFb2YodGhpcy5fcy5hbHBoYUN0eCwgXCJhbHBoYVwiKTtcbiAgICBhd2FpdCB0aGlzLl9tdXguZHJhaW4obXV4ZXIpO1xuICAgIGNvbnN0IGRlc3luYyA9IHRoaXMuX211eC5kZXN5bmNBZnRlckVvZigpO1xuICAgIGlmIChkZXN5bmMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTlZFTkMgZGVzeW5jOiAke2Rlc3luY31gKTtcbiAgICB9XG4gIH1cblxuICBbU3ltYm9sLmRpc3Bvc2VdKCk6IHZvaWQge1xuICAgIGNvbnN0IHsgYmFzZVBrdCwgYWxwaGFQa3QsIGJhc2VDdHgsIGFscGhhQ3R4LCBhbHBoYVN3RnJhbWUgfSA9IHRoaXMuX3M7XG4gICAgYmFzZVBrdC5mcmVlKCk7XG4gICAgYWxwaGFQa3QuZnJlZSgpO1xuICAgIGFscGhhU3dGcmFtZS5mcmVlKCk7XG4gICAgLy8gTlZJRElBIGRyaXZlciA1MjAuNTYuMDYrIFVBRiBpbiBsaWJudmN1dmlkIG9uIGNyZWF0aW9uLW9yZGVyIHNlc3Npb24gZnJlZSDigJQgTElGTyBkZXN0cm95IGF2b2lkcyBpdCAoZm9ydW0gL3QvMjY5OTc0KS5cbiAgICBhbHBoYUN0eC5mcmVlQ29udGV4dCgpO1xuICAgIGJhc2VDdHguZnJlZUNvbnRleHQoKTtcbiAgfVxuXG4gIC8vIEVPRiBmbHVzaDsgRUFHQUlOL0VPRiByZXR1cm5zIGFyZSBiZW5pZ24gKGFscmVhZHktZHJhaW5pbmcgZW5jb2RlcikuXG4gIHByaXZhdGUgYXN5bmMgc2VuZEVvZihjdHg6IENvZGVjQ29udGV4dCwgdGFnOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCByZXQgPSBhd2FpdCBjdHguc2VuZEZyYW1lKG51bGwpO1xuICAgIGlmIChyZXQgPCAwICYmIHJldCAhPT0gQVZFUlJPUl9FQUdBSU4gJiYgcmV0ICE9PSBBVkVSUk9SX0VPRikge1xuICAgICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKHJldCwgYG52ZW5jLiR7dGFnfS5zZW5kRnJhbWUobnVsbClgKTtcbiAgICB9XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDMvMjEuXG5cbmltcG9ydCB7IENvZGVjLCB0eXBlIENvZGVjQ29udGV4dCwgRkZtcGVnRXJyb3IsIHR5cGUgRnJhbWUsIHR5cGUgUGFja2V0LCB0eXBlIFN0cmVhbSB9IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQgdHlwZSB7IEFWUGl4ZWxGb3JtYXQsIEZGVmlkZW9FbmNvZGVyIH0gZnJvbSBcIm5vZGUtYXYvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBkcmFpblBhY2tldHMsIG1ha2VQYWNrZXQsIG9wZW5WaWRlb0N0eCB9IGZyb20gXCIuL21pc2NcIjtcbmltcG9ydCB0eXBlIHsgRm9ybWF0TXV4ZXIgfSBmcm9tIFwiLi9tdXhlclwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFZpZGVvRW5jb2Rlck9wdGlvbnMge1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgZnBzOiBudW1iZXI7XG4gIGNvZGVjTmFtZTogRkZWaWRlb0VuY29kZXI7XG4gIGNvZGVjVGFnPzogc3RyaW5nO1xuICBjb2RlY09wdHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIGJpdHJhdGU6IG51bWJlcjtcbiAgcGl4ZWxGb3JtYXQ6IEFWUGl4ZWxGb3JtYXQ7XG4gIG11eGVyOiBGb3JtYXRNdXhlcjtcbn1cblxuZXhwb3J0IGNsYXNzIFZpZGVvRW5jb2RlciBpbXBsZW1lbnRzIERpc3Bvc2FibGUge1xuICBwcml2YXRlIHJlYWRvbmx5IF9jdHg6IENvZGVjQ29udGV4dDtcbiAgcHJpdmF0ZSByZWFkb25seSBfcGt0OiBQYWNrZXQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N0cmVhbTogU3RyZWFtO1xuICBwcml2YXRlIF9wdHMgPSAwbjtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKGN0eDogQ29kZWNDb250ZXh0LCBwa3Q6IFBhY2tldCwgc3RyZWFtOiBTdHJlYW0pIHtcbiAgICB0aGlzLl9jdHggPSBjdHg7XG4gICAgdGhpcy5fcGt0ID0gcGt0O1xuICAgIHRoaXMuX3N0cmVhbSA9IHN0cmVhbTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBjcmVhdGUob3B0czogVmlkZW9FbmNvZGVyT3B0aW9ucyk6IFByb21pc2U8VmlkZW9FbmNvZGVyPiB7XG4gICAgY29uc3QgeyBjb2RlY05hbWUsIGNvZGVjVGFnLCBjb2RlY09wdHMsIG11eGVyLCAuLi5yZXN0IH0gPSBvcHRzO1xuXG4gICAgY29uc3QgY29kZWMgPSBDb2RlYy5maW5kRW5jb2RlckJ5TmFtZShjb2RlY05hbWUpO1xuICAgIGlmICghY29kZWMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVmlkZW8gZW5jb2RlciBub3QgZm91bmQ6ICR7Y29kZWNOYW1lfWApO1xuICAgIH1cblxuICAgIC8vIFBhcnRpYWwtY29uc3RydWN0aW9uIHNhZmV0eTogc3RhY2sgZGlzcG9zZXMgY3R4L3BrdCBpZiBhIGxhdGVyIHN0ZXAgdGhyb3dzOyBtb3ZlKCkgZGlzb3ducyBvbiBzdWNjZXNzLlxuICAgIHVzaW5nIHN0YWNrID0gbmV3IERpc3Bvc2FibGVTdGFjaygpO1xuICAgIGNvbnN0IGN0eCA9IHN0YWNrLnVzZShhd2FpdCBvcGVuVmlkZW9DdHgoeyBjb2RlYywgLi4ucmVzdCwgY29kZWNUYWcsIG9wdGlvbnM6IGNvZGVjT3B0cyB9LCBcInZpZGVvQ3R4Lm9wZW4yXCIpKTtcbiAgICBjb25zdCBwa3QgPSBzdGFjay51c2UobWFrZVBhY2tldCgpKTtcbiAgICBjb25zdCBzdHJlYW0gPSBtdXhlci5hZGRTdHJlYW0oY3R4LCBjb2RlY1RhZyk7XG4gICAgc3RhY2subW92ZSgpO1xuICAgIHJldHVybiBuZXcgVmlkZW9FbmNvZGVyKGN0eCwgcGt0LCBzdHJlYW0pO1xuICB9XG5cbiAgYXN5bmMgZW5jb2RlKGZyYW1lOiBGcmFtZSwgbXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgZnJhbWUucHRzID0gdGhpcy5fcHRzKys7XG4gICAgZnJhbWUuZHVyYXRpb24gPSAxbjtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgdGhpcy5fY3R4LnNlbmRGcmFtZShmcmFtZSksIFwidmlkZW9DdHguc2VuZEZyYW1lXCIpO1xuICAgIGF3YWl0IHRoaXMuZHJhaW4obXV4ZXIpO1xuICB9XG5cbiAgYXN5bmMgZmx1c2gobXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5fY3R4LnNlbmRGcmFtZShudWxsKTtcbiAgICBhd2FpdCB0aGlzLmRyYWluKG11eGVyKTtcbiAgfVxuXG4gIFtTeW1ib2wuZGlzcG9zZV0oKTogdm9pZCB7XG4gICAgdGhpcy5fcGt0LmZyZWUoKTtcbiAgICB0aGlzLl9jdHguZnJlZUNvbnRleHQoKTtcbiAgfVxuXG4gIHByaXZhdGUgZHJhaW4obXV4ZXI6IEZvcm1hdE11eGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIGRyYWluUGFja2V0cyh0aGlzLl9jdHgsIHRoaXMuX3BrdCwgdGhpcy5fc3RyZWFtLCBtdXhlcik7XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDQvMTIuXG5cbmltcG9ydCB7IHR5cGUgQ29kZWNDb250ZXh0LCBGRm1wZWdFcnJvciwgdHlwZSBGcmFtZSwgdHlwZSBQYWNrZXQsIHR5cGUgU3RyZWFtIH0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB0eXBlIHsgSGFyZHdhcmVDb250ZXh0IH0gZnJvbSBcIm5vZGUtYXYvYXBpXCI7XG5pbXBvcnQgeyBBVl9QSVhfRk1UX0JHUkEsIEFWQ09MX1JBTkdFX0pQRUcgfSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcbmltcG9ydCB7IGRyYWluUGFja2V0cywgbWFrZVBhY2tldCwgb3BlblZpZGVvQ3R4IH0gZnJvbSBcIi4vbWlzY1wiO1xuaW1wb3J0IHR5cGUgeyBGb3JtYXRNdXhlciB9IGZyb20gXCIuL211eGVyXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSHdWaWRlb0VuY29kZXJPcHRpb25zIHtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIGZwczogbnVtYmVyO1xuICBodzogSGFyZHdhcmVDb250ZXh0O1xuICBiaXRyYXRlOiBudW1iZXI7XG4gIG11eGVyOiBGb3JtYXRNdXhlcjtcbn1cblxuZXhwb3J0IGNsYXNzIFZpZGVvVG9vbGJveEVuY29kZXIgaW1wbGVtZW50cyBEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSBfY3R4OiBDb2RlY0NvbnRleHQ7XG4gIHByaXZhdGUgX3BrdDogUGFja2V0O1xuICBwcml2YXRlIF9zdHJlYW06IFN0cmVhbTtcbiAgcHJpdmF0ZSBfcHRzID0gMG47XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihjdHg6IENvZGVjQ29udGV4dCwgcGt0OiBQYWNrZXQsIHN0cmVhbTogU3RyZWFtKSB7XG4gICAgdGhpcy5fY3R4ID0gY3R4O1xuICAgIHRoaXMuX3BrdCA9IHBrdDtcbiAgICB0aGlzLl9zdHJlYW0gPSBzdHJlYW07XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgY3JlYXRlKG9wdHM6IEh3VmlkZW9FbmNvZGVyT3B0aW9ucyk6IFByb21pc2U8VmlkZW9Ub29sYm94RW5jb2Rlcj4ge1xuICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgZnBzLCBodywgYml0cmF0ZSwgbXV4ZXIgfSA9IG9wdHM7XG5cbiAgICBjb25zdCBjb2RlYyA9IGh3LmdldEVuY29kZXJDb2RlYyhcImhldmNcIik7XG4gICAgaWYgKCFjb2RlYykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaGV2Y192aWRlb3Rvb2xib3ggZW5jb2RlciBub3QgZm91bmRcIik7XG4gICAgfVxuXG4gICAgY29uc3QgY3R4ID0gYXdhaXQgb3BlblZpZGVvQ3R4KFxuICAgICAge1xuICAgICAgICBjb2RlYyxcbiAgICAgICAgd2lkdGgsXG4gICAgICAgIGhlaWdodCxcbiAgICAgICAgZnBzLFxuICAgICAgICBiaXRyYXRlLFxuICAgICAgICBwaXhlbEZvcm1hdDogQVZfUElYX0ZNVF9CR1JBLFxuICAgICAgICBjb2xvclJhbmdlOiBBVkNPTF9SQU5HRV9KUEVHLFxuICAgICAgICBjb2RlY1RhZzogXCJodmMxXCIsXG4gICAgICAgIG9wdGlvbnM6IHsgYWxwaGFfcXVhbGl0eTogXCIxXCIgfSxcbiAgICAgIH0sXG4gICAgICBcInZ0RW5jLm9wZW4yXCIsXG4gICAgKTtcbiAgICAvLyBQYXJ0aWFsLWNvbnN0cnVjdGlvbiBzYWZldHk6IHN0YWNrIGRpc3Bvc2VzIGN0eC9wa3QgaWYgYSBsYXRlciBzdGVwIHRocm93czsgbW92ZSgpIGRpc293bnMgb24gc3VjY2Vzcy5cbiAgICB1c2luZyBzdGFjayA9IG5ldyBEaXNwb3NhYmxlU3RhY2soKTtcbiAgICBzdGFjay51c2UoY3R4KTtcbiAgICBjb25zdCBwa3QgPSBzdGFjay51c2UobWFrZVBhY2tldCgpKTtcbiAgICBjb25zdCBzdHJlYW0gPSBtdXhlci5hZGRTdHJlYW0oY3R4LCBcImh2YzFcIik7XG4gICAgc3RhY2subW92ZSgpO1xuICAgIHJldHVybiBuZXcgVmlkZW9Ub29sYm94RW5jb2RlcihjdHgsIHBrdCwgc3RyZWFtKTtcbiAgfVxuXG4gIGFzeW5jIGVuY29kZShiZ3JhRnJhbWU6IEZyYW1lLCBtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBiZ3JhRnJhbWUucHRzID0gdGhpcy5fcHRzKys7XG4gICAgYmdyYUZyYW1lLmR1cmF0aW9uID0gMW47XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IHRoaXMuX2N0eC5zZW5kRnJhbWUoYmdyYUZyYW1lKSwgXCJ2dEVuYy5zZW5kRnJhbWVcIik7XG4gICAgYXdhaXQgdGhpcy5kcmFpbihtdXhlcik7XG4gIH1cblxuICBhc3luYyBmbHVzaChtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLl9jdHguc2VuZEZyYW1lKG51bGwpO1xuICAgIGF3YWl0IHRoaXMuZHJhaW4obXV4ZXIpO1xuICB9XG5cbiAgW1N5bWJvbC5kaXNwb3NlXSgpOiB2b2lkIHtcbiAgICB0aGlzLl9wa3QuZnJlZSgpO1xuICAgIHRoaXMuX2N0eC5mcmVlQ29udGV4dCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBkcmFpbihtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gZHJhaW5QYWNrZXRzKHRoaXMuX2N0eCwgdGhpcy5fcGt0LCB0aGlzLl9zdHJlYW0sIG11eGVyKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8xMy5cblxuaW1wb3J0IHsgSGFyZHdhcmVDb250ZXh0IH0gZnJvbSBcIm5vZGUtYXYvYXBpXCI7XG5pbXBvcnQge1xuICBBVl9QSVhfRk1UX1lVVkE0MjBQLFxuICBBVl9TQU1QTEVfRk1UX0ZMVCxcbiAgQVZfU0FNUExFX0ZNVF9GTFRQLFxuICBGRl9FTkNPREVSX0FBQyxcbiAgRkZfRU5DT0RFUl9MSUJPUFVTLFxuICBGRl9FTkNPREVSX0xJQlgyNjUsXG4gIEZGX0hXREVWSUNFX1RZUEVfQ1VEQSxcbiAgRkZfSFdERVZJQ0VfVFlQRV9WSURFT1RPT0xCT1gsXG59IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuXG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi4vbG9nZ2luZ1wiO1xuaW1wb3J0IHsgQXVkaW9FbmNvZGVyIH0gZnJvbSBcIi4vYXVkaW9cIjtcbmltcG9ydCB7IENvZGVjU3RhdGUgfSBmcm9tIFwiLi9jb2RlY1wiO1xuaW1wb3J0IHsgTnZlbmNEdWFsTGF5ZXJFbmNvZGVyIH0gZnJvbSBcIi4vaGV2Y19hbHBoYS9udmVuY1wiO1xuaW1wb3J0IHsgRkZfRU5DT0RFUl9MSUJWUFhfVlA5IH0gZnJvbSBcIi4vbWlzY1wiO1xuaW1wb3J0IHR5cGUgeyBGb3JtYXRNdXhlciB9IGZyb20gXCIuL211eGVyXCI7XG5pbXBvcnQgdHlwZSB7IFNpbmtLaW5kLCBTaW5rT3B0aW9ucyB9IGZyb20gXCIuL3NpbmtcIjtcbmltcG9ydCB7IFZpZGVvRW5jb2RlciB9IGZyb20gXCIuL3ZpZGVvXCI7XG5pbXBvcnQgeyBWaWRlb1Rvb2xib3hFbmNvZGVyIH0gZnJvbSBcIi4vdmlkZW90b29sYm94XCI7XG5cbmNvbnN0IFRBRyA9IFwiW0VuY29kZXJdXCI7XG5cbmV4cG9ydCB0eXBlIEh3RW5jb2RlciA9IFZpZGVvVG9vbGJveEVuY29kZXIgfCBOdmVuY0R1YWxMYXllckVuY29kZXI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmlkZW9TZXR1cCB7XG4gIHZpZGVvPzogVmlkZW9FbmNvZGVyO1xuICBod1ZpZGVvPzogSHdFbmNvZGVyO1xuICBjb2RlYz86IENvZGVjU3RhdGU7XG4gIGh3PzogSGFyZHdhcmVDb250ZXh0O1xuICBvd25zSHc6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSHdWaWRlb0ZhY3RvcnlPcHRpb25zIHtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIGZwczogbnVtYmVyO1xuICBiaXRyYXRlPzogbnVtYmVyO1xuICBkaXNhYmxlSHdDb2RlYz86IGJvb2xlYW47XG4gIHNoYXJlZEh3PzogSGFyZHdhcmVDb250ZXh0O1xufVxuXG4vLyBXZWJNIFZQOSByZWFsdGltZSBpcyBhbHJlYWR5IHRoZSBmYXN0IHBhdGg7IHJvdy1tdCArIHRocmVhZHMgY292ZXIgdGhlIHJlc3QuXG5jb25zdCBXRUJNX1ZQOV9PUFRTID0ge1xuICBkZWFkbGluZTogXCJyZWFsdGltZVwiLFxuICBcImNwdS11c2VkXCI6IFwiOFwiLFxuICBcInJvdy1tdFwiOiBcIjFcIixcbiAgdGhyZWFkczogXCI0XCIsXG59IGFzIGNvbnN0O1xuXG5jb25zdCBNUDRfQVVESU8gPSB7XG4gIG91dFNhbXBsZVJhdGU6IDQ0XzEwMCxcbiAgb3V0U2FtcGxlRm10OiBBVl9TQU1QTEVfRk1UX0ZMVFAsXG4gIGNvZGVjTmFtZTogRkZfRU5DT0RFUl9BQUMsXG59IGFzIGNvbnN0O1xuXG4vLyBPcHVzIHJlamVjdHMgNDQuMWsuXG5jb25zdCBXRUJNX0FVRElPID0ge1xuICBvdXRTYW1wbGVSYXRlOiA0OF8wMDAsXG4gIG91dFNhbXBsZUZtdDogQVZfU0FNUExFX0ZNVF9GTFQsXG4gIGNvZGVjTmFtZTogRkZfRU5DT0RFUl9MSUJPUFVTLFxufSBhcyBjb25zdDtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZU1wNFZpZGVvKG9wdHM6IFNpbmtPcHRpb25zLCBtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPFZpZGVvU2V0dXA+IHtcbiAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0LCBmcHMsIGRpc2FibGVId0NvZGVjLCBzaGFyZWRIdyB9ID0gb3B0cztcbiAgcmV0dXJuIGNyZWF0ZUh3VmlkZW9FbmNvZGVyKHsgd2lkdGgsIGhlaWdodCwgZnBzLCBkaXNhYmxlSHdDb2RlYywgc2hhcmVkSHcgfSwgbXV4ZXIpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlV2VibVZpZGVvKG9wdHM6IFNpbmtPcHRpb25zLCBtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPFZpZGVvU2V0dXA+IHtcbiAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0LCBmcHMgfSA9IG9wdHM7XG4gIGNvbnN0IHZpZGVvID0gYXdhaXQgVmlkZW9FbmNvZGVyLmNyZWF0ZSh7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0LFxuICAgIGZwcyxcbiAgICBjb2RlY05hbWU6IEZGX0VOQ09ERVJfTElCVlBYX1ZQOSxcbiAgICBjb2RlY09wdHM6IFdFQk1fVlA5X09QVFMsXG4gICAgYml0cmF0ZTogNF8wMDBfMDAwLFxuICAgIHBpeGVsRm9ybWF0OiBBVl9QSVhfRk1UX1lVVkE0MjBQLFxuICAgIG11eGVyLFxuICB9KTtcbiAgcmV0dXJuIHtcbiAgICB2aWRlbyxcbiAgICBjb2RlYzogYXdhaXQgQ29kZWNTdGF0ZS5jcmVhdGUod2lkdGgsIGhlaWdodCksXG4gICAgb3duc0h3OiBmYWxzZSxcbiAgfTtcbn1cblxuLy8gT3B1cyByZWplY3RzIDQ0LjFrLlxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUF1ZGlvKGtpbmQ6IFNpbmtLaW5kLCBtdXhlcjogRm9ybWF0TXV4ZXIpOiBQcm9taXNlPEF1ZGlvRW5jb2Rlcj4ge1xuICBjb25zdCBjZmcgPSBraW5kID09PSBcIm1wNFwiID8gTVA0X0FVRElPIDogV0VCTV9BVURJTztcbiAgcmV0dXJuIEF1ZGlvRW5jb2Rlci5jcmVhdGUoe1xuICAgIC4uLmNmZyxcbiAgICBnbG9iYWxIZWFkZXI6IHRydWUsXG4gICAgYml0cmF0ZTogMTI4XzAwMCxcbiAgICBtdXhlcixcbiAgfSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVId1ZpZGVvRW5jb2RlcihvcHRzOiBId1ZpZGVvRmFjdG9yeU9wdGlvbnMsIG11eGVyOiBGb3JtYXRNdXhlcik6IFByb21pc2U8VmlkZW9TZXR1cD4ge1xuICBjb25zdCB7IHdpZHRoLCBoZWlnaHQsIGZwcywgYml0cmF0ZSA9IDhfMDAwXzAwMCwgZGlzYWJsZUh3Q29kZWMgPSBmYWxzZSwgc2hhcmVkSHcgfSA9IG9wdHM7XG4gIGNvbnN0IGh3ID0gc2hhcmVkSHcgPz8gKGRpc2FibGVId0NvZGVjID8gdW5kZWZpbmVkIDogKEhhcmR3YXJlQ29udGV4dC5hdXRvKCkgPz8gdW5kZWZpbmVkKSk7XG4gIGNvbnN0IG93bnNIdyA9ICFzaGFyZWRIdyAmJiAhIWh3O1xuXG4gIHRyeSB7XG4gICAgaWYgKGh3Py5kZXZpY2VUeXBlTmFtZSA9PT0gRkZfSFdERVZJQ0VfVFlQRV9WSURFT1RPT0xCT1ggJiYgaHcuZ2V0RW5jb2RlckNvZGVjKFwiaGV2Y1wiKSkge1xuICAgICAgbG9nZ2VyLmRlYnVnKFRBRywgXCJ1c2luZyBWaWRlb1Rvb2xib3ggSEVWQyBhbHBoYSBlbmNvZGVyXCIpO1xuICAgICAgY29uc3QgaHdWaWRlbyA9IGF3YWl0IFZpZGVvVG9vbGJveEVuY29kZXIuY3JlYXRlKHsgd2lkdGgsIGhlaWdodCwgZnBzLCBodywgYml0cmF0ZSwgbXV4ZXIgfSk7XG4gICAgICByZXR1cm4geyBod1ZpZGVvLCBodywgb3duc0h3IH07XG4gICAgfVxuICAgIGlmIChodz8uZGV2aWNlVHlwZU5hbWUgPT09IEZGX0hXREVWSUNFX1RZUEVfQ1VEQSAmJiBody5nZXRFbmNvZGVyQ29kZWMoXCJoZXZjXCIpKSB7XG4gICAgICBsb2dnZXIuZGVidWcoVEFHLCBcInVzaW5nIE5WRU5DIGR1YWwtbGF5ZXIgSEVWQyBhbHBoYSBlbmNvZGVyXCIpO1xuICAgICAgY29uc3QgaHdWaWRlbyA9IGF3YWl0IE52ZW5jRHVhbExheWVyRW5jb2Rlci5jcmVhdGUoeyB3aWR0aCwgaGVpZ2h0LCBmcHMsIGh3LCBiaXRyYXRlLCBtdXhlciB9KTtcbiAgICAgIHJldHVybiB7IGh3VmlkZW8sIGh3LCBvd25zSHcgfTtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsb2dnZXIud2FybihUQUcsIFwiSGFyZHdhcmUgY29kZWMgc2Vzc2lvbiBsaW1pdHMgcmVhY2hlZCwgdXNlIHNvZnR3YXJlIGVuY29kZXJcIiwgZSk7XG4gICAgaWYgKG93bnNIdykge1xuICAgICAgaHc/LmRpc3Bvc2UoKTtcbiAgICB9XG4gIH1cblxuICBsb2dnZXIuZGVidWcoVEFHLCBcInVzaW5nIHNvZnR3YXJlIGxpYngyNjUgSEVWQyBhbHBoYSBlbmNvZGVyXCIpO1xuICAvLyBQYXJ0aWFsLWNvbnN0cnVjdGlvbiBzYWZldHk6IGZyZWUgdGhlIHZpZGVvIGVuY29kZXIgaWYgQ29kZWNTdGF0ZS5jcmVhdGUgdGhyb3dzOyBtb3ZlKCkgZGlzb3ducyBvbiBzdWNjZXNzLlxuICB1c2luZyBzdGFjayA9IG5ldyBEaXNwb3NhYmxlU3RhY2soKTtcbiAgY29uc3QgdmlkZW8gPSBzdGFjay51c2UoXG4gICAgYXdhaXQgVmlkZW9FbmNvZGVyLmNyZWF0ZSh7XG4gICAgICB3aWR0aCxcbiAgICAgIGhlaWdodCxcbiAgICAgIGZwcyxcbiAgICAgIGNvZGVjTmFtZTogRkZfRU5DT0RFUl9MSUJYMjY1LFxuICAgICAgY29kZWNUYWc6IFwiaHZjMVwiLFxuICAgICAgY29kZWNPcHRzOiB7IHByZXNldDogXCJmYXN0XCIsIFwieDI2NS1wYXJhbXNcIjogXCJsb2ctbGV2ZWw9MTpiZnJhbWVzPTM6cG9vbHM9KzpmcmFtZS10aHJlYWRzPTBcIiB9LFxuICAgICAgYml0cmF0ZSxcbiAgICAgIHBpeGVsRm9ybWF0OiBBVl9QSVhfRk1UX1lVVkE0MjBQLFxuICAgICAgbXV4ZXIsXG4gICAgfSksXG4gICk7XG4gIGNvbnN0IGNvZGVjID0gc3RhY2sudXNlKGF3YWl0IENvZGVjU3RhdGUuY3JlYXRlKHdpZHRoLCBoZWlnaHQpKTtcbiAgc3RhY2subW92ZSgpO1xuICByZXR1cm4geyB2aWRlbywgY29kZWMsIG93bnNIdzogZmFsc2UgfTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDMvMjEuXG5cbmltcG9ydCB7IHR5cGUgQ29kZWNDb250ZXh0LCBEaWN0aW9uYXJ5LCBGRm1wZWdFcnJvciwgRm9ybWF0Q29udGV4dCwgdHlwZSBQYWNrZXQsIHR5cGUgU3RyZWFtIH0gZnJvbSBcIm5vZGUtYXZcIjtcblxuZXhwb3J0IGNsYXNzIEZvcm1hdE11eGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfY3R4OiBGb3JtYXRDb250ZXh0O1xuICBwcml2YXRlIF9vcGVuZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfZGlzcG9zZWQgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihvdXRQYXRoOiBzdHJpbmcsIGZvcm1hdE5hbWU/OiBzdHJpbmcpIHtcbiAgICB0aGlzLl9jdHggPSBuZXcgRm9ybWF0Q29udGV4dCgpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcih0aGlzLl9jdHguYWxsb2NPdXRwdXRDb250ZXh0MihudWxsLCBmb3JtYXROYW1lID8/IG51bGwsIG91dFBhdGgpLCBcImFsbG9jT3V0cHV0Q29udGV4dDJcIik7XG4gIH1cblxuICBhZGRTdHJlYW0oY29kZWNDdHg6IENvZGVjQ29udGV4dCwgY29kZWNUYWc/OiBzdHJpbmcpOiBTdHJlYW0ge1xuICAgIGNvbnN0IHN0cmVhbSA9IHRoaXMuX2N0eC5uZXdTdHJlYW0obnVsbCk7XG4gICAgc3RyZWFtLnRpbWVCYXNlID0gY29kZWNDdHgudGltZUJhc2U7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKHN0cmVhbS5jb2RlY3Bhci5mcm9tQ29udGV4dChjb2RlY0N0eCksIFwiY29kZWNwYXIuZnJvbUNvbnRleHRcIik7XG4gICAgaWYgKGNvZGVjVGFnKSB7XG4gICAgICBzdHJlYW0uY29kZWNwYXIuY29kZWNUYWcgPSBjb2RlY1RhZztcbiAgICB9XG4gICAgcmV0dXJuIHN0cmVhbTtcbiAgfVxuXG4gIGFzeW5jIG9wZW4oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX29wZW5lZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgdGhpcy5fY3R4Lm9wZW5PdXRwdXQoKSwgXCJvcGVuT3V0cHV0XCIpO1xuICAgIC8vICtmYXN0c3RhcnQgcmVsb2NhdGVzIG1vb3YgdG8gZmlsZSBmcm9udCBvbiB3cml0ZVRyYWlsZXIgc28gcGxheWVycyBjYW4gYmVnaW4gcGxheWJhY2sgYmVmb3JlIGZ1bGwgZG93bmxvYWQuXG4gICAgdXNpbmcgb3B0cyA9IERpY3Rpb25hcnkuZnJvbU9iamVjdCh7IG1vdmZsYWdzOiBcIitmYXN0c3RhcnRcIiB9KTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgdGhpcy5fY3R4LndyaXRlSGVhZGVyKG9wdHMpLCBcIndyaXRlSGVhZGVyXCIpO1xuICAgIHRoaXMuX29wZW5lZCA9IHRydWU7XG4gIH1cblxuICBhc3luYyB3cml0ZVBhY2tldChwa3Q6IFBhY2tldCk6IFByb21pc2U8dm9pZD4ge1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCB0aGlzLl9jdHguaW50ZXJsZWF2ZWRXcml0ZUZyYW1lKHBrdCksIFwiaW50ZXJsZWF2ZWRXcml0ZUZyYW1lXCIpO1xuICB9XG5cbiAgYXN5bmMgW1N5bWJvbC5hc3luY0Rpc3Bvc2VdKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9kaXNwb3NlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9kaXNwb3NlZCA9IHRydWU7XG4gICAgdHJ5IHtcbiAgICAgIGlmICh0aGlzLl9vcGVuZWQpIHtcbiAgICAgICAgdGhpcy5fb3BlbmVkID0gZmFsc2U7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5fY3R4LndyaXRlVHJhaWxlcigpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIC8vIEEgZmFpbGVkL3RydW5jYXRlZCB0cmFpbGVyIHdyaXRlIG11c3Qgbm90IGxlYWsgdGhlIEZELlxuICAgICAgICAgIGF3YWl0IHRoaXMuX2N0eC5jbG9zZU91dHB1dCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIC8vIEFsd2F5cyBmcmVlIHRoZSBuYXRpdmUgY29udGV4dCDigJQgZXZlbiBhIG5ldmVyLW9wZW5lZCBtdXhlciBhbGxvY2F0ZWQgb25lIGluIHRoZSBjb25zdHJ1Y3Rvci5cbiAgICAgIGF3YWl0IHRoaXMuX2N0eFtTeW1ib2wuYXN5bmNEaXNwb3NlXSgpO1xuICAgIH1cbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8yNC5cblxuaW1wb3J0IHsgb2sgfSBmcm9tIFwibm9kZTphc3NlcnRcIjtcbmltcG9ydCB7IEZGbXBlZ0Vycm9yLCB0eXBlIEZyYW1lIH0gZnJvbSBcIm5vZGUtYXZcIjtcbmltcG9ydCB0eXBlIHsgSGFyZHdhcmVDb250ZXh0IH0gZnJvbSBcIm5vZGUtYXYvYXBpXCI7XG5pbXBvcnQgdHlwZSB7IEF1ZGlvRW5jb2RlciB9IGZyb20gXCIuL2F1ZGlvXCI7XG5pbXBvcnQgdHlwZSB7IENvZGVjU3RhdGUgfSBmcm9tIFwiLi9jb2RlY1wiO1xuaW1wb3J0IHsgY3JlYXRlQXVkaW8sIGNyZWF0ZU1wNFZpZGVvLCBjcmVhdGVXZWJtVmlkZW8sIHR5cGUgSHdFbmNvZGVyIH0gZnJvbSBcIi4vZmFjdG9yeVwiO1xuaW1wb3J0IHsgRm9ybWF0TXV4ZXIgfSBmcm9tIFwiLi9tdXhlclwiO1xuaW1wb3J0IHR5cGUgeyBWaWRlb0VuY29kZXIgfSBmcm9tIFwiLi92aWRlb1wiO1xuXG5leHBvcnQgdHlwZSBTaW5rS2luZCA9IFwibXA0XCIgfCBcIndlYm1cIjtcblxuZXhwb3J0IGludGVyZmFjZSBTaW5rT3B0aW9ucyB7XG4gIG91dEZpbGU6IHN0cmluZztcbiAga2luZDogU2lua0tpbmQ7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICBmcHM6IG51bWJlcjtcbiAgd2l0aEF1ZGlvOiBib29sZWFuO1xuICBkaXNhYmxlSHdDb2RlYzogYm9vbGVhbjtcbiAgc2hhcmVkSHc/OiBIYXJkd2FyZUNvbnRleHQ7XG59XG5cbmludGVyZmFjZSBTaW5rU3RhdGUge1xuICBtdXhlcjogRm9ybWF0TXV4ZXI7XG4gIHZpZGVvPzogVmlkZW9FbmNvZGVyO1xuICBod1ZpZGVvPzogSHdFbmNvZGVyO1xuICBhdWRpbz86IEF1ZGlvRW5jb2RlcjtcbiAgY29kZWM/OiBDb2RlY1N0YXRlO1xuICBvd25zSHc6IGJvb2xlYW47XG4gIGh3PzogSGFyZHdhcmVDb250ZXh0O1xuICBvcHRzOiBTaW5rT3B0aW9ucztcbn1cblxuZXhwb3J0IGNsYXNzIE91dHB1dFNpbmsgaW1wbGVtZW50cyBBc3luY0Rpc3Bvc2FibGUge1xuICBwcml2YXRlIF9zOiBTaW5rU3RhdGU7XG4gIHByaXZhdGUgX2Rpc3Bvc2VkID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihzOiBTaW5rU3RhdGUpIHtcbiAgICB0aGlzLl9zID0gcztcbiAgfVxuXG4gIHN0YXRpYyBraW5kRnJvbVBhdGgocGF0aDogc3RyaW5nKTogU2lua0tpbmQge1xuICAgIGNvbnN0IGxvd2VyID0gcGF0aC50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChsb3dlci5lbmRzV2l0aChcIi53ZWJtXCIpKSB7XG4gICAgICByZXR1cm4gXCJ3ZWJtXCI7XG4gICAgfVxuICAgIGlmIChsb3dlci5lbmRzV2l0aChcIi5tcDRcIikgfHwgbG93ZXIuZW5kc1dpdGgoXCIubW92XCIpKSB7XG4gICAgICByZXR1cm4gXCJtcDRcIjtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBvdXRwdXQgZXh0ZW5zaW9uOiAke3BhdGh9YCk7XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgY3JlYXRlKG9wdHM6IFNpbmtPcHRpb25zKTogUHJvbWlzZTxPdXRwdXRTaW5rPiB7XG4gICAgLy8gUGFydGlhbC1jb25zdHJ1Y3Rpb24gc2FmZXR5OiBkaXNwb3NlIG11eGVyL2VuY29kZXJzIGlmIGEgbGF0ZXIgc3RlcCB0aHJvd3M7IG1vdmUoKSBkaXNvd25zIG9uIHN1Y2Nlc3MuXG4gICAgYXdhaXQgdXNpbmcgc3RhY2sgPSBuZXcgQXN5bmNEaXNwb3NhYmxlU3RhY2soKTtcbiAgICBjb25zdCBtdXhlciA9IHN0YWNrLnVzZShuZXcgRm9ybWF0TXV4ZXIob3B0cy5vdXRGaWxlKSk7XG4gICAgY29uc3Qgc2V0dXAgPSBvcHRzLmtpbmQgPT09IFwibXA0XCIgPyBhd2FpdCBjcmVhdGVNcDRWaWRlbyhvcHRzLCBtdXhlcikgOiBhd2FpdCBjcmVhdGVXZWJtVmlkZW8ob3B0cywgbXV4ZXIpO1xuICAgIGlmIChzZXR1cC52aWRlbykge1xuICAgICAgc3RhY2sudXNlKHNldHVwLnZpZGVvKTtcbiAgICB9XG4gICAgaWYgKHNldHVwLmh3VmlkZW8pIHtcbiAgICAgIHN0YWNrLnVzZShzZXR1cC5od1ZpZGVvKTtcbiAgICB9XG4gICAgaWYgKHNldHVwLmNvZGVjKSB7XG4gICAgICBzdGFjay51c2Uoc2V0dXAuY29kZWMpO1xuICAgIH1cbiAgICAvLyBPbmx5IGEgc2luay1vd25lZCBodyBkZXZpY2UgaXMgb3VycyB0byBmcmVlIGhlcmU7IGEgc2hhcmVkIGRldmljZSBiZWxvbmdzIHRvIHRoZSBwaXBlbGluZS5cbiAgICBpZiAoc2V0dXAub3duc0h3ICYmIHNldHVwLmh3KSB7XG4gICAgICBzdGFjay51c2Uoc2V0dXAuaHcpO1xuICAgIH1cbiAgICBjb25zdCBhdWRpbyA9IG9wdHMud2l0aEF1ZGlvID8gYXdhaXQgY3JlYXRlQXVkaW8ob3B0cy5raW5kLCBtdXhlcikgOiB1bmRlZmluZWQ7XG4gICAgaWYgKGF1ZGlvKSB7XG4gICAgICBzdGFjay51c2UoYXVkaW8pO1xuICAgIH1cbiAgICBhd2FpdCBtdXhlci5vcGVuKCk7XG4gICAgc3RhY2subW92ZSgpO1xuICAgIHJldHVybiBuZXcgT3V0cHV0U2luayh7IG11eGVyLCAuLi5zZXR1cCwgYXVkaW8sIG9wdHMgfSk7XG4gIH1cblxuICBzZXRJbnB1dFJhdGUoc2FtcGxlUmF0ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5fcy5hdWRpbz8uc2V0SW5wdXRSYXRlKHNhbXBsZVJhdGUpO1xuICB9XG5cbiAgYXN5bmMgZW5jb2RlQkdSQShiZ3JhRnJhbWU6IEZyYW1lKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyBod1ZpZGVvLCBtdXhlciB9ID0gdGhpcy5fcztcbiAgICBpZiAoaHdWaWRlbykge1xuICAgICAgcmV0dXJuIGh3VmlkZW8uZW5jb2RlKGJncmFGcmFtZSwgbXV4ZXIpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zd0VuY29kZShiZ3JhRnJhbWUpO1xuICB9XG5cbiAgYXN5bmMgZW5jb2RlRGVjb2RlZEZyYW1lKHNyYzogRnJhbWUpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IGh3VmlkZW8sIG11eGVyIH0gPSB0aGlzLl9zO1xuICAgIGlmIChod1ZpZGVvKSB7XG4gICAgICByZXR1cm4gaHdWaWRlby5lbmNvZGUoc3JjLCBtdXhlcik7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnN3RW5jb2RlKHNyYyk7XG4gIH1cblxuICBhc3luYyBlbmNvZGVBdWRpbyhwY206IEJ1ZmZlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuX3MuYXVkaW8/LmVuY29kZShwY20sIHRoaXMuX3MubXV4ZXIpO1xuICB9XG5cbiAgYXN5bmMgZmx1c2goKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyBod1ZpZGVvLCB2aWRlbywgYXVkaW8sIG11eGVyIH0gPSB0aGlzLl9zO1xuICAgIGF3YWl0IGF1ZGlvPy5mbHVzaChtdXhlcik7XG4gICAgaWYgKGh3VmlkZW8pIHtcbiAgICAgIGF3YWl0IGh3VmlkZW8uZmx1c2gobXV4ZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCB2aWRlbyEuZmx1c2gobXV4ZXIpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIFtTeW1ib2wuYXN5bmNEaXNwb3NlXSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fZGlzcG9zZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fZGlzcG9zZWQgPSB0cnVlO1xuICAgIGNvbnN0IHsgbXV4ZXIsIHZpZGVvLCBod1ZpZGVvLCBhdWRpbywgY29kZWMsIGh3LCBvd25zSHcgfSA9IHRoaXMuX3M7XG4gICAgdmlkZW8/LltTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICBod1ZpZGVvPy5bU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgYXVkaW8/LltTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICBjb2RlYz8uW1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgIGF3YWl0IG11eGVyW1N5bWJvbC5hc3luY0Rpc3Bvc2VdKCk7XG4gICAgaWYgKG93bnNIdykge1xuICAgICAgaHc/LmRpc3Bvc2UoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHN3RW5jb2RlKHNyYzogRnJhbWUpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IHZpZGVvLCBjb2RlYywgbXV4ZXIgfSA9IHRoaXMuX3M7XG4gICAgb2soY29kZWM/LnN3cywgXCJzd3Mgbm90IGluaXRpYWxpemVkXCIpO1xuICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihjb2RlYy5kc3QubWFrZVdyaXRhYmxlKCksIFwic2lua0RzdC5tYWtlV3JpdGFibGVcIik7XG4gICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKGF3YWl0IGNvZGVjLnN3cy5zY2FsZUZyYW1lKGNvZGVjLmRzdCwgc3JjKSwgXCJzaW5rU3dzLnNjYWxlRnJhbWVcIik7XG4gICAgYXdhaXQgdmlkZW8hLmVuY29kZShjb2RlYy5kc3QsIG11eGVyKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNC8wMS5cblxuaW1wb3J0IHsgRkZtcGVnRXJyb3IsIHR5cGUgRnJhbWUgfSBmcm9tIFwibm9kZS1hdlwiO1xuaW1wb3J0IHsgSGFyZHdhcmVDb250ZXh0IH0gZnJvbSBcIm5vZGUtYXYvYXBpXCI7XG5pbXBvcnQgeyBBVl9QSVhfRk1UX0JHUkEsIEZGX0hXREVWSUNFX1RZUEVfQ1VEQSwgRkZfSFdERVZJQ0VfVFlQRV9WSURFT1RPT0xCT1ggfSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcblxuaW1wb3J0IHsgQ29uY3VycmVuY3lMaW1pdGVyIH0gZnJvbSBcIi4uL2xpbWl0ZXJcIjtcbmltcG9ydCB7IHdpdGhUaW1lb3V0IH0gZnJvbSBcIi4uL3RpbWluZ1wiO1xuaW1wb3J0IHsgQ29kZWNTdGF0ZSB9IGZyb20gXCIuL2NvZGVjXCI7XG5pbXBvcnQgeyBtYWtlRnJhbWUgfSBmcm9tIFwiLi9taXNjXCI7XG5pbXBvcnQgeyBPdXRwdXRTaW5rIH0gZnJvbSBcIi4vc2lua1wiO1xuXG5jb25zdCBEUkFJTl9USU1FT1VUX01TID0gNV8wMDA7XG4vLyBOb3JtYWwgZnJhbWUvYXVkaW8gZW5jb2RlIGxhbmRzIGluIHRlbnMgb2YgbXM7IHRoZSBib3VuZCBvbmx5IGJpdGVzIGEgd2VkZ2VkIG5hdGl2ZSBlbmNvZGUuXG5jb25zdCBFTkNPREVfVElNRU9VVF9NUyA9IDNfMDAwO1xuXG5leHBvcnQgaW50ZXJmYWNlIEVuY29kZXJQaXBlbGluZU9wdGlvbnMge1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgZnBzOiBudW1iZXI7XG4gIG91dEZpbGVzOiBzdHJpbmdbXTtcbiAgd2l0aEF1ZGlvPzogYm9vbGVhbjtcbiAgZGlzYWJsZUh3Q29kZWM/OiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgUGlwZWxpbmVTdGF0ZSB7XG4gIHNpbmtzOiBPdXRwdXRTaW5rW107XG4gIHNoYXJlZEh3PzogSGFyZHdhcmVDb250ZXh0O1xuICBsaW1pdGVyOiBDb25jdXJyZW5jeUxpbWl0ZXI7XG4gIHBuZ0NvZGVjPzogQ29kZWNTdGF0ZTtcbiAgb3V0RmlsZXM6IHN0cmluZ1tdO1xuICBvcHRzOiBFbmNvZGVyUGlwZWxpbmVPcHRpb25zO1xufVxuXG5leHBvcnQgY2xhc3MgRW5jb2RlclBpcGVsaW5lIHtcbiAgcHJpdmF0ZSBfczogUGlwZWxpbmVTdGF0ZTtcbiAgcHJpdmF0ZSBfZGlzcG9zZWQgPSBmYWxzZTtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHM6IFBpcGVsaW5lU3RhdGUpIHtcbiAgICB0aGlzLl9zID0gcztcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBjcmVhdGUob3B0czogRW5jb2RlclBpcGVsaW5lT3B0aW9ucyk6IFByb21pc2U8RW5jb2RlclBpcGVsaW5lPiB7XG4gICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0LCBmcHMsIG91dEZpbGVzLCB3aXRoQXVkaW8gPSBmYWxzZSwgZGlzYWJsZUh3Q29kZWMgPSBmYWxzZSB9ID0gb3B0cztcbiAgICBpZiAob3V0RmlsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJvdXRGaWxlcyBtdXN0IGNvbnRhaW4gYXQgbGVhc3Qgb25lIHBhdGhcIik7XG4gICAgfVxuXG4gICAgY29uc3Qga2luZHMgPSBvdXRGaWxlcy5tYXAoKHApID0+IE91dHB1dFNpbmsua2luZEZyb21QYXRoKHApKTtcbiAgICBjb25zdCBuZWVkc01wNEh3ID0gIWRpc2FibGVId0NvZGVjICYmIGtpbmRzLmluY2x1ZGVzKFwibXA0XCIpO1xuICAgIC8vIFBhcnRpYWwtY29uc3RydWN0aW9uIHNhZmV0eTogZGlzcG9zZSBzaGFyZWRIdyArIGFueSBzaW5rcyBhbHJlYWR5IGJ1aWx0IGlmIGEgbGF0ZXIgc2luayB0aHJvd3M7IG1vdmUoKSBkaXNvd25zIG9uIHN1Y2Nlc3MuXG4gICAgYXdhaXQgdXNpbmcgc3RhY2sgPSBuZXcgQXN5bmNEaXNwb3NhYmxlU3RhY2soKTtcbiAgICBjb25zdCBzaGFyZWRIdyA9IG5lZWRzTXA0SHcgPyAoSGFyZHdhcmVDb250ZXh0LmF1dG8oKSA/PyB1bmRlZmluZWQpIDogdW5kZWZpbmVkO1xuICAgIGlmIChzaGFyZWRIdykge1xuICAgICAgc3RhY2sudXNlKHNoYXJlZEh3KTtcbiAgICB9XG4gICAgY29uc3QgaXNId0FscGhhQ2FwYWJsZSA9XG4gICAgICBzaGFyZWRIdz8uZGV2aWNlVHlwZU5hbWUgPT09IEZGX0hXREVWSUNFX1RZUEVfVklERU9UT09MQk9YIHx8IHNoYXJlZEh3Py5kZXZpY2VUeXBlTmFtZSA9PT0gRkZfSFdERVZJQ0VfVFlQRV9DVURBO1xuXG4gICAgY29uc3Qgc2lua3M6IE91dHB1dFNpbmtbXSA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3V0RmlsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHNpbmsgPSBhd2FpdCBPdXRwdXRTaW5rLmNyZWF0ZSh7XG4gICAgICAgIG91dEZpbGU6IG91dEZpbGVzW2ldISxcbiAgICAgICAga2luZDoga2luZHNbaV0hLFxuICAgICAgICB3aWR0aCxcbiAgICAgICAgaGVpZ2h0LFxuICAgICAgICBmcHMsXG4gICAgICAgIHdpdGhBdWRpbyxcbiAgICAgICAgZGlzYWJsZUh3Q29kZWMsXG4gICAgICAgIHNoYXJlZEh3OiBraW5kc1tpXSA9PT0gXCJtcDRcIiAmJiBpc0h3QWxwaGFDYXBhYmxlID8gc2hhcmVkSHcgOiB1bmRlZmluZWQsXG4gICAgICB9KTtcbiAgICAgIHN0YWNrLnVzZShzaW5rKTtcbiAgICAgIHNpbmtzLnB1c2goc2luayk7XG4gICAgfVxuXG4gICAgc3RhY2subW92ZSgpO1xuICAgIHJldHVybiBuZXcgRW5jb2RlclBpcGVsaW5lKHtcbiAgICAgIHNpbmtzLFxuICAgICAgc2hhcmVkSHcsXG4gICAgICBsaW1pdGVyOiBuZXcgQ29uY3VycmVuY3lMaW1pdGVyKDEpLFxuICAgICAgb3V0RmlsZXMsXG4gICAgICBvcHRzLFxuICAgIH0pO1xuICB9XG5cbiAgc2V0dXBBdWRpbyhzYW1wbGVSYXRlOiBudW1iZXIpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IHNpbmsgb2YgdGhpcy5fcy5zaW5rcykge1xuICAgICAgc2luay5zZXRJbnB1dFJhdGUoc2FtcGxlUmF0ZSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZW5jb2RlQkdSQShpbnB1dDogQnVmZmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5lbnF1ZXVlKFwiZW5jb2RlQkdSQVwiLCBhc3luYyAoKSA9PiB7XG4gICAgICB1c2luZyBmcmFtZSA9IHRoaXMuYmdyYUZyYW1lKGlucHV0KTtcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKHRoaXMuX3Muc2lua3MubWFwKChzaW5rKSA9PiBzaW5rLmVuY29kZUJHUkEoZnJhbWUpKSk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBlbmNvZGVQTkcocG5nRGF0YTogQnVmZmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5lbnF1ZXVlKFwiZW5jb2RlUE5HXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gdGhpcy5fcy5vcHRzO1xuICAgICAgdGhpcy5fcy5wbmdDb2RlYyA/Pz0gYXdhaXQgQ29kZWNTdGF0ZS5jcmVhdGUod2lkdGgsIGhlaWdodCk7XG4gICAgICBjb25zdCBzcmMgPSBhd2FpdCB0aGlzLl9zLnBuZ0NvZGVjLmRlY29kZVBORyhwbmdEYXRhKTtcbiAgICAgIGZvciAoY29uc3Qgc2luayBvZiB0aGlzLl9zLnNpbmtzKSB7XG4gICAgICAgIGF3YWl0IHNpbmsuZW5jb2RlRGVjb2RlZEZyYW1lKHNyYyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBlbmNvZGVBdWRpbyhwY206IEJ1ZmZlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuZW5xdWV1ZShcImVuY29kZUF1ZGlvXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIGZvciAoY29uc3Qgc2luayBvZiB0aGlzLl9zLnNpbmtzKSB7XG4gICAgICAgIGF3YWl0IHNpbmsuZW5jb2RlQXVkaW8ocGNtKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZW5xdWV1ZShsYWJlbDogc3RyaW5nLCBmbjogKCkgPT4gUHJvbWlzZTx2b2lkPik6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB3aXRoVGltZW91dCh0aGlzLl9zLmxpbWl0ZXIuc2NoZWR1bGUoZm4pLCBFTkNPREVfVElNRU9VVF9NUywgbGFiZWwpO1xuICB9XG5cbiAgYXN5bmMgZmluaXNoKCk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgd2l0aFRpbWVvdXQoXG4gICAgICAgIHRoaXMuX3MubGltaXRlci5kcmFpbigpLFxuICAgICAgICBEUkFJTl9USU1FT1VUX01TLFxuICAgICAgICBcImVuY29kZXIgZHJhaW4gKG91dHB1dHMgaW5jb21wbGV0ZSDigJQgbmF0aXZlIGVuY29kZSB3ZWRnZWQpXCIsXG4gICAgICApO1xuICAgICAgZm9yIChjb25zdCBzaW5rIG9mIHRoaXMuX3Muc2lua3MpIHtcbiAgICAgICAgYXdhaXQgc2luay5mbHVzaCgpO1xuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICBhd2FpdCB0aGlzLmZyZWUoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3Mub3V0RmlsZXM7XG4gIH1cblxuICBhc3luYyBbU3ltYm9sLmFzeW5jRGlzcG9zZV0oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX2Rpc3Bvc2VkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGF3YWl0IHdpdGhUaW1lb3V0KFxuICAgICAgdGhpcy5fcy5saW1pdGVyLmRyYWluKCksXG4gICAgICBEUkFJTl9USU1FT1VUX01TLFxuICAgICAgXCJlbmNvZGVyIGRyYWluIChvdXRwdXRzIGluY29tcGxldGUg4oCUIG5hdGl2ZSBlbmNvZGUgd2VkZ2VkKVwiLFxuICAgICk7XG4gICAgYXdhaXQgdGhpcy5mcmVlKCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGZyZWUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX2Rpc3Bvc2VkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX2Rpc3Bvc2VkID0gdHJ1ZTtcbiAgICBmb3IgKGNvbnN0IHNpbmsgb2YgdGhpcy5fcy5zaW5rcykge1xuICAgICAgYXdhaXQgc2lua1tTeW1ib2wuYXN5bmNEaXNwb3NlXSgpO1xuICAgIH1cbiAgICB0aGlzLl9zLnBuZ0NvZGVjPy5bU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgdGhpcy5fcy5zaGFyZWRIdz8uZGlzcG9zZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBiZ3JhRnJhbWUoaW5wdXQ6IEJ1ZmZlcik6IEZyYW1lIHtcbiAgICAvLyBQYXJ0aWFsLWNvbnN0cnVjdGlvbiBzYWZldHk6IGZyZWUgZnJhbWUgaWYgZnJvbUJ1ZmZlciB0aHJvd3MgYmVmb3JlIHdlIHJldHVybiBpdC5cbiAgICB1c2luZyBzdGFjayA9IG5ldyBEaXNwb3NhYmxlU3RhY2soKTtcbiAgICBjb25zdCBmcmFtZSA9IHN0YWNrLnVzZShtYWtlRnJhbWUodGhpcy5fcy5vcHRzLndpZHRoLCB0aGlzLl9zLm9wdHMuaGVpZ2h0LCBBVl9QSVhfRk1UX0JHUkEpKTtcbiAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoZnJhbWUuZnJvbUJ1ZmZlcihpbnB1dCksIFwiYmdyYUZyYW1lLmZyb21CdWZmZXJcIik7XG4gICAgc3RhY2subW92ZSgpO1xuICAgIHJldHVybiBmcmFtZTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wNi5cblxuaW1wb3J0IHR5cGUgeyBOYXRpdmVJbWFnZSwgU2l6ZSB9IGZyb20gXCJlbGVjdHJvblwiO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNFbXB0eShpbWFnZTogTmF0aXZlSW1hZ2UpIHtcbiAgY29uc3Qgc2l6ZSA9IGltYWdlLmdldFNpemUoKTtcbiAgaWYgKHNpemUud2lkdGggPT09IDAgfHwgc2l6ZS5oZWlnaHQgPT09IDApIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gaW1hZ2UuaXNFbXB0eSgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2l6ZUVxdWFscyhhOiBTaXplLCBiOiBTaXplKSB7XG4gIHJldHVybiBhLndpZHRoID09PSBiLndpZHRoICYmIGEuaGVpZ2h0ID09PSBiLmhlaWdodDtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDcvMDMuXG5cbmNvbnN0IEdSSUQgPSAzMjsgLy8gcmVzb2x1dGlvbi1pbmRlcGVuZGVudCBsYXR0aWNlIGZvciB0aGUgbW9kYWwtY29sb3IgcHJlLXBhc3NcbmNvbnN0IFNUUklERSA9IDQ7IC8vIG1haW4tc2NhbiBzdGVwOyByb3ctc3RhZ2dlcmVkIHNvIGFueSDiiaUxcHggc3RydWN0dXJlIGxhbmRzIG9uIGEgc2FtcGxlIHdpdGhpbiA0IHJvd3NcbmNvbnN0IENPTlRFTlRfREVMVEEgPSA4OyAvLyBtYXggcGVyLWNoYW5uZWwgZGlzdGFuY2UgKDAtMjU1KSBzdGlsbCBjb3VudGVkIGFzIHRoZSBkb21pbmFudCBjb2xvclxuY29uc3QgTUlOX0NPTlRFTlRfU0FNUExFUyA9IDE2OyAvLyByZW5kZXJlZCBmcmFtZXMgYXJlIG5vaXNlLWZyZWUsIHNvIGEgaGFuZGZ1bCBvZiBvZmYtZG9taW5hbnQgc2FtcGxlcyBpcyByZWFsIGNvbnRlbnRcbmV4cG9ydCBjb25zdCBCTEFOS19XQVJOX1JBVElPID0gMC41OyAvLyBibGFuay1mcmFtZSBmcmFjdGlvbiBhYm92ZSB0aGlzIHdhcm5zIGF0IHJlbmRlciBlbmRcblxuLy8gNSBiaXRzIHBlciBjaGFubmVsLCBhbHBoYSBpbmNsdWRlZCDigJQgdHJhbnNwYXJlbnQgc3VyZmFjZXMgY2FycnkgY29udGVudCBpbiBjb3ZlcmFnZSwgbm90IGNvbG9yLlxuZnVuY3Rpb24gcXVhbnRpemUoYmdyYTogQnVmZmVyLCBpOiBudW1iZXIpOiBudW1iZXIge1xuICByZXR1cm4gKFxuICAgIChiZ3JhLnJlYWRVSW50OChpKSA+PiAzKSB8XG4gICAgKChiZ3JhLnJlYWRVSW50OChpICsgMSkgPj4gMykgPDwgNSkgfFxuICAgICgoYmdyYS5yZWFkVUludDgoaSArIDIpID4+IDMpIDw8IDEwKSB8XG4gICAgKChiZ3JhLnJlYWRVSW50OChpICsgMykgPj4gMykgPDwgMTUpXG4gICk7XG59XG5cbi8vIEJ5dGUgb2Zmc2V0IG9mIGEgcGl4ZWwgY2FycnlpbmcgdGhlIGZyYW1lJ3MgZG9taW5hbnQgY29sb3IgKG1vZGUgb3ZlciBhIHNwYXJzZSBsYXR0aWNlKS5cbmZ1bmN0aW9uIG1vZGFsUGl4ZWwoYmdyYTogQnVmZmVyLCB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcik6IG51bWJlciB7XG4gIGNvbnN0IHN0ZXBYID0gTWF0aC5tYXgoMSwgTWF0aC5mbG9vcih3aWR0aCAvIEdSSUQpKTtcbiAgY29uc3Qgc3RlcFkgPSBNYXRoLm1heCgxLCBNYXRoLmZsb29yKGhlaWdodCAvIEdSSUQpKTtcbiAgY29uc3QgY291bnRzID0gbmV3IE1hcDxudW1iZXIsIG51bWJlcj4oKTtcbiAgY29uc3QgZmlyc3RJZHggPSBuZXcgTWFwPG51bWJlciwgbnVtYmVyPigpO1xuICBsZXQgYmVzdCA9IDA7XG4gIGxldCBiZXN0Q291bnQgPSAwO1xuICBmb3IgKGxldCB5ID0gMDsgeSA8IGhlaWdodDsgeSArPSBzdGVwWSkge1xuICAgIGZvciAobGV0IHggPSAwOyB4IDwgd2lkdGg7IHggKz0gc3RlcFgpIHtcbiAgICAgIGNvbnN0IGkgPSAoeSAqIHdpZHRoICsgeCkgKiA0O1xuICAgICAgY29uc3Qga2V5ID0gcXVhbnRpemUoYmdyYSwgaSk7XG4gICAgICBjb25zdCBjb3VudCA9IChjb3VudHMuZ2V0KGtleSkgPz8gMCkgKyAxO1xuICAgICAgY291bnRzLnNldChrZXksIGNvdW50KTtcbiAgICAgIGlmICghZmlyc3RJZHguaGFzKGtleSkpIHtcbiAgICAgICAgZmlyc3RJZHguc2V0KGtleSwgaSk7XG4gICAgICB9XG4gICAgICBpZiAoY291bnQgPiBiZXN0Q291bnQpIHtcbiAgICAgICAgYmVzdENvdW50ID0gY291bnQ7XG4gICAgICAgIGJlc3QgPSBrZXk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBmaXJzdElkeC5nZXQoYmVzdCkgPz8gMDtcbn1cblxuLy8gQmxhbmsgPSBkb21pbmFudC1jb2xvciBjb3ZlcmFnZTogZmV3ZXIgdGhhbiBNSU5fQ09OVEVOVF9TQU1QTEVTIHNhbXBsZXMgZGV2aWF0ZSBmcm9tIHRoZSBtb2RhbCBjb2xvci5cbmV4cG9ydCBmdW5jdGlvbiBpc0JsYW5rRnJhbWUoYmdyYTogQnVmZmVyLCB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcik6IGJvb2xlYW4ge1xuICBjb25zdCBtID0gbW9kYWxQaXhlbChiZ3JhLCB3aWR0aCwgaGVpZ2h0KTtcbiAgY29uc3QgbWIgPSBiZ3JhLnJlYWRVSW50OChtKTtcbiAgY29uc3QgbWcgPSBiZ3JhLnJlYWRVSW50OChtICsgMSk7XG4gIGNvbnN0IG1yID0gYmdyYS5yZWFkVUludDgobSArIDIpO1xuICBjb25zdCBtYSA9IGJncmEucmVhZFVJbnQ4KG0gKyAzKTtcbiAgbGV0IGNvbnRlbnQgPSAwO1xuICBmb3IgKGxldCB5ID0gMDsgeSA8IGhlaWdodDsgeSArPSBTVFJJREUpIHtcbiAgICBjb25zdCBvZmZzZXQgPSAoeSA+PiAyKSAmIChTVFJJREUgLSAxKTtcbiAgICBmb3IgKGxldCB4ID0gb2Zmc2V0OyB4IDwgd2lkdGg7IHggKz0gU1RSSURFKSB7XG4gICAgICBjb25zdCBpID0gKHkgKiB3aWR0aCArIHgpICogNDtcbiAgICAgIGlmIChcbiAgICAgICAgTWF0aC5hYnMoYmdyYS5yZWFkVUludDgoaSkgLSBtYikgPiBDT05URU5UX0RFTFRBIHx8XG4gICAgICAgIE1hdGguYWJzKGJncmEucmVhZFVJbnQ4KGkgKyAxKSAtIG1nKSA+IENPTlRFTlRfREVMVEEgfHxcbiAgICAgICAgTWF0aC5hYnMoYmdyYS5yZWFkVUludDgoaSArIDIpIC0gbXIpID4gQ09OVEVOVF9ERUxUQSB8fFxuICAgICAgICBNYXRoLmFicyhiZ3JhLnJlYWRVSW50OChpICsgMykgLSBtYSkgPiBDT05URU5UX0RFTFRBXG4gICAgICApIHtcbiAgICAgICAgY29udGVudCsrO1xuICAgICAgICBpZiAoY29udGVudCA+PSBNSU5fQ09OVEVOVF9TQU1QTEVTKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgY2xhc3MgQmxhbmtTdGF0cyB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3dpZHRoOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2hlaWdodDogbnVtYmVyO1xuICBwcml2YXRlIF90b3RhbCA9IDA7XG4gIHByaXZhdGUgX2JsYW5rID0gMDtcblxuICBjb25zdHJ1Y3Rvcih3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcikge1xuICAgIHRoaXMuX3dpZHRoID0gd2lkdGg7XG4gICAgdGhpcy5faGVpZ2h0ID0gaGVpZ2h0O1xuICB9XG5cbiAgc2FtcGxlKGZyYW1lOiBCdWZmZXIpOiB2b2lkIHtcbiAgICB0aGlzLl90b3RhbCsrO1xuICAgIGlmIChpc0JsYW5rRnJhbWUoZnJhbWUsIHRoaXMuX3dpZHRoLCB0aGlzLl9oZWlnaHQpKSB7XG4gICAgICB0aGlzLl9ibGFuaysrO1xuICAgIH1cbiAgfVxuXG4gIC8vIEZyYWN0aW9uIG9mIHdyaXR0ZW4gZnJhbWVzIHRoYXQgd2VyZSBjb250ZW50bGVzcyAoMCA9IGFsbCBoYWQgY29udGVudCwgMSA9IGFsbCBibGFuaykuXG4gIGZpbmFsaXplKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3RvdGFsID4gMCA/IHRoaXMuX2JsYW5rIC8gdGhpcy5fdG90YWwgOiAwO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAzLzIzLlxuXG5leHBvcnQgY29uc3QgSkFOS19XQVJOX1NDT1JFID0gMC4yNTsgLy8gamFuayBzY29yZSBhYm92ZSB0aGlzIHdhcm5zIGF0IHJlbmRlciBlbmQgKH5xdWFydGVyIGRyb3BwZWQgb3IgYSB+MC41cyBmcmVlemUpXG5cbi8vIEZyYW1lLWRyb3AgcXVhbGl0eSBzY29yZSAoMCA9IHBlcmZlY3QsIDEgPSB3b3JzdCk6IGdsb2JhbCBkcm9wIHJhdGUgYW5kIGxvY2FsIGJ1cnN0IHNldmVyaXR5IGNvbWJpbmVkIHZpYSAxLSgxLWcpKDEtbCkuXG5leHBvcnQgaW50ZXJmYWNlIERyb3BTY29yZSB7XG4gIGdsb2JhbDogbnVtYmVyO1xuICBsb2NhbDogbnVtYmVyO1xuICBqYW5rOiBudW1iZXI7XG4gIGV4cGVjdGVkOiBudW1iZXI7XG4gIGFjdHVhbDogbnVtYmVyO1xuICBtYXhCdXJzdDogbnVtYmVyO1xufVxuXG5leHBvcnQgY2xhc3MgRHJvcFN0YXRzIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfZnBzOiBudW1iZXI7XG4gIHByaXZhdGUgX2FjdHVhbCA9IDA7XG4gIHByaXZhdGUgX2N1cnJlbnRCdXJzdCA9IDA7XG4gIHByaXZhdGUgX2J1cnN0czogbnVtYmVyW10gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihmcHM6IG51bWJlcikge1xuICAgIHRoaXMuX2ZwcyA9IGZwcztcbiAgfVxuXG4gIHdyb3RlKGNvdW50ID0gMSk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9jdXJyZW50QnVyc3QgPiAwKSB7XG4gICAgICB0aGlzLl9idXJzdHMucHVzaCh0aGlzLl9jdXJyZW50QnVyc3QpO1xuICAgICAgdGhpcy5fY3VycmVudEJ1cnN0ID0gMDtcbiAgICB9XG4gICAgdGhpcy5fYWN0dWFsICs9IGNvdW50O1xuICB9XG5cbiAgZHJvcHBlZChjb3VudCA9IDEpOiB2b2lkIHtcbiAgICB0aGlzLl9jdXJyZW50QnVyc3QgKz0gY291bnQ7XG4gIH1cblxuICBmaW5hbGl6ZSgpOiBEcm9wU2NvcmUge1xuICAgIGlmICh0aGlzLl9jdXJyZW50QnVyc3QgPiAwKSB7XG4gICAgICB0aGlzLl9idXJzdHMucHVzaCh0aGlzLl9jdXJyZW50QnVyc3QpO1xuICAgICAgdGhpcy5fY3VycmVudEJ1cnN0ID0gMDtcbiAgICB9XG5cbiAgICBsZXQgdG90YWxEcm9wcGVkID0gMDtcbiAgICBsZXQgbG9jYWxTdW0gPSAwO1xuICAgIGxldCBtYXhCdXJzdCA9IDA7XG4gICAgZm9yIChjb25zdCBidXJzdCBvZiB0aGlzLl9idXJzdHMpIHtcbiAgICAgIHRvdGFsRHJvcHBlZCArPSBidXJzdDtcbiAgICAgIG1heEJ1cnN0ID0gTWF0aC5tYXgobWF4QnVyc3QsIGJ1cnN0KTtcbiAgICAgIGNvbnN0IHBlcmNlcHRpYmxlID0gTWF0aC5tYXgoMCwgYnVyc3QgLSAxKTtcbiAgICAgIGxvY2FsU3VtICs9IChwZXJjZXB0aWJsZSAvIHRoaXMuX2ZwcykgKiogMjtcbiAgICB9XG5cbiAgICBjb25zdCBleHBlY3RlZCA9IHRoaXMuX2FjdHVhbCArIHRvdGFsRHJvcHBlZDtcbiAgICBjb25zdCBnID0gZXhwZWN0ZWQgPiAwID8gdG90YWxEcm9wcGVkIC8gZXhwZWN0ZWQgOiAwO1xuICAgIGNvbnN0IGwgPSBNYXRoLm1pbigxLCBsb2NhbFN1bSk7XG4gICAgY29uc3Qgc2NvcmUgPSAxIC0gKDEgLSBnKSAqICgxIC0gbCk7XG5cbiAgICByZXR1cm4geyBnbG9iYWw6IGcsIGxvY2FsOiBsLCBqYW5rOiBzY29yZSwgZXhwZWN0ZWQsIGFjdHVhbDogdGhpcy5fYWN0dWFsLCBtYXhCdXJzdCB9O1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAzLzAyLlxuXG5pbXBvcnQgdHlwZSB7IFdlYkNvbnRlbnRzIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgdHlwZSB7IEVuY29kZXJQaXBlbGluZSB9IGZyb20gXCIuLi9iYXNlL2VuY29kZXIvcGlwZWxpbmVcIjtcblxuZXhwb3J0IGNvbnN0IEFVRElPX01FVEFfQ0hBTk5FTCA9IFwiYXVkaW8tbWV0YVwiO1xuZXhwb3J0IGNvbnN0IEFVRElPX0NIVU5LX0NIQU5ORUwgPSBcImF1ZGlvLWNodW5rXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXVkaW9MaXN0ZW5lck9wdGlvbnMge1xuICB3YzogV2ViQ29udGVudHM7XG4gIGVuY29kZXI6IEVuY29kZXJQaXBlbGluZTtcbiAgZ2V0VmlkZW9UaW1lTXM6ICgpID0+IG51bWJlcjtcbiAgb25FcnJvcjogKGVycm9yOiBFcnJvcikgPT4gdm9pZDtcbn1cblxuZXhwb3J0IHR5cGUgQXVkaW9EaXNwb3NhbCA9ICgpID0+IHZvaWQ7XG5cbi8vIEEgcmVuZGVyIHF1YW50dW0gaXMgMTI4IHN0ZXJlbyBmbG9hdHM7IGFueXRoaW5nIHBhc3QgYSBzZWNvbmQgb2YgYXVkaW8gY2FtZSBmcm9tIGEgcGFnZSBhYnVzaW5nIHRoZSBicmlkZ2UuXG5jb25zdCBNQVhfQ0hVTktfQllURVMgPSA0OF8wMDAgKiAyICogNDtcbmNvbnN0IE1BWF9TQU1QTEVfUkFURSA9IDE5Ml8wMDA7XG5cbmV4cG9ydCBmdW5jdGlvbiBhdHRhY2hBdWRpb0xpc3RlbmVycyh7IHdjLCBlbmNvZGVyLCBnZXRWaWRlb1RpbWVNcywgb25FcnJvciB9OiBBdWRpb0xpc3RlbmVyT3B0aW9ucyk6IEF1ZGlvRGlzcG9zYWwge1xuICBjb25zdCBvbk1ldGEgPSBhc3luYyAoX2U6IHVua25vd24sIGRhdGE6IHsgc2FtcGxlUmF0ZTogbnVtYmVyIH0pID0+IHtcbiAgICBjb25zdCBzYW1wbGVSYXRlID0gZGF0YS5zYW1wbGVSYXRlO1xuICAgIGlmICghTnVtYmVyLmlzRmluaXRlKHNhbXBsZVJhdGUpIHx8IHNhbXBsZVJhdGUgPD0gMCB8fCBzYW1wbGVSYXRlID4gTUFYX1NBTVBMRV9SQVRFKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHN0YXJ0TXMgPSBnZXRWaWRlb1RpbWVNcygpO1xuICAgIGVuY29kZXIuc2V0dXBBdWRpbyhzYW1wbGVSYXRlKTtcbiAgICBjb25zdCBzaWxlbmNlU2FtcGxlcyA9IE1hdGguY2VpbCgoc3RhcnRNcyAqIHNhbXBsZVJhdGUpIC8gMTAwMCk7XG4gICAgaWYgKHNpbGVuY2VTYW1wbGVzIDw9IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGVuY29kZXIuZW5jb2RlQXVkaW8oQnVmZmVyLmFsbG9jKHNpbGVuY2VTYW1wbGVzICogMiAqIDQpKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgb25FcnJvcihlcnJvciBhcyBFcnJvcik7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IG9uQ2h1bmsgPSBhc3luYyAoX2U6IHVua25vd24sIGJ1ZmZlcjogQnVmZmVyKSA9PiB7XG4gICAgLy8gUGFnZS13b3JsZCBjb2RlIG93bnMgdGhpcyBjaGFubmVsLCBzbyB0cmVhdCBpdHMgcGF5bG9hZCBhcyBpbnB1dDogd3Jvbmcgc2l6ZSBtZWFucyBpdCBpcyBub3Qgb3VyIHdvcmtsZXQncyBQQ00uXG4gICAgY29uc3QgYnl0ZXMgPSBBcnJheUJ1ZmZlci5pc1ZpZXcoYnVmZmVyKSA/IGJ1ZmZlci5ieXRlTGVuZ3RoIDogMDtcbiAgICBpZiAoYnl0ZXMgPT09IDAgfHwgYnl0ZXMgPiBNQVhfQ0hVTktfQllURVMgfHwgYnl0ZXMgJSA4ICE9PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBlbmNvZGVyLmVuY29kZUF1ZGlvKGJ1ZmZlcik7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIG9uRXJyb3IoZXJyb3IgYXMgRXJyb3IpO1xuICAgIH1cbiAgfTtcblxuICB3Yy5pcGMub24oQVVESU9fTUVUQV9DSEFOTkVMLCBvbk1ldGEpO1xuICB3Yy5pcGMub24oQVVESU9fQ0hVTktfQ0hBTk5FTCwgb25DaHVuayk7XG5cbiAgcmV0dXJuICgpID0+IHtcbiAgICB3Yy5pcGMucmVtb3ZlTGlzdGVuZXIoQVVESU9fTUVUQV9DSEFOTkVMLCBvbk1ldGEpO1xuICAgIHdjLmlwYy5yZW1vdmVMaXN0ZW5lcihBVURJT19DSFVOS19DSEFOTkVMLCBvbkNodW5rKTtcbiAgfTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDcvMTYuXG5cbmltcG9ydCB7IHdyaXRlRmlsZSB9IGZyb20gXCJub2RlOmZzL3Byb21pc2VzXCI7XG5pbXBvcnQgeyBkaXJuYW1lLCBqb2luIH0gZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHsgbmF0aXZlSW1hZ2UgfSBmcm9tIFwiZWxlY3Ryb25cIjtcblxuaW50ZXJmYWNlIFNjcmVlbnNob3RUYXJnZXQge1xuICBtczogbnVtYmVyO1xuICBpbmRleDogbnVtYmVyO1xuICBwYXRoOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2NyZWVuc2hvdE9wdGlvbnMge1xuICBtYXJrczogbnVtYmVyW107XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICBvdXRGaWxlczogc3RyaW5nW107XG59XG5cbi8vIER1bXBzIHBhaW50ZWQgQkdSQSBmcmFtZXMgdG8gUE5HIGF0IHJlcXVlc3RlZCBzZWNvbmQgbWFya3M7IHJlc3VsdCBvcmRlciB0cmFja3MgaW5wdXQgb3JkZXIuXG5leHBvcnQgY2xhc3MgU2NyZWVuc2hvdFRha2VyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfcGVuZGluZzogU2NyZWVuc2hvdFRhcmdldFtdO1xuICBwcml2YXRlIHJlYWRvbmx5IF9kb25lID0gbmV3IE1hcDxudW1iZXIsIHN0cmluZz4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfd3JpdGVzOiBQcm9taXNlPHZvaWQ+W10gPSBbXTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IF9zOiBTY3JlZW5zaG90T3B0aW9ucykge1xuICAgIGNvbnN0IGRpciA9IGRpcm5hbWUoX3Mub3V0RmlsZXNbMF0gPz8gXCIuXCIpO1xuICAgIHRoaXMuX3BlbmRpbmcgPSBfcy5tYXJrc1xuICAgICAgLm1hcCgoc2VjLCBpbmRleCkgPT4gKHsgbXM6IHNlYyAqIDEwMDAsIGluZGV4LCBwYXRoOiBqb2luKGRpciwgYHNjcmVlbnNob3RfJHtpbmRleH0ucG5nYCkgfSkpXG4gICAgICAuc29ydCgoYSwgYikgPT4gYS5tcyAtIGIubXMpO1xuICB9XG5cbiAgLy8gRHVtcCBldmVyeSBtYXJrIHdob3NlIHNlY29uZCBoYXMgYmVlbiByZWFjaGVkIGJ5IHRoaXMgZnJhbWUuXG4gIGNhcHR1cmUoY3VycmVudFRpbWVNczogbnVtYmVyLCBiZ3JhOiBCdWZmZXIpOiB2b2lkIHtcbiAgICB3aGlsZSAodGhpcy5fcGVuZGluZy5sZW5ndGggPiAwICYmIHRoaXMuX3BlbmRpbmdbMF0hLm1zIDw9IGN1cnJlbnRUaW1lTXMpIHtcbiAgICAgIHRoaXMudGFrZSh0aGlzLl9wZW5kaW5nLnNoaWZ0KCkhLCBiZ3JhKTtcbiAgICB9XG4gIH1cblxuICAvLyBSZWNvcmRpbmcgb3Zlcjogc25hcCBhbnkgbWFyayBwYXN0IHRoZSBsYXN0IGZyYW1lIG9udG8gaXQsIHRoZW4gd3JpdGUgYWxsIHNob3RzIG91dC5cbiAgYXN5bmMgZmluaXNoKGZpbmFsQmdyYT86IEJ1ZmZlcik6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICB3aGlsZSAoZmluYWxCZ3JhICYmIHRoaXMuX3BlbmRpbmcubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy50YWtlKHRoaXMuX3BlbmRpbmcuc2hpZnQoKSEsIGZpbmFsQmdyYSk7XG4gICAgfVxuICAgIGF3YWl0IFByb21pc2UuYWxsKHRoaXMuX3dyaXRlcyk7XG4gICAgcmV0dXJuIFsuLi50aGlzLl9kb25lLmVudHJpZXMoKV0uc29ydCgoYSwgYikgPT4gYVswXSAtIGJbMF0pLm1hcCgoWywgcGF0aF0pID0+IHBhdGgpO1xuICB9XG5cbiAgcHJpdmF0ZSB0YWtlKHRhcmdldDogU2NyZWVuc2hvdFRhcmdldCwgYmdyYTogQnVmZmVyKTogdm9pZCB7XG4gICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSB0aGlzLl9zO1xuICAgIGNvbnN0IHBuZyA9IG5hdGl2ZUltYWdlLmNyZWF0ZUZyb21CaXRtYXAoYmdyYSwgeyB3aWR0aCwgaGVpZ2h0IH0pLnRvUE5HKCk7XG4gICAgdGhpcy5fZG9uZS5zZXQodGFyZ2V0LmluZGV4LCB0YXJnZXQucGF0aCk7XG4gICAgdGhpcy5fd3JpdGVzLnB1c2god3JpdGVGaWxlKHRhcmdldC5wYXRoLCBwbmcpKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wNS5cblxuaW1wb3J0IHsgc2V0VGltZW91dCB9IGZyb20gXCJub2RlOnRpbWVycy9wcm9taXNlc1wiO1xuaW1wb3J0IHsgc2xlZXAgfSBmcm9tIFwiLi90aW1pbmdcIjtcblxuZXhwb3J0IGludGVyZmFjZSBSZXRyeU9wdGlvbnM8QXJncyBleHRlbmRzIHVua25vd25bXSwgUmV0PiB7XG4gIGZuOiAoLi4uYXJnczogQXJncykgPT4gUHJvbWlzZTxSZXQ+O1xuICBtYXhBdHRlbXB0cz86IG51bWJlcjtcbiAgdGltZW91dD86IG51bWJlcjtcbiAgLy8gQWJvcnQgYmFpbHMgaW1tZWRpYXRlbHkgaW5zdGVhZCBvZiByZXRyeWluZzsgc2lnbmFsIGlzIG5vdCBhdXRvLXRocmVhZGVkIGludG8gZm4g4oCUIGNhbGxlciB3aXJlcyBpdCAoZmV0Y2gsIFMzIHNlbmQpLlxuICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVzZVJldHJ5PEFyZ3MgZXh0ZW5kcyB1bmtub3duW10sIFJldD4oe1xuICBmbixcbiAgbWF4QXR0ZW1wdHMgPSAzLFxuICB0aW1lb3V0LFxuICBzaWduYWwsXG59OiBSZXRyeU9wdGlvbnM8QXJncywgUmV0Pikge1xuICBjb25zdCB0aW1lb3V0RXJyb3IgPSBuZXcgRXJyb3IoYHRpbWVvdXQgb3ZlciAke3RpbWVvdXR9bXNgKTtcbiAgcmV0dXJuIGFzeW5jICguLi5hcmdzOiBBcmdzKSA9PiB7XG4gICAgbGV0IGF0dGVtcHQgPSAwO1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBzaWduYWw/LnRocm93SWZBYm9ydGVkKCk7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBwcm9taXNlcyA9IFtmbiguLi5hcmdzKV07XG4gICAgICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICAgICAgcHJvbWlzZXMucHVzaChcbiAgICAgICAgICAgIHNldFRpbWVvdXQodGltZW91dCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgIHRocm93IHRpbWVvdXRFcnJvcjtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGF3YWl0IFByb21pc2UucmFjZShwcm9taXNlcyk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHNpZ25hbD8udGhyb3dJZkFib3J0ZWQoKTtcbiAgICAgICAgYXR0ZW1wdCsrO1xuICAgICAgICBpZiAoYXR0ZW1wdCA+PSBtYXhBdHRlbXB0cykge1xuICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgc2xlZXAoMiAqKiBhdHRlbXB0ICogMTAwICsgTWF0aC5yYW5kb20oKSAqIDEwMCk7XG4gICAgICB9XG4gICAgfVxuICB9O1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNy8yNy5cblxuZXhwb3J0IHR5cGUgV29ybGRNb2RlID0gXCJzaG9vdFwiIHwgXCJyZW5kZXJcIiB8IFwiYXVkaW9cIjtcblxuLy8gTmFtZXMgdGhlIHBhZ2Utd29ybGQgYnVuZGxlIGluIHRoZSBwcmVsb2FkJ3MgYXJndjsga2VlcCB0aGlzIG1vZHVsZSBkZXBlbmRlbmN5LWZyZWUsIHRoZSBwcmVsb2FkIGxvYWRzIGl0IGFzLWlzLlxuZXhwb3J0IGNvbnN0IFdPUkxEX0FSRyA9IFwiLS1wdXAtd29ybGQ9XCI7XG5cbi8vIFByZXNlbnQgb25seSB3aGVuIHRoZSBydW4gY2FwdHVyZXMgYXVkaW8sIHNvIGEgcGFnZSBpbiBhbnkgb3RoZXIgbW9kZSBoYXMgbm8gY2hhbm5lbCB0byBwdXNoIFBDTSB0aHJvdWdoLlxuZXhwb3J0IGNvbnN0IEFVRElPX0FSRyA9IFwiLS1wdXAtYXVkaW9cIjtcbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDMvMTAuXG5cbmV4cG9ydCBpbnRlcmZhY2UgV2FpdE9wdGlvbnMge1xuICB0aW1lb3V0OiBudW1iZXI7XG4gIG9uVGltZW91dD86ICgpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBjbGFzcyBXYWl0YWJsZUV2ZW50IHtcbiAgcHJpdmF0ZSBfcHJvbWlzZT86IFByb21pc2U8dm9pZD47XG4gIHByaXZhdGUgX3Jlc29sdmU/OiAoKSA9PiB2b2lkO1xuICBwcml2YXRlIF90aW1lb3V0VG9rZW4/OiBOb2RlSlMuVGltZW91dDtcblxuICB3YWl0KG9wdGlvbnM/OiBXYWl0T3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9wcm9taXNlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJhbHJlYWR5IHdhaXRpbmdcIik7XG4gICAgfVxuICAgIHRoaXMuX3Byb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgdGhpcy5fcmVzb2x2ZSA9IHJlc29sdmU7XG4gICAgICBpZiAob3B0aW9ucz8udGltZW91dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuX3RpbWVvdXRUb2tlbiA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIG9wdGlvbnMub25UaW1lb3V0Py4oKTtcbiAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH0sIG9wdGlvbnMudGltZW91dCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuX3Byb21pc2U7XG4gIH1cblxuICBzaWduYWwoKSB7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVvdXRUb2tlbik7XG4gICAgdGhpcy5fcHJvbWlzZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLl9yZXNvbHZlPy4oKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wOS5cblxuaW1wb3J0IHsgVVJMIH0gZnJvbSBcIm5vZGU6dXJsXCI7XG5pbXBvcnQgdHlwZSB7IEJyb3dzZXJXaW5kb3cgfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IENvbmN1cnJlbmN5TGltaXRlciB9IGZyb20gXCIuLi9iYXNlL2xpbWl0ZXJcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuLi9iYXNlL2xvZ2dpbmdcIjtcbmltcG9ydCB7IFdhaXRhYmxlRXZlbnQgfSBmcm9tIFwiLi4vYmFzZS93YWl0YWJsZV9ldmVudFwiO1xuXG5jb25zdCBUQUcgPSBcIltOZXR3b3JrXVwiO1xuXG5jb25zdCBtYXAgPSBuZXcgTWFwKFtcbiAgW2Bqc3N6LWJvc3MuaGRzbGIuY29tYCwgYGpzc3otYm9zcy5iaWxpYmlsaS5jb2BdLFxuICBbYGJvc3MuaGRzbGIuY29tYCwgYHNoamQtYm9zcy5iaWxpYmlsaS5jb2BdLFxuICBbYHVwb3Mtc3otbWlycm9yY29zLmJpbGl2aWRlby5jb21gLCBganNzei1pbm5lci1ib3NzLmJpbGliaWxpLmNvYF0sXG5dKTtcblxuY29uc3QgdGFyZ2V0cyA9IG5ldyBTZXQobWFwLnZhbHVlcygpKTtcblxuY29uc3QgTE9DQUxfU0NIRU1FUyA9IFtcInB1cDpcIiwgXCJwdXAtZnJhbWU6XCIsIFwiZmlsZTpcIiwgXCJkYXRhOlwiLCBcImJsb2I6XCIsIFwiY2hyb21lLWV4dGVuc2lvbjpcIiwgXCJkZXZ0b29sczpcIl07XG5cbmZ1bmN0aW9uIGlzTG9jYWxTY2hlbWUodXJsOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgZm9yIChjb25zdCBzIG9mIExPQ0FMX1NDSEVNRVMpIHtcbiAgICBpZiAodXJsLnN0YXJ0c1dpdGgocykpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzUHJveHlUYXJnZXQodXJsOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIHVybC5zdGFydHNXaXRoKFwiaHR0cFwiKSAmJiB0YXJnZXRzLmhhcyhuZXcgVVJMKHVybCkuaG9zdG5hbWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJveGllZFVybCh1cmw6IHN0cmluZykge1xuICBpZiAoIXVybC5zdGFydHNXaXRoKFwiaHR0cFwiKSkge1xuICAgIHJldHVybiB1cmw7XG4gIH1cbiAgY29uc3QgcGFyc2VkID0gbmV3IFVSTCh1cmwpO1xuICBjb25zdCB0YXJnZXQgPSBtYXAuZ2V0KHBhcnNlZC5ob3N0bmFtZSk7XG4gIGlmICghdGFyZ2V0KSB7XG4gICAgcmV0dXJuIHVybDtcbiAgfVxuICBwYXJzZWQuaG9zdG5hbWUgPSB0YXJnZXQ7XG4gIHBhcnNlZC5wcm90b2NvbCA9IFwiaHR0cDpcIjtcbiAgcmV0dXJuIHBhcnNlZC50b1N0cmluZygpO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5ldHdvcmtPcHRpb25zIHtcbiAgc291cmNlOiBzdHJpbmc7XG4gIHdpbmRvdzogQnJvd3NlcldpbmRvdztcbiAgdXNlSW5uZXJQcm94eT86IGJvb2xlYW47XG4gIHN0dWJNZWRpYT86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRJbnRlcmNlcHRvcih7IHNvdXJjZSwgd2luZG93LCB1c2VJbm5lclByb3h5LCBzdHViTWVkaWEgfTogTmV0d29ya09wdGlvbnMpIHtcbiAgY29uc3QgcmVxID0gd2luZG93LndlYkNvbnRlbnRzLnNlc3Npb24ud2ViUmVxdWVzdDtcbiAgY29uc3QgbGltaXRlciA9IG5ldyBDb25jdXJyZW5jeUxpbWl0ZXIoMjU2KTtcbiAgY29uc3QgZXZlbnRzID0gbmV3IE1hcDxzdHJpbmcsIFdhaXRhYmxlRXZlbnQ+KCk7XG5cbiAgYXN5bmMgZnVuY3Rpb24gd2FpdChrZXk6IHN0cmluZywgb25UaW1lb3V0PzogKCkgPT4gdm9pZCkge1xuICAgIGNvbnN0IGV2ZW50ID0gbmV3IFdhaXRhYmxlRXZlbnQoKTtcbiAgICBldmVudHMuc2V0KGtleSwgZXZlbnQpO1xuICAgIGF3YWl0IGV2ZW50LndhaXQoeyB0aW1lb3V0OiA1XzAwMCwgb25UaW1lb3V0IH0pLmZpbmFsbHkoKCkgPT4gZXZlbnRzLmRlbGV0ZShrZXkpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNpZ25hbChrZXk6IHN0cmluZykge1xuICAgIGV2ZW50cy5nZXQoa2V5KT8uc2lnbmFsKCk7XG4gIH1cblxuICByZXEub25CZWZvcmVSZXF1ZXN0KChkZXRhaWxzLCBjYWxsYmFjaykgPT4ge1xuICAgIGNvbnN0IHVybCA9IGRldGFpbHMudXJsO1xuICAgIC8vIFN3YXAgbWVkaWEgZm9yIGEgZnJhbWUtc2VydmVyIHN0dWIgKHRydWUgaW50cmluc2ljIHNpemUvZHVyYXRpb24pIHNvIEJsaW5rIGxheXMgb3V0IGxpa2UgQ2hyb21lLlxuICAgIGlmIChzdHViTWVkaWEgJiYgZGV0YWlscy5yZXNvdXJjZVR5cGUgPT09IFwibWVkaWFcIiAmJiAhdXJsLnN0YXJ0c1dpdGgoXCJwdXAtZnJhbWU6XCIpKSB7XG4gICAgICBjYWxsYmFjayh7XG4gICAgICAgIHJlZGlyZWN0VVJMOiBgcHVwLWZyYW1lOi8vc3R1Yj9zcmM9JHtlbmNvZGVVUklDb21wb25lbnQodXJsKX1gLFxuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHByb3hpZWQgPSB1c2VJbm5lclByb3h5ID8gcHJveGllZFVybCh1cmwpIDogdXJsO1xuICAgIGxpbWl0ZXIuc2NoZWR1bGUoKCkgPT4ge1xuICAgICAgY29uc3Qga2V5ID0gYCR7d2luZG93LmlkfV8ke2RldGFpbHMuaWR9YDtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhUQUcsIGBzdGFydDpgLCB7XG4gICAgICAgIGtleSxcbiAgICAgICAgdXJsLFxuICAgICAgICBwcm94aWVkLFxuICAgICAgICBtZXRob2Q6IGRldGFpbHMubWV0aG9kLFxuICAgICAgICBzb3VyY2UsXG4gICAgICAgIHN0YXRzOiBsaW1pdGVyLnN0YXRzLFxuICAgICAgfSk7XG4gICAgICBpZiAocHJveGllZCA9PT0gdXJsKSB7XG4gICAgICAgIGNhbGxiYWNrKHsgY2FuY2VsOiBmYWxzZSB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNhbGxiYWNrKHsgY2FuY2VsOiBmYWxzZSwgcmVkaXJlY3RVUkw6IHByb3hpZWQgfSk7XG4gICAgICB9XG4gICAgICBpZiAoaXNMb2NhbFNjaGVtZSh1cmwpKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB3YWl0KGtleSwgKCkgPT4ge1xuICAgICAgICBsb2dnZXIuZGVidWcoVEFHLCBgbWF5YmUgdGltZW91dDpgLCB7XG4gICAgICAgICAga2V5LFxuICAgICAgICAgIHVybCxcbiAgICAgICAgICBwcm94aWVkLFxuICAgICAgICAgIG1ldGhvZDogZGV0YWlscy5tZXRob2QsXG4gICAgICAgICAgc291cmNlLFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICByZXEub25IZWFkZXJzUmVjZWl2ZWQoKHsgdXJsLCByZXNwb25zZUhlYWRlcnMgfSwgY2FsbGJhY2spID0+IHtcbiAgICBkZWxldGUgcmVzcG9uc2VIZWFkZXJzPy5bXCJ4LWZyYW1lLW9wdGlvbnNcIl07XG4gICAgZGVsZXRlIHJlc3BvbnNlSGVhZGVycz8uW1wiWC1GcmFtZS1PcHRpb25zXCJdO1xuICAgIGRlbGV0ZSByZXNwb25zZUhlYWRlcnM/LltcImNvbnRlbnQtc2VjdXJpdHktcG9saWN5XCJdO1xuICAgIGRlbGV0ZSByZXNwb25zZUhlYWRlcnM/LltcIkNvbnRlbnQtU2VjdXJpdHktUG9saWN5XCJdO1xuICAgIC8vIFByb3h5aW5nIHJld3JvdGUgdGhlIG9yaWdpbiwgc28gZm9udHMgYW5kIG90aGVyIENPUlMtbW9kZSBmZXRjaGVzIG5lZWQgdGhlIGdyYW50IHRoZSBvcmlnaW5hbCBob3N0IHdvdWxkIGhhdmUgaGFkLlxuICAgIGlmICh1c2VJbm5lclByb3h5ICYmIGlzUHJveHlUYXJnZXQodXJsKSkge1xuICAgICAgY2FsbGJhY2soeyBjYW5jZWw6IGZhbHNlLCByZXNwb25zZUhlYWRlcnM6IHsgLi4ucmVzcG9uc2VIZWFkZXJzLCBcImFjY2Vzcy1jb250cm9sLWFsbG93LW9yaWdpblwiOiBbXCIqXCJdIH0gfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNhbGxiYWNrKHsgY2FuY2VsOiBmYWxzZSwgcmVzcG9uc2VIZWFkZXJzIH0pO1xuICB9KTtcblxuICByZXEub25Db21wbGV0ZWQoKGRldGFpbHMpID0+IHtcbiAgICBjb25zdCBrZXkgPSBgJHt3aW5kb3cuaWR9XyR7ZGV0YWlscy5pZH1gO1xuICAgIHNpZ25hbChrZXkpO1xuICAgIGxvZ2dlci5kZWJ1ZyhUQUcsIGBjb21wbGV0ZWQ6YCwge1xuICAgICAga2V5LFxuICAgICAgdXJsOiBkZXRhaWxzLnVybCxcbiAgICAgIG1ldGhvZDogZGV0YWlscy5tZXRob2QsXG4gICAgICBzdGF0dXNDb2RlOiBkZXRhaWxzLnN0YXR1c0NvZGUsXG4gICAgICBzb3VyY2UsXG4gICAgfSk7XG4gIH0pO1xuXG4gIHJlcS5vbkVycm9yT2NjdXJyZWQoKGRldGFpbHMpID0+IHtcbiAgICBjb25zdCBrZXkgPSBgJHt3aW5kb3cuaWR9XyR7ZGV0YWlscy5pZH1gO1xuICAgIHNpZ25hbChrZXkpO1xuICAgIGNvbnN0IHsgdXJsLCBtZXRob2QsIGVycm9yLCByZXNvdXJjZVR5cGUgfSA9IGRldGFpbHM7XG4gICAgbG9nZ2VyLmRlYnVnKFRBRywgYGVycm9yOmAsIHsga2V5LCB1cmwsIG1ldGhvZCwgZXJyb3IsIHJlc291cmNlVHlwZSwgc291cmNlIH0pO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVuc2V0SW50ZXJjZXB0b3Iod2luZG93OiBCcm93c2VyV2luZG93KSB7XG4gIGNvbnN0IHJlcSA9IHdpbmRvdy53ZWJDb250ZW50cy5zZXNzaW9uLndlYlJlcXVlc3Q7XG4gIHJlcS5vbkJlZm9yZVJlcXVlc3QobnVsbCk7XG4gIHJlcS5vbkhlYWRlcnNSZWNlaXZlZChudWxsKTtcbiAgcmVxLm9uQ29tcGxldGVkKG51bGwpO1xuICByZXEub25FcnJvck9jY3VycmVkKG51bGwpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8yNy5cblxuaW1wb3J0IHsgam9pbiB9IGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IEJyb3dzZXJXaW5kb3cgfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCB7IHB1cFBrZ1Jvb3QsIHB1cFByZWxvYWQgfSBmcm9tIFwiLi4vYmFzZS9jb25zdGFudHNcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuLi9iYXNlL2xvZ2dpbmdcIjtcbmltcG9ydCB7IHVzZVJldHJ5IH0gZnJvbSBcIi4uL2Jhc2UvcmV0cnlcIjtcbmltcG9ydCB7IHNsZWVwIH0gZnJvbSBcIi4uL2Jhc2UvdGltaW5nXCI7XG5pbXBvcnQgeyBBVURJT19BUkcsIFdPUkxEX0FSRywgdHlwZSBXb3JsZE1vZGUgfSBmcm9tIFwiLi4vcnVudGltZS93b3JsZFwiO1xuaW1wb3J0IHsgcHJveGllZFVybCwgc2V0SW50ZXJjZXB0b3IsIHVuc2V0SW50ZXJjZXB0b3IgfSBmcm9tIFwiLi9uZXR3b3JrXCI7XG5pbXBvcnQgeyBjcmVhdGVTdGVnb1VSTCB9IGZyb20gXCIuL3Byb3RvY29sXCI7XG5pbXBvcnQgdHlwZSB7IElQQ1JlbmRlck9wdGlvbnMgfSBmcm9tIFwiLi9zY2hlbWFcIjtcblxuY29uc3QgVEFHID0gXCJbV2luZG93XVwiO1xuY29uc3QgVElNRU9VVF9FUlJPUiA9IG5ldyBFcnJvcihcIndpbmRvdyB0aW1lb3V0XCIpO1xuY29uc3QgQ09OU09MRV9JR05PUkVTID0gW1wiTWl4ZWQgQ29udGVudDogVGhlIHBhZ2UgYXRcIl07XG5cbmludGVyZmFjZSBGaW5pc2hPcHRpb25zIHtcbiAgc291cmNlOiBzdHJpbmc7XG4gIHdpbjogQnJvd3NlcldpbmRvdztcbiAgYWN0aW9uOiAoKSA9PiB2b2lkO1xuICB0aW1lb3V0TXM6IG51bWJlcjtcbiAgdG9sZXJhbnQ/OiBib29sZWFuO1xuICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbn1cblxuZnVuY3Rpb24gd2FpdEZvckZpbmlzaCh7IHNvdXJjZSwgd2luLCBhY3Rpb24sIHRpbWVvdXRNcywgdG9sZXJhbnQsIHNpZ25hbCB9OiBGaW5pc2hPcHRpb25zKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgbGV0IGRvbVJlYWR5ID0gZmFsc2U7XG4gICAgLy8gVG9sZXJhbnQgcHJvY2VlZHMgb24gYSBwYXJ0aWFsIERPTSBvbmx5IGFzIGEgdGltZW91dCBmYWxsYmFjayDigJQgc3RhcnRpbmcgb24gYmFyZSBkb20tcmVhZHkgbGVhdmVzIHRoZSBsb2FkIHBlbmRpbmcgYW5kIHdlZGdlcyB2aXJ0dWFsIHRpbWUuXG4gICAgY29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4gZG9uZSh0b2xlcmFudCAmJiBkb21SZWFkeSA/IHVuZGVmaW5lZCA6IFRJTUVPVVRfRVJST1IpLCB0aW1lb3V0TXMpO1xuICAgIGNvbnN0IGRvbmUgPSAoZXJyPzogdW5rbm93bikgPT4ge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgaWYgKGVycikge1xuICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHNpZ25hbD8udGhyb3dJZkFib3J0ZWQoKTtcbiAgICBzaWduYWw/LmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCAoKSA9PiBkb25lKHNpZ25hbC5yZWFzb24pLCB7XG4gICAgICBvbmNlOiB0cnVlLFxuICAgIH0pO1xuICAgIHdpbi53ZWJDb250ZW50cy5vbmNlKFwiZG9tLXJlYWR5XCIsICgpID0+IHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhUQUcsIFwiZG9tLXJlYWR5OlwiLCB7IHNvdXJjZSB9KTtcbiAgICAgIGRvbVJlYWR5ID0gdHJ1ZTtcbiAgICB9KTtcbiAgICB3aW4ud2ViQ29udGVudHMub25jZShcImRpZC1zdG9wLWxvYWRpbmdcIiwgKCkgPT4ge1xuICAgICAgbG9nZ2VyLmRlYnVnKFRBRywgXCJkaWQtc3RvcC1sb2FkaW5nOlwiLCB7IHNvdXJjZSB9KTtcbiAgICAgIGRvbmUoKTtcbiAgICB9KTtcbiAgICB3aW4ud2ViQ29udGVudHMub25jZShcImRpZC1mYWlsLWxvYWRcIiwgKF9lLCBjb2RlLCBkZXNjLCB1cmwpID0+IHtcbiAgICAgIGNvbnN0IG1zZyA9IGBkaWQtZmFpbC1sb2FkOiAke0pTT04uc3RyaW5naWZ5KHsgdXJsLCBzb3VyY2UsIGNvZGUsIGRlc2MgfSl9YDtcbiAgICAgIGxvZ2dlci5lcnJvcihUQUcsIG1zZyk7XG4gICAgICBkb25lKG5ldyBFcnJvcihtc2cpKTtcbiAgICB9KTtcbiAgICB3aW4ud2ViQ29udGVudHMub25jZShcInByZWxvYWQtZXJyb3JcIiwgKF9lLCBfcGF0aCwgZXJyb3IpID0+IHtcbiAgICAgIGxvZ2dlci5lcnJvcihUQUcsIGBwcmVsb2FkLWVycm9yOiAke0pTT04uc3RyaW5naWZ5KHsgc291cmNlLCBtZXNzYWdlOiBlcnJvci5tZXNzYWdlIH0pfWApO1xuICAgICAgZG9uZShlcnJvcik7XG4gICAgfSk7XG4gICAgd2luLndlYkNvbnRlbnRzLm9uY2UoXCJyZW5kZXItcHJvY2Vzcy1nb25lXCIsIChfZSwgeyBleGl0Q29kZSwgcmVhc29uIH0pID0+IHtcbiAgICAgIGNvbnN0IG1zZyA9IGByZW5kZXItcHJvY2Vzcy1nb25lOiAke0pTT04uc3RyaW5naWZ5KHsgc291cmNlLCBleGl0Q29kZSwgcmVhc29uIH0pfWA7XG4gICAgICBsb2dnZXIuZXJyb3IoVEFHLCBtc2cpO1xuICAgICAgZG9uZShuZXcgRXJyb3IobXNnKSk7XG4gICAgfSk7XG4gICAgYWN0aW9uKCk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGlzcG9zZVdpbmRvdyh3aW46IEJyb3dzZXJXaW5kb3cpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiB7XG4gICAgdW5zZXRJbnRlcmNlcHRvcih3aW4pO1xuICAgIGNvbnN0IHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBsb2dnZXIud2FybihUQUcsIFwiZm9yY2UgY2xvc2VcIik7XG4gICAgICAgIHdpbi5kZXN0cm95KCk7XG4gICAgICB9IGNhdGNoIHt9XG4gICAgICBkb25lKCk7XG4gICAgfSwgMTAwMCk7XG4gICAgY29uc3QgZG9uZSA9ICgpID0+IHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICByZXNvbHZlKCk7XG4gICAgfTtcbiAgICB3aW4ud2ViQ29udGVudHMuc3RvcFBhaW50aW5nKCk7XG4gICAgd2luLndlYkNvbnRlbnRzLmRlYnVnZ2VyLmRldGFjaCgpO1xuICAgIHdpbi5vbmNlKFwiY2xvc2VkXCIsIGRvbmUpO1xuICAgIHdpbi5jbG9zZSgpO1xuICB9KTtcbn1cblxuZXhwb3J0IHR5cGUgV2luZG93Q3JlYXRlZENhbGxiYWNrID0gKHdpbmRvdzogQnJvd3NlcldpbmRvdykgPT4gdm9pZCB8IFByb21pc2U8dm9pZD47XG5cbmV4cG9ydCBpbnRlcmZhY2UgV2luZG93T3B0aW9ucyB7XG4gIHNvdXJjZTogc3RyaW5nO1xuICByZW5kZXJlcjogSVBDUmVuZGVyT3B0aW9ucztcbiAgdG9sZXJhbnQ/OiBib29sZWFuO1xuICBvbkNyZWF0ZWQ/OiBXaW5kb3dDcmVhdGVkQ2FsbGJhY2s7XG4gIHNpZ25hbD86IEFib3J0U2lnbmFsO1xufVxuXG4vLyBQYWdlLXdvcmxkIGhvb2sgYnVuZGxlczsgdGhlIHByZWxvYWQgZXZhbHVhdGVzIHRoZSBuYW1lZCBvbmUgaW4gdGhlIG1haW4gd29ybGQgb2YgZXZlcnkgZnJhbWUgaXQgbGFuZHMgaW4uXG5jb25zdCBXT1JMRF9TQ1JJUFRTOiBSZWNvcmQ8V29ybGRNb2RlLCBzdHJpbmc+ID0ge1xuICBzaG9vdDogam9pbihwdXBQa2dSb290LCBcImRpc3RcIiwgXCJydW50aW1lXCIsIFwic2hvb3QuZ2xvYmFsLmpzXCIpLFxuICByZW5kZXI6IGpvaW4ocHVwUGtnUm9vdCwgXCJkaXN0XCIsIFwicnVudGltZVwiLCBcInJlbmRlci5nbG9iYWwuanNcIiksXG4gIGF1ZGlvOiBqb2luKHB1cFBrZ1Jvb3QsIFwiZGlzdFwiLCBcInJ1bnRpbWVcIiwgXCJhdWRpby5nbG9iYWwuanNcIiksXG59O1xuXG5mdW5jdGlvbiBwaWNrV29ybGRTY3JpcHQocmVuZGVyZXI6IElQQ1JlbmRlck9wdGlvbnMpOiBzdHJpbmcge1xuICBjb25zdCBtb2RlOiBXb3JsZE1vZGUgPSByZW5kZXJlci5kZXRlcm1pbmlzdGljID8gXCJzaG9vdFwiIDogcmVuZGVyZXIud2l0aEF1ZGlvID8gXCJhdWRpb1wiIDogXCJyZW5kZXJcIjtcbiAgcmV0dXJuIFdPUkxEX1NDUklQVFNbbW9kZV07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIG9wZW5XaW5kb3coeyBzb3VyY2UsIHJlbmRlcmVyLCB0b2xlcmFudCwgc2lnbmFsLCBvbkNyZWF0ZWQgfTogV2luZG93T3B0aW9ucyk6IFByb21pc2U8QnJvd3NlcldpbmRvdz4ge1xuICBjb25zdCB7IHdpZHRoLCBoZWlnaHQsIHVzZUlubmVyUHJveHkgfSA9IHJlbmRlcmVyO1xuICBjb25zdCBzcmMgPSB1c2VJbm5lclByb3h5ID8gcHJveGllZFVybChzb3VyY2UpIDogc291cmNlO1xuXG4gIGNvbnN0IHdpbiA9IG5ldyBCcm93c2VyV2luZG93KHtcbiAgICB3aWR0aCxcbiAgICBoZWlnaHQ6IGhlaWdodCArIDEsXG4gICAgbWluV2lkdGg6IHdpZHRoLFxuICAgIG1pbkhlaWdodDogaGVpZ2h0ICsgMSxcbiAgICBtYXhXaWR0aDogd2lkdGgsXG4gICAgbWF4SGVpZ2h0OiBoZWlnaHQgKyAxLFxuICAgIHJlc2l6YWJsZTogZmFsc2UsXG4gICAgbWluaW1pemFibGU6IGZhbHNlLFxuICAgIG1vdmFibGU6IGZhbHNlLFxuICAgIHNob3c6IGZhbHNlLFxuICAgIHRyYW5zcGFyZW50OiB0cnVlLFxuICAgIGJhY2tncm91bmRDb2xvcjogdW5kZWZpbmVkLFxuICAgIGZyYW1lOiBmYWxzZSxcbiAgICB3ZWJQcmVmZXJlbmNlczoge1xuICAgICAgb2Zmc2NyZWVuOiB0cnVlLFxuICAgICAgYmFja2dyb3VuZFRocm90dGxpbmc6IGZhbHNlLFxuICAgICAgLy8gQ2FycmllcyB0aGUgYnJpZGdlIHByZWxvYWQgaW50byB0aGUgdGFyZ2V0IGlmcmFtZTsgbm9kZSBzdGF5cyBvZmYsIGFzIG5vZGVJbnRlZ3JhdGlvbiBrZWVwcyBpdHMgZmFsc2UgZGVmYXVsdC5cbiAgICAgIG5vZGVJbnRlZ3JhdGlvbkluU3ViRnJhbWVzOiB0cnVlLFxuICAgICAgLy8gRWxlY3Ryb24gc2FuZGJveGVzIHByZWxvYWRzIGJ5IGRlZmF1bHQsIHdoaWNoIGJyZWFrcyB0aGVpciBidW5kbGVkIHJlcXVpcmVzOyB0aGUgT1Mgc2FuZGJveCBpcyBvZmYgcmVnYXJkbGVzcy5cbiAgICAgIHNhbmRib3g6IGZhbHNlLFxuICAgICAgd2ViU2VjdXJpdHk6ICFyZW5kZXJlci5kaXNhYmxlV2ViU2VjdXJpdHksXG4gICAgICAvLyBUaGUgd3JhcHBlciBpcyBhIHNlY3VyZSBzY2hlbWUsIHNvIGl0IHVwZ3JhZGVzIHRoZSB0YXJnZXQgdG8gaHR0cHMgYW5kIGV2ZXJ5IGh0dHAgc3VicmVzb3VyY2UgaXQgb3ducyB0dXJucyBtaXhlZC5cbiAgICAgIGFsbG93UnVubmluZ0luc2VjdXJlQ29udGVudDogdHJ1ZSxcbiAgICAgIGV4cGVyaW1lbnRhbEZlYXR1cmVzOiB0cnVlLFxuICAgICAgcHJlbG9hZDogcHVwUHJlbG9hZCxcbiAgICAgIGFkZGl0aW9uYWxBcmd1bWVudHM6IFtgJHtXT1JMRF9BUkd9JHtwaWNrV29ybGRTY3JpcHQocmVuZGVyZXIpfWAsIC4uLihyZW5kZXJlci53aXRoQXVkaW8gPyBbQVVESU9fQVJHXSA6IFtdKV0sXG4gICAgfSxcbiAgfSk7XG4gIHNldEludGVyY2VwdG9yKHtcbiAgICBzb3VyY2UsXG4gICAgd2luZG93OiB3aW4sXG4gICAgdXNlSW5uZXJQcm94eSxcbiAgICBzdHViTWVkaWE6IHJlbmRlcmVyLmRldGVybWluaXN0aWMsXG4gIH0pO1xuICB3aW4ud2ViQ29udGVudHMuZGVidWdnZXIuYXR0YWNoKFwiMS4zXCIpO1xuICBhd2FpdCBvbkNyZWF0ZWQ/Lih3aW4pO1xuXG4gIHdpbi53ZWJDb250ZW50cy5vbihcImNvbnNvbGUtbWVzc2FnZVwiLCAoeyBsZXZlbCwgbWVzc2FnZSwgbGluZU51bWJlciwgc291cmNlSWQgfSkgPT4ge1xuICAgIC8vIERyb3AgaGVhZGxlc3Mgbm9pc2U6IHNlY3VyaXR5IHdhcm5pbmdzIGFuZCBodHRw4oaSaHR0cHMgYXV0by11cGdyYWRlIG5vdGljZXMgZm9yIGludGVybmFsLXByb3h5IGFzc2V0cy5cbiAgICBpZiAobGV2ZWwgPT09IFwid2FybmluZ1wiICYmIENPTlNPTEVfSUdOT1JFUy5maW5kKChpKSA9PiBtZXNzYWdlLnN0YXJ0c1dpdGgoaSkpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IG1zZ3MgPSBbVEFHLCBcImNvbnNvbGU6XCIsIHsgbWVzc2FnZSwgbGluZU51bWJlciwgc291cmNlSWQsIHNvdXJjZSB9XTtcbiAgICBsZXZlbCA9PT0gXCJlcnJvclwiID8gbG9nZ2VyLmVycm9yKC4uLm1zZ3MpIDogbG9nZ2VyLmRlYnVnKC4uLm1zZ3MpO1xuICAgIHJlbmRlcmVyLm9uQ29uc29sZShsZXZlbCwgbWVzc2FnZSk7XG4gIH0pO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgdXJsID0gY3JlYXRlU3RlZ29VUkwoc3JjLCB7IHdpZHRoLCBoZWlnaHQgfSk7XG4gICAgYXdhaXQgd2FpdEZvckZpbmlzaCh7XG4gICAgICBzb3VyY2UsXG4gICAgICB3aW4sXG4gICAgICBhY3Rpb246ICgpID0+IHdpbi5sb2FkVVJMKHVybCksXG4gICAgICB0aW1lb3V0TXM6IHJlbmRlcmVyLndpbmRvd1RpbWVvdXQgKiAxMDAwLFxuICAgICAgdG9sZXJhbnQsXG4gICAgICBzaWduYWwsXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBhd2FpdCBkaXNwb3NlV2luZG93KHdpbik7XG4gICAgdGhyb3cgZTtcbiAgfVxuXG4gIHJldHVybiB3aW47XG59XG5cbmNvbnN0IG9wZW5XaW5kb3dXaXRoUmV0cnkgPSB1c2VSZXRyeSh7IGZuOiBvcGVuV2luZG93LCBtYXhBdHRlbXB0czogMiB9KTtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxvYWRXaW5kb3coeyBzb3VyY2UsIHJlbmRlcmVyLCBvbkNyZWF0ZWQsIHNpZ25hbCB9OiBXaW5kb3dPcHRpb25zKTogUHJvbWlzZTxCcm93c2VyV2luZG93PiB7XG4gIHNpZ25hbD8udGhyb3dJZkFib3J0ZWQoKTtcbiAgbGV0IHdhcm11cDogQnJvd3NlcldpbmRvdyB8IHVuZGVmaW5lZDtcbiAgbGV0IGVycm9yOiB1bmtub3duO1xuICB0cnkge1xuICAgIHdhcm11cCA9IGF3YWl0IG9wZW5XaW5kb3dXaXRoUmV0cnkoeyBzb3VyY2UsIHJlbmRlcmVyLCBzaWduYWwgfSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBlcnJvciA9IGU7XG4gIH1cblxuICBjb25zdCBvcGVuID0gKCkgPT4ge1xuICAgIHJldHVybiBvcGVuV2luZG93KHtcbiAgICAgIHNvdXJjZSxcbiAgICAgIHJlbmRlcmVyLFxuICAgICAgb25DcmVhdGVkLFxuICAgICAgc2lnbmFsLFxuICAgICAgdG9sZXJhbnQ6IHJlbmRlcmVyLndpbmRvd1RvbGVyYW50LFxuICAgIH0pO1xuICB9O1xuXG4gIGlmIChyZW5kZXJlci53aW5kb3dUb2xlcmFudCAmJiBlcnJvciA9PT0gVElNRU9VVF9FUlJPUikge1xuICAgIGxvZ2dlci53YXJuKFRBRywgYHdhcm11cCB0aW1lb3V0OiAke3NvdXJjZX0sIGZhbGxpbmcgYmFjayB0byBkb20tcmVhZHlgKTtcbiAgICByZXR1cm4gYXdhaXQgb3BlbigpO1xuICB9XG5cbiAgaWYgKGVycm9yKSB7XG4gICAgY29uc3QgeyBtZXNzYWdlLCBzdGFjayB9ID0gZXJyb3IgYXMgRXJyb3I7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBmYWlsZWQgdG8gd2FybXVwIHdpbmRvdzogJHtKU09OLnN0cmluZ2lmeSh7IHNvdXJjZSwgbWVzc2FnZSwgc3RhY2sgfSl9YCk7XG4gIH1cblxuICBpZiAod2FybXVwKSB7XG4gICAgd2FybXVwLndlYkNvbnRlbnRzLnJlbW92ZUFsbExpc3RlbmVycygpO1xuICAgIHVuc2V0SW50ZXJjZXB0b3Iod2FybXVwKTtcbiAgICBhd2FpdCBzbGVlcCgyMDAwKTtcbiAgICBhd2FpdCBkaXNwb3NlV2luZG93KHdhcm11cCk7XG4gIH1cblxuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBvcGVuKCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBjb25zdCB7IG1lc3NhZ2UsIHN0YWNrIH0gPSBlIGFzIEVycm9yO1xuICAgIHRocm93IG5ldyBFcnJvcihgZmFpbGVkIHRvIGxvYWQgd2luZG93OiAke0pTT04uc3RyaW5naWZ5KHsgc291cmNlLCBtZXNzYWdlLCBzdGFjayB9KX1gKTtcbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMi8wOS5cblxuaW1wb3J0IHR5cGUgeyBOYXRpdmVJbWFnZSwgU2l6ZSB9IGZyb20gXCJlbGVjdHJvblwiO1xuaW1wb3J0IHsgcmVidWlsZERyYXdhYmxlIH0gZnJvbSBcIi4uL2Jhc2UvY2RwXCI7XG5pbXBvcnQgeyBFbmNvZGVyUGlwZWxpbmUgfSBmcm9tIFwiLi4vYmFzZS9lbmNvZGVyL3BpcGVsaW5lXCI7XG5pbXBvcnQgeyBzaXplRXF1YWxzIH0gZnJvbSBcIi4uL2Jhc2UvaW1hZ2VcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuLi9iYXNlL2xvZ2dpbmdcIjtcbmltcG9ydCB7IEJMQU5LX1dBUk5fUkFUSU8sIEJsYW5rU3RhdHMgfSBmcm9tIFwiLi4vYmFzZS9xdWFsaXR5L2JsYW5rXCI7XG5pbXBvcnQgeyBEcm9wU3RhdHMsIEpBTktfV0FSTl9TQ09SRSB9IGZyb20gXCIuLi9iYXNlL3F1YWxpdHkvZHJvcFwiO1xuaW1wb3J0IHsgcGVyaW9kaWNhbCB9IGZyb20gXCIuLi9iYXNlL3RpbWluZ1wiO1xuaW1wb3J0IHsgdHlwZSBBdWRpb0Rpc3Bvc2FsLCBhdHRhY2hBdWRpb0xpc3RlbmVycyB9IGZyb20gXCIuL2F1ZGlvXCI7XG5pbXBvcnQgdHlwZSB7IElwY0RvbmVQYXlsb2FkIH0gZnJvbSBcIi4vaXBjXCI7XG5pbXBvcnQgdHlwZSB7IElQQ1JlbmRlck9wdGlvbnMgfSBmcm9tIFwiLi9zY2hlbWFcIjtcbmltcG9ydCB7IFNjcmVlbnNob3RUYWtlciB9IGZyb20gXCIuL3NjcmVlbnNob3RcIjtcbmltcG9ydCB7IGRlY29kZVN0ZWdvLCBzdGFydFN0ZWdvIH0gZnJvbSBcIi4vc3RlZ29cIjtcbmltcG9ydCB7IGRpc3Bvc2VXaW5kb3csIGxvYWRXaW5kb3cgfSBmcm9tIFwiLi93aW5kb3dcIjtcblxuY29uc3QgVEFHID0gXCJbUmVuZGVyXVwiO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVuZGVyKG9wdGlvbnM6IElQQ1JlbmRlck9wdGlvbnMpOiBQcm9taXNlPElwY0RvbmVQYXlsb2FkPiB7XG4gIGNvbnN0IHsgc291cmNlLCBmcHMsIHdpZHRoLCBoZWlnaHQsIGR1cmF0aW9uLCB3aXRoQXVkaW8sIG91dEZpbGVzLCBkaXNhYmxlSHdDb2RlYywgc2lnbmFsLCBvblByb2dyZXNzIH0gPSBvcHRpb25zO1xuXG4gIGF3YWl0IHVzaW5nIGVuY29kZXIgPSBhd2FpdCBFbmNvZGVyUGlwZWxpbmUuY3JlYXRlKHsgd2lkdGgsIGhlaWdodCwgZnBzLCBvdXRGaWxlcywgd2l0aEF1ZGlvLCBkaXNhYmxlSHdDb2RlYyB9KTtcbiAgY29uc3QgdGFrZXIgPSBuZXcgU2NyZWVuc2hvdFRha2VyKHsgbWFya3M6IG9wdGlvbnMuc2NyZWVuc2hvdHMsIHdpZHRoLCBoZWlnaHQsIG91dEZpbGVzIH0pO1xuXG4gIGNvbnN0IHRvdGFsID0gTWF0aC5jZWlsKGZwcyAqIGR1cmF0aW9uKTtcbiAgY29uc3QgZnJhbWVJbnRlcnZhbCA9IDEwMDAgLyBmcHM7XG4gIGNvbnN0IGZyYW1lU2l6ZTogU2l6ZSA9IHsgd2lkdGgsIGhlaWdodDogaGVpZ2h0ICsgMSB9O1xuXG4gIGxldCB3cml0dGVuID0gMDtcbiAgbGV0IGxhc3RGcmFtZTogQnVmZmVyIHwgdW5kZWZpbmVkO1xuICBsZXQgc2NyZWVuc2hvdHM6IHN0cmluZ1tdID0gW107XG4gIGxldCBsYXN0V3JpdHRlblRpbWU6IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgbGV0IHByb2dyZXNzID0gMDtcbiAgbGV0IGVuY29kZUVycm9yOiBFcnJvciB8IHVuZGVmaW5lZDtcbiAgbGV0IHJlc29sdmVyOiAoKCkgPT4gdm9pZCkgfCB1bmRlZmluZWQ7XG4gIGxldCByZWplY3RlcjogKChyZWFzb24/OiB1bmtub3duKSA9PiB2b2lkKSB8IHVuZGVmaW5lZDtcbiAgbGV0IGNsZWFyU3R1Y2tDaGVjazogVm9pZEZ1bmN0aW9uIHwgdW5kZWZpbmVkO1xuICBjb25zdCBibGFua1N0YXRzID0gbmV3IEJsYW5rU3RhdHMod2lkdGgsIGhlaWdodCk7XG4gIGNvbnN0IGRyb3BTdGF0cyA9IG5ldyBEcm9wU3RhdHMoZnBzKTtcblxuICBsZXQgZGlzcG9zZUF1ZGlvOiBBdWRpb0Rpc3Bvc2FsIHwgdW5kZWZpbmVkO1xuICBjb25zdCBzY2hlZHVsZUZyYW1lID0gKGZyYW1lOiBCdWZmZXIpID0+IHtcbiAgICB3cml0dGVuKys7XG4gICAgYmxhbmtTdGF0cy5zYW1wbGUoZnJhbWUpO1xuICAgIGVuY29kZXIuZW5jb2RlQkdSQShmcmFtZSkuY2F0Y2goKGUpID0+IChlbmNvZGVFcnJvciA/Pz0gZSkpO1xuICB9O1xuXG4gIGNvbnN0IHBhaW50ID0gKF9lOiB1bmtub3duLCBfcjogdW5rbm93biwgaW1hZ2U6IE5hdGl2ZUltYWdlKSA9PiB7XG4gICAgZW5jb2RlRXJyb3IgPz89IHNpZ25hbD8ucmVhc29uO1xuICAgIGlmIChlbmNvZGVFcnJvcikge1xuICAgICAgcmVqZWN0ZXI/LihlbmNvZGVFcnJvcik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgaW1hZ2VTaXplID0gaW1hZ2UuZ2V0U2l6ZSgpO1xuICAgIGlmICghc2l6ZUVxdWFscyhpbWFnZVNpemUsIGZyYW1lU2l6ZSkpIHtcbiAgICAgIC8vIE5PVEUoQXV0b2tha2EpOiBXZSBtdXN0IGVuc3VyZSBmcmFtZSBpcyByZWFkeSBvbiBlbGVjdHJvbiB2NDErXG4gICAgICByZWJ1aWxkRHJhd2FibGUod2luLndlYkNvbnRlbnRzLCBmcmFtZVNpemUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIERlY29kZSBzdGVnbyB0aW1lc3RhbXAgZnJvbSB0aGUgYm90dG9tIHBpeGVsIHJvdyB3aXRob3V0IGZ1bGwgYml0bWFwIGNvcHlcbiAgICBjb25zdCBiaXRtYXAgPSBpbWFnZS50b0JpdG1hcCgpO1xuICAgIGNvbnN0IGN1cnJlbnRUaW1lID0gZGVjb2RlU3RlZ28oYml0bWFwLCBpbWFnZVNpemUpO1xuICAgIGlmIChjdXJyZW50VGltZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBlbmNvZGVFcnJvciA/Pz0gbmV3IEVycm9yKGBubyB0aW1lc3RhbXAgQCAke3dyaXR0ZW59YCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gU2tpcCBmcmFtZXMgdGhhdCBhcnJpdmUgdG9vIHNvb24gKDwgODAlIG9mIGZyYW1lIGludGVydmFsKVxuICAgIGlmIChsYXN0V3JpdHRlblRpbWUgIT09IHVuZGVmaW5lZCAmJiBjdXJyZW50VGltZSAtIGxhc3RXcml0dGVuVGltZSA8IGZyYW1lSW50ZXJ2YWwgKiAwLjgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjcm9wcGVkID0gQnVmZmVyLmZyb20oYml0bWFwLmJ1ZmZlciwgYml0bWFwLmJ5dGVPZmZzZXQsIGhlaWdodCAqIHdpZHRoICogNCk7XG4gICAgbGFzdEZyYW1lID0gY3JvcHBlZDtcbiAgICB0YWtlci5jYXB0dXJlKGN1cnJlbnRUaW1lLCBjcm9wcGVkKTtcblxuICAgIGlmIChsYXN0V3JpdHRlblRpbWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgc2NoZWR1bGVGcmFtZShjcm9wcGVkKTtcbiAgICAgIGRyb3BTdGF0cy53cm90ZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB0aW1lRGVsdGEgPSBjdXJyZW50VGltZSAtIGxhc3RXcml0dGVuVGltZTtcbiAgICAgIGlmICh0aW1lRGVsdGEgPD0gZnJhbWVJbnRlcnZhbCAqIDEuMikge1xuICAgICAgICBzY2hlZHVsZUZyYW1lKGNyb3BwZWQpO1xuICAgICAgICBkcm9wU3RhdHMud3JvdGUoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGZyYW1lc1RvSW5zZXJ0ID0gTWF0aC5yb3VuZCh0aW1lRGVsdGEgLyBmcmFtZUludGVydmFsKTtcbiAgICAgICAgZHJvcFN0YXRzLmRyb3BwZWQoZnJhbWVzVG9JbnNlcnQgLSAxKTtcbiAgICAgICAgZHJvcFN0YXRzLndyb3RlKCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZnJhbWVzVG9JbnNlcnQgJiYgd3JpdHRlbiA8IHRvdGFsOyBpKyspIHtcbiAgICAgICAgICBzY2hlZHVsZUZyYW1lKGNyb3BwZWQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGxhc3RXcml0dGVuVGltZSA9IGN1cnJlbnRUaW1lO1xuXG4gICAgY29uc3QgbmV3UHJvZ3Jlc3MgPSBNYXRoLmZsb29yKCh3cml0dGVuIC8gdG90YWwpICogMTAwKTtcbiAgICBpZiAobmV3UHJvZ3Jlc3MgIT09IHByb2dyZXNzKSB7XG4gICAgICBwcm9ncmVzcyA9IG5ld1Byb2dyZXNzO1xuICAgICAgb25Qcm9ncmVzcyhwcm9ncmVzcyk7XG4gICAgfVxuXG4gICAgY29uc3QgZHVyYXRpb25NcyA9IGR1cmF0aW9uICogMTAwMDtcbiAgICBpZiAoY3VycmVudFRpbWUgPj0gZHVyYXRpb25NcyAtIGZyYW1lSW50ZXJ2YWwgKiAwLjUgfHwgd3JpdHRlbiA+PSB0b3RhbCkge1xuICAgICAgcmVzb2x2ZXI/LigpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCB3aW4gPSBhd2FpdCBsb2FkV2luZG93KHtcbiAgICBzb3VyY2UsXG4gICAgcmVuZGVyZXI6IG9wdGlvbnMsXG4gICAgc2lnbmFsLFxuICAgIG9uQ3JlYXRlZDogKHdpbikgPT4ge1xuICAgICAgaWYgKHdpdGhBdWRpbykge1xuICAgICAgICBkaXNwb3NlQXVkaW8gPSBhdHRhY2hBdWRpb0xpc3RlbmVycyh7XG4gICAgICAgICAgd2M6IHdpbi53ZWJDb250ZW50cyxcbiAgICAgICAgICBlbmNvZGVyLFxuICAgICAgICAgIGdldFZpZGVvVGltZU1zOiAoKSA9PiBsYXN0V3JpdHRlblRpbWUgPz8gMCxcbiAgICAgICAgICBvbkVycm9yOiAoZTogRXJyb3IpID0+IChlbmNvZGVFcnJvciA/Pz0gZSksXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sXG4gIH0pO1xuICBjb25zdCBjZHAgPSB3aW4ud2ViQ29udGVudHMuZGVidWdnZXI7XG5cbiAgdHJ5IHtcbiAgICB3aW4ud2ViQ29udGVudHMuc3RvcFBhaW50aW5nKCk7XG4gICAgd2luLndlYkNvbnRlbnRzLnNldEZyYW1lUmF0ZShmcHMpO1xuICAgIHdpbi53ZWJDb250ZW50cy5vbihcInBhaW50XCIsIHBhaW50KTtcbiAgICB3aW4ud2ViQ29udGVudHMuc3RhcnRQYWludGluZygpO1xuICAgIHNpZ25hbD8udGhyb3dJZkFib3J0ZWQoKTtcbiAgICBzaWduYWw/LmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCAoKSA9PiByZWplY3Rlcj8uKHNpZ25hbC5yZWFzb24pLCB7IG9uY2U6IHRydWUgfSk7XG4gICAgYXdhaXQgc3RhcnRTdGVnbyhjZHApO1xuICAgIGF3YWl0IG5ldyBQcm9taXNlPHZvaWQ+KChyLCBqKSA9PiB7XG4gICAgICBbcmVzb2x2ZXIsIHJlamVjdGVyXSA9IFtyLCBqXTtcbiAgICAgIGxldCBsYXN0V3JpdHRlbiA9IDA7XG4gICAgICBsZXQgc3R1Y2sgPSAwO1xuICAgICAgY2xlYXJTdHVja0NoZWNrID0gcGVyaW9kaWNhbChhc3luYyAoKSA9PiB7XG4gICAgICAgIGlmICh3cml0dGVuICE9PSBsYXN0V3JpdHRlbikge1xuICAgICAgICAgIGxhc3RXcml0dGVuID0gd3JpdHRlbjtcbiAgICAgICAgICBzdHVjayA9IDA7XG4gICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBzdHVjaysrO1xuICAgICAgICBpZiAoc3R1Y2sgPj0gZnBzKSB7XG4gICAgICAgICAgcmVqZWN0ZXI/LihuZXcgRXJyb3IoYHJlbmRlcmVyIHN0YWxsZWQgZm9yICR7TWF0aC5yb3VuZCgoc3R1Y2sgKiAxMDAwKSAvIGZwcyl9bXMgQCAke3dyaXR0ZW59YCkpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0dWNrID09PSAxIHx8IHN0dWNrID09PSBNYXRoLmZsb29yKGZwcyAvIDIpKSB7XG4gICAgICAgICAgYXdhaXQgcmVidWlsZERyYXdhYmxlKHdpbi53ZWJDb250ZW50cywgZnJhbWVTaXplKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfSwgMTAwMCAvIGZwcyk7XG4gICAgfSk7XG4gIH0gZmluYWxseSB7XG4gICAgY2xlYXJTdHVja0NoZWNrPy4oKTtcbiAgICB3aW4ud2ViQ29udGVudHMub2ZmKFwicGFpbnRcIiwgcGFpbnQpO1xuICAgIGF3YWl0IGRpc3Bvc2VXaW5kb3cod2luKTtcbiAgICBkaXNwb3NlQXVkaW8/LigpO1xuICAgIGF3YWl0IGVuY29kZXIuZmluaXNoKCk7XG4gICAgc2NyZWVuc2hvdHMgPSBhd2FpdCB0YWtlci5maW5pc2gobGFzdEZyYW1lKTtcbiAgfVxuXG4gIGlmIChlbmNvZGVFcnJvciB8fCB3cml0dGVuID09PSAwKSB7XG4gICAgdGhyb3cgZW5jb2RlRXJyb3IgPz8gbmV3IEVycm9yKFwibm8gZnJhbWVzIGNhcHR1cmVkXCIpO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGJsYW5rID0gYmxhbmtTdGF0cy5maW5hbGl6ZSgpO1xuICAgIGlmIChibGFuayA+PSBCTEFOS19XQVJOX1JBVElPKSB7XG4gICAgICBsb2dnZXIud2FybihUQUcsIGAke3NvdXJjZX0gYmxhbmstZnJhbWUgcmF0aW8gJHtNYXRoLnJvdW5kKGJsYW5rICogMTAwKX0lIOKAlCBwb3NzaWJsZSB3aGl0ZS9ibGFuayBzY3JlZW5gKTtcbiAgICB9XG4gICAgY29uc3QgeyBqYW5rIH0gPSBkcm9wU3RhdHMuZmluYWxpemUoKTtcbiAgICBpZiAoamFuayA+PSBKQU5LX1dBUk5fU0NPUkUpIHtcbiAgICAgIGxvZ2dlci53YXJuKFRBRywgYCR7c291cmNlfSBqYW5rIHNjb3JlICR7amFuay50b0ZpeGVkKDIpfSDigJQgZHJvcHBlZCBmcmFtZXNgKTtcbiAgICB9XG4gICAgcmV0dXJuIHsgd3JpdHRlbiwgb3V0RmlsZXMsIGJsYW5rLCBzY3JlZW5zaG90cywgamFuayB9O1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEx1IEFvIChsdWFvQGJpbGliaWxpLmNvbSkgb24gMjAyNi8wOC8yMS5cblxuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4uL2Jhc2UvbG9nZ2luZ1wiO1xuXG5jb25zdCBUQUcgPSBcIltSZXJlbmRlcl1cIjtcblxuZXhwb3J0IGNvbnN0IE1BWF9SRU5ERVJfQVRURU1QVFMgPSAzO1xuXG4vLyBBbnkgcmVuZGVyIGZhaWx1cmUgZWFybnMgYSBmcmVzaCB3aW5kb3crY29tcG9zaXRvciBhdHRlbXB0OyBhYm9ydHMgc3RpbGwgc3RvcCB0aGUgbG9vcC5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3aXRoUmVyZW5kZXI8VD4oc2lnbmFsOiBBYm9ydFNpZ25hbCwgYWN0aW9uOiAoKSA9PiBQcm9taXNlPFQ+KTogUHJvbWlzZTxUPiB7XG4gIGxldCBsYXN0RXJyOiB1bmtub3duO1xuICBmb3IgKGxldCBhdHRlbXB0ID0gMTsgYXR0ZW1wdCA8PSBNQVhfUkVOREVSX0FUVEVNUFRTOyBhdHRlbXB0KyspIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IGFjdGlvbigpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHNpZ25hbC50aHJvd0lmQWJvcnRlZCgpO1xuICAgICAgbGFzdEVyciA9IGU7XG4gICAgICBsb2dnZXIud2FybihUQUcsIGByZXRyeSAke2F0dGVtcHR9LyR7TUFYX1JFTkRFUl9BVFRFTVBUU306ICR7KGUgYXMgRXJyb3IpLm1lc3NhZ2V9YCk7XG4gICAgfVxuICB9XG4gIHRocm93IGxhc3RFcnI7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzAzLzEzLlxuXG4vLyBBIGNvbXBvc2l0ZSBoYW5kZWQgdG8gdGhlIGdhdGU6IHRoZSBzdGVnbyByb3cgdGltZXN0YW1wIGl0IG1hdGNoZWQgYW5kIGZ1bGwgQkdSQSBwaXhlbHMuXG5leHBvcnQgaW50ZXJmYWNlIENhcHR1cmVkRnJhbWUge1xuICB0czogbnVtYmVyO1xuICBwaXg6IEJ1ZmZlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGcmFtZUdhdGVPcHRpb25zIHtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIC8vIEhvdyBsb25nIHRvIHdhdGNoIGFmdGVyIHRoZSBmaXJzdCBtYXRjaCBiZWZvcmUgZmFsbGluZyBiYWNrIHRvIHRoZSBiYXNlbGluZSBmcmFtZS5cbiAgd2luZG93TXM6IG51bWJlcjtcbn1cblxuLy8gRmlyc3QgZnJhbWUgb25seTogaG9sZCB0aGUgZmlyc3QgbWF0Y2ggYXMgYmFzZWxpbmUgYW5kIGFjY2VwdCB0aGUgZmlyc3QgbGF0ZXIgY29tcG9zaXRlIHdob3NlIHBpeGVscyBkaWZmZXIgYXQgYWxsOyBleHBpcmVkKCkgY292ZXJzIGEgd2luZG93IHRoYXQgY2xvc2VkIHVuY2hhbmdlZC5cbmV4cG9ydCBjbGFzcyBGaXJzdEZyYW1lR2F0ZSB7XG4gIHByaXZhdGUgX2Jhc2VsaW5lOiBDYXB0dXJlZEZyYW1lIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIF9iYXNlbGluZUF0ID0gMDtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IF9vcHRzOiBGcmFtZUdhdGVPcHRpb25zKSB7fVxuXG4gIC8vIFRoZSBiYXNlbGluZSBmcmFtZTogdGhlIHBhZ2UncyB0cnVlIGZpcnN0IGZyYW1lIG9uY2UgdGhlIHdhdGNoIHdpbmRvdyBleHBpcmVkIHVuY2hhbmdlZC5cbiAgZ2V0IGJhc2VsaW5lKCk6IENhcHR1cmVkRnJhbWUgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9iYXNlbGluZTtcbiAgfVxuXG4gIC8vIFJldHVybnMgdGhlIGZyYW1lIHRvIGNhcHR1cmUgb25jZSBhIHJlYWwgZmlyc3QgcGFpbnQgc2hvd3MgdXAsIHVuZGVmaW5lZCB3aGlsZSBzdGlsbCB3YXRjaGluZy5cbiAgYWNjZXB0KGZyYW1lOiBDYXB0dXJlZEZyYW1lLCBub3c6IG51bWJlcik6IENhcHR1cmVkRnJhbWUgfCB1bmRlZmluZWQge1xuICAgIGlmICghdGhpcy5fYmFzZWxpbmUpIHtcbiAgICAgIHRoaXMuX2Jhc2VsaW5lID0gZnJhbWU7XG4gICAgICB0aGlzLl9iYXNlbGluZUF0ID0gbm93O1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIGhhc0RpZmYodGhpcy5fYmFzZWxpbmUucGl4LCBmcmFtZS5waXgsIHRoaXMuX29wdHMpID8gZnJhbWUgOiB1bmRlZmluZWQ7XG4gIH1cblxuICAvLyBUcnVlIG9uY2UgdGhlIHdpbmRvdyBhZnRlciB0aGUgZmlyc3QgbWF0Y2ggaGFzIHBhc3NlZCB3aXRob3V0IGFueSBkaWZmZXJpbmcgZnJhbWUuXG4gIGV4cGlyZWQobm93OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fYmFzZWxpbmUgIT09IHVuZGVmaW5lZCAmJiBub3cgLSB0aGlzLl9iYXNlbGluZUF0ID49IHRoaXMuX29wdHMud2luZG93TXM7XG4gIH1cbn1cblxuLy8gVHJ1ZSB3aGVuIGFueSBzYW1wbGVkIHBpeGVsIGRpZmZlcnMgYmV0d2VlbiB0d28gQkdSQSBmcmFtZXM7IGV4aXRzIGF0IHRoZSBmaXJzdCBkaWZmZXJlbmNlIGZvdW5kLlxuZnVuY3Rpb24gaGFzRGlmZihhOiBCdWZmZXIsIGI6IEJ1ZmZlciwgc2l6ZTogeyB3aWR0aDogbnVtYmVyOyBoZWlnaHQ6IG51bWJlciB9KTogYm9vbGVhbiB7XG4gIGZvciAobGV0IHkgPSAwOyB5IDwgc2l6ZS5oZWlnaHQ7IHkgKz0gNCkge1xuICAgIGNvbnN0IHJvdyA9IHkgKiBzaXplLndpZHRoICogNDtcbiAgICBmb3IgKGxldCB4ID0gMDsgeCA8IHNpemUud2lkdGg7IHggKz0gNCkge1xuICAgICAgY29uc3QgaSA9IHJvdyArIHggKiA0O1xuICAgICAgaWYgKGFbaV0gIT09IGJbaV0gfHwgYVtpICsgMV0gIT09IGJbaSArIDFdIHx8IGFbaSArIDJdICE9PSBiW2kgKyAyXSB8fCBhW2kgKyAzXSAhPT0gYltpICsgM10pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDUvMTguXG5cbmltcG9ydCB0eXBlIHsgV2ViRnJhbWVNYWluIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi4vLi4vYmFzZS9sb2dnaW5nXCI7XG5pbXBvcnQgeyBhYm9ydGFibGUgfSBmcm9tIFwiLi4vLi4vYmFzZS90aW1pbmdcIjtcblxuY29uc3QgVEFHID0gXCJbVmlkZW9dXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWR2YW5jZU9wdGlvbnMge1xuICBmcmFtZTogV2ViRnJhbWVNYWluIHwgdW5kZWZpbmVkO1xuICB0aW1lc3RhbXBNczogbnVtYmVyO1xuICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbn1cblxuLy8gT25seSB0aGUgZGV0ZXJtaW5pc3RpYyByZW5kZXJlciAoc2hvb3QpIGRyaXZlcyB0aGlzOyByZWFsLXRpbWUgdmlkZW9zIHNlbGYtdGljayB2aWEgckFGIGluIHRoZSBwYWdlLlxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFkdmFuY2VWaWRlb3MoeyBmcmFtZSwgdGltZXN0YW1wTXMsIHNpZ25hbCB9OiBBZHZhbmNlT3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICBpZiAoIWZyYW1lPy51cmwpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgc2lnbmFsPy50aHJvd0lmQWJvcnRlZCgpO1xuICB0cnkge1xuICAgIGF3YWl0IGFib3J0YWJsZShcbiAgICAgIGZyYW1lLmV4ZWN1dGVKYXZhU2NyaXB0KFxuICAgICAgICBgd2luZG93Ll9fcHVwX3ZpZGVvX18mJihhc3luYygpPT57YXdhaXQgX19wdXBfdmlkZW9fXy5yZWFkeSgpO2F3YWl0IF9fcHVwX3ZpZGVvX18uYWR2YW5jZSgke3RpbWVzdGFtcE1zfSl9KSgpYCxcbiAgICAgICksXG4gICAgICBzaWduYWwsXG4gICAgKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHNpZ25hbD8udGhyb3dJZkFib3J0ZWQoKTtcbiAgICBsb2dnZXIud2FybihUQUcsIGBhZHZhbmNlIHNraXBwZWQ6ICR7ZSBpbnN0YW5jZW9mIEVycm9yID8gZS5tZXNzYWdlIDogU3RyaW5nKGUpfWApO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA0LzAxLlxuXG5pbXBvcnQgeyB3aXRoVGltZW91dCB9IGZyb20gXCIuLi9iYXNlL3RpbWluZ1wiO1xuaW1wb3J0IHsgdHlwZSBBZHZhbmNlT3B0aW9ucywgYWR2YW5jZVZpZGVvcyB9IGZyb20gXCIuL3ZpZGVvL2FkdmFuY2VcIjtcblxuZXhwb3J0IGNvbnN0IFRJQ0tfU1lNQk9MID0gXCJfX3B1cF90aWNrX19cIjtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRpY2soYXJnczogQWR2YW5jZU9wdGlvbnMpIHtcbiAgY29uc3QgeyBmcmFtZSwgdGltZXN0YW1wTXMgfSA9IGFyZ3M7XG4gIGlmICghZnJhbWUpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgZXhwciA9IGB3aW5kb3cuJHtUSUNLX1NZTUJPTH0mJndpbmRvdy4ke1RJQ0tfU1lNQk9MfS5wcm9jZXNzKCR7dGltZXN0YW1wTXN9KWA7XG4gIGNvbnN0IHRpY2tFdiA9IGZyYW1lLmV4ZWN1dGVKYXZhU2NyaXB0KGV4cHIpO1xuICBhd2FpdCBQcm9taXNlLmFsbChbd2l0aFRpbWVvdXQodGlja0V2LCA1XzAwMCwgXCJ0aWNrLmV4ZWN1dGVKYXZhU2NyaXB0XCIpLCBhZHZhbmNlVmlkZW9zKGFyZ3MpXSk7XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA2LzIzLlxuXG5pbXBvcnQgeyBEZW11eGVyLCB0eXBlIERlbXV4ZXJPcHRpb25zIH0gZnJvbSBcIm5vZGUtYXYvYXBpXCI7XG5cbi8vIGZmbXBlZyByZWFkL3dyaXRlIGRlYWRsaW5lICjCtXMpOyBhIGJsb2NraW5nIG9wZW4gaWdub3JlcyBBYm9ydFNpZ25hbCwgc28gdGhpcyBib3VuZHMgYSBzdHVjayBDRE4uXG5jb25zdCBSV19USU1FT1VUX1VTID0gXCI4MDAwMDAwXCI7XG5cbi8vIGZmbXBlZyBvcGVucyBodHRwL2h0dHBzIHdpdGggbmF0aXZlIGJ5dGUtcmFuZ2UgcmVxdWVzdHMsIHNvIG9ubHkgdGhlIGRlY29kZWQgcmFuZ2VzIGRvd25sb2FkLlxuZXhwb3J0IGZ1bmN0aW9uIG9wZW5JbnB1dChzcmM6IHN0cmluZywgc2lnbmFsPzogQWJvcnRTaWduYWwpOiBQcm9taXNlPERlbXV4ZXI+IHtcbiAgY29uc3Qgb3B0aW9uczogRGVtdXhlck9wdGlvbnMgPSB7IHNpZ25hbCwgb3B0aW9uczogeyByd190aW1lb3V0OiBSV19USU1FT1VUX1VTIH0gfTtcbiAgcmV0dXJuIERlbXV4ZXIub3BlbihzcmMsIG9wdGlvbnMpO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNi8yNS5cblxuaW1wb3J0IHR5cGUgeyBGcmFtZSB9IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQgeyBEZWNvZGVyLCBGaWx0ZXJBUEkgfSBmcm9tIFwibm9kZS1hdi9hcGlcIjtcbmltcG9ydCB7IEFWTUVESUFfVFlQRV9WSURFTywgQVZTRUVLX0ZMQUdfQkFDS1dBUkQgfSBmcm9tIFwibm9kZS1hdi9jb25zdGFudHNcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuLi8uLi9iYXNlL2xvZ2dpbmdcIjtcbmltcG9ydCB0eXBlIHsgVmlkZW9NZXRhIH0gZnJvbSBcIi4vZnJhbWVfc2VydmVyXCI7XG5pbXBvcnQgeyBvcGVuSW5wdXQgfSBmcm9tIFwiLi9vcGVuXCI7XG5cbmNvbnN0IFRBRyA9IFwiW0RlY29kZV1cIjtcblxuZXhwb3J0IGludGVyZmFjZSBEZWNvZGVkRnJhbWUge1xuICBpZHg6IG51bWJlcjtcbiAgYnVmOiBCdWZmZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGVjb2RlRnJhbWVzT3B0aW9ucyB7XG4gIHNyYzogc3RyaW5nO1xuICBtZXRhOiBWaWRlb01ldGE7XG4gIHNpZ25hbDogQWJvcnRTaWduYWw7XG4gIC8qKiAxLWJhc2VkIGNvbnRlbnQgZnJhbWUgdG8gcmVzdW1lIGRlY29kaW5nIGZyb207IGEgZmFpbGVkIHNlZWsgZmFsbHMgYmFjayB0byBkZWNvZGluZyB0aGUgd2hvbGUgaGVhZC4gKi9cbiAgZnJvbUlkeD86IG51bWJlcjtcbn1cblxuLy8gRGVjb2RlIGEgc291cmNlIHRvIGZwcy1yZXNhbXBsZWQsIGRpc3BsYXktc2NhbGVkLCB0aWdodC1SR0JBIGZyYW1lcyAoaWR4ID0gMS1iYXNlZCBjb250ZW50IHBvc2l0aW9uIHBhc3QgdGhlIGxlYWQgZ2FwKS4gQ29uc3VtZXIgYmFja3ByZXNzdXJlIGlzIGp1c3QgcHVsbGluZyBzbG93ZXIuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24qIGRlY29kZUZyYW1lcyh7IHNyYywgbWV0YSwgc2lnbmFsLCBmcm9tSWR4IH06IERlY29kZUZyYW1lc09wdGlvbnMpOiBBc3luY0dlbmVyYXRvcjxEZWNvZGVkRnJhbWU+IHtcbiAgYXdhaXQgdXNpbmcgaW5wdXQgPSBhd2FpdCBvcGVuSW5wdXQoc3JjLCBzaWduYWwpO1xuICBsZXQgcmVzdW1lQXQ6IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgaWYgKGZyb21JZHggIT09IHVuZGVmaW5lZCAmJiBmcm9tSWR4ID4gMSkge1xuICAgIGNvbnN0IHRhcmdldCA9IG1ldGEubGVhZEdhcCArIChmcm9tSWR4IC0gMSkgLyBtZXRhLmZwcztcbiAgICBpZiAoKGF3YWl0IGlucHV0LnNlZWsodGFyZ2V0LCAtMSwgQVZTRUVLX0ZMQUdfQkFDS1dBUkQpKSA9PT0gMCkge1xuICAgICAgcmVzdW1lQXQgPSBmcm9tSWR4O1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2dnZXIud2FybihUQUcsIGBzZWVrIHRvIGZyYW1lICR7ZnJvbUlkeH0gZmFpbGVkLCBkZWNvZGluZyBmcm9tIGhlYWRgKTtcbiAgICB9XG4gIH1cbiAgY29uc3Qgc3RyZWFtID0gaW5wdXQuc3RyZWFtcz8uZmluZCgocykgPT4gcy5jb2RlY3Bhci5jb2RlY1R5cGUgPT09IEFWTUVESUFfVFlQRV9WSURFTyk7XG4gIGlmICghc3RyZWFtKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwibm8gdmlkZW8gc3RyZWFtXCIpO1xuICB9XG4gIC8vIFNvZnR3YXJlIGRlY29kZSB3aXRoIGF1dG8tZGV0ZWN0ZWQgdGhyZWFkcyAoZmZtcGVnJ3MgZGVmYXVsdCBvZiAxIGxlYXZlcyBtb3N0IGNvcmVzIGlkbGUgb24gMTA4MHApLlxuICB1c2luZyBkZWMgPSBhd2FpdCBEZWNvZGVyLmNyZWF0ZShzdHJlYW0sIHsgc2lnbmFsLCB0aHJlYWRDb3VudDogMCB9KTtcbiAgY29uc3QgeyBmcmFtZVdpZHRoLCBmcmFtZUhlaWdodCwgd2lkdGgsIGhlaWdodCwgZnBzIH0gPSBtZXRhO1xuICBjb25zdCBzY2FsZSA9IGZyYW1lV2lkdGggIT09IHdpZHRoIHx8IGZyYW1lSGVpZ2h0ICE9PSBoZWlnaHQgPyBgc2NhbGU9JHtmcmFtZVdpZHRofToke2ZyYW1lSGVpZ2h0fSxgIDogXCJcIjtcbiAgLy8gT2RkIG5hdGl2ZSB3aWR0aHMgKDE5MjIgZXRjKSBoYXZlIG5vIE5FT04gc3dzY2FsZSBwYXRoOyBwYWQtcmlnaHQgdG8gMTYtYWxpZ25lZCBhbmQgdHJpbSBpbiBwYWNrUmdiYS5cbiAgY29uc3QgYWxpZ24gPSAobjogbnVtYmVyKTogbnVtYmVyID0+IE1hdGguY2VpbChuIC8gMTYpICogMTY7XG4gIGNvbnN0IHBhZCA9XG4gICAgc2NhbGUgPT09IFwiXCIgJiYgKGZyYW1lV2lkdGggJSAxNiAhPT0gMCB8fCBmcmFtZUhlaWdodCAlIDE2ICE9PSAwKVxuICAgICAgPyBgcGFkPSR7YWxpZ24oZnJhbWVXaWR0aCl9OiR7YWxpZ24oZnJhbWVIZWlnaHQpfTowOjAsYFxuICAgICAgOiBcIlwiO1xuICB1c2luZyBmaWx0ZXIgPSBGaWx0ZXJBUEkuY3JlYXRlKGBmcHM9JHtmcHN9LCR7c2NhbGV9JHtwYWR9Zm9ybWF0PXJnYmFgLCB7IHNpZ25hbCB9KTtcbiAgbGV0IGsgPSAwO1xuICBsZXQgcHJldksgPSAwO1xuICBmb3IgYXdhaXQgKHVzaW5nIGZyYW1lIG9mIGZpbHRlci5mcmFtZXMoZGVjLmZyYW1lcyhpbnB1dC5wYWNrZXRzKHN0cmVhbS5pbmRleCkpKSkge1xuICAgIGlmICghZnJhbWUpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAocmVzdW1lQXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgdGIgPSBmcmFtZS50aW1lQmFzZS5udW0gLyBmcmFtZS50aW1lQmFzZS5kZW47XG4gICAgICBjb25zdCB0cyA9IGZyYW1lLmJlc3RFZmZvcnRUaW1lc3RhbXAgPz8gZnJhbWUucHRzO1xuICAgICAgaWYgKHRzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCBhdCA9IE1hdGgucm91bmQoKE51bWJlcih0cykgKiB0YiAtIG1ldGEubGVhZEdhcCkgKiBtZXRhLmZwcykgKyAxO1xuICAgICAgaWYgKGF0IDwgcHJldkspIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBwcmV2SyA9IGF0O1xuICAgICAgaWYgKGF0IDwgcmVzdW1lQXQpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBrID0gYXQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGsrKztcbiAgICB9XG4gICAgeWllbGQgeyBpZHg6IGssIGJ1ZjogcGFja1JnYmEoZnJhbWUsIGZyYW1lV2lkdGgsIGZyYW1lSGVpZ2h0KSB9O1xuICB9XG59XG5cbi8vIFRpZ2h0IFJHQkEgb2YgdGhlIHRvcC1sZWZ0IG91dFfDl291dEggcmVnaW9uIChkcm9wcyBsaWJhdiByb3cgcGFkZGluZyBhbmQgYW55IHBhZC1yaWdodC9ib3R0b20gcGxhbmVzKS5cbmZ1bmN0aW9uIHBhY2tSZ2JhKGZyYW1lOiBGcmFtZSwgb3V0VzogbnVtYmVyLCBvdXRIOiBudW1iZXIpOiBCdWZmZXIge1xuICBjb25zdCByb3cgPSBvdXRXICogNDtcbiAgY29uc3Qgc3RyaWRlID0gZnJhbWUubGluZXNpemVbMF0hO1xuICBjb25zdCBzcmMgPSBmcmFtZS5kYXRhIVswXSE7XG4gIGlmIChzdHJpZGUgPT09IHJvdyAmJiBmcmFtZS5oZWlnaHQgPT09IG91dEgpIHtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20oc3JjLnN1YmFycmF5KDAsIHJvdyAqIG91dEgpKTtcbiAgfVxuICBjb25zdCBvdXQgPSBCdWZmZXIuYWxsb2NVbnNhZmUocm93ICogb3V0SCk7XG4gIGZvciAobGV0IHkgPSAwOyB5IDwgb3V0SDsgeSsrKSB7XG4gICAgc3JjLmNvcHkob3V0LCB5ICogcm93LCB5ICogc3RyaWRlLCB5ICogc3RyaWRlICsgcm93KTtcbiAgfVxuICByZXR1cm4gb3V0O1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wOS8wMi5cblxuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4uLy4uL2Jhc2UvbG9nZ2luZ1wiO1xuaW1wb3J0IHsgZGVjb2RlRnJhbWVzIH0gZnJvbSBcIi4vZGVjb2RlXCI7XG5pbXBvcnQgdHlwZSB7IFZpZGVvTWV0YSB9IGZyb20gXCIuL2ZyYW1lX3NlcnZlclwiO1xuXG5jb25zdCBUQUcgPSBcIltEZWNvZGVTZXNzaW9uXVwiO1xuY29uc3QgREVDT0RFX0FIRUFEID0gNDsgLy8gZGVjb2RlIGEgZmV3IGZyYW1lcyBwYXN0IHRoZSBoaWdoZXN0IHJlcXVlc3Q7IHRoZSBwYWdlIGFscmVhZHkgcHJlZmV0Y2hlc1xuY29uc3QgS0VFUF9CRUhJTkQgPSAxNjsgLy8gbWluIGZyYW1lcyBoZWxkIGJlaGluZCB0aGUgaGVhZDsgbXVzdCBleGNlZWQgdGhlIHBhZ2UncyBwcmVmZXRjaCBsZWFkXG5jb25zdCBNRU1PUllfQlVER0VUID0gMjU2ICogMTAyNCAqIDEwMjQ7IC8vIGRlY29kZWQtZnJhbWUgYnVkZ2V0IHBlciBzZXNzaW9uOiBhIHNtYWxsIGxvb3AgcmUtc2VydmVzIGZyb20gbWVtb3J5XG5jb25zdCBNQVhfUEFTU19SRVRSWSA9IDM7IC8vIHJlLW9wZW4gYSBzdHJlYW1lZCBzb3VyY2UgdGhpcyBtYW55IHRpbWVzIG9uIGEgdHJhbnNpZW50IGRlY29kZSBlcnJvciBiZWZvcmUgRU9GXG5cbi8vIEEgc291cmNlIHBsYXlzIG9uIGl0cyBvd24gY2xvY2s6IHRoZSBwdW1wIGZpbGxzIGEgZnJhbWUgc3RvcmUgYWhlYWQgb2YgZGVtYW5kOyBnZXRGcmFtZSB3YWl0cyBmb3IgaXRzIGZyYW1lLlxuaW50ZXJmYWNlIEZyYW1lV2FpdGVyIHtcbiAgaWR4OiBudW1iZXI7XG4gIHJlc29sdmU6ICh3YWtlOiBcIndha2VcIiB8IFwiY2FuY2VsXCIpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBjbGFzcyBEZWNvZGVTZXNzaW9uIHtcbiAgcHJpdmF0ZSBfYnVmID0gbmV3IE1hcDxudW1iZXIsIEJ1ZmZlcj4oKTtcbiAgcHJpdmF0ZSBfcmVhZHkgPSAwO1xuICBwcml2YXRlIF93YW50ID0gMTtcbiAgcHJpdmF0ZSBfZG9uZSA9IGZhbHNlO1xuICBwcml2YXRlIF9jbG9zZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfZ2VuID0gMDtcbiAgcHJpdmF0ZSBfY3RybCA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgcHJpdmF0ZSBfcmVzdW1lOiAoKCkgPT4gdm9pZCkgfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgX3Jlc3RhcnQ6ICgoKSA9PiB2b2lkKSB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSByZWFkb25seSBfd2FpdGVycyA9IG5ldyBTZXQ8RnJhbWVXYWl0ZXI+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xlYWRGcmFtZXM6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfa2VlcENvdW50OiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3NlZWtKdW1wOiBudW1iZXI7XG4gIHByaXZhdGUgX3NlZWtUbz86IG51bWJlcjtcbiAgcHJpdmF0ZSBfcGFzc0Zyb20gPSAxO1xuICBwcml2YXRlIHJlYWRvbmx5IF9wdW1wRG9uZTogUHJvbWlzZTx2b2lkPjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICByZWFkb25seSBtZXRhOiBWaWRlb01ldGEsXG4gICAgcHJpdmF0ZSByZWFkb25seSBfc3JjOiBzdHJpbmcsXG4gICkge1xuICAgIHRoaXMuX2xlYWRGcmFtZXMgPSBNYXRoLnJvdW5kKG1ldGEubGVhZEdhcCAqIG1ldGEuZnBzKTtcbiAgICB0aGlzLl9rZWVwQ291bnQgPSBNYXRoLm1heChLRUVQX0JFSElORCwgTWF0aC5mbG9vcihNRU1PUllfQlVER0VUIC8gKG1ldGEuZnJhbWVXaWR0aCAqIG1ldGEuZnJhbWVIZWlnaHQgKiA0KSkpO1xuICAgIHRoaXMuX3NlZWtKdW1wID0gTWF0aC5tYXgoMiAqIG1ldGEuZnBzLCBERUNPREVfQUhFQUQgKiAyKTtcbiAgICB0aGlzLl9wdW1wRG9uZSA9IHRoaXMucHVtcCgpO1xuICB9XG5cbiAgLy8gV2FpdHMgZm9yIHRoZSBmcmFtZSB0byBsYW5kOiBwYWludHMgcGFjZSB0aGUgdmlydHVhbCBjbG9jaywgc28gc3RhbGwgaW5zdGVhZCBvZiBwYWludGluZyBibGFjay5cbiAgYXN5bmMgZ2V0RnJhbWUocmF3OiBudW1iZXIpOiBQcm9taXNlPEJ1ZmZlciB8IHVuZGVmaW5lZD4ge1xuICAgIGNvbnN0IGlkeCA9IHJhdyA8PSB0aGlzLl9sZWFkRnJhbWVzID8gdGhpcy5fbGVhZEZyYW1lcyArIDEgOiByYXc7IC8vIGhvbGQgdGhlIGZpcnN0IGZyYW1lIGFjcm9zcyB0aGUgbGVhZFxuICAgIGZvciAoOzspIHtcbiAgICAgIGNvbnN0IGhpdCA9IHRoaXMuX2J1Zi5nZXQoaWR4KTtcbiAgICAgIGlmIChoaXQpIHtcbiAgICAgICAgcmV0dXJuIGhpdDtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLl9jbG9zZWQpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLl9kb25lICYmIGlkeCA+IHRoaXMuX3JlYWR5KSB7XG4gICAgICAgIHJldHVybiBCdWZmZXIuYWxsb2MoMCk7IC8vIGJleW9uZCBlbmQgb2Ygc3RyZWFtXG4gICAgICB9XG4gICAgICB0aGlzLl93YW50ID0gTWF0aC5tYXgodGhpcy5fd2FudCwgaWR4KTtcbiAgICAgIGlmICh0aGlzLm11c3RSZXBvaW50KGlkeCkpIHtcbiAgICAgICAgdGhpcy5yZXF1ZXN0UmVzdGFydChpZHgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy53YWtlKCk7XG4gICAgICB9XG4gICAgICBpZiAoKGF3YWl0IHRoaXMud2FpdEV2ZW50KGlkeCkpID09PSBcImNhbmNlbFwiKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7IC8vIHN0YWxlIGRlbWFuZCBkcm9wcGVkIGJ5IGEgcmVzdGFydCAoc2VlIHJlcXVlc3RSZXN0YXJ0KVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbXVzdFJlcG9pbnQoaWR4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5fc2Vla1RvICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIEEgcmUtcG9pbnQgaXMgcXVldWVkIGJ1dCBub3Qgc3RhcnRlZDogb25seSBhIGxvd2VyIHRhcmdldCBtYXkgZGlzcGxhY2UgaXQsIG9yIHdhaXRlcnMgYm91bmNlIGZvcmV2ZXIuXG4gICAgICByZXR1cm4gaWR4IDwgdGhpcy5fc2Vla1RvO1xuICAgIH1cbiAgICBjb25zdCBmcm9tID0gdGhpcy5fcGFzc0Zyb207XG4gICAgcmV0dXJuIGlkeCA8IGZyb20gfHwgaWR4IDw9IHRoaXMuX3JlYWR5IHx8IGlkeCA+IE1hdGgubWF4KHRoaXMuX3JlYWR5LCBmcm9tKSArIHRoaXMuX3NlZWtKdW1wO1xuICB9XG5cbiAgYXN5bmMgY2xvc2UoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5fY2xvc2VkID0gdHJ1ZTtcbiAgICB0aGlzLl9kb25lID0gdHJ1ZTtcbiAgICB0aGlzLl9jdHJsLmFib3J0KCk7XG4gICAgdGhpcy5yZXF1ZXN0UmVzdGFydCgpO1xuICAgIHRoaXMuX2J1Zi5jbGVhcigpO1xuICAgIGF3YWl0IHRoaXMuX3B1bXBEb25lO1xuICB9XG5cbiAgcHJpdmF0ZSB3YWtlKCk6IHZvaWQge1xuICAgIGNvbnN0IHIgPSB0aGlzLl9yZXN1bWU7XG4gICAgdGhpcy5fcmVzdW1lID0gdW5kZWZpbmVkO1xuICAgIHI/LigpO1xuICB9XG5cbiAgcHJpdmF0ZSB3YWl0RXZlbnQoaWR4OiBudW1iZXIpOiBQcm9taXNlPFwid2FrZVwiIHwgXCJjYW5jZWxcIj4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTxcIndha2VcIiB8IFwiY2FuY2VsXCI+KChyZXNvbHZlKSA9PiB0aGlzLl93YWl0ZXJzLmFkZCh7IGlkeCwgcmVzb2x2ZSB9KSk7XG4gIH1cblxuICAvLyBCcm9hZGNhc3QgZGVjb2RlIHByb2dyZXNzIChmcmFtZSBzdG9yZWQgLyBwYXNzIGRvbmUgLyByZXN0YXJ0IC8gY2xvc2UpIHRvIHdhaXRpbmcgZ2V0RnJhbWVzLlxuICBwcml2YXRlIHNpZ25hbCgpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IHcgb2YgdGhpcy5fd2FpdGVycykge1xuICAgICAgdy5yZXNvbHZlKFwid2FrZVwiKTtcbiAgICB9XG4gICAgdGhpcy5fd2FpdGVycy5jbGVhcigpO1xuICB9XG5cbiAgcHJpdmF0ZSByZXF1ZXN0UmVzdGFydCh0YXJnZXQ/OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9zZWVrVG8gPSB0YXJnZXQ7XG4gICAgdGhpcy5fZ2VuKys7XG4gICAgLy8gRHJvcCB3YWl0ZXJzIGEgcmVzdGFydCBsZWF2ZXMgZmFyIGJlaGluZDogdGhleSBvbmx5IHJlLXJhaXNlIF93YW50IGFuZCBkcmFnIHRoZSBwYXNzIHRvIHRoZSB0YWlsLlxuICAgIGlmICh0YXJnZXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZm9yIChjb25zdCB3IG9mIHRoaXMuX3dhaXRlcnMpIHtcbiAgICAgICAgaWYgKHcuaWR4ID4gdGFyZ2V0ICsgdGhpcy5fa2VlcENvdW50KSB7XG4gICAgICAgICAgdGhpcy5fd2FpdGVycy5kZWxldGUodyk7XG4gICAgICAgICAgdy5yZXNvbHZlKFwiY2FuY2VsXCIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHIgPSB0aGlzLl9yZXN0YXJ0O1xuICAgIHRoaXMuX3Jlc3RhcnQgPSB1bmRlZmluZWQ7XG4gICAgcj8uKCk7XG4gICAgdGhpcy53YWtlKCk7XG4gICAgdGhpcy5zaWduYWwoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcHVtcCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBsZXQgZmFpbHMgPSAwO1xuICAgIHdoaWxlICghdGhpcy5fY2xvc2VkKSB7XG4gICAgICBjb25zdCBnZW4gPSB0aGlzLl9nZW47XG4gICAgICB0aGlzLl9yZWFkeSA9IDA7XG4gICAgICB0aGlzLl9kb25lID0gZmFsc2U7XG4gICAgICB0aGlzLl9idWYuY2xlYXIoKTtcbiAgICAgIGxldCBmYWlsZWQgPSBmYWxzZTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHRoaXMuZGVjb2RlUGFzcyhnZW4pO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBpZiAoIXRoaXMuX2Nsb3NlZCAmJiB0aGlzLl9nZW4gPT09IGdlbikge1xuICAgICAgICAgIGZhaWxlZCA9IHRydWU7XG4gICAgICAgICAgbG9nZ2VyLndhcm4oXG4gICAgICAgICAgICBUQUcsXG4gICAgICAgICAgICBgWyR7dGhpcy5tZXRhLmlkLnNsaWNlKDAsIDgpfV0gZGVjb2RlIHBhc3MgZmFpbGVkOiAke2UgaW5zdGFuY2VvZiBFcnJvciA/IGUubWVzc2FnZSA6IFN0cmluZyhlKX1gLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLl9jbG9zZWQpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5fZ2VuICE9PSBnZW4pIHtcbiAgICAgICAgZmFpbHMgPSAwO1xuICAgICAgICBjb250aW51ZTsgLy8gcmVzdGFydCByZXF1ZXN0ZWQgbWlkLXBhc3NcbiAgICAgIH1cbiAgICAgIC8vIEEgdGhyb3duIHBhc3MgaXMgYSB0cmFuc2llbnQgc291cmNlIGVycm9yIChlLmcuIGEgc3RyZWFtZWQgbG9vcCByZS1vcGVuKTsgcmV0cnksIGVsc2UgRU9GIHdvdWxkIGJsYW5rIHRoZSBmcmFtZS5cbiAgICAgIGlmIChmYWlsZWQgJiYgKytmYWlscyA8PSBNQVhfUEFTU19SRVRSWSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGZhaWxzID0gMDtcbiAgICAgIHRoaXMuX2RvbmUgPSB0cnVlO1xuICAgICAgdGhpcy5zaWduYWwoKTtcbiAgICAgIGF3YWl0IHRoaXMudW50aWxSZXN0YXJ0KCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBkZWNvZGVQYXNzKGdlbjogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gQSBzZWVrIHdob3NlIHRhcmdldCBvdmVyc2hvb3RzIHRoZSBsYXN0IGZyYW1lIHlpZWxkcyBub3RoaW5nOyBvbmUgcmV0cnkgZnJvbSBoZWFkIGJlYXRzIGEgZmFsc2UgRU9GLlxuICAgIGZvciAobGV0IGF0dGVtcHQgPSAwOyBhdHRlbXB0IDwgMjsgYXR0ZW1wdCsrKSB7XG4gICAgICBjb25zdCBmcm9tID0gdGhpcy5fc2Vla1RvOyAvLyByZXN0YXJ0IHRhcmdldCBpbiBwYWdlLWZyYW1lIHNwYWNlIChsZWFkIGluY2x1ZGVkKVxuICAgICAgdGhpcy5fc2Vla1RvID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fcGFzc0Zyb20gPSBmcm9tID8/IDE7XG4gICAgICB0aGlzLl93YW50ID0gZnJvbSA/PyAxOyAvLyBhIGZyZXNoIHBhc3MgcGFjZXMgb2ZmIGl0cyBvd24gc3RhcnQsIG5vdCB0aGUgcHJldmlvdXMgcGFzcydzIHRhaWwgZGVtYW5kXG4gICAgICAvLyBkZWNvZGVGcmFtZXMgY291bnRzIHBvc3QtbGVhZCBjb250ZW50IGZyYW1lcywgc28gYSBwYWdlLWtleSB0YXJnZXQgbG9zZXMgdGhlIGxlYWQgb2Zmc2V0LlxuICAgICAgY29uc3QgY29udGVudEZyb20gPSBmcm9tID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBNYXRoLm1heCgxLCBmcm9tIC0gdGhpcy5fbGVhZEZyYW1lcyk7XG4gICAgICBjb25zdCBzdHJlYW0gPSBkZWNvZGVGcmFtZXMoeyBzcmM6IHRoaXMuX3NyYywgbWV0YTogdGhpcy5tZXRhLCBzaWduYWw6IHRoaXMuX2N0cmwuc2lnbmFsLCBmcm9tSWR4OiBjb250ZW50RnJvbSB9KTtcbiAgICAgIGxldCBzdG9yZWQgPSAwO1xuICAgICAgZm9yIGF3YWl0IChjb25zdCB7IGlkeCwgYnVmIH0gb2Ygc3RyZWFtKSB7XG4gICAgICAgIGlmICh0aGlzLl9jbG9zZWQgfHwgdGhpcy5fZ2VuICE9PSBnZW4pIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYXQgPSB0aGlzLl9sZWFkRnJhbWVzICsgaWR4OyAvLyBtYXAgZGVjb2RlIHBvc2l0aW9uIHBhc3QgdGhlIGhlbGQgbGVhZC1nYXAgZnJhbWVzXG4gICAgICAgIHdoaWxlICghdGhpcy5fY2xvc2VkICYmIHRoaXMuX2dlbiA9PT0gZ2VuICYmIGF0ID4gdGhpcy5fd2FudCArIERFQ09ERV9BSEVBRCkge1xuICAgICAgICAgIGF3YWl0IHRoaXMucGF1c2UoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5fY2xvc2VkIHx8IHRoaXMuX2dlbiAhPT0gZ2VuKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2J1Zi5zZXQoYXQsIGJ1Zik7XG4gICAgICAgIHRoaXMuX3JlYWR5ID0gYXQ7XG4gICAgICAgIHRoaXMuZXZpY3QoKTtcbiAgICAgICAgdGhpcy5zaWduYWwoKTtcbiAgICAgICAgc3RvcmVkKys7XG4gICAgICB9XG4gICAgICBpZiAoYXR0ZW1wdCA9PT0gMCAmJiBzdG9yZWQgPT09IDAgJiYgY29udGVudEZyb20gIT09IHVuZGVmaW5lZCAmJiAhdGhpcy5fY2xvc2VkICYmIHRoaXMuX2dlbiA9PT0gZ2VuKSB7XG4gICAgICAgIGNvbnRpbnVlOyAvLyBzZWVrIGxhbmRlZCBwYXN0IHRoZSBsYXN0IGZyYW1lOiByZS1kZWNvZGUgZnJvbSBoZWFkXG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBwYXVzZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHIpID0+IHtcbiAgICAgIHRoaXMuX3Jlc3VtZSA9IHI7XG4gICAgfSk7XG4gIH1cblxuICAvLyBQYXJrIHVudGlsIGEgbG9vcC9iYWNrd2FyZCByZXF1ZXN0IChvciBjbG9zZSkgY2FsbHMgcmVxdWVzdFJlc3RhcnQoKS5cbiAgcHJpdmF0ZSB1bnRpbFJlc3RhcnQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyKSA9PiB7XG4gICAgICB0aGlzLl9yZXN0YXJ0ID0gcjtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZXZpY3QoKTogdm9pZCB7XG4gICAgY29uc3QgZmxvb3IgPSB0aGlzLl9yZWFkeSAtIHRoaXMuX2tlZXBDb3VudDtcbiAgICBmb3IgKGNvbnN0IGsgb2YgdGhpcy5fYnVmLmtleXMoKSkge1xuICAgICAgaWYgKGsgPCBmbG9vcikge1xuICAgICAgICB0aGlzLl9idWYuZGVsZXRlKGspO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wNS8xOC5cblxuaW1wb3J0IHsgRGVjb2RlciB9IGZyb20gXCJub2RlLWF2L2FwaVwiO1xuaW1wb3J0IHsgQVZNRURJQV9UWVBFX1ZJREVPIH0gZnJvbSBcIm5vZGUtYXYvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBvcGVuSW5wdXQgfSBmcm9tIFwiLi9vcGVuXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJvYmVSZXN1bHQge1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgZHVyYXRpb246IG51bWJlcjtcbiAgLyoqIFBUUyAocykgb2YgdGhlIGZpcnN0IGRlY29kYWJsZSBmcmFtZTsgYSBjb3JydXB0L2VtcHR5IGxlYWRpbmcgcnVuIGlzIGhlbGQgb24gaXQsIGxpa2UgQ2hyb21lLiAqL1xuICBsZWFkR2FwOiBudW1iZXI7XG59XG5cbi8vIE5vIHdhbGwtY2xvY2sgY2FwOiBvcGVuSW5wdXQncyBwZXItcmVhZCByd190aW1lb3V0IGJvdW5kcyBhIHN0dWNrIHNvdXJjZSwgYW5kIHRoZSBjYWxsZXIgcmV0cmllcyBvbiB0aHJvdy5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm9iZShzcmM6IHN0cmluZyk6IFByb21pc2U8UHJvYmVSZXN1bHQ+IHtcbiAgYXdhaXQgdXNpbmcgZCA9IGF3YWl0IG9wZW5JbnB1dChzcmMpO1xuICBjb25zdCBzdHJlYW0gPSBkLnN0cmVhbXM/LmZpbmQoKHMpID0+IHMuY29kZWNwYXIuY29kZWNUeXBlID09PSBBVk1FRElBX1RZUEVfVklERU8pO1xuICBpZiAoIXN0cmVhbSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcInByb2JlOiBubyB2aWRlbyBzdHJlYW1cIik7XG4gIH1cbiAgY29uc3QgZHVyYXRpb24gPSBkLmR1cmF0aW9uID4gMCA/IGQuZHVyYXRpb24gOiAwO1xuICBjb25zdCB0YiA9IHN0cmVhbS50aW1lQmFzZS5udW0gLyBzdHJlYW0udGltZUJhc2UuZGVuO1xuICB1c2luZyBkZWMgPSBhd2FpdCBEZWNvZGVyLmNyZWF0ZShzdHJlYW0sIHsgdGhyZWFkQ291bnQ6IDEgfSk7XG4gIGxldCBsZWFkR2FwID0gMDtcbiAgLy8gRmlyc3QgY2xlYW4gZnJhbWUncyBQVFMgPSB3aGVyZSBjb250ZW50IGJlZ2luczsgc2tpcCBjb3JydXB0IGZyYW1lcyBsaWtlIGEgYnJvd3Nlci5cbiAgb3V0ZXI6IGZvciBhd2FpdCAodXNpbmcgcGt0IG9mIGQucGFja2V0cyhzdHJlYW0uaW5kZXgpKSB7XG4gICAgdHJ5IHtcbiAgICAgIGZvciBhd2FpdCAodXNpbmcgZnJhbWUgb2YgZGVjLmZyYW1lcyhwa3QpKSB7XG4gICAgICAgIGlmIChmcmFtZT8uZGVjb2RlRXJyb3JGbGFncyAhPT0gMCkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGxlYWRHYXAgPSBNYXRoLm1heCgwLCBOdW1iZXIoZnJhbWUucHRzKSAqIHRiKTtcbiAgICAgICAgYnJlYWsgb3V0ZXI7XG4gICAgICB9XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBjb3JydXB0IHBhY2tldCDigJQgc2tpcCB0byB0aGUgbmV4dFxuICAgIH1cbiAgfVxuICByZXR1cm4geyB3aWR0aDogc3RyZWFtLmNvZGVjcGFyLndpZHRoLCBoZWlnaHQ6IHN0cmVhbS5jb2RlY3Bhci5oZWlnaHQsIGR1cmF0aW9uLCBsZWFkR2FwIH07XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA3LzA2LlxuXG5pbXBvcnQgeyByYW5kb21CeXRlcyB9IGZyb20gXCJub2RlOmNyeXB0b1wiO1xuaW1wb3J0IHsgcmVhZEZpbGUsIHJtIH0gZnJvbSBcIm5vZGU6ZnMvcHJvbWlzZXNcIjtcbmltcG9ydCB7IHRtcGRpciB9IGZyb20gXCJub2RlOm9zXCI7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHsgQ29kZWMsIEZGbXBlZ0Vycm9yLCBGcmFtZSB9IGZyb20gXCJub2RlLWF2XCI7XG5pbXBvcnQgeyBBVl9QSVhfRk1UX1lVVjQyMFAsIEFWRVJST1JfRUFHQUlOLCBBVkVSUk9SX0VPRiB9IGZyb20gXCJub2RlLWF2L2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgRkZfRU5DT0RFUl9MSUJWUFhfVlA5LCBtYWtlUGFja2V0LCBvcGVuVmlkZW9DdHggfSBmcm9tIFwiLi4vLi4vYmFzZS9lbmNvZGVyL21pc2NcIjtcbmltcG9ydCB7IEZvcm1hdE11eGVyIH0gZnJvbSBcIi4uLy4uL2Jhc2UvZW5jb2Rlci9tdXhlclwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFN0dWJFbmNvZGVPcHRpb25zIHtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIGR1cmF0aW9uOiBudW1iZXI7XG59XG5cbi8vIFJlYWwgcGFyc2VhYmxlIG1lZGlhIHdpdGggdGhlIHNvdXJjZSdzIGludHJpbnNpYyBzaXplICsgZHVyYXRpb24sIHNvIEJsaW5rIGxheXMgb3V0IGxpa2UgQ2hyb21lLlxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGVuY29kZVN0dWJXZWJtKHsgd2lkdGgsIGhlaWdodCwgZHVyYXRpb24gfTogU3R1YkVuY29kZU9wdGlvbnMpOiBQcm9taXNlPEJ1ZmZlcj4ge1xuICBjb25zdCBjb2RlYyA9IENvZGVjLmZpbmRFbmNvZGVyQnlOYW1lKEZGX0VOQ09ERVJfTElCVlBYX1ZQOSk7XG4gIGlmICghY29kZWMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYHN0dWI6IGVuY29kZXIgbm90IGZvdW5kOiAke0ZGX0VOQ09ERVJfTElCVlBYX1ZQOX1gKTtcbiAgfVxuICBjb25zdCBwYXRoID0gam9pbih0bXBkaXIoKSwgYHB1cF9zdHViXyR7cmFuZG9tQnl0ZXMoOCkudG9TdHJpbmcoXCJoZXhcIil9LndlYm1gKTtcbiAgdHJ5IHtcbiAgICB7XG4gICAgICBhd2FpdCB1c2luZyBtdXhlciA9IG5ldyBGb3JtYXRNdXhlcihwYXRoKTtcbiAgICAgIC8vIFRpbWViYXNlIDEvMTAwMCAoZnBzIHBhcmFtKSBsZXRzIG9uZSBwYWNrZXQgY2FycnkgdGhlIGZ1bGwgc291cmNlIGR1cmF0aW9uIGluIG1zLlxuICAgICAgdXNpbmcgY3R4ID0gYXdhaXQgb3BlblZpZGVvQ3R4KFxuICAgICAgICB7XG4gICAgICAgICAgY29kZWMsXG4gICAgICAgICAgd2lkdGgsXG4gICAgICAgICAgaGVpZ2h0LFxuICAgICAgICAgIGZwczogMTAwMCxcbiAgICAgICAgICBiaXRyYXRlOiAxMDBfMDAwLFxuICAgICAgICAgIHBpeGVsRm9ybWF0OiBBVl9QSVhfRk1UX1lVVjQyMFAsXG4gICAgICAgICAgb3B0aW9uczogeyBkZWFkbGluZTogXCJyZWFsdGltZVwiLCBcImNwdS11c2VkXCI6IFwiOFwiIH0sXG4gICAgICAgIH0sXG4gICAgICAgIFwic3R1YkN0eC5vcGVuMlwiLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IHN0cmVhbSA9IG11eGVyLmFkZFN0cmVhbShjdHgpO1xuICAgICAgYXdhaXQgbXV4ZXIub3BlbigpO1xuICAgICAgdXNpbmcgc3R1YiA9IG5ldyBTdHViRnJhbWUod2lkdGgsIGhlaWdodCk7XG4gICAgICBjb25zdCBtcyA9IEJpZ0ludChNYXRoLm1heCgxLCBNYXRoLnJvdW5kKGR1cmF0aW9uICogMTAwMCkpKTtcbiAgICAgIHN0dWIuZnJhbWUucHRzID0gMG47XG4gICAgICBzdHViLmZyYW1lLmR1cmF0aW9uID0gbXM7XG4gICAgICBGRm1wZWdFcnJvci50aHJvd0lmRXJyb3IoYXdhaXQgY3R4LnNlbmRGcmFtZShzdHViLmZyYW1lKSwgXCJzdHViQ3R4LnNlbmRGcmFtZVwiKTtcbiAgICAgIEZGbXBlZ0Vycm9yLnRocm93SWZFcnJvcihhd2FpdCBjdHguc2VuZEZyYW1lKG51bGwpLCBcInN0dWJDdHguZmx1c2hcIik7XG4gICAgICB1c2luZyBwa3QgPSBtYWtlUGFja2V0KCk7XG4gICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICBjb25zdCByID0gYXdhaXQgY3R4LnJlY2VpdmVQYWNrZXQocGt0KTtcbiAgICAgICAgaWYgKHIgPT09IEFWRVJST1JfRUFHQUlOIHx8IHIgPT09IEFWRVJST1JfRU9GKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgRkZtcGVnRXJyb3IudGhyb3dJZkVycm9yKHIsIFwic3R1YkN0eC5yZWNlaXZlUGFja2V0XCIpO1xuICAgICAgICBwa3Quc3RyZWFtSW5kZXggPSBzdHJlYW0uaW5kZXg7XG4gICAgICAgIHBrdC5kdXJhdGlvbiA9IG1zO1xuICAgICAgICBwa3QucmVzY2FsZVRzKGN0eC50aW1lQmFzZSwgc3RyZWFtLnRpbWVCYXNlKTtcbiAgICAgICAgYXdhaXQgbXV4ZXIud3JpdGVQYWNrZXQocGt0KTtcbiAgICAgICAgcGt0LnVucmVmKCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhd2FpdCByZWFkRmlsZShwYXRoKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCBybShwYXRoLCB7IGZvcmNlOiB0cnVlIH0pO1xuICB9XG59XG5cbi8vIE93bnMgdGhlIGJsYWNrIHBpeGVsIGJ1ZmZlciBBTkQgaXRzIHplcm8tY29weSBmcmFtZSB2aWV3IOKAlCBgdXNpbmdgIHBpbnMgYm90aCB1bnRpbCBhZnRlciBlbmNvZGUuXG5jbGFzcyBTdHViRnJhbWUgaW1wbGVtZW50cyBEaXNwb3NhYmxlIHtcbiAgcmVhZG9ubHkgZnJhbWU6IEZyYW1lO1xuICBwcml2YXRlIHJlYWRvbmx5IF9idWY6IEJ1ZmZlcjtcblxuICBjb25zdHJ1Y3Rvcih3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcikge1xuICAgIGNvbnN0IGx1bWEgPSB3aWR0aCAqIGhlaWdodDtcbiAgICBjb25zdCBjaHJvbWEgPSBNYXRoLmNlaWwod2lkdGggLyAyKSAqIE1hdGguY2VpbChoZWlnaHQgLyAyKTtcbiAgICB0aGlzLl9idWYgPSBCdWZmZXIuYWxsb2MobHVtYSArIGNocm9tYSAqIDIsIDB4ODApO1xuICAgIHRoaXMuX2J1Zi5maWxsKDAsIDAsIGx1bWEpO1xuICAgIHRoaXMuZnJhbWUgPSBGcmFtZS5mcm9tVmlkZW9CdWZmZXIodGhpcy5fYnVmLCB7IHdpZHRoLCBoZWlnaHQsIGZvcm1hdDogQVZfUElYX0ZNVF9ZVVY0MjBQIH0pO1xuICB9XG5cbiAgW1N5bWJvbC5kaXNwb3NlXSgpOiB2b2lkIHtcbiAgICB0aGlzLmZyYW1lW1N5bWJvbC5kaXNwb3NlXSgpO1xuICB9XG59XG4iLCIvLyBDcmVhdGVkIGJ5IEF1dG9rYWthIChxcTE5MDk2OTg0OTRAZ21haWwuY29tKSBvbiAyMDI2LzA1LzE4LlxuXG5pbXBvcnQgeyB1c2VSZXRyeSB9IGZyb20gXCIuLi8uLi9iYXNlL3JldHJ5XCI7XG5pbXBvcnQgeyBwcm94aWVkVXJsIH0gZnJvbSBcIi4uL25ldHdvcmtcIjtcbmltcG9ydCB7IERlY29kZVNlc3Npb24gfSBmcm9tIFwiLi9kZWNvZGVfc2Vzc2lvblwiO1xuaW1wb3J0IHsgdHlwZSBQcm9iZVJlc3VsdCwgcHJvYmUgfSBmcm9tIFwiLi9wcm9iZVwiO1xuaW1wb3J0IHsgZW5jb2RlU3R1YldlYm0gfSBmcm9tIFwiLi9zdHViXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmlkZW9NZXRhIHtcbiAgaWQ6IHN0cmluZztcbiAgLyoqIEludHJpbnNpYyBzb3VyY2UgZGltZW5zaW9ucyAocmVwb3J0ZWQgYXMgdmlkZW9XaWR0aC92aWRlb0hlaWdodCkuICovXG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICAvKiogRGVjb2RlZCtzY2FsZWQgZnJhbWUgZGltZW5zaW9ucyBhY3R1YWxseSBzZXJ2ZWQgKOKJpCBzb3VyY2U7IGNhcHBlZCB0byB0aGUgZGlzcGxheSBib3gpLiAqL1xuICBmcmFtZVdpZHRoOiBudW1iZXI7XG4gIGZyYW1lSGVpZ2h0OiBudW1iZXI7XG4gIGZwczogbnVtYmVyO1xuICBkdXJhdGlvbjogbnVtYmVyO1xuICAvKiogU2Vjb25kcyBvZiBjb3JydXB0L2VtcHR5IGxlYWRpbmcgY29udGVudCBoZWxkIG9uIHRoZSBmaXJzdCBkZWNvZGFibGUgZnJhbWUuICovXG4gIGxlYWRHYXA6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPcGVuT3B0aW9ucyB7XG4gIHNyYzogc3RyaW5nO1xuICBmcHM6IG51bWJlcjtcbiAgLyoqIERpc3BsYXktYm94IHBpeGVscyAoY2FudmFzIGJhY2tpbmcgc3RvcmUpOyBkZWNvZGUgaXMgZG93bnNjYWxlZCB0byBjb3ZlciB0aGlzLCBuZXZlciB1cHNjYWxlZC4gKi9cbiAgZHN0Vz86IG51bWJlcjtcbiAgZHN0SD86IG51bWJlcjtcbiAgLyoqIG9iamVjdEZpdDsgXCJub25lXCIgbmVlZHMgMToxIG5hdGl2ZSBwaXhlbHMgc28gaXQgc2tpcHMgZG93bnNjYWxlLiAqL1xuICBmaXQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBGcmFtZVNlcnZlciB7XG4gIHByaXZhdGUgX3Nlc3Npb25zID0gbmV3IE1hcDxzdHJpbmcsIERlY29kZVNlc3Npb24+KCk7XG4gIHByaXZhdGUgX3Byb2JlcyA9IG5ldyBNYXA8c3RyaW5nLCBQcm9taXNlPFByb2JlUmVzdWx0Pj4oKTtcbiAgcHJpdmF0ZSBfc3R1YnMgPSBuZXcgTWFwPHN0cmluZywgUHJvbWlzZTxCdWZmZXI+PigpO1xuICBwcml2YXRlIF9zZXEgPSAwO1xuICBwcml2YXRlIF9jbG9zZWQgPSBmYWxzZTtcblxuICAvLyAtZCBkZWNvZGUgYnlwYXNzZXMgdGhlIHdpbmRvdyBpbnRlcmNlcHRvciwgc28gaXQgcmVtYXBzIGhvc3RzIGl0c2VsZiB3aGVuIHRoZSBpbm5lciBwcm94eSBpcyBvbi5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBfdXNlSW5uZXJQcm94eTogYm9vbGVhbikge31cblxuICAvLyBPbmUgc2Vzc2lvbiBwZXIgPHZpZGVvPiBlbGVtZW50OiBhIHNlc3Npb24gaXMgYSBzaW5nbGUgcGxheWJhY2sgaGVhZCwgc28gc2FtZS1zcmMgZWxlbWVudHMgbXVzdCBub3Qgc2hhcmUgaXQuXG4gIGFzeW5jIG9wZW4ob3B0czogT3Blbk9wdGlvbnMpOiBQcm9taXNlPFZpZGVvTWV0YT4ge1xuICAgIGlmICh0aGlzLl9jbG9zZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcImZyYW1lLXNlcnZlcjogY2xvc2VkXCIpO1xuICAgIH1cbiAgICBjb25zdCBzcmMgPSB0aGlzLl91c2VJbm5lclByb3h5ID8gcHJveGllZFVybChvcHRzLnNyYykgOiBvcHRzLnNyYztcbiAgICBjb25zdCBpbmZvID0gYXdhaXQgdGhpcy5wcm9iZUNhY2hlZChzcmMpO1xuICAgIGlmICh0aGlzLl9jbG9zZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcImZyYW1lLXNlcnZlcjogY2xvc2VkXCIpO1xuICAgIH1cbiAgICBsZXQgZnJhbWVXaWR0aCA9IGluZm8ud2lkdGg7XG4gICAgbGV0IGZyYW1lSGVpZ2h0ID0gaW5mby5oZWlnaHQ7XG4gICAgLy8gRG93bnNjYWxlIHRvIGNvdmVyIHRoZSBkaXNwbGF5IGJveCAobmV2ZXIgdXBzY2FsZSk7IG9iamVjdEZpdCBcIm5vbmVcIiBuZWVkcyAxOjEgbmF0aXZlIHBpeGVscy5cbiAgICBpZiAob3B0cy5kc3RXICYmIG9wdHMuZHN0SCAmJiBvcHRzLmZpdCAhPT0gXCJub25lXCIpIHtcbiAgICAgIGNvbnN0IHMgPSBNYXRoLm1pbigxLCBNYXRoLm1heChvcHRzLmRzdFcgLyBpbmZvLndpZHRoLCBvcHRzLmRzdEggLyBpbmZvLmhlaWdodCkpO1xuICAgICAgZnJhbWVXaWR0aCA9IGV2ZW4oaW5mby53aWR0aCAqIHMpO1xuICAgICAgZnJhbWVIZWlnaHQgPSBldmVuKGluZm8uaGVpZ2h0ICogcyk7XG4gICAgfVxuICAgIGNvbnN0IG1ldGE6IFZpZGVvTWV0YSA9IHtcbiAgICAgIGlkOiBTdHJpbmcoKyt0aGlzLl9zZXEpLFxuICAgICAgd2lkdGg6IGluZm8ud2lkdGgsXG4gICAgICBoZWlnaHQ6IGluZm8uaGVpZ2h0LFxuICAgICAgZnJhbWVXaWR0aCxcbiAgICAgIGZyYW1lSGVpZ2h0LFxuICAgICAgZnBzOiBvcHRzLmZwcyxcbiAgICAgIGR1cmF0aW9uOiBpbmZvLmR1cmF0aW9uLFxuICAgICAgbGVhZEdhcDogaW5mby5sZWFkR2FwLFxuICAgIH07XG4gICAgdGhpcy5fc2Vzc2lvbnMuc2V0KG1ldGEuaWQsIG5ldyBEZWNvZGVTZXNzaW9uKG1ldGEsIHNyYykpO1xuICAgIHJldHVybiBtZXRhO1xuICB9XG5cbiAgLy8gRGV0ZXJtaW5pc3RpYyBtZWRpYSByZXF1ZXN0cyByZWRpcmVjdCBoZXJlOiByZWFsIHBhcnNlYWJsZSBieXRlcyB3aXRoIHRydWUgaW50cmluc2ljIHNpemUgKyBkdXJhdGlvbi5cbiAgc3R1YihzcmM6IHN0cmluZyk6IFByb21pc2U8QnVmZmVyPiB7XG4gICAgaWYgKHRoaXMuX2Nsb3NlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZnJhbWUtc2VydmVyOiBjbG9zZWRcIik7XG4gICAgfVxuICAgIGNvbnN0IHJlYWwgPSB0aGlzLl91c2VJbm5lclByb3h5ID8gcHJveGllZFVybChzcmMpIDogc3JjO1xuICAgIGNvbnN0IGhpdCA9IHRoaXMuX3N0dWJzLmdldChyZWFsKTtcbiAgICBpZiAoaGl0KSB7XG4gICAgICByZXR1cm4gaGl0O1xuICAgIH1cbiAgICBjb25zdCBwID0gdGhpcy5wcm9iZUNhY2hlZChyZWFsKS50aGVuKChpbmZvKSA9PlxuICAgICAgZW5jb2RlU3R1YldlYm0oe1xuICAgICAgICB3aWR0aDogaW5mby53aWR0aCxcbiAgICAgICAgaGVpZ2h0OiBpbmZvLmhlaWdodCxcbiAgICAgICAgZHVyYXRpb246IGluZm8uZHVyYXRpb24sXG4gICAgICB9KSxcbiAgICApO1xuICAgIHAuY2F0Y2goKCkgPT4gdGhpcy5fc3R1YnMuZGVsZXRlKHJlYWwpKTtcbiAgICB0aGlzLl9zdHVicy5zZXQocmVhbCwgcCk7XG4gICAgcmV0dXJuIHA7XG4gIH1cblxuICBhc3luYyBnZXRGcmFtZShpZDogc3RyaW5nLCBpZHg6IG51bWJlcik6IFByb21pc2U8QnVmZmVyIHwgdW5kZWZpbmVkPiB7XG4gICAgcmV0dXJuIHRoaXMuX3Nlc3Npb25zLmdldChpZCk/LmdldEZyYW1lKGlkeCk7XG4gIH1cblxuICBhc3luYyBjbG9zZShpZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcyA9IHRoaXMuX3Nlc3Npb25zLmdldChpZCk7XG4gICAgaWYgKCFzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX3Nlc3Npb25zLmRlbGV0ZShpZCk7XG4gICAgYXdhaXQgcy5jbG9zZSgpO1xuICB9XG5cbiAgLy8gRmFpbGVkIHByb2JlcyBldmljdCBzbyBhIHRyYW5zaWVudCBzb3VyY2UgZXJyb3IgY2FuIHJldHJ5IG9uIHRoZSBuZXh0IHJlcXVlc3QuXG4gIHByaXZhdGUgcHJvYmVDYWNoZWQoc3JjOiBzdHJpbmcpOiBQcm9taXNlPFByb2JlUmVzdWx0PiB7XG4gICAgY29uc3QgaGl0ID0gdGhpcy5fcHJvYmVzLmdldChzcmMpO1xuICAgIGlmIChoaXQpIHtcbiAgICAgIHJldHVybiBoaXQ7XG4gICAgfVxuICAgIGNvbnN0IHAgPSB1c2VSZXRyeSh7IGZuOiBwcm9iZSB9KShzcmMpO1xuICAgIHAuY2F0Y2goKCkgPT4gdGhpcy5fcHJvYmVzLmRlbGV0ZShzcmMpKTtcbiAgICB0aGlzLl9wcm9iZXMuc2V0KHNyYywgcCk7XG4gICAgcmV0dXJuIHA7XG4gIH1cblxuICBhc3luYyBjbG9zZUFsbCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLl9jbG9zZWQgPSB0cnVlO1xuICAgIGNvbnN0IHNlc3Npb25zID0gWy4uLnRoaXMuX3Nlc3Npb25zLnZhbHVlcygpXTtcbiAgICB0aGlzLl9zZXNzaW9ucy5jbGVhcigpO1xuICAgIGF3YWl0IFByb21pc2UuYWxsKHNlc3Npb25zLm1hcCgocykgPT4gcy5jbG9zZSgpKSk7XG4gIH1cbn1cblxuLy8gUm91bmQgZG93biB0byBhbiBldmVuIGludGVnZXIgKOKJpTIpIGZvciB0aGUgc2NhbGVyLlxuZnVuY3Rpb24gZXZlbihuOiBudW1iZXIpOiBudW1iZXIge1xuICBjb25zdCByID0gTWF0aC5yb3VuZChuKTtcbiAgcmV0dXJuIE1hdGgubWF4KDIsIHIgLSAociAlIDIpKTtcbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDUvMTguXG5cbmltcG9ydCB7IHByb3RvY29sIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi4vLi4vYmFzZS9sb2dnaW5nXCI7XG5pbXBvcnQgeyBGcmFtZVNlcnZlciwgdHlwZSBWaWRlb01ldGEgfSBmcm9tIFwiLi9mcmFtZV9zZXJ2ZXJcIjtcblxuY29uc3QgVEFHID0gXCJbRnJhbWVQcm90b2NvbF1cIjtcblxuLy8gU2NoZW1lIGlzIHJlZ2lzdGVyZWQgYWxvbmdzaWRlIGBwdXBgIGluIHJlbmRlcmVyL3Byb3RvY29sLnRzIChzaW5nbGUgY2FsbCBvbmx5KS5cbmNvbnN0IFNDSEVNRSA9IFwicHVwLWZyYW1lXCI7XG5cbmNvbnN0IENPUlNfSEVBREVSUzogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgXCJhY2Nlc3MtY29udHJvbC1hbGxvdy1vcmlnaW5cIjogXCIqXCIsXG4gIFwiYWNjZXNzLWNvbnRyb2wtYWxsb3ctbWV0aG9kc1wiOiBcIkdFVCwgT1BUSU9OU1wiLFxuICBcImFjY2Vzcy1jb250cm9sLWFsbG93LWhlYWRlcnNcIjogXCIqXCIsXG59O1xuXG4vLyBNdXN0IGJlIGNhbGxlZCBhZnRlciBhcHAgaXMgcmVhZHkuIERldGVybWluaXN0aWMtb25seSAocmVhbC10aW1lIHZpZGVvcyBzZWxmLXRpY2ssIG5vIGZyYW1lIHByb3RvY29sKS5cbmV4cG9ydCBmdW5jdGlvbiB1c2VGcmFtZVByb3RvY29sKHVzZUlubmVyUHJveHk6IGJvb2xlYW4pOiBBc3luY0Rpc3Bvc2FibGUge1xuICBjb25zdCBmcyA9IG5ldyBGcmFtZVNlcnZlcih1c2VJbm5lclByb3h5KTtcbiAgcHJvdG9jb2wuaGFuZGxlKFNDSEVNRSwgYXN5bmMgKHJlcSkgPT4ge1xuICAgIGlmIChyZXEubWV0aG9kID09PSBcIk9QVElPTlNcIikge1xuICAgICAgcmV0dXJuIG5ldyBSZXNwb25zZShudWxsLCB7IHN0YXR1czogMjA0LCBoZWFkZXJzOiBDT1JTX0hFQURFUlMgfSk7XG4gICAgfVxuICAgIGNvbnN0IHVybCA9IG5ldyBVUkwocmVxLnVybCk7XG4gICAgbG9nZ2VyLmRlYnVnKFRBRywgYCR7cmVxLm1ldGhvZH0gJHt1cmwuaG9zdG5hbWV9JHt1cmwuc2VhcmNofWApO1xuICAgIHRyeSB7XG4gICAgICBsZXQgcmVzOiBSZXNwb25zZTtcbiAgICAgIHN3aXRjaCAodXJsLmhvc3RuYW1lKSB7XG4gICAgICAgIGNhc2UgXCJvcGVuXCI6XG4gICAgICAgICAgcmVzID0ganNvbk9rKFxuICAgICAgICAgICAgYXdhaXQgZnMub3Blbih7XG4gICAgICAgICAgICAgIHNyYzogdXJsLnNlYXJjaFBhcmFtcy5nZXQoXCJzcmNcIikgPz8gXCJcIixcbiAgICAgICAgICAgICAgZnBzOiBpbnQodXJsLCBcImZwc1wiLCAzMCksXG4gICAgICAgICAgICAgIGRzdFc6IGludCh1cmwsIFwid1wiLCAwKSxcbiAgICAgICAgICAgICAgZHN0SDogaW50KHVybCwgXCJoXCIsIDApLFxuICAgICAgICAgICAgICBmaXQ6IHVybC5zZWFyY2hQYXJhbXMuZ2V0KFwiZml0XCIpID8/IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJmcmFtZVwiOlxuICAgICAgICAgIC8vIFBhaW50cyBkcml2ZSB0aGUgdmlydHVhbCBjbG9jaywgc28gc3RhbGwgb24gZGVjb2RlIGluc3RlYWQgb2YgaGFuZGluZyBiYWNrIGEgYmxhY2sgZnJhbWUuXG4gICAgICAgICAgcmVzID0gcmdiYU9rKChhd2FpdCBmcy5nZXRGcmFtZSh1cmwuc2VhcmNoUGFyYW1zLmdldChcImlkXCIpID8/IFwiXCIsIGludCh1cmwsIFwiaWR4XCIsIDEpKSkgPz8gQnVmZmVyLmFsbG9jKDApKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcInN0dWJcIjpcbiAgICAgICAgICByZXMgPSB3ZWJtT2soYXdhaXQgZnMuc3R1Yih1cmwuc2VhcmNoUGFyYW1zLmdldChcInNyY1wiKSA/PyBcIlwiKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJjbG9zZVwiOlxuICAgICAgICAgIGF3YWl0IGZzLmNsb3NlKHVybC5zZWFyY2hQYXJhbXMuZ2V0KFwiaWRcIikgPz8gXCJcIik7XG4gICAgICAgICAgcmVzID0gbmV3IFJlc3BvbnNlKG51bGwsIHsgc3RhdHVzOiAyMDQsIGhlYWRlcnM6IENPUlNfSEVBREVSUyB9KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXMgPSBuZXcgUmVzcG9uc2UoYHVua25vd24gYWN0aW9uOiAke3VybC5ob3N0bmFtZX1gLCB7XG4gICAgICAgICAgICBzdGF0dXM6IDQwNCxcbiAgICAgICAgICAgIGhlYWRlcnM6IENPUlNfSEVBREVSUyxcbiAgICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXM7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc3QgbXNnID0gZSBpbnN0YW5jZW9mIEVycm9yID8gZS5tZXNzYWdlIDogU3RyaW5nKGUpO1xuICAgICAgbG9nZ2VyLmVycm9yKFRBRywgYCR7dXJsLmhvc3RuYW1lfSBmYWlsZWQke3VybC5zZWFyY2h9OiAke21zZ31gKTtcbiAgICAgIHJldHVybiBuZXcgUmVzcG9uc2UobXNnLCB7IHN0YXR1czogNTAwLCBoZWFkZXJzOiBDT1JTX0hFQURFUlMgfSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHtcbiAgICBbU3ltYm9sLmFzeW5jRGlzcG9zZV06IGFzeW5jICgpID0+IHtcbiAgICAgIHByb3RvY29sLnVuaGFuZGxlKFNDSEVNRSk7XG4gICAgICBhd2FpdCBmcy5jbG9zZUFsbCgpO1xuICAgIH0sXG4gIH07XG59XG5cbmZ1bmN0aW9uIGpzb25PayhtZXRhOiBWaWRlb01ldGEpOiBSZXNwb25zZSB7XG4gIHJldHVybiBuZXcgUmVzcG9uc2UoSlNPTi5zdHJpbmdpZnkobWV0YSksIHtcbiAgICBoZWFkZXJzOiB7IC4uLkNPUlNfSEVBREVSUywgXCJjb250ZW50LXR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIgfSxcbiAgfSk7XG59XG5cbi8vIENhY2hlZCBzdHViIEJ1ZmZlciBpcyBzaGFyZWQgYWNyb3NzIHJlc3BvbnNlcyDigJQgY29weSBzbyBhIGNvbnN1bWVyIGNhbid0IGRldGFjaCBpdC5cbmZ1bmN0aW9uIHdlYm1PayhieXRlczogQnVmZmVyKTogUmVzcG9uc2Uge1xuICBjb25zdCBjb3B5ID0gbmV3IFVpbnQ4QXJyYXkoYnl0ZXMuYnl0ZUxlbmd0aCk7XG4gIGNvcHkuc2V0KGJ5dGVzKTtcbiAgcmV0dXJuIG5ldyBSZXNwb25zZShjb3B5LmJ1ZmZlciBhcyBBcnJheUJ1ZmZlciwge1xuICAgIGhlYWRlcnM6IHtcbiAgICAgIC4uLkNPUlNfSEVBREVSUyxcbiAgICAgIFwiY29udGVudC10eXBlXCI6IFwidmlkZW8vd2VibVwiLFxuICAgICAgXCJjYWNoZS1jb250cm9sXCI6IFwibm8tc3RvcmVcIixcbiAgICB9LFxuICB9KTtcbn1cblxuLy8gUmF3IFJHQkEgcGl4ZWxzOyB0aGUgcGFnZSB3cmFwcyB0aGVtIGluIEltYWdlRGF0YSB1c2luZyBtZXRhLndpZHRoL2hlaWdodCBpdCBnb3QgZnJvbSBgb3BlbmAuXG5mdW5jdGlvbiByZ2JhT2soYnl0ZXM6IEJ1ZmZlcik6IFJlc3BvbnNlIHtcbiAgaWYgKGJ5dGVzLmJ5dGVMZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gbmV3IFJlc3BvbnNlKG51bGwsIHsgc3RhdHVzOiA0MTAsIGhlYWRlcnM6IENPUlNfSEVBREVSUyB9KTtcbiAgfVxuICBjb25zdCBjb3B5ID0gbmV3IFVpbnQ4QXJyYXkoYnl0ZXMuYnl0ZUxlbmd0aCk7XG4gIGNvcHkuc2V0KGJ5dGVzKTtcbiAgcmV0dXJuIG5ldyBSZXNwb25zZShjb3B5LmJ1ZmZlciBhcyBBcnJheUJ1ZmZlciwge1xuICAgIGhlYWRlcnM6IHtcbiAgICAgIC4uLkNPUlNfSEVBREVSUyxcbiAgICAgIFwiY29udGVudC10eXBlXCI6IFwiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtXCIsXG4gICAgICBcImNhY2hlLWNvbnRyb2xcIjogXCJuby1zdG9yZVwiLFxuICAgIH0sXG4gIH0pO1xufVxuXG5mdW5jdGlvbiBpbnQodXJsOiBVUkwsIGtleTogc3RyaW5nLCBmYWxsYmFjazogbnVtYmVyKTogbnVtYmVyIHtcbiAgY29uc3QgdiA9IHVybC5zZWFyY2hQYXJhbXMuZ2V0KGtleSk7XG4gIGNvbnN0IG4gPSB2ID8gcGFyc2VJbnQodiwgMTApIDogTmFOO1xuICByZXR1cm4gTnVtYmVyLmlzRmluaXRlKG4pID8gbiA6IGZhbGxiYWNrO1xufVxuIiwiLy8gQ3JlYXRlZCBieSBBdXRva2FrYSAocXExOTA5Njk4NDk0QGdtYWlsLmNvbSkgb24gMjAyNi8wMy8xMy5cblxuaW1wb3J0IHR5cGUgeyBCcm93c2VyV2luZG93LCBOYXRpdmVJbWFnZSwgU2l6ZSB9IGZyb20gXCJlbGVjdHJvblwiO1xuaW1wb3J0IHsgYWR2YW5jZVZpcnR1YWxUaW1lLCBwYXVzZVZpcnR1YWxUaW1lLCByZWJ1aWxkRHJhd2FibGUgfSBmcm9tIFwiLi4vYmFzZS9jZHBcIjtcbmltcG9ydCB7IEVuY29kZXJQaXBlbGluZSB9IGZyb20gXCIuLi9iYXNlL2VuY29kZXIvcGlwZWxpbmVcIjtcbmltcG9ydCB7IHNpemVFcXVhbHMgfSBmcm9tIFwiLi4vYmFzZS9pbWFnZVwiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4uL2Jhc2UvbG9nZ2luZ1wiO1xuaW1wb3J0IHsgQkxBTktfV0FSTl9SQVRJTywgQmxhbmtTdGF0cyB9IGZyb20gXCIuLi9iYXNlL3F1YWxpdHkvYmxhbmtcIjtcbmltcG9ydCB7IERyb3BTdGF0cywgSkFOS19XQVJOX1NDT1JFIH0gZnJvbSBcIi4uL2Jhc2UvcXVhbGl0eS9kcm9wXCI7XG5pbXBvcnQgeyBwZXJpb2RpY2FsIH0gZnJvbSBcIi4uL2Jhc2UvdGltaW5nXCI7XG5pbXBvcnQgeyBGaXJzdEZyYW1lR2F0ZSwgdHlwZSBDYXB0dXJlZEZyYW1lIGFzIEZyYW1lIH0gZnJvbSBcIi4vZnJhbWVfZ2F0ZVwiO1xuaW1wb3J0IHR5cGUgeyBJcGNEb25lUGF5bG9hZCB9IGZyb20gXCIuL2lwY1wiO1xuaW1wb3J0IHR5cGUgeyBJUENSZW5kZXJPcHRpb25zIH0gZnJvbSBcIi4vc2NoZW1hXCI7XG5pbXBvcnQgeyBTY3JlZW5zaG90VGFrZXIgfSBmcm9tIFwiLi9zY3JlZW5zaG90XCI7XG5pbXBvcnQgeyBkZWNvZGVTdGVnbywgZHJhd1N0ZWdvLCBGUkFNRV9TWU5DX01BUktFUl9XSURUSCwgd2FpdFN0ZWdvVGljayB9IGZyb20gXCIuL3N0ZWdvXCI7XG5pbXBvcnQgeyB0aWNrIH0gZnJvbSBcIi4vdGlja1wiO1xuaW1wb3J0IHsgdXNlRnJhbWVQcm90b2NvbCB9IGZyb20gXCIuL3ZpZGVvL3Byb3RvY29sXCI7XG5pbXBvcnQgeyBkaXNwb3NlV2luZG93LCBsb2FkV2luZG93IH0gZnJvbSBcIi4vd2luZG93XCI7XG5cbmNvbnN0IFRBRyA9IFwiW1Nob290XVwiO1xuY29uc3QgUkVOREVSX0ZQUyA9IDI0MDtcblxuaW50ZXJmYWNlIFBhaW50T3B0aW9ucyB7XG4gIHNvdXJjZTogc3RyaW5nO1xuICBmcHM6IG51bWJlcjtcbiAgd2luOiBCcm93c2VyV2luZG93O1xuICBzaXplOiBTaXplO1xuICBtczogbnVtYmVyO1xufVxuXG4vLyBXYWl0cyBmb3IgYSBjb21wb3NpdGVkIGZyYW1lIHdob3NlIHN0ZWdvIHJvdyBtYXRjaGVzIG1zOyBvbiB0aGUgZmlyc3QgZnJhbWUgb25seSwgRmlyc3RGcmFtZUdhdGUgaG9sZHMgdGhlIGZpcnN0IG1hdGNoIGFzIGJhc2VsaW5lIGFuZCBvbmx5IGxldHMgYSBsYXRlciBjb21wb3NpdGUgdGhhdCBkaWZmZXJzIGJleW9uZCB0aHJlc2hvbGQgdGhyb3VnaCwgc28gYSBzdGVnbyByb3cgbGFuZGluZyBiZWZvcmUgdGhlIHBhZ2UncyBmaXJzdCBwYWludCBjYW5ub3QgYmUgY2FwdHVyZWQgYXMgYW4gZW1wdHkgZnJhbWUgMC5cbmFzeW5jIGZ1bmN0aW9uIHBhaW50KHsgd2luLCBmcHMsIHNpemUsIG1zIH06IFBhaW50T3B0aW9ucyk6IFByb21pc2U8RnJhbWUgfCB1bmRlZmluZWQ+IHtcbiAgbGV0IGNsZWFyRGlydHlDaGVjazogVm9pZEZ1bmN0aW9uIHwgdW5kZWZpbmVkO1xuICBjb25zdCBmcmFtZVNpemU6IFNpemUgPSB7IHdpZHRoOiBzaXplLndpZHRoLCBoZWlnaHQ6IHNpemUuaGVpZ2h0ICsgMSB9O1xuICBjb25zdCBpc0ZpcnN0RnJhbWUgPSBNYXRoLmFicygxMDAwIC8gZnBzIC0gbXMpIDwgMTtcbiAgLy8gR2F0ZSB3YWl0cyBhdCBtb3N0IDMwMG1zIGZvciBhIGRpZmZlcmluZyBmcmFtZTsgYSBwYWdlIHRoYXQgc3RheXMgYmxhbmsgaXMgYWNjZXB0ZWQgYXMtaXMuXG4gIGNvbnN0IGdhdGUgPSBpc0ZpcnN0RnJhbWUgPyBuZXcgRmlyc3RGcmFtZUdhdGUoeyB3aWR0aDogc2l6ZS53aWR0aCwgaGVpZ2h0OiBzaXplLmhlaWdodCwgd2luZG93TXM6IDMwMCB9KSA6IHVuZGVmaW5lZDtcbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgbmV3IFByb21pc2U8RnJhbWUgfCB1bmRlZmluZWQ+KChyZXNvbHZlKSA9PiB7XG4gICAgICBjb25zdCBoYW5kbGVyID0gKF9lOiB1bmtub3duLCBfZDogdW5rbm93biwgaW1hZ2U6IE5hdGl2ZUltYWdlKTogdm9pZCA9PiB7XG4gICAgICAgIGNvbnN0IGltYWdlU2l6ZSA9IGltYWdlLmdldFNpemUoKTtcbiAgICAgICAgaWYgKCFzaXplRXF1YWxzKGltYWdlU2l6ZSwgZnJhbWVTaXplKSkge1xuICAgICAgICAgIHJldHVybjsgLy8gbm90IGEgZnVsbCBvdXRwdXQgZnJhbWUgKGUuZy4gYSBwYXJ0aWFsIHJlcGFpbnQgc2xpdmVyKVxuICAgICAgICB9XG4gICAgICAgIC8vIERlY29kZSB0aGUgMi1yb3cgdGFpbCBmaXJzdDsgdGhlIGZ1bGwtZnJhbWUgcmVhZGJhY2sgKH44TUIgbWVtY3B5KSBpcyBwYWlkIG9ubHkgb24gYSBtYXRjaC5cbiAgICAgICAgY29uc3Qgc2xpdmVyID0gaW1hZ2UuY3JvcCh7IHg6IDAsIHk6IGZyYW1lU2l6ZS5oZWlnaHQgLSAyLCB3aWR0aDogRlJBTUVfU1lOQ19NQVJLRVJfV0lEVEgsIGhlaWdodDogMiB9KTtcbiAgICAgICAgY29uc3QgdHMgPSBkZWNvZGVTdGVnbyhzbGl2ZXIudG9CaXRtYXAoKSwgeyB3aWR0aDogRlJBTUVfU1lOQ19NQVJLRVJfV0lEVEgsIGhlaWdodDogMiB9KTtcbiAgICAgICAgaWYgKHRzID09PSB1bmRlZmluZWQgfHwgbXMgLSB0cyA+IDEpIHtcbiAgICAgICAgICByZXR1cm47IC8vIHN0ZWdvIHJvdyBzdGlsbCBiZWhpbmQgdGhlIHRhcmdldCB0aW1lc3RhbXBcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmcmFtZSA9IHsgdHMsIHBpeDogaW1hZ2UudG9CaXRtYXAoKS5zdWJhcnJheSgwLCBzaXplLndpZHRoICogc2l6ZS5oZWlnaHQgKiA0KSB9O1xuICAgICAgICAvLyBXaXRob3V0IHRoZSBnYXRlIGV2ZXJ5IG1hdGNoIGlzIGZpbmFsOyB3aXRoIGl0LCBvbmx5IGEgZnJhbWUgdGhhdCBkaWZmZXJzIGZyb20gdGhlIGJhc2VsaW5lIGxhbmRzLlxuICAgICAgICBpZiAoZ2F0ZSAmJiBnYXRlLmFjY2VwdChmcmFtZSwgcGVyZm9ybWFuY2Uubm93KCkpID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgd2luLndlYkNvbnRlbnRzLm9mZihcInBhaW50XCIsIGhhbmRsZXIpO1xuICAgICAgICByZXNvbHZlKGZyYW1lKTtcbiAgICAgIH07XG4gICAgICB3aW4ud2ViQ29udGVudHMub24oXCJwYWludFwiLCBoYW5kbGVyKTtcbiAgICAgIGNvbnN0IHRpbWVvdXQgPSBpc0ZpcnN0RnJhbWUgPyBmcHMgKiAxMCA6IGZwcyAqIDU7XG4gICAgICBjb25zdCByZWZyZXNoRnBzID0gTWF0aC5mbG9vcihpc0ZpcnN0RnJhbWUgPyBmcHMgOiBmcHMgLyAyKTtcbiAgICAgIGNsZWFyRGlydHlDaGVjayA9IHBlcmlvZGljYWwoYXN5bmMgKHN0dWNrKSA9PiB7XG4gICAgICAgIGlmIChzdHVjayA+PSB0aW1lb3V0KSB7XG4gICAgICAgICAgbG9nZ2VyLndhcm4oVEFHLCBgcGFpbnQgdGltZW91dCBAICR7bXN9YCk7XG4gICAgICAgICAgd2luLndlYkNvbnRlbnRzLm9mZihcInBhaW50XCIsIGhhbmRsZXIpO1xuICAgICAgICAgIHJlc29sdmUoZ2F0ZT8uYmFzZWxpbmUpO1xuICAgICAgICB9IGVsc2UgaWYgKGdhdGU/LmV4cGlyZWQocGVyZm9ybWFuY2Uubm93KCkpKSB7XG4gICAgICAgICAgLy8gTm8gZGlmZmVyaW5nIGZyYW1lIGluc2lkZSB0aGUgd2luZG93OiB0aGUgcGFnZSBzdGFydHMgYmxhbmssIGl0cyB0cnVlIGZpcnN0IGZyYW1lIGlzIHRoZSBiYXNlbGluZS5cbiAgICAgICAgICB3aW4ud2ViQ29udGVudHMub2ZmKFwicGFpbnRcIiwgaGFuZGxlcik7XG4gICAgICAgICAgcmVzb2x2ZShnYXRlLmJhc2VsaW5lKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdHVjayAlIHJlZnJlc2hGcHMgPT09IDApIHtcbiAgICAgICAgICBhd2FpdCByZWJ1aWxkRHJhd2FibGUod2luLndlYkNvbnRlbnRzLCBmcmFtZVNpemUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9LCAxMDAwIC8gZnBzKTtcbiAgICB9KTtcbiAgfSBmaW5hbGx5IHtcbiAgICBjbGVhckRpcnR5Q2hlY2s/LigpO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzaG9vdChvcHRpb25zOiBJUENSZW5kZXJPcHRpb25zKTogUHJvbWlzZTxJcGNEb25lUGF5bG9hZD4ge1xuICBjb25zdCB7IHNvdXJjZSwgZnBzLCB3aWR0aCwgaGVpZ2h0LCBkdXJhdGlvbiwgd2l0aEF1ZGlvLCBvdXRGaWxlcywgZGlzYWJsZUh3Q29kZWMsIHNpZ25hbCwgb25Qcm9ncmVzcyB9ID0gb3B0aW9ucztcbiAgaWYgKHdpdGhBdWRpbykge1xuICAgIGxvZ2dlci53YXJuKFRBRywgXCJhdWRpbyB3aWxsIGJlIGlnbm9yZWQgb24gdGhpcyBtb2RlXCIpO1xuICB9XG4gIGNvbnN0IHRha2VyID0gbmV3IFNjcmVlbnNob3RUYWtlcih7IG1hcmtzOiBvcHRpb25zLnNjcmVlbnNob3RzLCB3aWR0aCwgaGVpZ2h0LCBvdXRGaWxlcyB9KTtcblxuICBhd2FpdCB1c2luZyBfID0gdXNlRnJhbWVQcm90b2NvbChvcHRpb25zLnVzZUlubmVyUHJveHkpO1xuICBjb25zdCB0SW5pdCA9IHBlcmZvcm1hbmNlLm5vdygpO1xuICBjb25zdCB3aW5QID0gbG9hZFdpbmRvdyh7IHNvdXJjZSwgcmVuZGVyZXI6IG9wdGlvbnMsIHNpZ25hbCB9KTtcbiAgYXdhaXQgdXNpbmcgcGlwZWxpbmUgPSBhd2FpdCBFbmNvZGVyUGlwZWxpbmUuY3JlYXRlKHsgd2lkdGgsIGhlaWdodCwgZnBzLCBvdXRGaWxlcywgd2l0aEF1ZGlvLCBkaXNhYmxlSHdDb2RlYyB9KTtcbiAgY29uc3Qgd2luID0gYXdhaXQgd2luUDtcbiAgbG9nZ2VyLmRlYnVnKFRBRywgXCJpbml0IGRvbmU6XCIsIHsgc291cmNlLCBjb3N0OiBNYXRoLnJvdW5kKHBlcmZvcm1hbmNlLm5vdygpIC0gdEluaXQpIH0pO1xuXG4gIGNvbnN0IHRvdGFsID0gTWF0aC5jZWlsKGZwcyAqIGR1cmF0aW9uKTtcbiAgY29uc3QgZnJhbWVJbnRlcnZhbCA9IDEwMDAgLyBmcHM7XG5cbiAgbGV0IHdyaXR0ZW4gPSAwO1xuICBsZXQgcHJvZ3Jlc3MgPSAwO1xuICBsZXQgaGVsZCA9IDA7XG4gIGxldCBsYXN0RnJhbWU6IEZyYW1lIHwgdW5kZWZpbmVkO1xuICBsZXQgc2NyZWVuc2hvdHM6IHN0cmluZ1tdID0gW107XG4gIGNvbnN0IGJsYW5rU3RhdHMgPSBuZXcgQmxhbmtTdGF0cyh3aWR0aCwgaGVpZ2h0KTtcbiAgY29uc3QgZHJvcFN0YXRzID0gbmV3IERyb3BTdGF0cyhmcHMpO1xuICBjb25zdCBjZHAgPSB3aW4ud2ViQ29udGVudHMuZGVidWdnZXI7XG4gIGNvbnN0IG1haW4gPSB3aW4ud2ViQ29udGVudHMubWFpbkZyYW1lO1xuICBjb25zdCBpZnJhbWUgPSBtYWluLmZyYW1lc1swXTtcbiAgdHJ5IHtcbiAgICAvLyBDb21wb3NpdG9yL2NhcHR1cmUgY2FkZW5jZSBjYXAsIE5PVCBvdXRwdXQgZnBzOyBmcmFtZXMgYXJlIGRhbWFnZS1kcml2ZW4gcGVyIHZpcnR1YWwgc3RlcC5cbiAgICB3aW4ud2ViQ29udGVudHMuc2V0RnJhbWVSYXRlKFJFTkRFUl9GUFMpO1xuICAgIGF3YWl0IHBhdXNlVmlydHVhbFRpbWUoY2RwKTtcblxuICAgIC8vIFZpZGVvIG9wZW5zIGxhbmQgb24gd2FsbCB0aW1lIHdoaWxlIHRoZSBjYXB0dXJlIGNsb2NrIGlzIHZpcnR1YWw7IHByaW1lIG9uZSB0aWNrIGF0IDAgc28gZnJhbWUgMCdzIHN0ZWdvIG1hdGNoIGNvbXBvc2l0ZXMgdGhlIGZpcnN0IHBhaW50ZWQgZnJhbWUsIG5vdCB0aGUgcHJlLW9wZW4gZW1wdHkgY2FudmFzLlxuICAgIGlmICh0b3RhbCA+IDAgJiYgaWZyYW1lKSB7XG4gICAgICBhd2FpdCB0aWNrKHsgZnJhbWU6IGlmcmFtZSwgdGltZXN0YW1wTXM6IDAsIHNpZ25hbCB9KTtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBmcmFtZUlkID0gMDsgZnJhbWVJZCA8IHRvdGFsOyBmcmFtZUlkKyspIHtcbiAgICAgIHNpZ25hbD8udGhyb3dJZkFib3J0ZWQoKTtcbiAgICAgIGNvbnN0IGZyYW1lTXMgPSAoZnJhbWVJZCArIDEpICogZnJhbWVJbnRlcnZhbDtcblxuICAgICAgLy8gQXJtIGJlZm9yZSBkcmF3U3RlZ28gc28gdGhlIGNvbW1pdCBhY2sgY2FuJ3QgYmUgbWlzc2VkOyBicmFuY2ggY2F0Y2gga2VlcHMgYW4gZWFybHkgdGljayBmYWlsdXJlIGZyb20gb3JwaGFuaW5nIGl0LlxuICAgICAgY29uc3Qgc3dhcHBlZCA9IHdhaXRTdGVnb1RpY2sod2luLndlYkNvbnRlbnRzKTtcbiAgICAgIHN3YXBwZWQuY2F0Y2goKCkgPT4ge30pO1xuICAgICAgLy8gSW5kZXBlbmRlbnQgdGFyZ2V0cyAoaWZyYW1lIGNsb2NrIHZzIG1haW4tZnJhbWUgc3RlZ28gY2FudmFzKTogb25lIGNvbmN1cnJlbnQgaG9wIGluc3RlYWQgb2YgdHdvIHNlcmlhbCBvbmVzLlxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoW3RpY2soeyBmcmFtZTogaWZyYW1lLCB0aW1lc3RhbXBNczogZnJhbWVNcywgc2lnbmFsIH0pLCBkcmF3U3RlZ28od2luLndlYkNvbnRlbnRzLCBmcmFtZU1zKV0pO1xuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoW2FkdmFuY2VWaXJ0dWFsVGltZShjZHAsIGZyYW1lSW50ZXJ2YWwpLCBzd2FwcGVkXSk7XG4gICAgICBjb25zdCBwYWludGVkID0gYXdhaXQgcGFpbnQoeyBzb3VyY2UsIGZwcywgd2luLCBzaXplOiB7IHdpZHRoLCBoZWlnaHQgfSwgbXM6IGZyYW1lTXMgfSk7XG4gICAgICBpZiAocGFpbnRlZCkge1xuICAgICAgICBoZWxkID0gMDtcbiAgICAgICAgZHJvcFN0YXRzLndyb3RlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBoZWxkKys7XG4gICAgICAgIGRyb3BTdGF0cy5kcm9wcGVkKDEpO1xuICAgICAgfVxuICAgICAgY29uc3QgZnJhbWUgPSBwYWludGVkID8/IGxhc3RGcmFtZTtcbiAgICAgIGlmICghZnJhbWUgfHwgaGVsZCA+PSBmcHMpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGByZW5kZXJlciBleGF1c3RlZCBAICR7ZnJhbWVNc31gKTtcbiAgICAgIH1cbiAgICAgIC8vIFRoZSBjb21wb3NpdG9yIG1heSBwYWludCBxdWlja2VyIHRoYW4gdXMsIG9yIHN0dWNrLCBzbyB3ZSBhdCBsZWFzdCBwYWludCBvbmNlXG4gICAgICBjb25zdCByZXBlYXQgPSBNYXRoLm1heCgxLCBNYXRoLmNlaWwoZnJhbWUudHMgLyBmcmFtZUludGVydmFsIC0gZnJhbWVJZCkpO1xuICAgICAgbGFzdEZyYW1lID0gZnJhbWU7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlcGVhdDsgaSsrKSB7XG4gICAgICAgIHRha2VyLmNhcHR1cmUoZnJhbWVNcywgZnJhbWUucGl4KTtcbiAgICAgICAgYmxhbmtTdGF0cy5zYW1wbGUoZnJhbWUucGl4KTtcbiAgICAgICAgLy8gQXdhaXRlZDogdGhlIGxpbWl0ZXIgcXVldWVzIHdpdGhvdXQgYm91bmQsIHNvIGFuIGVuY29kZXIgc2xvd2VyIHRoYW4gY2FwdHVyZSBwaW5zIG9uZSBmdWxsIEJHUkEgZnJhbWUgcGVyIGJhY2tsb2cgZW50cnkuXG4gICAgICAgIGF3YWl0IHBpcGVsaW5lLmVuY29kZUJHUkEoZnJhbWUucGl4KTtcbiAgICAgICAgd3JpdHRlbisrO1xuICAgICAgfVxuICAgICAgY29uc3QgbmV3UHJvZ3Jlc3MgPSBNYXRoLmZsb29yKCh3cml0dGVuIC8gdG90YWwpICogMTAwKTtcbiAgICAgIGlmIChuZXdQcm9ncmVzcyAhPT0gcHJvZ3Jlc3MpIHtcbiAgICAgICAgcHJvZ3Jlc3MgPSBuZXdQcm9ncmVzcztcbiAgICAgICAgb25Qcm9ncmVzcyhwcm9ncmVzcyk7XG4gICAgICB9XG4gICAgfVxuICB9IGZpbmFsbHkge1xuICAgIGF3YWl0IGRpc3Bvc2VXaW5kb3cod2luKTtcbiAgICBhd2FpdCBwaXBlbGluZS5maW5pc2goKTtcbiAgICBzY3JlZW5zaG90cyA9IGF3YWl0IHRha2VyLmZpbmlzaChsYXN0RnJhbWU/LnBpeCk7XG4gIH1cblxuICBpZiAod3JpdHRlbiA9PT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIm5vIGZyYW1lcyBjYXB0dXJlZFwiKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBibGFuayA9IGJsYW5rU3RhdHMuZmluYWxpemUoKTtcbiAgICBpZiAoYmxhbmsgPj0gQkxBTktfV0FSTl9SQVRJTykge1xuICAgICAgbG9nZ2VyLndhcm4oVEFHLCBgJHtzb3VyY2V9IGJsYW5rLWZyYW1lIHJhdGlvICR7TWF0aC5yb3VuZChibGFuayAqIDEwMCl9JSDigJQgcG9zc2libGUgd2hpdGUvYmxhbmsgc2NyZWVuYCk7XG4gICAgfVxuICAgIGNvbnN0IHsgamFuayB9ID0gZHJvcFN0YXRzLmZpbmFsaXplKCk7XG4gICAgaWYgKGphbmsgPj0gSkFOS19XQVJOX1NDT1JFKSB7XG4gICAgICBsb2dnZXIud2FybihUQUcsIGAke3NvdXJjZX0gamFuayBzY29yZSAke2phbmsudG9GaXhlZCgyKX0g4oCUIGZyYW1lcyBoZWxkIHBhc3QgcGFpbnQgdGltZW91dGApO1xuICAgIH1cbiAgICByZXR1cm4geyB3cml0dGVuLCBvdXRGaWxlcywgYmxhbmssIGphbmssIHNjcmVlbnNob3RzIH07XG4gIH1cbn1cbiIsIi8vIENyZWF0ZWQgYnkgQXV0b2tha2EgKHFxMTkwOTY5ODQ5NEBnbWFpbC5jb20pIG9uIDIwMjYvMDEvMzAuXG5cbmltcG9ydCB7IG9rIH0gZnJvbSBcIm5vZGU6YXNzZXJ0XCI7XG5pbXBvcnQgeyBta2RpciB9IGZyb20gXCJub2RlOmZzL3Byb21pc2VzXCI7XG5pbXBvcnQgeyBkaXJuYW1lIH0gZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHsgYXBwLCBNZW51IH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBzdGFydEVsZWN0cm9uQ3Jhc2hSZXBvcnRlciB9IGZyb20gXCIuL2Jhc2UvY3Jhc2hcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuL2Jhc2UvbG9nZ2luZ1wiO1xuaW1wb3J0IHsgbWFrZUNMSSB9IGZyb20gXCIuL2NvbW1vblwiO1xuaW1wb3J0IHsgdHlwZSBJcGNNc2csIElwY01zZ1R5cGUsIElwY1dyaXRlciB9IGZyb20gXCIuL3JlbmRlcmVyL2lwY1wiO1xuaW1wb3J0IHsgc2V0dXBQdXBQcm90b2NvbCB9IGZyb20gXCIuL3JlbmRlcmVyL3Byb3RvY29sXCI7XG5pbXBvcnQgeyByZW5kZXIgfSBmcm9tIFwiLi9yZW5kZXJlci9yZW5kZXJcIjtcbmltcG9ydCB7IHdpdGhSZXJlbmRlciB9IGZyb20gXCIuL3JlbmRlcmVyL3JlcmVuZGVyXCI7XG5pbXBvcnQgeyBzaG9vdCB9IGZyb20gXCIuL3JlbmRlcmVyL3Nob290XCI7XG5cbmNvbnN0IFRBRyA9IFwiW0FwcF1cIjtcblxucHJvY2Vzcy5lbnZbXCJFTEVDVFJPTl9ESVNBQkxFX1NFQ1VSSVRZX1dBUk5JTkdTXCJdID0gXCIxXCI7XG5cbmZ1bmN0aW9uIHByaW50RmVhdHVyZXMoKSB7XG4gIGxvZ2dlci5kZWJ1ZyhUQUcsIFwiZ3B1IGZlYXR1cmVzOlwiLCBhcHAuZ2V0R1BVRmVhdHVyZVN0YXR1cygpKTtcbn1cblxuY29uc3QgY3RybCA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbmxldCBleGl0aW5nID0gZmFsc2U7XG5cbnN0YXJ0RWxlY3Ryb25DcmFzaFJlcG9ydGVyKCk7XG5NZW51LnNldEFwcGxpY2F0aW9uTWVudShudWxsKTtcbmFwcC5kb2NrPy5oaWRlKCk7XG5hcHAub24oXCJ3aW5kb3ctYWxsLWNsb3NlZFwiLCAoKSA9PiB7fSk7XG5hcHAub24oXCJncHUtaW5mby11cGRhdGVcIiwgcHJpbnRGZWF0dXJlcyk7XG5hcHAub24oXCJiZWZvcmUtcXVpdFwiLCAoZSkgPT4gIWV4aXRpbmcgJiYgZS5wcmV2ZW50RGVmYXVsdCgpKTtcbmFwcC5vbihcIndpbGwtcXVpdFwiLCAoZSkgPT4gIWV4aXRpbmcgJiYgZS5wcmV2ZW50RGVmYXVsdCgpKTtcblxub2socHJvY2Vzcy5zZW5kLCBcImlwYyBjaGFubmVsIG1pc3Npbmcg4oCUIHNwYXduIHdpdGggc3RkaW9bM109J2lwYydcIik7XG5wcm9jZXNzLm9uY2UoXCJkaXNjb25uZWN0XCIsICgpID0+IGN0cmwuYWJvcnQoXCJkaXNjb25uZWN0XCIpKTtcbnByb2Nlc3Mub24oXCJtZXNzYWdlXCIsIChyYXcpID0+IHtcbiAgY29uc3QgbXNnID0gcmF3IGFzIElwY01zZztcbiAgaWYgKG1zZy50eXBlID09PSBJcGNNc2dUeXBlLkNhbmNlbCkge1xuICAgIGN0cmwuYWJvcnQobXNnLnJlYXNvbik7XG4gIH1cbn0pO1xuXG5tYWtlQ0xJKHtcbiAgbmFtZTogXCJhcHBcIixcbiAgcnVuOiBhc3luYyAoc291cmNlLCBvcHRpb25zKSA9PiB7XG4gICAgY29uc3QgaXBjID0gbmV3IElwY1dyaXRlcigpO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBhcHAud2hlblJlYWR5KCk7XG4gICAgICBzZXR1cFB1cFByb3RvY29sKCk7XG4gICAgICBwcmludEZlYXR1cmVzKCk7XG4gICAgICBmb3IgKGNvbnN0IG91dCBvZiBvcHRpb25zLm91dEZpbGVzKSB7XG4gICAgICAgIGF3YWl0IG1rZGlyKGRpcm5hbWUob3V0KSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICB9XG4gICAgICBjb25zdCBhY3Rpb24gPSBvcHRpb25zLmRldGVybWluaXN0aWMgPyBzaG9vdCA6IHJlbmRlcjtcbiAgICAgIGN0cmwuc2lnbmFsLnRocm93SWZBYm9ydGVkKCk7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB3aXRoUmVyZW5kZXIoY3RybC5zaWduYWwsICgpID0+XG4gICAgICAgIGFjdGlvbih7XG4gICAgICAgICAgc291cmNlLFxuICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgc2lnbmFsOiBjdHJsLnNpZ25hbCxcbiAgICAgICAgICBvblByb2dyZXNzOiAocCkgPT4gaXBjLndyaXRlUHJvZ3Jlc3MocCksXG4gICAgICAgICAgb25Db25zb2xlOiAobCwgbSkgPT4gaXBjLndyaXRlQ29uc29sZShsLCBtKSxcbiAgICAgICAgfSksXG4gICAgICApO1xuICAgICAgYXdhaXQgaXBjLndyaXRlRG9uZShyZXN1bHQpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnN0IGVycm9yID0gZSBhcyBFcnJvcjtcbiAgICAgIGNvbnN0IG0gPSBlcnJvci5zdGFjayA/PyBlcnJvci5tZXNzYWdlID8/IFN0cmluZyhlID8/IFwidW5rbm93biBlcnJvclwiKTtcbiAgICAgIGF3YWl0IGlwYy53cml0ZUVycm9yKG0pO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBleGl0aW5nID0gdHJ1ZTtcbiAgICAgIGFwcC5leGl0KCk7XG4gICAgfVxuICB9LFxufSk7XG4iXX0=
|